texlive[57291] Build/source/utils: asy 2.68 sources

commits+karl at tug.org commits+karl at tug.org
Sat Jan 2 17:31:31 CET 2021


Revision: 57291
          http://tug.org/svn/texlive?view=revision&revision=57291
Author:   karl
Date:     2021-01-02 17:31:31 +0100 (Sat, 02 Jan 2021)
Log Message:
-----------
asy 2.68 sources

Modified Paths:
--------------
    trunk/Build/source/utils/README
    trunk/Build/source/utils/asymptote/BUGS
    trunk/Build/source/utils/asymptote/ChangeLog
    trunk/Build/source/utils/asymptote/Delaunay.cc
    trunk/Build/source/utils/asymptote/GUI/Window1.py
    trunk/Build/source/utils/asymptote/GUI/configs/xasyconfig.cson
    trunk/Build/source/utils/asymptote/GUI/icons_rc.py
    trunk/Build/source/utils/asymptote/GUI/setup.py
    trunk/Build/source/utils/asymptote/GUI/xasy2asy.py
    trunk/Build/source/utils/asymptote/INSTALL
    trunk/Build/source/utils/asymptote/Makefile.in
    trunk/Build/source/utils/asymptote/ReleaseNotes
    trunk/Build/source/utils/asymptote/access.cc
    trunk/Build/source/utils/asymptote/access.h
    trunk/Build/source/utils/asymptote/align.h
    trunk/Build/source/utils/asymptote/angle.h
    trunk/Build/source/utils/asymptote/application.cc
    trunk/Build/source/utils/asymptote/application.h
    trunk/Build/source/utils/asymptote/array.cc
    trunk/Build/source/utils/asymptote/array.h
    trunk/Build/source/utils/asymptote/arrayop.h
    trunk/Build/source/utils/asymptote/asy-keywords.el
    trunk/Build/source/utils/asymptote/asy.list
    trunk/Build/source/utils/asymptote/asymptote.nsi
    trunk/Build/source/utils/asymptote/asymptote.spec
    trunk/Build/source/utils/asymptote/base/animation.asy
    trunk/Build/source/utils/asymptote/base/asy-mode.el
    trunk/Build/source/utils/asymptote/base/babel.asy
    trunk/Build/source/utils/asymptote/base/bezulate.asy
    trunk/Build/source/utils/asymptote/base/binarytree.asy
    trunk/Build/source/utils/asymptote/base/bsp.asy
    trunk/Build/source/utils/asymptote/base/colormap.asy
    trunk/Build/source/utils/asymptote/base/contour.asy
    trunk/Build/source/utils/asymptote/base/contour3.asy
    trunk/Build/source/utils/asymptote/base/embed.asy
    trunk/Build/source/utils/asymptote/base/external.asy
    trunk/Build/source/utils/asymptote/base/feynman.asy
    trunk/Build/source/utils/asymptote/base/flowchart.asy
    trunk/Build/source/utils/asymptote/base/geometry.asy
    trunk/Build/source/utils/asymptote/base/graph.asy
    trunk/Build/source/utils/asymptote/base/graph3.asy
    trunk/Build/source/utils/asymptote/base/graph_splinetype.asy
    trunk/Build/source/utils/asymptote/base/grid3.asy
    trunk/Build/source/utils/asymptote/base/interpolate.asy
    trunk/Build/source/utils/asymptote/base/labelpath3.asy
    trunk/Build/source/utils/asymptote/base/lmfit.asy
    trunk/Build/source/utils/asymptote/base/math.asy
    trunk/Build/source/utils/asymptote/base/metapost.asy
    trunk/Build/source/utils/asymptote/base/obj.asy
    trunk/Build/source/utils/asymptote/base/ode.asy
    trunk/Build/source/utils/asymptote/base/palette.asy
    trunk/Build/source/utils/asymptote/base/patterns.asy
    trunk/Build/source/utils/asymptote/base/plain.asy
    trunk/Build/source/utils/asymptote/base/plain_Label.asy
    trunk/Build/source/utils/asymptote/base/plain_arcs.asy
    trunk/Build/source/utils/asymptote/base/plain_arrows.asy
    trunk/Build/source/utils/asymptote/base/plain_bounds.asy
    trunk/Build/source/utils/asymptote/base/plain_margins.asy
    trunk/Build/source/utils/asymptote/base/plain_picture.asy
    trunk/Build/source/utils/asymptote/base/plain_shipout.asy
    trunk/Build/source/utils/asymptote/base/rationalSimplex.asy
    trunk/Build/source/utils/asymptote/base/slide.asy
    trunk/Build/source/utils/asymptote/base/slopefield.asy
    trunk/Build/source/utils/asymptote/base/three.asy
    trunk/Build/source/utils/asymptote/base/three_light.asy
    trunk/Build/source/utils/asymptote/base/three_surface.asy
    trunk/Build/source/utils/asymptote/base/three_tube.asy
    trunk/Build/source/utils/asymptote/base/tube.asy
    trunk/Build/source/utils/asymptote/base/webgl/asygl.js
    trunk/Build/source/utils/asymptote/bbox.h
    trunk/Build/source/utils/asymptote/bbox3.h
    trunk/Build/source/utils/asymptote/beziercurve.cc
    trunk/Build/source/utils/asymptote/beziercurve.h
    trunk/Build/source/utils/asymptote/bezierpatch.cc
    trunk/Build/source/utils/asymptote/bezierpatch.h
    trunk/Build/source/utils/asymptote/build-scripts/HOWTO-MSWindows
    trunk/Build/source/utils/asymptote/build-scripts/README-binaries
    trunk/Build/source/utils/asymptote/build-scripts/build-asygl
    trunk/Build/source/utils/asymptote/build-scripts/build-asymptote.dos
    trunk/Build/source/utils/asymptote/builtin.cc
    trunk/Build/source/utils/asymptote/builtin.h
    trunk/Build/source/utils/asymptote/callable.h
    trunk/Build/source/utils/asymptote/camperror.cc
    trunk/Build/source/utils/asymptote/camperror.h
    trunk/Build/source/utils/asymptote/castop.h
    trunk/Build/source/utils/asymptote/coder.cc
    trunk/Build/source/utils/asymptote/coder.h
    trunk/Build/source/utils/asymptote/common.h
    trunk/Build/source/utils/asymptote/config.guess
    trunk/Build/source/utils/asymptote/config.h.in
    trunk/Build/source/utils/asymptote/config.sub
    trunk/Build/source/utils/asymptote/configure
    trunk/Build/source/utils/asymptote/configure.ac
    trunk/Build/source/utils/asymptote/constructor.cc
    trunk/Build/source/utils/asymptote/dec.cc
    trunk/Build/source/utils/asymptote/dec.h
    trunk/Build/source/utils/asymptote/doc/CAD.pdf
    trunk/Build/source/utils/asymptote/doc/CDlabel.asy
    trunk/Build/source/utils/asymptote/doc/FAQ/asy-faq.bfnn
    trunk/Build/source/utils/asymptote/doc/FAQ/asy-faq.info
    trunk/Build/source/utils/asymptote/doc/FAQ/bfnnconv.pl
    trunk/Build/source/utils/asymptote/doc/FAQ/install-sh
    trunk/Build/source/utils/asymptote/doc/FAQ/m-html.pl
    trunk/Build/source/utils/asymptote/doc/HermiteSpline.asy
    trunk/Build/source/utils/asymptote/doc/TeXShopAndAsymptote.pdf
    trunk/Build/source/utils/asymptote/doc/asy-latex.pdf
    trunk/Build/source/utils/asymptote/doc/asy.1
    trunk/Build/source/utils/asymptote/doc/asyRefCard.pdf
    trunk/Build/source/utils/asymptote/doc/asymptote.pdf
    trunk/Build/source/utils/asymptote/doc/asymptote.texi
    trunk/Build/source/utils/asymptote/doc/diatom.asy
    trunk/Build/source/utils/asymptote/doc/elliptic.asy
    trunk/Build/source/utils/asymptote/doc/exp.asy
    trunk/Build/source/utils/asymptote/doc/extra/intro.asy
    trunk/Build/source/utils/asymptote/doc/flowchartdemo.asy
    trunk/Build/source/utils/asymptote/doc/icon.asy
    trunk/Build/source/utils/asymptote/doc/imagecontour.asy
    trunk/Build/source/utils/asymptote/doc/install-sh
    trunk/Build/source/utils/asymptote/doc/leastsquares.asy
    trunk/Build/source/utils/asymptote/doc/legend.asy
    trunk/Build/source/utils/asymptote/doc/linetype.asy
    trunk/Build/source/utils/asymptote/doc/logo.asy
    trunk/Build/source/utils/asymptote/doc/markers1.asy
    trunk/Build/source/utils/asymptote/doc/png/asymptote.info
    trunk/Build/source/utils/asymptote/doc/secondaryaxis.asy
    trunk/Build/source/utils/asymptote/drawclipbegin.h
    trunk/Build/source/utils/asymptote/drawclipend.h
    trunk/Build/source/utils/asymptote/drawelement.h
    trunk/Build/source/utils/asymptote/drawfill.cc
    trunk/Build/source/utils/asymptote/drawfill.h
    trunk/Build/source/utils/asymptote/drawgrestore.h
    trunk/Build/source/utils/asymptote/drawgroup.h
    trunk/Build/source/utils/asymptote/drawgsave.h
    trunk/Build/source/utils/asymptote/drawimage.h
    trunk/Build/source/utils/asymptote/drawlabel.cc
    trunk/Build/source/utils/asymptote/drawlabel.h
    trunk/Build/source/utils/asymptote/drawlayer.h
    trunk/Build/source/utils/asymptote/drawpath.cc
    trunk/Build/source/utils/asymptote/drawpath.h
    trunk/Build/source/utils/asymptote/drawpath3.cc
    trunk/Build/source/utils/asymptote/drawpath3.h
    trunk/Build/source/utils/asymptote/drawsurface.cc
    trunk/Build/source/utils/asymptote/drawsurface.h
    trunk/Build/source/utils/asymptote/drawverbatim.h
    trunk/Build/source/utils/asymptote/entry.cc
    trunk/Build/source/utils/asymptote/entry.h
    trunk/Build/source/utils/asymptote/env.cc
    trunk/Build/source/utils/asymptote/env.h
    trunk/Build/source/utils/asymptote/errormsg.cc
    trunk/Build/source/utils/asymptote/errormsg.h
    trunk/Build/source/utils/asymptote/examples/1overx.asy
    trunk/Build/source/utils/asymptote/examples/BezierPatch.asy
    trunk/Build/source/utils/asymptote/examples/BezierSurface.asy
    trunk/Build/source/utils/asymptote/examples/Gouraud.asy
    trunk/Build/source/utils/asymptote/examples/Klein.asy
    trunk/Build/source/utils/asymptote/examples/NURBScurve.asy
    trunk/Build/source/utils/asymptote/examples/NURBSsphere.asy
    trunk/Build/source/utils/asymptote/examples/NURBSsurface.asy
    trunk/Build/source/utils/asymptote/examples/RiemannSphere.asy
    trunk/Build/source/utils/asymptote/examples/RiemannSurface.asy
    trunk/Build/source/utils/asymptote/examples/RiemannSurfaceRoot.asy
    trunk/Build/source/utils/asymptote/examples/SierpinskiGasket.asy
    trunk/Build/source/utils/asymptote/examples/SierpinskiSponge.asy
    trunk/Build/source/utils/asymptote/examples/animations/slidemovies.asy
    trunk/Build/source/utils/asymptote/examples/bars3.asy
    trunk/Build/source/utils/asymptote/examples/centroidfg.asy
    trunk/Build/source/utils/asymptote/examples/colorpatch.asy
    trunk/Build/source/utils/asymptote/examples/colorplanes.asy
    trunk/Build/source/utils/asymptote/examples/conicurv.asy
    trunk/Build/source/utils/asymptote/examples/contextfonts.asy
    trunk/Build/source/utils/asymptote/examples/controlsystem.asy
    trunk/Build/source/utils/asymptote/examples/cosaddition.asy
    trunk/Build/source/utils/asymptote/examples/cpkcolors.asy
    trunk/Build/source/utils/asymptote/examples/curvedlabel3.asy
    trunk/Build/source/utils/asymptote/examples/dimension.asy
    trunk/Build/source/utils/asymptote/examples/electromagnetic.asy
    trunk/Build/source/utils/asymptote/examples/equilchord.asy
    trunk/Build/source/utils/asymptote/examples/fequlogo.asy
    trunk/Build/source/utils/asymptote/examples/filesurface.asy
    trunk/Build/source/utils/asymptote/examples/fillcontour.asy
    trunk/Build/source/utils/asymptote/examples/fin.asy
    trunk/Build/source/utils/asymptote/examples/floatingdisk.asy
    trunk/Build/source/utils/asymptote/examples/floor.asy
    trunk/Build/source/utils/asymptote/examples/gamma.asy
    trunk/Build/source/utils/asymptote/examples/gamma3.asy
    trunk/Build/source/utils/asymptote/examples/genustwo.asy
    trunk/Build/source/utils/asymptote/examples/imagehistogram.asy
    trunk/Build/source/utils/asymptote/examples/integraltest.asy
    trunk/Build/source/utils/asymptote/examples/interpolate1.asy
    trunk/Build/source/utils/asymptote/examples/jump.asy
    trunk/Build/source/utils/asymptote/examples/label3zoom.asy
    trunk/Build/source/utils/asymptote/examples/linearregression.asy
    trunk/Build/source/utils/asymptote/examples/lmfit1.asy
    trunk/Build/source/utils/asymptote/examples/logo3.asy
    trunk/Build/source/utils/asymptote/examples/lowupint.asy
    trunk/Build/source/utils/asymptote/examples/markregular.asy
    trunk/Build/source/utils/asymptote/examples/mergeExample.asy
    trunk/Build/source/utils/asymptote/examples/mosaic.asy
    trunk/Build/source/utils/asymptote/examples/mosquito.asy
    trunk/Build/source/utils/asymptote/examples/near_earth.asy
    trunk/Build/source/utils/asymptote/examples/oneoverx.asy
    trunk/Build/source/utils/asymptote/examples/pathintersectsurface.asy
    trunk/Build/source/utils/asymptote/examples/pdb.asy
    trunk/Build/source/utils/asymptote/examples/pipes.asy
    trunk/Build/source/utils/asymptote/examples/poster.asy
    trunk/Build/source/utils/asymptote/examples/projectrevolution.asy
    trunk/Build/source/utils/asymptote/examples/rainbow.asy
    trunk/Build/source/utils/asymptote/examples/roll.asy
    trunk/Build/source/utils/asymptote/examples/roundpath.asy
    trunk/Build/source/utils/asymptote/examples/shadestroke.asy
    trunk/Build/source/utils/asymptote/examples/sinxlex.asy
    trunk/Build/source/utils/asymptote/examples/slidedemo.asy
    trunk/Build/source/utils/asymptote/examples/slope.asy
    trunk/Build/source/utils/asymptote/examples/soccerball.asy
    trunk/Build/source/utils/asymptote/examples/spectrum.asy
    trunk/Build/source/utils/asymptote/examples/sphereskeleton.asy
    trunk/Build/source/utils/asymptote/examples/spiral3.asy
    trunk/Build/source/utils/asymptote/examples/spline.asy
    trunk/Build/source/utils/asymptote/examples/splitpatch.asy
    trunk/Build/source/utils/asymptote/examples/spring.asy
    trunk/Build/source/utils/asymptote/examples/stereoscopic.asy
    trunk/Build/source/utils/asymptote/examples/strokeshade.asy
    trunk/Build/source/utils/asymptote/examples/teapot.asy
    trunk/Build/source/utils/asymptote/examples/thermodynamics.asy
    trunk/Build/source/utils/asymptote/examples/torus.asy
    trunk/Build/source/utils/asymptote/examples/triads.asy
    trunk/Build/source/utils/asymptote/examples/triangle.asy
    trunk/Build/source/utils/asymptote/examples/truncatedIcosahedron.asy
    trunk/Build/source/utils/asymptote/examples/tvgen.asy
    trunk/Build/source/utils/asymptote/examples/twistedtubes.asy
    trunk/Build/source/utils/asymptote/examples/unitoctant.asy
    trunk/Build/source/utils/asymptote/examples/vertexshading.asy
    trunk/Build/source/utils/asymptote/examples/worldmap.asy
    trunk/Build/source/utils/asymptote/examples/xstitch.asy
    trunk/Build/source/utils/asymptote/examples/xxsq01x-1.asy
    trunk/Build/source/utils/asymptote/examples/xxsq01y.asy
    trunk/Build/source/utils/asymptote/examples/yingyang.asy
    trunk/Build/source/utils/asymptote/exp.cc
    trunk/Build/source/utils/asymptote/exp.h
    trunk/Build/source/utils/asymptote/fftw++.h
    trunk/Build/source/utils/asymptote/fileio.cc
    trunk/Build/source/utils/asymptote/fileio.h
    trunk/Build/source/utils/asymptote/flatguide.h
    trunk/Build/source/utils/asymptote/fpu.h
    trunk/Build/source/utils/asymptote/frame.h
    trunk/Build/source/utils/asymptote/fundec.cc
    trunk/Build/source/utils/asymptote/fundec.h
    trunk/Build/source/utils/asymptote/genv.cc
    trunk/Build/source/utils/asymptote/glew.c
    trunk/Build/source/utils/asymptote/glrender.cc
    trunk/Build/source/utils/asymptote/glrender.h
    trunk/Build/source/utils/asymptote/gsl.cc
    trunk/Build/source/utils/asymptote/guide.cc
    trunk/Build/source/utils/asymptote/guide.h
    trunk/Build/source/utils/asymptote/guideflags.h
    trunk/Build/source/utils/asymptote/impdatum.cc
    trunk/Build/source/utils/asymptote/inst.h
    trunk/Build/source/utils/asymptote/install-sh
    trunk/Build/source/utils/asymptote/interact.cc
    trunk/Build/source/utils/asymptote/interact.h
    trunk/Build/source/utils/asymptote/item.h
    trunk/Build/source/utils/asymptote/jsfile.cc
    trunk/Build/source/utils/asymptote/jsfile.h
    trunk/Build/source/utils/asymptote/knot.cc
    trunk/Build/source/utils/asymptote/knot.h
    trunk/Build/source/utils/asymptote/lexical.h
    trunk/Build/source/utils/asymptote/locate.cc
    trunk/Build/source/utils/asymptote/locate.h
    trunk/Build/source/utils/asymptote/main.cc
    trunk/Build/source/utils/asymptote/material.h
    trunk/Build/source/utils/asymptote/mathop.h
    trunk/Build/source/utils/asymptote/memory.h
    trunk/Build/source/utils/asymptote/mod.h
    trunk/Build/source/utils/asymptote/name.cc
    trunk/Build/source/utils/asymptote/name.h
    trunk/Build/source/utils/asymptote/newexp.cc
    trunk/Build/source/utils/asymptote/newexp.h
    trunk/Build/source/utils/asymptote/opcodes.h
    trunk/Build/source/utils/asymptote/pair.h
    trunk/Build/source/utils/asymptote/parser.cc
    trunk/Build/source/utils/asymptote/parser.h
    trunk/Build/source/utils/asymptote/path.cc
    trunk/Build/source/utils/asymptote/path.h
    trunk/Build/source/utils/asymptote/path3.cc
    trunk/Build/source/utils/asymptote/path3.h
    trunk/Build/source/utils/asymptote/pen.h
    trunk/Build/source/utils/asymptote/picture.cc
    trunk/Build/source/utils/asymptote/picture.h
    trunk/Build/source/utils/asymptote/pipestream.cc
    trunk/Build/source/utils/asymptote/pipestream.h
    trunk/Build/source/utils/asymptote/policy.h
    trunk/Build/source/utils/asymptote/prcfile.h
    trunk/Build/source/utils/asymptote/primitives.h
    trunk/Build/source/utils/asymptote/process.cc
    trunk/Build/source/utils/asymptote/process.h
    trunk/Build/source/utils/asymptote/profiler.h
    trunk/Build/source/utils/asymptote/program.cc
    trunk/Build/source/utils/asymptote/program.h
    trunk/Build/source/utils/asymptote/psfile.cc
    trunk/Build/source/utils/asymptote/psfile.h
    trunk/Build/source/utils/asymptote/record.cc
    trunk/Build/source/utils/asymptote/record.h
    trunk/Build/source/utils/asymptote/refaccess.cc
    trunk/Build/source/utils/asymptote/revision.cc
    trunk/Build/source/utils/asymptote/rounding.h
    trunk/Build/source/utils/asymptote/runarray.cc
    trunk/Build/source/utils/asymptote/runarray.in
    trunk/Build/source/utils/asymptote/runbacktrace.in
    trunk/Build/source/utils/asymptote/runfile.cc
    trunk/Build/source/utils/asymptote/runfile.in
    trunk/Build/source/utils/asymptote/runhistory.cc
    trunk/Build/source/utils/asymptote/runhistory.in
    trunk/Build/source/utils/asymptote/runlabel.cc
    trunk/Build/source/utils/asymptote/runlabel.in
    trunk/Build/source/utils/asymptote/runmath.cc
    trunk/Build/source/utils/asymptote/runmath.in
    trunk/Build/source/utils/asymptote/runpair.cc
    trunk/Build/source/utils/asymptote/runpair.in
    trunk/Build/source/utils/asymptote/runpath.cc
    trunk/Build/source/utils/asymptote/runpath.in
    trunk/Build/source/utils/asymptote/runpath3d.cc
    trunk/Build/source/utils/asymptote/runpath3d.in
    trunk/Build/source/utils/asymptote/runpicture.cc
    trunk/Build/source/utils/asymptote/runpicture.in
    trunk/Build/source/utils/asymptote/runstring.cc
    trunk/Build/source/utils/asymptote/runstring.in
    trunk/Build/source/utils/asymptote/runsystem.cc
    trunk/Build/source/utils/asymptote/runsystem.in
    trunk/Build/source/utils/asymptote/runtime.cc
    trunk/Build/source/utils/asymptote/runtime.in
    trunk/Build/source/utils/asymptote/runtimebase.in
    trunk/Build/source/utils/asymptote/runtriple.cc
    trunk/Build/source/utils/asymptote/runtriple.in
    trunk/Build/source/utils/asymptote/seconds.h
    trunk/Build/source/utils/asymptote/settings.cc
    trunk/Build/source/utils/asymptote/settings.h
    trunk/Build/source/utils/asymptote/shaders.cc
    trunk/Build/source/utils/asymptote/shaders.h
    trunk/Build/source/utils/asymptote/simpson.cc
    trunk/Build/source/utils/asymptote/stack.cc
    trunk/Build/source/utils/asymptote/stack.h
    trunk/Build/source/utils/asymptote/statistics.h
    trunk/Build/source/utils/asymptote/stm.cc
    trunk/Build/source/utils/asymptote/stm.h
    trunk/Build/source/utils/asymptote/symbol.cc
    trunk/Build/source/utils/asymptote/symbol.h
    trunk/Build/source/utils/asymptote/texfile.cc
    trunk/Build/source/utils/asymptote/texfile.h
    trunk/Build/source/utils/asymptote/tr.cc
    trunk/Build/source/utils/asymptote/tr.h
    trunk/Build/source/utils/asymptote/transform.h
    trunk/Build/source/utils/asymptote/triple.h
    trunk/Build/source/utils/asymptote/types.cc
    trunk/Build/source/utils/asymptote/types.h
    trunk/Build/source/utils/asymptote/util.cc
    trunk/Build/source/utils/asymptote/util.h
    trunk/Build/source/utils/asymptote/varinit.cc
    trunk/Build/source/utils/asymptote/varinit.h
    trunk/Build/source/utils/asymptote/vm.h
    trunk/Build/source/utils/asymptote/wce
    trunk/Build/source/utils/asymptote/webgl/gl.js
    trunk/Build/source/utils/asymptote/webgl/license
    trunk/Build/source/utils/asymptote/xstream.h

Added Paths:
-----------
    trunk/Build/source/utils/asymptote/base/map.asy
    trunk/Build/source/utils/asymptote/build-scripts/asy-format.el
    trunk/Build/source/utils/asymptote/build-scripts/asy-indent.el
    trunk/Build/source/utils/asymptote/build-scripts/cc-format.el
    trunk/Build/source/utils/asymptote/build-scripts/cc-indent.el
    trunk/Build/source/utils/asymptote/build-scripts/run-in-indent.el
    trunk/Build/source/utils/asymptote/cc-mode2.el
    trunk/Build/source/utils/asymptote/examples/100d.pdb1
    trunk/Build/source/utils/asymptote/examples/axialshade.asy
    trunk/Build/source/utils/asymptote/examples/pOrbital.asy
    trunk/Build/source/utils/asymptote/examples/unitoctantx.asy

Removed Paths:
-------------
    trunk/Build/source/utils/asymptote/base/latin1.asy
    trunk/Build/source/utils/asymptote/base/unicode.asy
    trunk/Build/source/utils/asymptote/examples/p-orbital.asy

Modified: trunk/Build/source/utils/README
===================================================================
--- trunk/Build/source/utils/README	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/README	2021-01-02 16:31:31 UTC (rev 57291)
@@ -4,7 +4,7 @@
 Extra utilities we (optionally) compile for TeX Live.
 See comments in ../texk/README.
 
-asymptote 2.65 - checked 26mar20
+asymptote 2.68 - checked 2jan21
   update to TL from CTAN, to include prebuilt doc.
   see http://tug.org/texlive/build.html#asymptote
   and tlpkg/bin/tl-update-asy

Modified: trunk/Build/source/utils/asymptote/BUGS
===================================================================
--- trunk/Build/source/utils/asymptote/BUGS	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/BUGS	2021-01-02 16:31:31 UTC (rev 57291)
@@ -2,5 +2,5 @@
 is still present in the latest git developmental code before submitting a
 bug report.
 
-New bugs can be submitted using the Bug Tracking System at
-http://asymptote.sourceforge.net/
+New bugs can be submitted at
+https://github.com/vectorgraphics/asymptote/issues

Modified: trunk/Build/source/utils/asymptote/ChangeLog
===================================================================
--- trunk/Build/source/utils/asymptote/ChangeLog	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/ChangeLog	2021-01-02 16:31:31 UTC (rev 57291)
@@ -1,3 +1,1329 @@
+commit 3b88c382bf0dd59daa6427a9fc4f03c246b5d218
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sun Nov 22 18:02:21 2020 -0700
+
+    Fix normalization in tube rendering.
+
+commit 31ab4195580be6ac65ad226d29a568c82147e166
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sun Nov 22 15:09:09 2020 -0700
+
+    Update freeglut installation instructions.
+
+commit 7cedd768019efd0fe435fa7d7a8b281298f4d6ba
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sun Nov 22 10:34:07 2020 -0700
+
+    Work around further floating point exceptions in OpenGL libraries.
+
+commit 437aef9cb8ae639727f635b51121a00fdb16423d
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sun Nov 22 01:29:47 2020 -0700
+
+    Add Label align(Label,dir) for aligning Label normal in direction dir.
+
+commit df6f1c2641fd51975a11244be7b66c477f73a856
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sat Nov 21 22:15:22 2020 -0700
+
+    Add settings.compress=true option to control PDF image compression.
+
+commit a36959ecbdc74fe83720dd28a009d65e16a0302a
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sat Nov 21 21:48:36 2020 -0700
+
+    Implement bool isometry(transform) function.
+
+commit 1108f83337b6d6f2ac33b9fd0bb0fb47c0578065
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sat Nov 21 21:18:53 2020 -0700
+
+    Fix bug2 #149 and #154 (thanks to Oliver Guibe).
+
+commit b1ab048d6cf6b703a992a296c870d3b1c5a63b3e
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sat Nov 21 20:54:05 2020 -0700
+
+    Skip over uninitialized elements of transposed arrays.
+
+commit 959cdd4823cb1e61b407878c89a66ae97a90e326
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Fri Nov 20 23:33:21 2020 -0700
+
+     Work around floating point exceptions (FE_INVALID) in OpenGL libraries.
+
+commit d541f69d20ed7d7a88e25cfe08323780796439ff
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Thu Nov 19 14:30:13 2020 -0700
+
+    Qualify namespace.
+
+commit f8de14a7ed23d3496188275092c731f8a0fc9aa5
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Thu Nov 19 11:51:58 2020 -0700
+
+    Restore image enccoding.
+
+commit 9606da530260600112145360c3eaadada1ed645f
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Mon Nov 16 09:57:35 2020 -0700
+
+    Fix comment.
+
+commit f513ffde5c8540e1b45a93fd0391541a6f4aa2f7
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Mon Nov 16 09:53:28 2020 -0700
+
+    Read null fields as undefined values in cvs mode and in line mode.
+
+commit 5402f40f5c752ed3069a8102b9a1f46a561bc8b0
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sun Nov 15 23:35:42 2020 -0700
+
+    Fix warning message.
+
+commit e67fba800818c8713165829ee64268c445355da3
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sun Nov 15 00:26:51 2020 -0700
+
+    Fix more uninitialized variables.
+
+commit ea1eca1727d19625c5be8359cd88d38236eb0737
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sun Nov 15 00:06:41 2020 -0700
+
+    Fix uninitialized variable.
+
+commit a9d1f7abf90309502026af608db3aed4cb405ce2
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sat Nov 14 23:44:25 2020 -0700
+
+    Return unbounded direction in rationalSimplex.
+
+commit ac9ece43497c23bba3d0738db5a0fb1e8e7090d8
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sun Nov 8 12:49:10 2020 -0700
+
+    Fix comment.
+
+commit 4d6872d552573ba947d3a524549b159d322ff284
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sun Nov 8 12:39:12 2020 -0700
+
+    Add RELEASE variable.
+
+commit a3d85fb37e5a28e021f417b8355362b03f93b5d1
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Tue Oct 27 21:49:55 2020 -0600
+
+    Always define xStandard in optimal case in rationalSimplex.
+
+commit 5ced24a1d9658364e76ddc04a9b61890ee53d543
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Tue Oct 27 03:18:54 2020 -0600
+
+    Support logarithmic graphs of surfaces.
+
+commit e688d42e33a521facdb050c77b454b819478d3fd
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sun Oct 25 23:08:36 2020 -0600
+
+    Open files without assuming an asy suffix.
+
+commit 3361214340d58235f4dbb8f24017d0cd5d94da72
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sun Oct 25 22:24:51 2020 -0600
+
+    Use ps2write instead of eps2write where possible, for compatibility with gs 9.53.
+
+commit 42b291049920c2a023ab5f3598cc917eb36297ca
+Merge: e62d0401 d9826965
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sun Oct 25 20:18:21 2020 -0600
+
+    Merge branch 'spotrh-curl-config', standardized.
+
+commit d9826965be5768c417b790fb6ff6ba59aeb89246
+Merge: e62d0401 a055a0ae
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sun Oct 25 20:09:49 2020 -0600
+
+    Merge branch 'curl-config' of https://github.com/spotrh/asymptote into spotrh-curl-config.
+
+commit e62d040114aaadfa9c3a6d6a70cd001cdea11e36
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sun Oct 25 20:01:06 2020 -0600
+
+    Make end argument of Margin functions optional.
+
+commit e5db49aa7b3ede25ae2cf4c08adfe2fe533420b1
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sun Oct 25 19:59:54 2020 -0600
+
+    Expose solution to standard problem in rationalSimplex.
+
+commit 69e5f0cc8ccdb8128319c4cd8c1f13cae01ce82d
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sat Oct 10 00:11:57 2020 -0600
+
+    Make --version indicate if configured for OSMesa software rendering.
+
+commit d54e2ac82481e410ffa2bb52a1fb9d217d95eb98
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Wed Oct 7 17:39:51 2020 -0600
+
+    Add high resolution wall clock time.
+
+commit a055a0ae813e7ed443b3d48e0822e5e7199bef65
+Author: Tom Callaway <spot at fedoraproject.org>
+Date:   Fri Oct 2 18:50:51 2020 -0400
+
+    add --disable-curl option to prevent curl check and compile without optional URL support
+
+commit 27a55b7891214aa0654e7a97207c5ba762ceb1aa
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Mon Sep 14 13:48:03 2020 -0600
+
+    Fix centering of slides.
+
+commit 576b7333baf56cd833a1098dd85a22af1bbfdafb
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Fri Aug 28 21:56:16 2020 -0600
+
+    Support null characters and null strings in replace.
+
+commit be534393f9b3404573479dc9851817e6c5fbda94
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Mon Aug 24 12:59:25 2020 -0600
+
+    Disable image encoding in PDF conversion.
+
+commit 1fd27cc14606206aba81bf131e0bef36e9329457
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sat Aug 22 12:15:26 2020 -0600
+
+    Fix extraction of git revision.
+
+commit 8dbece952d9ddece1349215243c473bafcc7b4c6
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sat Aug 22 09:56:46 2020 -0600
+
+    Fix configuration without readline support.
+
+commit d6500a226b021edf99002596f7226015950dc6af
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Thu Aug 20 22:47:49 2020 -0600
+
+    Allow binary mode to read the entire file into a string.
+
+commit 880ef36e9878dfbcdcf28b953d11bfd392805643
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Thu Aug 20 21:04:51 2020 -0600
+
+    Fix getc when reading NUL character.
+
+commit e3ac2208915f6c496974a8dc3342861de4f2e2d1
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sat Aug 15 12:52:42 2020 -0600
+
+    Fix commit 986d64236b299c1643451f4e774170cb8ebcec00.
+
+commit 6cea1c06c2054f1b7433e2d01ed6a2ec863b6726
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Thu Aug 13 16:06:15 2020 -0600
+
+    Update URLs.
+
+commit af12ec3b6fcca4e273dad4fdd3b431bada30608f
+Merge: 986d6423 68682879
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sun Aug 9 08:29:58 2020 -0600
+
+    Merge pull request #170 from bmwiedemann/date
+    
+    Allow to override build date with SOURCE_DATE_EPOCH.
+
+commit 68682879ce9704606fb0d46734dfaba4966de9b5
+Author: Bernhard M. Wiedemann <bwiedemann at suse.de>
+Date:   Sun Aug 9 14:10:55 2020 +0200
+
+    Allow to override build date with SOURCE_DATE_EPOCH
+    
+    in order to make builds reproducible.
+    See https://reproducible-builds.org/ for why this is good
+    and https://reproducible-builds.org/specs/source-date-epoch/
+    for the definition of this variable.
+    
+    Also consistently use ISO 8601 date format to be understood everywhere.
+    This also avoids %B and %h that are locale-dependent.
+    
+    Also use UTC/gmtime to be independent of timezone.
+    
+    Also rewrite the shell `date` calls into perl to avoid
+    trouble with the different date command implementations.
+    
+    This PR was done while working on reproducible builds for openSUSE.
+
+commit 986d64236b299c1643451f4e774170cb8ebcec00
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sat Aug 8 11:18:38 2020 -0600
+
+    Fix last revision.
+
+commit 4c06e580baa7051128d3e8ab4b06a0315a1eecd7
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sat Aug 8 01:05:57 2020 -0600
+
+    Simplify code.
+
+commit d2f6e59eb42763c2e9a1f6ca5e057f6bf13991cd
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Thu Aug 6 22:27:33 2020 -0600
+
+    Fix last revision.
+
+commit 7ae96b7754d1025c02be514e3d31433cce52b609
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Thu Aug 6 22:05:07 2020 -0600
+
+    Remove -0 suffix from git version for tagged releases.
+
+commit 610c4624a7ac69ee4ccfedd6075b1cb28c14d7ce
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Wed Aug 5 23:39:05 2020 -0600
+
+    Fix last revision.
+
+commit dc4243ccd1c5ab766241707ab10f16d7c9738ef7
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Wed Aug 5 23:34:47 2020 -0600
+
+    Backport curlProgress to libCurl < 7.32.
+
+commit 94f99a26ab9b72f3a3fbc2239f9e7b529b7166e2
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Wed Aug 5 22:18:03 2020 -0600
+
+    Increment version to 2.68.
+
+commit bccdb51e0cfa5b7b7bf5c08c1f9496a7ba9a012d
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Wed Aug 5 17:45:17 2020 -0600
+
+    Reformat run*.in files.
+
+commit 37bf3ce87aed185a465da781db931a68aff7745d
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Wed Aug 5 17:01:26 2020 -0600
+
+    Allow URL requests to be interrupted.
+
+commit 92d7b6fe3bbd0d1ee5238ac5d87469e6d17e89f4
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Wed Aug 5 16:19:42 2020 -0600
+
+    Port to MSDOS.
+
+commit 9dc14b7b56eeaddae51c5f24012ac51a5faf93f9
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Wed Aug 5 01:56:15 2020 -0600
+
+    Fix hang on quit under MSDOS.
+
+commit bfefd605c7eb661f03eba5405795d6dff3e9cd43
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Tue Aug 4 22:50:32 2020 -0600
+
+    Fix readline interrupt handling under MacOS X.
+
+commit 1fb62259fe1b94a5b3ef0b44ce7f7d32a3be76b3
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Tue Aug 4 12:40:53 2020 -0600
+
+    Remove xasy link from MSDOS build.
+
+commit 5050ce7ee703ef3ec3c4d84cd420a019178c6859
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Mon Aug 3 14:18:29 2020 -0600
+
+    Reformat examples.
+
+commit 372ae2ca61bea75271c85549dd166b71d4dc72b4
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Mon Aug 3 13:59:33 2020 -0600
+
+    Indent projection output.
+
+commit b552792d5adb112b469ea55e8b95ffc299969ec0
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Mon Aug 3 13:20:15 2020 -0600
+
+    Add C++ and asy indenting and formatting Emacs lisp scripts.
+
+commit b03e2ba9dc2287c16869dc51e87fe5715eb3c2d4
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sun Aug 2 23:08:08 2020 -0600
+
+    Fix last revision.
+
+commit 55406a03c263d9a33c22f823110bee247146ffdc
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sun Aug 2 22:52:47 2020 -0600
+
+    Fix compilation without libcurl.
+
+commit e0f8c79e64f4b2d14f0dbd6f95472480bd718b72
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sun Aug 2 22:50:42 2020 -0600
+
+    Reformat base files.
+
+commit ef00491a49965e998549a2df0bb6d01fb4bb7d61
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sun Aug 2 21:13:13 2020 -0600
+
+    Reformat .cc and .h files.
+
+commit 5de4352e05ba6a03f95a128b81e702d6a3d27314
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sun Aug 2 20:21:07 2020 -0600
+
+    Update asygl.
+
+commit 98b22e43550672e01cf257f982380efa18f4f92b
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sun Aug 2 19:15:52 2020 -0600
+
+    Document newpage.
+
+commit 083efd7710a851e2e33331bcbac9ac42cf4dabe6
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sun Aug 2 18:12:45 2020 -0600
+
+    Avoid unnecessary remesh on zoom in AsyGL.
+
+commit 23c2ac57fd6336eda71251c25a7324732e1433d9
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sun Aug 2 18:00:30 2020 -0600
+
+    Force remeshing on export.
+
+commit bfc7bc0db8ca496f5ea9545024f84749ae3ea636
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sun Aug 2 17:50:26 2020 -0600
+
+    Fix exporting when devicepixelratio > 1.
+
+commit 5e57b75e78b4d596cdc00d3a35a2c8c40df17f90
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sat Aug 1 21:02:48 2020 -0600
+
+    Implement devicepixelratio setting.
+
+commit ef0bb9f3fd39c3528fd963b27c6989c3287faacf
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sat Aug 1 20:27:52 2020 -0600
+
+    Extend URL support to input().
+
+commit 45e8475ce686ca92aad94488c10824fc1f1d044f
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sat Aug 1 14:41:48 2020 -0600
+
+    Support importing URLs.
+
+commit 81b4d1e85225fb540c8cf64d733b810ab3ab07d6
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Fri Jul 31 18:18:57 2020 -0600
+
+    Remove obsolete code.
+
+commit 2e497032037cff813426a1ece1f42ec1ab924d68
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Wed Jul 29 22:58:25 2020 -0600
+
+    Fix interrupt handling under MacOS X.
+
+commit c2c8c095416e766063ad0af943d1a931d14095e0
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Wed Jul 29 01:52:40 2020 -0600
+
+    Implement portable whitespace skipping also for pairs.
+
+commit ed3e87bb4795ac6cf648af9b4f12e2418efad11a
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Wed Jul 29 01:35:03 2020 -0600
+
+    Implement portable way of skipping whitespace.
+    Make casts from empty strings yield uninitialized values.
+
+commit 8ba38823755e09de6463a42396e1db7291276254
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Tue Jul 28 21:06:49 2020 -0600
+
+    Simplify code.
+
+commit ad7054342d291ce32f71951b7e7eeea381d29efb
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Tue Jul 28 21:05:19 2020 -0600
+
+    Fix numerical precision issue.
+
+commit 111cd165f5c7f4a0496a9efbf746d4f2a316a48c
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Mon Jul 27 00:30:18 2020 -0600
+
+    Format documentation.
+
+commit 9193d9d8ee934b325e575d405631d4fb252b1d8d
+Merge: ef016d74 013e0cb2
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Mon Jul 27 00:20:41 2020 -0600
+
+    Merge pull request #144 from ivankokan/master
+    
+    Obsolete *encoding modules
+
+commit 013e0cb25362e46cecb40ea468aa95e66788dd12
+Merge: aa8a5244 ef016d74
+Author: Ivan Kokan <ivan.kokan at gmail.com>
+Date:   Mon Jul 27 02:26:20 2020 +0200
+
+    Merge branch 'master' into master
+
+commit ef016d741c443e8e84ff8248a9622c820813b754
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sun Jul 26 17:47:02 2020 -0600
+
+    Document that clipping has no notion of depth.
+
+commit 1b11525273e0661d3a3f4f8dc988b29982e7f5c2
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sun Jul 26 12:15:06 2020 -0600
+
+    Fix segmentation fault caused by obsolete code.
+
+commit eb1ec4d911ee9b4c3f34a07505183291d3793e6e
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sun Jul 26 11:34:09 2020 -0600
+
+    Update documentation.
+
+commit 6473c8487d59a4891c406cd127b3bb2d200ebe62
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sun Jul 26 11:02:35 2020 -0600
+
+    Simplify code.
+
+commit 52b458f036b7f9222a084ffef4e94092342608bf
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sat Jul 25 20:56:11 2020 -0600
+
+    Fix copy constructors for path and path3.
+
+commit e5da02595a16d3a6adc60cd9d4589b5cf31b4fd3
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sat Jul 25 17:59:27 2020 -0600
+
+    Port to MacOS X.
+
+commit bb56b10d431a5acd66b28c4a4bb22ba99ef7c1c8
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Fri Jul 24 00:09:24 2020 -0600
+
+    Improve repositioning of OpenGL window.
+
+commit 47f463e5a739c02838fd549e7a4dc3b0f8471f21
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Thu Jul 23 03:39:28 2020 -0600
+
+    Always reposition OpenGL window when not fitting to screen.
+
+commit 1ba366e2ba2380e17c81df2b6cd4114869745ad4
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Wed Jul 22 20:19:12 2020 -0600
+
+    Normalize triple dir(path3, path3).
+
+commit bc0b6499e5f71b36a3177f677db5277078164dbd
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Wed Jul 22 00:39:18 2020 -0600
+
+    Prevent xasy from hanging on asy errors.
+
+commit dee047a7596538e2012152c52a753938ea9d310b
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Mon Jul 20 00:31:32 2020 -0600
+
+    Update asygl.
+
+commit 7574872dca70fda79c6cd65e350b57fc135bd794
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Mon Jul 20 00:28:29 2020 -0600
+
+    Make + and - keys zoom in and out, rather than expand and shrink viewport.
+
+commit 2066ef194ec9f7c135b165ea8b157e78320306a6
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sat Jul 18 22:46:22 2020 -0600
+
+    Update asygl.
+
+commit 5089b775299a17831a86c4ae38d1081de3e1282a
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sat Jul 18 22:45:58 2020 -0600
+
+    Improve resizing.
+
+commit 242615a1b755ea943603daad9aa6060e5f2eca1e
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sat Jul 18 20:44:53 2020 -0600
+
+    Workaround JSON bug by escaping colons.
+
+commit 7294cb2bf8a3fc0c182b36c9b1ee8b49cc5a8b3d
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Fri Jul 17 13:07:35 2020 -0600
+
+    Update asygl.
+
+commit 5a2bd75f8f8ee73c0617896f0d1183fe4c673c05
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Fri Jul 17 13:06:43 2020 -0600
+
+    Fix absolute mode.
+
+commit 55e4e0dba58565b91ae1dd1df715b49db339a305
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Fri Jul 17 12:47:08 2020 -0600
+
+    Update asygl.
+
+commit ba16a591ca3b924fb1e9db399f4c942d36341d68
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Fri Jul 17 12:46:45 2020 -0600
+
+    Reset initial zoom.
+
+commit c47728d59cb3d9a8ffb394cbffb79c2ddc631816
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Fri Jul 17 12:25:14 2020 -0600
+
+    Update asygl.
+
+commit e0281de557eb186728d66fd0c183d65a50b8f0b5
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Fri Jul 17 12:24:18 2020 -0600
+
+    Always listen for WebGL resize events.
+
+commit 99c614d893cea7dffb9a41c13c20460248944cd2
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Thu Jul 16 23:23:58 2020 -0600
+
+    Document settings.absolute.
+
+commit af6c53a9825bc1e2dc73f8aa8a720b299d6a4e6c
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Thu Jul 16 23:00:29 2020 -0600
+
+    Fix invalid array dimensions error.
+
+commit b5eac1db427fbc956d01b243fffc2b4f20415355
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Wed Jul 15 11:41:01 2020 -0600
+
+    Update example.
+
+commit 9c9caaca5c63f04bde69205e0da9e163ee256344
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Wed Jul 15 02:59:52 2020 -0600
+
+    Disable cd with -noglobalread.
+
+commit 0278c8841589770d71e2803e57dcfb6ce002cfcf
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Wed Jul 15 01:00:25 2020 -0600
+
+    Allow reading from search path even with -noglobalread.
+
+commit cf7c0373f82cb7d1de78bb95d7b619e096552628
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Wed Jul 15 00:13:00 2020 -0600
+
+    Add examples directory to search path.
+
+commit 516d7847b2a58425c7763bbb0e79eebea7f72c15
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Tue Jul 14 23:14:10 2020 -0600
+
+    Fix inpath.
+
+commit 0a5015b2f86a656a8b04d2592a606b68bb6e4d53
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Tue Jul 14 16:42:20 2020 -0600
+
+    Add missing file.
+
+commit cde71e2634cd45113f60cd9aec96f0221e1b1d58
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Tue Jul 14 16:37:57 2020 -0600
+
+    Install data file.
+
+commit 2056aa9c63bd1bf9fc7f3cdb7415aa7c1cefbe07
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Tue Jul 14 16:12:41 2020 -0600
+
+    Add -globalread setting (default true).
+
+commit 246022516af218d6ae4cebf027965479d049b8d9
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Tue Jul 14 10:57:38 2020 -0600
+
+    Open files using search path.
+
+commit 2e4762d4381307876a100e42116592d8aba3a75a
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Tue Jul 14 01:56:07 2020 -0600
+
+    Reinstate putting clipPath definitions in <defs> section, with fix to Gouraud shading.
+
+commit 5b5c8aeddfe9e99eec14c30591713f4d128bb8cf
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Tue Jul 14 01:52:54 2020 -0600
+
+    Revert "Put clipPath definitions in <defs> section."
+    
+    This reverts commit fbf03b07cfbabaeb7be861ac652f4b46fdc0e2cb.
+
+commit fbf03b07cfbabaeb7be861ac652f4b46fdc0e2cb
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Tue Jul 14 01:24:40 2020 -0600
+
+    Put clipPath definitions in <defs> section.
+
+commit 62bfac5dc40fe8f9ceefe2f834fdf6febd5971d5
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Tue Jul 14 00:56:40 2020 -0600
+
+    Use distinct clipping IDs.
+
+commit 5778d7e16e456bf9caacdadcf354ccfd41aff4c2
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Tue Jul 14 00:39:31 2020 -0600
+
+    Fix svg clipping.
+
+commit cd0faa137d52fea979e73b3748986cbcd396f882
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Mon Jul 13 02:23:24 2020 -0600
+
+    Remove unused svg transform.
+
+commit 29004b9576e08e6da0aae0df07ea08351e555953
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sun Jul 12 16:42:38 2020 -0600
+
+    Remove duplicate </head>.
+
+commit a2eb67615714aaa43674da43b8e5be8f597dbb1f
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sun Jul 12 09:34:59 2020 -0600
+
+    Support compilation and 2D svg to html conversion without GLM library.
+
+commit 89ca60bd9e8ea5b23d7deea2dfdf2d54b8496d25
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sat Jul 11 23:50:35 2020 -0600
+
+    Display error location in interactive mode when importing files;
+    output to stderr.
+
+commit 4c0160df84ee208b7f0b4f6480405299d4ae94d4
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sat Jul 11 02:27:54 2020 -0600
+
+    Display error location.
+
+commit bde2b3f814ffaf77f10bf78352b34f3584523734
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Fri Jul 10 19:37:51 2020 -0600
+
+    Remove body margin and scrollbar.
+
+commit 7bb9309de9929be530547de88d1cdeac052f2231
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Fri Jul 10 12:53:41 2020 -0600
+
+    Fit 2D html output to canvas unless settings.absolute=true.
+
+commit 497363ecde2cc4856756ed54ae2723799a183674
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Fri Jul 10 12:49:41 2020 -0600
+
+    Show dvisvgm diagnostics.
+
+commit 97843dd13d26027a05a108e16f60f910703648b7
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Thu Jul 9 16:08:10 2020 -0600
+
+    Fix tutorial URL.
+
+commit b6d53dc435fda60c836606f8d763dbdaf56e8501
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Thu Jul 9 09:34:10 2020 -0600
+
+    Fix format in documentation.
+
+commit aa8a5244e46c1d04300513a4107245a3575ceedd
+Author: ivankokan <ivan.kokan at gmail.com>
+Date:   Thu Jul 9 15:53:58 2020 +0200
+
+    Format docs
+
+commit 9cca9e9106e6ad4aa89389d25b11712d7ac4edec
+Merge: e0b8e3de d968c027
+Author: Ivan Kokan <ivan.kokan at gmail.com>
+Date:   Thu Jul 9 15:14:31 2020 +0200
+
+    Merge branch 'master' into master
+
+commit d968c027432b225800655e508fa00bff2da086b5
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Thu Jul 9 00:58:10 2020 -0600
+
+    Improve logo3.
+
+commit 3fd657ee90bc66143b86d7c15a3eb28200e88611
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Tue Jul 7 23:06:48 2020 -0600
+
+    Work around dvisvgm bug.
+
+commit 978d0e0d8ce48a7f71d1880dea6454133c8f6698
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Tue Jul 7 02:01:25 2020 -0600
+
+    Increment version to 2.67.
+
+commit 695f398ded015ec27835b833f29d220794c45831
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Mon Jul 6 22:54:59 2020 -0600
+
+    Enable PDF transparency for SVG and HTML formats.
+
+commit 4ec6f561926704c685739dd77183e2c56929db80
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Mon Jul 6 22:44:19 2020 -0600
+
+    Only implement PDF transparency for PDF formats.
+
+commit f030d57672c300689ad4b955f8bd5ab897cfffc9
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Mon Jul 6 22:34:53 2020 -0600
+
+    Remove unused code.
+
+commit c1083e547bd5c43c2baf253d5ffbf376aa1b49eb
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Mon Jul 6 20:52:05 2020 -0600
+
+    Work around broken signals on MSWindows.
+
+commit 6e050f717ffeea7701c9de1e2b8ffe5ff9b9a7cb
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Mon Jul 6 00:04:25 2020 -0600
+
+    Fix tempdir.
+
+commit a6c626a111b49512bf8e54e4482d3aef47d63555
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sun Jul 5 22:20:28 2020 -0600
+
+    Update documentation.
+
+commit 7b7b491898243d71f190b4ebad02e92805b8d0d1
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sun Jul 5 21:34:08 2020 -0600
+
+    Document the Asymptote Web Application.
+
+commit ef354c08562686b6afdd5aafd6e63fe1edfdf0ef
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sun Jul 5 20:20:09 2020 -0600
+
+    Remove unused variable.
+
+commit 6129a12bd26dd018d38cd96c62e8fa74b5cf36a9
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sun Jul 5 20:11:27 2020 -0600
+
+    Fix pdfreload.
+
+commit fa3122974baecf2d7743e87705f3b12c913e560b
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sun Jul 5 01:44:07 2020 -0600
+
+    Use custom tmpdir for dvisvgm to avoid permission conflicts.
+
+commit 042ab6b6973dc045ad80a5e99ecf29034f67416b
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sun Jul 5 00:20:44 2020 -0600
+
+    Fix pdfoffsets.
+
+commit b081ac0d5b435bcb1531fd8d6211b552f62a8679
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sat Jul 4 03:26:15 2020 -0600
+
+    Update dependencies.
+
+commit bd9c1e2def171eea72ea13f7755a2601da4401f8
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Fri Jul 3 01:46:42 2020 -0600
+
+    Fix fullscreen mode. The default maxviewport value of (0,0) now specifies
+    the screen dimensions.
+
+commit 499234d65838272830fc133635729be93474ebfa
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Thu Jul 2 22:55:56 2020 -0600
+
+    Remove X-server dependency for offscreen rendering.
+
+commit 217bb1c86beaa5daa7dbea6691a9a7afb088c355
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Thu Jul 2 14:36:45 2020 -0600
+
+    Remove obsolete offscreen setting.
+
+commit 1ddfc8e10bb10020c77b550217743b9b77f0a845
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Thu Jul 2 11:35:12 2020 -0600
+
+    Add missing conditionals; simplify code.
+
+commit c19d2327b109655e9a99c795bc2724738af3fc3c
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Thu Jul 2 11:20:01 2020 -0600
+
+    Support offscreen rendering again when configured with --enable-offscreen.
+
+commit b800078b4d81c126cf43984b12d876e919292e7c
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Thu Jul 2 00:14:30 2020 -0600
+
+    Work around FE_INVALID when using Gallium libGL.
+
+commit 6c6267318f959de91711984d192d96846fe11dae
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Mon Jun 29 01:38:31 2020 -0600
+
+    Fix warning message.
+
+commit 117081fc1c6909080df76502b15dfcb1576cd0c6
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Mon Jun 29 01:31:13 2020 -0600
+
+    Fix warning message.
+
+commit d573cbb922fac2f8106e70afdf9637e2ce2d6d36
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Mon Jun 29 00:48:08 2020 -0600
+
+    Fix documentation of mapTemplate.
+
+commit 9bdd507eabc2e5f9dbe2b3c2fde74c0552156372
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Mon Jun 29 00:39:47 2020 -0600
+
+    Illustrate how to create parametrized code by implementing a struct
+    mapping keys to values, with a specified default. Also implement mapArray,
+    simplifying the construction of general array mappings.
+
+commit 9cdbfd99e9e6bc80055c3929016d7a65e589f690
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sat Jun 27 23:35:55 2020 -0600
+
+    Redefine map2 to map, T1 to mapFrom and T2 to mapTo.
+
+commit 24631469c445b7722566ccfe1b4a91e6cca70c19
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Fri Jun 26 21:23:38 2020 -0600
+
+    Add map2 code for defining T2[] map(T2 f(T1), T1[] a).
+
+commit 503273b5f076f3a46083922b6e0f8a892001a763
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Fri Jun 26 04:31:57 2020 -0600
+
+    Fix bug #162: opening .asy file in Xasy crashes on MSWindows.
+
+commit 7ddc5b161a2cb3394e6ae0b986c8714fc6ff1e0e
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Thu Jun 25 00:10:46 2020 -0600
+
+    Extend currentlight.background to 2D images; by default, use a white background for both 2D and 3D HTML images.
+
+commit 61624215084386cbba889dd008c95fcfa3f436e1
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Wed Jun 24 22:32:49 2020 -0600
+
+    Fix 2D html tags.
+
+commit 1b8c77abebeb4a3e65d1f30eda6d5b60ffe820f2
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Mon Jun 22 14:58:38 2020 -0600
+
+    Fix xasy svg shading.
+
+commit 96cf6bb0c46c830c3676a442900e4bd968e0a50c
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Mon Jun 22 01:38:25 2020 -0600
+
+    Fix Windows override in xasyconfig.cson.
+
+commit 448695a92747861476497f92e23e6d779596ed16
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Mon Jun 22 01:24:43 2020 -0600
+
+    Implement real abs2(pair) and real abs2(triple).
+
+commit 4e76a3267bb44d163378bd50f72eb6340089b469
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Mon Jun 22 00:04:38 2020 -0600
+
+    Fix deconstruction of png images into svg format.
+
+commit b1d4da9a0e0d69047df43c15bbe9b22f01ebb0d5
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sun Jun 21 18:37:41 2020 -0600
+
+    Check array dimensions.
+
+commit 1264820193c3d27b79082431762636cb4c19b8ee
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sun Jun 21 18:02:46 2020 -0600
+
+    Fix camera adjustment.
+
+commit 0353f3bd5edc99e5f83fdae04f7d14393dfa623d
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sun Jun 21 16:39:19 2020 -0600
+
+    Improve detection of TeX errors.
+
+commit d0049ae28dcd4ee1664e27dff18a43dbbc7c8521
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sun Jun 21 01:41:57 2020 -0600
+
+    Fix CPU to CPU optimization for Bezier curves by rendering one segment at a time.
+
+commit 6cafa5abb72d1ab2f69ab6ba9fc8ba7c4417bfe6
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sun Jun 21 01:25:41 2020 -0600
+
+    Update asygl.
+
+commit 6a04bf13097bb8e196bdfcbf1f9c9b30fd5fe4b8
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sun Jun 21 01:22:27 2020 -0600
+
+    Port CPU to GPU copying optimization to AsyGL library.
+
+commit 0fcf4e50d0fdaf43d839d15c8eea7ff99ab4ed71
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sat Jun 20 00:01:45 2020 -0600
+
+    Update to new Ghostscript transparency model.
+
+commit d2e946715241e559433ae56b2cc726901b1474d6
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Fri Jun 19 19:12:15 2020 -0600
+
+    Output 2D html images using inline svg commands.
+
+commit 239b54d06b51b52b6fb1d7a929fada19039356a9
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Thu Jun 18 22:22:22 2020 -0600
+
+    Force PNG content to be embedded in SVG output.
+
+commit c1215bee4c483b75f547098fc0849e4f5277a404
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Thu Jun 18 18:55:12 2020 -0600
+
+    Fix tensor shading with latex engine and svg outformat.
+    Check for mismatched endspecial. Simplify code.
+
+commit cb9a4f90466dac50aeec00bd7dbb91cb609f5c0a
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Thu Jun 18 00:02:18 2020 -0600
+
+    Update asygl.
+
+commit d56cfbf30c5dfd26abdd13af139f2419ae28b3b1
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Thu Jun 18 00:01:46 2020 -0600
+
+    Fix WebGL shrink and expand.
+
+commit bb772d94c88a0968f744a02faadddbc0c4d214a4
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Wed Jun 17 22:00:11 2020 -0600
+
+    Increase WebGL precision of example.
+
+commit 55217bf80236b08d820ef235e84478100d094077
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Wed Jun 17 21:11:05 2020 -0600
+
+    Update asygl.
+
+commit 31d27c0d7a4dcb36f87ab2aa046371936dc6d176
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Wed Jun 17 21:10:09 2020 -0600
+
+    Extend WebGL viewport to edge of canvas; simplify code.
+
+commit 5b6237b879a56a222e9c3689181485646ab4ea51
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Wed Jun 17 16:04:49 2020 -0600
+
+    Update asygl.
+
+commit 07b4ae5679569041c070c6f50c0bd8eb3e0a97aa
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Wed Jun 17 16:04:03 2020 -0600
+
+    Fix WebGL aspect ratio and centering.
+
+commit c209a949e54d90bdf71a4d576602a6b004b894f3
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Wed Jun 17 10:57:13 2020 -0600
+
+    Update asygl.
+
+commit 9e93b99175d0aa06535022dbddeaebd7b75f4377
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Wed Jun 17 10:56:39 2020 -0600
+
+    Restore aspect ratio sizing code.
+
+commit eb022a5e1fc3c8bc2008e33980a47a99d269159b
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Wed Jun 17 08:30:47 2020 -0600
+
+    Update asygl.
+
+commit e773510775bf63cfb81fc44077c3651cccf49a9c
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Wed Jun 17 08:27:04 2020 -0600
+
+    Center html output in Javascript code.
+
+commit d604442f8a09550276cf03721ab3c71047eb9f6b
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sun Jun 14 02:31:48 2020 -0600
+
+    Increase precision of planar Bezier surfaces in WebGL.
+
+commit 38a8732d7c292de07142e789a7abf6115a52ed82
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Tue Jun 2 11:49:16 2020 -0600
+
+    Revert "Center html output."
+    
+    This reverts commit 8d6fcc11cbc1118f6f4253efb8766998f83425fe.
+
+commit 3546418498d27270de2ea77a8e59a97bc90697ef
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sun May 24 23:03:01 2020 -0600
+
+    Remove clip from slopefield module.
+
+commit 8d6fcc11cbc1118f6f4253efb8766998f83425fe
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sun May 24 21:31:48 2020 -0600
+
+    Center html output.
+
+commit 56f89ede630ce95f6d0e57c5adf58bc925229ad8
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Mon May 11 19:46:20 2020 -0600
+
+    Force copying of sorted transparent triangles to GPU.
+
+commit b44d17ae26dcd0f3d3ea63188f93528230390cfe
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sun May 10 22:08:53 2020 -0600
+
+    Raise logo3 camera.
+
+commit d9bbb71b151c1ff1ee920045607240ed80ead95f
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Wed May 6 01:00:21 2020 -0600
+
+    Brighten default light Headlamp.
+
+commit d9b7e5f6759da978831a03be481f5b0712f77ba7
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Wed May 6 00:11:21 2020 -0600
+
+    Fix previous commit.
+
+commit a81b3656d2087a9f038fdd3417698d23d0518808
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sun May 3 21:25:09 2020 -0600
+
+    Fix copying of materials from CPU to GPU.
+
+commit d536e5e45d45c7893d6703d8ef9c56c2df0d97b7
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sun May 3 10:32:42 2020 -0600
+
+    Simplify code.
+
+commit a869eb33b2549b19fd67a64031d202a2fb834cd1
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sun May 3 01:02:48 2020 -0600
+
+    Fix svg output for axialshade and radialshade.
+
+commit 90f4700de45c7b5a86c109d004209d8ef688bf88
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sun May 3 00:21:51 2020 -0600
+
+    Work around dvisvgm --pdf limitations.
+
+commit 05faf64b39ec7ac03318a7b4c738cae9d107239a
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Fri May 1 04:31:10 2020 -0600
+
+    Copy vertex and  material data from CPU to GPU only when necessary.
+
+commit 091d66b78d5f6283140d9d3f1ca776629e88360d
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Wed Apr 29 23:27:23 2020 -0600
+
+    Make svgemulation=true by default to emulate Gouraud shading in SVG;
+    remove obsolete experimental code.
+
+commit ada6af005b220947cd64c534d2f0e64f5b860b24
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Wed Apr 29 00:20:26 2020 -0600
+
+    Improve emulation of SVG Gouraud shading with option -svgemulation.
+
+commit fa31a4f26318806e76146fcdf4d5a38493ddcd17
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Mon Apr 27 09:04:14 2020 -0600
+
+    Fix typo in documentation.
+
+commit 154d7bbd45c8a2e3c92ed98ffdfb0d9614cab4dd
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sun Apr 26 18:17:56 2020 -0600
+
+    Work around dvisvgm --pdf limitations; fix -fsvg -render=0.
+
+commit 90b198134af21c9989e904ee72b78779b7ecbb2d
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sun Apr 26 15:56:54 2020 -0600
+
+    Fix segmentation fault; consolidate error messages.
+
+commit 1c15884c9505b3e2b01dfdc1bd21ace199d3b746
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sat Apr 25 19:30:15 2020 -0600
+
+    Flatten a monochrome tensor patch with interior internal control points to a
+    filled cyclic path.
+
+commit cb4c2c03e7cd77adceeab539e0d173798abf9717
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sat Apr 25 11:53:07 2020 -0600
+
+    Allow dvisvgm --pdf now that version 2.9.1 supports PNG images.
+
+commit 3063abbcfcf1d8b8b4fc6b67a37375bfc746f6cc
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sat Apr 25 08:58:11 2020 -0600
+
+    Consistently use dvisvgm -v3 verbosity option.
+
+commit 21b9f1a684678f931d56c26ccb8ea7fb11f5769c
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sat Apr 25 00:08:59 2020 -0600
+
+    Fix export of 3D rendered bitmaps to svg.
+
+commit e0b8e3def55318505b24cd850b94efa2ac037d0b
+Author: ivankokan <ivan.kokan at gmail.com>
+Date:   Thu Apr 23 00:38:59 2020 +0200
+
+    Update sourceforge URLs in FAQ
+
+commit fcd9aeb92d892f97925f6f428a00efd376bd2da7
+Author: ivankokan <ivan.kokan at gmail.com>
+Date:   Thu Apr 23 00:32:10 2020 +0200
+
+    Update FAQ for international fonts question
+
+commit 825488fbb1395202f35b436df146da6f8560a6af
+Author: ivankokan <ivan.kokan at gmail.com>
+Date:   Thu Apr 23 00:01:44 2020 +0200
+
+    CJK package URL
+
+commit 285f855a0312465f1c1d96757a5098061d929725
+Merge: 35428571 881b585a
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Mon Apr 13 14:56:25 2020 -0600
+
+    Merge pull request #151 from jsonn/patch-1
+    
+    Check for libc++ directly, not for the kernel
+
+commit 881b585a2f8f0a927ce7d77c59eba0a4774ce98e
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Mon Apr 13 14:55:49 2020 -0600
+
+    Update comment.
+
+commit 44cb71efe77b4e7e9e12367bebcc39b0eebff767
+Author: Joerg Sonnenberger <joerg at bec.de>
+Date:   Mon Apr 13 21:49:01 2020 +0200
+
+    Check for libc++ directly, not for the kernel
+
+commit 35428571776efdcaedcc9f920e927526849727a0
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Mon Apr 13 10:13:53 2020 -0600
+
+    Fix Bezier patch bounds bug introduced in bf3be19f7f1daf5730dabbf5c89e8a4f0f451a7d.
+
+commit 7f9480e35619e4cd6e7114cd025603c2e1937586
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Mon Apr 13 10:10:31 2020 -0600
+
+    Revert "Fix export bug."
+    
+    This reverts commit 1566850db2aac0b78ec9806e35af514e7a185e63.
+
+commit decb4d5109744545082eb1843dcb2f1a52d4158c
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Fri Apr 3 08:39:40 2020 -0600
+
+    Add libtirpc dependency.
+
+commit 386b93b6d4770893d01ebc2ba25637546bca9f33
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Wed Mar 25 22:23:40 2020 -0600
+
+    Increment version to 2.66.
+
 commit 1566850db2aac0b78ec9806e35af514e7a185e63
 Author: John Bowman <bowman at ualberta.ca>
 Date:   Tue Mar 24 23:30:17 2020 -0600
@@ -342,6 +1668,33 @@
 
     Fix test degenerate normals.
 
+commit c1a8c0a212aa32eed3a0e78b91ad1abc540795cf
+Author: ivankokan <ivan.kokan at gmail.com>
+Date:   Wed Feb 12 17:25:00 2020 +0100
+
+    Update documentation
+
+commit 173d1e8c9d2de43a11053b98f0f964af658a8a02
+Author: ivankokan <ivan.kokan at gmail.com>
+Date:   Wed Feb 12 14:35:31 2020 +0100
+
+    Remove latin1 module
+
+commit 525dbb95a60cc75f7f55075b8d0e1deaba981edf
+Author: ivankokan <ivan.kokan at gmail.com>
+Date:   Wed Feb 12 14:33:06 2020 +0100
+
+    Remove unicode module
+
+commit d560eaefbcffe9eb6c26db1d4fd1b365daa5799a
+Merge: 2898b83f 9beb5b6c
+Author: Ivan Kokan <ivan.kokan at gmail.com>
+Date:   Wed Feb 12 13:42:05 2020 +0100
+
+    Merge pull request #2 from vectorgraphics/master
+    
+    Sync
+
 commit 9beb5b6c72ce47c8fad8c33f14b78015c9baa40f
 Author: John Bowman <bowman at ualberta.ca>
 Date:   Wed Feb 5 22:26:02 2020 -0700

Modified: trunk/Build/source/utils/asymptote/Delaunay.cc
===================================================================
--- trunk/Build/source/utils/asymptote/Delaunay.cc	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/Delaunay.cc	2021-01-02 16:31:31 UTC (rev 57291)
@@ -13,7 +13,7 @@
   return (a > b) ? a : b;
 }
 
-int XYZCompare(const void *v1, const void *v2) 
+int XYZCompare(const void *v1, const void *v2)
 {
   double x1=((XYZ*)v1)->p[0];
   double x2=((XYZ*)v2)->p[0];
@@ -48,7 +48,7 @@
 
   if(presort) qsort(pxyz,nv,sizeof(XYZ),XYZCompare);
   else postsort=false;
-  
+
 /* Allocate memory for the completeness list, flag for each triangle */
   Int trimax = 4 * nv;
   Int *complete = new Int[trimax];
@@ -114,7 +114,7 @@
       double *a=pxyz[vj->p1].p;
       double *b=pxyz[vj->p2].p;
       double *c=pxyz[vj->p3].p;
-      
+
       if(incircle(a,b,c,d) <= 0.0) { // Point d is inside or on circumcircle
 /* Check that we haven't exceeded the edge list size */
         if(nedge + 3 >= emax) {
@@ -121,7 +121,7 @@
           emax += 100;
           IEDGE *p_EdgeTemp = new IEDGE[emax];
           for (Int i = 0; i < nedge; i++) {
-            p_EdgeTemp[i] = edges[i];   
+            p_EdgeTemp[i] = edges[i];
           }
           delete[] edges;
           edges = p_EdgeTemp;
@@ -199,7 +199,7 @@
   delete[] edges;
   delete[] complete;
 
-  if(postsort) { 
+  if(postsort) {
     for(Int i = 0; i < ntri; i++) {
       ITRIANGLE *vi=v+i;
       vi->p1=pxyz[vi->p1].i;
@@ -209,4 +209,4 @@
   }
 
   return 0;
-} 
+}

Modified: trunk/Build/source/utils/asymptote/GUI/Window1.py
===================================================================
--- trunk/Build/source/utils/asymptote/GUI/Window1.py	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/GUI/Window1.py	2021-01-02 16:31:31 UTC (rev 57291)
@@ -772,11 +772,11 @@
         self.asyfyCanvas()
 
     def actionManual(self):
-        asyManualURL = 'http://asymptote.sourceforge.net/asymptote.pdf'
+        asyManualURL = 'https://asymptote.sourceforge.io/asymptote.pdf'
         webbrowser.open_new(asyManualURL)
 
     def actionAbout(self):
-        Qw.QMessageBox.about(self,"xasy","This is xasy "+xasyVersion.xasyVersion+"; a graphical front end to the Asymptote vector graphics language: http://asymptote.sourceforge.net/")
+        Qw.QMessageBox.about(self,"xasy","This is xasy "+xasyVersion.xasyVersion+"; a graphical front end to the Asymptote vector graphics language: https://asymptote.sourceforge.io/")
 
     def btnExportAsyOnClick(self):
         diag = Qw.QFileDialog(self)

Modified: trunk/Build/source/utils/asymptote/GUI/configs/xasyconfig.cson
===================================================================
--- trunk/Build/source/utils/asymptote/GUI/configs/xasyconfig.cson	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/GUI/configs/xasyconfig.cson	2021-01-02 16:31:31 UTC (rev 57291)
@@ -54,7 +54,7 @@
 
 # Overrides
 
-windows:
+Windows:
     externalEditor: "notepad.exe"
 
 Darwin:

Modified: trunk/Build/source/utils/asymptote/GUI/icons_rc.py
===================================================================
--- trunk/Build/source/utils/asymptote/GUI/icons_rc.py	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/GUI/icons_rc.py	2021-01-02 16:31:31 UTC (rev 57291)
@@ -9,13 +9,13 @@
 from PyQt5 import QtCore
 
 qt_resource_data = b"\
-\x00\x00\x03\xe6\
+\x00\x00\x02\x7d\
 \x3c\
 \x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
 \x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
 \x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
 \x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
-\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x38\x2e\x31\x2e\x31\x2c\
+\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\
 \x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
 \x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
 \x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
@@ -27,53 +27,334 @@
 \x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\
 \x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0d\x0a\x3c\x73\x76\x67\x20\
 \x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
-\x3d\x22\x43\x68\x65\x76\x72\x6f\x6e\x5f\x63\x69\x72\x63\x6c\x65\
-\x64\x5f\x72\x69\x67\x68\x74\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\
-\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\
-\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\
-\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\
-\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\
-\x78\x6c\x69\x6e\x6b\x22\x0d\x0a\x09\x20\x78\x3d\x22\x30\x70\x78\
-\x22\x20\x79\x3d\x22\x30\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\
-\x78\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\
-\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\
-\x64\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\
-\x31\x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\
-\x72\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x67\x20\x74\x72\
-\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\
-\x32\x34\x20\x30\x20\x30\x20\x32\x34\x20\x30\x20\x30\x29\x27\x3e\
-\x0d\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x31\x31\x2c\x31\
-\x30\x4c\x38\x2e\x36\x39\x38\x2c\x37\x2e\x34\x39\x34\x63\x2d\x30\
-\x2e\x31\x39\x36\x2d\x30\x2e\x31\x39\x38\x2d\x30\x2e\x31\x39\x36\
-\x2d\x30\x2e\x35\x31\x39\x2c\x30\x2d\x30\x2e\x37\x31\x38\x63\x30\
-\x2e\x31\x39\x36\x2d\x30\x2e\x31\x39\x37\x2c\x30\x2e\x35\x31\x35\
-\x2d\x30\x2e\x31\x39\x37\x2c\x30\x2e\x37\x31\x2c\x30\x6c\x32\x2e\
-\x38\x30\x37\x2c\x32\x2e\x38\x36\x34\x0d\x0a\x09\x63\x30\x2e\x31\
-\x39\x36\x2c\x30\x2e\x31\x39\x39\x2c\x30\x2e\x31\x39\x36\x2c\x30\
-\x2e\x35\x32\x2c\x30\x2c\x30\x2e\x37\x31\x37\x6c\x2d\x32\x2e\x38\
-\x30\x37\x2c\x32\x2e\x38\x36\x34\x63\x2d\x30\x2e\x31\x39\x35\x2c\
-\x30\x2e\x31\x39\x39\x2d\x30\x2e\x35\x31\x34\x2c\x30\x2e\x31\x39\
-\x38\x2d\x30\x2e\x37\x31\x2c\x30\x63\x2d\x30\x2e\x31\x39\x36\x2d\
-\x30\x2e\x31\x39\x37\x2d\x30\x2e\x31\x39\x36\x2d\x30\x2e\x35\x31\
-\x38\x2c\x30\x2d\x30\x2e\x37\x31\x37\x4c\x31\x31\x2c\x31\x30\x7a\
-\x20\x4d\x31\x30\x2c\x30\x2e\x34\x0d\x0a\x09\x63\x35\x2e\x33\x30\
-\x32\x2c\x30\x2c\x39\x2e\x36\x2c\x34\x2e\x32\x39\x38\x2c\x39\x2e\
-\x36\x2c\x39\x2e\x36\x63\x30\x2c\x35\x2e\x33\x30\x33\x2d\x34\x2e\
-\x32\x39\x38\x2c\x39\x2e\x36\x2d\x39\x2e\x36\x2c\x39\x2e\x36\x53\
-\x30\x2e\x34\x2c\x31\x35\x2e\x33\x30\x33\x2c\x30\x2e\x34\x2c\x31\
-\x30\x43\x30\x2e\x34\x2c\x34\x2e\x36\x39\x38\x2c\x34\x2e\x36\x39\
-\x38\x2c\x30\x2e\x34\x2c\x31\x30\x2c\x30\x2e\x34\x7a\x20\x4d\x31\
-\x30\x2c\x31\x38\x2e\x33\x35\x34\x0d\x0a\x09\x63\x34\x2e\x36\x31\
-\x33\x2c\x30\x2c\x38\x2e\x33\x35\x34\x2d\x33\x2e\x37\x34\x2c\x38\
-\x2e\x33\x35\x34\x2d\x38\x2e\x33\x35\x34\x63\x30\x2d\x34\x2e\x36\
-\x31\x34\x2d\x33\x2e\x37\x34\x31\x2d\x38\x2e\x33\x35\x34\x2d\x38\
-\x2e\x33\x35\x34\x2d\x38\x2e\x33\x35\x34\x63\x2d\x34\x2e\x36\x31\
-\x35\x2c\x30\x2d\x38\x2e\x33\x35\x34\x2c\x33\x2e\x37\x34\x2d\x38\
-\x2e\x33\x35\x34\x2c\x38\x2e\x33\x35\x34\x0d\x0a\x09\x43\x31\x2e\
-\x36\x34\x35\x2c\x31\x34\x2e\x36\x31\x34\x2c\x35\x2e\x33\x38\x35\
-\x2c\x31\x38\x2e\x33\x35\x34\x2c\x31\x30\x2c\x31\x38\x2e\x33\x35\
-\x34\x7a\x22\x2f\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x73\
-\x76\x67\x3e\x0d\x0a\
+\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\
+\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\
+\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\
+\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\
+\x39\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\
+\x20\x79\x3d\x22\x30\x70\x78\x22\x0d\x0a\x09\x20\x77\x69\x64\x74\
+\x68\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\
+\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\
+\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\
+\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\
+\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\
+\x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\
+\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x67\x20\x69\x64\x3d\
+\x22\x49\x63\x6f\x6e\x5f\x38\x5f\x22\x3e\x0d\x0a\x09\x3c\x67\x3e\
+\x0d\x0a\x09\x09\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x34\x32\
+\x37\x2c\x32\x33\x34\x2e\x36\x32\x35\x48\x31\x36\x37\x2e\x32\x39\
+\x36\x6c\x31\x31\x39\x2e\x37\x30\x32\x2d\x31\x31\x39\x2e\x37\x30\
+\x32\x4c\x32\x35\x36\x2c\x38\x35\x4c\x38\x35\x2c\x32\x35\x36\x6c\
+\x31\x37\x31\x2c\x31\x37\x31\x6c\x32\x39\x2e\x39\x32\x32\x2d\x32\
+\x39\x2e\x39\x32\x34\x4c\x31\x36\x37\x2e\x32\x39\x36\x2c\x32\x37\
+\x37\x2e\x33\x37\x35\x48\x34\x32\x37\x56\x32\x33\x34\x2e\x36\x32\
+\x35\x7a\x22\x2f\x3e\x0d\x0a\x09\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\
+\x67\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
+\x00\x00\x02\x7f\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
+\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
+\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\
+\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
+\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
+\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
+\x20\x20\x2d\x2d\x3e\x0d\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\
+\x20\x73\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\
+\x57\x33\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\
+\x2f\x2f\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
+\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\
+\x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\
+\x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0d\x0a\x3c\x73\x76\x67\x20\
+\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
+\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\
+\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\
+\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\
+\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\
+\x39\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\
+\x20\x79\x3d\x22\x30\x70\x78\x22\x0d\x0a\x09\x20\x77\x69\x64\x74\
+\x68\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\
+\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\
+\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x73\
+\x74\x79\x6c\x65\x3d\x22\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\
+\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x6e\x65\x77\x20\x30\x20\x30\x20\
+\x35\x31\x32\x20\x35\x31\x32\x3b\x22\x20\x78\x6d\x6c\x3a\x73\x70\
+\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\
+\x0a\x3c\x70\x6f\x6c\x79\x67\x6f\x6e\x20\x70\x6f\x69\x6e\x74\x73\
+\x3d\x22\x32\x38\x38\x2c\x39\x36\x20\x33\x33\x37\x2e\x39\x2c\x31\
+\x34\x35\x2e\x39\x20\x32\x37\x34\x2c\x32\x30\x39\x2e\x37\x20\x32\
+\x37\x34\x2c\x32\x30\x39\x2e\x37\x20\x31\x34\x35\x2e\x39\x2c\x33\
+\x33\x37\x2e\x39\x20\x39\x36\x2c\x32\x38\x38\x20\x39\x36\x2c\x34\
+\x31\x36\x20\x32\x32\x34\x2c\x34\x31\x36\x20\x31\x37\x34\x2e\x31\
+\x2c\x33\x36\x36\x2e\x31\x20\x33\x35\x37\x2e\x34\x2c\x31\x38\x32\
+\x2e\x39\x20\x33\x36\x36\x2e\x31\x2c\x31\x37\x34\x2e\x31\x20\x0d\
+\x0a\x09\x34\x31\x36\x2c\x32\x32\x34\x20\x34\x31\x36\x2c\x39\x36\
+\x20\x22\x2f\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
+\x00\x00\x07\x80\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
+\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
+\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\
+\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
+\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
+\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
+\x20\x20\x2d\x2d\x3e\x0d\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\
+\x20\x73\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\
+\x57\x33\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\
+\x2f\x2f\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
+\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\
+\x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\
+\x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0d\x0a\x3c\x73\x76\x67\x20\
+\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
+\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\
+\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\
+\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\
+\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\
+\x39\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\
+\x20\x79\x3d\x22\x30\x70\x78\x22\x0d\x0a\x09\x20\x77\x69\x64\x74\
+\x68\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\
+\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\
+\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\
+\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\
+\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\
+\x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\
+\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x67\x3e\x0d\x0a\x09\
+\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x31\x39\x33\x2e\x34\x36\
+\x2c\x32\x34\x39\x2e\x30\x35\x36\x63\x33\x2e\x37\x32\x33\x2d\x30\
+\x2e\x36\x37\x2c\x37\x2e\x35\x38\x39\x2d\x31\x2e\x30\x34\x31\x2c\
+\x31\x31\x2e\x35\x38\x36\x2d\x31\x2e\x30\x34\x31\x4c\x32\x30\x31\
+\x2e\x39\x32\x34\x2c\x32\x34\x38\x68\x31\x30\x33\x2e\x38\x32\x33\
+\x63\x34\x2e\x35\x30\x33\x2c\x30\x2c\x38\x2e\x38\x30\x36\x2d\x30\
+\x2e\x36\x31\x37\x2c\x31\x32\x2e\x39\x30\x38\x2d\x31\x2e\x37\x35\
+\x34\x0d\x0a\x09\x09\x63\x31\x39\x2e\x33\x37\x2d\x35\x2e\x33\x36\
+\x33\x2c\x33\x33\x2e\x33\x34\x35\x2d\x32\x32\x2e\x35\x33\x37\x2c\
+\x33\x33\x2e\x33\x34\x35\x2d\x34\x33\x2e\x36\x36\x33\x76\x2d\x33\
+\x30\x2e\x38\x32\x32\x76\x2d\x35\x36\x2e\x34\x30\x32\x63\x30\x2d\
+\x32\x34\x2e\x38\x33\x32\x2d\x32\x31\x2e\x31\x35\x2d\x34\x33\x2e\
+\x34\x38\x34\x2d\x34\x36\x2e\x32\x38\x39\x2d\x34\x37\x2e\x36\x30\
+\x36\x0d\x0a\x09\x09\x63\x2d\x31\x35\x2e\x39\x33\x31\x2d\x32\x2e\
+\x36\x32\x34\x2d\x33\x39\x2e\x32\x35\x38\x2d\x33\x2e\x38\x32\x37\
+\x2d\x35\x35\x2e\x30\x38\x39\x2d\x33\x2e\x37\x34\x39\x63\x2d\x31\
+\x35\x2e\x38\x32\x39\x2c\x30\x2e\x30\x38\x36\x2d\x33\x30\x2e\x39\
+\x38\x31\x2c\x31\x2e\x34\x30\x34\x2d\x34\x34\x2e\x32\x37\x37\x2c\
+\x33\x2e\x37\x34\x39\x43\x31\x36\x37\x2e\x31\x34\x33\x2c\x37\x34\
+\x2e\x35\x37\x36\x2c\x31\x36\x30\x2c\x38\x38\x2e\x39\x32\x38\x2c\
+\x31\x36\x30\x2c\x31\x31\x35\x2e\x33\x35\x39\x56\x31\x34\x34\x68\
+\x39\x36\x0d\x0a\x09\x09\x76\x31\x36\x48\x31\x32\x38\x2e\x38\x32\
+\x63\x2d\x33\x35\x2e\x36\x32\x38\x2c\x30\x2d\x36\x34\x2e\x35\x33\
+\x38\x2c\x34\x32\x2e\x35\x37\x31\x2d\x36\x34\x2e\x38\x31\x33\x2c\
+\x39\x35\x2e\x32\x34\x32\x43\x36\x34\x2e\x30\x30\x35\x2c\x32\x35\
+\x35\x2e\x34\x39\x35\x2c\x36\x34\x2c\x32\x35\x35\x2e\x37\x34\x37\
+\x2c\x36\x34\x2c\x32\x35\x36\x63\x30\x2c\x39\x2e\x35\x32\x33\x2c\
+\x30\x2e\x39\x34\x2c\x31\x38\x2e\x37\x32\x2c\x32\x2e\x36\x38\x35\
+\x2c\x32\x37\x2e\x34\x30\x34\x0d\x0a\x09\x09\x43\x37\x34\x2e\x36\
+\x34\x38\x2c\x33\x32\x33\x2e\x30\x37\x2c\x39\x39\x2e\x34\x35\x31\
+\x2c\x33\x35\x32\x2c\x31\x32\x38\x2e\x38\x32\x2c\x33\x35\x32\x48\
+\x31\x34\x34\x76\x2d\x32\x2e\x36\x36\x32\x76\x2d\x34\x33\x2e\x32\
+\x37\x33\x43\x31\x34\x34\x2c\x32\x37\x39\x2e\x32\x33\x38\x2c\x31\
+\x36\x34\x2e\x31\x34\x36\x2c\x32\x35\x34\x2e\x33\x33\x32\x2c\x31\
+\x39\x33\x2e\x34\x36\x2c\x32\x34\x39\x2e\x30\x35\x36\x7a\x20\x4d\
+\x32\x30\x33\x2e\x36\x35\x36\x2c\x31\x32\x37\x2e\x30\x30\x32\x0d\
+\x0a\x09\x09\x63\x2d\x39\x2e\x35\x39\x32\x2c\x30\x2d\x31\x37\x2e\
+\x33\x38\x34\x2d\x37\x2e\x37\x38\x35\x2d\x31\x37\x2e\x33\x38\x34\
+\x2d\x31\x37\x2e\x34\x30\x33\x63\x30\x2d\x39\x2e\x36\x36\x34\x2c\
+\x37\x2e\x37\x37\x34\x2d\x31\x37\x2e\x35\x32\x2c\x31\x37\x2e\x33\
+\x38\x34\x2d\x31\x37\x2e\x35\x32\x63\x39\x2e\x35\x37\x34\x2c\x30\
+\x2c\x31\x37\x2e\x33\x39\x39\x2c\x37\x2e\x38\x35\x35\x2c\x31\x37\
+\x2e\x33\x39\x39\x2c\x31\x37\x2e\x35\x32\x0d\x0a\x09\x09\x43\x32\
+\x32\x31\x2e\x30\x35\x36\x2c\x31\x31\x39\x2e\x32\x31\x37\x2c\x32\
+\x31\x33\x2e\x32\x34\x36\x2c\x31\x32\x37\x2e\x30\x30\x32\x2c\x32\
+\x30\x33\x2e\x36\x35\x36\x2c\x31\x32\x37\x2e\x30\x30\x32\x7a\x22\
+\x2f\x3e\x0d\x0a\x09\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x34\
+\x34\x33\x2e\x39\x35\x31\x2c\x32\x32\x32\x2e\x35\x34\x33\x43\x34\
+\x33\x34\x2e\x37\x38\x2c\x31\x38\x36\x2e\x30\x32\x31\x2c\x34\x31\
+\x31\x2e\x30\x33\x33\x2c\x31\x36\x30\x2c\x33\x38\x33\x2e\x31\x38\
+\x2c\x31\x36\x30\x48\x33\x36\x38\x76\x32\x2e\x36\x32\x36\x76\x33\
+\x38\x2e\x30\x34\x36\x63\x30\x2c\x33\x33\x2e\x39\x31\x35\x2d\x32\
+\x32\x2e\x32\x38\x36\x2c\x35\x38\x2e\x34\x37\x34\x2d\x34\x39\x2e\
+\x34\x38\x39\x2c\x36\x32\x2e\x36\x38\x31\x0d\x0a\x09\x09\x63\x2d\
+\x32\x2e\x37\x33\x37\x2c\x30\x2e\x34\x32\x34\x2d\x35\x2e\x34\x38\
+\x33\x2c\x30\x2e\x36\x34\x36\x2d\x38\x2e\x33\x30\x31\x2c\x30\x2e\
+\x36\x34\x36\x48\x32\x30\x36\x2e\x33\x35\x31\x63\x2d\x34\x2e\x35\
+\x31\x38\x2c\x30\x2d\x38\x2e\x39\x30\x34\x2c\x30\x2e\x35\x38\x34\
+\x2d\x31\x33\x2e\x30\x34\x39\x2c\x31\x2e\x36\x37\x32\x43\x31\x37\
+\x34\x2e\x31\x38\x2c\x32\x37\x30\x2e\x36\x38\x39\x2c\x31\x36\x30\
+\x2c\x32\x38\x36\x2e\x36\x2c\x31\x36\x30\x2c\x33\x30\x37\x2e\x32\
+\x33\x36\x76\x33\x32\x2e\x39\x32\x32\x0d\x0a\x09\x09\x76\x35\x34\
+\x2e\x33\x30\x35\x63\x30\x2c\x32\x34\x2e\x38\x33\x32\x2c\x32\x34\
+\x2e\x39\x37\x37\x2c\x33\x39\x2e\x34\x32\x36\x2c\x34\x39\x2e\x34\
+\x38\x31\x2c\x34\x36\x2e\x35\x35\x31\x63\x32\x39\x2e\x33\x32\x37\
+\x2c\x38\x2e\x35\x33\x31\x2c\x36\x31\x2e\x32\x36\x37\x2c\x31\x30\
+\x2e\x30\x36\x38\x2c\x39\x36\x2e\x33\x36\x36\x2c\x30\x43\x33\x32\
+\x39\x2e\x31\x35\x2c\x34\x33\x34\x2e\x33\x35\x34\x2c\x33\x35\x32\
+\x2c\x34\x32\x30\x2e\x38\x39\x33\x2c\x33\x35\x32\x2c\x33\x39\x34\
+\x2e\x34\x36\x33\x56\x33\x36\x38\x0d\x0a\x09\x09\x68\x2d\x39\x36\
+\x76\x2d\x31\x36\x68\x31\x32\x37\x2e\x31\x38\x63\x32\x35\x2e\x32\
+\x34\x2c\x30\x2c\x34\x37\x2e\x31\x30\x37\x2d\x32\x31\x2e\x33\x36\
+\x35\x2c\x35\x37\x2e\x38\x31\x34\x2d\x35\x32\x2e\x35\x34\x39\x43\
+\x34\x34\x35\x2e\x34\x37\x34\x2c\x32\x38\x36\x2e\x34\x30\x34\x2c\
+\x34\x34\x38\x2c\x32\x37\x31\x2e\x36\x34\x31\x2c\x34\x34\x38\x2c\
+\x32\x35\x36\x0d\x0a\x09\x09\x43\x34\x34\x38\x2c\x32\x34\x34\x2e\
+\x32\x33\x32\x2c\x34\x34\x36\x2e\x35\x36\x37\x2c\x32\x33\x32\x2e\
+\x39\x36\x32\x2c\x34\x34\x33\x2e\x39\x35\x31\x2c\x32\x32\x32\x2e\
+\x35\x34\x33\x7a\x20\x4d\x33\x30\x37\x2e\x38\x36\x37\x2c\x33\x38\
+\x32\x2e\x38\x32\x63\x39\x2e\x35\x39\x2c\x30\x2c\x31\x37\x2e\x33\
+\x38\x31\x2c\x37\x2e\x37\x38\x35\x2c\x31\x37\x2e\x33\x38\x31\x2c\
+\x31\x37\x2e\x34\x0d\x0a\x09\x09\x63\x30\x2c\x39\x2e\x36\x35\x2d\
+\x37\x2e\x37\x39\x31\x2c\x31\x37\x2e\x35\x32\x31\x2d\x31\x37\x2e\
+\x33\x38\x31\x2c\x31\x37\x2e\x35\x32\x31\x63\x2d\x39\x2e\x35\x37\
+\x37\x2c\x30\x2d\x31\x37\x2e\x33\x39\x39\x2d\x37\x2e\x38\x37\x31\
+\x2d\x31\x37\x2e\x33\x39\x39\x2d\x31\x37\x2e\x35\x32\x31\x43\x32\
+\x39\x30\x2e\x34\x36\x38\x2c\x33\x39\x30\x2e\x35\x39\x2c\x32\x39\
+\x38\x2e\x32\x37\x34\x2c\x33\x38\x32\x2e\x38\x32\x2c\x33\x30\x37\
+\x2e\x38\x36\x37\x2c\x33\x38\x32\x2e\x38\x32\x7a\x22\x2f\x3e\x0d\
+\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
+\x00\x00\x03\xc4\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
+\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
+\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x38\x2e\x31\x2e\x30\x2c\
+\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
+\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
+\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
+\x20\x20\x2d\x2d\x3e\x0d\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\
+\x20\x73\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\
+\x57\x33\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\
+\x2f\x2f\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
+\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\
+\x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\
+\x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0d\x0a\x3c\x73\x76\x67\x20\
+\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
+\x3d\x22\x4d\x61\x67\x6e\x69\x66\x79\x69\x6e\x67\x5f\x67\x6c\x61\
+\x73\x73\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\
+\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\
+\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\x3a\x78\x6c\x69\
+\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\
+\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\x6c\x69\x6e\x6b\
+\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x0d\x0a\x09\x20\x79\x3d\x22\
+\x30\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
+\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
+\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
+\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
+\x76\x65\x22\x3e\x0d\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\
+\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\x32\x34\x20\x30\x20\
+\x30\x20\x32\x34\x20\x30\x20\x30\x29\x27\x3e\x0d\x0a\x3c\x70\x61\
+\x74\x68\x20\x64\x3d\x22\x4d\x31\x37\x2e\x35\x34\x35\x2c\x31\x35\
+\x2e\x34\x36\x37\x6c\x2d\x33\x2e\x37\x37\x39\x2d\x33\x2e\x37\x37\
+\x39\x63\x30\x2e\x35\x37\x2d\x30\x2e\x39\x33\x35\x2c\x30\x2e\x38\
+\x39\x38\x2d\x32\x2e\x30\x33\x35\x2c\x30\x2e\x38\x39\x38\x2d\x33\
+\x2e\x32\x31\x63\x30\x2d\x33\x2e\x34\x31\x37\x2d\x32\x2e\x39\x36\
+\x31\x2d\x36\x2e\x33\x37\x37\x2d\x36\x2e\x33\x37\x38\x2d\x36\x2e\
+\x33\x37\x37\x0d\x0a\x09\x43\x34\x2e\x38\x36\x39\x2c\x32\x2e\x31\
+\x2c\x32\x2e\x31\x2c\x34\x2e\x38\x37\x2c\x32\x2e\x31\x2c\x38\x2e\
+\x32\x38\x37\x63\x30\x2c\x33\x2e\x34\x31\x36\x2c\x32\x2e\x39\x36\
+\x31\x2c\x36\x2e\x33\x37\x37\x2c\x36\x2e\x33\x37\x37\x2c\x36\x2e\
+\x33\x37\x37\x63\x31\x2e\x31\x33\x37\x2c\x30\x2c\x32\x2e\x32\x2d\
+\x30\x2e\x33\x30\x39\x2c\x33\x2e\x31\x31\x35\x2d\x30\x2e\x38\x34\
+\x34\x6c\x33\x2e\x37\x39\x39\x2c\x33\x2e\x38\x30\x31\x0d\x0a\x09\
+\x63\x30\x2e\x33\x37\x32\x2c\x30\x2e\x33\x37\x31\x2c\x30\x2e\x39\
+\x37\x35\x2c\x30\x2e\x33\x37\x31\x2c\x31\x2e\x33\x34\x36\x2c\x30\
+\x6c\x30\x2e\x39\x34\x33\x2d\x30\x2e\x39\x34\x33\x43\x31\x38\x2e\
+\x30\x35\x31\x2c\x31\x36\x2e\x33\x30\x37\x2c\x31\x37\x2e\x39\x31\
+\x36\x2c\x31\x35\x2e\x38\x33\x38\x2c\x31\x37\x2e\x35\x34\x35\x2c\
+\x31\x35\x2e\x34\x36\x37\x7a\x20\x4d\x34\x2e\x30\x30\x34\x2c\x38\
+\x2e\x32\x38\x37\x0d\x0a\x09\x63\x30\x2d\x32\x2e\x33\x36\x36\x2c\
+\x31\x2e\x39\x31\x37\x2d\x34\x2e\x32\x38\x33\x2c\x34\x2e\x32\x38\
+\x32\x2d\x34\x2e\x32\x38\x33\x63\x32\x2e\x33\x36\x36\x2c\x30\x2c\
+\x34\x2e\x34\x37\x34\x2c\x32\x2e\x31\x30\x37\x2c\x34\x2e\x34\x37\
+\x34\x2c\x34\x2e\x34\x37\x34\x63\x30\x2c\x32\x2e\x33\x36\x35\x2d\
+\x31\x2e\x39\x31\x38\x2c\x34\x2e\x32\x38\x33\x2d\x34\x2e\x32\x38\
+\x33\x2c\x34\x2e\x32\x38\x33\x0d\x0a\x09\x43\x36\x2e\x31\x31\x31\
+\x2c\x31\x32\x2e\x37\x36\x2c\x34\x2e\x30\x30\x34\x2c\x31\x30\x2e\
+\x36\x35\x32\x2c\x34\x2e\x30\x30\x34\x2c\x38\x2e\x32\x38\x37\x7a\
+\x22\x2f\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\
+\x3e\x0d\x0a\
+\x00\x00\x04\xaa\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
+\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
+\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x38\x2e\x31\x2e\x30\x2c\
+\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
+\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
+\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
+\x20\x20\x2d\x2d\x3e\x0d\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\
+\x20\x73\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\
+\x57\x33\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\
+\x2f\x2f\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
+\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\
+\x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\
+\x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0d\x0a\x3c\x73\x76\x67\x20\
+\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
+\x3d\x22\x43\x6f\x64\x65\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x32\x34\x70\x78\x22\x20\x79\
+\x3d\x22\x32\x34\x70\x78\x22\x0d\x0a\x09\x20\x76\x69\x65\x77\x42\
+\x6f\x78\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\
+\x20\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\
+\x6e\x64\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\
+\x35\x31\x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\
+\x70\x72\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x67\x20\x74\
+\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\
+\x28\x32\x34\x20\x30\x20\x30\x20\x32\x34\x20\x30\x20\x30\x29\x27\
+\x3e\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x35\x2e\x37\x31\x39\
+\x2c\x31\x34\x2e\x37\x35\x63\x2d\x30\x2e\x32\x33\x36\x2c\x30\x2d\
+\x30\x2e\x34\x37\x34\x2d\x30\x2e\x30\x38\x33\x2d\x30\x2e\x36\x36\
+\x34\x2d\x30\x2e\x32\x35\x32\x4c\x2d\x30\x2e\x30\x30\x35\x2c\x31\
+\x30\x6c\x35\x2e\x33\x34\x31\x2d\x34\x2e\x37\x34\x38\x43\x35\x2e\
+\x37\x34\x38\x2c\x34\x2e\x38\x38\x37\x2c\x36\x2e\x33\x38\x2c\x34\
+\x2e\x39\x32\x32\x2c\x36\x2e\x37\x34\x37\x2c\x35\x2e\x33\x33\x35\
+\x0d\x0a\x09\x63\x30\x2e\x33\x36\x37\x2c\x30\x2e\x34\x31\x33\x2c\
+\x30\x2e\x33\x33\x2c\x31\x2e\x30\x34\x35\x2d\x30\x2e\x30\x38\x33\
+\x2c\x31\x2e\x34\x31\x32\x4c\x33\x2e\x30\x30\x35\x2c\x31\x30\x6c\
+\x33\x2e\x33\x37\x38\x2c\x33\x2e\x30\x30\x32\x63\x30\x2e\x34\x31\
+\x33\x2c\x30\x2e\x33\x36\x37\x2c\x30\x2e\x34\x35\x2c\x30\x2e\x39\
+\x39\x39\x2c\x30\x2e\x30\x38\x33\x2c\x31\x2e\x34\x31\x32\x0d\x0a\
+\x09\x43\x36\x2e\x32\x36\x39\x2c\x31\x34\x2e\x36\x33\x37\x2c\x35\
+\x2e\x39\x39\x34\x2c\x31\x34\x2e\x37\x35\x2c\x35\x2e\x37\x31\x39\
+\x2c\x31\x34\x2e\x37\x35\x7a\x20\x4d\x31\x34\x2e\x36\x36\x34\x2c\
+\x31\x34\x2e\x37\x34\x38\x4c\x32\x30\x2e\x30\x30\x35\x2c\x31\x30\
+\x6c\x2d\x35\x2e\x30\x36\x2d\x34\x2e\x34\x39\x38\x63\x2d\x30\x2e\
+\x34\x31\x33\x2d\x30\x2e\x33\x36\x37\x2d\x31\x2e\x30\x34\x35\x2d\
+\x30\x2e\x33\x33\x2d\x31\x2e\x34\x31\x31\x2c\x30\x2e\x30\x38\x33\
+\x0d\x0a\x09\x63\x2d\x30\x2e\x33\x36\x37\x2c\x30\x2e\x34\x31\x33\
+\x2d\x30\x2e\x33\x33\x2c\x31\x2e\x30\x34\x35\x2c\x30\x2e\x30\x38\
+\x33\x2c\x31\x2e\x34\x31\x32\x4c\x31\x36\x2e\x39\x39\x35\x2c\x31\
+\x30\x6c\x2d\x33\x2e\x36\x35\x39\x2c\x33\x2e\x32\x35\x32\x63\x2d\
+\x30\x2e\x34\x31\x33\x2c\x30\x2e\x33\x36\x37\x2d\x30\x2e\x34\x35\
+\x2c\x30\x2e\x39\x39\x39\x2d\x30\x2e\x30\x38\x33\x2c\x31\x2e\x34\
+\x31\x32\x43\x31\x33\x2e\x34\x35\x2c\x31\x34\x2e\x38\x38\x37\x2c\
+\x31\x33\x2e\x37\x32\x35\x2c\x31\x35\x2c\x31\x34\x2c\x31\x35\x0d\
+\x0a\x09\x43\x31\x34\x2e\x32\x33\x36\x2c\x31\x35\x2c\x31\x34\x2e\
+\x34\x37\x34\x2c\x31\x34\x2e\x39\x31\x37\x2c\x31\x34\x2e\x36\x36\
+\x34\x2c\x31\x34\x2e\x37\x34\x38\x7a\x20\x4d\x39\x2e\x39\x38\x36\
+\x2c\x31\x36\x2e\x31\x36\x35\x6c\x32\x2d\x31\x32\x63\x30\x2e\x30\
+\x39\x31\x2d\x30\x2e\x35\x34\x35\x2d\x30\x2e\x32\x37\x37\x2d\x31\
+\x2e\x30\x36\x2d\x30\x2e\x38\x32\x32\x2d\x31\x2e\x31\x35\x31\x0d\
+\x0a\x09\x63\x2d\x30\x2e\x35\x34\x37\x2d\x30\x2e\x30\x39\x32\x2d\
+\x31\x2e\x30\x36\x31\x2c\x30\x2e\x32\x37\x37\x2d\x31\x2e\x31\x35\
+\x2c\x30\x2e\x38\x32\x32\x6c\x2d\x32\x2c\x31\x32\x63\x2d\x30\x2e\
+\x30\x39\x31\x2c\x30\x2e\x35\x34\x35\x2c\x30\x2e\x32\x37\x37\x2c\
+\x31\x2e\x30\x36\x2c\x30\x2e\x38\x32\x32\x2c\x31\x2e\x31\x35\x31\
+\x43\x38\x2e\x38\x39\x32\x2c\x31\x36\x2e\x39\x39\x36\x2c\x38\x2e\
+\x39\x34\x36\x2c\x31\x37\x2c\x39\x2e\x30\x30\x31\x2c\x31\x37\x0d\
+\x0a\x09\x43\x39\x2e\x34\x38\x31\x2c\x31\x37\x2c\x39\x2e\x39\x30\
+\x35\x2c\x31\x36\x2e\x36\x35\x33\x2c\x39\x2e\x39\x38\x36\x2c\x31\
+\x36\x2e\x31\x36\x35\x7a\x22\x2f\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\
+\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
 \x00\x00\x02\xf2\
 \x3c\
 \x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
@@ -124,33 +405,8 @@
 \x35\x39\x39\x2c\x31\x30\x2c\x31\x37\x2e\x35\x39\x39\x7a\x22\x2f\
 \x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\
 \x0a\
-\x00\x00\x01\x69\
+\x00\x00\x04\x64\
 \x3c\
-\x73\x76\x67\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\
-\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\
-\x30\x2f\x73\x76\x67\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x35\x31\
-\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\x32\
-\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\x30\
-\x20\x35\x31\x32\x20\x35\x31\x32\x22\x3e\x3c\x67\x20\x74\x72\x61\
-\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\x32\
-\x34\x20\x30\x20\x30\x20\x32\x34\x20\x30\x20\x30\x29\x27\x3e\x3c\
-\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x34\x2e\x33\x34\x20\x31\x35\
-\x2e\x36\x36\x41\x37\x2e\x39\x37\x20\x37\x2e\x39\x37\x20\x30\x20\
-\x30\x20\x30\x20\x39\x20\x31\x37\x2e\x39\x34\x56\x31\x30\x48\x35\
-\x56\x38\x68\x34\x56\x35\x2e\x38\x33\x61\x33\x20\x33\x20\x30\x20\
-\x31\x20\x31\x20\x32\x20\x30\x56\x38\x68\x34\x76\x32\x68\x2d\x34\
-\x76\x37\x2e\x39\x34\x61\x37\x2e\x39\x37\x20\x37\x2e\x39\x37\x20\
-\x30\x20\x30\x20\x30\x20\x34\x2e\x36\x36\x2d\x32\x2e\x32\x38\x6c\
-\x2d\x31\x2e\x34\x32\x2d\x31\x2e\x34\x32\x68\x35\x2e\x36\x36\x6c\
-\x2d\x32\x2e\x38\x33\x20\x32\x2e\x38\x33\x61\x31\x30\x20\x31\x30\
-\x20\x30\x20\x30\x20\x31\x2d\x31\x34\x2e\x31\x34\x20\x30\x4c\x2e\
-\x31\x20\x31\x34\x2e\x32\x34\x68\x35\x2e\x36\x36\x6c\x2d\x31\x2e\
-\x34\x32\x20\x31\x2e\x34\x32\x7a\x4d\x31\x30\x20\x34\x61\x31\x20\
-\x31\x20\x30\x20\x31\x20\x30\x20\x30\x2d\x32\x20\x31\x20\x31\x20\
-\x30\x20\x30\x20\x30\x20\x30\x20\x32\x7a\x22\x2f\x3e\x3c\x2f\x67\
-\x3e\x3c\x2f\x73\x76\x67\x3e\x0a\
-\x00\x00\x03\x46\
-\x3c\
 \x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
 \x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
 \x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
@@ -176,34 +432,52 @@
 \x20\x79\x3d\x22\x30\x70\x78\x22\x0d\x0a\x09\x20\x77\x69\x64\x74\
 \x68\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\
 \x3d\x22\x35\x31\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\
-\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x73\
-\x74\x79\x6c\x65\x3d\x22\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\
-\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x6e\x65\x77\x20\x30\x20\x30\x20\
-\x35\x31\x32\x20\x35\x31\x32\x3b\x22\x20\x78\x6d\x6c\x3a\x73\x70\
-\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\
-\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x34\x33\x37\x2e\x35\
-\x2c\x33\x38\x36\x2e\x36\x4c\x33\x30\x36\x2e\x39\x2c\x32\x35\x36\
-\x6c\x31\x33\x30\x2e\x36\x2d\x31\x33\x30\x2e\x36\x63\x31\x34\x2e\
-\x31\x2d\x31\x34\x2e\x31\x2c\x31\x34\x2e\x31\x2d\x33\x36\x2e\x38\
-\x2c\x30\x2d\x35\x30\x2e\x39\x63\x2d\x31\x34\x2e\x31\x2d\x31\x34\
-\x2e\x31\x2d\x33\x36\x2e\x38\x2d\x31\x34\x2e\x31\x2d\x35\x30\x2e\
-\x39\x2c\x30\x4c\x32\x35\x36\x2c\x32\x30\x35\x2e\x31\x4c\x31\x32\
-\x35\x2e\x34\x2c\x37\x34\x2e\x35\x0d\x0a\x09\x63\x2d\x31\x34\x2e\
-\x31\x2d\x31\x34\x2e\x31\x2d\x33\x36\x2e\x38\x2d\x31\x34\x2e\x31\
-\x2d\x35\x30\x2e\x39\x2c\x30\x63\x2d\x31\x34\x2e\x31\x2c\x31\x34\
-\x2e\x31\x2d\x31\x34\x2e\x31\x2c\x33\x36\x2e\x38\x2c\x30\x2c\x35\
-\x30\x2e\x39\x4c\x32\x30\x35\x2e\x31\x2c\x32\x35\x36\x4c\x37\x34\
-\x2e\x35\x2c\x33\x38\x36\x2e\x36\x63\x2d\x31\x34\x2e\x31\x2c\x31\
-\x34\x2e\x31\x2d\x31\x34\x2e\x31\x2c\x33\x36\x2e\x38\x2c\x30\x2c\
-\x35\x30\x2e\x39\x0d\x0a\x09\x63\x31\x34\x2e\x31\x2c\x31\x34\x2e\
-\x31\x2c\x33\x36\x2e\x38\x2c\x31\x34\x2e\x31\x2c\x35\x30\x2e\x39\
-\x2c\x30\x4c\x32\x35\x36\x2c\x33\x30\x36\x2e\x39\x6c\x31\x33\x30\
-\x2e\x36\x2c\x31\x33\x30\x2e\x36\x63\x31\x34\x2e\x31\x2c\x31\x34\
-\x2e\x31\x2c\x33\x36\x2e\x38\x2c\x31\x34\x2e\x31\x2c\x35\x30\x2e\
-\x39\x2c\x30\x43\x34\x35\x31\x2e\x35\x2c\x34\x32\x33\x2e\x34\x2c\
-\x34\x35\x31\x2e\x35\x2c\x34\x30\x30\x2e\x36\x2c\x34\x33\x37\x2e\
-\x35\x2c\x33\x38\x36\x2e\x36\x7a\x22\x2f\x3e\x0d\x0a\x3c\x2f\x73\
-\x76\x67\x3e\x0d\x0a\
+\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\
+\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\
+\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\
+\x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\
+\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x67\x20\x69\x64\x3d\
+\x22\x49\x63\x6f\x6e\x22\x3e\x0d\x0a\x09\x3c\x67\x3e\x0d\x0a\x09\
+\x09\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x32\x35\x36\x2c\x31\
+\x37\x36\x63\x2d\x34\x34\x2e\x30\x30\x34\x2c\x30\x2d\x38\x30\x2e\
+\x30\x30\x31\x2c\x33\x36\x2d\x38\x30\x2e\x30\x30\x31\x2c\x38\x30\
+\x63\x30\x2c\x34\x34\x2e\x30\x30\x34\x2c\x33\x35\x2e\x39\x39\x37\
+\x2c\x38\x30\x2c\x38\x30\x2e\x30\x30\x31\x2c\x38\x30\x63\x34\x34\
+\x2e\x30\x30\x35\x2c\x30\x2c\x37\x39\x2e\x39\x39\x39\x2d\x33\x35\
+\x2e\x39\x39\x36\x2c\x37\x39\x2e\x39\x39\x39\x2d\x38\x30\x0d\x0a\
+\x09\x09\x09\x43\x33\x33\x35\x2e\x39\x39\x39\x2c\x32\x31\x32\x2c\
+\x33\x30\x30\x2e\x30\x30\x35\x2c\x31\x37\x36\x2c\x32\x35\x36\x2c\
+\x31\x37\x36\x7a\x20\x4d\x34\x34\x36\x2e\x39\x33\x38\x2c\x32\x33\
+\x34\x2e\x36\x36\x37\x63\x2d\x39\x2e\x36\x30\x35\x2d\x38\x38\x2e\
+\x35\x33\x31\x2d\x38\x31\x2e\x30\x37\x34\x2d\x31\x36\x30\x2d\x31\
+\x36\x39\x2e\x36\x30\x35\x2d\x31\x36\x39\x2e\x35\x39\x39\x56\x33\
+\x32\x68\x2d\x34\x32\x2e\x36\x36\x36\x76\x33\x33\x2e\x30\x36\x37\
+\x0d\x0a\x09\x09\x09\x63\x2d\x38\x38\x2e\x35\x33\x31\x2c\x39\x2e\
+\x35\x39\x39\x2d\x31\x36\x30\x2c\x38\x31\x2e\x30\x36\x38\x2d\x31\
+\x36\x39\x2e\x36\x30\x34\x2c\x31\x36\x39\x2e\x35\x39\x39\x48\x33\
+\x32\x76\x34\x32\x2e\x36\x36\x37\x68\x33\x33\x2e\x30\x36\x32\x63\
+\x39\x2e\x36\x30\x34\x2c\x38\x38\x2e\x35\x33\x31\x2c\x38\x31\x2e\
+\x30\x37\x32\x2c\x31\x36\x30\x2c\x31\x36\x39\x2e\x36\x30\x34\x2c\
+\x31\x36\x39\x2e\x36\x30\x34\x56\x34\x38\x30\x68\x34\x32\x2e\x36\
+\x36\x36\x76\x2d\x33\x33\x2e\x30\x36\x32\x0d\x0a\x09\x09\x09\x63\
+\x38\x38\x2e\x35\x33\x31\x2d\x39\x2e\x36\x30\x34\x2c\x31\x36\x30\
+\x2d\x38\x31\x2e\x30\x37\x33\x2c\x31\x36\x39\x2e\x36\x30\x35\x2d\
+\x31\x36\x39\x2e\x36\x30\x34\x48\x34\x38\x30\x76\x2d\x34\x32\x2e\
+\x36\x36\x37\x48\x34\x34\x36\x2e\x39\x33\x38\x7a\x20\x4d\x32\x35\
+\x36\x2c\x34\x30\x35\x2e\x33\x33\x33\x63\x2d\x38\x32\x2e\x31\x33\
+\x37\x2c\x30\x2d\x31\x34\x39\x2e\x33\x33\x34\x2d\x36\x37\x2e\x31\
+\x39\x38\x2d\x31\x34\x39\x2e\x33\x33\x34\x2d\x31\x34\x39\x2e\x33\
+\x33\x33\x0d\x0a\x09\x09\x09\x63\x30\x2d\x38\x32\x2e\x31\x33\x36\
+\x2c\x36\x37\x2e\x31\x39\x37\x2d\x31\x34\x39\x2e\x33\x33\x33\x2c\
+\x31\x34\x39\x2e\x33\x33\x34\x2d\x31\x34\x39\x2e\x33\x33\x33\x63\
+\x38\x32\x2e\x31\x33\x35\x2c\x30\x2c\x31\x34\x39\x2e\x33\x33\x32\
+\x2c\x36\x37\x2e\x31\x39\x38\x2c\x31\x34\x39\x2e\x33\x33\x32\x2c\
+\x31\x34\x39\x2e\x33\x33\x33\x43\x34\x30\x35\x2e\x33\x33\x32\x2c\
+\x33\x33\x38\x2e\x31\x33\x35\x2c\x33\x33\x38\x2e\x31\x33\x35\x2c\
+\x34\x30\x35\x2e\x33\x33\x33\x2c\x32\x35\x36\x2c\x34\x30\x35\x2e\
+\x33\x33\x33\x7a\x0d\x0a\x09\x09\x09\x22\x2f\x3e\x0d\x0a\x09\x3c\
+\x2f\x67\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\
+\x3e\x0d\x0a\
 \x00\x00\x04\xca\
 \x3c\
 \x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
@@ -283,6 +557,233 @@
 \x36\x37\x2c\x37\x2e\x34\x37\x30\x34\x0a\x09\x48\x33\x2e\x33\x37\
 \x33\x33\x4c\x37\x2e\x35\x2c\x33\x2e\x38\x39\x39\x33\x7a\x22\x2f\
 \x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x00\x6c\
+\x3c\
+\x73\x76\x67\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\
+\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\
+\x30\x2f\x73\x76\x67\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\
+\x30\x20\x30\x20\x32\x30\x20\x32\x30\x22\x3e\x3c\x70\x61\x74\x68\
+\x20\x64\x3d\x22\x4d\x31\x38\x20\x31\x32\x76\x31\x48\x38\x76\x35\
+\x6c\x2d\x36\x2d\x36\x20\x36\x2d\x36\x76\x35\x68\x38\x56\x32\x68\
+\x32\x7a\x22\x2f\x3e\x3c\x2f\x73\x76\x67\x3e\
+\x00\x00\x04\xa2\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\
+\x30\x27\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x27\x55\x54\x46\
+\x2d\x38\x27\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x54\x68\x69\x73\x20\
+\x66\x69\x6c\x65\x20\x77\x61\x73\x20\x67\x65\x6e\x65\x72\x61\x74\
+\x65\x64\x20\x62\x79\x20\x64\x76\x69\x73\x76\x67\x6d\x20\x32\x2e\
+\x38\x20\x2d\x2d\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\x73\x69\
+\x6f\x6e\x3d\x27\x31\x2e\x31\x27\x20\x78\x6d\x6c\x6e\x73\x3d\x27\
+\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\
+\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x27\x20\x78\x6d\x6c\x6e\
+\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x27\x68\x74\x74\x70\x3a\x2f\x2f\
+\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\
+\x78\x6c\x69\x6e\x6b\x27\x20\x77\x69\x64\x74\x68\x3d\x27\x36\x33\
+\x2e\x39\x39\x39\x36\x70\x74\x27\x20\x68\x65\x69\x67\x68\x74\x3d\
+\x27\x36\x33\x2e\x39\x39\x39\x37\x70\x74\x27\x20\x76\x69\x65\x77\
+\x42\x6f\x78\x3d\x27\x35\x36\x2e\x34\x30\x39\x34\x20\x35\x33\x2e\
+\x38\x35\x38\x33\x20\x36\x33\x2e\x39\x39\x39\x36\x20\x36\x33\x2e\
+\x39\x39\x39\x37\x27\x3e\x0a\x3c\x67\x20\x69\x64\x3d\x27\x70\x61\
+\x67\x65\x31\x27\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\
+\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\x39\x39\x36\
+\x32\x36\x34\x20\x30\x20\x30\x20\x30\x2e\x39\x39\x36\x32\x36\x34\
+\x20\x35\x38\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\x35\x38\
+\x29\x27\x3e\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x27\x4d\x20\x33\
+\x2e\x39\x35\x37\x33\x35\x20\x2d\x33\x32\x2e\x31\x32\x43\x20\x34\
+\x2e\x31\x35\x35\x35\x36\x20\x2d\x33\x39\x2e\x32\x37\x34\x35\x20\
+\x36\x2e\x39\x38\x34\x37\x33\x20\x2d\x34\x36\x2e\x31\x30\x34\x37\
+\x20\x31\x31\x2e\x39\x30\x33\x36\x20\x2d\x35\x31\x2e\x33\x30\x33\
+\x39\x43\x20\x32\x37\x2e\x34\x34\x31\x31\x20\x2d\x36\x37\x2e\x37\
+\x32\x36\x39\x20\x35\x33\x2e\x33\x30\x32\x31\x20\x2d\x36\x31\x2e\
+\x35\x34\x30\x35\x20\x35\x36\x2e\x31\x35\x32\x33\x20\x2d\x34\x32\
+\x2e\x35\x30\x32\x32\x43\x20\x35\x37\x2e\x36\x32\x37\x20\x2d\x33\
+\x32\x2e\x36\x35\x31\x39\x20\x35\x30\x2e\x35\x38\x35\x36\x20\x2d\
+\x32\x33\x2e\x35\x36\x32\x31\x20\x34\x30\x2e\x36\x37\x39\x34\x20\
+\x2d\x32\x32\x2e\x35\x32\x38\x31\x27\x20\x66\x69\x6c\x6c\x3d\x27\
+\x6e\x6f\x6e\x65\x27\x20\x73\x74\x72\x6f\x6b\x65\x3d\x27\x23\x30\
+\x30\x30\x30\x30\x30\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\
+\x6e\x65\x63\x61\x70\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\
+\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3d\x27\x72\
+\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\
+\x65\x72\x6c\x69\x6d\x69\x74\x3d\x27\x31\x30\x2e\x30\x33\x37\x35\
+\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x27\
+\x32\x2e\x35\x30\x39\x33\x37\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\
+\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\
+\x74\x72\x69\x78\x28\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x30\x20\
+\x30\x20\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x35\x38\x2e\x34\x36\
+\x36\x39\x20\x31\x31\x37\x2e\x38\x35\x38\x29\x27\x3e\x0a\x3c\x63\
+\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\x33\x2e\x39\x35\x37\x33\
+\x35\x27\x20\x63\x79\x3d\x27\x2d\x33\x32\x2e\x31\x32\x27\x20\x66\
+\x69\x6c\x6c\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\x20\x72\x3d\
+\x27\x36\x2e\x30\x32\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\
+\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\
+\x74\x72\x69\x78\x28\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x30\x20\
+\x30\x20\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x35\x38\x2e\x34\x36\
+\x36\x39\x20\x31\x31\x37\x2e\x38\x35\x38\x29\x27\x3e\x0a\x3c\x63\
+\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\x31\x31\x2e\x39\x30\x33\
+\x36\x27\x20\x63\x79\x3d\x27\x2d\x35\x31\x2e\x33\x30\x33\x39\x27\
+\x20\x66\x69\x6c\x6c\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\x20\
+\x72\x3d\x27\x36\x2e\x30\x32\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\x67\
+\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\
+\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\x39\x39\x36\x32\x36\x34\x20\
+\x30\x20\x30\x20\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x35\x38\x2e\
+\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\x35\x38\x29\x27\x3e\x0a\
+\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\x35\x36\x2e\x31\
+\x35\x32\x33\x27\x20\x63\x79\x3d\x27\x2d\x34\x32\x2e\x35\x30\x32\
+\x32\x27\x20\x66\x69\x6c\x6c\x3d\x27\x23\x30\x30\x30\x30\x30\x30\
+\x27\x20\x72\x3d\x27\x36\x2e\x30\x32\x32\x35\x27\x2f\x3e\x0a\x3c\
+\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\
+\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\x39\x39\x36\x32\x36\
+\x34\x20\x30\x20\x30\x20\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x35\
+\x38\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\x35\x38\x29\x27\
+\x3e\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\x34\x30\
+\x2e\x36\x37\x39\x34\x27\x20\x63\x79\x3d\x27\x2d\x32\x32\x2e\x35\
+\x32\x38\x31\x27\x20\x66\x69\x6c\x6c\x3d\x27\x23\x30\x30\x30\x30\
+\x30\x30\x27\x20\x72\x3d\x27\x36\x2e\x30\x32\x32\x35\x27\x2f\x3e\
+\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\
+\x3e\
+\x00\x00\x02\xb7\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
+\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
+\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\
+\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
+\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
+\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
+\x20\x20\x2d\x2d\x3e\x0d\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\
+\x20\x73\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\
+\x57\x33\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\
+\x2f\x2f\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
+\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\
+\x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\
+\x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0d\x0a\x3c\x73\x76\x67\x20\
+\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
+\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\
+\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\
+\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\
+\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\
+\x39\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\
+\x20\x79\x3d\x22\x30\x70\x78\x22\x0d\x0a\x09\x20\x77\x69\x64\x74\
+\x68\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\
+\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\
+\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\
+\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\
+\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\
+\x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\
+\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x67\x20\x69\x64\x3d\
+\x22\x49\x63\x6f\x6e\x5f\x35\x5f\x22\x3e\x0d\x0a\x09\x3c\x67\x3e\
+\x0d\x0a\x09\x09\x3c\x70\x6f\x6c\x79\x67\x6f\x6e\x20\x70\x6f\x69\
+\x6e\x74\x73\x3d\x22\x34\x30\x35\x2c\x31\x33\x36\x2e\x37\x39\x38\
+\x20\x33\x37\x35\x2e\x32\x30\x32\x2c\x31\x30\x37\x20\x32\x35\x36\
+\x2c\x32\x32\x36\x2e\x32\x30\x32\x20\x31\x33\x36\x2e\x37\x39\x38\
+\x2c\x31\x30\x37\x20\x31\x30\x37\x2c\x31\x33\x36\x2e\x37\x39\x38\
+\x20\x32\x32\x36\x2e\x32\x30\x32\x2c\x32\x35\x36\x20\x31\x30\x37\
+\x2c\x33\x37\x35\x2e\x32\x30\x32\x20\x31\x33\x36\x2e\x37\x39\x38\
+\x2c\x34\x30\x35\x20\x32\x35\x36\x2c\x32\x38\x35\x2e\x37\x39\x38\
+\x20\x0d\x0a\x09\x09\x09\x33\x37\x35\x2e\x32\x30\x32\x2c\x34\x30\
+\x35\x20\x34\x30\x35\x2c\x33\x37\x35\x2e\x32\x30\x32\x20\x32\x38\
+\x35\x2e\x37\x39\x38\x2c\x32\x35\x36\x20\x09\x09\x22\x2f\x3e\x0d\
+\x0a\x09\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\
+\x73\x76\x67\x3e\x0d\x0a\
+\x00\x00\x05\xca\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
+\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
+\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\
+\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
+\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
+\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
+\x20\x20\x2d\x2d\x3e\x0d\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\
+\x20\x73\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\
+\x57\x33\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\
+\x2f\x2f\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
+\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\
+\x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\
+\x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0d\x0a\x3c\x73\x76\x67\x20\
+\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
+\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\
+\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\
+\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\
+\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\
+\x39\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\
+\x20\x79\x3d\x22\x30\x70\x78\x22\x0d\x0a\x09\x20\x77\x69\x64\x74\
+\x68\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\
+\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\
+\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\
+\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\
+\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\
+\x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\
+\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x70\x61\x74\x68\x20\
+\x64\x3d\x22\x4d\x34\x35\x30\x2e\x36\x37\x39\x2c\x32\x37\x33\x2e\
+\x35\x63\x2d\x31\x34\x2e\x35\x38\x35\x2d\x31\x34\x2e\x35\x37\x37\
+\x2d\x33\x36\x2e\x30\x35\x34\x2d\x31\x35\x2e\x38\x39\x2d\x35\x30\
+\x2e\x36\x33\x39\x2d\x31\x2e\x33\x31\x32\x6c\x2d\x34\x31\x2e\x36\
+\x38\x37\x2c\x34\x31\x2e\x36\x36\x34\x63\x2d\x31\x30\x2e\x38\x35\
+\x32\x2c\x31\x30\x2e\x38\x33\x36\x2d\x32\x33\x2e\x39\x33\x2c\x31\
+\x30\x2e\x38\x35\x39\x2d\x33\x31\x2e\x35\x36\x34\x2c\x31\x2e\x38\
+\x35\x32\x0d\x0a\x09\x63\x2d\x35\x2e\x30\x35\x37\x2d\x35\x2e\x39\
+\x36\x38\x2d\x33\x2e\x30\x36\x31\x2d\x32\x34\x2e\x33\x37\x34\x2d\
+\x31\x2e\x36\x34\x34\x2d\x33\x36\x2e\x30\x34\x39\x6c\x32\x30\x2e\
+\x39\x30\x37\x2d\x31\x37\x31\x2e\x38\x34\x39\x63\x31\x2e\x38\x36\
+\x37\x2d\x31\x35\x2e\x33\x35\x33\x2d\x39\x2e\x30\x37\x2d\x33\x30\
+\x2e\x31\x38\x35\x2d\x32\x34\x2e\x34\x33\x2d\x33\x32\x2e\x30\x35\
+\x31\x0d\x0a\x09\x63\x2d\x31\x35\x2e\x33\x35\x38\x2d\x31\x2e\x38\
+\x36\x37\x2d\x32\x39\x2e\x33\x32\x32\x2c\x39\x2e\x39\x33\x39\x2d\
+\x33\x31\x2e\x31\x39\x31\x2c\x32\x35\x2e\x32\x38\x39\x4c\x32\x36\
+\x37\x2e\x33\x37\x2c\x32\x33\x36\x2e\x30\x32\x31\x63\x2d\x31\x2e\
+\x32\x30\x35\x2c\x33\x2e\x33\x35\x38\x2d\x33\x2e\x37\x39\x2c\x33\
+\x2e\x39\x33\x38\x2d\x34\x2e\x30\x38\x31\x2d\x30\x2e\x35\x38\x32\
+\x4c\x32\x35\x35\x2e\x34\x34\x2c\x36\x30\x0d\x0a\x09\x63\x30\x2d\
+\x31\x35\x2e\x34\x36\x35\x2d\x31\x32\x2e\x35\x34\x32\x2d\x32\x38\
+\x2d\x32\x38\x2e\x30\x31\x34\x2d\x32\x38\x63\x2d\x31\x35\x2e\x34\
+\x37\x33\x2c\x30\x2d\x32\x38\x2e\x30\x31\x35\x2c\x31\x32\x2e\x35\
+\x33\x35\x2d\x32\x38\x2e\x30\x31\x35\x2c\x32\x38\x6c\x2d\x30\x2e\
+\x35\x35\x32\x2c\x31\x37\x36\x2e\x37\x35\x32\x63\x30\x2e\x31\x34\
+\x36\x2c\x32\x2e\x30\x34\x2d\x31\x2e\x36\x30\x34\x2c\x32\x2e\x36\
+\x32\x34\x2d\x31\x2e\x39\x32\x2c\x30\x2e\x32\x39\x34\x4c\x31\x37\
+\x32\x2e\x30\x31\x36\x2c\x39\x39\x2e\x30\x37\x37\x0d\x0a\x09\x63\
+\x2d\x32\x2e\x37\x35\x2d\x31\x35\x2e\x32\x31\x39\x2d\x31\x37\x2e\
+\x33\x32\x33\x2d\x32\x36\x2e\x32\x30\x33\x2d\x33\x32\x2e\x35\x34\
+\x38\x2d\x32\x33\x2e\x34\x35\x33\x63\x2d\x31\x35\x2e\x32\x32\x37\
+\x2c\x32\x2e\x37\x34\x38\x2d\x32\x35\x2e\x33\x33\x39\x2c\x31\x38\
+\x2e\x31\x38\x37\x2d\x32\x32\x2e\x35\x39\x31\x2c\x33\x33\x2e\x34\
+\x30\x33\x6c\x32\x32\x2e\x31\x39\x33\x2c\x31\x36\x31\x2e\x34\x35\
+\x35\x0d\x0a\x09\x63\x30\x2e\x30\x32\x33\x2c\x32\x2e\x38\x37\x32\
+\x2d\x30\x2e\x39\x34\x31\x2c\x34\x2e\x35\x31\x33\x2d\x32\x2e\x33\
+\x30\x38\x2c\x30\x2e\x38\x33\x31\x6c\x2d\x33\x33\x2e\x31\x30\x39\
+\x2d\x38\x38\x2e\x35\x31\x37\x63\x2d\x35\x2e\x31\x38\x2d\x31\x34\
+\x2e\x35\x37\x32\x2d\x32\x31\x2e\x31\x39\x36\x2d\x32\x33\x2e\x30\
+\x36\x35\x2d\x33\x35\x2e\x37\x37\x36\x2d\x31\x37\x2e\x38\x38\x39\
+\x0d\x0a\x09\x63\x2d\x31\x34\x2e\x35\x37\x39\x2c\x35\x2e\x31\x37\
+\x37\x2d\x32\x32\x2e\x32\x30\x31\x2c\x32\x32\x2e\x30\x36\x31\x2d\
+\x31\x37\x2e\x30\x32\x33\x2c\x33\x36\x2e\x36\x33\x31\x6c\x35\x38\
+\x2e\x30\x34\x32\x2c\x31\x38\x39\x2e\x36\x32\x35\x63\x30\x2e\x33\
+\x30\x33\x2c\x31\x2e\x30\x34\x36\x2c\x30\x2e\x36\x32\x34\x2c\x32\
+\x2e\x30\x38\x35\x2c\x30\x2e\x39\x35\x33\x2c\x33\x2e\x31\x31\x38\
+\x6c\x30\x2e\x31\x32\x31\x2c\x30\x2e\x33\x39\x0d\x0a\x09\x63\x30\
+\x2e\x30\x31\x31\x2c\x30\x2e\x30\x33\x31\x2c\x30\x2e\x30\x32\x35\
+\x2c\x30\x2e\x30\x35\x38\x2c\x30\x2e\x30\x33\x35\x2c\x30\x2e\x30\
+\x38\x38\x43\x31\x32\x36\x2e\x30\x37\x39\x2c\x34\x34\x34\x2e\x32\
+\x33\x33\x2c\x31\x37\x32\x2e\x35\x37\x2c\x34\x38\x30\x2c\x32\x32\
+\x37\x2e\x34\x32\x37\x2c\x34\x38\x30\x63\x33\x35\x2e\x31\x31\x36\
+\x2c\x30\x2c\x37\x31\x2e\x35\x39\x31\x2d\x31\x32\x2e\x33\x37\x38\
+\x2c\x39\x39\x2e\x33\x35\x37\x2d\x33\x33\x2e\x36\x37\x32\x0d\x0a\
+\x09\x63\x30\x2e\x30\x30\x31\x2c\x30\x2c\x30\x2e\x30\x30\x33\x2d\
+\x30\x2e\x30\x30\x32\x2c\x30\x2e\x30\x30\x33\x2d\x30\x2e\x30\x30\
+\x32\x63\x32\x39\x2e\x39\x39\x2d\x31\x38\x2e\x30\x35\x31\x2c\x31\
+\x32\x36\x2e\x30\x37\x31\x2d\x31\x32\x31\x2e\x33\x34\x37\x2c\x31\
+\x32\x36\x2e\x30\x37\x31\x2d\x31\x32\x31\x2e\x33\x34\x37\x43\x34\
+\x36\x37\x2e\x34\x34\x35\x2c\x33\x31\x30\x2e\x34\x30\x32\x2c\x34\
+\x36\x35\x2e\x32\x36\x36\x2c\x32\x38\x38\x2e\x30\x38\x2c\x34\x35\
+\x30\x2e\x36\x37\x39\x2c\x32\x37\x33\x2e\x35\x7a\x22\x2f\x3e\x0d\
+\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
 \x00\x00\x05\xd4\
 \x3c\
 \x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\
@@ -379,6 +880,116 @@
 \x2d\x77\x69\x64\x74\x68\x3d\x27\x33\x2e\x35\x31\x33\x31\x32\x27\
 \x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\
 \x76\x67\x3e\
+\x00\x00\x02\xa1\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
+\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
+\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x38\x2e\x31\x2e\x31\x2c\
+\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
+\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
+\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
+\x20\x20\x2d\x2d\x3e\x0d\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\
+\x20\x73\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\
+\x57\x33\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\
+\x2f\x2f\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
+\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\
+\x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\
+\x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0d\x0a\x3c\x73\x76\x67\x20\
+\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
+\x3d\x22\x53\x61\x76\x65\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x35\x31\x32\x70\x78\x22\x20\
+\x79\x3d\x22\x35\x31\x32\x70\x78\x22\x0d\x0a\x09\x20\x76\x69\x65\
+\x77\x42\x6f\x78\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\
+\x32\x22\x20\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\
+\x6f\x75\x6e\x64\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\
+\x32\x20\x35\x31\x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\
+\x3d\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x67\
+\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\x74\x72\
+\x69\x78\x28\x32\x34\x20\x30\x20\x30\x20\x32\x34\x20\x30\x20\x30\
+\x29\x27\x3e\x0d\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x31\
+\x35\x2e\x31\x37\x33\x2c\x32\x48\x34\x43\x32\x2e\x38\x39\x39\x2c\
+\x32\x2c\x32\x2c\x32\x2e\x39\x2c\x32\x2c\x34\x76\x31\x32\x63\x30\
+\x2c\x31\x2e\x31\x2c\x30\x2e\x38\x39\x39\x2c\x32\x2c\x32\x2c\x32\
+\x68\x31\x32\x63\x31\x2e\x31\x30\x31\x2c\x30\x2c\x32\x2d\x30\x2e\
+\x39\x2c\x32\x2d\x32\x56\x35\x2e\x31\x32\x37\x4c\x31\x35\x2e\x31\
+\x37\x33\x2c\x32\x7a\x20\x4d\x31\x34\x2c\x38\x63\x30\x2c\x30\x2e\
+\x35\x34\x39\x2d\x30\x2e\x34\x35\x2c\x31\x2d\x31\x2c\x31\x48\x37\
+\x0d\x0a\x09\x43\x36\x2e\x34\x35\x2c\x39\x2c\x36\x2c\x38\x2e\x35\
+\x34\x39\x2c\x36\x2c\x38\x56\x33\x68\x38\x56\x38\x7a\x20\x4d\x31\
+\x33\x2c\x34\x68\x2d\x32\x76\x34\x68\x32\x56\x34\x7a\x22\x2f\x3e\
+\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
+\
+\x00\x00\x03\xe6\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
+\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
+\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x38\x2e\x31\x2e\x31\x2c\
+\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
+\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
+\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
+\x20\x20\x2d\x2d\x3e\x0d\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\
+\x20\x73\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\
+\x57\x33\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\
+\x2f\x2f\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
+\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\
+\x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\
+\x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0d\x0a\x3c\x73\x76\x67\x20\
+\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
+\x3d\x22\x43\x68\x65\x76\x72\x6f\x6e\x5f\x63\x69\x72\x63\x6c\x65\
+\x64\x5f\x72\x69\x67\x68\x74\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\
+\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\
+\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\
+\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\
+\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\
+\x78\x6c\x69\x6e\x6b\x22\x0d\x0a\x09\x20\x78\x3d\x22\x30\x70\x78\
+\x22\x20\x79\x3d\x22\x30\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\
+\x78\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\
+\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\
+\x64\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\
+\x31\x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\
+\x72\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x67\x20\x74\x72\
+\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\
+\x32\x34\x20\x30\x20\x30\x20\x32\x34\x20\x30\x20\x30\x29\x27\x3e\
+\x0d\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x31\x31\x2c\x31\
+\x30\x4c\x38\x2e\x36\x39\x38\x2c\x37\x2e\x34\x39\x34\x63\x2d\x30\
+\x2e\x31\x39\x36\x2d\x30\x2e\x31\x39\x38\x2d\x30\x2e\x31\x39\x36\
+\x2d\x30\x2e\x35\x31\x39\x2c\x30\x2d\x30\x2e\x37\x31\x38\x63\x30\
+\x2e\x31\x39\x36\x2d\x30\x2e\x31\x39\x37\x2c\x30\x2e\x35\x31\x35\
+\x2d\x30\x2e\x31\x39\x37\x2c\x30\x2e\x37\x31\x2c\x30\x6c\x32\x2e\
+\x38\x30\x37\x2c\x32\x2e\x38\x36\x34\x0d\x0a\x09\x63\x30\x2e\x31\
+\x39\x36\x2c\x30\x2e\x31\x39\x39\x2c\x30\x2e\x31\x39\x36\x2c\x30\
+\x2e\x35\x32\x2c\x30\x2c\x30\x2e\x37\x31\x37\x6c\x2d\x32\x2e\x38\
+\x30\x37\x2c\x32\x2e\x38\x36\x34\x63\x2d\x30\x2e\x31\x39\x35\x2c\
+\x30\x2e\x31\x39\x39\x2d\x30\x2e\x35\x31\x34\x2c\x30\x2e\x31\x39\
+\x38\x2d\x30\x2e\x37\x31\x2c\x30\x63\x2d\x30\x2e\x31\x39\x36\x2d\
+\x30\x2e\x31\x39\x37\x2d\x30\x2e\x31\x39\x36\x2d\x30\x2e\x35\x31\
+\x38\x2c\x30\x2d\x30\x2e\x37\x31\x37\x4c\x31\x31\x2c\x31\x30\x7a\
+\x20\x4d\x31\x30\x2c\x30\x2e\x34\x0d\x0a\x09\x63\x35\x2e\x33\x30\
+\x32\x2c\x30\x2c\x39\x2e\x36\x2c\x34\x2e\x32\x39\x38\x2c\x39\x2e\
+\x36\x2c\x39\x2e\x36\x63\x30\x2c\x35\x2e\x33\x30\x33\x2d\x34\x2e\
+\x32\x39\x38\x2c\x39\x2e\x36\x2d\x39\x2e\x36\x2c\x39\x2e\x36\x53\
+\x30\x2e\x34\x2c\x31\x35\x2e\x33\x30\x33\x2c\x30\x2e\x34\x2c\x31\
+\x30\x43\x30\x2e\x34\x2c\x34\x2e\x36\x39\x38\x2c\x34\x2e\x36\x39\
+\x38\x2c\x30\x2e\x34\x2c\x31\x30\x2c\x30\x2e\x34\x7a\x20\x4d\x31\
+\x30\x2c\x31\x38\x2e\x33\x35\x34\x0d\x0a\x09\x63\x34\x2e\x36\x31\
+\x33\x2c\x30\x2c\x38\x2e\x33\x35\x34\x2d\x33\x2e\x37\x34\x2c\x38\
+\x2e\x33\x35\x34\x2d\x38\x2e\x33\x35\x34\x63\x30\x2d\x34\x2e\x36\
+\x31\x34\x2d\x33\x2e\x37\x34\x31\x2d\x38\x2e\x33\x35\x34\x2d\x38\
+\x2e\x33\x35\x34\x2d\x38\x2e\x33\x35\x34\x63\x2d\x34\x2e\x36\x31\
+\x35\x2c\x30\x2d\x38\x2e\x33\x35\x34\x2c\x33\x2e\x37\x34\x2d\x38\
+\x2e\x33\x35\x34\x2c\x38\x2e\x33\x35\x34\x0d\x0a\x09\x43\x31\x2e\
+\x36\x34\x35\x2c\x31\x34\x2e\x36\x31\x34\x2c\x35\x2e\x33\x38\x35\
+\x2c\x31\x38\x2e\x33\x35\x34\x2c\x31\x30\x2c\x31\x38\x2e\x33\x35\
+\x34\x7a\x22\x2f\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x73\
+\x76\x67\x3e\x0d\x0a\
 \x00\x00\x03\x4c\
 \x3c\
 \x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
@@ -434,7 +1045,7 @@
 \x2c\x34\x32\x32\x2e\x34\x2c\x32\x35\x36\x2c\x34\x32\x32\x2e\x34\
 \x7a\x22\x2f\x3e\x0d\x0a\x09\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x67\
 \x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
-\x00\x00\x07\x80\
+\x00\x00\x03\xeb\
 \x3c\
 \x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
 \x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
@@ -461,108 +1072,51 @@
 \x20\x79\x3d\x22\x30\x70\x78\x22\x0d\x0a\x09\x20\x77\x69\x64\x74\
 \x68\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\
 \x3d\x22\x35\x31\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\
-\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\
-\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\
-\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\
-\x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\
-\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x67\x3e\x0d\x0a\x09\
-\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x31\x39\x33\x2e\x34\x36\
-\x2c\x32\x34\x39\x2e\x30\x35\x36\x63\x33\x2e\x37\x32\x33\x2d\x30\
-\x2e\x36\x37\x2c\x37\x2e\x35\x38\x39\x2d\x31\x2e\x30\x34\x31\x2c\
-\x31\x31\x2e\x35\x38\x36\x2d\x31\x2e\x30\x34\x31\x4c\x32\x30\x31\
-\x2e\x39\x32\x34\x2c\x32\x34\x38\x68\x31\x30\x33\x2e\x38\x32\x33\
-\x63\x34\x2e\x35\x30\x33\x2c\x30\x2c\x38\x2e\x38\x30\x36\x2d\x30\
-\x2e\x36\x31\x37\x2c\x31\x32\x2e\x39\x30\x38\x2d\x31\x2e\x37\x35\
-\x34\x0d\x0a\x09\x09\x63\x31\x39\x2e\x33\x37\x2d\x35\x2e\x33\x36\
-\x33\x2c\x33\x33\x2e\x33\x34\x35\x2d\x32\x32\x2e\x35\x33\x37\x2c\
-\x33\x33\x2e\x33\x34\x35\x2d\x34\x33\x2e\x36\x36\x33\x76\x2d\x33\
-\x30\x2e\x38\x32\x32\x76\x2d\x35\x36\x2e\x34\x30\x32\x63\x30\x2d\
-\x32\x34\x2e\x38\x33\x32\x2d\x32\x31\x2e\x31\x35\x2d\x34\x33\x2e\
-\x34\x38\x34\x2d\x34\x36\x2e\x32\x38\x39\x2d\x34\x37\x2e\x36\x30\
-\x36\x0d\x0a\x09\x09\x63\x2d\x31\x35\x2e\x39\x33\x31\x2d\x32\x2e\
-\x36\x32\x34\x2d\x33\x39\x2e\x32\x35\x38\x2d\x33\x2e\x38\x32\x37\
-\x2d\x35\x35\x2e\x30\x38\x39\x2d\x33\x2e\x37\x34\x39\x63\x2d\x31\
-\x35\x2e\x38\x32\x39\x2c\x30\x2e\x30\x38\x36\x2d\x33\x30\x2e\x39\
-\x38\x31\x2c\x31\x2e\x34\x30\x34\x2d\x34\x34\x2e\x32\x37\x37\x2c\
-\x33\x2e\x37\x34\x39\x43\x31\x36\x37\x2e\x31\x34\x33\x2c\x37\x34\
-\x2e\x35\x37\x36\x2c\x31\x36\x30\x2c\x38\x38\x2e\x39\x32\x38\x2c\
-\x31\x36\x30\x2c\x31\x31\x35\x2e\x33\x35\x39\x56\x31\x34\x34\x68\
-\x39\x36\x0d\x0a\x09\x09\x76\x31\x36\x48\x31\x32\x38\x2e\x38\x32\
-\x63\x2d\x33\x35\x2e\x36\x32\x38\x2c\x30\x2d\x36\x34\x2e\x35\x33\
-\x38\x2c\x34\x32\x2e\x35\x37\x31\x2d\x36\x34\x2e\x38\x31\x33\x2c\
-\x39\x35\x2e\x32\x34\x32\x43\x36\x34\x2e\x30\x30\x35\x2c\x32\x35\
-\x35\x2e\x34\x39\x35\x2c\x36\x34\x2c\x32\x35\x35\x2e\x37\x34\x37\
-\x2c\x36\x34\x2c\x32\x35\x36\x63\x30\x2c\x39\x2e\x35\x32\x33\x2c\
-\x30\x2e\x39\x34\x2c\x31\x38\x2e\x37\x32\x2c\x32\x2e\x36\x38\x35\
-\x2c\x32\x37\x2e\x34\x30\x34\x0d\x0a\x09\x09\x43\x37\x34\x2e\x36\
-\x34\x38\x2c\x33\x32\x33\x2e\x30\x37\x2c\x39\x39\x2e\x34\x35\x31\
-\x2c\x33\x35\x32\x2c\x31\x32\x38\x2e\x38\x32\x2c\x33\x35\x32\x48\
-\x31\x34\x34\x76\x2d\x32\x2e\x36\x36\x32\x76\x2d\x34\x33\x2e\x32\
-\x37\x33\x43\x31\x34\x34\x2c\x32\x37\x39\x2e\x32\x33\x38\x2c\x31\
-\x36\x34\x2e\x31\x34\x36\x2c\x32\x35\x34\x2e\x33\x33\x32\x2c\x31\
-\x39\x33\x2e\x34\x36\x2c\x32\x34\x39\x2e\x30\x35\x36\x7a\x20\x4d\
-\x32\x30\x33\x2e\x36\x35\x36\x2c\x31\x32\x37\x2e\x30\x30\x32\x0d\
-\x0a\x09\x09\x63\x2d\x39\x2e\x35\x39\x32\x2c\x30\x2d\x31\x37\x2e\
-\x33\x38\x34\x2d\x37\x2e\x37\x38\x35\x2d\x31\x37\x2e\x33\x38\x34\
-\x2d\x31\x37\x2e\x34\x30\x33\x63\x30\x2d\x39\x2e\x36\x36\x34\x2c\
-\x37\x2e\x37\x37\x34\x2d\x31\x37\x2e\x35\x32\x2c\x31\x37\x2e\x33\
-\x38\x34\x2d\x31\x37\x2e\x35\x32\x63\x39\x2e\x35\x37\x34\x2c\x30\
-\x2c\x31\x37\x2e\x33\x39\x39\x2c\x37\x2e\x38\x35\x35\x2c\x31\x37\
-\x2e\x33\x39\x39\x2c\x31\x37\x2e\x35\x32\x0d\x0a\x09\x09\x43\x32\
-\x32\x31\x2e\x30\x35\x36\x2c\x31\x31\x39\x2e\x32\x31\x37\x2c\x32\
-\x31\x33\x2e\x32\x34\x36\x2c\x31\x32\x37\x2e\x30\x30\x32\x2c\x32\
-\x30\x33\x2e\x36\x35\x36\x2c\x31\x32\x37\x2e\x30\x30\x32\x7a\x22\
-\x2f\x3e\x0d\x0a\x09\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x34\
-\x34\x33\x2e\x39\x35\x31\x2c\x32\x32\x32\x2e\x35\x34\x33\x43\x34\
-\x33\x34\x2e\x37\x38\x2c\x31\x38\x36\x2e\x30\x32\x31\x2c\x34\x31\
-\x31\x2e\x30\x33\x33\x2c\x31\x36\x30\x2c\x33\x38\x33\x2e\x31\x38\
-\x2c\x31\x36\x30\x48\x33\x36\x38\x76\x32\x2e\x36\x32\x36\x76\x33\
-\x38\x2e\x30\x34\x36\x63\x30\x2c\x33\x33\x2e\x39\x31\x35\x2d\x32\
-\x32\x2e\x32\x38\x36\x2c\x35\x38\x2e\x34\x37\x34\x2d\x34\x39\x2e\
-\x34\x38\x39\x2c\x36\x32\x2e\x36\x38\x31\x0d\x0a\x09\x09\x63\x2d\
-\x32\x2e\x37\x33\x37\x2c\x30\x2e\x34\x32\x34\x2d\x35\x2e\x34\x38\
-\x33\x2c\x30\x2e\x36\x34\x36\x2d\x38\x2e\x33\x30\x31\x2c\x30\x2e\
-\x36\x34\x36\x48\x32\x30\x36\x2e\x33\x35\x31\x63\x2d\x34\x2e\x35\
-\x31\x38\x2c\x30\x2d\x38\x2e\x39\x30\x34\x2c\x30\x2e\x35\x38\x34\
-\x2d\x31\x33\x2e\x30\x34\x39\x2c\x31\x2e\x36\x37\x32\x43\x31\x37\
-\x34\x2e\x31\x38\x2c\x32\x37\x30\x2e\x36\x38\x39\x2c\x31\x36\x30\
-\x2c\x32\x38\x36\x2e\x36\x2c\x31\x36\x30\x2c\x33\x30\x37\x2e\x32\
-\x33\x36\x76\x33\x32\x2e\x39\x32\x32\x0d\x0a\x09\x09\x76\x35\x34\
-\x2e\x33\x30\x35\x63\x30\x2c\x32\x34\x2e\x38\x33\x32\x2c\x32\x34\
-\x2e\x39\x37\x37\x2c\x33\x39\x2e\x34\x32\x36\x2c\x34\x39\x2e\x34\
-\x38\x31\x2c\x34\x36\x2e\x35\x35\x31\x63\x32\x39\x2e\x33\x32\x37\
-\x2c\x38\x2e\x35\x33\x31\x2c\x36\x31\x2e\x32\x36\x37\x2c\x31\x30\
-\x2e\x30\x36\x38\x2c\x39\x36\x2e\x33\x36\x36\x2c\x30\x43\x33\x32\
-\x39\x2e\x31\x35\x2c\x34\x33\x34\x2e\x33\x35\x34\x2c\x33\x35\x32\
-\x2c\x34\x32\x30\x2e\x38\x39\x33\x2c\x33\x35\x32\x2c\x33\x39\x34\
-\x2e\x34\x36\x33\x56\x33\x36\x38\x0d\x0a\x09\x09\x68\x2d\x39\x36\
-\x76\x2d\x31\x36\x68\x31\x32\x37\x2e\x31\x38\x63\x32\x35\x2e\x32\
-\x34\x2c\x30\x2c\x34\x37\x2e\x31\x30\x37\x2d\x32\x31\x2e\x33\x36\
-\x35\x2c\x35\x37\x2e\x38\x31\x34\x2d\x35\x32\x2e\x35\x34\x39\x43\
-\x34\x34\x35\x2e\x34\x37\x34\x2c\x32\x38\x36\x2e\x34\x30\x34\x2c\
-\x34\x34\x38\x2c\x32\x37\x31\x2e\x36\x34\x31\x2c\x34\x34\x38\x2c\
-\x32\x35\x36\x0d\x0a\x09\x09\x43\x34\x34\x38\x2c\x32\x34\x34\x2e\
-\x32\x33\x32\x2c\x34\x34\x36\x2e\x35\x36\x37\x2c\x32\x33\x32\x2e\
-\x39\x36\x32\x2c\x34\x34\x33\x2e\x39\x35\x31\x2c\x32\x32\x32\x2e\
-\x35\x34\x33\x7a\x20\x4d\x33\x30\x37\x2e\x38\x36\x37\x2c\x33\x38\
-\x32\x2e\x38\x32\x63\x39\x2e\x35\x39\x2c\x30\x2c\x31\x37\x2e\x33\
-\x38\x31\x2c\x37\x2e\x37\x38\x35\x2c\x31\x37\x2e\x33\x38\x31\x2c\
-\x31\x37\x2e\x34\x0d\x0a\x09\x09\x63\x30\x2c\x39\x2e\x36\x35\x2d\
-\x37\x2e\x37\x39\x31\x2c\x31\x37\x2e\x35\x32\x31\x2d\x31\x37\x2e\
-\x33\x38\x31\x2c\x31\x37\x2e\x35\x32\x31\x63\x2d\x39\x2e\x35\x37\
-\x37\x2c\x30\x2d\x31\x37\x2e\x33\x39\x39\x2d\x37\x2e\x38\x37\x31\
-\x2d\x31\x37\x2e\x33\x39\x39\x2d\x31\x37\x2e\x35\x32\x31\x43\x32\
-\x39\x30\x2e\x34\x36\x38\x2c\x33\x39\x30\x2e\x35\x39\x2c\x32\x39\
-\x38\x2e\x32\x37\x34\x2c\x33\x38\x32\x2e\x38\x32\x2c\x33\x30\x37\
-\x2e\x38\x36\x37\x2c\x33\x38\x32\x2e\x38\x32\x7a\x22\x2f\x3e\x0d\
-\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
-\x00\x00\x03\xc4\
+\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x73\
+\x74\x79\x6c\x65\x3d\x22\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\
+\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x6e\x65\x77\x20\x30\x20\x30\x20\
+\x35\x31\x32\x20\x35\x31\x32\x3b\x22\x20\x78\x6d\x6c\x3a\x73\x70\
+\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\
+\x0a\x3c\x67\x3e\x0d\x0a\x09\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\
+\x4d\x32\x35\x36\x2c\x31\x32\x38\x63\x2d\x38\x31\x2e\x39\x2c\x30\
+\x2d\x31\x34\x35\x2e\x37\x2c\x34\x38\x2e\x38\x2d\x32\x32\x34\x2c\
+\x31\x32\x38\x63\x36\x37\x2e\x34\x2c\x36\x37\x2e\x37\x2c\x31\x32\
+\x34\x2c\x31\x32\x38\x2c\x32\x32\x34\x2c\x31\x32\x38\x63\x39\x39\
+\x2e\x39\x2c\x30\x2c\x31\x37\x33\x2e\x34\x2d\x37\x36\x2e\x34\x2c\
+\x32\x32\x34\x2d\x31\x32\x36\x2e\x36\x0d\x0a\x09\x09\x43\x34\x32\
+\x38\x2e\x32\x2c\x31\x39\x38\x2e\x36\x2c\x33\x35\x34\x2e\x38\x2c\
+\x31\x32\x38\x2c\x32\x35\x36\x2c\x31\x32\x38\x7a\x20\x4d\x32\x35\
+\x36\x2c\x33\x34\x37\x2e\x33\x63\x2d\x34\x39\x2e\x34\x2c\x30\x2d\
+\x38\x39\x2e\x36\x2d\x34\x31\x2d\x38\x39\x2e\x36\x2d\x39\x31\x2e\
+\x33\x63\x30\x2d\x35\x30\x2e\x34\x2c\x34\x30\x2e\x32\x2d\x39\x31\
+\x2e\x33\x2c\x38\x39\x2e\x36\x2d\x39\x31\x2e\x33\x73\x38\x39\x2e\
+\x36\x2c\x34\x31\x2c\x38\x39\x2e\x36\x2c\x39\x31\x2e\x33\x0d\x0a\
+\x09\x09\x43\x33\x34\x35\x2e\x36\x2c\x33\x30\x36\x2e\x34\x2c\x33\
+\x30\x35\x2e\x34\x2c\x33\x34\x37\x2e\x33\x2c\x32\x35\x36\x2c\x33\
+\x34\x37\x2e\x33\x7a\x22\x2f\x3e\x0d\x0a\x09\x3c\x67\x3e\x0d\x0a\
+\x09\x09\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x32\x35\x36\x2c\
+\x32\x32\x34\x63\x30\x2d\x37\x2e\x39\x2c\x32\x2e\x39\x2d\x31\x35\
+\x2e\x31\x2c\x37\x2e\x36\x2d\x32\x30\x2e\x37\x63\x2d\x32\x2e\x35\
+\x2d\x30\x2e\x34\x2d\x35\x2d\x30\x2e\x36\x2d\x37\x2e\x36\x2d\x30\
+\x2e\x36\x63\x2d\x32\x38\x2e\x38\x2c\x30\x2d\x35\x32\x2e\x33\x2c\
+\x32\x33\x2e\x39\x2d\x35\x32\x2e\x33\x2c\x35\x33\x2e\x33\x63\x30\
+\x2c\x32\x39\x2e\x34\x2c\x32\x33\x2e\x35\x2c\x35\x33\x2e\x33\x2c\
+\x35\x32\x2e\x33\x2c\x35\x33\x2e\x33\x0d\x0a\x09\x09\x09\x73\x35\
+\x32\x2e\x33\x2d\x32\x33\x2e\x39\x2c\x35\x32\x2e\x33\x2d\x35\x33\
+\x2e\x33\x63\x30\x2d\x32\x2e\x33\x2d\x30\x2e\x32\x2d\x34\x2e\x36\
+\x2d\x30\x2e\x34\x2d\x36\x2e\x39\x63\x2d\x35\x2e\x35\x2c\x34\x2e\
+\x33\x2d\x31\x32\x2e\x33\x2c\x36\x2e\x39\x2d\x31\x39\x2e\x38\x2c\
+\x36\x2e\x39\x43\x32\x37\x30\x2e\x33\x2c\x32\x35\x36\x2c\x32\x35\
+\x36\x2c\x32\x34\x31\x2e\x37\x2c\x32\x35\x36\x2c\x32\x32\x34\x7a\
+\x22\x2f\x3e\x0d\x0a\x09\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x67\x3e\
+\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
+\x00\x00\x02\x79\
 \x3c\
 \x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
 \x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
 \x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
 \x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
-\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x38\x2e\x31\x2e\x30\x2c\
+\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\
 \x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
 \x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
 \x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
@@ -574,128 +1128,88 @@
 \x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\
 \x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0d\x0a\x3c\x73\x76\x67\x20\
 \x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
-\x3d\x22\x4d\x61\x67\x6e\x69\x66\x79\x69\x6e\x67\x5f\x67\x6c\x61\
-\x73\x73\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\
-\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\
-\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\x3a\x78\x6c\x69\
-\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\
-\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\x6c\x69\x6e\x6b\
-\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x0d\x0a\x09\x20\x79\x3d\x22\
-\x30\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
-\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
-\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
-\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
-\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
-\x76\x65\x22\x3e\x0d\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\
-\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\x32\x34\x20\x30\x20\
-\x30\x20\x32\x34\x20\x30\x20\x30\x29\x27\x3e\x0d\x0a\x3c\x70\x61\
-\x74\x68\x20\x64\x3d\x22\x4d\x31\x37\x2e\x35\x34\x35\x2c\x31\x35\
-\x2e\x34\x36\x37\x6c\x2d\x33\x2e\x37\x37\x39\x2d\x33\x2e\x37\x37\
-\x39\x63\x30\x2e\x35\x37\x2d\x30\x2e\x39\x33\x35\x2c\x30\x2e\x38\
-\x39\x38\x2d\x32\x2e\x30\x33\x35\x2c\x30\x2e\x38\x39\x38\x2d\x33\
-\x2e\x32\x31\x63\x30\x2d\x33\x2e\x34\x31\x37\x2d\x32\x2e\x39\x36\
-\x31\x2d\x36\x2e\x33\x37\x37\x2d\x36\x2e\x33\x37\x38\x2d\x36\x2e\
-\x33\x37\x37\x0d\x0a\x09\x43\x34\x2e\x38\x36\x39\x2c\x32\x2e\x31\
-\x2c\x32\x2e\x31\x2c\x34\x2e\x38\x37\x2c\x32\x2e\x31\x2c\x38\x2e\
-\x32\x38\x37\x63\x30\x2c\x33\x2e\x34\x31\x36\x2c\x32\x2e\x39\x36\
-\x31\x2c\x36\x2e\x33\x37\x37\x2c\x36\x2e\x33\x37\x37\x2c\x36\x2e\
-\x33\x37\x37\x63\x31\x2e\x31\x33\x37\x2c\x30\x2c\x32\x2e\x32\x2d\
-\x30\x2e\x33\x30\x39\x2c\x33\x2e\x31\x31\x35\x2d\x30\x2e\x38\x34\
-\x34\x6c\x33\x2e\x37\x39\x39\x2c\x33\x2e\x38\x30\x31\x0d\x0a\x09\
-\x63\x30\x2e\x33\x37\x32\x2c\x30\x2e\x33\x37\x31\x2c\x30\x2e\x39\
-\x37\x35\x2c\x30\x2e\x33\x37\x31\x2c\x31\x2e\x33\x34\x36\x2c\x30\
-\x6c\x30\x2e\x39\x34\x33\x2d\x30\x2e\x39\x34\x33\x43\x31\x38\x2e\
-\x30\x35\x31\x2c\x31\x36\x2e\x33\x30\x37\x2c\x31\x37\x2e\x39\x31\
-\x36\x2c\x31\x35\x2e\x38\x33\x38\x2c\x31\x37\x2e\x35\x34\x35\x2c\
-\x31\x35\x2e\x34\x36\x37\x7a\x20\x4d\x34\x2e\x30\x30\x34\x2c\x38\
-\x2e\x32\x38\x37\x0d\x0a\x09\x63\x30\x2d\x32\x2e\x33\x36\x36\x2c\
-\x31\x2e\x39\x31\x37\x2d\x34\x2e\x32\x38\x33\x2c\x34\x2e\x32\x38\
-\x32\x2d\x34\x2e\x32\x38\x33\x63\x32\x2e\x33\x36\x36\x2c\x30\x2c\
-\x34\x2e\x34\x37\x34\x2c\x32\x2e\x31\x30\x37\x2c\x34\x2e\x34\x37\
-\x34\x2c\x34\x2e\x34\x37\x34\x63\x30\x2c\x32\x2e\x33\x36\x35\x2d\
-\x31\x2e\x39\x31\x38\x2c\x34\x2e\x32\x38\x33\x2d\x34\x2e\x32\x38\
-\x33\x2c\x34\x2e\x32\x38\x33\x0d\x0a\x09\x43\x36\x2e\x31\x31\x31\
-\x2c\x31\x32\x2e\x37\x36\x2c\x34\x2e\x30\x30\x34\x2c\x31\x30\x2e\
-\x36\x35\x32\x2c\x34\x2e\x30\x30\x34\x2c\x38\x2e\x32\x38\x37\x7a\
-\x22\x2f\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\
-\x3e\x0d\x0a\
-\x00\x00\x04\xaa\
+\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\
+\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\
+\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\
+\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\
+\x39\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\
+\x20\x79\x3d\x22\x30\x70\x78\x22\x0d\x0a\x09\x20\x77\x69\x64\x74\
+\x68\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\
+\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\
+\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\
+\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\
+\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\
+\x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\
+\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x67\x20\x69\x64\x3d\
+\x22\x49\x63\x6f\x6e\x5f\x31\x5f\x22\x3e\x0d\x0a\x09\x3c\x67\x3e\
+\x0d\x0a\x09\x09\x3c\x67\x3e\x0d\x0a\x09\x09\x09\x3c\x70\x6f\x6c\
+\x79\x67\x6f\x6e\x20\x70\x6f\x69\x6e\x74\x73\x3d\x22\x31\x38\x36\
+\x2e\x33\x30\x31\x2c\x33\x33\x39\x2e\x38\x39\x33\x20\x39\x36\x2c\
+\x32\x34\x39\x2e\x34\x36\x31\x20\x36\x34\x2c\x32\x37\x39\x2e\x39\
+\x36\x38\x20\x31\x38\x36\x2e\x33\x30\x31\x2c\x34\x30\x32\x20\x34\
+\x34\x38\x2c\x31\x34\x30\x2e\x35\x30\x36\x20\x34\x31\x36\x2c\x31\
+\x31\x30\x20\x09\x09\x09\x22\x2f\x3e\x0d\x0a\x09\x09\x3c\x2f\x67\
+\x3e\x0d\x0a\x09\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\
+\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
+\x00\x00\x03\x7c\
 \x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
-\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
-\x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
-\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
-\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x38\x2e\x31\x2e\x30\x2c\
-\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
-\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
-\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
-\x20\x20\x2d\x2d\x3e\x0d\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\
-\x20\x73\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\
-\x57\x33\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\
-\x2f\x2f\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
-\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\
-\x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\
-\x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0d\x0a\x3c\x73\x76\x67\x20\
-\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
-\x3d\x22\x43\x6f\x64\x65\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
-\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
-\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
-\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
-\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
-\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x32\x34\x70\x78\x22\x20\x79\
-\x3d\x22\x32\x34\x70\x78\x22\x0d\x0a\x09\x20\x76\x69\x65\x77\x42\
-\x6f\x78\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\
-\x20\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\
-\x6e\x64\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\
-\x35\x31\x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\
-\x70\x72\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x67\x20\x74\
-\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\
-\x28\x32\x34\x20\x30\x20\x30\x20\x32\x34\x20\x30\x20\x30\x29\x27\
-\x3e\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x35\x2e\x37\x31\x39\
-\x2c\x31\x34\x2e\x37\x35\x63\x2d\x30\x2e\x32\x33\x36\x2c\x30\x2d\
-\x30\x2e\x34\x37\x34\x2d\x30\x2e\x30\x38\x33\x2d\x30\x2e\x36\x36\
-\x34\x2d\x30\x2e\x32\x35\x32\x4c\x2d\x30\x2e\x30\x30\x35\x2c\x31\
-\x30\x6c\x35\x2e\x33\x34\x31\x2d\x34\x2e\x37\x34\x38\x43\x35\x2e\
-\x37\x34\x38\x2c\x34\x2e\x38\x38\x37\x2c\x36\x2e\x33\x38\x2c\x34\
-\x2e\x39\x32\x32\x2c\x36\x2e\x37\x34\x37\x2c\x35\x2e\x33\x33\x35\
-\x0d\x0a\x09\x63\x30\x2e\x33\x36\x37\x2c\x30\x2e\x34\x31\x33\x2c\
-\x30\x2e\x33\x33\x2c\x31\x2e\x30\x34\x35\x2d\x30\x2e\x30\x38\x33\
-\x2c\x31\x2e\x34\x31\x32\x4c\x33\x2e\x30\x30\x35\x2c\x31\x30\x6c\
-\x33\x2e\x33\x37\x38\x2c\x33\x2e\x30\x30\x32\x63\x30\x2e\x34\x31\
-\x33\x2c\x30\x2e\x33\x36\x37\x2c\x30\x2e\x34\x35\x2c\x30\x2e\x39\
-\x39\x39\x2c\x30\x2e\x30\x38\x33\x2c\x31\x2e\x34\x31\x32\x0d\x0a\
-\x09\x43\x36\x2e\x32\x36\x39\x2c\x31\x34\x2e\x36\x33\x37\x2c\x35\
-\x2e\x39\x39\x34\x2c\x31\x34\x2e\x37\x35\x2c\x35\x2e\x37\x31\x39\
-\x2c\x31\x34\x2e\x37\x35\x7a\x20\x4d\x31\x34\x2e\x36\x36\x34\x2c\
-\x31\x34\x2e\x37\x34\x38\x4c\x32\x30\x2e\x30\x30\x35\x2c\x31\x30\
-\x6c\x2d\x35\x2e\x30\x36\x2d\x34\x2e\x34\x39\x38\x63\x2d\x30\x2e\
-\x34\x31\x33\x2d\x30\x2e\x33\x36\x37\x2d\x31\x2e\x30\x34\x35\x2d\
-\x30\x2e\x33\x33\x2d\x31\x2e\x34\x31\x31\x2c\x30\x2e\x30\x38\x33\
-\x0d\x0a\x09\x63\x2d\x30\x2e\x33\x36\x37\x2c\x30\x2e\x34\x31\x33\
-\x2d\x30\x2e\x33\x33\x2c\x31\x2e\x30\x34\x35\x2c\x30\x2e\x30\x38\
-\x33\x2c\x31\x2e\x34\x31\x32\x4c\x31\x36\x2e\x39\x39\x35\x2c\x31\
-\x30\x6c\x2d\x33\x2e\x36\x35\x39\x2c\x33\x2e\x32\x35\x32\x63\x2d\
-\x30\x2e\x34\x31\x33\x2c\x30\x2e\x33\x36\x37\x2d\x30\x2e\x34\x35\
-\x2c\x30\x2e\x39\x39\x39\x2d\x30\x2e\x30\x38\x33\x2c\x31\x2e\x34\
-\x31\x32\x43\x31\x33\x2e\x34\x35\x2c\x31\x34\x2e\x38\x38\x37\x2c\
-\x31\x33\x2e\x37\x32\x35\x2c\x31\x35\x2c\x31\x34\x2c\x31\x35\x0d\
-\x0a\x09\x43\x31\x34\x2e\x32\x33\x36\x2c\x31\x35\x2c\x31\x34\x2e\
-\x34\x37\x34\x2c\x31\x34\x2e\x39\x31\x37\x2c\x31\x34\x2e\x36\x36\
-\x34\x2c\x31\x34\x2e\x37\x34\x38\x7a\x20\x4d\x39\x2e\x39\x38\x36\
-\x2c\x31\x36\x2e\x31\x36\x35\x6c\x32\x2d\x31\x32\x63\x30\x2e\x30\
-\x39\x31\x2d\x30\x2e\x35\x34\x35\x2d\x30\x2e\x32\x37\x37\x2d\x31\
-\x2e\x30\x36\x2d\x30\x2e\x38\x32\x32\x2d\x31\x2e\x31\x35\x31\x0d\
-\x0a\x09\x63\x2d\x30\x2e\x35\x34\x37\x2d\x30\x2e\x30\x39\x32\x2d\
-\x31\x2e\x30\x36\x31\x2c\x30\x2e\x32\x37\x37\x2d\x31\x2e\x31\x35\
-\x2c\x30\x2e\x38\x32\x32\x6c\x2d\x32\x2c\x31\x32\x63\x2d\x30\x2e\
-\x30\x39\x31\x2c\x30\x2e\x35\x34\x35\x2c\x30\x2e\x32\x37\x37\x2c\
-\x31\x2e\x30\x36\x2c\x30\x2e\x38\x32\x32\x2c\x31\x2e\x31\x35\x31\
-\x43\x38\x2e\x38\x39\x32\x2c\x31\x36\x2e\x39\x39\x36\x2c\x38\x2e\
-\x39\x34\x36\x2c\x31\x37\x2c\x39\x2e\x30\x30\x31\x2c\x31\x37\x0d\
-\x0a\x09\x43\x39\x2e\x34\x38\x31\x2c\x31\x37\x2c\x39\x2e\x39\x30\
-\x35\x2c\x31\x36\x2e\x36\x35\x33\x2c\x39\x2e\x39\x38\x36\x2c\x31\
-\x36\x2e\x31\x36\x35\x7a\x22\x2f\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\
-\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\
+\x30\x27\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x27\x55\x54\x46\
+\x2d\x38\x27\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x54\x68\x69\x73\x20\
+\x66\x69\x6c\x65\x20\x77\x61\x73\x20\x67\x65\x6e\x65\x72\x61\x74\
+\x65\x64\x20\x62\x79\x20\x64\x76\x69\x73\x76\x67\x6d\x20\x32\x2e\
+\x38\x20\x2d\x2d\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\x73\x69\
+\x6f\x6e\x3d\x27\x31\x2e\x31\x27\x20\x78\x6d\x6c\x6e\x73\x3d\x27\
+\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\
+\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x27\x20\x78\x6d\x6c\x6e\
+\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x27\x68\x74\x74\x70\x3a\x2f\x2f\
+\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\
+\x78\x6c\x69\x6e\x6b\x27\x20\x77\x69\x64\x74\x68\x3d\x27\x36\x33\
+\x2e\x39\x39\x39\x36\x70\x74\x27\x20\x68\x65\x69\x67\x68\x74\x3d\
+\x27\x36\x33\x2e\x39\x39\x39\x37\x70\x74\x27\x20\x76\x69\x65\x77\
+\x42\x6f\x78\x3d\x27\x35\x36\x2e\x34\x30\x39\x34\x20\x35\x33\x2e\
+\x38\x35\x38\x33\x20\x36\x33\x2e\x39\x39\x39\x36\x20\x36\x33\x2e\
+\x39\x39\x39\x37\x27\x3e\x0a\x3c\x67\x20\x69\x64\x3d\x27\x70\x61\
+\x67\x65\x31\x27\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\
+\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\x39\x39\x36\
+\x32\x36\x34\x20\x30\x20\x30\x20\x30\x2e\x39\x39\x36\x32\x36\x34\
+\x20\x35\x36\x2e\x34\x30\x39\x34\x20\x31\x31\x37\x2e\x38\x35\x38\
+\x29\x27\x3e\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x27\x4d\x20\x32\
+\x2e\x30\x30\x37\x35\x20\x2d\x32\x2e\x30\x30\x37\x35\x4c\x20\x36\
+\x32\x2e\x32\x33\x32\x35\x20\x2d\x32\x2e\x30\x30\x37\x35\x4c\x20\
+\x36\x32\x2e\x32\x33\x32\x35\x20\x2d\x36\x32\x2e\x32\x33\x32\x35\
+\x4c\x20\x32\x2e\x30\x30\x37\x35\x20\x2d\x36\x32\x2e\x32\x33\x32\
+\x35\x4c\x20\x32\x2e\x30\x30\x37\x35\x20\x2d\x32\x2e\x30\x30\x37\
+\x35\x5a\x27\x20\x66\x69\x6c\x6c\x3d\x27\x6e\x6f\x6e\x65\x27\x20\
+\x73\x74\x72\x6f\x6b\x65\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\
+\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3d\
+\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\
+\x69\x6e\x65\x6a\x6f\x69\x6e\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\
+\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\
+\x74\x3d\x27\x31\x30\x2e\x30\x33\x37\x35\x27\x20\x73\x74\x72\x6f\
+\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x27\x34\x2e\x30\x31\x35\x27\
+\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\
+\x66\x6f\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\x39\
+\x39\x36\x32\x36\x34\x20\x30\x20\x30\x20\x30\x2e\x39\x39\x36\x32\
+\x36\x34\x20\x35\x36\x2e\x34\x30\x39\x34\x20\x31\x31\x37\x2e\x38\
+\x35\x38\x29\x27\x3e\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x27\x4d\
+\x20\x34\x37\x2e\x31\x37\x36\x32\x20\x2d\x33\x32\x2e\x31\x32\x43\
+\x20\x34\x37\x2e\x31\x37\x36\x32\x20\x2d\x34\x30\x2e\x34\x33\x35\
+\x33\x20\x34\x30\x2e\x34\x33\x35\x33\x20\x2d\x34\x37\x2e\x31\x37\
+\x36\x32\x20\x33\x32\x2e\x31\x32\x20\x2d\x34\x37\x2e\x31\x37\x36\
+\x32\x43\x20\x32\x33\x2e\x38\x30\x34\x37\x20\x2d\x34\x37\x2e\x31\
+\x37\x36\x32\x20\x31\x37\x2e\x30\x36\x33\x37\x20\x2d\x34\x30\x2e\
+\x34\x33\x35\x33\x20\x31\x37\x2e\x30\x36\x33\x37\x20\x2d\x33\x32\
+\x2e\x31\x32\x43\x20\x31\x37\x2e\x30\x36\x33\x37\x20\x2d\x32\x33\
+\x2e\x38\x30\x34\x37\x20\x32\x33\x2e\x38\x30\x34\x37\x20\x2d\x31\
+\x37\x2e\x30\x36\x33\x37\x20\x33\x32\x2e\x31\x32\x20\x2d\x31\x37\
+\x2e\x30\x36\x33\x37\x43\x20\x34\x30\x2e\x34\x33\x35\x33\x20\x2d\
+\x31\x37\x2e\x30\x36\x33\x37\x20\x34\x37\x2e\x31\x37\x36\x32\x20\
+\x2d\x32\x33\x2e\x38\x30\x34\x37\x20\x34\x37\x2e\x31\x37\x36\x32\
+\x20\x2d\x33\x32\x2e\x31\x32\x5a\x27\x20\x66\x69\x6c\x6c\x3d\x27\
+\x23\x30\x30\x30\x30\x30\x30\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\
+\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\
 \x00\x00\x03\x26\
 \x3c\
 \x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
@@ -794,86 +1308,6 @@
 \x48\x39\x36\x76\x33\x32\x68\x33\x32\x30\x56\x39\x36\x7a\x22\x2f\
 \x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\
 \x0a\
-\x00\x00\x04\xd5\
-\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\
-\x30\x27\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x27\x55\x54\x46\
-\x2d\x38\x27\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x54\x68\x69\x73\x20\
-\x66\x69\x6c\x65\x20\x77\x61\x73\x20\x67\x65\x6e\x65\x72\x61\x74\
-\x65\x64\x20\x62\x79\x20\x64\x76\x69\x73\x76\x67\x6d\x20\x32\x2e\
-\x38\x20\x2d\x2d\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\x73\x69\
-\x6f\x6e\x3d\x27\x31\x2e\x31\x27\x20\x78\x6d\x6c\x6e\x73\x3d\x27\
-\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\
-\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x27\x20\x78\x6d\x6c\x6e\
-\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x27\x68\x74\x74\x70\x3a\x2f\x2f\
-\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\
-\x78\x6c\x69\x6e\x6b\x27\x20\x77\x69\x64\x74\x68\x3d\x27\x36\x33\
-\x2e\x39\x39\x39\x36\x70\x74\x27\x20\x68\x65\x69\x67\x68\x74\x3d\
-\x27\x36\x33\x2e\x39\x39\x39\x37\x70\x74\x27\x20\x76\x69\x65\x77\
-\x42\x6f\x78\x3d\x27\x35\x36\x2e\x34\x30\x39\x34\x20\x35\x33\x2e\
-\x38\x35\x38\x33\x20\x36\x33\x2e\x39\x39\x39\x36\x20\x36\x33\x2e\
-\x39\x39\x39\x37\x27\x3e\x0a\x3c\x67\x20\x69\x64\x3d\x27\x70\x61\
-\x67\x65\x31\x27\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\
-\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\x39\x39\x36\
-\x32\x36\x34\x20\x30\x20\x30\x20\x30\x2e\x39\x39\x36\x32\x36\x34\
-\x20\x35\x38\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\x35\x38\
-\x29\x27\x3e\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x27\x4d\x20\x33\
-\x2e\x39\x35\x37\x33\x35\x20\x2d\x33\x32\x2e\x31\x32\x43\x20\x32\
-\x2e\x32\x38\x39\x32\x32\x20\x2d\x33\x39\x2e\x33\x31\x31\x33\x20\
-\x36\x2e\x33\x36\x37\x30\x32\x20\x2d\x34\x36\x2e\x32\x33\x38\x36\
-\x20\x31\x31\x2e\x39\x30\x33\x36\x20\x2d\x35\x31\x2e\x33\x30\x33\
-\x39\x43\x20\x32\x39\x2e\x36\x36\x38\x37\x20\x2d\x36\x37\x2e\x35\
-\x35\x36\x38\x20\x35\x35\x2e\x32\x32\x39\x32\x20\x2d\x36\x30\x2e\
-\x36\x34\x32\x20\x35\x36\x2e\x31\x35\x32\x33\x20\x2d\x34\x32\x2e\
-\x35\x30\x32\x32\x43\x20\x35\x36\x2e\x36\x31\x33\x36\x20\x2d\x33\
-\x33\x2e\x34\x33\x38\x31\x20\x34\x39\x2e\x31\x31\x33\x32\x20\x2d\
-\x32\x36\x2e\x35\x39\x35\x39\x20\x34\x30\x2e\x36\x37\x39\x34\x20\
-\x2d\x32\x32\x2e\x35\x32\x38\x31\x43\x20\x32\x35\x2e\x33\x39\x39\
-\x35\x20\x2d\x31\x35\x2e\x31\x35\x38\x32\x20\x37\x2e\x31\x39\x39\
-\x33\x35\x20\x2d\x31\x38\x2e\x31\x34\x33\x36\x20\x33\x2e\x39\x35\
-\x37\x33\x35\x20\x2d\x33\x32\x2e\x31\x32\x5a\x27\x20\x66\x69\x6c\
-\x6c\x3d\x27\x6e\x6f\x6e\x65\x27\x20\x73\x74\x72\x6f\x6b\x65\x3d\
-\x27\x23\x30\x30\x30\x30\x30\x30\x27\x20\x73\x74\x72\x6f\x6b\x65\
-\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3d\x27\x72\x6f\x75\x6e\x64\x27\
-\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\
-\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\
-\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3d\x27\x31\x30\x2e\x30\
-\x33\x37\x35\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\
-\x68\x3d\x27\x32\x2e\x35\x30\x39\x33\x37\x27\x2f\x3e\x0a\x3c\x2f\
-\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\
-\x27\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\x39\x39\x36\x32\x36\x34\
-\x20\x30\x20\x30\x20\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x35\x38\
-\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\x35\x38\x29\x27\x3e\
-\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\x33\x2e\x39\
-\x35\x37\x33\x35\x27\x20\x63\x79\x3d\x27\x2d\x33\x32\x2e\x31\x32\
-\x27\x20\x66\x69\x6c\x6c\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\
-\x20\x72\x3d\x27\x36\x2e\x30\x32\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\
-\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\
-\x27\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\x39\x39\x36\x32\x36\x34\
-\x20\x30\x20\x30\x20\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x35\x38\
-\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\x35\x38\x29\x27\x3e\
-\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\x31\x31\x2e\
-\x39\x30\x33\x36\x27\x20\x63\x79\x3d\x27\x2d\x35\x31\x2e\x33\x30\
-\x33\x39\x27\x20\x66\x69\x6c\x6c\x3d\x27\x23\x30\x30\x30\x30\x30\
-\x30\x27\x20\x72\x3d\x27\x36\x2e\x30\x32\x32\x35\x27\x2f\x3e\x0a\
-\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\
-\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\x39\x39\x36\x32\
-\x36\x34\x20\x30\x20\x30\x20\x30\x2e\x39\x39\x36\x32\x36\x34\x20\
-\x35\x38\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\x35\x38\x29\
-\x27\x3e\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\x35\
-\x36\x2e\x31\x35\x32\x33\x27\x20\x63\x79\x3d\x27\x2d\x34\x32\x2e\
-\x35\x30\x32\x32\x27\x20\x66\x69\x6c\x6c\x3d\x27\x23\x30\x30\x30\
-\x30\x30\x30\x27\x20\x72\x3d\x27\x36\x2e\x30\x32\x32\x35\x27\x2f\
-\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\
-\x6f\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\x39\x39\
-\x36\x32\x36\x34\x20\x30\x20\x30\x20\x30\x2e\x39\x39\x36\x32\x36\
-\x34\x20\x35\x38\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\x35\
-\x38\x29\x27\x3e\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\
-\x27\x34\x30\x2e\x36\x37\x39\x34\x27\x20\x63\x79\x3d\x27\x2d\x32\
-\x32\x2e\x35\x32\x38\x31\x27\x20\x66\x69\x6c\x6c\x3d\x27\x23\x30\
-\x30\x30\x30\x30\x30\x27\x20\x72\x3d\x27\x36\x2e\x30\x32\x32\x35\
-\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\
-\x73\x76\x67\x3e\
 \x00\x00\x03\x36\
 \x3c\
 \x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
@@ -928,13 +1362,13 @@
 \x2c\x34\x34\x38\x20\x31\x39\x32\x2c\x33\x39\x36\x2e\x37\x39\x35\
 \x20\x09\x22\x2f\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x73\
 \x76\x67\x3e\x0d\x0a\
-\x00\x00\x02\x7d\
+\x00\x00\x03\x0c\
 \x3c\
 \x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
 \x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
 \x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
 \x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
-\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\
+\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x38\x2e\x31\x2e\x30\x2c\
 \x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
 \x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
 \x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
@@ -946,37 +1380,46 @@
 \x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\
 \x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0d\x0a\x3c\x73\x76\x67\x20\
 \x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
-\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\
-\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\
-\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\
-\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\
-\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\
-\x39\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\
-\x20\x79\x3d\x22\x30\x70\x78\x22\x0d\x0a\x09\x20\x77\x69\x64\x74\
-\x68\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\
-\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\
-\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\
-\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\
-\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\
-\x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\
-\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x67\x20\x69\x64\x3d\
-\x22\x49\x63\x6f\x6e\x5f\x38\x5f\x22\x3e\x0d\x0a\x09\x3c\x67\x3e\
-\x0d\x0a\x09\x09\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x34\x32\
-\x37\x2c\x32\x33\x34\x2e\x36\x32\x35\x48\x31\x36\x37\x2e\x32\x39\
-\x36\x6c\x31\x31\x39\x2e\x37\x30\x32\x2d\x31\x31\x39\x2e\x37\x30\
-\x32\x4c\x32\x35\x36\x2c\x38\x35\x4c\x38\x35\x2c\x32\x35\x36\x6c\
-\x31\x37\x31\x2c\x31\x37\x31\x6c\x32\x39\x2e\x39\x32\x32\x2d\x32\
-\x39\x2e\x39\x32\x34\x4c\x31\x36\x37\x2e\x32\x39\x36\x2c\x32\x37\
-\x37\x2e\x33\x37\x35\x48\x34\x32\x37\x56\x32\x33\x34\x2e\x36\x32\
-\x35\x7a\x22\x2f\x3e\x0d\x0a\x09\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\
-\x67\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
-\x00\x00\x05\x27\
+\x3d\x22\x43\x68\x65\x63\x6b\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\
+\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\
+\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\
+\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\
+\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\
+\x78\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\
+\x3d\x22\x30\x70\x78\x22\x0d\x0a\x09\x20\x76\x69\x65\x77\x42\x6f\
+\x78\x3d\x22\x30\x20\x30\x20\x32\x30\x20\x32\x30\x22\x20\x65\x6e\
+\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\
+\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x32\x30\x20\x32\x30\x22\x20\
+\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\
+\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\
+\x4d\x38\x2e\x32\x39\x34\x2c\x31\x36\x2e\x39\x39\x38\x63\x2d\x30\
+\x2e\x34\x33\x35\x2c\x30\x2d\x30\x2e\x38\x34\x37\x2d\x30\x2e\x32\
+\x30\x33\x2d\x31\x2e\x31\x31\x31\x2d\x30\x2e\x35\x35\x33\x4c\x33\
+\x2e\x36\x31\x2c\x31\x31\x2e\x37\x32\x34\x63\x2d\x30\x2e\x34\x36\
+\x35\x2d\x30\x2e\x36\x31\x33\x2d\x30\x2e\x33\x34\x34\x2d\x31\x2e\
+\x34\x38\x36\x2c\x30\x2e\x32\x37\x2d\x31\x2e\x39\x35\x31\x0d\x0a\
+\x09\x63\x30\x2e\x36\x31\x35\x2d\x30\x2e\x34\x36\x37\x2c\x31\x2e\
+\x34\x38\x38\x2d\x30\x2e\x33\x34\x34\x2c\x31\x2e\x39\x35\x33\x2c\
+\x30\x2e\x32\x37\x6c\x32\x2e\x33\x35\x31\x2c\x33\x2e\x31\x30\x34\
+\x6c\x35\x2e\x39\x31\x31\x2d\x39\x2e\x34\x39\x32\x63\x30\x2e\x34\
+\x30\x37\x2d\x30\x2e\x36\x35\x32\x2c\x31\x2e\x32\x36\x37\x2d\x30\
+\x2e\x38\x35\x32\x2c\x31\x2e\x39\x32\x31\x2d\x30\x2e\x34\x34\x35\
+\x0d\x0a\x09\x63\x30\x2e\x36\x35\x33\x2c\x30\x2e\x34\x30\x36\x2c\
+\x30\x2e\x38\x35\x34\x2c\x31\x2e\x32\x36\x36\x2c\x30\x2e\x34\x34\
+\x36\x2c\x31\x2e\x39\x32\x4c\x39\x2e\x34\x37\x38\x2c\x31\x36\x2e\
+\x33\x34\x63\x2d\x30\x2e\x32\x34\x32\x2c\x30\x2e\x33\x39\x31\x2d\
+\x30\x2e\x36\x36\x31\x2c\x30\x2e\x36\x33\x35\x2d\x31\x2e\x31\x32\
+\x2c\x30\x2e\x36\x35\x36\x43\x38\x2e\x33\x33\x36\x2c\x31\x36\x2e\
+\x39\x39\x38\x2c\x38\x2e\x33\x31\x36\x2c\x31\x36\x2e\x39\x39\x38\
+\x2c\x38\x2e\x32\x39\x34\x2c\x31\x36\x2e\x39\x39\x38\x7a\x22\x2f\
+\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
+\x00\x00\x03\xf5\
 \x3c\
 \x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
 \x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
 \x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
 \x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
-\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\
+\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x38\x2e\x31\x2e\x31\x2c\
 \x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
 \x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
 \x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
@@ -988,74 +1431,55 @@
 \x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\
 \x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0d\x0a\x3c\x73\x76\x67\x20\
 \x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
-\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\
-\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\
-\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\
-\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\
-\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\
-\x39\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\
-\x20\x79\x3d\x22\x30\x70\x78\x22\x0d\x0a\x09\x20\x77\x69\x64\x74\
-\x68\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\
-\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\
+\x3d\x22\x43\x68\x65\x76\x72\x6f\x6e\x5f\x63\x69\x72\x63\x6c\x65\
+\x64\x5f\x6c\x65\x66\x74\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x0d\x0a\x09\x20\x78\x3d\x22\x30\x70\x78\x22\
+\x20\x79\x3d\x22\x30\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\
 \x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\
 \x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\
 \x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\
 \x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\
-\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x67\x20\x69\x64\x3d\
-\x22\x49\x63\x6f\x6e\x5f\x31\x32\x5f\x22\x3e\x0d\x0a\x09\x3c\x67\
-\x3e\x0d\x0a\x09\x09\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x32\
-\x35\x36\x2c\x36\x34\x43\x31\x35\x30\x2e\x34\x30\x31\x2c\x36\x34\
-\x2c\x36\x34\x2c\x31\x35\x30\x2e\x34\x30\x31\x2c\x36\x34\x2c\x32\
-\x35\x36\x63\x30\x2c\x31\x30\x35\x2e\x36\x30\x34\x2c\x38\x36\x2e\
-\x34\x30\x31\x2c\x31\x39\x32\x2c\x31\x39\x32\x2c\x31\x39\x32\x63\
-\x31\x38\x2e\x31\x33\x36\x2c\x30\x2c\x33\x32\x2d\x31\x33\x2e\x38\
-\x36\x34\x2c\x33\x32\x2d\x33\x32\x0d\x0a\x09\x09\x09\x63\x30\x2d\
-\x38\x2e\x35\x33\x31\x2d\x33\x2e\x31\x39\x38\x2d\x31\x36\x2d\x38\
-\x2e\x35\x33\x31\x2d\x32\x31\x2e\x33\x33\x33\x63\x2d\x35\x2e\x33\
-\x33\x33\x2d\x35\x2e\x33\x33\x34\x2d\x38\x2e\x35\x33\x31\x2d\x31\
-\x32\x2e\x38\x30\x33\x2d\x38\x2e\x35\x33\x31\x2d\x32\x31\x2e\x33\
-\x33\x34\x63\x30\x2d\x31\x38\x2e\x31\x33\x35\x2c\x31\x33\x2e\x38\
-\x36\x34\x2d\x33\x32\x2c\x33\x32\x2d\x33\x32\x68\x33\x38\x2e\x33\
-\x39\x36\x0d\x0a\x09\x09\x09\x63\x35\x38\x2e\x36\x36\x37\x2c\x30\
-\x2c\x31\x30\x36\x2e\x36\x36\x37\x2d\x34\x38\x2c\x31\x30\x36\x2e\
-\x36\x36\x37\x2d\x31\x30\x36\x2e\x36\x36\x36\x43\x34\x34\x38\x2c\
-\x31\x34\x30\x2e\x38\x30\x32\x2c\x33\x36\x31\x2e\x36\x30\x34\x2c\
-\x36\x34\x2c\x32\x35\x36\x2c\x36\x34\x7a\x20\x4d\x31\x33\x38\x2e\
-\x36\x36\x37\x2c\x32\x35\x36\x63\x2d\x31\x38\x2e\x31\x33\x36\x2c\
-\x30\x2d\x33\x32\x2d\x31\x33\x2e\x38\x36\x34\x2d\x33\x32\x2d\x33\
-\x32\x73\x31\x33\x2e\x38\x36\x34\x2d\x33\x32\x2c\x33\x32\x2d\x33\
-\x32\x0d\x0a\x09\x09\x09\x63\x31\x38\x2e\x31\x33\x35\x2c\x30\x2c\
-\x33\x32\x2c\x31\x33\x2e\x38\x36\x34\x2c\x33\x32\x2c\x33\x32\x53\
-\x31\x35\x36\x2e\x38\x30\x32\x2c\x32\x35\x36\x2c\x31\x33\x38\x2e\
-\x36\x36\x37\x2c\x32\x35\x36\x7a\x20\x4d\x32\x30\x32\x2e\x36\x36\
-\x37\x2c\x31\x37\x30\x2e\x36\x36\x37\x63\x2d\x31\x38\x2e\x31\x33\
-\x36\x2c\x30\x2d\x33\x32\x2d\x31\x33\x2e\x38\x36\x35\x2d\x33\x32\
-\x2d\x33\x32\x63\x30\x2d\x31\x38\x2e\x31\x33\x36\x2c\x31\x33\x2e\
-\x38\x36\x34\x2d\x33\x32\x2c\x33\x32\x2d\x33\x32\x0d\x0a\x09\x09\
-\x09\x63\x31\x38\x2e\x31\x33\x35\x2c\x30\x2c\x33\x32\x2c\x31\x33\
-\x2e\x38\x36\x34\x2c\x33\x32\x2c\x33\x32\x43\x32\x33\x34\x2e\x36\
-\x36\x37\x2c\x31\x35\x36\x2e\x38\x30\x32\x2c\x32\x32\x30\x2e\x38\
-\x30\x32\x2c\x31\x37\x30\x2e\x36\x36\x37\x2c\x32\x30\x32\x2e\x36\
-\x36\x37\x2c\x31\x37\x30\x2e\x36\x36\x37\x7a\x20\x4d\x33\x30\x39\
-\x2e\x33\x33\x33\x2c\x31\x37\x30\x2e\x36\x36\x37\x63\x2d\x31\x38\
-\x2e\x31\x33\x35\x2c\x30\x2d\x33\x32\x2d\x31\x33\x2e\x38\x36\x35\
-\x2d\x33\x32\x2d\x33\x32\x0d\x0a\x09\x09\x09\x63\x30\x2d\x31\x38\
-\x2e\x31\x33\x36\x2c\x31\x33\x2e\x38\x36\x35\x2d\x33\x32\x2c\x33\
-\x32\x2d\x33\x32\x63\x31\x38\x2e\x31\x33\x36\x2c\x30\x2c\x33\x32\
-\x2c\x31\x33\x2e\x38\x36\x34\x2c\x33\x32\x2c\x33\x32\x43\x33\x34\
-\x31\x2e\x33\x33\x33\x2c\x31\x35\x36\x2e\x38\x30\x32\x2c\x33\x32\
-\x37\x2e\x34\x36\x39\x2c\x31\x37\x30\x2e\x36\x36\x37\x2c\x33\x30\
-\x39\x2e\x33\x33\x33\x2c\x31\x37\x30\x2e\x36\x36\x37\x7a\x20\x4d\
-\x33\x37\x33\x2e\x33\x33\x33\x2c\x32\x35\x36\x0d\x0a\x09\x09\x09\
-\x63\x2d\x31\x38\x2e\x31\x33\x35\x2c\x30\x2d\x33\x32\x2d\x31\x33\
-\x2e\x38\x36\x34\x2d\x33\x32\x2d\x33\x32\x73\x31\x33\x2e\x38\x36\
-\x35\x2d\x33\x32\x2c\x33\x32\x2d\x33\x32\x63\x31\x38\x2e\x31\x33\
-\x36\x2c\x30\x2c\x33\x32\x2c\x31\x33\x2e\x38\x36\x34\x2c\x33\x32\
-\x2c\x33\x32\x53\x33\x39\x31\x2e\x34\x36\x39\x2c\x32\x35\x36\x2c\
-\x33\x37\x33\x2e\x33\x33\x33\x2c\x32\x35\x36\x7a\x22\x2f\x3e\x0d\
-\x0a\x09\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\
-\x73\x76\x67\x3e\x0d\x0a\
-\x00\x00\x02\x7d\
+\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x67\x20\x74\x72\x61\
+\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\x32\
+\x34\x20\x30\x20\x30\x20\x32\x34\x20\x30\x20\x30\x29\x27\x3e\x0d\
+\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x31\x31\x2e\x33\x30\
+\x32\x2c\x36\x2e\x37\x37\x36\x63\x2d\x30\x2e\x31\x39\x36\x2d\x30\
+\x2e\x31\x39\x37\x2d\x30\x2e\x35\x31\x35\x2d\x30\x2e\x31\x39\x37\
+\x2d\x30\x2e\x37\x31\x2c\x30\x4c\x37\x2e\x37\x38\x35\x2c\x39\x2e\
+\x36\x34\x31\x63\x2d\x30\x2e\x31\x39\x36\x2c\x30\x2e\x31\x39\x39\
+\x2d\x30\x2e\x31\x39\x36\x2c\x30\x2e\x35\x32\x2c\x30\x2c\x30\x2e\
+\x37\x31\x37\x6c\x32\x2e\x38\x30\x37\x2c\x32\x2e\x38\x36\x34\x0d\
+\x0a\x09\x63\x30\x2e\x31\x39\x35\x2c\x30\x2e\x31\x39\x39\x2c\x30\
+\x2e\x35\x31\x34\x2c\x30\x2e\x31\x39\x38\x2c\x30\x2e\x37\x31\x2c\
+\x30\x63\x30\x2e\x31\x39\x36\x2d\x30\x2e\x31\x39\x37\x2c\x30\x2e\
+\x31\x39\x36\x2d\x30\x2e\x35\x31\x38\x2c\x30\x2d\x30\x2e\x37\x31\
+\x37\x4c\x39\x2c\x31\x30\x6c\x32\x2e\x33\x30\x32\x2d\x32\x2e\x35\
+\x30\x36\x43\x31\x31\x2e\x34\x39\x38\x2c\x37\x2e\x32\x39\x36\x2c\
+\x31\x31\x2e\x34\x39\x38\x2c\x36\x2e\x39\x37\x36\x2c\x31\x31\x2e\
+\x33\x30\x32\x2c\x36\x2e\x37\x37\x36\x7a\x0d\x0a\x09\x20\x4d\x31\
+\x30\x2c\x30\x2e\x34\x63\x2d\x35\x2e\x33\x30\x32\x2c\x30\x2d\x39\
+\x2e\x36\x2c\x34\x2e\x32\x39\x38\x2d\x39\x2e\x36\x2c\x39\x2e\x36\
+\x63\x30\x2c\x35\x2e\x33\x30\x33\x2c\x34\x2e\x32\x39\x38\x2c\x39\
+\x2e\x36\x2c\x39\x2e\x36\x2c\x39\x2e\x36\x73\x39\x2e\x36\x2d\x34\
+\x2e\x32\x39\x37\x2c\x39\x2e\x36\x2d\x39\x2e\x36\x43\x31\x39\x2e\
+\x36\x2c\x34\x2e\x36\x39\x38\x2c\x31\x35\x2e\x33\x30\x32\x2c\x30\
+\x2e\x34\x2c\x31\x30\x2c\x30\x2e\x34\x7a\x20\x4d\x31\x30\x2c\x31\
+\x38\x2e\x33\x35\x34\x0d\x0a\x09\x63\x2d\x34\x2e\x36\x31\x35\x2c\
+\x30\x2d\x38\x2e\x33\x35\x34\x2d\x33\x2e\x37\x34\x2d\x38\x2e\x33\
+\x35\x34\x2d\x38\x2e\x33\x35\x34\x63\x30\x2d\x34\x2e\x36\x31\x34\
+\x2c\x33\x2e\x37\x33\x39\x2d\x38\x2e\x33\x35\x34\x2c\x38\x2e\x33\
+\x35\x34\x2d\x38\x2e\x33\x35\x34\x63\x34\x2e\x36\x31\x33\x2c\x30\
+\x2c\x38\x2e\x33\x35\x34\x2c\x33\x2e\x37\x34\x2c\x38\x2e\x33\x35\
+\x34\x2c\x38\x2e\x33\x35\x34\x0d\x0a\x09\x43\x31\x38\x2e\x33\x35\
+\x34\x2c\x31\x34\x2e\x36\x31\x34\x2c\x31\x34\x2e\x36\x31\x33\x2c\
+\x31\x38\x2e\x33\x35\x34\x2c\x31\x30\x2c\x31\x38\x2e\x33\x35\x34\
+\x7a\x22\x2f\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x73\x76\
+\x67\x3e\x0d\x0a\
+\x00\x00\x02\xc9\
 \x3c\
 \x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
 \x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
@@ -1082,114 +1506,94 @@
 \x20\x79\x3d\x22\x30\x70\x78\x22\x0d\x0a\x09\x20\x77\x69\x64\x74\
 \x68\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\
 \x3d\x22\x35\x31\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\
-\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\
-\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\
-\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\
-\x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\
-\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x67\x20\x69\x64\x3d\
-\x22\x49\x63\x6f\x6e\x5f\x38\x5f\x22\x3e\x0d\x0a\x09\x3c\x67\x3e\
-\x0d\x0a\x09\x09\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x38\x35\
-\x2c\x32\x37\x37\x2e\x33\x37\x35\x68\x32\x35\x39\x2e\x37\x30\x34\
-\x4c\x32\x32\x35\x2e\x30\x30\x32\x2c\x33\x39\x37\x2e\x30\x37\x37\
-\x4c\x32\x35\x36\x2c\x34\x32\x37\x6c\x31\x37\x31\x2d\x31\x37\x31\
-\x4c\x32\x35\x36\x2c\x38\x35\x6c\x2d\x32\x39\x2e\x39\x32\x32\x2c\
-\x32\x39\x2e\x39\x32\x34\x6c\x31\x31\x38\x2e\x36\x32\x36\x2c\x31\
-\x31\x39\x2e\x37\x30\x31\x48\x38\x35\x56\x32\x37\x37\x2e\x33\x37\
-\x35\x7a\x22\x2f\x3e\x0d\x0a\x09\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\
-\x67\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
-\x00\x00\x03\x52\
+\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x73\
+\x74\x79\x6c\x65\x3d\x22\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\
+\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x6e\x65\x77\x20\x30\x20\x30\x20\
+\x35\x31\x32\x20\x35\x31\x32\x3b\x22\x20\x78\x6d\x6c\x3a\x73\x70\
+\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\
+\x0a\x3c\x70\x6f\x6c\x79\x67\x6f\x6e\x20\x70\x6f\x69\x6e\x74\x73\
+\x3d\x22\x34\x38\x30\x2c\x32\x35\x36\x20\x33\x38\x34\x2c\x31\x36\
+\x30\x20\x33\x38\x34\x2c\x32\x33\x36\x20\x32\x37\x36\x2c\x32\x33\
+\x36\x20\x32\x37\x36\x2c\x31\x32\x38\x20\x33\x35\x32\x2c\x31\x32\
+\x38\x20\x32\x35\x36\x2c\x33\x32\x20\x31\x36\x30\x2c\x31\x32\x38\
+\x20\x32\x33\x36\x2c\x31\x32\x38\x20\x32\x33\x36\x2c\x32\x33\x36\
+\x20\x31\x32\x38\x2c\x32\x33\x36\x20\x31\x32\x38\x2c\x31\x36\x30\
+\x20\x33\x32\x2c\x32\x35\x36\x20\x31\x32\x38\x2c\x33\x35\x32\x20\
+\x0d\x0a\x09\x31\x32\x38\x2c\x32\x37\x36\x20\x32\x33\x36\x2c\x32\
+\x37\x36\x20\x32\x33\x36\x2c\x33\x38\x34\x20\x31\x36\x30\x2c\x33\
+\x38\x34\x20\x32\x35\x36\x2c\x34\x38\x30\x20\x33\x35\x32\x2c\x33\
+\x38\x34\x20\x32\x37\x35\x2e\x38\x2c\x33\x38\x34\x20\x32\x37\x35\
+\x2e\x34\x2c\x32\x37\x35\x2e\x35\x20\x33\x38\x34\x2c\x32\x37\x35\
+\x2e\x38\x20\x33\x38\x34\x2c\x33\x35\x32\x20\x22\x2f\x3e\x0d\x0a\
+\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
+\x00\x00\x04\x1c\
 \x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
-\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
-\x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
-\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
-\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\
-\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
-\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
-\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
-\x20\x20\x2d\x2d\x3e\x0d\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\
-\x20\x73\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\
-\x57\x33\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\
-\x2f\x2f\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
-\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\
-\x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\
-\x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0d\x0a\x3c\x73\x76\x67\x20\
-\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
-\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\
-\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\
-\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\
-\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\
-\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\
-\x39\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\
-\x20\x79\x3d\x22\x30\x70\x78\x22\x0d\x0a\x09\x20\x77\x69\x64\x74\
-\x68\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\
-\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\
-\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\
-\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\
-\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\
-\x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\
-\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x70\x61\x74\x68\x20\
-\x64\x3d\x22\x4d\x34\x33\x37\x2e\x33\x33\x34\x2c\x31\x34\x34\x48\
-\x32\x35\x36\x2e\x30\x30\x36\x6c\x2d\x34\x32\x2e\x36\x36\x38\x2d\
-\x34\x38\x48\x37\x34\x2e\x36\x36\x36\x43\x35\x31\x2e\x31\x39\x37\
-\x2c\x39\x36\x2c\x33\x32\x2c\x31\x31\x35\x2e\x31\x39\x38\x2c\x33\
-\x32\x2c\x31\x33\x38\x2e\x36\x36\x37\x76\x32\x33\x34\x2e\x36\x36\
-\x36\x43\x33\x32\x2c\x33\x39\x36\x2e\x38\x30\x32\x2c\x35\x31\x2e\
-\x31\x39\x37\x2c\x34\x31\x36\x2c\x37\x34\x2e\x36\x36\x36\x2c\x34\
-\x31\x36\x68\x33\x36\x32\x2e\x36\x36\x38\x0d\x0a\x09\x43\x34\x36\
-\x30\x2e\x38\x30\x33\x2c\x34\x31\x36\x2c\x34\x38\x30\x2c\x33\x39\
-\x36\x2e\x38\x30\x32\x2c\x34\x38\x30\x2c\x33\x37\x33\x2e\x33\x33\
-\x33\x56\x31\x38\x36\x2e\x36\x36\x37\x43\x34\x38\x30\x2c\x31\x36\
-\x33\x2e\x31\x39\x38\x2c\x34\x36\x30\x2e\x38\x30\x33\x2c\x31\x34\
-\x34\x2c\x34\x33\x37\x2e\x33\x33\x34\x2c\x31\x34\x34\x7a\x20\x4d\
-\x34\x34\x38\x2c\x33\x37\x33\x2e\x33\x33\x33\x0d\x0a\x09\x63\x30\
-\x2c\x35\x2e\x37\x38\x32\x2d\x34\x2e\x38\x38\x35\x2c\x31\x30\x2e\
-\x36\x36\x37\x2d\x31\x30\x2e\x36\x36\x36\x2c\x31\x30\x2e\x36\x36\
-\x37\x48\x37\x34\x2e\x36\x36\x36\x43\x36\x38\x2e\x38\x38\x34\x2c\
-\x33\x38\x34\x2c\x36\x34\x2c\x33\x37\x39\x2e\x31\x31\x35\x2c\x36\
-\x34\x2c\x33\x37\x33\x2e\x33\x33\x33\x56\x31\x37\x36\x68\x33\x37\
-\x33\x2e\x33\x33\x34\x63\x35\x2e\x37\x38\x31\x2c\x30\x2c\x31\x30\
-\x2e\x36\x36\x36\x2c\x34\x2e\x38\x38\x35\x2c\x31\x30\x2e\x36\x36\
-\x36\x2c\x31\x30\x2e\x36\x36\x37\x0d\x0a\x09\x56\x33\x37\x33\x2e\
-\x33\x33\x33\x7a\x22\x2f\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\
-\x0a\
-\x00\x00\x02\x21\
-\x00\
-\x00\x07\xaf\x78\x9c\xdd\x55\x4d\x6f\x9c\x30\x10\xbd\xf7\x57\x4c\
-\xd5\x83\xdb\x03\xc6\xdf\x86\x28\x24\x52\x57\xea\x29\xbd\x25\x97\
-\xde\x68\xf0\x82\x9b\x5d\x58\x01\x5d\xb6\xff\xbe\x66\xd7\x60\x4a\
-\xaa\xf4\x92\x43\x15\x90\x30\xf3\x18\xbf\x99\xe7\xf1\x98\xeb\xdb\
-\xd3\x7e\x07\x47\xd3\x76\xb6\xa9\x33\x44\x31\x41\x60\xea\xc7\xa6\
-\xb0\x75\x99\xa1\x87\xfb\x2f\x51\x82\x6e\x6f\xde\x5d\xbf\x8f\x22\
-\xb8\xaf\x6c\x07\x5b\xbb\x33\x30\xe4\x1d\x94\xa6\x36\x6d\xde\x9b\
-\x02\xbe\xff\x82\xe2\x68\xbb\x63\xb9\x07\x86\x13\x88\x22\xe7\xef\
-\xac\x25\x2b\x45\xe0\xe2\xd4\x5d\x86\xaa\xbe\x3f\x5c\xc5\xf1\x30\
-\x0c\x78\xe0\xb8\x69\xcb\x98\x11\x42\x62\xe7\xef\x5d\xae\x4e\x3b\
-\x5b\x3f\xfd\xcd\x91\xa6\x69\x1a\x9f\xbf\x22\x18\x6c\xd1\x57\x19\
-\x52\x1c\x3b\x50\x1d\x7a\x04\x95\xb1\x65\xd5\x4f\x90\x1e\xa1\xa3\
-\x35\xc3\xe7\xe6\x94\x21\xa9\xb0\x20\xa9\x00\xc9\x71\x22\x13\x0e\
-\x7e\x9a\x1f\x35\x72\x09\x97\x60\x8b\x0c\x1d\xf2\xd2\xd0\x8b\xd9\
-\xb7\x79\xdd\x6d\x9b\x76\x9f\xa1\x7d\xde\xb7\xf6\xf4\x91\x38\x67\
-\xc5\x94\x00\x32\xde\x93\x31\x71\x53\xaa\x47\xf2\x4f\xe3\xec\x43\
-\xde\x57\xe0\xe8\xbe\x42\x8a\xb9\xd0\x82\x41\xc4\x38\x26\x94\xde\
-\x05\xc0\xbf\x3c\x47\x36\xcf\x90\x7f\x03\x8b\x39\x12\x53\x29\x29\
-\x05\x9a\x62\x29\x38\x85\x88\x62\x2d\x95\x54\xc0\x19\xa6\x6c\x36\
-\x37\x20\x04\x56\xa9\x4a\x83\x83\x14\x38\x49\x99\x0a\x14\x33\x30\
-\xe7\xfa\x02\x32\x09\x9c\x01\xae\xb0\xd2\x42\x6e\x02\x22\x08\x4e\
-\x94\x4a\x42\x64\xf7\xc2\x94\x14\x53\x6a\xde\xdc\x84\xdc\x27\x87\
-\x59\xdd\x44\x31\x03\x3e\xca\xdd\x7a\xa5\xbf\xa1\x71\xab\xee\x32\
-\xf4\x41\x6f\xc7\x1b\xc5\xae\x2e\x71\xf9\x8a\xa5\x0d\x42\x53\xac\
-\x29\x49\x97\x42\xdd\xbe\x22\x9c\x2d\x84\x6a\xcc\x09\xd5\xb3\xd0\
-\x8b\xb9\x14\xea\x1d\x82\x50\x4f\x11\x84\x4e\x51\x02\x22\xb1\xa4\
-\x89\x0c\x24\x17\x76\x1f\xe3\x3c\x2c\xaa\x7c\x81\x43\xd2\x7e\xf2\
-\x5a\xc5\xbc\x6e\x75\x53\x1b\x04\x5d\xdf\x36\x4f\xc6\xad\x22\x39\
-\x5f\x13\x10\xb9\x2e\x34\x8f\xf9\x21\x43\x6d\xf3\xb3\x2e\xfe\x80\
-\x7f\x34\xb6\x5e\xe3\x7b\xdb\x9b\x76\x67\xdd\xe0\x4e\x03\x82\x09\
-\xd7\x72\xfe\xe6\x5b\x99\xbb\x7c\x38\x65\xaf\x5f\xa7\xf5\x0a\xbe\
-\xe1\x1e\xf4\x0a\xdf\x5c\x09\x5f\x68\x35\xc9\x30\x4b\xf4\xe2\x4c\
-\x51\x0c\x8b\x84\xcf\x67\x8a\x37\x17\xad\x36\x39\x84\x6a\x79\x8a\
-\xf5\x46\xf9\x6f\x96\xf1\xf2\x70\xbf\xc8\x9b\xdf\xf9\x80\xe2\xe1\
-\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\
+\x30\x27\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x27\x55\x54\x46\
+\x2d\x38\x27\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x54\x68\x69\x73\x20\
+\x66\x69\x6c\x65\x20\x77\x61\x73\x20\x67\x65\x6e\x65\x72\x61\x74\
+\x65\x64\x20\x62\x79\x20\x64\x76\x69\x73\x76\x67\x6d\x20\x32\x2e\
+\x38\x20\x2d\x2d\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\x73\x69\
+\x6f\x6e\x3d\x27\x31\x2e\x31\x27\x20\x78\x6d\x6c\x6e\x73\x3d\x27\
+\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\
+\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x27\x20\x78\x6d\x6c\x6e\
+\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x27\x68\x74\x74\x70\x3a\x2f\x2f\
+\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\
+\x78\x6c\x69\x6e\x6b\x27\x20\x77\x69\x64\x74\x68\x3d\x27\x36\x33\
+\x2e\x39\x39\x39\x36\x70\x74\x27\x20\x68\x65\x69\x67\x68\x74\x3d\
+\x27\x36\x33\x2e\x39\x39\x39\x37\x70\x74\x27\x20\x76\x69\x65\x77\
+\x42\x6f\x78\x3d\x27\x35\x36\x2e\x34\x30\x39\x34\x20\x35\x33\x2e\
+\x38\x35\x38\x33\x20\x36\x33\x2e\x39\x39\x39\x36\x20\x36\x33\x2e\
+\x39\x39\x39\x37\x27\x3e\x0a\x3c\x67\x20\x69\x64\x3d\x27\x70\x61\
+\x67\x65\x31\x27\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\
+\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\x39\x39\x36\
+\x32\x36\x34\x20\x30\x20\x30\x20\x30\x2e\x39\x39\x36\x32\x36\x34\
+\x20\x35\x36\x2e\x34\x30\x39\x34\x20\x31\x31\x37\x2e\x38\x35\x38\
+\x29\x27\x3e\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x27\x4d\x20\x32\
+\x2e\x30\x30\x37\x35\x20\x2d\x32\x2e\x30\x30\x37\x35\x4c\x20\x36\
+\x32\x2e\x32\x33\x32\x35\x20\x2d\x32\x2e\x30\x30\x37\x35\x4c\x20\
+\x36\x32\x2e\x32\x33\x32\x35\x20\x2d\x36\x32\x2e\x32\x33\x32\x35\
+\x4c\x20\x32\x2e\x30\x30\x37\x35\x20\x2d\x36\x32\x2e\x32\x33\x32\
+\x35\x4c\x20\x32\x2e\x30\x30\x37\x35\x20\x2d\x32\x2e\x30\x30\x37\
+\x35\x5a\x27\x20\x66\x69\x6c\x6c\x3d\x27\x6e\x6f\x6e\x65\x27\x20\
+\x73\x74\x72\x6f\x6b\x65\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\
+\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3d\
+\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\
+\x69\x6e\x65\x6a\x6f\x69\x6e\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\
+\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\
+\x74\x3d\x27\x31\x30\x2e\x30\x33\x37\x35\x27\x20\x73\x74\x72\x6f\
+\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x27\x34\x2e\x30\x31\x35\x27\
+\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\
+\x66\x6f\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\x39\
+\x39\x36\x32\x36\x34\x20\x30\x20\x30\x20\x30\x2e\x39\x39\x36\x32\
+\x36\x34\x20\x35\x36\x2e\x34\x30\x39\x34\x20\x31\x31\x37\x2e\x38\
+\x35\x38\x29\x27\x3e\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x27\x4d\
+\x20\x32\x2e\x30\x30\x37\x35\x20\x2d\x33\x32\x2e\x31\x32\x4c\x20\
+\x36\x32\x2e\x32\x33\x32\x35\x20\x2d\x33\x32\x2e\x31\x32\x27\x20\
+\x66\x69\x6c\x6c\x3d\x27\x6e\x6f\x6e\x65\x27\x20\x73\x74\x72\x6f\
+\x6b\x65\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\x20\x73\x74\x72\
+\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3d\x27\x72\x6f\x75\
+\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\
+\x6f\x69\x6e\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\
+\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3d\x27\x31\
+\x30\x2e\x30\x33\x37\x35\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x77\
+\x69\x64\x74\x68\x3d\x27\x34\x2e\x30\x31\x35\x27\x2f\x3e\x0a\x3c\
+\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\
+\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\x39\x39\x36\x32\x36\
+\x34\x20\x30\x20\x30\x20\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x35\
+\x36\x2e\x34\x30\x39\x34\x20\x31\x31\x37\x2e\x38\x35\x38\x29\x27\
+\x3e\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x27\x4d\x20\x33\x32\x2e\
+\x31\x32\x20\x2d\x32\x2e\x30\x30\x37\x35\x4c\x20\x33\x32\x2e\x31\
+\x32\x20\x2d\x36\x32\x2e\x32\x33\x32\x35\x27\x20\x66\x69\x6c\x6c\
+\x3d\x27\x6e\x6f\x6e\x65\x27\x20\x73\x74\x72\x6f\x6b\x65\x3d\x27\
+\x23\x30\x30\x30\x30\x30\x30\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\
+\x6c\x69\x6e\x65\x63\x61\x70\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\
+\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3d\
+\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6d\
+\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3d\x27\x31\x30\x2e\x30\x33\
+\x37\x35\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\
+\x3d\x27\x34\x2e\x30\x31\x35\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\
+\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\
 \x00\x00\x04\x3d\
 \x3c\
 \x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\
@@ -1260,7 +1664,7 @@
 \x66\x69\x6c\x6c\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\x20\x72\
 \x3d\x27\x36\x2e\x30\x32\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\
 \x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\
-\x00\x00\x02\xc9\
+\x00\x00\x03\x46\
 \x3c\
 \x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
 \x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
@@ -1292,23 +1696,83 @@
 \x6b\x67\x72\x6f\x75\x6e\x64\x3a\x6e\x65\x77\x20\x30\x20\x30\x20\
 \x35\x31\x32\x20\x35\x31\x32\x3b\x22\x20\x78\x6d\x6c\x3a\x73\x70\
 \x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\
-\x0a\x3c\x70\x6f\x6c\x79\x67\x6f\x6e\x20\x70\x6f\x69\x6e\x74\x73\
-\x3d\x22\x34\x38\x30\x2c\x32\x35\x36\x20\x33\x38\x34\x2c\x31\x36\
-\x30\x20\x33\x38\x34\x2c\x32\x33\x36\x20\x32\x37\x36\x2c\x32\x33\
-\x36\x20\x32\x37\x36\x2c\x31\x32\x38\x20\x33\x35\x32\x2c\x31\x32\
-\x38\x20\x32\x35\x36\x2c\x33\x32\x20\x31\x36\x30\x2c\x31\x32\x38\
-\x20\x32\x33\x36\x2c\x31\x32\x38\x20\x32\x33\x36\x2c\x32\x33\x36\
-\x20\x31\x32\x38\x2c\x32\x33\x36\x20\x31\x32\x38\x2c\x31\x36\x30\
-\x20\x33\x32\x2c\x32\x35\x36\x20\x31\x32\x38\x2c\x33\x35\x32\x20\
-\x0d\x0a\x09\x31\x32\x38\x2c\x32\x37\x36\x20\x32\x33\x36\x2c\x32\
-\x37\x36\x20\x32\x33\x36\x2c\x33\x38\x34\x20\x31\x36\x30\x2c\x33\
-\x38\x34\x20\x32\x35\x36\x2c\x34\x38\x30\x20\x33\x35\x32\x2c\x33\
-\x38\x34\x20\x32\x37\x35\x2e\x38\x2c\x33\x38\x34\x20\x32\x37\x35\
-\x2e\x34\x2c\x32\x37\x35\x2e\x35\x20\x33\x38\x34\x2c\x32\x37\x35\
-\x2e\x38\x20\x33\x38\x34\x2c\x33\x35\x32\x20\x22\x2f\x3e\x0d\x0a\
-\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
-\x00\x00\x02\xfc\
+\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x34\x33\x37\x2e\x35\
+\x2c\x33\x38\x36\x2e\x36\x4c\x33\x30\x36\x2e\x39\x2c\x32\x35\x36\
+\x6c\x31\x33\x30\x2e\x36\x2d\x31\x33\x30\x2e\x36\x63\x31\x34\x2e\
+\x31\x2d\x31\x34\x2e\x31\x2c\x31\x34\x2e\x31\x2d\x33\x36\x2e\x38\
+\x2c\x30\x2d\x35\x30\x2e\x39\x63\x2d\x31\x34\x2e\x31\x2d\x31\x34\
+\x2e\x31\x2d\x33\x36\x2e\x38\x2d\x31\x34\x2e\x31\x2d\x35\x30\x2e\
+\x39\x2c\x30\x4c\x32\x35\x36\x2c\x32\x30\x35\x2e\x31\x4c\x31\x32\
+\x35\x2e\x34\x2c\x37\x34\x2e\x35\x0d\x0a\x09\x63\x2d\x31\x34\x2e\
+\x31\x2d\x31\x34\x2e\x31\x2d\x33\x36\x2e\x38\x2d\x31\x34\x2e\x31\
+\x2d\x35\x30\x2e\x39\x2c\x30\x63\x2d\x31\x34\x2e\x31\x2c\x31\x34\
+\x2e\x31\x2d\x31\x34\x2e\x31\x2c\x33\x36\x2e\x38\x2c\x30\x2c\x35\
+\x30\x2e\x39\x4c\x32\x30\x35\x2e\x31\x2c\x32\x35\x36\x4c\x37\x34\
+\x2e\x35\x2c\x33\x38\x36\x2e\x36\x63\x2d\x31\x34\x2e\x31\x2c\x31\
+\x34\x2e\x31\x2d\x31\x34\x2e\x31\x2c\x33\x36\x2e\x38\x2c\x30\x2c\
+\x35\x30\x2e\x39\x0d\x0a\x09\x63\x31\x34\x2e\x31\x2c\x31\x34\x2e\
+\x31\x2c\x33\x36\x2e\x38\x2c\x31\x34\x2e\x31\x2c\x35\x30\x2e\x39\
+\x2c\x30\x4c\x32\x35\x36\x2c\x33\x30\x36\x2e\x39\x6c\x31\x33\x30\
+\x2e\x36\x2c\x31\x33\x30\x2e\x36\x63\x31\x34\x2e\x31\x2c\x31\x34\
+\x2e\x31\x2c\x33\x36\x2e\x38\x2c\x31\x34\x2e\x31\x2c\x35\x30\x2e\
+\x39\x2c\x30\x43\x34\x35\x31\x2e\x35\x2c\x34\x32\x33\x2e\x34\x2c\
+\x34\x35\x31\x2e\x35\x2c\x34\x30\x30\x2e\x36\x2c\x34\x33\x37\x2e\
+\x35\x2c\x33\x38\x36\x2e\x36\x7a\x22\x2f\x3e\x0d\x0a\x3c\x2f\x73\
+\x76\x67\x3e\x0d\x0a\
+\x00\x00\x01\xdd\
+\x00\
+\x00\x06\xe4\x78\x9c\xcd\x54\x4d\x6f\x9b\x40\x10\x3d\x13\x29\xff\
+\x61\xba\xb7\x4a\xec\x17\xc4\xd4\xa6\xa6\x51\xfd\x21\xcb\x52\x9a\
+\x58\x6a\xea\xaa\xa7\x0a\xc3\x16\x50\x28\x20\x58\xc0\xce\xaf\xef\
+\xee\x92\x54\x51\x95\xfa\x18\xfb\xb0\x33\xda\x79\x6f\xde\xbc\x65\
+\x24\xa6\xd7\xfb\xdf\x39\x74\xa2\x6e\xb2\xb2\x08\x10\x27\x0c\x81\
+\x28\xa2\x32\xce\x8a\x24\x40\xad\xfc\x85\xc7\xe8\xfa\xd3\xe5\xc5\
+\xf4\x1d\xc6\xb0\x12\x85\xa8\x43\x59\xd6\x3e\x7c\x8e\xcb\x9d\x80\
+\x75\x9e\xb7\x8d\x34\x25\xe0\x1e\x71\x08\xb7\xe1\xeb\x76\x05\xcb\
+\x7d\x55\xd6\x12\x36\x79\x9b\xe0\x75\x01\xc4\x14\xb7\xc3\x10\x1f\
+\x3c\xc2\x18\xcc\xda\x2c\x8f\x81\xbd\x07\xc0\xd8\xe8\x2f\xee\xe6\
+\xf7\x3f\x36\x4b\x68\xba\x04\x36\xdf\x66\x37\xeb\x39\x20\x4c\xe9\
+\x77\x77\x4e\xe9\xe2\x7e\x61\x24\x38\xe1\x94\x2e\x6f\x11\xa0\x54\
+\xca\xca\xa7\xb4\xef\x7b\xd2\xbb\xa4\xac\x13\xba\xaa\xc3\x2a\xcd\
+\xa2\x86\x2a\x22\xd5\x44\xd5\x44\x95\x18\xe7\x24\x96\x31\xd2\x33\
+\xb4\xf4\x8b\xa7\x72\x04\x59\x1c\xa0\x9b\xf0\x20\xea\x9f\xea\xa2\
+\xbe\x44\xd1\x04\xaf\x48\x3b\x8c\x31\x2d\xf5\x44\xf1\xf7\x79\x56\
+\x3c\xbc\x46\xe4\x93\xc9\x84\x1a\x54\x51\x03\xc4\xaa\x3d\x82\xc3\
+\x90\x2f\x2f\x2c\xe8\xb3\x58\xa6\x01\x1a\x71\x47\x03\xa9\xc8\x92\
+\x54\xfe\xbd\x76\x99\xe8\x67\xa5\xee\x02\x06\xaa\xa6\x0f\x82\x46\
+\x1e\x72\x11\x20\x51\x84\xbb\x5c\xe0\x5d\x18\x3d\x24\x75\xd9\x16\
+\xb1\x5f\x88\x1e\x5e\x30\x3f\x1a\x6f\x7e\x53\x85\x91\xa2\x57\xb5\
+\x68\x44\xdd\x09\xf3\xea\x44\x05\x6b\x88\xd6\xb4\x0a\x65\x0a\xea\
+\xd1\x5f\xb8\xc7\x6c\x3e\x72\x89\x1b\x31\xdb\x25\x1f\xb0\x6b\x7b\
+\x2a\xaa\xa3\x73\x8a\x47\x8c\x8c\x22\xac\x00\x9b\xe9\x22\x76\xf1\
+\x13\xdc\x0d\x10\x33\x98\xfb\xdc\xa0\x73\x6a\x00\xd3\xa2\x4b\xb6\
+\x51\xd4\x67\x6b\xe6\x3c\xea\x4f\x60\x59\xf4\x1f\x1f\xce\x78\x7c\
+\x16\x3e\xae\xb8\x77\x3a\x1f\x53\xfa\xff\x25\x39\x63\xfe\x26\xa6\
+\xcc\x9c\x23\x4b\x3a\x07\x1f\x7a\x49\x27\xf3\x71\x6c\x49\x57\x6c\
+\xf2\x26\xa6\xcc\x9c\x23\x4b\x3a\x07\x1f\x7a\x49\x27\xf3\x31\x2c\
+\xe9\x39\xaa\x7f\xb6\xca\x7f\x00\x99\x18\x96\x19\
+\x00\x00\x01\x1c\
 \x3c\
+\x73\x76\x67\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\
+\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\
+\x30\x2f\x73\x76\x67\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\x32\
+\x70\x78\x22\x0a\x20\x20\x20\x20\x20\x76\x69\x65\x77\x42\x6f\x78\
+\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x3e\x0a\
+\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\
+\x74\x72\x69\x78\x28\x34\x38\x20\x30\x20\x30\x20\x34\x38\x20\x34\
+\x38\x20\x34\x38\x29\x27\x3e\x0a\x20\x20\x3c\x70\x61\x74\x68\x20\
+\x64\x3d\x22\x4d\x30\x20\x30\x76\x32\x68\x2e\x35\x63\x30\x2d\x2e\
+\x35\x35\x2e\x34\x35\x2d\x31\x20\x31\x2d\x31\x68\x31\x2e\x35\x76\
+\x35\x2e\x35\x63\x30\x20\x2e\x32\x38\x2d\x2e\x32\x32\x2e\x35\x2d\
+\x2e\x35\x2e\x35\x68\x2d\x2e\x35\x76\x31\x68\x34\x76\x2d\x31\x68\
+\x2d\x2e\x35\x63\x2d\x2e\x32\x38\x20\x30\x2d\x2e\x35\x2d\x2e\x32\
+\x32\x2d\x2e\x35\x2d\x2e\x35\x76\x2d\x35\x2e\x35\x68\x31\x2e\x35\
+\x63\x2e\x35\x35\x20\x30\x20\x31\x20\x2e\x34\x35\x20\x31\x20\x31\
+\x68\x2e\x35\x76\x2d\x32\x68\x2d\x38\x7a\x22\x20\x2f\x3e\x0a\x3c\
+\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x05\x27\
+\x3c\
 \x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
 \x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
 \x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
@@ -1339,25 +1803,60 @@
 \x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\
 \x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\
 \x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x67\x20\x69\x64\x3d\
-\x22\x49\x63\x6f\x6e\x5f\x32\x30\x5f\x22\x3e\x0d\x0a\x09\x3c\x67\
+\x22\x49\x63\x6f\x6e\x5f\x31\x32\x5f\x22\x3e\x0d\x0a\x09\x3c\x67\
 \x3e\x0d\x0a\x09\x09\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x32\
-\x35\x36\x2c\x34\x38\x43\x31\x34\x31\x2e\x36\x30\x31\x2c\x34\x38\
-\x2c\x34\x38\x2c\x31\x34\x31\x2e\x36\x30\x31\x2c\x34\x38\x2c\x32\
-\x35\x36\x73\x39\x33\x2e\x36\x30\x31\x2c\x32\x30\x38\x2c\x32\x30\
-\x38\x2c\x32\x30\x38\x73\x32\x30\x38\x2d\x39\x33\x2e\x36\x30\x31\
-\x2c\x32\x30\x38\x2d\x32\x30\x38\x53\x33\x37\x30\x2e\x33\x39\x39\
-\x2c\x34\x38\x2c\x32\x35\x36\x2c\x34\x38\x7a\x20\x4d\x32\x35\x36\
-\x2c\x34\x32\x32\x2e\x33\x39\x39\x0d\x0a\x09\x09\x09\x63\x2d\x39\
-\x31\x2e\x35\x31\x38\x2c\x30\x2d\x31\x36\x36\x2e\x33\x39\x39\x2d\
-\x37\x34\x2e\x38\x38\x32\x2d\x31\x36\x36\x2e\x33\x39\x39\x2d\x31\
-\x36\x36\x2e\x33\x39\x39\x53\x31\x36\x34\x2e\x34\x38\x32\x2c\x38\
-\x39\x2e\x36\x2c\x32\x35\x36\x2c\x38\x39\x2e\x36\x53\x34\x32\x32\
-\x2e\x34\x2c\x31\x36\x34\x2e\x34\x38\x32\x2c\x34\x32\x32\x2e\x34\
-\x2c\x32\x35\x36\x53\x33\x34\x37\x2e\x35\x31\x38\x2c\x34\x32\x32\
-\x2e\x33\x39\x39\x2c\x32\x35\x36\x2c\x34\x32\x32\x2e\x33\x39\x39\
-\x7a\x22\x2f\x3e\x0d\x0a\x09\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x67\
-\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
-\x00\x00\x03\x6c\
+\x35\x36\x2c\x36\x34\x43\x31\x35\x30\x2e\x34\x30\x31\x2c\x36\x34\
+\x2c\x36\x34\x2c\x31\x35\x30\x2e\x34\x30\x31\x2c\x36\x34\x2c\x32\
+\x35\x36\x63\x30\x2c\x31\x30\x35\x2e\x36\x30\x34\x2c\x38\x36\x2e\
+\x34\x30\x31\x2c\x31\x39\x32\x2c\x31\x39\x32\x2c\x31\x39\x32\x63\
+\x31\x38\x2e\x31\x33\x36\x2c\x30\x2c\x33\x32\x2d\x31\x33\x2e\x38\
+\x36\x34\x2c\x33\x32\x2d\x33\x32\x0d\x0a\x09\x09\x09\x63\x30\x2d\
+\x38\x2e\x35\x33\x31\x2d\x33\x2e\x31\x39\x38\x2d\x31\x36\x2d\x38\
+\x2e\x35\x33\x31\x2d\x32\x31\x2e\x33\x33\x33\x63\x2d\x35\x2e\x33\
+\x33\x33\x2d\x35\x2e\x33\x33\x34\x2d\x38\x2e\x35\x33\x31\x2d\x31\
+\x32\x2e\x38\x30\x33\x2d\x38\x2e\x35\x33\x31\x2d\x32\x31\x2e\x33\
+\x33\x34\x63\x30\x2d\x31\x38\x2e\x31\x33\x35\x2c\x31\x33\x2e\x38\
+\x36\x34\x2d\x33\x32\x2c\x33\x32\x2d\x33\x32\x68\x33\x38\x2e\x33\
+\x39\x36\x0d\x0a\x09\x09\x09\x63\x35\x38\x2e\x36\x36\x37\x2c\x30\
+\x2c\x31\x30\x36\x2e\x36\x36\x37\x2d\x34\x38\x2c\x31\x30\x36\x2e\
+\x36\x36\x37\x2d\x31\x30\x36\x2e\x36\x36\x36\x43\x34\x34\x38\x2c\
+\x31\x34\x30\x2e\x38\x30\x32\x2c\x33\x36\x31\x2e\x36\x30\x34\x2c\
+\x36\x34\x2c\x32\x35\x36\x2c\x36\x34\x7a\x20\x4d\x31\x33\x38\x2e\
+\x36\x36\x37\x2c\x32\x35\x36\x63\x2d\x31\x38\x2e\x31\x33\x36\x2c\
+\x30\x2d\x33\x32\x2d\x31\x33\x2e\x38\x36\x34\x2d\x33\x32\x2d\x33\
+\x32\x73\x31\x33\x2e\x38\x36\x34\x2d\x33\x32\x2c\x33\x32\x2d\x33\
+\x32\x0d\x0a\x09\x09\x09\x63\x31\x38\x2e\x31\x33\x35\x2c\x30\x2c\
+\x33\x32\x2c\x31\x33\x2e\x38\x36\x34\x2c\x33\x32\x2c\x33\x32\x53\
+\x31\x35\x36\x2e\x38\x30\x32\x2c\x32\x35\x36\x2c\x31\x33\x38\x2e\
+\x36\x36\x37\x2c\x32\x35\x36\x7a\x20\x4d\x32\x30\x32\x2e\x36\x36\
+\x37\x2c\x31\x37\x30\x2e\x36\x36\x37\x63\x2d\x31\x38\x2e\x31\x33\
+\x36\x2c\x30\x2d\x33\x32\x2d\x31\x33\x2e\x38\x36\x35\x2d\x33\x32\
+\x2d\x33\x32\x63\x30\x2d\x31\x38\x2e\x31\x33\x36\x2c\x31\x33\x2e\
+\x38\x36\x34\x2d\x33\x32\x2c\x33\x32\x2d\x33\x32\x0d\x0a\x09\x09\
+\x09\x63\x31\x38\x2e\x31\x33\x35\x2c\x30\x2c\x33\x32\x2c\x31\x33\
+\x2e\x38\x36\x34\x2c\x33\x32\x2c\x33\x32\x43\x32\x33\x34\x2e\x36\
+\x36\x37\x2c\x31\x35\x36\x2e\x38\x30\x32\x2c\x32\x32\x30\x2e\x38\
+\x30\x32\x2c\x31\x37\x30\x2e\x36\x36\x37\x2c\x32\x30\x32\x2e\x36\
+\x36\x37\x2c\x31\x37\x30\x2e\x36\x36\x37\x7a\x20\x4d\x33\x30\x39\
+\x2e\x33\x33\x33\x2c\x31\x37\x30\x2e\x36\x36\x37\x63\x2d\x31\x38\
+\x2e\x31\x33\x35\x2c\x30\x2d\x33\x32\x2d\x31\x33\x2e\x38\x36\x35\
+\x2d\x33\x32\x2d\x33\x32\x0d\x0a\x09\x09\x09\x63\x30\x2d\x31\x38\
+\x2e\x31\x33\x36\x2c\x31\x33\x2e\x38\x36\x35\x2d\x33\x32\x2c\x33\
+\x32\x2d\x33\x32\x63\x31\x38\x2e\x31\x33\x36\x2c\x30\x2c\x33\x32\
+\x2c\x31\x33\x2e\x38\x36\x34\x2c\x33\x32\x2c\x33\x32\x43\x33\x34\
+\x31\x2e\x33\x33\x33\x2c\x31\x35\x36\x2e\x38\x30\x32\x2c\x33\x32\
+\x37\x2e\x34\x36\x39\x2c\x31\x37\x30\x2e\x36\x36\x37\x2c\x33\x30\
+\x39\x2e\x33\x33\x33\x2c\x31\x37\x30\x2e\x36\x36\x37\x7a\x20\x4d\
+\x33\x37\x33\x2e\x33\x33\x33\x2c\x32\x35\x36\x0d\x0a\x09\x09\x09\
+\x63\x2d\x31\x38\x2e\x31\x33\x35\x2c\x30\x2d\x33\x32\x2d\x31\x33\
+\x2e\x38\x36\x34\x2d\x33\x32\x2d\x33\x32\x73\x31\x33\x2e\x38\x36\
+\x35\x2d\x33\x32\x2c\x33\x32\x2d\x33\x32\x63\x31\x38\x2e\x31\x33\
+\x36\x2c\x30\x2c\x33\x32\x2c\x31\x33\x2e\x38\x36\x34\x2c\x33\x32\
+\x2c\x33\x32\x53\x33\x39\x31\x2e\x34\x36\x39\x2c\x32\x35\x36\x2c\
+\x33\x37\x33\x2e\x33\x33\x33\x2c\x32\x35\x36\x7a\x22\x2f\x3e\x0d\
+\x0a\x09\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\
+\x73\x76\x67\x3e\x0d\x0a\
+\x00\x00\x02\x7d\
 \x3c\
 \x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
 \x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
@@ -1388,32 +1887,17 @@
 \x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\
 \x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\
 \x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\
-\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x67\x3e\x0d\x0a\x09\
-\x0d\x0a\x09\x09\x3c\x72\x65\x63\x74\x20\x78\x3d\x22\x31\x37\x38\
-\x2e\x38\x34\x36\x22\x20\x79\x3d\x22\x39\x32\x2e\x30\x38\x37\x22\
-\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x6d\x61\x74\x72\
-\x69\x78\x28\x2d\x30\x2e\x37\x30\x37\x31\x20\x2d\x30\x2e\x37\x30\
-\x37\x31\x20\x30\x2e\x37\x30\x37\x31\x20\x2d\x30\x2e\x37\x30\x37\
-\x31\x20\x32\x32\x34\x2e\x33\x34\x37\x36\x20\x36\x33\x31\x2e\x31\
-\x34\x39\x38\x29\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x31\x32\x38\
-\x2e\x30\x38\x35\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x33\x35\
-\x34\x2e\x30\x34\x39\x22\x2f\x3e\x0d\x0a\x09\x3c\x70\x61\x74\x68\
-\x20\x64\x3d\x22\x4d\x34\x37\x31\x2e\x37\x32\x33\x2c\x38\x38\x2e\
-\x33\x39\x33\x6c\x2d\x34\x38\x2e\x31\x31\x35\x2d\x34\x38\x2e\x31\
-\x31\x34\x63\x2d\x31\x31\x2e\x37\x32\x33\x2d\x31\x31\x2e\x37\x32\
-\x34\x2d\x33\x31\x2e\x35\x35\x38\x2d\x31\x30\x2e\x38\x39\x36\x2d\
-\x34\x34\x2e\x33\x30\x34\x2c\x31\x2e\x38\x35\x6c\x2d\x34\x35\x2e\
-\x32\x30\x32\x2c\x34\x35\x2e\x32\x30\x33\x6c\x39\x30\x2e\x35\x36\
-\x39\x2c\x39\x30\x2e\x35\x36\x38\x6c\x34\x35\x2e\x32\x30\x32\x2d\
-\x34\x35\x2e\x32\x30\x32\x0d\x0a\x09\x09\x43\x34\x38\x32\x2e\x36\
-\x31\x36\x2c\x31\x31\x39\x2e\x39\x35\x32\x2c\x34\x38\x33\x2e\x34\
-\x34\x35\x2c\x31\x30\x30\x2e\x31\x31\x36\x2c\x34\x37\x31\x2e\x37\
-\x32\x33\x2c\x38\x38\x2e\x33\x39\x33\x7a\x22\x2f\x3e\x0d\x0a\x09\
-\x3c\x70\x6f\x6c\x79\x67\x6f\x6e\x20\x70\x6f\x69\x6e\x74\x73\x3d\
-\x22\x36\x34\x2e\x30\x32\x31\x2c\x33\x36\x33\x2e\x32\x35\x32\x20\
-\x33\x32\x2c\x34\x38\x30\x20\x31\x34\x38\x2e\x37\x33\x37\x2c\x34\
-\x34\x37\x2e\x39\x37\x39\x20\x09\x22\x2f\x3e\x0d\x0a\x3c\x2f\x67\
-\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
+\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x67\x20\x69\x64\x3d\
+\x22\x49\x63\x6f\x6e\x5f\x38\x5f\x22\x3e\x0d\x0a\x09\x3c\x67\x3e\
+\x0d\x0a\x09\x09\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x38\x35\
+\x2c\x32\x37\x37\x2e\x33\x37\x35\x68\x32\x35\x39\x2e\x37\x30\x34\
+\x4c\x32\x32\x35\x2e\x30\x30\x32\x2c\x33\x39\x37\x2e\x30\x37\x37\
+\x4c\x32\x35\x36\x2c\x34\x32\x37\x6c\x31\x37\x31\x2d\x31\x37\x31\
+\x4c\x32\x35\x36\x2c\x38\x35\x6c\x2d\x32\x39\x2e\x39\x32\x32\x2c\
+\x32\x39\x2e\x39\x32\x34\x6c\x31\x31\x38\x2e\x36\x32\x36\x2c\x31\
+\x31\x39\x2e\x37\x30\x31\x48\x38\x35\x56\x32\x37\x37\x2e\x33\x37\
+\x35\x7a\x22\x2f\x3e\x0d\x0a\x09\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\
+\x67\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
 \x00\x00\x04\x4e\
 \x3c\
 \x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\
@@ -1485,7 +1969,7 @@
 \x20\x66\x69\x6c\x6c\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\x20\
 \x72\x3d\x27\x36\x2e\x30\x32\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\x67\
 \x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\
-\x00\x00\x02\xf7\
+\x00\x00\x03\x52\
 \x3c\
 \x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
 \x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
@@ -1512,146 +1996,35 @@
 \x20\x79\x3d\x22\x30\x70\x78\x22\x0d\x0a\x09\x20\x77\x69\x64\x74\
 \x68\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\
 \x3d\x22\x35\x31\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\
-\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x73\
-\x74\x79\x6c\x65\x3d\x22\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\
-\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x6e\x65\x77\x20\x30\x20\x30\x20\
-\x35\x31\x32\x20\x35\x31\x32\x3b\x22\x20\x78\x6d\x6c\x3a\x73\x70\
-\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\
-\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x34\x31\x37\x2e\x34\
-\x2c\x32\x32\x34\x48\x32\x38\x38\x56\x39\x34\x2e\x36\x63\x30\x2d\
-\x31\x36\x2e\x39\x2d\x31\x34\x2e\x33\x2d\x33\x30\x2e\x36\x2d\x33\
-\x32\x2d\x33\x30\x2e\x36\x63\x2d\x31\x37\x2e\x37\x2c\x30\x2d\x33\
-\x32\x2c\x31\x33\x2e\x37\x2d\x33\x32\x2c\x33\x30\x2e\x36\x56\x32\
-\x32\x34\x48\x39\x34\x2e\x36\x43\x37\x37\x2e\x37\x2c\x32\x32\x34\
-\x2c\x36\x34\x2c\x32\x33\x38\x2e\x33\x2c\x36\x34\x2c\x32\x35\x36\
-\x0d\x0a\x09\x63\x30\x2c\x31\x37\x2e\x37\x2c\x31\x33\x2e\x37\x2c\
-\x33\x32\x2c\x33\x30\x2e\x36\x2c\x33\x32\x48\x32\x32\x34\x76\x31\
-\x32\x39\x2e\x34\x63\x30\x2c\x31\x36\x2e\x39\x2c\x31\x34\x2e\x33\
-\x2c\x33\x30\x2e\x36\x2c\x33\x32\x2c\x33\x30\x2e\x36\x63\x31\x37\
-\x2e\x37\x2c\x30\x2c\x33\x32\x2d\x31\x33\x2e\x37\x2c\x33\x32\x2d\
-\x33\x30\x2e\x36\x56\x32\x38\x38\x68\x31\x32\x39\x2e\x34\x63\x31\
-\x36\x2e\x39\x2c\x30\x2c\x33\x30\x2e\x36\x2d\x31\x34\x2e\x33\x2c\
-\x33\x30\x2e\x36\x2d\x33\x32\x0d\x0a\x09\x43\x34\x34\x38\x2c\x32\
-\x33\x38\x2e\x33\x2c\x34\x33\x34\x2e\x33\x2c\x32\x32\x34\x2c\x34\
-\x31\x37\x2e\x34\x2c\x32\x32\x34\x7a\x22\x2f\x3e\x0d\x0a\x3c\x2f\
-\x73\x76\x67\x3e\x0d\x0a\
-\x00\x00\x03\x0c\
-\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
-\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
-\x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
-\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
-\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x38\x2e\x31\x2e\x30\x2c\
-\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
-\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
-\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
-\x20\x20\x2d\x2d\x3e\x0d\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\
-\x20\x73\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\
-\x57\x33\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\
-\x2f\x2f\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
-\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\
-\x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\
-\x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0d\x0a\x3c\x73\x76\x67\x20\
-\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
-\x3d\x22\x43\x68\x65\x63\x6b\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\
-\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\
-\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\
-\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\
-\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\
-\x78\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\
-\x3d\x22\x30\x70\x78\x22\x0d\x0a\x09\x20\x76\x69\x65\x77\x42\x6f\
-\x78\x3d\x22\x30\x20\x30\x20\x32\x30\x20\x32\x30\x22\x20\x65\x6e\
-\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\
-\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x32\x30\x20\x32\x30\x22\x20\
-\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\
-\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\
-\x4d\x38\x2e\x32\x39\x34\x2c\x31\x36\x2e\x39\x39\x38\x63\x2d\x30\
-\x2e\x34\x33\x35\x2c\x30\x2d\x30\x2e\x38\x34\x37\x2d\x30\x2e\x32\
-\x30\x33\x2d\x31\x2e\x31\x31\x31\x2d\x30\x2e\x35\x35\x33\x4c\x33\
-\x2e\x36\x31\x2c\x31\x31\x2e\x37\x32\x34\x63\x2d\x30\x2e\x34\x36\
-\x35\x2d\x30\x2e\x36\x31\x33\x2d\x30\x2e\x33\x34\x34\x2d\x31\x2e\
-\x34\x38\x36\x2c\x30\x2e\x32\x37\x2d\x31\x2e\x39\x35\x31\x0d\x0a\
-\x09\x63\x30\x2e\x36\x31\x35\x2d\x30\x2e\x34\x36\x37\x2c\x31\x2e\
-\x34\x38\x38\x2d\x30\x2e\x33\x34\x34\x2c\x31\x2e\x39\x35\x33\x2c\
-\x30\x2e\x32\x37\x6c\x32\x2e\x33\x35\x31\x2c\x33\x2e\x31\x30\x34\
-\x6c\x35\x2e\x39\x31\x31\x2d\x39\x2e\x34\x39\x32\x63\x30\x2e\x34\
-\x30\x37\x2d\x30\x2e\x36\x35\x32\x2c\x31\x2e\x32\x36\x37\x2d\x30\
-\x2e\x38\x35\x32\x2c\x31\x2e\x39\x32\x31\x2d\x30\x2e\x34\x34\x35\
-\x0d\x0a\x09\x63\x30\x2e\x36\x35\x33\x2c\x30\x2e\x34\x30\x36\x2c\
-\x30\x2e\x38\x35\x34\x2c\x31\x2e\x32\x36\x36\x2c\x30\x2e\x34\x34\
-\x36\x2c\x31\x2e\x39\x32\x4c\x39\x2e\x34\x37\x38\x2c\x31\x36\x2e\
-\x33\x34\x63\x2d\x30\x2e\x32\x34\x32\x2c\x30\x2e\x33\x39\x31\x2d\
-\x30\x2e\x36\x36\x31\x2c\x30\x2e\x36\x33\x35\x2d\x31\x2e\x31\x32\
-\x2c\x30\x2e\x36\x35\x36\x43\x38\x2e\x33\x33\x36\x2c\x31\x36\x2e\
-\x39\x39\x38\x2c\x38\x2e\x33\x31\x36\x2c\x31\x36\x2e\x39\x39\x38\
-\x2c\x38\x2e\x32\x39\x34\x2c\x31\x36\x2e\x39\x39\x38\x7a\x22\x2f\
-\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
-\x00\x00\x03\xf5\
-\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
-\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
-\x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
-\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
-\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x38\x2e\x31\x2e\x31\x2c\
-\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
-\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
-\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
-\x20\x20\x2d\x2d\x3e\x0d\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\
-\x20\x73\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\
-\x57\x33\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\
-\x2f\x2f\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
-\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\
-\x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\
-\x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0d\x0a\x3c\x73\x76\x67\x20\
-\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
-\x3d\x22\x43\x68\x65\x76\x72\x6f\x6e\x5f\x63\x69\x72\x63\x6c\x65\
-\x64\x5f\x6c\x65\x66\x74\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
-\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
-\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
-\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
-\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
-\x6c\x69\x6e\x6b\x22\x0d\x0a\x09\x20\x78\x3d\x22\x30\x70\x78\x22\
-\x20\x79\x3d\x22\x30\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\
 \x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\
 \x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\
 \x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\
 \x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\
-\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x67\x20\x74\x72\x61\
-\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\x32\
-\x34\x20\x30\x20\x30\x20\x32\x34\x20\x30\x20\x30\x29\x27\x3e\x0d\
-\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x31\x31\x2e\x33\x30\
-\x32\x2c\x36\x2e\x37\x37\x36\x63\x2d\x30\x2e\x31\x39\x36\x2d\x30\
-\x2e\x31\x39\x37\x2d\x30\x2e\x35\x31\x35\x2d\x30\x2e\x31\x39\x37\
-\x2d\x30\x2e\x37\x31\x2c\x30\x4c\x37\x2e\x37\x38\x35\x2c\x39\x2e\
-\x36\x34\x31\x63\x2d\x30\x2e\x31\x39\x36\x2c\x30\x2e\x31\x39\x39\
-\x2d\x30\x2e\x31\x39\x36\x2c\x30\x2e\x35\x32\x2c\x30\x2c\x30\x2e\
-\x37\x31\x37\x6c\x32\x2e\x38\x30\x37\x2c\x32\x2e\x38\x36\x34\x0d\
-\x0a\x09\x63\x30\x2e\x31\x39\x35\x2c\x30\x2e\x31\x39\x39\x2c\x30\
-\x2e\x35\x31\x34\x2c\x30\x2e\x31\x39\x38\x2c\x30\x2e\x37\x31\x2c\
-\x30\x63\x30\x2e\x31\x39\x36\x2d\x30\x2e\x31\x39\x37\x2c\x30\x2e\
-\x31\x39\x36\x2d\x30\x2e\x35\x31\x38\x2c\x30\x2d\x30\x2e\x37\x31\
-\x37\x4c\x39\x2c\x31\x30\x6c\x32\x2e\x33\x30\x32\x2d\x32\x2e\x35\
-\x30\x36\x43\x31\x31\x2e\x34\x39\x38\x2c\x37\x2e\x32\x39\x36\x2c\
-\x31\x31\x2e\x34\x39\x38\x2c\x36\x2e\x39\x37\x36\x2c\x31\x31\x2e\
-\x33\x30\x32\x2c\x36\x2e\x37\x37\x36\x7a\x0d\x0a\x09\x20\x4d\x31\
-\x30\x2c\x30\x2e\x34\x63\x2d\x35\x2e\x33\x30\x32\x2c\x30\x2d\x39\
-\x2e\x36\x2c\x34\x2e\x32\x39\x38\x2d\x39\x2e\x36\x2c\x39\x2e\x36\
-\x63\x30\x2c\x35\x2e\x33\x30\x33\x2c\x34\x2e\x32\x39\x38\x2c\x39\
-\x2e\x36\x2c\x39\x2e\x36\x2c\x39\x2e\x36\x73\x39\x2e\x36\x2d\x34\
-\x2e\x32\x39\x37\x2c\x39\x2e\x36\x2d\x39\x2e\x36\x43\x31\x39\x2e\
-\x36\x2c\x34\x2e\x36\x39\x38\x2c\x31\x35\x2e\x33\x30\x32\x2c\x30\
-\x2e\x34\x2c\x31\x30\x2c\x30\x2e\x34\x7a\x20\x4d\x31\x30\x2c\x31\
-\x38\x2e\x33\x35\x34\x0d\x0a\x09\x63\x2d\x34\x2e\x36\x31\x35\x2c\
-\x30\x2d\x38\x2e\x33\x35\x34\x2d\x33\x2e\x37\x34\x2d\x38\x2e\x33\
-\x35\x34\x2d\x38\x2e\x33\x35\x34\x63\x30\x2d\x34\x2e\x36\x31\x34\
-\x2c\x33\x2e\x37\x33\x39\x2d\x38\x2e\x33\x35\x34\x2c\x38\x2e\x33\
-\x35\x34\x2d\x38\x2e\x33\x35\x34\x63\x34\x2e\x36\x31\x33\x2c\x30\
-\x2c\x38\x2e\x33\x35\x34\x2c\x33\x2e\x37\x34\x2c\x38\x2e\x33\x35\
-\x34\x2c\x38\x2e\x33\x35\x34\x0d\x0a\x09\x43\x31\x38\x2e\x33\x35\
-\x34\x2c\x31\x34\x2e\x36\x31\x34\x2c\x31\x34\x2e\x36\x31\x33\x2c\
-\x31\x38\x2e\x33\x35\x34\x2c\x31\x30\x2c\x31\x38\x2e\x33\x35\x34\
-\x7a\x22\x2f\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x73\x76\
-\x67\x3e\x0d\x0a\
+\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x70\x61\x74\x68\x20\
+\x64\x3d\x22\x4d\x34\x33\x37\x2e\x33\x33\x34\x2c\x31\x34\x34\x48\
+\x32\x35\x36\x2e\x30\x30\x36\x6c\x2d\x34\x32\x2e\x36\x36\x38\x2d\
+\x34\x38\x48\x37\x34\x2e\x36\x36\x36\x43\x35\x31\x2e\x31\x39\x37\
+\x2c\x39\x36\x2c\x33\x32\x2c\x31\x31\x35\x2e\x31\x39\x38\x2c\x33\
+\x32\x2c\x31\x33\x38\x2e\x36\x36\x37\x76\x32\x33\x34\x2e\x36\x36\
+\x36\x43\x33\x32\x2c\x33\x39\x36\x2e\x38\x30\x32\x2c\x35\x31\x2e\
+\x31\x39\x37\x2c\x34\x31\x36\x2c\x37\x34\x2e\x36\x36\x36\x2c\x34\
+\x31\x36\x68\x33\x36\x32\x2e\x36\x36\x38\x0d\x0a\x09\x43\x34\x36\
+\x30\x2e\x38\x30\x33\x2c\x34\x31\x36\x2c\x34\x38\x30\x2c\x33\x39\
+\x36\x2e\x38\x30\x32\x2c\x34\x38\x30\x2c\x33\x37\x33\x2e\x33\x33\
+\x33\x56\x31\x38\x36\x2e\x36\x36\x37\x43\x34\x38\x30\x2c\x31\x36\
+\x33\x2e\x31\x39\x38\x2c\x34\x36\x30\x2e\x38\x30\x33\x2c\x31\x34\
+\x34\x2c\x34\x33\x37\x2e\x33\x33\x34\x2c\x31\x34\x34\x7a\x20\x4d\
+\x34\x34\x38\x2c\x33\x37\x33\x2e\x33\x33\x33\x0d\x0a\x09\x63\x30\
+\x2c\x35\x2e\x37\x38\x32\x2d\x34\x2e\x38\x38\x35\x2c\x31\x30\x2e\
+\x36\x36\x37\x2d\x31\x30\x2e\x36\x36\x36\x2c\x31\x30\x2e\x36\x36\
+\x37\x48\x37\x34\x2e\x36\x36\x36\x43\x36\x38\x2e\x38\x38\x34\x2c\
+\x33\x38\x34\x2c\x36\x34\x2c\x33\x37\x39\x2e\x31\x31\x35\x2c\x36\
+\x34\x2c\x33\x37\x33\x2e\x33\x33\x33\x56\x31\x37\x36\x68\x33\x37\
+\x33\x2e\x33\x33\x34\x63\x35\x2e\x37\x38\x31\x2c\x30\x2c\x31\x30\
+\x2e\x36\x36\x36\x2c\x34\x2e\x38\x38\x35\x2c\x31\x30\x2e\x36\x36\
+\x36\x2c\x31\x30\x2e\x36\x36\x37\x0d\x0a\x09\x56\x33\x37\x33\x2e\
+\x33\x33\x33\x7a\x22\x2f\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\
+\x0a\
 \x00\x00\x03\x22\
 \x3c\
 \x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
@@ -1705,7 +2078,7 @@
 \x35\x2c\x33\x39\x32\x2c\x32\x35\x36\x2c\x33\x39\x32\x7a\x22\x2f\
 \x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\
 \x0a\
-\x00\x00\x02\xb7\
+\x00\x00\x03\x6c\
 \x3c\
 \x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
 \x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
@@ -1736,161 +2109,70 @@
 \x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\
 \x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\
 \x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\
-\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x67\x20\x69\x64\x3d\
-\x22\x49\x63\x6f\x6e\x5f\x35\x5f\x22\x3e\x0d\x0a\x09\x3c\x67\x3e\
-\x0d\x0a\x09\x09\x3c\x70\x6f\x6c\x79\x67\x6f\x6e\x20\x70\x6f\x69\
-\x6e\x74\x73\x3d\x22\x34\x30\x35\x2c\x31\x33\x36\x2e\x37\x39\x38\
-\x20\x33\x37\x35\x2e\x32\x30\x32\x2c\x31\x30\x37\x20\x32\x35\x36\
-\x2c\x32\x32\x36\x2e\x32\x30\x32\x20\x31\x33\x36\x2e\x37\x39\x38\
-\x2c\x31\x30\x37\x20\x31\x30\x37\x2c\x31\x33\x36\x2e\x37\x39\x38\
-\x20\x32\x32\x36\x2e\x32\x30\x32\x2c\x32\x35\x36\x20\x31\x30\x37\
-\x2c\x33\x37\x35\x2e\x32\x30\x32\x20\x31\x33\x36\x2e\x37\x39\x38\
-\x2c\x34\x30\x35\x20\x32\x35\x36\x2c\x32\x38\x35\x2e\x37\x39\x38\
-\x20\x0d\x0a\x09\x09\x09\x33\x37\x35\x2e\x32\x30\x32\x2c\x34\x30\
-\x35\x20\x34\x30\x35\x2c\x33\x37\x35\x2e\x32\x30\x32\x20\x32\x38\
-\x35\x2e\x37\x39\x38\x2c\x32\x35\x36\x20\x09\x09\x22\x2f\x3e\x0d\
-\x0a\x09\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\
-\x73\x76\x67\x3e\x0d\x0a\
-\x00\x00\x02\x79\
-\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
-\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
-\x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
-\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
-\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\
-\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
-\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
-\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
-\x20\x20\x2d\x2d\x3e\x0d\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\
-\x20\x73\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\
-\x57\x33\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\
-\x2f\x2f\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
-\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\
-\x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\
-\x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0d\x0a\x3c\x73\x76\x67\x20\
-\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
-\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\
-\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\
-\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\
-\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\
-\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\
-\x39\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\
-\x20\x79\x3d\x22\x30\x70\x78\x22\x0d\x0a\x09\x20\x77\x69\x64\x74\
-\x68\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\
-\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\
-\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\
-\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\
-\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\
-\x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\
-\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x67\x20\x69\x64\x3d\
-\x22\x49\x63\x6f\x6e\x5f\x31\x5f\x22\x3e\x0d\x0a\x09\x3c\x67\x3e\
-\x0d\x0a\x09\x09\x3c\x67\x3e\x0d\x0a\x09\x09\x09\x3c\x70\x6f\x6c\
-\x79\x67\x6f\x6e\x20\x70\x6f\x69\x6e\x74\x73\x3d\x22\x31\x38\x36\
-\x2e\x33\x30\x31\x2c\x33\x33\x39\x2e\x38\x39\x33\x20\x39\x36\x2c\
-\x32\x34\x39\x2e\x34\x36\x31\x20\x36\x34\x2c\x32\x37\x39\x2e\x39\
-\x36\x38\x20\x31\x38\x36\x2e\x33\x30\x31\x2c\x34\x30\x32\x20\x34\
-\x34\x38\x2c\x31\x34\x30\x2e\x35\x30\x36\x20\x34\x31\x36\x2c\x31\
-\x31\x30\x20\x09\x09\x09\x22\x2f\x3e\x0d\x0a\x09\x09\x3c\x2f\x67\
-\x3e\x0d\x0a\x09\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\
-\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
-\x00\x00\x03\xeb\
-\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
-\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
-\x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
-\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
-\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\
-\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
-\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
-\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
-\x20\x20\x2d\x2d\x3e\x0d\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\
-\x20\x73\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\
-\x57\x33\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\
-\x2f\x2f\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
-\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\
-\x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\
-\x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0d\x0a\x3c\x73\x76\x67\x20\
-\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
-\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\
-\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\
-\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\
-\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\
-\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\
-\x39\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\
-\x20\x79\x3d\x22\x30\x70\x78\x22\x0d\x0a\x09\x20\x77\x69\x64\x74\
-\x68\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\
-\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\
-\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x73\
-\x74\x79\x6c\x65\x3d\x22\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\
-\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x6e\x65\x77\x20\x30\x20\x30\x20\
-\x35\x31\x32\x20\x35\x31\x32\x3b\x22\x20\x78\x6d\x6c\x3a\x73\x70\
-\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\
-\x0a\x3c\x67\x3e\x0d\x0a\x09\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\
-\x4d\x32\x35\x36\x2c\x31\x32\x38\x63\x2d\x38\x31\x2e\x39\x2c\x30\
-\x2d\x31\x34\x35\x2e\x37\x2c\x34\x38\x2e\x38\x2d\x32\x32\x34\x2c\
-\x31\x32\x38\x63\x36\x37\x2e\x34\x2c\x36\x37\x2e\x37\x2c\x31\x32\
-\x34\x2c\x31\x32\x38\x2c\x32\x32\x34\x2c\x31\x32\x38\x63\x39\x39\
-\x2e\x39\x2c\x30\x2c\x31\x37\x33\x2e\x34\x2d\x37\x36\x2e\x34\x2c\
-\x32\x32\x34\x2d\x31\x32\x36\x2e\x36\x0d\x0a\x09\x09\x43\x34\x32\
-\x38\x2e\x32\x2c\x31\x39\x38\x2e\x36\x2c\x33\x35\x34\x2e\x38\x2c\
-\x31\x32\x38\x2c\x32\x35\x36\x2c\x31\x32\x38\x7a\x20\x4d\x32\x35\
-\x36\x2c\x33\x34\x37\x2e\x33\x63\x2d\x34\x39\x2e\x34\x2c\x30\x2d\
-\x38\x39\x2e\x36\x2d\x34\x31\x2d\x38\x39\x2e\x36\x2d\x39\x31\x2e\
-\x33\x63\x30\x2d\x35\x30\x2e\x34\x2c\x34\x30\x2e\x32\x2d\x39\x31\
-\x2e\x33\x2c\x38\x39\x2e\x36\x2d\x39\x31\x2e\x33\x73\x38\x39\x2e\
-\x36\x2c\x34\x31\x2c\x38\x39\x2e\x36\x2c\x39\x31\x2e\x33\x0d\x0a\
-\x09\x09\x43\x33\x34\x35\x2e\x36\x2c\x33\x30\x36\x2e\x34\x2c\x33\
-\x30\x35\x2e\x34\x2c\x33\x34\x37\x2e\x33\x2c\x32\x35\x36\x2c\x33\
-\x34\x37\x2e\x33\x7a\x22\x2f\x3e\x0d\x0a\x09\x3c\x67\x3e\x0d\x0a\
-\x09\x09\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x32\x35\x36\x2c\
-\x32\x32\x34\x63\x30\x2d\x37\x2e\x39\x2c\x32\x2e\x39\x2d\x31\x35\
-\x2e\x31\x2c\x37\x2e\x36\x2d\x32\x30\x2e\x37\x63\x2d\x32\x2e\x35\
-\x2d\x30\x2e\x34\x2d\x35\x2d\x30\x2e\x36\x2d\x37\x2e\x36\x2d\x30\
-\x2e\x36\x63\x2d\x32\x38\x2e\x38\x2c\x30\x2d\x35\x32\x2e\x33\x2c\
-\x32\x33\x2e\x39\x2d\x35\x32\x2e\x33\x2c\x35\x33\x2e\x33\x63\x30\
-\x2c\x32\x39\x2e\x34\x2c\x32\x33\x2e\x35\x2c\x35\x33\x2e\x33\x2c\
-\x35\x32\x2e\x33\x2c\x35\x33\x2e\x33\x0d\x0a\x09\x09\x09\x73\x35\
-\x32\x2e\x33\x2d\x32\x33\x2e\x39\x2c\x35\x32\x2e\x33\x2d\x35\x33\
-\x2e\x33\x63\x30\x2d\x32\x2e\x33\x2d\x30\x2e\x32\x2d\x34\x2e\x36\
-\x2d\x30\x2e\x34\x2d\x36\x2e\x39\x63\x2d\x35\x2e\x35\x2c\x34\x2e\
-\x33\x2d\x31\x32\x2e\x33\x2c\x36\x2e\x39\x2d\x31\x39\x2e\x38\x2c\
-\x36\x2e\x39\x43\x32\x37\x30\x2e\x33\x2c\x32\x35\x36\x2c\x32\x35\
-\x36\x2c\x32\x34\x31\x2e\x37\x2c\x32\x35\x36\x2c\x32\x32\x34\x7a\
-\x22\x2f\x3e\x0d\x0a\x09\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x67\x3e\
-\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
-\x00\x00\x01\xdd\
+\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x67\x3e\x0d\x0a\x09\
+\x0d\x0a\x09\x09\x3c\x72\x65\x63\x74\x20\x78\x3d\x22\x31\x37\x38\
+\x2e\x38\x34\x36\x22\x20\x79\x3d\x22\x39\x32\x2e\x30\x38\x37\x22\
+\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x6d\x61\x74\x72\
+\x69\x78\x28\x2d\x30\x2e\x37\x30\x37\x31\x20\x2d\x30\x2e\x37\x30\
+\x37\x31\x20\x30\x2e\x37\x30\x37\x31\x20\x2d\x30\x2e\x37\x30\x37\
+\x31\x20\x32\x32\x34\x2e\x33\x34\x37\x36\x20\x36\x33\x31\x2e\x31\
+\x34\x39\x38\x29\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x31\x32\x38\
+\x2e\x30\x38\x35\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x33\x35\
+\x34\x2e\x30\x34\x39\x22\x2f\x3e\x0d\x0a\x09\x3c\x70\x61\x74\x68\
+\x20\x64\x3d\x22\x4d\x34\x37\x31\x2e\x37\x32\x33\x2c\x38\x38\x2e\
+\x33\x39\x33\x6c\x2d\x34\x38\x2e\x31\x31\x35\x2d\x34\x38\x2e\x31\
+\x31\x34\x63\x2d\x31\x31\x2e\x37\x32\x33\x2d\x31\x31\x2e\x37\x32\
+\x34\x2d\x33\x31\x2e\x35\x35\x38\x2d\x31\x30\x2e\x38\x39\x36\x2d\
+\x34\x34\x2e\x33\x30\x34\x2c\x31\x2e\x38\x35\x6c\x2d\x34\x35\x2e\
+\x32\x30\x32\x2c\x34\x35\x2e\x32\x30\x33\x6c\x39\x30\x2e\x35\x36\
+\x39\x2c\x39\x30\x2e\x35\x36\x38\x6c\x34\x35\x2e\x32\x30\x32\x2d\
+\x34\x35\x2e\x32\x30\x32\x0d\x0a\x09\x09\x43\x34\x38\x32\x2e\x36\
+\x31\x36\x2c\x31\x31\x39\x2e\x39\x35\x32\x2c\x34\x38\x33\x2e\x34\
+\x34\x35\x2c\x31\x30\x30\x2e\x31\x31\x36\x2c\x34\x37\x31\x2e\x37\
+\x32\x33\x2c\x38\x38\x2e\x33\x39\x33\x7a\x22\x2f\x3e\x0d\x0a\x09\
+\x3c\x70\x6f\x6c\x79\x67\x6f\x6e\x20\x70\x6f\x69\x6e\x74\x73\x3d\
+\x22\x36\x34\x2e\x30\x32\x31\x2c\x33\x36\x33\x2e\x32\x35\x32\x20\
+\x33\x32\x2c\x34\x38\x30\x20\x31\x34\x38\x2e\x37\x33\x37\x2c\x34\
+\x34\x37\x2e\x39\x37\x39\x20\x09\x22\x2f\x3e\x0d\x0a\x3c\x2f\x67\
+\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
+\x00\x00\x02\x21\
 \x00\
-\x00\x06\xe4\x78\x9c\xcd\x54\x4d\x6f\x9b\x40\x10\x3d\x13\x29\xff\
-\x61\xba\xb7\x4a\xec\x17\xc4\xd4\xa6\xa6\x51\xfd\x21\xcb\x52\x9a\
-\x58\x6a\xea\xaa\xa7\x0a\xc3\x16\x50\x28\x20\x58\xc0\xce\xaf\xef\
-\xee\x92\x54\x51\x95\xfa\x18\xfb\xb0\x33\xda\x79\x6f\xde\xbc\x65\
-\x24\xa6\xd7\xfb\xdf\x39\x74\xa2\x6e\xb2\xb2\x08\x10\x27\x0c\x81\
-\x28\xa2\x32\xce\x8a\x24\x40\xad\xfc\x85\xc7\xe8\xfa\xd3\xe5\xc5\
-\xf4\x1d\xc6\xb0\x12\x85\xa8\x43\x59\xd6\x3e\x7c\x8e\xcb\x9d\x80\
-\x75\x9e\xb7\x8d\x34\x25\xe0\x1e\x71\x08\xb7\xe1\xeb\x76\x05\xcb\
-\x7d\x55\xd6\x12\x36\x79\x9b\xe0\x75\x01\xc4\x14\xb7\xc3\x10\x1f\
-\x3c\xc2\x18\xcc\xda\x2c\x8f\x81\xbd\x07\xc0\xd8\xe8\x2f\xee\xe6\
-\xf7\x3f\x36\x4b\x68\xba\x04\x36\xdf\x66\x37\xeb\x39\x20\x4c\xe9\
-\x77\x77\x4e\xe9\xe2\x7e\x61\x24\x38\xe1\x94\x2e\x6f\x11\xa0\x54\
-\xca\xca\xa7\xb4\xef\x7b\xd2\xbb\xa4\xac\x13\xba\xaa\xc3\x2a\xcd\
-\xa2\x86\x2a\x22\xd5\x44\xd5\x44\x95\x18\xe7\x24\x96\x31\xd2\x33\
-\xb4\xf4\x8b\xa7\x72\x04\x59\x1c\xa0\x9b\xf0\x20\xea\x9f\xea\xa2\
-\xbe\x44\xd1\x04\xaf\x48\x3b\x8c\x31\x2d\xf5\x44\xf1\xf7\x79\x56\
-\x3c\xbc\x46\xe4\x93\xc9\x84\x1a\x54\x51\x03\xc4\xaa\x3d\x82\xc3\
-\x90\x2f\x2f\x2c\xe8\xb3\x58\xa6\x01\x1a\x71\x47\x03\xa9\xc8\x92\
-\x54\xfe\xbd\x76\x99\xe8\x67\xa5\xee\x02\x06\xaa\xa6\x0f\x82\x46\
-\x1e\x72\x11\x20\x51\x84\xbb\x5c\xe0\x5d\x18\x3d\x24\x75\xd9\x16\
-\xb1\x5f\x88\x1e\x5e\x30\x3f\x1a\x6f\x7e\x53\x85\x91\xa2\x57\xb5\
-\x68\x44\xdd\x09\xf3\xea\x44\x05\x6b\x88\xd6\xb4\x0a\x65\x0a\xea\
-\xd1\x5f\xb8\xc7\x6c\x3e\x72\x89\x1b\x31\xdb\x25\x1f\xb0\x6b\x7b\
-\x2a\xaa\xa3\x73\x8a\x47\x8c\x8c\x22\xac\x00\x9b\xe9\x22\x76\xf1\
-\x13\xdc\x0d\x10\x33\x98\xfb\xdc\xa0\x73\x6a\x00\xd3\xa2\x4b\xb6\
-\x51\xd4\x67\x6b\xe6\x3c\xea\x4f\x60\x59\xf4\x1f\x1f\xce\x78\x7c\
-\x16\x3e\xae\xb8\x77\x3a\x1f\x53\xfa\xff\x25\x39\x63\xfe\x26\xa6\
-\xcc\x9c\x23\x4b\x3a\x07\x1f\x7a\x49\x27\xf3\x71\x6c\x49\x57\x6c\
-\xf2\x26\xa6\xcc\x9c\x23\x4b\x3a\x07\x1f\x7a\x49\x27\xf3\x31\x2c\
-\xe9\x39\xaa\x7f\xb6\xca\x7f\x00\x99\x18\x96\x19\
-\x00\x00\x02\x7f\
+\x00\x07\xaf\x78\x9c\xdd\x55\x4d\x6f\x9c\x30\x10\xbd\xf7\x57\x4c\
+\xd5\x83\xdb\x03\xc6\xdf\x86\x28\x24\x52\x57\xea\x29\xbd\x25\x97\
+\xde\x68\xf0\x82\x9b\x5d\x58\x01\x5d\xb6\xff\xbe\x66\xd7\x60\x4a\
+\xaa\xf4\x92\x43\x15\x90\x30\xf3\x18\xbf\x99\xe7\xf1\x98\xeb\xdb\
+\xd3\x7e\x07\x47\xd3\x76\xb6\xa9\x33\x44\x31\x41\x60\xea\xc7\xa6\
+\xb0\x75\x99\xa1\x87\xfb\x2f\x51\x82\x6e\x6f\xde\x5d\xbf\x8f\x22\
+\xb8\xaf\x6c\x07\x5b\xbb\x33\x30\xe4\x1d\x94\xa6\x36\x6d\xde\x9b\
+\x02\xbe\xff\x82\xe2\x68\xbb\x63\xb9\x07\x86\x13\x88\x22\xe7\xef\
+\xac\x25\x2b\x45\xe0\xe2\xd4\x5d\x86\xaa\xbe\x3f\x5c\xc5\xf1\x30\
+\x0c\x78\xe0\xb8\x69\xcb\x98\x11\x42\x62\xe7\xef\x5d\xae\x4e\x3b\
+\x5b\x3f\xfd\xcd\x91\xa6\x69\x1a\x9f\xbf\x22\x18\x6c\xd1\x57\x19\
+\x52\x1c\x3b\x50\x1d\x7a\x04\x95\xb1\x65\xd5\x4f\x90\x1e\xa1\xa3\
+\x35\xc3\xe7\xe6\x94\x21\xa9\xb0\x20\xa9\x00\xc9\x71\x22\x13\x0e\
+\x7e\x9a\x1f\x35\x72\x09\x97\x60\x8b\x0c\x1d\xf2\xd2\xd0\x8b\xd9\
+\xb7\x79\xdd\x6d\x9b\x76\x9f\xa1\x7d\xde\xb7\xf6\xf4\x91\x38\x67\
+\xc5\x94\x00\x32\xde\x93\x31\x71\x53\xaa\x47\xf2\x4f\xe3\xec\x43\
+\xde\x57\xe0\xe8\xbe\x42\x8a\xb9\xd0\x82\x41\xc4\x38\x26\x94\xde\
+\x05\xc0\xbf\x3c\x47\x36\xcf\x90\x7f\x03\x8b\x39\x12\x53\x29\x29\
+\x05\x9a\x62\x29\x38\x85\x88\x62\x2d\x95\x54\xc0\x19\xa6\x6c\x36\
+\x37\x20\x04\x56\xa9\x4a\x83\x83\x14\x38\x49\x99\x0a\x14\x33\x30\
+\xe7\xfa\x02\x32\x09\x9c\x01\xae\xb0\xd2\x42\x6e\x02\x22\x08\x4e\
+\x94\x4a\x42\x64\xf7\xc2\x94\x14\x53\x6a\xde\xdc\x84\xdc\x27\x87\
+\x59\xdd\x44\x31\x03\x3e\xca\xdd\x7a\xa5\xbf\xa1\x71\xab\xee\x32\
+\xf4\x41\x6f\xc7\x1b\xc5\xae\x2e\x71\xf9\x8a\xa5\x0d\x42\x53\xac\
+\x29\x49\x97\x42\xdd\xbe\x22\x9c\x2d\x84\x6a\xcc\x09\xd5\xb3\xd0\
+\x8b\xb9\x14\xea\x1d\x82\x50\x4f\x11\x84\x4e\x51\x02\x22\xb1\xa4\
+\x89\x0c\x24\x17\x76\x1f\xe3\x3c\x2c\xaa\x7c\x81\x43\xd2\x7e\xf2\
+\x5a\xc5\xbc\x6e\x75\x53\x1b\x04\x5d\xdf\x36\x4f\xc6\xad\x22\x39\
+\x5f\x13\x10\xb9\x2e\x34\x8f\xf9\x21\x43\x6d\xf3\xb3\x2e\xfe\x80\
+\x7f\x34\xb6\x5e\xe3\x7b\xdb\x9b\x76\x67\xdd\xe0\x4e\x03\x82\x09\
+\xd7\x72\xfe\xe6\x5b\x99\xbb\x7c\x38\x65\xaf\x5f\xa7\xf5\x0a\xbe\
+\xe1\x1e\xf4\x0a\xdf\x5c\x09\x5f\x68\x35\xc9\x30\x4b\xf4\xe2\x4c\
+\x51\x0c\x8b\x84\xcf\x67\x8a\x37\x17\xad\x36\x39\x84\x6a\x79\x8a\
+\xf5\x46\xf9\x6f\x96\xf1\xf2\x70\xbf\xc8\x9b\xdf\xf9\x80\xe2\xe1\
+\
+\x00\x00\x02\xf7\
 \x3c\
 \x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
 \x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
@@ -1922,26 +2204,50 @@
 \x6b\x67\x72\x6f\x75\x6e\x64\x3a\x6e\x65\x77\x20\x30\x20\x30\x20\
 \x35\x31\x32\x20\x35\x31\x32\x3b\x22\x20\x78\x6d\x6c\x3a\x73\x70\
 \x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\
-\x0a\x3c\x70\x6f\x6c\x79\x67\x6f\x6e\x20\x70\x6f\x69\x6e\x74\x73\
-\x3d\x22\x32\x38\x38\x2c\x39\x36\x20\x33\x33\x37\x2e\x39\x2c\x31\
-\x34\x35\x2e\x39\x20\x32\x37\x34\x2c\x32\x30\x39\x2e\x37\x20\x32\
-\x37\x34\x2c\x32\x30\x39\x2e\x37\x20\x31\x34\x35\x2e\x39\x2c\x33\
-\x33\x37\x2e\x39\x20\x39\x36\x2c\x32\x38\x38\x20\x39\x36\x2c\x34\
-\x31\x36\x20\x32\x32\x34\x2c\x34\x31\x36\x20\x31\x37\x34\x2e\x31\
-\x2c\x33\x36\x36\x2e\x31\x20\x33\x35\x37\x2e\x34\x2c\x31\x38\x32\
-\x2e\x39\x20\x33\x36\x36\x2e\x31\x2c\x31\x37\x34\x2e\x31\x20\x0d\
-\x0a\x09\x34\x31\x36\x2c\x32\x32\x34\x20\x34\x31\x36\x2c\x39\x36\
-\x20\x22\x2f\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
-\x00\x00\x00\x6c\
+\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x34\x31\x37\x2e\x34\
+\x2c\x32\x32\x34\x48\x32\x38\x38\x56\x39\x34\x2e\x36\x63\x30\x2d\
+\x31\x36\x2e\x39\x2d\x31\x34\x2e\x33\x2d\x33\x30\x2e\x36\x2d\x33\
+\x32\x2d\x33\x30\x2e\x36\x63\x2d\x31\x37\x2e\x37\x2c\x30\x2d\x33\
+\x32\x2c\x31\x33\x2e\x37\x2d\x33\x32\x2c\x33\x30\x2e\x36\x56\x32\
+\x32\x34\x48\x39\x34\x2e\x36\x43\x37\x37\x2e\x37\x2c\x32\x32\x34\
+\x2c\x36\x34\x2c\x32\x33\x38\x2e\x33\x2c\x36\x34\x2c\x32\x35\x36\
+\x0d\x0a\x09\x63\x30\x2c\x31\x37\x2e\x37\x2c\x31\x33\x2e\x37\x2c\
+\x33\x32\x2c\x33\x30\x2e\x36\x2c\x33\x32\x48\x32\x32\x34\x76\x31\
+\x32\x39\x2e\x34\x63\x30\x2c\x31\x36\x2e\x39\x2c\x31\x34\x2e\x33\
+\x2c\x33\x30\x2e\x36\x2c\x33\x32\x2c\x33\x30\x2e\x36\x63\x31\x37\
+\x2e\x37\x2c\x30\x2c\x33\x32\x2d\x31\x33\x2e\x37\x2c\x33\x32\x2d\
+\x33\x30\x2e\x36\x56\x32\x38\x38\x68\x31\x32\x39\x2e\x34\x63\x31\
+\x36\x2e\x39\x2c\x30\x2c\x33\x30\x2e\x36\x2d\x31\x34\x2e\x33\x2c\
+\x33\x30\x2e\x36\x2d\x33\x32\x0d\x0a\x09\x43\x34\x34\x38\x2c\x32\
+\x33\x38\x2e\x33\x2c\x34\x33\x34\x2e\x33\x2c\x32\x32\x34\x2c\x34\
+\x31\x37\x2e\x34\x2c\x32\x32\x34\x7a\x22\x2f\x3e\x0d\x0a\x3c\x2f\
+\x73\x76\x67\x3e\x0d\x0a\
+\x00\x00\x01\x69\
 \x3c\
 \x73\x76\x67\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\
 \x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\
-\x30\x2f\x73\x76\x67\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\
-\x30\x20\x30\x20\x32\x30\x20\x32\x30\x22\x3e\x3c\x70\x61\x74\x68\
-\x20\x64\x3d\x22\x4d\x31\x38\x20\x31\x32\x76\x31\x48\x38\x76\x35\
-\x6c\x2d\x36\x2d\x36\x20\x36\x2d\x36\x76\x35\x68\x38\x56\x32\x68\
-\x32\x7a\x22\x2f\x3e\x3c\x2f\x73\x76\x67\x3e\
-\x00\x00\x04\x64\
+\x30\x2f\x73\x76\x67\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\x32\
+\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\x30\
+\x20\x35\x31\x32\x20\x35\x31\x32\x22\x3e\x3c\x67\x20\x74\x72\x61\
+\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\x32\
+\x34\x20\x30\x20\x30\x20\x32\x34\x20\x30\x20\x30\x29\x27\x3e\x3c\
+\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x34\x2e\x33\x34\x20\x31\x35\
+\x2e\x36\x36\x41\x37\x2e\x39\x37\x20\x37\x2e\x39\x37\x20\x30\x20\
+\x30\x20\x30\x20\x39\x20\x31\x37\x2e\x39\x34\x56\x31\x30\x48\x35\
+\x56\x38\x68\x34\x56\x35\x2e\x38\x33\x61\x33\x20\x33\x20\x30\x20\
+\x31\x20\x31\x20\x32\x20\x30\x56\x38\x68\x34\x76\x32\x68\x2d\x34\
+\x76\x37\x2e\x39\x34\x61\x37\x2e\x39\x37\x20\x37\x2e\x39\x37\x20\
+\x30\x20\x30\x20\x30\x20\x34\x2e\x36\x36\x2d\x32\x2e\x32\x38\x6c\
+\x2d\x31\x2e\x34\x32\x2d\x31\x2e\x34\x32\x68\x35\x2e\x36\x36\x6c\
+\x2d\x32\x2e\x38\x33\x20\x32\x2e\x38\x33\x61\x31\x30\x20\x31\x30\
+\x20\x30\x20\x30\x20\x31\x2d\x31\x34\x2e\x31\x34\x20\x30\x4c\x2e\
+\x31\x20\x31\x34\x2e\x32\x34\x68\x35\x2e\x36\x36\x6c\x2d\x31\x2e\
+\x34\x32\x20\x31\x2e\x34\x32\x7a\x4d\x31\x30\x20\x34\x61\x31\x20\
+\x31\x20\x30\x20\x31\x20\x30\x20\x30\x2d\x32\x20\x31\x20\x31\x20\
+\x30\x20\x30\x20\x30\x20\x30\x20\x32\x7a\x22\x2f\x3e\x3c\x2f\x67\
+\x3e\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x02\xfc\
 \x3c\
 \x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
 \x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
@@ -1973,94 +2279,26 @@
 \x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\
 \x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\
 \x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x67\x20\x69\x64\x3d\
-\x22\x49\x63\x6f\x6e\x22\x3e\x0d\x0a\x09\x3c\x67\x3e\x0d\x0a\x09\
-\x09\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x32\x35\x36\x2c\x31\
-\x37\x36\x63\x2d\x34\x34\x2e\x30\x30\x34\x2c\x30\x2d\x38\x30\x2e\
-\x30\x30\x31\x2c\x33\x36\x2d\x38\x30\x2e\x30\x30\x31\x2c\x38\x30\
-\x63\x30\x2c\x34\x34\x2e\x30\x30\x34\x2c\x33\x35\x2e\x39\x39\x37\
-\x2c\x38\x30\x2c\x38\x30\x2e\x30\x30\x31\x2c\x38\x30\x63\x34\x34\
-\x2e\x30\x30\x35\x2c\x30\x2c\x37\x39\x2e\x39\x39\x39\x2d\x33\x35\
-\x2e\x39\x39\x36\x2c\x37\x39\x2e\x39\x39\x39\x2d\x38\x30\x0d\x0a\
-\x09\x09\x09\x43\x33\x33\x35\x2e\x39\x39\x39\x2c\x32\x31\x32\x2c\
-\x33\x30\x30\x2e\x30\x30\x35\x2c\x31\x37\x36\x2c\x32\x35\x36\x2c\
-\x31\x37\x36\x7a\x20\x4d\x34\x34\x36\x2e\x39\x33\x38\x2c\x32\x33\
-\x34\x2e\x36\x36\x37\x63\x2d\x39\x2e\x36\x30\x35\x2d\x38\x38\x2e\
-\x35\x33\x31\x2d\x38\x31\x2e\x30\x37\x34\x2d\x31\x36\x30\x2d\x31\
-\x36\x39\x2e\x36\x30\x35\x2d\x31\x36\x39\x2e\x35\x39\x39\x56\x33\
-\x32\x68\x2d\x34\x32\x2e\x36\x36\x36\x76\x33\x33\x2e\x30\x36\x37\
-\x0d\x0a\x09\x09\x09\x63\x2d\x38\x38\x2e\x35\x33\x31\x2c\x39\x2e\
-\x35\x39\x39\x2d\x31\x36\x30\x2c\x38\x31\x2e\x30\x36\x38\x2d\x31\
-\x36\x39\x2e\x36\x30\x34\x2c\x31\x36\x39\x2e\x35\x39\x39\x48\x33\
-\x32\x76\x34\x32\x2e\x36\x36\x37\x68\x33\x33\x2e\x30\x36\x32\x63\
-\x39\x2e\x36\x30\x34\x2c\x38\x38\x2e\x35\x33\x31\x2c\x38\x31\x2e\
-\x30\x37\x32\x2c\x31\x36\x30\x2c\x31\x36\x39\x2e\x36\x30\x34\x2c\
-\x31\x36\x39\x2e\x36\x30\x34\x56\x34\x38\x30\x68\x34\x32\x2e\x36\
-\x36\x36\x76\x2d\x33\x33\x2e\x30\x36\x32\x0d\x0a\x09\x09\x09\x63\
-\x38\x38\x2e\x35\x33\x31\x2d\x39\x2e\x36\x30\x34\x2c\x31\x36\x30\
-\x2d\x38\x31\x2e\x30\x37\x33\x2c\x31\x36\x39\x2e\x36\x30\x35\x2d\
-\x31\x36\x39\x2e\x36\x30\x34\x48\x34\x38\x30\x76\x2d\x34\x32\x2e\
-\x36\x36\x37\x48\x34\x34\x36\x2e\x39\x33\x38\x7a\x20\x4d\x32\x35\
-\x36\x2c\x34\x30\x35\x2e\x33\x33\x33\x63\x2d\x38\x32\x2e\x31\x33\
-\x37\x2c\x30\x2d\x31\x34\x39\x2e\x33\x33\x34\x2d\x36\x37\x2e\x31\
-\x39\x38\x2d\x31\x34\x39\x2e\x33\x33\x34\x2d\x31\x34\x39\x2e\x33\
-\x33\x33\x0d\x0a\x09\x09\x09\x63\x30\x2d\x38\x32\x2e\x31\x33\x36\
-\x2c\x36\x37\x2e\x31\x39\x37\x2d\x31\x34\x39\x2e\x33\x33\x33\x2c\
-\x31\x34\x39\x2e\x33\x33\x34\x2d\x31\x34\x39\x2e\x33\x33\x33\x63\
-\x38\x32\x2e\x31\x33\x35\x2c\x30\x2c\x31\x34\x39\x2e\x33\x33\x32\
-\x2c\x36\x37\x2e\x31\x39\x38\x2c\x31\x34\x39\x2e\x33\x33\x32\x2c\
-\x31\x34\x39\x2e\x33\x33\x33\x43\x34\x30\x35\x2e\x33\x33\x32\x2c\
-\x33\x33\x38\x2e\x31\x33\x35\x2c\x33\x33\x38\x2e\x31\x33\x35\x2c\
-\x34\x30\x35\x2e\x33\x33\x33\x2c\x32\x35\x36\x2c\x34\x30\x35\x2e\
-\x33\x33\x33\x7a\x0d\x0a\x09\x09\x09\x22\x2f\x3e\x0d\x0a\x09\x3c\
-\x2f\x67\x3e\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\
-\x3e\x0d\x0a\
-\x00\x00\x02\xa1\
+\x22\x49\x63\x6f\x6e\x5f\x32\x30\x5f\x22\x3e\x0d\x0a\x09\x3c\x67\
+\x3e\x0d\x0a\x09\x09\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x32\
+\x35\x36\x2c\x34\x38\x43\x31\x34\x31\x2e\x36\x30\x31\x2c\x34\x38\
+\x2c\x34\x38\x2c\x31\x34\x31\x2e\x36\x30\x31\x2c\x34\x38\x2c\x32\
+\x35\x36\x73\x39\x33\x2e\x36\x30\x31\x2c\x32\x30\x38\x2c\x32\x30\
+\x38\x2c\x32\x30\x38\x73\x32\x30\x38\x2d\x39\x33\x2e\x36\x30\x31\
+\x2c\x32\x30\x38\x2d\x32\x30\x38\x53\x33\x37\x30\x2e\x33\x39\x39\
+\x2c\x34\x38\x2c\x32\x35\x36\x2c\x34\x38\x7a\x20\x4d\x32\x35\x36\
+\x2c\x34\x32\x32\x2e\x33\x39\x39\x0d\x0a\x09\x09\x09\x63\x2d\x39\
+\x31\x2e\x35\x31\x38\x2c\x30\x2d\x31\x36\x36\x2e\x33\x39\x39\x2d\
+\x37\x34\x2e\x38\x38\x32\x2d\x31\x36\x36\x2e\x33\x39\x39\x2d\x31\
+\x36\x36\x2e\x33\x39\x39\x53\x31\x36\x34\x2e\x34\x38\x32\x2c\x38\
+\x39\x2e\x36\x2c\x32\x35\x36\x2c\x38\x39\x2e\x36\x53\x34\x32\x32\
+\x2e\x34\x2c\x31\x36\x34\x2e\x34\x38\x32\x2c\x34\x32\x32\x2e\x34\
+\x2c\x32\x35\x36\x53\x33\x34\x37\x2e\x35\x31\x38\x2c\x34\x32\x32\
+\x2e\x33\x39\x39\x2c\x32\x35\x36\x2c\x34\x32\x32\x2e\x33\x39\x39\
+\x7a\x22\x2f\x3e\x0d\x0a\x09\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x67\
+\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
+\x00\x00\x04\xd5\
 \x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
-\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
-\x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
-\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
-\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x38\x2e\x31\x2e\x31\x2c\
-\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
-\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
-\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
-\x20\x20\x2d\x2d\x3e\x0d\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\
-\x20\x73\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\
-\x57\x33\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\
-\x2f\x2f\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
-\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\
-\x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\
-\x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0d\x0a\x3c\x73\x76\x67\x20\
-\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
-\x3d\x22\x53\x61\x76\x65\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
-\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
-\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
-\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
-\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
-\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x35\x31\x32\x70\x78\x22\x20\
-\x79\x3d\x22\x35\x31\x32\x70\x78\x22\x0d\x0a\x09\x20\x76\x69\x65\
-\x77\x42\x6f\x78\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\
-\x32\x22\x20\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\
-\x6f\x75\x6e\x64\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\
-\x32\x20\x35\x31\x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\
-\x3d\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x67\
-\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\x74\x72\
-\x69\x78\x28\x32\x34\x20\x30\x20\x30\x20\x32\x34\x20\x30\x20\x30\
-\x29\x27\x3e\x0d\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x31\
-\x35\x2e\x31\x37\x33\x2c\x32\x48\x34\x43\x32\x2e\x38\x39\x39\x2c\
-\x32\x2c\x32\x2c\x32\x2e\x39\x2c\x32\x2c\x34\x76\x31\x32\x63\x30\
-\x2c\x31\x2e\x31\x2c\x30\x2e\x38\x39\x39\x2c\x32\x2c\x32\x2c\x32\
-\x68\x31\x32\x63\x31\x2e\x31\x30\x31\x2c\x30\x2c\x32\x2d\x30\x2e\
-\x39\x2c\x32\x2d\x32\x56\x35\x2e\x31\x32\x37\x4c\x31\x35\x2e\x31\
-\x37\x33\x2c\x32\x7a\x20\x4d\x31\x34\x2c\x38\x63\x30\x2c\x30\x2e\
-\x35\x34\x39\x2d\x30\x2e\x34\x35\x2c\x31\x2d\x31\x2c\x31\x48\x37\
-\x0d\x0a\x09\x43\x36\x2e\x34\x35\x2c\x39\x2c\x36\x2c\x38\x2e\x35\
-\x34\x39\x2c\x36\x2c\x38\x56\x33\x68\x38\x56\x38\x7a\x20\x4d\x31\
-\x33\x2c\x34\x68\x2d\x32\x76\x34\x68\x32\x56\x34\x7a\x22\x2f\x3e\
-\x0d\x0a\x3c\x2f\x67\x3e\x0d\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
-\
-\x00\x00\x04\x1c\
-\x3c\
 \x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\
 \x30\x27\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x27\x55\x54\x46\
 \x2d\x38\x27\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x54\x68\x69\x73\x20\
@@ -2081,302 +2319,64 @@
 \x67\x65\x31\x27\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\
 \x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\x39\x39\x36\
 \x32\x36\x34\x20\x30\x20\x30\x20\x30\x2e\x39\x39\x36\x32\x36\x34\
-\x20\x35\x36\x2e\x34\x30\x39\x34\x20\x31\x31\x37\x2e\x38\x35\x38\
-\x29\x27\x3e\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x27\x4d\x20\x32\
-\x2e\x30\x30\x37\x35\x20\x2d\x32\x2e\x30\x30\x37\x35\x4c\x20\x36\
-\x32\x2e\x32\x33\x32\x35\x20\x2d\x32\x2e\x30\x30\x37\x35\x4c\x20\
-\x36\x32\x2e\x32\x33\x32\x35\x20\x2d\x36\x32\x2e\x32\x33\x32\x35\
-\x4c\x20\x32\x2e\x30\x30\x37\x35\x20\x2d\x36\x32\x2e\x32\x33\x32\
-\x35\x4c\x20\x32\x2e\x30\x30\x37\x35\x20\x2d\x32\x2e\x30\x30\x37\
-\x35\x5a\x27\x20\x66\x69\x6c\x6c\x3d\x27\x6e\x6f\x6e\x65\x27\x20\
-\x73\x74\x72\x6f\x6b\x65\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\
-\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3d\
-\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\
-\x69\x6e\x65\x6a\x6f\x69\x6e\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\
-\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\
-\x74\x3d\x27\x31\x30\x2e\x30\x33\x37\x35\x27\x20\x73\x74\x72\x6f\
-\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x27\x34\x2e\x30\x31\x35\x27\
-\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\
-\x66\x6f\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\x39\
-\x39\x36\x32\x36\x34\x20\x30\x20\x30\x20\x30\x2e\x39\x39\x36\x32\
-\x36\x34\x20\x35\x36\x2e\x34\x30\x39\x34\x20\x31\x31\x37\x2e\x38\
-\x35\x38\x29\x27\x3e\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x27\x4d\
-\x20\x32\x2e\x30\x30\x37\x35\x20\x2d\x33\x32\x2e\x31\x32\x4c\x20\
-\x36\x32\x2e\x32\x33\x32\x35\x20\x2d\x33\x32\x2e\x31\x32\x27\x20\
-\x66\x69\x6c\x6c\x3d\x27\x6e\x6f\x6e\x65\x27\x20\x73\x74\x72\x6f\
-\x6b\x65\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\x20\x73\x74\x72\
-\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3d\x27\x72\x6f\x75\
-\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\
-\x6f\x69\x6e\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\
-\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3d\x27\x31\
-\x30\x2e\x30\x33\x37\x35\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x77\
-\x69\x64\x74\x68\x3d\x27\x34\x2e\x30\x31\x35\x27\x2f\x3e\x0a\x3c\
-\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\
-\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\x39\x39\x36\x32\x36\
-\x34\x20\x30\x20\x30\x20\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x35\
-\x36\x2e\x34\x30\x39\x34\x20\x31\x31\x37\x2e\x38\x35\x38\x29\x27\
-\x3e\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x27\x4d\x20\x33\x32\x2e\
-\x31\x32\x20\x2d\x32\x2e\x30\x30\x37\x35\x4c\x20\x33\x32\x2e\x31\
-\x32\x20\x2d\x36\x32\x2e\x32\x33\x32\x35\x27\x20\x66\x69\x6c\x6c\
-\x3d\x27\x6e\x6f\x6e\x65\x27\x20\x73\x74\x72\x6f\x6b\x65\x3d\x27\
-\x23\x30\x30\x30\x30\x30\x30\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\
-\x6c\x69\x6e\x65\x63\x61\x70\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\
-\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3d\
-\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6d\
-\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3d\x27\x31\x30\x2e\x30\x33\
-\x37\x35\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\
-\x3d\x27\x34\x2e\x30\x31\x35\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\
-\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\
-\x00\x00\x05\xca\
-\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
-\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
-\x2d\x38\x22\x3f\x3e\x0d\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\
-\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\
-\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\
-\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\
-\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\
-\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\
-\x20\x20\x2d\x2d\x3e\x0d\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\
-\x20\x73\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\
-\x57\x33\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\
-\x2f\x2f\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
-\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\
-\x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\
-\x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0d\x0a\x3c\x73\x76\x67\x20\
-\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\
-\x3d\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\
-\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\
-\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\
-\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\
-\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\
-\x39\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\
-\x20\x79\x3d\x22\x30\x70\x78\x22\x0d\x0a\x09\x20\x77\x69\x64\x74\
-\x68\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\
-\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\
-\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\
-\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\
-\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\
-\x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\
-\x65\x73\x65\x72\x76\x65\x22\x3e\x0d\x0a\x3c\x70\x61\x74\x68\x20\
-\x64\x3d\x22\x4d\x34\x35\x30\x2e\x36\x37\x39\x2c\x32\x37\x33\x2e\
-\x35\x63\x2d\x31\x34\x2e\x35\x38\x35\x2d\x31\x34\x2e\x35\x37\x37\
-\x2d\x33\x36\x2e\x30\x35\x34\x2d\x31\x35\x2e\x38\x39\x2d\x35\x30\
-\x2e\x36\x33\x39\x2d\x31\x2e\x33\x31\x32\x6c\x2d\x34\x31\x2e\x36\
-\x38\x37\x2c\x34\x31\x2e\x36\x36\x34\x63\x2d\x31\x30\x2e\x38\x35\
-\x32\x2c\x31\x30\x2e\x38\x33\x36\x2d\x32\x33\x2e\x39\x33\x2c\x31\
-\x30\x2e\x38\x35\x39\x2d\x33\x31\x2e\x35\x36\x34\x2c\x31\x2e\x38\
-\x35\x32\x0d\x0a\x09\x63\x2d\x35\x2e\x30\x35\x37\x2d\x35\x2e\x39\
-\x36\x38\x2d\x33\x2e\x30\x36\x31\x2d\x32\x34\x2e\x33\x37\x34\x2d\
-\x31\x2e\x36\x34\x34\x2d\x33\x36\x2e\x30\x34\x39\x6c\x32\x30\x2e\
-\x39\x30\x37\x2d\x31\x37\x31\x2e\x38\x34\x39\x63\x31\x2e\x38\x36\
-\x37\x2d\x31\x35\x2e\x33\x35\x33\x2d\x39\x2e\x30\x37\x2d\x33\x30\
-\x2e\x31\x38\x35\x2d\x32\x34\x2e\x34\x33\x2d\x33\x32\x2e\x30\x35\
-\x31\x0d\x0a\x09\x63\x2d\x31\x35\x2e\x33\x35\x38\x2d\x31\x2e\x38\
-\x36\x37\x2d\x32\x39\x2e\x33\x32\x32\x2c\x39\x2e\x39\x33\x39\x2d\
-\x33\x31\x2e\x31\x39\x31\x2c\x32\x35\x2e\x32\x38\x39\x4c\x32\x36\
-\x37\x2e\x33\x37\x2c\x32\x33\x36\x2e\x30\x32\x31\x63\x2d\x31\x2e\
-\x32\x30\x35\x2c\x33\x2e\x33\x35\x38\x2d\x33\x2e\x37\x39\x2c\x33\
-\x2e\x39\x33\x38\x2d\x34\x2e\x30\x38\x31\x2d\x30\x2e\x35\x38\x32\
-\x4c\x32\x35\x35\x2e\x34\x34\x2c\x36\x30\x0d\x0a\x09\x63\x30\x2d\
-\x31\x35\x2e\x34\x36\x35\x2d\x31\x32\x2e\x35\x34\x32\x2d\x32\x38\
-\x2d\x32\x38\x2e\x30\x31\x34\x2d\x32\x38\x63\x2d\x31\x35\x2e\x34\
-\x37\x33\x2c\x30\x2d\x32\x38\x2e\x30\x31\x35\x2c\x31\x32\x2e\x35\
-\x33\x35\x2d\x32\x38\x2e\x30\x31\x35\x2c\x32\x38\x6c\x2d\x30\x2e\
-\x35\x35\x32\x2c\x31\x37\x36\x2e\x37\x35\x32\x63\x30\x2e\x31\x34\
-\x36\x2c\x32\x2e\x30\x34\x2d\x31\x2e\x36\x30\x34\x2c\x32\x2e\x36\
-\x32\x34\x2d\x31\x2e\x39\x32\x2c\x30\x2e\x32\x39\x34\x4c\x31\x37\
-\x32\x2e\x30\x31\x36\x2c\x39\x39\x2e\x30\x37\x37\x0d\x0a\x09\x63\
-\x2d\x32\x2e\x37\x35\x2d\x31\x35\x2e\x32\x31\x39\x2d\x31\x37\x2e\
-\x33\x32\x33\x2d\x32\x36\x2e\x32\x30\x33\x2d\x33\x32\x2e\x35\x34\
-\x38\x2d\x32\x33\x2e\x34\x35\x33\x63\x2d\x31\x35\x2e\x32\x32\x37\
-\x2c\x32\x2e\x37\x34\x38\x2d\x32\x35\x2e\x33\x33\x39\x2c\x31\x38\
-\x2e\x31\x38\x37\x2d\x32\x32\x2e\x35\x39\x31\x2c\x33\x33\x2e\x34\
-\x30\x33\x6c\x32\x32\x2e\x31\x39\x33\x2c\x31\x36\x31\x2e\x34\x35\
-\x35\x0d\x0a\x09\x63\x30\x2e\x30\x32\x33\x2c\x32\x2e\x38\x37\x32\
-\x2d\x30\x2e\x39\x34\x31\x2c\x34\x2e\x35\x31\x33\x2d\x32\x2e\x33\
-\x30\x38\x2c\x30\x2e\x38\x33\x31\x6c\x2d\x33\x33\x2e\x31\x30\x39\
-\x2d\x38\x38\x2e\x35\x31\x37\x63\x2d\x35\x2e\x31\x38\x2d\x31\x34\
-\x2e\x35\x37\x32\x2d\x32\x31\x2e\x31\x39\x36\x2d\x32\x33\x2e\x30\
-\x36\x35\x2d\x33\x35\x2e\x37\x37\x36\x2d\x31\x37\x2e\x38\x38\x39\
-\x0d\x0a\x09\x63\x2d\x31\x34\x2e\x35\x37\x39\x2c\x35\x2e\x31\x37\
-\x37\x2d\x32\x32\x2e\x32\x30\x31\x2c\x32\x32\x2e\x30\x36\x31\x2d\
-\x31\x37\x2e\x30\x32\x33\x2c\x33\x36\x2e\x36\x33\x31\x6c\x35\x38\
-\x2e\x30\x34\x32\x2c\x31\x38\x39\x2e\x36\x32\x35\x63\x30\x2e\x33\
-\x30\x33\x2c\x31\x2e\x30\x34\x36\x2c\x30\x2e\x36\x32\x34\x2c\x32\
-\x2e\x30\x38\x35\x2c\x30\x2e\x39\x35\x33\x2c\x33\x2e\x31\x31\x38\
-\x6c\x30\x2e\x31\x32\x31\x2c\x30\x2e\x33\x39\x0d\x0a\x09\x63\x30\
-\x2e\x30\x31\x31\x2c\x30\x2e\x30\x33\x31\x2c\x30\x2e\x30\x32\x35\
-\x2c\x30\x2e\x30\x35\x38\x2c\x30\x2e\x30\x33\x35\x2c\x30\x2e\x30\
-\x38\x38\x43\x31\x32\x36\x2e\x30\x37\x39\x2c\x34\x34\x34\x2e\x32\
-\x33\x33\x2c\x31\x37\x32\x2e\x35\x37\x2c\x34\x38\x30\x2c\x32\x32\
-\x37\x2e\x34\x32\x37\x2c\x34\x38\x30\x63\x33\x35\x2e\x31\x31\x36\
-\x2c\x30\x2c\x37\x31\x2e\x35\x39\x31\x2d\x31\x32\x2e\x33\x37\x38\
-\x2c\x39\x39\x2e\x33\x35\x37\x2d\x33\x33\x2e\x36\x37\x32\x0d\x0a\
-\x09\x63\x30\x2e\x30\x30\x31\x2c\x30\x2c\x30\x2e\x30\x30\x33\x2d\
-\x30\x2e\x30\x30\x32\x2c\x30\x2e\x30\x30\x33\x2d\x30\x2e\x30\x30\
-\x32\x63\x32\x39\x2e\x39\x39\x2d\x31\x38\x2e\x30\x35\x31\x2c\x31\
-\x32\x36\x2e\x30\x37\x31\x2d\x31\x32\x31\x2e\x33\x34\x37\x2c\x31\
-\x32\x36\x2e\x30\x37\x31\x2d\x31\x32\x31\x2e\x33\x34\x37\x43\x34\
-\x36\x37\x2e\x34\x34\x35\x2c\x33\x31\x30\x2e\x34\x30\x32\x2c\x34\
-\x36\x35\x2e\x32\x36\x36\x2c\x32\x38\x38\x2e\x30\x38\x2c\x34\x35\
-\x30\x2e\x36\x37\x39\x2c\x32\x37\x33\x2e\x35\x7a\x22\x2f\x3e\x0d\
-\x0a\x3c\x2f\x73\x76\x67\x3e\x0d\x0a\
-\x00\x00\x03\x7c\
-\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\
-\x30\x27\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x27\x55\x54\x46\
-\x2d\x38\x27\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x54\x68\x69\x73\x20\
-\x66\x69\x6c\x65\x20\x77\x61\x73\x20\x67\x65\x6e\x65\x72\x61\x74\
-\x65\x64\x20\x62\x79\x20\x64\x76\x69\x73\x76\x67\x6d\x20\x32\x2e\
-\x38\x20\x2d\x2d\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\x73\x69\
-\x6f\x6e\x3d\x27\x31\x2e\x31\x27\x20\x78\x6d\x6c\x6e\x73\x3d\x27\
-\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\
-\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x27\x20\x78\x6d\x6c\x6e\
-\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x27\x68\x74\x74\x70\x3a\x2f\x2f\
-\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\
-\x78\x6c\x69\x6e\x6b\x27\x20\x77\x69\x64\x74\x68\x3d\x27\x36\x33\
-\x2e\x39\x39\x39\x36\x70\x74\x27\x20\x68\x65\x69\x67\x68\x74\x3d\
-\x27\x36\x33\x2e\x39\x39\x39\x37\x70\x74\x27\x20\x76\x69\x65\x77\
-\x42\x6f\x78\x3d\x27\x35\x36\x2e\x34\x30\x39\x34\x20\x35\x33\x2e\
-\x38\x35\x38\x33\x20\x36\x33\x2e\x39\x39\x39\x36\x20\x36\x33\x2e\
-\x39\x39\x39\x37\x27\x3e\x0a\x3c\x67\x20\x69\x64\x3d\x27\x70\x61\
-\x67\x65\x31\x27\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\
-\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\x39\x39\x36\
-\x32\x36\x34\x20\x30\x20\x30\x20\x30\x2e\x39\x39\x36\x32\x36\x34\
-\x20\x35\x36\x2e\x34\x30\x39\x34\x20\x31\x31\x37\x2e\x38\x35\x38\
-\x29\x27\x3e\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x27\x4d\x20\x32\
-\x2e\x30\x30\x37\x35\x20\x2d\x32\x2e\x30\x30\x37\x35\x4c\x20\x36\
-\x32\x2e\x32\x33\x32\x35\x20\x2d\x32\x2e\x30\x30\x37\x35\x4c\x20\
-\x36\x32\x2e\x32\x33\x32\x35\x20\x2d\x36\x32\x2e\x32\x33\x32\x35\
-\x4c\x20\x32\x2e\x30\x30\x37\x35\x20\x2d\x36\x32\x2e\x32\x33\x32\
-\x35\x4c\x20\x32\x2e\x30\x30\x37\x35\x20\x2d\x32\x2e\x30\x30\x37\
-\x35\x5a\x27\x20\x66\x69\x6c\x6c\x3d\x27\x6e\x6f\x6e\x65\x27\x20\
-\x73\x74\x72\x6f\x6b\x65\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\
-\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3d\
-\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\
-\x69\x6e\x65\x6a\x6f\x69\x6e\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\
-\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\
-\x74\x3d\x27\x31\x30\x2e\x30\x33\x37\x35\x27\x20\x73\x74\x72\x6f\
-\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x27\x34\x2e\x30\x31\x35\x27\
-\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\
-\x66\x6f\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\x39\
-\x39\x36\x32\x36\x34\x20\x30\x20\x30\x20\x30\x2e\x39\x39\x36\x32\
-\x36\x34\x20\x35\x36\x2e\x34\x30\x39\x34\x20\x31\x31\x37\x2e\x38\
-\x35\x38\x29\x27\x3e\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x27\x4d\
-\x20\x34\x37\x2e\x31\x37\x36\x32\x20\x2d\x33\x32\x2e\x31\x32\x43\
-\x20\x34\x37\x2e\x31\x37\x36\x32\x20\x2d\x34\x30\x2e\x34\x33\x35\
-\x33\x20\x34\x30\x2e\x34\x33\x35\x33\x20\x2d\x34\x37\x2e\x31\x37\
-\x36\x32\x20\x33\x32\x2e\x31\x32\x20\x2d\x34\x37\x2e\x31\x37\x36\
-\x32\x43\x20\x32\x33\x2e\x38\x30\x34\x37\x20\x2d\x34\x37\x2e\x31\
-\x37\x36\x32\x20\x31\x37\x2e\x30\x36\x33\x37\x20\x2d\x34\x30\x2e\
-\x34\x33\x35\x33\x20\x31\x37\x2e\x30\x36\x33\x37\x20\x2d\x33\x32\
-\x2e\x31\x32\x43\x20\x31\x37\x2e\x30\x36\x33\x37\x20\x2d\x32\x33\
-\x2e\x38\x30\x34\x37\x20\x32\x33\x2e\x38\x30\x34\x37\x20\x2d\x31\
-\x37\x2e\x30\x36\x33\x37\x20\x33\x32\x2e\x31\x32\x20\x2d\x31\x37\
-\x2e\x30\x36\x33\x37\x43\x20\x34\x30\x2e\x34\x33\x35\x33\x20\x2d\
-\x31\x37\x2e\x30\x36\x33\x37\x20\x34\x37\x2e\x31\x37\x36\x32\x20\
-\x2d\x32\x33\x2e\x38\x30\x34\x37\x20\x34\x37\x2e\x31\x37\x36\x32\
-\x20\x2d\x33\x32\x2e\x31\x32\x5a\x27\x20\x66\x69\x6c\x6c\x3d\x27\
-\x23\x30\x30\x30\x30\x30\x30\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\
-\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\
-\x00\x00\x01\x1c\
-\x3c\
-\x73\x76\x67\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\
-\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\
-\x30\x2f\x73\x76\x67\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x35\x31\
-\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\x32\
-\x70\x78\x22\x0a\x20\x20\x20\x20\x20\x76\x69\x65\x77\x42\x6f\x78\
-\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x3e\x0a\
-\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\
-\x74\x72\x69\x78\x28\x34\x38\x20\x30\x20\x30\x20\x34\x38\x20\x34\
-\x38\x20\x34\x38\x29\x27\x3e\x0a\x20\x20\x3c\x70\x61\x74\x68\x20\
-\x64\x3d\x22\x4d\x30\x20\x30\x76\x32\x68\x2e\x35\x63\x30\x2d\x2e\
-\x35\x35\x2e\x34\x35\x2d\x31\x20\x31\x2d\x31\x68\x31\x2e\x35\x76\
-\x35\x2e\x35\x63\x30\x20\x2e\x32\x38\x2d\x2e\x32\x32\x2e\x35\x2d\
-\x2e\x35\x2e\x35\x68\x2d\x2e\x35\x76\x31\x68\x34\x76\x2d\x31\x68\
-\x2d\x2e\x35\x63\x2d\x2e\x32\x38\x20\x30\x2d\x2e\x35\x2d\x2e\x32\
-\x32\x2d\x2e\x35\x2d\x2e\x35\x76\x2d\x35\x2e\x35\x68\x31\x2e\x35\
-\x63\x2e\x35\x35\x20\x30\x20\x31\x20\x2e\x34\x35\x20\x31\x20\x31\
-\x68\x2e\x35\x76\x2d\x32\x68\x2d\x38\x7a\x22\x20\x2f\x3e\x0a\x3c\
-\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
-\x00\x00\x04\xa2\
-\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\
-\x30\x27\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x27\x55\x54\x46\
-\x2d\x38\x27\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x54\x68\x69\x73\x20\
-\x66\x69\x6c\x65\x20\x77\x61\x73\x20\x67\x65\x6e\x65\x72\x61\x74\
-\x65\x64\x20\x62\x79\x20\x64\x76\x69\x73\x76\x67\x6d\x20\x32\x2e\
-\x38\x20\x2d\x2d\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\x73\x69\
-\x6f\x6e\x3d\x27\x31\x2e\x31\x27\x20\x78\x6d\x6c\x6e\x73\x3d\x27\
-\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\
-\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x27\x20\x78\x6d\x6c\x6e\
-\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x27\x68\x74\x74\x70\x3a\x2f\x2f\
-\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\
-\x78\x6c\x69\x6e\x6b\x27\x20\x77\x69\x64\x74\x68\x3d\x27\x36\x33\
-\x2e\x39\x39\x39\x36\x70\x74\x27\x20\x68\x65\x69\x67\x68\x74\x3d\
-\x27\x36\x33\x2e\x39\x39\x39\x37\x70\x74\x27\x20\x76\x69\x65\x77\
-\x42\x6f\x78\x3d\x27\x35\x36\x2e\x34\x30\x39\x34\x20\x35\x33\x2e\
-\x38\x35\x38\x33\x20\x36\x33\x2e\x39\x39\x39\x36\x20\x36\x33\x2e\
-\x39\x39\x39\x37\x27\x3e\x0a\x3c\x67\x20\x69\x64\x3d\x27\x70\x61\
-\x67\x65\x31\x27\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\
-\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\x39\x39\x36\
-\x32\x36\x34\x20\x30\x20\x30\x20\x30\x2e\x39\x39\x36\x32\x36\x34\
 \x20\x35\x38\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\x35\x38\
 \x29\x27\x3e\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x27\x4d\x20\x33\
-\x2e\x39\x35\x37\x33\x35\x20\x2d\x33\x32\x2e\x31\x32\x43\x20\x34\
-\x2e\x31\x35\x35\x35\x36\x20\x2d\x33\x39\x2e\x32\x37\x34\x35\x20\
-\x36\x2e\x39\x38\x34\x37\x33\x20\x2d\x34\x36\x2e\x31\x30\x34\x37\
+\x2e\x39\x35\x37\x33\x35\x20\x2d\x33\x32\x2e\x31\x32\x43\x20\x32\
+\x2e\x32\x38\x39\x32\x32\x20\x2d\x33\x39\x2e\x33\x31\x31\x33\x20\
+\x36\x2e\x33\x36\x37\x30\x32\x20\x2d\x34\x36\x2e\x32\x33\x38\x36\
 \x20\x31\x31\x2e\x39\x30\x33\x36\x20\x2d\x35\x31\x2e\x33\x30\x33\
-\x39\x43\x20\x32\x37\x2e\x34\x34\x31\x31\x20\x2d\x36\x37\x2e\x37\
-\x32\x36\x39\x20\x35\x33\x2e\x33\x30\x32\x31\x20\x2d\x36\x31\x2e\
-\x35\x34\x30\x35\x20\x35\x36\x2e\x31\x35\x32\x33\x20\x2d\x34\x32\
-\x2e\x35\x30\x32\x32\x43\x20\x35\x37\x2e\x36\x32\x37\x20\x2d\x33\
-\x32\x2e\x36\x35\x31\x39\x20\x35\x30\x2e\x35\x38\x35\x36\x20\x2d\
-\x32\x33\x2e\x35\x36\x32\x31\x20\x34\x30\x2e\x36\x37\x39\x34\x20\
-\x2d\x32\x32\x2e\x35\x32\x38\x31\x27\x20\x66\x69\x6c\x6c\x3d\x27\
-\x6e\x6f\x6e\x65\x27\x20\x73\x74\x72\x6f\x6b\x65\x3d\x27\x23\x30\
-\x30\x30\x30\x30\x30\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\
-\x6e\x65\x63\x61\x70\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\
-\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3d\x27\x72\
-\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\
-\x65\x72\x6c\x69\x6d\x69\x74\x3d\x27\x31\x30\x2e\x30\x33\x37\x35\
-\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x27\
-\x32\x2e\x35\x30\x39\x33\x37\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\
-\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\
-\x74\x72\x69\x78\x28\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x30\x20\
-\x30\x20\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x35\x38\x2e\x34\x36\
-\x36\x39\x20\x31\x31\x37\x2e\x38\x35\x38\x29\x27\x3e\x0a\x3c\x63\
-\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\x33\x2e\x39\x35\x37\x33\
-\x35\x27\x20\x63\x79\x3d\x27\x2d\x33\x32\x2e\x31\x32\x27\x20\x66\
-\x69\x6c\x6c\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\x20\x72\x3d\
-\x27\x36\x2e\x30\x32\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\
-\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\
-\x74\x72\x69\x78\x28\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x30\x20\
-\x30\x20\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x35\x38\x2e\x34\x36\
-\x36\x39\x20\x31\x31\x37\x2e\x38\x35\x38\x29\x27\x3e\x0a\x3c\x63\
-\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\x31\x31\x2e\x39\x30\x33\
-\x36\x27\x20\x63\x79\x3d\x27\x2d\x35\x31\x2e\x33\x30\x33\x39\x27\
-\x20\x66\x69\x6c\x6c\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\x20\
-\x72\x3d\x27\x36\x2e\x30\x32\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\x67\
-\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\
-\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\x39\x39\x36\x32\x36\x34\x20\
-\x30\x20\x30\x20\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x35\x38\x2e\
-\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\x35\x38\x29\x27\x3e\x0a\
-\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\x35\x36\x2e\x31\
-\x35\x32\x33\x27\x20\x63\x79\x3d\x27\x2d\x34\x32\x2e\x35\x30\x32\
-\x32\x27\x20\x66\x69\x6c\x6c\x3d\x27\x23\x30\x30\x30\x30\x30\x30\
-\x27\x20\x72\x3d\x27\x36\x2e\x30\x32\x32\x35\x27\x2f\x3e\x0a\x3c\
-\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\
-\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\x39\x39\x36\x32\x36\
-\x34\x20\x30\x20\x30\x20\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x35\
-\x38\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\x35\x38\x29\x27\
-\x3e\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\x34\x30\
-\x2e\x36\x37\x39\x34\x27\x20\x63\x79\x3d\x27\x2d\x32\x32\x2e\x35\
-\x32\x38\x31\x27\x20\x66\x69\x6c\x6c\x3d\x27\x23\x30\x30\x30\x30\
-\x30\x30\x27\x20\x72\x3d\x27\x36\x2e\x30\x32\x32\x35\x27\x2f\x3e\
-\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\
-\x3e\
+\x39\x43\x20\x32\x39\x2e\x36\x36\x38\x37\x20\x2d\x36\x37\x2e\x35\
+\x35\x36\x38\x20\x35\x35\x2e\x32\x32\x39\x32\x20\x2d\x36\x30\x2e\
+\x36\x34\x32\x20\x35\x36\x2e\x31\x35\x32\x33\x20\x2d\x34\x32\x2e\
+\x35\x30\x32\x32\x43\x20\x35\x36\x2e\x36\x31\x33\x36\x20\x2d\x33\
+\x33\x2e\x34\x33\x38\x31\x20\x34\x39\x2e\x31\x31\x33\x32\x20\x2d\
+\x32\x36\x2e\x35\x39\x35\x39\x20\x34\x30\x2e\x36\x37\x39\x34\x20\
+\x2d\x32\x32\x2e\x35\x32\x38\x31\x43\x20\x32\x35\x2e\x33\x39\x39\
+\x35\x20\x2d\x31\x35\x2e\x31\x35\x38\x32\x20\x37\x2e\x31\x39\x39\
+\x33\x35\x20\x2d\x31\x38\x2e\x31\x34\x33\x36\x20\x33\x2e\x39\x35\
+\x37\x33\x35\x20\x2d\x33\x32\x2e\x31\x32\x5a\x27\x20\x66\x69\x6c\
+\x6c\x3d\x27\x6e\x6f\x6e\x65\x27\x20\x73\x74\x72\x6f\x6b\x65\x3d\
+\x27\x23\x30\x30\x30\x30\x30\x30\x27\x20\x73\x74\x72\x6f\x6b\x65\
+\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3d\x27\x72\x6f\x75\x6e\x64\x27\
+\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\
+\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\
+\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3d\x27\x31\x30\x2e\x30\
+\x33\x37\x35\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\
+\x68\x3d\x27\x32\x2e\x35\x30\x39\x33\x37\x27\x2f\x3e\x0a\x3c\x2f\
+\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\
+\x27\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\x39\x39\x36\x32\x36\x34\
+\x20\x30\x20\x30\x20\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x35\x38\
+\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\x35\x38\x29\x27\x3e\
+\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\x33\x2e\x39\
+\x35\x37\x33\x35\x27\x20\x63\x79\x3d\x27\x2d\x33\x32\x2e\x31\x32\
+\x27\x20\x66\x69\x6c\x6c\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\
+\x20\x72\x3d\x27\x36\x2e\x30\x32\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\
+\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\
+\x27\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\x39\x39\x36\x32\x36\x34\
+\x20\x30\x20\x30\x20\x30\x2e\x39\x39\x36\x32\x36\x34\x20\x35\x38\
+\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\x35\x38\x29\x27\x3e\
+\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\x31\x31\x2e\
+\x39\x30\x33\x36\x27\x20\x63\x79\x3d\x27\x2d\x35\x31\x2e\x33\x30\
+\x33\x39\x27\x20\x66\x69\x6c\x6c\x3d\x27\x23\x30\x30\x30\x30\x30\
+\x30\x27\x20\x72\x3d\x27\x36\x2e\x30\x32\x32\x35\x27\x2f\x3e\x0a\
+\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\
+\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\x39\x39\x36\x32\
+\x36\x34\x20\x30\x20\x30\x20\x30\x2e\x39\x39\x36\x32\x36\x34\x20\
+\x35\x38\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\x35\x38\x29\
+\x27\x3e\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\x35\
+\x36\x2e\x31\x35\x32\x33\x27\x20\x63\x79\x3d\x27\x2d\x34\x32\x2e\
+\x35\x30\x32\x32\x27\x20\x66\x69\x6c\x6c\x3d\x27\x23\x30\x30\x30\
+\x30\x30\x30\x27\x20\x72\x3d\x27\x36\x2e\x30\x32\x32\x35\x27\x2f\
+\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\
+\x6f\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\x39\x39\
+\x36\x32\x36\x34\x20\x30\x20\x30\x20\x30\x2e\x39\x39\x36\x32\x36\
+\x34\x20\x35\x38\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\x35\
+\x38\x29\x27\x3e\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\
+\x27\x34\x30\x2e\x36\x37\x39\x34\x27\x20\x63\x79\x3d\x27\x2d\x32\
+\x32\x2e\x35\x32\x38\x31\x27\x20\x66\x69\x6c\x6c\x3d\x27\x23\x30\
+\x30\x30\x30\x30\x30\x27\x20\x72\x3d\x27\x36\x2e\x30\x32\x32\x35\
+\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\
+\x73\x76\x67\x3e\
 "
 
 qt_resource_name = b"\
@@ -2384,51 +2384,91 @@
 \x00\x6f\xa6\x53\
 \x00\x69\
 \x00\x63\x00\x6f\x00\x6e\x00\x73\
-\x00\x1d\
-\x06\xec\xf4\xc7\
+\x00\x16\
+\x01\xfb\x76\x27\
+\x00\x61\
+\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x61\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x2d\x00\x62\x00\x61\x00\x63\
+\x00\x6b\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x10\
+\x0c\x57\x65\x47\
+\x00\x61\
+\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x2d\x00\x72\x00\x65\x00\x73\x00\x69\x00\x7a\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x11\
+\x01\x60\xbc\x47\
+\x00\x73\
+\x00\x6f\x00\x63\x00\x69\x00\x61\x00\x6c\x00\x2d\x00\x70\x00\x79\x00\x74\x00\x68\x00\x6f\x00\x6e\x00\x2e\x00\x73\x00\x76\x00\x67\
+\
+\x00\x14\
+\x0f\xa5\xe0\xc7\
+\x00\x6d\
+\x00\x61\x00\x67\x00\x6e\x00\x69\x00\x66\x00\x79\x00\x69\x00\x6e\x00\x67\x00\x2d\x00\x67\x00\x6c\x00\x61\x00\x73\x00\x73\x00\x2e\
+\x00\x73\x00\x76\x00\x67\
+\x00\x08\
+\x05\xa8\x57\x87\
 \x00\x63\
-\x00\x68\x00\x65\x00\x76\x00\x72\x00\x6f\x00\x6e\x00\x2d\x00\x77\x00\x69\x00\x74\x00\x68\x00\x2d\x00\x63\x00\x69\x00\x72\x00\x63\
-\x00\x6c\x00\x65\x00\x2d\x00\x72\x00\x69\x00\x67\x00\x68\x00\x74\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x6f\x00\x64\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
 \x00\x0a\
 \x0a\x2d\x1b\xc7\
 \x00\x63\
 \x00\x69\x00\x72\x00\x63\x00\x6c\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x0a\
-\x0f\x68\x53\xe7\
+\x00\x12\
+\x0c\x5e\xd4\xa7\
 \x00\x61\
-\x00\x6e\x00\x63\x00\x68\x00\x6f\x00\x72\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x0f\
-\x09\x76\x60\xc7\
-\x00\x63\
-\x00\x6c\x00\x6f\x00\x73\x00\x65\x00\x2d\x00\x72\x00\x6f\x00\x75\x00\x6e\x00\x64\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x6c\x00\x6f\x00\x63\x00\x61\x00\x74\x00\x65\x00\x2e\x00\x73\x00\x76\
+\x00\x67\
 \x00\x17\
 \x06\xc6\x02\xa7\
 \x00\x74\
 \x00\x72\x00\x69\x00\x61\x00\x6e\x00\x67\x00\x6c\x00\x65\x00\x2d\x00\x73\x00\x74\x00\x72\x00\x6f\x00\x6b\x00\x65\x00\x64\x00\x2d\
 \x00\x31\x00\x35\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x15\
+\x0f\xc4\x59\xe7\
+\x00\x73\
+\x00\x75\x00\x62\x00\x64\x00\x69\x00\x72\x00\x65\x00\x63\x00\x74\x00\x6f\x00\x72\x00\x79\x00\x2d\x00\x6c\x00\x65\x00\x66\x00\x74\
+\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x0d\
+\x05\x20\xce\x87\
+\x00\x6f\
+\x00\x70\x00\x65\x00\x6e\x00\x63\x00\x75\x00\x72\x00\x76\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x11\
+\x0c\xdb\x38\xe7\
+\x00\x61\
+\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x63\x00\x6c\x00\x6f\x00\x73\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
+\
+\x00\x10\
+\x06\xe3\xaf\xe7\
+\x00\x61\
+\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x68\x00\x61\x00\x6e\x00\x64\x00\x2e\x00\x73\x00\x76\x00\x67\
 \x00\x0a\
 \x01\xca\x6d\x87\
 \x00\x62\
 \x00\x75\x00\x63\x00\x6b\x00\x65\x00\x74\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x08\
+\x08\xc8\x55\xe7\
+\x00\x73\
+\x00\x61\x00\x76\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x1d\
+\x06\xec\xf4\xc7\
+\x00\x63\
+\x00\x68\x00\x65\x00\x76\x00\x72\x00\x6f\x00\x6e\x00\x2d\x00\x77\x00\x69\x00\x74\x00\x68\x00\x2d\x00\x63\x00\x69\x00\x72\x00\x63\
+\x00\x6c\x00\x65\x00\x2d\x00\x72\x00\x69\x00\x67\x00\x68\x00\x74\x00\x2e\x00\x73\x00\x76\x00\x67\
 \x00\x1b\
 \x0e\xb5\x68\xe7\
 \x00\x61\
 \x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x72\x00\x61\x00\x64\x00\x69\x00\x6f\x00\x2d\x00\x62\x00\x75\x00\x74\
 \x00\x74\x00\x6f\x00\x6e\x00\x2d\x00\x6f\x00\x6e\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x11\
-\x01\x60\xbc\x47\
-\x00\x73\
-\x00\x6f\x00\x63\x00\x69\x00\x61\x00\x6c\x00\x2d\x00\x70\x00\x79\x00\x74\x00\x68\x00\x6f\x00\x6e\x00\x2e\x00\x73\x00\x76\x00\x67\
-\
-\x00\x14\
-\x0f\xa5\xe0\xc7\
-\x00\x6d\
-\x00\x61\x00\x67\x00\x6e\x00\x69\x00\x66\x00\x79\x00\x69\x00\x6e\x00\x67\x00\x2d\x00\x67\x00\x6c\x00\x61\x00\x73\x00\x73\x00\x2e\
-\x00\x73\x00\x76\x00\x67\
-\x00\x08\
-\x05\xa8\x57\x87\
+\x00\x07\
+\x0c\xf8\x5a\x07\
+\x00\x65\
+\x00\x79\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x10\
+\x08\xe4\xaf\x47\
+\x00\x61\
+\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x64\x00\x6f\x00\x6e\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x0a\
+\x0a\xc8\x62\x67\
 \x00\x63\
-\x00\x6f\x00\x64\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x65\x00\x6e\x00\x74\x00\x65\x00\x72\x00\x2e\x00\x73\x00\x76\x00\x67\
 \x00\x13\
 \x03\x24\x75\x47\
 \x00\x61\
@@ -2439,20 +2479,44 @@
 \x00\x61\
 \x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x64\x00\x65\x00\x6c\x00\x65\x00\x74\x00\x65\x00\x2e\x00\x73\x00\x76\
 \x00\x67\
-\x00\x0f\
-\x04\xf2\xa7\x87\
-\x00\x63\
-\x00\x6c\x00\x6f\x00\x73\x00\x65\x00\x64\x00\x63\x00\x75\x00\x72\x00\x76\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
 \x00\x12\
 \x04\xb2\x21\x47\
 \x00\x61\
 \x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x65\x00\x78\x00\x70\x00\x61\x00\x6e\x00\x64\x00\x2e\x00\x73\x00\x76\
 \x00\x67\
-\x00\x16\
-\x01\xfb\x76\x27\
+\x00\x09\
+\x0b\x9e\x89\x07\
+\x00\x63\
+\x00\x68\x00\x65\x00\x63\x00\x6b\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x1c\
+\x04\x66\xe1\x67\
+\x00\x63\
+\x00\x68\x00\x65\x00\x76\x00\x72\x00\x6f\x00\x6e\x00\x2d\x00\x77\x00\x69\x00\x74\x00\x68\x00\x2d\x00\x63\x00\x69\x00\x72\x00\x63\
+\x00\x6c\x00\x65\x00\x2d\x00\x6c\x00\x65\x00\x66\x00\x74\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x0e\
+\x05\xed\x38\x67\
 \x00\x61\
-\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x61\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x2d\x00\x62\x00\x61\x00\x63\
-\x00\x6b\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x2d\x00\x6d\x00\x6f\x00\x76\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x10\
+\x08\x89\xfa\x47\
+\x00\x63\
+\x00\x65\x00\x6e\x00\x74\x00\x65\x00\x72\x00\x6f\x00\x72\x00\x69\x00\x67\x00\x69\x00\x6e\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x0f\
+\x07\x0e\xc4\x87\
+\x00\x6f\
+\x00\x70\x00\x65\x00\x6e\x00\x70\x00\x6f\x00\x6c\x00\x79\x00\x67\x00\x6f\x00\x6e\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x0f\
+\x09\x76\x60\xc7\
+\x00\x63\
+\x00\x6c\x00\x6f\x00\x73\x00\x65\x00\x2d\x00\x72\x00\x6f\x00\x75\x00\x6e\x00\x64\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x08\
+\x08\xf7\x57\x07\
+\x00\x67\
+\x00\x72\x00\x69\x00\x64\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x08\
+\x0c\xf7\x55\x87\
+\x00\x74\
+\x00\x65\x00\x78\x00\x74\x00\x2e\x00\x73\x00\x76\x00\x67\
 \x00\x19\
 \x0f\xef\x7b\xe7\
 \x00\x61\
@@ -2463,156 +2527,92 @@
 \x00\x61\
 \x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x61\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x2d\x00\x66\x00\x6f\x00\x72\
 \x00\x77\x00\x61\x00\x72\x00\x64\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x11\
+\x0c\xa7\xc7\x47\
+\x00\x63\
+\x00\x6c\x00\x6f\x00\x73\x00\x65\x00\x64\x00\x70\x00\x6f\x00\x6c\x00\x79\x00\x67\x00\x6f\x00\x6e\x00\x2e\x00\x73\x00\x76\x00\x67\
+\
 \x00\x17\
 \x07\x87\x48\x27\
 \x00\x61\
 \x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x66\x00\x6f\x00\x6c\x00\x64\x00\x65\x00\x72\x00\x2d\x00\x6f\x00\x70\
 \x00\x65\x00\x6e\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x12\
+\x08\x79\x97\xe7\
+\x00\x61\
+\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x63\x00\x61\x00\x6d\x00\x65\x00\x72\x00\x61\x00\x2e\x00\x73\x00\x76\
+\x00\x67\
+\x00\x08\
+\x0b\x07\x57\xa7\
+\x00\x65\
+\x00\x64\x00\x69\x00\x74\x00\x2e\x00\x73\x00\x76\x00\x67\
 \x00\x10\
 \x04\xa9\x22\xc7\
 \x00\x66\
 \x00\x69\x00\x6c\x00\x6c\x00\x65\x00\x64\x00\x62\x00\x75\x00\x63\x00\x6b\x00\x65\x00\x74\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x0f\
-\x07\x0e\xc4\x87\
-\x00\x6f\
-\x00\x70\x00\x65\x00\x6e\x00\x70\x00\x6f\x00\x6c\x00\x79\x00\x67\x00\x6f\x00\x6e\x00\x2e\x00\x73\x00\x76\x00\x67\
 \x00\x0e\
-\x05\xed\x38\x67\
+\x0f\xcb\xd5\xc7\
+\x00\x70\
+\x00\x6c\x00\x75\x00\x73\x00\x2d\x00\x72\x00\x6f\x00\x75\x00\x6e\x00\x64\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x0a\
+\x0f\x68\x53\xe7\
 \x00\x61\
-\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x2d\x00\x6d\x00\x6f\x00\x76\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x6e\x00\x63\x00\x68\x00\x6f\x00\x72\x00\x2e\x00\x73\x00\x76\x00\x67\
 \x00\x1c\
 \x08\x8a\x79\x07\
 \x00\x61\
 \x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x72\x00\x61\x00\x64\x00\x69\x00\x6f\x00\x2d\x00\x62\x00\x75\x00\x74\
 \x00\x74\x00\x6f\x00\x6e\x00\x2d\x00\x6f\x00\x66\x00\x66\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x08\
-\x0b\x07\x57\xa7\
-\x00\x65\
-\x00\x64\x00\x69\x00\x74\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x11\
-\x0c\xa7\xc7\x47\
+\x00\x0f\
+\x04\xf2\xa7\x87\
 \x00\x63\
-\x00\x6c\x00\x6f\x00\x73\x00\x65\x00\x64\x00\x70\x00\x6f\x00\x6c\x00\x79\x00\x67\x00\x6f\x00\x6e\x00\x2e\x00\x73\x00\x76\x00\x67\
-\
-\x00\x0e\
-\x0f\xcb\xd5\xc7\
-\x00\x70\
-\x00\x6c\x00\x75\x00\x73\x00\x2d\x00\x72\x00\x6f\x00\x75\x00\x6e\x00\x64\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x09\
-\x0b\x9e\x89\x07\
-\x00\x63\
-\x00\x68\x00\x65\x00\x63\x00\x6b\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x1c\
-\x04\x66\xe1\x67\
-\x00\x63\
-\x00\x68\x00\x65\x00\x76\x00\x72\x00\x6f\x00\x6e\x00\x2d\x00\x77\x00\x69\x00\x74\x00\x68\x00\x2d\x00\x63\x00\x69\x00\x72\x00\x63\
-\x00\x6c\x00\x65\x00\x2d\x00\x6c\x00\x65\x00\x66\x00\x74\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x12\
-\x08\x79\x97\xe7\
-\x00\x61\
-\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x63\x00\x61\x00\x6d\x00\x65\x00\x72\x00\x61\x00\x2e\x00\x73\x00\x76\
-\x00\x67\
-\x00\x11\
-\x0c\xdb\x38\xe7\
-\x00\x61\
-\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x63\x00\x6c\x00\x6f\x00\x73\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
-\
-\x00\x10\
-\x08\xe4\xaf\x47\
-\x00\x61\
-\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x64\x00\x6f\x00\x6e\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x07\
-\x0c\xf8\x5a\x07\
-\x00\x65\
-\x00\x79\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x08\
-\x08\xf7\x57\x07\
-\x00\x67\
-\x00\x72\x00\x69\x00\x64\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x10\
-\x0c\x57\x65\x47\
-\x00\x61\
-\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x2d\x00\x72\x00\x65\x00\x73\x00\x69\x00\x7a\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x15\
-\x0f\xc4\x59\xe7\
-\x00\x73\
-\x00\x75\x00\x62\x00\x64\x00\x69\x00\x72\x00\x65\x00\x63\x00\x74\x00\x6f\x00\x72\x00\x79\x00\x2d\x00\x6c\x00\x65\x00\x66\x00\x74\
-\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x12\
-\x0c\x5e\xd4\xa7\
-\x00\x61\
-\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x6c\x00\x6f\x00\x63\x00\x61\x00\x74\x00\x65\x00\x2e\x00\x73\x00\x76\
-\x00\x67\
-\x00\x08\
-\x08\xc8\x55\xe7\
-\x00\x73\
-\x00\x61\x00\x76\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x10\
-\x08\x89\xfa\x47\
-\x00\x63\
-\x00\x65\x00\x6e\x00\x74\x00\x65\x00\x72\x00\x6f\x00\x72\x00\x69\x00\x67\x00\x69\x00\x6e\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x10\
-\x06\xe3\xaf\xe7\
-\x00\x61\
-\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x68\x00\x61\x00\x6e\x00\x64\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x0a\
-\x0a\xc8\x62\x67\
-\x00\x63\
-\x00\x65\x00\x6e\x00\x74\x00\x65\x00\x72\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x08\
-\x0c\xf7\x55\x87\
-\x00\x74\
-\x00\x65\x00\x78\x00\x74\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x0d\
-\x05\x20\xce\x87\
-\x00\x6f\
-\x00\x70\x00\x65\x00\x6e\x00\x63\x00\x75\x00\x72\x00\x76\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x6c\x00\x6f\x00\x73\x00\x65\x00\x64\x00\x63\x00\x75\x00\x72\x00\x76\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
 "
 
 qt_resource_struct_v1 = b"\
 \x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
 \x00\x00\x00\x00\x00\x02\x00\x00\x00\x29\x00\x00\x00\x02\
-\x00\x00\x01\x32\x00\x00\x00\x00\x00\x01\x00\x00\x19\x8d\
-\x00\x00\x00\xdc\x00\x00\x00\x00\x00\x01\x00\x00\x10\x65\
-\x00\x00\x02\x42\x00\x00\x00\x00\x00\x01\x00\x00\x37\x6a\
-\x00\x00\x01\x9e\x00\x00\x00\x00\x00\x01\x00\x00\x29\x87\
-\x00\x00\x04\x3a\x00\x00\x00\x00\x00\x01\x00\x00\x5e\xed\
-\x00\x00\x03\x18\x00\x01\x00\x00\x00\x01\x00\x00\x44\xed\
-\x00\x00\x02\x18\x00\x00\x00\x00\x00\x01\x00\x00\x34\x30\
-\x00\x00\x01\xf4\x00\x00\x00\x00\x00\x01\x00\x00\x2f\x57\
-\x00\x00\x06\x2c\x00\x00\x00\x00\x00\x01\x00\x00\x89\xa2\
-\x00\x00\x01\x88\x00\x00\x00\x00\x00\x01\x00\x00\x24\xd9\
-\x00\x00\x03\x62\x00\x00\x00\x00\x00\x01\x00\x00\x4b\x53\
-\x00\x00\x00\xa8\x00\x00\x00\x00\x00\x01\x00\x00\x0b\x97\
-\x00\x00\x05\xd6\x00\x00\x00\x00\x00\x01\x00\x00\x7f\x34\
+\x00\x00\x00\x68\x00\x00\x00\x00\x00\x01\x00\x00\x05\x04\
+\x00\x00\x01\xea\x00\x00\x00\x00\x00\x01\x00\x00\x2e\xc9\
 \x00\x00\x00\x10\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
-\x00\x00\x03\x3e\x00\x00\x00\x00\x00\x01\x00\x00\x47\x12\
-\x00\x00\x02\xe4\x00\x00\x00\x00\x00\x01\x00\x00\x41\x97\
-\x00\x00\x01\xca\x00\x00\x00\x00\x00\x01\x00\x00\x2c\xb1\
-\x00\x00\x04\x78\x00\x00\x00\x00\x00\x01\x00\x00\x62\xe6\
-\x00\x00\x05\xb0\x00\x00\x00\x00\x00\x01\x00\x00\x7b\x14\
-\x00\x00\x03\x84\x00\x00\x00\x00\x00\x01\x00\x00\x4e\x20\
-\x00\x00\x05\x9a\x00\x00\x00\x00\x00\x01\x00\x00\x78\x6f\
-\x00\x00\x04\xca\x00\x00\x00\x00\x00\x01\x00\x00\x68\xc7\
-\x00\x00\x05\x04\x00\x01\x00\x00\x00\x01\x00\x00\x6f\x33\
-\x00\x00\x00\x84\x00\x00\x00\x00\x00\x01\x00\x00\x08\x4d\
-\x00\x00\x00\x50\x00\x00\x00\x00\x00\x01\x00\x00\x03\xea\
-\x00\x00\x02\xac\x00\x00\x00\x00\x00\x01\x00\x00\x3f\x16\
-\x00\x00\x05\xfc\x00\x00\x00\x00\x00\x01\x00\x00\x85\x02\
-\x00\x00\x03\xc2\x00\x00\x00\x00\x00\x01\x00\x00\x51\x20\
-\x00\x00\x04\x22\x00\x00\x00\x00\x00\x01\x00\x00\x5b\xdd\
-\x00\x00\x05\x1a\x00\x00\x00\x00\x00\x01\x00\x00\x71\x14\
-\x00\x00\x05\x70\x00\x00\x00\x00\x00\x01\x00\x00\x74\x07\
-\x00\x00\x03\xd8\x00\x00\x00\x00\x00\x01\x00\x00\x54\x90\
-\x00\x00\x04\xa2\x00\x00\x00\x00\x00\x01\x00\x00\x66\x0c\
-\x00\x00\x06\x16\x00\x00\x00\x00\x00\x01\x00\x00\x88\x82\
-\x00\x00\x04\xf0\x00\x00\x00\x00\x00\x01\x00\x00\x6b\x44\
-\x00\x00\x00\xf6\x00\x00\x00\x00\x00\x01\x00\x00\x16\x3d\
-\x00\x00\x00\x6a\x00\x00\x00\x00\x00\x01\x00\x00\x06\xe0\
-\x00\x00\x01\x5a\x00\x00\x00\x00\x00\x01\x00\x00\x21\x11\
-\x00\x00\x05\x40\x00\x00\x00\x00\x00\x01\x00\x00\x73\x97\
-\x00\x00\x04\x00\x00\x00\x00\x00\x00\x01\x00\x00\x58\xe2\
-\x00\x00\x02\x74\x00\x00\x00\x00\x00\x01\x00\x00\x39\xeb\
+\x00\x00\x02\xea\x00\x00\x00\x00\x00\x01\x00\x00\x48\x6c\
+\x00\x00\x03\x82\x00\x00\x00\x00\x00\x01\x00\x00\x54\x86\
+\x00\x00\x05\x88\x00\x01\x00\x00\x00\x01\x00\x00\x7f\xe2\
+\x00\x00\x03\x40\x00\x00\x00\x00\x00\x01\x00\x00\x4e\x3c\
+\x00\x00\x06\x28\x00\x00\x00\x00\x00\x01\x00\x00\x89\x6f\
+\x00\x00\x01\x7c\x00\x00\x00\x00\x00\x01\x00\x00\x21\x9a\
+\x00\x00\x00\xbe\x00\x00\x00\x00\x00\x01\x00\x00\x10\x50\
+\x00\x00\x03\xc0\x00\x00\x00\x00\x00\x01\x00\x00\x58\x7f\
+\x00\x00\x01\x18\x00\x00\x00\x00\x00\x01\x00\x00\x1c\x5c\
+\x00\x00\x01\xc4\x00\x00\x00\x00\x00\x01\x00\x00\x28\xfb\
+\x00\x00\x02\x1a\x00\x00\x00\x00\x00\x01\x00\x00\x37\x46\
+\x00\x00\x04\x08\x00\x00\x00\x00\x00\x01\x00\x00\x5f\x6c\
+\x00\x00\x05\x14\x00\x00\x00\x00\x00\x01\x00\x00\x75\xf6\
+\x00\x00\x03\x16\x00\x00\x00\x00\x00\x01\x00\x00\x4b\x96\
+\x00\x00\x05\x48\x00\x00\x00\x00\x00\x01\x00\x00\x79\x4c\
+\x00\x00\x03\xe2\x00\x00\x00\x00\x00\x01\x00\x00\x5b\x4c\
+\x00\x00\x05\xea\x00\x00\x00\x00\x00\x01\x00\x00\x86\x6f\
+\x00\x00\x02\x04\x00\x00\x00\x00\x00\x01\x00\x00\x34\xa1\
+\x00\x00\x02\xaa\x00\x00\x00\x00\x00\x01\x00\x00\x42\x6f\
+\x00\x00\x04\x50\x00\x01\x00\x00\x00\x01\x00\x00\x66\xf7\
+\x00\x00\x04\x2c\x00\x00\x00\x00\x00\x01\x00\x00\x63\xad\
+\x00\x00\x00\xd4\x00\x00\x00\x00\x00\x01\x00\x00\x14\xfe\
+\x00\x00\x04\xb4\x00\x00\x00\x00\x00\x01\x00\x00\x6f\x23\
+\x00\x00\x02\xd0\x00\x00\x00\x00\x00\x01\x00\x00\x44\xec\
+\x00\x00\x05\x72\x00\x00\x00\x00\x00\x01\x00\x00\x7c\x72\
+\x00\x00\x03\x6a\x00\x00\x00\x00\x00\x01\x00\x00\x51\x76\
+\x00\x00\x00\x42\x00\x00\x00\x00\x00\x01\x00\x00\x02\x81\
+\x00\x00\x00\xee\x00\x00\x00\x00\x00\x01\x00\x00\x17\xf4\
+\x00\x00\x04\xec\x00\x00\x00\x00\x00\x01\x00\x00\x71\xa4\
+\x00\x00\x01\x9c\x00\x00\x00\x00\x00\x01\x00\x00\x26\x40\
+\x00\x00\x04\x66\x00\x00\x00\x00\x00\x01\x00\x00\x68\xd8\
+\x00\x00\x02\x96\x00\x00\x00\x00\x00\x01\x00\x00\x3e\x80\
+\x00\x00\x02\x5a\x00\x00\x00\x00\x00\x01\x00\x00\x3b\x30\
+\x00\x00\x05\xd0\x00\x00\x00\x00\x00\x01\x00\x00\x85\x02\
+\x00\x00\x00\x90\x00\x00\x00\x00\x00\x01\x00\x00\x0c\x88\
+\x00\x00\x01\x4c\x00\x00\x00\x00\x00\x01\x00\x00\x21\x2a\
+\x00\x00\x05\xae\x00\x00\x00\x00\x00\x01\x00\x00\x82\x07\
+\x00\x00\x04\x7c\x00\x00\x00\x00\x00\x01\x00\x00\x69\xf8\
 "
 
 qt_resource_struct_v2 = b"\
@@ -2620,88 +2620,88 @@
 \x00\x00\x00\x00\x00\x00\x00\x00\
 \x00\x00\x00\x00\x00\x02\x00\x00\x00\x29\x00\x00\x00\x02\
 \x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x01\x32\x00\x00\x00\x00\x00\x01\x00\x00\x19\x8d\
-\x00\x00\x01\x71\x14\x51\x77\x39\
-\x00\x00\x00\xdc\x00\x00\x00\x00\x00\x01\x00\x00\x10\x65\
-\x00\x00\x01\x71\x14\x51\x77\x38\
-\x00\x00\x02\x42\x00\x00\x00\x00\x00\x01\x00\x00\x37\x6a\
-\x00\x00\x01\x71\x14\x51\x77\x38\
-\x00\x00\x01\x9e\x00\x00\x00\x00\x00\x01\x00\x00\x29\x87\
-\x00\x00\x01\x71\x14\x51\x77\x38\
-\x00\x00\x04\x3a\x00\x00\x00\x00\x00\x01\x00\x00\x5e\xed\
-\x00\x00\x01\x71\x14\x51\x77\x38\
-\x00\x00\x03\x18\x00\x01\x00\x00\x00\x01\x00\x00\x44\xed\
-\x00\x00\x01\x71\x14\x51\x77\x38\
-\x00\x00\x02\x18\x00\x00\x00\x00\x00\x01\x00\x00\x34\x30\
-\x00\x00\x01\x71\x14\x51\x77\x38\
-\x00\x00\x01\xf4\x00\x00\x00\x00\x00\x01\x00\x00\x2f\x57\
-\x00\x00\x01\x71\x14\x51\x77\x38\
-\x00\x00\x06\x2c\x00\x00\x00\x00\x00\x01\x00\x00\x89\xa2\
-\x00\x00\x01\x71\x14\x51\x77\x39\
-\x00\x00\x01\x88\x00\x00\x00\x00\x00\x01\x00\x00\x24\xd9\
-\x00\x00\x01\x71\x14\x51\x77\x38\
-\x00\x00\x03\x62\x00\x00\x00\x00\x00\x01\x00\x00\x4b\x53\
-\x00\x00\x01\x71\x14\x51\x77\x38\
-\x00\x00\x00\xa8\x00\x00\x00\x00\x00\x01\x00\x00\x0b\x97\
-\x00\x00\x01\x71\x14\x51\x77\x39\
-\x00\x00\x05\xd6\x00\x00\x00\x00\x00\x01\x00\x00\x7f\x34\
-\x00\x00\x01\x71\x14\x51\x77\x38\
+\x00\x00\x00\x68\x00\x00\x00\x00\x00\x01\x00\x00\x05\x04\
+\x00\x00\x01\x75\xf2\xdd\xa0\xdd\
+\x00\x00\x01\xea\x00\x00\x00\x00\x00\x01\x00\x00\x2e\xc9\
+\x00\x00\x01\x75\xf2\xdd\xa0\xdc\
 \x00\x00\x00\x10\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
-\x00\x00\x01\x71\x14\x51\x77\x38\
-\x00\x00\x03\x3e\x00\x00\x00\x00\x00\x01\x00\x00\x47\x12\
-\x00\x00\x01\x71\x14\x51\x77\x39\
-\x00\x00\x02\xe4\x00\x00\x00\x00\x00\x01\x00\x00\x41\x97\
-\x00\x00\x01\x71\x14\x51\x77\x38\
-\x00\x00\x01\xca\x00\x00\x00\x00\x00\x01\x00\x00\x2c\xb1\
-\x00\x00\x01\x71\x14\x51\x77\x38\
-\x00\x00\x04\x78\x00\x00\x00\x00\x00\x01\x00\x00\x62\xe6\
-\x00\x00\x01\x71\x14\x51\x77\x38\
-\x00\x00\x05\xb0\x00\x00\x00\x00\x00\x01\x00\x00\x7b\x14\
-\x00\x00\x01\x71\x14\x51\x77\x38\
-\x00\x00\x03\x84\x00\x00\x00\x00\x00\x01\x00\x00\x4e\x20\
-\x00\x00\x01\x71\x14\x51\x77\x38\
-\x00\x00\x05\x9a\x00\x00\x00\x00\x00\x01\x00\x00\x78\x6f\
-\x00\x00\x01\x71\x14\x51\x77\x39\
-\x00\x00\x04\xca\x00\x00\x00\x00\x00\x01\x00\x00\x68\xc7\
-\x00\x00\x01\x71\x14\x51\x77\x38\
-\x00\x00\x05\x04\x00\x01\x00\x00\x00\x01\x00\x00\x6f\x33\
-\x00\x00\x01\x71\x14\x51\x77\x39\
-\x00\x00\x00\x84\x00\x00\x00\x00\x00\x01\x00\x00\x08\x4d\
-\x00\x00\x01\x71\x14\x51\x77\x38\
-\x00\x00\x00\x50\x00\x00\x00\x00\x00\x01\x00\x00\x03\xea\
-\x00\x00\x01\x71\x14\x51\x77\x38\
-\x00\x00\x02\xac\x00\x00\x00\x00\x00\x01\x00\x00\x3f\x16\
-\x00\x00\x01\x71\x14\x51\x77\x38\
-\x00\x00\x05\xfc\x00\x00\x00\x00\x00\x01\x00\x00\x85\x02\
-\x00\x00\x01\x71\x14\x51\x77\x38\
-\x00\x00\x03\xc2\x00\x00\x00\x00\x00\x01\x00\x00\x51\x20\
-\x00\x00\x01\x71\x14\x51\x77\x38\
-\x00\x00\x04\x22\x00\x00\x00\x00\x00\x01\x00\x00\x5b\xdd\
-\x00\x00\x01\x71\x14\x51\x77\x38\
-\x00\x00\x05\x1a\x00\x00\x00\x00\x00\x01\x00\x00\x71\x14\
-\x00\x00\x01\x71\x14\x51\x77\x38\
-\x00\x00\x05\x70\x00\x00\x00\x00\x00\x01\x00\x00\x74\x07\
-\x00\x00\x01\x71\x14\x51\x77\x38\
-\x00\x00\x03\xd8\x00\x00\x00\x00\x00\x01\x00\x00\x54\x90\
-\x00\x00\x01\x71\x14\x51\x77\x38\
-\x00\x00\x04\xa2\x00\x00\x00\x00\x00\x01\x00\x00\x66\x0c\
-\x00\x00\x01\x71\x14\x51\x77\x38\
-\x00\x00\x06\x16\x00\x00\x00\x00\x00\x01\x00\x00\x88\x82\
-\x00\x00\x01\x71\x14\x51\x77\x39\
-\x00\x00\x04\xf0\x00\x00\x00\x00\x00\x01\x00\x00\x6b\x44\
-\x00\x00\x01\x71\x14\x51\x77\x38\
-\x00\x00\x00\xf6\x00\x00\x00\x00\x00\x01\x00\x00\x16\x3d\
-\x00\x00\x01\x71\x14\x51\x77\x38\
-\x00\x00\x00\x6a\x00\x00\x00\x00\x00\x01\x00\x00\x06\xe0\
-\x00\x00\x01\x71\x14\x51\x77\x37\
-\x00\x00\x01\x5a\x00\x00\x00\x00\x00\x01\x00\x00\x21\x11\
-\x00\x00\x01\x71\x14\x51\x77\x39\
-\x00\x00\x05\x40\x00\x00\x00\x00\x00\x01\x00\x00\x73\x97\
-\x00\x00\x01\x71\x14\x51\x77\x39\
-\x00\x00\x04\x00\x00\x00\x00\x00\x00\x01\x00\x00\x58\xe2\
-\x00\x00\x01\x71\x14\x51\x77\x39\
-\x00\x00\x02\x74\x00\x00\x00\x00\x00\x01\x00\x00\x39\xeb\
-\x00\x00\x01\x71\x14\x51\x77\x38\
+\x00\x00\x01\x75\xf2\xdd\xa0\xdb\
+\x00\x00\x02\xea\x00\x00\x00\x00\x00\x01\x00\x00\x48\x6c\
+\x00\x00\x01\x75\xf2\xdd\xa0\xdc\
+\x00\x00\x03\x82\x00\x00\x00\x00\x00\x01\x00\x00\x54\x86\
+\x00\x00\x01\x75\xf2\xdd\xa0\xdc\
+\x00\x00\x05\x88\x00\x01\x00\x00\x00\x01\x00\x00\x7f\xe2\
+\x00\x00\x01\x75\xf2\xdd\xa0\xdd\
+\x00\x00\x03\x40\x00\x00\x00\x00\x00\x01\x00\x00\x4e\x3c\
+\x00\x00\x01\x75\xf2\xdd\xa0\xdc\
+\x00\x00\x06\x28\x00\x00\x00\x00\x00\x01\x00\x00\x89\x6f\
+\x00\x00\x01\x75\xf2\xdd\xa0\xdc\
+\x00\x00\x01\x7c\x00\x00\x00\x00\x00\x01\x00\x00\x21\x9a\
+\x00\x00\x01\x75\xf2\xdd\xa0\xdd\
+\x00\x00\x00\xbe\x00\x00\x00\x00\x00\x01\x00\x00\x10\x50\
+\x00\x00\x01\x75\xf2\xdd\xa0\xdc\
+\x00\x00\x03\xc0\x00\x00\x00\x00\x00\x01\x00\x00\x58\x7f\
+\x00\x00\x01\x75\xf2\xdd\xa0\xdc\
+\x00\x00\x01\x18\x00\x00\x00\x00\x00\x01\x00\x00\x1c\x5c\
+\x00\x00\x01\x75\xf2\xdd\xa0\xdd\
+\x00\x00\x01\xc4\x00\x00\x00\x00\x00\x01\x00\x00\x28\xfb\
+\x00\x00\x01\x75\xf2\xdd\xa0\xdc\
+\x00\x00\x02\x1a\x00\x00\x00\x00\x00\x01\x00\x00\x37\x46\
+\x00\x00\x01\x75\xf2\xdd\xa0\xdc\
+\x00\x00\x04\x08\x00\x00\x00\x00\x00\x01\x00\x00\x5f\x6c\
+\x00\x00\x01\x75\xf2\xdd\xa0\xdd\
+\x00\x00\x05\x14\x00\x00\x00\x00\x00\x01\x00\x00\x75\xf6\
+\x00\x00\x01\x75\xf2\xdd\xa0\xdc\
+\x00\x00\x03\x16\x00\x00\x00\x00\x00\x01\x00\x00\x4b\x96\
+\x00\x00\x01\x75\xf2\xdd\xa0\xdc\
+\x00\x00\x05\x48\x00\x00\x00\x00\x00\x01\x00\x00\x79\x4c\
+\x00\x00\x01\x75\xf2\xdd\xa0\xdb\
+\x00\x00\x03\xe2\x00\x00\x00\x00\x00\x01\x00\x00\x5b\x4c\
+\x00\x00\x01\x75\xf2\xdd\xa0\xdc\
+\x00\x00\x05\xea\x00\x00\x00\x00\x00\x01\x00\x00\x86\x6f\
+\x00\x00\x01\x75\xf2\xdd\xa0\xdc\
+\x00\x00\x02\x04\x00\x00\x00\x00\x00\x01\x00\x00\x34\xa1\
+\x00\x00\x01\x75\xf2\xdd\xa0\xdd\
+\x00\x00\x02\xaa\x00\x00\x00\x00\x00\x01\x00\x00\x42\x6f\
+\x00\x00\x01\x75\xf2\xdd\xa0\xdc\
+\x00\x00\x04\x50\x00\x01\x00\x00\x00\x01\x00\x00\x66\xf7\
+\x00\x00\x01\x75\xf2\xdd\xa0\xdd\
+\x00\x00\x04\x2c\x00\x00\x00\x00\x00\x01\x00\x00\x63\xad\
+\x00\x00\x01\x75\xf2\xdd\xa0\xdc\
+\x00\x00\x00\xd4\x00\x00\x00\x00\x00\x01\x00\x00\x14\xfe\
+\x00\x00\x01\x75\xf2\xdd\xa0\xdc\
+\x00\x00\x04\xb4\x00\x00\x00\x00\x00\x01\x00\x00\x6f\x23\
+\x00\x00\x01\x75\xf2\xdd\xa0\xdb\
+\x00\x00\x02\xd0\x00\x00\x00\x00\x00\x01\x00\x00\x44\xec\
+\x00\x00\x01\x75\xf2\xdd\xa0\xdc\
+\x00\x00\x05\x72\x00\x00\x00\x00\x00\x01\x00\x00\x7c\x72\
+\x00\x00\x01\x75\xf2\xdd\xa0\xdd\
+\x00\x00\x03\x6a\x00\x00\x00\x00\x00\x01\x00\x00\x51\x76\
+\x00\x00\x01\x75\xf2\xdd\xa0\xdc\
+\x00\x00\x00\x42\x00\x00\x00\x00\x00\x01\x00\x00\x02\x81\
+\x00\x00\x01\x75\xf2\xdd\xa0\xdc\
+\x00\x00\x00\xee\x00\x00\x00\x00\x00\x01\x00\x00\x17\xf4\
+\x00\x00\x01\x75\xf2\xdd\xa0\xdc\
+\x00\x00\x04\xec\x00\x00\x00\x00\x00\x01\x00\x00\x71\xa4\
+\x00\x00\x01\x75\xf2\xdd\xa0\xdc\
+\x00\x00\x01\x9c\x00\x00\x00\x00\x00\x01\x00\x00\x26\x40\
+\x00\x00\x01\x75\xf2\xdd\xa0\xdc\
+\x00\x00\x04\x66\x00\x00\x00\x00\x00\x01\x00\x00\x68\xd8\
+\x00\x00\x01\x75\xf2\xdd\xa0\xdd\
+\x00\x00\x02\x96\x00\x00\x00\x00\x00\x01\x00\x00\x3e\x80\
+\x00\x00\x01\x75\xf2\xdd\xa0\xdd\
+\x00\x00\x02\x5a\x00\x00\x00\x00\x00\x01\x00\x00\x3b\x30\
+\x00\x00\x01\x75\xf2\xdd\xa0\xdc\
+\x00\x00\x05\xd0\x00\x00\x00\x00\x00\x01\x00\x00\x85\x02\
+\x00\x00\x01\x75\xf2\xdd\xa0\xdb\
+\x00\x00\x00\x90\x00\x00\x00\x00\x00\x01\x00\x00\x0c\x88\
+\x00\x00\x01\x75\xf2\xdd\xa0\xdd\
+\x00\x00\x01\x4c\x00\x00\x00\x00\x00\x01\x00\x00\x21\x2a\
+\x00\x00\x01\x75\xf2\xdd\xa0\xdd\
+\x00\x00\x05\xae\x00\x00\x00\x00\x00\x01\x00\x00\x82\x07\
+\x00\x00\x01\x75\xf2\xdd\xa0\xdd\
+\x00\x00\x04\x7c\x00\x00\x00\x00\x00\x01\x00\x00\x69\xf8\
+\x00\x00\x01\x75\xf2\xdd\xa0\xdc\
 "
 
 qt_version = [int(v) for v in QtCore.qVersion().split('.')]

Modified: trunk/Build/source/utils/asymptote/GUI/setup.py
===================================================================
--- trunk/Build/source/utils/asymptote/GUI/setup.py	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/GUI/setup.py	2021-01-02 16:31:31 UTC (rev 57291)
@@ -8,6 +8,6 @@
     version=xasyVersion.xasyVersion,
     author="Supakorn Rassameemasmuang, Orest Shardt, and John C. Bowman",
     description="User interface for Asymptote, a vector graphics language", 
-    url="http://asymptote.sourceforge.net",
+    url="https://asymptote.sourceforge.io",
     download_url="https://sourceforge.net/projects/asymptote/"
 )

Modified: trunk/Build/source/utils/asymptote/GUI/xasy2asy.py
===================================================================
--- trunk/Build/source/utils/asymptote/GUI/xasy2asy.py	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/GUI/xasy2asy.py	2021-01-02 16:31:31 UTC (rev 57291)
@@ -716,7 +716,7 @@
             image = Qg.QImage(file)
         elif fileformat == 'svg':
             if containsClip:
-                image = xs.SvgObject(file)
+                image = xs.SvgObject(self.asyengine.tempDirName+file)
             else:
                 image = Qs.QSvgRenderer(file)
                 assert image.isValid()
@@ -826,7 +826,7 @@
             for i in range(len(imageInfos)):
                 box, key, localCount, useClip = imageInfos[i]
                 l, b, r, t = [float(a) for a in box.split()]
-                name = "{:s}_{:d}.{:s}".format(self.asyengine.tempDirName, i, fileformat)
+                name = "_{:d}.{:s}".format(i, fileformat)
 
                 self.imageHandleQueue.put((name, fileformat, (l, -t, r, -b), i, key, localCount, useClip))
 
@@ -873,12 +873,15 @@
 
             n += 1
 
-        if text == "Error\n":
-            self.imageHandleQueue.put(("ERROR", fin.readline()))
+        if raw_text != "Error\n":
+            if text == "Error\n":
+                self.imageHandleQueue.put(("ERROR", fin.readline()))
+            else:
+                render()
+
+            self.asy2psmap = asyTransform(xu.listize(fin.readline().rstrip(),float))
         else:
-            render()
-
-        self.asy2psmap = asyTransform(xu.listize(fin.readline().rstrip(),float))
+            self.asy2psmap = identity()
         self.imageHandleQueue.put((None,))
         self.asyfied = True
 

Modified: trunk/Build/source/utils/asymptote/INSTALL
===================================================================
--- trunk/Build/source/utils/asymptote/INSTALL	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/INSTALL	2021-01-02 16:31:31 UTC (rev 57291)
@@ -16,7 +16,7 @@
 ./configure --prefix=$HOME/asymptote
 
 If you get errors from a broken texinfo or pdftex installation, simply put
-http://asymptote.sourceforge.net/asymptote.pdf
+https://asymptote.sourceforge.io/asymptote.pdf
 in the doc directory and repeat the commands make all and make install.
 
 For a list of configure options, type

Modified: trunk/Build/source/utils/asymptote/Makefile.in
===================================================================
--- trunk/Build/source/utils/asymptote/Makefile.in	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/Makefile.in	2021-01-02 16:31:31 UTC (rev 57291)
@@ -13,7 +13,7 @@
 GCLIBS = $(GCPPLIB) $(GCLIB)
 LFLAGS = @LDFLAGS@
 LIBS = $(LFLAGS) @PTHREAD_LIBS@ @GLEW@ @LIBS@ $(GCLIBS)
-DOSLIBS = $(subst -lncurses, -ltermcap, $(LIBS)) -lgdi32 -lwinmm -s -static
+DOSLIBS = $(subst -lncurses, -ltermcap, $(LIBS)) -lwolfssl -lgdi32 -lwinmm -s -static
 
 PERL = perl
 
@@ -60,7 +60,7 @@
         GUI/xasyVersion.py $(XNAME) doc/asy-latex.pdf $(SYMBOLSH)
 EXTRA = asy-mode.el asy-init.el asy.vim asy_filetype.vim asy-kate.sh \
         asymptote.py reload.js nopapersize.ps
-EXEXTRA = piicon.png *.views *.dat *.bib
+EXEXTRA = piicon.png 100d.pdb1 *.views *.dat *.bib
 DOCEXTRA = *.asy *.csv *.dat latexusage.tex externalprc.tex pixel.pdf
 KEYWORDS = base $(ASYMPTOTE_SITEDIR)
 LATEXFILES = asymptote.sty asycolors.sty ocg.sty latexmkrc
@@ -107,8 +107,8 @@
 last = $(shell head -1 revision.cc | sed -e 's/.*\"\(.*\)\";/\1/')
 usinggit = $(shell if test -d ".git"; then echo yes; fi)
 ifeq ($(usinggit),yes)
-	revision = $(shell LC_ALL="C" git describe --long | sed -e 's/git//' \
-                    | sed -e 's/-g.*//')
+	revision = $(shell LC_ALL="C" git describe --long | \
+	sed -e 's/git-\([0-9]*\)-g.*/-\1/' | sed -e 's/-0-g.*//')
 else
 	revision = @VERSION@
 endif
@@ -136,6 +136,7 @@
 	echo string VERSION=\"$(revision)\"\; > base/version.asy
 	echo @set VERSION $(revision) > doc/version.texi
 	echo @set Datadir @datadir@ >> doc/version.texi
+	echo @set Docdir @docdir@ >> doc/version.texi
 
 	echo "#!/usr/bin/env python3" > GUI/xasyVersion.py
 	echo xasyVersion = \"$(revision)\" >> GUI/xasyVersion.py
@@ -356,7 +357,7 @@
 	./wce
 	$(MAKE) -C tests all
 
-glew.o: glew.c GL/glew.h
+glew.o: glew.c GL/glew.h GL/glew.c config.h
 	$(CC) -I. $(GLEWOPTS) -o glew.o -c glew.c
 
 .SUFFIXES: .c .cc .o .d .ui .py

Modified: trunk/Build/source/utils/asymptote/ReleaseNotes
===================================================================
--- trunk/Build/source/utils/asymptote/ReleaseNotes	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/ReleaseNotes	2021-01-02 16:31:31 UTC (rev 57291)
@@ -1,3 +1,68 @@
+Release Notes for Version 2.68
+
+Floating point exceptions in OpenGL libraries are now masked.
+A normalization used to render tubes was fixed.  A Label align(Label,dir)
+function was added for aligning label normals.  A new settings.compress=true
+option controls PDF image compression.  A bool isometry(transform) function
+was added.  Various bugs in the geometry module were fixed.
+The transpose function ignores uninitialized elements.
+Null fields are treated as undefined values in cvs mode and in line mode.
+Uninitialized rendering variables were fixed. A RELEASE variable was added.
+Logarithmic graphs of surfaces are supported. Files are opened
+without assuming an asy suffix.  Suport for Ghostscript 9.53 was implemented.
+The end argument of Margin functions is now optional. A function
+cputime().change.clock that returns the high-resolution elapsed wall clock
+time was added.  A --disable-curl option was added.
+The centering of slides was fixed.  Null characters and null strings are
+supported in the replace function.  Configuration without readline support
+was fixed.  In binary mode, an entire file can be read into a string.
+The getc function now works properly when reading the NUL character.
+Reproducible builds are supported.
+
+Release Notes for Version 2.67
+
+Support was added for importing and inputting URLs. Compilation and 2D SVG
+to HTML conversion no longer requires the GLM library; 2D html output is
+fit to the canvas unless settings.absolute=true. Diagnostics for dvisvgm
+were enabled; SVG clipping was fixed.  A -globalread setting (default true)
+was implemented.  Files are opened using the search path, which now
+includes the examples directory.  An invalid array dimensions error was fixed.
+A WebGL resize event listener was added; the + and - keys now zoom in and out,
+rather than expanding and shrinking the viewport. Remeshing on export is
+forced; unnecessary remeshing on zoom in AsyGL is avoided. 
+The triple dir(path3, path3) function was normalized.  The repositioning of
+OpenGL windows was fixed. The copy constructors for path and path3 were fixed.
+Asymptote errors no longer cause Xasy to hang. A numerical precision issue
+was fixed.  A portable way of skipping whitespace was implemented; casts
+from empty strings now yield uninitialized values. Interrupt handling under
+MacOS X was fixed. A devicepixelratio setting was implemented. The error
+location is displayed in the console. Segmentation faults were fixed.
+The documentation was updated and the code was reformatted. A hang on exit
+under MSWindows was fixed. Obsolete encoding modules were removed.  
+
+Release Notes for Version 2.66
+
+A bug in the Bezier patch bounds was fixed. Vertex and material data are
+copied from the CPU to GPU only when necessary. The default Headlamp light
+was brightened. WebGL output is centered in the viewport, extending to the
+canvas boundary; the precision of planar Bezier surfaces was increased  
+to avoid artifacts. Fullscreen mode has been fixed; the new default
+maxviewport=(0,0) specifies the screen dimensions. Camera adjustment was fixed.
+Problems with Xasy and interactive signals under MSWindows were fixed.
+A background color for both 2D and 3D images can be specified with
+currentlight.background. Offscreen rendering on headless machines has been
+reinstated; while the setting offscreen has been removed, one can again
+configure asy for either onscreen or offscreen rendering. Clipping was removed
+from the slopefield module. Functions mapArray, mapTemplate, real abs2(pair),
+and real abs2(triple) were implemented. The new Ghostscript transparency model
+requires Ghostscript 9.52 or later. The detection of TeX errors was improved.
+An array segmentation fault was fixed; array dimensions are checked.
+Flattened monochrome tensor patches with interior internal control points are
+now drawn as filled cyclic paths. PDF offsets were fixed, along with the
+auto-reload feature for Acroread. SVG support was improved; 2D images can now
+be output in HTML format using inline SVG code, to support the
+Asymptote Web Application, a new cloud service at http://asymptote.ualberta.ca.
+
 Release Notes for Version 2.65
 
 A bug in rendering 2D preview images of a 3D scene was fixed.

Modified: trunk/Build/source/utils/asymptote/access.cc
===================================================================
--- trunk/Build/source/utils/asymptote/access.cc	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/access.cc	2021-01-02 16:31:31 UTC (rev 57291)
@@ -56,7 +56,7 @@
   e.encode(inst::pop);
   encode(act, pos, e);
 }
-  
+
 /* callableAccess */
 void callableAccess::encode(action act, position pos, coder &e)
 {
@@ -79,8 +79,8 @@
   e.encode(inst::pop);
   encode(act, pos, e);
 }
-  
 
+
 /* frameAccess */
 void frameAccess::encode(action act, position pos, coder &e)
 {
@@ -122,8 +122,8 @@
              offset);
   }
   else if (e.encode(level)) {
-      e.encode(act == WRITE ? inst::fieldsave : inst::fieldpush,
-               offset);
+    e.encode(act == WRITE ? inst::fieldsave : inst::fieldpush,
+             offset);
   }
   else {
     frameError(pos);
@@ -159,5 +159,5 @@
   field->encode(act, pos, e, qualifierLevel);
 }
 
-    
+
 } // namespace trans

Modified: trunk/Build/source/utils/asymptote/access.h
===================================================================
--- trunk/Build/source/utils/asymptote/access.h	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/access.h	2021-01-02 16:31:31 UTC (rev 57291)
@@ -17,11 +17,11 @@
 #include "vm.h"
 
 namespace vm {
-  struct callable;
+struct callable;
 }
 
 namespace trans {
-  
+
 class frame;
 class coder;
 
@@ -32,7 +32,7 @@
 };
 
 // These serves as the base class for the accesses.
-class access : public gc { 
+class access : public gc {
 protected:
   // Generic compiler access error - if the compiler functions properly,
   // none of these should be reachable by the user.
@@ -44,7 +44,7 @@
 
 public:
   virtual ~access() = 0;
-  
+
   // Encode a read/write/call of the access when nothing is on the stack.
   virtual void encode(action, position pos, coder &)
   {
@@ -59,7 +59,7 @@
 };
 
 // This class represents identity conversions in casting.
-class identAccess : public access 
+class identAccess : public access
 {
   virtual void encode(action act, position, coder&);
 };
@@ -95,7 +95,7 @@
 public:
   frameAccess(frame *f)
     : f(f) {}
-  
+
   void encode(action act, position pos, coder &e);
   void encode(action act, position pos, coder &e, frame *top);
 };
@@ -116,7 +116,7 @@
 class qualifiedAccess : public access {
   // The location and frame of the record.
   access *qualifier;
-  frame *qualifierLevel;  
+  frame *qualifierLevel;
 
   // The location of the field relative to the record.
   access *field;

Modified: trunk/Build/source/utils/asymptote/align.h
===================================================================
--- trunk/Build/source/utils/asymptote/align.h	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/align.h	2021-01-02 16:31:31 UTC (rev 57291)
@@ -18,8 +18,8 @@
 #ifdef __Array_h__
 
 namespace Array {
-static const array1<Complex> NULL1;  
-static const array2<Complex> NULL2;  
+static const array1<Complex> NULL1;
+static const array2<Complex> NULL2;
 static const array3<Complex> NULL3;
 }
 
@@ -64,9 +64,9 @@
   const char *nomem="Memory limits exceeded";
 #ifdef HAVE_POSIX_MEMALIGN
   int rc=posix_memalign(&mem,align,len*sizeof(T));
-#else  
+#else
   int rc=posix_memalign0(&mem,align,len*sizeof(T));
-#endif  
+#endif
   if(rc == EINVAL) std::cerr << invalid << std::endl;
   if(rc == ENOMEM) std::cerr << nomem << std::endl;
   v=(T *) mem;
@@ -81,7 +81,7 @@
   free(v);
 #else
   free0(v);
-#endif  
+#endif
 }
 }
 
@@ -115,7 +115,7 @@
   free(p);
 #else
   Array::free0(p);
-#endif  
+#endif
 }
 
 }

Modified: trunk/Build/source/utils/asymptote/angle.h
===================================================================
--- trunk/Build/source/utils/asymptote/angle.h	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/angle.h	2021-01-02 16:31:31 UTC (rev 57291)
@@ -17,7 +17,7 @@
 
 const double Cpiby180=PI/180.0;
 const double C180bypi=180.0/PI;
-  
+
 inline double radians(double theta)
 {
   return theta*Cpiby180;
@@ -39,12 +39,12 @@
   }
   return atan2(y,x);
 }
-  
+
 // Return an angle in the interval [0,360).
 inline double principalBranch(double deg)
 {
   deg=fmod(deg,360.0);
-  if(deg < 0) deg += 360.0; 
+  if(deg < 0) deg += 360.0;
   return deg;
 }
 

Modified: trunk/Build/source/utils/asymptote/application.cc
===================================================================
--- trunk/Build/source/utils/asymptote/application.cc	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/application.cc	2021-01-02 16:31:31 UTC (rev 57291)
@@ -53,7 +53,7 @@
 
   if (rest)
     rest->trans(e, temps);
-  
+
   transMaker(e, (Int)inits.size(), (bool)rest);
 }
 
@@ -93,7 +93,7 @@
         ++y;
     l.push_front(x);
   }
-  
+
   // Tests if x is maximal.
   bool maximal(application *x) {
     for (app_list::iterator y=l.begin(); y!=l.end(); ++y)
@@ -140,7 +140,7 @@
   }
 }
 
-//const Int REST=-1; 
+//const Int REST=-1;
 const Int NOMATCH=-2;
 
 Int application::find(symbol name) {
@@ -185,7 +185,7 @@
 {
   formal &target=sig->getFormal(spot);
   if(target.t->kind == types::ty_error) return false;
-  
+
   score s=castScore(e, target, source);
 
   if (s == FAIL)
@@ -252,7 +252,7 @@
     }
   return false;
 }
-  
+
 // When the argument should be evaluated, possibly adjusting for a rest
 // argument which occurs before named arguments.
 size_t adjustIndex(size_t i, size_t ri)
@@ -291,7 +291,7 @@
   // Fill in any remaining arguments with their defaults.
   return complete();
 }
-       
+
 bool application::matchOpen(env &e, signature *source, arglist &al) {
   assert(rest);
 
@@ -316,8 +316,8 @@
   application *app=new application(t);
 
   bool success = t->getSignature()->isOpen ?
-                     app->matchOpen(e, source, al) :
-                     app->matchSignature(e, source, al);
+    app->matchOpen(e, source, al) :
+    app->matchSignature(e, source, al);
 
   //cout << "MATCH " << success << endl;
 
@@ -428,7 +428,7 @@
   if (source->hasRest()) {
     if (!target->hasRest())
       return false;
-    
+
     if (!equivalent(source->getRest().t, target->getRest().t))
       return false;
   }
@@ -454,42 +454,42 @@
     return l; /* empty */
 
   for (ty_vector::iterator t=o->sub.begin(); t!=o->sub.end(); ++t)
-  {
-    if ((*t)->kind != ty_function)
-      continue;
+    {
+      if ((*t)->kind != ty_function)
+        continue;
 
-    function *ft = (function *)*t;
+      function *ft = (function *)*t;
 
-    // First we run a test to see if all arguments could be exactly matched.
-    // If this returns false, no such match is possible.
-    // If it returns true, an exact match may or may not be possible.
-    if (!exactMightMatch(ft->getSignature(), source))
-      continue;
+      // First we run a test to see if all arguments could be exactly matched.
+      // If this returns false, no such match is possible.
+      // If it returns true, an exact match may or may not be possible.
+      if (!exactMightMatch(ft->getSignature(), source))
+        continue;
 
-    application *a=application::match(e, ft, source, al);
+      application *a=application::match(e, ft, source, al);
 
-    // Consider calling
-    //   void f(A a=new A, int y)
-    // with
-    //   f(3)
-    // This matches exactly if there is no implicit cast from int to A.
-    // Otherwise, it does not match.
-    // Thus, there is no way to know if the
-    // match truly is exact without looking at the environment.
-    // In such a case, exactMightMatch() must return true, but there is no
-    // exact match.  Such false positives are eliminated here.
-    // 
-    // Consider calling
-    //   void f(int x, real y=0.0, int z=0)
-    // with
-    //   f(1,2)
-    // exactMightMatch() will return true, matching 1 to x and 2 to z, but the
-    // application::match will give an inexact match of 1 to x to 2 to y, due
-    // to the cast from int to real.  Therefore, we must test for exactness
-    // even after matching.
-    if (a && a->exact())
-      l.push_back(a);
-  }
+      // Consider calling
+      //   void f(A a=new A, int y)
+      // with
+      //   f(3)
+      // This matches exactly if there is no implicit cast from int to A.
+      // Otherwise, it does not match.
+      // Thus, there is no way to know if the
+      // match truly is exact without looking at the environment.
+      // In such a case, exactMightMatch() must return true, but there is no
+      // exact match.  Such false positives are eliminated here.
+      //
+      // Consider calling
+      //   void f(int x, real y=0.0, int z=0)
+      // with
+      //   f(1,2)
+      // exactMightMatch() will return true, matching 1 to x and 2 to z, but the
+      // application::match will give an inexact match of 1 to x to 2 to y, due
+      // to the cast from int to real.  Therefore, we must test for exactness
+      // even after matching.
+      if (a && a->exact())
+        l.push_back(a);
+    }
 
   //cout << "EXACTMATCH " << (!l.empty()) << endl;
   return l;
@@ -514,8 +514,8 @@
   // application::match.  It would be nice to avoid this somehow, but the
   // additional complexity is probably not worth the minor speed improvement.
   if (equivalent(formals[0].t, t1))
-     return e.fastCastable(formals[1].t, t2);
-  else 
+    return e.fastCastable(formals[1].t, t2);
+  else
     return equivalent(formals[1].t, t2) && e.fastCastable(formals[0].t, t1);
 }
 
@@ -550,24 +550,24 @@
   assert(t1); assert(t2);
 
   for (ty_vector::iterator t=o->sub.begin(); t!=o->sub.end(); ++t)
-  {
-    if ((*t)->kind != ty_function)
-      continue;
+    {
+      if ((*t)->kind != ty_function)
+        continue;
 
-    function *ft = (function *)*t;
+      function *ft = (function *)*t;
 
 #if 1
-    if (!halfExactMightMatch(e, ft->getSignature(), t1, t2))
-      continue;
+      if (!halfExactMightMatch(e, ft->getSignature(), t1, t2))
+        continue;
 #endif
 
-    application *a=application::match(e, ft, source, al);
+      application *a=application::match(e, ft, source, al);
 
 #if 1
-    if (a && a->halfExact())
-      l.push_back(a);
+      if (a && a->halfExact())
+        l.push_back(a);
 #endif
-  }
+    }
 
   return l;
 }
@@ -578,7 +578,7 @@
 // not give any speed-up.
 bool tooManyArgs(types::signature *target, types::signature *source) {
   return source->getNumFormals() > target->getNumFormals() &&
-         !target->hasRest();
+    !target->hasRest();
 }
 
 // The full overloading resolution system, which handles casting of arguments,
@@ -624,9 +624,9 @@
         assert(a->exact() == exactlyMatchable(ft->getSignature(), source));
         if (a->halfExact() && !namedFormals(source)) {
           assert(halfExactMightMatch(e, target, source->getFormal(0).t,
-                                                source->getFormal(1).t));
+                                     source->getFormal(1).t));
         }
-          
+
       }
       if (a && a->exact())
         exact = true;
@@ -640,7 +640,7 @@
   cout << (perfect     ? "PERFECT" :
            exact       ? "EXACT" :
            halfExact   ? "HALFEXACT" :
-                         "IMPERFECT")
+           "IMPERFECT")
        << endl;
 #endif
 

Modified: trunk/Build/source/utils/asymptote/application.h
===================================================================
--- trunk/Build/source/utils/asymptote/application.h	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/application.h	2021-01-02 16:31:31 UTC (rev 57291)
@@ -18,7 +18,7 @@
 
 // Defined in runtime.in:
 namespace run {
-  void pushDefault(vm::stack *Stack);
+void pushDefault(vm::stack *Stack);
 }
 
 using absyntax::arglist;
@@ -93,7 +93,7 @@
   restArg()
     : rest(0) {}
 
-  virtual ~restArg() 
+  virtual ~restArg()
   {}
 
   // Encodes the instructions to make an array from size elements on the stack.
@@ -247,11 +247,11 @@
 
   // Matches the argument to a formal in the target signature (possibly causing
   // other formals in the target to be matched to default values), and updates
-  // the matchpoint accordingly. 
+  // the matchpoint accordingly.
   bool matchArgument(env &e, types::formal& source,
                      varinit *a, size_t evalIndex);
 
-  // Match an argument bound to a name, as in f(index=7). 
+  // Match an argument bound to a name, as in f(index=7).
   bool matchNamedArgument(env &e, types::formal& source,
                           varinit *a, size_t evalIndex);
 
@@ -261,7 +261,7 @@
 
   // Match a rest argument in the calling expression.
   bool matchRest(env &e, types::formal& f, varinit *a, size_t evalIndex);
- 
+
   // Match the argument represented in signature to the target signature.  On
   // success, all of the arguments in args will be properly set up.
   bool matchSignature(env &e, types::signature *source, arglist &al);

Modified: trunk/Build/source/utils/asymptote/array.cc
===================================================================
--- trunk/Build/source/utils/asymptote/array.cc	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/array.cc	2021-01-02 16:31:31 UTC (rev 57291)
@@ -1,7 +1,7 @@
 /*****
  * array.cc
  * Andy Hammerlindl  2008/01/26
- * 
+ *
  * Array type used by virtual machine.
  *****/
 
@@ -10,6 +10,8 @@
 
 namespace vm {
 
+const char *dereferenceNullArray="dereference of null array";
+
 inline void checkBackSlice(Int left, Int right)
 {
   if (right < left)
@@ -156,10 +158,11 @@
 
 item copyItemToDepth(item i, size_t depth)
 {
-  if (depth == 0)
+  if(depth == 0)
     return i;
-  else
-    return get<array *>(i)->copyToDepth(depth);
+  array* a=get<array*>(i);
+  if(a == 0) vm::error(dereferenceNullArray);
+  return a->copyToDepth(depth);
 }
 
 array *array::copyToDepth(size_t depth)

Modified: trunk/Build/source/utils/asymptote/array.h
===================================================================
--- trunk/Build/source/utils/asymptote/array.h	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/array.h	2021-01-02 16:31:31 UTC (rev 57291)
@@ -1,7 +1,7 @@
 /*****
  * array.h
  * Tom Prince 2005/06/18
- * 
+ *
  * Array type used by virtual machine.
  *****/
 
@@ -14,15 +14,17 @@
 
 namespace vm {
 
+extern const char *dereferenceNullArray;
+
 // Arrays are vectors with push and pop functions.
 class array : public mem::vector<item> {
-  bool cycle;  
+  bool cycle;
 
   void setNonBridgingSlice(size_t l, size_t r, mem::vector<item> *a);
   void setBridgingSlice(size_t l, size_t r, mem::vector<item> *a);
 public:
   array() : cycle(false) {}
-  
+
   array(size_t n)
     : mem::vector<item>(n), cycle(false)
   {}
@@ -46,7 +48,7 @@
   {
     return get<T>((*this)[i]);
   }
-  
+
   array *slice(Int left, Int right);
   void setSlice(Int left, Int right, array *a);
 
@@ -53,7 +55,7 @@
   void cyclic(bool b) {
     cycle=b;
   }
-  
+
   bool cyclic() const {
     return cycle;
   }
@@ -75,7 +77,7 @@
 
 inline size_t checkArray(const vm::array *a)
 {
-  if(a == 0) vm::error("dereference of null array");
+  if(a == 0) vm::error(dereferenceNullArray);
   return a->size();
 }
 
@@ -87,7 +89,7 @@
   vm::error(buf);
 }
 
-inline size_t checkArrays(const vm::array *a, const vm::array *b) 
+inline size_t checkArrays(const vm::array *a, const vm::array *b)
 {
   size_t asize=checkArray(a);
   size_t bsize=checkArray(b);
@@ -94,7 +96,7 @@
   checkEqual(asize,bsize);
   return asize;
 }
- 
+
 // Copies an item to a depth d.  If d == 0 then the item is just returned
 // without copying, otherwise, the array and its subarrays are copied to
 // depth d.

Modified: trunk/Build/source/utils/asymptote/arrayop.h
===================================================================
--- trunk/Build/source/utils/asymptote/arrayop.h	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/arrayop.h	2021-01-02 16:31:31 UTC (rev 57291)
@@ -24,7 +24,7 @@
 
 vm::array *copyArray(vm::array *a);
 vm::array *copyArray2(vm::array *a);
-  
+
 template<class T, class U, template <class S> class op>
 void arrayOp(vm::stack *s)
 {
@@ -73,7 +73,7 @@
 }
 
 extern const char *arrayempty;
-  
+
 template<class T, template <class S> class op>
 void binopArray(vm::stack *s)
 {
@@ -202,7 +202,7 @@
   if(n == 0) return true;
   size_t n0=checkArray(read<array*>(a,0));
   if(n0 != checkArray(read<array*>(b,0))) return false;
-    
+
   for(size_t i=0; i < n; ++i) {
     array *ai=read<array*>(a,i);
     array *bi=read<array*>(b,i);
@@ -300,7 +300,7 @@
   size_t u=size-1;
   if(key >= read<T>(a,u)) {s->push((Int) u); return;}
   size_t l=0;
-        
+
   while (l < u) {
     size_t i=(l+u)/2;
     if(key < read<T>(a,i)) u=i;
@@ -311,9 +311,9 @@
 }
 
 extern string emptystring;
-  
+
 void writestring(vm::stack *s);
-  
+
 template<class T>
 void write(vm::stack *s)
 {
@@ -325,7 +325,7 @@
   bool defaultfile=isdefault(it);
   camp::ofile *f=defaultfile ? &camp::Stdout : vm::get<camp::ofile*>(it);
   if(!f->isOpen() || !f->enabled()) return;
-  
+
   size_t size=checkArray(a);
   if(S != "") f->write(S);
   f->write(first);
@@ -356,7 +356,7 @@
   bool defaultfile=isdefault(it);
   camp::ofile *f=defaultfile ? &camp::Stdout : vm::get<camp::ofile*>(it);
   if(!f->isOpen() || !f->enabled()) return;
-  
+
   size_t asize=checkArray(a);
   size_t Asize=checkArray(A);
   if(f->Standard()) interact::lines=0;
@@ -363,7 +363,7 @@
   else if(!f->isOpen()) return;
   try {
     if(S != "") {f->write(S); f->writeline();}
-  
+
     size_t i=0;
     bool cont=true;
     while(cont) {
@@ -402,7 +402,7 @@
   }
   f->flush();
 }
-  
+
 template<class T>
 void writeArray2(vm::stack *s)
 {
@@ -411,10 +411,10 @@
   bool defaultfile=isdefault(it);
   camp::ofile *f=defaultfile ? &camp::Stdout : vm::get<camp::ofile*>(it);
   if(!f->isOpen() || !f->enabled()) return;
-  
+
   size_t size=checkArray(a);
   if(f->Standard()) interact::lines=0;
-  
+
   try {
     for(size_t i=0; i < size; i++) {
       vm::item& I=(*a)[i];
@@ -443,10 +443,10 @@
   bool defaultfile=isdefault(it);
   camp::ofile *f=defaultfile ? &camp::Stdout : vm::get<camp::ofile*>(it);
   if(!f->isOpen() || !f->enabled()) return;
-  
+
   size_t size=checkArray(a);
   if(f->Standard()) interact::lines=0;
-  
+
   try {
     for(size_t i=0; i < size;) {
       vm::item& I=(*a)[i];
@@ -477,7 +477,7 @@
 }
 
 template <class T, class S, T (*func)(S)>
-void arrayFunc(vm::stack *s) 
+void arrayFunc(vm::stack *s)
 {
   array *a=pop<array*>(s);
   size_t size=checkArray(a);
@@ -488,7 +488,7 @@
 }
 
 template <class T, class S, T (*func)(S)>
-void arrayFunc2(vm::stack *s) 
+void arrayFunc2(vm::stack *s)
 {
   array *a=pop<array*>(s);
   size_t size=checkArray(a);
@@ -499,7 +499,7 @@
     array *ci=new array(aisize);
     (*c)[i]=ci;
     for(size_t j=0; j < aisize; j++)
-    (*ci)[j]=func(read<S>(ai,j));
+      (*ci)[j]=func(read<S>(ai,j));
   }
   s->push(c);
 }
@@ -526,7 +526,7 @@
 {
   size_t size=checkdimension(a,dim);
   dest=(placement == NoGC) ? new T[size] : new(placement) T[size];
-  for(size_t i=0; i < size; i++) 
+  for(size_t i=0; i < size; i++)
     dest[i]=vm::read<T>(a,i);
 }
 
@@ -536,7 +536,7 @@
 {
   size_t size=checkdimension(a,dim);
   dest=(placement == NoGC) ? new T[size] : new(placement) T[size];
-  for(size_t i=0; i < size; i++) 
+  for(size_t i=0; i < size; i++)
     dest[i]=cast(vm::read<A>(a,i));
 }
 
@@ -559,7 +559,7 @@
     buf << "second matrix dimension must be " << dim2;
     vm::error(buf);
   }
-  
+
   dest=(placement == NoGC) ? new T[n*m] : new(placement) T[n*m];
   for(size_t i=0; i < n; i++) {
     vm::array *ai=vm::read<vm::array*>(a,i);
@@ -566,10 +566,10 @@
     size_t aisize=checkArray(ai);
     if(aisize == m) {
       T *desti=dest+i*m;
-      for(size_t j=0; j < m; j++) 
+      for(size_t j=0; j < m; j++)
         desti[j]=vm::read<T>(ai,j);
     } else
-      vm::error(square ? "matrix must be square" : 
+      vm::error(square ? "matrix must be square" :
                 "matrix must be rectangular");
   }
 }
@@ -581,7 +581,7 @@
   for(size_t i=0; i < n; ++i) {
     array *ai=new array(m);
     (*a)[i]=ai;
-    for(size_t j=0; j < m; ++j) 
+    for(size_t j=0; j < m; ++j)
       (*ai)[j]=p[m*i+j];
   }
   return a;

Modified: trunk/Build/source/utils/asymptote/asy-keywords.el
===================================================================
--- trunk/Build/source/utils/asymptote/asy-keywords.el	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/asy-keywords.el	2021-01-02 16:31:31 UTC (rev 57291)
@@ -2,7 +2,7 @@
 ;; This file is automatically generated by asy-list.pl.
 ;; Changes will be overwritten.
 ;;
-(defvar asy-keywords-version "2.65")
+(defvar asy-keywords-version "2.68")
 
 (defvar asy-keyword-name '(
 and controls tension atleast curl if else while for do return break continue struct typedef new access import unravel from include quote static public private restricted this explicit true false null cycle newframe operator ))
@@ -11,7 +11,7 @@
 Braid FitResult Label Legend Solution TreeNode abscissa arc arrowhead binarytree binarytreeNode block bool bool3 bounds bqe circle conic coord coordsys cputime ellipse evaluatedpoint file filltype frame grid3 guide horner hsv hyperbola int inversion key light line linefit marginT marker mass node object pair parabola patch path path3 pen picture point position positionedvector projection rational real revolution scaleT scientific segment side simplex slice solution splitface string surface tensionSpecifier ticklocate ticksgridT tickvalues transform transformation tree triangle trilinear triple vector vertex void ))
 
 (defvar asy-function-name '(
-AND Arc ArcArrow ArcArrows Arrow Arrows AtA Automatic AvantGarde B03 B13 B23 B33 BBox BWRainbow BWRainbow2 Bar Bars BeginArcArrow BeginArrow BeginBar BeginDotMargin BeginMargin BeginPenMargin Blank Bookman Bottom BottomTop Bounds Break Broken BrokenLog CLZ CTZ Ceil Circle CircleBarIntervalMarker Cos Courier CrossIntervalMarker DOSendl DOSnewl DefaultFormat DefaultLogFormat Degrees Dir DotMargin DotMargins Dotted Draw Drawline Embed EndArcArrow EndArrow EndBar EndDotMargin EndMargin EndPenMargin Fill FillDraw Finite Floor Format Full Gaussian Gaussrand Gaussrandpair Gradient Grayscale Helvetica Hermite HookHead InOutTicks InTicks Jn Label Landscape Left LeftRight LeftTicks Legend Linear Log LogFormat Margin Margins Mark MidArcArrow MidArrow NOT NewCenturySchoolBook NoBox NoMargin NoModifier NoTicks NoTicks3 NoZero NoZeroFormat None OR OmitFormat OmitTick OmitTickInterval OmitTickIntervals OutTicks Ox Oy Palatino PaletteTicks Pen PenMargin PenMargins Pentype Portrait RGB RadialShade RadialShadeDraw Rainbow Range Relative Right RightTicks Rotate Round SQR Scale ScaleX ScaleY ScaleZ Seascape Shift Sin Slant Spline StickIntervalMarker Straight Symbol Tan TeXify Ticks Ticks3 TildeIntervalMarker TimesRoman Top TrueMargin UnFill UpsideDown Wheel X XEquals XOR XY XYEquals XYZero XYgrid XZEquals XZZero XZero XZgrid Y YEquals YXgrid YZ YZEquals YZZero YZero YZgrid Yn Z ZX ZXgrid ZYgrid ZapfChancery ZapfDingbats _begingroup3 _cputime _draw _eval _findroot _image _labelpath _projection _shipout _strokepath _texpath aCos aSin aTan abort abs accel acos acosh acot acsc activatequote add addArrow addMargins addSaveFunction addpenarc addpenline addseg adjust alias align all altitude angabscissa angle angledegrees angpoint animate annotate anticomplementary antipedal apply approximate arc arcarrowsize arccircle arcdir arcfromcenter arcfromfocus arclength arcnodesnumber arcpoint arcsubtended arcsubtendedcenter arctime arctopath array arrow arrow2 arrowbase arrowbasepoints arrowsize ascii asec asin asinh ask assert asy asyc!
 ode asydir asyfigure asyfilecode asyinclude asywrite atan atan2 atanh atbreakpoint atexit attach attract atupdate autoformat autoscale autoscale3 axes axes3 axialshade axis axiscoverage azimuth babel background bangles bar barmarksize barsize basealign baseline bbox beep begin beginclip begingroup beginpoint between bevel bezier bezierP bezierPP bezierPPP bezulate bibliography bibliographystyle binarytree binarytreeNode binomial bins bisector bisectorpoint bispline bispline0 bitreverse blend blockconnector box bqe brace breakpoint breakpoints brick buildRestoreDefaults buildRestoreThunk buildcycle bulletcolor byte calculateScaling canonical canonicalcartesiansystem cartesiansystem case1 case2 case3 cbrt cd ceil center centerToFocus centroid cevian change2 changecoordsys checkSegment check_fpt_zero checkconditionlength checker checkincreasing checklengths checkposition checkpt checkptincube checktriangle choose circle circlebarframe circlemarkradius circlenodesnumber circumcenter circumcircle clamped clear clip clipdraw close cmyk code colatitude collect collinear color colorless colors colorspace comma compassmark complement complementary concat concurrent cone conic conicnodesnumber conictype conj connect containmentTree contains contour contour3 controlSpecifier convert coordinates coordsys copy copyPairOrTriple cos cosh cot countIntersections cputime crop cropcode cross crossframe crosshatch crossmarksize csc cubicroots curabscissa curlSpecifier curpoint currentarrow currentexitfunction currentmomarrow currentpolarconicroutine curve cut cutafter cutbefore cyclic cylinder deactivatequote debugger deconstruct defaultdir defaultformat defaultpen defined degenerate degrees delete deletepreamble determinant diagonal diamond diffdiv dir dirSpecifier dirtime display distance divisors do_overpaint dot dotframe dotsize downcase draw drawAll drawCylinder drawDisk drawDoubleLine drawFermion drawGhost drawGluon drawMomArrow drawPhoton drawScalar drawSphere drawTube drawVertex drawVertexBox drawVertexBoxO drawVertexBoxX d!
 rawVertexO drawVertexOX drawVertexTriangle drawVertexTriangleO drawVertexX drawarrow drawarrow2 drawbeziertriangle drawline drawpixel drawstrokepath drawtick duplicate elle ellipse ellipsenodesnumber embed embed3 embedplayer empty enclose end endclip endgroup endgroup3 endl endpoint endpoints eof eol equation equations erase erasestep erf erfc error errorbar errorbars eval excenter excircle exit exitfunction exp expfactors expi expm1 exradius extend extension extouch fabs factorial fermat fft fhorner figure file filecode fill filldraw filloutside fillrule filltype find findall findroot finite finiteDifferenceJacobian firstcut firstframe fit fit2 fixedscaling floor flush fmdefaults fmod focusToCenter font fontcommand fontsize foot format frac frequency fromCenter fromFocus fspline functionshade gamma gcd generate_random_backtrace generateticks gergonne getc getint getpair getreal getstring gettriple gluon gouraudshade graph graphic graphicscale gray grestore grid grid3 gsave halfbox hatch hdiffdiv hermite hex histogram history hline hprojection hsv hyperbola hyperbolanodesnumber hyperlink hypot identity image implicitsurface incenter incentral incircle increasing incrementposition indexedfigure initdefaults initialized input inradius insert inside insphere integrate interactive interior interp interpolate intersect intersection intersectionpoint intersectionpoints intersections intouch inverse inversion invisible is3D isDuplicate isnan isogonal isogonalconjugate isotomic isotomicconjugate isparabola italic item jobname key kurtosis kurtosisexcess label labelaxis labelmargin labelpath labels labeltick labelx labelx3 labely labely3 labelz labelz3 lastcut latex latitude latticeshade layer layout lcm ldexp leastsquares legend legenditem length lexorder lift light limits line linear linecap lineinversion linejoin linemargin lineskip linetype linewidth link list lm_enorm lm_evaluate_default lm_lmdif lm_lmpar lm_minimize lm_print_default lm_print_quiet lm_qrfac lm_qrsolv locale locate locatefile location log log10 log1p!
  logaxiscoverage longitude lookup make3dgrid makeMappingArray makeNode makecircle makedraw makepen maketriangle map margin markangle markangleradius markanglespace markarc marker markinterval marknodes markrightangle markthin markuniform mass masscenter massformat math max max3 maxAfterTransform maxbezier maxbound maxcoords maxlength maxratio maxtimes mean medial median midpoint min min3 minAfterTransform minbezier minbound minipage minratio mintimes miterlimit mktemp momArrowPath momarrowsize monotonic multifigure nGrad nativeformat natural newl newpage newslide newton newtree nextframe nextnormal nextpage nib nodabscissa node none norm normalout normalvideo nosetpagesize notaknot nowarn numberpage nurb object offset onpath opacity opposite orient orientation origin orthic orthocentercenter outdirectory outformat outline outname outprefix output overloadedMessage overwrite pack pad pairs palette parabola parabolanodesnumber parallel parallelogram partialsum patchwithnormals path path3 pathbetween pathinface pattern pause pdf pedal periodic perp perpendicular perpendicularmark phantom phi1 phi2 phi3 photon piecewisestraight point polar polarconicroutine polargraph polygon popcount postcontrol postscript pow10 ppoint prc prc0 prconly precision precontrol prepend printBytecode print_random_addresses progress project projection projecttospan projecttospan_findcoeffs purge pwhermite quadpatches quadrant quadraticroots quantize quarticroots quotient radialshade radians radicalcenter radicalline radius rand randompath rationalidentity rd readline realmult realquarticroots rectangle rectangular rectify reflect relabscissa relative relativedistance reldir relpoint reltime remainder remark removeDuplicates rename render replace report resetdefaultpen restore restoredefaults reverse reversevideo rf rfind rgb rgba rgbint rms rotate rotateO rotation round roundbox roundedpath roundrectangle samecoordsys sameside sample save savedefaults saveline scale scale3 scaleO scaleT scaleless scientific search searchtree sec secondary!
 X secondaryY seconds section sector seek seekeof segment segmentlimits sequence setpens sgn sgnd sharpangle sharpdegrees shift shiftless shipout shipout3 show simeq simplex simplexPhase1 simplexPhase2 simplexStandard simplexTableau simplexWrite simpson sin sinh size size3 skewness skip slant sleep slice slope slopefield solve solveBVP sort sourceline sphere split sqrt square srand standardizecoordsys stdev step stickframe stickmarksize stickmarkspace stop straight straightness string stripdirectory stripextension stripfile stripsuffix strokepath subdivide subitem subpath substr sum surface symmedial symmedian system tab tableau tan tangent tangential tangents tanh tell tensionSpecifier tensorshade tex texcolor texify texpath texpreamble texreset texshipout texsize texstring textpath thick thin tick tickMax tickMax3 tickMin tickMin3 ticklabelshift ticklocate tildeframe tildemarksize tile tiling time times title titlepage topbox toplocation transform transformation transpose trembleFuzz triangle triangleAbc triangleabc triangletoquads trianglewithnormals triangulate tricoef tridiagonal trilinear trim truepoint tube uncycle unfill uniform unique unit unitrand unitsize unityroot unstraighten upcase updatefunction uperiodic upscale uptodate usepackage usersetting usetypescript usleep value variance variancebiased vbox vector vectorfield verbatim view vline vperiodic vprojection warn warning windingnumber write xasyKEY xaxis xaxis3 xaxis3At xaxisAt xequals xlimits xmap xpart xscale xscaleO xtick xtick3 xtrans yaxis yaxis3 yaxis3At yaxisAt yequals ylimits ypart yscale yscaleO ytick ytick3 ytrans zaxis3 zaxis3At zero zlimits zpart ztick ztick3 ztrans ))
+AND Arc ArcArrow ArcArrows Arrow Arrows AtA Automatic AvantGarde B03 B13 B23 B33 BBox BWRainbow BWRainbow2 Bar Bars BeginArcArrow BeginArrow BeginBar BeginDotMargin BeginMargin BeginPenMargin Blank Bookman Bottom BottomTop Bounds Break Broken BrokenLog CLZ CTZ Ceil Circle CircleBarIntervalMarker Cos Courier CrossIntervalMarker DOSendl DOSnewl DefaultFormat DefaultLogFormat Degrees Dir DotMargin DotMargins Dotted Draw Drawline Embed EndArcArrow EndArrow EndBar EndDotMargin EndMargin EndPenMargin Fill FillDraw Finite Floor Format Full Gaussian Gaussrand Gaussrandpair Gradient Grayscale Helvetica Hermite HookHead InOutTicks InTicks Jn Label Landscape Left LeftRight LeftTicks Legend Linear Log LogFormat Margin Margins Mark MidArcArrow MidArrow NOT NewCenturySchoolBook NoBox NoMargin NoModifier NoTicks NoTicks3 NoZero NoZeroFormat None OR OmitFormat OmitTick OmitTickInterval OmitTickIntervals OutTicks Ox Oy Palatino PaletteTicks Pen PenMargin PenMargins Pentype Portrait RGB RadialShade RadialShadeDraw Rainbow Range Relative Right RightTicks Rotate Round SQR Scale ScaleX ScaleY ScaleZ Seascape Shift Sin Slant Spline StickIntervalMarker Straight Symbol Tan TeXify Ticks Ticks3 TildeIntervalMarker TimesRoman Top TrueMargin UnFill UpsideDown Wheel X XEquals XOR XY XYEquals XYZero XYgrid XZEquals XZZero XZero XZgrid Y YEquals YXgrid YZ YZEquals YZZero YZero YZgrid Yn Z ZX ZXgrid ZYgrid ZapfChancery ZapfDingbats _begingroup3 _cputime _draw _eval _findroot _image _labelpath _projection _shipout _strokepath _texpath aCos aSin aTan abort abs abs2 accel acos acosh acot acsc activatequote add addArrow addMargins addSaveFunction addpenarc addpenline addseg adjust alias align all altitude angabscissa angle angledegrees angpoint animate annotate anticomplementary antipedal apply approximate arc arcarrowsize arccircle arcdir arcfromcenter arcfromfocus arclength arcnodesnumber arcpoint arcsubtended arcsubtendedcenter arctime arctopath array arrow arrow2 arrowbase arrowbasepoints arrowsize ascii asec asin asinh ask assert asy!
  asycode asydir asyfigure asyfilecode asyinclude asywrite atan atan2 atanh atbreakpoint atexit attach attract atupdate autoformat autoscale autoscale3 axes axes3 axialshade axis axiscoverage azimuth babel background bangles bar barmarksize barsize basealign baseline bbox beep begin beginclip begingroup beginpoint between bevel bezier bezierP bezierPP bezierPPP bezulate bibliography bibliographystyle binarytree binarytreeNode binomial bins bisector bisectorpoint bispline bispline0 bitreverse blend blockconnector box bqe brace breakpoint breakpoints brick buildRestoreDefaults buildRestoreThunk buildcycle bulletcolor byte calculateScaling canonical canonicalcartesiansystem cartesiansystem case1 case2 case3 cbrt cd ceil center centerToFocus centroid cevian change2 changecoordsys checkSegment check_fpt_zero checkconditionlength checker checkincreasing checklengths checkposition checkpt checkptincube checktriangle choose circle circlebarframe circlemarkradius circlenodesnumber circumcenter circumcircle clamped clear clip clipdraw close cmyk code colatitude collect collinear color colorless colors colorspace comma compassmark complement complementary concat concurrent cone conic conicnodesnumber conictype conj connect containmentTree contains contour contour3 controlSpecifier convert coordinates coordsys copy copyPairOrTriple cos cosh cot countIntersections cputime crop cropcode cross crossframe crosshatch crossmarksize csc cubicroots curabscissa curlSpecifier curpoint currentarrow currentexitfunction currentmomarrow currentpolarconicroutine curve cut cutafter cutbefore cyclic cylinder deactivatequote debugger deconstruct defaultdir defaultformat defaultpen defined degenerate degrees delete deletepreamble determinant diagonal diamond diffdiv dir dirSpecifier dirtime display distance divisors do_overpaint dot dotframe dotsize downcase draw drawAll drawCylinder drawDisk drawDoubleLine drawFermion drawGhost drawGluon drawMomArrow drawPhoton drawScalar drawSphere drawTube drawVertex drawVertexBox drawVertexBoxO drawVertexB!
 oxX drawVertexO drawVertexOX drawVertexTriangle drawVertexTriangleO drawVertexX drawarrow drawarrow2 drawbeziertriangle drawline drawpixel drawstrokepath drawtick duplicate elle ellipse ellipsenodesnumber embed embed3 embedplayer empty enclose end endclip endgroup endgroup3 endl endpoint endpoints eof eol equation equations erase erasestep erf erfc error errorbar errorbars eval excenter excircle exit exitfunction exp expfactors expi expm1 exradius extend extension extouch fabs factorial fermat fft fhorner figure file filecode fill filldraw filloutside fillrule filltype find findall findroot finite finiteDifferenceJacobian firstcut firstframe fit fit2 fixedscaling floor flush fmdefaults fmod focusToCenter font fontcommand fontsize foot format frac frequency fromCenter fromFocus fspline functionshade gamma gcd generate_random_backtrace generateticks gergonne getc getint getpair getreal getstring gettriple gluon gouraudshade graph graphic graphicscale gray grestore grid grid3 gsave halfbox hatch hdiffdiv hermite hex histogram history hline hprojection hsv hyperbola hyperbolanodesnumber hyperlink hypot identity image implicitsurface incenter incentral incircle increasing incrementposition indexedfigure initdefaults initialized input inradius insert inside insphere integrate interactive interior interp interpolate intersect intersection intersectionpoint intersectionpoints intersections intouch inverse inversion invisible is3D isDuplicate isnan isogonal isogonalconjugate isometry isotomic isotomicconjugate isparabola italic item jobname key kurtosis kurtosisexcess label labelaxis labelmargin labelpath labels labeltick labelx labelx3 labely labely3 labelz labelz3 lastcut latex latitude latticeshade layer layout lcm ldexp leastsquares legend legenditem length lexorder lift light limits line linear linecap lineinversion linejoin linemargin lineskip linetype linewidth link list lm_enorm lm_evaluate_default lm_lmdif lm_lmpar lm_minimize lm_print_default lm_print_quiet lm_qrfac lm_qrsolv locale locate locatefile location l!
 og log10 log1p logaxiscoverage longitude lookup make3dgrid makeMappingArray makeNode makecircle makedraw makepen maketriangle map mapArray mapTemplate margin markangle markangleradius markanglespace markarc marker markinterval marknodes markrightangle markthin markuniform mass masscenter massformat math max max3 maxAfterTransform maxbezier maxbound maxcoords maxlength maxratio maxtimes mean medial median midpoint min min3 minAfterTransform minbezier minbound minipage minratio mintimes miterlimit mktemp momArrowPath momarrowsize monotonic multifigure nGrad nativeformat natural newl newpage newslide newton newtree nextframe nextnormal nextpage nib nodabscissa node none norm normalout normalvideo notaknot nowarn numberpage nurb object offset onpath opacity opposite orient orientation origin orthic orthocentercenter outdirectory outformat outline outname outprefix output overloadedMessage overwrite pack pad pairs palette parabola parabolanodesnumber parallel parallelogram partialsum patchwithnormals path path3 pathbetween pathinface pattern pause pdf pedal periodic perp perpendicular perpendicularmark phantom phi1 phi2 phi3 photon piecewisestraight point polar polarconicroutine polargraph polygon popcount postcontrol postscript pow10 ppoint prc prc0 prconly precision precontrol prepend printBytecode print_random_addresses progress project projection projecttospan projecttospan_findcoeffs purge pwhermite quadpatches quadrant quadraticroots quantize quarticroots quotient radialshade radians radicalcenter radicalline radius rand randompath rationalidentity rd readline realmult realquarticroots rectangle rectangular rectify reflect relabscissa relative relativedistance reldir relpoint reltime remainder remark removeDuplicates rename render replace report resetdefaultpen restore restoredefaults reverse reversevideo rf rfind rgb rgba rgbint rms rotate rotateO rotation round roundbox roundedpath roundrectangle samecoordsys sameside sample save savedefaults saveline scale scale3 scaleO scaleT scaleless scientific search sea!
 rchtree sec secondaryX secondaryY seconds section sector seek seekeof segment segmentlimits sequence setpens sgn sgnd sharpangle sharpdegrees shift shiftless shipout shipout3 show simeq simplex simplexInit simplexPhase1 simplexPhase2 simplexTableau simplexWrite simpson sin sinh size size3 skewness skip slant sleep slice slope slopefield solve solveBVP sort sourceline sphere split sqrt square srand standardizecoordsys stdev step stickframe stickmarksize stickmarkspace stop straight straightness string stripdirectory stripextension stripfile stripsuffix strokepath subdivide subitem subpath substr sum surface symmedial symmedian system tab tableau tan tangent tangential tangents tanh tell tensionSpecifier tensorshade tex texcolor texify texpath texpreamble texreset texshipout texsize texstring textpath thick thin tick tickMax tickMax3 tickMin tickMin3 ticklabelshift ticklocate tildeframe tildemarksize tile tiling time times title titlepage topbox toplocation transform transformation transpose trembleFuzz triangle triangleAbc triangleabc triangletoquads trianglewithnormals triangulate tricoef tridiagonal trilinear trim truepoint tube type uncycle unfill uniform unique unit unitrand unitsize unityroot unstraighten upcase updatefunction uperiodic upscale uptodate usepackage usersetting usetypescript usleep value variance variancebiased vbox vector vectorfield verbatim view vline vperiodic vprojection warn warning windingnumber write xasyKEY xaxis xaxis3 xaxis3At xaxisAt xequals xlimits xmap xpart xscale xscaleO xtick xtick3 xtrans yaxis yaxis3 yaxis3At yaxisAt yequals ylimits ypart yscale yscaleO ytick ytick3 ytrans zaxis3 zaxis3At zero zlimits zpart ztick ztick3 ztrans ))
 
 (defvar asy-variable-name '(
-Accent AliceBlue Align Allow AntiqueWhite Apricot Aqua Aquamarine Aspect Azure BeginPoint Beige Bisque Bittersweet Black BlanchedAlmond Blue BlueGreen BlueViolet Blues Both BrBG Break BrickRed Brown BuGn BuPu BurlyWood BurntOrange CCW CMRmap CW CadetBlue CarnationPink Center Centered Cerulean Chartreuse Chocolate Coeff Coral CornflowerBlue Cornsilk Crimson Crop Cyan Dandelion Dark2 DarkBlue DarkCyan DarkGoldenrod DarkGray DarkGreen DarkKhaki DarkMagenta DarkOliveGreen DarkOrange DarkOrchid DarkRed DarkSalmon DarkSeaGreen DarkSlateBlue DarkSlateGray DarkTurquoise DarkViolet DeepPink DeepSkyBlue DefaultHead DimGray DodgerBlue Dotted Down Draw E ENE EPS ESE E_Euler E_PC E_RK2 E_RK3BS Emerald EndPoint Euler Fill FillDraw FireBrick FloralWhite ForestGreen Fuchsia Gainsboro GhostWhite GnBu Gold Goldenrod Gray Green GreenYellow Greens Greys Honeydew HookHead Horizontal HotPink I IgnoreAspect IndianRed Indigo Infinity Ivory JOIN_IN JOIN_OUT JungleGreen Khaki LM_DWARF LM_MACHEP LM_SQRT_DWARF LM_SQRT_GIANT LM_USERTOL Label Lavender LavenderBlush LawnGreen Left LeftJustified LeftSide LemonChiffon LightBlue LightCoral LightCyan LightGoldenrodYellow LightGreen LightGrey LightPink LightSalmon LightSeaGreen LightSkyBlue LightSlateGray LightSteelBlue LightYellow Lime LimeGreen Linear Linen Log Logarithmic Magenta Mahogany Mark MarkFill MarkPath Maroon Max MediumAquamarine MediumBlue MediumOrchid MediumPurple MediumSeaGreen MediumSlateBlue MediumSpringGreen MediumTurquoise MediumVioletRed Melon MidPoint MidnightBlue Min MintCream MistyRose Moccasin Move MoveQuiet Mulberry N NE NNE NNW NULL_VERTEX NW NavajoWhite Navy NavyBlue NoAlign NoCrop NoFill NoSide OldLace Olive OliveDrab OliveGreen OrRd Orange OrangeRed Oranges Orchid Ox Oy PC PRGn Paired PaleGoldenrod PaleGreen PaleTurquoise PaleVioletRed PapayaWhip Pastel1 Pastel2 Peach PeachPuff Periwinkle Peru PiYG PineGreen Pink Plum PowderBlue ProcessBlue PuBu PuBuGn PuOr PuRd Purple Purples RK2 RK3 RK3BS RK4 RK5 RK5DP RK5F RawSienna RdBu RdGy RdPu RdYlBu RdYlGn Red RedOrang!
 e RedViolet Reds Rhodamine Right RightJustified RightSide RosyBrown RoyalBlue RoyalPurple RubineRed S SE SSE SSW SW SaddleBrown Salmon SandyBrown SeaGreen Seashell Sepia Set1 Set2 Set3 Sienna Silver SimpleHead SkyBlue SlateBlue SlateGray Snow Spectral SpringGreen SteelBlue Suppress SuppressQuiet Tan TeXHead Teal TealBlue Thistle Ticksize Tomato Turquoise UnFill Up VERSION Value Vertical Violet VioletRed W WNW WSW Wheat White WhiteSmoke WildStrawberry XHIGH XLOW XYAlign YAlign YHIGH YLOW Yellow YellowGreen YellowOrange YlGn YlGnBu YlOrBr YlOrRd ZHIGH ZLOW _outpipe aboveequationskip addpenarc addpenline align allowstepping angularsystem animationdelay appendsuffix arcarrowangle arcarrowfactor arrow2sizelimit arrowangle arrowbarb arrowdir arrowfactor arrowhookfactor arrowlength arrowsizelimit arrowtexfactor authorpen autumn axis axiscoverage axislabelfactor background backgroundcolor backgroundpen barfactor barmarksizefactor basealign baselinetemplate bernstein beveljoin bigvertexpen bigvertexsize binary black blue bm bone bottom bp bracedefaultratio braceinnerangle bracemidangle braceouterangle brg brown bullet bwr byfoci byvertices camerafactor chartreuse circlemarkradiusfactor circlenodesnumberfactor circleprecision circlescale cividis cm codefile codepen codeskip colorPen coloredNodes coloredSegments conditionlength conicnodesfactor cool coolwarm copper count cputimeformat crossmarksizefactor currentcoordsys currentlight currentpatterns currentpen currentpicture currentposition currentprojection curvilinearsystem cuttings cyan darkblue darkbrown darkcyan darkgray darkgreen darkgrey darkmagenta darkolive darkred dashdotted dashed datepen dateskip debuggerlines debugging deepblue deepcyan deepgray deepgreen deepgrey deepmagenta deepred deepyellow default defaultControl defaultS defaultbackpen defaultcoordsys defaultexcursion defaultfilename defaultformat defaultmassformat defaultpen defaultseparator differentlengths dot dotfactor dotfilltype dotframe dotted doublelinepen doublelinespacing down duplicateFuzz ellip!
 senodesnumberfactor eps epsgeo epsilon evenodd expansionfactor extendcap fermionpen figureborder figuremattpen file3 firstnode firststep foregroundcolor fuchsia fuzz gapfactor ghostpen gist_earth gist_ncar gist_stern gluonamplitude gluonpen gluonratio gray green grey hatchepsilon havepagenumber heavyblue heavycyan heavygray heavygreen heavygrey heavymagenta heavyred hline hot hsv hwratio hyperbolanodesnumberfactor identity identity4 ignore implicitshipout inch inches includegraphicscommand inf inferno infinity institutionpen intMax intMin invert invisible itempen itemskip itemstep jet labelmargin landscape lastnode left legendhskip legendlinelength legendmargin legendmarkersize legendmaxrelativewidth legendvskip lightblue lightcyan lightgray lightgreen lightgrey lightmagenta lightolive lightred lightyellow linemargin lm_infmsg lm_shortmsg longdashdotted longdashed magenta magma magneticRadius mantissaBits markangleradius markangleradiusfactor markanglespace markanglespacefactor maxrefinements mediumblue mediumcyan mediumgray mediumgreen mediumgrey mediummagenta mediumred mediumyellow middle minDistDefault minblockheight minblockwidth mincirclediameter minipagemargin minipagewidth minvertexangle miterjoin mm momarrowfactor momarrowlength momarrowmargin momarrowoffset momarrowpen monoPen morepoints nCircle nan newbulletcolor ngraph nil nipy_spectral nmesh nobasealign nodeMarginDefault nodesystem nomarker nopoint noprimary nullpath nullpen numarray ocgindex oldbulletcolor olive orange origin overpaint page pageheight pagemargin pagenumberalign pagenumberpen pagenumberposition pagewidth paleblue palecyan palegray palegreen palegrey palemagenta palered paleyellow parabolanodesnumberfactor perpfactor phi photonamplitude photonpen photonratio pi pink plain plain_bounds plain_scaling plasma plus preamblenodes pt purple r3 r4a r4b randMax realDigits realEpsilon realMax realMin red relativesystem reverse right roundcap roundjoin royalblue salmon saveFunctions scalarpen seismic sequencereal settings signedtrailingzero simp!
 lex solid spinner spring springgreen sqrtEpsilon squarecap squarepen startposition stdin stdout stepfactor stepfraction steppagenumberpen stepping stickframe stickmarksizefactor stickmarkspacefactor summer swap tab10 tab20 tab20b tab20c textpen ticksize tildeframe tildemarksizefactor tinv titlealign titlepagepen titlepageposition titlepen titleskip top trailingzero treeLevelStep treeMinNodeWidth treeNodeStep trembleAngle trembleFrequency trembleRandom tubegranularity twilight twilight_shifted undefined unitcircle unitsquare up urlpen urlskip version vertexpen vertexsize viewportmargin viewportsize viridis vline white winter wistia wye yellow ylabelwidth zeroTransform zerotickfuzz zerowinding ))
+Accent AliceBlue Align Allow AntiqueWhite Apricot Aqua Aquamarine Aspect Azure BeginPoint Beige Bisque Bittersweet Black BlanchedAlmond Blue BlueGreen BlueViolet Blues Both BrBG Break BrickRed Brown BuGn BuPu BurlyWood BurntOrange CCW CMRmap CW CadetBlue CarnationPink Center Centered Cerulean Chartreuse Chocolate Coeff Coral CornflowerBlue Cornsilk Crimson Crop Cyan Dandelion Dark2 DarkBlue DarkCyan DarkGoldenrod DarkGray DarkGreen DarkKhaki DarkMagenta DarkOliveGreen DarkOrange DarkOrchid DarkRed DarkSalmon DarkSeaGreen DarkSlateBlue DarkSlateGray DarkTurquoise DarkViolet DeepPink DeepSkyBlue DefaultHead DimGray DodgerBlue Dotted Down Draw E ENE EPS ESE E_Euler E_PC E_RK2 E_RK3BS Emerald EndPoint Euler Fill FillDraw FireBrick FloralWhite ForestGreen Fuchsia Gainsboro GhostWhite GnBu Gold Goldenrod Gray Green GreenYellow Greens Greys Honeydew HookHead Horizontal HotPink I IgnoreAspect IndianRed Indigo Infinity Ivory JOIN_IN JOIN_OUT JungleGreen Khaki LM_DWARF LM_MACHEP LM_SQRT_DWARF LM_SQRT_GIANT LM_USERTOL Label Lavender LavenderBlush LawnGreen Left LeftJustified LeftSide LemonChiffon LightBlue LightCoral LightCyan LightGoldenrodYellow LightGreen LightGrey LightPink LightSalmon LightSeaGreen LightSkyBlue LightSlateGray LightSteelBlue LightYellow Lime LimeGreen Linear Linen Log Logarithmic Magenta Mahogany Mark MarkFill MarkPath Maroon Max MediumAquamarine MediumBlue MediumOrchid MediumPurple MediumSeaGreen MediumSlateBlue MediumSpringGreen MediumTurquoise MediumVioletRed Melon MidPoint MidnightBlue Min MintCream MistyRose Moccasin Move MoveQuiet Mulberry N NE NNE NNW NULL_VERTEX NW NavajoWhite Navy NavyBlue NoAlign NoCrop NoFill NoSide OldLace Olive OliveDrab OliveGreen OrRd Orange OrangeRed Oranges Orchid Ox Oy PC PRGn Paired PaleGoldenrod PaleGreen PaleTurquoise PaleVioletRed PapayaWhip Pastel1 Pastel2 Peach PeachPuff Periwinkle Peru PiYG PineGreen Pink Plum PowderBlue ProcessBlue PuBu PuBuGn PuOr PuRd Purple Purples RELEASE RK2 RK3 RK3BS RK4 RK5 RK5DP RK5F RawSienna RdBu RdGy RdPu RdYlBu RdYlGn Red !
 RedOrange RedViolet Reds Rhodamine Right RightJustified RightSide RosyBrown RoyalBlue RoyalPurple RubineRed S SE SSE SSW SW SaddleBrown Salmon SandyBrown SeaGreen Seashell Sepia Set1 Set2 Set3 Sienna Silver SimpleHead SkyBlue SlateBlue SlateGray Snow Spectral SpringGreen SteelBlue Suppress SuppressQuiet Tan TeXHead Teal TealBlue Thistle Ticksize Tomato Turquoise UnFill Up VERSION Value Vertical Violet VioletRed W WNW WSW Wheat White WhiteSmoke WildStrawberry XHIGH XLOW XYAlign YAlign YHIGH YLOW Yellow YellowGreen YellowOrange YlGn YlGnBu YlOrBr YlOrRd ZHIGH ZLOW _outpipe aboveequationskip addpenarc addpenline align allowstepping angularsystem animationdelay appendsuffix arcarrowangle arcarrowfactor arrow2sizelimit arrowangle arrowbarb arrowdir arrowfactor arrowhookfactor arrowlength arrowsizelimit arrowtexfactor authorpen autumn axis axiscoverage axislabelfactor background backgroundcolor backgroundpen barfactor barmarksizefactor basealign baselinetemplate bernstein beveljoin bigvertexpen bigvertexsize binary black blue bm bone bottom bp bracedefaultratio braceinnerangle bracemidangle braceouterangle brg brown bullet bwr byfoci byvertices camerafactor chartreuse circlemarkradiusfactor circlenodesnumberfactor circleprecision circlescale cividis cm codefile codepen codeskip colorPen coloredNodes coloredSegments conditionlength conicnodesfactor cool coolwarm copper count cputimeformat crossmarksizefactor currentcoordsys currentlight currentpatterns currentpen currentpicture currentposition currentprojection curvilinearsystem cuttings cyan darkblue darkbrown darkcyan darkgray darkgreen darkgrey darkmagenta darkolive darkred dashdotted dashed datepen dateskip debuggerlines debugging deepblue deepcyan deepgray deepgreen deepgrey deepmagenta deepred deepyellow default defaultControl defaultS defaultbackpen defaultcoordsys defaultexcursion defaultfilename defaultformat defaultmassformat defaultpen defaultseparator differentlengths dot dotfactor dotfilltype dotframe dotted doublelinepen doublelinespacing down duplicateFu!
 zz ellipsenodesnumberfactor eps epsgeo epsilon evenodd expansionfactor extendcap fermionpen figureborder figuremattpen file3 firstnode firststep foregroundcolor fuchsia fuzz gapfactor ghostpen gist_earth gist_ncar gist_stern gluonamplitude gluonpen gluonratio gray green grey hatchepsilon havepagenumber heavyblue heavycyan heavygray heavygreen heavygrey heavymagenta heavyred hline hot hsv hwratio hyperbolanodesnumberfactor identity identity4 ignore implicitshipout inch inches includegraphicscommand inf inferno infinity institutionpen intMax intMin invert invisible itempen itemskip itemstep jet labelmargin landscape lastnode left legendhskip legendlinelength legendmargin legendmarkersize legendmaxrelativewidth legendvskip lightblue lightcyan lightgray lightgreen lightgrey lightmagenta lightolive lightred lightyellow linemargin lm_infmsg lm_shortmsg longdashdotted longdashed magenta magma magneticRadius mantissaBits markangleradius markangleradiusfactor markanglespace markanglespacefactor maxrefinements mediumblue mediumcyan mediumgray mediumgreen mediumgrey mediummagenta mediumred mediumyellow middle minDistDefault minblockheight minblockwidth mincirclediameter minipagemargin minipagewidth minvertexangle miterjoin mm momarrowfactor momarrowlength momarrowmargin momarrowoffset momarrowpen monoPen morepoints nCircle nan newbulletcolor ngraph nil nipy_spectral nmesh nobasealign nodeMarginDefault nodesystem nomarker nopoint noprimary nullpath nullpen numarray ocgindex oldbulletcolor olive orange origin overpaint page pageheight pagemargin pagenumberalign pagenumberpen pagenumberposition pagewidth paleblue palecyan palegray palegreen palegrey palemagenta palered paleyellow parabolanodesnumberfactor perpfactor phi photonamplitude photonpen photonratio pi pink plain plain_bounds plain_scaling plasma plus preamblenodes pt purple r3 r4a r4b randMax realDigits realEpsilon realMax realMin red relativesystem reverse right roundcap roundjoin royalblue salmon saveFunctions scalarpen seismic sequencereal settings signedtrailingz!
 ero simplex solid spinner spring springgreen sqrtEpsilon squarecap squarepen startposition stdin stdout stepfactor stepfraction steppagenumberpen stepping stickframe stickmarksizefactor stickmarkspacefactor summer swap tab10 tab20 tab20b tab20c textpen ticksize tildeframe tildemarksizefactor tinv titlealign titlepagepen titlepageposition titlepen titleskip top trailingzero treeLevelStep treeMinNodeWidth treeNodeStep trembleAngle trembleFrequency trembleRandom tubegranularity twilight twilight_shifted undefined unitcircle unitsquare up urlpen urlskip version vertexpen vertexsize viewportmargin viewportsize viridis vline white winter wistia wye yellow ylabelwidth zeroTransform zerotickfuzz zerowinding ))

Modified: trunk/Build/source/utils/asymptote/asy.list
===================================================================
--- trunk/Build/source/utils/asymptote/asy.list	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/asy.list	2021-01-02 16:31:31 UTC (rev 57291)
@@ -8,7 +8,6 @@
 real sqrtEpsilon;
 string stripextension(string s);
 version version;
-void nosetpagesize();
 void texpreamble(string s);
 pen beveljoin;
 string cputimeformat;
@@ -21,7 +20,7 @@
 filltype dotfilltype;
 pen heavygreen;
 pen heavycyan;
-marginT PenMargin(path, pen)(real begin, real end);
+marginT PenMargin(path, pen)(real begin, real end=<default>);
 marginT PenMargin(path, pen);
 int realDigits;
 pen heavymagenta;
@@ -93,6 +92,8 @@
 bool view();
 void usersetting();
 pair S;
+real abs2(pair z);
+real abs2(triple v);
 void nowarn(string s);
 transform rotate(real angle, pair z=<default>);
 int quotient(int x, int y);
@@ -374,6 +375,7 @@
 pen Symbol(string series=<default>, string shape=<default>);
 slice firstcut(path p, path knife);
 pen squarecap;
+bool isometry(transform t);
 pen squarepen;
 pen deepyellow;
 real barsize(pen p=<default>);
@@ -383,10 +385,8 @@
 bool EndArcArrow(picture, path, pen, marginT(path, pen))(arrowhead arrowhead=<default>, real size=<default>, real angle=<default>, filltype filltype=<default>, position position=<default>);
 void tensorshade(frame f, path[] g, bool stroke=<default>, pen fillrule=<default>, pen[][] p, path[] b=<default>, pair[][] z=<default>, bool copy=<default>);
 void tensorshade(picture pic=<default>, path[] g, bool stroke=<default>, pen fillrule=<default>, pen[][] p, path[] b=<default>, pair[][] z=<default>, bool copy=<default>);
-void tensorshade(frame f, path[] g, bool stroke=<default>, pen fillrule=<default>, pen[] p, path b=<default>, pair[] z);
-void tensorshade(picture pic=<default>, path[] g, bool stroke=<default>, pen fillrule=<default>, pen[] p, path b=<default>, pair[] z);
-void tensorshade(frame f, path[] g, bool stroke=<default>, pen fillrule=<default>, pen[] p, path b=<default>);
-void tensorshade(picture pic=<default>, path[] g, bool stroke=<default>, pen fillrule=<default>, pen[] p, path b=<default>);
+void tensorshade(frame f, path[] g, bool stroke=<default>, pen fillrule=<default>, pen[] p, path b=<default>, pair[] z=<default>);
+void tensorshade(picture pic=<default>, path[] g, bool stroke=<default>, pen fillrule=<default>, pen[] p, path b=<default>, pair[] z=<default>);
 string[] split(string s, string delimiter=<default>);
 void addSaveFunction(void s()());
 object embed3(string, frame, string, string, string, light, projection);
@@ -636,8 +636,8 @@
 path[] sequence(path f(int), int n);
 frame[] sequence(frame f(int), int n);
 triple minbezier(triple[][] p, triple b);
-path trim(path g, real begin, real end);
-marginT DotMargin(path, pen)(real begin, real end);
+path trim(path g, real begin, real end=<default>);
+marginT DotMargin(path, pen)(real begin, real end=<default>);
 marginT DotMargin(path, pen);
 marginT DotMargins(path, pen);
 string string(int x);
@@ -731,7 +731,7 @@
 string[] spinner;
 real[] times(path p, real x);
 real[] times(path p, explicit pair z);
-void drawbeziertriangle(frame f, triple[][] p, triple center, bool straight, pen[] p, real opacity, real shininess, real metallic, real fresnel0, pen[] colors, int interaction, bool primitive=<default>);
+void drawbeziertriangle(frame f, triple[][] p, triple center, bool straight, pen[] p, real opacity, real shininess, real metallic, real fresnel0, pen[] colors, int interaction, int digits, bool primitive=<default>);
 void Draw(picture pic=<default>, path g, pen p=<default>);
 filltype Draw;
 void Draw(picture pic=<default>, explicit path[] g, pen p=<default>);
@@ -805,7 +805,7 @@
 real arctime(path p, real l);
 real arctime(path3 p, real dval);
 pen palemagenta;
-void draw(frame f, triple[][] p, triple center, bool straight, pen[] p, real opacity, real shininess, real metallic, real fresnel0, pen[] colors, int interaction, bool primitive=<default>);
+void draw(frame f, triple[][] p, triple center, bool straight, pen[] p, real opacity, real shininess, real metallic, real fresnel0, pen[] colors, int interaction, int digits, bool primitive=<default>);
 void draw(frame f, triple[] p, real[] knot, real[] weights=<default>, pen p);
 void draw(frame f, triple[][] p, real[] uknot, real[] vknot, real[][] weights=<default>, pen[] p, real opacity, real shininess, real metallic, real fresnel0, pen[] colors);
 void draw(frame f, triple[] v, int[][] vi, triple[] n, int[][] ni, pen[] p, real opacity, real shininess, real metallic, real fresnel0, pen[] c=<default>, int[][] ci=<default>);
@@ -1197,7 +1197,7 @@
 bool prc(string format=<default>);
 projection projection(triple camera, triple up=<default>, triple target=<default>, triple normal=<default>, real zoom=<default>, real angle=<default>, pair viewportshift=<default>, bool showtarget=<default>, bool autoadjust=<default>, bool center=<default>, transformation projector(triple camera, triple up, triple target));
 void endl(file file);
-marginT TrueMargin(path, pen)(real begin, real end);
+marginT TrueMargin(path, pen)(real begin, real end=<default>);
 pair bezier(pair a, pair b, pair c, pair d, real t);
 triple bezier(triple a, triple b, triple c, triple d, real t);
 pair SSE;
@@ -1812,6 +1812,7 @@
 pair interp(explicit pair a, explicit pair b, real t);
 triple interp(triple a, triple b, real t);
 pen interp(pen a, pen b, real t);
+void mapArray(string From, string To);
 frame Seascape(frame f);
 bool interior(int windingnumber, pen fillrule);
 real[] intersect(path p, path q, real fuzz=<default>);
@@ -1824,6 +1825,7 @@
 real[][] intersections(path3 p, triple[][] p, real fuzz=<default>);
 int animate(string args=<default>, string file=<default>, string format=<default>);
 void generate_random_backtrace();
+real RELEASE;
 pair intersectionpoint(path p, path q, real fuzz=<default>);
 pair[] intersectionpoints(path p, path q, real fuzz=<default>);
 pair[] intersectionpoints(explicit path[] p, explicit path[] q, real fuzz=<default>);
@@ -1834,6 +1836,7 @@
 pair Align;
 void exit();
 real[] uniform(real a, real b, int n);
+void type(string type, string name);
 pair viewportsize;
 pair viewportmargin;
 string VERSION;
@@ -1867,7 +1870,7 @@
 pen palegrey;
 void clip(frame f, path[] g, bool stroke=<default>, pen fillrule=<default>, bool copy=<default>);
 void clip(picture pic=<default>, path[] g, bool stroke=<default>, pen fillrule=<default>, bool copy=<default>);
-marginT Margin(path, pen)(real begin, real end);
+marginT Margin(path, pen)(real begin, real end=<default>);
 marginT Margin(path, pen);
 position Relative(real position);
 side Relative(explicit pair align);
@@ -2557,8 +2560,8 @@
 line complementary(explicit line l);
 line[] complementary(explicit segment s);
 arc complementary(arc a);
+point ppoint(arc a, real x);
 bool between(point M, point O, point N);
-point ppoint(arc a, real x);
 path fromFocus(conic co, real angle1, real angle2, int n, bool direction);
 bool sameside(point M, point N, point O);
 bool sameside(point M, point P, line l);
@@ -3012,8 +3015,8 @@
 void xaxisAt(picture pic=<default>, Label L=<default>, void axis(picture, axisT), real xmin=<default>, real xmax=<default>, pen p=<default>, void ticks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<default>)=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, marginT margin(path, pen)=<default>, bool above=<default>, bool opposite=<default>);
 void yaxisAt(picture pic=<default>, Label L=<default>, void axis(picture, axisT), real ymin=<default>, real ymax=<default>, pen p=<default>, void ticks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<default>)=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, marginT margin(path, pen)=<default>, bool above=<default>, bool opposite=<default>);
 void xaxis(picture pic=<default>, Label L=<default>, void axis(picture, axisT)=<default>, real xmin=<default>, real xmax=<default>, pen p=<default>, void ticks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<default>)=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, marginT margin(path, pen)=<default>, bool above=<default>);
+tickvalues generateticks(int sign, Label F=<default>, string ticklabel(real)=<default>, int N, int n=<default>, real Step=<default>, real step=<default>, real Size=<default>, real size=<default>, transform T, pair side, path g, real limit, pen p, ticklocate locate, int[] divisor, bool opposite);
 void yaxis(picture pic=<default>, Label L=<default>, void axis(picture, axisT)=<default>, real ymin=<default>, real ymax=<default>, pen p=<default>, void ticks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<default>)=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, marginT margin(path, pen)=<default>, bool above=<default>, bool autorotate=<default>);
-tickvalues generateticks(int sign, Label F=<default>, string ticklabel(real)=<default>, int N, int n=<default>, real Step=<default>, real step=<default>, real Size=<default>, real size=<default>, transform T, pair side, path g, real limit, pen p, ticklocate locate, int[] divisor, bool opposite);
 void checkconditionlength(int x, int y);
 real xtrans(transform t, real x);
 void Top(picture, axisT)(bool extend=<default>);
@@ -3106,15 +3109,15 @@
 void xaxis3(picture pic=<default>, Label L=<default>, void axis(picture, axisT)=<default>, real xmin=<default>, real xmax=<default>, pen p=<default>, void ticks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)=<default>, bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, marginT3 margin(path3, pen)=<default>, bool above=<default>);
 void yaxis3(picture pic=<default>, Label L=<default>, void axis(picture, axisT)=<default>, real ymin=<default>, real ymax=<default>, pen p=<default>, void ticks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)=<default>, bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, marginT3 margin(path3, pen)=<default>, bool above=<default>);
 void zaxis3(picture pic=<default>, Label L=<default>, void axis(picture, axisT)=<default>, real zmin=<default>, real zmax=<default>, pen p=<default>, void ticks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)=<default>, bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, marginT3 margin(path3, pen)=<default>, bool above=<default>);
-surface surface(triple[][] f, bool[][] cond=<default>);
-surface surface(real[][] f, real[] x, real[] y, real[] xsplinetype(real[], real[])=<default>, real[] ysplinetype(real[], real[])=<default>, bool[][] cond=<default>);
-surface surface(real[][] f, pair a, pair b, real[] xsplinetype(real[], real[]), real[] ysplinetype(real[], real[])=<default>, bool[][] cond=<default>);
-surface surface(real[][] f, pair a, pair b, bool[][] cond=<default>);
-surface surface(triple f(pair z), pair a, pair b, int nu=<default>, int nv=<default>, bool cond(pair z)=<default>);
-surface surface(triple f(pair z), real[] u, real[] v, real[](real[], real[])[] usplinetype, real[](real[], real[])[] vsplinetype=<default>, bool cond(pair z)=<default>);
-surface surface(triple f(pair z), pair a, pair b, int nu=<default>, int nv=<default>, real[](real[], real[])[] usplinetype, real[](real[], real[])[] vsplinetype=<default>, bool cond(pair z)=<default>);
-surface surface(real f(pair z), pair a, pair b, int nx=<default>, int ny=<default>, bool cond(pair z)=<default>);
-surface surface(real f(pair z), pair a, pair b, int nx=<default>, int ny=<default>, real[] xsplinetype(real[], real[]), real[] ysplinetype(real[], real[])=<default>, bool cond(pair z)=<default>);
+surface surface(picture pic=<default>, triple[][] f, bool[][] cond=<default>);
+surface surface(picture pic=<default>, real[][] f, real[] x, real[] y, real[] xsplinetype(real[], real[])=<default>, real[] ysplinetype(real[], real[])=<default>, bool[][] cond=<default>);
+surface surface(picture pic=<default>, real[][] f, pair a, pair b, real[] xsplinetype(real[], real[]), real[] ysplinetype(real[], real[])=<default>, bool[][] cond=<default>);
+surface surface(picture pic=<default>, real[][] f, pair a, pair b, bool[][] cond=<default>);
+surface surface(picture pic=<default>, triple f(pair z), pair a, pair b, int nu=<default>, int nv=<default>, bool cond(pair z)=<default>);
+surface surface(picture pic=<default>, triple f(pair z), real[] u, real[] v, real[](real[], real[])[] usplinetype, real[](real[], real[])[] vsplinetype=<default>, bool cond(pair z)=<default>);
+surface surface(picture pic=<default>, triple f(pair z), pair a, pair b, int nu=<default>, int nv=<default>, real[](real[], real[])[] usplinetype, real[](real[], real[])[] vsplinetype=<default>, bool cond(pair z)=<default>);
+surface surface(picture pic=<default>, real f(pair z), pair a, pair b, int nx=<default>, int ny=<default>, bool cond(pair z)=<default>);
+surface surface(picture pic=<default>, real f(pair z), pair a, pair b, int nx=<default>, int ny=<default>, real[] xsplinetype(real[], real[]), real[] ysplinetype(real[], real[])=<default>, bool cond(pair z)=<default>);
 void XYEquals(picture, axisT)(real x, real y, triple align=<default>, bool extend=<default>);
 triple Dir(real)(triple dir);
 void draw(picture pic=<default>, Label[] L=<default>, void(flatguide3)[][] g, pen[] p, light light=<default>, string name=<default>, render render=<default>, interaction interaction=<default>);
@@ -3126,7 +3129,11 @@
 triple tickMin3(picture pic);
 triple tickMax3(picture pic);
 triple Scale(picture pic=<default>, triple v);
+triple[][] Scale(picture pic=<default>, triple[][] P);
+real ScaleX(picture pic=<default>, real x);
+real ScaleY(picture pic=<default>, real y);
 real ScaleZ(picture pic=<default>, real z);
+real[][] ScaleZ(picture pic=<default>, real[][] P);
 picture vectorfield(path3 vector(pair v), triple f(pair z), pair a, pair b, int nu=<default>, int nv=<default>, bool truesize=<default>, real maxlength=<default>, bool cond(pair z)=<default>, pen p=<default>, bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, marginT3 margin(path3, pen)=<default>, string name=<default>, render render=<default>);
 path3 Circle(triple c, real r, triple normal=<default>, int n=<default>);
 void InTicks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)(Label format=<default>, string ticklabel(real)=<default>, bool beginlabel=<default>, bool endlabel=<default>, int N=<default>, int n=<default>, real Step=<default>, real step=<default>, bool begin=<default>, bool end=<default>, tickvalues modify(tickvalues)=<default>, real Size=<default>, real size=<default>, bool extend=<default>, pen pTick=<default>, pen ptick=<default>);
@@ -3179,6 +3186,7 @@
 surface bispline(real[][] z, real[][] p, real[][] q, real[][] r, real[] x, real[] y, bool[][] cond=<default>);
 real[][][] bispline(real[][] f, real[] x, real[] y, real[] xsplinetype(real[], real[])=<default>, real[] ysplinetype(real[], real[])=<default>, bool[][] cond=<default>);
 real[][][] bispline0(real[][] z, real[][] p, real[][] q, real[][] r, real[] x, real[] y, bool[][] cond=<default>);
+real[] uniform(real T(real x), real Tinv(real x), real a, real b, int n);
 void NoTicks3(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)();
 void NoTicks3(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>);
 bool Crop;
@@ -3304,6 +3312,7 @@
 real LM_DWARF;
 void lm_print_quiet(int n_par, real[] par, int m_dat, real[] fvec, lm_data_type data, int iflag, int iter, int nfev);
 void lm_print_default(int n_par, real[] par, int m_dat, real[] fvec, lm_data_type data, int iflag, int iter, int nfev);
+void mapTemplate(string name, string key, string value, string default);
 real barmarksize(pen p=<default>);
 real barmarksizefactor;
 marker CrossIntervalMarker(int i=<default>, int n=<default>, real size=<default>, real space=<default>, real angle=<default>, pair offset=<default>, bool rotated=<default>, pen p=<default>, frame uniform=<default>, bool above=<default>);
@@ -3504,9 +3513,9 @@
 rational max(rational a, rational b);
 rational max(rational[] a);
 simplex operator init();
+void simplexInit(rational[] c, rational[][] A, int[] s=<default>, rational[] b, int count);
 void simplexPhase1(rational[] c, rational[][] A, rational[] b, int[] Bindices);
 void simplexTableau(rational[][] E, int[] Bindices, int I=<default>, int J=<default>);
-void simplexStandard(rational[] c, rational[][] A, int[] s=<default>, rational[] b);
 void simplexPhase2();
 void simplexWrite(rational[][] E, int[] Bindices, int, int);
 path roundedpath(path A, real R, real S=<default>);
@@ -3555,11 +3564,11 @@
 pen backgroundcolor;
 void normalvideo();
 void title(string s, pair position=<default>, pair align=<default>, pen p=<default>, bool newslide=<default>);
-pen authorpen;
 pen titlepen;
 real titleskip;
 pair dateskip;
 pair titlealign;
+pen authorpen;
 pen titlepagepen;
 void titlepage(string title, string author, string institution=<default>, string date=<default>, string url=<default>, bool newslide=<default>);
 pair titlepageposition;
@@ -3572,9 +3581,9 @@
 transform tinv;
 pair urlskip;
 void numberpage(pen p=<default>);
+pen urlpen;
 bool allowstepping;
 pair currentposition;
-pen urlpen;
 int[] firstnode;
 bool firststep;
 string asywrite(string s, string preamble=<default>);
@@ -3717,8 +3726,8 @@
 Component wye;
 pair max(pair[] z);
 real hwratio;
+pen Orchid;
 pen WildStrawberry;
-pen Orchid;
 pen Magenta;
 pen BrickRed;
 pen CadetBlue;
@@ -3744,8 +3753,8 @@
 pen BurntOrange;
 pen Tan;
 pen Aquamarine;
+pen Brown;
 pen Lavender;
-pen Brown;
 pen RubineRed;
 pen TealBlue;
 pen White;
@@ -3762,8 +3771,8 @@
 pen Rhodamine;
 pen YellowOrange;
 pen Maroon;
+pen ProcessBlue;
 pen YellowGreen;
-pen ProcessBlue;
 pen LimeGreen;
 pen Green;
 pen GreenYellow;
@@ -3778,8 +3787,8 @@
 pen Periwinkle;
 pen Thistle;
 pen Yellow;
+pen JungleGreen;
 pen DarkOrchid;
-pen JungleGreen;
 pen CornflowerBlue;
 pen RoyalBlue;
 pen Melon;
@@ -3812,33 +3821,32 @@
 string VERSION;
 pen Orchid;
 pen Indigo;
-pen Seashell;
 pen Beige;
 pen SlateBlue;
 pen SlateGray;
 pen Magenta;
-pen GhostWhite;
 pen CadetBlue;
 pen DeepPink;
+pen LavenderBlush;
+pen Wheat;
 pen SpringGreen;
 pen MidnightBlue;
+pen PeachPuff;
 pen Olive;
 pen OliveDrab;
 pen Salmon;
-pen LavenderBlush;
-pen Wheat;
+pen Lime;
+pen SteelBlue;
 pen Chocolate;
 pen Cyan;
 pen Gainsboro;
 pen Ivory;
-pen PeachPuff;
 pen PapayaWhip;
 pen Red;
 pen Pink;
 pen MintCream;
 pen DarkTurquoise;
-pen Lime;
-pen SteelBlue;
+pen LemonChiffon;
 pen Gray;
 pen MediumBlue;
 pen MediumOrchid;
@@ -3850,6 +3858,7 @@
 pen MediumTurquoise;
 pen MediumVioletRed;
 pen Plum;
+pen Aqua;
 pen Blue;
 pen Gold;
 pen BlueViolet;
@@ -3857,18 +3866,16 @@
 pen ForestGreen;
 pen Chartreuse;
 pen NavajoWhite;
-pen LemonChiffon;
 pen Tan;
 pen DarkMagenta;
 pen AntiqueWhite;
+pen PaleTurquoise;
 pen Aquamarine;
-pen PaleTurquoise;
-pen Aqua;
 pen IndianRed;
 pen Crimson;
-pen Lavender;
 pen Azure;
 pen LawnGreen;
+pen Lavender;
 pen Brown;
 pen BurlyWood;
 pen Moccasin;
@@ -3877,6 +3884,7 @@
 pen White;
 pen Purple;
 pen WhiteSmoke;
+pen Sienna;
 pen DimGray;
 pen Orange;
 pen OrangeRed;
@@ -3884,27 +3892,28 @@
 pen Honeydew;
 pen Bisque;
 pen RosyBrown;
-pen Sienna;
 pen Black;
 pen Khaki;
 pen FireBrick;
+pen DarkOliveGreen;
+pen DarkOrange;
 pen Snow;
 pen Maroon;
 pen YellowGreen;
 pen LimeGreen;
+pen Silver;
 pen OldLace;
-pen DarkOliveGreen;
-pen DarkOrange;
 pen Green;
 pen GreenYellow;
 pen DarkCyan;
 pen FloralWhite;
 pen DarkRed;
-pen Silver;
+pen SandyBrown;
 pen BlanchedAlmond;
 pen PowderBlue;
 pen DarkGray;
 pen DarkGreen;
+pen DeepSkyBlue;
 pen DarkGoldenrod;
 pen SkyBlue;
 pen SeaGreen;
@@ -3912,13 +3921,12 @@
 pen Teal;
 pen Violet;
 pen AliceBlue;
-pen SandyBrown;
 pen HotPink;
 pen DodgerBlue;
 pen SaddleBrown;
 pen Tomato;
 pen DarkKhaki;
-pen DeepSkyBlue;
+pen Cornsilk;
 pen Thistle;
 pen LightBlue;
 pen LightCoral;
@@ -3936,8 +3944,8 @@
 pen Navy;
 pen LightSkyBlue;
 pen PaleVioletRed;
+pen Seashell;
 pen DarkOrchid;
-pen Cornsilk;
 pen CornflowerBlue;
 pen LightSlateGray;
 pen LightSteelBlue;
@@ -3945,6 +3953,7 @@
 pen LightYellow;
 pen Coral;
 pen MistyRose;
+pen GhostWhite;
 pen DarkSalmon;
 pen DarkSeaGreen;
 pen RoyalBlue;

Modified: trunk/Build/source/utils/asymptote/asymptote.nsi
===================================================================
--- trunk/Build/source/utils/asymptote/asymptote.nsi	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/asymptote.nsi	2021-01-02 16:31:31 UTC (rev 57291)
@@ -1,6 +1,6 @@
 !define PRODUCT_NAME "Asymptote"
 !include AsymptoteInstallInfo.nsi
-!define PRODUCT_WEB_SITE "http://asymptote.sourceforge.net/"
+!define PRODUCT_WEB_SITE "https://asymptote.sourceforge.io/"
 !define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\Asymptote"
 !define PRODUCT_FILE_TYPE_REGKEY1 "Software\Classes\.asy"
 !define PRODUCT_FILE_TYPE_REGKEY2 "Software\Classes\ASYFile\shell\open\command"

Modified: trunk/Build/source/utils/asymptote/asymptote.spec
===================================================================
--- trunk/Build/source/utils/asymptote/asymptote.spec	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/asymptote.spec	2021-01-02 16:31:31 UTC (rev 57291)
@@ -3,13 +3,13 @@
 %global __python %{__python3}
 
 Name:           asymptote
-Version:        2.65
+Version:        2.68
 Release:        1%{?dist}
 Summary:        Descriptive vector graphics language
 
 Group:          Applications/Publishing
 License:        GPL
-URL:            http://asymptote.sourceforge.net/
+URL:            https://asymptote.sourceforge.io/
 Source:         http://downloads.sourceforge.net/sourceforge/asymptote/asymptote-%{version}.src.tgz
 BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
 
@@ -20,9 +20,11 @@
 BuildRequires:  gsl-devel
 BuildRequires:  glm-devel
 BuildRequires:  tetex-latex
-BuildRequires:  ghostscript >= 9.14
+BuildRequires:  ghostscript >= 9.52
+BuildRequires:  dvisvgm >= 2.9.1
 BuildRequires:  texinfo >= 4.7
 BuildRequires:  ImageMagick
+BuildRequires:  libtirpc-devel
 
 Requires:       tetex-latex
 Requires:       freeglut-devel >= 3.0.0

Modified: trunk/Build/source/utils/asymptote/base/animation.asy
===================================================================
--- trunk/Build/source/utils/asymptote/base/animation.asy	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/base/animation.asy	2021-01-02 16:31:31 UTC (rev 57291)
@@ -30,7 +30,7 @@
   string prefix;
   bool global; // If true, use a global scaling for all frames; this requires
   // extra memory since the actual shipout is deferred until all frames have
-  // been generated. 
+  // been generated.
 
   void operator init(string prefix="", bool global=true) {
     prefix=replace(stripdirectory(outprefix(prefix))," ","_");
@@ -37,7 +37,7 @@
     this.prefix=prefix;
     this.global=global;
   }
-  
+
   string basename(string prefix=stripextension(prefix)) {
     return "_"+prefix;
   }
@@ -57,7 +57,7 @@
     plain.shipout(name,f,format=format,view=false);
     files.push(name+"."+format);
   }
-  
+
   void add(picture pic=currentpicture, enclosure enclosure=NoBox) {
     if(global) {
       ++index;
@@ -64,7 +64,7 @@
       pictures.push(pic.copy());
     } else this.shipout(enclosure(pic.fit()));
   }
-  
+
   void purge(bool keep=settings.keep) {
     if(!keep) {
       for(int i=0; i < files.length; ++i)
@@ -130,7 +130,7 @@
     return s;
   }
 
-  bool pdflatex() 
+  bool pdflatex()
   {
     return latex() && pdf();
   }
@@ -143,13 +143,13 @@
     if(!pdflatex())
       abort("inline pdf animations require -tex pdflatex or -tex xelatex");
     if(settings.outformat != "") settings.outformat="pdf";
-    
+
     string filename=basename();
     string pdfname=filename+".pdf";
 
     if(global)
       export(filename,enclosure,multipage=multipage);
-    
+
     if(!keep) {
       exitfcn currentexitfunction=atexit();
       void exitfunction() {

Modified: trunk/Build/source/utils/asymptote/base/asy-mode.el
===================================================================
--- trunk/Build/source/utils/asymptote/base/asy-mode.el	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/base/asy-mode.el	2021-01-02 16:31:31 UTC (rev 57291)
@@ -102,7 +102,7 @@
 
 This package seems to work with XEmacs 21.4 but not all the features are available (in particular syntax highlighting).
 
-Report bugs to http://asymptote.sourceforge.net
+Report bugs to https://github.com/vectorgraphics/asymptote/issues
 
 Some variables can be customized: M-x customize-group <RET> asymptote <RET>."
 

Modified: trunk/Build/source/utils/asymptote/base/babel.asy
===================================================================
--- trunk/Build/source/utils/asymptote/base/babel.asy	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/base/babel.asy	2021-01-02 16:31:31 UTC (rev 57291)
@@ -1,4 +1,4 @@
-void babel(string s) 
+void babel(string s)
 {
   usepackage("babel",s);
 }

Modified: trunk/Build/source/utils/asymptote/base/bezulate.asy
===================================================================
--- trunk/Build/source/utils/asymptote/base/bezulate.asy	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/base/bezulate.asy	2021-01-02 16:31:31 UTC (rev 57291)
@@ -106,29 +106,29 @@
       //if(direction == 0) // Try a random direction
       //  direction=expi(2pi*unitrand());
       //pair start=point(inners[curveIndex],0);
-      
+
       // find shortest distance between a node on the inner curve and a node
       // on the outer curve
-      
+
       real mindist = d;
       int inner_i = 0;
       int outer_i = 0;
       for(int ni = 0; ni < length(inners[curveIndex]); ++ni)
-      {
+        {
           for(int no = 0; no < length(outer); ++no)
-          {
+            {
               real dist = abs(point(inners[curveIndex],ni)-point(outer,no));
               if(dist < mindist)
-              {
+                {
                   inner_i = ni;
                   outer_i = no;
                   mindist = dist;
-              }
-          }
-      }
+                }
+            }
+        }
       pair start=point(inners[curveIndex],inner_i);
-      pair end = point(outer,outer_i);  
-      
+      pair end = point(outer,outer_i);
+
       // find first intersection of line segment with outer curve
       //real[][] ints=intersections(start,start+d*direction,outer);
       real[][] ints=intersections(start,end,outer);
@@ -140,7 +140,7 @@
       real earliestTime=1;
       for(int j=0; j < inners.length; ++j) {
         real[][] ints=intersections(end,start,inners[j]);
-        
+
         if(ints.length > 0 && ints[0][0] < earliestTime) {
           earliestTime=ints[0][0]; // time on end--start
           starttime=ints[0][1]; // time on inner curve
@@ -148,8 +148,8 @@
         }
       }
       start=point(inners[curveIndex],starttime);
-      
-      
+
+
       bool found_forward = false;
       real timeoffset_forward = 2;
       path portion_forward;
@@ -162,7 +162,7 @@
                               point(outer,endtime+timeoffset_forward)) == 2)
           {
             portion_forward = subpath(outer,endtime,endtime+timeoffset_forward)--start--cycle;
-            
+
             found_forward=true;
             // check if an inner curve is inside the portion
             for(int k = 0; found_forward && k < inners.length; ++k)
@@ -173,7 +173,7 @@
               }
           }
       }
-      
+
       bool found_backward = false;
       real timeoffset_backward = -2;
       path portion_backward;
@@ -197,29 +197,29 @@
       real timeoffset;
       path portion;
       if(found_forward && !found_backward)
-      {
-        timeoffset = timeoffset_forward;
-        portion = portion_forward;
-      }
-      else if(found_backward && !found_forward)
-      {
-        timeoffset = timeoffset_backward;
-        portion = portion_backward;
-      }
-      else // assert handles case of neither found
-      {
-        if(timeoffset_forward > -timeoffset_backward)
         {
           timeoffset = timeoffset_forward;
           portion = portion_forward;
         }
-        else
+      else if(found_backward && !found_forward)
         {
           timeoffset = timeoffset_backward;
           portion = portion_backward;
-         }
-      }
-      
+        }
+      else // assert handles case of neither found
+        {
+          if(timeoffset_forward > -timeoffset_backward)
+            {
+              timeoffset = timeoffset_forward;
+              portion = portion_forward;
+            }
+          else
+            {
+              timeoffset = timeoffset_backward;
+              portion = portion_backward;
+            }
+        }
+
       endtime=min(endtime,endtime+timeoffset);
       // or go from timeoffset+timeoffset_backward to timeoffset+timeoffset_forward?
       timeoffset=abs(timeoffset);

Modified: trunk/Build/source/utils/asymptote/base/binarytree.asy
===================================================================
--- trunk/Build/source/utils/asymptote/base/binarytree.asy	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/base/binarytree.asy	2021-01-02 16:31:31 UTC (rev 57291)
@@ -48,8 +48,8 @@
   int right_span,total_right_span;
   void update_spans();
 
-  // Get the horizontal span of the tree consisting of the current 
-  // node plus the whole subtree that is rooted at the right child 
+  // Get the horizontal span of the tree consisting of the current
+  // node plus the whole subtree that is rooted at the right child
   // (condensed mode)
   int getTotalRightSpan() {
     if(spans_calculated == false) {
@@ -59,8 +59,8 @@
     return total_right_span;
   }
 
-  // Get the horizontal span of the tree consisting of the current 
-  // node plus the whole subtree that is rooted at the left child 
+  // Get the horizontal span of the tree consisting of the current
+  // node plus the whole subtree that is rooted at the left child
   // (condensed mode)
   int getTotalLeftSpan() {
     if(spans_calculated == false) {
@@ -87,27 +87,27 @@
     return left_span;
   }
 
-  // Update all span figures for this node. 
+  // Update all span figures for this node.
   // condensed mode)
   update_spans=new void() {
-    if(spans_calculated == true)
-      return;
+                           if(spans_calculated == true)
+                             return;
 
-    left_span=0;
-    total_left_span=0;
-    right_span=0;
-    total_right_span=0;
+                           left_span=0;
+                           total_left_span=0;
+                           right_span=0;
+                           total_right_span=0;
 
-    if(left != null) {
-      left_span=left.getTotalRightSpan()+1;
-      total_left_span=left_span+left.getTotalLeftSpan();
-    }
+                           if(left != null) {
+                             left_span=left.getTotalRightSpan()+1;
+                             total_left_span=left_span+left.getTotalLeftSpan();
+                           }
 
-    if(right != null) {
-      right_span=right.getTotalLeftSpan()+1;
-      total_right_span=right_span+right.getTotalRightSpan();
-    }
-    spans_calculated=true;
+                           if(right != null) {
+                             right_span=right.getTotalLeftSpan()+1;
+                             total_right_span=right_span+right.getTotalRightSpan();
+                           }
+                           spans_calculated=true;
   };
 
   // set the left child of this node
@@ -134,20 +134,20 @@
     else
       return parent.getLevel()+1;
   }
-        
+
   // set the children of this binarytreeNode
   void setChildren(binarytreeNode left, binarytreeNode right) {
     setLeft(left);
     setRight(right);
   }
-        
-  // create a new binarytreeNode with key <key> 
+
+  // create a new binarytreeNode with key <key>
   static binarytreeNode binarytreeNode(int key) {
     binarytreeNode toReturn=new binarytreeNode;
     toReturn.key=key;
     return toReturn;
   }
-        
+
   // returns the height of the subtree rooted at this node.
   int getHeight() {
     if(left == null && right == null)
@@ -156,7 +156,7 @@
       return right.getHeight()+1;
     if(right == null)
       return left.getHeight()+1;
-                
+
     return max(left.getHeight(),right.getHeight())+1;
   }
 }
@@ -175,12 +175,12 @@
             int height, real minDist, real levelDist, real nodeDiameter,
             pen p=currentpen, bool condensed=false) {
   Label label=Label(math((string) node.key),pos);
-        
-  binarytreeNode left=node.left;        
+
+  binarytreeNode left=node.left;
   binarytreeNode right=node.right;
 
   // return the distance for two nodes at the given <level> when the
-  // containing tree has height <height> 
+  // containing tree has height <height>
   // and the minimal distance between two nodes is <minDist> .
   real getDistance(int level, int height, real minDist) {
     return(nodeDiameter+minDist)*2^(height-level);
@@ -205,15 +205,15 @@
   // arrow.
   void deferredDrawNodeConnection(pair parentPos, pair childPos) {
     pic.add(new void(frame f, transform t) {
-        pair start,end; 
-        // calculate connection path 
-        transform T=shift(nodeDiameter/2*unit(t*childPos-t*parentPos));  
-        path arr=(T*t*parentPos)--(inverse(T)*t*childPos);  
-        draw(f,PenMargin(arr,p).g,p,Arrow(5));  
-      }); 
+        pair start,end;
+        // calculate connection path
+        transform T=shift(nodeDiameter/2*unit(t*childPos-t*parentPos));
+        path arr=(T*t*parentPos)--(inverse(T)*t*childPos);
+        draw(f,PenMargin(arr,p).g,p,Arrow(5));
+      });
     pic.addPoint(parentPos);
     pic.addPoint(childPos);
-  } 
+  }
 
   if(left != null) {
     pair childPos;
@@ -238,13 +238,13 @@
     draw(pic,right,childPos,height,minDist,levelDist,nodeDiameter,p,condensed);
     deferredDrawNodeConnection(pos,childPos);
   }
-        
+
   picture obj;
   draw(obj,circle((0,0),nodeDiameter/2),p);
   label(obj,label,(0,0),p);
-        
+
   add(pic,obj,pos);
-        
+
   return label;
 }
 
@@ -270,18 +270,18 @@
 struct binarytree {
   binarytreeNode root;
   int[] keys;
-        
+
   // add the given <key> to the tree by searching for its place and
   // inserting it there.
   void addKey(int key) {
     binarytreeNode newNode=binarytreeNode(key);
-                
+
     if(root == null) {
       root=newNode;
       keys.push(key);
-      return; 
+      return;
     }
-                
+
     binarytreeNode n=root;
     while(n != null) {
       if(key < n.key) {
@@ -303,7 +303,7 @@
       }
     }
   }
-        
+
   // return the height of the tree
   int getHeight() {
     if(root == null)
@@ -311,7 +311,7 @@
     else
       return root.getHeight();
   }
-        
+
   // add all given keys to the tree sequentially
   void addSearchKeys(int[] keys) {
     for(int i=0; i < keys.length; ++i) {
@@ -321,7 +321,7 @@
         addKey(key);
     }
   }
-        
+
   binarytreeNode build(key[] keys, int[] ind) {
     if(ind[0] >= keys.length) return null;
     key k=keys[ind[0]];
@@ -369,9 +369,9 @@
           pen p=currentpen, bool condensed=false)
 {
   int[] keys=tree.getKeys();
-        
+
   // calculate the node diameter so that all keys fit into it
-  frame f; 
+  frame f;
   for(int i=0; i < keys.length; ++i)
     label(f,math(string(keys[i])),p);
 

Modified: trunk/Build/source/utils/asymptote/base/bsp.asy
===================================================================
--- trunk/Build/source/utils/asymptote/base/bsp.asy	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/base/bsp.asy	2021-01-02 16:31:31 UTC (rev 57291)
@@ -33,13 +33,13 @@
 
 picture operator cast(face f) {return f.pic;}
 face operator cast(path3 p) {return face(p);}
-  
+
 struct line {
   triple point;
   triple dir;
 }
 
-private line intersection(face a, face b) 
+private line intersection(face a, face b)
 {
   line L;
   L.point=intersectionpoint(a.normal,a.point,b.normal,b.point);
@@ -49,12 +49,12 @@
 
 struct half {
   pair[] left,right;
-  
+
   // Sort the points in the pair array z according to whether they lie on the
   // left or right side of the line L in the direction dir passing through P.
   // Points exactly on L are considered to be on the right side.
   // Also push any points of intersection of L with the path operator --(... z)
-  // onto each of the arrays left and right. 
+  // onto each of the arrays left and right.
   void operator init(pair dir, pair P ... pair[] z) {
     pair lastz;
     pair invdir=dir != 0 ? 1/dir : 0;
@@ -73,7 +73,7 @@
     }
   }
 }
-  
+
 struct splitface {
   face back,front;
 }
@@ -84,7 +84,7 @@
   splitface S;
 
   void nointersection() {
-    if(abs(dot(a.point-P.camera,a.normal)) >= 
+    if(abs(dot(a.point-P.camera,a.normal)) >=
        abs(dot(cut.point-P.camera,cut.normal))) {
       S.back=a;
       S.front=null;
@@ -113,7 +113,7 @@
     nointersection();
     return S;
   }
-    
+
   pair point=a.t*project(L.point,P);
   pair dir=a.t*project(L.point+L.dir,P)-point;
   pair invdir=dir != 0 ? 1/dir : 0;
@@ -122,7 +122,7 @@
 
   real t=intersect(apoint,P.camera,cut.normal,cut.point);
   bool rightfront=left ^ (t <= 0 || t >= 1);
-  
+
   face back=a, front=a.copy();
   pair max=max(a.fit);
   pair min=min(a.fit);
@@ -151,7 +151,7 @@
   bsp back;
   bsp front;
   face node;
-  
+
   // Construct the bsp.
   void operator init(face[] faces, projection P) {
     if(faces.length != 0) {
@@ -166,7 +166,7 @@
       this.back=bsp(back,P);
     }
   }
-  
+
   // Draw from back to front.
   void add(frame f) {
     if(back != null) back.add(f);
@@ -183,22 +183,22 @@
   face[] Faces=new face[n];
   for(int i=0; i < n; ++i)
     Faces[i]=faces[i].copy();
-  
+
   pic.add(new void (frame f, transform t, transform T,
-                                pair m, pair M) {
-                        // Fit all of the pictures so we know their exact sizes.
-                        face[] faces=new face[n];
-                        for(int i=0; i < n; ++i) {
-                          faces[i]=Faces[i].copy();
-                          face F=faces[i];
-                          F.t=t*T*F.pic.T;
-                          F.fit=F.pic.fit(t,T*F.pic.T,m,M);
-                        }
-    
-                        bsp bsp=bsp(faces,P);
-                        if(bsp != null) bsp.add(f);
+                    pair m, pair M) {
+            // Fit all of the pictures so we know their exact sizes.
+            face[] faces=new face[n];
+            for(int i=0; i < n; ++i) {
+              faces[i]=Faces[i].copy();
+              face F=faces[i];
+              F.t=t*T*F.pic.T;
+              F.fit=F.pic.fit(t,T*F.pic.T,m,M);
+            }
+
+            bsp bsp=bsp(faces,P);
+            if(bsp != null) bsp.add(f);
           });
-    
+
   for(int i=0; i < n; ++i) {
     picture F=Faces[i].pic;
     pic.userBox3(F.userMin3(), F.userMax3());

Modified: trunk/Build/source/utils/asymptote/base/colormap.asy
===================================================================
--- trunk/Build/source/utils/asymptote/base/colormap.asy	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/base/colormap.asy	2021-01-02 16:31:31 UTC (rev 57291)
@@ -10,7 +10,7 @@
 //    pen[] Palette = wistia.palette()
 //
 // There are two types of palettes. For a complete list see below:
-// 
+//
 // 1) The segmented palettes can be used as
 //      <name>.palette(int NColors=256, real gamma=1.)
 //         NColors are the number of colors in the palette
@@ -19,7 +19,7 @@
 // 2) The listed palettes can only be used as
 //      <name>.palette()
 //
-// Both functions return pen[] that can be used as a palette in the 
+// Both functions return pen[] that can be used as a palette in the
 // module palette.
 
 // list of palettes
@@ -112,7 +112,7 @@
 // SOURCE CODE
 //
 private real[] makeMappingArray(int N, triple[] data, real gamma=1.) {
-  real[] x; 
+  real[] x;
   real[] y0;
   real[] y1;
 
@@ -121,13 +121,13 @@
     y0.push(data[i].y);
     y1.push(data[i].z);
   };
-  
+
   x = x*(N-1);
-  real[] lut = new real[N]; 
+  real[] lut = new real[N];
   real[] xind = (N - 1) * uniform(0, 1, N-1) ** gamma;
   int[] ind = map(new int(real xi) {return search(x, xi);}, xind);
   ind = ind[1:N-1]; // note that the index is shifted from python
-  
+
   real[] dist = (xind[1:N-1] - x[ind])/(x[ind+1] - x[ind]);
 
   lut[1:N-1] = dist * (y0[ind+1] - y1[ind]) + y1[ind];
@@ -153,9 +153,9 @@
     real[] green = makeMappingArray(NColors, this.g, gamma);
     real[] blue  = makeMappingArray(NColors, this.b, gamma);
 
-    pen[] pal = 
-      sequence(new pen(int i) {return rgb(red[i], green[i], blue[i]);}, 
-        NColors);
+    pen[] pal =
+      sequence(new pen(int i) {return rgb(red[i], green[i], blue[i]);},
+               NColors);
 
     return pal;
   }
@@ -174,3717 +174,3717 @@
 // DATA
 //
 list_data Accent = list_data(new pen[] {
-  rgb (0.4980392156862745, 0.788235294117647, 0.4980392156862745) ,
-  rgb (0.7450980392156863, 0.6823529411764706, 0.8313725490196079) ,
-  rgb (0.9921568627450981, 0.7529411764705882, 0.5254901960784314) ,
-  rgb (1.0, 1.0, 0.6) ,
-  rgb (0.2196078431372549, 0.4235294117647059, 0.6901960784313725) ,
-  rgb (0.9411764705882353, 0.00784313725490196, 0.4980392156862745) ,
-  rgb (0.7490196078431373, 0.3568627450980392, 0.09019607843137253) ,
-  rgb (0.4, 0.4, 0.4)
-});
+    rgb (0.4980392156862745, 0.788235294117647, 0.4980392156862745) ,
+      rgb (0.7450980392156863, 0.6823529411764706, 0.8313725490196079) ,
+      rgb (0.9921568627450981, 0.7529411764705882, 0.5254901960784314) ,
+      rgb (1.0, 1.0, 0.6) ,
+      rgb (0.2196078431372549, 0.4235294117647059, 0.6901960784313725) ,
+      rgb (0.9411764705882353, 0.00784313725490196, 0.4980392156862745) ,
+      rgb (0.7490196078431373, 0.3568627450980392, 0.09019607843137253) ,
+      rgb (0.4, 0.4, 0.4)
+      });
 
 
 list_data Blues = list_data(new pen[] {
-  rgb (0.9686274509803922, 0.984313725490196, 1.0) ,
-  rgb (0.8705882352941177, 0.9215686274509803, 0.9686274509803922) ,
-  rgb (0.7764705882352941, 0.8588235294117647, 0.9372549019607843) ,
-  rgb (0.6196078431372549, 0.792156862745098, 0.8823529411764706) ,
-  rgb (0.4196078431372549, 0.6823529411764706, 0.8392156862745098) ,
-  rgb (0.25882352941176473, 0.5725490196078431, 0.7764705882352941) ,
-  rgb (0.12941176470588237, 0.44313725490196076, 0.7098039215686275) ,
-  rgb (0.03137254901960784, 0.3176470588235294, 0.611764705882353) ,
-  rgb (0.03137254901960784, 0.18823529411764706, 0.4196078431372549)
-});
+    rgb (0.9686274509803922, 0.984313725490196, 1.0) ,
+      rgb (0.8705882352941177, 0.9215686274509803, 0.9686274509803922) ,
+      rgb (0.7764705882352941, 0.8588235294117647, 0.9372549019607843) ,
+      rgb (0.6196078431372549, 0.792156862745098, 0.8823529411764706) ,
+      rgb (0.4196078431372549, 0.6823529411764706, 0.8392156862745098) ,
+      rgb (0.25882352941176473, 0.5725490196078431, 0.7764705882352941) ,
+      rgb (0.12941176470588237, 0.44313725490196076, 0.7098039215686275) ,
+      rgb (0.03137254901960784, 0.3176470588235294, 0.611764705882353) ,
+      rgb (0.03137254901960784, 0.18823529411764706, 0.4196078431372549)
+      });
 
 
 list_data BrBG = list_data(new pen[] {
-  rgb (0.32941176470588235, 0.18823529411764706, 0.0196078431372549) ,
-  rgb (0.5490196078431373, 0.3176470588235294, 0.0392156862745098) ,
-  rgb (0.7490196078431373, 0.5058823529411764, 0.17647058823529413) ,
-  rgb (0.8745098039215686, 0.7607843137254902, 0.49019607843137253) ,
-  rgb (0.9647058823529412, 0.9098039215686274, 0.7647058823529411) ,
-  rgb (0.9607843137254902, 0.9607843137254902, 0.9607843137254902) ,
-  rgb (0.7803921568627451, 0.9176470588235294, 0.8980392156862745) ,
-  rgb (0.5019607843137255, 0.803921568627451, 0.7568627450980392) ,
-  rgb (0.20784313725490197, 0.592156862745098, 0.5607843137254902) ,
-  rgb (0.00392156862745098, 0.4, 0.3686274509803922) ,
-  rgb (0.0, 0.23529411764705882, 0.18823529411764706)
-});
+    rgb (0.32941176470588235, 0.18823529411764706, 0.0196078431372549) ,
+      rgb (0.5490196078431373, 0.3176470588235294, 0.0392156862745098) ,
+      rgb (0.7490196078431373, 0.5058823529411764, 0.17647058823529413) ,
+      rgb (0.8745098039215686, 0.7607843137254902, 0.49019607843137253) ,
+      rgb (0.9647058823529412, 0.9098039215686274, 0.7647058823529411) ,
+      rgb (0.9607843137254902, 0.9607843137254902, 0.9607843137254902) ,
+      rgb (0.7803921568627451, 0.9176470588235294, 0.8980392156862745) ,
+      rgb (0.5019607843137255, 0.803921568627451, 0.7568627450980392) ,
+      rgb (0.20784313725490197, 0.592156862745098, 0.5607843137254902) ,
+      rgb (0.00392156862745098, 0.4, 0.3686274509803922) ,
+      rgb (0.0, 0.23529411764705882, 0.18823529411764706)
+      });
 
 
 list_data BuGn = list_data(new pen[] {
-  rgb (0.9686274509803922, 0.9882352941176471, 0.9921568627450981) ,
-  rgb (0.8980392156862745, 0.9607843137254902, 0.9764705882352941) ,
-  rgb (0.8, 0.9254901960784314, 0.9019607843137255) ,
-  rgb (0.6, 0.8470588235294118, 0.788235294117647) ,
-  rgb (0.4, 0.7607843137254902, 0.6431372549019608) ,
-  rgb (0.2549019607843137, 0.6823529411764706, 0.4627450980392157) ,
-  rgb (0.13725490196078433, 0.5450980392156862, 0.27058823529411763) ,
-  rgb (0.0, 0.42745098039215684, 0.17254901960784313) ,
-  rgb (0.0, 0.26666666666666666, 0.10588235294117647)
-});
+    rgb (0.9686274509803922, 0.9882352941176471, 0.9921568627450981) ,
+      rgb (0.8980392156862745, 0.9607843137254902, 0.9764705882352941) ,
+      rgb (0.8, 0.9254901960784314, 0.9019607843137255) ,
+      rgb (0.6, 0.8470588235294118, 0.788235294117647) ,
+      rgb (0.4, 0.7607843137254902, 0.6431372549019608) ,
+      rgb (0.2549019607843137, 0.6823529411764706, 0.4627450980392157) ,
+      rgb (0.13725490196078433, 0.5450980392156862, 0.27058823529411763) ,
+      rgb (0.0, 0.42745098039215684, 0.17254901960784313) ,
+      rgb (0.0, 0.26666666666666666, 0.10588235294117647)
+      });
 
 
 list_data BuPu = list_data(new pen[] {
-  rgb (0.9686274509803922, 0.9882352941176471, 0.9921568627450981) ,
-  rgb (0.8784313725490196, 0.9254901960784314, 0.9568627450980393) ,
-  rgb (0.7490196078431373, 0.8274509803921568, 0.9019607843137255) ,
-  rgb (0.6196078431372549, 0.7372549019607844, 0.8549019607843137) ,
-  rgb (0.5490196078431373, 0.5882352941176471, 0.7764705882352941) ,
-  rgb (0.5490196078431373, 0.4196078431372549, 0.6941176470588235) ,
-  rgb (0.5333333333333333, 0.2549019607843137, 0.615686274509804) ,
-  rgb (0.5058823529411764, 0.05882352941176471, 0.48627450980392156) ,
-  rgb (0.30196078431372547, 0.0, 0.29411764705882354)
-});
+    rgb (0.9686274509803922, 0.9882352941176471, 0.9921568627450981) ,
+      rgb (0.8784313725490196, 0.9254901960784314, 0.9568627450980393) ,
+      rgb (0.7490196078431373, 0.8274509803921568, 0.9019607843137255) ,
+      rgb (0.6196078431372549, 0.7372549019607844, 0.8549019607843137) ,
+      rgb (0.5490196078431373, 0.5882352941176471, 0.7764705882352941) ,
+      rgb (0.5490196078431373, 0.4196078431372549, 0.6941176470588235) ,
+      rgb (0.5333333333333333, 0.2549019607843137, 0.615686274509804) ,
+      rgb (0.5058823529411764, 0.05882352941176471, 0.48627450980392156) ,
+      rgb (0.30196078431372547, 0.0, 0.29411764705882354)
+      });
 
 
 seg_data CMRmap = seg_data(
-  new triple[] {  // red
-     (0.0, 0.0, 0.0) ,
-     (0.125, 0.15, 0.15) ,
-     (0.25, 0.3, 0.3) ,
-     (0.375, 0.6, 0.6) ,
-     (0.5, 1.0, 1.0) ,
-     (0.625, 0.9, 0.9) ,
-     (0.75, 0.9, 0.9) ,
-     (0.875, 0.9, 0.9) ,
-     (1.0, 1.0, 1.0)
-  },
-  new triple[] {  // green
-     (0.0, 0.0, 0.0) ,
-     (0.125, 0.15, 0.15) ,
-     (0.25, 0.15, 0.15) ,
-     (0.375, 0.2, 0.2) ,
-     (0.5, 0.25, 0.25) ,
-     (0.625, 0.5, 0.5) ,
-     (0.75, 0.75, 0.75) ,
-     (0.875, 0.9, 0.9) ,
-     (1.0, 1.0, 1.0)
-  },
-  new triple[] {  // blue
-     (0.0, 0.0, 0.0) ,
-     (0.125, 0.5, 0.5) ,
-     (0.25, 0.75, 0.75) ,
-     (0.375, 0.5, 0.5) ,
-     (0.5, 0.15, 0.15) ,
-     (0.625, 0.0, 0.0) ,
-     (0.75, 0.1, 0.1) ,
-     (0.875, 0.5, 0.5) ,
-     (1.0, 1.0, 1.0)
-  }
-);
+                           new triple[] {  // red
+                             (0.0, 0.0, 0.0) ,
+                               (0.125, 0.15, 0.15) ,
+                               (0.25, 0.3, 0.3) ,
+                               (0.375, 0.6, 0.6) ,
+                               (0.5, 1.0, 1.0) ,
+                               (0.625, 0.9, 0.9) ,
+                               (0.75, 0.9, 0.9) ,
+                               (0.875, 0.9, 0.9) ,
+                               (1.0, 1.0, 1.0)
+                               },
+                           new triple[] {  // green
+                             (0.0, 0.0, 0.0) ,
+                               (0.125, 0.15, 0.15) ,
+                               (0.25, 0.15, 0.15) ,
+                               (0.375, 0.2, 0.2) ,
+                               (0.5, 0.25, 0.25) ,
+                               (0.625, 0.5, 0.5) ,
+                               (0.75, 0.75, 0.75) ,
+                               (0.875, 0.9, 0.9) ,
+                               (1.0, 1.0, 1.0)
+                               },
+                           new triple[] {  // blue
+                             (0.0, 0.0, 0.0) ,
+                               (0.125, 0.5, 0.5) ,
+                               (0.25, 0.75, 0.75) ,
+                               (0.375, 0.5, 0.5) ,
+                               (0.5, 0.15, 0.15) ,
+                               (0.625, 0.0, 0.0) ,
+                               (0.75, 0.1, 0.1) ,
+                               (0.875, 0.5, 0.5) ,
+                               (1.0, 1.0, 1.0)
+                               }
+                           );
 
 
 list_data Dark2 = list_data(new pen[] {
-  rgb (0.10588235294117647, 0.6196078431372549, 0.4666666666666667) ,
-  rgb (0.8509803921568627, 0.37254901960784315, 0.00784313725490196) ,
-  rgb (0.4588235294117647, 0.4392156862745098, 0.7019607843137254) ,
-  rgb (0.9058823529411765, 0.1607843137254902, 0.5411764705882353) ,
-  rgb (0.4, 0.6509803921568628, 0.11764705882352941) ,
-  rgb (0.9019607843137255, 0.6705882352941176, 0.00784313725490196) ,
-  rgb (0.6509803921568628, 0.4627450980392157, 0.11372549019607843) ,
-  rgb (0.4, 0.4, 0.4)
-});
+    rgb (0.10588235294117647, 0.6196078431372549, 0.4666666666666667) ,
+      rgb (0.8509803921568627, 0.37254901960784315, 0.00784313725490196) ,
+      rgb (0.4588235294117647, 0.4392156862745098, 0.7019607843137254) ,
+      rgb (0.9058823529411765, 0.1607843137254902, 0.5411764705882353) ,
+      rgb (0.4, 0.6509803921568628, 0.11764705882352941) ,
+      rgb (0.9019607843137255, 0.6705882352941176, 0.00784313725490196) ,
+      rgb (0.6509803921568628, 0.4627450980392157, 0.11372549019607843) ,
+      rgb (0.4, 0.4, 0.4)
+      });
 
 
 list_data GnBu = list_data(new pen[] {
-  rgb (0.9686274509803922, 0.9882352941176471, 0.9411764705882353) ,
-  rgb (0.8784313725490196, 0.9529411764705882, 0.8588235294117647) ,
-  rgb (0.8, 0.9215686274509803, 0.7725490196078432) ,
-  rgb (0.6588235294117647, 0.8666666666666667, 0.7098039215686275) ,
-  rgb (0.4823529411764706, 0.8, 0.7686274509803922) ,
-  rgb (0.3058823529411765, 0.7019607843137254, 0.8274509803921568) ,
-  rgb (0.16862745098039217, 0.5490196078431373, 0.7450980392156863) ,
-  rgb (0.03137254901960784, 0.40784313725490196, 0.6745098039215687) ,
-  rgb (0.03137254901960784, 0.25098039215686274, 0.5058823529411764)
-});
+    rgb (0.9686274509803922, 0.9882352941176471, 0.9411764705882353) ,
+      rgb (0.8784313725490196, 0.9529411764705882, 0.8588235294117647) ,
+      rgb (0.8, 0.9215686274509803, 0.7725490196078432) ,
+      rgb (0.6588235294117647, 0.8666666666666667, 0.7098039215686275) ,
+      rgb (0.4823529411764706, 0.8, 0.7686274509803922) ,
+      rgb (0.3058823529411765, 0.7019607843137254, 0.8274509803921568) ,
+      rgb (0.16862745098039217, 0.5490196078431373, 0.7450980392156863) ,
+      rgb (0.03137254901960784, 0.40784313725490196, 0.6745098039215687) ,
+      rgb (0.03137254901960784, 0.25098039215686274, 0.5058823529411764)
+      });
 
 
 list_data Greens = list_data(new pen[] {
-  rgb (0.9686274509803922, 0.9882352941176471, 0.9607843137254902) ,
-  rgb (0.8980392156862745, 0.9607843137254902, 0.8784313725490196) ,
-  rgb (0.7803921568627451, 0.9137254901960784, 0.7529411764705882) ,
-  rgb (0.6313725490196078, 0.8509803921568627, 0.6078431372549019) ,
-  rgb (0.4549019607843137, 0.7686274509803922, 0.4627450980392157) ,
-  rgb (0.2549019607843137, 0.6705882352941176, 0.36470588235294116) ,
-  rgb (0.13725490196078433, 0.5450980392156862, 0.27058823529411763) ,
-  rgb (0.0, 0.42745098039215684, 0.17254901960784313) ,
-  rgb (0.0, 0.26666666666666666, 0.10588235294117647)
-});
+    rgb (0.9686274509803922, 0.9882352941176471, 0.9607843137254902) ,
+      rgb (0.8980392156862745, 0.9607843137254902, 0.8784313725490196) ,
+      rgb (0.7803921568627451, 0.9137254901960784, 0.7529411764705882) ,
+      rgb (0.6313725490196078, 0.8509803921568627, 0.6078431372549019) ,
+      rgb (0.4549019607843137, 0.7686274509803922, 0.4627450980392157) ,
+      rgb (0.2549019607843137, 0.6705882352941176, 0.36470588235294116) ,
+      rgb (0.13725490196078433, 0.5450980392156862, 0.27058823529411763) ,
+      rgb (0.0, 0.42745098039215684, 0.17254901960784313) ,
+      rgb (0.0, 0.26666666666666666, 0.10588235294117647)
+      });
 
 
 list_data Greys = list_data(new pen[] {
-  rgb (1.0, 1.0, 1.0) ,
-  rgb (0.9411764705882353, 0.9411764705882353, 0.9411764705882353) ,
-  rgb (0.8509803921568627, 0.8509803921568627, 0.8509803921568627) ,
-  rgb (0.7411764705882353, 0.7411764705882353, 0.7411764705882353) ,
-  rgb (0.5882352941176471, 0.5882352941176471, 0.5882352941176471) ,
-  rgb (0.45098039215686275, 0.45098039215686275, 0.45098039215686275) ,
-  rgb (0.3215686274509804, 0.3215686274509804, 0.3215686274509804) ,
-  rgb (0.1450980392156863, 0.1450980392156863, 0.1450980392156863) ,
-  rgb (0.0, 0.0, 0.0)
-});
+    rgb (1.0, 1.0, 1.0) ,
+      rgb (0.9411764705882353, 0.9411764705882353, 0.9411764705882353) ,
+      rgb (0.8509803921568627, 0.8509803921568627, 0.8509803921568627) ,
+      rgb (0.7411764705882353, 0.7411764705882353, 0.7411764705882353) ,
+      rgb (0.5882352941176471, 0.5882352941176471, 0.5882352941176471) ,
+      rgb (0.45098039215686275, 0.45098039215686275, 0.45098039215686275) ,
+      rgb (0.3215686274509804, 0.3215686274509804, 0.3215686274509804) ,
+      rgb (0.1450980392156863, 0.1450980392156863, 0.1450980392156863) ,
+      rgb (0.0, 0.0, 0.0)
+      });
 
 
 list_data OrRd = list_data(new pen[] {
-  rgb (1.0, 0.9686274509803922, 0.9254901960784314) ,
-  rgb (0.996078431372549, 0.9098039215686274, 0.7843137254901961) ,
-  rgb (0.9921568627450981, 0.8313725490196079, 0.6196078431372549) ,
-  rgb (0.9921568627450981, 0.7333333333333333, 0.5176470588235295) ,
-  rgb (0.9882352941176471, 0.5529411764705883, 0.34901960784313724) ,
-  rgb (0.9372549019607843, 0.396078431372549, 0.2823529411764706) ,
-  rgb (0.8431372549019608, 0.18823529411764706, 0.12156862745098039) ,
-  rgb (0.7019607843137254, 0.0, 0.0) ,
-  rgb (0.4980392156862745, 0.0, 0.0)
-});
+    rgb (1.0, 0.9686274509803922, 0.9254901960784314) ,
+      rgb (0.996078431372549, 0.9098039215686274, 0.7843137254901961) ,
+      rgb (0.9921568627450981, 0.8313725490196079, 0.6196078431372549) ,
+      rgb (0.9921568627450981, 0.7333333333333333, 0.5176470588235295) ,
+      rgb (0.9882352941176471, 0.5529411764705883, 0.34901960784313724) ,
+      rgb (0.9372549019607843, 0.396078431372549, 0.2823529411764706) ,
+      rgb (0.8431372549019608, 0.18823529411764706, 0.12156862745098039) ,
+      rgb (0.7019607843137254, 0.0, 0.0) ,
+      rgb (0.4980392156862745, 0.0, 0.0)
+      });
 
 
 list_data Oranges = list_data(new pen[] {
-  rgb (1.0, 0.9607843137254902, 0.9215686274509803) ,
-  rgb (0.996078431372549, 0.9019607843137255, 0.807843137254902) ,
-  rgb (0.9921568627450981, 0.8156862745098039, 0.6352941176470588) ,
-  rgb (0.9921568627450981, 0.6823529411764706, 0.4196078431372549) ,
-  rgb (0.9921568627450981, 0.5529411764705883, 0.23529411764705882) ,
-  rgb (0.9450980392156862, 0.4117647058823529, 0.07450980392156863) ,
-  rgb (0.8509803921568627, 0.2823529411764706, 0.00392156862745098) ,
-  rgb (0.6509803921568628, 0.21176470588235294, 0.01176470588235294) ,
-  rgb (0.4980392156862745, 0.15294117647058825, 0.01568627450980392)
-});
+    rgb (1.0, 0.9607843137254902, 0.9215686274509803) ,
+      rgb (0.996078431372549, 0.9019607843137255, 0.807843137254902) ,
+      rgb (0.9921568627450981, 0.8156862745098039, 0.6352941176470588) ,
+      rgb (0.9921568627450981, 0.6823529411764706, 0.4196078431372549) ,
+      rgb (0.9921568627450981, 0.5529411764705883, 0.23529411764705882) ,
+      rgb (0.9450980392156862, 0.4117647058823529, 0.07450980392156863) ,
+      rgb (0.8509803921568627, 0.2823529411764706, 0.00392156862745098) ,
+      rgb (0.6509803921568628, 0.21176470588235294, 0.01176470588235294) ,
+      rgb (0.4980392156862745, 0.15294117647058825, 0.01568627450980392)
+      });
 
 
 list_data PRGn = list_data(new pen[] {
-  rgb (0.25098039215686274, 0.0, 0.29411764705882354) ,
-  rgb (0.4627450980392157, 0.16470588235294117, 0.5137254901960784) ,
-  rgb (0.6, 0.4392156862745098, 0.6705882352941176) ,
-  rgb (0.7607843137254902, 0.6470588235294118, 0.8117647058823529) ,
-  rgb (0.9058823529411765, 0.8313725490196079, 0.9098039215686274) ,
-  rgb (0.9686274509803922, 0.9686274509803922, 0.9686274509803922) ,
-  rgb (0.8509803921568627, 0.9411764705882353, 0.8274509803921568) ,
-  rgb (0.6509803921568628, 0.8588235294117647, 0.6274509803921569) ,
-  rgb (0.35294117647058826, 0.6823529411764706, 0.3803921568627451) ,
-  rgb (0.10588235294117647, 0.47058823529411764, 0.21568627450980393) ,
-  rgb (0.0, 0.26666666666666666, 0.10588235294117647)
-});
+    rgb (0.25098039215686274, 0.0, 0.29411764705882354) ,
+      rgb (0.4627450980392157, 0.16470588235294117, 0.5137254901960784) ,
+      rgb (0.6, 0.4392156862745098, 0.6705882352941176) ,
+      rgb (0.7607843137254902, 0.6470588235294118, 0.8117647058823529) ,
+      rgb (0.9058823529411765, 0.8313725490196079, 0.9098039215686274) ,
+      rgb (0.9686274509803922, 0.9686274509803922, 0.9686274509803922) ,
+      rgb (0.8509803921568627, 0.9411764705882353, 0.8274509803921568) ,
+      rgb (0.6509803921568628, 0.8588235294117647, 0.6274509803921569) ,
+      rgb (0.35294117647058826, 0.6823529411764706, 0.3803921568627451) ,
+      rgb (0.10588235294117647, 0.47058823529411764, 0.21568627450980393) ,
+      rgb (0.0, 0.26666666666666666, 0.10588235294117647)
+      });
 
 
 list_data Paired = list_data(new pen[] {
-  rgb (0.6509803921568628, 0.807843137254902, 0.8901960784313725) ,
-  rgb (0.12156862745098039, 0.47058823529411764, 0.7058823529411765) ,
-  rgb (0.6980392156862745, 0.8745098039215686, 0.5411764705882353) ,
-  rgb (0.2, 0.6274509803921569, 0.17254901960784313) ,
-  rgb (0.984313725490196, 0.6039215686274509, 0.6) ,
-  rgb (0.8901960784313725, 0.10196078431372549, 0.10980392156862745) ,
-  rgb (0.9921568627450981, 0.7490196078431373, 0.43529411764705883) ,
-  rgb (1.0, 0.4980392156862745, 0.0) ,
-  rgb (0.792156862745098, 0.6980392156862745, 0.8392156862745098) ,
-  rgb (0.41568627450980394, 0.23921568627450981, 0.6039215686274509) ,
-  rgb (1.0, 1.0, 0.6) ,
-  rgb (0.6941176470588235, 0.34901960784313724, 0.1568627450980392)
-});
+    rgb (0.6509803921568628, 0.807843137254902, 0.8901960784313725) ,
+      rgb (0.12156862745098039, 0.47058823529411764, 0.7058823529411765) ,
+      rgb (0.6980392156862745, 0.8745098039215686, 0.5411764705882353) ,
+      rgb (0.2, 0.6274509803921569, 0.17254901960784313) ,
+      rgb (0.984313725490196, 0.6039215686274509, 0.6) ,
+      rgb (0.8901960784313725, 0.10196078431372549, 0.10980392156862745) ,
+      rgb (0.9921568627450981, 0.7490196078431373, 0.43529411764705883) ,
+      rgb (1.0, 0.4980392156862745, 0.0) ,
+      rgb (0.792156862745098, 0.6980392156862745, 0.8392156862745098) ,
+      rgb (0.41568627450980394, 0.23921568627450981, 0.6039215686274509) ,
+      rgb (1.0, 1.0, 0.6) ,
+      rgb (0.6941176470588235, 0.34901960784313724, 0.1568627450980392)
+      });
 
 
 list_data Pastel1 = list_data(new pen[] {
-  rgb (0.984313725490196, 0.7058823529411765, 0.6823529411764706) ,
-  rgb (0.7019607843137254, 0.803921568627451, 0.8901960784313725) ,
-  rgb (0.8, 0.9215686274509803, 0.7725490196078432) ,
-  rgb (0.8705882352941177, 0.796078431372549, 0.8941176470588236) ,
-  rgb (0.996078431372549, 0.8509803921568627, 0.6509803921568628) ,
-  rgb (1.0, 1.0, 0.8) ,
-  rgb (0.8980392156862745, 0.8470588235294118, 0.7411764705882353) ,
-  rgb (0.9921568627450981, 0.8549019607843137, 0.9254901960784314) ,
-  rgb (0.9490196078431372, 0.9490196078431372, 0.9490196078431372)
-});
+    rgb (0.984313725490196, 0.7058823529411765, 0.6823529411764706) ,
+      rgb (0.7019607843137254, 0.803921568627451, 0.8901960784313725) ,
+      rgb (0.8, 0.9215686274509803, 0.7725490196078432) ,
+      rgb (0.8705882352941177, 0.796078431372549, 0.8941176470588236) ,
+      rgb (0.996078431372549, 0.8509803921568627, 0.6509803921568628) ,
+      rgb (1.0, 1.0, 0.8) ,
+      rgb (0.8980392156862745, 0.8470588235294118, 0.7411764705882353) ,
+      rgb (0.9921568627450981, 0.8549019607843137, 0.9254901960784314) ,
+      rgb (0.9490196078431372, 0.9490196078431372, 0.9490196078431372)
+      });
 
 
 list_data Pastel2 = list_data(new pen[] {
-  rgb (0.7019607843137254, 0.8862745098039215, 0.803921568627451) ,
-  rgb (0.9921568627450981, 0.803921568627451, 0.6745098039215687) ,
-  rgb (0.796078431372549, 0.8352941176470589, 0.9098039215686274) ,
-  rgb (0.9568627450980393, 0.792156862745098, 0.8941176470588236) ,
-  rgb (0.9019607843137255, 0.9607843137254902, 0.788235294117647) ,
-  rgb (1.0, 0.9490196078431372, 0.6823529411764706) ,
-  rgb (0.9450980392156862, 0.8862745098039215, 0.8) ,
-  rgb (0.8, 0.8, 0.8)
-});
+    rgb (0.7019607843137254, 0.8862745098039215, 0.803921568627451) ,
+      rgb (0.9921568627450981, 0.803921568627451, 0.6745098039215687) ,
+      rgb (0.796078431372549, 0.8352941176470589, 0.9098039215686274) ,
+      rgb (0.9568627450980393, 0.792156862745098, 0.8941176470588236) ,
+      rgb (0.9019607843137255, 0.9607843137254902, 0.788235294117647) ,
+      rgb (1.0, 0.9490196078431372, 0.6823529411764706) ,
+      rgb (0.9450980392156862, 0.8862745098039215, 0.8) ,
+      rgb (0.8, 0.8, 0.8)
+      });
 
 
 list_data PiYG = list_data(new pen[] {
-  rgb (0.5568627450980392, 0.00392156862745098, 0.3215686274509804) ,
-  rgb (0.7725490196078432, 0.10588235294117647, 0.49019607843137253) ,
-  rgb (0.8705882352941177, 0.4666666666666667, 0.6823529411764706) ,
-  rgb (0.9450980392156862, 0.7137254901960784, 0.8549019607843137) ,
-  rgb (0.9921568627450981, 0.8784313725490196, 0.9372549019607843) ,
-  rgb (0.9686274509803922, 0.9686274509803922, 0.9686274509803922) ,
-  rgb (0.9019607843137255, 0.9607843137254902, 0.8156862745098039) ,
-  rgb (0.7215686274509804, 0.8823529411764706, 0.5254901960784314) ,
-  rgb (0.4980392156862745, 0.7372549019607844, 0.2549019607843137) ,
-  rgb (0.30196078431372547, 0.5725490196078431, 0.12941176470588237) ,
-  rgb (0.15294117647058825, 0.39215686274509803, 0.09803921568627451)
-});
+    rgb (0.5568627450980392, 0.00392156862745098, 0.3215686274509804) ,
+      rgb (0.7725490196078432, 0.10588235294117647, 0.49019607843137253) ,
+      rgb (0.8705882352941177, 0.4666666666666667, 0.6823529411764706) ,
+      rgb (0.9450980392156862, 0.7137254901960784, 0.8549019607843137) ,
+      rgb (0.9921568627450981, 0.8784313725490196, 0.9372549019607843) ,
+      rgb (0.9686274509803922, 0.9686274509803922, 0.9686274509803922) ,
+      rgb (0.9019607843137255, 0.9607843137254902, 0.8156862745098039) ,
+      rgb (0.7215686274509804, 0.8823529411764706, 0.5254901960784314) ,
+      rgb (0.4980392156862745, 0.7372549019607844, 0.2549019607843137) ,
+      rgb (0.30196078431372547, 0.5725490196078431, 0.12941176470588237) ,
+      rgb (0.15294117647058825, 0.39215686274509803, 0.09803921568627451)
+      });
 
 
 list_data PuBuGn = list_data(new pen[] {
-  rgb (1.0, 0.9686274509803922, 0.984313725490196) ,
-  rgb (0.9254901960784314, 0.8862745098039215, 0.9411764705882353) ,
-  rgb (0.8156862745098039, 0.8196078431372549, 0.9019607843137255) ,
-  rgb (0.6509803921568628, 0.7411764705882353, 0.8588235294117647) ,
-  rgb (0.403921568627451, 0.6627450980392157, 0.8117647058823529) ,
-  rgb (0.21176470588235294, 0.5647058823529412, 0.7529411764705882) ,
-  rgb (0.00784313725490196, 0.5058823529411764, 0.5411764705882353) ,
-  rgb (0.00392156862745098, 0.4235294117647059, 0.34901960784313724) ,
-  rgb (0.00392156862745098, 0.27450980392156865, 0.21176470588235294)
-});
+    rgb (1.0, 0.9686274509803922, 0.984313725490196) ,
+      rgb (0.9254901960784314, 0.8862745098039215, 0.9411764705882353) ,
+      rgb (0.8156862745098039, 0.8196078431372549, 0.9019607843137255) ,
+      rgb (0.6509803921568628, 0.7411764705882353, 0.8588235294117647) ,
+      rgb (0.403921568627451, 0.6627450980392157, 0.8117647058823529) ,
+      rgb (0.21176470588235294, 0.5647058823529412, 0.7529411764705882) ,
+      rgb (0.00784313725490196, 0.5058823529411764, 0.5411764705882353) ,
+      rgb (0.00392156862745098, 0.4235294117647059, 0.34901960784313724) ,
+      rgb (0.00392156862745098, 0.27450980392156865, 0.21176470588235294)
+      });
 
 
 list_data PuBu = list_data(new pen[] {
-  rgb (1.0, 0.9686274509803922, 0.984313725490196) ,
-  rgb (0.9254901960784314, 0.9058823529411765, 0.9490196078431372) ,
-  rgb (0.8156862745098039, 0.8196078431372549, 0.9019607843137255) ,
-  rgb (0.6509803921568628, 0.7411764705882353, 0.8588235294117647) ,
-  rgb (0.4549019607843137, 0.6627450980392157, 0.8117647058823529) ,
-  rgb (0.21176470588235294, 0.5647058823529412, 0.7529411764705882) ,
-  rgb (0.0196078431372549, 0.4392156862745098, 0.6901960784313725) ,
-  rgb (0.01568627450980392, 0.35294117647058826, 0.5529411764705883) ,
-  rgb (0.00784313725490196, 0.2196078431372549, 0.34509803921568627)
-});
+    rgb (1.0, 0.9686274509803922, 0.984313725490196) ,
+      rgb (0.9254901960784314, 0.9058823529411765, 0.9490196078431372) ,
+      rgb (0.8156862745098039, 0.8196078431372549, 0.9019607843137255) ,
+      rgb (0.6509803921568628, 0.7411764705882353, 0.8588235294117647) ,
+      rgb (0.4549019607843137, 0.6627450980392157, 0.8117647058823529) ,
+      rgb (0.21176470588235294, 0.5647058823529412, 0.7529411764705882) ,
+      rgb (0.0196078431372549, 0.4392156862745098, 0.6901960784313725) ,
+      rgb (0.01568627450980392, 0.35294117647058826, 0.5529411764705883) ,
+      rgb (0.00784313725490196, 0.2196078431372549, 0.34509803921568627)
+      });
 
 
 list_data PuOr = list_data(new pen[] {
-  rgb (0.4980392156862745, 0.23137254901960785, 0.03137254901960784) ,
-  rgb (0.7019607843137254, 0.34509803921568627, 0.02352941176470588) ,
-  rgb (0.8784313725490196, 0.5098039215686274, 0.0784313725490196) ,
-  rgb (0.9921568627450981, 0.7215686274509804, 0.38823529411764707) ,
-  rgb (0.996078431372549, 0.8784313725490196, 0.7137254901960784) ,
-  rgb (0.9686274509803922, 0.9686274509803922, 0.9686274509803922) ,
-  rgb (0.8470588235294118, 0.8549019607843137, 0.9215686274509803) ,
-  rgb (0.6980392156862745, 0.6705882352941176, 0.8235294117647058) ,
-  rgb (0.5019607843137255, 0.45098039215686275, 0.6745098039215687) ,
-  rgb (0.32941176470588235, 0.15294117647058825, 0.5333333333333333) ,
-  rgb (0.17647058823529413, 0.0, 0.29411764705882354)
-});
+    rgb (0.4980392156862745, 0.23137254901960785, 0.03137254901960784) ,
+      rgb (0.7019607843137254, 0.34509803921568627, 0.02352941176470588) ,
+      rgb (0.8784313725490196, 0.5098039215686274, 0.0784313725490196) ,
+      rgb (0.9921568627450981, 0.7215686274509804, 0.38823529411764707) ,
+      rgb (0.996078431372549, 0.8784313725490196, 0.7137254901960784) ,
+      rgb (0.9686274509803922, 0.9686274509803922, 0.9686274509803922) ,
+      rgb (0.8470588235294118, 0.8549019607843137, 0.9215686274509803) ,
+      rgb (0.6980392156862745, 0.6705882352941176, 0.8235294117647058) ,
+      rgb (0.5019607843137255, 0.45098039215686275, 0.6745098039215687) ,
+      rgb (0.32941176470588235, 0.15294117647058825, 0.5333333333333333) ,
+      rgb (0.17647058823529413, 0.0, 0.29411764705882354)
+      });
 
 
 list_data PuRd = list_data(new pen[] {
-  rgb (0.9686274509803922, 0.9568627450980393, 0.9764705882352941) ,
-  rgb (0.9058823529411765, 0.8823529411764706, 0.9372549019607843) ,
-  rgb (0.8313725490196079, 0.7254901960784313, 0.8549019607843137) ,
-  rgb (0.788235294117647, 0.5803921568627451, 0.7803921568627451) ,
-  rgb (0.8745098039215686, 0.396078431372549, 0.6901960784313725) ,
-  rgb (0.9058823529411765, 0.1607843137254902, 0.5411764705882353) ,
-  rgb (0.807843137254902, 0.07058823529411765, 0.33725490196078434) ,
-  rgb (0.596078431372549, 0.0, 0.2627450980392157) ,
-  rgb (0.403921568627451, 0.0, 0.12156862745098039)
-});
+    rgb (0.9686274509803922, 0.9568627450980393, 0.9764705882352941) ,
+      rgb (0.9058823529411765, 0.8823529411764706, 0.9372549019607843) ,
+      rgb (0.8313725490196079, 0.7254901960784313, 0.8549019607843137) ,
+      rgb (0.788235294117647, 0.5803921568627451, 0.7803921568627451) ,
+      rgb (0.8745098039215686, 0.396078431372549, 0.6901960784313725) ,
+      rgb (0.9058823529411765, 0.1607843137254902, 0.5411764705882353) ,
+      rgb (0.807843137254902, 0.07058823529411765, 0.33725490196078434) ,
+      rgb (0.596078431372549, 0.0, 0.2627450980392157) ,
+      rgb (0.403921568627451, 0.0, 0.12156862745098039)
+      });
 
 
 list_data Purples = list_data(new pen[] {
-  rgb (0.9882352941176471, 0.984313725490196, 0.9921568627450981) ,
-  rgb (0.9372549019607843, 0.9294117647058824, 0.9607843137254902) ,
-  rgb (0.8549019607843137, 0.8549019607843137, 0.9215686274509803) ,
-  rgb (0.7372549019607844, 0.7411764705882353, 0.8627450980392157) ,
-  rgb (0.6196078431372549, 0.6039215686274509, 0.7843137254901961) ,
-  rgb (0.5019607843137255, 0.49019607843137253, 0.7294117647058823) ,
-  rgb (0.41568627450980394, 0.3176470588235294, 0.6392156862745098) ,
-  rgb (0.32941176470588235, 0.15294117647058825, 0.5607843137254902) ,
-  rgb (0.24705882352941178, 0.0, 0.49019607843137253)
-});
+    rgb (0.9882352941176471, 0.984313725490196, 0.9921568627450981) ,
+      rgb (0.9372549019607843, 0.9294117647058824, 0.9607843137254902) ,
+      rgb (0.8549019607843137, 0.8549019607843137, 0.9215686274509803) ,
+      rgb (0.7372549019607844, 0.7411764705882353, 0.8627450980392157) ,
+      rgb (0.6196078431372549, 0.6039215686274509, 0.7843137254901961) ,
+      rgb (0.5019607843137255, 0.49019607843137253, 0.7294117647058823) ,
+      rgb (0.41568627450980394, 0.3176470588235294, 0.6392156862745098) ,
+      rgb (0.32941176470588235, 0.15294117647058825, 0.5607843137254902) ,
+      rgb (0.24705882352941178, 0.0, 0.49019607843137253)
+      });
 
 
 list_data RdBu = list_data(new pen[] {
-  rgb (0.403921568627451, 0.0, 0.12156862745098039) ,
-  rgb (0.6980392156862745, 0.09411764705882353, 0.16862745098039217) ,
-  rgb (0.8392156862745098, 0.3764705882352941, 0.30196078431372547) ,
-  rgb (0.9568627450980393, 0.6470588235294118, 0.5098039215686274) ,
-  rgb (0.9921568627450981, 0.8588235294117647, 0.7803921568627451) ,
-  rgb (0.9686274509803922, 0.9686274509803922, 0.9686274509803922) ,
-  rgb (0.8196078431372549, 0.8980392156862745, 0.9411764705882353) ,
-  rgb (0.5725490196078431, 0.7725490196078432, 0.8705882352941177) ,
-  rgb (0.2627450980392157, 0.5764705882352941, 0.7647058823529411) ,
-  rgb (0.12941176470588237, 0.4, 0.6745098039215687) ,
-  rgb (0.0196078431372549, 0.18823529411764706, 0.3803921568627451)
-});
+    rgb (0.403921568627451, 0.0, 0.12156862745098039) ,
+      rgb (0.6980392156862745, 0.09411764705882353, 0.16862745098039217) ,
+      rgb (0.8392156862745098, 0.3764705882352941, 0.30196078431372547) ,
+      rgb (0.9568627450980393, 0.6470588235294118, 0.5098039215686274) ,
+      rgb (0.9921568627450981, 0.8588235294117647, 0.7803921568627451) ,
+      rgb (0.9686274509803922, 0.9686274509803922, 0.9686274509803922) ,
+      rgb (0.8196078431372549, 0.8980392156862745, 0.9411764705882353) ,
+      rgb (0.5725490196078431, 0.7725490196078432, 0.8705882352941177) ,
+      rgb (0.2627450980392157, 0.5764705882352941, 0.7647058823529411) ,
+      rgb (0.12941176470588237, 0.4, 0.6745098039215687) ,
+      rgb (0.0196078431372549, 0.18823529411764706, 0.3803921568627451)
+      });
 
 
 list_data RdGy = list_data(new pen[] {
-  rgb (0.403921568627451, 0.0, 0.12156862745098039) ,
-  rgb (0.6980392156862745, 0.09411764705882353, 0.16862745098039217) ,
-  rgb (0.8392156862745098, 0.3764705882352941, 0.30196078431372547) ,
-  rgb (0.9568627450980393, 0.6470588235294118, 0.5098039215686274) ,
-  rgb (0.9921568627450981, 0.8588235294117647, 0.7803921568627451) ,
-  rgb (1.0, 1.0, 1.0) ,
-  rgb (0.8784313725490196, 0.8784313725490196, 0.8784313725490196) ,
-  rgb (0.7294117647058823, 0.7294117647058823, 0.7294117647058823) ,
-  rgb (0.5294117647058824, 0.5294117647058824, 0.5294117647058824) ,
-  rgb (0.30196078431372547, 0.30196078431372547, 0.30196078431372547) ,
-  rgb (0.10196078431372549, 0.10196078431372549, 0.10196078431372549)
-});
+    rgb (0.403921568627451, 0.0, 0.12156862745098039) ,
+      rgb (0.6980392156862745, 0.09411764705882353, 0.16862745098039217) ,
+      rgb (0.8392156862745098, 0.3764705882352941, 0.30196078431372547) ,
+      rgb (0.9568627450980393, 0.6470588235294118, 0.5098039215686274) ,
+      rgb (0.9921568627450981, 0.8588235294117647, 0.7803921568627451) ,
+      rgb (1.0, 1.0, 1.0) ,
+      rgb (0.8784313725490196, 0.8784313725490196, 0.8784313725490196) ,
+      rgb (0.7294117647058823, 0.7294117647058823, 0.7294117647058823) ,
+      rgb (0.5294117647058824, 0.5294117647058824, 0.5294117647058824) ,
+      rgb (0.30196078431372547, 0.30196078431372547, 0.30196078431372547) ,
+      rgb (0.10196078431372549, 0.10196078431372549, 0.10196078431372549)
+      });
 
 
 list_data RdPu = list_data(new pen[] {
-  rgb (1.0, 0.9686274509803922, 0.9529411764705882) ,
-  rgb (0.9921568627450981, 0.8784313725490196, 0.8666666666666667) ,
-  rgb (0.9882352941176471, 0.7725490196078432, 0.7529411764705882) ,
-  rgb (0.9803921568627451, 0.6235294117647059, 0.7098039215686275) ,
-  rgb (0.9686274509803922, 0.40784313725490196, 0.6313725490196078) ,
-  rgb (0.8666666666666667, 0.20392156862745098, 0.592156862745098) ,
-  rgb (0.6823529411764706, 0.00392156862745098, 0.49411764705882355) ,
-  rgb (0.47843137254901963, 0.00392156862745098, 0.4666666666666667) ,
-  rgb (0.28627450980392155, 0.0, 0.41568627450980394)
-});
+    rgb (1.0, 0.9686274509803922, 0.9529411764705882) ,
+      rgb (0.9921568627450981, 0.8784313725490196, 0.8666666666666667) ,
+      rgb (0.9882352941176471, 0.7725490196078432, 0.7529411764705882) ,
+      rgb (0.9803921568627451, 0.6235294117647059, 0.7098039215686275) ,
+      rgb (0.9686274509803922, 0.40784313725490196, 0.6313725490196078) ,
+      rgb (0.8666666666666667, 0.20392156862745098, 0.592156862745098) ,
+      rgb (0.6823529411764706, 0.00392156862745098, 0.49411764705882355) ,
+      rgb (0.47843137254901963, 0.00392156862745098, 0.4666666666666667) ,
+      rgb (0.28627450980392155, 0.0, 0.41568627450980394)
+      });
 
 
 list_data RdYlBu = list_data(new pen[] {
-  rgb (0.6470588235294118, 0.0, 0.14901960784313725) ,
-  rgb (0.8431372549019608, 0.18823529411764706, 0.15294117647058825) ,
-  rgb (0.9568627450980393, 0.42745098039215684, 0.2627450980392157) ,
-  rgb (0.9921568627450981, 0.6823529411764706, 0.3803921568627451) ,
-  rgb (0.996078431372549, 0.8784313725490196, 0.5647058823529412) ,
-  rgb (1.0, 1.0, 0.7490196078431373) ,
-  rgb (0.8784313725490196, 0.9529411764705882, 0.9725490196078431) ,
-  rgb (0.6705882352941176, 0.8509803921568627, 0.9137254901960784) ,
-  rgb (0.4549019607843137, 0.6784313725490196, 0.8196078431372549) ,
-  rgb (0.27058823529411763, 0.4588235294117647, 0.7058823529411765) ,
-  rgb (0.19215686274509805, 0.21176470588235294, 0.5843137254901961)
-});
+    rgb (0.6470588235294118, 0.0, 0.14901960784313725) ,
+      rgb (0.8431372549019608, 0.18823529411764706, 0.15294117647058825) ,
+      rgb (0.9568627450980393, 0.42745098039215684, 0.2627450980392157) ,
+      rgb (0.9921568627450981, 0.6823529411764706, 0.3803921568627451) ,
+      rgb (0.996078431372549, 0.8784313725490196, 0.5647058823529412) ,
+      rgb (1.0, 1.0, 0.7490196078431373) ,
+      rgb (0.8784313725490196, 0.9529411764705882, 0.9725490196078431) ,
+      rgb (0.6705882352941176, 0.8509803921568627, 0.9137254901960784) ,
+      rgb (0.4549019607843137, 0.6784313725490196, 0.8196078431372549) ,
+      rgb (0.27058823529411763, 0.4588235294117647, 0.7058823529411765) ,
+      rgb (0.19215686274509805, 0.21176470588235294, 0.5843137254901961)
+      });
 
 
 list_data RdYlGn = list_data(new pen[] {
-  rgb (0.6470588235294118, 0.0, 0.14901960784313725) ,
-  rgb (0.8431372549019608, 0.18823529411764706, 0.15294117647058825) ,
-  rgb (0.9568627450980393, 0.42745098039215684, 0.2627450980392157) ,
-  rgb (0.9921568627450981, 0.6823529411764706, 0.3803921568627451) ,
-  rgb (0.996078431372549, 0.8784313725490196, 0.5450980392156862) ,
-  rgb (1.0, 1.0, 0.7490196078431373) ,
-  rgb (0.8509803921568627, 0.9372549019607843, 0.5450980392156862) ,
-  rgb (0.6509803921568628, 0.8509803921568627, 0.41568627450980394) ,
-  rgb (0.4, 0.7411764705882353, 0.38823529411764707) ,
-  rgb (0.10196078431372549, 0.596078431372549, 0.3137254901960784) ,
-  rgb (0.0, 0.40784313725490196, 0.21568627450980393)
-});
+    rgb (0.6470588235294118, 0.0, 0.14901960784313725) ,
+      rgb (0.8431372549019608, 0.18823529411764706, 0.15294117647058825) ,
+      rgb (0.9568627450980393, 0.42745098039215684, 0.2627450980392157) ,
+      rgb (0.9921568627450981, 0.6823529411764706, 0.3803921568627451) ,
+      rgb (0.996078431372549, 0.8784313725490196, 0.5450980392156862) ,
+      rgb (1.0, 1.0, 0.7490196078431373) ,
+      rgb (0.8509803921568627, 0.9372549019607843, 0.5450980392156862) ,
+      rgb (0.6509803921568628, 0.8509803921568627, 0.41568627450980394) ,
+      rgb (0.4, 0.7411764705882353, 0.38823529411764707) ,
+      rgb (0.10196078431372549, 0.596078431372549, 0.3137254901960784) ,
+      rgb (0.0, 0.40784313725490196, 0.21568627450980393)
+      });
 
 
 list_data Reds = list_data(new pen[] {
-  rgb (1.0, 0.9607843137254902, 0.9411764705882353) ,
-  rgb (0.996078431372549, 0.8784313725490196, 0.8235294117647058) ,
-  rgb (0.9882352941176471, 0.7333333333333333, 0.6313725490196078) ,
-  rgb (0.9882352941176471, 0.5725490196078431, 0.4470588235294118) ,
-  rgb (0.984313725490196, 0.41568627450980394, 0.2901960784313726) ,
-  rgb (0.9372549019607843, 0.23137254901960785, 0.17254901960784313) ,
-  rgb (0.796078431372549, 0.09411764705882353, 0.11372549019607843) ,
-  rgb (0.6470588235294118, 0.058823529411764705, 0.08235294117647057) ,
-  rgb (0.403921568627451, 0.0, 0.05098039215686274)
-});
+    rgb (1.0, 0.9607843137254902, 0.9411764705882353) ,
+      rgb (0.996078431372549, 0.8784313725490196, 0.8235294117647058) ,
+      rgb (0.9882352941176471, 0.7333333333333333, 0.6313725490196078) ,
+      rgb (0.9882352941176471, 0.5725490196078431, 0.4470588235294118) ,
+      rgb (0.984313725490196, 0.41568627450980394, 0.2901960784313726) ,
+      rgb (0.9372549019607843, 0.23137254901960785, 0.17254901960784313) ,
+      rgb (0.796078431372549, 0.09411764705882353, 0.11372549019607843) ,
+      rgb (0.6470588235294118, 0.058823529411764705, 0.08235294117647057) ,
+      rgb (0.403921568627451, 0.0, 0.05098039215686274)
+      });
 
 
 list_data Set1 = list_data(new pen[] {
-  rgb (0.8941176470588236, 0.10196078431372549, 0.10980392156862745) ,
-  rgb (0.21568627450980393, 0.49411764705882355, 0.7215686274509804) ,
-  rgb (0.30196078431372547, 0.6862745098039216, 0.2901960784313726) ,
-  rgb (0.596078431372549, 0.3058823529411765, 0.6392156862745098) ,
-  rgb (1.0, 0.4980392156862745, 0.0) ,
-  rgb (1.0, 1.0, 0.2) ,
-  rgb (0.6509803921568628, 0.33725490196078434, 0.1568627450980392) ,
-  rgb (0.9686274509803922, 0.5058823529411764, 0.7490196078431373) ,
-  rgb (0.6, 0.6, 0.6)
-});
+    rgb (0.8941176470588236, 0.10196078431372549, 0.10980392156862745) ,
+      rgb (0.21568627450980393, 0.49411764705882355, 0.7215686274509804) ,
+      rgb (0.30196078431372547, 0.6862745098039216, 0.2901960784313726) ,
+      rgb (0.596078431372549, 0.3058823529411765, 0.6392156862745098) ,
+      rgb (1.0, 0.4980392156862745, 0.0) ,
+      rgb (1.0, 1.0, 0.2) ,
+      rgb (0.6509803921568628, 0.33725490196078434, 0.1568627450980392) ,
+      rgb (0.9686274509803922, 0.5058823529411764, 0.7490196078431373) ,
+      rgb (0.6, 0.6, 0.6)
+      });
 
 
 list_data Set2 = list_data(new pen[] {
-  rgb (0.4, 0.7607843137254902, 0.6470588235294118) ,
-  rgb (0.9882352941176471, 0.5529411764705883, 0.3843137254901961) ,
-  rgb (0.5529411764705883, 0.6274509803921569, 0.796078431372549) ,
-  rgb (0.9058823529411765, 0.5411764705882353, 0.7647058823529411) ,
-  rgb (0.6509803921568628, 0.8470588235294118, 0.32941176470588235) ,
-  rgb (1.0, 0.8509803921568627, 0.1843137254901961) ,
-  rgb (0.8980392156862745, 0.7686274509803922, 0.5803921568627451) ,
-  rgb (0.7019607843137254, 0.7019607843137254, 0.7019607843137254)
-});
+    rgb (0.4, 0.7607843137254902, 0.6470588235294118) ,
+      rgb (0.9882352941176471, 0.5529411764705883, 0.3843137254901961) ,
+      rgb (0.5529411764705883, 0.6274509803921569, 0.796078431372549) ,
+      rgb (0.9058823529411765, 0.5411764705882353, 0.7647058823529411) ,
+      rgb (0.6509803921568628, 0.8470588235294118, 0.32941176470588235) ,
+      rgb (1.0, 0.8509803921568627, 0.1843137254901961) ,
+      rgb (0.8980392156862745, 0.7686274509803922, 0.5803921568627451) ,
+      rgb (0.7019607843137254, 0.7019607843137254, 0.7019607843137254)
+      });
 
 
 list_data Set3 = list_data(new pen[] {
-  rgb (0.5529411764705883, 0.8274509803921568, 0.7803921568627451) ,
-  rgb (1.0, 1.0, 0.7019607843137254) ,
-  rgb (0.7450980392156863, 0.7294117647058823, 0.8549019607843137) ,
-  rgb (0.984313725490196, 0.5019607843137255, 0.4470588235294118) ,
-  rgb (0.5019607843137255, 0.6941176470588235, 0.8274509803921568) ,
-  rgb (0.9921568627450981, 0.7058823529411765, 0.3843137254901961) ,
-  rgb (0.7019607843137254, 0.8705882352941177, 0.4117647058823529) ,
-  rgb (0.9882352941176471, 0.803921568627451, 0.8980392156862745) ,
-  rgb (0.8509803921568627, 0.8509803921568627, 0.8509803921568627) ,
-  rgb (0.7372549019607844, 0.5019607843137255, 0.7411764705882353) ,
-  rgb (0.8, 0.9215686274509803, 0.7725490196078432) ,
-  rgb (1.0, 0.9294117647058824, 0.43529411764705883)
-});
+    rgb (0.5529411764705883, 0.8274509803921568, 0.7803921568627451) ,
+      rgb (1.0, 1.0, 0.7019607843137254) ,
+      rgb (0.7450980392156863, 0.7294117647058823, 0.8549019607843137) ,
+      rgb (0.984313725490196, 0.5019607843137255, 0.4470588235294118) ,
+      rgb (0.5019607843137255, 0.6941176470588235, 0.8274509803921568) ,
+      rgb (0.9921568627450981, 0.7058823529411765, 0.3843137254901961) ,
+      rgb (0.7019607843137254, 0.8705882352941177, 0.4117647058823529) ,
+      rgb (0.9882352941176471, 0.803921568627451, 0.8980392156862745) ,
+      rgb (0.8509803921568627, 0.8509803921568627, 0.8509803921568627) ,
+      rgb (0.7372549019607844, 0.5019607843137255, 0.7411764705882353) ,
+      rgb (0.8, 0.9215686274509803, 0.7725490196078432) ,
+      rgb (1.0, 0.9294117647058824, 0.43529411764705883)
+      });
 
 
 list_data Spectral = list_data(new pen[] {
-  rgb (0.6196078431372549, 0.00392156862745098, 0.25882352941176473) ,
-  rgb (0.8352941176470589, 0.24313725490196078, 0.30980392156862746) ,
-  rgb (0.9568627450980393, 0.42745098039215684, 0.2627450980392157) ,
-  rgb (0.9921568627450981, 0.6823529411764706, 0.3803921568627451) ,
-  rgb (0.996078431372549, 0.8784313725490196, 0.5450980392156862) ,
-  rgb (1.0, 1.0, 0.7490196078431373) ,
-  rgb (0.9019607843137255, 0.9607843137254902, 0.596078431372549) ,
-  rgb (0.6705882352941176, 0.8666666666666667, 0.6431372549019608) ,
-  rgb (0.4, 0.7607843137254902, 0.6470588235294118) ,
-  rgb (0.19607843137254902, 0.5333333333333333, 0.7411764705882353) ,
-  rgb (0.3686274509803922, 0.30980392156862746, 0.6352941176470588)
-});
+    rgb (0.6196078431372549, 0.00392156862745098, 0.25882352941176473) ,
+      rgb (0.8352941176470589, 0.24313725490196078, 0.30980392156862746) ,
+      rgb (0.9568627450980393, 0.42745098039215684, 0.2627450980392157) ,
+      rgb (0.9921568627450981, 0.6823529411764706, 0.3803921568627451) ,
+      rgb (0.996078431372549, 0.8784313725490196, 0.5450980392156862) ,
+      rgb (1.0, 1.0, 0.7490196078431373) ,
+      rgb (0.9019607843137255, 0.9607843137254902, 0.596078431372549) ,
+      rgb (0.6705882352941176, 0.8666666666666667, 0.6431372549019608) ,
+      rgb (0.4, 0.7607843137254902, 0.6470588235294118) ,
+      rgb (0.19607843137254902, 0.5333333333333333, 0.7411764705882353) ,
+      rgb (0.3686274509803922, 0.30980392156862746, 0.6352941176470588)
+      });
 
 
 list_data YlGnBu = list_data(new pen[] {
-  rgb (1.0, 1.0, 0.8509803921568627) ,
-  rgb (0.9294117647058824, 0.9725490196078431, 0.6941176470588235) ,
-  rgb (0.7803921568627451, 0.9137254901960784, 0.7058823529411765) ,
-  rgb (0.4980392156862745, 0.803921568627451, 0.7333333333333333) ,
-  rgb (0.2549019607843137, 0.7137254901960784, 0.7686274509803922) ,
-  rgb (0.11372549019607843, 0.5686274509803921, 0.7529411764705882) ,
-  rgb (0.13333333333333333, 0.3686274509803922, 0.6588235294117647) ,
-  rgb (0.1450980392156863, 0.20392156862745098, 0.5803921568627451) ,
-  rgb (0.03137254901960784, 0.11372549019607843, 0.34509803921568627)
-});
+    rgb (1.0, 1.0, 0.8509803921568627) ,
+      rgb (0.9294117647058824, 0.9725490196078431, 0.6941176470588235) ,
+      rgb (0.7803921568627451, 0.9137254901960784, 0.7058823529411765) ,
+      rgb (0.4980392156862745, 0.803921568627451, 0.7333333333333333) ,
+      rgb (0.2549019607843137, 0.7137254901960784, 0.7686274509803922) ,
+      rgb (0.11372549019607843, 0.5686274509803921, 0.7529411764705882) ,
+      rgb (0.13333333333333333, 0.3686274509803922, 0.6588235294117647) ,
+      rgb (0.1450980392156863, 0.20392156862745098, 0.5803921568627451) ,
+      rgb (0.03137254901960784, 0.11372549019607843, 0.34509803921568627)
+      });
 
 
 list_data YlGn = list_data(new pen[] {
-  rgb (1.0, 1.0, 0.8980392156862745) ,
-  rgb (0.9686274509803922, 0.9882352941176471, 0.7254901960784313) ,
-  rgb (0.8509803921568627, 0.9411764705882353, 0.6392156862745098) ,
-  rgb (0.6784313725490196, 0.8666666666666667, 0.5568627450980392) ,
-  rgb (0.47058823529411764, 0.7764705882352941, 0.4745098039215686) ,
-  rgb (0.2549019607843137, 0.6705882352941176, 0.36470588235294116) ,
-  rgb (0.13725490196078433, 0.5176470588235295, 0.2627450980392157) ,
-  rgb (0.0, 0.40784313725490196, 0.21568627450980393) ,
-  rgb (0.0, 0.27058823529411763, 0.1607843137254902)
-});
+    rgb (1.0, 1.0, 0.8980392156862745) ,
+      rgb (0.9686274509803922, 0.9882352941176471, 0.7254901960784313) ,
+      rgb (0.8509803921568627, 0.9411764705882353, 0.6392156862745098) ,
+      rgb (0.6784313725490196, 0.8666666666666667, 0.5568627450980392) ,
+      rgb (0.47058823529411764, 0.7764705882352941, 0.4745098039215686) ,
+      rgb (0.2549019607843137, 0.6705882352941176, 0.36470588235294116) ,
+      rgb (0.13725490196078433, 0.5176470588235295, 0.2627450980392157) ,
+      rgb (0.0, 0.40784313725490196, 0.21568627450980393) ,
+      rgb (0.0, 0.27058823529411763, 0.1607843137254902)
+      });
 
 
 list_data YlOrBr = list_data(new pen[] {
-  rgb (1.0, 1.0, 0.8980392156862745) ,
-  rgb (1.0, 0.9686274509803922, 0.7372549019607844) ,
-  rgb (0.996078431372549, 0.8901960784313725, 0.5686274509803921) ,
-  rgb (0.996078431372549, 0.7686274509803922, 0.30980392156862746) ,
-  rgb (0.996078431372549, 0.6, 0.1607843137254902) ,
-  rgb (0.9254901960784314, 0.4392156862745098, 0.0784313725490196) ,
-  rgb (0.8, 0.2980392156862745, 0.00784313725490196) ,
-  rgb (0.6, 0.20392156862745098, 0.01568627450980392) ,
-  rgb (0.4, 0.1450980392156863, 0.02352941176470588)
-});
+    rgb (1.0, 1.0, 0.8980392156862745) ,
+      rgb (1.0, 0.9686274509803922, 0.7372549019607844) ,
+      rgb (0.996078431372549, 0.8901960784313725, 0.5686274509803921) ,
+      rgb (0.996078431372549, 0.7686274509803922, 0.30980392156862746) ,
+      rgb (0.996078431372549, 0.6, 0.1607843137254902) ,
+      rgb (0.9254901960784314, 0.4392156862745098, 0.0784313725490196) ,
+      rgb (0.8, 0.2980392156862745, 0.00784313725490196) ,
+      rgb (0.6, 0.20392156862745098, 0.01568627450980392) ,
+      rgb (0.4, 0.1450980392156863, 0.02352941176470588)
+      });
 
 
 list_data YlOrRd = list_data(new pen[] {
-  rgb (1.0, 1.0, 0.8) ,
-  rgb (1.0, 0.9294117647058824, 0.6274509803921569) ,
-  rgb (0.996078431372549, 0.8509803921568627, 0.4627450980392157) ,
-  rgb (0.996078431372549, 0.6980392156862745, 0.2980392156862745) ,
-  rgb (0.9921568627450981, 0.5529411764705883, 0.23529411764705882) ,
-  rgb (0.9882352941176471, 0.3058823529411765, 0.16470588235294117) ,
-  rgb (0.8901960784313725, 0.10196078431372549, 0.10980392156862745) ,
-  rgb (0.7411764705882353, 0.0, 0.14901960784313725) ,
-  rgb (0.5019607843137255, 0.0, 0.14901960784313725)
-});
+    rgb (1.0, 1.0, 0.8) ,
+      rgb (1.0, 0.9294117647058824, 0.6274509803921569) ,
+      rgb (0.996078431372549, 0.8509803921568627, 0.4627450980392157) ,
+      rgb (0.996078431372549, 0.6980392156862745, 0.2980392156862745) ,
+      rgb (0.9921568627450981, 0.5529411764705883, 0.23529411764705882) ,
+      rgb (0.9882352941176471, 0.3058823529411765, 0.16470588235294117) ,
+      rgb (0.8901960784313725, 0.10196078431372549, 0.10980392156862745) ,
+      rgb (0.7411764705882353, 0.0, 0.14901960784313725) ,
+      rgb (0.5019607843137255, 0.0, 0.14901960784313725)
+      });
 
 
 seg_data autumn = seg_data(
-  new triple[] {  // red
-     (0.0, 1.0, 1.0) ,
-     (1.0, 1.0, 1.0)
-  },
-  new triple[] {  // green
-     (0.0, 0.0, 0.0) ,
-     (1.0, 1.0, 1.0)
-  },
-  new triple[] {  // blue
-     (0.0, 0.0, 0.0) ,
-     (1.0, 0.0, 0.0)
-  }
-);
+                           new triple[] {  // red
+                             (0.0, 1.0, 1.0) ,
+                               (1.0, 1.0, 1.0)
+                               },
+                           new triple[] {  // green
+                             (0.0, 0.0, 0.0) ,
+                               (1.0, 1.0, 1.0)
+                               },
+                           new triple[] {  // blue
+                             (0.0, 0.0, 0.0) ,
+                               (1.0, 0.0, 0.0)
+                               }
+                           );
 
 
 seg_data binary = seg_data(
-  new triple[] {  // red
-     (0.0, 1.0, 1.0) ,
-     (1.0, 0.0, 0.0)
-  },
-  new triple[] {  // green
-     (0.0, 1.0, 1.0) ,
-     (1.0, 0.0, 0.0)
-  },
-  new triple[] {  // blue
-     (0.0, 1.0, 1.0) ,
-     (1.0, 0.0, 0.0)
-  }
-);
+                           new triple[] {  // red
+                             (0.0, 1.0, 1.0) ,
+                               (1.0, 0.0, 0.0)
+                               },
+                           new triple[] {  // green
+                             (0.0, 1.0, 1.0) ,
+                               (1.0, 0.0, 0.0)
+                               },
+                           new triple[] {  // blue
+                             (0.0, 1.0, 1.0) ,
+                               (1.0, 0.0, 0.0)
+                               }
+                           );
 
 
 seg_data bone = seg_data(
-  new triple[] {  // red
-     (0.0, 0.0, 0.0) ,
-     (0.746032, 0.652778, 0.652778) ,
-     (1.0, 1.0, 1.0)
-  },
-  new triple[] {  // green
-     (0.0, 0.0, 0.0) ,
-     (0.365079, 0.319444, 0.319444) ,
-     (0.746032, 0.777778, 0.777778) ,
-     (1.0, 1.0, 1.0)
-  },
-  new triple[] {  // blue
-     (0.0, 0.0, 0.0) ,
-     (0.365079, 0.444444, 0.444444) ,
-     (1.0, 1.0, 1.0)
-  }
-);
+                         new triple[] {  // red
+                           (0.0, 0.0, 0.0) ,
+                             (0.746032, 0.652778, 0.652778) ,
+                             (1.0, 1.0, 1.0)
+                             },
+                         new triple[] {  // green
+                           (0.0, 0.0, 0.0) ,
+                             (0.365079, 0.319444, 0.319444) ,
+                             (0.746032, 0.777778, 0.777778) ,
+                             (1.0, 1.0, 1.0)
+                             },
+                         new triple[] {  // blue
+                           (0.0, 0.0, 0.0) ,
+                             (0.365079, 0.444444, 0.444444) ,
+                             (1.0, 1.0, 1.0)
+                             }
+                         );
 
 
 list_data brg = list_data(new pen[] {
-  rgb (0.0, 0.0, 1.0) ,
-  rgb (1.0, 0.0, 0.0) ,
-  rgb (0.0, 1.0, 0.0)
-});
+    rgb (0.0, 0.0, 1.0) ,
+      rgb (1.0, 0.0, 0.0) ,
+      rgb (0.0, 1.0, 0.0)
+      });
 
 
 list_data bwr = list_data(new pen[] {
-  rgb (0.0, 0.0, 1.0) ,
-  rgb (1.0, 1.0, 1.0) ,
-  rgb (1.0, 0.0, 0.0)
-});
+    rgb (0.0, 0.0, 1.0) ,
+      rgb (1.0, 1.0, 1.0) ,
+      rgb (1.0, 0.0, 0.0)
+      });
 
 
 seg_data cool = seg_data(
-  new triple[] {  // red
-     (0.0, 0.0, 0.0) ,
-     (1.0, 1.0, 1.0)
-  },
-  new triple[] {  // green
-     (0.0, 1.0, 1.0) ,
-     (1.0, 0.0, 0.0)
-  },
-  new triple[] {  // blue
-     (0.0, 1.0, 1.0) ,
-     (1.0, 1.0, 1.0)
-  }
-);
+                         new triple[] {  // red
+                           (0.0, 0.0, 0.0) ,
+                             (1.0, 1.0, 1.0)
+                             },
+                         new triple[] {  // green
+                           (0.0, 1.0, 1.0) ,
+                             (1.0, 0.0, 0.0)
+                             },
+                         new triple[] {  // blue
+                           (0.0, 1.0, 1.0) ,
+                             (1.0, 1.0, 1.0)
+                             }
+                         );
 
 
 seg_data coolwarm = seg_data(
-  new triple[] {  // red
-     (0.0, 0.2298057, 0.2298057) ,
-     (0.03125, 0.26623388, 0.26623388) ,
-     (0.0625, 0.30386891, 0.30386891) ,
-     (0.09375, 0.342804478, 0.342804478) ,
-     (0.125, 0.38301334, 0.38301334) ,
-     (0.15625, 0.424369608, 0.424369608) ,
-     (0.1875, 0.46666708, 0.46666708) ,
-     (0.21875, 0.509635204, 0.509635204) ,
-     (0.25, 0.552953156, 0.552953156) ,
-     (0.28125, 0.596262162, 0.596262162) ,
-     (0.3125, 0.639176211, 0.639176211) ,
-     (0.34375, 0.681291281, 0.681291281) ,
-     (0.375, 0.722193294, 0.722193294) ,
-     (0.40625, 0.761464949, 0.761464949) ,
-     (0.4375, 0.798691636, 0.798691636) ,
-     (0.46875, 0.833466556, 0.833466556) ,
-     (0.5, 0.865395197, 0.865395197) ,
-     (0.53125, 0.897787179, 0.897787179) ,
-     (0.5625, 0.924127593, 0.924127593) ,
-     (0.59375, 0.944468518, 0.944468518) ,
-     (0.625, 0.958852946, 0.958852946) ,
-     (0.65625, 0.96732803, 0.96732803) ,
-     (0.6875, 0.969954137, 0.969954137) ,
-     (0.71875, 0.966811177, 0.966811177) ,
-     (0.75, 0.958003065, 0.958003065) ,
-     (0.78125, 0.943660866, 0.943660866) ,
-     (0.8125, 0.923944917, 0.923944917) ,
-     (0.84375, 0.89904617, 0.89904617) ,
-     (0.875, 0.869186849, 0.869186849) ,
-     (0.90625, 0.834620542, 0.834620542) ,
-     (0.9375, 0.795631745, 0.795631745) ,
-     (0.96875, 0.752534934, 0.752534934) ,
-     (1.0, 0.705673158, 0.705673158)
-  },
-  new triple[] {  // green
-     (0.0, 0.298717966, 0.298717966) ,
-     (0.03125, 0.353094838, 0.353094838) ,
-     (0.0625, 0.406535296, 0.406535296) ,
-     (0.09375, 0.458757618, 0.458757618) ,
-     (0.125, 0.50941904, 0.50941904) ,
-     (0.15625, 0.558148092, 0.558148092) ,
-     (0.1875, 0.604562568, 0.604562568) ,
-     (0.21875, 0.648280772, 0.648280772) ,
-     (0.25, 0.688929332, 0.688929332) ,
-     (0.28125, 0.726149107, 0.726149107) ,
-     (0.3125, 0.759599947, 0.759599947) ,
-     (0.34375, 0.788964712, 0.788964712) ,
-     (0.375, 0.813952739, 0.813952739) ,
-     (0.40625, 0.834302879, 0.834302879) ,
-     (0.4375, 0.849786142, 0.849786142) ,
-     (0.46875, 0.860207984, 0.860207984) ,
-     (0.5, 0.86541021, 0.86541021) ,
-     (0.53125, 0.848937047, 0.848937047) ,
-     (0.5625, 0.827384882, 0.827384882) ,
-     (0.59375, 0.800927443, 0.800927443) ,
-     (0.625, 0.769767752, 0.769767752) ,
-     (0.65625, 0.734132809, 0.734132809) ,
-     (0.6875, 0.694266682, 0.694266682) ,
-     (0.71875, 0.650421156, 0.650421156) ,
-     (0.75, 0.602842431, 0.602842431) ,
-     (0.78125, 0.551750968, 0.551750968) ,
-     (0.8125, 0.49730856, 0.49730856) ,
-     (0.84375, 0.439559467, 0.439559467) ,
-     (0.875, 0.378313092, 0.378313092) ,
-     (0.90625, 0.312874446, 0.312874446) ,
-     (0.9375, 0.24128379, 0.24128379) ,
-     (0.96875, 0.157246067, 0.157246067) ,
-     (1.0, 0.01555616, 0.01555616)
-  },
-  new triple[] {  // blue
-     (0.0, 0.753683153, 0.753683153) ,
-     (0.03125, 0.801466763, 0.801466763) ,
-     (0.0625, 0.84495867, 0.84495867) ,
-     (0.09375, 0.883725899, 0.883725899) ,
-     (0.125, 0.917387822, 0.917387822) ,
-     (0.15625, 0.945619588, 0.945619588) ,
-     (0.1875, 0.968154911, 0.968154911) ,
-     (0.21875, 0.98478814, 0.98478814) ,
-     (0.25, 0.995375608, 0.995375608) ,
-     (0.28125, 0.999836203, 0.999836203) ,
-     (0.3125, 0.998151185, 0.998151185) ,
-     (0.34375, 0.990363227, 0.990363227) ,
-     (0.375, 0.976574709, 0.976574709) ,
-     (0.40625, 0.956945269, 0.956945269) ,
-     (0.4375, 0.931688648, 0.931688648) ,
-     (0.46875, 0.901068838, 0.901068838) ,
-     (0.5, 0.865395561, 0.865395561) ,
-     (0.53125, 0.820880546, 0.820880546) ,
-     (0.5625, 0.774508472, 0.774508472) ,
-     (0.59375, 0.726736146, 0.726736146) ,
-     (0.625, 0.678007945, 0.678007945) ,
-     (0.65625, 0.628751763, 0.628751763) ,
-     (0.6875, 0.579375448, 0.579375448) ,
-     (0.71875, 0.530263762, 0.530263762) ,
-     (0.75, 0.481775914, 0.481775914) ,
-     (0.78125, 0.434243684, 0.434243684) ,
-     (0.8125, 0.387970225, 0.387970225) ,
-     (0.84375, 0.343229596, 0.343229596) ,
-     (0.875, 0.300267182, 0.300267182) ,
-     (0.90625, 0.259301199, 0.259301199) ,
-     (0.9375, 0.220525627, 0.220525627) ,
-     (0.96875, 0.184115123, 0.184115123) ,
-     (1.0, 0.150232812, 0.150232812)
-  }
-);
+                             new triple[] {  // red
+                               (0.0, 0.2298057, 0.2298057) ,
+                                 (0.03125, 0.26623388, 0.26623388) ,
+                                 (0.0625, 0.30386891, 0.30386891) ,
+                                 (0.09375, 0.342804478, 0.342804478) ,
+                                 (0.125, 0.38301334, 0.38301334) ,
+                                 (0.15625, 0.424369608, 0.424369608) ,
+                                 (0.1875, 0.46666708, 0.46666708) ,
+                                 (0.21875, 0.509635204, 0.509635204) ,
+                                 (0.25, 0.552953156, 0.552953156) ,
+                                 (0.28125, 0.596262162, 0.596262162) ,
+                                 (0.3125, 0.639176211, 0.639176211) ,
+                                 (0.34375, 0.681291281, 0.681291281) ,
+                                 (0.375, 0.722193294, 0.722193294) ,
+                                 (0.40625, 0.761464949, 0.761464949) ,
+                                 (0.4375, 0.798691636, 0.798691636) ,
+                                 (0.46875, 0.833466556, 0.833466556) ,
+                                 (0.5, 0.865395197, 0.865395197) ,
+                                 (0.53125, 0.897787179, 0.897787179) ,
+                                 (0.5625, 0.924127593, 0.924127593) ,
+                                 (0.59375, 0.944468518, 0.944468518) ,
+                                 (0.625, 0.958852946, 0.958852946) ,
+                                 (0.65625, 0.96732803, 0.96732803) ,
+                                 (0.6875, 0.969954137, 0.969954137) ,
+                                 (0.71875, 0.966811177, 0.966811177) ,
+                                 (0.75, 0.958003065, 0.958003065) ,
+                                 (0.78125, 0.943660866, 0.943660866) ,
+                                 (0.8125, 0.923944917, 0.923944917) ,
+                                 (0.84375, 0.89904617, 0.89904617) ,
+                                 (0.875, 0.869186849, 0.869186849) ,
+                                 (0.90625, 0.834620542, 0.834620542) ,
+                                 (0.9375, 0.795631745, 0.795631745) ,
+                                 (0.96875, 0.752534934, 0.752534934) ,
+                                 (1.0, 0.705673158, 0.705673158)
+                                 },
+                             new triple[] {  // green
+                               (0.0, 0.298717966, 0.298717966) ,
+                                 (0.03125, 0.353094838, 0.353094838) ,
+                                 (0.0625, 0.406535296, 0.406535296) ,
+                                 (0.09375, 0.458757618, 0.458757618) ,
+                                 (0.125, 0.50941904, 0.50941904) ,
+                                 (0.15625, 0.558148092, 0.558148092) ,
+                                 (0.1875, 0.604562568, 0.604562568) ,
+                                 (0.21875, 0.648280772, 0.648280772) ,
+                                 (0.25, 0.688929332, 0.688929332) ,
+                                 (0.28125, 0.726149107, 0.726149107) ,
+                                 (0.3125, 0.759599947, 0.759599947) ,
+                                 (0.34375, 0.788964712, 0.788964712) ,
+                                 (0.375, 0.813952739, 0.813952739) ,
+                                 (0.40625, 0.834302879, 0.834302879) ,
+                                 (0.4375, 0.849786142, 0.849786142) ,
+                                 (0.46875, 0.860207984, 0.860207984) ,
+                                 (0.5, 0.86541021, 0.86541021) ,
+                                 (0.53125, 0.848937047, 0.848937047) ,
+                                 (0.5625, 0.827384882, 0.827384882) ,
+                                 (0.59375, 0.800927443, 0.800927443) ,
+                                 (0.625, 0.769767752, 0.769767752) ,
+                                 (0.65625, 0.734132809, 0.734132809) ,
+                                 (0.6875, 0.694266682, 0.694266682) ,
+                                 (0.71875, 0.650421156, 0.650421156) ,
+                                 (0.75, 0.602842431, 0.602842431) ,
+                                 (0.78125, 0.551750968, 0.551750968) ,
+                                 (0.8125, 0.49730856, 0.49730856) ,
+                                 (0.84375, 0.439559467, 0.439559467) ,
+                                 (0.875, 0.378313092, 0.378313092) ,
+                                 (0.90625, 0.312874446, 0.312874446) ,
+                                 (0.9375, 0.24128379, 0.24128379) ,
+                                 (0.96875, 0.157246067, 0.157246067) ,
+                                 (1.0, 0.01555616, 0.01555616)
+                                 },
+                             new triple[] {  // blue
+                               (0.0, 0.753683153, 0.753683153) ,
+                                 (0.03125, 0.801466763, 0.801466763) ,
+                                 (0.0625, 0.84495867, 0.84495867) ,
+                                 (0.09375, 0.883725899, 0.883725899) ,
+                                 (0.125, 0.917387822, 0.917387822) ,
+                                 (0.15625, 0.945619588, 0.945619588) ,
+                                 (0.1875, 0.968154911, 0.968154911) ,
+                                 (0.21875, 0.98478814, 0.98478814) ,
+                                 (0.25, 0.995375608, 0.995375608) ,
+                                 (0.28125, 0.999836203, 0.999836203) ,
+                                 (0.3125, 0.998151185, 0.998151185) ,
+                                 (0.34375, 0.990363227, 0.990363227) ,
+                                 (0.375, 0.976574709, 0.976574709) ,
+                                 (0.40625, 0.956945269, 0.956945269) ,
+                                 (0.4375, 0.931688648, 0.931688648) ,
+                                 (0.46875, 0.901068838, 0.901068838) ,
+                                 (0.5, 0.865395561, 0.865395561) ,
+                                 (0.53125, 0.820880546, 0.820880546) ,
+                                 (0.5625, 0.774508472, 0.774508472) ,
+                                 (0.59375, 0.726736146, 0.726736146) ,
+                                 (0.625, 0.678007945, 0.678007945) ,
+                                 (0.65625, 0.628751763, 0.628751763) ,
+                                 (0.6875, 0.579375448, 0.579375448) ,
+                                 (0.71875, 0.530263762, 0.530263762) ,
+                                 (0.75, 0.481775914, 0.481775914) ,
+                                 (0.78125, 0.434243684, 0.434243684) ,
+                                 (0.8125, 0.387970225, 0.387970225) ,
+                                 (0.84375, 0.343229596, 0.343229596) ,
+                                 (0.875, 0.300267182, 0.300267182) ,
+                                 (0.90625, 0.259301199, 0.259301199) ,
+                                 (0.9375, 0.220525627, 0.220525627) ,
+                                 (0.96875, 0.184115123, 0.184115123) ,
+                                 (1.0, 0.150232812, 0.150232812)
+                                 }
+                             );
 
 
 seg_data copper = seg_data(
-  new triple[] {  // red
-     (0.0, 0.0, 0.0) ,
-     (0.809524, 1.0, 1.0) ,
-     (1.0, 1.0, 1.0)
-  },
-  new triple[] {  // green
-     (0.0, 0.0, 0.0) ,
-     (1.0, 0.7812, 0.7812)
-  },
-  new triple[] {  // blue
-     (0.0, 0.0, 0.0) ,
-     (1.0, 0.4975, 0.4975)
-  }
-);
+                           new triple[] {  // red
+                             (0.0, 0.0, 0.0) ,
+                               (0.809524, 1.0, 1.0) ,
+                               (1.0, 1.0, 1.0)
+                               },
+                           new triple[] {  // green
+                             (0.0, 0.0, 0.0) ,
+                               (1.0, 0.7812, 0.7812)
+                               },
+                           new triple[] {  // blue
+                             (0.0, 0.0, 0.0) ,
+                               (1.0, 0.4975, 0.4975)
+                               }
+                           );
 
 
 seg_data gist_earth = seg_data(
-  new triple[] {  // red
-     (0.0, 0.0, 0.0) ,
-     (0.2824, 0.1882, 0.1882) ,
-     (0.4588, 0.2714, 0.2714) ,
-     (0.549, 0.4719, 0.4719) ,
-     (0.698, 0.7176, 0.7176) ,
-     (0.7882, 0.7553, 0.7553) ,
-     (1.0, 0.9922, 0.9922)
-  },
-  new triple[] {  // green
-     (0.0, 0.0, 0.0) ,
-     (0.0275, 0.0, 0.0) ,
-     (0.1098, 0.1893, 0.1893) ,
-     (0.1647, 0.3035, 0.3035) ,
-     (0.2078, 0.3841, 0.3841) ,
-     (0.2824, 0.502, 0.502) ,
-     (0.5216, 0.6397, 0.6397) ,
-     (0.698, 0.7171, 0.7171) ,
-     (0.7882, 0.6392, 0.6392) ,
-     (0.7922, 0.6413, 0.6413) ,
-     (0.8, 0.6447, 0.6447) ,
-     (0.8078, 0.6481, 0.6481) ,
-     (0.8157, 0.6549, 0.6549) ,
-     (0.8667, 0.6991, 0.6991) ,
-     (0.8745, 0.7103, 0.7103) ,
-     (0.8824, 0.7216, 0.7216) ,
-     (0.8902, 0.7323, 0.7323) ,
-     (0.898, 0.743, 0.743) ,
-     (0.9412, 0.8275, 0.8275) ,
-     (0.9569, 0.8635, 0.8635) ,
-     (0.9647, 0.8816, 0.8816) ,
-     (0.9961, 0.9733, 0.9733) ,
-     (1.0, 0.9843, 0.9843)
-  },
-  new triple[] {  // blue
-     (0.0, 0.0, 0.0) ,
-     (0.0039, 0.1684, 0.1684) ,
-     (0.0078, 0.2212, 0.2212) ,
-     (0.0275, 0.4329, 0.4329) ,
-     (0.0314, 0.4549, 0.4549) ,
-     (0.2824, 0.5004, 0.5004) ,
-     (0.4667, 0.2748, 0.2748) ,
-     (0.5451, 0.3205, 0.3205) ,
-     (0.7843, 0.3961, 0.3961) ,
-     (0.8941, 0.6651, 0.6651) ,
-     (1.0, 0.9843, 0.9843)
-  }
-);
+                               new triple[] {  // red
+                                 (0.0, 0.0, 0.0) ,
+                                   (0.2824, 0.1882, 0.1882) ,
+                                   (0.4588, 0.2714, 0.2714) ,
+                                   (0.549, 0.4719, 0.4719) ,
+                                   (0.698, 0.7176, 0.7176) ,
+                                   (0.7882, 0.7553, 0.7553) ,
+                                   (1.0, 0.9922, 0.9922)
+                                   },
+                               new triple[] {  // green
+                                 (0.0, 0.0, 0.0) ,
+                                   (0.0275, 0.0, 0.0) ,
+                                   (0.1098, 0.1893, 0.1893) ,
+                                   (0.1647, 0.3035, 0.3035) ,
+                                   (0.2078, 0.3841, 0.3841) ,
+                                   (0.2824, 0.502, 0.502) ,
+                                   (0.5216, 0.6397, 0.6397) ,
+                                   (0.698, 0.7171, 0.7171) ,
+                                   (0.7882, 0.6392, 0.6392) ,
+                                   (0.7922, 0.6413, 0.6413) ,
+                                   (0.8, 0.6447, 0.6447) ,
+                                   (0.8078, 0.6481, 0.6481) ,
+                                   (0.8157, 0.6549, 0.6549) ,
+                                   (0.8667, 0.6991, 0.6991) ,
+                                   (0.8745, 0.7103, 0.7103) ,
+                                   (0.8824, 0.7216, 0.7216) ,
+                                   (0.8902, 0.7323, 0.7323) ,
+                                   (0.898, 0.743, 0.743) ,
+                                   (0.9412, 0.8275, 0.8275) ,
+                                   (0.9569, 0.8635, 0.8635) ,
+                                   (0.9647, 0.8816, 0.8816) ,
+                                   (0.9961, 0.9733, 0.9733) ,
+                                   (1.0, 0.9843, 0.9843)
+                                   },
+                               new triple[] {  // blue
+                                 (0.0, 0.0, 0.0) ,
+                                   (0.0039, 0.1684, 0.1684) ,
+                                   (0.0078, 0.2212, 0.2212) ,
+                                   (0.0275, 0.4329, 0.4329) ,
+                                   (0.0314, 0.4549, 0.4549) ,
+                                   (0.2824, 0.5004, 0.5004) ,
+                                   (0.4667, 0.2748, 0.2748) ,
+                                   (0.5451, 0.3205, 0.3205) ,
+                                   (0.7843, 0.3961, 0.3961) ,
+                                   (0.8941, 0.6651, 0.6651) ,
+                                   (1.0, 0.9843, 0.9843)
+                                   }
+                               );
 
 
 seg_data gist_ncar = seg_data(
-  new triple[] {  // red
-     (0.0, 0.0, 0.0) ,
-     (0.3098, 0.0, 0.0) ,
-     (0.3725, 0.3993, 0.3993) ,
-     (0.4235, 0.5003, 0.5003) ,
-     (0.5333, 1.0, 1.0) ,
-     (0.7922, 1.0, 1.0) ,
-     (0.8471, 0.6218, 0.6218) ,
-     (0.898, 0.9235, 0.9235) ,
-     (1.0, 0.9961, 0.9961)
-  },
-  new triple[] {  // green
-     (0.0, 0.0, 0.0) ,
-     (0.051, 0.3722, 0.3722) ,
-     (0.1059, 0.0, 0.0) ,
-     (0.1569, 0.7202, 0.7202) ,
-     (0.1608, 0.7537, 0.7537) ,
-     (0.1647, 0.7752, 0.7752) ,
-     (0.2157, 1.0, 1.0) ,
-     (0.2588, 0.9804, 0.9804) ,
-     (0.2706, 0.9804, 0.9804) ,
-     (0.3176, 1.0, 1.0) ,
-     (0.3686, 0.8081, 0.8081) ,
-     (0.4275, 1.0, 1.0) ,
-     (0.5216, 1.0, 1.0) ,
-     (0.6314, 0.7292, 0.7292) ,
-     (0.6863, 0.2796, 0.2796) ,
-     (0.7451, 0.0, 0.0) ,
-     (0.7922, 0.0, 0.0) ,
-     (0.8431, 0.1753, 0.1753) ,
-     (0.898, 0.5, 0.5) ,
-     (1.0, 0.9725, 0.9725)
-  },
-  new triple[] {  // blue
-     (0.0, 0.502, 0.502) ,
-     (0.051, 0.0222, 0.0222) ,
-     (0.1098, 1.0, 1.0) ,
-     (0.2039, 1.0, 1.0) ,
-     (0.2627, 0.6145, 0.6145) ,
-     (0.3216, 0.0, 0.0) ,
-     (0.4157, 0.0, 0.0) ,
-     (0.4745, 0.2342, 0.2342) ,
-     (0.5333, 0.0, 0.0) ,
-     (0.5804, 0.0, 0.0) ,
-     (0.6314, 0.0549, 0.0549) ,
-     (0.6902, 0.0, 0.0) ,
-     (0.7373, 0.0, 0.0) ,
-     (0.7922, 0.9738, 0.9738) ,
-     (0.8, 1.0, 1.0) ,
-     (0.8431, 1.0, 1.0) ,
-     (0.898, 0.9341, 0.9341) ,
-     (1.0, 0.9961, 0.9961)
-  }
-);
+                              new triple[] {  // red
+                                (0.0, 0.0, 0.0) ,
+                                  (0.3098, 0.0, 0.0) ,
+                                  (0.3725, 0.3993, 0.3993) ,
+                                  (0.4235, 0.5003, 0.5003) ,
+                                  (0.5333, 1.0, 1.0) ,
+                                  (0.7922, 1.0, 1.0) ,
+                                  (0.8471, 0.6218, 0.6218) ,
+                                  (0.898, 0.9235, 0.9235) ,
+                                  (1.0, 0.9961, 0.9961)
+                                  },
+                              new triple[] {  // green
+                                (0.0, 0.0, 0.0) ,
+                                  (0.051, 0.3722, 0.3722) ,
+                                  (0.1059, 0.0, 0.0) ,
+                                  (0.1569, 0.7202, 0.7202) ,
+                                  (0.1608, 0.7537, 0.7537) ,
+                                  (0.1647, 0.7752, 0.7752) ,
+                                  (0.2157, 1.0, 1.0) ,
+                                  (0.2588, 0.9804, 0.9804) ,
+                                  (0.2706, 0.9804, 0.9804) ,
+                                  (0.3176, 1.0, 1.0) ,
+                                  (0.3686, 0.8081, 0.8081) ,
+                                  (0.4275, 1.0, 1.0) ,
+                                  (0.5216, 1.0, 1.0) ,
+                                  (0.6314, 0.7292, 0.7292) ,
+                                  (0.6863, 0.2796, 0.2796) ,
+                                  (0.7451, 0.0, 0.0) ,
+                                  (0.7922, 0.0, 0.0) ,
+                                  (0.8431, 0.1753, 0.1753) ,
+                                  (0.898, 0.5, 0.5) ,
+                                  (1.0, 0.9725, 0.9725)
+                                  },
+                              new triple[] {  // blue
+                                (0.0, 0.502, 0.502) ,
+                                  (0.051, 0.0222, 0.0222) ,
+                                  (0.1098, 1.0, 1.0) ,
+                                  (0.2039, 1.0, 1.0) ,
+                                  (0.2627, 0.6145, 0.6145) ,
+                                  (0.3216, 0.0, 0.0) ,
+                                  (0.4157, 0.0, 0.0) ,
+                                  (0.4745, 0.2342, 0.2342) ,
+                                  (0.5333, 0.0, 0.0) ,
+                                  (0.5804, 0.0, 0.0) ,
+                                  (0.6314, 0.0549, 0.0549) ,
+                                  (0.6902, 0.0, 0.0) ,
+                                  (0.7373, 0.0, 0.0) ,
+                                  (0.7922, 0.9738, 0.9738) ,
+                                  (0.8, 1.0, 1.0) ,
+                                  (0.8431, 1.0, 1.0) ,
+                                  (0.898, 0.9341, 0.9341) ,
+                                  (1.0, 0.9961, 0.9961)
+                                  }
+                              );
 
 
 seg_data gist_stern = seg_data(
-  new triple[] {  // red
-     (0.0, 0.0, 0.0) ,
-     (0.0547, 1.0, 1.0) ,
-     (0.25, 0.027, 0.25) ,
-     (1.0, 1.0, 1.0)
-  },
-  new triple[] {  // green
-     (0, 0, 0) ,
-     (1, 1, 1)
-  },
-  new triple[] {  // blue
-     (0.0, 0.0, 0.0) ,
-     (0.5, 1.0, 1.0) ,
-     (0.735, 0.0, 0.0) ,
-     (1.0, 1.0, 1.0)
-  }
-);
+                               new triple[] {  // red
+                                 (0.0, 0.0, 0.0) ,
+                                   (0.0547, 1.0, 1.0) ,
+                                   (0.25, 0.027, 0.25) ,
+                                   (1.0, 1.0, 1.0)
+                                   },
+                               new triple[] {  // green
+                                 (0, 0, 0) ,
+                                   (1, 1, 1)
+                                   },
+                               new triple[] {  // blue
+                                 (0.0, 0.0, 0.0) ,
+                                   (0.5, 1.0, 1.0) ,
+                                   (0.735, 0.0, 0.0) ,
+                                   (1.0, 1.0, 1.0)
+                                   }
+                               );
 
 
 seg_data gray = seg_data(
-  new triple[] {  // red
-     (0.0, 0, 0) ,
-     (1.0, 1, 1)
-  },
-  new triple[] {  // green
-     (0.0, 0, 0) ,
-     (1.0, 1, 1)
-  },
-  new triple[] {  // blue
-     (0.0, 0, 0) ,
-     (1.0, 1, 1)
-  }
-);
+                         new triple[] {  // red
+                           (0.0, 0, 0) ,
+                             (1.0, 1, 1)
+                             },
+                         new triple[] {  // green
+                           (0.0, 0, 0) ,
+                             (1.0, 1, 1)
+                             },
+                         new triple[] {  // blue
+                           (0.0, 0, 0) ,
+                             (1.0, 1, 1)
+                             }
+                         );
 
 
 seg_data hot = seg_data(
-  new triple[] {  // red
-     (0.0, 0.0416, 0.0416) ,
-     (0.365079, 1.0, 1.0) ,
-     (1.0, 1.0, 1.0)
-  },
-  new triple[] {  // green
-     (0.0, 0.0, 0.0) ,
-     (0.365079, 0.0, 0.0) ,
-     (0.746032, 1.0, 1.0) ,
-     (1.0, 1.0, 1.0)
-  },
-  new triple[] {  // blue
-     (0.0, 0.0, 0.0) ,
-     (0.746032, 0.0, 0.0) ,
-     (1.0, 1.0, 1.0)
-  }
-);
+                        new triple[] {  // red
+                          (0.0, 0.0416, 0.0416) ,
+                            (0.365079, 1.0, 1.0) ,
+                            (1.0, 1.0, 1.0)
+                            },
+                        new triple[] {  // green
+                          (0.0, 0.0, 0.0) ,
+                            (0.365079, 0.0, 0.0) ,
+                            (0.746032, 1.0, 1.0) ,
+                            (1.0, 1.0, 1.0)
+                            },
+                        new triple[] {  // blue
+                          (0.0, 0.0, 0.0) ,
+                            (0.746032, 0.0, 0.0) ,
+                            (1.0, 1.0, 1.0)
+                            }
+                        );
 
 
 seg_data hsv = seg_data(
-  new triple[] {  // red
-     (0.0, 1.0, 1.0) ,
-     (0.15873, 1.0, 1.0) ,
-     (0.174603, 0.96875, 0.96875) ,
-     (0.333333, 0.03125, 0.03125) ,
-     (0.349206, 0.0, 0.0) ,
-     (0.666667, 0.0, 0.0) ,
-     (0.68254, 0.03125, 0.03125) ,
-     (0.84127, 0.96875, 0.96875) ,
-     (0.857143, 1.0, 1.0) ,
-     (1.0, 1.0, 1.0)
-  },
-  new triple[] {  // green
-     (0.0, 0.0, 0.0) ,
-     (0.15873, 0.9375, 0.9375) ,
-     (0.174603, 1.0, 1.0) ,
-     (0.507937, 1.0, 1.0) ,
-     (0.666667, 0.0625, 0.0625) ,
-     (0.68254, 0.0, 0.0) ,
-     (1.0, 0.0, 0.0)
-  },
-  new triple[] {  // blue
-     (0.0, 0.0, 0.0) ,
-     (0.333333, 0.0, 0.0) ,
-     (0.349206, 0.0625, 0.0625) ,
-     (0.507937, 1.0, 1.0) ,
-     (0.84127, 1.0, 1.0) ,
-     (0.857143, 0.9375, 0.9375) ,
-     (1.0, 0.09375, 0.09375)
-  }
-);
+                        new triple[] {  // red
+                          (0.0, 1.0, 1.0) ,
+                            (0.15873, 1.0, 1.0) ,
+                            (0.174603, 0.96875, 0.96875) ,
+                            (0.333333, 0.03125, 0.03125) ,
+                            (0.349206, 0.0, 0.0) ,
+                            (0.666667, 0.0, 0.0) ,
+                            (0.68254, 0.03125, 0.03125) ,
+                            (0.84127, 0.96875, 0.96875) ,
+                            (0.857143, 1.0, 1.0) ,
+                            (1.0, 1.0, 1.0)
+                            },
+                        new triple[] {  // green
+                          (0.0, 0.0, 0.0) ,
+                            (0.15873, 0.9375, 0.9375) ,
+                            (0.174603, 1.0, 1.0) ,
+                            (0.507937, 1.0, 1.0) ,
+                            (0.666667, 0.0625, 0.0625) ,
+                            (0.68254, 0.0, 0.0) ,
+                            (1.0, 0.0, 0.0)
+                            },
+                        new triple[] {  // blue
+                          (0.0, 0.0, 0.0) ,
+                            (0.333333, 0.0, 0.0) ,
+                            (0.349206, 0.0625, 0.0625) ,
+                            (0.507937, 1.0, 1.0) ,
+                            (0.84127, 1.0, 1.0) ,
+                            (0.857143, 0.9375, 0.9375) ,
+                            (1.0, 0.09375, 0.09375)
+                            }
+                        );
 
 
 seg_data jet = seg_data(
-  new triple[] {  // red
-     (0.0, 0, 0) ,
-     (0.35, 0, 0) ,
-     (0.66, 1, 1) ,
-     (0.89, 1, 1) ,
-     (1, 0.5, 0.5)
-  },
-  new triple[] {  // green
-     (0.0, 0, 0) ,
-     (0.125, 0, 0) ,
-     (0.375, 1, 1) ,
-     (0.64, 1, 1) ,
-     (0.91, 0, 0) ,
-     (1, 0, 0)
-  },
-  new triple[] {  // blue
-     (0.0, 0.5, 0.5) ,
-     (0.11, 1, 1) ,
-     (0.34, 1, 1) ,
-     (0.65, 0, 0) ,
-     (1, 0, 0)
-  }
-);
+                        new triple[] {  // red
+                          (0.0, 0, 0) ,
+                            (0.35, 0, 0) ,
+                            (0.66, 1, 1) ,
+                            (0.89, 1, 1) ,
+                            (1, 0.5, 0.5)
+                            },
+                        new triple[] {  // green
+                          (0.0, 0, 0) ,
+                            (0.125, 0, 0) ,
+                            (0.375, 1, 1) ,
+                            (0.64, 1, 1) ,
+                            (0.91, 0, 0) ,
+                            (1, 0, 0)
+                            },
+                        new triple[] {  // blue
+                          (0.0, 0.5, 0.5) ,
+                            (0.11, 1, 1) ,
+                            (0.34, 1, 1) ,
+                            (0.65, 0, 0) ,
+                            (1, 0, 0)
+                            }
+                        );
 
 
 seg_data nipy_spectral = seg_data(
-  new triple[] {  // red
-     (0.0, 0.0, 0.0) ,
-     (0.05, 0.4667, 0.4667) ,
-     (0.1, 0.5333, 0.5333) ,
-     (0.15, 0.0, 0.0) ,
-     (0.2, 0.0, 0.0) ,
-     (0.25, 0.0, 0.0) ,
-     (0.3, 0.0, 0.0) ,
-     (0.35, 0.0, 0.0) ,
-     (0.4, 0.0, 0.0) ,
-     (0.45, 0.0, 0.0) ,
-     (0.5, 0.0, 0.0) ,
-     (0.55, 0.0, 0.0) ,
-     (0.6, 0.0, 0.0) ,
-     (0.65, 0.7333, 0.7333) ,
-     (0.7, 0.9333, 0.9333) ,
-     (0.75, 1.0, 1.0) ,
-     (0.8, 1.0, 1.0) ,
-     (0.85, 1.0, 1.0) ,
-     (0.9, 0.8667, 0.8667) ,
-     (0.95, 0.8, 0.8) ,
-     (1.0, 0.8, 0.8)
-  },
-  new triple[] {  // green
-     (0.0, 0.0, 0.0) ,
-     (0.05, 0.0, 0.0) ,
-     (0.1, 0.0, 0.0) ,
-     (0.15, 0.0, 0.0) ,
-     (0.2, 0.0, 0.0) ,
-     (0.25, 0.4667, 0.4667) ,
-     (0.3, 0.6, 0.6) ,
-     (0.35, 0.6667, 0.6667) ,
-     (0.4, 0.6667, 0.6667) ,
-     (0.45, 0.6, 0.6) ,
-     (0.5, 0.7333, 0.7333) ,
-     (0.55, 0.8667, 0.8667) ,
-     (0.6, 1.0, 1.0) ,
-     (0.65, 1.0, 1.0) ,
-     (0.7, 0.9333, 0.9333) ,
-     (0.75, 0.8, 0.8) ,
-     (0.8, 0.6, 0.6) ,
-     (0.85, 0.0, 0.0) ,
-     (0.9, 0.0, 0.0) ,
-     (0.95, 0.0, 0.0) ,
-     (1.0, 0.8, 0.8)
-  },
-  new triple[] {  // blue
-     (0.0, 0.0, 0.0) ,
-     (0.05, 0.5333, 0.5333) ,
-     (0.1, 0.6, 0.6) ,
-     (0.15, 0.6667, 0.6667) ,
-     (0.2, 0.8667, 0.8667) ,
-     (0.25, 0.8667, 0.8667) ,
-     (0.3, 0.8667, 0.8667) ,
-     (0.35, 0.6667, 0.6667) ,
-     (0.4, 0.5333, 0.5333) ,
-     (0.45, 0.0, 0.0) ,
-     (0.5, 0.0, 0.0) ,
-     (0.55, 0.0, 0.0) ,
-     (0.6, 0.0, 0.0) ,
-     (0.65, 0.0, 0.0) ,
-     (0.7, 0.0, 0.0) ,
-     (0.75, 0.0, 0.0) ,
-     (0.8, 0.0, 0.0) ,
-     (0.85, 0.0, 0.0) ,
-     (0.9, 0.0, 0.0) ,
-     (0.95, 0.0, 0.0) ,
-     (1.0, 0.8, 0.8)
-  }
-);
+                                  new triple[] {  // red
+                                    (0.0, 0.0, 0.0) ,
+                                      (0.05, 0.4667, 0.4667) ,
+                                      (0.1, 0.5333, 0.5333) ,
+                                      (0.15, 0.0, 0.0) ,
+                                      (0.2, 0.0, 0.0) ,
+                                      (0.25, 0.0, 0.0) ,
+                                      (0.3, 0.0, 0.0) ,
+                                      (0.35, 0.0, 0.0) ,
+                                      (0.4, 0.0, 0.0) ,
+                                      (0.45, 0.0, 0.0) ,
+                                      (0.5, 0.0, 0.0) ,
+                                      (0.55, 0.0, 0.0) ,
+                                      (0.6, 0.0, 0.0) ,
+                                      (0.65, 0.7333, 0.7333) ,
+                                      (0.7, 0.9333, 0.9333) ,
+                                      (0.75, 1.0, 1.0) ,
+                                      (0.8, 1.0, 1.0) ,
+                                      (0.85, 1.0, 1.0) ,
+                                      (0.9, 0.8667, 0.8667) ,
+                                      (0.95, 0.8, 0.8) ,
+                                      (1.0, 0.8, 0.8)
+                                      },
+                                  new triple[] {  // green
+                                    (0.0, 0.0, 0.0) ,
+                                      (0.05, 0.0, 0.0) ,
+                                      (0.1, 0.0, 0.0) ,
+                                      (0.15, 0.0, 0.0) ,
+                                      (0.2, 0.0, 0.0) ,
+                                      (0.25, 0.4667, 0.4667) ,
+                                      (0.3, 0.6, 0.6) ,
+                                      (0.35, 0.6667, 0.6667) ,
+                                      (0.4, 0.6667, 0.6667) ,
+                                      (0.45, 0.6, 0.6) ,
+                                      (0.5, 0.7333, 0.7333) ,
+                                      (0.55, 0.8667, 0.8667) ,
+                                      (0.6, 1.0, 1.0) ,
+                                      (0.65, 1.0, 1.0) ,
+                                      (0.7, 0.9333, 0.9333) ,
+                                      (0.75, 0.8, 0.8) ,
+                                      (0.8, 0.6, 0.6) ,
+                                      (0.85, 0.0, 0.0) ,
+                                      (0.9, 0.0, 0.0) ,
+                                      (0.95, 0.0, 0.0) ,
+                                      (1.0, 0.8, 0.8)
+                                      },
+                                  new triple[] {  // blue
+                                    (0.0, 0.0, 0.0) ,
+                                      (0.05, 0.5333, 0.5333) ,
+                                      (0.1, 0.6, 0.6) ,
+                                      (0.15, 0.6667, 0.6667) ,
+                                      (0.2, 0.8667, 0.8667) ,
+                                      (0.25, 0.8667, 0.8667) ,
+                                      (0.3, 0.8667, 0.8667) ,
+                                      (0.35, 0.6667, 0.6667) ,
+                                      (0.4, 0.5333, 0.5333) ,
+                                      (0.45, 0.0, 0.0) ,
+                                      (0.5, 0.0, 0.0) ,
+                                      (0.55, 0.0, 0.0) ,
+                                      (0.6, 0.0, 0.0) ,
+                                      (0.65, 0.0, 0.0) ,
+                                      (0.7, 0.0, 0.0) ,
+                                      (0.75, 0.0, 0.0) ,
+                                      (0.8, 0.0, 0.0) ,
+                                      (0.85, 0.0, 0.0) ,
+                                      (0.9, 0.0, 0.0) ,
+                                      (0.95, 0.0, 0.0) ,
+                                      (1.0, 0.8, 0.8)
+                                      }
+                                  );
 
 
 seg_data pink = seg_data(
-  new triple[] {  // red
-     (0.0, 0.1178, 0.1178) ,
-     (0.015873, 0.195857, 0.195857) ,
-     (0.031746, 0.250661, 0.250661) ,
-     (0.047619, 0.295468, 0.295468) ,
-     (0.063492, 0.334324, 0.334324) ,
-     (0.079365, 0.369112, 0.369112) ,
-     (0.095238, 0.400892, 0.400892) ,
-     (0.111111, 0.430331, 0.430331) ,
-     (0.126984, 0.457882, 0.457882) ,
-     (0.142857, 0.483867, 0.483867) ,
-     (0.15873, 0.508525, 0.508525) ,
-     (0.174603, 0.532042, 0.532042) ,
-     (0.190476, 0.554563, 0.554563) ,
-     (0.206349, 0.576204, 0.576204) ,
-     (0.222222, 0.597061, 0.597061) ,
-     (0.238095, 0.617213, 0.617213) ,
-     (0.253968, 0.636729, 0.636729) ,
-     (0.269841, 0.655663, 0.655663) ,
-     (0.285714, 0.674066, 0.674066) ,
-     (0.301587, 0.69198, 0.69198) ,
-     (0.31746, 0.709441, 0.709441) ,
-     (0.333333, 0.726483, 0.726483) ,
-     (0.349206, 0.743134, 0.743134) ,
-     (0.365079, 0.759421, 0.759421) ,
-     (0.380952, 0.766356, 0.766356) ,
-     (0.396825, 0.773229, 0.773229) ,
-     (0.412698, 0.780042, 0.780042) ,
-     (0.428571, 0.786796, 0.786796) ,
-     (0.444444, 0.793492, 0.793492) ,
-     (0.460317, 0.800132, 0.800132) ,
-     (0.47619, 0.806718, 0.806718) ,
-     (0.492063, 0.81325, 0.81325) ,
-     (0.507937, 0.81973, 0.81973) ,
-     (0.52381, 0.82616, 0.82616) ,
-     (0.539683, 0.832539, 0.832539) ,
-     (0.555556, 0.83887, 0.83887) ,
-     (0.571429, 0.845154, 0.845154) ,
-     (0.587302, 0.851392, 0.851392) ,
-     (0.603175, 0.857584, 0.857584) ,
-     (0.619048, 0.863731, 0.863731) ,
-     (0.634921, 0.869835, 0.869835) ,
-     (0.650794, 0.875897, 0.875897) ,
-     (0.666667, 0.881917, 0.881917) ,
-     (0.68254, 0.887896, 0.887896) ,
-     (0.698413, 0.893835, 0.893835) ,
-     (0.714286, 0.899735, 0.899735) ,
-     (0.730159, 0.905597, 0.905597) ,
-     (0.746032, 0.911421, 0.911421) ,
-     (0.761905, 0.917208, 0.917208) ,
-     (0.777778, 0.922958, 0.922958) ,
-     (0.793651, 0.928673, 0.928673) ,
-     (0.809524, 0.934353, 0.934353) ,
-     (0.825397, 0.939999, 0.939999) ,
-     (0.84127, 0.945611, 0.945611) ,
-     (0.857143, 0.95119, 0.95119) ,
-     (0.873016, 0.956736, 0.956736) ,
-     (0.888889, 0.96225, 0.96225) ,
-     (0.904762, 0.967733, 0.967733) ,
-     (0.920635, 0.973185, 0.973185) ,
-     (0.936508, 0.978607, 0.978607) ,
-     (0.952381, 0.983999, 0.983999) ,
-     (0.968254, 0.989361, 0.989361) ,
-     (0.984127, 0.994695, 0.994695) ,
-     (1.0, 1.0, 1.0)
-  },
-  new triple[] {  // green
-     (0.0, 0.0, 0.0) ,
-     (0.015873, 0.102869, 0.102869) ,
-     (0.031746, 0.145479, 0.145479) ,
-     (0.047619, 0.178174, 0.178174) ,
-     (0.063492, 0.205738, 0.205738) ,
-     (0.079365, 0.230022, 0.230022) ,
-     (0.095238, 0.251976, 0.251976) ,
-     (0.111111, 0.272166, 0.272166) ,
-     (0.126984, 0.290957, 0.290957) ,
-     (0.142857, 0.308607, 0.308607) ,
-     (0.15873, 0.3253, 0.3253) ,
-     (0.174603, 0.341178, 0.341178) ,
-     (0.190476, 0.356348, 0.356348) ,
-     (0.206349, 0.370899, 0.370899) ,
-     (0.222222, 0.3849, 0.3849) ,
-     (0.238095, 0.39841, 0.39841) ,
-     (0.253968, 0.411476, 0.411476) ,
-     (0.269841, 0.424139, 0.424139) ,
-     (0.285714, 0.436436, 0.436436) ,
-     (0.301587, 0.448395, 0.448395) ,
-     (0.31746, 0.460044, 0.460044) ,
-     (0.333333, 0.471405, 0.471405) ,
-     (0.349206, 0.482498, 0.482498) ,
-     (0.365079, 0.493342, 0.493342) ,
-     (0.380952, 0.517549, 0.517549) ,
-     (0.396825, 0.540674, 0.540674) ,
-     (0.412698, 0.562849, 0.562849) ,
-     (0.428571, 0.584183, 0.584183) ,
-     (0.444444, 0.604765, 0.604765) ,
-     (0.460317, 0.624669, 0.624669) ,
-     (0.47619, 0.643958, 0.643958) ,
-     (0.492063, 0.662687, 0.662687) ,
-     (0.507937, 0.6809, 0.6809) ,
-     (0.52381, 0.698638, 0.698638) ,
-     (0.539683, 0.715937, 0.715937) ,
-     (0.555556, 0.732828, 0.732828) ,
-     (0.571429, 0.749338, 0.749338) ,
-     (0.587302, 0.765493, 0.765493) ,
-     (0.603175, 0.781313, 0.781313) ,
-     (0.619048, 0.796819, 0.796819) ,
-     (0.634921, 0.812029, 0.812029) ,
-     (0.650794, 0.82696, 0.82696) ,
-     (0.666667, 0.841625, 0.841625) ,
-     (0.68254, 0.85604, 0.85604) ,
-     (0.698413, 0.870216, 0.870216) ,
-     (0.714286, 0.884164, 0.884164) ,
-     (0.730159, 0.897896, 0.897896) ,
-     (0.746032, 0.911421, 0.911421) ,
-     (0.761905, 0.917208, 0.917208) ,
-     (0.777778, 0.922958, 0.922958) ,
-     (0.793651, 0.928673, 0.928673) ,
-     (0.809524, 0.934353, 0.934353) ,
-     (0.825397, 0.939999, 0.939999) ,
-     (0.84127, 0.945611, 0.945611) ,
-     (0.857143, 0.95119, 0.95119) ,
-     (0.873016, 0.956736, 0.956736) ,
-     (0.888889, 0.96225, 0.96225) ,
-     (0.904762, 0.967733, 0.967733) ,
-     (0.920635, 0.973185, 0.973185) ,
-     (0.936508, 0.978607, 0.978607) ,
-     (0.952381, 0.983999, 0.983999) ,
-     (0.968254, 0.989361, 0.989361) ,
-     (0.984127, 0.994695, 0.994695) ,
-     (1.0, 1.0, 1.0)
-  },
-  new triple[] {  // blue
-     (0.0, 0.0, 0.0) ,
-     (0.015873, 0.102869, 0.102869) ,
-     (0.031746, 0.145479, 0.145479) ,
-     (0.047619, 0.178174, 0.178174) ,
-     (0.063492, 0.205738, 0.205738) ,
-     (0.079365, 0.230022, 0.230022) ,
-     (0.095238, 0.251976, 0.251976) ,
-     (0.111111, 0.272166, 0.272166) ,
-     (0.126984, 0.290957, 0.290957) ,
-     (0.142857, 0.308607, 0.308607) ,
-     (0.15873, 0.3253, 0.3253) ,
-     (0.174603, 0.341178, 0.341178) ,
-     (0.190476, 0.356348, 0.356348) ,
-     (0.206349, 0.370899, 0.370899) ,
-     (0.222222, 0.3849, 0.3849) ,
-     (0.238095, 0.39841, 0.39841) ,
-     (0.253968, 0.411476, 0.411476) ,
-     (0.269841, 0.424139, 0.424139) ,
-     (0.285714, 0.436436, 0.436436) ,
-     (0.301587, 0.448395, 0.448395) ,
-     (0.31746, 0.460044, 0.460044) ,
-     (0.333333, 0.471405, 0.471405) ,
-     (0.349206, 0.482498, 0.482498) ,
-     (0.365079, 0.493342, 0.493342) ,
-     (0.380952, 0.503953, 0.503953) ,
-     (0.396825, 0.514344, 0.514344) ,
-     (0.412698, 0.524531, 0.524531) ,
-     (0.428571, 0.534522, 0.534522) ,
-     (0.444444, 0.544331, 0.544331) ,
-     (0.460317, 0.553966, 0.553966) ,
-     (0.47619, 0.563436, 0.563436) ,
-     (0.492063, 0.57275, 0.57275) ,
-     (0.507937, 0.581914, 0.581914) ,
-     (0.52381, 0.590937, 0.590937) ,
-     (0.539683, 0.599824, 0.599824) ,
-     (0.555556, 0.608581, 0.608581) ,
-     (0.571429, 0.617213, 0.617213) ,
-     (0.587302, 0.625727, 0.625727) ,
-     (0.603175, 0.634126, 0.634126) ,
-     (0.619048, 0.642416, 0.642416) ,
-     (0.634921, 0.6506, 0.6506) ,
-     (0.650794, 0.658682, 0.658682) ,
-     (0.666667, 0.666667, 0.666667) ,
-     (0.68254, 0.674556, 0.674556) ,
-     (0.698413, 0.682355, 0.682355) ,
-     (0.714286, 0.690066, 0.690066) ,
-     (0.730159, 0.697691, 0.697691) ,
-     (0.746032, 0.705234, 0.705234) ,
-     (0.761905, 0.727166, 0.727166) ,
-     (0.777778, 0.748455, 0.748455) ,
-     (0.793651, 0.769156, 0.769156) ,
-     (0.809524, 0.789314, 0.789314) ,
-     (0.825397, 0.808969, 0.808969) ,
-     (0.84127, 0.828159, 0.828159) ,
-     (0.857143, 0.846913, 0.846913) ,
-     (0.873016, 0.865261, 0.865261) ,
-     (0.888889, 0.883229, 0.883229) ,
-     (0.904762, 0.900837, 0.900837) ,
-     (0.920635, 0.918109, 0.918109) ,
-     (0.936508, 0.935061, 0.935061) ,
-     (0.952381, 0.951711, 0.951711) ,
-     (0.968254, 0.968075, 0.968075) ,
-     (0.984127, 0.984167, 0.984167) ,
-     (1.0, 1.0, 1.0)
-  }
-);
+                         new triple[] {  // red
+                           (0.0, 0.1178, 0.1178) ,
+                             (0.015873, 0.195857, 0.195857) ,
+                             (0.031746, 0.250661, 0.250661) ,
+                             (0.047619, 0.295468, 0.295468) ,
+                             (0.063492, 0.334324, 0.334324) ,
+                             (0.079365, 0.369112, 0.369112) ,
+                             (0.095238, 0.400892, 0.400892) ,
+                             (0.111111, 0.430331, 0.430331) ,
+                             (0.126984, 0.457882, 0.457882) ,
+                             (0.142857, 0.483867, 0.483867) ,
+                             (0.15873, 0.508525, 0.508525) ,
+                             (0.174603, 0.532042, 0.532042) ,
+                             (0.190476, 0.554563, 0.554563) ,
+                             (0.206349, 0.576204, 0.576204) ,
+                             (0.222222, 0.597061, 0.597061) ,
+                             (0.238095, 0.617213, 0.617213) ,
+                             (0.253968, 0.636729, 0.636729) ,
+                             (0.269841, 0.655663, 0.655663) ,
+                             (0.285714, 0.674066, 0.674066) ,
+                             (0.301587, 0.69198, 0.69198) ,
+                             (0.31746, 0.709441, 0.709441) ,
+                             (0.333333, 0.726483, 0.726483) ,
+                             (0.349206, 0.743134, 0.743134) ,
+                             (0.365079, 0.759421, 0.759421) ,
+                             (0.380952, 0.766356, 0.766356) ,
+                             (0.396825, 0.773229, 0.773229) ,
+                             (0.412698, 0.780042, 0.780042) ,
+                             (0.428571, 0.786796, 0.786796) ,
+                             (0.444444, 0.793492, 0.793492) ,
+                             (0.460317, 0.800132, 0.800132) ,
+                             (0.47619, 0.806718, 0.806718) ,
+                             (0.492063, 0.81325, 0.81325) ,
+                             (0.507937, 0.81973, 0.81973) ,
+                             (0.52381, 0.82616, 0.82616) ,
+                             (0.539683, 0.832539, 0.832539) ,
+                             (0.555556, 0.83887, 0.83887) ,
+                             (0.571429, 0.845154, 0.845154) ,
+                             (0.587302, 0.851392, 0.851392) ,
+                             (0.603175, 0.857584, 0.857584) ,
+                             (0.619048, 0.863731, 0.863731) ,
+                             (0.634921, 0.869835, 0.869835) ,
+                             (0.650794, 0.875897, 0.875897) ,
+                             (0.666667, 0.881917, 0.881917) ,
+                             (0.68254, 0.887896, 0.887896) ,
+                             (0.698413, 0.893835, 0.893835) ,
+                             (0.714286, 0.899735, 0.899735) ,
+                             (0.730159, 0.905597, 0.905597) ,
+                             (0.746032, 0.911421, 0.911421) ,
+                             (0.761905, 0.917208, 0.917208) ,
+                             (0.777778, 0.922958, 0.922958) ,
+                             (0.793651, 0.928673, 0.928673) ,
+                             (0.809524, 0.934353, 0.934353) ,
+                             (0.825397, 0.939999, 0.939999) ,
+                             (0.84127, 0.945611, 0.945611) ,
+                             (0.857143, 0.95119, 0.95119) ,
+                             (0.873016, 0.956736, 0.956736) ,
+                             (0.888889, 0.96225, 0.96225) ,
+                             (0.904762, 0.967733, 0.967733) ,
+                             (0.920635, 0.973185, 0.973185) ,
+                             (0.936508, 0.978607, 0.978607) ,
+                             (0.952381, 0.983999, 0.983999) ,
+                             (0.968254, 0.989361, 0.989361) ,
+                             (0.984127, 0.994695, 0.994695) ,
+                             (1.0, 1.0, 1.0)
+                             },
+                         new triple[] {  // green
+                           (0.0, 0.0, 0.0) ,
+                             (0.015873, 0.102869, 0.102869) ,
+                             (0.031746, 0.145479, 0.145479) ,
+                             (0.047619, 0.178174, 0.178174) ,
+                             (0.063492, 0.205738, 0.205738) ,
+                             (0.079365, 0.230022, 0.230022) ,
+                             (0.095238, 0.251976, 0.251976) ,
+                             (0.111111, 0.272166, 0.272166) ,
+                             (0.126984, 0.290957, 0.290957) ,
+                             (0.142857, 0.308607, 0.308607) ,
+                             (0.15873, 0.3253, 0.3253) ,
+                             (0.174603, 0.341178, 0.341178) ,
+                             (0.190476, 0.356348, 0.356348) ,
+                             (0.206349, 0.370899, 0.370899) ,
+                             (0.222222, 0.3849, 0.3849) ,
+                             (0.238095, 0.39841, 0.39841) ,
+                             (0.253968, 0.411476, 0.411476) ,
+                             (0.269841, 0.424139, 0.424139) ,
+                             (0.285714, 0.436436, 0.436436) ,
+                             (0.301587, 0.448395, 0.448395) ,
+                             (0.31746, 0.460044, 0.460044) ,
+                             (0.333333, 0.471405, 0.471405) ,
+                             (0.349206, 0.482498, 0.482498) ,
+                             (0.365079, 0.493342, 0.493342) ,
+                             (0.380952, 0.517549, 0.517549) ,
+                             (0.396825, 0.540674, 0.540674) ,
+                             (0.412698, 0.562849, 0.562849) ,
+                             (0.428571, 0.584183, 0.584183) ,
+                             (0.444444, 0.604765, 0.604765) ,
+                             (0.460317, 0.624669, 0.624669) ,
+                             (0.47619, 0.643958, 0.643958) ,
+                             (0.492063, 0.662687, 0.662687) ,
+                             (0.507937, 0.6809, 0.6809) ,
+                             (0.52381, 0.698638, 0.698638) ,
+                             (0.539683, 0.715937, 0.715937) ,
+                             (0.555556, 0.732828, 0.732828) ,
+                             (0.571429, 0.749338, 0.749338) ,
+                             (0.587302, 0.765493, 0.765493) ,
+                             (0.603175, 0.781313, 0.781313) ,
+                             (0.619048, 0.796819, 0.796819) ,
+                             (0.634921, 0.812029, 0.812029) ,
+                             (0.650794, 0.82696, 0.82696) ,
+                             (0.666667, 0.841625, 0.841625) ,
+                             (0.68254, 0.85604, 0.85604) ,
+                             (0.698413, 0.870216, 0.870216) ,
+                             (0.714286, 0.884164, 0.884164) ,
+                             (0.730159, 0.897896, 0.897896) ,
+                             (0.746032, 0.911421, 0.911421) ,
+                             (0.761905, 0.917208, 0.917208) ,
+                             (0.777778, 0.922958, 0.922958) ,
+                             (0.793651, 0.928673, 0.928673) ,
+                             (0.809524, 0.934353, 0.934353) ,
+                             (0.825397, 0.939999, 0.939999) ,
+                             (0.84127, 0.945611, 0.945611) ,
+                             (0.857143, 0.95119, 0.95119) ,
+                             (0.873016, 0.956736, 0.956736) ,
+                             (0.888889, 0.96225, 0.96225) ,
+                             (0.904762, 0.967733, 0.967733) ,
+                             (0.920635, 0.973185, 0.973185) ,
+                             (0.936508, 0.978607, 0.978607) ,
+                             (0.952381, 0.983999, 0.983999) ,
+                             (0.968254, 0.989361, 0.989361) ,
+                             (0.984127, 0.994695, 0.994695) ,
+                             (1.0, 1.0, 1.0)
+                             },
+                         new triple[] {  // blue
+                           (0.0, 0.0, 0.0) ,
+                             (0.015873, 0.102869, 0.102869) ,
+                             (0.031746, 0.145479, 0.145479) ,
+                             (0.047619, 0.178174, 0.178174) ,
+                             (0.063492, 0.205738, 0.205738) ,
+                             (0.079365, 0.230022, 0.230022) ,
+                             (0.095238, 0.251976, 0.251976) ,
+                             (0.111111, 0.272166, 0.272166) ,
+                             (0.126984, 0.290957, 0.290957) ,
+                             (0.142857, 0.308607, 0.308607) ,
+                             (0.15873, 0.3253, 0.3253) ,
+                             (0.174603, 0.341178, 0.341178) ,
+                             (0.190476, 0.356348, 0.356348) ,
+                             (0.206349, 0.370899, 0.370899) ,
+                             (0.222222, 0.3849, 0.3849) ,
+                             (0.238095, 0.39841, 0.39841) ,
+                             (0.253968, 0.411476, 0.411476) ,
+                             (0.269841, 0.424139, 0.424139) ,
+                             (0.285714, 0.436436, 0.436436) ,
+                             (0.301587, 0.448395, 0.448395) ,
+                             (0.31746, 0.460044, 0.460044) ,
+                             (0.333333, 0.471405, 0.471405) ,
+                             (0.349206, 0.482498, 0.482498) ,
+                             (0.365079, 0.493342, 0.493342) ,
+                             (0.380952, 0.503953, 0.503953) ,
+                             (0.396825, 0.514344, 0.514344) ,
+                             (0.412698, 0.524531, 0.524531) ,
+                             (0.428571, 0.534522, 0.534522) ,
+                             (0.444444, 0.544331, 0.544331) ,
+                             (0.460317, 0.553966, 0.553966) ,
+                             (0.47619, 0.563436, 0.563436) ,
+                             (0.492063, 0.57275, 0.57275) ,
+                             (0.507937, 0.581914, 0.581914) ,
+                             (0.52381, 0.590937, 0.590937) ,
+                             (0.539683, 0.599824, 0.599824) ,
+                             (0.555556, 0.608581, 0.608581) ,
+                             (0.571429, 0.617213, 0.617213) ,
+                             (0.587302, 0.625727, 0.625727) ,
+                             (0.603175, 0.634126, 0.634126) ,
+                             (0.619048, 0.642416, 0.642416) ,
+                             (0.634921, 0.6506, 0.6506) ,
+                             (0.650794, 0.658682, 0.658682) ,
+                             (0.666667, 0.666667, 0.666667) ,
+                             (0.68254, 0.674556, 0.674556) ,
+                             (0.698413, 0.682355, 0.682355) ,
+                             (0.714286, 0.690066, 0.690066) ,
+                             (0.730159, 0.697691, 0.697691) ,
+                             (0.746032, 0.705234, 0.705234) ,
+                             (0.761905, 0.727166, 0.727166) ,
+                             (0.777778, 0.748455, 0.748455) ,
+                             (0.793651, 0.769156, 0.769156) ,
+                             (0.809524, 0.789314, 0.789314) ,
+                             (0.825397, 0.808969, 0.808969) ,
+                             (0.84127, 0.828159, 0.828159) ,
+                             (0.857143, 0.846913, 0.846913) ,
+                             (0.873016, 0.865261, 0.865261) ,
+                             (0.888889, 0.883229, 0.883229) ,
+                             (0.904762, 0.900837, 0.900837) ,
+                             (0.920635, 0.918109, 0.918109) ,
+                             (0.936508, 0.935061, 0.935061) ,
+                             (0.952381, 0.951711, 0.951711) ,
+                             (0.968254, 0.968075, 0.968075) ,
+                             (0.984127, 0.984167, 0.984167) ,
+                             (1.0, 1.0, 1.0)
+                             }
+                         );
 
 
 list_data seismic = list_data(new pen[] {
-  rgb (0.0, 0.0, 0.3) ,
-  rgb (0.0, 0.0, 1.0) ,
-  rgb (1.0, 1.0, 1.0) ,
-  rgb (1.0, 0.0, 0.0) ,
-  rgb (0.5, 0.0, 0.0)
-});
+    rgb (0.0, 0.0, 0.3) ,
+      rgb (0.0, 0.0, 1.0) ,
+      rgb (1.0, 1.0, 1.0) ,
+      rgb (1.0, 0.0, 0.0) ,
+      rgb (0.5, 0.0, 0.0)
+      });
 
 
 seg_data spring = seg_data(
-  new triple[] {  // red
-     (0.0, 1.0, 1.0) ,
-     (1.0, 1.0, 1.0)
-  },
-  new triple[] {  // green
-     (0.0, 0.0, 0.0) ,
-     (1.0, 1.0, 1.0)
-  },
-  new triple[] {  // blue
-     (0.0, 1.0, 1.0) ,
-     (1.0, 0.0, 0.0)
-  }
-);
+                           new triple[] {  // red
+                             (0.0, 1.0, 1.0) ,
+                               (1.0, 1.0, 1.0)
+                               },
+                           new triple[] {  // green
+                             (0.0, 0.0, 0.0) ,
+                               (1.0, 1.0, 1.0)
+                               },
+                           new triple[] {  // blue
+                             (0.0, 1.0, 1.0) ,
+                               (1.0, 0.0, 0.0)
+                               }
+                           );
 
 
 seg_data summer = seg_data(
-  new triple[] {  // red
-     (0.0, 0.0, 0.0) ,
-     (1.0, 1.0, 1.0)
-  },
-  new triple[] {  // green
-     (0.0, 0.5, 0.5) ,
-     (1.0, 1.0, 1.0)
-  },
-  new triple[] {  // blue
-     (0.0, 0.4, 0.4) ,
-     (1.0, 0.4, 0.4)
-  }
-);
+                           new triple[] {  // red
+                             (0.0, 0.0, 0.0) ,
+                               (1.0, 1.0, 1.0)
+                               },
+                           new triple[] {  // green
+                             (0.0, 0.5, 0.5) ,
+                               (1.0, 1.0, 1.0)
+                               },
+                           new triple[] {  // blue
+                             (0.0, 0.4, 0.4) ,
+                               (1.0, 0.4, 0.4)
+                               }
+                           );
 
 
 list_data tab10 = list_data(new pen[] {
-  rgb (0.12156862745098039, 0.4666666666666667, 0.7058823529411765) ,
-  rgb (1.0, 0.4980392156862745, 0.054901960784313725) ,
-  rgb (0.17254901960784313, 0.6274509803921569, 0.17254901960784313) ,
-  rgb (0.8392156862745098, 0.15294117647058825, 0.1568627450980392) ,
-  rgb (0.5803921568627451, 0.403921568627451, 0.7411764705882353) ,
-  rgb (0.5490196078431373, 0.33725490196078434, 0.29411764705882354) ,
-  rgb (0.8901960784313725, 0.4666666666666667, 0.7607843137254902) ,
-  rgb (0.4980392156862745, 0.4980392156862745, 0.4980392156862745) ,
-  rgb (0.7372549019607844, 0.7411764705882353, 0.13333333333333333) ,
-  rgb (0.09019607843137255, 0.7450980392156863, 0.8117647058823529)
-});
+    rgb (0.12156862745098039, 0.4666666666666667, 0.7058823529411765) ,
+      rgb (1.0, 0.4980392156862745, 0.054901960784313725) ,
+      rgb (0.17254901960784313, 0.6274509803921569, 0.17254901960784313) ,
+      rgb (0.8392156862745098, 0.15294117647058825, 0.1568627450980392) ,
+      rgb (0.5803921568627451, 0.403921568627451, 0.7411764705882353) ,
+      rgb (0.5490196078431373, 0.33725490196078434, 0.29411764705882354) ,
+      rgb (0.8901960784313725, 0.4666666666666667, 0.7607843137254902) ,
+      rgb (0.4980392156862745, 0.4980392156862745, 0.4980392156862745) ,
+      rgb (0.7372549019607844, 0.7411764705882353, 0.13333333333333333) ,
+      rgb (0.09019607843137255, 0.7450980392156863, 0.8117647058823529)
+      });
 
 
 list_data tab20 = list_data(new pen[] {
-  rgb (0.12156862745098039, 0.4666666666666667, 0.7058823529411765) ,
-  rgb (0.6823529411764706, 0.7803921568627451, 0.9098039215686274) ,
-  rgb (1.0, 0.4980392156862745, 0.054901960784313725) ,
-  rgb (1.0, 0.7333333333333333, 0.47058823529411764) ,
-  rgb (0.17254901960784313, 0.6274509803921569, 0.17254901960784313) ,
-  rgb (0.596078431372549, 0.8745098039215686, 0.5411764705882353) ,
-  rgb (0.8392156862745098, 0.15294117647058825, 0.1568627450980392) ,
-  rgb (1.0, 0.596078431372549, 0.5882352941176471) ,
-  rgb (0.5803921568627451, 0.403921568627451, 0.7411764705882353) ,
-  rgb (0.7725490196078432, 0.6901960784313725, 0.8352941176470589) ,
-  rgb (0.5490196078431373, 0.33725490196078434, 0.29411764705882354) ,
-  rgb (0.7686274509803922, 0.611764705882353, 0.5803921568627451) ,
-  rgb (0.8901960784313725, 0.4666666666666667, 0.7607843137254902) ,
-  rgb (0.9686274509803922, 0.7137254901960784, 0.8235294117647058) ,
-  rgb (0.4980392156862745, 0.4980392156862745, 0.4980392156862745) ,
-  rgb (0.7803921568627451, 0.7803921568627451, 0.7803921568627451) ,
-  rgb (0.7372549019607844, 0.7411764705882353, 0.13333333333333333) ,
-  rgb (0.8588235294117647, 0.8588235294117647, 0.5529411764705883) ,
-  rgb (0.09019607843137255, 0.7450980392156863, 0.8117647058823529) ,
-  rgb (0.6196078431372549, 0.8549019607843137, 0.8980392156862745)
-});
+    rgb (0.12156862745098039, 0.4666666666666667, 0.7058823529411765) ,
+      rgb (0.6823529411764706, 0.7803921568627451, 0.9098039215686274) ,
+      rgb (1.0, 0.4980392156862745, 0.054901960784313725) ,
+      rgb (1.0, 0.7333333333333333, 0.47058823529411764) ,
+      rgb (0.17254901960784313, 0.6274509803921569, 0.17254901960784313) ,
+      rgb (0.596078431372549, 0.8745098039215686, 0.5411764705882353) ,
+      rgb (0.8392156862745098, 0.15294117647058825, 0.1568627450980392) ,
+      rgb (1.0, 0.596078431372549, 0.5882352941176471) ,
+      rgb (0.5803921568627451, 0.403921568627451, 0.7411764705882353) ,
+      rgb (0.7725490196078432, 0.6901960784313725, 0.8352941176470589) ,
+      rgb (0.5490196078431373, 0.33725490196078434, 0.29411764705882354) ,
+      rgb (0.7686274509803922, 0.611764705882353, 0.5803921568627451) ,
+      rgb (0.8901960784313725, 0.4666666666666667, 0.7607843137254902) ,
+      rgb (0.9686274509803922, 0.7137254901960784, 0.8235294117647058) ,
+      rgb (0.4980392156862745, 0.4980392156862745, 0.4980392156862745) ,
+      rgb (0.7803921568627451, 0.7803921568627451, 0.7803921568627451) ,
+      rgb (0.7372549019607844, 0.7411764705882353, 0.13333333333333333) ,
+      rgb (0.8588235294117647, 0.8588235294117647, 0.5529411764705883) ,
+      rgb (0.09019607843137255, 0.7450980392156863, 0.8117647058823529) ,
+      rgb (0.6196078431372549, 0.8549019607843137, 0.8980392156862745)
+      });
 
 
 list_data tab20b = list_data(new pen[] {
-  rgb (0.2235294117647059, 0.23137254901960785, 0.4745098039215686) ,
-  rgb (0.3215686274509804, 0.32941176470588235, 0.6392156862745098) ,
-  rgb (0.4196078431372549, 0.43137254901960786, 0.8117647058823529) ,
-  rgb (0.611764705882353, 0.6196078431372549, 0.8705882352941177) ,
-  rgb (0.38823529411764707, 0.4745098039215686, 0.2235294117647059) ,
-  rgb (0.5490196078431373, 0.6352941176470588, 0.3215686274509804) ,
-  rgb (0.7098039215686275, 0.8117647058823529, 0.4196078431372549) ,
-  rgb (0.807843137254902, 0.8588235294117647, 0.611764705882353) ,
-  rgb (0.5490196078431373, 0.42745098039215684, 0.19215686274509805) ,
-  rgb (0.7411764705882353, 0.6196078431372549, 0.2235294117647059) ,
-  rgb (0.9058823529411765, 0.7294117647058823, 0.3215686274509804) ,
-  rgb (0.9058823529411765, 0.796078431372549, 0.5803921568627451) ,
-  rgb (0.5176470588235295, 0.23529411764705882, 0.2235294117647059) ,
-  rgb (0.6784313725490196, 0.28627450980392155, 0.2901960784313726) ,
-  rgb (0.8392156862745098, 0.3803921568627451, 0.4196078431372549) ,
-  rgb (0.9058823529411765, 0.5882352941176471, 0.611764705882353) ,
-  rgb (0.4823529411764706, 0.2549019607843137, 0.45098039215686275) ,
-  rgb (0.6470588235294118, 0.3176470588235294, 0.5803921568627451) ,
-  rgb (0.807843137254902, 0.42745098039215684, 0.7411764705882353) ,
-  rgb (0.8705882352941177, 0.6196078431372549, 0.8392156862745098)
-});
+    rgb (0.2235294117647059, 0.23137254901960785, 0.4745098039215686) ,
+      rgb (0.3215686274509804, 0.32941176470588235, 0.6392156862745098) ,
+      rgb (0.4196078431372549, 0.43137254901960786, 0.8117647058823529) ,
+      rgb (0.611764705882353, 0.6196078431372549, 0.8705882352941177) ,
+      rgb (0.38823529411764707, 0.4745098039215686, 0.2235294117647059) ,
+      rgb (0.5490196078431373, 0.6352941176470588, 0.3215686274509804) ,
+      rgb (0.7098039215686275, 0.8117647058823529, 0.4196078431372549) ,
+      rgb (0.807843137254902, 0.8588235294117647, 0.611764705882353) ,
+      rgb (0.5490196078431373, 0.42745098039215684, 0.19215686274509805) ,
+      rgb (0.7411764705882353, 0.6196078431372549, 0.2235294117647059) ,
+      rgb (0.9058823529411765, 0.7294117647058823, 0.3215686274509804) ,
+      rgb (0.9058823529411765, 0.796078431372549, 0.5803921568627451) ,
+      rgb (0.5176470588235295, 0.23529411764705882, 0.2235294117647059) ,
+      rgb (0.6784313725490196, 0.28627450980392155, 0.2901960784313726) ,
+      rgb (0.8392156862745098, 0.3803921568627451, 0.4196078431372549) ,
+      rgb (0.9058823529411765, 0.5882352941176471, 0.611764705882353) ,
+      rgb (0.4823529411764706, 0.2549019607843137, 0.45098039215686275) ,
+      rgb (0.6470588235294118, 0.3176470588235294, 0.5803921568627451) ,
+      rgb (0.807843137254902, 0.42745098039215684, 0.7411764705882353) ,
+      rgb (0.8705882352941177, 0.6196078431372549, 0.8392156862745098)
+      });
 
 
 list_data tab20c = list_data(new pen[] {
-  rgb (0.19215686274509805, 0.5098039215686274, 0.7411764705882353) ,
-  rgb (0.4196078431372549, 0.6823529411764706, 0.8392156862745098) ,
-  rgb (0.6196078431372549, 0.792156862745098, 0.8823529411764706) ,
-  rgb (0.7764705882352941, 0.8588235294117647, 0.9372549019607843) ,
-  rgb (0.9019607843137255, 0.3333333333333333, 0.050980392156862744) ,
-  rgb (0.9921568627450981, 0.5529411764705883, 0.23529411764705882) ,
-  rgb (0.9921568627450981, 0.6823529411764706, 0.4196078431372549) ,
-  rgb (0.9921568627450981, 0.8156862745098039, 0.6352941176470588) ,
-  rgb (0.19215686274509805, 0.6392156862745098, 0.32941176470588235) ,
-  rgb (0.4549019607843137, 0.7686274509803922, 0.4627450980392157) ,
-  rgb (0.6313725490196078, 0.8509803921568627, 0.6078431372549019) ,
-  rgb (0.7803921568627451, 0.9137254901960784, 0.7529411764705882) ,
-  rgb (0.4588235294117647, 0.4196078431372549, 0.6941176470588235) ,
-  rgb (0.6196078431372549, 0.6039215686274509, 0.7843137254901961) ,
-  rgb (0.7372549019607844, 0.7411764705882353, 0.8627450980392157) ,
-  rgb (0.8549019607843137, 0.8549019607843137, 0.9215686274509803) ,
-  rgb (0.38823529411764707, 0.38823529411764707, 0.38823529411764707) ,
-  rgb (0.5882352941176471, 0.5882352941176471, 0.5882352941176471) ,
-  rgb (0.7411764705882353, 0.7411764705882353, 0.7411764705882353) ,
-  rgb (0.8509803921568627, 0.8509803921568627, 0.8509803921568627)
-});
+    rgb (0.19215686274509805, 0.5098039215686274, 0.7411764705882353) ,
+      rgb (0.4196078431372549, 0.6823529411764706, 0.8392156862745098) ,
+      rgb (0.6196078431372549, 0.792156862745098, 0.8823529411764706) ,
+      rgb (0.7764705882352941, 0.8588235294117647, 0.9372549019607843) ,
+      rgb (0.9019607843137255, 0.3333333333333333, 0.050980392156862744) ,
+      rgb (0.9921568627450981, 0.5529411764705883, 0.23529411764705882) ,
+      rgb (0.9921568627450981, 0.6823529411764706, 0.4196078431372549) ,
+      rgb (0.9921568627450981, 0.8156862745098039, 0.6352941176470588) ,
+      rgb (0.19215686274509805, 0.6392156862745098, 0.32941176470588235) ,
+      rgb (0.4549019607843137, 0.7686274509803922, 0.4627450980392157) ,
+      rgb (0.6313725490196078, 0.8509803921568627, 0.6078431372549019) ,
+      rgb (0.7803921568627451, 0.9137254901960784, 0.7529411764705882) ,
+      rgb (0.4588235294117647, 0.4196078431372549, 0.6941176470588235) ,
+      rgb (0.6196078431372549, 0.6039215686274509, 0.7843137254901961) ,
+      rgb (0.7372549019607844, 0.7411764705882353, 0.8627450980392157) ,
+      rgb (0.8549019607843137, 0.8549019607843137, 0.9215686274509803) ,
+      rgb (0.38823529411764707, 0.38823529411764707, 0.38823529411764707) ,
+      rgb (0.5882352941176471, 0.5882352941176471, 0.5882352941176471) ,
+      rgb (0.7411764705882353, 0.7411764705882353, 0.7411764705882353) ,
+      rgb (0.8509803921568627, 0.8509803921568627, 0.8509803921568627)
+      });
 
 
 seg_data winter = seg_data(
-  new triple[] {  // red
-     (0.0, 0.0, 0.0) ,
-     (1.0, 0.0, 0.0)
-  },
-  new triple[] {  // green
-     (0.0, 0.0, 0.0) ,
-     (1.0, 1.0, 1.0)
-  },
-  new triple[] {  // blue
-     (0.0, 1.0, 1.0) ,
-     (1.0, 0.5, 0.5)
-  }
-);
+                           new triple[] {  // red
+                             (0.0, 0.0, 0.0) ,
+                               (1.0, 0.0, 0.0)
+                               },
+                           new triple[] {  // green
+                             (0.0, 0.0, 0.0) ,
+                               (1.0, 1.0, 1.0)
+                               },
+                           new triple[] {  // blue
+                             (0.0, 1.0, 1.0) ,
+                               (1.0, 0.5, 0.5)
+                               }
+                           );
 
 
 seg_data wistia = seg_data(
-  new triple[] {  // red
-     (0.0, 0.8941176470588236, 0.8941176470588236) ,
-     (0.25, 1.0, 1.0) ,
-     (0.5, 1.0, 1.0) ,
-     (0.75, 1.0, 1.0) ,
-     (1.0, 0.9882352941176471, 0.9882352941176471)
-  },
-  new triple[] {  // green
-     (0.0, 1.0, 1.0) ,
-     (0.25, 0.9098039215686274, 0.9098039215686274) ,
-     (0.5, 0.7411764705882353, 0.7411764705882353) ,
-     (0.75, 0.6274509803921569, 0.6274509803921569) ,
-     (1.0, 0.4980392156862745, 0.4980392156862745)
-  },
-  new triple[] {  // blue
-     (0.0, 0.47843137254901963, 0.47843137254901963) ,
-     (0.25, 0.10196078431372549, 0.10196078431372549) ,
-     (0.5, 0.0, 0.0) ,
-     (0.75, 0.0, 0.0) ,
-     (1.0, 0.0, 0.0)
-  }
-);
+                           new triple[] {  // red
+                             (0.0, 0.8941176470588236, 0.8941176470588236) ,
+                               (0.25, 1.0, 1.0) ,
+                               (0.5, 1.0, 1.0) ,
+                               (0.75, 1.0, 1.0) ,
+                               (1.0, 0.9882352941176471, 0.9882352941176471)
+                               },
+                           new triple[] {  // green
+                             (0.0, 1.0, 1.0) ,
+                               (0.25, 0.9098039215686274, 0.9098039215686274) ,
+                               (0.5, 0.7411764705882353, 0.7411764705882353) ,
+                               (0.75, 0.6274509803921569, 0.6274509803921569) ,
+                               (1.0, 0.4980392156862745, 0.4980392156862745)
+                               },
+                           new triple[] {  // blue
+                             (0.0, 0.47843137254901963, 0.47843137254901963) ,
+                               (0.25, 0.10196078431372549, 0.10196078431372549) ,
+                               (0.5, 0.0, 0.0) ,
+                               (0.75, 0.0, 0.0) ,
+                               (1.0, 0.0, 0.0)
+                               }
+                           );
 
 
 list_data cividis = list_data(new pen[] {
-  rgb (0.0, 0.135112, 0.304751) ,
-  rgb (0.0, 0.138068, 0.311105) ,
-  rgb (0.0, 0.141013, 0.317579) ,
-  rgb (0.0, 0.143951, 0.323982) ,
-  rgb (0.0, 0.146877, 0.330479) ,
-  rgb (0.0, 0.149791, 0.337065) ,
-  rgb (0.0, 0.152673, 0.343704) ,
-  rgb (0.0, 0.155377, 0.3505) ,
-  rgb (0.0, 0.157932, 0.357521) ,
-  rgb (0.0, 0.160495, 0.364534) ,
-  rgb (0.0, 0.163058, 0.371608) ,
-  rgb (0.0, 0.165621, 0.378769) ,
-  rgb (0.0, 0.168204, 0.385902) ,
-  rgb (0.0, 0.1708, 0.3931) ,
-  rgb (0.0, 0.17342, 0.400353) ,
-  rgb (0.0, 0.176082, 0.407577) ,
-  rgb (0.0, 0.178802, 0.414764) ,
-  rgb (0.0, 0.18161, 0.421859) ,
-  rgb (0.0, 0.18455, 0.428802) ,
-  rgb (0.0, 0.186915, 0.435532) ,
-  rgb (0.0, 0.188769, 0.439563) ,
-  rgb (0.0, 0.19095, 0.441085) ,
-  rgb (0.0, 0.193366, 0.441561) ,
-  rgb (0.003602, 0.195911, 0.441564) ,
-  rgb (0.017852, 0.198528, 0.441248) ,
-  rgb (0.03211, 0.201199, 0.440785) ,
-  rgb (0.046205, 0.203903, 0.440196) ,
-  rgb (0.058378, 0.206629, 0.439531) ,
-  rgb (0.068968, 0.209372, 0.438863) ,
-  rgb (0.078624, 0.212122, 0.438105) ,
-  rgb (0.087465, 0.214879, 0.437342) ,
-  rgb (0.095645, 0.217643, 0.436593) ,
-  rgb (0.103401, 0.220406, 0.43579) ,
-  rgb (0.110658, 0.22317, 0.435067) ,
-  rgb (0.117612, 0.225935, 0.434308) ,
-  rgb (0.124291, 0.228697, 0.433547) ,
-  rgb (0.130669, 0.231458, 0.43284) ,
-  rgb (0.13683, 0.234216, 0.432148) ,
-  rgb (0.142852, 0.236972, 0.431404) ,
-  rgb (0.148638, 0.239724, 0.430752) ,
-  rgb (0.154261, 0.242475, 0.43012) ,
-  rgb (0.159733, 0.245221, 0.429528) ,
-  rgb (0.165113, 0.247965, 0.428908) ,
-  rgb (0.170362, 0.250707, 0.428325) ,
-  rgb (0.17549, 0.253444, 0.42779) ,
-  rgb (0.180503, 0.25618, 0.427299) ,
-  rgb (0.185453, 0.258914, 0.426788) ,
-  rgb (0.190303, 0.261644, 0.426329) ,
-  rgb (0.195057, 0.264372, 0.425924) ,
-  rgb (0.199764, 0.267099, 0.425497) ,
-  rgb (0.204385, 0.269823, 0.425126) ,
-  rgb (0.208926, 0.272546, 0.424809) ,
-  rgb (0.213431, 0.275266, 0.42448) ,
-  rgb (0.217863, 0.277985, 0.424206) ,
-  rgb (0.222264, 0.280702, 0.423914) ,
-  rgb (0.226598, 0.283419, 0.423678) ,
-  rgb (0.230871, 0.286134, 0.423498) ,
-  rgb (0.23512, 0.288848, 0.423304) ,
-  rgb (0.239312, 0.291562, 0.423167) ,
-  rgb (0.243485, 0.294274, 0.423014) ,
-  rgb (0.247605, 0.296986, 0.422917) ,
-  rgb (0.251675, 0.299698, 0.422873) ,
-  rgb (0.255731, 0.302409, 0.422814) ,
-  rgb (0.25974, 0.30512, 0.42281) ,
-  rgb (0.263738, 0.307831, 0.422789) ,
-  rgb (0.267693, 0.310542, 0.422821) ,
-  rgb (0.271639, 0.313253, 0.422837) ,
-  rgb (0.275513, 0.315965, 0.422979) ,
-  rgb (0.279411, 0.318677, 0.423031) ,
-  rgb (0.28324, 0.32139, 0.423211) ,
-  rgb (0.287065, 0.324103, 0.423373) ,
-  rgb (0.290884, 0.326816, 0.423517) ,
-  rgb (0.294669, 0.329531, 0.423716) ,
-  rgb (0.298421, 0.332247, 0.423973) ,
-  rgb (0.302169, 0.334963, 0.424213) ,
-  rgb (0.305886, 0.337681, 0.424512) ,
-  rgb (0.309601, 0.340399, 0.42479) ,
-  rgb (0.313287, 0.34312, 0.42512) ,
-  rgb (0.316941, 0.345842, 0.425512) ,
-  rgb (0.320595, 0.348565, 0.425889) ,
-  rgb (0.32425, 0.351289, 0.42625) ,
-  rgb (0.327875, 0.354016, 0.42667) ,
-  rgb (0.331474, 0.356744, 0.427144) ,
-  rgb (0.335073, 0.359474, 0.427605) ,
-  rgb (0.338673, 0.362206, 0.428053) ,
-  rgb (0.342246, 0.364939, 0.428559) ,
-  rgb (0.345793, 0.367676, 0.429127) ,
-  rgb (0.349341, 0.370414, 0.429685) ,
-  rgb (0.352892, 0.373153, 0.430226) ,
-  rgb (0.356418, 0.375896, 0.430823) ,
-  rgb (0.359916, 0.378641, 0.431501) ,
-  rgb (0.363446, 0.381388, 0.432075) ,
-  rgb (0.366923, 0.384139, 0.432796) ,
-  rgb (0.37043, 0.38689, 0.433428) ,
-  rgb (0.373884, 0.389646, 0.434209) ,
-  rgb (0.377371, 0.392404, 0.43489) ,
-  rgb (0.38083, 0.395164, 0.435653) ,
-  rgb (0.384268, 0.397928, 0.436475) ,
-  rgb (0.387705, 0.400694, 0.437305) ,
-  rgb (0.391151, 0.403464, 0.438096) ,
-  rgb (0.394568, 0.406236, 0.438986) ,
-  rgb (0.397991, 0.409011, 0.439848) ,
-  rgb (0.401418, 0.41179, 0.440708) ,
-  rgb (0.40482, 0.414572, 0.441642) ,
-  rgb (0.408226, 0.417357, 0.44257) ,
-  rgb (0.411607, 0.420145, 0.443577) ,
-  rgb (0.414992, 0.422937, 0.444578) ,
-  rgb (0.418383, 0.425733, 0.44556) ,
-  rgb (0.421748, 0.428531, 0.44664) ,
-  rgb (0.42512, 0.431334, 0.447692) ,
-  rgb (0.428462, 0.43414, 0.448864) ,
-  rgb (0.431817, 0.43695, 0.449982) ,
-  rgb (0.435168, 0.439763, 0.451134) ,
-  rgb (0.438504, 0.44258, 0.452341) ,
-  rgb (0.44181, 0.445402, 0.453659) ,
-  rgb (0.445148, 0.448226, 0.454885) ,
-  rgb (0.448447, 0.451053, 0.456264) ,
-  rgb (0.451759, 0.453887, 0.457582) ,
-  rgb (0.455072, 0.456718, 0.458976) ,
-  rgb (0.458366, 0.459552, 0.460457) ,
-  rgb (0.461616, 0.462405, 0.461969) ,
-  rgb (0.464947, 0.465241, 0.463395) ,
-  rgb (0.468254, 0.468083, 0.464908) ,
-  rgb (0.471501, 0.47096, 0.466357) ,
-  rgb (0.474812, 0.473832, 0.467681) ,
-  rgb (0.478186, 0.476699, 0.468845) ,
-  rgb (0.481622, 0.479573, 0.469767) ,
-  rgb (0.485141, 0.482451, 0.470384) ,
-  rgb (0.488697, 0.485318, 0.471008) ,
-  rgb (0.492278, 0.488198, 0.471453) ,
-  rgb (0.495913, 0.491076, 0.471751) ,
-  rgb (0.499552, 0.49396, 0.472032) ,
-  rgb (0.503185, 0.496851, 0.472305) ,
-  rgb (0.506866, 0.499743, 0.472432) ,
-  rgb (0.51054, 0.502643, 0.47255) ,
-  rgb (0.514226, 0.505546, 0.47264) ,
-  rgb (0.51792, 0.508454, 0.472707) ,
-  rgb (0.521643, 0.511367, 0.472639) ,
-  rgb (0.525348, 0.514285, 0.47266) ,
-  rgb (0.529086, 0.517207, 0.472543) ,
-  rgb (0.532829, 0.520135, 0.472401) ,
-  rgb (0.536553, 0.523067, 0.472352) ,
-  rgb (0.540307, 0.526005, 0.472163) ,
-  rgb (0.544069, 0.528948, 0.471947) ,
-  rgb (0.54784, 0.531895, 0.471704) ,
-  rgb (0.551612, 0.534849, 0.471439) ,
-  rgb (0.555393, 0.537807, 0.471147) ,
-  rgb (0.559181, 0.540771, 0.470829) ,
-  rgb (0.562972, 0.543741, 0.470488) ,
-  rgb (0.566802, 0.546715, 0.469988) ,
-  rgb (0.570607, 0.549695, 0.469593) ,
-  rgb (0.574417, 0.552682, 0.469172) ,
-  rgb (0.578236, 0.555673, 0.468724) ,
-  rgb (0.582087, 0.55867, 0.468118) ,
-  rgb (0.585916, 0.561674, 0.467618) ,
-  rgb (0.589753, 0.564682, 0.46709) ,
-  rgb (0.593622, 0.567697, 0.466401) ,
-  rgb (0.597469, 0.570718, 0.465821) ,
-  rgb (0.601354, 0.573743, 0.465074) ,
-  rgb (0.605211, 0.576777, 0.464441) ,
-  rgb (0.609105, 0.579816, 0.463638) ,
-  rgb (0.612977, 0.582861, 0.46295) ,
-  rgb (0.616852, 0.585913, 0.462237) ,
-  rgb (0.620765, 0.58897, 0.461351) ,
-  rgb (0.624654, 0.592034, 0.460583) ,
-  rgb (0.628576, 0.595104, 0.459641) ,
-  rgb (0.632506, 0.59818, 0.458668) ,
-  rgb (0.636412, 0.601264, 0.457818) ,
-  rgb (0.640352, 0.604354, 0.456791) ,
-  rgb (0.64427, 0.60745, 0.455886) ,
-  rgb (0.648222, 0.610553, 0.454801) ,
-  rgb (0.652178, 0.613664, 0.453689) ,
-  rgb (0.656114, 0.61678, 0.452702) ,
-  rgb (0.660082, 0.619904, 0.451534) ,
-  rgb (0.664055, 0.623034, 0.450338) ,
-  rgb (0.668008, 0.626171, 0.44927) ,
-  rgb (0.671991, 0.629316, 0.448018) ,
-  rgb (0.675981, 0.632468, 0.446736) ,
-  rgb (0.679979, 0.635626, 0.445424) ,
-  rgb (0.68395, 0.638793, 0.444251) ,
-  rgb (0.687957, 0.641966, 0.442886) ,
-  rgb (0.691971, 0.645145, 0.441491) ,
-  rgb (0.695985, 0.648334, 0.440072) ,
-  rgb (0.700008, 0.651529, 0.438624) ,
-  rgb (0.704037, 0.654731, 0.437147) ,
-  rgb (0.708067, 0.657942, 0.435647) ,
-  rgb (0.712105, 0.66116, 0.434117) ,
-  rgb (0.716177, 0.664384, 0.432386) ,
-  rgb (0.720222, 0.667618, 0.430805) ,
-  rgb (0.724274, 0.670859, 0.429194) ,
-  rgb (0.728334, 0.674107, 0.427554) ,
-  rgb (0.732422, 0.677364, 0.425717) ,
-  rgb (0.736488, 0.680629, 0.424028) ,
-  rgb (0.740589, 0.6839, 0.422131) ,
-  rgb (0.744664, 0.687181, 0.420393) ,
-  rgb (0.748772, 0.69047, 0.418448) ,
-  rgb (0.752886, 0.693766, 0.416472) ,
-  rgb (0.756975, 0.697071, 0.414659) ,
-  rgb (0.761096, 0.700384, 0.412638) ,
-  rgb (0.765223, 0.703705, 0.410587) ,
-  rgb (0.769353, 0.707035, 0.408516) ,
-  rgb (0.773486, 0.710373, 0.406422) ,
-  rgb (0.777651, 0.713719, 0.404112) ,
-  rgb (0.781795, 0.717074, 0.401966) ,
-  rgb (0.785965, 0.720438, 0.399613) ,
-  rgb (0.790116, 0.72381, 0.397423) ,
-  rgb (0.794298, 0.72719, 0.395016) ,
-  rgb (0.79848, 0.73058, 0.392597) ,
-  rgb (0.802667, 0.733978, 0.390153) ,
-  rgb (0.806859, 0.737385, 0.387684) ,
-  rgb (0.811054, 0.740801, 0.385198) ,
-  rgb (0.815274, 0.744226, 0.382504) ,
-  rgb (0.819499, 0.747659, 0.379785) ,
-  rgb (0.823729, 0.751101, 0.377043) ,
-  rgb (0.827959, 0.754553, 0.374292) ,
-  rgb (0.832192, 0.758014, 0.371529) ,
-  rgb (0.836429, 0.761483, 0.368747) ,
-  rgb (0.840693, 0.764962, 0.365746) ,
-  rgb (0.844957, 0.76845, 0.362741) ,
-  rgb (0.849223, 0.771947, 0.359729) ,
-  rgb (0.853515, 0.775454, 0.3565) ,
-  rgb (0.857809, 0.778969, 0.353259) ,
-  rgb (0.862105, 0.782494, 0.350011) ,
-  rgb (0.866421, 0.786028, 0.346571) ,
-  rgb (0.870717, 0.789572, 0.343333) ,
-  rgb (0.875057, 0.793125, 0.339685) ,
-  rgb (0.879378, 0.796687, 0.336241) ,
-  rgb (0.88372, 0.800258, 0.332599) ,
-  rgb (0.888081, 0.803839, 0.32877) ,
-  rgb (0.89244, 0.80743, 0.324968) ,
-  rgb (0.896818, 0.81103, 0.320982) ,
-  rgb (0.901195, 0.814639, 0.317021) ,
-  rgb (0.905589, 0.818257, 0.312889) ,
-  rgb (0.91, 0.821885, 0.308594) ,
-  rgb (0.914407, 0.825522, 0.304348) ,
-  rgb (0.918828, 0.829168, 0.29996) ,
-  rgb (0.923279, 0.832822, 0.295244) ,
-  rgb (0.927724, 0.836486, 0.290611) ,
-  rgb (0.93218, 0.840159, 0.28588) ,
-  rgb (0.93666, 0.843841, 0.280876) ,
-  rgb (0.941147, 0.84753, 0.275815) ,
-  rgb (0.945654, 0.851228, 0.270532) ,
-  rgb (0.950178, 0.854933, 0.265085) ,
-  rgb (0.954725, 0.858646, 0.259365) ,
-  rgb (0.959284, 0.862365, 0.253563) ,
-  rgb (0.963872, 0.866089, 0.247445) ,
-  rgb (0.968469, 0.869819, 0.24131) ,
-  rgb (0.973114, 0.87355, 0.234677) ,
-  rgb (0.97778, 0.877281, 0.227954) ,
-  rgb (0.982497, 0.881008, 0.220878) ,
-  rgb (0.987293, 0.884718, 0.213336) ,
-  rgb (0.992218, 0.888385, 0.205468) ,
-  rgb (0.994847, 0.892954, 0.203445) ,
-  rgb (0.995249, 0.898384, 0.207561) ,
-  rgb (0.995503, 0.903866, 0.21237) ,
-  rgb (0.995737, 0.909344, 0.217772)
-});
+    rgb (0.0, 0.135112, 0.304751) ,
+      rgb (0.0, 0.138068, 0.311105) ,
+      rgb (0.0, 0.141013, 0.317579) ,
+      rgb (0.0, 0.143951, 0.323982) ,
+      rgb (0.0, 0.146877, 0.330479) ,
+      rgb (0.0, 0.149791, 0.337065) ,
+      rgb (0.0, 0.152673, 0.343704) ,
+      rgb (0.0, 0.155377, 0.3505) ,
+      rgb (0.0, 0.157932, 0.357521) ,
+      rgb (0.0, 0.160495, 0.364534) ,
+      rgb (0.0, 0.163058, 0.371608) ,
+      rgb (0.0, 0.165621, 0.378769) ,
+      rgb (0.0, 0.168204, 0.385902) ,
+      rgb (0.0, 0.1708, 0.3931) ,
+      rgb (0.0, 0.17342, 0.400353) ,
+      rgb (0.0, 0.176082, 0.407577) ,
+      rgb (0.0, 0.178802, 0.414764) ,
+      rgb (0.0, 0.18161, 0.421859) ,
+      rgb (0.0, 0.18455, 0.428802) ,
+      rgb (0.0, 0.186915, 0.435532) ,
+      rgb (0.0, 0.188769, 0.439563) ,
+      rgb (0.0, 0.19095, 0.441085) ,
+      rgb (0.0, 0.193366, 0.441561) ,
+      rgb (0.003602, 0.195911, 0.441564) ,
+      rgb (0.017852, 0.198528, 0.441248) ,
+      rgb (0.03211, 0.201199, 0.440785) ,
+      rgb (0.046205, 0.203903, 0.440196) ,
+      rgb (0.058378, 0.206629, 0.439531) ,
+      rgb (0.068968, 0.209372, 0.438863) ,
+      rgb (0.078624, 0.212122, 0.438105) ,
+      rgb (0.087465, 0.214879, 0.437342) ,
+      rgb (0.095645, 0.217643, 0.436593) ,
+      rgb (0.103401, 0.220406, 0.43579) ,
+      rgb (0.110658, 0.22317, 0.435067) ,
+      rgb (0.117612, 0.225935, 0.434308) ,
+      rgb (0.124291, 0.228697, 0.433547) ,
+      rgb (0.130669, 0.231458, 0.43284) ,
+      rgb (0.13683, 0.234216, 0.432148) ,
+      rgb (0.142852, 0.236972, 0.431404) ,
+      rgb (0.148638, 0.239724, 0.430752) ,
+      rgb (0.154261, 0.242475, 0.43012) ,
+      rgb (0.159733, 0.245221, 0.429528) ,
+      rgb (0.165113, 0.247965, 0.428908) ,
+      rgb (0.170362, 0.250707, 0.428325) ,
+      rgb (0.17549, 0.253444, 0.42779) ,
+      rgb (0.180503, 0.25618, 0.427299) ,
+      rgb (0.185453, 0.258914, 0.426788) ,
+      rgb (0.190303, 0.261644, 0.426329) ,
+      rgb (0.195057, 0.264372, 0.425924) ,
+      rgb (0.199764, 0.267099, 0.425497) ,
+      rgb (0.204385, 0.269823, 0.425126) ,
+      rgb (0.208926, 0.272546, 0.424809) ,
+      rgb (0.213431, 0.275266, 0.42448) ,
+      rgb (0.217863, 0.277985, 0.424206) ,
+      rgb (0.222264, 0.280702, 0.423914) ,
+      rgb (0.226598, 0.283419, 0.423678) ,
+      rgb (0.230871, 0.286134, 0.423498) ,
+      rgb (0.23512, 0.288848, 0.423304) ,
+      rgb (0.239312, 0.291562, 0.423167) ,
+      rgb (0.243485, 0.294274, 0.423014) ,
+      rgb (0.247605, 0.296986, 0.422917) ,
+      rgb (0.251675, 0.299698, 0.422873) ,
+      rgb (0.255731, 0.302409, 0.422814) ,
+      rgb (0.25974, 0.30512, 0.42281) ,
+      rgb (0.263738, 0.307831, 0.422789) ,
+      rgb (0.267693, 0.310542, 0.422821) ,
+      rgb (0.271639, 0.313253, 0.422837) ,
+      rgb (0.275513, 0.315965, 0.422979) ,
+      rgb (0.279411, 0.318677, 0.423031) ,
+      rgb (0.28324, 0.32139, 0.423211) ,
+      rgb (0.287065, 0.324103, 0.423373) ,
+      rgb (0.290884, 0.326816, 0.423517) ,
+      rgb (0.294669, 0.329531, 0.423716) ,
+      rgb (0.298421, 0.332247, 0.423973) ,
+      rgb (0.302169, 0.334963, 0.424213) ,
+      rgb (0.305886, 0.337681, 0.424512) ,
+      rgb (0.309601, 0.340399, 0.42479) ,
+      rgb (0.313287, 0.34312, 0.42512) ,
+      rgb (0.316941, 0.345842, 0.425512) ,
+      rgb (0.320595, 0.348565, 0.425889) ,
+      rgb (0.32425, 0.351289, 0.42625) ,
+      rgb (0.327875, 0.354016, 0.42667) ,
+      rgb (0.331474, 0.356744, 0.427144) ,
+      rgb (0.335073, 0.359474, 0.427605) ,
+      rgb (0.338673, 0.362206, 0.428053) ,
+      rgb (0.342246, 0.364939, 0.428559) ,
+      rgb (0.345793, 0.367676, 0.429127) ,
+      rgb (0.349341, 0.370414, 0.429685) ,
+      rgb (0.352892, 0.373153, 0.430226) ,
+      rgb (0.356418, 0.375896, 0.430823) ,
+      rgb (0.359916, 0.378641, 0.431501) ,
+      rgb (0.363446, 0.381388, 0.432075) ,
+      rgb (0.366923, 0.384139, 0.432796) ,
+      rgb (0.37043, 0.38689, 0.433428) ,
+      rgb (0.373884, 0.389646, 0.434209) ,
+      rgb (0.377371, 0.392404, 0.43489) ,
+      rgb (0.38083, 0.395164, 0.435653) ,
+      rgb (0.384268, 0.397928, 0.436475) ,
+      rgb (0.387705, 0.400694, 0.437305) ,
+      rgb (0.391151, 0.403464, 0.438096) ,
+      rgb (0.394568, 0.406236, 0.438986) ,
+      rgb (0.397991, 0.409011, 0.439848) ,
+      rgb (0.401418, 0.41179, 0.440708) ,
+      rgb (0.40482, 0.414572, 0.441642) ,
+      rgb (0.408226, 0.417357, 0.44257) ,
+      rgb (0.411607, 0.420145, 0.443577) ,
+      rgb (0.414992, 0.422937, 0.444578) ,
+      rgb (0.418383, 0.425733, 0.44556) ,
+      rgb (0.421748, 0.428531, 0.44664) ,
+      rgb (0.42512, 0.431334, 0.447692) ,
+      rgb (0.428462, 0.43414, 0.448864) ,
+      rgb (0.431817, 0.43695, 0.449982) ,
+      rgb (0.435168, 0.439763, 0.451134) ,
+      rgb (0.438504, 0.44258, 0.452341) ,
+      rgb (0.44181, 0.445402, 0.453659) ,
+      rgb (0.445148, 0.448226, 0.454885) ,
+      rgb (0.448447, 0.451053, 0.456264) ,
+      rgb (0.451759, 0.453887, 0.457582) ,
+      rgb (0.455072, 0.456718, 0.458976) ,
+      rgb (0.458366, 0.459552, 0.460457) ,
+      rgb (0.461616, 0.462405, 0.461969) ,
+      rgb (0.464947, 0.465241, 0.463395) ,
+      rgb (0.468254, 0.468083, 0.464908) ,
+      rgb (0.471501, 0.47096, 0.466357) ,
+      rgb (0.474812, 0.473832, 0.467681) ,
+      rgb (0.478186, 0.476699, 0.468845) ,
+      rgb (0.481622, 0.479573, 0.469767) ,
+      rgb (0.485141, 0.482451, 0.470384) ,
+      rgb (0.488697, 0.485318, 0.471008) ,
+      rgb (0.492278, 0.488198, 0.471453) ,
+      rgb (0.495913, 0.491076, 0.471751) ,
+      rgb (0.499552, 0.49396, 0.472032) ,
+      rgb (0.503185, 0.496851, 0.472305) ,
+      rgb (0.506866, 0.499743, 0.472432) ,
+      rgb (0.51054, 0.502643, 0.47255) ,
+      rgb (0.514226, 0.505546, 0.47264) ,
+      rgb (0.51792, 0.508454, 0.472707) ,
+      rgb (0.521643, 0.511367, 0.472639) ,
+      rgb (0.525348, 0.514285, 0.47266) ,
+      rgb (0.529086, 0.517207, 0.472543) ,
+      rgb (0.532829, 0.520135, 0.472401) ,
+      rgb (0.536553, 0.523067, 0.472352) ,
+      rgb (0.540307, 0.526005, 0.472163) ,
+      rgb (0.544069, 0.528948, 0.471947) ,
+      rgb (0.54784, 0.531895, 0.471704) ,
+      rgb (0.551612, 0.534849, 0.471439) ,
+      rgb (0.555393, 0.537807, 0.471147) ,
+      rgb (0.559181, 0.540771, 0.470829) ,
+      rgb (0.562972, 0.543741, 0.470488) ,
+      rgb (0.566802, 0.546715, 0.469988) ,
+      rgb (0.570607, 0.549695, 0.469593) ,
+      rgb (0.574417, 0.552682, 0.469172) ,
+      rgb (0.578236, 0.555673, 0.468724) ,
+      rgb (0.582087, 0.55867, 0.468118) ,
+      rgb (0.585916, 0.561674, 0.467618) ,
+      rgb (0.589753, 0.564682, 0.46709) ,
+      rgb (0.593622, 0.567697, 0.466401) ,
+      rgb (0.597469, 0.570718, 0.465821) ,
+      rgb (0.601354, 0.573743, 0.465074) ,
+      rgb (0.605211, 0.576777, 0.464441) ,
+      rgb (0.609105, 0.579816, 0.463638) ,
+      rgb (0.612977, 0.582861, 0.46295) ,
+      rgb (0.616852, 0.585913, 0.462237) ,
+      rgb (0.620765, 0.58897, 0.461351) ,
+      rgb (0.624654, 0.592034, 0.460583) ,
+      rgb (0.628576, 0.595104, 0.459641) ,
+      rgb (0.632506, 0.59818, 0.458668) ,
+      rgb (0.636412, 0.601264, 0.457818) ,
+      rgb (0.640352, 0.604354, 0.456791) ,
+      rgb (0.64427, 0.60745, 0.455886) ,
+      rgb (0.648222, 0.610553, 0.454801) ,
+      rgb (0.652178, 0.613664, 0.453689) ,
+      rgb (0.656114, 0.61678, 0.452702) ,
+      rgb (0.660082, 0.619904, 0.451534) ,
+      rgb (0.664055, 0.623034, 0.450338) ,
+      rgb (0.668008, 0.626171, 0.44927) ,
+      rgb (0.671991, 0.629316, 0.448018) ,
+      rgb (0.675981, 0.632468, 0.446736) ,
+      rgb (0.679979, 0.635626, 0.445424) ,
+      rgb (0.68395, 0.638793, 0.444251) ,
+      rgb (0.687957, 0.641966, 0.442886) ,
+      rgb (0.691971, 0.645145, 0.441491) ,
+      rgb (0.695985, 0.648334, 0.440072) ,
+      rgb (0.700008, 0.651529, 0.438624) ,
+      rgb (0.704037, 0.654731, 0.437147) ,
+      rgb (0.708067, 0.657942, 0.435647) ,
+      rgb (0.712105, 0.66116, 0.434117) ,
+      rgb (0.716177, 0.664384, 0.432386) ,
+      rgb (0.720222, 0.667618, 0.430805) ,
+      rgb (0.724274, 0.670859, 0.429194) ,
+      rgb (0.728334, 0.674107, 0.427554) ,
+      rgb (0.732422, 0.677364, 0.425717) ,
+      rgb (0.736488, 0.680629, 0.424028) ,
+      rgb (0.740589, 0.6839, 0.422131) ,
+      rgb (0.744664, 0.687181, 0.420393) ,
+      rgb (0.748772, 0.69047, 0.418448) ,
+      rgb (0.752886, 0.693766, 0.416472) ,
+      rgb (0.756975, 0.697071, 0.414659) ,
+      rgb (0.761096, 0.700384, 0.412638) ,
+      rgb (0.765223, 0.703705, 0.410587) ,
+      rgb (0.769353, 0.707035, 0.408516) ,
+      rgb (0.773486, 0.710373, 0.406422) ,
+      rgb (0.777651, 0.713719, 0.404112) ,
+      rgb (0.781795, 0.717074, 0.401966) ,
+      rgb (0.785965, 0.720438, 0.399613) ,
+      rgb (0.790116, 0.72381, 0.397423) ,
+      rgb (0.794298, 0.72719, 0.395016) ,
+      rgb (0.79848, 0.73058, 0.392597) ,
+      rgb (0.802667, 0.733978, 0.390153) ,
+      rgb (0.806859, 0.737385, 0.387684) ,
+      rgb (0.811054, 0.740801, 0.385198) ,
+      rgb (0.815274, 0.744226, 0.382504) ,
+      rgb (0.819499, 0.747659, 0.379785) ,
+      rgb (0.823729, 0.751101, 0.377043) ,
+      rgb (0.827959, 0.754553, 0.374292) ,
+      rgb (0.832192, 0.758014, 0.371529) ,
+      rgb (0.836429, 0.761483, 0.368747) ,
+      rgb (0.840693, 0.764962, 0.365746) ,
+      rgb (0.844957, 0.76845, 0.362741) ,
+      rgb (0.849223, 0.771947, 0.359729) ,
+      rgb (0.853515, 0.775454, 0.3565) ,
+      rgb (0.857809, 0.778969, 0.353259) ,
+      rgb (0.862105, 0.782494, 0.350011) ,
+      rgb (0.866421, 0.786028, 0.346571) ,
+      rgb (0.870717, 0.789572, 0.343333) ,
+      rgb (0.875057, 0.793125, 0.339685) ,
+      rgb (0.879378, 0.796687, 0.336241) ,
+      rgb (0.88372, 0.800258, 0.332599) ,
+      rgb (0.888081, 0.803839, 0.32877) ,
+      rgb (0.89244, 0.80743, 0.324968) ,
+      rgb (0.896818, 0.81103, 0.320982) ,
+      rgb (0.901195, 0.814639, 0.317021) ,
+      rgb (0.905589, 0.818257, 0.312889) ,
+      rgb (0.91, 0.821885, 0.308594) ,
+      rgb (0.914407, 0.825522, 0.304348) ,
+      rgb (0.918828, 0.829168, 0.29996) ,
+      rgb (0.923279, 0.832822, 0.295244) ,
+      rgb (0.927724, 0.836486, 0.290611) ,
+      rgb (0.93218, 0.840159, 0.28588) ,
+      rgb (0.93666, 0.843841, 0.280876) ,
+      rgb (0.941147, 0.84753, 0.275815) ,
+      rgb (0.945654, 0.851228, 0.270532) ,
+      rgb (0.950178, 0.854933, 0.265085) ,
+      rgb (0.954725, 0.858646, 0.259365) ,
+      rgb (0.959284, 0.862365, 0.253563) ,
+      rgb (0.963872, 0.866089, 0.247445) ,
+      rgb (0.968469, 0.869819, 0.24131) ,
+      rgb (0.973114, 0.87355, 0.234677) ,
+      rgb (0.97778, 0.877281, 0.227954) ,
+      rgb (0.982497, 0.881008, 0.220878) ,
+      rgb (0.987293, 0.884718, 0.213336) ,
+      rgb (0.992218, 0.888385, 0.205468) ,
+      rgb (0.994847, 0.892954, 0.203445) ,
+      rgb (0.995249, 0.898384, 0.207561) ,
+      rgb (0.995503, 0.903866, 0.21237) ,
+      rgb (0.995737, 0.909344, 0.217772)
+      });
 
 
 list_data inferno = list_data(new pen[] {
-  rgb (0.001462, 0.000466, 0.013866) ,
-  rgb (0.002267, 0.00127, 0.01857) ,
-  rgb (0.003299, 0.002249, 0.024239) ,
-  rgb (0.004547, 0.003392, 0.030909) ,
-  rgb (0.006006, 0.004692, 0.038558) ,
-  rgb (0.007676, 0.006136, 0.046836) ,
-  rgb (0.009561, 0.007713, 0.055143) ,
-  rgb (0.011663, 0.009417, 0.06346) ,
-  rgb (0.013995, 0.011225, 0.071862) ,
-  rgb (0.016561, 0.013136, 0.080282) ,
-  rgb (0.019373, 0.015133, 0.088767) ,
-  rgb (0.022447, 0.017199, 0.097327) ,
-  rgb (0.025793, 0.019331, 0.10593) ,
-  rgb (0.029432, 0.021503, 0.114621) ,
-  rgb (0.033385, 0.023702, 0.123397) ,
-  rgb (0.037668, 0.025921, 0.132232) ,
-  rgb (0.042253, 0.028139, 0.141141) ,
-  rgb (0.046915, 0.030324, 0.150164) ,
-  rgb (0.051644, 0.032474, 0.159254) ,
-  rgb (0.056449, 0.034569, 0.168414) ,
-  rgb (0.06134, 0.03659, 0.177642) ,
-  rgb (0.066331, 0.038504, 0.186962) ,
-  rgb (0.071429, 0.040294, 0.196354) ,
-  rgb (0.076637, 0.041905, 0.205799) ,
-  rgb (0.081962, 0.043328, 0.215289) ,
-  rgb (0.087411, 0.044556, 0.224813) ,
-  rgb (0.09299, 0.045583, 0.234358) ,
-  rgb (0.098702, 0.046402, 0.243904) ,
-  rgb (0.104551, 0.047008, 0.25343) ,
-  rgb (0.110536, 0.047399, 0.262912) ,
-  rgb (0.116656, 0.047574, 0.272321) ,
-  rgb (0.122908, 0.047536, 0.281624) ,
-  rgb (0.129285, 0.047293, 0.290788) ,
-  rgb (0.135778, 0.046856, 0.299776) ,
-  rgb (0.142378, 0.046242, 0.308553) ,
-  rgb (0.149073, 0.045468, 0.317085) ,
-  rgb (0.15585, 0.044559, 0.325338) ,
-  rgb (0.162689, 0.043554, 0.333277) ,
-  rgb (0.169575, 0.042489, 0.340874) ,
-  rgb (0.176493, 0.041402, 0.348111) ,
-  rgb (0.183429, 0.040329, 0.354971) ,
-  rgb (0.190367, 0.039309, 0.361447) ,
-  rgb (0.197297, 0.0384, 0.367535) ,
-  rgb (0.204209, 0.037632, 0.373238) ,
-  rgb (0.211095, 0.03703, 0.378563) ,
-  rgb (0.217949, 0.036615, 0.383522) ,
-  rgb (0.224763, 0.036405, 0.388129) ,
-  rgb (0.231538, 0.036405, 0.3924) ,
-  rgb (0.238273, 0.036621, 0.396353) ,
-  rgb (0.244967, 0.037055, 0.400007) ,
-  rgb (0.25162, 0.037705, 0.403378) ,
-  rgb (0.258234, 0.038571, 0.406485) ,
-  rgb (0.26481, 0.039647, 0.409345) ,
-  rgb (0.271347, 0.040922, 0.411976) ,
-  rgb (0.27785, 0.042353, 0.414392) ,
-  rgb (0.284321, 0.043933, 0.416608) ,
-  rgb (0.290763, 0.045644, 0.418637) ,
-  rgb (0.297178, 0.04747, 0.420491) ,
-  rgb (0.303568, 0.049396, 0.422182) ,
-  rgb (0.309935, 0.051407, 0.423721) ,
-  rgb (0.316282, 0.05349, 0.425116) ,
-  rgb (0.32261, 0.055634, 0.426377) ,
-  rgb (0.328921, 0.057827, 0.427511) ,
-  rgb (0.335217, 0.06006, 0.428524) ,
-  rgb (0.3415, 0.062325, 0.429425) ,
-  rgb (0.347771, 0.064616, 0.430217) ,
-  rgb (0.354032, 0.066925, 0.430906) ,
-  rgb (0.360284, 0.069247, 0.431497) ,
-  rgb (0.366529, 0.071579, 0.431994) ,
-  rgb (0.372768, 0.073915, 0.4324) ,
-  rgb (0.379001, 0.076253, 0.432719) ,
-  rgb (0.385228, 0.078591, 0.432955) ,
-  rgb (0.391453, 0.080927, 0.433109) ,
-  rgb (0.397674, 0.083257, 0.433183) ,
-  rgb (0.403894, 0.08558, 0.433179) ,
-  rgb (0.410113, 0.087896, 0.433098) ,
-  rgb (0.416331, 0.090203, 0.432943) ,
-  rgb (0.422549, 0.092501, 0.432714) ,
-  rgb (0.428768, 0.09479, 0.432412) ,
-  rgb (0.434987, 0.097069, 0.432039) ,
-  rgb (0.441207, 0.099338, 0.431594) ,
-  rgb (0.447428, 0.101597, 0.43108) ,
-  rgb (0.453651, 0.103848, 0.430498) ,
-  rgb (0.459875, 0.106089, 0.429846) ,
-  rgb (0.4661, 0.108322, 0.429125) ,
-  rgb (0.472328, 0.110547, 0.428334) ,
-  rgb (0.478558, 0.112764, 0.427475) ,
-  rgb (0.484789, 0.114974, 0.426548) ,
-  rgb (0.491022, 0.117179, 0.425552) ,
-  rgb (0.497257, 0.119379, 0.424488) ,
-  rgb (0.503493, 0.121575, 0.423356) ,
-  rgb (0.50973, 0.123769, 0.422156) ,
-  rgb (0.515967, 0.12596, 0.420887) ,
-  rgb (0.522206, 0.12815, 0.419549) ,
-  rgb (0.528444, 0.130341, 0.418142) ,
-  rgb (0.534683, 0.132534, 0.416667) ,
-  rgb (0.54092, 0.134729, 0.415123) ,
-  rgb (0.547157, 0.136929, 0.413511) ,
-  rgb (0.553392, 0.139134, 0.411829) ,
-  rgb (0.559624, 0.141346, 0.410078) ,
-  rgb (0.565854, 0.143567, 0.408258) ,
-  rgb (0.572081, 0.145797, 0.406369) ,
-  rgb (0.578304, 0.148039, 0.404411) ,
-  rgb (0.584521, 0.150294, 0.402385) ,
-  rgb (0.590734, 0.152563, 0.40029) ,
-  rgb (0.59694, 0.154848, 0.398125) ,
-  rgb (0.603139, 0.157151, 0.395891) ,
-  rgb (0.60933, 0.159474, 0.393589) ,
-  rgb (0.615513, 0.161817, 0.391219) ,
-  rgb (0.621685, 0.164184, 0.388781) ,
-  rgb (0.627847, 0.166575, 0.386276) ,
-  rgb (0.633998, 0.168992, 0.383704) ,
-  rgb (0.640135, 0.171438, 0.381065) ,
-  rgb (0.64626, 0.173914, 0.378359) ,
-  rgb (0.652369, 0.176421, 0.375586) ,
-  rgb (0.658463, 0.178962, 0.372748) ,
-  rgb (0.66454, 0.181539, 0.369846) ,
-  rgb (0.670599, 0.184153, 0.366879) ,
-  rgb (0.676638, 0.186807, 0.363849) ,
-  rgb (0.682656, 0.189501, 0.360757) ,
-  rgb (0.688653, 0.192239, 0.357603) ,
-  rgb (0.694627, 0.195021, 0.354388) ,
-  rgb (0.700576, 0.197851, 0.351113) ,
-  rgb (0.7065, 0.200728, 0.347777) ,
-  rgb (0.712396, 0.203656, 0.344383) ,
-  rgb (0.718264, 0.206636, 0.340931) ,
-  rgb (0.724103, 0.20967, 0.337424) ,
-  rgb (0.729909, 0.212759, 0.333861) ,
-  rgb (0.735683, 0.215906, 0.330245) ,
-  rgb (0.741423, 0.219112, 0.326576) ,
-  rgb (0.747127, 0.222378, 0.322856) ,
-  rgb (0.752794, 0.225706, 0.319085) ,
-  rgb (0.758422, 0.229097, 0.315266) ,
-  rgb (0.76401, 0.232554, 0.311399) ,
-  rgb (0.769556, 0.236077, 0.307485) ,
-  rgb (0.775059, 0.239667, 0.303526) ,
-  rgb (0.780517, 0.243327, 0.299523) ,
-  rgb (0.785929, 0.247056, 0.295477) ,
-  rgb (0.791293, 0.250856, 0.29139) ,
-  rgb (0.796607, 0.254728, 0.287264) ,
-  rgb (0.801871, 0.258674, 0.283099) ,
-  rgb (0.807082, 0.262692, 0.278898) ,
-  rgb (0.812239, 0.266786, 0.274661) ,
-  rgb (0.817341, 0.270954, 0.27039) ,
-  rgb (0.822386, 0.275197, 0.266085) ,
-  rgb (0.827372, 0.279517, 0.26175) ,
-  rgb (0.832299, 0.283913, 0.257383) ,
-  rgb (0.837165, 0.288385, 0.252988) ,
-  rgb (0.841969, 0.292933, 0.248564) ,
-  rgb (0.846709, 0.297559, 0.244113) ,
-  rgb (0.851384, 0.30226, 0.239636) ,
-  rgb (0.855992, 0.307038, 0.235133) ,
-  rgb (0.860533, 0.311892, 0.230606) ,
-  rgb (0.865006, 0.316822, 0.226055) ,
-  rgb (0.869409, 0.321827, 0.221482) ,
-  rgb (0.873741, 0.326906, 0.216886) ,
-  rgb (0.878001, 0.33206, 0.212268) ,
-  rgb (0.882188, 0.337287, 0.207628) ,
-  rgb (0.886302, 0.342586, 0.202968) ,
-  rgb (0.890341, 0.347957, 0.198286) ,
-  rgb (0.894305, 0.353399, 0.193584) ,
-  rgb (0.898192, 0.358911, 0.18886) ,
-  rgb (0.902003, 0.364492, 0.184116) ,
-  rgb (0.905735, 0.37014, 0.17935) ,
-  rgb (0.90939, 0.375856, 0.174563) ,
-  rgb (0.912966, 0.381636, 0.169755) ,
-  rgb (0.916462, 0.387481, 0.164924) ,
-  rgb (0.919879, 0.393389, 0.16007) ,
-  rgb (0.923215, 0.399359, 0.155193) ,
-  rgb (0.92647, 0.405389, 0.150292) ,
-  rgb (0.929644, 0.411479, 0.145367) ,
-  rgb (0.932737, 0.417627, 0.140417) ,
-  rgb (0.935747, 0.423831, 0.13544) ,
-  rgb (0.938675, 0.430091, 0.130438) ,
-  rgb (0.941521, 0.436405, 0.125409) ,
-  rgb (0.944285, 0.442772, 0.120354) ,
-  rgb (0.946965, 0.449191, 0.115272) ,
-  rgb (0.949562, 0.45566, 0.110164) ,
-  rgb (0.952075, 0.462178, 0.105031) ,
-  rgb (0.954506, 0.468744, 0.099874) ,
-  rgb (0.956852, 0.475356, 0.094695) ,
-  rgb (0.959114, 0.482014, 0.089499) ,
-  rgb (0.961293, 0.488716, 0.084289) ,
-  rgb (0.963387, 0.495462, 0.079073) ,
-  rgb (0.965397, 0.502249, 0.073859) ,
-  rgb (0.967322, 0.509078, 0.068659) ,
-  rgb (0.969163, 0.515946, 0.063488) ,
-  rgb (0.970919, 0.522853, 0.058367) ,
-  rgb (0.97259, 0.529798, 0.053324) ,
-  rgb (0.974176, 0.53678, 0.048392) ,
-  rgb (0.975677, 0.543798, 0.043618) ,
-  rgb (0.977092, 0.55085, 0.03905) ,
-  rgb (0.978422, 0.557937, 0.034931) ,
-  rgb (0.979666, 0.565057, 0.031409) ,
-  rgb (0.980824, 0.572209, 0.028508) ,
-  rgb (0.981895, 0.579392, 0.02625) ,
-  rgb (0.982881, 0.586606, 0.024661) ,
-  rgb (0.983779, 0.593849, 0.02377) ,
-  rgb (0.984591, 0.601122, 0.023606) ,
-  rgb (0.985315, 0.608422, 0.024202) ,
-  rgb (0.985952, 0.61575, 0.025592) ,
-  rgb (0.986502, 0.623105, 0.027814) ,
-  rgb (0.986964, 0.630485, 0.030908) ,
-  rgb (0.987337, 0.63789, 0.034916) ,
-  rgb (0.987622, 0.64532, 0.039886) ,
-  rgb (0.987819, 0.652773, 0.045581) ,
-  rgb (0.987926, 0.66025, 0.05175) ,
-  rgb (0.987945, 0.667748, 0.058329) ,
-  rgb (0.987874, 0.675267, 0.065257) ,
-  rgb (0.987714, 0.682807, 0.072489) ,
-  rgb (0.987464, 0.690366, 0.07999) ,
-  rgb (0.987124, 0.697944, 0.087731) ,
-  rgb (0.986694, 0.70554, 0.095694) ,
-  rgb (0.986175, 0.713153, 0.103863) ,
-  rgb (0.985566, 0.720782, 0.112229) ,
-  rgb (0.984865, 0.728427, 0.120785) ,
-  rgb (0.984075, 0.736087, 0.129527) ,
-  rgb (0.983196, 0.743758, 0.138453) ,
-  rgb (0.982228, 0.751442, 0.147565) ,
-  rgb (0.981173, 0.759135, 0.156863) ,
-  rgb (0.980032, 0.766837, 0.166353) ,
-  rgb (0.978806, 0.774545, 0.176037) ,
-  rgb (0.977497, 0.782258, 0.185923) ,
-  rgb (0.976108, 0.789974, 0.196018) ,
-  rgb (0.974638, 0.797692, 0.206332) ,
-  rgb (0.973088, 0.805409, 0.216877) ,
-  rgb (0.971468, 0.813122, 0.227658) ,
-  rgb (0.969783, 0.820825, 0.238686) ,
-  rgb (0.968041, 0.828515, 0.249972) ,
-  rgb (0.966243, 0.836191, 0.261534) ,
-  rgb (0.964394, 0.843848, 0.273391) ,
-  rgb (0.962517, 0.851476, 0.285546) ,
-  rgb (0.960626, 0.859069, 0.29801) ,
-  rgb (0.95872, 0.866624, 0.31082) ,
-  rgb (0.956834, 0.874129, 0.323974) ,
-  rgb (0.954997, 0.881569, 0.337475) ,
-  rgb (0.953215, 0.888942, 0.351369) ,
-  rgb (0.951546, 0.896226, 0.365627) ,
-  rgb (0.950018, 0.903409, 0.380271) ,
-  rgb (0.948683, 0.910473, 0.395289) ,
-  rgb (0.947594, 0.917399, 0.410665) ,
-  rgb (0.946809, 0.924168, 0.426373) ,
-  rgb (0.946392, 0.930761, 0.442367) ,
-  rgb (0.946403, 0.937159, 0.458592) ,
-  rgb (0.946903, 0.943348, 0.47497) ,
-  rgb (0.947937, 0.949318, 0.491426) ,
-  rgb (0.949545, 0.955063, 0.50786) ,
-  rgb (0.95174, 0.960587, 0.524203) ,
-  rgb (0.954529, 0.965896, 0.540361) ,
-  rgb (0.957896, 0.971003, 0.556275) ,
-  rgb (0.961812, 0.975924, 0.571925) ,
-  rgb (0.966249, 0.980678, 0.587206) ,
-  rgb (0.971162, 0.985282, 0.602154) ,
-  rgb (0.976511, 0.989753, 0.61676) ,
-  rgb (0.982257, 0.994109, 0.631017) ,
-  rgb (0.988362, 0.998364, 0.644924)
-});
+    rgb (0.001462, 0.000466, 0.013866) ,
+      rgb (0.002267, 0.00127, 0.01857) ,
+      rgb (0.003299, 0.002249, 0.024239) ,
+      rgb (0.004547, 0.003392, 0.030909) ,
+      rgb (0.006006, 0.004692, 0.038558) ,
+      rgb (0.007676, 0.006136, 0.046836) ,
+      rgb (0.009561, 0.007713, 0.055143) ,
+      rgb (0.011663, 0.009417, 0.06346) ,
+      rgb (0.013995, 0.011225, 0.071862) ,
+      rgb (0.016561, 0.013136, 0.080282) ,
+      rgb (0.019373, 0.015133, 0.088767) ,
+      rgb (0.022447, 0.017199, 0.097327) ,
+      rgb (0.025793, 0.019331, 0.10593) ,
+      rgb (0.029432, 0.021503, 0.114621) ,
+      rgb (0.033385, 0.023702, 0.123397) ,
+      rgb (0.037668, 0.025921, 0.132232) ,
+      rgb (0.042253, 0.028139, 0.141141) ,
+      rgb (0.046915, 0.030324, 0.150164) ,
+      rgb (0.051644, 0.032474, 0.159254) ,
+      rgb (0.056449, 0.034569, 0.168414) ,
+      rgb (0.06134, 0.03659, 0.177642) ,
+      rgb (0.066331, 0.038504, 0.186962) ,
+      rgb (0.071429, 0.040294, 0.196354) ,
+      rgb (0.076637, 0.041905, 0.205799) ,
+      rgb (0.081962, 0.043328, 0.215289) ,
+      rgb (0.087411, 0.044556, 0.224813) ,
+      rgb (0.09299, 0.045583, 0.234358) ,
+      rgb (0.098702, 0.046402, 0.243904) ,
+      rgb (0.104551, 0.047008, 0.25343) ,
+      rgb (0.110536, 0.047399, 0.262912) ,
+      rgb (0.116656, 0.047574, 0.272321) ,
+      rgb (0.122908, 0.047536, 0.281624) ,
+      rgb (0.129285, 0.047293, 0.290788) ,
+      rgb (0.135778, 0.046856, 0.299776) ,
+      rgb (0.142378, 0.046242, 0.308553) ,
+      rgb (0.149073, 0.045468, 0.317085) ,
+      rgb (0.15585, 0.044559, 0.325338) ,
+      rgb (0.162689, 0.043554, 0.333277) ,
+      rgb (0.169575, 0.042489, 0.340874) ,
+      rgb (0.176493, 0.041402, 0.348111) ,
+      rgb (0.183429, 0.040329, 0.354971) ,
+      rgb (0.190367, 0.039309, 0.361447) ,
+      rgb (0.197297, 0.0384, 0.367535) ,
+      rgb (0.204209, 0.037632, 0.373238) ,
+      rgb (0.211095, 0.03703, 0.378563) ,
+      rgb (0.217949, 0.036615, 0.383522) ,
+      rgb (0.224763, 0.036405, 0.388129) ,
+      rgb (0.231538, 0.036405, 0.3924) ,
+      rgb (0.238273, 0.036621, 0.396353) ,
+      rgb (0.244967, 0.037055, 0.400007) ,
+      rgb (0.25162, 0.037705, 0.403378) ,
+      rgb (0.258234, 0.038571, 0.406485) ,
+      rgb (0.26481, 0.039647, 0.409345) ,
+      rgb (0.271347, 0.040922, 0.411976) ,
+      rgb (0.27785, 0.042353, 0.414392) ,
+      rgb (0.284321, 0.043933, 0.416608) ,
+      rgb (0.290763, 0.045644, 0.418637) ,
+      rgb (0.297178, 0.04747, 0.420491) ,
+      rgb (0.303568, 0.049396, 0.422182) ,
+      rgb (0.309935, 0.051407, 0.423721) ,
+      rgb (0.316282, 0.05349, 0.425116) ,
+      rgb (0.32261, 0.055634, 0.426377) ,
+      rgb (0.328921, 0.057827, 0.427511) ,
+      rgb (0.335217, 0.06006, 0.428524) ,
+      rgb (0.3415, 0.062325, 0.429425) ,
+      rgb (0.347771, 0.064616, 0.430217) ,
+      rgb (0.354032, 0.066925, 0.430906) ,
+      rgb (0.360284, 0.069247, 0.431497) ,
+      rgb (0.366529, 0.071579, 0.431994) ,
+      rgb (0.372768, 0.073915, 0.4324) ,
+      rgb (0.379001, 0.076253, 0.432719) ,
+      rgb (0.385228, 0.078591, 0.432955) ,
+      rgb (0.391453, 0.080927, 0.433109) ,
+      rgb (0.397674, 0.083257, 0.433183) ,
+      rgb (0.403894, 0.08558, 0.433179) ,
+      rgb (0.410113, 0.087896, 0.433098) ,
+      rgb (0.416331, 0.090203, 0.432943) ,
+      rgb (0.422549, 0.092501, 0.432714) ,
+      rgb (0.428768, 0.09479, 0.432412) ,
+      rgb (0.434987, 0.097069, 0.432039) ,
+      rgb (0.441207, 0.099338, 0.431594) ,
+      rgb (0.447428, 0.101597, 0.43108) ,
+      rgb (0.453651, 0.103848, 0.430498) ,
+      rgb (0.459875, 0.106089, 0.429846) ,
+      rgb (0.4661, 0.108322, 0.429125) ,
+      rgb (0.472328, 0.110547, 0.428334) ,
+      rgb (0.478558, 0.112764, 0.427475) ,
+      rgb (0.484789, 0.114974, 0.426548) ,
+      rgb (0.491022, 0.117179, 0.425552) ,
+      rgb (0.497257, 0.119379, 0.424488) ,
+      rgb (0.503493, 0.121575, 0.423356) ,
+      rgb (0.50973, 0.123769, 0.422156) ,
+      rgb (0.515967, 0.12596, 0.420887) ,
+      rgb (0.522206, 0.12815, 0.419549) ,
+      rgb (0.528444, 0.130341, 0.418142) ,
+      rgb (0.534683, 0.132534, 0.416667) ,
+      rgb (0.54092, 0.134729, 0.415123) ,
+      rgb (0.547157, 0.136929, 0.413511) ,
+      rgb (0.553392, 0.139134, 0.411829) ,
+      rgb (0.559624, 0.141346, 0.410078) ,
+      rgb (0.565854, 0.143567, 0.408258) ,
+      rgb (0.572081, 0.145797, 0.406369) ,
+      rgb (0.578304, 0.148039, 0.404411) ,
+      rgb (0.584521, 0.150294, 0.402385) ,
+      rgb (0.590734, 0.152563, 0.40029) ,
+      rgb (0.59694, 0.154848, 0.398125) ,
+      rgb (0.603139, 0.157151, 0.395891) ,
+      rgb (0.60933, 0.159474, 0.393589) ,
+      rgb (0.615513, 0.161817, 0.391219) ,
+      rgb (0.621685, 0.164184, 0.388781) ,
+      rgb (0.627847, 0.166575, 0.386276) ,
+      rgb (0.633998, 0.168992, 0.383704) ,
+      rgb (0.640135, 0.171438, 0.381065) ,
+      rgb (0.64626, 0.173914, 0.378359) ,
+      rgb (0.652369, 0.176421, 0.375586) ,
+      rgb (0.658463, 0.178962, 0.372748) ,
+      rgb (0.66454, 0.181539, 0.369846) ,
+      rgb (0.670599, 0.184153, 0.366879) ,
+      rgb (0.676638, 0.186807, 0.363849) ,
+      rgb (0.682656, 0.189501, 0.360757) ,
+      rgb (0.688653, 0.192239, 0.357603) ,
+      rgb (0.694627, 0.195021, 0.354388) ,
+      rgb (0.700576, 0.197851, 0.351113) ,
+      rgb (0.7065, 0.200728, 0.347777) ,
+      rgb (0.712396, 0.203656, 0.344383) ,
+      rgb (0.718264, 0.206636, 0.340931) ,
+      rgb (0.724103, 0.20967, 0.337424) ,
+      rgb (0.729909, 0.212759, 0.333861) ,
+      rgb (0.735683, 0.215906, 0.330245) ,
+      rgb (0.741423, 0.219112, 0.326576) ,
+      rgb (0.747127, 0.222378, 0.322856) ,
+      rgb (0.752794, 0.225706, 0.319085) ,
+      rgb (0.758422, 0.229097, 0.315266) ,
+      rgb (0.76401, 0.232554, 0.311399) ,
+      rgb (0.769556, 0.236077, 0.307485) ,
+      rgb (0.775059, 0.239667, 0.303526) ,
+      rgb (0.780517, 0.243327, 0.299523) ,
+      rgb (0.785929, 0.247056, 0.295477) ,
+      rgb (0.791293, 0.250856, 0.29139) ,
+      rgb (0.796607, 0.254728, 0.287264) ,
+      rgb (0.801871, 0.258674, 0.283099) ,
+      rgb (0.807082, 0.262692, 0.278898) ,
+      rgb (0.812239, 0.266786, 0.274661) ,
+      rgb (0.817341, 0.270954, 0.27039) ,
+      rgb (0.822386, 0.275197, 0.266085) ,
+      rgb (0.827372, 0.279517, 0.26175) ,
+      rgb (0.832299, 0.283913, 0.257383) ,
+      rgb (0.837165, 0.288385, 0.252988) ,
+      rgb (0.841969, 0.292933, 0.248564) ,
+      rgb (0.846709, 0.297559, 0.244113) ,
+      rgb (0.851384, 0.30226, 0.239636) ,
+      rgb (0.855992, 0.307038, 0.235133) ,
+      rgb (0.860533, 0.311892, 0.230606) ,
+      rgb (0.865006, 0.316822, 0.226055) ,
+      rgb (0.869409, 0.321827, 0.221482) ,
+      rgb (0.873741, 0.326906, 0.216886) ,
+      rgb (0.878001, 0.33206, 0.212268) ,
+      rgb (0.882188, 0.337287, 0.207628) ,
+      rgb (0.886302, 0.342586, 0.202968) ,
+      rgb (0.890341, 0.347957, 0.198286) ,
+      rgb (0.894305, 0.353399, 0.193584) ,
+      rgb (0.898192, 0.358911, 0.18886) ,
+      rgb (0.902003, 0.364492, 0.184116) ,
+      rgb (0.905735, 0.37014, 0.17935) ,
+      rgb (0.90939, 0.375856, 0.174563) ,
+      rgb (0.912966, 0.381636, 0.169755) ,
+      rgb (0.916462, 0.387481, 0.164924) ,
+      rgb (0.919879, 0.393389, 0.16007) ,
+      rgb (0.923215, 0.399359, 0.155193) ,
+      rgb (0.92647, 0.405389, 0.150292) ,
+      rgb (0.929644, 0.411479, 0.145367) ,
+      rgb (0.932737, 0.417627, 0.140417) ,
+      rgb (0.935747, 0.423831, 0.13544) ,
+      rgb (0.938675, 0.430091, 0.130438) ,
+      rgb (0.941521, 0.436405, 0.125409) ,
+      rgb (0.944285, 0.442772, 0.120354) ,
+      rgb (0.946965, 0.449191, 0.115272) ,
+      rgb (0.949562, 0.45566, 0.110164) ,
+      rgb (0.952075, 0.462178, 0.105031) ,
+      rgb (0.954506, 0.468744, 0.099874) ,
+      rgb (0.956852, 0.475356, 0.094695) ,
+      rgb (0.959114, 0.482014, 0.089499) ,
+      rgb (0.961293, 0.488716, 0.084289) ,
+      rgb (0.963387, 0.495462, 0.079073) ,
+      rgb (0.965397, 0.502249, 0.073859) ,
+      rgb (0.967322, 0.509078, 0.068659) ,
+      rgb (0.969163, 0.515946, 0.063488) ,
+      rgb (0.970919, 0.522853, 0.058367) ,
+      rgb (0.97259, 0.529798, 0.053324) ,
+      rgb (0.974176, 0.53678, 0.048392) ,
+      rgb (0.975677, 0.543798, 0.043618) ,
+      rgb (0.977092, 0.55085, 0.03905) ,
+      rgb (0.978422, 0.557937, 0.034931) ,
+      rgb (0.979666, 0.565057, 0.031409) ,
+      rgb (0.980824, 0.572209, 0.028508) ,
+      rgb (0.981895, 0.579392, 0.02625) ,
+      rgb (0.982881, 0.586606, 0.024661) ,
+      rgb (0.983779, 0.593849, 0.02377) ,
+      rgb (0.984591, 0.601122, 0.023606) ,
+      rgb (0.985315, 0.608422, 0.024202) ,
+      rgb (0.985952, 0.61575, 0.025592) ,
+      rgb (0.986502, 0.623105, 0.027814) ,
+      rgb (0.986964, 0.630485, 0.030908) ,
+      rgb (0.987337, 0.63789, 0.034916) ,
+      rgb (0.987622, 0.64532, 0.039886) ,
+      rgb (0.987819, 0.652773, 0.045581) ,
+      rgb (0.987926, 0.66025, 0.05175) ,
+      rgb (0.987945, 0.667748, 0.058329) ,
+      rgb (0.987874, 0.675267, 0.065257) ,
+      rgb (0.987714, 0.682807, 0.072489) ,
+      rgb (0.987464, 0.690366, 0.07999) ,
+      rgb (0.987124, 0.697944, 0.087731) ,
+      rgb (0.986694, 0.70554, 0.095694) ,
+      rgb (0.986175, 0.713153, 0.103863) ,
+      rgb (0.985566, 0.720782, 0.112229) ,
+      rgb (0.984865, 0.728427, 0.120785) ,
+      rgb (0.984075, 0.736087, 0.129527) ,
+      rgb (0.983196, 0.743758, 0.138453) ,
+      rgb (0.982228, 0.751442, 0.147565) ,
+      rgb (0.981173, 0.759135, 0.156863) ,
+      rgb (0.980032, 0.766837, 0.166353) ,
+      rgb (0.978806, 0.774545, 0.176037) ,
+      rgb (0.977497, 0.782258, 0.185923) ,
+      rgb (0.976108, 0.789974, 0.196018) ,
+      rgb (0.974638, 0.797692, 0.206332) ,
+      rgb (0.973088, 0.805409, 0.216877) ,
+      rgb (0.971468, 0.813122, 0.227658) ,
+      rgb (0.969783, 0.820825, 0.238686) ,
+      rgb (0.968041, 0.828515, 0.249972) ,
+      rgb (0.966243, 0.836191, 0.261534) ,
+      rgb (0.964394, 0.843848, 0.273391) ,
+      rgb (0.962517, 0.851476, 0.285546) ,
+      rgb (0.960626, 0.859069, 0.29801) ,
+      rgb (0.95872, 0.866624, 0.31082) ,
+      rgb (0.956834, 0.874129, 0.323974) ,
+      rgb (0.954997, 0.881569, 0.337475) ,
+      rgb (0.953215, 0.888942, 0.351369) ,
+      rgb (0.951546, 0.896226, 0.365627) ,
+      rgb (0.950018, 0.903409, 0.380271) ,
+      rgb (0.948683, 0.910473, 0.395289) ,
+      rgb (0.947594, 0.917399, 0.410665) ,
+      rgb (0.946809, 0.924168, 0.426373) ,
+      rgb (0.946392, 0.930761, 0.442367) ,
+      rgb (0.946403, 0.937159, 0.458592) ,
+      rgb (0.946903, 0.943348, 0.47497) ,
+      rgb (0.947937, 0.949318, 0.491426) ,
+      rgb (0.949545, 0.955063, 0.50786) ,
+      rgb (0.95174, 0.960587, 0.524203) ,
+      rgb (0.954529, 0.965896, 0.540361) ,
+      rgb (0.957896, 0.971003, 0.556275) ,
+      rgb (0.961812, 0.975924, 0.571925) ,
+      rgb (0.966249, 0.980678, 0.587206) ,
+      rgb (0.971162, 0.985282, 0.602154) ,
+      rgb (0.976511, 0.989753, 0.61676) ,
+      rgb (0.982257, 0.994109, 0.631017) ,
+      rgb (0.988362, 0.998364, 0.644924)
+      });
 
 
 list_data magma = list_data(new pen[] {
-  rgb (0.001462, 0.000466, 0.013866) ,
-  rgb (0.002258, 0.001295, 0.018331) ,
-  rgb (0.003279, 0.002305, 0.023708) ,
-  rgb (0.004512, 0.00349, 0.029965) ,
-  rgb (0.00595, 0.004843, 0.03713) ,
-  rgb (0.007588, 0.006356, 0.044973) ,
-  rgb (0.009426, 0.008022, 0.052844) ,
-  rgb (0.011465, 0.009828, 0.06075) ,
-  rgb (0.013708, 0.011771, 0.068667) ,
-  rgb (0.016156, 0.01384, 0.076603) ,
-  rgb (0.018815, 0.016026, 0.084584) ,
-  rgb (0.021692, 0.01832, 0.09261) ,
-  rgb (0.024792, 0.020715, 0.100676) ,
-  rgb (0.028123, 0.023201, 0.108787) ,
-  rgb (0.031696, 0.025765, 0.116965) ,
-  rgb (0.03552, 0.028397, 0.125209) ,
-  rgb (0.039608, 0.03109, 0.133515) ,
-  rgb (0.04383, 0.03383, 0.141886) ,
-  rgb (0.048062, 0.036607, 0.150327) ,
-  rgb (0.05232, 0.039407, 0.158841) ,
-  rgb (0.056615, 0.04216, 0.167446) ,
-  rgb (0.060949, 0.044794, 0.176129) ,
-  rgb (0.06533, 0.047318, 0.184892) ,
-  rgb (0.069764, 0.049726, 0.193735) ,
-  rgb (0.074257, 0.052017, 0.20266) ,
-  rgb (0.078815, 0.054184, 0.211667) ,
-  rgb (0.083446, 0.056225, 0.220755) ,
-  rgb (0.088155, 0.058133, 0.229922) ,
-  rgb (0.092949, 0.059904, 0.239164) ,
-  rgb (0.097833, 0.061531, 0.248477) ,
-  rgb (0.102815, 0.06301, 0.257854) ,
-  rgb (0.107899, 0.064335, 0.267289) ,
-  rgb (0.113094, 0.065492, 0.276784) ,
-  rgb (0.118405, 0.066479, 0.286321) ,
-  rgb (0.123833, 0.067295, 0.295879) ,
-  rgb (0.12938, 0.067935, 0.305443) ,
-  rgb (0.135053, 0.068391, 0.315) ,
-  rgb (0.140858, 0.068654, 0.324538) ,
-  rgb (0.146785, 0.068738, 0.334011) ,
-  rgb (0.152839, 0.068637, 0.343404) ,
-  rgb (0.159018, 0.068354, 0.352688) ,
-  rgb (0.165308, 0.067911, 0.361816) ,
-  rgb (0.171713, 0.067305, 0.370771) ,
-  rgb (0.178212, 0.066576, 0.379497) ,
-  rgb (0.184801, 0.065732, 0.387973) ,
-  rgb (0.19146, 0.064818, 0.396152) ,
-  rgb (0.198177, 0.063862, 0.404009) ,
-  rgb (0.204935, 0.062907, 0.411514) ,
-  rgb (0.211718, 0.061992, 0.418647) ,
-  rgb (0.218512, 0.061158, 0.425392) ,
-  rgb (0.225302, 0.060445, 0.431742) ,
-  rgb (0.232077, 0.059889, 0.437695) ,
-  rgb (0.238826, 0.059517, 0.443256) ,
-  rgb (0.245543, 0.059352, 0.448436) ,
-  rgb (0.25222, 0.059415, 0.453248) ,
-  rgb (0.258857, 0.059706, 0.45771) ,
-  rgb (0.265447, 0.060237, 0.46184) ,
-  rgb (0.271994, 0.060994, 0.46566) ,
-  rgb (0.278493, 0.061978, 0.46919) ,
-  rgb (0.284951, 0.063168, 0.472451) ,
-  rgb (0.291366, 0.064553, 0.475462) ,
-  rgb (0.29774, 0.066117, 0.478243) ,
-  rgb (0.304081, 0.067835, 0.480812) ,
-  rgb (0.310382, 0.069702, 0.483186) ,
-  rgb (0.316654, 0.07169, 0.48538) ,
-  rgb (0.322899, 0.073782, 0.487408) ,
-  rgb (0.329114, 0.075972, 0.489287) ,
-  rgb (0.335308, 0.078236, 0.491024) ,
-  rgb (0.341482, 0.080564, 0.492631) ,
-  rgb (0.347636, 0.082946, 0.494121) ,
-  rgb (0.353773, 0.085373, 0.495501) ,
-  rgb (0.359898, 0.087831, 0.496778) ,
-  rgb (0.366012, 0.090314, 0.49796) ,
-  rgb (0.372116, 0.092816, 0.499053) ,
-  rgb (0.378211, 0.095332, 0.500067) ,
-  rgb (0.384299, 0.097855, 0.501002) ,
-  rgb (0.390384, 0.100379, 0.501864) ,
-  rgb (0.396467, 0.102902, 0.502658) ,
-  rgb (0.402548, 0.10542, 0.503386) ,
-  rgb (0.408629, 0.10793, 0.504052) ,
-  rgb (0.414709, 0.110431, 0.504662) ,
-  rgb (0.420791, 0.11292, 0.505215) ,
-  rgb (0.426877, 0.115395, 0.505714) ,
-  rgb (0.432967, 0.117855, 0.50616) ,
-  rgb (0.439062, 0.120298, 0.506555) ,
-  rgb (0.445163, 0.122724, 0.506901) ,
-  rgb (0.451271, 0.125132, 0.507198) ,
-  rgb (0.457386, 0.127522, 0.507448) ,
-  rgb (0.463508, 0.129893, 0.507652) ,
-  rgb (0.46964, 0.132245, 0.507809) ,
-  rgb (0.47578, 0.134577, 0.507921) ,
-  rgb (0.481929, 0.136891, 0.507989) ,
-  rgb (0.488088, 0.139186, 0.508011) ,
-  rgb (0.494258, 0.141462, 0.507988) ,
-  rgb (0.500438, 0.143719, 0.50792) ,
-  rgb (0.506629, 0.145958, 0.507806) ,
-  rgb (0.512831, 0.148179, 0.507648) ,
-  rgb (0.519045, 0.150383, 0.507443) ,
-  rgb (0.52527, 0.152569, 0.507192) ,
-  rgb (0.531507, 0.154739, 0.506895) ,
-  rgb (0.537755, 0.156894, 0.506551) ,
-  rgb (0.544015, 0.159033, 0.506159) ,
-  rgb (0.550287, 0.161158, 0.505719) ,
-  rgb (0.556571, 0.163269, 0.50523) ,
-  rgb (0.562866, 0.165368, 0.504692) ,
-  rgb (0.569172, 0.167454, 0.504105) ,
-  rgb (0.57549, 0.16953, 0.503466) ,
-  rgb (0.581819, 0.171596, 0.502777) ,
-  rgb (0.588158, 0.173652, 0.502035) ,
-  rgb (0.594508, 0.175701, 0.501241) ,
-  rgb (0.600868, 0.177743, 0.500394) ,
-  rgb (0.607238, 0.179779, 0.499492) ,
-  rgb (0.613617, 0.181811, 0.498536) ,
-  rgb (0.620005, 0.18384, 0.497524) ,
-  rgb (0.626401, 0.185867, 0.496456) ,
-  rgb (0.632805, 0.187893, 0.495332) ,
-  rgb (0.639216, 0.189921, 0.49415) ,
-  rgb (0.645633, 0.191952, 0.49291) ,
-  rgb (0.652056, 0.193986, 0.491611) ,
-  rgb (0.658483, 0.196027, 0.490253) ,
-  rgb (0.664915, 0.198075, 0.488836) ,
-  rgb (0.671349, 0.200133, 0.487358) ,
-  rgb (0.677786, 0.202203, 0.485819) ,
-  rgb (0.684224, 0.204286, 0.484219) ,
-  rgb (0.690661, 0.206384, 0.482558) ,
-  rgb (0.697098, 0.208501, 0.480835) ,
-  rgb (0.703532, 0.210638, 0.479049) ,
-  rgb (0.709962, 0.212797, 0.477201) ,
-  rgb (0.716387, 0.214982, 0.47529) ,
-  rgb (0.722805, 0.217194, 0.473316) ,
-  rgb (0.729216, 0.219437, 0.471279) ,
-  rgb (0.735616, 0.221713, 0.46918) ,
-  rgb (0.742004, 0.224025, 0.467018) ,
-  rgb (0.748378, 0.226377, 0.464794) ,
-  rgb (0.754737, 0.228772, 0.462509) ,
-  rgb (0.761077, 0.231214, 0.460162) ,
-  rgb (0.767398, 0.233705, 0.457755) ,
-  rgb (0.773695, 0.236249, 0.455289) ,
-  rgb (0.779968, 0.238851, 0.452765) ,
-  rgb (0.786212, 0.241514, 0.450184) ,
-  rgb (0.792427, 0.244242, 0.447543) ,
-  rgb (0.798608, 0.24704, 0.444848) ,
-  rgb (0.804752, 0.249911, 0.442102) ,
-  rgb (0.810855, 0.252861, 0.439305) ,
-  rgb (0.816914, 0.255895, 0.436461) ,
-  rgb (0.822926, 0.259016, 0.433573) ,
-  rgb (0.828886, 0.262229, 0.430644) ,
-  rgb (0.834791, 0.26554, 0.427671) ,
-  rgb (0.840636, 0.268953, 0.424666) ,
-  rgb (0.846416, 0.272473, 0.421631) ,
-  rgb (0.852126, 0.276106, 0.418573) ,
-  rgb (0.857763, 0.279857, 0.415496) ,
-  rgb (0.86332, 0.283729, 0.412403) ,
-  rgb (0.868793, 0.287728, 0.409303) ,
-  rgb (0.874176, 0.291859, 0.406205) ,
-  rgb (0.879464, 0.296125, 0.403118) ,
-  rgb (0.884651, 0.30053, 0.400047) ,
-  rgb (0.889731, 0.305079, 0.397002) ,
-  rgb (0.8947, 0.309773, 0.393995) ,
-  rgb (0.899552, 0.314616, 0.391037) ,
-  rgb (0.904281, 0.31961, 0.388137) ,
-  rgb (0.908884, 0.324755, 0.385308) ,
-  rgb (0.913354, 0.330052, 0.382563) ,
-  rgb (0.917689, 0.3355, 0.379915) ,
-  rgb (0.921884, 0.341098, 0.377376) ,
-  rgb (0.925937, 0.346844, 0.374959) ,
-  rgb (0.929845, 0.352734, 0.372677) ,
-  rgb (0.933606, 0.358764, 0.370541) ,
-  rgb (0.937221, 0.364929, 0.368567) ,
-  rgb (0.940687, 0.371224, 0.366762) ,
-  rgb (0.944006, 0.377643, 0.365136) ,
-  rgb (0.94718, 0.384178, 0.363701) ,
-  rgb (0.95021, 0.39082, 0.362468) ,
-  rgb (0.953099, 0.397563, 0.361438) ,
-  rgb (0.955849, 0.4044, 0.360619) ,
-  rgb (0.958464, 0.411324, 0.360014) ,
-  rgb (0.960949, 0.418323, 0.35963) ,
-  rgb (0.96331, 0.42539, 0.359469) ,
-  rgb (0.965549, 0.432519, 0.359529) ,
-  rgb (0.967671, 0.439703, 0.35981) ,
-  rgb (0.96968, 0.446936, 0.360311) ,
-  rgb (0.971582, 0.45421, 0.36103) ,
-  rgb (0.973381, 0.46152, 0.361965) ,
-  rgb (0.975082, 0.468861, 0.363111) ,
-  rgb (0.97669, 0.476226, 0.364466) ,
-  rgb (0.97821, 0.483612, 0.366025) ,
-  rgb (0.979645, 0.491014, 0.367783) ,
-  rgb (0.981, 0.498428, 0.369734) ,
-  rgb (0.982279, 0.505851, 0.371874) ,
-  rgb (0.983485, 0.51328, 0.374198) ,
-  rgb (0.984622, 0.520713, 0.376698) ,
-  rgb (0.985693, 0.528148, 0.379371) ,
-  rgb (0.9867, 0.535582, 0.38221) ,
-  rgb (0.987646, 0.543015, 0.38521) ,
-  rgb (0.988533, 0.550446, 0.388365) ,
-  rgb (0.989363, 0.557873, 0.391671) ,
-  rgb (0.990138, 0.565296, 0.395122) ,
-  rgb (0.990871, 0.572706, 0.398714) ,
-  rgb (0.991558, 0.580107, 0.402441) ,
-  rgb (0.992196, 0.587502, 0.406299) ,
-  rgb (0.992785, 0.594891, 0.410283) ,
-  rgb (0.993326, 0.602275, 0.41439) ,
-  rgb (0.993834, 0.609644, 0.418613) ,
-  rgb (0.994309, 0.616999, 0.42295) ,
-  rgb (0.994738, 0.62435, 0.427397) ,
-  rgb (0.995122, 0.631696, 0.431951) ,
-  rgb (0.99548, 0.639027, 0.436607) ,
-  rgb (0.99581, 0.646344, 0.441361) ,
-  rgb (0.996096, 0.653659, 0.446213) ,
-  rgb (0.996341, 0.660969, 0.45116) ,
-  rgb (0.99658, 0.668256, 0.456192) ,
-  rgb (0.996775, 0.675541, 0.461314) ,
-  rgb (0.996925, 0.682828, 0.466526) ,
-  rgb (0.997077, 0.690088, 0.471811) ,
-  rgb (0.997186, 0.697349, 0.477182) ,
-  rgb (0.997254, 0.704611, 0.482635) ,
-  rgb (0.997325, 0.711848, 0.488154) ,
-  rgb (0.997351, 0.719089, 0.493755) ,
-  rgb (0.997351, 0.726324, 0.499428) ,
-  rgb (0.997341, 0.733545, 0.505167) ,
-  rgb (0.997285, 0.740772, 0.510983) ,
-  rgb (0.997228, 0.747981, 0.516859) ,
-  rgb (0.997138, 0.75519, 0.522806) ,
-  rgb (0.997019, 0.762398, 0.528821) ,
-  rgb (0.996898, 0.769591, 0.534892) ,
-  rgb (0.996727, 0.776795, 0.541039) ,
-  rgb (0.996571, 0.783977, 0.547233) ,
-  rgb (0.996369, 0.791167, 0.553499) ,
-  rgb (0.996162, 0.798348, 0.55982) ,
-  rgb (0.995932, 0.805527, 0.566202) ,
-  rgb (0.99568, 0.812706, 0.572645) ,
-  rgb (0.995424, 0.819875, 0.57914) ,
-  rgb (0.995131, 0.827052, 0.585701) ,
-  rgb (0.994851, 0.834213, 0.592307) ,
-  rgb (0.994524, 0.841387, 0.598983) ,
-  rgb (0.994222, 0.84854, 0.605696) ,
-  rgb (0.993866, 0.855711, 0.612482) ,
-  rgb (0.993545, 0.862859, 0.619299) ,
-  rgb (0.99317, 0.870024, 0.626189) ,
-  rgb (0.992831, 0.877168, 0.633109) ,
-  rgb (0.99244, 0.88433, 0.640099) ,
-  rgb (0.992089, 0.89147, 0.647116) ,
-  rgb (0.991688, 0.898627, 0.654202) ,
-  rgb (0.991332, 0.905763, 0.661309) ,
-  rgb (0.99093, 0.912915, 0.668481) ,
-  rgb (0.99057, 0.920049, 0.675675) ,
-  rgb (0.990175, 0.927196, 0.682926) ,
-  rgb (0.989815, 0.934329, 0.690198) ,
-  rgb (0.989434, 0.94147, 0.697519) ,
-  rgb (0.989077, 0.948604, 0.704863) ,
-  rgb (0.988717, 0.955742, 0.712242) ,
-  rgb (0.988367, 0.962878, 0.719649) ,
-  rgb (0.988033, 0.970012, 0.727077) ,
-  rgb (0.987691, 0.977154, 0.734536) ,
-  rgb (0.987387, 0.984288, 0.742002) ,
-  rgb (0.987053, 0.991438, 0.749504)
-});
+    rgb (0.001462, 0.000466, 0.013866) ,
+      rgb (0.002258, 0.001295, 0.018331) ,
+      rgb (0.003279, 0.002305, 0.023708) ,
+      rgb (0.004512, 0.00349, 0.029965) ,
+      rgb (0.00595, 0.004843, 0.03713) ,
+      rgb (0.007588, 0.006356, 0.044973) ,
+      rgb (0.009426, 0.008022, 0.052844) ,
+      rgb (0.011465, 0.009828, 0.06075) ,
+      rgb (0.013708, 0.011771, 0.068667) ,
+      rgb (0.016156, 0.01384, 0.076603) ,
+      rgb (0.018815, 0.016026, 0.084584) ,
+      rgb (0.021692, 0.01832, 0.09261) ,
+      rgb (0.024792, 0.020715, 0.100676) ,
+      rgb (0.028123, 0.023201, 0.108787) ,
+      rgb (0.031696, 0.025765, 0.116965) ,
+      rgb (0.03552, 0.028397, 0.125209) ,
+      rgb (0.039608, 0.03109, 0.133515) ,
+      rgb (0.04383, 0.03383, 0.141886) ,
+      rgb (0.048062, 0.036607, 0.150327) ,
+      rgb (0.05232, 0.039407, 0.158841) ,
+      rgb (0.056615, 0.04216, 0.167446) ,
+      rgb (0.060949, 0.044794, 0.176129) ,
+      rgb (0.06533, 0.047318, 0.184892) ,
+      rgb (0.069764, 0.049726, 0.193735) ,
+      rgb (0.074257, 0.052017, 0.20266) ,
+      rgb (0.078815, 0.054184, 0.211667) ,
+      rgb (0.083446, 0.056225, 0.220755) ,
+      rgb (0.088155, 0.058133, 0.229922) ,
+      rgb (0.092949, 0.059904, 0.239164) ,
+      rgb (0.097833, 0.061531, 0.248477) ,
+      rgb (0.102815, 0.06301, 0.257854) ,
+      rgb (0.107899, 0.064335, 0.267289) ,
+      rgb (0.113094, 0.065492, 0.276784) ,
+      rgb (0.118405, 0.066479, 0.286321) ,
+      rgb (0.123833, 0.067295, 0.295879) ,
+      rgb (0.12938, 0.067935, 0.305443) ,
+      rgb (0.135053, 0.068391, 0.315) ,
+      rgb (0.140858, 0.068654, 0.324538) ,
+      rgb (0.146785, 0.068738, 0.334011) ,
+      rgb (0.152839, 0.068637, 0.343404) ,
+      rgb (0.159018, 0.068354, 0.352688) ,
+      rgb (0.165308, 0.067911, 0.361816) ,
+      rgb (0.171713, 0.067305, 0.370771) ,
+      rgb (0.178212, 0.066576, 0.379497) ,
+      rgb (0.184801, 0.065732, 0.387973) ,
+      rgb (0.19146, 0.064818, 0.396152) ,
+      rgb (0.198177, 0.063862, 0.404009) ,
+      rgb (0.204935, 0.062907, 0.411514) ,
+      rgb (0.211718, 0.061992, 0.418647) ,
+      rgb (0.218512, 0.061158, 0.425392) ,
+      rgb (0.225302, 0.060445, 0.431742) ,
+      rgb (0.232077, 0.059889, 0.437695) ,
+      rgb (0.238826, 0.059517, 0.443256) ,
+      rgb (0.245543, 0.059352, 0.448436) ,
+      rgb (0.25222, 0.059415, 0.453248) ,
+      rgb (0.258857, 0.059706, 0.45771) ,
+      rgb (0.265447, 0.060237, 0.46184) ,
+      rgb (0.271994, 0.060994, 0.46566) ,
+      rgb (0.278493, 0.061978, 0.46919) ,
+      rgb (0.284951, 0.063168, 0.472451) ,
+      rgb (0.291366, 0.064553, 0.475462) ,
+      rgb (0.29774, 0.066117, 0.478243) ,
+      rgb (0.304081, 0.067835, 0.480812) ,
+      rgb (0.310382, 0.069702, 0.483186) ,
+      rgb (0.316654, 0.07169, 0.48538) ,
+      rgb (0.322899, 0.073782, 0.487408) ,
+      rgb (0.329114, 0.075972, 0.489287) ,
+      rgb (0.335308, 0.078236, 0.491024) ,
+      rgb (0.341482, 0.080564, 0.492631) ,
+      rgb (0.347636, 0.082946, 0.494121) ,
+      rgb (0.353773, 0.085373, 0.495501) ,
+      rgb (0.359898, 0.087831, 0.496778) ,
+      rgb (0.366012, 0.090314, 0.49796) ,
+      rgb (0.372116, 0.092816, 0.499053) ,
+      rgb (0.378211, 0.095332, 0.500067) ,
+      rgb (0.384299, 0.097855, 0.501002) ,
+      rgb (0.390384, 0.100379, 0.501864) ,
+      rgb (0.396467, 0.102902, 0.502658) ,
+      rgb (0.402548, 0.10542, 0.503386) ,
+      rgb (0.408629, 0.10793, 0.504052) ,
+      rgb (0.414709, 0.110431, 0.504662) ,
+      rgb (0.420791, 0.11292, 0.505215) ,
+      rgb (0.426877, 0.115395, 0.505714) ,
+      rgb (0.432967, 0.117855, 0.50616) ,
+      rgb (0.439062, 0.120298, 0.506555) ,
+      rgb (0.445163, 0.122724, 0.506901) ,
+      rgb (0.451271, 0.125132, 0.507198) ,
+      rgb (0.457386, 0.127522, 0.507448) ,
+      rgb (0.463508, 0.129893, 0.507652) ,
+      rgb (0.46964, 0.132245, 0.507809) ,
+      rgb (0.47578, 0.134577, 0.507921) ,
+      rgb (0.481929, 0.136891, 0.507989) ,
+      rgb (0.488088, 0.139186, 0.508011) ,
+      rgb (0.494258, 0.141462, 0.507988) ,
+      rgb (0.500438, 0.143719, 0.50792) ,
+      rgb (0.506629, 0.145958, 0.507806) ,
+      rgb (0.512831, 0.148179, 0.507648) ,
+      rgb (0.519045, 0.150383, 0.507443) ,
+      rgb (0.52527, 0.152569, 0.507192) ,
+      rgb (0.531507, 0.154739, 0.506895) ,
+      rgb (0.537755, 0.156894, 0.506551) ,
+      rgb (0.544015, 0.159033, 0.506159) ,
+      rgb (0.550287, 0.161158, 0.505719) ,
+      rgb (0.556571, 0.163269, 0.50523) ,
+      rgb (0.562866, 0.165368, 0.504692) ,
+      rgb (0.569172, 0.167454, 0.504105) ,
+      rgb (0.57549, 0.16953, 0.503466) ,
+      rgb (0.581819, 0.171596, 0.502777) ,
+      rgb (0.588158, 0.173652, 0.502035) ,
+      rgb (0.594508, 0.175701, 0.501241) ,
+      rgb (0.600868, 0.177743, 0.500394) ,
+      rgb (0.607238, 0.179779, 0.499492) ,
+      rgb (0.613617, 0.181811, 0.498536) ,
+      rgb (0.620005, 0.18384, 0.497524) ,
+      rgb (0.626401, 0.185867, 0.496456) ,
+      rgb (0.632805, 0.187893, 0.495332) ,
+      rgb (0.639216, 0.189921, 0.49415) ,
+      rgb (0.645633, 0.191952, 0.49291) ,
+      rgb (0.652056, 0.193986, 0.491611) ,
+      rgb (0.658483, 0.196027, 0.490253) ,
+      rgb (0.664915, 0.198075, 0.488836) ,
+      rgb (0.671349, 0.200133, 0.487358) ,
+      rgb (0.677786, 0.202203, 0.485819) ,
+      rgb (0.684224, 0.204286, 0.484219) ,
+      rgb (0.690661, 0.206384, 0.482558) ,
+      rgb (0.697098, 0.208501, 0.480835) ,
+      rgb (0.703532, 0.210638, 0.479049) ,
+      rgb (0.709962, 0.212797, 0.477201) ,
+      rgb (0.716387, 0.214982, 0.47529) ,
+      rgb (0.722805, 0.217194, 0.473316) ,
+      rgb (0.729216, 0.219437, 0.471279) ,
+      rgb (0.735616, 0.221713, 0.46918) ,
+      rgb (0.742004, 0.224025, 0.467018) ,
+      rgb (0.748378, 0.226377, 0.464794) ,
+      rgb (0.754737, 0.228772, 0.462509) ,
+      rgb (0.761077, 0.231214, 0.460162) ,
+      rgb (0.767398, 0.233705, 0.457755) ,
+      rgb (0.773695, 0.236249, 0.455289) ,
+      rgb (0.779968, 0.238851, 0.452765) ,
+      rgb (0.786212, 0.241514, 0.450184) ,
+      rgb (0.792427, 0.244242, 0.447543) ,
+      rgb (0.798608, 0.24704, 0.444848) ,
+      rgb (0.804752, 0.249911, 0.442102) ,
+      rgb (0.810855, 0.252861, 0.439305) ,
+      rgb (0.816914, 0.255895, 0.436461) ,
+      rgb (0.822926, 0.259016, 0.433573) ,
+      rgb (0.828886, 0.262229, 0.430644) ,
+      rgb (0.834791, 0.26554, 0.427671) ,
+      rgb (0.840636, 0.268953, 0.424666) ,
+      rgb (0.846416, 0.272473, 0.421631) ,
+      rgb (0.852126, 0.276106, 0.418573) ,
+      rgb (0.857763, 0.279857, 0.415496) ,
+      rgb (0.86332, 0.283729, 0.412403) ,
+      rgb (0.868793, 0.287728, 0.409303) ,
+      rgb (0.874176, 0.291859, 0.406205) ,
+      rgb (0.879464, 0.296125, 0.403118) ,
+      rgb (0.884651, 0.30053, 0.400047) ,
+      rgb (0.889731, 0.305079, 0.397002) ,
+      rgb (0.8947, 0.309773, 0.393995) ,
+      rgb (0.899552, 0.314616, 0.391037) ,
+      rgb (0.904281, 0.31961, 0.388137) ,
+      rgb (0.908884, 0.324755, 0.385308) ,
+      rgb (0.913354, 0.330052, 0.382563) ,
+      rgb (0.917689, 0.3355, 0.379915) ,
+      rgb (0.921884, 0.341098, 0.377376) ,
+      rgb (0.925937, 0.346844, 0.374959) ,
+      rgb (0.929845, 0.352734, 0.372677) ,
+      rgb (0.933606, 0.358764, 0.370541) ,
+      rgb (0.937221, 0.364929, 0.368567) ,
+      rgb (0.940687, 0.371224, 0.366762) ,
+      rgb (0.944006, 0.377643, 0.365136) ,
+      rgb (0.94718, 0.384178, 0.363701) ,
+      rgb (0.95021, 0.39082, 0.362468) ,
+      rgb (0.953099, 0.397563, 0.361438) ,
+      rgb (0.955849, 0.4044, 0.360619) ,
+      rgb (0.958464, 0.411324, 0.360014) ,
+      rgb (0.960949, 0.418323, 0.35963) ,
+      rgb (0.96331, 0.42539, 0.359469) ,
+      rgb (0.965549, 0.432519, 0.359529) ,
+      rgb (0.967671, 0.439703, 0.35981) ,
+      rgb (0.96968, 0.446936, 0.360311) ,
+      rgb (0.971582, 0.45421, 0.36103) ,
+      rgb (0.973381, 0.46152, 0.361965) ,
+      rgb (0.975082, 0.468861, 0.363111) ,
+      rgb (0.97669, 0.476226, 0.364466) ,
+      rgb (0.97821, 0.483612, 0.366025) ,
+      rgb (0.979645, 0.491014, 0.367783) ,
+      rgb (0.981, 0.498428, 0.369734) ,
+      rgb (0.982279, 0.505851, 0.371874) ,
+      rgb (0.983485, 0.51328, 0.374198) ,
+      rgb (0.984622, 0.520713, 0.376698) ,
+      rgb (0.985693, 0.528148, 0.379371) ,
+      rgb (0.9867, 0.535582, 0.38221) ,
+      rgb (0.987646, 0.543015, 0.38521) ,
+      rgb (0.988533, 0.550446, 0.388365) ,
+      rgb (0.989363, 0.557873, 0.391671) ,
+      rgb (0.990138, 0.565296, 0.395122) ,
+      rgb (0.990871, 0.572706, 0.398714) ,
+      rgb (0.991558, 0.580107, 0.402441) ,
+      rgb (0.992196, 0.587502, 0.406299) ,
+      rgb (0.992785, 0.594891, 0.410283) ,
+      rgb (0.993326, 0.602275, 0.41439) ,
+      rgb (0.993834, 0.609644, 0.418613) ,
+      rgb (0.994309, 0.616999, 0.42295) ,
+      rgb (0.994738, 0.62435, 0.427397) ,
+      rgb (0.995122, 0.631696, 0.431951) ,
+      rgb (0.99548, 0.639027, 0.436607) ,
+      rgb (0.99581, 0.646344, 0.441361) ,
+      rgb (0.996096, 0.653659, 0.446213) ,
+      rgb (0.996341, 0.660969, 0.45116) ,
+      rgb (0.99658, 0.668256, 0.456192) ,
+      rgb (0.996775, 0.675541, 0.461314) ,
+      rgb (0.996925, 0.682828, 0.466526) ,
+      rgb (0.997077, 0.690088, 0.471811) ,
+      rgb (0.997186, 0.697349, 0.477182) ,
+      rgb (0.997254, 0.704611, 0.482635) ,
+      rgb (0.997325, 0.711848, 0.488154) ,
+      rgb (0.997351, 0.719089, 0.493755) ,
+      rgb (0.997351, 0.726324, 0.499428) ,
+      rgb (0.997341, 0.733545, 0.505167) ,
+      rgb (0.997285, 0.740772, 0.510983) ,
+      rgb (0.997228, 0.747981, 0.516859) ,
+      rgb (0.997138, 0.75519, 0.522806) ,
+      rgb (0.997019, 0.762398, 0.528821) ,
+      rgb (0.996898, 0.769591, 0.534892) ,
+      rgb (0.996727, 0.776795, 0.541039) ,
+      rgb (0.996571, 0.783977, 0.547233) ,
+      rgb (0.996369, 0.791167, 0.553499) ,
+      rgb (0.996162, 0.798348, 0.55982) ,
+      rgb (0.995932, 0.805527, 0.566202) ,
+      rgb (0.99568, 0.812706, 0.572645) ,
+      rgb (0.995424, 0.819875, 0.57914) ,
+      rgb (0.995131, 0.827052, 0.585701) ,
+      rgb (0.994851, 0.834213, 0.592307) ,
+      rgb (0.994524, 0.841387, 0.598983) ,
+      rgb (0.994222, 0.84854, 0.605696) ,
+      rgb (0.993866, 0.855711, 0.612482) ,
+      rgb (0.993545, 0.862859, 0.619299) ,
+      rgb (0.99317, 0.870024, 0.626189) ,
+      rgb (0.992831, 0.877168, 0.633109) ,
+      rgb (0.99244, 0.88433, 0.640099) ,
+      rgb (0.992089, 0.89147, 0.647116) ,
+      rgb (0.991688, 0.898627, 0.654202) ,
+      rgb (0.991332, 0.905763, 0.661309) ,
+      rgb (0.99093, 0.912915, 0.668481) ,
+      rgb (0.99057, 0.920049, 0.675675) ,
+      rgb (0.990175, 0.927196, 0.682926) ,
+      rgb (0.989815, 0.934329, 0.690198) ,
+      rgb (0.989434, 0.94147, 0.697519) ,
+      rgb (0.989077, 0.948604, 0.704863) ,
+      rgb (0.988717, 0.955742, 0.712242) ,
+      rgb (0.988367, 0.962878, 0.719649) ,
+      rgb (0.988033, 0.970012, 0.727077) ,
+      rgb (0.987691, 0.977154, 0.734536) ,
+      rgb (0.987387, 0.984288, 0.742002) ,
+      rgb (0.987053, 0.991438, 0.749504)
+      });
 
 
 list_data plasma = list_data(new pen[] {
-  rgb (0.050383, 0.029803, 0.527975) ,
-  rgb (0.063536, 0.028426, 0.533124) ,
-  rgb (0.075353, 0.027206, 0.538007) ,
-  rgb (0.086222, 0.026125, 0.542658) ,
-  rgb (0.096379, 0.025165, 0.547103) ,
-  rgb (0.10598, 0.024309, 0.551368) ,
-  rgb (0.115124, 0.023556, 0.555468) ,
-  rgb (0.123903, 0.022878, 0.559423) ,
-  rgb (0.132381, 0.022258, 0.56325) ,
-  rgb (0.140603, 0.021687, 0.566959) ,
-  rgb (0.148607, 0.021154, 0.570562) ,
-  rgb (0.156421, 0.020651, 0.574065) ,
-  rgb (0.16407, 0.020171, 0.577478) ,
-  rgb (0.171574, 0.019706, 0.580806) ,
-  rgb (0.17895, 0.019252, 0.584054) ,
-  rgb (0.186213, 0.018803, 0.587228) ,
-  rgb (0.193374, 0.018354, 0.59033) ,
-  rgb (0.200445, 0.017902, 0.593364) ,
-  rgb (0.207435, 0.017442, 0.596333) ,
-  rgb (0.21435, 0.016973, 0.599239) ,
-  rgb (0.221197, 0.016497, 0.602083) ,
-  rgb (0.227983, 0.016007, 0.604867) ,
-  rgb (0.234715, 0.015502, 0.607592) ,
-  rgb (0.241396, 0.014979, 0.610259) ,
-  rgb (0.248032, 0.014439, 0.612868) ,
-  rgb (0.254627, 0.013882, 0.615419) ,
-  rgb (0.261183, 0.013308, 0.617911) ,
-  rgb (0.267703, 0.012716, 0.620346) ,
-  rgb (0.274191, 0.012109, 0.622722) ,
-  rgb (0.280648, 0.011488, 0.625038) ,
-  rgb (0.287076, 0.010855, 0.627295) ,
-  rgb (0.293478, 0.010213, 0.62949) ,
-  rgb (0.299855, 0.009561, 0.631624) ,
-  rgb (0.30621, 0.008902, 0.633694) ,
-  rgb (0.312543, 0.008239, 0.6357) ,
-  rgb (0.318856, 0.007576, 0.63764) ,
-  rgb (0.32515, 0.006915, 0.639512) ,
-  rgb (0.331426, 0.006261, 0.641316) ,
-  rgb (0.337683, 0.005618, 0.643049) ,
-  rgb (0.343925, 0.004991, 0.64471) ,
-  rgb (0.35015, 0.004382, 0.646298) ,
-  rgb (0.356359, 0.003798, 0.64781) ,
-  rgb (0.362553, 0.003243, 0.649245) ,
-  rgb (0.368733, 0.002724, 0.650601) ,
-  rgb (0.374897, 0.002245, 0.651876) ,
-  rgb (0.381047, 0.001814, 0.653068) ,
-  rgb (0.387183, 0.001434, 0.654177) ,
-  rgb (0.393304, 0.001114, 0.655199) ,
-  rgb (0.399411, 0.000859, 0.656133) ,
-  rgb (0.405503, 0.000678, 0.656977) ,
-  rgb (0.41158, 0.000577, 0.65773) ,
-  rgb (0.417642, 0.000564, 0.65839) ,
-  rgb (0.423689, 0.000646, 0.658956) ,
-  rgb (0.429719, 0.000831, 0.659425) ,
-  rgb (0.435734, 0.001127, 0.659797) ,
-  rgb (0.441732, 0.00154, 0.660069) ,
-  rgb (0.447714, 0.00208, 0.66024) ,
-  rgb (0.453677, 0.002755, 0.66031) ,
-  rgb (0.459623, 0.003574, 0.660277) ,
-  rgb (0.46555, 0.004545, 0.660139) ,
-  rgb (0.471457, 0.005678, 0.659897) ,
-  rgb (0.477344, 0.00698, 0.659549) ,
-  rgb (0.48321, 0.00846, 0.659095) ,
-  rgb (0.489055, 0.010127, 0.658534) ,
-  rgb (0.494877, 0.01199, 0.657865) ,
-  rgb (0.500678, 0.014055, 0.657088) ,
-  rgb (0.506454, 0.016333, 0.656202) ,
-  rgb (0.512206, 0.018833, 0.655209) ,
-  rgb (0.517933, 0.021563, 0.654109) ,
-  rgb (0.523633, 0.024532, 0.652901) ,
-  rgb (0.529306, 0.027747, 0.651586) ,
-  rgb (0.534952, 0.031217, 0.650165) ,
-  rgb (0.54057, 0.03495, 0.64864) ,
-  rgb (0.546157, 0.038954, 0.64701) ,
-  rgb (0.551715, 0.043136, 0.645277) ,
-  rgb (0.557243, 0.047331, 0.643443) ,
-  rgb (0.562738, 0.051545, 0.641509) ,
-  rgb (0.568201, 0.055778, 0.639477) ,
-  rgb (0.573632, 0.060028, 0.637349) ,
-  rgb (0.579029, 0.064296, 0.635126) ,
-  rgb (0.584391, 0.068579, 0.632812) ,
-  rgb (0.589719, 0.072878, 0.630408) ,
-  rgb (0.595011, 0.07719, 0.627917) ,
-  rgb (0.600266, 0.081516, 0.625342) ,
-  rgb (0.605485, 0.085854, 0.622686) ,
-  rgb (0.610667, 0.090204, 0.619951) ,
-  rgb (0.615812, 0.094564, 0.61714) ,
-  rgb (0.620919, 0.098934, 0.614257) ,
-  rgb (0.625987, 0.103312, 0.611305) ,
-  rgb (0.631017, 0.107699, 0.608287) ,
-  rgb (0.636008, 0.112092, 0.605205) ,
-  rgb (0.640959, 0.116492, 0.602065) ,
-  rgb (0.645872, 0.120898, 0.598867) ,
-  rgb (0.650746, 0.125309, 0.595617) ,
-  rgb (0.65558, 0.129725, 0.592317) ,
-  rgb (0.660374, 0.134144, 0.588971) ,
-  rgb (0.665129, 0.138566, 0.585582) ,
-  rgb (0.669845, 0.142992, 0.582154) ,
-  rgb (0.674522, 0.147419, 0.578688) ,
-  rgb (0.67916, 0.151848, 0.575189) ,
-  rgb (0.683758, 0.156278, 0.57166) ,
-  rgb (0.688318, 0.160709, 0.568103) ,
-  rgb (0.69284, 0.165141, 0.564522) ,
-  rgb (0.697324, 0.169573, 0.560919) ,
-  rgb (0.701769, 0.174005, 0.557296) ,
-  rgb (0.706178, 0.178437, 0.553657) ,
-  rgb (0.710549, 0.182868, 0.550004) ,
-  rgb (0.714883, 0.187299, 0.546338) ,
-  rgb (0.719181, 0.191729, 0.542663) ,
-  rgb (0.723444, 0.196158, 0.538981) ,
-  rgb (0.72767, 0.200586, 0.535293) ,
-  rgb (0.731862, 0.205013, 0.531601) ,
-  rgb (0.736019, 0.209439, 0.527908) ,
-  rgb (0.740143, 0.213864, 0.524216) ,
-  rgb (0.744232, 0.218288, 0.520524) ,
-  rgb (0.748289, 0.222711, 0.516834) ,
-  rgb (0.752312, 0.227133, 0.513149) ,
-  rgb (0.756304, 0.231555, 0.509468) ,
-  rgb (0.760264, 0.235976, 0.505794) ,
-  rgb (0.764193, 0.240396, 0.502126) ,
-  rgb (0.76809, 0.244817, 0.498465) ,
-  rgb (0.771958, 0.249237, 0.494813) ,
-  rgb (0.775796, 0.253658, 0.491171) ,
-  rgb (0.779604, 0.258078, 0.487539) ,
-  rgb (0.783383, 0.2625, 0.483918) ,
-  rgb (0.787133, 0.266922, 0.480307) ,
-  rgb (0.790855, 0.271345, 0.476706) ,
-  rgb (0.794549, 0.27577, 0.473117) ,
-  rgb (0.798216, 0.280197, 0.469538) ,
-  rgb (0.801855, 0.284626, 0.465971) ,
-  rgb (0.805467, 0.289057, 0.462415) ,
-  rgb (0.809052, 0.293491, 0.45887) ,
-  rgb (0.812612, 0.297928, 0.455338) ,
-  rgb (0.816144, 0.302368, 0.451816) ,
-  rgb (0.819651, 0.306812, 0.448306) ,
-  rgb (0.823132, 0.311261, 0.444806) ,
-  rgb (0.826588, 0.315714, 0.441316) ,
-  rgb (0.830018, 0.320172, 0.437836) ,
-  rgb (0.833422, 0.324635, 0.434366) ,
-  rgb (0.836801, 0.329105, 0.430905) ,
-  rgb (0.840155, 0.33358, 0.427455) ,
-  rgb (0.843484, 0.338062, 0.424013) ,
-  rgb (0.846788, 0.342551, 0.420579) ,
-  rgb (0.850066, 0.347048, 0.417153) ,
-  rgb (0.853319, 0.351553, 0.413734) ,
-  rgb (0.856547, 0.356066, 0.410322) ,
-  rgb (0.85975, 0.360588, 0.406917) ,
-  rgb (0.862927, 0.365119, 0.403519) ,
-  rgb (0.866078, 0.36966, 0.400126) ,
-  rgb (0.869203, 0.374212, 0.396738) ,
-  rgb (0.872303, 0.378774, 0.393355) ,
-  rgb (0.875376, 0.383347, 0.389976) ,
-  rgb (0.878423, 0.387932, 0.3866) ,
-  rgb (0.881443, 0.392529, 0.383229) ,
-  rgb (0.884436, 0.397139, 0.37986) ,
-  rgb (0.887402, 0.401762, 0.376494) ,
-  rgb (0.89034, 0.406398, 0.37313) ,
-  rgb (0.89325, 0.411048, 0.369768) ,
-  rgb (0.896131, 0.415712, 0.366407) ,
-  rgb (0.898984, 0.420392, 0.363047) ,
-  rgb (0.901807, 0.425087, 0.359688) ,
-  rgb (0.904601, 0.429797, 0.356329) ,
-  rgb (0.907365, 0.434524, 0.35297) ,
-  rgb (0.910098, 0.439268, 0.34961) ,
-  rgb (0.9128, 0.444029, 0.346251) ,
-  rgb (0.915471, 0.448807, 0.34289) ,
-  rgb (0.918109, 0.453603, 0.339529) ,
-  rgb (0.920714, 0.458417, 0.336166) ,
-  rgb (0.923287, 0.463251, 0.332801) ,
-  rgb (0.925825, 0.468103, 0.329435) ,
-  rgb (0.928329, 0.472975, 0.326067) ,
-  rgb (0.930798, 0.477867, 0.322697) ,
-  rgb (0.933232, 0.48278, 0.319325) ,
-  rgb (0.93563, 0.487712, 0.315952) ,
-  rgb (0.93799, 0.492667, 0.312575) ,
-  rgb (0.940313, 0.497642, 0.309197) ,
-  rgb (0.942598, 0.502639, 0.305816) ,
-  rgb (0.944844, 0.507658, 0.302433) ,
-  rgb (0.947051, 0.512699, 0.299049) ,
-  rgb (0.949217, 0.517763, 0.295662) ,
-  rgb (0.951344, 0.52285, 0.292275) ,
-  rgb (0.953428, 0.52796, 0.288883) ,
-  rgb (0.95547, 0.533093, 0.28549) ,
-  rgb (0.957469, 0.53825, 0.282096) ,
-  rgb (0.959424, 0.543431, 0.278701) ,
-  rgb (0.961336, 0.548636, 0.275305) ,
-  rgb (0.963203, 0.553865, 0.271909) ,
-  rgb (0.965024, 0.559118, 0.268513) ,
-  rgb (0.966798, 0.564396, 0.265118) ,
-  rgb (0.968526, 0.5697, 0.261721) ,
-  rgb (0.970205, 0.575028, 0.258325) ,
-  rgb (0.971835, 0.580382, 0.254931) ,
-  rgb (0.973416, 0.585761, 0.25154) ,
-  rgb (0.974947, 0.591165, 0.248151) ,
-  rgb (0.976428, 0.596595, 0.244767) ,
-  rgb (0.977856, 0.602051, 0.241387) ,
-  rgb (0.979233, 0.607532, 0.238013) ,
-  rgb (0.980556, 0.613039, 0.234646) ,
-  rgb (0.981826, 0.618572, 0.231287) ,
-  rgb (0.983041, 0.624131, 0.227937) ,
-  rgb (0.984199, 0.629718, 0.224595) ,
-  rgb (0.985301, 0.63533, 0.221265) ,
-  rgb (0.986345, 0.640969, 0.217948) ,
-  rgb (0.987332, 0.646633, 0.214648) ,
-  rgb (0.98826, 0.652325, 0.211364) ,
-  rgb (0.989128, 0.658043, 0.2081) ,
-  rgb (0.989935, 0.663787, 0.204859) ,
-  rgb (0.990681, 0.669558, 0.201642) ,
-  rgb (0.991365, 0.675355, 0.198453) ,
-  rgb (0.991985, 0.681179, 0.195295) ,
-  rgb (0.992541, 0.68703, 0.19217) ,
-  rgb (0.993032, 0.692907, 0.189084) ,
-  rgb (0.993456, 0.69881, 0.186041) ,
-  rgb (0.993814, 0.704741, 0.183043) ,
-  rgb (0.994103, 0.710698, 0.180097) ,
-  rgb (0.994324, 0.716681, 0.177208) ,
-  rgb (0.994474, 0.722691, 0.174381) ,
-  rgb (0.994553, 0.728728, 0.171622) ,
-  rgb (0.994561, 0.734791, 0.168938) ,
-  rgb (0.994495, 0.74088, 0.166335) ,
-  rgb (0.994355, 0.746995, 0.163821) ,
-  rgb (0.994141, 0.753137, 0.161404) ,
-  rgb (0.993851, 0.759304, 0.159092) ,
-  rgb (0.993482, 0.765499, 0.156891) ,
-  rgb (0.993033, 0.77172, 0.154808) ,
-  rgb (0.992505, 0.777967, 0.152855) ,
-  rgb (0.991897, 0.784239, 0.151042) ,
-  rgb (0.991209, 0.790537, 0.149377) ,
-  rgb (0.990439, 0.796859, 0.14787) ,
-  rgb (0.989587, 0.803205, 0.146529) ,
-  rgb (0.988648, 0.809579, 0.145357) ,
-  rgb (0.987621, 0.815978, 0.144363) ,
-  rgb (0.986509, 0.822401, 0.143557) ,
-  rgb (0.985314, 0.828846, 0.142945) ,
-  rgb (0.984031, 0.835315, 0.142528) ,
-  rgb (0.982653, 0.841812, 0.142303) ,
-  rgb (0.98119, 0.848329, 0.142279) ,
-  rgb (0.979644, 0.854866, 0.142453) ,
-  rgb (0.977995, 0.861432, 0.142808) ,
-  rgb (0.976265, 0.868016, 0.143351) ,
-  rgb (0.974443, 0.874622, 0.144061) ,
-  rgb (0.97253, 0.88125, 0.144923) ,
-  rgb (0.970533, 0.887896, 0.145919) ,
-  rgb (0.968443, 0.894564, 0.147014) ,
-  rgb (0.966271, 0.901249, 0.14818) ,
-  rgb (0.964021, 0.90795, 0.14937) ,
-  rgb (0.961681, 0.914672, 0.15052) ,
-  rgb (0.959276, 0.921407, 0.151566) ,
-  rgb (0.956808, 0.928152, 0.152409) ,
-  rgb (0.954287, 0.934908, 0.152921) ,
-  rgb (0.951726, 0.941671, 0.152925) ,
-  rgb (0.949151, 0.948435, 0.152178) ,
-  rgb (0.946602, 0.95519, 0.150328) ,
-  rgb (0.944152, 0.961916, 0.146861) ,
-  rgb (0.941896, 0.96859, 0.140956) ,
-  rgb (0.940015, 0.975158, 0.131326)
-});
+    rgb (0.050383, 0.029803, 0.527975) ,
+      rgb (0.063536, 0.028426, 0.533124) ,
+      rgb (0.075353, 0.027206, 0.538007) ,
+      rgb (0.086222, 0.026125, 0.542658) ,
+      rgb (0.096379, 0.025165, 0.547103) ,
+      rgb (0.10598, 0.024309, 0.551368) ,
+      rgb (0.115124, 0.023556, 0.555468) ,
+      rgb (0.123903, 0.022878, 0.559423) ,
+      rgb (0.132381, 0.022258, 0.56325) ,
+      rgb (0.140603, 0.021687, 0.566959) ,
+      rgb (0.148607, 0.021154, 0.570562) ,
+      rgb (0.156421, 0.020651, 0.574065) ,
+      rgb (0.16407, 0.020171, 0.577478) ,
+      rgb (0.171574, 0.019706, 0.580806) ,
+      rgb (0.17895, 0.019252, 0.584054) ,
+      rgb (0.186213, 0.018803, 0.587228) ,
+      rgb (0.193374, 0.018354, 0.59033) ,
+      rgb (0.200445, 0.017902, 0.593364) ,
+      rgb (0.207435, 0.017442, 0.596333) ,
+      rgb (0.21435, 0.016973, 0.599239) ,
+      rgb (0.221197, 0.016497, 0.602083) ,
+      rgb (0.227983, 0.016007, 0.604867) ,
+      rgb (0.234715, 0.015502, 0.607592) ,
+      rgb (0.241396, 0.014979, 0.610259) ,
+      rgb (0.248032, 0.014439, 0.612868) ,
+      rgb (0.254627, 0.013882, 0.615419) ,
+      rgb (0.261183, 0.013308, 0.617911) ,
+      rgb (0.267703, 0.012716, 0.620346) ,
+      rgb (0.274191, 0.012109, 0.622722) ,
+      rgb (0.280648, 0.011488, 0.625038) ,
+      rgb (0.287076, 0.010855, 0.627295) ,
+      rgb (0.293478, 0.010213, 0.62949) ,
+      rgb (0.299855, 0.009561, 0.631624) ,
+      rgb (0.30621, 0.008902, 0.633694) ,
+      rgb (0.312543, 0.008239, 0.6357) ,
+      rgb (0.318856, 0.007576, 0.63764) ,
+      rgb (0.32515, 0.006915, 0.639512) ,
+      rgb (0.331426, 0.006261, 0.641316) ,
+      rgb (0.337683, 0.005618, 0.643049) ,
+      rgb (0.343925, 0.004991, 0.64471) ,
+      rgb (0.35015, 0.004382, 0.646298) ,
+      rgb (0.356359, 0.003798, 0.64781) ,
+      rgb (0.362553, 0.003243, 0.649245) ,
+      rgb (0.368733, 0.002724, 0.650601) ,
+      rgb (0.374897, 0.002245, 0.651876) ,
+      rgb (0.381047, 0.001814, 0.653068) ,
+      rgb (0.387183, 0.001434, 0.654177) ,
+      rgb (0.393304, 0.001114, 0.655199) ,
+      rgb (0.399411, 0.000859, 0.656133) ,
+      rgb (0.405503, 0.000678, 0.656977) ,
+      rgb (0.41158, 0.000577, 0.65773) ,
+      rgb (0.417642, 0.000564, 0.65839) ,
+      rgb (0.423689, 0.000646, 0.658956) ,
+      rgb (0.429719, 0.000831, 0.659425) ,
+      rgb (0.435734, 0.001127, 0.659797) ,
+      rgb (0.441732, 0.00154, 0.660069) ,
+      rgb (0.447714, 0.00208, 0.66024) ,
+      rgb (0.453677, 0.002755, 0.66031) ,
+      rgb (0.459623, 0.003574, 0.660277) ,
+      rgb (0.46555, 0.004545, 0.660139) ,
+      rgb (0.471457, 0.005678, 0.659897) ,
+      rgb (0.477344, 0.00698, 0.659549) ,
+      rgb (0.48321, 0.00846, 0.659095) ,
+      rgb (0.489055, 0.010127, 0.658534) ,
+      rgb (0.494877, 0.01199, 0.657865) ,
+      rgb (0.500678, 0.014055, 0.657088) ,
+      rgb (0.506454, 0.016333, 0.656202) ,
+      rgb (0.512206, 0.018833, 0.655209) ,
+      rgb (0.517933, 0.021563, 0.654109) ,
+      rgb (0.523633, 0.024532, 0.652901) ,
+      rgb (0.529306, 0.027747, 0.651586) ,
+      rgb (0.534952, 0.031217, 0.650165) ,
+      rgb (0.54057, 0.03495, 0.64864) ,
+      rgb (0.546157, 0.038954, 0.64701) ,
+      rgb (0.551715, 0.043136, 0.645277) ,
+      rgb (0.557243, 0.047331, 0.643443) ,
+      rgb (0.562738, 0.051545, 0.641509) ,
+      rgb (0.568201, 0.055778, 0.639477) ,
+      rgb (0.573632, 0.060028, 0.637349) ,
+      rgb (0.579029, 0.064296, 0.635126) ,
+      rgb (0.584391, 0.068579, 0.632812) ,
+      rgb (0.589719, 0.072878, 0.630408) ,
+      rgb (0.595011, 0.07719, 0.627917) ,
+      rgb (0.600266, 0.081516, 0.625342) ,
+      rgb (0.605485, 0.085854, 0.622686) ,
+      rgb (0.610667, 0.090204, 0.619951) ,
+      rgb (0.615812, 0.094564, 0.61714) ,
+      rgb (0.620919, 0.098934, 0.614257) ,
+      rgb (0.625987, 0.103312, 0.611305) ,
+      rgb (0.631017, 0.107699, 0.608287) ,
+      rgb (0.636008, 0.112092, 0.605205) ,
+      rgb (0.640959, 0.116492, 0.602065) ,
+      rgb (0.645872, 0.120898, 0.598867) ,
+      rgb (0.650746, 0.125309, 0.595617) ,
+      rgb (0.65558, 0.129725, 0.592317) ,
+      rgb (0.660374, 0.134144, 0.588971) ,
+      rgb (0.665129, 0.138566, 0.585582) ,
+      rgb (0.669845, 0.142992, 0.582154) ,
+      rgb (0.674522, 0.147419, 0.578688) ,
+      rgb (0.67916, 0.151848, 0.575189) ,
+      rgb (0.683758, 0.156278, 0.57166) ,
+      rgb (0.688318, 0.160709, 0.568103) ,
+      rgb (0.69284, 0.165141, 0.564522) ,
+      rgb (0.697324, 0.169573, 0.560919) ,
+      rgb (0.701769, 0.174005, 0.557296) ,
+      rgb (0.706178, 0.178437, 0.553657) ,
+      rgb (0.710549, 0.182868, 0.550004) ,
+      rgb (0.714883, 0.187299, 0.546338) ,
+      rgb (0.719181, 0.191729, 0.542663) ,
+      rgb (0.723444, 0.196158, 0.538981) ,
+      rgb (0.72767, 0.200586, 0.535293) ,
+      rgb (0.731862, 0.205013, 0.531601) ,
+      rgb (0.736019, 0.209439, 0.527908) ,
+      rgb (0.740143, 0.213864, 0.524216) ,
+      rgb (0.744232, 0.218288, 0.520524) ,
+      rgb (0.748289, 0.222711, 0.516834) ,
+      rgb (0.752312, 0.227133, 0.513149) ,
+      rgb (0.756304, 0.231555, 0.509468) ,
+      rgb (0.760264, 0.235976, 0.505794) ,
+      rgb (0.764193, 0.240396, 0.502126) ,
+      rgb (0.76809, 0.244817, 0.498465) ,
+      rgb (0.771958, 0.249237, 0.494813) ,
+      rgb (0.775796, 0.253658, 0.491171) ,
+      rgb (0.779604, 0.258078, 0.487539) ,
+      rgb (0.783383, 0.2625, 0.483918) ,
+      rgb (0.787133, 0.266922, 0.480307) ,
+      rgb (0.790855, 0.271345, 0.476706) ,
+      rgb (0.794549, 0.27577, 0.473117) ,
+      rgb (0.798216, 0.280197, 0.469538) ,
+      rgb (0.801855, 0.284626, 0.465971) ,
+      rgb (0.805467, 0.289057, 0.462415) ,
+      rgb (0.809052, 0.293491, 0.45887) ,
+      rgb (0.812612, 0.297928, 0.455338) ,
+      rgb (0.816144, 0.302368, 0.451816) ,
+      rgb (0.819651, 0.306812, 0.448306) ,
+      rgb (0.823132, 0.311261, 0.444806) ,
+      rgb (0.826588, 0.315714, 0.441316) ,
+      rgb (0.830018, 0.320172, 0.437836) ,
+      rgb (0.833422, 0.324635, 0.434366) ,
+      rgb (0.836801, 0.329105, 0.430905) ,
+      rgb (0.840155, 0.33358, 0.427455) ,
+      rgb (0.843484, 0.338062, 0.424013) ,
+      rgb (0.846788, 0.342551, 0.420579) ,
+      rgb (0.850066, 0.347048, 0.417153) ,
+      rgb (0.853319, 0.351553, 0.413734) ,
+      rgb (0.856547, 0.356066, 0.410322) ,
+      rgb (0.85975, 0.360588, 0.406917) ,
+      rgb (0.862927, 0.365119, 0.403519) ,
+      rgb (0.866078, 0.36966, 0.400126) ,
+      rgb (0.869203, 0.374212, 0.396738) ,
+      rgb (0.872303, 0.378774, 0.393355) ,
+      rgb (0.875376, 0.383347, 0.389976) ,
+      rgb (0.878423, 0.387932, 0.3866) ,
+      rgb (0.881443, 0.392529, 0.383229) ,
+      rgb (0.884436, 0.397139, 0.37986) ,
+      rgb (0.887402, 0.401762, 0.376494) ,
+      rgb (0.89034, 0.406398, 0.37313) ,
+      rgb (0.89325, 0.411048, 0.369768) ,
+      rgb (0.896131, 0.415712, 0.366407) ,
+      rgb (0.898984, 0.420392, 0.363047) ,
+      rgb (0.901807, 0.425087, 0.359688) ,
+      rgb (0.904601, 0.429797, 0.356329) ,
+      rgb (0.907365, 0.434524, 0.35297) ,
+      rgb (0.910098, 0.439268, 0.34961) ,
+      rgb (0.9128, 0.444029, 0.346251) ,
+      rgb (0.915471, 0.448807, 0.34289) ,
+      rgb (0.918109, 0.453603, 0.339529) ,
+      rgb (0.920714, 0.458417, 0.336166) ,
+      rgb (0.923287, 0.463251, 0.332801) ,
+      rgb (0.925825, 0.468103, 0.329435) ,
+      rgb (0.928329, 0.472975, 0.326067) ,
+      rgb (0.930798, 0.477867, 0.322697) ,
+      rgb (0.933232, 0.48278, 0.319325) ,
+      rgb (0.93563, 0.487712, 0.315952) ,
+      rgb (0.93799, 0.492667, 0.312575) ,
+      rgb (0.940313, 0.497642, 0.309197) ,
+      rgb (0.942598, 0.502639, 0.305816) ,
+      rgb (0.944844, 0.507658, 0.302433) ,
+      rgb (0.947051, 0.512699, 0.299049) ,
+      rgb (0.949217, 0.517763, 0.295662) ,
+      rgb (0.951344, 0.52285, 0.292275) ,
+      rgb (0.953428, 0.52796, 0.288883) ,
+      rgb (0.95547, 0.533093, 0.28549) ,
+      rgb (0.957469, 0.53825, 0.282096) ,
+      rgb (0.959424, 0.543431, 0.278701) ,
+      rgb (0.961336, 0.548636, 0.275305) ,
+      rgb (0.963203, 0.553865, 0.271909) ,
+      rgb (0.965024, 0.559118, 0.268513) ,
+      rgb (0.966798, 0.564396, 0.265118) ,
+      rgb (0.968526, 0.5697, 0.261721) ,
+      rgb (0.970205, 0.575028, 0.258325) ,
+      rgb (0.971835, 0.580382, 0.254931) ,
+      rgb (0.973416, 0.585761, 0.25154) ,
+      rgb (0.974947, 0.591165, 0.248151) ,
+      rgb (0.976428, 0.596595, 0.244767) ,
+      rgb (0.977856, 0.602051, 0.241387) ,
+      rgb (0.979233, 0.607532, 0.238013) ,
+      rgb (0.980556, 0.613039, 0.234646) ,
+      rgb (0.981826, 0.618572, 0.231287) ,
+      rgb (0.983041, 0.624131, 0.227937) ,
+      rgb (0.984199, 0.629718, 0.224595) ,
+      rgb (0.985301, 0.63533, 0.221265) ,
+      rgb (0.986345, 0.640969, 0.217948) ,
+      rgb (0.987332, 0.646633, 0.214648) ,
+      rgb (0.98826, 0.652325, 0.211364) ,
+      rgb (0.989128, 0.658043, 0.2081) ,
+      rgb (0.989935, 0.663787, 0.204859) ,
+      rgb (0.990681, 0.669558, 0.201642) ,
+      rgb (0.991365, 0.675355, 0.198453) ,
+      rgb (0.991985, 0.681179, 0.195295) ,
+      rgb (0.992541, 0.68703, 0.19217) ,
+      rgb (0.993032, 0.692907, 0.189084) ,
+      rgb (0.993456, 0.69881, 0.186041) ,
+      rgb (0.993814, 0.704741, 0.183043) ,
+      rgb (0.994103, 0.710698, 0.180097) ,
+      rgb (0.994324, 0.716681, 0.177208) ,
+      rgb (0.994474, 0.722691, 0.174381) ,
+      rgb (0.994553, 0.728728, 0.171622) ,
+      rgb (0.994561, 0.734791, 0.168938) ,
+      rgb (0.994495, 0.74088, 0.166335) ,
+      rgb (0.994355, 0.746995, 0.163821) ,
+      rgb (0.994141, 0.753137, 0.161404) ,
+      rgb (0.993851, 0.759304, 0.159092) ,
+      rgb (0.993482, 0.765499, 0.156891) ,
+      rgb (0.993033, 0.77172, 0.154808) ,
+      rgb (0.992505, 0.777967, 0.152855) ,
+      rgb (0.991897, 0.784239, 0.151042) ,
+      rgb (0.991209, 0.790537, 0.149377) ,
+      rgb (0.990439, 0.796859, 0.14787) ,
+      rgb (0.989587, 0.803205, 0.146529) ,
+      rgb (0.988648, 0.809579, 0.145357) ,
+      rgb (0.987621, 0.815978, 0.144363) ,
+      rgb (0.986509, 0.822401, 0.143557) ,
+      rgb (0.985314, 0.828846, 0.142945) ,
+      rgb (0.984031, 0.835315, 0.142528) ,
+      rgb (0.982653, 0.841812, 0.142303) ,
+      rgb (0.98119, 0.848329, 0.142279) ,
+      rgb (0.979644, 0.854866, 0.142453) ,
+      rgb (0.977995, 0.861432, 0.142808) ,
+      rgb (0.976265, 0.868016, 0.143351) ,
+      rgb (0.974443, 0.874622, 0.144061) ,
+      rgb (0.97253, 0.88125, 0.144923) ,
+      rgb (0.970533, 0.887896, 0.145919) ,
+      rgb (0.968443, 0.894564, 0.147014) ,
+      rgb (0.966271, 0.901249, 0.14818) ,
+      rgb (0.964021, 0.90795, 0.14937) ,
+      rgb (0.961681, 0.914672, 0.15052) ,
+      rgb (0.959276, 0.921407, 0.151566) ,
+      rgb (0.956808, 0.928152, 0.152409) ,
+      rgb (0.954287, 0.934908, 0.152921) ,
+      rgb (0.951726, 0.941671, 0.152925) ,
+      rgb (0.949151, 0.948435, 0.152178) ,
+      rgb (0.946602, 0.95519, 0.150328) ,
+      rgb (0.944152, 0.961916, 0.146861) ,
+      rgb (0.941896, 0.96859, 0.140956) ,
+      rgb (0.940015, 0.975158, 0.131326)
+      });
 
 
 list_data twilight = list_data(new pen[] {
-  rgb (0.8857501584075443, 0.8500092494306783, 0.8879736506427196) ,
-  rgb (0.8837852019553906, 0.8507294054031063, 0.8872322209694989) ,
-  rgb (0.8817223105928579, 0.8512759407765347, 0.8863805692551482) ,
-  rgb (0.8795410528270573, 0.8516567540749572, 0.8854143767924102) ,
-  rgb (0.8772488085896548, 0.8518702833887027, 0.8843412038131143) ,
-  rgb (0.8748534750857597, 0.8519152612302319, 0.8831692696761383) ,
-  rgb (0.8723313408512408, 0.8518016547808089, 0.8818970435500162) ,
-  rgb (0.8697047485350982, 0.8515240300479789, 0.8805388339000336) ,
-  rgb (0.8669601550533358, 0.8510896085314068, 0.8790976697717334) ,
-  rgb (0.86408985081464, 0.8505039116750779, 0.8775792578489263) ,
-  rgb (0.8611024543689985, 0.8497675485700126, 0.8759924292343957) ,
-  rgb (0.8579825924567037, 0.8488893481028184, 0.8743403855344628) ,
-  rgb (0.8547259318925698, 0.8478748812467282, 0.8726282980930582) ,
-  rgb (0.8513371457085719, 0.8467273579611647, 0.8708608165735044) ,
-  rgb (0.8478071070257792, 0.8454546229209523, 0.8690403678369444) ,
-  rgb (0.8441261828674842, 0.8440648271103739, 0.8671697332269007) ,
-  rgb (0.8403042080595778, 0.8425605950855084, 0.865250882410458) ,
-  rgb (0.8363403180919118, 0.8409479651895194, 0.8632852800107016) ,
-  rgb (0.8322270571293441, 0.8392349062775448, 0.8612756350042788) ,
-  rgb (0.8279689431601354, 0.837426007513952, 0.8592239945130679) ,
-  rgb (0.8235742968025285, 0.8355248776479544, 0.8571319132851495) ,
-  rgb (0.8190465467793753, 0.8335364929949034, 0.855002062870101) ,
-  rgb (0.8143898212114309, 0.8314655869419785, 0.8528375906214702) ,
-  rgb (0.8095999819094809, 0.8293189667350546, 0.8506444160105037) ,
-  rgb (0.8046916442981458, 0.8270983878056066, 0.8484244929697402) ,
-  rgb (0.79967075421268, 0.8248078181208093, 0.8461821002957853) ,
-  rgb (0.7945430508923111, 0.8224511622630462, 0.8439218478682798) ,
-  rgb (0.7893144556460892, 0.8200321318870201, 0.8416486380471222) ,
-  rgb (0.7839910104276492, 0.8175542640053343, 0.8393674746403673) ,
-  rgb (0.7785789200822759, 0.8150208937874255, 0.8370834463093898) ,
-  rgb (0.7730841659017094, 0.8124352473546601, 0.8348017295057968) ,
-  rgb (0.7675110850441786, 0.8098007598713145, 0.8325281663805967) ,
-  rgb (0.7618690793798029, 0.8071194938764749, 0.830266486168872) ,
-  rgb (0.7561644358438198, 0.8043940873347794, 0.8280213899472) ,
-  rgb (0.750403467654067, 0.8016269900896532, 0.8257973785108242) ,
-  rgb (0.7445924777189017, 0.7988204771958325, 0.8235986758615652) ,
-  rgb (0.7387377170049494, 0.7959766573503101, 0.8214292278043301) ,
-  rgb (0.7328454364552346, 0.7930974646884407, 0.8192926338423038) ,
-  rgb (0.726921775128297, 0.7901846863592763, 0.8171921746672638) ,
-  rgb (0.7209728066553678, 0.7872399592345264, 0.8151307392087926) ,
-  rgb (0.7150040307625213, 0.7842648709158119, 0.8131111655994991) ,
-  rgb (0.709020781345393, 0.7812608871607091, 0.8111359185511793) ,
-  rgb (0.7030297722540817, 0.7782290497335813, 0.8092061884805697) ,
-  rgb (0.6970365443886174, 0.7751705000806606, 0.8073233538006345) ,
-  rgb (0.691046410093091, 0.7720862946067809, 0.8054884169067907) ,
-  rgb (0.6850644615439593, 0.7689774029354699, 0.8037020626717691) ,
-  rgb (0.6790955449988215, 0.765844721313959, 0.8019646617300199) ,
-  rgb (0.6731442255942621, 0.7626890873389048, 0.8002762854580953) ,
-  rgb (0.6672147980375281, 0.7595112803730375, 0.7986367465453776) ,
-  rgb (0.6613112930078745, 0.7563120270871903, 0.7970456043491897) ,
-  rgb (0.6554369232645472, 0.7530920875676843, 0.7955027112903105) ,
-  rgb (0.6495957300425348, 0.7498520122194177, 0.7940067402149911) ,
-  rgb (0.6437910831099849, 0.7465923800833657, 0.7925565320130605) ,
-  rgb (0.6380258682854598, 0.7433137671403319, 0.7911510045957317) ,
-  rgb (0.6323027138710603, 0.740016721601314, 0.7897889276264043) ,
-  rgb (0.6266240202260459, 0.7367017540369944, 0.7884690131633456) ,
-  rgb (0.6209919306481755, 0.733369347989232, 0.7871899462469658) ,
-  rgb (0.6154084641177048, 0.7300199523273969, 0.7859502270675048) ,
-  rgb (0.6098754317609306, 0.7266539875975829, 0.7847483573269471) ,
-  rgb (0.6043943420027486, 0.7232718614323369, 0.7835829559353559) ,
-  rgb (0.5989665814482068, 0.7198739489224673, 0.7824525989934664) ,
-  rgb (0.5935933569683722, 0.7164606049658685, 0.781355882376401) ,
-  rgb (0.588275797805555, 0.7130321464645814, 0.7802914140563652) ,
-  rgb (0.5830148703693241, 0.7095888767699747, 0.7792578182047659) ,
-  rgb (0.5778116438998202, 0.7061310615715398, 0.7782534512102552) ,
-  rgb (0.5726668948158774, 0.7026589535425779, 0.7772770268091199) ,
-  rgb (0.5675811785386197, 0.6991727930264627, 0.776327485342753) ,
-  rgb (0.5625551535721934, 0.6956727838162965, 0.7754035914230984) ,
-  rgb (0.5575894041960517, 0.6921591145825405, 0.7745041337932782) ,
-  rgb (0.5526845058934713, 0.6886319451516638, 0.7736279426902245) ,
-  rgb (0.5478409815301863, 0.6850914221850988, 0.7727738647344087) ,
-  rgb (0.5430593242401823, 0.6815376725306588, 0.7719407969783508) ,
-  rgb (0.5383401557517628, 0.677970811290954, 0.7711273443905772) ,
-  rgb (0.533683891477284, 0.6743909370521273, 0.7703325054879735) ,
-  rgb (0.529090861832473, 0.6707981230280622, 0.7695555229231313) ,
-  rgb (0.5245615147059358, 0.6671924299614223, 0.7687954171423095) ,
-  rgb (0.5200962739223556, 0.6635739143403039, 0.768051194033441) ,
-  rgb (0.5156955988596057, 0.65994260812898, 0.7673219148959617) ,
-  rgb (0.5113599254160193, 0.6562985398183186, 0.7666066378064533) ,
-  rgb (0.5070896957645166, 0.6526417240314645, 0.7659044566083585) ,
-  rgb (0.5028853540415561, 0.6489721673409526, 0.7652144671817491) ,
-  rgb (0.4987473366135607, 0.6452898684900934, 0.7645357873418008) ,
-  rgb (0.4946761847863938, 0.6415948411950443, 0.7638671900213091) ,
-  rgb (0.4906722493856122, 0.6378870485884708, 0.7632081276316384) ,
-  rgb (0.4867359599430568, 0.6341664625110051, 0.7625578008592404) ,
-  rgb (0.4828677867260272, 0.6304330455306234, 0.761915371498953) ,
-  rgb (0.47906816236197386, 0.6266867625186013, 0.7612800037566242) ,
-  rgb (0.47533752394906287, 0.6229275728383581, 0.7606508557181775) ,
-  rgb (0.4716762951887709, 0.6191554324288464, 0.7600270922788305) ,
-  rgb (0.46808490970531597, 0.6153702869579029, 0.7594078989109274) ,
-  rgb (0.4645637671630393, 0.6115720882286415, 0.7587924262302581) ,
-  rgb (0.4611132664702388, 0.607760777169989, 0.7581798643680714) ,
-  rgb (0.45773377230160567, 0.6039363004658646, 0.7575693690185916) ,
-  rgb (0.45442563977552913, 0.6000985950385866, 0.7569601366060649) ,
-  rgb (0.45118918687617743, 0.5962476205135354, 0.7563512064324664) ,
-  rgb (0.4480247093358917, 0.5923833145214658, 0.7557417647410792) ,
-  rgb (0.4449324685421538, 0.5885055998308617, 0.7551311041857901) ,
-  rgb (0.441912717666964, 0.5846144110017557, 0.7545183888441067) ,
-  rgb (0.43896563958048396, 0.5807096924109849, 0.7539027620828594) ,
-  rgb (0.4360913895835637, 0.5767913799818608, 0.7532834105961016) ,
-  rgb (0.43329008867358393, 0.5728594162560667, 0.7526594653256667) ,
-  rgb (0.4305617907305757, 0.5689137457245718, 0.752030080993127) ,
-  rgb (0.42790652284925834, 0.5649543060909209, 0.7513944352191484) ,
-  rgb (0.42532423665011354, 0.560981049599503, 0.7507516498900512) ,
-  rgb (0.4228148567577266, 0.5569939212699658, 0.7501008698822764) ,
-  rgb (0.42037822361396326, 0.5529928715810817, 0.7494412559451894) ,
-  rgb (0.4180141407923363, 0.5489778542188889, 0.7487719316700112) ,
-  rgb (0.4157223260454232, 0.544948827153504, 0.7480920445900052) ,
-  rgb (0.4135024574331473, 0.5409057477109848, 0.7474007329754309) ,
-  rgb (0.4113541469730457, 0.5368485776500593, 0.7466971285506578) ,
-  rgb (0.4092768899914751, 0.5327773017713032, 0.7459803063570782) ,
-  rgb (0.4072701869421907, 0.5286918801105741, 0.7452494263758127) ,
-  rgb (0.4053334378930318, 0.5245922817498312, 0.7445036583670813) ,
-  rgb (0.40346600333905397, 0.5204784765384003, 0.7437421522356709) ,
-  rgb (0.40166714010896104, 0.5163504496968876, 0.7429640345324835) ,
-  rgb (0.39993606933454834, 0.5122081814321852, 0.7421684457131799) ,
-  rgb (0.3982719152586337, 0.5080516653927614, 0.7413545091809972) ,
-  rgb (0.3966737490566561, 0.5038808905384797, 0.7405213858051674) ,
-  rgb (0.3951405880820763, 0.4996958532637776, 0.7396682021171571) ,
-  rgb (0.39367135736822567, 0.4954965577745118, 0.738794102296364) ,
-  rgb (0.39226494876209317, 0.4912830033289926, 0.7378982478447508) ,
-  rgb (0.390920175719949, 0.4870552025122304, 0.7369797713388125) ,
-  rgb (0.38963580160340855, 0.48281316715123496, 0.7360378254693274) ,
-  rgb (0.3884105330084243, 0.47855691131792805, 0.7350715764115726) ,
-  rgb (0.3872430145933025, 0.4742864593363539, 0.7340801678785439) ,
-  rgb (0.386131841788921, 0.4700018340988123, 0.7330627749243106) ,
-  rgb (0.3850755679365139, 0.46570306719930193, 0.732018540336905) ,
-  rgb (0.38407269378943537, 0.46139018782416635, 0.7309466543290268) ,
-  rgb (0.3831216808440275, 0.457063235814072, 0.7298462679135326) ,
-  rgb (0.38222094988570376, 0.45272225034283325, 0.7287165614400378) ,
-  rgb (0.3813688793045416, 0.4483672766927786, 0.7275567131714135) ,
-  rgb (0.3805638069656562, 0.4439983720863372, 0.7263658704513531) ,
-  rgb (0.3798040374484875, 0.4396155882122263, 0.7251432377876109) ,
-  rgb (0.3790878928311076, 0.43521897612544935, 0.7238879869132313) ,
-  rgb (0.378413635091359, 0.43080859411413064, 0.7225993199306104) ,
-  rgb (0.3777794975351373, 0.4263845142616835, 0.7212763999353023) ,
-  rgb (0.3771837184425123, 0.4219468022345483, 0.7199184152447577) ,
-  rgb (0.37662448930806297, 0.41749553747893614, 0.7185245473617611) ,
-  rgb (0.37610001286385814, 0.4130307995247706, 0.7170939691992023) ,
-  rgb (0.375608469194424, 0.40855267638072096, 0.7156258509158755) ,
-  rgb (0.37514802505380473, 0.4040612609993941, 0.7141193695725726) ,
-  rgb (0.3747168601930223, 0.3995566498711684, 0.7125736851650046) ,
-  rgb (0.3743131319931234, 0.3950389482828331, 0.7109879652237746) ,
-  rgb (0.3739349933047578, 0.3905082752937583, 0.7093613429347845) ,
-  rgb (0.3735806215098284, 0.3859647438605754, 0.7076929760731058) ,
-  rgb (0.37324816143326384, 0.38140848555753937, 0.7059820097480604) ,
-  rgb (0.3729357864666503, 0.3768396383521984, 0.7042275578058994) ,
-  rgb (0.37264166757849604, 0.3722583500483685, 0.7024287314570723) ,
-  rgb (0.37236397858465387, 0.36766477862108266, 0.7005846349652077) ,
-  rgb (0.3721008970244382, 0.3630590973698238, 0.6986943461507372) ,
-  rgb (0.3718506155898596, 0.3584414828587522, 0.6967569581025654) ,
-  rgb (0.3716113323440048, 0.3538121372967869, 0.6947714991938089) ,
-  rgb (0.37138124223736607, 0.34917126878479027, 0.6927370347192883) ,
-  rgb (0.37115856636209105, 0.3445191141023017, 0.6906525358646499) ,
-  rgb (0.3709415155133733, 0.33985591488818123, 0.6885170337950512) ,
-  rgb (0.3707283327942267, 0.33518193808489577, 0.6863294816960677) ,
-  rgb (0.37051738634484427, 0.3304974124430785, 0.6840888878885721) ,
-  rgb (0.37030682071842685, 0.32580269697872455, 0.6817941168448668) ,
-  rgb (0.37009487130772695, 0.3210981375964933, 0.6794440539905685) ,
-  rgb (0.3698798032902536, 0.31638410101153364, 0.6770375543809057) ,
-  rgb (0.36965987626565955, 0.3116609876295197, 0.6745734474341955) ,
-  rgb (0.3694333459127623, 0.3069292355186234, 0.6720505284912062) ,
-  rgb (0.36919847837592484, 0.3021893217650707, 0.6694675433161452) ,
-  rgb (0.3689535530659678, 0.29744175492366276, 0.6668232208982426) ,
-  rgb (0.3686968223189527, 0.292687098561501, 0.6641162529823691) ,
-  rgb (0.36842655638020444, 0.2879259643777846, 0.661345269109446) ,
-  rgb (0.3681410147989972, 0.2831590122118299, 0.6585088880697231) ,
-  rgb (0.3678384369653108, 0.2783869718129776, 0.655605668384537) ,
-  rgb (0.36751707094367697, 0.2736106331709098, 0.6526341171161864) ,
-  rgb (0.36717513650699446, 0.26883085667326956, 0.6495927229789225) ,
-  rgb (0.3668108554010799, 0.26404857724525643, 0.6464799165290824) ,
-  rgb (0.3664224325155063, 0.25926481158628106, 0.6432940914076554) ,
-  rgb (0.36600853966739794, 0.25448043878086224, 0.6400336180336859) ,
-  rgb (0.3655669837353898, 0.24969683475296395, 0.6366967518748858) ,
-  rgb (0.3650957984588681, 0.24491536803550484, 0.6332817352005559) ,
-  rgb (0.3645930889012501, 0.24013747024823828, 0.629786801550261) ,
-  rgb (0.3640569302208851, 0.23536470386204195, 0.6262101345195302) ,
-  rgb (0.36348537610385145, 0.2305987621839642, 0.6225498862239288) ,
-  rgb (0.3628764356004103, 0.2258414929328703, 0.6188041741082302) ,
-  rgb (0.36222809558295926, 0.22109488427338303, 0.6149711234609613) ,
-  rgb (0.36153829010998356, 0.21636111429594002, 0.6110488067964093) ,
-  rgb (0.36080493826624654, 0.21164251793458128, 0.6070353217206471) ,
-  rgb (0.36002681809096376, 0.20694122817889948, 0.6029284543191687) ,
-  rgb (0.35920088560930186, 0.20226037920758122, 0.5987265295935138) ,
-  rgb (0.3583248996661781, 0.197602942459778, 0.5944276851750107) ,
-  rgb (0.35739663292915563, 0.1929720819784246, 0.5900301125106313) ,
-  rgb (0.35641381143126327, 0.18837119869242164, 0.5855320765920552) ,
-  rgb (0.3553741530690672, 0.18380392577704466, 0.580931914318328) ,
-  rgb (0.3542753496066376, 0.17927413271618647, 0.5762280966066872) ,
-  rgb (0.35311574421123737, 0.17478570377561287, 0.5714187152355529) ,
-  rgb (0.3518924860887379, 0.17034320478524959, 0.5665028491121665) ,
-  rgb (0.3506030444193101, 0.1659512998472086, 0.5614796470399323) ,
-  rgb (0.34924513554955644, 0.16161477763045118, 0.5563483747416378) ,
-  rgb (0.3478165323877778, 0.1573386351115298, 0.5511085345270326) ,
-  rgb (0.3463150717579309, 0.15312802296627787, 0.5457599924248665) ,
-  rgb (0.34473901574536375, 0.1489882058982641, 0.5403024592040654) ,
-  rgb (0.34308600291572294, 0.14492465359918028, 0.534737042820671) ,
-  rgb (0.34135411074506483, 0.1409427920655632, 0.5290650094033675) ,
-  rgb (0.33954168752669694, 0.1370480189671817, 0.5232879753508524) ,
-  rgb (0.3376473209067111, 0.13324562282438077, 0.5174080757397947) ,
-  rgb (0.33566978565015315, 0.12954074251271822, 0.5114280721516895) ,
-  rgb (0.33360804901486, 0.1259381830100592, 0.505351647966549) ,
-  rgb (0.33146154891145124, 0.12244245263391232, 0.4991827458843107) ,
-  rgb (0.3292300520323141, 0.11905764321981127, 0.49292595612342666) ,
-  rgb (0.3269137124539796, 0.1157873496841953, 0.4865864649569746) ,
-  rgb (0.32451307931207785, 0.11263459791730848, 0.48017007211645196) ,
-  rgb (0.3220288227606932, 0.10960114111258401, 0.4736849472572688) ,
-  rgb (0.31946262395497965, 0.1066887988239266, 0.46713728801395243) ,
-  rgb (0.316816480890235, 0.10389861387653518, 0.46053414662739794) ,
-  rgb (0.3140927841475553, 0.10123077676403242, 0.45388335612058467) ,
-  rgb (0.31129434479712365, 0.0986847719340522, 0.4471931371516162) ,
-  rgb (0.30842444457210105, 0.09625938534057774, 0.44047194882050544) ,
-  rgb (0.30548675819945936, 0.09395276484082374, 0.4337284999936111) ,
-  rgb (0.3024853636457425, 0.0917611873973036, 0.42697404043749887) ,
-  rgb (0.2994248396021477, 0.08968225371675004, 0.42021619665853854) ,
-  rgb (0.2963100038890529, 0.08771325096046395, 0.41346259134143476) ,
-  rgb (0.2931459309698525, 0.08585065688962071, 0.40672178082365834) ,
-  rgb (0.2899379244517661, 0.08409078829085731, 0.40000214725256295) ,
-  rgb (0.28669151388283165, 0.08242987384848069, 0.39331182532243375) ,
-  rgb (0.28341239797185225, 0.08086415336549937, 0.38665868550105914) ,
-  rgb (0.2801063857697547, 0.07938999480226153, 0.38005028528138707) ,
-  rgb (0.2767793961581559, 0.07800394103378822, 0.37349382846504675) ,
-  rgb (0.2734373934245081, 0.07670280023749607, 0.36699616136347685) ,
-  rgb (0.2700863774911405, 0.07548367558427554, 0.36056376228111864) ,
-  rgb (0.26673233211995284, 0.0743440180285462, 0.3542027606624096) ,
-  rgb (0.26338121807151404, 0.07328165793989708, 0.34791888996380105) ,
-  rgb (0.26003895187439957, 0.0722947810433622, 0.3417175669546984) ,
-  rgb (0.256711916510839, 0.07138010624208224, 0.3356064898460009) ,
-  rgb (0.25340685873736807, 0.07053358292685183, 0.3295945757321303) ,
-  rgb (0.2501284530619938, 0.06975820642910699, 0.32368100685760637) ,
-  rgb (0.24688226237959, 0.06905363944920445, 0.31786993834254956) ,
-  rgb (0.24367372557466271, 0.06841985515092269, 0.3121652405088837) ,
-  rgb (0.2405081333229594, 0.0678571038148556, 0.3065705449367832) ,
-  rgb (0.23739062429054825, 0.06736588805055552, 0.3010892218406587) ,
-  rgb (0.23433055727563878, 0.0669355996616394, 0.295740099298676) ,
-  rgb (0.23132955273021344, 0.06657618693909059, 0.29051361067988485) ,
-  rgb (0.2283917709422868, 0.06628997924139618, 0.28541074411068496) ,
-  rgb (0.22552164337737857, 0.0660781731193956, 0.28043398847505197) ,
-  rgb (0.22272706739121817, 0.06593379067565194, 0.275597146520537) ,
-  rgb (0.22001251100779617, 0.0658579189189076, 0.2709027999432586) ,
-  rgb (0.21737845072382705, 0.06585966123356204, 0.2663420934966951) ,
-  rgb (0.21482843531473683, 0.06594038561377849, 0.26191675992376573) ,
-  rgb (0.21237411048541005, 0.06608502466175845, 0.2576516509356954) ,
-  rgb (0.21001214221188125, 0.06630857391894718, 0.2535289048041211) ,
-  rgb (0.2077442377448806, 0.06661453200418091, 0.24954644291943817) ,
-  rgb (0.20558051999470117, 0.06699046239786874, 0.24572497420147632) ,
-  rgb (0.20352007949514977, 0.06744417961242422, 0.24205576625191821) ,
-  rgb (0.2015613376412984, 0.06798327102620025, 0.23852974228695395) ,
-  rgb (0.19971571438603364, 0.06859271055370472, 0.23517094067076993) ,
-  rgb (0.19794834061899208, 0.06931406607166066, 0.23194647381302336) ,
-  rgb (0.1960826032659409, 0.07032122724242362, 0.22874673279569585) ,
-  rgb (0.19410351363791453, 0.07160830485689157, 0.22558727307410353) ,
-  rgb (0.19199449184606268, 0.0731828306492733, 0.22243385243433622) ,
-  rgb (0.18975853639094634, 0.07501986186214377, 0.2193005075652994) ,
-  rgb (0.18739228342697645, 0.07710209689958833, 0.21618875376309582) ,
-  rgb (0.18488035509396164, 0.07942573027972388, 0.21307651648984993) ,
-  rgb (0.18774482037046955, 0.07725158846803931, 0.21387448578597812) ,
-  rgb (0.19049578401722037, 0.07531127841678764, 0.2146562337112265) ,
-  rgb (0.1931548636579131, 0.07360681904011795, 0.21542362939081539) ,
-  rgb (0.19571853588267552, 0.07215778103960274, 0.21617499187076789) ,
-  rgb (0.19819343656336558, 0.07097462525273879, 0.21690975060032436) ,
-  rgb (0.20058760685133747, 0.07006457614998421, 0.21762721310371608) ,
-  rgb (0.20290365333558247, 0.06943524858045896, 0.21833167885096033) ,
-  rgb (0.20531725273301316, 0.06891959226639757, 0.21911516689288835) ,
-  rgb (0.20785704662965598, 0.06848439879702528, 0.22000133917653536) ,
-  rgb (0.21052882914958676, 0.06812195249816172, 0.22098759107715404) ,
-  rgb (0.2133313859647627, 0.06783014842602667, 0.2220704321302429) ,
-  rgb (0.21625279838647882, 0.06761633027051639, 0.22324568672294431) ,
-  rgb (0.21930503925136402, 0.06746578636294004, 0.22451023616807558) ,
-  rgb (0.22247308588973624, 0.06738821405309284, 0.22585960379408354) ,
-  rgb (0.2257539681670791, 0.06738213230014747, 0.22728984778098055) ,
-  rgb (0.2291562027859284, 0.06743473087115257, 0.22879681433956656) ,
-  rgb (0.23266299920501882, 0.06755710438847978, 0.23037617493752832) ,
-  rgb (0.23627495835774248, 0.06774359820987802, 0.23202360805926608) ,
-  rgb (0.23999586188690308, 0.06798502996477995, 0.23373434258507808) ,
-  rgb (0.2438114972024792, 0.06828985152901187, 0.23550427698321885) ,
-  rgb (0.247720929905011, 0.06865333790948652, 0.2373288009471749) ,
-  rgb (0.25172899728289466, 0.0690646308260355, 0.23920260612763083) ,
-  rgb (0.2558213554748177, 0.06953231029187984, 0.24112190491594204) ,
-  rgb (0.25999463887892144, 0.07005385560386188, 0.24308218808684579) ,
-  rgb (0.2642551220706094, 0.07061659562299544, 0.24507758869355967) ,
-  rgb (0.2685909594817286, 0.07122671627792246, 0.24710443563450618) ,
-  rgb (0.272997015188973, 0.07188355544616351, 0.2491584709323293) ,
-  rgb (0.277471508091428, 0.07258296989925478, 0.2512349399594277) ,
-  rgb (0.2820174629736694, 0.07331569321404097, 0.25332800295084507) ,
-  rgb (0.28662309235899847, 0.07408846082680887, 0.2554347867371703) ,
-  rgb (0.29128515387578635, 0.0748990498474667, 0.25755101595750435) ,
-  rgb (0.2960004726065818, 0.07574533600095842, 0.25967245030364566) ,
-  rgb (0.3007727681291869, 0.07661782433616476, 0.2617929409781967) ,
-  rgb (0.30559226007249934, 0.07752196310753731, 0.2639100669211966) ,
-  rgb (0.31045520848595526, 0.07845687167618218, 0.2660200572779356) ,
-  rgb (0.3153587000920581, 0.07942099731524319, 0.2681190407694196) ,
-  rgb (0.3202998655799406, 0.08041299473755484, 0.2702032289303951) ,
-  rgb (0.3252788886040126, 0.08142839007654609, 0.27226772884656186) ,
-  rgb (0.3302917447118144, 0.08246763389003825, 0.27430929404579435) ,
-  rgb (0.3353335322445545, 0.08353243411900396, 0.2763253435679004) ,
-  rgb (0.34040164359597463, 0.08462223619170267, 0.27831254595259397) ,
-  rgb (0.345493557138718, 0.08573665496512634, 0.28026769921081435) ,
-  rgb (0.3506067824603248, 0.08687555176033529, 0.28218770540182386) ,
-  rgb (0.35573889947341125, 0.08803897435024335, 0.2840695897279818) ,
-  rgb (0.36088752387578377, 0.0892271943627452, 0.28591050458531014) ,
-  rgb (0.36605031412464006, 0.0904406854276979, 0.2877077458811747) ,
-  rgb (0.3712250843130934, 0.09167999748026273, 0.2894586539763317) ,
-  rgb (0.3764103053221462, 0.09294519809377791, 0.2911602415731392) ,
-  rgb (0.38160247377467543, 0.09423873126371218, 0.2928110750626949) ,
-  rgb (0.3867993907954417, 0.09556181960083443, 0.29440901248173756) ,
-  rgb (0.39199887556812907, 0.09691583650296684, 0.2959521200550908) ,
-  rgb (0.39719876876325577, 0.09830232096827862, 0.2974385647628578) ,
-  rgb (0.40239692379737496, 0.09972293031495055, 0.2988667436973397) ,
-  rgb (0.4075912039268871, 0.10117945586419633, 0.300235195077286) ,
-  rgb (0.41277985630360303, 0.1026734006932461, 0.3015422643746897) ,
-  rgb (0.41796105205173684, 0.10420644885760968, 0.3027865203963184) ,
-  rgb (0.42313214269556043, 0.10578120994917611, 0.3039675809469457) ,
-  rgb (0.4282910131578975, 0.1073997763055258, 0.30508479060294547) ,
-  rgb (0.4334355841041439, 0.1090642347484701, 0.3061376792828915) ,
-  rgb (0.4385637818793154, 0.11077667828375456, 0.30712600062348083) ,
-  rgb (0.44367358645071275, 0.11253912421257944, 0.3080497309546545) ,
-  rgb (0.4487629917317482, 0.1143535557462255, 0.30890905921943196) ,
-  rgb (0.4538300508699989, 0.11622183788331528, 0.3097044124984492) ,
-  rgb (0.45887288947308297, 0.11814571137706886, 0.3104363697903881) ,
-  rgb (0.46389102840284874, 0.12012561256850712, 0.31110343446582983) ,
-  rgb (0.46888111384598413, 0.12216445576414045, 0.31170911458932665) ,
-  rgb (0.473841437035254, 0.12426354237989065, 0.31225470169927194) ,
-  rgb (0.47877034239726296, 0.12642401401409453, 0.3127417273582196) ,
-  rgb (0.48366628618847957, 0.1286467902201389, 0.31317188565991266) ,
-  rgb (0.48852847371852987, 0.13093210934893723, 0.31354553695453014) ,
-  rgb (0.49335504375145617, 0.13328091630401023, 0.31386561956734976) ,
-  rgb (0.4981443546207415, 0.13569380302451714, 0.314135190862664) ,
-  rgb (0.5028952497497061, 0.13817086581280427, 0.3143566215383367) ,
-  rgb (0.5076068118105369, 0.14071192654913128, 0.3145320012008257) ,
-  rgb (0.5122783510532176, 0.14331656120063752, 0.3146630922831542) ,
-  rgb (0.5169084880054446, 0.14598463068714407, 0.3147540759228004) ,
-  rgb (0.5214965286322996, 0.14871544765633712, 0.3148076795453443) ,
-  rgb (0.5260418962547748, 0.15150818660835483, 0.31482653406646727) ,
-  rgb (0.5305442048985645, 0.15436183633886777, 0.3148129978918713) ,
-  rgb (0.5350027976174474, 0.15727540775107324, 0.3147708520739653) ,
-  rgb (0.5394173664919906, 0.16024769309971934, 0.31470295028655965) ,
-  rgb (0.5437877131360856, 0.16327738551419116, 0.31461204226295625) ,
-  rgb (0.5481137003346762, 0.1663630904279047, 0.3145010299091471) ,
-  rgb (0.5523952157271191, 0.16950338809328983, 0.3143729155461537) ,
-  rgb (0.5566322903496934, 0.17269677158182117, 0.31423043195101424) ,
-  rgb (0.5608249903911717, 0.17594170887918095, 0.31407639883970623) ,
-  rgb (0.564973435290177, 0.17923664950367169, 0.3139136046337036) ,
-  rgb (0.5690778478401143, 0.18258004462335425, 0.3137444095679653) ,
-  rgb (0.5731384575410787, 0.18597036007065024, 0.3135712686852) ,
-  rgb (0.5771555081299204, 0.18940601489760422, 0.3133970433357208) ,
-  rgb (0.5811293276158656, 0.19288548904692518, 0.3132239939418394) ,
-  rgb (0.5850602439646688, 0.19640737049066315, 0.3130540116373273) ,
-  rgb (0.5889486193554471, 0.19997020971775276, 0.31288922211590126) ,
-  rgb (0.5927948053652026, 0.20357251410079796, 0.3127323483930494) ,
-  rgb (0.5965991810912237, 0.207212956082026, 0.3125852303112123) ,
-  rgb (0.6003621301041158, 0.21089030138947745, 0.3124493441041469) ,
-  rgb (0.6040840169673274, 0.21460331490206347, 0.31232652641170694) ,
-  rgb (0.6077652399481865, 0.21835070166659282, 0.312219032918702) ,
-  rgb (0.6114062072731884, 0.22213124697023234, 0.3121288139643524) ,
-  rgb (0.6150072323639137, 0.22594402043981826, 0.3120568068576574) ,
-  rgb (0.6185686525887719, 0.2297879924917992, 0.3120046383872893) ,
-  rgb (0.6220907982108261, 0.2336621873300741, 0.3119738327362739) ,
-  rgb (0.6255741650043496, 0.23756535071152696, 0.3119669831491227) ,
-  rgb (0.6290189201698587, 0.24149689191922535, 0.3119844719564572) ,
-  rgb (0.6324253485421027, 0.24545598775548677, 0.3120276597462445) ,
-  rgb (0.6357937104834237, 0.24944185818822678, 0.3120979395330059) ,
-  rgb (0.6391243387840212, 0.2534536546198314, 0.3121968961206398) ,
-  rgb (0.642417577481186, 0.257490519876798, 0.31232631707560987) ,
-  rgb (0.6456734938264543, 0.2615520316161528, 0.31248673753935263) ,
-  rgb (0.6488923016945825, 0.2656375533620908, 0.3126794181957019) ,
-  rgb (0.652074172902773, 0.269746505252367, 0.3129056060581917) ,
-  rgb (0.6552193260932713, 0.2738782665241015, 0.3131666792687211) ,
-  rgb (0.6583280801134499, 0.2780321095766563, 0.3134643447952643) ,
-  rgb (0.6614003753260178, 0.28220778870555907, 0.3137991292649849) ,
-  rgb (0.6644363246987884, 0.2864048361425618, 0.31417223403606975) ,
-  rgb (0.6674360376636913, 0.29062280081258873, 0.31458483752056837) ,
-  rgb (0.670399595476762, 0.29486126309253047, 0.3150381395687221) ,
-  rgb (0.6733272556481733, 0.29911962764489264, 0.3155337232398221) ,
-  rgb (0.6762189792440975, 0.30339762792450425, 0.3160724937230589) ,
-  rgb (0.6790747402815734, 0.30769497879760166, 0.31665545668946665) ,
-  rgb (0.6818945715094452, 0.31201133280550686, 0.3172838048924495) ,
-  rgb (0.6846785094249453, 0.3163463482122221, 0.31795870784057567) ,
-  rgb (0.6874265643516962, 0.32069970535138104, 0.3186813762227769) ,
-  rgb (0.6901389321505248, 0.32507091815606004, 0.319453323328983) ,
-  rgb (0.6928154484676493, 0.32945984647042675, 0.3202754315314667) ,
-  rgb (0.6954560834689112, 0.33386622163232865, 0.3211488430698579) ,
-  rgb (0.6980608153581771, 0.3382897632604862, 0.3220747885521809) ,
-  rgb (0.700629624772421, 0.34273019305341756, 0.32305449047765694) ,
-  rgb (0.7031624945881415, 0.34718723719598, 0.32408913679491225) ,
-  rgb (0.7056595112261009, 0.3516605297812094, 0.32518014084085567) ,
-  rgb (0.7081205956842048, 0.356149855233803, 0.32632861885644465) ,
-  rgb (0.7105456546582587, 0.36065500290840113, 0.3275357416278876) ,
-  rgb (0.7129346683977347, 0.36517570519856757, 0.3288027427038317) ,
-  rgb (0.7152876061484729, 0.3697117022522345, 0.3301308728723546) ,
-  rgb (0.7176044490813385, 0.3742627271068619, 0.3315213862095893) ,
-  rgb (0.7198852149054985, 0.37882848839337313, 0.332975552002454) ,
-  rgb (0.7221299918421461, 0.3834086450896306, 0.33449469983585844) ,
-  rgb (0.7243386564778159, 0.38800301593162145, 0.3360799596569183) ,
-  rgb (0.7265112290022755, 0.3926113126792577, 0.3377325942005665) ,
-  rgb (0.7286477385671655, 0.39723324476747235, 0.33945384341064017) ,
-  rgb (0.7307482075484517, 0.401868526884681, 0.3412449533046818) ,
-  rgb (0.7328127050626875, 0.4065168468778026, 0.3431071517341082) ,
-  rgb (0.7348413359856494, 0.4111778700451951, 0.3450416947080907) ,
-  rgb (0.7368342217358587, 0.4158512585029011, 0.347049785207584) ,
-  rgb (0.7387914002459927, 0.4205367299231533, 0.34913260148542435) ,
-  rgb (0.7407130161950609, 0.4252339389526239, 0.35129130890802607) ,
-  rgb (0.7425992159973317, 0.42994254036133867, 0.3535270924537459) ,
-  rgb (0.7444501867657067, 0.4346621718461711, 0.35584108091122535) ,
-  rgb (0.7462661578916344, 0.439392450449735, 0.3582343914230064) ,
-  rgb (0.7480473927555956, 0.44413297780351974, 0.36070813602540136) ,
-  rgb (0.7497942054717047, 0.4488833348154881, 0.3632633755836028) ,
-  rgb (0.7515068504589166, 0.45364314496866825, 0.36590112443835765) ,
-  rgb (0.7531856636904657, 0.45841199172949604, 0.3686223664223477) ,
-  rgb (0.7548310506695954, 0.46318942799460555, 0.3714280448394211) ,
-  rgb (0.7564434157714071, 0.4679750143794846, 0.37431909037543515) ,
-  rgb (0.7580232553845584, 0.4727682731566229, 0.3772963553109668) ,
-  rgb (0.7595711110534006, 0.4775687122205708, 0.380360657784311) ,
-  rgb (0.7610876378057071, 0.48237579130289127, 0.3835127572385229) ,
-  rgb (0.7625733355405261, 0.48718906673415824, 0.38675335037837993) ,
-  rgb (0.7640288560928866, 0.49200802533379656, 0.39008308392311997) ,
-  rgb (0.7654549259333051, 0.4968321290972723, 0.3935025400011538) ,
-  rgb (0.7668522895064389, 0.5016608471009063, 0.39701221751773474) ,
-  rgb (0.768221765997353, 0.5064936237128791, 0.40061257089416885) ,
-  rgb (0.7695642334401418, 0.5113298901696085, 0.4043039806968248) ,
-  rgb (0.7708809196230247, 0.516168926434691, 0.40808667584648967) ,
-  rgb (0.7721725722960555, 0.5210102658711383, 0.4119608998712287) ,
-  rgb (0.7734402182988989, 0.5258533209345156, 0.41592679539764366) ,
-  rgb (0.774684947460632, 0.5306974938477673, 0.4199844035696376) ,
-  rgb (0.775907907306857, 0.5355421788246119, 0.42413367909988375) ,
-  rgb (0.7771103295521099, 0.5403867491056124, 0.4283745037125848) ,
-  rgb (0.7782934580763312, 0.545230594884266, 0.432706647838971) ,
-  rgb (0.7794586273150664, 0.5500730841397727, 0.4371297985644476) ,
-  rgb (0.7806077474948377, 0.5549133574489061, 0.4416433242636464) ,
-  rgb (0.7817418047898184, 0.5597509805259486, 0.44624687186865436) ,
-  rgb (0.7828622526444091, 0.5645853311116688, 0.45093985823706345) ,
-  rgb (0.7839706083641448, 0.5694157832671042, 0.4557215474289206) ,
-  rgb (0.7850684501960684, 0.5742417003617839, 0.46059116206904965) ,
-  rgb (0.7861573713233296, 0.5790624629815756, 0.465547782819184) ,
-  rgb (0.7872390410818835, 0.5838774374455721, 0.47059039582133383) ,
-  rgb (0.7883151404562396, 0.5886860017356244, 0.4757179187907608) ,
-  rgb (0.7893873776625194, 0.5934875421745599, 0.48092913815357724) ,
-  rgb (0.7904577684772788, 0.5982813427706246, 0.48622257801969754) ,
-  rgb (0.7915283284347561, 0.603066705931472, 0.49159667021646397) ,
-  rgb (0.7926003430423745, 0.6078432208703702, 0.4970502062153201) ,
-  rgb (0.7936755969866496, 0.6126102933407219, 0.5025816129126943) ,
-  rgb (0.7947558597265404, 0.617367344002207, 0.5081892121310299) ,
-  rgb (0.7958429237958377, 0.6221137880845115, 0.5138712409190979) ,
-  rgb (0.7969385471995161, 0.626849056792967, 0.5196258425240281) ,
-  rgb (0.7980444781513664, 0.6315725822508955, 0.5254510814483478) ,
-  rgb (0.7991624518501963, 0.6362837937202919, 0.5313449594256143) ,
-  rgb (0.8002941538975398, 0.6409821330674986, 0.5373053518514104) ,
-  rgb (0.8014412429256005, 0.6456670345921877, 0.5433300863249918) ,
-  rgb (0.8026053114611295, 0.6503379374810385, 0.5494169158460365) ,
-  rgb (0.8037879253107763, 0.6549942654947263, 0.5555635086708381) ,
-  rgb (0.804990547908103, 0.6596354502756416, 0.5617674511054698) ,
-  rgb (0.8062146052692706, 0.6642608958528229, 0.5680262917864979) ,
-  rgb (0.8074614045096935, 0.6688700095398864, 0.5743374637345958) ,
-  rgb (0.8087321917008969, 0.6734621670219452, 0.5806983480557674) ,
-  rgb (0.8100280946652069, 0.6780367267397182, 0.5871062690808275) ,
-  rgb (0.8113501401176333, 0.6825930154624339, 0.5935584890905076) ,
-  rgb (0.8126992203988149, 0.6871303371461888, 0.600052148204351) ,
-  rgb (0.8140761104699334, 0.6916479479148213, 0.6065843782630862) ,
-  rgb (0.8154814662727948, 0.6961450550830809, 0.6131522120932265) ,
-  rgb (0.8169157577505589, 0.7006208301478398, 0.6197526063725792) ,
-  rgb (0.8183793116449822, 0.705074381896351, 0.626382454789333) ,
-  rgb (0.8198723065045529, 0.7095047497878748, 0.6330385704006711) ,
-  rgb (0.8213947205565636, 0.7139109141951604, 0.6397176669767276) ,
-  rgb (0.8229463511042843, 0.7182917733129006, 0.6464164243818421) ,
-  rgb (0.8245268129450285, 0.7226461431208888, 0.653131379154226) ,
-  rgb (0.8261354971058026, 0.7269727551823826, 0.659859001562165) ,
-  rgb (0.8277716072353446, 0.7312702332407809, 0.6665957020468297) ,
-  rgb (0.8294340781648147, 0.7355371221572935, 0.6733377200930191) ,
-  rgb (0.8311216352909631, 0.7397718464763862, 0.6800812520363146) ,
-  rgb (0.8328327718577798, 0.7439727181745988, 0.6868223587464855) ,
-  rgb (0.8345656905566583, 0.7481379479992134, 0.6935569764986385) ,
-  rgb (0.8363189884473793, 0.7522654895287526, 0.7002799902886496) ,
-  rgb (0.8380912347613196, 0.7563531486080863, 0.7069856139021298) ,
-  rgb (0.8398783988412087, 0.7603990719977968, 0.7136714781112923) ,
-  rgb (0.8416775076684515, 0.7644010120098295, 0.7203329938728462) ,
-  rgb (0.843485292229337, 0.7683566039987018, 0.7269653699897204) ,
-  rgb (0.8452981073195511, 0.7722633860104472, 0.7335636824054149) ,
-  rgb (0.847111955079651, 0.7761188023604716, 0.7401227576280706) ,
-  rgb (0.8489224556311764, 0.7799202140765015, 0.7466371929366437) ,
-  rgb (0.8507269702317879, 0.7836645734238389, 0.7530974636118285) ,
-  rgb (0.8525190720770844, 0.7873493613354844, 0.7594994148789691) ,
-  rgb (0.8542921961147046, 0.7909719677709199, 0.765838014779141) ,
-  rgb (0.856040223147254, 0.7945296360155061, 0.7721061003767414) ,
-  rgb (0.857756629435049, 0.7980196314271393, 0.778295716672475) ,
-  rgb (0.8594346370300241, 0.8014392309950078, 0.7843978875138392) ,
-  rgb (0.8610711702756552, 0.8047851790981223, 0.7903952966373629) ,
-  rgb (0.8626560105112757, 0.8080552380426153, 0.796282666437655) ,
-  rgb (0.8641834372394103, 0.8112464422465354, 0.8020461269686395) ,
-  rgb (0.8656493432560532, 0.8143554406751491, 0.8076697232416455) ,
-  rgb (0.867053149070485, 0.8173780404191124, 0.813134196269114) ,
-  rgb (0.8683995469581863, 0.8203087551218152, 0.8184163896312899) ,
-  rgb (0.8696913150261381, 0.8231415885956916, 0.8235047668317317) ,
-  rgb (0.8709384671729751, 0.8258685788943851, 0.8283849726114961) ,
-  rgb (0.8721533197845432, 0.8284805282370967, 0.8330486712880828) ,
-  rgb (0.8733517136091627, 0.8309671525127262, 0.8374885100119709) ,
-  rgb (0.8745379332026019, 0.8333197294864546, 0.8417192535806901) ,
-  rgb (0.875714587099614, 0.8355302318472394, 0.8457553751902708) ,
-  rgb (0.8768784845161469, 0.8375923807118654, 0.8496137354915025) ,
-  rgb (0.8780229843664901, 0.8395016561854007, 0.8533064535245892) ,
-  rgb (0.8791324424079277, 0.8412555488447591, 0.8568557229103964) ,
-  rgb (0.8801929331569581, 0.8428522482477862, 0.8602739992715663) ,
-  rgb (0.8811916987134195, 0.8442906671771735, 0.8635659516866988) ,
-  rgb (0.8821154248940161, 0.8455700725455935, 0.8667376504623333) ,
-  rgb (0.8829516859544853, 0.8466897027569927, 0.8697961704819097) ,
-  rgb (0.8836912714589804, 0.8476489176151927, 0.8727414710144156) ,
-  rgb (0.8843271305411354, 0.8484474157205542, 0.8755678522824297) ,
-  rgb (0.8848513815990857, 0.849084264228938, 0.8782823528537247) ,
-  rgb (0.8852589797263047, 0.8495589281098921, 0.8808841479402484) ,
-  rgb (0.8855471481195238, 0.8498717428363158, 0.8833620612117095) ,
-  rgb (0.8857115512284565, 0.8500218611585632, 0.8857253899008712)
-});
+    rgb (0.8857501584075443, 0.8500092494306783, 0.8879736506427196) ,
+      rgb (0.8837852019553906, 0.8507294054031063, 0.8872322209694989) ,
+      rgb (0.8817223105928579, 0.8512759407765347, 0.8863805692551482) ,
+      rgb (0.8795410528270573, 0.8516567540749572, 0.8854143767924102) ,
+      rgb (0.8772488085896548, 0.8518702833887027, 0.8843412038131143) ,
+      rgb (0.8748534750857597, 0.8519152612302319, 0.8831692696761383) ,
+      rgb (0.8723313408512408, 0.8518016547808089, 0.8818970435500162) ,
+      rgb (0.8697047485350982, 0.8515240300479789, 0.8805388339000336) ,
+      rgb (0.8669601550533358, 0.8510896085314068, 0.8790976697717334) ,
+      rgb (0.86408985081464, 0.8505039116750779, 0.8775792578489263) ,
+      rgb (0.8611024543689985, 0.8497675485700126, 0.8759924292343957) ,
+      rgb (0.8579825924567037, 0.8488893481028184, 0.8743403855344628) ,
+      rgb (0.8547259318925698, 0.8478748812467282, 0.8726282980930582) ,
+      rgb (0.8513371457085719, 0.8467273579611647, 0.8708608165735044) ,
+      rgb (0.8478071070257792, 0.8454546229209523, 0.8690403678369444) ,
+      rgb (0.8441261828674842, 0.8440648271103739, 0.8671697332269007) ,
+      rgb (0.8403042080595778, 0.8425605950855084, 0.865250882410458) ,
+      rgb (0.8363403180919118, 0.8409479651895194, 0.8632852800107016) ,
+      rgb (0.8322270571293441, 0.8392349062775448, 0.8612756350042788) ,
+      rgb (0.8279689431601354, 0.837426007513952, 0.8592239945130679) ,
+      rgb (0.8235742968025285, 0.8355248776479544, 0.8571319132851495) ,
+      rgb (0.8190465467793753, 0.8335364929949034, 0.855002062870101) ,
+      rgb (0.8143898212114309, 0.8314655869419785, 0.8528375906214702) ,
+      rgb (0.8095999819094809, 0.8293189667350546, 0.8506444160105037) ,
+      rgb (0.8046916442981458, 0.8270983878056066, 0.8484244929697402) ,
+      rgb (0.79967075421268, 0.8248078181208093, 0.8461821002957853) ,
+      rgb (0.7945430508923111, 0.8224511622630462, 0.8439218478682798) ,
+      rgb (0.7893144556460892, 0.8200321318870201, 0.8416486380471222) ,
+      rgb (0.7839910104276492, 0.8175542640053343, 0.8393674746403673) ,
+      rgb (0.7785789200822759, 0.8150208937874255, 0.8370834463093898) ,
+      rgb (0.7730841659017094, 0.8124352473546601, 0.8348017295057968) ,
+      rgb (0.7675110850441786, 0.8098007598713145, 0.8325281663805967) ,
+      rgb (0.7618690793798029, 0.8071194938764749, 0.830266486168872) ,
+      rgb (0.7561644358438198, 0.8043940873347794, 0.8280213899472) ,
+      rgb (0.750403467654067, 0.8016269900896532, 0.8257973785108242) ,
+      rgb (0.7445924777189017, 0.7988204771958325, 0.8235986758615652) ,
+      rgb (0.7387377170049494, 0.7959766573503101, 0.8214292278043301) ,
+      rgb (0.7328454364552346, 0.7930974646884407, 0.8192926338423038) ,
+      rgb (0.726921775128297, 0.7901846863592763, 0.8171921746672638) ,
+      rgb (0.7209728066553678, 0.7872399592345264, 0.8151307392087926) ,
+      rgb (0.7150040307625213, 0.7842648709158119, 0.8131111655994991) ,
+      rgb (0.709020781345393, 0.7812608871607091, 0.8111359185511793) ,
+      rgb (0.7030297722540817, 0.7782290497335813, 0.8092061884805697) ,
+      rgb (0.6970365443886174, 0.7751705000806606, 0.8073233538006345) ,
+      rgb (0.691046410093091, 0.7720862946067809, 0.8054884169067907) ,
+      rgb (0.6850644615439593, 0.7689774029354699, 0.8037020626717691) ,
+      rgb (0.6790955449988215, 0.765844721313959, 0.8019646617300199) ,
+      rgb (0.6731442255942621, 0.7626890873389048, 0.8002762854580953) ,
+      rgb (0.6672147980375281, 0.7595112803730375, 0.7986367465453776) ,
+      rgb (0.6613112930078745, 0.7563120270871903, 0.7970456043491897) ,
+      rgb (0.6554369232645472, 0.7530920875676843, 0.7955027112903105) ,
+      rgb (0.6495957300425348, 0.7498520122194177, 0.7940067402149911) ,
+      rgb (0.6437910831099849, 0.7465923800833657, 0.7925565320130605) ,
+      rgb (0.6380258682854598, 0.7433137671403319, 0.7911510045957317) ,
+      rgb (0.6323027138710603, 0.740016721601314, 0.7897889276264043) ,
+      rgb (0.6266240202260459, 0.7367017540369944, 0.7884690131633456) ,
+      rgb (0.6209919306481755, 0.733369347989232, 0.7871899462469658) ,
+      rgb (0.6154084641177048, 0.7300199523273969, 0.7859502270675048) ,
+      rgb (0.6098754317609306, 0.7266539875975829, 0.7847483573269471) ,
+      rgb (0.6043943420027486, 0.7232718614323369, 0.7835829559353559) ,
+      rgb (0.5989665814482068, 0.7198739489224673, 0.7824525989934664) ,
+      rgb (0.5935933569683722, 0.7164606049658685, 0.781355882376401) ,
+      rgb (0.588275797805555, 0.7130321464645814, 0.7802914140563652) ,
+      rgb (0.5830148703693241, 0.7095888767699747, 0.7792578182047659) ,
+      rgb (0.5778116438998202, 0.7061310615715398, 0.7782534512102552) ,
+      rgb (0.5726668948158774, 0.7026589535425779, 0.7772770268091199) ,
+      rgb (0.5675811785386197, 0.6991727930264627, 0.776327485342753) ,
+      rgb (0.5625551535721934, 0.6956727838162965, 0.7754035914230984) ,
+      rgb (0.5575894041960517, 0.6921591145825405, 0.7745041337932782) ,
+      rgb (0.5526845058934713, 0.6886319451516638, 0.7736279426902245) ,
+      rgb (0.5478409815301863, 0.6850914221850988, 0.7727738647344087) ,
+      rgb (0.5430593242401823, 0.6815376725306588, 0.7719407969783508) ,
+      rgb (0.5383401557517628, 0.677970811290954, 0.7711273443905772) ,
+      rgb (0.533683891477284, 0.6743909370521273, 0.7703325054879735) ,
+      rgb (0.529090861832473, 0.6707981230280622, 0.7695555229231313) ,
+      rgb (0.5245615147059358, 0.6671924299614223, 0.7687954171423095) ,
+      rgb (0.5200962739223556, 0.6635739143403039, 0.768051194033441) ,
+      rgb (0.5156955988596057, 0.65994260812898, 0.7673219148959617) ,
+      rgb (0.5113599254160193, 0.6562985398183186, 0.7666066378064533) ,
+      rgb (0.5070896957645166, 0.6526417240314645, 0.7659044566083585) ,
+      rgb (0.5028853540415561, 0.6489721673409526, 0.7652144671817491) ,
+      rgb (0.4987473366135607, 0.6452898684900934, 0.7645357873418008) ,
+      rgb (0.4946761847863938, 0.6415948411950443, 0.7638671900213091) ,
+      rgb (0.4906722493856122, 0.6378870485884708, 0.7632081276316384) ,
+      rgb (0.4867359599430568, 0.6341664625110051, 0.7625578008592404) ,
+      rgb (0.4828677867260272, 0.6304330455306234, 0.761915371498953) ,
+      rgb (0.47906816236197386, 0.6266867625186013, 0.7612800037566242) ,
+      rgb (0.47533752394906287, 0.6229275728383581, 0.7606508557181775) ,
+      rgb (0.4716762951887709, 0.6191554324288464, 0.7600270922788305) ,
+      rgb (0.46808490970531597, 0.6153702869579029, 0.7594078989109274) ,
+      rgb (0.4645637671630393, 0.6115720882286415, 0.7587924262302581) ,
+      rgb (0.4611132664702388, 0.607760777169989, 0.7581798643680714) ,
+      rgb (0.45773377230160567, 0.6039363004658646, 0.7575693690185916) ,
+      rgb (0.45442563977552913, 0.6000985950385866, 0.7569601366060649) ,
+      rgb (0.45118918687617743, 0.5962476205135354, 0.7563512064324664) ,
+      rgb (0.4480247093358917, 0.5923833145214658, 0.7557417647410792) ,
+      rgb (0.4449324685421538, 0.5885055998308617, 0.7551311041857901) ,
+      rgb (0.441912717666964, 0.5846144110017557, 0.7545183888441067) ,
+      rgb (0.43896563958048396, 0.5807096924109849, 0.7539027620828594) ,
+      rgb (0.4360913895835637, 0.5767913799818608, 0.7532834105961016) ,
+      rgb (0.43329008867358393, 0.5728594162560667, 0.7526594653256667) ,
+      rgb (0.4305617907305757, 0.5689137457245718, 0.752030080993127) ,
+      rgb (0.42790652284925834, 0.5649543060909209, 0.7513944352191484) ,
+      rgb (0.42532423665011354, 0.560981049599503, 0.7507516498900512) ,
+      rgb (0.4228148567577266, 0.5569939212699658, 0.7501008698822764) ,
+      rgb (0.42037822361396326, 0.5529928715810817, 0.7494412559451894) ,
+      rgb (0.4180141407923363, 0.5489778542188889, 0.7487719316700112) ,
+      rgb (0.4157223260454232, 0.544948827153504, 0.7480920445900052) ,
+      rgb (0.4135024574331473, 0.5409057477109848, 0.7474007329754309) ,
+      rgb (0.4113541469730457, 0.5368485776500593, 0.7466971285506578) ,
+      rgb (0.4092768899914751, 0.5327773017713032, 0.7459803063570782) ,
+      rgb (0.4072701869421907, 0.5286918801105741, 0.7452494263758127) ,
+      rgb (0.4053334378930318, 0.5245922817498312, 0.7445036583670813) ,
+      rgb (0.40346600333905397, 0.5204784765384003, 0.7437421522356709) ,
+      rgb (0.40166714010896104, 0.5163504496968876, 0.7429640345324835) ,
+      rgb (0.39993606933454834, 0.5122081814321852, 0.7421684457131799) ,
+      rgb (0.3982719152586337, 0.5080516653927614, 0.7413545091809972) ,
+      rgb (0.3966737490566561, 0.5038808905384797, 0.7405213858051674) ,
+      rgb (0.3951405880820763, 0.4996958532637776, 0.7396682021171571) ,
+      rgb (0.39367135736822567, 0.4954965577745118, 0.738794102296364) ,
+      rgb (0.39226494876209317, 0.4912830033289926, 0.7378982478447508) ,
+      rgb (0.390920175719949, 0.4870552025122304, 0.7369797713388125) ,
+      rgb (0.38963580160340855, 0.48281316715123496, 0.7360378254693274) ,
+      rgb (0.3884105330084243, 0.47855691131792805, 0.7350715764115726) ,
+      rgb (0.3872430145933025, 0.4742864593363539, 0.7340801678785439) ,
+      rgb (0.386131841788921, 0.4700018340988123, 0.7330627749243106) ,
+      rgb (0.3850755679365139, 0.46570306719930193, 0.732018540336905) ,
+      rgb (0.38407269378943537, 0.46139018782416635, 0.7309466543290268) ,
+      rgb (0.3831216808440275, 0.457063235814072, 0.7298462679135326) ,
+      rgb (0.38222094988570376, 0.45272225034283325, 0.7287165614400378) ,
+      rgb (0.3813688793045416, 0.4483672766927786, 0.7275567131714135) ,
+      rgb (0.3805638069656562, 0.4439983720863372, 0.7263658704513531) ,
+      rgb (0.3798040374484875, 0.4396155882122263, 0.7251432377876109) ,
+      rgb (0.3790878928311076, 0.43521897612544935, 0.7238879869132313) ,
+      rgb (0.378413635091359, 0.43080859411413064, 0.7225993199306104) ,
+      rgb (0.3777794975351373, 0.4263845142616835, 0.7212763999353023) ,
+      rgb (0.3771837184425123, 0.4219468022345483, 0.7199184152447577) ,
+      rgb (0.37662448930806297, 0.41749553747893614, 0.7185245473617611) ,
+      rgb (0.37610001286385814, 0.4130307995247706, 0.7170939691992023) ,
+      rgb (0.375608469194424, 0.40855267638072096, 0.7156258509158755) ,
+      rgb (0.37514802505380473, 0.4040612609993941, 0.7141193695725726) ,
+      rgb (0.3747168601930223, 0.3995566498711684, 0.7125736851650046) ,
+      rgb (0.3743131319931234, 0.3950389482828331, 0.7109879652237746) ,
+      rgb (0.3739349933047578, 0.3905082752937583, 0.7093613429347845) ,
+      rgb (0.3735806215098284, 0.3859647438605754, 0.7076929760731058) ,
+      rgb (0.37324816143326384, 0.38140848555753937, 0.7059820097480604) ,
+      rgb (0.3729357864666503, 0.3768396383521984, 0.7042275578058994) ,
+      rgb (0.37264166757849604, 0.3722583500483685, 0.7024287314570723) ,
+      rgb (0.37236397858465387, 0.36766477862108266, 0.7005846349652077) ,
+      rgb (0.3721008970244382, 0.3630590973698238, 0.6986943461507372) ,
+      rgb (0.3718506155898596, 0.3584414828587522, 0.6967569581025654) ,
+      rgb (0.3716113323440048, 0.3538121372967869, 0.6947714991938089) ,
+      rgb (0.37138124223736607, 0.34917126878479027, 0.6927370347192883) ,
+      rgb (0.37115856636209105, 0.3445191141023017, 0.6906525358646499) ,
+      rgb (0.3709415155133733, 0.33985591488818123, 0.6885170337950512) ,
+      rgb (0.3707283327942267, 0.33518193808489577, 0.6863294816960677) ,
+      rgb (0.37051738634484427, 0.3304974124430785, 0.6840888878885721) ,
+      rgb (0.37030682071842685, 0.32580269697872455, 0.6817941168448668) ,
+      rgb (0.37009487130772695, 0.3210981375964933, 0.6794440539905685) ,
+      rgb (0.3698798032902536, 0.31638410101153364, 0.6770375543809057) ,
+      rgb (0.36965987626565955, 0.3116609876295197, 0.6745734474341955) ,
+      rgb (0.3694333459127623, 0.3069292355186234, 0.6720505284912062) ,
+      rgb (0.36919847837592484, 0.3021893217650707, 0.6694675433161452) ,
+      rgb (0.3689535530659678, 0.29744175492366276, 0.6668232208982426) ,
+      rgb (0.3686968223189527, 0.292687098561501, 0.6641162529823691) ,
+      rgb (0.36842655638020444, 0.2879259643777846, 0.661345269109446) ,
+      rgb (0.3681410147989972, 0.2831590122118299, 0.6585088880697231) ,
+      rgb (0.3678384369653108, 0.2783869718129776, 0.655605668384537) ,
+      rgb (0.36751707094367697, 0.2736106331709098, 0.6526341171161864) ,
+      rgb (0.36717513650699446, 0.26883085667326956, 0.6495927229789225) ,
+      rgb (0.3668108554010799, 0.26404857724525643, 0.6464799165290824) ,
+      rgb (0.3664224325155063, 0.25926481158628106, 0.6432940914076554) ,
+      rgb (0.36600853966739794, 0.25448043878086224, 0.6400336180336859) ,
+      rgb (0.3655669837353898, 0.24969683475296395, 0.6366967518748858) ,
+      rgb (0.3650957984588681, 0.24491536803550484, 0.6332817352005559) ,
+      rgb (0.3645930889012501, 0.24013747024823828, 0.629786801550261) ,
+      rgb (0.3640569302208851, 0.23536470386204195, 0.6262101345195302) ,
+      rgb (0.36348537610385145, 0.2305987621839642, 0.6225498862239288) ,
+      rgb (0.3628764356004103, 0.2258414929328703, 0.6188041741082302) ,
+      rgb (0.36222809558295926, 0.22109488427338303, 0.6149711234609613) ,
+      rgb (0.36153829010998356, 0.21636111429594002, 0.6110488067964093) ,
+      rgb (0.36080493826624654, 0.21164251793458128, 0.6070353217206471) ,
+      rgb (0.36002681809096376, 0.20694122817889948, 0.6029284543191687) ,
+      rgb (0.35920088560930186, 0.20226037920758122, 0.5987265295935138) ,
+      rgb (0.3583248996661781, 0.197602942459778, 0.5944276851750107) ,
+      rgb (0.35739663292915563, 0.1929720819784246, 0.5900301125106313) ,
+      rgb (0.35641381143126327, 0.18837119869242164, 0.5855320765920552) ,
+      rgb (0.3553741530690672, 0.18380392577704466, 0.580931914318328) ,
+      rgb (0.3542753496066376, 0.17927413271618647, 0.5762280966066872) ,
+      rgb (0.35311574421123737, 0.17478570377561287, 0.5714187152355529) ,
+      rgb (0.3518924860887379, 0.17034320478524959, 0.5665028491121665) ,
+      rgb (0.3506030444193101, 0.1659512998472086, 0.5614796470399323) ,
+      rgb (0.34924513554955644, 0.16161477763045118, 0.5563483747416378) ,
+      rgb (0.3478165323877778, 0.1573386351115298, 0.5511085345270326) ,
+      rgb (0.3463150717579309, 0.15312802296627787, 0.5457599924248665) ,
+      rgb (0.34473901574536375, 0.1489882058982641, 0.5403024592040654) ,
+      rgb (0.34308600291572294, 0.14492465359918028, 0.534737042820671) ,
+      rgb (0.34135411074506483, 0.1409427920655632, 0.5290650094033675) ,
+      rgb (0.33954168752669694, 0.1370480189671817, 0.5232879753508524) ,
+      rgb (0.3376473209067111, 0.13324562282438077, 0.5174080757397947) ,
+      rgb (0.33566978565015315, 0.12954074251271822, 0.5114280721516895) ,
+      rgb (0.33360804901486, 0.1259381830100592, 0.505351647966549) ,
+      rgb (0.33146154891145124, 0.12244245263391232, 0.4991827458843107) ,
+      rgb (0.3292300520323141, 0.11905764321981127, 0.49292595612342666) ,
+      rgb (0.3269137124539796, 0.1157873496841953, 0.4865864649569746) ,
+      rgb (0.32451307931207785, 0.11263459791730848, 0.48017007211645196) ,
+      rgb (0.3220288227606932, 0.10960114111258401, 0.4736849472572688) ,
+      rgb (0.31946262395497965, 0.1066887988239266, 0.46713728801395243) ,
+      rgb (0.316816480890235, 0.10389861387653518, 0.46053414662739794) ,
+      rgb (0.3140927841475553, 0.10123077676403242, 0.45388335612058467) ,
+      rgb (0.31129434479712365, 0.0986847719340522, 0.4471931371516162) ,
+      rgb (0.30842444457210105, 0.09625938534057774, 0.44047194882050544) ,
+      rgb (0.30548675819945936, 0.09395276484082374, 0.4337284999936111) ,
+      rgb (0.3024853636457425, 0.0917611873973036, 0.42697404043749887) ,
+      rgb (0.2994248396021477, 0.08968225371675004, 0.42021619665853854) ,
+      rgb (0.2963100038890529, 0.08771325096046395, 0.41346259134143476) ,
+      rgb (0.2931459309698525, 0.08585065688962071, 0.40672178082365834) ,
+      rgb (0.2899379244517661, 0.08409078829085731, 0.40000214725256295) ,
+      rgb (0.28669151388283165, 0.08242987384848069, 0.39331182532243375) ,
+      rgb (0.28341239797185225, 0.08086415336549937, 0.38665868550105914) ,
+      rgb (0.2801063857697547, 0.07938999480226153, 0.38005028528138707) ,
+      rgb (0.2767793961581559, 0.07800394103378822, 0.37349382846504675) ,
+      rgb (0.2734373934245081, 0.07670280023749607, 0.36699616136347685) ,
+      rgb (0.2700863774911405, 0.07548367558427554, 0.36056376228111864) ,
+      rgb (0.26673233211995284, 0.0743440180285462, 0.3542027606624096) ,
+      rgb (0.26338121807151404, 0.07328165793989708, 0.34791888996380105) ,
+      rgb (0.26003895187439957, 0.0722947810433622, 0.3417175669546984) ,
+      rgb (0.256711916510839, 0.07138010624208224, 0.3356064898460009) ,
+      rgb (0.25340685873736807, 0.07053358292685183, 0.3295945757321303) ,
+      rgb (0.2501284530619938, 0.06975820642910699, 0.32368100685760637) ,
+      rgb (0.24688226237959, 0.06905363944920445, 0.31786993834254956) ,
+      rgb (0.24367372557466271, 0.06841985515092269, 0.3121652405088837) ,
+      rgb (0.2405081333229594, 0.0678571038148556, 0.3065705449367832) ,
+      rgb (0.23739062429054825, 0.06736588805055552, 0.3010892218406587) ,
+      rgb (0.23433055727563878, 0.0669355996616394, 0.295740099298676) ,
+      rgb (0.23132955273021344, 0.06657618693909059, 0.29051361067988485) ,
+      rgb (0.2283917709422868, 0.06628997924139618, 0.28541074411068496) ,
+      rgb (0.22552164337737857, 0.0660781731193956, 0.28043398847505197) ,
+      rgb (0.22272706739121817, 0.06593379067565194, 0.275597146520537) ,
+      rgb (0.22001251100779617, 0.0658579189189076, 0.2709027999432586) ,
+      rgb (0.21737845072382705, 0.06585966123356204, 0.2663420934966951) ,
+      rgb (0.21482843531473683, 0.06594038561377849, 0.26191675992376573) ,
+      rgb (0.21237411048541005, 0.06608502466175845, 0.2576516509356954) ,
+      rgb (0.21001214221188125, 0.06630857391894718, 0.2535289048041211) ,
+      rgb (0.2077442377448806, 0.06661453200418091, 0.24954644291943817) ,
+      rgb (0.20558051999470117, 0.06699046239786874, 0.24572497420147632) ,
+      rgb (0.20352007949514977, 0.06744417961242422, 0.24205576625191821) ,
+      rgb (0.2015613376412984, 0.06798327102620025, 0.23852974228695395) ,
+      rgb (0.19971571438603364, 0.06859271055370472, 0.23517094067076993) ,
+      rgb (0.19794834061899208, 0.06931406607166066, 0.23194647381302336) ,
+      rgb (0.1960826032659409, 0.07032122724242362, 0.22874673279569585) ,
+      rgb (0.19410351363791453, 0.07160830485689157, 0.22558727307410353) ,
+      rgb (0.19199449184606268, 0.0731828306492733, 0.22243385243433622) ,
+      rgb (0.18975853639094634, 0.07501986186214377, 0.2193005075652994) ,
+      rgb (0.18739228342697645, 0.07710209689958833, 0.21618875376309582) ,
+      rgb (0.18488035509396164, 0.07942573027972388, 0.21307651648984993) ,
+      rgb (0.18774482037046955, 0.07725158846803931, 0.21387448578597812) ,
+      rgb (0.19049578401722037, 0.07531127841678764, 0.2146562337112265) ,
+      rgb (0.1931548636579131, 0.07360681904011795, 0.21542362939081539) ,
+      rgb (0.19571853588267552, 0.07215778103960274, 0.21617499187076789) ,
+      rgb (0.19819343656336558, 0.07097462525273879, 0.21690975060032436) ,
+      rgb (0.20058760685133747, 0.07006457614998421, 0.21762721310371608) ,
+      rgb (0.20290365333558247, 0.06943524858045896, 0.21833167885096033) ,
+      rgb (0.20531725273301316, 0.06891959226639757, 0.21911516689288835) ,
+      rgb (0.20785704662965598, 0.06848439879702528, 0.22000133917653536) ,
+      rgb (0.21052882914958676, 0.06812195249816172, 0.22098759107715404) ,
+      rgb (0.2133313859647627, 0.06783014842602667, 0.2220704321302429) ,
+      rgb (0.21625279838647882, 0.06761633027051639, 0.22324568672294431) ,
+      rgb (0.21930503925136402, 0.06746578636294004, 0.22451023616807558) ,
+      rgb (0.22247308588973624, 0.06738821405309284, 0.22585960379408354) ,
+      rgb (0.2257539681670791, 0.06738213230014747, 0.22728984778098055) ,
+      rgb (0.2291562027859284, 0.06743473087115257, 0.22879681433956656) ,
+      rgb (0.23266299920501882, 0.06755710438847978, 0.23037617493752832) ,
+      rgb (0.23627495835774248, 0.06774359820987802, 0.23202360805926608) ,
+      rgb (0.23999586188690308, 0.06798502996477995, 0.23373434258507808) ,
+      rgb (0.2438114972024792, 0.06828985152901187, 0.23550427698321885) ,
+      rgb (0.247720929905011, 0.06865333790948652, 0.2373288009471749) ,
+      rgb (0.25172899728289466, 0.0690646308260355, 0.23920260612763083) ,
+      rgb (0.2558213554748177, 0.06953231029187984, 0.24112190491594204) ,
+      rgb (0.25999463887892144, 0.07005385560386188, 0.24308218808684579) ,
+      rgb (0.2642551220706094, 0.07061659562299544, 0.24507758869355967) ,
+      rgb (0.2685909594817286, 0.07122671627792246, 0.24710443563450618) ,
+      rgb (0.272997015188973, 0.07188355544616351, 0.2491584709323293) ,
+      rgb (0.277471508091428, 0.07258296989925478, 0.2512349399594277) ,
+      rgb (0.2820174629736694, 0.07331569321404097, 0.25332800295084507) ,
+      rgb (0.28662309235899847, 0.07408846082680887, 0.2554347867371703) ,
+      rgb (0.29128515387578635, 0.0748990498474667, 0.25755101595750435) ,
+      rgb (0.2960004726065818, 0.07574533600095842, 0.25967245030364566) ,
+      rgb (0.3007727681291869, 0.07661782433616476, 0.2617929409781967) ,
+      rgb (0.30559226007249934, 0.07752196310753731, 0.2639100669211966) ,
+      rgb (0.31045520848595526, 0.07845687167618218, 0.2660200572779356) ,
+      rgb (0.3153587000920581, 0.07942099731524319, 0.2681190407694196) ,
+      rgb (0.3202998655799406, 0.08041299473755484, 0.2702032289303951) ,
+      rgb (0.3252788886040126, 0.08142839007654609, 0.27226772884656186) ,
+      rgb (0.3302917447118144, 0.08246763389003825, 0.27430929404579435) ,
+      rgb (0.3353335322445545, 0.08353243411900396, 0.2763253435679004) ,
+      rgb (0.34040164359597463, 0.08462223619170267, 0.27831254595259397) ,
+      rgb (0.345493557138718, 0.08573665496512634, 0.28026769921081435) ,
+      rgb (0.3506067824603248, 0.08687555176033529, 0.28218770540182386) ,
+      rgb (0.35573889947341125, 0.08803897435024335, 0.2840695897279818) ,
+      rgb (0.36088752387578377, 0.0892271943627452, 0.28591050458531014) ,
+      rgb (0.36605031412464006, 0.0904406854276979, 0.2877077458811747) ,
+      rgb (0.3712250843130934, 0.09167999748026273, 0.2894586539763317) ,
+      rgb (0.3764103053221462, 0.09294519809377791, 0.2911602415731392) ,
+      rgb (0.38160247377467543, 0.09423873126371218, 0.2928110750626949) ,
+      rgb (0.3867993907954417, 0.09556181960083443, 0.29440901248173756) ,
+      rgb (0.39199887556812907, 0.09691583650296684, 0.2959521200550908) ,
+      rgb (0.39719876876325577, 0.09830232096827862, 0.2974385647628578) ,
+      rgb (0.40239692379737496, 0.09972293031495055, 0.2988667436973397) ,
+      rgb (0.4075912039268871, 0.10117945586419633, 0.300235195077286) ,
+      rgb (0.41277985630360303, 0.1026734006932461, 0.3015422643746897) ,
+      rgb (0.41796105205173684, 0.10420644885760968, 0.3027865203963184) ,
+      rgb (0.42313214269556043, 0.10578120994917611, 0.3039675809469457) ,
+      rgb (0.4282910131578975, 0.1073997763055258, 0.30508479060294547) ,
+      rgb (0.4334355841041439, 0.1090642347484701, 0.3061376792828915) ,
+      rgb (0.4385637818793154, 0.11077667828375456, 0.30712600062348083) ,
+      rgb (0.44367358645071275, 0.11253912421257944, 0.3080497309546545) ,
+      rgb (0.4487629917317482, 0.1143535557462255, 0.30890905921943196) ,
+      rgb (0.4538300508699989, 0.11622183788331528, 0.3097044124984492) ,
+      rgb (0.45887288947308297, 0.11814571137706886, 0.3104363697903881) ,
+      rgb (0.46389102840284874, 0.12012561256850712, 0.31110343446582983) ,
+      rgb (0.46888111384598413, 0.12216445576414045, 0.31170911458932665) ,
+      rgb (0.473841437035254, 0.12426354237989065, 0.31225470169927194) ,
+      rgb (0.47877034239726296, 0.12642401401409453, 0.3127417273582196) ,
+      rgb (0.48366628618847957, 0.1286467902201389, 0.31317188565991266) ,
+      rgb (0.48852847371852987, 0.13093210934893723, 0.31354553695453014) ,
+      rgb (0.49335504375145617, 0.13328091630401023, 0.31386561956734976) ,
+      rgb (0.4981443546207415, 0.13569380302451714, 0.314135190862664) ,
+      rgb (0.5028952497497061, 0.13817086581280427, 0.3143566215383367) ,
+      rgb (0.5076068118105369, 0.14071192654913128, 0.3145320012008257) ,
+      rgb (0.5122783510532176, 0.14331656120063752, 0.3146630922831542) ,
+      rgb (0.5169084880054446, 0.14598463068714407, 0.3147540759228004) ,
+      rgb (0.5214965286322996, 0.14871544765633712, 0.3148076795453443) ,
+      rgb (0.5260418962547748, 0.15150818660835483, 0.31482653406646727) ,
+      rgb (0.5305442048985645, 0.15436183633886777, 0.3148129978918713) ,
+      rgb (0.5350027976174474, 0.15727540775107324, 0.3147708520739653) ,
+      rgb (0.5394173664919906, 0.16024769309971934, 0.31470295028655965) ,
+      rgb (0.5437877131360856, 0.16327738551419116, 0.31461204226295625) ,
+      rgb (0.5481137003346762, 0.1663630904279047, 0.3145010299091471) ,
+      rgb (0.5523952157271191, 0.16950338809328983, 0.3143729155461537) ,
+      rgb (0.5566322903496934, 0.17269677158182117, 0.31423043195101424) ,
+      rgb (0.5608249903911717, 0.17594170887918095, 0.31407639883970623) ,
+      rgb (0.564973435290177, 0.17923664950367169, 0.3139136046337036) ,
+      rgb (0.5690778478401143, 0.18258004462335425, 0.3137444095679653) ,
+      rgb (0.5731384575410787, 0.18597036007065024, 0.3135712686852) ,
+      rgb (0.5771555081299204, 0.18940601489760422, 0.3133970433357208) ,
+      rgb (0.5811293276158656, 0.19288548904692518, 0.3132239939418394) ,
+      rgb (0.5850602439646688, 0.19640737049066315, 0.3130540116373273) ,
+      rgb (0.5889486193554471, 0.19997020971775276, 0.31288922211590126) ,
+      rgb (0.5927948053652026, 0.20357251410079796, 0.3127323483930494) ,
+      rgb (0.5965991810912237, 0.207212956082026, 0.3125852303112123) ,
+      rgb (0.6003621301041158, 0.21089030138947745, 0.3124493441041469) ,
+      rgb (0.6040840169673274, 0.21460331490206347, 0.31232652641170694) ,
+      rgb (0.6077652399481865, 0.21835070166659282, 0.312219032918702) ,
+      rgb (0.6114062072731884, 0.22213124697023234, 0.3121288139643524) ,
+      rgb (0.6150072323639137, 0.22594402043981826, 0.3120568068576574) ,
+      rgb (0.6185686525887719, 0.2297879924917992, 0.3120046383872893) ,
+      rgb (0.6220907982108261, 0.2336621873300741, 0.3119738327362739) ,
+      rgb (0.6255741650043496, 0.23756535071152696, 0.3119669831491227) ,
+      rgb (0.6290189201698587, 0.24149689191922535, 0.3119844719564572) ,
+      rgb (0.6324253485421027, 0.24545598775548677, 0.3120276597462445) ,
+      rgb (0.6357937104834237, 0.24944185818822678, 0.3120979395330059) ,
+      rgb (0.6391243387840212, 0.2534536546198314, 0.3121968961206398) ,
+      rgb (0.642417577481186, 0.257490519876798, 0.31232631707560987) ,
+      rgb (0.6456734938264543, 0.2615520316161528, 0.31248673753935263) ,
+      rgb (0.6488923016945825, 0.2656375533620908, 0.3126794181957019) ,
+      rgb (0.652074172902773, 0.269746505252367, 0.3129056060581917) ,
+      rgb (0.6552193260932713, 0.2738782665241015, 0.3131666792687211) ,
+      rgb (0.6583280801134499, 0.2780321095766563, 0.3134643447952643) ,
+      rgb (0.6614003753260178, 0.28220778870555907, 0.3137991292649849) ,
+      rgb (0.6644363246987884, 0.2864048361425618, 0.31417223403606975) ,
+      rgb (0.6674360376636913, 0.29062280081258873, 0.31458483752056837) ,
+      rgb (0.670399595476762, 0.29486126309253047, 0.3150381395687221) ,
+      rgb (0.6733272556481733, 0.29911962764489264, 0.3155337232398221) ,
+      rgb (0.6762189792440975, 0.30339762792450425, 0.3160724937230589) ,
+      rgb (0.6790747402815734, 0.30769497879760166, 0.31665545668946665) ,
+      rgb (0.6818945715094452, 0.31201133280550686, 0.3172838048924495) ,
+      rgb (0.6846785094249453, 0.3163463482122221, 0.31795870784057567) ,
+      rgb (0.6874265643516962, 0.32069970535138104, 0.3186813762227769) ,
+      rgb (0.6901389321505248, 0.32507091815606004, 0.319453323328983) ,
+      rgb (0.6928154484676493, 0.32945984647042675, 0.3202754315314667) ,
+      rgb (0.6954560834689112, 0.33386622163232865, 0.3211488430698579) ,
+      rgb (0.6980608153581771, 0.3382897632604862, 0.3220747885521809) ,
+      rgb (0.700629624772421, 0.34273019305341756, 0.32305449047765694) ,
+      rgb (0.7031624945881415, 0.34718723719598, 0.32408913679491225) ,
+      rgb (0.7056595112261009, 0.3516605297812094, 0.32518014084085567) ,
+      rgb (0.7081205956842048, 0.356149855233803, 0.32632861885644465) ,
+      rgb (0.7105456546582587, 0.36065500290840113, 0.3275357416278876) ,
+      rgb (0.7129346683977347, 0.36517570519856757, 0.3288027427038317) ,
+      rgb (0.7152876061484729, 0.3697117022522345, 0.3301308728723546) ,
+      rgb (0.7176044490813385, 0.3742627271068619, 0.3315213862095893) ,
+      rgb (0.7198852149054985, 0.37882848839337313, 0.332975552002454) ,
+      rgb (0.7221299918421461, 0.3834086450896306, 0.33449469983585844) ,
+      rgb (0.7243386564778159, 0.38800301593162145, 0.3360799596569183) ,
+      rgb (0.7265112290022755, 0.3926113126792577, 0.3377325942005665) ,
+      rgb (0.7286477385671655, 0.39723324476747235, 0.33945384341064017) ,
+      rgb (0.7307482075484517, 0.401868526884681, 0.3412449533046818) ,
+      rgb (0.7328127050626875, 0.4065168468778026, 0.3431071517341082) ,
+      rgb (0.7348413359856494, 0.4111778700451951, 0.3450416947080907) ,
+      rgb (0.7368342217358587, 0.4158512585029011, 0.347049785207584) ,
+      rgb (0.7387914002459927, 0.4205367299231533, 0.34913260148542435) ,
+      rgb (0.7407130161950609, 0.4252339389526239, 0.35129130890802607) ,
+      rgb (0.7425992159973317, 0.42994254036133867, 0.3535270924537459) ,
+      rgb (0.7444501867657067, 0.4346621718461711, 0.35584108091122535) ,
+      rgb (0.7462661578916344, 0.439392450449735, 0.3582343914230064) ,
+      rgb (0.7480473927555956, 0.44413297780351974, 0.36070813602540136) ,
+      rgb (0.7497942054717047, 0.4488833348154881, 0.3632633755836028) ,
+      rgb (0.7515068504589166, 0.45364314496866825, 0.36590112443835765) ,
+      rgb (0.7531856636904657, 0.45841199172949604, 0.3686223664223477) ,
+      rgb (0.7548310506695954, 0.46318942799460555, 0.3714280448394211) ,
+      rgb (0.7564434157714071, 0.4679750143794846, 0.37431909037543515) ,
+      rgb (0.7580232553845584, 0.4727682731566229, 0.3772963553109668) ,
+      rgb (0.7595711110534006, 0.4775687122205708, 0.380360657784311) ,
+      rgb (0.7610876378057071, 0.48237579130289127, 0.3835127572385229) ,
+      rgb (0.7625733355405261, 0.48718906673415824, 0.38675335037837993) ,
+      rgb (0.7640288560928866, 0.49200802533379656, 0.39008308392311997) ,
+      rgb (0.7654549259333051, 0.4968321290972723, 0.3935025400011538) ,
+      rgb (0.7668522895064389, 0.5016608471009063, 0.39701221751773474) ,
+      rgb (0.768221765997353, 0.5064936237128791, 0.40061257089416885) ,
+      rgb (0.7695642334401418, 0.5113298901696085, 0.4043039806968248) ,
+      rgb (0.7708809196230247, 0.516168926434691, 0.40808667584648967) ,
+      rgb (0.7721725722960555, 0.5210102658711383, 0.4119608998712287) ,
+      rgb (0.7734402182988989, 0.5258533209345156, 0.41592679539764366) ,
+      rgb (0.774684947460632, 0.5306974938477673, 0.4199844035696376) ,
+      rgb (0.775907907306857, 0.5355421788246119, 0.42413367909988375) ,
+      rgb (0.7771103295521099, 0.5403867491056124, 0.4283745037125848) ,
+      rgb (0.7782934580763312, 0.545230594884266, 0.432706647838971) ,
+      rgb (0.7794586273150664, 0.5500730841397727, 0.4371297985644476) ,
+      rgb (0.7806077474948377, 0.5549133574489061, 0.4416433242636464) ,
+      rgb (0.7817418047898184, 0.5597509805259486, 0.44624687186865436) ,
+      rgb (0.7828622526444091, 0.5645853311116688, 0.45093985823706345) ,
+      rgb (0.7839706083641448, 0.5694157832671042, 0.4557215474289206) ,
+      rgb (0.7850684501960684, 0.5742417003617839, 0.46059116206904965) ,
+      rgb (0.7861573713233296, 0.5790624629815756, 0.465547782819184) ,
+      rgb (0.7872390410818835, 0.5838774374455721, 0.47059039582133383) ,
+      rgb (0.7883151404562396, 0.5886860017356244, 0.4757179187907608) ,
+      rgb (0.7893873776625194, 0.5934875421745599, 0.48092913815357724) ,
+      rgb (0.7904577684772788, 0.5982813427706246, 0.48622257801969754) ,
+      rgb (0.7915283284347561, 0.603066705931472, 0.49159667021646397) ,
+      rgb (0.7926003430423745, 0.6078432208703702, 0.4970502062153201) ,
+      rgb (0.7936755969866496, 0.6126102933407219, 0.5025816129126943) ,
+      rgb (0.7947558597265404, 0.617367344002207, 0.5081892121310299) ,
+      rgb (0.7958429237958377, 0.6221137880845115, 0.5138712409190979) ,
+      rgb (0.7969385471995161, 0.626849056792967, 0.5196258425240281) ,
+      rgb (0.7980444781513664, 0.6315725822508955, 0.5254510814483478) ,
+      rgb (0.7991624518501963, 0.6362837937202919, 0.5313449594256143) ,
+      rgb (0.8002941538975398, 0.6409821330674986, 0.5373053518514104) ,
+      rgb (0.8014412429256005, 0.6456670345921877, 0.5433300863249918) ,
+      rgb (0.8026053114611295, 0.6503379374810385, 0.5494169158460365) ,
+      rgb (0.8037879253107763, 0.6549942654947263, 0.5555635086708381) ,
+      rgb (0.804990547908103, 0.6596354502756416, 0.5617674511054698) ,
+      rgb (0.8062146052692706, 0.6642608958528229, 0.5680262917864979) ,
+      rgb (0.8074614045096935, 0.6688700095398864, 0.5743374637345958) ,
+      rgb (0.8087321917008969, 0.6734621670219452, 0.5806983480557674) ,
+      rgb (0.8100280946652069, 0.6780367267397182, 0.5871062690808275) ,
+      rgb (0.8113501401176333, 0.6825930154624339, 0.5935584890905076) ,
+      rgb (0.8126992203988149, 0.6871303371461888, 0.600052148204351) ,
+      rgb (0.8140761104699334, 0.6916479479148213, 0.6065843782630862) ,
+      rgb (0.8154814662727948, 0.6961450550830809, 0.6131522120932265) ,
+      rgb (0.8169157577505589, 0.7006208301478398, 0.6197526063725792) ,
+      rgb (0.8183793116449822, 0.705074381896351, 0.626382454789333) ,
+      rgb (0.8198723065045529, 0.7095047497878748, 0.6330385704006711) ,
+      rgb (0.8213947205565636, 0.7139109141951604, 0.6397176669767276) ,
+      rgb (0.8229463511042843, 0.7182917733129006, 0.6464164243818421) ,
+      rgb (0.8245268129450285, 0.7226461431208888, 0.653131379154226) ,
+      rgb (0.8261354971058026, 0.7269727551823826, 0.659859001562165) ,
+      rgb (0.8277716072353446, 0.7312702332407809, 0.6665957020468297) ,
+      rgb (0.8294340781648147, 0.7355371221572935, 0.6733377200930191) ,
+      rgb (0.8311216352909631, 0.7397718464763862, 0.6800812520363146) ,
+      rgb (0.8328327718577798, 0.7439727181745988, 0.6868223587464855) ,
+      rgb (0.8345656905566583, 0.7481379479992134, 0.6935569764986385) ,
+      rgb (0.8363189884473793, 0.7522654895287526, 0.7002799902886496) ,
+      rgb (0.8380912347613196, 0.7563531486080863, 0.7069856139021298) ,
+      rgb (0.8398783988412087, 0.7603990719977968, 0.7136714781112923) ,
+      rgb (0.8416775076684515, 0.7644010120098295, 0.7203329938728462) ,
+      rgb (0.843485292229337, 0.7683566039987018, 0.7269653699897204) ,
+      rgb (0.8452981073195511, 0.7722633860104472, 0.7335636824054149) ,
+      rgb (0.847111955079651, 0.7761188023604716, 0.7401227576280706) ,
+      rgb (0.8489224556311764, 0.7799202140765015, 0.7466371929366437) ,
+      rgb (0.8507269702317879, 0.7836645734238389, 0.7530974636118285) ,
+      rgb (0.8525190720770844, 0.7873493613354844, 0.7594994148789691) ,
+      rgb (0.8542921961147046, 0.7909719677709199, 0.765838014779141) ,
+      rgb (0.856040223147254, 0.7945296360155061, 0.7721061003767414) ,
+      rgb (0.857756629435049, 0.7980196314271393, 0.778295716672475) ,
+      rgb (0.8594346370300241, 0.8014392309950078, 0.7843978875138392) ,
+      rgb (0.8610711702756552, 0.8047851790981223, 0.7903952966373629) ,
+      rgb (0.8626560105112757, 0.8080552380426153, 0.796282666437655) ,
+      rgb (0.8641834372394103, 0.8112464422465354, 0.8020461269686395) ,
+      rgb (0.8656493432560532, 0.8143554406751491, 0.8076697232416455) ,
+      rgb (0.867053149070485, 0.8173780404191124, 0.813134196269114) ,
+      rgb (0.8683995469581863, 0.8203087551218152, 0.8184163896312899) ,
+      rgb (0.8696913150261381, 0.8231415885956916, 0.8235047668317317) ,
+      rgb (0.8709384671729751, 0.8258685788943851, 0.8283849726114961) ,
+      rgb (0.8721533197845432, 0.8284805282370967, 0.8330486712880828) ,
+      rgb (0.8733517136091627, 0.8309671525127262, 0.8374885100119709) ,
+      rgb (0.8745379332026019, 0.8333197294864546, 0.8417192535806901) ,
+      rgb (0.875714587099614, 0.8355302318472394, 0.8457553751902708) ,
+      rgb (0.8768784845161469, 0.8375923807118654, 0.8496137354915025) ,
+      rgb (0.8780229843664901, 0.8395016561854007, 0.8533064535245892) ,
+      rgb (0.8791324424079277, 0.8412555488447591, 0.8568557229103964) ,
+      rgb (0.8801929331569581, 0.8428522482477862, 0.8602739992715663) ,
+      rgb (0.8811916987134195, 0.8442906671771735, 0.8635659516866988) ,
+      rgb (0.8821154248940161, 0.8455700725455935, 0.8667376504623333) ,
+      rgb (0.8829516859544853, 0.8466897027569927, 0.8697961704819097) ,
+      rgb (0.8836912714589804, 0.8476489176151927, 0.8727414710144156) ,
+      rgb (0.8843271305411354, 0.8484474157205542, 0.8755678522824297) ,
+      rgb (0.8848513815990857, 0.849084264228938, 0.8782823528537247) ,
+      rgb (0.8852589797263047, 0.8495589281098921, 0.8808841479402484) ,
+      rgb (0.8855471481195238, 0.8498717428363158, 0.8833620612117095) ,
+      rgb (0.8857115512284565, 0.8500218611585632, 0.8857253899008712)
+      });
 
 
 list_data twilight_shifted = list_data(new pen[] {
-  rgb (0.18739228342697645, 0.07710209689958833, 0.21618875376309582) ,
-  rgb (0.18975853639094634, 0.07501986186214377, 0.2193005075652994) ,
-  rgb (0.19199449184606268, 0.0731828306492733, 0.22243385243433622) ,
-  rgb (0.19410351363791453, 0.07160830485689157, 0.22558727307410353) ,
-  rgb (0.1960826032659409, 0.07032122724242362, 0.22874673279569585) ,
-  rgb (0.19794834061899208, 0.06931406607166066, 0.23194647381302336) ,
-  rgb (0.19971571438603364, 0.06859271055370472, 0.23517094067076993) ,
-  rgb (0.2015613376412984, 0.06798327102620025, 0.23852974228695395) ,
-  rgb (0.20352007949514977, 0.06744417961242422, 0.24205576625191821) ,
-  rgb (0.20558051999470117, 0.06699046239786874, 0.24572497420147632) ,
-  rgb (0.2077442377448806, 0.06661453200418091, 0.24954644291943817) ,
-  rgb (0.21001214221188125, 0.06630857391894718, 0.2535289048041211) ,
-  rgb (0.21237411048541005, 0.06608502466175845, 0.2576516509356954) ,
-  rgb (0.21482843531473683, 0.06594038561377849, 0.26191675992376573) ,
-  rgb (0.21737845072382705, 0.06585966123356204, 0.2663420934966951) ,
-  rgb (0.22001251100779617, 0.0658579189189076, 0.2709027999432586) ,
-  rgb (0.22272706739121817, 0.06593379067565194, 0.275597146520537) ,
-  rgb (0.22552164337737857, 0.0660781731193956, 0.28043398847505197) ,
-  rgb (0.2283917709422868, 0.06628997924139618, 0.28541074411068496) ,
-  rgb (0.23132955273021344, 0.06657618693909059, 0.29051361067988485) ,
-  rgb (0.23433055727563878, 0.0669355996616394, 0.295740099298676) ,
-  rgb (0.23739062429054825, 0.06736588805055552, 0.3010892218406587) ,
-  rgb (0.2405081333229594, 0.0678571038148556, 0.3065705449367832) ,
-  rgb (0.24367372557466271, 0.06841985515092269, 0.3121652405088837) ,
-  rgb (0.24688226237959, 0.06905363944920445, 0.31786993834254956) ,
-  rgb (0.2501284530619938, 0.06975820642910699, 0.32368100685760637) ,
-  rgb (0.25340685873736807, 0.07053358292685183, 0.3295945757321303) ,
-  rgb (0.256711916510839, 0.07138010624208224, 0.3356064898460009) ,
-  rgb (0.26003895187439957, 0.0722947810433622, 0.3417175669546984) ,
-  rgb (0.26338121807151404, 0.07328165793989708, 0.34791888996380105) ,
-  rgb (0.26673233211995284, 0.0743440180285462, 0.3542027606624096) ,
-  rgb (0.2700863774911405, 0.07548367558427554, 0.36056376228111864) ,
-  rgb (0.2734373934245081, 0.07670280023749607, 0.36699616136347685) ,
-  rgb (0.2767793961581559, 0.07800394103378822, 0.37349382846504675) ,
-  rgb (0.2801063857697547, 0.07938999480226153, 0.38005028528138707) ,
-  rgb (0.28341239797185225, 0.08086415336549937, 0.38665868550105914) ,
-  rgb (0.28669151388283165, 0.08242987384848069, 0.39331182532243375) ,
-  rgb (0.2899379244517661, 0.08409078829085731, 0.40000214725256295) ,
-  rgb (0.2931459309698525, 0.08585065688962071, 0.40672178082365834) ,
-  rgb (0.2963100038890529, 0.08771325096046395, 0.41346259134143476) ,
-  rgb (0.2994248396021477, 0.08968225371675004, 0.42021619665853854) ,
-  rgb (0.3024853636457425, 0.0917611873973036, 0.42697404043749887) ,
-  rgb (0.30548675819945936, 0.09395276484082374, 0.4337284999936111) ,
-  rgb (0.30842444457210105, 0.09625938534057774, 0.44047194882050544) ,
-  rgb (0.31129434479712365, 0.0986847719340522, 0.4471931371516162) ,
-  rgb (0.3140927841475553, 0.10123077676403242, 0.45388335612058467) ,
-  rgb (0.316816480890235, 0.10389861387653518, 0.46053414662739794) ,
-  rgb (0.31946262395497965, 0.1066887988239266, 0.46713728801395243) ,
-  rgb (0.3220288227606932, 0.10960114111258401, 0.4736849472572688) ,
-  rgb (0.32451307931207785, 0.11263459791730848, 0.48017007211645196) ,
-  rgb (0.3269137124539796, 0.1157873496841953, 0.4865864649569746) ,
-  rgb (0.3292300520323141, 0.11905764321981127, 0.49292595612342666) ,
-  rgb (0.33146154891145124, 0.12244245263391232, 0.4991827458843107) ,
-  rgb (0.33360804901486, 0.1259381830100592, 0.505351647966549) ,
-  rgb (0.33566978565015315, 0.12954074251271822, 0.5114280721516895) ,
-  rgb (0.3376473209067111, 0.13324562282438077, 0.5174080757397947) ,
-  rgb (0.33954168752669694, 0.1370480189671817, 0.5232879753508524) ,
-  rgb (0.34135411074506483, 0.1409427920655632, 0.5290650094033675) ,
-  rgb (0.34308600291572294, 0.14492465359918028, 0.534737042820671) ,
-  rgb (0.34473901574536375, 0.1489882058982641, 0.5403024592040654) ,
-  rgb (0.3463150717579309, 0.15312802296627787, 0.5457599924248665) ,
-  rgb (0.3478165323877778, 0.1573386351115298, 0.5511085345270326) ,
-  rgb (0.34924513554955644, 0.16161477763045118, 0.5563483747416378) ,
-  rgb (0.3506030444193101, 0.1659512998472086, 0.5614796470399323) ,
-  rgb (0.3518924860887379, 0.17034320478524959, 0.5665028491121665) ,
-  rgb (0.35311574421123737, 0.17478570377561287, 0.5714187152355529) ,
-  rgb (0.3542753496066376, 0.17927413271618647, 0.5762280966066872) ,
-  rgb (0.3553741530690672, 0.18380392577704466, 0.580931914318328) ,
-  rgb (0.35641381143126327, 0.18837119869242164, 0.5855320765920552) ,
-  rgb (0.35739663292915563, 0.1929720819784246, 0.5900301125106313) ,
-  rgb (0.3583248996661781, 0.197602942459778, 0.5944276851750107) ,
-  rgb (0.35920088560930186, 0.20226037920758122, 0.5987265295935138) ,
-  rgb (0.36002681809096376, 0.20694122817889948, 0.6029284543191687) ,
-  rgb (0.36080493826624654, 0.21164251793458128, 0.6070353217206471) ,
-  rgb (0.36153829010998356, 0.21636111429594002, 0.6110488067964093) ,
-  rgb (0.36222809558295926, 0.22109488427338303, 0.6149711234609613) ,
-  rgb (0.3628764356004103, 0.2258414929328703, 0.6188041741082302) ,
-  rgb (0.36348537610385145, 0.2305987621839642, 0.6225498862239288) ,
-  rgb (0.3640569302208851, 0.23536470386204195, 0.6262101345195302) ,
-  rgb (0.3645930889012501, 0.24013747024823828, 0.629786801550261) ,
-  rgb (0.3650957984588681, 0.24491536803550484, 0.6332817352005559) ,
-  rgb (0.3655669837353898, 0.24969683475296395, 0.6366967518748858) ,
-  rgb (0.36600853966739794, 0.25448043878086224, 0.6400336180336859) ,
-  rgb (0.3664224325155063, 0.25926481158628106, 0.6432940914076554) ,
-  rgb (0.3668108554010799, 0.26404857724525643, 0.6464799165290824) ,
-  rgb (0.36717513650699446, 0.26883085667326956, 0.6495927229789225) ,
-  rgb (0.36751707094367697, 0.2736106331709098, 0.6526341171161864) ,
-  rgb (0.3678384369653108, 0.2783869718129776, 0.655605668384537) ,
-  rgb (0.3681410147989972, 0.2831590122118299, 0.6585088880697231) ,
-  rgb (0.36842655638020444, 0.2879259643777846, 0.661345269109446) ,
-  rgb (0.3686968223189527, 0.292687098561501, 0.6641162529823691) ,
-  rgb (0.3689535530659678, 0.29744175492366276, 0.6668232208982426) ,
-  rgb (0.36919847837592484, 0.3021893217650707, 0.6694675433161452) ,
-  rgb (0.3694333459127623, 0.3069292355186234, 0.6720505284912062) ,
-  rgb (0.36965987626565955, 0.3116609876295197, 0.6745734474341955) ,
-  rgb (0.3698798032902536, 0.31638410101153364, 0.6770375543809057) ,
-  rgb (0.37009487130772695, 0.3210981375964933, 0.6794440539905685) ,
-  rgb (0.37030682071842685, 0.32580269697872455, 0.6817941168448668) ,
-  rgb (0.37051738634484427, 0.3304974124430785, 0.6840888878885721) ,
-  rgb (0.3707283327942267, 0.33518193808489577, 0.6863294816960677) ,
-  rgb (0.3709415155133733, 0.33985591488818123, 0.6885170337950512) ,
-  rgb (0.37115856636209105, 0.3445191141023017, 0.6906525358646499) ,
-  rgb (0.37138124223736607, 0.34917126878479027, 0.6927370347192883) ,
-  rgb (0.3716113323440048, 0.3538121372967869, 0.6947714991938089) ,
-  rgb (0.3718506155898596, 0.3584414828587522, 0.6967569581025654) ,
-  rgb (0.3721008970244382, 0.3630590973698238, 0.6986943461507372) ,
-  rgb (0.37236397858465387, 0.36766477862108266, 0.7005846349652077) ,
-  rgb (0.37264166757849604, 0.3722583500483685, 0.7024287314570723) ,
-  rgb (0.3729357864666503, 0.3768396383521984, 0.7042275578058994) ,
-  rgb (0.37324816143326384, 0.38140848555753937, 0.7059820097480604) ,
-  rgb (0.3735806215098284, 0.3859647438605754, 0.7076929760731058) ,
-  rgb (0.3739349933047578, 0.3905082752937583, 0.7093613429347845) ,
-  rgb (0.3743131319931234, 0.3950389482828331, 0.7109879652237746) ,
-  rgb (0.3747168601930223, 0.3995566498711684, 0.7125736851650046) ,
-  rgb (0.37514802505380473, 0.4040612609993941, 0.7141193695725726) ,
-  rgb (0.375608469194424, 0.40855267638072096, 0.7156258509158755) ,
-  rgb (0.37610001286385814, 0.4130307995247706, 0.7170939691992023) ,
-  rgb (0.37662448930806297, 0.41749553747893614, 0.7185245473617611) ,
-  rgb (0.3771837184425123, 0.4219468022345483, 0.7199184152447577) ,
-  rgb (0.3777794975351373, 0.4263845142616835, 0.7212763999353023) ,
-  rgb (0.378413635091359, 0.43080859411413064, 0.7225993199306104) ,
-  rgb (0.3790878928311076, 0.43521897612544935, 0.7238879869132313) ,
-  rgb (0.3798040374484875, 0.4396155882122263, 0.7251432377876109) ,
-  rgb (0.3805638069656562, 0.4439983720863372, 0.7263658704513531) ,
-  rgb (0.3813688793045416, 0.4483672766927786, 0.7275567131714135) ,
-  rgb (0.38222094988570376, 0.45272225034283325, 0.7287165614400378) ,
-  rgb (0.3831216808440275, 0.457063235814072, 0.7298462679135326) ,
-  rgb (0.38407269378943537, 0.46139018782416635, 0.7309466543290268) ,
-  rgb (0.3850755679365139, 0.46570306719930193, 0.732018540336905) ,
-  rgb (0.386131841788921, 0.4700018340988123, 0.7330627749243106) ,
-  rgb (0.3872430145933025, 0.4742864593363539, 0.7340801678785439) ,
-  rgb (0.3884105330084243, 0.47855691131792805, 0.7350715764115726) ,
-  rgb (0.38963580160340855, 0.48281316715123496, 0.7360378254693274) ,
-  rgb (0.390920175719949, 0.4870552025122304, 0.7369797713388125) ,
-  rgb (0.39226494876209317, 0.4912830033289926, 0.7378982478447508) ,
-  rgb (0.39367135736822567, 0.4954965577745118, 0.738794102296364) ,
-  rgb (0.3951405880820763, 0.4996958532637776, 0.7396682021171571) ,
-  rgb (0.3966737490566561, 0.5038808905384797, 0.7405213858051674) ,
-  rgb (0.3982719152586337, 0.5080516653927614, 0.7413545091809972) ,
-  rgb (0.39993606933454834, 0.5122081814321852, 0.7421684457131799) ,
-  rgb (0.40166714010896104, 0.5163504496968876, 0.7429640345324835) ,
-  rgb (0.40346600333905397, 0.5204784765384003, 0.7437421522356709) ,
-  rgb (0.4053334378930318, 0.5245922817498312, 0.7445036583670813) ,
-  rgb (0.4072701869421907, 0.5286918801105741, 0.7452494263758127) ,
-  rgb (0.4092768899914751, 0.5327773017713032, 0.7459803063570782) ,
-  rgb (0.4113541469730457, 0.5368485776500593, 0.7466971285506578) ,
-  rgb (0.4135024574331473, 0.5409057477109848, 0.7474007329754309) ,
-  rgb (0.4157223260454232, 0.544948827153504, 0.7480920445900052) ,
-  rgb (0.4180141407923363, 0.5489778542188889, 0.7487719316700112) ,
-  rgb (0.42037822361396326, 0.5529928715810817, 0.7494412559451894) ,
-  rgb (0.4228148567577266, 0.5569939212699658, 0.7501008698822764) ,
-  rgb (0.42532423665011354, 0.560981049599503, 0.7507516498900512) ,
-  rgb (0.42790652284925834, 0.5649543060909209, 0.7513944352191484) ,
-  rgb (0.4305617907305757, 0.5689137457245718, 0.752030080993127) ,
-  rgb (0.43329008867358393, 0.5728594162560667, 0.7526594653256667) ,
-  rgb (0.4360913895835637, 0.5767913799818608, 0.7532834105961016) ,
-  rgb (0.43896563958048396, 0.5807096924109849, 0.7539027620828594) ,
-  rgb (0.441912717666964, 0.5846144110017557, 0.7545183888441067) ,
-  rgb (0.4449324685421538, 0.5885055998308617, 0.7551311041857901) ,
-  rgb (0.4480247093358917, 0.5923833145214658, 0.7557417647410792) ,
-  rgb (0.45118918687617743, 0.5962476205135354, 0.7563512064324664) ,
-  rgb (0.45442563977552913, 0.6000985950385866, 0.7569601366060649) ,
-  rgb (0.45773377230160567, 0.6039363004658646, 0.7575693690185916) ,
-  rgb (0.4611132664702388, 0.607760777169989, 0.7581798643680714) ,
-  rgb (0.4645637671630393, 0.6115720882286415, 0.7587924262302581) ,
-  rgb (0.46808490970531597, 0.6153702869579029, 0.7594078989109274) ,
-  rgb (0.4716762951887709, 0.6191554324288464, 0.7600270922788305) ,
-  rgb (0.47533752394906287, 0.6229275728383581, 0.7606508557181775) ,
-  rgb (0.47906816236197386, 0.6266867625186013, 0.7612800037566242) ,
-  rgb (0.4828677867260272, 0.6304330455306234, 0.761915371498953) ,
-  rgb (0.4867359599430568, 0.6341664625110051, 0.7625578008592404) ,
-  rgb (0.4906722493856122, 0.6378870485884708, 0.7632081276316384) ,
-  rgb (0.4946761847863938, 0.6415948411950443, 0.7638671900213091) ,
-  rgb (0.4987473366135607, 0.6452898684900934, 0.7645357873418008) ,
-  rgb (0.5028853540415561, 0.6489721673409526, 0.7652144671817491) ,
-  rgb (0.5070896957645166, 0.6526417240314645, 0.7659044566083585) ,
-  rgb (0.5113599254160193, 0.6562985398183186, 0.7666066378064533) ,
-  rgb (0.5156955988596057, 0.65994260812898, 0.7673219148959617) ,
-  rgb (0.5200962739223556, 0.6635739143403039, 0.768051194033441) ,
-  rgb (0.5245615147059358, 0.6671924299614223, 0.7687954171423095) ,
-  rgb (0.529090861832473, 0.6707981230280622, 0.7695555229231313) ,
-  rgb (0.533683891477284, 0.6743909370521273, 0.7703325054879735) ,
-  rgb (0.5383401557517628, 0.677970811290954, 0.7711273443905772) ,
-  rgb (0.5430593242401823, 0.6815376725306588, 0.7719407969783508) ,
-  rgb (0.5478409815301863, 0.6850914221850988, 0.7727738647344087) ,
-  rgb (0.5526845058934713, 0.6886319451516638, 0.7736279426902245) ,
-  rgb (0.5575894041960517, 0.6921591145825405, 0.7745041337932782) ,
-  rgb (0.5625551535721934, 0.6956727838162965, 0.7754035914230984) ,
-  rgb (0.5675811785386197, 0.6991727930264627, 0.776327485342753) ,
-  rgb (0.5726668948158774, 0.7026589535425779, 0.7772770268091199) ,
-  rgb (0.5778116438998202, 0.7061310615715398, 0.7782534512102552) ,
-  rgb (0.5830148703693241, 0.7095888767699747, 0.7792578182047659) ,
-  rgb (0.588275797805555, 0.7130321464645814, 0.7802914140563652) ,
-  rgb (0.5935933569683722, 0.7164606049658685, 0.781355882376401) ,
-  rgb (0.5989665814482068, 0.7198739489224673, 0.7824525989934664) ,
-  rgb (0.6043943420027486, 0.7232718614323369, 0.7835829559353559) ,
-  rgb (0.6098754317609306, 0.7266539875975829, 0.7847483573269471) ,
-  rgb (0.6154084641177048, 0.7300199523273969, 0.7859502270675048) ,
-  rgb (0.6209919306481755, 0.733369347989232, 0.7871899462469658) ,
-  rgb (0.6266240202260459, 0.7367017540369944, 0.7884690131633456) ,
-  rgb (0.6323027138710603, 0.740016721601314, 0.7897889276264043) ,
-  rgb (0.6380258682854598, 0.7433137671403319, 0.7911510045957317) ,
-  rgb (0.6437910831099849, 0.7465923800833657, 0.7925565320130605) ,
-  rgb (0.6495957300425348, 0.7498520122194177, 0.7940067402149911) ,
-  rgb (0.6554369232645472, 0.7530920875676843, 0.7955027112903105) ,
-  rgb (0.6613112930078745, 0.7563120270871903, 0.7970456043491897) ,
-  rgb (0.6672147980375281, 0.7595112803730375, 0.7986367465453776) ,
-  rgb (0.6731442255942621, 0.7626890873389048, 0.8002762854580953) ,
-  rgb (0.6790955449988215, 0.765844721313959, 0.8019646617300199) ,
-  rgb (0.6850644615439593, 0.7689774029354699, 0.8037020626717691) ,
-  rgb (0.691046410093091, 0.7720862946067809, 0.8054884169067907) ,
-  rgb (0.6970365443886174, 0.7751705000806606, 0.8073233538006345) ,
-  rgb (0.7030297722540817, 0.7782290497335813, 0.8092061884805697) ,
-  rgb (0.709020781345393, 0.7812608871607091, 0.8111359185511793) ,
-  rgb (0.7150040307625213, 0.7842648709158119, 0.8131111655994991) ,
-  rgb (0.7209728066553678, 0.7872399592345264, 0.8151307392087926) ,
-  rgb (0.726921775128297, 0.7901846863592763, 0.8171921746672638) ,
-  rgb (0.7328454364552346, 0.7930974646884407, 0.8192926338423038) ,
-  rgb (0.7387377170049494, 0.7959766573503101, 0.8214292278043301) ,
-  rgb (0.7445924777189017, 0.7988204771958325, 0.8235986758615652) ,
-  rgb (0.750403467654067, 0.8016269900896532, 0.8257973785108242) ,
-  rgb (0.7561644358438198, 0.8043940873347794, 0.8280213899472) ,
-  rgb (0.7618690793798029, 0.8071194938764749, 0.830266486168872) ,
-  rgb (0.7675110850441786, 0.8098007598713145, 0.8325281663805967) ,
-  rgb (0.7730841659017094, 0.8124352473546601, 0.8348017295057968) ,
-  rgb (0.7785789200822759, 0.8150208937874255, 0.8370834463093898) ,
-  rgb (0.7839910104276492, 0.8175542640053343, 0.8393674746403673) ,
-  rgb (0.7893144556460892, 0.8200321318870201, 0.8416486380471222) ,
-  rgb (0.7945430508923111, 0.8224511622630462, 0.8439218478682798) ,
-  rgb (0.79967075421268, 0.8248078181208093, 0.8461821002957853) ,
-  rgb (0.8046916442981458, 0.8270983878056066, 0.8484244929697402) ,
-  rgb (0.8095999819094809, 0.8293189667350546, 0.8506444160105037) ,
-  rgb (0.8143898212114309, 0.8314655869419785, 0.8528375906214702) ,
-  rgb (0.8190465467793753, 0.8335364929949034, 0.855002062870101) ,
-  rgb (0.8235742968025285, 0.8355248776479544, 0.8571319132851495) ,
-  rgb (0.8279689431601354, 0.837426007513952, 0.8592239945130679) ,
-  rgb (0.8322270571293441, 0.8392349062775448, 0.8612756350042788) ,
-  rgb (0.8363403180919118, 0.8409479651895194, 0.8632852800107016) ,
-  rgb (0.8403042080595778, 0.8425605950855084, 0.865250882410458) ,
-  rgb (0.8441261828674842, 0.8440648271103739, 0.8671697332269007) ,
-  rgb (0.8478071070257792, 0.8454546229209523, 0.8690403678369444) ,
-  rgb (0.8513371457085719, 0.8467273579611647, 0.8708608165735044) ,
-  rgb (0.8547259318925698, 0.8478748812467282, 0.8726282980930582) ,
-  rgb (0.8579825924567037, 0.8488893481028184, 0.8743403855344628) ,
-  rgb (0.8611024543689985, 0.8497675485700126, 0.8759924292343957) ,
-  rgb (0.86408985081464, 0.8505039116750779, 0.8775792578489263) ,
-  rgb (0.8669601550533358, 0.8510896085314068, 0.8790976697717334) ,
-  rgb (0.8697047485350982, 0.8515240300479789, 0.8805388339000336) ,
-  rgb (0.8723313408512408, 0.8518016547808089, 0.8818970435500162) ,
-  rgb (0.8748534750857597, 0.8519152612302319, 0.8831692696761383) ,
-  rgb (0.8772488085896548, 0.8518702833887027, 0.8843412038131143) ,
-  rgb (0.8795410528270573, 0.8516567540749572, 0.8854143767924102) ,
-  rgb (0.8817223105928579, 0.8512759407765347, 0.8863805692551482) ,
-  rgb (0.8837852019553906, 0.8507294054031063, 0.8872322209694989) ,
-  rgb (0.8857501584075443, 0.8500092494306783, 0.8879736506427196) ,
-  rgb (0.8857115512284565, 0.8500218611585632, 0.8857253899008712) ,
-  rgb (0.8855471481195238, 0.8498717428363158, 0.8833620612117095) ,
-  rgb (0.8852589797263047, 0.8495589281098921, 0.8808841479402484) ,
-  rgb (0.8848513815990857, 0.849084264228938, 0.8782823528537247) ,
-  rgb (0.8843271305411354, 0.8484474157205542, 0.8755678522824297) ,
-  rgb (0.8836912714589804, 0.8476489176151927, 0.8727414710144156) ,
-  rgb (0.8829516859544853, 0.8466897027569927, 0.8697961704819097) ,
-  rgb (0.8821154248940161, 0.8455700725455935, 0.8667376504623333) ,
-  rgb (0.8811916987134195, 0.8442906671771735, 0.8635659516866988) ,
-  rgb (0.8801929331569581, 0.8428522482477862, 0.8602739992715663) ,
-  rgb (0.8791324424079277, 0.8412555488447591, 0.8568557229103964) ,
-  rgb (0.8780229843664901, 0.8395016561854007, 0.8533064535245892) ,
-  rgb (0.8768784845161469, 0.8375923807118654, 0.8496137354915025) ,
-  rgb (0.875714587099614, 0.8355302318472394, 0.8457553751902708) ,
-  rgb (0.8745379332026019, 0.8333197294864546, 0.8417192535806901) ,
-  rgb (0.8733517136091627, 0.8309671525127262, 0.8374885100119709) ,
-  rgb (0.8721533197845432, 0.8284805282370967, 0.8330486712880828) ,
-  rgb (0.8709384671729751, 0.8258685788943851, 0.8283849726114961) ,
-  rgb (0.8696913150261381, 0.8231415885956916, 0.8235047668317317) ,
-  rgb (0.8683995469581863, 0.8203087551218152, 0.8184163896312899) ,
-  rgb (0.867053149070485, 0.8173780404191124, 0.813134196269114) ,
-  rgb (0.8656493432560532, 0.8143554406751491, 0.8076697232416455) ,
-  rgb (0.8641834372394103, 0.8112464422465354, 0.8020461269686395) ,
-  rgb (0.8626560105112757, 0.8080552380426153, 0.796282666437655) ,
-  rgb (0.8610711702756552, 0.8047851790981223, 0.7903952966373629) ,
-  rgb (0.8594346370300241, 0.8014392309950078, 0.7843978875138392) ,
-  rgb (0.857756629435049, 0.7980196314271393, 0.778295716672475) ,
-  rgb (0.856040223147254, 0.7945296360155061, 0.7721061003767414) ,
-  rgb (0.8542921961147046, 0.7909719677709199, 0.765838014779141) ,
-  rgb (0.8525190720770844, 0.7873493613354844, 0.7594994148789691) ,
-  rgb (0.8507269702317879, 0.7836645734238389, 0.7530974636118285) ,
-  rgb (0.8489224556311764, 0.7799202140765015, 0.7466371929366437) ,
-  rgb (0.847111955079651, 0.7761188023604716, 0.7401227576280706) ,
-  rgb (0.8452981073195511, 0.7722633860104472, 0.7335636824054149) ,
-  rgb (0.843485292229337, 0.7683566039987018, 0.7269653699897204) ,
-  rgb (0.8416775076684515, 0.7644010120098295, 0.7203329938728462) ,
-  rgb (0.8398783988412087, 0.7603990719977968, 0.7136714781112923) ,
-  rgb (0.8380912347613196, 0.7563531486080863, 0.7069856139021298) ,
-  rgb (0.8363189884473793, 0.7522654895287526, 0.7002799902886496) ,
-  rgb (0.8345656905566583, 0.7481379479992134, 0.6935569764986385) ,
-  rgb (0.8328327718577798, 0.7439727181745988, 0.6868223587464855) ,
-  rgb (0.8311216352909631, 0.7397718464763862, 0.6800812520363146) ,
-  rgb (0.8294340781648147, 0.7355371221572935, 0.6733377200930191) ,
-  rgb (0.8277716072353446, 0.7312702332407809, 0.6665957020468297) ,
-  rgb (0.8261354971058026, 0.7269727551823826, 0.659859001562165) ,
-  rgb (0.8245268129450285, 0.7226461431208888, 0.653131379154226) ,
-  rgb (0.8229463511042843, 0.7182917733129006, 0.6464164243818421) ,
-  rgb (0.8213947205565636, 0.7139109141951604, 0.6397176669767276) ,
-  rgb (0.8198723065045529, 0.7095047497878748, 0.6330385704006711) ,
-  rgb (0.8183793116449822, 0.705074381896351, 0.626382454789333) ,
-  rgb (0.8169157577505589, 0.7006208301478398, 0.6197526063725792) ,
-  rgb (0.8154814662727948, 0.6961450550830809, 0.6131522120932265) ,
-  rgb (0.8140761104699334, 0.6916479479148213, 0.6065843782630862) ,
-  rgb (0.8126992203988149, 0.6871303371461888, 0.600052148204351) ,
-  rgb (0.8113501401176333, 0.6825930154624339, 0.5935584890905076) ,
-  rgb (0.8100280946652069, 0.6780367267397182, 0.5871062690808275) ,
-  rgb (0.8087321917008969, 0.6734621670219452, 0.5806983480557674) ,
-  rgb (0.8074614045096935, 0.6688700095398864, 0.5743374637345958) ,
-  rgb (0.8062146052692706, 0.6642608958528229, 0.5680262917864979) ,
-  rgb (0.804990547908103, 0.6596354502756416, 0.5617674511054698) ,
-  rgb (0.8037879253107763, 0.6549942654947263, 0.5555635086708381) ,
-  rgb (0.8026053114611295, 0.6503379374810385, 0.5494169158460365) ,
-  rgb (0.8014412429256005, 0.6456670345921877, 0.5433300863249918) ,
-  rgb (0.8002941538975398, 0.6409821330674986, 0.5373053518514104) ,
-  rgb (0.7991624518501963, 0.6362837937202919, 0.5313449594256143) ,
-  rgb (0.7980444781513664, 0.6315725822508955, 0.5254510814483478) ,
-  rgb (0.7969385471995161, 0.626849056792967, 0.5196258425240281) ,
-  rgb (0.7958429237958377, 0.6221137880845115, 0.5138712409190979) ,
-  rgb (0.7947558597265404, 0.617367344002207, 0.5081892121310299) ,
-  rgb (0.7936755969866496, 0.6126102933407219, 0.5025816129126943) ,
-  rgb (0.7926003430423745, 0.6078432208703702, 0.4970502062153201) ,
-  rgb (0.7915283284347561, 0.603066705931472, 0.49159667021646397) ,
-  rgb (0.7904577684772788, 0.5982813427706246, 0.48622257801969754) ,
-  rgb (0.7893873776625194, 0.5934875421745599, 0.48092913815357724) ,
-  rgb (0.7883151404562396, 0.5886860017356244, 0.4757179187907608) ,
-  rgb (0.7872390410818835, 0.5838774374455721, 0.47059039582133383) ,
-  rgb (0.7861573713233296, 0.5790624629815756, 0.465547782819184) ,
-  rgb (0.7850684501960684, 0.5742417003617839, 0.46059116206904965) ,
-  rgb (0.7839706083641448, 0.5694157832671042, 0.4557215474289206) ,
-  rgb (0.7828622526444091, 0.5645853311116688, 0.45093985823706345) ,
-  rgb (0.7817418047898184, 0.5597509805259486, 0.44624687186865436) ,
-  rgb (0.7806077474948377, 0.5549133574489061, 0.4416433242636464) ,
-  rgb (0.7794586273150664, 0.5500730841397727, 0.4371297985644476) ,
-  rgb (0.7782934580763312, 0.545230594884266, 0.432706647838971) ,
-  rgb (0.7771103295521099, 0.5403867491056124, 0.4283745037125848) ,
-  rgb (0.775907907306857, 0.5355421788246119, 0.42413367909988375) ,
-  rgb (0.774684947460632, 0.5306974938477673, 0.4199844035696376) ,
-  rgb (0.7734402182988989, 0.5258533209345156, 0.41592679539764366) ,
-  rgb (0.7721725722960555, 0.5210102658711383, 0.4119608998712287) ,
-  rgb (0.7708809196230247, 0.516168926434691, 0.40808667584648967) ,
-  rgb (0.7695642334401418, 0.5113298901696085, 0.4043039806968248) ,
-  rgb (0.768221765997353, 0.5064936237128791, 0.40061257089416885) ,
-  rgb (0.7668522895064389, 0.5016608471009063, 0.39701221751773474) ,
-  rgb (0.7654549259333051, 0.4968321290972723, 0.3935025400011538) ,
-  rgb (0.7640288560928866, 0.49200802533379656, 0.39008308392311997) ,
-  rgb (0.7625733355405261, 0.48718906673415824, 0.38675335037837993) ,
-  rgb (0.7610876378057071, 0.48237579130289127, 0.3835127572385229) ,
-  rgb (0.7595711110534006, 0.4775687122205708, 0.380360657784311) ,
-  rgb (0.7580232553845584, 0.4727682731566229, 0.3772963553109668) ,
-  rgb (0.7564434157714071, 0.4679750143794846, 0.37431909037543515) ,
-  rgb (0.7548310506695954, 0.46318942799460555, 0.3714280448394211) ,
-  rgb (0.7531856636904657, 0.45841199172949604, 0.3686223664223477) ,
-  rgb (0.7515068504589166, 0.45364314496866825, 0.36590112443835765) ,
-  rgb (0.7497942054717047, 0.4488833348154881, 0.3632633755836028) ,
-  rgb (0.7480473927555956, 0.44413297780351974, 0.36070813602540136) ,
-  rgb (0.7462661578916344, 0.439392450449735, 0.3582343914230064) ,
-  rgb (0.7444501867657067, 0.4346621718461711, 0.35584108091122535) ,
-  rgb (0.7425992159973317, 0.42994254036133867, 0.3535270924537459) ,
-  rgb (0.7407130161950609, 0.4252339389526239, 0.35129130890802607) ,
-  rgb (0.7387914002459927, 0.4205367299231533, 0.34913260148542435) ,
-  rgb (0.7368342217358587, 0.4158512585029011, 0.347049785207584) ,
-  rgb (0.7348413359856494, 0.4111778700451951, 0.3450416947080907) ,
-  rgb (0.7328127050626875, 0.4065168468778026, 0.3431071517341082) ,
-  rgb (0.7307482075484517, 0.401868526884681, 0.3412449533046818) ,
-  rgb (0.7286477385671655, 0.39723324476747235, 0.33945384341064017) ,
-  rgb (0.7265112290022755, 0.3926113126792577, 0.3377325942005665) ,
-  rgb (0.7243386564778159, 0.38800301593162145, 0.3360799596569183) ,
-  rgb (0.7221299918421461, 0.3834086450896306, 0.33449469983585844) ,
-  rgb (0.7198852149054985, 0.37882848839337313, 0.332975552002454) ,
-  rgb (0.7176044490813385, 0.3742627271068619, 0.3315213862095893) ,
-  rgb (0.7152876061484729, 0.3697117022522345, 0.3301308728723546) ,
-  rgb (0.7129346683977347, 0.36517570519856757, 0.3288027427038317) ,
-  rgb (0.7105456546582587, 0.36065500290840113, 0.3275357416278876) ,
-  rgb (0.7081205956842048, 0.356149855233803, 0.32632861885644465) ,
-  rgb (0.7056595112261009, 0.3516605297812094, 0.32518014084085567) ,
-  rgb (0.7031624945881415, 0.34718723719598, 0.32408913679491225) ,
-  rgb (0.700629624772421, 0.34273019305341756, 0.32305449047765694) ,
-  rgb (0.6980608153581771, 0.3382897632604862, 0.3220747885521809) ,
-  rgb (0.6954560834689112, 0.33386622163232865, 0.3211488430698579) ,
-  rgb (0.6928154484676493, 0.32945984647042675, 0.3202754315314667) ,
-  rgb (0.6901389321505248, 0.32507091815606004, 0.319453323328983) ,
-  rgb (0.6874265643516962, 0.32069970535138104, 0.3186813762227769) ,
-  rgb (0.6846785094249453, 0.3163463482122221, 0.31795870784057567) ,
-  rgb (0.6818945715094452, 0.31201133280550686, 0.3172838048924495) ,
-  rgb (0.6790747402815734, 0.30769497879760166, 0.31665545668946665) ,
-  rgb (0.6762189792440975, 0.30339762792450425, 0.3160724937230589) ,
-  rgb (0.6733272556481733, 0.29911962764489264, 0.3155337232398221) ,
-  rgb (0.670399595476762, 0.29486126309253047, 0.3150381395687221) ,
-  rgb (0.6674360376636913, 0.29062280081258873, 0.31458483752056837) ,
-  rgb (0.6644363246987884, 0.2864048361425618, 0.31417223403606975) ,
-  rgb (0.6614003753260178, 0.28220778870555907, 0.3137991292649849) ,
-  rgb (0.6583280801134499, 0.2780321095766563, 0.3134643447952643) ,
-  rgb (0.6552193260932713, 0.2738782665241015, 0.3131666792687211) ,
-  rgb (0.652074172902773, 0.269746505252367, 0.3129056060581917) ,
-  rgb (0.6488923016945825, 0.2656375533620908, 0.3126794181957019) ,
-  rgb (0.6456734938264543, 0.2615520316161528, 0.31248673753935263) ,
-  rgb (0.642417577481186, 0.257490519876798, 0.31232631707560987) ,
-  rgb (0.6391243387840212, 0.2534536546198314, 0.3121968961206398) ,
-  rgb (0.6357937104834237, 0.24944185818822678, 0.3120979395330059) ,
-  rgb (0.6324253485421027, 0.24545598775548677, 0.3120276597462445) ,
-  rgb (0.6290189201698587, 0.24149689191922535, 0.3119844719564572) ,
-  rgb (0.6255741650043496, 0.23756535071152696, 0.3119669831491227) ,
-  rgb (0.6220907982108261, 0.2336621873300741, 0.3119738327362739) ,
-  rgb (0.6185686525887719, 0.2297879924917992, 0.3120046383872893) ,
-  rgb (0.6150072323639137, 0.22594402043981826, 0.3120568068576574) ,
-  rgb (0.6114062072731884, 0.22213124697023234, 0.3121288139643524) ,
-  rgb (0.6077652399481865, 0.21835070166659282, 0.312219032918702) ,
-  rgb (0.6040840169673274, 0.21460331490206347, 0.31232652641170694) ,
-  rgb (0.6003621301041158, 0.21089030138947745, 0.3124493441041469) ,
-  rgb (0.5965991810912237, 0.207212956082026, 0.3125852303112123) ,
-  rgb (0.5927948053652026, 0.20357251410079796, 0.3127323483930494) ,
-  rgb (0.5889486193554471, 0.19997020971775276, 0.31288922211590126) ,
-  rgb (0.5850602439646688, 0.19640737049066315, 0.3130540116373273) ,
-  rgb (0.5811293276158656, 0.19288548904692518, 0.3132239939418394) ,
-  rgb (0.5771555081299204, 0.18940601489760422, 0.3133970433357208) ,
-  rgb (0.5731384575410787, 0.18597036007065024, 0.3135712686852) ,
-  rgb (0.5690778478401143, 0.18258004462335425, 0.3137444095679653) ,
-  rgb (0.564973435290177, 0.17923664950367169, 0.3139136046337036) ,
-  rgb (0.5608249903911717, 0.17594170887918095, 0.31407639883970623) ,
-  rgb (0.5566322903496934, 0.17269677158182117, 0.31423043195101424) ,
-  rgb (0.5523952157271191, 0.16950338809328983, 0.3143729155461537) ,
-  rgb (0.5481137003346762, 0.1663630904279047, 0.3145010299091471) ,
-  rgb (0.5437877131360856, 0.16327738551419116, 0.31461204226295625) ,
-  rgb (0.5394173664919906, 0.16024769309971934, 0.31470295028655965) ,
-  rgb (0.5350027976174474, 0.15727540775107324, 0.3147708520739653) ,
-  rgb (0.5305442048985645, 0.15436183633886777, 0.3148129978918713) ,
-  rgb (0.5260418962547748, 0.15150818660835483, 0.31482653406646727) ,
-  rgb (0.5214965286322996, 0.14871544765633712, 0.3148076795453443) ,
-  rgb (0.5169084880054446, 0.14598463068714407, 0.3147540759228004) ,
-  rgb (0.5122783510532176, 0.14331656120063752, 0.3146630922831542) ,
-  rgb (0.5076068118105369, 0.14071192654913128, 0.3145320012008257) ,
-  rgb (0.5028952497497061, 0.13817086581280427, 0.3143566215383367) ,
-  rgb (0.4981443546207415, 0.13569380302451714, 0.314135190862664) ,
-  rgb (0.49335504375145617, 0.13328091630401023, 0.31386561956734976) ,
-  rgb (0.48852847371852987, 0.13093210934893723, 0.31354553695453014) ,
-  rgb (0.48366628618847957, 0.1286467902201389, 0.31317188565991266) ,
-  rgb (0.47877034239726296, 0.12642401401409453, 0.3127417273582196) ,
-  rgb (0.473841437035254, 0.12426354237989065, 0.31225470169927194) ,
-  rgb (0.46888111384598413, 0.12216445576414045, 0.31170911458932665) ,
-  rgb (0.46389102840284874, 0.12012561256850712, 0.31110343446582983) ,
-  rgb (0.45887288947308297, 0.11814571137706886, 0.3104363697903881) ,
-  rgb (0.4538300508699989, 0.11622183788331528, 0.3097044124984492) ,
-  rgb (0.4487629917317482, 0.1143535557462255, 0.30890905921943196) ,
-  rgb (0.44367358645071275, 0.11253912421257944, 0.3080497309546545) ,
-  rgb (0.4385637818793154, 0.11077667828375456, 0.30712600062348083) ,
-  rgb (0.4334355841041439, 0.1090642347484701, 0.3061376792828915) ,
-  rgb (0.4282910131578975, 0.1073997763055258, 0.30508479060294547) ,
-  rgb (0.42313214269556043, 0.10578120994917611, 0.3039675809469457) ,
-  rgb (0.41796105205173684, 0.10420644885760968, 0.3027865203963184) ,
-  rgb (0.41277985630360303, 0.1026734006932461, 0.3015422643746897) ,
-  rgb (0.4075912039268871, 0.10117945586419633, 0.300235195077286) ,
-  rgb (0.40239692379737496, 0.09972293031495055, 0.2988667436973397) ,
-  rgb (0.39719876876325577, 0.09830232096827862, 0.2974385647628578) ,
-  rgb (0.39199887556812907, 0.09691583650296684, 0.2959521200550908) ,
-  rgb (0.3867993907954417, 0.09556181960083443, 0.29440901248173756) ,
-  rgb (0.38160247377467543, 0.09423873126371218, 0.2928110750626949) ,
-  rgb (0.3764103053221462, 0.09294519809377791, 0.2911602415731392) ,
-  rgb (0.3712250843130934, 0.09167999748026273, 0.2894586539763317) ,
-  rgb (0.36605031412464006, 0.0904406854276979, 0.2877077458811747) ,
-  rgb (0.36088752387578377, 0.0892271943627452, 0.28591050458531014) ,
-  rgb (0.35573889947341125, 0.08803897435024335, 0.2840695897279818) ,
-  rgb (0.3506067824603248, 0.08687555176033529, 0.28218770540182386) ,
-  rgb (0.345493557138718, 0.08573665496512634, 0.28026769921081435) ,
-  rgb (0.34040164359597463, 0.08462223619170267, 0.27831254595259397) ,
-  rgb (0.3353335322445545, 0.08353243411900396, 0.2763253435679004) ,
-  rgb (0.3302917447118144, 0.08246763389003825, 0.27430929404579435) ,
-  rgb (0.3252788886040126, 0.08142839007654609, 0.27226772884656186) ,
-  rgb (0.3202998655799406, 0.08041299473755484, 0.2702032289303951) ,
-  rgb (0.3153587000920581, 0.07942099731524319, 0.2681190407694196) ,
-  rgb (0.31045520848595526, 0.07845687167618218, 0.2660200572779356) ,
-  rgb (0.30559226007249934, 0.07752196310753731, 0.2639100669211966) ,
-  rgb (0.3007727681291869, 0.07661782433616476, 0.2617929409781967) ,
-  rgb (0.2960004726065818, 0.07574533600095842, 0.25967245030364566) ,
-  rgb (0.29128515387578635, 0.0748990498474667, 0.25755101595750435) ,
-  rgb (0.28662309235899847, 0.07408846082680887, 0.2554347867371703) ,
-  rgb (0.2820174629736694, 0.07331569321404097, 0.25332800295084507) ,
-  rgb (0.277471508091428, 0.07258296989925478, 0.2512349399594277) ,
-  rgb (0.272997015188973, 0.07188355544616351, 0.2491584709323293) ,
-  rgb (0.2685909594817286, 0.07122671627792246, 0.24710443563450618) ,
-  rgb (0.2642551220706094, 0.07061659562299544, 0.24507758869355967) ,
-  rgb (0.25999463887892144, 0.07005385560386188, 0.24308218808684579) ,
-  rgb (0.2558213554748177, 0.06953231029187984, 0.24112190491594204) ,
-  rgb (0.25172899728289466, 0.0690646308260355, 0.23920260612763083) ,
-  rgb (0.247720929905011, 0.06865333790948652, 0.2373288009471749) ,
-  rgb (0.2438114972024792, 0.06828985152901187, 0.23550427698321885) ,
-  rgb (0.23999586188690308, 0.06798502996477995, 0.23373434258507808) ,
-  rgb (0.23627495835774248, 0.06774359820987802, 0.23202360805926608) ,
-  rgb (0.23266299920501882, 0.06755710438847978, 0.23037617493752832) ,
-  rgb (0.2291562027859284, 0.06743473087115257, 0.22879681433956656) ,
-  rgb (0.2257539681670791, 0.06738213230014747, 0.22728984778098055) ,
-  rgb (0.22247308588973624, 0.06738821405309284, 0.22585960379408354) ,
-  rgb (0.21930503925136402, 0.06746578636294004, 0.22451023616807558) ,
-  rgb (0.21625279838647882, 0.06761633027051639, 0.22324568672294431) ,
-  rgb (0.2133313859647627, 0.06783014842602667, 0.2220704321302429) ,
-  rgb (0.21052882914958676, 0.06812195249816172, 0.22098759107715404) ,
-  rgb (0.20785704662965598, 0.06848439879702528, 0.22000133917653536) ,
-  rgb (0.20531725273301316, 0.06891959226639757, 0.21911516689288835) ,
-  rgb (0.20290365333558247, 0.06943524858045896, 0.21833167885096033) ,
-  rgb (0.20058760685133747, 0.07006457614998421, 0.21762721310371608) ,
-  rgb (0.19819343656336558, 0.07097462525273879, 0.21690975060032436) ,
-  rgb (0.19571853588267552, 0.07215778103960274, 0.21617499187076789) ,
-  rgb (0.1931548636579131, 0.07360681904011795, 0.21542362939081539) ,
-  rgb (0.19049578401722037, 0.07531127841678764, 0.2146562337112265) ,
-  rgb (0.18774482037046955, 0.07725158846803931, 0.21387448578597812) ,
-  rgb (0.18488035509396164, 0.07942573027972388, 0.21307651648984993)
-});
+    rgb (0.18739228342697645, 0.07710209689958833, 0.21618875376309582) ,
+      rgb (0.18975853639094634, 0.07501986186214377, 0.2193005075652994) ,
+      rgb (0.19199449184606268, 0.0731828306492733, 0.22243385243433622) ,
+      rgb (0.19410351363791453, 0.07160830485689157, 0.22558727307410353) ,
+      rgb (0.1960826032659409, 0.07032122724242362, 0.22874673279569585) ,
+      rgb (0.19794834061899208, 0.06931406607166066, 0.23194647381302336) ,
+      rgb (0.19971571438603364, 0.06859271055370472, 0.23517094067076993) ,
+      rgb (0.2015613376412984, 0.06798327102620025, 0.23852974228695395) ,
+      rgb (0.20352007949514977, 0.06744417961242422, 0.24205576625191821) ,
+      rgb (0.20558051999470117, 0.06699046239786874, 0.24572497420147632) ,
+      rgb (0.2077442377448806, 0.06661453200418091, 0.24954644291943817) ,
+      rgb (0.21001214221188125, 0.06630857391894718, 0.2535289048041211) ,
+      rgb (0.21237411048541005, 0.06608502466175845, 0.2576516509356954) ,
+      rgb (0.21482843531473683, 0.06594038561377849, 0.26191675992376573) ,
+      rgb (0.21737845072382705, 0.06585966123356204, 0.2663420934966951) ,
+      rgb (0.22001251100779617, 0.0658579189189076, 0.2709027999432586) ,
+      rgb (0.22272706739121817, 0.06593379067565194, 0.275597146520537) ,
+      rgb (0.22552164337737857, 0.0660781731193956, 0.28043398847505197) ,
+      rgb (0.2283917709422868, 0.06628997924139618, 0.28541074411068496) ,
+      rgb (0.23132955273021344, 0.06657618693909059, 0.29051361067988485) ,
+      rgb (0.23433055727563878, 0.0669355996616394, 0.295740099298676) ,
+      rgb (0.23739062429054825, 0.06736588805055552, 0.3010892218406587) ,
+      rgb (0.2405081333229594, 0.0678571038148556, 0.3065705449367832) ,
+      rgb (0.24367372557466271, 0.06841985515092269, 0.3121652405088837) ,
+      rgb (0.24688226237959, 0.06905363944920445, 0.31786993834254956) ,
+      rgb (0.2501284530619938, 0.06975820642910699, 0.32368100685760637) ,
+      rgb (0.25340685873736807, 0.07053358292685183, 0.3295945757321303) ,
+      rgb (0.256711916510839, 0.07138010624208224, 0.3356064898460009) ,
+      rgb (0.26003895187439957, 0.0722947810433622, 0.3417175669546984) ,
+      rgb (0.26338121807151404, 0.07328165793989708, 0.34791888996380105) ,
+      rgb (0.26673233211995284, 0.0743440180285462, 0.3542027606624096) ,
+      rgb (0.2700863774911405, 0.07548367558427554, 0.36056376228111864) ,
+      rgb (0.2734373934245081, 0.07670280023749607, 0.36699616136347685) ,
+      rgb (0.2767793961581559, 0.07800394103378822, 0.37349382846504675) ,
+      rgb (0.2801063857697547, 0.07938999480226153, 0.38005028528138707) ,
+      rgb (0.28341239797185225, 0.08086415336549937, 0.38665868550105914) ,
+      rgb (0.28669151388283165, 0.08242987384848069, 0.39331182532243375) ,
+      rgb (0.2899379244517661, 0.08409078829085731, 0.40000214725256295) ,
+      rgb (0.2931459309698525, 0.08585065688962071, 0.40672178082365834) ,
+      rgb (0.2963100038890529, 0.08771325096046395, 0.41346259134143476) ,
+      rgb (0.2994248396021477, 0.08968225371675004, 0.42021619665853854) ,
+      rgb (0.3024853636457425, 0.0917611873973036, 0.42697404043749887) ,
+      rgb (0.30548675819945936, 0.09395276484082374, 0.4337284999936111) ,
+      rgb (0.30842444457210105, 0.09625938534057774, 0.44047194882050544) ,
+      rgb (0.31129434479712365, 0.0986847719340522, 0.4471931371516162) ,
+      rgb (0.3140927841475553, 0.10123077676403242, 0.45388335612058467) ,
+      rgb (0.316816480890235, 0.10389861387653518, 0.46053414662739794) ,
+      rgb (0.31946262395497965, 0.1066887988239266, 0.46713728801395243) ,
+      rgb (0.3220288227606932, 0.10960114111258401, 0.4736849472572688) ,
+      rgb (0.32451307931207785, 0.11263459791730848, 0.48017007211645196) ,
+      rgb (0.3269137124539796, 0.1157873496841953, 0.4865864649569746) ,
+      rgb (0.3292300520323141, 0.11905764321981127, 0.49292595612342666) ,
+      rgb (0.33146154891145124, 0.12244245263391232, 0.4991827458843107) ,
+      rgb (0.33360804901486, 0.1259381830100592, 0.505351647966549) ,
+      rgb (0.33566978565015315, 0.12954074251271822, 0.5114280721516895) ,
+      rgb (0.3376473209067111, 0.13324562282438077, 0.5174080757397947) ,
+      rgb (0.33954168752669694, 0.1370480189671817, 0.5232879753508524) ,
+      rgb (0.34135411074506483, 0.1409427920655632, 0.5290650094033675) ,
+      rgb (0.34308600291572294, 0.14492465359918028, 0.534737042820671) ,
+      rgb (0.34473901574536375, 0.1489882058982641, 0.5403024592040654) ,
+      rgb (0.3463150717579309, 0.15312802296627787, 0.5457599924248665) ,
+      rgb (0.3478165323877778, 0.1573386351115298, 0.5511085345270326) ,
+      rgb (0.34924513554955644, 0.16161477763045118, 0.5563483747416378) ,
+      rgb (0.3506030444193101, 0.1659512998472086, 0.5614796470399323) ,
+      rgb (0.3518924860887379, 0.17034320478524959, 0.5665028491121665) ,
+      rgb (0.35311574421123737, 0.17478570377561287, 0.5714187152355529) ,
+      rgb (0.3542753496066376, 0.17927413271618647, 0.5762280966066872) ,
+      rgb (0.3553741530690672, 0.18380392577704466, 0.580931914318328) ,
+      rgb (0.35641381143126327, 0.18837119869242164, 0.5855320765920552) ,
+      rgb (0.35739663292915563, 0.1929720819784246, 0.5900301125106313) ,
+      rgb (0.3583248996661781, 0.197602942459778, 0.5944276851750107) ,
+      rgb (0.35920088560930186, 0.20226037920758122, 0.5987265295935138) ,
+      rgb (0.36002681809096376, 0.20694122817889948, 0.6029284543191687) ,
+      rgb (0.36080493826624654, 0.21164251793458128, 0.6070353217206471) ,
+      rgb (0.36153829010998356, 0.21636111429594002, 0.6110488067964093) ,
+      rgb (0.36222809558295926, 0.22109488427338303, 0.6149711234609613) ,
+      rgb (0.3628764356004103, 0.2258414929328703, 0.6188041741082302) ,
+      rgb (0.36348537610385145, 0.2305987621839642, 0.6225498862239288) ,
+      rgb (0.3640569302208851, 0.23536470386204195, 0.6262101345195302) ,
+      rgb (0.3645930889012501, 0.24013747024823828, 0.629786801550261) ,
+      rgb (0.3650957984588681, 0.24491536803550484, 0.6332817352005559) ,
+      rgb (0.3655669837353898, 0.24969683475296395, 0.6366967518748858) ,
+      rgb (0.36600853966739794, 0.25448043878086224, 0.6400336180336859) ,
+      rgb (0.3664224325155063, 0.25926481158628106, 0.6432940914076554) ,
+      rgb (0.3668108554010799, 0.26404857724525643, 0.6464799165290824) ,
+      rgb (0.36717513650699446, 0.26883085667326956, 0.6495927229789225) ,
+      rgb (0.36751707094367697, 0.2736106331709098, 0.6526341171161864) ,
+      rgb (0.3678384369653108, 0.2783869718129776, 0.655605668384537) ,
+      rgb (0.3681410147989972, 0.2831590122118299, 0.6585088880697231) ,
+      rgb (0.36842655638020444, 0.2879259643777846, 0.661345269109446) ,
+      rgb (0.3686968223189527, 0.292687098561501, 0.6641162529823691) ,
+      rgb (0.3689535530659678, 0.29744175492366276, 0.6668232208982426) ,
+      rgb (0.36919847837592484, 0.3021893217650707, 0.6694675433161452) ,
+      rgb (0.3694333459127623, 0.3069292355186234, 0.6720505284912062) ,
+      rgb (0.36965987626565955, 0.3116609876295197, 0.6745734474341955) ,
+      rgb (0.3698798032902536, 0.31638410101153364, 0.6770375543809057) ,
+      rgb (0.37009487130772695, 0.3210981375964933, 0.6794440539905685) ,
+      rgb (0.37030682071842685, 0.32580269697872455, 0.6817941168448668) ,
+      rgb (0.37051738634484427, 0.3304974124430785, 0.6840888878885721) ,
+      rgb (0.3707283327942267, 0.33518193808489577, 0.6863294816960677) ,
+      rgb (0.3709415155133733, 0.33985591488818123, 0.6885170337950512) ,
+      rgb (0.37115856636209105, 0.3445191141023017, 0.6906525358646499) ,
+      rgb (0.37138124223736607, 0.34917126878479027, 0.6927370347192883) ,
+      rgb (0.3716113323440048, 0.3538121372967869, 0.6947714991938089) ,
+      rgb (0.3718506155898596, 0.3584414828587522, 0.6967569581025654) ,
+      rgb (0.3721008970244382, 0.3630590973698238, 0.6986943461507372) ,
+      rgb (0.37236397858465387, 0.36766477862108266, 0.7005846349652077) ,
+      rgb (0.37264166757849604, 0.3722583500483685, 0.7024287314570723) ,
+      rgb (0.3729357864666503, 0.3768396383521984, 0.7042275578058994) ,
+      rgb (0.37324816143326384, 0.38140848555753937, 0.7059820097480604) ,
+      rgb (0.3735806215098284, 0.3859647438605754, 0.7076929760731058) ,
+      rgb (0.3739349933047578, 0.3905082752937583, 0.7093613429347845) ,
+      rgb (0.3743131319931234, 0.3950389482828331, 0.7109879652237746) ,
+      rgb (0.3747168601930223, 0.3995566498711684, 0.7125736851650046) ,
+      rgb (0.37514802505380473, 0.4040612609993941, 0.7141193695725726) ,
+      rgb (0.375608469194424, 0.40855267638072096, 0.7156258509158755) ,
+      rgb (0.37610001286385814, 0.4130307995247706, 0.7170939691992023) ,
+      rgb (0.37662448930806297, 0.41749553747893614, 0.7185245473617611) ,
+      rgb (0.3771837184425123, 0.4219468022345483, 0.7199184152447577) ,
+      rgb (0.3777794975351373, 0.4263845142616835, 0.7212763999353023) ,
+      rgb (0.378413635091359, 0.43080859411413064, 0.7225993199306104) ,
+      rgb (0.3790878928311076, 0.43521897612544935, 0.7238879869132313) ,
+      rgb (0.3798040374484875, 0.4396155882122263, 0.7251432377876109) ,
+      rgb (0.3805638069656562, 0.4439983720863372, 0.7263658704513531) ,
+      rgb (0.3813688793045416, 0.4483672766927786, 0.7275567131714135) ,
+      rgb (0.38222094988570376, 0.45272225034283325, 0.7287165614400378) ,
+      rgb (0.3831216808440275, 0.457063235814072, 0.7298462679135326) ,
+      rgb (0.38407269378943537, 0.46139018782416635, 0.7309466543290268) ,
+      rgb (0.3850755679365139, 0.46570306719930193, 0.732018540336905) ,
+      rgb (0.386131841788921, 0.4700018340988123, 0.7330627749243106) ,
+      rgb (0.3872430145933025, 0.4742864593363539, 0.7340801678785439) ,
+      rgb (0.3884105330084243, 0.47855691131792805, 0.7350715764115726) ,
+      rgb (0.38963580160340855, 0.48281316715123496, 0.7360378254693274) ,
+      rgb (0.390920175719949, 0.4870552025122304, 0.7369797713388125) ,
+      rgb (0.39226494876209317, 0.4912830033289926, 0.7378982478447508) ,
+      rgb (0.39367135736822567, 0.4954965577745118, 0.738794102296364) ,
+      rgb (0.3951405880820763, 0.4996958532637776, 0.7396682021171571) ,
+      rgb (0.3966737490566561, 0.5038808905384797, 0.7405213858051674) ,
+      rgb (0.3982719152586337, 0.5080516653927614, 0.7413545091809972) ,
+      rgb (0.39993606933454834, 0.5122081814321852, 0.7421684457131799) ,
+      rgb (0.40166714010896104, 0.5163504496968876, 0.7429640345324835) ,
+      rgb (0.40346600333905397, 0.5204784765384003, 0.7437421522356709) ,
+      rgb (0.4053334378930318, 0.5245922817498312, 0.7445036583670813) ,
+      rgb (0.4072701869421907, 0.5286918801105741, 0.7452494263758127) ,
+      rgb (0.4092768899914751, 0.5327773017713032, 0.7459803063570782) ,
+      rgb (0.4113541469730457, 0.5368485776500593, 0.7466971285506578) ,
+      rgb (0.4135024574331473, 0.5409057477109848, 0.7474007329754309) ,
+      rgb (0.4157223260454232, 0.544948827153504, 0.7480920445900052) ,
+      rgb (0.4180141407923363, 0.5489778542188889, 0.7487719316700112) ,
+      rgb (0.42037822361396326, 0.5529928715810817, 0.7494412559451894) ,
+      rgb (0.4228148567577266, 0.5569939212699658, 0.7501008698822764) ,
+      rgb (0.42532423665011354, 0.560981049599503, 0.7507516498900512) ,
+      rgb (0.42790652284925834, 0.5649543060909209, 0.7513944352191484) ,
+      rgb (0.4305617907305757, 0.5689137457245718, 0.752030080993127) ,
+      rgb (0.43329008867358393, 0.5728594162560667, 0.7526594653256667) ,
+      rgb (0.4360913895835637, 0.5767913799818608, 0.7532834105961016) ,
+      rgb (0.43896563958048396, 0.5807096924109849, 0.7539027620828594) ,
+      rgb (0.441912717666964, 0.5846144110017557, 0.7545183888441067) ,
+      rgb (0.4449324685421538, 0.5885055998308617, 0.7551311041857901) ,
+      rgb (0.4480247093358917, 0.5923833145214658, 0.7557417647410792) ,
+      rgb (0.45118918687617743, 0.5962476205135354, 0.7563512064324664) ,
+      rgb (0.45442563977552913, 0.6000985950385866, 0.7569601366060649) ,
+      rgb (0.45773377230160567, 0.6039363004658646, 0.7575693690185916) ,
+      rgb (0.4611132664702388, 0.607760777169989, 0.7581798643680714) ,
+      rgb (0.4645637671630393, 0.6115720882286415, 0.7587924262302581) ,
+      rgb (0.46808490970531597, 0.6153702869579029, 0.7594078989109274) ,
+      rgb (0.4716762951887709, 0.6191554324288464, 0.7600270922788305) ,
+      rgb (0.47533752394906287, 0.6229275728383581, 0.7606508557181775) ,
+      rgb (0.47906816236197386, 0.6266867625186013, 0.7612800037566242) ,
+      rgb (0.4828677867260272, 0.6304330455306234, 0.761915371498953) ,
+      rgb (0.4867359599430568, 0.6341664625110051, 0.7625578008592404) ,
+      rgb (0.4906722493856122, 0.6378870485884708, 0.7632081276316384) ,
+      rgb (0.4946761847863938, 0.6415948411950443, 0.7638671900213091) ,
+      rgb (0.4987473366135607, 0.6452898684900934, 0.7645357873418008) ,
+      rgb (0.5028853540415561, 0.6489721673409526, 0.7652144671817491) ,
+      rgb (0.5070896957645166, 0.6526417240314645, 0.7659044566083585) ,
+      rgb (0.5113599254160193, 0.6562985398183186, 0.7666066378064533) ,
+      rgb (0.5156955988596057, 0.65994260812898, 0.7673219148959617) ,
+      rgb (0.5200962739223556, 0.6635739143403039, 0.768051194033441) ,
+      rgb (0.5245615147059358, 0.6671924299614223, 0.7687954171423095) ,
+      rgb (0.529090861832473, 0.6707981230280622, 0.7695555229231313) ,
+      rgb (0.533683891477284, 0.6743909370521273, 0.7703325054879735) ,
+      rgb (0.5383401557517628, 0.677970811290954, 0.7711273443905772) ,
+      rgb (0.5430593242401823, 0.6815376725306588, 0.7719407969783508) ,
+      rgb (0.5478409815301863, 0.6850914221850988, 0.7727738647344087) ,
+      rgb (0.5526845058934713, 0.6886319451516638, 0.7736279426902245) ,
+      rgb (0.5575894041960517, 0.6921591145825405, 0.7745041337932782) ,
+      rgb (0.5625551535721934, 0.6956727838162965, 0.7754035914230984) ,
+      rgb (0.5675811785386197, 0.6991727930264627, 0.776327485342753) ,
+      rgb (0.5726668948158774, 0.7026589535425779, 0.7772770268091199) ,
+      rgb (0.5778116438998202, 0.7061310615715398, 0.7782534512102552) ,
+      rgb (0.5830148703693241, 0.7095888767699747, 0.7792578182047659) ,
+      rgb (0.588275797805555, 0.7130321464645814, 0.7802914140563652) ,
+      rgb (0.5935933569683722, 0.7164606049658685, 0.781355882376401) ,
+      rgb (0.5989665814482068, 0.7198739489224673, 0.7824525989934664) ,
+      rgb (0.6043943420027486, 0.7232718614323369, 0.7835829559353559) ,
+      rgb (0.6098754317609306, 0.7266539875975829, 0.7847483573269471) ,
+      rgb (0.6154084641177048, 0.7300199523273969, 0.7859502270675048) ,
+      rgb (0.6209919306481755, 0.733369347989232, 0.7871899462469658) ,
+      rgb (0.6266240202260459, 0.7367017540369944, 0.7884690131633456) ,
+      rgb (0.6323027138710603, 0.740016721601314, 0.7897889276264043) ,
+      rgb (0.6380258682854598, 0.7433137671403319, 0.7911510045957317) ,
+      rgb (0.6437910831099849, 0.7465923800833657, 0.7925565320130605) ,
+      rgb (0.6495957300425348, 0.7498520122194177, 0.7940067402149911) ,
+      rgb (0.6554369232645472, 0.7530920875676843, 0.7955027112903105) ,
+      rgb (0.6613112930078745, 0.7563120270871903, 0.7970456043491897) ,
+      rgb (0.6672147980375281, 0.7595112803730375, 0.7986367465453776) ,
+      rgb (0.6731442255942621, 0.7626890873389048, 0.8002762854580953) ,
+      rgb (0.6790955449988215, 0.765844721313959, 0.8019646617300199) ,
+      rgb (0.6850644615439593, 0.7689774029354699, 0.8037020626717691) ,
+      rgb (0.691046410093091, 0.7720862946067809, 0.8054884169067907) ,
+      rgb (0.6970365443886174, 0.7751705000806606, 0.8073233538006345) ,
+      rgb (0.7030297722540817, 0.7782290497335813, 0.8092061884805697) ,
+      rgb (0.709020781345393, 0.7812608871607091, 0.8111359185511793) ,
+      rgb (0.7150040307625213, 0.7842648709158119, 0.8131111655994991) ,
+      rgb (0.7209728066553678, 0.7872399592345264, 0.8151307392087926) ,
+      rgb (0.726921775128297, 0.7901846863592763, 0.8171921746672638) ,
+      rgb (0.7328454364552346, 0.7930974646884407, 0.8192926338423038) ,
+      rgb (0.7387377170049494, 0.7959766573503101, 0.8214292278043301) ,
+      rgb (0.7445924777189017, 0.7988204771958325, 0.8235986758615652) ,
+      rgb (0.750403467654067, 0.8016269900896532, 0.8257973785108242) ,
+      rgb (0.7561644358438198, 0.8043940873347794, 0.8280213899472) ,
+      rgb (0.7618690793798029, 0.8071194938764749, 0.830266486168872) ,
+      rgb (0.7675110850441786, 0.8098007598713145, 0.8325281663805967) ,
+      rgb (0.7730841659017094, 0.8124352473546601, 0.8348017295057968) ,
+      rgb (0.7785789200822759, 0.8150208937874255, 0.8370834463093898) ,
+      rgb (0.7839910104276492, 0.8175542640053343, 0.8393674746403673) ,
+      rgb (0.7893144556460892, 0.8200321318870201, 0.8416486380471222) ,
+      rgb (0.7945430508923111, 0.8224511622630462, 0.8439218478682798) ,
+      rgb (0.79967075421268, 0.8248078181208093, 0.8461821002957853) ,
+      rgb (0.8046916442981458, 0.8270983878056066, 0.8484244929697402) ,
+      rgb (0.8095999819094809, 0.8293189667350546, 0.8506444160105037) ,
+      rgb (0.8143898212114309, 0.8314655869419785, 0.8528375906214702) ,
+      rgb (0.8190465467793753, 0.8335364929949034, 0.855002062870101) ,
+      rgb (0.8235742968025285, 0.8355248776479544, 0.8571319132851495) ,
+      rgb (0.8279689431601354, 0.837426007513952, 0.8592239945130679) ,
+      rgb (0.8322270571293441, 0.8392349062775448, 0.8612756350042788) ,
+      rgb (0.8363403180919118, 0.8409479651895194, 0.8632852800107016) ,
+      rgb (0.8403042080595778, 0.8425605950855084, 0.865250882410458) ,
+      rgb (0.8441261828674842, 0.8440648271103739, 0.8671697332269007) ,
+      rgb (0.8478071070257792, 0.8454546229209523, 0.8690403678369444) ,
+      rgb (0.8513371457085719, 0.8467273579611647, 0.8708608165735044) ,
+      rgb (0.8547259318925698, 0.8478748812467282, 0.8726282980930582) ,
+      rgb (0.8579825924567037, 0.8488893481028184, 0.8743403855344628) ,
+      rgb (0.8611024543689985, 0.8497675485700126, 0.8759924292343957) ,
+      rgb (0.86408985081464, 0.8505039116750779, 0.8775792578489263) ,
+      rgb (0.8669601550533358, 0.8510896085314068, 0.8790976697717334) ,
+      rgb (0.8697047485350982, 0.8515240300479789, 0.8805388339000336) ,
+      rgb (0.8723313408512408, 0.8518016547808089, 0.8818970435500162) ,
+      rgb (0.8748534750857597, 0.8519152612302319, 0.8831692696761383) ,
+      rgb (0.8772488085896548, 0.8518702833887027, 0.8843412038131143) ,
+      rgb (0.8795410528270573, 0.8516567540749572, 0.8854143767924102) ,
+      rgb (0.8817223105928579, 0.8512759407765347, 0.8863805692551482) ,
+      rgb (0.8837852019553906, 0.8507294054031063, 0.8872322209694989) ,
+      rgb (0.8857501584075443, 0.8500092494306783, 0.8879736506427196) ,
+      rgb (0.8857115512284565, 0.8500218611585632, 0.8857253899008712) ,
+      rgb (0.8855471481195238, 0.8498717428363158, 0.8833620612117095) ,
+      rgb (0.8852589797263047, 0.8495589281098921, 0.8808841479402484) ,
+      rgb (0.8848513815990857, 0.849084264228938, 0.8782823528537247) ,
+      rgb (0.8843271305411354, 0.8484474157205542, 0.8755678522824297) ,
+      rgb (0.8836912714589804, 0.8476489176151927, 0.8727414710144156) ,
+      rgb (0.8829516859544853, 0.8466897027569927, 0.8697961704819097) ,
+      rgb (0.8821154248940161, 0.8455700725455935, 0.8667376504623333) ,
+      rgb (0.8811916987134195, 0.8442906671771735, 0.8635659516866988) ,
+      rgb (0.8801929331569581, 0.8428522482477862, 0.8602739992715663) ,
+      rgb (0.8791324424079277, 0.8412555488447591, 0.8568557229103964) ,
+      rgb (0.8780229843664901, 0.8395016561854007, 0.8533064535245892) ,
+      rgb (0.8768784845161469, 0.8375923807118654, 0.8496137354915025) ,
+      rgb (0.875714587099614, 0.8355302318472394, 0.8457553751902708) ,
+      rgb (0.8745379332026019, 0.8333197294864546, 0.8417192535806901) ,
+      rgb (0.8733517136091627, 0.8309671525127262, 0.8374885100119709) ,
+      rgb (0.8721533197845432, 0.8284805282370967, 0.8330486712880828) ,
+      rgb (0.8709384671729751, 0.8258685788943851, 0.8283849726114961) ,
+      rgb (0.8696913150261381, 0.8231415885956916, 0.8235047668317317) ,
+      rgb (0.8683995469581863, 0.8203087551218152, 0.8184163896312899) ,
+      rgb (0.867053149070485, 0.8173780404191124, 0.813134196269114) ,
+      rgb (0.8656493432560532, 0.8143554406751491, 0.8076697232416455) ,
+      rgb (0.8641834372394103, 0.8112464422465354, 0.8020461269686395) ,
+      rgb (0.8626560105112757, 0.8080552380426153, 0.796282666437655) ,
+      rgb (0.8610711702756552, 0.8047851790981223, 0.7903952966373629) ,
+      rgb (0.8594346370300241, 0.8014392309950078, 0.7843978875138392) ,
+      rgb (0.857756629435049, 0.7980196314271393, 0.778295716672475) ,
+      rgb (0.856040223147254, 0.7945296360155061, 0.7721061003767414) ,
+      rgb (0.8542921961147046, 0.7909719677709199, 0.765838014779141) ,
+      rgb (0.8525190720770844, 0.7873493613354844, 0.7594994148789691) ,
+      rgb (0.8507269702317879, 0.7836645734238389, 0.7530974636118285) ,
+      rgb (0.8489224556311764, 0.7799202140765015, 0.7466371929366437) ,
+      rgb (0.847111955079651, 0.7761188023604716, 0.7401227576280706) ,
+      rgb (0.8452981073195511, 0.7722633860104472, 0.7335636824054149) ,
+      rgb (0.843485292229337, 0.7683566039987018, 0.7269653699897204) ,
+      rgb (0.8416775076684515, 0.7644010120098295, 0.7203329938728462) ,
+      rgb (0.8398783988412087, 0.7603990719977968, 0.7136714781112923) ,
+      rgb (0.8380912347613196, 0.7563531486080863, 0.7069856139021298) ,
+      rgb (0.8363189884473793, 0.7522654895287526, 0.7002799902886496) ,
+      rgb (0.8345656905566583, 0.7481379479992134, 0.6935569764986385) ,
+      rgb (0.8328327718577798, 0.7439727181745988, 0.6868223587464855) ,
+      rgb (0.8311216352909631, 0.7397718464763862, 0.6800812520363146) ,
+      rgb (0.8294340781648147, 0.7355371221572935, 0.6733377200930191) ,
+      rgb (0.8277716072353446, 0.7312702332407809, 0.6665957020468297) ,
+      rgb (0.8261354971058026, 0.7269727551823826, 0.659859001562165) ,
+      rgb (0.8245268129450285, 0.7226461431208888, 0.653131379154226) ,
+      rgb (0.8229463511042843, 0.7182917733129006, 0.6464164243818421) ,
+      rgb (0.8213947205565636, 0.7139109141951604, 0.6397176669767276) ,
+      rgb (0.8198723065045529, 0.7095047497878748, 0.6330385704006711) ,
+      rgb (0.8183793116449822, 0.705074381896351, 0.626382454789333) ,
+      rgb (0.8169157577505589, 0.7006208301478398, 0.6197526063725792) ,
+      rgb (0.8154814662727948, 0.6961450550830809, 0.6131522120932265) ,
+      rgb (0.8140761104699334, 0.6916479479148213, 0.6065843782630862) ,
+      rgb (0.8126992203988149, 0.6871303371461888, 0.600052148204351) ,
+      rgb (0.8113501401176333, 0.6825930154624339, 0.5935584890905076) ,
+      rgb (0.8100280946652069, 0.6780367267397182, 0.5871062690808275) ,
+      rgb (0.8087321917008969, 0.6734621670219452, 0.5806983480557674) ,
+      rgb (0.8074614045096935, 0.6688700095398864, 0.5743374637345958) ,
+      rgb (0.8062146052692706, 0.6642608958528229, 0.5680262917864979) ,
+      rgb (0.804990547908103, 0.6596354502756416, 0.5617674511054698) ,
+      rgb (0.8037879253107763, 0.6549942654947263, 0.5555635086708381) ,
+      rgb (0.8026053114611295, 0.6503379374810385, 0.5494169158460365) ,
+      rgb (0.8014412429256005, 0.6456670345921877, 0.5433300863249918) ,
+      rgb (0.8002941538975398, 0.6409821330674986, 0.5373053518514104) ,
+      rgb (0.7991624518501963, 0.6362837937202919, 0.5313449594256143) ,
+      rgb (0.7980444781513664, 0.6315725822508955, 0.5254510814483478) ,
+      rgb (0.7969385471995161, 0.626849056792967, 0.5196258425240281) ,
+      rgb (0.7958429237958377, 0.6221137880845115, 0.5138712409190979) ,
+      rgb (0.7947558597265404, 0.617367344002207, 0.5081892121310299) ,
+      rgb (0.7936755969866496, 0.6126102933407219, 0.5025816129126943) ,
+      rgb (0.7926003430423745, 0.6078432208703702, 0.4970502062153201) ,
+      rgb (0.7915283284347561, 0.603066705931472, 0.49159667021646397) ,
+      rgb (0.7904577684772788, 0.5982813427706246, 0.48622257801969754) ,
+      rgb (0.7893873776625194, 0.5934875421745599, 0.48092913815357724) ,
+      rgb (0.7883151404562396, 0.5886860017356244, 0.4757179187907608) ,
+      rgb (0.7872390410818835, 0.5838774374455721, 0.47059039582133383) ,
+      rgb (0.7861573713233296, 0.5790624629815756, 0.465547782819184) ,
+      rgb (0.7850684501960684, 0.5742417003617839, 0.46059116206904965) ,
+      rgb (0.7839706083641448, 0.5694157832671042, 0.4557215474289206) ,
+      rgb (0.7828622526444091, 0.5645853311116688, 0.45093985823706345) ,
+      rgb (0.7817418047898184, 0.5597509805259486, 0.44624687186865436) ,
+      rgb (0.7806077474948377, 0.5549133574489061, 0.4416433242636464) ,
+      rgb (0.7794586273150664, 0.5500730841397727, 0.4371297985644476) ,
+      rgb (0.7782934580763312, 0.545230594884266, 0.432706647838971) ,
+      rgb (0.7771103295521099, 0.5403867491056124, 0.4283745037125848) ,
+      rgb (0.775907907306857, 0.5355421788246119, 0.42413367909988375) ,
+      rgb (0.774684947460632, 0.5306974938477673, 0.4199844035696376) ,
+      rgb (0.7734402182988989, 0.5258533209345156, 0.41592679539764366) ,
+      rgb (0.7721725722960555, 0.5210102658711383, 0.4119608998712287) ,
+      rgb (0.7708809196230247, 0.516168926434691, 0.40808667584648967) ,
+      rgb (0.7695642334401418, 0.5113298901696085, 0.4043039806968248) ,
+      rgb (0.768221765997353, 0.5064936237128791, 0.40061257089416885) ,
+      rgb (0.7668522895064389, 0.5016608471009063, 0.39701221751773474) ,
+      rgb (0.7654549259333051, 0.4968321290972723, 0.3935025400011538) ,
+      rgb (0.7640288560928866, 0.49200802533379656, 0.39008308392311997) ,
+      rgb (0.7625733355405261, 0.48718906673415824, 0.38675335037837993) ,
+      rgb (0.7610876378057071, 0.48237579130289127, 0.3835127572385229) ,
+      rgb (0.7595711110534006, 0.4775687122205708, 0.380360657784311) ,
+      rgb (0.7580232553845584, 0.4727682731566229, 0.3772963553109668) ,
+      rgb (0.7564434157714071, 0.4679750143794846, 0.37431909037543515) ,
+      rgb (0.7548310506695954, 0.46318942799460555, 0.3714280448394211) ,
+      rgb (0.7531856636904657, 0.45841199172949604, 0.3686223664223477) ,
+      rgb (0.7515068504589166, 0.45364314496866825, 0.36590112443835765) ,
+      rgb (0.7497942054717047, 0.4488833348154881, 0.3632633755836028) ,
+      rgb (0.7480473927555956, 0.44413297780351974, 0.36070813602540136) ,
+      rgb (0.7462661578916344, 0.439392450449735, 0.3582343914230064) ,
+      rgb (0.7444501867657067, 0.4346621718461711, 0.35584108091122535) ,
+      rgb (0.7425992159973317, 0.42994254036133867, 0.3535270924537459) ,
+      rgb (0.7407130161950609, 0.4252339389526239, 0.35129130890802607) ,
+      rgb (0.7387914002459927, 0.4205367299231533, 0.34913260148542435) ,
+      rgb (0.7368342217358587, 0.4158512585029011, 0.347049785207584) ,
+      rgb (0.7348413359856494, 0.4111778700451951, 0.3450416947080907) ,
+      rgb (0.7328127050626875, 0.4065168468778026, 0.3431071517341082) ,
+      rgb (0.7307482075484517, 0.401868526884681, 0.3412449533046818) ,
+      rgb (0.7286477385671655, 0.39723324476747235, 0.33945384341064017) ,
+      rgb (0.7265112290022755, 0.3926113126792577, 0.3377325942005665) ,
+      rgb (0.7243386564778159, 0.38800301593162145, 0.3360799596569183) ,
+      rgb (0.7221299918421461, 0.3834086450896306, 0.33449469983585844) ,
+      rgb (0.7198852149054985, 0.37882848839337313, 0.332975552002454) ,
+      rgb (0.7176044490813385, 0.3742627271068619, 0.3315213862095893) ,
+      rgb (0.7152876061484729, 0.3697117022522345, 0.3301308728723546) ,
+      rgb (0.7129346683977347, 0.36517570519856757, 0.3288027427038317) ,
+      rgb (0.7105456546582587, 0.36065500290840113, 0.3275357416278876) ,
+      rgb (0.7081205956842048, 0.356149855233803, 0.32632861885644465) ,
+      rgb (0.7056595112261009, 0.3516605297812094, 0.32518014084085567) ,
+      rgb (0.7031624945881415, 0.34718723719598, 0.32408913679491225) ,
+      rgb (0.700629624772421, 0.34273019305341756, 0.32305449047765694) ,
+      rgb (0.6980608153581771, 0.3382897632604862, 0.3220747885521809) ,
+      rgb (0.6954560834689112, 0.33386622163232865, 0.3211488430698579) ,
+      rgb (0.6928154484676493, 0.32945984647042675, 0.3202754315314667) ,
+      rgb (0.6901389321505248, 0.32507091815606004, 0.319453323328983) ,
+      rgb (0.6874265643516962, 0.32069970535138104, 0.3186813762227769) ,
+      rgb (0.6846785094249453, 0.3163463482122221, 0.31795870784057567) ,
+      rgb (0.6818945715094452, 0.31201133280550686, 0.3172838048924495) ,
+      rgb (0.6790747402815734, 0.30769497879760166, 0.31665545668946665) ,
+      rgb (0.6762189792440975, 0.30339762792450425, 0.3160724937230589) ,
+      rgb (0.6733272556481733, 0.29911962764489264, 0.3155337232398221) ,
+      rgb (0.670399595476762, 0.29486126309253047, 0.3150381395687221) ,
+      rgb (0.6674360376636913, 0.29062280081258873, 0.31458483752056837) ,
+      rgb (0.6644363246987884, 0.2864048361425618, 0.31417223403606975) ,
+      rgb (0.6614003753260178, 0.28220778870555907, 0.3137991292649849) ,
+      rgb (0.6583280801134499, 0.2780321095766563, 0.3134643447952643) ,
+      rgb (0.6552193260932713, 0.2738782665241015, 0.3131666792687211) ,
+      rgb (0.652074172902773, 0.269746505252367, 0.3129056060581917) ,
+      rgb (0.6488923016945825, 0.2656375533620908, 0.3126794181957019) ,
+      rgb (0.6456734938264543, 0.2615520316161528, 0.31248673753935263) ,
+      rgb (0.642417577481186, 0.257490519876798, 0.31232631707560987) ,
+      rgb (0.6391243387840212, 0.2534536546198314, 0.3121968961206398) ,
+      rgb (0.6357937104834237, 0.24944185818822678, 0.3120979395330059) ,
+      rgb (0.6324253485421027, 0.24545598775548677, 0.3120276597462445) ,
+      rgb (0.6290189201698587, 0.24149689191922535, 0.3119844719564572) ,
+      rgb (0.6255741650043496, 0.23756535071152696, 0.3119669831491227) ,
+      rgb (0.6220907982108261, 0.2336621873300741, 0.3119738327362739) ,
+      rgb (0.6185686525887719, 0.2297879924917992, 0.3120046383872893) ,
+      rgb (0.6150072323639137, 0.22594402043981826, 0.3120568068576574) ,
+      rgb (0.6114062072731884, 0.22213124697023234, 0.3121288139643524) ,
+      rgb (0.6077652399481865, 0.21835070166659282, 0.312219032918702) ,
+      rgb (0.6040840169673274, 0.21460331490206347, 0.31232652641170694) ,
+      rgb (0.6003621301041158, 0.21089030138947745, 0.3124493441041469) ,
+      rgb (0.5965991810912237, 0.207212956082026, 0.3125852303112123) ,
+      rgb (0.5927948053652026, 0.20357251410079796, 0.3127323483930494) ,
+      rgb (0.5889486193554471, 0.19997020971775276, 0.31288922211590126) ,
+      rgb (0.5850602439646688, 0.19640737049066315, 0.3130540116373273) ,
+      rgb (0.5811293276158656, 0.19288548904692518, 0.3132239939418394) ,
+      rgb (0.5771555081299204, 0.18940601489760422, 0.3133970433357208) ,
+      rgb (0.5731384575410787, 0.18597036007065024, 0.3135712686852) ,
+      rgb (0.5690778478401143, 0.18258004462335425, 0.3137444095679653) ,
+      rgb (0.564973435290177, 0.17923664950367169, 0.3139136046337036) ,
+      rgb (0.5608249903911717, 0.17594170887918095, 0.31407639883970623) ,
+      rgb (0.5566322903496934, 0.17269677158182117, 0.31423043195101424) ,
+      rgb (0.5523952157271191, 0.16950338809328983, 0.3143729155461537) ,
+      rgb (0.5481137003346762, 0.1663630904279047, 0.3145010299091471) ,
+      rgb (0.5437877131360856, 0.16327738551419116, 0.31461204226295625) ,
+      rgb (0.5394173664919906, 0.16024769309971934, 0.31470295028655965) ,
+      rgb (0.5350027976174474, 0.15727540775107324, 0.3147708520739653) ,
+      rgb (0.5305442048985645, 0.15436183633886777, 0.3148129978918713) ,
+      rgb (0.5260418962547748, 0.15150818660835483, 0.31482653406646727) ,
+      rgb (0.5214965286322996, 0.14871544765633712, 0.3148076795453443) ,
+      rgb (0.5169084880054446, 0.14598463068714407, 0.3147540759228004) ,
+      rgb (0.5122783510532176, 0.14331656120063752, 0.3146630922831542) ,
+      rgb (0.5076068118105369, 0.14071192654913128, 0.3145320012008257) ,
+      rgb (0.5028952497497061, 0.13817086581280427, 0.3143566215383367) ,
+      rgb (0.4981443546207415, 0.13569380302451714, 0.314135190862664) ,
+      rgb (0.49335504375145617, 0.13328091630401023, 0.31386561956734976) ,
+      rgb (0.48852847371852987, 0.13093210934893723, 0.31354553695453014) ,
+      rgb (0.48366628618847957, 0.1286467902201389, 0.31317188565991266) ,
+      rgb (0.47877034239726296, 0.12642401401409453, 0.3127417273582196) ,
+      rgb (0.473841437035254, 0.12426354237989065, 0.31225470169927194) ,
+      rgb (0.46888111384598413, 0.12216445576414045, 0.31170911458932665) ,
+      rgb (0.46389102840284874, 0.12012561256850712, 0.31110343446582983) ,
+      rgb (0.45887288947308297, 0.11814571137706886, 0.3104363697903881) ,
+      rgb (0.4538300508699989, 0.11622183788331528, 0.3097044124984492) ,
+      rgb (0.4487629917317482, 0.1143535557462255, 0.30890905921943196) ,
+      rgb (0.44367358645071275, 0.11253912421257944, 0.3080497309546545) ,
+      rgb (0.4385637818793154, 0.11077667828375456, 0.30712600062348083) ,
+      rgb (0.4334355841041439, 0.1090642347484701, 0.3061376792828915) ,
+      rgb (0.4282910131578975, 0.1073997763055258, 0.30508479060294547) ,
+      rgb (0.42313214269556043, 0.10578120994917611, 0.3039675809469457) ,
+      rgb (0.41796105205173684, 0.10420644885760968, 0.3027865203963184) ,
+      rgb (0.41277985630360303, 0.1026734006932461, 0.3015422643746897) ,
+      rgb (0.4075912039268871, 0.10117945586419633, 0.300235195077286) ,
+      rgb (0.40239692379737496, 0.09972293031495055, 0.2988667436973397) ,
+      rgb (0.39719876876325577, 0.09830232096827862, 0.2974385647628578) ,
+      rgb (0.39199887556812907, 0.09691583650296684, 0.2959521200550908) ,
+      rgb (0.3867993907954417, 0.09556181960083443, 0.29440901248173756) ,
+      rgb (0.38160247377467543, 0.09423873126371218, 0.2928110750626949) ,
+      rgb (0.3764103053221462, 0.09294519809377791, 0.2911602415731392) ,
+      rgb (0.3712250843130934, 0.09167999748026273, 0.2894586539763317) ,
+      rgb (0.36605031412464006, 0.0904406854276979, 0.2877077458811747) ,
+      rgb (0.36088752387578377, 0.0892271943627452, 0.28591050458531014) ,
+      rgb (0.35573889947341125, 0.08803897435024335, 0.2840695897279818) ,
+      rgb (0.3506067824603248, 0.08687555176033529, 0.28218770540182386) ,
+      rgb (0.345493557138718, 0.08573665496512634, 0.28026769921081435) ,
+      rgb (0.34040164359597463, 0.08462223619170267, 0.27831254595259397) ,
+      rgb (0.3353335322445545, 0.08353243411900396, 0.2763253435679004) ,
+      rgb (0.3302917447118144, 0.08246763389003825, 0.27430929404579435) ,
+      rgb (0.3252788886040126, 0.08142839007654609, 0.27226772884656186) ,
+      rgb (0.3202998655799406, 0.08041299473755484, 0.2702032289303951) ,
+      rgb (0.3153587000920581, 0.07942099731524319, 0.2681190407694196) ,
+      rgb (0.31045520848595526, 0.07845687167618218, 0.2660200572779356) ,
+      rgb (0.30559226007249934, 0.07752196310753731, 0.2639100669211966) ,
+      rgb (0.3007727681291869, 0.07661782433616476, 0.2617929409781967) ,
+      rgb (0.2960004726065818, 0.07574533600095842, 0.25967245030364566) ,
+      rgb (0.29128515387578635, 0.0748990498474667, 0.25755101595750435) ,
+      rgb (0.28662309235899847, 0.07408846082680887, 0.2554347867371703) ,
+      rgb (0.2820174629736694, 0.07331569321404097, 0.25332800295084507) ,
+      rgb (0.277471508091428, 0.07258296989925478, 0.2512349399594277) ,
+      rgb (0.272997015188973, 0.07188355544616351, 0.2491584709323293) ,
+      rgb (0.2685909594817286, 0.07122671627792246, 0.24710443563450618) ,
+      rgb (0.2642551220706094, 0.07061659562299544, 0.24507758869355967) ,
+      rgb (0.25999463887892144, 0.07005385560386188, 0.24308218808684579) ,
+      rgb (0.2558213554748177, 0.06953231029187984, 0.24112190491594204) ,
+      rgb (0.25172899728289466, 0.0690646308260355, 0.23920260612763083) ,
+      rgb (0.247720929905011, 0.06865333790948652, 0.2373288009471749) ,
+      rgb (0.2438114972024792, 0.06828985152901187, 0.23550427698321885) ,
+      rgb (0.23999586188690308, 0.06798502996477995, 0.23373434258507808) ,
+      rgb (0.23627495835774248, 0.06774359820987802, 0.23202360805926608) ,
+      rgb (0.23266299920501882, 0.06755710438847978, 0.23037617493752832) ,
+      rgb (0.2291562027859284, 0.06743473087115257, 0.22879681433956656) ,
+      rgb (0.2257539681670791, 0.06738213230014747, 0.22728984778098055) ,
+      rgb (0.22247308588973624, 0.06738821405309284, 0.22585960379408354) ,
+      rgb (0.21930503925136402, 0.06746578636294004, 0.22451023616807558) ,
+      rgb (0.21625279838647882, 0.06761633027051639, 0.22324568672294431) ,
+      rgb (0.2133313859647627, 0.06783014842602667, 0.2220704321302429) ,
+      rgb (0.21052882914958676, 0.06812195249816172, 0.22098759107715404) ,
+      rgb (0.20785704662965598, 0.06848439879702528, 0.22000133917653536) ,
+      rgb (0.20531725273301316, 0.06891959226639757, 0.21911516689288835) ,
+      rgb (0.20290365333558247, 0.06943524858045896, 0.21833167885096033) ,
+      rgb (0.20058760685133747, 0.07006457614998421, 0.21762721310371608) ,
+      rgb (0.19819343656336558, 0.07097462525273879, 0.21690975060032436) ,
+      rgb (0.19571853588267552, 0.07215778103960274, 0.21617499187076789) ,
+      rgb (0.1931548636579131, 0.07360681904011795, 0.21542362939081539) ,
+      rgb (0.19049578401722037, 0.07531127841678764, 0.2146562337112265) ,
+      rgb (0.18774482037046955, 0.07725158846803931, 0.21387448578597812) ,
+      rgb (0.18488035509396164, 0.07942573027972388, 0.21307651648984993)
+      });
 
 
 list_data viridis = list_data(new pen[] {
-  rgb (0.267004, 0.004874, 0.329415) ,
-  rgb (0.26851, 0.009605, 0.335427) ,
-  rgb (0.269944, 0.014625, 0.341379) ,
-  rgb (0.271305, 0.019942, 0.347269) ,
-  rgb (0.272594, 0.025563, 0.353093) ,
-  rgb (0.273809, 0.031497, 0.358853) ,
-  rgb (0.274952, 0.037752, 0.364543) ,
-  rgb (0.276022, 0.044167, 0.370164) ,
-  rgb (0.277018, 0.050344, 0.375715) ,
-  rgb (0.277941, 0.056324, 0.381191) ,
-  rgb (0.278791, 0.062145, 0.386592) ,
-  rgb (0.279566, 0.067836, 0.391917) ,
-  rgb (0.280267, 0.073417, 0.397163) ,
-  rgb (0.280894, 0.078907, 0.402329) ,
-  rgb (0.281446, 0.08432, 0.407414) ,
-  rgb (0.281924, 0.089666, 0.412415) ,
-  rgb (0.282327, 0.094955, 0.417331) ,
-  rgb (0.282656, 0.100196, 0.42216) ,
-  rgb (0.28291, 0.105393, 0.426902) ,
-  rgb (0.283091, 0.110553, 0.431554) ,
-  rgb (0.283197, 0.11568, 0.436115) ,
-  rgb (0.283229, 0.120777, 0.440584) ,
-  rgb (0.283187, 0.125848, 0.44496) ,
-  rgb (0.283072, 0.130895, 0.449241) ,
-  rgb (0.282884, 0.13592, 0.453427) ,
-  rgb (0.282623, 0.140926, 0.457517) ,
-  rgb (0.28229, 0.145912, 0.46151) ,
-  rgb (0.281887, 0.150881, 0.465405) ,
-  rgb (0.281412, 0.155834, 0.469201) ,
-  rgb (0.280868, 0.160771, 0.472899) ,
-  rgb (0.280255, 0.165693, 0.476498) ,
-  rgb (0.279574, 0.170599, 0.479997) ,
-  rgb (0.278826, 0.17549, 0.483397) ,
-  rgb (0.278012, 0.180367, 0.486697) ,
-  rgb (0.277134, 0.185228, 0.489898) ,
-  rgb (0.276194, 0.190074, 0.493001) ,
-  rgb (0.275191, 0.194905, 0.496005) ,
-  rgb (0.274128, 0.199721, 0.498911) ,
-  rgb (0.273006, 0.20452, 0.501721) ,
-  rgb (0.271828, 0.209303, 0.504434) ,
-  rgb (0.270595, 0.214069, 0.507052) ,
-  rgb (0.269308, 0.218818, 0.509577) ,
-  rgb (0.267968, 0.223549, 0.512008) ,
-  rgb (0.26658, 0.228262, 0.514349) ,
-  rgb (0.265145, 0.232956, 0.516599) ,
-  rgb (0.263663, 0.237631, 0.518762) ,
-  rgb (0.262138, 0.242286, 0.520837) ,
-  rgb (0.260571, 0.246922, 0.522828) ,
-  rgb (0.258965, 0.251537, 0.524736) ,
-  rgb (0.257322, 0.25613, 0.526563) ,
-  rgb (0.255645, 0.260703, 0.528312) ,
-  rgb (0.253935, 0.265254, 0.529983) ,
-  rgb (0.252194, 0.269783, 0.531579) ,
-  rgb (0.250425, 0.27429, 0.533103) ,
-  rgb (0.248629, 0.278775, 0.534556) ,
-  rgb (0.246811, 0.283237, 0.535941) ,
-  rgb (0.244972, 0.287675, 0.53726) ,
-  rgb (0.243113, 0.292092, 0.538516) ,
-  rgb (0.241237, 0.296485, 0.539709) ,
-  rgb (0.239346, 0.300855, 0.540844) ,
-  rgb (0.237441, 0.305202, 0.541921) ,
-  rgb (0.235526, 0.309527, 0.542944) ,
-  rgb (0.233603, 0.313828, 0.543914) ,
-  rgb (0.231674, 0.318106, 0.544834) ,
-  rgb (0.229739, 0.322361, 0.545706) ,
-  rgb (0.227802, 0.326594, 0.546532) ,
-  rgb (0.225863, 0.330805, 0.547314) ,
-  rgb (0.223925, 0.334994, 0.548053) ,
-  rgb (0.221989, 0.339161, 0.548752) ,
-  rgb (0.220057, 0.343307, 0.549413) ,
-  rgb (0.21813, 0.347432, 0.550038) ,
-  rgb (0.21621, 0.351535, 0.550627) ,
-  rgb (0.214298, 0.355619, 0.551184) ,
-  rgb (0.212395, 0.359683, 0.55171) ,
-  rgb (0.210503, 0.363727, 0.552206) ,
-  rgb (0.208623, 0.367752, 0.552675) ,
-  rgb (0.206756, 0.371758, 0.553117) ,
-  rgb (0.204903, 0.375746, 0.553533) ,
-  rgb (0.203063, 0.379716, 0.553925) ,
-  rgb (0.201239, 0.38367, 0.554294) ,
-  rgb (0.19943, 0.387607, 0.554642) ,
-  rgb (0.197636, 0.391528, 0.554969) ,
-  rgb (0.19586, 0.395433, 0.555276) ,
-  rgb (0.1941, 0.399323, 0.555565) ,
-  rgb (0.192357, 0.403199, 0.555836) ,
-  rgb (0.190631, 0.407061, 0.556089) ,
-  rgb (0.188923, 0.41091, 0.556326) ,
-  rgb (0.187231, 0.414746, 0.556547) ,
-  rgb (0.185556, 0.41857, 0.556753) ,
-  rgb (0.183898, 0.422383, 0.556944) ,
-  rgb (0.182256, 0.426184, 0.55712) ,
-  rgb (0.180629, 0.429975, 0.557282) ,
-  rgb (0.179019, 0.433756, 0.55743) ,
-  rgb (0.177423, 0.437527, 0.557565) ,
-  rgb (0.175841, 0.44129, 0.557685) ,
-  rgb (0.174274, 0.445044, 0.557792) ,
-  rgb (0.172719, 0.448791, 0.557885) ,
-  rgb (0.171176, 0.45253, 0.557965) ,
-  rgb (0.169646, 0.456262, 0.55803) ,
-  rgb (0.168126, 0.459988, 0.558082) ,
-  rgb (0.166617, 0.463708, 0.558119) ,
-  rgb (0.165117, 0.467423, 0.558141) ,
-  rgb (0.163625, 0.471133, 0.558148) ,
-  rgb (0.162142, 0.474838, 0.55814) ,
-  rgb (0.160665, 0.47854, 0.558115) ,
-  rgb (0.159194, 0.482237, 0.558073) ,
-  rgb (0.157729, 0.485932, 0.558013) ,
-  rgb (0.15627, 0.489624, 0.557936) ,
-  rgb (0.154815, 0.493313, 0.55784) ,
-  rgb (0.153364, 0.497, 0.557724) ,
-  rgb (0.151918, 0.500685, 0.557587) ,
-  rgb (0.150476, 0.504369, 0.55743) ,
-  rgb (0.149039, 0.508051, 0.55725) ,
-  rgb (0.147607, 0.511733, 0.557049) ,
-  rgb (0.14618, 0.515413, 0.556823) ,
-  rgb (0.144759, 0.519093, 0.556572) ,
-  rgb (0.143343, 0.522773, 0.556295) ,
-  rgb (0.141935, 0.526453, 0.555991) ,
-  rgb (0.140536, 0.530132, 0.555659) ,
-  rgb (0.139147, 0.533812, 0.555298) ,
-  rgb (0.13777, 0.537492, 0.554906) ,
-  rgb (0.136408, 0.541173, 0.554483) ,
-  rgb (0.135066, 0.544853, 0.554029) ,
-  rgb (0.133743, 0.548535, 0.553541) ,
-  rgb (0.132444, 0.552216, 0.553018) ,
-  rgb (0.131172, 0.555899, 0.552459) ,
-  rgb (0.129933, 0.559582, 0.551864) ,
-  rgb (0.128729, 0.563265, 0.551229) ,
-  rgb (0.127568, 0.566949, 0.550556) ,
-  rgb (0.126453, 0.570633, 0.549841) ,
-  rgb (0.125394, 0.574318, 0.549086) ,
-  rgb (0.124395, 0.578002, 0.548287) ,
-  rgb (0.123463, 0.581687, 0.547445) ,
-  rgb (0.122606, 0.585371, 0.546557) ,
-  rgb (0.121831, 0.589055, 0.545623) ,
-  rgb (0.121148, 0.592739, 0.544641) ,
-  rgb (0.120565, 0.596422, 0.543611) ,
-  rgb (0.120092, 0.600104, 0.54253) ,
-  rgb (0.119738, 0.603785, 0.5414) ,
-  rgb (0.119512, 0.607464, 0.540218) ,
-  rgb (0.119423, 0.611141, 0.538982) ,
-  rgb (0.119483, 0.614817, 0.537692) ,
-  rgb (0.119699, 0.61849, 0.536347) ,
-  rgb (0.120081, 0.622161, 0.534946) ,
-  rgb (0.120638, 0.625828, 0.533488) ,
-  rgb (0.12138, 0.629492, 0.531973) ,
-  rgb (0.122312, 0.633153, 0.530398) ,
-  rgb (0.123444, 0.636809, 0.528763) ,
-  rgb (0.12478, 0.640461, 0.527068) ,
-  rgb (0.126326, 0.644107, 0.525311) ,
-  rgb (0.128087, 0.647749, 0.523491) ,
-  rgb (0.130067, 0.651384, 0.521608) ,
-  rgb (0.132268, 0.655014, 0.519661) ,
-  rgb (0.134692, 0.658636, 0.517649) ,
-  rgb (0.137339, 0.662252, 0.515571) ,
-  rgb (0.14021, 0.665859, 0.513427) ,
-  rgb (0.143303, 0.669459, 0.511215) ,
-  rgb (0.146616, 0.67305, 0.508936) ,
-  rgb (0.150148, 0.676631, 0.506589) ,
-  rgb (0.153894, 0.680203, 0.504172) ,
-  rgb (0.157851, 0.683765, 0.501686) ,
-  rgb (0.162016, 0.687316, 0.499129) ,
-  rgb (0.166383, 0.690856, 0.496502) ,
-  rgb (0.170948, 0.694384, 0.493803) ,
-  rgb (0.175707, 0.6979, 0.491033) ,
-  rgb (0.180653, 0.701402, 0.488189) ,
-  rgb (0.185783, 0.704891, 0.485273) ,
-  rgb (0.19109, 0.708366, 0.482284) ,
-  rgb (0.196571, 0.711827, 0.479221) ,
-  rgb (0.202219, 0.715272, 0.476084) ,
-  rgb (0.20803, 0.718701, 0.472873) ,
-  rgb (0.214, 0.722114, 0.469588) ,
-  rgb (0.220124, 0.725509, 0.466226) ,
-  rgb (0.226397, 0.728888, 0.462789) ,
-  rgb (0.232815, 0.732247, 0.459277) ,
-  rgb (0.239374, 0.735588, 0.455688) ,
-  rgb (0.24607, 0.73891, 0.452024) ,
-  rgb (0.252899, 0.742211, 0.448284) ,
-  rgb (0.259857, 0.745492, 0.444467) ,
-  rgb (0.266941, 0.748751, 0.440573) ,
-  rgb (0.274149, 0.751988, 0.436601) ,
-  rgb (0.281477, 0.755203, 0.432552) ,
-  rgb (0.288921, 0.758394, 0.428426) ,
-  rgb (0.296479, 0.761561, 0.424223) ,
-  rgb (0.304148, 0.764704, 0.419943) ,
-  rgb (0.311925, 0.767822, 0.415586) ,
-  rgb (0.319809, 0.770914, 0.411152) ,
-  rgb (0.327796, 0.77398, 0.40664) ,
-  rgb (0.335885, 0.777018, 0.402049) ,
-  rgb (0.344074, 0.780029, 0.397381) ,
-  rgb (0.35236, 0.783011, 0.392636) ,
-  rgb (0.360741, 0.785964, 0.387814) ,
-  rgb (0.369214, 0.788888, 0.382914) ,
-  rgb (0.377779, 0.791781, 0.377939) ,
-  rgb (0.386433, 0.794644, 0.372886) ,
-  rgb (0.395174, 0.797475, 0.367757) ,
-  rgb (0.404001, 0.800275, 0.362552) ,
-  rgb (0.412913, 0.803041, 0.357269) ,
-  rgb (0.421908, 0.805774, 0.35191) ,
-  rgb (0.430983, 0.808473, 0.346476) ,
-  rgb (0.440137, 0.811138, 0.340967) ,
-  rgb (0.449368, 0.813768, 0.335384) ,
-  rgb (0.458674, 0.816363, 0.329727) ,
-  rgb (0.468053, 0.818921, 0.323998) ,
-  rgb (0.477504, 0.821444, 0.318195) ,
-  rgb (0.487026, 0.823929, 0.312321) ,
-  rgb (0.496615, 0.826376, 0.306377) ,
-  rgb (0.506271, 0.828786, 0.300362) ,
-  rgb (0.515992, 0.831158, 0.294279) ,
-  rgb (0.525776, 0.833491, 0.288127) ,
-  rgb (0.535621, 0.835785, 0.281908) ,
-  rgb (0.545524, 0.838039, 0.275626) ,
-  rgb (0.555484, 0.840254, 0.269281) ,
-  rgb (0.565498, 0.84243, 0.262877) ,
-  rgb (0.575563, 0.844566, 0.256415) ,
-  rgb (0.585678, 0.846661, 0.249897) ,
-  rgb (0.595839, 0.848717, 0.243329) ,
-  rgb (0.606045, 0.850733, 0.236712) ,
-  rgb (0.616293, 0.852709, 0.230052) ,
-  rgb (0.626579, 0.854645, 0.223353) ,
-  rgb (0.636902, 0.856542, 0.21662) ,
-  rgb (0.647257, 0.8584, 0.209861) ,
-  rgb (0.657642, 0.860219, 0.203082) ,
-  rgb (0.668054, 0.861999, 0.196293) ,
-  rgb (0.678489, 0.863742, 0.189503) ,
-  rgb (0.688944, 0.865448, 0.182725) ,
-  rgb (0.699415, 0.867117, 0.175971) ,
-  rgb (0.709898, 0.868751, 0.169257) ,
-  rgb (0.720391, 0.87035, 0.162603) ,
-  rgb (0.730889, 0.871916, 0.156029) ,
-  rgb (0.741388, 0.873449, 0.149561) ,
-  rgb (0.751884, 0.874951, 0.143228) ,
-  rgb (0.762373, 0.876424, 0.137064) ,
-  rgb (0.772852, 0.877868, 0.131109) ,
-  rgb (0.783315, 0.879285, 0.125405) ,
-  rgb (0.79376, 0.880678, 0.120005) ,
-  rgb (0.804182, 0.882046, 0.114965) ,
-  rgb (0.814576, 0.883393, 0.110347) ,
-  rgb (0.82494, 0.88472, 0.106217) ,
-  rgb (0.83527, 0.886029, 0.102646) ,
-  rgb (0.845561, 0.887322, 0.099702) ,
-  rgb (0.85581, 0.888601, 0.097452) ,
-  rgb (0.866013, 0.889868, 0.095953) ,
-  rgb (0.876168, 0.891125, 0.09525) ,
-  rgb (0.886271, 0.892374, 0.095374) ,
-  rgb (0.89632, 0.893616, 0.096335) ,
-  rgb (0.906311, 0.894855, 0.098125) ,
-  rgb (0.916242, 0.896091, 0.100717) ,
-  rgb (0.926106, 0.89733, 0.104071) ,
-  rgb (0.935904, 0.89857, 0.108131) ,
-  rgb (0.945636, 0.899815, 0.112838) ,
-  rgb (0.9553, 0.901065, 0.118128) ,
-  rgb (0.964894, 0.902323, 0.123941) ,
-  rgb (0.974417, 0.90359, 0.130215) ,
-  rgb (0.983868, 0.904867, 0.136897) ,
-  rgb (0.993248, 0.906157, 0.143936)
-});
+    rgb (0.267004, 0.004874, 0.329415) ,
+      rgb (0.26851, 0.009605, 0.335427) ,
+      rgb (0.269944, 0.014625, 0.341379) ,
+      rgb (0.271305, 0.019942, 0.347269) ,
+      rgb (0.272594, 0.025563, 0.353093) ,
+      rgb (0.273809, 0.031497, 0.358853) ,
+      rgb (0.274952, 0.037752, 0.364543) ,
+      rgb (0.276022, 0.044167, 0.370164) ,
+      rgb (0.277018, 0.050344, 0.375715) ,
+      rgb (0.277941, 0.056324, 0.381191) ,
+      rgb (0.278791, 0.062145, 0.386592) ,
+      rgb (0.279566, 0.067836, 0.391917) ,
+      rgb (0.280267, 0.073417, 0.397163) ,
+      rgb (0.280894, 0.078907, 0.402329) ,
+      rgb (0.281446, 0.08432, 0.407414) ,
+      rgb (0.281924, 0.089666, 0.412415) ,
+      rgb (0.282327, 0.094955, 0.417331) ,
+      rgb (0.282656, 0.100196, 0.42216) ,
+      rgb (0.28291, 0.105393, 0.426902) ,
+      rgb (0.283091, 0.110553, 0.431554) ,
+      rgb (0.283197, 0.11568, 0.436115) ,
+      rgb (0.283229, 0.120777, 0.440584) ,
+      rgb (0.283187, 0.125848, 0.44496) ,
+      rgb (0.283072, 0.130895, 0.449241) ,
+      rgb (0.282884, 0.13592, 0.453427) ,
+      rgb (0.282623, 0.140926, 0.457517) ,
+      rgb (0.28229, 0.145912, 0.46151) ,
+      rgb (0.281887, 0.150881, 0.465405) ,
+      rgb (0.281412, 0.155834, 0.469201) ,
+      rgb (0.280868, 0.160771, 0.472899) ,
+      rgb (0.280255, 0.165693, 0.476498) ,
+      rgb (0.279574, 0.170599, 0.479997) ,
+      rgb (0.278826, 0.17549, 0.483397) ,
+      rgb (0.278012, 0.180367, 0.486697) ,
+      rgb (0.277134, 0.185228, 0.489898) ,
+      rgb (0.276194, 0.190074, 0.493001) ,
+      rgb (0.275191, 0.194905, 0.496005) ,
+      rgb (0.274128, 0.199721, 0.498911) ,
+      rgb (0.273006, 0.20452, 0.501721) ,
+      rgb (0.271828, 0.209303, 0.504434) ,
+      rgb (0.270595, 0.214069, 0.507052) ,
+      rgb (0.269308, 0.218818, 0.509577) ,
+      rgb (0.267968, 0.223549, 0.512008) ,
+      rgb (0.26658, 0.228262, 0.514349) ,
+      rgb (0.265145, 0.232956, 0.516599) ,
+      rgb (0.263663, 0.237631, 0.518762) ,
+      rgb (0.262138, 0.242286, 0.520837) ,
+      rgb (0.260571, 0.246922, 0.522828) ,
+      rgb (0.258965, 0.251537, 0.524736) ,
+      rgb (0.257322, 0.25613, 0.526563) ,
+      rgb (0.255645, 0.260703, 0.528312) ,
+      rgb (0.253935, 0.265254, 0.529983) ,
+      rgb (0.252194, 0.269783, 0.531579) ,
+      rgb (0.250425, 0.27429, 0.533103) ,
+      rgb (0.248629, 0.278775, 0.534556) ,
+      rgb (0.246811, 0.283237, 0.535941) ,
+      rgb (0.244972, 0.287675, 0.53726) ,
+      rgb (0.243113, 0.292092, 0.538516) ,
+      rgb (0.241237, 0.296485, 0.539709) ,
+      rgb (0.239346, 0.300855, 0.540844) ,
+      rgb (0.237441, 0.305202, 0.541921) ,
+      rgb (0.235526, 0.309527, 0.542944) ,
+      rgb (0.233603, 0.313828, 0.543914) ,
+      rgb (0.231674, 0.318106, 0.544834) ,
+      rgb (0.229739, 0.322361, 0.545706) ,
+      rgb (0.227802, 0.326594, 0.546532) ,
+      rgb (0.225863, 0.330805, 0.547314) ,
+      rgb (0.223925, 0.334994, 0.548053) ,
+      rgb (0.221989, 0.339161, 0.548752) ,
+      rgb (0.220057, 0.343307, 0.549413) ,
+      rgb (0.21813, 0.347432, 0.550038) ,
+      rgb (0.21621, 0.351535, 0.550627) ,
+      rgb (0.214298, 0.355619, 0.551184) ,
+      rgb (0.212395, 0.359683, 0.55171) ,
+      rgb (0.210503, 0.363727, 0.552206) ,
+      rgb (0.208623, 0.367752, 0.552675) ,
+      rgb (0.206756, 0.371758, 0.553117) ,
+      rgb (0.204903, 0.375746, 0.553533) ,
+      rgb (0.203063, 0.379716, 0.553925) ,
+      rgb (0.201239, 0.38367, 0.554294) ,
+      rgb (0.19943, 0.387607, 0.554642) ,
+      rgb (0.197636, 0.391528, 0.554969) ,
+      rgb (0.19586, 0.395433, 0.555276) ,
+      rgb (0.1941, 0.399323, 0.555565) ,
+      rgb (0.192357, 0.403199, 0.555836) ,
+      rgb (0.190631, 0.407061, 0.556089) ,
+      rgb (0.188923, 0.41091, 0.556326) ,
+      rgb (0.187231, 0.414746, 0.556547) ,
+      rgb (0.185556, 0.41857, 0.556753) ,
+      rgb (0.183898, 0.422383, 0.556944) ,
+      rgb (0.182256, 0.426184, 0.55712) ,
+      rgb (0.180629, 0.429975, 0.557282) ,
+      rgb (0.179019, 0.433756, 0.55743) ,
+      rgb (0.177423, 0.437527, 0.557565) ,
+      rgb (0.175841, 0.44129, 0.557685) ,
+      rgb (0.174274, 0.445044, 0.557792) ,
+      rgb (0.172719, 0.448791, 0.557885) ,
+      rgb (0.171176, 0.45253, 0.557965) ,
+      rgb (0.169646, 0.456262, 0.55803) ,
+      rgb (0.168126, 0.459988, 0.558082) ,
+      rgb (0.166617, 0.463708, 0.558119) ,
+      rgb (0.165117, 0.467423, 0.558141) ,
+      rgb (0.163625, 0.471133, 0.558148) ,
+      rgb (0.162142, 0.474838, 0.55814) ,
+      rgb (0.160665, 0.47854, 0.558115) ,
+      rgb (0.159194, 0.482237, 0.558073) ,
+      rgb (0.157729, 0.485932, 0.558013) ,
+      rgb (0.15627, 0.489624, 0.557936) ,
+      rgb (0.154815, 0.493313, 0.55784) ,
+      rgb (0.153364, 0.497, 0.557724) ,
+      rgb (0.151918, 0.500685, 0.557587) ,
+      rgb (0.150476, 0.504369, 0.55743) ,
+      rgb (0.149039, 0.508051, 0.55725) ,
+      rgb (0.147607, 0.511733, 0.557049) ,
+      rgb (0.14618, 0.515413, 0.556823) ,
+      rgb (0.144759, 0.519093, 0.556572) ,
+      rgb (0.143343, 0.522773, 0.556295) ,
+      rgb (0.141935, 0.526453, 0.555991) ,
+      rgb (0.140536, 0.530132, 0.555659) ,
+      rgb (0.139147, 0.533812, 0.555298) ,
+      rgb (0.13777, 0.537492, 0.554906) ,
+      rgb (0.136408, 0.541173, 0.554483) ,
+      rgb (0.135066, 0.544853, 0.554029) ,
+      rgb (0.133743, 0.548535, 0.553541) ,
+      rgb (0.132444, 0.552216, 0.553018) ,
+      rgb (0.131172, 0.555899, 0.552459) ,
+      rgb (0.129933, 0.559582, 0.551864) ,
+      rgb (0.128729, 0.563265, 0.551229) ,
+      rgb (0.127568, 0.566949, 0.550556) ,
+      rgb (0.126453, 0.570633, 0.549841) ,
+      rgb (0.125394, 0.574318, 0.549086) ,
+      rgb (0.124395, 0.578002, 0.548287) ,
+      rgb (0.123463, 0.581687, 0.547445) ,
+      rgb (0.122606, 0.585371, 0.546557) ,
+      rgb (0.121831, 0.589055, 0.545623) ,
+      rgb (0.121148, 0.592739, 0.544641) ,
+      rgb (0.120565, 0.596422, 0.543611) ,
+      rgb (0.120092, 0.600104, 0.54253) ,
+      rgb (0.119738, 0.603785, 0.5414) ,
+      rgb (0.119512, 0.607464, 0.540218) ,
+      rgb (0.119423, 0.611141, 0.538982) ,
+      rgb (0.119483, 0.614817, 0.537692) ,
+      rgb (0.119699, 0.61849, 0.536347) ,
+      rgb (0.120081, 0.622161, 0.534946) ,
+      rgb (0.120638, 0.625828, 0.533488) ,
+      rgb (0.12138, 0.629492, 0.531973) ,
+      rgb (0.122312, 0.633153, 0.530398) ,
+      rgb (0.123444, 0.636809, 0.528763) ,
+      rgb (0.12478, 0.640461, 0.527068) ,
+      rgb (0.126326, 0.644107, 0.525311) ,
+      rgb (0.128087, 0.647749, 0.523491) ,
+      rgb (0.130067, 0.651384, 0.521608) ,
+      rgb (0.132268, 0.655014, 0.519661) ,
+      rgb (0.134692, 0.658636, 0.517649) ,
+      rgb (0.137339, 0.662252, 0.515571) ,
+      rgb (0.14021, 0.665859, 0.513427) ,
+      rgb (0.143303, 0.669459, 0.511215) ,
+      rgb (0.146616, 0.67305, 0.508936) ,
+      rgb (0.150148, 0.676631, 0.506589) ,
+      rgb (0.153894, 0.680203, 0.504172) ,
+      rgb (0.157851, 0.683765, 0.501686) ,
+      rgb (0.162016, 0.687316, 0.499129) ,
+      rgb (0.166383, 0.690856, 0.496502) ,
+      rgb (0.170948, 0.694384, 0.493803) ,
+      rgb (0.175707, 0.6979, 0.491033) ,
+      rgb (0.180653, 0.701402, 0.488189) ,
+      rgb (0.185783, 0.704891, 0.485273) ,
+      rgb (0.19109, 0.708366, 0.482284) ,
+      rgb (0.196571, 0.711827, 0.479221) ,
+      rgb (0.202219, 0.715272, 0.476084) ,
+      rgb (0.20803, 0.718701, 0.472873) ,
+      rgb (0.214, 0.722114, 0.469588) ,
+      rgb (0.220124, 0.725509, 0.466226) ,
+      rgb (0.226397, 0.728888, 0.462789) ,
+      rgb (0.232815, 0.732247, 0.459277) ,
+      rgb (0.239374, 0.735588, 0.455688) ,
+      rgb (0.24607, 0.73891, 0.452024) ,
+      rgb (0.252899, 0.742211, 0.448284) ,
+      rgb (0.259857, 0.745492, 0.444467) ,
+      rgb (0.266941, 0.748751, 0.440573) ,
+      rgb (0.274149, 0.751988, 0.436601) ,
+      rgb (0.281477, 0.755203, 0.432552) ,
+      rgb (0.288921, 0.758394, 0.428426) ,
+      rgb (0.296479, 0.761561, 0.424223) ,
+      rgb (0.304148, 0.764704, 0.419943) ,
+      rgb (0.311925, 0.767822, 0.415586) ,
+      rgb (0.319809, 0.770914, 0.411152) ,
+      rgb (0.327796, 0.77398, 0.40664) ,
+      rgb (0.335885, 0.777018, 0.402049) ,
+      rgb (0.344074, 0.780029, 0.397381) ,
+      rgb (0.35236, 0.783011, 0.392636) ,
+      rgb (0.360741, 0.785964, 0.387814) ,
+      rgb (0.369214, 0.788888, 0.382914) ,
+      rgb (0.377779, 0.791781, 0.377939) ,
+      rgb (0.386433, 0.794644, 0.372886) ,
+      rgb (0.395174, 0.797475, 0.367757) ,
+      rgb (0.404001, 0.800275, 0.362552) ,
+      rgb (0.412913, 0.803041, 0.357269) ,
+      rgb (0.421908, 0.805774, 0.35191) ,
+      rgb (0.430983, 0.808473, 0.346476) ,
+      rgb (0.440137, 0.811138, 0.340967) ,
+      rgb (0.449368, 0.813768, 0.335384) ,
+      rgb (0.458674, 0.816363, 0.329727) ,
+      rgb (0.468053, 0.818921, 0.323998) ,
+      rgb (0.477504, 0.821444, 0.318195) ,
+      rgb (0.487026, 0.823929, 0.312321) ,
+      rgb (0.496615, 0.826376, 0.306377) ,
+      rgb (0.506271, 0.828786, 0.300362) ,
+      rgb (0.515992, 0.831158, 0.294279) ,
+      rgb (0.525776, 0.833491, 0.288127) ,
+      rgb (0.535621, 0.835785, 0.281908) ,
+      rgb (0.545524, 0.838039, 0.275626) ,
+      rgb (0.555484, 0.840254, 0.269281) ,
+      rgb (0.565498, 0.84243, 0.262877) ,
+      rgb (0.575563, 0.844566, 0.256415) ,
+      rgb (0.585678, 0.846661, 0.249897) ,
+      rgb (0.595839, 0.848717, 0.243329) ,
+      rgb (0.606045, 0.850733, 0.236712) ,
+      rgb (0.616293, 0.852709, 0.230052) ,
+      rgb (0.626579, 0.854645, 0.223353) ,
+      rgb (0.636902, 0.856542, 0.21662) ,
+      rgb (0.647257, 0.8584, 0.209861) ,
+      rgb (0.657642, 0.860219, 0.203082) ,
+      rgb (0.668054, 0.861999, 0.196293) ,
+      rgb (0.678489, 0.863742, 0.189503) ,
+      rgb (0.688944, 0.865448, 0.182725) ,
+      rgb (0.699415, 0.867117, 0.175971) ,
+      rgb (0.709898, 0.868751, 0.169257) ,
+      rgb (0.720391, 0.87035, 0.162603) ,
+      rgb (0.730889, 0.871916, 0.156029) ,
+      rgb (0.741388, 0.873449, 0.149561) ,
+      rgb (0.751884, 0.874951, 0.143228) ,
+      rgb (0.762373, 0.876424, 0.137064) ,
+      rgb (0.772852, 0.877868, 0.131109) ,
+      rgb (0.783315, 0.879285, 0.125405) ,
+      rgb (0.79376, 0.880678, 0.120005) ,
+      rgb (0.804182, 0.882046, 0.114965) ,
+      rgb (0.814576, 0.883393, 0.110347) ,
+      rgb (0.82494, 0.88472, 0.106217) ,
+      rgb (0.83527, 0.886029, 0.102646) ,
+      rgb (0.845561, 0.887322, 0.099702) ,
+      rgb (0.85581, 0.888601, 0.097452) ,
+      rgb (0.866013, 0.889868, 0.095953) ,
+      rgb (0.876168, 0.891125, 0.09525) ,
+      rgb (0.886271, 0.892374, 0.095374) ,
+      rgb (0.89632, 0.893616, 0.096335) ,
+      rgb (0.906311, 0.894855, 0.098125) ,
+      rgb (0.916242, 0.896091, 0.100717) ,
+      rgb (0.926106, 0.89733, 0.104071) ,
+      rgb (0.935904, 0.89857, 0.108131) ,
+      rgb (0.945636, 0.899815, 0.112838) ,
+      rgb (0.9553, 0.901065, 0.118128) ,
+      rgb (0.964894, 0.902323, 0.123941) ,
+      rgb (0.974417, 0.90359, 0.130215) ,
+      rgb (0.983868, 0.904867, 0.136897) ,
+      rgb (0.993248, 0.906157, 0.143936)
+      });
 
 

Modified: trunk/Build/source/utils/asymptote/base/contour.asy
===================================================================
--- trunk/Build/source/utils/asymptote/base/contour.asy	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/base/contour.asy	2021-01-02 16:31:31 UTC (rev 57291)
@@ -1,10 +1,10 @@
 // Contour routines written by Radoslav Marinov and John Bowman.
-         
+
 import graph_settings;
 
 real eps=10000*realEpsilon;
 
-//                         1  
+//                         1
 //             6 +-------------------+ 5
 //               | \               / |
 //               |   \          /    |
@@ -16,7 +16,7 @@
 //               |   /           \   |
 //               | /               \ |
 //             7 +-------------------+ 4 or 8
-//                         3  
+//                         3
 
 private struct segment
 {
@@ -76,11 +76,11 @@
 private segment checktriangle(pair p0, pair p1, pair p2,
                               real v0, real v1, real v2, int edge=-1)
 {
-  // default null return  
+  // default null return
   static segment dflt;
 
   real eps=eps*max(abs(v0),abs(v1),abs(v2));
-  
+
   if(v0 < -eps) {
     if(v1 < -eps) {
       if(v2 < -eps) return dflt; // nothing to do
@@ -92,10 +92,10 @@
       else return case2(p1,p0,p2,v1,v0,v2,5+edge);
     } else {
       if(v2 < -eps) return case3(p0,p1,p2,v0,v1,v2,edge);
-      else if(v2 <= eps) 
+      else if(v2 <= eps)
         return case2(p2,p0,p1,v2,v0,v1,edge);
       else return case3(p1,p0,p2,v1,v0,v2,edge);
-    } 
+    }
   } else if(v0 <= eps) {
     if(v1 < -eps) {
       if(v2 < -eps) return dflt; // nothing to do
@@ -109,7 +109,7 @@
       if(v2 < -eps) return case2(p0,p1,p2,v0,v1,v2,4+edge);
       else if(v2 <= eps) return case1(p0,p2,4+edge);
       else return dflt; // nothing to do
-    } 
+    }
   } else {
     if(v1 < -eps) {
       if(v2 < -eps) return case3(p1,p0,p2,v1,v0,v2,edge);
@@ -124,8 +124,8 @@
       if(v2 < -eps) return case3(p0,p2,p1,v0,v2,v1);
       else if(v2 <= eps) return dflt; // nothing to do
       else return dflt; // nothing to do
-    } 
-  }      
+    }
+  }
 }
 
 // Collect connecting path segments.
@@ -135,7 +135,7 @@
   int[] reverseF(int n) {return sequence(new int(int x){return n-1-x;},n-1);}
   // use to reverse an array, omitting the last point
   int[] reverseL(int n) {return sequence(new int(int x){return n-2-x;},n-1);}
-  
+
   for(int cnt=0; cnt < c.length; ++cnt) {
     pair[][] gdscnt=points[cnt];
     for(int i=0; i < gdscnt.length; ++i) {
@@ -144,11 +144,11 @@
       for(int j=i+1; j < gdscnt.length; ++j) {
         pair[] gjg=gdscnt[j];
         int Lj=gjg.length;
-        if(abs(gig[0]-gjg[0]) < eps) { 
+        if(abs(gig[0]-gjg[0]) < eps) {
           gdscnt[j]=gjg[reverseF(Lj)];
           gdscnt[j].append(gig);
-          gdscnt.delete(i); 
-          --i; 
+          gdscnt.delete(i);
+          --i;
           break;
         } else if(abs(gig[0]-gjg[Lj-1]) < eps) {
           gig.delete(0);
@@ -169,7 +169,7 @@
           gdscnt.delete(i);
           --i;
           break;
-        } 
+        }
       }
     }
   }
@@ -224,7 +224,7 @@
 
   c=sort(c);
   bool midpoints=midpoint.length > 0;
-  
+
   segment segments[][][]=new segment[nx][ny][];
 
   // go over region a rectangle at a time
@@ -238,7 +238,7 @@
     segment[][] segmentsi=segments[i];
     for(int j=0; j < ny; ++j) {
       segment[] segmentsij=segmentsi[j];
-      
+
       // define points
       pair bleft=zi[j];
       pair bright=zp[j];
@@ -264,26 +264,26 @@
         int countm=0;
         int countz=0;
         int countp=0;
-        
+
         void check(real vertdat) {
           if(vertdat < -eps) ++countm;
           else {
-            if(vertdat <= eps) ++countz; 
+            if(vertdat <= eps) ++countz;
             else ++countp;
           }
         }
-        
+
         check(vertdat0);
         check(vertdat1);
         check(vertdat2);
         check(vertdat3);
 
-        if(countm == 4) return 1;  // nothing to do 
-        if(countp == 4) return -1; // nothing to do 
+        if(countm == 4) return 1;  // nothing to do
+        if(countp == 4) return -1; // nothing to do
         if((countm == 3 || countp == 3) && countz == 1) return 0;
 
         // go through the triangles
-        
+
         void addseg(segment seg) {
           if(seg.active) {
             seg.c=cnt;
@@ -301,7 +301,7 @@
                              vertdat0,vertdat1,vertdat4,3));
         return 0;
       }
-      
+
       void process(int l, int u) {
         if(l >= u) return;
         int i=quotient(l+u,2);
@@ -313,7 +313,7 @@
           process(i+1,u);
         }
       }
-    
+
       process(0,c.length);
     }
   }
@@ -356,7 +356,7 @@
           }
           return -1;
         }
-        
+
         int backward(int I, int J, bool first=true) {
           if(I >= 0 && I < nx && J >= 0 && J < ny) {
             segment[] segmentsIJ=segments[I][J];
@@ -380,7 +380,7 @@
           }
           return -1;
         }
-        
+
         void follow(int f(int, int, bool first=true), int edge) {
           int I=i;
           int J=j;
@@ -489,7 +489,7 @@
   // evaluate function at points and midpoints
   real[][] dat=new real[nx+1][ny+1];
   real[][] midpoint=new real[nx+1][ny+1];
-  
+
   for(int i=0; i <= nx; ++i) {
     real x=interp(a.x,b.x,i/nx);
     real x2=interp(a.x,b.x,(i+0.5)/nx);
@@ -503,7 +503,7 @@
 
   return contour(dat,midpoint,a,b,c,join);
 }
-  
+
 void draw(picture pic=currentpicture, Label[] L=new Label[],
           guide[][] g, pen[] p)
 {
@@ -576,7 +576,7 @@
                 index=i;
             }
           }
-        } 
+        }
         fillpalettei[j]=palette[index];
       }
       fillpalette[i]=fillpalettei;
@@ -620,7 +620,7 @@
 // check existing guides and adds new segment to them if possible,
 // or otherwise store segment as a new guide
 private void addseg(pair[][] gds, segment seg)
-{ 
+{
   if(!seg.active) return;
   // search for a path to extend
   for(int i=0; i < gds.length; ++i) {
@@ -629,22 +629,22 @@
       gd.insert(0,seg.a);
       return;
     } else if(abs(gd[gd.length-1]-seg.b) < eps) {
-      gd.push(seg.a); 
+      gd.push(seg.a);
       return;
     } else if(abs(gd[0]-seg.a) < eps) {
       gd.insert(0,seg.b);
       return;
-    } else if(abs(gd[gd.length-1]-seg.a) < eps) {  
+    } else if(abs(gd[gd.length-1]-seg.a) < eps) {
       gd.push(seg.b);
       return;
     }
   }
- 
+
   // in case nothing is found
   pair[] segm;
-  segm=new pair[] {seg.a,seg.b}; 
+  segm=new pair[] {seg.a,seg.b};
   gds.push(segm);
-  
+
   return;
 }
 
@@ -664,7 +664,7 @@
 
   // array to store guides found so far
   pair[][][] points=new pair[c.length][][];
-        
+
   for(int cnt=0; cnt < c.length; ++cnt) {
     pair[][] pointscnt=points[cnt];
     real C=c[cnt];

Modified: trunk/Build/source/utils/asymptote/base/contour3.asy
===================================================================
--- trunk/Build/source/utils/asymptote/base/contour3.asy	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/base/contour3.asy	2021-01-02 16:31:31 UTC (rev 57291)
@@ -81,7 +81,7 @@
       int j2=2j;
       int j2p1=j2+1;
       int j2p2=j2+2;
- 
+
       for(int k=0; k < nz; ++k) {
         // vertex values
         real vdat0=fij[k];
@@ -108,21 +108,21 @@
         triple m3=0.25*(p100+p000+p001+p101);
         triple m4=0.25*(p000+p010+p011+p001);
         triple m5=0.25*(p001+p011+p111+p101);
-        triple mc=0.5*(m0+m5);                   
+        triple mc=0.5*(m0+m5);
 
         // optimization: we make sure we don't work with empty rectangles
         int countm=0;
         int countz=0;
         int countp=0;
-        
+
         void check(real vdat) {
           if(vdat < -eps) ++countm;
           else {
-            if(vdat <= eps) ++countz; 
+            if(vdat <= eps) ++countz;
             else ++countp;
           }
         }
-        
+
         check(vdat0);
         check(vdat1);
         check(vdat2);
@@ -132,32 +132,32 @@
         check(vdat6);
         check(vdat7);
 
-        if(countm == 8 || countp == 8 || 
+        if(countm == 8 || countp == 8 ||
            ((countm == 7 || countp == 7) && countz == 1)) continue;
 
         int k2=2k;
         int k2p1=k2+1;
         int k2p2=k2+2;
- 
+
         // Evaluate midpoints of cube sides.
         // Then evaluate midpoint of cube.
         real vdat8=midpoints ? midpoint[i2p1][j2p1][k2] :
           0.25*(vdat0+vdat2+vdat6+vdat4);
-        real vdat9=midpoints ? midpoint[i2p1][j2p2][k2p1] : 
+        real vdat9=midpoints ? midpoint[i2p1][j2p2][k2p1] :
           0.25*(vdat2+vdat6+vdat7+vdat3);
-        real vdat10=midpoints ? midpoint[i2p2][j2p1][k2p1] : 
+        real vdat10=midpoints ? midpoint[i2p2][j2p1][k2p1] :
           0.25*(vdat7+vdat6+vdat4+vdat5);
-        real vdat11=midpoints ? midpoint[i2p1][j2][k2p1] : 
+        real vdat11=midpoints ? midpoint[i2p1][j2][k2p1] :
           0.25*(vdat0+vdat4+vdat5+vdat1);
-        real vdat12=midpoints ? midpoint[i2][j2p1][k2p1] : 
+        real vdat12=midpoints ? midpoint[i2][j2p1][k2p1] :
           0.25*(vdat0+vdat2+vdat3+vdat1);
-        real vdat13=midpoints ? midpoint[i2p1][j2p1][k2p2] : 
+        real vdat13=midpoints ? midpoint[i2p1][j2p1][k2p2] :
           0.25*(vdat1+vdat3+vdat7+vdat5);
-        real vdat14=midpoints ? midpoint[i2p1][j2p1][k2p1] : 
+        real vdat14=midpoints ? midpoint[i2p1][j2p1][k2p1] :
           0.125*(vdat0+vdat1+vdat2+vdat3+vdat4+vdat5+vdat6+vdat7);
-      
+
         // Go through the 24 pyramids, 4 for each side.
-        
+
         void addval(int kp0, int kp1, int kp2, triple add, triple v) {
           bucket[] cur=kps[kp0][kp1][kp2];
           for(int q=0; q < cur.length; ++q) {
@@ -192,8 +192,14 @@
           vec0=unit(vec0);
           triple normal=cross(vec2,vec1);
           normal *= sgn(dot(normal,dir));
-          real angle0=acos(-dot(vec1,vec2));
-          real angle1=acos(-dot(vec2,vec0));
+
+          real angle(triple u, triple v) {
+            real Dot=-dot(u,v);
+            return Dot > 1 ? 0 : Dot < -1 ? pi : acos(Dot);
+          }
+
+          real angle0=angle(vec1,vec2);
+          real angle1=angle(vec2,vec0);
           pts[0].normal=normal*angle0;
           pts[1].normal=normal*angle1;
           pts[2].normal=normal*(pi-angle0-angle1);
@@ -206,7 +212,7 @@
             weighted[] points=obj.pts;
             object obj1;
             object obj2;
-            obj1.active=true; 
+            obj1.active=true;
             obj2.active=true;
             obj1.pts=new weighted[] {points[0],points[1],points[2]};
             obj2.pts=new weighted[] {points[1],points[2],points[3]};
@@ -220,7 +226,7 @@
           }
         }
 
-        weighted setupweighted(triple va, triple vb, real da, real db, 
+        weighted setupweighted(triple va, triple vb, real da, real db,
                                int[] kpa, int[] kpb) {
           weighted w;
           real ratio=abs(da/(db-da));
@@ -318,7 +324,7 @@
         static int[] pm4={0,1,1};
         static int[] pm5={1,1,2};
         static int[] pmc={1,1,1};
- 
+
         check4pyr(p000,p010,p110,p100,mc,m0,
                   vdat0,vdat2,vdat6,vdat4,vdat14,vdat8,
                   pp000,pp010,pp110,pp100,pmc,pm0);
@@ -378,14 +384,14 @@
     ret.normal=normal*2/count;
     return ret;
   }
-  
+
   // Prepare return value.
   vertex[][] g;
-  
+
   for(int q=0; q < objects.length; ++q) {
     object p=objects[q];
     g.push(new vertex[] {preparevertex(p.pts[0]),preparevertex(p.pts[1]),
-          preparevertex(p.pts[2])});
+                           preparevertex(p.pts[2])});
   }
   return g;
 }
@@ -454,7 +460,7 @@
         datij[k]=f(x,y,z);
         if(i == nx || j == ny || k == nz) continue;
         int k2p1=2k+1;
-        midpointi2p1j2p1[2k]=f(x2,y2,z); 
+        midpointi2p1j2p1[2k]=f(x2,y2,z);
         midpointi2p1j2p1[k2p1]=f(x2,y2,z2);
         midpointi2p1j2[k2p1]=f(x2,y,z2);
         midpointi2j2p1[k2p1]=f(x,y2,z2);

Modified: trunk/Build/source/utils/asymptote/base/embed.asy
===================================================================
--- trunk/Build/source/utils/asymptote/base/embed.asy	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/base/embed.asy	2021-01-02 16:31:31 UTC (rev 57291)
@@ -7,23 +7,23 @@
 // For documentation of the options see
 // http://mirror.ctan.org/macros/latex/contrib/media9/doc/media9.pdf
 
-// Embed PRC or SWF content in pdf file 
+// Embed PRC or SWF content in pdf file
 string embedplayer(string name, string text="", string options="",
                    real width=0, real height=0)
 {
-  if(width != 0) options += ",width="+(string) (width/pt)+"pt"; 
-  if(height != 0) options += ",height="+(string) (height/pt)+"pt"; 
+  if(width != 0) options += ",width="+(string) (width/pt)+"pt";
+  if(height != 0) options += ",height="+(string) (height/pt)+"pt";
   return "%
 \includemedia[noplaybutton,"+options+"]{"+text+"}{"+name+"}";
 }
 
-// Embed media in pdf file 
+// Embed media in pdf file
 string embed(string name, string text="", string options="",
              real width=0, real height=0)
 {
   return embedplayer("VPlayer.swf",text,"label="+name+
                      ",activate=pageopen,addresource="+name+
-                      ",flashvars={source="+name+"&scaleMode=letterbox},"+
+                     ",flashvars={source="+name+"&scaleMode=letterbox},"+
                      options,width,height);
 }
 

Modified: trunk/Build/source/utils/asymptote/base/external.asy
===================================================================
--- trunk/Build/source/utils/asymptote/base/external.asy	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/base/external.asy	2021-01-02 16:31:31 UTC (rev 57291)
@@ -20,8 +20,8 @@
       atexit(exitfunction);
     }
   }
-  if(width != 0) options += ", width="+(string) (width/pt)+"pt"; 
-  if(height != 0) options +=", height="+(string) (height/pt)+"pt"; 
+  if(width != 0) options += ", width="+(string) (width/pt)+"pt";
+  if(height != 0) options +=", height="+(string) (height/pt)+"pt";
   return "\href{run:"+name+"}{"+graphic(image,options)+"}";
 }
 

Modified: trunk/Build/source/utils/asymptote/base/feynman.asy
===================================================================
--- trunk/Build/source/utils/asymptote/base/feynman.asy	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/base/feynman.asy	2021-01-02 16:31:31 UTC (rev 57291)
@@ -10,12 +10,12 @@
 
 // default ratio of width (distance between two loops) to amplitude for a gluon
 // line. The gluon function uses this ratio, if the width parameter is
-// negative. 
+// negative.
 real gluonratio;
 
 // default ratio of width (distance between two crests) to amplitude for a
 // photon  line. The photon function uses this ratio, if the width parameter is
-// negative. 
+// negative.
 real photonratio;
 
 // default gluon amplitude
@@ -337,7 +337,7 @@
                real vertexangle = minvertexangle,
                real margin = linemargin)
 {
-  if(erasebg) do_overpaint(pic, p, bgpen, 
+  if(erasebg) do_overpaint(pic, p, bgpen,
                            linewidth(fgpen)+margin, vertexangle);
   draw(pic, p, fgpen, arrow);
 }
@@ -358,7 +358,7 @@
                     real vertexangle = minvertexangle,
                     real margin = linemargin)
 {
-  if(erasebg) do_overpaint(pic, p, bgpen, 
+  if(erasebg) do_overpaint(pic, p, bgpen,
                            linewidth(fgpen)+margin, vertexangle);
 
   real htw = linewidth(fgpen)+dlspacing/2;
@@ -466,7 +466,7 @@
                  pen fgpen = vertexpen)
 {
   draw(pic, shift(xy)*scale(r)*((-1,-1)--(1,1)), fgpen);
-  draw(pic, shift(xy)*scale(r)*((1,-1)--(-1,1)), fgpen);    
+  draw(pic, shift(xy)*scale(r)*((1,-1)--(-1,1)), fgpen);
 }
 
 // draw a circle with an X in the middle on picture pic, at position xy with
@@ -508,7 +508,7 @@
 }
 
 // draw a momentum arrow on picture pic, along path p, at position position
-// (use one of the predefined pairs left or right), with an offset offset 
+// (use one of the predefined pairs left or right), with an offset offset
 // from the path, a length length, a pen fgpen and an arrowhead arrow. Making
 // adjust nonzero shifts the momentum arrow along the path. If erasebg is true,
 // the background is erased inside a margin margin around the momentum arrow.
@@ -527,7 +527,7 @@
                   real margin = momarrowmargin)
 {
   path momarrow = momArrowPath(p, align, pos, offset, length);
-  if(erasebg) do_overpaint(pic, momarrow, bgpen, 
+  if(erasebg) do_overpaint(pic, momarrow, bgpen,
                            linewidth(fgpen)+margin, 90);
   draw(pic, momarrow, fgpen, arrow);
 }
@@ -540,7 +540,7 @@
 // (essentially, currentpen, arrowfactor and dotfactor). After customising the
 // default parameters of plain.asy, you may call fmdefaults to adjust the
 // parameters of feynman.asy.
-void fmdefaults() 
+void fmdefaults()
 {
   real arrowsize=arrowsize(currentpen);
   real linewidth=linewidth(currentpen);

Modified: trunk/Build/source/utils/asymptote/base/flowchart.asy
===================================================================
--- trunk/Build/source/utils/asymptote/base/flowchart.asy	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/base/flowchart.asy	2021-01-02 16:31:31 UTC (rev 57291)
@@ -57,29 +57,29 @@
   // in absolute coordinates.
   pair top(transform t=identity()) {
     return shift(t)+f_top;
-  } 
+  }
   pair bottom(transform t=identity()) {
     return shift(t)+f_bottom;
-  } 
+  }
   pair left(transform t=identity()) {
     return shift(t)+f_left;
-  } 
+  }
   pair right(transform t=identity()) {
     return shift(t)+f_right;
-  } 
+  }
   pair topleft(transform t=identity()) {
     return shift(t)+f_topleft;
-  } 
+  }
   pair topright(transform t=identity()) {
     return shift(t)+f_topright;
-  } 
+  }
   pair bottomleft(transform t=identity()) {
     return shift(t)+f_bottomleft;
-  } 
+  }
   pair bottomright(transform t=identity()) {
     return shift(t)+f_bottomright;
-  } 
-  
+  }
+
   // Return a frame representing the block.
   frame draw(pen p=currentpen);
 
@@ -118,25 +118,25 @@
 
   block block;
   block.draw=new frame(pen p) {
-    frame block;
-    filldraw(block,shift(0,z1.y)*box((0,0),z0),headerpen,drawpen);
-    add(block,shift(-0.5*(Mheader+mheader))*fheader,(0,z1.y)+0.5z0);
-    filldraw(block,box((0,0),z1),bodypen,drawpen);
-    add(block,shift(-0.5*(Mbody+mbody))*fbody,0.5z1);
-    return block;
+                               frame block;
+                               filldraw(block,shift(0,z1.y)*box((0,0),z0),headerpen,drawpen);
+                               add(block,shift(-0.5*(Mheader+mheader))*fheader,(0,z1.y)+0.5z0);
+                               filldraw(block,box((0,0),z1),bodypen,drawpen);
+                               add(block,shift(-0.5*(Mbody+mbody))*fbody,0.5z1);
+                               return block;
   };
   block.f_position=new pair(real x) {
-    return point(shape,x);
+                                     return point(shape,x);
   };
   block.f_center=interp(point(shape,0),point(shape,3),0.5);
-  block.f_bottomleft=point(shape,0); 
-  block.f_bottom=point(shape,5.5); 
-  block.f_bottomright=point(shape,5); 
-  block.f_right=point(shape,4.5); 
-  block.f_topright=point(shape,3); 
-  block.f_top=point(shape,2.5); 
-  block.f_topleft=point(shape,2); 
-  block.f_left=point(shape,0.5); 
+  block.f_bottomleft=point(shape,0);
+  block.f_bottom=point(shape,5.5);
+  block.f_bottomright=point(shape,5);
+  block.f_right=point(shape,4.5);
+  block.f_topright=point(shape,3);
+  block.f_top=point(shape,2.5);
+  block.f_topleft=point(shape,2);
+  block.f_left=point(shape,0.5);
   block.center=center;
   block.size=point(shape,3);
   return block;
@@ -156,25 +156,25 @@
 
   block block;
   block.draw=new frame(pen p) {
-    frame block;
-    filldraw(block,shape,fillpen,drawpen);
-    add(block,shift(-0.5*(M+m))*f,0.5z);
-    return block;
+                               frame block;
+                               filldraw(block,shape,fillpen,drawpen);
+                               add(block,shift(-0.5*(M+m))*f,0.5z);
+                               return block;
   };
   block.f_position=new pair(real x) {
-    return point(shape,x);
+                                     return point(shape,x);
   };
   block.f_center=0.5*z;
   block.center=center;
   block.size=z;
   block.f_bottomleft=point(shape,0);
-  block.f_bottom=point(shape,0.5); 
-  block.f_bottomright=point(shape,1); 
-  block.f_right=point(shape,1.5); 
-  block.f_topright=point(shape,2); 
-  block.f_top=point(shape,2.5); 
-  block.f_topleft=point(shape,3); 
-  block.f_left=point(shape,3.5); 
+  block.f_bottom=point(shape,0.5);
+  block.f_bottomright=point(shape,1);
+  block.f_right=point(shape,1.5);
+  block.f_topright=point(shape,2);
+  block.f_top=point(shape,2.5);
+  block.f_topleft=point(shape,3);
+  block.f_left=point(shape,3.5);
   return block;
 }
 
@@ -197,13 +197,13 @@
 
   block block;
   block.draw=new frame(pen p) {
-    frame block;
-    filldraw(block,shape,fillpen,drawpen);
-    add(block,shift(-0.5*(M+m))*f,((a+skew)/2,b/2));
-    return block;
+                               frame block;
+                               filldraw(block,shape,fillpen,drawpen);
+                               add(block,shift(-0.5*(M+m))*f,((a+skew)/2,b/2));
+                               return block;
   };
   block.f_position=new pair(real x) {
-    return point(shape,x);
+                                     return point(shape,x);
   };
   block.f_center=((a+skew)/2,b/2);
   block.center=center;
@@ -229,7 +229,7 @@
   pair m=min(f);
   pair M=max(f);
   pair bound=maxbound(M-m,(minwidth,minheight));
-  
+
   real e=ds;
   real a=0.5bound.x-dw;
   real b=0.5bound.y;
@@ -244,25 +244,25 @@
 
   block block;
   block.draw=new frame(pen p) {
-    frame block;
-    filldraw(block,shape,fillpen,drawpen);
-    add(block,shift(-0.5*(M+m))*f,(d,c));
-    return block;
+                               frame block;
+                               filldraw(block,shape,fillpen,drawpen);
+                               add(block,shift(-0.5*(M+m))*f,(d,c));
+                               return block;
   };
   block.f_position=new pair(real x) {
-    return point(shape,x);
+                                     return point(shape,x);
   };
   block.f_center=(point(shape,1).x,point(shape,0).y);
   block.center=center;
   block.size=(point(shape,0).x,point(shape,1).y);
-  block.f_bottomleft=point(shape,2.5); 
-  block.f_bottom=point(shape,3); 
-  block.f_bottomright=point(shape,3.5); 
-  block.f_right=point(shape,0); 
-  block.f_topright=point(shape,0.5); 
-  block.f_top=point(shape,1); 
-  block.f_topleft=point(shape,1.5); 
-  block.f_left=point(shape,2); 
+  block.f_bottomleft=point(shape,2.5);
+  block.f_bottom=point(shape,3);
+  block.f_bottomright=point(shape,3.5);
+  block.f_right=point(shape,0);
+  block.f_topright=point(shape,0.5);
+  block.f_top=point(shape,1);
+  block.f_topleft=point(shape,1.5);
+  block.f_left=point(shape,2);
   return block;
 }
 
@@ -274,30 +274,30 @@
   pair m=min(f);
   pair M=max(f);
   real r=max(0.5length(M-m)+dr,0.5mindiameter);
-  
+
   path shape=(0,r)..(r,2r)..(2r,r)..(r,0)..cycle;
-  
+
   block block;
   block.draw=new frame(pen p) {
-    frame block;
-    filldraw(block,shape,fillpen,drawpen);
-    add(block,shift(-0.5*(M+m))*f,(r,r));
-    return block;
+                               frame block;
+                               filldraw(block,shape,fillpen,drawpen);
+                               add(block,shift(-0.5*(M+m))*f,(r,r));
+                               return block;
   };
   block.f_position=new pair(real x) {
-    return point(shape,x);
+                                     return point(shape,x);
   };
   block.f_center=(r,r);
   block.center=center;
   block.size=(2r,2r);
   block.f_left=point(shape,0);
-  block.f_topleft=point(shape,0.5); 
-  block.f_top=point(shape,1); 
-  block.f_topright=point(shape,1.5); 
-  block.f_right=point(shape,2); 
-  block.f_bottomright=point(shape,2.5); 
-  block.f_bottom=point(shape,3); 
-  block.f_bottomleft=point(shape,3.5); 
+  block.f_topleft=point(shape,0.5);
+  block.f_top=point(shape,1);
+  block.f_topright=point(shape,1.5);
+  block.f_right=point(shape,2);
+  block.f_bottomright=point(shape,2.5);
+  block.f_bottom=point(shape,3);
+  block.f_bottomleft=point(shape,3.5);
   return block;
 }
 
@@ -313,33 +313,33 @@
 
   real a=bound.x;
   real b=bound.y;
-  
+
   path shape=(0,ds+dw)--(0,ds+b-dw){up}..{right}
   (ds+dw,2ds+b)--(ds+a-dw,2ds+b){right}..{down}
   (2ds+a,ds+b-dw)--(2ds+a,ds+dw){down}..{left}
   (ds+a-dw,0)--(ds+dw,0){left}..{up}cycle;
-  
+
   block block;
   block.draw=new frame(pen p) {
-    frame block;
-    filldraw(block,shape,fillpen,drawpen);
-    add(block,shift(-0.5*(M+m))*f,(ds,ds)+0.5bound);
-    return block;
+                               frame block;
+                               filldraw(block,shape,fillpen,drawpen);
+                               add(block,shift(-0.5*(M+m))*f,(ds,ds)+0.5bound);
+                               return block;
   };
   block.f_position=new pair(real x) {
-    return point(shape,x);
+                                     return point(shape,x);
   };
   block.f_center=(ds+0.5a,ds+0.5b);
   block.center=center;
   block.size=(2ds+a,2ds+b);
-  block.f_bottomleft=point(shape,7.5); 
-  block.f_bottom=point(shape,6.5); 
-  block.f_bottomright=point(shape,5.5); 
-  block.f_right=point(shape,4.5); 
-  block.f_topright=point(shape,3.5); 
-  block.f_top=point(shape,2.5); 
-  block.f_topleft=point(shape,1.5); 
-  block.f_left=point(shape,0.5); 
+  block.f_bottomleft=point(shape,7.5);
+  block.f_bottom=point(shape,6.5);
+  block.f_bottomright=point(shape,5.5);
+  block.f_right=point(shape,4.5);
+  block.f_topright=point(shape,3.5);
+  block.f_top=point(shape,2.5);
+  block.f_topleft=point(shape,1.5);
+  block.f_left=point(shape,0.5);
   return block;
 }
 
@@ -359,25 +359,25 @@
     (dw+a,0)--cycle;
   block block;
   block.draw=new frame(pen p) {
-    frame block;
-    filldraw(block,shape,fillpen,drawpen);
-    add(block,shift(-0.5*(M+m))*f,(0.5bound+(dw,dh)));
-    return block;
+                               frame block;
+                               filldraw(block,shape,fillpen,drawpen);
+                               add(block,shift(-0.5*(M+m))*f,(0.5bound+(dw,dh)));
+                               return block;
   };
   block.f_position=new pair(real x) {
-    return point(shape,x);
+                                     return point(shape,x);
   };
   block.f_center=(dw+0.5a,dh+b);
   block.center=center;
   block.size=(2dw+a,2dh+2b);
-  block.f_bottomleft=point(shape,4); 
-  block.f_bottom=point(shape,4.5); 
-  block.f_bottomright=point(shape,5); 
-  block.f_right=point(shape,0); 
-  block.f_topright=point(shape,1); 
-  block.f_top=point(shape,1.5); 
-  block.f_topleft=point(shape,2); 
-  block.f_left=point(shape,3); 
+  block.f_bottomleft=point(shape,4);
+  block.f_bottom=point(shape,4.5);
+  block.f_bottomright=point(shape,5);
+  block.f_right=point(shape,0);
+  block.f_topright=point(shape,1);
+  block.f_top=point(shape,1.5);
+  block.f_topleft=point(shape,2);
+  block.f_left=point(shape,3);
   return block;
 }
 
@@ -388,14 +388,14 @@
   for(int i=1; i < point.length; ++i) {
     if(i-1 >= dir.length || dir[i-1] == Horizontal)
       current=(point[i].x,point[i-1].y);
-    else 
+    else
       current=(point[i-1].x,point[i].y);
-    
+
     if(current != prev) {
       line=line--current;
       prev=current;
     }
-    
+
     current=point[i];
     if(current != prev) {
       line=line--current;

Modified: trunk/Build/source/utils/asymptote/base/geometry.asy
===================================================================
--- trunk/Build/source/utils/asymptote/base/geometry.asy	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/base/geometry.asy	2021-01-02 16:31:31 UTC (rev 57291)
@@ -40,7 +40,7 @@
   real angle=degrees(dir);
   if(angle > 90 && angle < 270) angle -= 180;
   return rotate(angle);
-} 
+}
 
 // *=======================================================*
 // *........................HEADER.........................*
@@ -165,7 +165,7 @@
   ed = ea - 6 * eb;
   ee = ed + ec + ec;
   return 3 * sum + fac * (1.0 + ed * (-C1 + C5 * ed - C6 * delz * ee)
-                    +delz * (C2 * ee + delz * (-C3 * ec + delz * C4 * ea)))/(ave * sqrt(ave));
+                          +delz * (C2 * ee + delz * (-C3 * ec + delz * C4 * ea)))/(ave * sqrt(ave));
 }
 
 /*<asyxml><function type="real" signature="elle(real,real)"><code></asyxml>*/
@@ -258,10 +258,10 @@
 {/*<asyxml></code><documentation>This structure represents a coordinate system in the plane.</documentation></asyxml>*/
   /*<asyxml><method type = "pair" signature="relativetodefault(pair)"><code></asyxml>*/
   restricted convert relativetodefault = new pair(pair m){return m;};/*<asyxml></code><documentation>Convert a pair given relatively to this coordinate system to
-                                                                     the pair relatively to the default coordinate system.</documentation></method></asyxml>*/
+                                                                       the pair relatively to the default coordinate system.</documentation></method></asyxml>*/
   /*<asyxml><method type = "pair" signature="defaulttorelativet(pair)"><code></asyxml>*/
   restricted convert defaulttorelative = new pair(pair m){return m;};/*<asyxml></code><documentation>Convert a pair given relatively to the default coordinate system to
-                                                                     the pair relatively to this coordinate system.</documentation></method></asyxml>*/
+                                                                       the pair relatively to this coordinate system.</documentation></method></asyxml>*/
   /*<asyxml><method type = "real" signature="dot(pair,pair)"><code></asyxml>*/
   restricted dot dot = new real(pair m, pair n){return dot(m, n);};/*<asyxml></code><documentation>Return the dot product of this coordinate system.</documentation></method></asyxml>*/
   /*<asyxml><method type = "real" signature="abs(pair)"><code></asyxml>*/
@@ -287,50 +287,50 @@
 
 /*<asyxml><operator type = "bool" signature="==(coordsys,coordsys)"><code></asyxml>*/
 bool operator ==(coordsys c1, coordsys c2)
-{/*<asyxml></code><documentation>Return true iff the coordinate system have the same origin and units vector.</documentation></operator></asyxml>*/
-  return c1.O == c2.O && c1.i == c2.i && c1.j == c2.j;
-}
+  {/*<asyxml></code><documentation>Return true iff the coordinate system have the same origin and units vector.</documentation></operator></asyxml>*/
+   return c1.O == c2.O && c1.i == c2.i && c1.j == c2.j;
+  }
 
 /*<asyxml><function type="coordsys" signature="cartesiansystem(pair,pair,pair)"><code></asyxml>*/
 coordsys cartesiansystem(pair O = (0, 0), pair i, pair j)
 {/*<asyxml></code><documentation>Return the Cartesian coordinate system (O, i, j).</documentation></function></asyxml>*/
-  coordsys R;
-  real[][] P = {{0, 0}, {0, 0}};
-  real[][] iP;
-  P[0][0] = i.x;
-  P[0][1] = j.x;
-  P[1][0] = i.y;
-  P[1][1] = j.y;
-  iP = inverse(P);
-  real ni = abs(i);
-  real nj = abs(j);
-  real ij = angle(j) - angle(i);
+ coordsys R;
+ real[][] P = {{0, 0}, {0, 0}};
+ real[][] iP;
+ P[0][0] = i.x;
+ P[0][1] = j.x;
+ P[1][0] = i.y;
+ P[1][1] = j.y;
+ iP = inverse(P);
+ real ni = abs(i);
+ real nj = abs(j);
+ real ij = angle(j) - angle(i);
 
-  pair rtd(pair m)
-  {
-    return O + (P[0][0] * m.x + P[0][1] * m.y, P[1][0] * m.x + P[1][1] * m.y);
-  }
+ pair rtd(pair m)
+ {
+   return O + (P[0][0] * m.x + P[0][1] * m.y, P[1][0] * m.x + P[1][1] * m.y);
+ }
 
-  pair dtr(pair m)
-  {
-    m-=O;
-    return (iP[0][0] * m.x + iP[0][1] * m.y, iP[1][0] * m.x + iP[1][1] * m.y);
-  }
+ pair dtr(pair m)
+ {
+   m-=O;
+   return (iP[0][0] * m.x + iP[0][1] * m.y, iP[1][0] * m.x + iP[1][1] * m.y);
+ }
 
-  pair polar(real r, real a)
-  {
-    real ca = sin(ij - a)/(ni * sin(ij));
-    real sa = sin(a)/(nj * sin(ij));
-    return r * (ca, sa);
-  }
+ pair polar(real r, real a)
+ {
+   real ca = sin(ij - a)/(ni * sin(ij));
+   real sa = sin(a)/(nj * sin(ij));
+   return r * (ca, sa);
+ }
 
-  real tdot(pair m, pair n)
-  {
-    return m.x * n.x * ni^2 + m.y * n.y * nj^2 + (m.x * n.y + n.x * m.y) * dot(i, j);
-  }
+ real tdot(pair m, pair n)
+ {
+   return m.x * n.x * ni^2 + m.y * n.y * nj^2 + (m.x * n.y + n.x * m.y) * dot(i, j);
+ }
 
-  R.init(rtd, dtr, polar, tdot);
-  return R;
+ R.init(rtd, dtr, polar, tdot);
+ return R;
 }
 
 
@@ -344,19 +344,19 @@
           pen jpen = ipen,
           arrowbar arrow = Arrow)
 {/*<asyxml></code><documentation>Draw the components (O, i, j, x - axis, y - axis) of 'R'.</documentation></function></asyxml>*/
-  unravel R;
-  dot(pic, O, dotpen);
-  drawline(pic, O, O + i, xpen);
-  drawline(pic, O, O + j, ypen);
-  draw(pic, li, O--(O + i), ipen, arrow);
-  Label lj = lj.copy();
-  lj.align(lj.align, unit(I * j));
-  draw(pic, lj, O--(O + j), jpen, arrow);
-  draw(pic, lj, O--(O + j), jpen, arrow);
-  Label lo = lo.copy();
-  lo.align(lo.align, -2 * dir(O--O + i, O--O + j));
-  lo.p(dotpen);
-  label(pic, lo, O);
+ unravel R;
+ dot(pic, O, dotpen);
+ drawline(pic, O, O + i, xpen);
+ drawline(pic, O, O + j, ypen);
+ draw(pic, li, O--(O + i), ipen, arrow);
+ Label lj = lj.copy();
+ lj.align(lj.align, unit(I * j));
+ draw(pic, lj, O--(O + j), jpen, arrow);
+ draw(pic, lj, O--(O + j), jpen, arrow);
+ Label lo = lo.copy();
+ lo.align(lo.align, -2 * dir(O--O + i, O--O + j));
+ lo.p(dotpen);
+ label(pic, lo, O);
 }
 
 /*<asyxml><operator type = "pair" signature="/(pair,coordsys)"><code></asyxml>*/
@@ -364,7 +364,7 @@
 {/*<asyxml></code><documentation>Return the xy - coordinates of 'p' relatively to
    the coordinate system 'R'.
    For example, if R = cartesiansystem((1, 2), (1, 0), (0, 1)), (0, 0)/R is (-1, -2).</documentation></operator></asyxml>*/
-  return R.defaulttorelative(p);
+ return R.defaulttorelative(p);
 }
 
 /*<asyxml><operator type = "pair" signature="*(coordsys,pair)"><code></asyxml>*/
@@ -372,25 +372,25 @@
 {/*<asyxml></code><documentation>Return the coordinates of 'p' given in the
    xy - coordinates 'R'.
    For example, if R = cartesiansystem((1, 2), (1, 0), (0, 1)), R * (0, 0) is (1, 2).</documentation></operator></asyxml>*/
-  return R.relativetodefault(p);
+ return R.relativetodefault(p);
 }
 
 /*<asyxml><operator type = "path" signature="*(coordsys,path)"><code></asyxml>*/
 path operator *(coordsys R, path g)
 {/*<asyxml></code><documentation>Return the reconstructed path applying R * pair to each node, pre and post control point of 'g'.</documentation></operator></asyxml>*/
-  guide og = R * point(g, 0);
-  real l = length(g);
-  for(int i = 1; i <= l; ++i)
-    {
-      pair P = R * point(g, i);
-      pair post = R * postcontrol(g, i - 1);
-      pair pre = R * precontrol(g, i);
-      if(i == l && (cyclic(g)))
-        og = og..controls post and pre..cycle;
-      else
-        og = og..controls post and pre..P;
-    }
-  return og;
+ guide og = R * point(g, 0);
+ real l = length(g);
+ for(int i = 1; i <= l; ++i)
+   {
+     pair P = R * point(g, i);
+     pair post = R * postcontrol(g, i - 1);
+     pair pre = R * precontrol(g, i);
+     if(i == l && (cyclic(g)))
+       og = og..controls post and pre..cycle;
+     else
+       og = og..controls post and pre..P;
+   }
+ return og;
 }
 
 /*<asyxml><operator type = "coordsys" signature="*(transform,coordsys)"><code></asyxml>*/
@@ -397,9 +397,9 @@
 coordsys operator *(transform t,coordsys R)
 {/*<asyxml></code><documentation>Provide transform * coordsys.
    Note that shiftless(t) is applied to R.i and R.j.</documentation></operator></asyxml>*/
-  coordsys oc;
-  oc = cartesiansystem(t * R.O, shiftless(t) * R.i, shiftless(t) * R.j);
-  return oc;
+ coordsys oc;
+ oc = cartesiansystem(t * R.O, shiftless(t) * R.i, shiftless(t) * R.j);
+ return oc;
 }
 
 /*<asyxml><constant type = "coordsys" signature="defaultcoordsys"><code></asyxml>*/
@@ -651,26 +651,26 @@
 
 /*<asyxml><operator type = "bool" signature="==(explicit point,explicit point)"><code></asyxml>*/
 bool operator ==(explicit point M, explicit point N)
-{/*<asyxml></code><documentation>Provide the test 'M == N' wish returns true iff MN < EPS</documentation></operator></asyxml>*/
-  return abs(locate(M) - locate(N)) < EPS;
-}
+  {/*<asyxml></code><documentation>Provide the test 'M == N' wish returns true iff MN < EPS</documentation></operator></asyxml>*/
+   return abs(locate(M) - locate(N)) < EPS;
+  }
 
 /*<asyxml><operator type = "bool" signature="!=(explicit point,explicit point)"><code></asyxml>*/
 bool operator !=(explicit point M, explicit point N)
 {/*<asyxml></code><documentation>Provide the test 'M != N' wish return true iff MN >= EPS</documentation></operator></asyxml>*/
-  return !(M == N);
+ return !(M == N);
 }
 
 /*<asyxml><operator type = "guide" signature="cast(point)"><code></asyxml>*/
 guide operator cast(point p)
 {/*<asyxml></code><documentation>Cast point to guide.</documentation></operator></asyxml>*/
-  return locate(p);
+ return locate(p);
 }
 
 /*<asyxml><operator type = "path" signature="cast(point)"><code></asyxml>*/
 path operator cast(point p)
 {/*<asyxml></code><documentation>Cast point to path.</documentation></operator></asyxml>*/
-  return locate(p);
+ return locate(p);
 }
 
 /*<asyxml><function type="void" signature="dot(picture,Label,explicit point,align,string,pen)"><code></asyxml>*/
@@ -678,70 +678,70 @@
          align align = NoAlign,
          string format = defaultformat, pen p = currentpen)
 {/*<asyxml></code><documentation></documentation></function></asyxml>*/
-  Label L = L.copy();
-  L.position(locate(Z));
-  if(L.s == "") {
-    if(format == "") format = defaultformat;
-    L.s = "("+format(format, Z.x)+", "+format(format, Z.y)+")";
-  }
-  L.align(align, E);
-  L.p(p);
-  dot(pic, locate(Z), p);
-  add(pic, L);
+ Label L = L.copy();
+ L.position(locate(Z));
+ if(L.s == "") {
+   if(format == "") format = defaultformat;
+   L.s = "("+format(format, Z.x)+", "+format(format, Z.y)+")";
+ }
+ L.align(align, E);
+ L.p(p);
+ dot(pic, locate(Z), p);
+ add(pic, L);
 }
 
 /*<asyxml><function type="real" signature="abs(coordsys,pair)"><code></asyxml>*/
 real abs(coordsys R, pair m)
 {/*<asyxml></code><documentation>Return the modulus |m| in the coordinate system 'R'.</documentation></function></asyxml>*/
-  return R.abs(m);
+ return R.abs(m);
 }
 
 /*<asyxml><function type="real" signature="abs(explicit point)"><code></asyxml>*/
 real abs(explicit point M)
 {/*<asyxml></code><documentation>Return the modulus |M| in its coordinate system.</documentation></function></asyxml>*/
-  return M.coordsys.abs(M.coordinates);
+ return M.coordsys.abs(M.coordinates);
 }
 
 /*<asyxml><function type="real" signature="length(explicit point)"><code></asyxml>*/
 real length(explicit point M)
 {/*<asyxml></code><documentation>Return the modulus |M| in its coordinate system (same as 'abs').</documentation></function></asyxml>*/
-  return M.coordsys.abs(M.coordinates);
+ return M.coordsys.abs(M.coordinates);
 }
 
 /*<asyxml><function type="point" signature="conj(explicit point)"><code></asyxml>*/
 point conj(explicit point M)
 {/*<asyxml></code><documentation>Conjugate.</documentation></function></asyxml>*/
-  return point(M.coordsys, conj(M.coordinates), M.m);
+ return point(M.coordsys, conj(M.coordinates), M.m);
 }
 
 /*<asyxml><function type="real" signature="degrees(explicit point,coordsys,bool)"><code></asyxml>*/
 real degrees(explicit point M, coordsys R = M.coordsys, bool warn = true)
 {/*<asyxml></code><documentation>Return the angle of M (in degrees) relatively to 'R'.</documentation></function></asyxml>*/
-  return (degrees(locate(M) - R.O, warn) - degrees(R.i))%360;
+ return (degrees(locate(M) - R.O, warn) - degrees(R.i))%360;
 }
 
 /*<asyxml><function type="real" signature="angle(explicit point,coordsys,bool)"><code></asyxml>*/
 real angle(explicit point M, coordsys R = M.coordsys, bool warn = true)
 {/*<asyxml></code><documentation>Return the angle of M (in radians) relatively to 'R'.</documentation></function></asyxml>*/
-  return radians(degrees(M, R, warn));
+ return radians(degrees(M, R, warn));
 }
 
 bool Finite(explicit point z)
 {
-  return abs(z.x) < Infinity && abs(z.y) < Infinity;
+ return abs(z.x) < Infinity && abs(z.y) < Infinity;
 }
 
 /*<asyxml><function type="bool" signature="finite(explicit point)"><code></asyxml>*/
 bool finite(explicit point p)
 {/*<asyxml></code><documentation>Avoid to compute 'finite((pair)(infinite_point))'.</documentation></function></asyxml>*/
-  return finite(p.coordinates);
+ return finite(p.coordinates);
 }
 
 /*<asyxml><function type="real" signature="dot(point,point)"><code></asyxml>*/
 real dot(point A, point B)
 {/*<asyxml></code><documentation>Return the dot product in the coordinate system of 'A'.</documentation></function></asyxml>*/
-  point[] P = standardizecoordsys(A.coordsys, A, B);
-  return P[0].coordsys.dot(P[0].coordinates, P[1].coordinates);
+ point[] P = standardizecoordsys(A.coordsys, A, B);
+ return P[0].coordsys.dot(P[0].coordinates, P[1].coordinates);
 }
 
 /*<asyxml><function type="real" signature="dot(point,explicit pair)"><code></asyxml>*/
@@ -748,33 +748,33 @@
 real dot(point A, explicit pair B)
 {/*<asyxml></code><documentation>Return the dot product in the default coordinate system.
    dot(explicit pair, point) is also defined.</documentation></function></asyxml>*/
-  return dot(locate(A), B);
+ return dot(locate(A), B);
 }
 real dot(explicit pair A, point B)
 {
-  return dot(A, locate(B));
+ return dot(A, locate(B));
 }
 
 /*<asyxml><function type="transforms" signature="rotateO(real)"><code></asyxml>*/
 transform rotateO(real a)
 {/*<asyxml></code><documentation>Rotation around the origin of the current coordinate system.</documentation></function></asyxml>*/
-  return rotate(a, currentcoordsys.O);
+ return rotate(a, currentcoordsys.O);
 }
 
 /*<asyxml><function type="transform" signature="projection(point,point)"><code></asyxml>*/
 transform projection(point A, point B)
 {/*<asyxml></code><documentation>Return the orthogonal projection on the line (AB).</documentation></function></asyxml>*/
-  pair dir = unit(locate(A) - locate(B));
-  pair a = locate(A);
-  real cof = dir.x * a.x + dir.y * a.y;
-  real tx = a.x - dir.x * cof;
-  real txx = dir.x^2;
-  real txy = dir.x * dir.y;
-  real ty = a.y - dir.y * cof;
-  real tyx = txy;
-  real tyy = dir.y^2;
-  transform t = (tx, ty, txx, txy, tyx, tyy);
-  return t;
+ pair dir = unit(locate(A) - locate(B));
+ pair a = locate(A);
+ real cof = dir.x * a.x + dir.y * a.y;
+ real tx = a.x - dir.x * cof;
+ real txx = dir.x^2;
+ real txy = dir.x * dir.y;
+ real ty = a.y - dir.y * cof;
+ real tyx = txy;
+ real tyy = dir.y^2;
+ transform t = (tx, ty, txx, txy, tyx, tyy);
+ return t;
 }
 
 /*<asyxml><function type="transform" signature="projection(point,point,point,point,bool)"><code></asyxml>*/
@@ -782,45 +782,45 @@
 {/*<asyxml></code><documentation>Return the (CD) parallel projection on (AB).
    If 'safe = true' and (AB)//(CD) return the identity.
    If 'safe = false' and (AB)//(CD) return an infinity scaling.</documentation></function></asyxml>*/
-  pair a = locate(A);
-  pair u = unit(locate(B) - locate(A));
-  pair v = unit(locate(D) - locate(C));
-  real c = u.x * a.y - u.y * a.x;
-  real d = (conj(u) * v).y;
-  if (abs(d) < epsgeo) {
-    return safe ? identity() : scale(infinity);
-  }
-  real tx = c * v.x/d;
-  real ty = c * v.y/d;
-  real txx = u.x * v.y/d;
-  real txy = -u.x * v.x/d;
-  real tyx = u.y * v.y/d;
-  real tyy = -u.y * v.x/d;
-  transform t = (tx, ty, txx, txy, tyx, tyy);
-  return t;
+ pair a = locate(A);
+ pair u = unit(locate(B) - locate(A));
+ pair v = unit(locate(D) - locate(C));
+ real c = u.x * a.y - u.y * a.x;
+ real d = (conj(u) * v).y;
+ if (abs(d) < epsgeo) {
+   return safe ? identity() : scale(infinity);
+ }
+ real tx = c * v.x/d;
+ real ty = c * v.y/d;
+ real txx = u.x * v.y/d;
+ real txy = -u.x * v.x/d;
+ real tyx = u.y * v.y/d;
+ real tyy = -u.y * v.x/d;
+ transform t = (tx, ty, txx, txy, tyx, tyy);
+ return t;
 }
 
 /*<asyxml><function type="transform" signature="scale(real,point)"><code></asyxml>*/
 transform scale(real k, point M)
 {/*<asyxml></code><documentation>Homothety.</documentation></function></asyxml>*/
-  pair P = locate(M);
-  return shift(P) * scale(k) * shift(-P);
+ pair P = locate(M);
+ return shift(P) * scale(k) * shift(-P);
 }
 
 /*<asyxml><function type="transform" signature="xscale(real,point)"><code></asyxml>*/
 transform xscale(real k, point M)
 {/*<asyxml></code><documentation>xscale from 'M' relatively to the x - axis of the coordinate system of 'M'.</documentation></function></asyxml>*/
-  pair P = locate(M);
-  real a = degrees(M.coordsys.i);
-  return (shift(P) * rotate(a)) * xscale(k) * (rotate(-a) * shift(-P));
+ pair P = locate(M);
+ real a = degrees(M.coordsys.i);
+ return (shift(P) * rotate(a)) * xscale(k) * (rotate(-a) * shift(-P));
 }
 
 /*<asyxml><function type="transform" signature="yscale(real,point)"><code></asyxml>*/
 transform yscale(real k, point M)
 {/*<asyxml></code><documentation>yscale from 'M' relatively to the y - axis of the coordinate system of 'M'.</documentation></function></asyxml>*/
-  pair P = locate(M);
-  real a = degrees(M.coordsys.j) - 90;
-  return (shift(P) * rotate(a)) * yscale(k) * (rotate(-a) * shift(-P));
+ pair P = locate(M);
+ real a = degrees(M.coordsys.j) - 90;
+ return (shift(P) * rotate(a)) * yscale(k) * (rotate(-a) * shift(-P));
 }
 
 /*<asyxml><function type="transform" signature="scale(real,point,point,point,point,bool)"><code></asyxml>*/
@@ -829,41 +829,41 @@
    (help me for English translation...)
    If 'safe = true' and (AB)//(CD) return the identity.
    If 'safe = false' and (AB)//(CD) return a infinity scaling.</documentation></function></asyxml>*/
-  pair a = locate(A);
-  pair u = unit(locate(B) - locate(A));
-  pair v = unit(locate(D) - locate(C));
-  real c = u.x * a.y - u.y * a.x;
-  real d = (conj(u) * v).y;
-  real d = (conj(u) * v).y;
-  if (abs(d) < epsgeo) {
-    return safe ? identity() : scale(infinity);
-  }
-  real tx = (1 - k) * c * v.x/d;
-  real ty = (1 - k) * c * v.y/d;
-  real txx = (1 - k) * u.x * v.y/d + k;
-  real txy = (k - 1) * u.x * v.x/d;
-  real tyx = (1 - k) * u.y * v.y/d;
-  real tyy = (k - 1) * u.y * v.x/d + k;
-  transform t = (tx, ty, txx, txy, tyx, tyy);
-  return t;
+ pair a = locate(A);
+ pair u = unit(locate(B) - locate(A));
+ pair v = unit(locate(D) - locate(C));
+ real c = u.x * a.y - u.y * a.x;
+ real d = (conj(u) * v).y;
+ real d = (conj(u) * v).y;
+ if (abs(d) < epsgeo) {
+   return safe ? identity() : scale(infinity);
+ }
+ real tx = (1 - k) * c * v.x/d;
+ real ty = (1 - k) * c * v.y/d;
+ real txx = (1 - k) * u.x * v.y/d + k;
+ real txy = (k - 1) * u.x * v.x/d;
+ real tyx = (1 - k) * u.y * v.y/d;
+ real tyy = (k - 1) * u.y * v.x/d + k;
+ transform t = (tx, ty, txx, txy, tyx, tyy);
+ return t;
 }
 
 /*<asyxml><function type="transform" signature="scaleO(real)"><code></asyxml>*/
 transform scaleO(real x)
 {/*<asyxml></code><documentation>Homothety from the origin of the current coordinate system.</documentation></function></asyxml>*/
-  return scale(x, (0, 0));
+ return scale(x, (0, 0));
 }
 
 /*<asyxml><function type="transform" signature="xscaleO(real)"><code></asyxml>*/
 transform xscaleO(real x)
 {/*<asyxml></code><documentation>xscale from the origin and relatively to the current coordinate system.</documentation></function></asyxml>*/
-  return scale(x, (0, 0), (0, 1), (0, 0), (1, 0));
+ return scale(x, (0, 0), (0, 1), (0, 0), (1, 0));
 }
 
 /*<asyxml><function type="transform" signature="yscaleO(real)"><code></asyxml>*/
 transform yscaleO(real x)
 {/*<asyxml></code><documentation>yscale from the origin and relatively to the current coordinate system.</documentation></function></asyxml>*/
-  return scale(x, (0, 0), (1, 0), (0, 0), (0, 1));
+ return scale(x, (0, 0), (1, 0), (0, 0), (0, 1));
 }
 
 /*<asyxml><struct signature="vector"><code></asyxml>*/
@@ -876,7 +876,7 @@
 /*<asyxml><operator type = "point" signature="cast(vector)"><code></asyxml>*/
 point operator cast(vector v)
 {/*<asyxml></code><documentation>Cast vector 'v' to point 'M' so that OM = v.</documentation></operator></asyxml>*/
-  return v.v;
+ return v.v;
 }
 
 /*<asyxml><operator type = "vector" signature="cast(pair)"><code></asyxml>*/
@@ -883,9 +883,9 @@
 vector operator cast(pair v)
 {/*<asyxml></code><documentation>Cast pair to vector relatively to the current coordinate
    system 'currentcoordsys'.</documentation></operator></asyxml>*/
-  vector ov;
-  ov.v = point(currentcoordsys, v);
-  return ov;
+ vector ov;
+ ov.v = point(currentcoordsys, v);
+ return ov;
 }
 
 /*<asyxml><operator type = "vector" signature="cast(explicit point)"><code></asyxml>*/
@@ -892,29 +892,29 @@
 vector operator cast(explicit point v)
 {/*<asyxml></code><documentation>A point can be interpreted like a vector using the code
    '(vector)a_point'.</documentation></operator></asyxml>*/
-  vector ov;
-  ov.v = v;
-  return ov;
+ vector ov;
+ ov.v = v;
+ return ov;
 }
 
 /*<asyxml><operator type = "pair" signature="cast(explicit vector)"><code></asyxml>*/
 pair operator cast(explicit vector v)
 {/*<asyxml></code><documentation>Cast vector to pair (the coordinates of 'v' in the default coordinate system).</documentation></operator></asyxml>*/
-  return locate(v.v) - v.v.coordsys.O;
+ return locate(v.v) - v.v.coordsys.O;
 }
 
 /*<asyxml><operator type = "align" signature="cast(vector)"><code></asyxml>*/
 align operator cast(vector v)
 {/*<asyxml></code><documentation>Cast vector to align.</documentation></operator></asyxml>*/
-  return (pair)v;
+ return (pair)v;
 }
 
 /*<asyxml><function type="vector" signature="vector(coordsys, pair)"><code></asyxml>*/
 vector vector(coordsys R = currentcoordsys, pair v)
 {/*<asyxml></code><documentation>Return the vector of 'R' which has the coordinates 'v'.</documentation></function></asyxml>*/
-  vector ov;
-  ov.v = point(R, v);
-  return ov;
+ vector ov;
+ ov.v = point(R, v);
+ return ov;
 }
 
 /*<asyxml><function type="vector" signature="vector(point)"><code></asyxml>*/
@@ -921,76 +921,76 @@
 vector vector(point M)
 {/*<asyxml></code><documentation>Return the vector OM, where O is the origin of the coordinate system of 'M'.
    Useful to write 'vector(P - M);' instead of '(vector)(P - M)'.</documentation></function></asyxml>*/
-  return M;
+ return M;
 }
 
 /*<asyxml><function type="point" signature="point(explicit vector)"><code></asyxml>*/
 point point(explicit vector u)
 {/*<asyxml></code><documentation>Return the point M so that OM = u, where O is the origin of the coordinate system of 'u'.</documentation></function></asyxml>*/
-  return u.v;
+ return u.v;
 }
 
 /*<asyxml><function type="pair" signature="locate(explicit vector)"><code></asyxml>*/
 pair locate(explicit vector v)
 {/*<asyxml></code><documentation>Return the coordinates of 'v' in the default coordinate system (like casting vector to pair).</documentation></function></asyxml>*/
-  return (pair)v;
+ return (pair)v;
 }
 
 /*<asyxml><function type="void" signature="show(Label,pen,arrowbar)"><code></asyxml>*/
 void show(Label L, vector v, pen p = currentpen, arrowbar arrow = Arrow)
 {/*<asyxml></code><documentation>Draw the vector v (from the origin of its coordinate system).</documentation></function></asyxml>*/
-  coordsys R = v.v.coordsys;
-  draw(L, R.O--v.v, p, arrow);
+ coordsys R = v.v.coordsys;
+ draw(L, R.O--v.v, p, arrow);
 }
 
 /*<asyxml><function type="vector" signature="changecoordsys(coordsys,vector)"><code></asyxml>*/
 vector changecoordsys(coordsys R, vector v)
 {/*<asyxml></code><documentation>Return the vector 'v' relatively to coordinate system 'R'.</documentation></function></asyxml>*/
-  vector ov;
-  ov.v = point(R, (locate(v) + R.O)/R);
-  return ov;
+ vector ov;
+ ov.v = point(R, (locate(v) + R.O)/R);
+ return ov;
 }
 
 /*<asyxml><operator type = "vector" signature="*(real,explicit vector)"><code></asyxml>*/
 vector operator *(real x, explicit vector v)
 {/*<asyxml></code><documentation>Provide real * vector.</documentation></operator></asyxml>*/
-  return x * v.v;
+ return x * v.v;
 }
 
 /*<asyxml><operator type = "vector" signature="/(explicit vector,real)"><code></asyxml>*/
 vector operator /(explicit vector v, real x)
 {/*<asyxml></code><documentation>Provide vector/real</documentation></operator></asyxml>*/
-  return v.v/x;
+ return v.v/x;
 }
 
 /*<asyxml><operator type = "vector" signature="*(transform t,explicit vector)"><code></asyxml>*/
 vector operator *(transform t, explicit vector v)
 {/*<asyxml></code><documentation>Provide transform * vector.</documentation></operator></asyxml>*/
-  return t * v.v;
+ return t * v.v;
 }
 
 /*<asyxml><operator type = "vector" signature="*(explicit point,explicit vector)"><code></asyxml>*/
 vector operator *(explicit point M, explicit vector v)
 {/*<asyxml></code><documentation>Provide point * vector</documentation></operator></asyxml>*/
-  return M * v.v;
+ return M * v.v;
 }
 
 /*<asyxml><operator type = "point" signature="+(explicit point,explicit vector)"><code></asyxml>*/
 point operator +(point M, explicit vector v)
 {/*<asyxml></code><documentation>Return 'M' shifted by 'v'.</documentation></operator></asyxml>*/
-  return shift(locate(v)) * M;
+ return shift(locate(v)) * M;
 }
 
 /*<asyxml><operator type = "point" signature="-(explicit point,explicit vector)"><code></asyxml>*/
 point operator -(point M, explicit vector v)
 {/*<asyxml></code><documentation>Return 'M' shifted by '-v'.</documentation></operator></asyxml>*/
-  return shift(-locate(v)) * M;
+ return shift(-locate(v)) * M;
 }
 
 /*<asyxml><operator type = "vector" signature="-(explicit vector)"><code></asyxml>*/
 vector operator -(explicit vector v)
 {/*<asyxml></code><documentation>Provide -v.</documentation></operator></asyxml>*/
-  return -v.v;
+ return -v.v;
 }
 
 /*<asyxml><operator type = "point" signature="+(explicit pair,explicit vector)"><code></asyxml>*/
@@ -998,7 +998,7 @@
 {/*<asyxml></code><documentation>The pair 'm' is supposed to be the coordinates of
    a point in the current coordinates system 'currentcoordsys'.
    Return this point shifted by the vector 'v'.</documentation></operator></asyxml>*/
-  return locate(m) + v;
+ return locate(m) + v;
 }
 
 /*<asyxml><operator type = "point" signature="-(explicit pair,explicit vector)"><code></asyxml>*/
@@ -1006,7 +1006,7 @@
 {/*<asyxml></code><documentation>The pair 'm' is supposed to be the coordinates of
    a point in the current coordinates system 'currentcoordsys'.
    Return this point shifted by the vector '-v'.</documentation></operator></asyxml>*/
-  return m + (-v);
+ return m + (-v);
 }
 
 /*<asyxml><operator type = "vector" signature="+(explicit vector,explicit vector)"><code></asyxml>*/
@@ -1014,9 +1014,9 @@
 {/*<asyxml></code><documentation>Provide vector + vector.
    If the two vector haven't the same coordinate system, the returned
    vector is relative to the default coordinate system (without warning).</documentation></operator></asyxml>*/
-  coordsys R = v1.v.coordsys;
-  if(samecoordsys(false, v1, v2)){R = defaultcoordsys;}
-  return vector(R, (locate(v1) + locate(v2))/R);
+ coordsys R = v1.v.coordsys;
+ if(samecoordsys(false, v1, v2)){R = defaultcoordsys;}
+ return vector(R, (locate(v1) + locate(v2))/R);
 }
 
 /*<asyxml><operator type = "vector" signature="-(explicit vector, explicit vector)"><code></asyxml>*/
@@ -1024,31 +1024,31 @@
 {/*<asyxml></code><documentation>Provide vector - vector.
    If the two vector haven't the same coordinate system, the returned
    vector is relative to the default coordinate system (without warning).</documentation></operator></asyxml>*/
-  return v1 + (-v2);
+ return v1 + (-v2);
 }
 
 /*<asyxml><operator type = "bool" signature="==(explicit vector,explicit vector)"><code></asyxml>*/
 bool operator ==(explicit vector u, explicit vector v)
-{/*<asyxml></code><documentation>Return true iff |u - v|<EPS.</documentation></operator></asyxml>*/
-  return abs(u - v) < EPS;
-}
+  {/*<asyxml></code><documentation>Return true iff |u - v|<EPS.</documentation></operator></asyxml>*/
+   return abs(u - v) < EPS;
+  }
 
 /*<asyxml><function type="bool" signature="collinear(vector,vector)"><code></asyxml>*/
 bool collinear(vector u, vector v)
 {/*<asyxml></code><documentation>Return 'true' iff the vectors 'u' and 'v' are collinear.</documentation></function></asyxml>*/
-  return abs(ypart((conj((pair)u) * (pair)v))) < EPS;
+ return abs(ypart((conj((pair)u) * (pair)v))) < EPS;
 }
 
 /*<asyxml><function type="vector" signature="unit(point)"><code></asyxml>*/
 vector unit(point M)
 {/*<asyxml></code><documentation>Return the unit vector according to the modulus of its coordinate system.</documentation></function></asyxml>*/
-  return M/abs(M);
+ return M/abs(M);
 }
 
 /*<asyxml><function type="vector" signature="unit(vector)"><code></asyxml>*/
 vector unit(vector u)
 {/*<asyxml></code><documentation>Return the unit vector according to the modulus of its coordinate system.</documentation></function></asyxml>*/
-  return u.v/abs(u.v);
+ return u.v/abs(u.v);
 }
 
 /*<asyxml><function type="real" signature="degrees(vector,coordsys,bool)"><code></asyxml>*/
@@ -1056,7 +1056,7 @@
              coordsys R = v.v.coordsys,
              bool warn = true)
 {/*<asyxml></code><documentation>Return the angle of 'v' (in degrees) relatively to 'R'.</documentation></function></asyxml>*/
-  return (degrees(locate(v), warn) - degrees(R.i))%360;
+ return (degrees(locate(v), warn) - degrees(R.i))%360;
 }
 
 /*<asyxml><function type="real" signature="angle(vector,coordsys,bool)"><code></asyxml>*/
@@ -1064,13 +1064,13 @@
            coordsys R = v.v.coordsys,
            bool warn = true)
 {/*<asyxml></code><documentation>Return the angle of 'v' (in radians) relatively to 'R'.</documentation></function></asyxml>*/
-  return radians(degrees(v, R, warn));
+ return radians(degrees(v, R, warn));
 }
 
 /*<asyxml><function type="vector" signature="conj(explicit vector)"><code></asyxml>*/
 vector conj(explicit vector u)
 {/*<asyxml></code><documentation>Conjugate.</documentation></function></asyxml>*/
-  return conj(u.v);
+ return conj(u.v);
 }
 
 /*<asyxml><function type="transform" signature="rotate(explicit vector)"><code></asyxml>*/
@@ -1079,7 +1079,7 @@
    This is useful for rotating text along a line in the direction dir.
    rotate(explicit point dir) is also defined.
    </documentation></function></asyxml>*/
-  return rotate(locate(dir));
+ return rotate(locate(dir));
 }
 transform rotate(explicit point dir){return rotate(locate(vector(dir)));}
 // *......................COORDINATES......................*
@@ -1311,7 +1311,7 @@
   g = margin(g, p).g;
   draw(apic, g, p);
   if(filltype != NoFill) filltype.fill(apic, (relpoint(g, 0) - relpoint(g, 0.5)+
-                                             relpoint(g, 1))--g--cycle, p + solid);
+                                              relpoint(g, 1))--g--cycle, p + solid);
   add(pic, apic, locate(z));
 }
 
@@ -1360,7 +1360,7 @@
   pair Ap = A, Bp = B, Op = O;
   pair dir = Ap - Op;
   real a1 = degrees(dir);
-  pair align = rotate(-a1) * unit(dir(Op--Ap, Op--Bp));
+  pair align = rotate(-a1) * dir(Op--Ap, Op--Bp);
   perpendicularmark(pic = pic, z = O, align = align,
                     dir = dir, size = size, p = p,
                     margin = margin, filltype = filltype);
@@ -1700,16 +1700,16 @@
 
 /*<asyxml><operator type = "bool" signature="==(line,line)"><code></asyxml>*/
 bool operator ==(line l1, line l2)
-{/*<asyxml></code><documentation>Provide the test 'line == line'.</documentation></operator></asyxml>*/
-  return (collinear(l1.u, l2.u) &&
-          abs(ypart((locate(l1.A) - locate(l1.B))/(locate(l1.A) - locate(l2.B)))) < epsgeo &&
-          l1.extendA == l2.extendA && l1.extendB == l2.extendB);
-}
+  {/*<asyxml></code><documentation>Provide the test 'line == line'.</documentation></operator></asyxml>*/
+   return (collinear(l1.u, l2.u) &&
+           abs(ypart((locate(l1.A) - locate(l1.B))/(locate(l1.A) - locate(l2.B)))) < epsgeo &&
+           l1.extendA == l2.extendA && l1.extendB == l2.extendB);
+  }
 
 /*<asyxml><operator type = "bool" signature="!=(line,line)"><code></asyxml>*/
 bool operator !=(line l1, line l2)
 {/*<asyxml></code><documentation>Provide the test 'line != line'.</documentation></operator></asyxml>*/
-  return !(l1 == l2);
+ return !(l1 == l2);
 }
 
 /*<asyxml><operator type = "bool" signature="@(point,line)"><code></asyxml>*/
@@ -1716,33 +1716,33 @@
 bool operator @(point m, line l)
 {/*<asyxml></code><documentation>Provide the test 'point @ line'.
    Return true iff 'm' is on the 'l'.</documentation></operator></asyxml>*/
-  point M = changecoordsys(l.A.coordsys, m);
-  if (abs(l.a * M.x + l.b * M.y + l.c) >= epsgeo) return false;
-  if (l.extendA && l.extendB) return true;
-  if (!l.extendA && !l.extendB) return between(l.A, M, l.B);
-  if (l.extendA) return sameside(M, l.A, l.B);
-  return sameside(M, l.B, l.A);
+ point M = changecoordsys(l.A.coordsys, m);
+ if (abs(l.a * M.x + l.b * M.y + l.c) >= epsgeo) return false;
+ if (l.extendA && l.extendB) return true;
+ if (!l.extendA && !l.extendB) return between(l.A, M, l.B);
+ if (l.extendA) return sameside(M, l.A, l.B);
+ return sameside(M, l.B, l.A);
 }
 
 /*<asyxml><function type="coordsys" signature="coordsys(line)"><code></asyxml>*/
 coordsys coordsys(line l)
 {/*<asyxml></code><documentation>Return the coordinate system in which 'l' is defined.</documentation></function></asyxml>*/
-  return l.A.coordsys;
+ return l.A.coordsys;
 }
 
 /*<asyxml><function type="line" signature="reverse(line)"><code></asyxml>*/
 line reverse(line l)
 {/*<asyxml></code><documentation>Permute the points 'A' and 'B' of 'l' and so its orientation.</documentation></function></asyxml>*/
-  return line(l.B, l.extendB, l.A, l.extendA);
+ return line(l.B, l.extendB, l.A, l.extendA);
 }
 
 /*<asyxml><function type="line" signature="extend(line)"><code></asyxml>*/
 line extend(line l)
 {/*<asyxml></code><documentation>Return the infinite line passing through 'l.A' and 'l.B'.</documentation></function></asyxml>*/
-  line ol = l.copy();
-  ol.extendA = true;
-  ol.extendB = true;
-  return ol;
+ line ol = l.copy();
+ ol.extendA = true;
+ ol.extendB = true;
+ return ol;
 }
 
 /*<asyxml><function type="line" signature="complementary(explicit line)"><code></asyxml>*/
@@ -1749,31 +1749,31 @@
 line complementary(explicit line l)
 {/*<asyxml></code><documentation>Return the complementary of a half-line with respect of
    the full line 'l'.</documentation></function></asyxml>*/
-  if (l.extendA && l.extendB)
-    abort("complementary: the parameter is not a half-line.");
-  point origin = l.extendA ? l.B : l.A;
-  point ptdir = l.extendA ?
-    rotate(180, l.B) * l.A : rotate(180, l.A) * l.B;
-  return line(origin, false, ptdir);
+ if (l.extendA && l.extendB)
+   abort("complementary: the parameter is not a half-line.");
+ point origin = l.extendA ? l.B : l.A;
+ point ptdir = l.extendA ?
+ rotate(180, l.B) * l.A : rotate(180, l.A) * l.B;
+ return line(origin, false, ptdir);
 }
 
 /*<asyxml><function type="line[]" signature="complementary(explicit segment)"><code></asyxml>*/
 line[] complementary(explicit segment s)
 {/*<asyxml></code><documentation>Return the two half-lines of origin 's.A' and 's.B' respectively.</documentation></function></asyxml>*/
-  line[] ol = new line[2];
-  ol[0] = complementary(line(s.A, false, s.B));
-  ol[1] = complementary(line(s.A, s.B, false));
-  return ol;
+ line[] ol = new line[2];
+ ol[0] = complementary(line(s.A, false, s.B));
+ ol[1] = complementary(line(s.A, s.B, false));
+ return ol;
 }
 
 /*<asyxml><function type="line" signature="Ox(coordsys)"><code></asyxml>*/
 line Ox(coordsys R = currentcoordsys)
 {/*<asyxml></code><documentation>Return the x-axis of 'R'.</documentation></function></asyxml>*/
-  return line(point(R, (0, 0)), point(R, E));
+ return line(point(R, (0, 0)), point(R, E));
 }
 /*<asyxml><constant type = "line" signature="Ox"><code></asyxml>*/
 restricted line Ox = Ox();/*<asyxml></code><documentation>the x-axis of
-                          the default coordinate system.</documentation></constant></asyxml>*/
+                            the default coordinate system.</documentation></constant></asyxml>*/
 
 /*<asyxml><function type="line" signature="Oy(coordsys)"><code></asyxml>*/
 line Oy(coordsys R = currentcoordsys)
@@ -1782,7 +1782,7 @@
 }
 /*<asyxml><constant type = "line" signature="Oy"><code></asyxml>*/
 restricted line Oy = Oy();/*<asyxml></code><documentation>the y-axis of
-                          the default coordinate system.</documentation></constant></asyxml>*/
+                            the default coordinate system.</documentation></constant></asyxml>*/
 
 /*<asyxml><function type="line" signature="line(real,point)"><code></asyxml>*/
 line line(real a, point A = point(currentcoordsys, (0, 0)))
@@ -1826,7 +1826,7 @@
 }
 /*<asyxml><constant type = "line" signature="vline"><code></asyxml>*/
 restricted line vline = vline();/*<asyxml></code><documentation>The vertical line in the current coordinate system passing
-                                through the origin of this system.</documentation></constant></asyxml>*/
+                                  through the origin of this system.</documentation></constant></asyxml>*/
 
 /*<asyxml><function type="line" signature="hline(coordsys)"><code></asyxml>*/
 line hline(coordsys R = currentcoordsys)
@@ -1837,7 +1837,7 @@
 }
 /*<asyxml><constant type = "line" signature="hline"><code></asyxml>*/
 line hline = hline();/*<asyxml></code><documentation>The horizontal line in the current coordinate system passing
-                     through the origin of this system.</documentation></constant></asyxml>*/
+                       through the origin of this system.</documentation></constant></asyxml>*/
 
 /*<asyxml><function type="line" signature="changecoordsys(coordsys,line)"><code></asyxml>*/
 line changecoordsys(coordsys R, line l)
@@ -2358,11 +2358,11 @@
 bqe changecoordsys(coordsys R, bqe bqe)
 {/*<asyxml></code><documentation>Returns the bivariate quadratic equation relatively to 'R'.</documentation></function></asyxml>*/
   pair i = coordinates(changecoordsys(R, vector(defaultcoordsys,
-                                             bqe.coordsys.i)));
+                                                bqe.coordsys.i)));
   pair j = coordinates(changecoordsys(R, vector(defaultcoordsys,
-                                             bqe.coordsys.j)));
+                                                bqe.coordsys.j)));
   pair O = coordinates(changecoordsys(R, point(defaultcoordsys,
-                                            bqe.coordsys.O)));
+                                               bqe.coordsys.O)));
   real a = bqe.a[0], b = bqe.a[1], c = bqe.a[2], d = bqe.a[3], f = bqe.a[4], g = bqe.a[5];
   real ux = i.x, uy = i.y;
   real vx = j.x, vy = j.y;
@@ -2372,14 +2372,14 @@
   real bpp = (-2 * a * vx * vy + b * ux * vy + b * uy * vx - 2 * c * ux * uy)/D^2;
   real cp = (a * vx^2 - b * ux * vx + c * ux^2)/D^2;
   real dp = (-2a * ox * vy^2 + 2a * oy * vx * vy + 2b * ox * uy * vy-
-           b * oy * ux * vy - b * oy * uy * vx - 2c * ox * uy^2 + 2c * oy * uy * ux)/D^2+
+             b * oy * ux * vy - b * oy * uy * vx - 2c * ox * uy^2 + 2c * oy * uy * ux)/D^2+
     (d * vy - f * uy)/D;
   real fp = (2a * ox * vx * vy - b * ox * ux * vy - 2a * oy * vx^2-
-           b * ox * uy * vx + 2 * b * oy * ux * vx + 2c * ox * ux * uy - 2c * oy * ux^2)/D^2+
+             b * ox * uy * vx + 2 * b * oy * ux * vx + 2c * ox * ux * uy - 2c * oy * ux^2)/D^2+
     (f * ux - d * vx)/D;
   g = (a * ox^2 * vy^2 - 2a * ox * oy * vx * vy - b * ox^2 * uy * vy + b * ox * oy * ux * vy+
-     a * oy^2 * vx^2 + b * ox * oy * uy * vx - b * oy^2 * ux * vx + c * ox^2 * uy^2-
-     2 * c * ox * oy * ux * uy + c * oy^2 * ux^2)/D^2+
+       a * oy^2 * vx^2 + b * ox * oy * uy * vx - b * oy^2 * ux * vx + c * ox^2 * uy^2-
+       2 * c * ox * oy * ux * uy + c * oy^2 * ux^2)/D^2+
     (d * oy * vx + f * ox * uy - d * ox * vy - f * oy * ux)/D + g;
   bqe obqe;
   obqe.a = approximate(new real[] {ap, bpp, cp, dp, fp, g});
@@ -2636,7 +2636,7 @@
     this.b = a * sqrt(this.e^2 - 1);
     this.p = a * (this.e^2 - 1);
     point A = this.C + (a^2/this.c) * unit(P[0]-this.C);
-    this.D1 = line(A, A + rotateO(90) * unit(A - this.C));
+    this.D1 = line(A, A + rotate(90,this.C.coordsys.O) * unit(A - this.C));
     this.D2 = reverse(rotate(180, C) * D1);
     this.V1 = C + a * unit(F1 - C);
     this.V2 = C + a * unit(F2 - C);
@@ -3073,8 +3073,8 @@
   real gle = degrees(l);
   coordsys Rp = cartesiansystem(R.O, rotate(gle) * R.i, rotate(gle) * R.j);
   pts = new pair[] {coordinates(changecoordsys(Rp, M1)),
-                  coordinates(changecoordsys(Rp, M2)),
-                  coordinates(changecoordsys(Rp, M3))};
+                    coordinates(changecoordsys(Rp, M2)),
+                    coordinates(changecoordsys(Rp, M3))};
   real[][] M;
   real[] x;
   for (int i = 0; i < 3; ++i) {
@@ -3560,10 +3560,10 @@
   path g;
   if(co.e < 1)
     g = arcfromcenter((ellipse)co, angle1,
-                    angle2, direction, n);
+                      angle2, direction, n);
   else if(co.e > 1)
     g = arcfromcenter((hyperbola)co, angle1,
-                    angle2, n, direction);
+                      angle2, n, direction);
   else abort("arcfromcenter: does not exist for a parabola.");
   return g;
 }
@@ -3590,8 +3590,8 @@
   }
   real[] coef = solve(M, x);
   bqe bqe = changecoordsys(coordsys(el),
-                         bqe(defaultcoordsys,
-                             1, coef[0], coef[1], coef[2], coef[3], coef[4]));
+                           bqe(defaultcoordsys,
+                               1, coef[0], coef[1], coef[2], coef[3], coef[4]));
   bqe.a = approximate(bqe.a);
   return bqe;
 }
@@ -4038,8 +4038,8 @@
     // given form the center of the ellipse.
     real gle = atan(el.a * tan(radians(a))/el.b)+
       pi * (((a%90 == 0 && a != 0) ? floor(a/90) - 1 : floor(a/90)) -
-          ((a%180 == 0) ? 0 : floor(a/180)) -
-          (a%360 == 0 ? floor(a/(360)) : 0));
+            ((a%180 == 0) ? 0 : floor(a/180)) -
+            (a%360 == 0 ? floor(a/(360)) : 0));
     /* // Uncomment to visualize the used branches
        unitsize(2cm, 1cm);
        import graph;
@@ -4076,7 +4076,7 @@
 {/*<asyxml></code><documentation>Return the arclength from 180 to 'angle' given from focus in the
    canonical coordinate system of 'p'.</documentation></function></asyxml>*/
   real a = p.a; /* In canonicalcartesiansystem(p) the equation of p
-                 is x = y^2/(4a) */
+                   is x = y^2/(4a) */
   // integrate(sqrt(1 + (x/(2 * a))^2), x);
   real S(real t){return 0.5 * t * sqrt(1 + t^2/(4 * a^2)) + a * asinh(t/(2 * a));}
   real R(real gle){return 2 * a/(1 - Cos(gle));}
@@ -4110,7 +4110,7 @@
   real x;/*<asyxml></code><documentation>The abscissa value.</documentation></property><property type = "int" signature="system"><code></asyxml>*/
   int system;/*<asyxml></code><documentation>0 = relativesystem; 1 = curvilinearsystem; 2 = angularsystem; 3 = nodesystem</documentation></property><property type = "polarconicroutine" signature="polarconicroutine"><code></asyxml>*/
   polarconicroutine polarconicroutine = fromCenter;/*<asyxml></code><documentation>The routine used with angular system and two foci conic section.
-                                                   Possible values are 'formCenter' and 'formFocus'.</documentation></property></asyxml>*/
+                                                     Possible values are 'formCenter' and 'formFocus'.</documentation></property></asyxml>*/
   /*<asyxml><method type = "abscissa" signature="copy()"><code></asyxml>*/
   abscissa copy()
   {/*<asyxml></code><documentation>Return a copy of this abscissa.</documentation></method></asyxml>*/
@@ -4800,7 +4800,7 @@
   restricted  real angle1, angle2;/*<asyxml></code><documentation>Values (in degrees) in ]-360, 360[.</documentation></property><property type = "bool" signature="direction"><code></asyxml>*/
   bool direction = CCW;/*<asyxml></code><documentation>The arc will be drawn from 'angle1' to 'angle2' rotating in the direction 'direction'.</documentation></property><property type = "polarconicroutine" signature="polarconicroutine"><code></asyxml>*/
   polarconicroutine polarconicroutine = currentpolarconicroutine;/*<asyxml></code><documentation>The routine to which the angles refer.
-                                                                 If 'el' is a circle 'fromCenter' is always used.</documentation></property></asyxml>*/
+                                                                   If 'el' is a circle 'fromCenter' is always used.</documentation></property></asyxml>*/
 
   /*<asyxml><method type = "void" signature="setangles(real,real,real)"><code></asyxml>*/
   void setangles(real a0, real a1, real a2)
@@ -6478,7 +6478,7 @@
     coordsys Rc = cartesiansystem(c.C, (1, 0), (0, 1));
     line ll = changecoordsys(Rc, l);
     pair[] P = intersectionpoints(ll.A.coordinates, ll.B.coordinates,
-                                1, 0, 1, 0, 0, -c.r^2);
+                                  1, 0, 1, 0, 0, -c.r^2);
     for (int i = 0; i < P.length; ++i) {
       point inter = changecoordsys(R, point(Rc, P[i]));
       if(inter @ l) op.push(inter);
@@ -6518,7 +6518,7 @@
     coordsys Rc = canonicalcartesiansystem(el);
     line ll = changecoordsys(Rc, l);
     pair[] P = intersectionpoints(ll.A.coordinates, ll.B.coordinates,
-                                1/el.a^2, 0, 1/el.b^2, 0, 0, -1);
+                                  1/el.a^2, 0, 1/el.b^2, 0, 0, -1);
     for (int i = 0; i < P.length; ++i) {
       point inter = changecoordsys(R, point(Rc, P[i]));
       if(inter @ l) op.push(inter);
@@ -6575,7 +6575,7 @@
   point[] op;
   coordsys R = coordsys(h);
   point A = intersectionpoint(l, h.A1), B = intersectionpoint(l, h.A2);
-  point M = midpoint(segment(A, B));
+  point M = 0.5*(A + B);
   bool tgt = Finite(M) ? M @ h : false;
   if(tgt) {
     if(M @ l) op.push(M);
@@ -6644,7 +6644,7 @@
     if(abs(b[4]) > e) {
       real D=b[4]^2;
       c=new real[] {(a[0]*b[4]^2+a[2]*b[3]^2+
-                       (-2*a[2]*a[3])*b[3]+a[2]*a[3]^2)/D,
+                     (-2*a[2]*a[3])*b[3]+a[2]*a[3]^2)/D,
                     -((-2*a[2]*b[3]+2*a[2]*a[3])*b[5]-a[3]*b[4]^2+
                       (2*a[2]*a[5])*b[3])/D,a[2]*(a[5]-b[5])^2/D+a[5]};
       x=quadraticroots(c[0],c[1],c[2]);

Modified: trunk/Build/source/utils/asymptote/base/graph.asy
===================================================================
--- trunk/Build/source/utils/asymptote/base/graph.asy	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/base/graph.asy	2021-01-02 16:31:31 UTC (rev 57291)
@@ -42,14 +42,14 @@
     return x-skip;
   }
   real Tinv(real x) {
-    if(x <= a) return x; 
-    return x+skip; 
+    if(x <= a) return x;
+    return x+skip;
   }
   return scaleT(T,Tinv,logarithmic=false,automin,automax);
 }
 
 // A "broken" logarithmic axis omitting the segment [a,b], where a and b are
-// automatically rounded to the nearest integral power of the base.  
+// automatically rounded to the nearest integral power of the base.
 scaleT BrokenLog(real a, real b, bool automin=false, bool automax=automin)
 {
   real A=round(Log.T(a));
@@ -92,7 +92,7 @@
         Linear(zautoscale,zautoscale));
 }
 
-struct scientific 
+struct scientific
 {
   int sign;
   real mantissa;
@@ -108,7 +108,7 @@
 }
 
 // Convert x to scientific notation
-scientific scientific(real x) 
+scientific scientific(real x)
 {
   scientific s;
   s.sign=sgn(x);
@@ -154,7 +154,7 @@
 
 real upscale(real b, real a)
 {
-  if(b <= 5) b=5; 
+  if(b <= 5) b=5;
   else if (b > 10 && a >= 0 && b <= 12) b=12;
   else if (b > 10 && (a >= 0 || 15 % -a == 0) && b <= 15) b=15;
   else b=ceil(b/10)*10;
@@ -182,7 +182,7 @@
     if(Min > 0) {Min=0; Max *= 2;}
     else {Min *= 2; Max=0;}
   }
-  
+
   int sign;
   if(Min < 0 && Max <= 0) {real temp=-Min; Min=-Max; Max=temp; sign=-1;}
   else sign=1;
@@ -203,7 +203,7 @@
 
   while((b-a)*10.0^exp > 10*(Max-Min))
     zoom();
-  
+
   real bsave=b;
   if(b-a > (a >= 0 ? 8 : 6)) {
     b=upscale(b,a);
@@ -211,11 +211,11 @@
       if(a <= 5) a=0; else a=floor(a/10)*10;
     } else a=-upscale(-a,-1);
   }
-  
+
   // Redo b in case the value of a has changed
   if(bsave-a > (a >= 0 ? 8 : 6))
     b=upscale(bsave,a);
-  
+
   if(sign == -1) {real temp=-a; a=-b; b=temp;}
   real Scale=10.0^exp;
   m.min=scale.T(a*Scale);
@@ -266,7 +266,7 @@
 
 ticklabel LogFormat=LogFormat(10);
 ticklabel DefaultLogFormat=DefaultLogFormat(10);
-  
+
 // The default direction specifier.
 pair zero(real) {return 0;}
 
@@ -275,7 +275,7 @@
   autoscaleT S;        // Autoscaling transformation.
   pair dir(real t);    // Absolute 2D tick direction.
   triple dir3(real t); // Absolute 3D tick direction.
-  real time(real v);   // Returns the time corresponding to the value v. 
+  real time(real v);   // Returns the time corresponding to the value v.
   ticklocate copy() {
     ticklocate T=new ticklocate;
     T.a=a;
@@ -289,7 +289,7 @@
 }
 
 autoscaleT defaultS;
-  
+
 typedef real valuetime(real);
 
 valuetime linear(scalefcn S=identity, real Min, real Max)
@@ -300,7 +300,7 @@
 
 ticklocate ticklocate(real a, real b, autoscaleT S=defaultS,
                       real tickmin=-infinity, real tickmax=infinity,
-                      real time(real)=null, pair dir(real)=zero) 
+                      real time(real)=null, pair dir(real)=zero)
 {
   if((valuetime) time == null) time=linear(S.T(),a,b);
   ticklocate locate;
@@ -313,13 +313,13 @@
   locate.dir=dir;
   return locate;
 }
-                             
+
 private struct locateT {
   real t;       // tick location time
   pair Z;       // tick location in frame coordinates
   pair pathdir; // path direction in frame coordinates
   pair dir;     // tick direction in frame coordinates
-  
+
   void dir(transform T, path g, ticklocate locate, real t) {
     pathdir=unit(shiftless(T)*dir(g,t));
     pair Dir=locate.dir(t);
@@ -333,7 +333,7 @@
   }
 }
 
-pair ticklabelshift(pair align, pen p=currentpen) 
+pair ticklabelshift(pair align, pen p=currentpen)
 {
   return 0.25*unit(align)*labelmargin(p);
 }
@@ -347,7 +347,7 @@
     locate2.calc(T,g2,locate,val);
     draw(f,locate1.Z--locate2.Z,p);
   } else
-    if(sign == 0) 
+    if(sign == 0)
       draw(f,locate1.Z-Size*locate1.dir--locate1.Z+Size*locate1.dir,p);
     else
       draw(f,locate1.Z--locate1.Z+Size*sign*locate1.dir,p);
@@ -388,10 +388,10 @@
     label(d,F.T*baseline(s,baselinetemplate),locate1.Z+shift,align,F.p,
           F.filltype);
   return locate1.pathdir;
-}  
+}
 
 // Add axis label L to frame f.
-void labelaxis(frame f, transform T, Label L, path g, 
+void labelaxis(frame f, transform T, Label L, path g,
                ticklocate locate=null, int sign=1, bool ticklabels=false)
 {
   Label L0=L.copy();
@@ -403,7 +403,7 @@
     locateT locate1;
     locate1.dir(T,g,locate,t);
     L0.align(L0.align,unit(-sgn(dot(sign*locate1.dir,perp))*perp));
-  }                  
+  }
   pair align=L0.align.dir;
   if(L0.align.relative) align *= -perp;
   pair alignperp=dot(align,perp)*perp;
@@ -477,7 +477,7 @@
 
 // Check the tick coverage of a logarithmic axis.
 bool logaxiscoverage(int N, transform T, path g, ticklocate locate, pair side,
-                     int sign, real Size, Label F, ticklabel ticklabel, 
+                     int sign, real Size, Label F, ticklabel ticklabel,
                      real limit, int first, int last)
 {
   bool loop=cyclic(g);
@@ -525,7 +525,7 @@
   int n=0;
 
   bool Fixed=find(a >= 1e4-epsilon | (a > 0 & a <= 1e-4-epsilon)) < 0;
-  
+
   string Format=defaultformat(4,fixed=Fixed);
 
   if(Fixed && n < 4) {
@@ -576,13 +576,13 @@
   if(size == 0) size=ticksize;
   F=F.copy();
   F.p(p);
-    
+
   if(F.align.dir != 0) side=F.align.dir;
   else if(side == 0) side=((sign == 1) ? left : right);
-    
+
   bool ticklabels=false;
   path G=T*g;
-    
+
   if(!locate.S.scale.logarithmic) {
     real a=locate.S.Tinv(locate.a);
     real b=locate.S.Tinv(locate.b);
@@ -594,15 +594,15 @@
     if(a > b) {real temp=a; a=b; b=temp;}
 
     if(b-a < 100.0*epsilon*norm) b=a;
-      
+
     bool autotick=Step == 0 && N == 0;
-    
-    real tickmin=finite(locate.S.tickMin) && (autotick || locate.S.automin) ? 
+
+    real tickmin=finite(locate.S.tickMin) && (autotick || locate.S.automin) ?
       locate.S.Tinv(locate.S.tickMin) : a;
     real tickmax=finite(locate.S.tickMax) && (autotick || locate.S.automax) ?
       locate.S.Tinv(locate.S.tickMax) : b;
     if(tickmin > tickmax) {real temp=tickmin; tickmin=tickmax; tickmax=temp;}
-      
+
     real inStep=Step;
 
     bool calcStep=true;
@@ -630,7 +630,7 @@
                 // Try using 2 ticks (otherwise 1);
                 int div=divisor[d+1];
                 Step=quotient(div,2)*len/div;
-                calcStep=false; 
+                calcStep=false;
                 if(axiscoverage(2,T,g,locate,Step,side,sign,Size,F,ticklabel,
                                 norm,limit)) N=2;
                 else Step=len;
@@ -650,7 +650,7 @@
         }
       }
     }
-      
+
     if(inStep != 0 && !locate.S.automin) {
       tickmin=floor(tickmin/Step)*Step;
       len=tickmax-tickmin;
@@ -661,13 +661,13 @@
       if(N == 0) N=(int) (len/Step);
       else Step=len/N;
     }
-    
+
     if(n == 0) {
       if(step != 0) n=ceil(Step/step);
     } else step=Step/n;
-      
+
     b += epsilon*norm;
-      
+
     if(Size > 0) {
       for(int i=0; i <= N; ++i) {
         real val=tickmin+i*Step;
@@ -684,7 +684,7 @@
         }
       }
     }
-    
+
   } else { // Logarithmic
     string format=F.s;
     if(F.s == "%") F.s="";
@@ -691,15 +691,15 @@
 
     int base=round(locate.S.scale.Tinv(1));
 
-    if(ticklabel == null) 
+    if(ticklabel == null)
       ticklabel=format == "%" ? Format("") : DefaultLogFormat(base);
     real a=locate.S.postscale.Tinv(locate.a);
     real b=locate.S.postscale.Tinv(locate.b);
     if(a > b) {real temp=a; a=b; b=temp;}
-      
+
     int first=floor(a-epsilon);
     int last=ceil(b+epsilon);
-      
+
     if(N == 0) {
       N=1;
       while(N <= last-first) {
@@ -708,10 +708,10 @@
         ++N;
       }
     }
-      
+
     if(N <= 2 && n == 0) n=base;
     tickvalues.N=N;
-      
+
     if(N > 0) {
       for(int i=first-1; i <= last+1; ++i) {
         if(i >= a && i <= b)
@@ -725,7 +725,7 @@
         }
       }
     }
-  }     
+  }
   return tickvalues;
 }
 
@@ -732,7 +732,7 @@
 // Signature of routines that draw labelled paths with ticks and tick labels.
 typedef void ticks(frame, transform, Label, pair, path, path, pen,
                    arrowbar, margin, ticklocate, int[], bool opposite=false);
-                                          
+
 // Tick construction routine for a user-specified array of tick values.
 ticks Ticks(int sign, Label F="", ticklabel ticklabel=null,
             bool beginlabel=true, bool endlabel=true,
@@ -741,7 +741,7 @@
             real Size=0, real size=0, bool extend=false,
             pen pTick=nullpen, pen ptick=nullpen)
 {
-  return new void(frame f, transform t, Label L, pair side, path g, path g2, 
+  return new void(frame f, transform t, Label L, pair side, path g, path g2,
                   pen p, arrowbar arrow, margin margin, ticklocate locate,
                   int[] divisor, bool opposite) {
     // Use local copy of context variables:
@@ -749,12 +749,12 @@
     pen pTick=pTick;
     pen ptick=ptick;
     ticklabel ticklabel=ticklabel;
-    
+
     real Size=Size;
     real size=size;
     if(Size == 0) Size=Ticksize;
     if(size == 0) size=ticksize;
-    
+
     Label L=L.copy();
     Label F=F.copy();
     L.p(p);
@@ -761,16 +761,16 @@
     F.p(p);
     if(pTick == nullpen) pTick=p;
     if(ptick == nullpen) ptick=pTick;
-    
+
     if(F.align.dir != 0) side=F.align.dir;
     else if(side == 0) side=F.T*((sign == 1) ? left : right);
-    
+
     bool ticklabels=false;
     path G=t*g;
     path G2=t*g2;
-    
+
     scalefcn T;
-    
+
     real a,b;
     if(locate.S.scale.logarithmic) {
       a=locate.S.postscale.Tinv(locate.a);
@@ -781,11 +781,11 @@
       b=locate.S.Tinv(locate.b);
       T=identity;
     }
-    
+
     if(a > b) {real temp=a; a=b; b=temp;}
 
     real norm=max(abs(a),abs(b));
-    
+
     string format=autoformat(F.s,norm...Ticks);
     if(F.s == "%") F.s="";
     if(ticklabel == null) {
@@ -809,7 +809,7 @@
         drawtick(f,t,g,g2,locate,val,size,sign,ptick,extend);
     }
     endgroup(f);
-    
+
     if(N == 0) N=1;
     if(Size > 0 && !opposite) {
       for(int i=(beginlabel ? 0 : 1);
@@ -821,7 +821,7 @@
         }
       }
     }
-    if(L.s != "" && !opposite) 
+    if(L.s != "" && !opposite)
       labelaxis(f,t,L,G,locate,sign,ticklabels);
   };
 }
@@ -832,7 +832,7 @@
 
 // Tickmodifier that removes all ticks in the intervals [a[i],b[i]].
 tickmodifier OmitTickIntervals(real[] a, real[] b) {
-  return new tickvalues(tickvalues v) { 
+  return new tickvalues(tickvalues v) {
     if(a.length != b.length) abort(differentlengths);
     void omit(real[] A) {
       if(A.length != 0) {
@@ -939,8 +939,8 @@
                begin,end,modify,Size,size,extend,pTick,ptick);
 }
 
-ticks LeftTicks(Label format="", ticklabel ticklabel=null, 
-                bool beginlabel=true, bool endlabel=true, 
+ticks LeftTicks(Label format="", ticklabel ticklabel=null,
+                bool beginlabel=true, bool endlabel=true,
                 real[] Ticks, real[] ticks=new real[],
                 real Size=0, real size=0, bool extend=false,
                 pen pTick=nullpen, pen ptick=nullpen)
@@ -949,8 +949,8 @@
                Ticks,ticks,Size,size,extend,pTick,ptick);
 }
 
-ticks RightTicks(Label format="", ticklabel ticklabel=null, 
-                 bool beginlabel=true, bool endlabel=true, 
+ticks RightTicks(Label format="", ticklabel ticklabel=null,
+                 bool beginlabel=true, bool endlabel=true,
                  real[] Ticks, real[] ticks=new real[],
                  real Size=0, real size=0, bool extend=false,
                  pen pTick=nullpen, pen ptick=nullpen)
@@ -959,8 +959,8 @@
                Ticks,ticks,Size,size,extend,pTick,ptick);
 }
 
-ticks Ticks(Label format="", ticklabel ticklabel=null, 
-            bool beginlabel=true, bool endlabel=true, 
+ticks Ticks(Label format="", ticklabel ticklabel=null,
+            bool beginlabel=true, bool endlabel=true,
             real[] Ticks, real[] ticks=new real[],
             real Size=0, real size=0, bool extend=false,
             pen pTick=nullpen, pen ptick=nullpen)
@@ -978,18 +978,18 @@
 {
   return minbound(pic.userMin(),(pic.scale.x.tickMin,pic.scale.y.tickMin));
 }
-  
+
 pair tickMax(picture pic)
 {
   return maxbound(pic.userMax(),(pic.scale.x.tickMax,pic.scale.y.tickMax));
 }
-                                               
+
 int Min=-1;
 int Value=0;
 int Max=1;
 int Both=2;
 
-// Structure used to communicate axis and autoscale settings to tick routines. 
+// Structure used to communicate axis and autoscale settings to tick routines.
 struct axisT {
   int type;        // -1 = min, 0 = given value, 1 = max, 2 = min/max
   int type2;       // for 3D axis
@@ -1062,7 +1062,7 @@
   };
 }
 
-axis LeftRight(bool extend=false) 
+axis LeftRight(bool extend=false)
 {
   return new void(picture pic, axisT axis) {
     axis.type=Both;
@@ -1134,7 +1134,7 @@
 void axis(picture pic=currentpicture, Label L="", path g, path g2=nullpath,
           pen p=currentpen, ticks ticks, ticklocate locate,
           arrowbar arrow=None, margin margin=NoMargin,
-          int[] divisor=new int[], bool above=false, bool opposite=false) 
+          int[] divisor=new int[], bool above=false, bool opposite=false)
 {
   Label L=L.copy();
   real t=reltime(g,0.5);
@@ -1146,9 +1146,9 @@
       ticks(d,t,L,0,g,g2,p,arrow,margin,locate,divisor,opposite);
       (above ? add : prepend)(f,t*T*inverse(t)*d);
     });
-  
+
   pic.addPath(g,p);
-  
+
   if(L.s != "") {
     frame f;
     Label L0=L.copy();
@@ -1195,7 +1195,7 @@
         pic.scale.x.tickMax=mx.max;
         divisor=mx.divisor;
       }
-      
+
       real fuzz=epsilon*max(abs(a.x),abs(b.x));
       a -= (fuzz,0);
       b += (fuzz,0);
@@ -1211,8 +1211,8 @@
       y2=pic.scale.y.automax() ? tickMax(pic).y : pic.userMax().y;
       y=opposite ? y2 :
         (pic.scale.y.automin() ? tickMin(pic).y : pic.userMin().y);
-    } 
-    else if(type == Min) 
+    }
+    else if(type == Min)
       y=pic.scale.y.automin() ? tickMin(pic).y : pic.userMin().y;
     else if(type == Max)
       y=pic.scale.y.automax() ? tickMax(pic).y : pic.userMax().y;
@@ -1229,7 +1229,7 @@
       pic.addPoint(a,min(p));
       pic.addPoint(a,max(p));
     }
-  
+
     if(finite(b)) {
       pic.addPoint(b,min(p));
       pic.addPoint(b,max(p));
@@ -1299,13 +1299,13 @@
             ticklocate(a.y,b.y,pic.scale.y),divisor,opposite);
       (above ? add : prepend)(f,t*T*tinv*d);
     });
-  
+
   void bounds() {
     if(type == Both) {
       x2=pic.scale.x.automax() ? tickMax(pic).x : pic.userMax().x;
-      x=opposite ? x2 : 
+      x=opposite ? x2 :
         (pic.scale.x.automin() ? tickMin(pic).x : pic.userMin().x);
-    } else if(type == Min) 
+    } else if(type == Min)
       x=pic.scale.x.automin() ? tickMin(pic).x : pic.userMin().x;
     else if(type == Max)
       x=pic.scale.x.automax() ? tickMax(pic).x : pic.userMax().x;
@@ -1317,17 +1317,17 @@
     pair b=(x,Ymax);
     pair a2=(x2,Ymin);
     pair b2=(x2,Ymax);
-  
+
     if(finite(a)) {
       pic.addPoint(a,min(p));
       pic.addPoint(a,max(p));
     }
-  
+
     if(finite(b)) {
       pic.addPoint(b,min(p));
       pic.addPoint(b,max(p));
     }
-  
+
     if(finite(a) && finite(b)) {
       frame d;
       ticks(d,pic.scaling(warn=false),L,side,
@@ -1361,32 +1361,32 @@
              bool crop=NoCrop)
 {
   if(min > max) return;
-  
+
   pic.scale.x.automin=min <= -infinity;
   pic.scale.x.automax=max >= infinity;
-  
+
   bounds mx;
   if(pic.scale.x.automin() || pic.scale.x.automax())
     mx=autoscale(pic.userMin().x,pic.userMax().x,pic.scale.x.scale);
-  
+
   if(pic.scale.x.automin) {
     if(pic.scale.x.automin()) pic.userMinx(mx.min);
   } else pic.userMinx(min(pic.scale.x.T(min),pic.scale.x.T(max)));
-  
+
   if(pic.scale.x.automax) {
     if(pic.scale.x.automax()) pic.userMaxx(mx.max);
   } else pic.userMaxx(max(pic.scale.x.T(min),pic.scale.x.T(max)));
-  
+
   if(crop) {
     pair userMin=pic.userMin();
     pair userMax=pic.userMax();
     pic.bounds.xclip(userMin.x,userMax.x);
     pic.clip(userMin, userMax,
-      new void (frame f, transform t, transform T, pair, pair) {
-        frame Tinvf=T == identity() ? f : t*inverse(T)*inverse(t)*f;
-        clip(f,T*box(((t*userMin).x,(min(Tinvf)).y),
-                     ((t*userMax).x,(max(Tinvf)).y)));
-      });
+             new void (frame f, transform t, transform T, pair, pair) {
+               frame Tinvf=T == identity() ? f : t*inverse(T)*inverse(t)*f;
+               clip(f,T*box(((t*userMin).x,(min(Tinvf)).y),
+                            ((t*userMax).x,(max(Tinvf)).y)));
+             });
   }
 }
 
@@ -1395,37 +1395,37 @@
              bool crop=NoCrop)
 {
   if(min > max) return;
-  
+
   pic.scale.y.automin=min <= -infinity;
   pic.scale.y.automax=max >= infinity;
-  
+
   bounds my;
   if(pic.scale.y.automin() || pic.scale.y.automax())
     my=autoscale(pic.userMin().y,pic.userMax().y,pic.scale.y.scale);
-  
+
   if(pic.scale.y.automin) {
     if(pic.scale.y.automin()) pic.userMiny(my.min);
   } else pic.userMiny(min(pic.scale.y.T(min),pic.scale.y.T(max)));
-  
+
   if(pic.scale.y.automax) {
     if(pic.scale.y.automax()) pic.userMaxy(my.max);
   } else pic.userMaxy(max(pic.scale.y.T(min),pic.scale.y.T(max)));
-  
+
   if(crop) {
     pair userMin=pic.userMin();
     pair userMax=pic.userMax();
     pic.bounds.yclip(userMin.y,userMax.y);
-    pic.clip(userMin, userMax, 
-      new void (frame f, transform t, transform T, pair, pair) {
-        frame Tinvf=T == identity() ? f : t*inverse(T)*inverse(t)*f;
-        clip(f,T*box(((min(Tinvf)).x,(t*userMin).y),
-                     ((max(Tinvf)).x,(t*userMax).y)));
-      });
+    pic.clip(userMin, userMax,
+             new void (frame f, transform t, transform T, pair, pair) {
+               frame Tinvf=T == identity() ? f : t*inverse(T)*inverse(t)*f;
+               clip(f,T*box(((min(Tinvf)).x,(t*userMin).y),
+                            ((max(Tinvf)).x,(t*userMax).y)));
+             });
   }
 }
 
 // Crop a picture to the current user-space picture limits.
-void crop(picture pic=currentpicture) 
+void crop(picture pic=currentpicture)
 {
   xlimits(pic,false);
   ylimits(pic,false);
@@ -1441,7 +1441,7 @@
   if(crop && pic.userSetx() && pic.userSety())
     clip(pic,box(pic.userMin(),pic.userMax()));
 }
-  
+
 // Internal routine to autoscale the user limits of a picture.
 void autoscale(picture pic=currentpicture, axis axis)
 {
@@ -1448,7 +1448,7 @@
   if(!pic.scale.set) {
     bounds mx,my;
     pic.scale.set=true;
-    
+
     if(pic.userSetx()) {
       mx=autoscale(pic.userMin().x,pic.userMax().x,pic.scale.x.scale);
       if(pic.scale.x.scale.logarithmic &&
@@ -1459,7 +1459,7 @@
           pic.userMaxx2(ceil(pic.userMax().x));
       }
     } else {mx.min=mx.max=0; pic.scale.set=false;}
-    
+
     if(pic.userSety()) {
       my=autoscale(pic.userMin().y,pic.userMax().y,pic.scale.y.scale);
       if(pic.scale.y.scale.logarithmic &&
@@ -1470,7 +1470,7 @@
           pic.userMaxy2(ceil(pic.userMax().y));
       }
     } else {my.min=my.max=0; pic.scale.set=false;}
-    
+
     pic.scale.x.tickMin=mx.min;
     pic.scale.x.tickMax=mx.max;
     pic.scale.y.tickMin=my.min;
@@ -1487,7 +1487,7 @@
            bool above=false)
 {
   if(xmin > xmax) return;
-  
+
   if(pic.scale.x.automin && xmin > -infinity) pic.scale.x.automin=false;
   if(pic.scale.x.automax && xmax < infinity) pic.scale.x.automax=false;
 
@@ -1495,20 +1495,20 @@
     axis(pic,axis);
     autoscale(pic,axis);
   }
-  
+
   Label L=L.copy();
   bool newticks=false;
-  
+
   if(xmin != -infinity) {
     xmin=pic.scale.x.T(xmin);
     newticks=true;
   }
-  
+
   if(xmax != infinity) {
     xmax=pic.scale.x.T(xmax);
     newticks=true;
   }
-  
+
   if(newticks && pic.userSetx() && ticks != NoTicks) {
     if(xmin == -infinity) xmin=pic.userMin().x;
     if(xmax == infinity) xmax=pic.userMax().x;
@@ -1517,9 +1517,9 @@
     pic.scale.x.tickMax=mx.max;
     axis.xdivisor=mx.divisor;
   }
-  
+
   axis(pic,axis);
-  
+
   if(xmin == -infinity && !axis.extend) {
     if(pic.scale.set)
       xmin=pic.scale.x.automin() ? pic.scale.x.tickMin :
@@ -1526,7 +1526,7 @@
         max(pic.scale.x.tickMin,pic.userMin().x);
     else xmin=pic.userMin().x;
   }
-  
+
   if(xmax == infinity && !axis.extend) {
     if(pic.scale.set)
       xmax=pic.scale.x.automax() ? pic.scale.x.tickMax :
@@ -1536,7 +1536,7 @@
 
   if(L.defaultposition) L.position(axis.position);
   L.align(L.align,axis.align);
-  
+
   xaxisAt(pic,L,axis,xmin,xmax,p,ticks,arrow,margin,above);
   if(axis.type == Both)
     xaxisAt(pic,L,axis,xmin,xmax,p,ticks,arrow,margin,above,true);
@@ -1552,25 +1552,25 @@
 
   if(pic.scale.y.automin && ymin > -infinity) pic.scale.y.automin=false;
   if(pic.scale.y.automax && ymax < infinity) pic.scale.y.automax=false;
-  
+
   if(!pic.scale.set) {
     axis(pic,axis);
     autoscale(pic,axis);
   }
-  
+
   Label L=L.copy();
   bool newticks=false;
-  
+
   if(ymin != -infinity) {
     ymin=pic.scale.y.T(ymin);
     newticks=true;
   }
-  
+
   if(ymax != infinity) {
     ymax=pic.scale.y.T(ymax);
     newticks=true;
   }
-  
+
   if(newticks && pic.userSety() && ticks != NoTicks) {
     if(ymin == -infinity) ymin=pic.userMin().y;
     if(ymax == infinity) ymax=pic.userMax().y;
@@ -1579,9 +1579,9 @@
     pic.scale.y.tickMax=my.max;
     axis.ydivisor=my.divisor;
   }
-  
+
   axis(pic,axis);
-  
+
   if(ymin == -infinity && !axis.extend) {
     if(pic.scale.set)
       ymin=pic.scale.y.automin() ? pic.scale.y.tickMin :
@@ -1588,8 +1588,8 @@
         max(pic.scale.y.tickMin,pic.userMin().y);
     else ymin=pic.userMin().y;
   }
-  
-  
+
+
   if(ymax == infinity && !axis.extend) {
     if(pic.scale.set)
       ymax=pic.scale.y.automax() ? pic.scale.y.tickMax :
@@ -1599,14 +1599,14 @@
 
   if(L.defaultposition) L.position(axis.position);
   L.align(L.align,axis.align);
-  
+
   if(autorotate && L.defaulttransform) {
     frame f;
     add(f,Label(L.s,(0,0),L.p));
-    if(length(max(f)-min(f)) > ylabelwidth*fontsize(L.p)) 
+    if(length(max(f)-min(f)) > ylabelwidth*fontsize(L.p))
       L.transform(rotate(90));
   }
-  
+
   yaxisAt(pic,L,axis,ymin,ymax,p,ticks,arrow,margin,above);
   if(axis.type == Both)
     yaxisAt(pic,L,axis,ymin,ymax,p,ticks,arrow,margin,above,true);
@@ -1627,7 +1627,7 @@
 void xequals(picture pic=currentpicture, Label L="", real x,
              bool extend=false, real ymin=-infinity, real ymax=infinity,
              pen p=currentpen, ticks ticks=NoTicks,
-             arrowbar arrow=None, margin margin=NoMargin, bool above=true) 
+             arrowbar arrow=None, margin margin=NoMargin, bool above=true)
 {
   yaxis(pic,L,XEquals(x,extend),ymin,ymax,p,ticks,arrow,margin,above);
 }
@@ -1682,7 +1682,7 @@
 }
 
 void ytick(picture pic=currentpicture, explicit pair z, pair dir=E,
-           real size=Ticksize, pen p=currentpen) 
+           real size=Ticksize, pen p=currentpen)
 {
   tick(pic,z,dir,size,p);
 }
@@ -1799,7 +1799,7 @@
   bounds a=autoscale(pic.userMin().x,pic.userMax().x,pic.scale.x.scale);
   real bmin=pic.scale.x.automin() ? a.min : pic.userMin().x;
   real bmax=pic.scale.x.automax() ? a.max : pic.userMax().x;
-  
+
   real denom=bmax-bmin;
   if(denom != 0) {
     pic.erase();
@@ -1849,7 +1849,7 @@
 
 typedef guide graph(pair f(real), real, real, int);
 typedef guide[] multigraph(pair f(real), real, real, int);
-                       
+
 graph graph(interpolate join)
 {
   return new guide(pair f(real), real a, real b, int n) {
@@ -2055,7 +2055,7 @@
 }
 
 // Connect points in z into segments corresponding to consecutive true elements
-// of b using interpolation operator join. 
+// of b using interpolation operator join.
 path[] segment(pair[] z, bool[] cond, interpolate join=operator --)
 {
   checkconditionlength(cond.length,z.length);
@@ -2102,7 +2102,7 @@
   if(dmy != dpy) draw(pic,Scale(pic,z+(0,dmy))--Scale(pic,z+(0,dpy)),p,
                       Bars(size));
 }
-  
+
 void errorbars(picture pic=currentpicture, pair[] z, pair[] dp, pair[] dm={},
                bool[] cond={}, pen p=currentpen, real size=0)
 {
@@ -2157,13 +2157,13 @@
     real x=(n == 1) ? 0.5 : i/(n-1);
     if(truesize)
       draw(relpoint(g,x),pic,vector(x),p,arrow);
-    else 
+    else
       draw(pic,shift(relpoint(g,x))*vector(x),p,arrow,margin);
   }
   return pic;
 }
 
-real maxlength(pair a, pair b, int nx, int ny) 
+real maxlength(pair a, pair b, int nx, int ny)
 {
   return min((b.x-a.x)/nx,(b.y-a.y)/ny);
 }

Modified: trunk/Build/source/utils/asymptote/base/graph3.asy
===================================================================
--- trunk/Build/source/utils/asymptote/base/graph3.asy	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/base/graph3.asy	2021-01-02 16:31:31 UTC (rev 57291)
@@ -9,7 +9,7 @@
 
 ticklocate ticklocate(real a, real b, autoscaleT S=defaultS,
                       real tickmin=-infinity, real tickmax=infinity,
-                      real time(real)=null, direction3 dir) 
+                      real time(real)=null, direction3 dir)
 {
   if((valuetime) time == null) time=linear(S.T(),a,b);
   ticklocate locate;
@@ -23,13 +23,13 @@
   locate.dir3=dir;
   return locate;
 }
-                             
+
 private struct locateT {
   real t;         // tick location time
   triple V;       // tick location in frame coordinates
   triple pathdir; // path direction in frame coordinates
   triple dir;     // tick direction in frame coordinates
-  
+
   void dir(transform3 T, path3 g, ticklocate locate, real t) {
     pathdir=unit(shiftless(T)*dir(g,t));
     triple Dir=locate.dir3(t);
@@ -60,7 +60,7 @@
   draw(pic,G,p,name="tick");
 }
 
-triple ticklabelshift(triple align, pen p=currentpen) 
+triple ticklabelshift(triple align, pen p=currentpen)
 {
   return 0.25*unit(align)*labelmargin(p);
 }
@@ -100,10 +100,10 @@
   if(s != "")
     label(pic,F.defaulttransform3 ? baseline(s,baselinetemplate) : F.T3*s,v,
           align,F.p);
-}  
+}
 
 // Add axis label L to frame f.
-void labelaxis(picture pic, transform3 T, Label L, path3 g, 
+void labelaxis(picture pic, transform3 T, Label L, path3 g,
                ticklocate locate=null, int sign=1, bool ticklabels=false)
 {
   triple m=pic.min(identity4);
@@ -118,7 +118,7 @@
       picture F;
       if(L.align.dir3 == O)
         align=unit(invert(L.align.dir,v,P))*abs(L.align.dir);
-      
+
       if(ticklabels && locate != null && piecewisestraight(g)) {
         locateT locate1;
         locate1.dir(T,g,locate,t);
@@ -171,12 +171,12 @@
     pen pTick=pTick;
     pen ptick=ptick;
     ticklabel ticklabel=ticklabel;
-    
+
     real Size=Size;
     real size=size;
     if(Size == 0) Size=Ticksize;
     if(size == 0) size=ticksize;
-    
+
     Label L=L.copy();
     Label F=F.copy();
     L.p(p);
@@ -183,13 +183,13 @@
     F.p(p);
     if(pTick == nullpen) pTick=p;
     if(ptick == nullpen) ptick=pTick;
-    
+
     bool ticklabels=false;
     path3 G=t*g;
     path3 G2=t*g2;
-    
+
     scalefcn T;
-    
+
     real a,b;
     if(locate.S.scale.logarithmic) {
       a=locate.S.postscale.Tinv(locate.a);
@@ -200,11 +200,11 @@
       b=locate.S.Tinv(locate.b);
       T=identity;
     }
-    
+
     if(a > b) {real temp=a; a=b; b=temp;}
 
     real norm=max(abs(a),abs(b));
-    
+
     string format=autoformat(F.s,norm...Ticks);
     if(F.s == "%") F.s="";
     if(ticklabel == null) {
@@ -324,8 +324,8 @@
                 begin,end,modify,Size,size,extend,pTick,ptick);
 }
 
-ticks3 InTicks(Label format="", ticklabel ticklabel=null, 
-               bool beginlabel=true, bool endlabel=true, 
+ticks3 InTicks(Label format="", ticklabel ticklabel=null,
+               bool beginlabel=true, bool endlabel=true,
                real[] Ticks, real[] ticks=new real[],
                real Size=0, real size=0, bool extend=false,
                pen pTick=nullpen, pen ptick=nullpen)
@@ -334,8 +334,8 @@
                 Ticks,ticks,Size,size,extend,pTick,ptick);
 }
 
-ticks3 OutTicks(Label format="", ticklabel ticklabel=null, 
-                bool beginlabel=true, bool endlabel=true, 
+ticks3 OutTicks(Label format="", ticklabel ticklabel=null,
+                bool beginlabel=true, bool endlabel=true,
                 real[] Ticks, real[] ticks=new real[],
                 real Size=0, real size=0, bool extend=false,
                 pen pTick=nullpen, pen ptick=nullpen)
@@ -344,8 +344,8 @@
                 Ticks,ticks,Size,size,extend,pTick,ptick);
 }
 
-ticks3 InOutTicks(Label format="", ticklabel ticklabel=null, 
-                  bool beginlabel=true, bool endlabel=true, 
+ticks3 InOutTicks(Label format="", ticklabel ticklabel=null,
+                  bool beginlabel=true, bool endlabel=true,
                   real[] Ticks, real[] ticks=new real[],
                   real Size=0, real size=0, bool extend=false,
                   pen pTick=nullpen, pen ptick=nullpen)
@@ -362,15 +362,15 @@
 triple tickMin3(picture pic)
 {
   return minbound(pic.userMin(),(pic.scale.x.tickMin,pic.scale.y.tickMin,
-                                  pic.scale.z.tickMin));
+                                 pic.scale.z.tickMin));
 }
-  
+
 triple tickMax3(picture pic)
 {
   return maxbound(pic.userMax(),(pic.scale.x.tickMax,pic.scale.y.tickMax,
-                                  pic.scale.z.tickMax));
+                                 pic.scale.z.tickMax));
 }
-                                               
+
 axis Bounds(int type=Both, int type2=Both, triple align=O, bool extend=false)
 {
   return new void(picture pic, axisT axis) {
@@ -470,7 +470,7 @@
 void axis(picture pic=currentpicture, Label L="", path3 g, path3 g2=nullpath3,
           pen p=currentpen, ticks3 ticks, ticklocate locate,
           arrowbar3 arrow=None, margin3 margin=NoMargin3,
-          int[] divisor=new int[], bool above=false, bool opposite=false) 
+          int[] divisor=new int[], bool above=false, bool opposite=false)
 {
   Label L=L.copy();
   real t=reltime(g,0.5);
@@ -477,15 +477,15 @@
   if(L.defaultposition) L.position(t);
   divisor=copy(divisor);
   locate=locate.copy();
-  
+
   pic.add(new void (picture f, transform3 t, transform3 T, triple, triple) {
       picture d;
       ticks(d,t,L,g,g2,p,arrow,margin,locate,divisor,opposite,true);
       add(f,t*T*inverse(t)*d);
     },above=above);
-  
+
   addPath(pic,g,p);
-  
+
   if(L.s != "") {
     frame f;
     Label L0=L.copy();
@@ -552,7 +552,7 @@
               y0=y2;
               z0=z;
             }
-            
+
             triple a2=xmin == -infinity ? tinv*(lb.x-min3(p).x,ytrans(t,y0),
                                                 ztrans(t,z0)) : (xmin,y0,z0);
             triple b2=xmax == infinity ? tinv*(rt.x-max3(p).x,ytrans(t,y0),
@@ -564,7 +564,7 @@
               pic.scale.x.tickMax=mx.max;
               divisor=mx.divisor;
             }
-      
+
             triple fuzz=X*epsilon*max(abs(a.x),abs(b.x));
             a -= fuzz;
             b += fuzz;
@@ -584,7 +584,7 @@
       y=pic.scale.y.automax() ? tickMax3(pic).y : pic.userMax().y;
     else if(type == Both) {
       y2=pic.scale.y.automax() ? tickMax3(pic).y : pic.userMax().y;
-      y=opposite ? y2 : 
+      y=opposite ? y2 :
         (pic.scale.y.automin() ? tickMin3(pic).y : pic.userMin().y);
     }
 
@@ -594,7 +594,7 @@
       z=pic.scale.z.automax() ? tickMax3(pic).z : pic.userMax().z;
     else if(type2 == Both) {
       z2=pic.scale.z.automax() ? tickMax3(pic).z : pic.userMax().z;
-      z=opposite2 ? z2 : 
+      z=opposite2 ? z2 :
         (pic.scale.z.automin() ? tickMin3(pic).z : pic.userMin().z);
     }
 
@@ -610,7 +610,7 @@
       pic.addPoint(a,min3(p));
       pic.addPoint(a,max3(p));
     }
-  
+
     if(finite(b)) {
       pic.addPoint(b,min3(p));
       pic.addPoint(b,max3(p));
@@ -650,7 +650,7 @@
   pic.scale.x.bound.push(bounds);
 }
 
-// An internal routine to draw an x axis at a particular y value.
+// An internal routine to draw a y axis at a particular value.
 void yaxis3At(picture pic=currentpicture, Label L="", axis axis,
               real ymin=-infinity, real ymax=infinity, pen p=currentpen,
               ticks3 ticks=NoTicks3,
@@ -685,12 +685,12 @@
               x0=x2;
               z0=z;
             }
-            
+
             triple a2=ymin == -infinity ? tinv*(xtrans(t,x0),lb.y-min3(p).y,
                                                 ztrans(t,z0)) : (x0,ymin,z0);
             triple b2=ymax == infinity ? tinv*(xtrans(t,x0),rt.y-max3(p).y,
                                                ztrans(t,z0)) : (x0,ymax,z0);
- 
+
             if(ymin == -infinity || ymax == infinity) {
               bounds my=autoscale(a.y,b.y,pic.scale.y.scale);
               pic.scale.y.tickMin=my.min;
@@ -697,7 +697,7 @@
               pic.scale.y.tickMax=my.max;
               divisor=my.divisor;
             }
-      
+
             triple fuzz=Y*epsilon*max(abs(a.y),abs(b.y));
             a -= fuzz;
             b += fuzz;
@@ -717,7 +717,7 @@
       x=pic.scale.x.automax() ? tickMax3(pic).x : pic.userMax().x;
     else if(type == Both) {
       x2=pic.scale.x.automax() ? tickMax3(pic).x : pic.userMax().x;
-      x=opposite ? x2 : 
+      x=opposite ? x2 :
         (pic.scale.x.automin() ? tickMin3(pic).x : pic.userMin().x);
     }
 
@@ -727,7 +727,7 @@
       z=pic.scale.z.automax() ? tickMax3(pic).z : pic.userMax().z;
     else if(type2 == Both) {
       z2=pic.scale.z.automax() ? tickMax3(pic).z : pic.userMax().z;
-      z=opposite2 ? z2 : 
+      z=opposite2 ? z2 :
         (pic.scale.z.automin() ? tickMin3(pic).z : pic.userMin().z);
     }
 
@@ -743,7 +743,7 @@
       pic.addPoint(a,min3(p));
       pic.addPoint(a,max3(p));
     }
-  
+
     if(finite(b)) {
       pic.addPoint(b,min3(p));
       pic.addPoint(b,max3(p));
@@ -783,7 +783,7 @@
   pic.scale.y.bound.push(bounds);
 }
 
-// An internal routine to draw an x axis at a particular y value.
+// An internal routine to draw a z axis at a particular value.
 void zaxis3At(picture pic=currentpicture, Label L="", axis axis,
               real zmin=-infinity, real zmax=infinity, pen p=currentpen,
               ticks3 ticks=NoTicks3,
@@ -818,7 +818,7 @@
               x0=x2;
               y0=y;
             }
-            
+
             triple a2=zmin == -infinity ? tinv*(xtrans(t,x0),ytrans(t,y0),
                                                 lb.z-min3(p).z) : (x0,y0,zmin);
             triple b2=zmax == infinity ? tinv*(xtrans(t,x0),ytrans(t,y0),
@@ -830,7 +830,7 @@
               pic.scale.z.tickMax=mz.max;
               divisor=mz.divisor;
             }
-      
+
             triple fuzz=Z*epsilon*max(abs(a.z),abs(b.z));
             a -= fuzz;
             b += fuzz;
@@ -850,7 +850,7 @@
       x=pic.scale.x.automax() ? tickMax3(pic).x : pic.userMax().x;
     else if(type == Both) {
       x2=pic.scale.x.automax() ? tickMax3(pic).x : pic.userMax().x;
-      x=opposite ? x2 : 
+      x=opposite ? x2 :
         (pic.scale.x.automin() ? tickMin3(pic).x : pic.userMin().x);
     }
 
@@ -860,7 +860,7 @@
       y=pic.scale.y.automax() ? tickMax3(pic).y : pic.userMax().y;
     else if(type2 == Both) {
       y2=pic.scale.y.automax() ? tickMax3(pic).y : pic.userMax().y;
-      y=opposite2 ? y2 : 
+      y=opposite2 ? y2 :
         (pic.scale.y.automin() ? tickMin3(pic).y : pic.userMin().y);
     }
 
@@ -876,7 +876,7 @@
       pic.addPoint(a,min3(p));
       pic.addPoint(a,max3(p));
     }
-  
+
     if(finite(b)) {
       pic.addPoint(b,min3(p));
       pic.addPoint(b,max3(p));
@@ -934,7 +934,7 @@
           pic.userMaxz3(ceil(pic.userMax().z));
       }
     } else {mz.min=mz.max=0; pic.scale.set=false;}
-    
+
     pic.scale.z.tickMin=mz.min;
     pic.scale.z.tickMax=mz.max;
     axis.zdivisor=mz.divisor;
@@ -948,7 +948,7 @@
             arrowbar3 arrow=None, margin3 margin=NoMargin3, bool above=false)
 {
   if(xmin > xmax) return;
-  
+
   if(pic.scale.x.automin && xmin > -infinity) pic.scale.x.automin=false;
   if(pic.scale.x.automax && xmax < infinity) pic.scale.x.automax=false;
 
@@ -956,19 +956,19 @@
     axis(pic,axis);
     autoscale3(pic,axis);
   }
-  
+
   bool newticks=false;
-  
+
   if(xmin != -infinity) {
     xmin=pic.scale.x.T(xmin);
     newticks=true;
   }
-  
+
   if(xmax != infinity) {
     xmax=pic.scale.x.T(xmax);
     newticks=true;
   }
-  
+
   if(newticks && pic.userSetx() && ticks != NoTicks3) {
     if(xmin == -infinity) xmin=pic.userMin().x;
     if(xmax == infinity) xmax=pic.userMax().x;
@@ -977,9 +977,9 @@
     pic.scale.x.tickMax=mx.max;
     axis.xdivisor=mx.divisor;
   }
-  
+
   axis(pic,axis);
-  
+
   if(xmin == -infinity && !axis.extend) {
     if(pic.scale.set)
       xmin=pic.scale.x.automin() ? pic.scale.x.tickMin :
@@ -986,7 +986,7 @@
         max(pic.scale.x.tickMin,pic.userMin().x);
     else xmin=pic.userMin().x;
   }
-  
+
   if(xmax == infinity && !axis.extend) {
     if(pic.scale.set)
       xmax=pic.scale.x.automax() ? pic.scale.x.tickMax :
@@ -998,7 +998,7 @@
     L=L.copy();
     L.position(axis.position);
   }
-  
+
   bool back=false;
   if(axis.type == Both) {
     triple v=currentprojection.normal;
@@ -1025,24 +1025,24 @@
 
   if(pic.scale.y.automin && ymin > -infinity) pic.scale.y.automin=false;
   if(pic.scale.y.automax && ymax < infinity) pic.scale.y.automax=false;
-  
+
   if(!pic.scale.set) {
     axis(pic,axis);
     autoscale3(pic,axis);
   }
-  
+
   bool newticks=false;
-  
+
   if(ymin != -infinity) {
     ymin=pic.scale.y.T(ymin);
     newticks=true;
   }
-  
+
   if(ymax != infinity) {
     ymax=pic.scale.y.T(ymax);
     newticks=true;
   }
-  
+
   if(newticks && pic.userSety() && ticks != NoTicks3) {
     if(ymin == -infinity) ymin=pic.userMin().y;
     if(ymax == infinity) ymax=pic.userMax().y;
@@ -1051,9 +1051,9 @@
     pic.scale.y.tickMax=my.max;
     axis.ydivisor=my.divisor;
   }
-  
+
   axis(pic,axis);
-  
+
   if(ymin == -infinity && !axis.extend) {
     if(pic.scale.set)
       ymin=pic.scale.y.automin() ? pic.scale.y.tickMin :
@@ -1060,8 +1060,8 @@
         max(pic.scale.y.tickMin,pic.userMin().y);
     else ymin=pic.userMin().y;
   }
-  
-  
+
+
   if(ymax == infinity && !axis.extend) {
     if(pic.scale.set)
       ymax=pic.scale.y.automax() ? pic.scale.y.tickMax :
@@ -1073,7 +1073,7 @@
     L=L.copy();
     L.position(axis.position);
   }
-  
+
   bool back=false;
   if(axis.type == Both) {
     triple v=currentprojection.normal;
@@ -1100,24 +1100,24 @@
 
   if(pic.scale.z.automin && zmin > -infinity) pic.scale.z.automin=false;
   if(pic.scale.z.automax && zmax < infinity) pic.scale.z.automax=false;
-  
+
   if(!pic.scale.set) {
     axis(pic,axis);
     autoscale3(pic,axis);
   }
-  
+
   bool newticks=false;
-  
+
   if(zmin != -infinity) {
     zmin=pic.scale.z.T(zmin);
     newticks=true;
   }
-  
+
   if(zmax != infinity) {
     zmax=pic.scale.z.T(zmax);
     newticks=true;
   }
-  
+
   if(newticks && pic.userSetz() && ticks != NoTicks3) {
     if(zmin == -infinity) zmin=pic.userMin().z;
     if(zmax == infinity) zmax=pic.userMax().z;
@@ -1126,9 +1126,9 @@
     pic.scale.z.tickMax=mz.max;
     axis.zdivisor=mz.divisor;
   }
-  
+
   axis(pic,axis);
-  
+
   if(zmin == -infinity && !axis.extend) {
     if(pic.scale.set)
       zmin=pic.scale.z.automin() ? pic.scale.z.tickMin :
@@ -1135,7 +1135,7 @@
         max(pic.scale.z.tickMin,pic.userMin().z);
     else zmin=pic.userMin().z;
   }
-  
+
   if(zmax == infinity && !axis.extend) {
     if(pic.scale.set)
       zmax=pic.scale.z.automax() ? pic.scale.z.tickMax :
@@ -1147,7 +1147,7 @@
     L=L.copy();
     L.position(axis.position);
   }
-  
+
   bool back=false;
   if(axis.type == Both) {
     triple v=currentprojection.vector();
@@ -1169,18 +1169,18 @@
              bool crop=NoCrop)
 {
   if(min > max) return;
-  
+
   pic.scale.z.automin=min <= -infinity;
   pic.scale.z.automax=max >= infinity;
-  
+
   bounds mz;
   if(pic.scale.z.automin() || pic.scale.z.automax())
     mz=autoscale(pic.userMin().z,pic.userMax().z,pic.scale.z.scale);
-  
+
   if(pic.scale.z.automin) {
     if(pic.scale.z.automin()) pic.userMinz(mz.min);
   } else pic.userMinz(min(pic.scale.z.T(min),pic.scale.z.T(max)));
-  
+
   if(pic.scale.z.automax) {
     if(pic.scale.z.automax()) pic.userMaxz(mz.max);
   } else pic.userMaxz(max(pic.scale.z.T(min),pic.scale.z.T(max)));
@@ -1193,10 +1193,10 @@
   ylimits(pic,min.y,max.y);
   zlimits(pic,min.z,max.z);
 }
-  
+
 // Draw x, y and z axes.
 void axes3(picture pic=currentpicture,
-           Label xlabel="", Label ylabel="", Label zlabel="", 
+           Label xlabel="", Label ylabel="", Label zlabel="",
            bool extend=false,
            triple min=(-infinity,-infinity,-infinity),
            triple max=(infinity,infinity,infinity),
@@ -1212,11 +1212,50 @@
   return (pic.scale.x.T(v.x),pic.scale.y.T(v.y),pic.scale.z.T(v.z));
 }
 
+triple[][] Scale(picture pic=currentpicture, triple[][] P)
+{
+  triple[][] Q=new triple[P.length][];
+  for(int i=0; i < P.length; ++i) {
+    triple[] Pi=P[i];
+    Q[i]=new triple[Pi.length];
+    for(int j=0; j < Pi.length; ++j)
+      Q[i][j]=Scale(pic,Pi[j]);
+  }
+  return Q;
+}
+
+real ScaleX(picture pic=currentpicture, real x)
+{
+  return pic.scale.x.T(x);
+}
+
+real ScaleY(picture pic=currentpicture, real y)
+{
+  return pic.scale.y.T(y);
+}
+
 real ScaleZ(picture pic=currentpicture, real z)
 {
   return pic.scale.z.T(z);
 }
 
+real[][] ScaleZ(picture pic=currentpicture, real[][] P)
+{
+  real[][] Q=new real[P.length][];
+  for(int i=0; i < P.length; ++i) {
+    real[] Pi=P[i];
+    Q[i]=new real[Pi.length];
+    for(int j=0; j < Pi.length; ++j)
+      Q[i][j]=ScaleZ(pic,Pi[j]);
+  }
+  return Q;
+}
+
+real[] uniform(real T(real x), real Tinv(real x), real a, real b, int n)
+{
+  return map(Tinv,uniform(T(a),T(b),n));
+}
+
 // Draw a tick of length size at triple v in direction dir using pen p.
 void tick(picture pic=currentpicture, triple v, triple dir, real size=Ticksize,
           pen p=currentpen)
@@ -1240,11 +1279,11 @@
             real size=Ticksize, pen p=currentpen)
 {
   tick(pic,(x,pic.scale.y.scale.logarithmic ? 1 : 0,
-             pic.scale.z.scale.logarithmic ? 1 : 0),dir,size,p);
+            pic.scale.z.scale.logarithmic ? 1 : 0),dir,size,p);
 }
 
 void ytick(picture pic=currentpicture, triple v, triple dir=X,
-           real size=Ticksize, pen p=currentpen) 
+           real size=Ticksize, pen p=currentpen)
 {
   tick(pic,v,dir,size,p);
 }
@@ -1257,7 +1296,7 @@
 }
 
 void ztick(picture pic=currentpicture, triple v, triple dir=X,
-           real size=Ticksize, pen p=currentpen) 
+           real size=Ticksize, pen p=currentpen)
 {
   xtick(pic,v,dir,size,p);
 }
@@ -1294,7 +1333,7 @@
             string format="", real size=Ticksize, pen p=currentpen)
 {
   xtick(pic,L,(x,pic.scale.y.scale.logarithmic ? 1 : 0,
-              pic.scale.z.scale.logarithmic ? 1 : 0),dir,size,p);
+               pic.scale.z.scale.logarithmic ? 1 : 0),dir,size,p);
 }
 
 void ytick(picture pic=currentpicture, Label L, triple v, triple dir=X,
@@ -1307,7 +1346,7 @@
             string format="", real size=Ticksize, pen p=currentpen)
 {
   xtick(pic,L,(pic.scale.x.scale.logarithmic ? 1 : 0,y,
-              pic.scale.z.scale.logarithmic ? 1 : 0),dir,format,size,p);
+               pic.scale.z.scale.logarithmic ? 1 : 0),dir,format,size,p);
 }
 
 void ztick(picture pic=currentpicture, Label L, triple v, triple dir=X,
@@ -1320,7 +1359,7 @@
             string format="", real size=Ticksize, pen p=currentpen)
 {
   xtick(pic,L,(pic.scale.x.scale.logarithmic ? 1 : 0,
-              pic.scale.z.scale.logarithmic ? 1 : 0,z),dir,format,size,p);
+               pic.scale.z.scale.logarithmic ? 1 : 0,z),dir,format,size,p);
 }
 
 private void label(picture pic, Label L, triple v, real x, align align,
@@ -1416,7 +1455,7 @@
 
 guide3 Straight(... guide3[])=operator --;
 guide3 Spline(... guide3[])=operator ..;
-                       
+
 guide3 graph(picture pic=currentpicture, real x(real), real y(real),
              real z(real), real a, real b, int n=ngraph,
              interpolate3 join=operator --)
@@ -1519,12 +1558,12 @@
 
 guide3 graph(triple F(pair), path p, int n=1, interpolate3 join=operator --)
 {
-  return graph(new triple(path p, real position) 
+  return graph(new triple(path p, real position)
                {return F(point(p,position));},p,n,join);
 }
 
 guide3 graph(picture pic=currentpicture, real f(pair), path p, int n=1,
-             interpolate3 join=operator --) 
+             interpolate3 join=operator --)
 {
   return graph(new triple(pair z) {return Scale(pic,(z.x,z.y,f(z)));},p,n,
                join);
@@ -1538,7 +1577,7 @@
 }
 
 // Connect points in v into segments corresponding to consecutive true elements
-// of b using interpolation operator join. 
+// of b using interpolation operator join.
 path3[] segment(triple[] v, bool[] cond, interpolate3 join=operator --)
 {
   checkconditionlength(cond.length,v.length);
@@ -1596,13 +1635,13 @@
 }
 
 // return the surface described by a matrix f
-surface surface(triple[][] f, bool[][] cond={})
+surface surface(picture pic=currentpicture, triple[][] f, bool[][] cond={})
 {
   if(!rectangular(f)) abort("matrix is not rectangular");
-  
+
   int nx=f.length-1;
   int ny=nx > 0 ? f[0].length-1 : 0;
-  
+
   bool all=cond.length == 0;
 
   int count;
@@ -1632,7 +1671,11 @@
     int[] indexi=s.index[i];
     for(int j=0; j < ny; ++j) {
       if(all || (condi[j] && condi[j+1] && condp[j] && condp[j+1]))
-        s.s[++k]=patch(new triple[] {fi[j],fp[j],fp[j+1],fi[j+1]});
+        s.s[++k]=patch(new triple[] {
+            Scale(pic,fi[j]),
+              Scale(pic,fp[j]),
+              Scale(pic,fp[j+1]),
+              Scale(pic,fi[j+1])});
       indexi[j]=k;
     }
   }
@@ -1708,14 +1751,15 @@
         real zppmppp=zpp-hx*pp[jp];
         real zijqij=zij+hy*qi[j];
         real zpjqpj=zpj+hy*qp[j];
-        
+
         s.s[k]=patch(new triple[][] {
-          {(xi,yj,zij),(xi,y1,zijqij),(xi,y2,zip-qip),(xi,yp,zip)},
-          {(x1,yj,zij+pij),(x1,y1,zijqij+pij+hxy*ri[j]),
-           (x1,y2,zippip-qip-hxy*ri[jp]),(x1,yp,zippip)},
-          {(x2,yj,zpj-ppj),(x2,y1,zpjqpj-ppj-hxy*rp[j]),
-           (x2,y2,zppmppp-qpp+hxy*rp[jp]),(x2,yp,zppmppp)},
-          {(xp,yj,zpj),(xp,y1,zpjqpj),(xp,y2,zpp-qpp),(xp,yp,zpp)}},copy=false);
+            {(xi,yj,zij),(xi,y1,zijqij),(xi,y2,zip-qip),(xi,yp,zip)},
+              {(x1,yj,zij+pij),(x1,y1,zijqij+pij+hxy*ri[j]),
+                  (x1,y2,zippip-qip-hxy*ri[jp]),(x1,yp,zippip)},
+                {(x2,yj,zpj-ppj),(x2,y1,zpjqpj-ppj-hxy*rp[j]),
+                    (x2,y2,zppmppp-qpp+hxy*rp[jp]),(x2,yp,zppmppp)},
+                  {(xp,yj,zpj),(xp,y1,zpjqpj),(xp,y2,zpp-qpp),(xp,yp,zpp)}},
+          copy=false);
         indexi[j]=k;
         ++k;
       }
@@ -1787,11 +1831,11 @@
         real zpjqpj=zpj+hy*qp[j];
 
         s[k]=new real[][] {{zij,zijqij,zip-qip,zip},
-                           {zij+pij,zijqij+pij+hxy*ri[j],
-                            zippip-qip-hxy*ri[jp],zippip},
-                           {zpj-ppj,zpjqpj-ppj-hxy*rp[j],
-                            zppmppp-qpp+hxy*rp[jp],zppmppp},
-                           {zpj,zpjqpj,zpp-qpp,zpp}};
+                                        {zij+pij,zijqij+pij+hxy*ri[j],
+                                            zippip-qip-hxy*ri[jp],zippip},
+                                          {zpj-ppj,zpjqpj-ppj-hxy*rp[j],
+                                              zppmppp-qpp+hxy*rp[jp],zppmppp},
+                                            {zpj,zpjqpj,zpp-qpp,zpp}};
         ++k;
       }
     }
@@ -1831,10 +1875,15 @@
 
 // return the surface described by a real matrix f, interpolated with
 // xsplinetype and ysplinetype.
-surface surface(real[][] f, real[] x, real[] y,
-                splinetype xsplinetype=null, splinetype ysplinetype=xsplinetype,
+surface surface(picture pic=currentpicture, real[][] f, real[] x, real[] y,
+                splinetype xsplinetype=null,
+                splinetype ysplinetype=xsplinetype,
                 bool[][] cond={})
 {
+  real[][] f=ScaleZ(pic,f);
+  real[] x=map(pic.scale.x.T,x);
+  real[] y=map(pic.scale.y.T,y);
+
   real epsilon=sqrtEpsilon*norm(y);
   if(xsplinetype == null)
     xsplinetype=(abs(x[0]-x[x.length-1]) <= epsilon) ? periodic : notaknot;
@@ -1863,8 +1912,9 @@
 
 // return the surface described by a real matrix f, interpolated with
 // xsplinetype and ysplinetype.
-surface surface(real[][] f, pair a, pair b, splinetype xsplinetype,
-                splinetype ysplinetype=xsplinetype, bool[][] cond={})
+surface surface(picture pic=currentpicture, real[][] f, pair a, pair b,
+                splinetype xsplinetype, splinetype ysplinetype=xsplinetype,
+                bool[][] cond={})
 {
   if(!rectangular(f)) abort("matrix is not rectangular");
 
@@ -1873,13 +1923,14 @@
 
   if(nx == 0 || ny == 0) return nullsurface;
 
-  real[] x=uniform(a.x,b.x,nx);
-  real[] y=uniform(a.y,b.y,ny);
-  return surface(f,x,y,xsplinetype,ysplinetype,cond);
+  real[] x=uniform(pic.scale.x.T,pic.scale.x.Tinv,a.x,b.x,nx);
+  real[] y=uniform(pic.scale.y.T,pic.scale.y.Tinv,a.y,b.y,ny);
+  return surface(pic,f,x,y,xsplinetype,ysplinetype,cond);
 }
 
 // return the surface described by a real matrix f, interpolated linearly.
-surface surface(real[][] f, pair a, pair b, bool[][] cond={})
+surface surface(picture pic=currentpicture, real[][] f, pair a, pair b,
+                bool[][] cond={})
 {
   if(!rectangular(f)) abort("matrix is not rectangular");
 
@@ -1891,22 +1942,25 @@
   bool all=cond.length == 0;
 
   triple[][] v=new triple[nx+1][ny+1];
+
+  pair a=Scale(pic,a);
+  pair b=Scale(pic,b);
   for(int i=0; i <= nx; ++i) {
-    real x=interp(a.x,b.x,i/nx);
+    real x=pic.scale.x.Tinv(interp(a.x,b.x,i/nx));
     bool[] condi=all ? null : cond[i];
     triple[] vi=v[i];
     real[] fi=f[i];
     for(int j=0; j <= ny; ++j)
       if(all || condi[j])
-        vi[j]=(x,interp(a.y,b.y,j/ny),fi[j]);
+        vi[j]=(x,pic.scale.y.Tinv(interp(a.y,b.y,j/ny)),fi[j]);
   }
-  return surface(v,cond);
+  return surface(pic,v,cond);
 }
 
 // return the surface described by a parametric function f over box(a,b),
 // interpolated linearly.
-surface surface(triple f(pair z), pair a, pair b, int nu=nmesh, int nv=nu,
-                bool cond(pair z)=null)
+surface surface(picture pic=currentpicture, triple f(pair z), pair a, pair b,
+                int nu=nmesh, int nv=nu, bool cond(pair z)=null)
 {
   if(nu <= 0 || nv <= 0) return nullsurface;
 
@@ -1921,23 +1975,25 @@
 
   triple[][] v=new triple[nu+1][nv+1];
 
+  pair a=Scale(pic,a);
+  pair b=Scale(pic,b);
   for(int i=0; i <= nu; ++i) {
-    real x=interp(a.x,b.x,i*du);
+    real x=pic.scale.x.Tinv(interp(a.x,b.x,i*du));
     bool[] activei=all ? null : active[i];
     triple[] vi=v[i];
     for(int j=0; j <= nv; ++j) {
-      pair z=(x,interp(a.y,b.y,j*dv));
+      pair z=(x,pic.scale.y.Tinv(interp(a.y,b.y,j*dv)));
       if(all || (activei[j]=cond(z))) vi[j]=f(z);
     }
   }
-  return surface(v,active);
+  return surface(pic,v,active);
 }
-  
+
 // return the surface described by a parametric function f evaluated at u and v
 // and interpolated with usplinetype and vsplinetype.
-surface surface(triple f(pair z), real[] u, real[] v,
-                splinetype[] usplinetype, splinetype[] vsplinetype=Spline,
-                bool cond(pair z)=null)
+surface surface(picture pic=currentpicture, triple f(pair z),
+                real[] u, real[] v, splinetype[] usplinetype,
+                splinetype[] vsplinetype=Spline, bool cond(pair z)=null)
 {
   int nu=u.length-1;
   int nv=v.length-1;
@@ -1960,7 +2016,7 @@
     for(int j=0; j <= nv; ++j) {
       pair z=(ui,v[j]);
       if(!all) activei[j]=cond(z);
-      triple f=f(z);
+      triple f=Scale(pic,f(z));
       fxi[j]=f.x;
       fyi[j]=f.y;
       fzi[j]=f.z;
@@ -2020,27 +2076,30 @@
 
 // return the surface described by a parametric function f over box(a,b),
 // interpolated with usplinetype and vsplinetype.
-surface surface(triple f(pair z), pair a, pair b, int nu=nmesh, int nv=nu,
+surface surface(picture pic=currentpicture, triple f(pair z), pair a, pair b,
+                int nu=nmesh, int nv=nu,
                 splinetype[] usplinetype, splinetype[] vsplinetype=Spline,
                 bool cond(pair z)=null)
 {
-  return surface(f,uniform(a.x,b.x,nu),uniform(a.y,b.y,nv),
-                 usplinetype,vsplinetype,cond);
+  real[] x=uniform(pic.scale.x.T,pic.scale.x.Tinv,a.x,b.x,nu);
+  real[] y=uniform(pic.scale.y.T,pic.scale.y.Tinv,a.y,b.y,nv);
+  return surface(pic,f,x,y,usplinetype,vsplinetype,cond);
 }
 
 // return the surface described by a real function f over box(a,b),
 // interpolated linearly.
-surface surface(real f(pair z), pair a, pair b, int nx=nmesh, int ny=nx,
-                bool cond(pair z)=null)
+surface surface(picture pic=currentpicture, real f(pair z), pair a, pair b,
+                int nx=nmesh, int ny=nx, bool cond(pair z)=null)
 {
-  return surface(new triple(pair z) {return (z.x,z.y,f(z));},a,b,nx,ny,cond);
+  return surface(pic,new triple(pair z) {return (z.x,z.y,f(z));},a,b,nx,ny,
+                 cond);
 }
 
 // return the surface described by a real function f over box(a,b),
 // interpolated with xsplinetype and ysplinetype.
-surface surface(real f(pair z), pair a, pair b, int nx=nmesh, int ny=nx,
-                splinetype xsplinetype, splinetype ysplinetype=xsplinetype,
-                bool cond(pair z)=null)
+surface surface(picture pic=currentpicture, real f(pair z), pair a, pair b,
+                int nx=nmesh, int ny=nx, splinetype xsplinetype,
+                splinetype ysplinetype=xsplinetype, bool cond(pair z)=null)
 {
   bool[][] active;
   bool all=cond == null;
@@ -2052,8 +2111,8 @@
   pair dz=(dx,dy);
 
   real[][] F=new real[nx+1][ny+1];
-  real[] x=uniform(a.x,b.x,nx);
-  real[] y=uniform(a.y,b.y,ny);
+  real[] x=uniform(pic.scale.x.T,pic.scale.x.Tinv,a.x,b.x,nx);
+  real[] y=uniform(pic.scale.y.T,pic.scale.y.Tinv,a.y,b.y,ny);
   for(int i=0; i <= nx; ++i) {
     bool[] activei=all ? null : active[i];
     real[] Fi=F[i];
@@ -2064,7 +2123,7 @@
       if(!all) activei[j]=cond(z);
     }
   }
-  return surface(F,x,y,xsplinetype,ysplinetype,active);
+  return surface(pic,F,x,y,xsplinetype,ysplinetype,active);
 }
 
 guide3[][] lift(real f(real x, real y), guide[][] g,
@@ -2128,7 +2187,7 @@
        render,interaction);
 }
 
-real maxlength(triple f(pair z), pair a, pair b, int nu, int nv) 
+real maxlength(triple f(pair z), pair a, pair b, int nu, int nv)
 {
   return min(abs(f((b.x,a.y))-f(a))/nu,abs(f((a.x,b.y))-f(a))/nv);
 }

Modified: trunk/Build/source/utils/asymptote/base/graph_splinetype.asy
===================================================================
--- trunk/Build/source/utils/asymptote/base/graph_splinetype.asy	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/base/graph_splinetype.asy	2021-01-02 16:31:31 UTC (rev 57291)
@@ -13,7 +13,7 @@
     abort(text+": "+string(x)+" != "+string(y));
 }
 
-void checkincreasing(real[] x) 
+void checkincreasing(real[] x)
 {
   if(!increasing(x,true))
     abort("strictly increasing array expected");
@@ -114,7 +114,7 @@
 // Standard cubic spline interpolation with the natural condition
 // s''(a)=s''(b)=0.
 // if n=2, linear interpolation is returned
-// Don't use the natural type unless the underlying function 
+// Don't use the natural type unless the underlying function
 // has zero second end points derivatives.
 real[] natural(real[] x, real[] y)
 {
@@ -186,25 +186,25 @@
 
 // Piecewise Cubic Hermite Interpolating Polynomial (PCHIP)
 // Modified MATLAB code
-// [1] Fritsch, F. N. and R. E. Carlson, 
-//      "Monotone Piecewise Cubic Interpolation," 
+// [1] Fritsch, F. N. and R. E. Carlson,
+//      "Monotone Piecewise Cubic Interpolation,"
 //      SIAM J. Numerical Analysis, Vol. 17, 1980, pp.238-246.
-// [2] Kahaner, David, Cleve Moler, Stephen Nash, 
+// [2] Kahaner, David, Cleve Moler, Stephen Nash,
 //      Numerical Methods and Software, Prentice Hall, 1988.
-real[] monotonic(real[] x, real[] y) 
+real[] monotonic(real[] x, real[] y)
 {
-  int n=x.length; 
+  int n=x.length;
   checklengths(n,y.length);
   checkincreasing(x);
-  real[] d=new real[n]; 
+  real[] d=new real[n];
   if(n > 2) {
     real[] h=new real[n-1];
     real[] del=new real[n-1];
     for(int i=0; i < n-1; ++i) {
-      h[i]=x[i+1]-x[i]; 
-      del[i]=(y[i+1]-y[i])/h[i]; 
-    } 
-    int j=0; 
+      h[i]=x[i+1]-x[i];
+      del[i]=(y[i+1]-y[i])/h[i];
+    }
+    int j=0;
     int k[]=new int[];
     for(int i=0; i < n-2; ++i)
       if((sgn(del[i])*sgn(del[i+1])) > 0) {k[j]=i; j=j+1;}
@@ -220,10 +220,10 @@
       w2[i]=(h[k[i]+1]+hs[i])/(3*hs[i]);
       dmax[i]=max(abs(del[k[i]]),abs(del[k[i]+1]));
       dmin[i]=min(abs(del[k[i]]),abs(del[k[i]+1]));
-    } 
+    }
     for(int i=0; i < n; ++i) d[i]=0;
     for(int i=0; i < j; ++i)
-      d[k[i]+1]=dmin[i]/(w1[i]*(del[k[i]]/dmax[i])+w2[i]*(del[k[i]+1]/dmax[i])); 
+      d[k[i]+1]=dmin[i]/(w1[i]*(del[k[i]]/dmax[i])+w2[i]*(del[k[i]+1]/dmax[i]));
     d[0]=((2*h[0]+h[1])*del[0]-h[0]*del[1])/(h[0]+h[1]);
     if(sgn(d[0]) != sgn(del[0])) {d[0]=0;}
     else if((sgn(del[0]) != sgn(del[1])) && (abs(d[0]) > abs(3*del[0])))
@@ -238,7 +238,7 @@
     d[0]=d[1]=(y[1]-y[0])/(x[1]-x[0]);
   } else abort(morepoints);
   return d;
-} 
+}
 
 // Return standard cubic spline interpolation as a guide
 guide hermite(real[] x, real[] y, splinetype splinetype=null)

Modified: trunk/Build/source/utils/asymptote/base/grid3.asy
===================================================================
--- trunk/Build/source/utils/asymptote/base/grid3.asy	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/base/grid3.asy	2021-01-02 16:31:31 UTC (rev 57291)
@@ -259,7 +259,7 @@
                        N,n,Step,step,begin,end,
                        Size,size,false,pTick,ptick);
       otg.grid3=new void(picture pic, bool above) {
-        grid3(pic,gridroutine,N,n,Step,step,begin,end,pGrid,pgrid,above);
+                                                   grid3(pic,gridroutine,N,n,Step,step,begin,end,pGrid,pgrid,above);
       };
       return otg;
     };
@@ -280,7 +280,7 @@
       otg.ticks=Ticks3(-1,F,ticklabel,beginlabel,endlabel,N,n,Step,step,
                        begin,end,Size,size,false,pTick,ptick);
       otg.grid3=new void(picture pic, bool above) {
-        grid3(pic,gridroutine,N,n,Step,step,begin,end,pGrid,pgrid,above);
+                                                   grid3(pic,gridroutine,N,n,Step,step,begin,end,pGrid,pgrid,above);
       };
       return otg;
     };
@@ -301,7 +301,7 @@
       otg.ticks=Ticks3(1,F,ticklabel,beginlabel,endlabel,N,n,Step,step,
                        begin,end,Size,size,false,pTick,ptick);
       otg.grid3=new void(picture pic, bool above) {
-        grid3(pic,gridroutine,N,n,Step,step,begin,end,pGrid,pgrid,above);
+                                                   grid3(pic,gridroutine,N,n,Step,step,begin,end,pGrid,pgrid,above);
       };
       return otg;
     };

Modified: trunk/Build/source/utils/asymptote/base/interpolate.asy
===================================================================
--- trunk/Build/source/utils/asymptote/base/interpolate.asy	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/base/interpolate.asy	2021-01-02 16:31:31 UTC (rev 57291)
@@ -7,8 +7,8 @@
 // and values y_0,...,y_n in the array y,
 
 // hdiffdiv(x,y,dyp) computes Newton's Divided Difference for
-// Hermite interpolation where dyp={dy_0,...,dy_n}. 
-// 
+// Hermite interpolation where dyp={dy_0,...,dy_n}.
+//
 // fhorner(x,coeff) uses Horner's rule to compute the polynomial
 // a_0+a_1(x-x_0)+a_2(x-x_0)(x-x_1)+...+a_n(x-x_0)..(x-x_{n-1}),
 // where coeff={a_0,a_1,...,a_n}.
@@ -54,7 +54,7 @@
     return s;
   };
 }
-      
+
 // Newton's Divided Difference method: n(n-1)/2 divisions, n(n-1) additions.
 horner diffdiv(real[] x, real[] y)
 {
@@ -136,5 +136,5 @@
   real[] dy=splinetype(x,y);
   return new real(real t) {
     return pwhermite(x,y,dy)(t);
-  }; 
+  };
 }

Modified: trunk/Build/source/utils/asymptote/base/labelpath3.asy
===================================================================
--- trunk/Build/source/utils/asymptote/base/labelpath3.asy	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/base/labelpath3.asy	2021-01-02 16:31:31 UTC (rev 57291)
@@ -21,7 +21,7 @@
 }
 
 // Modification of the bishop frame construction contained in
-// space_tube.asy (from Philippe Ivaldi's modules). 
+// space_tube.asy (from Philippe Ivaldi's modules).
 // For noncyclic path3s only
 triple[] nextframe(path3 p, real reltimestart, triple[] start, real
                    reltimeend, int subdiv=20)
@@ -40,7 +40,7 @@
   }
   return bf[subdiv];
 }
-  
+
 surface labelpath(string s, path3 p, real angle=90, triple optional=O)
 {
   real Cos=Cos(angle);
@@ -48,10 +48,10 @@
   path[] text=texpath(Label(s,(0,0),Align,basealign));
   text=scale(1/(max(text).x-min(text).x))*text;
   path[][] decompose=containmentTree(text);
-        
+
   real[][] xpos=new real[decompose.length][2];
   surface sf;
-  for(int i=0; i < decompose.length; ++i) {// Identify positions along x-axis   
+  for(int i=0; i < decompose.length; ++i) {// Identify positions along x-axis
     xpos[i][1]=i;
     real pos0=0.5(max(decompose[i]).x+min(decompose[i]).x);
     xpos[i][0]=pos0;

Deleted: trunk/Build/source/utils/asymptote/base/latin1.asy
===================================================================
--- trunk/Build/source/utils/asymptote/base/latin1.asy	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/base/latin1.asy	2021-01-02 16:31:31 UTC (rev 57291)
@@ -1,2 +0,0 @@
-usepackage("fontenc","T1");
-usepackage("inputenc","latin1");

Modified: trunk/Build/source/utils/asymptote/base/lmfit.asy
===================================================================
--- trunk/Build/source/utils/asymptote/base/lmfit.asy	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/base/lmfit.asy	2021-01-02 16:31:31 UTC (rev 57291)
@@ -58,31 +58,31 @@
 private real LM_USERTOL = 30 * LM_MACHEP;
 
 restricted string lm_infmsg[] = {
-  "improper input parameters",
-  "the relative error in the sum of squares is at most tol",
-  "the relative error between x and the solution is at most tol",
-  "both errors are at most tol",
-  "fvec is orthogonal to the columns of the jacobian to machine precision",
-  "number of calls to fcn has reached or exceeded maxcall*(n+1)",
-  "ftol is too small: no further reduction in the sum of squares is possible",
-  "xtol too small: no further improvement in approximate solution x possible",
-  "gtol too small: no further improvement in approximate solution x possible",
-  "not enough memory",
-  "break requested within function evaluation"
+                                 "improper input parameters",
+                                 "the relative error in the sum of squares is at most tol",
+                                 "the relative error between x and the solution is at most tol",
+                                 "both errors are at most tol",
+                                 "fvec is orthogonal to the columns of the jacobian to machine precision",
+                                 "number of calls to fcn has reached or exceeded maxcall*(n+1)",
+                                 "ftol is too small: no further reduction in the sum of squares is possible",
+                                 "xtol too small: no further improvement in approximate solution x possible",
+                                 "gtol too small: no further improvement in approximate solution x possible",
+                                 "not enough memory",
+                                 "break requested within function evaluation"
 };
 
 restricted string lm_shortmsg[] = {
-  "invalid input",
-  "success (f)",
-  "success (p)",
-  "success (f,p)",
-  "degenerate",
-  "call limit",
-  "failed (f)",
-  "failed (p)",
-  "failed (o)",
-  "no memory",
-  "user break"
+                                   "invalid input",
+                                   "success (f)",
+                                   "success (p)",
+                                   "success (f,p)",
+                                   "degenerate",
+                                   "call limit",
+                                   "failed (f)",
+                                   "failed (p)",
+                                   "failed (o)",
+                                   "no memory",
+                                   "user break"
 };
 
 
@@ -91,7 +91,7 @@
   real[] user_t;
   real[] user_y;
   real[] user_w;
-  real user_func(real user_t_point, real[] par);  
+  real user_func(real user_t_point, real[] par);
 };
 
 
@@ -99,7 +99,7 @@
 // the int and real types
 struct lm_int_type {
   int val;
-  
+
   void operator init(int val) {
     this.val = val;
   }
@@ -108,7 +108,7 @@
 
 struct lm_real_type {
   real val;
-  
+
   void operator init(real val) {
     this.val = val;
   }
@@ -402,7 +402,7 @@
       }
       break;
     }
-    
+
     sdiag[j] = r[j * ldr + j];
     r[j * ldr + j] = x[j];
   }
@@ -508,10 +508,10 @@
     dxnorm = lm_enorm(n, wa2);
     fp_old = fp;
     fp = dxnorm - delta;
-        
+
     if (fabs(fp) <= p1 * delta || (parl == 0.0 && fp <= fp_old && fp_old < 0.0) || iter == 10)
       break;
-        
+
     for (j = 0; j < n; ++j)
       wa1[j] = diag[ipvt[j]] * wa2[ipvt[j]] / dxnorm;
 
@@ -522,12 +522,12 @@
     }
     temp = lm_enorm(n, wa1);
     parc = fp / delta / temp / temp;
-    
+
     if (fp > 0)
       parl = max(parl, par.val);
     else if (fp < 0)
       paru = min(paru, par.val);
-    
+
     par.val = max(parl, par.val + parc);
   }
 }
@@ -540,7 +540,7 @@
   static real p25 = 0.25;
   static real p75 = 0.75;
   static real p0001 = 1.0e-4;
-  
+
   nfev.val = 0;
   int iter = 1;
   lm_real_type par = lm_real_type(0);
@@ -563,7 +563,7 @@
       }
     }
   }
-  
+
   info.val = 0;
   evaluate(x, m, fvec, data, info);
   if(printout != null) printout(n, x, m, fvec, data, 0, 0, ++nfev.val);
@@ -587,7 +587,7 @@
         fjac[j * m + i] = (wa4[i] - fvec[i]) / (x[j] - temp);
       x[j] = temp;
     }
-    
+
     lm_qrfac(m, n, fjac, true, ipvt, wa1, wa2, wa3);
 
     if (iter == 1) {
@@ -695,7 +695,7 @@
         delta = pnorm / p5;
         par.val *= p5;
       }
-      
+
       if (ratio >= p0001) {
         for (j = 0; j < n; ++j) {
           x[j] = wa2[j];
@@ -735,7 +735,7 @@
 void lm_minimize(int m_dat, int n_par, real[] par, lm_evaluate_ftype evaluate, lm_print_ftype printout, lm_data_type data, lm_control_type control) {
   int n = n_par;
   int m = m_dat;
-  
+
   real[] fvec = new real[m];
   real[] diag = new real[n];
   real[] qtf = new real[n];
@@ -838,13 +838,13 @@
   int n_par = parameters.length;
   lm_evaluate_ftype evaluate = lm_evaluate_default;
   lm_print_ftype printout = control.verbose ? lm_print_default : lm_print_quiet;
-  
+
   lm_data_type data;
   data.user_t = xdata;
   data.user_y = ydata;
   data.user_w = 1 / errors;
   data.user_func = new real(real x, real[] params) {
-    return function(params, x);
+                                                    return function(params, x);
   };
 
   lm_control_type ctrl;
@@ -856,7 +856,7 @@
   ctrl.maxcall = control.maxIterations;
 
   lm_minimize(m_dat, n_par, parameters, evaluate, printout, data, ctrl);
-  
+
   return FitResult(ctrl.fnorm, ctrl.nfev.val, ctrl.info.val);
 }
 

Added: trunk/Build/source/utils/asymptote/base/map.asy
===================================================================
--- trunk/Build/source/utils/asymptote/base/map.asy	                        (rev 0)
+++ trunk/Build/source/utils/asymptote/base/map.asy	2021-01-02 16:31:31 UTC (rev 57291)
@@ -0,0 +1,40 @@
+// Create a struct <name> parameterized by types <key> and <value>,
+// that maps keys to values, defaulting to the value in <default>.
+void mapTemplate(string name, string key, string value, string default)
+{
+  type(key,"Key");
+  type(value,"Value");
+  eval("Value default="+default,true);
+
+  eval("
+  struct keyValue {
+    Key key;
+    Value T;
+    void operator init(Key key) {
+      this.key=key;
+    }
+    void operator init(Key key, Value T) {
+      this.key=key;
+      this.T=T;
+    }
+  }
+
+  struct map {
+    keyValue[] M;
+    bool operator < (keyValue a, keyValue b) {return a.key < b.key;}
+
+    void add(Key key, Value T) {
+      keyValue m=keyValue(key,T);
+      M.insert(search(M,m,operator <)+1,m);
+    }
+    Value lookup(Key key) {
+      int i=search(M,keyValue(key),operator <);
+      if(i >= 0 && M[i].key == key) return M[i].T;
+      return default;
+    }
+  }
+",true);
+
+  type("map",name);
+}
+

Modified: trunk/Build/source/utils/asymptote/base/math.asy
===================================================================
--- trunk/Build/source/utils/asymptote/base/math.asy	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/base/math.asy	2021-01-02 16:31:31 UTC (rev 57291)
@@ -30,7 +30,7 @@
   picture pic;
   for(int i=0; i <= Nx; ++i) draw(pic,(i,0)--(i,Ny),p);
   for(int j=0; j <= Ny; ++j) draw(pic,(0,j)--(Nx,j),p);
-  return pic; 
+  return pic;
 }
 
 bool polygon(path p)
@@ -55,7 +55,7 @@
   real denom=n.x*(Q.x-P.x)+n.y*(Q.y-P.y)+n.z*(Q.z-P.z);
   return denom == 0 ? infinity : (d-n.x*P.x-n.y*P.y-n.z*P.z)/denom;
 }
-                    
+
 // Return any point on the intersection of the two planes with normals
 // n0 and n1 passing through points P0 and P1, respectively.
 // If the planes are parallel return (infinity,infinity,infinity).
@@ -293,7 +293,7 @@
     },true);
 }
 
-real interpolate(real[] x, real[] y, real x0, int i) 
+real interpolate(real[] x, real[] y, real x0, int i)
 {
   int n=x.length;
   if(n == 0) abort("Zero data points in interpolate");
@@ -317,7 +317,7 @@
 // real[] x are listed in ascending order and return y0. Values outside the
 // available data range are linearly extrapolated using the first derivative
 // at the nearest endpoint.
-real interpolate(real[] x, real[] y, real x0) 
+real interpolate(real[] x, real[] y, real x0)
 {
   return interpolate(x,y,x0,search(x,x0));
 }
@@ -378,7 +378,7 @@
   // Remove roots at numerical infinity.
   if(abs(a) <= Fuzz*(abs(b)+Fuzz*(abs(c)+Fuzz*(abs(d)+Fuzz*abs(e)))))
     return cubicroots(b,c,d,e);
-  
+
   // Detect roots at numerical zero.
   if(abs(e) <= Fuzz*(abs(d)+Fuzz*(abs(c)+Fuzz*(abs(b)+Fuzz*abs(a)))))
     return cubicroots(a,b,c,d);
@@ -388,7 +388,7 @@
   c *= ainv;
   d *= ainv;
   e *= ainv;
-  
+
   pair[] roots;
   real[] T=cubicroots(1,-2c,c^2+b*d-4e,d^2+b^2*e-b*c*d);
   if(T.length == 0) return roots;
@@ -434,13 +434,13 @@
   real[] solution=solve(AtA(A),b*A,warn=false);
   if (solution.length == 0 && warn)
     abort("Cannot compute least-squares approximation for " +
-	  "a matrix with linearly dependent columns.");
+          "a matrix with linearly dependent columns.");
   return solution;
 }
 
 // Namespace
 struct rootfinder_settings {
-  static real roottolerance = 1e-4;
+  static real roottolerance=1e-4;
 }
 
 real findroot(real f(real), real a, real b,

Modified: trunk/Build/source/utils/asymptote/base/metapost.asy
===================================================================
--- trunk/Build/source/utils/asymptote/base/metapost.asy	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/base/metapost.asy	2021-01-02 16:31:31 UTC (rev 57291)
@@ -2,7 +2,7 @@
 
 path cuttings;
 
-path cutbefore(path p, path q) 
+path cutbefore(path p, path q)
 {
   slice s=firstcut(p,q);
   cuttings=s.before;
@@ -9,7 +9,7 @@
   return s.after;
 }
 
-path cutafter(path p, path q) 
+path cutafter(path p, path q)
 {
   slice s=lastcut(p,q);
   cuttings=s.after;

Modified: trunk/Build/source/utils/asymptote/base/obj.asy
===================================================================
--- trunk/Build/source/utils/asymptote/base/obj.asy	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/base/obj.asy	2021-01-02 16:31:31 UTC (rev 57291)
@@ -1,7 +1,7 @@
 // A module for reading simple obj files with groups.
 // Authors: Jens Schwaiger and John Bowman
 //
-// Here simple means that : 
+// Here simple means that :
 //
 // 1) all vertex statements should come before the face statements;
 //

Modified: trunk/Build/source/utils/asymptote/base/ode.asy
===================================================================
--- trunk/Build/source/utils/asymptote/base/ode.asy	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/base/ode.asy	2021-01-02 16:31:31 UTC (rev 57291)
@@ -14,7 +14,7 @@
   int order;
   coefficients a;
   void stepDependence(real h, real c, coefficients a) {}
-   
+
   real pgrow;
   real pshrink;
   bool exponential;
@@ -54,7 +54,7 @@
   if(fabs(x) > 1) return (exp(x)-x-1)/x2;
   real x3=x2*x;
   real x5=x2*x3;
-  if(fabs(x) < 0.1) 
+  if(fabs(x) < 0.1)
     return Coeff[1]+x*Coeff[2]+x2*Coeff[3]+x3*Coeff[4]+x2*x2*Coeff[5]
       +x5*Coeff[6]+x3*x3*Coeff[7]+x5*x2*Coeff[8]+x5*x3*Coeff[9];
     else {
@@ -73,7 +73,7 @@
   real x3=x2*x;
   if(fabs(x) > 1.6) return (exp(x)-0.5*x2-x-1)/x3;
   real x5=x2*x3;
-  if(fabs(x) < 0.1) 
+  if(fabs(x) < 0.1)
     return Coeff[2]+x*Coeff[3]+x2*Coeff[4]+x3*Coeff[5]
       +x2*x2*Coeff[6]+x5*Coeff[7]+x3*x3*Coeff[8]+x5*x2*Coeff[9]
       +x5*x3*Coeff[10];
@@ -90,13 +90,13 @@
     }
 }
 
-void expfactors(real x, coefficients a) 
+void expfactors(real x, coefficients a)
 {
   for(int i=0; i < a.steps.length; ++i)
     a.factors[i]=exp(x*a.steps[i]);
   a.factors[a.steps.length]=exp(x);
 }
-      
+
 // First-Order Euler
 RKTableau Euler=RKTableau(1,new real[][], new real[] {1});
 
@@ -185,40 +185,40 @@
 
 // Fifth-Order Cash-Karp Runge-Kutta
 RKTableau RK5=RKTableau(5,new real[][] {{1/5},
-                                        {3/40,9/40},
-                                        {3/10,-9/10,6/5},
-                                        {-11/54,5/2,-70/27,35/27},
-                                        {1631/55296,175/512,575/13824,
-                                         44275/110592,253/4096}},
+                                          {3/40,9/40},
+                                            {3/10,-9/10,6/5},
+                                              {-11/54,5/2,-70/27,35/27},
+                                                {1631/55296,175/512,575/13824,
+                                                    44275/110592,253/4096}},
   new real[] {37/378,0,250/621,125/594,
-              0,512/1771},  // 5th order
+                0,512/1771},  // 5th order
   new real[] {2825/27648,0,18575/48384,13525/55296,
-              277/14336,1/4}); // 4th order
+                277/14336,1/4}); // 4th order
 
 // Fifth-Order Fehlberg Runge-Kutta
 RKTableau RK5F=RKTableau(5,new real[][] {{1/4},
-                                         {3/32,9/32},
-                                         {1932/2197,-7200/2197,7296/2197},
-                                         {439/216,-8,3680/513,-845/4104},
-                                         {-8/27,2,-3544/2565,1859/4104,
-                                          -11/40}},
+                                           {3/32,9/32},
+                                             {1932/2197,-7200/2197,7296/2197},
+                                               {439/216,-8,3680/513,-845/4104},
+                                                 {-8/27,2,-3544/2565,1859/4104,
+                                                     -11/40}},
   new real[] {16/135,0,6656/12825,28561/56430,-9/50,2/55}, // 5th order
   new real[] {25/216,0,1408/2565,2197/4104,-1/5,0}); // 4th order
 
 // Fifth-Order Dormand-Prince Runge-Kutta
 RKTableau RK5DP=RKTableau(5,new real[][] {{1/5},
-                                          {3/40,9/40},
-                                          {44/45,-56/15,32/9},
-                                          {19372/6561,-25360/2187,64448/6561,
-                                           -212/729},
-                                          {9017/3168,-355/33,46732/5247,49/176,
-                                           -5103/18656}},
+                                            {3/40,9/40},
+                                              {44/45,-56/15,32/9},
+                                                {19372/6561,-25360/2187,64448/6561,
+                                                    -212/729},
+                                                  {9017/3168,-355/33,46732/5247,49/176,
+                                                      -5103/18656}},
   new real[] {35/384,0,500/1113,125/192,-2187/6784,
-              11/84}, // 5th order
+                11/84}, // 5th order
   new real[] {5179/57600,0,7571/16695,393/640,
-              -92097/339200,187/2100,1/40}); // 4th order
+                -92097/339200,187/2100,1/40}); // 4th order
 
-real error(real error, real initial, real lowOrder, real norm, real diff) 
+real error(real error, real initial, real lowOrder, real norm, real diff)
 {
   if(initial != 0 && lowOrder != initial) {
     static real epsilon=realMin/realEpsilon;
@@ -249,7 +249,7 @@
   real[] y;
 }
 
-void write(solution S) 
+void write(solution S)
 {
   for(int i=0; i < S.t.length; ++i)
     write(S.t[i],S.y[i]);
@@ -276,7 +276,7 @@
     new real(real t, real y) {return f(t,y)-c*y;};
 
   tableau.stepDependence(h,c,tableau.a);
-      
+
   real t=a;
   real f0;
   if(tableau.a.lowOrderWeights.length == 0) dynamic=false;
@@ -293,7 +293,7 @@
       tableau.stepDependence(h,c,tableau.a);
       dt=h;
     }
- 
+
     real[] predictions={fsal ? f0 : F(t,y)};
     for(int i=0; i < tableau.a.steps.length; ++i)
       predictions.push(F(t+h*tableau.a.steps[i],
@@ -336,7 +336,7 @@
   real[][] y;
 }
 
-void write(Solution S) 
+void write(Solution S)
 {
   for(int i=0; i < S.t.length; ++i) {
     write(S.t[i],tab);
@@ -356,7 +356,7 @@
   Solution S;
   S.t=new real[] {a};
   S.y=new real[][] {copy(y)};
-      
+
   if(h == 0) {
     if(b == a) return S;
     if(n == 0) abort("Either n or h must be specified");

Modified: trunk/Build/source/utils/asymptote/base/palette.asy
===================================================================
--- trunk/Build/source/utils/asymptote/base/palette.asy	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/base/palette.asy	2021-01-02 16:31:31 UTC (rev 57291)
@@ -5,7 +5,7 @@
 typedef bounds range(picture pic, real min, real max);
 
 range Range(bool automin=false, real min=-infinity,
-            bool automax=false, real max=infinity) 
+            bool automax=false, real max=infinity)
 {
   return new bounds(picture pic, real dmin, real dmax) {
     // autoscale routine finds reasonable limits
@@ -45,7 +45,7 @@
 // Reduce color palette to approximate range of data relative to "display"
 // range => errors of 1/palette.length in resulting color space.
 pen[] adjust(picture pic, real min, real max, real rmin, real rmax,
-             pen[] palette) 
+             pen[] palette)
 {
   real dmin=pic.scale.z.T(min);
   real dmax=pic.scale.z.T(max);
@@ -100,7 +100,7 @@
     initial=T*initial;
     final=T*final;
   }
-        
+
   pic.add(new void(frame F, transform t) {
       _image(F,f,initial,final,palette,t*T,copy=false,antialias=antialias);
     },true);
@@ -146,7 +146,7 @@
     initial=T*initial;
     final=T*final;
   }
-        
+
   pic.add(new void(frame F, transform t) {
       _image(F,data,initial,final,t*T,copy=false,antialias=antialias);
     },true);
@@ -171,7 +171,7 @@
     initial=T*initial;
     final=T*final;
   }
-        
+
   pic.add(new void(frame F, transform t) {
       _image(F,f,width,height,initial,final,t*T,antialias=antialias);
     },true);
@@ -267,13 +267,13 @@
     return Ticks(sign,format,ticklabel,beginlabel,endlabel,N,n,Step,step,
                  true,true,extend=true,pTick,ptick);
   };
-} 
+}
 
 paletteticks PaletteTicks=PaletteTicks();
 paletteticks NoTicks=new ticks(int sign=-1) {return NoTicks;};
 
-void palette(picture pic=currentpicture, Label L="", bounds bounds, 
-             pair initial, pair final, axis axis=Right, pen[] palette, 
+void palette(picture pic=currentpicture, Label L="", bounds bounds,
+             pair initial, pair final, axis axis=Right, pen[] palette,
              pen p=currentpen, paletteticks ticks=PaletteTicks,
              bool copy=true, bool antialias=false)
 {
@@ -280,7 +280,7 @@
   real initialz=pic.scale.z.T(bounds.min);
   real finalz=pic.scale.z.T(bounds.max);
   bounds mz=autoscale(initialz,finalz,pic.scale.z.scale);
-  
+
   axisT axis;
   axis(pic,axis);
   real angle=degrees(axis.align.dir);
@@ -311,11 +311,11 @@
   if(vertical && L.defaulttransform) {
     frame f;
     add(f,Label(L.s,(0,0),L.p));
-    if(length(max(f)-min(f)) > ylabelwidth*fontsize(L.p)) 
+    if(length(max(f)-min(f)) > ylabelwidth*fontsize(L.p))
       L.transform(rotate(90));
   }
   real[][] pdata={sequence(palette.length)};
-  
+
   transform T;
   pair Tinitial,Tfinal;
   if(vertical) {
@@ -326,12 +326,12 @@
     Tinitial=initial;
     Tfinal=final;
   }
-        
+
   pic.add(new void(frame f, transform t) {
       _image(f,pdata,Tinitial,Tfinal,palette,t*T,copy=false,
              antialias=antialias);
     },true);
-  
+
   ticklocate locate=ticklocate(initialz,finalz,pic.scale.z,mz.min,mz.max);
   axis(pic,L,g,g2,p,ticks(sgn(axis.side.x*dot(lambda,par))),locate,mz.divisor,
        true);
@@ -356,13 +356,13 @@
 pen[] Wheel(int NColors=32766)
 {
   if(settings.gray) return Grayscale(NColors);
-  
+
   int nintervals=6;
   if(NColors <= nintervals) NColors=nintervals+1;
   int n=-quotient(NColors,-nintervals);
-                
+
   pen[] Palette;
-  
+
   Palette=new pen[n*nintervals];
   real ninv=1.0/n;
 
@@ -373,7 +373,7 @@
     Palette[n+i]=rgb(ininv1,0.0,1.0);
     Palette[2n+i]=rgb(0.0,ininv,1.0);
     Palette[3n+i]=rgb(0.0,1.0,ininv1);
-    Palette[4n+i]=rgb(ininv,1.0,0.0);    
+    Palette[4n+i]=rgb(ininv,1.0,0.0);
     Palette[5n+i]=rgb(1.0,ininv1,0.0);
   }
   return Palette;
@@ -383,14 +383,14 @@
 pen[] Rainbow(int NColors=32766)
 {
   if(settings.gray) return Grayscale(NColors);
-  
+
   int offset=1;
   int nintervals=5;
   if(NColors <= nintervals) NColors=nintervals+1;
   int n=-quotient(NColors-1,-nintervals);
-                
+
   pen[] Palette;
-  
+
   Palette=new pen[n*nintervals+offset];
   real ninv=1.0/n;
 
@@ -400,11 +400,11 @@
     Palette[i]=rgb(ininv1,0.0,1.0);
     Palette[n+i]=rgb(0.0,ininv,1.0);
     Palette[2n+i]=rgb(0.0,1.0,ininv1);
-    Palette[3n+i]=rgb(ininv,1.0,0.0);    
+    Palette[3n+i]=rgb(ininv,1.0,0.0);
     Palette[4n+i]=rgb(1.0,ininv1,0.0);
   }
   Palette[4n+n]=rgb(1.0,0.0,0.0);
-  
+
   return Palette;
 }
 
@@ -411,26 +411,26 @@
 private pen[] BWRainbow(int NColors, bool two)
 {
   if(settings.gray) return Grayscale(NColors);
-  
+
   int offset=1;
   int nintervals=6;
   int divisor=3;
-  
+
   if(two) nintervals += 6;
-  
+
   int Nintervals=nintervals*divisor;
   if(NColors <= Nintervals) NColors=Nintervals+1;
   int num=NColors-offset;
   int n=-quotient(num,-Nintervals)*divisor;
   NColors=n*nintervals+offset;
-                
+
   pen[] Palette;
-  
+
   Palette=new pen[NColors];
   real ninv=1.0/n;
 
   int k=0;
-  
+
   if(two) {
     for(int i=0; i < n; ++i) {
       real ininv=i*ninv;
@@ -444,9 +444,9 @@
     }
     k += 6n;
   }
-  
+
   if(two)
-    for(int i=0; i < n; ++i) 
+    for(int i=0; i < n; ++i)
       Palette[k+i]=rgb(1.0-i*ninv,0.0,1.0);
   else {
     int n3=-quotient(n,-3);
@@ -467,12 +467,12 @@
     real ininv1=1.0-ininv;
     Palette[k+i]=rgb(0.0,ininv,1.0);
     Palette[k+n+i]=rgb(0.0,1.0,ininv1);
-    Palette[k+2n+i]=rgb(ininv,1.0,0.0);    
+    Palette[k+2n+i]=rgb(ininv,1.0,0.0);
     Palette[k+3n+i]=rgb(1.0,ininv1,0.0);
     Palette[k+4n+i]=rgb(1.0,ininv,ininv);
   }
   Palette[k+5n]=rgb(1.0,1.0,1.0);
-  
+
   return Palette;
 }
 
@@ -484,7 +484,7 @@
   real step=(Palette.length-1)/(n-1);
   return sequence(new pen(int i) {
       return Palette[round(i*step)];
-    },n); 
+    },n);
 }
 
 // A rainbow palette tapering off to black/white at the spectrum ends,
@@ -507,7 +507,7 @@
 
 //A palette varying linearly over the specified array of pens, using
 // NColors in each interpolation interval.
-pen[] Gradient(int NColors=256 ... pen[] p) 
+pen[] Gradient(int NColors=256 ... pen[] p)
 {
   pen[] P;
   if(p.length < 2) abort("at least 2 colors must be specified");
@@ -522,7 +522,7 @@
   return P;
 }
 
-pen[] cmyk(pen[] Palette) 
+pen[] cmyk(pen[] Palette)
 {
   int n=Palette.length;
   for(int i=0; i < n; ++i)

Modified: trunk/Build/source/utils/asymptote/base/patterns.asy
===================================================================
--- trunk/Build/source/utils/asymptote/base/patterns.asy	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/base/patterns.asy	2021-01-02 16:31:31 UTC (rev 57291)
@@ -7,7 +7,7 @@
   pair pmin=min(f)-lb;
   pair pmax=max(f)+rt;
   string s="%.6f";
-  postscript(tiling,"<< /PaintType 1 /PatternType 1 /TilingType 1 
+  postscript(tiling,"<< /PaintType 1 /PatternType 1 /TilingType 1
 /BBox ["+format(s,pmin.x,"C")+" "+format(s,pmin.y,"C")+" "+
              format(s,pmax.x,"C")+" "+format(s,pmax.y,"C")+"]
 /XStep "+format(s,pmax.x-pmin.x,"C")+"
@@ -64,7 +64,7 @@
 }
 
 real hatchepsilon=1e-4;
-picture hatch(real H=5mm, pair dir=NE, pen p=currentpen) 
+picture hatch(real H=5mm, pair dir=NE, pen p=currentpen)
 {
   picture tiling;
   real theta=angle(dir);

Modified: trunk/Build/source/utils/asymptote/base/plain.asy
===================================================================
--- trunk/Build/source/utils/asymptote/base/plain.asy	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/base/plain.asy	2021-01-02 16:31:31 UTC (rev 57291)
@@ -18,13 +18,13 @@
 
 include plain_constants;
 
-access version;             
+access version;
 if(version.VERSION != VERSION) {
   warning("version","using possibly incompatible version "+
           version.VERSION+" of plain.asy"+'\n');
   nowarn("version");
 }
-   
+
 include plain_strings;
 include plain_pens;
 include plain_paths;
@@ -32,13 +32,15 @@
 include plain_margins;
 include plain_picture;
 include plain_Label;
-include plain_shipout;
 include plain_arcs;
 include plain_boxes;
+include plain_shipout;
 include plain_markers;
 include plain_arrows;
 include plain_debugger;
 
+real RELEASE=(real) split(VERSION,"-")[0];
+
 typedef void exitfcn();
 
 void updatefunction()
@@ -106,7 +108,7 @@
   });
 
 // Save the current state, so that restore will put things back in that state.
-restoreThunk save() 
+restoreThunk save()
 {
   return restore=buildRestoreThunk();
 }
@@ -132,7 +134,7 @@
 }
 
 // Save the current state, so that restore will put things back in that state.
-restoreThunk savedefaults() 
+restoreThunk savedefaults()
 {
   return restoredefaults=buildRestoreDefaults();
 }
@@ -145,7 +147,7 @@
   atexit(null);
 }
 
-// Return the sequence n,...m
+// Return the sequence n,...,m
 int[] sequence(int n, int m)
 {
   return sequence(new int(int x){return x;},m-n+1)+n;
@@ -180,6 +182,19 @@
   if(!embedded) restoredefaults();
 }
 
+// Associate a parametrized type with a name.
+void type(string type, string name)
+{
+  eval("typedef "+type+" "+name,true);
+}
+
+void mapArray(string From, string To)
+{
+  type(From,"From");
+  type(To,"To");
+  eval("To[] map(To f(From), From[] a) {return sequence(new To(int i) {return f(a[i]);},a.length);}",true);
+}
+
 // Evaluate user command line option.
 void usersetting()
 {
@@ -186,7 +201,7 @@
   eval(settings.user,true);
 }
 
-string stripsuffix(string f, string suffix=".asy") 
+string stripsuffix(string f, string suffix=".asy")
 {
   int n=rfind(f,suffix);
   if(n != -1) f=erase(f,n,-1);
@@ -231,6 +246,7 @@
 struct processtime {
   real user;
   real system;
+  real clock;
 }
 
 struct cputime {
@@ -239,21 +255,26 @@
   processtime change;
 }
 
-cputime cputime() 
+cputime cputime()
 {
   static processtime last;
   real [] a=_cputime();
   cputime cputime;
+  real clock=a[4];
   cputime.parent.user=a[0];
   cputime.parent.system=a[1];
+  cputime.parent.clock=clock;
   cputime.child.user=a[2];
   cputime.child.system=a[3];
-  real user=a[0]+a[2];
-  real system=a[1]+a[3];
+  cputime.child.clock=0;
+  real user=cputime.parent.user+cputime.child.user;
+  real system=cputime.parent.system+cputime.child.system;
   cputime.change.user=user-last.user;
   cputime.change.system=system-last.system;
+  cputime.change.clock=clock-last.clock;
   last.user=user;
   last.system=system;
+  last.clock=clock;
   return cputime;
 }
 
@@ -285,23 +306,3 @@
 }
 
 cputime();
-
-void nosetpagesize()
-{
-  static bool initialized=false;
-  if(!initialized && latex()) {
-    // Portably pass nosetpagesize option to graphicx package.
-    texpreamble("\usepackage{ifluatex}\ifluatex
-\ifx\pdfpagewidth\undefined\let\pdfpagewidth\paperwidth\fi
-\ifx\pdfpageheight\undefined\let\pdfpageheight\paperheight\fi\else
-\let\paperwidthsave\paperwidth\let\paperwidth\undefined
-\usepackage{graphicx}
-\let\paperwidth\paperwidthsave\fi");
-    initialized=true;
-  }
-}
-
-nosetpagesize();
-
-if(settings.tex == "luatex")
-  texpreamble("\input luatex85.sty");

Modified: trunk/Build/source/utils/asymptote/base/plain_Label.asy
===================================================================
--- trunk/Build/source/utils/asymptote/base/plain_Label.asy	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/base/plain_Label.asy	2021-01-02 16:31:31 UTC (rev 57291)
@@ -15,10 +15,10 @@
   real a=t.xx, b=t.xy, c=t.yx, d=t.yy;
   real arg=(a-d)^2+4b*c;
   pair delta=arg >= 0 ? sqrt(arg) : I*sqrt(-arg);
-  real trace=a+d; 
+  real trace=a+d;
   pair l1=0.5(trace+delta);
   pair l2=0.5(trace-delta);
-  
+
   if(abs(delta) < sqrtEpsilon*max(abs(l1),abs(l2))) {
     real s=abs(0.5trace);
     return (s != 0) ? scale(1/s)*t : t;
@@ -51,7 +51,7 @@
       }
     }
     return c;
-  }     
+  }
 
   pair[][] conj(pair[][] a) {
     pair[][] c=new pair[2][2];
@@ -61,7 +61,7 @@
       }
     }
     return c;
-  }     
+  }
 
   A=conj(U)*A*U;
 
@@ -70,7 +70,7 @@
     A[0][0] /= D;
     A[0][1] /= D;
   }
-  
+
   D=abs(A[1][1]);
   if(D != 0) {
     A[1][0] /= D;
@@ -155,13 +155,13 @@
   s.align=align;
   return s;
 }
-  
+
 restricted side NoSide;
 restricted side LeftSide=Relative(W);
 restricted side Center=Relative((0,0));
 restricted side RightSide=Relative(E);
 
-side operator * (real x, side s) 
+side operator * (real x, side s)
 {
   side S;
   S.align=x*s.align;
@@ -190,7 +190,7 @@
   p.relative=true;
   return p;
 }
-  
+
 restricted position BeginPoint=Relative(0);
 restricted position MidPoint=Relative(0.5);
 restricted position EndPoint=Relative(1);
@@ -227,8 +227,8 @@
   bool defaulttransform3=true;
   embed embed=Rotate; // Shift, Rotate, Slant, or Scale with embedded picture
   filltype filltype=NoFill;
-  
-  void init(string s="", string size="", position position=0, 
+
+  void init(string s="", string size="", position position=0,
             bool defaultposition=true, align align=NoAlign, pen p=nullpen,
             transform T=identity(), transform3 T3=identity4,
             bool defaulttransform=true, bool defaulttransform3=true,
@@ -246,17 +246,17 @@
     this.embed=embed;
     this.filltype=filltype;
   }
-  
+
   void initalign(string s="", string size="", align align, pen p=nullpen,
                  embed embed=Rotate, filltype filltype=NoFill) {
     init(s,size,align,p,embed,filltype);
   }
-  
+
   void transform(transform T) {
     this.T=T;
     defaulttransform=false;
   }
-  
+
   void transform3(transform3 T) {
     this.T3=copy(T);
     defaulttransform3=false;
@@ -268,12 +268,12 @@
            defaulttransform3,embed,filltype);
     return L;
   }
-  
+
   void position(position pos) {
     this.position=pos;
     defaultposition=false;
   }
-  
+
   void align(align a) {
     align.align(a);
   }
@@ -280,15 +280,15 @@
   void align(align a, align default) {
     align.align(a,default);
   }
-  
+
   void p(pen p0) {
     if(this.p == nullpen) this.p=p0;
   }
-  
+
   void filltype(filltype filltype0) {
     if(this.filltype == NoFill) this.filltype=filltype0;
   }
-  
+
   void label(frame f, transform t=identity(), pair position, pair align) {
     pen p0=p == nullpen ? currentpen : p;
     align=length(align)*unit(rotation(t)*align);
@@ -309,7 +309,7 @@
       add(f,d,filltype);
     }
   }
-  
+
   void label(picture pic=currentpicture, pair position, pair align) {
     if(s == "") return;
     pic.add(new void (frame f, transform t) {
@@ -324,7 +324,7 @@
   void out(picture pic=currentpicture) {
     label(pic,position.position,align.dir);
   }
-  
+
   void out(picture pic=currentpicture, path g) {
     bool relative=position.relative;
     real position=position.position.x;
@@ -349,7 +349,7 @@
     pair position=point(g,position);
     pic.addBox(position,position,min(f),max(f));
   }
-  
+
   void write(file file=stdout, suffix suffix=endl) {
     write(file,"\""+s+"\"");
     if(!defaultposition) write(file,", position=",position.position);
@@ -364,11 +364,11 @@
     }
     write(file,"",suffix);
   }
-  
+
   real relative() {
     return defaultposition ? 0.5 : position.position.x;
   };
-  
+
   real relative(path g) {
     return position.relative ? reltime(g,relative()) : relative();
   };
@@ -380,12 +380,12 @@
 {
   L.out(f,t);
 }
-  
+
 void add(picture pic=currentpicture, Label L)
 {
   L.out(pic);
 }
-  
+
 Label operator * (transform t, Label L)
 {
   Label tL=L.copy();
@@ -466,13 +466,13 @@
 {
   add(f,Label(L,position,align,p,filltype));
 }
-  
+
 void label(frame f, Label L, align align=NoAlign,
            pen p=currentpen, filltype filltype=NoFill)
 {
   add(f,Label(L,L.position,align,p,filltype));
 }
-  
+
 void label(picture pic=currentpicture, Label L, pair position,
            align align=NoAlign, pen p=currentpen, filltype filltype=NoFill)
 {
@@ -479,7 +479,7 @@
   Label L=Label(L,position,align,p,filltype);
   add(pic,L);
 }
-  
+
 void label(picture pic=currentpicture, Label L, align align=NoAlign,
            pen p=currentpen, filltype filltype=NoFill)
 {
@@ -494,7 +494,7 @@
   label(opic,L,L.position,align,p,filltype);
   add(pic,opic,origin);
 }
-  
+
 void label(picture pic=currentpicture, Label L, explicit path g,
            align align=NoAlign, pen p=currentpen, filltype filltype=NoFill)
 {
@@ -532,12 +532,12 @@
   return object(f);
 }
 
-object operator cast(Label L) 
+object operator cast(Label L)
 {
   return object(L);
 }
 
-object operator cast(string s) 
+object operator cast(string s)
 {
   return object(s);
 }
@@ -562,7 +562,7 @@
 }
 
 // Returns a copy of object F aligned in the direction align
-object align(object F, pair align) 
+object align(object F, pair align)
 {
   return shift(F.f,align)*F;
 }
@@ -594,7 +594,7 @@
     real fontsize;
     string font;
 
-    void operator init(Label L) 
+    void operator init(Label L)
     {
       s=replace(L.s,'\n',' ');
       fontsize=fontsize(L.p);
@@ -603,7 +603,7 @@
 
     pen pen() {return fontsize(fontsize)+fontcommand(font);}
   }
-  
+
   bool lexorder(stringfont a, stringfont b) {
     return a.s < b.s || (a.s == b.s && (a.fontsize < b.fontsize ||
                                         (a.fontsize == b.fontsize &&
@@ -615,7 +615,7 @@
 
   static stringfont[] stringlist;
   static bool adjust[];
-  
+
   path[] G;
 
   stringfont s=stringfont(L);
@@ -649,7 +649,7 @@
     label(f,L);
     return transform(box(min(f),max(f)),L);
   }
-  
+
   if(stringlist.length > 0) {
     path[][] g;
     int n=stringlist.length;
@@ -660,9 +660,9 @@
       s[i]=adjust[i] ? "."+S.s : S.s;
       p[i]=adjust[i] ? S.pen()+basealign : S.pen();
     }
-        
+
     g=tex ? _texpath(s,p) : textpath(s,p);
-      
+
     if(tex)
       for(int i=0; i < n; ++i)
         if(adjust[i]) {
@@ -670,8 +670,8 @@
           g[i].delete(0);
           g[i]=shift(0,-y)*g[i];
         }
-    
-  
+
+
     for(int i=0; i < stringlist.length; ++i) {
       stringfont s=stringlist[i];
       int j=search(stringcache,s,lexorder)+1;
@@ -686,6 +686,6 @@
 }
 
 texpath=new path[](string s, pen p, bool tex=settings.tex != "none", bool bbox=false)
-{
-  return texpath(Label(s,p));
-};
+  {
+   return texpath(Label(s,p));
+  };

Modified: trunk/Build/source/utils/asymptote/base/plain_arcs.asy
===================================================================
--- trunk/Build/source/utils/asymptote/base/plain_arcs.asy	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/base/plain_arcs.asy	2021-01-02 16:31:31 UTC (rev 57291)
@@ -1,5 +1,5 @@
 bool CCW=true;
-bool CW=false;                                            
+bool CW=false;
 
 path circle(pair c, real r)
 {
@@ -35,7 +35,7 @@
 {
   return arc(c,c+r*dir(angle1),c+r*dir(angle2),direction);
 }
-  
+
 // return an arc centered at c with radius r > 0 from angle1 to angle2 in
 // degrees, drawing counterclockwise if angle2 >= angle1 (otherwise clockwise).
 path arc(pair c, real r, real angle1, real angle2)

Modified: trunk/Build/source/utils/asymptote/base/plain_arrows.asy
===================================================================
--- trunk/Build/source/utils/asymptote/base/plain_arrows.asy	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/base/plain_arrows.asy	2021-01-02 16:31:31 UTC (rev 57291)
@@ -12,7 +12,7 @@
 
 real barfactor=arrowfactor;
 
-real arrowsize(pen p=currentpen) 
+real arrowsize(pen p=currentpen)
 {
   return arrowfactor*linewidth(p);
 }
@@ -53,39 +53,39 @@
 arrowhead DefaultHead;
 DefaultHead.head=new path(path g, position position=EndPoint, pen p=currentpen,
                           real size=0, real angle=arrowangle) {
-  if(size == 0) size=DefaultHead.size(p);
-  bool relative=position.relative;
-  real position=position.position.x;
-  if(relative) position=reltime(g,position);
-  path r=subpath(g,position,0);
-  pair x=point(r,0);
-  real t=arctime(r,size);
-  pair y=point(r,t);
-  path base=arrowbase(r,y,t,size);
-  path left=rotate(-angle,x)*r;
-  path right=rotate(angle,x)*r;
-  real[] T=arrowbasepoints(base,left,right);
-  pair denom=point(right,T[1])-y;
-  real factor=denom != 0 ? length((point(left,T[0])-y)/denom) : 1;
-  path left=rotate(-angle*factor,x)*r;
-  path right=rotate(angle*factor,x)*r;
-  real[] T=arrowbasepoints(base,left,right);
-  return subpath(left,0,T[0])--subpath(right,T[1],0)&cycle;
+                                                               if(size == 0) size=DefaultHead.size(p);
+                                                               bool relative=position.relative;
+                                                               real position=position.position.x;
+                                                               if(relative) position=reltime(g,position);
+                                                               path r=subpath(g,position,0);
+                                                               pair x=point(r,0);
+                                                               real t=arctime(r,size);
+                                                               pair y=point(r,t);
+                                                               path base=arrowbase(r,y,t,size);
+                                                               path left=rotate(-angle,x)*r;
+                                                               path right=rotate(angle,x)*r;
+                                                               real[] T=arrowbasepoints(base,left,right);
+                                                               pair denom=point(right,T[1])-y;
+                                                               real factor=denom != 0 ? length((point(left,T[0])-y)/denom) : 1;
+                                                               path left=rotate(-angle*factor,x)*r;
+                                                               path right=rotate(angle*factor,x)*r;
+                                                               real[] T=arrowbasepoints(base,left,right);
+                                                               return subpath(left,0,T[0])--subpath(right,T[1],0)&cycle;
 };
 
 arrowhead SimpleHead;
 SimpleHead.head=new path(path g, position position=EndPoint, pen p=currentpen,
                          real size=0, real angle=arrowangle) {
-  if(size == 0) size=SimpleHead.size(p);
-  bool relative=position.relative;
-  real position=position.position.x;
-  if(relative) position=reltime(g,position);
-  path r=subpath(g,position,0);
-  pair x=point(r,0);
-  real t=arctime(r,size);
-  path left=rotate(-angle,x)*r;
-  path right=rotate(angle,x)*r;
-  return subpath(left,t,0)--subpath(right,0,t);
+                                                              if(size == 0) size=SimpleHead.size(p);
+                                                              bool relative=position.relative;
+                                                              real position=position.position.x;
+                                                              if(relative) position=reltime(g,position);
+                                                              path r=subpath(g,position,0);
+                                                              pair x=point(r,0);
+                                                              real t=arctime(r,size);
+                                                              path left=rotate(-angle,x)*r;
+                                                              path right=rotate(angle,x)*r;
+                                                              return subpath(left,t,0)--subpath(right,0,t);
 };
 
 arrowhead HookHead(real dir=arrowdir, real barb=arrowbarb)
@@ -94,34 +94,34 @@
   a.head=new path(path g, position position=EndPoint, pen p=currentpen,
                   real size=0, real angle=arrowangle)
     {
-      if(size == 0) size=a.size(p);
-      angle=min(angle*arrowhookfactor,45);
-      bool relative=position.relative;
-      real position=position.position.x;
-      if(relative) position=reltime(g,position);
-      path r=subpath(g,position,0);
-      pair x=point(r,0);
-      real t=arctime(r,size);
-      pair y=point(r,t);
-      path base=arrowbase(r,y,t,size);
-      path left=rotate(-angle,x)*r;
-      path right=rotate(angle,x)*r;
-      real[] T=arrowbasepoints(base,left,right,1);
-      pair denom=point(right,T[1])-y;
-      real factor=denom != 0 ? length((point(left,T[0])-y)/denom) : 1;
-      path left=rotate(-angle*factor,x)*r;
-      path right=rotate(angle*factor,x)*r;
-      real[] T=arrowbasepoints(base,left,right,1);
-      left=subpath(left,0,T[0]);
-      right=subpath(right,T[1],0);
-      pair pl0=point(left,0), pl1=relpoint(left,1);
-      pair pr0=relpoint(right,0), pr1=relpoint(right,1);
-      pair M=(pl1+pr0)/2;
-      pair v=barb*unit(M-pl0);
-      pl1=pl1+v; pr0=pr0+v;
-      left=pl0{dir(-dir+degrees(M-pl0,false))}..pl1--M;
-      right=M--pr0..pr1{dir(dir+degrees(pr1-M,false))};
-      return left--right&cycle;
+     if(size == 0) size=a.size(p);
+     angle=min(angle*arrowhookfactor,45);
+     bool relative=position.relative;
+     real position=position.position.x;
+     if(relative) position=reltime(g,position);
+     path r=subpath(g,position,0);
+     pair x=point(r,0);
+     real t=arctime(r,size);
+     pair y=point(r,t);
+     path base=arrowbase(r,y,t,size);
+     path left=rotate(-angle,x)*r;
+     path right=rotate(angle,x)*r;
+     real[] T=arrowbasepoints(base,left,right,1);
+     pair denom=point(right,T[1])-y;
+     real factor=denom != 0 ? length((point(left,T[0])-y)/denom) : 1;
+     path left=rotate(-angle*factor,x)*r;
+     path right=rotate(angle*factor,x)*r;
+     real[] T=arrowbasepoints(base,left,right,1);
+     left=subpath(left,0,T[0]);
+     right=subpath(right,T[1],0);
+     pair pl0=point(left,0), pl1=relpoint(left,1);
+     pair pr0=relpoint(right,0), pr1=relpoint(right,1);
+     pair M=(pl1+pr0)/2;
+     pair v=barb*unit(M-pl0);
+     pl1=pl1+v; pr0=pr0+v;
+     left=pl0{dir(-dir+degrees(M-pl0,false))}..pl1--M;
+     right=M--pr0..pr1{dir(dir+degrees(pr1-M,false))};
+     return left--right&cycle;
     };
   return a;
 }
@@ -129,35 +129,35 @@
 
 arrowhead TeXHead;
 TeXHead.size=new real(pen p)
-{
-  static real hcoef=2.1; // 84/40=abs(base-hint)/base_height
-  return hcoef*arrowtexfactor*linewidth(p);
-};
+  {
+   static real hcoef=2.1; // 84/40=abs(base-hint)/base_height
+   return hcoef*arrowtexfactor*linewidth(p);
+  };
 TeXHead.arcsize=TeXHead.size;
 
 TeXHead.head=new path(path g, position position=EndPoint, pen p=currentpen,
                       real size=0, real angle=arrowangle) {
-  static real wcoef=1/84; // 1/abs(base-hint)
-  static path texhead=scale(wcoef)*
-  ((0,20)     .. controls (-75,75)    and (-108,158) ..
-   (-108,166) .. controls (-108,175)  and (-100,178) ..
-   (-93,178)  .. controls (-82,178)   and (-80,173)  ..
-   (-77,168)  .. controls (-62,134)   and (-30,61)   ..
-   (70,14)    .. controls (82,8)      and (84,7)     ..
-   (84,0)     .. controls (84,-7)     and (82,-8)    ..
-   (70,-14)   .. controls (-30,-61)   and (-62,-134) ..
-   (-77,-168) .. controls (-80,-173)  and (-82,-178) ..
-   (-93,-178) .. controls (-100,-178) and (-108,-175)..
-   (-108,-166).. controls (-108,-158) and (-75,-75)  ..
-   (0,-20)--cycle);
-  if(size == 0) size=TeXHead.size(p);
-  path gp=scale(size)*texhead;
-  bool relative=position.relative;
-  real position=position.position.x;
-  if(relative) position=reltime(g,position);
-  path r=subpath(g,position,0);
-  pair y=point(r,arctime(r,size));
-  return shift(y)*rotate(degrees(-dir(r,arctime(r,0.5*size))))*gp;
+                                                           static real wcoef=1/84; // 1/abs(base-hint)
+                                                           static path texhead=scale(wcoef)*
+                                                           ((0,20)     .. controls (-75,75)    and (-108,158) ..
+                                                            (-108,166) .. controls (-108,175)  and (-100,178) ..
+                                                            (-93,178)  .. controls (-82,178)   and (-80,173)  ..
+                                                            (-77,168)  .. controls (-62,134)   and (-30,61)   ..
+                                                            (70,14)    .. controls (82,8)      and (84,7)     ..
+                                                            (84,0)     .. controls (84,-7)     and (82,-8)    ..
+                                                            (70,-14)   .. controls (-30,-61)   and (-62,-134) ..
+                                                            (-77,-168) .. controls (-80,-173)  and (-82,-178) ..
+                                                            (-93,-178) .. controls (-100,-178) and (-108,-175)..
+                                                            (-108,-166).. controls (-108,-158) and (-75,-75)  ..
+                                                            (0,-20)--cycle);
+                                                           if(size == 0) size=TeXHead.size(p);
+                                                           path gp=scale(size)*texhead;
+                                                           bool relative=position.relative;
+                                                           real position=position.position.x;
+                                                           if(relative) position=reltime(g,position);
+                                                           path r=subpath(g,position,0);
+                                                           pair y=point(r,arctime(r,size));
+                                                           return shift(y)*rotate(degrees(-dir(r,arctime(r,0.5*size))))*gp;
 };
 TeXHead.defaultfilltype=new filltype(pen p) {return Fill(p);};
 
@@ -169,7 +169,7 @@
     position *= arclength(g);
     if(center) position += 0.5*size;
     position=arctime(g,position);
-  } else if(center) 
+  } else if(center)
     position=arctime(g,arclength(subpath(g,0,position))+0.5*size);
   return position;
 }
@@ -251,7 +251,7 @@
       drawarrow(f,arrowhead,t*g,p,size,angle,filltype,position,forwards,margin,
                 center);
     });
-  
+
   pic.addPath(g,p);
 
   real position=position(position,size,g,center);
@@ -275,7 +275,7 @@
   pic.add(new void(frame f, transform t) {
       drawarrow2(f,arrowhead,t*g,p,size,angle,filltype,margin);
     });
-  
+
   pic.addPath(g,p);
 
   int L=length(g);
@@ -291,7 +291,7 @@
   Draw(opic,-0.5d--0.5d,p+solid);
   add(pic,opic,a);
 }
-                                                      
+
 picture bar(pair a, pair d, pen p=currentpen)
 {
   picture pic;
@@ -345,7 +345,7 @@
     return false;
   };
 }
-  
+
 arrowbar Arrows(arrowhead arrowhead=DefaultHead,
                 real size=0, real angle=arrowangle,
                 filltype filltype=null)
@@ -383,7 +383,7 @@
                      real size=0, real angle=arcarrowangle,
                      filltype filltype=null,
                      position position=EndPoint)=ArcArrow;
-  
+
 arrowbar MidArcArrow(arrowhead arrowhead=DefaultHead,
                      real size=0, real angle=arcarrowangle,
                      filltype filltype=null)
@@ -395,7 +395,7 @@
     return false;
   };
 }
-  
+
 arrowbar ArcArrows(arrowhead arrowhead=DefaultHead,
                    real size=0, real angle=arcarrowangle,
                    filltype filltype=null)
@@ -406,8 +406,8 @@
     return false;
   };
 }
-  
-arrowbar BeginBar(real size=0) 
+
+arrowbar BeginBar(real size=0)
 {
   return new bool(picture pic, path g, pen p, margin margin) {
     real size=size == 0 ? barsize(p) : size;
@@ -416,7 +416,7 @@
   };
 }
 
-arrowbar Bar(real size=0) 
+arrowbar Bar(real size=0)
 {
   return new bool(picture pic, path g, pen p, margin margin) {
     int L=length(g);
@@ -426,9 +426,9 @@
   };
 }
 
-arrowbar EndBar(real size=0)=Bar; 
+arrowbar EndBar(real size=0)=Bar;
 
-arrowbar Bars(real size=0) 
+arrowbar Bars(real size=0)
 {
   return new bool(picture pic, path g, pen p, margin margin) {
     real size=size == 0 ? barsize(p) : size;
@@ -469,73 +469,73 @@
   // These if statements are ordered in such a way that the most common case
   // (with just a path and a pen) executes the least bytecode.
   if (marker == nomarker)
-  {
-    if (arrow == None && bar == None)
     {
-      if (margin == NoMargin && size(nib(p)) == 0)
-      {
-        pic.addExactAbove(
-            new void(frame f, transform t, transform T, pair, pair) {
-              _draw(f,t*T*g,p);
-            });
-        pic.addPath(g,p);
+      if (arrow == None && bar == None)
+        {
+          if (margin == NoMargin && size(nib(p)) == 0)
+            {
+              pic.addExactAbove(
+                                new void(frame f, transform t, transform T, pair, pair) {
+                                  _draw(f,t*T*g,p);
+                                });
+              pic.addPath(g,p);
 
-        // Jumping over else clauses takes time, so test if we can return
-        // here.
-        if (L == null && legend == null)
-          return;
+              // Jumping over else clauses takes time, so test if we can return
+              // here.
+              if (L == null && legend == null)
+                return;
+            }
+          else // With margin or polygonal pen.
+            {
+              _draw(pic, g, p, margin);
+            }
+        }
+      else /* arrow or bar */
+        {
+          // Note we are using & instead of && as both arrow and bar need to be
+          // called.
+          if (arrow(pic, g, p, margin) & bar(pic, g, p, margin))
+            _draw(pic, g, p, margin);
+        }
+
+      if(L != null && L.s != "") {
+        L=L.copy();
+        L.align(align);
+        L.p(p);
+        L.out(pic,g);
       }
-      else // With margin or polygonal pen.
-      {
-        _draw(pic, g, p, margin);
+
+      if(legend != null && legend.s != "") {
+        legend.p(p);
+        pic.legend.push(Legend(legend.s,legend.p,p,marker.f,marker.above));
       }
     }
-    else /* arrow or bar */
+  else /* marker != nomarker */
     {
+      if(marker != nomarker && !marker.above) marker.mark(pic,g);
+
       // Note we are using & instead of && as both arrow and bar need to be
       // called.
-      if (arrow(pic, g, p, margin) & bar(pic, g, p, margin))
-        _draw(pic, g, p, margin);
-    }
+      if ((arrow == None || arrow(pic, g, p, margin)) &
+          (bar == None || bar(pic, g, p, margin)))
+        {
+          _draw(pic, g, p, margin);
+        }
 
-    if(L != null && L.s != "") {
-      L=L.copy();
-      L.align(align);
-      L.p(p);
-      L.out(pic,g);
-    }
+      if(L != null && L.s != "") {
+        L=L.copy();
+        L.align(align);
+        L.p(p);
+        L.out(pic,g);
+      }
 
-    if(legend != null && legend.s != "") {
-      legend.p(p);
-      pic.legend.push(Legend(legend.s,legend.p,p,marker.f,marker.above));
-    }
-  }
-  else /* marker != nomarker */
-  {
-    if(marker != nomarker && !marker.above) marker.mark(pic,g);
-
-    // Note we are using & instead of && as both arrow and bar need to be
-    // called.
-    if ((arrow == None || arrow(pic, g, p, margin)) &
-        (bar == None || bar(pic, g, p, margin)))
-      {
-        _draw(pic, g, p, margin);
+      if(legend != null && legend.s != "") {
+        legend.p(p);
+        pic.legend.push(Legend(legend.s,legend.p,p,marker.f,marker.above));
       }
 
-    if(L != null && L.s != "") {
-      L=L.copy();
-      L.align(align);
-      L.p(p);
-      L.out(pic,g);
+      if(marker != nomarker && marker.above) marker.mark(pic,g);
     }
-
-    if(legend != null && legend.s != "") {
-      legend.p(p);
-      pic.legend.push(Legend(legend.s,legend.p,p,marker.f,marker.above));
-    }
-
-    if(marker != nomarker && marker.above) marker.mark(pic,g);
-  }
 }
 
 // Draw a fixed-size line about the user-coordinate 'origin'.
@@ -551,12 +551,12 @@
 
 void draw(picture pic=currentpicture, explicit path[] g, pen p=currentpen,
           Label legend=null, marker marker=nomarker)
-{ 
+{
   // This could be optimized to size and draw the entire array as a batch.
-  for(int i=0; i < g.length-1; ++i) 
+  for(int i=0; i < g.length-1; ++i)
     draw(pic,g[i],p,marker);
   if(g.length > 0) draw(pic,g[g.length-1],p,legend,marker);
-} 
+}
 
 void draw(picture pic=currentpicture, guide[] g, pen p=currentpen,
           Label legend=null, marker marker=nomarker)
@@ -621,7 +621,7 @@
 {
   if(pictures.length == 0)
     return new frame[];
- 
+
   picture all;
   size(all,pictures[0]);
   for(picture pic : pictures)

Modified: trunk/Build/source/utils/asymptote/base/plain_bounds.asy
===================================================================
--- trunk/Build/source/utils/asymptote/base/plain_bounds.asy	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/base/plain_bounds.asy	2021-01-02 16:31:31 UTC (rev 57291)
@@ -4,7 +4,7 @@
 // have been added, this is only an approximation since it takes the bounds of
 // their transformed bounding box.
 private void addTransformedCoords(coords2 dest, transform t,
-                          coords2 point, coords2 min, coords2 max)
+                                  coords2 point, coords2 min, coords2 max)
 {
   dest.push(t, point, point);
 
@@ -47,7 +47,7 @@
   for (coord c : src)
     addIfMaximal(dest, c.user, c.truesize);
 }
-      
+
 // Same as addIfMaximal, but testing for minimal coords.
 private void addIfMinimal(coord[] coords, real user, real truesize) {
   for (coord c : coords)
@@ -130,7 +130,7 @@
     void operator init(coord[] left, coord[] bottom,
                        coord[] right, coord[] top) {
       this.left = left;
-      this.bottom = bottom; 
+      this.bottom = bottom;
       this.right = right;
       this.top = top;
     }
@@ -197,7 +197,7 @@
 
   void addBox(pair userMin, pair userMax, pair trueMin, pair trueMax) {
     assert(!frozen);
-    this.min.push(userMin, trueMin); 
+    this.min.push(userMin, trueMin);
     this.max.push(userMax, trueMax);
   }
 
@@ -334,7 +334,7 @@
 
     addLocalsToExtremes(t, e);
   }
-    
+
   private void addLocalsToExtremes(extremes e) {
     addMinToExtremes(e, point);
     addMaxToExtremes(e, point);
@@ -466,7 +466,7 @@
       acc.pushUserCoords(min, max);
       if (pathBounds.length > 0)
         acc.push(min(pathBounds), max(pathBounds));
-      for (var pp : pathpenBounds) 
+      for (var pp : pathpenBounds)
         if(size(pp.g) > 0)
           acc.push(min(pp.g), max(pp.g));
       for (var link : links)
@@ -623,13 +623,13 @@
 
     // Get the extremal coordinates.
     extremes e = extremes();
-    
+
     real sx;
     if(xunitsize == 0) {
       if(xsize != 0) sx=calculateScaling("x",e.left,e.right,xsize,warn);
     } else sx=xunitsize;
 
-    /* Possible alternative code : 
+    /* Possible alternative code :
        real sx = xunitsize != 0 ? xunitsize :
        xsize != 0     ? calculateScaling("x", Coords.x, xsize, warn) :
        0; */
@@ -697,7 +697,7 @@
     makeMutable();
     base.append(b.base);
   }
-    
+
   void append(transform t, bounds b) {
     // makeMutable will be called by append.
     if (t == identity())
@@ -760,7 +760,7 @@
     makeMutable();
     base.yclip(Min,Max);
   }
-  
+
   void clip(pair Min, pair Max) {
     // TODO: If the user bounds have been manually altered, they may be
     // incorrect after the clip.

Modified: trunk/Build/source/utils/asymptote/base/plain_margins.asy
===================================================================
--- trunk/Build/source/utils/asymptote/base/plain_margins.asy	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/base/plain_margins.asy	2021-01-02 16:31:31 UTC (rev 57291)
@@ -5,7 +5,7 @@
 
 typedef marginT margin(path, pen);
 
-path trim(path g, real begin, real end) {
+path trim(path g, real begin, real end=begin) {
   real a=arctime(g,begin);
   real b=arctime(g,arclength(g)-end);
   return a <= b ? subpath(g,a,b) : point(g,a);
@@ -36,7 +36,7 @@
   };
 }
                                                       
-margin Margin(real begin, real end)
+margin Margin(real begin, real end=begin)
 { 
   return new marginT(path g, pen p) {
     marginT margin;
@@ -48,7 +48,7 @@
   };
 }
                                                            
-margin PenMargin(real begin, real end)
+margin PenMargin(real begin, real end=begin)
 { 
   return new marginT(path g, pen p) {
     marginT margin;
@@ -60,7 +60,7 @@
   };
 }
                                               
-margin DotMargin(real begin, real end)
+margin DotMargin(real begin, real end=begin)
 { 
   return new marginT(path g, pen p) {
     marginT margin;
@@ -73,7 +73,7 @@
   };
 }
                                                       
-margin TrueMargin(real begin, real end)
+margin TrueMargin(real begin, real end=begin)
 { 
   return new marginT(path g, pen p) {
     marginT margin;

Modified: trunk/Build/source/utils/asymptote/base/plain_picture.asy
===================================================================
--- trunk/Build/source/utils/asymptote/base/plain_picture.asy	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/base/plain_picture.asy	2021-01-02 16:31:31 UTC (rev 57291)
@@ -1355,13 +1355,14 @@
 }
 
 void tensorshade(picture pic=currentpicture, path[] g, bool stroke=false,
-                 pen fillrule=currentpen, pen[][] p, path[] b=g,
+                 pen fillrule=currentpen, pen[][] p, path[] b=new path[],
                  pair[][] z=new pair[][], bool copy=true)
 {
+  bool compact=b.length == 0 || b[0] == nullpath;
   if(copy) {
     g=copy(g);
     p=copy(p);
-    b=copy(b);
+    if(!compact) b=copy(b);
     z=copy(z);
   }
   pic.add(new void(frame f, transform t) {
@@ -1368,7 +1369,11 @@
       pair[][] Z=new pair[z.length][];
       for(int i=0; i < z.length; ++i)
         Z[i]=t*z[i];
-      tensorshade(f,t*g,stroke,fillrule,p,t*b,Z,false);
+      path[] G=t*g;
+      if(compact)
+        tensorshade(f,G,stroke,fillrule,p,Z,false);
+      else
+        tensorshade(f,G,stroke,fillrule,p,t*b,Z,false);
     },true);
   pic.addPath(g);
 }
@@ -1375,32 +1380,20 @@
 
 void tensorshade(frame f, path[] g, bool stroke=false,
                  pen fillrule=currentpen, pen[] p,
-                 path b=g.length > 0 ? g[0] : nullpath)
+                 path b=g.length > 0 ? g[0] : nullpath, pair[] z=new pair[])
 {
-  tensorshade(f,g,stroke,fillrule,new pen[][] {p},b);
+  tensorshade(f,g,stroke,fillrule,new pen[][] {p},b,
+              z.length > 0 ? new pair[][] {z} : new pair[][]);
 }
 
-void tensorshade(frame f, path[] g, bool stroke=false,
-                 pen fillrule=currentpen, pen[] p,
-                 path b=g.length > 0 ? g[0] : nullpath, pair[] z)
-{
-  tensorshade(f,g,stroke,fillrule,new pen[][] {p},b,new pair[][] {z});
-}
-
 void tensorshade(picture pic=currentpicture, path[] g, bool stroke=false,
                  pen fillrule=currentpen, pen[] p,
-                 path b=g.length > 0 ? g[0] : nullpath)
+                 path b=nullpath, pair[] z=new pair[])
 {
-  tensorshade(pic,g,stroke,fillrule,new pen[][] {p},b);
+  tensorshade(pic,g,stroke,fillrule,new pen[][] {p},b,
+              z.length > 0 ? new pair[][] {z} : new pair[][]);
 }
 
-void tensorshade(picture pic=currentpicture, path[] g, bool stroke=false,
-                 pen fillrule=currentpen, pen[] p,
-                 path b=g.length > 0 ? g[0] : nullpath, pair[] z)
-{
-  tensorshade(pic,g,stroke,fillrule,new pen[][] {p},b,new pair[][] {z});
-}
-
 // Smoothly shade the regions between consecutive paths of a sequence using a
 // given array of pens:
 void draw(picture pic=currentpicture, path[] g, pen fillrule=currentpen,

Modified: trunk/Build/source/utils/asymptote/base/plain_shipout.asy
===================================================================
--- trunk/Build/source/utils/asymptote/base/plain_shipout.asy	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/base/plain_shipout.asy	2021-01-02 16:31:31 UTC (rev 57291)
@@ -86,14 +86,10 @@
     }
   }
 
-  if(outformat(format) == "html") {
-    warning("htmltosvg",
-            "html output requested for 2D picture; generating svg image instead...");
-    format="svg";
-  }
-  
-  if(settings.xasy || (!implicitshipout && prefix == defaultfilename)) {
-    if(prefix == defaultfilename) {
+  bool defaultprefix=prefix==defaultfilename;
+
+  if(settings.xasy || (!implicitshipout && defaultprefix)) {
+    if(defaultprefix) {
       currentpicture.clear();
       add(f,group=false);
     }
@@ -132,8 +128,15 @@
     }
     frame f;
     transform t=pic.calculateTransform();
-    if(currentpicture.fitter == null)
-      f=pic.fit(t);
+    if(currentpicture.fitter == null) {
+      pen background=currentlight.background;
+      if(settings.outformat == "html" && background == nullpen)
+        background=white;
+      if(background != nullpen)
+        f=bbox(pic,nullpen,Fill(background));
+      else
+        f=pic.fit(t);
+    }
     else
       f=pic.fit(prefix,format,view=view,options,script,light,P);
 

Modified: trunk/Build/source/utils/asymptote/base/rationalSimplex.asy
===================================================================
--- trunk/Build/source/utils/asymptote/base/rationalSimplex.asy	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/base/rationalSimplex.asy	2021-01-02 16:31:31 UTC (rev 57291)
@@ -1,8 +1,8 @@
 // Rational simplex solver written by John C. Bowman and Pouria Ramazi, 2018.
 import rational;
 
-void simplexStandard(rational[] c, rational[][] A, int[] s=new int[],
-                     rational[] b) {}
+void simplexInit(rational[] c, rational[][] A, int[] s=new int[],
+                 rational[] b, int count) {}
 void simplexTableau(rational[][] E, int[] Bindices, int I=-1, int J=-1) {}
 void simplexPhase1(rational[] c, rational[][] A, rational[] b,
                    int[] Bindices) {}
@@ -35,7 +35,9 @@
 
   int case;
   rational[] x;
+  rational[] xStandard;
   rational cost;
+  rational[] d;
 
   int m,n;
   int J;
@@ -319,9 +321,8 @@
 
     case=(dual ? iterateDual : iterate)(D,n,Bindices);
     simplexTableau(D,Bindices);
-    if(case != OPTIMAL)
-      return;
 
+    x=new rational[n];
     for(int j=0; j < n; ++j)
       x[j]=0;
 
@@ -328,6 +329,18 @@
     for(int k=0; k < m; ++k)
       x[Bindices[k]-1]=D[k][0];
 
+    if(case == UNBOUNDED) {
+      d=new rational[n];
+      for(int j=0; j < n; ++j)
+        d[j]=0;
+      d[J-1]=1;
+      for(int k=0; k < m; ++k)
+        d[Bindices[k]-1]=-D[k][J];
+    }
+
+    if(case != OPTIMAL)
+      return;
+
     cost=-Dm[0];
   }
 
@@ -391,10 +404,13 @@
     }
 
     rational[] C=concat(c,array(count,rational(0)));
-    if(count > 0) simplexStandard(C,a,b);
+    simplexInit(C,a,b,count);
     operator init(C,a,b,phase1,dual);
 
-    if(case == OPTIMAL && count > 0)
-      x.delete(n,n+count-1);
+    if(case != INFEASIBLE) {
+      xStandard=copy(x);
+      if(count > 0)
+        x.delete(n,n+count-1);
+    }
   }
 }

Modified: trunk/Build/source/utils/asymptote/base/slide.asy
===================================================================
--- trunk/Build/source/utils/asymptote/base/slide.asy	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/base/slide.asy	2021-01-02 16:31:31 UTC (rev 57291)
@@ -309,7 +309,7 @@
 
 void center(string s, pen p=itempen)
 {
-  remark("\center "+s,p);
+  remark(center=true,"\center "+s,p);
 }
 
 void vbox(string s, pen p=itempen)

Modified: trunk/Build/source/utils/asymptote/base/slopefield.asy
===================================================================
--- trunk/Build/source/utils/asymptote/base/slopefield.asy	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/base/slopefield.asy	2021-01-02 16:31:31 UTC (rev 57291)
@@ -19,7 +19,6 @@
       draw(pic,(cp.x-mp,cp.y-mp*slope)--(cp.x+mp,cp.y+mp*slope),p,arrow); 
     }
   }
-  clip(pic,box(a,b));
   return pic;
 }
 

Modified: trunk/Build/source/utils/asymptote/base/three.asy
===================================================================
--- trunk/Build/source/utils/asymptote/base/three.asy	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/base/three.asy	2021-01-02 16:31:31 UTC (rev 57291)
@@ -1065,7 +1065,7 @@
 
 triple dir(path3 p, path3 h)
 {
-  return 0.5*(dir(p)+dir(h));
+  return unit(dir(p)+dir(h));
 }
 
 // return the point on path3 p at arclength L
@@ -1880,6 +1880,14 @@
   return c >= 0 ? identity(4) : diagonal(1,-1,-1,1);
 }
 
+// Align Label with normal in direction dir.
+Label align(Label L, triple dir)
+{
+  Label L=L.copy();
+  L.transform3(align(unit(dir)));
+  return L;
+}
+
 // return a rotation that maps X,Y to the projection plane.
 transform3 transform3(projection P=currentprojection)
 {
@@ -2554,25 +2562,6 @@
     Format(t[0][3])+sep+Format(t[1][3])+sep+Format(t[2][3]);
 }
 
-void writeJavaScript(string name, string preamble, string script) 
-{
-  file out=output(name);
-  write(out,preamble);
-  if(script != "") {
-    write(out,endl);
-    file in=input(script);
-    while(true) {
-      string line=in;
-      if(eof(in)) break;
-      write(out,line,endl);
-    }
-  }
-  close(out);
-  if(settings.verbose > 1) write("Wrote "+name);
-  if(!settings.inlinetex)
-    file3.push(name);
-}
-
 pair viewportmargin(pair lambda)
 {
   return maxbound(0.5*(viewportsize-lambda),viewportmargin);
@@ -2678,13 +2667,13 @@
 
     if(!P.absolute) {
       this.P=t*P;
+      if(this.P.autoadjust || this.P.infinity)
+        adjusted=adjusted | this.P.adjust(m,M);
       if(this.P.center && settings.render != 0) {
         triple target=0.5*(m+M);
         this.P.target=target;
         this.P.calculate();
       }
-      if(this.P.autoadjust || this.P.infinity) 
-        adjusted=adjusted | this.P.adjust(m,M);
     }
 
     bool scale=xsize != 0 || ysize != 0;

Modified: trunk/Build/source/utils/asymptote/base/three_light.asy
===================================================================
--- trunk/Build/source/utils/asymptote/base/three_light.asy	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/base/three_light.asy	2021-01-02 16:31:31 UTC (rev 57291)
@@ -125,7 +125,7 @@
                              rgb(0.5,0.5,0.57)},specularfactor=3,
   new triple[] {(-2,-1.5,-0.5),(2,1.1,-2.5),(-0.5,0,2)});
 
-light Headlamp=light(gray(0.8),specular=gray(0.7),
+light Headlamp=light(white,specular=gray(0.7),
                      specularfactor=3,dir(42,48));
 
 currentlight=Headlamp;

Modified: trunk/Build/source/utils/asymptote/base/three_surface.asy
===================================================================
--- trunk/Build/source/utils/asymptote/base/three_surface.asy	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/base/three_surface.asy	2021-01-02 16:31:31 UTC (rev 57291)
@@ -1374,6 +1374,10 @@
             bool primitive=false)
 {
   bool straight=s.straight && s.planar;
+
+  // Planar Bezier surfaces require extra precision in WebGL
+  int digits=s.planar && !straight ? 12 : settings.digits;
+
   if(s.colors.length > 0) {
     if(prc() && light.on())
         straight=false; // PRC vertex colors (for quads only) ignore lighting
@@ -1383,7 +1387,7 @@
   
   (s.triangular ? drawbeziertriangle : draw)
     (f,s.P,center,straight,m.p,m.opacity,m.shininess,
-     m.metallic,m.fresnel0,s.colors,interaction.type,primitive);
+     m.metallic,m.fresnel0,s.colors,interaction.type,digits,primitive);
 }
 
 void _draw(frame f, path3 g, triple center=O, material m,
@@ -1500,8 +1504,18 @@
     p.push(p[0]);
     s=tensor(s);        
   } else p=s.colors(m,light);
-  tensorshade(f,box(t*s.min(P),t*s.max(P)),m.diffuse(),
-              p,t*project(s.external(),P,1),t*project(s.internal(),P));
+  path g=t*project(s.external(),P,1);
+  pair[] internal=t*project(s.internal(),P);
+  pen fillrule=m.diffuse();
+  if(inside(g,internal[0],fillrule) && inside(g,internal[1],fillrule) &&
+     inside(g,internal[2],fillrule) && inside(g,internal[3],fillrule)) {
+    if(p[0] == p[1] && p[1] == p[2] && p[2] == p[3])
+      fill(f,g,fillrule+p[0]);
+    else
+      tensorshade(f,g,fillrule,p,internal);
+  } else {
+    tensorshade(f,box(t*s.min(P),t*s.max(P)),fillrule,p,g,internal);
+  }
 }
 
 restricted pen[] nullpens={nullpen};

Modified: trunk/Build/source/utils/asymptote/base/three_tube.asy
===================================================================
--- trunk/Build/source/utils/asymptote/base/three_tube.asy	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/base/three_tube.asy	2021-01-02 16:31:31 UTC (rev 57291)
@@ -159,10 +159,10 @@
     triple c0=postcontrol(g,0);
     triple c1=precontrol(g,1);
     triple z1=point(g,1);
-    real norm=sqrtEpsilon*max(abs(z0),abs(c0),abs(c1),abs(z1));
+    real norm=sqrtEpsilon*max(abs(z0),abs(c0),abs(c1),abs(z1),r);
     surface[] s;
     void Split(triple z0, triple c0, triple c1, triple z1,
-               real depth=mantissaBits) {
+               int depth=mantissaBits) {
       if(depth > 0) {
         pair threshold(triple z0, triple c0, triple c1) {
           triple u=c1-z0;

Modified: trunk/Build/source/utils/asymptote/base/tube.asy
===================================================================
--- trunk/Build/source/utils/asymptote/base/tube.asy	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/base/tube.asy	2021-01-02 16:31:31 UTC (rev 57291)
@@ -14,10 +14,10 @@
 void render(path3 s, real r, void f(path3, real))
 {
   void Split(triple z0, triple c0, triple c1, triple z1, real t0=0, real t1=1,
-             real depth=mantissaBits) {
+             int depth=mantissaBits) {
     if(depth > 0) {
       real S=straightness(z0,c0,c1,z1);
-      if(S > max(tubegranularity*max(abs(z0),abs(c0),abs(c1),abs(z1)))) {
+      if(S > max(tubegranularity*max(abs(z0),abs(c0),abs(c1),abs(z1),r))) {
         --depth;
         triple m0=0.5*(z0+c0);
         triple m1=0.5*(c0+c1);

Deleted: trunk/Build/source/utils/asymptote/base/unicode.asy
===================================================================
--- trunk/Build/source/utils/asymptote/base/unicode.asy	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/base/unicode.asy	2021-01-02 16:31:31 UTC (rev 57291)
@@ -1,2 +0,0 @@
-usepackage("ucs");
-usepackage("inputenc","utf8x");

Modified: trunk/Build/source/utils/asymptote/base/webgl/asygl.js
===================================================================
--- trunk/Build/source/utils/asymptote/base/webgl/asygl.js	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/base/webgl/asygl.js	2021-01-02 16:31:31 UTC (rev 57291)
@@ -1,6 +1,6 @@
 /*@license
  AsyGL: Render Bezier patches and triangles via subdivision with WebGL.
-  Copyright 2019: John C. Bowman and Supakorn "Jamie" Rassameemasmuang
+  Copyright 2019-2020: John C. Bowman and Supakorn "Jamie" Rassameemasmuang
   University of Alberta
 
 This program is free software; you can redistribute it and/or modify
@@ -36,4 +36,4 @@
 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.*/
-let vertex="\nattribute vec3 position;\n#ifdef WIDTH\nattribute float width;\n#endif\n#ifdef NORMAL\nattribute vec3 normal;\n#endif\nattribute float materialIndex;\n#ifdef COLOR\nattribute vec4 color;\n#endif\n\nuniform mat3 normMat;\nuniform mat4 viewMat;\nuniform mat4 projViewMat;\n\n#ifdef NORMAL\n#ifndef ORTHOGRAPHIC\nvarying vec3 ViewPosition;\n#endif\nvarying vec3 Normal;\n#endif\nvarying vec4 diffuse;\nvarying vec3 specular;\nvarying float roughness,metallic,fresnel0;\nvarying vec4 emissive;\n\nstruct Material {\n  vec4 diffuse,emissive,specular;\n  vec4 parameters;\n};\n\nuniform Material Materials[Nmaterials];\n\nvoid main(void)\n{\n  vec4 v=vec4(position,1.0);\n  gl_Position=projViewMat*v;\n#ifdef NORMAL\n#ifndef ORTHOGRAPHIC\n  ViewPosition=(viewMat*v).xyz;\n#endif      \n  Normal=normalize(normal*normMat);\n        \n  Material m;\n#ifdef TRANSPARENT\n  m=Materials[int(abs(materialIndex))-1];\n  emissive=m.emissive;\n  if(materialIndex >= 0.0) {\n    diffuse=m.diffuse;\n  } else {\n    diffuse=color;\n#if nlights == 0\n    emissive += color;\n#endif\n  }\n#else\n  m=Materials[int(materialIndex)];\n  emissive=m.emissive;\n#ifdef COLOR\n  diffuse=color;\n#if nlights == 0\n    emissive += color;\n#endif\n#else\n  diffuse=m.diffuse;\n#endif\n#endif\n  specular=m.specular.rgb;\n  vec4 parameters=m.parameters;\n  roughness=1.0-parameters[0];\n  metallic=parameters[1];\n  fresnel0=parameters[2];\n#else\n  emissive=Materials[int(materialIndex)].emissive;\n#endif\n#ifdef WIDTH\n  gl_PointSize=width;\n#endif\n}\n",fragment="\n#ifdef NORMAL\n#ifndef ORTHOGRAPHIC\nvarying vec3 ViewPosition;\n#endif\nvarying vec3 Normal;\nvarying vec4 diffuse;\nvarying vec3 specular;\nvarying float roughness,metallic,fresnel0;\n\nfloat Roughness2;\nvec3 normal;\n\nstruct Light {\n  vec3 direction;\n  vec3 color;\n};\n\nuniform Light Lights[Nlights];\n\nfloat NDF_TRG(vec3 h)\n{\n  float ndoth=max(dot(normal,h),0.0);\n  float alpha2=Roughness2*Roughness2;\n  float denom=ndoth*ndoth*(alpha2-1.0)+1.0;\n  return denom != 0.0 !
 ? alpha2/(denom*denom) : 0.0;\n}\n    \nfloat GGX_Geom(vec3 v)\n{\n  float ndotv=max(dot(v,normal),0.0);\n  float ap=1.0+Roughness2;\n  float k=0.125*ap*ap;\n  return ndotv/((ndotv*(1.0-k))+k);\n}\n    \nfloat Geom(vec3 v, vec3 l)\n{\n  return GGX_Geom(v)*GGX_Geom(l);\n}\n    \nfloat Fresnel(vec3 h, vec3 v, float fresnel0)\n{\n  float a=1.0-max(dot(h,v),0.0);\n  float b=a*a;\n  return fresnel0+(1.0-fresnel0)*b*b*a;\n}\n    \n// physical based shading using UE4 model.\nvec3 BRDF(vec3 viewDirection, vec3 lightDirection)\n{\n  vec3 lambertian=diffuse.rgb;\n  vec3 h=normalize(lightDirection+viewDirection);\n      \n  float omegain=max(dot(viewDirection,normal),0.0);\n  float omegali=max(dot(lightDirection,normal),0.0);\n      \n  float D=NDF_TRG(h);\n  float G=Geom(viewDirection,lightDirection);\n  float F=Fresnel(h,viewDirection,fresnel0);\n      \n  float denom=4.0*omegain*omegali;\n  float rawReflectance=denom > 0.0 ? (D*G)/denom : 0.0;\n      \n  vec3 dielectric=mix(lambertian,rawReflectance*specular,F);\n  vec3 metal=rawReflectance*diffuse.rgb;\n      \n  return mix(dielectric,metal,metallic);\n}\n#endif\nvarying vec4 emissive;\n    \nvoid main(void)\n{\n#if defined(NORMAL) && nlights > 0\n  normal=normalize(Normal);\n  normal=gl_FrontFacing ? normal : -normal;\n#ifdef ORTHOGRAPHIC\n  vec3 viewDir=vec3(0.0,0.0,1.0);\n#else\n  vec3 viewDir=-normalize(ViewPosition);\n#endif\n  Roughness2=roughness*roughness;\n  vec3 color=emissive.rgb;\n  for(int i=0; i < nlights; ++i) {\n    Light Li=Lights[i];\n    vec3 L=Li.direction;\n    float cosTheta=max(dot(normal,L),0.0);\n    vec3 radiance=cosTheta*Li.color;\n    color += BRDF(viewDir,L)*radiance;\n  }\n  gl_FragColor=vec4(color,diffuse.a);\n#else\n  gl_FragColor=emissive;\n#endif\n}\n";!function(t,e){if("object"==typeof exports&&"object"==typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var i=e();for(var a in i)("object"==typeof exports?exports:t)[a]=i[a]}}("undefined"!=typeof self?self:this,function(){return function(t){!
 var e={};function i(a){if(e[a])return e[a].exports;var r=e[a]={i:a,l:!1,exports:{}};return t[a].call(r.exports,r,r.exports,i),r.l=!0,r.exports}return i.m=t,i.c=e,i.d=function(t,e,a){i.o(t,e)||Object.defineProperty(t,e,{configurable:!1,enumerable:!0,get:a})},i.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return i.d(e,"a",e),e},i.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},i.p="",i(i.s=1)}([function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.setMatrixArrayType=function(t){e.ARRAY_TYPE=t},e.toRadian=function(t){return t*r},e.equals=function(t,e){return Math.abs(t-e)<=a*Math.max(1,Math.abs(t),Math.abs(e))};var a=e.EPSILON=1e-6;e.ARRAY_TYPE="undefined"!=typeof Float32Array?Float32Array:Array,e.RANDOM=Math.random;var r=Math.PI/180},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.mat4=e.mat3=void 0;var a=n(i(2)),r=n(i(3));function n(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e.default=t,e}e.mat3=a,e.mat4=r},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.create=function(){var t=new a.ARRAY_TYPE(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},e.fromMat4=function(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[4],t[4]=e[5],t[5]=e[6],t[6]=e[8],t[7]=e[9],t[8]=e[10],t},e.invert=function(t,e){var i=e[0],a=e[1],r=e[2],n=e[3],s=e[4],o=e[5],h=e[6],l=e[7],d=e[8],c=d*s-o*l,m=-d*n+o*h,f=l*n-s*h,u=i*c+a*m+r*f;if(!u)return null;return u=1/u,t[0]=c*u,t[1]=(-d*a+r*l)*u,t[2]=(o*a-r*s)*u,t[3]=m*u,t[4]=(d*i-r*h)*u,t[5]=(-o*i+r*n)*u,t[6]=f*u,t[7]=(-l*i+a*h)*u,t[8]=(s*i-a*n)*u,t};var a=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e.default=t,e}(i(0))},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.create=function(){var t=new a.ARRAY_TYPE(16);return t[0]!
 =1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},e.identity=function(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},e.invert=function(t,e){var i=e[0],a=e[1],r=e[2],n=e[3],s=e[4],o=e[5],h=e[6],l=e[7],d=e[8],c=e[9],m=e[10],f=e[11],u=e[12],p=e[13],v=e[14],g=e[15],w=i*o-a*s,x=i*h-r*s,M=i*l-n*s,b=a*h-r*o,A=a*l-n*o,S=r*l-n*h,P=d*p-c*u,R=d*v-m*u,T=d*g-f*u,y=c*v-m*p,D=c*g-f*p,I=m*g-f*v,z=w*I-x*D+M*y+b*T-A*R+S*P;if(!z)return null;return z=1/z,t[0]=(o*I-h*D+l*y)*z,t[1]=(r*D-a*I-n*y)*z,t[2]=(p*S-v*A+g*b)*z,t[3]=(m*A-c*S-f*b)*z,t[4]=(h*T-s*I-l*R)*z,t[5]=(i*I-r*T+n*R)*z,t[6]=(v*M-u*S-g*x)*z,t[7]=(d*S-m*M+f*x)*z,t[8]=(s*D-o*T+l*P)*z,t[9]=(a*T-i*D-n*P)*z,t[10]=(u*A-p*M+g*w)*z,t[11]=(c*M-d*A-f*w)*z,t[12]=(o*R-s*y-h*P)*z,t[13]=(i*y-a*R+r*P)*z,t[14]=(p*x-u*b-v*w)*z,t[15]=(d*b-c*x+m*w)*z,t},e.multiply=r,e.translate=function(t,e,i){var a=i[0],r=i[1],n=i[2],s=void 0,o=void 0,h=void 0,l=void 0,d=void 0,c=void 0,m=void 0,f=void 0,u=void 0,p=void 0,v=void 0,g=void 0;e===t?(t[12]=e[0]*a+e[4]*r+e[8]*n+e[12],t[13]=e[1]*a+e[5]*r+e[9]*n+e[13],t[14]=e[2]*a+e[6]*r+e[10]*n+e[14],t[15]=e[3]*a+e[7]*r+e[11]*n+e[15]):(s=e[0],o=e[1],h=e[2],l=e[3],d=e[4],c=e[5],m=e[6],f=e[7],u=e[8],p=e[9],v=e[10],g=e[11],t[0]=s,t[1]=o,t[2]=h,t[3]=l,t[4]=d,t[5]=c,t[6]=m,t[7]=f,t[8]=u,t[9]=p,t[10]=v,t[11]=g,t[12]=s*a+d*r+u*n+e[12],t[13]=o*a+c*r+p*n+e[13],t[14]=h*a+m*r+v*n+e[14],t[15]=l*a+f*r+g*n+e[15]);return t},e.rotate=function(t,e,i,r){var n=r[0],s=r[1],o=r[2],h=Math.sqrt(n*n+s*s+o*o),l=void 0,d=void 0,c=void 0,m=void 0,f=void 0,u=void 0,p=void 0,v=void 0,g=void 0,w=void 0,x=void 0,M=void 0,b=void 0,A=void 0,S=void 0,P=void 0,R=void 0,T=void 0,y=void 0,D=void 0,I=void 0,z=void 0,E=void 0,O=void 0;if(Math.abs(h)<a.EPSILON)return null;n*=h=1/h,s*=h,o*=h,l=Math.sin(i),d=Math.cos(i),c=1-d,m=e[0],f=e[1],u=e[2],p=e[3],v=e[4],g=e[5],w=e[6],x=e[7],M=e[8],b=e[9],A=e[10],S=e[11],P=n*n*c+d,R=s*n*c+o*l,T=o*n*c-s*l,y=n*s*c-o*l,D!
 =s*s*c+d,I=o*s*c+n*l,z=n*o*c+s*l,E=s*o*c-n*l,O=o*o*c+d,t[0]=m*P+v*R+M*T,t[1]=f*P+g*R+b*T,t[2]=u*P+w*R+A*T,t[3]=p*P+x*R+S*T,t[4]=m*y+v*D+M*I,t[5]=f*y+g*D+b*I,t[6]=u*y+w*D+A*I,t[7]=p*y+x*D+S*I,t[8]=m*z+v*E+M*O,t[9]=f*z+g*E+b*O,t[10]=u*z+w*E+A*O,t[11]=p*z+x*E+S*O,e!==t&&(t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]);return t},e.fromTranslation=function(t,e){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=e[0],t[13]=e[1],t[14]=e[2],t[15]=1,t},e.fromRotation=function(t,e,i){var r=i[0],n=i[1],s=i[2],o=Math.sqrt(r*r+n*n+s*s),h=void 0,l=void 0,d=void 0;if(Math.abs(o)<a.EPSILON)return null;return r*=o=1/o,n*=o,s*=o,h=Math.sin(e),l=Math.cos(e),d=1-l,t[0]=r*r*d+l,t[1]=n*r*d+s*h,t[2]=s*r*d-n*h,t[3]=0,t[4]=r*n*d-s*h,t[5]=n*n*d+l,t[6]=s*n*d+r*h,t[7]=0,t[8]=r*s*d+n*h,t[9]=n*s*d-r*h,t[10]=s*s*d+l,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},e.frustum=function(t,e,i,a,r,n,s){var o=1/(i-e),h=1/(r-a),l=1/(n-s);return t[0]=2*n*o,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=2*n*h,t[6]=0,t[7]=0,t[8]=(i+e)*o,t[9]=(r+a)*h,t[10]=(s+n)*l,t[11]=-1,t[12]=0,t[13]=0,t[14]=s*n*2*l,t[15]=0,t},e.ortho=function(t,e,i,a,r,n,s){var o=1/(e-i),h=1/(a-r),l=1/(n-s);return t[0]=-2*o,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*h,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=2*l,t[11]=0,t[12]=(e+i)*o,t[13]=(r+a)*h,t[14]=(s+n)*l,t[15]=1,t};var a=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e.default=t,e}(i(0));function r(t,e,i){var a=e[0],r=e[1],n=e[2],s=e[3],o=e[4],h=e[5],l=e[6],d=e[7],c=e[8],m=e[9],f=e[10],u=e[11],p=e[12],v=e[13],g=e[14],w=e[15],x=i[0],M=i[1],b=i[2],A=i[3];return t[0]=x*a+M*o+b*c+A*p,t[1]=x*r+M*h+b*m+A*v,t[2]=x*n+M*l+b*f+A*g,t[3]=x*s+M*d+b*u+A*w,x=i[4],M=i[5],b=i[6],A=i[7],t[4]=x*a+M*o+b*c+A*p,t[5]=x*r+M*h+b*m+A*v,t[6]=x*n+M*l+b*f+A*g,t[7]=x*s+M*d+b*u+A*w,x=i[8],M=i[9],b=i[10],A=i[11],t[8]=x*a+M*o+b*c+A*p,t[9]=x*r+M*h+b*m+A*v,t[10]=x*n+M*l+b*f+A*g,t[11]=x*s+M*d+b*u+A*w,x=i[12],M=i[13],b=i[14],A=i[15],t[12]=x*a+M*o+b*c+A*p,t[13!
 ]=x*r+M*h+b*m+A*v,t[14]=x*n+M*l+b*f+A*g,t[15]=x*s+M*d+b*u+A*w,t}}])});let canvasWidth,canvasHeight,b,B,angle,Zoom0,viewportmargin,zoomFactor,zoomPinchFactor,zoomPinchCap,zoomStep,shiftHoldDistance,shiftWaitTime,vibrateTime,embedded,canvas,gl,alpha,offscreen,context,maxMaterials,halfCanvasWidth,halfCanvasHeight,Zoom,P=[],Materials=[],Lights=[],Centers=[],Background=[1,1,1,1],absolute=!1,viewportshift=[0,0],nlights=0,Nmaterials=2,materials=[],pixel=.75,FillFactor=.1,maxViewportWidth=window.innerWidth,maxViewportHeight=window.innerHeight;const windowTrim=10;let lastzoom,H,zmin,zmax,size2,ArcballFactor,positionBuffer,materialBuffer,colorBuffer,indexBuffer,resizeStep=1.2,third=1/3,rotMat=mat4.create(),projMat=mat4.create(),viewMat=mat4.create(),projViewMat=mat4.create(),normMat=mat3.create(),viewMat3=mat3.create(),cjMatInv=mat4.create(),T=mat4.create(),center={x:0,y:0,z:0},shift={x:0,y:0},viewParam={xmin:0,xmax:0,ymin:0,ymax:0,zmin:0,zmax:0},remesh=!0,wireframe=0,mouseDownOrTouchActive=!1,lastMouseX=null,lastMouseY=null,touchID=null,Positions=[],Normals=[],Colors=[],Indices=[];class Material{constructor(t,e,i,a,r,n){this.diffuse=t,this.emissive=e,this.specular=i,this.shininess=a,this.metallic=r,this.fresnel0=n}setUniform(t,e){let i=i=>gl.getUniformLocation(t,"Materials["+e+"]."+i);gl.uniform4fv(i("diffuse"),new Float32Array(this.diffuse)),gl.uniform4fv(i("emissive"),new Float32Array(this.emissive)),gl.uniform4fv(i("specular"),new Float32Array(this.specular)),gl.uniform4f(i("parameters"),this.shininess,this.metallic,this.fresnel0,0)}}let indexExt,TRIANGLES,material0Data,material1Data,materialData,colorData,transparentData,triangleData,materialIndex,enumPointLight=1,enumDirectionalLight=2;class Light{constructor(t,e){this.direction=t,this.color=e}setUniform(t,e){let i=i=>gl.getUniformLocation(t,"Lights["+e+"]."+i);gl.uniform3fv(i("direction"),new Float32Array(this.direction)),gl.uniform3fv(i("color"),new Float32Array(this.color))}}function initShaders(){let t=gl.getParameter(gl.MAX_VERTEX_UNIFORM_VECTORS);maxMaterials=!
 Math.floor((t-14)/4),Nmaterials=Math.min(Math.max(Nmaterials,Materials.length),maxMaterials),pixelShader=initShader(["WIDTH"]),materialShader=initShader(["NORMAL"]),colorShader=initShader(["NORMAL","COLOR"]),transparentShader=initShader(["NORMAL","COLOR","TRANSPARENT"])}function deleteShaders(){gl.deleteProgram(transparentShader),gl.deleteProgram(colorShader),gl.deleteProgram(materialShader),gl.deleteProgram(pixelShader)}function setBuffers(){positionBuffer=gl.createBuffer(),materialBuffer=gl.createBuffer(),colorBuffer=gl.createBuffer(),indexBuffer=gl.createBuffer()}function noGL(){gl||alert("Could not initialize WebGL")}function saveAttributes(){let t=window.top.document.asygl[alpha];t.gl=gl,t.nlights=Lights.length,t.Nmaterials=Nmaterials,t.maxMaterials=maxMaterials,t.pixelShader=pixelShader,t.materialShader=materialShader,t.colorShader=colorShader,t.transparentShader=transparentShader}function restoreAttributes(){let t=window.top.document.asygl[alpha];gl=t.gl,nlights=t.nlights,Nmaterials=t.Nmaterials,maxMaterials=t.maxMaterials,pixelShader=t.pixelShader,materialShader=t.materialShader,colorShader=t.colorShader,transparentShader=t.transparentShader}function initGL(){if(alpha=Background[3]<1,embedded){let t=window.top.document;null==t.asygl&&(t.asygl=Array(2)),context=canvas.getContext("2d"),(offscreen=t.offscreen)||(offscreen=t.createElement("canvas"),t.offscreen=offscreen),t.asygl[alpha]&&t.asygl[alpha].gl?(restoreAttributes(),(Lights.length!=nlights||Math.min(Materials.length,maxMaterials)>Nmaterials)&&(initShaders(),saveAttributes())):((gl=offscreen.getContext("webgl",{alpha:alpha}))||noGL(),initShaders(),t.asygl[alpha]={},saveAttributes())}else(gl=canvas.getContext("webgl",{alpha:alpha}))||noGL(),initShaders();setBuffers(),indexExt=gl.getExtension("OES_element_index_uint"),TRIANGLES=gl.TRIANGLES,material0Data=new vertexBuffer(gl.POINTS),material1Data=new vertexBuffer(gl.LINES),materialData=new vertexBuffer,colorData=new vertexBuffer,transparentData=new vertexBuffer,triangleData=new vertexBuffer}function get!
 Shader(t,e,i,a=[]){let r=`#version 100\n#ifdef GL_FRAGMENT_PRECISION_HIGH\n  precision highp float;\n#else\n  precision mediump float;\n#endif\n  #define nlights ${0==wireframe?Lights.length:0}\n\n  const int Nlights=${Math.max(Lights.length,1)};\n\n  #define Nmaterials ${Nmaterials}\n`;orthographic&&(r+="#define ORTHOGRAPHIC\n"),a.forEach(t=>r+="#define "+t+"\n");let n=t.createShader(i);return t.shaderSource(n,r+e),t.compileShader(n),t.getShaderParameter(n,t.COMPILE_STATUS)?n:(alert(t.getShaderInfoLog(n)),null)}function drawBuffer(t,e,i=t.indices){if(0==t.indices.length)return;let a=e!=pixelShader;setUniforms(t,e),gl.bindBuffer(gl.ARRAY_BUFFER,positionBuffer),gl.bufferData(gl.ARRAY_BUFFER,new Float32Array(t.vertices),gl.STATIC_DRAW),gl.vertexAttribPointer(positionAttribute,3,gl.FLOAT,!1,a?24:16,0),a&&Lights.length>0?gl.vertexAttribPointer(normalAttribute,3,gl.FLOAT,!1,24,12):pixel&&gl.vertexAttribPointer(widthAttribute,1,gl.FLOAT,!1,16,12),gl.bindBuffer(gl.ARRAY_BUFFER,materialBuffer),gl.bufferData(gl.ARRAY_BUFFER,new Int16Array(t.materialIndices),gl.STATIC_DRAW),gl.vertexAttribPointer(materialAttribute,1,gl.SHORT,!1,2,0),e!=colorShader&&e!=transparentShader||(gl.bindBuffer(gl.ARRAY_BUFFER,colorBuffer),gl.bufferData(gl.ARRAY_BUFFER,new Uint8Array(t.colors),gl.STATIC_DRAW),gl.vertexAttribPointer(colorAttribute,4,gl.UNSIGNED_BYTE,!0,0,0)),gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER,indexBuffer),gl.bufferData(gl.ELEMENT_ARRAY_BUFFER,indexExt?new Uint32Array(i):new Uint16Array(i),gl.STATIC_DRAW),gl.drawElements(a?wireframe?gl.LINES:t.type:gl.POINTS,i.length,indexExt?gl.UNSIGNED_INT:gl.UNSIGNED_SHORT,0)}class vertexBuffer{constructor(t){this.type=t||TRIANGLES,this.clear()}clear(){this.vertices=[],this.materialIndices=[],this.colors=[],this.indices=[],this.nvertices=0,this.materials=[],this.materialTable=[]}vertex(t,e){return this.vertices.push(t[0]),this.vertices.push(t[1]),this.vertices.push(t[2]),this.vertices.push(e[0]),this.vertices.push(e[1]),this.vertices.push(e[2]),this.materialIndices.push(materialIndex),this.nver!
 tices++}Vertex(t,e,i=[0,0,0,0]){return this.vertices.push(t[0]),this.vertices.push(t[1]),this.vertices.push(t[2]),this.vertices.push(e[0]),this.vertices.push(e[1]),this.vertices.push(e[2]),this.materialIndices.push(materialIndex),this.colors.push(i[0]),this.colors.push(i[1]),this.colors.push(i[2]),this.colors.push(i[3]),this.nvertices++}vertex0(t,e){return this.vertices.push(t[0]),this.vertices.push(t[1]),this.vertices.push(t[2]),this.vertices.push(e),this.materialIndices.push(materialIndex),this.nvertices++}iVertex(t,e,i,a=[0,0,0,0]){let r=6*t;this.vertices[r]=e[0],this.vertices[r+1]=e[1],this.vertices[r+2]=e[2],this.vertices[r+3]=i[0],this.vertices[r+4]=i[1],this.vertices[r+5]=i[2],this.materialIndices[t]=materialIndex;let n=4*t;this.colors[n]=a[0],this.colors[n+1]=a[1],this.colors[n+2]=a[2],this.colors[n+3]=a[3],this.indices.push(t)}append(t){append(this.vertices,t.vertices),append(this.materialIndices,t.materialIndices),append(this.colors,t.colors),appendOffset(this.indices,t.indices,this.nvertices),this.nvertices+=t.nvertices}}function append(t,e){let i=t.length,a=e.length;t.length+=a;for(let r=0;r<a;++r)t[i+r]=e[r]}function appendOffset(t,e,i){let a=t.length,r=e.length;t.length+=e.length;for(let n=0;n<r;++n)t[a+n]=e[n]+i}class Geometry{constructor(){this.data=new vertexBuffer,this.Onscreen=!1,this.m=[]}offscreen(t){let e=projViewMat,i=t[0],a=i[0],r=i[1],n=i[2],s=1/(e[3]*a+e[7]*r+e[11]*n+e[15]);this.x=this.X=(e[0]*a+e[4]*r+e[8]*n+e[12])*s,this.y=this.Y=(e[1]*a+e[5]*r+e[9]*n+e[13])*s;for(let i=1,a=t.length;i<a;++i){let a=t[i],r=a[0],n=a[1],s=a[2],o=1/(e[3]*r+e[7]*n+e[11]*s+e[15]),h=(e[0]*r+e[4]*n+e[8]*s+e[12])*o,l=(e[1]*r+e[5]*n+e[9]*s+e[13])*o;h<this.x?this.x=h:h>this.X&&(this.X=h),l<this.y?this.y=l:l>this.Y&&(this.Y=l)}return(this.X<-1.01||this.x>1.01||this.Y<-1.01||this.y>1.01)&&(this.Onscreen=!1,!0)}T(t){let e=this.c[0],i=this.c[1],a=this.c[2],r=t[0]-e,n=t[1]-i,s=t[2]-a;return[r*normMat[0]+n*normMat[3]+s*normMat[6]+e,r*normMat[1]+n*normMat[4]+s*normMat[7]+i,r*normMat[2]+n*normMat[5]+s*normMat[8]+a]}Tcorn!
 ers(t,e){return[this.T(t),this.T([t[0],t[1],e[2]]),this.T([t[0],e[1],t[2]]),this.T([t[0],e[1],e[2]]),this.T([e[0],t[1],t[2]]),this.T([e[0],t[1],e[2]]),this.T([e[0],e[1],t[2]]),this.T(e)]}setMaterial(t,e){null==t.materialTable[this.MaterialIndex]&&(t.materials.length>=Nmaterials&&e(),t.materialTable[this.MaterialIndex]=t.materials.length,t.materials.push(Materials[this.MaterialIndex])),materialIndex=t.materialTable[this.MaterialIndex]}render(){let t;if(this.setMaterialIndex(),0==this.CenterIndex?t=corners(this.Min,this.Max):(this.c=Centers[this.CenterIndex-1],t=this.Tcorners(this.Min,this.Max)),this.offscreen(t))return void this.data.clear();let e,i=this.controlpoints;if(0==this.CenterIndex){if(!remesh&&this.Onscreen)return void this.append();e=i}else{let t=i.length;e=Array(t);for(let a=0;a<t;++a)e[a]=this.T(i[a])}let a=orthographic?1:this.Min[2]/B[2],r=pixel*Math.hypot(a*(viewParam.xmax-viewParam.xmin),a*(viewParam.ymax-viewParam.ymin))/size2;this.res2=r*r,this.Epsilon=FillFactor*r,this.data.clear(),this.Onscreen=!0,this.process(e)}}class BezierPatch extends Geometry{constructor(t,e,i,a,r,n){super(),this.controlpoints=t,this.Min=a,this.Max=r,this.color=n,this.CenterIndex=e;let s=t.length;if(n){let t=n[0][3]+n[1][3]+n[2][3];this.transparent=16==s||4==s?t+n[3][3]<1020:t<765}else this.transparent=Materials[i].diffuse[3]<1;this.MaterialIndex=i,this.vertex=this.transparent?this.data.Vertex.bind(this.data):this.data.vertex.bind(this.data),this.L2norm(this.controlpoints)}setMaterialIndex(){this.transparent?this.setMaterial(transparentData,drawTransparent):this.color?this.setMaterial(colorData,drawColor):this.setMaterial(materialData,drawMaterial)}L2norm(t){let e=t[0];this.epsilon=0;let i=t.length;for(let a=1;a<i;++a)this.epsilon=Math.max(this.epsilon,abs2([t[a][0]-e[0],t[a][1]-e[1],t[a][2]-e[2]]));this.epsilon*=Number.EPSILON}processTriangle(t){let e=t[0],i=t[1],a=t[2],r=unit(cross([i[0]-e[0],i[1]-e[1],i[2]-e[2]],[a[0]-e[0],a[1]-e[1],a[2]-e[2]]));if(!this.offscreen([e,i,a])){let t,n,s;this.color?(t=this.data.Vertex(e,r!
 ,this.color[0]),n=this.data.Vertex(i,r,this.color[1]),s=this.data.Vertex(a,r,this.color[2])):(t=this.vertex(e,r),n=this.vertex(i,r),s=this.vertex(a,r)),0==wireframe?(this.data.indices.push(t),this.data.indices.push(n),this.data.indices.push(s)):(this.data.indices.push(t),this.data.indices.push(n),this.data.indices.push(n),this.data.indices.push(s),this.data.indices.push(s),this.data.indices.push(t)),this.append()}}processQuad(t){let e=t[0],i=t[1],a=t[2],r=t[3],n=cross([i[0]-e[0],i[1]-e[1],i[2]-e[2]],[a[0]-i[0],a[1]-i[1],a[2]-i[2]]),s=cross([a[0]-r[0],a[1]-r[1],a[2]-r[2]],[r[0]-e[0],r[1]-e[1],r[2]-e[2]]),o=unit([n[0]+s[0],n[1]+s[1],n[2]+s[2]]);if(!this.offscreen([e,i,a,r])){let t,n,s,h;this.color?(t=this.data.Vertex(e,o,this.color[0]),n=this.data.Vertex(i,o,this.color[1]),s=this.data.Vertex(a,o,this.color[2]),h=this.data.Vertex(r,o,this.color[3])):(t=this.vertex(e,o),n=this.vertex(i,o),s=this.vertex(a,o),h=this.vertex(r,o)),0==wireframe?(this.data.indices.push(t),this.data.indices.push(n),this.data.indices.push(s),this.data.indices.push(t),this.data.indices.push(s),this.data.indices.push(h)):(this.data.indices.push(t),this.data.indices.push(n),this.data.indices.push(n),this.data.indices.push(s),this.data.indices.push(s),this.data.indices.push(h),this.data.indices.push(h),this.data.indices.push(t)),this.append()}}curve(t,e,i,a,r){new BezierCurve([t[e],t[i],t[a],t[r]],0,materialIndex,this.Min,this.Max).render()}process(t){if(this.transparent&&1!=wireframe&&(materialIndex=this.color?-1-materialIndex:1+materialIndex),10==t.length)return this.process3(t);if(3==t.length)return this.processTriangle(t);if(4==t.length)return this.processQuad(t);if(1==wireframe)return this.curve(t,0,4,8,12),this.curve(t,12,13,14,15),this.curve(t,15,11,7,3),void this.curve(t,3,2,1,0);let e=t[0],i=t[3],a=t[12],r=t[15],n=this.normal(i,t[2],t[1],e,t[4],t[8],a);abs2(n)<this.epsilon&&abs2(n=this.normal(i,t[2],t[1],e,t[13],t[14],r))<this.epsilon&&(n=this.normal(r,t[11],t[7],i,t[4],t[8],a));let s=this.normal(e,t[4],t[8],a,t[13],t[14],r);abs2(s)<th!
 is.epsilon&&abs2(s=this.normal(e,t[4],t[8],a,t[11],t[7],i))<this.epsilon&&(s=this.normal(i,t[2],t[1],e,t[13],t[14],r));let o=this.normal(a,t[13],t[14],r,t[11],t[7],i);abs2(o)<this.epsilon&&abs2(o=this.normal(a,t[13],t[14],r,t[2],t[1],e))<this.epsilon&&(o=this.normal(e,t[4],t[8],a,t[11],t[7],i));let h=this.normal(r,t[11],t[7],i,t[2],t[1],e);if(abs2(h)<this.epsilon&&abs2(h=this.normal(r,t[11],t[7],i,t[4],t[8],a))<this.epsilon&&(h=this.normal(a,t[13],t[14],r,t[2],t[1],e)),this.color){let l=this.color[0],d=this.color[1],c=this.color[2],m=this.color[3],f=this.data.Vertex(e,n,l),u=this.data.Vertex(a,s,d),p=this.data.Vertex(r,o,c),v=this.data.Vertex(i,h,m);this.Render(t,f,u,p,v,e,a,r,i,!1,!1,!1,!1,l,d,c,m)}else{let l=this.vertex(e,n),d=this.vertex(a,s),c=this.vertex(r,o),m=this.vertex(i,h);this.Render(t,l,d,c,m,e,a,r,i,!1,!1,!1,!1)}this.data.indices.length>0&&this.append()}append(){this.transparent?transparentData.append(this.data):this.color?colorData.append(this.data):materialData.append(this.data)}Render(t,e,i,a,r,n,s,o,h,l,d,c,m,f,u,p,v){let g=this.Distance(t);if(g[0]<this.res2&&g[1]<this.res2)this.offscreen([n,s,o])||(0==wireframe?(this.data.indices.push(e),this.data.indices.push(i),this.data.indices.push(a)):(this.data.indices.push(e),this.data.indices.push(i),this.data.indices.push(i),this.data.indices.push(a))),this.offscreen([n,o,h])||(0==wireframe?(this.data.indices.push(e),this.data.indices.push(a),this.data.indices.push(r)):(this.data.indices.push(a),this.data.indices.push(r),this.data.indices.push(r),this.data.indices.push(e)));else{if(this.offscreen(t))return;let w=t[0],x=t[3],M=t[12],b=t[15];if(g[0]<this.res2){let g=new Split3(w,t[1],t[2],x),A=new Split3(t[4],t[5],t[6],t[7]),S=new Split3(t[8],t[9],t[10],t[11]),P=new Split3(M,t[13],t[14],b),R=[w,g.m0,g.m3,g.m5,t[4],A.m0,A.m3,A.m5,t[8],S.m0,S.m3,S.m5,M,P.m0,P.m3,P.m5],T=[g.m5,g.m4,g.m2,x,A.m5,A.m4,A.m2,t[7],S.m5,S.m4,S.m2,t[11],P.m5,P.m4,P.m2,b],y=this.normal(R[12],R[13],R[14],R[15],R[11],R[7],R[3]);abs2(y)<=this.epsilon&&abs2(y=this.normal(R[12],R[13],R[1!
 4],R[15],R[2],R[1],R[0]))<=this.epsilon&&(y=this.normal(R[0],R[4],R[8],R[12],R[11],R[7],R[3]));let D=this.normal(T[3],T[2],T[1],T[0],T[4],T[8],T[12]);abs2(D)<=this.epsilon&&abs2(D=this.normal(T[3],T[2],T[1],T[0],T[13],T[14],T[15]))<=this.epsilon&&(D=this.normal(T[15],T[11],T[7],T[3],T[4],T[8],T[12]));let I=this.Epsilon,z=[.5*(s[0]+o[0]),.5*(s[1]+o[1]),.5*(s[2]+o[2])];if(!d)if(d=Straightness(M,t[13],t[14],b)<this.res2){let t=unit(this.differential(T[12],T[8],T[4],T[0]));z=[z[0]-I*t[0],z[1]-I*t[1],z[2]-I*t[2]]}else z=R[15];let E=[.5*(h[0]+n[0]),.5*(h[1]+n[1]),.5*(h[2]+n[2])];if(!m)if(m=Straightness(w,t[1],t[2],x)<this.res2){let t=unit(this.differential(R[3],R[7],R[11],R[15]));E=[E[0]-I*t[0],E[1]-I*t[1],E[2]-I*t[2]]}else E=T[0];if(f){let t=Array(4),g=Array(4);for(let e=0;e<4;++e)t[e]=.5*(u[e]+p[e]),g[e]=.5*(v[e]+f[e]);let w=this.data.Vertex(z,y,t),x=this.data.Vertex(E,D,g);this.Render(R,e,i,w,x,n,s,z,E,l,d,!1,m,f,u,t,g),this.Render(T,x,w,a,r,E,z,o,h,!1,d,c,m,g,t,p,v)}else{let t=this.vertex(z,y),f=this.vertex(E,D);this.Render(R,e,i,t,f,n,s,z,E,l,d,!1,m),this.Render(T,f,t,a,r,E,z,o,h,!1,d,c,m)}return}if(g[1]<this.res2){let g=new Split3(w,t[4],t[8],M),A=new Split3(t[1],t[5],t[9],t[13]),S=new Split3(t[2],t[6],t[10],t[14]),P=new Split3(x,t[7],t[11],b),R=[w,t[1],t[2],x,g.m0,A.m0,S.m0,P.m0,g.m3,A.m3,S.m3,P.m3,g.m5,A.m5,S.m5,P.m5],T=[g.m5,A.m5,S.m5,P.m5,g.m4,A.m4,S.m4,P.m4,g.m2,A.m2,S.m2,P.m2,M,t[13],t[14],b],y=this.normal(R[0],R[4],R[8],R[12],R[13],R[14],R[15]);abs2(y)<=this.epsilon&&abs2(y=this.normal(R[0],R[4],R[8],R[12],R[11],R[7],R[3]))<=this.epsilon&&(y=this.normal(R[3],R[2],R[1],R[0],R[13],R[14],R[15]));let D=this.normal(T[15],T[11],T[7],T[3],T[2],T[1],T[0]);abs2(D)<=this.epsilon&&abs2(D=this.normal(T[15],T[11],T[7],T[3],T[4],T[8],T[12]))<=this.epsilon&&(D=this.normal(T[12],T[13],T[14],T[15],T[2],T[1],T[0]));let I=this.Epsilon,z=[.5*(n[0]+s[0]),.5*(n[1]+s[1]),.5*(n[2]+s[2])];if(!l)if(l=Straightness(w,t[4],t[8],M)<this.res2){let t=unit(this.differential(T[0],T[1],T[2],T[3]));z=[z[0]-I*t[0],z[1]-I*t[1],z[2]-I*t[2]]}el!
 se z=R[12];let E=[.5*(o[0]+h[0]),.5*(o[1]+h[1]),.5*(o[2]+h[2])];if(!c)if(c=Straightness(b,t[11],t[7],x)<this.res2){let t=unit(this.differential(R[15],R[14],R[13],R[12]));E=[E[0]-I*t[0],E[1]-I*t[1],E[2]-I*t[2]]}else E=T[3];if(f){let t=Array(4),g=Array(4);for(let e=0;e<4;++e)t[e]=.5*(f[e]+u[e]),g[e]=.5*(p[e]+v[e]);let w=this.data.Vertex(z,y,t),x=this.data.Vertex(E,D,g);this.Render(R,e,w,x,r,n,z,E,h,l,!1,c,m,f,t,g,v),this.Render(T,w,i,a,x,z,s,o,E,l,d,c,!1,t,u,p,g)}else{let t=this.vertex(z,y),f=this.vertex(E,D);this.Render(R,e,t,f,r,n,z,E,h,l,!1,c,m),this.Render(T,t,i,a,f,z,s,o,E,l,d,c,!1)}return}let A=new Split3(w,t[1],t[2],x),S=new Split3(t[4],t[5],t[6],t[7]),P=new Split3(t[8],t[9],t[10],t[11]),R=new Split3(M,t[13],t[14],b),T=new Split3(w,t[4],t[8],M),y=new Split3(A.m0,S.m0,P.m0,R.m0),D=new Split3(A.m3,S.m3,P.m3,R.m3),I=new Split3(A.m5,S.m5,P.m5,R.m5),z=new Split3(A.m4,S.m4,P.m4,R.m4),E=new Split3(A.m2,S.m2,P.m2,R.m2),O=new Split3(x,t[7],t[11],b),L=[w,A.m0,A.m3,A.m5,T.m0,y.m0,D.m0,I.m0,T.m3,y.m3,D.m3,I.m3,T.m5,y.m5,D.m5,I.m5],N=[T.m5,y.m5,D.m5,I.m5,T.m4,y.m4,D.m4,I.m4,T.m2,y.m2,D.m2,I.m2,M,R.m0,R.m3,R.m5],_=[I.m5,z.m5,E.m5,O.m5,I.m4,z.m4,E.m4,O.m4,I.m2,z.m2,E.m2,O.m2,R.m5,R.m4,R.m2,b],B=[A.m5,A.m4,A.m2,x,I.m0,z.m0,E.m0,O.m0,I.m3,z.m3,E.m3,O.m3,I.m5,z.m5,E.m5,O.m5],V=L[15],C=this.normal(L[0],L[4],L[8],L[12],L[13],L[14],L[15]);abs2(C)<this.epsilon&&abs2(C=this.normal(L[0],L[4],L[8],L[12],L[11],L[7],L[3]))<this.epsilon&&(C=this.normal(L[3],L[2],L[1],L[0],L[13],L[14],L[15]));let F=this.normal(N[12],N[13],N[14],N[15],N[11],N[7],N[3]);abs2(F)<this.epsilon&&abs2(F=this.normal(N[12],N[13],N[14],N[15],N[2],N[1],N[0]))<this.epsilon&&(F=this.normal(N[0],N[4],N[8],N[12],N[11],N[7],N[3]));let H=this.normal(_[15],_[11],_[7],_[3],_[2],_[1],_[0]);abs2(H)<this.epsilon&&abs2(H=this.normal(_[15],_[11],_[7],_[3],_[4],_[8],_[12]))<this.epsilon&&(H=this.normal(_[12],_[13],_[14],_[15],_[2],_[1],_[0]));let G=this.normal(B[3],B[2],B[1],B[0],B[4],B[8],B[12]);abs2(G)<this.epsilon&&abs2(G=this.normal(B[3],B[2],B[1],B[0],B[13],B[14],B[15]))<t!
 his.epsilon&&(G=this.normal(B[15],B[11],B[7],B[3],B[4],B[8],B[12]));let U=this.normal(_[3],_[2],_[1],V,_[4],_[8],_[12]),W=this.Epsilon,Y=[.5*(n[0]+s[0]),.5*(n[1]+s[1]),.5*(n[2]+s[2])];if(!l)if(l=Straightness(w,t[4],t[8],M)<this.res2){let t=unit(this.differential(N[0],N[1],N[2],N[3]));Y=[Y[0]-W*t[0],Y[1]-W*t[1],Y[2]-W*t[2]]}else Y=L[12];let j=[.5*(s[0]+o[0]),.5*(s[1]+o[1]),.5*(s[2]+o[2])];if(!d)if(d=Straightness(M,t[13],t[14],b)<this.res2){let t=unit(this.differential(_[12],_[8],_[4],_[0]));j=[j[0]-W*t[0],j[1]-W*t[1],j[2]-W*t[2]]}else j=N[15];let k=[.5*(o[0]+h[0]),.5*(o[1]+h[1]),.5*(o[2]+h[2])];if(!c)if(c=Straightness(b,t[11],t[7],x)<this.res2){let t=unit(this.differential(B[15],B[14],B[13],B[12]));k=[k[0]-W*t[0],k[1]-W*t[1],k[2]-W*t[2]]}else k=_[3];let Z=[.5*(h[0]+n[0]),.5*(h[1]+n[1]),.5*(h[2]+n[2])];if(!m)if(m=Straightness(w,t[1],t[2],x)<this.res2){let t=unit(this.differential(L[3],L[7],L[11],L[15]));Z=[Z[0]-W*t[0],Z[1]-W*t[1],Z[2]-W*t[2]]}else Z=B[0];if(f){let t=Array(4),g=Array(4),w=Array(4),x=Array(4),M=Array(4);for(let e=0;e<4;++e)t[e]=.5*(f[e]+u[e]),g[e]=.5*(u[e]+p[e]),w[e]=.5*(p[e]+v[e]),x[e]=.5*(v[e]+f[e]),M[e]=.5*(t[e]+w[e]);let b=this.data.Vertex(Y,C,t),A=this.data.Vertex(j,F,g),S=this.data.Vertex(k,H,w),P=this.data.Vertex(Z,G,x),R=this.data.Vertex(V,U,M);this.Render(L,e,b,R,P,n,Y,V,Z,l,!1,!1,m,f,t,M,x),this.Render(N,b,i,A,R,Y,s,j,V,l,d,!1,!1,t,u,g,M),this.Render(_,R,A,a,S,V,j,o,k,!1,d,c,!1,M,g,p,w),this.Render(B,P,R,S,r,Z,V,k,h,!1,!1,c,m,x,M,w,v)}else{let t=this.vertex(Y,C),f=this.vertex(j,F),u=this.vertex(k,H),p=this.vertex(Z,G),v=this.vertex(V,U);this.Render(L,e,t,v,p,n,Y,V,Z,l,!1,!1,m),this.Render(N,t,i,f,v,Y,s,j,V,l,d,!1,!1),this.Render(_,v,f,a,u,V,j,o,k,!1,d,c,!1),this.Render(B,p,v,u,r,Z,V,k,h,!1,!1,c,m)}}}process3(t){if(1==wireframe)return this.curve(t,0,1,3,6),this.curve(t,6,7,8,9),void this.curve(t,9,5,2,0);let e=t[0],i=t[6],a=t[9],r=this.normal(a,t[5],t[2],e,t[1],t[3],i),n=this.normal(e,t[1],t[3],i,t[7],t[8],a),s=this.normal(i,t[7],t[8],a,t[5],t[2],e);if(this.color){let o=this.color[0],h=this!
 .color[1],l=this.color[2],d=this.data.Vertex(e,r,o),c=this.data.Vertex(i,n,h),m=this.data.Vertex(a,s,l);this.Render3(t,d,c,m,e,i,a,!1,!1,!1,o,h,l)}else{let o=this.vertex(e,r),h=this.vertex(i,n),l=this.vertex(a,s);this.Render3(t,o,h,l,e,i,a,!1,!1,!1)}this.data.indices.length>0&&this.append()}Render3(t,e,i,a,r,n,s,o,h,l,d,c,m){if(this.Distance3(t)<this.res2)this.offscreen([r,n,s])||(0==wireframe?(this.data.indices.push(e),this.data.indices.push(i),this.data.indices.push(a)):(this.data.indices.push(e),this.data.indices.push(i),this.data.indices.push(i),this.data.indices.push(a),this.data.indices.push(a),this.data.indices.push(e)));else{if(this.offscreen(t))return;let f=t[0],u=t[1],p=t[2],v=t[3],g=t[4],w=t[5],x=t[6],M=t[7],b=t[8],A=t[9],S=[.5*(A[0]+w[0]),.5*(A[1]+w[1]),.5*(A[2]+w[2])],P=[.5*(A[0]+b[0]),.5*(A[1]+b[1]),.5*(A[2]+b[2])],R=[.5*(w[0]+p[0]),.5*(w[1]+p[1]),.5*(w[2]+p[2])],T=[.5*(b[0]+g[0]),.5*(b[1]+g[1]),.5*(b[2]+g[2])],y=[.5*(b[0]+M[0]),.5*(b[1]+M[1]),.5*(b[2]+M[2])],D=[.5*(p[0]+g[0]),.5*(p[1]+g[1]),.5*(p[2]+g[2])],I=[.5*(p[0]+f[0]),.5*(p[1]+f[1]),.5*(p[2]+f[2])],z=[.5*(g[0]+v[0]),.5*(g[1]+v[1]),.5*(g[2]+v[2])],E=[.5*(M[0]+x[0]),.5*(M[1]+x[1]),.5*(M[2]+x[2])],O=[.5*(f[0]+u[0]),.5*(f[1]+u[1]),.5*(f[2]+u[2])],L=[.5*(u[0]+v[0]),.5*(u[1]+v[1]),.5*(u[2]+v[2])],N=[.5*(v[0]+x[0]),.5*(v[1]+x[1]),.5*(v[2]+x[2])],_=[.5*(S[0]+R[0]),.5*(S[1]+R[1]),.5*(S[2]+R[2])],B=[.5*(P[0]+y[0]),.5*(P[1]+y[1]),.5*(P[2]+y[2])],V=[.5*(R[0]+I[0]),.5*(R[1]+I[1]),.5*(R[2]+I[2])],C=[.5*T[0]+.25*(g[0]+u[0]),.5*T[1]+.25*(g[1]+u[1]),.5*T[2]+.25*(g[2]+u[2])],F=[.5*(y[0]+E[0]),.5*(y[1]+E[1]),.5*(y[2]+E[2])],H=[.5*D[0]+.25*(g[0]+M[0]),.5*D[1]+.25*(g[1]+M[1]),.5*D[2]+.25*(g[2]+M[2])],G=[.25*(w[0]+g[0])+.5*z[0],.25*(w[1]+g[1])+.5*z[1],.25*(w[2]+g[2])+.5*z[2]],U=[.5*(O[0]+L[0]),.5*(O[1]+L[1]),.5*(O[2]+L[2])],W=[.5*(L[0]+N[0]),.5*(L[1]+N[1]),.5*(L[2]+N[2])],Y=[.5*(H[0]+U[0]),.5*(H[1]+U[1]),.5*(H[2]+U[2])],j=[.5*(H[0]+W[0]),.5*(H[1]+W[1]),.5*(H[2]+W[2])],k=[.5*(U[0]+W[0]),.5*(U[1]+W[1]),.5*(U[2]+W[2])],Z=[.5*(G[0]+F[0]),.5*(G[1]+F[1]),.5*(G[2]+F[2])!
 ],X=[.5*(B[0]+G[0]),.5*(B[1]+G[1]),.5*(B[2]+G[2])],q=[.5*(B[0]+F[0]),.5*(B[1]+F[1]),.5*(B[2]+F[2])],K=[.5*(_[0]+C[0]),.5*(_[1]+C[1]),.5*(_[2]+C[2])],$=[.5*(V[0]+C[0]),.5*(V[1]+C[1]),.5*(V[2]+C[2])],Q=[.5*(_[0]+V[0]),.5*(_[1]+V[1]),.5*(_[2]+V[2])],J=[f,O,I,U,[.5*(D[0]+O[0]),.5*(D[1]+O[1]),.5*(D[2]+O[2])],V,k,Y,$,Q],tt=[k,W,j,N,[.5*(z[0]+E[0]),.5*(z[1]+E[1]),.5*(z[2]+E[2])],Z,x,E,F,q],et=[Q,K,_,X,[.5*(S[0]+T[0]),.5*(S[1]+T[1]),.5*(S[2]+T[2])],S,q,B,P,A],it=[q,X,Z,K,[.25*(R[0]+y[0]+L[0]+g[0]),.25*(R[1]+y[1]+L[1]+g[1]),.25*(R[2]+y[2]+L[2]+g[2])],j,Q,$,Y,k],at=this.normal(k,j,Z,q,X,K,Q),rt=this.normal(q,X,K,Q,$,Y,k),nt=this.normal(Q,$,Y,k,j,Z,q),st=this.Epsilon,ot=[.5*(n[0]+s[0]),.5*(n[1]+s[1]),.5*(n[2]+s[2])];if(!o)if(o=Straightness(x,M,b,A)<this.res2){let t=unit(this.sumdifferential(it[0],it[2],it[5],it[9],it[1],it[3],it[6]));ot=[ot[0]-st*t[0],ot[1]-st*t[1],ot[2]-st*t[2]]}else ot=q;let ht=[.5*(s[0]+r[0]),.5*(s[1]+r[1]),.5*(s[2]+r[2])];if(!h)if(h=Straightness(f,p,w,A)<this.res2){let t=unit(this.sumdifferential(it[6],it[3],it[1],it[0],it[7],it[8],it[9]));ht=[ht[0]-st*t[0],ht[1]-st*t[1],ht[2]-st*t[2]]}else ht=Q;let lt=[.5*(r[0]+n[0]),.5*(r[1]+n[1]),.5*(r[2]+n[2])];if(!l)if(l=Straightness(f,u,v,x)<this.res2){let t=unit(this.sumdifferential(it[9],it[8],it[7],it[6],it[5],it[2],it[0]));lt=[lt[0]-st*t[0],lt[1]-st*t[1],lt[2]-st*t[2]]}else lt=k;if(d){let t=Array(4),f=Array(4),u=Array(4);for(let e=0;e<4;++e)t[e]=.5*(c[e]+m[e]),f[e]=.5*(m[e]+d[e]),u[e]=.5*(d[e]+c[e]);let p=this.data.Vertex(ot,at,t),v=this.data.Vertex(ht,rt,f),g=this.data.Vertex(lt,nt,u);this.Render3(J,e,g,v,r,lt,ht,!1,h,l,d,u,f),this.Render3(tt,g,i,p,lt,n,ot,o,!1,l,u,c,t),this.Render3(et,v,p,a,ht,ot,s,o,h,!1,f,t,m),this.Render3(it,p,v,g,ot,ht,lt,!1,!1,!1,t,f,u)}else{let t=this.vertex(ot,at),d=this.vertex(ht,rt),c=this.vertex(lt,nt);this.Render3(J,e,c,d,r,lt,ht,!1,h,l),this.Render3(tt,c,i,t,lt,n,ot,o,!1,l),this.Render3(et,d,t,a,ht,ot,s,o,h,!1),this.Render3(it,t,d,c,ot,ht,lt,!1,!1,!1)}}}Distance(t){let e=t[0],i=t[3],a=t[12],r=t[15],n=Flatness(e,a,i,r);n=Math.max!
 (Straightness(e,t[4],t[8],a)),n=Math.max(n,Straightness(t[1],t[5],t[9],t[13])),n=Math.max(n,Straightness(i,t[7],t[11],r)),n=Math.max(n,Straightness(t[2],t[6],t[10],t[14]));let s=Flatness(e,i,a,r);return s=Math.max(s,Straightness(e,t[1],t[2],i)),s=Math.max(s,Straightness(t[4],t[5],t[6],t[7])),s=Math.max(s,Straightness(t[8],t[9],t[10],t[11])),[n,s=Math.max(s,Straightness(a,t[13],t[14],r))]}Distance3(t){let e=t[0],i=t[4],a=t[6],r=t[9],n=abs2([(e[0]+a[0]+r[0])*third-i[0],(e[1]+a[1]+r[1])*third-i[1],(e[2]+a[2]+r[2])*third-i[2]]);return n=Math.max(n,Straightness(e,t[1],t[3],a)),n=Math.max(n,Straightness(e,t[2],t[5],r)),Math.max(n,Straightness(a,t[7],t[8],r))}differential(t,e,i,a){let r=[3*(e[0]-t[0]),3*(e[1]-t[1]),3*(e[2]-t[2])];return abs2(r)>this.epsilon?r:abs2(r=bezierPP(t,e,i))>this.epsilon?r:bezierPPP(t,e,i,a)}sumdifferential(t,e,i,a,r,n,s){let o=this.differential(t,e,i,a),h=this.differential(t,r,n,s);return[o[0]+h[0],o[1]+h[1],o[2]+h[2]]}normal(t,e,i,a,r,n,s){let o=3*(r[0]-a[0]),h=3*(r[1]-a[1]),l=3*(r[2]-a[2]),d=3*(i[0]-a[0]),c=3*(i[1]-a[1]),m=3*(i[2]-a[2]),f=[h*m-l*c,l*d-o*m,o*c-h*d];if(abs2(f)>this.epsilon)return f;let u=[d,c,m],p=[o,h,l],v=bezierPP(a,i,e),g=bezierPP(a,r,n),w=cross(g,u),x=cross(p,v);if(abs2(f=[w[0]+x[0],w[1]+x[1],w[2]+x[2]])>this.epsilon)return f;let M=bezierPPP(a,i,e,t),b=bezierPPP(a,r,n,s);w=cross(p,M),x=cross(b,u);let A=cross(g,v);return abs2(f=[w[0]+x[0]+A[0],w[1]+x[1]+A[1],w[2]+x[2]+A[2]])>this.epsilon?f:(w=cross(b,v),x=cross(g,M),abs2(f=[w[0]+x[0],w[1]+x[1],w[2]+x[2]])>this.epsilon?f:cross(b,M))}}class BezierCurve extends Geometry{constructor(t,e,i,a,r){super(),this.controlpoints=t,this.Min=a,this.Max=r,this.CenterIndex=e,this.MaterialIndex=i}setMaterialIndex(){this.setMaterial(material1Data,drawMaterial1)}processLine(t){let e=t[0],i=t[1];if(!this.offscreen([e,i])){let t=[0,0,1];this.data.indices.push(this.data.vertex(e,t)),this.data.indices.push(this.data.vertex(i,t)),this.append()}}process(t){if(2==t.length)return this.processLine(t);let e=t[0],i=t[1],a=t[2],r=t[3],n=this.normal(bezier!
 P(e,i),bezierPP(e,i,a)),s=this.normal(bezierP(a,r),bezierPP(r,a,i)),o=this.data.vertex(e,n),h=this.data.vertex(r,s);this.Render(t,o,h),this.data.indices.length>0&&this.append()}append(){material1Data.append(this.data)}Render(t,e,i){let a=t[0],r=t[1],n=t[2],s=t[3];if(Straightness(a,r,n,s)<this.res2)this.offscreen([a,s])||(this.data.indices.push(e),this.data.indices.push(i));else{if(this.offscreen(t))return;let o=[.5*(a[0]+r[0]),.5*(a[1]+r[1]),.5*(a[2]+r[2])],h=[.5*(r[0]+n[0]),.5*(r[1]+n[1]),.5*(r[2]+n[2])],l=[.5*(n[0]+s[0]),.5*(n[1]+s[1]),.5*(n[2]+s[2])],d=[.5*(o[0]+h[0]),.5*(o[1]+h[1]),.5*(o[2]+h[2])],c=[.5*(h[0]+l[0]),.5*(h[1]+l[1]),.5*(h[2]+l[2])],m=[.5*(d[0]+c[0]),.5*(d[1]+c[1]),.5*(d[2]+c[2])],f=[a,o,d,m],u=[m,c,l,s],p=this.normal(bezierPh(a,r,n,s),bezierPPh(a,r,n,s)),v=this.data.vertex(m,p);this.Render(f,e,v),this.Render(u,v,i)}}normal(t,e){let i=dot(t,t),a=dot(t,e);return[i*e[0]-a*t[0],i*e[1]-a*t[1],i*e[2]-a*t[2]]}}class Pixel extends Geometry{constructor(t,e,i,a,r){super(),this.controlpoint=t,this.width=e,this.CenterIndex=0,this.MaterialIndex=i,this.Min=a,this.Max=r}setMaterialIndex(){this.setMaterial(material0Data,drawMaterial0)}process(t){this.data.indices.push(this.data.vertex0(this.controlpoint,this.width)),this.append()}append(){material0Data.append(this.data)}}class Triangles extends Geometry{constructor(t,e,i){super(),this.CenterIndex=0,this.MaterialIndex=t,this.Min=e,this.Max=i,this.Positions=Positions,this.Normals=Normals,this.Colors=Colors,this.Indices=Indices,Positions=[],Normals=[],Colors=[],Indices=[],this.transparent=Materials[t].diffuse[3]<1}setMaterialIndex(){this.transparent?this.setMaterial(transparentData,drawTransparent):this.setMaterial(triangleData,drawTriangle)}process(t){materialIndex=this.Colors.length>0?-1-materialIndex:1+materialIndex;for(let t=0,e=this.Indices.length;t<e;++t){let e=this.Indices[t],i=e[0],a=this.Positions[i[0]],r=this.Positions[i[1]],n=this.Positions[i[2]];if(!this.offscreen([a,r,n])){let t=e.length>1?e[1]:i;if(t&&0!=t.length||(t=i),this.Colors.length>0){let s=e!
 .length>2?e[2]:i;s&&0!=s.length||(s=i);let o=this.Colors[s[0]],h=this.Colors[s[1]],l=this.Colors[s[2]];this.transparent|=o[3]+h[3]+l[3]<765,0==wireframe?(this.data.iVertex(i[0],a,this.Normals[t[0]],o),this.data.iVertex(i[1],r,this.Normals[t[1]],h),this.data.iVertex(i[2],n,this.Normals[t[2]],l)):(this.data.iVertex(i[0],a,this.Normals[t[0]],o),this.data.iVertex(i[1],r,this.Normals[t[1]],h),this.data.iVertex(i[1],r,this.Normals[t[1]],h),this.data.iVertex(i[2],n,this.Normals[t[2]],l),this.data.iVertex(i[2],n,this.Normals[t[2]],l),this.data.iVertex(i[0],a,this.Normals[t[0]],o))}else 0==wireframe?(this.data.iVertex(i[0],a,this.Normals[t[0]]),this.data.iVertex(i[1],r,this.Normals[t[1]]),this.data.iVertex(i[2],n,this.Normals[t[2]])):(this.data.iVertex(i[0],a,this.Normals[t[0]]),this.data.iVertex(i[1],r,this.Normals[t[1]]),this.data.iVertex(i[1],r,this.Normals[t[1]]),this.data.iVertex(i[2],n,this.Normals[t[2]]),this.data.iVertex(i[2],n,this.Normals[t[2]]),this.data.iVertex(i[0],a,this.Normals[t[0]]))}}this.data.nvertices=this.Positions.length,this.data.indices.length>0&&this.append()}append(){this.transparent?transparentData.append(this.data):triangleData.append(this.data)}}function home(){mat4.identity(rotMat),initProjection(),setProjection(),remesh=!0,draw()}let positionAttribute=0,normalAttribute=1,materialAttribute=2,colorAttribute=3,widthAttribute=4;function initShader(t=[]){let e=getShader(gl,vertex,gl.VERTEX_SHADER,t),i=getShader(gl,fragment,gl.FRAGMENT_SHADER,t),a=gl.createProgram();return gl.attachShader(a,e),gl.attachShader(a,i),gl.bindAttribLocation(a,positionAttribute,"position"),gl.bindAttribLocation(a,normalAttribute,"normal"),gl.bindAttribLocation(a,materialAttribute,"materialIndex"),gl.bindAttribLocation(a,colorAttribute,"color"),gl.bindAttribLocation(a,widthAttribute,"width"),gl.linkProgram(a),gl.getProgramParameter(a,gl.LINK_STATUS)||alert("Could not initialize shaders"),a}class Split3{constructor(t,e,i,a){this.m0=[.5*(t[0]+e[0]),.5*(t[1]+e[1]),.5*(t[2]+e[2])];let r=.5*(e[0]+i[0]),n=.5*(e[1]+i[1]),s=.5*!
 (e[2]+i[2]);this.m2=[.5*(i[0]+a[0]),.5*(i[1]+a[1]),.5*(i[2]+a[2])],this.m3=[.5*(this.m0[0]+r),.5*(this.m0[1]+n),.5*(this.m0[2]+s)],this.m4=[.5*(r+this.m2[0]),.5*(n+this.m2[1]),.5*(s+this.m2[2])],this.m5=[.5*(this.m3[0]+this.m4[0]),.5*(this.m3[1]+this.m4[1]),.5*(this.m3[2]+this.m4[2])]}}function unit(t){let e=1/(Math.sqrt(t[0]*t[0]+t[1]*t[1]+t[2]*t[2])||1);return[t[0]*e,t[1]*e,t[2]*e]}function abs2(t){return t[0]*t[0]+t[1]*t[1]+t[2]*t[2]}function dot(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}function cross(t,e){return[t[1]*e[2]-t[2]*e[1],t[2]*e[0]-t[0]*e[2],t[0]*e[1]-t[1]*e[0]]}function bezierP(t,e){return[e[0]-t[0],e[1]-t[1],e[2]-t[2]]}function bezierPP(t,e,i){return[3*(t[0]+i[0])-6*e[0],3*(t[1]+i[1])-6*e[1],3*(t[2]+i[2])-6*e[2]]}function bezierPPP(t,e,i,a){return[a[0]-t[0]+3*(e[0]-i[0]),a[1]-t[1]+3*(e[1]-i[1]),a[2]-t[2]+3*(e[2]-i[2])]}function bezierPh(t,e,i,a){return[i[0]+a[0]-t[0]-e[0],i[1]+a[1]-t[1]-e[1],i[2]+a[2]-t[2]-e[2]]}function bezierPPh(t,e,i,a){return[3*t[0]-5*e[0]+i[0]+a[0],3*t[1]-5*e[1]+i[1]+a[1],3*t[2]-5*e[2]+i[2]+a[2]]}function Straightness(t,e,i,a){let r=[third*(a[0]-t[0]),third*(a[1]-t[1]),third*(a[2]-t[2])];return Math.max(abs2([e[0]-r[0]-t[0],e[1]-r[1]-t[1],e[2]-r[2]-t[2]]),abs2([a[0]-r[0]-i[0],a[1]-r[1]-i[1],a[2]-r[2]-i[2]]))}function Flatness(t,e,i,a){let r=[e[0]-t[0],e[1]-t[1],e[2]-t[2]],n=[a[0]-i[0],a[1]-i[1],a[2]-i[2]];return Math.max(abs2(cross(r,unit(n))),abs2(cross(n,unit(r))))/9}function corners(t,e){return[t,[t[0],t[1],e[2]],[t[0],e[1],t[2]],[t[0],e[1],e[2]],[e[0],t[1],t[2]],[e[0],t[1],e[2]],[e[0],e[1],t[2]],e]}function minbound(t){return[Math.min(t[0][0],t[1][0],t[2][0],t[3][0],t[4][0],t[5][0],t[6][0],t[7][0]),Math.min(t[0][1],t[1][1],t[2][1],t[3][1],t[4][1],t[5][1],t[6][1],t[7][1]),Math.min(t[0][2],t[1][2],t[2][2],t[3][2],t[4][2],t[5][2],t[6][2],t[7][2])]}function maxbound(t){return[Math.max(t[0][0],t[1][0],t[2][0],t[3][0],t[4][0],t[5][0],t[6][0],t[7][0]),Math.max(t[0][1],t[1][1],t[2][1],t[3][1],t[4][1],t[5][1],t[6][1],t[7][1]),Math.max(t[0][2],t[1][2],t[2][2],t[3][2],t[4][2],t[5]!
 [2],t[6][2],t[7][2])]}function COBTarget(t,e){mat4.fromTranslation(T,[center.x,center.y,center.z]),mat4.invert(cjMatInv,T),mat4.multiply(t,e,cjMatInv),mat4.multiply(t,T,t)}function setUniforms(t,e){let i=e==pixelShader;gl.useProgram(e),gl.enableVertexAttribArray(positionAttribute),i&&gl.enableVertexAttribArray(widthAttribute);let a=!i&&Lights.length>0;if(a&&gl.enableVertexAttribArray(normalAttribute),gl.enableVertexAttribArray(materialAttribute),e.projViewMatUniform=gl.getUniformLocation(e,"projViewMat"),e.viewMatUniform=gl.getUniformLocation(e,"viewMat"),e.normMatUniform=gl.getUniformLocation(e,"normMat"),e!=colorShader&&e!=transparentShader||gl.enableVertexAttribArray(colorAttribute),a)for(let t=0;t<Lights.length;++t)Lights[t].setUniform(e,t);for(let i=0;i<t.materials.length;++i)t.materials[i].setUniform(e,i);gl.uniformMatrix4fv(e.projViewMatUniform,!1,projViewMat),gl.uniformMatrix4fv(e.viewMatUniform,!1,viewMat),gl.uniformMatrix3fv(e.normMatUniform,!1,normMat)}function handleMouseDown(t){zoomEnabled||enableZoom(),mouseDownOrTouchActive=!0,lastMouseX=t.clientX,lastMouseY=t.clientY}let pinchStart,touchStartTime,pinch=!1;function pinchDistance(t){return Math.hypot(t[0].pageX-t[1].pageX,t[0].pageY-t[1].pageY)}function handleTouchStart(t){t.preventDefault(),zoomEnabled||enableZoom();let e=t.targetTouches;swipe=rotate=pinch=!1,zooming||(1!=e.length||mouseDownOrTouchActive||(touchStartTime=(new Date).getTime(),touchId=e[0].identifier,lastMouseX=e[0].pageX,lastMouseY=e[0].pageY),2!=e.length||mouseDownOrTouchActive||(touchId=e[0].identifier,pinchStart=pinchDistance(e),pinch=!0))}function handleMouseUpOrTouchEnd(t){mouseDownOrTouchActive=!1}function rotateScene(t,e,i,a,r){if(t==i&&e==a)return;let[n,s]=arcball([t,-e],[i,-a]);mat4.fromRotation(T,2*r*ArcballFactor*n/lastzoom,s),mat4.multiply(rotMat,T,rotMat)}function shiftScene(t,e,i,a){let r=1/lastzoom;shift.x+=(i-t)*r*halfCanvasWidth,shift.y-=(a-e)*r*halfCanvasHeight}function panScene(t,e,i,a){orthographic?shiftScene(t,e,i,a):(center.x+=(i-t)*(viewParam.xmax-viewParam.x!
 min),center.y-=(a-e)*(viewParam.ymax-viewParam.ymin))}function updateViewMatrix(){COBTarget(viewMat,rotMat),mat4.translate(viewMat,viewMat,[center.x,center.y,0]),mat3.fromMat4(viewMat3,viewMat),mat3.invert(normMat,viewMat3),mat4.multiply(projViewMat,projMat,viewMat)}function capzoom(){let t=Math.sqrt(Number.MAX_VALUE),e=1/t;Zoom<=e&&(Zoom=e),Zoom>=t&&(Zoom=t),Zoom!=lastzoom&&(remesh=!0),lastzoom=Zoom}function zoomImage(t){let e=zoomStep*halfCanvasHeight*t;const i=Math.log(.1*Number.MAX_VALUE)/Math.log(zoomFactor);Math.abs(e)<i&&(Zoom*=zoomFactor**e,capzoom())}function normMouse(t){let e=t[0],i=t[1],a=Math.hypot(e,i);return a>1&&(denom=1/a,e*=denom,i*=denom),[e,i,Math.sqrt(Math.max(1-i*i-e*e,0))]}function arcball(t,e){let i=normMouse(t),a=normMouse(e),r=dot(i,a);return r>1?r=1:r<-1&&(r=-1),[Math.acos(r),unit(cross(i,a))]}function zoomScene(t,e,i,a){zoomImage(e-a)}const DRAGMODE_ROTATE=1,DRAGMODE_SHIFT=2,DRAGMODE_ZOOM=3,DRAGMODE_PAN=4;function processDrag(t,e,i,a=1){let r;switch(i){case DRAGMODE_ROTATE:r=rotateScene;break;case DRAGMODE_SHIFT:r=shiftScene;break;case DRAGMODE_ZOOM:r=zoomScene;break;case DRAGMODE_PAN:r=panScene;break;default:r=((t,e,i,a)=>{})}r((lastMouseX-halfCanvasWidth)/halfCanvasWidth,(lastMouseY-halfCanvasHeight)/halfCanvasHeight,(t-halfCanvasWidth)/halfCanvasWidth,(e-halfCanvasHeight)/halfCanvasHeight,a),lastMouseX=t,lastMouseY=e,setProjection(),draw()}let zoomEnabled=0;function enableZoom(){zoomEnabled=1,canvas.addEventListener("wheel",handleMouseWheel,!1)}function disableZoom(){zoomEnabled=0,canvas.removeEventListener("wheel",handleMouseWheel,!1)}function handleKey(t){if(zoomEnabled||enableZoom(),embedded&&zoomEnabled&&27==t.keyCode)return void disableZoom();let e=[];switch(t.key){case"x":e=[1,0,0];break;case"y":e=[0,1,0];break;case"z":e=[0,0,1];break;case"h":home();break;case"m":3==++wireframe&&(wireframe=0),2!=wireframe&&(embedded||deleteShaders(),initShaders()),remesh=!0,draw();break;case"+":case"=":case">":expand();break;case"-":case"_":case"<":shrink()}e.length>0&&(mat4.rotate(rotMat,rot!
 Mat,.1,e),updateViewMatrix(),draw())}function handleMouseWheel(t){t.preventDefault(),t.deltaY<0?Zoom*=zoomFactor:Zoom/=zoomFactor,capzoom(),setProjection(),draw()}function handleMouseMove(t){if(!mouseDownOrTouchActive)return;let e;processDrag(t.clientX,t.clientY,e=t.getModifierState("Control")?DRAGMODE_SHIFT:t.getModifierState("Shift")?DRAGMODE_ZOOM:t.getModifierState("Alt")?DRAGMODE_PAN:DRAGMODE_ROTATE)}let zooming=!1,swipe=!1,rotate=!1;function handleTouchMove(t){if(t.preventDefault(),zooming)return;let e=t.targetTouches;if(!pinch&&1==e.length&&touchId==e[0].identifier){let t=e[0].pageX,i=e[0].pageY,a=t-lastMouseX,r=i-lastMouseY,n=a*a+r*r<=shiftHoldDistance*shiftHoldDistance;if(n&&!swipe&&!rotate&&(new Date).getTime()-touchStartTime>shiftWaitTime&&(navigator.vibrate&&window.navigator.vibrate(vibrateTime),swipe=!0),swipe)processDrag(t,i,DRAGMODE_SHIFT);else if(!n){rotate=!0,processDrag(e[0].pageX,e[0].pageY,DRAGMODE_ROTATE,.5)}}if(pinch&&!swipe&&2==e.length&&touchId==e[0].identifier){let t=pinchDistance(e),i=t-pinchStart;zooming=!0,(i*=zoomPinchFactor)>zoomPinchCap&&(i=zoomPinchCap),i<-zoomPinchCap&&(i=-zoomPinchCap),zoomImage(i/size2),pinchStart=t,swipe=rotate=zooming=!1,setProjection(),draw()}}let pixelShader,materialShader,colorShader,transparentShader,zbuffer=[];function transformVertices(t){let e=viewMat[2],i=viewMat[6],a=viewMat[10];zbuffer.length=t.length;for(let r=0;r<t.length;++r){let n=6*r;zbuffer[r]=e*t[n]+i*t[n+1]+a*t[n+2]}}function drawMaterial0(){drawBuffer(material0Data,pixelShader),material0Data.clear()}function drawMaterial1(){drawBuffer(material1Data,materialShader),material1Data.clear()}function drawMaterial(){drawBuffer(materialData,materialShader),materialData.clear()}function drawColor(){drawBuffer(colorData,colorShader),colorData.clear()}function drawTriangle(){drawBuffer(triangleData,transparentShader),triangleData.clear()}function drawTransparent(){let t=transparentData.indices;if(wireframe>0)return drawBuffer(transparentData,transparentShader,t),void transparentData.clear();if(t.length!
 >0){transformVertices(transparentData.vertices);let e=t.length/3,i=Array(e).fill().map((t,e)=>e);i.sort(function(e,i){let a=3*e;Ia=t[a],Ib=t[a+1],Ic=t[a+2];let r=3*i;return IA=t[r],IB=t[r+1],IC=t[r+2],zbuffer[Ia]+zbuffer[Ib]+zbuffer[Ic]<zbuffer[IA]+zbuffer[IB]+zbuffer[IC]?-1:1});let a=Array(t.length);for(let r=0;r<e;++r){let e=3*i[r];a[3*r]=t[e],a[3*r+1]=t[e+1],a[3*r+2]=t[e+2]}gl.depthMask(!1),drawBuffer(transparentData,transparentShader,a),gl.depthMask(!0)}transparentData.clear()}function drawBuffers(){drawMaterial0(),drawMaterial1(),drawMaterial(),drawColor(),drawTriangle(),drawTransparent()}function draw(){embedded&&(offscreen.width=canvas.width,offscreen.height=canvas.height,setViewport()),gl.clearColor(Background[0],Background[1],Background[2],Background[3]),gl.clear(gl.COLOR_BUFFER_BIT|gl.DEPTH_BUFFER_BIT);for(let t=0;t<P.length;++t)P[t].render();drawBuffers(),embedded&&(context.clearRect(0,0,canvas.width,canvas.height),context.drawImage(offscreen,0,0)),0==wireframe&&(remesh=!1)}function setDimensions(t,e,i,a){let r=t/e,n=1/lastzoom,s=(i/t+viewportshift[0])*lastzoom,o=(a/e+viewportshift[1])*lastzoom;if(orthographic){let t=B[0]-b[0],e=B[1]-b[1];if(t<e*r){let t=.5*e*r*n,i=2*t*s,a=e*n*o;viewParam.xmin=-t-i,viewParam.xmax=t-i,viewParam.ymin=b[1]*n-a,viewParam.ymax=B[1]*n-a}else{let e=.5*t/(r*Zoom),i=t*n*s,a=2*e*o;viewParam.xmin=b[0]*n-i,viewParam.xmax=B[0]*n-i,viewParam.ymin=-e-a,viewParam.ymax=e-a}}else{let t=H*n,e=t*r,i=2*e*s,a=2*t*o;viewParam.xmin=-e-i,viewParam.xmax=e-i,viewParam.ymin=-t-a,viewParam.ymax=t-a}}function setProjection(){setDimensions(canvasWidth,canvasHeight,shift.x,shift.y),(orthographic?mat4.ortho:mat4.frustum)(projMat,viewParam.xmin,viewParam.xmax,viewParam.ymin,viewParam.ymax,-viewParam.zmax,-viewParam.zmin),updateViewMatrix()}function initProjection(){H=-Math.tan(.5*angle)*B[2],center.x=center.y=0,center.z=.5*(b[2]+B[2]),lastzoom=Zoom=Zoom0,viewParam.zmin=b[2],viewParam.zmax=B[2],shift.x=shift.y=0}function setViewport(){gl.viewportWidth=canvasWidth,gl.viewportHeight=canvasHeight,gl.viewp!
 ort(0,0,gl.viewportWidth,gl.viewportHeight),gl.scissor(0,0,gl.viewportWidth,gl.viewportHeight)}function setCanvas(){canvas.width=canvasWidth,canvas.height=canvasHeight,embedded&&(offscreen.width=canvasWidth,offscreen.height=canvasHeight),size2=Math.hypot(canvasWidth,canvasHeight),halfCanvasWidth=.5*canvasWidth,halfCanvasHeight=.5*canvasHeight}function setsize(t,e){t>maxViewportWidth&&(t=maxViewportWidth),e>maxViewportHeight&&(e=maxViewportHeight),shift.x*=t/canvasWidth,shift.y*=e/canvasHeight,canvasWidth=t,canvasHeight=e,setCanvas(),setViewport(),home()}function expand(){setsize(canvasWidth*resizeStep+.5,canvasHeight*resizeStep+.5)}function shrink(){setsize(Math.max(canvasWidth/resizeStep+.5,1),Math.max(canvasHeight/resizeStep+.5,1))}function webGLInit(){if(canvas=document.getElementById("Asymptote"),embedded=window.top.document!=document,initGL(),absolute&&!embedded)canvasWidth*=window.devicePixelRatio,canvasHeight*=window.devicePixelRatio;else{canvas.width=Math.max(window.innerWidth-windowTrim,windowTrim),canvas.height=Math.max(window.innerHeight-windowTrim,windowTrim);let t=canvasWidth/canvasHeight;canvas.width>canvas.height*t?canvas.width=Math.min(canvas.height*t,canvas.width):canvas.height=Math.min(canvas.width/t,canvas.height),canvas.width>0&&(canvasWidth=canvas.width),canvas.height>0&&(canvasHeight=canvas.height)}setCanvas(),ArcballFactor=1+8*Math.hypot(viewportmargin[0],viewportmargin[1])/size2,viewportshift[0]/=Zoom0,viewportshift[1]/=Zoom0,gl.enable(gl.BLEND),gl.blendFunc(gl.SRC_ALPHA,gl.ONE_MINUS_SRC_ALPHA),gl.enable(gl.DEPTH_TEST),gl.enable(gl.SCISSOR_TEST),setViewport(),home(),canvas.onmousedown=handleMouseDown,document.onmouseup=handleMouseUpOrTouchEnd,document.onmousemove=handleMouseMove,canvas.onkeydown=handleKey,embedded||enableZoom(),canvas.addEventListener("touchstart",handleTouchStart,!1),canvas.addEventListener("touchend",handleMouseUpOrTouchEnd,!1),canvas.addEventListener("touchcancel",handleMouseUpOrTouchEnd,!1),canvas.addEventListener("touchleave",handleMouseUpOrTouchEnd,!1),canvas.addEve!
 ntListener("touchmove",handleTouchMove,!1),document.addEventListener("keydown",handleKey,!1)}let listen=!1;class Align{constructor(t,e){if(this.center=t,e){let t=e[0],i=e[1];this.ct=Math.cos(t),this.st=Math.sin(t),this.cp=Math.cos(i),this.sp=Math.sin(i)}}T0(t){return[t[0]+this.center[0],t[1]+this.center[1],t[2]+this.center[2]]}T(t){let e=t[0],i=t[1],a=t[2],r=e*this.ct+a*this.st;return[r*this.cp-i*this.sp+this.center[0],r*this.sp+i*this.cp+this.center[1],-e*this.st+a*this.ct+this.center[2]]}}function Tcorners(t,e,i){let a=[t(e),t([e[0],e[1],i[2]]),t([e[0],i[1],e[2]]),t([e[0],i[1],i[2]]),t([i[0],e[1],e[2]]),t([i[0],e[1],i[2]]),t([i[0],i[1],e[2]]),t(i)];return[minbound(a),maxbound(a)]}function sphere(t,e,i,r,n){let s,o,h,l,d,c,m=.524670512339254,f=.595936986722291,u=.954967051233925,p=.0820155480083437,v=.996685028842544,g=.0549670512339254,w=.998880711874577,x=.0405017186586849,M=[[[1,0,0],[1,0,m],[f,0,u],[p,0,v],[1,a,0],[1,a,m],[f,a*f,u],[p,a*p,v],[a,1,0],[a,1,m],[a*f,f,u],[a*p,p,v],[0,1,0],[0,1,m],[0,f,u],[0,p,v]],[[p,0,v],[p,a*p,v],[g,0,w],[a*p,p,v],[x,x,1],[.05*a,0,1],[0,p,v],[0,g,w],[0,.05*a,1],[0,0,1]]],b=new Align(t,n);function A(t){let e=Array(t.length);for(let i=0;i<t.length;++i){let a=t[i];e[i]=d([s*a[0],o*a[1],h*a[2]])}return e}n?(l=1,c=0,d=b.T.bind(b)):(l=-1,c=-e,d=b.T0.bind(b));let S=Tcorners(d,[-e,-e,c],[e,e,e]),R=S[0],T=S[1];for(let t=-1;t<=1;t+=2){s=t*e;for(let t=-1;t<=1;t+=2){o=t*e;for(let t=l;t<=1;t+=2){h=t*e;for(let t=0;t<2;++t)P.push(new BezierPatch(A(M[t]),i,r,R,T))}}}}let a=4/3*(Math.sqrt(2)-1);function disk(t,e,i,r,n){let s=1-2*a/3,o=[[1,0,0],[1,-a,0],[a,-1,0],[0,-1,0],[1,a,0],[s,0,0],[0,-s,0],[-a,-1,0],[a,1,0],[0,s,0],[-s,0,0],[-1,-a,0],[0,1,0],[-a,1,0],[-1,a,0],[-1,0,0]],h=new Align(t,n);let l=Tcorners(h.T.bind(h),[-e,-e,0],[e,e,0]);P.push(new BezierPatch(function(t){let i=Array(t.length);for(let a=0;a<t.length;++a){let r=t[a];i[a]=h.T([e*r[0],e*r[1],0])}return i}(o),i,r,l[0],l[1]))}function cylinder(t,e,i,r,n,s,o){let h,l,d=[[1,0,0],[1,0,1/3],[1,0,2/3],[1,0,1],[1,a,0],[1,a,1/3],[1,a,2/3],!
 [1,a,1],[a,1,0],[a,1,1/3],[a,1,2/3],[a,1,1],[0,1,0],[0,1,1/3],[0,1,2/3],[0,1,1]],c=new Align(t,s);function m(t){let e=Array(t.length);for(let a=0;a<t.length;++a){let r=t[a];e[a]=c.T([h*r[0],l*r[1],i*r[2]])}return e}let f=Tcorners(c.T.bind(c),[-e,-e,0],[e,e,i]),u=f[0],p=f[1];for(let t=-1;t<=1;t+=2){h=t*e;for(let t=-1;t<=1;t+=2)l=t*e,P.push(new BezierPatch(m(d),r,n,u,p))}if(o){let e=c.T([0,0,i]);P.push(new BezierCurve([t,e],r,n,t,e))}}function rmf(t,e,i,a,r){class n{constructor(t,e,i){this.p=t,this.r=e,this.t=i,this.s=cross(i,e)}}let s=Number.EPSILON*Math.max(abs2(t),abs2(e),abs2(i),abs2(a));function o(r){if(1==r){let r=[a[0]-i[0],a[1]-i[1],a[2]-i[2]];return abs2(r)>s?unit(r):abs2(r=[2*i[0]-e[0]-a[0],2*i[1]-e[1]-a[1],2*i[2]-e[2]-a[2]])>s?unit(r):[a[0]-t[0]+3*(e[0]-i[0]),a[1]-t[1]+3*(e[1]-i[1]),a[2]-t[2]+3*(e[2]-i[2])]}let n=[a[0]-t[0]+3*(e[0]-i[0]),a[1]-t[1]+3*(e[1]-i[1]),a[2]-t[2]+3*(e[2]-i[2])],o=[2*(t[0]+i[0])-4*e[0],2*(t[1]+i[1])-4*e[1],2*(t[2]+i[2])-4*e[2]],h=[e[0]-t[0],e[1]-t[1],e[2]-t[2]],l=r*r,d=[n[0]*l+o[0]*r+h[0],n[1]*l+o[1]*r+h[1],n[2]*l+o[2]*r+h[2]];return abs2(d)>s?unit(d):abs2(d=[n[0]*(l=2*r)+o[0],n[1]*l+o[1],n[2]*l+o[2]])>s?unit(d):unit(n)}let h=Array(r.length),l=[e[0]-t[0],e[1]-t[1],e[2]-t[2]];abs2(l)<s&&abs2(l=[t[0]-2*e[0]+i[0],t[1]-2*e[1]+i[1],t[2]-2*e[2]+i[2]])<s&&(l=[a[0]-t[0]+3*(e[0]-i[0]),a[1]-t[1]+3*(e[1]-i[1]),a[2]-t[2]+3*(e[2]-i[2])]);let d=function(t){let e=cross(t,[0,1,0]),i=Number.EPSILON*abs2(t);return abs2(e)>i?unit(e):abs2(e=cross(t,[0,0,1]))>i?unit(e):[1,0,0]}(l=unit(l));h[0]=new n(t,d,l);for(let s=1;s<r.length;++s){let l=h[s-1],d=r[s],c=1-d,m=c*c,f=m*c,u=3*d;m*=u,c*=u*d;let p=d*d*d,v=[f*t[0]+m*e[0]+c*i[0]+p*a[0],f*t[1]+m*e[1]+c*i[1]+p*a[1],f*t[2]+m*e[2]+c*i[2]+p*a[2]],g=[v[0]-l.p[0],v[1]-l.p[1],v[2]-l.p[2]];if(0!=g[0]||0!=g[1]||0!=g[2]){let t=l.r,e=unit(g),i=l.t,a=dot(e,i),r=[i[0]-2*a*e[0],i[1]-2*a*e[1],i[2]-2*a*e[2]];i=o(d);let c=2*dot(e,t),m=[t[0]-c*e[0],t[1]-c*e[1],t[2]-c*e[2]],f=unit([i[0]-r[0],i[1]-r[1],i[2]-r[2]]),u=2*dot(f,m);m=[m[0]-u*f[0],m[1]-u*f[1],m[2]-u*f[2]],h[s]=new !
 n(v,unit(m),unit(i))}else h[s]=h[s-1]}return h}function tube(t,e,i,r,n,s,o){let h=rmf(t[0],t[1],t[2],t[3],[0,1/3,2/3,1]),l=a*e,d=[[e,0],[e,l],[l,e],[0,e]];function c(e,a,o,l){let c=Array(16);for(let i=0;i<4;++i){let r=h[i],n=r.r[0],s=r.s[0],m=n*e+s*a,f=n*o+s*l,u=(n=r.r[1])*e+(s=r.s[1])*a,p=n*o+s*l,v=(n=r.r[2])*e+(s=r.s[2])*a,g=n*o+s*l,w=t[i],x=w[0];w1=w[1],w2=w[2];for(let t=0;t<4;++t){let e=d[t],a=e[0],r=e[1];c[4*i+t]=[m*a+f*r+x,u*a+p*r+w1,v*a+g*r+w2]}}P.push(new BezierPatch(c,i,r,n,s))}c(1,0,0,1),c(0,-1,1,0),c(-1,0,0,-1),c(0,1,-1,0),o&&P.push(new BezierCurve(t,i,r,n,s))}function webGLStart(){0==window.innerWidth||0==window.innerHeight?listen||(listen=!0,window.addEventListener("resize",webGLStart,!1)):(listen&&(window.removeEventListener("resize",webGLStart,!1),listen=!1),webGLInit())}
+let vertex="\nattribute vec3 position;\n#ifdef WIDTH\nattribute float width;\n#endif\n#ifdef NORMAL\nattribute vec3 normal;\n#endif\nattribute float materialIndex;\n#ifdef COLOR\nattribute vec4 color;\n#endif\n\nuniform mat3 normMat;\nuniform mat4 viewMat;\nuniform mat4 projViewMat;\n\n#ifdef NORMAL\n#ifndef ORTHOGRAPHIC\nvarying vec3 ViewPosition;\n#endif\nvarying vec3 Normal;\n#endif\nvarying vec4 diffuse;\nvarying vec3 specular;\nvarying float roughness,metallic,fresnel0;\nvarying vec4 emissive;\n\nstruct Material {\n  vec4 diffuse,emissive,specular;\n  vec4 parameters;\n};\n\nuniform Material Materials[Nmaterials];\n\nvoid main(void)\n{\n  vec4 v=vec4(position,1.0);\n  gl_Position=projViewMat*v;\n#ifdef NORMAL\n#ifndef ORTHOGRAPHIC\n  ViewPosition=(viewMat*v).xyz;\n#endif      \n  Normal=normalize(normal*normMat);\n        \n  Material m;\n#ifdef TRANSPARENT\n  m=Materials[int(abs(materialIndex))-1];\n  emissive=m.emissive;\n  if(materialIndex >= 0.0) {\n    diffuse=m.diffuse;\n  } else {\n    diffuse=color;\n#if nlights == 0\n    emissive += color;\n#endif\n  }\n#else\n  m=Materials[int(materialIndex)];\n  emissive=m.emissive;\n#ifdef COLOR\n  diffuse=color;\n#if nlights == 0\n    emissive += color;\n#endif\n#else\n  diffuse=m.diffuse;\n#endif\n#endif\n  specular=m.specular.rgb;\n  vec4 parameters=m.parameters;\n  roughness=1.0-parameters[0];\n  metallic=parameters[1];\n  fresnel0=parameters[2];\n#else\n  emissive=Materials[int(materialIndex)].emissive;\n#endif\n#ifdef WIDTH\n  gl_PointSize=width;\n#endif\n}\n",fragment="\n#ifdef NORMAL\n#ifndef ORTHOGRAPHIC\nvarying vec3 ViewPosition;\n#endif\nvarying vec3 Normal;\nvarying vec4 diffuse;\nvarying vec3 specular;\nvarying float roughness,metallic,fresnel0;\n\nfloat Roughness2;\nvec3 normal;\n\nstruct Light {\n  vec3 direction;\n  vec3 color;\n};\n\nuniform Light Lights[Nlights];\n\nfloat NDF_TRG(vec3 h)\n{\n  float ndoth=max(dot(normal,h),0.0);\n  float alpha2=Roughness2*Roughness2;\n  float denom=ndoth*ndoth*(alpha2-1.0)+1.0;\n  return denom != 0.0 !
 ? alpha2/(denom*denom) : 0.0;\n}\n    \nfloat GGX_Geom(vec3 v)\n{\n  float ndotv=max(dot(v,normal),0.0);\n  float ap=1.0+Roughness2;\n  float k=0.125*ap*ap;\n  return ndotv/((ndotv*(1.0-k))+k);\n}\n    \nfloat Geom(vec3 v, vec3 l)\n{\n  return GGX_Geom(v)*GGX_Geom(l);\n}\n    \nfloat Fresnel(vec3 h, vec3 v, float fresnel0)\n{\n  float a=1.0-max(dot(h,v),0.0);\n  float b=a*a;\n  return fresnel0+(1.0-fresnel0)*b*b*a;\n}\n    \n// physical based shading using UE4 model.\nvec3 BRDF(vec3 viewDirection, vec3 lightDirection)\n{\n  vec3 lambertian=diffuse.rgb;\n  vec3 h=normalize(lightDirection+viewDirection);\n      \n  float omegain=max(dot(viewDirection,normal),0.0);\n  float omegali=max(dot(lightDirection,normal),0.0);\n      \n  float D=NDF_TRG(h);\n  float G=Geom(viewDirection,lightDirection);\n  float F=Fresnel(h,viewDirection,fresnel0);\n      \n  float denom=4.0*omegain*omegali;\n  float rawReflectance=denom > 0.0 ? (D*G)/denom : 0.0;\n      \n  vec3 dielectric=mix(lambertian,rawReflectance*specular,F);\n  vec3 metal=rawReflectance*diffuse.rgb;\n      \n  return mix(dielectric,metal,metallic);\n}\n#endif\nvarying vec4 emissive;\n    \nvoid main(void)\n{\n#if defined(NORMAL) && nlights > 0\n  normal=normalize(Normal);\n  normal=gl_FrontFacing ? normal : -normal;\n#ifdef ORTHOGRAPHIC\n  vec3 viewDir=vec3(0.0,0.0,1.0);\n#else\n  vec3 viewDir=-normalize(ViewPosition);\n#endif\n  Roughness2=roughness*roughness;\n  vec3 color=emissive.rgb;\n  for(int i=0; i < nlights; ++i) {\n    Light Li=Lights[i];\n    vec3 L=Li.direction;\n    float cosTheta=max(dot(normal,L),0.0);\n    vec3 radiance=cosTheta*Li.color;\n    color += BRDF(viewDir,L)*radiance;\n  }\n  gl_FragColor=vec4(color,diffuse.a);\n#else\n  gl_FragColor=emissive;\n#endif\n}\n";!function(t,e){if("object"==typeof exports&&"object"==typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var i=e();for(var a in i)("object"==typeof exports?exports:t)[a]=i[a]}}("undefined"!=typeof self?self:this,(function(){return function(t)!
 {var e={};function i(a){if(e[a])return e[a].exports;var r=e[a]={i:a,l:!1,exports:{}};return t[a].call(r.exports,r,r.exports,i),r.l=!0,r.exports}return i.m=t,i.c=e,i.d=function(t,e,a){i.o(t,e)||Object.defineProperty(t,e,{configurable:!1,enumerable:!0,get:a})},i.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return i.d(e,"a",e),e},i.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},i.p="",i(i.s=1)}([function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.setMatrixArrayType=function(t){e.ARRAY_TYPE=t},e.toRadian=function(t){return t*r},e.equals=function(t,e){return Math.abs(t-e)<=a*Math.max(1,Math.abs(t),Math.abs(e))};var a=e.EPSILON=1e-6;e.ARRAY_TYPE="undefined"!=typeof Float32Array?Float32Array:Array,e.RANDOM=Math.random;var r=Math.PI/180},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.mat4=e.mat3=void 0;var a=n(i(2)),r=n(i(3));function n(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e.default=t,e}e.mat3=a,e.mat4=r},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.create=function(){var t=new a.ARRAY_TYPE(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},e.fromMat4=function(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[4],t[4]=e[5],t[5]=e[6],t[6]=e[8],t[7]=e[9],t[8]=e[10],t},e.invert=function(t,e){var i=e[0],a=e[1],r=e[2],n=e[3],s=e[4],o=e[5],h=e[6],l=e[7],c=e[8],d=c*s-o*l,m=-c*n+o*h,f=l*n-s*h,u=i*d+a*m+r*f;if(!u)return null;return u=1/u,t[0]=d*u,t[1]=(-c*a+r*l)*u,t[2]=(o*a-r*s)*u,t[3]=m*u,t[4]=(c*i-r*h)*u,t[5]=(-o*i+r*n)*u,t[6]=f*u,t[7]=(-l*i+a*h)*u,t[8]=(s*i-a*n)*u,t};var a=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e.default=t,e}(i(0))},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.create=function(){var t=new a.ARRAY_TYPE(16);return t[0!
 ]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},e.identity=function(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},e.invert=function(t,e){var i=e[0],a=e[1],r=e[2],n=e[3],s=e[4],o=e[5],h=e[6],l=e[7],c=e[8],d=e[9],m=e[10],f=e[11],u=e[12],p=e[13],v=e[14],g=e[15],x=i*o-a*s,w=i*h-r*s,M=i*l-n*s,b=a*h-r*o,S=a*l-n*o,P=r*l-n*h,A=c*p-d*u,y=c*v-m*u,T=c*g-f*u,R=d*v-m*p,D=d*g-f*p,I=m*g-f*v,z=x*I-w*D+M*R+b*T-S*y+P*A;if(!z)return null;return z=1/z,t[0]=(o*I-h*D+l*R)*z,t[1]=(r*D-a*I-n*R)*z,t[2]=(p*P-v*S+g*b)*z,t[3]=(m*S-d*P-f*b)*z,t[4]=(h*T-s*I-l*y)*z,t[5]=(i*I-r*T+n*y)*z,t[6]=(v*M-u*P-g*w)*z,t[7]=(c*P-m*M+f*w)*z,t[8]=(s*D-o*T+l*A)*z,t[9]=(a*T-i*D-n*A)*z,t[10]=(u*S-p*M+g*x)*z,t[11]=(d*M-c*S-f*x)*z,t[12]=(o*y-s*R-h*A)*z,t[13]=(i*R-a*y+r*A)*z,t[14]=(p*w-u*b-v*x)*z,t[15]=(c*b-d*w+m*x)*z,t},e.multiply=r,e.translate=function(t,e,i){var a=i[0],r=i[1],n=i[2],s=void 0,o=void 0,h=void 0,l=void 0,c=void 0,d=void 0,m=void 0,f=void 0,u=void 0,p=void 0,v=void 0,g=void 0;e===t?(t[12]=e[0]*a+e[4]*r+e[8]*n+e[12],t[13]=e[1]*a+e[5]*r+e[9]*n+e[13],t[14]=e[2]*a+e[6]*r+e[10]*n+e[14],t[15]=e[3]*a+e[7]*r+e[11]*n+e[15]):(s=e[0],o=e[1],h=e[2],l=e[3],c=e[4],d=e[5],m=e[6],f=e[7],u=e[8],p=e[9],v=e[10],g=e[11],t[0]=s,t[1]=o,t[2]=h,t[3]=l,t[4]=c,t[5]=d,t[6]=m,t[7]=f,t[8]=u,t[9]=p,t[10]=v,t[11]=g,t[12]=s*a+c*r+u*n+e[12],t[13]=o*a+d*r+p*n+e[13],t[14]=h*a+m*r+v*n+e[14],t[15]=l*a+f*r+g*n+e[15]);return t},e.rotate=function(t,e,i,r){var n,s,o,h,l,c,d,m,f,u,p,v,g,x,w,M,b,S,P,A,y,T,R,D,I=r[0],z=r[1],L=r[2],N=Math.sqrt(I*I+z*z+L*L);if(Math.abs(N)<a.EPSILON)return null;I*=N=1/N,z*=N,L*=N,n=Math.sin(i),s=Math.cos(i),o=1-s,h=e[0],l=e[1],c=e[2],d=e[3],m=e[4],f=e[5],u=e[6],p=e[7],v=e[8],g=e[9],x=e[10],w=e[11],M=I*I*o+s,b=z*I*o+L*n,S=L*I*o-z*n,P=I*z*o-L*n,A=z*z*o+s,y=L*z*o+I*n,T=I*L*o+z*n,R=z*L*o-I*n,D=L*L*o+s,t[0]=h*M+m*b+v*S,t[1]=l*M+f*b+g*S,t[2]=c*M+u*b+x*S,t[3]=d*M+p*b+w*S,t[4]=h*P+m*A+v*y,t[5]=l*P+f*A+g*y,t[6]=c*P+u!
 *A+x*y,t[7]=d*P+p*A+w*y,t[8]=h*T+m*R+v*D,t[9]=l*T+f*R+g*D,t[10]=c*T+u*R+x*D,t[11]=d*T+p*R+w*D,e!==t&&(t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]);return t},e.fromTranslation=function(t,e){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=e[0],t[13]=e[1],t[14]=e[2],t[15]=1,t},e.fromRotation=function(t,e,i){var r,n,s,o=i[0],h=i[1],l=i[2],c=Math.sqrt(o*o+h*h+l*l);if(Math.abs(c)<a.EPSILON)return null;return o*=c=1/c,h*=c,l*=c,r=Math.sin(e),n=Math.cos(e),s=1-n,t[0]=o*o*s+n,t[1]=h*o*s+l*r,t[2]=l*o*s-h*r,t[3]=0,t[4]=o*h*s-l*r,t[5]=h*h*s+n,t[6]=l*h*s+o*r,t[7]=0,t[8]=o*l*s+h*r,t[9]=h*l*s-o*r,t[10]=l*l*s+n,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},e.frustum=function(t,e,i,a,r,n,s){var o=1/(i-e),h=1/(r-a),l=1/(n-s);return t[0]=2*n*o,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=2*n*h,t[6]=0,t[7]=0,t[8]=(i+e)*o,t[9]=(r+a)*h,t[10]=(s+n)*l,t[11]=-1,t[12]=0,t[13]=0,t[14]=s*n*2*l,t[15]=0,t},e.ortho=function(t,e,i,a,r,n,s){var o=1/(e-i),h=1/(a-r),l=1/(n-s);return t[0]=-2*o,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*h,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=2*l,t[11]=0,t[12]=(e+i)*o,t[13]=(r+a)*h,t[14]=(s+n)*l,t[15]=1,t};var a=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e.default=t,e}(i(0));function r(t,e,i){var a=e[0],r=e[1],n=e[2],s=e[3],o=e[4],h=e[5],l=e[6],c=e[7],d=e[8],m=e[9],f=e[10],u=e[11],p=e[12],v=e[13],g=e[14],x=e[15],w=i[0],M=i[1],b=i[2],S=i[3];return t[0]=w*a+M*o+b*d+S*p,t[1]=w*r+M*h+b*m+S*v,t[2]=w*n+M*l+b*f+S*g,t[3]=w*s+M*c+b*u+S*x,w=i[4],M=i[5],b=i[6],S=i[7],t[4]=w*a+M*o+b*d+S*p,t[5]=w*r+M*h+b*m+S*v,t[6]=w*n+M*l+b*f+S*g,t[7]=w*s+M*c+b*u+S*x,w=i[8],M=i[9],b=i[10],S=i[11],t[8]=w*a+M*o+b*d+S*p,t[9]=w*r+M*h+b*m+S*v,t[10]=w*n+M*l+b*f+S*g,t[11]=w*s+M*c+b*u+S*x,w=i[12],M=i[13],b=i[14],S=i[15],t[12]=w*a+M*o+b*d+S*p,t[13]=w*r+M*h+b*m+S*v,t[14]=w*n+M*l+b*f+S*g,t[15]=w*s+M*c+b*u+S*x,t}}])}));let canvasWidth,canvasHeight,canvasWidth0,canvasHeight0,b,B,angle,Zoom0,zoom0,viewportmargin,zoomFactor,zoomPinchFact!
 or,zoomPinchCap,zoomStep,shiftHoldDistance,shiftWaitTime,vibrateTime,embedded,canvas,gl,alpha,offscreen,context,maxMaterials,halfCanvasWidth,halfCanvasHeight,Zoom,maxViewportWidth,maxViewportHeight,P=[],Materials=[],Lights=[],Centers=[],Background=[1,1,1,1],absolute=!1,viewportshift=[0,0],nlights=0,Nmaterials=2,materials=[],pixel=.75,zoomRemeshFactor=1.5,FillFactor=.1;const windowTrim=10;let lastZoom,H,zmin,zmax,size2,ArcballFactor,third=1/3,rotMat=mat4.create(),projMat=mat4.create(),viewMat=mat4.create(),projViewMat=mat4.create(),normMat=mat3.create(),viewMat3=mat3.create(),cjMatInv=mat4.create(),T=mat4.create(),center={x:0,y:0,z:0},shift={x:0,y:0},viewParam={xmin:0,xmax:0,ymin:0,ymax:0,zmin:0,zmax:0},remesh=!0,wireframe=0,mouseDownOrTouchActive=!1,lastMouseX=null,lastMouseY=null,touchID=null,Positions=[],Normals=[],Colors=[],Indices=[];class Material{constructor(t,e,i,a,r,n){this.diffuse=t,this.emissive=e,this.specular=i,this.shininess=a,this.metallic=r,this.fresnel0=n}setUniform(t,e){let i=i=>gl.getUniformLocation(t,"Materials["+e+"]."+i);gl.uniform4fv(i("diffuse"),new Float32Array(this.diffuse)),gl.uniform4fv(i("emissive"),new Float32Array(this.emissive)),gl.uniform4fv(i("specular"),new Float32Array(this.specular)),gl.uniform4f(i("parameters"),this.shininess,this.metallic,this.fresnel0,0)}}let indexExt,TRIANGLES,material0Data,material1Data,materialData,colorData,transparentData,triangleData,materialIndex,enumPointLight=1,enumDirectionalLight=2;class Light{constructor(t,e){this.direction=t,this.color=e}setUniform(t,e){let i=i=>gl.getUniformLocation(t,"Lights["+e+"]."+i);gl.uniform3fv(i("direction"),new Float32Array(this.direction)),gl.uniform3fv(i("color"),new Float32Array(this.color))}}function initShaders(){let t=gl.getParameter(gl.MAX_VERTEX_UNIFORM_VECTORS);maxMaterials=Math.floor((t-14)/4),Nmaterials=Math.min(Math.max(Nmaterials,Materials.length),maxMaterials),pixelShader=initShader(["WIDTH"]),materialShader=initShader(["NORMAL"]),colorShader=initShader(["NORMAL","COLOR"]),transparentShader=initShader(["!
 NORMAL","COLOR","TRANSPARENT"])}function deleteShaders(){gl.deleteProgram(transparentShader),gl.deleteProgram(colorShader),gl.deleteProgram(materialShader),gl.deleteProgram(pixelShader)}function noGL(){gl||alert("Could not initialize WebGL")}function saveAttributes(){let t=window.top.document.asygl[alpha];t.gl=gl,t.nlights=Lights.length,t.Nmaterials=Nmaterials,t.maxMaterials=maxMaterials,t.pixelShader=pixelShader,t.materialShader=materialShader,t.colorShader=colorShader,t.transparentShader=transparentShader}function restoreAttributes(){let t=window.top.document.asygl[alpha];gl=t.gl,nlights=t.nlights,Nmaterials=t.Nmaterials,maxMaterials=t.maxMaterials,pixelShader=t.pixelShader,materialShader=t.materialShader,colorShader=t.colorShader,transparentShader=t.transparentShader}function initGL(){if(alpha=Background[3]<1,embedded){let t=window.top.document;null==t.asygl&&(t.asygl=Array(2)),context=canvas.getContext("2d"),offscreen=t.offscreen,offscreen||(offscreen=t.createElement("canvas"),t.offscreen=offscreen),t.asygl[alpha]&&t.asygl[alpha].gl?(restoreAttributes(),(Lights.length!=nlights||Math.min(Materials.length,maxMaterials)>Nmaterials)&&(initShaders(),saveAttributes())):(gl=offscreen.getContext("webgl",{alpha:alpha}),gl||noGL(),initShaders(),t.asygl[alpha]={},saveAttributes())}else gl=canvas.getContext("webgl",{alpha:alpha}),gl||noGL(),initShaders();indexExt=gl.getExtension("OES_element_index_uint"),TRIANGLES=gl.TRIANGLES,material0Data=new vertexBuffer(gl.POINTS),material1Data=new vertexBuffer(gl.LINES),materialData=new vertexBuffer,colorData=new vertexBuffer,transparentData=new vertexBuffer,triangleData=new vertexBuffer}function getShader(t,e,i,a=[]){let r=`#version 100\n#ifdef GL_FRAGMENT_PRECISION_HIGH\n  precision highp float;\n#else\n  precision mediump float;\n#endif\n  #define nlights ${0==wireframe?Lights.length:0}\n\n  const int Nlights=${Math.max(Lights.length,1)};\n\n  #define Nmaterials ${Nmaterials}\n`;orthographic&&(r+="#define ORTHOGRAPHIC\n"),a.forEach(t=>r+="#define "+t+"\n");let n=t.createShader(i!
 );return t.shaderSource(n,r+e),t.compileShader(n),t.getShaderParameter(n,t.COMPILE_STATUS)?n:(alert(t.getShaderInfoLog(n)),null)}function registerBuffer(t,e,i,a=gl.ARRAY_BUFFER){return t.length>0&&(0==e&&(e=gl.createBuffer(),i=!0),gl.bindBuffer(a,e),i&&gl.bufferData(a,t,gl.STATIC_DRAW)),e}function drawBuffer(t,e,i=t.indices){if(0==t.indices.length)return;let a=e!=pixelShader;setUniforms(t,e);let r=remesh||t.partial||!t.rendered;t.verticesBuffer=registerBuffer(new Float32Array(t.vertices),t.verticesBuffer,r),gl.vertexAttribPointer(positionAttribute,3,gl.FLOAT,!1,a?24:16,0),a&&Lights.length>0?gl.vertexAttribPointer(normalAttribute,3,gl.FLOAT,!1,24,12):pixel&&gl.vertexAttribPointer(widthAttribute,1,gl.FLOAT,!1,16,12),t.materialsBuffer=registerBuffer(new Int16Array(t.materialIndices),t.materialsBuffer,r),gl.vertexAttribPointer(materialAttribute,1,gl.SHORT,!1,2,0),e!=colorShader&&e!=transparentShader||(t.colorsBuffer=registerBuffer(new Uint8Array(t.colors),t.colorsBuffer,r),gl.vertexAttribPointer(colorAttribute,4,gl.UNSIGNED_BYTE,!0,0,0)),t.indicesBuffer=registerBuffer(indexExt?new Uint32Array(i):new Uint16Array(i),t.indicesBuffer,r,gl.ELEMENT_ARRAY_BUFFER),t.rendered=!0,gl.drawElements(a?wireframe?gl.LINES:t.type:gl.POINTS,i.length,indexExt?gl.UNSIGNED_INT:gl.UNSIGNED_SHORT,0)}class vertexBuffer{constructor(t){this.type=t||TRIANGLES,this.verticesBuffer=0,this.materialsBuffer=0,this.colorsBuffer=0,this.indicesBuffer=0,this.rendered=!1,this.partial=!1,this.clear()}clear(){this.vertices=[],this.materialIndices=[],this.colors=[],this.indices=[],this.nvertices=0,this.materials=[],this.materialTable=[]}vertex(t,e){return this.vertices.push(t[0]),this.vertices.push(t[1]),this.vertices.push(t[2]),this.vertices.push(e[0]),this.vertices.push(e[1]),this.vertices.push(e[2]),this.materialIndices.push(materialIndex),this.nvertices++}Vertex(t,e,i=[0,0,0,0]){return this.vertices.push(t[0]),this.vertices.push(t[1]),this.vertices.push(t[2]),this.vertices.push(e[0]),this.vertices.push(e[1]),this.vertices.push(e[2]),this.materialIndice!
 s.push(materialIndex),this.colors.push(i[0]),this.colors.push(i[1]),this.colors.push(i[2]),this.colors.push(i[3]),this.nvertices++}vertex0(t,e){return this.vertices.push(t[0]),this.vertices.push(t[1]),this.vertices.push(t[2]),this.vertices.push(e),this.materialIndices.push(materialIndex),this.nvertices++}iVertex(t,e,i,a=[0,0,0,0]){let r=6*t;this.vertices[r]=e[0],this.vertices[r+1]=e[1],this.vertices[r+2]=e[2],this.vertices[r+3]=i[0],this.vertices[r+4]=i[1],this.vertices[r+5]=i[2],this.materialIndices[t]=materialIndex;let n=4*t;this.colors[n]=a[0],this.colors[n+1]=a[1],this.colors[n+2]=a[2],this.colors[n+3]=a[3],this.indices.push(t)}append(t){append(this.vertices,t.vertices),append(this.materialIndices,t.materialIndices),append(this.colors,t.colors),appendOffset(this.indices,t.indices,this.nvertices),this.nvertices+=t.nvertices}}function append(t,e){let i=t.length,a=e.length;t.length+=a;for(let r=0;r<a;++r)t[i+r]=e[r]}function appendOffset(t,e,i){let a=t.length,r=e.length;t.length+=e.length;for(let n=0;n<r;++n)t[a+n]=e[n]+i}class Geometry{constructor(){this.data=new vertexBuffer,this.Onscreen=!1,this.m=[]}offscreen(t){let e=projViewMat,i=t[0],a=i[0],r=i[1],n=i[2],s=1/(e[3]*a+e[7]*r+e[11]*n+e[15]);this.x=this.X=(e[0]*a+e[4]*r+e[8]*n+e[12])*s,this.y=this.Y=(e[1]*a+e[5]*r+e[9]*n+e[13])*s;for(let i=1,a=t.length;i<a;++i){let a=t[i],r=a[0],n=a[1],s=a[2],o=1/(e[3]*r+e[7]*n+e[11]*s+e[15]),h=(e[0]*r+e[4]*n+e[8]*s+e[12])*o,l=(e[1]*r+e[5]*n+e[9]*s+e[13])*o;h<this.x?this.x=h:h>this.X&&(this.X=h),l<this.y?this.y=l:l>this.Y&&(this.Y=l)}return(this.X<-1.01||this.x>1.01||this.Y<-1.01||this.y>1.01)&&(this.Onscreen=!1,!0)}T(t){let e=this.c[0],i=this.c[1],a=this.c[2],r=t[0]-e,n=t[1]-i,s=t[2]-a;return[r*normMat[0]+n*normMat[3]+s*normMat[6]+e,r*normMat[1]+n*normMat[4]+s*normMat[7]+i,r*normMat[2]+n*normMat[5]+s*normMat[8]+a]}Tcorners(t,e){return[this.T(t),this.T([t[0],t[1],e[2]]),this.T([t[0],e[1],t[2]]),this.T([t[0],e[1],e[2]]),this.T([e[0],t[1],t[2]]),this.T([e[0],t[1],e[2]]),this.T([e[0],e[1],t[2]]),this.T(e)]}setMaterial(t,e){null!
 ==t.materialTable[this.MaterialIndex]&&(t.materials.length>=Nmaterials&&(t.partial=!0,e()),t.materialTable[this.MaterialIndex]=t.materials.length,t.materials.push(Materials[this.MaterialIndex])),materialIndex=t.materialTable[this.MaterialIndex]}render(){let t;if(this.setMaterialIndex(),0==this.CenterIndex?t=corners(this.Min,this.Max):(this.c=Centers[this.CenterIndex-1],t=this.Tcorners(this.Min,this.Max)),this.offscreen(t))return this.data.clear(),void this.notRendered();let e,i=this.controlpoints;if(0==this.CenterIndex){if(!remesh&&this.Onscreen)return void this.append();e=i}else{let t=i.length;e=Array(t);for(let a=0;a<t;++a)e[a]=this.T(i[a])}let a=orthographic?1:this.Min[2]/B[2],r=pixel*Math.hypot(a*(viewParam.xmax-viewParam.xmin),a*(viewParam.ymax-viewParam.ymin))/size2;this.res2=r*r,this.Epsilon=FillFactor*r,this.data.clear(),this.notRendered(),this.Onscreen=!0,this.process(e)}}class BezierPatch extends Geometry{constructor(t,e,i,a,r,n){super(),this.controlpoints=t,this.Min=a,this.Max=r,this.color=n,this.CenterIndex=e;let s=t.length;if(n){let t=n[0][3]+n[1][3]+n[2][3];this.transparent=16==s||4==s?t+n[3][3]<1020:t<765}else this.transparent=Materials[i].diffuse[3]<1;this.MaterialIndex=i,this.vertex=this.transparent?this.data.Vertex.bind(this.data):this.data.vertex.bind(this.data),this.L2norm(this.controlpoints)}setMaterialIndex(){this.transparent?this.setMaterial(transparentData,drawTransparent):this.color?this.setMaterial(colorData,drawColor):this.setMaterial(materialData,drawMaterial)}L2norm(t){let e=t[0];this.epsilon=0;let i=t.length;for(let a=1;a<i;++a)this.epsilon=Math.max(this.epsilon,abs2([t[a][0]-e[0],t[a][1]-e[1],t[a][2]-e[2]]));this.epsilon*=Number.EPSILON}processTriangle(t){let e=t[0],i=t[1],a=t[2],r=unit(cross([i[0]-e[0],i[1]-e[1],i[2]-e[2]],[a[0]-e[0],a[1]-e[1],a[2]-e[2]]));if(!this.offscreen([e,i,a])){let t,n,s;this.color?(t=this.data.Vertex(e,r,this.color[0]),n=this.data.Vertex(i,r,this.color[1]),s=this.data.Vertex(a,r,this.color[2])):(t=this.vertex(e,r),n=this.vertex(i,r),s=this.vertex(a,r)),0==!
 wireframe?(this.data.indices.push(t),this.data.indices.push(n),this.data.indices.push(s)):(this.data.indices.push(t),this.data.indices.push(n),this.data.indices.push(n),this.data.indices.push(s),this.data.indices.push(s),this.data.indices.push(t)),this.append()}}processQuad(t){let e=t[0],i=t[1],a=t[2],r=t[3],n=cross([i[0]-e[0],i[1]-e[1],i[2]-e[2]],[a[0]-i[0],a[1]-i[1],a[2]-i[2]]),s=cross([a[0]-r[0],a[1]-r[1],a[2]-r[2]],[r[0]-e[0],r[1]-e[1],r[2]-e[2]]),o=unit([n[0]+s[0],n[1]+s[1],n[2]+s[2]]);if(!this.offscreen([e,i,a,r])){let t,n,s,h;this.color?(t=this.data.Vertex(e,o,this.color[0]),n=this.data.Vertex(i,o,this.color[1]),s=this.data.Vertex(a,o,this.color[2]),h=this.data.Vertex(r,o,this.color[3])):(t=this.vertex(e,o),n=this.vertex(i,o),s=this.vertex(a,o),h=this.vertex(r,o)),0==wireframe?(this.data.indices.push(t),this.data.indices.push(n),this.data.indices.push(s),this.data.indices.push(t),this.data.indices.push(s),this.data.indices.push(h)):(this.data.indices.push(t),this.data.indices.push(n),this.data.indices.push(n),this.data.indices.push(s),this.data.indices.push(s),this.data.indices.push(h),this.data.indices.push(h),this.data.indices.push(t)),this.append()}}curve(t,e,i,a,r){new BezierCurve([t[e],t[i],t[a],t[r]],0,materialIndex,this.Min,this.Max).render()}process(t){if(this.transparent&&1!=wireframe&&(materialIndex=this.color?-1-materialIndex:1+materialIndex),10==t.length)return this.process3(t);if(3==t.length)return this.processTriangle(t);if(4==t.length)return this.processQuad(t);if(1==wireframe)return this.curve(t,0,4,8,12),this.curve(t,12,13,14,15),this.curve(t,15,11,7,3),void this.curve(t,3,2,1,0);let e=t[0],i=t[3],a=t[12],r=t[15],n=this.normal(i,t[2],t[1],e,t[4],t[8],a);abs2(n)<this.epsilon&&(n=this.normal(i,t[2],t[1],e,t[13],t[14],r),abs2(n)<this.epsilon&&(n=this.normal(r,t[11],t[7],i,t[4],t[8],a)));let s=this.normal(e,t[4],t[8],a,t[13],t[14],r);abs2(s)<this.epsilon&&(s=this.normal(e,t[4],t[8],a,t[11],t[7],i),abs2(s)<this.epsilon&&(s=this.normal(i,t[2],t[1],e,t[13],t[14],r)));let o=this.normal(a,t[13],t[!
 14],r,t[11],t[7],i);abs2(o)<this.epsilon&&(o=this.normal(a,t[13],t[14],r,t[2],t[1],e),abs2(o)<this.epsilon&&(o=this.normal(e,t[4],t[8],a,t[11],t[7],i)));let h=this.normal(r,t[11],t[7],i,t[2],t[1],e);if(abs2(h)<this.epsilon&&(h=this.normal(r,t[11],t[7],i,t[4],t[8],a),abs2(h)<this.epsilon&&(h=this.normal(a,t[13],t[14],r,t[2],t[1],e))),this.color){let l=this.color[0],c=this.color[1],d=this.color[2],m=this.color[3],f=this.data.Vertex(e,n,l),u=this.data.Vertex(a,s,c),p=this.data.Vertex(r,o,d),v=this.data.Vertex(i,h,m);this.Render(t,f,u,p,v,e,a,r,i,!1,!1,!1,!1,l,c,d,m)}else{let l=this.vertex(e,n),c=this.vertex(a,s),d=this.vertex(r,o),m=this.vertex(i,h);this.Render(t,l,c,d,m,e,a,r,i,!1,!1,!1,!1)}this.data.indices.length>0&&this.append()}append(){this.transparent?transparentData.append(this.data):this.color?colorData.append(this.data):materialData.append(this.data)}notRendered(){this.transparent?transparentData.rendered=!1:this.color?colorData.rendered=!1:materialData.rendered=!1}Render(t,e,i,a,r,n,s,o,h,l,c,d,m,f,u,p,v){let g=this.Distance(t);if(g[0]<this.res2&&g[1]<this.res2)this.offscreen([n,s,o])||(0==wireframe?(this.data.indices.push(e),this.data.indices.push(i),this.data.indices.push(a)):(this.data.indices.push(e),this.data.indices.push(i),this.data.indices.push(i),this.data.indices.push(a))),this.offscreen([n,o,h])||(0==wireframe?(this.data.indices.push(e),this.data.indices.push(a),this.data.indices.push(r)):(this.data.indices.push(a),this.data.indices.push(r),this.data.indices.push(r),this.data.indices.push(e)));else{if(this.offscreen(t))return;let x=t[0],w=t[3],M=t[12],b=t[15];if(g[0]<this.res2){let g=new Split3(x,t[1],t[2],w),S=new Split3(t[4],t[5],t[6],t[7]),P=new Split3(t[8],t[9],t[10],t[11]),A=new Split3(M,t[13],t[14],b),y=[x,g.m0,g.m3,g.m5,t[4],S.m0,S.m3,S.m5,t[8],P.m0,P.m3,P.m5,M,A.m0,A.m3,A.m5],T=[g.m5,g.m4,g.m2,w,S.m5,S.m4,S.m2,t[7],P.m5,P.m4,P.m2,t[11],A.m5,A.m4,A.m2,b],R=this.normal(y[12],y[13],y[14],y[15],y[11],y[7],y[3]);abs2(R)<=this.epsilon&&(R=this.normal(y[12],y[13],y[14],y[15],y[2],y[1],y[0]),a!
 bs2(R)<=this.epsilon&&(R=this.normal(y[0],y[4],y[8],y[12],y[11],y[7],y[3])));let D=this.normal(T[3],T[2],T[1],T[0],T[4],T[8],T[12]);abs2(D)<=this.epsilon&&(D=this.normal(T[3],T[2],T[1],T[0],T[13],T[14],T[15]),abs2(D)<=this.epsilon&&(D=this.normal(T[15],T[11],T[7],T[3],T[4],T[8],T[12])));let I=this.Epsilon,z=[.5*(s[0]+o[0]),.5*(s[1]+o[1]),.5*(s[2]+o[2])];if(!c)if(c=Straightness(M,t[13],t[14],b)<this.res2){let t=unit(this.differential(T[12],T[8],T[4],T[0]));z=[z[0]-I*t[0],z[1]-I*t[1],z[2]-I*t[2]]}else z=y[15];let L=[.5*(h[0]+n[0]),.5*(h[1]+n[1]),.5*(h[2]+n[2])];if(!m)if(m=Straightness(x,t[1],t[2],w)<this.res2){let t=unit(this.differential(y[3],y[7],y[11],y[15]));L=[L[0]-I*t[0],L[1]-I*t[1],L[2]-I*t[2]]}else L=T[0];if(f){let t=Array(4),g=Array(4);for(let e=0;e<4;++e)t[e]=.5*(u[e]+p[e]),g[e]=.5*(v[e]+f[e]);let x=this.data.Vertex(z,R,t),w=this.data.Vertex(L,D,g);this.Render(y,e,i,x,w,n,s,z,L,l,c,!1,m,f,u,t,g),this.Render(T,w,x,a,r,L,z,o,h,!1,c,d,m,g,t,p,v)}else{let t=this.vertex(z,R),f=this.vertex(L,D);this.Render(y,e,i,t,f,n,s,z,L,l,c,!1,m),this.Render(T,f,t,a,r,L,z,o,h,!1,c,d,m)}return}if(g[1]<this.res2){let g=new Split3(x,t[4],t[8],M),S=new Split3(t[1],t[5],t[9],t[13]),P=new Split3(t[2],t[6],t[10],t[14]),A=new Split3(w,t[7],t[11],b),y=[x,t[1],t[2],w,g.m0,S.m0,P.m0,A.m0,g.m3,S.m3,P.m3,A.m3,g.m5,S.m5,P.m5,A.m5],T=[g.m5,S.m5,P.m5,A.m5,g.m4,S.m4,P.m4,A.m4,g.m2,S.m2,P.m2,A.m2,M,t[13],t[14],b],R=this.normal(y[0],y[4],y[8],y[12],y[13],y[14],y[15]);abs2(R)<=this.epsilon&&(R=this.normal(y[0],y[4],y[8],y[12],y[11],y[7],y[3]),abs2(R)<=this.epsilon&&(R=this.normal(y[3],y[2],y[1],y[0],y[13],y[14],y[15])));let D=this.normal(T[15],T[11],T[7],T[3],T[2],T[1],T[0]);abs2(D)<=this.epsilon&&(D=this.normal(T[15],T[11],T[7],T[3],T[4],T[8],T[12]),abs2(D)<=this.epsilon&&(D=this.normal(T[12],T[13],T[14],T[15],T[2],T[1],T[0])));let I=this.Epsilon,z=[.5*(n[0]+s[0]),.5*(n[1]+s[1]),.5*(n[2]+s[2])];if(!l)if(l=Straightness(x,t[4],t[8],M)<this.res2){let t=unit(this.differential(T[0],T[1],T[2],T[3]));z=[z[0]-I*t[0],z[1]-I*t[1],z[2]-I*t[2]]}else z=y!
 [12];let L=[.5*(o[0]+h[0]),.5*(o[1]+h[1]),.5*(o[2]+h[2])];if(!d)if(d=Straightness(b,t[11],t[7],w)<this.res2){let t=unit(this.differential(y[15],y[14],y[13],y[12]));L=[L[0]-I*t[0],L[1]-I*t[1],L[2]-I*t[2]]}else L=T[3];if(f){let t=Array(4),g=Array(4);for(let e=0;e<4;++e)t[e]=.5*(f[e]+u[e]),g[e]=.5*(p[e]+v[e]);let x=this.data.Vertex(z,R,t),w=this.data.Vertex(L,D,g);this.Render(y,e,x,w,r,n,z,L,h,l,!1,d,m,f,t,g,v),this.Render(T,x,i,a,w,z,s,o,L,l,c,d,!1,t,u,p,g)}else{let t=this.vertex(z,R),f=this.vertex(L,D);this.Render(y,e,t,f,r,n,z,L,h,l,!1,d,m),this.Render(T,t,i,a,f,z,s,o,L,l,c,d,!1)}return}let S=new Split3(x,t[1],t[2],w),P=new Split3(t[4],t[5],t[6],t[7]),A=new Split3(t[8],t[9],t[10],t[11]),y=new Split3(M,t[13],t[14],b),T=new Split3(x,t[4],t[8],M),R=new Split3(S.m0,P.m0,A.m0,y.m0),D=new Split3(S.m3,P.m3,A.m3,y.m3),I=new Split3(S.m5,P.m5,A.m5,y.m5),z=new Split3(S.m4,P.m4,A.m4,y.m4),L=new Split3(S.m2,P.m2,A.m2,y.m2),N=new Split3(w,t[7],t[11],b),E=[x,S.m0,S.m3,S.m5,T.m0,R.m0,D.m0,I.m0,T.m3,R.m3,D.m3,I.m3,T.m5,R.m5,D.m5,I.m5],O=[T.m5,R.m5,D.m5,I.m5,T.m4,R.m4,D.m4,I.m4,T.m2,R.m2,D.m2,I.m2,M,y.m0,y.m3,y.m5],V=[I.m5,z.m5,L.m5,N.m5,I.m4,z.m4,L.m4,N.m4,I.m2,z.m2,L.m2,N.m2,y.m5,y.m4,y.m2,b],C=[S.m5,S.m4,S.m2,w,I.m0,z.m0,L.m0,N.m0,I.m3,z.m3,L.m3,N.m3,I.m5,z.m5,L.m5,N.m5],B=E[15],H=this.normal(E[0],E[4],E[8],E[12],E[13],E[14],E[15]);abs2(H)<this.epsilon&&(H=this.normal(E[0],E[4],E[8],E[12],E[11],E[7],E[3]),abs2(H)<this.epsilon&&(H=this.normal(E[3],E[2],E[1],E[0],E[13],E[14],E[15])));let _=this.normal(O[12],O[13],O[14],O[15],O[11],O[7],O[3]);abs2(_)<this.epsilon&&(_=this.normal(O[12],O[13],O[14],O[15],O[2],O[1],O[0]),abs2(_)<this.epsilon&&(_=this.normal(O[0],O[4],O[8],O[12],O[11],O[7],O[3])));let F=this.normal(V[15],V[11],V[7],V[3],V[2],V[1],V[0]);abs2(F)<this.epsilon&&(F=this.normal(V[15],V[11],V[7],V[3],V[4],V[8],V[12]),abs2(F)<this.epsilon&&(F=this.normal(V[12],V[13],V[14],V[15],V[2],V[1],V[0])));let G=this.normal(C[3],C[2],C[1],C[0],C[4],C[8],C[12]);abs2(G)<this.epsilon&&(G=this.normal(C[3],C[2],C[1],C[0],C[13],C[14],C[15]),!
 abs2(G)<this.epsilon&&(G=this.normal(C[15],C[11],C[7],C[3],C[4],C[8],C[12])));let W=this.normal(V[3],V[2],V[1],B,V[4],V[8],V[12]),U=this.Epsilon,Z=[.5*(n[0]+s[0]),.5*(n[1]+s[1]),.5*(n[2]+s[2])];if(!l)if(l=Straightness(x,t[4],t[8],M)<this.res2){let t=unit(this.differential(O[0],O[1],O[2],O[3]));Z=[Z[0]-U*t[0],Z[1]-U*t[1],Z[2]-U*t[2]]}else Z=E[12];let j=[.5*(s[0]+o[0]),.5*(s[1]+o[1]),.5*(s[2]+o[2])];if(!c)if(c=Straightness(M,t[13],t[14],b)<this.res2){let t=unit(this.differential(V[12],V[8],V[4],V[0]));j=[j[0]-U*t[0],j[1]-U*t[1],j[2]-U*t[2]]}else j=O[15];let k=[.5*(o[0]+h[0]),.5*(o[1]+h[1]),.5*(o[2]+h[2])];if(!d)if(d=Straightness(b,t[11],t[7],w)<this.res2){let t=unit(this.differential(C[15],C[14],C[13],C[12]));k=[k[0]-U*t[0],k[1]-U*t[1],k[2]-U*t[2]]}else k=V[3];let Y=[.5*(h[0]+n[0]),.5*(h[1]+n[1]),.5*(h[2]+n[2])];if(!m)if(m=Straightness(x,t[1],t[2],w)<this.res2){let t=unit(this.differential(E[3],E[7],E[11],E[15]));Y=[Y[0]-U*t[0],Y[1]-U*t[1],Y[2]-U*t[2]]}else Y=C[0];if(f){let t=Array(4),g=Array(4),x=Array(4),w=Array(4),M=Array(4);for(let e=0;e<4;++e)t[e]=.5*(f[e]+u[e]),g[e]=.5*(u[e]+p[e]),x[e]=.5*(p[e]+v[e]),w[e]=.5*(v[e]+f[e]),M[e]=.5*(t[e]+x[e]);let b=this.data.Vertex(Z,H,t),S=this.data.Vertex(j,_,g),P=this.data.Vertex(k,F,x),A=this.data.Vertex(Y,G,w),y=this.data.Vertex(B,W,M);this.Render(E,e,b,y,A,n,Z,B,Y,l,!1,!1,m,f,t,M,w),this.Render(O,b,i,S,y,Z,s,j,B,l,c,!1,!1,t,u,g,M),this.Render(V,y,S,a,P,B,j,o,k,!1,c,d,!1,M,g,p,x),this.Render(C,A,y,P,r,Y,B,k,h,!1,!1,d,m,w,M,x,v)}else{let t=this.vertex(Z,H),f=this.vertex(j,_),u=this.vertex(k,F),p=this.vertex(Y,G),v=this.vertex(B,W);this.Render(E,e,t,v,p,n,Z,B,Y,l,!1,!1,m),this.Render(O,t,i,f,v,Z,s,j,B,l,c,!1,!1),this.Render(V,v,f,a,u,B,j,o,k,!1,c,d,!1),this.Render(C,p,v,u,r,Y,B,k,h,!1,!1,d,m)}}}process3(t){if(1==wireframe)return this.curve(t,0,1,3,6),this.curve(t,6,7,8,9),void this.curve(t,9,5,2,0);let e=t[0],i=t[6],a=t[9],r=this.normal(a,t[5],t[2],e,t[1],t[3],i),n=this.normal(e,t[1],t[3],i,t[7],t[8],a),s=this.normal(i,t[7],t[8],a,t[5],t[2],e);if(this.color){let o=this.color!
 [0],h=this.color[1],l=this.color[2],c=this.data.Vertex(e,r,o),d=this.data.Vertex(i,n,h),m=this.data.Vertex(a,s,l);this.Render3(t,c,d,m,e,i,a,!1,!1,!1,o,h,l)}else{let o=this.vertex(e,r),h=this.vertex(i,n),l=this.vertex(a,s);this.Render3(t,o,h,l,e,i,a,!1,!1,!1)}this.data.indices.length>0&&this.append()}Render3(t,e,i,a,r,n,s,o,h,l,c,d,m){if(this.Distance3(t)<this.res2)this.offscreen([r,n,s])||(0==wireframe?(this.data.indices.push(e),this.data.indices.push(i),this.data.indices.push(a)):(this.data.indices.push(e),this.data.indices.push(i),this.data.indices.push(i),this.data.indices.push(a),this.data.indices.push(a),this.data.indices.push(e)));else{if(this.offscreen(t))return;let f=t[0],u=t[1],p=t[2],v=t[3],g=t[4],x=t[5],w=t[6],M=t[7],b=t[8],S=t[9],P=[.5*(S[0]+x[0]),.5*(S[1]+x[1]),.5*(S[2]+x[2])],A=[.5*(S[0]+b[0]),.5*(S[1]+b[1]),.5*(S[2]+b[2])],y=[.5*(x[0]+p[0]),.5*(x[1]+p[1]),.5*(x[2]+p[2])],T=[.5*(b[0]+g[0]),.5*(b[1]+g[1]),.5*(b[2]+g[2])],R=[.5*(b[0]+M[0]),.5*(b[1]+M[1]),.5*(b[2]+M[2])],D=[.5*(p[0]+g[0]),.5*(p[1]+g[1]),.5*(p[2]+g[2])],I=[.5*(p[0]+f[0]),.5*(p[1]+f[1]),.5*(p[2]+f[2])],z=[.5*(g[0]+v[0]),.5*(g[1]+v[1]),.5*(g[2]+v[2])],L=[.5*(M[0]+w[0]),.5*(M[1]+w[1]),.5*(M[2]+w[2])],N=[.5*(f[0]+u[0]),.5*(f[1]+u[1]),.5*(f[2]+u[2])],E=[.5*(u[0]+v[0]),.5*(u[1]+v[1]),.5*(u[2]+v[2])],O=[.5*(v[0]+w[0]),.5*(v[1]+w[1]),.5*(v[2]+w[2])],V=[.5*(P[0]+y[0]),.5*(P[1]+y[1]),.5*(P[2]+y[2])],C=[.5*(A[0]+R[0]),.5*(A[1]+R[1]),.5*(A[2]+R[2])],B=[.5*(y[0]+I[0]),.5*(y[1]+I[1]),.5*(y[2]+I[2])],H=[.5*T[0]+.25*(g[0]+u[0]),.5*T[1]+.25*(g[1]+u[1]),.5*T[2]+.25*(g[2]+u[2])],_=[.5*(R[0]+L[0]),.5*(R[1]+L[1]),.5*(R[2]+L[2])],F=[.5*D[0]+.25*(g[0]+M[0]),.5*D[1]+.25*(g[1]+M[1]),.5*D[2]+.25*(g[2]+M[2])],G=[.25*(x[0]+g[0])+.5*z[0],.25*(x[1]+g[1])+.5*z[1],.25*(x[2]+g[2])+.5*z[2]],W=[.5*(N[0]+E[0]),.5*(N[1]+E[1]),.5*(N[2]+E[2])],U=[.5*(E[0]+O[0]),.5*(E[1]+O[1]),.5*(E[2]+O[2])],Z=[.5*(F[0]+W[0]),.5*(F[1]+W[1]),.5*(F[2]+W[2])],j=[.5*(F[0]+U[0]),.5*(F[1]+U[1]),.5*(F[2]+U[2])],k=[.5*(W[0]+U[0]),.5*(W[1]+U[1]),.5*(W[2]+U[2])],Y=[.5*(G[0]+_[0]),.5*(G[1]+_[1]),.5*(!
 G[2]+_[2])],X=[.5*(C[0]+G[0]),.5*(C[1]+G[1]),.5*(C[2]+G[2])],q=[.5*(C[0]+_[0]),.5*(C[1]+_[1]),.5*(C[2]+_[2])],K=[.5*(V[0]+H[0]),.5*(V[1]+H[1]),.5*(V[2]+H[2])],$=[.5*(B[0]+H[0]),.5*(B[1]+H[1]),.5*(B[2]+H[2])],Q=[.5*(V[0]+B[0]),.5*(V[1]+B[1]),.5*(V[2]+B[2])],J=[f,N,I,W,[.5*(D[0]+N[0]),.5*(D[1]+N[1]),.5*(D[2]+N[2])],B,k,Z,$,Q],tt=[k,U,j,O,[.5*(z[0]+L[0]),.5*(z[1]+L[1]),.5*(z[2]+L[2])],Y,w,L,_,q],et=[Q,K,V,X,[.5*(P[0]+T[0]),.5*(P[1]+T[1]),.5*(P[2]+T[2])],P,q,C,A,S],it=[q,X,Y,K,[.25*(y[0]+R[0]+E[0]+g[0]),.25*(y[1]+R[1]+E[1]+g[1]),.25*(y[2]+R[2]+E[2]+g[2])],j,Q,$,Z,k],at=this.normal(k,j,Y,q,X,K,Q),rt=this.normal(q,X,K,Q,$,Z,k),nt=this.normal(Q,$,Z,k,j,Y,q),st=this.Epsilon,ot=[.5*(n[0]+s[0]),.5*(n[1]+s[1]),.5*(n[2]+s[2])];if(!o)if(o=Straightness(w,M,b,S)<this.res2){let t=unit(this.sumdifferential(it[0],it[2],it[5],it[9],it[1],it[3],it[6]));ot=[ot[0]-st*t[0],ot[1]-st*t[1],ot[2]-st*t[2]]}else ot=q;let ht=[.5*(s[0]+r[0]),.5*(s[1]+r[1]),.5*(s[2]+r[2])];if(!h)if(h=Straightness(f,p,x,S)<this.res2){let t=unit(this.sumdifferential(it[6],it[3],it[1],it[0],it[7],it[8],it[9]));ht=[ht[0]-st*t[0],ht[1]-st*t[1],ht[2]-st*t[2]]}else ht=Q;let lt=[.5*(r[0]+n[0]),.5*(r[1]+n[1]),.5*(r[2]+n[2])];if(!l)if(l=Straightness(f,u,v,w)<this.res2){let t=unit(this.sumdifferential(it[9],it[8],it[7],it[6],it[5],it[2],it[0]));lt=[lt[0]-st*t[0],lt[1]-st*t[1],lt[2]-st*t[2]]}else lt=k;if(c){let t=Array(4),f=Array(4),u=Array(4);for(let e=0;e<4;++e)t[e]=.5*(d[e]+m[e]),f[e]=.5*(m[e]+c[e]),u[e]=.5*(c[e]+d[e]);let p=this.data.Vertex(ot,at,t),v=this.data.Vertex(ht,rt,f),g=this.data.Vertex(lt,nt,u);this.Render3(J,e,g,v,r,lt,ht,!1,h,l,c,u,f),this.Render3(tt,g,i,p,lt,n,ot,o,!1,l,u,d,t),this.Render3(et,v,p,a,ht,ot,s,o,h,!1,f,t,m),this.Render3(it,p,v,g,ot,ht,lt,!1,!1,!1,t,f,u)}else{let t=this.vertex(ot,at),c=this.vertex(ht,rt),d=this.vertex(lt,nt);this.Render3(J,e,d,c,r,lt,ht,!1,h,l),this.Render3(tt,d,i,t,lt,n,ot,o,!1,l),this.Render3(et,c,t,a,ht,ot,s,o,h,!1),this.Render3(it,t,c,d,ot,ht,lt,!1,!1,!1)}}}Distance(t){let e=t[0],i=t[3],a=t[12],r=t[15],n=Flatness(e,a,i,r);!
 n=Math.max(Straightness(e,t[4],t[8],a)),n=Math.max(n,Straightness(t[1],t[5],t[9],t[13])),n=Math.max(n,Straightness(i,t[7],t[11],r)),n=Math.max(n,Straightness(t[2],t[6],t[10],t[14]));let s=Flatness(e,i,a,r);return s=Math.max(s,Straightness(e,t[1],t[2],i)),s=Math.max(s,Straightness(t[4],t[5],t[6],t[7])),s=Math.max(s,Straightness(t[8],t[9],t[10],t[11])),s=Math.max(s,Straightness(a,t[13],t[14],r)),[n,s]}Distance3(t){let e=t[0],i=t[4],a=t[6],r=t[9],n=abs2([(e[0]+a[0]+r[0])*third-i[0],(e[1]+a[1]+r[1])*third-i[1],(e[2]+a[2]+r[2])*third-i[2]]);return n=Math.max(n,Straightness(e,t[1],t[3],a)),n=Math.max(n,Straightness(e,t[2],t[5],r)),Math.max(n,Straightness(a,t[7],t[8],r))}differential(t,e,i,a){let r=[3*(e[0]-t[0]),3*(e[1]-t[1]),3*(e[2]-t[2])];return abs2(r)>this.epsilon?r:(r=bezierPP(t,e,i),abs2(r)>this.epsilon?r:bezierPPP(t,e,i,a))}sumdifferential(t,e,i,a,r,n,s){let o=this.differential(t,e,i,a),h=this.differential(t,r,n,s);return[o[0]+h[0],o[1]+h[1],o[2]+h[2]]}normal(t,e,i,a,r,n,s){let o=3*(r[0]-a[0]),h=3*(r[1]-a[1]),l=3*(r[2]-a[2]),c=3*(i[0]-a[0]),d=3*(i[1]-a[1]),m=3*(i[2]-a[2]),f=[h*m-l*d,l*c-o*m,o*d-h*c];if(abs2(f)>this.epsilon)return f;let u=[c,d,m],p=[o,h,l],v=bezierPP(a,i,e),g=bezierPP(a,r,n),x=cross(g,u),w=cross(p,v);if(f=[x[0]+w[0],x[1]+w[1],x[2]+w[2]],abs2(f)>this.epsilon)return f;let M=bezierPPP(a,i,e,t),b=bezierPPP(a,r,n,s);x=cross(p,M),w=cross(b,u);let S=cross(g,v);return f=[x[0]+w[0]+S[0],x[1]+w[1]+S[1],x[2]+w[2]+S[2]],abs2(f)>this.epsilon?f:(x=cross(b,v),w=cross(g,M),f=[x[0]+w[0],x[1]+w[1],x[2]+w[2]],abs2(f)>this.epsilon?f:cross(b,M))}}class BezierCurve extends Geometry{constructor(t,e,i,a,r){super(),this.controlpoints=t,this.Min=a,this.Max=r,this.CenterIndex=e,this.MaterialIndex=i}setMaterialIndex(){this.setMaterial(material1Data,drawMaterial1)}processLine(t){let e=t[0],i=t[1];if(!this.offscreen([e,i])){let t=[0,0,1];this.data.indices.push(this.data.vertex(e,t)),this.data.indices.push(this.data.vertex(i,t)),this.append()}}process(t){if(2==t.length)return this.processLine(t);let e=t[0],i=t[1],a=t[2],r=t[3!
 ],n=this..normal(bezierP(e,i),bezierPP(e,i,a)),s=this.normal(bezierP(a,r),bezierPP(r,a,i)),o=this.data.vertex(e,n),h=this.data.vertex(r,s);this.Render(t,o,h),this.data.indices.length>0&&this.append()}append(){material1Data.append(this.data)}notRendered(){material1Data.rendered=!1}Render(t,e,i){let a=t[0],r=t[1],n=t[2],s=t[3];if(Straightness(a,r,n,s)<this.res2)this.offscreen([a,s])||(this.data.indices.push(e),this.data.indices.push(i));else{if(this.offscreen(t))return;let o=[.5*(a[0]+r[0]),.5*(a[1]+r[1]),.5*(a[2]+r[2])],h=[.5*(r[0]+n[0]),.5*(r[1]+n[1]),.5*(r[2]+n[2])],l=[.5*(n[0]+s[0]),.5*(n[1]+s[1]),.5*(n[2]+s[2])],c=[.5*(o[0]+h[0]),.5*(o[1]+h[1]),.5*(o[2]+h[2])],d=[.5*(h[0]+l[0]),.5*(h[1]+l[1]),.5*(h[2]+l[2])],m=[.5*(c[0]+d[0]),.5*(c[1]+d[1]),.5*(c[2]+d[2])],f=[a,o,c,m],u=[m,d,l,s],p=this.normal(bezierPh(a,r,n,s),bezierPPh(a,r,n,s)),v=this.data.vertex(m,p);this.Render(f,e,v),this.Render(u,v,i)}}normal(t,e){let i=dot(t,t),a=dot(t,e);return[i*e[0]-a*t[0],i*e[1]-a*t[1],i*e[2]-a*t[2]]}}class Pixel extends Geometry{constructor(t,e,i,a,r){super(),this.controlpoint=t,this.width=e,this.CenterIndex=0,this.MaterialIndex=i,this.Min=a,this.Max=r}setMaterialIndex(){this.setMaterial(material0Data,drawMaterial0)}process(t){this.data.indices.push(this.data.vertex0(this.controlpoint,this.width)),this.append()}append(){material0Data.append(this.data)}notRendered(){material0Data.rendered=!1}}class Triangles extends Geometry{constructor(t,e,i){super(),this.CenterIndex=0,this.MaterialIndex=t,this.Min=e,this.Max=i,this.Positions=Positions,this.Normals=Normals,this.Colors=Colors,this.Indices=Indices,Positions=[],Normals=[],Colors=[],Indices=[],this.transparent=Materials[t].diffuse[3]<1}setMaterialIndex(){this.transparent?this.setMaterial(transparentData,drawTransparent):this.setMaterial(triangleData,drawTriangle)}process(t){materialIndex=this.Colors.length>0?-1-materialIndex:1+materialIndex;for(let t=0,e=this.Indices.length;t<e;++t){let e=this.Indices[t],i=e[0],a=this.Positions[i[0]],r=this.Positions[i[1]],n=this.Positions[i[2]];if(!t!
 his.offscreen([a,r,n])){let t=e.length>1?e[1]:i;if(t&&0!=t.length||(t=i),this.Colors.length>0){let s=e.length>2?e[2]:i;s&&0!=s.length||(s=i);let o=this.Colors[s[0]],h=this.Colors[s[1]],l=this.Colors[s[2]];this.transparent|=o[3]+h[3]+l[3]<765,0==wireframe?(this.data.iVertex(i[0],a,this.Normals[t[0]],o),this.data.iVertex(i[1],r,this.Normals[t[1]],h),this.data.iVertex(i[2],n,this.Normals[t[2]],l)):(this.data.iVertex(i[0],a,this.Normals[t[0]],o),this.data.iVertex(i[1],r,this.Normals[t[1]],h),this.data.iVertex(i[1],r,this.Normals[t[1]],h),this.data.iVertex(i[2],n,this.Normals[t[2]],l),this.data.iVertex(i[2],n,this.Normals[t[2]],l),this.data.iVertex(i[0],a,this.Normals[t[0]],o))}else 0==wireframe?(this.data.iVertex(i[0],a,this.Normals[t[0]]),this.data.iVertex(i[1],r,this.Normals[t[1]]),this.data.iVertex(i[2],n,this.Normals[t[2]])):(this.data.iVertex(i[0],a,this.Normals[t[0]]),this.data.iVertex(i[1],r,this.Normals[t[1]]),this.data.iVertex(i[1],r,this.Normals[t[1]]),this.data.iVertex(i[2],n,this.Normals[t[2]]),this.data.iVertex(i[2],n,this.Normals[t[2]]),this.data.iVertex(i[0],a,this.Normals[t[0]]))}}this.data.nvertices=this.Positions.length,this.data.indices.length>0&&this.append()}append(){this.transparent?transparentData.append(this.data):triangleData.append(this.data)}notRendered(){this.transparent?transparentData.rendered=!1:triangleData.rendered=!1}}function redraw(){initProjection(),setProjection(),remesh=!0,draw()}function home(){mat4.identity(rotMat),redraw()}let positionAttribute=0,normalAttribute=1,materialAttribute=2,colorAttribute=3,widthAttribute=4;function initShader(t=[]){let e=getShader(gl,vertex,gl.VERTEX_SHADER,t),i=getShader(gl,fragment,gl.FRAGMENT_SHADER,t),a=gl.createProgram();return gl.attachShader(a,e),gl.attachShader(a,i),gl.bindAttribLocation(a,positionAttribute,"position"),gl.bindAttribLocation(a,normalAttribute,"normal"),gl.bindAttribLocation(a,materialAttribute,"materialIndex"),gl.bindAttribLocation(a,colorAttribute,"color"),gl.bindAttribLocation(a,widthAttribute,"width"),gl.linkProgram(a),g!
 l.getProgramParameter(a,gl.LINK_STATUS)||alert("Could not initialize shaders"),a}class Split3{constructor(t,e,i,a){this.m0=[.5*(t[0]+e[0]),.5*(t[1]+e[1]),.5*(t[2]+e[2])];let r=.5*(e[0]+i[0]),n=.5*(e[1]+i[1]),s=.5*(e[2]+i[2]);this.m2=[.5*(i[0]+a[0]),.5*(i[1]+a[1]),.5*(i[2]+a[2])],this.m3=[.5*(this.m0[0]+r),.5*(this.m0[1]+n),.5*(this.m0[2]+s)],this.m4=[.5*(r+this.m2[0]),.5*(n+this.m2[1]),.5*(s+this.m2[2])],this.m5=[.5*(this.m3[0]+this.m4[0]),.5*(this.m3[1]+this.m4[1]),.5*(this.m3[2]+this.m4[2])]}}function unit(t){let e=1/(Math.sqrt(t[0]*t[0]+t[1]*t[1]+t[2]*t[2])||1);return[t[0]*e,t[1]*e,t[2]*e]}function abs2(t){return t[0]*t[0]+t[1]*t[1]+t[2]*t[2]}function dot(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}function cross(t,e){return[t[1]*e[2]-t[2]*e[1],t[2]*e[0]-t[0]*e[2],t[0]*e[1]-t[1]*e[0]]}function bezierP(t,e){return[e[0]-t[0],e[1]-t[1],e[2]-t[2]]}function bezierPP(t,e,i){return[3*(t[0]+i[0])-6*e[0],3*(t[1]+i[1])-6*e[1],3*(t[2]+i[2])-6*e[2]]}function bezierPPP(t,e,i,a){return[a[0]-t[0]+3*(e[0]-i[0]),a[1]-t[1]+3*(e[1]-i[1]),a[2]-t[2]+3*(e[2]-i[2])]}function bezierPh(t,e,i,a){return[i[0]+a[0]-t[0]-e[0],i[1]+a[1]-t[1]-e[1],i[2]+a[2]-t[2]-e[2]]}function bezierPPh(t,e,i,a){return[3*t[0]-5*e[0]+i[0]+a[0],3*t[1]-5*e[1]+i[1]+a[1],3*t[2]-5*e[2]+i[2]+a[2]]}function Straightness(t,e,i,a){let r=[third*(a[0]-t[0]),third*(a[1]-t[1]),third*(a[2]-t[2])];return Math.max(abs2([e[0]-r[0]-t[0],e[1]-r[1]-t[1],e[2]-r[2]-t[2]]),abs2([a[0]-r[0]-i[0],a[1]-r[1]-i[1],a[2]-r[2]-i[2]]))}function Flatness(t,e,i,a){let r=[e[0]-t[0],e[1]-t[1],e[2]-t[2]],n=[a[0]-i[0],a[1]-i[1],a[2]-i[2]];return Math.max(abs2(cross(r,unit(n))),abs2(cross(n,unit(r))))/9}function corners(t,e){return[t,[t[0],t[1],e[2]],[t[0],e[1],t[2]],[t[0],e[1],e[2]],[e[0],t[1],t[2]],[e[0],t[1],e[2]],[e[0],e[1],t[2]],e]}function minbound(t){return[Math.min(t[0][0],t[1][0],t[2][0],t[3][0],t[4][0],t[5][0],t[6][0],t[7][0]),Math.min(t[0][1],t[1][1],t[2][1],t[3][1],t[4][1],t[5][1],t[6][1],t[7][1]),Math.min(t[0][2],t[1][2],t[2][2],t[3][2],t[4][2],t[5][2],t[6][2],t[7][2])]}function maxboun!
 d(t){return[Math.max(t[0][0],t[1][0],t[2][0],t[3][0],t[4][0],t[5][0],t[6][0],t[7][0]),Math.max(t[0][1],t[1][1],t[2][1],t[3][1],t[4][1],t[5][1],t[6][1],t[7][1]),Math.max(t[0][2],t[1][2],t[2][2],t[3][2],t[4][2],t[5][2],t[6][2],t[7][2])]}function COBTarget(t,e){mat4.fromTranslation(T,[center.x,center.y,center.z]),mat4.invert(cjMatInv,T),mat4.multiply(t,e,cjMatInv),mat4.multiply(t,T,t)}function setUniforms(t,e){let i=e==pixelShader;gl.useProgram(e),gl.enableVertexAttribArray(positionAttribute),i&&gl.enableVertexAttribArray(widthAttribute);let a=!i&&Lights.length>0;if(a&&gl.enableVertexAttribArray(normalAttribute),gl.enableVertexAttribArray(materialAttribute),e.projViewMatUniform=gl.getUniformLocation(e,"projViewMat"),e.viewMatUniform=gl.getUniformLocation(e,"viewMat"),e.normMatUniform=gl.getUniformLocation(e,"normMat"),e!=colorShader&&e!=transparentShader||gl.enableVertexAttribArray(colorAttribute),a)for(let t=0;t<Lights.length;++t)Lights[t].setUniform(e,t);for(let i=0;i<t.materials.length;++i)t.materials[i].setUniform(e,i);gl.uniformMatrix4fv(e.projViewMatUniform,!1,projViewMat),gl.uniformMatrix4fv(e.viewMatUniform,!1,viewMat),gl.uniformMatrix3fv(e.normMatUniform,!1,normMat)}function handleMouseDown(t){zoomEnabled||enableZoom(),mouseDownOrTouchActive=!0,lastMouseX=t.clientX,lastMouseY=t.clientY}let pinchStart,touchStartTime,pinch=!1;function pinchDistance(t){return Math.hypot(t[0].pageX-t[1].pageX,t[0].pageY-t[1].pageY)}function handleTouchStart(t){t.preventDefault(),zoomEnabled||enableZoom();let e=t.targetTouches;swipe=rotate=pinch=!1,zooming||(1!=e.length||mouseDownOrTouchActive||(touchStartTime=(new Date).getTime(),touchId=e[0].identifier,lastMouseX=e[0].pageX,lastMouseY=e[0].pageY),2!=e.length||mouseDownOrTouchActive||(touchId=e[0].identifier,pinchStart=pinchDistance(e),pinch=!0))}function handleMouseUpOrTouchEnd(t){mouseDownOrTouchActive=!1}function rotateScene(t,e,i,a,r){if(t==i&&e==a)return;let[n,s]=arcball([t,-e],[i,-a]);mat4.fromRotation(T,2*r*ArcballFactor*n/Zoom,s),mat4.multiply(rotMat,T,rotMat)}function!
  shiftScene(t,e,i,a){let r=1/Zoom;shift.x+=(i-t)*r*halfCanvasWidth,shift.y-=(a-e)*r*halfCanvasHeight}function panScene(t,e,i,a){orthographic?shiftScene(t,e,i,a):(center.x+=(i-t)*(viewParam.xmax-viewParam.xmin),center.y-=(a-e)*(viewParam.ymax-viewParam.ymin))}function updateViewMatrix(){COBTarget(viewMat,rotMat),mat4.translate(viewMat,viewMat,[center.x,center.y,0]),mat3.fromMat4(viewMat3,viewMat),mat3.invert(normMat,viewMat3),mat4.multiply(projViewMat,projMat,viewMat)}function capzoom(){let t=Math.sqrt(Number.MAX_VALUE),e=1/t;Zoom<=e&&(Zoom=e),Zoom>=t&&(Zoom=t),(zoomRemeshFactor*Zoom<lastZoom||Zoom>zoomRemeshFactor*lastZoom)&&(remesh=!0,lastZoom=Zoom)}function zoomImage(t){let e=zoomStep*halfCanvasHeight*t;const i=Math.log(.1*Number.MAX_VALUE)/Math.log(zoomFactor);Math.abs(e)<i&&(Zoom*=zoomFactor**e,capzoom())}function normMouse(t){let e=t[0],i=t[1],a=Math.hypot(e,i);return a>1&&(denom=1/a,e*=denom,i*=denom),[e,i,Math.sqrt(Math.max(1-i*i-e*e,0))]}function arcball(t,e){let i=normMouse(t),a=normMouse(e),r=dot(i,a);return[r>1?0:r<-1?pi:Math.acos(r),unit(cross(i,a))]}function zoomScene(t,e,i,a){zoomImage(e-a)}const DRAGMODE_ROTATE=1,DRAGMODE_SHIFT=2,DRAGMODE_ZOOM=3,DRAGMODE_PAN=4;function processDrag(t,e,i,a=1){let r;switch(i){case 1:r=rotateScene;break;case 2:r=shiftScene;break;case 3:r=zoomScene;break;case 4:r=panScene;break;default:r=(t,e,i,a)=>{}}r((lastMouseX-halfCanvasWidth)/halfCanvasWidth,(lastMouseY-halfCanvasHeight)/halfCanvasHeight,(t-halfCanvasWidth)/halfCanvasWidth,(e-halfCanvasHeight)/halfCanvasHeight,a),lastMouseX=t,lastMouseY=e,setProjection(),draw()}let zoomEnabled=0;function enableZoom(){zoomEnabled=1,canvas.addEventListener("wheel",handleMouseWheel,!1)}function disableZoom(){zoomEnabled=0,canvas.removeEventListener("wheel",handleMouseWheel,!1)}function handleKey(t){if(zoomEnabled||enableZoom(),embedded&&zoomEnabled&&27==t.keyCode)return void disableZoom();let e=[];switch(t.key){case"x":e=[1,0,0];break;case"y":e=[0,1,0];break;case"z":e=[0,0,1];break;case"h":home();break;case"m":++wireframe,3==wirefr!
 ame&&(wireframe=0),2!=wireframe&&(embedded||deleteShaders(),initShaders()),remesh=!0,draw();break;case"+":case"=":case">":expand();break;case"-":case"_":case"<":shrink()}e.length>0&&(mat4.rotate(rotMat,rotMat,.1,e),updateViewMatrix(),draw())}function setZoom(){capzoom(),setProjection(),draw()}function handleMouseWheel(t){t.preventDefault(),t.deltaY<0?Zoom*=zoomFactor:Zoom/=zoomFactor,setZoom()}function handleMouseMove(t){if(!mouseDownOrTouchActive)return;let e,i=t.clientX,a=t.clientY;e=t.getModifierState("Control")?2:t.getModifierState("Shift")?3:t.getModifierState("Alt")?4:1,processDrag(i,a,e)}let zooming=!1,swipe=!1,rotate=!1;function handleTouchMove(t){if(t.preventDefault(),zooming)return;let e=t.targetTouches;if(!pinch&&1==e.length&&touchId==e[0].identifier){let t=e[0].pageX,i=e[0].pageY,a=t-lastMouseX,r=i-lastMouseY,n=a*a+r*r<=shiftHoldDistance*shiftHoldDistance;if(n&&!swipe&&!rotate&&(new Date).getTime()-touchStartTime>shiftWaitTime&&(navigator.vibrate&&window.navigator.vibrate(vibrateTime),swipe=!0),swipe)processDrag(t,i,2);else if(!n){rotate=!0,processDrag(e[0].pageX,e[0].pageY,1,.5)}}if(pinch&&!swipe&&2==e.length&&touchId==e[0].identifier){let t=pinchDistance(e),i=t-pinchStart;zooming=!0,i*=zoomPinchFactor,i>zoomPinchCap&&(i=zoomPinchCap),i<-zoomPinchCap&&(i=-zoomPinchCap),zoomImage(i/size2),pinchStart=t,swipe=rotate=zooming=!1,setProjection(),draw()}}let pixelShader,materialShader,colorShader,transparentShader,zbuffer=[];function transformVertices(t){let e=viewMat[2],i=viewMat[6],a=viewMat[10];zbuffer.length=t.length;for(let r=0;r<t.length;++r){let n=6*r;zbuffer[r]=e*t[n]+i*t[n+1]+a*t[n+2]}}function drawMaterial0(){drawBuffer(material0Data,pixelShader),material0Data.clear()}function drawMaterial1(){drawBuffer(material1Data,materialShader),material1Data.clear()}function drawMaterial(){drawBuffer(materialData,materialShader),materialData.clear()}function drawColor(){drawBuffer(colorData,colorShader),colorData.clear()}function drawTriangle(){drawBuffer(triangleData,transparentShader),triangleData.rendered!
 =!1,triangleData.clear()}function drawTransparent(){let t=transparentData.indices;if(wireframe>0)return drawBuffer(transparentData,transparentShader,t),void transparentData.clear();if(t.length>0){transformVertices(transparentData.vertices);let e=t.length/3,i=Array(e).fill().map((t,e)=>e);i.sort((function(e,i){let a=3*e;Ia=t[a],Ib=t[a+1],Ic=t[a+2];let r=3*i;return IA=t[r],IB=t[r+1],IC=t[r+2],zbuffer[Ia]+zbuffer[Ib]+zbuffer[Ic]<zbuffer[IA]+zbuffer[IB]+zbuffer[IC]?-1:1}));let a=Array(t.length);for(let r=0;r<e;++r){let e=3*i[r];a[3*r]=t[e],a[3*r+1]=t[e+1],a[3*r+2]=t[e+2]}gl.depthMask(!1),drawBuffer(transparentData,transparentShader,a),transparentData.rendered=!1,gl.depthMask(!0)}transparentData.clear()}function drawBuffers(){drawMaterial0(),drawMaterial1(),drawMaterial(),drawColor(),drawTriangle(),drawTransparent()}function draw(){embedded&&(offscreen.width=canvasWidth,offscreen.height=canvasHeight,setViewport()),gl.clearColor(Background[0],Background[1],Background[2],Background[3]),gl.clear(gl.COLOR_BUFFER_BIT|gl.DEPTH_BUFFER_BIT);for(let t=0;t<P.length;++t)P[t].render();drawBuffers(),embedded&&(context.clearRect(0,0,canvasWidth,canvasHeight),context.drawImage(offscreen,0,0)),0==wireframe&&(remesh=!1)}function setDimensions(t,e,i,a){let r=t/e,n=1/Zoom,s=(i/t+viewportshift[0])*Zoom,o=(a/e+viewportshift[1])*Zoom;if(orthographic){let t=B[0]-b[0],e=B[1]-b[1];if(t<e*r){let t=.5*e*r*n,i=2*t*s,a=e*n*o;viewParam.xmin=-t-i,viewParam.xmax=t-i,viewParam.ymin=b[1]*n-a,viewParam.ymax=B[1]*n-a}else{let e=.5*t/(r*Zoom),i=t*n*s,a=2*e*o;viewParam.xmin=b[0]*n-i,viewParam.xmax=B[0]*n-i,viewParam.ymin=-e-a,viewParam.ymax=e-a}}else{let t=H*n,e=t*r,i=2*e*s,a=2*t*o;viewParam.xmin=-e-i,viewParam.xmax=e-i,viewParam.ymin=-t-a,viewParam.ymax=t-a}}function setProjection(){setDimensions(canvasWidth,canvasHeight,shift.x,shift.y),(orthographic?mat4.ortho:mat4.frustum)(projMat,viewParam.xmin,viewParam.xmax,viewParam.ymin,viewParam.ymax,-viewParam.zmax,-viewParam.zmin),updateViewMatrix()}function initProjection(){H=-Math.tan(.5*angle)*B[2],center.!
 x=center..y=0,center.z=.5*(b[2]+B[2]),lastZoom=Zoom=zoom0,viewParam.zmin=b[2],viewParam.zmax=B[2],shift.x=shift.y=0}function setViewport(){gl.viewportWidth=canvasWidth,gl.viewportHeight=canvasHeight,gl.viewport(.5*(canvas.width-canvasWidth),.5*(canvas.height-canvasHeight),canvasWidth,canvasHeight),gl.scissor(0,0,canvas.width,canvas.height)}function setCanvas(){embedded&&(canvas.width=offscreen.width=canvasWidth,canvas.height=offscreen.height=canvasHeight),size2=Math.hypot(canvasWidth,canvasHeight),halfCanvasWidth=.5*canvas.width,halfCanvasHeight=.5*canvas.height,ArcballFactor=1+8*Math.hypot(viewportmargin[0],viewportmargin[1])/size2}function setsize(t,e){t>maxViewportWidth&&(t=maxViewportWidth),e>maxViewportHeight&&(e=maxViewportHeight),shift.x*=t/canvasWidth,shift.y*=e/canvasHeight,canvasWidth=t,canvasHeight=e,setCanvas(),setViewport(),setProjection(),remesh=!0}function resize(){if(zoom0=Zoom0,absolute&&!embedded)canvasWidth=canvasWidth0*window.devicePixelRatio,canvasHeight=canvasHeight0*window.devicePixelRatio;else{let t=canvasWidth0/canvasHeight0;canvasWidth=Math.max(window.innerWidth-10,10),canvasHeight=Math.max(window.innerHeight-10,10),!orthographic&&canvasWidth<canvasHeight*t&&(zoom0*=canvasWidth/(canvasHeight*t))}canvas.width=canvasWidth,canvas.height=canvasHeight;window.innerWidth,window.innerHeight;viewportshift[0]/=zoom0,viewportshift[1]/=zoom0,setsize(canvasWidth,canvasHeight),redraw()}function expand(){Zoom*=zoomFactor,setZoom()}function shrink(){Zoom/=zoomFactor,setZoom()}class Align{constructor(t,e){if(this.center=t,e){let t=e[0],i=e[1];this.ct=Math.cos(t),this.st=Math.sin(t),this.cp=Math.cos(i),this.sp=Math.sin(i)}}T0(t){return[t[0]+this.center[0],t[1]+this.center[1],t[2]+this.center[2]]}T(t){let e=t[0],i=t[1],a=t[2],r=e*this.ct+a*this.st;return[r*this.cp-i*this.sp+this.center[0],r*this.sp+i*this.cp+this.center[1],-e*this.st+a*this.ct+this.center[2]]}}function Tcorners(t,e,i){let a=[t(e),t([e[0],e[1],i[2]]),t([e[0],i[1],e[2]]),t([e[0],i[1],i[2]]),t([i[0],e[1],e[2]]),t([i[0],e[1],i[2]]),t([i[0],i[1!
 ],e[2]]),t(i)];return[minbound(a),maxbound(a)]}function sphere(t,e,i,r,n){let s,o,h,l,c,d,m=.524670512339254,f=.595936986722291,u=.954967051233925,p=.0820155480083437,v=.996685028842544,g=.0549670512339254,x=.998880711874577,w=.0405017186586849,M=[[[1,0,0],[1,0,m],[f,0,u],[p,0,v],[1,a,0],[1,a,m],[f,a*f,u],[p,a*p,v],[a,1,0],[a,1,m],[a*f,f,u],[a*p,p,v],[0,1,0],[0,1,m],[0,f,u],[0,p,v]],[[p,0,v],[p,a*p,v],[g,0,x],[a*p,p,v],[w,w,1],[.05*a,0,1],[0,p,v],[0,g,x],[0,.05*a,1],[0,0,1]]],b=new Align(t,n);function S(t){let e=Array(t.length);for(let i=0;i<t.length;++i){let a=t[i];e[i]=c([s*a[0],o*a[1],h*a[2]])}return e}n?(l=1,d=0,c=b.T.bind(b)):(l=-1,d=-e,c=b.T0.bind(b));let A=Tcorners(c,[-e,-e,d],[e,e,e]),y=A[0],T=A[1];for(let t=-1;t<=1;t+=2){s=t*e;for(let t=-1;t<=1;t+=2){o=t*e;for(let t=l;t<=1;t+=2){h=t*e;for(let t=0;t<2;++t)P.push(new BezierPatch(S(M[t]),i,r,y,T))}}}}let a=4/3*(Math.sqrt(2)-1);function disk(t,e,i,r,n){let s=1-2*a/3,o=[[1,0,0],[1,-a,0],[a,-1,0],[0,-1,0],[1,a,0],[s,0,0],[0,-s,0],[-a,-1,0],[a,1,0],[0,s,0],[-s,0,0],[-1,-a,0],[0,1,0],[-a,1,0],[-1,a,0],[-1,0,0]],h=new Align(t,n);let l=Tcorners(h.T.bind(h),[-e,-e,0],[e,e,0]);P.push(new BezierPatch(function(t){let i=Array(t.length);for(let a=0;a<t.length;++a){let r=t[a];i[a]=h.T([e*r[0],e*r[1],0])}return i}(o),i,r,l[0],l[1]))}function cylinder(t,e,i,r,n,s,o){let h,l,c=[[1,0,0],[1,0,1/3],[1,0,2/3],[1,0,1],[1,a,0],[1,a,1/3],[1,a,2/3],[1,a,1],[a,1,0],[a,1,1/3],[a,1,2/3],[a,1,1],[0,1,0],[0,1,1/3],[0,1,2/3],[0,1,1]],d=new Align(t,s);function m(t){let e=Array(t.length);for(let a=0;a<t.length;++a){let r=t[a];e[a]=d.T([h*r[0],l*r[1],i*r[2]])}return e}let f=Tcorners(d.T.bind(d),[-e,-e,0],[e,e,i]),u=f[0],p=f[1];for(let t=-1;t<=1;t+=2){h=t*e;for(let t=-1;t<=1;t+=2)l=t*e,P.push(new BezierPatch(m(c),r,n,u,p))}if(o){let e=d.T([0,0,i]);P.push(new BezierCurve([t,e],r,n,t,e))}}function rmf(t,e,i,a,r){class n{constructor(t,e,i){this.p=t,this.r=e,this.t=i,this.s=cross(i,e)}}let s=Number.EPSILON*Math.max(abs2(t),abs2(e),abs2(i),abs2(a));function o(r){if(1==r){let r=[a[0]-i[0],a[1]-i[!
 1],a[2]-i[2]];return abs2(r)>s?unit(r):(r=[2*i[0]-e[0]-a[0],2*i[1]-e[1]-a[1],2*i[2]-e[2]-a[2]],abs2(r)>s?unit(r):[a[0]-t[0]+3*(e[0]-i[0]),a[1]-t[1]+3*(e[1]-i[1]),a[2]-t[2]+3*(e[2]-i[2])])}let n=[a[0]-t[0]+3*(e[0]-i[0]),a[1]-t[1]+3*(e[1]-i[1]),a[2]-t[2]+3*(e[2]-i[2])],o=[2*(t[0]+i[0])-4*e[0],2*(t[1]+i[1])-4*e[1],2*(t[2]+i[2])-4*e[2]],h=[e[0]-t[0],e[1]-t[1],e[2]-t[2]],l=r*r,c=[n[0]*l+o[0]*r+h[0],n[1]*l+o[1]*r+h[1],n[2]*l+o[2]*r+h[2]];return abs2(c)>s?unit(c):(l=2*r,c=[n[0]*l+o[0],n[1]*l+o[1],n[2]*l+o[2]],abs2(c)>s?unit(c):unit(n))}let h=Array(r.length),l=[e[0]-t[0],e[1]-t[1],e[2]-t[2]];abs2(l)<s&&(l=[t[0]-2*e[0]+i[0],t[1]-2*e[1]+i[1],t[2]-2*e[2]+i[2]],abs2(l)<s&&(l=[a[0]-t[0]+3*(e[0]-i[0]),a[1]-t[1]+3*(e[1]-i[1]),a[2]-t[2]+3*(e[2]-i[2])])),l=unit(l);let c=function(t){let e=cross(t,[0,1,0]),i=Number.EPSILON*abs2(t);return abs2(e)>i?unit(e):(e=cross(t,[0,0,1]),abs2(e)>i?unit(e):[1,0,0])}(l);h[0]=new n(t,c,l);for(let s=1;s<r.length;++s){let l=h[s-1],c=r[s],d=1-c,m=d*d,f=m*d,u=3*c;m*=u,d*=u*c;let p=c*c*c,v=[f*t[0]+m*e[0]+d*i[0]+p*a[0],f*t[1]+m*e[1]+d*i[1]+p*a[1],f*t[2]+m*e[2]+d*i[2]+p*a[2]],g=[v[0]-l.p[0],v[1]-l.p[1],v[2]-l.p[2]];if(0!=g[0]||0!=g[1]||0!=g[2]){let t=l.r,e=unit(g),i=l.t,a=dot(e,i),r=[i[0]-2*a*e[0],i[1]-2*a*e[1],i[2]-2*a*e[2]];i=o(c);let d=2*dot(e,t),m=[t[0]-d*e[0],t[1]-d*e[1],t[2]-d*e[2]],f=unit([i[0]-r[0],i[1]-r[1],i[2]-r[2]]),u=2*dot(f,m);m=[m[0]-u*f[0],m[1]-u*f[1],m[2]-u*f[2]],h[s]=new n(v,unit(m),unit(i))}else h[s]=h[s-1]}return h}function tube(t,e,i,r,n,s,o){let h=rmf(t[0],t[1],t[2],t[3],[0,1/3,2/3,1]),l=a*e,c=[[e,0],[e,l],[l,e],[0,e]];function d(e,a,o,l){let d=Array(16);for(let i=0;i<4;++i){let r=h[i],n=r.r[0],s=r.s[0],m=n*e+s*a,f=n*o+s*l;n=r.r[1],s=r.s[1];let u=n*e+s*a,p=n*o+s*l;n=r.r[2],s=r.s[2];let v=n*e+s*a,g=n*o+s*l,x=t[i],w=x[0];w1=x[1],w2=x[2];for(let t=0;t<4;++t){let e=c[t],a=e[0],r=e[1];d[4*i+t]=[m*a+f*r+w,u*a+p*r+w1,v*a+g*r+w2]}}P.push(new BezierPatch(d,i,r,n,s))}d(1,0,0,1),d(0,-1,1,0),d(-1,0,0,-1),d(0,1,-1,0),o&&P.push(new BezierCurve(t,i,r,n,s))}function webGLStart(){canvas=document.ge!
 tElementById("Asymptote"),embedded=window.top.document!=document,initGL(),gl.enable(gl.BLEND),gl.blendFunc(gl.SRC_ALPHA,gl.ONE_MINUS_SRC_ALPHA),gl.enable(gl.DEPTH_TEST),gl.enable(gl.SCISSOR_TEST),canvas.onmousedown=handleMouseDown,document.onmouseup=handleMouseUpOrTouchEnd,document.onmousemove=handleMouseMove,canvas.onkeydown=handleKey,embedded||enableZoom(),canvas.addEventListener("touchstart",handleTouchStart,!1),canvas.addEventListener("touchend",handleMouseUpOrTouchEnd,!1),canvas.addEventListener("touchcancel",handleMouseUpOrTouchEnd,!1),canvas.addEventListener("touchleave",handleMouseUpOrTouchEnd,!1),canvas.addEventListener("touchmove",handleTouchMove,!1),document.addEventListener("keydown",handleKey,!1),canvasWidth0=canvasWidth,canvasHeight0=canvasHeight,mat4.identity(rotMat),0!=window.innerWidth&&0!=window.innerHeight&&resize(),window.addEventListener("resize",resize,!1)}

Modified: trunk/Build/source/utils/asymptote/bbox.h
===================================================================
--- trunk/Build/source/utils/asymptote/bbox.h	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/bbox.h	2021-01-02 16:31:31 UTC (rev 57291)
@@ -19,7 +19,7 @@
   return (a < b) ? a : b;
 }
 
-template<class T>  
+template<class T>
 inline T max(T a, T b)
 {
   return (a > b) ? a : b;
@@ -32,7 +32,7 @@
   double bottom;
   double right;
   double top;
-  
+
   // Start bbox about the origin
   bbox()
     : empty(true), left(0.0), bottom(0.0), right(0.0), top(0.0)
@@ -54,7 +54,7 @@
   bool nonempty() const {
     return !empty;
   }
- 
+
   // Add a point to a bbox
   bbox add(const pair& z)
   {
@@ -67,9 +67,9 @@
     }
     else {
       if (x < left)
-        left = x;  
+        left = x;
       else if (x > right)
-        right = x;  
+        right = x;
       if (y < bottom)
         bottom = y;
       else if (y > top)
@@ -84,9 +84,9 @@
   {
     double x = z.getx(), y = z.gety();
     if (x < left)
-      left = x;  
+      left = x;
     else if (x > right)
-      right = x;  
+      right = x;
     if (y < bottom)
       bottom = y;
     else if (y > top)
@@ -99,11 +99,11 @@
     double x = z.getx(), y = z.gety();
 
     if (x < left) {
-      left = x;  
+      left = x;
       times.left = t;
     }
     else if (x > right) {
-      right = x;  
+      right = x;
       times.right = t;
     }
     if (y < bottom) {
@@ -170,10 +170,10 @@
     right = min(right, b.right);
     bottom = max(bottom, b.bottom);
     top = min(top, b.top);
-    if(left > right || bottom > top) 
+    if(left > right || bottom > top)
       *this=bbox();
   }
-  
+
   void shift(const pair& p) {
     left += p.getx();
     right += p.getx();
@@ -180,24 +180,24 @@
     bottom += p.gety();
     top += p.gety();
   }
-  
+
   pair Min() const {
     return pair(left,bottom);
   }
-  
+
   pair Max() const {
     return pair(right,top);
   }
-  
+
   double diameter() {
     return (Max()-Min()).length();
   }
-  
+
   bbox LowRes() const
   {
     return bbox(floor(left),floor(bottom),ceil(right),ceil(top));
   }
-  
+
   friend ostream& operator<< (ostream& out, const bbox& b)
   {
     out << b.left << " " << b.bottom << " " << b.right << " " << b.top;

Modified: trunk/Build/source/utils/asymptote/bbox3.h
===================================================================
--- trunk/Build/source/utils/asymptote/bbox3.h	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/bbox3.h	2021-01-02 16:31:31 UTC (rev 57291)
@@ -25,7 +25,7 @@
   double right;
   double top;
   double far;
-  
+
   // Start bbox3 about the origin
   bbox3()
     : empty(true), left(0.0), bottom(0.0), near(0.0),
@@ -60,7 +60,7 @@
       right(M.getx()),    top(M.gety()), far(M.getz())
   {
   }
-  
+
   // Add a point to a bbox3
   void add(const triple& v)
   {
@@ -77,9 +77,9 @@
     }
     else {
       if(x < left)
-        left = x;  
+        left = x;
       else if(x > right)
-        right = x;  
+        right = x;
       if(y < bottom)
         bottom = y;
       else if(y > top)
@@ -95,9 +95,9 @@
   void addnonempty(double x, double y, double z)
   {
     if(x < left)
-      left = x;  
+      left = x;
     else if(x > right)
-      right = x;  
+      right = x;
     if(y < bottom)
       bottom = y;
     else if(y > top)
@@ -113,9 +113,9 @@
   {
     double x=v.getx();
     if(x < left)
-      left = x;  
+      left = x;
     else if(x > right)
-      right = x;  
+      right = x;
     double y=v.gety();
     if(y < bottom)
       bottom = y;
@@ -135,11 +135,11 @@
     double x = v.getx(), y = v.gety(), z = v.getz();
 
     if(x < left) {
-      left = x;  
+      left = x;
       times.left = t;
     }
     else if(x > right) {
-      right = x;  
+      right = x;
       times.right = t;
     }
     if(y < bottom) {
@@ -169,25 +169,25 @@
   triple Min() const {
     return triple(left,bottom,near);
   }
-  
+
   triple Max() const {
     return triple(right,top,far);
   }
-  
+
   pair Min2() const {
     return pair(left,bottom);
   }
-  
+
   pair Max2() const {
     return pair(right,top);
   }
-  
+
   friend ostream& operator << (ostream& out, const bbox3& b)
   {
     out << "Min " << b.Min() << " Max " << b.Max();
     return out;
   }
-  
+
 };
 
 } // namespace camp

Modified: trunk/Build/source/utils/asymptote/beziercurve.cc
===================================================================
--- trunk/Build/source/utils/asymptote/beziercurve.cc	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/beziercurve.cc	2021-01-02 16:31:31 UTC (rev 57291)
@@ -16,7 +16,7 @@
 {
   this->res=res;
   res2=res*res;
-  
+
   MaterialIndex=materialIndex;
 }
 
@@ -25,7 +25,7 @@
   return dot(bP,bP)*bPP-dot(bP,bPP)*bP;
 }
 
-void BezierCurve::render(const triple *p, bool straight) 
+void BezierCurve::render(const triple *p, bool straight)
 {
   triple p0=p[0];
   triple p3=p[3];
@@ -52,7 +52,7 @@
     render(p,i0,i3);
   append();
 }
-  
+
 // Use a uniform partition to draw a Bezier curve.
 // p is an array of 4 triples representing the control points.
 // Ii are the vertex indices.
@@ -77,13 +77,13 @@
     triple m3=0.5*(m0+m1);
     triple m4=0.5*(m1+m2);
     triple m5=0.5*(m3+m4);
-      
+
     triple s0[]={p0,m0,m3,m5};
     triple s1[]={m5,m4,m2,p3};
-      
+
     triple n0=normal(bezierPh(p0,p1,p2,p3),bezierPPh(p0,p1,p2,p3));
     GLuint i0=data.vertex(m5,n0);
-      
+
     render(s0,I0,i0);
     render(s1,i0,I1);
   }

Modified: trunk/Build/source/utils/asymptote/beziercurve.h
===================================================================
--- trunk/Build/source/utils/asymptote/beziercurve.h	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/beziercurve.h	2021-01-02 16:31:31 UTC (rev 57291)
@@ -22,9 +22,9 @@
   vertexBuffer data;
   double res,res2;
   bool Onscreen;
-  
+
   void init(double res);
-    
+
   // Approximate bounds by bounding box of control polyhedron.
   bool offscreen(size_t n, const triple *v) {
     if(bbox2(n,v).offscreen()) {
@@ -36,28 +36,33 @@
 
   void render(const triple *p, bool straight);
   void render(const triple *p, GLuint I0, GLuint I1);
-  
+
   void append() {
     material1Data.append(data);
   }
-  
+
+  void notRendered() {
+    material1Data.rendered=false;
+  }
+
   void queue(const triple *g, bool straight, double ratio) {
     data.clear();
+    notRendered();
     Onscreen=true;
     init(pixel*ratio);
     render(g,straight);
   }
-  
+
 };
 
 struct Pixel
 {
   vertexBuffer data;
-  
+
   void append() {
     material0Data.append0(data);
   }
-  
+
   void queue(const triple& p, double width) {
     data.clear();
     MaterialIndex=materialIndex;
@@ -64,7 +69,7 @@
     data.indices.push_back(data.vertex0(p,width));
     append();
   }
-  
+
   void draw();
 };
 

Modified: trunk/Build/source/utils/asymptote/bezierpatch.cc
===================================================================
--- trunk/Build/source/utils/asymptote/bezierpatch.cc	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/bezierpatch.cc	2021-01-02 16:31:31 UTC (rev 57291)
@@ -54,12 +54,12 @@
 
 const double FillFactor=0.1;
 
-inline int sgn1(double x) 
+inline int sgn1(double x)
 {
   return x >= 0.0 ? 1 : -1;
 }
 
-inline int sgn(double x) 
+inline int sgn(double x)
 {
   return (x > 0.0 ? 1 : (x < 0.0 ? -1 : 0));
 }
@@ -94,7 +94,7 @@
   int sa=sgn(orient3d(A,b,c,B));
   int sb=sgn(orient3d(A,c,a,B));
   int sc=sgn(orient3d(A,a,b,B));
-  return sa == sb && sb == sc; 
+  return sa == sb && sb == sc;
 }
 
 // returns true iff triangle abc is pierced by an edge of triangle ABC
@@ -114,7 +114,7 @@
     if(pierce(a,b,c,C,A)) return true;
   }
   return false;
-}  
+}
 
 // returns true iff triangle abc intersects triangle ABC
 bool intersect3D(const double *a, const double *b, const double *c,
@@ -142,7 +142,7 @@
   double denom=n[0]*(Q[0]-P[0])+n[1]*(Q[1]-P[1])+n[2]*(Q[2]-P[2]);
   return denom == 0 ? DBL_MAX : (d-n[0]*P[0]-n[1]*P[1]-n[2]*P[2])/denom;
 }
-                    
+
 inline triple interp(const double *a, const double *b, double t)
 {
   return triple(a[0]+t*(b[0]-a[0]),a[1]+t*(b[1]-a[1]),a[2]+t*(b[2]-a[2]));
@@ -163,7 +163,7 @@
 
 unsigned n;
 unsigned int count;
-  
+
 // Sort nonintersecting triangles by depth.
 int compare(const void *p, const void *P)
 {
@@ -174,29 +174,29 @@
   unsigned IA=((GLuint *) P)[0];
   unsigned IB=((GLuint *) P)[1];
   unsigned IC=((GLuint *) P)[2];
-  
-  return zbuffer[Ia]+zbuffer[Ib]+zbuffer[Ic] < 
+
+  return zbuffer[Ia]+zbuffer[Ib]+zbuffer[Ic] <
     zbuffer[IA]+zbuffer[IB]+zbuffer[IC] ? -1 : 1;
-  
+
   /*
-  double a[]={xbuffer[Ia],ybuffer[Ia],zbuffer[Ia]};
-  double b[]={xbuffer[Ib],ybuffer[Ib],zbuffer[Ib]};
-  double c[]={xbuffer[Ic],ybuffer[Ic],zbuffer[Ic]};
-      
-  double A[]={xbuffer[IA],ybuffer[IA],zbuffer[IA]};
-  double B[]={xbuffer[IB],ybuffer[IB],zbuffer[IB]};
-  double C[]={xbuffer[IC],ybuffer[IC],zbuffer[IC]};
+    double a[]={xbuffer[Ia],ybuffer[Ia],zbuffer[Ia]};
+    double b[]={xbuffer[Ib],ybuffer[Ib],zbuffer[Ib]};
+    double c[]={xbuffer[Ic],ybuffer[Ic],zbuffer[Ic]};
 
-  double viewpoint[]={0,0,100000};
-  
-  double sa=-orient3d(A,B,C,a);
-  double sb=-orient3d(A,B,C,b);
-  double sc=-orient3d(A,B,C,c);
-  double s=min(sa,sb,sc);
-  double S=max(sa,sb,sc);
-  double eps=1000;
+    double A[]={xbuffer[IA],ybuffer[IA],zbuffer[IA]};
+    double B[]={xbuffer[IB],ybuffer[IB],zbuffer[IB]};
+    double C[]={xbuffer[IC],ybuffer[IC],zbuffer[IC]};
 
-  if(s < -eps && S > eps) { //swap
+    double viewpoint[]={0,0,100000};
+
+    double sa=-orient3d(A,B,C,a);
+    double sb=-orient3d(A,B,C,b);
+    double sc=-orient3d(A,B,C,c);
+    double s=min(sa,sb,sc);
+    double S=max(sa,sb,sc);
+    double eps=1000;
+
+    if(s < -eps && S > eps) { //swap
     double sA=-orient3d(a,b,c,A);
     double sB=-orient3d(a,b,c,B);
     double sC=-orient3d(a,b,c,C);
@@ -206,12 +206,12 @@
     int sz=sgn1(orient3d(a,b,c,viewpoint));
     if(S < -eps) return -sz;
     if(S > eps) return sz;
-  }
-  if(S < -s) S=s;
-  int sz=sgn1(orient3d(A,B,C,viewpoint));
-  if(S < -eps) return sz;
-  if(S > eps) return -sz;
-  return a[2]+b[2]+c[2] < A[2]+B[2]+C[2] ? -1 : 1;
+    }
+    if(S < -s) S=s;
+    int sz=sgn1(orient3d(A,B,C,viewpoint));
+    if(S < -eps) return sz;
+    if(S > eps) return -sz;
+    return a[2]+b[2]+c[2] < A[2]+B[2]+C[2] ? -1 : 1;
   */
 }
 
@@ -220,32 +220,32 @@
            double *a, double *b, double *c, double *N, double *A) {
   double td=intersect(a,b,N,A);
   double te=intersect(a,c,N,A);
-      
+
   triple d=interp(a,b,td);
   triple e=interp(a,c,te);
-      
+
   GLuint Ia=tstride*ia;
   GLuint Ib=tstride*ib;
   GLuint Ic=tstride*ic;
-    
+
   triple na=triple(V[Ia+3],V[Ia+4],V[Ia+5]);
   triple nb=triple(V[Ib+3],V[Ib+4],V[Ib+5]);
   triple nc=triple(V[Ic+3],V[Ic+4],V[Ic+5]);
-  
+
   triple nd=interp(na,nb,td);
   triple ne=interp(na,nc,te);
-      
+
   GLuint id,ie;
-  
+
   if(colors) {
     GLfloat *ca=&V[Ia+6];
     GLfloat *cb=&V[Ib+6];
     GLfloat *cc=&V[Ic+6];
-        
+
     GLfloat cd[4],ce[4];
     interp(cd,ca,cb,td);
     interp(ce,ca,cc,te);
-        
+
     id=data.Vertex(d,nd,cd);
     ie=data.Vertex(e,ne,ce);
   } else {
@@ -252,15 +252,15 @@
     id=data.Vertex(d,nd);
     ie=data.Vertex(e,ne);
   }
-      
+
   I[i3]=ia;
   I[i3+1]=id;
   I[i3+2]=ie;
-      
+
   I.push_back(id);
   I.push_back(ib);
   I.push_back(ie);
-      
+
   I.push_back(ie);
   I.push_back(ib);
   I.push_back(ic);
@@ -274,10 +274,10 @@
 
   MaterialIndex=transparent ?
     (color ? -1-materialIndex : 1+materialIndex) : materialIndex;
-  
+
   pvertex=transparent ? &vertexBuffer::tvertex : &vertexBuffer::vertex;
 }
-    
+
 void BezierPatch::render(const triple *p, bool straight, GLfloat *c0)
 {
   triple p0=p[0];
@@ -285,7 +285,7 @@
   for(unsigned i=1; i < 16; ++i)
     epsilon=max(epsilon,abs2(p[i]-p0));
   epsilon *= DBL_EPSILON;
-    
+
   triple p3=p[3];
   triple p12=p[12];
   triple p15=p[15];
@@ -295,36 +295,36 @@
     n0=normal(p3,p[2],p[1],p0,p[13],p[14],p15);
     if(abs2(n0) <= epsilon) n0=normal(p15,p[11],p[7],p3,p[4],p[8],p12);
   }
-  
+
   triple n1=normal(p0,p[4],p[8],p12,p[13],p[14],p15);
   if(abs2(n1) <= epsilon) {
     n1=normal(p0,p[4],p[8],p12,p[11],p[7],p3);
     if(abs2(n1) <= epsilon) n1=normal(p3,p[2],p[1],p0,p[13],p[14],p15);
   }
-    
+
   triple n2=normal(p12,p[13],p[14],p15,p[11],p[7],p3);
   if(abs2(n2) <= epsilon) {
     n2=normal(p12,p[13],p[14],p15,p[2],p[1],p0);
     if(abs2(n2) <= epsilon) n2=normal(p0,p[4],p[8],p12,p[11],p[7],p3);
   }
-    
+
   triple n3=normal(p15,p[11],p[7],p3,p[2],p[1],p0);
   if(abs2(n3) <= epsilon) {
     n3=normal(p15,p[11],p[7],p3,p[4],p[8],p12);
     if(abs2(n3) <= epsilon) n3=normal(p12,p[13],p[14],p15,p[2],p[1],p0);
   }
-    
+
   GLuint i0,i1,i2,i3;
   if(color) {
     GLfloat *c1=c0+4;
     GLfloat *c2=c0+8;
     GLfloat *c3=c0+12;
-    
+
     i0=data.Vertex(p0,n0,c0);
     i1=data.Vertex(p12,n1,c1);
     i2=data.Vertex(p15,n2,c2);
     i3=data.Vertex(p3,n3,c3);
-      
+
     if(!straight)
       render(p,i0,i1,i2,i3,p0,p12,p15,p3,false,false,false,false,
              c0,c1,c2,c3);
@@ -333,11 +333,11 @@
     i1=(data.*pvertex)(p12,n1);
     i2=(data.*pvertex)(p15,n2);
     i3=(data.*pvertex)(p3,n3);
-    
+
     if(!straight)
       render(p,i0,i1,i2,i3,p0,p12,p15,p3,false,false,false,false);
   }
-    
+
   if(straight) {
     std::vector<GLuint> &q=data.indices;
     triple Pa[]={p0,p12,p15};
@@ -382,14 +382,14 @@
       q.push_back(I3);
     }
   } else { // Patch is not flat
-   if(offscreen(16,p)) return;
+    if(offscreen(16,p)) return;
 
-   /* Control points are indexed as follows:
+    /* Control points are indexed as follows:
 
-       Coordinate
+        Coordinate
        +-----
         Index
-         
+
         03    13    23    33
        +-----+-----+-----+
        |3    |7    |11   |15
@@ -406,7 +406,7 @@
        +-----+-----+-----+
         0     4     8     12
 
-   */
+    */
 
     triple p0=p[0];
     triple p3=p[3];
@@ -413,209 +413,208 @@
     triple p12=p[12];
     triple p15=p[15];
 
-   if(d.getx() < res2) { // flat in horizontal direction; split vertically
-     /*
-       P refers to a corner
-       m refers to a midpoint
-       s refers to a subpatch
+    if(d.getx() < res2) { // flat in horizontal direction; split vertically
+      /*
+        P refers to a corner
+        m refers to a midpoint
+        s refers to a subpatch
 
-       +--------+--------+
-       |P3             P2|
-       |                 |
-       |       s1        |
-       |                 |
-       |                 |
-    m1 +-----------------+ m0
-       |                 |
-       |                 |
-       |       s0        |
-       |                 |
-       |P0             P1|
-       +-----------------+
+        +--------+--------+
+        |P3             P2|
+        |                 |
+        |       s1        |
+        |                 |
+        |                 |
+     m1 +-----------------+ m0
+        |                 |
+        |                 |
+        |       s0        |
+        |                 |
+        |P0             P1|
+        +-----------------+
 
-     */
+      */
 
-     Split3 c0(p0,p[1],p[2],p3);
-     Split3 c1(p[4],p[5],p[6],p[7]);
-     Split3 c2(p[8],p[9],p[10],p[11]);
-     Split3 c3(p12,p[13],p[14],p15);
+      Split3 c0(p0,p[1],p[2],p3);
+      Split3 c1(p[4],p[5],p[6],p[7]);
+      Split3 c2(p[8],p[9],p[10],p[11]);
+      Split3 c3(p12,p[13],p[14],p15);
 
-     triple s0[]={p0  ,c0.m0,c0.m3,c0.m5,
-                  p[4],c1.m0,c1.m3,c1.m5,
-                  p[8],c2.m0,c2.m3,c2.m5,
-                  p12 ,c3.m0,c3.m3,c3.m5};
+      triple s0[]={p0  ,c0.m0,c0.m3,c0.m5,
+                   p[4],c1.m0,c1.m3,c1.m5,
+                   p[8],c2.m0,c2.m3,c2.m5,
+                   p12 ,c3.m0,c3.m3,c3.m5};
 
-     triple s1[]={c0.m5,c0.m4,c0.m2,p3,
-                  c1.m5,c1.m4,c1.m2,p[7],
-                  c2.m5,c2.m4,c2.m2,p[11],
-                  c3.m5,c3.m4,c3.m2,p15};
+      triple s1[]={c0.m5,c0.m4,c0.m2,p3,
+                   c1.m5,c1.m4,c1.m2,p[7],
+                   c2.m5,c2.m4,c2.m2,p[11],
+                   c3.m5,c3.m4,c3.m2,p15};
 
-     triple n0=normal(s0[12],s0[13],s0[14],s0[15],s0[11],s0[7],s0[3]);
-     if(abs2(n0) <= epsilon) {
-       n0=normal(s0[12],s0[13],s0[14],s0[15],s0[2],s0[1],s0[0]);
-       if(abs2(n0) <= epsilon)
-         n0=normal(s0[0],s0[4],s0[8],s0[12],s0[11],s0[7],s0[3]);
-     }
+      triple n0=normal(s0[12],s0[13],s0[14],s0[15],s0[11],s0[7],s0[3]);
+      if(abs2(n0) <= epsilon) {
+        n0=normal(s0[12],s0[13],s0[14],s0[15],s0[2],s0[1],s0[0]);
+        if(abs2(n0) <= epsilon)
+          n0=normal(s0[0],s0[4],s0[8],s0[12],s0[11],s0[7],s0[3]);
+      }
 
-     triple n1=normal(s1[3],s1[2],s1[1],s1[0],s1[4],s1[8],s1[12]);
-     if(abs2(n1) <= epsilon) {
-       n1=normal(s1[3],s1[2],s1[1],s1[0],s1[13],s1[14],s1[15]);
-       if(abs2(n1) <= epsilon)
-         n1=normal(s1[15],s1[11],s1[7],s1[3],s1[4],s1[8],s1[12]);
-     }
+      triple n1=normal(s1[3],s1[2],s1[1],s1[0],s1[4],s1[8],s1[12]);
+      if(abs2(n1) <= epsilon) {
+        n1=normal(s1[3],s1[2],s1[1],s1[0],s1[13],s1[14],s1[15]);
+        if(abs2(n1) <= epsilon)
+          n1=normal(s1[15],s1[11],s1[7],s1[3],s1[4],s1[8],s1[12]);
+      }
 
-     // A kludge to remove subdivision cracks, only applied the first time
-     // an edge is found to be flat before the rest of the subpatch is.
+      // A kludge to remove subdivision cracks, only applied the first time
+      // an edge is found to be flat before the rest of the subpatch is.
 
-     triple m0=0.5*(P1+P2);
-     if(!flat1) {
-       if((flat1=Straightness(p12,p[13],p[14],p15) < res2))
-         m0 -= Epsilon*unit(differential(s1[12],s1[8],s1[4],s1[0]));
-       else m0=s0[15];
-     }
+      triple m0=0.5*(P1+P2);
+      if(!flat1) {
+        if((flat1=Straightness(p12,p[13],p[14],p15) < res2))
+          m0 -= Epsilon*unit(differential(s1[12],s1[8],s1[4],s1[0]));
+        else m0=s0[15];
+      }
 
-     triple m1=0.5*(P3+P0);
-     if(!flat3) {
-       if((flat3=Straightness(p0,p[1],p[2],p3) < res2))
-         m1 -= Epsilon*unit(differential(s0[3],s0[7],s0[11],s0[15]));
-       else m1=s1[0];
-     }
+      triple m1=0.5*(P3+P0);
+      if(!flat3) {
+        if((flat3=Straightness(p0,p[1],p[2],p3) < res2))
+          m1 -= Epsilon*unit(differential(s0[3],s0[7],s0[11],s0[15]));
+        else m1=s1[0];
+      }
 
-     if(color) {
-       GLfloat c0[4],c1[4];
-       for(size_t i=0; i < 4; ++i) {
-         c0[i]=0.5*(C1[i]+C2[i]);
-         c1[i]=0.5*(C3[i]+C0[i]);
-       }
+      if(color) {
+        GLfloat c0[4],c1[4];
+        for(size_t i=0; i < 4; ++i) {
+          c0[i]=0.5*(C1[i]+C2[i]);
+          c1[i]=0.5*(C3[i]+C0[i]);
+        }
 
-       GLuint i0=data.Vertex(m0,n0,c0);
-       GLuint i1=data.Vertex(m1,n1,c1);
+        GLuint i0=data.Vertex(m0,n0,c0);
+        GLuint i1=data.Vertex(m1,n1,c1);
 
-       render(s0,I0,I1,i0,i1,P0,P1,m0,m1,flat0,flat1,false,flat3,C0,C1,c0,c1);
-       render(s1,i1,i0,I2,I3,m1,m0,P2,P3,false,flat1,flat2,flat3,c1,c0,C2,C3);
-     } else {
-       GLuint i0=(data.*pvertex)(m0,n0);
-       GLuint i1=(data.*pvertex)(m1,n1);
+        render(s0,I0,I1,i0,i1,P0,P1,m0,m1,flat0,flat1,false,flat3,C0,C1,c0,c1);
+        render(s1,i1,i0,I2,I3,m1,m0,P2,P3,false,flat1,flat2,flat3,c1,c0,C2,C3);
+      } else {
+        GLuint i0=(data.*pvertex)(m0,n0);
+        GLuint i1=(data.*pvertex)(m1,n1);
 
-       render(s0,I0,I1,i0,i1,P0,P1,m0,m1,flat0,flat1,false,flat3);
-       render(s1,i1,i0,I2,I3,m1,m0,P2,P3,false,flat1,flat2,flat3);
-     }
-     return;
-   }
-   if(d.gety() < res2) { // flat in vertical direction; split horizontally
-     /*
-       P refers to a corner
-       m refers to a midpoint
-       s refers to a subpatch
-         
-                m1
-       +--------+--------+
-       |P3      |      P2|
-       |        |        |
-       |        |        |
-       |        |        |
-       |        |        |
-       |   s0   |   s1   |
-       |        |        |
-       |        |        |
-       |        |        |
-       |        |        |
-       |P0      |      P1|
-       +--------+--------+
-                m0
+        render(s0,I0,I1,i0,i1,P0,P1,m0,m1,flat0,flat1,false,flat3);
+        render(s1,i1,i0,I2,I3,m1,m0,P2,P3,false,flat1,flat2,flat3);
+      }
+      return;
+    }
+    if(d.gety() < res2) { // flat in vertical direction; split horizontally
+      /*
+        P refers to a corner
+        m refers to a midpoint
+        s refers to a subpatch
 
-     */
+                 m1
+        +--------+--------+
+        |P3      |      P2|
+        |        |        |
+        |        |        |
+        |        |        |
+        |        |        |
+        |   s0   |   s1   |
+        |        |        |
+        |        |        |
+        |        |        |
+        |        |        |
+        |P0      |      P1|
+        +--------+--------+
+                 m0
+      */
 
-     Split3 c0(p0,p[4],p[8],p12);
-     Split3 c1(p[1],p[5],p[9],p[13]);
-     Split3 c2(p[2],p[6],p[10],p[14]);
-     Split3 c3(p3,p[7],p[11],p15);
+      Split3 c0(p0,p[4],p[8],p12);
+      Split3 c1(p[1],p[5],p[9],p[13]);
+      Split3 c2(p[2],p[6],p[10],p[14]);
+      Split3 c3(p3,p[7],p[11],p15);
 
-     triple s0[]={p0,p[1],p[2],p3,
-                  c0.m0,c1.m0,c2.m0,c3.m0,
-                  c0.m3,c1.m3,c2.m3,c3.m3,
-                  c0.m5,c1.m5,c2.m5,c3.m5};
+      triple s0[]={p0,p[1],p[2],p3,
+                   c0.m0,c1.m0,c2.m0,c3.m0,
+                   c0.m3,c1.m3,c2.m3,c3.m3,
+                   c0.m5,c1.m5,c2.m5,c3.m5};
 
-     triple s1[]={c0.m5,c1.m5,c2.m5,c3.m5,
-                  c0.m4,c1.m4,c2.m4,c3.m4,
-                  c0.m2,c1.m2,c2.m2,c3.m2,
-                  p12,p[13],p[14],p15};
+      triple s1[]={c0.m5,c1.m5,c2.m5,c3.m5,
+                   c0.m4,c1.m4,c2.m4,c3.m4,
+                   c0.m2,c1.m2,c2.m2,c3.m2,
+                   p12,p[13],p[14],p15};
 
-     triple n0=normal(s0[0],s0[4],s0[8],s0[12],s0[13],s0[14],s0[15]);
-     if(abs2(n0) <= epsilon) {
-       n0=normal(s0[0],s0[4],s0[8],s0[12],s0[11],s0[7],s0[3]);
-       if(abs2(n0) <= epsilon)
-         n0=normal(s0[3],s0[2],s0[1],s0[0],s0[13],s0[14],s0[15]);
-     }
+      triple n0=normal(s0[0],s0[4],s0[8],s0[12],s0[13],s0[14],s0[15]);
+      if(abs2(n0) <= epsilon) {
+        n0=normal(s0[0],s0[4],s0[8],s0[12],s0[11],s0[7],s0[3]);
+        if(abs2(n0) <= epsilon)
+          n0=normal(s0[3],s0[2],s0[1],s0[0],s0[13],s0[14],s0[15]);
+      }
 
-     triple n1=normal(s1[15],s1[11],s1[7],s1[3],s1[2],s1[1],s1[0]);
-     if(abs2(n1) <= epsilon) {
-       n1=normal(s1[15],s1[11],s1[7],s1[3],s1[4],s1[8],s1[12]);
-       if(abs2(n1) <= epsilon)
-         n1=normal(s1[12],s1[13],s1[14],s1[15],s1[2],s1[1],s1[0]);
-     }
+      triple n1=normal(s1[15],s1[11],s1[7],s1[3],s1[2],s1[1],s1[0]);
+      if(abs2(n1) <= epsilon) {
+        n1=normal(s1[15],s1[11],s1[7],s1[3],s1[4],s1[8],s1[12]);
+        if(abs2(n1) <= epsilon)
+          n1=normal(s1[12],s1[13],s1[14],s1[15],s1[2],s1[1],s1[0]);
+      }
 
-     // A kludge to remove subdivision cracks, only applied the first time
-     // an edge is found to be flat before the rest of the subpatch is.
+      // A kludge to remove subdivision cracks, only applied the first time
+      // an edge is found to be flat before the rest of the subpatch is.
 
-     triple m0=0.5*(P0+P1);
-     if(!flat0) {
-       if((flat0=Straightness(p0,p[4],p[8],p12) < res2))
-         m0 -= Epsilon*unit(differential(s1[0],s1[1],s1[2],s1[3]));
-       else m0=s0[12];
-     }
+      triple m0=0.5*(P0+P1);
+      if(!flat0) {
+        if((flat0=Straightness(p0,p[4],p[8],p12) < res2))
+          m0 -= Epsilon*unit(differential(s1[0],s1[1],s1[2],s1[3]));
+        else m0=s0[12];
+      }
 
-     triple m1=0.5*(P2+P3);
-     if(!flat2) {
-       if((flat2=Straightness(p15,p[11],p[7],p3) < res2))
-         m1 -= Epsilon*unit(differential(s0[15],s0[14],s0[13],s0[12]));
-       else m1=s1[3];
-     }
+      triple m1=0.5*(P2+P3);
+      if(!flat2) {
+        if((flat2=Straightness(p15,p[11],p[7],p3) < res2))
+          m1 -= Epsilon*unit(differential(s0[15],s0[14],s0[13],s0[12]));
+        else m1=s1[3];
+      }
 
-     if(color) {
-       GLfloat c0[4],c1[4];
-       for(size_t i=0; i < 4; ++i) {
-         c0[i]=0.5*(C0[i]+C1[i]);
-         c1[i]=0.5*(C2[i]+C3[i]);
-       }
+      if(color) {
+        GLfloat c0[4],c1[4];
+        for(size_t i=0; i < 4; ++i) {
+          c0[i]=0.5*(C0[i]+C1[i]);
+          c1[i]=0.5*(C2[i]+C3[i]);
+        }
 
-       GLuint i0=data.Vertex(m0,n0,c0);
-       GLuint i1=data.Vertex(m1,n1,c1);
+        GLuint i0=data.Vertex(m0,n0,c0);
+        GLuint i1=data.Vertex(m1,n1,c1);
 
-       render(s0,I0,i0,i1,I3,P0,m0,m1,P3,flat0,false,flat2,flat3,C0,c0,c1,C3);
-       render(s1,i0,I1,I2,i1,m0,P1,P2,m1,flat0,flat1,flat2,false,c0,C1,C2,c1);
-     } else {
-       GLuint i0=(data.*pvertex)(m0,n0);
-       GLuint i1=(data.*pvertex)(m1,n1);
+        render(s0,I0,i0,i1,I3,P0,m0,m1,P3,flat0,false,flat2,flat3,C0,c0,c1,C3);
+        render(s1,i0,I1,I2,i1,m0,P1,P2,m1,flat0,flat1,flat2,false,c0,C1,C2,c1);
+      } else {
+        GLuint i0=(data.*pvertex)(m0,n0);
+        GLuint i1=(data.*pvertex)(m1,n1);
 
-       render(s0,I0,i0,i1,I3,P0,m0,m1,P3,flat0,false,flat2,flat3);
-       render(s1,i0,I1,I2,i1,m0,P1,P2,m1,flat0,flat1,flat2,false);
-     }
-     return;
-   }
-   /*
-       Horizontal and vertical subdivision:
-       P refers to a corner
-       m refers to a midpoint
-       s refers to a subpatch
+        render(s0,I0,i0,i1,I3,P0,m0,m1,P3,flat0,false,flat2,flat3);
+        render(s1,i0,I1,I2,i1,m0,P1,P2,m1,flat0,flat1,flat2,false);
+      }
+      return;
+    }
+    /*
+      Horizontal and vertical subdivision:
+      P refers to a corner
+      m refers to a midpoint
+      s refers to a subpatch
 
-                m2
-       +--------+--------+
-       |P3      |      P2|
-       |        |        |
-       |   s3   |   s2   |
-       |        |        |
-       |        | m4     |
-    m3 +--------+--------+ m1
-       |        |        |
-       |        |        |
-       |   s0   |   s1   |
-       |        |        |
-       |P0      |      P1|
-       +--------+--------+
-                m0
+               m2
+      +--------+--------+
+      |P3      |      P2|
+      |        |        |
+      |   s3   |   s2   |
+      |        |        |
+      |        | m4     |
+   m3 +--------+--------+ m1
+      |        |        |
+      |        |        |
+      |   s0   |   s1   |
+      |        |        |
+      |P0      |      P1|
+      +--------+--------+
+               m0
     */
-    
+
     // Subdivide patch:
     Split3 c0(p0,p[1],p[2],p3);
     Split3 c1(p[4],p[5],p[6],p[7]);
@@ -638,9 +637,9 @@
                  c7.m2,c8.m2,c9.m2,c10.m2,c3.m5,c3.m4,c3.m2,p15};
     triple s3[]={c0.m5,c0.m4,c0.m2,p3,c7.m0,c8.m0,c9.m0,c10.m0,
                  c7.m3,c8.m3,c9.m3,c10.m3,c7.m5,c8.m5,c9.m5,c10.m5};
-      
+
     triple m4=s0[15];
-      
+
     triple n0=normal(s0[0],s0[4],s0[8],s0[12],s0[13],s0[14],s0[15]);
     if(abs2(n0) <= epsilon) {
       n0=normal(s0[0],s0[4],s0[8],s0[12],s0[11],s0[7],s0[3]);
@@ -647,7 +646,7 @@
       if(abs2(n0) <= epsilon)
         n0=normal(s0[3],s0[2],s0[1],s0[0],s0[13],s0[14],s0[15]);
     }
-      
+
     triple n1=normal(s1[12],s1[13],s1[14],s1[15],s1[11],s1[7],s1[3]);
     if(abs2(n1) <= epsilon) {
       n1=normal(s1[12],s1[13],s1[14],s1[15],s1[2],s1[1],s1[0]);
@@ -654,7 +653,7 @@
       if(abs2(n1) <= epsilon)
         n1=normal(s1[0],s1[4],s1[8],s1[12],s1[11],s1[7],s1[3]);
     }
-      
+
     triple n2=normal(s2[15],s2[11],s2[7],s2[3],s2[2],s2[1],s2[0]);
     if(abs2(n2) <= epsilon) {
       n2=normal(s2[15],s2[11],s2[7],s2[3],s2[4],s2[8],s2[12]);
@@ -661,7 +660,7 @@
       if(abs2(n2) <= epsilon)
         n2=normal(s2[12],s2[13],s2[14],s2[15],s2[2],s2[1],s2[0]);
     }
-      
+
     triple n3=normal(s3[3],s3[2],s3[1],s3[0],s3[4],s3[8],s3[12]);
     if(abs2(n3) <= epsilon) {
       n3=normal(s3[3],s3[2],s3[1],s3[0],s3[13],s3[14],s3[15]);
@@ -668,12 +667,12 @@
       if(abs2(n3) <= epsilon)
         n3=normal(s3[15],s3[11],s3[7],s3[3],s3[4],s3[8],s3[12]);
     }
-      
+
     triple n4=normal(s2[3],s2[2],s2[1],m4,s2[4],s2[8],s2[12]);
-      
+
     // A kludge to remove subdivision cracks, only applied the first time
     // an edge is found to be flat before the rest of the subpatch is.
-      
+
     triple m0=0.5*(P0+P1);
     if(!flat0) {
       if((flat0=Straightness(p0,p[4],p[8],p12) < res2))
@@ -680,7 +679,7 @@
         m0 -= Epsilon*unit(differential(s1[0],s1[1],s1[2],s1[3]));
       else m0=s0[12];
     }
-      
+
     triple m1=0.5*(P1+P2);
     if(!flat1) {
       if((flat1=Straightness(p12,p[13],p[14],p15) < res2))
@@ -687,7 +686,7 @@
         m1 -= Epsilon*unit(differential(s2[12],s2[8],s2[4],s2[0]));
       else m1=s1[15];
     }
-      
+
     triple m2=0.5*(P2+P3);
     if(!flat2) {
       if((flat2=Straightness(p15,p[11],p[7],p3) < res2))
@@ -694,7 +693,7 @@
         m2 -= Epsilon*unit(differential(s3[15],s3[14],s3[13],s3[12]));
       else m2=s2[3];
     }
-      
+
     triple m3=0.5*(P3+P0);
     if(!flat3) {
       if((flat3=Straightness(p0,p[1],p[2],p3) < res2))
@@ -701,7 +700,7 @@
         m3 -= Epsilon*unit(differential(s0[3],s0[7],s0[11],s0[15]));
       else m3=s3[0];
     }
-      
+
     if(color) {
       GLfloat c0[4],c1[4],c2[4],c3[4],c4[4];
       for(size_t i=0; i < 4; ++i) {
@@ -711,13 +710,13 @@
         c3[i]=0.5*(C3[i]+C0[i]);
         c4[i]=0.5*(c0[i]+c2[i]);
       }
-      
+
       GLuint i0=data.Vertex(m0,n0,c0);
       GLuint i1=data.Vertex(m1,n1,c1);
       GLuint i2=data.Vertex(m2,n2,c2);
       GLuint i3=data.Vertex(m3,n3,c3);
       GLuint i4=data.Vertex(m4,n4,c4);
-      
+
       render(s0,I0,i0,i4,i3,P0,m0,m4,m3,flat0,false,false,flat3,C0,c0,c4,c3);
       render(s1,i0,I1,i1,i4,m0,P1,m1,m4,flat0,flat1,false,false,c0,C1,c1,c4);
       render(s2,i4,i1,I2,i2,m4,m1,P2,m2,false,flat1,flat2,false,c4,c1,C2,c2);
@@ -728,7 +727,7 @@
       GLuint i2=(data.*pvertex)(m2,n2);
       GLuint i3=(data.*pvertex)(m3,n3);
       GLuint i4=(data.*pvertex)(m4,n4);
-      
+
       render(s0,I0,i0,i4,i3,P0,m0,m4,m3,flat0,false,false,flat3);
       render(s1,i0,I1,i1,i4,m0,P1,m1,m4,flat0,flat1,false,false);
       render(s2,i4,i1,I2,i2,m4,m1,P2,m2,false,flat1,flat2,false);
@@ -743,25 +742,25 @@
   epsilon=0;
   for(int i=1; i < 10; ++i)
     epsilon=max(epsilon,abs2(p[i]-p0));
-  
+
   epsilon *= DBL_EPSILON;
-    
+
   triple p6=p[6];
   triple p9=p[9];
-    
+
   triple n0=normal(p9,p[5],p[2],p0,p[1],p[3],p6);
-  triple n1=normal(p0,p[1],p[3],p6,p[7],p[8],p9);    
+  triple n1=normal(p0,p[1],p[3],p6,p[7],p[8],p9);
   triple n2=normal(p6,p[7],p[8],p9,p[5],p[2],p0);
-    
+
   GLuint i0,i1,i2;
   if(color) {
     GLfloat *c1=c0+4;
     GLfloat *c2=c0+8;
-    
+
     i0=data.Vertex(p0,n0,c0);
     i1=data.Vertex(p6,n1,c1);
     i2=data.Vertex(p9,n2,c2);
-    
+
     if(!straight)
       render(p,i0,i1,i2,p0,p6,p9,false,false,false,c0,c1,c2);
   } else {
@@ -768,11 +767,11 @@
     i0=(data.*pvertex)(p0,n0);
     i1=(data.*pvertex)(p6,n1);
     i2=(data.*pvertex)(p9,n2);
-    
+
     if(!straight)
       render(p,i0,i1,i2,p0,p6,p9,false,false,false);
   }
-    
+
   if(straight) {
     triple P[]={p0,p6,p9};
     if(!offscreen(3,P)) {
@@ -923,10 +922,10 @@
     triple n0=normal(l300,r012,r021,r030,u201,u102,l030);
     triple n1=normal(r030,u201,u102,l030,l120,l210,l300);
     triple n2=normal(l030,l120,l210,l300,r012,r021,r030);
-          
+
     // A kludge to remove subdivision cracks, only applied the first time
     // an edge is found to be flat before the rest of the subpatch is.
-    
+
     triple m0=0.5*(P1+P2);
     if(!flat0) {
       if((flat0=Straightness(r300,p210,p120,u030) < res2))
@@ -958,11 +957,11 @@
         c1[i]=0.5*(C2[i]+C0[i]);
         c2[i]=0.5*(C0[i]+C1[i]);
       }
-      
+
       GLuint i0=data.Vertex(m0,n0,c0);
       GLuint i1=data.Vertex(m1,n1,c1);
       GLuint i2=data.Vertex(m2,n2,c2);
-          
+
       render(l,I0,i2,i1,P0,m2,m1,false,flat1,flat2,C0,c2,c1);
       render(r,i2,I1,i0,m2,P1,m0,flat0,false,flat2,c2,C1,c0);
       render(u,i1,i0,I2,m1,m0,P2,flat0,flat1,false,c1,c0,C2);
@@ -971,7 +970,7 @@
       GLuint i0=(data.*pvertex)(m0,n0);
       GLuint i1=(data.*pvertex)(m1,n1);
       GLuint i2=(data.*pvertex)(m2,n2);
-          
+
       render(l,I0,i2,i1,P0,m2,m1,false,flat1,flat2);
       render(r,i2,I1,i0,m2,P1,m0,flat0,false,flat2);
       render(u,i1,i0,I2,m1,m0,P2,flat0,flat1,false);
@@ -986,7 +985,7 @@
 //  xbuffer.resize(n);
 //  ybuffer.resize(n);
   zbuffer.resize(n);
-  
+
   double Tz0=gl::dView[2];
   double Tz1=gl::dView[6];
   double Tz2=gl::dView[10];
@@ -1001,51 +1000,51 @@
 void bounds(const std::vector<GLuint>& I)
 {
   unsigned n=I.size()/3;
-/*  
+/*
   xmin.resize(n);
   xmax.resize(n);
   ymin.resize(n);
   ymax.resize(n);
 */
-  
+
   zmin.resize(n);
   zmax.resize(n);
-  
+
   for(unsigned i=0; i < n; ++i) {
     unsigned i3=3*i;
     unsigned Ia=I[i3];
     unsigned Ib=I[i3+1];
     unsigned Ic=I[i3+2];
-    
-    
+
+
     /*
-    double xa=xbuffer[Ia];
-    double xb=xbuffer[Ib];
-    double xc=xbuffer[Ic];
-    
-    double ya=ybuffer[Ia];
-    double yb=ybuffer[Ib];
-    double yc=ybuffer[Ic];
+      double xa=xbuffer[Ia];
+      double xb=xbuffer[Ib];
+      double xc=xbuffer[Ic];
+
+      double ya=ybuffer[Ia];
+      double yb=ybuffer[Ib];
+      double yc=ybuffer[Ic];
     */
-    
+
     double za=zbuffer[Ia];
     double zb=zbuffer[Ib];
     double zc=zbuffer[Ic];
-    
+
     /*
-    xmin[i]=min(xa,xb,xc);
-    xmax[i]=max(xa,xb,xc);
-    
-    ymin[i]=min(ya,yb,yc);
-    ymax[i]=max(ya,yb,yc);
+      xmin[i]=min(xa,xb,xc);
+      xmax[i]=max(xa,xb,xc);
+
+      ymin[i]=min(ya,yb,yc);
+      ymax[i]=max(ya,yb,yc);
     */
-    
+
     zmin[i]=min(za,zb,zc);
     zmax[i]=max(za,zb,zc);
   }
 }
 #endif
-  
+
 void sortTriangles()
 {
   if(!transparentData.indices.empty()) {
@@ -1062,16 +1061,17 @@
                       const uint32_t (*CC)[3], bool Transparent)
 {
   if(!nN) return;
-  
+
   data.clear();
   Onscreen=true;
   transparent=Transparent;
-  
+  notRendered();
+
   data.Vertices.resize(nP);
   data.indices.resize(3*nI);
-  
-  MaterialIndex=nC ? -1-materialIndex : 1+materialIndex; 
-        
+
+  MaterialIndex=nC ? -1-materialIndex : 1+materialIndex;
+
   for(size_t i=0; i < nI; ++i) {
     const uint32_t *PI=PP[i];
     uint32_t PI0=PI[0];
@@ -1111,7 +1111,7 @@
   }
   append();
 }
- 
+
 #endif
 
 } //namespace camp

Modified: trunk/Build/source/utils/asymptote/bezierpatch.h
===================================================================
--- trunk/Build/source/utils/asymptote/bezierpatch.h	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/bezierpatch.h	2021-01-02 16:31:31 UTC (rev 57291)
@@ -30,7 +30,7 @@
   bool Onscreen;
 
   void init(double res);
-    
+
   triple normal(triple left3, triple left2, triple left1, triple middle,
                 triple right1, triple right2, triple right3) {
     triple lp=3.0*(left1-middle);
@@ -66,11 +66,11 @@
     triple p=p1-p0;
     if(abs2(p) > epsilon)
       return p;
-    
+
     p=bezierPP(p0,p1,p2);
     if(abs2(p) > epsilon)
       return p;
-    
+
     return bezierPPP(p0,p1,p2,p3);
   }
 
@@ -96,10 +96,10 @@
     v=max(v,Straightness(p[4],p[5],p[6],p[7]));
     v=max(v,Straightness(p[8],p[9],p[10],p[11]));
     v=max(v,Straightness(p12,p[13],p[14],p15));
-    
+
     return pair(h,v);
   }
-  
+
   struct Split3 {
     triple m0,m2,m3,m4,m5;
     Split3() {}
@@ -112,7 +112,7 @@
       m5=0.5*(m3+m4);
     }
   };
-  
+
   // Approximate bounds by bounding box of control polyhedron.
   bool offscreen(size_t n, const triple *v) {
     if(bbox2(n,v).offscreen()) {
@@ -129,7 +129,7 @@
               bool flat0, bool flat1, bool flat2, bool flat3,
               GLfloat *C0=NULL, GLfloat *C1=NULL, GLfloat *C2=NULL,
               GLfloat *C3=NULL);
-  
+
   void append() {
     if(transparent)
       transparentData.Append(data);
@@ -140,7 +140,18 @@
         materialData.append(data);
     }
   }
-  
+
+  virtual void notRendered() {
+    if(transparent)
+      transparentData.rendered=false;
+    else {
+      if(color)
+        colorData.rendered=false;
+      else
+        materialData.rendered=false;
+    }
+  }
+
   void queue(const triple *g, bool straight, double ratio, bool Transparent,
              GLfloat *colors=NULL) {
     data.clear();
@@ -147,21 +158,22 @@
     Onscreen=true;
     transparent=Transparent;
     color=colors;
+    notRendered();
     init(pixel*ratio);
     render(g,straight,colors);
   }
-  
+
 };
 
 struct BezierTriangle : public BezierPatch {
 public:
   BezierTriangle() : BezierPatch() {}
-  
+
   double Distance(const triple *p) {
     triple p0=p[0];
     triple p6=p[6];
     triple p9=p[9];
-    
+
     // Check how far the internal point is from the centroid of the vertices.
     double d=abs2((p0+p6+p9)*third-p[4]);
 
@@ -170,7 +182,7 @@
     d=max(d,Straightness(p0,p[2],p[5],p9));
     return max(d,Straightness(p6,p[7],p[8],p9));
   }
-  
+
   void render(const triple *p, bool straight, GLfloat *c0=NULL);
   void render(const triple *p,
               GLuint I0, GLuint I1, GLuint I2,
@@ -187,7 +199,7 @@
              size_t nC, const prc::RGBAColour* C, size_t nI,
              const uint32_t (*PI)[3], const uint32_t (*NI)[3],
              const uint32_t (*CI)[3], bool transparent);
-  
+
   void append() {
     if(transparent)
       transparentData.Append(data);
@@ -195,6 +207,13 @@
       triangleData.Append(data);
   }
 
+  void notRendered() {
+    if(transparent)
+      transparentData.rendered=false;
+    else
+      triangleData.rendered=false;
+  }
+
 };
 
 extern void sortTriangles();

Modified: trunk/Build/source/utils/asymptote/build-scripts/HOWTO-MSWindows
===================================================================
--- trunk/Build/source/utils/asymptote/build-scripts/HOWTO-MSWindows	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/build-scripts/HOWTO-MSWindows	2021-01-02 16:31:31 UTC (rev 57291)
@@ -8,10 +8,12 @@
 
 setup-x86_64.exe -q -P git,wget,make,patch,gcc-g++,autoconf2.5,bison,flex,w32api-headers,w32api-runtime,zlib-devel,glm-devel,automake1.15,libtool
 
-setup-x86_64.exe -q -I -P libtirpc-devel,libreadline-devel,libfftw3-devel,libgsl-devel
+setup-x86_64.exe -q -I -P libtirpc-devel,libreadline-devel,libfftw3-devel,libgsl-devel,libcurl-devel
 
-Build and install static libraries from /usr/local/src:
+Download wolfssl GPLV3 source code from www.wolfssl.com
 
+Build and install static libraries from /usr/src:
+
 gsl-devel:
 ./configure --prefix=/usr
 make install
@@ -21,7 +23,7 @@
 make install
 
 fftw3-devel:
-./configure --prefix=/usr --enable-shared 
+./configure --prefix=/usr --disable-shared
 make install
 
 tirpc-devel:
@@ -35,6 +37,14 @@
 ./configure --prefix=/usr
 make install
 
+wolfssl-4.4.0-gplv3-fips-ready:
+./configure --prefix=/usr --enable-static
+make install
+
+curl-7.71.1:
+./configure --prefix=/usr --disable-shared --without-brotli --without-ssl --with-wolfssl
+make install
+
 git clone http://github.com/vectorgraphics/asymptote
 
 freeglut-3.0.0:
@@ -62,4 +72,4 @@
 ./configure --disable-shared
 make check
 
-~/asymptote/build-scripts/build-asymptote.dos 2.48
+~/asymptote/build-scripts/build-asymptote.dos <VERSION>

Modified: trunk/Build/source/utils/asymptote/build-scripts/README-binaries
===================================================================
--- trunk/Build/source/utils/asymptote/build-scripts/README-binaries	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/build-scripts/README-binaries	2021-01-02 16:31:31 UTC (rev 57291)
@@ -1,5 +1,5 @@
 The Asymptote executable for MSWindows can only be released under the GNU
 General Public License (GPL) as it is linked against the GNU Scientific
-Library, GNU Readline library, and other GPL libraries. The Asymptote
+Library, GNU Readline library, WolfSSL, and other GPL libraries. The Asymptote
 source itself is released under the GNU Lesser General Public License.
 

Added: trunk/Build/source/utils/asymptote/build-scripts/asy-format.el
===================================================================
--- trunk/Build/source/utils/asymptote/build-scripts/asy-format.el	                        (rev 0)
+++ trunk/Build/source/utils/asymptote/build-scripts/asy-format.el	2021-01-02 16:31:31 UTC (rev 57291)
@@ -0,0 +1,52 @@
+(defun change (old-pat new-pat) "Replace all occurences of old-pat to new-pat in current buffer."
+(interactive "r")
+(goto-char (point-min))
+(replace-string old-pat new-pat))
+
+(defun changereg (old-regexp new-regexp) "Replace all occurences of old-regexp to new-regexp in current buffer."
+(interactive "r")
+(goto-char (point-min))
+(replace-regexp old-regexp new-regexp))
+
+(defun querychangereg (old-regexp new-regexp) "Replace all occurences of old-regexp to new-regexp in current buffer, with query."
+(interactive "r")
+(goto-char (point-min))
+(query-replace-regexp old-regexp new-regexp))
+
+(set-variable 'case-fold-search nil)
+(change " + " "+")
+(change " - " "-")
+;;(change " * " "*")
+(change " / " "/")
+(change " = " "=")
+(change " --" "--")
+(change "-- " "--")
+(change " ++" "++")
+(change "++ " "++")
+(change " .. " "..")
+(change " ^^ " "^^")
+(change " & " "&")
+(change " :: " "::")
+(change ";--" "; --")
+(change " (" "(")
+(change " )" ")")
+(change " }" "}")
+(changereg "( \\([^/]\\)" "(\\1")
+(changereg "{ \\([^/]\\)" "{\\1")
+(changereg "\\([^ ]\\)\\?" "\\1 ?")
+(changereg "\\?\\([^ ]\\)" "? \\1")
+(changereg ";\\([^ \\}
+]\\)" "; \\1")
+;;(changereg "\\([^ ]\\):" "\\1 :")
+(changereg ":\\([^ ]\\)" ": \\1")
+(changereg "\\([+-*/=!<>]\\)=\\([^ ]\\)" "\\1= \\2")
+(changereg "\\([^ ]\\)\\([+-*/=!<>]\\)=" "\\1 \\2=")
+(changereg "\\([<>]\\)\\([^ =]\\)" "\\1 \\2")
+(changereg "\\([^ ]\\)\\([<>]\\)" "\\1 \\2")
+(changereg "&&\\([^ ]\\)" "&& \\1")
+(changereg "||\\([^ ]\\)" "|| \\1")
+(changereg "\\[\\]\\([^ []\\)" "[] \\1")
+(indent-region (point-min) (point-max))
+
+(querychangereg ", " ",")
+


Property changes on: trunk/Build/source/utils/asymptote/build-scripts/asy-format.el
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Build/source/utils/asymptote/build-scripts/asy-indent.el
===================================================================
--- trunk/Build/source/utils/asymptote/build-scripts/asy-indent.el	                        (rev 0)
+++ trunk/Build/source/utils/asymptote/build-scripts/asy-indent.el	2021-01-02 16:31:31 UTC (rev 57291)
@@ -0,0 +1,6 @@
+(load-file "/usr/local/share/asymptote/asy-mode.el")
+(asy-mode)
+(indent-region (point-min) (point-max) nil)
+(untabify (point-min) (point-max))
+(delete-trailing-whitespace (point-min) (point-max))
+(save-buffer)


Property changes on: trunk/Build/source/utils/asymptote/build-scripts/asy-indent.el
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Build/source/utils/asymptote/build-scripts/build-asygl
===================================================================
--- trunk/Build/source/utils/asymptote/build-scripts/build-asygl	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/build-scripts/build-asygl	2021-01-02 16:31:31 UTC (rev 57291)
@@ -7,7 +7,7 @@
 UGLIFY=cat; \
 UGLIFYOPT=""; \
 else \
-UGLIFY=uglifyjs; \
+UGLIFY=terser; \
 UGLIFYOPTIONS="-m -c --comments"; \
 fi    
 

Modified: trunk/Build/source/utils/asymptote/build-scripts/build-asymptote.dos
===================================================================
--- trunk/Build/source/utils/asymptote/build-scripts/build-asymptote.dos	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/build-scripts/build-asymptote.dos	2021-01-02 16:31:31 UTC (rev 57291)
@@ -35,6 +35,7 @@
 rm -rf $BUILD
 mkdir -p $BUILD
 cp -a $HOME/dll/cygwin/*.dll $BUILD
+cp /etc/pki/tls/certs/ca-bundle.crt $BUILD
 chmod 0644 $BUILD/*.dll
 cp -a $BUILD/*.dll ~/CTAN/asymptote-$VERSION/binaries/$BINDIR/
 make MSDOS=1 DESTDIR="$BUILD/" docdir="$BUILD/"
@@ -55,6 +56,7 @@
     | awk '{ if(index($0,"/")==length($0)) print "RMDir /r $INSTDIR\\" substr($0,0,length($0)-1); else print "Delete $INSTDIR\\" $0 }' \
 	> AsymptoteUninstallList.nsi
 
+rm $BUILD/xasy
 if [ $MACHINE == i686 ]; then
 sed asymptote.nsi -e 's/$PROGRAMFILES64/$PROGRAMFILES/g' > asymptote32.nsi
 /cygdrive/c/Program\ Files\ \(x86\)/NSIS/makensis.exe asymptote32.nsi

Added: trunk/Build/source/utils/asymptote/build-scripts/cc-format.el
===================================================================
--- trunk/Build/source/utils/asymptote/build-scripts/cc-format.el	                        (rev 0)
+++ trunk/Build/source/utils/asymptote/build-scripts/cc-format.el	2021-01-02 16:31:31 UTC (rev 57291)
@@ -0,0 +1,52 @@
+(defun change (old-pat new-pat) "Replace all occurences of old-pat to new-pat in current buffer."
+(interactive "r")
+(goto-char (point-min))
+(replace-string old-pat new-pat))
+
+(defun changereg (old-regexp new-regexp) "Replace all occurences of old-regexp to new-regexp in current buffer."
+(interactive "r")
+(goto-char (point-min))
+(replace-regexp old-regexp new-regexp))
+
+(defun querychangereg (old-regexp new-regexp) "Replace all occurences of old-regexp to new-regexp in current buffer, with query."
+(interactive "r")
+(goto-char (point-min))
+(query-replace-regexp old-regexp new-regexp))
+
+(set-variable 'case-fold-search nil)
+(change " + " "+")
+(change " - " "-")
+(change " * " "*")
+(change " / " "/")
+(change " = " "=")
+(change " --" "--")
+(change "-- " "--")
+(change " ++" "++")
+(change "++ " "++")
+(change " .. " "..")
+(change " ^^ " "^^")
+(change " & " "&")
+(change " :: " "::")
+(change ";--" "; --")
+(change " (" "(")
+(change " )" ")")
+(change " }" "}")
+(changereg "( \\([^/]\\)" "(\\1")
+(changereg "{ \\([^/]\\)" "{\\1")
+(changereg "\\([^ ]\\)\\?" "\\1 ?")
+(changereg "\\?\\([^ ]\\)" "? \\1")
+(changereg ";\\([^ \\}
+]\\)" "; \\1")
+;;(changereg "\\([^ ]\\):" "\\1 :")
+(changereg ":\\([^ ]\\)" ": \\1")
+(changereg "\\([+-*/=!]\\)=\\([^ ]\\)" "\\1= \\2")
+(changereg "\\([^ ]\\)\\([+-*/=!]\\)=" "\\1 \\2=")
+(changereg "\\([]\\)\\([^ =]\\)" "\\1 \\2")
+(changereg "\\([^ ]\\)\\([]\\)" "\\1 \\2")
+(changereg "&&\\([^ ]\\)" "&& \\1")
+(changereg "||\\([^ ]\\)" "|| \\1")
+(changereg "\\[\\]\\([^ []\\)" "[] \\1")
+(indent-region (point-min) (point-max))
+
+(querychangereg ", " ",")
+


Property changes on: trunk/Build/source/utils/asymptote/build-scripts/cc-format.el
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Build/source/utils/asymptote/build-scripts/cc-indent.el
===================================================================
--- trunk/Build/source/utils/asymptote/build-scripts/cc-indent.el	                        (rev 0)
+++ trunk/Build/source/utils/asymptote/build-scripts/cc-indent.el	2021-01-02 16:31:31 UTC (rev 57291)
@@ -0,0 +1,6 @@
+(load-file "cc-mode2.el")
+(c++-mode)
+(indent-region (point-min) (point-max) nil)
+(untabify (point-min) (point-max))
+(delete-trailing-whitespace (point-min) (point-max))
+(save-buffer)


Property changes on: trunk/Build/source/utils/asymptote/build-scripts/cc-indent.el
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Build/source/utils/asymptote/build-scripts/run-in-indent.el
===================================================================
--- trunk/Build/source/utils/asymptote/build-scripts/run-in-indent.el	                        (rev 0)
+++ trunk/Build/source/utils/asymptote/build-scripts/run-in-indent.el	2021-01-02 16:31:31 UTC (rev 57291)
@@ -0,0 +1,6 @@
+(load-file "cc-mode2.el")
+(c++-mode)
+(indent-region (search-forward "
" nil nil 2) (point-max) nil)
+(untabify (point-min) (point-max))
+(delete-trailing-whitespace (point-min) (point-max))
+(save-buffer)


Property changes on: trunk/Build/source/utils/asymptote/build-scripts/run-in-indent.el
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Build/source/utils/asymptote/builtin.cc
===================================================================
--- trunk/Build/source/utils/asymptote/builtin.cc	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/builtin.cc	2021-01-02 16:31:31 UTC (rev 57291)
@@ -43,13 +43,13 @@
 #endif
 
 namespace vm {
-  // Defined in stack.cc
-  extern vm::frame *make_dummyframe(string name);
+// Defined in stack.cc
+extern vm::frame *make_dummyframe(string name);
 }
 
 using namespace types;
 using namespace camp;
-using namespace vm;  
+using namespace vm;
 
 namespace trans {
 using camp::transform;
@@ -61,8 +61,8 @@
 using run::plus;
 using run::minus;
 
-using namespace run;  
-  
+using namespace run;
+
 void gen_runtime_venv(venv &ve);
 void gen_runbacktrace_venv(venv &ve);
 void gen_runpicture_venv(venv &ve);
@@ -87,21 +87,21 @@
 // The base environments for built-in types and functions
 void base_tenv(tenv &te)
 {
-#define PRIMITIVE(name,Name,asyName) \
-        addType(te, symbol::trans(#asyName), prim##Name());
+#define PRIMITIVE(name,Name,asyName)                    \
+  addType(te, symbol::trans(#asyName), prim##Name());
 #include "primitives.h"
 #undef PRIMITIVE
 }
 
-const formal noformal(0);  
+const formal noformal(0);
 
 function *functionFromFormals(ty *result,
-             formal f1=noformal, formal f2=noformal, formal f3=noformal,
-             formal f4=noformal, formal f5=noformal, formal f6=noformal,
-             formal f7=noformal, formal f8=noformal, formal f9=noformal,
-             formal fA=noformal, formal fB=noformal, formal fC=noformal,
-             formal fD=noformal, formal fE=noformal, formal fF=noformal,
-             formal fG=noformal, formal fH=noformal, formal fI=noformal)
+                              formal f1=noformal, formal f2=noformal, formal f3=noformal,
+                              formal f4=noformal, formal f5=noformal, formal f6=noformal,
+                              formal f7=noformal, formal f8=noformal, formal f9=noformal,
+                              formal fA=noformal, formal fB=noformal, formal fC=noformal,
+                              formal fD=noformal, formal fE=noformal, formal fF=noformal,
+                              formal fG=noformal, formal fH=noformal, formal fI=noformal)
 {
   function *fun = new function(result);
 
@@ -136,17 +136,17 @@
              formal fG=noformal, formal fH=noformal, formal fI=noformal)
 {
   function *fun = functionFromFormals(result,f1,f2,f3,f4,f5,f6,f7,f8,f9,
-      fA,fB,fC,fD,fE,fF,fG,fH,fI);
+                                      fA,fB,fC,fD,fE,fF,fG,fH,fI);
 
   // NOTE: If the function is a field, we should encode the defining record in
   // the entry
   varEntry *ent = new varEntry(fun, a, 0, position());
-  
+
   ve.enter(id, ent);
 }
 
 // Add a function with one or more default arguments.
-void addFunc(venv &ve, bltin f, ty *result, symbol name, 
+void addFunc(venv &ve, bltin f, ty *result, symbol name,
              formal f1, formal f2, formal f3, formal f4, formal f5, formal f6,
              formal f7, formal f8, formal f9, formal fA, formal fB, formal fC,
              formal fD, formal fE, formal fF, formal fG, formal fH, formal fI)
@@ -157,14 +157,14 @@
   // overloaded, so we check for them too.  Many builtin functions have so
   // many arguments that it is noise to print out their full signatures.
   string s = name;
-  if (s.find("operator ", 0) == 0 || s == "min" || s == "max") 
-  {
-    function *fun = functionFromFormals(result,f1,f2,f3,f4,f5,f6,f7,f8,f9,
-        fA,fB,fC,fD,fE,fF,fG,fH,fI);
-    ostringstream out;
-    fun->printVar(out, name);
-    REGISTER_BLTIN(f, out.str());
-  }
+  if (s.find("operator ", 0) == 0 || s == "min" || s == "max")
+    {
+      function *fun = functionFromFormals(result,f1,f2,f3,f4,f5,f6,f7,f8,f9,
+                                          fA,fB,fC,fD,fE,fF,fG,fH,fI);
+      ostringstream out;
+      fun->printVar(out, name);
+      REGISTER_BLTIN(f, out.str());
+    }
   else {
     REGISTER_BLTIN(f, name);
   }
@@ -172,7 +172,7 @@
 
   access *a = new bltinAccess(f);
   addFunc(ve,a,result,name,f1,f2,f3,f4,f5,f6,f7,f8,f9,
-      fA,fB,fC,fD,fE,fF,fG,fH,fI);
+          fA,fB,fC,fD,fE,fF,fG,fH,fI);
 }
 
 void addOpenFunc(venv &ve, bltin f, ty *result, symbol name)
@@ -183,7 +183,7 @@
   access *a= new bltinAccess(f);
 
   varEntry *ent = new varEntry(fun, a, 0, position());
-  
+
   ve.enter(name, ent);
 }
 
@@ -229,7 +229,7 @@
 }
 
 #define addRealFunc(fcn, sym) addRealFunc<fcn>(ve, sym);
-  
+
 void addRealFunc2(venv &ve, bltin fcn, symbol name)
 {
   addFunc(ve,fcn,primReal(),name,formal(primReal(),SYM(a)),
@@ -249,7 +249,7 @@
   addFunc(ve, realRealInt<fcn>, primReal(), name, formal(primReal(), arg1),
           formal(primInt(), arg2));
 }
-  
+
 void addInitializer(venv &ve, ty *t, access *a)
 {
   addFunc(ve, a, t, symbol::initsym);
@@ -375,7 +375,7 @@
   addCast(ve, primReal(), primInt(), cast<Int,double>);
   addCast(ve, primPair(), primInt(), cast<Int,pair>);
   addCast(ve, primPair(), primReal(), cast<double,pair>);
-  
+
   addCast(ve, primPath(), primPair(), cast<pair,path>);
   addCast(ve, primGuide(), primPair(), pairToGuide);
   addCast(ve, primGuide(), primPath(), pathToGuide);
@@ -382,14 +382,14 @@
   addCast(ve, primPath(), primGuide(), guideToPath);
 
   addCast(ve, primFile(), primNull(), nullFile);
-  
+
   // Vectorized casts.
   addExplicitCast(ve, IntArray(), realArray(), arrayToArray<double,Int>);
-  
+
   addCast(ve, realArray(), IntArray(), arrayToArray<Int,double>);
   addCast(ve, pairArray(), IntArray(), arrayToArray<Int,pair>);
   addCast(ve, pairArray(), realArray(), arrayToArray<double,pair>);
-  
+
   addCast(ve, realArray2(), IntArray2(), array2ToArray2<Int,double>);
   addCast(ve, pairArray2(), IntArray2(), array2ToArray2<Int,pair>);
   addCast(ve, pairArray2(), realArray2(), array2ToArray2<double,pair>);
@@ -463,9 +463,9 @@
 {
   addBooleanOperator(ve,binaryOp<T,op>,t1,name);
   addFunc(ve,opArray<T,T,op>,
-      booleanArray(),name,formal(t1,SYM(a)),formal(t2,SYM(b)));
+          booleanArray(),name,formal(t1,SYM(a)),formal(t2,SYM(b)));
   addFunc(ve,arrayOp<T,T,op>,
-      booleanArray(),name,formal(t2,SYM(a)),formal(t1,SYM(b)));
+          booleanArray(),name,formal(t2,SYM(a)),formal(t1,SYM(b)));
   addFunc(ve,arrayArrayOp<T,op>,booleanArray(),name,formal(t2,SYM(a)),
           formal(t2,SYM(b)));
 }
@@ -483,18 +483,18 @@
 {
   addBooleanOps<T,equals>(ve,t1,SYM_EQ,t2);
   addBooleanOps<T,notequals>(ve,t1,SYM_NEQ,t2);
-   
+
   addFunc(ve, run::array2Equals<T>, primBoolean(), SYM_EQ, formal(t3, SYM(a)),
           formal(t3, SYM(b)));
   addFunc(ve, run::array2NotEquals<T>, primBoolean(),
           SYM_NEQ, formal(t3, SYM(a)),
           formal(t3, SYM(b)));
-  
+
   addCast(ve,t1,primFile(),read<T>);
   addCast(ve,t2,primFile(),readArray1<T>);
   addCast(ve,t3,primFile(),readArray2<T>);
   addCast(ve,t4,primFile(),readArray3<T>);
-  
+
   addWrite(ve,write<T>,t1,t2);
   addRestFunc(ve,writeArray<T>,primVoid(),SYM(write),t3,
               formal(primFile(),SYM(file),true),
@@ -538,15 +538,15 @@
   addBooleanOps<T,lessequals>(ve,t1,SYM_LE,t2);
   addBooleanOps<T,greaterequals>(ve,t1,SYM_GE,t2);
   addBooleanOps<T,greater>(ve,t1,SYM_GT,t2);
-  
+
   addOps<T,run::min>(ve,t1,SYM(min),t2);
   addOps<T,run::max>(ve,t1,SYM(max),t2);
   addBinOps<T,run::min>(ve,t1,t2,t3,t4,SYM(min));
   addBinOps<T,run::max>(ve,t1,t2,t3,t4,SYM(max));
-    
+
   addFunc(ve,sortArray<T>,t2,SYM(sort),formal(t2,SYM(a)));
   addFunc(ve,sortArray2<T>,t3,SYM(sort),formal(t3,SYM(a)));
-  
+
   addFunc(ve,searchArray<T>,primInt(),SYM(search),formal(t2,SYM(a)),
           formal(t1,SYM(key)));
 }
@@ -558,7 +558,7 @@
   addOps<T,plus>(ve,t1,SYM_PLUS,t2);
   addOps<T,minus>(ve,t1,SYM_MINUS,t2);
   addFunc(ve,initialized,primBoolean(),SYM(initialized),formal(t1,SYM(a)));
-  
+
   addArray2Array2Op<T,plus>(ve,t3,SYM_PLUS);
   addArray2Array2Op<T,minus>(ve,t3,SYM_MINUS);
 
@@ -571,7 +571,7 @@
                        formal(t1,SYM(a),false,Explicit),
                        formal(t1,SYM(b),false,Explicit),
                        formal(primReal(),SYM(t)));
-  
+
   addFunc(ve,sumArray<T>,t1,SYM(sum),formal(t2,SYM(a)));
   addUnorderedOps<T>(ve,t1,t2,t3,t4);
 }
@@ -581,16 +581,16 @@
             bool Explicit=false)
 {
   addBasicOps<T>(ve,t1,t2,t3,t4,integer,Explicit);
-  
+
   addOps<T,times>(ve,t1,SYM_TIMES,t2);
   addOpArray2<T,times>(ve,t1,SYM_TIMES,t3);
   addArray2Op<T,times>(ve,t1,SYM_TIMES,t3);
-  
+
   if(!integer) {
     addOps<T,run::divide>(ve,t1,SYM_DIVIDE,t2);
     addArray2Op<T,run::divide>(ve,t1,SYM_DIVIDE,t3);
   }
-      
+
   addOps<T,power>(ve,t1,SYM_CARET,t2);
 }
 
@@ -608,7 +608,7 @@
 
   if (ve.lookByType(SYM(alias), &aliasType))
     return;
-  
+
   addFunc(ve, run::arrayAlias,
           primBoolean(), SYM(alias), formal(t, SYM(a)), formal(t, SYM(b)));
 
@@ -623,7 +623,7 @@
           t, SYM(array), formal(primInt(), SYM(n)),
           formal(ct, SYM(value)),
           formal(primInt(), SYM(depth), true));
-  
+
   callable *copyFunc = new thunk(new vm::bfunc(run::copyArray),(Int) depth);
   addFunc(ve, new callableAccess(copyFunc),
           t, SYM(copy), formal(t, SYM(a)), formal(primInt(), SYM(depth), true));
@@ -630,16 +630,16 @@
 
   addFunc(ve, run::arrayFunction,
           t, SYM(map), formal(new function(ct, ct), SYM(f)), formal(t, SYM(a)));
-  
+
   addFunc(ve, run::arraySequence,
           t, SYM(sequence), formal(new function(ct, primInt()), SYM(f)),
           formal(primInt(), SYM(n)));
-  
+
   addFunc(ve, run::arraySort,
           t, SYM(sort), formal(t, SYM(a)),
           formal(new function(primBoolean(), ct, ct), SYM(less)),
           formal(primBoolean(), SYM(stable), true));
-      
+
   switch (depth) {
     case 1:
       addRestFunc(ve, run::arrayConcat, t, SYM(concat), new types::array(t));
@@ -675,14 +675,14 @@
 }
 
 
-void addOperators(venv &ve) 
+void addOperators(venv &ve)
 {
   addSimpleOperator(ve,binaryOp<string,plus>,primString(),SYM_PLUS);
-  
+
   addBooleanOps<bool,And>(ve,primBoolean(),SYM_AMPERSAND,booleanArray());
   addBooleanOps<bool,Or>(ve,primBoolean(),SYM_BAR,booleanArray());
   addBooleanOps<bool,Xor>(ve,primBoolean(),SYM_CARET,booleanArray());
-  
+
   addUnorderedOps<bool>(ve,primBoolean(),booleanArray(),booleanArray2(),
                         booleanArray3());
   addOps<Int>(ve,primInt(),IntArray(),IntArray2(),IntArray3(),true);
@@ -703,7 +703,7 @@
 
   addUnorderedOps<string>(ve,primString(),stringArray(),stringArray2(),
                           stringArray3());
-  
+
   addSimpleOperator(ve,binaryOp<pair,minbound>,primPair(),SYM(minbound));
   addSimpleOperator(ve,binaryOp<pair,maxbound>,primPair(),SYM(maxbound));
   addSimpleOperator(ve,binaryOp<triple,minbound>,primTriple(),SYM(minbound));
@@ -716,17 +716,17 @@
                              tripleArray3(),SYM(minbound));
   addBinOps<triple,maxbound>(ve,primTriple(),tripleArray(),tripleArray2(),
                              tripleArray3(),SYM(maxbound));
-  
+
   addFunc(ve,arrayFunc<double,pair,abs>,realArray(),SYM(abs),
           formal(pairArray(),SYM(a)));
   addFunc(ve,arrayFunc<double,triple,abs>,realArray(),SYM(abs),
           formal(tripleArray(),SYM(a)));
-  
+
   addFunc(ve,arrayFunc<pair,pair,conjugate>,pairArray(),SYM(conj),
           formal(pairArray(),SYM(a)));
   addFunc(ve,arrayFunc2<pair,pair,conjugate>,pairArray2(),SYM(conj),
           formal(pairArray2(),SYM(a)));
-  
+
   addFunc(ve,binaryOp<Int,divide>,primReal(),SYM_DIVIDE,
           formal(primInt(),SYM(a)),formal(primInt(),SYM(b)));
   addFunc(ve,arrayOp<Int,Int,divide>,realArray(),SYM_DIVIDE,
@@ -735,16 +735,16 @@
           formal(primInt(),SYM(a)),formal(IntArray(),SYM(b)));
   addFunc(ve,arrayArrayOp<Int,divide>,realArray(),SYM_DIVIDE,
           formal(IntArray(),SYM(a)),formal(IntArray(),SYM(b)));
-  
+
   addOrderedOps<Int>(ve,primInt(),IntArray(),IntArray2(),IntArray3());
   addOrderedOps<double>(ve,primReal(),realArray(),realArray2(),realArray3());
   addOrderedOps<string>(ve,primString(),stringArray(),stringArray2(),
                         stringArray3());
-  
+
   addOps<Int,mod>(ve,primInt(),SYM_MOD,IntArray());
   addOps<Int,quotient>(ve,primInt(),SYM_QUOTIENT,IntArray());
   addOps<double,mod>(ve,primReal(),SYM_MOD,realArray());
-  
+
   addRestFunc(ve,diagonal<Int>,IntArray2(),SYM(diagonal),IntArray());
   addRestFunc(ve,diagonal<double>,realArray2(),SYM(diagonal),realArray());
   addRestFunc(ve,diagonal<pair>,pairArray2(),SYM(diagonal),pairArray());
@@ -770,7 +770,7 @@
   size_t numArgs=checkArray(a);
   for (size_t k=0; k<numArgs; ++k)
     cout << k << ": " << (*a)[k];
-  
+
   Stack->push<Int>((Int)numArgs);
 }
 #endif
@@ -779,7 +779,7 @@
 void printBytecode(stack *Stack)
 {
   // As arbitrary addresses can be sent to printBytecode, it should not be run
-  // in safe mode. 
+  // in safe mode.
   if (settings::safe) {
     cerr << "use -nosafe flag to enable printBytecode" << endl;
     return;
@@ -815,7 +815,7 @@
   addOperators(ve);
   addTupleOperators(ve);
   addGuideOperators(ve);
-  
+
   addRealFunc(sin,SYM(sin));
   addRealFunc(cos,SYM(cos));
   addRealFunc(tan,SYM(tan));
@@ -841,18 +841,18 @@
 
   addRealFunc(pow10,SYM(pow10));
   addRealFunc(identity,SYM(identity));
-  
+
 #ifdef STRUCTEXAMPLE
   dummyRecord *fun=createDummyRecord(ve, SYM(test));
   addFunc(fun->e.ve,realReal<sin>,primReal(),SYM(f),formal(primReal(),SYM(x)));
   addVariable<Int>(fun->e.ve,1,primInt(),SYM(x));
 #endif
-  
+
   addFunc(ve,writestring,primVoid(),SYM(write),
           formal(primFile(),SYM(file),true),
           formal(primString(),SYM(s)),
           formal(voidFileFunction(),SYM(suffix),true));
-  
+
   addWrite(ve,write<transform>,primTransform(),transformArray());
   addWrite(ve,write<guide *>,primGuide(),guideArray());
   addWrite(ve,write<pen>,primPen(),penArray());
@@ -867,7 +867,7 @@
   addFunc(ve,arrayFunction,IntArray(),SYM(map),
           formal(IntRealFunction(),SYM(f)),
           formal(realArray(),SYM(a)));
-  
+
   addConstant<Int>(ve, Int_MAX, primInt(), SYM(intMax));
   addConstant<Int>(ve, Int_MIN, primInt(), SYM(intMin));
   addConstant<double>(ve, HUGE_VAL, primReal(), SYM(inf));
@@ -903,7 +903,7 @@
   gen_runpath_venv(ve);
   gen_runpath3d_venv(ve);
   gen_runmath_venv(ve);
-  
+
 #ifdef HAVE_LIBGSL
   gen_rungsl_venv(ve);
 #endif
@@ -924,8 +924,8 @@
   Int i,j;
   if(isdefault(iti)) {
     if(jdefault) {
-    (*a).clear();
-    return;
+      (*a).clear();
+      return;
     } else i=j=get<Int>(itj);
   } else {
     i=get<Int>(iti);
@@ -940,7 +940,7 @@
     }
     i=imod(i,asize);
     j=imod(j,asize);
-    if(j >= i) 
+    if(j >= i)
       (*a).erase((*a).begin()+i,(*a).begin()+j+1);
     else {
       (*a).erase((*a).begin()+i,(*a).end());
@@ -948,10 +948,10 @@
     }
     return;
   }
-  
+
   if(i < 0 || i >= (Int) asize || i > j || j >= (Int) asize) {
     ostringstream buf;
-    buf << "delete called on array of length " << (Int) asize 
+    buf << "delete called on array of length " << (Int) asize
         << " with out-of-bounds index range [" << i << "," << j << "]";
     error(buf);
   }

Modified: trunk/Build/source/utils/asymptote/builtin.h
===================================================================
--- trunk/Build/source/utils/asymptote/builtin.h	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/builtin.h	2021-01-02 16:31:31 UTC (rev 57291)
@@ -21,9 +21,9 @@
 void base_venv(venv &);
 
 extern const types::formal noformal;
-  
+
 // Add a function with one or more default arguments.
-void addFunc(venv &ve, vm::bltin f, types::ty *result, symbol name, 
+void addFunc(venv &ve, vm::bltin f, types::ty *result, symbol name,
              types::formal f1=noformal, types::formal f2=noformal,
              types::formal f3=noformal, types::formal f4=noformal,
              types::formal f5=noformal, types::formal f6=noformal,
@@ -33,7 +33,7 @@
              types::formal fD=noformal, types::formal fE=noformal,
              types::formal fF=noformal, types::formal fG=noformal,
              types::formal fH=noformal, types::formal fI=noformal);
-  
+
 // Adds standard functions for a newly added types.
 void addArrayOps(venv &ve, types::array *t);
 void addRecordOps(venv &ve, types::record *r);
@@ -43,7 +43,7 @@
 types::record *getGSLModule();
 void GSLrngFree();
 #endif
-  
+
 } //namespace trans
 
 namespace run {

Modified: trunk/Build/source/utils/asymptote/callable.h
===================================================================
--- trunk/Build/source/utils/asymptote/callable.h	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/callable.h	2021-01-02 16:31:31 UTC (rev 57291)
@@ -1,7 +1,7 @@
 /*****
  * callable.h
  * Tom Prince 2005/06/19
- * 
+ *
  * Runtime representation of functions.
  *****/
 
@@ -51,7 +51,7 @@
   void print(ostream& out);
 };
 
-class bfunc : public callable 
+class bfunc : public callable
 {
 public:
   bfunc(bltin b) : func(b) {}

Modified: trunk/Build/source/utils/asymptote/camperror.cc
===================================================================
--- trunk/Build/source/utils/asymptote/camperror.cc	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/camperror.cc	2021-01-02 16:31:31 UTC (rev 57291)
@@ -23,7 +23,7 @@
   em.runtime(vm::getPos());
   em << desc;
   em.sync();
-  throw handled_error(); 
+  throw handled_error();
 }
 
 // Used internally to report a warning in an operation.
@@ -41,7 +41,7 @@
   em.sync();
   em.statusError();
   try {
-    throw quit(); 
+    throw quit();
   } catch(handled_error) {
   }
 }
@@ -50,15 +50,15 @@
 {
   reportError(desc.str());
 }
-  
+
 void reportWarning(const ostringstream& desc)
 {
   reportWarning(desc.str());
 }
-  
+
 void reportFatal(const ostringstream& desc)
 {
   reportFatal(desc.str());
 }
-  
+
 } // namespace camp

Modified: trunk/Build/source/utils/asymptote/camperror.h
===================================================================
--- trunk/Build/source/utils/asymptote/camperror.h	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/camperror.h	2021-01-02 16:31:31 UTC (rev 57291)
@@ -20,10 +20,10 @@
 // Used internally to report an error in an operation.
 void reportError(const string& desc);
 void reportError(const ostringstream& desc);
-  
+
 void reportWarning(const string& desc);
 void reportWarning(const ostringstream& desc);
-  
+
 void reportFatal(const string& desc);
 void reportFatal(const ostringstream& desc);
 

Modified: trunk/Build/source/utils/asymptote/castop.h
===================================================================
--- trunk/Build/source/utils/asymptote/castop.h	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/castop.h	2021-01-02 16:31:31 UTC (rev 57291)
@@ -48,15 +48,10 @@
 void castString(vm::stack *s)
 {
   string *S=pop<string*>(s);
-  if(S->empty()) {
-    T x=0;
-    s->push(x);
-  } else {
-    try {
-      s->push(lexical::cast<T>(*S));
-    } catch (lexical::bad_cast&) {
-      s->push(vm::Default);
-    }
+  try {
+    s->push(lexical::cast<T>(*S));
+  } catch (lexical::bad_cast&) {
+    s->push(vm::Default);
   }
 }
 
@@ -107,7 +102,7 @@
 }
 
 inline Int Limit(Int nx) {return nx == 0 ? Int_MAX : nx;}
-inline void reportEof(camp::file *f, Int count) 
+inline void reportEof(camp::file *f, Int count)
 {
   if(count > 0) {
     ostringstream buf;
@@ -195,19 +190,19 @@
 template<class T>
 void readArray1(vm::stack *s)
 {
-  readArray<T>(s,0); 
+  readArray<T>(s,0);
 }
 
 template<class T>
 void readArray2(vm::stack *s)
 {
-  readArray<T>(s,0,0); 
+  readArray<T>(s,0,0);
 }
 
 template<class T>
 void readArray3(vm::stack *s)
 {
-  readArray<T>(s,0,0,0); 
+  readArray<T>(s,0,0,0);
 }
 
 } // namespace run

Added: trunk/Build/source/utils/asymptote/cc-mode2.el
===================================================================
--- trunk/Build/source/utils/asymptote/cc-mode2.el	                        (rev 0)
+++ trunk/Build/source/utils/asymptote/cc-mode2.el	2021-01-02 16:31:31 UTC (rev 57291)
@@ -0,0 +1,38 @@
+(when (require 'cc-mode nil t)
+  (require 'asy-mode nil t)
+
+  (defvar my-c-style '((c-basic-offset . 2)
+		       (c-tab-always-indent . nil)
+                       (c-offsets-alist . ((innamespace nil)
+                                           (inline-open nil)
+                                           (case-label +)
+                                           ))
+                       (c-cleanup-list . (brace-else-brace
+                                          brace-else-if-brace
+                                          brace-catch-brace
+                                          empty-defun-braces
+                                          defun-close-semi))
+                       (c-hanging-braces-alist . ((brace-list-open)
+                                                  (brace-entry-open)
+                                                  (statement-cont)
+                                                  (substatement-open after)
+                                                  (block-close . c-snug-do-while)
+                                                  (extern-lang-open after)
+                                                  (inline-open)
+                                                  (inline-close)
+                                                  (namespace-open after)))
+                       (c-hanging-semi&comma-criteria . (c-semi&comma-no-newlines-for-oneline-inliners
+                                                         c-semi&comma-no-newlines-before-nonblanks
+                                                         c-semi&comma-inside-parenlist))
+                       ))
+
+  (setq c-mode-hook 'c++-mode)
+
+  (defun c-mode-common-addn() "Additions to c-and-c++-mode."
+    (c-add-style "jcb" my-c-style t)
+;;    (c-toggle-auto-hungry-state 1)
+    (auto-fill-mode)
+    )
+
+  (setq c-mode-common-hook 'c-mode-common-addn)
+  )


Property changes on: trunk/Build/source/utils/asymptote/cc-mode2.el
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Build/source/utils/asymptote/coder.cc
===================================================================
--- trunk/Build/source/utils/asymptote/coder.cc	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/coder.cc	2021-01-02 16:31:31 UTC (rev 57291)
@@ -41,7 +41,7 @@
 #if SIMPLE_FRAME
   : level(frame::indirect_frame(name)),
 #else
-  : level(new frame(name, 0, 0)),
+    : level(new frame(name, 0, 0)),
 #endif
     recordLevel(0),
     recordType(0),
@@ -63,7 +63,7 @@
   : level(reframe ? new frame(name,
                               parent->getFrame(),
                               t->sig.getNumFormals()) :
-                    parent->getFrame()),
+          parent->getFrame()),
     recordLevel(parent->recordLevel),
     recordType(parent->recordType),
     isCodelet(!reframe),
@@ -112,7 +112,7 @@
   frame *underlevel = getFrame();
 
   frame *level = new frame(id, underlevel, 0);
-  
+
   record *r = new record(id, level);
 
   return r;
@@ -165,7 +165,7 @@
 bool coder::encode(frame *f)
 {
   frame *toplevel = getFrame();
-  
+
   if (f == 0) {
     encode(inst::constpush,(item)0);
     return true;
@@ -225,7 +225,7 @@
 {
   if (isStatic())
     return parent->defNewLabel();
-  
+
   label l = new label_t();
   assert(!l->location.defined());
   assert(!l->firstUse.defined());
@@ -266,7 +266,7 @@
 {
   if (isStatic())
     return parent->useLabel(op,label);
-  
+
   if (label->location.defined()) {
     encode(op, label->location);
   } else {
@@ -287,7 +287,7 @@
 {
   if (isStatic())
     return parent->fwdLabel();
-  
+
   // Create a new label without specifying its position.
   label l = new label_t();
   assert(!l->location.defined());

Modified: trunk/Build/source/utils/asymptote/coder.h
===================================================================
--- trunk/Build/source/utils/asymptote/coder.h	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/coder.h	2021-01-02 16:31:31 UTC (rev 57291)
@@ -62,12 +62,12 @@
   frame *level;
 
   // The frame of the enclosing record that the "this" expression yields.  ie.
-  // the highest frame that is a record, not a function. 
+  // the highest frame that is a record, not a function.
   frame *recordLevel;
 
   // The type of the enclosing record.  Also needed for the "this" expression.
   record *recordType;
-  
+
   // Are we translating a codelet?
   bool isCodelet;
 
@@ -94,7 +94,7 @@
   // TODO: Ensure private fields don't show up calling lookup for a
   // record.
   permission perm;
-  
+
   // The function code as its being written.  Code points to next place in
   // array to write.
   vm::program *program;
@@ -139,9 +139,9 @@
 
   coder(position pos,
         string name, modifier sord = DEFAULT_DYNAMIC);
-  
+
   coder(const coder&);
-  
+
   /* Add a static or dynamic modifier. */
   void pushModifier(modifier s)
   {
@@ -195,8 +195,8 @@
   {
     perm = DEFAULT_PERM;
   }
-    
 
+
   // Says what the return type of the function is.
   ty *getReturnType() {
     return funtype->result;
@@ -203,7 +203,7 @@
   }
 
   bool isRecord();
-  
+
   // Creates a new coder to handle the translation of a new function.
   coder newFunction(position pos,
                     string name, function *t, modifier sord=DEFAULT_DYNAMIC);
@@ -345,7 +345,7 @@
   // If an address has to be used for a jump instruction before it is
   // actually encoded, a handle can be given to it by this function.
   // When that handle's label is later defined, the proper address will
-  // be inserted into the code where the handle was used. 
+  // be inserted into the code where the handle was used.
   label fwdLabel();
 
   void pushLoop(label c, label b) {

Modified: trunk/Build/source/utils/asymptote/common.h
===================================================================
--- trunk/Build/source/utils/asymptote/common.h	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/common.h	2021-01-02 16:31:31 UTC (rev 57291)
@@ -16,7 +16,7 @@
 #include "config.h"
 #endif
 
-#if !defined(FOR_SHARED) && \
+#if !defined(FOR_SHARED) &&                                             \
   ((defined(HAVE_LIBGL) && defined(HAVE_LIBGLUT) && defined(HAVE_LIBGLM)) || \
    defined(HAVE_LIBOSMESA))
 #define HAVE_GL
@@ -88,4 +88,13 @@
 using mem::ostringstream;
 using mem::stringbuf;
 
-#endif 
+static const struct ws_t {} ws={};
+
+// Portable way of skipping whitespace
+inline std::istream &operator >> (std::istream & s, const ws_t &ws) {
+  if(!s.eof())
+    s >> std::ws;
+  return s;
+}
+
+#endif

Modified: trunk/Build/source/utils/asymptote/config.guess
===================================================================
--- trunk/Build/source/utils/asymptote/config.guess	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/config.guess	2021-01-02 16:31:31 UTC (rev 57291)
@@ -1,8 +1,8 @@
 #! /bin/sh
 # Attempt to guess a canonical system name.
-#   Copyright 1992-2020 Free Software Foundation, Inc.
+#   Copyright 1992-2018 Free Software Foundation, Inc.
 
-timestamp='2020-12-22'
+timestamp='2018-03-08'
 
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
@@ -27,12 +27,12 @@
 # Originally written by Per Bothner; maintained since 2000 by Ben Elliston.
 #
 # You can get the latest version of this script from:
-# https://git.savannah.gnu.org/cgit/config.git/plain/config.guess
+# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
 #
 # Please send patches to <config-patches at gnu.org>.
 
 
-me=$(echo "$0" | sed -e 's,.*/,,')
+me=`echo "$0" | sed -e 's,.*/,,'`
 
 usage="\
 Usage: $0 [OPTION]
@@ -50,7 +50,7 @@
 GNU config.guess ($timestamp)
 
 Originally written by Per Bothner.
-Copyright 1992-2020 Free Software Foundation, Inc.
+Copyright 1992-2018 Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -84,6 +84,8 @@
   exit 1
 fi
 
+trap 'exit 1' 1 2 15
+
 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a
 # compiler to aid in system detection is discouraged as it requires
 # temporary files to be created and, as you can see below, it is a
@@ -94,53 +96,49 @@
 
 # Portable tmp directory creation inspired by the Autoconf team.
 
-tmp=
-# shellcheck disable=SC2172
-trap 'test -z "$tmp" || rm -fr "$tmp"' 0 1 2 13 15
+set_cc_for_build='
+trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
+trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
+: ${TMPDIR=/tmp} ;
+ { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+ { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
+ { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
+ { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
+dummy=$tmp/dummy ;
+tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
+case $CC_FOR_BUILD,$HOST_CC,$CC in
+ ,,)    echo "int x;" > "$dummy.c" ;
+	for c in cc gcc c89 c99 ; do
+	  if ($c -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then
+	     CC_FOR_BUILD="$c"; break ;
+	  fi ;
+	done ;
+	if test x"$CC_FOR_BUILD" = x ; then
+	  CC_FOR_BUILD=no_compiler_found ;
+	fi
+	;;
+ ,,*)   CC_FOR_BUILD=$CC ;;
+ ,*,*)  CC_FOR_BUILD=$HOST_CC ;;
+esac ; set_cc_for_build= ;'
 
-set_cc_for_build() {
-    # prevent multiple calls if $tmp is already set
-    test "$tmp" && return 0
-    : "${TMPDIR=/tmp}"
-    # shellcheck disable=SC2039
-    { tmp=$( (umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null) && test -n "$tmp" && test -d "$tmp" ; } ||
-	{ test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir "$tmp" 2>/dev/null) ; } ||
-	{ tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir "$tmp" 2>/dev/null) && echo "Warning: creating insecure temp directory" >&2 ; } ||
-	{ echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; }
-    dummy=$tmp/dummy
-    case ${CC_FOR_BUILD-},${HOST_CC-},${CC-} in
-	,,)    echo "int x;" > "$dummy.c"
-	       for driver in cc gcc c89 c99 ; do
-		   if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then
-		       CC_FOR_BUILD="$driver"
-		       break
-		   fi
-	       done
-	       if test x"$CC_FOR_BUILD" = x ; then
-		   CC_FOR_BUILD=no_compiler_found
-	       fi
-	       ;;
-	,,*)   CC_FOR_BUILD=$CC ;;
-	,*,*)  CC_FOR_BUILD=$HOST_CC ;;
-    esac
-}
-
 # This is needed to find uname on a Pyramid OSx when run in the BSD universe.
 # (ghazi at noc.rutgers.edu 1994-08-24)
-if test -f /.attbin/uname ; then
+if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
 	PATH=$PATH:/.attbin ; export PATH
 fi
 
-UNAME_MACHINE=$( (uname -m) 2>/dev/null) || UNAME_MACHINE=unknown
-UNAME_RELEASE=$( (uname -r) 2>/dev/null) || UNAME_RELEASE=unknown
-UNAME_SYSTEM=$( (uname -s) 2>/dev/null) || UNAME_SYSTEM=unknown
-UNAME_VERSION=$( (uname -v) 2>/dev/null) || UNAME_VERSION=unknown
+UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
+UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
+UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
 
 case "$UNAME_SYSTEM" in
 Linux|GNU|GNU/*)
-	LIBC=unknown
+	# If the system lacks a compiler, then just pick glibc.
+	# We could probably try harder.
+	LIBC=gnu
 
-	set_cc_for_build
+	eval "$set_cc_for_build"
 	cat <<-EOF > "$dummy.c"
 	#include <features.h>
 	#if defined(__UCLIBC__)
@@ -147,30 +145,18 @@
 	LIBC=uclibc
 	#elif defined(__dietlibc__)
 	LIBC=dietlibc
-	#elif defined(__GLIBC__)
+	#else
 	LIBC=gnu
-	#else
-	#include <stdarg.h>
-	/* First heuristic to detect musl libc.  */
-	#ifdef __DEFINED_va_list
-	LIBC=musl
 	#endif
-	#endif
 	EOF
-	eval "$($CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g')"
+	eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`"
 
-	# Second heuristic to detect musl libc.
-	if [ "$LIBC" = unknown ] &&
-	   command -v ldd >/dev/null &&
-	   ldd --version 2>&1 | grep -q ^musl; then
-		LIBC=musl
+	# If ldd exists, use it to detect musl libc.
+	if command -v ldd >/dev/null && \
+		ldd --version 2>&1 | grep -q ^musl
+	then
+	    LIBC=musl
 	fi
-
-	# If the system lacks a compiler, then just pick glibc.
-	# We could probably try harder.
-	if [ "$LIBC" = unknown ]; then
-		LIBC=gnu
-	fi
 	;;
 esac
 
@@ -189,12 +175,11 @@
 	# Note: NetBSD doesn't particularly care about the vendor
 	# portion of the name.  We always set it to "unknown".
 	sysctl="sysctl -n hw.machine_arch"
-	UNAME_MACHINE_ARCH=$( (uname -p 2>/dev/null || \
+	UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \
 	    "/sbin/$sysctl" 2>/dev/null || \
 	    "/usr/sbin/$sysctl" 2>/dev/null || \
-	    echo unknown))
+	    echo unknown)`
 	case "$UNAME_MACHINE_ARCH" in
-	    aarch64eb) machine=aarch64_be-unknown ;;
 	    armeb) machine=armeb-unknown ;;
 	    arm*) machine=arm-unknown ;;
 	    sh3el) machine=shl-unknown ;;
@@ -201,8 +186,8 @@
 	    sh3eb) machine=sh-unknown ;;
 	    sh5el) machine=sh5le-unknown ;;
 	    earmv*)
-		arch=$(echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,')
-		endian=$(echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p')
+		arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'`
+		endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'`
 		machine="${arch}${endian}"-unknown
 		;;
 	    *) machine="$UNAME_MACHINE_ARCH"-unknown ;;
@@ -214,7 +199,7 @@
 		os=netbsdelf
 		;;
 	    arm*|i386|m68k|ns32k|sh3*|sparc|vax)
-		set_cc_for_build
+		eval "$set_cc_for_build"
 		if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
 			| grep -q __ELF__
 		then
@@ -233,7 +218,7 @@
 	case "$UNAME_MACHINE_ARCH" in
 	    earm*)
 		expr='s/^earmv[0-9]/-eabi/;s/eb$//'
-		abi=$(echo "$UNAME_MACHINE_ARCH" | sed -e "$expr")
+		abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"`
 		;;
 	esac
 	# The OS release
@@ -246,24 +231,24 @@
 		release='-gnu'
 		;;
 	    *)
-		release=$(echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2)
+		release=`echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2`
 		;;
 	esac
 	# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
 	# contains redundant information, the shorter form:
 	# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
-	echo "$machine-${os}${release}${abi-}"
+	echo "$machine-${os}${release}${abi}"
 	exit ;;
     *:Bitrig:*:*)
-	UNAME_MACHINE_ARCH=$(arch | sed 's/Bitrig.//')
+	UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
 	echo "$UNAME_MACHINE_ARCH"-unknown-bitrig"$UNAME_RELEASE"
 	exit ;;
     *:OpenBSD:*:*)
-	UNAME_MACHINE_ARCH=$(arch | sed 's/OpenBSD.//')
+	UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
 	echo "$UNAME_MACHINE_ARCH"-unknown-openbsd"$UNAME_RELEASE"
 	exit ;;
     *:LibertyBSD:*:*)
-	UNAME_MACHINE_ARCH=$(arch | sed 's/^.*BSD\.//')
+	UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'`
 	echo "$UNAME_MACHINE_ARCH"-unknown-libertybsd"$UNAME_RELEASE"
 	exit ;;
     *:MidnightBSD:*:*)
@@ -275,9 +260,6 @@
     *:SolidBSD:*:*)
 	echo "$UNAME_MACHINE"-unknown-solidbsd"$UNAME_RELEASE"
 	exit ;;
-    *:OS108:*:*)
-	echo "$UNAME_MACHINE"-unknown-os108_"$UNAME_RELEASE"
-	exit ;;
     macppc:MirBSD:*:*)
 	echo powerpc-unknown-mirbsd"$UNAME_RELEASE"
 	exit ;;
@@ -287,22 +269,19 @@
     *:Sortix:*:*)
 	echo "$UNAME_MACHINE"-unknown-sortix
 	exit ;;
-    *:Twizzler:*:*)
-	echo "$UNAME_MACHINE"-unknown-twizzler
-	exit ;;
     *:Redox:*:*)
 	echo "$UNAME_MACHINE"-unknown-redox
 	exit ;;
     mips:OSF1:*.*)
-	echo mips-dec-osf1
-	exit ;;
+        echo mips-dec-osf1
+        exit ;;
     alpha:OSF1:*:*)
 	case $UNAME_RELEASE in
 	*4.0)
-		UNAME_RELEASE=$(/usr/sbin/sizer -v | awk '{print $3}')
+		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
 		;;
 	*5.*)
-		UNAME_RELEASE=$(/usr/sbin/sizer -v | awk '{print $4}')
+		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
 		;;
 	esac
 	# According to Compaq, /usr/sbin/psrinfo has been available on
@@ -309,7 +288,7 @@
 	# OSF/1 and Tru64 systems produced since 1995.  I hope that
 	# covers most systems running today.  This code pipes the CPU
 	# types through head -n 1, so we only detect the type of CPU 0.
-	ALPHA_CPU_TYPE=$(/usr/sbin/psrinfo -v | sed -n -e 's/^  The alpha \(.*\) processor.*$/\1/p' | head -n 1)
+	ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^  The alpha \(.*\) processor.*$/\1/p' | head -n 1`
 	case "$ALPHA_CPU_TYPE" in
 	    "EV4 (21064)")
 		UNAME_MACHINE=alpha ;;
@@ -347,7 +326,7 @@
 	# A Tn.n version is a released field test version.
 	# A Xn.n version is an unreleased experimental baselevel.
 	# 1.2 uses "1.2" for uname -r.
-	echo "$UNAME_MACHINE"-dec-osf"$(echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz)"
+	echo "$UNAME_MACHINE"-dec-osf"`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`"
 	# Reset EXIT trap before exiting to avoid spurious non-zero exit code.
 	exitcode=$?
 	trap '' 0
@@ -381,7 +360,7 @@
 	exit ;;
     Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
 	# akee at wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
-	if test "$( (/bin/universe) 2>/dev/null)" = att ; then
+	if test "`(/bin/universe) 2>/dev/null`" = att ; then
 		echo pyramid-pyramid-sysv3
 	else
 		echo pyramid-pyramid-bsd
@@ -394,28 +373,28 @@
 	echo sparc-icl-nx6
 	exit ;;
     DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
-	case $(/usr/bin/uname -p) in
+	case `/usr/bin/uname -p` in
 	    sparc) echo sparc-icl-nx7; exit ;;
 	esac ;;
     s390x:SunOS:*:*)
-	echo "$UNAME_MACHINE"-ibm-solaris2"$(echo "$UNAME_RELEASE" | sed -e 's/[^.]*//')"
+	echo "$UNAME_MACHINE"-ibm-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`"
 	exit ;;
     sun4H:SunOS:5.*:*)
-	echo sparc-hal-solaris2"$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*//')"
+	echo sparc-hal-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
 	exit ;;
     sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
-	echo sparc-sun-solaris2"$(echo "$UNAME_RELEASE" | sed -e 's/[^.]*//')"
+	echo sparc-sun-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`"
 	exit ;;
     i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
 	echo i386-pc-auroraux"$UNAME_RELEASE"
 	exit ;;
     i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
-	set_cc_for_build
+	eval "$set_cc_for_build"
 	SUN_ARCH=i386
 	# If there is a compiler, see if it is configured for 64-bit objects.
 	# Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
 	# This test works for both compilers.
-	if test "$CC_FOR_BUILD" != no_compiler_found; then
+	if [ "$CC_FOR_BUILD" != no_compiler_found ]; then
 	    if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
 		(CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
 		grep IS_64BIT_ARCH >/dev/null
@@ -423,30 +402,30 @@
 		SUN_ARCH=x86_64
 	    fi
 	fi
-	echo "$SUN_ARCH"-pc-solaris2"$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*//')"
+	echo "$SUN_ARCH"-pc-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
 	exit ;;
     sun4*:SunOS:6*:*)
 	# According to config.sub, this is the proper way to canonicalize
 	# SunOS6.  Hard to guess exactly what SunOS6 will be like, but
 	# it's likely to be more like Solaris than SunOS4.
-	echo sparc-sun-solaris3"$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*//')"
+	echo sparc-sun-solaris3"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
 	exit ;;
     sun4*:SunOS:*:*)
-	case "$(/usr/bin/arch -k)" in
+	case "`/usr/bin/arch -k`" in
 	    Series*|S4*)
-		UNAME_RELEASE=$(uname -v)
+		UNAME_RELEASE=`uname -v`
 		;;
 	esac
 	# Japanese Language versions have a version number like `4.1.3-JL'.
-	echo sparc-sun-sunos"$(echo "$UNAME_RELEASE"|sed -e 's/-/_/')"
+	echo sparc-sun-sunos"`echo "$UNAME_RELEASE"|sed -e 's/-/_/'`"
 	exit ;;
     sun3*:SunOS:*:*)
 	echo m68k-sun-sunos"$UNAME_RELEASE"
 	exit ;;
     sun*:*:4.2BSD:*)
-	UNAME_RELEASE=$( (sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null)
+	UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
 	test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3
-	case "$(/bin/arch)" in
+	case "`/bin/arch`" in
 	    sun3)
 		echo m68k-sun-sunos"$UNAME_RELEASE"
 		;;
@@ -503,7 +482,7 @@
 	echo clipper-intergraph-clix"$UNAME_RELEASE"
 	exit ;;
     mips:*:*:UMIPS | mips:*:*:RISCos)
-	set_cc_for_build
+	eval "$set_cc_for_build"
 	sed 's/^	//' << EOF > "$dummy.c"
 #ifdef __cplusplus
 #include <stdio.h>  /* for printf() prototype */
@@ -526,8 +505,8 @@
 	}
 EOF
 	$CC_FOR_BUILD -o "$dummy" "$dummy.c" &&
-	  dummyarg=$(echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p') &&
-	  SYSTEM_NAME=$("$dummy" "$dummyarg") &&
+	  dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` &&
+	  SYSTEM_NAME=`"$dummy" "$dummyarg"` &&
 	    { echo "$SYSTEM_NAME"; exit; }
 	echo mips-mips-riscos"$UNAME_RELEASE"
 	exit ;;
@@ -554,11 +533,11 @@
 	exit ;;
     AViiON:dgux:*:*)
 	# DG/UX returns AViiON for all architectures
-	UNAME_PROCESSOR=$(/usr/bin/uname -p)
-	if test "$UNAME_PROCESSOR" = mc88100 || test "$UNAME_PROCESSOR" = mc88110
+	UNAME_PROCESSOR=`/usr/bin/uname -p`
+	if [ "$UNAME_PROCESSOR" = mc88100 ] || [ "$UNAME_PROCESSOR" = mc88110 ]
 	then
-	    if test "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx || \
-	       test "$TARGET_BINARY_INTERFACE"x = x
+	    if [ "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx ] || \
+	       [ "$TARGET_BINARY_INTERFACE"x = x ]
 	    then
 		echo m88k-dg-dgux"$UNAME_RELEASE"
 	    else
@@ -582,17 +561,17 @@
 	echo m68k-tektronix-bsd
 	exit ;;
     *:IRIX*:*:*)
-	echo mips-sgi-irix"$(echo "$UNAME_RELEASE"|sed -e 's/-/_/g')"
+	echo mips-sgi-irix"`echo "$UNAME_RELEASE"|sed -e 's/-/_/g'`"
 	exit ;;
     ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
 	echo romp-ibm-aix     # uname -m gives an 8 hex-code CPU id
-	exit ;;               # Note that: echo "'$(uname -s)'" gives 'AIX '
+	exit ;;               # Note that: echo "'`uname -s`'" gives 'AIX '
     i*86:AIX:*:*)
 	echo i386-ibm-aix
 	exit ;;
     ia64:AIX:*:*)
-	if test -x /usr/bin/oslevel ; then
-		IBM_REV=$(/usr/bin/oslevel)
+	if [ -x /usr/bin/oslevel ] ; then
+		IBM_REV=`/usr/bin/oslevel`
 	else
 		IBM_REV="$UNAME_VERSION.$UNAME_RELEASE"
 	fi
@@ -600,7 +579,7 @@
 	exit ;;
     *:AIX:2:3)
 	if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
-		set_cc_for_build
+		eval "$set_cc_for_build"
 		sed 's/^		//' << EOF > "$dummy.c"
 		#include <sys/systemcfg.h>
 
@@ -612,7 +591,7 @@
 			exit(0);
 			}
 EOF
-		if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=$("$dummy")
+		if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"`
 		then
 			echo "$SYSTEM_NAME"
 		else
@@ -625,15 +604,15 @@
 	fi
 	exit ;;
     *:AIX:*:[4567])
-	IBM_CPU_ID=$(/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }')
+	IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
 	if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then
 		IBM_ARCH=rs6000
 	else
 		IBM_ARCH=powerpc
 	fi
-	if test -x /usr/bin/lslpp ; then
-		IBM_REV=$(/usr/bin/lslpp -Lqc bos.rte.libc |
-			   awk -F: '{ print $3 }' | sed s/[0-9]*$/0/)
+	if [ -x /usr/bin/lslpp ] ; then
+		IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc |
+			   awk -F: '{ print $3 }' | sed s/[0-9]*$/0/`
 	else
 		IBM_REV="$UNAME_VERSION.$UNAME_RELEASE"
 	fi
@@ -661,14 +640,14 @@
 	echo m68k-hp-bsd4.4
 	exit ;;
     9000/[34678]??:HP-UX:*:*)
-	HPUX_REV=$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//')
+	HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'`
 	case "$UNAME_MACHINE" in
 	    9000/31?)            HP_ARCH=m68000 ;;
 	    9000/[34]??)         HP_ARCH=m68k ;;
 	    9000/[678][0-9][0-9])
-		if test -x /usr/bin/getconf; then
-		    sc_cpu_version=$(/usr/bin/getconf SC_CPU_VERSION 2>/dev/null)
-		    sc_kernel_bits=$(/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null)
+		if [ -x /usr/bin/getconf ]; then
+		    sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
+		    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
 		    case "$sc_cpu_version" in
 		      523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0
 		      528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1
@@ -680,8 +659,8 @@
 			esac ;;
 		    esac
 		fi
-		if test "$HP_ARCH" = ""; then
-		    set_cc_for_build
+		if [ "$HP_ARCH" = "" ]; then
+		    eval "$set_cc_for_build"
 		    sed 's/^		//' << EOF > "$dummy.c"
 
 		#define _HPUX_SOURCE
@@ -715,13 +694,13 @@
 		    exit (0);
 		}
 EOF
-		    (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=$("$dummy")
+		    (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=`"$dummy"`
 		    test -z "$HP_ARCH" && HP_ARCH=hppa
 		fi ;;
 	esac
-	if test "$HP_ARCH" = hppa2.0w
+	if [ "$HP_ARCH" = hppa2.0w ]
 	then
-	    set_cc_for_build
+	    eval "$set_cc_for_build"
 
 	    # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
 	    # 32-bit code.  hppa64-hp-hpux* has the same kernel and a compiler
@@ -743,11 +722,11 @@
 	echo "$HP_ARCH"-hp-hpux"$HPUX_REV"
 	exit ;;
     ia64:HP-UX:*:*)
-	HPUX_REV=$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//')
+	HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'`
 	echo ia64-hp-hpux"$HPUX_REV"
 	exit ;;
     3050*:HI-UX:*:*)
-	set_cc_for_build
+	eval "$set_cc_for_build"
 	sed 's/^	//' << EOF > "$dummy.c"
 	#include <unistd.h>
 	int
@@ -773,7 +752,7 @@
 	  exit (0);
 	}
 EOF
-	$CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=$("$dummy") &&
+	$CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` &&
 		{ echo "$SYSTEM_NAME"; exit; }
 	echo unknown-hitachi-hiuxwe2
 	exit ;;
@@ -793,7 +772,7 @@
 	echo hppa1.0-hp-osf
 	exit ;;
     i*86:OSF1:*:*)
-	if test -x /usr/sbin/sysversion ; then
+	if [ -x /usr/sbin/sysversion ] ; then
 	    echo "$UNAME_MACHINE"-unknown-osf1mk
 	else
 	    echo "$UNAME_MACHINE"-unknown-osf1
@@ -842,14 +821,14 @@
 	echo craynv-cray-unicosmp"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
 	exit ;;
     F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
-	FUJITSU_PROC=$(uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz)
-	FUJITSU_SYS=$(uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///')
-	FUJITSU_REL=$(echo "$UNAME_RELEASE" | sed -e 's/ /_/')
+	FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
+	FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`
+	FUJITSU_REL=`echo "$UNAME_RELEASE" | sed -e 's/ /_/'`
 	echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
 	exit ;;
     5000:UNIX_System_V:4.*:*)
-	FUJITSU_SYS=$(uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///')
-	FUJITSU_REL=$(echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/')
+	FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`
+	FUJITSU_REL=`echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'`
 	echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
 	exit ;;
     i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
@@ -861,19 +840,8 @@
     *:BSD/OS:*:*)
 	echo "$UNAME_MACHINE"-unknown-bsdi"$UNAME_RELEASE"
 	exit ;;
-    arm:FreeBSD:*:*)
-	UNAME_PROCESSOR=$(uname -p)
-	set_cc_for_build
-	if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
-	    | grep -q __ARM_PCS_VFP
-	then
-	    echo "${UNAME_PROCESSOR}"-unknown-freebsd"$(echo ${UNAME_RELEASE}|sed -e 's/[-(].*//')"-gnueabi
-	else
-	    echo "${UNAME_PROCESSOR}"-unknown-freebsd"$(echo ${UNAME_RELEASE}|sed -e 's/[-(].*//')"-gnueabihf
-	fi
-	exit ;;
     *:FreeBSD:*:*)
-	UNAME_PROCESSOR=$(/usr/bin/uname -p)
+	UNAME_PROCESSOR=`/usr/bin/uname -p`
 	case "$UNAME_PROCESSOR" in
 	    amd64)
 		UNAME_PROCESSOR=x86_64 ;;
@@ -880,7 +848,7 @@
 	    i386)
 		UNAME_PROCESSOR=i586 ;;
 	esac
-	echo "$UNAME_PROCESSOR"-unknown-freebsd"$(echo "$UNAME_RELEASE"|sed -e 's/[-(].*//')"
+	echo "$UNAME_PROCESSOR"-unknown-freebsd"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`"
 	exit ;;
     i*:CYGWIN*:*)
 	echo "$UNAME_MACHINE"-pc-cygwin
@@ -913,21 +881,21 @@
 	echo "$UNAME_MACHINE"-pc-uwin
 	exit ;;
     amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
-	echo x86_64-pc-cygwin
+	echo x86_64-unknown-cygwin
 	exit ;;
     prep*:SunOS:5.*:*)
-	echo powerpcle-unknown-solaris2"$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*//')"
+	echo powerpcle-unknown-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
 	exit ;;
     *:GNU:*:*)
 	# the GNU system
-	echo "$(echo "$UNAME_MACHINE"|sed -e 's,[-/].*$,,')-unknown-$LIBC$(echo "$UNAME_RELEASE"|sed -e 's,/.*$,,')"
+	echo "`echo "$UNAME_MACHINE"|sed -e 's,[-/].*$,,'`-unknown-$LIBC`echo "$UNAME_RELEASE"|sed -e 's,/.*$,,'`"
 	exit ;;
     *:GNU/*:*:*)
 	# other systems with GNU libc and userland
-	echo "$UNAME_MACHINE-unknown-$(echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]")$(echo "$UNAME_RELEASE"|sed -e 's/[-(].*//')-$LIBC"
+	echo "$UNAME_MACHINE-unknown-`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`-$LIBC"
 	exit ;;
-    *:Minix:*:*)
-	echo "$UNAME_MACHINE"-unknown-minix
+    i*86:Minix:*:*)
+	echo "$UNAME_MACHINE"-pc-minix
 	exit ;;
     aarch64:Linux:*:*)
 	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
@@ -937,7 +905,7 @@
 	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
 	exit ;;
     alpha:Linux:*:*)
-	case $(sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' /proc/cpuinfo 2>/dev/null) in
+	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
 	  EV5)   UNAME_MACHINE=alphaev5 ;;
 	  EV56)  UNAME_MACHINE=alphaev56 ;;
 	  PCA56) UNAME_MACHINE=alphapca56 ;;
@@ -954,7 +922,7 @@
 	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
 	exit ;;
     arm*:Linux:*:*)
-	set_cc_for_build
+	eval "$set_cc_for_build"
 	if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
 	    | grep -q __ARM_EABI__
 	then
@@ -996,9 +964,6 @@
     k1om:Linux:*:*)
 	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
 	exit ;;
-    loongarch32:Linux:*:* | loongarch64:Linux:*:* | loongarchx32:Linux:*:*)
-	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-	exit ;;
     m32r*:Linux:*:*)
 	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
 	exit ;;
@@ -1006,51 +971,23 @@
 	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
 	exit ;;
     mips:Linux:*:* | mips64:Linux:*:*)
-	set_cc_for_build
-	IS_GLIBC=0
-	test x"${LIBC}" = xgnu && IS_GLIBC=1
+	eval "$set_cc_for_build"
 	sed 's/^	//' << EOF > "$dummy.c"
 	#undef CPU
-	#undef mips
-	#undef mipsel
-	#undef mips64
-	#undef mips64el
-	#if ${IS_GLIBC} && defined(_ABI64)
-	LIBCABI=gnuabi64
-	#else
-	#if ${IS_GLIBC} && defined(_ABIN32)
-	LIBCABI=gnuabin32
-	#else
-	LIBCABI=${LIBC}
-	#endif
-	#endif
-
-	#if ${IS_GLIBC} && defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6
-	CPU=mipsisa64r6
-	#else
-	#if ${IS_GLIBC} && !defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6
-	CPU=mipsisa32r6
-	#else
-	#if defined(__mips64)
-	CPU=mips64
-	#else
-	CPU=mips
-	#endif
-	#endif
-	#endif
-
+	#undef ${UNAME_MACHINE}
+	#undef ${UNAME_MACHINE}el
 	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
-	MIPS_ENDIAN=el
+	CPU=${UNAME_MACHINE}el
 	#else
 	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
-	MIPS_ENDIAN=
+	CPU=${UNAME_MACHINE}
 	#else
-	MIPS_ENDIAN=
+	CPU=
 	#endif
 	#endif
 EOF
-	eval "$($CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI')"
-	test "x$CPU" != x && { echo "$CPU${MIPS_ENDIAN}-unknown-linux-$LIBCABI"; exit; }
+	eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU'`"
+	test "x$CPU" != x && { echo "$CPU-unknown-linux-$LIBC"; exit; }
 	;;
     mips64el:Linux:*:*)
 	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
@@ -1069,7 +1006,7 @@
 	exit ;;
     parisc:Linux:*:* | hppa:Linux:*:*)
 	# Look for CPU level
-	case $(grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2) in
+	case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
 	  PA7*) echo hppa1.1-unknown-linux-"$LIBC" ;;
 	  PA8*) echo hppa2.0-unknown-linux-"$LIBC" ;;
 	  *)    echo hppa-unknown-linux-"$LIBC" ;;
@@ -1109,17 +1046,7 @@
 	echo "$UNAME_MACHINE"-dec-linux-"$LIBC"
 	exit ;;
     x86_64:Linux:*:*)
-	set_cc_for_build
-	LIBCABI=$LIBC
-	if test "$CC_FOR_BUILD" != no_compiler_found; then
-	    if (echo '#ifdef __ILP32__'; echo IS_X32; echo '#endif') | \
-		(CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
-		grep IS_X32 >/dev/null
-	    then
-		LIBCABI="$LIBC"x32
-	    fi
-	fi
-	echo "$UNAME_MACHINE"-pc-linux-"$LIBCABI"
+	echo "$UNAME_MACHINE"-pc-linux-"$LIBC"
 	exit ;;
     xtensa*:Linux:*:*)
 	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
@@ -1159,7 +1086,7 @@
 	echo "$UNAME_MACHINE"-pc-msdosdjgpp
 	exit ;;
     i*86:*:4.*:*)
-	UNAME_REL=$(echo "$UNAME_RELEASE" | sed 's/\/MP$//')
+	UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'`
 	if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
 		echo "$UNAME_MACHINE"-univel-sysv"$UNAME_REL"
 	else
@@ -1168,19 +1095,19 @@
 	exit ;;
     i*86:*:5:[678]*)
 	# UnixWare 7.x, OpenUNIX and OpenServer 6.
-	case $(/bin/uname -X | grep "^Machine") in
+	case `/bin/uname -X | grep "^Machine"` in
 	    *486*)	     UNAME_MACHINE=i486 ;;
 	    *Pentium)	     UNAME_MACHINE=i586 ;;
 	    *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
 	esac
-	echo "$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}"
+	echo "$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}{$UNAME_VERSION}"
 	exit ;;
     i*86:*:3.2:*)
 	if test -f /usr/options/cb.name; then
-		UNAME_REL=$(sed -n 's/.*Version //p' </usr/options/cb.name)
+		UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
 		echo "$UNAME_MACHINE"-pc-isc"$UNAME_REL"
 	elif /bin/uname -X 2>/dev/null >/dev/null ; then
-		UNAME_REL=$( (/bin/uname -X|grep Release|sed -e 's/.*= //'))
+		UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
 		(/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
 		(/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
 			&& UNAME_MACHINE=i586
@@ -1230,7 +1157,7 @@
     3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
 	OS_REL=''
 	test -r /etc/.relid \
-	&& OS_REL=.$(sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid)
+	&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
 	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
 	  && { echo i486-ncr-sysv4.3"$OS_REL"; exit; }
 	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
@@ -1241,7 +1168,7 @@
     NCR*:*:4.2:* | MPRAS*:*:4.2:*)
 	OS_REL='.3'
 	test -r /etc/.relid \
-	    && OS_REL=.$(sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid)
+	    && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
 	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
 	    && { echo i486-ncr-sysv4.3"$OS_REL"; exit; }
 	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
@@ -1274,7 +1201,7 @@
 	exit ;;
     *:SINIX-*:*:*)
 	if uname -p 2>/dev/null >/dev/null ; then
-		UNAME_MACHINE=$( (uname -p) 2>/dev/null)
+		UNAME_MACHINE=`(uname -p) 2>/dev/null`
 		echo "$UNAME_MACHINE"-sni-sysv4
 	else
 		echo ns32k-sni-sysv
@@ -1308,7 +1235,7 @@
 	echo mips-sony-newsos6
 	exit ;;
     R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
-	if test -d /usr/nec; then
+	if [ -d /usr/nec ]; then
 		echo mips-nec-sysv"$UNAME_RELEASE"
 	else
 		echo mips-unknown-sysv"$UNAME_RELEASE"
@@ -1356,48 +1283,44 @@
     *:Rhapsody:*:*)
 	echo "$UNAME_MACHINE"-apple-rhapsody"$UNAME_RELEASE"
 	exit ;;
-    arm64:Darwin:*:*)
-	echo aarch64-apple-darwin"$UNAME_RELEASE"
-	exit ;;
     *:Darwin:*:*)
-	UNAME_PROCESSOR=$(uname -p)
-	case $UNAME_PROCESSOR in
-	    unknown) UNAME_PROCESSOR=powerpc ;;
-	esac
-	if command -v xcode-select > /dev/null 2> /dev/null && \
-		! xcode-select --print-path > /dev/null 2> /dev/null ; then
-	    # Avoid executing cc if there is no toolchain installed as
-	    # cc will be a stub that puts up a graphical alert
-	    # prompting the user to install developer tools.
-	    CC_FOR_BUILD=no_compiler_found
-	else
-	    set_cc_for_build
+	UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
+	eval "$set_cc_for_build"
+	if test "$UNAME_PROCESSOR" = unknown ; then
+	    UNAME_PROCESSOR=powerpc
 	fi
-	if test "$CC_FOR_BUILD" != no_compiler_found; then
-	    if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
-		   (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
-		   grep IS_64BIT_ARCH >/dev/null
-	    then
-		case $UNAME_PROCESSOR in
-		    i386) UNAME_PROCESSOR=x86_64 ;;
-		    powerpc) UNAME_PROCESSOR=powerpc64 ;;
-		esac
+	if test "`echo "$UNAME_RELEASE" | sed -e 's/\..*//'`" -le 10 ; then
+	    if [ "$CC_FOR_BUILD" != no_compiler_found ]; then
+		if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
+		       (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
+		       grep IS_64BIT_ARCH >/dev/null
+		then
+		    case $UNAME_PROCESSOR in
+			i386) UNAME_PROCESSOR=x86_64 ;;
+			powerpc) UNAME_PROCESSOR=powerpc64 ;;
+		    esac
+		fi
+		# On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc
+		if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \
+		       (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
+		       grep IS_PPC >/dev/null
+		then
+		    UNAME_PROCESSOR=powerpc
+		fi
 	    fi
-	    # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc
-	    if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \
-		   (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
-		   grep IS_PPC >/dev/null
-	    then
-		UNAME_PROCESSOR=powerpc
-	    fi
 	elif test "$UNAME_PROCESSOR" = i386 ; then
-	    # uname -m returns i386 or x86_64
-	    UNAME_PROCESSOR=$UNAME_MACHINE
+	    # Avoid executing cc on OS X 10.9, as it ships with a stub
+	    # that puts up a graphical alert prompting to install
+	    # developer tools.  Any system running Mac OS X 10.7 or
+	    # later (Darwin 11 and later) is required to have a 64-bit
+	    # processor. This is not true of the ARM version of Darwin
+	    # that Apple uses in portable devices.
+	    UNAME_PROCESSOR=x86_64
 	fi
 	echo "$UNAME_PROCESSOR"-apple-darwin"$UNAME_RELEASE"
 	exit ;;
     *:procnto*:*:* | *:QNX:[0123456789]*:*)
-	UNAME_PROCESSOR=$(uname -p)
+	UNAME_PROCESSOR=`uname -p`
 	if test "$UNAME_PROCESSOR" = x86; then
 		UNAME_PROCESSOR=i386
 		UNAME_MACHINE=pc
@@ -1435,7 +1358,6 @@
 	# "uname -m" is not consistent, so use $cputype instead. 386
 	# is converted to i386 for consistency with other x86
 	# operating systems.
-	# shellcheck disable=SC2154
 	if test "$cputype" = 386; then
 	    UNAME_MACHINE=i386
 	else
@@ -1465,10 +1387,10 @@
 	echo mips-sei-seiux"$UNAME_RELEASE"
 	exit ;;
     *:DragonFly:*:*)
-	echo "$UNAME_MACHINE"-unknown-dragonfly"$(echo "$UNAME_RELEASE"|sed -e 's/[-(].*//')"
+	echo "$UNAME_MACHINE"-unknown-dragonfly"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`"
 	exit ;;
     *:*VMS:*:*)
-	UNAME_MACHINE=$( (uname -p) 2>/dev/null)
+	UNAME_MACHINE=`(uname -p) 2>/dev/null`
 	case "$UNAME_MACHINE" in
 	    A*) echo alpha-dec-vms ; exit ;;
 	    I*) echo ia64-dec-vms ; exit ;;
@@ -1478,7 +1400,7 @@
 	echo i386-pc-xenix
 	exit ;;
     i*86:skyos:*:*)
-	echo "$UNAME_MACHINE"-pc-skyos"$(echo "$UNAME_RELEASE" | sed -e 's/ .*$//')"
+	echo "$UNAME_MACHINE"-pc-skyos"`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'`"
 	exit ;;
     i*86:rdos:*:*)
 	echo "$UNAME_MACHINE"-pc-rdos
@@ -1492,51 +1414,71 @@
     amd64:Isilon\ OneFS:*:*)
 	echo x86_64-unknown-onefs
 	exit ;;
-    *:Unleashed:*:*)
-	echo "$UNAME_MACHINE"-unknown-unleashed"$UNAME_RELEASE"
-	exit ;;
 esac
 
-# No uname command or uname output not recognized.
-set_cc_for_build
-cat > "$dummy.c" <<EOF
-#ifdef _SEQUENT_
-#include <sys/types.h>
-#include <sys/utsname.h>
-#endif
-#if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__)
-#if defined (vax) || defined (__vax) || defined (__vax__) || defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__)
-#include <signal.h>
-#if defined(_SIZE_T_) || defined(SIGLOST)
-#include <sys/utsname.h>
-#endif
-#endif
-#endif
-main ()
-{
-#if defined (sony)
-#if defined (MIPSEB)
-  /* BFD wants "bsd" instead of "newsos".  Perhaps BFD should be changed,
-     I don't know....  */
-  printf ("mips-sony-bsd\n"); exit (0);
-#else
-#include <sys/param.h>
-  printf ("m68k-sony-newsos%s\n",
-#ifdef NEWSOS4
-  "4"
-#else
-  ""
-#endif
-  ); exit (0);
-#endif
-#endif
+echo "$0: unable to guess system type" >&2
 
-#if defined (NeXT)
-#if !defined (__ARCHITECTURE__)
+case "$UNAME_MACHINE:$UNAME_SYSTEM" in
+    mips:Linux | mips64:Linux)
+	# If we got here on MIPS GNU/Linux, output extra information.
+	cat >&2 <<EOF
+
+NOTE: MIPS GNU/Linux systems require a C compiler to fully recognize
+the system type. Please install a C compiler and try again.
+EOF
+	;;
+esac
+
+cat >&2 <<EOF
+
+This script (version $timestamp), has failed to recognize the
+operating system you are using. If your script is old, overwrite *all*
+copies of config.guess and config.sub with the latest versions from:
+
+  https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
+and
+  https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
+
+If $0 has already been updated, send the following data and any
+information you think might be pertinent to config-patches at gnu.org to
+provide the necessary information to handle your system.
+
+config.guess timestamp = $timestamp
+
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null`
+
+hostinfo               = `(hostinfo) 2>/dev/null`
+/bin/universe          = `(/bin/universe) 2>/dev/null`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null`
+/bin/arch              = `(/bin/arch) 2>/dev/null`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
+
+UNAME_MACHINE = "$UNAME_MACHINE"
+UNAME_RELEASE = "$UNAME_RELEASE"
+UNAME_SYSTEM  = "$UNAME_SYSTEM"
+UNAME_VERSION = "$UNAME_VERSION"
+EOF
+
+exit 1
+
+# Local variables:
+# eval: (add-hook 'before-save-hook 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
+CTURE__)
 #define __ARCHITECTURE__ "m68k"
 #endif
   int version;
-  version=$( (hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null);
+  version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
   if (version < 4)
     printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
   else
@@ -1628,7 +1570,7 @@
 }
 EOF
 
-$CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null && SYSTEM_NAME=$($dummy) &&
+$CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null && SYSTEM_NAME=`$dummy` &&
 	{ echo "$SYSTEM_NAME"; exit; }
 
 # Apollos put the system type in the environment.
@@ -1653,16 +1595,10 @@
 operating system you are using. If your script is old, overwrite *all*
 copies of config.guess and config.sub with the latest versions from:
 
-  https://git.savannah.gnu.org/cgit/config.git/plain/config.guess
+  https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
 and
-  https://git.savannah.gnu.org/cgit/config.git/plain/config.sub
-EOF
+  https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
 
-year=$(echo $timestamp | sed 's,-.*,,')
-# shellcheck disable=SC2003
-if test "$(expr "$(date +%Y)" - "$year")" -lt 3 ; then
-   cat >&2 <<EOF
-
 If $0 has already been updated, send the following data and any
 information you think might be pertinent to config-patches at gnu.org to
 provide the necessary information to handle your system.
@@ -1669,20 +1605,20 @@
 
 config.guess timestamp = $timestamp
 
-uname -m = $( (uname -m) 2>/dev/null || echo unknown)
-uname -r = $( (uname -r) 2>/dev/null || echo unknown)
-uname -s = $( (uname -s) 2>/dev/null || echo unknown)
-uname -v = $( (uname -v) 2>/dev/null || echo unknown)
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
 
-/usr/bin/uname -p = $( (/usr/bin/uname -p) 2>/dev/null)
-/bin/uname -X     = $( (/bin/uname -X) 2>/dev/null)
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null`
 
-hostinfo               = $( (hostinfo) 2>/dev/null)
-/bin/universe          = $( (/bin/universe) 2>/dev/null)
-/usr/bin/arch -k       = $( (/usr/bin/arch -k) 2>/dev/null)
-/bin/arch              = $( (/bin/arch) 2>/dev/null)
-/usr/bin/oslevel       = $( (/usr/bin/oslevel) 2>/dev/null)
-/usr/convex/getsysinfo = $( (/usr/convex/getsysinfo) 2>/dev/null)
+hostinfo               = `(hostinfo) 2>/dev/null`
+/bin/universe          = `(/bin/universe) 2>/dev/null`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null`
+/bin/arch              = `(/bin/arch) 2>/dev/null`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
 
 UNAME_MACHINE = "$UNAME_MACHINE"
 UNAME_RELEASE = "$UNAME_RELEASE"
@@ -1689,7 +1625,6 @@
 UNAME_SYSTEM  = "$UNAME_SYSTEM"
 UNAME_VERSION = "$UNAME_VERSION"
 EOF
-fi
 
 exit 1
 

Modified: trunk/Build/source/utils/asymptote/config.h.in
===================================================================
--- trunk/Build/source/utils/asymptote/config.h.in	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/config.h.in	2021-01-02 16:31:31 UTC (rev 57291)
@@ -45,6 +45,9 @@
 /* Define to 1 if you have the `lgamma' function. */
 #undef HAVE_LGAMMA
 
+/* Define to 1 if you have the `curl' library (-lcurl). */
+#undef HAVE_LIBCURL
+
 /* Define to 1 if you have the `ncurses' library (-lncurses). */
 #undef HAVE_LIBCURSES
 

Modified: trunk/Build/source/utils/asymptote/config.sub
===================================================================
--- trunk/Build/source/utils/asymptote/config.sub	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/config.sub	2021-01-02 16:31:31 UTC (rev 57291)
@@ -2,7 +2,7 @@
 # Configuration validation subroutine script.
 #   Copyright 1992-2020 Free Software Foundation, Inc.
 
-timestamp='2020-12-22'
+timestamp='2020-01-01'
 
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
@@ -33,7 +33,7 @@
 # Otherwise, we print the canonical config type on stdout and succeed.
 
 # You can get the latest version of this script from:
-# https://git.savannah.gnu.org/cgit/config.git/plain/config.sub
+# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
 
 # This file is supposed to be the same for all GNU packages
 # and recognize all the CPU types, system types and aliases
@@ -50,7 +50,7 @@
 #	CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
 # It is wrong to echo any other type of specification.
 
-me=$(echo "$0" | sed -e 's,.*/,,')
+me=`echo "$0" | sed -e 's,.*/,,'`
 
 usage="\
 Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS
@@ -124,7 +124,7 @@
 		;;
 	*-*-*-*)
 		basic_machine=$field1-$field2
-		basic_os=$field3-$field4
+		os=$field3-$field4
 		;;
 	*-*-*)
 		# Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two
@@ -131,20 +131,21 @@
 		# parts
 		maybe_os=$field2-$field3
 		case $maybe_os in
-			nto-qnx* | linux-* | uclinux-uclibc* \
+			nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc \
+			| linux-newlib* | linux-musl* | linux-uclibc* | uclinux-uclibc* \
 			| uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \
 			| netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \
 			| storm-chaos* | os2-emx* | rtmk-nova*)
 				basic_machine=$field1
-				basic_os=$maybe_os
+				os=$maybe_os
 				;;
 			android-linux)
 				basic_machine=$field1-unknown
-				basic_os=linux-android
+				os=linux-android
 				;;
 			*)
 				basic_machine=$field1-$field2
-				basic_os=$field3
+				os=$field3
 				;;
 		esac
 		;;
@@ -153,7 +154,7 @@
 		case $field1-$field2 in
 			decstation-3100)
 				basic_machine=mips-dec
-				basic_os=
+				os=
 				;;
 			*-*)
 				# Second component is usually, but not always the OS
@@ -161,7 +162,7 @@
 					# Prevent following clause from handling this valid os
 					sun*os*)
 						basic_machine=$field1
-						basic_os=$field2
+						os=$field2
 						;;
 					# Manufacturers
 					dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \
@@ -174,11 +175,11 @@
 					| microblaze* | sim | cisco \
 					| oki | wec | wrs | winbond)
 						basic_machine=$field1-$field2
-						basic_os=
+						os=
 						;;
 					*)
 						basic_machine=$field1
-						basic_os=$field2
+						os=$field2
 						;;
 				esac
 			;;
@@ -190,451 +191,447 @@
 		case $field1 in
 			386bsd)
 				basic_machine=i386-pc
-				basic_os=bsd
+				os=bsd
 				;;
 			a29khif)
 				basic_machine=a29k-amd
-				basic_os=udi
+				os=udi
 				;;
 			adobe68k)
 				basic_machine=m68010-adobe
-				basic_os=scout
+				os=scout
 				;;
 			alliant)
 				basic_machine=fx80-alliant
-				basic_os=
+				os=
 				;;
 			altos | altos3068)
 				basic_machine=m68k-altos
-				basic_os=
+				os=
 				;;
 			am29k)
 				basic_machine=a29k-none
-				basic_os=bsd
+				os=bsd
 				;;
 			amdahl)
 				basic_machine=580-amdahl
-				basic_os=sysv
+				os=sysv
 				;;
 			amiga)
 				basic_machine=m68k-unknown
-				basic_os=
+				os=
 				;;
 			amigaos | amigados)
 				basic_machine=m68k-unknown
-				basic_os=amigaos
+				os=amigaos
 				;;
 			amigaunix | amix)
 				basic_machine=m68k-unknown
-				basic_os=sysv4
+				os=sysv4
 				;;
 			apollo68)
 				basic_machine=m68k-apollo
-				basic_os=sysv
+				os=sysv
 				;;
 			apollo68bsd)
 				basic_machine=m68k-apollo
-				basic_os=bsd
+				os=bsd
 				;;
 			aros)
 				basic_machine=i386-pc
-				basic_os=aros
+				os=aros
 				;;
 			aux)
 				basic_machine=m68k-apple
-				basic_os=aux
+				os=aux
 				;;
 			balance)
 				basic_machine=ns32k-sequent
-				basic_os=dynix
+				os=dynix
 				;;
 			blackfin)
 				basic_machine=bfin-unknown
-				basic_os=linux
+				os=linux
 				;;
 			cegcc)
 				basic_machine=arm-unknown
-				basic_os=cegcc
+				os=cegcc
 				;;
 			convex-c1)
 				basic_machine=c1-convex
-				basic_os=bsd
+				os=bsd
 				;;
 			convex-c2)
 				basic_machine=c2-convex
-				basic_os=bsd
+				os=bsd
 				;;
 			convex-c32)
 				basic_machine=c32-convex
-				basic_os=bsd
+				os=bsd
 				;;
 			convex-c34)
 				basic_machine=c34-convex
-				basic_os=bsd
+				os=bsd
 				;;
 			convex-c38)
 				basic_machine=c38-convex
-				basic_os=bsd
+				os=bsd
 				;;
 			cray)
 				basic_machine=j90-cray
-				basic_os=unicos
+				os=unicos
 				;;
 			crds | unos)
 				basic_machine=m68k-crds
-				basic_os=
+				os=
 				;;
 			da30)
 				basic_machine=m68k-da30
-				basic_os=
+				os=
 				;;
 			decstation | pmax | pmin | dec3100 | decstatn)
 				basic_machine=mips-dec
-				basic_os=
+				os=
 				;;
 			delta88)
 				basic_machine=m88k-motorola
-				basic_os=sysv3
+				os=sysv3
 				;;
 			dicos)
 				basic_machine=i686-pc
-				basic_os=dicos
+				os=dicos
 				;;
 			djgpp)
 				basic_machine=i586-pc
-				basic_os=msdosdjgpp
+				os=msdosdjgpp
 				;;
 			ebmon29k)
 				basic_machine=a29k-amd
-				basic_os=ebmon
+				os=ebmon
 				;;
 			es1800 | OSE68k | ose68k | ose | OSE)
 				basic_machine=m68k-ericsson
-				basic_os=ose
+				os=ose
 				;;
 			gmicro)
 				basic_machine=tron-gmicro
-				basic_os=sysv
+				os=sysv
 				;;
 			go32)
 				basic_machine=i386-pc
-				basic_os=go32
+				os=go32
 				;;
 			h8300hms)
 				basic_machine=h8300-hitachi
-				basic_os=hms
+				os=hms
 				;;
 			h8300xray)
 				basic_machine=h8300-hitachi
-				basic_os=xray
+				os=xray
 				;;
 			h8500hms)
 				basic_machine=h8500-hitachi
-				basic_os=hms
+				os=hms
 				;;
 			harris)
 				basic_machine=m88k-harris
-				basic_os=sysv3
+				os=sysv3
 				;;
 			hp300 | hp300hpux)
 				basic_machine=m68k-hp
-				basic_os=hpux
+				os=hpux
 				;;
 			hp300bsd)
 				basic_machine=m68k-hp
-				basic_os=bsd
+				os=bsd
 				;;
 			hppaosf)
 				basic_machine=hppa1.1-hp
-				basic_os=osf
+				os=osf
 				;;
 			hppro)
 				basic_machine=hppa1.1-hp
-				basic_os=proelf
+				os=proelf
 				;;
 			i386mach)
 				basic_machine=i386-mach
-				basic_os=mach
+				os=mach
 				;;
 			isi68 | isi)
 				basic_machine=m68k-isi
-				basic_os=sysv
+				os=sysv
 				;;
 			m68knommu)
 				basic_machine=m68k-unknown
-				basic_os=linux
+				os=linux
 				;;
 			magnum | m3230)
 				basic_machine=mips-mips
-				basic_os=sysv
+				os=sysv
 				;;
 			merlin)
 				basic_machine=ns32k-utek
-				basic_os=sysv
+				os=sysv
 				;;
 			mingw64)
 				basic_machine=x86_64-pc
-				basic_os=mingw64
+				os=mingw64
 				;;
 			mingw32)
 				basic_machine=i686-pc
-				basic_os=mingw32
+				os=mingw32
 				;;
 			mingw32ce)
 				basic_machine=arm-unknown
-				basic_os=mingw32ce
+				os=mingw32ce
 				;;
 			monitor)
 				basic_machine=m68k-rom68k
-				basic_os=coff
+				os=coff
 				;;
 			morphos)
 				basic_machine=powerpc-unknown
-				basic_os=morphos
+				os=morphos
 				;;
 			moxiebox)
 				basic_machine=moxie-unknown
-				basic_os=moxiebox
+				os=moxiebox
 				;;
 			msdos)
 				basic_machine=i386-pc
-				basic_os=msdos
+				os=msdos
 				;;
 			msys)
 				basic_machine=i686-pc
-				basic_os=msys
+				os=msys
 				;;
 			mvs)
 				basic_machine=i370-ibm
-				basic_os=mvs
+				os=mvs
 				;;
 			nacl)
 				basic_machine=le32-unknown
-				basic_os=nacl
+				os=nacl
 				;;
 			ncr3000)
 				basic_machine=i486-ncr
-				basic_os=sysv4
+				os=sysv4
 				;;
 			netbsd386)
 				basic_machine=i386-pc
-				basic_os=netbsd
+				os=netbsd
 				;;
 			netwinder)
 				basic_machine=armv4l-rebel
-				basic_os=linux
+				os=linux
 				;;
 			news | news700 | news800 | news900)
 				basic_machine=m68k-sony
-				basic_os=newsos
+				os=newsos
 				;;
 			news1000)
 				basic_machine=m68030-sony
-				basic_os=newsos
+				os=newsos
 				;;
 			necv70)
 				basic_machine=v70-nec
-				basic_os=sysv
+				os=sysv
 				;;
 			nh3000)
 				basic_machine=m68k-harris
-				basic_os=cxux
+				os=cxux
 				;;
 			nh[45]000)
 				basic_machine=m88k-harris
-				basic_os=cxux
+				os=cxux
 				;;
 			nindy960)
 				basic_machine=i960-intel
-				basic_os=nindy
+				os=nindy
 				;;
 			mon960)
 				basic_machine=i960-intel
-				basic_os=mon960
+				os=mon960
 				;;
 			nonstopux)
 				basic_machine=mips-compaq
-				basic_os=nonstopux
+				os=nonstopux
 				;;
 			os400)
 				basic_machine=powerpc-ibm
-				basic_os=os400
+				os=os400
 				;;
 			OSE68000 | ose68000)
 				basic_machine=m68000-ericsson
-				basic_os=ose
+				os=ose
 				;;
 			os68k)
 				basic_machine=m68k-none
-				basic_os=os68k
+				os=os68k
 				;;
 			paragon)
 				basic_machine=i860-intel
-				basic_os=osf
+				os=osf
 				;;
 			parisc)
 				basic_machine=hppa-unknown
-				basic_os=linux
+				os=linux
 				;;
-			psp)
-				basic_machine=mipsallegrexel-sony
-				basic_os=psp
-				;;
 			pw32)
 				basic_machine=i586-unknown
-				basic_os=pw32
+				os=pw32
 				;;
 			rdos | rdos64)
 				basic_machine=x86_64-pc
-				basic_os=rdos
+				os=rdos
 				;;
 			rdos32)
 				basic_machine=i386-pc
-				basic_os=rdos
+				os=rdos
 				;;
 			rom68k)
 				basic_machine=m68k-rom68k
-				basic_os=coff
+				os=coff
 				;;
 			sa29200)
 				basic_machine=a29k-amd
-				basic_os=udi
+				os=udi
 				;;
 			sei)
 				basic_machine=mips-sei
-				basic_os=seiux
+				os=seiux
 				;;
 			sequent)
 				basic_machine=i386-sequent
-				basic_os=
+				os=
 				;;
 			sps7)
 				basic_machine=m68k-bull
-				basic_os=sysv2
+				os=sysv2
 				;;
 			st2000)
 				basic_machine=m68k-tandem
-				basic_os=
+				os=
 				;;
 			stratus)
 				basic_machine=i860-stratus
-				basic_os=sysv4
+				os=sysv4
 				;;
 			sun2)
 				basic_machine=m68000-sun
-				basic_os=
+				os=
 				;;
 			sun2os3)
 				basic_machine=m68000-sun
-				basic_os=sunos3
+				os=sunos3
 				;;
 			sun2os4)
 				basic_machine=m68000-sun
-				basic_os=sunos4
+				os=sunos4
 				;;
 			sun3)
 				basic_machine=m68k-sun
-				basic_os=
+				os=
 				;;
 			sun3os3)
 				basic_machine=m68k-sun
-				basic_os=sunos3
+				os=sunos3
 				;;
 			sun3os4)
 				basic_machine=m68k-sun
-				basic_os=sunos4
+				os=sunos4
 				;;
 			sun4)
 				basic_machine=sparc-sun
-				basic_os=
+				os=
 				;;
 			sun4os3)
 				basic_machine=sparc-sun
-				basic_os=sunos3
+				os=sunos3
 				;;
 			sun4os4)
 				basic_machine=sparc-sun
-				basic_os=sunos4
+				os=sunos4
 				;;
 			sun4sol2)
 				basic_machine=sparc-sun
-				basic_os=solaris2
+				os=solaris2
 				;;
 			sun386 | sun386i | roadrunner)
 				basic_machine=i386-sun
-				basic_os=
+				os=
 				;;
 			sv1)
 				basic_machine=sv1-cray
-				basic_os=unicos
+				os=unicos
 				;;
 			symmetry)
 				basic_machine=i386-sequent
-				basic_os=dynix
+				os=dynix
 				;;
 			t3e)
 				basic_machine=alphaev5-cray
-				basic_os=unicos
+				os=unicos
 				;;
 			t90)
 				basic_machine=t90-cray
-				basic_os=unicos
+				os=unicos
 				;;
 			toad1)
 				basic_machine=pdp10-xkl
-				basic_os=tops20
+				os=tops20
 				;;
 			tpf)
 				basic_machine=s390x-ibm
-				basic_os=tpf
+				os=tpf
 				;;
 			udi29k)
 				basic_machine=a29k-amd
-				basic_os=udi
+				os=udi
 				;;
 			ultra3)
 				basic_machine=a29k-nyu
-				basic_os=sym1
+				os=sym1
 				;;
 			v810 | necv810)
 				basic_machine=v810-nec
-				basic_os=none
+				os=none
 				;;
 			vaxv)
 				basic_machine=vax-dec
-				basic_os=sysv
+				os=sysv
 				;;
 			vms)
 				basic_machine=vax-dec
-				basic_os=vms
+				os=vms
 				;;
 			vsta)
 				basic_machine=i386-pc
-				basic_os=vsta
+				os=vsta
 				;;
 			vxworks960)
 				basic_machine=i960-wrs
-				basic_os=vxworks
+				os=vxworks
 				;;
 			vxworks68)
 				basic_machine=m68k-wrs
-				basic_os=vxworks
+				os=vxworks
 				;;
 			vxworks29k)
 				basic_machine=a29k-wrs
-				basic_os=vxworks
+				os=vxworks
 				;;
 			xbox)
 				basic_machine=i686-pc
-				basic_os=mingw32
+				os=mingw32
 				;;
 			ymp)
 				basic_machine=ymp-cray
-				basic_os=unicos
+				os=unicos
 				;;
 			*)
 				basic_machine=$1
-				basic_os=
+				os=
 				;;
 		esac
 		;;
@@ -686,17 +683,17 @@
 	bluegene*)
 		cpu=powerpc
 		vendor=ibm
-		basic_os=cnk
+		os=cnk
 		;;
 	decsystem10* | dec10*)
 		cpu=pdp10
 		vendor=dec
-		basic_os=tops10
+		os=tops10
 		;;
 	decsystem20* | dec20*)
 		cpu=pdp10
 		vendor=dec
-		basic_os=tops20
+		os=tops20
 		;;
 	delta | 3300 | motorola-3300 | motorola-delta \
 	      | 3300-motorola | delta-motorola)
@@ -706,7 +703,7 @@
 	dpx2*)
 		cpu=m68k
 		vendor=bull
-		basic_os=sysv3
+		os=sysv3
 		;;
 	encore | umax | mmax)
 		cpu=ns32k
@@ -715,7 +712,7 @@
 	elxsi)
 		cpu=elxsi
 		vendor=elxsi
-		basic_os=${basic_os:-bsd}
+		os=${os:-bsd}
 		;;
 	fx2800)
 		cpu=i860
@@ -728,7 +725,7 @@
 	h3050r* | hiux*)
 		cpu=hppa1.1
 		vendor=hitachi
-		basic_os=hiuxwe2
+		os=hiuxwe2
 		;;
 	hp3k9[0-9][0-9] | hp9[0-9][0-9])
 		cpu=hppa1.0
@@ -769,38 +766,38 @@
 		vendor=hp
 		;;
 	i*86v32)
-		cpu=$(echo "$1" | sed -e 's/86.*/86/')
+		cpu=`echo "$1" | sed -e 's/86.*/86/'`
 		vendor=pc
-		basic_os=sysv32
+		os=sysv32
 		;;
 	i*86v4*)
-		cpu=$(echo "$1" | sed -e 's/86.*/86/')
+		cpu=`echo "$1" | sed -e 's/86.*/86/'`
 		vendor=pc
-		basic_os=sysv4
+		os=sysv4
 		;;
 	i*86v)
-		cpu=$(echo "$1" | sed -e 's/86.*/86/')
+		cpu=`echo "$1" | sed -e 's/86.*/86/'`
 		vendor=pc
-		basic_os=sysv
+		os=sysv
 		;;
 	i*86sol2)
-		cpu=$(echo "$1" | sed -e 's/86.*/86/')
+		cpu=`echo "$1" | sed -e 's/86.*/86/'`
 		vendor=pc
-		basic_os=solaris2
+		os=solaris2
 		;;
 	j90 | j90-cray)
 		cpu=j90
 		vendor=cray
-		basic_os=${basic_os:-unicos}
+		os=${os:-unicos}
 		;;
 	iris | iris4d)
 		cpu=mips
 		vendor=sgi
-		case $basic_os in
+		case $os in
 		    irix*)
 			;;
 		    *)
-			basic_os=irix4
+			os=irix4
 			;;
 		esac
 		;;
@@ -811,26 +808,26 @@
 	*mint | mint[0-9]* | *MiNT | *MiNT[0-9]*)
 		cpu=m68k
 		vendor=atari
-		basic_os=mint
+		os=mint
 		;;
 	news-3600 | risc-news)
 		cpu=mips
 		vendor=sony
-		basic_os=newsos
+		os=newsos
 		;;
 	next | m*-next)
 		cpu=m68k
 		vendor=next
-		case $basic_os in
+		case $os in
 		    openstep*)
 		        ;;
 		    nextstep*)
 			;;
 		    ns2*)
-		      basic_os=nextstep2
+		      os=nextstep2
 			;;
 		    *)
-		      basic_os=nextstep3
+		      os=nextstep3
 			;;
 		esac
 		;;
@@ -841,12 +838,12 @@
 	op50n-* | op60c-*)
 		cpu=hppa1.1
 		vendor=oki
-		basic_os=proelf
+		os=proelf
 		;;
 	pa-hitachi)
 		cpu=hppa1.1
 		vendor=hitachi
-		basic_os=hiuxwe2
+		os=hiuxwe2
 		;;
 	pbd)
 		cpu=sparc
@@ -883,12 +880,12 @@
 	sde)
 		cpu=mipsisa32
 		vendor=sde
-		basic_os=${basic_os:-elf}
+		os=${os:-elf}
 		;;
 	simso-wrs)
 		cpu=sparclite
 		vendor=wrs
-		basic_os=vxworks
+		os=vxworks
 		;;
 	tower | tower-32)
 		cpu=m68k
@@ -905,7 +902,7 @@
 	w89k-*)
 		cpu=hppa1.1
 		vendor=winbond
-		basic_os=proelf
+		os=proelf
 		;;
 	none)
 		cpu=none
@@ -917,7 +914,7 @@
 		;;
 	leon-*|leon[3-9]-*)
 		cpu=sparc
-		vendor=$(echo "$basic_machine" | sed 's/-.*//')
+		vendor=`echo "$basic_machine" | sed 's/-.*//'`
 		;;
 
 	*-*)
@@ -958,11 +955,11 @@
 	# some cases the only manufacturer, in others, it is the most popular.
 	craynv-unknown)
 		vendor=cray
-		basic_os=${basic_os:-unicosmp}
+		os=${os:-unicosmp}
 		;;
 	c90-unknown | c90-cray)
 		vendor=cray
-		basic_os=${Basic_os:-unicos}
+		os=${os:-unicos}
 		;;
 	fx80-unknown)
 		vendor=alliant
@@ -1006,7 +1003,7 @@
 	dpx20-unknown | dpx20-bull)
 		cpu=rs6000
 		vendor=bull
-		basic_os=${basic_os:-bosx}
+		os=${os:-bosx}
 		;;
 
 	# Here we normalize CPU types irrespective of the vendor
@@ -1015,7 +1012,7 @@
 		;;
 	blackfin-*)
 		cpu=bfin
-		basic_os=linux
+		os=linux
 		;;
 	c54x-*)
 		cpu=tic54x
@@ -1028,7 +1025,7 @@
 		;;
 	e500v[12]-*)
 		cpu=powerpc
-		basic_os=${basic_os}"spe"
+		os=$os"spe"
 		;;
 	mips3*-*)
 		cpu=mips64
@@ -1038,7 +1035,7 @@
 		;;
 	m68knommu-*)
 		cpu=m68k
-		basic_os=linux
+		os=linux
 		;;
 	m9s12z-* | m68hcs12z-* | hcs12z-* | s12z-*)
 		cpu=s12z
@@ -1048,7 +1045,7 @@
 		;;
 	parisc-*)
 		cpu=hppa
-		basic_os=linux
+		os=linux
 		;;
 	pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
 		cpu=i586
@@ -1084,7 +1081,7 @@
 		cpu=mipsisa64sb1el
 		;;
 	sh5e[lb]-*)
-		cpu=$(echo "$cpu" | sed 's/^\(sh.\)e\(.\)$/\1\2e/')
+		cpu=`echo "$cpu" | sed 's/^\(sh.\)e\(.\)$/\1\2e/'`
 		;;
 	spur-*)
 		cpu=spur
@@ -1102,16 +1099,13 @@
 		cpu=x86_64
 		;;
 	xscale-* | xscalee[bl]-*)
-		cpu=$(echo "$cpu" | sed 's/^xscale/arm/')
+		cpu=`echo "$cpu" | sed 's/^xscale/arm/'`
 		;;
-	arm64-*)
-		cpu=aarch64
-		;;
 
 	# Recognize the canonical CPU Types that limit and/or modify the
 	# company names they are paired with.
 	cr16-*)
-		basic_os=${basic_os:-elf}
+		os=${os:-elf}
 		;;
 	crisv32-* | etraxfs*-*)
 		cpu=crisv32
@@ -1122,7 +1116,7 @@
 		vendor=axis
 		;;
 	crx-*)
-		basic_os=${basic_os:-elf}
+		os=${os:-elf}
 		;;
 	neo-tandem)
 		cpu=neo
@@ -1144,12 +1138,16 @@
 		cpu=nsx
 		vendor=tandem
 		;;
-	mipsallegrexel-sony)
-		cpu=mipsallegrexel
-		vendor=sony
+	s390-*)
+		cpu=s390
+		vendor=ibm
 		;;
+	s390x-*)
+		cpu=s390x
+		vendor=ibm
+		;;
 	tile*-*)
-		basic_os=${basic_os:-linux-gnu}
+		os=${os:-linux-gnu}
 		;;
 
 	*)
@@ -1166,7 +1164,7 @@
 			| am33_2.0 \
 			| amdgcn \
 			| arc | arceb \
-			| arm | arm[lb]e | arme[lb] | armv* \
+			| arm  | arm[lb]e | arme[lb] | armv* \
 			| avr | avr32 \
 			| asmjs \
 			| ba \
@@ -1185,7 +1183,6 @@
 			| k1om \
 			| le32 | le64 \
 			| lm32 \
-			| loongarch32 | loongarch64 | loongarchx32 \
 			| m32c | m32r | m32rle \
 			| m5200 | m68000 | m680[012346]0 | m68360 | m683?2 | m68k \
 			| m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x \
@@ -1232,7 +1229,6 @@
 			| pyramid \
 			| riscv | riscv32 | riscv64 \
 			| rl78 | romp | rs6000 | rx \
-			| s390 | s390x \
 			| score \
 			| sh | shl \
 			| sh[1234] | sh[24]a | sh[24]ae[lb] | sh[23]e | she[lb] | sh[lb]e \
@@ -1242,7 +1238,6 @@
 			| sparcv8 | sparcv9 | sparcv9b | sparcv9v | sv1 | sx* \
 			| spu \
 			| tahoe \
-			| thumbv7* \
 			| tic30 | tic4x | tic54x | tic55x | tic6x | tic80 \
 			| tron \
 			| ubicom32 \
@@ -1280,47 +1275,8 @@
 
 # Decode manufacturer-specific aliases for certain operating systems.
 
-if test x$basic_os != x
+if [ x$os != x ]
 then
-
-# First recognize some ad-hoc caes, or perhaps split kernel-os, or else just
-# set os.
-case $basic_os in
-	gnu/linux*)
-		kernel=linux
-		os=$(echo $basic_os | sed -e 's|gnu/linux|gnu|')
-		;;
-	os2-emx)
-		kernel=os2
-		os=$(echo $basic_os | sed -e 's|os2-emx|emx|')
-		;;
-	nto-qnx*)
-		kernel=nto
-		os=$(echo $basic_os | sed -e 's|nto-qnx|qnx|')
-		;;
-	*-*)
-		# shellcheck disable=SC2162
-		IFS="-" read kernel os <<EOF
-$basic_os
-EOF
-		;;
-	# Default OS when just kernel was specified
-	nto*)
-		kernel=nto
-		os=$(echo $basic_os | sed -e 's|nto|qnx|')
-		;;
-	linux*)
-		kernel=linux
-		os=$(echo $basic_os | sed -e 's|linux|gnu|')
-		;;
-	*)
-		kernel=
-		os=$basic_os
-		;;
-esac
-
-# Now, normalize the OS (knowing we just have one component, it's not a kernel,
-# etc.)
 case $os in
 	# First match some system type aliases that might get confused
 	# with valid system types.
@@ -1332,7 +1288,7 @@
 		os=cnk
 		;;
 	solaris1 | solaris1.*)
-		os=$(echo $os | sed -e 's|solaris1|sunos4|')
+		os=`echo $os | sed -e 's|solaris1|sunos4|'`
 		;;
 	solaris)
 		os=solaris2
@@ -1340,6 +1296,9 @@
 	unixware*)
 		os=sysv4.2uw
 		;;
+	gnu/linux*)
+		os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
+		;;
 	# es1800 is here to avoid being matched by es* (a different OS)
 	es1800*)
 		os=ose
@@ -1361,9 +1320,12 @@
 		os=sco3.2v4
 		;;
 	sco3.2.[4-9]*)
-		os=$(echo $os | sed -e 's/sco3.2./sco3.2v/')
+		os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
 		;;
-	sco*v* | scout)
+	sco3.2v[4-9]* | sco5v6*)
+		# Don't forget version if it is 3.2v4 or newer.
+		;;
+	scout)
 		# Don't match below
 		;;
 	sco*)
@@ -1372,12 +1334,68 @@
 	psos*)
 		os=psos
 		;;
+	# Now accept the basic system types.
+	# The portable systems comes first.
+	# Each alternative MUST end in a * to match a version number.
+	# sysv* is not here because it comes later, after sysvr4.
+	gnu* | bsd* | mach* | minix* | genix* | ultrix* | irix* \
+	     | *vms* | esix* | aix* | cnk* | sunos | sunos[34]*\
+	     | hpux* | unos* | osf* | luna* | dgux* | auroraux* | solaris* \
+	     | sym* | kopensolaris* | plan9* \
+	     | amigaos* | amigados* | msdos* | newsos* | unicos* | aof* \
+	     | aos* | aros* | cloudabi* | sortix* | twizzler* \
+	     | nindy* | vxsim* | vxworks* | ebmon* | hms* | mvs* \
+	     | clix* | riscos* | uniplus* | iris* | isc* | rtu* | xenix* \
+	     | knetbsd* | mirbsd* | netbsd* \
+	     | bitrig* | openbsd* | solidbsd* | libertybsd* | os108* \
+	     | ekkobsd* | kfreebsd* | freebsd* | riscix* | lynxos* \
+	     | bosx* | nextstep* | cxux* | aout* | elf* | oabi* \
+	     | ptx* | coff* | ecoff* | winnt* | domain* | vsta* \
+	     | udi* | eabi* | lites* | ieee* | go32* | aux* | hcos* \
+	     | chorusrdb* | cegcc* | glidix* \
+	     | cygwin* | msys* | pe* | moss* | proelf* | rtems* \
+	     | midipix* | mingw32* | mingw64* | linux-gnu* | linux-android* \
+	     | linux-newlib* | linux-musl* | linux-uclibc* \
+	     | uxpv* | beos* | mpeix* | udk* | moxiebox* \
+	     | interix* | uwin* | mks* | rhapsody* | darwin* \
+	     | openstep* | oskit* | conix* | pw32* | nonstopux* \
+	     | storm-chaos* | tops10* | tenex* | tops20* | its* \
+	     | os2* | vos* | palmos* | uclinux* | nucleus* \
+	     | morphos* | superux* | rtmk* | windiss* \
+	     | powermax* | dnix* | nx6 | nx7 | sei* | dragonfly* \
+	     | skyos* | haiku* | rdos* | toppers* | drops* | es* \
+	     | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \
+	     | midnightbsd* | amdhsa* | unleashed* | emscripten* | wasi* \
+	     | nsk* | powerunix)
+	# Remember, each alternative MUST END IN *, to match a version number.
+		;;
 	qnx*)
-		os=qnx
+		case $cpu in
+		    x86 | i*86)
+			;;
+		    *)
+			os=nto-$os
+			;;
+		esac
 		;;
 	hiux*)
 		os=hiuxwe2
 		;;
+	nto-qnx*)
+		;;
+	nto*)
+		os=`echo $os | sed -e 's|nto|nto-qnx|'`
+		;;
+	sim | xray | os68k* | v88r* \
+	    | windows* | osx | abug | netware* | os9* \
+	    | macos* | mpw* | magic* | mmixware* | mon960* | lnews*)
+		;;
+	linux-dietlibc)
+		os=linux-dietlibc
+		;;
+	linux*)
+		os=`echo $os | sed -e 's|linux|linux-gnu|'`
+		;;
 	lynx*178)
 		os=lynxos178
 		;;
@@ -1384,14 +1402,11 @@
 	lynx*5)
 		os=lynxos5
 		;;
-	lynxos*)
-		# don't get caught up in next wildcard
-		;;
 	lynx*)
 		os=lynxos
 		;;
-	mac[0-9]*)
-		os=$(echo "$os" | sed -e 's|mac|macos|')
+	mac*)
+		os=`echo "$os" | sed -e 's|mac|macos|'`
 		;;
 	opened*)
 		os=openedition
@@ -1400,10 +1415,10 @@
 		os=os400
 		;;
 	sunos5*)
-		os=$(echo "$os" | sed -e 's|sunos5|solaris2|')
+		os=`echo "$os" | sed -e 's|sunos5|solaris2|'`
 		;;
 	sunos6*)
-		os=$(echo "$os" | sed -e 's|sunos6|solaris3|')
+		os=`echo "$os" | sed -e 's|sunos6|solaris3|'`
 		;;
 	wince*)
 		os=wince
@@ -1437,7 +1452,7 @@
 		;;
 	# Preserve the version number of sinix5.
 	sinix5.*)
-		os=$(echo $os | sed -e 's|sinix|sysv|')
+		os=`echo $os | sed -e 's|sinix|sysv|'`
 		;;
 	sinix*)
 		os=sysv4
@@ -1460,6 +1475,9 @@
 	sysvr4)
 		os=sysv4
 		;;
+	# This must come after sysvr4.
+	sysv*)
+		;;
 	ose*)
 		os=ose
 		;;
@@ -1466,6 +1484,9 @@
 	*mint | mint[0-9]* | *MiNT | MiNT[0-9]*)
 		os=mint
 		;;
+	zvmoe)
+		os=zvmoe
+		;;
 	dicos*)
 		os=dicos
 		;;
@@ -1482,11 +1503,19 @@
 			;;
 		esac
 		;;
+	nacl*)
+		;;
+	ios)
+		;;
+	none)
+		;;
+	*-eabi)
+		;;
 	*)
-		# No normalization, but not necessarily accepted, that comes below.
+		echo Invalid configuration \`"$1"\': system \`"$os"\' not recognized 1>&2
+		exit 1
 		;;
 esac
-
 else
 
 # Here we handle the default operating systems that come with various machines.
@@ -1499,7 +1528,6 @@
 # will signal an error saying that MANUFACTURER isn't an operating
 # system, and we'll never get to this point.
 
-kernel=
 case $cpu-$vendor in
 	score-*)
 		os=elf
@@ -1511,8 +1539,7 @@
 		os=riscix1.2
 		;;
 	arm*-rebel)
-		kernel=linux
-		os=gnu
+		os=linux
 		;;
 	arm*-semi)
 		os=aout
@@ -1678,166 +1705,77 @@
 		os=none
 		;;
 esac
-
 fi
 
-# Now, validate our (potentially fixed-up) OS.
-case $os in
-	# Sometimes we do "kernel-abi", so those need to count as OSes.
-	musl* | newlib* | uclibc*)
-		;;
-	# Likewise for "kernel-libc"
-	eabi | eabihf | gnueabi | gnueabihf)
-		;;
-	# Now accept the basic system types.
-	# The portable systems comes first.
-	# Each alternative MUST end in a * to match a version number.
-	gnu* | android* | bsd* | mach* | minix* | genix* | ultrix* | irix* \
-	     | *vms* | esix* | aix* | cnk* | sunos | sunos[34]* \
-	     | hpux* | unos* | osf* | luna* | dgux* | auroraux* | solaris* \
-	     | sym* |  plan9* | psp* | sim* | xray* | os68k* | v88r* \
-	     | hiux* | abug | nacl* | netware* | windows* \
-	     | os9* | macos* | osx* | ios* \
-	     | mpw* | magic* | mmixware* | mon960* | lnews* \
-	     | amigaos* | amigados* | msdos* | newsos* | unicos* | aof* \
-	     | aos* | aros* | cloudabi* | sortix* | twizzler* \
-	     | nindy* | vxsim* | vxworks* | ebmon* | hms* | mvs* \
-	     | clix* | riscos* | uniplus* | iris* | isc* | rtu* | xenix* \
-	     | mirbsd* | netbsd* | dicos* | openedition* | ose* \
-	     | bitrig* | openbsd* | solidbsd* | libertybsd* | os108* \
-	     | ekkobsd* | freebsd* | riscix* | lynxos* | os400* \
-	     | bosx* | nextstep* | cxux* | aout* | elf* | oabi* \
-	     | ptx* | coff* | ecoff* | winnt* | domain* | vsta* \
-	     | udi* | lites* | ieee* | go32* | aux* | hcos* \
-	     | chorusrdb* | cegcc* | glidix* \
-	     | cygwin* | msys* | pe* | moss* | proelf* | rtems* \
-	     | midipix* | mingw32* | mingw64* | mint* \
-	     | uxpv* | beos* | mpeix* | udk* | moxiebox* \
-	     | interix* | uwin* | mks* | rhapsody* | darwin* \
-	     | openstep* | oskit* | conix* | pw32* | nonstopux* \
-	     | storm-chaos* | tops10* | tenex* | tops20* | its* \
-	     | os2* | vos* | palmos* | uclinux* | nucleus* | morphos* \
-	     | scout* | superux* | sysv* | rtmk* | tpf* | windiss* \
-	     | powermax* | dnix* | nx6 | nx7 | sei* | dragonfly* \
-	     | skyos* | haiku* | rdos* | toppers* | drops* | es* \
-	     | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \
-	     | midnightbsd* | amdhsa* | unleashed* | emscripten* | wasi* \
-	     | nsk* | powerunix* | genode* | zvmoe* | qnx* | emx*)
-		;;
-	# This one is extra strict with allowed versions
-	sco3.2v2 | sco3.2v[4-9]* | sco5v6*)
-		# Don't forget version if it is 3.2v4 or newer.
-		;;
-	none)
-		;;
-	*)
-		echo Invalid configuration \`"$1"\': OS \`"$os"\' not recognized 1>&2
-		exit 1
-		;;
-esac
-
-# As a final step for OS-related things, validate the OS-kernel combination
-# (given a valid OS), if there is a kernel.
-case $kernel-$os in
-	linux-gnu* | linux-dietlibc* | linux-android* | linux-newlib* | linux-musl* | linux-uclibc* )
-		;;
-	uclinux-uclibc* )
-		;;
-	-dietlibc* | -newlib* | -musl* | -uclibc* )
-		# These are just libc implementations, not actual OSes, and thus
-		# require a kernel.
-		echo "Invalid configuration \`$1': libc \`$os' needs explicit kernel." 1>&2
-		exit 1
-		;;
-	kfreebsd*-gnu* | kopensolaris*-gnu*)
-		;;
-	nto-qnx*)
-		;;
-	os2-emx)
-		;;
-	*-eabi* | *-gnueabi*)
-		;;
-	-*)
-		# Blank kernel with real OS is always fine.
-		;;
-	*-*)
-		echo "Invalid configuration \`$1': Kernel \`$kernel' not known to work with OS \`$os'." 1>&2
-		exit 1
-		;;
-esac
-
 # Here we handle the case where we know the os, and the CPU type, but not the
 # manufacturer.  We pick the logical manufacturer.
 case $vendor in
 	unknown)
-		case $cpu-$os in
-			*-riscix*)
+		case $os in
+			riscix*)
 				vendor=acorn
 				;;
-			*-sunos*)
+			sunos*)
 				vendor=sun
 				;;
-			*-cnk* | *-aix*)
+			cnk*|-aix*)
 				vendor=ibm
 				;;
-			*-beos*)
+			beos*)
 				vendor=be
 				;;
-			*-hpux*)
+			hpux*)
 				vendor=hp
 				;;
-			*-mpeix*)
+			mpeix*)
 				vendor=hp
 				;;
-			*-hiux*)
+			hiux*)
 				vendor=hitachi
 				;;
-			*-unos*)
+			unos*)
 				vendor=crds
 				;;
-			*-dgux*)
+			dgux*)
 				vendor=dg
 				;;
-			*-luna*)
+			luna*)
 				vendor=omron
 				;;
-			*-genix*)
+			genix*)
 				vendor=ns
 				;;
-			*-clix*)
+			clix*)
 				vendor=intergraph
 				;;
-			*-mvs* | *-opened*)
+			mvs* | opened*)
 				vendor=ibm
 				;;
-			*-os400*)
+			os400*)
 				vendor=ibm
 				;;
-			s390-* | s390x-*)
-				vendor=ibm
-				;;
-			*-ptx*)
+			ptx*)
 				vendor=sequent
 				;;
-			*-tpf*)
+			tpf*)
 				vendor=ibm
 				;;
-			*-vxsim* | *-vxworks* | *-windiss*)
+			vxsim* | vxworks* | windiss*)
 				vendor=wrs
 				;;
-			*-aux*)
+			aux*)
 				vendor=apple
 				;;
-			*-hms*)
+			hms*)
 				vendor=hitachi
 				;;
-			*-mpw* | *-macos*)
+			mpw* | macos*)
 				vendor=apple
 				;;
-			*-*mint | *-mint[0-9]* | *-*MiNT | *-MiNT[0-9]*)
+			*mint | mint[0-9]* | *MiNT | MiNT[0-9]*)
 				vendor=atari
 				;;
-			*-vos*)
+			vos*)
 				vendor=stratus
 				;;
 		esac
@@ -1844,7 +1782,7 @@
 		;;
 esac
 
-echo "$cpu-$vendor-${kernel:+$kernel-}$os"
+echo "$cpu-$vendor-$os"
 exit
 
 # Local variables:

Modified: trunk/Build/source/utils/asymptote/configure
===================================================================
--- trunk/Build/source/utils/asymptote/configure	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/configure	2021-01-02 16:31:31 UTC (rev 57291)
@@ -1,8 +1,8 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for Asymptote 2.65.
+# Generated by GNU Autoconf 2.69 for Asymptote 2.68.
 #
-# Report bugs to <http://sourceforge.net/projects/asymptote>.
+# Report bugs to <https://sourceforge.net/projects/asymptote>.
 #
 #
 # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
@@ -267,7 +267,7 @@
     $as_echo "$0: be upgraded to zsh 4.3.4 or later."
   else
     $as_echo "$0: Please tell bug-autoconf at gnu.org and
-$0: http://sourceforge.net/projects/asymptote about your
+$0: https://sourceforge.net/projects/asymptote about your
 $0: system, including any error possibly output before this
 $0: message. Then install a modern shell, or manually run
 $0: the script under such a shell if you do have one."
@@ -580,9 +580,9 @@
 # Identity of this package.
 PACKAGE_NAME='Asymptote'
 PACKAGE_TARNAME='asymptote'
-PACKAGE_VERSION='2.65'
-PACKAGE_STRING='Asymptote 2.65'
-PACKAGE_BUGREPORT='http://sourceforge.net/projects/asymptote'
+PACKAGE_VERSION='2.68'
+PACKAGE_STRING='Asymptote 2.68'
+PACKAGE_BUGREPORT='https://sourceforge.net/projects/asymptote'
 PACKAGE_URL=''
 
 # Factoring default headers for most tests.
@@ -724,6 +724,7 @@
 enable_gc_debug
 enable_gc_full_debug
 enable_sigsegv
+enable_curl
 enable_readline
 enable_static
 enable_fftw
@@ -1287,7 +1288,7 @@
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures Asymptote 2.65 to adapt to many kinds of systems.
+\`configure' configures Asymptote 2.68 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1352,7 +1353,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of Asymptote 2.65:";;
+     short | recursive ) echo "Configuration of Asymptote 2.68:";;
    esac
   cat <<\_ACEOF
 
@@ -1367,13 +1368,13 @@
   --enable-gc-debug       enable (slow) garbage collector debugging
   --enable-gc-full-debug  enable (very slow) garbage collector backtrace
   --enable-sigsegv[=yes]  enable GNU Stack Overflow Handler
+  --enable-curl[=yes]     enable libcurl and compile with optional URL support
   --enable-readline[=yes] enable GNU Readline Library
   --enable-static[=no]    link against static libraries
   --enable-fftw[=yes]     enable FFTW Library
   --enable-gsl[=yes]      enable GNU Scientific Library
   --enable-gl[=yes]       enable OpenGL Library
-  --enable-offscreen[=no] enable experimental offscreen rendering using OSMesa
-                          library
+  --enable-offscreen[=no] use OSMesa library to implement offscreen rendering
   --enable-openimageio[=no]
                           enable experimental OpenImageIO Library
 
@@ -1406,7 +1407,7 @@
 Use these variables to override the choices made by `configure' or to help
 it to find libraries and programs with nonstandard names/locations.
 
-Report bugs to <http://sourceforge.net/projects/asymptote>.
+Report bugs to <https://sourceforge.net/projects/asymptote>.
 _ACEOF
 ac_status=$?
 fi
@@ -1469,7 +1470,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-Asymptote configure 2.65
+Asymptote configure 2.68
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -1822,9 +1823,9 @@
 $as_echo "$as_me: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&2;}
     { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
-( $as_echo "## -------------------------------------------------------- ##
-## Report this to http://sourceforge.net/projects/asymptote ##
-## -------------------------------------------------------- ##"
+( $as_echo "## --------------------------------------------------------- ##
+## Report this to https://sourceforge.net/projects/asymptote ##
+## --------------------------------------------------------- ##"
      ) | sed "s/^/$as_me: WARNING:     /" >&2
     ;;
 esac
@@ -2055,7 +2056,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by Asymptote $as_me 2.65, which was
+It was created by Asymptote $as_me 2.68, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -4229,7 +4230,7 @@
 
   test -n "$TEXI2DVI" && break
 done
-test -n "$TEXI2DVI" || TEXI2DVI="@echo \*\*\*\*\*\*\*\*\*\* Please install texi2dvi or put http://asymptote.sourceforge.net/asymptote.pdf in the doc directory: cannot execute texi2dvi"
+test -n "$TEXI2DVI" || TEXI2DVI="@echo \*\*\*\*\*\*\*\*\*\* Please install texi2dvi or put https://asymptote.sourceforge.io/asymptote.pdf in the doc directory: cannot execute texi2dvi"
 
 
 
@@ -6662,6 +6663,65 @@
 fi
 
 
+# Check whether --enable-curl was given.
+if test "${enable_curl+set}" = set; then :
+  enableval=$enable_curl;
+fi
+
+if test "x$enable_curl" != "xno"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for curl_easy_init in -lcurl" >&5
+$as_echo_n "checking for curl_easy_init in -lcurl... " >&6; }
+if ${ac_cv_lib_curl_curl_easy_init+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lcurl  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char curl_easy_init ();
+int
+main ()
+{
+return curl_easy_init ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+  ac_cv_lib_curl_curl_easy_init=yes
+else
+  ac_cv_lib_curl_curl_easy_init=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_curl_curl_easy_init" >&5
+$as_echo "$ac_cv_lib_curl_curl_easy_init" >&6; }
+if test "x$ac_cv_lib_curl_curl_easy_init" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBCURL 1
+_ACEOF
+
+  LIBS="-lcurl $LIBS"
+
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: *** Could not find libcurl: will compile without optional URL support. ***" >&5
+$as_echo "$as_me: *** Could not find libcurl: will compile without optional URL support. ***" >&6;}
+fi
+
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: *** libcurl support disabled by configure flag: will compile without optional URL support. ***" >&5
+$as_echo "$as_me: *** libcurl support disabled by configure flag: will compile without optional URL support. ***" >&6;}
+fi
+
 # Check whether --enable-readline was given.
 if test "${enable_readline+set}" = set; then :
   enableval=$enable_readline;
@@ -9267,7 +9327,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by Asymptote $as_me 2.65, which was
+This file was extended by Asymptote $as_me 2.68, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -9323,13 +9383,13 @@
 Configuration headers:
 $config_headers
 
-Report bugs to <http://sourceforge.net/projects/asymptote>."
+Report bugs to <https://sourceforge.net/projects/asymptote>."
 
 _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-Asymptote config.status 2.65
+Asymptote config.status 2.68
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 

Modified: trunk/Build/source/utils/asymptote/configure.ac
===================================================================
--- trunk/Build/source/utils/asymptote/configure.ac	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/configure.ac	2021-01-02 16:31:31 UTC (rev 57291)
@@ -3,7 +3,7 @@
 # this file.
 
 AC_PREREQ(2)
-AC_INIT([Asymptote],[2.65],[http://sourceforge.net/projects/asymptote])
+AC_INIT([Asymptote],[2.68],[https://sourceforge.net/projects/asymptote])
 VERSION=$PACKAGE_VERSION
 AC_SUBST(VERSION)
 m4_include([ax_pthread.m4])
@@ -55,7 +55,7 @@
 ])
 
 AC_CHECK_PROGS(TEXI2DVI,[texi2dvi],
-[@echo \*\*\*\*\*\*\*\*\*\* Please install texi2dvi or put http://asymptote.sourceforge.net/asymptote.pdf in the doc directory: cannot execute texi2dvi])
+[@echo \*\*\*\*\*\*\*\*\*\* Please install texi2dvi or put https://asymptote.sourceforge.io/asymptote.pdf in the doc directory: cannot execute texi2dvi])
 
 AC_SUBST(TEXI2DVI)
 
@@ -265,6 +265,15 @@
 
 AC_CHECK_LIB([rt], [sched_yield])
 
+AC_ARG_ENABLE(curl,
+[AS_HELP_STRING(--enable-curl[[[=yes]]],enable libcurl and compile with optional URL support)])
+if test "x$enable_curl" != "xno"; then
+  AC_CHECK_LIB([curl],[curl_easy_init],,
+  AC_MSG_NOTICE([*** Could not find libcurl: will compile without optional URL support. ***]))
+else
+  AC_MSG_NOTICE([*** libcurl support disabled by configure flag: will compile without optional URL support. ***])
+fi
+
 AC_ARG_ENABLE(readline,
 [AS_HELP_STRING(--enable-readline[[[=yes]]],enable GNU Readline Library)])
 
@@ -368,7 +377,7 @@
 [AS_HELP_STRING(--enable-gl[[[=yes]]],enable OpenGL Library)])
 
 AC_ARG_ENABLE(offscreen,
-[AS_HELP_STRING(--enable-offscreen[[[=no]]],enable experimental offscreen rendering using OSMesa library)])
+[AS_HELP_STRING(--enable-offscreen[[[=no]]],use OSMesa library to implement offscreen rendering)])
 
 AC_ARG_ENABLE(OpenImageIO,
 [AS_HELP_STRING(--enable-openimageio[[[=no]]],enable experimental OpenImageIO Library)])

Modified: trunk/Build/source/utils/asymptote/constructor.cc
===================================================================
--- trunk/Build/source/utils/asymptote/constructor.cc	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/constructor.cc	2021-01-02 16:31:31 UTC (rev 57291)
@@ -46,7 +46,7 @@
       if (ft->getResult()->kind == ty_void)
         return true;
     }
-  
+
   return false;
 }
 
@@ -91,7 +91,7 @@
   assert(r);
 
   types::function *ft=new types::function(r, init->getSignature());
- 
+
   ostringstream out;
   ft->printVar(out, symbol::trans("<constructor>"));
 
@@ -101,7 +101,7 @@
 
   // Translate the function.
   fe.e.beginScope();
-  
+
   transConstructorBody(pos, fe, r, init);
 
   fe.e.endScope();

Modified: trunk/Build/source/utils/asymptote/dec.cc
===================================================================
--- trunk/Build/source/utils/asymptote/dec.cc	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/dec.cc	2021-01-02 16:31:31 UTC (rev 57291)
@@ -94,7 +94,7 @@
       r->e.addArrayOps(at);
   }
 }
-  
+
 types::ty *arrayTy::trans(coenv &e, bool tacit)
 {
   types::ty *ct = cell->trans(e, tacit);
@@ -106,7 +106,7 @@
 
   types::array *t = dims->truetype(ct);
   assert(t);
-  
+
   return t;
 }
 
@@ -188,7 +188,7 @@
   }
   transAsRecordBody(ce, r);
   em.sync();
-  
+
   return r;
 }
 
@@ -208,23 +208,23 @@
   for (list<runnable *>::iterator p=stms.begin();
        p != stms.end();
        ++p)
-  {
-    vardec *v = dynamic_cast<vardec *>(*p);
-    if (v) {
-      if (var)
-        // Multiple vardecs.
+    {
+      vardec *v = dynamic_cast<vardec *>(*p);
+      if (v) {
+        if (var)
+          // Multiple vardecs.
+          return 0;
+        var = v;
+      }
+      else if (!dynamic_cast<emptyStm *>(*p))
+        // Failure due to another runnable in the block.
         return 0;
-      var = v;
     }
-    else if (!dynamic_cast<emptyStm *>(*p))
-      // Failure due to another runnable in the block.
-      return 0;
-  }
 
   return var;
 }
-  
 
+
 void dec::prettyprint(ostream &out, Int indent)
 {
   prettyname(out, "dec", indent);
@@ -235,7 +235,7 @@
 {
   prettyindent(out,indent);
   out << "modifierList (";
-  
+
   for (list<modifier>::iterator p = mods.begin(); p != mods.end(); ++p) {
     if (p != mods.begin())
       out << ", ";
@@ -243,16 +243,16 @@
       case EXPLICIT_STATIC:
         out << "static";
         break;
-#if 0   
+#if 0
       case EXPLICIT_DYNAMIC:
         out << "dynamic";
         break;
-#endif  
+#endif
       default:
         out << "invalid code";
     }
   }
-  
+
   for (list<permission>::iterator p = perms.begin(); p != perms.end(); ++p) {
     if (p != perms.begin() || !mods.empty())
       out << ", ";
@@ -317,12 +317,12 @@
   }
 
   permission p = mods->getPermission();
-#if 0 // This is innocuous 
+#if 0 // This is innocuous
   if (p != DEFAULT_PERM && (!r || !body->allowPermissions())) {
     em.warning(pos);
     em << "permission modifier is meaningless";
   }
-#endif  
+#endif
   e.c.setPermission(p);
 
   body->transAsField(e,r);
@@ -464,7 +464,7 @@
     definit d(pos);
     d.transToType(e, t);
   }
-  
+
   v->getLocation()->encode(WRITE, pos, e.c);
   e.c.encodePop();
 }
@@ -550,7 +550,7 @@
     em.error(getPos());
     em << "type definition cannot have initializer";
   }
-   
+
   start->addOps(base->t, e, r);
 
   addTypeWithPermission(e, r, ent, start->getName());
@@ -872,7 +872,7 @@
 {
   record *r = parent ? parent->newRecord(id, e.c.isStatic()) :
     e.c.newRecord(id);
-                     
+
   addTypeWithPermission(e, parent, new trans::tyEntry(r,0,parent,getPos()), id);
   e.e.addRecordOps(r);
   if (parent)
@@ -881,7 +881,7 @@
   // Start translating the initializer.
   coder c=e.c.newRecordInit(getPos(), r);
   coenv re(c,e.e);
-  
+
   body->transAsRecordBody(re, r);
 
   // After the record is translated, add a default initializer so that a
@@ -893,7 +893,7 @@
   // the enclosing environment.  These are the implicit constructors defined by
   // "operator init".
   addPostRecordEnvironment(e, r, parent);
-}  
+}
 
 runnable *autoplainRunnable() {
   // Abstract syntax for the code:

Modified: trunk/Build/source/utils/asymptote/dec.h
===================================================================
--- trunk/Build/source/utils/asymptote/dec.h	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/dec.h	2021-01-02 16:31:31 UTC (rev 57291)
@@ -53,7 +53,7 @@
   virtual void prettyprint(ostream &out, Int indent) = 0;
 
   // If we introduced a new type, automatically add corresponding functions for
-  // that type.  
+  // that type.
   virtual void addOps(coenv &, record *) {}
 
   // Returns the internal representation of the type.  This method can
@@ -90,7 +90,7 @@
 
   void increase()
   { depth++; }
-  
+
   size_t size() {
     return depth;
   }
@@ -142,13 +142,13 @@
     : absyn(pos) {}
 
   virtual void prettyprint(ostream &out, Int indent) = 0;
-  
+
   void markTrans(coenv &e)
   {
     markPos(e);
     trans(e);
   }
-  
+
   /* Translates the stm or dec as if it were in a function definition. */
   virtual void trans(coenv &e) {
     transAsField(e, 0);
@@ -182,10 +182,10 @@
   { return false; }
 
   // Returns true if it is syntatically allowable to modify this
-  // runnable by a PUBLIC or PRIVATE modifier. 
+  // runnable by a PUBLIC or PRIVATE modifier.
   virtual bool allowPermissions()
   { return false; }
-}; 
+};
 
 class block : public runnable {
 public:
@@ -356,7 +356,7 @@
 
   virtual void transAsField(coenv &e, record *r, types::ty *base);
 
-  // Translate, but add the names in as types rather than variables. 
+  // Translate, but add the names in as types rather than variables.
   virtual void transAsTypedefField(coenv &e, trans::tyEntry *base, record *r);
 
   decidstart *getStart() { return start; }
@@ -370,7 +370,7 @@
     : absyn(pos) {}
 
   virtual ~decidlist() {}
-  
+
   void add(decid *p) {
     decs.push_back(p);
   }
@@ -379,9 +379,9 @@
 
   virtual void transAsField(coenv &e, record *r, types::ty *base);
 
-  // Translate, but add the names in as types rather than variables. 
+  // Translate, but add the names in as types rather than variables.
   virtual void transAsTypedefField(coenv &e, trans::tyEntry *base, record *r);
-  
+
   // If the list consists of a single entry, return it.
   decid *singleEntry()
   {
@@ -428,7 +428,7 @@
     decs->transAsField(e, r, base->trans(e));
   }
 
-  // Translate, but add the names in as types rather than variables. 
+  // Translate, but add the names in as types rather than variables.
   virtual void transAsTypedefField(coenv &e, record *r);
 
   // If the vardec encodes a single declaration, return the name of that
@@ -466,7 +466,7 @@
 
   // Translates as: access src as dest;
   void transAsAccess(coenv &e, record *r);
-  
+
   // Translates as: from _ unravel src as dest;
   // where _ is the qualifier record with source as its fields and types.
   void transAsUnravel(coenv &e, record *r,
@@ -594,7 +594,7 @@
   void transAsField(coenv &e, record *r) {
     base.transAsField(e, r);
   }
-  
+
   void prettyprint(ostream &out, Int indent);
 };
 
@@ -655,7 +655,7 @@
 runnable *autoplainRunnable();
 
 void addVar(coenv &e, record *r, varEntry *v, symbol id);
-  
+
 } // namespace absyntax
 
 #endif

Modified: trunk/Build/source/utils/asymptote/doc/CAD.pdf
===================================================================
(Binary files differ)

Modified: trunk/Build/source/utils/asymptote/doc/CDlabel.asy
===================================================================
--- trunk/Build/source/utils/asymptote/doc/CDlabel.asy	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/doc/CDlabel.asy	2021-01-02 16:31:31 UTC (rev 57291)
@@ -5,12 +5,12 @@
 fill(unitcircle^^(scale(2/11.7)*unitcircle),
      evenodd+rgb(124/255,205/255,124/255));
 label(scale(1.1)*minipage(
-"\centering\scriptsize \textbf{\LARGE {\tt Asymptote}\\
+                          "\centering\scriptsize \textbf{\LARGE {\tt Asymptote}\\
 \smallskip
 \small The Vector Graphics Language}\\
 \smallskip
 \textsc{Andy Hammerlindl, John Bowman, and Tom Prince}
-http://asymptote.sourceforge.net\\
+https://asymptote.sourceforge.io\\
 ",8cm),(0,0.6));
 label(graphic("logo","height=7cm"),(0,-0.22));
 clip(unitcircle^^(scale(2/11.7)*unitcircle),evenodd);

Modified: trunk/Build/source/utils/asymptote/doc/FAQ/asy-faq.bfnn
===================================================================
--- trunk/Build/source/utils/asymptote/doc/FAQ/asy-faq.bfnn	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/doc/FAQ/asy-faq.bfnn	2021-01-02 16:31:31 UTC (rev 57291)
@@ -5,11 +5,11 @@
 \comment The format and scripts come from the Linux FAQ, by
 \comment Ian Jackson.
 \set brieftitle Asymptote FAQ
-\set author     <A href="http://asymptote.sourceforge.net">Asymptote</A> 
+\set author     <A href="https://asymptote.sourceforge.io">Asymptote</A> 
 \set title      Asymptote Frequently Asked Questions
 \copyto ASCII
             ASYMPTOTE FREQUENTLY ASKED QUESTIONS
-                            `date '+%d %h %Y'`
+                            `%perl use POSIX; POSIX::strftime("%Y-%m-%d", gmtime($ENV{SOURCE_DATE_EPOCH} || time))`
                            
 \endcopy
 \copyto INFO
@@ -22,7 +22,7 @@
 File: asy-faq.info, Node: Top, Next: Question 1.1, Up: (dir)
 
             ASYMPTOTE FREQUENTLY ASKED QUESTIONS
-                            `date '+%d %h %Y'`
+                            `%perl use POSIX; POSIX::strftime("%Y-%m-%d", gmtime($ENV{SOURCE_DATE_EPOCH} || time))`
                           
 \endcopy
 
@@ -49,7 +49,7 @@
 
 Binary releases are available for Linux, MacOS X, and Microsoft Windows
 platforms, in addition to full source code, from the website
-\docref{http://asymptote.sourceforge.net/\}.  Many Linux distributions
+\docref{https://asymptote.sourceforge.io/\}.  Many Linux distributions
 (such as RedHat and Debian) now include an Asymptote package (check your
 distribution's documentation for further information about this).
 
@@ -57,7 +57,7 @@
 
 If you have a question, please try to find an answer in this FAQ, in the 
 extensive Asymptote documentation at
-\docref{http://asymptote.sourceforge.net/doc/\}, or search the forum:
+\docref{https://asymptote.sourceforge.io/doc/\}, or search the forum:
 \docref{http://sourceforge.net/forum/forum.php?forum_id=409349\}.
 
 \question 02sep:whyasy Why was the name Asymptote chosen?
@@ -97,7 +97,7 @@
 
 \question 04nov:brokenpdftex What do I do if I get the error: \courier{Error: pdfetex (file pdftex.cfg): cannot open config file...texinfo.tex appears to be broken\}?
 
-Simply put \docref{http://asymptote.sourceforge.net/asymptote.pdf\}
+Simply put \docref{https://asymptote.sourceforge.io/asymptote.pdf\}
 in the directory \courier{doc\} and repeat the command \courier{make all\}.
 Or, if you don't want to build a local copy of the documentation, simply
 proceed with \courier{make install-asy\}.
@@ -113,7 +113,7 @@
 \docref{http://dario.dse.nl/projects/asylatex/\}.
 
 Philippe Ivaldi has contributed an Asymptote mode for Emacs users
-\docref{http://asymptote.sourceforge.net/doc/Editing-modes.html\},
+\docref{https://asymptote.sourceforge.io/doc/Editing-modes.html\},
 which includes a \courier{lasy-mode\} that allows one to compile and view
 the output of one \\begin{asy}...\\end{asy} section at a time.
 
@@ -279,7 +279,7 @@
 
 \question 28jun:internatfonts How can I use international fonts in Asymptote labels?
 
-See \docref{http://asymptote.sourceforge.net/doc/unicode.html\}.
+See \docref{https://asymptote.sourceforge.io/doc/Pens.html\}.
 
 \question 10jul:Fourier How can I use Fourier fonts? 
 
@@ -321,7 +321,7 @@
 \question 02sep:fixedsize How can I draw some squares and circles of a fixed size and put a label in the middle of them?
 
 Fixed-size objects should be drawn on a separate picture and then added to 
-currentpicture. Here is one way (see also \docref{http://asymptote.sourceforge.net/gallery/subpictures.asy\} and \docref{http://asymptote.sourceforge.net/gallery/mosquito.asy\}): 
+currentpicture. Here is one way (see also \docref{https://asymptote.sourceforge.io/gallery/subpictures.asy\} and \docref{https://asymptote.sourceforge.io/gallery/mosquito.asy\}): 
 
 \verbatim
 real u=2cm;
@@ -594,7 +594,7 @@
 labels; the default), Suppress (an overlapping label will not be written at
 all), SuppressQuiet, and MoveQuiet. The last two achieve the same result as
 the non-quiet types, but will not notify you which labels are overlapping. See: 
-\docref{http://asymptote.sourceforge.net/doc/Pens.html\}.
+\docref{https://asymptote.sourceforge.io/doc/Pens.html\}.
  
 In the case of a user-specified tick array, you can change which labels get
 suppressed/moved by changing the order of array entries.
@@ -645,7 +645,7 @@
 coordinates given to \courier{fixedscaling()\} leaves room for any labels).
  
 See also
-\docref{http://asymptote.sourceforge.net/doc/Frames-and-pictures.html\}.
+\docref{https://asymptote.sourceforge.io/doc/Frames-and-pictures.html\}.
  
 \question 26jun:graphlimits How can I plot a function f(x) within [0,1]x[0,2] without explicitly calculating the x values for which f(x) hits the boundary?
 
@@ -663,7 +663,7 @@
 yaxis("$y$",LeftRight,RightTicks);
 \endverbatim
  
-See also \docref{http://asymptote.sourceforge.net/doc/graph.html\}.
+See also \docref{https://asymptote.sourceforge.io/doc/graph.html\}.
  
 \question 26jun:custompalettes Is it possible to define customized palettes?
 
@@ -745,12 +745,12 @@
 
 \question 26jun:log2 How can I make the y axis display base-2 logarithmic values?
 
-See the example \docref{http://asymptote.sourceforge.net/gallery/2D graphs/log2graph.asy\}. 
+See the example \docref{https://asymptote.sourceforge.io/gallery/2D graphs/log2graph.asy\}. 
 
 \question 27jun:align How can I align the x axes of two graphs on the same figure?
 
 An easy way to do this, if the axes to be aligned have the same scaling
-and size, is illustrated in the example \docref{http://asymptote.sourceforge.net/gallery/2D graphs/alignedaxis.asy\}.
+and size, is illustrated in the example \docref{https://asymptote.sourceforge.io/gallery/2D graphs/alignedaxis.asy\}.
 
 Here is a more general solution to the problem of aligning two arbitrary axes.
 One fits the second picture to a frame based on the horizontal scaling for
@@ -813,7 +813,7 @@
 
 \question 27jun:changeaxis How can I change the direction of the y-axis, such that negatives values are on the upper y-axis?
 
-Here is a simple example (see also the example \docref{http://asymptote.sourceforge.net/gallery/2D graphs/diatom.asy\} or the discussion
+Here is a simple example (see also the example \docref{https://asymptote.sourceforge.io/gallery/2D graphs/diatom.asy\} or the discussion
 of Linear(-1) in the documentation):
  
 \verbatim
@@ -847,7 +847,7 @@
 x=(t-2)^2+1 
 \endverbatim
 
-See the example \docref{http://asymptote.sourceforge.net/gallery/2D graphs/parametricgraph.asy\}. 
+See the example \docref{https://asymptote.sourceforge.io/gallery/2D graphs/parametricgraph.asy\}. 
 
 \question 27jun:scalesecondaryaxis  Is it possible to reverse or stretch an axis?
 
@@ -1037,7 +1037,7 @@
 
 Yes, Asymptote includes a line-based debugger:
 
-\docref{http://asymptote.sourceforge.net/doc/Debugger.html\}
+\docref{https://asymptote.sourceforge.io/doc/Debugger.html\}
 
 \question 27jun:patches Do you accept patches for Asymptote?
 
@@ -1065,7 +1065,7 @@
 the picture size. The resulting linear programming problem is solved via
 the Simplex method. 
 
-See the \docref{http://asymptote.sourceforge.net/gallery/dimension.asy\} example for an example of how deferred drawing is
+See the \docref{https://asymptote.sourceforge.io/gallery/dimension.asy\} example for an example of how deferred drawing is
 used to accomodate both user and true-size (PostScript) coordinates.
  
 \question 02sep:manualscaling How can I avoid automatic scaling of a picture?
@@ -1116,7 +1116,7 @@
 could be persuaded to add something similar if someone can justify the
 need. In the meantime, one can always use the explicit built-in linear
 solver \courier{solve\} (see
-\docref{http://asymptote.sourceforge.net/doc/solve.html\}), which uses LU
+\docref{https://asymptote.sourceforge.io/doc/solve.html\}), which uses LU
 decomposition. 
 
 \question 23jun:lray What is the equivalent for the MetaPost command for \courier{lray - horiz*v - verti*u = whatever*(LightSource - R)\}, a system of three linear equations for three unknowns: \courier{horiz, verti, whatever\}?
@@ -1212,7 +1212,7 @@
 \endverbatim
 
 See also the discussion of tilings in the documentation: 
-\docref{http://asymptote.sourceforge.net/doc/Pens.html\}.
+\docref{https://asymptote.sourceforge.io/doc/Pens.html\}.
 
 \comment ######################################################################
 
@@ -1232,7 +1232,7 @@
 \endverbatim
 
 in their \courier{config.asy\} file. See
-\docref{http://asymptote.sourceforge.net/doc/Options.html\}.
+\docref{https://asymptote.sourceforge.io/doc/Options.html\}.
 
 \question 26jun:jpeg How do I output jpeg images?
 
@@ -1251,8 +1251,8 @@
 label(graphic("file"),(0,0));
 \endverbatim
 
-See the example \docref{http://asymptote.sourceforge.net/gallery/orthocenter.asy\} and
-\docref{http://asymptote.sourceforge.net/doc/label.html\}.
+See the example \docref{https://asymptote.sourceforge.io/gallery/orthocenter.asy\} and
+\docref{https://asymptote.sourceforge.io/doc/label.html\}.
 
 \question 28jun:directpdf Does Asymptote support direct PDF output?
 

Modified: trunk/Build/source/utils/asymptote/doc/FAQ/asy-faq.info
===================================================================
--- trunk/Build/source/utils/asymptote/doc/FAQ/asy-faq.info	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/doc/FAQ/asy-faq.info	2021-01-02 16:31:31 UTC (rev 57291)
@@ -10,7 +10,7 @@
 File: asy-faq.info, Node: Top, Next: Question 1.1, Up: (dir)
 
             ASYMPTOTE FREQUENTLY ASKED QUESTIONS
-                            25 Mar 2020
+                            2020-11-23
                           
 This is the list of Frequently Asked Questions about Asymptote (asy).
 
@@ -223,7 +223,7 @@
 
 Binary releases are available for Linux, MacOS X, and Microsoft Windows
 platforms, in addition to full source code, from the website
-http://asymptote.sourceforge.net/.  Many Linux distributions (such as
+https://asymptote.sourceforge.io/.  Many Linux distributions (such as
 RedHat and Debian) now include an Asymptote package (check your
 distribution's documentation for further information about this).
 
@@ -234,7 +234,7 @@
 
 If you have a question, please try to find an answer in this FAQ, in the
 extensive Asymptote documentation at
-http://asymptote.sourceforge.net/doc/, or search the forum:
+https://asymptote.sourceforge.io/doc/, or search the forum:
 http://sourceforge.net/forum/forum.php?forum_id=409349.
 
 
@@ -316,7 +316,7 @@
 
 Question 2.3.  What do I do if I get the error: Error: pdfetex (file pdftex.cfg): cannot open config file...texinfo.tex appears to be broken?
 
-Simply put http://asymptote.sourceforge.net/asymptote.pdf in the directory
+Simply put https://asymptote.sourceforge.io/asymptote.pdf in the directory
 doc and repeat the command make all.  Or, if you don't want to build a
 local copy of the documentation, simply proceed with make install-asy.
 
@@ -340,7 +340,7 @@
 http://dario.dse.nl/projects/asylatex/.
 
 Philippe Ivaldi has contributed an Asymptote mode for Emacs users
-http://asymptote.sourceforge.net/doc/Editing-modes.html, which includes a
+https://asymptote.sourceforge.io/doc/Editing-modes.html, which includes a
 lasy-mode that allows one to compile and view the output of one
 \begin{asy}...\end{asy} section at a time.
 
@@ -541,7 +541,7 @@
 
 Question 4.4.  How can I use international fonts in Asymptote labels?
 
-See http://asymptote.sourceforge.net/doc/unicode.html.
+See https://asymptote.sourceforge.io/doc/Pens.html.
 
 
 File: asy-faq.info, Node: Question 4.5, Next: Question 4.6, Previous: Question 4.4, Up: Section 4
@@ -586,8 +586,8 @@
 
 Fixed-size objects should be drawn on a separate picture and then added to
 currentpicture. Here is one way (see also
-http://asymptote.sourceforge.net/gallery/subpictures.asy and
-http://asymptote.sourceforge.net/gallery/mosquito.asy):
+https://asymptote.sourceforge.io/gallery/subpictures.asy and
+https://asymptote.sourceforge.io/gallery/mosquito.asy):
 
 real u=2cm;
  
@@ -904,7 +904,7 @@
 labels; the default), Suppress (an overlapping label will not be written
 at all), SuppressQuiet, and MoveQuiet. The last two achieve the same
 result as the non-quiet types, but will not notify you which labels are
-overlapping. See:  http://asymptote.sourceforge.net/doc/Pens.html.
+overlapping. See:  https://asymptote.sourceforge.io/doc/Pens.html.
 
 In the case of a user-specified tick array, you can change which labels
 get suppressed/moved by changing the order of array entries.
@@ -948,7 +948,7 @@
 scaling and same resulting figure size (just ensure the two coordinates
 given to fixedscaling() leaves room for any labels).
 
-See also http://asymptote.sourceforge.net/doc/Frames-and-pictures.html.
+See also https://asymptote.sourceforge.io/doc/Frames-and-pictures.html.
 
 
 File: asy-faq.info, Node: Question 6.9, Next: Question 6.10, Previous: Question 6.8, Up: Section 6
@@ -966,7 +966,7 @@
 
 xaxis("$x$",BottomTop,LeftTicks);
 yaxis("$y$",LeftRight,RightTicks);
-See also http://asymptote.sourceforge.net/doc/graph.html.
+See also https://asymptote.sourceforge.io/doc/graph.html.
 
 
 File: asy-faq.info, Node: Question 6.10, Next: Question 6.11, Previous: Question 6.9, Up: Section 6
@@ -1051,7 +1051,7 @@
 
 Question 6.13.  How can I make the y axis display base-2 logarithmic values?
 
-See the example http://asymptote.sourceforge.net/gallery/2D
+See the example https://asymptote.sourceforge.io/gallery/2D
 graphs/log2graph.asy.
 
 
@@ -1061,7 +1061,7 @@
 
 An easy way to do this, if the axes to be aligned have the same scaling
 and size, is illustrated in the example
-http://asymptote.sourceforge.net/gallery/2D graphs/alignedaxis.asy.
+https://asymptote.sourceforge.io/gallery/2D graphs/alignedaxis.asy.
 
 Here is a more general solution to the problem of aligning two arbitrary
 axes.  One fits the second picture to a frame based on the horizontal
@@ -1125,7 +1125,7 @@
 Question 6.15.  How can I change the direction of the y-axis, such that negatives values are on the upper y-axis?
 
 Here is a simple example (see also the example
-http://asymptote.sourceforge.net/gallery/2D graphs/diatom.asy or the
+https://asymptote.sourceforge.io/gallery/2D graphs/diatom.asy or the
 discussion of Linear(-1) in the documentation):
 
 import graph;
@@ -1159,7 +1159,7 @@
 
 y=t 
 x=(t-2)^2+1 
-See the example http://asymptote.sourceforge.net/gallery/2D
+See the example https://asymptote.sourceforge.io/gallery/2D
 graphs/parametricgraph.asy.
 
 
@@ -1382,7 +1382,7 @@
 
 Yes, Asymptote includes a line-based debugger:
 
-http://asymptote.sourceforge.net/doc/Debugger.html
+https://asymptote.sourceforge.io/doc/Debugger.html
 
 
 File: asy-faq.info, Node: Question 7.9, Next: Question 8.1, Previous: Question 7.8, Up: Section 7
@@ -1441,7 +1441,7 @@
 should scale with the picture size. The resulting linear programming
 problem is solved via the Simplex method.
 
-See the http://asymptote.sourceforge.net/gallery/dimension.asy example for
+See the https://asymptote.sourceforge.io/gallery/dimension.asy example for
 an example of how deferred drawing is used to accomodate both user and
 true-size (PostScript) coordinates.
 
@@ -1495,7 +1495,7 @@
 confusing to new users. But we could be persuaded to add something similar
 if someone can justify the need. In the meantime, one can always use the
 explicit built-in linear solver solve (see
-http://asymptote.sourceforge.net/doc/solve.html), which uses LU
+https://asymptote.sourceforge.io/doc/solve.html), which uses LU
 decomposition.
 
 
@@ -1578,7 +1578,7 @@
  
 clip(100,100);
 See also the discussion of tilings in the documentation:
-http://asymptote.sourceforge.net/doc/Pens.html.
+https://asymptote.sourceforge.io/doc/Pens.html.
 
 
 File: asy-faq.info, Node: Section 9, Previous: Section 8, Up: Top
@@ -1612,7 +1612,7 @@
 interactiveView=false;
 batchView=false;
 in their config.asy file. See
-http://asymptote.sourceforge.net/doc/Options.html.
+https://asymptote.sourceforge.io/doc/Options.html.
 
 
 File: asy-faq.info, Node: Question 9.2, Next: Question 9.3, Previous: Question 9.1, Up: Section 9
@@ -1631,8 +1631,8 @@
 a Label:
 
 label(graphic("file"),(0,0));
-See the example http://asymptote.sourceforge.net/gallery/orthocenter.asy
-and http://asymptote.sourceforge.net/doc/label.html.
+See the example https://asymptote.sourceforge.io/gallery/orthocenter.asy
+and https://asymptote.sourceforge.io/doc/label.html.
 
 
 File: asy-faq.info, Node: Question 9.4, Next: Question 9.5, Previous: Question 9.3, Up: Section 9

Modified: trunk/Build/source/utils/asymptote/doc/FAQ/bfnnconv.pl
===================================================================
--- trunk/Build/source/utils/asymptote/doc/FAQ/bfnnconv.pl	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/doc/FAQ/bfnnconv.pl	2021-01-02 16:31:31 UTC (rev 57291)
@@ -135,7 +135,11 @@
                 m/([^\\])\`/ || warn "`$_'";
                 $_= $';
                 $cmd= $`.$1;
-                $it= `$cmd`; chop $it;
+                if($cmd =~ s/^%perl //) {
+                    $it= eval($cmd);
+                } else {
+                    $it= `$cmd`; chop $it;
+                }
                 print $fh $it;
             }
             print $fh $_;

Modified: trunk/Build/source/utils/asymptote/doc/FAQ/install-sh
===================================================================
--- trunk/Build/source/utils/asymptote/doc/FAQ/install-sh	2021-01-02 00:56:09 UTC (rev 57290)
+++ trunk/Build/source/utils/asymptote/doc/FAQ/install-sh	2021-01-02 16:31:31 UTC (rev 57291)
@@ -1,7 +1,7 @@
 #!/bin/sh
 # install - install a program, script, or datafile
 
-scriptversion=2020-11-14.01; # UTC
+scriptversion=2009-04-28.21; # UTC
 
 # This originates from X11R5 (mit/util/scripts/install.sh), which was
 # later released in X11R6 (xc/config/util/install.sh) with the
@@ -35,21 +35,25 @@
 # FSF changes to this file are in the public domain.
 #
 # Calling this script install-sh is preferred over install.sh, to prevent
-# 'make' implicit rules from creating a file called install from it
+# `make' implicit rules from creating a file called install from it
 # when there is no Makefile.
 #
 # This script is compatible with the BSD install script, but was written
 # from scratch.
 
-tab='	'
 nl='
 '
-IFS=" $tab$nl"
+IFS=" ""	$nl"
 
-# Set DOITPROG to "echo" to test this script.
+# set DOITPROG to echo to test this script
 
+# Don't use :- since 4.3BSD and earlier shells don't like it.
 doit=${DOITPROG-}
-doit_exec=${doit:-exec}
+if test -z "$doit"; then
+  doit_exec=exec
+else
+  doit_exec=$doit
+fi
 
 # Put in absolute file names if you don't have them in your path;
 # or use environment vars.
@@ -64,16 +68,22 @@
 rmprog=${RMPROG-rm}
 stripprog=${STRIPPROG-strip}
 
+posix_glob='?'
+initialize_posix_glob='
+  test "$posix_glob" != "?" || {
+    if (set -f) 2>/dev/null; then
+      posix_glob=
+    else
+      posix_glob=:
+    fi
+  }
+'
+
 posix_mkdir=
 
 # Desired mode of installed file.
 mode=0755
 
-# Create dirs (including intermediate dirs) using mode 755.
-# This is like GNU 'install' as of coreutils 8.32 (2020).
-mkdir_umask=22
-
-backupsuffix=
 chgrpcmd=
 chmodcmd=$chmodprog
 chowncmd=
@@ -87,7 +97,7 @@
 dst_arg=
 
 copy_on_change=false
-is_target_a_directory=possibly
+no_target_directory=
 
 usage="\
 Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
@@ -104,14 +114,12 @@
      --version  display version info and exit.
 
   -c            (ignored)
-  -C            install only if different (preserve data modification time)
+  -C            install only if different (preserve the last data modification time)
   -d            create directories instead of installing files.
   -g GROUP      $chgrpprog installed files to GROUP.
   -m MODE       $chmodprog installed files to MODE.
   -o USER       $chownprog installed files to USER.
-  -p            pass -p to $cpprog.
   -s            $stripprog installed files.
-  -S SUFFIX     attempt to back up existing files, with suffix SUFFIX.
   -t DIRECTORY  install into DIRECTORY.
   -T            report an error if DSTFILE is a directory.
 
@@ -118,14 +126,6 @@
 Environment variables override the default commands:
   CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
   RMPROG STRIPPROG
-
-By default, rm is invoked with -f; when overridden with RMPROG,
-it's up to you to specify -f if you want it.
-
-If -S is not specified, no backups are attempted.
-
-Email bug reports to bug-automake at gnu.org.
-Automake home page: https://www.gnu.org/software/automake/
 "
 
 while test $# -ne 0; do
@@ -137,46 +137,36 @@
     -d) dir_arg=true;;
 
     -g) chgrpcmd="$chgrpprog $2"
-        shift;;
+	shift;;
 
     --help) echo "$usage"; exit $?;;
 
     -m) mode=$2
-        case $mode in
-          *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*)
-            echo "$0: invalid mode: $mode" >&2
-            exit 1;;
-        esac
-        shift;;
+	case $mode in
+	  *' '* | *'	'* | *'
+'*	  | *'*'* | *'?'* | *'['*)
+	    echo "$0: invalid mode: $mode" >&2
+	    exit 1;;
+	esac
+	shift;;
 
     -o) chowncmd="$chownprog $2"
-        shift;;
+	shift;;
 
-    -p) cpprog="$cpprog -p";;
-
     -s) stripcmd=$stripprog;;
 
-    -S) backupsuffix="$2"
-        shift;;
+    -t) dst_arg=$2
+	shift;;
 
-    -t)
-        is_target_a_directory=always
-        dst_arg=$2
-        # Protect names problematic for 'test' and other utilities.
-        case $dst_arg in
-          -* | [=\(\)!]) dst_arg=./$dst_arg;;
-        esac
-        shift;;
+    -T) no_target_directory=true;;
 
-    -T) is_target_a_directory=never;;
-
     --version) echo "$0 $scriptversion"; exit $?;;
 
-    --) shift
-        break;;
+    --)	shift
+	break;;
 
-    -*) echo "$0: invalid option: $1" >&2
-        exit 1;;
+    -*)	echo "$0: invalid option: $1" >&2
+	exit 1;;
 
     *)  break;;
   esac
@@ -183,16 +173,6 @@
   shift
 done
 
-# We allow the use of options -d and -T together, by making -d
-# take the precedence; this is for compatibility with GNU install.
-
-if test -n "$dir_arg"; then
-  if test -n "$dst_arg"; then
-    echo "$0: target directory not allowed when installing a directory." >&2
-    exit 1
-  fi
-fi
-
 if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
   # When -d is used, all remaining arguments are directories to create.
   # When -t is used, the destination is already specified.
@@ -206,10 +186,6 @@
     fi
     shift # arg
     dst_arg=$arg
-    # Protect names problematic for 'test' and other utilities.
-    case $dst_arg in
-      -* | [=\(\)!]) dst_arg=./$dst_arg;;
-    esac
   done
 fi
 
@@ -218,27 +194,14 @@
     echo "$0: no input file specified." >&2
     exit 1
   fi
-  # It's OK to call 'install-sh -d' without argument.
+  # It's OK to call `install-sh -d' without argument.
   # This can happen when creating conditional directories.
   exit 0
 fi
 
 if test -z "$dir_arg"; then
-  if test $# -gt 1 || test "$is_target_a_directory" = always; then
-    if test ! -d "$dst_arg"; then
-      echo "$0: $dst_arg: Is not a directory." >&2
-      exit 1
-    fi
-  fi
-fi
+  trap '(exit $?); exit' 1 2 13 15
 
-if test -z "$dir_arg"; then
-  do_exit='(exit $ret); exit $ret'
-  trap "ret=129; $do_exit" 1
-  trap "ret=130; $do_exit" 2
-  trap "ret=141; $do_exit" 13
-  trap "ret=143; $do_exit" 15
-
   # Set umask so as not to create temps with too-generous modes.
   # However, 'strip' requires both read and write access to temps.
   case $mode in
@@ -248,16 +211,16 @@
 
     *[0-7])
       if test -z "$stripcmd"; then
-        u_plus_rw=
+	u_plus_rw=
       else
-        u_plus_rw='% 200'
+	u_plus_rw='% 200'
       fi
       cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
     *)
       if test -z "$stripcmd"; then
-        u_plus_rw=
+	u_plus_rw=
       else
-        u_plus_rw=,u+rw
+	u_plus_rw=,u+rw
       fi
       cp_umask=$mode$u_plus_rw;;
   esac
@@ -265,9 +228,9 @@
 
 for src
 do
-  # Protect names problematic for 'test' and other utilities.
+  # Protect names starting with `-'.
   case $src in
-    -* | [=\(\)!]) src=./$src;;
+    -*) src=./$src;;
   esac
 
   if test -n "$dir_arg"; then
@@ -275,10 +238,6 @@
     dstdir=$dst
     test -d "$dstdir"
     dstdir_status=$?
-    # Don't chown directories that already exist.
-    if test $dstdir_status = 0; then
-      chowncmd=""
-    fi
   else
 
     # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
@@ -293,116 +252,151 @@
       echo "$0: no destination specified." >&2
       exit 1
     fi
+
     dst=$dst_arg
+    # Protect names starting with `-'.
+    case $dst in
+      -*) dst=./$dst;;
+    esac
 
-    # If destination is a directory, append the input filename.
+    # If destination is a directory, append the input filename; won't work
+    # if double slashes aren't ignored.
     if test -d "$dst"; then
-      if test "$is_target_a_directory" = never; then
-        echo "$0: $dst_arg: Is a directory" >&2
-        exit 1
+      if test -n "$no_target_directory"; then
+	echo "$0: $dst_arg: Is a directory" >&2
+	exit 1
       fi
       dstdir=$dst
-      dstbase=`basename "$src"`
-      case $dst in
-	*/) dst=$dst$dstbase;;
-	*)  dst=$dst/$dstbase;;
-      esac
+      dst=$dstdir/`basename "$src"`
       dstdir_status=0
     else
-      dstdir=`dirname "$dst"`
+      # Prefer dirname, but fall back on a substitute if dirname fails.
+      dstdir=`
+	(dirname "$dst") 2>/dev/null ||
+	expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	     X"$dst" : 'X\(//\)[^/]' \| \
+	     X"$dst" : 'X\(//\)$' \| \
+	     X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
+	echo X"$dst" |
+	    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+		   s//\1/
+		   q
+		 }
+		 /^X\(\/\/\)[^/].*/{
+		   s//\1/
+		   q
+		 }
+		 /^X\(\/\/\)$/{
+		   s//\1/
+		   q
+		 }
+		 /^X\(\/\).*/{
+		   s//\1/
+		   q
+		 }
+		 s/.*/./; q'
+      `
+
       test -d "$dstdir"
       dstdir_status=$?
     fi
   fi
 
-  case $dstdir in
-    */) dstdirslash=$dstdir;;
-    *)  dstdirslash=$dstdir/;;
-  esac
-
   obsolete_mkdir_used=false
 
   if test $dstdir_status != 0; then
     case $posix_mkdir in
       '')
-        # With -d, create the new directory with the user-specified mode.
-        # Otherwise, rely on $mkdir_umask.
-        if test -n "$dir_arg"; then
-          mkdir_mode=-m$mode
-        else
-          mkdir_mode=
-        fi
+	# Create intermediate dirs using mode 755 as modified by the umask.
+	# This is like FreeBSD 'install' as of 1997-10-28.
+	umask=`umask`
+	case $stripcmd.$umask in
+	  # Optimize common cases.
+	  *[2367][2367]) mkdir_umask=$umask;;
+	  .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
 
-        posix_mkdir=false
-	# The $RANDOM variable is not portable (e.g., dash).  Use it
-	# here however when possible just to lower collision chance.
-	tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
+	  *[0-7])
+	    mkdir_umask=`expr $umask + 22 \
+	      - $umask % 100 % 40 + $umask % 20 \
+	      - $umask % 10 % 4 + $umask % 2
+	    `;;
+	  *) mkdir_umask=$umask,go-w;;
+	esac
 
-	trap '
-	  ret=$?
-	  rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null
-	  exit $ret
-	' 0
-
-	# Because "mkdir -p" follows existing symlinks and we likely work
-	# directly in world-writeable /tmp, make sure that the '$tmpdir'
-	# directory is successfully created first before we actually test
-	# 'mkdir -p'.
-	if (umask $mkdir_umask &&
-	    $mkdirprog $mkdir_mode "$tmpdir" &&
-	    exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1
-	then
-	  if test -z "$dir_arg" || {
-	       # Check for POSIX incompatibilities with -m.
-	       # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
-	       # other-writable bit of parent directory when it shouldn't.
-	       # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
-	       test_tmpdir="$tmpdir/a"
-	       ls_ld_tmpdir=`ls -ld "$test_tmpdir"`
-	       case $ls_ld_tmpdir in
-		 d????-?r-*) different_mode=700;;
-		 d????-?--*) different_mode=755;;
-		 *) false;;
-	       esac &&
-	       $mkdirprog -m$different_mode -p -- "$test_tmpdir" && {
-		 ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"`
-		 test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
-	       }
-	     }
-	  then posix_mkdir=:
-	  fi
-	  rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir"
+	# With -d, create the new directory with the user-specified mode.
+	# Otherwise, rely on $mkdir_umask.
+	if test -n "$dir_arg"; then
+	  mkdir_mode=-m$mode
 	else
-	  # Remove any dirs left behind by ancient mkdir implementations.
-	  rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null
+	  mkdir_mode=
 	fi
-	trap '' 0;;
+
+	posix_mkdir=false
+	case $umask in
+	  *[123567][0-7][0-7])
+	    # POSIX mkdir -p sets u+wx bits regardless of umask, which
+	    # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
+	    ;;
+	  *)
+	    tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
+	    trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
+
+	    if (umask $mkdir_umask &&
+		exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
+	    then
+	      if test -z "$dir_arg" || {
+		   # Check for POSIX incompatibilities with -m.
+		   # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
+		   # other-writeable bit of parent directory when it shouldn't.
+		   # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
+		   ls_ld_tmpdir=`ls -ld "$tmpdir"`
+		   case $ls_ld_tmpdir in
+		     d????-?r-*) different_mode=700;;
+		     d????-?--*) different_mode=755;;
+		     *) false;;
+		   esac &&
+		   $mkdirprog -m$different_mode -p -- "$tmpdir" && {
+		     ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
+		     test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
+		   }
+		 }
+	      then posix_mkdir=:
+	      fi
+	      rmdir "$tmpdir/d" "$tmpdir"
+	    else
+	      # Remove any dirs left behind by ancient mkdir implementations.
+	      rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
+	    fi
+	    trap '' 0;;
+	esac;;
     esac
 
     if
       $posix_mkdir && (
-        umask $mkdir_umask &&
-        $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
+	umask $mkdir_umask &&
+	$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
       )
     then :
     else
 
-      # mkdir does not conform to POSIX,
+      # The umask is ridiculous, or mkdir does not conform to POSIX,
       # or it failed possibly due to a race condition.  Create the
       # directory the slow way, step by step, checking for races as we go.
 
       case $dstdir in
-        /*) prefix='/';;
-        [-=\(\)!]*) prefix='./';;
-        *)  prefix='';;
+	/*) prefix='/';;
+	-*) prefix='./';;
+	*)  prefix='';;
       esac
 
+      eval "$initialize_posix_glob"
+
       oIFS=$IFS
       IFS=/
-      set -f
+      $posix_glob set -f
       set fnord $dstdir
       shift
-      set +f
+      $posix_glob set +f
       IFS=$oIFS
 
       prefixes=
@@ -409,34 +403,34 @@
 
       for d
       do
-        test X"$d" = X && continue
+	test -z "$d" && continue
 
-        prefix=$prefix$d
-        if test -d "$prefix"; then
-          prefixes=
-        else
-          if $posix_mkdir; then
-            (umask $mkdir_umask &&
-             $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
-            # Don't fail if two instances are running concurrently.
-            test -d "$prefix" || exit 1
-          else
-            case $prefix in
-              *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
-              *) qprefix=$prefix;;
-            esac
-            prefixes="$prefixes '$qprefix'"
-          fi
-        fi
-        prefix=$prefix/
+	prefix=$prefix$d
+	if test -d "$prefix"; then
+	  prefixes=
+	else
+	  if $posix_mkdir; then
+	    (umask=$mkdir_umask &&
+	     $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
+	    # Don't fail if two instances are running concurrently.
+	    test -d "$prefix" || exit 1
+	  else
+	    case $prefix in
+	      *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
+	      *) qprefix=$prefix;;
+	    esac
+	    prefixes="$prefixes '$qprefix'"
+	  fi
+	fi
+	prefix=$prefix/
       done
 
       if test -n "$prefixes"; then
-        # Don't fail if two instances are running concurrently.
-        (umask $mkdir_umask &&
-         eval "\$doit_exec \$mkdirprog $prefixes") ||
-          test -d "$dstdir" || exit 1
-        obsolete_mkdir_used=true
+	# Don't fail if two instances are running concurrently.
+	(umask $mkdir_umask &&
+	 eval "\$doit_exec \$mkdirprog $prefixes") ||
+	  test -d "$dstdir" || exit 1
+	obsolete_mkdir_used=true
       fi
     fi
   fi
@@ -449,25 +443,14 @@
   else
 
     # Make a couple of temp file names in the proper directory.
-    dsttmp=${dstdirslash}_inst.$$_
-    rmtmp=${dstdirslash}_rm.$$_

@@ Diff output truncated at 1234567 characters. @@


More information about the tex-live-commits mailing list.