From bd53e481f24c05488763e21fd5e1d84dfc1c812b Mon Sep 17 00:00:00 2001 From: HammadTheOne <30986043+HammadTheOne@users.noreply.github.com> Date: Mon, 19 Apr 2021 18:43:23 -0400 Subject: [PATCH] 0.7.0 Release (#557) * Update changelog * Update version * Rebuild package --- CHANGELOG.md | 6 ++-- DESCRIPTION | 2 +- R/internal.R | 56 +++++++++++++++++++------------------- dash_bio/bundle.js | 2 +- dash_bio/bundle.js.map | 2 +- dash_bio/package-info.json | 2 +- inst/deps/bundle.js | 2 +- inst/deps/bundle.js.map | 2 +- package-lock.json | 2 +- package.json | 2 +- 10 files changed, 38 insertions(+), 40 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5033648fd..08e88d0d2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Changelog -## Unreleased +## [0.7.0] - 2021-04-19 ### Fixed * [#547](https://github.com/plotly/dash-bio/pull/547) `sideByside` prop fix for NglMoleculeViewer component when `ALL` chains are visualized. @@ -11,11 +11,9 @@ * [#553](https://github.com/plotly/dash-bio/pull/553) Added source mapping. * [#554](https://github.com/plotly/dash-bio/pull/554) Added additional props and arbitrary layout arguments to VolcanoPlot. - -### Fixed +### Changed - [#550](https://github.com/plotly/dash-bio/pull/548) Updated CONTRIBUTING.md andbasic demo app structure. In addition, removed residual code and pre-deploy scripts associated with now-discontinued Dash Bio gallery. - ## [0.6.1] - 2021-02-15 ### Fixed * [#544](https://github.com/plotly/dash-bio/pull/544) Miscellaneous fixes for NglMoleculeViewer component. diff --git a/DESCRIPTION b/DESCRIPTION index 3ec84ee73..4cf65ab03 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: dashBio Title: Open-source Bioinformatics Components for Dash -Version: 0.6.2 +Version: 0.7.0 Description: A suite of components that makes it simpler to analyze and visualize bioinformatics data and interact with them in a Dash application. Depends: R (>= 3.0.2), manhattanly Imports: dash diff --git a/R/internal.R b/R/internal.R index 20b0c24a7..20b4b0c2f 100644 --- a/R/internal.R +++ b/R/internal.R @@ -1,168 +1,168 @@ .dashBio_js_metadata <- function() { deps_metadata <- list(`dash_bio` = structure(list(name = "dash_bio", -version = "0.6.2", src = list(href = NULL, +version = "0.7.0", src = list(href = NULL, file = "deps"), meta = NULL, script = 'async-alignment.js', stylesheet = NULL, head = NULL, attachment = NULL, package = "dashBio", all_files = FALSE, async = TRUE), class = "html_dependency"), `dash_bio` = structure(list(name = "dash_bio", -version = "0.6.2", src = list(href = NULL, +version = "0.7.0", src = list(href = NULL, file = "deps"), meta = NULL, script = 'async-circos.js', stylesheet = NULL, head = NULL, attachment = NULL, package = "dashBio", all_files = FALSE, async = TRUE), class = "html_dependency"), `dash_bio` = structure(list(name = "dash_bio", -version = "0.6.2", src = list(href = NULL, +version = "0.7.0", src = list(href = NULL, file = "deps"), meta = NULL, script = 'async-ideogram.js', stylesheet = NULL, head = NULL, attachment = NULL, package = "dashBio", all_files = FALSE, async = TRUE), class = "html_dependency"), `dash_bio` = structure(list(name = "dash_bio", -version = "0.6.2", src = list(href = NULL, +version = "0.7.0", src = list(href = NULL, file = "deps"), meta = NULL, script = 'async-igv.js', stylesheet = NULL, head = NULL, attachment = NULL, package = "dashBio", all_files = FALSE, async = TRUE), class = "html_dependency"), `dash_bio` = structure(list(name = "dash_bio", -version = "0.6.2", src = list(href = NULL, +version = "0.7.0", src = list(href = NULL, file = "deps"), meta = NULL, script = 'async-pileup.js', stylesheet = NULL, head = NULL, attachment = NULL, package = "dashBio", all_files = FALSE, async = TRUE), class = "html_dependency"), `dash_bio` = structure(list(name = "dash_bio", -version = "0.6.2", src = list(href = NULL, +version = "0.7.0", src = list(href = NULL, file = "deps"), meta = NULL, script = 'async-moleculeviewer2.js', stylesheet = NULL, head = NULL, attachment = NULL, package = "dashBio", all_files = FALSE, async = TRUE), class = "html_dependency"), `dash_bio` = structure(list(name = "dash_bio", -version = "0.6.2", src = list(href = NULL, +version = "0.7.0", src = list(href = NULL, file = "deps"), meta = NULL, script = 'async-moleculeviewer3.js', stylesheet = NULL, head = NULL, attachment = NULL, package = "dashBio", all_files = FALSE, async = TRUE), class = "html_dependency"), `dash_bio` = structure(list(name = "dash_bio", -version = "0.6.2", src = list(href = NULL, +version = "0.7.0", src = list(href = NULL, file = "deps"), meta = NULL, script = 'async-needle.js', stylesheet = NULL, head = NULL, attachment = NULL, package = "dashBio", all_files = FALSE, async = TRUE), class = "html_dependency"), `dash_bio` = structure(list(name = "dash_bio", -version = "0.6.2", src = list(href = NULL, +version = "0.7.0", src = list(href = NULL, file = "deps"), meta = NULL, script = 'async-nglmoleculeviewer.js', stylesheet = NULL, head = NULL, attachment = NULL, package = "dashBio", all_files = FALSE, async = TRUE), class = "html_dependency"), `dash_bio` = structure(list(name = "dash_bio", -version = "0.6.2", src = list(href = NULL, +version = "0.7.0", src = list(href = NULL, file = "deps"), meta = NULL, script = 'async-onco.js', stylesheet = NULL, head = NULL, attachment = NULL, package = "dashBio", all_files = FALSE, async = TRUE), class = "html_dependency"), `dash_bio` = structure(list(name = "dash_bio", -version = "0.6.2", src = list(href = NULL, +version = "0.7.0", src = list(href = NULL, file = "deps"), meta = NULL, script = 'async-sequence.js', stylesheet = NULL, head = NULL, attachment = NULL, package = "dashBio", all_files = FALSE, async = TRUE), class = "html_dependency"), `dash_bio` = structure(list(name = "dash_bio", -version = "0.6.2", src = list(href = NULL, +version = "0.7.0", src = list(href = NULL, file = "deps"), meta = NULL, script = 'async-speck.js', stylesheet = NULL, head = NULL, attachment = NULL, package = "dashBio", all_files = FALSE, async = TRUE), class = "html_dependency"), `dash_bio` = structure(list(name = "dash_bio", -version = "0.6.2", src = list(href = NULL, +version = "0.7.0", src = list(href = NULL, file = "deps"), meta = NULL, script = 'async-alignment.js.map', stylesheet = NULL, head = NULL, attachment = NULL, package = "dashBio", all_files = FALSE, dynamic = TRUE), class = "html_dependency"), `dash_bio` = structure(list(name = "dash_bio", -version = "0.6.2", src = list(href = NULL, +version = "0.7.0", src = list(href = NULL, file = "deps"), meta = NULL, script = 'async-circos.js.map', stylesheet = NULL, head = NULL, attachment = NULL, package = "dashBio", all_files = FALSE, dynamic = TRUE), class = "html_dependency"), `dash_bio` = structure(list(name = "dash_bio", -version = "0.6.2", src = list(href = NULL, +version = "0.7.0", src = list(href = NULL, file = "deps"), meta = NULL, script = 'async-ideogram.js.map', stylesheet = NULL, head = NULL, attachment = NULL, package = "dashBio", all_files = FALSE, dynamic = TRUE), class = "html_dependency"), `dash_bio` = structure(list(name = "dash_bio", -version = "0.6.2", src = list(href = NULL, +version = "0.7.0", src = list(href = NULL, file = "deps"), meta = NULL, script = 'async-igv.js.map', stylesheet = NULL, head = NULL, attachment = NULL, package = "dashBio", all_files = FALSE, dynamic = TRUE), class = "html_dependency"), `dash_bio` = structure(list(name = "dash_bio", -version = "0.6.2", src = list(href = NULL, +version = "0.7.0", src = list(href = NULL, file = "deps"), meta = NULL, script = 'async-pileup.js.map', stylesheet = NULL, head = NULL, attachment = NULL, package = "dashBio", all_files = FALSE, dynamic = TRUE), class = "html_dependency"), `dash_bio` = structure(list(name = "dash_bio", -version = "0.6.2", src = list(href = NULL, +version = "0.7.0", src = list(href = NULL, file = "deps"), meta = NULL, script = 'async-moleculeviewer2.js.map', stylesheet = NULL, head = NULL, attachment = NULL, package = "dashBio", all_files = FALSE, dynamic = TRUE), class = "html_dependency"), `dash_bio` = structure(list(name = "dash_bio", -version = "0.6.2", src = list(href = NULL, +version = "0.7.0", src = list(href = NULL, file = "deps"), meta = NULL, script = 'async-moleculeviewer3.js.map', stylesheet = NULL, head = NULL, attachment = NULL, package = "dashBio", all_files = FALSE, dynamic = TRUE), class = "html_dependency"), `dash_bio` = structure(list(name = "dash_bio", -version = "0.6.2", src = list(href = NULL, +version = "0.7.0", src = list(href = NULL, file = "deps"), meta = NULL, script = 'async-needle.js.map', stylesheet = NULL, head = NULL, attachment = NULL, package = "dashBio", all_files = FALSE, dynamic = TRUE), class = "html_dependency"), `dash_bio` = structure(list(name = "dash_bio", -version = "0.6.2", src = list(href = NULL, +version = "0.7.0", src = list(href = NULL, file = "deps"), meta = NULL, script = 'async-nglmoleculeviewer.js.map', stylesheet = NULL, head = NULL, attachment = NULL, package = "dashBio", all_files = FALSE, dynamic = TRUE), class = "html_dependency"), `dash_bio` = structure(list(name = "dash_bio", -version = "0.6.2", src = list(href = NULL, +version = "0.7.0", src = list(href = NULL, file = "deps"), meta = NULL, script = 'async-onco.js.map', stylesheet = NULL, head = NULL, attachment = NULL, package = "dashBio", all_files = FALSE, dynamic = TRUE), class = "html_dependency"), `dash_bio` = structure(list(name = "dash_bio", -version = "0.6.2", src = list(href = NULL, +version = "0.7.0", src = list(href = NULL, file = "deps"), meta = NULL, script = 'async-sequence.js.map', stylesheet = NULL, head = NULL, attachment = NULL, package = "dashBio", all_files = FALSE, dynamic = TRUE), class = "html_dependency"), `dash_bio` = structure(list(name = "dash_bio", -version = "0.6.2", src = list(href = NULL, +version = "0.7.0", src = list(href = NULL, file = "deps"), meta = NULL, script = 'async-speck.js.map', stylesheet = NULL, head = NULL, attachment = NULL, package = "dashBio", all_files = FALSE, dynamic = TRUE), class = "html_dependency"), `dash_bio` = structure(list(name = "dash_bio", -version = "0.6.2", src = list(href = NULL, +version = "0.7.0", src = list(href = NULL, file = "deps"), meta = NULL, script = 'bundle.js', stylesheet = NULL, head = NULL, attachment = NULL, package = "dashBio", all_files = FALSE), class = "html_dependency"), `dash_bio` = structure(list(name = "dash_bio", -version = "0.6.2", src = list(href = NULL, +version = "0.7.0", src = list(href = NULL, file = "deps"), meta = NULL, script = 'bundle.js.map', stylesheet = NULL, head = NULL, attachment = NULL, package = "dashBio", all_files = FALSE, dynamic = TRUE), class = "html_dependency"), `dash_bio-shared` = structure(list(name = "dash_bio-shared", -version = "0.6.2", src = list(href = NULL, +version = "0.7.0", src = list(href = NULL, file = "deps"), meta = NULL, script = 'dash_bio-shared.js', stylesheet = NULL, head = NULL, attachment = NULL, package = "dashBio", all_files = FALSE, async = TRUE), class = "html_dependency"), `dash_bio-shared` = structure(list(name = "dash_bio-shared", -version = "0.6.2", src = list(href = NULL, +version = "0.7.0", src = list(href = NULL, file = "deps"), meta = NULL, script = 'dash_bio-shared.js.map', stylesheet = NULL, head = NULL, attachment = NULL, package = "dashBio", diff --git a/dash_bio/bundle.js b/dash_bio/bundle.js index 0460be21d..9f592b0f0 100644 --- a/dash_bio/bundle.js +++ b/dash_bio/bundle.js @@ -1,2 +1,2 @@ -window.dash_bio=function(t){function n(n){for(var e,o,a=n[0],i=n[1],u=0,s=[];u0&&(o=1/Math.sqrt(o),t[0]=n[0]*o,t[1]=n[1]*o),t},u.dot=function(t,n){return t[0]*n[0]+t[1]*n[1]},u.cross=function(t,n,e){var r=n[0]*e[1]-n[1]*e[0];return t[0]=t[1]=0,t[2]=r,t},u.lerp=function(t,n,e,r){var o=n[0],a=n[1];return t[0]=o+r*(e[0]-o),t[1]=a+r*(e[1]-a),t},u.random=function(t,n){n=n||1;var e=2*r()*Math.PI;return t[0]=Math.cos(e)*n,t[1]=Math.sin(e)*n,t},u.transformMat2=function(t,n,e){var r=n[0],o=n[1];return t[0]=e[0]*r+e[2]*o,t[1]=e[1]*r+e[3]*o,t},u.transformMat2d=function(t,n,e){var r=n[0],o=n[1];return t[0]=e[0]*r+e[2]*o+e[4],t[1]=e[1]*r+e[3]*o+e[5],t},u.transformMat3=function(t,n,e){var r=n[0],o=n[1];return t[0]=e[0]*r+e[3]*o+e[6],t[1]=e[1]*r+e[4]*o+e[7],t},u.transformMat4=function(t,n,e){var r=n[0],o=n[1];return t[0]=e[0]*r+e[4]*o+e[12],t[1]=e[1]*r+e[5]*o+e[13],t},u.forEach=(i=u.create(),function(t,n,e,r,o,a){var u,s;for(n||(n=2),e||(e=0),s=r?Math.min(r*n+e,t.length):t.length,u=e;u0&&(a=1/Math.sqrt(a),t[0]=n[0]*a,t[1]=n[1]*a,t[2]=n[2]*a),t},s.dot=function(t,n){return t[0]*n[0]+t[1]*n[1]+t[2]*n[2]},s.cross=function(t,n,e){var r=n[0],o=n[1],a=n[2],i=e[0],u=e[1],s=e[2];return t[0]=o*s-a*u,t[1]=a*i-r*s,t[2]=r*u-o*i,t},s.lerp=function(t,n,e,r){var o=n[0],a=n[1],i=n[2];return t[0]=o+r*(e[0]-o),t[1]=a+r*(e[1]-a),t[2]=i+r*(e[2]-i),t},s.random=function(t,n){n=n||1;var e=2*r()*Math.PI,o=2*r()-1,a=Math.sqrt(1-o*o)*n;return t[0]=Math.cos(e)*a,t[1]=Math.sin(e)*a,t[2]=o*n,t},s.transformMat4=function(t,n,e){var r=n[0],o=n[1],a=n[2],i=e[3]*r+e[7]*o+e[11]*a+e[15];return i=i||1,t[0]=(e[0]*r+e[4]*o+e[8]*a+e[12])/i,t[1]=(e[1]*r+e[5]*o+e[9]*a+e[13])/i,t[2]=(e[2]*r+e[6]*o+e[10]*a+e[14])/i,t},s.transformMat3=function(t,n,e){var r=n[0],o=n[1],a=n[2];return t[0]=r*e[0]+o*e[3]+a*e[6],t[1]=r*e[1]+o*e[4]+a*e[7],t[2]=r*e[2]+o*e[5]+a*e[8],t},s.transformQuat=function(t,n,e){var r=n[0],o=n[1],a=n[2],i=e[0],u=e[1],s=e[2],l=e[3],c=l*r+u*a-s*o,f=l*o+s*r-i*a,h=l*a+i*o-u*r,p=-i*r-u*o-s*a;return t[0]=c*l+p*-i+f*-s-h*-u,t[1]=f*l+p*-u+h*-i-c*-s,t[2]=h*l+p*-s+c*-u-f*-i,t},s.rotateX=function(t,n,e,r){var o=[],a=[];return o[0]=n[0]-e[0],o[1]=n[1]-e[1],o[2]=n[2]-e[2],a[0]=o[0],a[1]=o[1]*Math.cos(r)-o[2]*Math.sin(r),a[2]=o[1]*Math.sin(r)+o[2]*Math.cos(r),t[0]=a[0]+e[0],t[1]=a[1]+e[1],t[2]=a[2]+e[2],t},s.rotateY=function(t,n,e,r){var o=[],a=[];return o[0]=n[0]-e[0],o[1]=n[1]-e[1],o[2]=n[2]-e[2],a[0]=o[2]*Math.sin(r)+o[0]*Math.cos(r),a[1]=o[1],a[2]=o[2]*Math.cos(r)-o[0]*Math.sin(r),t[0]=a[0]+e[0],t[1]=a[1]+e[1],t[2]=a[2]+e[2],t},s.rotateZ=function(t,n,e,r){var o=[],a=[];return o[0]=n[0]-e[0],o[1]=n[1]-e[1],o[2]=n[2]-e[2],a[0]=o[0]*Math.cos(r)-o[1]*Math.sin(r),a[1]=o[0]*Math.sin(r)+o[1]*Math.cos(r),a[2]=o[2],t[0]=a[0]+e[0],t[1]=a[1]+e[1],t[2]=a[2]+e[2],t},s.forEach=function(){var t=s.create();return function(n,e,r,o,a,i){var u,s;for(e||(e=3),r||(r=0),s=o?Math.min(o*e+r,n.length):n.length,u=r;u1?0:Math.acos(o)},s.str=function(t){return"vec3("+t[0]+", "+t[1]+", "+t[2]+")"},void 0!==t&&(t.vec3=s);var l={create:function(){var t=new e(4);return t[0]=0,t[1]=0,t[2]=0,t[3]=0,t},clone:function(t){var n=new e(4);return n[0]=t[0],n[1]=t[1],n[2]=t[2],n[3]=t[3],n},fromValues:function(t,n,r,o){var a=new e(4);return a[0]=t,a[1]=n,a[2]=r,a[3]=o,a},copy:function(t,n){return t[0]=n[0],t[1]=n[1],t[2]=n[2],t[3]=n[3],t},set:function(t,n,e,r,o){return t[0]=n,t[1]=e,t[2]=r,t[3]=o,t},add:function(t,n,e){return t[0]=n[0]+e[0],t[1]=n[1]+e[1],t[2]=n[2]+e[2],t[3]=n[3]+e[3],t},subtract:function(t,n,e){return t[0]=n[0]-e[0],t[1]=n[1]-e[1],t[2]=n[2]-e[2],t[3]=n[3]-e[3],t}};l.sub=l.subtract,l.multiply=function(t,n,e){return t[0]=n[0]*e[0],t[1]=n[1]*e[1],t[2]=n[2]*e[2],t[3]=n[3]*e[3],t},l.mul=l.multiply,l.divide=function(t,n,e){return t[0]=n[0]/e[0],t[1]=n[1]/e[1],t[2]=n[2]/e[2],t[3]=n[3]/e[3],t},l.div=l.divide,l.min=function(t,n,e){return t[0]=Math.min(n[0],e[0]),t[1]=Math.min(n[1],e[1]),t[2]=Math.min(n[2],e[2]),t[3]=Math.min(n[3],e[3]),t},l.max=function(t,n,e){return t[0]=Math.max(n[0],e[0]),t[1]=Math.max(n[1],e[1]),t[2]=Math.max(n[2],e[2]),t[3]=Math.max(n[3],e[3]),t},l.scale=function(t,n,e){return t[0]=n[0]*e,t[1]=n[1]*e,t[2]=n[2]*e,t[3]=n[3]*e,t},l.scaleAndAdd=function(t,n,e,r){return t[0]=n[0]+e[0]*r,t[1]=n[1]+e[1]*r,t[2]=n[2]+e[2]*r,t[3]=n[3]+e[3]*r,t},l.distance=function(t,n){var e=n[0]-t[0],r=n[1]-t[1],o=n[2]-t[2],a=n[3]-t[3];return Math.sqrt(e*e+r*r+o*o+a*a)},l.dist=l.distance,l.squaredDistance=function(t,n){var e=n[0]-t[0],r=n[1]-t[1],o=n[2]-t[2],a=n[3]-t[3];return e*e+r*r+o*o+a*a},l.sqrDist=l.squaredDistance,l.length=function(t){var n=t[0],e=t[1],r=t[2],o=t[3];return Math.sqrt(n*n+e*e+r*r+o*o)},l.len=l.length,l.squaredLength=function(t){var n=t[0],e=t[1],r=t[2],o=t[3];return n*n+e*e+r*r+o*o},l.sqrLen=l.squaredLength,l.negate=function(t,n){return t[0]=-n[0],t[1]=-n[1],t[2]=-n[2],t[3]=-n[3],t},l.inverse=function(t,n){return t[0]=1/n[0],t[1]=1/n[1],t[2]=1/n[2],t[3]=1/n[3],t},l.normalize=function(t,n){var e=n[0],r=n[1],o=n[2],a=n[3],i=e*e+r*r+o*o+a*a;return i>0&&(i=1/Math.sqrt(i),t[0]=n[0]*i,t[1]=n[1]*i,t[2]=n[2]*i,t[3]=n[3]*i),t},l.dot=function(t,n){return t[0]*n[0]+t[1]*n[1]+t[2]*n[2]+t[3]*n[3]},l.lerp=function(t,n,e,r){var o=n[0],a=n[1],i=n[2],u=n[3];return t[0]=o+r*(e[0]-o),t[1]=a+r*(e[1]-a),t[2]=i+r*(e[2]-i),t[3]=u+r*(e[3]-u),t},l.random=function(t,n){return n=n||1,t[0]=r(),t[1]=r(),t[2]=r(),t[3]=r(),l.normalize(t,t),l.scale(t,t,n),t},l.transformMat4=function(t,n,e){var r=n[0],o=n[1],a=n[2],i=n[3];return t[0]=e[0]*r+e[4]*o+e[8]*a+e[12]*i,t[1]=e[1]*r+e[5]*o+e[9]*a+e[13]*i,t[2]=e[2]*r+e[6]*o+e[10]*a+e[14]*i,t[3]=e[3]*r+e[7]*o+e[11]*a+e[15]*i,t},l.transformQuat=function(t,n,e){var r=n[0],o=n[1],a=n[2],i=e[0],u=e[1],s=e[2],l=e[3],c=l*r+u*a-s*o,f=l*o+s*r-i*a,h=l*a+i*o-u*r,p=-i*r-u*o-s*a;return t[0]=c*l+p*-i+f*-s-h*-u,t[1]=f*l+p*-u+h*-i-c*-s,t[2]=h*l+p*-s+c*-u-f*-i,t},l.forEach=function(){var t=l.create();return function(n,e,r,o,a,i){var u,s;for(e||(e=4),r||(r=0),s=o?Math.min(o*e+r,n.length):n.length,u=r;u.999999?(t[0]=0,t[1]=0,t[2]=0,t[3]=1,t):(s.cross(d,n,e),t[0]=d[0],t[1]=d[1],t[2]=d[2],t[3]=1+r,y.normalize(t,t))}),y.setAxes=(v=h.create(),function(t,n,e,r){return v[0]=e[0],v[3]=e[1],v[6]=e[2],v[1]=r[0],v[4]=r[1],v[7]=r[2],v[2]=-n[0],v[5]=-n[1],v[8]=-n[2],y.normalize(t,y.fromMat3(t,v))}),y.clone=l.clone,y.fromValues=l.fromValues,y.copy=l.copy,y.set=l.set,y.identity=function(t){return t[0]=0,t[1]=0,t[2]=0,t[3]=1,t},y.setAxisAngle=function(t,n,e){e*=.5;var r=Math.sin(e);return t[0]=r*n[0],t[1]=r*n[1],t[2]=r*n[2],t[3]=Math.cos(e),t},y.add=l.add,y.multiply=function(t,n,e){var r=n[0],o=n[1],a=n[2],i=n[3],u=e[0],s=e[1],l=e[2],c=e[3];return t[0]=r*c+i*u+o*l-a*s,t[1]=o*c+i*s+a*u-r*l,t[2]=a*c+i*l+r*s-o*u,t[3]=i*c-r*u-o*s-a*l,t},y.mul=y.multiply,y.scale=l.scale,y.rotateX=function(t,n,e){e*=.5;var r=n[0],o=n[1],a=n[2],i=n[3],u=Math.sin(e),s=Math.cos(e);return t[0]=r*s+i*u,t[1]=o*s+a*u,t[2]=a*s-o*u,t[3]=i*s-r*u,t},y.rotateY=function(t,n,e){e*=.5;var r=n[0],o=n[1],a=n[2],i=n[3],u=Math.sin(e),s=Math.cos(e);return t[0]=r*s-a*u,t[1]=o*s+i*u,t[2]=a*s+r*u,t[3]=i*s-o*u,t},y.rotateZ=function(t,n,e){e*=.5;var r=n[0],o=n[1],a=n[2],i=n[3],u=Math.sin(e),s=Math.cos(e);return t[0]=r*s+o*u,t[1]=o*s-r*u,t[2]=a*s+i*u,t[3]=i*s-a*u,t},y.calculateW=function(t,n){var e=n[0],r=n[1],o=n[2];return t[0]=e,t[1]=r,t[2]=o,t[3]=Math.sqrt(Math.abs(1-e*e-r*r-o*o)),t},y.dot=l.dot,y.lerp=l.lerp,y.slerp=function(t,n,e,r){var o,a,i,u,s,l=n[0],c=n[1],f=n[2],h=n[3],p=e[0],d=e[1],m=e[2],g=e[3];return(a=l*p+c*d+f*m+h*g)<0&&(a=-a,p=-p,d=-d,m=-m,g=-g),1-a>1e-6?(o=Math.acos(a),i=Math.sin(o),u=Math.sin((1-r)*o)/i,s=Math.sin(r*o)/i):(u=1-r,s=r),t[0]=u*l+s*p,t[1]=u*c+s*d,t[2]=u*f+s*m,t[3]=u*h+s*g,t},y.invert=function(t,n){var e=n[0],r=n[1],o=n[2],a=n[3],i=e*e+r*r+o*o+a*a,u=i?1/i:0;return t[0]=-e*u,t[1]=-r*u,t[2]=-o*u,t[3]=a*u,t},y.conjugate=function(t,n){return t[0]=-n[0],t[1]=-n[1],t[2]=-n[2],t[3]=n[3],t},y.length=l.length,y.len=y.length,y.squaredLength=l.squaredLength,y.sqrLen=y.squaredLength,y.normalize=l.normalize,y.fromMat3=function(t,n){var e,r=n[0]+n[4]+n[8];if(r>0)e=Math.sqrt(r+1),t[3]=.5*e,e=.5/e,t[0]=(n[5]-n[7])*e,t[1]=(n[6]-n[2])*e,t[2]=(n[1]-n[3])*e;else{var o=0;n[4]>n[0]&&(o=1),n[8]>n[3*o+o]&&(o=2);var a=(o+1)%3,i=(o+2)%3;e=Math.sqrt(n[3*o+o]-n[3*a+a]-n[3*i+i]+1),t[o]=.5*e,e=.5/e,t[3]=(n[3*a+i]-n[3*i+a])*e,t[a]=(n[3*a+o]+n[3*o+a])*e,t[i]=(n[3*i+o]+n[3*o+i])*e}return t},y.str=function(t){return"quat("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+")"},void 0!==t&&(t.quat=y)}(e.exports)}()},function(t,n,e){"use strict";var r=e(8),o=e(7),a=e(24);function i(t,n,e){return Math.min(n,Math.max(t,e))}t.exports.new=function(){return{aspect:1,zoom:.125,translation:{x:0,y:0},atomScale:.6,relativeAtomScale:1,bondScale:.5,rotation:r.mat4.create(),ao:.75,aoRes:256,brightness:.5,outline:0,spf:32,bonds:!1,bondThreshold:1.2,bondShade:.5,atomShade:.5,resolution:768,dofStrength:0,dofPosition:.5,fxaa:1}},t.exports.center=function(t,n){for(var e=-1/0,a=1/0,i=-1/0,u=1/0,s=0;sn&&(n=u,t.farAtom=r)}return t.farAtom});t.exports.getRadius=function(t){var n=u(t),e=a.MAX_ATOM_RADIUS,r=2.5*Math.sqrt(e*e+e*e+e*e);return Math.sqrt(n.x*n.x+n.y*n.y+n.z*n.z)+r}},function(t,n,e){var o;o=function(){return function(t){var n={};function e(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return t[r].call(o.exports,o,o.exports,e),o.loaded=!0,o.exports}return e.m=t,e.c=n,e.p="",e(0)}([function(t,n,e){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.rnaPlot=n.RNAGraph=void 0;var o=e(1);Object.defineProperty(n,"RNAGraph",{enumerable:!0,get:function(){return o.RNAGraph}});var a=e(3);Object.defineProperty(n,"rnaPlot",{enumerable:!0,get:function(){return a.rnaPlot}}),n.FornaContainer=function(t,n){var e=this;if(e.options={displayAllLinks:!1,labelInterval:10,applyForce:!0,chargeDistance:110,friction:.35,middleCharge:-30,otherCharge:-30,linkDistanceMultiplier:15,initialSize:null,layout:"standard-polygonal",allowPanningAndZooming:!0,transitionDuration:500,resizeSvgOnResize:!0},arguments.length>1)for(var a in n)e.options.hasOwnProperty(a)&&(e.options[a]=n[a]);null!==e.options.initialSize?(e.options.svgW=e.options.initialSize[0],e.options.svgH=e.options.initialSize[1]):(e.options.svgW=800,e.options.svgH=800),l.default.scale.category20();var u=null,s=null,p=l.default.scale.linear().domain([0,e.options.svgW]).range([0,e.options.svgW]),d=l.default.scale.linear().domain([0,e.options.svgH]).range([0,e.options.svgH]),m=e.graph={nodes:[],links:[]};function g(t){return Math.sqrt(t[0]*t[0]+t[1]*t[1])}function v(t){var n=t,e=t.prevNode;if(null!==e&&t.linked){var r=[-(n.x-e.x),-(n.y-e.y)],o=[-(r=[r[0]/g(r),r[1]/g(r)])[1],r[0]],a=[t.radius*r[0],t.radius*r[1]],i="M"+(a[0]+6*(r[0]+o[0])/2)+","+(a[1]+6*(r[1]+o[1])/2)+"L"+a[0]+","+a[1]+"L"+(a[0]+6*(r[0]-o[0])/2)+","+(a[1]+6*(r[1]-o[1])/2);l.default.select(this).attr("d",i)}}function y(t){return"basepair"==t.linkType||"backbone"==t.linkType||"pseudoknot"==t.linkType||"label_link"==t.linkType||"external"==t.linkType||"chain_chain"==t.linkType}function b(t,n,e){if(t.hasOwnProperty(n.num)){var r=parseFloat(t[n.num]);return isNaN(r)?t[n.num]:e(r)}return"white"}function x(){}function M(){u&&(mpos=l.default.mouse(A.node()),N.attr("x1",u.x).attr("y1",u.y).attr("x2",mpos[0]).attr("y2",mpos[1]))}function w(){u&&N.attr("class","drag_line_hidden"),O()}e.linkStrengths={pseudoknot:0,proteinChain:0,chainChain:0,intermolecule:10,external:0,other:10},e.displayParameters={displayBackground:"true",displayNumbering:"true",displayNodeOutline:"true",displayNodeLabel:"true",displayLinks:"true",displayPseudoknotLinks:"true",displayProteinLinks:"true"},e.colorScheme="structure",e.customColors={},e.animation=e.options.applyForce,e.deaf=!1,e.rnas={},e.extraLinks=[],Array.prototype.equals=function(t){if(!t)return!1;if(this.length!=t.length)return!1;for(var n=0,e=this.length;n0?l.default.max(e.graph.nodes.map((function(t){return t.x}))):0,o=l.default.min(t.nodes.map((function(t){return t.x}))),t.nodes.forEach((function(t){t.x+=r-o+20,t.px+=r-o}))),t.nodes.forEach((function(n){n.rna=t})),e.rnas[t.uid]=t,e.recalculateGraph(),e.update(),e.centerView(),t},e.transitionRNA=function(t,n){var r=e.options.transitionDuration,o={uids:e.graph.nodes.filter((function(t){return"nucleotide"==t.nodeType})).map((function(t){return t.uid}))},a=e.createInitialLayout(t,o),i=T.selectAll("g.gnode").data(a.nodes,Y);0===(r=e.options.transitionDuration)?i.attr("transform",(function(t){return"translate("+[t.x,t.y]+")"})):i.transition().attr("transform",(function(t){return"translate("+[t.x,t.y]+")"})).duration(r);var u=E.selectAll("line.link").data(a.links.filter(y),X),s=e.createNewNodes(i.enter()).attr("transform",(function(t){return void 0!==t.x&&void 0!==t.y?"translate("+[0,0]+")":""}));0===r?i.exit().remove():i.exit().transition().attr("transform",(function(t){return void 0!==t.x&&void 0!==t.y?"translate("+[0,0]+")":""})),i.select("path").each(v),e.graph.nodes=i.data(),e.updateStyle(),e.centerView(r),u.exit().remove(),0===r?(u.attr("x1",(function(t){return t.source.x})).attr("y1",(function(t){return t.source.y})).attr("x2",(function(t){return t.target.x})).attr("y2",(function(t){return t.target.y})),e.createNewLinks(u.enter()),e.graph.links=u.data(),e.updateStyle()):u.transition().attr("x1",(function(t){return t.source.x})).attr("y1",(function(t){return t.source.y})).attr("x2",(function(t){return t.target.x})).attr("y2",(function(t){return t.target.y})).duration(r).call((function(t,n){0===t.size()&&setTimeout(n,r);var e=0;t.each((function(){++e})).each("end",(function(){--e||n.apply(this,arguments)}))}),(function(){e.createNewLinks(u.enter()),e.graph.links=u.data(),e.updateStyle(),void 0!==n&&n()})),0===r?s.attr("transform",(function(t){return void 0!==t.x&&void 0!==t.y?"translate("+[t.x,t.y]+")":""})):s.transition().attr("transform",(function(t){return void 0!==t.x&&void 0!==t.y?"translate("+[t.x,t.y]+")":""}))},e.recalculateGraph=function(){for(var t in e.graph.nodes=[],e.graph.links=[],e.rnas)e.graph.nodes=e.graph.nodes.concat(e.rnas[t].nodes),e.graph.links=e.graph.links.concat(e.rnas[t].links);for(var n={},r=0;r0?(maxX=l.default.max(e.graph.nodes.map((function(t){return t.x}))),maxY=l.default.max(e.graph.nodes.map((function(t){return t.y})))):(maxX=0,maxY=0),t.nodes.forEach((function(t){t.rna.uid in e.rnas||(e.rnas[t.rna.uid]=t.rna),t.x+=maxX,t.px+=maxX})),r=new o.RNAGraph("",""),r.nodes=t.nodes,r.links=t.links,e.recalculateGraph(),e.update(),e.centerView()},e.addCustomColors=function(t){e.customColors=t},e.addCustomColorsText=function(t){var n=new f.ColorScheme(t);e.customColors=n.colorsJson,e.changeColorScheme("custom")},e.clearNodes=function(){e.graph.nodes=[],e.graph.links=[],e.rnas={},e.extraLinks=[],e.update()},e.toJSON=function(){var t={rnas:e.rnas,extraLinks:e.extraLinks};return JSON.stringify(t,(function(t,n){return"rna"==t?void 0:n}),"\t")},e.fromJSON=function(t){var n,a;try{var i=JSON.parse(t);n=i.rnas,a=i.extraLinks}catch(t){throw t}for(var u in n)"rna"==n[u].type?(r=new o.RNAGraph,r.seq=n[u].seq,r.dotbracket=n[u].dotbracket,r.circular=n[u].circular,r.pairtable=n[u].pairtable,r.uid=n[u].uid,r.structName=n[u].structName,r.nodes=n[u].nodes,r.links=n[u].links,r.rnaLength=n[u].rnaLength,r.elements=n[u].elements,r.nucsToNodes=n[u].nucsToNodes,r.pseudoknotPairs=n[u].pseudoknotPairs):(r=new ProteinGraph,r.size=n[u].size,r.nodes=n[u].nodes,r.uid=n[u].uid),e.addRNAJSON(r,!1);a.forEach((function(t){e.extraLinks.push(t)})),e.recalculateGraph(),e.update()},e.setSize=function(){if(null==e.options.initialSize){var n=l.default.select(t).node().offsetHeight,r=l.default.select(t).node().offsetWidth;e.options.svgW=r,e.options.svgH=n,p.range([0,r]).domain([0,r]),d.range([0,n]).domain([0,n]),e.zoomer.x(p).y(d),e.brusher.x(p).y(d),e.centerView(),e.options.resizeSvgOnResize&&_.attr("width",r).attr("height",n)}},e.setOutlineColor=function(t){T.selectAll("g.gnode").select("[node_type=nucleotide]").style("fill",t)},e.changeColorScheme=function(t){T.selectAll("[node_type=protein]").classed("protein",!0).attr("r",(function(t){return t.radius})),T.selectAll("g.gnode"),T.selectAll("g.gnode").selectAll("circle");var n=T.selectAll("g.gnode").select("[node_type=nucleotide]");if(e.colorScheme=t,"sequence"==t){var r=l.default.scale.ordinal().range(["#dbdb8d","#98df8a","#ff9896","#aec7e8","#aec7e8"]).domain(["A","C","G","U","T"]);n.style("fill",(function(t){return r(t.name)}))}else"structure"==t?(r=l.default.scale.category10().domain(["s","m","i","e","t","h","x"]).range(["lightgreen","#ff9896","#dbdb8d","lightsalmon","lightcyan","lightblue","transparent"]),n.style("fill",(function(t){return r(t.elemType)}))):"positions"==t?n.style("fill",(function(t){return l.default.scale.linear().range(["#98df8a","#dbdb8d","#ff9896"]).interpolate(l.default.interpolateLab).domain([1,1+(t.rna.rnaLength-1)/2,t.rna.rnaLength])(t.num)})):"custom"==t&&(void 0!==e.customColors&&"domain"in e.customColors&&"range"in e.customColors&&(r=l.default.scale.linear().interpolate(l.default.interpolateLab).domain(e.customColors.domain).range(e.customColors.range)),n.style("fill",(function(t){return void 0!==e.customColors&&e.customColors.hasOwnProperty("colorValues")?e.customColors.colorValues.hasOwnProperty(t.structName)&&e.customColors.colorValues[t.structName].hasOwnProperty(t.num)?b(e.customColors.colorValues[t.structName],t,r):e.customColors.colorValues.hasOwnProperty("")?b(e.customColors.colorValues[""],t,r):"white":"white"})))},window.addEventListener("resize",e.setSize,!1),e.zoomer=l.default.behavior.zoom().scaleExtent([.1,10]).x(p).y(d).on("zoomstart",R).on("zoom",P),l.default.select(t).select("svg").remove();var _=l.default.select(t).classed("forna-container",!0).attr("tabindex",1).on("keydown.brush",B).on("keyup.brush",I).each((function(){this.focus()})).append("svg:svg").attr("width",e.options.svgW).attr("height",e.options.svgH).attr("id","plotting-area");e.options.svg=_;var k=_.append("svg:g").on("mousemove",M).on("mousedown",x).on("mouseup",w);e.options.allowPanningAndZooming&&k.call(e.zoomer);var S=k.append("g").datum((function(){return{selected:!1,previouslySelected:!1}})).attr("class","brush"),A=k.append("svg:g"),E=A.append("svg:g"),T=A.append("svg:g");function R(){var t=T.selectAll("g.gnode").selectAll(".outline_node");t.each((function(t){t.selected=!1,t.previouslySelected=!1})),t.classed("selected",!1)}function P(){A.attr("transform","translate("+l.default.event.translate+") scale("+l.default.event.scale+")")}e.brusher=l.default.svg.brush().x(p).y(d).on("brushstart",(function(t){T.selectAll("g.gnode").selectAll(".outline_node").each((function(t){t.previouslySelected=L&&t.selected}))})).on("brush",(function(){var t=T.selectAll("g.gnode").selectAll(".outline_node"),n=l.default.event.target.extent();t.classed("selected",(function(t){return t.selected=e.options.applyForce&&t.previouslySelected^(n[0][0]<=t.x&&t.xr||sa||l-1){if(t.source.rna==t.target.rna){var n=t.source.rna;n.addPseudoknots(),n.pairtable[t.source.num]=0,n.pairtable[t.target.num]=0,V(n)}else extraLinkIndex=e.extraLinks.indexOf(t),e.extraLinks.splice(extraLinkIndex,1);e.recalculateGraph()}e.update()},G=function(t){C&&(t.linkType in{backbone:!0,fake:!0,fake_fake:!0,label_link:!0}||H(t))};e.addLink=function(t){t.source.rna==t.target.rna?(r=t.source.rna,r.pairtable[t.source.num]=t.target.num,r.pairtable[t.target.num]=t.source.num,V(r)):(t.linkType="intermolecule",e.extraLinks.push(t)),e.recalculateGraph(),e.update()};var W=function(t){l.default.event.defaultPrevented||(L||T.selectAll("g.gnode").selectAll(".outline_node").classed("selected",(function(t){return t.selected=e.options.applyForce&&(t.previouslySelected=!1)})),l.default.select(this).select("circle").classed("selected",t.selected=e.options.applyForce&&!t.previouslySelected))},Z=function(t){if(u){if((s=t)==u)return void O();var n={source:u,target:s,linkType:"basepair",value:1,uid:generateUUID()};for(i=0;i0&&"*"==u.dotbracket[u.dotbracket.length-1]&&(u.dotbracket=u.dotbracket.slice(0,u.dotbracket.length-1),u.circular=!0),u.uid=a(),u.elements=[],u.pseudoknotPairs=[],u.nucsToNodes={},u.addUids=function(t){for(var n=u.nodes.filter((function(t){return"nucleotide"==t.nodeType})),e=0;e=0;)n.push(e),t=t.substring(0,e)+"oo"+t.substring(e+1,t.length);return{targetString:t,breaks:n}};var s=u.removeBreaks(u.dotbracket);u.dotbracket=s.targetString,u.dotBracketBreaks=s.breaks,s=u.removeBreaks(u.seq),u.seq=s.targetString,u.seqBreaks=s.breaks,u.calculateStartNumberArray=function(){u.startNumberArray=[];for(var t=0;t=0&&(e=!0);e?u.elements[n][2].map((function(t){0!=t&&(u.nodes[t-1].elemType="e")})):u.elements[n][2].map((function(t){0!=t&&(u.nodes[t-1].elemType=u.elements[n][0])}))}return u},u.getPositions=function(t){for(var n=[],e=u.nodes.filter((function(n){return n.nodeType==t})),r=0;r=4})),e=0;eu.dotbracket.length)){u.links.push({source:u.nodes[t[f]-1],target:u.nodes[u.nodes.length-1],linkType:"fake",value:e,uid:a()}),t.length>4&&u.links.push({source:u.nodes[t[f]-1],target:u.nodes[t[(f+Math.floor(t.length/2))%t.length]-1],linkType:"fake",value:2*e,uid:a()});var h=3.14159*(t.length-2)/t.length,p=2*Math.cos(1.570795-h/2);u.links.push({source:u.nodes[t[f]-1],target:u.nodes[t[(f+2)%t.length]-1],linkType:"fake",value:p});var d=u.nodes[t[f]-1];"x"in d&&(s+=d.x,l+=d.y,c+=1)}return c>0&&(i.x=s/c,i.y=l/c,i.px=i.x,i.py=i.y),u},u.connectFakeNodes=function(){for(var t={},n=u.nodes.filter((function(t){return"middle"==t.nodeType})),e=new Set,r=1;r<=u.nodes.length;r++)t[r]=[];for(r=0;r=0||u.dotBracketBreaks.indexOf(e-2)>=0)&&(i=""),u.nodes.push({name:i,num:e+u.startNumberArray[e-1]-1,radius:5,rna:u,nodeType:"nucleotide",structName:u.structName,elemType:n[e],uid:a(),linked:!1})}for(e=0;e1&&-1===u.dotBracketBreaks.indexOf(e-1)&&-1==u.dotBracketBreaks.indexOf(e-2)&&-1==u.dotBracketBreaks.indexOf(e-3)&&(u.links.push({source:u.nodes[e-2],target:u.nodes[e-1],linkType:"backbone",value:1,uid:a()}),u.nodes[e-1].linked=!0);for(e=0;er)return[];for(;0===t[e];e++)i.push(e);for(;0===t[r];r--)s.push(r);if(e>r){if(i.push(e),0===n)return[["e",n,i.sort(o)]];for(var l=!1,c=[],f=[],h=0;h=0&&(l=!0);return[["h",n,i.sort(o)]]}if(t[e]!=r){var p=i;for(h=e,p.push(h);h<=r;){for(a=a.concat(u.ptToElements(t,n,h,t[h])),p.push(t[h]),h=t[h]+1;0===t[h]&&h<=r;h++)p.push(h);p.push(h)}return p.pop(),(p=p.concat(s)).length>0&&(0===n?a.push(["e",n,p.sort(o)]):a.push(["m",n,p.sort(o)])),a}t[e]===r&&(i.push(e),s.push(r),i.concat(s).length>4&&(0===n?a.push(["e",n,i.concat(s).sort(o)]):a.push(["i",n,i.concat(s).sort(o)])));for(var d=[];t[e]===r&&e0)){eloop=externalLoop[0],nucs=eloop[2].sort(o),prev=nucs[0],hloop=!0,numGreater=0;for(var t=1;t1&&(numGreater+=1),prev=nucs[t];1==numGreater?eloop[0]="h":2==numGreater?eloop[0]="i":eloop[0]="m"}return u},u.reassignLinkUids=function(){for(var t=0;t1&&(u.pseudoknotPairs=u.pseudoknotPairs.concat(r.rnaUtilities.removePseudoknotsFromPairtable(u.pairtable))),u},u.addPseudoknots=function(){for(var t=u.pairtable,n=u.pseudoknotPairs,e=0;e0&&u.recalculateElements()}void 0===String.prototype.trim&&(String.prototype.trim=function(){return String(this).replace(/^\s+|\s+$/g,"")})},function(t,n,e){t.exports=function(t){function n(r){if(e[r])return e[r].exports;var o=e[r]={exports:{},id:r,loaded:!1};return t[r].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var e={};return n.m=t,n.c=e,n.p="",n(0)}([function(t,n,e){t.exports=e(1)},function(t,n){"use strict";function e(){var t=this;t.bracketLeft="([{abcdefghijklmnopqrstuvwxyz".split(""),t.inverseBrackets=function(t){for(var n={},e=0;e=r;r++){e[r]=new Array(n+1);for(var o=r;n>=o;o++)e[r][o]=0}var a=0;for(r=n-0-1;r>0;r--)for(o=r+0+1;n>=o;o++){a=e[r][o-1];for(var i=o-0-1;i>=r;i--)t[i]===o&&(a=Math.max(a,(i>r?e[r][i-1]:0)+1+(o-i-1>0?e[i+1][o-1]:0)));e[r][o]=a}return a=e[1][n],e},t.backtrackMaximumMatching=function(n,e){var r=Array.apply(null,Array(n.length)).map((function(){return 0}));return t.mmBt(n,r,e,1,n.length-1),r},t.mmBt=function(n,e,r,o,a){var i=n[o][a];if(!(0>a-o-1)){if(n[o][a-1]==i)return void t.mmBt(n,e,r,o,a-1);for(var u=a-0-1;u>=o;u--)if(r[a]===u&&(u>o?n[o][u-1]:0)+(a-u-1>0?n[u+1][a-1]:0)+1==i)return e[u]=a,e[a]=u,u>o&&t.mmBt(n,e,r,o,u-1),void t.mmBt(n,e,r,u+1,a-1);console.log("FAILED!!!"+o+","+a+": backtracking failed!")}},t.dotbracketToPairtable=function(n){var e=Array.apply(null,new Array(n.length+1)).map(Number.prototype.valueOf,0);e[0]=n.length;for(var r={},o=0;o0)throw"Unmatched base at position "+r[c][0];return e},t.insertIntoStack=function(t,n,e){for(var r=0;t[r].length>0&&t[r][t[r].length-1]r?t.bracketLeft[t.insertIntoStack(e,r,n[r])]:t.bracketRight[t.deleteFromStack(e,r)]}return a},t.findUnmatched=function(n,e,r){for(var o=[],a=[],i=e,u=r,s=e;r>=s;s++)0!==n[s]&&(n[s]r)&&a.push([s,n[s]]);for(s=i;u>=s;s++){for(;0===n[s]&&u>=s;)s++;for(r=n[s];n[s]===r;)s++,r--;o=o.concat(t.findUnmatched(n,s,r))}return a.length>0&&o.push(a),o},t.removePseudoknotsFromPairtable=function(n){for(var e=t.maximumMatching(n),r=t.backtrackMaximumMatching(e,n),o=[],a=1;aa)return[];for(;0===n[o];o++)s.push(o);for(;0===n[a];a--)l.push(a);if(o>a){if(s.push(o),0===e)return[["e",e,s.sort(r)]];for(var c=!1,f=[],h=[],p=0;p=0&&(c=!0);return[["h",e,s.sort(r)]]}if(n[o]!=a){var d=s;for(p=o,d.push(p);a>=p;){for(u=u.concat(t.ptToElements(n,e,p,n[p],i)),d.push(n[p]),p=n[p]+1;0===n[p]&&a>=p;p++)d.push(p);d.push(p)}return d.pop(),(d=d.concat(l)).length>0&&(0===e?u.push(["e",e,d.sort(r)]):u.push(["m",e,d.sort(r)])),u}if(n[o]===a){s.push(o),l.push(a);var m=s.concat(l);m.length>4&&(0===e?u.push(["e",e,s.concat(l).sort(r)]):u.push(["i",e,s.concat(l).sort(r)]))}for(var g=[];n[o]===a&&a>o;)g.push(o),g.push(a),o+=1,a-=1,e+=1;return s=[o-1],l=[a+1],u.push(["s",e,g.sort(r)]),u.concat(t.ptToElements(n,e,o,a,i))}}Object.defineProperty(n,"__esModule",{value:!0}),n.arraysEqual=function(t,n){if(t===n)return!0;if(null===t||null===n)return!1;if(t.length!=n.length)return!1;for(var e=0;e=u;u++)e.push(u);else console.log("Malformed range (too many dashes):",t)}return e},n.parseColorText=function(t){for(var e=t.split("\n"),r="",o=1,a={colorValues:{"":{}},range:["white","steelblue"]},i=[],u=0;u"!=e[u][0])for(var s=e[u].trim().split(/[\s]+/),l=0;lt&&(r=t),t>o&&(o=t));for(a in n.colorsJson.colorValues[e])"number"==typeof(t=n.colorsJson.colorValues[e][a])&&(n.colorsJson.colorValues[e][a]=(t-r)/(o-r))}return n},n.parseColorText(n.colorsText),n};var r=function(t,n){return t-n};n.rnaUtilities=new e}])},function(t,n,e){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.rnaPlot=function(){var t,n,e={width:400,height:400,nucleotideRadius:5,rnaEdgePadding:0,labelInterval:0,showNucleotideLabels:!0,startNucleotideNumber:1,bundleExternalLinks:!1};function a(a){a.each((function(a){var i=new r.RNAGraph(a.sequence,a.structure,a.name).recalculateElements().elementsToJson().addName(a.name);a.rnaGraph=i;for(var u=(new o.NAView).naview_xy_coordinates(i.pairtable),s=[],l=0;l2&&void 0!==arguments[2]?arguments[2]:"",i=d3.extent(r),u=d3.extent(o),s=30;""!=a&&(u[1]+=s),i[0]-=e.nucleotideRadius+e.rnaEdgePadding,u[0]-=e.nucleotideRadius+e.rnaEdgePadding,i[1]+=e.nucleotideRadius+e.rnaEdgePadding,u[1]+=e.nucleotideRadius+e.rnaEdgePadding;var l,c=i[1]-i[0],f=u[1]-u[0],h=c-e.width,p=f-e.height;function d(t,n,e){var r=(t.range()[1]-t.range()[0])/(t.domain()[1]-t.domain()[0]),o=(n[1]-n[0])*r,a=(e[1]-e[0]-o)/2;return{scaleFactor:r,scale:d3.scale.linear().domain(n).range([e[0]+a,e[1]-a])}}return h>p?(l=d(t=d3.scale.linear().domain(i).range([0,e.width]),u,[0,e.height]),n=l.scale):(l=d(n=d3.scale.linear().domain(u).range([0,e.height]),i,[0,e.width]),t=l.scale),t.range()[0],t.domain()[0],n.range()[0],n.domain()[0],"translate("+-(t.domain()[0]*l.scaleFactor-t.range()[0])+","+-(n.domain()[0]*l.scaleFactor-n.range()[0])+")scale("+l.scaleFactor+")"}(i.nodes.map((function(t){return t.x})),i.nodes.map((function(t){return t.y}))),f=d3.select(this).append("g").attr("transform",c),h=i.nodes.filter((function(t){return"nucleotide"==t.nodeType})),p=i.nodes.filter((function(t){return"label"==t.nodeType})),d=i.links;!function(t,n){n=n.filter((function(t){return null!==t.source&&null!==t.target})),t.selectAll(".rna-link").data(n).enter().append("svg:line").attr("x1",(function(t){return t.source.x})).attr("x2",(function(t){return t.target.x})).attr("y1",(function(t){return t.source.y})).attr("y2",(function(t){return t.target.y})).attr("link-type",(function(t){return t.linkType})).attr("extra-link-type",(function(t){return t.extraLinkType})).classed("rna-link",!0)}(f,d),function(t,n){var r=t.selectAll(".rna-base").data(n).enter().append("svg:g").attr("transform",(function(t){return"translate("+t.x+","+t.y+")"}));r.append("svg:circle").attr("r",e.nucleotideRadius).classed("rna-base",!0),e.showNucleotideLabels&&r.append("svg:text").text((function(t){return t.name})).attr("text-anchor","middle").attr("dominant-baseline","central").classed("nucleotide-label",!0).append("svg:title").text((function(t){return t.struct_name+":"+t.num}))}(f,h),function(t,n){t.selectAll(".rnaLabel").data(n).enter().append("svg:g").attr("transform",(function(t){return"translate("+t.x+","+t.y+")"})).append("svg:text").text((function(t){return t.name})).attr("text-anchor","middle").attr("font-weight","bold").attr("dominant-baseline","central").classed("number-label",!0)}(f,p),function(r,o){r.append("svg:text").attr("transform","translate("+t.invert(e.width/2)+","+n.invert(e.height)+")").attr("dy",-10).classed("rna-name",!0).text(o)}(f,a.name),e.bundleExternalLinks&&function(t,n){var e={},r=[];n=n.filter((function(t){return"correct"==t.linkType||"incorrect"==t.linkType||"extra"==t.linkType})),t.selectAll("[link-type=extra]").remove();for(var o=0;oh);if(g=v-2,v>=2&&(i[d+1+g]+=f,i[m-1-g]+=f,i[d]+=f,i[m]+=f,v>2))for(;g>=1;g--)i[d+g]=Math.PI,i[m-g]=Math.PI;s[++c]=v,h<=p&&t(h,p,r)}else n++,w++,k++;for(M=Math.PI*(w-2)/w,S[++_]=e,y=o<0?0:o,b=1;b<=_;b++){for(x=S[b]-y,g=0;g<=x;g++)i[y+g]+=M;if(b>_)break;y=S[++b]}u[++l]=k})(0,e+1,t),u[l]-=2,r=0,o[0]=100,a[0]=100;var h=[];for(h.push([o[0],a[0]]),n=1;n=0&&(1==++n?e=r:e>r&&(e=r));return t.setMark(!1),e+1}s.prototype.naview_xy_coordinates=function(t){var n,e=[],r=[];if(0===t.length||0===t[0])return 0;this.nbase=t[0],this.bases=[];for(var o=0;on&&e++;0==e&&(this.bases[1].setMate(this.nbase),this.bases[this.nbase].setMate(1))},s.prototype.find_regions=function(){var t,n=null,e=null;t=this.nbase+1;var r=[];for(n=0;nthis.nbase&&(n=0)}while(n!=t);return i},s.prototype.find_central_loop=function(){var t=new u.Loop,n=null,e=null,r=null;for(l.bind(this)(),n=0,e=-1,r=0;rn?(e=t.getDepth(),n=t.getNconnection(),this.root=t):t.getDepth()>e&&t.getNconnection()==n&&(e=t.getDepth(),this.root=t)},s.prototype.traverse_loop=function(t,n){var e,r,o,a,i,u,s,l,c,f,h,p,d,m,g,v,y,b,x,M,w,_,k,S,A,E,T,R,P,N,O,C,L,U,D,j,z,q,F,B,I,X,Y,V,H,G,W,Z,J,$,K,Q,tt,nt,et,rt,ot,at,it,ut,st,lt,ct,ft,ht,pt,dt,mt,gt,vt=0;u=2*Math.PI/(this.nbase+1),b=null,N=-1;var yt=0;for(k=0;null!=(v=t.getConnection(yt));yt++,k++)e=-Math.sin(u*v.getStart()),r=Math.cos(u*v.getStart()),o=-Math.sin(u*v.getEnd()),a=Math.cos(u*v.getEnd())-r,i=e-o,s=Math.sqrt(a*a+i*i),v.setXrad(a/s),v.setYrad(i/s),v.setAngle(Math.atan2(i,a)),v.getAngle()<0&&v.setAngle(v.getAngle()+2*Math.PI),null!=n&&n.getRegion()==v.getRegion()&&(b=v,N=k);t:for(;;){this.determine_radius(t,this.lencut),l=t.getRadius()/this.RADIUS_REDUCTION_FACTOR,null==n?c=f=0:(h=(this.bases[b.getStart()].getX()+this.bases[b.getEnd()].getX())/2,p=(this.bases[b.getStart()].getY()+this.bases[b.getEnd()].getY())/2,c=h-l*b.getXrad(),f=p-l*b.getYrad()),T=-1==N?0:N,v=t.getConnection(T),E=0,O=!1;do{if((w=T-1)<0&&(w=t.getNconnection()-1),x=t.getConnection(w),this.connected_connection(x,v)?(T=w,v=x):O=!0,++E>t.getNconnection()){for(A=-1,k=0;k=t.getNconnection()&&(w=0),v=t.getConnection(k),(ht=(y=t.getConnection(w)).getAngle()-v.getAngle())<0&&(ht+=2*Math.PI),ht>A&&(A=ht,vt=k);R=vt,(T=vt+1)>=t.getNconnection()&&(T=0),(v=t.getConnection(R)).setBroken(!0),O=!0}}while(!O);for(C=!1,G=T;!C;){for(E=0,O=!1,R=T,L=!1;!O;)if(v=t.getConnection(R),R==N&&(L=!0),(w=R+1)>=t.getNconnection()&&(w=0),y=t.getConnection(w),this.connected_connection(v,y)){if(++E>=t.getNconnection())break;R=w}else O=!0;for(k=W=Z=P=this.find_ic_middle(T,R,n,b,t),O=!1,$=0;!O;)(k=$<0?W:0==$?P:Z)>=0&&(v=t.getConnection(k),null!=n&&b==v||(0==$?(d=v.getAngle()-Math.asin(.5/l),m=v.getAngle()+Math.asin(.5/l),this.bases[v.getStart()].setX(c+l*Math.cos(d)),this.bases[v.getStart()].setY(f+l*Math.sin(d)),this.bases[v.getEnd()].setX(c+l*Math.cos(m)),this.bases[v.getEnd()].setY(f+l*Math.sin(m))):$<0?((w=k+1)>=t.getNconnection()&&(w=0),v=t.getConnection(k),y=t.getConnection(w),et=v.getXrad(),rt=v.getYrad(),ht=(v.getAngle()+y.getAngle())/2,v.getAngle()>y.getAngle()&&(ht-=Math.PI),it=Math.cos(ht),lt=Math.sin(ht),ct=-it,(S=y.getAngle()-v.getAngle())<0&&(S+=2*Math.PI),ft=v.isExtruded()?S<=Math.PI/2?2:1.5:1,this.bases[v.getEnd()].setX(this.bases[y.getStart()].getX()+ft*lt),this.bases[v.getEnd()].setY(this.bases[y.getStart()].getY()+ft*ct),this.bases[v.getStart()].setX(this.bases[v.getEnd()].getX()+rt),this.bases[v.getStart()].setY(this.bases[v.getEnd()].getY()-et)):((w=k-1)<0&&(w=t.getNconnection()-1),v=t.getConnection(w),ot=(y=t.getConnection(k)).getXrad(),at=y.getYrad(),ht=(v.getAngle()+y.getAngle())/2,v.getAngle()>y.getAngle()&&(ht-=Math.PI),it=Math.cos(ht),lt=-Math.sin(ht),ct=it,(S=y.getAngle()-v.getAngle())<0&&(S+=2*Math.PI),ft=v.isExtruded()?S<=Math.PI/2?2:1.5:1,this.bases[y.getStart()].setX(this.bases[v.getEnd()].getX()+ft*lt),this.bases[y.getStart()].setY(this.bases[v.getEnd()].getY()+ft*ct),this.bases[y.getEnd()].setX(this.bases[y.getStart()].getX()-at),this.bases[y.getEnd()].setY(this.bases[y.getStart()].getY()+ot)))),$<0?(Z==R?Z=-1:Z>=0&&++Z>=t.getNconnection()&&(Z=0),$=1):(W==T?W=-1:W>=0&&--W<0&&(W=t.getNconnection()-1),$=-1),O=-1==W&&-1==Z;if((J=R+1)>=t.getNconnection()&&(J=0),R!=T&&(T!=G||J!=G))if(v=t.getConnection(T),y=t.getConnection(R),Q=this.bases[y.getEnd()].getX()-this.bases[v.getStart()].getX(),tt=this.bases[y.getEnd()].getY()-this.bases[v.getStart()].getY(),D=this.bases[v.getStart()].getX()+Q/2,j=this.bases[v.getStart()].getY()+tt/2,F=Q/(nt=Math.sqrt(Q*Q+tt*tt)),B=tt/nt,I=c-D,X=f-j,z=(Y=(I/=nt=Math.sqrt(Q*Q+tt*tt))*F+(X/=nt)*B)*F-I,q=Y*B-X,z/=nt=Math.sqrt(z*z+q*q),q/=nt,Q=this.bases[v.getStart()].getX()-c,tt=this.bases[v.getStart()].getY()-f,(ht=Math.atan2(tt,Q))<0&&(ht+=2*Math.PI),Q=this.bases[y.getEnd()].getX()-c,tt=this.bases[y.getEnd()].getY()-f,(pt=Math.atan2(tt,Q))<0&&(pt+=2*Math.PI),ptMath.PI?-1:1)*l*z,H=f+U*l*q,L)c-=V-D,f-=H-j;else for(k=T;M=(v=t.getConnection(k)).getStart(),this.bases[M].setX(this.bases[M].getX()+V-D),this.bases[M].setY(this.bases[M].getY()+H-j),M=v.getEnd(),this.bases[M].setX(this.bases[M].getX()+V-D),this.bases[M].setY(this.bases[M].getY()+H-j),k!=R;)++k>=t.getNconnection()&&(k=0);C=(T=J)==G}for(k=0;k=t.getNconnection()&&(w=0),y=t.getConnection(w),Q=this.bases[v.getEnd()].getX()-c,tt=this.bases[v.getEnd()].getY()-f,st=Math.sqrt(Q*Q+tt*tt),(ht=Math.atan2(tt,Q))<0&&(ht+=2*Math.PI),Q=this.bases[y.getStart()].getX()-c,tt=this.bases[y.getStart()].getY()-f,ut=Math.sqrt(Q*Q+tt*tt),(pt=Math.atan2(tt,Q))<0&&(pt+=2*Math.PI),ptMath.PI)if(v.isExtruded())console.log("Warning from traverse_loop. Loop "+t.getNumber()+" has crossed regions\n");else if(y.getStart()-v.getEnd()!=1){v.setExtruded(!0);continue t}if(v.isExtruded())this.construct_extruded_segment(v,y);else for((_=y.getStart()-v.getEnd())<0&&(_+=this.nbase+1),u=K/_,w=1;w<_;w++)(M=v.getEnd()+w)>this.nbase&&(M-=this.nbase+1),nt=st+(ut-st)*((g=ht+w*u)-ht)/K,this.bases[M].setX(c+nt*Math.cos(g)),this.bases[M].setY(f+nt*Math.sin(g))}break}for(k=0;k=t.getNconnection()&&(w=0),v=t.getConnection(k),y=t.getConnection(w),_+=2,dt+=this.bases[v.getStart()].getX()+this.bases[v.getEnd()].getX(),mt+=this.bases[v.getStart()].getY()+this.bases[v.getEnd()].getY(),!v.isExtruded())for(w=v.getEnd()+1;w!=y.getStart();w++)w>this.nbase&&(w-=this.nbase+1),_++,dt+=this.bases[w].getX(),mt+=this.bases[w].getY();t.setX(dt/_),t.setY(mt/_)},s.prototype.determine_radius=function(t,n){var e,r,a,i,u,s,l,c,f,h,p,d=0,m=new o.Connection,g=new o.Connection;do{for(e=1e10,u=0,i=0,c=0;c=t.getNconnection()&&(f=0),g=t.getConnection(f),h=m.getEnd(),(p=g.getStart())1&&(e=l,d=c);(s=i/u)<.7071068&&(s=.7071068),e*s0?s=t.getRadius():t.setRadius(s)},s.prototype.find_ic_middle=function(t,n,e,r,o){var a,i,u,s,l;for(a=0,i=-1,u=t,l=!1;!l;)a++>2*o.getNconnection()&&console.log("Infinite loop in 'find_ic_middle'"),null!=e&&o.getConnection(u)==r&&(i=u),l=u==n,++u>=o.getNconnection()&&(u=0);if(-1==i){for(s=1,u=t;s<(a+1)/2;s++)++u>=o.getNconnection()&&(u=0);i=u}return i},s.prototype.construct_extruded_segment=function(t,n){var e,r,o,a,i,u,s,l,c,f,h,p,d,m,g,v,y,b;if(e=t.getAngle(),(o=r=n.getAngle())=1.5&&h<=Math.PI/2&&((v=d+1)>this.nbase&&(v-=this.nbase+1),(y=m-1)<0&&(y+=this.nbase+1),this.bases[v].setX(this.bases[d].getX()+.5*i),this.bases[v].setY(this.bases[d].getY()+.5*u),this.bases[y].setX(this.bases[m].getX()-.5*i),this.bases[y].setY(this.bases[m].getY()-.5*u),d=v,m=y);do{b=!1,this.construct_circle_segment(d,m),(v=d+1)>this.nbase&&(v-=this.nbase+1),i=this.bases[v].getX()-this.bases[d].getX(),u=this.bases[v].getY()-this.bases[d].getY(),(s=Math.atan2(u,i))<0&&(s+=2*Math.PI),(p=s-e)<0&&(p+=2*Math.PI),p>Math.PI&&(b=!0),(y=m-1)<0&&(y+=this.nbase+1),i=this.bases[y].getX()-this.bases[m].getX(),u=this.bases[y].getY()-this.bases[m].getY(),(l=Math.atan2(u,i))<0&&(l+=2*Math.PI),(p=r-l)<0&&(p+=2*Math.PI),p>Math.PI&&(b=!0),b&&(c=this.minf2(a,e+.5),this.bases[v].setX(this.bases[d].getX()+Math.cos(c)),this.bases[v].setY(this.bases[d].getY()+Math.sin(c)),d=v,c=this.maxf2(a,o-.5),this.bases[y].setX(this.bases[m].getX()+Math.cos(c)),this.bases[y].setY(this.bases[m].getY()+Math.sin(c)),m=y,g-=2)}while(b&&g>1)}},s.prototype.construct_circle_segment=function(t,n){var e,r,o,a,i,u,s,l,c,f,h,p,d,m,g;if(e=this.bases[n].getX()-this.bases[t].getX(),r=this.bases[n].getY()-this.bases[t].getY(),o=Math.sqrt(e*e+r*r),(d=n-t)<0&&(d+=this.nbase+1),o>=d)for(e/=o,r/=o,m=1;mthis.nbase&&(g-=this.nbase+1),this.bases[g].setX(this.bases[t].getX()+e*m/d),this.bases[g].setY(this.bases[t].getY()+r*m/d);else for(this.find_center_for_arc(d-1,o),e/=o,r/=o,a=this.bases[t].getX()+e*o/2,i=this.bases[t].getY()+r*o/2,u=r,s=-e,l=a+this._h*u,c=i+this._h*s,f=this.bases[t].getX()-l,h=this.bases[t].getY()-c,o=Math.sqrt(f*f+h*h),p=Math.atan2(h,f),m=1;mthis.nbase&&(g-=this.nbase+1),this.bases[g].setX(l+o*Math.cos(p+m*this.angleinc)),this.bases[g].setY(c+o*Math.sin(p+m*this.angleinc))},s.prototype.find_center_for_arc=function(t,n){var e,r,o,a,i,u,s,l;o=-(r=(t+1)/Math.PI)-n/(t+1.000001-n),n<1&&(o=0),l=0;do{e=(r+o)/2,i=1-.5/((a=Math.sqrt(e*e+n*n/4))*a),Math.abs(i)>1&&console.log("Unexpected large magnitude discriminant = "+i+" "+a),(s=(u=Math.acos(i))*(t+1)+2*Math.acos(e/a)-2*Math.PI)>0?o=e:r=e}while(Math.abs(s)>1e-4&&++l=this.MAXITER&&(noIterationFailureYet&&(console.log("Iteration failed in find_center_for_arc"),noIterationFailureYet=!1),e=0,u=0),this._h=e,this.angleinc=u},s.prototype.generate_region=function(t){var n,e,r,o,a,i;for(i=t.getRegion(),n=0,t.getStart()==i.getStart1()?(e=i.getStart1(),r=i.getEnd1()):(e=i.getStart2(),r=i.getEnd2()),(this.bases[t.getStart()].getX()>this.ANUM-100||this.bases[t.getEnd()].getX()>this.ANUM-100)&&console.log("Bad region passed to generate_region. Coordinates not defined."),o=e+1;o<=r;o++)n++,this.bases[o].setX(this.bases[t.getStart()].getX()+this.HELIX_FACTOR*n*t.getXrad()),this.bases[o].setY(this.bases[t.getStart()].getY()+this.HELIX_FACTOR*n*t.getYrad()),a=this.bases[o].getMate(),this.bases[a].setX(this.bases[t.getEnd()].getX()+this.HELIX_FACTOR*n*t.getXrad()),this.bases[a].setY(this.bases[t.getEnd()].getY()+this.HELIX_FACTOR*n*t.getYrad())},s.prototype.minf2=function(t,n){return tn?t:n},s.prototype.connected_connection=function(t,n){return!!t.isExtruded()||t.getEnd()+1==n.getStart()}},function(t,n){"use strict";function e(){this.radius=null,this.loopnumber=null,this.next=null,this.prev=null}Object.defineProperty(n,"__esModule",{value:!0}),n.Radloop=e,e.prototype.getRadius=function(){return this.radius},e.prototype.setRadius=function(t){this.radius=t},e.prototype.getLoopnumber=function(){return this.loopnumber},e.prototype.setLoopnumber=function(t){this.loopnumber=t},e.prototype.getNext=function(){return this.next},e.prototype.setNext=function(t){this.next=t},e.prototype.getPrev=function(){return this.prev},e.prototype.setPrev=function(t){this.prev=t}},function(t,n,e){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.Connection=a;var r=e(8),o=e(9);function a(){this.loop=new r.Loop,this.region=new o.Region,this.start=null,this.end=null,this.xrad=null,this.yrad=null,this.angle=null,this.extruded=null,this.broken=null,this._isNull=!1}a.prototype.isNull=function(){return this._isNull},a.prototype.setNull=function(t){this._isNull=t},a.prototype.getLoop=function(){return this.loop},a.prototype.setLoop=function(t){this.loop=t},a.prototype.getRegion=function(){return this.region},a.prototype.setRegion=function(t){this.region=t},a.prototype.getStart=function(){return this.start},a.prototype.setStart=function(t){this.start=t},a.prototype.getEnd=function(){return this.end},a.prototype.setEnd=function(t){this.end=t},a.prototype.getXrad=function(){return this.xrad},a.prototype.setXrad=function(t){this.xrad=t},a.prototype.getYrad=function(){return this.yrad},a.prototype.setYrad=function(t){this.yrad=t},a.prototype.getAngle=function(){return this.angle},a.prototype.setAngle=function(t){this.angle=t},a.prototype.isExtruded=function(){return this.extruded},a.prototype.setExtruded=function(t){this.extruded=t},a.prototype.isBroken=function(){return this.broken},a.prototype.setBroken=function(t){this.broken=t}},function(t,n,e){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.Loop=o;var r=e(7);function o(){this.nconnection=null,this.connections=[],this._connections=[],this.number=null,this.depth=null,this.mark=null,this.x=null,this.y=null,this.radius=null}o.prototype.getNconnection=function(){return this.nconnection},o.prototype.setNconnection=function(t){this.nconnection=t},o.prototype.setConnection=function(t,n){null!=n?this._connections[t]=n:(this._connections[t]||(this._connections[t]=new r.Connection),this._connections[t].setNull(!0))},o.prototype.getConnection=function(t){var n=e(7);this._connections[t]||(this._connections[t]=new n);var r=this._connections[t];return r.isNull()?null:r},o.prototype.addConnection=function(t,n){this._connections.push(n)},o.prototype.getNumber=function(){return this.number},o.prototype.setNumber=function(t){this.number=t},o.prototype.getDepth=function(){return this.depth},o.prototype.setDepth=function(t){this.depth=t},o.prototype.isMark=function(){return this.mark},o.prototype.setMark=function(t){this.mark=t},o.prototype.getX=function(){return this.x},o.prototype.setX=function(t){this.x=t},o.prototype.getY=function(){return this.y},o.prototype.setY=function(t){this.y=t},o.prototype.getRadius=function(){return this.radius},o.prototype.setRadius=function(t){this.radius=t}},function(t,n){"use strict";function e(){this._start1=null,this._end1=null,this._start2=null,this._end2=null}Object.defineProperty(n,"__esModule",{value:!0}),n.Region=e,e.prototype.getStart1=function(){return this._start1},e.prototype.setStart1=function(t){this._start1=t},e.prototype.getEnd1=function(){return this._end1},e.prototype.setEnd1=function(t){this._end1=t},e.prototype.getStart2=function(){return this._start2},e.prototype.setStart2=function(t){this._start2=t},e.prototype.getEnd2=function(){return this._end2},e.prototype.setEnd2=function(t){this._end2=t}},function(t,n,e){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.Base=o;var r=e(9);function o(){this.mate=null,this.x=null,this.y=null,this.extracted=null,this.region=new r.Region}o.prototype.getMate=function(){return this.mate},o.prototype.setMate=function(t){this.mate=t},o.prototype.getX=function(){return this.x},o.prototype.setX=function(t){this.x=t},o.prototype.getY=function(){return this.y},o.prototype.setY=function(t){this.y=t},o.prototype.isExtracted=function(){return this.extracted},o.prototype.setExtracted=function(t){this.extracted=t},o.prototype.getRegion=function(){return this.region},o.prototype.setRegion=function(t){this.region=t}},function(t,n,e){var r=e(12);"string"==typeof r&&(r=[[t.id,r,""]]),e(14)(r,{}),r.locals&&(t.exports=r.locals)},function(t,n,e){(t.exports=e(13)()).push([t.id,'.forna-container .structure-background-rect {\r\n stroke: black;\r\n stroke-width: 5;\r\n fill: transparent;\r\n}\r\n\r\n.forna-container circle.rna-base {\r\n stroke: #ccc;\r\n stroke-width: 1px;\r\n opacity: 1;\r\n fill: white;\r\n}\r\n\r\n.forna-container circle.rna-base.label {\r\n stroke: transparent;\r\n stroke-width: 0;\r\n fill: white;\r\n}\r\n\r\n.forna-container line.link {\r\n stroke: #999;\r\n stroke-opacity: 0.8;\r\n stroke-width: 2;\r\n}\r\n\r\n.forna-container line.rna-link {\r\n stroke: #999;\r\n stroke-opacity: 0.8;\r\n stroke-width: 2;\r\n}\r\n\r\n.forna-container .overlay {\r\n fill: transparent;\r\n}\r\n\r\n.forna-container .rna-name {\r\n text-anchor: middle;\r\n dy: -10;\r\n font-family: Tahoma, Geneva, sans-serif;\r\n font-size: 8pt;\r\n}\r\n\r\n.forna-container line.rna-link[link-type="backbone"] {\r\n stroke: transparent;\r\n}\r\n\r\n.forna-container line.rna-link[link-type="basepair"] {\r\n stroke: transparent;\r\n}\r\n\r\n.forna-container line.rna-link[link-type="fake"] {\r\n stroke: transparent;\r\n}\r\n\r\n.forna-container line.rna-link[link-type="extra"] {\r\n stroke: grey;\r\n}\r\n\r\n.forna-container line.rna-link[extra-link-type="correct"] {\r\n stroke: green;\r\n}\r\n\r\n.forna-container line.rna-link[extra-link-type="incorrect"] {\r\n stroke: green;\r\n}\r\n\r\n\r\n.forna-container path {\r\n stroke-width: 2;\r\n}\r\n\r\n.forna-container path[extra-link-type="correct"] {\r\n stroke: green;\r\n}\r\n\r\n.forna-container path[extra-link-type="incorrect"] {\r\n stroke: red;\r\n}\r\n\r\n\r\n.forna-container line.basepair {\r\n stroke: red;\r\n}\r\n\r\n.forna-container line.intermolecule {\r\n stroke: blue;\r\n}\r\n\r\n.forna-container line.chain_chain {\r\n stroke-dasharray: 3,3;\r\n}\r\n\r\n.forna-container line.fake {\r\n stroke: green;\r\n}\r\n\r\n.forna-container .transparent {\r\n fill: transparent;\r\n stroke-width: 0;\r\n stroke-opacity: 0;\r\n opacity: 0;\r\n}\r\n\r\n.forna-container .d3-tip {\r\n line-height: 1;\r\n font-weight: bold;\r\n padding: 6px;\r\n background: rgba(0, 0, 0, 0.6);\r\n color: #fff;\r\n border-radius: 4px;\r\n pointer-events: none;\r\n}\r\n\r\n.forna-container text.nucleotide-label {\r\n font-size: 5.5pt;\r\n font-weight: bold;\r\n font-family: Tahoma, Geneva, sans-serif;\r\n color: rgb(100,100,100);\r\n pointer-events: none;\r\n}\r\n\r\n.forna-container text.number-label {\r\n font-size: 5.5pt;\r\n font-weight: bold;\r\n font-family: Tahoma, Geneva, sans-serif;\r\n color: rgb(100,100,100);\r\n pointer-events: none;\r\n}\r\n\r\n.forna-container text {\r\n pointer-events: none;\r\n}\r\n\r\n.forna-container g.gnode {\r\n\r\n}\r\n\r\n.forna-container .brush .extent {\r\n fill-opacity: .1;\r\n stroke: #fff;\r\n shape-rendering: crispEdges;\r\n}\r\n\r\n.forna-container .noselect {\r\n -webkit-touch-callout: none;\r\n -webkit-user-select: none;\r\n -khtml-user-select: none;\r\n -moz-user-select: none;\r\n -ms-user-select: none;\r\n user-select: none;\r\n}\r\n',""])},function(t,n){t.exports=function(){var t=[];return t.toString=function(){for(var t=[],n=0;n=0&&l.splice(n,1)}function d(t){var n=document.createElement("style");return n.type="text/css",h(t,n),n}function m(t,n){var e,r,o;if(n.singleton){var a=s++;e=u||(u=d(n)),r=y.bind(null,e,a,!1),o=y.bind(null,e,a,!0)}else t.sourceMap&&"function"==typeof URL&&"function"==typeof URL.createObjectURL&&"function"==typeof URL.revokeObjectURL&&"function"==typeof Blob&&"function"==typeof btoa?(e=function(t){var n=document.createElement("link");return n.rel="stylesheet",h(t,n),n}(n),r=x.bind(null,e),o=function(){p(e),e.href&&URL.revokeObjectURL(e.href)}):(e=d(n),r=b.bind(null,e),o=function(){p(e)});return r(t),function(n){if(n){if(n.css===t.css&&n.media===t.media&&n.sourceMap===t.sourceMap)return;r(t=n)}else o()}}t.exports=function(t,n){void 0===(n=n||{}).singleton&&(n.singleton=a()),void 0===n.insertAt&&(n.insertAt="bottom");var e=f(t);return c(e,n),function(t){for(var o=[],a=0;an?1:t>=n?0:NaN}function v(t){return null===t?NaN:+t}function y(t){return!isNaN(t)}function b(t){return{left:function(n,e,r,o){for(arguments.length<3&&(r=0),arguments.length<4&&(o=n.length);r>>1;t(n[a],e)<0?r=a+1:o=a}return r},right:function(n,e,r,o){for(arguments.length<3&&(r=0),arguments.length<4&&(o=n.length);r>>1;t(n[a],e)>0?o=a:r=a+1}return r}}}a.ascending=g,a.descending=function(t,n){return nt?1:n>=t?0:NaN},a.min=function(t,n){var e,r,o=-1,a=t.length;if(1===arguments.length){for(;++o=r){e=r;break}for(;++or&&(e=r)}else{for(;++o=r){e=r;break}for(;++or&&(e=r)}return e},a.max=function(t,n){var e,r,o=-1,a=t.length;if(1===arguments.length){for(;++o=r){e=r;break}for(;++oe&&(e=r)}else{for(;++o=r){e=r;break}for(;++oe&&(e=r)}return e},a.extent=function(t,n){var e,r,o,a=-1,i=t.length;if(1===arguments.length){for(;++a=r){e=o=r;break}for(;++ar&&(e=r),o=r){e=o=r;break}for(;++ar&&(e=r),o1)return i/(s-1)},a.deviation=function(){var t=a.variance.apply(this,arguments);return t?Math.sqrt(t):t};var x=b(g);function M(t){return t.length}a.bisectLeft=x.left,a.bisect=a.bisectRight=x.right,a.bisector=function(t){return b(1===t.length?function(n,e){return g(t(n),e)}:t)},a.shuffle=function(t,n,e){(a=arguments.length)<3&&(e=t.length,a<2&&(n=0));for(var r,o,a=e-n;a;)o=Math.random()*a--|0,r=t[a+n],t[a+n]=t[o+n],t[o+n]=r;return t},a.permute=function(t,n){for(var e=n.length,r=new Array(e);e--;)r[e]=t[n[e]];return r},a.pairs=function(t){for(var n=0,e=t.length-1,r=t[0],o=new Array(e<0?0:e);n=0;)for(n=(r=t[o]).length;--n>=0;)e[--i]=r[n];return e};var w=Math.abs;function _(t){for(var n=1;t*n%1;)n*=10;return n}function k(t,n){for(var e in n)Object.defineProperty(t.prototype,e,{value:n[e],enumerable:!1})}function S(){this._=Object.create(null)}function A(t){return"__proto__"==(t+="")||"\0"===t[0]?"\0"+t:t}function E(t){return"\0"===(t+="")[0]?t.slice(1):t}function T(t){return A(t)in this._}function R(t){return(t=A(t))in this._&&delete this._[t]}function P(){var t=[];for(var n in this._)t.push(E(n));return t}function N(){var t=0;for(var n in this._)++t;return t}function O(){for(var t in this._)return!1;return!0}function C(){this._=Object.create(null)}function L(t){return t}function U(t,n,e){return function(){var r=e.apply(n,arguments);return r===n?t:r}}function D(t,n){if(n in t)return n;n=n.charAt(0).toUpperCase()+n.slice(1);for(var e=0,r=j.length;en;)o.push(r/a);else for(;(r=t+e*++i)=r.length)return n?n.call(e,a):t?a.sort(t):a;for(var s,l,c,f,h=-1,p=a.length,d=r[u++],m=new S;++h=r.length)return n;var a=[],i=o[e++];return n.forEach((function(n,r){a.push({key:n,values:t(r,e)})})),i?a.sort((function(t,n){return i(t.key,n.key)})):a}(i(a.map,t,0),0)},e.key=function(t){return r.push(t),e},e.sortKeys=function(t){return o[r.length-1]=t,e},e.sortValues=function(n){return t=n,e},e.rollup=function(t){return n=t,e},e},a.set=function(t){var n=new C;if(t)for(var e=0,r=t.length;e=0&&(r=t.slice(e+1),t=t.slice(0,e)),t)return arguments.length<2?this[t].on(r):this[t].on(r,n);if(2===arguments.length){if(null==n)for(t in this)this.hasOwnProperty(t)&&this[t].on(r,null);return this}},a.event=null,a.requote=function(t){return t.replace(Y,"\\$&")};var Y=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g,V={}.__proto__?function(t,n){t.__proto__=n}:function(t,n){for(var e in n)t[e]=n[e]};function H(t){return V(t,J),t}var G=function(t,n){return n.querySelector(t)},W=function(t,n){return n.querySelectorAll(t)},Z=function(t,n){var e=t.matches||t[D(t,"matchesSelector")];return(Z=function(t,n){return e.call(t,n)})(t,n)};"function"==typeof Sizzle&&(G=function(t,n){return Sizzle(t,n)[0]||null},W=Sizzle,Z=Sizzle.matchesSelector),a.selection=function(){return a.select(s.documentElement)};var J=a.selection.prototype=[];function $(t){return"function"==typeof t?t:function(){return G(t,this)}}function K(t){return"function"==typeof t?t:function(){return W(t,this)}}J.select=function(t){var n,e,r,o,a=[];t=$(t);for(var i=-1,u=this.length;++i=0&&"xmlns"!==(e=t.slice(0,n))&&(t=t.slice(n+1)),tt.hasOwnProperty(e)?{space:tt[e],local:t}:t}},J.attr=function(t,n){if(arguments.length<2){if("string"==typeof t){var e=this.node();return(t=a.ns.qualify(t)).local?e.getAttributeNS(t.space,t.local):e.getAttribute(t)}for(n in t)this.each(nt(n,t[n]));return this}return this.each(nt(t,n))},J.classed=function(t,n){if(arguments.length<2){if("string"==typeof t){var e=this.node(),r=(t=ot(t)).length,o=-1;if(n=e.classList){for(;++o=0;)(e=r[o])&&(a&&a!==e.nextSibling&&a.parentNode.insertBefore(e,a),a=e);return this},J.sort=function(t){t=pt.apply(this,arguments);for(var n=-1,e=this.length;++n=n&&(n=o+1);!(i=u[n])&&++n0&&(t=t.slice(0,o));var s=bt.get(t);function l(){var n=this[r];n&&(this.removeEventListener(t,n,n.$),delete this[r])}return s&&(t=s,i=Mt),o?n?function(){var o=i(n,u(arguments));l.call(this),this.addEventListener(t,this[r]=o,o.$=e),o._=n}:l:n?z:function(){var n,e=new RegExp("^__on([^.]+)"+a.requote(t)+"$");for(var r in this)if(n=r.match(e)){var o=this[r];this.removeEventListener(n[1],o,o.$),delete this[r]}}}a.selection.enter=mt,a.selection.enter.prototype=gt,gt.append=J.append,gt.empty=J.empty,gt.node=J.node,gt.call=J.call,gt.size=J.size,gt.select=function(t){for(var n,e,r,o,a,i=[],u=-1,s=this.length;++u0?1:t<0?-1:0}function jt(t,n,e){return(n[0]-t[0])*(e[1]-t[1])-(n[1]-t[1])*(e[0]-t[0])}function zt(t){return t>1?0:t<-1?Pt:Math.acos(t)}function qt(t){return t>1?Ct:t<-1?-Ct:Math.asin(t)}function Ft(t){return((t=Math.exp(t))+1/t)/2}function Bt(t){return(t=Math.sin(t/2))*t}var It=Math.SQRT2;a.interpolateZoom=function(t,n){var e,r,o=t[0],a=t[1],i=t[2],u=n[0],s=n[1],l=n[2],c=u-o,f=s-a,h=c*c+f*f;if(h0&&(t=t.transition().duration(m)),t.call(w.event)}function E(){u&&u.domain(i.range().map((function(t){return(t-h.x)/h.k})).map(i.invert)),f&&f.domain(l.range().map((function(t){return(t-h.y)/h.k})).map(l.invert))}function T(t){g++||t({type:"zoomstart"})}function R(t){E(),t({type:"zoom",scale:h.k,translate:[h.x,h.y]})}function P(t){--g||(t({type:"zoomend"}),n=null)}function N(){var t=this,n=M.of(t,arguments),e=0,r=a.select(c(t)).on(y,u).on(b,s),o=_(a.mouse(t)),i=kt(t);function u(){e=1,S(a.mouse(t),o),R(n)}function s(){r.on(y,null).on(b,null),i(e),P(n)}Mu.call(t),T(n)}function O(){var t,n=this,e=M.of(n,arguments),r={},i=0,u=".zoom-"+a.event.changedTouches[0].identifier,s="touchmove"+u,l="touchend"+u,c=[],f=a.select(n),p=kt(n);function d(){var e=a.touches(n);return t=h.k,e.forEach((function(t){t.identifier in r&&(r[t.identifier]=_(t))})),e}function m(){var t=a.event.target;a.select(t).on(s,g).on(l,y),c.push(t);for(var e=a.event.changedTouches,u=0,f=e.length;u1){v=p[0];var b=p[1],x=v[0]-b[0],M=v[1]-b[1];i=x*x+M*M}}function g(){var u,s,l,c,f=a.touches(n);Mu.call(n);for(var h=0,p=f.length;h360?t-=360:t<0&&(t+=360),t<60?r+(o-r)*t/60:t<180?o:t<240?r+(o-r)*(240-t)/60:r}(t))}return t=isNaN(t)?0:(t%=360)<0?t+360:t,n=isNaN(n)?0:n<0?0:n>1?1:n,r=2*(e=e<0?0:e>1?1:e)-(o=e<=.5?e*(1+n):e+n-e*n),new sn(a(t+120),a(t),a(t-120))}function Jt(t,n,e){return this instanceof Jt?(this.h=+t,this.c=+n,void(this.l=+e)):arguments.length<2?t instanceof Jt?new Jt(t.h,t.c,t.l):rn(t instanceof Qt?t.l:(t=mn((t=a.rgb(t)).r,t.g,t.b)).l,t.a,t.b):new Jt(t,n,e)}Wt.brighter=function(t){return t=Math.pow(.7,arguments.length?t:1),new Gt(this.h,this.s,this.l/t)},Wt.darker=function(t){return t=Math.pow(.7,arguments.length?t:1),new Gt(this.h,this.s,t*this.l)},Wt.rgb=function(){return Zt(this.h,this.s,this.l)},a.hcl=Jt;var $t=Jt.prototype=new Ht;function Kt(t,n,e){return isNaN(t)&&(t=0),isNaN(n)&&(n=0),new Qt(e,Math.cos(t*=Lt)*n,Math.sin(t)*n)}function Qt(t,n,e){return this instanceof Qt?(this.l=+t,this.a=+n,void(this.b=+e)):arguments.length<2?t instanceof Qt?new Qt(t.l,t.a,t.b):t instanceof Jt?Kt(t.h,t.c,t.l):mn((t=sn(t)).r,t.g,t.b):new Qt(t,n,e)}$t.brighter=function(t){return new Jt(this.h,this.c,Math.min(100,this.l+tn*(arguments.length?t:1)))},$t.darker=function(t){return new Jt(this.h,this.c,Math.max(0,this.l-tn*(arguments.length?t:1)))},$t.rgb=function(){return Kt(this.h,this.c,this.l).rgb()},a.lab=Qt;var tn=18,nn=Qt.prototype=new Ht;function en(t,n,e){var r=(t+16)/116,o=r+n/500,a=r-e/200;return new sn(un(3.2404542*(o=.95047*on(o))-1.5371385*(r=1*on(r))-.4985314*(a=1.08883*on(a))),un(-.969266*o+1.8760108*r+.041556*a),un(.0556434*o-.2040259*r+1.0572252*a))}function rn(t,n,e){return t>0?new Jt(Math.atan2(e,n)*Ut,Math.sqrt(n*n+e*e),t):new Jt(NaN,NaN,t)}function on(t){return t>.206893034?t*t*t:(t-4/29)/7.787037}function an(t){return t>.008856?Math.pow(t,1/3):7.787037*t+4/29}function un(t){return Math.round(255*(t<=.00304?12.92*t:1.055*Math.pow(t,1/2.4)-.055))}function sn(t,n,e){return this instanceof sn?(this.r=~~t,this.g=~~n,void(this.b=~~e)):arguments.length<2?t instanceof sn?new sn(t.r,t.g,t.b):pn(""+t,sn,Zt):new sn(t,n,e)}function ln(t){return new sn(t>>16,t>>8&255,255&t)}function cn(t){return ln(t)+""}nn.brighter=function(t){return new Qt(Math.min(100,this.l+tn*(arguments.length?t:1)),this.a,this.b)},nn.darker=function(t){return new Qt(Math.max(0,this.l-tn*(arguments.length?t:1)),this.a,this.b)},nn.rgb=function(){return en(this.l,this.a,this.b)},a.rgb=sn;var fn=sn.prototype=new Ht;function hn(t){return t<16?"0"+Math.max(0,t).toString(16):Math.min(255,t).toString(16)}function pn(t,n,e){var r,o,a,i=0,u=0,s=0;if(r=/([a-z]+)\((.*)\)/.exec(t=t.toLowerCase()))switch(o=r[2].split(","),r[1]){case"hsl":return e(parseFloat(o[0]),parseFloat(o[1])/100,parseFloat(o[2])/100);case"rgb":return n(vn(o[0]),vn(o[1]),vn(o[2]))}return(a=yn.get(t))?n(a.r,a.g,a.b):(null==t||"#"!==t.charAt(0)||isNaN(a=parseInt(t.slice(1),16))||(4===t.length?(i=(3840&a)>>4,i|=i>>4,u=240&a,u|=u>>4,s=15&a,s|=s<<4):7===t.length&&(i=(16711680&a)>>16,u=(65280&a)>>8,s=255&a)),n(i,u,s))}function dn(t,n,e){var r,o,a=Math.min(t/=255,n/=255,e/=255),i=Math.max(t,n,e),u=i-a,s=(i+a)/2;return u?(o=s<.5?u/(i+a):u/(2-i-a),r=t==i?(n-e)/u+(n0&&s<1?0:r),new Gt(r,o,s)}function mn(t,n,e){var r=an((.4124564*(t=gn(t))+.3575761*(n=gn(n))+.1804375*(e=gn(e)))/.95047),o=an((.2126729*t+.7151522*n+.072175*e)/1);return Qt(116*o-16,500*(r-o),200*(o-an((.0193339*t+.119192*n+.9503041*e)/1.08883)))}function gn(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function vn(t){var n=parseFloat(t);return"%"===t.charAt(t.length-1)?Math.round(2.55*n):n}fn.brighter=function(t){t=Math.pow(.7,arguments.length?t:1);var n=this.r,e=this.g,r=this.b,o=30;return n||e||r?(n&&n=200&&n<300||304===n){try{t=e.call(o,l)}catch(t){return void i.error.call(o,t)}i.load.call(o,t)}else i.error.call(o,l)}return!this.XDomainRequest||"withCredentials"in l||!/^(http(s)?:)?\/\//.test(t)||(l=new XDomainRequest),"onload"in l?l.onload=l.onerror=f:l.onreadystatechange=function(){l.readyState>3&&f()},l.onprogress=function(t){var n=a.event;a.event=t;try{i.progress.call(o,l)}finally{a.event=n}},o.header=function(t,n){return t=(t+"").toLowerCase(),arguments.length<2?s[t]:(null==n?delete s[t]:s[t]=n+"",o)},o.mimeType=function(t){return arguments.length?(n=null==t?null:t+"",o):n},o.responseType=function(t){return arguments.length?(c=t,o):c},o.response=function(t){return e=t,o},["get","post"].forEach((function(t){o[t]=function(){return o.send.apply(o,[t].concat(u(arguments)))}})),o.send=function(e,r,a){if(2===arguments.length&&"function"==typeof r&&(a=r,r=null),l.open(e,t,!0),null==n||"accept"in s||(s.accept=n+",*/*"),l.setRequestHeader)for(var u in s)l.setRequestHeader(u,s[u]);return null!=n&&l.overrideMimeType&&l.overrideMimeType(n),null!=c&&(l.responseType=c),null!=a&&o.on("error",a).on("load",(function(t){a(null,t)})),i.beforesend.call(o,l),l.send(null==r?null:r),o},o.abort=function(){return l.abort(),o},a.rebind(o,i,"on"),null==r?o:o.get(function(t){return 1===t.length?function(n,e){t(null==n?e:null)}:t}(r))}yn.forEach((function(t,n){yn.set(t,ln(n))})),a.functor=bn,a.xhr=xn(L),a.dsv=function(t,n){var e=new RegExp('["'+t+"\n]"),r=t.charCodeAt(0);function o(t,e,r){arguments.length<3&&(r=e,e=null);var o=Mn(t,n,null==e?a:i(e),r);return o.row=function(t){return arguments.length?o.response(null==(e=t)?a:i(t)):e},o}function a(t){return o.parse(t.responseText)}function i(t){return function(n){return o.parse(n.responseText,t)}}function u(n){return n.map(s).join(t)}function s(t){return e.test(t)?'"'+t.replace(/\"/g,'""')+'"':t}return o.parse=function(t,n){var e;return o.parseRows(t,(function(t,r){if(e)return e(t,r-1);var o=new Function("d","return {"+t.map((function(t,n){return JSON.stringify(t)+": d["+n+"]"})).join(",")+"}");e=n?function(t,e){return n(o(t),e)}:o}))},o.parseRows=function(t,n){var e,o,a={},i={},u=[],s=t.length,l=0,c=0;function f(){if(l>=s)return i;if(o)return o=!1,a;var n=l;if(34===t.charCodeAt(n)){for(var e=n;e++24?(isFinite(n)&&(clearTimeout(Sn),Sn=setTimeout(Tn,n)),kn=0):(kn=1,An(Tn))}function Rn(){for(var t=Date.now(),n=wn;n;)t>=n.t&&n.c(t-n.t)&&(n.c=null),n=n.n;return t}function Pn(){for(var t,n=wn,e=1/0;n;)n.c?(n.t8?function(t){return t/e}:function(t){return t*e},symbol:t}}));function Cn(t){var n=t.decimal,e=t.thousands,r=t.grouping,o=t.currency,i=r&&e?function(t,n){for(var o=t.length,a=[],i=0,u=r[0],s=0;o>0&&u>0&&(s+u+1>n&&(u=Math.max(1,n-s)),a.push(t.substring(o-=u,o+u)),!((s+=u+1)>n));)u=r[i=(i+1)%r.length];return a.reverse().join(e)}:L;return function(t){var e=Ln.exec(t),r=e[1]||" ",u=e[2]||">",s=e[3]||"-",l=e[4]||"",c=e[5],f=+e[6],h=e[7],p=e[8],d=e[9],m=1,g="",v="",y=!1,b=!0;switch(p&&(p=+p.substring(1)),(c||"0"===r&&"="===u)&&(c=r="0",u="="),d){case"n":h=!0,d="g";break;case"%":m=100,v="%",d="f";break;case"p":m=100,v="%",d="r";break;case"b":case"o":case"x":case"X":"#"===l&&(g="0"+d.toLowerCase());case"c":b=!1;case"d":y=!0,p=0;break;case"s":m=-1,d="r"}"$"===l&&(g=o[0],v=o[1]),"r"!=d||p||(d="g"),null!=p&&("g"==d?p=Math.max(1,Math.min(21,p)):"e"!=d&&"f"!=d||(p=Math.max(0,Math.min(20,p)))),d=Un.get(d)||Dn;var x=c&&h;return function(t){var e=v;if(y&&t%1)return"";var o=t<0||0===t&&1/t<0?(t=-t,"-"):"-"===s?"":s;if(m<0){var l=a.formatPrefix(t,p);t=l.scale(t),e=l.symbol+v}else t*=m;var M,w,_=(t=d(t,p)).lastIndexOf(".");if(_<0){var k=b?t.lastIndexOf("e"):-1;k<0?(M=t,w=""):(M=t.substring(0,k),w=t.substring(k))}else M=t.substring(0,_),w=n+t.substring(_+1);!c&&h&&(M=i(M,1/0));var S=g.length+M.length+w.length+(x?0:o.length),A=S"===u?A+o+t:"^"===u?A.substring(0,S>>=1)+o+t+A.substring(S):o+(x?t:A+t))+e}}}a.formatPrefix=function(t,n){var e=0;return(t=+t)&&(t<0&&(t*=-1),n&&(t=a.round(t,Nn(t,n))),e=1+Math.floor(1e-12+Math.log(t)/Math.LN10),e=Math.max(-24,Math.min(24,3*Math.floor((e-1)/3)))),On[8+e/3]};var Ln=/(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i,Un=a.map({b:function(t){return t.toString(2)},c:function(t){return String.fromCharCode(t)},o:function(t){return t.toString(8)},x:function(t){return t.toString(16)},X:function(t){return t.toString(16).toUpperCase()},g:function(t,n){return t.toPrecision(n)},e:function(t,n){return t.toExponential(n)},f:function(t,n){return t.toFixed(n)},r:function(t,n){return(t=a.round(t,Nn(t,n))).toFixed(Math.max(0,Math.min(20,Nn(t*(1+1e-15),n))))}});function Dn(t){return t+""}var jn=a.time={},zn=Date;function qn(){this._=new Date(arguments.length>1?Date.UTC.apply(this,arguments):arguments[0])}qn.prototype={getDate:function(){return this._.getUTCDate()},getDay:function(){return this._.getUTCDay()},getFullYear:function(){return this._.getUTCFullYear()},getHours:function(){return this._.getUTCHours()},getMilliseconds:function(){return this._.getUTCMilliseconds()},getMinutes:function(){return this._.getUTCMinutes()},getMonth:function(){return this._.getUTCMonth()},getSeconds:function(){return this._.getUTCSeconds()},getTime:function(){return this._.getTime()},getTimezoneOffset:function(){return 0},valueOf:function(){return this._.valueOf()},setDate:function(){Fn.setUTCDate.apply(this._,arguments)},setDay:function(){Fn.setUTCDay.apply(this._,arguments)},setFullYear:function(){Fn.setUTCFullYear.apply(this._,arguments)},setHours:function(){Fn.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){Fn.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){Fn.setUTCMinutes.apply(this._,arguments)},setMonth:function(){Fn.setUTCMonth.apply(this._,arguments)},setSeconds:function(){Fn.setUTCSeconds.apply(this._,arguments)},setTime:function(){Fn.setTime.apply(this._,arguments)}};var Fn=Date.prototype;function Bn(t,n,e){function r(n){var e=t(n),r=a(e,1);return n-e1)for(;i=l)return-1;if(37===(o=n.charCodeAt(u++))){if(i=n.charAt(u++),!(a=w[i in Yn?n.charAt(u++):i])||(r=a(t,e,r))<0)return-1}else if(o!=e.charCodeAt(r++))return-1}return r}c.utc=function(t){var n=c(t);function e(t){try{var e=new(zn=qn);return e._=t,n(e)}finally{zn=Date}}return e.parse=function(t){try{zn=qn;var e=n.parse(t);return e&&e._}finally{zn=Date}},e.toString=n.toString,e},c.multi=c.utc.multi=fe;var h=a.map(),p=Wn(i),d=Zn(i),m=Wn(u),g=Zn(u),v=Wn(s),y=Zn(s),b=Wn(l),x=Zn(l);o.forEach((function(t,n){h.set(t.toLowerCase(),n)}));var M={a:function(t){return u[t.getDay()]},A:function(t){return i[t.getDay()]},b:function(t){return l[t.getMonth()]},B:function(t){return s[t.getMonth()]},c:c(n),d:function(t,n){return Gn(t.getDate(),n,2)},e:function(t,n){return Gn(t.getDate(),n,2)},H:function(t,n){return Gn(t.getHours(),n,2)},I:function(t,n){return Gn(t.getHours()%12||12,n,2)},j:function(t,n){return Gn(1+jn.dayOfYear(t),n,3)},L:function(t,n){return Gn(t.getMilliseconds(),n,3)},m:function(t,n){return Gn(t.getMonth()+1,n,2)},M:function(t,n){return Gn(t.getMinutes(),n,2)},p:function(t){return o[+(t.getHours()>=12)]},S:function(t,n){return Gn(t.getSeconds(),n,2)},U:function(t,n){return Gn(jn.sundayOfYear(t),n,2)},w:function(t){return t.getDay()},W:function(t,n){return Gn(jn.mondayOfYear(t),n,2)},x:c(e),X:c(r),y:function(t,n){return Gn(t.getFullYear()%100,n,2)},Y:function(t,n){return Gn(t.getFullYear()%1e4,n,4)},Z:le,"%":function(){return"%"}},w={a:function(t,n,e){m.lastIndex=0;var r=m.exec(n.slice(e));return r?(t.w=g.get(r[0].toLowerCase()),e+r[0].length):-1},A:function(t,n,e){p.lastIndex=0;var r=p.exec(n.slice(e));return r?(t.w=d.get(r[0].toLowerCase()),e+r[0].length):-1},b:function(t,n,e){b.lastIndex=0;var r=b.exec(n.slice(e));return r?(t.m=x.get(r[0].toLowerCase()),e+r[0].length):-1},B:function(t,n,e){v.lastIndex=0;var r=v.exec(n.slice(e));return r?(t.m=y.get(r[0].toLowerCase()),e+r[0].length):-1},c:function(t,n,e){return f(t,M.c.toString(),n,e)},d:re,e:re,H:ae,I:ae,j:oe,L:se,m:ee,M:ie,p:function(t,n,e){var r=h.get(n.slice(e,e+=2).toLowerCase());return null==r?-1:(t.p=r,e)},S:ue,U:$n,w:Jn,W:Kn,x:function(t,n,e){return f(t,M.x.toString(),n,e)},X:function(t,n,e){return f(t,M.X.toString(),n,e)},y:te,Y:Qn,Z:ne,"%":ce};return c}jn.year=Bn((function(t){return(t=jn.day(t)).setMonth(0,1),t}),(function(t,n){t.setFullYear(t.getFullYear()+n)}),(function(t){return t.getFullYear()})),jn.years=jn.year.range,jn.years.utc=jn.year.utc.range,jn.day=Bn((function(t){var n=new zn(2e3,0);return n.setFullYear(t.getFullYear(),t.getMonth(),t.getDate()),n}),(function(t,n){t.setDate(t.getDate()+n)}),(function(t){return t.getDate()-1})),jn.days=jn.day.range,jn.days.utc=jn.day.utc.range,jn.dayOfYear=function(t){var n=jn.year(t);return Math.floor((t-n-6e4*(t.getTimezoneOffset()-n.getTimezoneOffset()))/864e5)},["sunday","monday","tuesday","wednesday","thursday","friday","saturday"].forEach((function(t,n){n=7-n;var e=jn[t]=Bn((function(t){return(t=jn.day(t)).setDate(t.getDate()-(t.getDay()+n)%7),t}),(function(t,n){t.setDate(t.getDate()+7*Math.floor(n))}),(function(t){var e=jn.year(t).getDay();return Math.floor((jn.dayOfYear(t)+(e+n)%7)/7)-(e!==n)}));jn[t+"s"]=e.range,jn[t+"s"].utc=e.utc.range,jn[t+"OfYear"]=function(t){var e=jn.year(t).getDay();return Math.floor((jn.dayOfYear(t)+(e+n)%7)/7)}})),jn.week=jn.sunday,jn.weeks=jn.sunday.range,jn.weeks.utc=jn.sunday.utc.range,jn.weekOfYear=jn.sundayOfYear;var Yn={"-":"",_:" ",0:"0"},Vn=/^\s*\d+/,Hn=/^%/;function Gn(t,n,e){var r=t<0?"-":"",o=(r?-t:t)+"",a=o.length;return r+(a68?1900:2e3),e+o[0].length):-1}function ne(t,n,e){return/^[+-]\d{4}$/.test(n=n.slice(e,e+5))?(t.Z=-n,e+5):-1}function ee(t,n,e){Vn.lastIndex=0;var r=Vn.exec(n.slice(e,e+2));return r?(t.m=r[0]-1,e+r[0].length):-1}function re(t,n,e){Vn.lastIndex=0;var r=Vn.exec(n.slice(e,e+2));return r?(t.d=+r[0],e+r[0].length):-1}function oe(t,n,e){Vn.lastIndex=0;var r=Vn.exec(n.slice(e,e+3));return r?(t.j=+r[0],e+r[0].length):-1}function ae(t,n,e){Vn.lastIndex=0;var r=Vn.exec(n.slice(e,e+2));return r?(t.H=+r[0],e+r[0].length):-1}function ie(t,n,e){Vn.lastIndex=0;var r=Vn.exec(n.slice(e,e+2));return r?(t.M=+r[0],e+r[0].length):-1}function ue(t,n,e){Vn.lastIndex=0;var r=Vn.exec(n.slice(e,e+2));return r?(t.S=+r[0],e+r[0].length):-1}function se(t,n,e){Vn.lastIndex=0;var r=Vn.exec(n.slice(e,e+3));return r?(t.L=+r[0],e+r[0].length):-1}function le(t){var n=t.getTimezoneOffset(),e=n>0?"-":"+",r=w(n)/60|0,o=w(n)%60;return e+Gn(r,"0",2)+Gn(o,"0",2)}function ce(t,n,e){Hn.lastIndex=0;var r=Hn.exec(n.slice(e,e+1));return r?e+r[0].length:-1}function fe(t){for(var n=t.length,e=-1;++e=0?1:-1,u=i*a,s=Math.cos(n),l=Math.sin(n),c=o*l,f=r*s+c*Math.cos(u),h=c*i*Math.sin(u);Ce.add(Math.atan2(h,f)),e=t,r=s,o=l}Le.point=function(i,u){Le.point=a,e=(t=i)*Lt,r=Math.cos(u=(n=u)*Lt/2+Pt/4),o=Math.sin(u)},Le.lineEnd=function(){a(t,n)}}function De(t){var n=t[0],e=t[1],r=Math.cos(e);return[r*Math.cos(n),r*Math.sin(n),Math.sin(e)]}function je(t,n){return t[0]*n[0]+t[1]*n[1]+t[2]*n[2]}function ze(t,n){return[t[1]*n[2]-t[2]*n[1],t[2]*n[0]-t[0]*n[2],t[0]*n[1]-t[1]*n[0]]}function qe(t,n){t[0]+=n[0],t[1]+=n[1],t[2]+=n[2]}function Fe(t,n){return[t[0]*n,t[1]*n,t[2]*n]}function Be(t){var n=Math.sqrt(t[0]*t[0]+t[1]*t[1]+t[2]*t[2]);t[0]/=n,t[1]/=n,t[2]/=n}function Ie(t){return[Math.atan2(t[1],t[0]),qt(t[2])]}function Xe(t,n){return w(t[0]-n[0])Tt?r=90:l<-Tt&&(n=-90),f[0]=t,f[1]=e}};function p(o,a){c.push(f=[t=o,e=o]),ar&&(r=a)}function d(a,i){var u=De([a*Lt,i*Lt]);if(s){var l=ze(s,u),c=ze([l[1],-l[0],0],l);Be(c),c=Ie(c);var f=a-o,h=f>0?1:-1,d=c[0]*Ut*h,m=w(f)>180;if(m^(h*or&&(r=g);else if(m^(h*o<(d=(d+360)%360-180)&&dr&&(r=i);m?ax(t,e)&&(e=a):x(a,e)>x(t,e)&&(t=a):e>=t?(ae&&(e=a)):a>o?x(t,a)>x(t,e)&&(e=a):x(a,e)>x(t,e)&&(t=a)}else p(a,i);s=u,o=a}function m(){h.point=d}function g(){f[0]=t,f[1]=e,h.point=p,s=null}function v(t,n){if(s){var e=t-o;l+=w(e)>180?e+(e>0?360:-360):e}else i=t,u=n;Le.point(t,n),d(t,n)}function y(){Le.lineStart()}function b(){v(i,u),Le.lineEnd(),w(l)>Tt&&(t=-(e=180)),f[0]=t,f[1]=e,s=null}function x(t,n){return(n-=t)<0?n+360:n}function M(t,n){return t[0]-n[0]}function _(t,n){return n[0]<=n[1]?n[0]<=t&&t<=n[1]:tx(m[0],m[1])&&(m[1]=p[1]),x(p[0],m[1])>x(m[0],m[1])&&(m[0]=p[0])):u.push(m=p);for(var s,l,p,d=-1/0,m=(i=0,u[l=u.length-1]);i<=l;m=p,++i)p=u[i],(s=x(m[1],p[0]))>d&&(d=s,t=p[0],e=m[1])}return c=f=null,t===1/0||n===1/0?[[NaN,NaN],[NaN,NaN]]:[[t,n],[e,r]]}}(),a.geo.centroid=function(t){we=_e=ke=Se=Ae=Ee=Te=Re=Pe=Ne=Oe=0,a.geo.stream(t,Ye);var n=Pe,e=Ne,r=Oe,o=n*n+e*e+r*r;return o=0;--u)o.point((f=c[u])[0],f[1]);else r(p.x,p.p.x,-1,o);p=p.p}c=(p=p.o).z,d=!d}while(!p.v);o.lineEnd()}}}function Qe(t){if(n=t.length){for(var n,e,r=0,o=t[0];++r=0?1:-1,_=w*M,k=_>Pt,S=d*b;if(Ce.add(Math.atan2(S*w*Math.sin(_),m*x+S*Math.cos(_))),a+=k?M+w*Nt:M,k^h>=e^v>=e){var A=ze(De(f),De(t));Be(A);var E=ze(o,A);Be(E);var T=(k^M>=0?-1:1)*qt(E[2]);(r>T||r===T&&(A[0]||A[1]))&&(i+=k^M>=0?1:-1)}if(!g++)break;h=v,d=b,m=x,f=t}}return(a<-Tt||a0){for(b||(i.polygonStart(),b=!0),i.lineStart();++a1&&2&n&&e.push(e.pop().concat(e.shift())),u.push(e.filter(er))}return c}}function er(t){return t.length>1}function rr(){var t,n=[];return{lineStart:function(){n.push(t=[])},point:function(n,e){t.push([n,e])},lineEnd:z,buffer:function(){var e=n;return n=[],t=null,e},rejoin:function(){n.length>1&&n.push(n.pop().concat(n.shift()))}}}function or(t,n){return((t=t.x)[0]<0?t[1]-Ct-Tt:Ct-t[1])-((n=n.x)[0]<0?n[1]-Ct-Tt:Ct-n[1])}var ar=nr($e,(function(t){var n,e=NaN,r=NaN,o=NaN;return{lineStart:function(){t.lineStart(),n=1},point:function(a,i){var u=a>0?Pt:-Pt,s=w(a-e);w(s-Pt)0?Ct:-Ct),t.point(o,r),t.lineEnd(),t.lineStart(),t.point(u,r),t.point(a,r),n=0):o!==u&&s>=Pt&&(w(e-o)Tt?Math.atan((Math.sin(n)*(a=Math.cos(r))*Math.sin(e)-Math.sin(r)*(o=Math.cos(n))*Math.sin(t))/(o*a*i)):(n+r)/2}(e,r,a,i),t.point(o,r),t.lineEnd(),t.lineStart(),t.point(u,r),n=0),t.point(e=a,r=i),o=u},lineEnd:function(){t.lineEnd(),e=r=NaN},clean:function(){return 2-n}}}),(function(t,n,e,r){var o;if(null==t)o=e*Ct,r.point(-Pt,o),r.point(0,o),r.point(Pt,o),r.point(Pt,0),r.point(Pt,-o),r.point(0,-o),r.point(-Pt,-o),r.point(-Pt,0),r.point(-Pt,o);else if(w(t[0]-n[0])>Tt){var a=t[0]0,r=w(n)>Tt;return nr(o,(function(t){var n,u,s,l,c;return{lineStart:function(){l=s=!1,c=1},point:function(f,h){var p,d=[f,h],m=o(f,h),g=e?m?0:i(f,h):m?i(f+(f<0?Pt:-Pt),h):0;if(!n&&(l=s=m)&&t.lineStart(),m!==s&&(p=a(n,d),(Xe(n,p)||Xe(d,p))&&(d[0]+=Tt,d[1]+=Tt,m=o(d[0],d[1]))),m!==s)c=0,m?(t.lineStart(),p=a(d,n),t.point(p[0],p[1])):(p=a(n,d),t.point(p[0],p[1]),t.lineEnd()),n=p;else if(r&&n&&e^m){var v;g&u||!(v=a(d,n,!0))||(c=0,e?(t.lineStart(),t.point(v[0][0],v[0][1]),t.point(v[1][0],v[1][1]),t.lineEnd()):(t.point(v[1][0],v[1][1]),t.lineEnd(),t.lineStart(),t.point(v[0][0],v[0][1])))}!m||n&&Xe(n,d)||t.point(d[0],d[1]),n=d,s=m,u=g},lineEnd:function(){s&&t.lineEnd(),n=null},clean:function(){return c|(l&&s)<<1}}}),Ir(t,6*Lt),e?[0,-t]:[-Pt,t-Pt]);function o(t,e){return Math.cos(t)*Math.cos(e)>n}function a(t,e,r){var o=[1,0,0],a=ze(De(t),De(e)),i=je(a,a),u=a[0],s=i-u*u;if(!s)return!r&&t;var l=n*i/s,c=-n*u/s,f=ze(o,a),h=Fe(o,l);qe(h,Fe(a,c));var p=f,d=je(h,p),m=je(p,p),g=d*d-m*(je(h,h)-1);if(!(g<0)){var v=Math.sqrt(g),y=Fe(p,(-d-v)/m);if(qe(y,h),y=Ie(y),!r)return y;var b,x=t[0],M=e[0],_=t[1],k=e[1];M0^y[1]<(w(y[0]-x)Pt^(x<=y[0]&&y[0]<=M)){var E=Fe(p,(-d+v)/m);return qe(E,h),[y,Ie(E)]}}}function i(n,r){var o=e?t:Pt-t,a=0;return n<-o?a|=1:n>o&&(a|=2),r<-o?a|=4:r>o&&(a|=8),a}}function ur(t,n,e,r){return function(o){var a,i=o.a,u=o.b,s=i.x,l=i.y,c=0,f=1,h=u.x-s,p=u.y-l;if(a=t-s,h||!(a>0)){if(a/=h,h<0){if(a0){if(a>f)return;a>c&&(c=a)}if(a=e-s,h||!(a<0)){if(a/=h,h<0){if(a>f)return;a>c&&(c=a)}else if(h>0){if(a0)){if(a/=p,p<0){if(a0){if(a>f)return;a>c&&(c=a)}if(a=r-l,p||!(a<0)){if(a/=p,p<0){if(a>f)return;a>c&&(c=a)}else if(p>0){if(a0&&(o.a={x:s+c*h,y:l+c*p}),f<1&&(o.b={x:s+f*h,y:l+f*p}),o}}}}}}function sr(t,n,e,r){return function(s){var l,c,f,h,p,d,m,g,v,y,b,x=s,M=rr(),w=ur(t,n,e,r),_={point:A,lineStart:function(){_.point=E,c&&c.push(f=[]),y=!0,v=!1,m=g=NaN},lineEnd:function(){l&&(E(h,p),d&&v&&M.rejoin(),l.push(M.buffer())),_.point=A,v&&s.lineEnd()},polygonStart:function(){s=M,l=[],c=[],b=!0},polygonEnd:function(){s=x,l=a.merge(l);var n=function(t){for(var n=0,e=c.length,r=t[1],o=0;or&&jt(l,a,t)>0&&++n:a[1]<=r&&jt(l,a,t)<0&&--n,l=a;return 0!==n}([t,r]),e=b&&n,o=l.length;(e||o)&&(s.polygonStart(),e&&(s.lineStart(),k(null,null,1,s),s.lineEnd()),o&&Ke(l,i,n,k,s),s.polygonEnd()),l=c=f=null}};function k(a,i,s,l){var c=0,f=0;if(null==a||(c=o(a,s))!==(f=o(i,s))||u(a,i)<0^s>0)do{l.point(0===c||3===c?t:e,c>1?r:n)}while((c=(c+s+4)%4)!==f);else l.point(i[0],i[1])}function S(o,a){return t<=o&&o<=e&&n<=a&&a<=r}function A(t,n){S(t,n)&&s.point(t,n)}function E(t,n){var e=S(t=Math.max(-1e9,Math.min(1e9,t)),n=Math.max(-1e9,Math.min(1e9,n)));if(c&&f.push([t,n]),y)h=t,p=n,d=e,y=!1,e&&(s.lineStart(),s.point(t,n));else if(e&&v)s.point(t,n);else{var r={a:{x:m,y:g},b:{x:t,y:n}};w(r)?(v||(s.lineStart(),s.point(r.a.x,r.a.y)),s.point(r.b.x,r.b.y),e||s.lineEnd(),b=!1):e&&(s.lineStart(),s.point(t,n),b=!1)}m=t,g=n,v=e}return _};function o(r,o){return w(r[0]-t)0?0:3:w(r[0]-e)0?2:1:w(r[1]-n)0?1:0:o>0?3:2}function i(t,n){return u(t.x,n.x)}function u(t,n){var e=o(t,1),r=o(n,1);return e!==r?e-r:0===e?n[1]-t[1]:1===e?t[0]-n[0]:2===e?t[1]-n[1]:n[0]-t[0]}}function lr(t){var n=0,e=Pt/3,r=Lr(t),o=r(n,e);return o.parallels=function(t){return arguments.length?r(n=t[0]*Pt/180,e=t[1]*Pt/180):[n/Pt*180,e/Pt*180]},o}function cr(t,n){var e=Math.sin(t),r=(e+Math.sin(n))/2,o=1+e*(2*r-e),a=Math.sqrt(o)/r;function i(t,n){var e=Math.sqrt(o-2*r*Math.sin(n))/r;return[e*Math.sin(t*=r),a-e*Math.cos(t)]}return i.invert=function(t,n){var e=a-n;return[Math.atan2(t,e)/r,qt((o-(t*t+e*e)*r*r)/(2*r))]},i}a.geo.clipExtent=function(){var t,n,e,r,o,a,i={stream:function(t){return o&&(o.valid=!1),(o=a(t)).valid=!0,o},extent:function(u){return arguments.length?(a=sr(t=+u[0][0],n=+u[0][1],e=+u[1][0],r=+u[1][1]),o&&(o.valid=!1,o=null),i):[[t,n],[e,r]]}};return i.extent([[0,0],[960,500]])},(a.geo.conicEqualArea=function(){return lr(cr)}).raw=cr,a.geo.albers=function(){return a.geo.conicEqualArea().rotate([96,0]).center([-.6,38.7]).parallels([29.5,45.5]).scale(1070)},a.geo.albersUsa=function(){var t,n,e,r,o=a.geo.albers(),i=a.geo.conicEqualArea().rotate([154,0]).center([-2,58.5]).parallels([55,65]),u=a.geo.conicEqualArea().rotate([157,0]).center([-3,19.9]).parallels([8,18]),s={point:function(n,e){t=[n,e]}};function l(o){var a=o[0],i=o[1];return t=null,n(a,i),t||(e(a,i),t)||r(a,i),t}return l.invert=function(t){var n=o.scale(),e=o.translate(),r=(t[0]-e[0])/n,a=(t[1]-e[1])/n;return(a>=.12&&a<.234&&r>=-.425&&r<-.214?i:a>=.166&&a<.234&&r>=-.214&&r<-.115?u:o).invert(t)},l.stream=function(t){var n=o.stream(t),e=i.stream(t),r=u.stream(t);return{point:function(t,o){n.point(t,o),e.point(t,o),r.point(t,o)},sphere:function(){n.sphere(),e.sphere(),r.sphere()},lineStart:function(){n.lineStart(),e.lineStart(),r.lineStart()},lineEnd:function(){n.lineEnd(),e.lineEnd(),r.lineEnd()},polygonStart:function(){n.polygonStart(),e.polygonStart(),r.polygonStart()},polygonEnd:function(){n.polygonEnd(),e.polygonEnd(),r.polygonEnd()}}},l.precision=function(t){return arguments.length?(o.precision(t),i.precision(t),u.precision(t),l):o.precision()},l.scale=function(t){return arguments.length?(o.scale(t),i.scale(.35*t),u.scale(t),l.translate(o.translate())):o.scale()},l.translate=function(t){if(!arguments.length)return o.translate();var a=o.scale(),c=+t[0],f=+t[1];return n=o.translate(t).clipExtent([[c-.455*a,f-.238*a],[c+.455*a,f+.238*a]]).stream(s).point,e=i.translate([c-.307*a,f+.201*a]).clipExtent([[c-.425*a+Tt,f+.12*a+Tt],[c-.214*a-Tt,f+.234*a-Tt]]).stream(s).point,r=u.translate([c-.205*a,f+.212*a]).clipExtent([[c-.214*a+Tt,f+.166*a+Tt],[c-.115*a-Tt,f+.234*a-Tt]]).stream(s).point,l},l.scale(1070)};var fr,hr,pr,dr,mr,gr,vr={point:z,lineStart:z,lineEnd:z,polygonStart:function(){hr=0,vr.lineStart=yr},polygonEnd:function(){vr.lineStart=vr.lineEnd=vr.point=z,fr+=w(hr/2)}};function yr(){var t,n,e,r;function o(t,n){hr+=r*t-e*n,e=t,r=n}vr.point=function(a,i){vr.point=o,t=e=a,n=r=i},vr.lineEnd=function(){o(t,n)}}var br={point:function(t,n){tmr&&(mr=t),ngr&&(gr=n)},lineStart:z,lineEnd:z,polygonStart:z,polygonEnd:z};function xr(){var t=Mr(4.5),n=[],e={point:r,lineStart:function(){e.point=o},lineEnd:i,polygonStart:function(){e.lineEnd=u},polygonEnd:function(){e.lineEnd=i,e.point=r},pointRadius:function(n){return t=Mr(n),e},result:function(){if(n.length){var t=n.join("");return n=[],t}}};function r(e,r){n.push("M",e,",",r,t)}function o(t,r){n.push("M",t,",",r),e.point=a}function a(t,e){n.push("L",t,",",e)}function i(){e.point=r}function u(){n.push("Z")}return e}function Mr(t){return"m0,"+t+"a"+t+","+t+" 0 1,1 0,"+-2*t+"a"+t+","+t+" 0 1,1 0,"+2*t+"z"}var wr,_r={point:kr,lineStart:Sr,lineEnd:Ar,polygonStart:function(){_r.lineStart=Er},polygonEnd:function(){_r.point=kr,_r.lineStart=Sr,_r.lineEnd=Ar}};function kr(t,n){ke+=t,Se+=n,++Ae}function Sr(){var t,n;function e(e,r){var o=e-t,a=r-n,i=Math.sqrt(o*o+a*a);Ee+=i*(t+e)/2,Te+=i*(n+r)/2,Re+=i,kr(t=e,n=r)}_r.point=function(r,o){_r.point=e,kr(t=r,n=o)}}function Ar(){_r.point=kr}function Er(){var t,n,e,r;function o(t,n){var o=t-e,a=n-r,i=Math.sqrt(o*o+a*a);Ee+=i*(e+t)/2,Te+=i*(r+n)/2,Re+=i,Pe+=(i=r*t-e*n)*(e+t),Ne+=i*(r+n),Oe+=3*i,kr(e=t,r=n)}_r.point=function(a,i){_r.point=o,kr(t=e=a,n=r=i)},_r.lineEnd=function(){o(t,n)}}function Tr(t){var n=4.5,e={point:r,lineStart:function(){e.point=o},lineEnd:i,polygonStart:function(){e.lineEnd=u},polygonEnd:function(){e.lineEnd=i,e.point=r},pointRadius:function(t){return n=t,e},result:z};function r(e,r){t.moveTo(e+n,r),t.arc(e,r,n,0,Nt)}function o(n,r){t.moveTo(n,r),e.point=a}function a(n,e){t.lineTo(n,e)}function i(){e.point=r}function u(){t.closePath()}return e}function Rr(t){var n=.5,e=Math.cos(30*Lt),r=16;function o(t){return(r?i:a)(t)}function a(n){return Or(n,(function(e,r){e=t(e,r),n.point(e[0],e[1])}))}function i(n){var e,o,a,i,s,l,c,f,h,p,d,m,g={point:v,lineStart:y,lineEnd:x,polygonStart:function(){n.polygonStart(),g.lineStart=M},polygonEnd:function(){n.polygonEnd(),g.lineStart=y}};function v(e,r){e=t(e,r),n.point(e[0],e[1])}function y(){f=NaN,g.point=b,n.lineStart()}function b(e,o){var a=De([e,o]),i=t(e,o);u(f,h,c,p,d,m,f=i[0],h=i[1],c=e,p=a[0],d=a[1],m=a[2],r,n),n.point(f,h)}function x(){g.point=v,n.lineEnd()}function M(){y(),g.point=w,g.lineEnd=_}function w(t,n){b(e=t,n),o=f,a=h,i=p,s=d,l=m,g.point=b}function _(){u(f,h,c,p,d,m,o,a,e,i,s,l,r,n),g.lineEnd=x,x()}return g}function u(r,o,a,i,s,l,c,f,h,p,d,m,g,v){var y=c-r,b=f-o,x=y*y+b*b;if(x>4*n&&g--){var M=i+p,_=s+d,k=l+m,S=Math.sqrt(M*M+_*_+k*k),A=Math.asin(k/=S),E=w(w(k)-1)n||w((y*N+b*O)/x-.5)>.3||i*p+s*d+l*m0&&16,o):Math.sqrt(n)},o}function Pr(t){var n=Rr((function(n,e){return t([n*Ut,e*Ut])}));return function(t){return Ur(n(t))}}function Nr(t){this.stream=t}function Or(t,n){return{point:n,sphere:function(){t.sphere()},lineStart:function(){t.lineStart()},lineEnd:function(){t.lineEnd()},polygonStart:function(){t.polygonStart()},polygonEnd:function(){t.polygonEnd()}}}function Cr(t){return Lr((function(){return t}))()}function Lr(t){var n,e,r,o,i,u,s=Rr((function(t,e){return[(t=n(t,e))[0]*l+o,i-t[1]*l]})),l=150,c=480,f=250,h=0,p=0,d=0,m=0,g=0,v=ar,y=L,b=null,x=null;function M(t){return[(t=r(t[0]*Lt,t[1]*Lt))[0]*l+o,i-t[1]*l]}function w(t){return(t=r.invert((t[0]-o)/l,(i-t[1])/l))&&[t[0]*Ut,t[1]*Ut]}function _(){r=Je(e=zr(d,m,g),n);var t=n(h,p);return o=c-t[0]*l,i=f+t[1]*l,k()}function k(){return u&&(u.valid=!1,u=null),M}return M.stream=function(t){return u&&(u.valid=!1),(u=Ur(v(e,s(y(t))))).valid=!0,u},M.clipAngle=function(t){return arguments.length?(v=null==t?(b=t,ar):ir((b=+t)*Lt),k()):b},M.clipExtent=function(t){return arguments.length?(x=t,y=t?sr(t[0][0],t[0][1],t[1][0],t[1][1]):L,k()):x},M.scale=function(t){return arguments.length?(l=+t,_()):l},M.translate=function(t){return arguments.length?(c=+t[0],f=+t[1],_()):[c,f]},M.center=function(t){return arguments.length?(h=t[0]%360*Lt,p=t[1]%360*Lt,_()):[h*Ut,p*Ut]},M.rotate=function(t){return arguments.length?(d=t[0]%360*Lt,m=t[1]%360*Lt,g=t.length>2?t[2]%360*Lt:0,_()):[d*Ut,m*Ut,g*Ut]},a.rebind(M,s,"precision"),function(){return n=t.apply(this,arguments),M.invert=n.invert&&w,_()}}function Ur(t){return Or(t,(function(n,e){t.point(n*Lt,e*Lt)}))}function Dr(t,n){return[t,n]}function jr(t,n){return[t>Pt?t-Nt:t<-Pt?t+Nt:t,n]}function zr(t,n,e){return t?n||e?Je(Fr(t),Br(n,e)):Fr(t):n||e?Br(n,e):jr}function qr(t){return function(n,e){return[(n+=t)>Pt?n-Nt:n<-Pt?n+Nt:n,e]}}function Fr(t){var n=qr(t);return n.invert=qr(-t),n}function Br(t,n){var e=Math.cos(t),r=Math.sin(t),o=Math.cos(n),a=Math.sin(n);function i(t,n){var i=Math.cos(n),u=Math.cos(t)*i,s=Math.sin(t)*i,l=Math.sin(n),c=l*e+u*r;return[Math.atan2(s*o-c*a,u*e-l*r),qt(c*o+s*a)]}return i.invert=function(t,n){var i=Math.cos(n),u=Math.cos(t)*i,s=Math.sin(t)*i,l=Math.sin(n),c=l*o-s*a;return[Math.atan2(s*o+l*a,u*e+c*r),qt(c*e-u*r)]},i}function Ir(t,n){var e=Math.cos(t),r=Math.sin(t);return function(o,a,i,u){var s=i*n;null!=o?(o=Xr(e,o),a=Xr(e,a),(i>0?oa)&&(o+=i*Nt)):(o=t+i*Nt,a=t-.5*s);for(var l,c=o;i>0?c>a:c2?t[2]*Lt:0),n.invert=function(n){return(n=t.invert(n[0]*Lt,n[1]*Lt))[0]*=Ut,n[1]*=Ut,n},n},jr.invert=Dr,a.geo.circle=function(){var t,n,e=[0,0],r=6;function o(){var t="function"==typeof e?e.apply(this,arguments):e,r=zr(-t[0]*Lt,-t[1]*Lt,0).invert,o=[];return n(null,null,1,{point:function(t,n){o.push(t=r(t,n)),t[0]*=Ut,t[1]*=Ut}}),{type:"Polygon",coordinates:[o]}}return o.origin=function(t){return arguments.length?(e=t,o):e},o.angle=function(e){return arguments.length?(n=Ir((t=+e)*Lt,r*Lt),o):t},o.precision=function(e){return arguments.length?(n=Ir(t*Lt,(r=+e)*Lt),o):r},o.angle(90)},a.geo.distance=function(t,n){var e,r=(n[0]-t[0])*Lt,o=t[1]*Lt,a=n[1]*Lt,i=Math.sin(r),u=Math.cos(r),s=Math.sin(o),l=Math.cos(o),c=Math.sin(a),f=Math.cos(a);return Math.atan2(Math.sqrt((e=f*i)*e+(e=l*c-s*f*u)*e),s*c+l*f*u)},a.geo.graticule=function(){var t,n,e,r,o,i,u,s,l,c,f,h,p=10,d=p,m=90,g=360,v=2.5;function y(){return{type:"MultiLineString",coordinates:b()}}function b(){return a.range(Math.ceil(r/m)*m,e,m).map(f).concat(a.range(Math.ceil(s/g)*g,u,g).map(h)).concat(a.range(Math.ceil(n/p)*p,t,p).filter((function(t){return w(t%m)>Tt})).map(l)).concat(a.range(Math.ceil(i/d)*d,o,d).filter((function(t){return w(t%g)>Tt})).map(c))}return y.lines=function(){return b().map((function(t){return{type:"LineString",coordinates:t}}))},y.outline=function(){return{type:"Polygon",coordinates:[f(r).concat(h(u).slice(1),f(e).reverse().slice(1),h(s).reverse().slice(1))]}},y.extent=function(t){return arguments.length?y.majorExtent(t).minorExtent(t):y.minorExtent()},y.majorExtent=function(t){return arguments.length?(r=+t[0][0],e=+t[1][0],s=+t[0][1],u=+t[1][1],r>e&&(t=r,r=e,e=t),s>u&&(t=s,s=u,u=t),y.precision(v)):[[r,s],[e,u]]},y.minorExtent=function(e){return arguments.length?(n=+e[0][0],t=+e[1][0],i=+e[0][1],o=+e[1][1],n>t&&(e=n,n=t,t=e),i>o&&(e=i,i=o,o=e),y.precision(v)):[[n,i],[t,o]]},y.step=function(t){return arguments.length?y.majorStep(t).minorStep(t):y.minorStep()},y.majorStep=function(t){return arguments.length?(m=+t[0],g=+t[1],y):[m,g]},y.minorStep=function(t){return arguments.length?(p=+t[0],d=+t[1],y):[p,d]},y.precision=function(a){return arguments.length?(v=+a,l=Yr(i,o,90),c=Vr(n,t,v),f=Yr(s,u,90),h=Vr(r,e,v),y):v},y.majorExtent([[-180,-90+Tt],[180,90-Tt]]).minorExtent([[-180,-80-Tt],[180,80+Tt]])},a.geo.greatArc=function(){var t,n,e=Hr,r=Gr;function o(){return{type:"LineString",coordinates:[t||e.apply(this,arguments),n||r.apply(this,arguments)]}}return o.distance=function(){return a.geo.distance(t||e.apply(this,arguments),n||r.apply(this,arguments))},o.source=function(n){return arguments.length?(e=n,t="function"==typeof n?null:n,o):e},o.target=function(t){return arguments.length?(r=t,n="function"==typeof t?null:t,o):r},o.precision=function(){return arguments.length?o:0},o},a.geo.interpolate=function(t,n){return e=t[0]*Lt,r=t[1]*Lt,o=n[0]*Lt,a=n[1]*Lt,i=Math.cos(r),u=Math.sin(r),s=Math.cos(a),l=Math.sin(a),c=i*Math.cos(e),f=i*Math.sin(e),h=s*Math.cos(o),p=s*Math.sin(o),d=2*Math.asin(Math.sqrt(Bt(a-r)+i*s*Bt(o-e))),m=1/Math.sin(d),(g=d?function(t){var n=Math.sin(t*=d)*m,e=Math.sin(d-t)*m,r=e*c+n*h,o=e*f+n*p,a=e*u+n*l;return[Math.atan2(o,r)*Ut,Math.atan2(a,Math.sqrt(r*r+o*o))*Ut]}:function(){return[e*Ut,r*Ut]}).distance=d,g;var e,r,o,a,i,u,s,l,c,f,h,p,d,m,g},a.geo.length=function(t){return wr=0,a.geo.stream(t,Wr),wr};var Wr={sphere:z,point:z,lineStart:function(){var t,n,e;function r(r,o){var a=Math.sin(o*=Lt),i=Math.cos(o),u=w((r*=Lt)-t),s=Math.cos(u);wr+=Math.atan2(Math.sqrt((u=i*Math.sin(u))*u+(u=e*a-n*i*s)*u),n*a+e*i*s),t=r,n=a,e=i}Wr.point=function(o,a){t=o*Lt,n=Math.sin(a*=Lt),e=Math.cos(a),Wr.point=r},Wr.lineEnd=function(){Wr.point=Wr.lineEnd=z}},lineEnd:z,polygonStart:z,polygonEnd:z};function Zr(t,n){function e(n,e){var r=Math.cos(n),o=Math.cos(e),a=t(r*o);return[a*o*Math.sin(n),a*Math.sin(e)]}return e.invert=function(t,e){var r=Math.sqrt(t*t+e*e),o=n(r),a=Math.sin(o),i=Math.cos(o);return[Math.atan2(t*a,r*i),Math.asin(r&&e*a/r)]},e}var Jr=Zr((function(t){return Math.sqrt(2/(1+t))}),(function(t){return 2*Math.asin(t/2)}));(a.geo.azimuthalEqualArea=function(){return Cr(Jr)}).raw=Jr;var $r=Zr((function(t){var n=Math.acos(t);return n&&n/Math.sin(n)}),L);function Kr(t,n){var e=Math.cos(t),r=function(t){return Math.tan(Pt/4+t/2)},o=t===n?Math.sin(t):Math.log(e/Math.cos(n))/Math.log(r(n)/r(t)),a=e*Math.pow(r(t),o)/o;if(!o)return no;function i(t,n){a>0?n<-Ct+Tt&&(n=-Ct+Tt):n>Ct-Tt&&(n=Ct-Tt);var e=a/Math.pow(r(n),o);return[e*Math.sin(o*t),a-e*Math.cos(o*t)]}return i.invert=function(t,n){var e=a-n,r=Dt(o)*Math.sqrt(t*t+e*e);return[Math.atan2(t,e)/o,2*Math.atan(Math.pow(a/r,1/o))-Ct]},i}function Qr(t,n){var e=Math.cos(t),r=t===n?Math.sin(t):(e-Math.cos(n))/(n-t),o=e/r+t;if(w(r)1&&jt(t[e[r-2]],t[e[r-1]],t[o])<=0;)--r;e[r++]=o}return e.slice(0,r)}function lo(t,n){return t[0]-n[0]||t[1]-n[1]}(a.geo.stereographic=function(){return Cr(oo)}).raw=oo,ao.invert=function(t,n){return[-n,2*Math.atan(Math.exp(t))-Ct]},(a.geo.transverseMercator=function(){var t=eo(ao),n=t.center,e=t.rotate;return t.center=function(t){return t?n([-t[1],t[0]]):[(t=n())[1],-t[0]]},t.rotate=function(t){return t?e([t[0],t[1],t.length>2?t[2]+90:90]):[(t=e())[0],t[1],t[2]-90]},e([0,0,90])}).raw=ao,a.geom={},a.geom.hull=function(t){var n=io,e=uo;if(arguments.length)return r(t);function r(t){if(t.length<3)return[];var r,o=bn(n),a=bn(e),i=t.length,u=[],s=[];for(r=0;r=0;--r)p.push(t[u[l[r]][2]]);for(r=+f;rTt)u=u.L;else{if(!((o=a-To(u,i))>Tt)){r>-Tt?(n=u.P,e=u):o>-Tt?(n=u,e=u.N):n=e=u;break}if(!u.R){n=u;break}u=u.R}var s=_o(t);if(vo.insert(n,s),n||e){if(n===e)return Co(n),e=_o(n.site),vo.insert(s,e),s.edge=e.edge=Do(n.site,s.site),Oo(n),void Oo(e);if(e){Co(n),Co(e);var l=n.site,c=l.x,f=l.y,h=t.x-c,p=t.y-f,d=e.site,m=d.x-c,g=d.y-f,v=2*(h*g-p*m),y=h*h+p*p,b=m*m+g*g,x={x:(g*y-p*b)/v+c,y:(h*b-m*y)/v+f};jo(e.edge,l,d,x),s.edge=Do(l,t,null,x),e.edge=Do(t,d,null,x),Oo(n),Oo(e)}else s.edge=Do(n.site,s.site)}}function Eo(t,n){var e=t.site,r=e.x,o=e.y,a=o-n;if(!a)return r;var i=t.P;if(!i)return-1/0;var u=(e=i.site).x,s=e.y,l=s-n;if(!l)return u;var c=u-r,f=1/a-1/l,h=c/l;return f?(-h+Math.sqrt(h*h-2*f*(c*c/(-2*l)-s+l/2+o-a/2)))/f+r:(r+u)/2}function To(t,n){var e=t.N;if(e)return Eo(e,n);var r=t.site;return r.y===n?r.x:1/0}function Ro(t){this.site=t,this.edges=[]}function Po(t,n){return n.angle-t.angle}function No(){Fo(this),this.x=this.y=this.arc=this.site=this.cy=null}function Oo(t){var n=t.P,e=t.N;if(n&&e){var r=n.site,o=t.site,a=e.site;if(r!==a){var i=o.x,u=o.y,s=r.x-i,l=r.y-u,c=a.x-i,f=2*(s*(g=a.y-u)-l*c);if(!(f>=-Rt)){var h=s*s+l*l,p=c*c+g*g,d=(g*h-l*p)/f,m=(s*p-c*h)/f,g=m+u,v=Mo.pop()||new No;v.arc=t,v.site=o,v.x=d+i,v.y=g+Math.sqrt(d*d+m*m),v.cy=g,t.circle=v;for(var y=null,b=bo._;b;)if(v.y=u)return;if(h>d){if(a){if(a.y>=l)return}else a={x:g,y:s};e={x:g,y:l}}else{if(a){if(a.y1)if(h>d){if(a){if(a.y>=l)return}else a={x:(s-o)/r,y:s};e={x:(l-o)/r,y:l}}else{if(a){if(a.y=u)return}else a={x:i,y:r*i+o};e={x:u,y:r*u+o}}else{if(a){if(a.xTt||w(o-e)>Tt)&&(u.splice(i,0,new zo((v=a.site,y=c,b=w(r-f)Tt?{x:f,y:w(n-f)Tt?{x:w(e-d)Tt?{x:h,y:w(n-h)Tt?{x:w(e-p)=e&&l.x<=o&&l.y>=r&&l.y<=i?[[e,i],[o,i],[o,r],[e,r]]:[]).point=t[u]})),n}function u(t){return t.map((function(t,n){return{x:Math.round(r(t,n)/Tt)*Tt,y:Math.round(o(t,n)/Tt)*Tt,i:n}}))}return i.links=function(t){return Yo(u(t)).edges.filter((function(t){return t.l&&t.r})).map((function(n){return{source:t[n.l.i],target:t[n.r.i]}}))},i.triangles=function(t){var n=[];return Yo(u(t)).cells.forEach((function(e,r){for(var o,a=e.site,i=e.edges.sort(Po),u=-1,s=i.length,l=i[s-1].edge,c=l.l===a?l.r:l.l;++ua||f>i||h=M)<<1|n>=x,_=w+4;w<_;++w)if(l=b[3&w])switch(3&w){case 0:t(l,c,f,x,M);break;case 1:t(l,x,f,h,M);break;case 2:t(l,c,M,x,p);break;case 3:t(l,x,M,h,p)}}}(t,r,o,a,i),u}function Ko(t,n){t=a.rgb(t),n=a.rgb(n);var e=t.r,r=t.g,o=t.b,i=n.r-e,u=n.g-r,s=n.b-o;return function(t){return"#"+hn(Math.round(e+i*t))+hn(Math.round(r+u*t))+hn(Math.round(o+s*t))}}function Qo(t,n){var e,r={},o={};for(e in t)e in n?r[e]=oa(t[e],n[e]):o[e]=t[e];for(e in n)e in t||(o[e]=n[e]);return function(t){for(e in r)o[e]=r[e](t);return o}}function ta(t,n){return t=+t,n=+n,function(e){return t*(1-e)+n*e}}function na(t,n){var e,r,o,a=ea.lastIndex=ra.lastIndex=0,i=-1,u=[],s=[];for(t+="",n+="";(e=ea.exec(t))&&(r=ra.exec(n));)(o=r.index)>a&&(o=n.slice(a,o),u[i]?u[i]+=o:u[++i]=o),(e=e[0])===(r=r[0])?u[i]?u[i]+=r:u[++i]=r:(u[++i]=null,s.push({i:i,x:ta(e,r)})),a=ra.lastIndex;return am&&(m=s.x),s.y>g&&(g=s.y),l.push(s.x),c.push(s.y);else for(f=0;fm&&(m=b),x>g&&(g=x),l.push(b),c.push(x)}var M=m-p,_=g-d;function k(t,n,e,r,o,a,i,u){if(!isNaN(e)&&!isNaN(r))if(t.leaf){var s=t.x,l=t.y;if(null!=s)if(w(s-e)+w(l-r)<.01)S(t,n,e,r,o,a,i,u);else{var c=t.point;t.x=t.y=t.point=null,S(t,c,s,l,o,a,i,u),S(t,n,e,r,o,a,i,u)}else t.x=e,t.y=r,t.point=n}else S(t,n,e,r,o,a,i,u)}function S(t,n,e,r,o,a,i,u){var s=.5*(o+i),l=.5*(a+u),c=e>=s,f=r>=l,h=f<<1|c;t.leaf=!1,c?o=s:i=s,f?a=l:u=l,k(t=t.nodes[h]||(t.nodes[h]={leaf:!0,nodes:[],point:null,x:null,y:null}),n,e,r,o,a,i,u)}M>_?g=d+M:m=p+_;var A={leaf:!0,nodes:[],point:null,x:null,y:null,add:function(t){k(A,t,+v(t,++f),+y(t,f),p,d,m,g)},visit:function(t){Jo(t,A,p,d,m,g)},find:function(t){return $o(A,t[0],t[1],p,d,m,g)}};if(f=-1,null==n){for(;++f=0&&!(e=a.interpolators[r](t,n)););return e}function aa(t,n){var e,r=[],o=[],a=t.length,i=n.length,u=Math.min(t.length,n.length);for(e=0;e=1?1:t(n)}}function ca(t){return function(n){return 1-t(1-n)}}function fa(t){return function(n){return.5*(n<.5?t(2*n):2-t(2-2*n))}}function ha(t){return t*t}function pa(t){return t*t*t}function da(t){if(t<=0)return 0;if(t>=1)return 1;var n=t*t,e=n*t;return 4*(t<.5?e:3*(t-n)+e-.75)}function ma(t){return 1-Math.cos(t*Ct)}function ga(t){return Math.pow(2,10*(t-1))}function va(t){return 1-Math.sqrt(1-t*t)}function ya(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375}function ba(t,n){return n-=t,function(e){return Math.round(t+n*e)}}function xa(t){var n=[t.a,t.b],e=[t.c,t.d],r=wa(n),o=Ma(n,e),a=wa(function(t,n,e){return t[0]+=e*n[0],t[1]+=e*n[1],t}(e,n,-o))||0;n[0]*e[1]=0?t.slice(0,n):t,r=n>=0?t.slice(n+1):"in";return e=ua.get(e)||ia,la((r=sa.get(r)||L)(e.apply(null,i.call(arguments,1))))},a.interpolateHcl=function(t,n){t=a.hcl(t),n=a.hcl(n);var e=t.h,r=t.c,o=t.l,i=n.h-e,u=n.c-r,s=n.l-o;return isNaN(u)&&(u=0,r=isNaN(r)?n.c:r),isNaN(i)?(i=0,e=isNaN(e)?n.h:e):i>180?i-=360:i<-180&&(i+=360),function(t){return Kt(e+i*t,r+u*t,o+s*t)+""}},a.interpolateHsl=function(t,n){t=a.hsl(t),n=a.hsl(n);var e=t.h,r=t.s,o=t.l,i=n.h-e,u=n.s-r,s=n.l-o;return isNaN(u)&&(u=0,r=isNaN(r)?n.s:r),isNaN(i)?(i=0,e=isNaN(e)?n.h:e):i>180?i-=360:i<-180&&(i+=360),function(t){return Zt(e+i*t,r+u*t,o+s*t)+""}},a.interpolateLab=function(t,n){t=a.lab(t),n=a.lab(n);var e=t.l,r=t.a,o=t.b,i=n.l-e,u=n.a-r,s=n.b-o;return function(t){return en(e+i*t,r+u*t,o+s*t)+""}},a.interpolateRound=ba,a.transform=function(t){var n=s.createElementNS(a.ns.prefix.svg,"g");return(a.transform=function(t){if(null!=t){n.setAttribute("transform",t);var e=n.transform.baseVal.consolidate()}return new xa(e?e.matrix:_a)})(t)},xa.prototype.toString=function(){return"translate("+this.translate+")rotate("+this.rotate+")skewX("+this.skew+")scale("+this.scale+")"};var _a={a:1,b:0,c:0,d:1,e:0,f:0};function ka(t){return t.length?t.pop()+",":""}function Sa(t,n){var e=[],r=[];return t=a.transform(t),n=a.transform(n),function(t,n,e,r){if(t[0]!==n[0]||t[1]!==n[1]){var o=e.push("translate(",null,",",null,")");r.push({i:o-4,x:ta(t[0],n[0])},{i:o-2,x:ta(t[1],n[1])})}else(n[0]||n[1])&&e.push("translate("+n+")")}(t.translate,n.translate,e,r),function(t,n,e,r){t!==n?(t-n>180?n+=360:n-t>180&&(t+=360),r.push({i:e.push(ka(e)+"rotate(",null,")")-2,x:ta(t,n)})):n&&e.push(ka(e)+"rotate("+n+")")}(t.rotate,n.rotate,e,r),function(t,n,e,r){t!==n?r.push({i:e.push(ka(e)+"skewX(",null,")")-2,x:ta(t,n)}):n&&e.push(ka(e)+"skewX("+n+")")}(t.skew,n.skew,e,r),function(t,n,e,r){if(t[0]!==n[0]||t[1]!==n[1]){var o=e.push(ka(e)+"scale(",null,",",null,")");r.push({i:o-4,x:ta(t[0],n[0])},{i:o-2,x:ta(t[1],n[1])})}else 1===n[0]&&1===n[1]||e.push(ka(e)+"scale("+n+")")}(t.scale,n.scale,e,r),t=n=null,function(t){for(var n,o=-1,a=r.length;++o0?e=n:(t.c=null,t.t=NaN,t=null,s.end({type:"end",alpha:e=0})):n>0&&(s.start({type:"start",alpha:e=n}),t=En(u.tick)),u):e},u.start=function(){var t,n,e,a=v.length,s=y.length,c=l[0],d=l[1];for(t=0;t=0;)e.push(o[r])}function qa(t,n){for(var e=[t],r=[];null!=(t=e.pop());)if(r.push(t),(a=t.children)&&(o=a.length))for(var o,a,i=-1;++i=0;)i.push(c=l[s]),c.parent=a,c.depth=a.depth+1;e&&(a.value=0),a.children=l}else e&&(a.value=+e.call(r,a,a.depth)||0),delete a.children;return qa(o,(function(n){var r,o;t&&(r=n.children)&&r.sort(t),e&&(o=n.parent)&&(o.value+=n.value)})),u}return r.sort=function(n){return arguments.length?(t=n,r):t},r.children=function(t){return arguments.length?(n=t,r):n},r.value=function(t){return arguments.length?(e=t,r):e},r.revalue=function(t){return e&&(za(t,(function(t){t.children&&(t.value=0)})),qa(t,(function(t){var n;t.children||(t.value=+e.call(r,t,t.depth)||0),(n=t.parent)&&(n.value+=t.value)}))),t},r},a.layout.partition=function(){var t=a.layout.hierarchy(),n=[1,1];function e(e,r){var o=t.call(this,e,r);return function t(n,e,r,o){var a=n.children;if(n.x=e,n.y=n.depth*o,n.dx=r,n.dy=o,a&&(i=a.length)){var i,u,s,l=-1;for(r=n.value?r/n.value:0;++lu&&(u=r),i.push(r)}for(e=0;eo&&(r=e,o=n);return r}function Qa(t){return t.reduce(ti,0)}function ti(t,n){return t+n[1]}function ni(t,n){return ei(t,Math.ceil(Math.log(n.length)/Math.LN2+1))}function ei(t,n){for(var e=-1,r=+t[0],o=(t[1]-r)/n,a=[];++e<=n;)a[e]=o*e+r;return a}function ri(t){return[a.min(t),a.max(t)]}function oi(t,n){return t.value-n.value}function ai(t,n){var e=t._pack_next;t._pack_next=n,n._pack_prev=t,n._pack_next=e,e._pack_prev=n}function ii(t,n){t._pack_next=n,n._pack_prev=t}function ui(t,n){var e=n.x-t.x,r=n.y-t.y,o=t.r+n.r;return.999*o*o>e*e+r*r}function si(t){if((n=t.children)&&(s=n.length)){var n,e,r,o,a,i,u,s,l=1/0,c=-1/0,f=1/0,h=-1/0;if(n.forEach(li),(e=n[0]).x=-e.r,e.y=0,b(e),s>1&&((r=n[1]).x=r.r,r.y=0,b(r),s>2))for(fi(e,r,o=n[2]),b(o),ai(e,o),e._pack_prev=o,ai(o,r),r=e._pack_next,a=3;a0)for(i=-1;++i=f[0]&&s<=f[1]&&((u=l[a.bisect(h,s,1,d)-1]).y+=m,u.push(o[i]));return l}return o.value=function(t){return arguments.length?(n=t,o):n},o.range=function(t){return arguments.length?(e=bn(t),o):e},o.bins=function(t){return arguments.length?(r="number"==typeof t?function(n){return ei(n,t)}:bn(t),o):r},o.frequency=function(n){return arguments.length?(t=!!n,o):t},o},a.layout.pack=function(){var t,n=a.layout.hierarchy().sort(oi),e=0,r=[1,1];function o(o,a){var i=n.call(this,o,a),u=i[0],s=r[0],l=r[1],c=null==t?Math.sqrt:"function"==typeof t?t:function(){return t};if(u.x=u.y=0,qa(u,(function(t){t.r=+c(t.value)})),qa(u,si),e){var f=e*(t?1:Math.max(2*u.r/s,2*u.r/l))/2;qa(u,(function(t){t.r+=f})),qa(u,si),qa(u,(function(t){t.r-=f}))}return function t(n,e,r,o){var a=n.children;if(n.x=e+=o*n.x,n.y=r+=o*n.y,n.r*=o,a)for(var i=-1,u=a.length;++ip.x&&(p=t),t.depth>d.depth&&(d=t)}));var m=n(h,p)/2-h.x,g=e[0]/(p.x+n(p,h)/2+m),v=e[1]/(d.depth||1);za(c,(function(t){t.x=(t.x+m)*g,t.y=t.depth*v}))}return l}function i(t){var e=t.children,r=t.parent.children,o=t.i?r[t.i-1]:null;if(e.length){!function(t){for(var n,e=0,r=0,o=t.children,a=o.length;--a>=0;)(n=o[a]).z+=e,n.m+=e,e+=n.s+(r+=n.c)}(t);var a=(e[0].z+e[e.length-1].z)/2;o?(t.z=o.z+n(t._,o._),t.m=t.z-a):t.z=a}else o&&(t.z=o.z+n(t._,o._));t.parent.A=function(t,e,r){if(e){for(var o,a=t,i=t,u=e,s=a.parent.children[0],l=a.m,c=i.m,f=u.m,h=s.m;u=di(u),a=pi(a),u&&a;)s=pi(s),(i=di(i)).a=t,(o=u.z+f-a.z-l+n(u._,a._))>0&&(mi(gi(u,t,r),t,o),l+=o,c+=o),f+=u.m,l+=a.m,h+=s.m,c+=i.m;u&&!di(i)&&(i.t=u,i.m+=f-c),a&&!pi(s)&&(s.t=a,s.m+=l-h,r=t)}return r}(t,o,t.parent.A||r[0])}function u(t){t._.x=t.z+t.parent.m,t.m+=t.parent.m}function s(t){t.x*=e[0],t.y=t.depth*e[1]}return o.separation=function(t){return arguments.length?(n=t,o):n},o.size=function(t){return arguments.length?(r=null==(e=t)?s:null,o):r?null:e},o.nodeSize=function(t){return arguments.length?(r=null==(e=t)?null:s,o):r?e:null},ja(o,t)},a.layout.cluster=function(){var t=a.layout.hierarchy().sort(null).value(null),n=hi,e=[1,1],r=!1;function o(o,i){var u,s=t.call(this,o,i),l=s[0],c=0;qa(l,(function(t){var e=t.children;e&&e.length?(t.x=function(t){return t.reduce((function(t,n){return t+n.x}),0)/t.length}(e),t.y=function(t){return 1+a.max(t,(function(t){return t.y}))}(e)):(t.x=u?c+=n(t,u):0,t.y=0,u=t)}));var f=function t(n){var e=n.children;return e&&e.length?t(e[0]):n}(l),h=function t(n){var e,r=n.children;return r&&(e=r.length)?t(r[e-1]):n}(l),p=f.x-n(f,h)/2,d=h.x+n(h,f)/2;return qa(l,r?function(t){t.x=(t.x-l.x)*e[0],t.y=(l.y-t.y)*e[1]}:function(t){t.x=(t.x-p)/(d-p)*e[0],t.y=(1-(l.y?t.y/l.y:1))*e[1]}),s}return o.separation=function(t){return arguments.length?(n=t,o):n},o.size=function(t){return arguments.length?(r=null==(e=t),o):r?null:e},o.nodeSize=function(t){return arguments.length?(r=null!=(e=t),o):r?e:null},ja(o,t)},a.layout.treemap=function(){var t,n=a.layout.hierarchy(),e=Math.round,r=[1,1],o=null,i=vi,u=!1,s="squarify",l=.5*(1+Math.sqrt(5));function c(t,n){for(var e,r,o=-1,a=t.length;++o0;)u.push(e=l[o-1]),u.area+=e.area,"squarify"!==s||(r=p(u,m))<=h?(l.pop(),h=r):(u.area-=u.pop().area,d(u,m,a,!1),m=Math.min(a.dx,a.dy),u.length=u.area=0,h=1/0);u.length&&(d(u,m,a,!0),u.length=u.area=0),n.forEach(f)}}function h(t){var n=t.children;if(n&&n.length){var e,r=i(t),o=n.slice(),a=[];for(c(o,r.dx*r.dy/t.value),a.area=0;e=o.pop();)a.push(e),a.area+=e.area,null!=e.z&&(d(a,e.z?r.dx:r.dy,r,!o.length),a.length=a.area=0);n.forEach(h)}}function p(t,n){for(var e,r=t.area,o=0,a=1/0,i=-1,u=t.length;++io&&(o=e));return n*=n,(r*=r)?Math.max(n*o*l/r,r/(n*a*l)):1/0}function d(t,n,r,o){var a,i=-1,u=t.length,s=r.x,l=r.y,c=n?e(t.area/n):0;if(n==r.dx){for((o||c>r.dy)&&(c=r.dy);++ir.dx)&&(c=r.dx);++i1);return t+n*e*Math.sqrt(-2*Math.log(o)/o)}},logNormal:function(){var t=a.random.normal.apply(a,arguments);return function(){return Math.exp(t())}},bates:function(t){var n=a.random.irwinHall(t);return function(){return n()/t}},irwinHall:function(t){return function(){for(var n=0,e=0;e2?Si:Mi,u=o?Ea:Aa;return a=t(n,e,u,r),i=t(e,n,u,oa),s}function s(t){return a(t)}return s.invert=function(t){return i(t)},s.domain=function(t){return arguments.length?(n=t.map(Number),u()):n},s.range=function(t){return arguments.length?(e=t,u()):e},s.rangeRound=function(t){return s.range(t).interpolate(ba)},s.clamp=function(t){return arguments.length?(o=t,u()):o},s.interpolate=function(t){return arguments.length?(r=t,u()):r},s.ticks=function(t){return Ri(n,t)},s.tickFormat=function(t,e){return Pi(n,t,e)},s.nice=function(t){return Ei(n,t),u()},s.copy=function(){return t(n,e,r,o)},u()}([0,1],[0,1],oa,!1)};var Ni={s:1,g:1,p:1,r:1,e:1};function Oi(t){return-Math.floor(Math.log(t)/Math.LN10+.01)}a.scale.log=function(){return function t(n,e,r,o){function i(t){return(r?Math.log(t<0?0:t):-Math.log(t>0?0:-t))/Math.log(e)}function u(t){return r?Math.pow(e,t):-Math.pow(e,-t)}function s(t){return n(i(t))}return s.invert=function(t){return u(n.invert(t))},s.domain=function(t){return arguments.length?(r=t[0]>=0,n.domain((o=t.map(Number)).map(i)),s):o},s.base=function(t){return arguments.length?(e=+t,n.domain(o.map(i)),s):e},s.nice=function(){var t=wi(o.map(i),r?Math:Li);return n.domain(t),o=t.map(u),s},s.ticks=function(){var t=bi(o),n=[],a=t[0],s=t[1],l=Math.floor(i(a)),c=Math.ceil(i(s)),f=e%1?2:e;if(isFinite(c-l)){if(r){for(;l0;h--)n.push(u(l)*h);for(l=0;n[l]s;c--);n=n.slice(l,c)}return n},s.tickFormat=function(t,n){if(!arguments.length)return Ci;arguments.length<2?n=Ci:"function"!=typeof n&&(n=a.format(n));var r=Math.max(1,e*t/s.ticks().length);return function(t){var o=t/u(Math.round(i(t)));return o*e0?r[t-1]:n[0],tf?0:1;if(l=Ot)return s(l,p)+(u?s(u,1-p):"")+"Z";var d,m,g,v,y,b,x,M,w,_,k,S,A=0,E=0,T=[];if((v=(+i.apply(this,arguments)||0)/2)&&(g=r===Bi?Math.sqrt(u*u+l*l):+r.apply(this,arguments),p||(E*=-1),l&&(E=qt(g/l*Math.sin(v))),u&&(A=qt(g/u*Math.sin(v)))),l){y=l*Math.cos(c+E),b=l*Math.sin(c+E),x=l*Math.cos(f-E),M=l*Math.sin(f-E);var R=Math.abs(f-c-2*E)<=Pt?0:1;if(E&&Gi(y,b,x,M)===p^R){var P=(c+f)/2;y=l*Math.cos(P),b=l*Math.sin(P),x=M=null}}else y=b=0;if(u){w=u*Math.cos(f-A),_=u*Math.sin(f-A),k=u*Math.cos(c+A),S=u*Math.sin(c+A);var N=Math.abs(c-f+2*A)<=Pt?0:1;if(A&&Gi(w,_,k,S)===1-p^N){var O=(c+f)/2;w=u*Math.cos(O),_=u*Math.sin(O),k=S=null}}else w=_=0;if(h>Tt&&(d=Math.min(Math.abs(l-u)/2,+e.apply(this,arguments)))>.001){m=u0?0:1}function Wi(t,n,e,r,o){var a=t[0]-n[0],i=t[1]-n[1],u=(o?r:-r)/Math.sqrt(a*a+i*i),s=u*i,l=-u*a,c=t[0]+s,f=t[1]+l,h=n[0]+s,p=n[1]+l,d=(c+h)/2,m=(f+p)/2,g=h-c,v=p-f,y=g*g+v*v,b=e-r,x=c*p-h*f,M=(v<0?-1:1)*Math.sqrt(Math.max(0,b*b*y-x*x)),w=(x*v-g*M)/y,_=(-x*g-v*M)/y,k=(x*v+g*M)/y,S=(-x*g+v*M)/y,A=w-d,E=_-m,T=k-d,R=S-m;return A*A+E*E>T*T+R*R&&(w=k,_=S),[[w-s,_-l],[w*e/b,_*e/b]]}function Zi(t){var n=io,e=uo,r=$e,o=$i,a=o.key,i=.7;function u(a){var u,s=[],l=[],c=-1,f=a.length,h=bn(n),p=bn(e);function d(){s.push("M",o(t(l),i))}for(;++c1&&o.push("H",r[0]),o.join("")},"step-before":Qi,"step-after":tu,basis:ru,"basis-open":function(t){if(t.length<4)return $i(t);for(var n,e=[],r=-1,o=t.length,a=[0],i=[0];++r<3;)n=t[r],a.push(n[0]),i.push(n[1]);for(e.push(ou(uu,a)+","+ou(uu,i)),--r;++r9&&(o=3*n/Math.sqrt(o),i[u]=o*e,i[u+1]=o*r));for(u=-1;++u<=s;)o=(t[Math.min(s,u+1)][0]-t[Math.max(0,u-1)][0])/(6*(1+i[u]*i[u])),a.push([o||0,i[u]*o||0]);return a}(t))}});function $i(t){return t.length>1?t.join("L"):t+"Z"}function Ki(t){return t.join("L")+"Z"}function Qi(t){for(var n=0,e=t.length,r=t[0],o=[r[0],",",r[1]];++n1){u=n[1],a=t[s],s++,r+="C"+(o[0]+i[0])+","+(o[1]+i[1])+","+(a[0]-u[0])+","+(a[1]-u[1])+","+a[0]+","+a[1];for(var l=2;lPt)+",1 "+n}function s(t,n,e,r){return"Q 0,0 "+r}return a.radius=function(t){return arguments.length?(e=bn(t),a):e},a.source=function(n){return arguments.length?(t=bn(n),a):t},a.target=function(t){return arguments.length?(n=bn(t),a):n},a.startAngle=function(t){return arguments.length?(r=bn(t),a):r},a.endAngle=function(t){return arguments.length?(o=bn(t),a):o},a},a.svg.diagonal=function(){var t=Hr,n=Gr,e=pu;function r(r,o){var a=t.call(this,r,o),i=n.call(this,r,o),u=(a.y+i.y)/2,s=[a,{x:a.x,y:u},{x:i.x,y:u},i];return"M"+(s=s.map(e))[0]+"C"+s[1]+" "+s[2]+" "+s[3]}return r.source=function(n){return arguments.length?(t=bn(n),r):t},r.target=function(t){return arguments.length?(n=bn(t),r):n},r.projection=function(t){return arguments.length?(e=t,r):e},r},a.svg.diagonal.radial=function(){var t=a.svg.diagonal(),n=pu,e=t.projection;return t.projection=function(t){return arguments.length?e(du(n=t)):n},t},a.svg.symbol=function(){var t=gu,n=mu;function e(e,r){return(yu.get(t.call(this,e,r))||vu)(n.call(this,e,r))}return e.type=function(n){return arguments.length?(t=bn(n),e):t},e.size=function(t){return arguments.length?(n=bn(t),e):n},e};var yu=a.map({circle:vu,cross:function(t){var n=Math.sqrt(t/5)/2;return"M"+-3*n+","+-n+"H"+-n+"V"+-3*n+"H"+n+"V"+-n+"H"+3*n+"V"+n+"H"+n+"V"+3*n+"H"+-n+"V"+n+"H"+-3*n+"Z"},diamond:function(t){var n=Math.sqrt(t/(2*xu)),e=n*xu;return"M0,"+-n+"L"+e+",0 0,"+n+" "+-e+",0Z"},square:function(t){var n=Math.sqrt(t)/2;return"M"+-n+","+-n+"L"+n+","+-n+" "+n+","+n+" "+-n+","+n+"Z"},"triangle-down":function(t){var n=Math.sqrt(t/bu),e=n*bu/2;return"M0,"+e+"L"+n+","+-e+" "+-n+","+-e+"Z"},"triangle-up":function(t){var n=Math.sqrt(t/bu),e=n*bu/2;return"M0,"+-e+"L"+n+","+e+" "+-n+","+e+"Z"}});a.svg.symbolTypes=yu.keys();var bu=Math.sqrt(3),xu=Math.tan(30*Lt);J.transition=function(t){for(var n,e,r=ku||++Eu,o=Pu(t),a=[],i=Su||{time:Date.now(),ease:da,delay:0,duration:250},u=-1,s=this.length;++u0;)l[--h].call(t,i);if(a>=1)return f.event&&f.event.end.call(t,t.__data__,n),--c.count?delete c[r]:delete t[e],1}f||(a=o.time,i=En((function(t){var n=f.delay;if(i.t=n+a,n<=t)return h(t-n);i.c=h}),0,a),f=c[r]={tween:new S,time:a,timer:i,delay:o.delay,duration:o.duration,ease:o.ease,index:n},o=null,++c.count)}Au.call=J.call,Au.empty=J.empty,Au.node=J.node,Au.size=J.size,a.transition=function(t,n){return t&&t.transition?ku?t.transition(n):t:a.selection().transition(t)},a.transition.prototype=Au,Au.select=function(t){var n,e,r,o=this.id,a=this.namespace,i=[];t=$(t);for(var u=-1,s=this.length;++urect,.s>rect").attr("width",i[1]-i[0])}function m(t){t.select(".extent").attr("y",u[0]),t.selectAll(".extent,.e>rect,.w>rect").attr("height",u[1]-u[0])}function g(){var f,g,v=this,y=a.select(a.event.target),b=e.of(v,arguments),x=a.select(v),M=y.datum(),w=!/^(n|s)$/.test(M)&&r,_=!/^(e|w)$/.test(M)&&o,k=y.classed("extent"),S=kt(v),A=a.mouse(v),E=a.select(c(v)).on("keydown.brush",P).on("keyup.brush",N);if(a.event.changedTouches?E.on("touchmove.brush",O).on("touchend.brush",L):E.on("mousemove.brush",O).on("mouseup.brush",L),x.interrupt().selectAll("*").interrupt(),k)A[0]=i[0]-A[0],A[1]=u[0]-A[1];else if(M){var T=+/w$/.test(M),R=+/^n/.test(M);g=[i[1-T]-A[0],u[1-R]-A[1]],A[0]=i[T],A[1]=u[R]}else a.event.altKey&&(f=A.slice());function P(){32==a.event.keyCode&&(k||(f=null,A[0]-=i[1],A[1]-=u[1],k=2),B())}function N(){32==a.event.keyCode&&2==k&&(A[0]+=i[1],A[1]+=u[1],k=0,B())}function O(){var t=a.mouse(v),n=!1;g&&(t[0]+=g[0],t[1]+=g[1]),k||(a.event.altKey?(f||(f=[(i[0]+i[1])/2,(u[0]+u[1])/2]),A[0]=i[+(t[0]1?{floor:function(n){for(;u(n=t.floor(n));)n=Xu(n-1);return n},ceil:function(n){for(;u(n=t.ceil(n));)n=Xu(+n+1);return n}}:t))},r.ticks=function(t,n){var e=bi(r.domain()),a=null==t?o(e,10):"number"==typeof t?o(e,t):!t.range&&[{range:t},n];return a&&(t=a[0],n=a[1]),t.range(e[0],Xu(+e[1]+1),n<1?1:n)},r.tickFormat=function(){return e},r.copy=function(){return Iu(t.copy(),n,e)},Ai(r,t)}function Xu(t){return new Date(t)}zu.iso=Date.prototype.toISOString&&+new Date("2000-01-01T00:00:00.000Z")?Bu:Fu,Bu.parse=function(t){var n=new Date(t);return isNaN(n)?null:n},Bu.toString=Fu.toString,jn.second=Bn((function(t){return new zn(1e3*Math.floor(t/1e3))}),(function(t,n){t.setTime(t.getTime()+1e3*Math.floor(n))}),(function(t){return t.getSeconds()})),jn.seconds=jn.second.range,jn.seconds.utc=jn.second.utc.range,jn.minute=Bn((function(t){return new zn(6e4*Math.floor(t/6e4))}),(function(t,n){t.setTime(t.getTime()+6e4*Math.floor(n))}),(function(t){return t.getMinutes()})),jn.minutes=jn.minute.range,jn.minutes.utc=jn.minute.utc.range,jn.hour=Bn((function(t){var n=t.getTimezoneOffset()/60;return new zn(36e5*(Math.floor(t/36e5-n)+n))}),(function(t,n){t.setTime(t.getTime()+36e5*Math.floor(n))}),(function(t){return t.getHours()})),jn.hours=jn.hour.range,jn.hours.utc=jn.hour.utc.range,jn.month=Bn((function(t){return(t=jn.day(t)).setDate(1),t}),(function(t,n){t.setMonth(t.getMonth()+n)}),(function(t){return t.getMonth()})),jn.months=jn.month.range,jn.months.utc=jn.month.utc.range;var Yu=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6],Vu=[[jn.second,1],[jn.second,5],[jn.second,15],[jn.second,30],[jn.minute,1],[jn.minute,5],[jn.minute,15],[jn.minute,30],[jn.hour,1],[jn.hour,3],[jn.hour,6],[jn.hour,12],[jn.day,1],[jn.day,2],[jn.week,1],[jn.month,1],[jn.month,3],[jn.year,1]],Hu=zu.multi([[".%L",function(t){return t.getMilliseconds()}],[":%S",function(t){return t.getSeconds()}],["%I:%M",function(t){return t.getMinutes()}],["%I %p",function(t){return t.getHours()}],["%a %d",function(t){return t.getDay()&&1!=t.getDate()}],["%b %d",function(t){return 1!=t.getDate()}],["%B",function(t){return t.getMonth()}],["%Y",$e]]),Gu={range:function(t,n,e){return a.range(Math.ceil(t/e)*e,+n,e).map(Xu)},floor:L,ceil:L};Vu.year=jn.year,jn.scale=function(){return Iu(a.scale.linear(),Vu,Hu)};var Wu=Vu.map((function(t){return[t[0].utc,t[1]]})),Zu=qu.multi([[".%L",function(t){return t.getUTCMilliseconds()}],[":%S",function(t){return t.getUTCSeconds()}],["%I:%M",function(t){return t.getUTCMinutes()}],["%I %p",function(t){return t.getUTCHours()}],["%a %d",function(t){return t.getUTCDay()&&1!=t.getUTCDate()}],["%b %d",function(t){return 1!=t.getUTCDate()}],["%B",function(t){return t.getUTCMonth()}],["%Y",$e]]);function Ju(t){return JSON.parse(t.responseText)}function $u(t){var n=s.createRange();return n.selectNode(s.body),n.createContextualFragment(t.responseText)}Wu.year=jn.year.utc,jn.scale.utc=function(){return Iu(a.scale.linear(),Wu,Zu)},a.text=xn((function(t){return t.responseText})),a.json=function(t,n){return Mn(t,"application/json",Ju,n)},a.html=function(t,n){return Mn(t,"text/html",$u,n)},a.xml=xn((function(t){return t.responseXML})),this.d3=a,void 0===(o="function"==typeof(r=a)?r.call(n,e,n,t):r)||(t.exports=o)}()}])},t.exports=o()},function(t,n,e){"use strict";var r=e(28);function o(){}t.exports=function(){function t(t,n,e,o,a,i){if(i!==r){var u=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw u.name="Invariant Violation",u}}function n(){return t}t.isRequired=t;var e={array:t,bool:t,func:t,number:t,object:t,string:t,symbol:t,any:t,arrayOf:n,element:t,instanceOf:n,node:t,objectOf:n,oneOf:n,oneOfType:n,shape:n,exact:n};return e.checkPropTypes=o,e.PropTypes=e,e}},function(t,n,e){"use strict";t.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},function(t,n,e){"use strict";var r=e(8),o=e(30),a=e(31),i=e(7),u=e(9),s=e(25),l=e(32);function c(t,n){return n=n.split("// __split__"),new o.Program(t,n[0],n[1])}t.exports=function(t,n,e){var f,h,p,d,m,g,v,y,b,x,M,w,_,k,S,A,E,T,R,P,N,O,C,L,U,D,j,z=this,q=null,F=null,B=null,I=null,X=null,Y=null,V=0,H=!1,G=!1;function W(t){p.viewport(0,0,e,e);var o=u.clone(t);o.zoom=1/f,o.translation.x=0,o.translation.y=0;for(var a=r.mat4.create(),i=0;i<3;i++){var s=r.vec3.random(r.vec3.create(),1);r.mat4.rotate(a,a,10*Math.random(),s)}o.rotation=r.mat4.multiply(r.mat4.create(),a,o.rotation),E.bind(),p.clear(p.COLOR_BUFFER_BIT|p.DEPTH_BUFFER_BIT);var l=u.getRect(o),c=r.mat4.create();r.mat4.ortho(c,l.left,l.right,l.bottom,l.top,0,f);var h=r.mat4.create();r.mat4.lookAt(h,[0,0,0],[0,0,-1],[0,1,0]);var d=r.mat4.create();r.mat4.translate(d,d,[0,0,-f/2]),r.mat4.multiply(d,d,o.rotation),N.setUniform("uProjection","Matrix4fv",!1,c),N.setUniform("uView","Matrix4fv",!1,h),N.setUniform("uModel","Matrix4fv",!1,d),N.setUniform("uBottomLeft","2fv",[l.left,l.bottom]),N.setUniform("uTopRight","2fv",[l.right,l.top]),N.setUniform("uAtomScale","1f",2.5*o.atomScale),N.setUniform("uRelativeAtomScale","1f",t.relativeAtomScale),N.setUniform("uRes","1f",e),N.setUniform("uDepth","1f",f),N.setUniform("uMode","1i",0),N.setUniform("uAtomShade","1f",t.atomShade),q.render(),t.bonds&&null!=F&&(O.setUniform("uProjection","Matrix4fv",!1,c),O.setUniform("uView","Matrix4fv",!1,h),O.setUniform("uModel","Matrix4fv",!1,d),O.setUniform("uRotation","Matrix4fv",!1,o.rotation),O.setUniform("uDepth","1f",f),O.setUniform("uBottomLeft","2fv",[l.left,l.bottom]),O.setUniform("uTopRight","2fv",[l.right,l.top]),O.setUniform("uRes","1f",e),O.setUniform("uBondRadius","1f",2.5*u.getBondRadius(t)),O.setUniform("uBondShade","1f",t.bondShade),O.setUniform("uAtomScale","1f",2.5*t.atomScale),O.setUniform("uRelativeAtomScale","1f",t.relativeAtomScale),O.setUniform("uMode","1i",0),F.render()),p.viewport(0,0,n,n);var y=u.getRect(t),x=u.getRect(o),M=r.mat4.invert(r.mat4.create(),a);T.bind(),p.clear(p.COLOR_BUFFER_BIT|p.DEPTH_BUFFER_BIT),C.setUniform("uSceneDepth","1i",g.index),C.setUniform("uSceneNormal","1i",m.index),C.setUniform("uRandRotDepth","1i",v.index),C.setUniform("uAccumulator","1i",b.index),C.setUniform("uSceneBottomLeft","2fv",[y.left,y.bottom]),C.setUniform("uSceneTopRight","2fv",[y.right,y.top]),C.setUniform("uRotBottomLeft","2fv",[x.left,x.bottom]),C.setUniform("uRotTopRight","2fv",[x.right,x.top]),C.setUniform("uRes","1f",n),C.setUniform("uDepth","1f",f),C.setUniform("uRot","Matrix4fv",!1,a),C.setUniform("uInvRot","Matrix4fv",!1,M),C.setUniform("uSampleCount","1i",V),B.render(),b.activate(),b.bind(),p.copyTexImage2D(p.TEXTURE_2D,0,p.RGBA,0,0,n,n,0)}z.getAOProgress=function(){return V/1024},z.initialize=function(){t.width=t.height=n,(p=t.getContext("webgl")).enable(p.DEPTH_TEST),p.enable(p.CULL_FACE),p.clearColor(0,0,0,0),p.clearDepth(1),p.viewport(0,0,n,n),window.gl=p,o.getExtensions(p,["EXT_frag_depth","WEBGL_depth_texture"]),z.createTextures(),N=c(p,l.shaders.atom),O=c(p,l.shaders.bond),j=c(p,l.shaders["textured-quad"]),C=c(p,l.shaders.accumulator),L=c(p,l.shaders.ao),U=c(p,l.shaders.fxaa),D=c(p,l.shaders.dof);var e=[-1,-1,0,1,-1,0,1,1,0,-1,-1,0,1,1,0,-1,1,0],r=o.buildAttribs(p,{aPosition:3});r.aPosition.buffer.set(new Float32Array(e));var a=e.length/9;new o.Renderable(p,j,r,a),B=new o.Renderable(p,C,r,a),I=new o.Renderable(p,L,r,a),Y=new o.Renderable(p,U,r,a),X=new o.Renderable(p,D,r,a),0},z.createTextures=function(){y=new o.Texture(p,0,null,e,e),v=new o.Texture(p,1,null,e,e,{internalFormat:p.DEPTH_COMPONENT,format:p.DEPTH_COMPONENT,type:p.UNSIGNED_SHORT}),E=new o.Framebuffer(p,[y],v),d=new o.Texture(p,2,null,n,n),m=new o.Texture(p,3,null,n,n),g=new o.Texture(p,4,null,n,n,{internalFormat:p.DEPTH_COMPONENT,format:p.DEPTH_COMPONENT,type:p.UNSIGNED_SHORT}),S=new o.Framebuffer(p,[d],g),A=new o.Framebuffer(p,[m],g),b=new o.Texture(p,5,null,n,n),x=new o.Texture(p,6,null,n,n),T=new o.Framebuffer(p,[x]),k=new o.Texture(p,7,null,n,n),P=new o.Framebuffer(p,[k]),M=new o.Texture(p,8,null,n,n),w=new o.Texture(p,9,null,n,n),R=new o.Framebuffer(p,[w]),_=new o.Texture(p,10,null,n,n),new o.Framebuffer(p,[_])},z.setResolution=function(r,o){e=o,n=r,t.width=t.height=n,p.viewport(0,0,n,n),z.createTextures()},z.setSystem=function(t,n){function e(t){for(var n=[],e=0;e<36;e++)n.push.apply(n,t);return n}h=t;for(var r=o.buildAttribs(p,{aImposter:3,aPosition:3,aRadius:1,aColor:3}),u=[],s=[],l=[],c=[],f=0;f0)){r=o.buildAttribs(p,{aImposter:3,aPosA:3,aPosB:3,aRadA:1,aRadB:1,aColA:3,aColB:3}),u=[];var v=[],y=[],b=[],x=[],M=[],w=[];for(f=0;fn.bondThreshold)break;u.push.apply(u,a.position),v.push.apply(v,e([_.posA.x,_.posA.y,_.posA.z])),y.push.apply(y,e([_.posB.x,_.posB.y,_.posB.z])),b.push.apply(b,e([_.radA])),x.push.apply(x,e([_.radB])),M.push.apply(M,e([_.colA.r,_.colA.g,_.colA.b])),w.push.apply(w,e([_.colB.r,_.colB.g,_.colB.b]))}r.aImposter.buffer.set(new Float32Array(u)),r.aPosA.buffer.set(new Float32Array(v)),r.aPosB.buffer.set(new Float32Array(y)),r.aRadA.buffer.set(new Float32Array(b)),r.aRadB.buffer.set(new Float32Array(x)),r.aColA.buffer.set(new Float32Array(M)),r.aColB.buffer.set(new Float32Array(w));g=u.length/9;F=new o.Renderable(p,O,r,g)}},z.reset=function(){V=0,H=!1,G=!1,b.reset(),x.reset()},z.render=function(t){if(void 0!==h&&null!=q){if(f=2*s.getRadius(h),H)if(G)for(var e=0;e1024);e++)W(t),V++;else!function(t){G=!0,p.viewport(0,0,n,n),A.bind(),p.clear(p.COLOR_BUFFER_BIT|p.DEPTH_BUFFER_BIT);var e=u.getRect(t),o=r.mat4.create();r.mat4.ortho(o,e.left,e.right,e.bottom,e.top,0,f);var a=r.mat4.create();r.mat4.lookAt(a,[0,0,0],[0,0,-1],[0,1,0]);var i=r.mat4.create();r.mat4.translate(i,i,[0,0,-f/2]),r.mat4.multiply(i,i,t.rotation),N.setUniform("uProjection","Matrix4fv",!1,o),N.setUniform("uView","Matrix4fv",!1,a),N.setUniform("uModel","Matrix4fv",!1,i),N.setUniform("uBottomLeft","2fv",[e.left,e.bottom]),N.setUniform("uTopRight","2fv",[e.right,e.top]),N.setUniform("uAtomScale","1f",2.5*t.atomScale),N.setUniform("uRelativeAtomScale","1f",t.relativeAtomScale),N.setUniform("uRes","1f",n),N.setUniform("uDepth","1f",f),N.setUniform("uMode","1i",1),N.setUniform("uAtomShade","1f",t.atomShade),q.render(),t.bonds&&null!=F&&(A.bind(),O.setUniform("uProjection","Matrix4fv",!1,o),O.setUniform("uView","Matrix4fv",!1,a),O.setUniform("uModel","Matrix4fv",!1,i),O.setUniform("uRotation","Matrix4fv",!1,t.rotation),O.setUniform("uDepth","1f",f),O.setUniform("uBottomLeft","2fv",[e.left,e.bottom]),O.setUniform("uTopRight","2fv",[e.right,e.top]),O.setUniform("uRes","1f",n),O.setUniform("uBondRadius","1f",2.5*u.getBondRadius(t)),O.setUniform("uBondShade","1f",t.bondShade),O.setUniform("uAtomScale","1f",2.5*t.atomScale),O.setUniform("uRelativeAtomScale","1f",t.relativeAtomScale),O.setUniform("uMode","1i",1),F.render())}(t);else!function(t){H=!0,p.viewport(0,0,n,n),S.bind(),p.clear(p.COLOR_BUFFER_BIT|p.DEPTH_BUFFER_BIT);var e=u.getRect(t),o=r.mat4.create();r.mat4.ortho(o,e.left,e.right,e.bottom,e.top,0,f);var a=r.mat4.create();r.mat4.lookAt(a,[0,0,0],[0,0,-1],[0,1,0]);var i=r.mat4.create();r.mat4.translate(i,i,[0,0,-f/2]),r.mat4.multiply(i,i,t.rotation),N.setUniform("uProjection","Matrix4fv",!1,o),N.setUniform("uView","Matrix4fv",!1,a),N.setUniform("uModel","Matrix4fv",!1,i),N.setUniform("uBottomLeft","2fv",[e.left,e.bottom]),N.setUniform("uTopRight","2fv",[e.right,e.top]),N.setUniform("uAtomScale","1f",2.5*t.atomScale),N.setUniform("uRelativeAtomScale","1f",t.relativeAtomScale),N.setUniform("uRes","1f",n),N.setUniform("uDepth","1f",f),N.setUniform("uMode","1i",0),N.setUniform("uAtomShade","1f",t.atomShade),q.render(),t.bonds&&null!=F&&(S.bind(),O.setUniform("uProjection","Matrix4fv",!1,o),O.setUniform("uView","Matrix4fv",!1,a),O.setUniform("uModel","Matrix4fv",!1,i),O.setUniform("uRotation","Matrix4fv",!1,t.rotation),O.setUniform("uDepth","1f",f),O.setUniform("uBottomLeft","2fv",[e.left,e.bottom]),O.setUniform("uTopRight","2fv",[e.right,e.top]),O.setUniform("uRes","1f",n),O.setUniform("uBondRadius","1f",2.5*u.getBondRadius(t)),O.setUniform("uBondShade","1f",t.bondShade),O.setUniform("uAtomScale","1f",2.5*t.atomScale),O.setUniform("uRelativeAtomScale","1f",t.relativeAtomScale),O.setUniform("uMode","1i",0),F.render())}(t);!function(t){p.viewport(0,0,n,n),t.fxaa>0||t.dofStrength>0?P.bind():p.bindFramebuffer(p.FRAMEBUFFER,null);if(p.clear(p.COLOR_BUFFER_BIT|p.DEPTH_BUFFER_BIT),L.setUniform("uSceneColor","1i",d.index),L.setUniform("uSceneDepth","1i",g.index),L.setUniform("uAccumulatorOut","1i",x.index),L.setUniform("uRes","1f",n),L.setUniform("uAO","1f",2*t.ao),L.setUniform("uBrightness","1f",2*t.brightness),L.setUniform("uOutlineStrength","1f",t.outline),I.render(),t.fxaa>0){t.dofStrength>0?R.bind():p.bindFramebuffer(p.FRAMEBUFFER,null);for(var e=0;e0&&(p.bindFramebuffer(p.FRAMEBUFFER,null),p.clear(p.COLOR_BUFFER_BIT|p.DEPTH_BUFFER_BIT),t.fxaa>0?D.setUniform("uColor","1i",M.index):D.setUniform("uColor","1i",k.index),D.setUniform("uDepth","1i",g.index),D.setUniform("uDOFPosition","1f",t.dofPosition),D.setUniform("uDOFStrength","1f",t.dofStrength),D.setUniform("uRes","1f",n),X.render())}(t)}},z.initialize()}},function(t,n){function e(t){var n=this;n.initialize=function(){n.buffer=t.createBuffer()},n.bind=function(){t.bindBuffer(t.ARRAY_BUFFER,n.buffer)},n.set=function(e){n.bind(),t.bufferData(t.ARRAY_BUFFER,e,t.STATIC_DRAW)},n.initialize()}t.exports.buildAttribs=function(t,n){var r={};for(var o in n)r[o]={buffer:new e(t),size:n[o]};return r},t.exports.getExtensions=function(t,n){for(var e={},r=0;r1){for(var a=[],i=0;i 0.0) {\n float depth = texture2D(uSceneDepth, p).r;\n float r = 1.0/511.0;\n float d0 = abs(texture2D(uSceneDepth, p + vec2(-r, 0)).r - depth);\n float d1 = abs(texture2D(uSceneDepth, p + vec2( r, 0)).r - depth);\n float d2 = abs(texture2D(uSceneDepth, p + vec2( 0, -r)).r - depth);\n float d3 = abs(texture2D(uSceneDepth, p + vec2( 0, r)).r - depth);\n float d = max(d0, d1);\n d = max(d, d2);\n d = max(d, d3);\n sceneColor.rgb *= pow(1.0 - d, uOutlineStrength * 32.0);\n sceneColor.a = max(step(0.003, d), sceneColor.a);\n }\n vec4 dAccum = texture2D(uAccumulatorOut, p);\n float shade = max(0.0, 1.0 - (dAccum.r + dAccum.g + dAccum.b + dAccum.a) * 0.25 * uAO);\n shade = pow(shade, 2.0);\n gl_FragColor = vec4(uBrightness * sceneColor.rgb * shade, sceneColor.a);\n}\n",atom:"#version 100\nprecision highp float;\n\nattribute vec3 aImposter;\nattribute vec3 aPosition;\nattribute float aRadius;\nattribute vec3 aColor;\n\nuniform mat4 uView;\nuniform mat4 uProjection;\nuniform mat4 uModel;\nuniform float uAtomScale;\nuniform float uRelativeAtomScale;\nuniform float uAtomShade;\n\nvarying vec3 vColor;\nvarying vec3 vPosition;\nvarying float vRadius;\n\nvoid main() {\n vRadius = uAtomScale * (1.0 + (aRadius - 1.0) * uRelativeAtomScale);\n gl_Position = uProjection * uView * uModel * vec4(vRadius * aImposter + aPosition, 1.0);\n vColor = mix(aColor, vec3(1,1,1), uAtomShade);\n vPosition = vec3(uModel * vec4(aPosition, 1));\n}\n\n\n// __split__\n\n\n#version 100\n#extension GL_EXT_frag_depth: enable\nprecision highp float;\n\nuniform vec2 uBottomLeft;\nuniform vec2 uTopRight;\nuniform float uRes;\nuniform float uDepth;\nuniform int uMode;\n\nvarying vec3 vPosition;\nvarying float vRadius;\nvarying vec3 vColor;\n\nvec2 res = vec2(uRes, uRes);\n\nfloat raySphereIntersect(vec3 r0, vec3 rd) {\n float a = dot(rd, rd);\n vec3 s0_r0 = r0 - vPosition;\n float b = 2.0 * dot(rd, s0_r0);\n float c = dot(s0_r0, s0_r0) - (vRadius * vRadius);\n float disc = b*b - 4.0*a*c;\n if (disc <= 0.0) {\n return -1.0;\n }\n return (-b - sqrt(disc))/(2.0*a);\n}\n\nvoid main() {\n vec3 r0 = vec3(uBottomLeft + (gl_FragCoord.xy/res) * (uTopRight - uBottomLeft), 0.0);\n vec3 rd = vec3(0, 0, -1);\n float t = raySphereIntersect(r0, rd);\n if (t < 0.0) {\n discard;\n }\n vec3 coord = r0 + rd * t;\n vec3 normal = normalize(coord - vPosition);\n if (uMode == 0) {\n gl_FragColor = vec4(vColor, 1);\n } else if (uMode == 1) {\n gl_FragColor = vec4(normal * 0.5 + 0.5, 1.0);\n }\n gl_FragDepthEXT = -coord.z/uDepth;\n}\n",blur:"#version 100\nprecision highp float;\n\nattribute vec3 aPosition;\n\nvoid main() {\n gl_Position = vec4(aPosition, 1);\n}\n\n\n// __split__\n\n\n#version 100\nprecision highp float;\n\nuniform sampler2D uTexture;\nuniform float uRes;\nuniform int leftRight;\n\nvoid main() {\n vec2 dir;\n if (leftRight == 1) {\n dir = vec2(1,0)/uRes;\n } else {\n dir = vec2(0,1)/uRes;\n }\n const int range = 16;\n vec4 sample = vec4(0,0,0,0);\n for (int i = -range; i <= range; i++) {\n vec2 p = gl_FragCoord.xy/uRes + dir * float(i);\n sample += texture2D(uTexture, p);\n }\n sample /= float(range) * 2.0 + 1.0;\n gl_FragColor = sample;\n}\n",bond:"#version 100\nprecision highp float;\n\nattribute vec3 aImposter;\nattribute vec3 aPosA;\nattribute vec3 aPosB;\nattribute float aRadA;\nattribute float aRadB;\nattribute vec3 aColA;\nattribute vec3 aColB;\n\nuniform mat4 uView;\nuniform mat4 uProjection;\nuniform mat4 uModel;\nuniform mat4 uRotation;\nuniform float uBondRadius;\nuniform float uAtomScale;\nuniform float uRelativeAtomScale;\n\nvarying vec3 vNormal;\nvarying vec3 vPosA, vPosB;\nvarying float vRadA, vRadB;\nvarying vec3 vColA, vColB;\nvarying float vRadius;\n\nmat3 alignVector(vec3 a, vec3 b) {\n vec3 v = cross(a, b);\n float s = length(v);\n float c = dot(a, b);\n mat3 I = mat3(\n 1, 0, 0,\n 0, 1, 0,\n 0, 0, 1\n );\n mat3 vx = mat3(\n 0, v.z, -v.y,\n -v.z, 0, v.x,\n v.y, -v.x, 0\n );\n return I + vx + vx * vx * ((1.0 - c) / (s * s));\n}\n\nvoid main() {\n vRadius = uBondRadius;\n vec3 pos = vec3(aImposter);\n // Scale the box in x and z to be bond-radius.\n pos = pos * vec3(vRadius, 1, vRadius);\n // Shift the origin-centered cube so that the bottom is at the origin.\n pos = pos + vec3(0, 1, 0);\n // Stretch the box in y so that it is the length of the bond.\n pos = pos * vec3(1, length(aPosA - aPosB) * 0.5, 1);\n // Find the rotation that aligns vec3(0, 1, 0) with vec3(uPosB - uPosA) and apply it.\n vec3 a = normalize(vec3(-0.000001, 1.000001, 0.000001));\n vec3 b = normalize(aPosB - aPosA);\n mat3 R = alignVector(a, b);\n pos = R * pos;\n // Shift the cube so that the bottom is centered at the middle of atom A.\n pos = pos + aPosA;\n\n vec4 position = uModel * vec4(pos, 1);\n gl_Position = uProjection * uView * position;\n vPosA = aPosA;\n vPosB = aPosB;\n vRadA = uAtomScale * (1.0 + (aRadA - 1.0) * uRelativeAtomScale);\n vRadB = uAtomScale * (1.0 + (aRadB - 1.0) * uRelativeAtomScale);\n vColA = aColA;\n vColB = aColB;\n}\n\n\n// __split__\n\n\n#version 100\n#extension GL_EXT_frag_depth: enable\nprecision highp float;\n\nuniform mat4 uRotation;\nuniform vec2 uBottomLeft;\nuniform vec2 uTopRight;\nuniform float uDepth;\nuniform float uRes;\nuniform float uBondShade;\nuniform int uMode;\n\nvarying vec3 vPosA, vPosB;\nvarying float vRadA, vRadB;\nvarying vec3 vColA, vColB;\nvarying float vRadius;\n\nmat3 alignVector(vec3 a, vec3 b) {\n vec3 v = cross(a, b);\n float s = length(v);\n float c = dot(a, b);\n mat3 I = mat3(\n 1, 0, 0,\n 0, 1, 0,\n 0, 0, 1\n );\n mat3 vx = mat3(\n 0, v.z, -v.y,\n -v.z, 0, v.x,\n v.y, -v.x, 0\n );\n return I + vx + vx * vx * ((1.0 - c) / (s * s));\n}\n\nvoid main() {\n\n vec2 res = vec2(uRes, uRes);\n vec3 r0 = vec3(uBottomLeft + (gl_FragCoord.xy/res) * (uTopRight - uBottomLeft), uDepth/2.0);\n vec3 rd = vec3(0, 0, -1);\n\n vec3 i = normalize(vPosB - vPosA);\n i = vec3(uRotation * vec4(i, 0));\n vec3 j = normalize(vec3(-0.000001, 1.000001, 0.000001));\n mat3 R = alignVector(i, j);\n\n vec3 r0p = r0 - vec3(uRotation * vec4(vPosA, 0));\n r0p = R * r0p;\n vec3 rdp = R * rd;\n\n float a = dot(rdp.xz, rdp.xz);\n float b = 2.0 * dot(rdp.xz, r0p.xz);\n float c = dot(r0p.xz, r0p.xz) - vRadius*vRadius;\n float disc = b*b - 4.0*a*c;\n if (disc <= 0.0) {\n discard;\n }\n float t = (-b - sqrt(disc))/(2.0*a);\n if (t < 0.0) {\n discard;\n }\n\n vec3 coord = r0p + rdp * t;\n if (coord.y < 0.0 || coord.y > length(vPosA - vPosB)) {\n discard;\n }\n\n vec3 color;\n if (coord.y < vRadA + 0.5 * (length(vPosA - vPosB) - (vRadA + vRadB))) {\n color = vColA;\n } else {\n color = vColB;\n }\n\n color = mix(color, vec3(1,1,1), uBondShade);\n\n R = alignVector(j, i);\n vec3 normal = normalize(R * vec3(coord.x, 0, coord.z));\n\n coord = r0 + rd * t;\n if (uMode == 0) {\n gl_FragColor = vec4(color, 1);\n } else if (uMode == 1) {\n gl_FragColor = vec4(normal * 0.5 + 0.5, 1.0);\n }\n gl_FragDepthEXT = -(coord.z - uDepth/2.0)/uDepth;\n}\n",dof:"#version 100\nprecision highp float;\n\nattribute vec3 aPosition;\n\nvoid main() {\n gl_Position = vec4(aPosition, 1);\n}\n\n\n// __split__\n\n\n#version 100\nprecision highp float;\n\nuniform sampler2D uColor;\nuniform sampler2D uDepth;\nuniform float uRes;\nuniform float uDOFPosition;\nuniform float uDOFStrength;\nuniform int leftRight;\n\nvoid main() {\n\n vec2 samples[64];\n samples[0] = vec2(0.857612, 0.019885);\n samples[1] = vec2(0.563809, -0.028071);\n samples[2] = vec2(0.825599, -0.346856);\n samples[3] = vec2(0.126584, -0.380959);\n samples[4] = vec2(0.782948, 0.594322);\n samples[5] = vec2(0.292148, -0.543265);\n samples[6] = vec2(0.130700, 0.330220);\n samples[7] = vec2(0.236088, 0.159604);\n samples[8] = vec2(-0.305259, 0.810505);\n samples[9] = vec2(0.269616, 0.923026);\n samples[10] = vec2(0.484486, 0.371845);\n samples[11] = vec2(-0.638057, 0.080447);\n samples[12] = vec2(0.199629, 0.667280);\n samples[13] = vec2(-0.861043, -0.370583);\n samples[14] = vec2(-0.040652, -0.996174);\n samples[15] = vec2(0.330458, -0.282111);\n samples[16] = vec2(0.647795, -0.214354);\n samples[17] = vec2(0.030422, -0.189908);\n samples[18] = vec2(0.177430, -0.721124);\n samples[19] = vec2(-0.461163, -0.327434);\n samples[20] = vec2(-0.410012, -0.734504);\n samples[21] = vec2(-0.616334, -0.626069);\n samples[22] = vec2(0.590759, -0.726479);\n samples[23] = vec2(-0.590794, 0.805365);\n samples[24] = vec2(-0.924561, -0.163739);\n samples[25] = vec2(-0.323028, 0.526960);\n samples[26] = vec2(0.642128, 0.752577);\n samples[27] = vec2(0.173625, -0.952386);\n samples[28] = vec2(0.759014, 0.330311);\n samples[29] = vec2(-0.360526, -0.032013);\n samples[30] = vec2(-0.035320, 0.968156);\n samples[31] = vec2(0.585478, -0.431068);\n samples[32] = vec2(-0.244766, -0.906947);\n samples[33] = vec2(-0.853096, 0.184615);\n samples[34] = vec2(-0.089061, 0.104648);\n samples[35] = vec2(-0.437613, 0.285308);\n samples[36] = vec2(-0.654098, 0.379841);\n samples[37] = vec2(-0.128663, 0.456572);\n samples[38] = vec2(0.015980, -0.568170);\n samples[39] = vec2(-0.043966, -0.771940);\n samples[40] = vec2(0.346512, -0.071238);\n samples[41] = vec2(-0.207921, -0.209121);\n samples[42] = vec2(-0.624075, -0.189224);\n samples[43] = vec2(-0.120618, 0.689339);\n samples[44] = vec2(-0.664679, -0.410200);\n samples[45] = vec2(0.371945, -0.880573);\n samples[46] = vec2(-0.743251, 0.629998);\n samples[47] = vec2(-0.191926, -0.413946);\n samples[48] = vec2(0.449574, 0.833373);\n samples[49] = vec2(0.299587, 0.449113);\n samples[50] = vec2(-0.900432, 0.399319);\n samples[51] = vec2(0.762613, -0.544796);\n samples[52] = vec2(0.606462, 0.174233);\n samples[53] = vec2(0.962185, -0.167019);\n samples[54] = vec2(0.960990, 0.249552);\n samples[55] = vec2(0.570397, 0.559146);\n samples[56] = vec2(-0.537514, 0.555019);\n samples[57] = vec2(0.108491, -0.003232);\n samples[58] = vec2(-0.237693, -0.615428);\n samples[59] = vec2(-0.217313, 0.261084);\n samples[60] = vec2(-0.998966, 0.025692);\n samples[61] = vec2(-0.418554, -0.527508);\n samples[62] = vec2(-0.822629, -0.567797);\n samples[63] = vec2(0.061945, 0.522105);\n\n float invRes = 1.0/uRes;\n vec2 coord = gl_FragCoord.xy * invRes;\n\n float strength = uDOFStrength * uRes/768.0;\n\n float depth = texture2D(uDepth, coord).r;\n float range = uDOFPosition - depth;\n float scale = abs(range);\n\n vec4 sample = texture2D(uColor, coord);\n float count = 1.0;\n for(int i = 0; i < 64; i++) {\n vec2 p = samples[i];\n p = coord + scale * 64.0 * strength * p * invRes;\n float d = texture2D(uDepth, p).r;\n float r = uDOFPosition - d;\n float s = abs(r);\n sample += texture2D(uColor, p) * s;\n count += s;\n }\n\n gl_FragColor = sample/count;\n}",fxaa:"#version 100\nprecision highp float;\n\nattribute vec3 aPosition;\n\nvoid main() {\n gl_Position = vec4(aPosition, 1);\n}\n\n\n// __split__\n\n\n#version 100\nprecision highp float;\n\nuniform sampler2D uTexture;\nuniform float uRes;\n\nvoid main() {\n float FXAA_SPAN_MAX = 8.0;\n float FXAA_REDUCE_MUL = 1.0/8.0;\n float FXAA_REDUCE_MIN = 1.0/128.0;\n\n vec2 texCoords = gl_FragCoord.xy/uRes;\n\n vec4 rgbNW = texture2D(uTexture, texCoords + (vec2(-1.0, -1.0) / uRes));\n vec4 rgbNE = texture2D(uTexture, texCoords + (vec2(1.0, -1.0) / uRes));\n vec4 rgbSW = texture2D(uTexture, texCoords + (vec2(-1.0, 1.0) / uRes));\n vec4 rgbSE = texture2D(uTexture, texCoords + (vec2(1.0, 1.0) / uRes));\n vec4 rgbM = texture2D(uTexture, texCoords);\n\n vec4 luma = vec4(0.299, 0.587, 0.114, 1.0);\n float lumaNW = dot(rgbNW, luma);\n float lumaNE = dot(rgbNE, luma);\n float lumaSW = dot(rgbSW, luma);\n float lumaSE = dot(rgbSE, luma);\n float lumaM = dot(rgbM, luma);\n\n float lumaMin = min(lumaM, min(min(lumaNW, lumaNE), min(lumaSW, lumaSE)));\n float lumaMax = max(lumaM, max(max(lumaNW, lumaNE), max(lumaSW, lumaSE)));\n\n vec2 dir;\n dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));\n dir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE));\n\n float dirReduce = max((lumaNW + lumaNE + lumaSW + lumaSE) * (0.25 * FXAA_REDUCE_MUL), FXAA_REDUCE_MIN);\n\n float rcpDirMin = 1.0/(min(abs(dir.x), abs(dir.y)) + dirReduce);\n\n dir = min(vec2(FXAA_SPAN_MAX, FXAA_SPAN_MAX), max(vec2(-FXAA_SPAN_MAX, -FXAA_SPAN_MAX), dir * rcpDirMin)) / uRes;\n\n vec4 rgbA = (1.0/2.0) * \n (texture2D(uTexture, texCoords.xy + dir * (1.0/3.0 - 0.5)) + \n texture2D(uTexture, texCoords.xy + dir * (2.0/3.0 - 0.5)));\n vec4 rgbB = rgbA * (1.0/2.0) + (1.0/4.0) * \n (texture2D(uTexture, texCoords.xy + dir * (0.0/3.0 - 0.5)) +\n texture2D(uTexture, texCoords.xy + dir * (3.0/3.0 - 0.5)));\n float lumaB = dot(rgbB, luma);\n\n if((lumaB < lumaMin) || (lumaB > lumaMax)){\n gl_FragColor = rgbA;\n } else {\n gl_FragColor = rgbB;\n }\n\n}","textured-quad":"#version 100\nprecision highp float;\n\nattribute vec3 aPosition;\n\nvoid main() {\n gl_Position = vec4(aPosition, 1);\n}\n\n\n// __split__\n\n\n#version 100\nprecision highp float;\n\nuniform sampler2D uTexture;\nuniform float uRes;\n\nvoid main() {\n gl_FragColor = texture2D(uTexture, gl_FragCoord.xy/uRes);\n}\n"};t.exports={shaders:r}},function(t,n,e){"use strict";function r(t){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var o=e(9);t.exports=function(t){if(arguments.length>1)throw"Error: The Speck Interactions module has changed!";if(0===arguments.length||"object"!==r(t))throw"Error: Arguments not provided to interactions";var n=void 0===t.scrollZoom||t.scrollZoom,e=t.container,a=t.getRotation,i=t.setRotation,u=t.getTranslation,s=t.setTranslation,l=t.getZoom,c=t.setZoom,f=t.refreshView,h={buttonDown:!1,shiftDown:!1,lastX:0,lastY:0};function p(t){0===t.button&&(h={buttonDown:!0,shiftDown:h.shiftDown,lastX:t.clientX,lastY:t.clientY})}function d(t){if(0===t.button){if(!h.buttonDown)return;h.buttonDown=!1}}function m(t){h.shiftDown=t.shiftKey}function g(t){if(h.buttonDown&&0!==t.buttons){t.preventDefault();var n=t.clientX-h.lastX,e=t.clientY-h.lastY;if(0!==n||0!==e){if(h.lastX=t.clientX,h.lastY=t.clientY,h.shiftDown){var r=u(),c=.001/l();s({x:r.x-n*c,y:r.y+e*c})}else{var p={rotation:new Float32Array(a())};o.rotate(p,n,e),i(p.rotation)}f()}}}function v(t){t.preventDefault(),c(l()*(t.deltaY<0?1/.9:.9)),f()}function y(){e.removeEventListener("mousedown",p),window.removeEventListener("mouseup",d),window.removeEventListener("keydown",m),window.removeEventListener("keyup",m),window.removeEventListener("mousemove",g),e.removeEventListener("wheel",v)}return e.addEventListener("mousedown",p),window.addEventListener("mouseup",d),window.addEventListener("keydown",m),window.addEventListener("keyup",m),window.addEventListener("mousemove",g),n&&e.addEventListener("wheel",v),y}},function(t,n){t.exports={default:{atomScale:.6,relativeAtomScale:1,bondScale:.5,ao:.75,aoRes:256,brightness:.5,outline:0,spf:32,bonds:!1,bondThreshold:1.2,bondShade:.5,atomShade:.5,dofStrength:0,dofPosition:.5,fxaa:1},stickball:{atomScale:.24,relativeAtomScale:.64,bondScale:.5,bonds:!0,bondThreshold:1.2},toon:{ao:0,spf:0,brightness:.5,outline:1},licorice:{atomScale:.1,relativeAtomScale:0,bondScale:1,bonds:!0,bondThreshold:1.2}}},function(t,n,e){"use strict";e.r(n);var r=e(11),o=e(12),a=e(1),i=e.n(a),u=e(0),s=e.n(u),l=e(26),c=e(50);function f(t){return(f="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function h(t,n){for(var e=0;e=0;)n=h[e],Object(i.a)(n,t)&&!d(r,n)&&(r[r.length]=n),e-=1;return r})):Object(s.a)((function(t){return Object(t)!==t?[]:Object.keys(t)})),g=Object(s.a)((function(t){return null===t?"Null":void 0===t?"Undefined":Object.prototype.toString.call(t).slice(8,-1)}));function v(t,n,e,r){var i=o(t);function u(t,n){return y(t,n,e.slice(),r.slice())}return!a((function(t,n){return!a(u,n,t)}),o(n),i)}function y(t,n,e,r){if(u(t,n))return!0;var o,a,s=g(t);if(s!==g(n))return!1;if(null==t||null==n)return!1;if("function"==typeof t["fantasy-land/equals"]||"function"==typeof n["fantasy-land/equals"])return"function"==typeof t["fantasy-land/equals"]&&t["fantasy-land/equals"](n)&&"function"==typeof n["fantasy-land/equals"]&&n["fantasy-land/equals"](t);if("function"==typeof t.equals||"function"==typeof n.equals)return"function"==typeof t.equals&&t.equals(n)&&"function"==typeof n.equals&&n.equals(t);switch(s){case"Arguments":case"Array":case"Object":if("function"==typeof t.constructor&&"Promise"===(o=t.constructor,null==(a=String(o).match(/^function (\w*)/))?"":a[1]))return t===n;break;case"Boolean":case"Number":case"String":if(typeof t!=typeof n||!u(t.valueOf(),n.valueOf()))return!1;break;case"Date":if(!u(t.valueOf(),n.valueOf()))return!1;break;case"Error":return t.name===n.name&&t.message===n.message;case"RegExp":if(t.source!==n.source||t.global!==n.global||t.ignoreCase!==n.ignoreCase||t.multiline!==n.multiline||t.sticky!==n.sticky||t.unicode!==n.unicode)return!1}for(var l=e.length-1;l>=0;){if(e[l]===t)return r[l]===n;l-=1}switch(s){case"Map":return t.size===n.size&&v(t.entries(),n.entries(),e.concat([t]),r.concat([n]));case"Set":return t.size===n.size&&v(t.values(),n.values(),e.concat([t]),r.concat([n]));case"Arguments":case"Array":case"Object":case"Boolean":case"Number":case"String":case"Date":case"Error":case"RegExp":case"Int8Array":case"Uint8Array":case"Uint8ClampedArray":case"Int16Array":case"Uint16Array":case"Int32Array":case"Uint32Array":case"Float32Array":case"Float64Array":case"ArrayBuffer":break;default:return!1}var c=m(t);if(c.length!==m(n).length)return!1;var f=e.concat([t]),h=r.concat([n]);for(l=c.length-1;l>=0;){var p=c[l];if(!Object(i.a)(p,n)||!y(n[p],t[p],f,h))return!1;l-=1}return!0}var b=Object(r.a)((function(t,n){return y(t,n,[],[])}));n.a=b}]); +window.dash_bio=function(t){function n(n){for(var e,o,a=n[0],i=n[1],u=0,s=[];u0&&(o=1/Math.sqrt(o),t[0]=n[0]*o,t[1]=n[1]*o),t},u.dot=function(t,n){return t[0]*n[0]+t[1]*n[1]},u.cross=function(t,n,e){var r=n[0]*e[1]-n[1]*e[0];return t[0]=t[1]=0,t[2]=r,t},u.lerp=function(t,n,e,r){var o=n[0],a=n[1];return t[0]=o+r*(e[0]-o),t[1]=a+r*(e[1]-a),t},u.random=function(t,n){n=n||1;var e=2*r()*Math.PI;return t[0]=Math.cos(e)*n,t[1]=Math.sin(e)*n,t},u.transformMat2=function(t,n,e){var r=n[0],o=n[1];return t[0]=e[0]*r+e[2]*o,t[1]=e[1]*r+e[3]*o,t},u.transformMat2d=function(t,n,e){var r=n[0],o=n[1];return t[0]=e[0]*r+e[2]*o+e[4],t[1]=e[1]*r+e[3]*o+e[5],t},u.transformMat3=function(t,n,e){var r=n[0],o=n[1];return t[0]=e[0]*r+e[3]*o+e[6],t[1]=e[1]*r+e[4]*o+e[7],t},u.transformMat4=function(t,n,e){var r=n[0],o=n[1];return t[0]=e[0]*r+e[4]*o+e[12],t[1]=e[1]*r+e[5]*o+e[13],t},u.forEach=(i=u.create(),function(t,n,e,r,o,a){var u,s;for(n||(n=2),e||(e=0),s=r?Math.min(r*n+e,t.length):t.length,u=e;u0&&(a=1/Math.sqrt(a),t[0]=n[0]*a,t[1]=n[1]*a,t[2]=n[2]*a),t},s.dot=function(t,n){return t[0]*n[0]+t[1]*n[1]+t[2]*n[2]},s.cross=function(t,n,e){var r=n[0],o=n[1],a=n[2],i=e[0],u=e[1],s=e[2];return t[0]=o*s-a*u,t[1]=a*i-r*s,t[2]=r*u-o*i,t},s.lerp=function(t,n,e,r){var o=n[0],a=n[1],i=n[2];return t[0]=o+r*(e[0]-o),t[1]=a+r*(e[1]-a),t[2]=i+r*(e[2]-i),t},s.random=function(t,n){n=n||1;var e=2*r()*Math.PI,o=2*r()-1,a=Math.sqrt(1-o*o)*n;return t[0]=Math.cos(e)*a,t[1]=Math.sin(e)*a,t[2]=o*n,t},s.transformMat4=function(t,n,e){var r=n[0],o=n[1],a=n[2],i=e[3]*r+e[7]*o+e[11]*a+e[15];return i=i||1,t[0]=(e[0]*r+e[4]*o+e[8]*a+e[12])/i,t[1]=(e[1]*r+e[5]*o+e[9]*a+e[13])/i,t[2]=(e[2]*r+e[6]*o+e[10]*a+e[14])/i,t},s.transformMat3=function(t,n,e){var r=n[0],o=n[1],a=n[2];return t[0]=r*e[0]+o*e[3]+a*e[6],t[1]=r*e[1]+o*e[4]+a*e[7],t[2]=r*e[2]+o*e[5]+a*e[8],t},s.transformQuat=function(t,n,e){var r=n[0],o=n[1],a=n[2],i=e[0],u=e[1],s=e[2],l=e[3],c=l*r+u*a-s*o,f=l*o+s*r-i*a,h=l*a+i*o-u*r,p=-i*r-u*o-s*a;return t[0]=c*l+p*-i+f*-s-h*-u,t[1]=f*l+p*-u+h*-i-c*-s,t[2]=h*l+p*-s+c*-u-f*-i,t},s.rotateX=function(t,n,e,r){var o=[],a=[];return o[0]=n[0]-e[0],o[1]=n[1]-e[1],o[2]=n[2]-e[2],a[0]=o[0],a[1]=o[1]*Math.cos(r)-o[2]*Math.sin(r),a[2]=o[1]*Math.sin(r)+o[2]*Math.cos(r),t[0]=a[0]+e[0],t[1]=a[1]+e[1],t[2]=a[2]+e[2],t},s.rotateY=function(t,n,e,r){var o=[],a=[];return o[0]=n[0]-e[0],o[1]=n[1]-e[1],o[2]=n[2]-e[2],a[0]=o[2]*Math.sin(r)+o[0]*Math.cos(r),a[1]=o[1],a[2]=o[2]*Math.cos(r)-o[0]*Math.sin(r),t[0]=a[0]+e[0],t[1]=a[1]+e[1],t[2]=a[2]+e[2],t},s.rotateZ=function(t,n,e,r){var o=[],a=[];return o[0]=n[0]-e[0],o[1]=n[1]-e[1],o[2]=n[2]-e[2],a[0]=o[0]*Math.cos(r)-o[1]*Math.sin(r),a[1]=o[0]*Math.sin(r)+o[1]*Math.cos(r),a[2]=o[2],t[0]=a[0]+e[0],t[1]=a[1]+e[1],t[2]=a[2]+e[2],t},s.forEach=function(){var t=s.create();return function(n,e,r,o,a,i){var u,s;for(e||(e=3),r||(r=0),s=o?Math.min(o*e+r,n.length):n.length,u=r;u1?0:Math.acos(o)},s.str=function(t){return"vec3("+t[0]+", "+t[1]+", "+t[2]+")"},void 0!==t&&(t.vec3=s);var l={create:function(){var t=new e(4);return t[0]=0,t[1]=0,t[2]=0,t[3]=0,t},clone:function(t){var n=new e(4);return n[0]=t[0],n[1]=t[1],n[2]=t[2],n[3]=t[3],n},fromValues:function(t,n,r,o){var a=new e(4);return a[0]=t,a[1]=n,a[2]=r,a[3]=o,a},copy:function(t,n){return t[0]=n[0],t[1]=n[1],t[2]=n[2],t[3]=n[3],t},set:function(t,n,e,r,o){return t[0]=n,t[1]=e,t[2]=r,t[3]=o,t},add:function(t,n,e){return t[0]=n[0]+e[0],t[1]=n[1]+e[1],t[2]=n[2]+e[2],t[3]=n[3]+e[3],t},subtract:function(t,n,e){return t[0]=n[0]-e[0],t[1]=n[1]-e[1],t[2]=n[2]-e[2],t[3]=n[3]-e[3],t}};l.sub=l.subtract,l.multiply=function(t,n,e){return t[0]=n[0]*e[0],t[1]=n[1]*e[1],t[2]=n[2]*e[2],t[3]=n[3]*e[3],t},l.mul=l.multiply,l.divide=function(t,n,e){return t[0]=n[0]/e[0],t[1]=n[1]/e[1],t[2]=n[2]/e[2],t[3]=n[3]/e[3],t},l.div=l.divide,l.min=function(t,n,e){return t[0]=Math.min(n[0],e[0]),t[1]=Math.min(n[1],e[1]),t[2]=Math.min(n[2],e[2]),t[3]=Math.min(n[3],e[3]),t},l.max=function(t,n,e){return t[0]=Math.max(n[0],e[0]),t[1]=Math.max(n[1],e[1]),t[2]=Math.max(n[2],e[2]),t[3]=Math.max(n[3],e[3]),t},l.scale=function(t,n,e){return t[0]=n[0]*e,t[1]=n[1]*e,t[2]=n[2]*e,t[3]=n[3]*e,t},l.scaleAndAdd=function(t,n,e,r){return t[0]=n[0]+e[0]*r,t[1]=n[1]+e[1]*r,t[2]=n[2]+e[2]*r,t[3]=n[3]+e[3]*r,t},l.distance=function(t,n){var e=n[0]-t[0],r=n[1]-t[1],o=n[2]-t[2],a=n[3]-t[3];return Math.sqrt(e*e+r*r+o*o+a*a)},l.dist=l.distance,l.squaredDistance=function(t,n){var e=n[0]-t[0],r=n[1]-t[1],o=n[2]-t[2],a=n[3]-t[3];return e*e+r*r+o*o+a*a},l.sqrDist=l.squaredDistance,l.length=function(t){var n=t[0],e=t[1],r=t[2],o=t[3];return Math.sqrt(n*n+e*e+r*r+o*o)},l.len=l.length,l.squaredLength=function(t){var n=t[0],e=t[1],r=t[2],o=t[3];return n*n+e*e+r*r+o*o},l.sqrLen=l.squaredLength,l.negate=function(t,n){return t[0]=-n[0],t[1]=-n[1],t[2]=-n[2],t[3]=-n[3],t},l.inverse=function(t,n){return t[0]=1/n[0],t[1]=1/n[1],t[2]=1/n[2],t[3]=1/n[3],t},l.normalize=function(t,n){var e=n[0],r=n[1],o=n[2],a=n[3],i=e*e+r*r+o*o+a*a;return i>0&&(i=1/Math.sqrt(i),t[0]=n[0]*i,t[1]=n[1]*i,t[2]=n[2]*i,t[3]=n[3]*i),t},l.dot=function(t,n){return t[0]*n[0]+t[1]*n[1]+t[2]*n[2]+t[3]*n[3]},l.lerp=function(t,n,e,r){var o=n[0],a=n[1],i=n[2],u=n[3];return t[0]=o+r*(e[0]-o),t[1]=a+r*(e[1]-a),t[2]=i+r*(e[2]-i),t[3]=u+r*(e[3]-u),t},l.random=function(t,n){return n=n||1,t[0]=r(),t[1]=r(),t[2]=r(),t[3]=r(),l.normalize(t,t),l.scale(t,t,n),t},l.transformMat4=function(t,n,e){var r=n[0],o=n[1],a=n[2],i=n[3];return t[0]=e[0]*r+e[4]*o+e[8]*a+e[12]*i,t[1]=e[1]*r+e[5]*o+e[9]*a+e[13]*i,t[2]=e[2]*r+e[6]*o+e[10]*a+e[14]*i,t[3]=e[3]*r+e[7]*o+e[11]*a+e[15]*i,t},l.transformQuat=function(t,n,e){var r=n[0],o=n[1],a=n[2],i=e[0],u=e[1],s=e[2],l=e[3],c=l*r+u*a-s*o,f=l*o+s*r-i*a,h=l*a+i*o-u*r,p=-i*r-u*o-s*a;return t[0]=c*l+p*-i+f*-s-h*-u,t[1]=f*l+p*-u+h*-i-c*-s,t[2]=h*l+p*-s+c*-u-f*-i,t},l.forEach=function(){var t=l.create();return function(n,e,r,o,a,i){var u,s;for(e||(e=4),r||(r=0),s=o?Math.min(o*e+r,n.length):n.length,u=r;u.999999?(t[0]=0,t[1]=0,t[2]=0,t[3]=1,t):(s.cross(d,n,e),t[0]=d[0],t[1]=d[1],t[2]=d[2],t[3]=1+r,y.normalize(t,t))}),y.setAxes=(v=h.create(),function(t,n,e,r){return v[0]=e[0],v[3]=e[1],v[6]=e[2],v[1]=r[0],v[4]=r[1],v[7]=r[2],v[2]=-n[0],v[5]=-n[1],v[8]=-n[2],y.normalize(t,y.fromMat3(t,v))}),y.clone=l.clone,y.fromValues=l.fromValues,y.copy=l.copy,y.set=l.set,y.identity=function(t){return t[0]=0,t[1]=0,t[2]=0,t[3]=1,t},y.setAxisAngle=function(t,n,e){e*=.5;var r=Math.sin(e);return t[0]=r*n[0],t[1]=r*n[1],t[2]=r*n[2],t[3]=Math.cos(e),t},y.add=l.add,y.multiply=function(t,n,e){var r=n[0],o=n[1],a=n[2],i=n[3],u=e[0],s=e[1],l=e[2],c=e[3];return t[0]=r*c+i*u+o*l-a*s,t[1]=o*c+i*s+a*u-r*l,t[2]=a*c+i*l+r*s-o*u,t[3]=i*c-r*u-o*s-a*l,t},y.mul=y.multiply,y.scale=l.scale,y.rotateX=function(t,n,e){e*=.5;var r=n[0],o=n[1],a=n[2],i=n[3],u=Math.sin(e),s=Math.cos(e);return t[0]=r*s+i*u,t[1]=o*s+a*u,t[2]=a*s-o*u,t[3]=i*s-r*u,t},y.rotateY=function(t,n,e){e*=.5;var r=n[0],o=n[1],a=n[2],i=n[3],u=Math.sin(e),s=Math.cos(e);return t[0]=r*s-a*u,t[1]=o*s+i*u,t[2]=a*s+r*u,t[3]=i*s-o*u,t},y.rotateZ=function(t,n,e){e*=.5;var r=n[0],o=n[1],a=n[2],i=n[3],u=Math.sin(e),s=Math.cos(e);return t[0]=r*s+o*u,t[1]=o*s-r*u,t[2]=a*s+i*u,t[3]=i*s-a*u,t},y.calculateW=function(t,n){var e=n[0],r=n[1],o=n[2];return t[0]=e,t[1]=r,t[2]=o,t[3]=Math.sqrt(Math.abs(1-e*e-r*r-o*o)),t},y.dot=l.dot,y.lerp=l.lerp,y.slerp=function(t,n,e,r){var o,a,i,u,s,l=n[0],c=n[1],f=n[2],h=n[3],p=e[0],d=e[1],m=e[2],g=e[3];return(a=l*p+c*d+f*m+h*g)<0&&(a=-a,p=-p,d=-d,m=-m,g=-g),1-a>1e-6?(o=Math.acos(a),i=Math.sin(o),u=Math.sin((1-r)*o)/i,s=Math.sin(r*o)/i):(u=1-r,s=r),t[0]=u*l+s*p,t[1]=u*c+s*d,t[2]=u*f+s*m,t[3]=u*h+s*g,t},y.invert=function(t,n){var e=n[0],r=n[1],o=n[2],a=n[3],i=e*e+r*r+o*o+a*a,u=i?1/i:0;return t[0]=-e*u,t[1]=-r*u,t[2]=-o*u,t[3]=a*u,t},y.conjugate=function(t,n){return t[0]=-n[0],t[1]=-n[1],t[2]=-n[2],t[3]=n[3],t},y.length=l.length,y.len=y.length,y.squaredLength=l.squaredLength,y.sqrLen=y.squaredLength,y.normalize=l.normalize,y.fromMat3=function(t,n){var e,r=n[0]+n[4]+n[8];if(r>0)e=Math.sqrt(r+1),t[3]=.5*e,e=.5/e,t[0]=(n[5]-n[7])*e,t[1]=(n[6]-n[2])*e,t[2]=(n[1]-n[3])*e;else{var o=0;n[4]>n[0]&&(o=1),n[8]>n[3*o+o]&&(o=2);var a=(o+1)%3,i=(o+2)%3;e=Math.sqrt(n[3*o+o]-n[3*a+a]-n[3*i+i]+1),t[o]=.5*e,e=.5/e,t[3]=(n[3*a+i]-n[3*i+a])*e,t[a]=(n[3*a+o]+n[3*o+a])*e,t[i]=(n[3*i+o]+n[3*o+i])*e}return t},y.str=function(t){return"quat("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+")"},void 0!==t&&(t.quat=y)}(e.exports)}()},function(t,n,e){"use strict";var r=e(8),o=e(7),a=e(24);function i(t,n,e){return Math.min(n,Math.max(t,e))}t.exports.new=function(){return{aspect:1,zoom:.125,translation:{x:0,y:0},atomScale:.6,relativeAtomScale:1,bondScale:.5,rotation:r.mat4.create(),ao:.75,aoRes:256,brightness:.5,outline:0,spf:32,bonds:!1,bondThreshold:1.2,bondShade:.5,atomShade:.5,resolution:768,dofStrength:0,dofPosition:.5,fxaa:1}},t.exports.center=function(t,n){for(var e=-1/0,a=1/0,i=-1/0,u=1/0,s=0;sn&&(n=u,t.farAtom=r)}return t.farAtom});t.exports.getRadius=function(t){var n=u(t),e=a.MAX_ATOM_RADIUS,r=2.5*Math.sqrt(e*e+e*e+e*e);return Math.sqrt(n.x*n.x+n.y*n.y+n.z*n.z)+r}},function(t,n,e){var o;o=function(){return function(t){var n={};function e(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return t[r].call(o.exports,o,o.exports,e),o.loaded=!0,o.exports}return e.m=t,e.c=n,e.p="",e(0)}([function(t,n,e){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.rnaPlot=n.RNAGraph=void 0;var o=e(1);Object.defineProperty(n,"RNAGraph",{enumerable:!0,get:function(){return o.RNAGraph}});var a=e(3);Object.defineProperty(n,"rnaPlot",{enumerable:!0,get:function(){return a.rnaPlot}}),n.FornaContainer=function(t,n){var e=this;if(e.options={displayAllLinks:!1,labelInterval:10,applyForce:!0,chargeDistance:110,friction:.35,middleCharge:-30,otherCharge:-30,linkDistanceMultiplier:15,initialSize:null,layout:"standard-polygonal",allowPanningAndZooming:!0,transitionDuration:500,resizeSvgOnResize:!0},arguments.length>1)for(var a in n)e.options.hasOwnProperty(a)&&(e.options[a]=n[a]);null!==e.options.initialSize?(e.options.svgW=e.options.initialSize[0],e.options.svgH=e.options.initialSize[1]):(e.options.svgW=800,e.options.svgH=800),l.default.scale.category20();var u=null,s=null,p=l.default.scale.linear().domain([0,e.options.svgW]).range([0,e.options.svgW]),d=l.default.scale.linear().domain([0,e.options.svgH]).range([0,e.options.svgH]),m=e.graph={nodes:[],links:[]};function g(t){return Math.sqrt(t[0]*t[0]+t[1]*t[1])}function v(t){var n=t,e=t.prevNode;if(null!==e&&t.linked){var r=[-(n.x-e.x),-(n.y-e.y)],o=[-(r=[r[0]/g(r),r[1]/g(r)])[1],r[0]],a=[t.radius*r[0],t.radius*r[1]],i="M"+(a[0]+6*(r[0]+o[0])/2)+","+(a[1]+6*(r[1]+o[1])/2)+"L"+a[0]+","+a[1]+"L"+(a[0]+6*(r[0]-o[0])/2)+","+(a[1]+6*(r[1]-o[1])/2);l.default.select(this).attr("d",i)}}function y(t){return"basepair"==t.linkType||"backbone"==t.linkType||"pseudoknot"==t.linkType||"label_link"==t.linkType||"external"==t.linkType||"chain_chain"==t.linkType}function b(t,n,e){if(t.hasOwnProperty(n.num)){var r=parseFloat(t[n.num]);return isNaN(r)?t[n.num]:e(r)}return"white"}function x(){}function M(){u&&(mpos=l.default.mouse(A.node()),N.attr("x1",u.x).attr("y1",u.y).attr("x2",mpos[0]).attr("y2",mpos[1]))}function w(){u&&N.attr("class","drag_line_hidden"),O()}e.linkStrengths={pseudoknot:0,proteinChain:0,chainChain:0,intermolecule:10,external:0,other:10},e.displayParameters={displayBackground:"true",displayNumbering:"true",displayNodeOutline:"true",displayNodeLabel:"true",displayLinks:"true",displayPseudoknotLinks:"true",displayProteinLinks:"true"},e.colorScheme="structure",e.customColors={},e.animation=e.options.applyForce,e.deaf=!1,e.rnas={},e.extraLinks=[],Array.prototype.equals=function(t){if(!t)return!1;if(this.length!=t.length)return!1;for(var n=0,e=this.length;n0?l.default.max(e.graph.nodes.map((function(t){return t.x}))):0,o=l.default.min(t.nodes.map((function(t){return t.x}))),t.nodes.forEach((function(t){t.x+=r-o+20,t.px+=r-o}))),t.nodes.forEach((function(n){n.rna=t})),e.rnas[t.uid]=t,e.recalculateGraph(),e.update(),e.centerView(),t},e.transitionRNA=function(t,n){var r=e.options.transitionDuration,o={uids:e.graph.nodes.filter((function(t){return"nucleotide"==t.nodeType})).map((function(t){return t.uid}))},a=e.createInitialLayout(t,o),i=T.selectAll("g.gnode").data(a.nodes,Y);0===(r=e.options.transitionDuration)?i.attr("transform",(function(t){return"translate("+[t.x,t.y]+")"})):i.transition().attr("transform",(function(t){return"translate("+[t.x,t.y]+")"})).duration(r);var u=E.selectAll("line.link").data(a.links.filter(y),X),s=e.createNewNodes(i.enter()).attr("transform",(function(t){return void 0!==t.x&&void 0!==t.y?"translate("+[0,0]+")":""}));0===r?i.exit().remove():i.exit().transition().attr("transform",(function(t){return void 0!==t.x&&void 0!==t.y?"translate("+[0,0]+")":""})),i.select("path").each(v),e.graph.nodes=i.data(),e.updateStyle(),e.centerView(r),u.exit().remove(),0===r?(u.attr("x1",(function(t){return t.source.x})).attr("y1",(function(t){return t.source.y})).attr("x2",(function(t){return t.target.x})).attr("y2",(function(t){return t.target.y})),e.createNewLinks(u.enter()),e.graph.links=u.data(),e.updateStyle()):u.transition().attr("x1",(function(t){return t.source.x})).attr("y1",(function(t){return t.source.y})).attr("x2",(function(t){return t.target.x})).attr("y2",(function(t){return t.target.y})).duration(r).call((function(t,n){0===t.size()&&setTimeout(n,r);var e=0;t.each((function(){++e})).each("end",(function(){--e||n.apply(this,arguments)}))}),(function(){e.createNewLinks(u.enter()),e.graph.links=u.data(),e.updateStyle(),void 0!==n&&n()})),0===r?s.attr("transform",(function(t){return void 0!==t.x&&void 0!==t.y?"translate("+[t.x,t.y]+")":""})):s.transition().attr("transform",(function(t){return void 0!==t.x&&void 0!==t.y?"translate("+[t.x,t.y]+")":""}))},e.recalculateGraph=function(){for(var t in e.graph.nodes=[],e.graph.links=[],e.rnas)e.graph.nodes=e.graph.nodes.concat(e.rnas[t].nodes),e.graph.links=e.graph.links.concat(e.rnas[t].links);for(var n={},r=0;r0?(maxX=l.default.max(e.graph.nodes.map((function(t){return t.x}))),maxY=l.default.max(e.graph.nodes.map((function(t){return t.y})))):(maxX=0,maxY=0),t.nodes.forEach((function(t){t.rna.uid in e.rnas||(e.rnas[t.rna.uid]=t.rna),t.x+=maxX,t.px+=maxX})),r=new o.RNAGraph("",""),r.nodes=t.nodes,r.links=t.links,e.recalculateGraph(),e.update(),e.centerView()},e.addCustomColors=function(t){e.customColors=t},e.addCustomColorsText=function(t){var n=new f.ColorScheme(t);e.customColors=n.colorsJson,e.changeColorScheme("custom")},e.clearNodes=function(){e.graph.nodes=[],e.graph.links=[],e.rnas={},e.extraLinks=[],e.update()},e.toJSON=function(){var t={rnas:e.rnas,extraLinks:e.extraLinks};return JSON.stringify(t,(function(t,n){return"rna"==t?void 0:n}),"\t")},e.fromJSON=function(t){var n,a;try{var i=JSON.parse(t);n=i.rnas,a=i.extraLinks}catch(t){throw t}for(var u in n)"rna"==n[u].type?(r=new o.RNAGraph,r.seq=n[u].seq,r.dotbracket=n[u].dotbracket,r.circular=n[u].circular,r.pairtable=n[u].pairtable,r.uid=n[u].uid,r.structName=n[u].structName,r.nodes=n[u].nodes,r.links=n[u].links,r.rnaLength=n[u].rnaLength,r.elements=n[u].elements,r.nucsToNodes=n[u].nucsToNodes,r.pseudoknotPairs=n[u].pseudoknotPairs):(r=new ProteinGraph,r.size=n[u].size,r.nodes=n[u].nodes,r.uid=n[u].uid),e.addRNAJSON(r,!1);a.forEach((function(t){e.extraLinks.push(t)})),e.recalculateGraph(),e.update()},e.setSize=function(){if(null==e.options.initialSize){var n=l.default.select(t).node().offsetHeight,r=l.default.select(t).node().offsetWidth;e.options.svgW=r,e.options.svgH=n,p.range([0,r]).domain([0,r]),d.range([0,n]).domain([0,n]),e.zoomer.x(p).y(d),e.brusher.x(p).y(d),e.centerView(),e.options.resizeSvgOnResize&&_.attr("width",r).attr("height",n)}},e.setOutlineColor=function(t){T.selectAll("g.gnode").select("[node_type=nucleotide]").style("fill",t)},e.changeColorScheme=function(t){T.selectAll("[node_type=protein]").classed("protein",!0).attr("r",(function(t){return t.radius})),T.selectAll("g.gnode"),T.selectAll("g.gnode").selectAll("circle");var n=T.selectAll("g.gnode").select("[node_type=nucleotide]");if(e.colorScheme=t,"sequence"==t){var r=l.default.scale.ordinal().range(["#dbdb8d","#98df8a","#ff9896","#aec7e8","#aec7e8"]).domain(["A","C","G","U","T"]);n.style("fill",(function(t){return r(t.name)}))}else"structure"==t?(r=l.default.scale.category10().domain(["s","m","i","e","t","h","x"]).range(["lightgreen","#ff9896","#dbdb8d","lightsalmon","lightcyan","lightblue","transparent"]),n.style("fill",(function(t){return r(t.elemType)}))):"positions"==t?n.style("fill",(function(t){return l.default.scale.linear().range(["#98df8a","#dbdb8d","#ff9896"]).interpolate(l.default.interpolateLab).domain([1,1+(t.rna.rnaLength-1)/2,t.rna.rnaLength])(t.num)})):"custom"==t&&(void 0!==e.customColors&&"domain"in e.customColors&&"range"in e.customColors&&(r=l.default.scale.linear().interpolate(l.default.interpolateLab).domain(e.customColors.domain).range(e.customColors.range)),n.style("fill",(function(t){return void 0!==e.customColors&&e.customColors.hasOwnProperty("colorValues")?e.customColors.colorValues.hasOwnProperty(t.structName)&&e.customColors.colorValues[t.structName].hasOwnProperty(t.num)?b(e.customColors.colorValues[t.structName],t,r):e.customColors.colorValues.hasOwnProperty("")?b(e.customColors.colorValues[""],t,r):"white":"white"})))},window.addEventListener("resize",e.setSize,!1),e.zoomer=l.default.behavior.zoom().scaleExtent([.1,10]).x(p).y(d).on("zoomstart",R).on("zoom",P),l.default.select(t).select("svg").remove();var _=l.default.select(t).classed("forna-container",!0).attr("tabindex",1).on("keydown.brush",B).on("keyup.brush",I).each((function(){this.focus()})).append("svg:svg").attr("width",e.options.svgW).attr("height",e.options.svgH).attr("id","plotting-area");e.options.svg=_;var k=_.append("svg:g").on("mousemove",M).on("mousedown",x).on("mouseup",w);e.options.allowPanningAndZooming&&k.call(e.zoomer);var S=k.append("g").datum((function(){return{selected:!1,previouslySelected:!1}})).attr("class","brush"),A=k.append("svg:g"),E=A.append("svg:g"),T=A.append("svg:g");function R(){var t=T.selectAll("g.gnode").selectAll(".outline_node");t.each((function(t){t.selected=!1,t.previouslySelected=!1})),t.classed("selected",!1)}function P(){A.attr("transform","translate("+l.default.event.translate+") scale("+l.default.event.scale+")")}e.brusher=l.default.svg.brush().x(p).y(d).on("brushstart",(function(t){T.selectAll("g.gnode").selectAll(".outline_node").each((function(t){t.previouslySelected=L&&t.selected}))})).on("brush",(function(){var t=T.selectAll("g.gnode").selectAll(".outline_node"),n=l.default.event.target.extent();t.classed("selected",(function(t){return t.selected=e.options.applyForce&&t.previouslySelected^(n[0][0]<=t.x&&t.xr||sa||l-1){if(t.source.rna==t.target.rna){var n=t.source.rna;n.addPseudoknots(),n.pairtable[t.source.num]=0,n.pairtable[t.target.num]=0,V(n)}else extraLinkIndex=e.extraLinks.indexOf(t),e.extraLinks.splice(extraLinkIndex,1);e.recalculateGraph()}e.update()},G=function(t){C&&(t.linkType in{backbone:!0,fake:!0,fake_fake:!0,label_link:!0}||H(t))};e.addLink=function(t){t.source.rna==t.target.rna?(r=t.source.rna,r.pairtable[t.source.num]=t.target.num,r.pairtable[t.target.num]=t.source.num,V(r)):(t.linkType="intermolecule",e.extraLinks.push(t)),e.recalculateGraph(),e.update()};var W=function(t){l.default.event.defaultPrevented||(L||T.selectAll("g.gnode").selectAll(".outline_node").classed("selected",(function(t){return t.selected=e.options.applyForce&&(t.previouslySelected=!1)})),l.default.select(this).select("circle").classed("selected",t.selected=e.options.applyForce&&!t.previouslySelected))},Z=function(t){if(u){if((s=t)==u)return void O();var n={source:u,target:s,linkType:"basepair",value:1,uid:generateUUID()};for(i=0;i0&&"*"==u.dotbracket[u.dotbracket.length-1]&&(u.dotbracket=u.dotbracket.slice(0,u.dotbracket.length-1),u.circular=!0),u.uid=a(),u.elements=[],u.pseudoknotPairs=[],u.nucsToNodes={},u.addUids=function(t){for(var n=u.nodes.filter((function(t){return"nucleotide"==t.nodeType})),e=0;e=0;)n.push(e),t=t.substring(0,e)+"oo"+t.substring(e+1,t.length);return{targetString:t,breaks:n}};var s=u.removeBreaks(u.dotbracket);u.dotbracket=s.targetString,u.dotBracketBreaks=s.breaks,s=u.removeBreaks(u.seq),u.seq=s.targetString,u.seqBreaks=s.breaks,u.calculateStartNumberArray=function(){u.startNumberArray=[];for(var t=0;t=0&&(e=!0);e?u.elements[n][2].map((function(t){0!=t&&(u.nodes[t-1].elemType="e")})):u.elements[n][2].map((function(t){0!=t&&(u.nodes[t-1].elemType=u.elements[n][0])}))}return u},u.getPositions=function(t){for(var n=[],e=u.nodes.filter((function(n){return n.nodeType==t})),r=0;r=4})),e=0;eu.dotbracket.length)){u.links.push({source:u.nodes[t[f]-1],target:u.nodes[u.nodes.length-1],linkType:"fake",value:e,uid:a()}),t.length>4&&u.links.push({source:u.nodes[t[f]-1],target:u.nodes[t[(f+Math.floor(t.length/2))%t.length]-1],linkType:"fake",value:2*e,uid:a()});var h=3.14159*(t.length-2)/t.length,p=2*Math.cos(1.570795-h/2);u.links.push({source:u.nodes[t[f]-1],target:u.nodes[t[(f+2)%t.length]-1],linkType:"fake",value:p});var d=u.nodes[t[f]-1];"x"in d&&(s+=d.x,l+=d.y,c+=1)}return c>0&&(i.x=s/c,i.y=l/c,i.px=i.x,i.py=i.y),u},u.connectFakeNodes=function(){for(var t={},n=u.nodes.filter((function(t){return"middle"==t.nodeType})),e=new Set,r=1;r<=u.nodes.length;r++)t[r]=[];for(r=0;r=0||u.dotBracketBreaks.indexOf(e-2)>=0)&&(i=""),u.nodes.push({name:i,num:e+u.startNumberArray[e-1]-1,radius:5,rna:u,nodeType:"nucleotide",structName:u.structName,elemType:n[e],uid:a(),linked:!1})}for(e=0;e1&&-1===u.dotBracketBreaks.indexOf(e-1)&&-1==u.dotBracketBreaks.indexOf(e-2)&&-1==u.dotBracketBreaks.indexOf(e-3)&&(u.links.push({source:u.nodes[e-2],target:u.nodes[e-1],linkType:"backbone",value:1,uid:a()}),u.nodes[e-1].linked=!0);for(e=0;er)return[];for(;0===t[e];e++)i.push(e);for(;0===t[r];r--)s.push(r);if(e>r){if(i.push(e),0===n)return[["e",n,i.sort(o)]];for(var l=!1,c=[],f=[],h=0;h=0&&(l=!0);return[["h",n,i.sort(o)]]}if(t[e]!=r){var p=i;for(h=e,p.push(h);h<=r;){for(a=a.concat(u.ptToElements(t,n,h,t[h])),p.push(t[h]),h=t[h]+1;0===t[h]&&h<=r;h++)p.push(h);p.push(h)}return p.pop(),(p=p.concat(s)).length>0&&(0===n?a.push(["e",n,p.sort(o)]):a.push(["m",n,p.sort(o)])),a}t[e]===r&&(i.push(e),s.push(r),i.concat(s).length>4&&(0===n?a.push(["e",n,i.concat(s).sort(o)]):a.push(["i",n,i.concat(s).sort(o)])));for(var d=[];t[e]===r&&e0)){eloop=externalLoop[0],nucs=eloop[2].sort(o),prev=nucs[0],hloop=!0,numGreater=0;for(var t=1;t1&&(numGreater+=1),prev=nucs[t];1==numGreater?eloop[0]="h":2==numGreater?eloop[0]="i":eloop[0]="m"}return u},u.reassignLinkUids=function(){for(var t=0;t1&&(u.pseudoknotPairs=u.pseudoknotPairs.concat(r.rnaUtilities.removePseudoknotsFromPairtable(u.pairtable))),u},u.addPseudoknots=function(){for(var t=u.pairtable,n=u.pseudoknotPairs,e=0;e0&&u.recalculateElements()}void 0===String.prototype.trim&&(String.prototype.trim=function(){return String(this).replace(/^\s+|\s+$/g,"")})},function(t,n,e){t.exports=function(t){function n(r){if(e[r])return e[r].exports;var o=e[r]={exports:{},id:r,loaded:!1};return t[r].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var e={};return n.m=t,n.c=e,n.p="",n(0)}([function(t,n,e){t.exports=e(1)},function(t,n){"use strict";function e(){var t=this;t.bracketLeft="([{abcdefghijklmnopqrstuvwxyz".split(""),t.inverseBrackets=function(t){for(var n={},e=0;e=r;r++){e[r]=new Array(n+1);for(var o=r;n>=o;o++)e[r][o]=0}var a=0;for(r=n-0-1;r>0;r--)for(o=r+0+1;n>=o;o++){a=e[r][o-1];for(var i=o-0-1;i>=r;i--)t[i]===o&&(a=Math.max(a,(i>r?e[r][i-1]:0)+1+(o-i-1>0?e[i+1][o-1]:0)));e[r][o]=a}return a=e[1][n],e},t.backtrackMaximumMatching=function(n,e){var r=Array.apply(null,Array(n.length)).map((function(){return 0}));return t.mmBt(n,r,e,1,n.length-1),r},t.mmBt=function(n,e,r,o,a){var i=n[o][a];if(!(0>a-o-1)){if(n[o][a-1]==i)return void t.mmBt(n,e,r,o,a-1);for(var u=a-0-1;u>=o;u--)if(r[a]===u&&(u>o?n[o][u-1]:0)+(a-u-1>0?n[u+1][a-1]:0)+1==i)return e[u]=a,e[a]=u,u>o&&t.mmBt(n,e,r,o,u-1),void t.mmBt(n,e,r,u+1,a-1);console.log("FAILED!!!"+o+","+a+": backtracking failed!")}},t.dotbracketToPairtable=function(n){var e=Array.apply(null,new Array(n.length+1)).map(Number.prototype.valueOf,0);e[0]=n.length;for(var r={},o=0;o0)throw"Unmatched base at position "+r[c][0];return e},t.insertIntoStack=function(t,n,e){for(var r=0;t[r].length>0&&t[r][t[r].length-1]r?t.bracketLeft[t.insertIntoStack(e,r,n[r])]:t.bracketRight[t.deleteFromStack(e,r)]}return a},t.findUnmatched=function(n,e,r){for(var o=[],a=[],i=e,u=r,s=e;r>=s;s++)0!==n[s]&&(n[s]r)&&a.push([s,n[s]]);for(s=i;u>=s;s++){for(;0===n[s]&&u>=s;)s++;for(r=n[s];n[s]===r;)s++,r--;o=o.concat(t.findUnmatched(n,s,r))}return a.length>0&&o.push(a),o},t.removePseudoknotsFromPairtable=function(n){for(var e=t.maximumMatching(n),r=t.backtrackMaximumMatching(e,n),o=[],a=1;aa)return[];for(;0===n[o];o++)s.push(o);for(;0===n[a];a--)l.push(a);if(o>a){if(s.push(o),0===e)return[["e",e,s.sort(r)]];for(var c=!1,f=[],h=[],p=0;p=0&&(c=!0);return[["h",e,s.sort(r)]]}if(n[o]!=a){var d=s;for(p=o,d.push(p);a>=p;){for(u=u.concat(t.ptToElements(n,e,p,n[p],i)),d.push(n[p]),p=n[p]+1;0===n[p]&&a>=p;p++)d.push(p);d.push(p)}return d.pop(),(d=d.concat(l)).length>0&&(0===e?u.push(["e",e,d.sort(r)]):u.push(["m",e,d.sort(r)])),u}if(n[o]===a){s.push(o),l.push(a);var m=s.concat(l);m.length>4&&(0===e?u.push(["e",e,s.concat(l).sort(r)]):u.push(["i",e,s.concat(l).sort(r)]))}for(var g=[];n[o]===a&&a>o;)g.push(o),g.push(a),o+=1,a-=1,e+=1;return s=[o-1],l=[a+1],u.push(["s",e,g.sort(r)]),u.concat(t.ptToElements(n,e,o,a,i))}}Object.defineProperty(n,"__esModule",{value:!0}),n.arraysEqual=function(t,n){if(t===n)return!0;if(null===t||null===n)return!1;if(t.length!=n.length)return!1;for(var e=0;e=u;u++)e.push(u);else console.log("Malformed range (too many dashes):",t)}return e},n.parseColorText=function(t){for(var e=t.split("\n"),r="",o=1,a={colorValues:{"":{}},range:["white","steelblue"]},i=[],u=0;u"!=e[u][0])for(var s=e[u].trim().split(/[\s]+/),l=0;lt&&(r=t),t>o&&(o=t));for(a in n.colorsJson.colorValues[e])"number"==typeof(t=n.colorsJson.colorValues[e][a])&&(n.colorsJson.colorValues[e][a]=(t-r)/(o-r))}return n},n.parseColorText(n.colorsText),n};var r=function(t,n){return t-n};n.rnaUtilities=new e}])},function(t,n,e){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.rnaPlot=function(){var t,n,e={width:400,height:400,nucleotideRadius:5,rnaEdgePadding:0,labelInterval:0,showNucleotideLabels:!0,startNucleotideNumber:1,bundleExternalLinks:!1};function a(a){a.each((function(a){var i=new r.RNAGraph(a.sequence,a.structure,a.name).recalculateElements().elementsToJson().addName(a.name);a.rnaGraph=i;for(var u=(new o.NAView).naview_xy_coordinates(i.pairtable),s=[],l=0;l2&&void 0!==arguments[2]?arguments[2]:"",i=d3.extent(r),u=d3.extent(o),s=30;""!=a&&(u[1]+=s),i[0]-=e.nucleotideRadius+e.rnaEdgePadding,u[0]-=e.nucleotideRadius+e.rnaEdgePadding,i[1]+=e.nucleotideRadius+e.rnaEdgePadding,u[1]+=e.nucleotideRadius+e.rnaEdgePadding;var l,c=i[1]-i[0],f=u[1]-u[0],h=c-e.width,p=f-e.height;function d(t,n,e){var r=(t.range()[1]-t.range()[0])/(t.domain()[1]-t.domain()[0]),o=(n[1]-n[0])*r,a=(e[1]-e[0]-o)/2;return{scaleFactor:r,scale:d3.scale.linear().domain(n).range([e[0]+a,e[1]-a])}}return h>p?(l=d(t=d3.scale.linear().domain(i).range([0,e.width]),u,[0,e.height]),n=l.scale):(l=d(n=d3.scale.linear().domain(u).range([0,e.height]),i,[0,e.width]),t=l.scale),t.range()[0],t.domain()[0],n.range()[0],n.domain()[0],"translate("+-(t.domain()[0]*l.scaleFactor-t.range()[0])+","+-(n.domain()[0]*l.scaleFactor-n.range()[0])+")scale("+l.scaleFactor+")"}(i.nodes.map((function(t){return t.x})),i.nodes.map((function(t){return t.y}))),f=d3.select(this).append("g").attr("transform",c),h=i.nodes.filter((function(t){return"nucleotide"==t.nodeType})),p=i.nodes.filter((function(t){return"label"==t.nodeType})),d=i.links;!function(t,n){n=n.filter((function(t){return null!==t.source&&null!==t.target})),t.selectAll(".rna-link").data(n).enter().append("svg:line").attr("x1",(function(t){return t.source.x})).attr("x2",(function(t){return t.target.x})).attr("y1",(function(t){return t.source.y})).attr("y2",(function(t){return t.target.y})).attr("link-type",(function(t){return t.linkType})).attr("extra-link-type",(function(t){return t.extraLinkType})).classed("rna-link",!0)}(f,d),function(t,n){var r=t.selectAll(".rna-base").data(n).enter().append("svg:g").attr("transform",(function(t){return"translate("+t.x+","+t.y+")"}));r.append("svg:circle").attr("r",e.nucleotideRadius).classed("rna-base",!0),e.showNucleotideLabels&&r.append("svg:text").text((function(t){return t.name})).attr("text-anchor","middle").attr("dominant-baseline","central").classed("nucleotide-label",!0).append("svg:title").text((function(t){return t.struct_name+":"+t.num}))}(f,h),function(t,n){t.selectAll(".rnaLabel").data(n).enter().append("svg:g").attr("transform",(function(t){return"translate("+t.x+","+t.y+")"})).append("svg:text").text((function(t){return t.name})).attr("text-anchor","middle").attr("font-weight","bold").attr("dominant-baseline","central").classed("number-label",!0)}(f,p),function(r,o){r.append("svg:text").attr("transform","translate("+t.invert(e.width/2)+","+n.invert(e.height)+")").attr("dy",-10).classed("rna-name",!0).text(o)}(f,a.name),e.bundleExternalLinks&&function(t,n){var e={},r=[];n=n.filter((function(t){return"correct"==t.linkType||"incorrect"==t.linkType||"extra"==t.linkType})),t.selectAll("[link-type=extra]").remove();for(var o=0;oh);if(g=v-2,v>=2&&(i[d+1+g]+=f,i[m-1-g]+=f,i[d]+=f,i[m]+=f,v>2))for(;g>=1;g--)i[d+g]=Math.PI,i[m-g]=Math.PI;s[++c]=v,h<=p&&t(h,p,r)}else n++,w++,k++;for(M=Math.PI*(w-2)/w,S[++_]=e,y=o<0?0:o,b=1;b<=_;b++){for(x=S[b]-y,g=0;g<=x;g++)i[y+g]+=M;if(b>_)break;y=S[++b]}u[++l]=k})(0,e+1,t),u[l]-=2,r=0,o[0]=100,a[0]=100;var h=[];for(h.push([o[0],a[0]]),n=1;n=0&&(1==++n?e=r:e>r&&(e=r));return t.setMark(!1),e+1}s.prototype.naview_xy_coordinates=function(t){var n,e=[],r=[];if(0===t.length||0===t[0])return 0;this.nbase=t[0],this.bases=[];for(var o=0;on&&e++;0==e&&(this.bases[1].setMate(this.nbase),this.bases[this.nbase].setMate(1))},s.prototype.find_regions=function(){var t,n=null,e=null;t=this.nbase+1;var r=[];for(n=0;nthis.nbase&&(n=0)}while(n!=t);return i},s.prototype.find_central_loop=function(){var t=new u.Loop,n=null,e=null,r=null;for(l.bind(this)(),n=0,e=-1,r=0;rn?(e=t.getDepth(),n=t.getNconnection(),this.root=t):t.getDepth()>e&&t.getNconnection()==n&&(e=t.getDepth(),this.root=t)},s.prototype.traverse_loop=function(t,n){var e,r,o,a,i,u,s,l,c,f,h,p,d,m,g,v,y,b,x,M,w,_,k,S,A,E,T,R,P,N,O,C,L,U,D,j,z,q,F,B,I,X,Y,V,H,G,W,Z,J,$,K,Q,tt,nt,et,rt,ot,at,it,ut,st,lt,ct,ft,ht,pt,dt,mt,gt,vt=0;u=2*Math.PI/(this.nbase+1),b=null,N=-1;var yt=0;for(k=0;null!=(v=t.getConnection(yt));yt++,k++)e=-Math.sin(u*v.getStart()),r=Math.cos(u*v.getStart()),o=-Math.sin(u*v.getEnd()),a=Math.cos(u*v.getEnd())-r,i=e-o,s=Math.sqrt(a*a+i*i),v.setXrad(a/s),v.setYrad(i/s),v.setAngle(Math.atan2(i,a)),v.getAngle()<0&&v.setAngle(v.getAngle()+2*Math.PI),null!=n&&n.getRegion()==v.getRegion()&&(b=v,N=k);t:for(;;){this.determine_radius(t,this.lencut),l=t.getRadius()/this.RADIUS_REDUCTION_FACTOR,null==n?c=f=0:(h=(this.bases[b.getStart()].getX()+this.bases[b.getEnd()].getX())/2,p=(this.bases[b.getStart()].getY()+this.bases[b.getEnd()].getY())/2,c=h-l*b.getXrad(),f=p-l*b.getYrad()),T=-1==N?0:N,v=t.getConnection(T),E=0,O=!1;do{if((w=T-1)<0&&(w=t.getNconnection()-1),x=t.getConnection(w),this.connected_connection(x,v)?(T=w,v=x):O=!0,++E>t.getNconnection()){for(A=-1,k=0;k=t.getNconnection()&&(w=0),v=t.getConnection(k),(ht=(y=t.getConnection(w)).getAngle()-v.getAngle())<0&&(ht+=2*Math.PI),ht>A&&(A=ht,vt=k);R=vt,(T=vt+1)>=t.getNconnection()&&(T=0),(v=t.getConnection(R)).setBroken(!0),O=!0}}while(!O);for(C=!1,G=T;!C;){for(E=0,O=!1,R=T,L=!1;!O;)if(v=t.getConnection(R),R==N&&(L=!0),(w=R+1)>=t.getNconnection()&&(w=0),y=t.getConnection(w),this.connected_connection(v,y)){if(++E>=t.getNconnection())break;R=w}else O=!0;for(k=W=Z=P=this.find_ic_middle(T,R,n,b,t),O=!1,$=0;!O;)(k=$<0?W:0==$?P:Z)>=0&&(v=t.getConnection(k),null!=n&&b==v||(0==$?(d=v.getAngle()-Math.asin(.5/l),m=v.getAngle()+Math.asin(.5/l),this.bases[v.getStart()].setX(c+l*Math.cos(d)),this.bases[v.getStart()].setY(f+l*Math.sin(d)),this.bases[v.getEnd()].setX(c+l*Math.cos(m)),this.bases[v.getEnd()].setY(f+l*Math.sin(m))):$<0?((w=k+1)>=t.getNconnection()&&(w=0),v=t.getConnection(k),y=t.getConnection(w),et=v.getXrad(),rt=v.getYrad(),ht=(v.getAngle()+y.getAngle())/2,v.getAngle()>y.getAngle()&&(ht-=Math.PI),it=Math.cos(ht),lt=Math.sin(ht),ct=-it,(S=y.getAngle()-v.getAngle())<0&&(S+=2*Math.PI),ft=v.isExtruded()?S<=Math.PI/2?2:1.5:1,this.bases[v.getEnd()].setX(this.bases[y.getStart()].getX()+ft*lt),this.bases[v.getEnd()].setY(this.bases[y.getStart()].getY()+ft*ct),this.bases[v.getStart()].setX(this.bases[v.getEnd()].getX()+rt),this.bases[v.getStart()].setY(this.bases[v.getEnd()].getY()-et)):((w=k-1)<0&&(w=t.getNconnection()-1),v=t.getConnection(w),ot=(y=t.getConnection(k)).getXrad(),at=y.getYrad(),ht=(v.getAngle()+y.getAngle())/2,v.getAngle()>y.getAngle()&&(ht-=Math.PI),it=Math.cos(ht),lt=-Math.sin(ht),ct=it,(S=y.getAngle()-v.getAngle())<0&&(S+=2*Math.PI),ft=v.isExtruded()?S<=Math.PI/2?2:1.5:1,this.bases[y.getStart()].setX(this.bases[v.getEnd()].getX()+ft*lt),this.bases[y.getStart()].setY(this.bases[v.getEnd()].getY()+ft*ct),this.bases[y.getEnd()].setX(this.bases[y.getStart()].getX()-at),this.bases[y.getEnd()].setY(this.bases[y.getStart()].getY()+ot)))),$<0?(Z==R?Z=-1:Z>=0&&++Z>=t.getNconnection()&&(Z=0),$=1):(W==T?W=-1:W>=0&&--W<0&&(W=t.getNconnection()-1),$=-1),O=-1==W&&-1==Z;if((J=R+1)>=t.getNconnection()&&(J=0),R!=T&&(T!=G||J!=G))if(v=t.getConnection(T),y=t.getConnection(R),Q=this.bases[y.getEnd()].getX()-this.bases[v.getStart()].getX(),tt=this.bases[y.getEnd()].getY()-this.bases[v.getStart()].getY(),D=this.bases[v.getStart()].getX()+Q/2,j=this.bases[v.getStart()].getY()+tt/2,F=Q/(nt=Math.sqrt(Q*Q+tt*tt)),B=tt/nt,I=c-D,X=f-j,z=(Y=(I/=nt=Math.sqrt(Q*Q+tt*tt))*F+(X/=nt)*B)*F-I,q=Y*B-X,z/=nt=Math.sqrt(z*z+q*q),q/=nt,Q=this.bases[v.getStart()].getX()-c,tt=this.bases[v.getStart()].getY()-f,(ht=Math.atan2(tt,Q))<0&&(ht+=2*Math.PI),Q=this.bases[y.getEnd()].getX()-c,tt=this.bases[y.getEnd()].getY()-f,(pt=Math.atan2(tt,Q))<0&&(pt+=2*Math.PI),ptMath.PI?-1:1)*l*z,H=f+U*l*q,L)c-=V-D,f-=H-j;else for(k=T;M=(v=t.getConnection(k)).getStart(),this.bases[M].setX(this.bases[M].getX()+V-D),this.bases[M].setY(this.bases[M].getY()+H-j),M=v.getEnd(),this.bases[M].setX(this.bases[M].getX()+V-D),this.bases[M].setY(this.bases[M].getY()+H-j),k!=R;)++k>=t.getNconnection()&&(k=0);C=(T=J)==G}for(k=0;k=t.getNconnection()&&(w=0),y=t.getConnection(w),Q=this.bases[v.getEnd()].getX()-c,tt=this.bases[v.getEnd()].getY()-f,st=Math.sqrt(Q*Q+tt*tt),(ht=Math.atan2(tt,Q))<0&&(ht+=2*Math.PI),Q=this.bases[y.getStart()].getX()-c,tt=this.bases[y.getStart()].getY()-f,ut=Math.sqrt(Q*Q+tt*tt),(pt=Math.atan2(tt,Q))<0&&(pt+=2*Math.PI),ptMath.PI)if(v.isExtruded())console.log("Warning from traverse_loop. Loop "+t.getNumber()+" has crossed regions\n");else if(y.getStart()-v.getEnd()!=1){v.setExtruded(!0);continue t}if(v.isExtruded())this.construct_extruded_segment(v,y);else for((_=y.getStart()-v.getEnd())<0&&(_+=this.nbase+1),u=K/_,w=1;w<_;w++)(M=v.getEnd()+w)>this.nbase&&(M-=this.nbase+1),nt=st+(ut-st)*((g=ht+w*u)-ht)/K,this.bases[M].setX(c+nt*Math.cos(g)),this.bases[M].setY(f+nt*Math.sin(g))}break}for(k=0;k=t.getNconnection()&&(w=0),v=t.getConnection(k),y=t.getConnection(w),_+=2,dt+=this.bases[v.getStart()].getX()+this.bases[v.getEnd()].getX(),mt+=this.bases[v.getStart()].getY()+this.bases[v.getEnd()].getY(),!v.isExtruded())for(w=v.getEnd()+1;w!=y.getStart();w++)w>this.nbase&&(w-=this.nbase+1),_++,dt+=this.bases[w].getX(),mt+=this.bases[w].getY();t.setX(dt/_),t.setY(mt/_)},s.prototype.determine_radius=function(t,n){var e,r,a,i,u,s,l,c,f,h,p,d=0,m=new o.Connection,g=new o.Connection;do{for(e=1e10,u=0,i=0,c=0;c=t.getNconnection()&&(f=0),g=t.getConnection(f),h=m.getEnd(),(p=g.getStart())1&&(e=l,d=c);(s=i/u)<.7071068&&(s=.7071068),e*s0?s=t.getRadius():t.setRadius(s)},s.prototype.find_ic_middle=function(t,n,e,r,o){var a,i,u,s,l;for(a=0,i=-1,u=t,l=!1;!l;)a++>2*o.getNconnection()&&console.log("Infinite loop in 'find_ic_middle'"),null!=e&&o.getConnection(u)==r&&(i=u),l=u==n,++u>=o.getNconnection()&&(u=0);if(-1==i){for(s=1,u=t;s<(a+1)/2;s++)++u>=o.getNconnection()&&(u=0);i=u}return i},s.prototype.construct_extruded_segment=function(t,n){var e,r,o,a,i,u,s,l,c,f,h,p,d,m,g,v,y,b;if(e=t.getAngle(),(o=r=n.getAngle())=1.5&&h<=Math.PI/2&&((v=d+1)>this.nbase&&(v-=this.nbase+1),(y=m-1)<0&&(y+=this.nbase+1),this.bases[v].setX(this.bases[d].getX()+.5*i),this.bases[v].setY(this.bases[d].getY()+.5*u),this.bases[y].setX(this.bases[m].getX()-.5*i),this.bases[y].setY(this.bases[m].getY()-.5*u),d=v,m=y);do{b=!1,this.construct_circle_segment(d,m),(v=d+1)>this.nbase&&(v-=this.nbase+1),i=this.bases[v].getX()-this.bases[d].getX(),u=this.bases[v].getY()-this.bases[d].getY(),(s=Math.atan2(u,i))<0&&(s+=2*Math.PI),(p=s-e)<0&&(p+=2*Math.PI),p>Math.PI&&(b=!0),(y=m-1)<0&&(y+=this.nbase+1),i=this.bases[y].getX()-this.bases[m].getX(),u=this.bases[y].getY()-this.bases[m].getY(),(l=Math.atan2(u,i))<0&&(l+=2*Math.PI),(p=r-l)<0&&(p+=2*Math.PI),p>Math.PI&&(b=!0),b&&(c=this.minf2(a,e+.5),this.bases[v].setX(this.bases[d].getX()+Math.cos(c)),this.bases[v].setY(this.bases[d].getY()+Math.sin(c)),d=v,c=this.maxf2(a,o-.5),this.bases[y].setX(this.bases[m].getX()+Math.cos(c)),this.bases[y].setY(this.bases[m].getY()+Math.sin(c)),m=y,g-=2)}while(b&&g>1)}},s.prototype.construct_circle_segment=function(t,n){var e,r,o,a,i,u,s,l,c,f,h,p,d,m,g;if(e=this.bases[n].getX()-this.bases[t].getX(),r=this.bases[n].getY()-this.bases[t].getY(),o=Math.sqrt(e*e+r*r),(d=n-t)<0&&(d+=this.nbase+1),o>=d)for(e/=o,r/=o,m=1;mthis.nbase&&(g-=this.nbase+1),this.bases[g].setX(this.bases[t].getX()+e*m/d),this.bases[g].setY(this.bases[t].getY()+r*m/d);else for(this.find_center_for_arc(d-1,o),e/=o,r/=o,a=this.bases[t].getX()+e*o/2,i=this.bases[t].getY()+r*o/2,u=r,s=-e,l=a+this._h*u,c=i+this._h*s,f=this.bases[t].getX()-l,h=this.bases[t].getY()-c,o=Math.sqrt(f*f+h*h),p=Math.atan2(h,f),m=1;mthis.nbase&&(g-=this.nbase+1),this.bases[g].setX(l+o*Math.cos(p+m*this.angleinc)),this.bases[g].setY(c+o*Math.sin(p+m*this.angleinc))},s.prototype.find_center_for_arc=function(t,n){var e,r,o,a,i,u,s,l;o=-(r=(t+1)/Math.PI)-n/(t+1.000001-n),n<1&&(o=0),l=0;do{e=(r+o)/2,i=1-.5/((a=Math.sqrt(e*e+n*n/4))*a),Math.abs(i)>1&&console.log("Unexpected large magnitude discriminant = "+i+" "+a),(s=(u=Math.acos(i))*(t+1)+2*Math.acos(e/a)-2*Math.PI)>0?o=e:r=e}while(Math.abs(s)>1e-4&&++l=this.MAXITER&&(noIterationFailureYet&&(console.log("Iteration failed in find_center_for_arc"),noIterationFailureYet=!1),e=0,u=0),this._h=e,this.angleinc=u},s.prototype.generate_region=function(t){var n,e,r,o,a,i;for(i=t.getRegion(),n=0,t.getStart()==i.getStart1()?(e=i.getStart1(),r=i.getEnd1()):(e=i.getStart2(),r=i.getEnd2()),(this.bases[t.getStart()].getX()>this.ANUM-100||this.bases[t.getEnd()].getX()>this.ANUM-100)&&console.log("Bad region passed to generate_region. Coordinates not defined."),o=e+1;o<=r;o++)n++,this.bases[o].setX(this.bases[t.getStart()].getX()+this.HELIX_FACTOR*n*t.getXrad()),this.bases[o].setY(this.bases[t.getStart()].getY()+this.HELIX_FACTOR*n*t.getYrad()),a=this.bases[o].getMate(),this.bases[a].setX(this.bases[t.getEnd()].getX()+this.HELIX_FACTOR*n*t.getXrad()),this.bases[a].setY(this.bases[t.getEnd()].getY()+this.HELIX_FACTOR*n*t.getYrad())},s.prototype.minf2=function(t,n){return tn?t:n},s.prototype.connected_connection=function(t,n){return!!t.isExtruded()||t.getEnd()+1==n.getStart()}},function(t,n){"use strict";function e(){this.radius=null,this.loopnumber=null,this.next=null,this.prev=null}Object.defineProperty(n,"__esModule",{value:!0}),n.Radloop=e,e.prototype.getRadius=function(){return this.radius},e.prototype.setRadius=function(t){this.radius=t},e.prototype.getLoopnumber=function(){return this.loopnumber},e.prototype.setLoopnumber=function(t){this.loopnumber=t},e.prototype.getNext=function(){return this.next},e.prototype.setNext=function(t){this.next=t},e.prototype.getPrev=function(){return this.prev},e.prototype.setPrev=function(t){this.prev=t}},function(t,n,e){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.Connection=a;var r=e(8),o=e(9);function a(){this.loop=new r.Loop,this.region=new o.Region,this.start=null,this.end=null,this.xrad=null,this.yrad=null,this.angle=null,this.extruded=null,this.broken=null,this._isNull=!1}a.prototype.isNull=function(){return this._isNull},a.prototype.setNull=function(t){this._isNull=t},a.prototype.getLoop=function(){return this.loop},a.prototype.setLoop=function(t){this.loop=t},a.prototype.getRegion=function(){return this.region},a.prototype.setRegion=function(t){this.region=t},a.prototype.getStart=function(){return this.start},a.prototype.setStart=function(t){this.start=t},a.prototype.getEnd=function(){return this.end},a.prototype.setEnd=function(t){this.end=t},a.prototype.getXrad=function(){return this.xrad},a.prototype.setXrad=function(t){this.xrad=t},a.prototype.getYrad=function(){return this.yrad},a.prototype.setYrad=function(t){this.yrad=t},a.prototype.getAngle=function(){return this.angle},a.prototype.setAngle=function(t){this.angle=t},a.prototype.isExtruded=function(){return this.extruded},a.prototype.setExtruded=function(t){this.extruded=t},a.prototype.isBroken=function(){return this.broken},a.prototype.setBroken=function(t){this.broken=t}},function(t,n,e){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.Loop=o;var r=e(7);function o(){this.nconnection=null,this.connections=[],this._connections=[],this.number=null,this.depth=null,this.mark=null,this.x=null,this.y=null,this.radius=null}o.prototype.getNconnection=function(){return this.nconnection},o.prototype.setNconnection=function(t){this.nconnection=t},o.prototype.setConnection=function(t,n){null!=n?this._connections[t]=n:(this._connections[t]||(this._connections[t]=new r.Connection),this._connections[t].setNull(!0))},o.prototype.getConnection=function(t){var n=e(7);this._connections[t]||(this._connections[t]=new n);var r=this._connections[t];return r.isNull()?null:r},o.prototype.addConnection=function(t,n){this._connections.push(n)},o.prototype.getNumber=function(){return this.number},o.prototype.setNumber=function(t){this.number=t},o.prototype.getDepth=function(){return this.depth},o.prototype.setDepth=function(t){this.depth=t},o.prototype.isMark=function(){return this.mark},o.prototype.setMark=function(t){this.mark=t},o.prototype.getX=function(){return this.x},o.prototype.setX=function(t){this.x=t},o.prototype.getY=function(){return this.y},o.prototype.setY=function(t){this.y=t},o.prototype.getRadius=function(){return this.radius},o.prototype.setRadius=function(t){this.radius=t}},function(t,n){"use strict";function e(){this._start1=null,this._end1=null,this._start2=null,this._end2=null}Object.defineProperty(n,"__esModule",{value:!0}),n.Region=e,e.prototype.getStart1=function(){return this._start1},e.prototype.setStart1=function(t){this._start1=t},e.prototype.getEnd1=function(){return this._end1},e.prototype.setEnd1=function(t){this._end1=t},e.prototype.getStart2=function(){return this._start2},e.prototype.setStart2=function(t){this._start2=t},e.prototype.getEnd2=function(){return this._end2},e.prototype.setEnd2=function(t){this._end2=t}},function(t,n,e){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.Base=o;var r=e(9);function o(){this.mate=null,this.x=null,this.y=null,this.extracted=null,this.region=new r.Region}o.prototype.getMate=function(){return this.mate},o.prototype.setMate=function(t){this.mate=t},o.prototype.getX=function(){return this.x},o.prototype.setX=function(t){this.x=t},o.prototype.getY=function(){return this.y},o.prototype.setY=function(t){this.y=t},o.prototype.isExtracted=function(){return this.extracted},o.prototype.setExtracted=function(t){this.extracted=t},o.prototype.getRegion=function(){return this.region},o.prototype.setRegion=function(t){this.region=t}},function(t,n,e){var r=e(12);"string"==typeof r&&(r=[[t.id,r,""]]),e(14)(r,{}),r.locals&&(t.exports=r.locals)},function(t,n,e){(t.exports=e(13)()).push([t.id,'.forna-container .structure-background-rect {\r\n stroke: black;\r\n stroke-width: 5;\r\n fill: transparent;\r\n}\r\n\r\n.forna-container circle.rna-base {\r\n stroke: #ccc;\r\n stroke-width: 1px;\r\n opacity: 1;\r\n fill: white;\r\n}\r\n\r\n.forna-container circle.rna-base.label {\r\n stroke: transparent;\r\n stroke-width: 0;\r\n fill: white;\r\n}\r\n\r\n.forna-container line.link {\r\n stroke: #999;\r\n stroke-opacity: 0.8;\r\n stroke-width: 2;\r\n}\r\n\r\n.forna-container line.rna-link {\r\n stroke: #999;\r\n stroke-opacity: 0.8;\r\n stroke-width: 2;\r\n}\r\n\r\n.forna-container .overlay {\r\n fill: transparent;\r\n}\r\n\r\n.forna-container .rna-name {\r\n text-anchor: middle;\r\n dy: -10;\r\n font-family: Tahoma, Geneva, sans-serif;\r\n font-size: 8pt;\r\n}\r\n\r\n.forna-container line.rna-link[link-type="backbone"] {\r\n stroke: transparent;\r\n}\r\n\r\n.forna-container line.rna-link[link-type="basepair"] {\r\n stroke: transparent;\r\n}\r\n\r\n.forna-container line.rna-link[link-type="fake"] {\r\n stroke: transparent;\r\n}\r\n\r\n.forna-container line.rna-link[link-type="extra"] {\r\n stroke: grey;\r\n}\r\n\r\n.forna-container line.rna-link[extra-link-type="correct"] {\r\n stroke: green;\r\n}\r\n\r\n.forna-container line.rna-link[extra-link-type="incorrect"] {\r\n stroke: green;\r\n}\r\n\r\n\r\n.forna-container path {\r\n stroke-width: 2;\r\n}\r\n\r\n.forna-container path[extra-link-type="correct"] {\r\n stroke: green;\r\n}\r\n\r\n.forna-container path[extra-link-type="incorrect"] {\r\n stroke: red;\r\n}\r\n\r\n\r\n.forna-container line.basepair {\r\n stroke: red;\r\n}\r\n\r\n.forna-container line.intermolecule {\r\n stroke: blue;\r\n}\r\n\r\n.forna-container line.chain_chain {\r\n stroke-dasharray: 3,3;\r\n}\r\n\r\n.forna-container line.fake {\r\n stroke: green;\r\n}\r\n\r\n.forna-container .transparent {\r\n fill: transparent;\r\n stroke-width: 0;\r\n stroke-opacity: 0;\r\n opacity: 0;\r\n}\r\n\r\n.forna-container .d3-tip {\r\n line-height: 1;\r\n font-weight: bold;\r\n padding: 6px;\r\n background: rgba(0, 0, 0, 0.6);\r\n color: #fff;\r\n border-radius: 4px;\r\n pointer-events: none;\r\n}\r\n\r\n.forna-container text.nucleotide-label {\r\n font-size: 5.5pt;\r\n font-weight: bold;\r\n font-family: Tahoma, Geneva, sans-serif;\r\n color: rgb(100,100,100);\r\n pointer-events: none;\r\n}\r\n\r\n.forna-container text.number-label {\r\n font-size: 5.5pt;\r\n font-weight: bold;\r\n font-family: Tahoma, Geneva, sans-serif;\r\n color: rgb(100,100,100);\r\n pointer-events: none;\r\n}\r\n\r\n.forna-container text {\r\n pointer-events: none;\r\n}\r\n\r\n.forna-container g.gnode {\r\n\r\n}\r\n\r\n.forna-container .brush .extent {\r\n fill-opacity: .1;\r\n stroke: #fff;\r\n shape-rendering: crispEdges;\r\n}\r\n\r\n.forna-container .noselect {\r\n -webkit-touch-callout: none;\r\n -webkit-user-select: none;\r\n -khtml-user-select: none;\r\n -moz-user-select: none;\r\n -ms-user-select: none;\r\n user-select: none;\r\n}\r\n',""])},function(t,n){t.exports=function(){var t=[];return t.toString=function(){for(var t=[],n=0;n=0&&l.splice(n,1)}function d(t){var n=document.createElement("style");return n.type="text/css",h(t,n),n}function m(t,n){var e,r,o;if(n.singleton){var a=s++;e=u||(u=d(n)),r=y.bind(null,e,a,!1),o=y.bind(null,e,a,!0)}else t.sourceMap&&"function"==typeof URL&&"function"==typeof URL.createObjectURL&&"function"==typeof URL.revokeObjectURL&&"function"==typeof Blob&&"function"==typeof btoa?(e=function(t){var n=document.createElement("link");return n.rel="stylesheet",h(t,n),n}(n),r=x.bind(null,e),o=function(){p(e),e.href&&URL.revokeObjectURL(e.href)}):(e=d(n),r=b.bind(null,e),o=function(){p(e)});return r(t),function(n){if(n){if(n.css===t.css&&n.media===t.media&&n.sourceMap===t.sourceMap)return;r(t=n)}else o()}}t.exports=function(t,n){void 0===(n=n||{}).singleton&&(n.singleton=a()),void 0===n.insertAt&&(n.insertAt="bottom");var e=f(t);return c(e,n),function(t){for(var o=[],a=0;an?1:t>=n?0:NaN}function v(t){return null===t?NaN:+t}function y(t){return!isNaN(t)}function b(t){return{left:function(n,e,r,o){for(arguments.length<3&&(r=0),arguments.length<4&&(o=n.length);r>>1;t(n[a],e)<0?r=a+1:o=a}return r},right:function(n,e,r,o){for(arguments.length<3&&(r=0),arguments.length<4&&(o=n.length);r>>1;t(n[a],e)>0?o=a:r=a+1}return r}}}a.ascending=g,a.descending=function(t,n){return nt?1:n>=t?0:NaN},a.min=function(t,n){var e,r,o=-1,a=t.length;if(1===arguments.length){for(;++o=r){e=r;break}for(;++or&&(e=r)}else{for(;++o=r){e=r;break}for(;++or&&(e=r)}return e},a.max=function(t,n){var e,r,o=-1,a=t.length;if(1===arguments.length){for(;++o=r){e=r;break}for(;++oe&&(e=r)}else{for(;++o=r){e=r;break}for(;++oe&&(e=r)}return e},a.extent=function(t,n){var e,r,o,a=-1,i=t.length;if(1===arguments.length){for(;++a=r){e=o=r;break}for(;++ar&&(e=r),o=r){e=o=r;break}for(;++ar&&(e=r),o1)return i/(s-1)},a.deviation=function(){var t=a.variance.apply(this,arguments);return t?Math.sqrt(t):t};var x=b(g);function M(t){return t.length}a.bisectLeft=x.left,a.bisect=a.bisectRight=x.right,a.bisector=function(t){return b(1===t.length?function(n,e){return g(t(n),e)}:t)},a.shuffle=function(t,n,e){(a=arguments.length)<3&&(e=t.length,a<2&&(n=0));for(var r,o,a=e-n;a;)o=Math.random()*a--|0,r=t[a+n],t[a+n]=t[o+n],t[o+n]=r;return t},a.permute=function(t,n){for(var e=n.length,r=new Array(e);e--;)r[e]=t[n[e]];return r},a.pairs=function(t){for(var n=0,e=t.length-1,r=t[0],o=new Array(e<0?0:e);n=0;)for(n=(r=t[o]).length;--n>=0;)e[--i]=r[n];return e};var w=Math.abs;function _(t){for(var n=1;t*n%1;)n*=10;return n}function k(t,n){for(var e in n)Object.defineProperty(t.prototype,e,{value:n[e],enumerable:!1})}function S(){this._=Object.create(null)}function A(t){return"__proto__"==(t+="")||"\0"===t[0]?"\0"+t:t}function E(t){return"\0"===(t+="")[0]?t.slice(1):t}function T(t){return A(t)in this._}function R(t){return(t=A(t))in this._&&delete this._[t]}function P(){var t=[];for(var n in this._)t.push(E(n));return t}function N(){var t=0;for(var n in this._)++t;return t}function O(){for(var t in this._)return!1;return!0}function C(){this._=Object.create(null)}function L(t){return t}function U(t,n,e){return function(){var r=e.apply(n,arguments);return r===n?t:r}}function D(t,n){if(n in t)return n;n=n.charAt(0).toUpperCase()+n.slice(1);for(var e=0,r=j.length;en;)o.push(r/a);else for(;(r=t+e*++i)=r.length)return n?n.call(e,a):t?a.sort(t):a;for(var s,l,c,f,h=-1,p=a.length,d=r[u++],m=new S;++h=r.length)return n;var a=[],i=o[e++];return n.forEach((function(n,r){a.push({key:n,values:t(r,e)})})),i?a.sort((function(t,n){return i(t.key,n.key)})):a}(i(a.map,t,0),0)},e.key=function(t){return r.push(t),e},e.sortKeys=function(t){return o[r.length-1]=t,e},e.sortValues=function(n){return t=n,e},e.rollup=function(t){return n=t,e},e},a.set=function(t){var n=new C;if(t)for(var e=0,r=t.length;e=0&&(r=t.slice(e+1),t=t.slice(0,e)),t)return arguments.length<2?this[t].on(r):this[t].on(r,n);if(2===arguments.length){if(null==n)for(t in this)this.hasOwnProperty(t)&&this[t].on(r,null);return this}},a.event=null,a.requote=function(t){return t.replace(Y,"\\$&")};var Y=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g,V={}.__proto__?function(t,n){t.__proto__=n}:function(t,n){for(var e in n)t[e]=n[e]};function H(t){return V(t,J),t}var G=function(t,n){return n.querySelector(t)},W=function(t,n){return n.querySelectorAll(t)},Z=function(t,n){var e=t.matches||t[D(t,"matchesSelector")];return(Z=function(t,n){return e.call(t,n)})(t,n)};"function"==typeof Sizzle&&(G=function(t,n){return Sizzle(t,n)[0]||null},W=Sizzle,Z=Sizzle.matchesSelector),a.selection=function(){return a.select(s.documentElement)};var J=a.selection.prototype=[];function $(t){return"function"==typeof t?t:function(){return G(t,this)}}function K(t){return"function"==typeof t?t:function(){return W(t,this)}}J.select=function(t){var n,e,r,o,a=[];t=$(t);for(var i=-1,u=this.length;++i=0&&"xmlns"!==(e=t.slice(0,n))&&(t=t.slice(n+1)),tt.hasOwnProperty(e)?{space:tt[e],local:t}:t}},J.attr=function(t,n){if(arguments.length<2){if("string"==typeof t){var e=this.node();return(t=a.ns.qualify(t)).local?e.getAttributeNS(t.space,t.local):e.getAttribute(t)}for(n in t)this.each(nt(n,t[n]));return this}return this.each(nt(t,n))},J.classed=function(t,n){if(arguments.length<2){if("string"==typeof t){var e=this.node(),r=(t=ot(t)).length,o=-1;if(n=e.classList){for(;++o=0;)(e=r[o])&&(a&&a!==e.nextSibling&&a.parentNode.insertBefore(e,a),a=e);return this},J.sort=function(t){t=pt.apply(this,arguments);for(var n=-1,e=this.length;++n=n&&(n=o+1);!(i=u[n])&&++n0&&(t=t.slice(0,o));var s=bt.get(t);function l(){var n=this[r];n&&(this.removeEventListener(t,n,n.$),delete this[r])}return s&&(t=s,i=Mt),o?n?function(){var o=i(n,u(arguments));l.call(this),this.addEventListener(t,this[r]=o,o.$=e),o._=n}:l:n?z:function(){var n,e=new RegExp("^__on([^.]+)"+a.requote(t)+"$");for(var r in this)if(n=r.match(e)){var o=this[r];this.removeEventListener(n[1],o,o.$),delete this[r]}}}a.selection.enter=mt,a.selection.enter.prototype=gt,gt.append=J.append,gt.empty=J.empty,gt.node=J.node,gt.call=J.call,gt.size=J.size,gt.select=function(t){for(var n,e,r,o,a,i=[],u=-1,s=this.length;++u0?1:t<0?-1:0}function jt(t,n,e){return(n[0]-t[0])*(e[1]-t[1])-(n[1]-t[1])*(e[0]-t[0])}function zt(t){return t>1?0:t<-1?Pt:Math.acos(t)}function qt(t){return t>1?Ct:t<-1?-Ct:Math.asin(t)}function Ft(t){return((t=Math.exp(t))+1/t)/2}function Bt(t){return(t=Math.sin(t/2))*t}var It=Math.SQRT2;a.interpolateZoom=function(t,n){var e,r,o=t[0],a=t[1],i=t[2],u=n[0],s=n[1],l=n[2],c=u-o,f=s-a,h=c*c+f*f;if(h0&&(t=t.transition().duration(m)),t.call(w.event)}function E(){u&&u.domain(i.range().map((function(t){return(t-h.x)/h.k})).map(i.invert)),f&&f.domain(l.range().map((function(t){return(t-h.y)/h.k})).map(l.invert))}function T(t){g++||t({type:"zoomstart"})}function R(t){E(),t({type:"zoom",scale:h.k,translate:[h.x,h.y]})}function P(t){--g||(t({type:"zoomend"}),n=null)}function N(){var t=this,n=M.of(t,arguments),e=0,r=a.select(c(t)).on(y,u).on(b,s),o=_(a.mouse(t)),i=kt(t);function u(){e=1,S(a.mouse(t),o),R(n)}function s(){r.on(y,null).on(b,null),i(e),P(n)}Mu.call(t),T(n)}function O(){var t,n=this,e=M.of(n,arguments),r={},i=0,u=".zoom-"+a.event.changedTouches[0].identifier,s="touchmove"+u,l="touchend"+u,c=[],f=a.select(n),p=kt(n);function d(){var e=a.touches(n);return t=h.k,e.forEach((function(t){t.identifier in r&&(r[t.identifier]=_(t))})),e}function m(){var t=a.event.target;a.select(t).on(s,g).on(l,y),c.push(t);for(var e=a.event.changedTouches,u=0,f=e.length;u1){v=p[0];var b=p[1],x=v[0]-b[0],M=v[1]-b[1];i=x*x+M*M}}function g(){var u,s,l,c,f=a.touches(n);Mu.call(n);for(var h=0,p=f.length;h360?t-=360:t<0&&(t+=360),t<60?r+(o-r)*t/60:t<180?o:t<240?r+(o-r)*(240-t)/60:r}(t))}return t=isNaN(t)?0:(t%=360)<0?t+360:t,n=isNaN(n)?0:n<0?0:n>1?1:n,r=2*(e=e<0?0:e>1?1:e)-(o=e<=.5?e*(1+n):e+n-e*n),new sn(a(t+120),a(t),a(t-120))}function Jt(t,n,e){return this instanceof Jt?(this.h=+t,this.c=+n,void(this.l=+e)):arguments.length<2?t instanceof Jt?new Jt(t.h,t.c,t.l):rn(t instanceof Qt?t.l:(t=mn((t=a.rgb(t)).r,t.g,t.b)).l,t.a,t.b):new Jt(t,n,e)}Wt.brighter=function(t){return t=Math.pow(.7,arguments.length?t:1),new Gt(this.h,this.s,this.l/t)},Wt.darker=function(t){return t=Math.pow(.7,arguments.length?t:1),new Gt(this.h,this.s,t*this.l)},Wt.rgb=function(){return Zt(this.h,this.s,this.l)},a.hcl=Jt;var $t=Jt.prototype=new Ht;function Kt(t,n,e){return isNaN(t)&&(t=0),isNaN(n)&&(n=0),new Qt(e,Math.cos(t*=Lt)*n,Math.sin(t)*n)}function Qt(t,n,e){return this instanceof Qt?(this.l=+t,this.a=+n,void(this.b=+e)):arguments.length<2?t instanceof Qt?new Qt(t.l,t.a,t.b):t instanceof Jt?Kt(t.h,t.c,t.l):mn((t=sn(t)).r,t.g,t.b):new Qt(t,n,e)}$t.brighter=function(t){return new Jt(this.h,this.c,Math.min(100,this.l+tn*(arguments.length?t:1)))},$t.darker=function(t){return new Jt(this.h,this.c,Math.max(0,this.l-tn*(arguments.length?t:1)))},$t.rgb=function(){return Kt(this.h,this.c,this.l).rgb()},a.lab=Qt;var tn=18,nn=Qt.prototype=new Ht;function en(t,n,e){var r=(t+16)/116,o=r+n/500,a=r-e/200;return new sn(un(3.2404542*(o=.95047*on(o))-1.5371385*(r=1*on(r))-.4985314*(a=1.08883*on(a))),un(-.969266*o+1.8760108*r+.041556*a),un(.0556434*o-.2040259*r+1.0572252*a))}function rn(t,n,e){return t>0?new Jt(Math.atan2(e,n)*Ut,Math.sqrt(n*n+e*e),t):new Jt(NaN,NaN,t)}function on(t){return t>.206893034?t*t*t:(t-4/29)/7.787037}function an(t){return t>.008856?Math.pow(t,1/3):7.787037*t+4/29}function un(t){return Math.round(255*(t<=.00304?12.92*t:1.055*Math.pow(t,1/2.4)-.055))}function sn(t,n,e){return this instanceof sn?(this.r=~~t,this.g=~~n,void(this.b=~~e)):arguments.length<2?t instanceof sn?new sn(t.r,t.g,t.b):pn(""+t,sn,Zt):new sn(t,n,e)}function ln(t){return new sn(t>>16,t>>8&255,255&t)}function cn(t){return ln(t)+""}nn.brighter=function(t){return new Qt(Math.min(100,this.l+tn*(arguments.length?t:1)),this.a,this.b)},nn.darker=function(t){return new Qt(Math.max(0,this.l-tn*(arguments.length?t:1)),this.a,this.b)},nn.rgb=function(){return en(this.l,this.a,this.b)},a.rgb=sn;var fn=sn.prototype=new Ht;function hn(t){return t<16?"0"+Math.max(0,t).toString(16):Math.min(255,t).toString(16)}function pn(t,n,e){var r,o,a,i=0,u=0,s=0;if(r=/([a-z]+)\((.*)\)/.exec(t=t.toLowerCase()))switch(o=r[2].split(","),r[1]){case"hsl":return e(parseFloat(o[0]),parseFloat(o[1])/100,parseFloat(o[2])/100);case"rgb":return n(vn(o[0]),vn(o[1]),vn(o[2]))}return(a=yn.get(t))?n(a.r,a.g,a.b):(null==t||"#"!==t.charAt(0)||isNaN(a=parseInt(t.slice(1),16))||(4===t.length?(i=(3840&a)>>4,i|=i>>4,u=240&a,u|=u>>4,s=15&a,s|=s<<4):7===t.length&&(i=(16711680&a)>>16,u=(65280&a)>>8,s=255&a)),n(i,u,s))}function dn(t,n,e){var r,o,a=Math.min(t/=255,n/=255,e/=255),i=Math.max(t,n,e),u=i-a,s=(i+a)/2;return u?(o=s<.5?u/(i+a):u/(2-i-a),r=t==i?(n-e)/u+(n0&&s<1?0:r),new Gt(r,o,s)}function mn(t,n,e){var r=an((.4124564*(t=gn(t))+.3575761*(n=gn(n))+.1804375*(e=gn(e)))/.95047),o=an((.2126729*t+.7151522*n+.072175*e)/1);return Qt(116*o-16,500*(r-o),200*(o-an((.0193339*t+.119192*n+.9503041*e)/1.08883)))}function gn(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function vn(t){var n=parseFloat(t);return"%"===t.charAt(t.length-1)?Math.round(2.55*n):n}fn.brighter=function(t){t=Math.pow(.7,arguments.length?t:1);var n=this.r,e=this.g,r=this.b,o=30;return n||e||r?(n&&n=200&&n<300||304===n){try{t=e.call(o,l)}catch(t){return void i.error.call(o,t)}i.load.call(o,t)}else i.error.call(o,l)}return!this.XDomainRequest||"withCredentials"in l||!/^(http(s)?:)?\/\//.test(t)||(l=new XDomainRequest),"onload"in l?l.onload=l.onerror=f:l.onreadystatechange=function(){l.readyState>3&&f()},l.onprogress=function(t){var n=a.event;a.event=t;try{i.progress.call(o,l)}finally{a.event=n}},o.header=function(t,n){return t=(t+"").toLowerCase(),arguments.length<2?s[t]:(null==n?delete s[t]:s[t]=n+"",o)},o.mimeType=function(t){return arguments.length?(n=null==t?null:t+"",o):n},o.responseType=function(t){return arguments.length?(c=t,o):c},o.response=function(t){return e=t,o},["get","post"].forEach((function(t){o[t]=function(){return o.send.apply(o,[t].concat(u(arguments)))}})),o.send=function(e,r,a){if(2===arguments.length&&"function"==typeof r&&(a=r,r=null),l.open(e,t,!0),null==n||"accept"in s||(s.accept=n+",*/*"),l.setRequestHeader)for(var u in s)l.setRequestHeader(u,s[u]);return null!=n&&l.overrideMimeType&&l.overrideMimeType(n),null!=c&&(l.responseType=c),null!=a&&o.on("error",a).on("load",(function(t){a(null,t)})),i.beforesend.call(o,l),l.send(null==r?null:r),o},o.abort=function(){return l.abort(),o},a.rebind(o,i,"on"),null==r?o:o.get(function(t){return 1===t.length?function(n,e){t(null==n?e:null)}:t}(r))}yn.forEach((function(t,n){yn.set(t,ln(n))})),a.functor=bn,a.xhr=xn(L),a.dsv=function(t,n){var e=new RegExp('["'+t+"\n]"),r=t.charCodeAt(0);function o(t,e,r){arguments.length<3&&(r=e,e=null);var o=Mn(t,n,null==e?a:i(e),r);return o.row=function(t){return arguments.length?o.response(null==(e=t)?a:i(t)):e},o}function a(t){return o.parse(t.responseText)}function i(t){return function(n){return o.parse(n.responseText,t)}}function u(n){return n.map(s).join(t)}function s(t){return e.test(t)?'"'+t.replace(/\"/g,'""')+'"':t}return o.parse=function(t,n){var e;return o.parseRows(t,(function(t,r){if(e)return e(t,r-1);var o=new Function("d","return {"+t.map((function(t,n){return JSON.stringify(t)+": d["+n+"]"})).join(",")+"}");e=n?function(t,e){return n(o(t),e)}:o}))},o.parseRows=function(t,n){var e,o,a={},i={},u=[],s=t.length,l=0,c=0;function f(){if(l>=s)return i;if(o)return o=!1,a;var n=l;if(34===t.charCodeAt(n)){for(var e=n;e++24?(isFinite(n)&&(clearTimeout(Sn),Sn=setTimeout(Tn,n)),kn=0):(kn=1,An(Tn))}function Rn(){for(var t=Date.now(),n=wn;n;)t>=n.t&&n.c(t-n.t)&&(n.c=null),n=n.n;return t}function Pn(){for(var t,n=wn,e=1/0;n;)n.c?(n.t8?function(t){return t/e}:function(t){return t*e},symbol:t}}));function Cn(t){var n=t.decimal,e=t.thousands,r=t.grouping,o=t.currency,i=r&&e?function(t,n){for(var o=t.length,a=[],i=0,u=r[0],s=0;o>0&&u>0&&(s+u+1>n&&(u=Math.max(1,n-s)),a.push(t.substring(o-=u,o+u)),!((s+=u+1)>n));)u=r[i=(i+1)%r.length];return a.reverse().join(e)}:L;return function(t){var e=Ln.exec(t),r=e[1]||" ",u=e[2]||">",s=e[3]||"-",l=e[4]||"",c=e[5],f=+e[6],h=e[7],p=e[8],d=e[9],m=1,g="",v="",y=!1,b=!0;switch(p&&(p=+p.substring(1)),(c||"0"===r&&"="===u)&&(c=r="0",u="="),d){case"n":h=!0,d="g";break;case"%":m=100,v="%",d="f";break;case"p":m=100,v="%",d="r";break;case"b":case"o":case"x":case"X":"#"===l&&(g="0"+d.toLowerCase());case"c":b=!1;case"d":y=!0,p=0;break;case"s":m=-1,d="r"}"$"===l&&(g=o[0],v=o[1]),"r"!=d||p||(d="g"),null!=p&&("g"==d?p=Math.max(1,Math.min(21,p)):"e"!=d&&"f"!=d||(p=Math.max(0,Math.min(20,p)))),d=Un.get(d)||Dn;var x=c&&h;return function(t){var e=v;if(y&&t%1)return"";var o=t<0||0===t&&1/t<0?(t=-t,"-"):"-"===s?"":s;if(m<0){var l=a.formatPrefix(t,p);t=l.scale(t),e=l.symbol+v}else t*=m;var M,w,_=(t=d(t,p)).lastIndexOf(".");if(_<0){var k=b?t.lastIndexOf("e"):-1;k<0?(M=t,w=""):(M=t.substring(0,k),w=t.substring(k))}else M=t.substring(0,_),w=n+t.substring(_+1);!c&&h&&(M=i(M,1/0));var S=g.length+M.length+w.length+(x?0:o.length),A=S"===u?A+o+t:"^"===u?A.substring(0,S>>=1)+o+t+A.substring(S):o+(x?t:A+t))+e}}}a.formatPrefix=function(t,n){var e=0;return(t=+t)&&(t<0&&(t*=-1),n&&(t=a.round(t,Nn(t,n))),e=1+Math.floor(1e-12+Math.log(t)/Math.LN10),e=Math.max(-24,Math.min(24,3*Math.floor((e-1)/3)))),On[8+e/3]};var Ln=/(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i,Un=a.map({b:function(t){return t.toString(2)},c:function(t){return String.fromCharCode(t)},o:function(t){return t.toString(8)},x:function(t){return t.toString(16)},X:function(t){return t.toString(16).toUpperCase()},g:function(t,n){return t.toPrecision(n)},e:function(t,n){return t.toExponential(n)},f:function(t,n){return t.toFixed(n)},r:function(t,n){return(t=a.round(t,Nn(t,n))).toFixed(Math.max(0,Math.min(20,Nn(t*(1+1e-15),n))))}});function Dn(t){return t+""}var jn=a.time={},zn=Date;function qn(){this._=new Date(arguments.length>1?Date.UTC.apply(this,arguments):arguments[0])}qn.prototype={getDate:function(){return this._.getUTCDate()},getDay:function(){return this._.getUTCDay()},getFullYear:function(){return this._.getUTCFullYear()},getHours:function(){return this._.getUTCHours()},getMilliseconds:function(){return this._.getUTCMilliseconds()},getMinutes:function(){return this._.getUTCMinutes()},getMonth:function(){return this._.getUTCMonth()},getSeconds:function(){return this._.getUTCSeconds()},getTime:function(){return this._.getTime()},getTimezoneOffset:function(){return 0},valueOf:function(){return this._.valueOf()},setDate:function(){Fn.setUTCDate.apply(this._,arguments)},setDay:function(){Fn.setUTCDay.apply(this._,arguments)},setFullYear:function(){Fn.setUTCFullYear.apply(this._,arguments)},setHours:function(){Fn.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){Fn.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){Fn.setUTCMinutes.apply(this._,arguments)},setMonth:function(){Fn.setUTCMonth.apply(this._,arguments)},setSeconds:function(){Fn.setUTCSeconds.apply(this._,arguments)},setTime:function(){Fn.setTime.apply(this._,arguments)}};var Fn=Date.prototype;function Bn(t,n,e){function r(n){var e=t(n),r=a(e,1);return n-e1)for(;i=l)return-1;if(37===(o=n.charCodeAt(u++))){if(i=n.charAt(u++),!(a=w[i in Yn?n.charAt(u++):i])||(r=a(t,e,r))<0)return-1}else if(o!=e.charCodeAt(r++))return-1}return r}c.utc=function(t){var n=c(t);function e(t){try{var e=new(zn=qn);return e._=t,n(e)}finally{zn=Date}}return e.parse=function(t){try{zn=qn;var e=n.parse(t);return e&&e._}finally{zn=Date}},e.toString=n.toString,e},c.multi=c.utc.multi=fe;var h=a.map(),p=Wn(i),d=Zn(i),m=Wn(u),g=Zn(u),v=Wn(s),y=Zn(s),b=Wn(l),x=Zn(l);o.forEach((function(t,n){h.set(t.toLowerCase(),n)}));var M={a:function(t){return u[t.getDay()]},A:function(t){return i[t.getDay()]},b:function(t){return l[t.getMonth()]},B:function(t){return s[t.getMonth()]},c:c(n),d:function(t,n){return Gn(t.getDate(),n,2)},e:function(t,n){return Gn(t.getDate(),n,2)},H:function(t,n){return Gn(t.getHours(),n,2)},I:function(t,n){return Gn(t.getHours()%12||12,n,2)},j:function(t,n){return Gn(1+jn.dayOfYear(t),n,3)},L:function(t,n){return Gn(t.getMilliseconds(),n,3)},m:function(t,n){return Gn(t.getMonth()+1,n,2)},M:function(t,n){return Gn(t.getMinutes(),n,2)},p:function(t){return o[+(t.getHours()>=12)]},S:function(t,n){return Gn(t.getSeconds(),n,2)},U:function(t,n){return Gn(jn.sundayOfYear(t),n,2)},w:function(t){return t.getDay()},W:function(t,n){return Gn(jn.mondayOfYear(t),n,2)},x:c(e),X:c(r),y:function(t,n){return Gn(t.getFullYear()%100,n,2)},Y:function(t,n){return Gn(t.getFullYear()%1e4,n,4)},Z:le,"%":function(){return"%"}},w={a:function(t,n,e){m.lastIndex=0;var r=m.exec(n.slice(e));return r?(t.w=g.get(r[0].toLowerCase()),e+r[0].length):-1},A:function(t,n,e){p.lastIndex=0;var r=p.exec(n.slice(e));return r?(t.w=d.get(r[0].toLowerCase()),e+r[0].length):-1},b:function(t,n,e){b.lastIndex=0;var r=b.exec(n.slice(e));return r?(t.m=x.get(r[0].toLowerCase()),e+r[0].length):-1},B:function(t,n,e){v.lastIndex=0;var r=v.exec(n.slice(e));return r?(t.m=y.get(r[0].toLowerCase()),e+r[0].length):-1},c:function(t,n,e){return f(t,M.c.toString(),n,e)},d:re,e:re,H:ae,I:ae,j:oe,L:se,m:ee,M:ie,p:function(t,n,e){var r=h.get(n.slice(e,e+=2).toLowerCase());return null==r?-1:(t.p=r,e)},S:ue,U:$n,w:Jn,W:Kn,x:function(t,n,e){return f(t,M.x.toString(),n,e)},X:function(t,n,e){return f(t,M.X.toString(),n,e)},y:te,Y:Qn,Z:ne,"%":ce};return c}jn.year=Bn((function(t){return(t=jn.day(t)).setMonth(0,1),t}),(function(t,n){t.setFullYear(t.getFullYear()+n)}),(function(t){return t.getFullYear()})),jn.years=jn.year.range,jn.years.utc=jn.year.utc.range,jn.day=Bn((function(t){var n=new zn(2e3,0);return n.setFullYear(t.getFullYear(),t.getMonth(),t.getDate()),n}),(function(t,n){t.setDate(t.getDate()+n)}),(function(t){return t.getDate()-1})),jn.days=jn.day.range,jn.days.utc=jn.day.utc.range,jn.dayOfYear=function(t){var n=jn.year(t);return Math.floor((t-n-6e4*(t.getTimezoneOffset()-n.getTimezoneOffset()))/864e5)},["sunday","monday","tuesday","wednesday","thursday","friday","saturday"].forEach((function(t,n){n=7-n;var e=jn[t]=Bn((function(t){return(t=jn.day(t)).setDate(t.getDate()-(t.getDay()+n)%7),t}),(function(t,n){t.setDate(t.getDate()+7*Math.floor(n))}),(function(t){var e=jn.year(t).getDay();return Math.floor((jn.dayOfYear(t)+(e+n)%7)/7)-(e!==n)}));jn[t+"s"]=e.range,jn[t+"s"].utc=e.utc.range,jn[t+"OfYear"]=function(t){var e=jn.year(t).getDay();return Math.floor((jn.dayOfYear(t)+(e+n)%7)/7)}})),jn.week=jn.sunday,jn.weeks=jn.sunday.range,jn.weeks.utc=jn.sunday.utc.range,jn.weekOfYear=jn.sundayOfYear;var Yn={"-":"",_:" ",0:"0"},Vn=/^\s*\d+/,Hn=/^%/;function Gn(t,n,e){var r=t<0?"-":"",o=(r?-t:t)+"",a=o.length;return r+(a68?1900:2e3),e+o[0].length):-1}function ne(t,n,e){return/^[+-]\d{4}$/.test(n=n.slice(e,e+5))?(t.Z=-n,e+5):-1}function ee(t,n,e){Vn.lastIndex=0;var r=Vn.exec(n.slice(e,e+2));return r?(t.m=r[0]-1,e+r[0].length):-1}function re(t,n,e){Vn.lastIndex=0;var r=Vn.exec(n.slice(e,e+2));return r?(t.d=+r[0],e+r[0].length):-1}function oe(t,n,e){Vn.lastIndex=0;var r=Vn.exec(n.slice(e,e+3));return r?(t.j=+r[0],e+r[0].length):-1}function ae(t,n,e){Vn.lastIndex=0;var r=Vn.exec(n.slice(e,e+2));return r?(t.H=+r[0],e+r[0].length):-1}function ie(t,n,e){Vn.lastIndex=0;var r=Vn.exec(n.slice(e,e+2));return r?(t.M=+r[0],e+r[0].length):-1}function ue(t,n,e){Vn.lastIndex=0;var r=Vn.exec(n.slice(e,e+2));return r?(t.S=+r[0],e+r[0].length):-1}function se(t,n,e){Vn.lastIndex=0;var r=Vn.exec(n.slice(e,e+3));return r?(t.L=+r[0],e+r[0].length):-1}function le(t){var n=t.getTimezoneOffset(),e=n>0?"-":"+",r=w(n)/60|0,o=w(n)%60;return e+Gn(r,"0",2)+Gn(o,"0",2)}function ce(t,n,e){Hn.lastIndex=0;var r=Hn.exec(n.slice(e,e+1));return r?e+r[0].length:-1}function fe(t){for(var n=t.length,e=-1;++e=0?1:-1,u=i*a,s=Math.cos(n),l=Math.sin(n),c=o*l,f=r*s+c*Math.cos(u),h=c*i*Math.sin(u);Ce.add(Math.atan2(h,f)),e=t,r=s,o=l}Le.point=function(i,u){Le.point=a,e=(t=i)*Lt,r=Math.cos(u=(n=u)*Lt/2+Pt/4),o=Math.sin(u)},Le.lineEnd=function(){a(t,n)}}function De(t){var n=t[0],e=t[1],r=Math.cos(e);return[r*Math.cos(n),r*Math.sin(n),Math.sin(e)]}function je(t,n){return t[0]*n[0]+t[1]*n[1]+t[2]*n[2]}function ze(t,n){return[t[1]*n[2]-t[2]*n[1],t[2]*n[0]-t[0]*n[2],t[0]*n[1]-t[1]*n[0]]}function qe(t,n){t[0]+=n[0],t[1]+=n[1],t[2]+=n[2]}function Fe(t,n){return[t[0]*n,t[1]*n,t[2]*n]}function Be(t){var n=Math.sqrt(t[0]*t[0]+t[1]*t[1]+t[2]*t[2]);t[0]/=n,t[1]/=n,t[2]/=n}function Ie(t){return[Math.atan2(t[1],t[0]),qt(t[2])]}function Xe(t,n){return w(t[0]-n[0])Tt?r=90:l<-Tt&&(n=-90),f[0]=t,f[1]=e}};function p(o,a){c.push(f=[t=o,e=o]),ar&&(r=a)}function d(a,i){var u=De([a*Lt,i*Lt]);if(s){var l=ze(s,u),c=ze([l[1],-l[0],0],l);Be(c),c=Ie(c);var f=a-o,h=f>0?1:-1,d=c[0]*Ut*h,m=w(f)>180;if(m^(h*or&&(r=g);else if(m^(h*o<(d=(d+360)%360-180)&&dr&&(r=i);m?ax(t,e)&&(e=a):x(a,e)>x(t,e)&&(t=a):e>=t?(ae&&(e=a)):a>o?x(t,a)>x(t,e)&&(e=a):x(a,e)>x(t,e)&&(t=a)}else p(a,i);s=u,o=a}function m(){h.point=d}function g(){f[0]=t,f[1]=e,h.point=p,s=null}function v(t,n){if(s){var e=t-o;l+=w(e)>180?e+(e>0?360:-360):e}else i=t,u=n;Le.point(t,n),d(t,n)}function y(){Le.lineStart()}function b(){v(i,u),Le.lineEnd(),w(l)>Tt&&(t=-(e=180)),f[0]=t,f[1]=e,s=null}function x(t,n){return(n-=t)<0?n+360:n}function M(t,n){return t[0]-n[0]}function _(t,n){return n[0]<=n[1]?n[0]<=t&&t<=n[1]:tx(m[0],m[1])&&(m[1]=p[1]),x(p[0],m[1])>x(m[0],m[1])&&(m[0]=p[0])):u.push(m=p);for(var s,l,p,d=-1/0,m=(i=0,u[l=u.length-1]);i<=l;m=p,++i)p=u[i],(s=x(m[1],p[0]))>d&&(d=s,t=p[0],e=m[1])}return c=f=null,t===1/0||n===1/0?[[NaN,NaN],[NaN,NaN]]:[[t,n],[e,r]]}}(),a.geo.centroid=function(t){we=_e=ke=Se=Ae=Ee=Te=Re=Pe=Ne=Oe=0,a.geo.stream(t,Ye);var n=Pe,e=Ne,r=Oe,o=n*n+e*e+r*r;return o=0;--u)o.point((f=c[u])[0],f[1]);else r(p.x,p.p.x,-1,o);p=p.p}c=(p=p.o).z,d=!d}while(!p.v);o.lineEnd()}}}function Qe(t){if(n=t.length){for(var n,e,r=0,o=t[0];++r=0?1:-1,_=w*M,k=_>Pt,S=d*b;if(Ce.add(Math.atan2(S*w*Math.sin(_),m*x+S*Math.cos(_))),a+=k?M+w*Nt:M,k^h>=e^v>=e){var A=ze(De(f),De(t));Be(A);var E=ze(o,A);Be(E);var T=(k^M>=0?-1:1)*qt(E[2]);(r>T||r===T&&(A[0]||A[1]))&&(i+=k^M>=0?1:-1)}if(!g++)break;h=v,d=b,m=x,f=t}}return(a<-Tt||a0){for(b||(i.polygonStart(),b=!0),i.lineStart();++a1&&2&n&&e.push(e.pop().concat(e.shift())),u.push(e.filter(er))}return c}}function er(t){return t.length>1}function rr(){var t,n=[];return{lineStart:function(){n.push(t=[])},point:function(n,e){t.push([n,e])},lineEnd:z,buffer:function(){var e=n;return n=[],t=null,e},rejoin:function(){n.length>1&&n.push(n.pop().concat(n.shift()))}}}function or(t,n){return((t=t.x)[0]<0?t[1]-Ct-Tt:Ct-t[1])-((n=n.x)[0]<0?n[1]-Ct-Tt:Ct-n[1])}var ar=nr($e,(function(t){var n,e=NaN,r=NaN,o=NaN;return{lineStart:function(){t.lineStart(),n=1},point:function(a,i){var u=a>0?Pt:-Pt,s=w(a-e);w(s-Pt)0?Ct:-Ct),t.point(o,r),t.lineEnd(),t.lineStart(),t.point(u,r),t.point(a,r),n=0):o!==u&&s>=Pt&&(w(e-o)Tt?Math.atan((Math.sin(n)*(a=Math.cos(r))*Math.sin(e)-Math.sin(r)*(o=Math.cos(n))*Math.sin(t))/(o*a*i)):(n+r)/2}(e,r,a,i),t.point(o,r),t.lineEnd(),t.lineStart(),t.point(u,r),n=0),t.point(e=a,r=i),o=u},lineEnd:function(){t.lineEnd(),e=r=NaN},clean:function(){return 2-n}}}),(function(t,n,e,r){var o;if(null==t)o=e*Ct,r.point(-Pt,o),r.point(0,o),r.point(Pt,o),r.point(Pt,0),r.point(Pt,-o),r.point(0,-o),r.point(-Pt,-o),r.point(-Pt,0),r.point(-Pt,o);else if(w(t[0]-n[0])>Tt){var a=t[0]0,r=w(n)>Tt;return nr(o,(function(t){var n,u,s,l,c;return{lineStart:function(){l=s=!1,c=1},point:function(f,h){var p,d=[f,h],m=o(f,h),g=e?m?0:i(f,h):m?i(f+(f<0?Pt:-Pt),h):0;if(!n&&(l=s=m)&&t.lineStart(),m!==s&&(p=a(n,d),(Xe(n,p)||Xe(d,p))&&(d[0]+=Tt,d[1]+=Tt,m=o(d[0],d[1]))),m!==s)c=0,m?(t.lineStart(),p=a(d,n),t.point(p[0],p[1])):(p=a(n,d),t.point(p[0],p[1]),t.lineEnd()),n=p;else if(r&&n&&e^m){var v;g&u||!(v=a(d,n,!0))||(c=0,e?(t.lineStart(),t.point(v[0][0],v[0][1]),t.point(v[1][0],v[1][1]),t.lineEnd()):(t.point(v[1][0],v[1][1]),t.lineEnd(),t.lineStart(),t.point(v[0][0],v[0][1])))}!m||n&&Xe(n,d)||t.point(d[0],d[1]),n=d,s=m,u=g},lineEnd:function(){s&&t.lineEnd(),n=null},clean:function(){return c|(l&&s)<<1}}}),Ir(t,6*Lt),e?[0,-t]:[-Pt,t-Pt]);function o(t,e){return Math.cos(t)*Math.cos(e)>n}function a(t,e,r){var o=[1,0,0],a=ze(De(t),De(e)),i=je(a,a),u=a[0],s=i-u*u;if(!s)return!r&&t;var l=n*i/s,c=-n*u/s,f=ze(o,a),h=Fe(o,l);qe(h,Fe(a,c));var p=f,d=je(h,p),m=je(p,p),g=d*d-m*(je(h,h)-1);if(!(g<0)){var v=Math.sqrt(g),y=Fe(p,(-d-v)/m);if(qe(y,h),y=Ie(y),!r)return y;var b,x=t[0],M=e[0],_=t[1],k=e[1];M0^y[1]<(w(y[0]-x)Pt^(x<=y[0]&&y[0]<=M)){var E=Fe(p,(-d+v)/m);return qe(E,h),[y,Ie(E)]}}}function i(n,r){var o=e?t:Pt-t,a=0;return n<-o?a|=1:n>o&&(a|=2),r<-o?a|=4:r>o&&(a|=8),a}}function ur(t,n,e,r){return function(o){var a,i=o.a,u=o.b,s=i.x,l=i.y,c=0,f=1,h=u.x-s,p=u.y-l;if(a=t-s,h||!(a>0)){if(a/=h,h<0){if(a0){if(a>f)return;a>c&&(c=a)}if(a=e-s,h||!(a<0)){if(a/=h,h<0){if(a>f)return;a>c&&(c=a)}else if(h>0){if(a0)){if(a/=p,p<0){if(a0){if(a>f)return;a>c&&(c=a)}if(a=r-l,p||!(a<0)){if(a/=p,p<0){if(a>f)return;a>c&&(c=a)}else if(p>0){if(a0&&(o.a={x:s+c*h,y:l+c*p}),f<1&&(o.b={x:s+f*h,y:l+f*p}),o}}}}}}function sr(t,n,e,r){return function(s){var l,c,f,h,p,d,m,g,v,y,b,x=s,M=rr(),w=ur(t,n,e,r),_={point:A,lineStart:function(){_.point=E,c&&c.push(f=[]),y=!0,v=!1,m=g=NaN},lineEnd:function(){l&&(E(h,p),d&&v&&M.rejoin(),l.push(M.buffer())),_.point=A,v&&s.lineEnd()},polygonStart:function(){s=M,l=[],c=[],b=!0},polygonEnd:function(){s=x,l=a.merge(l);var n=function(t){for(var n=0,e=c.length,r=t[1],o=0;or&&jt(l,a,t)>0&&++n:a[1]<=r&&jt(l,a,t)<0&&--n,l=a;return 0!==n}([t,r]),e=b&&n,o=l.length;(e||o)&&(s.polygonStart(),e&&(s.lineStart(),k(null,null,1,s),s.lineEnd()),o&&Ke(l,i,n,k,s),s.polygonEnd()),l=c=f=null}};function k(a,i,s,l){var c=0,f=0;if(null==a||(c=o(a,s))!==(f=o(i,s))||u(a,i)<0^s>0)do{l.point(0===c||3===c?t:e,c>1?r:n)}while((c=(c+s+4)%4)!==f);else l.point(i[0],i[1])}function S(o,a){return t<=o&&o<=e&&n<=a&&a<=r}function A(t,n){S(t,n)&&s.point(t,n)}function E(t,n){var e=S(t=Math.max(-1e9,Math.min(1e9,t)),n=Math.max(-1e9,Math.min(1e9,n)));if(c&&f.push([t,n]),y)h=t,p=n,d=e,y=!1,e&&(s.lineStart(),s.point(t,n));else if(e&&v)s.point(t,n);else{var r={a:{x:m,y:g},b:{x:t,y:n}};w(r)?(v||(s.lineStart(),s.point(r.a.x,r.a.y)),s.point(r.b.x,r.b.y),e||s.lineEnd(),b=!1):e&&(s.lineStart(),s.point(t,n),b=!1)}m=t,g=n,v=e}return _};function o(r,o){return w(r[0]-t)0?0:3:w(r[0]-e)0?2:1:w(r[1]-n)0?1:0:o>0?3:2}function i(t,n){return u(t.x,n.x)}function u(t,n){var e=o(t,1),r=o(n,1);return e!==r?e-r:0===e?n[1]-t[1]:1===e?t[0]-n[0]:2===e?t[1]-n[1]:n[0]-t[0]}}function lr(t){var n=0,e=Pt/3,r=Lr(t),o=r(n,e);return o.parallels=function(t){return arguments.length?r(n=t[0]*Pt/180,e=t[1]*Pt/180):[n/Pt*180,e/Pt*180]},o}function cr(t,n){var e=Math.sin(t),r=(e+Math.sin(n))/2,o=1+e*(2*r-e),a=Math.sqrt(o)/r;function i(t,n){var e=Math.sqrt(o-2*r*Math.sin(n))/r;return[e*Math.sin(t*=r),a-e*Math.cos(t)]}return i.invert=function(t,n){var e=a-n;return[Math.atan2(t,e)/r,qt((o-(t*t+e*e)*r*r)/(2*r))]},i}a.geo.clipExtent=function(){var t,n,e,r,o,a,i={stream:function(t){return o&&(o.valid=!1),(o=a(t)).valid=!0,o},extent:function(u){return arguments.length?(a=sr(t=+u[0][0],n=+u[0][1],e=+u[1][0],r=+u[1][1]),o&&(o.valid=!1,o=null),i):[[t,n],[e,r]]}};return i.extent([[0,0],[960,500]])},(a.geo.conicEqualArea=function(){return lr(cr)}).raw=cr,a.geo.albers=function(){return a.geo.conicEqualArea().rotate([96,0]).center([-.6,38.7]).parallels([29.5,45.5]).scale(1070)},a.geo.albersUsa=function(){var t,n,e,r,o=a.geo.albers(),i=a.geo.conicEqualArea().rotate([154,0]).center([-2,58.5]).parallels([55,65]),u=a.geo.conicEqualArea().rotate([157,0]).center([-3,19.9]).parallels([8,18]),s={point:function(n,e){t=[n,e]}};function l(o){var a=o[0],i=o[1];return t=null,n(a,i),t||(e(a,i),t)||r(a,i),t}return l.invert=function(t){var n=o.scale(),e=o.translate(),r=(t[0]-e[0])/n,a=(t[1]-e[1])/n;return(a>=.12&&a<.234&&r>=-.425&&r<-.214?i:a>=.166&&a<.234&&r>=-.214&&r<-.115?u:o).invert(t)},l.stream=function(t){var n=o.stream(t),e=i.stream(t),r=u.stream(t);return{point:function(t,o){n.point(t,o),e.point(t,o),r.point(t,o)},sphere:function(){n.sphere(),e.sphere(),r.sphere()},lineStart:function(){n.lineStart(),e.lineStart(),r.lineStart()},lineEnd:function(){n.lineEnd(),e.lineEnd(),r.lineEnd()},polygonStart:function(){n.polygonStart(),e.polygonStart(),r.polygonStart()},polygonEnd:function(){n.polygonEnd(),e.polygonEnd(),r.polygonEnd()}}},l.precision=function(t){return arguments.length?(o.precision(t),i.precision(t),u.precision(t),l):o.precision()},l.scale=function(t){return arguments.length?(o.scale(t),i.scale(.35*t),u.scale(t),l.translate(o.translate())):o.scale()},l.translate=function(t){if(!arguments.length)return o.translate();var a=o.scale(),c=+t[0],f=+t[1];return n=o.translate(t).clipExtent([[c-.455*a,f-.238*a],[c+.455*a,f+.238*a]]).stream(s).point,e=i.translate([c-.307*a,f+.201*a]).clipExtent([[c-.425*a+Tt,f+.12*a+Tt],[c-.214*a-Tt,f+.234*a-Tt]]).stream(s).point,r=u.translate([c-.205*a,f+.212*a]).clipExtent([[c-.214*a+Tt,f+.166*a+Tt],[c-.115*a-Tt,f+.234*a-Tt]]).stream(s).point,l},l.scale(1070)};var fr,hr,pr,dr,mr,gr,vr={point:z,lineStart:z,lineEnd:z,polygonStart:function(){hr=0,vr.lineStart=yr},polygonEnd:function(){vr.lineStart=vr.lineEnd=vr.point=z,fr+=w(hr/2)}};function yr(){var t,n,e,r;function o(t,n){hr+=r*t-e*n,e=t,r=n}vr.point=function(a,i){vr.point=o,t=e=a,n=r=i},vr.lineEnd=function(){o(t,n)}}var br={point:function(t,n){tmr&&(mr=t),ngr&&(gr=n)},lineStart:z,lineEnd:z,polygonStart:z,polygonEnd:z};function xr(){var t=Mr(4.5),n=[],e={point:r,lineStart:function(){e.point=o},lineEnd:i,polygonStart:function(){e.lineEnd=u},polygonEnd:function(){e.lineEnd=i,e.point=r},pointRadius:function(n){return t=Mr(n),e},result:function(){if(n.length){var t=n.join("");return n=[],t}}};function r(e,r){n.push("M",e,",",r,t)}function o(t,r){n.push("M",t,",",r),e.point=a}function a(t,e){n.push("L",t,",",e)}function i(){e.point=r}function u(){n.push("Z")}return e}function Mr(t){return"m0,"+t+"a"+t+","+t+" 0 1,1 0,"+-2*t+"a"+t+","+t+" 0 1,1 0,"+2*t+"z"}var wr,_r={point:kr,lineStart:Sr,lineEnd:Ar,polygonStart:function(){_r.lineStart=Er},polygonEnd:function(){_r.point=kr,_r.lineStart=Sr,_r.lineEnd=Ar}};function kr(t,n){ke+=t,Se+=n,++Ae}function Sr(){var t,n;function e(e,r){var o=e-t,a=r-n,i=Math.sqrt(o*o+a*a);Ee+=i*(t+e)/2,Te+=i*(n+r)/2,Re+=i,kr(t=e,n=r)}_r.point=function(r,o){_r.point=e,kr(t=r,n=o)}}function Ar(){_r.point=kr}function Er(){var t,n,e,r;function o(t,n){var o=t-e,a=n-r,i=Math.sqrt(o*o+a*a);Ee+=i*(e+t)/2,Te+=i*(r+n)/2,Re+=i,Pe+=(i=r*t-e*n)*(e+t),Ne+=i*(r+n),Oe+=3*i,kr(e=t,r=n)}_r.point=function(a,i){_r.point=o,kr(t=e=a,n=r=i)},_r.lineEnd=function(){o(t,n)}}function Tr(t){var n=4.5,e={point:r,lineStart:function(){e.point=o},lineEnd:i,polygonStart:function(){e.lineEnd=u},polygonEnd:function(){e.lineEnd=i,e.point=r},pointRadius:function(t){return n=t,e},result:z};function r(e,r){t.moveTo(e+n,r),t.arc(e,r,n,0,Nt)}function o(n,r){t.moveTo(n,r),e.point=a}function a(n,e){t.lineTo(n,e)}function i(){e.point=r}function u(){t.closePath()}return e}function Rr(t){var n=.5,e=Math.cos(30*Lt),r=16;function o(t){return(r?i:a)(t)}function a(n){return Or(n,(function(e,r){e=t(e,r),n.point(e[0],e[1])}))}function i(n){var e,o,a,i,s,l,c,f,h,p,d,m,g={point:v,lineStart:y,lineEnd:x,polygonStart:function(){n.polygonStart(),g.lineStart=M},polygonEnd:function(){n.polygonEnd(),g.lineStart=y}};function v(e,r){e=t(e,r),n.point(e[0],e[1])}function y(){f=NaN,g.point=b,n.lineStart()}function b(e,o){var a=De([e,o]),i=t(e,o);u(f,h,c,p,d,m,f=i[0],h=i[1],c=e,p=a[0],d=a[1],m=a[2],r,n),n.point(f,h)}function x(){g.point=v,n.lineEnd()}function M(){y(),g.point=w,g.lineEnd=_}function w(t,n){b(e=t,n),o=f,a=h,i=p,s=d,l=m,g.point=b}function _(){u(f,h,c,p,d,m,o,a,e,i,s,l,r,n),g.lineEnd=x,x()}return g}function u(r,o,a,i,s,l,c,f,h,p,d,m,g,v){var y=c-r,b=f-o,x=y*y+b*b;if(x>4*n&&g--){var M=i+p,_=s+d,k=l+m,S=Math.sqrt(M*M+_*_+k*k),A=Math.asin(k/=S),E=w(w(k)-1)n||w((y*N+b*O)/x-.5)>.3||i*p+s*d+l*m0&&16,o):Math.sqrt(n)},o}function Pr(t){var n=Rr((function(n,e){return t([n*Ut,e*Ut])}));return function(t){return Ur(n(t))}}function Nr(t){this.stream=t}function Or(t,n){return{point:n,sphere:function(){t.sphere()},lineStart:function(){t.lineStart()},lineEnd:function(){t.lineEnd()},polygonStart:function(){t.polygonStart()},polygonEnd:function(){t.polygonEnd()}}}function Cr(t){return Lr((function(){return t}))()}function Lr(t){var n,e,r,o,i,u,s=Rr((function(t,e){return[(t=n(t,e))[0]*l+o,i-t[1]*l]})),l=150,c=480,f=250,h=0,p=0,d=0,m=0,g=0,v=ar,y=L,b=null,x=null;function M(t){return[(t=r(t[0]*Lt,t[1]*Lt))[0]*l+o,i-t[1]*l]}function w(t){return(t=r.invert((t[0]-o)/l,(i-t[1])/l))&&[t[0]*Ut,t[1]*Ut]}function _(){r=Je(e=zr(d,m,g),n);var t=n(h,p);return o=c-t[0]*l,i=f+t[1]*l,k()}function k(){return u&&(u.valid=!1,u=null),M}return M.stream=function(t){return u&&(u.valid=!1),(u=Ur(v(e,s(y(t))))).valid=!0,u},M.clipAngle=function(t){return arguments.length?(v=null==t?(b=t,ar):ir((b=+t)*Lt),k()):b},M.clipExtent=function(t){return arguments.length?(x=t,y=t?sr(t[0][0],t[0][1],t[1][0],t[1][1]):L,k()):x},M.scale=function(t){return arguments.length?(l=+t,_()):l},M.translate=function(t){return arguments.length?(c=+t[0],f=+t[1],_()):[c,f]},M.center=function(t){return arguments.length?(h=t[0]%360*Lt,p=t[1]%360*Lt,_()):[h*Ut,p*Ut]},M.rotate=function(t){return arguments.length?(d=t[0]%360*Lt,m=t[1]%360*Lt,g=t.length>2?t[2]%360*Lt:0,_()):[d*Ut,m*Ut,g*Ut]},a.rebind(M,s,"precision"),function(){return n=t.apply(this,arguments),M.invert=n.invert&&w,_()}}function Ur(t){return Or(t,(function(n,e){t.point(n*Lt,e*Lt)}))}function Dr(t,n){return[t,n]}function jr(t,n){return[t>Pt?t-Nt:t<-Pt?t+Nt:t,n]}function zr(t,n,e){return t?n||e?Je(Fr(t),Br(n,e)):Fr(t):n||e?Br(n,e):jr}function qr(t){return function(n,e){return[(n+=t)>Pt?n-Nt:n<-Pt?n+Nt:n,e]}}function Fr(t){var n=qr(t);return n.invert=qr(-t),n}function Br(t,n){var e=Math.cos(t),r=Math.sin(t),o=Math.cos(n),a=Math.sin(n);function i(t,n){var i=Math.cos(n),u=Math.cos(t)*i,s=Math.sin(t)*i,l=Math.sin(n),c=l*e+u*r;return[Math.atan2(s*o-c*a,u*e-l*r),qt(c*o+s*a)]}return i.invert=function(t,n){var i=Math.cos(n),u=Math.cos(t)*i,s=Math.sin(t)*i,l=Math.sin(n),c=l*o-s*a;return[Math.atan2(s*o+l*a,u*e+c*r),qt(c*e-u*r)]},i}function Ir(t,n){var e=Math.cos(t),r=Math.sin(t);return function(o,a,i,u){var s=i*n;null!=o?(o=Xr(e,o),a=Xr(e,a),(i>0?oa)&&(o+=i*Nt)):(o=t+i*Nt,a=t-.5*s);for(var l,c=o;i>0?c>a:c2?t[2]*Lt:0),n.invert=function(n){return(n=t.invert(n[0]*Lt,n[1]*Lt))[0]*=Ut,n[1]*=Ut,n},n},jr.invert=Dr,a.geo.circle=function(){var t,n,e=[0,0],r=6;function o(){var t="function"==typeof e?e.apply(this,arguments):e,r=zr(-t[0]*Lt,-t[1]*Lt,0).invert,o=[];return n(null,null,1,{point:function(t,n){o.push(t=r(t,n)),t[0]*=Ut,t[1]*=Ut}}),{type:"Polygon",coordinates:[o]}}return o.origin=function(t){return arguments.length?(e=t,o):e},o.angle=function(e){return arguments.length?(n=Ir((t=+e)*Lt,r*Lt),o):t},o.precision=function(e){return arguments.length?(n=Ir(t*Lt,(r=+e)*Lt),o):r},o.angle(90)},a.geo.distance=function(t,n){var e,r=(n[0]-t[0])*Lt,o=t[1]*Lt,a=n[1]*Lt,i=Math.sin(r),u=Math.cos(r),s=Math.sin(o),l=Math.cos(o),c=Math.sin(a),f=Math.cos(a);return Math.atan2(Math.sqrt((e=f*i)*e+(e=l*c-s*f*u)*e),s*c+l*f*u)},a.geo.graticule=function(){var t,n,e,r,o,i,u,s,l,c,f,h,p=10,d=p,m=90,g=360,v=2.5;function y(){return{type:"MultiLineString",coordinates:b()}}function b(){return a.range(Math.ceil(r/m)*m,e,m).map(f).concat(a.range(Math.ceil(s/g)*g,u,g).map(h)).concat(a.range(Math.ceil(n/p)*p,t,p).filter((function(t){return w(t%m)>Tt})).map(l)).concat(a.range(Math.ceil(i/d)*d,o,d).filter((function(t){return w(t%g)>Tt})).map(c))}return y.lines=function(){return b().map((function(t){return{type:"LineString",coordinates:t}}))},y.outline=function(){return{type:"Polygon",coordinates:[f(r).concat(h(u).slice(1),f(e).reverse().slice(1),h(s).reverse().slice(1))]}},y.extent=function(t){return arguments.length?y.majorExtent(t).minorExtent(t):y.minorExtent()},y.majorExtent=function(t){return arguments.length?(r=+t[0][0],e=+t[1][0],s=+t[0][1],u=+t[1][1],r>e&&(t=r,r=e,e=t),s>u&&(t=s,s=u,u=t),y.precision(v)):[[r,s],[e,u]]},y.minorExtent=function(e){return arguments.length?(n=+e[0][0],t=+e[1][0],i=+e[0][1],o=+e[1][1],n>t&&(e=n,n=t,t=e),i>o&&(e=i,i=o,o=e),y.precision(v)):[[n,i],[t,o]]},y.step=function(t){return arguments.length?y.majorStep(t).minorStep(t):y.minorStep()},y.majorStep=function(t){return arguments.length?(m=+t[0],g=+t[1],y):[m,g]},y.minorStep=function(t){return arguments.length?(p=+t[0],d=+t[1],y):[p,d]},y.precision=function(a){return arguments.length?(v=+a,l=Yr(i,o,90),c=Vr(n,t,v),f=Yr(s,u,90),h=Vr(r,e,v),y):v},y.majorExtent([[-180,-90+Tt],[180,90-Tt]]).minorExtent([[-180,-80-Tt],[180,80+Tt]])},a.geo.greatArc=function(){var t,n,e=Hr,r=Gr;function o(){return{type:"LineString",coordinates:[t||e.apply(this,arguments),n||r.apply(this,arguments)]}}return o.distance=function(){return a.geo.distance(t||e.apply(this,arguments),n||r.apply(this,arguments))},o.source=function(n){return arguments.length?(e=n,t="function"==typeof n?null:n,o):e},o.target=function(t){return arguments.length?(r=t,n="function"==typeof t?null:t,o):r},o.precision=function(){return arguments.length?o:0},o},a.geo.interpolate=function(t,n){return e=t[0]*Lt,r=t[1]*Lt,o=n[0]*Lt,a=n[1]*Lt,i=Math.cos(r),u=Math.sin(r),s=Math.cos(a),l=Math.sin(a),c=i*Math.cos(e),f=i*Math.sin(e),h=s*Math.cos(o),p=s*Math.sin(o),d=2*Math.asin(Math.sqrt(Bt(a-r)+i*s*Bt(o-e))),m=1/Math.sin(d),(g=d?function(t){var n=Math.sin(t*=d)*m,e=Math.sin(d-t)*m,r=e*c+n*h,o=e*f+n*p,a=e*u+n*l;return[Math.atan2(o,r)*Ut,Math.atan2(a,Math.sqrt(r*r+o*o))*Ut]}:function(){return[e*Ut,r*Ut]}).distance=d,g;var e,r,o,a,i,u,s,l,c,f,h,p,d,m,g},a.geo.length=function(t){return wr=0,a.geo.stream(t,Wr),wr};var Wr={sphere:z,point:z,lineStart:function(){var t,n,e;function r(r,o){var a=Math.sin(o*=Lt),i=Math.cos(o),u=w((r*=Lt)-t),s=Math.cos(u);wr+=Math.atan2(Math.sqrt((u=i*Math.sin(u))*u+(u=e*a-n*i*s)*u),n*a+e*i*s),t=r,n=a,e=i}Wr.point=function(o,a){t=o*Lt,n=Math.sin(a*=Lt),e=Math.cos(a),Wr.point=r},Wr.lineEnd=function(){Wr.point=Wr.lineEnd=z}},lineEnd:z,polygonStart:z,polygonEnd:z};function Zr(t,n){function e(n,e){var r=Math.cos(n),o=Math.cos(e),a=t(r*o);return[a*o*Math.sin(n),a*Math.sin(e)]}return e.invert=function(t,e){var r=Math.sqrt(t*t+e*e),o=n(r),a=Math.sin(o),i=Math.cos(o);return[Math.atan2(t*a,r*i),Math.asin(r&&e*a/r)]},e}var Jr=Zr((function(t){return Math.sqrt(2/(1+t))}),(function(t){return 2*Math.asin(t/2)}));(a.geo.azimuthalEqualArea=function(){return Cr(Jr)}).raw=Jr;var $r=Zr((function(t){var n=Math.acos(t);return n&&n/Math.sin(n)}),L);function Kr(t,n){var e=Math.cos(t),r=function(t){return Math.tan(Pt/4+t/2)},o=t===n?Math.sin(t):Math.log(e/Math.cos(n))/Math.log(r(n)/r(t)),a=e*Math.pow(r(t),o)/o;if(!o)return no;function i(t,n){a>0?n<-Ct+Tt&&(n=-Ct+Tt):n>Ct-Tt&&(n=Ct-Tt);var e=a/Math.pow(r(n),o);return[e*Math.sin(o*t),a-e*Math.cos(o*t)]}return i.invert=function(t,n){var e=a-n,r=Dt(o)*Math.sqrt(t*t+e*e);return[Math.atan2(t,e)/o,2*Math.atan(Math.pow(a/r,1/o))-Ct]},i}function Qr(t,n){var e=Math.cos(t),r=t===n?Math.sin(t):(e-Math.cos(n))/(n-t),o=e/r+t;if(w(r)1&&jt(t[e[r-2]],t[e[r-1]],t[o])<=0;)--r;e[r++]=o}return e.slice(0,r)}function lo(t,n){return t[0]-n[0]||t[1]-n[1]}(a.geo.stereographic=function(){return Cr(oo)}).raw=oo,ao.invert=function(t,n){return[-n,2*Math.atan(Math.exp(t))-Ct]},(a.geo.transverseMercator=function(){var t=eo(ao),n=t.center,e=t.rotate;return t.center=function(t){return t?n([-t[1],t[0]]):[(t=n())[1],-t[0]]},t.rotate=function(t){return t?e([t[0],t[1],t.length>2?t[2]+90:90]):[(t=e())[0],t[1],t[2]-90]},e([0,0,90])}).raw=ao,a.geom={},a.geom.hull=function(t){var n=io,e=uo;if(arguments.length)return r(t);function r(t){if(t.length<3)return[];var r,o=bn(n),a=bn(e),i=t.length,u=[],s=[];for(r=0;r=0;--r)p.push(t[u[l[r]][2]]);for(r=+f;rTt)u=u.L;else{if(!((o=a-To(u,i))>Tt)){r>-Tt?(n=u.P,e=u):o>-Tt?(n=u,e=u.N):n=e=u;break}if(!u.R){n=u;break}u=u.R}var s=_o(t);if(vo.insert(n,s),n||e){if(n===e)return Co(n),e=_o(n.site),vo.insert(s,e),s.edge=e.edge=Do(n.site,s.site),Oo(n),void Oo(e);if(e){Co(n),Co(e);var l=n.site,c=l.x,f=l.y,h=t.x-c,p=t.y-f,d=e.site,m=d.x-c,g=d.y-f,v=2*(h*g-p*m),y=h*h+p*p,b=m*m+g*g,x={x:(g*y-p*b)/v+c,y:(h*b-m*y)/v+f};jo(e.edge,l,d,x),s.edge=Do(l,t,null,x),e.edge=Do(t,d,null,x),Oo(n),Oo(e)}else s.edge=Do(n.site,s.site)}}function Eo(t,n){var e=t.site,r=e.x,o=e.y,a=o-n;if(!a)return r;var i=t.P;if(!i)return-1/0;var u=(e=i.site).x,s=e.y,l=s-n;if(!l)return u;var c=u-r,f=1/a-1/l,h=c/l;return f?(-h+Math.sqrt(h*h-2*f*(c*c/(-2*l)-s+l/2+o-a/2)))/f+r:(r+u)/2}function To(t,n){var e=t.N;if(e)return Eo(e,n);var r=t.site;return r.y===n?r.x:1/0}function Ro(t){this.site=t,this.edges=[]}function Po(t,n){return n.angle-t.angle}function No(){Fo(this),this.x=this.y=this.arc=this.site=this.cy=null}function Oo(t){var n=t.P,e=t.N;if(n&&e){var r=n.site,o=t.site,a=e.site;if(r!==a){var i=o.x,u=o.y,s=r.x-i,l=r.y-u,c=a.x-i,f=2*(s*(g=a.y-u)-l*c);if(!(f>=-Rt)){var h=s*s+l*l,p=c*c+g*g,d=(g*h-l*p)/f,m=(s*p-c*h)/f,g=m+u,v=Mo.pop()||new No;v.arc=t,v.site=o,v.x=d+i,v.y=g+Math.sqrt(d*d+m*m),v.cy=g,t.circle=v;for(var y=null,b=bo._;b;)if(v.y=u)return;if(h>d){if(a){if(a.y>=l)return}else a={x:g,y:s};e={x:g,y:l}}else{if(a){if(a.y1)if(h>d){if(a){if(a.y>=l)return}else a={x:(s-o)/r,y:s};e={x:(l-o)/r,y:l}}else{if(a){if(a.y=u)return}else a={x:i,y:r*i+o};e={x:u,y:r*u+o}}else{if(a){if(a.xTt||w(o-e)>Tt)&&(u.splice(i,0,new zo((v=a.site,y=c,b=w(r-f)Tt?{x:f,y:w(n-f)Tt?{x:w(e-d)Tt?{x:h,y:w(n-h)Tt?{x:w(e-p)=e&&l.x<=o&&l.y>=r&&l.y<=i?[[e,i],[o,i],[o,r],[e,r]]:[]).point=t[u]})),n}function u(t){return t.map((function(t,n){return{x:Math.round(r(t,n)/Tt)*Tt,y:Math.round(o(t,n)/Tt)*Tt,i:n}}))}return i.links=function(t){return Yo(u(t)).edges.filter((function(t){return t.l&&t.r})).map((function(n){return{source:t[n.l.i],target:t[n.r.i]}}))},i.triangles=function(t){var n=[];return Yo(u(t)).cells.forEach((function(e,r){for(var o,a=e.site,i=e.edges.sort(Po),u=-1,s=i.length,l=i[s-1].edge,c=l.l===a?l.r:l.l;++ua||f>i||h=M)<<1|n>=x,_=w+4;w<_;++w)if(l=b[3&w])switch(3&w){case 0:t(l,c,f,x,M);break;case 1:t(l,x,f,h,M);break;case 2:t(l,c,M,x,p);break;case 3:t(l,x,M,h,p)}}}(t,r,o,a,i),u}function Ko(t,n){t=a.rgb(t),n=a.rgb(n);var e=t.r,r=t.g,o=t.b,i=n.r-e,u=n.g-r,s=n.b-o;return function(t){return"#"+hn(Math.round(e+i*t))+hn(Math.round(r+u*t))+hn(Math.round(o+s*t))}}function Qo(t,n){var e,r={},o={};for(e in t)e in n?r[e]=oa(t[e],n[e]):o[e]=t[e];for(e in n)e in t||(o[e]=n[e]);return function(t){for(e in r)o[e]=r[e](t);return o}}function ta(t,n){return t=+t,n=+n,function(e){return t*(1-e)+n*e}}function na(t,n){var e,r,o,a=ea.lastIndex=ra.lastIndex=0,i=-1,u=[],s=[];for(t+="",n+="";(e=ea.exec(t))&&(r=ra.exec(n));)(o=r.index)>a&&(o=n.slice(a,o),u[i]?u[i]+=o:u[++i]=o),(e=e[0])===(r=r[0])?u[i]?u[i]+=r:u[++i]=r:(u[++i]=null,s.push({i:i,x:ta(e,r)})),a=ra.lastIndex;return am&&(m=s.x),s.y>g&&(g=s.y),l.push(s.x),c.push(s.y);else for(f=0;fm&&(m=b),x>g&&(g=x),l.push(b),c.push(x)}var M=m-p,_=g-d;function k(t,n,e,r,o,a,i,u){if(!isNaN(e)&&!isNaN(r))if(t.leaf){var s=t.x,l=t.y;if(null!=s)if(w(s-e)+w(l-r)<.01)S(t,n,e,r,o,a,i,u);else{var c=t.point;t.x=t.y=t.point=null,S(t,c,s,l,o,a,i,u),S(t,n,e,r,o,a,i,u)}else t.x=e,t.y=r,t.point=n}else S(t,n,e,r,o,a,i,u)}function S(t,n,e,r,o,a,i,u){var s=.5*(o+i),l=.5*(a+u),c=e>=s,f=r>=l,h=f<<1|c;t.leaf=!1,c?o=s:i=s,f?a=l:u=l,k(t=t.nodes[h]||(t.nodes[h]={leaf:!0,nodes:[],point:null,x:null,y:null}),n,e,r,o,a,i,u)}M>_?g=d+M:m=p+_;var A={leaf:!0,nodes:[],point:null,x:null,y:null,add:function(t){k(A,t,+v(t,++f),+y(t,f),p,d,m,g)},visit:function(t){Jo(t,A,p,d,m,g)},find:function(t){return $o(A,t[0],t[1],p,d,m,g)}};if(f=-1,null==n){for(;++f=0&&!(e=a.interpolators[r](t,n)););return e}function aa(t,n){var e,r=[],o=[],a=t.length,i=n.length,u=Math.min(t.length,n.length);for(e=0;e=1?1:t(n)}}function ca(t){return function(n){return 1-t(1-n)}}function fa(t){return function(n){return.5*(n<.5?t(2*n):2-t(2-2*n))}}function ha(t){return t*t}function pa(t){return t*t*t}function da(t){if(t<=0)return 0;if(t>=1)return 1;var n=t*t,e=n*t;return 4*(t<.5?e:3*(t-n)+e-.75)}function ma(t){return 1-Math.cos(t*Ct)}function ga(t){return Math.pow(2,10*(t-1))}function va(t){return 1-Math.sqrt(1-t*t)}function ya(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375}function ba(t,n){return n-=t,function(e){return Math.round(t+n*e)}}function xa(t){var n=[t.a,t.b],e=[t.c,t.d],r=wa(n),o=Ma(n,e),a=wa(function(t,n,e){return t[0]+=e*n[0],t[1]+=e*n[1],t}(e,n,-o))||0;n[0]*e[1]=0?t.slice(0,n):t,r=n>=0?t.slice(n+1):"in";return e=ua.get(e)||ia,la((r=sa.get(r)||L)(e.apply(null,i.call(arguments,1))))},a.interpolateHcl=function(t,n){t=a.hcl(t),n=a.hcl(n);var e=t.h,r=t.c,o=t.l,i=n.h-e,u=n.c-r,s=n.l-o;return isNaN(u)&&(u=0,r=isNaN(r)?n.c:r),isNaN(i)?(i=0,e=isNaN(e)?n.h:e):i>180?i-=360:i<-180&&(i+=360),function(t){return Kt(e+i*t,r+u*t,o+s*t)+""}},a.interpolateHsl=function(t,n){t=a.hsl(t),n=a.hsl(n);var e=t.h,r=t.s,o=t.l,i=n.h-e,u=n.s-r,s=n.l-o;return isNaN(u)&&(u=0,r=isNaN(r)?n.s:r),isNaN(i)?(i=0,e=isNaN(e)?n.h:e):i>180?i-=360:i<-180&&(i+=360),function(t){return Zt(e+i*t,r+u*t,o+s*t)+""}},a.interpolateLab=function(t,n){t=a.lab(t),n=a.lab(n);var e=t.l,r=t.a,o=t.b,i=n.l-e,u=n.a-r,s=n.b-o;return function(t){return en(e+i*t,r+u*t,o+s*t)+""}},a.interpolateRound=ba,a.transform=function(t){var n=s.createElementNS(a.ns.prefix.svg,"g");return(a.transform=function(t){if(null!=t){n.setAttribute("transform",t);var e=n.transform.baseVal.consolidate()}return new xa(e?e.matrix:_a)})(t)},xa.prototype.toString=function(){return"translate("+this.translate+")rotate("+this.rotate+")skewX("+this.skew+")scale("+this.scale+")"};var _a={a:1,b:0,c:0,d:1,e:0,f:0};function ka(t){return t.length?t.pop()+",":""}function Sa(t,n){var e=[],r=[];return t=a.transform(t),n=a.transform(n),function(t,n,e,r){if(t[0]!==n[0]||t[1]!==n[1]){var o=e.push("translate(",null,",",null,")");r.push({i:o-4,x:ta(t[0],n[0])},{i:o-2,x:ta(t[1],n[1])})}else(n[0]||n[1])&&e.push("translate("+n+")")}(t.translate,n.translate,e,r),function(t,n,e,r){t!==n?(t-n>180?n+=360:n-t>180&&(t+=360),r.push({i:e.push(ka(e)+"rotate(",null,")")-2,x:ta(t,n)})):n&&e.push(ka(e)+"rotate("+n+")")}(t.rotate,n.rotate,e,r),function(t,n,e,r){t!==n?r.push({i:e.push(ka(e)+"skewX(",null,")")-2,x:ta(t,n)}):n&&e.push(ka(e)+"skewX("+n+")")}(t.skew,n.skew,e,r),function(t,n,e,r){if(t[0]!==n[0]||t[1]!==n[1]){var o=e.push(ka(e)+"scale(",null,",",null,")");r.push({i:o-4,x:ta(t[0],n[0])},{i:o-2,x:ta(t[1],n[1])})}else 1===n[0]&&1===n[1]||e.push(ka(e)+"scale("+n+")")}(t.scale,n.scale,e,r),t=n=null,function(t){for(var n,o=-1,a=r.length;++o0?e=n:(t.c=null,t.t=NaN,t=null,s.end({type:"end",alpha:e=0})):n>0&&(s.start({type:"start",alpha:e=n}),t=En(u.tick)),u):e},u.start=function(){var t,n,e,a=v.length,s=y.length,c=l[0],d=l[1];for(t=0;t=0;)e.push(o[r])}function qa(t,n){for(var e=[t],r=[];null!=(t=e.pop());)if(r.push(t),(a=t.children)&&(o=a.length))for(var o,a,i=-1;++i=0;)i.push(c=l[s]),c.parent=a,c.depth=a.depth+1;e&&(a.value=0),a.children=l}else e&&(a.value=+e.call(r,a,a.depth)||0),delete a.children;return qa(o,(function(n){var r,o;t&&(r=n.children)&&r.sort(t),e&&(o=n.parent)&&(o.value+=n.value)})),u}return r.sort=function(n){return arguments.length?(t=n,r):t},r.children=function(t){return arguments.length?(n=t,r):n},r.value=function(t){return arguments.length?(e=t,r):e},r.revalue=function(t){return e&&(za(t,(function(t){t.children&&(t.value=0)})),qa(t,(function(t){var n;t.children||(t.value=+e.call(r,t,t.depth)||0),(n=t.parent)&&(n.value+=t.value)}))),t},r},a.layout.partition=function(){var t=a.layout.hierarchy(),n=[1,1];function e(e,r){var o=t.call(this,e,r);return function t(n,e,r,o){var a=n.children;if(n.x=e,n.y=n.depth*o,n.dx=r,n.dy=o,a&&(i=a.length)){var i,u,s,l=-1;for(r=n.value?r/n.value:0;++lu&&(u=r),i.push(r)}for(e=0;eo&&(r=e,o=n);return r}function Qa(t){return t.reduce(ti,0)}function ti(t,n){return t+n[1]}function ni(t,n){return ei(t,Math.ceil(Math.log(n.length)/Math.LN2+1))}function ei(t,n){for(var e=-1,r=+t[0],o=(t[1]-r)/n,a=[];++e<=n;)a[e]=o*e+r;return a}function ri(t){return[a.min(t),a.max(t)]}function oi(t,n){return t.value-n.value}function ai(t,n){var e=t._pack_next;t._pack_next=n,n._pack_prev=t,n._pack_next=e,e._pack_prev=n}function ii(t,n){t._pack_next=n,n._pack_prev=t}function ui(t,n){var e=n.x-t.x,r=n.y-t.y,o=t.r+n.r;return.999*o*o>e*e+r*r}function si(t){if((n=t.children)&&(s=n.length)){var n,e,r,o,a,i,u,s,l=1/0,c=-1/0,f=1/0,h=-1/0;if(n.forEach(li),(e=n[0]).x=-e.r,e.y=0,b(e),s>1&&((r=n[1]).x=r.r,r.y=0,b(r),s>2))for(fi(e,r,o=n[2]),b(o),ai(e,o),e._pack_prev=o,ai(o,r),r=e._pack_next,a=3;a0)for(i=-1;++i=f[0]&&s<=f[1]&&((u=l[a.bisect(h,s,1,d)-1]).y+=m,u.push(o[i]));return l}return o.value=function(t){return arguments.length?(n=t,o):n},o.range=function(t){return arguments.length?(e=bn(t),o):e},o.bins=function(t){return arguments.length?(r="number"==typeof t?function(n){return ei(n,t)}:bn(t),o):r},o.frequency=function(n){return arguments.length?(t=!!n,o):t},o},a.layout.pack=function(){var t,n=a.layout.hierarchy().sort(oi),e=0,r=[1,1];function o(o,a){var i=n.call(this,o,a),u=i[0],s=r[0],l=r[1],c=null==t?Math.sqrt:"function"==typeof t?t:function(){return t};if(u.x=u.y=0,qa(u,(function(t){t.r=+c(t.value)})),qa(u,si),e){var f=e*(t?1:Math.max(2*u.r/s,2*u.r/l))/2;qa(u,(function(t){t.r+=f})),qa(u,si),qa(u,(function(t){t.r-=f}))}return function t(n,e,r,o){var a=n.children;if(n.x=e+=o*n.x,n.y=r+=o*n.y,n.r*=o,a)for(var i=-1,u=a.length;++ip.x&&(p=t),t.depth>d.depth&&(d=t)}));var m=n(h,p)/2-h.x,g=e[0]/(p.x+n(p,h)/2+m),v=e[1]/(d.depth||1);za(c,(function(t){t.x=(t.x+m)*g,t.y=t.depth*v}))}return l}function i(t){var e=t.children,r=t.parent.children,o=t.i?r[t.i-1]:null;if(e.length){!function(t){for(var n,e=0,r=0,o=t.children,a=o.length;--a>=0;)(n=o[a]).z+=e,n.m+=e,e+=n.s+(r+=n.c)}(t);var a=(e[0].z+e[e.length-1].z)/2;o?(t.z=o.z+n(t._,o._),t.m=t.z-a):t.z=a}else o&&(t.z=o.z+n(t._,o._));t.parent.A=function(t,e,r){if(e){for(var o,a=t,i=t,u=e,s=a.parent.children[0],l=a.m,c=i.m,f=u.m,h=s.m;u=di(u),a=pi(a),u&&a;)s=pi(s),(i=di(i)).a=t,(o=u.z+f-a.z-l+n(u._,a._))>0&&(mi(gi(u,t,r),t,o),l+=o,c+=o),f+=u.m,l+=a.m,h+=s.m,c+=i.m;u&&!di(i)&&(i.t=u,i.m+=f-c),a&&!pi(s)&&(s.t=a,s.m+=l-h,r=t)}return r}(t,o,t.parent.A||r[0])}function u(t){t._.x=t.z+t.parent.m,t.m+=t.parent.m}function s(t){t.x*=e[0],t.y=t.depth*e[1]}return o.separation=function(t){return arguments.length?(n=t,o):n},o.size=function(t){return arguments.length?(r=null==(e=t)?s:null,o):r?null:e},o.nodeSize=function(t){return arguments.length?(r=null==(e=t)?null:s,o):r?e:null},ja(o,t)},a.layout.cluster=function(){var t=a.layout.hierarchy().sort(null).value(null),n=hi,e=[1,1],r=!1;function o(o,i){var u,s=t.call(this,o,i),l=s[0],c=0;qa(l,(function(t){var e=t.children;e&&e.length?(t.x=function(t){return t.reduce((function(t,n){return t+n.x}),0)/t.length}(e),t.y=function(t){return 1+a.max(t,(function(t){return t.y}))}(e)):(t.x=u?c+=n(t,u):0,t.y=0,u=t)}));var f=function t(n){var e=n.children;return e&&e.length?t(e[0]):n}(l),h=function t(n){var e,r=n.children;return r&&(e=r.length)?t(r[e-1]):n}(l),p=f.x-n(f,h)/2,d=h.x+n(h,f)/2;return qa(l,r?function(t){t.x=(t.x-l.x)*e[0],t.y=(l.y-t.y)*e[1]}:function(t){t.x=(t.x-p)/(d-p)*e[0],t.y=(1-(l.y?t.y/l.y:1))*e[1]}),s}return o.separation=function(t){return arguments.length?(n=t,o):n},o.size=function(t){return arguments.length?(r=null==(e=t),o):r?null:e},o.nodeSize=function(t){return arguments.length?(r=null!=(e=t),o):r?e:null},ja(o,t)},a.layout.treemap=function(){var t,n=a.layout.hierarchy(),e=Math.round,r=[1,1],o=null,i=vi,u=!1,s="squarify",l=.5*(1+Math.sqrt(5));function c(t,n){for(var e,r,o=-1,a=t.length;++o0;)u.push(e=l[o-1]),u.area+=e.area,"squarify"!==s||(r=p(u,m))<=h?(l.pop(),h=r):(u.area-=u.pop().area,d(u,m,a,!1),m=Math.min(a.dx,a.dy),u.length=u.area=0,h=1/0);u.length&&(d(u,m,a,!0),u.length=u.area=0),n.forEach(f)}}function h(t){var n=t.children;if(n&&n.length){var e,r=i(t),o=n.slice(),a=[];for(c(o,r.dx*r.dy/t.value),a.area=0;e=o.pop();)a.push(e),a.area+=e.area,null!=e.z&&(d(a,e.z?r.dx:r.dy,r,!o.length),a.length=a.area=0);n.forEach(h)}}function p(t,n){for(var e,r=t.area,o=0,a=1/0,i=-1,u=t.length;++io&&(o=e));return n*=n,(r*=r)?Math.max(n*o*l/r,r/(n*a*l)):1/0}function d(t,n,r,o){var a,i=-1,u=t.length,s=r.x,l=r.y,c=n?e(t.area/n):0;if(n==r.dx){for((o||c>r.dy)&&(c=r.dy);++ir.dx)&&(c=r.dx);++i1);return t+n*e*Math.sqrt(-2*Math.log(o)/o)}},logNormal:function(){var t=a.random.normal.apply(a,arguments);return function(){return Math.exp(t())}},bates:function(t){var n=a.random.irwinHall(t);return function(){return n()/t}},irwinHall:function(t){return function(){for(var n=0,e=0;e2?Si:Mi,u=o?Ea:Aa;return a=t(n,e,u,r),i=t(e,n,u,oa),s}function s(t){return a(t)}return s.invert=function(t){return i(t)},s.domain=function(t){return arguments.length?(n=t.map(Number),u()):n},s.range=function(t){return arguments.length?(e=t,u()):e},s.rangeRound=function(t){return s.range(t).interpolate(ba)},s.clamp=function(t){return arguments.length?(o=t,u()):o},s.interpolate=function(t){return arguments.length?(r=t,u()):r},s.ticks=function(t){return Ri(n,t)},s.tickFormat=function(t,e){return Pi(n,t,e)},s.nice=function(t){return Ei(n,t),u()},s.copy=function(){return t(n,e,r,o)},u()}([0,1],[0,1],oa,!1)};var Ni={s:1,g:1,p:1,r:1,e:1};function Oi(t){return-Math.floor(Math.log(t)/Math.LN10+.01)}a.scale.log=function(){return function t(n,e,r,o){function i(t){return(r?Math.log(t<0?0:t):-Math.log(t>0?0:-t))/Math.log(e)}function u(t){return r?Math.pow(e,t):-Math.pow(e,-t)}function s(t){return n(i(t))}return s.invert=function(t){return u(n.invert(t))},s.domain=function(t){return arguments.length?(r=t[0]>=0,n.domain((o=t.map(Number)).map(i)),s):o},s.base=function(t){return arguments.length?(e=+t,n.domain(o.map(i)),s):e},s.nice=function(){var t=wi(o.map(i),r?Math:Li);return n.domain(t),o=t.map(u),s},s.ticks=function(){var t=bi(o),n=[],a=t[0],s=t[1],l=Math.floor(i(a)),c=Math.ceil(i(s)),f=e%1?2:e;if(isFinite(c-l)){if(r){for(;l0;h--)n.push(u(l)*h);for(l=0;n[l]s;c--);n=n.slice(l,c)}return n},s.tickFormat=function(t,n){if(!arguments.length)return Ci;arguments.length<2?n=Ci:"function"!=typeof n&&(n=a.format(n));var r=Math.max(1,e*t/s.ticks().length);return function(t){var o=t/u(Math.round(i(t)));return o*e0?r[t-1]:n[0],tf?0:1;if(l=Ot)return s(l,p)+(u?s(u,1-p):"")+"Z";var d,m,g,v,y,b,x,M,w,_,k,S,A=0,E=0,T=[];if((v=(+i.apply(this,arguments)||0)/2)&&(g=r===Bi?Math.sqrt(u*u+l*l):+r.apply(this,arguments),p||(E*=-1),l&&(E=qt(g/l*Math.sin(v))),u&&(A=qt(g/u*Math.sin(v)))),l){y=l*Math.cos(c+E),b=l*Math.sin(c+E),x=l*Math.cos(f-E),M=l*Math.sin(f-E);var R=Math.abs(f-c-2*E)<=Pt?0:1;if(E&&Gi(y,b,x,M)===p^R){var P=(c+f)/2;y=l*Math.cos(P),b=l*Math.sin(P),x=M=null}}else y=b=0;if(u){w=u*Math.cos(f-A),_=u*Math.sin(f-A),k=u*Math.cos(c+A),S=u*Math.sin(c+A);var N=Math.abs(c-f+2*A)<=Pt?0:1;if(A&&Gi(w,_,k,S)===1-p^N){var O=(c+f)/2;w=u*Math.cos(O),_=u*Math.sin(O),k=S=null}}else w=_=0;if(h>Tt&&(d=Math.min(Math.abs(l-u)/2,+e.apply(this,arguments)))>.001){m=u0?0:1}function Wi(t,n,e,r,o){var a=t[0]-n[0],i=t[1]-n[1],u=(o?r:-r)/Math.sqrt(a*a+i*i),s=u*i,l=-u*a,c=t[0]+s,f=t[1]+l,h=n[0]+s,p=n[1]+l,d=(c+h)/2,m=(f+p)/2,g=h-c,v=p-f,y=g*g+v*v,b=e-r,x=c*p-h*f,M=(v<0?-1:1)*Math.sqrt(Math.max(0,b*b*y-x*x)),w=(x*v-g*M)/y,_=(-x*g-v*M)/y,k=(x*v+g*M)/y,S=(-x*g+v*M)/y,A=w-d,E=_-m,T=k-d,R=S-m;return A*A+E*E>T*T+R*R&&(w=k,_=S),[[w-s,_-l],[w*e/b,_*e/b]]}function Zi(t){var n=io,e=uo,r=$e,o=$i,a=o.key,i=.7;function u(a){var u,s=[],l=[],c=-1,f=a.length,h=bn(n),p=bn(e);function d(){s.push("M",o(t(l),i))}for(;++c1&&o.push("H",r[0]),o.join("")},"step-before":Qi,"step-after":tu,basis:ru,"basis-open":function(t){if(t.length<4)return $i(t);for(var n,e=[],r=-1,o=t.length,a=[0],i=[0];++r<3;)n=t[r],a.push(n[0]),i.push(n[1]);for(e.push(ou(uu,a)+","+ou(uu,i)),--r;++r9&&(o=3*n/Math.sqrt(o),i[u]=o*e,i[u+1]=o*r));for(u=-1;++u<=s;)o=(t[Math.min(s,u+1)][0]-t[Math.max(0,u-1)][0])/(6*(1+i[u]*i[u])),a.push([o||0,i[u]*o||0]);return a}(t))}});function $i(t){return t.length>1?t.join("L"):t+"Z"}function Ki(t){return t.join("L")+"Z"}function Qi(t){for(var n=0,e=t.length,r=t[0],o=[r[0],",",r[1]];++n1){u=n[1],a=t[s],s++,r+="C"+(o[0]+i[0])+","+(o[1]+i[1])+","+(a[0]-u[0])+","+(a[1]-u[1])+","+a[0]+","+a[1];for(var l=2;lPt)+",1 "+n}function s(t,n,e,r){return"Q 0,0 "+r}return a.radius=function(t){return arguments.length?(e=bn(t),a):e},a.source=function(n){return arguments.length?(t=bn(n),a):t},a.target=function(t){return arguments.length?(n=bn(t),a):n},a.startAngle=function(t){return arguments.length?(r=bn(t),a):r},a.endAngle=function(t){return arguments.length?(o=bn(t),a):o},a},a.svg.diagonal=function(){var t=Hr,n=Gr,e=pu;function r(r,o){var a=t.call(this,r,o),i=n.call(this,r,o),u=(a.y+i.y)/2,s=[a,{x:a.x,y:u},{x:i.x,y:u},i];return"M"+(s=s.map(e))[0]+"C"+s[1]+" "+s[2]+" "+s[3]}return r.source=function(n){return arguments.length?(t=bn(n),r):t},r.target=function(t){return arguments.length?(n=bn(t),r):n},r.projection=function(t){return arguments.length?(e=t,r):e},r},a.svg.diagonal.radial=function(){var t=a.svg.diagonal(),n=pu,e=t.projection;return t.projection=function(t){return arguments.length?e(du(n=t)):n},t},a.svg.symbol=function(){var t=gu,n=mu;function e(e,r){return(yu.get(t.call(this,e,r))||vu)(n.call(this,e,r))}return e.type=function(n){return arguments.length?(t=bn(n),e):t},e.size=function(t){return arguments.length?(n=bn(t),e):n},e};var yu=a.map({circle:vu,cross:function(t){var n=Math.sqrt(t/5)/2;return"M"+-3*n+","+-n+"H"+-n+"V"+-3*n+"H"+n+"V"+-n+"H"+3*n+"V"+n+"H"+n+"V"+3*n+"H"+-n+"V"+n+"H"+-3*n+"Z"},diamond:function(t){var n=Math.sqrt(t/(2*xu)),e=n*xu;return"M0,"+-n+"L"+e+",0 0,"+n+" "+-e+",0Z"},square:function(t){var n=Math.sqrt(t)/2;return"M"+-n+","+-n+"L"+n+","+-n+" "+n+","+n+" "+-n+","+n+"Z"},"triangle-down":function(t){var n=Math.sqrt(t/bu),e=n*bu/2;return"M0,"+e+"L"+n+","+-e+" "+-n+","+-e+"Z"},"triangle-up":function(t){var n=Math.sqrt(t/bu),e=n*bu/2;return"M0,"+-e+"L"+n+","+e+" "+-n+","+e+"Z"}});a.svg.symbolTypes=yu.keys();var bu=Math.sqrt(3),xu=Math.tan(30*Lt);J.transition=function(t){for(var n,e,r=ku||++Eu,o=Pu(t),a=[],i=Su||{time:Date.now(),ease:da,delay:0,duration:250},u=-1,s=this.length;++u0;)l[--h].call(t,i);if(a>=1)return f.event&&f.event.end.call(t,t.__data__,n),--c.count?delete c[r]:delete t[e],1}f||(a=o.time,i=En((function(t){var n=f.delay;if(i.t=n+a,n<=t)return h(t-n);i.c=h}),0,a),f=c[r]={tween:new S,time:a,timer:i,delay:o.delay,duration:o.duration,ease:o.ease,index:n},o=null,++c.count)}Au.call=J.call,Au.empty=J.empty,Au.node=J.node,Au.size=J.size,a.transition=function(t,n){return t&&t.transition?ku?t.transition(n):t:a.selection().transition(t)},a.transition.prototype=Au,Au.select=function(t){var n,e,r,o=this.id,a=this.namespace,i=[];t=$(t);for(var u=-1,s=this.length;++urect,.s>rect").attr("width",i[1]-i[0])}function m(t){t.select(".extent").attr("y",u[0]),t.selectAll(".extent,.e>rect,.w>rect").attr("height",u[1]-u[0])}function g(){var f,g,v=this,y=a.select(a.event.target),b=e.of(v,arguments),x=a.select(v),M=y.datum(),w=!/^(n|s)$/.test(M)&&r,_=!/^(e|w)$/.test(M)&&o,k=y.classed("extent"),S=kt(v),A=a.mouse(v),E=a.select(c(v)).on("keydown.brush",P).on("keyup.brush",N);if(a.event.changedTouches?E.on("touchmove.brush",O).on("touchend.brush",L):E.on("mousemove.brush",O).on("mouseup.brush",L),x.interrupt().selectAll("*").interrupt(),k)A[0]=i[0]-A[0],A[1]=u[0]-A[1];else if(M){var T=+/w$/.test(M),R=+/^n/.test(M);g=[i[1-T]-A[0],u[1-R]-A[1]],A[0]=i[T],A[1]=u[R]}else a.event.altKey&&(f=A.slice());function P(){32==a.event.keyCode&&(k||(f=null,A[0]-=i[1],A[1]-=u[1],k=2),B())}function N(){32==a.event.keyCode&&2==k&&(A[0]+=i[1],A[1]+=u[1],k=0,B())}function O(){var t=a.mouse(v),n=!1;g&&(t[0]+=g[0],t[1]+=g[1]),k||(a.event.altKey?(f||(f=[(i[0]+i[1])/2,(u[0]+u[1])/2]),A[0]=i[+(t[0]1?{floor:function(n){for(;u(n=t.floor(n));)n=Xu(n-1);return n},ceil:function(n){for(;u(n=t.ceil(n));)n=Xu(+n+1);return n}}:t))},r.ticks=function(t,n){var e=bi(r.domain()),a=null==t?o(e,10):"number"==typeof t?o(e,t):!t.range&&[{range:t},n];return a&&(t=a[0],n=a[1]),t.range(e[0],Xu(+e[1]+1),n<1?1:n)},r.tickFormat=function(){return e},r.copy=function(){return Iu(t.copy(),n,e)},Ai(r,t)}function Xu(t){return new Date(t)}zu.iso=Date.prototype.toISOString&&+new Date("2000-01-01T00:00:00.000Z")?Bu:Fu,Bu.parse=function(t){var n=new Date(t);return isNaN(n)?null:n},Bu.toString=Fu.toString,jn.second=Bn((function(t){return new zn(1e3*Math.floor(t/1e3))}),(function(t,n){t.setTime(t.getTime()+1e3*Math.floor(n))}),(function(t){return t.getSeconds()})),jn.seconds=jn.second.range,jn.seconds.utc=jn.second.utc.range,jn.minute=Bn((function(t){return new zn(6e4*Math.floor(t/6e4))}),(function(t,n){t.setTime(t.getTime()+6e4*Math.floor(n))}),(function(t){return t.getMinutes()})),jn.minutes=jn.minute.range,jn.minutes.utc=jn.minute.utc.range,jn.hour=Bn((function(t){var n=t.getTimezoneOffset()/60;return new zn(36e5*(Math.floor(t/36e5-n)+n))}),(function(t,n){t.setTime(t.getTime()+36e5*Math.floor(n))}),(function(t){return t.getHours()})),jn.hours=jn.hour.range,jn.hours.utc=jn.hour.utc.range,jn.month=Bn((function(t){return(t=jn.day(t)).setDate(1),t}),(function(t,n){t.setMonth(t.getMonth()+n)}),(function(t){return t.getMonth()})),jn.months=jn.month.range,jn.months.utc=jn.month.utc.range;var Yu=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6],Vu=[[jn.second,1],[jn.second,5],[jn.second,15],[jn.second,30],[jn.minute,1],[jn.minute,5],[jn.minute,15],[jn.minute,30],[jn.hour,1],[jn.hour,3],[jn.hour,6],[jn.hour,12],[jn.day,1],[jn.day,2],[jn.week,1],[jn.month,1],[jn.month,3],[jn.year,1]],Hu=zu.multi([[".%L",function(t){return t.getMilliseconds()}],[":%S",function(t){return t.getSeconds()}],["%I:%M",function(t){return t.getMinutes()}],["%I %p",function(t){return t.getHours()}],["%a %d",function(t){return t.getDay()&&1!=t.getDate()}],["%b %d",function(t){return 1!=t.getDate()}],["%B",function(t){return t.getMonth()}],["%Y",$e]]),Gu={range:function(t,n,e){return a.range(Math.ceil(t/e)*e,+n,e).map(Xu)},floor:L,ceil:L};Vu.year=jn.year,jn.scale=function(){return Iu(a.scale.linear(),Vu,Hu)};var Wu=Vu.map((function(t){return[t[0].utc,t[1]]})),Zu=qu.multi([[".%L",function(t){return t.getUTCMilliseconds()}],[":%S",function(t){return t.getUTCSeconds()}],["%I:%M",function(t){return t.getUTCMinutes()}],["%I %p",function(t){return t.getUTCHours()}],["%a %d",function(t){return t.getUTCDay()&&1!=t.getUTCDate()}],["%b %d",function(t){return 1!=t.getUTCDate()}],["%B",function(t){return t.getUTCMonth()}],["%Y",$e]]);function Ju(t){return JSON.parse(t.responseText)}function $u(t){var n=s.createRange();return n.selectNode(s.body),n.createContextualFragment(t.responseText)}Wu.year=jn.year.utc,jn.scale.utc=function(){return Iu(a.scale.linear(),Wu,Zu)},a.text=xn((function(t){return t.responseText})),a.json=function(t,n){return Mn(t,"application/json",Ju,n)},a.html=function(t,n){return Mn(t,"text/html",$u,n)},a.xml=xn((function(t){return t.responseXML})),this.d3=a,void 0===(o="function"==typeof(r=a)?r.call(n,e,n,t):r)||(t.exports=o)}()}])},t.exports=o()},function(t,n,e){"use strict";var r=e(28);function o(){}t.exports=function(){function t(t,n,e,o,a,i){if(i!==r){var u=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw u.name="Invariant Violation",u}}function n(){return t}t.isRequired=t;var e={array:t,bool:t,func:t,number:t,object:t,string:t,symbol:t,any:t,arrayOf:n,element:t,instanceOf:n,node:t,objectOf:n,oneOf:n,oneOfType:n,shape:n,exact:n};return e.checkPropTypes=o,e.PropTypes=e,e}},function(t,n,e){"use strict";t.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},function(t,n,e){"use strict";var r=e(8),o=e(30),a=e(31),i=e(7),u=e(9),s=e(25),l=e(32);function c(t,n){return n=n.split("// __split__"),new o.Program(t,n[0],n[1])}t.exports=function(t,n,e){var f,h,p,d,m,g,v,y,b,x,M,w,_,k,S,A,E,T,R,P,N,O,C,L,U,D,j,z=this,q=null,F=null,B=null,I=null,X=null,Y=null,V=0,H=!1,G=!1;function W(t){p.viewport(0,0,e,e);var o=u.clone(t);o.zoom=1/f,o.translation.x=0,o.translation.y=0;for(var a=r.mat4.create(),i=0;i<3;i++){var s=r.vec3.random(r.vec3.create(),1);r.mat4.rotate(a,a,10*Math.random(),s)}o.rotation=r.mat4.multiply(r.mat4.create(),a,o.rotation),E.bind(),p.clear(p.COLOR_BUFFER_BIT|p.DEPTH_BUFFER_BIT);var l=u.getRect(o),c=r.mat4.create();r.mat4.ortho(c,l.left,l.right,l.bottom,l.top,0,f);var h=r.mat4.create();r.mat4.lookAt(h,[0,0,0],[0,0,-1],[0,1,0]);var d=r.mat4.create();r.mat4.translate(d,d,[0,0,-f/2]),r.mat4.multiply(d,d,o.rotation),N.setUniform("uProjection","Matrix4fv",!1,c),N.setUniform("uView","Matrix4fv",!1,h),N.setUniform("uModel","Matrix4fv",!1,d),N.setUniform("uBottomLeft","2fv",[l.left,l.bottom]),N.setUniform("uTopRight","2fv",[l.right,l.top]),N.setUniform("uAtomScale","1f",2.5*o.atomScale),N.setUniform("uRelativeAtomScale","1f",t.relativeAtomScale),N.setUniform("uRes","1f",e),N.setUniform("uDepth","1f",f),N.setUniform("uMode","1i",0),N.setUniform("uAtomShade","1f",t.atomShade),q.render(),t.bonds&&null!=F&&(O.setUniform("uProjection","Matrix4fv",!1,c),O.setUniform("uView","Matrix4fv",!1,h),O.setUniform("uModel","Matrix4fv",!1,d),O.setUniform("uRotation","Matrix4fv",!1,o.rotation),O.setUniform("uDepth","1f",f),O.setUniform("uBottomLeft","2fv",[l.left,l.bottom]),O.setUniform("uTopRight","2fv",[l.right,l.top]),O.setUniform("uRes","1f",e),O.setUniform("uBondRadius","1f",2.5*u.getBondRadius(t)),O.setUniform("uBondShade","1f",t.bondShade),O.setUniform("uAtomScale","1f",2.5*t.atomScale),O.setUniform("uRelativeAtomScale","1f",t.relativeAtomScale),O.setUniform("uMode","1i",0),F.render()),p.viewport(0,0,n,n);var y=u.getRect(t),x=u.getRect(o),M=r.mat4.invert(r.mat4.create(),a);T.bind(),p.clear(p.COLOR_BUFFER_BIT|p.DEPTH_BUFFER_BIT),C.setUniform("uSceneDepth","1i",g.index),C.setUniform("uSceneNormal","1i",m.index),C.setUniform("uRandRotDepth","1i",v.index),C.setUniform("uAccumulator","1i",b.index),C.setUniform("uSceneBottomLeft","2fv",[y.left,y.bottom]),C.setUniform("uSceneTopRight","2fv",[y.right,y.top]),C.setUniform("uRotBottomLeft","2fv",[x.left,x.bottom]),C.setUniform("uRotTopRight","2fv",[x.right,x.top]),C.setUniform("uRes","1f",n),C.setUniform("uDepth","1f",f),C.setUniform("uRot","Matrix4fv",!1,a),C.setUniform("uInvRot","Matrix4fv",!1,M),C.setUniform("uSampleCount","1i",V),B.render(),b.activate(),b.bind(),p.copyTexImage2D(p.TEXTURE_2D,0,p.RGBA,0,0,n,n,0)}z.getAOProgress=function(){return V/1024},z.initialize=function(){t.width=t.height=n,(p=t.getContext("webgl")).enable(p.DEPTH_TEST),p.enable(p.CULL_FACE),p.clearColor(0,0,0,0),p.clearDepth(1),p.viewport(0,0,n,n),window.gl=p,o.getExtensions(p,["EXT_frag_depth","WEBGL_depth_texture"]),z.createTextures(),N=c(p,l.shaders.atom),O=c(p,l.shaders.bond),j=c(p,l.shaders["textured-quad"]),C=c(p,l.shaders.accumulator),L=c(p,l.shaders.ao),U=c(p,l.shaders.fxaa),D=c(p,l.shaders.dof);var e=[-1,-1,0,1,-1,0,1,1,0,-1,-1,0,1,1,0,-1,1,0],r=o.buildAttribs(p,{aPosition:3});r.aPosition.buffer.set(new Float32Array(e));var a=e.length/9;new o.Renderable(p,j,r,a),B=new o.Renderable(p,C,r,a),I=new o.Renderable(p,L,r,a),Y=new o.Renderable(p,U,r,a),X=new o.Renderable(p,D,r,a),0},z.createTextures=function(){y=new o.Texture(p,0,null,e,e),v=new o.Texture(p,1,null,e,e,{internalFormat:p.DEPTH_COMPONENT,format:p.DEPTH_COMPONENT,type:p.UNSIGNED_SHORT}),E=new o.Framebuffer(p,[y],v),d=new o.Texture(p,2,null,n,n),m=new o.Texture(p,3,null,n,n),g=new o.Texture(p,4,null,n,n,{internalFormat:p.DEPTH_COMPONENT,format:p.DEPTH_COMPONENT,type:p.UNSIGNED_SHORT}),S=new o.Framebuffer(p,[d],g),A=new o.Framebuffer(p,[m],g),b=new o.Texture(p,5,null,n,n),x=new o.Texture(p,6,null,n,n),T=new o.Framebuffer(p,[x]),k=new o.Texture(p,7,null,n,n),P=new o.Framebuffer(p,[k]),M=new o.Texture(p,8,null,n,n),w=new o.Texture(p,9,null,n,n),R=new o.Framebuffer(p,[w]),_=new o.Texture(p,10,null,n,n),new o.Framebuffer(p,[_])},z.setResolution=function(r,o){e=o,n=r,t.width=t.height=n,p.viewport(0,0,n,n),z.createTextures()},z.setSystem=function(t,n){function e(t){for(var n=[],e=0;e<36;e++)n.push.apply(n,t);return n}h=t;for(var r=o.buildAttribs(p,{aImposter:3,aPosition:3,aRadius:1,aColor:3}),u=[],s=[],l=[],c=[],f=0;f0)){r=o.buildAttribs(p,{aImposter:3,aPosA:3,aPosB:3,aRadA:1,aRadB:1,aColA:3,aColB:3}),u=[];var v=[],y=[],b=[],x=[],M=[],w=[];for(f=0;fn.bondThreshold)break;u.push.apply(u,a.position),v.push.apply(v,e([_.posA.x,_.posA.y,_.posA.z])),y.push.apply(y,e([_.posB.x,_.posB.y,_.posB.z])),b.push.apply(b,e([_.radA])),x.push.apply(x,e([_.radB])),M.push.apply(M,e([_.colA.r,_.colA.g,_.colA.b])),w.push.apply(w,e([_.colB.r,_.colB.g,_.colB.b]))}r.aImposter.buffer.set(new Float32Array(u)),r.aPosA.buffer.set(new Float32Array(v)),r.aPosB.buffer.set(new Float32Array(y)),r.aRadA.buffer.set(new Float32Array(b)),r.aRadB.buffer.set(new Float32Array(x)),r.aColA.buffer.set(new Float32Array(M)),r.aColB.buffer.set(new Float32Array(w));g=u.length/9;F=new o.Renderable(p,O,r,g)}},z.reset=function(){V=0,H=!1,G=!1,b.reset(),x.reset()},z.render=function(t){if(void 0!==h&&null!=q){if(f=2*s.getRadius(h),H)if(G)for(var e=0;e1024);e++)W(t),V++;else!function(t){G=!0,p.viewport(0,0,n,n),A.bind(),p.clear(p.COLOR_BUFFER_BIT|p.DEPTH_BUFFER_BIT);var e=u.getRect(t),o=r.mat4.create();r.mat4.ortho(o,e.left,e.right,e.bottom,e.top,0,f);var a=r.mat4.create();r.mat4.lookAt(a,[0,0,0],[0,0,-1],[0,1,0]);var i=r.mat4.create();r.mat4.translate(i,i,[0,0,-f/2]),r.mat4.multiply(i,i,t.rotation),N.setUniform("uProjection","Matrix4fv",!1,o),N.setUniform("uView","Matrix4fv",!1,a),N.setUniform("uModel","Matrix4fv",!1,i),N.setUniform("uBottomLeft","2fv",[e.left,e.bottom]),N.setUniform("uTopRight","2fv",[e.right,e.top]),N.setUniform("uAtomScale","1f",2.5*t.atomScale),N.setUniform("uRelativeAtomScale","1f",t.relativeAtomScale),N.setUniform("uRes","1f",n),N.setUniform("uDepth","1f",f),N.setUniform("uMode","1i",1),N.setUniform("uAtomShade","1f",t.atomShade),q.render(),t.bonds&&null!=F&&(A.bind(),O.setUniform("uProjection","Matrix4fv",!1,o),O.setUniform("uView","Matrix4fv",!1,a),O.setUniform("uModel","Matrix4fv",!1,i),O.setUniform("uRotation","Matrix4fv",!1,t.rotation),O.setUniform("uDepth","1f",f),O.setUniform("uBottomLeft","2fv",[e.left,e.bottom]),O.setUniform("uTopRight","2fv",[e.right,e.top]),O.setUniform("uRes","1f",n),O.setUniform("uBondRadius","1f",2.5*u.getBondRadius(t)),O.setUniform("uBondShade","1f",t.bondShade),O.setUniform("uAtomScale","1f",2.5*t.atomScale),O.setUniform("uRelativeAtomScale","1f",t.relativeAtomScale),O.setUniform("uMode","1i",1),F.render())}(t);else!function(t){H=!0,p.viewport(0,0,n,n),S.bind(),p.clear(p.COLOR_BUFFER_BIT|p.DEPTH_BUFFER_BIT);var e=u.getRect(t),o=r.mat4.create();r.mat4.ortho(o,e.left,e.right,e.bottom,e.top,0,f);var a=r.mat4.create();r.mat4.lookAt(a,[0,0,0],[0,0,-1],[0,1,0]);var i=r.mat4.create();r.mat4.translate(i,i,[0,0,-f/2]),r.mat4.multiply(i,i,t.rotation),N.setUniform("uProjection","Matrix4fv",!1,o),N.setUniform("uView","Matrix4fv",!1,a),N.setUniform("uModel","Matrix4fv",!1,i),N.setUniform("uBottomLeft","2fv",[e.left,e.bottom]),N.setUniform("uTopRight","2fv",[e.right,e.top]),N.setUniform("uAtomScale","1f",2.5*t.atomScale),N.setUniform("uRelativeAtomScale","1f",t.relativeAtomScale),N.setUniform("uRes","1f",n),N.setUniform("uDepth","1f",f),N.setUniform("uMode","1i",0),N.setUniform("uAtomShade","1f",t.atomShade),q.render(),t.bonds&&null!=F&&(S.bind(),O.setUniform("uProjection","Matrix4fv",!1,o),O.setUniform("uView","Matrix4fv",!1,a),O.setUniform("uModel","Matrix4fv",!1,i),O.setUniform("uRotation","Matrix4fv",!1,t.rotation),O.setUniform("uDepth","1f",f),O.setUniform("uBottomLeft","2fv",[e.left,e.bottom]),O.setUniform("uTopRight","2fv",[e.right,e.top]),O.setUniform("uRes","1f",n),O.setUniform("uBondRadius","1f",2.5*u.getBondRadius(t)),O.setUniform("uBondShade","1f",t.bondShade),O.setUniform("uAtomScale","1f",2.5*t.atomScale),O.setUniform("uRelativeAtomScale","1f",t.relativeAtomScale),O.setUniform("uMode","1i",0),F.render())}(t);!function(t){p.viewport(0,0,n,n),t.fxaa>0||t.dofStrength>0?P.bind():p.bindFramebuffer(p.FRAMEBUFFER,null);if(p.clear(p.COLOR_BUFFER_BIT|p.DEPTH_BUFFER_BIT),L.setUniform("uSceneColor","1i",d.index),L.setUniform("uSceneDepth","1i",g.index),L.setUniform("uAccumulatorOut","1i",x.index),L.setUniform("uRes","1f",n),L.setUniform("uAO","1f",2*t.ao),L.setUniform("uBrightness","1f",2*t.brightness),L.setUniform("uOutlineStrength","1f",t.outline),I.render(),t.fxaa>0){t.dofStrength>0?R.bind():p.bindFramebuffer(p.FRAMEBUFFER,null);for(var e=0;e0&&(p.bindFramebuffer(p.FRAMEBUFFER,null),p.clear(p.COLOR_BUFFER_BIT|p.DEPTH_BUFFER_BIT),t.fxaa>0?D.setUniform("uColor","1i",M.index):D.setUniform("uColor","1i",k.index),D.setUniform("uDepth","1i",g.index),D.setUniform("uDOFPosition","1f",t.dofPosition),D.setUniform("uDOFStrength","1f",t.dofStrength),D.setUniform("uRes","1f",n),X.render())}(t)}},z.initialize()}},function(t,n){function e(t){var n=this;n.initialize=function(){n.buffer=t.createBuffer()},n.bind=function(){t.bindBuffer(t.ARRAY_BUFFER,n.buffer)},n.set=function(e){n.bind(),t.bufferData(t.ARRAY_BUFFER,e,t.STATIC_DRAW)},n.initialize()}t.exports.buildAttribs=function(t,n){var r={};for(var o in n)r[o]={buffer:new e(t),size:n[o]};return r},t.exports.getExtensions=function(t,n){for(var e={},r=0;r1){for(var a=[],i=0;i 0.0) {\n float depth = texture2D(uSceneDepth, p).r;\n float r = 1.0/511.0;\n float d0 = abs(texture2D(uSceneDepth, p + vec2(-r, 0)).r - depth);\n float d1 = abs(texture2D(uSceneDepth, p + vec2( r, 0)).r - depth);\n float d2 = abs(texture2D(uSceneDepth, p + vec2( 0, -r)).r - depth);\n float d3 = abs(texture2D(uSceneDepth, p + vec2( 0, r)).r - depth);\n float d = max(d0, d1);\n d = max(d, d2);\n d = max(d, d3);\n sceneColor.rgb *= pow(1.0 - d, uOutlineStrength * 32.0);\n sceneColor.a = max(step(0.003, d), sceneColor.a);\n }\n vec4 dAccum = texture2D(uAccumulatorOut, p);\n float shade = max(0.0, 1.0 - (dAccum.r + dAccum.g + dAccum.b + dAccum.a) * 0.25 * uAO);\n shade = pow(shade, 2.0);\n gl_FragColor = vec4(uBrightness * sceneColor.rgb * shade, sceneColor.a);\n}\n",atom:"#version 100\nprecision highp float;\n\nattribute vec3 aImposter;\nattribute vec3 aPosition;\nattribute float aRadius;\nattribute vec3 aColor;\n\nuniform mat4 uView;\nuniform mat4 uProjection;\nuniform mat4 uModel;\nuniform float uAtomScale;\nuniform float uRelativeAtomScale;\nuniform float uAtomShade;\n\nvarying vec3 vColor;\nvarying vec3 vPosition;\nvarying float vRadius;\n\nvoid main() {\n vRadius = uAtomScale * (1.0 + (aRadius - 1.0) * uRelativeAtomScale);\n gl_Position = uProjection * uView * uModel * vec4(vRadius * aImposter + aPosition, 1.0);\n vColor = mix(aColor, vec3(1,1,1), uAtomShade);\n vPosition = vec3(uModel * vec4(aPosition, 1));\n}\n\n\n// __split__\n\n\n#version 100\n#extension GL_EXT_frag_depth: enable\nprecision highp float;\n\nuniform vec2 uBottomLeft;\nuniform vec2 uTopRight;\nuniform float uRes;\nuniform float uDepth;\nuniform int uMode;\n\nvarying vec3 vPosition;\nvarying float vRadius;\nvarying vec3 vColor;\n\nvec2 res = vec2(uRes, uRes);\n\nfloat raySphereIntersect(vec3 r0, vec3 rd) {\n float a = dot(rd, rd);\n vec3 s0_r0 = r0 - vPosition;\n float b = 2.0 * dot(rd, s0_r0);\n float c = dot(s0_r0, s0_r0) - (vRadius * vRadius);\n float disc = b*b - 4.0*a*c;\n if (disc <= 0.0) {\n return -1.0;\n }\n return (-b - sqrt(disc))/(2.0*a);\n}\n\nvoid main() {\n vec3 r0 = vec3(uBottomLeft + (gl_FragCoord.xy/res) * (uTopRight - uBottomLeft), 0.0);\n vec3 rd = vec3(0, 0, -1);\n float t = raySphereIntersect(r0, rd);\n if (t < 0.0) {\n discard;\n }\n vec3 coord = r0 + rd * t;\n vec3 normal = normalize(coord - vPosition);\n if (uMode == 0) {\n gl_FragColor = vec4(vColor, 1);\n } else if (uMode == 1) {\n gl_FragColor = vec4(normal * 0.5 + 0.5, 1.0);\n }\n gl_FragDepthEXT = -coord.z/uDepth;\n}\n",blur:"#version 100\nprecision highp float;\n\nattribute vec3 aPosition;\n\nvoid main() {\n gl_Position = vec4(aPosition, 1);\n}\n\n\n// __split__\n\n\n#version 100\nprecision highp float;\n\nuniform sampler2D uTexture;\nuniform float uRes;\nuniform int leftRight;\n\nvoid main() {\n vec2 dir;\n if (leftRight == 1) {\n dir = vec2(1,0)/uRes;\n } else {\n dir = vec2(0,1)/uRes;\n }\n const int range = 16;\n vec4 sample = vec4(0,0,0,0);\n for (int i = -range; i <= range; i++) {\n vec2 p = gl_FragCoord.xy/uRes + dir * float(i);\n sample += texture2D(uTexture, p);\n }\n sample /= float(range) * 2.0 + 1.0;\n gl_FragColor = sample;\n}\n",bond:"#version 100\nprecision highp float;\n\nattribute vec3 aImposter;\nattribute vec3 aPosA;\nattribute vec3 aPosB;\nattribute float aRadA;\nattribute float aRadB;\nattribute vec3 aColA;\nattribute vec3 aColB;\n\nuniform mat4 uView;\nuniform mat4 uProjection;\nuniform mat4 uModel;\nuniform mat4 uRotation;\nuniform float uBondRadius;\nuniform float uAtomScale;\nuniform float uRelativeAtomScale;\n\nvarying vec3 vNormal;\nvarying vec3 vPosA, vPosB;\nvarying float vRadA, vRadB;\nvarying vec3 vColA, vColB;\nvarying float vRadius;\n\nmat3 alignVector(vec3 a, vec3 b) {\n vec3 v = cross(a, b);\n float s = length(v);\n float c = dot(a, b);\n mat3 I = mat3(\n 1, 0, 0,\n 0, 1, 0,\n 0, 0, 1\n );\n mat3 vx = mat3(\n 0, v.z, -v.y,\n -v.z, 0, v.x,\n v.y, -v.x, 0\n );\n return I + vx + vx * vx * ((1.0 - c) / (s * s));\n}\n\nvoid main() {\n vRadius = uBondRadius;\n vec3 pos = vec3(aImposter);\n // Scale the box in x and z to be bond-radius.\n pos = pos * vec3(vRadius, 1, vRadius);\n // Shift the origin-centered cube so that the bottom is at the origin.\n pos = pos + vec3(0, 1, 0);\n // Stretch the box in y so that it is the length of the bond.\n pos = pos * vec3(1, length(aPosA - aPosB) * 0.5, 1);\n // Find the rotation that aligns vec3(0, 1, 0) with vec3(uPosB - uPosA) and apply it.\n vec3 a = normalize(vec3(-0.000001, 1.000001, 0.000001));\n vec3 b = normalize(aPosB - aPosA);\n mat3 R = alignVector(a, b);\n pos = R * pos;\n // Shift the cube so that the bottom is centered at the middle of atom A.\n pos = pos + aPosA;\n\n vec4 position = uModel * vec4(pos, 1);\n gl_Position = uProjection * uView * position;\n vPosA = aPosA;\n vPosB = aPosB;\n vRadA = uAtomScale * (1.0 + (aRadA - 1.0) * uRelativeAtomScale);\n vRadB = uAtomScale * (1.0 + (aRadB - 1.0) * uRelativeAtomScale);\n vColA = aColA;\n vColB = aColB;\n}\n\n\n// __split__\n\n\n#version 100\n#extension GL_EXT_frag_depth: enable\nprecision highp float;\n\nuniform mat4 uRotation;\nuniform vec2 uBottomLeft;\nuniform vec2 uTopRight;\nuniform float uDepth;\nuniform float uRes;\nuniform float uBondShade;\nuniform int uMode;\n\nvarying vec3 vPosA, vPosB;\nvarying float vRadA, vRadB;\nvarying vec3 vColA, vColB;\nvarying float vRadius;\n\nmat3 alignVector(vec3 a, vec3 b) {\n vec3 v = cross(a, b);\n float s = length(v);\n float c = dot(a, b);\n mat3 I = mat3(\n 1, 0, 0,\n 0, 1, 0,\n 0, 0, 1\n );\n mat3 vx = mat3(\n 0, v.z, -v.y,\n -v.z, 0, v.x,\n v.y, -v.x, 0\n );\n return I + vx + vx * vx * ((1.0 - c) / (s * s));\n}\n\nvoid main() {\n\n vec2 res = vec2(uRes, uRes);\n vec3 r0 = vec3(uBottomLeft + (gl_FragCoord.xy/res) * (uTopRight - uBottomLeft), uDepth/2.0);\n vec3 rd = vec3(0, 0, -1);\n\n vec3 i = normalize(vPosB - vPosA);\n i = vec3(uRotation * vec4(i, 0));\n vec3 j = normalize(vec3(-0.000001, 1.000001, 0.000001));\n mat3 R = alignVector(i, j);\n\n vec3 r0p = r0 - vec3(uRotation * vec4(vPosA, 0));\n r0p = R * r0p;\n vec3 rdp = R * rd;\n\n float a = dot(rdp.xz, rdp.xz);\n float b = 2.0 * dot(rdp.xz, r0p.xz);\n float c = dot(r0p.xz, r0p.xz) - vRadius*vRadius;\n float disc = b*b - 4.0*a*c;\n if (disc <= 0.0) {\n discard;\n }\n float t = (-b - sqrt(disc))/(2.0*a);\n if (t < 0.0) {\n discard;\n }\n\n vec3 coord = r0p + rdp * t;\n if (coord.y < 0.0 || coord.y > length(vPosA - vPosB)) {\n discard;\n }\n\n vec3 color;\n if (coord.y < vRadA + 0.5 * (length(vPosA - vPosB) - (vRadA + vRadB))) {\n color = vColA;\n } else {\n color = vColB;\n }\n\n color = mix(color, vec3(1,1,1), uBondShade);\n\n R = alignVector(j, i);\n vec3 normal = normalize(R * vec3(coord.x, 0, coord.z));\n\n coord = r0 + rd * t;\n if (uMode == 0) {\n gl_FragColor = vec4(color, 1);\n } else if (uMode == 1) {\n gl_FragColor = vec4(normal * 0.5 + 0.5, 1.0);\n }\n gl_FragDepthEXT = -(coord.z - uDepth/2.0)/uDepth;\n}\n",dof:"#version 100\nprecision highp float;\n\nattribute vec3 aPosition;\n\nvoid main() {\n gl_Position = vec4(aPosition, 1);\n}\n\n\n// __split__\n\n\n#version 100\nprecision highp float;\n\nuniform sampler2D uColor;\nuniform sampler2D uDepth;\nuniform float uRes;\nuniform float uDOFPosition;\nuniform float uDOFStrength;\nuniform int leftRight;\n\nvoid main() {\n\n vec2 samples[64];\n samples[0] = vec2(0.857612, 0.019885);\n samples[1] = vec2(0.563809, -0.028071);\n samples[2] = vec2(0.825599, -0.346856);\n samples[3] = vec2(0.126584, -0.380959);\n samples[4] = vec2(0.782948, 0.594322);\n samples[5] = vec2(0.292148, -0.543265);\n samples[6] = vec2(0.130700, 0.330220);\n samples[7] = vec2(0.236088, 0.159604);\n samples[8] = vec2(-0.305259, 0.810505);\n samples[9] = vec2(0.269616, 0.923026);\n samples[10] = vec2(0.484486, 0.371845);\n samples[11] = vec2(-0.638057, 0.080447);\n samples[12] = vec2(0.199629, 0.667280);\n samples[13] = vec2(-0.861043, -0.370583);\n samples[14] = vec2(-0.040652, -0.996174);\n samples[15] = vec2(0.330458, -0.282111);\n samples[16] = vec2(0.647795, -0.214354);\n samples[17] = vec2(0.030422, -0.189908);\n samples[18] = vec2(0.177430, -0.721124);\n samples[19] = vec2(-0.461163, -0.327434);\n samples[20] = vec2(-0.410012, -0.734504);\n samples[21] = vec2(-0.616334, -0.626069);\n samples[22] = vec2(0.590759, -0.726479);\n samples[23] = vec2(-0.590794, 0.805365);\n samples[24] = vec2(-0.924561, -0.163739);\n samples[25] = vec2(-0.323028, 0.526960);\n samples[26] = vec2(0.642128, 0.752577);\n samples[27] = vec2(0.173625, -0.952386);\n samples[28] = vec2(0.759014, 0.330311);\n samples[29] = vec2(-0.360526, -0.032013);\n samples[30] = vec2(-0.035320, 0.968156);\n samples[31] = vec2(0.585478, -0.431068);\n samples[32] = vec2(-0.244766, -0.906947);\n samples[33] = vec2(-0.853096, 0.184615);\n samples[34] = vec2(-0.089061, 0.104648);\n samples[35] = vec2(-0.437613, 0.285308);\n samples[36] = vec2(-0.654098, 0.379841);\n samples[37] = vec2(-0.128663, 0.456572);\n samples[38] = vec2(0.015980, -0.568170);\n samples[39] = vec2(-0.043966, -0.771940);\n samples[40] = vec2(0.346512, -0.071238);\n samples[41] = vec2(-0.207921, -0.209121);\n samples[42] = vec2(-0.624075, -0.189224);\n samples[43] = vec2(-0.120618, 0.689339);\n samples[44] = vec2(-0.664679, -0.410200);\n samples[45] = vec2(0.371945, -0.880573);\n samples[46] = vec2(-0.743251, 0.629998);\n samples[47] = vec2(-0.191926, -0.413946);\n samples[48] = vec2(0.449574, 0.833373);\n samples[49] = vec2(0.299587, 0.449113);\n samples[50] = vec2(-0.900432, 0.399319);\n samples[51] = vec2(0.762613, -0.544796);\n samples[52] = vec2(0.606462, 0.174233);\n samples[53] = vec2(0.962185, -0.167019);\n samples[54] = vec2(0.960990, 0.249552);\n samples[55] = vec2(0.570397, 0.559146);\n samples[56] = vec2(-0.537514, 0.555019);\n samples[57] = vec2(0.108491, -0.003232);\n samples[58] = vec2(-0.237693, -0.615428);\n samples[59] = vec2(-0.217313, 0.261084);\n samples[60] = vec2(-0.998966, 0.025692);\n samples[61] = vec2(-0.418554, -0.527508);\n samples[62] = vec2(-0.822629, -0.567797);\n samples[63] = vec2(0.061945, 0.522105);\n\n float invRes = 1.0/uRes;\n vec2 coord = gl_FragCoord.xy * invRes;\n\n float strength = uDOFStrength * uRes/768.0;\n\n float depth = texture2D(uDepth, coord).r;\n float range = uDOFPosition - depth;\n float scale = abs(range);\n\n vec4 sample = texture2D(uColor, coord);\n float count = 1.0;\n for(int i = 0; i < 64; i++) {\n vec2 p = samples[i];\n p = coord + scale * 64.0 * strength * p * invRes;\n float d = texture2D(uDepth, p).r;\n float r = uDOFPosition - d;\n float s = abs(r);\n sample += texture2D(uColor, p) * s;\n count += s;\n }\n\n gl_FragColor = sample/count;\n}",fxaa:"#version 100\nprecision highp float;\n\nattribute vec3 aPosition;\n\nvoid main() {\n gl_Position = vec4(aPosition, 1);\n}\n\n\n// __split__\n\n\n#version 100\nprecision highp float;\n\nuniform sampler2D uTexture;\nuniform float uRes;\n\nvoid main() {\n float FXAA_SPAN_MAX = 8.0;\n float FXAA_REDUCE_MUL = 1.0/8.0;\n float FXAA_REDUCE_MIN = 1.0/128.0;\n\n vec2 texCoords = gl_FragCoord.xy/uRes;\n\n vec4 rgbNW = texture2D(uTexture, texCoords + (vec2(-1.0, -1.0) / uRes));\n vec4 rgbNE = texture2D(uTexture, texCoords + (vec2(1.0, -1.0) / uRes));\n vec4 rgbSW = texture2D(uTexture, texCoords + (vec2(-1.0, 1.0) / uRes));\n vec4 rgbSE = texture2D(uTexture, texCoords + (vec2(1.0, 1.0) / uRes));\n vec4 rgbM = texture2D(uTexture, texCoords);\n\n vec4 luma = vec4(0.299, 0.587, 0.114, 1.0);\n float lumaNW = dot(rgbNW, luma);\n float lumaNE = dot(rgbNE, luma);\n float lumaSW = dot(rgbSW, luma);\n float lumaSE = dot(rgbSE, luma);\n float lumaM = dot(rgbM, luma);\n\n float lumaMin = min(lumaM, min(min(lumaNW, lumaNE), min(lumaSW, lumaSE)));\n float lumaMax = max(lumaM, max(max(lumaNW, lumaNE), max(lumaSW, lumaSE)));\n\n vec2 dir;\n dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));\n dir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE));\n\n float dirReduce = max((lumaNW + lumaNE + lumaSW + lumaSE) * (0.25 * FXAA_REDUCE_MUL), FXAA_REDUCE_MIN);\n\n float rcpDirMin = 1.0/(min(abs(dir.x), abs(dir.y)) + dirReduce);\n\n dir = min(vec2(FXAA_SPAN_MAX, FXAA_SPAN_MAX), max(vec2(-FXAA_SPAN_MAX, -FXAA_SPAN_MAX), dir * rcpDirMin)) / uRes;\n\n vec4 rgbA = (1.0/2.0) * \n (texture2D(uTexture, texCoords.xy + dir * (1.0/3.0 - 0.5)) + \n texture2D(uTexture, texCoords.xy + dir * (2.0/3.0 - 0.5)));\n vec4 rgbB = rgbA * (1.0/2.0) + (1.0/4.0) * \n (texture2D(uTexture, texCoords.xy + dir * (0.0/3.0 - 0.5)) +\n texture2D(uTexture, texCoords.xy + dir * (3.0/3.0 - 0.5)));\n float lumaB = dot(rgbB, luma);\n\n if((lumaB < lumaMin) || (lumaB > lumaMax)){\n gl_FragColor = rgbA;\n } else {\n gl_FragColor = rgbB;\n }\n\n}","textured-quad":"#version 100\nprecision highp float;\n\nattribute vec3 aPosition;\n\nvoid main() {\n gl_Position = vec4(aPosition, 1);\n}\n\n\n// __split__\n\n\n#version 100\nprecision highp float;\n\nuniform sampler2D uTexture;\nuniform float uRes;\n\nvoid main() {\n gl_FragColor = texture2D(uTexture, gl_FragCoord.xy/uRes);\n}\n"};t.exports={shaders:r}},function(t,n,e){"use strict";function r(t){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var o=e(9);t.exports=function(t){if(arguments.length>1)throw"Error: The Speck Interactions module has changed!";if(0===arguments.length||"object"!==r(t))throw"Error: Arguments not provided to interactions";var n=void 0===t.scrollZoom||t.scrollZoom,e=t.container,a=t.getRotation,i=t.setRotation,u=t.getTranslation,s=t.setTranslation,l=t.getZoom,c=t.setZoom,f=t.refreshView,h={buttonDown:!1,shiftDown:!1,lastX:0,lastY:0};function p(t){0===t.button&&(h={buttonDown:!0,shiftDown:h.shiftDown,lastX:t.clientX,lastY:t.clientY})}function d(t){if(0===t.button){if(!h.buttonDown)return;h.buttonDown=!1}}function m(t){h.shiftDown=t.shiftKey}function g(t){if(h.buttonDown&&0!==t.buttons){t.preventDefault();var n=t.clientX-h.lastX,e=t.clientY-h.lastY;if(0!==n||0!==e){if(h.lastX=t.clientX,h.lastY=t.clientY,h.shiftDown){var r=u(),c=.001/l();s({x:r.x-n*c,y:r.y+e*c})}else{var p={rotation:new Float32Array(a())};o.rotate(p,n,e),i(p.rotation)}f()}}}function v(t){t.preventDefault(),c(l()*(t.deltaY<0?1/.9:.9)),f()}function y(){e.removeEventListener("mousedown",p),window.removeEventListener("mouseup",d),window.removeEventListener("keydown",m),window.removeEventListener("keyup",m),window.removeEventListener("mousemove",g),e.removeEventListener("wheel",v)}return e.addEventListener("mousedown",p),window.addEventListener("mouseup",d),window.addEventListener("keydown",m),window.addEventListener("keyup",m),window.addEventListener("mousemove",g),n&&e.addEventListener("wheel",v),y}},function(t,n){t.exports={default:{atomScale:.6,relativeAtomScale:1,bondScale:.5,ao:.75,aoRes:256,brightness:.5,outline:0,spf:32,bonds:!1,bondThreshold:1.2,bondShade:.5,atomShade:.5,dofStrength:0,dofPosition:.5,fxaa:1},stickball:{atomScale:.24,relativeAtomScale:.64,bondScale:.5,bonds:!0,bondThreshold:1.2},toon:{ao:0,spf:0,brightness:.5,outline:1},licorice:{atomScale:.1,relativeAtomScale:0,bondScale:1,bonds:!0,bondThreshold:1.2}}},function(t,n,e){"use strict";e.r(n);var r=e(11),o=e(12),a=e(1),i=e.n(a),u=e(0),s=e.n(u),l=e(26),c=e(50);function f(t){return(f="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function h(t,n){for(var e=0;e=0;)n=h[e],Object(i.a)(n,t)&&!d(r,n)&&(r[r.length]=n),e-=1;return r})):Object(s.a)((function(t){return Object(t)!==t?[]:Object.keys(t)})),g=Object(s.a)((function(t){return null===t?"Null":void 0===t?"Undefined":Object.prototype.toString.call(t).slice(8,-1)}));function v(t,n,e,r){var i=o(t);function u(t,n){return y(t,n,e.slice(),r.slice())}return!a((function(t,n){return!a(u,n,t)}),o(n),i)}function y(t,n,e,r){if(u(t,n))return!0;var o,a,s=g(t);if(s!==g(n))return!1;if(null==t||null==n)return!1;if("function"==typeof t["fantasy-land/equals"]||"function"==typeof n["fantasy-land/equals"])return"function"==typeof t["fantasy-land/equals"]&&t["fantasy-land/equals"](n)&&"function"==typeof n["fantasy-land/equals"]&&n["fantasy-land/equals"](t);if("function"==typeof t.equals||"function"==typeof n.equals)return"function"==typeof t.equals&&t.equals(n)&&"function"==typeof n.equals&&n.equals(t);switch(s){case"Arguments":case"Array":case"Object":if("function"==typeof t.constructor&&"Promise"===(o=t.constructor,null==(a=String(o).match(/^function (\w*)/))?"":a[1]))return t===n;break;case"Boolean":case"Number":case"String":if(typeof t!=typeof n||!u(t.valueOf(),n.valueOf()))return!1;break;case"Date":if(!u(t.valueOf(),n.valueOf()))return!1;break;case"Error":return t.name===n.name&&t.message===n.message;case"RegExp":if(t.source!==n.source||t.global!==n.global||t.ignoreCase!==n.ignoreCase||t.multiline!==n.multiline||t.sticky!==n.sticky||t.unicode!==n.unicode)return!1}for(var l=e.length-1;l>=0;){if(e[l]===t)return r[l]===n;l-=1}switch(s){case"Map":return t.size===n.size&&v(t.entries(),n.entries(),e.concat([t]),r.concat([n]));case"Set":return t.size===n.size&&v(t.values(),n.values(),e.concat([t]),r.concat([n]));case"Arguments":case"Array":case"Object":case"Boolean":case"Number":case"String":case"Date":case"Error":case"RegExp":case"Int8Array":case"Uint8Array":case"Uint8ClampedArray":case"Int16Array":case"Uint16Array":case"Int32Array":case"Uint32Array":case"Float32Array":case"Float64Array":case"ArrayBuffer":break;default:return!1}var c=m(t);if(c.length!==m(n).length)return!1;var f=e.concat([t]),h=r.concat([n]);for(l=c.length-1;l>=0;){var p=c[l];if(!Object(i.a)(p,n)||!y(n[p],t[p],f,h))return!1;l-=1}return!0}var b=Object(r.a)((function(t,n){return y(t,n,[],[])}));n.a=b}]); //# sourceMappingURL=bundle.js.map \ No newline at end of file diff --git a/dash_bio/bundle.js.map b/dash_bio/bundle.js.map index a1e78a0a3..78d7cde1f 100644 --- a/dash_bio/bundle.js.map +++ b/dash_bio/bundle.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/prop-types/index.js","webpack:///external \"React\"","webpack:///./src/lib/LazyLoader.js","webpack:///./node_modules/ramda/es/internal/_curry1.js","webpack:///./node_modules/ramda/es/internal/_isPlaceholder.js","webpack:///./node_modules/ramda/es/internal/_has.js","webpack:///./src/lib/constants/tracks.js","webpack:///./node_modules/speck/src/elements.js","webpack:///./node_modules/speck/src/gl-matrix.js","webpack:///./node_modules/speck/src/view.js","webpack:///./node_modules/ramda/es/internal/_curry2.js","webpack:///./src/lib/components/AlignmentChart.react.js","webpack:///./src/lib/components/Circos.react.js","webpack:///./src/lib/components/Ideogram.react.js","webpack:///./src/lib/components/Igv.react.js","webpack:///./src/lib/components/Pileup.react.js","webpack:///./src/lib/components/Molecule2dViewer.react.js","webpack:///./src/lib/components/Molecule3dViewer.js","webpack:///./src/lib/components/NeedlePlot.react.js","webpack:///./src/lib/components/NglMoleculeViewer.react.js","webpack:///./src/lib/components/OncoPrint.react.js","webpack:///./src/lib/components/SequenceViewer.react.js","webpack:///./src/lib/components/Speck.react.js","webpack:///./node_modules/speck/build/index.js","webpack:///./node_modules/speck/src/const.js","webpack:///./node_modules/speck/src/system.js","webpack:///./node_modules/fornac/dist/scripts/fornac.js","webpack:///./node_modules/prop-types/factoryWithThrowingShims.js","webpack:///./node_modules/prop-types/lib/ReactPropTypesSecret.js","webpack:///./node_modules/speck/src/renderer.js","webpack:///./node_modules/speck/src/webgl.js","webpack:///./node_modules/speck/src/cube.js","webpack:///./node_modules/speck/src/shaders.js","webpack:///./node_modules/speck/src/interactions.js","webpack:///./node_modules/speck/src/presets.js","webpack:///./src/lib/components/FornaContainer.react.js","webpack:///./src/lib/index.js","webpack:///external \"ReactDOM\"","webpack:///./node_modules/ramda/es/internal/_arrayFromIterator.js","webpack:///./node_modules/ramda/es/internal/_includesWith.js","webpack:///./node_modules/ramda/es/internal/_objectIs.js","webpack:///./node_modules/ramda/es/internal/_isArguments.js","webpack:///./node_modules/ramda/es/keys.js","webpack:///./node_modules/ramda/es/type.js","webpack:///./node_modules/ramda/es/internal/_equals.js","webpack:///./node_modules/ramda/es/internal/_functionName.js","webpack:///./node_modules/ramda/es/equals.js"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","installedModules","13","jsonpScriptSrc","__webpack_require__","p","exports","module","l","e","promises","installedChunkData","promise","Promise","resolve","reject","onScriptComplete","script","document","createElement","charset","timeout","nc","setAttribute","src","error","Error","event","onerror","onload","clearTimeout","chunk","errorType","type","realSrc","target","message","name","request","undefined","setTimeout","head","appendChild","all","m","c","d","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","oe","err","console","url","getCurrentScript","currentScript","doc_scripts","getElementsByTagName","scripts","filter","s","async","text","textContent","slice","split","join","__jsonpScriptSrc__","isLocal","test","isLocalScript","srcFragments","fileFragments","splice","jsonpArray","window","oldJsonpFunction","alignmentChart","circos","ideogram","igv","pileup","molecule2dViewer","molecule3dViewer","nglmoleculeViewer","needlePlot","oncoPrint","sequenceViewer","speck","_curry1","fn","f1","a","arguments","apply","this","_isPlaceholder","_has","prop","obj","TRACK_TYPES","PILEUP_VIZ_TYPES","PILEUP_SOURCE_TYPES","_global","shim","GLMAT_EPSILON","GLMAT_ARRAY_TYPE","Float32Array","Array","GLMAT_RANDOM","Math","random","glMatrix","degree","PI","toRadian","vec","vec2","out","clone","fromValues","x","y","copy","set","add","b","subtract","sub","multiply","mul","divide","div","min","max","scale","scaleAndAdd","distance","sqrt","dist","squaredDistance","sqrDist","len","squaredLength","sqrLen","negate","inverse","normalize","dot","cross","z","lerp","ax","ay","cos","sin","transformMat2","transformMat2d","transformMat3","transformMat4","forEach","stride","offset","count","arg","str","vec3","az","bx","by","bz","zScale","w","transformQuat","q","qx","qy","qz","qw","ix","iy","iz","iw","rotateX","rotateY","rotateZ","angle","tempA","tempB","cosine","acos","vec4","aw","mat2","a1","a0","a2","a3","det","b0","b1","b2","b3","rotate","rad","v","v0","v1","frob","pow","LDU","L","D","U","mat2d","aa","ab","ac","ad","atx","aty","a4","a5","b4","b5","translate","mat3","a01","a02","a12","a00","a10","a11","a20","a21","a22","b01","b11","b21","b00","b02","b10","b12","b20","b22","fromMat2d","fromQuat","x2","y2","z2","xx","yx","yy","zx","zy","zz","wx","wy","wz","normalFromMat4","a03","a13","a23","a30","a31","a32","a33","b03","b04","b05","b06","b07","b08","b09","mat4","axis","abs","fromRotationTranslation","xy","xz","yz","frustum","left","right","bottom","top","near","far","rl","tb","nf","perspective","fovy","aspect","f","tan","ortho","lr","bt","lookAt","eye","center","up","x0","x1","y0","y1","z0","z1","eyex","eyey","eyez","upx","upy","upz","centerx","centery","centerz","identity","tmpvec3","xUnitVec3","yUnitVec3","matr","quat","rotationTo","setAxisAngle","setAxes","view","fromMat3","bw","calculateW","slerp","omega","cosom","sinom","scale0","scale1","invert","invDot","conjugate","fRoot","fTrace","j","k","glm","require","elements","consts","clamp","zoom","translation","atomScale","relativeAtomScale","bondScale","rotation","ao","aoRes","brightness","outline","spf","bonds","bondThreshold","bondShade","atomShade","resolution","dofStrength","dofPosition","fxaa","system","maxX","Infinity","minX","maxY","minY","atoms","symbol","radius","cx","cy","override","deserialize","serialize","JSON","stringify","parse","dx","dy","getRect","width","height","getBondRadius","MIN_ATOM_RADIUS","_curry2","f2","_b","_a","RealAlignmentChart","lazy","LazyLoader","AlignmentChart","fallback","props","Component","propTypes","id","PropTypes","string","setProps","func","eventDatum","extension","colorscale","oneOfType","opacity","number","textcolor","textsize","showlabel","bool","showid","showconservation","conservationcolor","conservationcolorscale","array","conservationopacity","conservationmethod","oneOf","correctgap","showgap","gapcolor","gapcolorscale","gapopacity","groupbars","showconsensus","tilewidth","tileheight","overview","numtiles","scrollskip","tickstart","ticksteps","defaultProps","RealCircos","Circos","config","size","tracks","enableDownloadSVG","enableZoomPan","style","selectEvent","layout","arrayOf","shape","isRequired","color","label","tooltipContent","source","sourceID","targetEnd","targetID","RealIdeogram","Ideogram","organism","dataDir","annotationsColor","annotationsLayout","barWidth","chrHeight","chrMargin","chrWidth","ploidy","rotatable","showBandLabels","showChromosomeLabels","showAnnotTooltip","showFullyBanded","showNonNuclearChromosomes","className","annotations","chr","start","stop","annotationsPath","annotationsData","annotationTracks","annotationHeight","histogramScaling","assembly","brush","brushData","end","extent","container","chromosomes","localOrganism","homology","chrOne","chrTwo","fullChromosomeLabels","filterable","orientation","ploidyDesc","ancestors","rangeSet","rotated","sex","RealIgv","Igv","genome","reference","locus","minimumBases","RealPileup","Pileup","range","exact","contig","viz","vizOptions","sourceOptions","RealMolecule2dViewer","Molecule2dViewer","modelData","nodes","links","selectedAtomIds","atom","bond","strength","RealMolecule3dViewer","Molecule3dViewer","selectionType","backgroundColor","backgroundOpacity","styles","visualization_type","atomLabelsShown","labels","orbital","cube_file","iso_val","positiveVolumetricColor","negativeVolumetricColor","shapes","onRenderNewData","onChangeSelection","RealNeedlePlot","NeedlePlot","mutationData","mutationGroups","domains","xlabel","ylabel","rangeSlider","needleStyle","stemColor","stemThickness","stemConstHeight","headSize","headColor","headSymbol","domainStyle","domainColor","displayMinorDomains","RealNglMoleculeViewer","NglMoleculeViewer","filename","ext","selectedValue","chain","aaRange","chosen","chosenAtoms","chosenResidues","input","uploaded","resetView","stageParameters","quality","cameraType","imageParameters","antialias","transparent","trim","defaultFilename","downloadImage","molStyles","representations","chosenAtomsColor","chosenAtomsRadius","molSpacingXaxis","sideByside","pdbString","residues","RealOncoPrint","OncoPrint","padding","backgroundcolor","showlegend","showoverview","RealSequenceViewer","SequenceViewer","sequence","showLineNumbers","wrapAminoAcids","charsPerLine","toolbar","search","title","sequenceMaxHeight","badge","selection","coverage","propName","componentName","bgcolor","tooltip","underscore","onclick","legend","coverageClicked","mouseSelection","subpartSelected","RealSpeck","Speck","speckView","scrollZoom","presetView","speckRenderer","speckSystem","speckInteractions","speckPresetViews","MAX_ATOM_RADIUS","getCentroid","farAtom","calculateBonds","sorted","sort","ea","eb","posA","posB","radA","radB","colA","g","colB","cutoff","addAtom","xsum","ysum","zsum","getFarAtom","maxd","rd","getRadius","factory","loaded","rnaPlot","RNAGraph","_rnagraph","_rnaplot","FornaContainer","element","passedOptions","self","options","option","initialSize","svgW","svgH","_d2","default","category20","mousedownNode","mouseupNode","xScale","linear","domain","yScale","graph","magnitude","positionAnyNode","endPoint","startPoint","prevNode","linked","u","arrowTip","path","select","attr","realLinkFilter","linkType","changeColors","moleculeColors","num","val","parseFloat","isNaN","mousedown","mousemove","mpos","mouse","vis","node","dragLine","mouseup","resetMouseVars","linkStrengths","displayParameters","colorScheme","customColors","animation","applyForce","deaf","rnas","extraLinks","equals","createInitialLayout","structure","labelInterval","rg","circularizeExternal","rnaJson","recalculateElements","positions","naview","_naview","NAView","naViewPositions","naview_xy_coordinates","pairtable","_i","nbase","_simplernaplot","simpleXyCoordinates","elementsToJson","addUids","uids","addPositions","addLabels","reinforceStems","reinforceLoops","connectFakeNodes","reassignLinkUids","breakNodesToFakeNodes","addRNA","newLinks","addExternalLinks","concat","addRNAJSON","avoidOthers","externalLinks","newLink","uid","generateUUID","toString","nucs","log","rnaGraph","map","px","rna","recalculateGraph","update","centerView","transitionRNA","newStructure","nextFunction","duration","transitionDuration","nodeType","newRNAJson","gnodes","visNodes","selectAll","nodeKey","transition","visLinks","linkKey","newNodes","createNewNodes","enter","exit","remove","each","updateStyle","createNewLinks","callback","uidsToNodes","link","fakeLinks","linkIndex","indexOf","addNodes","json","entry","addCustomColors","addCustomColorsText","customColorsText","cs","_rnautils","ColorScheme","colorsJson","changeColorScheme","clearNodes","toJSON","fromJSON","jsonString","seq","dotbracket","circular","structName","rnaLength","nucsToNodes","pseudoknotPairs","ProteinGraph","setSize","offsetHeight","offsetWidth","zoomer","brusher","resizeSvgOnResize","svg","setOutlineColor","newColorScheme","classed","ordinal","category10","elemType","interpolate","interpolateLab","colorValues","addEventListener","behavior","scaleExtent","on","zoomstart","redraw","keydown","keyup","focus","append","svgGraph","allowPanningAndZooming","datum","selected","previouslySelected","ctrlKeydown","clear","getBoundingBoxTransform","molWidth","molHeight","widthRatio","heightRatio","minRatio","newMolWidth","newMolHeight","bbTransform","force","charge","middleCharge","otherCharge","friction","linkDistance","linkDistanceMultiplier","linkStrength","other","gravity","chargeDistance","shiftKeydown","selectedNodes","mouseDownNode","dragstarted","sourceEvent","stopPropagation","d1","fixed","dragged","py","resumeForce","preventDefault","dragended","collide","nx1","nx2","ny1","ny2","quad","point","resume","drag","keyCode","updateRnaGraph","nucleotidePositions","getPositions","labelPositions","getUids","addPseudoknots","updateLinkUids","removeLink","index","extraLinkIndex","linkClick","addLink","nodeMouseclick","defaultPrevented","nodeMouseup","nodeMousedown","startAnimation","stopAnimation","setFriction","setCharge","setGravity","setPseudoknotStrength","pseudoknot","displayBackground","displayNumbering","displayNodeOutline","displayNodeLabel","displayLinks","displayPseudoknotLinks","displayProteinLinks","displayAllLinks","linksEnter","linkLines","gnodesEnter","ease","labelAndProteinNodes","nucleotideNodes","allLinks","xlink","realNodes","displayFakeLinks","geom","quadtree","visit","_d","moleculesToJson","moleculesJson","graphs","molecules","molecule","ss","header","numberSort","Date","getTime","replace","floor","startNumber","computePairtable","rnaUtilities","dotbracketToPairtable","removeBreaks","targetString","breaks","breakIndex","substring","ret","dotBracketBreaks","seqBreaks","calculateStartNumberArray","startNumberArray","arraysEqual","labelNodes","broken","pt","relevantElements","allNucs","addFakeNode","filterNucs","newNode1","newNode2","fakeNodeUid","newNode","newX","newY","coordsCounted","ia","fromNode","fakeNodes","Set","thisNode","thisNuc","has","addExtraLinks","getNodeFromNucleotides","from","to","elemTypes","nodeName","nextNode","ptToElements","level","u5","u3","external","pop","prevVec","nextVec","combinedVec","vecLength","normedVec","offsetVec","removePseudoknots","externalLoop","eloop","prev","hloop","numGreater","removePseudoknotsFromPairtable","addName","String","bracketLeft","bracketRight","inverseBrackets","maximumMatching","backtrackMaximumMatching","mmBt","Number","valueOf","insertIntoStack","deleteFromStack","pairtableToDotbracket","findUnmatched","h","RNAUtilities","colorsText","parseRange","parseInt","parseColorText","normalizeColors","MAX_VALUE","MIN_VALUE","chart","startNucleotideNumber","fillViewportTransform","xValues","yValues","molName","xExtent","d3","yExtent","NAME_OFFSET","nucleotideRadius","rnaEdgePadding","xRange","yRange","xExtra","yExtra","createOtherScale","firstScale","newDomain","newRange","scaleFactor","newWidth","newMargin","createTransformToFillViewport","gTransform","extraLinkType","createLinks","gs","showNucleotideLabels","struct_name","createNucleotides","createLabels","createName","bundleExternalLinks","nodesDict","linksList","results","ForceEdgeBundling","edges","compatibility_threshold","step_size","fbundling","d3line","line","edge_subpoint_data","makeExternalLinksBundle","_","pair_table","alpha","loop_size","stack_size","lp","stk","PIHALF","loop","i_old","partner","start_k","start_l","fill","ladder","begin","diff","polygon","bubble","remember","poss","_radloop","_connection","_region","_base","_loop","ANUM","MAXITER","bases","nregion","loop_count","root","Loop","loops","regions","rlphead","Radloop","lencut","RADIUS_REDUCTION_FACTOR","angleinc","_h","HELIX_FACTOR","BACKBONE_DISTANCE","determine_depths","setMark","setDepth","depth","getNconnection","isMark","getConnection","getLoop","Base","Region","read_in_bases","find_regions","construct_loop","find_central_loop","traverse_loop","getX","getY","npairs","setMate","setExtracted","setX","setY","nb1","mate","mark","getMate","setStart1","setEnd2","setRegion","setEnd1","setStart2","ibase","retloop","cp","Connection","rp","rlp","setNconnection","setNumber","setRadius","getNext","getLoopnumber","getRegion","getStart1","isExtracted","getEnd1","getStart2","getEnd2","setConnection","setLoop","setStart","setEnd","setExtruded","setBroken","maxconn","maxdepth","getDepth","anchor_connection","xs","ys","xe","xn","yn","xc","yc","xo","yo","astart","aend","cpnext","acp","cpprev","ic","da","maxang","icstart","icend","icmiddle","icroot","done","done_all_connections","rooted","sign","midx","midy","nrx","nry","mx","my","vx","vy","dotmv","nmidx","nmidy","icstart1","icup","icdown","icnext","direction","dan","rr","cpx","cpy","cpnextx","cpnexty","cnx","rcn","rc","lnx","lny","acn","sx","sy","dcp","imaxloop","indice","getStart","getEnd","setXrad","setYrad","setAngle","atan2","getAngle","set_radius","determine_radius","getXrad","getYrad","connected_connection","find_ic_middle","asin","isExtruded","getNumber","construct_extruded_segment","generate_region","mindit","ci","dt","sumn","sumd","dit","imindit","aend1","aend2","aave","dac","nstart","nend","collision","construct_circle_segment","minf2","maxf2","find_center_for_arc","hhi","hlow","disc","theta","iter","noIterationFailureYet","loopnumber","next","setLoopnumber","setNext","getPrev","setPrev","region","xrad","yrad","extruded","_isNull","isNull","setNull","isBroken","nconnection","connections","_connections","addConnection","_start1","_end1","_start2","_end2","start1","end1","start2","end2","extracted","content","locals","list","result","item","mediaQuery","alreadyImportedModules","stylesInDom","memoize","memo","isOldIE","navigator","userAgent","toLowerCase","getHeadElement","singletonElement","singletonCounter","styleElementsInsertedAtTop","addStylesToDom","domStyle","refs","parts","addStyle","listToStyles","newStyles","part","css","media","sourceMap","insertStyleElement","styleElement","lastStyleElementInsertedAtTop","insertAt","nextSibling","insertBefore","firstChild","removeStyleElement","parentNode","removeChild","idx","createStyleElement","singleton","styleIndex","applyToSingletonTag","URL","createObjectURL","revokeObjectURL","Blob","btoa","linkElement","rel","createLinkElement","updateLink","href","applyToTag","newObj","newList","mayRemove","textStore","replaceText","replacement","Boolean","styleSheet","cssText","cssNode","createTextNode","childNodes","unescape","encodeURIComponent","blob","oldSrc","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_RESULT__","version","d3_arraySlice","d3_array","d3_document","d3_documentElement","ownerDocument","documentElement","d3_window","defaultView","now","setProperty","d3_element_prototype","Element","d3_element_setAttribute","d3_element_setAttributeNS","setAttributeNS","d3_style_prototype","CSSStyleDeclaration","d3_style_setProperty","space","local","priority","d3_ascending","NaN","d3_number","d3_numeric","d3_bisector","compare","lo","hi","mid","ascending","descending","sum","mean","quantile","values","H","median","numbers","variance","deviation","d3_bisect","d3_transposeLength","bisectLeft","bisect","bisectRight","bisector","shuffle","i0","i1","permute","indexes","permutes","pairs","p1","transpose","matrix","row","zip","keys","entries","merge","arrays","merged","d3_range_integerScale","d3_class","ctor","properties","d3_Map","d3_map_escape","d3_map_unescape","d3_map_has","d3_map_remove","d3_map_keys","d3_map_size","d3_map_empty","d3_Set","d3_identity","d3_rebind","method","d3_vendorSymbol","charAt","toUpperCase","d3_vendorPrefixes","prefixName","step","isArray","empty","nest","sortValues","rollup","sortKeys","mapType","keyValue","setter","valuesByKey","sortKey","keyMap","order","rebind","d3_noop","d3_dispatch","d3_dispatch_event","dispatch","listeners","listenerByName","listener","d3_eventPreventDefault","d3_eventSource","d3_eventDispatch","of","thiz","argumentz","e1","e0","requote","d3_requote_re","d3_subclass","__proto__","d3_selection","groups","d3_selectionPrototype","d3_select","querySelector","d3_selectAll","querySelectorAll","d3_selectMatches","d3_selectMatcher","matches","Sizzle","matchesSelector","d3_selection_selector","selector","d3_selection_selectorAll","subgroup","subnode","group","subgroups","__data__","d3_nsXhtml","d3_nsPrefix","xhtml","xml","xmlns","d3_selection_attr","qualify","removeAttributeNS","removeAttribute","d3_collapse","d3_selection_classedRe","RegExp","d3_selection_classes","d3_selection_classed","d3_selection_classedName","re","classList","getAttribute","lastIndex","d3_selection_style","removeProperty","d3_selection_property","d3_selection_creator","createElementNS","namespace","namespaceURI","d3_selectionRemove","parent","d3_selection_dataNode","d3_selection_filter","d3_selection_sortComparator","comparator","d3_selection_each","d3_selection_enter","d3_selection_enterPrototype","prefix","getAttributeNS","contains","getComputedStyle","getPropertyValue","html","innerHTML","insert","before","groupData","nodeData","n0","updateNodes","enterNodes","exitNodes","nodeByKeyValue","keyValues","args","d3_selection_enterInsertBefore","j0","d3_selection_on","capture","wrap","d3_selection_onListener","d3_selection_onFilters","onRemove","removeEventListener","$","d3_selection_onFilter","match","upgroup","mouseenter","mouseleave","related","relatedTarget","compareDocumentPosition","d3_event_dragSelect","d3_event_dragId","d3_event_dragSuppress","click","suppressClick","off","d3_mousePoint","d3_mouse_bug44083","changedTouches","ownerSVGElement","createSVGPoint","scrollX","scrollY","ctm","position","margin","border","getScreenCTM","pageX","pageY","clientX","clientY","matrixTransform","rect","getBoundingClientRect","clientLeft","clientTop","d3_behavior_dragTouchId","identifier","touch","touches","origin","dragstart","touchstart","subject","move","dragOffset","that","correspondingElement","dragId","dragName","dragSubject","moved","ended","dragRestore","position0","position1","ε","ε2","π","τ","τε","halfπ","d3_radians","d3_degrees","d3_sgn","d3_cross2d","d3_acos","d3_asin","d3_cosh","exp","d3_haversin","ρ","SQRT2","interpolateZoom","p0","S","ux0","uy0","w0","ux1","uy1","w1","d2","r0","r1","coshr0","d3_sinh","translate0","center0","mousewheelTimer","touchtime","d3_behavior_zoomInfinity","zooming","mousedowned","d3_behavior_zoomWheel","mousewheeled","dblclicked","touchstarted","location","scaleTo","translateTo","zoomTo","__chart__","rescale","zoomstarted","zoomed","zoomended","location0","d3_selection_interrupt","locations0","distance0","zoomName","touchmove","touchend","targets","relocate","started","changed","LN2","l0","l1","distance1","d3_behavior_zoomDelta","shiftKey","ceil","deltaY","deltaMode","wheelDelta","detail","view1","d3_transitionInheritId","tween","d3_color","d3_hsl","d3_rgb_parse","d3_rgb_hsl","rgb","hsl","d3_hslPrototype","d3_hsl_rgb","m1","m2","vv","round","d3_rgb","d3_hcl","d3_lab_hcl","d3_lab","d3_rgb_lab","brighter","darker","hcl","d3_hclPrototype","d3_hcl_lab","d3_lab_K","lab","d3_labPrototype","d3_lab_rgb","d3_xyz_rgb","d3_lab_xyz","d3_xyz_lab","d3_rgbNumber","d3_rgbString","d3_rgbPrototype","d3_rgb_hex","format","exec","d3_rgb_parseNumber","d3_rgb_names","d3_rgb_xyz","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","d3_functor","d3_xhrType","response","mimeType","d3_xhr","xhr","headers","XMLHttpRequest","responseType","respond","status","responseText","d3_xhrHasResponse","load","XDomainRequest","onreadystatechange","readyState","onprogress","progress","send","open","setRequestHeader","overrideMimeType","beforesend","abort","d3_xhr_fixCallback","functor","dsv","delimiter","reFormat","delimiterCode","charCodeAt","typedResponse","formatRow","formatValue","parseRows","Function","eol","EOL","EOF","rows","N","I","token","formatRows","fieldSet","fields","field","csv","tsv","d3_timer_queueHead","d3_timer_queueTail","d3_timer_interval","d3_timer_timeout","d3_timer_frame","d3_timer","delay","then","time","timer","d3_timer_step","d3_timer_mark","d3_timer_sweep","isFinite","t0","t1","d3_format_precision","LN10","flush","d3_formatPrefixes","d3_locale_numberFormat","locale","locale_decimal","decimal","locale_thousands","thousands","locale_grouping","grouping","locale_currency","currency","formatGroup","reverse","specifier","d3_format_re","align","zfill","comma","precision","suffix","integer","exponent","d3_format_types","d3_format_typeDefault","zcomma","fullSuffix","negative","unit","formatPrefix","after","lastIndexOf","fromCharCode","X","toPrecision","toExponential","toFixed","d3_time","d3_date","d3_date_utc","UTC","getDate","getUTCDate","getDay","getUTCDay","getFullYear","getUTCFullYear","getHours","getUTCHours","getMilliseconds","getUTCMilliseconds","getMinutes","getUTCMinutes","getMonth","getUTCMonth","getSeconds","getUTCSeconds","getTimezoneOffset","setDate","d3_time_prototype","setUTCDate","setDay","setUTCDay","setFullYear","setUTCFullYear","setHours","setUTCHours","setMilliseconds","setUTCMilliseconds","setMinutes","setUTCMinutes","setMonth","setUTCMonth","setSeconds","setUTCSeconds","setTime","d3_time_interval","date","d0","times","utc","d3_time_interval_utc","d3_locale_timeFormat","locale_dateTime","dateTime","locale_date","locale_time","locale_periods","periods","locale_days","days","locale_shortDays","shortDays","locale_months","months","locale_shortMonths","shortMonths","d3_time_format","template","d3_time_formatPads","d3_time_formats","M","Z","d3_time_parse","localZ","W","d3_time_parsers","multi","d3_time_formatMulti","d3_time_periodLookup","d3_time_dayRe","d3_time_formatRe","d3_time_dayLookup","d3_time_formatLookup","d3_time_dayAbbrevRe","d3_time_dayAbbrevLookup","d3_time_monthRe","d3_time_monthLookup","d3_time_monthAbbrevRe","d3_time_monthAbbrevLookup","A","B","d3_time_formatPad","dayOfYear","sundayOfYear","mondayOfYear","Y","d3_time_zone","d3_time_parseDay","d3_time_parseHour24","d3_time_parseDayOfYear","d3_time_parseMilliseconds","d3_time_parseMonthNumber","d3_time_parseMinutes","d3_time_parseSeconds","d3_time_parseWeekNumberSunday","d3_time_parseWeekdayNumber","d3_time_parseWeekNumberMonday","d3_time_parseYear","d3_time_parseFullYear","d3_time_parseZone","d3_time_parseLiteralPercent","year","day","years","interval","week","sunday","weeks","weekOfYear","d3_time_numberRe","d3_time_percentRe","names","zs","zh","zm","formats","numberFormat","timeFormat","d3_locale_enUS","d3_adder","geo","d3_adderSum","d3_adderTemp","reset","bv","av","d3_geo_streamGeometry","geometry","d3_geo_streamGeometryType","stream","d3_geo_streamObjectType","Feature","feature","FeatureCollection","features","Sphere","sphere","Point","coordinates","MultiPoint","LineString","d3_geo_streamLine","MultiLineString","Polygon","d3_geo_streamPolygon","MultiPolygon","GeometryCollection","geometries","closed","coordinate","lineStart","lineEnd","polygonStart","polygonEnd","area","d3_geo_areaSum","d3_geo_area","d3_geo_centroidW0","d3_geo_centroidW1","d3_geo_centroidX0","d3_geo_centroidY0","d3_geo_centroidZ0","d3_geo_centroidX1","d3_geo_centroidY1","d3_geo_centroidZ1","d3_geo_centroidX2","d3_geo_centroidY2","d3_geo_centroidZ2","d3_geo_areaRingSum","d3_geo_areaRingStart","λ00","φ00","λ0","cosφ0","sinφ0","nextPoint","λ","φ","dλ","sdλ","adλ","cosφ","sinφ","d3_geo_cartesian","spherical","d3_geo_cartesianDot","d3_geo_cartesianCross","d3_geo_cartesianAdd","d3_geo_cartesianScale","vector","d3_geo_cartesianNormalize","d3_geo_spherical","cartesian","d3_geo_sphericalEqual","bounds","φ0","λ1","φ1","λ_","λ__","φ__","dλSum","ranges","bound","ringPoint","ringStart","ringEnd","linePoint","normal","inflection","λi","antimeridian","φi","compareRanges","withinRange","best","centroid","d3_geo_centroid","d3_geo_centroidPoint","d3_geo_centroidLineStart","d3_geo_centroidLineEnd","d3_geo_centroidRingStart","d3_geo_centroidPointXYZ","cz","d3_geo_compose","compose","d3_true","d3_geo_clipPolygon","segments","clipStartInside","clip","segment","d3_geo_clipPolygonIntersection","d3_geo_clipPolygonLinkCircular","points","current","isSubject","d3_geo_clip","pointVisible","clipLine","clipStart","rotatedClipStart","pointRing","meridian","parallel","meridianNormal","polarAngle","winding","ring","point0","arc","intersection","φarc","d3_geo_pointInPolygon","polygonStarted","d3_geo_clipSort","pointLine","buffer","d3_geo_clipBufferListener","ringListener","clean","ringSegments","d3_geo_clipSegmentLength1","lines","rejoin","d3_geo_clipAntimeridian","sλ0","sλ1","cosφ1","sinλ0_λ1","atan","d3_geo_clipAntimeridianIntersect","d3_geo_clipCircle","cr","smallRadius","notHemisphere","visible","c0","v00","point2","point1","code","intersect","d3_geo_circleInterpolate","two","n1","n2","n2n2","n1n2","determinant","c1","c2","n1xn2","uu","t2","δλ","polar","q1","d3_geom_clipLine","d3_geo_clipExtent","x__","y__","v__","x_","y_","v_","first","listener_","bufferListener","wn","insidePolygon","inside","corner","comparePoints","ca","cb","d3_geo_conic","projectAt","d3_geo_projectionMutator","parallels","d3_geo_conicEqualArea","C","ρ0","forward","ρ0_y","clipExtent","output","valid","conicEqualArea","raw","albers","albersUsa","lower48Point","alaskaPoint","hawaiiPoint","lower48","alaska","hawaii","pointStream","lower48Stream","alaskaStream","hawaiiStream","d3_geo_pathAreaSum","d3_geo_pathAreaPolygon","d3_geo_pathBoundsX0","d3_geo_pathBoundsY0","d3_geo_pathBoundsX1","d3_geo_pathBoundsY1","d3_geo_pathArea","d3_geo_pathAreaRingStart","x00","y00","d3_geo_pathBounds","d3_geo_pathBuffer","pointCircle","d3_geo_pathBufferCircle","pointLineStart","lineEndPolygon","pointRadius","d3_geo_lengthSum","d3_geo_pathCentroid","d3_geo_pathCentroidPoint","d3_geo_pathCentroidLineStart","d3_geo_pathCentroidLineEnd","d3_geo_pathCentroidRingStart","d3_geo_pathContext","context","moveTo","lineTo","closePath","d3_geo_resample","project","δ2","cosMinDistance","maxDepth","resample","resampleRecursive","resampleNone","d3_geo_transformPoint","c00","resampleLineTo","φ2","λ2","dx2","dy2","dz","d3_geo_pathProjectStream","d3_geo_projectionRadians","d3_geo_transform","d3_geo_projection","projectRotate","δx","δy","projectResample","δφ","δγ","preclip","postclip","clipAngle","projection","d3_geo_rotation","invalidate","d3_geo_equirectangular","d3_geo_identityRotation","d3_geo_rotationλ","d3_geo_rotationφγ","d3_geo_forwardRotationλ","cosδφ","sinδφ","cosδγ","sinδγ","sr","d3_geo_circleAngle","d3_geo_graticuleX","d3_geo_graticuleY","d3_source","d3_target","projectStream","contextStream","cacheStream","transform","methods","projectionMutator","equirectangular","circle","Δλ","sinΔλ","cosΔλ","sinφ1","graticule","X1","X0","Y1","Y0","DX","DY","majorExtent","minorExtent","majorStep","minorStep","greatArc","source_","target_","cy0","sy0","cy1","sy1","kx0","ky0","kx1","ky1","d3_geo_length","d3_geo_azimuthal","azimuthal","cosλ","sinc","cosc","d3_geo_azimuthalEqualArea","cosλcosφ","azimuthalEqualArea","d3_geo_azimuthalEquidistant","d3_geo_conicConformal","F","d3_geo_mercator","d3_geo_conicEquidistant","G","azimuthalEquidistant","conicConformal","conicEquidistant","d3_geo_gnomonic","d3_geo_mercatorProjection","clipAuto","gnomonic","mercator","d3_geo_orthographic","orthographic","d3_geo_stereographic","d3_geo_transverseMercator","d3_geom_pointX","d3_geom_pointY","d3_geom_hullUpper","hull","hs","d3_geom_hullOrder","stereographic","transverseMercator","vertices","fx","fy","flippedPoints","upper","lower","skipLeft","skipRight","d3_geom_polygonPrototype","d3_geom_polygonInside","d3_geom_polygonIntersect","x3","x21","x43","y3","y21","y43","ua","d3_geom_polygonClosed","d3_geom_voronoiEdges","d3_geom_voronoiCells","d3_geom_voronoiBeaches","d3_geom_voronoiFirstCircle","d3_geom_voronoiCircles","d3_geom_voronoiBeachPool","d3_geom_voronoiCirclePool","d3_geom_voronoiBeach","d3_geom_voronoiRedBlackNode","edge","site","d3_geom_voronoiCreateBeach","beach","d3_geom_voronoiDetachBeach","d3_geom_voronoiDetachCircle","d3_geom_voronoiRemoveBeach","vertex","previous","P","disappearing","lArc","unshift","rArc","iArc","nArcs","d3_geom_voronoiSetEdgeEnd","d3_geom_voronoiCreateEdge","d3_geom_voronoiAttachCircle","d3_geom_voronoiAddBeach","dxl","dxr","directrix","d3_geom_voronoiLeftBreakPoint","d3_geom_voronoiRightBreakPoint","R","newArc","lSite","rSite","hb","hc","rfocx","rfocy","pby2","lfocx","lfocy","plby2","hl","aby2","d3_geom_voronoiCell","d3_geom_voronoiHalfEdgeOrder","d3_geom_voronoiCircle","cSite","ha","d3_geom_voronoiConnectEdge","vb","fm","fb","va","lx","ly","rx","ry","d3_geom_voronoiEdge","d3_geom_voronoiHalfEdge","d3_geom_voronoiRedBlackTree","d3_geom_voronoiRedBlackRotateLeft","tree","d3_geom_voronoiRedBlackRotateRight","d3_geom_voronoiRedBlackFirst","d3_geom_voronoi","sites","bbox","d3_geom_voronoiVertexOrder","d3_geom_voronoiClipEdges","cell","iHalfEdge","halfEdges","nHalfEdges","cells","iCell","prepare","d3_geom_voronoiCloseCells","diagram","grandpa","uncle","sibling","voronoi","d3_geom_voronoiClipExtent","polygons","triangles","s0","s1","d3_geom_voronoiTriangleArea","d3_geom_quadtreeCompatX","d3_geom_quadtreeCompatY","d3_geom_quadtreeVisit","children","d3_geom_quadtreeFind","closestPoint","minDistance2","find","distance2","xm","ym","d3_interpolateRgb","ar","ag","br","bg","bb","d3_interpolateObject","d3_interpolate","d3_interpolateNumber","d3_interpolateString","am","bm","bs","bi","d3_interpolate_numberA","d3_interpolate_numberB","delaunay","compat","x1_","y1_","x2_","y2_","leaf","nx","ny","insertChild","nPoint","below","interpolateRgb","interpolateObject","interpolateNumber","interpolateString","interpolators","d3_interpolateArray","na","nb","interpolateArray","d3_ease_default","d3_ease","poly","d3_ease_quad","cubic","d3_ease_cubic","d3_ease_sin","d3_ease_exp","d3_ease_circle","elastic","back","bounce","d3_ease_bounce","d3_ease_mode","d3_ease_reverse","d3_ease_reflect","d3_ease_clamp","d3_ease_cubicInOut","t3","d3_interpolateRound","d3_transform","kx","d3_transformNormalize","kz","d3_transformDot","ky","d3_transformCombine","skew","interpolateHcl","ah","al","bh","bc","bl","interpolateHsl","as","ba","interpolateRound","baseVal","consolidate","d3_transformIdentity","d3_interpolateTransformPop","d3_interpolateTransform","ta","d3_interpolateTranslate","ra","rb","d3_interpolateRotate","wa","wb","d3_interpolateSkew","ka","kb","d3_interpolateScale","d3_uninterpolateNumber","d3_uninterpolateClamp","d3_layout_bundlePath","lca","aNodes","d3_layout_bundleAncestors","bNodes","aNode","bNode","sharedNode","d3_layout_bundleLeastCommonAncestor","d3_layout_forceDragstart","d3_layout_forceDragend","d3_layout_forceMouseover","d3_layout_forceMouseout","interpolateTransform","bundle","paths","chord","chords","sortGroups","sortSubgroups","sortChords","relayout","groupSums","groupIndex","subgroupIndex","di","dj","subindex","startAngle","endAngle","resort","distances","strengths","charges","d3_layout_forceLinkDistance","d3_layout_forceLinkStrength","chargeDistance2","d3_layout_forceChargeDistance2","theta2","repulse","dw","dn","pointCharge","dragmove","tick","weight","d3_layout_forceAccumulate","neighbors","dimension","candidates","d3_layout_hierarchyRebind","hierarchy","d3_layout_hierarchyLinks","d3_layout_hierarchyVisitBefore","d3_layout_hierarchyVisitAfter","nodes2","d3_layout_hierarchyChildren","d3_layout_hierarchyValue","d3_layout_hierarchySort","child","stack","childs","revalue","partition","pie","d3_layout_pieSortByValue","padAngle","pa","arcs","d3_layout_stackX","d3_layout_stackY","d3_layout_stackOut","d3_layout_stackOrderDefault","d3_layout_stackOffsetZero","series","orders","offsets","d3_layout_stackOrders","d3_layout_stackOffsets","d3_layout_stackMaxIndex","sums","d3_layout_stackReduceSum","tops","bottoms","silhouette","wiggle","s2","s3","o0","expand","zero","reduce","d3_layout_stackSum","d3_layout_histogramBinSturges","d3_layout_histogramBinFixed","d3_layout_histogramRange","d3_layout_packSort","d3_layout_packInsert","_pack_next","_pack_prev","d3_layout_packSplice","d3_layout_packIntersects","dr","d3_layout_packSiblings","xMin","xMax","yMin","yMax","d3_layout_packLink","d3_layout_packPlace","isect","d3_layout_packUnlink","db","dc","d3_layout_treeSeparation","d3_layout_treeLeft","d3_layout_treeRight","d3_layout_treeMove","wm","wp","change","d3_layout_treeAncestor","vim","ancestor","d3_layout_treemapPadNull","d3_layout_treemapPad","d3_scaleExtent","d3_scaleRange","rangeExtent","d3_scale_bilinear","uninterpolate","d3_scale_nice","nice","d3_scale_niceStep","d3_scale_niceIdentity","histogram","frequency","valuer","ranger","binner","bin","bins","thresholds","pack","d3_layout_packTransform","separation","nodeSize","root0","root1","node1","queue","wrapTree","firstWalk","secondWalk","sizeNode","tx","siblings","d3_layout_treeShift","midpoint","vip","vop","vom","sip","sop","sim","som","apportion","cluster","previousNode","d3_layout_clusterX","d3_layout_clusterY","d3_layout_clusterLeft","d3_layout_clusterRight","treemap","stickies","pad","sticky","ratio","squarify","score","remaining","worst","stickify","rmax","rmin","padFunction","padConstant","µ","σ","logNormal","bates","irwinHall","d3_scale_polylinear","d3_scale_linearRebind","d3_scale_linearNice","d3_scale_linearTickRange","span","d3_scale_linearTicks","d3_scale_linearTickFormat","d3_scale_linearPrecision","d3_scale_linearFormatSignificant","d3_scale_linearFormatPrecision","d3_scale_linear","rangeRound","ticks","tickFormat","d3_scale_log","base","positive","niced","d3_scale_logNiceNegative","d3_scale_logFormat","d3_scale_powPow","d3_scale_pow","powp","powb","d3_scale_ordinal","rangeBand","steps","xi","rangePoints","rangeRoundPoints","rangeBands","outerPadding","rangeRoundBands","d3_category10","d3_category20","category20b","d3_category20b","category20c","d3_category20c","d3_zero","d3_scale_quantile","quantiles","invertExtent","quantize","d3_scale_quantize","threshold","d3_scale_threshold","d3_scale_identity","innerRadius","d3_svg_arcInnerRadius","outerRadius","d3_svg_arcOuterRadius","cornerRadius","padRadius","d3_svg_arcAuto","d3_svg_arcStartAngle","d3_svg_arcEndAngle","d3_svg_arcPadAngle","cw","circleSegment","ap","d3_svg_arcSweep","h1","h0","rc1","rc0","oc","kc","lc","t30","d3_svg_arcCornerTangents","t12","t03","t21","x01","y01","ox","oy","cx0","cx1","dx0","dy0","dx1","dy1","d3_svg_line","defined","d3_svg_lineLinear","interpolateKey","tension","d3_svg_lineInterpolators","d3_svg_lineLinearClosed","d3_svg_lineStepBefore","d3_svg_lineStepAfter","basis","d3_svg_lineBasis","pi","d3_svg_lineDot4","d3_svg_lineBasisBezier3","d3_svg_lineBasisBezier","cardinal","d3_svg_lineHermite","d3_svg_lineCardinalTangents","monotone","tangents","d3_svg_lineSlope","d3_svg_lineFiniteDifferences","d3_svg_lineMonotoneTangents","p2","d3_svg_lineBasisBezier1","d3_svg_lineBasisBezier2","d3_svg_lineRadial","d3_svg_area","interpolateReverse","points0","points1","fx0","fy0","fx1","fy1","d3_svg_chordRadius","d3_svg_diagonalProjection","d3_svg_diagonalRadialProjection","d3_svg_symbolSize","d3_svg_symbolType","d3_svg_symbolCircle","radial","curve","diagonal","p3","projection_","d3_svg_symbols","diamond","d3_svg_symbolTan30","square","d3_svg_symbolSqrt3","symbolTypes","d3_transitionId","d3_transitionNamespace","d3_transitionInherit","d3_transitionNode","d3_transition","interrupt","d3_selection_interruptNS","lock","activeId","active","d3_transitionPrototype","d3_transition_tween","d3_transition_text","inherit","tweens","elapsed","cancelId","cancel","subnodes","nameNS","attrNull","attrNullNS","attrTween","attrTweenNS","styleNull","styleString","styleTween","inheritId","id0","id1","tickFormat_","orient","d3_svg_axisDefaultOrient","innerTickSize","outerTickSize","tickPadding","tickArguments_","tickValues","tickTransform","tickEnter","tickExit","tickUpdate","tickSpacing","pathUpdate","lineEnter","lineUpdate","textEnter","textUpdate","d3_svg_axisX","d3_svg_axisY","d3_svg_axisOrients","tickSize","tickSubdivide","xExtentDomain","yExtentDomain","xClamp","yClamp","resizes","d3_svg_brushResizes","brushstart","background","resize","d3_svg_brushCursor","gUpdate","backgroundUpdate","redrawX","redrawY","eventTarget","event_","resizing","resizingX","resizingY","dragging","brushmove","brushend","ex","ey","altKey","move1","extent1","extent0","yi","nw","ne","se","sw","d3_time_formatUtc","d3_time_formatIso","d3_time_formatIsoNative","toISOString","d3_time_scale","tickMethod","d3_time_scaleSteps","d3_time_scaleMilliseconds","d3_time_scaleDate","skip","skipped","iso","second","seconds","minute","minutes","hour","timezone","hours","month","d3_time_scaleLocalMethods","d3_time_scaleLocalFormat","d3_time_scaleUtcMethods","d3_time_scaleUtcFormat","d3_json","d3_html","createRange","selectNode","body","createContextualFragment","responseXML","ReactPropTypesSecret","emptyFunction","propFullName","secret","getShim","ReactPropTypes","any","instanceOf","objectOf","checkPropTypes","webgl","cube","View","System","shaders","loadProgram","gl","Program","canvas","aoResolution","tSceneColor","tSceneNormal","tSceneDepth","tRandRotDepth","tRandRotColor","tAccumulator","tAccumulatorOut","tFXAA","tFXAAOut","tDOF","tAO","fbSceneColor","fbSceneNormal","fbRandRot","fbAccumulator","fbFXAA","fbAO","progAtoms","progBonds","progAccumulator","progAO","progFXAA","progDOF","progDisplayQuad","rAtoms","rBonds","rAccumulator","rAO","rDOF","rFXAA","sampleCount","colorRendered","normalRendered","sample","viewport","rot","COLOR_BUFFER_BIT","DEPTH_BUFFER_BIT","viewMat","model","setUniform","render","sceneRect","rotRect","invRot","activate","copyTexImage2D","TEXTURE_2D","RGBA","getAOProgress","initialize","getContext","enable","DEPTH_TEST","CULL_FACE","clearColor","clearDepth","getExtensions","createTextures","attribs","buildAttribs","aPosition","Renderable","Texture","internalFormat","DEPTH_COMPONENT","UNSIGNED_SHORT","Framebuffer","setResolution","res","setSystem","newSystem","make36","arr","aImposter","aRadius","aColor","imposter","aPosA","aPosB","aRadA","aRadB","aColA","aColB","posa","posb","rada","radb","cola","colb","bindFramebuffer","FRAMEBUFFER","display","GLBuffer","createBuffer","bindBuffer","ARRAY_BUFFER","bufferData","STATIC_DRAW","extArray","getExtension","createFramebuffer","drawBuffers","drawBuffersWEBGL","framebufferTexture2D","texture","COLOR_ATTACHMENT0","DEPTH_ATTACHMENT","mag","NEAREST","wraps","CLAMP_TO_EDGE","wrapt","UNSIGNED_BYTE","createTexture","texParameteri","TEXTURE_MAG_FILTER","TEXTURE_MIN_FILTER","TEXTURE_WRAP_S","TEXTURE_WRAP_T","texImage2D","bindTexture","activeTexture","TEXTURE0","program","buffers","primitiveCount","use","enableVertexAttribArray","vertexAttribPointer","FLOAT","drawArrays","TRIANGLES","disableVertexAttribArray","attributes","InstancedRenderable","instancedExt","vertexAttribDivisorANGLE","divisor","drawArraysInstancedANGLE","vertexSource","fragmentSource","compileProgram","gatherAttribs","uniforms","gatherUniforms","useProgram","vertexShader","compileShader","VERTEX_SHADER","fragmentShader","FRAGMENT_SHADER","createProgram","attachShader","linkProgram","getProgramParameter","LINK_STATUS","getProgramInfoLog","shader","createShader","shaderSource","getShaderParameter","COMPILE_STATUS","getShaderInfoLog","lineno","warn","typeString","nUniforms","ACTIVE_UNIFORMS","uniform","getActiveUniform","getUniformLocation","nAttribs","ACTIVE_ATTRIBUTES","attrib","getActiveAttrib","getAttribLocation","getRotation","setRotation","getTranslation","setTranslation","getZoom","setZoom","refreshView","interactions","buttonDown","shiftDown","lastX","lastY","mousedownFn","button","mouseupFn","keychangeFn","mousemoveFn","buttons","inverseZoom","viewDummyObj","wheelFn","removeAllEventListeners","stickball","toon","licorice","renderNewSequences","containerRef","React","createRef","nodeFillColor","_fornaContainer","PreFornaContainer","sequences","unpackedOptions","assign","nextProps","ref","_arrayFromIterator","_includesWith","pred","hasEnumBug","propertyIsEnumerable","nonEnumerableProps","hasArgsEnumBug","nIdx","ks","checkArgsLength","_uniqContentEquals","aIterator","bIterator","stackA","stackB","eq","_equals","aItem","typeA","constructor","global","ignoreCase","multiline","unicode","keysA","extendedStackA","extendedStackB"],"mappings":"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","file":"bundle.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t};\n\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t13: 0\n \t};\n\n\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"\" + ({\"0\":\"async-alignment\",\"1\":\"dash_bio-shared\",\"2\":\"async-circos\",\"3\":\"async-ideogram\",\"4\":\"async-igv\",\"5\":\"async-moleculeviewer2\",\"6\":\"async-moleculeviewer3\",\"7\":\"async-needle\",\"8\":\"async-nglmoleculeviewer\",\"9\":\"async-onco\",\"10\":\"async-pileup\",\"11\":\"async-sequence\",\"12\":\"async-speck\"}[chunkId]||chunkId) + \".js\"\n \t}\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n \t\t\t// a Promise means \"currently loading\".\n \t\t\tif(installedChunkData) {\n \t\t\t\tpromises.push(installedChunkData[2]);\n \t\t\t} else {\n \t\t\t\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\tvar script = document.createElement('script');\n \t\t\t\tvar onScriptComplete;\n\n \t\t\t\tscript.charset = 'utf-8';\n \t\t\t\tscript.timeout = 120;\n \t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t}\n \t\t\t\tscript.src = jsonpScriptSrc(chunkId);\n\n \t\t\t\t// create error before stack unwound to get useful stacktrace later\n \t\t\t\tvar error = new Error();\n \t\t\t\tonScriptComplete = function (event) {\n \t\t\t\t\t// avoid mem leaks in IE.\n \t\t\t\t\tscript.onerror = script.onload = null;\n \t\t\t\t\tclearTimeout(timeout);\n \t\t\t\t\tvar chunk = installedChunks[chunkId];\n \t\t\t\t\tif(chunk !== 0) {\n \t\t\t\t\t\tif(chunk) {\n \t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n \t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n \t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n \t\t\t\t\t\t\terror.type = errorType;\n \t\t\t\t\t\t\terror.request = realSrc;\n \t\t\t\t\t\t\tchunk[1](error);\n \t\t\t\t\t\t}\n \t\t\t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t\t\t}\n \t\t\t\t};\n \t\t\t\tvar timeout = setTimeout(function(){\n \t\t\t\t\tonScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t}, 120000);\n \t\t\t\tscript.onerror = script.onload = onScriptComplete;\n \t\t\t\tdocument.head.appendChild(script);\n \t\t\t}\n \t\t}\n \t\treturn Promise.all(promises);\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n \tvar getCurrentScript = function() {\n \t var script = document.currentScript;\n \t if (!script) {\n \t /* Shim for IE11 and below */\n \t /* Do not take into account async scripts and inline scripts */\n\n \t var doc_scripts = document.getElementsByTagName('script');\n \t var scripts = [];\n\n \t for (var i = 0; i < doc_scripts.length; i++) {\n \t scripts.push(doc_scripts[i]);\n \t }\n\n \t scripts = scripts.filter(function(s) { return !s.async && !s.text && !s.textContent; });\n \t script = scripts.slice(-1)[0];\n \t }\n\n \t return script;\n \t};\n\n \tvar isLocalScript = function(script) {\n \t return /\\/_dash-component-suites\\//.test(script.src);\n \t};\n\n \tObject.defineProperty(__webpack_require__, 'p', {\n \t get: (function () {\n \t var script = getCurrentScript();\n\n \t var url = script.src.split('/').slice(0, -1).join('/') + '/';\n\n \t return function() {\n \t return url;\n \t };\n \t })()\n \t});\n\n \tif (typeof jsonpScriptSrc !== 'undefined') {\n \t var __jsonpScriptSrc__ = jsonpScriptSrc;\n \t jsonpScriptSrc = function(chunkId) {\n \t var script = getCurrentScript();\n \t var isLocal = isLocalScript(script);\n\n \t var src = __jsonpScriptSrc__(chunkId);\n\n \t if(!isLocal) {\n \t return src;\n \t }\n\n \t var srcFragments = src.split('/');\n \t var fileFragments = srcFragments.slice(-1)[0].split('.');\n\n \t fileFragments.splice(1, 0, \"v0_6_2m1618451486\");\n \t srcFragments.splice(-1, 1, fileFragments.join('.'))\n\n \t return srcFragments.join('/');\n \t };\n \t}\n\n\n \tvar jsonpArray = window[\"webpackJsonpdash_bio\"] = window[\"webpackJsonpdash_bio\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 35);\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var REACT_ELEMENT_TYPE = (typeof Symbol === 'function' &&\n Symbol.for &&\n Symbol.for('react.element')) ||\n 0xeac7;\n\n var isValidElement = function(object) {\n return typeof object === 'object' &&\n object !== null &&\n object.$$typeof === REACT_ELEMENT_TYPE;\n };\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(isValidElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n","(function() { module.exports = window[\"React\"]; }());","/* eslint-disable no-inline-comments */\nexport default {\n alignmentChart: () =>\n import(\n /* webpackChunkName: \"alignment\" */ './fragments/AlignmentChart.react'\n ),\n circos: () =>\n import(/* webpackChunkName: \"circos\" */ './fragments/Circos.react'),\n ideogram: () =>\n import(/* webpackChunkName: \"ideogram\" */ './fragments/Ideogram.react'),\n igv: () => import(/* webpackChunkName: \"igv\" */ './fragments/Igv.react'),\n pileup: () =>\n import(/* webpackChunkName: \"pileup\" */ './fragments/Pileup.react'),\n molecule2dViewer: () =>\n import(\n /* webpackChunkName: \"moleculeviewer2\" */ './fragments/Molecule2dViewer.react'\n ),\n molecule3dViewer: () =>\n import(\n /* webpackChunkName: \"moleculeviewer3\" */ './fragments/Molecule3dViewer'\n ),\n nglmoleculeViewer: () =>\n import(\n /* webpackChunkName: \"nglmoleculeviewer\" */ './fragments/NglMoleculeViewer.react'\n ),\n needlePlot: () =>\n import(/* webpackChunkName: \"needle\" */ './fragments/NeedlePlot.react'),\n oncoPrint: () =>\n import(/* webpackChunkName: \"onco\" */ './fragments/OncoPrint.react'),\n sequenceViewer: () =>\n import(\n /* webpackChunkName: \"sequence\" */ './fragments/SequenceViewer.react'\n ),\n speck: () =>\n import(/* webpackChunkName: \"speck\" */ './fragments/Speck.react'),\n};\n","import _isPlaceholder from './_isPlaceholder.js';\n\n/**\n * Optimized internal one-arity curry function.\n *\n * @private\n * @category Function\n * @param {Function} fn The function to curry.\n * @return {Function} The curried function.\n */\nexport default function _curry1(fn) {\n return function f1(a) {\n if (arguments.length === 0 || _isPlaceholder(a)) {\n return f1;\n } else {\n return fn.apply(this, arguments);\n }\n };\n}","export default function _isPlaceholder(a) {\n return a != null && typeof a === 'object' && a['@@functional/placeholder'] === true;\n}","export default function _has(prop, obj) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}","export const CHORDS = 'CHORDS';\nexport const HEATMAP = 'HEATMAP';\nexport const HIGHLIGHT = 'HIGHLIGHT';\nexport const HISTOGRAM = 'HISTOGRAM';\nexport const LINE = 'LINE';\nexport const SCATTER = 'SCATTER';\nexport const STACK = 'STACK';\nexport const TEXT = 'TEXT';\n\nexport const TRACK_TYPES = [\n CHORDS,\n HEATMAP,\n HIGHLIGHT,\n HISTOGRAM,\n LINE,\n SCATTER,\n STACK,\n TEXT,\n];\n\n/**\nVisualization types supported by pileup.js\nOptions defined in https://github.com/akmorrow13/pileup.js/blob/master/src/main/pileup.js\n*/\nexport const PILEUP_VIZ_TYPES = [\n 'coverage',\n 'genome',\n 'genes',\n 'features',\n 'idiogram',\n 'location',\n 'scale',\n 'variants',\n 'genotypes',\n 'pileup',\n];\n\n/**\nData source types supported by pileup.js\nOptions defined in https://github.com/akmorrow13/pileup.js/blob/master/src/main/pileup.js\n*/\nexport const PILEUP_SOURCE_TYPES = [\n 'bam',\n 'alignmentJson',\n 'variantJson',\n 'featureJson',\n 'idiogramJson',\n 'cytoBand',\n 'vcf',\n 'twoBit',\n 'bigBed',\n 'GAReadAlignment',\n 'GAVariant',\n 'GAFeature',\n 'GAGene',\n];\n","module.exports = {};\nmodule.exports[ 0] = module.exports[ 'Xx'] = {'symbol': 'Xx', 'name': 'unknown', 'mass': 1.00000000, 'radius': 1.0000, 'color': [1.000, 0.078, 0.576], 'number': 0};\nmodule.exports[ 1] = module.exports[ 'H'] = {'symbol': 'H', 'name': 'hydrogen', 'mass': 1.00794000, 'radius': 0.3100, 'color': [1.000, 1.000, 1.000], 'number': 1};\nmodule.exports[ 2] = module.exports[ 'He'] = {'symbol': 'He', 'name': 'helium', 'mass': 4.00260200, 'radius': 0.2800, 'color': [0.851, 1.000, 1.000], 'number': 2};\nmodule.exports[ 3] = module.exports[ 'Li'] = {'symbol': 'Li', 'name': 'lithium', 'mass': 6.94100000, 'radius': 1.2800, 'color': [0.800, 0.502, 1.000], 'number': 3};\nmodule.exports[ 4] = module.exports[ 'Be'] = {'symbol': 'Be', 'name': 'beryllium', 'mass': 9.01218200, 'radius': 0.9600, 'color': [0.761, 1.000, 0.000], 'number': 4};\nmodule.exports[ 5] = module.exports[ 'B'] = {'symbol': 'B', 'name': 'boron', 'mass': 10.81100000, 'radius': 0.8400, 'color': [1.000, 0.710, 0.710], 'number': 5};\nmodule.exports[ 6] = module.exports[ 'C'] = {'symbol': 'C', 'name': 'carbon', 'mass': 12.01070000, 'radius': 0.7300, 'color': [0.565, 0.565, 0.565], 'number': 6};\nmodule.exports[ 7] = module.exports[ 'N'] = {'symbol': 'N', 'name': 'nitrogen', 'mass': 14.00670000, 'radius': 0.7100, 'color': [0.188, 0.314, 0.973], 'number': 7};\nmodule.exports[ 8] = module.exports[ 'O'] = {'symbol': 'O', 'name': 'oxygen', 'mass': 15.99940000, 'radius': 0.6600, 'color': [1.000, 0.051, 0.051], 'number': 8};\nmodule.exports[ 9] = module.exports[ 'F'] = {'symbol': 'F', 'name': 'fluorine', 'mass': 18.99840320, 'radius': 0.5700, 'color': [0.565, 0.878, 0.314], 'number': 9};\nmodule.exports[ 10] = module.exports[ 'Ne'] = {'symbol': 'Ne', 'name': 'neon', 'mass': 20.17970000, 'radius': 0.5800, 'color': [0.702, 0.890, 0.961], 'number': 10};\nmodule.exports[ 11] = module.exports[ 'Na'] = {'symbol': 'Na', 'name': 'sodium', 'mass': 22.98976928, 'radius': 1.6600, 'color': [0.671, 0.361, 0.949], 'number': 11};\nmodule.exports[ 12] = module.exports[ 'Mg'] = {'symbol': 'Mg', 'name': 'magnesium', 'mass': 24.30500000, 'radius': 1.4100, 'color': [0.541, 1.000, 0.000], 'number': 12};\nmodule.exports[ 13] = module.exports[ 'Al'] = {'symbol': 'Al', 'name': 'aluminum', 'mass': 26.98153860, 'radius': 1.2100, 'color': [0.749, 0.651, 0.651], 'number': 13};\nmodule.exports[ 14] = module.exports[ 'Si'] = {'symbol': 'Si', 'name': 'silicon', 'mass': 28.08550000, 'radius': 1.1100, 'color': [0.941, 0.784, 0.627], 'number': 14};\nmodule.exports[ 15] = module.exports[ 'P'] = {'symbol': 'P', 'name': 'phosphorus', 'mass': 30.97376200, 'radius': 1.0700, 'color': [1.000, 0.502, 0.000], 'number': 15};\nmodule.exports[ 16] = module.exports[ 'S'] = {'symbol': 'S', 'name': 'sulfur', 'mass': 32.06500000, 'radius': 1.0500, 'color': [1.000, 1.000, 0.188], 'number': 16};\nmodule.exports[ 17] = module.exports[ 'Cl'] = {'symbol': 'Cl', 'name': 'chlorine', 'mass': 35.45300000, 'radius': 1.0200, 'color': [0.122, 0.941, 0.122], 'number': 17};\nmodule.exports[ 18] = module.exports[ 'Ar'] = {'symbol': 'Ar', 'name': 'argon', 'mass': 39.94800000, 'radius': 1.0600, 'color': [0.502, 0.820, 0.890], 'number': 18};\nmodule.exports[ 19] = module.exports[ 'K'] = {'symbol': 'K', 'name': 'potassium', 'mass': 39.09830000, 'radius': 2.0300, 'color': [0.561, 0.251, 0.831], 'number': 19};\nmodule.exports[ 20] = module.exports[ 'Ca'] = {'symbol': 'Ca', 'name': 'calcium', 'mass': 40.07800000, 'radius': 1.7600, 'color': [0.239, 1.000, 0.000], 'number': 20};\nmodule.exports[ 21] = module.exports[ 'Sc'] = {'symbol': 'Sc', 'name': 'scandium', 'mass': 44.95591200, 'radius': 1.7000, 'color': [0.902, 0.902, 0.902], 'number': 21};\nmodule.exports[ 22] = module.exports[ 'Ti'] = {'symbol': 'Ti', 'name': 'titanium', 'mass': 47.86700000, 'radius': 1.6000, 'color': [0.749, 0.761, 0.780], 'number': 22};\nmodule.exports[ 23] = module.exports[ 'V'] = {'symbol': 'V', 'name': 'vanadium', 'mass': 50.94150000, 'radius': 1.5300, 'color': [0.651, 0.651, 0.671], 'number': 23};\nmodule.exports[ 24] = module.exports[ 'Cr'] = {'symbol': 'Cr', 'name': 'chromium', 'mass': 51.99610000, 'radius': 1.3900, 'color': [0.541, 0.600, 0.780], 'number': 24};\nmodule.exports[ 25] = module.exports[ 'Mn'] = {'symbol': 'Mn', 'name': 'manganese', 'mass': 54.93804500, 'radius': 1.3900, 'color': [0.611, 0.478, 0.780], 'number': 25};\nmodule.exports[ 26] = module.exports[ 'Fe'] = {'symbol': 'Fe', 'name': 'iron', 'mass': 55.84500000, 'radius': 1.3200, 'color': [0.878, 0.400, 0.200], 'number': 26};\nmodule.exports[ 27] = module.exports[ 'Co'] = {'symbol': 'Co', 'name': 'cobalt', 'mass': 58.69340000, 'radius': 1.2600, 'color': [0.941, 0.565, 0.627], 'number': 27};\nmodule.exports[ 28] = module.exports[ 'Ni'] = {'symbol': 'Ni', 'name': 'nickel', 'mass': 58.93319500, 'radius': 1.2400, 'color': [0.314, 0.816, 0.314], 'number': 28};\nmodule.exports[ 29] = module.exports[ 'Cu'] = {'symbol': 'Cu', 'name': 'copper', 'mass': 63.54600000, 'radius': 1.3200, 'color': [0.784, 0.502, 0.200], 'number': 29};\nmodule.exports[ 30] = module.exports[ 'Zn'] = {'symbol': 'Zn', 'name': 'zinc', 'mass': 65.38000000, 'radius': 1.2200, 'color': [0.490, 0.502, 0.690], 'number': 30};\nmodule.exports[ 31] = module.exports[ 'Ga'] = {'symbol': 'Ga', 'name': 'gallium', 'mass': 69.72300000, 'radius': 1.2200, 'color': [0.761, 0.561, 0.561], 'number': 31};\nmodule.exports[ 32] = module.exports[ 'Ge'] = {'symbol': 'Ge', 'name': 'germanium', 'mass': 72.64000000, 'radius': 1.2000, 'color': [0.400, 0.561, 0.561], 'number': 32};\nmodule.exports[ 33] = module.exports[ 'As'] = {'symbol': 'As', 'name': 'arsenic', 'mass': 74.92160000, 'radius': 1.1900, 'color': [0.741, 0.502, 0.890], 'number': 33};\nmodule.exports[ 34] = module.exports[ 'Se'] = {'symbol': 'Se', 'name': 'selenium', 'mass': 78.96000000, 'radius': 1.2000, 'color': [1.000, 0.631, 0.000], 'number': 34};\nmodule.exports[ 35] = module.exports[ 'Br'] = {'symbol': 'Br', 'name': 'bromine', 'mass': 79.90400000, 'radius': 1.2000, 'color': [0.651, 0.161, 0.161], 'number': 35};\nmodule.exports[ 36] = module.exports[ 'Kr'] = {'symbol': 'Kr', 'name': 'krypton', 'mass': 83.79800000, 'radius': 1.1600, 'color': [0.361, 0.722, 0.820], 'number': 36};\nmodule.exports[ 37] = module.exports[ 'Rb'] = {'symbol': 'Rb', 'name': 'rubidium', 'mass': 85.46780000, 'radius': 2.2000, 'color': [0.439, 0.180, 0.690], 'number': 37};\nmodule.exports[ 38] = module.exports[ 'Sr'] = {'symbol': 'Sr', 'name': 'strontium', 'mass': 87.62000000, 'radius': 1.9500, 'color': [0.000, 1.000, 0.000], 'number': 38};\nmodule.exports[ 39] = module.exports[ 'Y'] = {'symbol': 'Y', 'name': 'yttrium', 'mass': 88.90585000, 'radius': 1.9000, 'color': [0.580, 1.000, 1.000], 'number': 39};\nmodule.exports[ 40] = module.exports[ 'Zr'] = {'symbol': 'Zr', 'name': 'zirconium', 'mass': 91.22400000, 'radius': 1.7500, 'color': [0.580, 0.878, 0.878], 'number': 40};\nmodule.exports[ 41] = module.exports[ 'Nb'] = {'symbol': 'Nb', 'name': 'niobium', 'mass': 92.90638000, 'radius': 1.6400, 'color': [0.451, 0.761, 0.788], 'number': 41};\nmodule.exports[ 42] = module.exports[ 'Mo'] = {'symbol': 'Mo', 'name': 'molybdenum', 'mass': 95.96000000, 'radius': 1.5400, 'color': [0.329, 0.710, 0.710], 'number': 42};\nmodule.exports[ 43] = module.exports[ 'Tc'] = {'symbol': 'Tc', 'name': 'technetium', 'mass': 98.00000000, 'radius': 1.4700, 'color': [0.231, 0.620, 0.620], 'number': 43};\nmodule.exports[ 44] = module.exports[ 'Ru'] = {'symbol': 'Ru', 'name': 'ruthenium', 'mass': 101.07000000, 'radius': 1.4600, 'color': [0.141, 0.561, 0.561], 'number': 44};\nmodule.exports[ 45] = module.exports[ 'Rh'] = {'symbol': 'Rh', 'name': 'rhodium', 'mass': 102.90550000, 'radius': 1.4200, 'color': [0.039, 0.490, 0.549], 'number': 45};\nmodule.exports[ 46] = module.exports[ 'Pd'] = {'symbol': 'Pd', 'name': 'palladium', 'mass': 106.42000000, 'radius': 1.3900, 'color': [0.000, 0.412, 0.522], 'number': 46};\nmodule.exports[ 47] = module.exports[ 'Ag'] = {'symbol': 'Ag', 'name': 'silver', 'mass': 107.86820000, 'radius': 1.4500, 'color': [0.753, 0.753, 0.753], 'number': 47};\nmodule.exports[ 48] = module.exports[ 'Cd'] = {'symbol': 'Cd', 'name': 'cadmium', 'mass': 112.41100000, 'radius': 1.4400, 'color': [1.000, 0.851, 0.561], 'number': 48};\nmodule.exports[ 49] = module.exports[ 'In'] = {'symbol': 'In', 'name': 'indium', 'mass': 114.81800000, 'radius': 1.4200, 'color': [0.651, 0.459, 0.451], 'number': 49};\nmodule.exports[ 50] = module.exports[ 'Sn'] = {'symbol': 'Sn', 'name': 'tin', 'mass': 118.71000000, 'radius': 1.3900, 'color': [0.400, 0.502, 0.502], 'number': 50};\nmodule.exports[ 51] = module.exports[ 'Sb'] = {'symbol': 'Sb', 'name': 'antimony', 'mass': 121.76000000, 'radius': 1.3900, 'color': [0.620, 0.388, 0.710], 'number': 51};\nmodule.exports[ 52] = module.exports[ 'Te'] = {'symbol': 'Te', 'name': 'tellurium', 'mass': 127.60000000, 'radius': 1.3800, 'color': [0.831, 0.478, 0.000], 'number': 52};\nmodule.exports[ 53] = module.exports[ 'I'] = {'symbol': 'I', 'name': 'iodine', 'mass': 126.90470000, 'radius': 1.3900, 'color': [0.580, 0.000, 0.580], 'number': 53};\nmodule.exports[ 54] = module.exports[ 'Xe'] = {'symbol': 'Xe', 'name': 'xenon', 'mass': 131.29300000, 'radius': 1.4000, 'color': [0.259, 0.620, 0.690], 'number': 54};\nmodule.exports[ 55] = module.exports[ 'Cs'] = {'symbol': 'Cs', 'name': 'cesium', 'mass': 132.90545190, 'radius': 2.4400, 'color': [0.341, 0.090, 0.561], 'number': 55};\nmodule.exports[ 56] = module.exports[ 'Ba'] = {'symbol': 'Ba', 'name': 'barium', 'mass': 137.32700000, 'radius': 2.1500, 'color': [0.000, 0.788, 0.000], 'number': 56};\nmodule.exports[ 57] = module.exports[ 'La'] = {'symbol': 'La', 'name': 'lanthanum', 'mass': 138.90547000, 'radius': 2.0700, 'color': [0.439, 0.831, 1.000], 'number': 57};\nmodule.exports[ 58] = module.exports[ 'Ce'] = {'symbol': 'Ce', 'name': 'cerium', 'mass': 140.11600000, 'radius': 2.0400, 'color': [1.000, 1.000, 0.780], 'number': 58};\nmodule.exports[ 59] = module.exports[ 'Pr'] = {'symbol': 'Pr', 'name': 'praseodymium', 'mass': 140.90765000, 'radius': 2.0300, 'color': [0.851, 1.000, 0.780], 'number': 59};\nmodule.exports[ 60] = module.exports[ 'Nd'] = {'symbol': 'Nd', 'name': 'neodymium', 'mass': 144.24200000, 'radius': 2.0100, 'color': [0.780, 1.000, 0.780], 'number': 60};\nmodule.exports[ 61] = module.exports[ 'Pm'] = {'symbol': 'Pm', 'name': 'promethium', 'mass': 145.00000000, 'radius': 1.9900, 'color': [0.639, 1.000, 0.780], 'number': 61};\nmodule.exports[ 62] = module.exports[ 'Sm'] = {'symbol': 'Sm', 'name': 'samarium', 'mass': 150.36000000, 'radius': 1.9800, 'color': [0.561, 1.000, 0.780], 'number': 62};\nmodule.exports[ 63] = module.exports[ 'Eu'] = {'symbol': 'Eu', 'name': 'europium', 'mass': 151.96400000, 'radius': 1.9800, 'color': [0.380, 1.000, 0.780], 'number': 63};\nmodule.exports[ 64] = module.exports[ 'Gd'] = {'symbol': 'Gd', 'name': 'gadolinium', 'mass': 157.25000000, 'radius': 1.9600, 'color': [0.271, 1.000, 0.780], 'number': 64};\nmodule.exports[ 65] = module.exports[ 'Tb'] = {'symbol': 'Tb', 'name': 'terbium', 'mass': 158.92535000, 'radius': 1.9400, 'color': [0.189, 1.000, 0.780], 'number': 65};\nmodule.exports[ 66] = module.exports[ 'Dy'] = {'symbol': 'Dy', 'name': 'dysprosium', 'mass': 162.50000000, 'radius': 1.9200, 'color': [0.122, 1.000, 0.780], 'number': 66};\nmodule.exports[ 67] = module.exports[ 'Ho'] = {'symbol': 'Ho', 'name': 'holmium', 'mass': 164.93032000, 'radius': 1.9200, 'color': [0.000, 1.000, 0.612], 'number': 67};\nmodule.exports[ 68] = module.exports[ 'Er'] = {'symbol': 'Er', 'name': 'erbium', 'mass': 167.25900000, 'radius': 1.8900, 'color': [0.000, 0.902, 0.459], 'number': 68};\nmodule.exports[ 69] = module.exports[ 'Tm'] = {'symbol': 'Tm', 'name': 'thulium', 'mass': 168.93421000, 'radius': 1.9000, 'color': [0.000, 0.831, 0.322], 'number': 69};\nmodule.exports[ 70] = module.exports[ 'Yb'] = {'symbol': 'Yb', 'name': 'ytterbium', 'mass': 173.05400000, 'radius': 1.8700, 'color': [0.000, 0.749, 0.220], 'number': 70};\nmodule.exports[ 71] = module.exports[ 'Lu'] = {'symbol': 'Lu', 'name': 'lutetium', 'mass': 174.96680000, 'radius': 1.8700, 'color': [0.000, 0.671, 0.141], 'number': 71};\nmodule.exports[ 72] = module.exports[ 'Hf'] = {'symbol': 'Hf', 'name': 'hafnium', 'mass': 178.49000000, 'radius': 1.7500, 'color': [0.302, 0.761, 1.000], 'number': 72};\nmodule.exports[ 73] = module.exports[ 'Ta'] = {'symbol': 'Ta', 'name': 'tantalum', 'mass': 180.94788000, 'radius': 1.7000, 'color': [0.302, 0.651, 1.000], 'number': 73};\nmodule.exports[ 74] = module.exports[ 'W'] = {'symbol': 'W', 'name': 'tungsten', 'mass': 183.84000000, 'radius': 1.6200, 'color': [0.129, 0.580, 0.839], 'number': 74};\nmodule.exports[ 75] = module.exports[ 'Re'] = {'symbol': 'Re', 'name': 'rhenium', 'mass': 186.20700000, 'radius': 1.5100, 'color': [0.149, 0.490, 0.671], 'number': 75};\nmodule.exports[ 76] = module.exports[ 'Os'] = {'symbol': 'Os', 'name': 'osmium', 'mass': 190.23000000, 'radius': 1.4400, 'color': [0.149, 0.400, 0.588], 'number': 76};\nmodule.exports[ 77] = module.exports[ 'Ir'] = {'symbol': 'Ir', 'name': 'iridium', 'mass': 192.21700000, 'radius': 1.4100, 'color': [0.090, 0.329, 0.529], 'number': 77};\nmodule.exports[ 78] = module.exports[ 'Pt'] = {'symbol': 'Pt', 'name': 'platinum', 'mass': 195.08400000, 'radius': 1.3600, 'color': [0.816, 0.816, 0.878], 'number': 78};\nmodule.exports[ 79] = module.exports[ 'Au'] = {'symbol': 'Au', 'name': 'gold', 'mass': 196.96656900, 'radius': 1.3600, 'color': [1.000, 0.820, 0.137], 'number': 79};\nmodule.exports[ 80] = module.exports[ 'Hg'] = {'symbol': 'Hg', 'name': 'mercury', 'mass': 200.59000000, 'radius': 1.3200, 'color': [0.722, 0.722, 0.816], 'number': 80};\nmodule.exports[ 81] = module.exports[ 'Tl'] = {'symbol': 'Tl', 'name': 'thallium', 'mass': 204.38330000, 'radius': 1.4500, 'color': [0.651, 0.329, 0.302], 'number': 81};\nmodule.exports[ 82] = module.exports[ 'Pb'] = {'symbol': 'Pb', 'name': 'lead', 'mass': 207.20000000, 'radius': 1.4600, 'color': [0.341, 0.349, 0.380], 'number': 82};\nmodule.exports[ 83] = module.exports[ 'Bi'] = {'symbol': 'Bi', 'name': 'bismuth', 'mass': 208.98040000, 'radius': 1.4800, 'color': [0.620, 0.310, 0.710], 'number': 83};\nmodule.exports[ 84] = module.exports[ 'Po'] = {'symbol': 'Po', 'name': 'polonium', 'mass': 210.00000000, 'radius': 1.4000, 'color': [0.671, 0.361, 0.000], 'number': 84};\nmodule.exports[ 85] = module.exports[ 'At'] = {'symbol': 'At', 'name': 'astatine', 'mass': 210.00000000, 'radius': 1.5000, 'color': [0.459, 0.310, 0.271], 'number': 85};\nmodule.exports[ 86] = module.exports[ 'Rn'] = {'symbol': 'Rn', 'name': 'radon', 'mass': 220.00000000, 'radius': 1.5000, 'color': [0.259, 0.510, 0.588], 'number': 86};\nmodule.exports[ 87] = module.exports[ 'Fr'] = {'symbol': 'Fr', 'name': 'francium', 'mass': 223.00000000, 'radius': 2.6000, 'color': [0.259, 0.000, 0.400], 'number': 87};\nmodule.exports[ 88] = module.exports[ 'Ra'] = {'symbol': 'Ra', 'name': 'radium', 'mass': 226.00000000, 'radius': 2.2100, 'color': [0.000, 0.490, 0.000], 'number': 88};\nmodule.exports[ 89] = module.exports[ 'Ac'] = {'symbol': 'Ac', 'name': 'actinium', 'mass': 227.00000000, 'radius': 2.1500, 'color': [0.439, 0.671, 0.980], 'number': 89};\nmodule.exports[ 90] = module.exports[ 'Th'] = {'symbol': 'Th', 'name': 'thorium', 'mass': 231.03588000, 'radius': 2.0600, 'color': [0.000, 0.729, 1.000], 'number': 90};\nmodule.exports[ 91] = module.exports[ 'Pa'] = {'symbol': 'Pa', 'name': 'protactinium', 'mass': 232.03806000, 'radius': 2.0000, 'color': [0.000, 0.631, 1.000], 'number': 91};\nmodule.exports[ 92] = module.exports[ 'U'] = {'symbol': 'U', 'name': 'uranium', 'mass': 237.00000000, 'radius': 1.9600, 'color': [0.000, 0.561, 1.000], 'number': 92};\nmodule.exports[ 93] = module.exports[ 'Np'] = {'symbol': 'Np', 'name': 'neptunium', 'mass': 238.02891000, 'radius': 1.9000, 'color': [0.000, 0.502, 1.000], 'number': 93};\nmodule.exports[ 94] = module.exports[ 'Pu'] = {'symbol': 'Pu', 'name': 'plutonium', 'mass': 243.00000000, 'radius': 1.8700, 'color': [0.000, 0.420, 1.000], 'number': 94};\nmodule.exports[ 95] = module.exports[ 'Am'] = {'symbol': 'Am', 'name': 'americium', 'mass': 244.00000000, 'radius': 1.8000, 'color': [0.329, 0.361, 0.949], 'number': 95};\nmodule.exports[ 96] = module.exports[ 'Cm'] = {'symbol': 'Cm', 'name': 'curium', 'mass': 247.00000000, 'radius': 1.6900, 'color': [0.471, 0.361, 0.890], 'number': 96};\nmodule.exports[ 97] = module.exports[ 'Bk'] = {'symbol': 'Bk', 'name': 'berkelium', 'mass': 247.00000000, 'radius': 1.6600, 'color': [0.541, 0.310, 0.890], 'number': 97};\nmodule.exports[ 98] = module.exports[ 'Cf'] = {'symbol': 'Cf', 'name': 'californium', 'mass': 251.00000000, 'radius': 1.6800, 'color': [0.631, 0.212, 0.831], 'number': 98};\nmodule.exports[ 99] = module.exports[ 'Es'] = {'symbol': 'Es', 'name': 'einsteinium', 'mass': 252.00000000, 'radius': 1.6500, 'color': [0.702, 0.122, 0.831], 'number': 99};\nmodule.exports[100] = module.exports[ 'Fm'] = {'symbol': 'Fm', 'name': 'fermium', 'mass': 257.00000000, 'radius': 1.6700, 'color': [0.702, 0.122, 0.729], 'number': 100};\nmodule.exports[101] = module.exports[ 'Md'] = {'symbol': 'Md', 'name': 'mendelevium', 'mass': 258.00000000, 'radius': 1.7300, 'color': [0.702, 0.051, 0.651], 'number': 101};\nmodule.exports[102] = module.exports[ 'No'] = {'symbol': 'No', 'name': 'nobelium', 'mass': 259.00000000, 'radius': 1.7600, 'color': [0.741, 0.051, 0.529], 'number': 102};\nmodule.exports[103] = module.exports[ 'Lr'] = {'symbol': 'Lr', 'name': 'lawrencium', 'mass': 262.00000000, 'radius': 1.6100, 'color': [0.780, 0.000, 0.400], 'number': 103};\nmodule.exports[104] = module.exports[ 'Rf'] = {'symbol': 'Rf', 'name': 'rutherfordium', 'mass': 261.00000000, 'radius': 1.5700, 'color': [0.800, 0.000, 0.349], 'number': 104};\nmodule.exports[105] = module.exports[ 'Db'] = {'symbol': 'Db', 'name': 'dubnium', 'mass': 262.00000000, 'radius': 1.4900, 'color': [0.820, 0.000, 0.310], 'number': 105};\nmodule.exports[106] = module.exports[ 'Sg'] = {'symbol': 'Sg', 'name': 'seaborgium', 'mass': 266.00000000, 'radius': 1.4300, 'color': [0.851, 0.000, 0.271], 'number': 106};\nmodule.exports[107] = module.exports[ 'Bh'] = {'symbol': 'Bh', 'name': 'bohrium', 'mass': 264.00000000, 'radius': 1.4100, 'color': [0.878, 0.000, 0.220], 'number': 107};\nmodule.exports[108] = module.exports[ 'Hs'] = {'symbol': 'Hs', 'name': 'hassium', 'mass': 277.00000000, 'radius': 1.3400, 'color': [0.902, 0.000, 0.180], 'number': 108};\nmodule.exports[109] = module.exports[ 'Mt'] = {'symbol': 'Mt', 'name': 'meitnerium', 'mass': 268.00000000, 'radius': 1.2900, 'color': [0.922, 0.000, 0.149], 'number': 109};\nmodule.exports[110] = module.exports[ 'Ds'] = {'symbol': 'Ds', 'name': 'Ds', 'mass': 271.00000000, 'radius': 1.2800, 'color': [0.922, 0.000, 0.149], 'number': 110};\nmodule.exports[111] = module.exports['Uuu'] = {'symbol': 'Uuu', 'name': 'Uuu', 'mass': 272.00000000, 'radius': 1.2100, 'color': [0.922, 0.000, 0.149], 'number': 111};\nmodule.exports[112] = module.exports['Uub'] = {'symbol': 'Uub', 'name': 'Uub', 'mass': 285.00000000, 'radius': 1.2200, 'color': [0.922, 0.000, 0.149], 'number': 112};\nmodule.exports[113] = module.exports['Uut'] = {'symbol': 'Uut', 'name': 'Uut', 'mass': 284.00000000, 'radius': 1.3600, 'color': [0.922, 0.000, 0.149], 'number': 113};\nmodule.exports[114] = module.exports['Uuq'] = {'symbol': 'Uuq', 'name': 'Uuq', 'mass': 289.00000000, 'radius': 1.4300, 'color': [0.922, 0.000, 0.149], 'number': 114};\nmodule.exports[115] = module.exports['Uup'] = {'symbol': 'Uup', 'name': 'Uup', 'mass': 288.00000000, 'radius': 1.6200, 'color': [0.922, 0.000, 0.149], 'number': 115};\nmodule.exports[116] = module.exports['Uuh'] = {'symbol': 'Uuh', 'name': 'Uuh', 'mass': 292.00000000, 'radius': 1.7500, 'color': [0.922, 0.000, 0.149], 'number': 116};\nmodule.exports[117] = module.exports['Uus'] = {'symbol': 'Uus', 'name': 'Uus', 'mass': 294.00000000, 'radius': 1.6500, 'color': [0.922, 0.000, 0.149], 'number': 117};\nmodule.exports[118] = module.exports['Uuo'] = {'symbol': 'Uuo', 'name': 'Uuo', 'mass': 296.00000000, 'radius': 1.5700, 'color': [0.922, 0.000, 0.149], 'number': 118};\n","/**\n * @fileoverview gl-matrix - High performance matrix and vector operations\n * @author Brandon Jones\n * @author Colin MacKenzie IV\n * @version 2.2.2\n */\n\n/* Copyright (c) 2013, Brandon Jones, Colin MacKenzie IV. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */\n\n\n(function(_global) {\n \"use strict\";\n\n var shim = {};\n if (typeof(exports) === 'undefined') {\n if(typeof define == 'function' && typeof define.amd == 'object' && define.amd) {\n shim.exports = {};\n define(function() {\n return shim.exports;\n });\n } else {\n // gl-matrix lives in a browser, define its namespaces in global\n shim.exports = typeof(window) !== 'undefined' ? window : _global;\n }\n }\n else {\n // gl-matrix lives in commonjs, define its namespaces in exports\n shim.exports = exports;\n }\n\n (function(exports) {\n /* Copyright (c) 2013, Brandon Jones, Colin MacKenzie IV. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation \n and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE \nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */\n\n\nif(!GLMAT_EPSILON) {\n var GLMAT_EPSILON = 0.000001;\n}\n\nif(!GLMAT_ARRAY_TYPE) {\n var GLMAT_ARRAY_TYPE = (typeof Float32Array !== 'undefined') ? Float32Array : Array;\n}\n\nif(!GLMAT_RANDOM) {\n var GLMAT_RANDOM = Math.random;\n}\n\n/**\n * @class Common utilities\n * @name glMatrix\n */\nvar glMatrix = {};\n\n/**\n * Sets the type of array used when creating new vectors and matrices\n *\n * @param {Type} type Array type, such as Float32Array or Array\n */\nglMatrix.setMatrixArrayType = function(type) {\n GLMAT_ARRAY_TYPE = type;\n}\n\nif(typeof(exports) !== 'undefined') {\n exports.glMatrix = glMatrix;\n}\n\nvar degree = Math.PI / 180;\n\n/**\n* Convert Degree To Radian\n*\n* @param {Number} Angle in Degrees\n*/\nglMatrix.toRadian = function(a){\n return a * degree;\n}\n;\n/* Copyright (c) 2013, Brandon Jones, Colin MacKenzie IV. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation \n and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE \nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */\n\n/**\n * @class 2 Dimensional Vector\n * @name vec2\n */\n\nvar vec2 = {};\n\n/**\n * Creates a new, empty vec2\n *\n * @returns {vec2} a new 2D vector\n */\nvec2.create = function() {\n var out = new GLMAT_ARRAY_TYPE(2);\n out[0] = 0;\n out[1] = 0;\n return out;\n};\n\n/**\n * Creates a new vec2 initialized with values from an existing vector\n *\n * @param {vec2} a vector to clone\n * @returns {vec2} a new 2D vector\n */\nvec2.clone = function(a) {\n var out = new GLMAT_ARRAY_TYPE(2);\n out[0] = a[0];\n out[1] = a[1];\n return out;\n};\n\n/**\n * Creates a new vec2 initialized with the given values\n *\n * @param {Number} x X component\n * @param {Number} y Y component\n * @returns {vec2} a new 2D vector\n */\nvec2.fromValues = function(x, y) {\n var out = new GLMAT_ARRAY_TYPE(2);\n out[0] = x;\n out[1] = y;\n return out;\n};\n\n/**\n * Copy the values from one vec2 to another\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a the source vector\n * @returns {vec2} out\n */\nvec2.copy = function(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n return out;\n};\n\n/**\n * Set the components of a vec2 to the given values\n *\n * @param {vec2} out the receiving vector\n * @param {Number} x X component\n * @param {Number} y Y component\n * @returns {vec2} out\n */\nvec2.set = function(out, x, y) {\n out[0] = x;\n out[1] = y;\n return out;\n};\n\n/**\n * Adds two vec2's\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a the first operand\n * @param {vec2} b the second operand\n * @returns {vec2} out\n */\nvec2.add = function(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n return out;\n};\n\n/**\n * Subtracts vector b from vector a\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a the first operand\n * @param {vec2} b the second operand\n * @returns {vec2} out\n */\nvec2.subtract = function(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n return out;\n};\n\n/**\n * Alias for {@link vec2.subtract}\n * @function\n */\nvec2.sub = vec2.subtract;\n\n/**\n * Multiplies two vec2's\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a the first operand\n * @param {vec2} b the second operand\n * @returns {vec2} out\n */\nvec2.multiply = function(out, a, b) {\n out[0] = a[0] * b[0];\n out[1] = a[1] * b[1];\n return out;\n};\n\n/**\n * Alias for {@link vec2.multiply}\n * @function\n */\nvec2.mul = vec2.multiply;\n\n/**\n * Divides two vec2's\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a the first operand\n * @param {vec2} b the second operand\n * @returns {vec2} out\n */\nvec2.divide = function(out, a, b) {\n out[0] = a[0] / b[0];\n out[1] = a[1] / b[1];\n return out;\n};\n\n/**\n * Alias for {@link vec2.divide}\n * @function\n */\nvec2.div = vec2.divide;\n\n/**\n * Returns the minimum of two vec2's\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a the first operand\n * @param {vec2} b the second operand\n * @returns {vec2} out\n */\nvec2.min = function(out, a, b) {\n out[0] = Math.min(a[0], b[0]);\n out[1] = Math.min(a[1], b[1]);\n return out;\n};\n\n/**\n * Returns the maximum of two vec2's\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a the first operand\n * @param {vec2} b the second operand\n * @returns {vec2} out\n */\nvec2.max = function(out, a, b) {\n out[0] = Math.max(a[0], b[0]);\n out[1] = Math.max(a[1], b[1]);\n return out;\n};\n\n/**\n * Scales a vec2 by a scalar number\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a the vector to scale\n * @param {Number} b amount to scale the vector by\n * @returns {vec2} out\n */\nvec2.scale = function(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n return out;\n};\n\n/**\n * Adds two vec2's after scaling the second operand by a scalar value\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a the first operand\n * @param {vec2} b the second operand\n * @param {Number} scale the amount to scale b by before adding\n * @returns {vec2} out\n */\nvec2.scaleAndAdd = function(out, a, b, scale) {\n out[0] = a[0] + (b[0] * scale);\n out[1] = a[1] + (b[1] * scale);\n return out;\n};\n\n/**\n * Calculates the euclidian distance between two vec2's\n *\n * @param {vec2} a the first operand\n * @param {vec2} b the second operand\n * @returns {Number} distance between a and b\n */\nvec2.distance = function(a, b) {\n var x = b[0] - a[0],\n y = b[1] - a[1];\n return Math.sqrt(x*x + y*y);\n};\n\n/**\n * Alias for {@link vec2.distance}\n * @function\n */\nvec2.dist = vec2.distance;\n\n/**\n * Calculates the squared euclidian distance between two vec2's\n *\n * @param {vec2} a the first operand\n * @param {vec2} b the second operand\n * @returns {Number} squared distance between a and b\n */\nvec2.squaredDistance = function(a, b) {\n var x = b[0] - a[0],\n y = b[1] - a[1];\n return x*x + y*y;\n};\n\n/**\n * Alias for {@link vec2.squaredDistance}\n * @function\n */\nvec2.sqrDist = vec2.squaredDistance;\n\n/**\n * Calculates the length of a vec2\n *\n * @param {vec2} a vector to calculate length of\n * @returns {Number} length of a\n */\nvec2.length = function (a) {\n var x = a[0],\n y = a[1];\n return Math.sqrt(x*x + y*y);\n};\n\n/**\n * Alias for {@link vec2.length}\n * @function\n */\nvec2.len = vec2.length;\n\n/**\n * Calculates the squared length of a vec2\n *\n * @param {vec2} a vector to calculate squared length of\n * @returns {Number} squared length of a\n */\nvec2.squaredLength = function (a) {\n var x = a[0],\n y = a[1];\n return x*x + y*y;\n};\n\n/**\n * Alias for {@link vec2.squaredLength}\n * @function\n */\nvec2.sqrLen = vec2.squaredLength;\n\n/**\n * Negates the components of a vec2\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a vector to negate\n * @returns {vec2} out\n */\nvec2.negate = function(out, a) {\n out[0] = -a[0];\n out[1] = -a[1];\n return out;\n};\n\n/**\n * Returns the inverse of the components of a vec2\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a vector to invert\n * @returns {vec2} out\n */\nvec2.inverse = function(out, a) {\n out[0] = 1.0 / a[0];\n out[1] = 1.0 / a[1];\n return out;\n};\n\n/**\n * Normalize a vec2\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a vector to normalize\n * @returns {vec2} out\n */\nvec2.normalize = function(out, a) {\n var x = a[0],\n y = a[1];\n var len = x*x + y*y;\n if (len > 0) {\n //TODO: evaluate use of glm_invsqrt here?\n len = 1 / Math.sqrt(len);\n out[0] = a[0] * len;\n out[1] = a[1] * len;\n }\n return out;\n};\n\n/**\n * Calculates the dot product of two vec2's\n *\n * @param {vec2} a the first operand\n * @param {vec2} b the second operand\n * @returns {Number} dot product of a and b\n */\nvec2.dot = function (a, b) {\n return a[0] * b[0] + a[1] * b[1];\n};\n\n/**\n * Computes the cross product of two vec2's\n * Note that the cross product must by definition produce a 3D vector\n *\n * @param {vec3} out the receiving vector\n * @param {vec2} a the first operand\n * @param {vec2} b the second operand\n * @returns {vec3} out\n */\nvec2.cross = function(out, a, b) {\n var z = a[0] * b[1] - a[1] * b[0];\n out[0] = out[1] = 0;\n out[2] = z;\n return out;\n};\n\n/**\n * Performs a linear interpolation between two vec2's\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a the first operand\n * @param {vec2} b the second operand\n * @param {Number} t interpolation amount between the two inputs\n * @returns {vec2} out\n */\nvec2.lerp = function (out, a, b, t) {\n var ax = a[0],\n ay = a[1];\n out[0] = ax + t * (b[0] - ax);\n out[1] = ay + t * (b[1] - ay);\n return out;\n};\n\n/**\n * Generates a random vector with the given scale\n *\n * @param {vec2} out the receiving vector\n * @param {Number} [scale] Length of the resulting vector. If ommitted, a unit vector will be returned\n * @returns {vec2} out\n */\nvec2.random = function (out, scale) {\n scale = scale || 1.0;\n var r = GLMAT_RANDOM() * 2.0 * Math.PI;\n out[0] = Math.cos(r) * scale;\n out[1] = Math.sin(r) * scale;\n return out;\n};\n\n/**\n * Transforms the vec2 with a mat2\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a the vector to transform\n * @param {mat2} m matrix to transform with\n * @returns {vec2} out\n */\nvec2.transformMat2 = function(out, a, m) {\n var x = a[0],\n y = a[1];\n out[0] = m[0] * x + m[2] * y;\n out[1] = m[1] * x + m[3] * y;\n return out;\n};\n\n/**\n * Transforms the vec2 with a mat2d\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a the vector to transform\n * @param {mat2d} m matrix to transform with\n * @returns {vec2} out\n */\nvec2.transformMat2d = function(out, a, m) {\n var x = a[0],\n y = a[1];\n out[0] = m[0] * x + m[2] * y + m[4];\n out[1] = m[1] * x + m[3] * y + m[5];\n return out;\n};\n\n/**\n * Transforms the vec2 with a mat3\n * 3rd vector component is implicitly '1'\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a the vector to transform\n * @param {mat3} m matrix to transform with\n * @returns {vec2} out\n */\nvec2.transformMat3 = function(out, a, m) {\n var x = a[0],\n y = a[1];\n out[0] = m[0] * x + m[3] * y + m[6];\n out[1] = m[1] * x + m[4] * y + m[7];\n return out;\n};\n\n/**\n * Transforms the vec2 with a mat4\n * 3rd vector component is implicitly '0'\n * 4th vector component is implicitly '1'\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a the vector to transform\n * @param {mat4} m matrix to transform with\n * @returns {vec2} out\n */\nvec2.transformMat4 = function(out, a, m) {\n var x = a[0], \n y = a[1];\n out[0] = m[0] * x + m[4] * y + m[12];\n out[1] = m[1] * x + m[5] * y + m[13];\n return out;\n};\n\n/**\n * Perform some operation over an array of vec2s.\n *\n * @param {Array} a the array of vectors to iterate over\n * @param {Number} stride Number of elements between the start of each vec2. If 0 assumes tightly packed\n * @param {Number} offset Number of elements to skip at the beginning of the array\n * @param {Number} count Number of vec2s to iterate over. If 0 iterates over entire array\n * @param {Function} fn Function to call for each vector in the array\n * @param {Object} [arg] additional argument to pass to fn\n * @returns {Array} a\n * @function\n */\nvec2.forEach = (function() {\n var vec = vec2.create();\n\n return function(a, stride, offset, count, fn, arg) {\n var i, l;\n if(!stride) {\n stride = 2;\n }\n\n if(!offset) {\n offset = 0;\n }\n \n if(count) {\n l = Math.min((count * stride) + offset, a.length);\n } else {\n l = a.length;\n }\n\n for(i = offset; i < l; i += stride) {\n vec[0] = a[i]; vec[1] = a[i+1];\n fn(vec, vec, arg);\n a[i] = vec[0]; a[i+1] = vec[1];\n }\n \n return a;\n };\n})();\n\n/**\n * Returns a string representation of a vector\n *\n * @param {vec2} vec vector to represent as a string\n * @returns {String} string representation of the vector\n */\nvec2.str = function (a) {\n return 'vec2(' + a[0] + ', ' + a[1] + ')';\n};\n\nif(typeof(exports) !== 'undefined') {\n exports.vec2 = vec2;\n}\n;\n/* Copyright (c) 2013, Brandon Jones, Colin MacKenzie IV. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation \n and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE \nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */\n\n/**\n * @class 3 Dimensional Vector\n * @name vec3\n */\n\nvar vec3 = {};\n\n/**\n * Creates a new, empty vec3\n *\n * @returns {vec3} a new 3D vector\n */\nvec3.create = function() {\n var out = new GLMAT_ARRAY_TYPE(3);\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n return out;\n};\n\n/**\n * Creates a new vec3 initialized with values from an existing vector\n *\n * @param {vec3} a vector to clone\n * @returns {vec3} a new 3D vector\n */\nvec3.clone = function(a) {\n var out = new GLMAT_ARRAY_TYPE(3);\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n return out;\n};\n\n/**\n * Creates a new vec3 initialized with the given values\n *\n * @param {Number} x X component\n * @param {Number} y Y component\n * @param {Number} z Z component\n * @returns {vec3} a new 3D vector\n */\nvec3.fromValues = function(x, y, z) {\n var out = new GLMAT_ARRAY_TYPE(3);\n out[0] = x;\n out[1] = y;\n out[2] = z;\n return out;\n};\n\n/**\n * Copy the values from one vec3 to another\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the source vector\n * @returns {vec3} out\n */\nvec3.copy = function(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n return out;\n};\n\n/**\n * Set the components of a vec3 to the given values\n *\n * @param {vec3} out the receiving vector\n * @param {Number} x X component\n * @param {Number} y Y component\n * @param {Number} z Z component\n * @returns {vec3} out\n */\nvec3.set = function(out, x, y, z) {\n out[0] = x;\n out[1] = y;\n out[2] = z;\n return out;\n};\n\n/**\n * Adds two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the first operand\n * @param {vec3} b the second operand\n * @returns {vec3} out\n */\nvec3.add = function(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n out[2] = a[2] + b[2];\n return out;\n};\n\n/**\n * Subtracts vector b from vector a\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the first operand\n * @param {vec3} b the second operand\n * @returns {vec3} out\n */\nvec3.subtract = function(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n out[2] = a[2] - b[2];\n return out;\n};\n\n/**\n * Alias for {@link vec3.subtract}\n * @function\n */\nvec3.sub = vec3.subtract;\n\n/**\n * Multiplies two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the first operand\n * @param {vec3} b the second operand\n * @returns {vec3} out\n */\nvec3.multiply = function(out, a, b) {\n out[0] = a[0] * b[0];\n out[1] = a[1] * b[1];\n out[2] = a[2] * b[2];\n return out;\n};\n\n/**\n * Alias for {@link vec3.multiply}\n * @function\n */\nvec3.mul = vec3.multiply;\n\n/**\n * Divides two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the first operand\n * @param {vec3} b the second operand\n * @returns {vec3} out\n */\nvec3.divide = function(out, a, b) {\n out[0] = a[0] / b[0];\n out[1] = a[1] / b[1];\n out[2] = a[2] / b[2];\n return out;\n};\n\n/**\n * Alias for {@link vec3.divide}\n * @function\n */\nvec3.div = vec3.divide;\n\n/**\n * Returns the minimum of two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the first operand\n * @param {vec3} b the second operand\n * @returns {vec3} out\n */\nvec3.min = function(out, a, b) {\n out[0] = Math.min(a[0], b[0]);\n out[1] = Math.min(a[1], b[1]);\n out[2] = Math.min(a[2], b[2]);\n return out;\n};\n\n/**\n * Returns the maximum of two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the first operand\n * @param {vec3} b the second operand\n * @returns {vec3} out\n */\nvec3.max = function(out, a, b) {\n out[0] = Math.max(a[0], b[0]);\n out[1] = Math.max(a[1], b[1]);\n out[2] = Math.max(a[2], b[2]);\n return out;\n};\n\n/**\n * Scales a vec3 by a scalar number\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the vector to scale\n * @param {Number} b amount to scale the vector by\n * @returns {vec3} out\n */\nvec3.scale = function(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n out[2] = a[2] * b;\n return out;\n};\n\n/**\n * Adds two vec3's after scaling the second operand by a scalar value\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the first operand\n * @param {vec3} b the second operand\n * @param {Number} scale the amount to scale b by before adding\n * @returns {vec3} out\n */\nvec3.scaleAndAdd = function(out, a, b, scale) {\n out[0] = a[0] + (b[0] * scale);\n out[1] = a[1] + (b[1] * scale);\n out[2] = a[2] + (b[2] * scale);\n return out;\n};\n\n/**\n * Calculates the euclidian distance between two vec3's\n *\n * @param {vec3} a the first operand\n * @param {vec3} b the second operand\n * @returns {Number} distance between a and b\n */\nvec3.distance = function(a, b) {\n var x = b[0] - a[0],\n y = b[1] - a[1],\n z = b[2] - a[2];\n return Math.sqrt(x*x + y*y + z*z);\n};\n\n/**\n * Alias for {@link vec3.distance}\n * @function\n */\nvec3.dist = vec3.distance;\n\n/**\n * Calculates the squared euclidian distance between two vec3's\n *\n * @param {vec3} a the first operand\n * @param {vec3} b the second operand\n * @returns {Number} squared distance between a and b\n */\nvec3.squaredDistance = function(a, b) {\n var x = b[0] - a[0],\n y = b[1] - a[1],\n z = b[2] - a[2];\n return x*x + y*y + z*z;\n};\n\n/**\n * Alias for {@link vec3.squaredDistance}\n * @function\n */\nvec3.sqrDist = vec3.squaredDistance;\n\n/**\n * Calculates the length of a vec3\n *\n * @param {vec3} a vector to calculate length of\n * @returns {Number} length of a\n */\nvec3.length = function (a) {\n var x = a[0],\n y = a[1],\n z = a[2];\n return Math.sqrt(x*x + y*y + z*z);\n};\n\n/**\n * Alias for {@link vec3.length}\n * @function\n */\nvec3.len = vec3.length;\n\n/**\n * Calculates the squared length of a vec3\n *\n * @param {vec3} a vector to calculate squared length of\n * @returns {Number} squared length of a\n */\nvec3.squaredLength = function (a) {\n var x = a[0],\n y = a[1],\n z = a[2];\n return x*x + y*y + z*z;\n};\n\n/**\n * Alias for {@link vec3.squaredLength}\n * @function\n */\nvec3.sqrLen = vec3.squaredLength;\n\n/**\n * Negates the components of a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a vector to negate\n * @returns {vec3} out\n */\nvec3.negate = function(out, a) {\n out[0] = -a[0];\n out[1] = -a[1];\n out[2] = -a[2];\n return out;\n};\n\n/**\n * Returns the inverse of the components of a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a vector to invert\n * @returns {vec3} out\n */\nvec3.inverse = function(out, a) {\n out[0] = 1.0 / a[0];\n out[1] = 1.0 / a[1];\n out[2] = 1.0 / a[2];\n return out;\n};\n\n/**\n * Normalize a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a vector to normalize\n * @returns {vec3} out\n */\nvec3.normalize = function(out, a) {\n var x = a[0],\n y = a[1],\n z = a[2];\n var len = x*x + y*y + z*z;\n if (len > 0) {\n //TODO: evaluate use of glm_invsqrt here?\n len = 1 / Math.sqrt(len);\n out[0] = a[0] * len;\n out[1] = a[1] * len;\n out[2] = a[2] * len;\n }\n return out;\n};\n\n/**\n * Calculates the dot product of two vec3's\n *\n * @param {vec3} a the first operand\n * @param {vec3} b the second operand\n * @returns {Number} dot product of a and b\n */\nvec3.dot = function (a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n};\n\n/**\n * Computes the cross product of two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the first operand\n * @param {vec3} b the second operand\n * @returns {vec3} out\n */\nvec3.cross = function(out, a, b) {\n var ax = a[0], ay = a[1], az = a[2],\n bx = b[0], by = b[1], bz = b[2];\n\n out[0] = ay * bz - az * by;\n out[1] = az * bx - ax * bz;\n out[2] = ax * by - ay * bx;\n return out;\n};\n\n/**\n * Performs a linear interpolation between two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the first operand\n * @param {vec3} b the second operand\n * @param {Number} t interpolation amount between the two inputs\n * @returns {vec3} out\n */\nvec3.lerp = function (out, a, b, t) {\n var ax = a[0],\n ay = a[1],\n az = a[2];\n out[0] = ax + t * (b[0] - ax);\n out[1] = ay + t * (b[1] - ay);\n out[2] = az + t * (b[2] - az);\n return out;\n};\n\n/**\n * Generates a random vector with the given scale\n *\n * @param {vec3} out the receiving vector\n * @param {Number} [scale] Length of the resulting vector. If ommitted, a unit vector will be returned\n * @returns {vec3} out\n */\nvec3.random = function (out, scale) {\n scale = scale || 1.0;\n\n var r = GLMAT_RANDOM() * 2.0 * Math.PI;\n var z = (GLMAT_RANDOM() * 2.0) - 1.0;\n var zScale = Math.sqrt(1.0-z*z) * scale;\n\n out[0] = Math.cos(r) * zScale;\n out[1] = Math.sin(r) * zScale;\n out[2] = z * scale;\n return out;\n};\n\n/**\n * Transforms the vec3 with a mat4.\n * 4th vector component is implicitly '1'\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the vector to transform\n * @param {mat4} m matrix to transform with\n * @returns {vec3} out\n */\nvec3.transformMat4 = function(out, a, m) {\n var x = a[0], y = a[1], z = a[2],\n w = m[3] * x + m[7] * y + m[11] * z + m[15];\n w = w || 1.0;\n out[0] = (m[0] * x + m[4] * y + m[8] * z + m[12]) / w;\n out[1] = (m[1] * x + m[5] * y + m[9] * z + m[13]) / w;\n out[2] = (m[2] * x + m[6] * y + m[10] * z + m[14]) / w;\n return out;\n};\n\n/**\n * Transforms the vec3 with a mat3.\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the vector to transform\n * @param {mat4} m the 3x3 matrix to transform with\n * @returns {vec3} out\n */\nvec3.transformMat3 = function(out, a, m) {\n var x = a[0], y = a[1], z = a[2];\n out[0] = x * m[0] + y * m[3] + z * m[6];\n out[1] = x * m[1] + y * m[4] + z * m[7];\n out[2] = x * m[2] + y * m[5] + z * m[8];\n return out;\n};\n\n/**\n * Transforms the vec3 with a quat\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the vector to transform\n * @param {quat} q quaternion to transform with\n * @returns {vec3} out\n */\nvec3.transformQuat = function(out, a, q) {\n // benchmarks: http://jsperf.com/quaternion-transform-vec3-implementations\n\n var x = a[0], y = a[1], z = a[2],\n qx = q[0], qy = q[1], qz = q[2], qw = q[3],\n\n // calculate quat * vec\n ix = qw * x + qy * z - qz * y,\n iy = qw * y + qz * x - qx * z,\n iz = qw * z + qx * y - qy * x,\n iw = -qx * x - qy * y - qz * z;\n\n // calculate result * inverse quat\n out[0] = ix * qw + iw * -qx + iy * -qz - iz * -qy;\n out[1] = iy * qw + iw * -qy + iz * -qx - ix * -qz;\n out[2] = iz * qw + iw * -qz + ix * -qy - iy * -qx;\n return out;\n};\n\n/**\n * Rotate a 3D vector around the x-axis\n * @param {vec3} out The receiving vec3\n * @param {vec3} a The vec3 point to rotate\n * @param {vec3} b The origin of the rotation\n * @param {Number} c The angle of rotation\n * @returns {vec3} out\n */\nvec3.rotateX = function(out, a, b, c){\n var p = [], r=[];\n\t //Translate point to the origin\n\t p[0] = a[0] - b[0];\n\t p[1] = a[1] - b[1];\n \tp[2] = a[2] - b[2];\n\n\t //perform rotation\n\t r[0] = p[0];\n\t r[1] = p[1]*Math.cos(c) - p[2]*Math.sin(c);\n\t r[2] = p[1]*Math.sin(c) + p[2]*Math.cos(c);\n\n\t //translate to correct position\n\t out[0] = r[0] + b[0];\n\t out[1] = r[1] + b[1];\n\t out[2] = r[2] + b[2];\n\n \treturn out;\n};\n\n/**\n * Rotate a 3D vector around the y-axis\n * @param {vec3} out The receiving vec3\n * @param {vec3} a The vec3 point to rotate\n * @param {vec3} b The origin of the rotation\n * @param {Number} c The angle of rotation\n * @returns {vec3} out\n */\nvec3.rotateY = function(out, a, b, c){\n \tvar p = [], r=[];\n \t//Translate point to the origin\n \tp[0] = a[0] - b[0];\n \tp[1] = a[1] - b[1];\n \tp[2] = a[2] - b[2];\n \n \t//perform rotation\n \tr[0] = p[2]*Math.sin(c) + p[0]*Math.cos(c);\n \tr[1] = p[1];\n \tr[2] = p[2]*Math.cos(c) - p[0]*Math.sin(c);\n \n \t//translate to correct position\n \tout[0] = r[0] + b[0];\n \tout[1] = r[1] + b[1];\n \tout[2] = r[2] + b[2];\n \n \treturn out;\n};\n\n/**\n * Rotate a 3D vector around the z-axis\n * @param {vec3} out The receiving vec3\n * @param {vec3} a The vec3 point to rotate\n * @param {vec3} b The origin of the rotation\n * @param {Number} c The angle of rotation\n * @returns {vec3} out\n */\nvec3.rotateZ = function(out, a, b, c){\n \tvar p = [], r=[];\n \t//Translate point to the origin\n \tp[0] = a[0] - b[0];\n \tp[1] = a[1] - b[1];\n \tp[2] = a[2] - b[2];\n \n \t//perform rotation\n \tr[0] = p[0]*Math.cos(c) - p[1]*Math.sin(c);\n \tr[1] = p[0]*Math.sin(c) + p[1]*Math.cos(c);\n \tr[2] = p[2];\n \n \t//translate to correct position\n \tout[0] = r[0] + b[0];\n \tout[1] = r[1] + b[1];\n \tout[2] = r[2] + b[2];\n \n \treturn out;\n};\n\n/**\n * Perform some operation over an array of vec3s.\n *\n * @param {Array} a the array of vectors to iterate over\n * @param {Number} stride Number of elements between the start of each vec3. If 0 assumes tightly packed\n * @param {Number} offset Number of elements to skip at the beginning of the array\n * @param {Number} count Number of vec3s to iterate over. If 0 iterates over entire array\n * @param {Function} fn Function to call for each vector in the array\n * @param {Object} [arg] additional argument to pass to fn\n * @returns {Array} a\n * @function\n */\nvec3.forEach = (function() {\n var vec = vec3.create();\n\n return function(a, stride, offset, count, fn, arg) {\n var i, l;\n if(!stride) {\n stride = 3;\n }\n\n if(!offset) {\n offset = 0;\n }\n \n if(count) {\n l = Math.min((count * stride) + offset, a.length);\n } else {\n l = a.length;\n }\n\n for(i = offset; i < l; i += stride) {\n vec[0] = a[i]; vec[1] = a[i+1]; vec[2] = a[i+2];\n fn(vec, vec, arg);\n a[i] = vec[0]; a[i+1] = vec[1]; a[i+2] = vec[2];\n }\n \n return a;\n };\n})();\n\n/**\n * Get the angle between two 3D vectors\n * @param {vec3} a The first operand\n * @param {vec3} b The second operand\n * @returns {Number} The angle in radians\n */\nvec3.angle = function(a, b) {\n \n var tempA = vec3.fromValues(a[0], a[1], a[2]);\n var tempB = vec3.fromValues(b[0], b[1], b[2]);\n \n vec3.normalize(tempA, tempA);\n vec3.normalize(tempB, tempB);\n \n var cosine = vec3.dot(tempA, tempB);\n\n if(cosine > 1.0){\n return 0;\n } else {\n return Math.acos(cosine);\n } \n};\n\n/**\n * Returns a string representation of a vector\n *\n * @param {vec3} vec vector to represent as a string\n * @returns {String} string representation of the vector\n */\nvec3.str = function (a) {\n return 'vec3(' + a[0] + ', ' + a[1] + ', ' + a[2] + ')';\n};\n\nif(typeof(exports) !== 'undefined') {\n exports.vec3 = vec3;\n}\n;\n/* Copyright (c) 2013, Brandon Jones, Colin MacKenzie IV. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation \n and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE \nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */\n\n/**\n * @class 4 Dimensional Vector\n * @name vec4\n */\n\nvar vec4 = {};\n\n/**\n * Creates a new, empty vec4\n *\n * @returns {vec4} a new 4D vector\n */\nvec4.create = function() {\n var out = new GLMAT_ARRAY_TYPE(4);\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n return out;\n};\n\n/**\n * Creates a new vec4 initialized with values from an existing vector\n *\n * @param {vec4} a vector to clone\n * @returns {vec4} a new 4D vector\n */\nvec4.clone = function(a) {\n var out = new GLMAT_ARRAY_TYPE(4);\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n return out;\n};\n\n/**\n * Creates a new vec4 initialized with the given values\n *\n * @param {Number} x X component\n * @param {Number} y Y component\n * @param {Number} z Z component\n * @param {Number} w W component\n * @returns {vec4} a new 4D vector\n */\nvec4.fromValues = function(x, y, z, w) {\n var out = new GLMAT_ARRAY_TYPE(4);\n out[0] = x;\n out[1] = y;\n out[2] = z;\n out[3] = w;\n return out;\n};\n\n/**\n * Copy the values from one vec4 to another\n *\n * @param {vec4} out the receiving vector\n * @param {vec4} a the source vector\n * @returns {vec4} out\n */\nvec4.copy = function(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n return out;\n};\n\n/**\n * Set the components of a vec4 to the given values\n *\n * @param {vec4} out the receiving vector\n * @param {Number} x X component\n * @param {Number} y Y component\n * @param {Number} z Z component\n * @param {Number} w W component\n * @returns {vec4} out\n */\nvec4.set = function(out, x, y, z, w) {\n out[0] = x;\n out[1] = y;\n out[2] = z;\n out[3] = w;\n return out;\n};\n\n/**\n * Adds two vec4's\n *\n * @param {vec4} out the receiving vector\n * @param {vec4} a the first operand\n * @param {vec4} b the second operand\n * @returns {vec4} out\n */\nvec4.add = function(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n out[2] = a[2] + b[2];\n out[3] = a[3] + b[3];\n return out;\n};\n\n/**\n * Subtracts vector b from vector a\n *\n * @param {vec4} out the receiving vector\n * @param {vec4} a the first operand\n * @param {vec4} b the second operand\n * @returns {vec4} out\n */\nvec4.subtract = function(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n out[2] = a[2] - b[2];\n out[3] = a[3] - b[3];\n return out;\n};\n\n/**\n * Alias for {@link vec4.subtract}\n * @function\n */\nvec4.sub = vec4.subtract;\n\n/**\n * Multiplies two vec4's\n *\n * @param {vec4} out the receiving vector\n * @param {vec4} a the first operand\n * @param {vec4} b the second operand\n * @returns {vec4} out\n */\nvec4.multiply = function(out, a, b) {\n out[0] = a[0] * b[0];\n out[1] = a[1] * b[1];\n out[2] = a[2] * b[2];\n out[3] = a[3] * b[3];\n return out;\n};\n\n/**\n * Alias for {@link vec4.multiply}\n * @function\n */\nvec4.mul = vec4.multiply;\n\n/**\n * Divides two vec4's\n *\n * @param {vec4} out the receiving vector\n * @param {vec4} a the first operand\n * @param {vec4} b the second operand\n * @returns {vec4} out\n */\nvec4.divide = function(out, a, b) {\n out[0] = a[0] / b[0];\n out[1] = a[1] / b[1];\n out[2] = a[2] / b[2];\n out[3] = a[3] / b[3];\n return out;\n};\n\n/**\n * Alias for {@link vec4.divide}\n * @function\n */\nvec4.div = vec4.divide;\n\n/**\n * Returns the minimum of two vec4's\n *\n * @param {vec4} out the receiving vector\n * @param {vec4} a the first operand\n * @param {vec4} b the second operand\n * @returns {vec4} out\n */\nvec4.min = function(out, a, b) {\n out[0] = Math.min(a[0], b[0]);\n out[1] = Math.min(a[1], b[1]);\n out[2] = Math.min(a[2], b[2]);\n out[3] = Math.min(a[3], b[3]);\n return out;\n};\n\n/**\n * Returns the maximum of two vec4's\n *\n * @param {vec4} out the receiving vector\n * @param {vec4} a the first operand\n * @param {vec4} b the second operand\n * @returns {vec4} out\n */\nvec4.max = function(out, a, b) {\n out[0] = Math.max(a[0], b[0]);\n out[1] = Math.max(a[1], b[1]);\n out[2] = Math.max(a[2], b[2]);\n out[3] = Math.max(a[3], b[3]);\n return out;\n};\n\n/**\n * Scales a vec4 by a scalar number\n *\n * @param {vec4} out the receiving vector\n * @param {vec4} a the vector to scale\n * @param {Number} b amount to scale the vector by\n * @returns {vec4} out\n */\nvec4.scale = function(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n out[2] = a[2] * b;\n out[3] = a[3] * b;\n return out;\n};\n\n/**\n * Adds two vec4's after scaling the second operand by a scalar value\n *\n * @param {vec4} out the receiving vector\n * @param {vec4} a the first operand\n * @param {vec4} b the second operand\n * @param {Number} scale the amount to scale b by before adding\n * @returns {vec4} out\n */\nvec4.scaleAndAdd = function(out, a, b, scale) {\n out[0] = a[0] + (b[0] * scale);\n out[1] = a[1] + (b[1] * scale);\n out[2] = a[2] + (b[2] * scale);\n out[3] = a[3] + (b[3] * scale);\n return out;\n};\n\n/**\n * Calculates the euclidian distance between two vec4's\n *\n * @param {vec4} a the first operand\n * @param {vec4} b the second operand\n * @returns {Number} distance between a and b\n */\nvec4.distance = function(a, b) {\n var x = b[0] - a[0],\n y = b[1] - a[1],\n z = b[2] - a[2],\n w = b[3] - a[3];\n return Math.sqrt(x*x + y*y + z*z + w*w);\n};\n\n/**\n * Alias for {@link vec4.distance}\n * @function\n */\nvec4.dist = vec4.distance;\n\n/**\n * Calculates the squared euclidian distance between two vec4's\n *\n * @param {vec4} a the first operand\n * @param {vec4} b the second operand\n * @returns {Number} squared distance between a and b\n */\nvec4.squaredDistance = function(a, b) {\n var x = b[0] - a[0],\n y = b[1] - a[1],\n z = b[2] - a[2],\n w = b[3] - a[3];\n return x*x + y*y + z*z + w*w;\n};\n\n/**\n * Alias for {@link vec4.squaredDistance}\n * @function\n */\nvec4.sqrDist = vec4.squaredDistance;\n\n/**\n * Calculates the length of a vec4\n *\n * @param {vec4} a vector to calculate length of\n * @returns {Number} length of a\n */\nvec4.length = function (a) {\n var x = a[0],\n y = a[1],\n z = a[2],\n w = a[3];\n return Math.sqrt(x*x + y*y + z*z + w*w);\n};\n\n/**\n * Alias for {@link vec4.length}\n * @function\n */\nvec4.len = vec4.length;\n\n/**\n * Calculates the squared length of a vec4\n *\n * @param {vec4} a vector to calculate squared length of\n * @returns {Number} squared length of a\n */\nvec4.squaredLength = function (a) {\n var x = a[0],\n y = a[1],\n z = a[2],\n w = a[3];\n return x*x + y*y + z*z + w*w;\n};\n\n/**\n * Alias for {@link vec4.squaredLength}\n * @function\n */\nvec4.sqrLen = vec4.squaredLength;\n\n/**\n * Negates the components of a vec4\n *\n * @param {vec4} out the receiving vector\n * @param {vec4} a vector to negate\n * @returns {vec4} out\n */\nvec4.negate = function(out, a) {\n out[0] = -a[0];\n out[1] = -a[1];\n out[2] = -a[2];\n out[3] = -a[3];\n return out;\n};\n\n/**\n * Returns the inverse of the components of a vec4\n *\n * @param {vec4} out the receiving vector\n * @param {vec4} a vector to invert\n * @returns {vec4} out\n */\nvec4.inverse = function(out, a) {\n out[0] = 1.0 / a[0];\n out[1] = 1.0 / a[1];\n out[2] = 1.0 / a[2];\n out[3] = 1.0 / a[3];\n return out;\n};\n\n/**\n * Normalize a vec4\n *\n * @param {vec4} out the receiving vector\n * @param {vec4} a vector to normalize\n * @returns {vec4} out\n */\nvec4.normalize = function(out, a) {\n var x = a[0],\n y = a[1],\n z = a[2],\n w = a[3];\n var len = x*x + y*y + z*z + w*w;\n if (len > 0) {\n len = 1 / Math.sqrt(len);\n out[0] = a[0] * len;\n out[1] = a[1] * len;\n out[2] = a[2] * len;\n out[3] = a[3] * len;\n }\n return out;\n};\n\n/**\n * Calculates the dot product of two vec4's\n *\n * @param {vec4} a the first operand\n * @param {vec4} b the second operand\n * @returns {Number} dot product of a and b\n */\nvec4.dot = function (a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];\n};\n\n/**\n * Performs a linear interpolation between two vec4's\n *\n * @param {vec4} out the receiving vector\n * @param {vec4} a the first operand\n * @param {vec4} b the second operand\n * @param {Number} t interpolation amount between the two inputs\n * @returns {vec4} out\n */\nvec4.lerp = function (out, a, b, t) {\n var ax = a[0],\n ay = a[1],\n az = a[2],\n aw = a[3];\n out[0] = ax + t * (b[0] - ax);\n out[1] = ay + t * (b[1] - ay);\n out[2] = az + t * (b[2] - az);\n out[3] = aw + t * (b[3] - aw);\n return out;\n};\n\n/**\n * Generates a random vector with the given scale\n *\n * @param {vec4} out the receiving vector\n * @param {Number} [scale] Length of the resulting vector. If ommitted, a unit vector will be returned\n * @returns {vec4} out\n */\nvec4.random = function (out, scale) {\n scale = scale || 1.0;\n\n //TODO: This is a pretty awful way of doing this. Find something better.\n out[0] = GLMAT_RANDOM();\n out[1] = GLMAT_RANDOM();\n out[2] = GLMAT_RANDOM();\n out[3] = GLMAT_RANDOM();\n vec4.normalize(out, out);\n vec4.scale(out, out, scale);\n return out;\n};\n\n/**\n * Transforms the vec4 with a mat4.\n *\n * @param {vec4} out the receiving vector\n * @param {vec4} a the vector to transform\n * @param {mat4} m matrix to transform with\n * @returns {vec4} out\n */\nvec4.transformMat4 = function(out, a, m) {\n var x = a[0], y = a[1], z = a[2], w = a[3];\n out[0] = m[0] * x + m[4] * y + m[8] * z + m[12] * w;\n out[1] = m[1] * x + m[5] * y + m[9] * z + m[13] * w;\n out[2] = m[2] * x + m[6] * y + m[10] * z + m[14] * w;\n out[3] = m[3] * x + m[7] * y + m[11] * z + m[15] * w;\n return out;\n};\n\n/**\n * Transforms the vec4 with a quat\n *\n * @param {vec4} out the receiving vector\n * @param {vec4} a the vector to transform\n * @param {quat} q quaternion to transform with\n * @returns {vec4} out\n */\nvec4.transformQuat = function(out, a, q) {\n var x = a[0], y = a[1], z = a[2],\n qx = q[0], qy = q[1], qz = q[2], qw = q[3],\n\n // calculate quat * vec\n ix = qw * x + qy * z - qz * y,\n iy = qw * y + qz * x - qx * z,\n iz = qw * z + qx * y - qy * x,\n iw = -qx * x - qy * y - qz * z;\n\n // calculate result * inverse quat\n out[0] = ix * qw + iw * -qx + iy * -qz - iz * -qy;\n out[1] = iy * qw + iw * -qy + iz * -qx - ix * -qz;\n out[2] = iz * qw + iw * -qz + ix * -qy - iy * -qx;\n return out;\n};\n\n/**\n * Perform some operation over an array of vec4s.\n *\n * @param {Array} a the array of vectors to iterate over\n * @param {Number} stride Number of elements between the start of each vec4. If 0 assumes tightly packed\n * @param {Number} offset Number of elements to skip at the beginning of the array\n * @param {Number} count Number of vec4s to iterate over. If 0 iterates over entire array\n * @param {Function} fn Function to call for each vector in the array\n * @param {Object} [arg] additional argument to pass to fn\n * @returns {Array} a\n * @function\n */\nvec4.forEach = (function() {\n var vec = vec4.create();\n\n return function(a, stride, offset, count, fn, arg) {\n var i, l;\n if(!stride) {\n stride = 4;\n }\n\n if(!offset) {\n offset = 0;\n }\n \n if(count) {\n l = Math.min((count * stride) + offset, a.length);\n } else {\n l = a.length;\n }\n\n for(i = offset; i < l; i += stride) {\n vec[0] = a[i]; vec[1] = a[i+1]; vec[2] = a[i+2]; vec[3] = a[i+3];\n fn(vec, vec, arg);\n a[i] = vec[0]; a[i+1] = vec[1]; a[i+2] = vec[2]; a[i+3] = vec[3];\n }\n \n return a;\n };\n})();\n\n/**\n * Returns a string representation of a vector\n *\n * @param {vec4} vec vector to represent as a string\n * @returns {String} string representation of the vector\n */\nvec4.str = function (a) {\n return 'vec4(' + a[0] + ', ' + a[1] + ', ' + a[2] + ', ' + a[3] + ')';\n};\n\nif(typeof(exports) !== 'undefined') {\n exports.vec4 = vec4;\n}\n;\n/* Copyright (c) 2013, Brandon Jones, Colin MacKenzie IV. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation \n and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE \nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */\n\n/**\n * @class 2x2 Matrix\n * @name mat2\n */\n\nvar mat2 = {};\n\n/**\n * Creates a new identity mat2\n *\n * @returns {mat2} a new 2x2 matrix\n */\nmat2.create = function() {\n var out = new GLMAT_ARRAY_TYPE(4);\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 1;\n return out;\n};\n\n/**\n * Creates a new mat2 initialized with values from an existing matrix\n *\n * @param {mat2} a matrix to clone\n * @returns {mat2} a new 2x2 matrix\n */\nmat2.clone = function(a) {\n var out = new GLMAT_ARRAY_TYPE(4);\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n return out;\n};\n\n/**\n * Copy the values from one mat2 to another\n *\n * @param {mat2} out the receiving matrix\n * @param {mat2} a the source matrix\n * @returns {mat2} out\n */\nmat2.copy = function(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n return out;\n};\n\n/**\n * Set a mat2 to the identity matrix\n *\n * @param {mat2} out the receiving matrix\n * @returns {mat2} out\n */\nmat2.identity = function(out) {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 1;\n return out;\n};\n\n/**\n * Transpose the values of a mat2\n *\n * @param {mat2} out the receiving matrix\n * @param {mat2} a the source matrix\n * @returns {mat2} out\n */\nmat2.transpose = function(out, a) {\n // If we are transposing ourselves we can skip a few steps but have to cache some values\n if (out === a) {\n var a1 = a[1];\n out[1] = a[2];\n out[2] = a1;\n } else {\n out[0] = a[0];\n out[1] = a[2];\n out[2] = a[1];\n out[3] = a[3];\n }\n \n return out;\n};\n\n/**\n * Inverts a mat2\n *\n * @param {mat2} out the receiving matrix\n * @param {mat2} a the source matrix\n * @returns {mat2} out\n */\nmat2.invert = function(out, a) {\n var a0 = a[0], a1 = a[1], a2 = a[2], a3 = a[3],\n\n // Calculate the determinant\n det = a0 * a3 - a2 * a1;\n\n if (!det) {\n return null;\n }\n det = 1.0 / det;\n \n out[0] = a3 * det;\n out[1] = -a1 * det;\n out[2] = -a2 * det;\n out[3] = a0 * det;\n\n return out;\n};\n\n/**\n * Calculates the adjugate of a mat2\n *\n * @param {mat2} out the receiving matrix\n * @param {mat2} a the source matrix\n * @returns {mat2} out\n */\nmat2.adjoint = function(out, a) {\n // Caching this value is nessecary if out == a\n var a0 = a[0];\n out[0] = a[3];\n out[1] = -a[1];\n out[2] = -a[2];\n out[3] = a0;\n\n return out;\n};\n\n/**\n * Calculates the determinant of a mat2\n *\n * @param {mat2} a the source matrix\n * @returns {Number} determinant of a\n */\nmat2.determinant = function (a) {\n return a[0] * a[3] - a[2] * a[1];\n};\n\n/**\n * Multiplies two mat2's\n *\n * @param {mat2} out the receiving matrix\n * @param {mat2} a the first operand\n * @param {mat2} b the second operand\n * @returns {mat2} out\n */\nmat2.multiply = function (out, a, b) {\n var a0 = a[0], a1 = a[1], a2 = a[2], a3 = a[3];\n var b0 = b[0], b1 = b[1], b2 = b[2], b3 = b[3];\n out[0] = a0 * b0 + a2 * b1;\n out[1] = a1 * b0 + a3 * b1;\n out[2] = a0 * b2 + a2 * b3;\n out[3] = a1 * b2 + a3 * b3;\n return out;\n};\n\n/**\n * Alias for {@link mat2.multiply}\n * @function\n */\nmat2.mul = mat2.multiply;\n\n/**\n * Rotates a mat2 by the given angle\n *\n * @param {mat2} out the receiving matrix\n * @param {mat2} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat2} out\n */\nmat2.rotate = function (out, a, rad) {\n var a0 = a[0], a1 = a[1], a2 = a[2], a3 = a[3],\n s = Math.sin(rad),\n c = Math.cos(rad);\n out[0] = a0 * c + a2 * s;\n out[1] = a1 * c + a3 * s;\n out[2] = a0 * -s + a2 * c;\n out[3] = a1 * -s + a3 * c;\n return out;\n};\n\n/**\n * Scales the mat2 by the dimensions in the given vec2\n *\n * @param {mat2} out the receiving matrix\n * @param {mat2} a the matrix to rotate\n * @param {vec2} v the vec2 to scale the matrix by\n * @returns {mat2} out\n **/\nmat2.scale = function(out, a, v) {\n var a0 = a[0], a1 = a[1], a2 = a[2], a3 = a[3],\n v0 = v[0], v1 = v[1];\n out[0] = a0 * v0;\n out[1] = a1 * v0;\n out[2] = a2 * v1;\n out[3] = a3 * v1;\n return out;\n};\n\n/**\n * Returns a string representation of a mat2\n *\n * @param {mat2} mat matrix to represent as a string\n * @returns {String} string representation of the matrix\n */\nmat2.str = function (a) {\n return 'mat2(' + a[0] + ', ' + a[1] + ', ' + a[2] + ', ' + a[3] + ')';\n};\n\n/**\n * Returns Frobenius norm of a mat2\n *\n * @param {mat2} a the matrix to calculate Frobenius norm of\n * @returns {Number} Frobenius norm\n */\nmat2.frob = function (a) {\n return(Math.sqrt(Math.pow(a[0], 2) + Math.pow(a[1], 2) + Math.pow(a[2], 2) + Math.pow(a[3], 2)))\n};\n\n/**\n * Returns L, D and U matrices (Lower triangular, Diagonal and Upper triangular) by factorizing the input matrix\n * @param {mat2} L the lower triangular matrix \n * @param {mat2} D the diagonal matrix \n * @param {mat2} U the upper triangular matrix \n * @param {mat2} a the input matrix to factorize\n */\n\nmat2.LDU = function (L, D, U, a) { \n L[2] = a[2]/a[0]; \n U[0] = a[0]; \n U[1] = a[1]; \n U[3] = a[3] - L[2] * U[1]; \n return [L, D, U]; \n}; \n\nif(typeof(exports) !== 'undefined') {\n exports.mat2 = mat2;\n}\n;\n/* Copyright (c) 2013, Brandon Jones, Colin MacKenzie IV. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation \n and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE \nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */\n\n/**\n * @class 2x3 Matrix\n * @name mat2d\n * \n * @description \n * A mat2d contains six elements defined as:\n *
\n * [a, c, tx,\n *  b, d, ty]\n * 
\n * This is a short form for the 3x3 matrix:\n *
\n * [a, c, tx,\n *  b, d, ty,\n *  0, 0, 1]\n * 
\n * The last row is ignored so the array is shorter and operations are faster.\n */\n\nvar mat2d = {};\n\n/**\n * Creates a new identity mat2d\n *\n * @returns {mat2d} a new 2x3 matrix\n */\nmat2d.create = function() {\n var out = new GLMAT_ARRAY_TYPE(6);\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 1;\n out[4] = 0;\n out[5] = 0;\n return out;\n};\n\n/**\n * Creates a new mat2d initialized with values from an existing matrix\n *\n * @param {mat2d} a matrix to clone\n * @returns {mat2d} a new 2x3 matrix\n */\nmat2d.clone = function(a) {\n var out = new GLMAT_ARRAY_TYPE(6);\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4];\n out[5] = a[5];\n return out;\n};\n\n/**\n * Copy the values from one mat2d to another\n *\n * @param {mat2d} out the receiving matrix\n * @param {mat2d} a the source matrix\n * @returns {mat2d} out\n */\nmat2d.copy = function(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4];\n out[5] = a[5];\n return out;\n};\n\n/**\n * Set a mat2d to the identity matrix\n *\n * @param {mat2d} out the receiving matrix\n * @returns {mat2d} out\n */\nmat2d.identity = function(out) {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 1;\n out[4] = 0;\n out[5] = 0;\n return out;\n};\n\n/**\n * Inverts a mat2d\n *\n * @param {mat2d} out the receiving matrix\n * @param {mat2d} a the source matrix\n * @returns {mat2d} out\n */\nmat2d.invert = function(out, a) {\n var aa = a[0], ab = a[1], ac = a[2], ad = a[3],\n atx = a[4], aty = a[5];\n\n var det = aa * ad - ab * ac;\n if(!det){\n return null;\n }\n det = 1.0 / det;\n\n out[0] = ad * det;\n out[1] = -ab * det;\n out[2] = -ac * det;\n out[3] = aa * det;\n out[4] = (ac * aty - ad * atx) * det;\n out[5] = (ab * atx - aa * aty) * det;\n return out;\n};\n\n/**\n * Calculates the determinant of a mat2d\n *\n * @param {mat2d} a the source matrix\n * @returns {Number} determinant of a\n */\nmat2d.determinant = function (a) {\n return a[0] * a[3] - a[1] * a[2];\n};\n\n/**\n * Multiplies two mat2d's\n *\n * @param {mat2d} out the receiving matrix\n * @param {mat2d} a the first operand\n * @param {mat2d} b the second operand\n * @returns {mat2d} out\n */\nmat2d.multiply = function (out, a, b) {\n var a0 = a[0], a1 = a[1], a2 = a[2], a3 = a[3], a4 = a[4], a5 = a[5],\n b0 = b[0], b1 = b[1], b2 = b[2], b3 = b[3], b4 = b[4], b5 = b[5];\n out[0] = a0 * b0 + a2 * b1;\n out[1] = a1 * b0 + a3 * b1;\n out[2] = a0 * b2 + a2 * b3;\n out[3] = a1 * b2 + a3 * b3;\n out[4] = a0 * b4 + a2 * b5 + a4;\n out[5] = a1 * b4 + a3 * b5 + a5;\n return out;\n};\n\n/**\n * Alias for {@link mat2d.multiply}\n * @function\n */\nmat2d.mul = mat2d.multiply;\n\n\n/**\n * Rotates a mat2d by the given angle\n *\n * @param {mat2d} out the receiving matrix\n * @param {mat2d} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat2d} out\n */\nmat2d.rotate = function (out, a, rad) {\n var a0 = a[0], a1 = a[1], a2 = a[2], a3 = a[3], a4 = a[4], a5 = a[5],\n s = Math.sin(rad),\n c = Math.cos(rad);\n out[0] = a0 * c + a2 * s;\n out[1] = a1 * c + a3 * s;\n out[2] = a0 * -s + a2 * c;\n out[3] = a1 * -s + a3 * c;\n out[4] = a4;\n out[5] = a5;\n return out;\n};\n\n/**\n * Scales the mat2d by the dimensions in the given vec2\n *\n * @param {mat2d} out the receiving matrix\n * @param {mat2d} a the matrix to translate\n * @param {vec2} v the vec2 to scale the matrix by\n * @returns {mat2d} out\n **/\nmat2d.scale = function(out, a, v) {\n var a0 = a[0], a1 = a[1], a2 = a[2], a3 = a[3], a4 = a[4], a5 = a[5],\n v0 = v[0], v1 = v[1];\n out[0] = a0 * v0;\n out[1] = a1 * v0;\n out[2] = a2 * v1;\n out[3] = a3 * v1;\n out[4] = a4;\n out[5] = a5;\n return out;\n};\n\n/**\n * Translates the mat2d by the dimensions in the given vec2\n *\n * @param {mat2d} out the receiving matrix\n * @param {mat2d} a the matrix to translate\n * @param {vec2} v the vec2 to translate the matrix by\n * @returns {mat2d} out\n **/\nmat2d.translate = function(out, a, v) {\n var a0 = a[0], a1 = a[1], a2 = a[2], a3 = a[3], a4 = a[4], a5 = a[5],\n v0 = v[0], v1 = v[1];\n out[0] = a0;\n out[1] = a1;\n out[2] = a2;\n out[3] = a3;\n out[4] = a0 * v0 + a2 * v1 + a4;\n out[5] = a1 * v0 + a3 * v1 + a5;\n return out;\n};\n\n/**\n * Returns a string representation of a mat2d\n *\n * @param {mat2d} a matrix to represent as a string\n * @returns {String} string representation of the matrix\n */\nmat2d.str = function (a) {\n return 'mat2d(' + a[0] + ', ' + a[1] + ', ' + a[2] + ', ' + \n a[3] + ', ' + a[4] + ', ' + a[5] + ')';\n};\n\n/**\n * Returns Frobenius norm of a mat2d\n *\n * @param {mat2d} a the matrix to calculate Frobenius norm of\n * @returns {Number} Frobenius norm\n */\nmat2d.frob = function (a) { \n return(Math.sqrt(Math.pow(a[0], 2) + Math.pow(a[1], 2) + Math.pow(a[2], 2) + Math.pow(a[3], 2) + Math.pow(a[4], 2) + Math.pow(a[5], 2) + 1))\n}; \n\nif(typeof(exports) !== 'undefined') {\n exports.mat2d = mat2d;\n}\n;\n/* Copyright (c) 2013, Brandon Jones, Colin MacKenzie IV. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation \n and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE \nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */\n\n/**\n * @class 3x3 Matrix\n * @name mat3\n */\n\nvar mat3 = {};\n\n/**\n * Creates a new identity mat3\n *\n * @returns {mat3} a new 3x3 matrix\n */\nmat3.create = function() {\n var out = new GLMAT_ARRAY_TYPE(9);\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 1;\n out[5] = 0;\n out[6] = 0;\n out[7] = 0;\n out[8] = 1;\n return out;\n};\n\n/**\n * Copies the upper-left 3x3 values into the given mat3.\n *\n * @param {mat3} out the receiving 3x3 matrix\n * @param {mat4} a the source 4x4 matrix\n * @returns {mat3} out\n */\nmat3.fromMat4 = function(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[4];\n out[4] = a[5];\n out[5] = a[6];\n out[6] = a[8];\n out[7] = a[9];\n out[8] = a[10];\n return out;\n};\n\n/**\n * Creates a new mat3 initialized with values from an existing matrix\n *\n * @param {mat3} a matrix to clone\n * @returns {mat3} a new 3x3 matrix\n */\nmat3.clone = function(a) {\n var out = new GLMAT_ARRAY_TYPE(9);\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n return out;\n};\n\n/**\n * Copy the values from one mat3 to another\n *\n * @param {mat3} out the receiving matrix\n * @param {mat3} a the source matrix\n * @returns {mat3} out\n */\nmat3.copy = function(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n return out;\n};\n\n/**\n * Set a mat3 to the identity matrix\n *\n * @param {mat3} out the receiving matrix\n * @returns {mat3} out\n */\nmat3.identity = function(out) {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 1;\n out[5] = 0;\n out[6] = 0;\n out[7] = 0;\n out[8] = 1;\n return out;\n};\n\n/**\n * Transpose the values of a mat3\n *\n * @param {mat3} out the receiving matrix\n * @param {mat3} a the source matrix\n * @returns {mat3} out\n */\nmat3.transpose = function(out, a) {\n // If we are transposing ourselves we can skip a few steps but have to cache some values\n if (out === a) {\n var a01 = a[1], a02 = a[2], a12 = a[5];\n out[1] = a[3];\n out[2] = a[6];\n out[3] = a01;\n out[5] = a[7];\n out[6] = a02;\n out[7] = a12;\n } else {\n out[0] = a[0];\n out[1] = a[3];\n out[2] = a[6];\n out[3] = a[1];\n out[4] = a[4];\n out[5] = a[7];\n out[6] = a[2];\n out[7] = a[5];\n out[8] = a[8];\n }\n \n return out;\n};\n\n/**\n * Inverts a mat3\n *\n * @param {mat3} out the receiving matrix\n * @param {mat3} a the source matrix\n * @returns {mat3} out\n */\nmat3.invert = function(out, a) {\n var a00 = a[0], a01 = a[1], a02 = a[2],\n a10 = a[3], a11 = a[4], a12 = a[5],\n a20 = a[6], a21 = a[7], a22 = a[8],\n\n b01 = a22 * a11 - a12 * a21,\n b11 = -a22 * a10 + a12 * a20,\n b21 = a21 * a10 - a11 * a20,\n\n // Calculate the determinant\n det = a00 * b01 + a01 * b11 + a02 * b21;\n\n if (!det) { \n return null; \n }\n det = 1.0 / det;\n\n out[0] = b01 * det;\n out[1] = (-a22 * a01 + a02 * a21) * det;\n out[2] = (a12 * a01 - a02 * a11) * det;\n out[3] = b11 * det;\n out[4] = (a22 * a00 - a02 * a20) * det;\n out[5] = (-a12 * a00 + a02 * a10) * det;\n out[6] = b21 * det;\n out[7] = (-a21 * a00 + a01 * a20) * det;\n out[8] = (a11 * a00 - a01 * a10) * det;\n return out;\n};\n\n/**\n * Calculates the adjugate of a mat3\n *\n * @param {mat3} out the receiving matrix\n * @param {mat3} a the source matrix\n * @returns {mat3} out\n */\nmat3.adjoint = function(out, a) {\n var a00 = a[0], a01 = a[1], a02 = a[2],\n a10 = a[3], a11 = a[4], a12 = a[5],\n a20 = a[6], a21 = a[7], a22 = a[8];\n\n out[0] = (a11 * a22 - a12 * a21);\n out[1] = (a02 * a21 - a01 * a22);\n out[2] = (a01 * a12 - a02 * a11);\n out[3] = (a12 * a20 - a10 * a22);\n out[4] = (a00 * a22 - a02 * a20);\n out[5] = (a02 * a10 - a00 * a12);\n out[6] = (a10 * a21 - a11 * a20);\n out[7] = (a01 * a20 - a00 * a21);\n out[8] = (a00 * a11 - a01 * a10);\n return out;\n};\n\n/**\n * Calculates the determinant of a mat3\n *\n * @param {mat3} a the source matrix\n * @returns {Number} determinant of a\n */\nmat3.determinant = function (a) {\n var a00 = a[0], a01 = a[1], a02 = a[2],\n a10 = a[3], a11 = a[4], a12 = a[5],\n a20 = a[6], a21 = a[7], a22 = a[8];\n\n return a00 * (a22 * a11 - a12 * a21) + a01 * (-a22 * a10 + a12 * a20) + a02 * (a21 * a10 - a11 * a20);\n};\n\n/**\n * Multiplies two mat3's\n *\n * @param {mat3} out the receiving matrix\n * @param {mat3} a the first operand\n * @param {mat3} b the second operand\n * @returns {mat3} out\n */\nmat3.multiply = function (out, a, b) {\n var a00 = a[0], a01 = a[1], a02 = a[2],\n a10 = a[3], a11 = a[4], a12 = a[5],\n a20 = a[6], a21 = a[7], a22 = a[8],\n\n b00 = b[0], b01 = b[1], b02 = b[2],\n b10 = b[3], b11 = b[4], b12 = b[5],\n b20 = b[6], b21 = b[7], b22 = b[8];\n\n out[0] = b00 * a00 + b01 * a10 + b02 * a20;\n out[1] = b00 * a01 + b01 * a11 + b02 * a21;\n out[2] = b00 * a02 + b01 * a12 + b02 * a22;\n\n out[3] = b10 * a00 + b11 * a10 + b12 * a20;\n out[4] = b10 * a01 + b11 * a11 + b12 * a21;\n out[5] = b10 * a02 + b11 * a12 + b12 * a22;\n\n out[6] = b20 * a00 + b21 * a10 + b22 * a20;\n out[7] = b20 * a01 + b21 * a11 + b22 * a21;\n out[8] = b20 * a02 + b21 * a12 + b22 * a22;\n return out;\n};\n\n/**\n * Alias for {@link mat3.multiply}\n * @function\n */\nmat3.mul = mat3.multiply;\n\n/**\n * Translate a mat3 by the given vector\n *\n * @param {mat3} out the receiving matrix\n * @param {mat3} a the matrix to translate\n * @param {vec2} v vector to translate by\n * @returns {mat3} out\n */\nmat3.translate = function(out, a, v) {\n var a00 = a[0], a01 = a[1], a02 = a[2],\n a10 = a[3], a11 = a[4], a12 = a[5],\n a20 = a[6], a21 = a[7], a22 = a[8],\n x = v[0], y = v[1];\n\n out[0] = a00;\n out[1] = a01;\n out[2] = a02;\n\n out[3] = a10;\n out[4] = a11;\n out[5] = a12;\n\n out[6] = x * a00 + y * a10 + a20;\n out[7] = x * a01 + y * a11 + a21;\n out[8] = x * a02 + y * a12 + a22;\n return out;\n};\n\n/**\n * Rotates a mat3 by the given angle\n *\n * @param {mat3} out the receiving matrix\n * @param {mat3} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat3} out\n */\nmat3.rotate = function (out, a, rad) {\n var a00 = a[0], a01 = a[1], a02 = a[2],\n a10 = a[3], a11 = a[4], a12 = a[5],\n a20 = a[6], a21 = a[7], a22 = a[8],\n\n s = Math.sin(rad),\n c = Math.cos(rad);\n\n out[0] = c * a00 + s * a10;\n out[1] = c * a01 + s * a11;\n out[2] = c * a02 + s * a12;\n\n out[3] = c * a10 - s * a00;\n out[4] = c * a11 - s * a01;\n out[5] = c * a12 - s * a02;\n\n out[6] = a20;\n out[7] = a21;\n out[8] = a22;\n return out;\n};\n\n/**\n * Scales the mat3 by the dimensions in the given vec2\n *\n * @param {mat3} out the receiving matrix\n * @param {mat3} a the matrix to rotate\n * @param {vec2} v the vec2 to scale the matrix by\n * @returns {mat3} out\n **/\nmat3.scale = function(out, a, v) {\n var x = v[0], y = v[1];\n\n out[0] = x * a[0];\n out[1] = x * a[1];\n out[2] = x * a[2];\n\n out[3] = y * a[3];\n out[4] = y * a[4];\n out[5] = y * a[5];\n\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n return out;\n};\n\n/**\n * Copies the values from a mat2d into a mat3\n *\n * @param {mat3} out the receiving matrix\n * @param {mat2d} a the matrix to copy\n * @returns {mat3} out\n **/\nmat3.fromMat2d = function(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = 0;\n\n out[3] = a[2];\n out[4] = a[3];\n out[5] = 0;\n\n out[6] = a[4];\n out[7] = a[5];\n out[8] = 1;\n return out;\n};\n\n/**\n* Calculates a 3x3 matrix from the given quaternion\n*\n* @param {mat3} out mat3 receiving operation result\n* @param {quat} q Quaternion to create matrix from\n*\n* @returns {mat3} out\n*/\nmat3.fromQuat = function (out, q) {\n var x = q[0], y = q[1], z = q[2], w = q[3],\n x2 = x + x,\n y2 = y + y,\n z2 = z + z,\n\n xx = x * x2,\n yx = y * x2,\n yy = y * y2,\n zx = z * x2,\n zy = z * y2,\n zz = z * z2,\n wx = w * x2,\n wy = w * y2,\n wz = w * z2;\n\n out[0] = 1 - yy - zz;\n out[3] = yx - wz;\n out[6] = zx + wy;\n\n out[1] = yx + wz;\n out[4] = 1 - xx - zz;\n out[7] = zy - wx;\n\n out[2] = zx - wy;\n out[5] = zy + wx;\n out[8] = 1 - xx - yy;\n\n return out;\n};\n\n/**\n* Calculates a 3x3 normal matrix (transpose inverse) from the 4x4 matrix\n*\n* @param {mat3} out mat3 receiving operation result\n* @param {mat4} a Mat4 to derive the normal matrix from\n*\n* @returns {mat3} out\n*/\nmat3.normalFromMat4 = function (out, a) {\n var a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3],\n a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7],\n a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11],\n a30 = a[12], a31 = a[13], a32 = a[14], a33 = a[15],\n\n b00 = a00 * a11 - a01 * a10,\n b01 = a00 * a12 - a02 * a10,\n b02 = a00 * a13 - a03 * a10,\n b03 = a01 * a12 - a02 * a11,\n b04 = a01 * a13 - a03 * a11,\n b05 = a02 * a13 - a03 * a12,\n b06 = a20 * a31 - a21 * a30,\n b07 = a20 * a32 - a22 * a30,\n b08 = a20 * a33 - a23 * a30,\n b09 = a21 * a32 - a22 * a31,\n b10 = a21 * a33 - a23 * a31,\n b11 = a22 * a33 - a23 * a32,\n\n // Calculate the determinant\n det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n\n if (!det) { \n return null; \n }\n det = 1.0 / det;\n\n out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det;\n out[1] = (a12 * b08 - a10 * b11 - a13 * b07) * det;\n out[2] = (a10 * b10 - a11 * b08 + a13 * b06) * det;\n\n out[3] = (a02 * b10 - a01 * b11 - a03 * b09) * det;\n out[4] = (a00 * b11 - a02 * b08 + a03 * b07) * det;\n out[5] = (a01 * b08 - a00 * b10 - a03 * b06) * det;\n\n out[6] = (a31 * b05 - a32 * b04 + a33 * b03) * det;\n out[7] = (a32 * b02 - a30 * b05 - a33 * b01) * det;\n out[8] = (a30 * b04 - a31 * b02 + a33 * b00) * det;\n\n return out;\n};\n\n/**\n * Returns a string representation of a mat3\n *\n * @param {mat3} mat matrix to represent as a string\n * @returns {String} string representation of the matrix\n */\nmat3.str = function (a) {\n return 'mat3(' + a[0] + ', ' + a[1] + ', ' + a[2] + ', ' + \n a[3] + ', ' + a[4] + ', ' + a[5] + ', ' + \n a[6] + ', ' + a[7] + ', ' + a[8] + ')';\n};\n\n/**\n * Returns Frobenius norm of a mat3\n *\n * @param {mat3} a the matrix to calculate Frobenius norm of\n * @returns {Number} Frobenius norm\n */\nmat3.frob = function (a) {\n return(Math.sqrt(Math.pow(a[0], 2) + Math.pow(a[1], 2) + Math.pow(a[2], 2) + Math.pow(a[3], 2) + Math.pow(a[4], 2) + Math.pow(a[5], 2) + Math.pow(a[6], 2) + Math.pow(a[7], 2) + Math.pow(a[8], 2)))\n};\n\n\nif(typeof(exports) !== 'undefined') {\n exports.mat3 = mat3;\n}\n;\n/* Copyright (c) 2013, Brandon Jones, Colin MacKenzie IV. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation \n and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE \nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */\n\n/**\n * @class 4x4 Matrix\n * @name mat4\n */\n\nvar mat4 = {};\n\n/**\n * Creates a new identity mat4\n *\n * @returns {mat4} a new 4x4 matrix\n */\nmat4.create = function() {\n var out = new GLMAT_ARRAY_TYPE(16);\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = 1;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 1;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n};\n\n/**\n * Creates a new mat4 initialized with values from an existing matrix\n *\n * @param {mat4} a matrix to clone\n * @returns {mat4} a new 4x4 matrix\n */\nmat4.clone = function(a) {\n var out = new GLMAT_ARRAY_TYPE(16);\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n out[9] = a[9];\n out[10] = a[10];\n out[11] = a[11];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n return out;\n};\n\n/**\n * Copy the values from one mat4 to another\n *\n * @param {mat4} out the receiving matrix\n * @param {mat4} a the source matrix\n * @returns {mat4} out\n */\nmat4.copy = function(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n out[9] = a[9];\n out[10] = a[10];\n out[11] = a[11];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n return out;\n};\n\n/**\n * Set a mat4 to the identity matrix\n *\n * @param {mat4} out the receiving matrix\n * @returns {mat4} out\n */\nmat4.identity = function(out) {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = 1;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 1;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n};\n\n/**\n * Transpose the values of a mat4\n *\n * @param {mat4} out the receiving matrix\n * @param {mat4} a the source matrix\n * @returns {mat4} out\n */\nmat4.transpose = function(out, a) {\n // If we are transposing ourselves we can skip a few steps but have to cache some values\n if (out === a) {\n var a01 = a[1], a02 = a[2], a03 = a[3],\n a12 = a[6], a13 = a[7],\n a23 = a[11];\n\n out[1] = a[4];\n out[2] = a[8];\n out[3] = a[12];\n out[4] = a01;\n out[6] = a[9];\n out[7] = a[13];\n out[8] = a02;\n out[9] = a12;\n out[11] = a[14];\n out[12] = a03;\n out[13] = a13;\n out[14] = a23;\n } else {\n out[0] = a[0];\n out[1] = a[4];\n out[2] = a[8];\n out[3] = a[12];\n out[4] = a[1];\n out[5] = a[5];\n out[6] = a[9];\n out[7] = a[13];\n out[8] = a[2];\n out[9] = a[6];\n out[10] = a[10];\n out[11] = a[14];\n out[12] = a[3];\n out[13] = a[7];\n out[14] = a[11];\n out[15] = a[15];\n }\n \n return out;\n};\n\n/**\n * Inverts a mat4\n *\n * @param {mat4} out the receiving matrix\n * @param {mat4} a the source matrix\n * @returns {mat4} out\n */\nmat4.invert = function(out, a) {\n var a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3],\n a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7],\n a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11],\n a30 = a[12], a31 = a[13], a32 = a[14], a33 = a[15],\n\n b00 = a00 * a11 - a01 * a10,\n b01 = a00 * a12 - a02 * a10,\n b02 = a00 * a13 - a03 * a10,\n b03 = a01 * a12 - a02 * a11,\n b04 = a01 * a13 - a03 * a11,\n b05 = a02 * a13 - a03 * a12,\n b06 = a20 * a31 - a21 * a30,\n b07 = a20 * a32 - a22 * a30,\n b08 = a20 * a33 - a23 * a30,\n b09 = a21 * a32 - a22 * a31,\n b10 = a21 * a33 - a23 * a31,\n b11 = a22 * a33 - a23 * a32,\n\n // Calculate the determinant\n det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n\n if (!det) { \n return null; \n }\n det = 1.0 / det;\n\n out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det;\n out[1] = (a02 * b10 - a01 * b11 - a03 * b09) * det;\n out[2] = (a31 * b05 - a32 * b04 + a33 * b03) * det;\n out[3] = (a22 * b04 - a21 * b05 - a23 * b03) * det;\n out[4] = (a12 * b08 - a10 * b11 - a13 * b07) * det;\n out[5] = (a00 * b11 - a02 * b08 + a03 * b07) * det;\n out[6] = (a32 * b02 - a30 * b05 - a33 * b01) * det;\n out[7] = (a20 * b05 - a22 * b02 + a23 * b01) * det;\n out[8] = (a10 * b10 - a11 * b08 + a13 * b06) * det;\n out[9] = (a01 * b08 - a00 * b10 - a03 * b06) * det;\n out[10] = (a30 * b04 - a31 * b02 + a33 * b00) * det;\n out[11] = (a21 * b02 - a20 * b04 - a23 * b00) * det;\n out[12] = (a11 * b07 - a10 * b09 - a12 * b06) * det;\n out[13] = (a00 * b09 - a01 * b07 + a02 * b06) * det;\n out[14] = (a31 * b01 - a30 * b03 - a32 * b00) * det;\n out[15] = (a20 * b03 - a21 * b01 + a22 * b00) * det;\n\n return out;\n};\n\n/**\n * Calculates the adjugate of a mat4\n *\n * @param {mat4} out the receiving matrix\n * @param {mat4} a the source matrix\n * @returns {mat4} out\n */\nmat4.adjoint = function(out, a) {\n var a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3],\n a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7],\n a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11],\n a30 = a[12], a31 = a[13], a32 = a[14], a33 = a[15];\n\n out[0] = (a11 * (a22 * a33 - a23 * a32) - a21 * (a12 * a33 - a13 * a32) + a31 * (a12 * a23 - a13 * a22));\n out[1] = -(a01 * (a22 * a33 - a23 * a32) - a21 * (a02 * a33 - a03 * a32) + a31 * (a02 * a23 - a03 * a22));\n out[2] = (a01 * (a12 * a33 - a13 * a32) - a11 * (a02 * a33 - a03 * a32) + a31 * (a02 * a13 - a03 * a12));\n out[3] = -(a01 * (a12 * a23 - a13 * a22) - a11 * (a02 * a23 - a03 * a22) + a21 * (a02 * a13 - a03 * a12));\n out[4] = -(a10 * (a22 * a33 - a23 * a32) - a20 * (a12 * a33 - a13 * a32) + a30 * (a12 * a23 - a13 * a22));\n out[5] = (a00 * (a22 * a33 - a23 * a32) - a20 * (a02 * a33 - a03 * a32) + a30 * (a02 * a23 - a03 * a22));\n out[6] = -(a00 * (a12 * a33 - a13 * a32) - a10 * (a02 * a33 - a03 * a32) + a30 * (a02 * a13 - a03 * a12));\n out[7] = (a00 * (a12 * a23 - a13 * a22) - a10 * (a02 * a23 - a03 * a22) + a20 * (a02 * a13 - a03 * a12));\n out[8] = (a10 * (a21 * a33 - a23 * a31) - a20 * (a11 * a33 - a13 * a31) + a30 * (a11 * a23 - a13 * a21));\n out[9] = -(a00 * (a21 * a33 - a23 * a31) - a20 * (a01 * a33 - a03 * a31) + a30 * (a01 * a23 - a03 * a21));\n out[10] = (a00 * (a11 * a33 - a13 * a31) - a10 * (a01 * a33 - a03 * a31) + a30 * (a01 * a13 - a03 * a11));\n out[11] = -(a00 * (a11 * a23 - a13 * a21) - a10 * (a01 * a23 - a03 * a21) + a20 * (a01 * a13 - a03 * a11));\n out[12] = -(a10 * (a21 * a32 - a22 * a31) - a20 * (a11 * a32 - a12 * a31) + a30 * (a11 * a22 - a12 * a21));\n out[13] = (a00 * (a21 * a32 - a22 * a31) - a20 * (a01 * a32 - a02 * a31) + a30 * (a01 * a22 - a02 * a21));\n out[14] = -(a00 * (a11 * a32 - a12 * a31) - a10 * (a01 * a32 - a02 * a31) + a30 * (a01 * a12 - a02 * a11));\n out[15] = (a00 * (a11 * a22 - a12 * a21) - a10 * (a01 * a22 - a02 * a21) + a20 * (a01 * a12 - a02 * a11));\n return out;\n};\n\n/**\n * Calculates the determinant of a mat4\n *\n * @param {mat4} a the source matrix\n * @returns {Number} determinant of a\n */\nmat4.determinant = function (a) {\n var a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3],\n a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7],\n a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11],\n a30 = a[12], a31 = a[13], a32 = a[14], a33 = a[15],\n\n b00 = a00 * a11 - a01 * a10,\n b01 = a00 * a12 - a02 * a10,\n b02 = a00 * a13 - a03 * a10,\n b03 = a01 * a12 - a02 * a11,\n b04 = a01 * a13 - a03 * a11,\n b05 = a02 * a13 - a03 * a12,\n b06 = a20 * a31 - a21 * a30,\n b07 = a20 * a32 - a22 * a30,\n b08 = a20 * a33 - a23 * a30,\n b09 = a21 * a32 - a22 * a31,\n b10 = a21 * a33 - a23 * a31,\n b11 = a22 * a33 - a23 * a32;\n\n // Calculate the determinant\n return b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n};\n\n/**\n * Multiplies two mat4's\n *\n * @param {mat4} out the receiving matrix\n * @param {mat4} a the first operand\n * @param {mat4} b the second operand\n * @returns {mat4} out\n */\nmat4.multiply = function (out, a, b) {\n var a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3],\n a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7],\n a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11],\n a30 = a[12], a31 = a[13], a32 = a[14], a33 = a[15];\n\n // Cache only the current line of the second matrix\n var b0 = b[0], b1 = b[1], b2 = b[2], b3 = b[3]; \n out[0] = b0*a00 + b1*a10 + b2*a20 + b3*a30;\n out[1] = b0*a01 + b1*a11 + b2*a21 + b3*a31;\n out[2] = b0*a02 + b1*a12 + b2*a22 + b3*a32;\n out[3] = b0*a03 + b1*a13 + b2*a23 + b3*a33;\n\n b0 = b[4]; b1 = b[5]; b2 = b[6]; b3 = b[7];\n out[4] = b0*a00 + b1*a10 + b2*a20 + b3*a30;\n out[5] = b0*a01 + b1*a11 + b2*a21 + b3*a31;\n out[6] = b0*a02 + b1*a12 + b2*a22 + b3*a32;\n out[7] = b0*a03 + b1*a13 + b2*a23 + b3*a33;\n\n b0 = b[8]; b1 = b[9]; b2 = b[10]; b3 = b[11];\n out[8] = b0*a00 + b1*a10 + b2*a20 + b3*a30;\n out[9] = b0*a01 + b1*a11 + b2*a21 + b3*a31;\n out[10] = b0*a02 + b1*a12 + b2*a22 + b3*a32;\n out[11] = b0*a03 + b1*a13 + b2*a23 + b3*a33;\n\n b0 = b[12]; b1 = b[13]; b2 = b[14]; b3 = b[15];\n out[12] = b0*a00 + b1*a10 + b2*a20 + b3*a30;\n out[13] = b0*a01 + b1*a11 + b2*a21 + b3*a31;\n out[14] = b0*a02 + b1*a12 + b2*a22 + b3*a32;\n out[15] = b0*a03 + b1*a13 + b2*a23 + b3*a33;\n return out;\n};\n\n/**\n * Alias for {@link mat4.multiply}\n * @function\n */\nmat4.mul = mat4.multiply;\n\n/**\n * Translate a mat4 by the given vector\n *\n * @param {mat4} out the receiving matrix\n * @param {mat4} a the matrix to translate\n * @param {vec3} v vector to translate by\n * @returns {mat4} out\n */\nmat4.translate = function (out, a, v) {\n var x = v[0], y = v[1], z = v[2],\n a00, a01, a02, a03,\n a10, a11, a12, a13,\n a20, a21, a22, a23;\n\n if (a === out) {\n out[12] = a[0] * x + a[4] * y + a[8] * z + a[12];\n out[13] = a[1] * x + a[5] * y + a[9] * z + a[13];\n out[14] = a[2] * x + a[6] * y + a[10] * z + a[14];\n out[15] = a[3] * x + a[7] * y + a[11] * z + a[15];\n } else {\n a00 = a[0]; a01 = a[1]; a02 = a[2]; a03 = a[3];\n a10 = a[4]; a11 = a[5]; a12 = a[6]; a13 = a[7];\n a20 = a[8]; a21 = a[9]; a22 = a[10]; a23 = a[11];\n\n out[0] = a00; out[1] = a01; out[2] = a02; out[3] = a03;\n out[4] = a10; out[5] = a11; out[6] = a12; out[7] = a13;\n out[8] = a20; out[9] = a21; out[10] = a22; out[11] = a23;\n\n out[12] = a00 * x + a10 * y + a20 * z + a[12];\n out[13] = a01 * x + a11 * y + a21 * z + a[13];\n out[14] = a02 * x + a12 * y + a22 * z + a[14];\n out[15] = a03 * x + a13 * y + a23 * z + a[15];\n }\n\n return out;\n};\n\n/**\n * Scales the mat4 by the dimensions in the given vec3\n *\n * @param {mat4} out the receiving matrix\n * @param {mat4} a the matrix to scale\n * @param {vec3} v the vec3 to scale the matrix by\n * @returns {mat4} out\n **/\nmat4.scale = function(out, a, v) {\n var x = v[0], y = v[1], z = v[2];\n\n out[0] = a[0] * x;\n out[1] = a[1] * x;\n out[2] = a[2] * x;\n out[3] = a[3] * x;\n out[4] = a[4] * y;\n out[5] = a[5] * y;\n out[6] = a[6] * y;\n out[7] = a[7] * y;\n out[8] = a[8] * z;\n out[9] = a[9] * z;\n out[10] = a[10] * z;\n out[11] = a[11] * z;\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n return out;\n};\n\n/**\n * Rotates a mat4 by the given angle\n *\n * @param {mat4} out the receiving matrix\n * @param {mat4} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @param {vec3} axis the axis to rotate around\n * @returns {mat4} out\n */\nmat4.rotate = function (out, a, rad, axis) {\n var x = axis[0], y = axis[1], z = axis[2],\n len = Math.sqrt(x * x + y * y + z * z),\n s, c, t,\n a00, a01, a02, a03,\n a10, a11, a12, a13,\n a20, a21, a22, a23,\n b00, b01, b02,\n b10, b11, b12,\n b20, b21, b22;\n\n if (Math.abs(len) < GLMAT_EPSILON) { return null; }\n \n len = 1 / len;\n x *= len;\n y *= len;\n z *= len;\n\n s = Math.sin(rad);\n c = Math.cos(rad);\n t = 1 - c;\n\n a00 = a[0]; a01 = a[1]; a02 = a[2]; a03 = a[3];\n a10 = a[4]; a11 = a[5]; a12 = a[6]; a13 = a[7];\n a20 = a[8]; a21 = a[9]; a22 = a[10]; a23 = a[11];\n\n // Construct the elements of the rotation matrix\n b00 = x * x * t + c; b01 = y * x * t + z * s; b02 = z * x * t - y * s;\n b10 = x * y * t - z * s; b11 = y * y * t + c; b12 = z * y * t + x * s;\n b20 = x * z * t + y * s; b21 = y * z * t - x * s; b22 = z * z * t + c;\n\n // Perform rotation-specific matrix multiplication\n out[0] = a00 * b00 + a10 * b01 + a20 * b02;\n out[1] = a01 * b00 + a11 * b01 + a21 * b02;\n out[2] = a02 * b00 + a12 * b01 + a22 * b02;\n out[3] = a03 * b00 + a13 * b01 + a23 * b02;\n out[4] = a00 * b10 + a10 * b11 + a20 * b12;\n out[5] = a01 * b10 + a11 * b11 + a21 * b12;\n out[6] = a02 * b10 + a12 * b11 + a22 * b12;\n out[7] = a03 * b10 + a13 * b11 + a23 * b12;\n out[8] = a00 * b20 + a10 * b21 + a20 * b22;\n out[9] = a01 * b20 + a11 * b21 + a21 * b22;\n out[10] = a02 * b20 + a12 * b21 + a22 * b22;\n out[11] = a03 * b20 + a13 * b21 + a23 * b22;\n\n if (a !== out) { // If the source and destination differ, copy the unchanged last row\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n }\n return out;\n};\n\n/**\n * Rotates a matrix by the given angle around the X axis\n *\n * @param {mat4} out the receiving matrix\n * @param {mat4} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\nmat4.rotateX = function (out, a, rad) {\n var s = Math.sin(rad),\n c = Math.cos(rad),\n a10 = a[4],\n a11 = a[5],\n a12 = a[6],\n a13 = a[7],\n a20 = a[8],\n a21 = a[9],\n a22 = a[10],\n a23 = a[11];\n\n if (a !== out) { // If the source and destination differ, copy the unchanged rows\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n }\n\n // Perform axis-specific matrix multiplication\n out[4] = a10 * c + a20 * s;\n out[5] = a11 * c + a21 * s;\n out[6] = a12 * c + a22 * s;\n out[7] = a13 * c + a23 * s;\n out[8] = a20 * c - a10 * s;\n out[9] = a21 * c - a11 * s;\n out[10] = a22 * c - a12 * s;\n out[11] = a23 * c - a13 * s;\n return out;\n};\n\n/**\n * Rotates a matrix by the given angle around the Y axis\n *\n * @param {mat4} out the receiving matrix\n * @param {mat4} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\nmat4.rotateY = function (out, a, rad) {\n var s = Math.sin(rad),\n c = Math.cos(rad),\n a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a03 = a[3],\n a20 = a[8],\n a21 = a[9],\n a22 = a[10],\n a23 = a[11];\n\n if (a !== out) { // If the source and destination differ, copy the unchanged rows\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n }\n\n // Perform axis-specific matrix multiplication\n out[0] = a00 * c - a20 * s;\n out[1] = a01 * c - a21 * s;\n out[2] = a02 * c - a22 * s;\n out[3] = a03 * c - a23 * s;\n out[8] = a00 * s + a20 * c;\n out[9] = a01 * s + a21 * c;\n out[10] = a02 * s + a22 * c;\n out[11] = a03 * s + a23 * c;\n return out;\n};\n\n/**\n * Rotates a matrix by the given angle around the Z axis\n *\n * @param {mat4} out the receiving matrix\n * @param {mat4} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\nmat4.rotateZ = function (out, a, rad) {\n var s = Math.sin(rad),\n c = Math.cos(rad),\n a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a03 = a[3],\n a10 = a[4],\n a11 = a[5],\n a12 = a[6],\n a13 = a[7];\n\n if (a !== out) { // If the source and destination differ, copy the unchanged last row\n out[8] = a[8];\n out[9] = a[9];\n out[10] = a[10];\n out[11] = a[11];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n }\n\n // Perform axis-specific matrix multiplication\n out[0] = a00 * c + a10 * s;\n out[1] = a01 * c + a11 * s;\n out[2] = a02 * c + a12 * s;\n out[3] = a03 * c + a13 * s;\n out[4] = a10 * c - a00 * s;\n out[5] = a11 * c - a01 * s;\n out[6] = a12 * c - a02 * s;\n out[7] = a13 * c - a03 * s;\n return out;\n};\n\n/**\n * Creates a matrix from a quaternion rotation and vector translation\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.translate(dest, vec);\n * var quatMat = mat4.create();\n * quat4.toMat4(quat, quatMat);\n * mat4.multiply(dest, quatMat);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {quat4} q Rotation quaternion\n * @param {vec3} v Translation vector\n * @returns {mat4} out\n */\nmat4.fromRotationTranslation = function (out, q, v) {\n // Quaternion math\n var x = q[0], y = q[1], z = q[2], w = q[3],\n x2 = x + x,\n y2 = y + y,\n z2 = z + z,\n\n xx = x * x2,\n xy = x * y2,\n xz = x * z2,\n yy = y * y2,\n yz = y * z2,\n zz = z * z2,\n wx = w * x2,\n wy = w * y2,\n wz = w * z2;\n\n out[0] = 1 - (yy + zz);\n out[1] = xy + wz;\n out[2] = xz - wy;\n out[3] = 0;\n out[4] = xy - wz;\n out[5] = 1 - (xx + zz);\n out[6] = yz + wx;\n out[7] = 0;\n out[8] = xz + wy;\n out[9] = yz - wx;\n out[10] = 1 - (xx + yy);\n out[11] = 0;\n out[12] = v[0];\n out[13] = v[1];\n out[14] = v[2];\n out[15] = 1;\n \n return out;\n};\n\nmat4.fromQuat = function (out, q) {\n var x = q[0], y = q[1], z = q[2], w = q[3],\n x2 = x + x,\n y2 = y + y,\n z2 = z + z,\n\n xx = x * x2,\n yx = y * x2,\n yy = y * y2,\n zx = z * x2,\n zy = z * y2,\n zz = z * z2,\n wx = w * x2,\n wy = w * y2,\n wz = w * z2;\n\n out[0] = 1 - yy - zz;\n out[1] = yx + wz;\n out[2] = zx - wy;\n out[3] = 0;\n\n out[4] = yx - wz;\n out[5] = 1 - xx - zz;\n out[6] = zy + wx;\n out[7] = 0;\n\n out[8] = zx + wy;\n out[9] = zy - wx;\n out[10] = 1 - xx - yy;\n out[11] = 0;\n\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n\n return out;\n};\n\n/**\n * Generates a frustum matrix with the given bounds\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {Number} left Left bound of the frustum\n * @param {Number} right Right bound of the frustum\n * @param {Number} bottom Bottom bound of the frustum\n * @param {Number} top Top bound of the frustum\n * @param {Number} near Near bound of the frustum\n * @param {Number} far Far bound of the frustum\n * @returns {mat4} out\n */\nmat4.frustum = function (out, left, right, bottom, top, near, far) {\n var rl = 1 / (right - left),\n tb = 1 / (top - bottom),\n nf = 1 / (near - far);\n out[0] = (near * 2) * rl;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = (near * 2) * tb;\n out[6] = 0;\n out[7] = 0;\n out[8] = (right + left) * rl;\n out[9] = (top + bottom) * tb;\n out[10] = (far + near) * nf;\n out[11] = -1;\n out[12] = 0;\n out[13] = 0;\n out[14] = (far * near * 2) * nf;\n out[15] = 0;\n return out;\n};\n\n/**\n * Generates a perspective projection matrix with the given bounds\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {number} fovy Vertical field of view in radians\n * @param {number} aspect Aspect ratio. typically viewport width/height\n * @param {number} near Near bound of the frustum\n * @param {number} far Far bound of the frustum\n * @returns {mat4} out\n */\nmat4.perspective = function (out, fovy, aspect, near, far) {\n var f = 1.0 / Math.tan(fovy / 2),\n nf = 1 / (near - far);\n out[0] = f / aspect;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = f;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = (far + near) * nf;\n out[11] = -1;\n out[12] = 0;\n out[13] = 0;\n out[14] = (2 * far * near) * nf;\n out[15] = 0;\n return out;\n};\n\n/**\n * Generates a orthogonal projection matrix with the given bounds\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {number} left Left bound of the frustum\n * @param {number} right Right bound of the frustum\n * @param {number} bottom Bottom bound of the frustum\n * @param {number} top Top bound of the frustum\n * @param {number} near Near bound of the frustum\n * @param {number} far Far bound of the frustum\n * @returns {mat4} out\n */\nmat4.ortho = function (out, left, right, bottom, top, near, far) {\n var lr = 1 / (left - right),\n bt = 1 / (bottom - top),\n nf = 1 / (near - far);\n out[0] = -2 * lr;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = -2 * bt;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 2 * nf;\n out[11] = 0;\n out[12] = (left + right) * lr;\n out[13] = (top + bottom) * bt;\n out[14] = (far + near) * nf;\n out[15] = 1;\n return out;\n};\n\n/**\n * Generates a look-at matrix with the given eye position, focal point, and up axis\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {vec3} eye Position of the viewer\n * @param {vec3} center Point the viewer is looking at\n * @param {vec3} up vec3 pointing up\n * @returns {mat4} out\n */\nmat4.lookAt = function (out, eye, center, up) {\n var x0, x1, x2, y0, y1, y2, z0, z1, z2, len,\n eyex = eye[0],\n eyey = eye[1],\n eyez = eye[2],\n upx = up[0],\n upy = up[1],\n upz = up[2],\n centerx = center[0],\n centery = center[1],\n centerz = center[2];\n\n if (Math.abs(eyex - centerx) < GLMAT_EPSILON &&\n Math.abs(eyey - centery) < GLMAT_EPSILON &&\n Math.abs(eyez - centerz) < GLMAT_EPSILON) {\n return mat4.identity(out);\n }\n\n z0 = eyex - centerx;\n z1 = eyey - centery;\n z2 = eyez - centerz;\n\n len = 1 / Math.sqrt(z0 * z0 + z1 * z1 + z2 * z2);\n z0 *= len;\n z1 *= len;\n z2 *= len;\n\n x0 = upy * z2 - upz * z1;\n x1 = upz * z0 - upx * z2;\n x2 = upx * z1 - upy * z0;\n len = Math.sqrt(x0 * x0 + x1 * x1 + x2 * x2);\n if (!len) {\n x0 = 0;\n x1 = 0;\n x2 = 0;\n } else {\n len = 1 / len;\n x0 *= len;\n x1 *= len;\n x2 *= len;\n }\n\n y0 = z1 * x2 - z2 * x1;\n y1 = z2 * x0 - z0 * x2;\n y2 = z0 * x1 - z1 * x0;\n\n len = Math.sqrt(y0 * y0 + y1 * y1 + y2 * y2);\n if (!len) {\n y0 = 0;\n y1 = 0;\n y2 = 0;\n } else {\n len = 1 / len;\n y0 *= len;\n y1 *= len;\n y2 *= len;\n }\n\n out[0] = x0;\n out[1] = y0;\n out[2] = z0;\n out[3] = 0;\n out[4] = x1;\n out[5] = y1;\n out[6] = z1;\n out[7] = 0;\n out[8] = x2;\n out[9] = y2;\n out[10] = z2;\n out[11] = 0;\n out[12] = -(x0 * eyex + x1 * eyey + x2 * eyez);\n out[13] = -(y0 * eyex + y1 * eyey + y2 * eyez);\n out[14] = -(z0 * eyex + z1 * eyey + z2 * eyez);\n out[15] = 1;\n\n return out;\n};\n\n/**\n * Returns a string representation of a mat4\n *\n * @param {mat4} mat matrix to represent as a string\n * @returns {String} string representation of the matrix\n */\nmat4.str = function (a) {\n return 'mat4(' + a[0] + ', ' + a[1] + ', ' + a[2] + ', ' + a[3] + ', ' +\n a[4] + ', ' + a[5] + ', ' + a[6] + ', ' + a[7] + ', ' +\n a[8] + ', ' + a[9] + ', ' + a[10] + ', ' + a[11] + ', ' + \n a[12] + ', ' + a[13] + ', ' + a[14] + ', ' + a[15] + ')';\n};\n\n/**\n * Returns Frobenius norm of a mat4\n *\n * @param {mat4} a the matrix to calculate Frobenius norm of\n * @returns {Number} Frobenius norm\n */\nmat4.frob = function (a) {\n return(Math.sqrt(Math.pow(a[0], 2) + Math.pow(a[1], 2) + Math.pow(a[2], 2) + Math.pow(a[3], 2) + Math.pow(a[4], 2) + Math.pow(a[5], 2) + Math.pow(a[6], 2) + Math.pow(a[7], 2) + Math.pow(a[8], 2) + Math.pow(a[9], 2) + Math.pow(a[10], 2) + Math.pow(a[11], 2) + Math.pow(a[12], 2) + Math.pow(a[13], 2) + Math.pow(a[14], 2) + Math.pow(a[15], 2) ))\n};\n\n\nif(typeof(exports) !== 'undefined') {\n exports.mat4 = mat4;\n}\n;\n/* Copyright (c) 2013, Brandon Jones, Colin MacKenzie IV. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation \n and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE \nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */\n\n/**\n * @class Quaternion\n * @name quat\n */\n\nvar quat = {};\n\n/**\n * Creates a new identity quat\n *\n * @returns {quat} a new quaternion\n */\nquat.create = function() {\n var out = new GLMAT_ARRAY_TYPE(4);\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n out[3] = 1;\n return out;\n};\n\n/**\n * Sets a quaternion to represent the shortest rotation from one\n * vector to another.\n *\n * Both vectors are assumed to be unit length.\n *\n * @param {quat} out the receiving quaternion.\n * @param {vec3} a the initial vector\n * @param {vec3} b the destination vector\n * @returns {quat} out\n */\nquat.rotationTo = (function() {\n var tmpvec3 = vec3.create();\n var xUnitVec3 = vec3.fromValues(1,0,0);\n var yUnitVec3 = vec3.fromValues(0,1,0);\n\n return function(out, a, b) {\n var dot = vec3.dot(a, b);\n if (dot < -0.999999) {\n vec3.cross(tmpvec3, xUnitVec3, a);\n if (vec3.length(tmpvec3) < 0.000001)\n vec3.cross(tmpvec3, yUnitVec3, a);\n vec3.normalize(tmpvec3, tmpvec3);\n quat.setAxisAngle(out, tmpvec3, Math.PI);\n return out;\n } else if (dot > 0.999999) {\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n out[3] = 1;\n return out;\n } else {\n vec3.cross(tmpvec3, a, b);\n out[0] = tmpvec3[0];\n out[1] = tmpvec3[1];\n out[2] = tmpvec3[2];\n out[3] = 1 + dot;\n return quat.normalize(out, out);\n }\n };\n})();\n\n/**\n * Sets the specified quaternion with values corresponding to the given\n * axes. Each axis is a vec3 and is expected to be unit length and\n * perpendicular to all other specified axes.\n *\n * @param {vec3} view the vector representing the viewing direction\n * @param {vec3} right the vector representing the local \"right\" direction\n * @param {vec3} up the vector representing the local \"up\" direction\n * @returns {quat} out\n */\nquat.setAxes = (function() {\n var matr = mat3.create();\n\n return function(out, view, right, up) {\n matr[0] = right[0];\n matr[3] = right[1];\n matr[6] = right[2];\n\n matr[1] = up[0];\n matr[4] = up[1];\n matr[7] = up[2];\n\n matr[2] = -view[0];\n matr[5] = -view[1];\n matr[8] = -view[2];\n\n return quat.normalize(out, quat.fromMat3(out, matr));\n };\n})();\n\n/**\n * Creates a new quat initialized with values from an existing quaternion\n *\n * @param {quat} a quaternion to clone\n * @returns {quat} a new quaternion\n * @function\n */\nquat.clone = vec4.clone;\n\n/**\n * Creates a new quat initialized with the given values\n *\n * @param {Number} x X component\n * @param {Number} y Y component\n * @param {Number} z Z component\n * @param {Number} w W component\n * @returns {quat} a new quaternion\n * @function\n */\nquat.fromValues = vec4.fromValues;\n\n/**\n * Copy the values from one quat to another\n *\n * @param {quat} out the receiving quaternion\n * @param {quat} a the source quaternion\n * @returns {quat} out\n * @function\n */\nquat.copy = vec4.copy;\n\n/**\n * Set the components of a quat to the given values\n *\n * @param {quat} out the receiving quaternion\n * @param {Number} x X component\n * @param {Number} y Y component\n * @param {Number} z Z component\n * @param {Number} w W component\n * @returns {quat} out\n * @function\n */\nquat.set = vec4.set;\n\n/**\n * Set a quat to the identity quaternion\n *\n * @param {quat} out the receiving quaternion\n * @returns {quat} out\n */\nquat.identity = function(out) {\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n out[3] = 1;\n return out;\n};\n\n/**\n * Sets a quat from the given angle and rotation axis,\n * then returns it.\n *\n * @param {quat} out the receiving quaternion\n * @param {vec3} axis the axis around which to rotate\n * @param {Number} rad the angle in radians\n * @returns {quat} out\n **/\nquat.setAxisAngle = function(out, axis, rad) {\n rad = rad * 0.5;\n var s = Math.sin(rad);\n out[0] = s * axis[0];\n out[1] = s * axis[1];\n out[2] = s * axis[2];\n out[3] = Math.cos(rad);\n return out;\n};\n\n/**\n * Adds two quat's\n *\n * @param {quat} out the receiving quaternion\n * @param {quat} a the first operand\n * @param {quat} b the second operand\n * @returns {quat} out\n * @function\n */\nquat.add = vec4.add;\n\n/**\n * Multiplies two quat's\n *\n * @param {quat} out the receiving quaternion\n * @param {quat} a the first operand\n * @param {quat} b the second operand\n * @returns {quat} out\n */\nquat.multiply = function(out, a, b) {\n var ax = a[0], ay = a[1], az = a[2], aw = a[3],\n bx = b[0], by = b[1], bz = b[2], bw = b[3];\n\n out[0] = ax * bw + aw * bx + ay * bz - az * by;\n out[1] = ay * bw + aw * by + az * bx - ax * bz;\n out[2] = az * bw + aw * bz + ax * by - ay * bx;\n out[3] = aw * bw - ax * bx - ay * by - az * bz;\n return out;\n};\n\n/**\n * Alias for {@link quat.multiply}\n * @function\n */\nquat.mul = quat.multiply;\n\n/**\n * Scales a quat by a scalar number\n *\n * @param {quat} out the receiving vector\n * @param {quat} a the vector to scale\n * @param {Number} b amount to scale the vector by\n * @returns {quat} out\n * @function\n */\nquat.scale = vec4.scale;\n\n/**\n * Rotates a quaternion by the given angle about the X axis\n *\n * @param {quat} out quat receiving operation result\n * @param {quat} a quat to rotate\n * @param {number} rad angle (in radians) to rotate\n * @returns {quat} out\n */\nquat.rotateX = function (out, a, rad) {\n rad *= 0.5; \n\n var ax = a[0], ay = a[1], az = a[2], aw = a[3],\n bx = Math.sin(rad), bw = Math.cos(rad);\n\n out[0] = ax * bw + aw * bx;\n out[1] = ay * bw + az * bx;\n out[2] = az * bw - ay * bx;\n out[3] = aw * bw - ax * bx;\n return out;\n};\n\n/**\n * Rotates a quaternion by the given angle about the Y axis\n *\n * @param {quat} out quat receiving operation result\n * @param {quat} a quat to rotate\n * @param {number} rad angle (in radians) to rotate\n * @returns {quat} out\n */\nquat.rotateY = function (out, a, rad) {\n rad *= 0.5; \n\n var ax = a[0], ay = a[1], az = a[2], aw = a[3],\n by = Math.sin(rad), bw = Math.cos(rad);\n\n out[0] = ax * bw - az * by;\n out[1] = ay * bw + aw * by;\n out[2] = az * bw + ax * by;\n out[3] = aw * bw - ay * by;\n return out;\n};\n\n/**\n * Rotates a quaternion by the given angle about the Z axis\n *\n * @param {quat} out quat receiving operation result\n * @param {quat} a quat to rotate\n * @param {number} rad angle (in radians) to rotate\n * @returns {quat} out\n */\nquat.rotateZ = function (out, a, rad) {\n rad *= 0.5; \n\n var ax = a[0], ay = a[1], az = a[2], aw = a[3],\n bz = Math.sin(rad), bw = Math.cos(rad);\n\n out[0] = ax * bw + ay * bz;\n out[1] = ay * bw - ax * bz;\n out[2] = az * bw + aw * bz;\n out[3] = aw * bw - az * bz;\n return out;\n};\n\n/**\n * Calculates the W component of a quat from the X, Y, and Z components.\n * Assumes that quaternion is 1 unit in length.\n * Any existing W component will be ignored.\n *\n * @param {quat} out the receiving quaternion\n * @param {quat} a quat to calculate W component of\n * @returns {quat} out\n */\nquat.calculateW = function (out, a) {\n var x = a[0], y = a[1], z = a[2];\n\n out[0] = x;\n out[1] = y;\n out[2] = z;\n out[3] = Math.sqrt(Math.abs(1.0 - x * x - y * y - z * z));\n return out;\n};\n\n/**\n * Calculates the dot product of two quat's\n *\n * @param {quat} a the first operand\n * @param {quat} b the second operand\n * @returns {Number} dot product of a and b\n * @function\n */\nquat.dot = vec4.dot;\n\n/**\n * Performs a linear interpolation between two quat's\n *\n * @param {quat} out the receiving quaternion\n * @param {quat} a the first operand\n * @param {quat} b the second operand\n * @param {Number} t interpolation amount between the two inputs\n * @returns {quat} out\n * @function\n */\nquat.lerp = vec4.lerp;\n\n/**\n * Performs a spherical linear interpolation between two quat\n *\n * @param {quat} out the receiving quaternion\n * @param {quat} a the first operand\n * @param {quat} b the second operand\n * @param {Number} t interpolation amount between the two inputs\n * @returns {quat} out\n */\nquat.slerp = function (out, a, b, t) {\n // benchmarks:\n // http://jsperf.com/quaternion-slerp-implementations\n\n var ax = a[0], ay = a[1], az = a[2], aw = a[3],\n bx = b[0], by = b[1], bz = b[2], bw = b[3];\n\n var omega, cosom, sinom, scale0, scale1;\n\n // calc cosine\n cosom = ax * bx + ay * by + az * bz + aw * bw;\n // adjust signs (if necessary)\n if ( cosom < 0.0 ) {\n cosom = -cosom;\n bx = - bx;\n by = - by;\n bz = - bz;\n bw = - bw;\n }\n // calculate coefficients\n if ( (1.0 - cosom) > 0.000001 ) {\n // standard case (slerp)\n omega = Math.acos(cosom);\n sinom = Math.sin(omega);\n scale0 = Math.sin((1.0 - t) * omega) / sinom;\n scale1 = Math.sin(t * omega) / sinom;\n } else { \n // \"from\" and \"to\" quaternions are very close \n // ... so we can do a linear interpolation\n scale0 = 1.0 - t;\n scale1 = t;\n }\n // calculate final values\n out[0] = scale0 * ax + scale1 * bx;\n out[1] = scale0 * ay + scale1 * by;\n out[2] = scale0 * az + scale1 * bz;\n out[3] = scale0 * aw + scale1 * bw;\n \n return out;\n};\n\n/**\n * Calculates the inverse of a quat\n *\n * @param {quat} out the receiving quaternion\n * @param {quat} a quat to calculate inverse of\n * @returns {quat} out\n */\nquat.invert = function(out, a) {\n var a0 = a[0], a1 = a[1], a2 = a[2], a3 = a[3],\n dot = a0*a0 + a1*a1 + a2*a2 + a3*a3,\n invDot = dot ? 1.0/dot : 0;\n \n // TODO: Would be faster to return [0,0,0,0] immediately if dot == 0\n\n out[0] = -a0*invDot;\n out[1] = -a1*invDot;\n out[2] = -a2*invDot;\n out[3] = a3*invDot;\n return out;\n};\n\n/**\n * Calculates the conjugate of a quat\n * If the quaternion is normalized, this function is faster than quat.inverse and produces the same result.\n *\n * @param {quat} out the receiving quaternion\n * @param {quat} a quat to calculate conjugate of\n * @returns {quat} out\n */\nquat.conjugate = function (out, a) {\n out[0] = -a[0];\n out[1] = -a[1];\n out[2] = -a[2];\n out[3] = a[3];\n return out;\n};\n\n/**\n * Calculates the length of a quat\n *\n * @param {quat} a vector to calculate length of\n * @returns {Number} length of a\n * @function\n */\nquat.length = vec4.length;\n\n/**\n * Alias for {@link quat.length}\n * @function\n */\nquat.len = quat.length;\n\n/**\n * Calculates the squared length of a quat\n *\n * @param {quat} a vector to calculate squared length of\n * @returns {Number} squared length of a\n * @function\n */\nquat.squaredLength = vec4.squaredLength;\n\n/**\n * Alias for {@link quat.squaredLength}\n * @function\n */\nquat.sqrLen = quat.squaredLength;\n\n/**\n * Normalize a quat\n *\n * @param {quat} out the receiving quaternion\n * @param {quat} a quaternion to normalize\n * @returns {quat} out\n * @function\n */\nquat.normalize = vec4.normalize;\n\n/**\n * Creates a quaternion from the given 3x3 rotation matrix.\n *\n * NOTE: The resultant quaternion is not normalized, so you should be sure\n * to renormalize the quaternion yourself where necessary.\n *\n * @param {quat} out the receiving quaternion\n * @param {mat3} m rotation matrix\n * @returns {quat} out\n * @function\n */\nquat.fromMat3 = function(out, m) {\n // Algorithm in Ken Shoemake's article in 1987 SIGGRAPH course notes\n // article \"Quaternion Calculus and Fast Animation\".\n var fTrace = m[0] + m[4] + m[8];\n var fRoot;\n\n if ( fTrace > 0.0 ) {\n // |w| > 1/2, may as well choose w > 1/2\n fRoot = Math.sqrt(fTrace + 1.0); // 2w\n out[3] = 0.5 * fRoot;\n fRoot = 0.5/fRoot; // 1/(4w)\n out[0] = (m[5]-m[7])*fRoot;\n out[1] = (m[6]-m[2])*fRoot;\n out[2] = (m[1]-m[3])*fRoot;\n } else {\n // |w| <= 1/2\n var i = 0;\n if ( m[4] > m[0] )\n i = 1;\n if ( m[8] > m[i*3+i] )\n i = 2;\n var j = (i+1)%3;\n var k = (i+2)%3;\n \n fRoot = Math.sqrt(m[i*3+i]-m[j*3+j]-m[k*3+k] + 1.0);\n out[i] = 0.5 * fRoot;\n fRoot = 0.5 / fRoot;\n out[3] = (m[j*3+k] - m[k*3+j]) * fRoot;\n out[j] = (m[j*3+i] + m[i*3+j]) * fRoot;\n out[k] = (m[k*3+i] + m[i*3+k]) * fRoot;\n }\n \n return out;\n};\n\n/**\n * Returns a string representation of a quatenion\n *\n * @param {quat} vec vector to represent as a string\n * @returns {String} string representation of the vector\n */\nquat.str = function (a) {\n return 'quat(' + a[0] + ', ' + a[1] + ', ' + a[2] + ', ' + a[3] + ')';\n};\n\nif(typeof(exports) !== 'undefined') {\n exports.quat = quat;\n}\n;\n\n\n\n\n\n\n\n\n\n\n\n\n\n })(shim.exports);\n})(this);\n","\"use strict\";\n\n\nvar glm = require(\"./gl-matrix\");\nvar elements = require(\"./elements\");\nvar consts = require(\"./const\");\n\nfunction clamp(min, max, value) {\n return Math.min(max, Math.max(min, value));\n}\n\n\nvar newView = module.exports.new = function() {\n return {\n aspect: 1.0,\n zoom: 0.125,\n translation: {\n x: 0.0,\n y: 0.0\n },\n atomScale: 0.6,\n relativeAtomScale: 1.0,\n bondScale: 0.5,\n rotation: glm.mat4.create(),\n ao: 0.75,\n aoRes: 256,\n brightness: 0.5,\n outline: 0.0,\n spf: 32,\n bonds: false,\n bondThreshold: 1.2,\n bondShade: 0.5,\n atomShade: 0.5,\n resolution: 768,\n dofStrength: 0.0,\n dofPosition: 0.5,\n fxaa: 1\n };\n};\n\n\nvar center = module.exports.center = function(v, system) {\n var maxX = -Infinity;\n var minX = Infinity;\n var maxY = -Infinity;\n var minY = Infinity;\n for(var i = 0; i < system.atoms.length; i++) {\n var a = system.atoms[i];\n var r = elements[a.symbol].radius;\n r = 2.5 * v.atomScale * (1 + (r - 1) * v.relativeAtomScale);\n var p = glm.vec4.fromValues(a.x, a.y, a.z, 0);\n glm.vec4.transformMat4(p, p, v.rotation);\n maxX = Math.max(maxX, p[0] + r);\n minX = Math.min(minX, p[0] - r);\n maxY = Math.max(maxY, p[1] + r);\n minY = Math.min(minY, p[1] - r);\n }\n var cx = minX + (maxX - minX) / 2.0;\n var cy = minY + (maxY - minY) / 2.0;\n v.translation.x = cx;\n v.translation.y = cy;\n var scale = Math.max(maxX - minX, maxY - minY);\n v.zoom = 1/(scale * 1.01);\n};\n\n\nvar override = module.exports.override = function(v, data) {\n for (var key in data) {\n v[key] = data[key];\n }\n resolve(v);\n};\n\n\nvar clone = module.exports.clone = function(v) {\n return deserialize(serialize(v));\n};\n\n\nvar serialize = module.exports.serialize = function(v) {\n return JSON.stringify(v);\n};\n\n\nvar deserialize = module.exports.deserialize = function(v) {\n v = JSON.parse(v);\n v.rotation = glm.mat4.clone(v.rotation);\n return v;\n};\n\n\nvar resolve = module.exports.resolve = function(v) {\n v.dofStrength = clamp(0, 1, v.dofStrength);\n v.dofPosition = clamp(0, 1, v.dofPosition);\n v.zoom = clamp(0.001, 2.0, v.zoom);\n v.atomScale = clamp(0, 1, v.atomScale);\n v.relativeAtomScale = clamp(0, 1, v.relativeAtomScale);\n v.bondScale = clamp(0, 1, v.bondScale);\n v.bondShade = clamp(0, 1, v.bondShade);\n v.atomShade = clamp(0, 1, v.atomShade);\n v.ao = clamp(0, 1, v.ao);\n v.brightness = clamp(0, 1, v.brightness);\n v.outline = clamp(0, 1, v.outline);\n};\n\n\nvar translate = module.exports.translate = function(v, dx, dy) {\n v.translation.x -= dx/(v.resolution * v.zoom);\n v.translation.y += dy/(v.resolution * v.zoom);\n resolve(v);\n};\n\n\nvar rotate = module.exports.rotate = function(v, dx, dy) {\n var m = glm.mat4.create();\n glm.mat4.rotateY(m, m, dx * 0.005);\n glm.mat4.rotateX(m, m, dy * 0.005);\n glm.mat4.multiply(v.rotation, m, v.rotation);\n const ao = v.ao; \n v.ao = 0; \n resolve(v);\n v.ao = ao;\n};\n\n\nvar getRect = module.exports.getRect = function(v) {\n var width = 1.0/v.zoom;\n var height = width/v.aspect;\n var bottom = -height/2 + v.translation.y;\n var top = height/2 + v.translation.y;\n var left = -width/2 + v.translation.x;\n var right = width/2 + v.translation.x;\n return {\n bottom: bottom,\n top: top,\n left: left,\n right: right\n };\n};\n\n\nvar getBondRadius = module.exports.getBondRadius = function(v) {\n return v.bondScale * v.atomScale * \n (1 + (consts.MIN_ATOM_RADIUS - 1) * v.relativeAtomScale);\n};\n\n\n","import _curry1 from './_curry1.js';\nimport _isPlaceholder from './_isPlaceholder.js';\n\n/**\n * Optimized internal two-arity curry function.\n *\n * @private\n * @category Function\n * @param {Function} fn The function to curry.\n * @return {Function} The curried function.\n */\nexport default function _curry2(fn) {\n return function f2(a, b) {\n switch (arguments.length) {\n case 0:\n return f2;\n case 1:\n return _isPlaceholder(a) ? f2 : _curry1(function (_b) {\n return fn(a, _b);\n });\n default:\n return _isPlaceholder(a) && _isPlaceholder(b) ? f2 : _isPlaceholder(a) ? _curry1(function (_a) {\n return fn(_a, b);\n }) : _isPlaceholder(b) ? _curry1(function (_b) {\n return fn(a, _b);\n }) : fn(a, b);\n }\n };\n}","import PropTypes from 'prop-types';\nimport React, {Component, lazy, Suspense} from 'react';\nimport LazyLoader from '../LazyLoader';\n\nconst RealAlignmentChart = lazy(LazyLoader.alignmentChart);\n\n/**\n * The Alignment Chart (MSA) component is used to align multiple genomic\n * or proteomic sequences from a FASTA or Clustal file. Among its\n * extensive set of features, the multiple sequence alignment chart\n * can display multiple subplots showing gap and conservation info,\n * alongside industry standard colorscale support and consensus sequence.\n * No matter what size your alignment is, Alignment Chart is able to display\n * your genes or proteins snappily thanks to the underlying WebGL architecture\n * powering the component. You can quickly scroll through your long sequence\n * with a slider or a heatmap overview.\n * Read more about the component here:\n * https://github.com/plotly/react-alignment-viewer\n */\nexport default class AlignmentChart extends Component {\n render() {\n return (\n \n \n \n );\n }\n}\n\nAlignmentChart.propTypes = {\n /**\n * The ID of this component, used to identify dash components\n * in callbacks. The ID needs to be unique across all of the\n * components in an app.\n */\n id: PropTypes.string,\n\n /**\n * Dash-assigned callback that should be called whenever any of the\n * properties change.\n */\n setProps: PropTypes.func,\n\n /**\n * A Dash prop that returns data on clicking, hovering or resizing the viewer.\n */\n eventDatum: PropTypes.string,\n\n /**\n * Input data, either in FASTA or Clustal format.\n */\n data: PropTypes.string,\n\n /**\n *Format type of the input data, either in FASTA or Clustal.\n */\n extension: PropTypes.string,\n\n /**\n * Colorscale in 'buried', 'cinema', 'clustal', 'clustal2', 'helix', 'hydrophobicity'\n * 'lesk', 'mae', 'nucleotide', 'purine', 'strand', 'taylor', 'turn', 'zappo',\n * or your own colorscale as a {'nucleotide': COLOR} dict.\n * Note that this is NOT a standard plotly colorscale.\n */\n colorscale: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n /**\n * Opacity of the main plot as a value between 0 and 1.\n */\n opacity: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n\n /**\n * Color of the nucleotide labels, in common name, hex, rgb or rgba format.\n * If left blank, handled by the colorscale automatically.\n */\n textcolor: PropTypes.string,\n\n /**\n * Size of the nucleotide labels, as a number.\n */\n textsize: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n\n /**\n * Toggles displaying sequence labels at left of alignment\n */\n showlabel: PropTypes.bool,\n\n /**\n * Toggles displaying sequence IDs at left of alignment.\n */\n showid: PropTypes.bool,\n\n /**\n * Enables the display of conservation secondary barplot where the most conserved\n * nucleotides or amino acids get greater bars.\n */\n showconservation: PropTypes.bool,\n\n /**\n * Color of the conservation secondary barplot, in common name, hex, rgb or rgba format.\n */\n conservationcolor: PropTypes.string,\n\n /**\n * Colorscale of the conservation barplot, in Plotly colorscales (e.g. 'Viridis')\n * or as custom Plotly colorscale under a list format.\n * Note that this conservationcolorscale argument\n * does NOT follow the same format as the colorscale argument.\n */\n conservationcolorscale: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.array,\n ]),\n\n /**\n * Opacity of the conservation secondary barplot as a value between 0 and 1.\n */\n conservationopacity: PropTypes.oneOfType([\n PropTypes.number,\n PropTypes.string,\n ]),\n\n /**\n * Whether to use most conserved ratio (MLE) 'conservation'\n * or normalized entropy 'entropy' to determine conservation,\n * which is a value between 0 and 1 where 1 is most conserved.\n */\n conservationmethod: PropTypes.oneOf(['conservation', 'entropy']),\n\n /**\n * Whether to normalize the conservation barchart\n * By multiplying it elementwise with the gap barchart, as to\n * lower the conservation values across sequences regions with many gaps.\n */\n correctgap: PropTypes.bool,\n\n /**\n * Enables the display of gap secondary barplot where the sequence regions\n * with the fewest gaps get the greatest bars.\n */\n showgap: PropTypes.bool,\n\n /**\n * Color of the gap secondary barplot, in common name, hex, rgb or rgba format.\n */\n gapcolor: PropTypes.string,\n\n /**\n * Colorscale of the gap barplot, in Plotly colorscales (e.g. 'Viridis')\n * or as custom Plotly colorscale under a list format.\n * Note that this conservationcolorscale argument\n * does NOT follow the same format as the colorscale argument.\n */\n gapcolorscale: PropTypes.oneOfType([PropTypes.string, PropTypes.array]),\n\n /**\n * Opacity of the gap secondary barplot as a value between 0 and 1.\n */\n gapopacity: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n\n /**\n * If both conservation and gap are enabled,\n * toggles whether to group bars or to stack them as separate subplots.\n * No effect if not both gap and conservation are shown.\n */\n groupbars: PropTypes.bool,\n\n /**\n * Displays toggling the consensus sequence, where each nucleotide in the\n * consensus sequence is the argmax of its distribution at a set nucleotide.\n */\n showconsensus: PropTypes.bool,\n\n /**\n * Sets how many pixels each nucleotide/amino acid on the Alignment Chart\n * takes up horizontally. The total number of tiles (numtiles) seen\n * horizontally is automatically determined by rounding\n * the Viewer width divided by the tile width.\n * the Viewwer width divided by the tile witdth.\n */\n tilewidth: PropTypes.number,\n\n /**\n * Sets how many pixels each nucleotide/amino acid on the Alignment Chart\n * takes up vertically.\n * If enabled, set height dynamically.\n */\n tileheight: PropTypes.number,\n\n /**\n * Toggles whether the overview should be a heatmap, a slider, or none.\n */\n overview: PropTypes.oneOf(['heatmap', 'slider', 'none']),\n\n /**\n * Sets how many tiles to display across horitontally. If enabled,\n * overrides tilewidth and sets the amount of tiles directly based off\n * that value.\n */\n numtiles: PropTypes.number,\n\n /**\n * If overview is set to 'scroll', determines how many tiles to skip\n * with each slider movement.\n * Has no effect if scroll is not enabled (such as with overview or none).\n */\n scrollskip: PropTypes.number,\n\n /**\n * Determines where to start annotating the first tile.\n * If let blank will be automatically determined by Plotly.\n * Equivalent to Plotly's tick0 property.\n * Does not function if overview mode 'slider' is applied. (Current bug)\n */\n tickstart: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n\n /**\n * Determines at what interval to keep annotating the tiles.\n * If left blank will be automatially determined by Plotly.\n * Equivalent to Plotly's dtick property.\n * Does not function if overview mode 'slider' is applied. (Current bug)\n */\n ticksteps: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n\n /**\n * Width of the Viewer.\n * Property takes precedence over tileswidth and numtiles\n * if either of them is set.\n */\n width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n\n /**\n * Width of the Viewer.\n * Property takes precedence over tilesheight if both\n * are set.\n */\n height: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n};\n\nAlignmentChart.defaultProps = {\n // Data\n extension: 'fasta',\n colorscale: 'clustal2',\n opacity: null,\n textcolor: null,\n textsize: 10,\n showlabel: true,\n showid: true,\n showconservation: true,\n conservationcolor: null,\n conservationcolorscale: 'Viridis',\n conservationopacity: null,\n conservationmethod: 'entropy',\n correctgap: true,\n showgap: true,\n gapcolor: 'grey',\n gapcolorscale: null,\n gapopacity: null,\n groupbars: false,\n showconsensus: true,\n // Layout\n tilewidth: 16,\n tileheight: 16,\n numtiles: null,\n overview: 'heatmap',\n scrollskip: 10,\n tickstart: null,\n ticksteps: null,\n // Other\n width: null,\n height: 900,\n};\n\nexport const propTypes = AlignmentChart.propTypes;\nexport const defaultProps = AlignmentChart.defaultProps;\n","import PropTypes from 'prop-types';\nimport React, {Component, lazy, Suspense} from 'react';\nimport LazyLoader from '../LazyLoader';\nimport {TRACK_TYPES} from '../constants/tracks';\n\nconst RealCircos = lazy(LazyLoader.circos);\n\n/**\n * Dash Circos is a library used to analyze and interpret\n * data using a circular layout, based on the popular\n * 'Circos' graph. This Dash Bio component is a useful tool\n * for showcasing relationships bewtween data/datasets in a\n * beautiful way. Please checkout the Dash Bio repository\n * on github to learn more about this API.\n */\nexport default class Circos extends Component {\n render() {\n return (\n \n \n \n );\n }\n}\n\nCircos.defaultProps = {\n config: {},\n size: 800,\n tracks: [],\n};\n\nCircos.propTypes = {\n /**\n * Allow for an SVG snapshot of the Circos graph to be downloaded.\n **/\n enableDownloadSVG: PropTypes.bool,\n\n /**\n * Allow for zooming and panning the Circos graph.\n **/\n enableZoomPan: PropTypes.bool,\n\n /**\n * The ID of the component to be used in Dash callbacks\n */\n id: PropTypes.string,\n\n /**\n * The CSS styling of the div wrapping the component\n */\n style: PropTypes.object,\n\n /**\n * A Dash prop that returns data on clicking or hovering of the tracks.\n * Depending on what is specified for prop \"selectEvent\".\n */\n eventDatum: PropTypes.object,\n\n /**\n * A dictionary used to choose whether tracks should return\n * data on click, hover, or both, with the dash prop \"eventDatum\".\n * The keys of the dictionary represent the index of the list\n * specified for \"tracks\".\n * Ex:\n * selectEvent={\n \"0\": \"hover\",\n \"1\": \"click\",\n \"2\": \"both\"\n },\n */\n selectEvent: PropTypes.object,\n\n /**\n * Dash provided setProps.\n */\n setProps: PropTypes.func,\n\n /**\n * The overall layout of the Circos graph, provided\n * as a list of dictionaries.\n */\n layout: PropTypes.arrayOf(\n PropTypes.shape({\n /**\n * The length of the block.\n */\n len: PropTypes.number.isRequired,\n\n /**\n * The color of the block.\n */\n color: PropTypes.string.isRequired,\n\n /**\n * The labels of the block.\n */\n label: PropTypes.string.isRequired,\n\n /**\n * The id of the block, where it will recieve\n * data from the specified \"track\" id.\n */\n id: PropTypes.string.isRequired,\n })\n ).isRequired,\n\n /**\n * Configuration of overall layout of the graph.\n */\n config: PropTypes.object,\n\n /**\n * The overall size of the SVG container holding the\n * graph. Set on initilization and unchangeable thereafter.\n */\n size: PropTypes.number,\n\n /**\n * Tracks that specify specific layouts.\n * For a complete list of tracks and usage,\n * please check the docs.\n */\n tracks: PropTypes.arrayOf(\n PropTypes.shape({\n /**\n * The id of a specific piece of track data.\n */\n id: PropTypes.string,\n\n /**\n * The data that makes up the track. It can\n * be a Json object.\n */\n data: PropTypes.array.isRequired,\n\n /**\n * The layout of the tracks, where the user\n * can configure innerRadius, outterRadius, ticks,\n * labels, and more.\n */\n config: PropTypes.object,\n\n /**\n * Specify the type of track this is.\n * Please check the docs for a list of tracks you can use,\n * and ensure the name is typed in all capitals.\n **/\n type: PropTypes.oneOf(TRACK_TYPES),\n\n /**\n * Specify what data for tooltipContent is\n * displayed.\n * The entry for the \"name\" key, is any of the keys used in the data loaded into tracks.\n * Ex: \"tooltipContent\": {\"name\": \"block_id\"},\n * To display all data in the dataset use \"all\" as the entry for the key \"name\".\n * Ex: \"tooltipContent\": {\"name\": \"all\"}\n * Ex: This will return (source) + ' > ' + (target) + ': ' + (targetEnd)'.\n * \"tooltipContent\": {\n \"source\": \"block_id\",\n \"target\": \"position\",\n \"targetEnd\": \"value\"\n },\n * Ex: This will return (source)(sourceID) + ' > ' + (target)(targetID) + ': ' (target)(targetEnd)'.\n * \"tooltipContent\": {\n \"source\": \"source\",\n \"sourceID\": \"id\",\n \"target\": \"target\",\n \"targetID\": \"id\",\n \"targetEnd\": \"end\"\n }\n **/\n tooltipContent: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.shape({\n name: PropTypes.string.isRequired,\n }),\n PropTypes.shape({\n source: PropTypes.string.isRequired,\n sourceID: PropTypes.string,\n target: PropTypes.string.isRequired,\n targetEnd: PropTypes.string.isRequired,\n targetID: PropTypes.string,\n }),\n ]),\n /**\n * Specify which dictonary key to grab color values from, in the passed in dataset.\n * This can be a string or an object.\n * If using a string, you can specify hex,\n * RGB, and colors from d3 scale chromatic (Ex: RdYlBu).\n * The key \"name\" is required for this dictionary,\n * where the input for \"name\" points to some list of\n * dictionaries color values.\n * Ex: \"color\": {\"name\": \"some key that refers to color in a data set\"}\n *\n **/\n color: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.shape({\n name: PropTypes.string.isRequired,\n }),\n ]),\n })\n ),\n};\n\nexport const propTypes = Circos.propTypes;\nexport const defaultProps = Circos.defaultProps;\n","import PropTypes from 'prop-types';\nimport React, {Component, lazy, Suspense} from 'react';\nimport LazyLoader from '../LazyLoader';\n\nconst RealIdeogram = lazy(LazyLoader.ideogram);\n\n/**\n * The Ideogram component is used to draw and animate genome-wide\n * datasets for organisms such as human, mouse, and any other\n * eukaryote. The Ideogram component can be used to compare\n * homologous features between chromosomes, and depict\n * haploid, diploid, aneuploid genomes. It can also display\n * annotations on genomic data using histograms and overlays.\n *\n * Reference: https://eweitz.github.io/ideogram/\n * Component's props: https://github.com/eweitz/ideogram/blob/master/api.md\n */\n\nexport default class Ideogram extends Component {\n render() {\n return (\n \n \n \n );\n }\n}\n\nIdeogram.defaultProps = {\n organism: 'human',\n dataDir: 'https://unpkg.com/ideogram@1.5.0/dist/data/bands/native/',\n annotationsColor: '#F00',\n annotationsLayout: 'tracks',\n barWidth: 3,\n chrHeight: 400,\n chrMargin: 10,\n chrWidth: 10,\n ploidy: 1,\n rotatable: true,\n showBandLabels: false,\n showChromosomeLabels: true,\n showAnnotTooltip: true,\n showFullyBanded: true,\n showNonNuclearChromosomes: false,\n};\n\nIdeogram.propTypes = {\n /**\n * The ID used to identify this component in Dash callbacks and used to identify Ideogram\n * instances.\n */\n id: PropTypes.string.isRequired,\n\n /**\n * The component's inline styles\n */\n style: PropTypes.object,\n\n /**\n * Dash specific prop type connecting event handlers to front end.\n */\n setProps: PropTypes.func,\n\n /**\n * The CSS class of the component wrapper\n */\n className: PropTypes.string,\n\n /**\n * Layout of ideogram annotations.\n * One of \"tracks\", \"histogram\", or \"overlay\".\n *\n * \"tracks\": display annotations in tracks beside each chromosome.\n *\n * \"histogram\": display annotations in a histogram. Clusters annotations by location. Each\n * cluster/bin is shown as a bar, the height of which represents the number of annotations on\n * genomic range.\n *\n * \"overlay\": display annotations directly over chromosomes.\n */\n annotationsLayout: PropTypes.oneOf(['tracks', 'histogram', 'overlay']),\n\n /**\n * A list of annotation objects. Annotation objects can also have a name, color, shape, and\n * track index. At the moment there is more keys specified and the docs need updating.\n */\n annotations: PropTypes.arrayOf(\n PropTypes.shape({\n name: PropTypes.string,\n chr: PropTypes.string,\n start: PropTypes.number,\n stop: PropTypes.number,\n })\n ),\n\n /**\n * An absolute or relative URL directing to a JSON file containing annotation objects (JSON).\n */\n annotationsPath: PropTypes.string,\n\n /**\n * Use this prop in a dash callback to return annotationData when hovered.\n * It is read-only, i.e., it cannot be used with dash.dependencies.Output but only with\n * dash.dependencies.Input\n */\n annotationsData: PropTypes.string,\n\n /**\n * A list of objects with metadata for each track, e.g., id, display name, color, shape.\n */\n annotationTracks: PropTypes.arrayOf(PropTypes.object),\n\n /**\n * Not used if annotationsLayout is set to \"overlay\".\n * The height of histogram bars or the size of annotations tracks symbols\n */\n annotationHeight: PropTypes.number,\n\n /**\n * Color of annotations.\n */\n annotationsColor: PropTypes.string,\n\n /**\n * Scaling of histogram bars height\n * Only used if annotationsLayout is set to \"histogram\".\n * One of \"absolute\" or \"relative\".\n *\n * \"absolute\": sets bar height relative to tallest bar in all chromosomes.\n * \"relative\": sets bar height relative to tallest bar in each chromosome.\n */\n histogramScaling: PropTypes.oneOf(['absolute', 'relative']),\n\n /**\n * Pixel width of histogram bars.\n * Only used if annotationsLayout is set to \"histogram\".\n **/\n barWidth: PropTypes.number,\n\n /**\n * Whether to show a tooltip upon mousing over an annotation.\n */\n showAnnotTooltip: PropTypes.bool,\n\n /**\n * Default: latest RefSeq assembly for specified organism.\n * The genome assembly to display.\n * Takes assembly name (e.g., \"GRCh37\"),\n * RefSeq accession (e.g., \"GCF_000306695.2\"),\n * or GenBank accession (e.g., \"GCA_000005005.5\")\n */\n assembly: PropTypes.string,\n\n /**\n * Genomic coordinate range (e.g., \"chr1:104325484-119977655\") for a brush on a\n * chromosome. Useful when ideogram consists of one chromosome and you want to be\n * able to focus on a region within that chromosome,\n * and create an interactive sliding window to other regions\n */\n\n brush: PropTypes.string,\n\n /**\n * A dash callback that is activated when the 'brush' prop is used.\n * It will return an dictionary like so:\n * {'start': , 'end': , 'extent': }\n * where start is the left most edge, end is right most edge, and extent is the total width of\n * the brush.\n * It is read-only, i.e., it cannot be used with dash.dependencies.Output but only with\n * dash.dependencies.Input\n */\n brushData: PropTypes.shape({\n start: PropTypes.string,\n end: PropTypes.string,\n extent: PropTypes.string,\n }),\n\n /**\n * CSS styling and the id of the container holding the Ideogram in\n * react-ideogram.js, this is where all the d3 magic happens.\n */\n container: PropTypes.string,\n\n /**\n * The pixel height of the tallest chromosome in the ideogram\n */\n chrHeight: PropTypes.number,\n\n /**\n * The pixel space of margin between each chromosome.\n */\n chrMargin: PropTypes.number,\n\n /**\n * The pixel width of each chromosome.\n */\n chrWidth: PropTypes.number,\n\n /**\n * A list of the names of chromosomes to display. Useful for depicting a subset of the\n * chromosomes in the genome, e.g., a single chromosome.\n *\n * If Homology (between two different species):\n * Ex: chromosomes={\n * 'human': ['1'],\n * 'mouse': ['4']\n * }\n *\n * General case to specify specific chromosomes:\n * Ex: chromosomes=['1', '2']\n */\n chromosomes: PropTypes.oneOfType([\n PropTypes.arrayOf(PropTypes.string),\n PropTypes.object,\n ]),\n\n /**\n * Absolute or relative URL of the directory containing data needed to draw banded chromosomes.\n * You will need to set up your own database to grab data from a custom database.\n */\n dataDir: PropTypes.string,\n\n /**\n * Organism(s) to show chromosomes for. Supply organism's name as a string (e.g., \"human\") or\n * organism's NCBI Taxonomy ID (taxid, e.g., 9606) to display chromosomes from a single\n * organism, or an array of organisms' names or taxids to display chromosomes from multiple\n * species.\n */\n organism: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n\n /**\n * Provide local JSON organism into this prop from a local user JSON file.\n * DataDir must not be initialized.\n */\n localOrganism: PropTypes.object,\n\n /**\n * Used to compare two chromosomes.\n * The keys \"chrOne\" and \"chrTwo\" represent one chromosome each. Organism is the taxID or name.\n * Start is an array, containing start one and start two, in this order. Stop is an array,\n * containing stop one, and stop two, in this order.\n * Ex: homology={\n * \"chrOne\": {\n * organism\": \"9606\",\n * \"start\": [50000, 155701383],\n * \"stop\": [900000, 156030895]\n * },\n * \"chrTwo\": {\n * organism\": \"10090\",\n * \"start\": [10001, 50000000],\n * \"stop\": [2781479, 57217415]\n * }\n * }\n */\n homology: PropTypes.shape({\n chrOne: PropTypes.shape({\n organism: PropTypes.string.isRequired,\n start: PropTypes.arrayOf(PropTypes.number.isRequired),\n stop: PropTypes.arrayOf(PropTypes.number.isRequired),\n }),\n chrTwo: PropTypes.shape({\n organism: PropTypes.string.isRequired,\n start: PropTypes.arrayOf(PropTypes.number.isRequired),\n stop: PropTypes.arrayOf(PropTypes.number.isRequired),\n }),\n }),\n\n /**\n * Use perspective: 'comparative' to enable annotations between two chromosomes,\n * either within the same organism or different organisms. Used for homology.\n */\n perspective: PropTypes.oneOf(['comparative']),\n\n /**\n * Whether to include abbreviation species name in chromosome label. Used for homology.\n */\n fullChromosomeLabels: PropTypes.bool,\n\n /**\n * The resolution of cytogenetic bands to show for each chromosome.\n * The quantity refers to an approximate value in bands per haploid set (bphs).\n * One of 450, 550, or 850.\n */\n resolution: PropTypes.number,\n\n /**\n * Whether annotations should be filterable or not.\n */\n filterable: PropTypes.bool,\n\n /**\n * The orientation of chromosomes on the page.\n */\n orientation: PropTypes.oneOf(['vertical', 'horizontal']),\n\n /**\n * The ploidy - number of chromosomes to depict for each chromosome set.\n */\n ploidy: PropTypes.number,\n\n /**\n * Description of ploidy in each chromosome set in terms of ancestry composition.\n */\n ploidyDesc: PropTypes.arrayOf(PropTypes.object),\n\n /**\n * A map associating ancestor labels to colors. Used to color\n * chromosomes from different ancestors in polyploid genomes.\n */\n ancestors: PropTypes.object,\n\n /**\n * List of objects describing segments of recombination among chromosomes in a chromosome set.\n */\n rangeSet: PropTypes.arrayOf(PropTypes.object),\n\n /**\n * Whether chromosomes are rotatable on click.\n */\n rotatable: PropTypes.bool,\n\n /**\n * Dash callback that returns true if rotated, and false if not.\n *\n */\n rotated: PropTypes.bool,\n\n /**\n * Useful for omitting chromosome Y in female animals.\n * Currently only supported for organisms that use XY sex-determination.\n */\n sex: PropTypes.oneOf(['male', 'female']),\n\n /**\n * Whether to show chromosome labels, e.g., 1, 2, 3, X, Y.\n */\n showChromosomeLabels: PropTypes.bool,\n\n /**\n * Whether to show cytogenetic band labels, e.g., 1q21.\n **/\n showBandLabels: PropTypes.bool,\n\n /**\n * Whether to show fully banded chromosomes for genomes that have sufficient data. Useful for\n * showing simpler chromosomes of cytogenetically well-characterized organisms, e.g., human,\n * beside chromosomes of less studied organisms, e.g., chimpanzee.\n */\n showFullyBanded: PropTypes.bool,\n\n /**\n * Whether to show non-nuclear chromosomes,\n * e.g., for mitochondrial (MT) and chloroplast (CP) DNA.\n */\n showNonNuclearChromosomes: PropTypes.bool,\n\n /**\n * Callback function to invoke after chromosome has rotated. (React)\n * onDidRotate: PropTypes.func,\n */\n\n /**\n * Dash event callback for hovering over data.\n * onMouseOver: PropTypes.func,\n */\n\n /**\n * Callback function to invoke when brush moves.\n * onBrushMove: PropTypes.func,\n */\n\n /**\n * Callback function to invoke when annotations are drawn. (React)\n * onDrawAnnots: PropTypes.func,\n */\n\n /**\n * Callback function to invoke when chromosomes are loaded,\n * i.e., rendered on the page. (React)\n * onLoad: PropTypes.func,\n */\n\n /**\n * Useful for putting ideogram into a small container,\n * or when dealing with genomes that have many chromosomes.\n * Note: Not fully working, needs to be fixed by developer.\n * rows: PropTypes.number,\n */\n\n /**\n * This is a work in progess and will hopefully be fixed in future releases.\n * https://eweitz.github.io/ideogram/annotations-heatmap\n * heatmaps: PropTypes.arrayOf(PropTypes.object),\n */\n};\n\nexport const defaultProps = Ideogram.defaultProps;\nexport const propTypes = Ideogram.propTypes;\n","import React, {Component, lazy, Suspense} from 'react';\nimport LazyLoader from '../LazyLoader';\nimport PropTypes from 'prop-types';\n\nconst RealIgv = lazy(LazyLoader.igv);\n/**\n * The Igv component is an interactive genome visualization component\n * developed by the Integrative Genomics Viewer (IGV) team. It uses an\n * example integration of igv.js and React (https://www.npmjs.com/package/igv).\n */\nexport default class Igv extends Component {\n render() {\n return (\n \n \n \n );\n }\n}\n\nIgv.defaultProps = {};\n\nIgv.propTypes = {\n /**\n * The ID of this component, used to identify dash components in callbacks.\n * The ID needs to be unique across all of the components in an app.\n */\n id: PropTypes.string,\n\n /**\n * Dash-assigned callback that should be called to report property changes\n * to Dash, to make them available for callbacks.\n */\n setProps: PropTypes.func,\n\n /**\n * Generic style overrides on the plot div\n */\n style: PropTypes.object,\n\n /**\n * className of the component div.\n */\n className: PropTypes.string,\n\n /**\n String identifier defining genome (e.g. \"hg19\"). See https://github.com/igvteam/igv.js/wiki/Reference-Genome\n for details and list of supported identifiers. Note: One (but only one) of\n either genome or reference properties must be set. If both are set,\n the genome property will be ignored.\n */\n\n genome: PropTypes.string,\n\n /**\n Object defining reference genome. see https://github.com/igvteam/igv.js/wiki/Reference-Genome\n Note: One (but only one) of either genome or reference properties must be set. If both are set,\n the genome property will be ignored.\n */\n reference: PropTypes.object,\n\n /**\n Initial genomic location(s). Either a string or an array of strings.\n If an array a viewport is created for each location.\n */\n locus: PropTypes.string,\n\n /**\n * Minimum window size in base pairs when zooming in\n */\n minimumBases: PropTypes.number,\n\n /**\n Array of configuration objects defining tracks initially displayed when app launches.\n see https://github.com/igvteam/igv.js/wiki/Tracks-2.0\n */\n tracks: PropTypes.array,\n};\n\nexport const defaultProps = Igv.defaultProps;\nexport const propTypes = Igv.propTypes;\n","import React, {Component, lazy, Suspense} from 'react';\nimport LazyLoader from '../LazyLoader';\nimport PropTypes from 'prop-types';\nimport {PILEUP_VIZ_TYPES, PILEUP_SOURCE_TYPES} from '../constants/tracks';\n\nconst RealPileup = lazy(LazyLoader.pileup);\n/**\n * The Pileup component is a genome visualization component\n * developed by the the Hammerlab. It uses an\n * example integration of pileup.js and React (https://www.npmjs.com/package/pileup).\n */\nexport default class Pileup extends Component {\n render() {\n return (\n \n \n \n );\n }\n}\n\nPileup.defaultProps = {};\n\nPileup.propTypes = {\n /**\n * The ID of this component, used to identify dash components in callbacks.\n * The ID needs to be unique across all of the components in an app.\n */\n id: PropTypes.string,\n\n /**\n * Dash-assigned callback that should be called to report property changes\n * to Dash, to make them available for callbacks.\n */\n setProps: PropTypes.func,\n\n /**\n * Generic style overrides on the plot div\n */\n style: PropTypes.object,\n\n /**\n * className of the component div.\n */\n className: PropTypes.string,\n\n /**\n Object defining genomic location.\n Of the format: {contig: 'chr17', start: 7512384, stop: 7512544}\n */\n range: PropTypes.exact({\n /**\n * Name of contig to display. (ie. chr17)\n */\n contig: PropTypes.string,\n\n /**\n * Start location to display\n */\n start: PropTypes.number,\n\n /**\n * Stop location to display\n */\n stop: PropTypes.number,\n }),\n\n /**\n Object defining genomic reference.\n */\n reference: PropTypes.exact({\n /**\n * Label to display by reference\n */\n label: PropTypes.string,\n\n /**\n * Url of 2bit file.\n https://genome.ucsc.edu/goldenPath/help/twoBit.html\n */\n url: PropTypes.string,\n }),\n\n /**\n Array of configuration objects defining tracks initially displayed when app launches.\n See https://github.com/hammerlab/pileup.js#usage\n */\n tracks: PropTypes.arrayOf(\n PropTypes.exact({\n /**\n * Name of visualization. Must be one of\n (coverage, genome, genes, features, idiogram, location, scale,\n variants, genotypes, or pileup)\n See https://github.com/hammerlab/pileup.js/blob/master/src/main/pileup.js\n */\n viz: PropTypes.oneOf(PILEUP_VIZ_TYPES),\n\n /**\n * Options that define viz details.\n Options depend on the viz type selected.\n */\n vizOptions: PropTypes.Object,\n\n /**\n * Label to display by track\n */\n label: PropTypes.string,\n\n /**\n * Data source to visualize. Must be one of\n (bam, vcf, alignmentJson, variantJson, featureJson, idiogramJson, cytoBand,\n vcf, twoBit, bigBed, GAReadAlignment, GAVariant, GAFeature, GAGene)\n See https://github.com/hammerlab/pileup.js/blob/master/src/main/pileup.js\n */\n source: PropTypes.oneOf(PILEUP_SOURCE_TYPES),\n\n /**\n * Options that define data source.\n Options depend on the source selected.\n */\n sourceOptions: PropTypes.Object,\n })\n ),\n};\n\nexport const defaultProps = Pileup.defaultProps;\nexport const propTypes = Pileup.propTypes;\n","import PropTypes from 'prop-types';\nimport React, {Component, lazy, Suspense} from 'react';\nimport LazyLoader from '../LazyLoader';\n\nconst RealMolecule2dViewer = lazy(LazyLoader.molecule2dViewer);\n\n/**\n * The Molecule2dViewer component is used to render structural\n * formulae of molecules.\n * Read more about the component here:\n * https://github.com/Autodesk/molecule-2d-for-react\n */\nexport default class Molecule2dViewer extends Component {\n render() {\n return (\n \n \n \n );\n }\n}\n\nMolecule2dViewer.defaultProps = {\n width: 500,\n height: 500,\n modelData: {\n nodes: [],\n links: [],\n },\n};\n\nMolecule2dViewer.propTypes = {\n /**\n * The ID used to identify this component in callbacks.\n */\n id: PropTypes.string,\n\n /**\n * Dash-assigned callback that should be called whenever properties change.\n */\n setProps: PropTypes.func,\n\n /**\n * The selected atom IDs.\n */\n selectedAtomIds: PropTypes.arrayOf(PropTypes.number),\n\n /**\n * The width of the SVG element.\n */\n width: PropTypes.number,\n\n /**\n * The height of the SVG element.\n */\n height: PropTypes.number,\n\n /**\n * Description of the molecule to display.\n */\n modelData: PropTypes.shape({\n nodes: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.number,\n atom: PropTypes.string,\n })\n ),\n links: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.number,\n source: PropTypes.number | PropTypes.shape,\n target: PropTypes.number | PropTypes.shape,\n bond: PropTypes.number,\n strength: PropTypes.number,\n distance: PropTypes.number,\n })\n ),\n }),\n};\n\nexport const defaultProps = Molecule2dViewer.defaultProps;\nexport const propTypes = Molecule2dViewer.propTypes;\n","import PropTypes from 'prop-types';\nimport React, {Component, lazy, Suspense} from 'react';\nimport LazyLoader from '../LazyLoader';\n\nconst RealMolecule3dViewer = lazy(LazyLoader.molecule3dViewer);\n\n/**\n * The Molecule3dViewer component is used to render schematic diagrams\n * of biomolecules. It can display ribbon-structure diagrams, or\n * render atoms in the molecule as sticks or spheres.\n * Read more about the component here:\n * https://github.com/Autodesk/molecule-3d-for-react\n */\nexport default class Molecule3dViewer extends Component {\n render() {\n return (\n \n \n \n );\n }\n}\n\nMolecule3dViewer.defaultProps = {\n selectionType: 'atom',\n backgroundColor: '#FFFFFF',\n backgroundOpacity: 0,\n};\n\nMolecule3dViewer.propTypes = {\n /**\n * The ID used to identify this component in callbacks\n */\n id: PropTypes.string,\n\n /**\n * Dash-assigned callback that should be called whenever properties change\n */\n setProps: PropTypes.func,\n\n /**\n * The selection type - may be atom, residue or chain\n */\n selectionType: PropTypes.oneOf(['atom', 'residue', 'chain']),\n\n /**\n * Property to change the background color of the molecule viewer\n */\n backgroundColor: PropTypes.string,\n\n /**\n * Property to change the background opacity - ranges from 0 to 1\n */\n backgroundOpacity: PropTypes.number,\n\n /**\n * Property that can be used to change the representation of\n * the molecule. Options include sticks, cartoon and sphere\n */\n styles: PropTypes.arrayOf(\n PropTypes.shape({\n color: PropTypes.string,\n visualization_type: PropTypes.oneOf(['cartoon', 'sphere', 'stick']),\n })\n ),\n\n /**\n * The data that will be used to display the molecule in 3D\n * The data will be in JSON format\n * and should have two main dictionaries - atoms, bonds\n */\n modelData: PropTypes.shape({\n atoms: PropTypes.array,\n bonds: PropTypes.array,\n }),\n\n /**\n * Property to either show or hide labels\n */\n atomLabelsShown: PropTypes.bool,\n\n /**\n * Property that stores a list of all selected atoms\n */\n selectedAtomIds: PropTypes.array,\n\n /**\n * Labels corresponding to the atoms of the molecule.\n * Each label has a `text` field, a string containing the label content,\n * and can have many other styling fields as described in\n * https://3dmol.csb.pitt.edu/doc/types.html#LabelSpec\n */\n labels: PropTypes.arrayOf(PropTypes.object),\n\n /**\n * Add an isosurface from volumetric data provided in the `cube_file`\n */\n orbital: PropTypes.exact({\n /**\n * The filepath containing raw volumetric data for vertex coloring\n */\n cube_file: PropTypes.string,\n /**\n * The isovalue to draw the surface at\n */\n iso_val: PropTypes.number,\n /**\n * Transparency of the surface, between 0 and 1\n */\n opacity: PropTypes.number,\n /**\n * Color for the positive value of the isosurface orbital\n */\n positiveVolumetricColor: PropTypes.string,\n /**\n * Color for the negative value of the isosurface orbital\n */\n negativeVolumetricColor: PropTypes.string,\n }),\n\n /**\n * Add a predefined renderable shape objects to the molecule.\n * Valid shape types are Arrow, Sphere, and Cylinder.\n */\n shapes: PropTypes.arrayOf(PropTypes.object),\n\n /**\n * Callback to re-render molecule viewer\n * when modelData is changed\n */\n onRenderNewData: PropTypes.func,\n\n /**\n * Callback to change append selectedAtomIds\n * when a selection is made\n */\n onChangeSelection: PropTypes.func,\n};\n\nexport const defaultProps = Molecule3dViewer.defaultProps;\nexport const propTypes = Molecule3dViewer.propTypes;\n","import PropTypes from 'prop-types';\nimport React, {Component, lazy, Suspense} from 'react';\nimport LazyLoader from '../LazyLoader';\n\nconst RealNeedlePlot = lazy(LazyLoader.needlePlot);\n\n/**\n * The Needle Plot component is used to visualize large datasets\n * containing categorical or numerical data. The lines and markers in\n * the plot correspond to bars in a histogram.\n **/\nexport default class NeedlePlot extends Component {\n render() {\n return (\n \n \n \n );\n }\n}\n\nNeedlePlot.propTypes = {\n /**\n * The ID of this component, used to identify dash components\n * in callbacks. The ID needs to be unique across all of the\n * components in an app.\n */\n id: PropTypes.string,\n\n /**\n * The data that are displayed on the plot\n */\n mutationData: PropTypes.shape({\n /*\n coordinate of mutations on the protein sequence\n */\n x: PropTypes.oneOfType([PropTypes.string, PropTypes.array]),\n /* value (could be the sample count), this property is not necessarily\n relevant, should match x in size\n */\n y: PropTypes.oneOfType([PropTypes.string, PropTypes.array]),\n /*\n type of mutations, should match x in size\n */\n mutationGroups: PropTypes.arrayOf(PropTypes.string),\n /*\n protein domains coordinates on the protein sequence\n */\n domains: PropTypes.array,\n }),\n\n /**\n * Title of the x-axis.\n **/\n xlabel: PropTypes.string,\n\n /**\n * Title of the y-axis.\n **/\n ylabel: PropTypes.string,\n\n /**\n * If true, enables a rangeslider for the x-axis.\n **/\n rangeSlider: PropTypes.bool,\n\n /**\n * Options for the needle marking single site mutations\n */\n needleStyle: PropTypes.shape({\n // Color of the stems of the needles\n stemColor: PropTypes.string,\n // Thickness of the stems of the needles\n stemThickness: PropTypes.number,\n // Decides whether all stems have same height or not\n stemConstHeight: PropTypes.bool,\n // Size of the heads of the needlehead\n headSize: PropTypes.number,\n // Color of the heads of the needlehead\n headColor: PropTypes.oneOfType([\n /* different color for different mutations, must be larger or\n\t equal to the size of the mutationGroup prop\n\t */\n PropTypes.array,\n // same color for all needles\n PropTypes.string,\n ]),\n // Style of the heads of the needlehead\n headSymbol: PropTypes.oneOfType([\n /* different marker for different mutations, must be larger or\n\t equal to the size of the mutationGroup prop\n\t */\n PropTypes.array,\n // same marker for all needles\n PropTypes.string,\n ]),\n }),\n\n /**\n * Options for the protein domain coloring\n */\n domainStyle: PropTypes.shape({\n // Color of the protein domains\n domainColor: PropTypes.array,\n /*\n\tthe prop x sometimes contains smaller domains (e.g. multi-site\n\tmutations), if true, they are displayed\n\t*/\n displayMinorDomains: PropTypes.bool,\n }),\n\n /**\n * Dash-assigned callback that should be called whenever any of the\n * properties change\n */\n setProps: PropTypes.func,\n};\n\nNeedlePlot.defaultProps = {\n mutationData: {\n x: [],\n y: [],\n domains: [],\n mutationGroups: [],\n },\n rangeSlider: false,\n needleStyle: {\n stemColor: '#444',\n stemThickness: 0.5,\n stemConstHeight: false,\n headSize: 5,\n headColor: [\n '#e41a1c',\n '#377eb8',\n '#4daf4a',\n '#984ea3',\n '#ff7f00',\n '#ffff33',\n '#a65628',\n '#f781bf',\n '#999999',\n '#e41a1c',\n '#377eb8',\n '#4daf4a',\n '#984ea3',\n '#ff7f00',\n '#ffff33',\n '#a65628',\n '#f781bf',\n '#999999',\n '#e41a1c',\n ],\n headSymbol: 'circle',\n },\n domainStyle: {\n displayMinorDomains: false,\n domainColor: [\n '#8dd3c7',\n '#ffffb3',\n '#bebada',\n '#fb8072',\n '#80b1d3',\n '#fdb462',\n '#b3de69',\n '#fccde5',\n '#d9d9d9',\n '#bc80bd',\n '#ccebc5',\n '#ffed6f',\n '#8dd3c7',\n '#ffffb3',\n '#bebada',\n '#fb8072',\n '#80b1d3',\n '#fdb462',\n '#b3de69',\n ],\n },\n};\n\nexport const defaultProps = NeedlePlot.defaultProps;\nexport const propTypes = NeedlePlot.propTypes;\n","import React, {Component, lazy, Suspense} from 'react';\nimport LazyLoader from '../LazyLoader';\nimport PropTypes from 'prop-types';\n\nconst RealNglMoleculeViewer = lazy(LazyLoader.nglmoleculeViewer);\n/**\n * The NglMoleculeViewer is used to render schematic diagrams\n * of biomolecules in ribbon-structure representations.\n * Read more about the component here:\n * https://github.com/IvoLeist/dash_ngl\n * Read more about the used WebGL protein viewer here:\n * https://github.com/arose/ngl\n */\nexport default class NglMoleculeViewer extends Component {\n render() {\n return (\n \n \n \n );\n }\n}\n\nconst defaultHeight = '600px';\n\nconst defaultWidth = '600px';\n\nconst defaultStageParameters = {\n quality: 'medium',\n backgroundColor: 'white',\n cameraType: 'perspective',\n};\n\nconst defaultImageParameters = {\n antialias: true,\n transparent: true,\n trim: true,\n defaultFilename: 'dash-bio_ngl_output',\n};\n\nconst defaultData = [\n {\n filename: 'placeholder',\n ext: '',\n selectedValue: 'placeholder',\n chain: 'ALL',\n aaRange: 'ALL',\n chosen: {\n chosenAtoms: '',\n chosenResidues: '',\n },\n color: 'red',\n config: {\n input: '',\n type: 'text/plain',\n },\n uploaded: false,\n resetView: false,\n },\n];\n\nNglMoleculeViewer.defaultProps = {\n data: defaultData,\n width: defaultWidth,\n height: defaultHeight,\n stageParameters: defaultStageParameters,\n imageParameters: defaultImageParameters,\n downloadImage: false,\n molStyles: {\n representations: ['cartoon', 'axes+box'],\n chosenAtomsColor: '#ffffff',\n chosenAtomsRadius: 1,\n molSpacingXaxis: 100,\n sideByside: false,\n },\n};\n\nNglMoleculeViewer.propTypes = {\n /**\n * The ID of this component, used to identify dash components in callbacks.\n * The ID needs to be unique across all of the components in an app.\n */\n id: PropTypes.string,\n\n /**\n * Dash-assigned callback that should be called whenever properties change.\n */\n setProps: PropTypes.func,\n\n /**\n * The width (in px or as a number) of the container\n * in which the molecules will be displayed.\n */\n width: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n\n /**\n * The height (in px or as a number) of the container\n * in which the molecules will be displayed.\n */\n height: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n\n /**\n * Parameters (in JSON format) for the stage object of ngl.\n * Currently implemented are render quality, background color and camera type\n * quality: auto, low, medium, high (default: auto)\n * backgroundColor: white / black (default: white)\n * cameraType: perspective / orthographic (default: perspective)\n */\n stageParameters: PropTypes.exact({\n quality: PropTypes.string,\n backgroundColor: PropTypes.string,\n cameraType: PropTypes.string,\n }),\n\n /**\n * Parameters (in JSON format) for exporting the image\n */\n imageParameters: PropTypes.exact({\n antialias: PropTypes.bool,\n transparent: PropTypes.bool,\n trim: PropTypes.bool,\n defaultFilename: PropTypes.string,\n }),\n\n /**\n * flag if download image was selected\n */\n downloadImage: PropTypes.bool,\n\n /**\n * Variable which defines how many molecules should be shown and/or which chain\n * The following format needs to be used:\n * pdbID1.chain:start-end@atom1,atom2_pdbID2.chain:start-end\n * . indicates that only one chain should be shown\n * : indicates that a specific amino acids range should be shown (e.g. 1-50)\n * @ indicates that chosen atoms should be highlighted (e.g. @50,100,150)\n * _ indicates that more than one protein should be shown\n */\n pdbString: PropTypes.string,\n\n /**\n * The data (in JSON format) that will be used to display the molecule\n * filename: name of the used pdb/cif file\n * ext: file extensions (pdb or cif)\n * selectedValue: pdbString\n * chain: ALL if the whole molecule shoud be displayed, e.g. A for showing only chain A\n * aaRange: ALL if the whole molecule should be displayed, e.g. 1:50 for showing only 50 atoms\n * color: chain color\n * chosen.atoms: string of the chosen Atoms, e.g. 50,100,150\n * --> chosen eatoms changed to colored 'ball'\n * chosen.residues: string of the chosen residues, e.g. 50,100,150\n * --> C alpha of chosen residue changed to colored 'ball'\n * config.input: content of the pdb file\n * config.type: format of config.input\n * uploaded: bool if file from local storage (false) or uploaded by user (true)\n * resetView: bool if the selection did not change but the view should be resettet (true)\n */\n data: PropTypes.arrayOf(\n PropTypes.exact({\n filename: PropTypes.string.isRequired,\n ext: PropTypes.string,\n selectedValue: PropTypes.string.isRequired,\n chain: PropTypes.string.isRequired,\n aaRange: PropTypes.string.isRequired,\n color: PropTypes.string.isRequired,\n chosen: PropTypes.exact({\n residues: PropTypes.string.isRequired,\n atoms: PropTypes.string.isRequired,\n }),\n config: PropTypes.exact({\n input: PropTypes.string.isRequired,\n type: PropTypes.string.isRequired,\n }),\n uploaded: PropTypes.bool.isRequired,\n resetView: PropTypes.bool.isRequired,\n })\n ),\n /**\n * The data (in JSON format) that will be used to style the displayed molecule\n * representations: one or multiple selected molecule representation\n * - Possible molecule styles:\n * 'backbone,'ball+stick','cartoon', 'hyperball','licorice','line',\n * 'ribbon',''rope','spacefill','surface','trace','tube'\n * - Possible additional representations:\n * 'axes','axes+box','helixorient','unitcell'\n * chosenAtomsColor: color of the 'ball+stick' representation of the chosen atoms\n * chosenAtomsRadius: radius of the 'ball+stick' representation of the chosen atoms\n * molSpacingXaxis: distance on the xAxis between each molecule\n */\n molStyles: PropTypes.exact({\n representations: PropTypes.arrayOf(PropTypes.string),\n chosenAtomsColor: PropTypes.string.isRequired,\n chosenAtomsRadius: PropTypes.number.isRequired,\n molSpacingXaxis: PropTypes.number.isRequired,\n sideByside: PropTypes.bool.isRequired,\n }),\n};\n\nexport const defaultProps = NglMoleculeViewer.defaultProps;\nexport const propTypes = NglMoleculeViewer.propTypes;\n","import PropTypes from 'prop-types';\nimport React, {Component, lazy, Suspense} from 'react';\nimport LazyLoader from '../LazyLoader';\n\nconst RealOncoPrint = lazy(LazyLoader.oncoPrint);\n\n/**\n * The OncoPrint component is used to view multiple genetic alteration events\n * through an interactive and zoomable heatmap. It is a React/Dash port of the\n * popular oncoPrint() function from the BioConductor R package.\n * Under the hood, the rendering is done using Plotly.js built upon D3.\n * Plotly's interactivity allows the user to bind clicks and hovers to genetic\n * events, allowing the user to create complex bioinformatic apps or workflows\n * that rely on crossfiltering.\n * Read more about the component here:\n * https://github.com/plotly/react-oncoprint\n */\nexport default class OncoPrint extends Component {\n render() {\n return (\n \n \n \n );\n }\n}\n\nOncoPrint.propTypes = {\n /**\n * The ID of this component, used to identify dash components\n * in callbacks. The ID needs to be unique to the component.\n */\n id: PropTypes.string,\n\n /**\n * Dash-assigned callback that should be called whenever any of the\n * properties change.\n */\n setProps: PropTypes.func,\n\n /**\n * A Dash prop that returns data on clicking, hovering or resizing the viewer.\n */\n eventDatum: PropTypes.object,\n\n /**\n * Input data, in CBioPortal format where each list entry is a dict\n * consisting of 'sample', 'gene', 'alteration', and 'type'\n */\n data: PropTypes.array,\n\n // TODO: Add remove empty columns prop\n\n /**\n * Adjusts the padding (as a proportion of whitespace) between two tracks.\n * Value is a ratio between 0 and 1.\n * Defaults to 0.05 (i.e., 5 percent). If set to 0, plot will look like a heatmap.\n */\n padding: PropTypes.number,\n\n /**\n * If not null, will override the default OncoPrint colorscale.\n * Default OncoPrint colorscale same as CBioPortal implementation.\n * Make your own colrscale as a {'mutation': COLOR} dict.\n * Supported mutation keys are ['MISSENSE, 'INFRAME', 'FUSION',\n * 'AMP', 'GAIN', 'HETLOSS', 'HMODEL', 'UP', 'DOWN']\n * Note that this is NOT a standard plotly colorscale.\n */\n colorscale: PropTypes.oneOfType([PropTypes.bool, PropTypes.object]),\n\n /**\n * Default color for the tracks, in common name, hex, rgb or rgba format.\n * If left blank, will default to a light grey rgb(190, 190, 190).\n */\n backgroundcolor: PropTypes.string,\n\n /**\n *.Toogles whether or not to show a legend on the right side of the plot,\n * with mutation information.\n */\n range: PropTypes.array,\n\n /**\n *.Toogles whether or not to show a legend on the right side of the plot,\n * with mutation information.\n */\n showlegend: PropTypes.bool,\n\n /**\n *.Toogles whether or not to show a heatmap overview of the tracks.\n */\n showoverview: PropTypes.bool,\n\n /**\n * Width of the OncoPrint.\n * Will disable auto-resizing of plots if set.\n */\n width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n\n /**\n * Height of the OncoPrint.\n * Will disable auto-resizing of plots if set.\n */\n height: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n};\n\nOncoPrint.defaultProps = {\n // Layout\n padding: 0.05,\n colorscale: null,\n backgroundcolor: 'rgb(190, 190, 190)',\n range: [null, null],\n showlegend: true,\n showoverview: true,\n width: null,\n height: 500,\n};\n\nexport const defaultProps = OncoPrint.defaultProps;\nexport const propTypes = OncoPrint.propTypes;\n","import PropTypes from 'prop-types';\nimport React, {Component, lazy, Suspense} from 'react';\nimport LazyLoader from '../LazyLoader';\n\nconst RealSequenceViewer = lazy(LazyLoader.sequenceViewer);\n\n/**\n * The sequence viewer component is used to display sequences\n * that represent proteins, strands of genomic information, and\n * more. It can apply a coverage to the sequence supplied (with\n * clickable coverage sections that can display specific information,\n * and an optional legend to describe the color codes used),\n * search through the sequence for specific regex, capture\n * mouse selection events of subparts of the sequence, display a\n * count of the number of nucleotides or amino acids in the\n * sequence,\n * Read more about the component here:\n * https://github.com/FlyBase/react-sequence-viewer\n */\nexport default class SequenceViewer extends Component {\n render() {\n return (\n \n \n \n );\n }\n}\n\nSequenceViewer.defaultProps = {\n sequence: '-',\n showLineNumbers: true,\n wrapAminoAcids: true,\n charsPerLine: 40,\n toolbar: false,\n search: true,\n title: '',\n sequenceMaxHeight: '400px',\n badge: true,\n selection: [],\n coverage: [],\n};\n\n/* eslint-disable consistent-return, no-unused-vars */\n\nSequenceViewer.propTypes = {\n /**\n * The ID used to identify this component in Dash callbacks.\n */\n id: PropTypes.string,\n\n /**\n * The amino acid sequence that will be displayed.\n */\n\n sequence: PropTypes.string,\n\n /**\n * The option of whether or not to display line numbers.\n */\n showLineNumbers: PropTypes.bool,\n\n /**\n * The option of whether or not to display the list of amino acids\n * as broken up into separate lines of a fixed length set by\n * charsPerLine.\n */\n wrapAminoAcids: PropTypes.bool,\n\n /**\n * The number of amino acids that will display per line.\n */\n charsPerLine: PropTypes.number,\n\n /**\n * The option of whether or not to display a toolbar at the top\n * that allows the user to choose the number of letters per line.\n */\n toolbar: PropTypes.bool,\n\n /**\n * The option of whether or not to include a search bar in\n * the header. This supports regex.\n */\n search: PropTypes.bool,\n\n /**\n * A string that displays at the top of the component.\n */\n title: PropTypes.string,\n\n /**\n * The maximum height of the sequence.\n */\n sequenceMaxHeight: PropTypes.string,\n\n /**\n * The option of whether or not to display a badge showing the\n * amino acid count at the top of the component beside the title.\n */\n badge: PropTypes.bool,\n\n /**\n * A highlighted section of the sequence; the color of the highlight\n * can also be defined. Takes a list of format [min, max, color] where\n * min is a number that represents the starting index of the selection,\n * max is a number that represents the stopping index of the selection,\n * and color is a string that defines the highlight color.\n * Cannot be used at the same time as coverage.\n */\n selection: function(props, propName, componentName) {\n if (\n props[propName] !== undefined &&\n ((typeof props[propName][0] !== 'undefined' &&\n typeof props[propName][0] !== 'number') ||\n (typeof props[propName][1] !== 'undefined' &&\n typeof props[propName][1] !== 'number') ||\n (typeof props[propName][2] !== 'undefined' &&\n typeof props[propName][2] !== 'string'))\n ) {\n return new Error(\n 'Invalid prop value. Selection should be an array with type [number, number, string].'\n );\n }\n },\n\n /**\n * A coverage of the entire sequence; each section of the sequence\n * can have its own text color, background color, tooltip (on hover),\n * and an optional underscore. The props start and end represent the\n * beginning and terminating indices of the section in question.\n * Cannot be used at the same time as selection.\n */\n coverage: PropTypes.arrayOf(\n PropTypes.shape({\n start: PropTypes.number,\n end: PropTypes.number,\n color: PropTypes.string,\n bgcolor: PropTypes.string,\n tooltip: PropTypes.string,\n underscore: PropTypes.bool,\n onclick: PropTypes.func,\n })\n ),\n\n /**\n * A legend corresponding to the color codes above (optionally displayed).\n */\n legend: PropTypes.arrayOf(\n PropTypes.shape({\n name: PropTypes.string,\n color: PropTypes.string,\n underscore: PropTypes.bool,\n })\n ),\n\n /**\n * Contains the index of the section that was clicked last in\n * the coverage list supplied.\n */\n\n coverageClicked: PropTypes.number,\n\n /**\n * Contains information about the subsequence selected\n * by the mouse. Start and end refer to the initial and\n * final indices, respectively, of the subsequence, and\n * \"selection\" contains the string that is selected.\n */\n mouseSelection: PropTypes.shape({\n start: PropTypes.number,\n end: PropTypes.number,\n selection: PropTypes.string,\n }),\n\n /**\n * A list of the subparts selected using the\n * \"search\" function or the \"selection\" property.\n */\n subpartSelected: PropTypes.arrayOf(\n PropTypes.shape({\n start: PropTypes.number,\n end: PropTypes.number,\n sequence: PropTypes.string,\n })\n ),\n\n /**\n * Dash-assigned callback that should be called whenever any of the\n * properties change.\n */\n setProps: PropTypes.func,\n};\n\nexport const defaultProps = SequenceViewer.defaultProps;\nexport const propTypes = SequenceViewer.propTypes;\n","import PropTypes from 'prop-types';\nimport React, {Component, lazy, Suspense} from 'react';\nimport LazyLoader from '../LazyLoader';\n\nimport {speckView} from 'speck';\n\nconst RealSpeck = lazy(LazyLoader.speck);\n\n/**\n * The Speck component is a WebGL-based 3D molecule renderer.\n * Read more about the component here:\n * https://github.com/wwwtyro/speck\n **/\nexport default class Speck extends Component {\n render() {\n return (\n \n \n \n );\n }\n}\n\nSpeck.defaultProps = {\n view: speckView.new(),\n data: [],\n};\n\nSpeck.propTypes = {\n /**\n * The ID used to identify this component in Dash callbacks.\n */\n\n id: PropTypes.string,\n\n /**\n * The xyz file data; a list of atoms such that each atom\n * has a dictionary defining the x, y, and z coordinates\n * along with the atom's symbol.\n */\n\n data: PropTypes.arrayOf(\n PropTypes.shape({\n symbol: PropTypes.string,\n x: PropTypes.number,\n y: PropTypes.number,\n z: PropTypes.number,\n })\n ),\n\n /**\n * The option of whether or not to allow scrolling to control\n * the zoom.\n */\n\n scrollZoom: PropTypes.bool,\n\n /**\n * An object that determines and controls various parameters\n * related to how the molecule is displayed.\n */\n view: PropTypes.shape({\n aspect: PropTypes.number,\n zoom: PropTypes.number,\n translation: PropTypes.shape({\n x: PropTypes.number,\n y: PropTypes.number,\n }),\n atomScale: PropTypes.number,\n relativeAtomScale: PropTypes.number,\n bondScale: PropTypes.number,\n rotation: PropTypes.shape({}),\n ao: PropTypes.number,\n aoRes: PropTypes.number,\n brightness: PropTypes.number,\n outline: PropTypes.number,\n spf: PropTypes.number,\n bonds: PropTypes.bool,\n bondThreshold: PropTypes.number,\n bondShade: PropTypes.number,\n atomShade: PropTypes.number,\n resolution: PropTypes.number,\n dofStrength: PropTypes.number,\n dofPosition: PropTypes.number,\n fxaa: PropTypes.number,\n }),\n\n /**\n * One of several pre-loaded views: default, stick-ball, toon,\n * and licorice\n */\n presetView: PropTypes.oneOf(['default', 'stickball', 'toon', 'licorice']),\n\n /**\n * Dash-assigned callback that should be called whenever any of the\n * properties change.\n */\n\n setProps: PropTypes.func,\n};\n\nexport const defaultProps = Speck.defaultProps;\nexport const propTypes = Speck.propTypes;\n","const speckRenderer = require('../src/renderer.js');\nconst speckSystem = require('../src/system.js');\nconst speckView = require('../src/view.js');\nconst speckInteractions = require('../src/interactions.js');\nconst speckPresetViews = require('../src/presets.js');\n\nmodule.exports = {\n speckRenderer,\n speckSystem,\n speckView,\n speckInteractions,\n speckPresetViews\n}\n","\"use strict\";\n\nvar elements = require(\"./elements\");\n\nvar MIN_ATOM_RADIUS = Infinity;\nvar MAX_ATOM_RADIUS = -Infinity;\nfor (var i = 0; i <= 118; i++) {\n MIN_ATOM_RADIUS = Math.min(MIN_ATOM_RADIUS, elements[i].radius);\n MAX_ATOM_RADIUS = Math.max(MAX_ATOM_RADIUS, elements[i].radius);\n}\n\nmodule.exports.MIN_ATOM_RADIUS = MIN_ATOM_RADIUS;\nmodule.exports.MAX_ATOM_RADIUS = MAX_ATOM_RADIUS;","\"use strict\";\n\nvar glm = require(\"./gl-matrix\")\n\nvar elements = require(\"./elements\");\nvar consts = require(\"./const\");\n\nvar newSystem = module.exports.new = function() {\n return {\n atoms: [],\n farAtom: undefined,\n bonds: []\n }\n};\n\n\nvar calculateBonds = module.exports.calculateBonds = function(s) {\n var bonds = [];\n var sorted = s.atoms.slice();\n sorted.sort(function(a, b) {\n return a.z - b.z;\n });\n for (var i = 0; i < sorted.length; i++) {\n var a = sorted[i];\n var j = i + 1;\n while(j < sorted.length && sorted[j].z < sorted[i].z + 2.5 * 2 * consts.MAX_ATOM_RADIUS) {\n var b = sorted[j];\n var l = glm.vec3.fromValues(a.x, a.y, a.z);\n var m = glm.vec3.fromValues(b.x, b.y, b.z);\n var d = glm.vec3.distance(l, m);\n var ea = elements[a.symbol];\n var eb = elements[b.symbol];\n if (d < 2.5*(ea.radius+eb.radius)) {\n bonds.push({\n posA: {\n x: a.x,\n y: a.y,\n z: a.z\n },\n posB: {\n x: b.x,\n y: b.y,\n z: b.z\n },\n radA: ea.radius,\n radB: eb.radius,\n colA: {\n r: ea.color[0],\n g: ea.color[1],\n b: ea.color[2]\n },\n colB: {\n r: eb.color[0],\n g: eb.color[1],\n b: eb.color[2]\n },\n cutoff: d/(ea.radius+eb.radius)\n });\n }\n j++;\n }\n }\n bonds.sort(function(a, b) {\n return a.cutoff - b.cutoff;\n });\n s.bonds = bonds;\n}\n\n\nvar addAtom = module.exports.addAtom = function(s, symbol, x, y, z) {\n s.atoms.push({\n symbol: symbol,\n x: x,\n y: y,\n z: z,\n });\n};\n\nvar getCentroid = module.exports.getCentroid = function(s) {\n var xsum = 0;\n var ysum = 0;\n var zsum = 0;\n for (var i = 0; i < s.atoms.length; i++) {\n xsum += s.atoms[i].x;\n ysum += s.atoms[i].y;\n zsum += s.atoms[i].z;\n }\n return {\n x: xsum/s.atoms.length,\n y: ysum/s.atoms.length,\n z: zsum/s.atoms.length\n };\n};\n\nvar center = module.exports.center = function(s) {\n var shift = getCentroid(s);\n for (var i = 0; i < s.atoms.length; i++) {\n var atom = s.atoms[i];\n atom.x -= shift.x;\n atom.y -= shift.y;\n atom.z -= shift.z;\n }\n}\n\nvar getFarAtom = module.exports.getFarAtom = function(s) {\n if (s.farAtom !== undefined) {\n return s.farAtom;\n }\n s.farAtom = s.atoms[0];\n var maxd = 0.0;\n for (var i = 0; i < s.atoms.length; i++) {\n var atom = s.atoms[i];\n var r = elements[atom.symbol].radius;\n var rd = Math.sqrt(r*r + r*r + r*r) * 2.5;\n var d = Math.sqrt(atom.x*atom.x + atom.y*atom.y + atom.z*atom.z) + rd;\n if (d > maxd) {\n maxd = d;\n s.farAtom = atom;\n }\n }\n return s.farAtom;\n}\n\nvar getRadius = module.exports.getRadius = function(s) {\n var atom = getFarAtom(s);\n var r = consts.MAX_ATOM_RADIUS;\n var rd = Math.sqrt(r*r + r*r + r*r) * 2.5;\n return Math.sqrt(atom.x*atom.x + atom.y*atom.y + atom.z*atom.z) + rd;\n}\n","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"fornac\"] = factory();\n\telse\n\t\troot[\"fornac\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\texports.rnaPlot = exports.RNAGraph = undefined;\n\n\tvar _rnagraph = __webpack_require__(1);\n\n\tObject.defineProperty(exports, 'RNAGraph', {\n\t enumerable: true,\n\t get: function get() {\n\t return _rnagraph.RNAGraph;\n\t }\n\t});\n\n\tvar _rnaplot = __webpack_require__(3);\n\n\tObject.defineProperty(exports, 'rnaPlot', {\n\t enumerable: true,\n\t get: function get() {\n\t return _rnaplot.rnaPlot;\n\t }\n\t});\n\texports.FornaContainer = FornaContainer;\n\n\t__webpack_require__(15);\n\n\tvar _d = __webpack_require__(17);\n\n\tvar _d2 = _interopRequireDefault(_d);\n\n\tvar _simplernaplot = __webpack_require__(4);\n\n\tvar _rnautils = __webpack_require__(2);\n\n\tvar _naview = __webpack_require__(5);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\tfunction FornaContainer(element, passedOptions) {\n\t var self = this;\n\n\t self.options = {\n\t 'displayAllLinks': false,\n\t 'labelInterval': 10,\n\t 'applyForce': true,\n\t 'chargeDistance': 110,\n\t 'friction': 0.35,\n\t 'middleCharge': -30,\n\t 'otherCharge': -30,\n\t 'linkDistanceMultiplier': 15,\n\t 'initialSize': null,\n\t 'layout': 'standard-polygonal',\n\t 'allowPanningAndZooming': true,\n\t 'transitionDuration': 500,\n\t 'resizeSvgOnResize': true //change the size of the svg when resizing the container\n\t //sometimes its beneficial to turn this off, especially when\n\t //performance is an issue\n\t };\n\n\t if (arguments.length > 1) {\n\t for (var option in passedOptions) {\n\t if (self.options.hasOwnProperty(option)) self.options[option] = passedOptions[option];\n\t }\n\t }\n\n\t if (self.options.initialSize !== null) {\n\t self.options.svgW = self.options.initialSize[0];\n\t self.options.svgH = self.options.initialSize[1];\n\t } else {\n\t self.options.svgW = 800;\n\t self.options.svgH = 800;\n\t }\n\n\t var fill = _d2.default.scale.category20();\n\n\t // mouse event vars\n\t var mousedownLink = null,\n\t mousedownNode = null,\n\t mouseupNode = null;\n\n\t var xScale = _d2.default.scale.linear().domain([0, self.options.svgW]).range([0, self.options.svgW]);\n\t var yScale = _d2.default.scale.linear().domain([0, self.options.svgH]).range([0, self.options.svgH]);\n\n\t var graph = self.graph = {\n\t 'nodes': [],\n\t 'links': []\n\t };\n\n\t self.linkStrengths = {\n\t 'pseudoknot': 0.00,\n\t 'proteinChain': 0.00,\n\t 'chainChain': 0.00,\n\t 'intermolecule': 10.00,\n\t 'external': 0.00,\n\t 'other': 10.00\n\t };\n\n\t self.displayParameters = {\n\t 'displayBackground': 'true',\n\t 'displayNumbering': 'true',\n\t 'displayNodeOutline': 'true',\n\t 'displayNodeLabel': 'true',\n\t 'displayLinks': 'true',\n\t 'displayPseudoknotLinks': 'true',\n\t 'displayProteinLinks': 'true'\n\t };\n\n\t self.colorScheme = 'structure';\n\t self.customColors = {};\n\t self.animation = self.options.applyForce;\n\t // don't listen to events because a model window is open somewhere\n\t self.deaf = false;\n\t self.rnas = {};\n\t self.extraLinks = []; //store links between different RNAs\n\n\t Array.prototype.equals = function (array) {\n\t // if the other array is a falsy value, return\n\t if (!array) return false;\n\n\t // compare lengths - can save a lot of time\n\t if (this.length != array.length) return false;\n\n\t for (var i = 0, l = this.length; i < l; i++) {\n\t // Check if we have nested arrays\n\t if (this[i] instanceof Array && array[i] instanceof Array) {\n\t // recurse into the nested arrays\n\t if (!this[i].equals(array[i])) return false;\n\t } else if (this[i] != array[i]) {\n\t // Warning - two different object instances will never be equal: {x:20} != {x:20}\n\t return false;\n\t }\n\t }\n\t return true;\n\t };\n\n\t self.createInitialLayout = function (structure, passedOptions) {\n\t // the default options\n\t var options = {\n\t 'sequence': '',\n\t 'name': 'empty',\n\t 'positions': [],\n\t 'labelInterval': self.options.labelInterval,\n\t 'avoidOthers': true,\n\t 'uids': [],\n\t 'circularizeExternal': true\n\t };\n\n\t if (arguments.length == 2) {\n\t for (var option in passedOptions) {\n\t if (options.hasOwnProperty(option)) options[option] = passedOptions[option];\n\t }\n\t }\n\n\t var rg = new _rnagraph.RNAGraph(options.sequence, structure, options.name);\n\t rg.circularizeExternal = options.circularizeExternal;\n\n\t var rnaJson = rg.recalculateElements();\n\n\t if (options.positions.length === 0) {\n\t // no provided positions means we need to calculate an initial layout\n\n\t if (self.options.layout == 'naview') {\n\t var naview = new _naview.NAView();\n\n\t var naViewPositions = naview.naview_xy_coordinates(rg.pairtable);\n\t options.positions = [];\n\t for (var _i = 0; _i < naViewPositions.nbase; _i++) {\n\t options.positions.push([naViewPositions.x[_i], naViewPositions.y[_i]]);\n\t }\n\t } else {\n\t options.positions = (0, _simplernaplot.simpleXyCoordinates)(rnaJson.pairtable);\n\t }\n\t }\n\n\t rnaJson = rnaJson.elementsToJson().addUids(options.uids).addPositions('nucleotide', options.positions).addLabels(1, options.labelInterval).reinforceStems().reinforceLoops().connectFakeNodes().reassignLinkUids().breakNodesToFakeNodes();\n\n\t return rnaJson;\n\t };\n\n\t self.addRNA = function (structure, passedOptions) {\n\t var rnaJson = self.createInitialLayout(structure, passedOptions);\n\n\t /*\n\t * Code to display the JSONs representing the structure\n\t *\n\t rnaJson.nodes[0].rna = null;\n\t rnaJson.nodes[0].nextNode = null;\n\t rnaJson.links[0].source = null;\n\t rnaJson.links[0].target = null;\n\t console.log(rnaJson.nodes[0]);\n\t console.log(rnaJson.links[0]);\n\t console.log(JSON.stringify(rnaJson.nodes[0],null,2));\n\t console.log(JSON.stringify(rnaJson.links[0],null,2));\n\t */\n\n\t if (arguments.length === 1) passedOptions = {};\n\n\t if ('extraLinks' in passedOptions) {\n\t // presumably the passed in links are within the passed molecule\n\t var newLinks = self.addExternalLinks(rnaJson, passedOptions.extraLinks);\n\n\t self.extraLinks = self.extraLinks.concat(newLinks);\n\t }\n\n\t if ('avoidOthers' in passedOptions) self.addRNAJSON(rnaJson, passedOptions.avoidOthers);else self.addRNAJSON(rnaJson, true);\n\n\t return rnaJson;\n\t };\n\n\t self.addExternalLinks = function (rnaJson, externalLinks) {\n\t var newLinks = [];\n\n\t for (var i = 0; i < externalLinks.length; i++) {\n\t var newLink = { linkType: 'external', value: 1, uid: generateUUID(),\n\t source: null, target: null };\n\t // check if the source node is an array\n\t if (Object.prototype.toString.call(externalLinks[i][0]) === '[object Array]') {\n\t for (var j = 0; j < rnaJson.nodes.length; j++) {\n\t if ('nucs' in rnaJson.nodes[j]) {\n\t if (rnaJson.nodes[j].nucs.equals(externalLinks[i][0])) {\n\t newLink.source = rnaJson.nodes[j];\n\t break;\n\t }\n\t }\n\t }\n\t } else {\n\t for (var j = 0; j < rnaJson.nodes.length; j++) {\n\t if (rnaJson.nodes[j].num == externalLinks[i][0]) {\n\t newLink.source = rnaJson.nodes[j];\n\t }\n\t }\n\t }\n\n\t // check if the target node is an array\n\t if (Object.prototype.toString.call(externalLinks[i][1]) === '[object Array]') {\n\t for (var j = 0; j < rnaJson.nodes.length; j++) {\n\t if ('nucs' in rnaJson.nodes[j]) {\n\t if (rnaJson.nodes[j].nucs.equals(externalLinks[i][1])) {\n\t newLink.target = rnaJson.nodes[j];\n\t }\n\t }\n\t }\n\t } else {\n\t for (var j = 0; j < rnaJson.nodes.length; j++) {\n\t if (rnaJson.nodes[j].num == externalLinks[i][1]) {\n\t newLink.target = rnaJson.nodes[j];\n\t }\n\t }\n\t }\n\n\t if (newLink.source == null || newLink.target == null) {\n\t console.log('ERROR: source or target of new link not found:', newLink, externalLinks[i]);\n\t continue;\n\t }\n\n\t newLinks.push(newLink);\n\t }\n\n\t return newLinks;\n\t };\n\n\t self.addRNAJSON = function (rnaGraph, avoidOthers) {\n\t // Add an RNAGraph, which contains nodes and links as part of the\n\t // structure\n\t // Each RNA will have uid to identify it\n\t // when it is modified, it is replaced in the global list of RNAs\n\t //\n\t var maxX, minX;\n\n\t if (avoidOthers) {\n\t if (self.graph.nodes.length > 0) maxX = _d2.default.max(self.graph.nodes.map(function (d) {\n\t return d.x;\n\t }));else maxX = 0;\n\n\t minX = _d2.default.min(rnaGraph.nodes.map(function (d) {\n\t return d.x;\n\t }));\n\n\t rnaGraph.nodes.forEach(function (node) {\n\t node.x += maxX - minX + 20;\n\t node.px += maxX - minX;\n\t });\n\t }\n\n\t rnaGraph.nodes.forEach(function (node) {\n\t node.rna = rnaGraph;\n\t });\n\n\t self.rnas[rnaGraph.uid] = rnaGraph;\n\t self.recalculateGraph();\n\n\t self.update();\n\t self.centerView();\n\n\t return rnaGraph;\n\t };\n\n\t function magnitude(x) {\n\t return Math.sqrt(x[0] * x[0] + x[1] * x[1]);\n\t }\n\n\t function positionAnyNode(d) {\n\t var endPoint = d;\n\t var startPoint = d.prevNode;\n\t var lengthMult = 6;\n\n\t if (startPoint === null) return;\n\n\t // does this node have a link pointing to it?\n\t if (!d.linked) return;\n\n\t // point back toward the previous node\n\t var u = [-(endPoint.x - startPoint.x), -(endPoint.y - startPoint.y)];\n\t u = [u[0] / magnitude(u), u[1] / magnitude(u)];\n\t var v = [-u[1], u[0]];\n\n\t var arrowTip = [d.radius * u[0], d.radius * u[1]];\n\n\t var path = 'M' + (arrowTip[0] + lengthMult * (u[0] + v[0]) / 2) + ',' + (arrowTip[1] + lengthMult * (u[1] + v[1]) / 2) + 'L' + arrowTip[0] + ',' + arrowTip[1] + 'L' + (arrowTip[0] + lengthMult * (u[0] - v[0]) / 2) + ',' + (arrowTip[1] + lengthMult * (u[1] - v[1]) / 2);\n\n\t _d2.default.select(this).attr('d', path);\n\t }\n\n\t function realLinkFilter(d) {\n\t return d.linkType == 'basepair' || d.linkType == 'backbone' || d.linkType == 'pseudoknot' || d.linkType == 'label_link' || d.linkType == 'external' || d.linkType == 'chain_chain';\n\t }\n\n\t self.transitionRNA = function (newStructure, nextFunction) {\n\t //transition from an RNA which is already displayed to a new structure\n\t var duration = self.options.transitionDuration;\n\n\t var uids = self.graph.nodes.filter(function (d) {\n\t return d.nodeType == 'nucleotide';\n\t }).map(function (d) {\n\t return d.uid;\n\t });\n\n\t var options = { 'uids': uids };\n\t var newRNAJson = self.createInitialLayout(newStructure, options);\n\n\t var gnodes = visNodes.selectAll('g.gnode').data(newRNAJson.nodes, nodeKey);\n\t var duration = self.options.transitionDuration;\n\n\t if (duration === 0) gnodes.attr('transform', function (d) {\n\t return 'translate(' + [d.x, d.y] + ')';\n\t });else {\n\t gnodes.transition().attr('transform', function (d) {\n\t return 'translate(' + [d.x, d.y] + ')';\n\t }).duration(duration);\n\t }\n\n\t var links = visLinks.selectAll('line.link').data(newRNAJson.links.filter(realLinkFilter), linkKey);\n\t var newNodes = self.createNewNodes(gnodes.enter()).attr('transform', function (d) {\n\t if (typeof d.x != 'undefined' && typeof d.y != 'undefined') return 'translate(' + [0, 0] + ')';else return '';\n\t });\n\n\t if (duration === 0) gnodes.exit().remove();else gnodes.exit().transition().attr('transform', function (d) {\n\t if (typeof d.x != 'undefined' && typeof d.y != 'undefined') return 'translate(' + [0, 0] + ')';else return '';\n\t });\n\n\t gnodes.select('path').each(positionAnyNode);\n\n\t self.graph.nodes = gnodes.data();\n\t self.updateStyle();\n\t self.centerView(duration);\n\n\t function endall(transition, callback) {\n\t if (transition.size() === 0) {\n\t setTimeout(callback, duration);\n\t }\n\t var n = 0;\n\t transition.each(function () {\n\t ++n;\n\t }).each('end', function () {\n\t if (! --n) callback.apply(this, arguments);\n\t });\n\t }\n\n\t function addNewLinks() {\n\t var newLinks = self.createNewLinks(links.enter());\n\t self.graph.links = links.data();\n\n\t self.updateStyle();\n\n\t if (typeof nextFunction != 'undefined') nextFunction();\n\t }\n\n\t links.exit().remove();\n\n\t if (duration === 0) {\n\t links.attr('x1', function (d) {\n\t return d.source.x;\n\t }).attr('y1', function (d) {\n\t return d.source.y;\n\t }).attr('x2', function (d) {\n\t return d.target.x;\n\t }).attr('y2', function (d) {\n\t return d.target.y;\n\t });\n\n\t var newLinks = self.createNewLinks(links.enter());\n\t self.graph.links = links.data();\n\n\t self.updateStyle();\n\t } else {\n\t links.transition().attr('x1', function (d) {\n\t return d.source.x;\n\t }).attr('y1', function (d) {\n\t return d.source.y;\n\t }).attr('x2', function (d) {\n\t return d.target.x;\n\t }).attr('y2', function (d) {\n\t return d.target.y;\n\t }).duration(duration).call(endall, addNewLinks);\n\t }\n\n\t if (duration === 0) {\n\t newNodes.attr('transform', function (d) {\n\t if (typeof d.x != 'undefined' && typeof d.y != 'undefined') return 'translate(' + [d.x, d.y] + ')';else return '';\n\t });\n\t } else {\n\t newNodes.transition().attr('transform', function (d) {\n\t if (typeof d.x != 'undefined' && typeof d.y != 'undefined') return 'translate(' + [d.x, d.y] + ')';else return '';\n\t });\n\t }\n\t };\n\n\t self.recalculateGraph = function () {\n\t // Condense all of the individual RNAs into one\n\t // collection of nodes and links\n\t self.graph.nodes = [];\n\t self.graph.links = [];\n\t for (var uid in self.rnas) {\n\t self.graph.nodes = self.graph.nodes.concat(self.rnas[uid].nodes);\n\t self.graph.links = self.graph.links.concat(self.rnas[uid].links);\n\t }\n\n\t // Create a lookup table so that we can access each node\n\t // based on its uid. This will be used to create the links\n\t // between different RNAs\n\t var uidsToNodes = {};\n\n\t for (var i = 0; i < self.graph.nodes.length; i++) {\n\t uidsToNodes[self.graph.nodes[i].uid] = self.graph.nodes[i];\n\t }self.graph.links.forEach(function (link) {\n\t link.source = uidsToNodes[link.source.uid];\n\t link.target = uidsToNodes[link.target.uid];\n\t });\n\n\t for (i = 0; i < self.extraLinks.length; i++) {\n\t // the actual node objects may have changed, so we hae to recreate\n\t // the extra links based on the uids\n\n\t if (!(self.extraLinks[i].target.uid in uidsToNodes)) {\n\t console.log('not there:', self.extraLinks[i]);\n\t }\n\n\t self.extraLinks[i].source = uidsToNodes[self.extraLinks[i].source.uid];\n\t self.extraLinks[i].target = uidsToNodes[self.extraLinks[i].target.uid];\n\n\t if (self.extraLinks[i].linkType == 'intermolecule') {\n\t //remove links to middle nodes\n\t fakeLinks = self.graph.links.filter(function (d) {\n\t return (d.source == self.extraLinks[i].source || d.source == self.extraLinks[i].target || d.target == self.extraLinks[i].source || d.target == self.extraLinks[i].source) && d.linkType == 'fake';\n\t });\n\n\t for (var j = 0; j < fakeLinks.length; j++) {\n\t var linkIndex = self.graph.links.indexOf(fakeLinks[j]);\n\t self.graph.links.splice(linkIndex, 1);\n\t }\n\t }\n\n\t graph.links.push(self.extraLinks[i]);\n\t }\n\t };\n\n\t self.addNodes = function addNodes(json) {\n\t // add a new set of nodes from a json file\n\n\t // Resolve the sources and targets of the links so that they\n\t // are not just indeces into an array\n\t json.links.forEach(function (entry) {\n\t if (typeof entry.source == 'number') entry.source = json.nodes[entry.source];\n\t if (typeof entry.target == 'number') entry.target = json.nodes[entry.target];\n\t });\n\n\t // Get the maximum x and y values of the current graph\n\t // so that we don't place a new structure on top of the\n\t // old one\n\t if (self.graph.nodes.length > 0) {\n\t maxX = _d2.default.max(self.graph.nodes.map(function (d) {\n\t return d.x;\n\t }));\n\t maxY = _d2.default.max(self.graph.nodes.map(function (d) {\n\t return d.y;\n\t }));\n\t } else {\n\t maxX = 0;\n\t maxY = 0;\n\t }\n\n\t json.nodes.forEach(function (entry) {\n\t if (!(entry.rna.uid in self.rnas)) {\n\t self.rnas[entry.rna.uid] = entry.rna;\n\t }\n\n\t entry.x += maxX;\n\t //entry.y += maxY;\n\n\t entry.px += maxX;\n\t //entry.py += maxY;\n\t });\n\n\t r = new _rnagraph.RNAGraph('', '');\n\t r.nodes = json.nodes;\n\t r.links = json.links;\n\n\t //self.addRNA(r);\n\t self.recalculateGraph();\n\n\t self.update();\n\t self.centerView();\n\t };\n\n\t self.addCustomColors = function addCustomColors(json) {\n\t // Add a json file containing the custom colors\n\t self.customColors = json;\n\t };\n\n\t self.addCustomColorsText = function (customColorsText) {\n\t var cs = new _rnautils.ColorScheme(customColorsText);\n\t self.customColors = cs.colorsJson;\n\t self.changeColorScheme('custom');\n\t };\n\n\t self.clearNodes = function clearNodes() {\n\t self.graph.nodes = [];\n\t self.graph.links = [];\n\n\t self.rnas = {};\n\t self.extraLinks = [];\n\n\t self.update();\n\t };\n\n\t self.toJSON = function toJSON() {\n\t var data = { 'rnas': self.rnas, 'extraLinks': self.extraLinks };\n\t var dataString = JSON.stringify(data, function (key, value) {\n\t //remove circular references\n\t if (key == 'rna') {\n\t return;\n\t } else {\n\t return value;\n\t }\n\t }, '\\t');\n\t return dataString;\n\t };\n\n\t self.fromJSON = function (jsonString) {\n\t var rnas, extraLinks;\n\n\t try {\n\t var data = JSON.parse(jsonString);\n\t rnas = data.rnas;\n\t extraLinks = data.extraLinks;\n\t } catch (err) {\n\t throw err;\n\t }\n\n\t for (var uid in rnas) {\n\t if (rnas[uid].type == 'rna') {\n\t r = new _rnagraph.RNAGraph();\n\n\t r.seq = rnas[uid].seq;\n\t r.dotbracket = rnas[uid].dotbracket;\n\t r.circular = rnas[uid].circular;\n\t r.pairtable = rnas[uid].pairtable;\n\t r.uid = rnas[uid].uid;\n\t r.structName = rnas[uid].structName;\n\t r.nodes = rnas[uid].nodes;\n\t r.links = rnas[uid].links;\n\t r.rnaLength = rnas[uid].rnaLength;\n\t r.elements = rnas[uid].elements;\n\t r.nucsToNodes = rnas[uid].nucsToNodes;\n\t r.pseudoknotPairs = rnas[uid].pseudoknotPairs;\n\t } else {\n\t r = new ProteinGraph();\n\t r.size = rnas[uid].size;\n\t r.nodes = rnas[uid].nodes;\n\t r.uid = rnas[uid].uid;\n\t }\n\n\t self.addRNAJSON(r, false);\n\t }\n\n\t extraLinks.forEach(function (link) {\n\t self.extraLinks.push(link);\n\t });\n\n\t self.recalculateGraph();\n\t self.update();\n\t };\n\n\t self.setSize = function () {\n\t if (self.options.initialSize != null) return;\n\n\t var svgH = _d2.default.select(element).node().offsetHeight;\n\t var svgW = _d2.default.select(element).node().offsetWidth;\n\n\t self.options.svgW = svgW;\n\t self.options.svgH = svgH;\n\n\t //Set the output range of the scales\n\t xScale.range([0, svgW]).domain([0, svgW]);\n\t yScale.range([0, svgH]).domain([0, svgH]);\n\n\t //re-attach the scales to the zoom behaviour\n\t self.zoomer.x(xScale).y(yScale);\n\n\t self.brusher.x(xScale).y(yScale);\n\n\t self.centerView();\n\n\t if (!self.options.resizeSvgOnResize) {\n\t return;\n\t }\n\n\t //resize the background\n\t /*\n\t rect.attr('width', svgW)\n\t .attr('height', svgH);\n\t */\n\n\t svg.attr('width', svgW).attr('height', svgH);\n\t };\n\n\t function changeColors(moleculeColors, d, scale) {\n\t if (moleculeColors.hasOwnProperty(d.num)) {\n\t var val = parseFloat(moleculeColors[d.num]);\n\n\t if (isNaN(val)) {\n\t // passed in color is not a scalar, so\n\t // treat it as a color\n\t return moleculeColors[d.num];\n\t } else {\n\t // the user passed in a float, let's use a colormap\n\t // to convert it to a color\n\t return scale(val);\n\t }\n\t } else {\n\t return 'white';\n\t }\n\t }\n\n\t self.setOutlineColor = function (color) {\n\t var nodes = visNodes.selectAll('g.gnode').select('[node_type=nucleotide]');\n\t nodes.style('fill', color);\n\t };\n\n\t self.changeColorScheme = function (newColorScheme) {\n\t var proteinNodes = visNodes.selectAll('[node_type=protein]');\n\n\t proteinNodes.classed('protein', true).attr('r', function (d) {\n\t return d.radius;\n\t });\n\n\t var gnodes = visNodes.selectAll('g.gnode');\n\t var circles = visNodes.selectAll('g.gnode').selectAll('circle');\n\t var nodes = visNodes.selectAll('g.gnode').select('[node_type=nucleotide]');\n\t self.colorScheme = newColorScheme;\n\n\t if (newColorScheme == 'sequence') {\n\t var scale = _d2.default.scale.ordinal().range(['#dbdb8d', '#98df8a', '#ff9896', '#aec7e8', '#aec7e8']).domain(['A', 'C', 'G', 'U', 'T']);\n\t nodes.style('fill', function (d) {\n\t return scale(d.name);\n\t });\n\t } else if (newColorScheme == 'structure') {\n\t var scale = _d2.default.scale.category10().domain(['s', 'm', 'i', 'e', 't', 'h', 'x']).range(['lightgreen', '#ff9896', '#dbdb8d', 'lightsalmon', 'lightcyan', 'lightblue', 'transparent']);\n\n\t nodes.style('fill', function (d) {\n\t return scale(d.elemType);\n\t });\n\t } else if (newColorScheme == 'positions') {\n\t nodes.style('fill', function (d) {\n\t var scale = _d2.default.scale.linear().range(['#98df8a', '#dbdb8d', '#ff9896']).interpolate(_d2.default.interpolateLab).domain([1, 1 + (d.rna.rnaLength - 1) / 2, d.rna.rnaLength]);\n\n\t return scale(d.num);\n\t });\n\t } else if (newColorScheme == 'custom') {\n\t // scale to be used in case the user passes scalar\n\t // values rather than color names\n\t if (typeof self.customColors != 'undefined' && 'domain' in self.customColors && 'range' in self.customColors) {\n\t var scale = _d2.default.scale.linear().interpolate(_d2.default.interpolateLab).domain(self.customColors.domain).range(self.customColors.range);\n\t }\n\n\t nodes.style('fill', function (d) {\n\t if (typeof self.customColors == 'undefined' || !self.customColors.hasOwnProperty('colorValues')) {\n\t return 'white';\n\t }\n\n\t if (self.customColors.colorValues.hasOwnProperty(d.structName) && self.customColors.colorValues[d.structName].hasOwnProperty(d.num)) {\n\t // if a molecule name is specified, it supercedes the default colors\n\t // (for which no molecule name has been specified)\n\t var moleculeColors = self.customColors.colorValues[d.structName];\n\t return changeColors(moleculeColors, d, scale);\n\t } else if (self.customColors.colorValues.hasOwnProperty('')) {\n\t var _moleculeColors = self.customColors.colorValues[''];\n\t return changeColors(_moleculeColors, d, scale);\n\t }\n\n\t return 'white';\n\t });\n\t }\n\t };\n\n\t function mousedown() {}\n\n\t function mousemove() {\n\t if (!mousedownNode) return;\n\n\t mpos = _d2.default.mouse(vis.node());\n\t // update drag line\n\t dragLine.attr('x1', mousedownNode.x).attr('y1', mousedownNode.y).attr('x2', mpos[0]).attr('y2', mpos[1]);\n\t }\n\n\t function mouseup() {\n\t if (mousedownNode) {\n\t dragLine.attr('class', 'drag_line_hidden');\n\t }\n\n\t // clear mouse event vars\n\t resetMouseVars();\n\t //update()\n\t }\n\t //adapt size to window changes:\n\t window.addEventListener('resize', self.setSize, false);\n\n\t self.zoomer = _d2.default.behavior.zoom().scaleExtent([0.1, 10]).x(xScale).y(yScale).on('zoomstart', zoomstart).on('zoom', redraw);\n\n\t _d2.default.select(element).select('svg').remove();\n\n\t var svg = _d2.default.select(element).classed('forna-container', true).attr('tabindex', 1).on('keydown.brush', keydown).on('keyup.brush', keyup).each(function () {\n\t this.focus();\n\t }).append('svg:svg').attr('width', self.options.svgW).attr('height', self.options.svgH).attr('id', 'plotting-area');\n\n\t self.options.svg = svg;\n\n\t var svgGraph = svg.append('svg:g').on('mousemove', mousemove).on('mousedown', mousedown).on('mouseup', mouseup);\n\n\t if (self.options.allowPanningAndZooming) svgGraph.call(self.zoomer);\n\n\t /*\n\t var rect = svgGraph.append('svg:rect')\n\t .attr('width', self.options.svgW)\n\t .attr('height', self.options.svgH)\n\t .attr('fill', 'white')\n\t //.attr('stroke', 'grey')\n\t //.attr('stroke-width', 1)\n\t //.attr('pointer-events', 'all')\n\t .attr('id', 'zrect');\n\t */\n\n\t var brush = svgGraph.append('g').datum(function () {\n\t return { selected: false, previouslySelected: false };\n\t }).attr('class', 'brush');\n\n\t var vis = svgGraph.append('svg:g');\n\t var visLinks = vis.append('svg:g');\n\t var visNodes = vis.append('svg:g');\n\n\t self.brusher = _d2.default.svg.brush().x(xScale).y(yScale).on('brushstart', function (d) {\n\t var gnodes = visNodes.selectAll('g.gnode').selectAll('.outline_node');\n\t gnodes.each(function (d) {\n\t d.previouslySelected = ctrlKeydown && d.selected;\n\t });\n\t }).on('brush', function () {\n\t var gnodes = visNodes.selectAll('g.gnode').selectAll('.outline_node');\n\t var extent = _d2.default.event.target.extent();\n\n\t gnodes.classed('selected', function (d) {\n\t return d.selected = self.options.applyForce && d.previouslySelected ^ (extent[0][0] <= d.x && d.x < extent[1][0] && extent[0][1] <= d.y && d.y < extent[1][1]);\n\t });\n\t }).on('brushend', function () {\n\t _d2.default.event.target.clear();\n\t _d2.default.select(this).call(_d2.default.event.target);\n\t });\n\n\t brush.call(self.brusher).on('mousedown.brush', null).on('touchstart.brush', null).on('touchmove.brush', null).on('touchend.brush', null);\n\t brush.select('.background').style('cursor', 'auto');\n\n\t function zoomstart() {\n\t var node = visNodes.selectAll('g.gnode').selectAll('.outline_node');\n\t node.each(function (d) {\n\t d.selected = false;\n\t d.previouslySelected = false;\n\t });\n\t node.classed('selected', false);\n\t }\n\n\t function redraw() {\n\t vis.attr('transform', 'translate(' + _d2.default.event.translate + ')' + ' scale(' + _d2.default.event.scale + ')');\n\t }\n\n\t self.getBoundingBoxTransform = function () {\n\t // Center the view on the molecule(s) and scale it so that everything\n\t // fits in the window\n\n\t //no molecules, nothing to do\n\t if (self.graph.nodes.length === 0) return { 'translate': [0, 0], 'scale': 1 };\n\n\t // Get the bounding box\n\t var minX = _d2.default.min(self.graph.nodes.map(function (d) {\n\t return d.x;\n\t }));\n\t var minY = _d2.default.min(self.graph.nodes.map(function (d) {\n\t return d.y;\n\t }));\n\n\t var maxX = _d2.default.max(self.graph.nodes.map(function (d) {\n\t return d.x;\n\t }));\n\t var maxY = _d2.default.max(self.graph.nodes.map(function (d) {\n\t return d.y;\n\t }));\n\n\t // The width and the height of the molecule\n\t var molWidth = maxX - minX;\n\t var molHeight = maxY - minY;\n\n\t // how much larger the drawing area is than the width and the height\n\t var widthRatio = self.options.svgW / (molWidth + 1);\n\t var heightRatio = self.options.svgH / (molHeight + 1);\n\n\t // we need to fit it in both directions, so we scale according to\n\t // the direction in which we need to shrink the most\n\t var minRatio = Math.min(widthRatio, heightRatio) * 0.8;\n\n\t // the new dimensions of the molecule\n\t var newMolWidth = molWidth * minRatio;\n\t var newMolHeight = molHeight * minRatio;\n\n\t // translate so that it's in the center of the window\n\t var xTrans = -minX * minRatio + (self.options.svgW - newMolWidth) / 2;\n\t var yTrans = -minY * minRatio + (self.options.svgH - newMolHeight) / 2;\n\n\t return { 'translate': [xTrans, yTrans], 'scale': minRatio };\n\t };\n\n\t self.centerView = function (duration) {\n\t if (arguments.length === 0) duration = 0;\n\n\t var bbTransform = self.getBoundingBoxTransform();\n\n\t if (bbTransform === null) return;\n\n\t // do the actual moving\n\t vis.transition().attr('transform', 'translate(' + bbTransform.translate + ')' + ' scale(' + bbTransform.scale + ')').duration(duration);\n\n\t // tell the zoomer what we did so that next we zoom, it uses the\n\t // transformation we entered here\n\t self.zoomer.translate(bbTransform.translate);\n\t self.zoomer.scale(bbTransform.scale);\n\t };\n\n\t self.force = _d2.default.layout.force().charge(function (d) {\n\t if (d.nodeType == 'middle') {\n\t return self.options.middleCharge;\n\t } else return self.options.otherCharge;\n\t }).friction(self.options.friction).linkDistance(function (d) {\n\t return self.options.linkDistanceMultiplier * d.value;\n\t }).linkStrength(function (d) {\n\t if (d.linkType in self.linkStrengths) {\n\t return self.linkStrengths[d.linkType];\n\t } else {\n\t return self.linkStrengths.other;\n\t }\n\t }).gravity(0.000).nodes(self.graph.nodes).links(self.graph.links).chargeDistance(self.options.chargeDistance).size([self.options.svgW, self.options.svgH]);\n\n\t // line displayed when dragging new nodes\n\t var dragLine = vis.append('line').attr('class', 'drag_line').attr('x1', 0).attr('y1', 0).attr('x2', 0).attr('y2', 0);\n\n\t function resetMouseVars() {\n\t mousedownNode = null;\n\t mouseupNode = null;\n\t mousedownLink = null;\n\t }\n\n\t var shiftKeydown = false;\n\t var ctrlKeydown = false;\n\n\t function selectedNodes(mouseDownNode) {\n\t var gnodes = visNodes.selectAll('g.gnode');\n\n\t if (ctrlKeydown) {\n\t return gnodes.filter(function (d) {\n\t return d.selected;\n\t });\n\n\t //return d3.selectAll('[struct_name=' + mouseDownNode.struct_name + ']');\n\t } else {\n\t return gnodes.filter(function (d) {\n\t return d.selected;\n\t });\n\t //return d3.select(this);\n\t }\n\t }\n\n\t function dragstarted(d) {\n\t _d2.default.event.sourceEvent.stopPropagation();\n\n\t if (!d.selected && !ctrlKeydown) {\n\t // if this node isn't selected, then we have to unselect every other node\n\t var node = visNodes.selectAll('g.gnode').selectAll('.outline_node');\n\t node.classed('selected', function (p) {\n\t return p.selected = self.options.applyForce && (p.previouslySelected = false);\n\t });\n\t }\n\n\t _d2.default.select(this).select('.outline_node').classed('selected', function (p) {\n\t d.previouslySelected = d.selected;return d.selected = self.options.applyForce && true;\n\t });\n\n\t var toDrag = selectedNodes(d);\n\t toDrag.each(function (d1) {\n\t d1.fixed |= 2;\n\t });\n\n\t //d3.event.sourceEvent.stopPropagation();\n\t //d3.select(self).classed('dragging', true);\n\t //\n\t }\n\n\t function dragged(d) {\n\n\t var toDrag = selectedNodes(d);\n\n\t toDrag.each(function (d1) {\n\t d1.x += _d2.default.event.dx;\n\t d1.y += _d2.default.event.dy;\n\n\t d1.px += _d2.default.event.dx;\n\t d1.py += _d2.default.event.dy;\n\t });\n\n\t self.resumeForce();\n\t _d2.default.event.sourceEvent.preventDefault();\n\t }\n\n\t self.resumeForce = function () {\n\t if (self.animation) self.force.resume();\n\t };\n\n\t function dragended(d) {\n\t var toDrag = selectedNodes(d);\n\n\t toDrag.each(function (d1) {\n\t d1.fixed &= ~6;\n\t });\n\t }\n\n\t function collide(node) {\n\t var r = node.radius + 16,\n\t nx1 = node.x - r,\n\t nx2 = node.x + r,\n\t ny1 = node.y - r,\n\t ny2 = node.y + r;\n\t return function (quad, x1, y1, x2, y2) {\n\t if (quad.point && quad.point !== node) {\n\t var x = node.x - quad.point.x,\n\t y = node.y - quad.point.y,\n\t l = Math.sqrt(x * x + y * y),\n\t r = node.radius + quad.point.radius;\n\t if (l < r) {\n\t l = (l - r) / l * 0.1;\n\t node.x -= x *= l;\n\t node.y -= y *= l;\n\t quad.point.x += x;\n\t quad.point.y += y;\n\t }\n\t }\n\t return x1 > nx2 || x2 < nx1 || y1 > ny2 || y2 < ny1;\n\t };\n\t }\n\n\t var drag = _d2.default.behavior.drag()\n\t //.origin(function(d) { return d; })\n\t .on('dragstart', dragstarted).on('drag', dragged).on('dragend', dragended);\n\n\t function keydown() {\n\t if (self.deaf)\n\t // lalalalal, not listening\n\t return;\n\n\t if (shiftKeydown) return;\n\n\t switch (_d2.default.event.keyCode) {\n\t case 16:\n\t shiftKeydown = true;\n\t break;\n\t case 17:\n\t ctrlKeydown = true;\n\t break;\n\t case 67:\n\t //c\n\t self.centerView();\n\t break;\n\t }\n\n\t if (shiftKeydown || ctrlKeydown) {\n\t svgGraph.call(self.zoomer).on('mousedown.zoom', null).on('touchstart.zoom', null).on('touchmove.zoom', null).on('touchend.zoom', null);\n\n\t //svgGraph.on('zoom', null);\n\t vis.selectAll('g.gnode').on('mousedown.drag', null);\n\t }\n\n\t if (ctrlKeydown) {\n\t brush.select('.background').style('cursor', 'crosshair');\n\t brush.call(self.brusher);\n\t }\n\t }\n\n\t function keyup() {\n\t shiftKeydown = false;\n\t ctrlKeydown = false;\n\n\t brush.call(self.brusher).on('mousedown.brush', null).on('touchstart.brush', null).on('touchmove.brush', null).on('touchend.brush', null);\n\n\t brush.select('.background').style('cursor', 'auto');\n\t svgGraph.call(self.zoomer);\n\n\t vis.selectAll('g.gnode').call(drag);\n\t }\n\n\t _d2.default.select(element).on('keydown', keydown).on('keyup', keyup).on('contextmenu', function () {\n\t _d2.default.event.preventDefault();\n\t });\n\n\t var linkKey = function linkKey(d) {\n\t return d.uid;\n\t };\n\n\t var nodeKey = function nodeKey(d) {\n\t var key = d.uid;\n\t return key;\n\t };\n\n\t var updateRnaGraph = function updateRnaGraph(r) {\n\t var nucleotidePositions = r.getPositions('nucleotide');\n\t var labelPositions = r.getPositions('label');\n\n\t var uids = r.getUids();\n\n\t r.recalculateElements().elementsToJson().addPseudoknots().addPositions('nucleotide', nucleotidePositions).addUids(uids).addLabels(1, self.options.labelInterval).addPositions('label', labelPositions).reinforceStems().reinforceLoops().updateLinkUids();\n\t };\n\n\t var removeLink = function removeLink(d) {\n\t // remove a link between two nodes\n\t index = self.graph.links.indexOf(d);\n\n\t if (index > -1) {\n\t //remove a link\n\t //graph.links.splice(index, 1);\n\n\t // there should be two cases\n\t // 1. The link is within a single molecule\n\n\t if (d.source.rna == d.target.rna) {\n\t var r = d.source.rna;\n\n\t r.addPseudoknots();\n\t r.pairtable[d.source.num] = 0;\n\t r.pairtable[d.target.num] = 0;\n\n\t updateRnaGraph(r);\n\t } else {\n\t // 2. The link is between two different molecules\n\t extraLinkIndex = self.extraLinks.indexOf(d);\n\n\t self.extraLinks.splice(extraLinkIndex, 1);\n\t }\n\n\t self.recalculateGraph();\n\t }\n\n\t self.update();\n\t };\n\n\t var linkClick = function linkClick(d) {\n\t if (!shiftKeydown) {\n\t return;\n\t }\n\n\t var invalidLinks = { 'backbone': true,\n\t 'fake': true,\n\t 'fake_fake': true,\n\t 'label_link': true };\n\n\t if (d.linkType in invalidLinks) return;\n\n\t removeLink(d);\n\t };\n\n\t self.addLink = function (newLink) {\n\t // this means we have a new json, which means we have\n\t // to recalculate the structure and change the colors\n\t // appropriately\n\t //\n\t if (newLink.source.rna == newLink.target.rna) {\n\t r = newLink.source.rna;\n\n\t r.pairtable[newLink.source.num] = newLink.target.num;\n\t r.pairtable[newLink.target.num] = newLink.source.num;\n\n\t updateRnaGraph(r);\n\t } else {\n\t //Add an extra link\n\t newLink.linkType = 'intermolecule';\n\t self.extraLinks.push(newLink);\n\t }\n\t self.recalculateGraph();\n\t self.update();\n\t };\n\n\t var nodeMouseclick = function nodeMouseclick(d) {\n\t if (_d2.default.event.defaultPrevented) return;\n\n\t if (!ctrlKeydown) {\n\t //if the shift key isn't down, unselect everything\n\t var node = visNodes.selectAll('g.gnode').selectAll('.outline_node');\n\t node.classed('selected', function (p) {\n\t return p.selected = self.options.applyForce && (p.previouslySelected = false);\n\t });\n\t }\n\n\t // always select this node\n\t _d2.default.select(this).select('circle').classed('selected', d.selected = self.options.applyForce && !d.previouslySelected);\n\t };\n\n\t var nodeMouseup = function nodeMouseup(d) {\n\t if (mousedownNode) {\n\t mouseupNode = d;\n\n\t if (mouseupNode == mousedownNode) {\n\t resetMouseVars();return;\n\t }\n\t var newLink = { source: mousedownNode, target: mouseupNode, linkType: 'basepair', value: 1, uid: generateUUID() };\n\n\t for (i = 0; i < self.graph.links.length; i++) {\n\t if (self.graph.links[i].source == mousedownNode || self.graph.links[i].target == mousedownNode || self.graph.links[i].source == mouseupNode || self.graph.links[i].target == mouseupNode) {\n\n\t if (self.graph.links[i].linkType == 'basepair' || self.graph.links[i].linkType == 'pseudoknot') {\n\t return;\n\t }\n\t }\n\n\t if (self.graph.links[i].source == mouseupNode && self.graph.links[i].target == mousedownNode || self.graph.links[i].source == mousedownNode && self.graph.links[i].target == mouseupNode) {\n\t if (self.graph.links[i].linkType == 'backbone') {\n\t return;\n\t }\n\t }\n\t }\n\n\t if (mouseupNode.nodeType == 'middle' || mousedownNode.nodeType == 'middle' || mouseupNode.nodeType == 'label' || mousedownNode.nodeType == 'label') return;\n\n\t self.addLink(newLink);\n\t }\n\t };\n\n\t var nodeMousedown = function nodeMousedown(d) {\n\t if (!d.selected && !ctrlKeydown) {\n\t // if this node isn't selected, then we have to unselect every other node\n\t var node = visNodes.selectAll('g.gnode').selectAll('.outline_node');\n\t node.classed('selected', function (p) {\n\t return p.selected = p.previouslySelected = false;\n\t });\n\t }\n\n\t _d2.default.select(this).classed('selected', function (p) {\n\t d.previouslySelected = d.selected;return d.selected = self.options.applyForce && true;\n\t });\n\n\t if (!shiftKeydown) {\n\t return;\n\t }\n\n\t mousedownNode = d;\n\n\t dragLine.attr('class', 'drag_line').attr('x1', mousedownNode.x).attr('y1', mousedownNode.y).attr('x2', mousedownNode.x).attr('y2', mousedownNode.y);\n\n\t //gnodes.attr('pointer-events', 'none');\n\t };\n\n\t self.startAnimation = function () {\n\t self.animation = true;\n\t vis.selectAll('g.gnode').call(drag);\n\t self.force.start();\n\t };\n\n\t self.stopAnimation = function () {\n\t self.animation = false;\n\t vis.selectAll('g.gnode').on('mousedown.drag', null);\n\t self.force.stop();\n\t };\n\n\t self.setFriction = function (value) {\n\t self.force.friction(value);\n\t self.resumeForce();\n\t };\n\n\t self.setCharge = function (value) {\n\t self.force.charge(value);\n\t self.resumeForce();\n\t };\n\n\t self.setGravity = function (value) {\n\t self.force.gravity(value);\n\t self.resumeForce();\n\t };\n\n\t self.setPseudoknotStrength = function (value) {\n\t self.linkStrengths.pseudoknot = value;\n\t self.update();\n\t };\n\n\t self.displayBackground = function (value) {\n\t self.displayParameters.displayBackground = value;\n\t self.updateStyle();\n\t };\n\n\t self.displayNumbering = function (value) {\n\t self.displayParameters.displayNumbering = value;\n\t self.updateStyle();\n\t };\n\n\t self.displayNodeOutline = function (value) {\n\t self.displayParameters.displayNodeOutline = value;\n\t self.updateStyle();\n\t };\n\n\t self.displayNodeLabel = function (value) {\n\t self.displayParameters.displayNodeLabel = value;\n\t self.updateStyle();\n\t };\n\n\t self.displayLinks = function (value) {\n\t self.displayParameters.displayLinks = value;\n\t self.updateStyle();\n\t };\n\n\t self.displayPseudoknotLinks = function (value) {\n\t self.displayParameters.displayPseudoknotLinks = value;\n\t self.updateStyle();\n\t };\n\n\t self.displayProteinLinks = function (value) {\n\t self.displayParameters.displayProteinLinks = value;\n\t self.updateStyle();\n\t };\n\n\t self.updateStyle = function () {\n\t // Background\n\t //rect.classed('transparent', !self.displayParameters.displayBackground);\n\t // Numbering\n\t visNodes.selectAll('[node_type=label]').classed('transparent', !self.displayParameters.displayNumbering);\n\t visNodes.selectAll('[label_type=label]').classed('transparent', !self.displayParameters.displayNumbering);\n\t visLinks.selectAll('[linkType=label_link]').classed('transparent', !self.displayParameters.displayNumbering);\n\t // Node Outline\n\t svg.selectAll('circle').classed('hidden_outline', !self.displayParameters.displayNodeOutline);\n\t // Node Labels\n\t visNodes.selectAll('[label_type=nucleotide]').classed('transparent', !self.displayParameters.displayNodeLabel);\n\t // Links\n\t svg.selectAll('[link_type=real],[link_type=basepair],[link_type=backbone],[link_type=pseudoknot],[link_type=protein_chain],[link_type=chain_chain],[link_type=external]').classed('transparent', !self.displayParameters.displayLinks);\n\t // Pseudoknot Links\n\t svg.selectAll('[link_type=pseudoknot]').classed('transparent', !self.displayParameters.displayPseudoknotLinks);\n\t // Protein Links\n\t svg.selectAll('[link_type=protein_chain]').classed('transparent', !self.displayParameters.displayProteinLinks);\n\t // Fake Links\n\t visLinks.selectAll('[link_type=fake]').classed('transparent', !self.options.displayAllLinks);\n\t visLinks.selectAll('[link_type=fake_fake]').classed('transparent', !self.options.displayAllLinks);\n\t };\n\n\t function nudge(dx, dy) {\n\t node.filter(function (d) {\n\t return d.selected;\n\t }).attr('cx', function (d) {\n\t return d.x += dx;\n\t }).attr('cy', function (d) {\n\t return d.y += dy;\n\t });\n\n\t link.filter(function (d) {\n\t return d.source.selected;\n\t }).attr('x1', function (d) {\n\t return d.source.x;\n\t }).attr('y1', function (d) {\n\t return d.source.y;\n\t });\n\n\t link.filter(function (d) {\n\t return d.target.selected;\n\t }).attr('x2', function (d) {\n\t return d.target.x;\n\t }).attr('y2', function (d) {\n\t return d.target.y;\n\t });\n\n\t _d2.default.event.preventDefault();\n\t }\n\n\t self.createNewLinks = function (linksEnter) {\n\t var linkLines = linksEnter.append('svg:line');\n\n\t linkLines.append('svg:title').text(linkKey);\n\n\t linkLines.classed('link', true).attr('x1', function (d) {\n\t return d.source.x;\n\t }).attr('y1', function (d) {\n\t return d.source.y;\n\t }).attr('x2', function (d) {\n\t return d.target.x;\n\t }).attr('y2', function (d) {\n\t return d.target.y;\n\t }).attr('link_type', function (d) {\n\t return d.linkType;\n\t }).attr('class', function (d) {\n\t return _d2.default.select(this).attr('class') + ' ' + d.linkType;\n\t }).attr('pointer-events', function (d) {\n\t if (d.linkType == 'fake') return 'none';else return 'all';\n\t });\n\n\t /* We don't need to update the positions of the stabilizing links */\n\t /*\n\t basepairLinks = visLinks.selectAll('[link_type=basepair]');\n\t basepairLinks.classed('basepair', true);\n\t fakeLinks = visLinks.selectAll('[link_type=fake]')\n\t fakeLinks.classed('fake', true);\n\t intermolecule_links = vis_links.selectAll('[link_type=intermolecule]');\n\t intermolecule_links.classed('intermolecule', true);\n\t plink = vis_links.selectAll('[link_type=protein_chain],[link_type=chain_chain]');\n\t plink.classed('chain_chain', true);\n\t */\n\n\t return linkLines;\n\t };\n\n\t self.createNewNodes = function (gnodesEnter) {\n\t gnodesEnter = gnodesEnter.append('g').classed('noselect', true).classed('gnode', true).attr('struct_name', function (d) {\n\t return d.structName;\n\t }).attr('transform', function (d) {\n\t if (typeof d.x != 'undefined' && typeof d.y != 'undefined') return 'translate(' + [d.x, d.y] + ')';else return '';\n\t }).each(function (d) {\n\t d.selected = d.previouslySelected = false;\n\t });\n\n\t gnodesEnter.call(drag).on('mousedown', nodeMousedown).on('mousedrag', function (d) {}).on('mouseup', nodeMouseup).attr('num', function (d) {\n\t return 'n' + d.num;\n\t }).attr('rnum', function (d) {\n\t return 'n' + (d.rna.rnaLength - d.num + 1);\n\t }).on('click', nodeMouseclick).transition().duration(750).ease('elastic');\n\n\t // create nodes behind the circles which will serve to highlight them\n\t var labelAndProteinNodes = gnodesEnter.filter(function (d) {\n\t return d.nodeType == 'label' || d.nodeType == 'protein';\n\t });\n\n\t var nucleotideNodes = gnodesEnter.filter(function (d) {\n\t return d.nodeType == 'nucleotide';\n\t });\n\n\t labelAndProteinNodes.append('svg:circle').attr('class', 'outline_node').attr('r', function (d) {\n\t return d.radius + 1;\n\t });\n\n\t nucleotideNodes.append('svg:circle').attr('class', 'outline_node').attr('r', function (d) {\n\t return d.radius + 1;\n\t });\n\n\t labelAndProteinNodes.append('svg:circle').attr('class', 'node').classed('label', function (d) {\n\t return d.nodeType == 'label';\n\t }).attr('r', function (d) {\n\t if (d.nodeType == 'middle') return 0;else {\n\t return d.radius;\n\t }\n\t }).attr('node_type', function (d) {\n\t return d.nodeType;\n\t }).attr('node_num', function (d) {\n\t return d.num;\n\t });\n\n\t nucleotideNodes.append('svg:circle').attr('class', 'node').attr('node_type', function (d) {\n\t return d.nodeType;\n\t }).attr('node_num', function (d) {\n\t return d.num;\n\t }).attr('r', function (d) {\n\t return d.radius;\n\t }).append('svg:title').text(function (d) {\n\t if (d.nodeType == 'nucleotide') {\n\t return d.structName + ':' + d.num;\n\t } else {\n\t return '';\n\t }\n\t });\n\n\t nucleotideNodes.append('svg:path').attr('class', 'node').attr('node_type', function (d) {\n\t return d.nodeType;\n\t }).attr('node_num', function (d) {\n\t return d.num;\n\t }).append('svg:title').text(function (d) {\n\t if (d.nodeType == 'nucleotide') {\n\t return d.structName + ':' + d.num;\n\t } else {\n\t return '';\n\t }\n\t });\n\n\t var labelsEnter = gnodesEnter.append('text').text(function (d) {\n\t return d.name;\n\t }).attr('text-anchor', 'middle').attr('font-size', 8.0).attr('font-weight', 'bold').attr('y', 2.5).attr('class', 'node-label').attr('label_type', function (d) {\n\t return d.nodeType;\n\t });\n\n\t /*\n\t labelsEnter.text(function(d) {\n\t return d.num;\n\t });\n\t */\n\n\t labelsEnter.append('svg:title').text(function (d) {\n\t if (d.nodeType == 'nucleotide') {\n\t return d.structName + ':' + d.num;\n\t } else {\n\t return '';\n\t }\n\t });\n\n\t return gnodesEnter;\n\t };\n\n\t var nodeTooltip = function nodeTooltip(d) {\n\t nodeTooltips = {};\n\n\t nodeTooltips.nucleotide = d.num;\n\t nodeTooltips.label = '';\n\t nodeTooltips.pseudo = '';\n\t nodeTooltips.middle = '';\n\t nodeTooltips.protein = d.structName;\n\n\t return nodeTooltips[d.nodeType];\n\t };\n\n\t self.update = function () {\n\t self.force.nodes(self.graph.nodes).links(self.graph.links);\n\n\t if (self.animation) {\n\t self.force.start();\n\t }\n\n\t var allLinks = visLinks.selectAll('line.link').data(self.graph.links.filter(realLinkFilter), linkKey);\n\n\t allLinks.attr('class', '').classed('link', true).attr('link_type', function (d) {\n\t return d.linkType;\n\t }).attr('class', function (d) {\n\t return _d2.default.select(this).attr('class') + ' ' + d.linkType;\n\t });\n\n\t var linksEnter = allLinks.enter();\n\t self.createNewLinks(linksEnter);\n\n\t allLinks.exit().remove();\n\n\t var domain = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];\n\t var colors = _d2.default.scale.category10().domain(domain);\n\n\t var gnodes = visNodes.selectAll('g.gnode').data(self.graph.nodes, nodeKey);\n\t //.attr('pointer-events', 'all');\n\n\t var gnodesEnter = gnodes.enter();\n\n\t self.createNewNodes(gnodesEnter);\n\t gnodes.exit().remove();\n\n\t //fake_nodes = self.graph.nodes.filter(function(d) { return d.nodeType == 'middle'; });\n\t //fakeNodes = self.graph.nodes.filter(function(d) { return true; });\n\t var realNodes = self.graph.nodes.filter(function (d) {\n\t return d.nodeType == 'nucleotide' || d.nodeType == 'label';\n\t });\n\n\t var xlink;\n\t if (self.displayFakeLinks) xlink = allLinks;else xlink = visLinks.selectAll('[link_type=real],[link_type=pseudoknot],[link_type=protein_chain],[link_type=chain_chain],[link_type=label_link],[link_type=backbone],[link_type=basepair],[link_type=intermolecule],[link_type=external]');\n\n\t var position;\n\n\t gnodes.selectAll('path').each(positionAnyNode);\n\n\t xlink.on('click', linkClick);\n\n\t self.force.on('tick', function () {\n\t var q = _d2.default.geom.quadtree(realNodes);\n\t var i = 0;\n\t var n = realNodes.length;\n\n\t while (++i < n) {\n\t q.visit(collide(realNodes[i]));\n\t }xlink.attr('x1', function (d) {\n\t return d.source.x;\n\t }).attr('y1', function (d) {\n\t return d.source.y;\n\t }).attr('x2', function (d) {\n\t return d.target.x;\n\t }).attr('y2', function (d) {\n\t return d.target.y;\n\t });\n\n\t // Translate the groups\n\t gnodes.attr('transform', function (d) {\n\t return 'translate(' + [d.x, d.y] + ')';\n\t });\n\n\t gnodes.select('path').each(positionAnyNode);\n\t });\n\n\t self.changeColorScheme(self.colorScheme);\n\n\t if (self.animation) {\n\t self.force.start();\n\t }\n\n\t self.updateStyle();\n\t };\n\n\t self.setSize();\n\t}\n\n\t/************************* END FORNAF **********************************/\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\texports.ProteinGraph = ProteinGraph;\n\texports.RNAGraph = RNAGraph;\n\texports.moleculesToJson = moleculesToJson;\n\n\tvar _rnautils = __webpack_require__(2);\n\n\tvar numberSort = function numberSort(a, b) {\n\t return a - b;\n\t};\n\n\tfunction generateUUID() {\n\t /* Stack Overflow: \n\t * http://stackoverflow.com/a/8809472/899470 \n\t */\n\t var d = new Date().getTime();\n\t var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n\t var r = (d + Math.random() * 16) % 16 | 0;\n\t d = Math.floor(d / 16);\n\t return (c == 'x' ? r : r & 0x3 | 0x8).toString(16);\n\t });\n\n\t return uuid;\n\t}\n\n\tfunction isNormalInteger(str) {\n\t //http://stackoverflow.com/a/10834843/899470\n\t return (/^\\+?(0|[1-9]\\d*)$/.test(str)\n\t );\n\t}\n\n\tif (typeof String.prototype.trim === 'undefined') {\n\t String.prototype.trim = function () {\n\t return String(this).replace(/^\\s+|\\s+$/g, '');\n\t };\n\t}\n\n\tfunction ProteinGraph(structName, size, uid) {\n\t var self = this;\n\n\t self.type = 'protein';\n\t self.size = size;\n\t self.nodes = [{ 'name': 'P',\n\t 'num': 1,\n\t 'radius': 3 * Math.sqrt(size),\n\t 'rna': self,\n\t 'nodeType': 'protein',\n\t 'structName': structName,\n\t 'elemType': 'p',\n\t 'size': size,\n\t 'uid': generateUUID() }];\n\n\t self.links = [];\n\t self.uid = generateUUID();\n\n\t self.addUids = function (uids) {\n\t for (var i = 0; i < uids.length; i++) {\n\t self.nodes[i].uid = uids[i];\n\t }return self;\n\t };\n\n\t self.getUids = function () {\n\t /* Get the positions of each node so that they\n\t * can be passed to elementsToJson later\n\t */\n\t uids = [];\n\t for (var i = 0; i < self.dotbracket.length; i++) {\n\t uids.push(self.nodes[i].uid);\n\t }return uids;\n\t };\n\t}\n\n\tfunction RNAGraph(seq, dotbracket, structName, startNumber) {\n\t var self = this;\n\n\t self.type = 'rna';\n\t self.circularizeExternal = false;\n\n\t if (arguments.length === 0) {\n\t self.seq = '';\n\t self.dotbracket = '';\n\t self.structName = '';\n\t } else {\n\t self.seq = seq;\n\t self.dotbracket = dotbracket; //i.e. ..((..))..\n\t self.structName = structName;\n\t }\n\n\t if (arguments.length < 4) {\n\t startNumber = 1;\n\t }\n\n\t self.circular = false;\n\n\t if (self.dotbracket.length > 0 && self.dotbracket[self.dotbracket.length - 1] == '*') {\n\t //circular RNA\n\t self.dotbracket = self.dotbracket.slice(0, self.dotbracket.length - 1);\n\t self.circular = true;\n\t }\n\n\t self.uid = generateUUID();\n\n\t self.elements = []; //store the elements and the \n\t //nucleotides they contain\n\t self.pseudoknotPairs = [];\n\t self.nucsToNodes = {};\n\n\t self.addUids = function (uids) {\n\t var nucleotideNodes = self.nodes.filter(function (d) {\n\t return d.nodeType == 'nucleotide';\n\t });\n\n\t for (var i = 0; i < uids.length && i < nucleotideNodes.length; i++) {\n\t nucleotideNodes[i].uid = uids[i];\n\t }return self;\n\t };\n\n\t self.computePairtable = function () {\n\t self.pairtable = _rnautils.rnaUtilities.dotbracketToPairtable(self.dotbracket);\n\t };\n\n\t self.removeBreaks = function (targetString) {\n\t // Remove all chain breaks (denoted with a '&', which indicate\n\t // that the input represents more than one strand)\n\t var breaks = [];\n\t var breakIndex = -1;\n\n\t while ((breakIndex = targetString.indexOf('&')) >= 0) {\n\t breaks.push(breakIndex);\n\t targetString = targetString.substring(0, breakIndex) + 'oo' + targetString.substring(breakIndex + 1, targetString.length);\n\t }\n\n\t return { targetString: targetString, breaks: breaks };\n\t };\n\n\t var ret = self.removeBreaks(self.dotbracket);\n\t self.dotbracket = ret.targetString;\n\t self.dotBracketBreaks = ret.breaks;\n\n\t ret = self.removeBreaks(self.seq);\n\t self.seq = ret.targetString;\n\t self.seqBreaks = ret.breaks;\n\n\t self.calculateStartNumberArray = function () {\n\t self.startNumberArray = [];\n\t var breaks = 0;\n\n\t for (var i = 0; i < self.dotbracket.length; i++) {\n\t self.startNumberArray.push(startNumber);\n\n\t if (self.dotbracket[i] == 'o') {\n\t startNumber = -i;\n\t }\n\t }\n\t };\n\n\t self.calculateStartNumberArray();\n\n\t self.rnaLength = self.dotbracket.length;\n\n\t if (!(0, _rnautils.arraysEqual)(self.dotBracketBreaks, self.seqBreaks)) {\n\t console.log('WARNING: Sequence and structure breaks not equal');\n\t console.log('WARNING: Using the breaks in the structure');\n\t }\n\n\t self.computePairtable();\n\n\t self.addPositions = function (nodeType, positions) {\n\t var labelNodes = self.nodes.filter(function (d) {\n\t return d.nodeType == nodeType;\n\t });\n\n\t for (var i = 0; i < labelNodes.length; i++) {\n\t labelNodes[i].x = positions[i][0];\n\t labelNodes[i].px = positions[i][0];\n\t labelNodes[i].y = positions[i][1];\n\t labelNodes[i].py = positions[i][1];\n\t }\n\n\t return self;\n\t };\n\n\t self.breakNodesToFakeNodes = function () {\n\t // convert all the nodes following breaks to fake nodes\n\t var labelNodes = self.nodes.filter(function (d) {\n\t return d.nodeType == 'nucleotide';\n\t });\n\n\t // if a node was an artifical break node, convert it to a middle\n\t for (var i = 0; i < labelNodes.length; i++) {\n\t if (self.dotbracket[i] == 'o') labelNodes[i].nodeType = 'middle';\n\t }\n\n\t for (var i = 0; i < self.elements.length; i++) {\n\t var broken = false;\n\n\t // change the elemType of the other nodes in the element containing\n\t // the break\n\t for (var j = 0; j < self.elements[i][2].length; j++) {\n\t if (self.dotBracketBreaks.indexOf(self.elements[i][2][j]) >= 0) broken = true;\n\t }\n\n\t if (broken) {\n\t self.elements[i][2].map(function (x) {\n\t if (x == 0) return;\n\t self.nodes[x - 1].elemType = 'e';\n\t });\n\t } else {\n\t self.elements[i][2].map(function (x) {\n\t if (x == 0) return;\n\t self.nodes[x - 1].elemType = self.elements[i][0];\n\t });\n\t }\n\t }\n\t return self;\n\t };\n\n\t self.getPositions = function (nodeType) {\n\t var positions = [];\n\t var nucleotideNodes = self.nodes.filter(function (d) {\n\t return d.nodeType == nodeType;\n\t });\n\n\t for (var i = 0; i < nucleotideNodes.length; i++) {\n\t positions.push([nucleotideNodes[i].x, nucleotideNodes[i].y]);\n\t }return positions;\n\t };\n\n\t self.getUids = function () {\n\t /* Get the positions of each node so that they\n\t * can be passed to elementsToJson later\n\t */\n\t var uids = [];\n\t for (var i = 0; i < self.dotbracket.length; i++) {\n\t uids.push(self.nodes[i].uid);\n\t }return uids;\n\t };\n\n\t self.reinforceStems = function () {\n\t var pt = self.pairtable;\n\t var relevantElements = self.elements.filter(function (d) {\n\t return d[0] == 's' && d[2].length >= 4;\n\t });\n\n\t for (var i = 0; i < relevantElements.length; i++) {\n\t var allNucs = relevantElements[i][2];\n\t var nucs = allNucs.slice(0, allNucs.length / 2);\n\n\t for (var j = 0; j < nucs.length - 1; j++) {\n\t self.addFakeNode([nucs[j], nucs[j + 1], pt[nucs[j + 1]], pt[nucs[j]]]);\n\t }\n\t }\n\n\t return self;\n\t };\n\n\t self.reinforceLoops = function () {\n\t /* \n\t * Add a set of fake nodes to enforce the structure\n\t */\n\t var filterNucs = function filterNucs(d) {\n\t return d !== 0 && d <= self.dotbracket.length;\n\t };\n\n\t for (var i = 0; i < self.elements.length; i++) {\n\t if (self.elements[i][0] == 's' || !self.circularizeExternal && self.elements[i][0] == 'e') continue;\n\n\t var nucs = self.elements[i][2].filter(filterNucs);\n\n\t if (self.elements[i][0] == 'e') {\n\t var newNode1 = { 'name': '',\n\t 'num': -3,\n\t //'radius': 18 * radius -6,\n\t 'radius': 0,\n\t 'rna': self,\n\t 'nodeType': 'middle',\n\t 'elemType': 'f',\n\t 'nucs': [],\n\t 'x': self.nodes[self.rnaLength - 1].x,\n\t 'y': self.nodes[self.rnaLength - 1].y,\n\t 'px': self.nodes[self.rnaLength - 1].px,\n\t 'py': self.nodes[self.rnaLength - 1].py,\n\t 'uid': generateUUID() };\n\t var newNode2 = { 'name': '',\n\t 'num': -2,\n\t //'radius': 18 * radius -6,\n\t 'radius': 0,\n\t 'rna': self,\n\t 'nodeType': 'middle',\n\t 'elemType': 'f',\n\t 'nucs': [],\n\t 'x': self.nodes[0].x,\n\t 'y': self.nodes[0].y,\n\t 'px': self.nodes[0].px,\n\t 'py': self.nodes[0].py,\n\t 'uid': generateUUID() };\n\n\t nucs.push(self.nodes.length + 1);\n\t nucs.push(self.nodes.length + 2);\n\t self.nodes.push(newNode1);\n\t self.nodes.push(newNode2);\n\t }\n\n\t self.addFakeNode(nucs);\n\t }\n\n\t return self;\n\t };\n\n\t self.updateLinkUids = function () {\n\t for (var i = 0; i < self.links.length; i++) {\n\t self.links[i].uid = self.links[i].source.uid + self.links[i].target.uid;\n\t }\n\n\t return self;\n\t };\n\n\t self.addFakeNode = function (nucs) {\n\t var linkLength = 18; //make sure this is consistent with the value in force.js\n\t var nodeWidth = 6;\n\t var angle = 3.1415 * 2 / (2 * nucs.length);\n\t var radius = linkLength / (2 * Math.tan(angle));\n\n\t var fakeNodeUid = '';\n\n\t for (var i = 0; i < nucs.length; i++) {\n\t fakeNodeUid += self.nodes[nucs[i] - 1].uid;\n\t }var newNode = { 'name': '',\n\t 'num': -1,\n\t //'radius': 18 * radius -6,\n\t 'radius': radius,\n\t 'rna': self,\n\t 'nodeType': 'middle',\n\t 'elemType': 'f',\n\t 'nucs': nucs,\n\t 'uid': fakeNodeUid };\n\t self.nodes.push(newNode);\n\n\t var newX = 0;\n\t var newY = 0;\n\t var coordsCounted = 0;\n\n\t angle = (nucs.length - 2) * 3.14159 / (2 * nucs.length);\n\t radius = 0.5 / Math.cos(angle);\n\n\t for (var j = 0; j < nucs.length; j++) {\n\t if (nucs[j] === 0 || nucs[j] > self.dotbracket.length) continue;\n\n\t //link to the center node\n\t self.links.push({ 'source': self.nodes[nucs[j] - 1],\n\t 'target': self.nodes[self.nodes.length - 1],\n\t 'linkType': 'fake',\n\t 'value': radius,\n\t 'uid': generateUUID() });\n\n\t if (nucs.length > 4) {\n\t //link across the loop\n\t self.links.push({ 'source': self.nodes[nucs[j] - 1],\n\t 'target': self.nodes[nucs[(j + Math.floor(nucs.length / 2)) % nucs.length] - 1],\n\t 'linkType': 'fake',\n\t 'value': radius * 2,\n\t 'uid': generateUUID() });\n\t }\n\n\t var ia = (nucs.length - 2) * 3.14159 / nucs.length;\n\t var c = 2 * Math.cos(3.14159 / 2 - ia / 2);\n\t //link to over-neighbor\n\t self.links.push({ 'source': self.nodes[nucs[j] - 1],\n\t 'target': self.nodes[nucs[(j + 2) % nucs.length] - 1],\n\t 'linkType': 'fake',\n\t 'value': c });\n\n\t // calculate the mean of the coordinats in this loop\n\t // and place the fake node there\n\t var fromNode = self.nodes[nucs[j] - 1];\n\t if ('x' in fromNode) {\n\t newX += fromNode.x;\n\t newY += fromNode.y;\n\n\t coordsCounted += 1;\n\t }\n\t }\n\n\t if (coordsCounted > 0) {\n\t // the nucleotides had set positions so we can calculate the position\n\t // of the fake node\n\t newNode.x = newX / coordsCounted;\n\t newNode.y = newY / coordsCounted;\n\t newNode.px = newNode.x;\n\t newNode.py = newNode.y;\n\t }\n\n\t return self;\n\t };\n\n\t self.connectFakeNodes = function () {\n\t var linkLength = 18;\n\n\t // We want to be able to connect all of the fake nodes\n\t // and create a structure consisting of just them\n\t var filterOutNonFakeNodes = function filterOutNonFakeNodes(d) {\n\t return d.nodeType == 'middle';\n\t };\n\n\t var nucsToNodes = {};\n\t var fakeNodes = self.nodes.filter(filterOutNonFakeNodes);\n\t var linked = new Set();\n\n\t // initialize the nucleotides to nodes\n\t for (var i = 1; i <= self.nodes.length; i++) {\n\t nucsToNodes[i] = [];\n\t }for (var i = 0; i < fakeNodes.length; i++) {\n\t var thisNode = fakeNodes[i];\n\n\t // each fake node represents a certain set of nucleotides (thisNode.nucs)\n\t for (var j = 0; j < thisNode.nucs.length; j++) {\n\t var thisNuc = thisNode.nucs[j];\n\n\t // check to see if this nucleotide has been seen in another fake node\n\t // if it has, then we add a link between the two nodes\n\t for (var k = 0; k < nucsToNodes[thisNuc].length; k++) {\n\t if (linked.has(JSON.stringify([nucsToNodes[thisNuc][k].uid, thisNode.uid].sort()))) continue; //already linked\n\n\t var distance = nucsToNodes[thisNuc][k].radius + thisNode.radius;\n\n\t self.links.push({ 'source': nucsToNodes[thisNuc][k],\n\t 'target': thisNode,\n\t 'value': distance / linkLength,\n\t 'linkType': 'fake_fake' });\n\n\t // note that we've already seen this link\n\t linked.add(JSON.stringify([nucsToNodes[thisNuc][k].uid, thisNode.uid].sort()));\n\t }\n\n\t nucsToNodes[thisNuc].push(thisNode);\n\t }\n\t }\n\n\t return self;\n\t };\n\n\t self.addExtraLinks = function (extraLinks) {\n\t if (typeof extraLinks == 'undefined') return self;\n\n\t for (var i = 0; i < extraLinks.length; i++) {\n\t var source = self.getNodeFromNucleotides(extraLinks[i].from);\n\t var target = self.getNodeFromNucleotides(extraLinks[i].to);\n\n\t var newLink = { 'source': source, 'target': target, 'linkType': 'extra',\n\t 'extraLinkType': extraLinks[i].linkType, 'uid': generateUUID() };\n\n\t self.links.push(newLink);\n\t }\n\n\t return self;\n\t };\n\n\t self.elementsToJson = function () {\n\t /* Convert a set of secondary structure elements to a json\n\t * representation of the graph that can be used with d3's\n\t * force-directed layout to generate a visualization of \n\t * the structure.\n\t */\n\t var pt = self.pairtable;\n\t var elements = self.elements;\n\n\t self.nodes = [];\n\t self.links = [];\n\n\t //create a reverse lookup so we can find out the type\n\t //of element that a node is part of\n\t var elemTypes = {};\n\n\t //sort so that we count stems last\n\t self.elements.sort();\n\n\t for (var i = 0; i < self.elements.length; i++) {\n\t var nucs = self.elements[i][2];\n\t for (var j = 0; j < nucs.length; j++) {\n\t elemTypes[nucs[j]] = self.elements[i][0];\n\t }\n\t }\n\n\t for (var i = 1; i <= pt[0]; i++) {\n\t var nodeName = self.seq[i - 1];\n\n\t if (self.dotBracketBreaks.indexOf(i - 1) >= 0 || self.dotBracketBreaks.indexOf(i - 2) >= 0) {\n\t nodeName = '';\n\t }\n\n\t //create a node for each nucleotide\n\t self.nodes.push({ 'name': nodeName,\n\t 'num': i + self.startNumberArray[i - 1] - 1,\n\t 'radius': 5,\n\t 'rna': self,\n\t 'nodeType': 'nucleotide',\n\t 'structName': self.structName,\n\t 'elemType': elemTypes[i],\n\t 'uid': generateUUID(),\n\t 'linked': false });\n\t }\n\n\t for (var i = 0; i < self.nodes.length; i++) {\n\t if (i === 0) self.nodes[i].prevNode = null;else {\n\t self.nodes[i].prevNode = self.nodes[i - 1];\n\t }\n\n\t if (i == self.nodes.length - 1) self.nodes[i].nextNode = null;else {\n\t self.nodes[i].nextNode = self.nodes[i + 1];\n\t }\n\t }\n\n\t for (var i = 1; i <= pt[0]; i++) {\n\n\t if (pt[i] !== 0) {\n\t // base-pair links\n\t self.links.push({ 'source': self.nodes[i - 1],\n\t 'target': self.nodes[pt[i] - 1],\n\t 'linkType': 'basepair',\n\t 'value': 1,\n\t 'uid': generateUUID() });\n\t }\n\n\t if (i > 1) {\n\t // backbone links\n\t if (self.dotBracketBreaks.indexOf(i - 1) === -1 && self.dotBracketBreaks.indexOf(i - 2) == -1 && self.dotBracketBreaks.indexOf(i - 3) == -1) {\n\t // there is no break in the strands here\n\t // we can add a backbone link\n\t self.links.push({ 'source': self.nodes[i - 2],\n\t 'target': self.nodes[i - 1],\n\t 'linkType': 'backbone',\n\t 'value': 1,\n\t 'uid': generateUUID() });\n\t self.nodes[i - 1].linked = true;\n\t }\n\t }\n\t }\n\n\t //add the pseudoknot links\n\t for (var i = 0; i < self.pseudoknotPairs.length; i++) {\n\t self.links.push({ 'source': self.nodes[self.pseudoknotPairs[i][0] - 1],\n\t 'target': self.nodes[self.pseudoknotPairs[i][1] - 1],\n\t 'linkType': 'pseudoknot',\n\t 'value': 1,\n\t 'uid': generateUUID() });\n\t }\n\n\t if (self.circular) {\n\t self.links.push({ 'source': self.nodes[0],\n\t 'target': self.nodes[self.rnaLength - 1],\n\t 'linkType': 'backbone',\n\t 'value': 1,\n\t 'uid': generateUUID() });\n\t }\n\n\t return self;\n\t };\n\n\t self.ptToElements = function (pt, level, i, j) {\n\t /* Convert a pair table to a list of secondary structure \n\t * elements:\n\t *\n\t * [['s',1,[2,3]]\n\t *\n\t * The 's' indicates that an element can be a stem. It can also be\n\t * an interior loop ('i'), a hairpin loop ('h') or a multiloop ('m')\n\t *\n\t * The second number (1 in this case) indicates the depth or\n\t * how many base pairs have to be broken to get to this element.\n\t *\n\t * Finally, there is the list of nucleotides which are part of\n\t * of this element.\n\t */\n\t var elements = [];\n\t var u5 = [i - 1];\n\t var u3 = [j + 1];\n\n\t if (i > j) return [];\n\n\t //iterate over the unpaired regions on either side\n\t //this is either 5' and 3' unpaired if level == 0\n\t //or an interior loop or a multiloop\n\t for (; pt[i] === 0; i++) {\n\t u5.push(i);\n\t }\n\t for (; pt[j] === 0; j--) {\n\t u3.push(j);\n\t }\n\n\t if (i > j) {\n\t //hairpin loop or one large unpaired molecule\n\t u5.push(i);\n\t if (level === 0) return [['e', level, u5.sort(numberSort)]];else {\n\t // check to see if we have chain breaks due\n\t // to multiple strands in the input\n\t var external = false;\n\t var left = [];\n\t var right = [];\n\t for (var k = 0; k < u5.length; k++) {\n\t if (external) right.push(u5[k]);else left.push(u5[k]);\n\n\t if (self.dotBracketBreaks.indexOf(u5[k]) >= 0) external = true;\n\t }\n\n\t if (external) {\n\t return [['h', level, u5.sort(numberSort)]];\n\t } else\n\t // if not, this is a simple hairpin loop\n\t return [['h', level, u5.sort(numberSort)]];\n\t }\n\t }\n\n\t if (pt[i] != j) {\n\t //multiloop\n\t var m = u5;\n\t var k = i;\n\n\t // the nucleotide before and the starting nucleotide\n\t m.push(k);\n\t while (k <= j) {\n\t // recurse into a stem\n\t elements = elements.concat(self.ptToElements(pt, level, k, pt[k]));\n\n\t // add the nucleotides between stems\n\t m.push(pt[k]);\n\t k = pt[k] + 1;\n\t for (; pt[k] === 0 && k <= j; k++) {\n\t m.push(k);\n\t }\n\t m.push(k);\n\t }\n\t m.pop();\n\t m = m.concat(u3);\n\n\t if (m.length > 0) {\n\t if (level === 0) elements.push(['e', level, m.sort(numberSort)]);else elements.push(['m', level, m.sort(numberSort)]);\n\t }\n\n\t return elements;\n\t }\n\n\t if (pt[i] === j) {\n\t //interior loop\n\t u5.push(i);\n\t u3.push(j);\n\n\t var combined = u5.concat(u3);\n\t if (combined.length > 4) {\n\t if (level === 0) elements.push(['e', level, u5.concat(u3).sort(numberSort)]);else elements.push(['i', level, u5.concat(u3).sort(numberSort)]);\n\t }\n\t }\n\n\t var s = [];\n\t //go through the stem\n\t while (pt[i] === j && i < j) {\n\t //one stem\n\t s.push(i);\n\t s.push(j);\n\n\t i += 1;\n\t j -= 1;\n\n\t level += 1;\n\t }\n\n\t u5 = [i - 1];\n\t u3 = [j + 1];\n\t elements.push(['s', level, s.sort(numberSort)]);\n\n\t return elements.concat(self.ptToElements(pt, level, i, j));\n\t };\n\n\t self.addLabels = function (startNumber, labelInterval) {\n\t if (arguments.length === 0) {\n\t startNumber = 1;\n\t labelInterval = 10;\n\t }\n\n\t if (arguments.length === 1) labelInterval = 10;\n\n\t if (labelInterval === 0) return self;\n\n\t if (labelInterval <= 0) console.log('The label interval entered in invalid:', labelInterval);\n\n\t for (var i = 1; i <= self.pairtable[0]; i++) {\n\t // add labels\n\t if (i % labelInterval === 0) {\n\t //create a node for each label\n\t var newX, newY;\n\n\t var thisNode = self.nodes[i - 1];\n\t var prevNode, nextNode;\n\t var prevVec, nextVec;\n\n\t if (self.rnaLength == 1) {\n\t nextVec = [thisNode.x - 15, thisNode.y];\n\t prevVec = [thisNode.x - 15, thisNode.y];\n\t } else {\n\t // if we're labelling the first node, then label it in relation to the last\n\t if (i == 1) prevNode = self.nodes[self.rnaLength - 1];else prevNode = self.nodes[i - 2];\n\n\t // if we're labelling the last node, then label it in relation to the first\n\t if (i == self.rnaLength) nextNode = self.nodes[0];else nextNode = self.nodes[i];\n\n\t // this nucleotide and its neighbors are paired\n\t if (self.pairtable[nextNode.num] !== 0 && self.pairtable[prevNode.num] !== 0 && self.pairtable[thisNode.num] !== 0) {\n\t prevNode = nextNode = self.nodes[self.pairtable[thisNode.num] - 1];\n\t }\n\n\t // this node is paired but at least one of its neighbors is unpaired\n\t // place the label in the direction of the two neighbors\n\t if (self.pairtable[thisNode.num] !== 0 && (self.pairtable[nextNode.num] === 0 || self.pairtable[prevNode.num] === 0)) {\n\t nextVec = [thisNode.x - nextNode.x, thisNode.y - nextNode.y];\n\t prevVec = [thisNode.x - prevNode.x, thisNode.y - prevNode.y];\n\t } else {\n\t nextVec = [nextNode.x - thisNode.x, nextNode.y - thisNode.y];\n\t prevVec = [prevNode.x - thisNode.x, prevNode.y - thisNode.y];\n\t }\n\t }\n\n\t var combinedVec = [nextVec[0] + prevVec[0], nextVec[1] + prevVec[1]];\n\t var vecLength = Math.sqrt(combinedVec[0] * combinedVec[0] + combinedVec[1] * combinedVec[1]);\n\t var normedVec = [combinedVec[0] / vecLength, combinedVec[1] / vecLength];\n\t var offsetVec = [-15 * normedVec[0], -15 * normedVec[1]];\n\n\t var newX = self.nodes[i - 1].x + offsetVec[0];\n\t var newY = self.nodes[i - 1].y + offsetVec[1];\n\n\t var newNode = { 'name': i + self.startNumberArray[i - 1] - 1,\n\t 'num': -1,\n\t 'radius': 6,\n\t 'rna': self,\n\t 'nodeType': 'label',\n\t 'structName': self.structName,\n\t 'elemType': 'l',\n\t 'x': newX,\n\t 'y': newY,\n\t 'px': newX,\n\t 'py': newY,\n\t 'uid': generateUUID() };\n\t var newLink = { 'source': self.nodes[i - 1],\n\t 'target': newNode,\n\t 'value': 1,\n\t 'linkType': 'label_link',\n\t 'uid': generateUUID() };\n\n\t self.nodes.push(newNode);\n\t self.links.push(newLink);\n\t }\n\t }\n\n\t return self;\n\t };\n\n\t self.recalculateElements = function () {\n\t self.removePseudoknots();\n\t self.elements = self.ptToElements(self.pairtable, 0, 1, self.dotbracket.length);\n\n\t if (self.circular) {\n\t //check to see if the external loop is a hairpin or a multiloop\n\t externalLoop = self.elements.filter(function (d) {\n\t if (d[0] == 'e') return true;\n\t });\n\n\t if (externalLoop.length > 0) {\n\t eloop = externalLoop[0];\n\t nucs = eloop[2].sort(numberSort);\n\n\t prev = nucs[0];\n\t hloop = true;\n\t numGreater = 0;\n\t for (var i = 1; i < nucs.length; i++) {\n\t if (nucs[i] - prev > 1) {\n\t numGreater += 1;\n\t }\n\t prev = nucs[i];\n\t }\n\n\t if (numGreater == 1) {\n\t eloop[0] = 'h';\n\t } else if (numGreater == 2) {\n\t eloop[0] = 'i';\n\t } else {\n\t eloop[0] = 'm';\n\t }\n\t }\n\t }\n\n\t return self;\n\t };\n\n\t self.reassignLinkUids = function () {\n\t // reassign uids to the links, corresponding to the uids of the two nodes\n\t // they connect\n\t var i;\n\n\t for (var i = 0; i < self.links.length; i++) {\n\t self.links[i].uid = self.links[i].source.uid + self.links[i].target.uid;\n\t }\n\n\t return self;\n\t };\n\n\t self.removePseudoknots = function () {\n\t if (self.pairtable.length > 1) self.pseudoknotPairs = self.pseudoknotPairs.concat(_rnautils.rnaUtilities.removePseudoknotsFromPairtable(self.pairtable));\n\n\t return self;\n\t };\n\n\t self.addPseudoknots = function () {\n\t /* Add all of the pseudoknot pairs which are stored outside\n\t * of the pairtable back to the pairtable\n\t */\n\t var pt = self.pairtable;\n\t var pseudoknotPairs = self.pseudoknotPairs;\n\n\t for (var i = 0; i < pseudoknotPairs.length; i++) {\n\t pt[pseudoknotPairs[i][0]] = pseudoknotPairs[i][1];\n\t pt[pseudoknotPairs[i][1]] = pseudoknotPairs[i][0];\n\t }\n\n\t self.pseudoknotPairs = [];\n\t return self;\n\t };\n\n\t self.addName = function (name) {\n\t if (typeof name == 'undefined') {\n\t self.name = '';\n\t return self;\n\t } else {\n\t self.name = name;\n\t return self;\n\t }\n\t };\n\n\t if (self.rnaLength > 0) self.recalculateElements();\n\t}\n\n\tfunction moleculesToJson(moleculesJson) {\n\t /* Convert a list of RNA and protein molecules to a list of RNAGraph\n\t * ProteinGraph and extraLinks structure */\n\n\t var nodes = {}; //index the nodes by uid\n\t var graphs = [];\n\t var extraLinks = [];\n\n\t // Create the graphs for each molecule\n\t for (var i = 0; i < moleculesJson.molecules.length; i++) {\n\t var molecule = moleculesJson.molecules[i];\n\t var rg;\n\n\t if (molecule.type == 'rna') {\n\t rg = new RNAGraph(molecule.seq, molecule.ss, molecule.header);\n\t rg.circularizeExternal = true;\n\t rg.elementsToJson().addPositions('nucleotide', molecule.positions).addLabels().reinforceStems().reinforceLoops();\n\t } else if (molecule.type == 'protein') {\n\t rg = new ProteinGraph(molecule.header, molecule.size);\n\t }\n\n\t rg.addUids(molecule.uids);\n\n\t for (var j = 0; j < rg.nodes.length; j++) {\n\t nodes[rg.nodes[j].uid] = rg.nodes[j];\n\t }\n\n\t graphs.push(rg);\n\t }\n\n\t //Add the extra links\n\t for (var i = 0; i < moleculesJson.extraLinks.length; i++) {\n\t link = moleculesJson.extraLinks[i];\n\n\t link.source = nodes[link.source];\n\t link.target = nodes[link.target];\n\t link.uid = generateUUID();\n\n\t extraLinks.push(link);\n\t }\n\n\t return { 'graphs': graphs, 'extraLinks': extraLinks };\n\t};\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t!function(r,t){ true?module.exports=t():\"function\"==typeof define&&define.amd?define([],t):\"object\"==typeof exports?exports.rnautils=t():r.rnautils=t()}(this,function(){return function(r){function t(n){if(e[n])return e[n].exports;var o=e[n]={exports:{},id:n,loaded:!1};return r[n].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var e={};return t.m=r,t.c=e,t.p=\"\",t(0)}([function(r,t,e){r.exports=e(1)},function(r,t){\"use strict\";function e(r,t){if(r===t)return!0;if(null===r||null===t)return!1;if(r.length!=t.length)return!1;for(var e=0;eabcdefghijklmnopqrstuvwxyz\".split(\"\"),r.inverseBrackets=function(r){for(var t={},e=0;e=o;o++){n[o]=new Array(t+1);for(var a=o;t>=a;a++)n[o][a]=0}for(var s=0,o=t-e-1;o>0;o--)for(var a=o+e+1;t>=a;a++){s=n[o][a-1];for(var i=a-e-1;i>=o;i--)r[i]===a&&(s=Math.max(s,(i>o?n[o][i-1]:0)+1+(a-i-1>0?n[i+1][a-1]:0)));n[o][a]=s}return s=n[1][t],n},r.backtrackMaximumMatching=function(t,e){var n=Array.apply(null,Array(t.length)).map(function(){return 0});return r.mmBt(t,n,e,1,t.length-1),n},r.mmBt=function(t,e,n,o,a){var s=t[o][a],i=0;if(!(i>a-o-1)){if(t[o][a-1]==s)return void r.mmBt(t,e,n,o,a-1);for(var l=a-i-1;l>=o;l--)if(n[a]===l){var u=l>o?t[o][l-1]:0,c=a-l-1>0?t[l+1][a-1]:0;if(u+c+1==s)return e[l]=a,e[a]=l,l>o&&r.mmBt(t,e,n,o,l-1),void r.mmBt(t,e,n,l+1,a-1)}console.log(\"FAILED!!!\"+o+\",\"+a+\": backtracking failed!\")}},r.dotbracketToPairtable=function(t){var e=Array.apply(null,new Array(t.length+1)).map(Number.prototype.valueOf,0);e[0]=t.length;for(var n={},o=0;o0)throw\"Unmatched base at position \"+n[c][0];return e},r.insertIntoStack=function(r,t,e){for(var n=0;r[n].length>0&&r[n][r[n].length-1]n?r.bracketLeft[r.insertIntoStack(e,n,t[n])]:r.bracketRight[r.deleteFromStack(e,n)]}return a},r.findUnmatched=function(t,e,n){for(var o,a=[],s=[],i=e,l=n,o=e;n>=o;o++)0!==t[o]&&(t[o]n)&&s.push([o,t[o]]);for(var o=i;l>=o;o++){for(;0===t[o]&&l>=o;)o++;for(n=t[o];t[o]===n;)o++,n--;a=a.concat(r.findUnmatched(t,o,n))}return s.length>0&&a.push(s),a},r.removePseudoknotsFromPairtable=function(t){for(var e=r.maximumMatching(t),n=r.backtrackMaximumMatching(e,t),o=[],a=1;ao)return[];for(;0===t[n];n++)l.push(n);for(;0===t[o];o--)u.push(o);if(n>o){if(l.push(n),0===e)return[[\"e\",e,l.sort(a)]];for(var c=!1,f=[],p=[],h=0;h=0&&(c=!0);return c?[[\"h\",e,l.sort(a)]]:[[\"h\",e,l.sort(a)]]}if(t[n]!=o){var m=l,h=n;for(m.push(h);o>=h;){for(i=i.concat(r.ptToElements(t,e,h,t[h],s)),m.push(t[h]),h=t[h]+1;0===t[h]&&o>=h;h++)m.push(h);m.push(h)}return m.pop(),m=m.concat(u),m.length>0&&(0===e?i.push([\"e\",e,m.sort(a)]):i.push([\"m\",e,m.sort(a)])),i}if(t[n]===o){l.push(n),u.push(o);var v=l.concat(u);v.length>4&&(0===e?i.push([\"e\",e,l.concat(u).sort(a)]):i.push([\"i\",e,l.concat(u).sort(a)]))}for(var g=[];t[n]===o&&o>n;)g.push(n),g.push(o),n+=1,o-=1,e+=1;return l=[n-1],u=[o+1],i.push([\"s\",e,g.sort(a)]),i.concat(r.ptToElements(t,e,n,o,s))}}function o(r){var t=this;return t.colorsText=r,t.parseRange=function(r){for(var t=r.split(\",\"),e=[],n=0;n=i;i++)e.push(i);else console.log(\"Malformed range (too many dashes):\",r)}return e},t.parseColorText=function(r){for(var e=r.split(\"\\n\"),n=\"\",o=1,a={colorValues:{\"\":{}},range:[\"white\",\"steelblue\"]},s=[],i=0;i\"!=e[i][0])for(var l=e[i].trim().split(/[\\s]+/),u=0;ur&&(n=r),r>o&&(o=r));for(a in t.colorsJson.colorValues[e])r=t.colorsJson.colorValues[e][a],\"number\"==typeof r&&(t.colorsJson.colorValues[e][a]=(r-n)/(o-n))}return t},t.parseColorText(t.colorsText),t}Object.defineProperty(t,\"__esModule\",{value:!0}),t.arraysEqual=e,t.RNAUtilities=n,t.ColorScheme=o;var a=function(r,t){return r-t};t.rnaUtilities=new n}])});\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\texports.rnaPlot = rnaPlot;\n\n\tvar _simplernaplot = __webpack_require__(4);\n\n\tvar _rnagraph = __webpack_require__(1);\n\n\tvar _naview = __webpack_require__(5);\n\n\tvar _rnautils = __webpack_require__(2);\n\n\t__webpack_require__(11);\n\n\tfunction isNormalInteger(str) {\n\t //http://stackoverflow.com/a/10834843/899470\n\t return (/^\\+?(0|[1-9]\\d*)$/.test(str)\n\t );\n\t}\n\n\tif (typeof String.prototype.trim === 'undefined') {\n\t String.prototype.trim = function () {\n\t return String(this).replace(/^\\s+|\\s+$/g, '');\n\t };\n\t}\n\n\tfunction rnaPlot() {\n\t var options = {\n\t 'width': 400,\n\t 'height': 400,\n\t 'nucleotideRadius': 5,\n\t 'rnaEdgePadding': 0, // how far the leftmost, rightmost, topmost and bottomost\n\t // nucleotides are from the edge of the plot\n\t 'labelInterval': 0,\n\t 'showNucleotideLabels': true,\n\t 'startNucleotideNumber': 1,\n\t 'bundleExternalLinks': false\n\t };\n\n\t var xScale, yScale;\n\n\t function createTransformToFillViewport(xValues, yValues) {\n\t var molName = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n\n\t // create transform that will scale the x and y values so that\n\t // they fill the available viewport\n\n\t // find out leftmost, rightmost, topmost, bottommost positions of each\n\t // nucleotide so that we can create a scale\n\t var xExtent = d3.extent(xValues);\n\t var yExtent = d3.extent(yValues);\n\n\t var NAME_OFFSET = 30;\n\t if (molName != '') yExtent[1] += NAME_OFFSET;\n\n\t // add the radius of the nucleotides\n\t xExtent[0] -= options.nucleotideRadius + options.rnaEdgePadding;\n\t yExtent[0] -= options.nucleotideRadius + options.rnaEdgePadding;\n\n\t xExtent[1] += options.nucleotideRadius + options.rnaEdgePadding;\n\t yExtent[1] += options.nucleotideRadius + options.rnaEdgePadding;\n\n\t // find out how wide and height the molecule\n\t var xRange = xExtent[1] - xExtent[0];\n\t var yRange = yExtent[1] - yExtent[0];\n\n\t // how much wider / taller is it than the available viewport\n\t var xExtra = xRange - options.width;\n\t var yExtra = yRange - options.height;\n\n\t // once we have a scale for one dimension, we can create the scale for the other\n\t // keeping the same expansion / shrinking ratio\n\t function createOtherScale(firstScale, newDomain, newRange) {\n\t var scaleFactor = (firstScale.range()[1] - firstScale.range()[0]) / (firstScale.domain()[1] - firstScale.domain()[0]);\n\t var newWidth = (newDomain[1] - newDomain[0]) * scaleFactor;\n\t var newMargin = (newRange[1] - newRange[0] - newWidth) / 2;\n\n\t return { 'scaleFactor': scaleFactor,\n\t 'scale': d3.scale.linear().domain(newDomain).range([newRange[0] + newMargin, newRange[1] - newMargin]) };\n\t }\n\n\t var ret;\n\n\t if (xExtra > yExtra) {\n\t // we have to shrink more in the x-dimension than the y\n\t xScale = d3.scale.linear().domain(xExtent).range([0, options.width]);\n\n\t ret = createOtherScale(xScale, yExtent, [0, options.height]);\n\t yScale = ret.scale;\n\t } else {\n\t // we have to shrink more in the x-dimension than the y\n\t yScale = d3.scale.linear().domain(yExtent).range([0, options.height]);\n\n\t ret = createOtherScale(yScale, xExtent, [0, options.width]);\n\t xScale = ret.scale;\n\t }\n\n\t var xOffset = xScale.range()[0] - xScale.domain()[0];\n\t var yOffset = yScale.range()[0] - yScale.domain()[0];\n\n\t return 'translate(' + -(xScale.domain()[0] * ret.scaleFactor - xScale.range()[0]) + ',' + -(yScale.domain()[0] * ret.scaleFactor - yScale.range()[0]) + ')' + 'scale(' + ret.scaleFactor + ')';\n\t }\n\n\t function createNucleotides(selection, nucleotideNodes) {\n\t // create groupings for each nucleotide and label\n\t var gs = selection.selectAll('.rna-base').data(nucleotideNodes).enter().append('svg:g').attr('transform', function (d) {\n\t return 'translate(' + d.x + ',' + d.y + ')';\n\t });\n\n\t var circles = gs.append('svg:circle').attr('r', options.nucleotideRadius).classed('rna-base', true);\n\n\t if (options.showNucleotideLabels) {\n\t var nucleotideLabels = gs.append('svg:text').text(function (d) {\n\t return d.name;\n\t }).attr('text-anchor', 'middle').attr('dominant-baseline', 'central').classed('nucleotide-label', true).append('svg:title').text(function (d) {\n\t return d.struct_name + ':' + d.num;\n\t });\n\t }\n\t }\n\n\t function createLabels(selection, labelNodes) {\n\t // create groupings for each nucleotide and label\n\n\t var gs = selection.selectAll('.rnaLabel').data(labelNodes).enter().append('svg:g').attr('transform', function (d) {\n\t return 'translate(' + d.x + ',' + d.y + ')';\n\t });\n\n\t var numberLabels = gs.append('svg:text').text(function (d) {\n\t return d.name;\n\t }).attr('text-anchor', 'middle').attr('font-weight', 'bold').attr('dominant-baseline', 'central').classed('number-label', true);\n\t }\n\n\t function createName(selection, name) {\n\t selection.append('svg:text').attr('transform', 'translate(' + xScale.invert(options.width / 2) + ',' + yScale.invert(options.height) + ')').attr('dy', -10).classed('rna-name', true).text(name);\n\t }\n\n\t function makeExternalLinksBundle(selection, links) {\n\t var nodesDict = {};\n\t var linksList = [];\n\t links = links.filter(function (d) {\n\t return d.linkType == 'correct' || d.linkType == 'incorrect' || d.linkType == 'extra';\n\t });\n\n\t selection.selectAll('[link-type=extra]').remove();\n\n\t for (var i = 0; i < links.length; i++) {\n\t if (links[i].source === null || links[i].target === null) continue;\n\n\t nodesDict[links[i].source.uid] = links[i].source;\n\t nodesDict[links[i].target.uid] = links[i].target;\n\n\t linksList.push({ 'source': links[i].source.uid, 'target': links[i].target.uid, 'linkType': links[i].linkType, 'extraLinkType': links[i].extraLinkType });\n\t }\n\n\t var fbundling = d3.ForceEdgeBundling().nodes(nodesDict).edges(linksList).compatibility_threshold(0.8).step_size(0.2);\n\t var results = fbundling();\n\n\t var d3line = d3.svg.line().x(function (d) {\n\t return d.x;\n\t }).y(function (d) {\n\t return d.y;\n\t }).interpolate('linear');\n\n\t for (var i = 0; i < results.length; i++) {\n\t var edge_subpoint_data = results[i];\n\t // for each of the arrays in the results\n\t // draw a line between the subdivions points for that edge\n\n\t selection.append('path').attr('d', d3line(edge_subpoint_data)).style('fill', 'none').attr('link-type', function (d) {\n\t return linksList[i].linkType;\n\t }).attr('extra-link-type', function (d) {\n\t return linksList[i].extraLinkType;\n\t }).style('stroke-opacity', 0.4); //use opacity as blending\n\t }\n\t }\n\n\t function createLinks(selection, links) {\n\t links = links.filter(function (d) {\n\t return d.source !== null && d.target !== null;\n\t });\n\t var gs = selection.selectAll('.rna-link').data(links).enter().append('svg:line').attr('x1', function (d) {\n\t return d.source.x;\n\t }).attr('x2', function (d) {\n\t return d.target.x;\n\t }).attr('y1', function (d) {\n\t return d.source.y;\n\t }).attr('y2', function (d) {\n\t return d.target.y;\n\t }).attr('link-type', function (d) {\n\t return d.linkType;\n\t }).attr('extra-link-type', function (d) {\n\t return d.extraLinkType;\n\t }).classed('rna-link', true);\n\t }\n\n\t function chart(selection) {\n\t selection.each(function (data) {\n\t // data should be a dictionary containing at least a structure\n\t // and possibly a sequence\n\t var rg = new _rnagraph.RNAGraph(data.sequence, data.structure, data.name).recalculateElements().elementsToJson().addName(data.name);\n\n\t data.rnaGraph = rg;\n\t // calculate the position of each nucleotide\n\t // the positions of the labels will be calculated in\n\t // the addLabels function\n\t //var positions = simpleXyCoordinates(rg.pairtable);\n\t var naview = new _naview.NAView();\n\n\t var naViewPositions = naview.naview_xy_coordinates(rg.pairtable);\n\t var positions = [];\n\t for (var i = 0; i < naViewPositions.nbase; i++) {\n\t positions.push([naViewPositions.x[i], naViewPositions.y[i]]);\n\t }\n\t rg.addPositions('nucleotide', positions).reinforceStems().reinforceLoops().addExtraLinks(data.extraLinks).addLabels(options.startNucleotideNumber, options.labelInterval);\n\n\t // create a transform that will fit the molecule to the\n\t // size of the viewport (canvas, svg, whatever)\n\t var fillViewportTransform = createTransformToFillViewport(rg.nodes.map(function (d) {\n\t return d.x;\n\t }), rg.nodes.map(function (d) {\n\t return d.y;\n\t }));\n\n\t var gTransform = d3.select(this).append('g').attr('transform', fillViewportTransform);\n\n\t var nucleotideNodes = rg.nodes.filter(function (d) {\n\t return d.nodeType == 'nucleotide';\n\t });\n\n\t var labelNodes = rg.nodes.filter(function (d) {\n\t return d.nodeType == 'label';\n\t });\n\n\t var links = rg.links;\n\n\t createLinks(gTransform, links);\n\t createNucleotides(gTransform, nucleotideNodes);\n\t createLabels(gTransform, labelNodes);\n\t createName(gTransform, data.name);\n\n\t if (options.bundleExternalLinks) {\n\t makeExternalLinksBundle(gTransform, links);\n\t }\n\t });\n\t }\n\n\t chart.width = function (_) {\n\t if (!arguments.length) return options.width;\n\t options.width = _;\n\t return chart;\n\t };\n\n\t chart.height = function (_) {\n\t if (!arguments.length) return options.height;\n\t options.height = _;\n\t return chart;\n\t };\n\n\t chart.showNucleotideLabels = function (_) {\n\t if (!arguments.length) return options.showNucleotideLabels;\n\t options.showNucleotideLabels = _;\n\t return chart;\n\t };\n\n\t chart.rnaEdgePadding = function (_) {\n\t if (!arguments.length) return options.rnaEdgePadding;\n\t options.rnaEdgePadding = _;\n\t return chart;\n\t };\n\n\t chart.nucleotideRadius = function (_) {\n\t if (!arguments.length) return options.nucleotideRadius;\n\t options.nucleotideRadius = _;\n\t return chart;\n\t };\n\n\t chart.labelInterval = function (_) {\n\t if (!arguments.length) return options.labelInterval;\n\t options.labelInterval = _;\n\t return chart;\n\t };\n\n\t chart.showNucleotideLabels = function (_) {\n\t if (!arguments.length) return options.showNucleotideLabels;\n\t options.showNucleotideLabels = _;\n\t return chart;\n\t };\n\n\t chart.startNucleotideNumber = function (_) {\n\t if (!arguments.length) return options.startNucleotideNumber;\n\t options.startNucleotideNumber = _;\n\t return chart;\n\t };\n\n\t chart.bundleExternalLinks = function (_) {\n\t if (!arguments.length) return options.bundleExternalLinks;\n\t options.bundleExternalLinks = _;\n\t return chart;\n\t };\n\n\t return chart;\n\t}\n\tvar number_sort = function number_sort(a, b) {\n\t return a - b;\n\t};\n\n\tfunction RNAUtilities() {\n\t var self = this;\n\n\t // the brackets to use when constructing dotbracket strings\n\t // with pseudoknots\n\t self.bracket_left = '([{ 0; i--) {\n\n\t for (var j = i + TURN + 1; j <= n; j++) {\n\t maximum = mm[i][j - 1];\n\n\t for (var l = j - TURN - 1; l >= i; l--) {\n\t if (pt[l] === j) {\n\n\t // we have a base pair here\n\t maximum = Math.max(maximum, (l > i ? mm[i][l - 1] : 0) + 1 + (j - l - 1 > 0 ? mm[l + 1][j - 1] : 0));\n\t }\n\t }\n\n\t mm[i][j] = maximum;\n\t }\n\t }maximum = mm[1][n];\n\n\t return mm;\n\t };\n\n\t self.backtrackMaximumMatching = function (mm, old_pt) {\n\t var pt = Array.apply(null, Array(mm.length)).map(function () {\n\t return 0;\n\t });\n\t //create an array containing zeros\n\n\t self.mm_bt(mm, pt, old_pt, 1, mm.length - 1);\n\t return pt;\n\t };\n\n\t self.mm_bt = function (mm, pt, old_pt, i, j) {\n\t // Create a pairtable from the backtracking\n\t var maximum = mm[i][j];\n\t var TURN = 0;\n\n\t if (j - i - 1 < TURN) return; /* no more pairs */\n\n\t if (mm[i][j - 1] == maximum) {\n\t /* j is unpaired */\n\t self.mm_bt(mm, pt, old_pt, i, j - 1);\n\t return;\n\t }\n\n\t for (var q = j - TURN - 1; q >= i; q--) {\n\t /* j is paired with some q */\n\t if (old_pt[j] !== q) continue;\n\n\t var left_part = q > i ? mm[i][q - 1] : 0;\n\t var enclosed_part = j - q - 1 > 0 ? mm[q + 1][j - 1] : 0;\n\n\t if (left_part + enclosed_part + 1 == maximum) {\n\t // there's a base pair between j and q\n\t pt[q] = j;\n\t pt[j] = q;\n\n\t if (i < q) self.mm_bt(mm, pt, old_pt, i, q - 1);\n\n\t self.mm_bt(mm, pt, old_pt, q + 1, j - 1);\n\t return;\n\t }\n\t }\n\n\t //alert(i + ',' + j + ': backtracking failed!');\n\t console.log('FAILED!!!' + i + ',' + j + ': backtracking failed!');\n\t };\n\n\t self.dotbracketToPairtable = function (dotbracket) {\n\t // create an array and initialize it to 0\n\t pt = Array.apply(null, new Array(dotbracket.length + 1)).map(Number.prototype.valueOf, 0);\n\n\t // the first element is always the length of the RNA molecule\n\t pt[0] = dotbracket.length;\n\n\t // store the pairing partners for each symbol\n\t stack = {};\n\t for (i = 0; i < self.bracket_left.length; i++) {\n\t stack[i] = [];\n\t }\n\n\t // lookup the index of each symbol in the bracket array\n\t inverse_bracket_left = self.inverse_brackets(self.bracket_left);\n\t inverse_bracket_right = self.inverse_brackets(self.bracket_right);\n\n\t for (i = 0; i < dotbracket.length; i++) {\n\t a = dotbracket[i];\n\t ni = i + 1;\n\n\t if (a == '.') {\n\t // unpaired\n\t pt[ni] = 0;\n\t } else {\n\t if (a in inverse_bracket_left) {\n\t // open pair?\n\t stack[inverse_bracket_left[a]].push(ni);\n\t } else if (a in inverse_bracket_right) {\n\t // close pair?\n\t j = stack[inverse_bracket_right[a]].pop();\n\n\t pt[ni] = j;\n\t pt[j] = ni;\n\t } else {\n\t throw 'Unknown symbol in dotbracket string';\n\t }\n\t }\n\t }\n\n\t for (key in stack) {\n\t if (stack[key].length > 0) {\n\t throw 'Unmatched base at position ' + stack[key][0];\n\t }\n\t }\n\n\t return pt;\n\t };\n\n\t self.insert_into_stack = function (stack, i, j) {\n\t var k = 0;\n\t while (stack[k].length > 0 && stack[k][stack[k].length - 1] < j) {\n\t k += 1;\n\t }\n\n\t stack[k].push(j);\n\t return k;\n\t };\n\n\t self.delete_from_stack = function (stack, j) {\n\t var k = 0;\n\t while (stack[k].length === 0 || stack[k][stack[k].length - 1] != j) {\n\t k += 1;\n\t }\n\t stack[k].pop();\n\t return k;\n\t };\n\n\t self.pairtableToDotbracket = function (pt) {\n\t // store the pairing partners for each symbol\n\t stack = {};\n\t for (i = 0; i < pt[0]; i++) {\n\t stack[i] = [];\n\t }\n\n\t seen = {};\n\t res = '';\n\t for (i = 1; i < pt[0] + 1; i++) {\n\t if (pt[i] !== 0 && pt[i] in seen) {\n\t throw 'Invalid pairtable contains duplicate entries';\n\t }\n\t seen[pt[i]] = true;\n\n\t if (pt[i] === 0) {\n\t res += '.';\n\t } else {\n\t if (pt[i] > i) {\n\t res += self.bracket_left[self.insert_into_stack(stack, i, pt[i])];\n\t } else {\n\t res += self.bracket_right[self.delete_from_stack(stack, i)];\n\t }\n\t }\n\t }\n\n\t return res;\n\t };\n\n\t self.find_unmatched = function (pt, from, to) {\n\t /*\n\t * Find unmatched nucleotides in this molecule.\n\t */\n\t var to_remove = [];\n\t var unmatched = [];\n\n\t var orig_from = from;\n\t var orig_to = to;\n\n\t for (var i = from; i <= to; i++) {\n\t if (pt[i] !== 0 && (pt[i] < from || pt[i] > to)) unmatched.push([i, pt[i]]);\n\t }for (i = orig_from; i <= orig_to; i++) {\n\t while (pt[i] === 0 && i <= orig_to) {\n\t i++;\n\t }to = pt[i];\n\n\t while (pt[i] === to) {\n\t i++;\n\t to--;\n\t }\n\n\t to_remove = to_remove.concat(self.find_unmatched(pt, i, to));\n\t }\n\n\t if (unmatched.length > 0) to_remove.push(unmatched);\n\n\t return to_remove;\n\t };\n\n\t self.removePseudoknotsFromPairtable = function (pt) {\n\t /* Remove the pseudoknots from this structure in such a fashion\n\t * that the least amount of base-pairs need to be broken\n\t *\n\t * The pairtable is manipulated in place and a list of tuples\n\t * indicating the broken base pairs is returned.\n\t */\n\n\t var mm = self.maximumMatching(pt);\n\t var new_pt = self.backtrackMaximumMatching(mm, pt);\n\t var removed = [];\n\n\t for (var i = 1; i < pt.length; i++) {\n\t if (pt[i] < i) continue;\n\n\t if (new_pt[i] != pt[i]) {\n\t removed.push([i, pt[i]]);\n\t pt[pt[i]] = 0;\n\t pt[i] = 0;\n\t }\n\t }\n\n\t return removed;\n\t };\n\t}\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports) {\n\n\t\"use strict\";\n\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\texports.simpleXyCoordinates = simpleXyCoordinates;\n\tfunction simpleXyCoordinates(pair_table) {\n\t var INIT_ANGLE = 0.; /* initial bending angle */\n\t var INIT_X = 100.; /* coordinate of first digit */\n\t var INIT_Y = 100.; /* see above */\n\t var RADIUS = 15.;\n\n\t var x = [],\n\t y = [];\n\n\t var i, len;\n\t var alpha;\n\n\t len = pair_table[0];\n\t var angle = Array.apply(null, new Array(len + 5)).map(Number.prototype.valueOf, 0);\n\t var loop_size = Array.apply(null, new Array(16 + Math.floor(len / 5))).map(Number.prototype.valueOf, 0);\n\t var stack_size = Array.apply(null, new Array(16 + Math.floor(len / 5))).map(Number.prototype.valueOf, 0);\n\n\t var lp = 0;\n\t var stk = 0;\n\t var PIHALF = Math.PI / 2;\n\n\t var loop = function loop(i, j, pair_table)\n\t /* i, j are the positions AFTER the last pair of a stack; i.e\n\t i-1 and j+1 are paired. */\n\t {\n\t var count = 2; /* counts the VERTICES of a loop polygon; that's\n\t NOT necessarily the number of unpaired bases!\n\t Upon entry the loop has already 2 vertices, namely\n\t the pair i-1/j+1. */\n\n\t var r = 0,\n\t bubble = 0; /* bubble counts the unpaired digits in loops */\n\n\t var i_old, partner, k, l, start_k, start_l, fill, ladder;\n\t var begin, v, diff;\n\t var polygon;\n\n\t var remember = Array.apply(null, new Array(3 + Math.floor((j - i) / 5) * 2)).map(Number.prototype.valueOf, 0);\n\n\t i_old = i - 1, j++; /* j has now been set to the partner of the\n\t previous pair for correct while-loop\n\t termination. */\n\t while (i != j) {\n\t partner = pair_table[i];\n\t if (!partner || i == 0) i++, count++, bubble++;else {\n\t count += 2;\n\t k = i, l = partner; /* beginning of stack */\n\t remember[++r] = k;\n\t remember[++r] = l;\n\t i = partner + 1; /* next i for the current loop */\n\n\t start_k = k, start_l = l;\n\t ladder = 0;\n\t do {\n\t k++, l--, ladder++; /* go along the stack region */\n\t } while (pair_table[k] == l && pair_table[k] > k);\n\n\t fill = ladder - 2;\n\t if (ladder >= 2) {\n\t angle[start_k + 1 + fill] += PIHALF; /* Loop entries and */\n\t angle[start_l - 1 - fill] += PIHALF; /* exits get an */\n\t angle[start_k] += PIHALF; /* additional PI/2. */\n\t angle[start_l] += PIHALF; /* Why ? (exercise) */\n\t if (ladder > 2) {\n\t for (; fill >= 1; fill--) {\n\t angle[start_k + fill] = Math.PI; /* fill in the angles */\n\t angle[start_l - fill] = Math.PI; /* for the backbone */\n\t }\n\t }\n\t }\n\t stack_size[++stk] = ladder;\n\t if (k <= l) loop(k, l, pair_table);\n\t }\n\t }\n\n\t polygon = Math.PI * (count - 2) / count; /* bending angle in loop polygon */\n\t remember[++r] = j;\n\t begin = i_old < 0 ? 0 : i_old;\n\t for (v = 1; v <= r; v++) {\n\t diff = remember[v] - begin;\n\t for (fill = 0; fill <= diff; fill++) {\n\t angle[begin + fill] += polygon;\n\t }if (v > r) break;\n\t begin = remember[++v];\n\t }\n\t loop_size[++lp] = bubble;\n\t };\n\n\t loop(0, len + 1, pair_table);\n\t loop_size[lp] -= 2; /* correct for cheating with function loop */\n\n\t alpha = INIT_ANGLE;\n\t x[0] = INIT_X;\n\t y[0] = INIT_Y;\n\n\t var poss = [];\n\n\t poss.push([x[0], y[0]]);\n\t for (i = 1; i < len; i++) {\n\t x[i] = x[i - 1] + RADIUS * Math.cos(alpha);\n\t y[i] = y[i - 1] + RADIUS * Math.sin(alpha);\n\n\t poss.push([x[i], y[i]]);\n\t alpha += Math.PI - angle[i + 1];\n\t }\n\n\t return poss;\n\t}\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\texports.NAView = NAView;\n\n\tvar _radloop = __webpack_require__(6);\n\n\tvar _connection = __webpack_require__(7);\n\n\tvar _region = __webpack_require__(9);\n\n\tvar _base = __webpack_require__(10);\n\n\tvar _loop = __webpack_require__(8);\n\n\tfunction NAView() {\n\t this.ANUM = 9999.0;\n\t this.MAXITER = 500;\n\n\t this.bases = [];\n\t this.nbase = null;\n\t this.nregion = null;\n\t this.loop_count = null;\n\n\t this.root = new _loop.Loop();\n\t this.loops = [];\n\n\t this.regions = [];\n\n\t this.rlphead = new _radloop.Radloop();\n\n\t this.lencut = 0.8;\n\t this.RADIUS_REDUCTION_FACTOR = 1.4;\n\n\t // show algorithm step by step\n\t this.angleinc = null;\n\n\t this._h = null;\n\n\t // private boolean noIterationFailureYet = true;\n\n\t this.HELIX_FACTOR = 0.6;\n\t this.BACKBONE_DISTANCE = 27;\n\t}\n\n\tNAView.prototype.naview_xy_coordinates = function (pair_table) {\n\t var x = [];\n\t var y = [];\n\t if (pair_table.length === 0 || pair_table[0] === 0) {\n\t return 0;\n\t }\n\t var i;\n\t this.nbase = pair_table[0];\n\t this.bases = [];\n\t for (var index = 0; index < this.nbase + 1; index++) {\n\t this.bases.push(new _base.Base());\n\t }\n\t this.regions = [];\n\t for (var index = 0; index < this.nbase + 1; index++) {\n\t this.regions.push(new _region.Region());\n\t }\n\t this.read_in_bases(pair_table);\n\t this.rlphead = null;\n\t this.find_regions();\n\t this.loop_count = 0;\n\t this.loops = [];\n\t for (var index = 0; index < this.nbase + 1; index++) {\n\t this.loops.push(new _loop.Loop());\n\t }\n\t this.construct_loop(0);\n\t this.find_central_loop();\n\t this.traverse_loop(this.root, null);\n\n\t for (i = 0; i < this.nbase; i++) {\n\t x.push(100 + this.BACKBONE_DISTANCE * this.bases[i + 1].getX());\n\t y.push(100 + this.BACKBONE_DISTANCE * this.bases[i + 1].getY());\n\t }\n\n\t return {\n\t nbase: this.nbase,\n\t x: x,\n\t y: y\n\t };\n\t};\n\n\tNAView.prototype.read_in_bases = function read_in_bases(pair_table) {\n\t var i = null;\n\t var npairs = null;\n\n\t // Set up an origin.\n\t this.bases.push(new _base.Base());\n\t this.bases[0].setMate(0);\n\t this.bases[0].setExtracted(false);\n\t this.bases[0].setX(this.ANUM);\n\t this.bases[0].setY(this.ANUM);\n\n\t for (npairs = 0, i = 1; i <= this.nbase; i++) {\n\t this.bases.push(new _base.Base());\n\t this.bases[i].setExtracted(false);\n\t this.bases[i].setX(this.ANUM);\n\t this.bases[i].setY(this.ANUM);\n\t this.bases[i].setMate(pair_table[i]);\n\t if (pair_table[i] > i) npairs++;\n\t }\n\t // must have at least 1 pair to avoid segfault\n\t if (npairs == 0) {\n\t this.bases[1].setMate(this.nbase);\n\t this.bases[this.nbase].setMate(1);\n\t }\n\t};\n\n\tNAView.prototype.find_regions = function find_regions() {\n\t var i = null;\n\t var mate = null;\n\t var nb1 = null;\n\n\t nb1 = this.nbase + 1;\n\t var mark = [];\n\t for (i = 0; i < nb1; i++) {\n\t mark.push(false);\n\t }\n\t this.nregion = 0;\n\t for (i = 0; i <= this.nbase; i++) {\n\t if ((mate = this.bases[i].getMate()) != 0 && !mark[i]) {\n\t this.regions[this.nregion].setStart1(i);\n\t this.regions[this.nregion].setEnd2(mate);\n\t mark[i] = true;\n\t mark[mate] = true;\n\t this.bases[i].setRegion(this.regions[this.nregion]);\n\t this.bases[mate].setRegion(this.regions[this.nregion]);\n\t for (i++, mate--; i < mate && this.bases[i].getMate() == mate; i++, mate--) {\n\t mark[mate] = true;\n\t mark[i] = true;\n\t this.bases[i].setRegion(this.regions[this.nregion]);\n\t this.bases[mate].setRegion(this.regions[this.nregion]);\n\t }\n\t this.regions[this.nregion].setEnd1(--i);\n\t this.regions[this.nregion].setStart2(mate + 1);\n\n\t this.nregion++;\n\t }\n\t }\n\t};\n\n\tNAView.prototype.construct_loop = function construct_loop(ibase) {\n\t var i = null;\n\t var mate = null;\n\t var retloop = new _loop.Loop();\n\t var lp = new _loop.Loop();\n\t var cp = new _connection.Connection();\n\t var rp = new _region.Region();\n\t var rlp = new _radloop.Radloop();\n\t retloop = this.loops[this.loop_count++];\n\t retloop.setNconnection(0);\n\t retloop.setDepth(0);\n\t retloop.setNumber(this.loop_count);\n\t retloop.setRadius(0.0);\n\n\t for (rlp = this.rlphead; rlp != null; rlp = rlp.getNext()) {\n\t if (rlp.getLoopnumber() == this.loop_count) retloop.setRadius(rlp.getRadius());\n\t }i = ibase;\n\t do {\n\t if ((mate = this.bases[i].getMate()) != 0) {\n\t rp = this.bases[i].getRegion();\n\t if (!this.bases[rp.getStart1()].isExtracted()) {\n\t if (i == rp.getStart1()) {\n\t this.bases[rp.getStart1()].setExtracted(true);\n\t this.bases[rp.getEnd1()].setExtracted(true);\n\t this.bases[rp.getStart2()].setExtracted(true);\n\t this.bases[rp.getEnd2()].setExtracted(true);\n\t lp = this.construct_loop(rp.getEnd1() < this.nbase ? rp.getEnd1() + 1 : 0);\n\t } else if (i == rp.getStart2()) {\n\t this.bases[rp.getStart2()].setExtracted(true);\n\t this.bases[rp.getEnd2()].setExtracted(true);\n\t this.bases[rp.getStart1()].setExtracted(true);\n\t this.bases[rp.getEnd1()].setExtracted(true);\n\t lp = this.construct_loop(rp.getEnd2() < this.nbase ? rp.getEnd2() + 1 : 0);\n\t } else {\n\t console.log(\"Something went terribly wrong ....\");\n\t }\n\t retloop.setNconnection(retloop.getNconnection() + 1);\n\t cp = new _connection.Connection();\n\t retloop.setConnection(retloop.getNconnection() - 1, cp);\n\t retloop.setConnection(retloop.getNconnection(), null);\n\t cp.setLoop(lp);\n\t cp.setRegion(rp);\n\t if (i == rp.getStart1()) {\n\t cp.setStart(rp.getStart1());\n\t cp.setEnd(rp.getEnd2());\n\t } else {\n\t cp.setStart(rp.getStart2());\n\t cp.setEnd(rp.getEnd1());\n\t }\n\t cp.setExtruded(false);\n\t cp.setBroken(false);\n\t lp.setNconnection(lp.getNconnection() + 1);\n\t cp = new _connection.Connection();\n\t lp.setConnection(lp.getNconnection() - 1, cp);\n\t lp.setConnection(lp.getNconnection(), null);\n\t cp.setLoop(retloop);\n\t cp.setRegion(rp);\n\t if (i == rp.getStart1()) {\n\t cp.setStart(rp.getStart2());\n\t cp.setEnd(rp.getEnd1());\n\t } else {\n\t cp.setStart(rp.getStart1());\n\t cp.setEnd(rp.getEnd2());\n\t }\n\t cp.setExtruded(false);\n\t cp.setBroken(false);\n\t }\n\t i = mate;\n\t }\n\t if (++i > this.nbase) i = 0;\n\t } while (i != ibase);\n\t return retloop;\n\t};\n\n\tNAView.prototype.find_central_loop = function find_central_loop() {\n\t var lp = new _loop.Loop();\n\t var maxconn = null;\n\t var maxdepth = null;\n\t var i = null;\n\n\t determine_depths.bind(this)();\n\t maxconn = 0;\n\t maxdepth = -1;\n\t for (i = 0; i < this.loop_count; i++) {\n\t lp = this.loops[i];\n\t if (lp.getNconnection() > maxconn) {\n\t maxdepth = lp.getDepth();\n\t maxconn = lp.getNconnection();\n\t this.root = lp;\n\t } else if (lp.getDepth() > maxdepth && lp.getNconnection() == maxconn) {\n\t maxdepth = lp.getDepth();\n\t this.root = lp;\n\t }\n\t }\n\t};\n\n\tfunction determine_depths() {\n\t var lp = new _loop.Loop();\n\t var i = null;\n\t var j = null;\n\n\t for (i = 0; i < this.loop_count; i++) {\n\t lp = this.loops[i];\n\t for (j = 0; j < this.loop_count; j++) {\n\t this.loops[j].setMark(false);\n\t }\n\t lp.setDepth(depth(lp));\n\t }\n\t}\n\n\tfunction depth(lp) {\n\t var count = null;\n\t var ret = null;\n\t var d = null;\n\n\t if (lp.getNconnection() <= 1) {\n\t return 0;\n\t }\n\t if (lp.isMark()) {\n\t return -1;\n\t }\n\t lp.setMark(true);\n\t count = 0;\n\t ret = 0;\n\t for (var i = 0; lp.getConnection(i) != null; i++) {\n\t d = depth(lp.getConnection(i).getLoop());\n\t if (d >= 0) {\n\t if (++count == 1) {\n\t ret = d;\n\t } else if (ret > d) {\n\t ret = d;\n\t }\n\t }\n\t }\n\t lp.setMark(false);\n\t return ret + 1;\n\t}\n\n\tNAView.prototype.traverse_loop = function traverse_loop(lp, anchor_connection) {\n\t var xs, ys, xe, ye, xn, yn, angleinc, r;\n\t var radius, xc, yc, xo, yo, astart, aend, a;\n\t var cp, cpnext, acp, cpprev;\n\t var i, j, n, ic;\n\t var da, maxang;\n\t var count, icstart, icend, icmiddle, icroot;\n\t var done, done_all_connections, rooted;\n\t var sign;\n\t var midx, midy, nrx, nry, mx, my, vx, vy, dotmv, nmidx, nmidy;\n\t var icstart1, icup, icdown, icnext, direction;\n\t var dan, dx, dy, rr;\n\t var cpx, cpy, cpnextx, cpnexty, cnx, cny, rcn, rc, lnx, lny, rl, ac, acn, sx, sy, dcp;\n\t var imaxloop = 0;\n\n\t angleinc = 2 * Math.PI / (this.nbase + 1);\n\t acp = null;\n\t icroot = -1;\n\t var indice = 0;\n\n\t for (ic = 0; (cp = lp.getConnection(indice)) != null; indice++, ic++) {\n\t xs = -Math.sin(angleinc * cp.getStart());\n\t ys = Math.cos(angleinc * cp.getStart());\n\t xe = -Math.sin(angleinc * cp.getEnd());\n\t ye = Math.cos(angleinc * cp.getEnd());\n\t xn = ye - ys;\n\t yn = xs - xe;\n\t r = Math.sqrt(xn * xn + yn * yn);\n\t cp.setXrad(xn / r);\n\t cp.setYrad(yn / r);\n\t cp.setAngle(Math.atan2(yn, xn));\n\t if (cp.getAngle() < 0.0) {\n\t cp.setAngle(cp.getAngle() + 2 * Math.PI);\n\t }\n\t if (anchor_connection != null && anchor_connection.getRegion() == cp.getRegion()) {\n\t acp = cp;\n\t icroot = ic;\n\t }\n\t }\n\t set_radius: while (true) {\n\t this.determine_radius(lp, this.lencut);\n\t radius = lp.getRadius() / this.RADIUS_REDUCTION_FACTOR;\n\t if (anchor_connection == null) {\n\t xc = yc = 0.0;\n\t } else {\n\t xo = (this.bases[acp.getStart()].getX() + this.bases[acp.getEnd()].getX()) / 2.0;\n\t yo = (this.bases[acp.getStart()].getY() + this.bases[acp.getEnd()].getY()) / 2.0;\n\t xc = xo - radius * acp.getXrad();\n\t yc = yo - radius * acp.getYrad();\n\t }\n\n\t // The construction of the connectors will proceed in blocks of\n\t // connected connectors, where a connected connector pairs means two\n\t // connectors that are forced out of the drawn circle because they\n\t // are too close together in angle.\n\n\t // First, find the start of a block of connected connectors\n\n\t if (icroot == -1) {\n\t icstart = 0;\n\t } else {\n\t icstart = icroot;\n\t }\n\t cp = lp.getConnection(icstart);\n\t count = 0;\n\t done = false;\n\t do {\n\t j = icstart - 1;\n\t if (j < 0) {\n\t j = lp.getNconnection() - 1;\n\t }\n\t cpprev = lp.getConnection(j);\n\t if (!this.connected_connection(cpprev, cp)) {\n\t done = true;\n\t } else {\n\t icstart = j;\n\t cp = cpprev;\n\t }\n\t if (++count > lp.getNconnection()) {\n\t // Here everything is connected. Break on maximum angular\n\t // separation between connections.\n\t maxang = -1.0;\n\t for (ic = 0; ic < lp.getNconnection(); ic++) {\n\t j = ic + 1;\n\t if (j >= lp.getNconnection()) {\n\t j = 0;\n\t }\n\t cp = lp.getConnection(ic);\n\t cpnext = lp.getConnection(j);\n\t ac = cpnext.getAngle() - cp.getAngle();\n\t if (ac < 0.0) {\n\t ac += 2 * Math.PI;\n\t }\n\t if (ac > maxang) {\n\t maxang = ac;\n\t imaxloop = ic;\n\t }\n\t }\n\t icend = imaxloop;\n\t icstart = imaxloop + 1;\n\t if (icstart >= lp.getNconnection()) {\n\t icstart = 0;\n\t }\n\t cp = lp.getConnection(icend);\n\t cp.setBroken(true);\n\t done = true;\n\t }\n\t } while (!done);\n\t done_all_connections = false;\n\t icstart1 = icstart;\n\t while (!done_all_connections) {\n\t count = 0;\n\t done = false;\n\t icend = icstart;\n\t rooted = false;\n\t while (!done) {\n\t cp = lp.getConnection(icend);\n\t if (icend == icroot) {\n\t rooted = true;\n\t }\n\t j = icend + 1;\n\t if (j >= lp.getNconnection()) {\n\t j = 0;\n\t }\n\t cpnext = lp.getConnection(j);\n\t if (this.connected_connection(cp, cpnext)) {\n\t if (++count >= lp.getNconnection()) {\n\t break;\n\t }\n\t icend = j;\n\t } else {\n\t done = true;\n\t }\n\t }\n\t icmiddle = this.find_ic_middle(icstart, icend, anchor_connection, acp, lp);\n\t ic = icup = icdown = icmiddle;\n\t done = false;\n\t direction = 0;\n\t while (!done) {\n\t if (direction < 0) {\n\t ic = icup;\n\t } else if (direction == 0) {\n\t ic = icmiddle;\n\t } else {\n\t ic = icdown;\n\t }\n\t if (ic >= 0) {\n\t cp = lp.getConnection(ic);\n\t if (anchor_connection == null || acp != cp) {\n\t if (direction == 0) {\n\t astart = cp.getAngle() - Math.asin(1.0 / 2.0 / radius);\n\t aend = cp.getAngle() + Math.asin(1.0 / 2.0 / radius);\n\t this.bases[cp.getStart()].setX(xc + radius * Math.cos(astart));\n\t this.bases[cp.getStart()].setY(yc + radius * Math.sin(astart));\n\t this.bases[cp.getEnd()].setX(xc + radius * Math.cos(aend));\n\t this.bases[cp.getEnd()].setY(yc + radius * Math.sin(aend));\n\t } else if (direction < 0) {\n\t j = ic + 1;\n\t if (j >= lp.getNconnection()) {\n\t j = 0;\n\t }\n\t cp = lp.getConnection(ic);\n\t cpnext = lp.getConnection(j);\n\t cpx = cp.getXrad();\n\t cpy = cp.getYrad();\n\t ac = (cp.getAngle() + cpnext.getAngle()) / 2.0;\n\t if (cp.getAngle() > cpnext.getAngle()) {\n\t ac -= Math.PI;\n\t }\n\t cnx = Math.cos(ac);\n\t cny = Math.sin(ac);\n\t lnx = cny;\n\t lny = -cnx;\n\t da = cpnext.getAngle() - cp.getAngle();\n\t if (da < 0.0) {\n\t da += 2 * Math.PI;\n\t }\n\t if (cp.isExtruded()) {\n\t if (da <= Math.PI / 2) {\n\t rl = 2.0;\n\t } else {\n\t rl = 1.5;\n\t }\n\t } else {\n\t rl = 1.0;\n\t }\n\t this.bases[cp.getEnd()].setX(this.bases[cpnext.getStart()].getX() + rl * lnx);\n\t this.bases[cp.getEnd()].setY(this.bases[cpnext.getStart()].getY() + rl * lny);\n\t this.bases[cp.getStart()].setX(this.bases[cp.getEnd()].getX() + cpy);\n\t this.bases[cp.getStart()].setY(this.bases[cp.getEnd()].getY() - cpx);\n\t } else {\n\t j = ic - 1;\n\t if (j < 0) {\n\t j = lp.getNconnection() - 1;\n\t }\n\t cp = lp.getConnection(j);\n\t cpnext = lp.getConnection(ic);\n\t cpnextx = cpnext.getXrad();\n\t cpnexty = cpnext.getYrad();\n\t ac = (cp.getAngle() + cpnext.getAngle()) / 2.0;\n\t if (cp.getAngle() > cpnext.getAngle()) {\n\t ac -= Math.PI;\n\t }\n\t cnx = Math.cos(ac);\n\t cny = Math.sin(ac);\n\t lnx = -cny;\n\t lny = cnx;\n\t da = cpnext.getAngle() - cp.getAngle();\n\t if (da < 0.0) {\n\t da += 2 * Math.PI;\n\t }\n\t if (cp.isExtruded()) {\n\t if (da <= Math.PI / 2) {\n\t rl = 2.0;\n\t } else {\n\t rl = 1.5;\n\t }\n\t } else {\n\t rl = 1.0;\n\t }\n\t this.bases[cpnext.getStart()].setX(this.bases[cp.getEnd()].getX() + rl * lnx);\n\t this.bases[cpnext.getStart()].setY(this.bases[cp.getEnd()].getY() + rl * lny);\n\t this.bases[cpnext.getEnd()].setX(this.bases[cpnext.getStart()].getX() - cpnexty);\n\t this.bases[cpnext.getEnd()].setY(this.bases[cpnext.getStart()].getY() + cpnextx);\n\t }\n\t }\n\t }\n\t if (direction < 0) {\n\t if (icdown == icend) {\n\t icdown = -1;\n\t } else if (icdown >= 0) {\n\t if (++icdown >= lp.getNconnection()) {\n\t icdown = 0;\n\t }\n\t }\n\t direction = 1;\n\t } else {\n\t if (icup == icstart) {\n\t icup = -1;\n\t } else if (icup >= 0) {\n\t if (--icup < 0) {\n\t icup = lp.getNconnection() - 1;\n\t }\n\t }\n\t direction = -1;\n\t }\n\t done = icup == -1 && icdown == -1;\n\t }\n\t icnext = icend + 1;\n\t if (icnext >= lp.getNconnection()) {\n\t icnext = 0;\n\t }\n\t if (icend != icstart && !(icstart == icstart1 && icnext == icstart1)) {\n\n\t // Move the bases just constructed (or the radius) so that\n\t // the bisector of the end points is radius distance away\n\t // from the loop center.\n\n\t cp = lp.getConnection(icstart);\n\t cpnext = lp.getConnection(icend);\n\t dx = this.bases[cpnext.getEnd()].getX() - this.bases[cp.getStart()].getX();\n\t dy = this.bases[cpnext.getEnd()].getY() - this.bases[cp.getStart()].getY();\n\t midx = this.bases[cp.getStart()].getX() + dx / 2.0;\n\t midy = this.bases[cp.getStart()].getY() + dy / 2.0;\n\t rr = Math.sqrt(dx * dx + dy * dy);\n\t mx = dx / rr;\n\t my = dy / rr;\n\t vx = xc - midx;\n\t vy = yc - midy;\n\t rr = Math.sqrt(dx * dx + dy * dy);\n\t vx /= rr;\n\t vy /= rr;\n\t dotmv = vx * mx + vy * my;\n\t nrx = dotmv * mx - vx;\n\t nry = dotmv * my - vy;\n\t rr = Math.sqrt(nrx * nrx + nry * nry);\n\t nrx /= rr;\n\t nry /= rr;\n\n\t // Determine which side of the bisector the center should\n\t // be.\n\n\t dx = this.bases[cp.getStart()].getX() - xc;\n\t dy = this.bases[cp.getStart()].getY() - yc;\n\t ac = Math.atan2(dy, dx);\n\t if (ac < 0.0) {\n\t ac += 2 * Math.PI;\n\t }\n\t dx = this.bases[cpnext.getEnd()].getX() - xc;\n\t dy = this.bases[cpnext.getEnd()].getY() - yc;\n\t acn = Math.atan2(dy, dx);\n\t if (acn < 0.0) {\n\t acn += 2 * Math.PI;\n\t }\n\t if (acn < ac) {\n\t acn += 2 * Math.PI;\n\t }\n\t if (acn - ac > Math.PI) {\n\t sign = -1;\n\t } else {\n\t sign = 1;\n\t }\n\t nmidx = xc + sign * radius * nrx;\n\t nmidy = yc + sign * radius * nry;\n\t if (rooted) {\n\t xc -= nmidx - midx;\n\t yc -= nmidy - midy;\n\t } else {\n\t for (ic = icstart;;) {\n\t cp = lp.getConnection(ic);\n\t i = cp.getStart();\n\t this.bases[i].setX(this.bases[i].getX() + nmidx - midx);\n\t this.bases[i].setY(this.bases[i].getY() + nmidy - midy);\n\t i = cp.getEnd();\n\t this.bases[i].setX(this.bases[i].getX() + nmidx - midx);\n\t this.bases[i].setY(this.bases[i].getY() + nmidy - midy);\n\t if (ic == icend) {\n\t break;\n\t }\n\t if (++ic >= lp.getNconnection()) {\n\t ic = 0;\n\t }\n\t }\n\t }\n\t }\n\t icstart = icnext;\n\t done_all_connections = icstart == icstart1;\n\t }\n\t for (ic = 0; ic < lp.getNconnection(); ic++) {\n\t cp = lp.getConnection(ic);\n\t j = ic + 1;\n\t if (j >= lp.getNconnection()) {\n\t j = 0;\n\t }\n\t cpnext = lp.getConnection(j);\n\t dx = this.bases[cp.getEnd()].getX() - xc;\n\t dy = this.bases[cp.getEnd()].getY() - yc;\n\t rc = Math.sqrt(dx * dx + dy * dy);\n\t ac = Math.atan2(dy, dx);\n\t if (ac < 0.0) {\n\t ac += 2 * Math.PI;\n\t }\n\t dx = this.bases[cpnext.getStart()].getX() - xc;\n\t dy = this.bases[cpnext.getStart()].getY() - yc;\n\t rcn = Math.sqrt(dx * dx + dy * dy);\n\t acn = Math.atan2(dy, dx);\n\t if (acn < 0.0) {\n\t acn += 2 * Math.PI;\n\t }\n\t if (acn < ac) {\n\t acn += 2 * Math.PI;\n\t }\n\t dan = acn - ac;\n\t dcp = cpnext.getAngle() - cp.getAngle();\n\t if (dcp <= 0.0) {\n\t dcp += 2 * Math.PI;\n\t }\n\t if (Math.abs(dan - dcp) > Math.PI) {\n\t if (cp.isExtruded()) {\n\t console.log(\"Warning from traverse_loop. Loop \" + lp.getNumber() + \" has crossed regions\\n\");\n\t } else if (cpnext.getStart() - cp.getEnd() != 1) {\n\t cp.setExtruded(true);\n\t continue set_radius; // remplacement du goto\n\t }\n\t }\n\t if (cp.isExtruded()) {\n\t this.construct_extruded_segment(cp, cpnext);\n\t } else {\n\t n = cpnext.getStart() - cp.getEnd();\n\t if (n < 0) {\n\t n += this.nbase + 1;\n\t }\n\t angleinc = dan / n;\n\t for (j = 1; j < n; j++) {\n\t i = cp.getEnd() + j;\n\t if (i > this.nbase) {\n\t i -= this.nbase + 1;\n\t }\n\t a = ac + j * angleinc;\n\t rr = rc + (rcn - rc) * (a - ac) / dan;\n\t this.bases[i].setX(xc + rr * Math.cos(a));\n\t this.bases[i].setY(yc + rr * Math.sin(a));\n\t }\n\t }\n\t }\n\t break;\n\t }\n\t for (ic = 0; ic < lp.getNconnection(); ic++) {\n\t if (icroot != ic) {\n\t cp = lp.getConnection(ic);\n\t //IM HERE\n\t this.generate_region(cp);\n\t this.traverse_loop(cp.getLoop(), cp);\n\t }\n\t }\n\t n = 0;\n\t sx = 0.0;\n\t sy = 0.0;\n\t for (ic = 0; ic < lp.getNconnection(); ic++) {\n\t j = ic + 1;\n\t if (j >= lp.getNconnection()) {\n\t j = 0;\n\t }\n\t cp = lp.getConnection(ic);\n\t cpnext = lp.getConnection(j);\n\t n += 2;\n\t sx += this.bases[cp.getStart()].getX() + this.bases[cp.getEnd()].getX();\n\t sy += this.bases[cp.getStart()].getY() + this.bases[cp.getEnd()].getY();\n\t if (!cp.isExtruded()) {\n\t for (j = cp.getEnd() + 1; j != cpnext.getStart(); j++) {\n\t if (j > this.nbase) {\n\t j -= this.nbase + 1;\n\t }\n\t n++;\n\t sx += this.bases[j].getX();\n\t sy += this.bases[j].getY();\n\t }\n\t }\n\t }\n\t lp.setX(sx / n);\n\t lp.setY(sy / n);\n\t};\n\n\tNAView.prototype.determine_radius = function determine_radius(lp, lencut) {\n\t var mindit, ci, dt, sumn, sumd, radius, dit;\n\t var i,\n\t j,\n\t end,\n\t start,\n\t imindit = 0;\n\t var cp = new _connection.Connection(),\n\t cpnext = new _connection.Connection();\n\t var rt2_2 = 0.7071068;\n\n\t do {\n\t mindit = 1.0e10;\n\t for (sumd = 0.0, sumn = 0.0, i = 0; i < lp.getNconnection(); i++) {\n\t cp = lp.getConnection(i);\n\t j = i + 1;\n\t if (j >= lp.getNconnection()) {\n\t j = 0;\n\t }\n\t cpnext = lp.getConnection(j);\n\t end = cp.getEnd();\n\t start = cpnext.getStart();\n\t if (start < end) {\n\t start += this.nbase + 1;\n\t }\n\t dt = cpnext.getAngle() - cp.getAngle();\n\t if (dt <= 0.0) {\n\t dt += 2 * Math.PI;\n\t }\n\t if (!cp.isExtruded()) {\n\t ci = start - end;\n\t } else {\n\t if (dt <= Math.PI / 2) {\n\t ci = 2.0;\n\t } else {\n\t ci = 1.5;\n\t }\n\t }\n\t sumn += dt * (1.0 / ci + 1.0);\n\t sumd += dt * dt / ci;\n\t dit = dt / ci;\n\t if (dit < mindit && !cp.isExtruded() && ci > 1.0) {\n\t mindit = dit;\n\t imindit = i;\n\t }\n\t }\n\t radius = sumn / sumd;\n\t if (radius < rt2_2) {\n\t radius = rt2_2;\n\t }\n\t if (mindit * radius < lencut) {\n\t lp.getConnection(imindit).setExtruded(true);\n\t }\n\t } while (mindit * radius < lencut);\n\t if (lp.getRadius() > 0.0) {\n\t radius = lp.getRadius();\n\t } else {\n\t lp.setRadius(radius);\n\t }\n\t};\n\n\tNAView.prototype.find_ic_middle = function find_ic_middle(icstart, icend, anchor_connection, acp, lp) {\n\t var count, ret, ic, i;\n\t var done;\n\n\t count = 0;\n\t ret = -1;\n\t ic = icstart;\n\t done = false;\n\t while (!done) {\n\t if (count++ > lp.getNconnection() * 2) {\n\t console.log(\"Infinite loop in 'find_ic_middle'\");\n\t }\n\t if (anchor_connection != null && lp.getConnection(ic) == acp) {\n\t ret = ic;\n\t }\n\t done = ic == icend;\n\t if (++ic >= lp.getNconnection()) {\n\t ic = 0;\n\t }\n\t }\n\t if (ret == -1) {\n\t for (i = 1, ic = icstart; i < (count + 1) / 2; i++) {\n\t if (++ic >= lp.getNconnection()) ic = 0;\n\t }\n\t ret = ic;\n\t }\n\t return ret;\n\t};\n\n\tNAView.prototype.construct_extruded_segment = function construct_extruded_segment(cp, cpnext) {\n\t var astart, aend1, aend2, aave, dx, dy, a1, a2, ac, rr, da, dac;\n\t var start, end, n, nstart, nend;\n\t var collision;\n\n\t astart = cp.getAngle();\n\t aend2 = aend1 = cpnext.getAngle();\n\t if (aend2 < astart) {\n\t aend2 += 2 * Math.PI;\n\t }\n\t aave = (astart + aend2) / 2.0;\n\t start = cp.getEnd();\n\t end = cpnext.getStart();\n\t n = end - start;\n\t if (n < 0) {\n\t n += this.nbase + 1;\n\t }\n\t da = cpnext.getAngle() - cp.getAngle();\n\t if (da < 0.0) {\n\t da += 2 * Math.PI;\n\t }\n\t if (n == 2) {\n\t this.construct_circle_segment(start, end);\n\t } else {\n\t dx = this.bases[end].getX() - this.bases[start].getX();\n\t dy = this.bases[end].getY() - this.bases[start].getY();\n\t rr = Math.sqrt(dx * dx + dy * dy);\n\t dx /= rr;\n\t dy /= rr;\n\t if (rr >= 1.5 && da <= Math.PI / 2) {\n\t nstart = start + 1;\n\t if (nstart > this.nbase) {\n\t nstart -= this.nbase + 1;\n\t }\n\t nend = end - 1;\n\t if (nend < 0) {\n\t nend += this.nbase + 1;\n\t }\n\t this.bases[nstart].setX(this.bases[start].getX() + 0.5 * dx);\n\t this.bases[nstart].setY(this.bases[start].getY() + 0.5 * dy);\n\t this.bases[nend].setX(this.bases[end].getX() - 0.5 * dx);\n\t this.bases[nend].setY(this.bases[end].getY() - 0.5 * dy);\n\t start = nstart;\n\t end = nend;\n\t }\n\t do {\n\t collision = false;\n\t this.construct_circle_segment(start, end);\n\t nstart = start + 1;\n\t if (nstart > this.nbase) {\n\t nstart -= this.nbase + 1;\n\t }\n\t dx = this.bases[nstart].getX() - this.bases[start].getX();\n\t dy = this.bases[nstart].getY() - this.bases[start].getY();\n\t a1 = Math.atan2(dy, dx);\n\t if (a1 < 0.0) {\n\t a1 += 2 * Math.PI;\n\t }\n\t dac = a1 - astart;\n\t if (dac < 0.0) {\n\t dac += 2 * Math.PI;\n\t }\n\t if (dac > Math.PI) {\n\t collision = true;\n\t }\n\t nend = end - 1;\n\t if (nend < 0) {\n\t nend += this.nbase + 1;\n\t }\n\t dx = this.bases[nend].getX() - this.bases[end].getX();\n\t dy = this.bases[nend].getY() - this.bases[end].getY();\n\t a2 = Math.atan2(dy, dx);\n\t if (a2 < 0.0) {\n\t a2 += 2 * Math.PI;\n\t }\n\t dac = aend1 - a2;\n\t if (dac < 0.0) {\n\t dac += 2 * Math.PI;\n\t }\n\t if (dac > Math.PI) {\n\t collision = true;\n\t }\n\t if (collision) {\n\t ac = this.minf2(aave, astart + 0.5);\n\t this.bases[nstart].setX(this.bases[start].getX() + Math.cos(ac));\n\t this.bases[nstart].setY(this.bases[start].getY() + Math.sin(ac));\n\t start = nstart;\n\t ac = this.maxf2(aave, aend2 - 0.5);\n\t this.bases[nend].setX(this.bases[end].getX() + Math.cos(ac));\n\t this.bases[nend].setY(this.bases[end].getY() + Math.sin(ac));\n\t end = nend;\n\t n -= 2;\n\t }\n\t } while (collision && n > 1);\n\t }\n\t};\n\n\tNAView.prototype.construct_circle_segment = function construct_circle_segment(start, end) {\n\t var dx, dy, rr, midx, midy, xn, yn, nrx, nry, mx, my, a;\n\t var l, j, i;\n\n\t dx = this.bases[end].getX() - this.bases[start].getX();\n\t dy = this.bases[end].getY() - this.bases[start].getY();\n\t rr = Math.sqrt(dx * dx + dy * dy);\n\t l = end - start;\n\t if (l < 0) {\n\t l += this.nbase + 1;\n\t }\n\t if (rr >= l) {\n\t dx /= rr;\n\t dy /= rr;\n\t for (j = 1; j < l; j++) {\n\t i = start + j;\n\t if (i > this.nbase) {\n\t i -= this.nbase + 1;\n\t }\n\t this.bases[i].setX(this.bases[start].getX() + dx * j / l);\n\t this.bases[i].setY(this.bases[start].getY() + dy * j / l);\n\t }\n\t } else {\n\t this.find_center_for_arc(l - 1, rr);\n\t dx /= rr;\n\t dy /= rr;\n\t midx = this.bases[start].getX() + dx * rr / 2.0;\n\t midy = this.bases[start].getY() + dy * rr / 2.0;\n\t xn = dy;\n\t yn = -dx;\n\t nrx = midx + this._h * xn;\n\t nry = midy + this._h * yn;\n\t mx = this.bases[start].getX() - nrx;\n\t my = this.bases[start].getY() - nry;\n\t rr = Math.sqrt(mx * mx + my * my);\n\t a = Math.atan2(my, mx);\n\t for (j = 1; j < l; j++) {\n\t i = start + j;\n\t if (i > this.nbase) {\n\t i -= this.nbase + 1;\n\t }\n\t this.bases[i].setX(nrx + rr * Math.cos(a + j * this.angleinc));\n\t this.bases[i].setY(nry + rr * Math.sin(a + j * this.angleinc));\n\t }\n\t }\n\t};\n\n\tNAView.prototype.find_center_for_arc = function find_center_for_arc(n, b) {\n\t var h, hhi, hlow, r, disc, theta, e, phi;\n\t var iter;\n\n\t hhi = (n + 1.0) / Math.PI;\n\t // changed to prevent div by zero if (ih)\n\t hlow = -hhi - b / (n + 1.000001 - b);\n\t if (b < 1) {\n\t // otherwise we might fail below (ih)\n\t hlow = 0;\n\t }\n\t iter = 0;\n\t do {\n\t h = (hhi + hlow) / 2.0;\n\t r = Math.sqrt(h * h + b * b / 4.0);\n\t disc = 1.0 - 0.5 / (r * r);\n\t if (Math.abs(disc) > 1.0) {\n\t console.log(\"Unexpected large magnitude discriminant = \" + disc + \" \" + r);\n\t }\n\t theta = Math.acos(disc);\n\t phi = Math.acos(h / r);\n\t e = theta * (n + 1) + 2 * phi - 2 * Math.PI;\n\t if (e > 0.0) {\n\t hlow = h;\n\t } else {\n\t hhi = h;\n\t }\n\t } while (Math.abs(e) > 0.0001 && ++iter < this.MAXITER);\n\t if (iter >= this.MAXITER) {\n\t if (noIterationFailureYet) {\n\t console.log(\"Iteration failed in find_center_for_arc\");\n\t noIterationFailureYet = false;\n\t }\n\t h = 0.0;\n\t theta = 0.0;\n\t }\n\t this._h = h;\n\t this.angleinc = theta;\n\t};\n\n\tNAView.prototype.generate_region = function generate_region(cp) {\n\t var l, start, end, i, mate;\n\t var rp;\n\n\t rp = cp.getRegion();\n\t l = 0;\n\t if (cp.getStart() == rp.getStart1()) {\n\t start = rp.getStart1();\n\t end = rp.getEnd1();\n\t } else {\n\t start = rp.getStart2();\n\t end = rp.getEnd2();\n\t }\n\t if (this.bases[cp.getStart()].getX() > this.ANUM - 100.0 || this.bases[cp.getEnd()].getX() > this.ANUM - 100.0) {\n\t console.log(\"Bad region passed to generate_region. Coordinates not defined.\");\n\t }\n\t for (i = start + 1; i <= end; i++) {\n\t l++;\n\t this.bases[i].setX(this.bases[cp.getStart()].getX() + this.HELIX_FACTOR * l * cp.getXrad());\n\t this.bases[i].setY(this.bases[cp.getStart()].getY() + this.HELIX_FACTOR * l * cp.getYrad());\n\t mate = this.bases[i].getMate();\n\t this.bases[mate].setX(this.bases[cp.getEnd()].getX() + this.HELIX_FACTOR * l * cp.getXrad());\n\t this.bases[mate].setY(this.bases[cp.getEnd()].getY() + this.HELIX_FACTOR * l * cp.getYrad());\n\t }\n\t};\n\n\tNAView.prototype.minf2 = function minf2(x1, x2) {\n\t return x1 < x2 ? x1 : x2;\n\t};\n\n\tNAView.prototype.maxf2 = function maxf2(x1, x2) {\n\t return x1 > x2 ? x1 : x2;\n\t};\n\n\tNAView.prototype.connected_connection = function connected_connection(cp, cpnext) {\n\t if (cp.isExtruded()) {\n\t return true;\n\t } else if (cp.getEnd() + 1 == cpnext.getStart()) {\n\t return true;\n\t } else {\n\t return false;\n\t }\n\t};\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports) {\n\n\t\"use strict\";\n\n\tObject.defineProperty(exports, \"__esModule\", {\n\t\tvalue: true\n\t});\n\texports.Radloop = Radloop;\n\tfunction Radloop() {\n\t\tthis.radius = null;\n\t\tthis.loopnumber = null;\n\t\tthis.next = null;\n\t\tthis.prev = null;\n\t}\n\n\tRadloop.prototype.getRadius = function () {\n\t\treturn this.radius;\n\t};\n\n\tRadloop.prototype.setRadius = function (radius) {\n\t\tthis.radius = radius;\n\t};\n\n\tRadloop.prototype.getLoopnumber = function () {\n\t\treturn this.loopnumber;\n\t};\n\n\tRadloop.prototype.setLoopnumber = function (loopnumber) {\n\t\tthis.loopnumber = loopnumber;\n\t};\n\n\tRadloop.prototype.getNext = function () {\n\t\treturn this.next;\n\t};\n\n\tRadloop.prototype.setNext = function (next) {\n\t\tthis.next = next;\n\t};\n\n\tRadloop.prototype.getPrev = function () {\n\t\treturn this.prev;\n\t};\n\n\tRadloop.prototype.setPrev = function (prev) {\n\t\tthis.prev = prev;\n\t};\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tObject.defineProperty(exports, \"__esModule\", {\n\t\tvalue: true\n\t});\n\texports.Connection = Connection;\n\n\tvar _loop = __webpack_require__(8);\n\n\tvar _region = __webpack_require__(9);\n\n\tfunction Connection() {\n\t\tthis.loop = new _loop.Loop();\n\t\tthis.region = new _region.Region();\n\t\t// Start and end form the 1st base pair of the region.\n\t\tthis.start = null;\n\t\tthis.end = null;\n\t\tthis.xrad = null;\n\t\tthis.yrad = null;\n\t\tthis.angle = null;\n\t\t// True if segment between this connection and the\n\t\t// next must be extruded out of the circle\n\t\tthis.extruded = null;\n\t\t// True if the extruded segment must be drawn long.\n\t\tthis.broken = null;\n\n\t\tthis._isNull = false;\n\t}\n\n\tConnection.prototype.isNull = function () {\n\t\treturn this._isNull;\n\t};\n\n\tConnection.prototype.setNull = function (isNull) {\n\t\tthis._isNull = isNull;\n\t};\n\n\tConnection.prototype.getLoop = function () {\n\t\treturn this.loop;\n\t};\n\n\tConnection.prototype.setLoop = function (loop) {\n\t\tthis.loop = loop;\n\t};\n\n\tConnection.prototype.getRegion = function () {\n\t\treturn this.region;\n\t};\n\n\tConnection.prototype.setRegion = function (region) {\n\t\tthis.region = region;\n\t};\n\n\tConnection.prototype.getStart = function () {\n\t\treturn this.start;\n\t};\n\n\tConnection.prototype.setStart = function (start) {\n\t\tthis.start = start;\n\t};\n\n\tConnection.prototype.getEnd = function () {\n\t\treturn this.end;\n\t};\n\n\tConnection.prototype.setEnd = function (end) {\n\t\tthis.end = end;\n\t};\n\n\tConnection.prototype.getXrad = function () {\n\t\treturn this.xrad;\n\t};\n\n\tConnection.prototype.setXrad = function (xrad) {\n\t\tthis.xrad = xrad;\n\t};\n\n\tConnection.prototype.getYrad = function () {\n\t\treturn this.yrad;\n\t};\n\n\tConnection.prototype.setYrad = function (yrad) {\n\t\tthis.yrad = yrad;\n\t};\n\n\tConnection.prototype.getAngle = function () {\n\t\treturn this.angle;\n\t};\n\n\tConnection.prototype.setAngle = function (angle) {\n\t\tthis.angle = angle;\n\t};\n\n\tConnection.prototype.isExtruded = function () {\n\t\treturn this.extruded;\n\t};\n\n\tConnection.prototype.setExtruded = function (extruded) {\n\t\tthis.extruded = extruded;\n\t};\n\n\tConnection.prototype.isBroken = function () {\n\t\treturn this.broken;\n\t};\n\n\tConnection.prototype.setBroken = function (broken) {\n\t\tthis.broken = broken;\n\t};\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\n\tObject.defineProperty(exports, \"__esModule\", {\n\t\tvalue: true\n\t});\n\texports.Loop = Loop;\n\n\tvar _connection = __webpack_require__(7);\n\n\tfunction Loop() {\n\t\tthis.nconnection = null;\n\t\tthis.connections = [];\n\t\tthis._connections = [];\n\t\tthis.number = null;\n\t\tthis.depth = null;\n\t\tthis.mark = null;\n\t\tthis.x = null;\n\t\tthis.y = null;\n\t\tthis.radius = null;\n\t}\n\n\tLoop.prototype.getNconnection = function () {\n\t\treturn this.nconnection;\n\t};\n\n\tLoop.prototype.setNconnection = function (nconnection) {\n\t\tthis.nconnection = nconnection;\n\t};\n\n\tLoop.prototype.setConnection = function (i, c) {\n\t\tif (c != null) {\n\t\t\tthis._connections[i] = c;\n\t\t} else {\n\t\t\tif (!this._connections[i]) {\n\t\t\t\tthis._connections[i] = new _connection.Connection();\n\t\t\t}\n\t\t\tthis._connections[i].setNull(true);\n\t\t}\n\t};\n\n\tLoop.prototype.getConnection = function (i) {\n\t\tvar Connection = __webpack_require__(7);\n\t\tif (!this._connections[i]) {\n\t\t\tthis._connections[i] = new Connection();\n\t\t}\n\t\tvar c = this._connections[i];\n\t\tif (c.isNull()) {\n\t\t\treturn null;\n\t\t} else {\n\t\t\treturn c;\n\t\t}\n\t};\n\n\tLoop.prototype.addConnection = function (i, c) {\n\t\tthis._connections.push(c);\n\t};\n\n\tLoop.prototype.getNumber = function () {\n\t\treturn this.number;\n\t};\n\n\tLoop.prototype.setNumber = function (number) {\n\t\tthis.number = number;\n\t};\n\n\tLoop.prototype.getDepth = function () {\n\t\treturn this.depth;\n\t};\n\n\tLoop.prototype.setDepth = function (depth) {\n\t\tthis.depth = depth;\n\t};\n\n\tLoop.prototype.isMark = function () {\n\t\treturn this.mark;\n\t};\n\n\tLoop.prototype.setMark = function (mark) {\n\t\tthis.mark = mark;\n\t};\n\n\tLoop.prototype.getX = function () {\n\t\treturn this.x;\n\t};\n\n\tLoop.prototype.setX = function (x) {\n\t\tthis.x = x;\n\t};\n\n\tLoop.prototype.getY = function () {\n\t\treturn this.y;\n\t};\n\n\tLoop.prototype.setY = function (y) {\n\t\tthis.y = y;\n\t};\n\n\tLoop.prototype.getRadius = function () {\n\t\treturn this.radius;\n\t};\n\n\tLoop.prototype.setRadius = function (radius) {\n\t\tthis.radius = radius;\n\t};\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports) {\n\n\t\"use strict\";\n\n\tObject.defineProperty(exports, \"__esModule\", {\n\t\tvalue: true\n\t});\n\texports.Region = Region;\n\tfunction Region() {\n\t\tthis._start1 = null;\n\t\tthis._end1 = null;\n\t\tthis._start2 = null;\n\t\tthis._end2 = null;\n\t}\n\n\tRegion.prototype.getStart1 = function () {\n\t\treturn this._start1;\n\t};\n\n\tRegion.prototype.setStart1 = function (start1) {\n\t\tthis._start1 = start1;\n\t};\n\n\tRegion.prototype.getEnd1 = function () {\n\t\treturn this._end1;\n\t};\n\n\tRegion.prototype.setEnd1 = function (end1) {\n\t\tthis._end1 = end1;\n\t};\n\n\tRegion.prototype.getStart2 = function () {\n\t\treturn this._start2;\n\t};\n\n\tRegion.prototype.setStart2 = function (start2) {\n\t\tthis._start2 = start2;\n\t};\n\n\tRegion.prototype.getEnd2 = function () {\n\t\treturn this._end2;\n\t};\n\n\tRegion.prototype.setEnd2 = function (end2) {\n\t\tthis._end2 = end2;\n\t};\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tObject.defineProperty(exports, \"__esModule\", {\n\t\tvalue: true\n\t});\n\texports.Base = Base;\n\n\tvar _region = __webpack_require__(9);\n\n\tfunction Base() {\n\t\tthis.mate = null;\n\t\tthis.x = null;\n\t\tthis.y = null;\n\t\tthis.extracted = null;\n\t\tthis.region = new _region.Region();\n\t}\n\n\tBase.prototype.getMate = function () {\n\t\treturn this.mate;\n\t};\n\n\tBase.prototype.setMate = function (mate) {\n\t\tthis.mate = mate;\n\t};\n\n\tBase.prototype.getX = function () {\n\t\treturn this.x;\n\t};\n\n\tBase.prototype.setX = function (x) {\n\t\tthis.x = x;\n\t};\n\n\tBase.prototype.getY = function () {\n\t\treturn this.y;\n\t};\n\n\tBase.prototype.setY = function (y) {\n\t\tthis.y = y;\n\t};\n\n\tBase.prototype.isExtracted = function () {\n\t\treturn this.extracted;\n\t};\n\n\tBase.prototype.setExtracted = function (extracted) {\n\t\tthis.extracted = extracted;\n\t};\n\n\tBase.prototype.getRegion = function () {\n\t\treturn this.region;\n\t};\n\n\tBase.prototype.setRegion = function (region) {\n\t\tthis.region = region;\n\t};\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t// style-loader: Adds some css to the DOM by adding a