From febbc25a7a2027c09215768bedf481716ce36192 Mon Sep 17 00:00:00 2001 From: Brendan Kenny Date: Fri, 18 Dec 2015 18:29:57 -0800 Subject: [PATCH] inline GluHalfEdge.dst manually before compilation Closure Compiler won't do this since it's not a 'simple' getter, and V8 doesn't consistently inline at run time. This change is performance neutral on complicated polygons, but saves up to ~5% on streams of very simple polygons due to elimination of function call overhead. --- gulpfile.js | 8 +++++++- libtess.min.js | 54 +++++++++++++++++++++++++------------------------- 2 files changed, 34 insertions(+), 28 deletions(-) diff --git a/gulpfile.js b/gulpfile.js index db802eb..ead6c94 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -110,6 +110,12 @@ gulp.task('build-cat', () => { gulp.task('build-min', () => gulp.src(LIBTESS_SRC.concat('./build/closure_exports.js')) .pipe(newer('./libtess.min.js')) + + // TODO(bckenny): The start of library-specific compiler optimizations. + // Generalize and pull into separate module. + // Inline GluHalfEdge.dst() since closure won't do it for us. + .pipe(replace('.dst()', '.sym.org')) + .pipe(closureCompiler({ js_output_file: 'libtess.min.js', compilation_level: 'ADVANCED', @@ -126,7 +132,7 @@ gulp.task('build-min', () => 'visibility', ], use_types_for_optimization: true, - // variable_renaming_report: 'varreport.txt' + // variable_renaming_report: 'varreport.txt', // Since DOM isn't touched, don't use default externs, leaving only the // core language keywords unobfuscated. diff --git a/libtess.min.js b/libtess.min.js index b1b3649..20216c3 100644 --- a/libtess.min.js +++ b/libtess.min.js @@ -27,32 +27,32 @@ Copyright in any portions created by third parties is as indicated elsewhere herein. All Rights Reserved. */ -'use strict';var k;function p(a,b){return a.b===b.b&&a.a===b.a}function u(a,b){return a.ba?0:a;c=0>c?0:c;return a<=c?0===c?(b+d)/2:b+a/(a+c)*(d-b):d+c/(a+c)*(b-d)};function ea(a){var b=C(a.b);D(b,a.c);D(b.b,a.c);E(b,a.a);return b}function F(a,b){var c=!1,d=!1;a!==b&&(b.a!==a.a&&(d=!0,G(b.a,a.a)),b.d!==a.d&&(c=!0,H(b.d,a.d)),I(b,a),d||(D(b,a.a),a.a.c=a),c||(E(b,a.d),a.d.a=a))}function J(a){var b=a.b,c=!1;a.d!==a.b.d&&(c=!0,H(a.d,a.b.d));a.c===a?G(a.a,null):(a.b.d.a=K(a),a.a.c=a.c,I(a,K(a)),c||E(a,a.d));b.c===b?(G(b.a,null),H(b.d,null)):(a.d.a=K(b),b.a.c=b.c,I(b,K(b)));fa(a)} -function L(a){var b=C(a),c=b.b;I(b,a.e);b.a=A(a);D(c,b.a);b.d=c.d=a.d;b=b.b;I(a.b,K(a.b));I(a.b,b);a.b.a=b.a;A(b).c=b.b;b.b.d=a.b.d;b.f=a.f;b.b.f=a.b.f;return b}function M(a,b){var c=!1,d=C(a),e=d.b;b.d!==a.d&&(c=!0,H(b.d,a.d));I(d,a.e);I(e,b);d.a=A(a);e.a=b.a;d.d=e.d=a.d;a.d.a=e;c||E(d,a.d);return d}function C(a){var b=new N,c=new N,d=a.b.h;c.h=d;d.b.h=b;b.h=a;a.b.h=c;b.b=c;b.c=b;b.e=c;c.b=b;c.c=c;return c.e=b}function I(a,b){var c=a.c,d=b.c;c.b.e=b;d.b.e=a;a.c=d;b.c=c} -function D(a,b){var c=b.f,d=new O(b,c);c.e=d;b.f=d;c=d.c=a;do c.a=d,c=c.c;while(c!==a)}function E(a,b){var c=b.d,d=new ga(b,c);c.b=d;b.d=d;d.a=a;d.c=b.c;c=a;do c.d=d,c=c.e;while(c!==a)}function fa(a){var b=a.h;a=a.b.h;b.b.h=a;a.b.h=b}function G(a,b){var c=a.c,d=c;do d.a=b,d=d.c;while(d!==c);c=a.f;d=a.e;d.f=c;c.e=d}function H(a,b){var c=a.a,d=c;do d.d=b,d=d.e;while(d!==c);c=a.d;d=a.b;d.d=c;c.b=d};function ha(a){var b=0;Math.abs(a[1])>Math.abs(a[0])&&(b=1);Math.abs(a[2])>Math.abs(a[b])&&(b=2);return b};var P=4*1E150;function ia(a,b){a.f+=b.f;a.b.f+=b.b.f}function ja(a,b,c){a=a.a;b=b.a;c=c.a;if(A(b)===a)return A(c)===a?u(b.a,c.a)?0>=w(A(c),b.a,c.a):0<=w(A(b),c.a,b.a):0>=w(A(c),a,c.a);if(A(c)===a)return 0<=w(A(b),a,b.a);b=v(A(b),a,b.a);a=v(A(c),a,c.a);return b>=a}function Q(a){a.a.i=null;var b=a.e;b.a.c=b.c;b.c.a=b.a;a.e=null}function ka(a,b){J(a.a);a.c=!1;a.a=b;b.i=a}function la(a){var b=a.a.a;do a=R(a);while(a.a.a===b);a.c&&(b=M(S(a).a.b,a.a.e),ka(a,b),a=R(a));return a} -function ma(a,b,c){var d=new na;d.a=c;d.e=oa(a.f,b.e,d);return c.i=d}function pa(a,b){switch(a.s){case 100130:return 0!==(b&1);case 100131:return 0!==b;case 100132:return 0b;case 100134:return 2<=b||-2>=b}return!1}function qa(a){var b=a.a,c=b.d;c.c=a.d;c.a=b;Q(a)}function T(a,b,c){a=b;for(b=b.a;a!==c;){a.c=!1;var d=S(a),e=d.a;if(e.a!==b.a){if(!d.c){qa(a);break}e=M(b.c.b,e.b);ka(d,e)}b.c!==e&&(F(K(e),e),F(b,e));qa(a);b=d.a;a=d}return b} -function U(a,b,c,d,e,f){var g=!0;do ma(a,b,c.b),c=c.c;while(c!==d);for(null===e&&(e=S(b).a.b.c);;){d=S(b);c=d.a.b;if(c.a!==e.a)break;c.c!==e&&(F(K(c),c),F(K(e),c));d.f=b.f-c.f;d.d=pa(a,d.f);b.b=!0;!g&&ra(a,b)&&(ia(c,e),Q(b),J(e));g=!1;b=d;e=c}b.b=!0;f&&sa(a,b)}function ta(a,b,c,d,e){var f=[b.g[0],b.g[1],b.g[2]];b.d=null;b.d=a.o?a.o(f,c,d,a.c)||null:null;null===b.d&&(e?a.n||(V(a,100156),a.n=!0):b.d=c[0])} -function ua(a,b,c){var d=[null,null,null,null];d[0]=b.a.d;d[1]=c.a.d;ta(a,b.a,d,[.5,.5,0,0],!1);F(b,c)}function va(a,b,c,d,e){var f=Math.abs(b.b-a.b)+Math.abs(b.a-a.a),g=Math.abs(c.b-a.b)+Math.abs(c.a-a.a),h=e+1;d[e]=.5*g/(f+g);d[h]=.5*f/(f+g);a.g[0]+=d[e]*b.g[0]+d[h]*c.g[0];a.g[1]+=d[e]*b.g[1]+d[h]*c.g[1];a.g[2]+=d[e]*b.g[2]+d[h]*c.g[2]} -function ra(a,b){var c=S(b),d=b.a,e=c.a;if(u(d.a,e.a)){if(0=m?W(c,m):u(h[g[m>>1]],h[g[m]])?W(c,m):wa(c,m));h[f]=null;l[f]=c.b;c.b=f}else for(c.c[-(f+1)]=null;0w(A(d),e.a,d.a))return!1;R(b).b=b.b=!0;L(d.b);F(K(e),d)}return!0} -function xa(a,b){var c=S(b),d=b.a,e=c.a,f=d.a,g=e.a,h=A(d),l=A(e),m=new O;w(h,a.a,f);w(l,a.a,g);if(f===g||Math.min(f.a,h.a)>Math.max(g.a,l.a))return!1;if(u(f,g)){if(0w(h,g,f))return!1;var t=h,q=f,r=l,z=g,n,x;u(t,q)||(n=t,t=q,q=n);u(r,z)||(n=r,r=z,z=n);u(t,r)||(n=t,t=r,r=n,n=q,q=z,z=n);u(r,q)?u(q,z)?(n=v(t,r,q),x=v(r,q,z),0>n+x&&(n=-n,x=-x),m.b=B(n,r.b,x,q.b)):(n=w(t,r,q),x=-w(t,z,q),0>n+x&&(n=-n,x=-x),m.b=B(n,r.b,x,z.b)):m.b=(r.b+q.b)/2;y(t,q)||(n=t,t=q,q=n);y(r,z)||(n= -r,r=z,z=n);y(t,r)||(n=t,t=r,r=n,n=q,q=z,z=n);y(r,q)?y(q,z)?(n=aa(t,r,q),x=aa(r,q,z),0>n+x&&(n=-n,x=-x),m.a=B(n,r.a,x,q.a)):(n=ba(t,r,q),x=-ba(t,z,q),0>n+x&&(n=-n,x=-x),m.a=B(n,r.a,x,z.a)):m.a=(r.a+q.a)/2;u(m,a.a)&&(m.b=a.a.b,m.a=a.a.a);t=u(f,g)?f:g;u(t,m)&&(m.b=t.b,m.a=t.a);if(p(m,f)||p(m,g))return ra(a,b),!1;if(!p(h,a.a)&&0<=w(h,a.a,m)||!p(l,a.a)&&0>=w(l,a.a,m)){if(l===a.a)return L(d.b),F(e.b,d),b=la(b),d=S(b).a,T(a,S(b),c),U(a,b,K(d),d,d,!0),!0;if(h===a.a){L(e.b);F(d.e,K(e));f=c=b;g=A(f.a);do f= -R(f);while(A(f.a)===g);b=f;f=S(b).a.b.c;c.a=K(e);e=T(a,c,null);U(a,b,e.c,d.b.c,f,!0);return!0}0<=w(h,a.a,m)&&(R(b).b=b.b=!0,L(d.b),d.a.b=a.a.b,d.a.a=a.a.a);0>=w(l,a.a,m)&&(b.b=c.b=!0,L(e.b),e.a.b=a.a.b,e.a.a=a.a.a);return!1}L(d.b);L(e.b);F(K(e),d);d.a.b=m.b;d.a.a=m.a;d.a.h=ya(a.e,d.a);d=d.a;e=[0,0,0,0];m=[f.d,h.d,g.d,l.d];d.g[0]=d.g[1]=d.g[2]=0;va(d,f,h,e,0);va(d,g,l,e,2);ta(a,d,m,e,!0);R(b).b=b.b=c.b=!0;return!1} -function sa(a,b){for(var c=S(b);;){for(;c.b;)b=c,c=S(c);if(!b.b&&(c=b,b=R(b),null===b||!b.b))break;b.b=!1;var d=b.a,e=c.a,f;if(f=A(d)!==A(e))a:{f=b;var g=S(f),h=f.a,l=g.a,m=void 0;if(u(A(h),A(l))){if(0>w(A(h),A(l),h.a)){f=!1;break a}R(f).b=f.b=!0;m=L(h);F(l.b,m);m.d.c=f.d}else{if(0e;++e){var f=a[e];-1E150>f&&(f=-1E150,c=!0);1E150h;++h){var l=a.g[h];lb[h]&&(b[h]=l,c[h]=a)}a=0;b[1]-f[1]>b[0]-f[0]&&(a=1);b[2]-f[2]>b[a]-f[a]&&(a=2);if(f[a]>=b[a])e[0]=0,e[1]=0,e[2]=1;else{b=0;f=g[a];c=c[a];g=[0,0,0];f=[f.g[0]-c.g[0],f.g[1]-c.g[1],f.g[2]-c.g[2]];h=[0,0,0];for(a=d.e;a!==d;a= -a.e)h[0]=a.g[0]-c.g[0],h[1]=a.g[1]-c.g[1],h[2]=a.g[2]-c.g[2],g[0]=f[1]*h[2]-f[2]*h[1],g[1]=f[2]*h[0]-f[0]*h[2],g[2]=f[0]*h[1]-f[1]*h[0],l=g[0]*g[0]+g[1]*g[1]+g[2]*g[2],l>b&&(b=l,e[0]=g[0],e[1]=g[1],e[2]=g[2]);0>=b&&(e[0]=e[1]=e[2]=0,e[ha(f)]=1)}d=!0}g=ha(e);a=this.b.c;b=(g+1)%3;c=(g+2)%3;g=0=b.f)){do e+=(b.a.b-A(b).b)*(b.a.a+A(b).a),b=b.e;while(b!==a.a)}if(0>e)for(e=this.b.c,d=e.e;d!== -e;d=d.e)d.a=-d.a}this.n=!1;e=this.b.b;for(a=e.h;a!==e;a=d)if(d=a.h,b=a.e,p(a.a,A(a))&&a.e.e!==a&&(ua(this,b,a),J(a),a=b,b=a.e),b.e===a){if(b!==a){if(b===d||b===d.b)d=d.h;J(b)}if(a===d||a===d.b)d=d.h;J(a)}this.e=e=new Ea;d=this.b.c;for(a=d.e;a!==d;a=a.e)a.h=ya(e,a);Fa(e);this.f=new Ba(this);Aa(this,-P);for(Aa(this,P);null!==(e=Ga(this.e));){for(;;){a:if(a=this.e,0===a.a)d=Ha(a.b);else if(d=a.c[a.d[a.a-1]],0!==a.b.a&&(a=Ha(a.b),u(a,d))){d=a;break a}if(null===d||!p(d,e))break;d=Ga(this.e);ua(this,e.c, -d.c)}za(this,e)}this.a=this.f.a.a.b.a.a;for(e=0;null!==(d=this.f.a.a.b);)d.h||++e,Q(d);this.f=null;e=this.e;e.b=null;e.d=null;this.e=e.c=null;e=this.b;for(a=e.a.b;a!==e.a;a=d)d=a.b,a=a.a,a.e.e===a&&(ia(a.c,a),J(a));if(!this.n){e=this.b;if(this.m)for(a=e.b.h;a!==e.b;a=d)d=a.h,a.b.d.c!==a.d.c?a.f=a.d.c?1:-1:J(a);else for(a=e.a.b;a!==e.a;a=d)if(d=a.b,a.c){for(a=a.a;u(A(a),a.a);a=a.c.b);for(;u(a.a,A(a));a=a.e);b=a.c.b;for(c=void 0;a.e!==b;)if(u(A(a),b.a)){for(;b.e!==a&&(ca(b.e)||0>=w(b.a,A(b),A(b.e)));)c= -M(b.e,b),b=c.b;b=b.c.b}else{for(;b.e!==a&&(da(a.c.b)||0<=w(A(a),a.a,a.c.b.a));)c=M(a,a.c.b),a=c.b;a=a.e}for(;b.e.e!==a;)c=M(b.e,b),b=c.b}if(this.h||this.i||this.k||this.l)if(this.m)for(e=this.b,d=e.a.b;d!==e.a;d=d.b){if(d.c){this.h&&this.h(2,this.c);a=d.a;do this.k&&this.k(a.a.d,this.c),a=a.e;while(a!==d.a);this.i&&this.i(this.c)}}else{e=this.b;d=!!this.l;a=!1;b=-1;for(c=e.a.d;c!==e.a;c=c.d)if(c.c){a||(this.h&&this.h(4,this.c),a=!0);g=c.a;do d&&(f=g.b.d.c?0:1,b!==f&&(b=f,this.l&&this.l(!!b,this.c))), -this.k&&this.k(g.a.d,this.c),g=g.e;while(g!==c.a)}a&&this.i&&this.i(this.c)}if(this.r){e=this.b;for(a=e.a.b;a!==e.a;a=d)if(d=a.b,!a.c){b=a.a;c=b.e;g=void 0;do g=c,c=g.e,g.d=null,null===g.b.d&&(g.c===g?G(g.a,null):(g.a.c=g.c,I(g,K(g))),f=g.b,f.c===f?G(f.a,null):(f.a.c=f.c,I(f,K(f))),fa(g));while(g!==b);b=a.d;a=a.b;a.d=b;b.b=a}this.r(this.b);this.c=this.b=null;return}}this.b=this.c=null}; -function Z(a,b){if(a.d!==b)for(;a.d!==b;)if(a.dc.f&&(c.f*=2,c.c=Ka(c.c,c.f+1));var e;0===c.b?e=d:(e=c.b,c.b=c.c[c.b]);c.e[e]=b;c.c[e]=d;c.d[d]=e;c.h&&wa(c,d);return e}c=a.a++;a.c[c]=b;return-(c+1)} -function Ga(a){if(0===a.a)return La(a.b);var b=a.c[a.d[a.a-1]];if(0!==a.b.a&&u(Ha(a.b),b))return La(a.b);do--a.a;while(0a.a||u(d[g],d[l])){c[f]=g;e[g]=f;break}c[f]=l;e[l]=f;f=h}}function wa(a,b){for(var c=a.d,d=a.e,e=a.c,f=b,g=c[f];;){var h=f>>1,l=c[h];if(0===h||u(d[l],d[g])){c[f]=g;e[g]=f;break}c[f]=l;e[l]=f;f=h}};function na(){this.e=this.a=null;this.f=0;this.c=this.b=this.h=this.d=!1}function S(a){return a.e.c.b}function R(a){return a.e.a.b};this.libtess={GluTesselator:X,windingRule:{GLU_TESS_WINDING_ODD:100130,GLU_TESS_WINDING_NONZERO:100131,GLU_TESS_WINDING_POSITIVE:100132,GLU_TESS_WINDING_NEGATIVE:100133,GLU_TESS_WINDING_ABS_GEQ_TWO:100134},primitiveType:{GL_LINE_LOOP:2,GL_TRIANGLES:4,GL_TRIANGLE_STRIP:5,GL_TRIANGLE_FAN:6},errorType:{GLU_TESS_MISSING_BEGIN_POLYGON:100151,GLU_TESS_MISSING_END_POLYGON:100153,GLU_TESS_MISSING_BEGIN_CONTOUR:100152,GLU_TESS_MISSING_END_CONTOUR:100154,GLU_TESS_COORD_TOO_LARGE:100155,GLU_TESS_NEED_COMBINE_CALLBACK:100156}, +'use strict';var n;function t(a,b){return a.b===b.b&&a.a===b.a}function u(a,b){return a.ba?0:a;c=0>c?0:c;return a<=c?0===c?(b+d)/2:b+a/(a+c)*(d-b):d+c/(a+c)*(b-d)};function ea(a){var b=B(a.b);C(b,a.c);C(b.b,a.c);D(b,a.a);return b}function E(a,b){var c=!1,d=!1;a!==b&&(b.a!==a.a&&(d=!0,F(b.a,a.a)),b.d!==a.d&&(c=!0,G(b.d,a.d)),H(b,a),d||(C(b,a.a),a.a.c=a),c||(D(b,a.d),a.d.a=a))}function I(a){var b=a.b,c=!1;a.d!==a.b.d&&(c=!0,G(a.d,a.b.d));a.c===a?F(a.a,null):(a.b.d.a=J(a),a.a.c=a.c,H(a,J(a)),c||D(a,a.d));b.c===b?(F(b.a,null),G(b.d,null)):(a.d.a=J(b),b.a.c=b.c,H(b,J(b)));fa(a)} +function K(a){var b=B(a),c=b.b;H(b,a.e);b.a=a.b.a;C(c,b.a);b.d=c.d=a.d;b=b.b;H(a.b,J(a.b));H(a.b,b);a.b.a=b.a;b.b.a.c=b.b;b.b.d=a.b.d;b.f=a.f;b.b.f=a.b.f;return b}function L(a,b){var c=!1,d=B(a),e=d.b;b.d!==a.d&&(c=!0,G(b.d,a.d));H(d,a.e);H(e,b);d.a=a.b.a;e.a=b.a;d.d=e.d=a.d;a.d.a=e;c||D(d,a.d);return d}function B(a){var b=new M,c=new M,d=a.b.h;c.h=d;d.b.h=b;b.h=a;a.b.h=c;b.b=c;b.c=b;b.e=c;c.b=b;c.c=c;return c.e=b}function H(a,b){var c=a.c,d=b.c;c.b.e=b;d.b.e=a;a.c=d;b.c=c} +function C(a,b){var c=b.f,d=new N(b,c);c.e=d;b.f=d;c=d.c=a;do c.a=d,c=c.c;while(c!==a)}function D(a,b){var c=b.d,d=new ga(b,c);c.b=d;b.d=d;d.a=a;d.c=b.c;c=a;do c.d=d,c=c.e;while(c!==a)}function fa(a){var b=a.h;a=a.b.h;b.b.h=a;a.b.h=b}function F(a,b){var c=a.c,d=c;do d.a=b,d=d.c;while(d!==c);c=a.f;d=a.e;d.f=c;c.e=d}function G(a,b){var c=a.a,d=c;do d.d=b,d=d.e;while(d!==c);c=a.d;d=a.b;d.d=c;c.b=d};function ha(a){var b=0;Math.abs(a[1])>Math.abs(a[0])&&(b=1);Math.abs(a[2])>Math.abs(a[b])&&(b=2);return b};var O=4*1E150;function P(a,b){a.f+=b.f;a.b.f+=b.b.f}function ia(a,b,c){a=a.a;b=b.a;c=c.a;if(b.b.a===a)return c.b.a===a?u(b.a,c.a)?0>=x(c.b.a,b.a,c.a):0<=x(b.b.a,c.a,b.a):0>=x(c.b.a,a,c.a);if(c.b.a===a)return 0<=x(b.b.a,a,b.a);b=v(b.b.a,a,b.a);a=v(c.b.a,a,c.a);return b>=a}function Q(a){a.a.i=null;var b=a.e;b.a.c=b.c;b.c.a=b.a;a.e=null}function ja(a,b){I(a.a);a.c=!1;a.a=b;b.i=a}function ka(a){var b=a.a.a;do a=R(a);while(a.a.a===b);a.c&&(b=L(S(a).a.b,a.a.e),ja(a,b),a=R(a));return a} +function la(a,b,c){var d=new ma;d.a=c;d.e=na(a.f,b.e,d);return c.i=d}function oa(a,b){switch(a.s){case 100130:return 0!==(b&1);case 100131:return 0!==b;case 100132:return 0b;case 100134:return 2<=b||-2>=b}return!1}function pa(a){var b=a.a,c=b.d;c.c=a.d;c.a=b;Q(a)}function T(a,b,c){a=b;for(b=b.a;a!==c;){a.c=!1;var d=S(a),e=d.a;if(e.a!==b.a){if(!d.c){pa(a);break}e=L(b.c.b,e.b);ja(d,e)}b.c!==e&&(E(J(e),e),E(b,e));pa(a);b=d.a;a=d}return b} +function U(a,b,c,d,e,f){var g=!0;do la(a,b,c.b),c=c.c;while(c!==d);for(null===e&&(e=S(b).a.b.c);;){d=S(b);c=d.a.b;if(c.a!==e.a)break;c.c!==e&&(E(J(c),c),E(J(e),c));d.f=b.f-c.f;d.d=oa(a,d.f);b.b=!0;!g&&qa(a,b)&&(P(c,e),Q(b),I(e));g=!1;b=d;e=c}b.b=!0;f&&ra(a,b)}function sa(a,b,c,d,e){var f=[b.g[0],b.g[1],b.g[2]];b.d=null;b.d=a.o?a.o(f,c,d,a.c)||null:null;null===b.d&&(e?a.n||(V(a,100156),a.n=!0):b.d=c[0])} +function ta(a,b,c){var d=[null,null,null,null];d[0]=b.a.d;d[1]=c.a.d;sa(a,b.a,d,[.5,.5,0,0],!1);E(b,c)}function ua(a,b,c,d,e){var f=Math.abs(b.b-a.b)+Math.abs(b.a-a.a),g=Math.abs(c.b-a.b)+Math.abs(c.a-a.a),h=e+1;d[e]=.5*g/(f+g);d[h]=.5*f/(f+g);a.g[0]+=d[e]*b.g[0]+d[h]*c.g[0];a.g[1]+=d[e]*b.g[1]+d[h]*c.g[1];a.g[2]+=d[e]*b.g[2]+d[h]*c.g[2]} +function qa(a,b){var c=S(b),d=b.a,e=c.a;if(u(d.a,e.a)){if(0=l?W(c,l):u(h[g[l>>1]],h[g[l]])?W(c,l):va(c,l));h[f]=null;k[f]=c.b;c.b=f}else for(c.c[-(f+1)]=null;0x(d.b.a,e.a,d.a))return!1;R(b).b=b.b=!0;K(d.b);E(J(e),d)}return!0} +function wa(a,b){var c=S(b),d=b.a,e=c.a,f=d.a,g=e.a,h=d.b.a,k=e.b.a,l=new N;x(h,a.a,f);x(k,a.a,g);if(f===g||Math.min(f.a,h.a)>Math.max(g.a,k.a))return!1;if(u(f,g)){if(0x(h,g,f))return!1;var r=h,p=f,q=k,y=g,m,w;u(r,p)||(m=r,r=p,p=m);u(q,y)||(m=q,q=y,y=m);u(r,q)||(m=r,r=q,q=m,m=p,p=y,y=m);u(q,p)?u(p,y)?(m=v(r,q,p),w=v(q,p,y),0>m+w&&(m=-m,w=-w),l.b=A(m,q.b,w,p.b)):(m=x(r,q,p),w=-x(r,y,p),0>m+w&&(m=-m,w=-w),l.b=A(m,q.b,w,y.b)):l.b=(q.b+p.b)/2;z(r,p)||(m=r,r=p,p=m);z(q,y)|| +(m=q,q=y,y=m);z(r,q)||(m=r,r=q,q=m,m=p,p=y,y=m);z(q,p)?z(p,y)?(m=aa(r,q,p),w=aa(q,p,y),0>m+w&&(m=-m,w=-w),l.a=A(m,q.a,w,p.a)):(m=ba(r,q,p),w=-ba(r,y,p),0>m+w&&(m=-m,w=-w),l.a=A(m,q.a,w,y.a)):l.a=(q.a+p.a)/2;u(l,a.a)&&(l.b=a.a.b,l.a=a.a.a);r=u(f,g)?f:g;u(r,l)&&(l.b=r.b,l.a=r.a);if(t(l,f)||t(l,g))return qa(a,b),!1;if(!t(h,a.a)&&0<=x(h,a.a,l)||!t(k,a.a)&&0>=x(k,a.a,l)){if(k===a.a)return K(d.b),E(e.b,d),b=ka(b),d=S(b).a,T(a,S(b),c),U(a,b,J(d),d,d,!0),!0;if(h===a.a){K(e.b);E(d.e,J(e));f=c=b;g=f.a.b.a; +do f=R(f);while(f.a.b.a===g);b=f;f=S(b).a.b.c;c.a=J(e);e=T(a,c,null);U(a,b,e.c,d.b.c,f,!0);return!0}0<=x(h,a.a,l)&&(R(b).b=b.b=!0,K(d.b),d.a.b=a.a.b,d.a.a=a.a.a);0>=x(k,a.a,l)&&(b.b=c.b=!0,K(e.b),e.a.b=a.a.b,e.a.a=a.a.a);return!1}K(d.b);K(e.b);E(J(e),d);d.a.b=l.b;d.a.a=l.a;d.a.h=xa(a.e,d.a);d=d.a;e=[0,0,0,0];l=[f.d,h.d,g.d,k.d];d.g[0]=d.g[1]=d.g[2]=0;ua(d,f,h,e,0);ua(d,g,k,e,2);sa(a,d,l,e,!0);R(b).b=b.b=c.b=!0;return!1} +function ra(a,b){for(var c=S(b);;){for(;c.b;)b=c,c=S(c);if(!b.b&&(c=b,b=R(b),null===b||!b.b))break;b.b=!1;var d=b.a,e=c.a,f;if(f=d.b.a!==e.b.a)a:{f=b;var g=S(f),h=f.a,k=g.a,l=void 0;if(u(h.b.a,k.b.a)){if(0>x(h.b.a,k.b.a,h.a)){f=!1;break a}R(f).b=f.b=!0;l=K(h);E(k.b,l);l.d.c=f.d}else{if(0e;++e){var f=a[e];-1E150>f&&(f=-1E150,c=!0);1E150h;++h){var k=a.g[h];kb[h]&&(b[h]=k,c[h]=a)}a=0;b[1]-f[1]>b[0]-f[0]&&(a=1);b[2]-f[2]>b[a]-f[a]&&(a=2);if(f[a]>=b[a])e[0]=0,e[1]=0,e[2]=1;else{b=0;f=g[a];c=c[a];g=[0,0,0];f=[f.g[0]-c.g[0],f.g[1]-c.g[1],f.g[2]-c.g[2]];h=[0,0,0];for(a=d.e;a!==d;a= +a.e)h[0]=a.g[0]-c.g[0],h[1]=a.g[1]-c.g[1],h[2]=a.g[2]-c.g[2],g[0]=f[1]*h[2]-f[2]*h[1],g[1]=f[2]*h[0]-f[0]*h[2],g[2]=f[0]*h[1]-f[1]*h[0],k=g[0]*g[0]+g[1]*g[1]+g[2]*g[2],k>b&&(b=k,e[0]=g[0],e[1]=g[1],e[2]=g[2]);0>=b&&(e[0]=e[1]=e[2]=0,e[ha(f)]=1)}d=!0}g=ha(e);a=this.b.c;b=(g+1)%3;c=(g+2)%3;g=0=b.f)){do e+=(b.a.b-b.b.a.b)*(b.a.a+b.b.a.a),b=b.e;while(b!==a.a)}if(0>e)for(e=this.b.c,d=e.e;d!== +e;d=d.e)d.a=-d.a}this.n=!1;e=this.b.b;for(a=e.h;a!==e;a=d)if(d=a.h,b=a.e,t(a.a,a.b.a)&&a.e.e!==a&&(ta(this,b,a),I(a),a=b,b=a.e),b.e===a){if(b!==a){if(b===d||b===d.b)d=d.h;I(b)}if(a===d||a===d.b)d=d.h;I(a)}this.e=e=new Da;d=this.b.c;for(a=d.e;a!==d;a=a.e)a.h=xa(e,a);Ea(e);this.f=new Aa(this);za(this,-O);for(za(this,O);null!==(e=Fa(this.e));){for(;;){a:if(a=this.e,0===a.a)d=Ga(a.b);else if(d=a.c[a.d[a.a-1]],0!==a.b.a&&(a=Ga(a.b),u(a,d))){d=a;break a}if(null===d||!t(d,e))break;d=Fa(this.e);ta(this,e.c, +d.c)}ya(this,e)}this.a=this.f.a.a.b.a.a;for(e=0;null!==(d=this.f.a.a.b);)d.h||++e,Q(d);this.f=null;e=this.e;e.b=null;e.d=null;this.e=e.c=null;e=this.b;for(a=e.a.b;a!==e.a;a=d)d=a.b,a=a.a,a.e.e===a&&(P(a.c,a),I(a));if(!this.n){e=this.b;if(this.m)for(a=e.b.h;a!==e.b;a=d)d=a.h,a.b.d.c!==a.d.c?a.f=a.d.c?1:-1:I(a);else for(a=e.a.b;a!==e.a;a=d)if(d=a.b,a.c){for(a=a.a;u(a.b.a,a.a);a=a.c.b);for(;u(a.a,a.b.a);a=a.e);b=a.c.b;for(c=void 0;a.e!==b;)if(u(a.b.a,b.a)){for(;b.e!==a&&(ca(b.e)||0>=x(b.a,b.b.a,b.e.b.a));)c= +L(b.e,b),b=c.b;b=b.c.b}else{for(;b.e!==a&&(da(a.c.b)||0<=x(a.b.a,a.a,a.c.b.a));)c=L(a,a.c.b),a=c.b;a=a.e}for(;b.e.e!==a;)c=L(b.e,b),b=c.b}if(this.h||this.i||this.k||this.l)if(this.m)for(e=this.b,d=e.a.b;d!==e.a;d=d.b){if(d.c){this.h&&this.h(2,this.c);a=d.a;do this.k&&this.k(a.a.d,this.c),a=a.e;while(a!==d.a);this.i&&this.i(this.c)}}else{e=this.b;d=!!this.l;a=!1;b=-1;for(c=e.a.d;c!==e.a;c=c.d)if(c.c){a||(this.h&&this.h(4,this.c),a=!0);g=c.a;do d&&(f=g.b.d.c?0:1,b!==f&&(b=f,this.l&&this.l(!!b,this.c))), +this.k&&this.k(g.a.d,this.c),g=g.e;while(g!==c.a)}a&&this.i&&this.i(this.c)}if(this.r){e=this.b;for(a=e.a.b;a!==e.a;a=d)if(d=a.b,!a.c){b=a.a;c=b.e;g=void 0;do g=c,c=g.e,g.d=null,null===g.b.d&&(g.c===g?F(g.a,null):(g.a.c=g.c,H(g,J(g))),f=g.b,f.c===f?F(f.a,null):(f.a.c=f.c,H(f,J(f))),fa(g));while(g!==b);b=a.d;a=a.b;a.d=b;b.b=a}this.r(this.b);this.c=this.b=null;return}}this.b=this.c=null}; +function Z(a,b){if(a.d!==b)for(;a.d!==b;)if(a.dc.f&&(c.f*=2,c.c=Ja(c.c,c.f+1));var e;0===c.b?e=d:(e=c.b,c.b=c.c[c.b]);c.e[e]=b;c.c[e]=d;c.d[d]=e;c.h&&va(c,d);return e}c=a.a++;a.c[c]=b;return-(c+1)} +function Fa(a){if(0===a.a)return Ka(a.b);var b=a.c[a.d[a.a-1]];if(0!==a.b.a&&u(Ga(a.b),b))return Ka(a.b);do--a.a;while(0a.a||u(d[g],d[k])){c[f]=g;e[g]=f;break}c[f]=k;e[k]=f;f=h}}function va(a,b){for(var c=a.d,d=a.e,e=a.c,f=b,g=c[f];;){var h=f>>1,k=c[h];if(0===h||u(d[k],d[g])){c[f]=g;e[g]=f;break}c[f]=k;e[k]=f;f=h}};function ma(){this.e=this.a=null;this.f=0;this.c=this.b=this.h=this.d=!1}function S(a){return a.e.c.b}function R(a){return a.e.a.b};this.libtess={GluTesselator:X,windingRule:{GLU_TESS_WINDING_ODD:100130,GLU_TESS_WINDING_NONZERO:100131,GLU_TESS_WINDING_POSITIVE:100132,GLU_TESS_WINDING_NEGATIVE:100133,GLU_TESS_WINDING_ABS_GEQ_TWO:100134},primitiveType:{GL_LINE_LOOP:2,GL_TRIANGLES:4,GL_TRIANGLE_STRIP:5,GL_TRIANGLE_FAN:6},errorType:{GLU_TESS_MISSING_BEGIN_POLYGON:100151,GLU_TESS_MISSING_END_POLYGON:100153,GLU_TESS_MISSING_BEGIN_CONTOUR:100152,GLU_TESS_MISSING_END_CONTOUR:100154,GLU_TESS_COORD_TOO_LARGE:100155,GLU_TESS_NEED_COMBINE_CALLBACK:100156}, gluEnum:{GLU_TESS_MESH:100112,GLU_TESS_TOLERANCE:100142,GLU_TESS_WINDING_RULE:100140,GLU_TESS_BOUNDARY_ONLY:100141,GLU_INVALID_ENUM:100900,GLU_INVALID_VALUE:100901,GLU_TESS_BEGIN:100100,GLU_TESS_VERTEX:100101,GLU_TESS_END:100102,GLU_TESS_ERROR:100103,GLU_TESS_EDGE_FLAG:100104,GLU_TESS_COMBINE:100105,GLU_TESS_BEGIN_DATA:100106,GLU_TESS_VERTEX_DATA:100107,GLU_TESS_END_DATA:100108,GLU_TESS_ERROR_DATA:100109,GLU_TESS_EDGE_FLAG_DATA:100110,GLU_TESS_COMBINE_DATA:100111}};X.prototype.gluDeleteTess=X.prototype.x; X.prototype.gluTessProperty=X.prototype.B;X.prototype.gluGetTessProperty=X.prototype.y;X.prototype.gluTessNormal=X.prototype.A;X.prototype.gluTessCallback=X.prototype.z;X.prototype.gluTessVertex=X.prototype.C;X.prototype.gluTessBeginPolygon=X.prototype.u;X.prototype.gluTessBeginContour=X.prototype.t;X.prototype.gluTessEndContour=X.prototype.v;X.prototype.gluTessEndPolygon=X.prototype.w; if (typeof module !== 'undefined') { module.exports = this.libtess; }