texlive[43590] Build/source/utils: asy 2.41 sources

commits+karl at tug.org commits+karl at tug.org
Thu Mar 23 23:37:58 CET 2017


Revision: 43590
          http://tug.org/svn/texlive?view=revision&revision=43590
Author:   karl
Date:     2017-03-23 23:37:58 +0100 (Thu, 23 Mar 2017)
Log Message:
-----------
asy 2.41 sources

Modified Paths:
--------------
    trunk/Build/source/utils/README
    trunk/Build/source/utils/asymptote/ChangeLog
    trunk/Build/source/utils/asymptote/README
    trunk/Build/source/utils/asymptote/ReleaseNotes
    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/geometry.asy
    trunk/Build/source/utils/asymptote/bezierpatch.cc
    trunk/Build/source/utils/asymptote/bezierpatch.h
    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/doc/CAD.pdf
    trunk/Build/source/utils/asymptote/doc/FAQ/asy-faq.info
    trunk/Build/source/utils/asymptote/doc/Makefile.in
    trunk/Build/source/utils/asymptote/doc/TeXShopAndAsymptote.pdf
    trunk/Build/source/utils/asymptote/doc/asy-latex.pdf
    trunk/Build/source/utils/asymptote/doc/asyRefCard.pdf
    trunk/Build/source/utils/asymptote/doc/asymptote.pdf
    trunk/Build/source/utils/asymptote/doc/png/asymptote.info
    trunk/Build/source/utils/asymptote/picture.cc
    trunk/Build/source/utils/asymptote/picture.h
    trunk/Build/source/utils/asymptote/revision.cc
    trunk/Build/source/utils/asymptote/triple.h

Modified: trunk/Build/source/utils/README
===================================================================
--- trunk/Build/source/utils/README	2017-03-23 21:29:41 UTC (rev 43589)
+++ trunk/Build/source/utils/README	2017-03-23 22:37:58 UTC (rev 43590)
@@ -5,7 +5,7 @@
 See comments in ../texk/README.
 
 
-asymptote 2.40 - checked 7mar17
+asymptote 2.41 - checked 23mar17
   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/ChangeLog
===================================================================
--- trunk/Build/source/utils/asymptote/ChangeLog	2017-03-23 21:29:41 UTC (rev 43589)
+++ trunk/Build/source/utils/asymptote/ChangeLog	2017-03-23 22:37:58 UTC (rev 43590)
@@ -1,3 +1,87 @@
+commit 40f27e1424f6c63aa362f16f3c65b9f3d1d6e723
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Wed Mar 22 01:56:17 2017 -0600
+
+    Always use epsdriver.
+
+commit ee57aa9c533e4a71fc20151928e5cf418d4effc5
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Wed Mar 22 00:29:27 2017 -0600
+
+    Update bug reporting URL in README.
+
+commit 207695a78f697be391991f5c943543ebeccf4e87
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Tue Mar 21 23:34:36 2017 -0600
+
+    Remove temporary ConTeXt log file.
+
+commit a981ce85db27372750fd19aec9d4456d3bc0b21a
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Tue Mar 21 23:19:22 2017 -0600
+
+    Support eps output with all TeX engines.
+    
+    Work around Imagemagick black background bug in jpg output.
+
+commit 3e42b17ffde9941bf0ad6e24a05f73c788d755b5
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Mon Mar 20 23:05:31 2017 -0600
+
+    Remove temporary pbsdat file.
+
+commit dacbf47554b36d0571394b3c4d747405e53f2708
+Merge: f34a52d c2e4bd5
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Fri Mar 17 01:48:29 2017 -0600
+
+    Merge pull request #38 from ivankokan/master
+    
+    Add improvements for perpendicular marks.
+
+commit f34a52dfbebee7100a0d853edda78c99f1e5f2c0
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Fri Mar 17 01:20:43 2017 -0600
+
+    Use different rendering constants for Bezier patches and triangles.
+    Improve flatness test for Bezier triangles.
+
+commit 0b59b3b2b2432b3c715eb80f0305c454bd7a9e00
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sun Mar 5 14:17:40 2017 -0700
+
+    Fix previous commit.
+
+commit 9a2b4810156bf34c4257f08dc12595aed9867147
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Sat Mar 4 18:32:36 2017 -0700
+
+    Make perl look in FAQ directory.
+
+commit b3322131bebd3a506add235d25ae7ca53ab2efcd
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Thu Mar 2 15:41:45 2017 -0700
+
+    Reduce rendering constant back to 0.5.
+
+commit 00716297f257c464e97bb0bd6b747c4034bcb97e
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Thu Mar 2 15:10:37 2017 -0700
+
+    Remove unused variable.
+
+commit 05b6d931d5546359b061e3959817ff8d4936672a
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Thu Mar 2 09:57:58 2017 -0700
+
+    Remove out-of-date opengl32.dll and glu32.dll libraries on install.
+
+commit 585c158ee53e4d202f1ceda5c12782a06aec57e9
+Author: John Bowman <bowman at ualberta.ca>
+Date:   Thu Mar 2 00:18:05 2017 -0700
+
+    Increment version to 2.41.
+
 commit 5a6d3626f3589f7fdc7193dea97ae335ad70b242
 Author: John Bowman <bowman at ualberta.ca>
 Date:   Wed Mar 1 23:43:49 2017 -0700
@@ -18,6 +102,18 @@
     Fix multisample detection; remove MSDOS workarounds (tested with
     freeglut-2.8.1).
 
+commit c2e4bd5990b9f3e6963ea80da2eb20d3a48c7a82
+Author: ivankokan <ivan.kokan at gmail.com>
+Date:   Wed Mar 1 17:37:51 2017 +0100
+
+    markrightangle: margin manipulation removed (it resulted with blank area between the perpendicular mark and a line thinner than currentpen), perpendicular mark now always starts from the "middle" of lines
+
+commit 7636977c5c744ba28df9ae21c3dd7530d1beaa5f
+Author: ivankokan <ivan.kokan at gmail.com>
+Date:   Wed Mar 1 17:37:51 2017 +0100
+
+    perpendicularmark: miterjoin added (aesthetic improvement and alignment with existing squarecap)
+
 commit 8de2b9cae38a5bdfc29bbe6ee8bec9def0515c5c
 Author: John Bowman <bowman at ualberta.ca>
 Date:   Sat Feb 25 01:45:58 2017 -0700

Modified: trunk/Build/source/utils/asymptote/README
===================================================================
--- trunk/Build/source/utils/asymptote/README	2017-03-23 21:29:41 UTC (rev 43589)
+++ trunk/Build/source/utils/asymptote/README	2017-03-23 22:37:58 UTC (rev 43590)
@@ -11,10 +11,10 @@
 
 http://asymptote.sourceforge.net
 
-Bugs/Patches/Feature Requests can be submitted using the 
-Bug/Patch/Feature Tracking Systems at
-http://sourceforge.net/projects/asymptote/.
+Bugs/Patches/Feature Requests can be submitted to
 
+https://github.com/vectorgraphics/asymptote/issues
+
 Questions and comments should be sent to the Asymptote Forum:
 
 http://sourceforge.net/p/asymptote/discussion/409349

Modified: trunk/Build/source/utils/asymptote/ReleaseNotes
===================================================================
--- trunk/Build/source/utils/asymptote/ReleaseNotes	2017-03-23 21:29:41 UTC (rev 43589)
+++ trunk/Build/source/utils/asymptote/ReleaseNotes	2017-03-23 22:37:58 UTC (rev 43590)
@@ -1,3 +1,11 @@
+Release Notes for Version 2.41
+
+The rendering of Bezier patches was improved. Minor improvements were made
+to perpendicular marks in the geometry package. A perl issue was addressed.
+Two unwanted temporary files are now removed after TeX processing.
+EPS output is now supported with all TeX engines. A workaround was
+implemented for the ImageMagick jpeg black background bug.
+
 Release Notes for Version 2.40
 
 A partial workaround for the OpenGL transparency bug was implemented, by

Modified: trunk/Build/source/utils/asymptote/asy-keywords.el
===================================================================
--- trunk/Build/source/utils/asymptote/asy-keywords.el	2017-03-23 21:29:41 UTC (rev 43589)
+++ trunk/Build/source/utils/asymptote/asy-keywords.el	2017-03-23 22:37:58 UTC (rev 43590)
@@ -2,7 +2,7 @@
 ;; This file is automatically generated by asy-list.pl.
 ;; Changes will be overwritten.
 ;;
-(defvar asy-keywords-version "2.40")
+(defvar asy-keywords-version "2.41")
 
 (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 ))

Modified: trunk/Build/source/utils/asymptote/asy.list
===================================================================
--- trunk/Build/source/utils/asymptote/asy.list	2017-03-23 21:29:41 UTC (rev 43589)
+++ trunk/Build/source/utils/asymptote/asy.list	2017-03-23 22:37:58 UTC (rev 43590)
@@ -8,9 +8,9 @@
 filltype filltype(int type=<default>, pen fillpen=<default>, pen drawpen=<default>, void fill2(frame f, path[] g, pen fillpen));
 int Suppress;
 align NoAlign;
-pair relative(picture pic=<default>, pair z);
 filltype RadialShade(pen penc, pen penr);
 real[] arrowbasepoints(path base, path left, path right, real default=<default>);
+object embed3(string, frame, string, string, string, light, projection);
 real bp;
 pen mean(pen[] p, real opacity(real[])=<default>);
 pen[] mean(pen[][] palette, real opacity(real[])=<default>);
@@ -21,6 +21,7 @@
 real inches;
 pair SW;
 real inch;
+picture legenditem(Legend legenditem, real linelength);
 marginT EndMargin(path, pen);
 pen mediumgrey;
 pen darkcyan;
@@ -27,6 +28,8 @@
 coord[] maxcoords(coord[] in, bool operator <=(coord, coord));
 coord[] maxcoords(coord[] in, bool operator <=(coord, coord));
 real legendhskip;
+string ask(string prompt);
+frame[] fit2(picture[] pictures, picture all);
 void addSaveFunction(void s()());
 pen olive;
 pen zerowinding;
@@ -55,8 +58,6 @@
 real cm;
 pen mediumgreen;
 pen heavygreen;
-string ask(string prompt);
-frame[] fit2(picture[] pictures, picture all);
 pen dashdotted;
 bool diagnostics;
 pen deepblue;
@@ -130,6 +131,7 @@
 pen TimesRoman(string series=<default>, string shape=<default>);
 pen palemagenta;
 int mantissaBits;
+void copyPairOrTriple(pairOrTriple dest, pairOrTriple src);
 pen lightolive;
 path arrowbase(path r, pair y, real t, real size);
 frame pack(pair align=<default> ... object[] inset);
@@ -143,9 +145,9 @@
 pen lightgray;
 picture arrow2(arrowhead arrowhead=<default>, path g, pen p=<default>, real size=<default>, real angle=<default>, filltype filltype=<default>, marginT margin(path, pen)=<default>);
 void startScript();
+pair relative(picture pic=<default>, pair z);
 position MidPoint;
 string Embed(string name, string text=<default>, string options=<default>, real width=<default>, real height=<default>);
-object embed3(string, frame, string, string, string, light, projection);
 pen deepgrey;
 pen lightyellow;
 marginT Margin(path, pen)(real begin, real end);
@@ -164,12 +166,6 @@
 string getstring(string name=<default>, string default=<default>, string prompt=<default>, bool store=<default>);
 marginT DotMargins(path, pen);
 path[] MarkPath;
-frame[] fit(string prefix=<default>, picture[] pictures, string format=<default>, bool view=<default>, string options=<default>, string script=<default>, projection P=<default>);
-pen Bookman(string series=<default>, string shape=<default>);
-path box(frame dest, frame src=<default>, real xmargin=<default>, real ymargin=<default>, pen p=<default>, filltype filltype=<default>, bool above=<default>);
-path box(frame f, Label L, real xmargin=<default>, real ymargin=<default>, pen p=<default>, filltype filltype=<default>, bool above=<default>);
-path box(pair a, pair b);
-picture legenditem(Legend legenditem, real linelength);
 pen deepgray;
 string defaultformat(int n, string trailingzero=<default>, bool fixed=<default>, bool signed=<default>);
 string defaultformat;
@@ -179,7 +175,6 @@
 object align(object F, pair align);
 path[] align(path[] g, transform t=<default>, pair position, pair align, pen p=<default>);
 transform scaleless(transform t);
-void copyPairOrTriple(pairOrTriple dest, pairOrTriple src);
 pen thin();
 real arcarrowangle;
 void restoredefaults();
@@ -236,6 +231,11 @@
 pen AvantGarde(string series=<default>, string shape=<default>);
 real circleprecision;
 pen Black;
+pen Bookman(string series=<default>, string shape=<default>);
+path box(frame dest, frame src=<default>, real xmargin=<default>, real ymargin=<default>, pen p=<default>, filltype filltype=<default>, bool above=<default>);
+path box(frame f, Label L, real xmargin=<default>, real ymargin=<default>, pen p=<default>, filltype filltype=<default>, bool above=<default>);
+path box(pair a, pair b);
+frame[] fit(string prefix=<default>, picture[] pictures, string format=<default>, bool view=<default>, string options=<default>, string script=<default>, projection P=<default>);
 void report(string text);
 void report(int i);
 void report(transform t);
@@ -309,19 +309,19 @@
 arrowhead HookHead;
 arrowhead HookHead(real dir=<default>, real barb=<default>);
 real[] concat(... real[][]);
+picture[] concat(... picture[][]);
 marker[] concat(... marker[][]);
 pair[] concat(... pair[][]);
 pen[] concat(... pen[][]);
 coord[] concat(... coord[][]);
 coord[] concat(... coord[][]);
+Legend[] concat(... Legend[][]);
 path[] concat(... path[][]);
-picture[] concat(... picture[][]);
 int[] concat(... int[][]);
 void()()[] concat(... void()()[][]);
 bool3[] concat(... bool3[][]);
 string[] concat(... string[][]);
 object[] concat(... object[][]);
-Legend[] concat(... Legend[][]);
 triple[] concat(... triple[][]);
 Label[] concat(... Label[][]);
 frame[] concat(... frame[][]);
@@ -366,7 +366,9 @@
 bool3[] array(int n, bool3 value, int depth=<default>);
 coord[] array(int n, coord value, int depth=<default>);
 coord[] array(int n, coord value, int depth=<default>);
+picture[] array(int n, picture value, int depth=<default>);
 marker[] array(int n, marker value, int depth=<default>);
+Legend[] array(int n, Legend value, int depth=<default>);
 Label[] array(int n, Label value, int depth=<default>);
 real[][] array(int n, real[] value, int depth=<default>);
 real[] array(int n, real value, int depth=<default>);
@@ -375,8 +377,6 @@
 frame[] array(int n, frame value, int depth=<default>);
 pen[][] array(int n, pen[] value, int depth=<default>);
 object[] array(int n, object value, int depth=<default>);
-picture[] array(int n, picture value, int depth=<default>);
-Legend[] array(int n, Legend value, int depth=<default>);
 int[] array(int n, int value, int depth=<default>);
 string[][] array(int n, string[] value, int depth=<default>);
 pair[] array(int n, pair value, int depth=<default>);
@@ -678,8 +678,6 @@
 int[] sequence(int n);
 pen[][] sequence(pen[] f(int), int n);
 object[] sequence(object f(int), int n);
-picture[] sequence(picture f(int), int n);
-Legend[] sequence(Legend f(int), int n);
 int[] sequence(int f(int), int n);
 string[][] sequence(string[] f(int), int n);
 pair[] sequence(pair f(int), int n);
@@ -692,7 +690,9 @@
 bool3[] sequence(bool3 f(int), int n);
 coord[] sequence(coord f(int), int n);
 coord[] sequence(coord f(int), int n);
+picture[] sequence(picture f(int), int n);
 marker[] sequence(marker f(int), int n);
+Legend[] sequence(Legend f(int), int n);
 Label[] sequence(Label f(int), int n);
 real[][] sequence(real[] f(int), int n);
 real[] sequence(real f(int), int n);
@@ -790,8 +790,8 @@
 real braceouterangle;
 void tex(frame f, string s);
 void tex(frame f, string s, pair min, pair max);
+void tex(picture pic=<default>, string s);
 void tex(picture pic=<default>, string s, pair min, pair max);
-void tex(picture pic=<default>, string s);
 void prepend(frame dest, frame src);
 void add(frame dest, frame src);
 void add(picture dest=<default>, frame src, pair position, pair align, bool group=<default>, filltype filltype=<default>, bool above=<default>);
@@ -799,6 +799,7 @@
 void add(picture src, bool group=<default>, filltype filltype=<default>, bool above=<default>);
 void add(picture pic=<default>, void d(frame f, transform t), bool exact=<default>);
 void add(picture pic=<default>, void d(picture, real[][]), bool exact=<default>);
+void add(picture pic=<default>, Label L);
 void add(picture dest, picture src, bool group=<default>, filltype filltype=<default>, bool above=<default>);
 void add(frame f, transform t=<default>, Label L);
 void add(picture dest, picture src, pair position, bool group=<default>, filltype filltype=<default>, bool above=<default>);
@@ -808,7 +809,6 @@
 void add(picture pic=<default>, void d(frame f, real[][] t, picture pic, projection P), bool exact=<default>);
 void add(frame dest, frame src, pair position, bool group=<default>, filltype filltype=<default>, bool above=<default>);
 void add(picture dest=<default>, frame src, pair position=<default>, bool group=<default>, filltype filltype=<default>, bool above=<default>);
-void add(picture pic=<default>, Label L);
 void add(picture pic=<default>, void d(picture, transform), bool exact=<default>);
 void add(picture src, pair position, bool group=<default>, filltype filltype=<default>, bool above=<default>);
 void endgroup3(frame f);
@@ -870,8 +870,8 @@
 bool IgnoreAspect;
 void postscript(frame f, string s);
 void postscript(frame f, string s, pair min, pair max);
+void postscript(picture pic=<default>, string s);
 void postscript(picture pic=<default>, string s, pair min, pair max);
-void postscript(picture pic=<default>, string s);
 transform slant(real s);
 transform yscale(real y);
 transform inverse(transform t);
@@ -919,8 +919,8 @@
 int size(path p);
 int size(path[] p);
 int size(path3 p);
+void size(picture dest, picture src);
 pair size(picture pic, bool user=<default>);
-void size(picture dest, picture src);
 void size(picture pic=<default>, real x, real y=<default>, bool keepAspect=<default>);
 void size(picture pic=<default>, real xsize, real ysize, pair min, pair max);
 string texify(string s);
@@ -1043,14 +1043,14 @@
 bool alias(pair[][] a, pair[][] b);
 bool alias(guide[] a, guide[] b);
 bool alias(marginT a, marginT b);
-bool alias(Legend a, Legend b);
+bool alias(scaleT a, scaleT b);
 bool alias(object a, object b);
-bool alias(picture[] a, picture[] b);
 bool alias(cputime a, cputime b);
 bool alias(pair[] a, pair[] b);
 bool alias(coord a, coord b);
 bool alias(coord a, coord b);
-bool alias(coords3 a, coords3 b);
+bool alias(Legend a, Legend b);
+bool alias(side a, side b);
 bool alias(framedTransformStack a, framedTransformStack b);
 bool alias(Label[] a, Label[] b);
 bool alias(int[] a, int[] b);
@@ -1057,14 +1057,13 @@
 bool alias(string[][] a, string[][] b);
 bool alias(slice a, slice b);
 bool alias(freezableBounds a, freezableBounds b);
-bool alias(scaleT a, scaleT b);
-bool alias(autoscaleT a, autoscaleT b);
+bool alias(projection a, projection b);
 bool alias(position a, position b);
 bool alias(arrowhead a, arrowhead b);
 bool alias(real[][] a, real[][] b);
 bool alias(bool3 a, bool3 b);
 bool alias(bool3[] a, bool3[] b);
-bool alias(pairOrTriple a, pairOrTriple b);
+bool alias(autoscaleT a, autoscaleT b);
 bool alias(string[] a, string[] b);
 bool alias(frame[] a, frame[] b);
 bool alias(scaling a, scaling b);
@@ -1071,7 +1070,7 @@
 bool alias(scaling a, scaling b);
 bool alias(bounds a, bounds b);
 bool alias(light a, light b);
-bool alias(align a, align b);
+bool alias(pairOrTriple a, pairOrTriple b);
 bool alias(bool[] a, bool[] b);
 bool alias(void()()[] a, void()()[] b);
 bool alias(pen[][] a, pen[][] b);
@@ -1078,16 +1077,16 @@
 bool alias(filltype a, filltype b);
 bool alias(coord[] a, coord[] b);
 bool alias(coord[] a, coord[] b);
-bool alias(ScaleT a, ScaleT b);
+bool alias(coords3 a, coords3 b);
 bool alias(Label a, Label b);
+bool alias(Legend[] a, Legend[] b);
 bool alias(processtime a, processtime b);
 bool alias(path[] a, path[] b);
 bool alias(triple[] a, triple[] b);
-bool alias(projection a, projection b);
-bool alias(picture a, picture b);
+bool alias(ScaleT a, ScaleT b);
+bool alias(align a, align b);
 bool alias(object[] a, object[] b);
 bool alias(indexedTransform a, indexedTransform b);
-bool alias(Legend[] a, Legend[] b);
 bool alias(real[] a, real[] b);
 bool alias(pen[] a, pen[] b);
 bool alias(hsv a, hsv b);
@@ -1094,7 +1093,8 @@
 bool alias(coords2 a, coords2 b);
 bool alias(coords2 a, coords2 b);
 bool alias(transformation a, transformation b);
-bool alias(side a, side b);
+bool alias(picture a, picture b);
+bool alias(picture[] a, picture[] b);
 bool alias(marker a, marker b);
 bool alias(marker[] a, marker[] b);
 real pi;
@@ -1118,14 +1118,15 @@
 int[] map(int f(real), real[] a);
 bool3[] map(bool3 f(bool3), bool3[] a);
 frame[] map(frame f(frame), frame[] a);
-picture[] map(picture f(picture), picture[] a);
 pen[][] map(pen[] f(pen[]), pen[][] a);
 triple[] map(triple f(triple), triple[] a);
 pen[] map(pen f(pen), pen[] a);
 coord[] map(coord f(coord), coord[] a);
 coord[] map(coord f(coord), coord[] a);
+Legend[] map(Legend f(Legend), Legend[] a);
 pair[] map(pair f(pair), pair[] a);
 string[] map(string f(string), string[] a);
+picture[] map(picture f(picture), picture[] a);
 marker[] map(marker f(marker), marker[] a);
 void()()[] map(void f()()(void()()), void()()[] a);
 pair[][] map(pair[] f(pair[]), pair[][] a);
@@ -1137,7 +1138,6 @@
 path[] map(path f(path), path[] a);
 real[][] map(real[] f(real[]), real[][] a);
 object[] map(object f(object), object[] a);
-Legend[] map(Legend f(Legend), Legend[] a);
 guide[] map(guide f(guide), guide[] a);
 real identity(real x);
 real[] identity(real[] a);
@@ -1252,6 +1252,7 @@
 int search(real[] a, real key);
 int search(string[] a, string key);
 int search(void()()[] a, void key()(), bool less(void()(), void()()));
+int search(picture[] a, picture key, bool less(picture, picture));
 int search(marker[] a, marker key, bool less(marker, marker));
 int search(real[] a, real key, bool less(real, real));
 int search(guide[] a, guide key, bool less(guide, guide));
@@ -1258,12 +1259,11 @@
 int search(pair[] a, pair key, bool less(pair, pair));
 int search(coord[] a, coord key, bool less(coord, coord));
 int search(coord[] a, coord key, bool less(coord, coord));
+int search(Legend[] a, Legend key, bool less(Legend, Legend));
 int search(frame[] a, frame key, bool less(frame, frame));
-int search(picture[] a, picture key, bool less(picture, picture));
 int search(int[] a, int key, bool less(int, int));
 int search(bool3[] a, bool3 key, bool less(bool3, bool3));
 int search(object[] a, object key, bool less(object, object));
-int search(Legend[] a, Legend key, bool less(Legend, Legend));
 int search(string[] a, string key, bool less(string, string));
 int search(path[] a, path key, bool less(path, path));
 int search(pen[] a, pen key, bool less(pen, pen));
@@ -1282,15 +1282,16 @@
 void()()[] sort(void()()[] a, bool less(void()(), void()()));
 real[] sort(real[] a, bool less(real, real));
 bool[] sort(bool[] a, bool less(bool, bool));
+picture[] sort(picture[] a, bool less(picture, picture));
 marker[] sort(marker[] a, bool less(marker, marker));
 pen[] sort(pen[] a, bool less(pen, pen));
 pen[][] sort(pen[][] a, bool less(pen[], pen[]));
 coord[] sort(coord[] a, bool less(coord, coord));
 coord[] sort(coord[] a, bool less(coord, coord));
+Legend[] sort(Legend[] a, bool less(Legend, Legend));
 guide[] sort(guide[] a, bool less(guide, guide));
 real[][] sort(real[][] a, bool less(real[], real[]));
 triple[] sort(triple[] a, bool less(triple, triple));
-picture[] sort(picture[] a, bool less(picture, picture));
 string[] sort(string[] a, bool less(string, string));
 int[] sort(int[] a, bool less(int, int));
 string[][] sort(string[][] a, bool less(string[], string[]));
@@ -1297,7 +1298,6 @@
 bool3[] sort(bool3[] a, bool less(bool3, bool3));
 pair[][] sort(pair[][] a, bool less(pair[], pair[]));
 object[] sort(object[] a, bool less(object, object));
-Legend[] sort(Legend[] a, bool less(Legend, Legend));
 frame[] sort(frame[] a, bool less(frame, frame));
 pair postcontrol(path p, int t);
 pair postcontrol(path p, real t);
@@ -1329,8 +1329,8 @@
 pair max(explicit path p);
 pair max(path[] p);
 triple max(path3 p);
+int max(... int[] a);
 pair max(picture pic, bool user=<default>);
-int max(... int[] a);
 real max(... real[] a);
 real max(real M, scaling s, coord[] c);
 real max(real M, scaling s, coord[] c);
@@ -1364,10 +1364,10 @@
 pair min(explicit path p);
 pair min(path[] p);
 triple min(path3 p);
+pair min(picture pic, bool user=<default>);
 real min(... real[] a);
 real min(real m, scaling s, coord[] c);
 real min(real m, scaling s, coord[] c);
-pair min(picture pic, bool user=<default>);
 int min(... int[] a);
 void srand(int seed);
 bool operator >(int a, int b);
@@ -1435,8 +1435,6 @@
 real[][] copy(real[][] a, int depth=<default>);
 pen[] copy(pen[] a, int depth=<default>);
 object[] copy(object[] a, int depth=<default>);
-picture[] copy(picture[] a, int depth=<default>);
-Legend[] copy(Legend[] a, int depth=<default>);
 pen[][] copy(pen[][] a, int depth=<default>);
 path[] copy(path[] a, int depth=<default>);
 string[] copy(string[] a, int depth=<default>);
@@ -1448,7 +1446,9 @@
 bool3[] copy(bool3[] a, int depth=<default>);
 coord[] copy(coord[] a, int depth=<default>);
 coord[] copy(coord[] a, int depth=<default>);
+picture[] copy(picture[] a, int depth=<default>);
 marker[] copy(marker[] a, int depth=<default>);
+Legend[] copy(Legend[] a, int depth=<default>);
 Label[] copy(Label[] a, int depth=<default>);
 pair[][] copy(pair[][] a, int depth=<default>);
 real[] abs(pair[] a);
@@ -1536,13 +1536,13 @@
 triple operator *(triple v, real x);
 path3 operator *(real[][] t, path3 g);
 Label operator *(transform t, Label L);
-picture operator *(real[][] t, picture orig);
+picture operator *(transform t, picture orig);
 bounds operator *(transform t, bounds b);
 path[] operator *(transform t, explicit path[] p);
 pair[] operator *(transform t, pair[] z);
+Label operator *(real[][] t, Label L);
+picture operator *(real[][] t, picture orig);
 side operator *(real x, side s);
-Label operator *(real[][] t, Label L);
-picture operator *(transform t, picture orig);
 object operator *(transform t, explicit object F);
 real latitude(triple v, bool warn=<default>);
 int sum(int[] a);
@@ -1623,10 +1623,10 @@
 void write(void suffix(file)=<default>);
 void write(file file, string s=<default>, explicit path[] x, void suffix(file)=<default>);
 void write(file file=<default>, align align, void suffix(file)=<default>);
+void write(pairOrTriple a);
 void write(file file, string s=<default>, cputime c, string format=<default>, void suffix(file)=<default>);
 void write(string s=<default>, bool3 b, void suffix(file)=<default>);
 void write(file file, string s=<default>, bool3 b, void suffix(file)=<default>);
-void write(pairOrTriple a);
 void write(string s=<default>, explicit guide[] x, void suffix(file)=<default>);
 void write(file file=<default>, Label L, void suffix(file)=<default>);
 bool operator !=(bool a, bool b);
@@ -1666,39 +1666,39 @@
 bool operator !=(path a, path b);
 bool operator !=(path3 a, path3 b);
 bool operator !=(bool3 a, bool3 b);
-bool operator !=(pairOrTriple a, pairOrTriple b);
+bool operator !=(autoscaleT a, autoscaleT b);
 bool operator !=(scaling a, scaling b);
 bool operator !=(scaling a, scaling b);
 bool operator !=(bounds a, bounds b);
 bool operator !=(light a, light b);
-bool operator !=(align a, align b);
+bool operator !=(pairOrTriple a, pairOrTriple b);
 bool operator !=(filltype a, filltype b);
-bool operator !=(ScaleT a, ScaleT b);
+bool operator !=(coords3 a, coords3 b);
 bool operator !=(Label a, Label b);
 bool operator !=(processtime a, processtime b);
-bool operator !=(projection a, projection b);
-bool operator !=(picture a, picture b);
+bool operator !=(ScaleT a, ScaleT b);
+bool operator !=(align a, align b);
 bool operator !=(indexedTransform a, indexedTransform b);
 bool operator !=(hsv a, hsv b);
 bool operator !=(coords2 a, coords2 b);
 bool operator !=(coords2 a, coords2 b);
 bool operator !=(transformation a, transformation b);
-bool operator !=(side a, side b);
+bool operator !=(picture a, picture b);
 bool operator !=(marker a, marker b);
 bool operator !=(bool3 a, bool b);
 bool operator !=(marginT a, marginT b);
-bool operator !=(Legend a, Legend b);
+bool operator !=(scaleT a, scaleT b);
 bool operator !=(object a, object b);
 bool operator !=(cputime a, cputime b);
 bool operator !=(coord a, coord b);
 bool operator !=(coord a, coord b);
-bool operator !=(coords3 a, coords3 b);
+bool operator !=(Legend a, Legend b);
+bool operator !=(side a, side b);
 bool operator !=(framedTransformStack a, framedTransformStack b);
 bool operator !=(bool a, bool3 b);
 bool operator !=(slice a, slice b);
 bool operator !=(freezableBounds a, freezableBounds b);
-bool operator !=(scaleT a, scaleT b);
-bool operator !=(autoscaleT a, autoscaleT b);
+bool operator !=(projection a, projection b);
 bool operator !=(position a, position b);
 bool operator !=(arrowhead a, arrowhead b);
 bool operator ==(bool a, bool b);
@@ -1738,39 +1738,39 @@
 bool operator ==(path a, path b);
 bool operator ==(path3 a, path3 b);
 bool operator ==(bool3 a, bool3 b);
-bool operator ==(pairOrTriple a, pairOrTriple b);
+bool operator ==(autoscaleT a, autoscaleT b);
 bool operator ==(scaling a, scaling b);
 bool operator ==(scaling a, scaling b);
 bool operator ==(bounds a, bounds b);
 bool operator ==(light a, light b);
-bool operator ==(align a, align b);
+bool operator ==(pairOrTriple a, pairOrTriple b);
 bool operator ==(filltype a, filltype b);
-bool operator ==(ScaleT a, ScaleT b);
+bool operator ==(coords3 a, coords3 b);
 bool operator ==(Label a, Label b);
 bool operator ==(processtime a, processtime b);
-bool operator ==(projection a, projection b);
-bool operator ==(picture a, picture b);
+bool operator ==(ScaleT a, ScaleT b);
+bool operator ==(align a, align b);
 bool operator ==(indexedTransform a, indexedTransform b);
 bool operator ==(hsv a, hsv b);
 bool operator ==(coords2 a, coords2 b);
 bool operator ==(coords2 a, coords2 b);
 bool operator ==(transformation a, transformation b);
-bool operator ==(side a, side b);
+bool operator ==(picture a, picture b);
 bool operator ==(marker a, marker b);
 bool operator ==(bool3 a, bool b);
 bool operator ==(marginT a, marginT b);
-bool operator ==(Legend a, Legend b);
+bool operator ==(scaleT a, scaleT b);
 bool operator ==(object a, object b);
 bool operator ==(cputime a, cputime b);
 bool operator ==(coord a, coord b);
 bool operator ==(coord a, coord b);
-bool operator ==(coords3 a, coords3 b);
+bool operator ==(Legend a, Legend b);
+bool operator ==(side a, side b);
 bool operator ==(framedTransformStack a, framedTransformStack b);
 bool operator ==(bool a, bool3 b);
 bool operator ==(slice a, slice b);
 bool operator ==(freezableBounds a, freezableBounds b);
-bool operator ==(scaleT a, scaleT b);
-bool operator ==(autoscaleT a, autoscaleT b);
+bool operator ==(projection a, projection b);
 bool operator ==(position a, position b);
 bool operator ==(arrowhead a, arrowhead b);
 bool operator ^(bool a, bool b);
@@ -1887,23 +1887,24 @@
 guide operator cast(cycleToken tok);
 guide operator cast(curlSpecifier spec);
 guide operator cast(tensionSpecifier t);
-align operator cast(side side);
 guide[] operator cast(path[] g);
+pair operator cast(pairOrTriple a);
+triple operator cast(pairOrTriple a);
 hsv operator cast(pen p);
-align operator cast(triple dir);
 bool3[] operator cast(bool[] b);
+align operator cast(pair dir);
 object operator cast(Label L);
 Label operator cast(object F);
 position operator cast(int x);
 object operator cast(string s);
 guide[] operator cast(pair[] z);
+align operator cast(triple dir);
 path[] operator cast(guide[] g);
 bool operator cast(bool3 b);
-pair operator cast(pairOrTriple a);
-triple operator cast(pairOrTriple a);
 position operator cast(real x);
 Label operator cast(string s);
 path[] operator cast(guide g);
+align operator cast(side side);
 frame operator cast(object F);
 path[] operator cast(pair[] z);
 path[] operator cast(path p);
@@ -1913,7 +1914,6 @@
 bool3 operator cast(bool b);
 object operator cast(frame f);
 pen operator cast(hsv hsv);
-align operator cast(pair dir);
 pen deepred;
 bool error(file f);
 string operator ecast(int);
@@ -1942,16 +1942,15 @@
 frame operator init();
 file operator init();
 marginT operator init();
-Legend operator init();
+scaleT operator init();
 object operator init();
 cputime operator init();
 filltype operator init();
-ScaleT operator init();
+coords3 operator init();
 Label operator init();
 processtime operator init();
 slice operator init();
-scaleT operator init();
-autoscaleT operator init();
+projection operator init();
 position operator init();
 arrowhead operator init();
 hsv operator init();
@@ -1958,22 +1957,24 @@
 coords2 operator init();
 coords2 operator init();
 transformation operator init();
-side operator init();
+picture operator init();
 marker operator init();
 scaling operator init();
 scaling operator init();
 bounds operator init();
 light operator init();
-align operator init();
+pairOrTriple operator init();
 coord operator init();
 coord operator init();
-coords3 operator init();
+Legend operator init();
+side operator init();
 framedTransformStack operator init();
-projection operator init();
-picture operator init();
+ScaleT operator init();
+align operator init();
 indexedTransform operator init();
 bool3 operator init();
-pairOrTriple operator init();
+autoscaleT operator init();
+sCAD operator init();
 frame BBox(frame)(real xmargin=<default>, real ymargin=<default>, pen p=<default>, filltype filltype=<default>);
 real animationdelay;
 frame NoBox(frame f);
@@ -2002,10 +2003,10 @@
 object draw(picture pic=<default>, binarytreeNode node, pair pos, int height, real minDist, real levelDist, real nodeDiameter, pen p=<default>, bool condensed=<default>);
 void draw(picture pic=<default>, binarytree tree, real minDist=<default>, real nodeMargin=<default>, pen p=<default>, bool condensed=<default>);
 real minDistDefault;
-real nodeMarginDefault;
 binarytreeNode operator init();
 key operator init();
 binarytree operator init();
+real nodeMarginDefault;
 key operator cast(int n);
 int operator cast(key k);
 int[] operator cast(key[] k);
@@ -2020,16 +2021,6 @@
 bsp operator init();
 picture operator cast(face f);
 face operator cast(path3 p);
-sCAD operator init();
-surface surface(vertex[][] g);
-real eps;
-vertex[][] contour3(triple[][][] v, real[][][] f, real[][][] midpoint=<default>, projection P=<default>);
-vertex[][] contour3(real[][][] f, real[][][] midpoint=<default>, triple a, triple b, projection P=<default>);
-vertex[][] contour3(real f(real, real, real), triple a, triple b, int nx=<default>, int ny=<default>, int nz=<default>, projection P=<default>);
-weighted operator init();
-bucket operator init();
-vertex operator init();
-object operator init();
 void addseg(pair[][] gds, segment seg);
 pen[] extend(pen[] palette, pen below, pen above);
 guide[][] connect(pair[][][] points, real[] c, guide join(... guide[]));
@@ -2038,33 +2029,42 @@
 real eps;
 segment case3(pair p0, pair p1, pair p2, real v0, real v1, real v2, int edge=<default>);
 void fill(picture pic=<default>, guide[][] g, pen[][] palette);
+pen[][] interior(picture pic=<default>, guide[][] g, pen[] palette);
+void draw(picture pic=<default>, Label[] L=<default>, guide[][] g, pen[] p);
+void draw(picture pic=<default>, Label[] L=<default>, guide[][] g, pen p=<default>);
 guide[][] contour(pair[][] z, real[][] f, real[][] midpoint=<default>, real[] c, guide join(... guide[])=<default>);
 guide[][] contour(real[][] f, real[][] midpoint=<default>, pair a, pair b, real[] c, guide join(... guide[])=<default>);
 guide[][] contour(real f(real, real), pair a, pair b, real[] c, int nx=<default>, int ny=<default>, guide join(... guide[])=<default>);
 guide[][] contour(real f(pair), pair a, pair b, real[] c, int nx=<default>, int ny=<default>, guide join(... guide[])=<default>);
 guide[][] contour(pair[] z, real[] f, real[] c, guide join(... guide[])=<default>);
-pen[][] interior(picture pic=<default>, guide[][] g, pen[] palette);
-void draw(picture pic=<default>, Label[] L=<default>, guide[][] g, pen[] p);
-void draw(picture pic=<default>, Label[] L=<default>, guide[][] g, pen p=<default>);
 segment operator init();
 segment checktriangle(pair p0, pair p1, pair p2, real v0, real v1, real v2, int edge=<default>);
 segment case2(pair p0, pair p1, pair p2, real v0, real v1, real v2, int edge);
+surface surface(vertex[][] g);
+real eps;
+vertex[][] contour3(triple[][][] v, real[][][] f, real[][][] midpoint=<default>, projection P=<default>);
+vertex[][] contour3(real[][][] f, real[][][] midpoint=<default>, triple a, triple b, projection P=<default>);
+vertex[][] contour3(real f(real, real, real), triple a, triple b, int nx=<default>, int ny=<default>, int nz=<default>, projection P=<default>);
+weighted operator init();
+bucket operator init();
+vertex operator init();
+object operator init();
 void drawAll(TreeNode node, frame f);
 real layout(int level, TreeNode node);
 real treeMinNodeWidth;
-real treeLevelStep;
 real treeNodeStep;
+void add(TreeNode child, TreeNode parent);
 void draw(TreeNode root, pair pos);
-void add(TreeNode child, TreeNode parent);
+real treeLevelStep;
 TreeNode makeNode(TreeNode parent=<default>, frame f);
 TreeNode makeNode(TreeNode parent=<default>, Label label);
 TreeNode operator init();
+string link(string label, string text=<default>);
 string embed(string name, string text=<default>, string options=<default>, real width=<default>, real height=<default>);
-string link(string label, string text=<default>);
 string embedplayer(string name, string text=<default>, string options=<default>, real width=<default>, real height=<default>);
+string embed(string name, string text=<default>, string options=<default>, real width=<default>, real height=<default>, string image=<default>);
 string hyperlink(string url, string text);
 string link(string label, string text=<default>);
-string embed(string name, string text=<default>, string options=<default>, real width=<default>, real height=<default>, string image=<default>);
 void texshipout(string stem, picture pic=<default>, bool xalign=<default>);
 bool XYAlign;
 void fmdefaults();
@@ -2102,17 +2102,17 @@
 void drawVertexTriangleO(picture pic=<default>, pair xy, real r=<default>, pen fgpen=<default>, bool erasebg=<default>, pen bgpen=<default>);
 void drawVertexOX(picture pic=<default>, pair xy, real r=<default>, pen fgpen=<default>, bool erasebg=<default>, pen bgpen=<default>);
 void drawDoubleLine(picture pic=<default>, path p, pen fgpen=<default>, real dlspacing=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, bool erasebg=<default>, pen bgpen=<default>, real vertexangle=<default>, real margin=<default>);
+bool currentmomarrow(picture, path, pen, marginT(path, pen));
+bool overpaint;
+real minvertexangle;
 pen backgroundpen;
-real minvertexangle;
 pen doublelinepen;
 void drawVertexBoxX(picture pic=<default>, pair xy, real r=<default>, pen fgpen=<default>, bool erasebg=<default>, pen bgpen=<default>);
 real gluonamplitude;
+pen gluonpen;
 pen photonpen;
-pen gluonpen;
+real photonamplitude;
 real doublelinespacing;
-bool currentmomarrow(picture, path, pen, marginT(path, pen));
-real photonamplitude;
-bool overpaint;
 real vertexsize;
 void drawVertexBoxO(picture pic=<default>, pair xy, real r=<default>, pen fgpen=<default>, bool erasebg=<default>, pen bgpen=<default>);
 pen bigvertexpen;
@@ -2135,10 +2135,10 @@
 real mincirclediameter;
 block blockconnector(block, block)(picture pic, transform t, pen p=<default>, marginT margin(path, pen)=<default>);
 Dir Left;
-void draw(picture pic=<default>, block block, pen p=<default>);
 block operator --(block b1, Label label);
 block operator --(block b1, Dir dir);
 block operator --(block b, bool arrowbar(picture, path, pen, marginT(path, pen)));
+void draw(picture pic=<default>, block block, pen p=<default>);
 flowdir operator init();
 block operator init();
 Dir operator init();
@@ -2197,7 +2197,6 @@
 real arclength(parabola p);
 real arclength(arc a);
 string conictype(bqe bqe);
-real operator ^(point M, explicit circle c);
 point circumcenter(point A, point B, point C);
 point circumcenter(triangle t);
 parabola parabola(point F, line l);
@@ -2234,6 +2233,7 @@
 line bisector(point A, point B, real angle=<default>);
 line bisector(vertex V, real angle=<default>);
 line bisector(side side);
+real sharpangle(line l1, line l2);
 line perpendicular(point M, line l);
 line perpendicular(point M, explicit vector normal);
 line perpendicular(point M, explicit pair normal);
@@ -2331,11 +2331,11 @@
 transform rotate(explicit point dir);
 bool isparabola(bqe bqe);
 real sharpdegrees(line l1, line l2);
+void markangle(picture pic=<default>, Label L=<default>, int n=<default>, real radius=<default>, real space=<default>, explicit line l1, explicit line l2, explicit pair align=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, pen p=<default>, filltype filltype=<default>, marginT margin(path, pen)=<default>, marker marker=<default>);
+void markangle(picture pic=<default>, Label L=<default>, int n=<default>, real radius=<default>, real space=<default>, explicit line l1, explicit line l2, explicit vector align, bool arrow(picture, path, pen, marginT(path, pen))=<default>, pen p=<default>, filltype filltype=<default>, marginT margin(path, pen)=<default>, marker marker=<default>);
 real exradius(point A, point B, point C);
 real exradius(side side);
 triangle orthic(triangle t);
-void markangle(picture pic=<default>, Label L=<default>, int n=<default>, real radius=<default>, real space=<default>, explicit line l1, explicit line l2, explicit pair align=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, pen p=<default>, filltype filltype=<default>, marginT margin(path, pen)=<default>, marker marker=<default>);
-void markangle(picture pic=<default>, Label L=<default>, int n=<default>, real radius=<default>, real space=<default>, explicit line l1, explicit line l2, explicit vector align, bool arrow(picture, path, pen, marginT(path, pen))=<default>, pen p=<default>, filltype filltype=<default>, marginT margin(path, pen)=<default>, marker marker=<default>);
 path square(pair z1, pair z2);
 line Oy(coordsys R=<default>);
 line Oy;
@@ -2345,16 +2345,18 @@
 inversion inversion(circle c1, circle c2, circle c3);
 inversion inversion(circle c);
 void drawline(picture pic=<default>, triangle t, pen p=<default>);
+real operator ^(point M, explicit circle c);
+segment segment(point A, point B);
+segment segment(line l);
+segment segment(explicit side side);
 path fromCenter(conic co, real angle1, real angle2, int n, bool direction);
 circle circumcircle(point A, point B, point C);
 circle circumcircle(triangle t);
-segment segment(point A, point B);
-segment segment(line l);
-segment segment(explicit side side);
 triangle symmedial(triangle t);
 int curvilinearsystem;
 bqe bqe(coordsys R=<default>, real a, real b, real c, real d, real e, real f);
 bqe bqe(point M1, point M2, point M3, point M4, point M5);
+real focusToCenter(ellipse el, real a);
 point radicalcenter(circle c1, circle c2);
 point radicalcenter(circle c1, circle c2, circle c3);
 point symmedian(triangle t);
@@ -2384,11 +2386,7 @@
 line[] complementary(explicit segment s);
 arc complementary(arc a);
 triangle triangle(line l1, line l2, line l3);
-void perpendicularmark(picture pic=<default>, point z, explicit pair align, explicit pair dir=<default>, real size=<default>, pen p=<default>, marginT margin(path, pen)=<default>, filltype filltype=<default>);
-void perpendicularmark(picture pic=<default>, point z, vector align, vector dir=<default>, real size=<default>, pen p=<default>, marginT margin(path, pen)=<default>, filltype filltype=<default>);
-void perpendicularmark(picture pic=<default>, point z, explicit pair align, path g, real size=<default>, pen p=<default>, marginT margin(path, pen)=<default>, filltype filltype=<default>);
-void perpendicularmark(picture pic=<default>, point z, vector align, path g, real size=<default>, pen p=<default>, marginT margin(path, pen)=<default>, filltype filltype=<default>);
-void perpendicularmark(picture pic=<default>, line l1, line l2, real size=<default>, pen p=<default>, int quarter=<default>, marginT margin(path, pen)=<default>, filltype filltype=<default>);
+int nodesystem;
 bool byvertices;
 transform scale(real k, point M);
 transform scale(real k, point A, point B, point C, point D, bool safe=<default>);
@@ -2421,6 +2419,12 @@
 real inradius(triangle t);
 int conicnodesnumber(conic co, real angle1, real angle2, bool dir=<default>);
 int parabolanodesnumberfactor;
+arc arc(ellipse el, real angle1, real angle2, path polarconicroutine(conic co, real angle1, real angle2, int n, bool direction)=<default>, bool direction=<default>);
+arc arc(ellipse el, explicit abscissa x1, explicit abscissa x2, bool direction=<default>);
+arc arc(ellipse el, point M, point N, bool direction=<default>);
+arc arc(explicit arc a, abscissa x1, abscissa x2);
+arc arc(explicit arc a, point M, point N);
+path arc(explicit pair B, explicit pair A, explicit pair C, real r);
 mass masscenter(... mass[] M);
 bool finite(explicit point p);
 bool defined(point P);
@@ -2443,9 +2447,7 @@
 triangle[] operator ^^(triangle[] t1, triangle t2);
 triangle[] operator ^^(... triangle[] t);
 point[] standardizecoordsys(coordsys R=<default>, bool warn=<default> ... point[] M);
-real focusToCenter(ellipse el, real a);
 real EPS;
-triangle medial(triangle t);
 abscissa angabscissa(real x, path polarconicroutine(conic co, real angle1, real angle2, int n, bool direction)=<default>);
 abscissa angabscissa(int x, path polarconicroutine(conic co, real angle1, real angle2, int n, bool direction)=<default>);
 abscissa angabscissa(circle c, point M);
@@ -2526,10 +2528,13 @@
 bool operator @(point M, explicit circle c);
 bool operator @(point M, arc a);
 triangle triangleAbc(real alpha, real b, real c, real angle=<default>, point A=<default>);
-line reverse(line l);
-arc reverse(arc a);
-bool operator !=(explicit point M, explicit point N);
-bool operator !=(line l1, line l2);
+real elle(real phi, real k);
+trilinear trilinear(triangle t, real a, real b, real c);
+trilinear trilinear(triangle t, point M);
+trilinear trilinear(triangle t, real f(real, real, real), real a=<default>, real b=<default>, real c=<default>);
+point bisectorpoint(side side);
+line median(vertex V);
+line median(side side);
 abscissa curabscissa(real x);
 abscissa curabscissa(int x);
 abscissa curabscissa(line l, point M);
@@ -2538,9 +2543,6 @@
 abscissa curabscissa(parabola p, point M);
 abscissa curabscissa(conic co, point M);
 abscissa curabscissa(arc a, point M);
-line median(vertex V);
-line median(side side);
-real elle(real phi, real k);
 void draw(picture pic=<default>, Label L=<default>, line l, bool dirA=<default>, bool dirB=<default>, align align=<default>, pen p=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, Label legend=<default>, marker marker=<default>, path pathModifier(path)=<default>);
 void draw(picture pic=<default>, Label[] L=<default>, line[] l, align align=<default>, pen[] p=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, Label[] legend=<default>, marker marker=<default>, path pathModifier(path)=<default>);
 void draw(picture pic=<default>, Label[] L=<default>, line[] l, align align=<default>, pen p, bool arrow(picture, path, pen, marginT(path, pen))=<default>, Label[] legend=<default>, marker marker=<default>, path pathModifier(path)=<default>);
@@ -2592,11 +2594,16 @@
 point[] intersectionpoints(arc a1, arc a2);
 point[] intersectionpoints(line l, arc a);
 point[] intersectionpoints(arc a, line l);
-trilinear trilinear(triangle t, real a, real b, real c);
-trilinear trilinear(triangle t, point M);
-trilinear trilinear(triangle t, real f(real, real, real), real a=<default>, real b=<default>, real c=<default>);
-point bisectorpoint(side side);
-real rd(real x, real y, real z);
+arc arccircle(point A, point M, point B);
+arc arccircle(point A, point B, real angle, bool direction=<default>);
+point relpoint(line l, real x);
+point relpoint(explicit circle c, real x);
+point relpoint(explicit ellipse el, real x);
+point relpoint(explicit parabola p, real x);
+point relpoint(explicit hyperbola h, real x);
+point relpoint(explicit conic co, explicit real x);
+point relpoint(explicit conic co, explicit int x);
+point relpoint(arc a, real x);
 point point(coordsys R, pair p, real m=<default>);
 point point(explicit pair p, real m);
 point point(coordsys R, explicit point M, real m=<default>);
@@ -2627,22 +2634,20 @@
 point point(trilinear tri);
 point point(circle c, point M);
 point point(circle c, explicit vector v);
+line reverse(line l);
+arc reverse(arc a);
+bool operator !=(explicit point M, explicit point N);
+bool operator !=(line l1, line l2);
 int[] numarray;
-arc arccircle(point A, point M, point B);
-arc arccircle(point A, point B, real angle, bool direction=<default>);
-point relpoint(line l, real x);
-point relpoint(explicit circle c, real x);
-point relpoint(explicit ellipse el, real x);
-point relpoint(explicit parabola p, real x);
-point relpoint(explicit hyperbola h, real x);
-point relpoint(explicit conic co, explicit real x);
-point relpoint(explicit conic co, explicit int x);
-point relpoint(arc a, real x);
 bool operator ==(coordsys c1, coordsys c2);
 bool operator ==(explicit point M, explicit point N);
 bool operator ==(explicit vector u, explicit vector v);
 bool operator ==(line l1, line l2);
-int nodesystem;
+point excenter(point A, point B, point C);
+point excenter(side side);
+mass mass(point M, real m);
+mass mass(explicit point P);
+mass mass(coordsys R, explicit pair p, real m);
 transform yscaleO(real x);
 coordsys operator init();
 point operator init();
@@ -2661,7 +2666,6 @@
 triangle operator init();
 trilinear operator init();
 inversion operator init();
-real sharpangle(line l1, line l2);
 point isogonal(side side, point M);
 line isogonal(vertex V, point M);
 triangle isogonal(triangle t, point M);
@@ -2675,12 +2679,6 @@
 real dot(explicit pair A, point B);
 void dot(picture pic=<default>, Label L, explicit mass M, align align=<default>, string format=<default>, pen p=<default>);
 void dot(picture pic=<default>, triangle t, pen p=<default>);
-arc arc(ellipse el, real angle1, real angle2, path polarconicroutine(conic co, real angle1, real angle2, int n, bool direction)=<default>, bool direction=<default>);
-arc arc(ellipse el, explicit abscissa x1, explicit abscissa x2, bool direction=<default>);
-arc arc(ellipse el, point M, point N, bool direction=<default>);
-arc arc(explicit arc a, abscissa x1, abscissa x2);
-arc arc(explicit arc a, point M, point N);
-path arc(explicit pair B, explicit pair A, explicit pair C, real r);
 triangle antipedal(triangle t, point M);
 line tangent(circle c, abscissa x);
 line tangent(circle c, point M);
@@ -2753,6 +2751,11 @@
 pen addpenarc;
 pen addpenarc(pen p);
 int[] tricoef(side side);
+void perpendicularmark(picture pic=<default>, point z, explicit pair align, explicit pair dir=<default>, real size=<default>, pen p=<default>, marginT margin(path, pen)=<default>, filltype filltype=<default>);
+void perpendicularmark(picture pic=<default>, point z, vector align, vector dir=<default>, real size=<default>, pen p=<default>, marginT margin(path, pen)=<default>, filltype filltype=<default>);
+void perpendicularmark(picture pic=<default>, point z, explicit pair align, path g, real size=<default>, pen p=<default>, marginT margin(path, pen)=<default>, filltype filltype=<default>);
+void perpendicularmark(picture pic=<default>, point z, vector align, path g, real size=<default>, pen p=<default>, marginT margin(path, pen)=<default>, filltype filltype=<default>);
+void perpendicularmark(picture pic=<default>, line l1, line l2, real size=<default>, pen p=<default>, int quarter=<default>, marginT margin(path, pen)=<default>, filltype filltype=<default>);
 real[] intersect(path g, explicit pair p, real fuzz=<default>);
 real[] intersect(path g, explicit point P, real fuzz=<default>);
 point incenter(point A, point B, point C);
@@ -2791,13 +2794,9 @@
 real[] bangles(picture pic=<default>, parabola p);
 real[][] bangles(picture pic=<default>, hyperbola h);
 bool onpath(picture pic=<default>, path g, point M, pen p=<default>);
+real rd(real x, real y, real z);
 int circlenodesnumberfactor;
 transform xscale(real k, point M);
-point excenter(point A, point B, point C);
-point excenter(side side);
-mass mass(point M, real m);
-mass mass(explicit point P);
-mass mass(coordsys R, explicit pair p, real m);
 circle circle(explicit point C, real r);
 circle circle(point A, point B);
 circle circle(segment s);
@@ -2809,6 +2808,7 @@
 ellipse ellipse(point C, real a, real b, real angle=<default>);
 ellipse ellipse(bqe bqe);
 ellipse ellipse(point M1, point M2, point M3, point M4, point M5);
+triangle medial(triangle t);
 transform projection(point A, point B);
 transform projection(point A, point B, point C, point D, bool safe=<default>);
 transform projection(line l);
@@ -2819,129 +2819,18 @@
 hyperbola hyperbola(point C, real a, real b, real angle=<default>);
 hyperbola hyperbola(bqe bqe);
 hyperbola hyperbola(point M1, point M2, point M3, point M4, point M5);
-void(flatguide3)[][] lift(real f(real x, real y), guide[][] g, void join(flatguide3)(... void(flatguide3)[])=<default>);
-void(flatguide3)[][] lift(real f(pair z), guide[][] g, void join(flatguide3)(... void(flatguide3)[])=<default>);
-void labelz3(picture pic=<default>, Label L=<default>, real z, align align=<default>, string format=<default>, pen p=<default>);
-void labelz(picture pic=<default>, Label L=<default>, triple v, align align=<default>, string format=<default>, pen p=<default>);
-void ztick3(picture pic=<default>, real z, triple dir=<default>, real size=<default>, pen p=<default>);
-void ztick3(picture pic=<default>, Label L, real z, triple dir=<default>, string format=<default>, real size=<default>, pen p=<default>);
-void ytick3(picture pic=<default>, real y, triple dir=<default>, real size=<default>, pen p=<default>);
-void ytick3(picture pic=<default>, Label L, real y, triple dir=<default>, string format=<default>, real size=<default>, pen p=<default>);
-void xtick3(picture pic=<default>, real x, triple dir=<default>, real size=<default>, pen p=<default>);
-void xtick3(picture pic=<default>, Label L, real x, triple dir=<default>, string format=<default>, real size=<default>, pen p=<default>);
-real ScaleZ(picture pic=<default>, real z);
-void zlimits(picture pic=<default>, real min=<default>, real max=<default>, bool crop=<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>);
-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 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 autoscale3(picture pic=<default>, void axis(picture, axisT));
-void yaxis3At(picture pic=<default>, Label L=<default>, void axis(picture, axisT), 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>, bool opposite=<default>, bool opposite2=<default>, bool primary=<default>);
-triple defaultdir(triple X, triple Y, triple Z, bool opposite=<default>, projection P);
-void YZZero(picture, axisT)(triple align=<default>, bool extend=<default>);
-void YZZero(picture, axisT);
-void XYEquals(picture, axisT)(real x, real y, triple align=<default>, bool extend=<default>);
-void XZEquals(picture, axisT)(real x, real z, triple align=<default>, bool extend=<default>);
-void YZEquals(picture, axisT)(real y, real z, triple align=<default>, bool extend=<default>);
-void Bounds(picture, axisT)(int type=<default>, int type2=<default>, triple align=<default>, bool extend=<default>);
-void Bounds(picture, axisT);
-void InOutTicks(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>);
-void InOutTicks(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>, real[] Ticks, real[] ticks=<default>, real Size=<default>, real size=<default>, bool extend=<default>, pen pTick=<default>, pen ptick=<default>);
-void InOutTicks(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 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>);
-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>, real[] Ticks, real[] ticks=<default>, real Size=<default>, real size=<default>, bool extend=<default>, pen pTick=<default>, pen ptick=<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>);
-void Ticks3(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>)(int sign, Label F=<default>, string ticklabel(real)=<default>, bool beginlabel=<default>, bool endlabel=<default>, real[] Ticks=<default>, real[] ticks=<default>, int N=<default>, bool begin=<default>, bool end=<default>, real Size=<default>, real size=<default>, bool extend=<default>, pen pTick=<default>, pen ptick=<default>);
-void Ticks3(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>)(int sign, Label F=<default>, string ticklabel(real)=<default>, bool beginlabel=<default>, bool endlabel=<default>, int N, 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>);
-triple Dir(real)(triple dir);
-void labelx3(picture pic=<default>, Label L=<default>, real x, align align=<default>, string format=<default>, pen p=<default>);
-surface bispline(real[][] z, real[][] p, real[][] q, real[][] r, real[] x, real[] y, bool[][] cond=<default>);
-triple tickMax3(picture pic);
-triple tickMin3(picture pic);
-real ztrans(real[][] t, real z);
-void graph(flatguide3)(triple F(real), real, real, int)(void join(flatguide3)(... void(flatguide3)[]));
-void(flatguide3)[] graph(triple F(real), real, real, int)(void join(flatguide3)(... void(flatguide3)[]), bool3 cond(real));
-void graph(flatguide3)(picture pic=<default>, real x(real), real y(real), real z(real), real a, real b, int n=<default>, void join(flatguide3)(... void(flatguide3)[])=<default>);
-void(flatguide3)[] graph(picture pic=<default>, real x(real), real y(real), real z(real), real a, real b, int n=<default>, bool3 cond(real), void join(flatguide3)(... void(flatguide3)[])=<default>);
-void graph(flatguide3)(picture pic=<default>, triple v(real), real a, real b, int n=<default>, void join(flatguide3)(... void(flatguide3)[])=<default>);
-void(flatguide3)[] graph(picture pic=<default>, triple v(real), real a, real b, int n=<default>, bool3 cond(real), void join(flatguide3)(... void(flatguide3)[])=<default>);
-void graph(flatguide3)(picture pic=<default>, triple[] v, void join(flatguide3)(... void(flatguide3)[])=<default>);
-void(flatguide3)[] graph(picture pic=<default>, triple[] v, bool3[] cond, void join(flatguide3)(... void(flatguide3)[])=<default>);
-void graph(flatguide3)(picture pic=<default>, real[] x, real[] y, real[] z, void join(flatguide3)(... void(flatguide3)[])=<default>);
-void(flatguide3)[] graph(picture pic=<default>, real[] x, real[] y, real[] z, bool3[] cond, void join(flatguide3)(... void(flatguide3)[])=<default>);
-void graph(flatguide3)(triple F(path, real), path p, int n=<default>, void join(flatguide3)(... void(flatguide3)[])=<default>);
-void graph(flatguide3)(triple F(pair), path p, int n=<default>, void join(flatguide3)(... void(flatguide3)[])=<default>);
-void graph(flatguide3)(picture pic=<default>, real f(pair), path p, int n=<default>, void join(flatguide3)(... void(flatguide3)[])=<default>);
-void graph(flatguide3)(real f(pair), path p, int n=<default>, real T(pair), void join(flatguide3)(... void(flatguide3)[])=<default>);
-void label(picture pic, Label L, triple v, real x, align align, string format, pen p);
-void xtick(picture pic=<default>, triple v, triple dir=<default>, real size=<default>, pen p=<default>);
-void xtick(picture pic=<default>, Label L, triple v, triple dir=<default>, string format=<default>, real size=<default>, pen p=<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>)();
-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 Spline(flatguide3)(... void(flatguide3)[]);
-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>);
-void draw(picture pic=<default>, Label[] L=<default>, void(flatguide3)[][] g, pen p=<default>, light light=<default>, string name=<default>, render render=<default>, interaction interaction=<default>);
-triple ticklabelshift(triple align, pen p=<default>);
-void xaxis3At(picture pic=<default>, Label L=<default>, void axis(picture, axisT), 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>, bool opposite=<default>, bool opposite2=<default>, bool primary=<default>);
-void zaxis3At(picture pic=<default>, Label L=<default>, void axis(picture, axisT), 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>, bool opposite=<default>, bool opposite2=<default>, bool primary=<default>);
-void ztick(picture pic=<default>, triple v, triple dir=<default>, real size=<default>, pen p=<default>);
-void ztick(picture pic=<default>, Label L, triple v, triple dir=<default>, string format=<default>, real size=<default>, pen p=<default>);
-triple Scale(picture pic=<default>, triple v);
-triple polar(real r, real theta, real phi);
-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>);
-void axes3(picture pic=<default>, Label xlabel=<default>, Label ylabel=<default>, Label zlabel=<default>, bool extend=<default>, triple min=<default>, triple max=<default>, pen p=<default>, bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, marginT3 margin(path3, pen)=<default>);
-void OutTicks(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>);
-void OutTicks(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>, real[] Ticks, real[] ticks=<default>, real Size=<default>, real size=<default>, bool extend=<default>, pen pTick=<default>, pen ptick=<default>);
-void OutTicks(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 labely3(picture pic=<default>, Label L=<default>, real y, align align=<default>, string format=<default>, pen p=<default>);
-locateT operator init();
-path3[] segment(triple[] v, bool[] cond, void join(flatguide3)(... void(flatguide3)[])=<default>);
-void XZZero(picture, axisT)(triple align=<default>, bool extend=<default>);
-void XZZero(picture, axisT);
-void labeltick(picture pic, real[][] T, path3 g, ticklocate locate, real val, int sign, real Size, string ticklabel(real), Label F, real norm=<default>);
-path3 Arc(triple c, triple v1, triple v2, triple normal=<default>, bool direction=<default>, int n=<default>);
-path3 Arc(triple c, real r, real theta1, real phi1, real theta2, real phi2, triple normal=<default>, bool direction, int n=<default>);
-path3 Arc(triple c, real r, real theta1, real phi1, real theta2, real phi2, triple normal=<default>, int n=<default>);
-bool vperiodic(triple[][] a);
-void ytick(picture pic=<default>, triple v, triple dir=<default>, real size=<default>, pen p=<default>);
-void ytick(picture pic=<default>, Label L, triple v, triple dir=<default>, string format=<default>, real size=<default>, pen p=<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), 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>);
-void labelx(picture pic=<default>, Label L=<default>, triple v, align align=<default>, string format=<default>, pen p=<default>);
-void axis(picture pic=<default>, Label L=<default>, path3 g, path3 g2=<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>), ticklocate locate, bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, marginT3 margin(path3, pen)=<default>, int[] divisor=<default>, bool above=<default>, bool opposite=<default>);
-void labelaxis(picture pic, real[][] T, Label L, path3 g, ticklocate locate=<default>, int sign=<default>, bool ticklabels=<default>);
-void labely(picture pic=<default>, Label L=<default>, triple v, align align=<default>, string format=<default>, pen p=<default>);
-void Straight(flatguide3)(... void(flatguide3)[]);
-real xtrans(real[][] t, real x);
-void tick(picture pic=<default>, triple v, triple dir, real size=<default>, pen p=<default>);
-void tick(picture pic=<default>, Label L, real value, triple v, triple dir, string format=<default>, real size=<default>, pen p=<default>);
-real ytrans(real[][] t, real y);
-path3 Circle(triple c, real r, triple normal=<default>, int n=<default>);
-ticklocate ticklocate(real a, real b, autoscaleT S=<default>, real tickmin=<default>, real tickmax=<default>, real time(real)=<default>, triple dir(real));
-real maxlength(triple f(pair z), pair a, pair b, int nu, int nv);
-void drawtick(picture pic, real[][] T, path3 g, path3 g2, ticklocate locate, real val, real Size, int sign, pen p, bool extend);
-bool uperiodic(triple[][] a);
-void polargraph(flatguide3)(real r(real, real), real theta(real), real phi(real), int n=<default>, void join(flatguide3)(... void(flatguide3)[])=<default>);
-void limits(picture pic=<default>, triple min, triple max);
-void XYZero(picture, axisT)(triple align=<default>, bool extend=<default>);
-void XYZero(picture, axisT);
 path Circle(pair c, real r, int n=<default>);
-path Arc(pair c, real r, real angle1, real angle2, bool direction, int n=<default>);
-path Arc(pair c, real r, real angle1, real angle2, int n=<default>);
-path Arc(pair c, explicit pair z1, explicit pair z2, bool direction=<default>, int n=<default>);
 real maxlength(pair a, pair b, int nx, int ny);
 void errorbar(picture pic, pair z, pair dp, pair dm, pen p=<default>, real size=<default>);
 guide polargraph(picture pic=<default>, real r(real), real a, real b, int n=<default>, guide join(... guide[])=<default>);
 guide polargraph(picture pic=<default>, real[] r, real[] theta, guide join(... guide[])=<default>);
 void checkconditionlength(int x, int y);
+guide Straight(... guide[]);
 picture secondaryY(picture primary=<default>, void f(picture));
-picture secondaryX(picture primary=<default>, void f(picture));
 string noprimary;
+path Arc(pair c, real r, real angle1, real angle2, bool direction, int n=<default>);
+path Arc(pair c, real r, real angle1, real angle2, int n=<default>);
+path Arc(pair c, explicit pair z1, explicit pair z2, bool direction=<default>, int n=<default>);
 void labely(picture pic=<default>, Label L=<default>, explicit pair z, align align=<default>, string format=<default>, pen p=<default>);
 void labely(picture pic=<default>, Label L=<default>, real y, align align=<default>, string format=<default>, pen p=<default>);
 void labely(picture pic=<default>, Label L, string format=<default>, explicit pen p=<default>);
@@ -2948,17 +2837,22 @@
 void labelx(picture pic=<default>, Label L=<default>, explicit pair z, align align=<default>, string format=<default>, pen p=<default>);
 void labelx(picture pic=<default>, Label L=<default>, real x, align align=<default>, string format=<default>, pen p=<default>);
 void labelx(picture pic=<default>, Label L, string format=<default>, explicit pen p=<default>);
-void ytick(picture pic=<default>, explicit pair z, pair dir=<default>, real size=<default>, pen p=<default>);
-void ytick(picture pic=<default>, real y, pair dir=<default>, real size=<default>, pen p=<default>);
-void ytick(picture pic=<default>, Label L, explicit pair z, pair dir=<default>, string format=<default>, real size=<default>, pen p=<default>);
-void ytick(picture pic=<default>, Label L, real y, pair dir=<default>, string format=<default>, real size=<default>, pen p=<default>);
+void xtick(picture pic=<default>, explicit pair z, pair dir=<default>, real size=<default>, pen p=<default>);
+void xtick(picture pic=<default>, real x, pair dir=<default>, real size=<default>, pen p=<default>);
+void xtick(picture pic=<default>, Label L, explicit pair z, pair dir=<default>, string format=<default>, real size=<default>, pen p=<default>);
+void xtick(picture pic=<default>, Label L, real x, pair dir=<default>, string format=<default>, real size=<default>, pen p=<default>);
 void tick(picture pic=<default>, pair z, pair dir, real size=<default>, pen p=<default>);
 void tick(picture pic=<default>, Label L, real value, explicit pair z, pair dir, string format=<default>, real size=<default>, pen p=<default>);
+real ScaleX(picture pic=<default>, real x);
+picture secondaryX(picture primary=<default>, void f(picture));
+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>);
 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>);
 void limits(picture pic=<default>, pair min, pair max, bool crop=<default>);
 void crop(picture pic=<default>);
 string conditionlength;
 void ylimits(picture pic=<default>, real min=<default>, real max=<default>, bool crop=<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 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>);
 real ytrans(transform t, real y);
 void YEquals(picture, axisT)(real y, bool extend=<default>);
 real xtrans(transform t, real x);
@@ -2973,10 +2867,7 @@
 void RightTicks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<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>);
 void RightTicks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<default>)(Label format=<default>, string ticklabel(real)=<default>, bool beginlabel=<default>, bool endlabel=<default>, real[] Ticks, real[] ticks=<default>, real Size=<default>, real size=<default>, bool extend=<default>, pen pTick=<default>, pen ptick=<default>);
 void RightTicks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<default>);
-guide Straight(... guide[]);
 tickvalues OmitTick(tickvalues)(... real[] x);
-tickvalues OmitTickInterval(tickvalues)(real a, real b);
-tickvalues OmitTickIntervals(tickvalues)(real[] a, real[] b);
 void Ticks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<default>)(int sign, Label F=<default>, string ticklabel(real)=<default>, bool beginlabel=<default>, bool endlabel=<default>, real[] Ticks=<default>, real[] ticks=<default>, int N=<default>, bool begin=<default>, bool end=<default>, real Size=<default>, real size=<default>, bool extend=<default>, pen pTick=<default>, pen ptick=<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>)(int sign, Label F=<default>, string ticklabel(real)=<default>, bool beginlabel=<default>, bool endlabel=<default>, int N, 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>);
 void Ticks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<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>);
@@ -2995,35 +2886,35 @@
 bool axiscoverage(int N, transform T, path g, ticklocate locate, real Step, pair side, int sign, real Size, Label F, string ticklabel(real), real norm, real limit);
 void xequals(picture pic=<default>, Label L=<default>, real x, bool extend=<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>);
 void XEquals(picture, axisT)(real x, bool extend=<default>);
+path[] segment(pair[] z, bool[] cond, guide join(... guide[])=<default>);
 pair zero(real);
-path[] segment(pair[] z, bool[] cond, guide join(... guide[])=<default>);
-pair ticklabelshift(pair align, pen p=<default>);
+tickvalues OmitTickIntervals(tickvalues)(real[] a, real[] b);
 void Right(picture, axisT)(bool extend=<default>);
 void Right(picture, axisT);
-real ScaleY(picture pic=<default>, real y);
 guide Hermite(... guide[])(real[] splinetype(real[], real[]));
 guide Hermite(... guide[]);
 scaleT Logarithmic;
-string OmitFormat(real)(string s=<default> ... real[] x);
 void scale(picture pic=<default>, scaleT x, scaleT y=<default>, scaleT z=<default>);
 void scale(picture pic=<default>, bool xautoscale=<default>, bool yautoscale=<default>, bool zautoscale=<default>);
 tickvalues None(tickvalues v);
-void axes(picture pic=<default>, Label xlabel=<default>, Label ylabel=<default>, bool extend=<default>, pair min=<default>, pair max=<default>, pen p=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, marginT margin(path, pen)=<default>, bool above=<default>);
-pair polar(real r, real theta);
-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>);
 void NoTicks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<default>)();
 void NoTicks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<default>);
+pair polar(real r, real theta);
 void Left(picture, axisT)(bool extend=<default>);
 void Left(picture, axisT);
+void yequals(picture pic=<default>, Label L=<default>, real y, bool extend=<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>);
+string OmitFormat(real)(string s=<default> ... real[] x);
+tickvalues OmitTickInterval(tickvalues)(real a, real b);
 void drawtick(frame f, transform T, path g, path g2, ticklocate locate, real val, real Size, int sign, pen p, bool extend);
+void axes(picture pic=<default>, Label xlabel=<default>, Label ylabel=<default>, bool extend=<default>, pair min=<default>, pair max=<default>, pen p=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, marginT margin(path, pen)=<default>, bool above=<default>);
+picture vectorfield(path vector(real), path g, int n, bool truesize=<default>, pen p=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, marginT margin(path, pen)=<default>);
+picture vectorfield(path vector(pair), pair a, pair b, int nx=<default>, int ny=<default>, bool truesize=<default>, real maxlength=<default>, bool cond(pair z)=<default>, pen p=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, marginT margin(path, pen)=<default>);
 pair tickMax(picture pic);
 real linear(real)(real S(real x)=<default>, real Min, real Max);
 int Both;
 pair tickMin(picture pic);
-void yequals(picture pic=<default>, Label L=<default>, real y, bool extend=<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>);
-picture vectorfield(path vector(real), path g, int n, bool truesize=<default>, pen p=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, marginT margin(path, pen)=<default>);
-picture vectorfield(path vector(pair), pair a, pair b, int nx=<default>, int ny=<default>, bool truesize=<default>, real maxlength=<default>, bool cond(pair z)=<default>, pen p=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, marginT margin(path, pen)=<default>);
-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>);
+pair ticklabelshift(pair align, pen p=<default>);
+int Min;
 scaleT Linear;
 scaleT Linear(bool automin=<default>, bool automax=<default>, real s=<default>, real intercept=<default>);
 string LogFormat(real)(int base);
@@ -3030,6 +2921,9 @@
 string LogFormat(real);
 Label Break;
 tickvalues Break(tickvalues)(real, real);
+void LeftTicks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<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>);
+void LeftTicks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<default>)(Label format=<default>, string ticklabel(real)=<default>, bool beginlabel=<default>, bool endlabel=<default>, real[] Ticks, real[] ticks=<default>, real Size=<default>, real size=<default>, bool extend=<default>, pen pTick=<default>, pen ptick=<default>);
+void LeftTicks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<default>);
 tickvalues NoZero(tickvalues);
 int[] divisors(int a, int b);
 scientific operator init();
@@ -3041,21 +2935,17 @@
 string signedtrailingzero;
 void XZero(picture, axisT)(bool extend=<default>);
 void XZero(picture, axisT);
-void LeftTicks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<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>);
-void LeftTicks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<default>)(Label format=<default>, string ticklabel(real)=<default>, bool beginlabel=<default>, bool endlabel=<default>, real[] Ticks, real[] ticks=<default>, real Size=<default>, real size=<default>, bool extend=<default>, pen pTick=<default>, pen ptick=<default>);
-void LeftTicks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<default>);
-void xtick(picture pic=<default>, explicit pair z, pair dir=<default>, real size=<default>, pen p=<default>);
-void xtick(picture pic=<default>, real x, pair dir=<default>, real size=<default>, pen p=<default>);
-void xtick(picture pic=<default>, Label L, explicit pair z, pair dir=<default>, string format=<default>, real size=<default>, pen p=<default>);
-void xtick(picture pic=<default>, Label L, real x, pair dir=<default>, string format=<default>, real size=<default>, pen p=<default>);
 string trailingzero;
-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>);
-real ScaleX(picture pic=<default>, real x);
+real ScaleY(picture pic=<default>, real y);
 void xlimits(picture pic=<default>, real min=<default>, real max=<default>, bool crop=<default>);
 pair labeltick(frame d, transform T, path g, ticklocate locate, real val, pair side, int sign, real Size, string ticklabel(real), Label F, real norm=<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);
 string autoformat(string format=<default>, real norm ... real[] a);
 pair Scale(picture pic=<default>, pair z);
+void ytick(picture pic=<default>, explicit pair z, pair dir=<default>, real size=<default>, pen p=<default>);
+void ytick(picture pic=<default>, real y, pair dir=<default>, real size=<default>, pen p=<default>);
+void ytick(picture pic=<default>, Label L, explicit pair z, pair dir=<default>, string format=<default>, real size=<default>, pen p=<default>);
+void ytick(picture pic=<default>, Label L, real y, pair dir=<default>, string format=<default>, real size=<default>, pen p=<default>);
 guide graph(pair f(real), real, real, int)(guide join(... guide[]));
 guide[] graph(pair f(real), real, real, int)(guide join(... guide[]), bool3 cond(real));
 guide graph(picture pic=<default>, real f(real), real a, real b, int n=<default>, real T(real)=<default>, guide join(... guide[])=<default>);
@@ -3068,7 +2958,6 @@
 guide[] graph(picture pic=<default>, pair[] z, bool3[] cond, guide join(... guide[])=<default>);
 guide graph(picture pic=<default>, real[] x, real[] y, guide join(... guide[])=<default>);
 guide[] graph(picture pic=<default>, real[] x, real[] y, bool3[] cond, guide join(... guide[])=<default>);
-int Min;
 scaleT BrokenLog(real a, real b, bool automin=<default>, bool automax=<default>);
 void YZero(picture, axisT)(bool extend=<default>);
 void YZero(picture, axisT);
@@ -3089,6 +2978,117 @@
 real zerotickfuzz;
 void LeftRight(picture, axisT)(bool extend=<default>);
 void LeftRight(picture, axisT);
+void(flatguide3)[][] lift(real f(real x, real y), guide[][] g, void join(flatguide3)(... void(flatguide3)[])=<default>);
+void(flatguide3)[][] lift(real f(pair z), guide[][] g, void join(flatguide3)(... void(flatguide3)[])=<default>);
+void labelz3(picture pic=<default>, Label L=<default>, real z, align align=<default>, string format=<default>, pen p=<default>);
+void labelz(picture pic=<default>, Label L=<default>, triple v, align align=<default>, string format=<default>, pen p=<default>);
+void ztick3(picture pic=<default>, real z, triple dir=<default>, real size=<default>, pen p=<default>);
+void ztick3(picture pic=<default>, Label L, real z, triple dir=<default>, string format=<default>, real size=<default>, pen p=<default>);
+void ytick3(picture pic=<default>, real y, triple dir=<default>, real size=<default>, pen p=<default>);
+void ytick3(picture pic=<default>, Label L, real y, triple dir=<default>, string format=<default>, real size=<default>, pen p=<default>);
+void xtick3(picture pic=<default>, real x, triple dir=<default>, real size=<default>, pen p=<default>);
+void xtick3(picture pic=<default>, Label L, real x, triple dir=<default>, string format=<default>, real size=<default>, pen p=<default>);
+real ScaleZ(picture pic=<default>, real z);
+void zlimits(picture pic=<default>, real min=<default>, real max=<default>, bool crop=<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>);
+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 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 autoscale3(picture pic=<default>, void axis(picture, axisT));
+void xaxis3At(picture pic=<default>, Label L=<default>, void axis(picture, axisT), 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>, bool opposite=<default>, bool opposite2=<default>, bool primary=<default>);
+triple defaultdir(triple X, triple Y, triple Z, bool opposite=<default>, projection P);
+void YZZero(picture, axisT)(triple align=<default>, bool extend=<default>);
+void YZZero(picture, axisT);
+void XYEquals(picture, axisT)(real x, real y, triple align=<default>, bool extend=<default>);
+void XZEquals(picture, axisT)(real x, real z, triple align=<default>, bool extend=<default>);
+void YZEquals(picture, axisT)(real y, real z, triple align=<default>, bool extend=<default>);
+void Bounds(picture, axisT)(int type=<default>, int type2=<default>, triple align=<default>, bool extend=<default>);
+void Bounds(picture, axisT);
+void InOutTicks(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>);
+void InOutTicks(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>, real[] Ticks, real[] ticks=<default>, real Size=<default>, real size=<default>, bool extend=<default>, pen pTick=<default>, pen ptick=<default>);
+void InOutTicks(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 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>);
+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>, real[] Ticks, real[] ticks=<default>, real Size=<default>, real size=<default>, bool extend=<default>, pen pTick=<default>, pen ptick=<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>);
+void Ticks3(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>)(int sign, Label F=<default>, string ticklabel(real)=<default>, bool beginlabel=<default>, bool endlabel=<default>, real[] Ticks=<default>, real[] ticks=<default>, int N=<default>, bool begin=<default>, bool end=<default>, real Size=<default>, real size=<default>, bool extend=<default>, pen pTick=<default>, pen ptick=<default>);
+void Ticks3(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>)(int sign, Label F=<default>, string ticklabel(real)=<default>, bool beginlabel=<default>, bool endlabel=<default>, int N, 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>);
+triple Dir(real)(triple dir);
+surface bispline(real[][] z, real[][] p, real[][] q, real[][] r, real[] x, real[] y, bool[][] cond=<default>);
+void XYZero(picture, axisT)(triple align=<default>, bool extend=<default>);
+void XYZero(picture, axisT);
+triple tickMax3(picture pic);
+triple tickMin3(picture pic);
+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>);
+real ztrans(real[][] t, real z);
+void Spline(flatguide3)(... void(flatguide3)[]);
+void graph(flatguide3)(triple F(real), real, real, int)(void join(flatguide3)(... void(flatguide3)[]));
+void(flatguide3)[] graph(triple F(real), real, real, int)(void join(flatguide3)(... void(flatguide3)[]), bool3 cond(real));
+void graph(flatguide3)(picture pic=<default>, real x(real), real y(real), real z(real), real a, real b, int n=<default>, void join(flatguide3)(... void(flatguide3)[])=<default>);
+void(flatguide3)[] graph(picture pic=<default>, real x(real), real y(real), real z(real), real a, real b, int n=<default>, bool3 cond(real), void join(flatguide3)(... void(flatguide3)[])=<default>);
+void graph(flatguide3)(picture pic=<default>, triple v(real), real a, real b, int n=<default>, void join(flatguide3)(... void(flatguide3)[])=<default>);
+void(flatguide3)[] graph(picture pic=<default>, triple v(real), real a, real b, int n=<default>, bool3 cond(real), void join(flatguide3)(... void(flatguide3)[])=<default>);
+void graph(flatguide3)(picture pic=<default>, triple[] v, void join(flatguide3)(... void(flatguide3)[])=<default>);
+void(flatguide3)[] graph(picture pic=<default>, triple[] v, bool3[] cond, void join(flatguide3)(... void(flatguide3)[])=<default>);
+void graph(flatguide3)(picture pic=<default>, real[] x, real[] y, real[] z, void join(flatguide3)(... void(flatguide3)[])=<default>);
+void(flatguide3)[] graph(picture pic=<default>, real[] x, real[] y, real[] z, bool3[] cond, void join(flatguide3)(... void(flatguide3)[])=<default>);
+void graph(flatguide3)(triple F(path, real), path p, int n=<default>, void join(flatguide3)(... void(flatguide3)[])=<default>);
+void graph(flatguide3)(triple F(pair), path p, int n=<default>, void join(flatguide3)(... void(flatguide3)[])=<default>);
+void graph(flatguide3)(picture pic=<default>, real f(pair), path p, int n=<default>, void join(flatguide3)(... void(flatguide3)[])=<default>);
+void graph(flatguide3)(real f(pair), path p, int n=<default>, real T(pair), void join(flatguide3)(... void(flatguide3)[])=<default>);
+void label(picture pic, Label L, triple v, real x, align align, string format, pen p);
+void ytick(picture pic=<default>, triple v, triple dir=<default>, real size=<default>, pen p=<default>);
+void ytick(picture pic=<default>, Label L, triple v, triple dir=<default>, string format=<default>, real size=<default>, pen p=<default>);
+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>);
+void draw(picture pic=<default>, Label[] L=<default>, void(flatguide3)[][] g, pen p=<default>, light light=<default>, string name=<default>, render render=<default>, interaction interaction=<default>);
+triple ticklabelshift(triple align, pen p=<default>);
+void ztick(picture pic=<default>, triple v, triple dir=<default>, real size=<default>, pen p=<default>);
+void ztick(picture pic=<default>, Label L, triple v, triple dir=<default>, string format=<default>, real size=<default>, pen p=<default>);
+triple Scale(picture pic=<default>, triple v);
+triple polar(real r, real theta, real phi);
+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>);
+void axes3(picture pic=<default>, Label xlabel=<default>, Label ylabel=<default>, Label zlabel=<default>, bool extend=<default>, triple min=<default>, triple max=<default>, pen p=<default>, bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, marginT3 margin(path3, pen)=<default>);
+void labelx3(picture pic=<default>, Label L=<default>, real x, align align=<default>, string format=<default>, pen p=<default>);
+void OutTicks(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>);
+void OutTicks(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>, real[] Ticks, real[] ticks=<default>, real Size=<default>, real size=<default>, bool extend=<default>, pen pTick=<default>, pen ptick=<default>);
+void OutTicks(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 labely3(picture pic=<default>, Label L=<default>, real y, align align=<default>, string format=<default>, pen p=<default>);
+locateT operator init();
+void zaxis3At(picture pic=<default>, Label L=<default>, void axis(picture, axisT), 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>, bool opposite=<default>, bool opposite2=<default>, bool primary=<default>);
+bool vperiodic(triple[][] a);
+path3[] segment(triple[] v, bool[] cond, void join(flatguide3)(... void(flatguide3)[])=<default>);
+void XZZero(picture, axisT)(triple align=<default>, bool extend=<default>);
+void XZZero(picture, axisT);
+void labeltick(picture pic, real[][] T, path3 g, ticklocate locate, real val, int sign, real Size, string ticklabel(real), Label F, real norm=<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), 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>);
+path3 Arc(triple c, triple v1, triple v2, triple normal=<default>, bool direction=<default>, int n=<default>);
+path3 Arc(triple c, real r, real theta1, real phi1, real theta2, real phi2, triple normal=<default>, bool direction, int n=<default>);
+path3 Arc(triple c, real r, real theta1, real phi1, real theta2, real phi2, triple normal=<default>, int n=<default>);
+void labely(picture pic=<default>, Label L=<default>, triple v, align align=<default>, string format=<default>, pen p=<default>);
+void labelx(picture pic=<default>, Label L=<default>, triple v, align align=<default>, string format=<default>, pen p=<default>);
+void xtick(picture pic=<default>, triple v, triple dir=<default>, real size=<default>, pen p=<default>);
+void xtick(picture pic=<default>, Label L, triple v, triple dir=<default>, string format=<default>, real size=<default>, pen p=<default>);
+void axis(picture pic=<default>, Label L=<default>, path3 g, path3 g2=<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>), ticklocate locate, bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, marginT3 margin(path3, pen)=<default>, int[] divisor=<default>, bool above=<default>, bool opposite=<default>);
+void labelaxis(picture pic, real[][] T, Label L, path3 g, ticklocate locate=<default>, int sign=<default>, bool ticklabels=<default>);
+void tick(picture pic=<default>, triple v, triple dir, real size=<default>, pen p=<default>);
+void tick(picture pic=<default>, Label L, real value, triple v, triple dir, string format=<default>, real size=<default>, pen p=<default>);
+void Straight(flatguide3)(... void(flatguide3)[]);
+real xtrans(real[][] t, real x);
+real ytrans(real[][] t, real y);
+ticklocate ticklocate(real a, real b, autoscaleT S=<default>, real tickmin=<default>, real tickmax=<default>, real time(real)=<default>, triple dir(real));
+real maxlength(triple f(pair z), pair a, pair b, int nu, int nv);
+void drawtick(picture pic, real[][] T, path3 g, path3 g2, ticklocate locate, real val, real Size, int sign, pen p, bool extend);
+void yaxis3At(picture pic=<default>, Label L=<default>, void axis(picture, axisT), 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>, bool opposite=<default>, bool opposite2=<default>, bool primary=<default>);
+bool uperiodic(triple[][] a);
+path3 Circle(triple c, real r, triple normal=<default>, int n=<default>);
+void polargraph(flatguide3)(real r(real, real), real theta(real), real phi(real), int n=<default>, void join(flatguide3)(... void(flatguide3)[])=<default>);
+void limits(picture pic=<default>, triple min, triple max);
 real axiscoverage;
 real ylabelwidth;
 real Ticksize;
@@ -3095,10 +3095,10 @@
 int nmesh;
 int ngraph;
 bool Crop;
-real epsilon;
-bool NoCrop;
 int nCircle;
 real ticksize;
+bool NoCrop;
+real epsilon;
 real axislabelfactor;
 real[] monotonic(real[] x, real[] y);
 real[] clamped(real[], real[])(real slopea, real slopeb);
@@ -3113,7 +3113,6 @@
 void checkincreasing(real[] x);
 real[] Spline(real[] x, real[] y);
 real[](real[], real[])[] Spline;
-position middle;
 void grid3(picture pic=<default>, grid3(picture pic)[][] gridroutine=<default>, int N=<default>, int n=<default>, real Step=<default>, real step=<default>, bool begin=<default>, bool end=<default>, pen pGrid=<default>, pen pgrid=<default>, bool above=<default>);
 void grid3(picture pic=<default>, grid3(picture pic)[][] gridroutine, int N=<default>, int n=<default>, real Step=<default>, real step=<default>, bool begin=<default>, bool end=<default>, pen[] pGrid, pen[] pgrid, bool above=<default>);
 grid3(picture pic)[] ZX_ZYgrid(position posa=<default>, position posb=<default>);
@@ -3132,15 +3131,12 @@
 grid3 ZYgrid(picture pic);
 grid3 YZgrid(picture pic)(position pos=<default>);
 grid3 YZgrid(picture pic);
-grid3 ZXgrid(picture pic)(position pos=<default>);
-grid3 ZXgrid(picture pic);
 grid3 XZgrid(picture pic)(position pos=<default>);
 grid3 XZgrid(picture pic);
 grid3 YXgrid(picture pic)(position pos=<default>);
 grid3 YXgrid(picture pic);
-void zaxis3(picture pic=<default>, Label L=<default>, void axis(picture, axisT)=<default>, pen p=<default>, ticksgridT ticks(), bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, bool above=<default>);
-void yaxis3(picture pic=<default>, Label L=<default>, void axis(picture, axisT)=<default>, pen p=<default>, ticksgridT ticks(), bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, bool above=<default>);
-void xaxis3(picture pic=<default>, Label L=<default>, void axis(picture, axisT)=<default>, pen p=<default>, ticksgridT ticks(), bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, bool above=<default>);
+grid3(picture pic)[] ZYZgrid(position pos=<default>);
+grid3(picture pic)[] ZYZgrid;
 triple YZ(picture pic);
 grid3(picture pic)[] operator cast(grid3 gridroutine(picture pic));
 grid3(picture pic)[][] operator cast(grid3(picture pic)[] gridroutine);
@@ -3148,13 +3144,18 @@
 grid3(picture pic)[] YZYgrid(position pos=<default>);
 grid3(picture pic)[] YZYgrid;
 triple Y(picture pic);
+void zaxis3(picture pic=<default>, Label L=<default>, void axis(picture, axisT)=<default>, pen p=<default>, ticksgridT ticks(), bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, bool above=<default>);
 grid3(picture pic)[][] XYZgrid(position pos=<default>);
 grid3(picture pic)[][] XYZgrid;
 position top;
 grid3 XYgrid(picture pic)(position pos=<default>);
 grid3 XYgrid(picture pic);
+void xaxis3(picture pic=<default>, Label L=<default>, void axis(picture, axisT)=<default>, pen p=<default>, ticksgridT ticks(), bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, bool above=<default>);
 ticksgridT InTicks()(Label F=<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>, real Size=<default>, real size=<default>, pen pTick=<default>, pen ptick=<default>, grid3(picture pic)[][] gridroutine, pen pGrid=<default>, pen pgrid=<default>);
 triple X(picture pic);
+position middle;
+grid3 ZXgrid(picture pic)(position pos=<default>);
+grid3 ZXgrid(picture pic);
 triple XY(picture pic);
 grid3(picture pic)[] XY_XZgrid(position posa=<default>, position posb=<default>);
 grid3(picture pic)[] XY_XZgrid;
@@ -3162,27 +3163,26 @@
 grid3 operator init();
 ticksgridT operator init();
 ticksgridT InOutTicks()(Label F=<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>, real Size=<default>, real size=<default>, pen pTick=<default>, pen ptick=<default>, grid3(picture pic)[][] gridroutine, pen pGrid=<default>, pen pgrid=<default>);
+void yaxis3(picture pic=<default>, Label L=<default>, void axis(picture, axisT)=<default>, pen p=<default>, ticksgridT ticks(), bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, bool above=<default>);
 triple ZX(picture pic);
 triple Z(picture pic);
 position bottom;
-grid3(picture pic)[] ZYZgrid(position pos=<default>);
-grid3(picture pic)[] ZYZgrid;
 real pwhermite(real)(real[] x, real[] y, real[] dy);
 horner hdiffdiv(real[] x, real[] y, real[] dy);
 horner diffdiv(real[] x, real[] y);
 real fhorner(real)(horner sh);
+horner operator init();
 real fspline(real)(real[] x, real[] y, real[] splinetype(real[], real[])=<default>);
-horner operator init();
+void labelpath(frame f, Label L, path g, string justify=<default>, pen p=<default>);
+void labelpath(picture pic=<default>, Label L, path g, string justify=<default>, pen p=<default>);
+string Centered;
+string RightJustified;
+string LeftJustified;
 surface labelpath(string s, path3 p, real angle=<default>, triple optional=<default>);
 triple[] nextframe(path3 p, real reltimestart, triple[] start, real reltimeend, int subdiv=<default>);
 triple nextnormal(triple p, triple q);
 real eps;
 triple[] firstframe(path3 p, triple optional=<default>);
-void labelpath(frame f, Label L, path g, string justify=<default>, pen p=<default>);
-void labelpath(picture pic=<default>, Label L, path g, string justify=<default>, pen p=<default>);
-string Centered;
-string RightJustified;
-string LeftJustified;
 FitControl defaultControl;
 void lm_lmdif(int m, int n, real[] x, real[] fvec, real ftol, real xtol, real gtol, int maxfev, real epsfcn, real[] diag, int mode, real factor, lm_int_type info, lm_int_type nfev, real[] fjac, int[] ipvt, real[] qtf, real[] wa1, real[] wa2, real[] wa3, real[] wa4, void evaluate(real[] par, int m_dat, real[] fvec, lm_data_type data, lm_int_type info), void printout(int n_par, real[] par, int m_dat, real[] fvec, lm_data_type data, int iflag, int iter, int nfev), lm_data_type data);
 void lm_lmpar(int n, real[] r, int ldr, int[] ipvt, real[] diag, real[] qtb, real delta, lm_real_type par, real[] x, real[] sdiag, real[] wa1, real[] wa2);
@@ -3195,11 +3195,12 @@
 real LM_DWARF;
 real LM_MACHEP;
 void lm_qrfac(int m, int n, real[] a, bool pivot, int[] ipvt, real[] rdiag, real[] acnorm, real[] wa);
-real LM_USERTOL;
 real LM_SQRT_GIANT;
 real SQR(real x);
 string[] lm_shortmsg;
-string[] lm_infmsg;
+FitResult fit(real[] xdata, real[] ydata, real[] errors, real function(real[], real), real[] parameters, FitControl control=<default>);
+FitResult fit(real[] xdata, real[] ydata, real function(real[], real), real[] parameters, FitControl control=<default>);
+real LM_USERTOL;
 lm_data_type operator init();
 lm_int_type operator init();
 lm_real_type operator init();
@@ -3206,9 +3207,8 @@
 lm_control_type operator init();
 FitControl operator init();
 FitResult operator init();
+string[] lm_infmsg;
 real LM_SQRT_DWARF;
-FitResult fit(real[] xdata, real[] ydata, real[] errors, real function(real[], real), real[] parameters, FitControl control=<default>);
-FitResult fit(real[] xdata, real[] ydata, real function(real[], real), real[] parameters, FitControl control=<default>);
 void lm_minimize(int m_dat, int n_par, real[] par, void evaluate(real[] par, int m_dat, real[] fvec, lm_data_type data, lm_int_type info), void printout(int n_par, real[] par, int m_dat, real[] fvec, lm_data_type data, int iflag, int iter, int nfev), lm_data_type data, lm_control_type control);
 void lm_print_default(int n_par, real[] par, int m_dat, real[] fvec, lm_data_type data, int iflag, int iter, int nfev);
 real lm_enorm(int n, real[] x, int offset=<default>);
@@ -3236,14 +3236,14 @@
 frame tildeframe;
 real tildemarksizefactor;
 void markinterval(picture pic=<default>, frame f, path g)(int n=<default>, frame f, bool rotated=<default>);
+real tildemarksize(pen p=<default>);
 frame duplicate(path g, int n=<default>, pair space=<default>, pen p=<default>);
 marker operator *(transform T, marker m);
 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>);
+frame crossframe(int n=<default>, real size=<default>, pair space=<default>, real angle=<default>, pair offset=<default>, pen p=<default>);
 marker StickIntervalMarker(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>);
-frame crossframe(int n=<default>, real size=<default>, pair space=<default>, real angle=<default>, pair offset=<default>, pen p=<default>);
-real tildemarksize(pen p=<default>);
+real barmarksizefactor;
 real barmarksize(pen p=<default>);
-real barmarksizefactor;
 real findroot(real f(real), real a, real b, real tolerance=<default>, real fa=<default>, real fb=<default>);
 real value(path g, real x, int n=<default>);
 real value(path g, explicit pair z, int n=<default>);
@@ -3260,6 +3260,7 @@
 bool lexorder(triple a, triple b);
 int unique(real[] a, real x);
 int unique(string[] a, string x);
+int[][] segment(bool[] b);
 int[][] segmentlimits(bool[] b);
 bool increasing(real[] a, bool strict=<default>);
 real[] partialsum(real[] a);
@@ -3271,24 +3272,23 @@
 real acsc(real x);
 real sec(real x);
 real csc(real x);
-int[][] segment(bool[] b);
 pair exp(explicit pair z);
 int quadrant(real degrees);
 pair[] quarticroots(real a, real b, real c, real d, real e);
+picture grid(int Nx, int Ny, pen p=<default>);
+real[] leastsquares(real[][] A, real[] b, bool warn=<default>);
+pair log(explicit pair z);
 pair[][] fft(pair[][] a, int sign=<default>);
 real slope(path g, real x, int n=<default>);
 real slope(path g, explicit pair z, int n=<default>);
-real[] leastsquares(real[][] A, real[] b, bool warn=<default>);
-pair log(explicit pair z);
 triple intersectionpoint(triple n0, triple P0, triple n1, triple P1);
-picture grid(int Nx, int Ny, pen p=<default>);
 pair unityroot(int n, int k=<default>);
-real frac(real x);
 bool rectangular(real[][] m);
 bool rectangular(pair[][] m);
 bool rectangular(triple[][] m);
+real frac(real x);
+rootfinder_settings operator init();
 bool polygon(path p);
-rootfinder_settings operator init();
 real cot(real x);
 real intersect(pair p, pair q, pair z);
 real intersect(triple P, triple Q, triple n, triple Z);
@@ -3295,8 +3295,8 @@
 path cuttings;
 path cutafter(path p, path q);
 path cutbefore(path p, path q);
+void draw(picture pic=<default>, obj o, light light=<default>);
 obj operator *(real[][] T, obj o);
-void draw(picture pic=<default>, obj o, light light=<default>);
 obj operator init();
 real[] solveBVP(real[] f(real, real[]), real a, real b=<default>, real h=<default>, int n=<default>, bool dynamic=<default>, real tolmin=<default>, real tolmax=<default>, real dtmin=<default>, real dtmax=<default>, RKTableau tableau, bool verbose=<default>, real[] initial(real[]), real[] discrepancy(real[]), real[] guess, int iterations=<default>);
 solution integrate(real y, real c=<default>, real f(real t, real y), real a, real b=<default>, real h=<default>, int n=<default>, bool dynamic=<default>, real tolmin=<default>, real tolmax=<default>, real dtmin=<default>, real dtmax=<default>, RKTableau tableau, bool verbose=<default>);
@@ -3314,19 +3314,19 @@
 real stepfactor;
 real[][] finiteDifferenceJacobian(real[] f(real[]), real[] t, real[] h=<default>);
 RKTableau E_RK2;
+real error(real error, real initial, real lowOrder, real norm, real diff);
 RKTableau RK5F;
-real error(real error, real initial, real lowOrder, real norm, real diff);
+void report(real old, real h, real t);
 RKTableau PC;
 RKTableau RK2;
-void report(real old, real h, real t);
 real phi2(real x);
 real[] newton(int iterations=<default>, real[] f(real[]), real[][] jacobian(real[]), real[] t);
-RKTableau RK3BS;
 coefficients operator init();
 RKTableau operator init();
 solution operator init();
 Solution operator init();
 RKTableau RK5;
+RKTableau RK3BS;
 real phi3(real x);
 void write(solution S);
 void write(Solution S);
@@ -3348,6 +3348,7 @@
 real[] sequencereal;
 pen[] BWRainbow2(int NColors=<default>);
 pen[] Wheel(int NColors=<default>);
+pen[] Rainbow(int NColors=<default>);
 pen[] Grayscale(int NColors=<default>);
 bounds Full(picture pic, real min, real max);
 void image(frame f, real[][] data, pair initial, pair final, pen[] palette, bool transpose=<default>, transform t=<default>, bool copy=<default>, bool antialias=<default>);
@@ -3359,7 +3360,6 @@
 bounds image(picture pic=<default>, pair[] z, real[] f, bounds range(picture pic, real min, real max)=<default>, pen[] palette);
 bounds image(picture pic=<default>, real[] x, real[] y, real[] f, bounds range(picture pic, real min, real max)=<default>, pen[] palette);
 pen[] quantize(pen[] Palette, int n);
-pen[] Rainbow(int NColors=<default>);
 picture hatch(real H=<default>, pair dir=<default>, pen p=<default>);
 picture checker(real Hx=<default>, real Hy=<default>, pen p=<default>);
 picture tile(real Hx=<default>, real Hy=<default>, pen p=<default>, filltype filltype=<default>);
@@ -3428,31 +3428,33 @@
 void setpens(pen red=<default>, pen blue=<default>, pen steppen=<default>);
 bool firststep;
 void remark(bool center=<default>, string s, pair align=<default>, pen p=<default>, real indent=<default>, bool minipage=<default>, real skip=<default>, filltype filltype=<default>, bool step=<default>);
-void asyfigure(string s, string options=<default>, string caption=<default>, pair align=<default>, pen p=<default>, pen figuremattpen=<default>, filltype filltype=<default>, bool newslide=<default>);
 void usersetting();
 pen institutionpen;
 void title(string s, pair position=<default>, pair align=<default>, pen p=<default>, bool newslide=<default>);
 void asyfilecode(bool center=<default>, string s, string options=<default>, string caption=<default>, pair align=<default>, pen p=<default>, pen figuremattpen=<default>, real indent=<default>, real skip=<default>, filltype filltype=<default>, bool newslide=<default>);
 void center(string s, pen p=<default>);
-real minipagemargin;
+pair currentposition;
+void currentexitfunction();
 void skip(real n=<default>);
 void exitfunction();
 void step();
 pair pagenumberposition;
-void currentexitfunction();
+int[] firstnode;
+real minipagemargin;
+bool reverse;
 void asyinclude(string s, real xsize=<default>, real ysize=<default>);
+void vbox(string s, pen p=<default>);
 string bullet;
-void vbox(string s, pen p=<default>);
-bool reverse;
-int[] firstnode;
 string oldbulletcolor;
 void figure(string[] s, string options=<default>, real margin=<default>, string[] captions=<default>, string caption=<default>, pair align=<default>, pen p=<default>, pen figuremattpen=<default>, bool final=<default>);
 void figure(string s, string options=<default>, string caption=<default>, pair align=<default>, pen p=<default>, pen figuremattpen=<default>, bool final=<default>);
+void asyfigure(string s, string options=<default>, string caption=<default>, pair align=<default>, pen p=<default>, pen figuremattpen=<default>, filltype filltype=<default>, bool newslide=<default>);
 void display(frame[] f, real margin=<default>, pair align=<default>, pen p=<default>, pen figuremattpen=<default>, bool final=<default>);
 void display(frame f, real margin=<default>, pair align=<default>, pen p=<default>, pen figuremattpen=<default>, bool final=<default>);
 void display(string[] s, real margin=<default>, string[] captions=<default>, string caption=<default>, pair align=<default>, pen p=<default>, pen figuremattpen=<default>, bool final=<default>);
 void display(string s, string caption=<default>, pair align=<default>, pen p=<default>, pen figuremattpen=<default>, bool final=<default>);
 void equation(string s, pen p=<default>);
+void asycode(bool center=<default>, string s, string options=<default>, string caption=<default>, string preamble=<default>, pair align=<default>, pen p=<default>, pen figuremattpen=<default>, real indent=<default>, real skip=<default>, filltype filltype=<default>, bool newslide=<default>);
 picture background;
 void background();
 void multifigure(string[] slist, string options=<default>, string caption=<default>, pair align=<default>, pen p=<default>, pen figuremattpen=<default>, bool step=<default>);
@@ -3465,9 +3467,7 @@
 string cropcode(string s);
 string newbulletcolor;
 bool stepping;
-pair currentposition;
 string asywrite(string s, string preamble=<default>);
-void asycode(bool center=<default>, string s, string options=<default>, string caption=<default>, string preamble=<default>, pair align=<default>, pen p=<default>, pen figuremattpen=<default>, real indent=<default>, real skip=<default>, filltype filltype=<default>, bool newslide=<default>);
 void normalvideo();
 path curve(pair c, real f(real, real), pair a, pair b);
 path curve(pair c, real f(real), pair a, pair b);
@@ -3507,6 +3507,7 @@
 path3 pathbetween(path3 edgecycle, int vertex1, int vertex2);
 bool check_fpt_zero(triple testpoint, real f(triple), triple grad(triple));
 triple projecttospan(triple toproject, triple v1, triple v2, real mincoeff=<default>);
+int ZLOW;
 bool operator ==(edge a, edge b);
 pathwithnormals_settings operator init();
 intset operator init();
@@ -3522,7 +3523,6 @@
 string operator cast(positionedvector vv);
 triple operator cast(evaluatedpoint p);
 real B23(real t);
-int ZLOW;
 real B03(real t);
 revolution sphere(triple c=<default>, real r, int n=<default>);
 real[] tangent(path p, path q, bool side);
@@ -3537,6 +3537,8 @@
 revolution operator init();
 surface surface(revolution r, int n=<default>, pen color(int i, real j)=<default>);
 pair Gaussrandpair();
+void histogram(picture pic=<default>, real[] bins, real[] count, real low=<default>, pen fillpen=<default>, pen drawpen=<default>, bool bars=<default>, Label legend=<default>, real markersize=<default>);
+void histogram(picture pic=<default>, real[] data, real a, real b, int n, bool normalize=<default>, real low=<default>, pen fillpen=<default>, pen drawpen=<default>, bool bars=<default>, Label legend=<default>, real markersize=<default>);
 path topbox(pair a, pair b);
 path halfbox(pair a, pair b);
 int[] frequency(real[] data, real[] bins);
@@ -3553,8 +3555,6 @@
 real stdev(real[] A);
 real variance(real[] A);
 real legendmarkersize;
-void histogram(picture pic=<default>, real[] bins, real[] count, real low=<default>, pen fillpen=<default>, pen drawpen=<default>, bool bars=<default>, Label legend=<default>, real markersize=<default>);
-void histogram(picture pic=<default>, real[] data, real a, real b, int n, bool normalize=<default>, real low=<default>, pen fillpen=<default>, pen drawpen=<default>, bool bars=<default>, Label legend=<default>, real markersize=<default>);
 real mean(real[] A);
 real skewness(real[] A);
 linefit leastsquares(real[] x, real[] y);
@@ -3569,8 +3569,8 @@
 real gapfactor;
 real hwratio;
 Component bp;
+Relation operator -(Relation r);
 Component phi;
-Relation operator -(Relation r);
 pair max(pair[] z);
 pair[] endpoints(guide[] a);
 Component operator init();
@@ -3577,9 +3577,9 @@
 Braid operator init();
 Relation operator init();
 Syzygy operator init();
+Component bm;
 Component wye;
 pair min(pair[] z);
-Component bm;
 pen Tan;
 pen OliveGreen;
 pen LimeGreen;
@@ -3608,45 +3608,45 @@
 pen Goldenrod;
 pen GreenYellow;
 pen RedViolet;
+pen Bittersweet;
 pen VioletRed;
 pen Violet;
 pen Sepia;
 pen Mahogany;
+pen RubineRed;
 pen WildStrawberry;
 pen Black;
 pen RawSienna;
 pen Thistle;
-pen Bittersweet;
 pen Blue;
 pen Maroon;
 pen Yellow;
+pen SeaGreen;
 pen Rhodamine;
 pen Fuchsia;
+pen YellowGreen;
+pen Green;
+pen ForestGreen;
+pen Cerulean;
 pen Cyan;
-pen Green;
-pen Orchid;
-pen SeaGreen;
 pen PineGreen;
 pen Dandelion;
-pen RoyalBlue;
-pen Melon;
 pen BlueViolet;
 pen RedOrange;
 pen CadetBlue;
-pen RubineRed;
-pen Cerulean;
-pen Brown;
+pen Orchid;
 pen Magenta;
 pen Emerald;
-pen YellowGreen;
 pen JungleGreen;
 pen SpringGreen;
 pen BurntOrange;
+pen Gray;
+pen Brown;
 pen MidnightBlue;
-pen ForestGreen;
 pen Orange;
-pen Gray;
 pen ProcessBlue;
+pen RoyalBlue;
+pen Melon;
 pen Peach;
 int lookup(tree t, int key);
 bool contains(tree t, int key);
@@ -3658,16 +3658,16 @@
 real magneticRadius;
 real trembleAngle;
 real trembleFrequency;
+real trembleFuzz();
 tremble operator init();
-real trembleFuzz();
 int coloredSegments;
 path3 roundedpath(path3 A, real r);
 surface tube(path3 g, coloredpath section, transform T(real)=<default>, real corner=<default>, real relstep=<default>);
+surface surface(rmf[] R, real[] t, coloredpath cp, transform T(real), bool cyclic);
 int coloredNodes;
-surface surface(rmf[] R, real[] t, coloredpath cp, transform T(real), bool cyclic);
 real degrees(rmf a, rmf b);
+real[] sample(path3 g, real r, real relstep=<default>);
 coloredpath operator init();
-real[] sample(path3 g, real r, real relstep=<default>);
 coloredpath operator cast(path p);
 coloredpath operator cast(guide p);
 string VERSION;
@@ -3782,10 +3782,10 @@
 pen DarkSalmon;
 pen SeaGreen;
 pen Peru;
+pen AliceBlue;
 pen Cyan;
 pen BlueViolet;
 pen CadetBlue;
-pen AliceBlue;
 pen Magenta;
 pen Aqua;
 pen GhostWhite;

Modified: trunk/Build/source/utils/asymptote/asymptote.nsi
===================================================================
--- trunk/Build/source/utils/asymptote/asymptote.nsi	2017-03-23 21:29:41 UTC (rev 43589)
+++ trunk/Build/source/utils/asymptote/asymptote.nsi	2017-03-23 22:37:58 UTC (rev 43590)
@@ -74,6 +74,8 @@
   SetOutPath "$INSTDIR"
   ${EnvVarUpdate} $0 "PATH" "A" "HKLM" "$INSTDIR"
   Delete "$INSTDIR\_imagingtk.pyd"
+  Delete "$INSTDIR\opengl32.dll"
+  Delete "$INSTDIR\glu32.dll"
   SetOverwrite try
   File /r build-${PRODUCT_VERSION}\*
 

Modified: trunk/Build/source/utils/asymptote/asymptote.spec
===================================================================
--- trunk/Build/source/utils/asymptote/asymptote.spec	2017-03-23 21:29:41 UTC (rev 43589)
+++ trunk/Build/source/utils/asymptote/asymptote.spec	2017-03-23 22:37:58 UTC (rev 43590)
@@ -1,7 +1,7 @@
 %{!?_texmf: %global _texmf %(eval "echo `kpsewhich -expand-var '$TEXMFLOCAL'`")}
 
 Name:           asymptote
-Version:        2.40
+Version:        2.41
 Release:        1%{?dist}
 Summary:        Descriptive vector graphics language
 

Modified: trunk/Build/source/utils/asymptote/base/geometry.asy
===================================================================
--- trunk/Build/source/utils/asymptote/base/geometry.asy	2017-03-23 21:29:41 UTC (rev 43589)
+++ trunk/Build/source/utils/asymptote/base/geometry.asy	2017-03-23 22:37:58 UTC (rev 43590)
@@ -1295,7 +1295,7 @@
 {/*<asyxml></code><documentation>Draw a perpendicular symbol at z aligned in the direction align
    relative to the path z--z + dir.
    dir(45 + n * 90), where n in N*, are common values for 'align'.</documentation></function></asyxml>*/
-  p = squarecap + p;
+  p = squarecap + miterjoin + p;
   if(size == 0) size = perpfactor * 3mm + sqrt(1 + linewidth(p)) - 1;
   frame apic;
   pair d1 = size * align * unit(dir) * dir(-45);
@@ -1354,8 +1354,6 @@
   pair dir = Ap - Op;
   real a1 = degrees(dir);
   pair align = rotate(-a1) * unit(dir(Op--Ap, Op--Bp));
-  if (margin == NoMargin)
-    margin = TrueMargin(linewidth(currentpen)/2, linewidth(currentpen)/2);
   perpendicularmark(pic = pic, z = O, align = align,
                     dir = dir, size = size, p = p,
                     margin = margin, filltype = filltype);

Modified: trunk/Build/source/utils/asymptote/bezierpatch.cc
===================================================================
--- trunk/Build/source/utils/asymptote/bezierpatch.cc	2017-03-23 21:29:41 UTC (rev 43589)
+++ trunk/Build/source/utils/asymptote/bezierpatch.cc	2017-03-23 22:37:58 UTC (rev 43590)
@@ -31,6 +31,7 @@
 extern const double Fuzz2;
 
 const double FillFactor=0.1;
+const double BezierFactor=0.4;
 
 // Partially work around OpenGL transparency bug by sorting transparent
 // triangles by their centroid depth.
@@ -58,7 +59,7 @@
 {
   empty=false;
   res2=res*res;
-  res3=res2;
+  Res2=BezierFactor*BezierFactor*res2;
   Epsilon=FillFactor*res;
   this->Min=Min;
   this->Max=Max;
@@ -219,7 +220,7 @@
       
     triple m0=0.5*(P0+P1);
     if(!flat0) {
-      if((flat0=Straightness(p0,p[4],p[8],p12) < res3))
+      if((flat0=Straightness(p0,p[4],p[8],p12) < res2))
         m0 -= Epsilon*unit(derivative(s1[0],s1[1],s1[2],s1[3]));
       else m0=s0[12];
     }
@@ -226,7 +227,7 @@
       
     triple m1=0.5*(P1+P2);
     if(!flat1) {
-      if((flat1=Straightness(p12,p[13],p[14],p15) < res3))
+      if((flat1=Straightness(p12,p[13],p[14],p15) < res2))
         m1 -= Epsilon*unit(derivative(s2[12],s2[8],s2[4],s2[0]));
       else m1=s1[15];
     }
@@ -233,7 +234,7 @@
       
     triple m2=0.5*(P2+P3);
     if(!flat2) {
-      if((flat2=Straightness(p15,p[11],p[7],p3) < res3))
+      if((flat2=Straightness(p15,p[11],p[7],p3) < res2))
         m2 -= Epsilon*unit(derivative(s3[15],s2[14],s2[13],s1[12]));
       else m2=s2[3];
     }
@@ -240,7 +241,7 @@
       
     triple m3=0.5*(P3+P0);
     if(!flat3) {
-      if((flat3=Straightness(p0,p[1],p[2],p3) < res3))
+      if((flat3=Straightness(p0,p[1],p[2],p3) < res2))
         m3 -= Epsilon*unit(derivative(s0[3],s0[7],s0[11],s0[15]));
       else m3=s3[0];
     }
@@ -356,7 +357,7 @@
                             bool flat0, bool flat1, bool flat2,
                             GLfloat *C0, GLfloat *C1, GLfloat *C2)
 {
-  if(Distance(p) < res2) { // Triangle is flat
+  if(Distance(p) < Res2) { // Triangle is flat
     triple P[]={P0,P1,P2};
     if(!offscreen(3,P)) {
       std::vector<GLuint> &p=*pindices;
@@ -490,7 +491,7 @@
     
     triple p0=0.5*(P1+P2);
     if(!flat0) {
-      if((flat0=Straightness(r300,p210,p120,u030) < res3))
+      if((flat0=Straightness(r300,p210,p120,u030) < res2))
         p0 -= Epsilon*unit(derivative(c[0],c[2],c[5],c[9])+
                            derivative(c[0],c[1],c[3],c[6]));
       else p0=r030;
@@ -498,7 +499,7 @@
 
     triple p1=0.5*(P2+P0);
     if(!flat1) {
-      if((flat1=Straightness(l003,p012,p021,u030) < res3))
+      if((flat1=Straightness(l003,p012,p021,u030) < res2))
         p1 -= Epsilon*unit(derivative(c[6],c[3],c[1],c[0])+
                            derivative(c[6],c[7],c[8],c[9]));
       else p1=l030;
@@ -506,7 +507,7 @@
 
     triple p2=0.5*(P0+P1);
     if(!flat2) {
-      if((flat2=Straightness(l003,p102,p201,r300) < res3))
+      if((flat2=Straightness(l003,p102,p201,r300) < res2))
         p2 -= Epsilon*unit(derivative(c[9],c[8],c[7],c[6])+
                            derivative(c[9],c[5],c[2],c[0]));
       else p2=l300;

Modified: trunk/Build/source/utils/asymptote/bezierpatch.h
===================================================================
--- trunk/Build/source/utils/asymptote/bezierpatch.h	2017-03-23 21:29:41 UTC (rev 43589)
+++ trunk/Build/source/utils/asymptote/bezierpatch.h	2017-03-23 22:37:58 UTC (rev 43590)
@@ -37,7 +37,8 @@
   triple u,v,w;
   double epsilon;
   double Epsilon;
-  double res2,res3;
+  double res2;
+  double Res2; // Reduced resolution for Bezier triangles flatness test.
   triple Min,Max;
   typedef GLuint vertexFunction(const triple &v, const triple& n);
   typedef GLuint VertexFunction(const triple &v, const triple& n, GLfloat *c);
@@ -149,15 +150,15 @@
     triple p12=p[12];
     triple p15=p[15];
     
+    // Check the flatness of the quad.
+    double d=Distance2(p15,p0,normal(p3,p[2],p[1],p0,p[4],p[8],p12));
+    
     // Determine how straight the edges are.
-    double d=Straightness(p0,p[1],p[2],p3);
+    d=max(d,Straightness(p0,p[1],p[2],p3));
     d=max(d,Straightness(p0,p[4],p[8],p12));
     d=max(d,Straightness(p3,p[7],p[11],p15));
     d=max(d,Straightness(p12,p[13],p[14],p15));
     
-    triple n0=normal(p3,p[2],p[1],p0,p[4],p[8],p12);
-    d=max(d,Distance2(p15,p0,n0));
-    
     // Determine how straight the interior control curves are.
     d=max(d,Straightness(p[4],p[5],p[6],p[7]));
     d=max(d,Straightness(p[8],p[9],p[10],p[11]));
@@ -237,13 +238,10 @@
     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]);
 
-    // Only the internal point is tested for deviance from the triangle
-    // formed by the vertices. We assume that the Jacobian is nonzero so
-    // that we only need to calculate the perpendicular distance of the
-    // internal point from this triangle.  
-    double d=Distance2(p[4],p0,normal(p9,p[5],p[2],p0,p[1],p[3],p6));
-
     // Determine how straight the edges are.
     d=max(d,Straightness(p0,p[1],p[3],p6));
     d=max(d,Straightness(p0,p[2],p[5],p9));

Modified: trunk/Build/source/utils/asymptote/config.sub
===================================================================
--- trunk/Build/source/utils/asymptote/config.sub	2017-03-23 21:29:41 UTC (rev 43589)
+++ trunk/Build/source/utils/asymptote/config.sub	2017-03-23 22:37:58 UTC (rev 43590)
@@ -1,18 +1,24 @@
 #! /bin/sh
 # Configuration validation subroutine script.
-#   Copyright 1992-2017 Free Software Foundation, Inc.
+#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
+#   2011, 2012 Free Software Foundation, Inc.
 
-timestamp='2017-03-21'
+timestamp='2012-04-18'
 
-# 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
-# the Free Software Foundation; either version 3 of the License, or
+# This file is (in principle) common to ALL GNU software.
+# The presence of a machine in this file suggests that SOME GNU software
+# can handle that machine.  It does not imply ALL GNU software can.
+#
+# 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
+# the Free Software Foundation; either version 2 of the License, or
 # (at your option) any later version.
 #
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
 # along with this program; if not, see <http://www.gnu.org/licenses/>.
@@ -20,12 +26,11 @@
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
 # configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that
-# program.  This Exception is an additional permission under section 7
-# of the GNU General Public License, version 3 ("GPLv3").
+# the same distribution terms that you use for the rest of that program.
 
 
-# Please send patches to <config-patches at gnu.org>.
+# Please send patches to <config-patches at gnu.org>.  Submit a context
+# diff and a properly formatted GNU ChangeLog entry.
 #
 # Configuration subroutine to validate and canonicalize a configuration type.
 # Supply the specified configuration type as an argument.
@@ -33,7 +38,7 @@
 # Otherwise, we print the canonical config type on stdout and succeed.
 
 # You can get the latest version of this script from:
-# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
 
 # This file is supposed to be the same for all GNU packages
 # and recognize all the CPU types, system types and aliases
@@ -53,7 +58,8 @@
 me=`echo "$0" | sed -e 's,.*/,,'`
 
 usage="\
-Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS
+Usage: $0 [OPTION] CPU-MFR-OPSYS
+       $0 [OPTION] ALIAS
 
 Canonicalize a configuration name.
 
@@ -67,7 +73,9 @@
 version="\
 GNU config.sub ($timestamp)
 
-Copyright 1992-2017 Free Software Foundation, Inc.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
+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."
@@ -115,9 +123,9 @@
 maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
 case $maybe_os in
   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* | \
+  linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
+  knetbsd*-gnu* | netbsd*-gnu* | \
+  kopensolaris*-gnu* | \
   storm-chaos* | os2-emx* | rtmk-nova*)
     os=-$maybe_os
     basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
@@ -148,7 +156,7 @@
 	-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
 	-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
 	-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
-	-apple | -axis | -knuth | -cray | -microblaze*)
+	-apple | -axis | -knuth | -cray | -microblaze)
 		os=
 		basic_machine=$1
 		;;
@@ -251,25 +259,21 @@
 	| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
 	| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
 	| am33_2.0 \
-	| arc | arceb \
-	| arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
-	| avr | avr32 \
-	| ba \
-	| be32 | be64 \
+	| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
+        | be32 | be64 \
 	| bfin \
-	| c4x | c8051 | clipper \
+	| c4x | clipper \
 	| d10v | d30v | dlx | dsp16xx \
-	| e2k | epiphany \
-	| fido | fr30 | frv | ft32 \
+	| epiphany \
+	| fido | fr30 | frv \
 	| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
 	| hexagon \
 	| i370 | i860 | i960 | ia64 \
 	| ip2k | iq2000 \
-	| k1om \
 	| le32 | le64 \
 	| lm32 \
 	| m32c | m32r | m32rle | m68000 | m68k | m88k \
-	| maxq | mb | microblaze | microblazeel | mcore | mep | metag \
+	| maxq | mb | microblaze | mcore | mep | metag \
 	| mips | mipsbe | mipseb | mipsel | mipsle \
 	| mips16 \
 	| mips64 | mips64el \
@@ -283,13 +287,10 @@
 	| mips64vr5900 | mips64vr5900el \
 	| mipsisa32 | mipsisa32el \
 	| mipsisa32r2 | mipsisa32r2el \
-	| mipsisa32r6 | mipsisa32r6el \
 	| mipsisa64 | mipsisa64el \
 	| mipsisa64r2 | mipsisa64r2el \
-	| mipsisa64r6 | mipsisa64r6el \
 	| mipsisa64sb1 | mipsisa64sb1el \
 	| mipsisa64sr71k | mipsisa64sr71kel \
-	| mipsr5900 | mipsr5900el \
 	| mipstx39 | mipstx39el \
 	| mn10200 | mn10300 \
 	| moxie \
@@ -296,17 +297,16 @@
 	| mt \
 	| msp430 \
 	| nds32 | nds32le | nds32be \
-	| nios | nios2 | nios2eb | nios2el \
+	| nios | nios2 \
 	| ns16k | ns32k \
-	| open8 | or1k | or1knd | or32 \
+	| open8 \
+	| or32 \
 	| pdp10 | pdp11 | pj | pjl \
 	| powerpc | powerpc64 | powerpc64le | powerpcle \
-	| pru \
 	| pyramid \
-	| riscv32 | riscv64 \
 	| rl78 | rx \
 	| score \
-	| sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
+	| sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
 	| sh64 | sh64le \
 	| sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
 	| sparcv8 | sparcv9 | sparcv9b | sparcv9v \
@@ -314,8 +314,6 @@
 	| tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
 	| ubicom32 \
 	| v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
-	| visium \
-	| wasm32 \
 	| we32k \
 	| x86 | xc16x | xstormy16 | xtensa \
 	| z8k | z80)
@@ -330,10 +328,7 @@
 	c6x)
 		basic_machine=tic6x-unknown
 		;;
-	leon|leon[3-9])
-		basic_machine=sparc-$basic_machine
-		;;
-	m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip)
+	m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip)
 		basic_machine=$basic_machine-unknown
 		os=-none
 		;;
@@ -375,16 +370,15 @@
 	| aarch64-* | aarch64_be-* \
 	| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
 	| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
-	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \
+	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
 	| arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
 	| avr-* | avr32-* \
-	| ba-* \
 	| be32-* | be64-* \
 	| bfin-* | bs2000-* \
 	| c[123]* | c30-* | [cjt]90-* | c4x-* \
-	| c8051-* | clipper-* | craynv-* | cydra-* \
+	| clipper-* | craynv-* | cydra-* \
 	| d10v-* | d30v-* | dlx-* \
-	| e2k-* | elxsi-* \
+	| elxsi-* \
 	| f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
 	| h8300-* | h8500-* \
 	| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
@@ -391,13 +385,11 @@
 	| hexagon-* \
 	| i*86-* | i860-* | i960-* | ia64-* \
 	| ip2k-* | iq2000-* \
-	| k1om-* \
 	| le32-* | le64-* \
 	| lm32-* \
 	| m32c-* | m32r-* | m32rle-* \
 	| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
-	| m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
-	| microblaze-* | microblazeel-* \
+	| m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \
 	| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
 	| mips16-* \
 	| mips64-* | mips64el-* \
@@ -411,34 +403,28 @@
 	| mips64vr5900-* | mips64vr5900el-* \
 	| mipsisa32-* | mipsisa32el-* \
 	| mipsisa32r2-* | mipsisa32r2el-* \
-	| mipsisa32r6-* | mipsisa32r6el-* \
 	| mipsisa64-* | mipsisa64el-* \
 	| mipsisa64r2-* | mipsisa64r2el-* \
-	| mipsisa64r6-* | mipsisa64r6el-* \
 	| mipsisa64sb1-* | mipsisa64sb1el-* \
 	| mipsisa64sr71k-* | mipsisa64sr71kel-* \
-	| mipsr5900-* | mipsr5900el-* \
 	| mipstx39-* | mipstx39el-* \
 	| mmix-* \
 	| mt-* \
 	| msp430-* \
 	| nds32-* | nds32le-* | nds32be-* \
-	| nios-* | nios2-* | nios2eb-* | nios2el-* \
+	| nios-* | nios2-* \
 	| none-* | np1-* | ns16k-* | ns32k-* \
 	| open8-* \
-	| or1k*-* \
 	| orion-* \
 	| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
 	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
-	| pru-* \
 	| pyramid-* \
-	| riscv32-* | riscv64-* \
 	| rl78-* | romp-* | rs6000-* | rx-* \
 	| sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
 	| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
 	| sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
 	| sparclite-* \
-	| sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \
+	| sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \
 	| tahoe-* \
 	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
 	| tile*-* \
@@ -446,8 +432,6 @@
 	| ubicom32-* \
 	| v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
 	| vax-* \
-	| visium-* \
-	| wasm32-* \
 	| we32k-* \
 	| x86-* | x86_64-* | xc16x-* | xps100-* \
 	| xstormy16-* | xtensa*-* \
@@ -524,9 +508,6 @@
 		basic_machine=i386-pc
 		os=-aros
 		;;
-	asmjs)
-		basic_machine=asmjs-unknown
-		;;
 	aux)
 		basic_machine=m68k-apple
 		os=-aux
@@ -647,14 +628,6 @@
 		basic_machine=m68k-bull
 		os=-sysv3
 		;;
-	e500v[12])
-		basic_machine=powerpc-unknown
-		os=$os"spe"
-		;;
-	e500v[12]-*)
-		basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
-		os=$os"spe"
-		;;
 	ebmon29k)
 		basic_machine=a29k-amd
 		os=-ebmon
@@ -796,9 +769,6 @@
 		basic_machine=m68k-isi
 		os=-sysv
 		;;
-	leon-*|leon[3-9]-*)
-		basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'`
-		;;
 	m68knommu)
 		basic_machine=m68k-unknown
 		os=-linux
@@ -818,15 +788,11 @@
 		basic_machine=ns32k-utek
 		os=-sysv
 		;;
-	microblaze*)
+	microblaze)
 		basic_machine=microblaze-xilinx
 		;;
-	mingw64)
-		basic_machine=x86_64-pc
-		os=-mingw64
-		;;
 	mingw32)
-		basic_machine=i686-pc
+		basic_machine=i386-pc
 		os=-mingw32
 		;;
 	mingw32ce)
@@ -854,10 +820,6 @@
 		basic_machine=powerpc-unknown
 		os=-morphos
 		;;
-	moxiebox)
-		basic_machine=moxie-unknown
-		os=-moxiebox
-		;;
 	msdos)
 		basic_machine=i386-pc
 		os=-msdos
@@ -866,7 +828,7 @@
 		basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
 		;;
 	msys)
-		basic_machine=i686-pc
+		basic_machine=i386-pc
 		os=-msys
 		;;
 	mvs)
@@ -950,9 +912,6 @@
 	nsr-tandem)
 		basic_machine=nsr-tandem
 		;;
-	nsx-tandem)
-		basic_machine=nsx-tandem
-		;;
 	op50n-* | op60c-*)
 		basic_machine=hppa1.1-oki
 		os=-proelf
@@ -1037,7 +996,7 @@
 	ppc-* | ppcbe-*)
 		basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
 		;;
-	ppcle | powerpclittle)
+	ppcle | powerpclittle | ppc-le | powerpc-little)
 		basic_machine=powerpcle-unknown
 		;;
 	ppcle-* | powerpclittle-*)
@@ -1047,7 +1006,7 @@
 		;;
 	ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
 		;;
-	ppc64le | powerpc64little)
+	ppc64le | powerpc64little | ppc64-le | powerpc64-little)
 		basic_machine=powerpc64le-unknown
 		;;
 	ppc64le-* | powerpc64little-*)
@@ -1060,11 +1019,7 @@
 		basic_machine=i586-unknown
 		os=-pw32
 		;;
-	rdos | rdos64)
-		basic_machine=x86_64-pc
-		os=-rdos
-		;;
-	rdos32)
+	rdos)
 		basic_machine=i386-pc
 		os=-rdos
 		;;
@@ -1248,9 +1203,6 @@
 		basic_machine=a29k-wrs
 		os=-vxworks
 		;;
-	wasm32)
-		basic_machine=wasm32-unknown
-		;;
 	w65*)
 		basic_machine=w65-wdc
 		os=-none
@@ -1394,22 +1346,22 @@
 	-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
 	      | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
 	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
-	      | -sym* | -kopensolaris* | -plan9* \
+	      | -sym* | -kopensolaris* \
 	      | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
-	      | -aos* | -aros* | -cloudabi* | -sortix* \
+	      | -aos* | -aros* \
 	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
 	      | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
 	      | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
-	      | -bitrig* | -openbsd* | -solidbsd* | -libertybsd* \
+	      | -openbsd* | -solidbsd* \
 	      | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
 	      | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
 	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
 	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
-	      | -chorusos* | -chorusrdb* | -cegcc* | -glidix* \
+	      | -chorusos* | -chorusrdb* | -cegcc* \
 	      | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
-	      | -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
-	      | -linux-newlib* | -linux-musl* | -linux-uclibc* \
-	      | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \
+	      | -mingw32* | -linux-gnu* | -linux-android* \
+	      | -linux-newlib* | -linux-uclibc* \
+	      | -uxpv* | -beos* | -mpeix* | -udk* \
 	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
 	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
 	      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
@@ -1416,8 +1368,7 @@
 	      | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
 	      | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
 	      | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
-	      | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \
-	      | -onefs* | -tirtos* | -phoenix* | -fuchsia* | -redox*)
+	      | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*)
 	# Remember, each alternative MUST END IN *, to match a version number.
 		;;
 	-qnx*)
@@ -1541,6 +1492,9 @@
 	-aros*)
 		os=-aros
 		;;
+	-kaos*)
+		os=-kaos
+		;;
 	-zvmoe)
 		os=-zvmoe
 		;;
@@ -1549,8 +1503,6 @@
 		;;
 	-nacl*)
 		;;
-	-ios)
-		;;
 	-none)
 		;;
 	*)
@@ -1591,12 +1543,6 @@
 	c4x-* | tic4x-*)
 		os=-coff
 		;;
-	c8051-*)
-		os=-elf
-		;;
-	hexagon-*)
-		os=-elf
-		;;
 	tic54x-*)
 		os=-coff
 		;;
@@ -1646,9 +1592,6 @@
 	sparc-* | *-sun)
 		os=-sunos4.1.1
 		;;
-	pru-*)
-		os=-elf
-		;;
 	*-be)
 		os=-beos
 		;;

Modified: trunk/Build/source/utils/asymptote/configure
===================================================================
--- trunk/Build/source/utils/asymptote/configure	2017-03-23 21:29:41 UTC (rev 43589)
+++ trunk/Build/source/utils/asymptote/configure	2017-03-23 22:37:58 UTC (rev 43590)
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for Asymptote 2.40.
+# Generated by GNU Autoconf 2.69 for Asymptote 2.41.
 #
 # Report bugs to <http://sourceforge.net/projects/asymptote>.
 #
@@ -580,8 +580,8 @@
 # Identity of this package.
 PACKAGE_NAME='Asymptote'
 PACKAGE_TARNAME='asymptote'
-PACKAGE_VERSION='2.40'
-PACKAGE_STRING='Asymptote 2.40'
+PACKAGE_VERSION='2.41'
+PACKAGE_STRING='Asymptote 2.41'
 PACKAGE_BUGREPORT='http://sourceforge.net/projects/asymptote'
 PACKAGE_URL=''
 
@@ -1283,7 +1283,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.40 to adapt to many kinds of systems.
+\`configure' configures Asymptote 2.41 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1348,7 +1348,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of Asymptote 2.40:";;
+     short | recursive ) echo "Configuration of Asymptote 2.41:";;
    esac
   cat <<\_ACEOF
 
@@ -1462,7 +1462,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-Asymptote configure 2.40
+Asymptote configure 2.41
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2048,7 +2048,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.40, which was
+It was created by Asymptote $as_me 2.41, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -8526,7 +8526,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.40, which was
+This file was extended by Asymptote $as_me 2.41, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -8588,7 +8588,7 @@
 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.40
+Asymptote config.status 2.41
 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	2017-03-23 21:29:41 UTC (rev 43589)
+++ trunk/Build/source/utils/asymptote/configure.ac	2017-03-23 22:37:58 UTC (rev 43590)
@@ -3,12 +3,12 @@
 # this file.
 
 AC_PREREQ(2)
-AC_INIT([Asymptote],[2.40],[http://sourceforge.net/projects/asymptote])
+AC_INIT([Asymptote],[2.41],[http://sourceforge.net/projects/asymptote])
 VERSION=$PACKAGE_VERSION
 AC_SUBST(VERSION)
 m4_include([ax_pthread.m4])
 
-test "$CXXFLAGS" || CXXFLAGS="-std=c++11"
+test "$CXXFLAGS" || CXXFLAGS=""
 
 test "$CFLAGS" || CFLAGS="-g -O3"
 

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

Modified: trunk/Build/source/utils/asymptote/doc/FAQ/asy-faq.info
===================================================================
(Binary files differ)

Modified: trunk/Build/source/utils/asymptote/doc/Makefile.in
===================================================================
--- trunk/Build/source/utils/asymptote/doc/Makefile.in	2017-03-23 21:29:41 UTC (rev 43589)
+++ trunk/Build/source/utils/asymptote/doc/Makefile.in	2017-03-23 22:37:58 UTC (rev 43590)
@@ -10,8 +10,9 @@
 datarootdir = @datarootdir@
 INSTALL = @INSTALL@
 TEXI2DVI = @TEXI2DVI@
+PERL5LIB = ./
 
-export docdir infodir INSTALL
+export docdir infodir INSTALL PERL5LIB
 
 all:    doc
 

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

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

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

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

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

Modified: trunk/Build/source/utils/asymptote/picture.cc
===================================================================
--- trunk/Build/source/utils/asymptote/picture.cc	2017-03-23 21:29:41 UTC (rev 43589)
+++ trunk/Build/source/utils/asymptote/picture.cc	2017-03-23 22:37:58 UTC (rev 43590)
@@ -33,10 +33,13 @@
   unlink((name+"aux").c_str());
   unlink((name+"log").c_str());
   unlink((name+"out").c_str());
-  unlink((name+"m9").c_str());
-  if(settings::pdf(texengine))
+  if(settings::pdf(texengine)) {
     unlink((name+"pdf").c_str());
+    unlink((name+"m9").c_str());
+  } else
+    unlink((name+"pbsdat").c_str());
   if(context) {
+    unlink("cont-new.log");
     unlink((name+"tex").c_str());
     unlink((name+"top").c_str());
     unlink((name+"tua").c_str());
@@ -599,6 +602,35 @@
   return status;
 }
   
+int picture::pdftoeps(const string& pdfname, const string& epsname)
+{
+  mem::vector<string> cmd;
+  cmd.push_back(getSetting<string>("gs"));
+  cmd.push_back("-q");
+  cmd.push_back("-dNOCACHE");
+  cmd.push_back("-dNOPAUSE");
+  cmd.push_back("-dBATCH");
+  cmd.push_back("-P");
+  if(safe)
+    cmd.push_back("-dSAFER");
+  string texengine=getSetting<string>("tex");
+  cmd.push_back("-sDEVICE="+getSetting<string>("epsdriver"));
+  
+  cmd.push_back("-sOutputFile="+stripDir(epsname));
+  cmd.push_back(stripDir(pdfname));
+
+  char *oldPath=NULL;
+  string dir=stripFile(epsname);
+  if(!dir.empty()) {
+    oldPath=getPath();
+    setPath(dir.c_str());
+  }
+  int status=System(cmd,0,true,"gs","Ghostscript");
+  if(oldPath != NULL)
+    setPath(oldPath);
+  return status;
+}
+  
 bool picture::reloadPDF(const string& Viewer, const string& outname) const 
 {
   static bool needReload=true;
@@ -647,6 +679,8 @@
         if(status != 0)
           reportError("Cannot rename "+prename+" to "+outname);
       } else status=epstopdf(prename,outname);
+    } else if(epsformat) {
+      status=pdftoeps(prename,outname);
     } else {
       mem::vector<string> cmd;
       double render=fabs(getSetting<double>("render"));
@@ -678,8 +712,9 @@
         if(expand == 1.0)
           cmd.push_back("+antialias");
         push_split(cmd,getSetting<string>("convertOptions"));
-        cmd.push_back("-geometry");
+        cmd.push_back("-resize");
         cmd.push_back(String(100.0/expand)+"%x");
+        if(outputformat == "jpg") cmd.push_back("-flatten");
         cmd.push_back(nativeformat()+":"+prename);
         cmd.push_back(outputformat+":"+outname);
         status=System(cmd,0,true,"convert");
@@ -1039,8 +1074,10 @@
           if(context) prename=stripDir(prename);
           status=postprocess(prename,outname,outputformat,magnification,wait,
                              view,pdf && Labels,svgformat);
-          if(pdfformat && !getSetting<bool>("keep"))
+          if(pdfformat && !getSetting<bool>("keep")) {
             unlink(auxname(prefix,"m9").c_str());
+            unlink(auxname(prefix,"pbsdat").c_str());
+          }
         }
       }
     }

Modified: trunk/Build/source/utils/asymptote/picture.h
===================================================================
--- trunk/Build/source/utils/asymptote/picture.h	2017-03-23 21:29:41 UTC (rev 43589)
+++ trunk/Build/source/utils/asymptote/picture.h	2017-03-23 22:37:58 UTC (rev 43590)
@@ -68,6 +68,7 @@
   }
   
   int epstopdf(const string& epsname, const string& pdfname);
+  int pdftoeps(const string& pdfname, const string& epsname);
   
   bool texprocess(const string& texname, const string& tempname,
                   const string& prefix, const pair& bboxshift, bool svgformat); 

Modified: trunk/Build/source/utils/asymptote/revision.cc
===================================================================
--- trunk/Build/source/utils/asymptote/revision.cc	2017-03-23 21:29:41 UTC (rev 43589)
+++ trunk/Build/source/utils/asymptote/revision.cc	2017-03-23 22:37:58 UTC (rev 43590)
@@ -1 +1 @@
-const char *REVISION="2.40";
+const char *REVISION="2.41";

Modified: trunk/Build/source/utils/asymptote/triple.h
===================================================================
--- trunk/Build/source/utils/asymptote/triple.h	2017-03-23 21:29:41 UTC (rev 43589)
+++ trunk/Build/source/utils/asymptote/triple.h	2017-03-23 22:37:58 UTC (rev 43590)
@@ -328,12 +328,13 @@
   }
 }
 
+extern const double third;
+
 // return the maximum distance squared of points c0 and c1 from 
 // the respective internal control points of z0--z1.
 inline double Straightness(const triple& z0, const triple& c0,
                            const triple& c1, const triple& z1)
 {
-  static const double third=1.0/3.0;
   triple v=third*(z1-z0);
   return std::max(abs2(c0-v-z0),abs2(z1-v-c1));
 }



More information about the tex-live-commits mailing list