From 273da44406d3458c5b753b386049a04a30f3fc7c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" Date: Thu, 3 Jan 2019 07:31:04 +0000 Subject: [PATCH 1/5] Bump rubocop-rspec from 1.30.1 to 1.31.0 Bumps [rubocop-rspec](https://github.com/rubocop-hq/rubocop-rspec) from 1.30.1 to 1.31.0. - [Release notes](https://github.com/rubocop-hq/rubocop-rspec/releases) - [Changelog](https://github.com/rubocop-hq/rubocop-rspec/blob/master/CHANGELOG.md) - [Commits](https://github.com/rubocop-hq/rubocop-rspec/compare/v1.30.1...v1.31.0) Signed-off-by: dependabot[bot] --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index b7d1d6d19..5d4caeb33 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -436,7 +436,7 @@ GEM rainbow (>= 2.2.2, < 4.0) ruby-progressbar (~> 1.7) unicode-display_width (~> 1.4.0) - rubocop-rspec (1.30.1) + rubocop-rspec (1.31.0) rubocop (>= 0.60.0) ruby-progressbar (1.10.0) ruby-units (2.3.1) From f83a2b639730d985dc8fb38dd0caa6646404bee7 Mon Sep 17 00:00:00 2001 From: Awesome Code Date: Thu, 3 Jan 2019 10:00:13 +0000 Subject: [PATCH 2/5] Auto corrected by following Format Javascript Code --- app/assets/javascripts/highcharts.js | 11651 ++++++++++++++++++++++++- 1 file changed, 11269 insertions(+), 382 deletions(-) diff --git a/app/assets/javascripts/highcharts.js b/app/assets/javascripts/highcharts.js index 9554ef58b..c7136bafe 100644 --- a/app/assets/javascripts/highcharts.js +++ b/app/assets/javascripts/highcharts.js @@ -5,385 +5,11272 @@ License: www.highcharts.com/license */ -(function(S,M){"object"===typeof module&&module.exports?module.exports=S.document?M(S):M:S.Highcharts=M(S)})("undefined"!==typeof window?window:this,function(S){var M=function(){var a="undefined"===typeof S?window:S,E=a.document,D=a.navigator&&a.navigator.userAgent||"",H=E&&E.createElementNS&&!!E.createElementNS("http://www.w3.org/2000/svg","svg").createSVGRect,p=/(edge|msie|trident)/i.test(D)&&!a.opera,f=/Firefox/.test(D),l=f&&4>parseInt(D.split("Firefox/")[1],10);return a.Highcharts?a.Highcharts.error(16, -!0):{product:"Highcharts",version:"6.0.4",deg2rad:2*Math.PI/360,doc:E,hasBidiBug:l,hasTouch:E&&void 0!==E.documentElement.ontouchstart,isMS:p,isWebKit:/AppleWebKit/.test(D),isFirefox:f,isTouchDevice:/(Mobile|Android|Windows Phone)/.test(D),SVG_NS:"http://www.w3.org/2000/svg",chartCount:0,seriesTypes:{},symbolSizes:{},svg:H,win:a,marginNames:["plotTop","marginRight","marginBottom","plotLeft"],noop:function(){},charts:[]}}();(function(a){a.timers=[];var E=a.charts,D=a.doc,H=a.win;a.error=function(p, -f){p=a.isNumber(p)?"Highcharts error #"+p+": www.highcharts.com/errors/"+p:p;if(f)throw Error(p);H.console&&console.log(p)};a.Fx=function(a,f,l){this.options=f;this.elem=a;this.prop=l};a.Fx.prototype={dSetter:function(){var a=this.paths[0],f=this.paths[1],l=[],r=this.now,n=a.length,w;if(1===r)l=this.toD;else if(n===f.length&&1>r)for(;n--;)w=parseFloat(a[n]),l[n]=isNaN(w)?f[n]:r*parseFloat(f[n]-w)+w;else l=f;this.elem.attr("d",l,null,!0)},update:function(){var a=this.elem,f=this.prop,l=this.now,r= -this.options.step;if(this[f+"Setter"])this[f+"Setter"]();else a.attr?a.element&&a.attr(f,l,null,!0):a.style[f]=l+this.unit;r&&r.call(a,l,this)},run:function(p,f,l){var r=this,n=r.options,w=function(a){return w.stopped?!1:r.step(a)},u=H.requestAnimationFrame||function(a){setTimeout(a,13)},e=function(){for(var h=0;h=u+this.startTime?(this.now=this.end,this.pos=1,this.update(),l=e[this.prop]=!0,a.objectEach(e,function(a){!0!==a&&(l=!1)}),l&&w&&w.call(n),p=!1):(this.pos=r.easing((f-this.startTime)/u),this.now=this.start+(this.end- -this.start)*this.pos,this.update(),p=!0);return p},initPath:function(p,f,l){function r(a){var b,c;for(k=a.length;k--;)b="M"===a[k]||"L"===a[k],c=/[a-zA-Z]/.test(a[k+3]),b&&c&&a.splice(k+1,0,a[k+1],a[k+2],a[k+1],a[k+2])}function n(a,b){for(;a.lengtha&&-Infinityw?"AM":"PM",P:12>w?"am":"pm",S:k(n.getSeconds()),L:k(Math.round(f%1E3),3)},a.dateFormats);a.objectEach(r,function(a,b){for(;-1!==p.indexOf("%"+b);)p=p.replace("%"+b,"function"===typeof a?a(f):a)});return l?p.substr(0,1).toUpperCase()+p.substr(1):p};a.formatSingle=function(p,f){var l=/\.([0-9])/,r=a.defaultOptions.lang;/f$/.test(p)?(l=(l=p.match(l))?l[1]:-1,null!==f&&(f=a.numberFormat(f,l,r.decimalPoint,-1=l&&(f=[1/l])));for(r=0;r=p||!n&&w<=(f[r]+(f[r+1]||f[r]))/2);r++);return u=a.correctFloat(u*l,-Math.round(Math.log(.001)/Math.LN10))};a.stableSort=function(a,f){var l=a.length,p,n;for(n=0;nl&&(l=a[f]);return l};a.destroyObjectProperties=function(p,f){a.objectEach(p,function(a,r){a&&a!==f&&a.destroy&&a.destroy();delete p[r]})};a.discardElement=function(p){var f=a.garbageBin;f||(f=a.createElement("div"));p&&f.appendChild(p);f.innerHTML=""};a.correctFloat=function(a,f){return parseFloat(a.toPrecision(f||14))};a.setAnimation=function(p,f){f.renderer.globalAnimation=a.pick(p,f.options.chart.animation, -!0)};a.animObject=function(p){return a.isObject(p)?a.merge(p):{duration:p?500:0}};a.timeUnits={millisecond:1,second:1E3,minute:6E4,hour:36E5,day:864E5,week:6048E5,month:24192E5,year:314496E5};a.numberFormat=function(p,f,l,r){p=+p||0;f=+f;var n=a.defaultOptions.lang,w=(p.toString().split(".")[1]||"").split("e")[0].length,u,e,h=p.toString().split("e");-1===f?f=Math.min(w,20):a.isNumber(f)?f&&h[1]&&0>h[1]&&(u=f+ +h[1],0<=u?(h[0]=(+h[0]).toExponential(u).split("e")[0],f=u):(h[0]=h[0].split(".")[0]||0, -p=20>f?(h[0]*Math.pow(10,h[1])).toFixed(f):0,h[1]=0)):f=2;e=(Math.abs(h[1]?h[0]:p)+Math.pow(10,-Math.max(f,w)-1)).toFixed(f);w=String(a.pInt(e));u=3p?"-":"")+(u?w.substr(0,u)+r:"");p+=w.substr(u).replace(/(\d{3})(?=\d)/g,"$1"+r);f&&(p+=l+e.slice(-f));h[1]&&0!==+p&&(p+="e"+h[1]);return p};Math.easeInOutSine=function(a){return-.5*(Math.cos(Math.PI*a)-1)};a.getStyle=function(p,f,l){if("width"===f)return Math.min(p.offsetWidth, -p.scrollWidth)-a.getStyle(p,"padding-left")-a.getStyle(p,"padding-right");if("height"===f)return Math.min(p.offsetHeight,p.scrollHeight)-a.getStyle(p,"padding-top")-a.getStyle(p,"padding-bottom");H.getComputedStyle||a.error(27,!0);if(p=H.getComputedStyle(p,void 0))p=p.getPropertyValue(f),a.pick(l,"opacity"!==f)&&(p=a.pInt(p));return p};a.inArray=function(p,f){return(a.indexOfPolyfill||Array.prototype.indexOf).call(f,p)};a.grep=function(p,f){return(a.filterPolyfill||Array.prototype.filter).call(p, -f)};a.find=Array.prototype.find?function(a,f){return a.find(f)}:function(a,f){var l,r=a.length;for(l=0;l>16,(l&65280)>> -8,l&255,1]:4===f&&(n=[(l&3840)>>4|(l&3840)>>8,(l&240)>>4|l&240,(l&15)<<4|l&15,1])),!n)for(w=this.parsers.length;w--&&!n;)u=this.parsers[w],(f=u.regex.exec(l))&&(n=u.parse(f));this.rgba=n||[]},get:function(a){var f=this.input,n=this.rgba,l;this.stops?(l=p(f),l.stops=[].concat(l.stops),E(this.stops,function(n,e){l.stops[e]=[l.stops[e][0],n.get(a)]})):l=n&&D(n[0])?"rgb"===a||!a&&1===n[3]?"rgb("+n[0]+","+n[1]+","+n[2]+")":"a"===a?n[3]:"rgba("+n.join(",")+")":f;return l},brighten:function(a){var l,n=this.rgba; -if(this.stops)E(this.stops,function(n){n.brighten(a)});else if(D(a)&&0!==a)for(l=0;3>l;l++)n[l]+=f(255*a),0>n[l]&&(n[l]=0),255y.width)y={width:0,height:0}}else y=this.htmlGetBBox();b.isSVG&& -(a=y.width,b=y.height,q&&"11px"===q.fontSize&&17===Math.round(b)&&(y.height=b=14),g&&(y.width=Math.abs(b*Math.sin(v))+Math.abs(a*Math.cos(v)),y.height=Math.abs(b*Math.cos(v))+Math.abs(a*Math.sin(v))));if(A&&0]*>/g,"")))},textSetter:function(a){a!==this.textStr&&(delete this.bBox,this.textStr=a,this.added&&this.renderer.buildText(this))},fillSetter:function(a,g,b){"string"===typeof a?b.setAttribute(g,a):a&&this.colorGradient(a,g,b)},visibilitySetter:function(a,g,b){"inherit"===a?b.removeAttribute(g):this[g]!==a&&b.setAttribute(g,a);this[g]=a},zIndexSetter:function(a,b){var v=this.renderer,y=this.parentGroup,c=(y||v).element||v.box,k,d=this.element,q,e,v=c===v.box;k=this.added;var z;u(a)&& -(d.zIndex=a,a=+a,this[b]===a&&(k=!1),this[b]=a);if(k){(a=this.zIndex)&&y&&(y.handleZ=!0);b=c.childNodes;for(z=b.length-1;0<=z&&!q;z--)if(y=b[z],k=y.zIndex,e=!u(k),y!==d)if(0>a&&e&&!v&&!z)c.insertBefore(d,b[z]),q=!0;else if(g(k)<=a||e&&(!u(a)||0<=a))c.insertBefore(d,b[z+1]||null),q=!0;q||(c.insertBefore(d,b[v?3:0]||null),q=!0)}return q},_defaultSetter:function(a,g,b){b.setAttribute(g,a)}});E.prototype.yGetter=E.prototype.xGetter;E.prototype.translateXSetter=E.prototype.translateYSetter=E.prototype.rotationSetter= -E.prototype.verticalAlignSetter=E.prototype.rotationOriginXSetter=E.prototype.rotationOriginYSetter=E.prototype.scaleXSetter=E.prototype.scaleYSetter=E.prototype.matrixSetter=function(a,g){this[g]=a;this.doTransform=!0};E.prototype["stroke-widthSetter"]=E.prototype.strokeSetter=function(a,g,b){this[g]=a;this.stroke&&this["stroke-width"]?(E.prototype.fillSetter.call(this,this.stroke,"stroke",b),b.setAttribute("stroke-width",this["stroke-width"]),this.hasStroke=!0):"stroke-width"===g&&0===a&&this.hasStroke&& -(b.removeAttribute("stroke"),this.hasStroke=!1)};D=a.SVGRenderer=function(){this.init.apply(this,arguments)};c(D.prototype,{Element:E,SVG_NS:P,init:function(a,g,b,v,c,k){var y;v=this.createElement("svg").attr({version:"1.1","class":"highcharts-root"}).css(this.getStyle(v));y=v.element;a.appendChild(y);f(a,"dir","ltr");-1===a.innerHTML.indexOf("xmlns")&&f(y,"xmlns",this.SVG_NS);this.isSVG=!0;this.box=y;this.boxWrapper=v;this.alignedObjects=[];this.url=(x||N)&&m.getElementsByTagName("base").length? -R.location.href.replace(/#.*?$/,"").replace(/<[^>]*>/g,"").replace(/([\('\)])/g,"\\$1").replace(/ /g,"%20"):"";this.createElement("desc").add().element.appendChild(m.createTextNode("Created with Highcharts 6.0.4"));this.defs=this.createElement("defs").add();this.allowHTML=k;this.forExport=c;this.gradients={};this.cache={};this.cacheKeys=[];this.imgCount=0;this.setSize(g,b,!1);var d;x&&a.getBoundingClientRect&&(g=function(){n(a,{left:0,top:0});d=a.getBoundingClientRect();n(a,{left:Math.ceil(d.left)- -d.left+"px",top:Math.ceil(d.top)-d.top+"px"})},g(),this.unSubPixelFix=H(R,"resize",g))},getStyle:function(a){return this.style=c({fontFamily:'"Lucida Grande", "Lucida Sans Unicode", Arial, Helvetica, sans-serif',fontSize:"12px"},a)},setStyle:function(a){this.boxWrapper.css(this.getStyle(a))},isHidden:function(){return!this.boxWrapper.getBBox().width},destroy:function(){var a=this.defs;this.box=null;this.boxWrapper=this.boxWrapper.destroy();h(this.gradients||{});this.gradients=null;a&&(this.defs=a.destroy()); -this.unSubPixelFix&&this.unSubPixelFix();return this.alignedObjects=null},createElement:function(a){var g=new this.Element;g.init(this,a);return g},draw:A,getRadialAttr:function(a,g){return{cx:a[0]-a[2]/2+g.cx*a[2],cy:a[1]-a[2]/2+g.cy*a[2],r:g.r*a[2]}},getSpanWidth:function(a,g){var b=a.getBBox(!0).width;!L&&this.forExport&&(b=this.measureSpanWidth(g.firstChild.data,a.styles));return b},applyEllipsis:function(a,g,b,v){var c=a.rotation,y=b,k,d=0,q=b.length,e=function(a){g.removeChild(g.firstChild); -a&&g.appendChild(m.createTextNode(a))},z;a.rotation=0;y=this.getSpanWidth(a,g);if(z=y>v){for(;d<=q;)k=Math.ceil((d+q)/2),y=b.substring(0,k)+"\u2026",e(y),y=this.getSpanWidth(a,g),d===q?d=q+1:y>v?q=k-1:d=k;0===q&&e("")}a.rotation=c;return z},escapes:{"\x26":"\x26amp;","\x3c":"\x26lt;","\x3e":"\x26gt;","'":"\x26#39;",'"':"\x26quot;"},buildText:function(a){var b=a.element,v=this,c=v.forExport,y=G(a.textStr,"").toString(),q=-1!==y.indexOf("\x3c"),e=b.childNodes,z,h,A,J,t=f(b,"x"),x=a.styles,B=a.textWidth, -l=x&&x.lineHeight,C=x&&x.textOutline,u=x&&"ellipsis"===x.textOverflow,Q=x&&"nowrap"===x.whiteSpace,w=x&&x.fontSize,R,I,r=e.length,x=B&&!a.added&&this.box,p=function(a){var c;c=/(px|em)$/.test(a&&a.style.fontSize)?a.style.fontSize:w||v.style.fontSize||12;return l?g(l):v.fontMetrics(c,a.getAttribute("style")?a:b).h},K=function(a){F(v.escapes,function(g,b){a=a.replace(new RegExp(g,"g"),b)});return a};R=[y,u,Q,l,C,w,B].join();if(R!==a.textCache){for(a.textCache=R;r--;)b.removeChild(e[r]);q||C||u||B|| --1!==y.indexOf(" ")?(z=/<.*class="([^"]+)".*>/,h=/<.*style="([^"]+)".*>/,A=/<.*href="([^"]+)".*>/,x&&x.appendChild(b),y=q?y.replace(/<(b|strong)>/g,'\x3cspan style\x3d"font-weight:bold"\x3e').replace(/<(i|em)>/g,'\x3cspan style\x3d"font-style:italic"\x3e').replace(//g,"\x3c/span\x3e").split(//g):[y],y=k(y,function(a){return""!==a}),d(y,function(g,y){var k,q=0;g=g.replace(/^\s+|\s+$/g,"").replace(//g,"\x3c/span\x3e|||"); -k=g.split("|||");d(k,function(g){if(""!==g||1===k.length){var d={},e=m.createElementNS(v.SVG_NS,"tspan"),x,F;z.test(g)&&(x=g.match(z)[1],f(e,"class",x));h.test(g)&&(F=g.match(h)[1].replace(/(;| |^)color([ :])/,"$1fill$2"),f(e,"style",F));A.test(g)&&!c&&(f(e,"onclick",'location.href\x3d"'+g.match(A)[1]+'"'),f(e,"class","highcharts-anchor"),n(e,{cursor:"pointer"}));g=K(g.replace(/<[a-zA-Z\/](.|\n)*?>/g,"")||" ");if(" "!==g){e.appendChild(m.createTextNode(g));q?d.dx=0:y&&null!==t&&(d.x=t);f(e,d);b.appendChild(e); -!q&&I&&(!L&&c&&n(e,{display:"block"}),f(e,"dy",p(e)));if(B){d=g.replace(/([^\^])-/g,"$1- ").split(" ");x=1B,void 0===J&&(J=g),g&&1!==d.length?(e.removeChild(e.firstChild),O.unshift(d.pop())):(d=O,O=[],d.length&&!Q&&(e=m.createElementNS(P,"tspan"),f(e,{dy:C,x:t}),F&&f(e,"style",F),b.appendChild(e)),l>B&&(B=l)),d.length&&e.appendChild(m.createTextNode(d.join(" ").replace(/- /g, -"-")));a.rotation=G}q++}}});I=I||b.childNodes.length}),J&&a.attr("title",a.textStr),x&&x.removeChild(b),C&&a.applyTextOutline&&a.applyTextOutline(C)):b.appendChild(m.createTextNode(K(y)))}},getContrast:function(a){a=r(a).rgba;return 510Math.abs(c.end-c.start-2*Math.PI));var y=Math.cos(k),z=Math.sin(k),h=Math.cos(e),e=Math.sin(e);c=.001>c.end-k-Math.PI?0:1;d=["M",a+d*y,g+q*z,"A",d,q,0,c,1,a+d*h,g+q*e];u(b)&&d.push(v?"M":"L",a+b* -h,g+b*e,"A",b,b,0,c,0,a+b*y,g+b*z);d.push(v?"":"Z");return d},callout:function(a,g,b,v,c){var d=Math.min(c&&c.r||0,b,v),k=d+6,q=c&&c.anchorX;c=c&&c.anchorY;var e;e=["M",a+d,g,"L",a+b-d,g,"C",a+b,g,a+b,g,a+b,g+d,"L",a+b,g+v-d,"C",a+b,g+v,a+b,g+v,a+b-d,g+v,"L",a+d,g+v,"C",a,g+v,a,g+v,a,g+v-d,"L",a,g+d,"C",a,g,a,g,a+d,g];q&&q>b?c>g+k&&cq?c>g+k&&cv&&q>a+k&&qc&&q>a+k&&qa?a+3:Math.round(1.2*a);return{h:b,b:Math.round(.8* -b),f:a}},rotCorr:function(a,g,b){var v=a;g&&b&&(v=Math.max(v*Math.cos(g*e),4));return{x:-a/3*Math.sin(g*e),y:v}},label:function(g,b,k,e,z,h,m,A,L){var y=this,J=y.g("button"!==L&&"label"),t=J.text=y.text("",0,0,m).attr({zIndex:1}),x,F,n=0,B=3,l=0,C,f,Q,G,w,R={},I,P,r=/^url\((.*?)\)$/.test(e),p=r,K,O,N,T;L&&J.addClass("highcharts-"+L);p=r;K=function(){return(I||0)%2/2};O=function(){var a=t.element.style,g={};F=(void 0===C||void 0===f||w)&&u(t.textStr)&&t.getBBox();J.width=(C||F.width||0)+2*B+l;J.height= -(f||F.height||0)+2*B;P=B+y.fontMetrics(a&&a.fontSize,t).b;p&&(x||(J.box=x=y.symbols[e]||r?y.symbol(e):y.rect(),x.addClass(("button"===L?"":"highcharts-label-box")+(L?" highcharts-"+L+"-box":"")),x.add(J),a=K(),g.x=a,g.y=(A?-P:0)+a),g.width=Math.round(J.width),g.height=Math.round(J.height),x.attr(c(g,R)),R={})};N=function(){var a=l+B,g;g=A?0:P;u(C)&&F&&("center"===w||"right"===w)&&(a+={center:.5,right:1}[w]*(C-F.width));if(a!==t.x||g!==t.y)t.attr("x",a),void 0!==g&&t.attr("y",g);t.x=a;t.y=g};T=function(a, -g){x?x.attr(a,g):R[a]=g};J.onAdd=function(){t.add(J);J.attr({text:g||0===g?g:"",x:b,y:k});x&&u(z)&&J.attr({anchorX:z,anchorY:h})};J.widthSetter=function(g){C=a.isNumber(g)?g:null};J.heightSetter=function(a){f=a};J["text-alignSetter"]=function(a){w=a};J.paddingSetter=function(a){u(a)&&a!==B&&(B=J.padding=a,N())};J.paddingLeftSetter=function(a){u(a)&&a!==l&&(l=a,N())};J.alignSetter=function(a){a={left:0,center:.5,right:1}[a];a!==n&&(n=a,F&&J.attr({x:Q}))};J.textSetter=function(a){void 0!==a&&t.textSetter(a); -O();N()};J["stroke-widthSetter"]=function(a,g){a&&(p=!0);I=this["stroke-width"]=a;T(g,a)};J.strokeSetter=J.fillSetter=J.rSetter=function(a,g){"r"!==g&&("fill"===g&&a&&(p=!0),J[g]=a);T(g,a)};J.anchorXSetter=function(a,g){z=J.anchorX=a;T(g,Math.round(a)-K()-Q)};J.anchorYSetter=function(a,g){h=J.anchorY=a;T(g,a-G)};J.xSetter=function(a){J.x=a;n&&(a-=n*((C||F.width)+2*B));Q=Math.round(a);J.attr("translateX",Q)};J.ySetter=function(a){G=J.y=Math.round(a);J.attr("translateY",G)};var U=J.css;return c(J,{css:function(a){if(a){var g= -{};a=q(a);d(J.textProps,function(b){void 0!==a[b]&&(g[b]=a[b],delete a[b])});t.css(g)}return U.call(J,a)},getBBox:function(){return{width:F.width+2*B,height:F.height+2*B,x:F.x-B,y:F.y-B}},shadow:function(a){a&&(O(),x&&x.shadow(a));return J},destroy:function(){v(J.element,"mouseenter");v(J.element,"mouseleave");t&&(t=t.destroy());x&&(x=x.destroy());E.prototype.destroy.call(J);J=y=O=N=T=null}})}});a.Renderer=D})(M);(function(a){var E=a.attr,D=a.createElement,H=a.css,p=a.defined,f=a.each,l=a.extend, -r=a.isFirefox,n=a.isMS,w=a.isWebKit,u=a.pick,e=a.pInt,h=a.SVGRenderer,m=a.win,d=a.wrap;l(a.SVGElement.prototype,{htmlCss:function(a){var b=this.element;if(b=a&&"SPAN"===b.tagName&&a.width)delete a.width,this.textWidth=b,this.updateTransform();a&&"ellipsis"===a.textOverflow&&(a.whiteSpace="nowrap",a.overflow="hidden");this.styles=l(this.styles,a);H(this.element,a);return this},htmlGetBBox:function(){var a=this.element;return{x:a.offsetLeft,y:a.offsetTop,width:a.offsetWidth,height:a.offsetHeight}}, -htmlUpdateTransform:function(){if(this.added){var a=this.renderer,b=this.element,d=this.translateX||0,z=this.translateY||0,h=this.x||0,m=this.y||0,x=this.textAlign||"left",n={left:0,center:.5,right:1}[x],t=this.styles;H(b,{marginLeft:d,marginTop:z});this.shadows&&f(this.shadows,function(a){H(a,{marginLeft:d+1,marginTop:z+1})});this.inverted&&f(b.childNodes,function(c){a.invertChild(c,b)});if("SPAN"===b.tagName){var l=this.rotation,u=e(this.textWidth),q=t&&t.whiteSpace,A=[l,x,b.innerHTML,this.textWidth, -this.textAlign].join();A!==this.cTT&&(t=a.fontMetrics(b.style.fontSize).b,p(l)&&this.setSpanRotation(l,n,t),H(b,{width:"",whiteSpace:q||"nowrap"}),b.offsetWidth>u&&/[ \-]/.test(b.textContent||b.innerText)&&H(b,{width:u+"px",display:"block",whiteSpace:q||"normal"}),this.getSpanCorrection(b.offsetWidth,t,n,l,x));H(b,{left:h+(this.xCorr||0)+"px",top:m+(this.yCorr||0)+"px"});w&&(t=b.offsetHeight);this.cTT=A}}else this.alignOnAdd=!0},setSpanRotation:function(a,b,d){var c={},k=this.renderer.getTransformKey(); -c[k]=c.transform="rotate("+a+"deg)";c[k+(r?"Origin":"-origin")]=c.transformOrigin=100*b+"% "+d+"px";H(this.element,c)},getSpanCorrection:function(a,b,d){this.xCorr=-a*d;this.yCorr=-b}});l(h.prototype,{getTransformKey:function(){return n&&!/Edge/.test(m.navigator.userAgent)?"-ms-transform":w?"-webkit-transform":r?"MozTransform":m.opera?"-o-transform":""},html:function(a,b,k){var c=this.createElement("span"),e=c.element,h=c.renderer,m=h.isSVG,w=function(a,b){f(["opacity","visibility"],function(c){d(a, -c+"Setter",function(a,c,d,k){a.call(this,c,d,k);b[d]=c})})};c.textSetter=function(a){a!==e.innerHTML&&delete this.bBox;this.textStr=a;e.innerHTML=u(a,"");c.htmlUpdateTransform()};m&&w(c,c.element.style);c.xSetter=c.ySetter=c.alignSetter=c.rotationSetter=function(a,b){"align"===b&&(b="textAlign");c[b]=a;c.htmlUpdateTransform()};c.attr({text:a,x:Math.round(b),y:Math.round(k)}).css({fontFamily:this.style.fontFamily,fontSize:this.style.fontSize,position:"absolute"});e.style.whiteSpace="nowrap";c.css= -c.htmlCss;m&&(c.add=function(a){var b,d=h.box.parentNode,k=[];if(this.parentGroup=a){if(b=a.div,!b){for(;a;)k.push(a),a=a.parentGroup;f(k.reverse(),function(a){function e(g,b){a[b]=g;n?q[h.getTransformKey()]="translate("+(a.x||a.translateX)+"px,"+(a.y||a.translateY)+"px)":"translateX"===b?q.left=g+"px":q.top=g+"px";a.doTransform=!0}var q,g=E(a.element,"class");g&&(g={className:g});b=a.div=a.div||D("div",g,{position:"absolute",left:(a.translateX||0)+"px",top:(a.translateY||0)+"px",display:a.display, -opacity:a.opacity,pointerEvents:a.styles&&a.styles.pointerEvents},b||d);q=b.style;l(a,{classSetter:function(a){return function(g){this.element.setAttribute("class",g);a.className=g}}(b),on:function(){k[0].div&&c.on.apply({element:k[0].div},arguments);return a},translateXSetter:e,translateYSetter:e});w(a,q)})}}else b=d;b.appendChild(e);c.added=!0;c.alignOnAdd&&c.htmlUpdateTransform();return c});return c}})})(M);(function(a){function E(){var n=a.defaultOptions.global,l=r.moment;if(n.timezone){if(l)return function(a){return-l.tz(a, -n.timezone).utcOffset()};a.error(25)}return n.useUTC&&n.getTimezoneOffset}function D(){var n=a.defaultOptions.global,f,u=n.useUTC,e=u?"getUTC":"get",h=u?"setUTC":"set",m="Minutes Hours Day Date Month FullYear".split(" "),d=m.concat(["Milliseconds","Seconds"]);a.Date=f=n.Date||r.Date;f.hcTimezoneOffset=u&&n.timezoneOffset;f.hcGetTimezoneOffset=E();f.hcHasTimeZone=!(!f.hcTimezoneOffset&&!f.hcGetTimezoneOffset);f.hcMakeTime=function(a,b,d,e,h,m){var c;u?(c=f.UTC.apply(0,arguments),c+=p(c)):c=(new f(a, -b,l(d,1),l(e,0),l(h,0),l(m,0))).getTime();return c};for(n=0;nb&&e-k*zm&&(p=Math.round((h-e)/Math.cos(b*r)));else if(h=e+(1-k)*z,e-k*zm&&(I=m-a.x+I*k,x=-1),I=Math.min(B,I),II||f.autoRotation&&(c.styles||{}).width)p=I;p&&(t.width=p,(n.style||{}).textOverflow||(t.textOverflow="ellipsis"),c.css(t))},getPosition:function(a,f,l,e){var h=this.axis,m=h.chart,d=e&&m.oldChartHeight||m.chartHeight;return{x:a?h.translate(f+l,null,null,e)+h.transB:h.left+h.offset+(h.opposite?(e&&m.oldChartWidth||m.chartWidth)-h.right-h.left:0),y:a?d-h.bottom+h.offset-(h.opposite?h.height:0):d-h.translate(f+l,null,null,e)-h.transB}},getLabelPosition:function(a, -f,l,e,h,m,d,c){var b=this.axis,k=b.transA,z=b.reversed,B=b.staggerLines,n=b.tickRotCorr||{x:0,y:0},x=h.y,u=e||b.reserveSpaceDefault?0:-b.labelOffset*("center"===b.labelAlign?.5:1);D(x)||(x=0===b.side?l.rotation?-8:-l.getBBox().height:2===b.side?n.y+8:Math.cos(l.rotation*r)*(n.y-l.getBBox(!1,0).height/2));a=a+h.x+u+n.x-(m&&e?m*k*(z?-1:1):0);f=f+x-(m&&!e?m*k*(z?1:-1):0);B&&(l=d/(c||1)%B,b.opposite&&(l=B-l-1),f+=b.labelOffset/B*l);return{x:a,y:Math.round(f)}},getMarkPath:function(a,f,l,e,h,m){return m.crispLine(["M", -a,f,"L",a+(h?0:-l),f+(h?l:0)],e)},renderGridLine:function(a,f,l){var e=this.axis,h=e.options,m=this.gridLine,d={},c=this.pos,b=this.type,k=e.tickmarkOffset,z=e.chart.renderer,B=b?b+"Grid":"grid",n=h[B+"LineWidth"],x=h[B+"LineColor"],h=h[B+"LineDashStyle"];m||(d.stroke=x,d["stroke-width"]=n,h&&(d.dashstyle=h),b||(d.zIndex=1),a&&(d.opacity=0),this.gridLine=m=z.path().attr(d).addClass("highcharts-"+(b?b+"-":"")+"grid-line").add(e.gridGroup));if(!a&&m&&(a=e.getPlotLinePath(c+k,m.strokeWidth()*l,a,!0)))m[this.isNew? -"attr":"animate"]({d:a,opacity:f})},renderMark:function(a,f,u){var e=this.axis,h=e.options,m=e.chart.renderer,d=this.type,c=d?d+"Tick":"tick",b=e.tickSize(c),k=this.mark,z=!k,B=a.x;a=a.y;var n=l(h[c+"Width"],!d&&e.isXAxis?1:0),h=h[c+"Color"];b&&(e.opposite&&(b[0]=-b[0]),z&&(this.mark=k=m.path().addClass("highcharts-"+(d?d+"-":"")+"tick").add(e.axisGroup),k.attr({stroke:h,"stroke-width":n})),k[z?"attr":"animate"]({d:this.getMarkPath(B,a,b[0],k.strokeWidth()*u,e.horiz,m),opacity:f}))},renderLabel:function(a, -f,u,e){var h=this.axis,m=h.horiz,d=h.options,c=this.label,b=d.labels,k=b.step,h=h.tickmarkOffset,z=!0,B=a.x;a=a.y;c&&p(B)&&(c.xy=a=this.getLabelPosition(B,a,c,m,b,h,e,k),this.isFirst&&!this.isLast&&!l(d.showFirstLabel,1)||this.isLast&&!this.isFirst&&!l(d.showLastLabel,1)?z=!1:!m||b.step||b.rotation||f||0===u||this.handleOverflow(a),k&&e%k&&(z=!1),z&&p(a.y)?(a.opacity=u,c[this.isNewLabel?"attr":"animate"](a),this.isNewLabel=!1):(c.attr("y",-9999),this.isNewLabel=!0))},render:function(a,f,u){var e= -this.axis,h=e.horiz,m=this.getPosition(h,this.pos,e.tickmarkOffset,f),d=m.x,c=m.y,e=h&&d===e.pos+e.len||!h&&c===e.pos?-1:1;u=l(u,1);this.isActive=!0;this.renderGridLine(f,u,e);this.renderMark(m,u,e);this.renderLabel(m,f,u,a);this.isNew=!1},destroy:function(){H(this,this.axis)}}})(M);var V=function(a){var E=a.addEvent,D=a.animObject,H=a.arrayMax,p=a.arrayMin,f=a.color,l=a.correctFloat,r=a.defaultOptions,n=a.defined,w=a.deg2rad,u=a.destroyObjectProperties,e=a.each,h=a.extend,m=a.fireEvent,d=a.format, -c=a.getMagnitude,b=a.grep,k=a.inArray,z=a.isArray,B=a.isNumber,I=a.isString,x=a.merge,K=a.normalizeTickInterval,t=a.objectEach,C=a.pick,N=a.removeEvent,q=a.splat,A=a.syncTimeout,F=a.Tick,G=function(){this.init.apply(this,arguments)};a.extend(G.prototype,{defaultOptions:{dateTimeLabelFormats:{millisecond:"%H:%M:%S.%L",second:"%H:%M:%S",minute:"%H:%M",hour:"%H:%M",day:"%e. %b",week:"%e. %b",month:"%b '%y",year:"%Y"},endOnTick:!1,labels:{enabled:!0,style:{color:"#666666",cursor:"default",fontSize:"11px"}, -x:0},maxPadding:.01,minorTickLength:2,minorTickPosition:"outside",minPadding:.01,startOfWeek:1,startOnTick:!1,tickLength:10,tickmarkPlacement:"between",tickPixelInterval:100,tickPosition:"outside",title:{align:"middle",style:{color:"#666666"}},type:"linear",minorGridLineColor:"#f2f2f2",minorGridLineWidth:1,minorTickColor:"#999999",lineColor:"#ccd6eb",lineWidth:1,gridLineColor:"#e6e6e6",tickColor:"#ccd6eb"},defaultYAxisOptions:{endOnTick:!0,tickPixelInterval:72,showLastLabel:!0,labels:{x:-8},maxPadding:.05, -minPadding:.05,startOnTick:!0,title:{rotation:270,text:"Values"},stackLabels:{allowOverlap:!1,enabled:!1,formatter:function(){return a.numberFormat(this.total,-1)},style:{fontSize:"11px",fontWeight:"bold",color:"#000000",textOutline:"1px contrast"}},gridLineWidth:1,lineWidth:0},defaultLeftAxisOptions:{labels:{x:-15},title:{rotation:270}},defaultRightAxisOptions:{labels:{x:15},title:{rotation:90}},defaultBottomAxisOptions:{labels:{autoRotation:[-45],x:0},title:{rotation:0}},defaultTopAxisOptions:{labels:{autoRotation:[-45], -x:0},title:{rotation:0}},init:function(a,b){var g=b.isX,v=this;v.chart=a;v.horiz=a.inverted&&!v.isZAxis?!g:g;v.isXAxis=g;v.coll=v.coll||(g?"xAxis":"yAxis");v.opposite=b.opposite;v.side=b.side||(v.horiz?v.opposite?0:2:v.opposite?1:3);v.setOptions(b);var c=this.options,d=c.type;v.labelFormatter=c.labels.formatter||v.defaultLabelFormatter;v.userOptions=b;v.minPixelPadding=0;v.reversed=c.reversed;v.visible=!1!==c.visible;v.zoomEnabled=!1!==c.zoomEnabled;v.hasNames="category"===d||!0===c.categories;v.categories= -c.categories||v.hasNames;v.names=v.names||[];v.plotLinesAndBandsGroups={};v.isLog="logarithmic"===d;v.isDatetimeAxis="datetime"===d;v.positiveValuesOnly=v.isLog&&!v.allowNegativeLog;v.isLinked=n(c.linkedTo);v.ticks={};v.labelEdge=[];v.minorTicks={};v.plotLinesAndBands=[];v.alternateBands={};v.len=0;v.minRange=v.userMinRange=c.minRange||c.maxZoom;v.range=c.range;v.offset=c.offset||0;v.stacks={};v.oldStacks={};v.stacksTouched=0;v.max=null;v.min=null;v.crosshair=C(c.crosshair,q(a.options.tooltip.crosshairs)[g? -0:1],!1);b=v.options.events;-1===k(v,a.axes)&&(g?a.axes.splice(a.xAxis.length,0,v):a.axes.push(v),a[v.coll].push(v));v.series=v.series||[];a.inverted&&!v.isZAxis&&g&&void 0===v.reversed&&(v.reversed=!0);t(b,function(a,g){E(v,g,a)});v.lin2log=c.linearToLogConverter||v.lin2log;v.isLog&&(v.val2lin=v.log2lin,v.lin2val=v.lin2log)},setOptions:function(a){this.options=x(this.defaultOptions,"yAxis"===this.coll&&this.defaultYAxisOptions,[this.defaultTopAxisOptions,this.defaultRightAxisOptions,this.defaultBottomAxisOptions, -this.defaultLeftAxisOptions][this.side],x(r[this.coll],a))},defaultLabelFormatter:function(){var g=this.axis,b=this.value,c=g.categories,k=this.dateTimeLabelFormat,e=r.lang,q=e.numericSymbols,e=e.numericSymbolMagnitude||1E3,h=q&&q.length,m,z=g.options.labels.format,g=g.isLog?Math.abs(b):g.tickInterval;if(z)m=d(z,this);else if(c)m=b;else if(k)m=a.dateFormat(k,b);else if(h&&1E3<=g)for(;h--&&void 0===m;)c=Math.pow(e,h+1),g>=c&&0===10*b%c&&null!==q[h]&&0!==b&&(m=a.numberFormat(b/c,-1)+q[h]);void 0=== -m&&(m=1E4<=Math.abs(b)?a.numberFormat(b,-1):a.numberFormat(b,-1,void 0,""));return m},getSeriesExtremes:function(){var a=this,v=a.chart;a.hasVisibleSeries=!1;a.dataMin=a.dataMax=a.threshold=null;a.softThreshold=!a.isXAxis;a.buildStacks&&a.buildStacks();e(a.series,function(g){if(g.visible||!v.options.chart.ignoreHiddenSeries){var c=g.options,d=c.threshold,k;a.hasVisibleSeries=!0;a.positiveValuesOnly&&0>=d&&(d=null);if(a.isXAxis)c=g.xData,c.length&&(g=p(c),k=H(c),B(g)||g instanceof Date||(c=b(c,B), -g=p(c)),a.dataMin=Math.min(C(a.dataMin,c[0],g),g),a.dataMax=Math.max(C(a.dataMax,c[0],k),k));else if(g.getExtremes(),k=g.dataMax,g=g.dataMin,n(g)&&n(k)&&(a.dataMin=Math.min(C(a.dataMin,g),g),a.dataMax=Math.max(C(a.dataMax,k),k)),n(d)&&(a.threshold=d),!c.softThreshold||a.positiveValuesOnly)a.softThreshold=!1}})},translate:function(a,b,c,d,k,e){var g=this.linkedParent||this,v=1,q=0,h=d?g.oldTransA:g.transA;d=d?g.oldMin:g.min;var m=g.minPixelPadding;k=(g.isOrdinal||g.isBroken||g.isLog&&k)&&g.lin2val; -h||(h=g.transA);c&&(v*=-1,q=g.len);g.reversed&&(v*=-1,q-=v*(g.sector||g.len));b?(a=(a*v+q-m)/h+d,k&&(a=g.lin2val(a))):(k&&(a=g.val2lin(a)),a=B(d)?v*(a-d)*h+q+v*m+(B(e)?h*e:0):void 0);return a},toPixels:function(a,b){return this.translate(a,!1,!this.horiz,null,!0)+(b?0:this.pos)},toValue:function(a,b){return this.translate(a-(b?0:this.pos),!0,!this.horiz,null,!0)},getPlotLinePath:function(a,b,c,d,k){var g=this.chart,v=this.left,q=this.top,e,h,m=c&&g.oldChartHeight||g.chartHeight,z=c&&g.oldChartWidth|| -g.chartWidth,A;e=this.transB;var t=function(a,g,b){if(ab)d?a=Math.min(Math.max(g,a),b):A=!0;return a};k=C(k,this.translate(a,null,null,c));a=c=Math.round(k+e);e=h=Math.round(m-k-e);B(k)?this.horiz?(e=q,h=m-this.bottom,a=c=t(a,v,v+this.width)):(a=v,c=z-this.right,e=h=t(e,q,q+this.height)):(A=!0,d=!1);return A&&!d?null:g.renderer.crispLine(["M",a,e,"L",c,h],b||1)},getLinearTickPositions:function(a,b,c){var g,v=l(Math.floor(b/a)*a);c=l(Math.ceil(c/a)*a);var d=[],k;l(v+a)===v&&(k=20);if(this.single)return[b]; -for(b=v;b<=c;){d.push(b);b=l(b+a,k);if(b===g)break;g=b}return d},getMinorTickInterval:function(){var a=this.options;return!0===a.minorTicks?C(a.minorTickInterval,"auto"):!1===a.minorTicks?null:a.minorTickInterval},getMinorTickPositions:function(){var a=this,b=a.options,c=a.tickPositions,d=a.minorTickInterval,k=[],q=a.pointRangePadding||0,h=a.min-q,q=a.max+q,m=q-h;if(m&&m/d=this.minRange,t=this.minRange,d=(t-c+b)/2,d=[b-d,C(a.min,b-d)],k&&(d[2]=this.isLog?this.log2lin(this.dataMin):this.dataMin),b=H(d),c=[b+t,C(a.max,b+t)],k&&(c[2]=this.isLog?this.log2lin(this.dataMax):this.dataMax),c=p(c),c-b=p?(r=p,f=0):b.dataMax<=p&&(w=p,x=0)),b.min= -C(N,r,b.dataMin),b.max=C(D,w,b.dataMax));q&&(b.positiveValuesOnly&&!g&&0>=Math.min(b.min,C(b.dataMin,b.min))&&a.error(10,1),b.min=l(h(b.min),15),b.max=l(h(b.max),15));b.range&&n(b.max)&&(b.userMin=b.min=N=Math.max(b.dataMin,b.minFromRange()),b.userMax=D=b.max,b.range=null);m(b,"foundExtremes");b.beforePadding&&b.beforePadding();b.adjustForMinRange();!(G||b.axisPointRange||b.usePercentage||t)&&n(b.min)&&n(b.max)&&(h=b.max-b.min)&&(!n(N)&&f&&(b.min-=h*f),!n(D)&&x&&(b.max+=h*x));B(k.softMin)&&!B(b.userMin)&& -(b.min=Math.min(b.min,k.softMin));B(k.softMax)&&!B(b.userMax)&&(b.max=Math.max(b.max,k.softMax));B(k.floor)&&(b.min=Math.max(b.min,k.floor));B(k.ceiling)&&(b.max=Math.min(b.max,k.ceiling));I&&n(b.dataMin)&&(p=p||0,!n(N)&&b.min=p?b.min=p:!n(D)&&b.max>p&&b.dataMax<=p&&(b.max=p));b.tickInterval=b.min===b.max||void 0===b.min||void 0===b.max?1:t&&!F&&u===b.linkedParent.options.tickPixelInterval?F=b.linkedParent.tickInterval:C(F,this.tickAmount?(b.max-b.min)/Math.max(this.tickAmount-1,1): -void 0,G?1:(b.max-b.min)*u/Math.max(b.len,u));A&&!g&&e(b.series,function(a){a.processData(b.min!==b.oldMin||b.max!==b.oldMax)});b.setAxisTranslation(!0);b.beforeSetTickPositions&&b.beforeSetTickPositions();b.postProcessTickInterval&&(b.tickInterval=b.postProcessTickInterval(b.tickInterval));b.pointRange&&!F&&(b.tickInterval=Math.max(b.pointRange,b.tickInterval));g=C(k.minTickInterval,b.isDatetimeAxis&&b.closestPointRange);!F&&b.tickIntervalb.tickInterval&&1E3b.max)),!!this.tickAmount));this.tickAmount||(b.tickInterval=b.unsquish());this.setTickPositions()},setTickPositions:function(){var a=this.options,b,c=a.tickPositions;b=this.getMinorTickInterval();var d=a.tickPositioner,k=a.startOnTick,q=a.endOnTick;this.tickmarkOffset=this.categories&&"between"===a.tickmarkPlacement&&1===this.tickInterval?.5:0;this.minorTickInterval="auto"===b&&this.tickInterval?this.tickInterval/ -5:b;this.single=this.min===this.max&&n(this.min)&&!this.tickAmount&&(parseInt(this.min,10)===this.min||!1!==a.allowDecimals);this.tickPositions=b=c&&c.slice();!b&&(b=this.isDatetimeAxis?this.getTimeTicks(this.normalizeTimeTickInterval(this.tickInterval,a.units),this.min,this.max,a.startOfWeek,this.ordinalPositions,this.closestPointRange,!0):this.isLog?this.getLogTickPositions(this.tickInterval,this.min,this.max):this.getLinearTickPositions(this.tickInterval,this.min,this.max),b.length>this.len&&(b= -[b[0],b.pop()],b[0]===b[1]&&(b.length=1)),this.tickPositions=b,d&&(d=d.apply(this,[this.min,this.max])))&&(this.tickPositions=b=d);this.paddedTicks=b.slice(0);this.trimTicks(b,k,q);this.isLinked||(this.single&&2>b.length&&(this.min-=.5,this.max+=.5),c||d||this.adjustTickAmount())},trimTicks:function(a,b,c){var g=a[0],d=a[a.length-1],k=this.minPointOffset||0;if(!this.isLinked){if(b&&-Infinity!==g)this.min=g;else for(;this.min-k>a[0];)a.shift();if(c)this.max=d;else for(;this.max+kb&&(this.finalTickAmt=b,b=5);this.tickAmount=b},adjustTickAmount:function(){var a=this.tickInterval,b=this.tickPositions,c=this.tickAmount,d=this.finalTickAmt,k=b&&b.length,q=C(this.threshold,this.softThreshold?0:null);if(this.hasData()){if(kc&&(this.tickInterval*= -2,this.setTickPositions());if(n(d)){for(a=c=b.length;a--;)(3===d&&1===a%2||2>=d&&0d&&(a=d)),n(c)&&(bd&&(b=d))),this.displayBtn=void 0!==a||void 0!==b,this.setExtremes(a,b,!1,void 0,{trigger:"zoom"});return!0},setAxisSize:function(){var b=this.chart,c=this.options,d=c.offsets||[0,0,0,0],k=this.horiz,q=this.width=Math.round(a.relativeLength(C(c.width,b.plotWidth-d[3]+d[1]),b.plotWidth)),e=this.height=Math.round(a.relativeLength(C(c.height, -b.plotHeight-d[0]+d[2]),b.plotHeight)),h=this.top=Math.round(a.relativeLength(C(c.top,b.plotTop+d[0]),b.plotHeight,b.plotTop)),c=this.left=Math.round(a.relativeLength(C(c.left,b.plotLeft+d[3]),b.plotWidth,b.plotLeft));this.bottom=b.chartHeight-e-h;this.right=b.chartWidth-q-c;this.len=Math.max(k?q:e,0);this.pos=k?c:h},getExtremes:function(){var a=this.isLog,b=this.lin2log;return{min:a?l(b(this.min)):this.min,max:a?l(b(this.max)):this.max,dataMin:this.dataMin,dataMax:this.dataMax,userMin:this.userMin, -userMax:this.userMax}},getThreshold:function(a){var b=this.isLog,g=this.lin2log,c=b?g(this.min):this.min,b=b?g(this.max):this.max;null===a?a=c:c>a?a=c:ba?"right":195a?"left":"center"},tickSize:function(a){var b=this.options,g=b[a+"Length"],c=C(b[a+"Width"],"tick"===a&&this.isXAxis?1:0);if(c&&g)return"inside"===b[a+"Position"]&&(g=-g),[g,c]},labelMetrics:function(){var a= -this.tickPositions&&this.tickPositions[0]||0;return this.chart.renderer.fontMetrics(this.options.labels.style&&this.options.labels.style.fontSize,this.ticks[a]&&this.ticks[a].label)},unsquish:function(){var a=this.options.labels,b=this.horiz,c=this.tickInterval,d=c,k=this.len/(((this.categories?1:0)+this.max-this.min)/c),q,h=a.rotation,m=this.labelMetrics(),z,A=Number.MAX_VALUE,t,x=function(a){a/=k||1;a=1=a)z=x(Math.abs(m.h/Math.sin(w*a))),b=z+Math.abs(a/360),b(c.step||0)&&!c.rotation&&(this.staggerLines||1)*this.len/d||!b&&(c.style&&parseInt(c.style.width,10)||k&&k-a.spacing[3]|| -.33*a.chartWidth)},renderUnsquish:function(){var a=this.chart,b=a.renderer,c=this.tickPositions,d=this.ticks,k=this.options.labels,q=this.horiz,h=this.getSlotWidth(),m=Math.max(1,Math.round(h-2*(k.padding||5))),z={},A=this.labelMetrics(),t=k.style&&k.style.textOverflow,f,F=0,l,B;I(k.rotation)||(z.rotation=k.rotation||0);e(c,function(a){(a=d[a])&&a.labelLength>F&&(F=a.labelLength)});this.maxLabelLength=F;if(this.autoRotation)F>m&&F>A.h?z.rotation=this.labelRotation:this.labelRotation=0;else if(h&& -(f={width:m+"px"},!t))for(f.textOverflow="clip",l=c.length;!q&&l--;)if(B=c[l],m=d[B].label)m.styles&&"ellipsis"===m.styles.textOverflow?m.css({textOverflow:"clip"}):d[B].labelLength>h&&m.css({width:h+"px"}),m.getBBox().height>this.len/c.length-(A.h-A.f)&&(m.specCss={textOverflow:"ellipsis"});z.rotation&&(f={width:(F>.5*a.chartHeight?.33*a.chartHeight:a.chartHeight)+"px"},t||(f.textOverflow="ellipsis"));if(this.labelAlign=k.align||this.autoLabelAlign(this.labelRotation))z.align=this.labelAlign;e(c, -function(a){var b=(a=d[a])&&a.label;b&&(b.attr(z),f&&b.css(x(f,b.specCss)),delete b.specCss,a.rotation=z.rotation)});this.tickRotCorr=b.rotCorr(A.b,this.labelRotation||0,0!==this.side)},hasData:function(){return this.hasVisibleSeries||n(this.min)&&n(this.max)&&this.tickPositions&&0=this.min&&a<=this.max)g[a]||(g[a]=new F(this,a)),d&&g[a].isNew&&g[a].render(b,!0,.1),g[a].render(b)},render:function(){var b= -this,c=b.chart,d=b.options,k=b.isLog,q=b.lin2log,h=b.isLinked,m=b.tickPositions,z=b.axisTitle,x=b.ticks,f=b.minorTicks,l=b.alternateBands,C=d.stackLabels,n=d.alternateGridColor,u=b.tickmarkOffset,G=b.axisLine,p=b.showAxis,I=D(c.renderer.globalAnimation),r,w;b.labelEdge.length=0;b.overlap=!1;e([x,f,l],function(a){t(a,function(a){a.isActive=!1})});if(b.hasData()||h)b.minorTickInterval&&!b.categories&&e(b.getMinorTickPositions(),function(a){b.renderMinorTick(a)}),m.length&&(e(m,function(a,c){b.renderTick(a, -c)}),u&&(0===b.min||b.single)&&(x[-1]||(x[-1]=new F(b,-1,null,!0)),x[-1].render(-1))),n&&e(m,function(d,g){w=void 0!==m[g+1]?m[g+1]+u:b.max-u;0===g%2&&d=h.second?0:C*Math.floor(x.getMilliseconds()/C));if(t>=h.second)x[D.hcSetSeconds](t>=h.minute? -0:C*Math.floor(x.getSeconds()/C));if(t>=h.minute)x[D.hcSetMinutes](t>=h.hour?0:C*Math.floor(x[D.hcGetMinutes]()/C));if(t>=h.hour)x[D.hcSetHours](t>=h.day?0:C*Math.floor(x[D.hcGetHours]()/C));if(t>=h.day)x[D.hcSetDate](t>=h.month?1:C*Math.floor(x[D.hcGetDate]()/C));t>=h.month&&(x[D.hcSetMonth](t>=h.year?0:C*Math.floor(x[D.hcGetMonth]()/C)),n=x[D.hcGetFullYear]());if(t>=h.year)x[D.hcSetFullYear](n-n%C);if(t===h.week)x[D.hcSetDate](x[D.hcGetDate]()-x[D.hcGetDay]()+e(b,1));n=x[D.hcGetFullYear]();b=x[D.hcGetMonth](); -var A=x[D.hcGetDate](),F=x[D.hcGetHours]();d=x.getTime();D.hcHasTimeZone&&(q=(!B||!!D.hcGetTimezoneOffset)&&(c-d>4*h.month||w(d)!==w(c)),N=w(x),x=new D(d+N));B=x.getTime();for(d=1;Bk.length&&l(k,function(a){0===a%18E5&&"000000000"===H("%H%M%S%L",a)&&(m[a]="day")})}k.info=r(a,{higherRanks:m,totalRange:t*C});return k}; -E.prototype.normalizeTimeTickInterval=function(a,d){var c=d||[["millisecond",[1,2,5,10,20,25,50,100,200,500]],["second",[1,2,5,10,15,30]],["minute",[1,2,5,10,15,30]],["hour",[1,2,3,4,6,8,12]],["day",[1,2]],["week",[1,2]],["month",[1,2,3,4,6]],["year",null]];d=c[c.length-1];var b=h[d[0]],k=d[1],e;for(e=0;er&&(!w||z<=n)&&void 0!==z&&d.push(z),z>n&& -(B=!0),z=k;else r=h(r),n=h(n),a=w?this.getMinorTickInterval():l.tickInterval,a=f("auto"===a?null:a,this._minorAutoInterval,l.tickPixelInterval/(w?5:1)*(n-r)/((w?e/this.tickPositions.length:e)||1)),a=p(a,null,D(a)),d=H(this.getLinearTickPositions(a,r,n),m),w||(this._minorAutoInterval=a/5);w||(this.tickInterval=a);return d};E.prototype.log2lin=function(a){return Math.log(a)/Math.LN10};E.prototype.lin2log=function(a){return Math.pow(10,a)}})(M);(function(a,E){var D=a.arrayMax,H=a.arrayMin,p=a.defined, -f=a.destroyObjectProperties,l=a.each,r=a.erase,n=a.merge,w=a.pick;a.PlotLineOrBand=function(a,e){this.axis=a;e&&(this.options=e,this.id=e.id)};a.PlotLineOrBand.prototype={render:function(){var f=this,e=f.axis,h=e.horiz,m=f.options,d=m.label,c=f.label,b=m.to,k=m.from,z=m.value,l=p(k)&&p(b),r=p(z),x=f.svgElem,K=!x,t=[],C=m.color,N=w(m.zIndex,0),q=m.events,t={"class":"highcharts-plot-"+(l?"band ":"line ")+(m.className||"")},A={},F=e.chart.renderer,G=l?"bands":"lines",g=e.log2lin;e.isLog&&(k=g(k),b=g(b), -z=g(z));r?(t={stroke:C,"stroke-width":m.width},m.dashStyle&&(t.dashstyle=m.dashStyle)):l&&(C&&(t.fill=C),m.borderWidth&&(t.stroke=m.borderColor,t["stroke-width"]=m.borderWidth));A.zIndex=N;G+="-"+N;(C=e.plotLinesAndBandsGroups[G])||(e.plotLinesAndBandsGroups[G]=C=F.g("plot-"+G).attr(A).add());K&&(f.svgElem=x=F.path().attr(t).add(C));if(r)t=e.getPlotLinePath(z,x.strokeWidth());else if(l)t=e.getPlotBandPath(k,b,m);else return;K&&t&&t.length?(x.attr({d:t}),q&&a.objectEach(q,function(a,b){x.on(b,function(a){q[b].apply(f, -[a])})})):x&&(t?(x.show(),x.animate({d:t})):(x.hide(),c&&(f.label=c=c.destroy())));d&&p(d.text)&&t&&t.length&&0this.max&& -e>this.max;if(m&&h)for(a&&(k=m.toString()===h.toString(),b=0),a=0;aA-h?A:A-h);else if(z)k[a]=Math.max(e,g+h+d>c?g:g+h);else return!1},C=function(a,c,d,g){var e;gc-b?e=!1:k[a]=gc-d/2?c-d-2:g-d/2;return e},p=function(a){var b=f;f=x;x=b;m=a},q=function(){!1!==t.apply(0,f)?!1!==C.apply(0,x)||m||(p(!0),q()):m?k.x=k.y=0:(p(!0),q())};(c.inverted||1q&&(h=!1);a=(e.series&& -e.series.yAxis&&e.series.yAxis.pos)+(e.plotY||0);a-=b.plotTop;c.push({target:e.isHeader?b.plotHeight+l:a,rank:e.isHeader?1:0,size:z.tt.getBBox().height+1,point:e,x:q,tt:t})}});this.cleanSplit();a.distribute(c,b.plotHeight+l);D(c,function(a){var c=a.point,d=c.series;a.tt.attr({visibility:void 0===a.pos?"hidden":"inherit",x:h||c.isHeader?a.x:c.plotX+b.plotLeft+n(f.distance,16),y:a.pos+b.plotTop,anchorX:c.isHeader?c.plotX+b.plotLeft:c.plotX+d.xAxis.pos,anchorY:c.isHeader?a.pos+b.plotTop-15:c.plotY+d.yAxis.pos})})}, -updatePosition:function(a){var e=this.chart,d=this.getLabel(),d=(this.options.positioner||this.getPosition).call(this,d.width,d.height,a);this.move(Math.round(d.x),Math.round(d.y||0),a.plotX+e.plotLeft,a.plotY+e.plotTop)},getDateFormat:function(a,m,d,c){var b=E("%m-%d %H:%M:%S.%L",m),k,h,f={millisecond:15,second:12,minute:9,hour:6,day:3},l="millisecond";for(h in e){if(a===e.week&&+E("%w",m)===d&&"00:00:00.000"===b.substr(6)){h="week";break}if(e[h]>a){h=l;break}if(f[h]&&b.substr(f[h])!=="01-01 00:00:00.000".substr(f[h]))break; -"week"!==h&&(l=h)}h&&(k=c[h]);return k},getXDateFormat:function(a,e,d){e=e.dateTimeLabelFormats;var c=d&&d.closestPointRange;return(c?this.getDateFormat(c,a.x,d.options.startOfWeek,e):e.day)||e.year},tooltipFooterHeaderFormatter:function(a,e){e=e?"footer":"header";var d=a.series,c=d.tooltipOptions,b=c.xDateFormat,k=d.xAxis,h=k&&"datetime"===k.options.type&&f(a.key),m=c[e+"Format"];h&&!b&&(b=this.getXDateFormat(a,c,k));h&&b&&D(a.point&&a.point.tooltipDateKeys||["key"],function(a){m=m.replace("{point."+ -a+"}","{point."+a+":"+b+"}")});return p(m,{point:a,series:d})},bodyFormatter:function(a){return l(a,function(a){var d=a.series.tooltipOptions;return(d[(a.point.formatPrefix||"point")+"Formatter"]||a.point.tooltipFormatter).call(a.point,d[(a.point.formatPrefix||"point")+"Format"])})}}})(M);(function(a){var E=a.addEvent,D=a.attr,H=a.charts,p=a.color,f=a.css,l=a.defined,r=a.each,n=a.extend,w=a.find,u=a.fireEvent,e=a.isObject,h=a.offset,m=a.pick,d=a.splat,c=a.Tooltip;a.Pointer=function(a,c){this.init(a, -c)};a.Pointer.prototype={init:function(a,d){this.options=d;this.chart=a;this.runChartClick=d.chart.events&&!!d.chart.events.click;this.pinchDown=[];this.lastValidTouch={};c&&(a.tooltip=new c(a,d.tooltip),this.followTouchMove=m(d.tooltip.followTouchMove,!0));this.setDOMEvents()},zoomOption:function(a){var b=this.chart,c=b.options.chart,d=c.zoomType||"",b=b.inverted;/touch/.test(a.type)&&(d=m(c.pinchType,d));this.zoomX=a=/x/.test(d);this.zoomY=d=/y/.test(d);this.zoomHor=a&&!b||d&&b;this.zoomVert=d&& -!b||a&&b;this.hasZoom=a||d},normalize:function(a,c){var b;b=a.touches?a.touches.length?a.touches.item(0):a.changedTouches[0]:a;c||(this.chartPosition=c=h(this.chart.container));return n(a,{chartX:Math.round(b.pageX-c.left),chartY:Math.round(b.pageY-c.top)})},getCoordinates:function(a){var b={xAxis:[],yAxis:[]};r(this.chart.axes,function(c){b[c.isXAxis?"xAxis":"yAxis"].push({axis:c,value:c.toValue(a[c.horiz?"chartX":"chartY"])})});return b},findNearestKDPoint:function(a,c,d){var b;r(a,function(a){var k= -!(a.noSharedTooltip&&c)&&0>a.options.findNearestPointBy.indexOf("y");a=a.searchPoint(d,k);if((k=e(a,!0))&&!(k=!e(b,!0)))var k=b.distX-a.distX,h=b.dist-a.dist,m=(a.series.group&&a.series.group.zIndex)-(b.series.group&&b.series.group.zIndex),k=0<(0!==k&&c?k:0!==h?h:0!==m?m:b.series.index>a.series.index?-1:1);k&&(b=a)});return b},getPointFromEvent:function(a){a=a.target;for(var b;a&&!b;)b=a.point,a=a.parentNode;return b},getChartCoordinatesFromPoint:function(a,c){var b=a.series,d=b.xAxis,b=b.yAxis,k= -m(a.clientX,a.plotX);if(d&&b)return c?{chartX:d.len+d.pos-k,chartY:b.len+b.pos-a.plotY}:{chartX:k+d.pos,chartY:a.plotY+b.pos}},getHoverData:function(b,c,d,h,f,l,n){var k,z=[],x=n&&n.isBoosting;h=!(!h||!b);n=c&&!c.stickyTracking?[c]:a.grep(d,function(a){return a.visible&&!(!f&&a.directTouch)&&m(a.options.enableMouseTracking,!0)&&a.stickyTracking});c=(k=h?b:this.findNearestKDPoint(n,f,l))&&k.series;k&&(f&&!c.noSharedTooltip?(n=a.grep(d,function(a){return a.visible&&!(!f&&a.directTouch)&&m(a.options.enableMouseTracking, -!0)&&!a.noSharedTooltip}),r(n,function(a){var b=w(a.points,function(a){return a.x===k.x&&!a.isNull});e(b)&&(x&&(b=a.getPoint(b)),z.push(b))})):z.push(k));return{hoverPoint:k,hoverSeries:c,hoverPoints:z}},runPointActions:function(b,c){var d=this.chart,k=d.tooltip&&d.tooltip.options.enabled?d.tooltip:void 0,e=k?k.shared:!1,h=c||d.hoverPoint,f=h&&h.series||d.hoverSeries,f=this.getHoverData(h,f,d.series,!!c||f&&f.directTouch&&this.isDirectTouch,e,b,{isBoosting:d.isBoosting}),l,h=f.hoverPoint;l=f.hoverPoints; -c=(f=f.hoverSeries)&&f.tooltipOptions.followPointer;e=e&&f&&!f.noSharedTooltip;if(h&&(h!==d.hoverPoint||k&&k.isHidden)){r(d.hoverPoints||[],function(b){-1===a.inArray(b,l)&&b.setState()});r(l||[],function(a){a.setState("hover")});if(d.hoverSeries!==f)f.onMouseOver();d.hoverPoint&&d.hoverPoint.firePointEvent("mouseOut");if(!h.series)return;h.firePointEvent("mouseOver");d.hoverPoints=l;d.hoverPoint=h;k&&k.refresh(e?l:h,b)}else c&&k&&!k.isHidden&&(h=k.getAnchor([{}],b),k.updatePosition({plotX:h[0],plotY:h[1]})); -this.unDocMouseMove||(this.unDocMouseMove=E(d.container.ownerDocument,"mousemove",function(b){var c=H[a.hoverChartIndex];if(c)c.pointer.onDocumentMouseMove(b)}));r(d.axes,function(c){var d=m(c.crosshair.snap,!0),k=d?a.find(l,function(a){return a.series[c.coll]===c}):void 0;k||!d?c.drawCrosshair(b,k):c.hideCrosshair()})},reset:function(a,c){var b=this.chart,k=b.hoverSeries,e=b.hoverPoint,h=b.hoverPoints,m=b.tooltip,f=m&&m.shared?h:e;a&&f&&r(d(f),function(b){b.series.isCartesian&&void 0===b.plotX&& -(a=!1)});if(a)m&&f&&(m.refresh(f),e&&(e.setState(e.state,!0),r(b.axes,function(a){a.crosshair&&a.drawCrosshair(null,e)})));else{if(e)e.onMouseOut();h&&r(h,function(a){a.setState()});if(k)k.onMouseOut();m&&m.hide(c);this.unDocMouseMove&&(this.unDocMouseMove=this.unDocMouseMove());r(b.axes,function(a){a.hideCrosshair()});this.hoverX=b.hoverPoints=b.hoverPoint=null}},scaleGroups:function(a,c){var b=this.chart,d;r(b.series,function(k){d=a||k.getPlotBox();k.xAxis&&k.xAxis.zoomEnabled&&k.group&&(k.group.attr(d), -k.markerGroup&&(k.markerGroup.attr(d),k.markerGroup.clip(c?b.clipRect:null)),k.dataLabelsGroup&&k.dataLabelsGroup.attr(d))});b.clipRect.attr(c||b.clipBox)},dragStart:function(a){var b=this.chart;b.mouseIsDown=a.type;b.cancelClick=!1;b.mouseDownX=this.mouseDownX=a.chartX;b.mouseDownY=this.mouseDownY=a.chartY},drag:function(a){var b=this.chart,c=b.options.chart,d=a.chartX,e=a.chartY,h=this.zoomHor,m=this.zoomVert,f=b.plotLeft,l=b.plotTop,n=b.plotWidth,q=b.plotHeight,A,F=this.selectionMarker,G=this.mouseDownX, -g=this.mouseDownY,v=c.panKey&&a[c.panKey+"Key"];F&&F.touch||(df+n&&(d=f+n),el+q&&(e=l+q),this.hasDragged=Math.sqrt(Math.pow(G-d,2)+Math.pow(g-e,2)),10u.max&&(f=u.max-x,v=!0);v?(F-=.8*(F-m[b][0]),q||(g-=.8*(g-m[b][1])),l()):m[b]=[F,g];C||(h[b]=w-r,h[n]=x);h=C?1/t:t;e[n]=x;e[b]=f;p[C?a?"scaleY":"scaleX":"scale"+k]=t;p["translate"+k]=h*r+(F-h*A)},pinch:function(a){var n=this,r=n.chart,u=n.pinchDown,e=a.touches,h=e.length,m=n.lastValidTouch, -d=n.hasZoom,c=n.selectionMarker,b={},k=1===h&&(n.inClass(a.target,"highcharts-tracker")&&r.runTrackerClick||n.runChartClick),z={};1c-6&&h(q||c.spacingBox.width-2*t-d.x)&&(this.itemX=t,this.itemY+=F+this.lastLineHeight+A,this.lastLineHeight=0);this.maxItemWidth=Math.max(this.maxItemWidth,m);this.lastItemY=F+this.itemY+A;this.lastLineHeight=Math.max(b,this.lastLineHeight);a._legendItemPos=[this.itemX,this.itemY];e?this.itemX+=m:(this.itemY+=F+b+A,this.lastLineHeight=b);this.offsetWidth=q||Math.max((e?this.itemX-t-(a.checkbox?0:p):m)+t,this.offsetWidth)}, -getAllItems:function(){var a=[];f(this.chart.series,function(c){var b=c&&c.options;c&&w(b.showInLegend,p(b.linkedTo)?!1:void 0,!0)&&(a=a.concat(c.legendItems||("point"===b.legendType?c.data:c)))});return a},getAlignment:function(){var a=this.options;return a.floating?"":a.align.charAt(0)+a.verticalAlign.charAt(0)+a.layout.charAt(0)},adjustMargins:function(a,c){var b=this.chart,d=this.options,e=this.getAlignment();e&&f([/(lth|ct|rth)/,/(rtv|rm|rbv)/,/(rbh|cb|lbh)/,/(lbv|lm|ltv)/],function(k,h){k.test(e)&& -!p(a[h])&&(b[r[h]]=Math.max(b[r[h]],b.legend[(h+1)%2?"legendHeight":"legendWidth"]+[1,-1,-1,1][h]*d[h%2?"x":"y"]+w(d.margin,12)+c[h]+(0===h?b.titleOffset+b.options.title.margin:0)))})},render:function(){var a=this,c=a.chart,b=c.renderer,k=a.group,h,m,l,x,p=a.box,t=a.options,C=a.padding;a.itemX=C;a.itemY=a.initialItemY;a.offsetWidth=0;a.lastItemY=0;k||(a.group=k=b.g("legend").attr({zIndex:7}).add(),a.contentGroup=b.g().attr({zIndex:1}).add(k),a.scrollGroup=b.g().add(a.contentGroup));a.renderTitle(); -h=a.getAllItems();e(h,function(a,b){return(a.options&&a.options.legendIndex||0)-(b.options&&b.options.legendIndex||0)});t.reversed&&h.reverse();a.allItems=h;a.display=m=!!h.length;a.lastLineHeight=0;f(h,function(b){a.renderItem(b)});l=(t.width||a.offsetWidth)+C;x=a.lastItemY+a.lastLineHeight+a.titleHeight;x=a.handleOverflow(x);x+=C;p||(a.box=p=b.rect().addClass("highcharts-legend-box").attr({r:t.borderRadius}).add(k),p.isNew=!0);p.attr({stroke:t.borderColor,"stroke-width":t.borderWidth||0,fill:t.backgroundColor|| -"none"}).shadow(t.shadow);0b&&!1!==t.enabled?(this.clipHeight=l=Math.max(b-20-this.titleHeight-m,0),this.currentPage=w(this.currentPage,1),this.fullHeight=a,f(G,function(a,b){var c=a._legendItemPos[1],d=Math.round(a.legendItem.getBBox().height),g=A.length;if(!g||c-A[g-1]>l&&(F||c)!==A[g-1])A.push(F||c),g++;a.pageIx=g-1;F&&(G[b-1].pageIx=g-1);b===G.length-1&&c+d-A[g-1]>l&&(A.push(c),a.pageIx=g);c!==F&&(F=c)}),n||(n=c.clipRect=d.clipRect(0,m,9999,0),c.contentGroup.clip(n)),g(l),q||(this.nav=q=d.g().attr({zIndex:1}).add(this.group), -this.up=d.symbol("triangle",0,0,r,r).on("click",function(){c.scroll(-1,p)}).add(q),this.pager=d.text("",15,10).addClass("highcharts-legend-navigation").css(t.style).add(q),this.down=d.symbol("triangle-down",0,0,r,r).on("click",function(){c.scroll(1,p)}).add(q)),c.scroll(0),a=b):q&&(g(),this.nav=q.destroy(),this.scrollGroup.attr({translateY:1}),this.clipHeight=0);return a},scroll:function(a,c){var b=this.pages,d=b.length;a=this.currentPage+a;var e=this.clipHeight,h=this.options.navigation,f=this.pager, -m=this.padding;a>d&&(a=d);0b&&(f=typeof a[0],"string"===f?e.name=a[0]:"number"===f&&(e.x=a[0]),k++);l=d.value;)d=h[++f];d&&d.color&&!this.options.color&&(this.color=d.color);return d},destroy:function(){var a=this.series.chart,h=a.hoverPoints,f;a.pointCount--;h&&(this.setState(),p(h,this),h.length||(a.hoverPoints=null));if(this===a.hoverPoint)this.onMouseOut();if(this.graphic||this.dataLabel)u(this),this.destroyElements();this.legendItem&&a.legend.destroyItem(this);for(f in this)this[f]=null},destroyElements:function(){for(var a=["graphic","dataLabel", -"dataLabelUpper","connector","shadowGroup"],h,f=6;f--;)h=a[f],this[h]&&(this[h]=this[h].destroy())},getLabelConfig:function(){return{x:this.category,y:this.y,color:this.color,colorIndex:this.colorIndex,key:this.name||this.category,series:this.series,point:this,percentage:this.percentage,total:this.total||this.stackTotal}},tooltipFormatter:function(a){var e=this.series,f=e.tooltipOptions,d=w(f.valueDecimals,""),c=f.valuePrefix||"",b=f.valueSuffix||"";D(e.pointArrayMap||["y"],function(e){e="{point."+ -e;if(c||b)a=a.replace(e+"}",c+e+"}"+b);a=a.replace(e+"}",e+":,."+d+"f}")});return l(a,{point:this,series:this.series})},firePointEvent:function(a,h,m){var d=this,c=this.series.options;(c.point.events[a]||d.options&&d.options.events&&d.options.events[a])&&this.importEvents();"click"===a&&c.allowPointSelect&&(m=function(a){d.select&&d.select(null,a.ctrlKey||a.metaKey||a.shiftKey)});f(this,a,h,m)},visible:!0}})(M);(function(a){var E=a.addEvent,D=a.animObject,H=a.arrayMax,p=a.arrayMin,f=a.correctFloat, -l=a.Date,r=a.defaultOptions,n=a.defaultPlotOptions,w=a.defined,u=a.each,e=a.erase,h=a.extend,m=a.fireEvent,d=a.grep,c=a.isArray,b=a.isNumber,k=a.isString,z=a.merge,B=a.objectEach,I=a.pick,x=a.removeEvent,K=a.splat,t=a.SVGElement,C=a.syncTimeout,N=a.win;a.Series=a.seriesType("line",null,{lineWidth:2,allowPointSelect:!1,showCheckbox:!1,animation:{duration:1E3},events:{},marker:{lineWidth:0,lineColor:"#ffffff",radius:4,states:{hover:{animation:{duration:50},enabled:!0,radiusPlus:2,lineWidthPlus:1},select:{fillColor:"#cccccc", -lineColor:"#000000",lineWidth:2}}},point:{events:{}},dataLabels:{align:"center",formatter:function(){return null===this.y?"":a.numberFormat(this.y,-1)},style:{fontSize:"11px",fontWeight:"bold",color:"contrast",textOutline:"1px contrast"},verticalAlign:"bottom",x:0,y:0,padding:5},cropThreshold:300,pointRange:0,softThreshold:!0,states:{hover:{animation:{duration:50},lineWidthPlus:1,marker:{},halo:{size:10,opacity:.25}},select:{marker:{}}},stickyTracking:!0,turboThreshold:1E3,findNearestPointBy:"x"}, -{isCartesian:!0,pointClass:a.Point,sorted:!0,requireSorting:!0,directTouch:!1,axisTypes:["xAxis","yAxis"],colorCounter:0,parallelArrays:["x","y"],coll:"series",init:function(a,b){var c=this,d,g=a.series,e;c.chart=a;c.options=b=c.setOptions(b);c.linkedSeries=[];c.bindAxes();h(c,{name:b.name,state:"",visible:!1!==b.visible,selected:!0===b.selected});d=b.events;B(d,function(a,b){E(c,b,a)});if(d&&d.click||b.point&&b.point.events&&b.point.events.click||b.allowPointSelect)a.runTrackerClick=!0;c.getColor(); -c.getSymbol();u(c.parallelArrays,function(a){c[a+"Data"]=[]});c.setData(b.data,!1);c.isCartesian&&(a.hasCartesianSeries=!0);g.length&&(e=g[g.length-1]);c._i=I(e&&e._i,-1)+1;a.orderSeries(this.insert(g))},insert:function(a){var c=this.options.index,d;if(b(c)){for(d=a.length;d--;)if(c>=I(a[d].options.index,a[d]._i)){a.splice(d+1,0,this);break}-1===d&&a.unshift(this);d+=1}else a.push(this);return I(d,a.length-1)},bindAxes:function(){var b=this,c=b.options,d=b.chart,e;u(b.axisTypes||[],function(g){u(d[g], -function(a){e=a.options;if(c[g]===e.index||void 0!==c[g]&&c[g]===e.id||void 0===c[g]&&0===e.index)b.insert(a.series),b[g]=a,a.isDirty=!0});b[g]||b.optionalAxis===g||a.error(18,!0)})},updateParallelArrays:function(a,c){var d=a.series,e=arguments,g=b(c)?function(b){var g="y"===b&&d.toYData?d.toYData(a):a[b];d[b+"Data"][c]=g}:function(a){Array.prototype[c].apply(d[a+"Data"],Array.prototype.slice.call(e,2))};u(d.parallelArrays,g)},autoIncrement:function(){var b=this.options,c=this.xIncrement,d,e=b.pointIntervalUnit, -g=0,c=I(c,b.pointStart,0);this.pointInterval=d=I(this.pointInterval,b.pointInterval,1);e&&(b=new l(c),"day"===e?b=+b[l.hcSetDate](b[l.hcGetDate]()+d):"month"===e?b=+b[l.hcSetMonth](b[l.hcGetMonth]()+d):"year"===e&&(b=+b[l.hcSetFullYear](b[l.hcGetFullYear]()+d)),l.hcHasTimeZone&&(g=a.getTZOffset(b)-a.getTZOffset(c)),d=b-c+g);this.xIncrement=c+d;return c},setOptions:function(a){var b=this.chart,c=b.options,d=c.plotOptions,g=(b.userOptions||{}).plotOptions||{},e=d[this.type];this.userOptions=a;b=z(e, -d.series,a);this.tooltipOptions=z(r.tooltip,r.plotOptions.series&&r.plotOptions.series.tooltip,r.plotOptions[this.type].tooltip,c.tooltip.userOptions,d.series&&d.series.tooltip,d[this.type].tooltip,a.tooltip);this.stickyTracking=I(a.stickyTracking,g[this.type]&&g[this.type].stickyTracking,g.series&&g.series.stickyTracking,this.tooltipOptions.shared&&!this.noSharedTooltip?!0:b.stickyTracking);null===e.marker&&delete b.marker;this.zoneAxis=b.zoneAxis;a=this.zones=(b.zones||[]).slice();!b.negativeColor&& -!b.negativeFillColor||b.zones||a.push({value:b[this.zoneAxis+"Threshold"]||b.threshold||0,className:"highcharts-negative",color:b.negativeColor,fillColor:b.negativeFillColor});a.length&&w(a[a.length-1].value)&&a.push({color:this.color,fillColor:this.fillColor});return b},getCyclic:function(a,b,c){var d,g=this.chart,e=this.userOptions,k=a+"Index",h=a+"Counter",q=c?c.length:I(g.options.chart[a+"Count"],g[a+"Count"]);b||(d=I(e[k],e["_"+k]),w(d)||(g.series.length||(g[h]=0),e["_"+k]=d=g[h]%q,g[h]+=1), -c&&(b=c[d]));void 0!==d&&(this[k]=d);this[a]=b},getColor:function(){this.options.colorByPoint?this.options.color=null:this.getCyclic("color",this.options.color||n[this.type].color,this.chart.options.colors)},getSymbol:function(){this.getCyclic("symbol",this.options.marker.symbol,this.chart.options.symbols)},drawLegendSymbol:a.LegendSymbolMixin.drawLineMarker,setData:function(d,e,h,f){var g=this,q=g.points,m=q&&q.length||0,l,A=g.options,t=g.chart,x=null,n=g.xAxis,p=A.turboThreshold,z=this.xData,F= -this.yData,C=(l=g.pointArrayMap)&&l.length;d=d||[];l=d.length;e=I(e,!0);if(!1!==f&&l&&m===l&&!g.cropped&&!g.hasGroupedData&&g.visible)u(d,function(a,b){q[b].update&&a!==A.data[b]&&q[b].update(a,!1,null,!1)});else{g.xIncrement=null;g.colorCounter=0;u(this.parallelArrays,function(a){g[a+"Data"].length=0});if(p&&l>p){for(h=0;null===x&&hf||this.forceCrop))if(c[e-1]z)c=[],d=[];else if(c[0]z)g=this.cropData(this.xData,this.yData,p,z),c=g.xData,d=g.yData,g=g.start,k=!0;for(f=c.length|| -1;--f;)e=x?m(c[f])-m(c[f-1]):c[f]-c[f-1],0e&&n&&(a.error(15),n=!1);this.cropped=k;this.cropStart=g;this.processedXData=c;this.processedYData=d;this.closestPointRange=h},cropData:function(a,b,c,d){var g=a.length,e=0,k=g,h=I(this.cropShoulder,1),f;for(f=0;f=c){e=Math.max(0,f-h);break}for(c=f;cd){k=c+h;break}return{xData:a.slice(e,k),yData:b.slice(e,k),start:e,end:k}},generatePoints:function(){var a=this.options,b=a.data,c=this.data,d,g=this.processedXData, -e=this.processedYData,k=this.pointClass,h=g.length,f=this.cropStart||0,m,l=this.hasGroupedData,a=a.keys,t,x=[],n;c||l||(c=[],c.length=b.length,c=this.data=c);a&&l&&(this.options.keys=!1);for(n=0;n=f&&(e[n-1]||l)<=q,m&&l)if(m=t.length)for(;m--;)"number"===typeof t[m]&&(g[h++]=t[m]);else g[h++]=t;this.dataMin= -p(g);this.dataMax=H(g)},translate:function(){this.processedXData||this.processData();this.generatePoints();var a=this.options,c=a.stacking,d=this.xAxis,e=d.categories,g=this.yAxis,k=this.points,h=k.length,m=!!this.modifyValue,l=a.pointPlacement,t="between"===l||b(l),n=a.threshold,x=a.startFromThreshold?n:0,p,z,C,r,u=Number.MAX_VALUE;"between"===l&&(l=.5);b(l)&&(l*=I(a.pointRange||d.pointRange));for(a=0;a=K&&(B.isNull=!0);B.plotX=p=f(Math.min(Math.max(-1E5,d.translate(N,0,0,0,1,l,"flags"===this.type)),1E5));c&&this.visible&&!B.isNull&&D&&D[N]&&(r=this.getStackIndicator(r,N,this.index),E=D[N],K=E.points[r.key],z=K[0],K=K[1],z===x&&r.key===D[N].base&&(z=I(n,g.min)),g.positiveValuesOnly&&0>=z&&(z=null),B.total=B.stackTotal=E.total,B.percentage=E.total&&B.y/E.total*100,B.stackY=K,E.setOffset(this.pointXOffset||0,this.barW||0));B.yBottom=w(z)?g.translate(z,0,1,0,1): -null;m&&(K=this.modifyValue(K,B));B.plotY=z="number"===typeof K&&Infinity!==K?Math.min(Math.max(-1E5,g.translate(K,0,1,0,1)),1E5):void 0;B.isInside=void 0!==z&&0<=z&&z<=g.len&&0<=p&&p<=d.len;B.clientX=t?f(d.translate(N,0,0,0,1,l)):p;B.negative=B.y<(n||0);B.category=e&&void 0!==e[B.x]?e[B.x]:B.x;B.isNull||(void 0!==C&&(u=Math.min(u,Math.abs(p-C))),C=p);B.zone=this.zones.length&&B.getZone()}this.closestPointRangePx=u},getValidPoints:function(a,b){var c=this.chart;return d(a||this.points||[],function(a){return b&& -!c.isInsidePlot(a.plotX,a.plotY,c.inverted)?!1:!a.isNull})},setClip:function(a){var b=this.chart,c=this.options,d=b.renderer,g=b.inverted,e=this.clipBox,k=e||b.clipBox,h=this.sharedClipKey||["_sharedClip",a&&a.duration,a&&a.easing,k.height,c.xAxis,c.yAxis].join(),f=b[h],q=b[h+"m"];f||(a&&(k.width=0,g&&(k.x=b.plotSizeX),b[h+"m"]=q=d.clipRect(g?b.plotSizeX+99:-99,g?-b.plotLeft:-b.plotTop,99,g?b.chartWidth:b.chartHeight)),b[h]=f=d.clipRect(k),f.count={length:0});a&&!f.count[this.index]&&(f.count[this.index]= -!0,f.count.length+=1);!1!==c.clip&&(this.group.clip(a||e?f:b.clipRect),this.markerGroup.clip(q),this.sharedClipKey=h);a||(f.count[this.index]&&(delete f.count[this.index],--f.count.length),0===f.count.length&&h&&b[h]&&(e||(b[h]=b[h].destroy()),b[h+"m"]&&(b[h+"m"]=b[h+"m"].destroy())))},animate:function(a){var b=this.chart,c=D(this.options.animation),d;a?this.setClip(c):(d=this.sharedClipKey,(a=b[d])&&a.animate({width:b.plotSizeX,x:0},c),b[d+"m"]&&b[d+"m"].animate({width:b.plotSizeX+99,x:0},c),this.animate= -null)},afterAnimate:function(){this.setClip();m(this,"afterAnimate");this.finishedAnimating=!0},drawPoints:function(){var a=this.points,b=this.chart,c,d,g,e,k=this.options.marker,h,f,l,m=this[this.specialGroup]||this.markerGroup,t,n=I(k.enabled,this.xAxis.isRadial?!0:null,this.closestPointRangePx>=2*k.radius);if(!1!==k.enabled||this._hasPointMarkers)for(c=0;ce&&b.shadow));k&&(k.startX=c.xMap,k.isArea=c.isArea)})}, -applyZones:function(){var a=this,b=this.chart,c=b.renderer,d=this.zones,e,k,h=this.clips||[],f,m=this.graph,l=this.area,t=Math.max(b.chartWidth,b.chartHeight),n=this[(this.zoneAxis||"y")+"Axis"],x,p,z=b.inverted,C,r,w,B,K=!1;d.length&&(m||l)&&n&&void 0!==n.min&&(p=n.reversed,C=n.horiz,m&&m.hide(),l&&l.hide(),x=n.getExtremes(),u(d,function(d,g){e=p?C?b.plotWidth:0:C?0:n.toPixels(x.min);e=Math.min(Math.max(I(k,e),0),t);k=Math.min(Math.max(Math.round(n.toPixels(I(d.value,x.max),!0)),0),t);K&&(e=k=n.toPixels(x.max)); -r=Math.abs(e-k);w=Math.min(e,k);B=Math.max(e,k);n.isXAxis?(f={x:z?B:w,y:0,width:r,height:t},C||(f.x=b.plotHeight-f.x)):(f={x:0,y:z?B:w,width:t,height:r},C&&(f.y=b.plotWidth-f.y));z&&c.isVML&&(f=n.isXAxis?{x:0,y:p?w:B,height:f.width,width:b.chartWidth}:{x:f.y-b.plotLeft-b.spacingBox.x,y:0,width:f.height,height:b.chartHeight});h[g]?h[g].animate(f):(h[g]=c.clipRect(f),m&&a["zone-graph-"+g].clip(h[g]),l&&a["zone-area-"+g].clip(h[g]));K=d.value>x.max}),this.clips=h)},invertGroups:function(a){function b(){u(["group", -"markerGroup"],function(b){c[b]&&(d.renderer.isVML&&c[b].attr({width:c.yAxis.len,height:c.xAxis.len}),c[b].width=c.yAxis.len,c[b].height=c.xAxis.len,c[b].invert(a))})}var c=this,d=c.chart,e;c.xAxis&&(e=E(d,"resize",b),E(c,"destroy",e),b(a),c.invertGroups=b)},plotGroup:function(a,b,c,d,e){var g=this[a],k=!g;k&&(this[a]=g=this.chart.renderer.g().attr({zIndex:d||.1}).add(e));g.addClass("highcharts-"+b+" highcharts-series-"+this.index+" highcharts-"+this.type+"-series "+(w(this.colorIndex)?"highcharts-color-"+ -this.colorIndex+" ":"")+(this.options.className||"")+(g.hasClass("highcharts-tracker")?" highcharts-tracker":""),!0);g.attr({visibility:c})[k?"attr":"animate"](this.getPlotBox());return g},getPlotBox:function(){var a=this.chart,b=this.xAxis,c=this.yAxis;a.inverted&&(b=c,c=this.xAxis);return{translateX:b?b.left:a.plotLeft,translateY:c?c.top:a.plotTop,scaleX:1,scaleY:1}},render:function(){var a=this,b=a.chart,c,d=a.options,e=!!a.animate&&b.renderer.isSVG&&D(d.animation).duration,k=a.visible?"inherit": -"hidden",h=d.zIndex,f=a.hasRendered,m=b.seriesGroup,l=b.inverted;c=a.plotGroup("group","series",k,h,m);a.markerGroup=a.plotGroup("markerGroup","markers",k,h,m);e&&a.animate(!0);c.inverted=a.isCartesian?l:!1;a.drawGraph&&(a.drawGraph(),a.applyZones());a.drawDataLabels&&a.drawDataLabels();a.visible&&a.drawPoints();a.drawTracker&&!1!==a.options.enableMouseTracking&&a.drawTracker();a.invertGroups(l);!1===d.clip||a.sharedClipKey||f||c.clip(b.clipRect);e&&a.animate();f||(a.animationTimeout=C(function(){a.afterAnimate()}, -e));a.isDirty=!1;a.hasRendered=!0},redraw:function(){var a=this.chart,b=this.isDirty||this.isDirtyData,c=this.group,d=this.xAxis,e=this.yAxis;c&&(a.inverted&&c.attr({width:a.plotWidth,height:a.plotHeight}),c.animate({translateX:I(d&&d.left,a.plotLeft),translateY:I(e&&e.top,a.plotTop)}));this.translate();this.render();b&&delete this.kdTree},kdAxisArray:["clientX","plotY"],searchPoint:function(a,b){var c=this.xAxis,d=this.yAxis,e=this.chart.inverted;return this.searchKDTree({clientX:e?c.len-a.chartY+ -c.pos:a.chartX-c.pos,plotY:e?d.len-a.chartX+d.pos:a.chartY-d.pos},b)},buildKDTree:function(){function a(c,d,e){var g,k;if(k=c&&c.length)return g=b.kdAxisArray[d%e],c.sort(function(a,b){return a[g]-b[g]}),k=Math.floor(k/2),{point:c[k],left:a(c.slice(0,k),d+1,e),right:a(c.slice(k+1),d+1,e)}}this.buildingKdTree=!0;var b=this,c=-1l?"left":"right";t=0>l?"right":"left";b[q]&&(q=c(a,b[q],g+1,f),n=q[h]x;)q--;this.updateParallelArrays(m,"splice",q,0,0);this.updateParallelArrays(m,q);g&&m.name&&(g[x]=m.name);l.splice(q,0,a);n&&(this.data.splice(q,0,null),this.processData());"point"===e.legendType&&this.generatePoints();c&&(h[0]&&h[0].remove?h[0].remove(!1):(h.shift(),this.updateParallelArrays(m,"shift"),l.shift()));this.isDirtyData=this.isDirty=!0;b&&f.redraw(d)},removePoint:function(a,b,c){var d=this,e=d.data,h=e[a],f=d.points,g=d.chart,l=function(){f&&f.length===e.length&& -f.splice(a,1);e.splice(a,1);d.options.data.splice(a,1);d.updateParallelArrays(h||{series:d},"splice",a,1);h&&h.destroy();d.isDirty=!0;d.isDirtyData=!0;b&&g.redraw()};x(c,g);b=k(b,!0);h?h.firePointEvent("remove",null,l):l()},remove:function(a,b,c){function d(){e.destroy();h.isDirtyLegend=h.isDirtyBox=!0;h.linkSeries();k(a,!0)&&h.redraw(b)}var e=this,h=e.chart;!1!==c?u(e,"remove",null,d):d()},update:function(a,b){var d=this,e=d.chart,h=d.userOptions,f=d.oldType||d.type,l=a.type||h.type||e.options.chart.type, -g=I[f].prototype,m,n=["group","markerGroup","dataLabelsGroup"],t=["navigatorSeries","baseSeries"],x=d.finishedAnimating&&{animation:!1};if(Object.keys&&"data"===Object.keys(a).toString())return this.setData(a.data,b);t=n.concat(t);r(t,function(a){t[a]=d[a];delete d[a]});a=c(h,x,{index:d.index,pointStart:d.xData[0]},{data:d.options.data},a);d.remove(!1,null,!1);for(m in g)d[m]=void 0;w(d,I[l||f].prototype);r(t,function(a){d[a]=t[a]});d.init(e,a);a.zIndex!==h.zIndex&&r(n,function(b){d[b]&&d[b].attr({zIndex:a.zIndex})}); -d.oldType=f;e.linkSeries();k(b,!0)&&e.redraw(!1)}});w(H.prototype,{update:function(a,b){var d=this.chart;a=d.options[this.coll][this.options.index]=c(this.userOptions,a);this.destroy(!0);this.init(d,w(a,{events:void 0}));d.isDirtyBox=!0;k(b,!0)&&d.redraw()},remove:function(a){for(var b=this.chart,c=this.coll,e=this.series,h=e.length;h--;)e[h]&&e[h].remove(!1);n(b.axes,this);n(b[c],this);d(b.options[c])?b.options[c].splice(this.options.index,1):delete b.options[c];r(b[c],function(a,b){a.options.index= -b});this.destroy();b.isDirtyBox=!0;k(a,!0)&&b.redraw()},setTitle:function(a,b){this.update({title:a},b)},setCategories:function(a,b){this.update({categories:a},b)}})})(M);(function(a){var E=a.color,D=a.each,H=a.map,p=a.pick,f=a.Series,l=a.seriesType;l("area","line",{softThreshold:!1,threshold:0},{singleStacks:!1,getStackPoints:function(f){var l=[],r=[],u=this.xAxis,e=this.yAxis,h=e.stacks[this.stackKey],m={},d=this.index,c=e.series,b=c.length,k,z=p(e.options.reversedStacks,!0)?1:-1,B;f=f||this.points; -if(this.options.stacking){for(B=0;Ba&&w>l?(w=Math.max(a,l),e=2*l-w):wp&&e>l?(e=Math.max(p,l),w=2*l-e):e=Math.abs(h)&&.5a.closestPointRange*a.xAxis.transA,d=a.borderWidth=r(f.borderWidth,d?0:1),c=a.yAxis,b=f.threshold,k=a.translatedThreshold=c.getThreshold(b),l=r(f.minPointLength,5),p=a.getColumnMetrics(),u=p.width,x=a.barW=Math.max(u,1+2*d),w=a.pointXOffset=p.offset;h.inverted&&(k-=.5);f.pointPadding&&(x=Math.ceil(x));n.prototype.translate.apply(a);H(a.points,function(d){var e=r(d.yBottom,k),f=999+Math.abs(e),f=Math.min(Math.max(-f,d.plotY),c.len+f),m=d.plotX+w,n=x,t=Math.min(f,e),p,g=Math.max(f,e)-t;l&& -Math.abs(g)l?e-l:k-(p?l:0));d.barX=m;d.pointWidth=u;d.tooltipPos=h.inverted?[c.len+c.pos-h.plotLeft-f,a.xAxis.len-m-n/2,g]:[m+n/2,f+c.pos-h.plotTop,g];d.shapeType="rect";d.shapeArgs=a.crispCol.apply(a,d.isNull?[m,k,n,0]:[m,t,n,g])})},getSymbol:a.noop,drawLegendSymbol:a.LegendSymbolMixin.drawRectangle,drawGraph:function(){this.group[this.dense?"addClass":"removeClass"]("highcharts-dense-data")}, -pointAttribs:function(a,f){var e=this.options,d,c=this.pointAttrToOptions||{};d=c.stroke||"borderColor";var b=c["stroke-width"]||"borderWidth",k=a&&a.color||this.color,h=a&&a[d]||e[d]||this.color||k,n=a&&a[b]||e[b]||this[b]||0,c=e.dashStyle;a&&this.zones.length&&(k=a.getZone(),k=a.options.color||k&&k.color||this.color);f&&(a=l(e.states[f],a.options.states&&a.options.states[f]||{}),f=a.brightness,k=a.color||void 0!==f&&D(k).brighten(a.brightness).get()||k,h=a[d]||h,n=a[b]||n,c=a.dashStyle||c);d={fill:k, -stroke:h,"stroke-width":n};c&&(d.dashstyle=c);return d},drawPoints:function(){var a=this,h=this.chart,m=a.options,d=h.renderer,c=m.animationLimit||250,b;H(a.points,function(e){var k=e.graphic;if(f(e.plotY)&&null!==e.y){b=e.shapeArgs;if(k)k[h.pointCounte;++e)h=w[e],a=2>e||2===e&&/%$/.test(h),w[e]=p(h,[n,l,u,w[2]][e])+(a?r:0);w[3]>w[2]&&(w[3]=w[2]);return w},getStartAndEndRadians:function(a,l){a=D(a)?a:0;l=D(l)&&l>a&&360>l-a?l:a+360;return{start:E*(a+-90),end:E*(l+-90)}}}})(M);(function(a){var E=a.addEvent,D=a.CenteredSeriesMixin,H=a.defined,p=a.each,f=a.extend,l=D.getStartAndEndRadians,r=a.inArray,n=a.noop,w=a.pick,u=a.Point,e=a.Series,h=a.seriesType,m=a.setAnimation;h("pie","line",{center:[null,null],clip:!1,colorByPoint:!0,dataLabels:{distance:30, -enabled:!0,formatter:function(){return this.point.isNull?void 0:this.point.name},x:0},ignoreHiddenPoint:!0,legendType:"point",marker:null,size:null,showInLegend:!1,slicedOffset:10,stickyTracking:!1,tooltip:{followPointer:!0},borderColor:"#ffffff",borderWidth:1,states:{hover:{brightness:.1,shadow:!1}}},{isCartesian:!1,requireSorting:!1,directTouch:!0,noSharedTooltip:!0,trackerGroups:["group","dataLabelsGroup"],axisTypes:[],pointAttribs:a.seriesTypes.column.prototype.pointAttribs,animate:function(a){var c= -this,b=c.points,d=c.startAngleRad;a||(p(b,function(a){var b=a.graphic,e=a.shapeArgs;b&&(b.attr({r:a.startR||c.center[3]/2,start:d,end:d}),b.animate({r:e.r,start:e.start,end:e.end},c.options.animation))}),c.animate=null)},updateTotals:function(){var a,c=0,b=this.points,e=b.length,f,h=this.options.ignoreHiddenPoint;for(a=0;a1.5*Math.PI?m-=2*Math.PI:m<-Math.PI/2&&(m+=2*Math.PI);G.slicedTranslation={translateX:Math.round(Math.cos(m)*d),translateY:Math.round(Math.sin(m)*d)};h=Math.cos(m)*a[2]/ -2;u=Math.sin(m)*a[2]/2;G.tooltipPos=[a[0]+.7*h,a[1]+.7*u];G.half=m<-Math.PI/2||m>Math.PI/2?1:0;G.angle=m;f=Math.min(e,G.labelDistance/5);G.labelPos=[a[0]+h+Math.cos(m)*G.labelDistance,a[1]+u+Math.sin(m)*G.labelDistance,a[0]+h+Math.cos(m)*f,a[1]+u+Math.sin(m)*f,a[0]+h,a[1]+u,0>G.labelDistance?"center":G.half?"right":"left",m]}},drawGraph:null,drawPoints:function(){var a=this,c=a.chart.renderer,b,e,h,l,m=a.options.shadow;m&&!a.shadowGroup&&(a.shadowGroup=c.g("shadow").add(a.group));p(a.points,function(d){e= -d.graphic;if(d.isNull)e&&(d.graphic=e.destroy());else{l=d.shapeArgs;b=d.getTranslate();var k=d.shadowGroup;m&&!k&&(k=d.shadowGroup=c.g("shadow").add(a.shadowGroup));k&&k.attr(b);h=a.pointAttribs(d,d.selected&&"select");e?e.setRadialReference(a.center).attr(h).animate(f(l,b)):(d.graphic=e=c[d.shapeType](l).setRadialReference(a.center).attr(b).add(a.group),d.visible||e.attr({visibility:"hidden"}),e.attr(h).attr({"stroke-linejoin":"round"}).shadow(m,k));e.addClass(d.getClassName())}})},searchPoint:n, -sortByAngle:function(a,c){a.sort(function(a,d){return void 0!==a.angle&&(d.angle-a.angle)*c})},drawLegendSymbol:a.LegendSymbolMixin.drawRectangle,getCenter:D.getCenter,getSymbol:n},{init:function(){u.prototype.init.apply(this,arguments);var a=this,c;a.name=w(a.name,"Slice");c=function(b){a.slice("select"===b.type)};E(a,"select",c);E(a,"unselect",c);return a},isValid:function(){return a.isNumber(this.y,!0)&&0<=this.y},setVisible:function(a,c){var b=this,d=b.series,e=d.chart,f=d.options.ignoreHiddenPoint; -c=w(c,f);a!==b.visible&&(b.visible=b.options.visible=a=void 0===a?!b.visible:a,d.options.data[r(b,d.data)]=b.options,p(["graphic","dataLabel","connector","shadowGroup"],function(c){if(b[c])b[c][a?"show":"hide"](!0)}),b.legendItem&&e.legend.colorizeItem(b,a),a||"hover"!==b.state||b.setState(""),f&&(d.isDirty=!0),c&&e.redraw())},slice:function(a,c,b){var d=this.series;m(b,d.chart);w(c,!0);this.sliced=this.options.sliced=H(a)?a:!this.sliced;d.options.data[r(this,d.data)]=this.options;this.graphic.animate(this.getTranslate()); -this.shadowGroup&&this.shadowGroup.animate(this.getTranslate())},getTranslate:function(){return this.sliced?this.slicedTranslation:{translateX:0,translateY:0}},haloPath:function(a){var c=this.shapeArgs;return this.sliced||!this.visible?[]:this.series.chart.renderer.symbols.arc(c.x,c.y,c.r+a,c.r+a,{innerR:this.shapeArgs.r-1,start:c.start,end:c.end})}})})(M);(function(a){var E=a.addEvent,D=a.arrayMax,H=a.defined,p=a.each,f=a.extend,l=a.format,r=a.map,n=a.merge,w=a.noop,u=a.pick,e=a.relativeLength,h= -a.Series,m=a.seriesTypes,d=a.stableSort;a.distribute=function(a,b){function c(a,b){return a.target-b.target}var e,f=!0,h=a,l=[],m;m=0;for(e=a.length;e--;)m+=a[e].size;if(m>b){d(a,function(a,b){return(b.rank||0)-(a.rank||0)});for(m=e=0;m<=b;)m+=a[e].size,e++;l=a.splice(e-1,a.length)}d(a,c);for(a=r(a,function(a){return{size:a.size,targets:[a.target],align:u(a.align,.5)}});f;){for(e=a.length;e--;)f=a[e],m=(Math.min.apply(0,f.targets)+Math.max.apply(0,f.targets))/2,f.pos=Math.min(Math.max(0,m-f.size* -f.align),b-f.size);e=a.length;for(f=!1;e--;)0a[e].pos&&(a[e-1].size+=a[e].size,a[e-1].targets=a[e-1].targets.concat(a[e].targets),a[e-1].align=.5,a[e-1].pos+a[e-1].size>b&&(a[e-1].pos=b-a[e-1].size),a.splice(e,1),f=!0)}e=0;p(a,function(a){var b=0;p(a.targets,function(){h[e].pos=a.pos+b;b+=h[e].size;e++})});h.push.apply(h,l);d(h,c)};h.prototype.drawDataLabels=function(){function c(a,b){var c=b.filter;return c?(b=c.operator,a=a[c.property],c=c.value,"\x3e"===b&&a>c||"\x3c"=== -b&&a=c||"\x3c\x3d"===b&&a<=c||"\x3d\x3d"===b&&a==c||"\x3d\x3d\x3d"===b&&a===c?!0:!1):!0}var b=this,d=b.options,e=d.dataLabels,f=b.points,h,m,r=b.hasRendered||0,t,w,D=u(e.defer,!!d.animation),q=b.chart.renderer;if(e.enabled||b._hasPointLabels)b.dlProcessOptions&&b.dlProcessOptions(e),w=b.plotGroup("dataLabelsGroup","data-labels",D&&!r?"hidden":"visible",e.zIndex||6),D&&(w.attr({opacity:+r}),r||E(b,"afterAnimate",function(){b.visible&&w.show(!0);w[d.animation?"animate":"attr"]({opacity:1}, -{duration:200})})),m=e,p(f,function(f){var k,p=f.dataLabel,g,x,r=f.connector,z=!p,C;h=f.dlOptions||f.options&&f.options.dataLabels;(k=u(h&&h.enabled,m.enabled)&&!f.isNull)&&(k=!0===c(f,h||e));k&&(e=n(m,h),g=f.getLabelConfig(),C=e[f.formatPrefix+"Format"]||e.format,t=H(C)?l(C,g):(e[f.formatPrefix+"Formatter"]||e.formatter).call(g,e),C=e.style,g=e.rotation,C.color=u(e.color,C.color,b.color,"#000000"),"contrast"===C.color&&(f.contrastColor=q.getContrast(f.color||b.color),C.color=e.inside||0>u(f.labelDistance, -e.distance)||d.stacking?f.contrastColor:"#000000"),d.cursor&&(C.cursor=d.cursor),x={fill:e.backgroundColor,stroke:e.borderColor,"stroke-width":e.borderWidth,r:e.borderRadius||0,rotation:g,padding:e.padding,zIndex:1},a.objectEach(x,function(a,b){void 0===a&&delete x[b]}));!p||k&&H(t)?k&&H(t)&&(p?x.text=t:(p=f.dataLabel=g?q.text(t,0,-9999).addClass("highcharts-data-label"):q.label(t,0,-9999,e.shape,null,null,e.useHTML,null,"data-label"),p.addClass(" highcharts-data-label-color-"+f.colorIndex+" "+(e.className|| -"")+(e.useHTML?"highcharts-tracker":""))),p.attr(x),p.css(C).shadow(e.shadow),p.added||p.add(w),b.alignDataLabel(f,p,e,null,z)):(f.dataLabel=p=p.destroy(),r&&(f.connector=r.destroy()))})};h.prototype.alignDataLabel=function(a,b,d,e,h){var c=this.chart,k=c.inverted,l=u(a.dlBox&&a.dlBox.centerX,a.plotX,-9999),m=u(a.plotY,-9999),n=b.getBBox(),p,q=d.rotation,r=d.align,w=this.visible&&(a.series.forceDL||c.isInsidePlot(l,Math.round(m),k)||e&&c.isInsidePlot(l,k?e.x+1:e.y+e.height-1,k)),z="justify"===u(d.overflow, -"justify");if(w&&(p=d.style.fontSize,p=c.renderer.fontMetrics(p,b).b,e=f({x:k?this.yAxis.len-m:l,y:Math.round(k?this.xAxis.len-l:m),width:0,height:0},e),f(d,{width:n.width,height:n.height}),q?(z=!1,l=c.renderer.rotCorr(p,q),l={x:e.x+d.x+e.width/2+l.x,y:e.y+d.y+{top:0,middle:.5,bottom:1}[d.verticalAlign]*e.height},b[h?"attr":"animate"](l).attr({align:r}),m=(q+720)%360,m=180m,"left"===r?l.y-=m?n.height:0:"center"===r?(l.x-=n.width/2,l.y-=n.height/2):"right"===r&&(l.x-=n.width,l.y-=m?0:n.height)): -(b.align(d,null,e),l=b.alignAttr),z?a.isLabelJustified=this.justifyDataLabel(b,d,l,n,e,h):u(d.crop,!0)&&(w=c.isInsidePlot(l.x,l.y)&&c.isInsidePlot(l.x+n.width,l.y+n.height)),d.shape&&!q))b[h?"attr":"animate"]({anchorX:k?c.plotWidth-a.plotY:a.plotX,anchorY:k?c.plotHeight-a.plotX:a.plotY});w||(b.attr({y:-9999}),b.placed=!1)};h.prototype.justifyDataLabel=function(a,b,d,e,f,h){var c=this.chart,k=b.align,l=b.verticalAlign,m,n,p=a.box?0:a.padding||0;m=d.x+p;0>m&&("right"===k?b.align="left":b.x=-m,n=!0); -m=d.x+e.width-p;m>c.plotWidth&&("left"===k?b.align="right":b.x=c.plotWidth-m,n=!0);m=d.y+p;0>m&&("bottom"===l?b.verticalAlign="top":b.y=-m,n=!0);m=d.y+e.height-p;m>c.plotHeight&&("top"===l?b.verticalAlign="bottom":b.y=c.plotHeight-m,n=!0);n&&(a.placed=!h,a.align(b,null,f));return n};m.pie&&(m.pie.prototype.drawDataLabels=function(){var c=this,b=c.data,d,e=c.chart,f=c.options.dataLabels,l=u(f.connectorPadding,10),m=u(f.connectorWidth,1),n=e.plotWidth,t=e.plotHeight,r,w=c.center,q=w[2]/2,A=w[1],F,G, -g,v,E=[[],[]],L,P,J,M,y=[0,0,0,0];c.visible&&(f.enabled||c._hasPointLabels)&&(p(b,function(a){a.dataLabel&&a.visible&&a.dataLabel.shortened&&(a.dataLabel.attr({width:"auto"}).css({width:"auto",textOverflow:"clip"}),a.dataLabel.shortened=!1)}),h.prototype.drawDataLabels.apply(c),p(b,function(a){a.dataLabel&&a.visible&&(E[a.half].push(a),a.dataLabel._pos=null)}),p(E,function(b,h){var k,m,x=b.length,r=[],z;if(x)for(c.sortByAngle(b,h-.5),0d.bottom-2?k:P,h,d),F._attr={visibility:J,align:g[6]},F._pos={x:L+f.x+({left:l,right:-l}[g[6]]||0),y:P+f.y-10},g.x=L,g.y=P,u(f.crop,!0)&&(G=F.getBBox().width,k=null,L-Gn-l&&(k=Math.round(L+G-n+l),y[1]=Math.max(k,y[1])),0>P-v/2?y[0]=Math.max(Math.round(-P+v/2),y[0]):P+v/2>t&&(y[2]=Math.max(Math.round(P+v/2-t),y[2])),F.sideOverflow=k)}),0===D(y)||this.verifyDataLabelOverflow(y))&&(this.placeDataLabels(), -m&&p(this.points,function(a){var b;r=a.connector;if((F=a.dataLabel)&&F._pos&&a.visible&&0u(this.translatedThreshold,k.yAxis.len)),p=u(d.inside,!!this.options.stacking);l&&(e=n(l),0>e.y&&(e.height+=e.y,e.y=0),l=e.y+e.height-k.yAxis.len,0a+c||e+hb+d||f+lthis.pointCount))},pan:function(a,b){var c=this,d=c.hoverPoints,e;d&&r(d,function(a){a.setState()});r("xy"===b?[1,0]:[1],function(b){b= -c[b?"xAxis":"yAxis"][0];var d=b.horiz,f=a[d?"chartX":"chartY"],d=d?"mouseDownX":"mouseDownY",h=c[d],g=(b.pointRange||0)/2,k=b.getExtremes(),l=b.toValue(h-f,!0)+g,m=b.toValue(h+b.len-f,!0)-g,n=m=l(n.minWidth,0)&&this.chartHeight>=l(n.minHeight,0)}).call(this)&&f.push(a._id)};E.prototype.currentOptions=function(l){function n(e,h,l,d){var c;a.objectEach(e,function(a,e){if(!d&&-1 parseInt(D.split('Firefox/')[1], 10); + return a.Highcharts + ? a.Highcharts.error(16, !0) + : { + product: 'Highcharts', + version: '6.0.4', + deg2rad: (2 * Math.PI) / 360, + doc: E, + hasBidiBug: l, + hasTouch: E && void 0 !== E.documentElement.ontouchstart, + isMS: p, + isWebKit: /AppleWebKit/.test(D), + isFirefox: f, + isTouchDevice: /(Mobile|Android|Windows Phone)/.test(D), + SVG_NS: 'http://www.w3.org/2000/svg', + chartCount: 0, + seriesTypes: {}, + symbolSizes: {}, + svg: H, + win: a, + marginNames: ['plotTop', 'marginRight', 'marginBottom', 'plotLeft'], + noop: function() {}, + charts: [], + }; + })(); + (function(a) { + a.timers = []; + var E = a.charts, + D = a.doc, + H = a.win; + a.error = function(p, f) { + p = a.isNumber(p) + ? 'Highcharts error #' + p + ': www.highcharts.com/errors/' + p + : p; + if (f) throw Error(p); + H.console && console.log(p); + }; + a.Fx = function(a, f, l) { + this.options = f; + this.elem = a; + this.prop = l; + }; + a.Fx.prototype = { + dSetter: function() { + var a = this.paths[0], + f = this.paths[1], + l = [], + r = this.now, + n = a.length, + w; + if (1 === r) l = this.toD; + else if (n === f.length && 1 > r) + for (; n--; ) + (w = parseFloat(a[n])), + (l[n] = isNaN(w) ? f[n] : r * parseFloat(f[n] - w) + w); + else l = f; + this.elem.attr('d', l, null, !0); + }, + update: function() { + var a = this.elem, + f = this.prop, + l = this.now, + r = this.options.step; + if (this[f + 'Setter']) this[f + 'Setter'](); + else + a.attr + ? a.element && a.attr(f, l, null, !0) + : (a.style[f] = l + this.unit); + r && r.call(a, l, this); + }, + run: function(p, f, l) { + var r = this, + n = r.options, + w = function(a) { + return w.stopped ? !1 : r.step(a); + }, + u = + H.requestAnimationFrame || + function(a) { + setTimeout(a, 13); + }, + e = function() { + for (var h = 0; h < a.timers.length; h++) + a.timers[h]() || a.timers.splice(h--, 1); + a.timers.length && u(e); + }; + p === f + ? (delete n.curAnim[this.prop], + n.complete && + 0 === a.keys(n.curAnim).length && + n.complete.call(this.elem)) + : ((this.startTime = +new Date()), + (this.start = p), + (this.end = f), + (this.unit = l), + (this.now = this.start), + (this.pos = 0), + (w.elem = this.elem), + (w.prop = this.prop), + w() && 1 === a.timers.push(w) && u(e)); + }, + step: function(p) { + var f = +new Date(), + l, + r = this.options, + n = this.elem, + w = r.complete, + u = r.duration, + e = r.curAnim; + n.attr && !n.element + ? (p = !1) + : p || f >= u + this.startTime + ? ((this.now = this.end), + (this.pos = 1), + this.update(), + (l = e[this.prop] = !0), + a.objectEach(e, function(a) { + !0 !== a && (l = !1); + }), + l && w && w.call(n), + (p = !1)) + : ((this.pos = r.easing((f - this.startTime) / u)), + (this.now = this.start + (this.end - this.start) * this.pos), + this.update(), + (p = !0)); + return p; + }, + initPath: function(p, f, l) { + function r(a) { + var b, c; + for (k = a.length; k--; ) + (b = 'M' === a[k] || 'L' === a[k]), + (c = /[a-zA-Z]/.test(a[k + 3])), + b && + c && + a.splice(k + 1, 0, a[k + 1], a[k + 2], a[k + 1], a[k + 2]); + } + function n(a, b) { + for (; a.length < c; ) { + a[0] = b[c - a.length]; + var e = a.slice(0, d); + [].splice.apply(a, [0, 0].concat(e)); + z && + ((e = a.slice(a.length - d)), + [].splice.apply(a, [a.length, 0].concat(e)), + k--); + } + a[0] = 'M'; + } + function w(a, k) { + for (var e = (c - a.length) / d; 0 < e && e--; ) + (b = a.slice().splice(a.length / B - d, d * B)), + (b[0] = k[c - d - e * d]), + m && ((b[d - 6] = b[d - 2]), (b[d - 5] = b[d - 1])), + [].splice.apply(a, [a.length / B, 0].concat(b)), + z && e--; + } + f = f || ''; + var u, + e = p.startX, + h = p.endX, + m = -1 < f.indexOf('C'), + d = m ? 7 : 3, + c, + b, + k; + f = f.split(' '); + l = l.slice(); + var z = p.isArea, + B = z ? 2 : 1, + I; + m && (r(f), r(l)); + if (e && h) { + for (k = 0; k < e.length; k++) + if (e[k] === h[0]) { + u = k; + break; + } else if (e[0] === h[h.length - e.length + k]) { + u = k; + I = !0; + break; + } + void 0 === u && (f = []); + } + f.length && + a.isNumber(u) && + ((c = l.length + u * B * d), + I ? (n(f, l), w(l, f)) : (n(l, f), w(f, l))); + return [f, l]; + }, + }; + a.Fx.prototype.fillSetter = a.Fx.prototype.strokeSetter = function() { + this.elem.attr( + this.prop, + a.color(this.start).tweenTo(a.color(this.end), this.pos), + null, + !0, + ); + }; + a.extend = function(a, f) { + var l; + a || (a = {}); + for (l in f) a[l] = f[l]; + return a; + }; + a.merge = function() { + var p, + f = arguments, + l, + r = {}, + n = function(l, p) { + 'object' !== typeof l && (l = {}); + a.objectEach(p, function(e, h) { + !a.isObject(e, !0) || a.isClass(e) || a.isDOMElement(e) + ? (l[h] = p[h]) + : (l[h] = n(l[h] || {}, e)); + }); + return l; + }; + !0 === f[0] && ((r = f[1]), (f = Array.prototype.slice.call(f, 2))); + l = f.length; + for (p = 0; p < l; p++) r = n(r, f[p]); + return r; + }; + a.pInt = function(a, f) { + return parseInt(a, f || 10); + }; + a.isString = function(a) { + return 'string' === typeof a; + }; + a.isArray = function(a) { + a = Object.prototype.toString.call(a); + return '[object Array]' === a || '[object Array Iterator]' === a; + }; + a.isObject = function(p, f) { + return !!p && 'object' === typeof p && (!f || !a.isArray(p)); + }; + a.isDOMElement = function(p) { + return a.isObject(p) && 'number' === typeof p.nodeType; + }; + a.isClass = function(p) { + var f = p && p.constructor; + return !( + !a.isObject(p, !0) || + a.isDOMElement(p) || + !f || + !f.name || + 'Object' === f.name + ); + }; + a.isNumber = function(a) { + return ( + 'number' === typeof a && !isNaN(a) && Infinity > a && -Infinity < a + ); + }; + a.erase = function(a, f) { + for (var l = a.length; l--; ) + if (a[l] === f) { + a.splice(l, 1); + break; + } + }; + a.defined = function(a) { + return void 0 !== a && null !== a; + }; + a.attr = function(p, f, l) { + var r; + a.isString(f) + ? a.defined(l) + ? p.setAttribute(f, l) + : p && p.getAttribute && (r = p.getAttribute(f)) + : a.defined(f) && + a.isObject(f) && + a.objectEach(f, function(a, l) { + p.setAttribute(l, a); + }); + return r; + }; + a.splat = function(p) { + return a.isArray(p) ? p : [p]; + }; + a.syncTimeout = function(a, f, l) { + if (f) return setTimeout(a, f, l); + a.call(0, l); + }; + a.pick = function() { + var a = arguments, + f, + l, + r = a.length; + for (f = 0; f < r; f++) + if (((l = a[f]), void 0 !== l && null !== l)) return l; + }; + a.css = function(p, f) { + a.isMS && + !a.svg && + f && + void 0 !== f.opacity && + (f.filter = 'alpha(opacity\x3d' + 100 * f.opacity + ')'); + a.extend(p.style, f); + }; + a.createElement = function(p, f, l, r, n) { + p = D.createElement(p); + var w = a.css; + f && a.extend(p, f); + n && w(p, { padding: 0, border: 'none', margin: 0 }); + l && w(p, l); + r && r.appendChild(p); + return p; + }; + a.extendClass = function(p, f) { + var l = function() {}; + l.prototype = new p(); + a.extend(l.prototype, f); + return l; + }; + a.pad = function(a, f, l) { + return Array((f || 2) + 1 - String(a).length).join(l || 0) + a; + }; + a.relativeLength = function(a, f, l) { + return /%$/.test(a) + ? (f * parseFloat(a)) / 100 + (l || 0) + : parseFloat(a); + }; + a.wrap = function(a, f, l) { + var p = a[f]; + a[f] = function() { + var a = Array.prototype.slice.call(arguments), + f = arguments, + u = this; + u.proceed = function() { + p.apply(u, arguments.length ? arguments : f); + }; + a.unshift(p); + a = l.apply(this, a); + u.proceed = null; + return a; + }; + }; + a.getTZOffset = function(p) { + var f = a.Date; + return ( + 6e4 * + ((f.hcGetTimezoneOffset && f.hcGetTimezoneOffset(p)) || + f.hcTimezoneOffset || + 0) + ); + }; + a.dateFormat = function(p, f, l) { + if (!a.defined(f) || isNaN(f)) + return a.defaultOptions.lang.invalidDate || ''; + p = a.pick(p, '%Y-%m-%d %H:%M:%S'); + var r = a.Date, + n = new r(f - a.getTZOffset(f)), + w = n[r.hcGetHours](), + u = n[r.hcGetDay](), + e = n[r.hcGetDate](), + h = n[r.hcGetMonth](), + m = n[r.hcGetFullYear](), + d = a.defaultOptions.lang, + c = d.weekdays, + b = d.shortWeekdays, + k = a.pad, + r = a.extend( + { + a: b ? b[u] : c[u].substr(0, 3), + A: c[u], + d: k(e), + e: k(e, 2, ' '), + w: u, + b: d.shortMonths[h], + B: d.months[h], + m: k(h + 1), + y: m.toString().substr(2, 2), + Y: m, + H: k(w), + k: w, + I: k(w % 12 || 12), + l: w % 12 || 12, + M: k(n[r.hcGetMinutes]()), + p: 12 > w ? 'AM' : 'PM', + P: 12 > w ? 'am' : 'pm', + S: k(n.getSeconds()), + L: k(Math.round(f % 1e3), 3), + }, + a.dateFormats, + ); + a.objectEach(r, function(a, b) { + for (; -1 !== p.indexOf('%' + b); ) + p = p.replace('%' + b, 'function' === typeof a ? a(f) : a); + }); + return l ? p.substr(0, 1).toUpperCase() + p.substr(1) : p; + }; + a.formatSingle = function(p, f) { + var l = /\.([0-9])/, + r = a.defaultOptions.lang; + /f$/.test(p) + ? ((l = (l = p.match(l)) ? l[1] : -1), + null !== f && + (f = a.numberFormat( + f, + l, + r.decimalPoint, + -1 < p.indexOf(',') ? r.thousandsSep : '', + ))) + : (f = a.dateFormat(p, f)); + return f; + }; + a.format = function(p, f) { + for (var l = '{', r = !1, n, w, u, e, h = [], m; p; ) { + l = p.indexOf(l); + if (-1 === l) break; + n = p.slice(0, l); + if (r) { + n = n.split(':'); + w = n.shift().split('.'); + e = w.length; + m = f; + for (u = 0; u < e; u++) m && (m = m[w[u]]); + n.length && (m = a.formatSingle(n.join(':'), m)); + h.push(m); + } else h.push(n); + p = p.slice(l + 1); + l = (r = !r) ? '}' : '{'; + } + h.push(p); + return h.join(''); + }; + a.getMagnitude = function(a) { + return Math.pow(10, Math.floor(Math.log(a) / Math.LN10)); + }; + a.normalizeTickInterval = function(p, f, l, r, n) { + var w, + u = p; + l = a.pick(l, 1); + w = p / l; + f || + ((f = n + ? [1, 1.2, 1.5, 2, 2.5, 3, 4, 5, 6, 8, 10] + : [1, 2, 2.5, 5, 10]), + !1 === r && + (1 === l + ? (f = a.grep(f, function(a) { + return 0 === a % 1; + })) + : 0.1 >= l && (f = [1 / l]))); + for ( + r = 0; + r < f.length && + !((u = f[r]), + (n && u * l >= p) || (!n && w <= (f[r] + (f[r + 1] || f[r])) / 2)); + r++ + ); + return (u = a.correctFloat( + u * l, + -Math.round(Math.log(0.001) / Math.LN10), + )); + }; + a.stableSort = function(a, f) { + var l = a.length, + p, + n; + for (n = 0; n < l; n++) a[n].safeI = n; + a.sort(function(a, n) { + p = f(a, n); + return 0 === p ? a.safeI - n.safeI : p; + }); + for (n = 0; n < l; n++) delete a[n].safeI; + }; + a.arrayMin = function(a) { + for (var f = a.length, l = a[0]; f--; ) a[f] < l && (l = a[f]); + return l; + }; + a.arrayMax = function(a) { + for (var f = a.length, l = a[0]; f--; ) a[f] > l && (l = a[f]); + return l; + }; + a.destroyObjectProperties = function(p, f) { + a.objectEach(p, function(a, r) { + a && a !== f && a.destroy && a.destroy(); + delete p[r]; + }); + }; + a.discardElement = function(p) { + var f = a.garbageBin; + f || (f = a.createElement('div')); + p && f.appendChild(p); + f.innerHTML = ''; + }; + a.correctFloat = function(a, f) { + return parseFloat(a.toPrecision(f || 14)); + }; + a.setAnimation = function(p, f) { + f.renderer.globalAnimation = a.pick(p, f.options.chart.animation, !0); + }; + a.animObject = function(p) { + return a.isObject(p) ? a.merge(p) : { duration: p ? 500 : 0 }; + }; + a.timeUnits = { + millisecond: 1, + second: 1e3, + minute: 6e4, + hour: 36e5, + day: 864e5, + week: 6048e5, + month: 24192e5, + year: 314496e5, + }; + a.numberFormat = function(p, f, l, r) { + p = +p || 0; + f = +f; + var n = a.defaultOptions.lang, + w = (p.toString().split('.')[1] || '').split('e')[0].length, + u, + e, + h = p.toString().split('e'); + -1 === f + ? (f = Math.min(w, 20)) + : a.isNumber(f) + ? f && + h[1] && + 0 > h[1] && + ((u = f + +h[1]), + 0 <= u + ? ((h[0] = (+h[0]).toExponential(u).split('e')[0]), (f = u)) + : ((h[0] = h[0].split('.')[0] || 0), + (p = 20 > f ? (h[0] * Math.pow(10, h[1])).toFixed(f) : 0), + (h[1] = 0))) + : (f = 2); + e = ( + Math.abs(h[1] ? h[0] : p) + Math.pow(10, -Math.max(f, w) - 1) + ).toFixed(f); + w = String(a.pInt(e)); + u = 3 < w.length ? w.length % 3 : 0; + l = a.pick(l, n.decimalPoint); + r = a.pick(r, n.thousandsSep); + p = (0 > p ? '-' : '') + (u ? w.substr(0, u) + r : ''); + p += w.substr(u).replace(/(\d{3})(?=\d)/g, '$1' + r); + f && (p += l + e.slice(-f)); + h[1] && 0 !== +p && (p += 'e' + h[1]); + return p; + }; + Math.easeInOutSine = function(a) { + return -0.5 * (Math.cos(Math.PI * a) - 1); + }; + a.getStyle = function(p, f, l) { + if ('width' === f) + return ( + Math.min(p.offsetWidth, p.scrollWidth) - + a.getStyle(p, 'padding-left') - + a.getStyle(p, 'padding-right') + ); + if ('height' === f) + return ( + Math.min(p.offsetHeight, p.scrollHeight) - + a.getStyle(p, 'padding-top') - + a.getStyle(p, 'padding-bottom') + ); + H.getComputedStyle || a.error(27, !0); + if ((p = H.getComputedStyle(p, void 0))) + (p = p.getPropertyValue(f)), + a.pick(l, 'opacity' !== f) && (p = a.pInt(p)); + return p; + }; + a.inArray = function(p, f) { + return (a.indexOfPolyfill || Array.prototype.indexOf).call(f, p); + }; + a.grep = function(p, f) { + return (a.filterPolyfill || Array.prototype.filter).call(p, f); + }; + a.find = Array.prototype.find + ? function(a, f) { + return a.find(f); + } + : function(a, f) { + var l, + r = a.length; + for (l = 0; l < r; l++) if (f(a[l], l)) return a[l]; + }; + a.map = function(a, f) { + for (var l = [], r = 0, n = a.length; r < n; r++) + l[r] = f.call(a[r], a[r], r, a); + return l; + }; + a.keys = function(p) { + return (a.keysPolyfill || Object.keys).call(void 0, p); + }; + a.reduce = function(p, f, l) { + return (a.reducePolyfill || Array.prototype.reduce).call(p, f, l); + }; + a.offset = function(a) { + var f = D.documentElement; + a = a.parentElement ? a.getBoundingClientRect() : { top: 0, left: 0 }; + return { + top: a.top + (H.pageYOffset || f.scrollTop) - (f.clientTop || 0), + left: a.left + (H.pageXOffset || f.scrollLeft) - (f.clientLeft || 0), + }; + }; + a.stop = function(p, f) { + for (var l = a.timers.length; l--; ) + a.timers[l].elem !== p || + (f && f !== a.timers[l].prop) || + (a.timers[l].stopped = !0); + }; + a.each = function(p, f, l) { + return (a.forEachPolyfill || Array.prototype.forEach).call(p, f, l); + }; + a.objectEach = function(a, f, l) { + for (var r in a) a.hasOwnProperty(r) && f.call(l, a[r], r, a); + }; + a.addEvent = function(p, f, l) { + var r, + n, + w = p.addEventListener || a.addEventListenerPolyfill; + p.hcEvents && + !Object.prototype.hasOwnProperty.call(p, 'hcEvents') && + ((n = {}), + a.objectEach(p.hcEvents, function(a, e) { + n[e] = a.slice(0); + }), + (p.hcEvents = n)); + r = p.hcEvents = p.hcEvents || {}; + w && w.call(p, f, l, !1); + r[f] || (r[f] = []); + r[f].push(l); + return function() { + a.removeEvent(p, f, l); + }; + }; + a.removeEvent = function(p, f, l) { + function r(e, m) { + var d = p.removeEventListener || a.removeEventListenerPolyfill; + d && d.call(p, e, m, !1); + } + function n() { + var e, m; + p.nodeName && + (f ? ((e = {}), (e[f] = !0)) : (e = u), + a.objectEach(e, function(a, c) { + if (u[c]) for (m = u[c].length; m--; ) r(c, u[c][m]); + })); + } + var w, + u = p.hcEvents, + e; + u && + (f + ? ((w = u[f] || []), + l + ? ((e = a.inArray(l, w)), + -1 < e && (w.splice(e, 1), (u[f] = w)), + r(f, l)) + : (n(), (u[f] = []))) + : (n(), (p.hcEvents = {}))); + }; + a.fireEvent = function(p, f, l, r) { + var n; + n = p.hcEvents; + var w, u; + l = l || {}; + if (D.createEvent && (p.dispatchEvent || p.fireEvent)) + (n = D.createEvent('Events')), + n.initEvent(f, !0, !0), + a.extend(n, l), + p.dispatchEvent ? p.dispatchEvent(n) : p.fireEvent(f, n); + else if (n) + for ( + n = n[f] || [], + w = n.length, + l.target || + a.extend(l, { + preventDefault: function() { + l.defaultPrevented = !0; + }, + target: p, + type: f, + }), + f = 0; + f < w; + f++ + ) + (u = n[f]) && !1 === u.call(p, l) && l.preventDefault(); + r && !l.defaultPrevented && r(l); + }; + a.animate = function(p, f, l) { + var r, + n = '', + w, + u, + e; + a.isObject(l) || + ((e = arguments), + (l = { duration: e[2], easing: e[3], complete: e[4] })); + a.isNumber(l.duration) || (l.duration = 400); + l.easing = + 'function' === typeof l.easing + ? l.easing + : Math[l.easing] || Math.easeInOutSine; + l.curAnim = a.merge(f); + a.objectEach(f, function(e, m) { + a.stop(p, m); + u = new a.Fx(p, l, m); + w = null; + 'd' === m + ? ((u.paths = u.initPath(p, p.d, f.d)), + (u.toD = f.d), + (r = 0), + (w = 1)) + : p.attr + ? (r = p.attr(m)) + : ((r = parseFloat(a.getStyle(p, m)) || 0), + 'opacity' !== m && (n = 'px')); + w || (w = e); + w && w.match && w.match('px') && (w = w.replace(/px/g, '')); + u.run(r, w, n); + }); + }; + a.seriesType = function(p, f, l, r, n) { + var w = a.getOptions(), + u = a.seriesTypes; + w.plotOptions[p] = a.merge(w.plotOptions[f], l); + u[p] = a.extendClass(u[f] || function() {}, r); + u[p].prototype.type = p; + n && (u[p].prototype.pointClass = a.extendClass(a.Point, n)); + return u[p]; + }; + a.uniqueKey = (function() { + var a = Math.random() + .toString(36) + .substring(2, 9), + f = 0; + return function() { + return 'highcharts-' + a + '-' + f++; + }; + })(); + H.jQuery && + (H.jQuery.fn.highcharts = function() { + var p = [].slice.call(arguments); + if (this[0]) + return p[0] + ? (new a[a.isString(p[0]) ? p.shift() : 'Chart']( + this[0], + p[0], + p[1], + ), + this) + : E[a.attr(this[0], 'data-highcharts-chart')]; + }); + })(M); + (function(a) { + var E = a.each, + D = a.isNumber, + H = a.map, + p = a.merge, + f = a.pInt; + a.Color = function(l) { + if (!(this instanceof a.Color)) return new a.Color(l); + this.init(l); + }; + a.Color.prototype = { + parsers: [ + { + regex: /rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]?(?:\.[0-9]+)?)\s*\)/, + parse: function(a) { + return [f(a[1]), f(a[2]), f(a[3]), parseFloat(a[4], 10)]; + }, + }, + { + regex: /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/, + parse: function(a) { + return [f(a[1]), f(a[2]), f(a[3]), 1]; + }, + }, + ], + names: { + none: 'rgba(255,255,255,0)', + white: '#ffffff', + black: '#000000', + }, + init: function(l) { + var f, n, w, u; + if ( + (this.input = l = + this.names[l && l.toLowerCase ? l.toLowerCase() : ''] || l) && + l.stops + ) + this.stops = H(l.stops, function(e) { + return new a.Color(e[1]); + }); + else if ( + (l && + l.charAt && + '#' === l.charAt() && + ((f = l.length), + (l = parseInt(l.substr(1), 16)), + 7 === f + ? (n = [(l & 16711680) >> 16, (l & 65280) >> 8, l & 255, 1]) + : 4 === f && + (n = [ + ((l & 3840) >> 4) | ((l & 3840) >> 8), + ((l & 240) >> 4) | (l & 240), + ((l & 15) << 4) | (l & 15), + 1, + ])), + !n) + ) + for (w = this.parsers.length; w-- && !n; ) + (u = this.parsers[w]), (f = u.regex.exec(l)) && (n = u.parse(f)); + this.rgba = n || []; + }, + get: function(a) { + var f = this.input, + n = this.rgba, + l; + this.stops + ? ((l = p(f)), + (l.stops = [].concat(l.stops)), + E(this.stops, function(n, e) { + l.stops[e] = [l.stops[e][0], n.get(a)]; + })) + : (l = + n && D(n[0]) + ? 'rgb' === a || (!a && 1 === n[3]) + ? 'rgb(' + n[0] + ',' + n[1] + ',' + n[2] + ')' + : 'a' === a + ? n[3] + : 'rgba(' + n.join(',') + ')' + : f); + return l; + }, + brighten: function(a) { + var l, + n = this.rgba; + if (this.stops) + E(this.stops, function(n) { + n.brighten(a); + }); + else if (D(a) && 0 !== a) + for (l = 0; 3 > l; l++) + (n[l] += f(255 * a)), + 0 > n[l] && (n[l] = 0), + 255 < n[l] && (n[l] = 255); + return this; + }, + setOpacity: function(a) { + this.rgba[3] = a; + return this; + }, + tweenTo: function(a, f) { + var n = this.rgba, + l = a.rgba; + l.length && n && n.length + ? ((a = 1 !== l[3] || 1 !== n[3]), + (f = + (a ? 'rgba(' : 'rgb(') + + Math.round(l[0] + (n[0] - l[0]) * (1 - f)) + + ',' + + Math.round(l[1] + (n[1] - l[1]) * (1 - f)) + + ',' + + Math.round(l[2] + (n[2] - l[2]) * (1 - f)) + + (a ? ',' + (l[3] + (n[3] - l[3]) * (1 - f)) : '') + + ')')) + : (f = a.input || 'none'); + return f; + }, + }; + a.color = function(l) { + return new a.Color(l); + }; + })(M); + (function(a) { + var E, + D, + H = a.addEvent, + p = a.animate, + f = a.attr, + l = a.charts, + r = a.color, + n = a.css, + w = a.createElement, + u = a.defined, + e = a.deg2rad, + h = a.destroyObjectProperties, + m = a.doc, + d = a.each, + c = a.extend, + b = a.erase, + k = a.grep, + z = a.hasTouch, + B = a.inArray, + I = a.isArray, + x = a.isFirefox, + K = a.isMS, + t = a.isObject, + C = a.isString, + N = a.isWebKit, + q = a.merge, + A = a.noop, + F = a.objectEach, + G = a.pick, + g = a.pInt, + v = a.removeEvent, + Q = a.stop, + L = a.svg, + P = a.SVG_NS, + J = a.symbolSizes, + R = a.win; + E = a.SVGElement = function() { + return this; + }; + c(E.prototype, { + opacity: 1, + SVG_NS: P, + textProps: 'direction fontSize fontWeight fontFamily fontStyle color lineHeight width textAlign textDecoration textOverflow textOutline'.split( + ' ', + ), + init: function(a, g) { + this.element = 'span' === g ? w(g) : m.createElementNS(this.SVG_NS, g); + this.renderer = a; + }, + animate: function(y, g, b) { + g = a.animObject(G(g, this.renderer.globalAnimation, !0)); + 0 !== g.duration + ? (b && (g.complete = b), p(this, y, g)) + : (this.attr(y, null, b), g.step && g.step.call(this)); + return this; + }, + colorGradient: function(y, g, b) { + var v = this.renderer, + c, + O, + k, + e, + z, + h, + m, + L, + A, + J, + t = [], + x; + y.radialGradient + ? (O = 'radialGradient') + : y.linearGradient && (O = 'linearGradient'); + O && + ((k = y[O]), + (z = v.gradients), + (m = y.stops), + (J = b.radialReference), + I(k) && + (y[O] = k = { + x1: k[0], + y1: k[1], + x2: k[2], + y2: k[3], + gradientUnits: 'userSpaceOnUse', + }), + 'radialGradient' === O && + J && + !u(k.gradientUnits) && + ((e = k), + (k = q(k, v.getRadialAttr(J, e), { + gradientUnits: 'userSpaceOnUse', + }))), + F(k, function(a, y) { + 'id' !== y && t.push(y, a); + }), + F(m, function(a) { + t.push(a); + }), + (t = t.join(',')), + z[t] + ? (J = z[t].attr('id')) + : ((k.id = J = a.uniqueKey()), + (z[t] = h = v + .createElement(O) + .attr(k) + .add(v.defs)), + (h.radAttr = e), + (h.stops = []), + d(m, function(y) { + 0 === y[1].indexOf('rgba') + ? ((c = a.color(y[1])), (L = c.get('rgb')), (A = c.get('a'))) + : ((L = y[1]), (A = 1)); + y = v + .createElement('stop') + .attr({ offset: y[0], 'stop-color': L, 'stop-opacity': A }) + .add(h); + h.stops.push(y); + })), + (x = 'url(' + v.url + '#' + J + ')'), + b.setAttribute(g, x), + (b.gradient = t), + (y.toString = function() { + return x; + })); + }, + applyTextOutline: function(y) { + var g = this.element, + v, + c, + k, + q, + e; + -1 !== y.indexOf('contrast') && + (y = y.replace(/contrast/g, this.renderer.getContrast(g.style.fill))); + y = y.split(' '); + c = y[y.length - 1]; + if ((k = y[0]) && 'none' !== k && a.svg) { + this.fakeTS = !0; + y = [].slice.call(g.getElementsByTagName('tspan')); + this.ySetter = this.xSetter; + k = k.replace(/(^[\d\.]+)(.*?)$/g, function(a, y, g) { + return 2 * y + g; + }); + for (e = y.length; e--; ) + (v = y[e]), + 'highcharts-text-outline' === v.getAttribute('class') && + b(y, g.removeChild(v)); + q = g.firstChild; + d(y, function(a, y) { + 0 === y && + (a.setAttribute('x', g.getAttribute('x')), + (y = g.getAttribute('y')), + a.setAttribute('y', y || 0), + null === y && g.setAttribute('y', 0)); + a = a.cloneNode(1); + f(a, { + class: 'highcharts-text-outline', + fill: c, + stroke: c, + 'stroke-width': k, + 'stroke-linejoin': 'round', + }); + g.insertBefore(a, q); + }); + } + }, + attr: function(a, g, b, v) { + var y, + c = this.element, + k, + d = this, + O, + q; + 'string' === typeof a && + void 0 !== g && + ((y = a), (a = {}), (a[y] = g)); + 'string' === typeof a + ? (d = (this[a + 'Getter'] || this._defaultGetter).call(this, a, c)) + : (F( + a, + function(y, g) { + O = !1; + v || Q(this, g); + this.symbolName && + /^(x|y|width|height|r|start|end|innerR|anchorX|anchorY)$/.test( + g, + ) && + (k || (this.symbolAttr(a), (k = !0)), (O = !0)); + !this.rotation || + ('x' !== g && 'y' !== g) || + (this.doTransform = !0); + O || + ((q = this[g + 'Setter'] || this._defaultSetter), + q.call(this, y, g, c), + this.shadows && + /^(width|height|visibility|x|y|d|transform|cx|cy|r)$/.test( + g, + ) && + this.updateShadows(g, y, q)); + }, + this, + ), + this.afterSetters()); + b && b(); + return d; + }, + afterSetters: function() { + this.doTransform && (this.updateTransform(), (this.doTransform = !1)); + }, + updateShadows: function(a, g, b) { + for (var y = this.shadows, v = y.length; v--; ) + b.call( + y[v], + 'height' === a + ? Math.max(g - (y[v].cutHeight || 0), 0) + : 'd' === a + ? this.d + : g, + a, + y[v], + ); + }, + addClass: function(a, g) { + var y = this.attr('class') || ''; + -1 === y.indexOf(a) && + (g || (a = (y + (y ? ' ' : '') + a).replace(' ', ' ')), + this.attr('class', a)); + return this; + }, + hasClass: function(a) { + return -1 !== B(a, (this.attr('class') || '').split(' ')); + }, + removeClass: function(a) { + return this.attr('class', (this.attr('class') || '').replace(a, '')); + }, + symbolAttr: function(a) { + var y = this; + d( + 'x y r start end width height innerR anchorX anchorY'.split(' '), + function(g) { + y[g] = G(a[g], y[g]); + }, + ); + y.attr({ + d: y.renderer.symbols[y.symbolName](y.x, y.y, y.width, y.height, y), + }); + }, + clip: function(a) { + return this.attr( + 'clip-path', + a ? 'url(' + this.renderer.url + '#' + a.id + ')' : 'none', + ); + }, + crisp: function(a, g) { + var y; + g = g || a.strokeWidth || 0; + y = (Math.round(g) % 2) / 2; + a.x = Math.floor(a.x || this.x || 0) + y; + a.y = Math.floor(a.y || this.y || 0) + y; + a.width = Math.floor((a.width || this.width || 0) - 2 * y); + a.height = Math.floor((a.height || this.height || 0) - 2 * y); + u(a.strokeWidth) && (a.strokeWidth = g); + return a; + }, + css: function(a) { + var y = this.styles, + b = {}, + v = this.element, + k, + d = '', + q, + e = !y, + z = ['textOutline', 'textOverflow', 'width']; + a && a.color && (a.fill = a.color); + y && + F(a, function(a, g) { + a !== y[g] && ((b[g] = a), (e = !0)); + }); + e && + (y && (a = c(y, b)), + (k = this.textWidth = + a && + a.width && + 'auto' !== a.width && + 'text' === v.nodeName.toLowerCase() && + g(a.width)), + (this.styles = a), + k && !L && this.renderer.forExport && delete a.width, + K && !L + ? n(this.element, a) + : ((q = function(a, y) { + return '-' + y.toLowerCase(); + }), + F(a, function(a, y) { + -1 === B(y, z) && + (d += y.replace(/([A-Z])/g, q) + ':' + a + ';'); + }), + d && f(v, 'style', d)), + this.added && + ('text' === this.element.nodeName && this.renderer.buildText(this), + a && a.textOutline && this.applyTextOutline(a.textOutline))); + return this; + }, + strokeWidth: function() { + return this['stroke-width'] || 0; + }, + on: function(a, g) { + var y = this, + b = y.element; + z && 'click' === a + ? ((b.ontouchstart = function(a) { + y.touchEventFired = Date.now(); + a.preventDefault(); + g.call(b, a); + }), + (b.onclick = function(a) { + (-1 === R.navigator.userAgent.indexOf('Android') || + 1100 < Date.now() - (y.touchEventFired || 0)) && + g.call(b, a); + })) + : (b['on' + a] = g); + return this; + }, + setRadialReference: function(a) { + var y = this.renderer.gradients[this.element.gradient]; + this.element.radialReference = a; + y && y.radAttr && y.animate(this.renderer.getRadialAttr(a, y.radAttr)); + return this; + }, + translate: function(a, g) { + return this.attr({ translateX: a, translateY: g }); + }, + invert: function(a) { + this.inverted = a; + this.updateTransform(); + return this; + }, + updateTransform: function() { + var a = this.translateX || 0, + g = this.translateY || 0, + b = this.scaleX, + v = this.scaleY, + c = this.inverted, + k = this.rotation, + d = this.matrix, + q = this.element; + c && ((a += this.width), (g += this.height)); + a = ['translate(' + a + ',' + g + ')']; + u(d) && a.push('matrix(' + d.join(',') + ')'); + c + ? a.push('rotate(90) scale(-1,1)') + : k && + a.push( + 'rotate(' + + k + + ' ' + + G(this.rotationOriginX, q.getAttribute('x'), 0) + + ' ' + + G(this.rotationOriginY, q.getAttribute('y') || 0) + + ')', + ); + (u(b) || u(v)) && a.push('scale(' + G(b, 1) + ' ' + G(v, 1) + ')'); + a.length && q.setAttribute('transform', a.join(' ')); + }, + toFront: function() { + var a = this.element; + a.parentNode.appendChild(a); + return this; + }, + align: function(a, g, v) { + var y, + c, + k, + d, + q = {}; + c = this.renderer; + k = c.alignedObjects; + var e, O; + if (a) { + if ( + ((this.alignOptions = a), (this.alignByTranslate = g), !v || C(v)) + ) + (this.alignTo = y = v || 'renderer'), + b(k, this), + k.push(this), + (v = null); + } else + (a = this.alignOptions), + (g = this.alignByTranslate), + (y = this.alignTo); + v = G(v, c[y], c); + y = a.align; + c = a.verticalAlign; + k = (v.x || 0) + (a.x || 0); + d = (v.y || 0) + (a.y || 0); + 'right' === y ? (e = 1) : 'center' === y && (e = 2); + e && (k += (v.width - (a.width || 0)) / e); + q[g ? 'translateX' : 'x'] = Math.round(k); + 'bottom' === c ? (O = 1) : 'middle' === c && (O = 2); + O && (d += (v.height - (a.height || 0)) / O); + q[g ? 'translateY' : 'y'] = Math.round(d); + this[this.placed ? 'animate' : 'attr'](q); + this.placed = !0; + this.alignAttr = q; + return this; + }, + getBBox: function(a, g) { + var y, + b = this.renderer, + v, + k = this.element, + q = this.styles, + O, + z = this.textStr, + h, + m = b.cache, + L = b.cacheKeys, + A; + g = G(g, this.rotation); + v = g * e; + O = q && q.fontSize; + u(z) && + ((A = z.toString()), + -1 === A.indexOf('\x3c') && (A = A.replace(/[0-9]/g, '0')), + (A += ['', g || 0, O, q && q.width, q && q.textOverflow].join())); + A && !a && (y = m[A]); + if (!y) { + if (k.namespaceURI === this.SVG_NS || b.forExport) { + try { + (h = + this.fakeTS && + function(a) { + d(k.querySelectorAll('.highcharts-text-outline'), function( + y, + ) { + y.style.display = a; + }); + }) && h('none'), + (y = k.getBBox + ? c({}, k.getBBox()) + : { width: k.offsetWidth, height: k.offsetHeight }), + h && h(''); + } catch (W) {} + if (!y || 0 > y.width) y = { width: 0, height: 0 }; + } else y = this.htmlGetBBox(); + b.isSVG && + ((a = y.width), + (b = y.height), + q && + '11px' === q.fontSize && + 17 === Math.round(b) && + (y.height = b = 14), + g && + ((y.width = + Math.abs(b * Math.sin(v)) + Math.abs(a * Math.cos(v))), + (y.height = + Math.abs(b * Math.cos(v)) + Math.abs(a * Math.sin(v))))); + if (A && 0 < y.height) { + for (; 250 < L.length; ) delete m[L.shift()]; + m[A] || L.push(A); + m[A] = y; + } + } + return y; + }, + show: function(a) { + return this.attr({ visibility: a ? 'inherit' : 'visible' }); + }, + hide: function() { + return this.attr({ visibility: 'hidden' }); + }, + fadeOut: function(a) { + var y = this; + y.animate( + { opacity: 0 }, + { + duration: a || 150, + complete: function() { + y.attr({ y: -9999 }); + }, + }, + ); + }, + add: function(a) { + var y = this.renderer, + g = this.element, + b; + a && (this.parentGroup = a); + this.parentInverted = a && a.inverted; + void 0 !== this.textStr && y.buildText(this); + this.added = !0; + if (!a || a.handleZ || this.zIndex) b = this.zIndexSetter(); + b || (a ? a.element : y.box).appendChild(g); + if (this.onAdd) this.onAdd(); + return this; + }, + safeRemoveChild: function(a) { + var y = a.parentNode; + y && y.removeChild(a); + }, + destroy: function() { + var a = this, + g = a.element || {}, + v = a.renderer.isSVG && 'SPAN' === g.nodeName && a.parentGroup, + c = g.ownerSVGElement; + g.onclick = g.onmouseout = g.onmouseover = g.onmousemove = g.point = null; + Q(a); + a.clipPath && + c && + (d(c.querySelectorAll('[clip-path],[CLIP-PATH]'), function(g) { + g + .getAttribute('clip-path') + .match(RegExp('[("]#' + a.clipPath.element.id + '[)"]')) && + g.removeAttribute('clip-path'); + }), + (a.clipPath = a.clipPath.destroy())); + if (a.stops) { + for (c = 0; c < a.stops.length; c++) + a.stops[c] = a.stops[c].destroy(); + a.stops = null; + } + a.safeRemoveChild(g); + for (a.destroyShadows(); v && v.div && 0 === v.div.childNodes.length; ) + (g = v.parentGroup), a.safeRemoveChild(v.div), delete v.div, (v = g); + a.alignTo && b(a.renderer.alignedObjects, a); + F(a, function(g, y) { + delete a[y]; + }); + return null; + }, + shadow: function(a, g, b) { + var y = [], + v, + c, + k = this.element, + d, + q, + e, + z; + if (!a) this.destroyShadows(); + else if (!this.shadows) { + q = G(a.width, 3); + e = (a.opacity || 0.15) / q; + z = this.parentInverted + ? '(-1,-1)' + : '(' + G(a.offsetX, 1) + ', ' + G(a.offsetY, 1) + ')'; + for (v = 1; v <= q; v++) + (c = k.cloneNode(0)), + (d = 2 * q + 1 - 2 * v), + f(c, { + isShadow: 'true', + stroke: a.color || '#000000', + 'stroke-opacity': e * v, + 'stroke-width': d, + transform: 'translate' + z, + fill: 'none', + }), + b && + (f(c, 'height', Math.max(f(c, 'height') - d, 0)), + (c.cutHeight = d)), + g + ? g.element.appendChild(c) + : k.parentNode && k.parentNode.insertBefore(c, k), + y.push(c); + this.shadows = y; + } + return this; + }, + destroyShadows: function() { + d( + this.shadows || [], + function(a) { + this.safeRemoveChild(a); + }, + this, + ); + this.shadows = void 0; + }, + xGetter: function(a) { + 'circle' === this.element.nodeName && + ('x' === a ? (a = 'cx') : 'y' === a && (a = 'cy')); + return this._defaultGetter(a); + }, + _defaultGetter: function(a) { + a = G( + this[a + 'Value'], + this[a], + this.element ? this.element.getAttribute(a) : null, + 0, + ); + /^[\-0-9\.]+$/.test(a) && (a = parseFloat(a)); + return a; + }, + dSetter: function(a, g, b) { + a && a.join && (a = a.join(' ')); + /(NaN| {2}|^$)/.test(a) && (a = 'M 0 0'); + this[g] !== a && (b.setAttribute(g, a), (this[g] = a)); + }, + dashstyleSetter: function(a) { + var b, + v = this['stroke-width']; + 'inherit' === v && (v = 1); + if ((a = a && a.toLowerCase())) { + a = a + .replace('shortdashdotdot', '3,1,1,1,1,1,') + .replace('shortdashdot', '3,1,1,1') + .replace('shortdot', '1,1,') + .replace('shortdash', '3,1,') + .replace('longdash', '8,3,') + .replace(/dot/g, '1,3,') + .replace('dash', '4,3,') + .replace(/,$/, '') + .split(','); + for (b = a.length; b--; ) a[b] = g(a[b]) * v; + a = a.join(',').replace(/NaN/g, 'none'); + this.element.setAttribute('stroke-dasharray', a); + } + }, + alignSetter: function(a) { + this.alignValue = a; + this.element.setAttribute( + 'text-anchor', + { left: 'start', center: 'middle', right: 'end' }[a], + ); + }, + opacitySetter: function(a, g, b) { + this[g] = a; + b.setAttribute(g, a); + }, + titleSetter: function(a) { + var g = this.element.getElementsByTagName('title')[0]; + g || + ((g = m.createElementNS(this.SVG_NS, 'title')), + this.element.appendChild(g)); + g.firstChild && g.removeChild(g.firstChild); + g.appendChild( + m.createTextNode(String(G(a), '').replace(/<[^>]*>/g, '')), + ); + }, + textSetter: function(a) { + a !== this.textStr && + (delete this.bBox, + (this.textStr = a), + this.added && this.renderer.buildText(this)); + }, + fillSetter: function(a, g, b) { + 'string' === typeof a + ? b.setAttribute(g, a) + : a && this.colorGradient(a, g, b); + }, + visibilitySetter: function(a, g, b) { + 'inherit' === a + ? b.removeAttribute(g) + : this[g] !== a && b.setAttribute(g, a); + this[g] = a; + }, + zIndexSetter: function(a, b) { + var v = this.renderer, + y = this.parentGroup, + c = (y || v).element || v.box, + k, + d = this.element, + q, + e, + v = c === v.box; + k = this.added; + var z; + u(a) && + ((d.zIndex = a), (a = +a), this[b] === a && (k = !1), (this[b] = a)); + if (k) { + (a = this.zIndex) && y && (y.handleZ = !0); + b = c.childNodes; + for (z = b.length - 1; 0 <= z && !q; z--) + if (((y = b[z]), (k = y.zIndex), (e = !u(k)), y !== d)) + if (0 > a && e && !v && !z) c.insertBefore(d, b[z]), (q = !0); + else if (g(k) <= a || (e && (!u(a) || 0 <= a))) + c.insertBefore(d, b[z + 1] || null), (q = !0); + q || (c.insertBefore(d, b[v ? 3 : 0] || null), (q = !0)); + } + return q; + }, + _defaultSetter: function(a, g, b) { + b.setAttribute(g, a); + }, + }); + E.prototype.yGetter = E.prototype.xGetter; + E.prototype.translateXSetter = E.prototype.translateYSetter = E.prototype.rotationSetter = E.prototype.verticalAlignSetter = E.prototype.rotationOriginXSetter = E.prototype.rotationOriginYSetter = E.prototype.scaleXSetter = E.prototype.scaleYSetter = E.prototype.matrixSetter = function( + a, + g, + ) { + this[g] = a; + this.doTransform = !0; + }; + E.prototype['stroke-widthSetter'] = E.prototype.strokeSetter = function( + a, + g, + b, + ) { + this[g] = a; + this.stroke && this['stroke-width'] + ? (E.prototype.fillSetter.call(this, this.stroke, 'stroke', b), + b.setAttribute('stroke-width', this['stroke-width']), + (this.hasStroke = !0)) + : 'stroke-width' === g && + 0 === a && + this.hasStroke && + (b.removeAttribute('stroke'), (this.hasStroke = !1)); + }; + D = a.SVGRenderer = function() { + this.init.apply(this, arguments); + }; + c(D.prototype, { + Element: E, + SVG_NS: P, + init: function(a, g, b, v, c, k) { + var y; + v = this.createElement('svg') + .attr({ version: '1.1', class: 'highcharts-root' }) + .css(this.getStyle(v)); + y = v.element; + a.appendChild(y); + f(a, 'dir', 'ltr'); + -1 === a.innerHTML.indexOf('xmlns') && f(y, 'xmlns', this.SVG_NS); + this.isSVG = !0; + this.box = y; + this.boxWrapper = v; + this.alignedObjects = []; + this.url = + (x || N) && m.getElementsByTagName('base').length + ? R.location.href + .replace(/#.*?$/, '') + .replace(/<[^>]*>/g, '') + .replace(/([\('\)])/g, '\\$1') + .replace(/ /g, '%20') + : ''; + this.createElement('desc') + .add() + .element.appendChild( + m.createTextNode('Created with Highcharts 6.0.4'), + ); + this.defs = this.createElement('defs').add(); + this.allowHTML = k; + this.forExport = c; + this.gradients = {}; + this.cache = {}; + this.cacheKeys = []; + this.imgCount = 0; + this.setSize(g, b, !1); + var d; + x && + a.getBoundingClientRect && + ((g = function() { + n(a, { left: 0, top: 0 }); + d = a.getBoundingClientRect(); + n(a, { + left: Math.ceil(d.left) - d.left + 'px', + top: Math.ceil(d.top) - d.top + 'px', + }); + }), + g(), + (this.unSubPixelFix = H(R, 'resize', g))); + }, + getStyle: function(a) { + return (this.style = c( + { + fontFamily: + '"Lucida Grande", "Lucida Sans Unicode", Arial, Helvetica, sans-serif', + fontSize: '12px', + }, + a, + )); + }, + setStyle: function(a) { + this.boxWrapper.css(this.getStyle(a)); + }, + isHidden: function() { + return !this.boxWrapper.getBBox().width; + }, + destroy: function() { + var a = this.defs; + this.box = null; + this.boxWrapper = this.boxWrapper.destroy(); + h(this.gradients || {}); + this.gradients = null; + a && (this.defs = a.destroy()); + this.unSubPixelFix && this.unSubPixelFix(); + return (this.alignedObjects = null); + }, + createElement: function(a) { + var g = new this.Element(); + g.init(this, a); + return g; + }, + draw: A, + getRadialAttr: function(a, g) { + return { + cx: a[0] - a[2] / 2 + g.cx * a[2], + cy: a[1] - a[2] / 2 + g.cy * a[2], + r: g.r * a[2], + }; + }, + getSpanWidth: function(a, g) { + var b = a.getBBox(!0).width; + !L && + this.forExport && + (b = this.measureSpanWidth(g.firstChild.data, a.styles)); + return b; + }, + applyEllipsis: function(a, g, b, v) { + var c = a.rotation, + y = b, + k, + d = 0, + q = b.length, + e = function(a) { + g.removeChild(g.firstChild); + a && g.appendChild(m.createTextNode(a)); + }, + z; + a.rotation = 0; + y = this.getSpanWidth(a, g); + if ((z = y > v)) { + for (; d <= q; ) + (k = Math.ceil((d + q) / 2)), + (y = b.substring(0, k) + '\u2026'), + e(y), + (y = this.getSpanWidth(a, g)), + d === q ? (d = q + 1) : y > v ? (q = k - 1) : (d = k); + 0 === q && e(''); + } + a.rotation = c; + return z; + }, + escapes: { + '\x26': '\x26amp;', + '\x3c': '\x26lt;', + '\x3e': '\x26gt;', + "'": '\x26#39;', + '"': '\x26quot;', + }, + buildText: function(a) { + var b = a.element, + v = this, + c = v.forExport, + y = G(a.textStr, '').toString(), + q = -1 !== y.indexOf('\x3c'), + e = b.childNodes, + z, + h, + A, + J, + t = f(b, 'x'), + x = a.styles, + B = a.textWidth, + l = x && x.lineHeight, + C = x && x.textOutline, + u = x && 'ellipsis' === x.textOverflow, + Q = x && 'nowrap' === x.whiteSpace, + w = x && x.fontSize, + R, + I, + r = e.length, + x = B && !a.added && this.box, + p = function(a) { + var c; + c = /(px|em)$/.test(a && a.style.fontSize) + ? a.style.fontSize + : w || v.style.fontSize || 12; + return l + ? g(l) + : v.fontMetrics(c, a.getAttribute('style') ? a : b).h; + }, + K = function(a) { + F(v.escapes, function(g, b) { + a = a.replace(new RegExp(g, 'g'), b); + }); + return a; + }; + R = [y, u, Q, l, C, w, B].join(); + if (R !== a.textCache) { + for (a.textCache = R; r--; ) b.removeChild(e[r]); + q || C || u || B || -1 !== y.indexOf(' ') + ? ((z = /<.*class="([^"]+)".*>/), + (h = /<.*style="([^"]+)".*>/), + (A = /<.*href="([^"]+)".*>/), + x && x.appendChild(b), + (y = q + ? y + .replace( + /<(b|strong)>/g, + '\x3cspan style\x3d"font-weight:bold"\x3e', + ) + .replace( + /<(i|em)>/g, + '\x3cspan style\x3d"font-style:italic"\x3e', + ) + .replace(//g, '\x3c/span\x3e') + .split(//g) + : [y]), + (y = k(y, function(a) { + return '' !== a; + })), + d(y, function(g, y) { + var k, + q = 0; + g = g + .replace(/^\s+|\s+$/g, '') + .replace(//g, '\x3c/span\x3e|||'); + k = g.split('|||'); + d(k, function(g) { + if ('' !== g || 1 === k.length) { + var d = {}, + e = m.createElementNS(v.SVG_NS, 'tspan'), + x, + F; + z.test(g) && ((x = g.match(z)[1]), f(e, 'class', x)); + h.test(g) && + ((F = g + .match(h)[1] + .replace(/(;| |^)color([ :])/, '$1fill$2')), + f(e, 'style', F)); + A.test(g) && + !c && + (f( + e, + 'onclick', + 'location.href\x3d"' + g.match(A)[1] + '"', + ), + f(e, 'class', 'highcharts-anchor'), + n(e, { cursor: 'pointer' })); + g = K(g.replace(/<[a-zA-Z\/](.|\n)*?>/g, '') || ' '); + if (' ' !== g) { + e.appendChild(m.createTextNode(g)); + q ? (d.dx = 0) : y && null !== t && (d.x = t); + f(e, d); + b.appendChild(e); + !q && + I && + (!L && c && n(e, { display: 'block' }), + f(e, 'dy', p(e))); + if (B) { + d = g.replace(/([^\^])-/g, '$1- ').split(' '); + x = 1 < k.length || y || (1 < d.length && !Q); + var O = [], + l, + C = p(e), + G = a.rotation; + for ( + u && (J = v.applyEllipsis(a, e, g, B)); + !u && x && (d.length || O.length); + + ) + (a.rotation = 0), + (l = v.getSpanWidth(a, e)), + (g = l > B), + void 0 === J && (J = g), + g && 1 !== d.length + ? (e.removeChild(e.firstChild), + O.unshift(d.pop())) + : ((d = O), + (O = []), + d.length && + !Q && + ((e = m.createElementNS(P, 'tspan')), + f(e, { dy: C, x: t }), + F && f(e, 'style', F), + b.appendChild(e)), + l > B && (B = l)), + d.length && + e.appendChild( + m.createTextNode( + d.join(' ').replace(/- /g, '-'), + ), + ); + a.rotation = G; + } + q++; + } + } + }); + I = I || b.childNodes.length; + }), + J && a.attr('title', a.textStr), + x && x.removeChild(b), + C && a.applyTextOutline && a.applyTextOutline(C)) + : b.appendChild(m.createTextNode(K(y))); + } + }, + getContrast: function(a) { + a = r(a).rgba; + return 510 < a[0] + a[1] + a[2] ? '#000000' : '#FFFFFF'; + }, + button: function(a, g, b, v, d, k, e, z, h) { + var y = this.label(a, g, b, h, null, null, null, null, 'button'), + m = 0; + y.attr(q({ padding: 8, r: 2 }, d)); + var A, L, J, t; + d = q( + { + fill: '#f7f7f7', + stroke: '#cccccc', + 'stroke-width': 1, + style: { + color: '#333333', + cursor: 'pointer', + fontWeight: 'normal', + }, + }, + d, + ); + A = d.style; + delete d.style; + k = q(d, { fill: '#e6e6e6' }, k); + L = k.style; + delete k.style; + e = q( + d, + { fill: '#e6ebf5', style: { color: '#000000', fontWeight: 'bold' } }, + e, + ); + J = e.style; + delete e.style; + z = q(d, { style: { color: '#cccccc' } }, z); + t = z.style; + delete z.style; + H(y.element, K ? 'mouseover' : 'mouseenter', function() { + 3 !== m && y.setState(1); + }); + H(y.element, K ? 'mouseout' : 'mouseleave', function() { + 3 !== m && y.setState(m); + }); + y.setState = function(a) { + 1 !== a && (y.state = m = a); + y.removeClass( + /highcharts-button-(normal|hover|pressed|disabled)/, + ).addClass( + 'highcharts-button-' + + ['normal', 'hover', 'pressed', 'disabled'][a || 0], + ); + y.attr([d, k, e, z][a || 0]).css([A, L, J, t][a || 0]); + }; + y.attr(d).css(c({ cursor: 'default' }, A)); + return y.on('click', function(a) { + 3 !== m && v.call(y, a); + }); + }, + crispLine: function(a, g) { + a[1] === a[4] && (a[1] = a[4] = Math.round(a[1]) - (g % 2) / 2); + a[2] === a[5] && (a[2] = a[5] = Math.round(a[2]) + (g % 2) / 2); + return a; + }, + path: function(a) { + var g = { fill: 'none' }; + I(a) ? (g.d = a) : t(a) && c(g, a); + return this.createElement('path').attr(g); + }, + circle: function(a, g, b) { + a = t(a) ? a : { x: a, y: g, r: b }; + g = this.createElement('circle'); + g.xSetter = g.ySetter = function(a, g, b) { + b.setAttribute('c' + g, a); + }; + return g.attr(a); + }, + arc: function(a, g, b, v, c, d) { + t(a) + ? ((v = a), (g = v.y), (b = v.r), (a = v.x)) + : (v = { innerR: v, start: c, end: d }); + a = this.symbol('arc', a, g, b, b, v); + a.r = b; + return a; + }, + rect: function(a, g, b, v, c, d) { + c = t(a) ? a.r : c; + var k = this.createElement('rect'); + a = t(a) + ? a + : void 0 === a + ? {} + : { x: a, y: g, width: Math.max(b, 0), height: Math.max(v, 0) }; + void 0 !== d && ((a.strokeWidth = d), (a = k.crisp(a))); + a.fill = 'none'; + c && (a.r = c); + k.rSetter = function(a, g, b) { + f(b, { rx: a, ry: a }); + }; + return k.attr(a); + }, + setSize: function(a, g, b) { + var v = this.alignedObjects, + c = v.length; + this.width = a; + this.height = g; + for ( + this.boxWrapper.animate( + { width: a, height: g }, + { + step: function() { + this.attr({ + viewBox: + '0 0 ' + this.attr('width') + ' ' + this.attr('height'), + }); + }, + duration: G(b, !0) ? void 0 : 0, + }, + ); + c--; + + ) + v[c].align(); + }, + g: function(a) { + var g = this.createElement('g'); + return a ? g.attr({ class: 'highcharts-' + a }) : g; + }, + image: function(a, g, b, v, d) { + var k = { preserveAspectRatio: 'none' }; + 1 < arguments.length && c(k, { x: g, y: b, width: v, height: d }); + k = this.createElement('image').attr(k); + k.element.setAttributeNS + ? k.element.setAttributeNS('http://www.w3.org/1999/xlink', 'href', a) + : k.element.setAttribute('hc-svg-href', a); + return k; + }, + symbol: function(a, g, b, v, k, q) { + var e = this, + y, + z = /^url\((.*?)\)$/, + h = z.test(a), + A = !h && (this.symbols[a] ? a : 'circle'), + L = A && this.symbols[A], + t = + u(g) && + L && + L.call(this.symbols, Math.round(g), Math.round(b), v, k, q), + x, + F; + L + ? ((y = this.path(t)), + y.attr('fill', 'none'), + c(y, { symbolName: A, x: g, y: b, width: v, height: k }), + q && c(y, q)) + : h && + ((x = a.match(z)[1]), + (y = this.image(x)), + (y.imgwidth = G(J[x] && J[x].width, q && q.width)), + (y.imgheight = G(J[x] && J[x].height, q && q.height)), + (F = function() { + y.attr({ width: y.width, height: y.height }); + }), + d(['width', 'height'], function(a) { + y[a + 'Setter'] = function(a, g) { + var b = {}, + v = this['img' + g], + c = 'width' === g ? 'translateX' : 'translateY'; + this[g] = a; + u(v) && + (this.element && this.element.setAttribute(g, v), + this.alignByTranslate || + ((b[c] = ((this[g] || 0) - v) / 2), this.attr(b))); + }; + }), + u(g) && y.attr({ x: g, y: b }), + (y.isImg = !0), + u(y.imgwidth) && u(y.imgheight) + ? F() + : (y.attr({ width: 0, height: 0 }), + w('img', { + onload: function() { + var a = l[e.chartIndex]; + 0 === this.width && + (n(this, { position: 'absolute', top: '-999em' }), + m.body.appendChild(this)); + J[x] = { width: this.width, height: this.height }; + y.imgwidth = this.width; + y.imgheight = this.height; + y.element && F(); + this.parentNode && this.parentNode.removeChild(this); + e.imgCount--; + if (!e.imgCount && a && a.onload) a.onload(); + }, + src: x, + }), + this.imgCount++)); + return y; + }, + symbols: { + circle: function(a, g, b, v) { + return this.arc(a + b / 2, g + v / 2, b / 2, v / 2, { + start: 0, + end: 2 * Math.PI, + open: !1, + }); + }, + square: function(a, g, b, v) { + return ['M', a, g, 'L', a + b, g, a + b, g + v, a, g + v, 'Z']; + }, + triangle: function(a, g, b, v) { + return ['M', a + b / 2, g, 'L', a + b, g + v, a, g + v, 'Z']; + }, + 'triangle-down': function(a, g, b, v) { + return ['M', a, g, 'L', a + b, g, a + b / 2, g + v, 'Z']; + }, + diamond: function(a, g, b, v) { + return [ + 'M', + a + b / 2, + g, + 'L', + a + b, + g + v / 2, + a + b / 2, + g + v, + a, + g + v / 2, + 'Z', + ]; + }, + arc: function(a, g, b, v, c) { + var k = c.start, + d = c.r || b, + q = c.r || v || b, + e = c.end - 0.001; + b = c.innerR; + v = G(c.open, 0.001 > Math.abs(c.end - c.start - 2 * Math.PI)); + var y = Math.cos(k), + z = Math.sin(k), + h = Math.cos(e), + e = Math.sin(e); + c = 0.001 > c.end - k - Math.PI ? 0 : 1; + d = [ + 'M', + a + d * y, + g + q * z, + 'A', + d, + q, + 0, + c, + 1, + a + d * h, + g + q * e, + ]; + u(b) && + d.push( + v ? 'M' : 'L', + a + b * h, + g + b * e, + 'A', + b, + b, + 0, + c, + 0, + a + b * y, + g + b * z, + ); + d.push(v ? '' : 'Z'); + return d; + }, + callout: function(a, g, b, v, c) { + var d = Math.min((c && c.r) || 0, b, v), + k = d + 6, + q = c && c.anchorX; + c = c && c.anchorY; + var e; + e = [ + 'M', + a + d, + g, + 'L', + a + b - d, + g, + 'C', + a + b, + g, + a + b, + g, + a + b, + g + d, + 'L', + a + b, + g + v - d, + 'C', + a + b, + g + v, + a + b, + g + v, + a + b - d, + g + v, + 'L', + a + d, + g + v, + 'C', + a, + g + v, + a, + g + v, + a, + g + v - d, + 'L', + a, + g + d, + 'C', + a, + g, + a, + g, + a + d, + g, + ]; + q && q > b + ? c > g + k && c < g + v - k + ? e.splice( + 13, + 3, + 'L', + a + b, + c - 6, + a + b + 6, + c, + a + b, + c + 6, + a + b, + g + v - d, + ) + : e.splice( + 13, + 3, + 'L', + a + b, + v / 2, + q, + c, + a + b, + v / 2, + a + b, + g + v - d, + ) + : q && 0 > q + ? c > g + k && c < g + v - k + ? e.splice(33, 3, 'L', a, c + 6, a - 6, c, a, c - 6, a, g + d) + : e.splice(33, 3, 'L', a, v / 2, q, c, a, v / 2, a, g + d) + : c && c > v && q > a + k && q < a + b - k + ? e.splice( + 23, + 3, + 'L', + q + 6, + g + v, + q, + g + v + 6, + q - 6, + g + v, + a + d, + g + v, + ) + : c && + 0 > c && + q > a + k && + q < a + b - k && + e.splice(3, 3, 'L', q - 6, g, q, g - 6, q + 6, g, b - d, g); + return e; + }, + }, + clipRect: function(g, b, v, c) { + var d = a.uniqueKey(), + k = this.createElement('clipPath') + .attr({ id: d }) + .add(this.defs); + g = this.rect(g, b, v, c, 0).add(k); + g.id = d; + g.clipPath = k; + g.count = 0; + return g; + }, + text: function(a, g, b, v) { + var c = {}; + if (v && (this.allowHTML || !this.forExport)) return this.html(a, g, b); + c.x = Math.round(g || 0); + b && (c.y = Math.round(b)); + if (a || 0 === a) c.text = a; + a = this.createElement('text').attr(c); + v || + (a.xSetter = function(a, g, b) { + var v = b.getElementsByTagName('tspan'), + c, + d = b.getAttribute(g), + k; + for (k = 0; k < v.length; k++) + (c = v[k]), c.getAttribute(g) === d && c.setAttribute(g, a); + b.setAttribute(g, a); + }); + return a; + }, + fontMetrics: function(a, b) { + a = + a || + (b && b.style && b.style.fontSize) || + (this.style && this.style.fontSize); + a = /px/.test(a) + ? g(a) + : /em/.test(a) + ? parseFloat(a) * (b ? this.fontMetrics(null, b.parentNode).f : 16) + : 12; + b = 24 > a ? a + 3 : Math.round(1.2 * a); + return { h: b, b: Math.round(0.8 * b), f: a }; + }, + rotCorr: function(a, g, b) { + var v = a; + g && b && (v = Math.max(v * Math.cos(g * e), 4)); + return { x: (-a / 3) * Math.sin(g * e), y: v }; + }, + label: function(g, b, k, e, z, h, m, A, L) { + var y = this, + J = y.g('button' !== L && 'label'), + t = (J.text = y.text('', 0, 0, m).attr({ zIndex: 1 })), + x, + F, + n = 0, + B = 3, + l = 0, + C, + f, + Q, + G, + w, + R = {}, + I, + P, + r = /^url\((.*?)\)$/.test(e), + p = r, + K, + O, + N, + T; + L && J.addClass('highcharts-' + L); + p = r; + K = function() { + return ((I || 0) % 2) / 2; + }; + O = function() { + var a = t.element.style, + g = {}; + F = + (void 0 === C || void 0 === f || w) && u(t.textStr) && t.getBBox(); + J.width = (C || F.width || 0) + 2 * B + l; + J.height = (f || F.height || 0) + 2 * B; + P = B + y.fontMetrics(a && a.fontSize, t).b; + p && + (x || + ((J.box = x = y.symbols[e] || r ? y.symbol(e) : y.rect()), + x.addClass( + ('button' === L ? '' : 'highcharts-label-box') + + (L ? ' highcharts-' + L + '-box' : ''), + ), + x.add(J), + (a = K()), + (g.x = a), + (g.y = (A ? -P : 0) + a)), + (g.width = Math.round(J.width)), + (g.height = Math.round(J.height)), + x.attr(c(g, R)), + (R = {})); + }; + N = function() { + var a = l + B, + g; + g = A ? 0 : P; + u(C) && + F && + ('center' === w || 'right' === w) && + (a += { center: 0.5, right: 1 }[w] * (C - F.width)); + if (a !== t.x || g !== t.y) + t.attr('x', a), void 0 !== g && t.attr('y', g); + t.x = a; + t.y = g; + }; + T = function(a, g) { + x ? x.attr(a, g) : (R[a] = g); + }; + J.onAdd = function() { + t.add(J); + J.attr({ text: g || 0 === g ? g : '', x: b, y: k }); + x && u(z) && J.attr({ anchorX: z, anchorY: h }); + }; + J.widthSetter = function(g) { + C = a.isNumber(g) ? g : null; + }; + J.heightSetter = function(a) { + f = a; + }; + J['text-alignSetter'] = function(a) { + w = a; + }; + J.paddingSetter = function(a) { + u(a) && a !== B && ((B = J.padding = a), N()); + }; + J.paddingLeftSetter = function(a) { + u(a) && a !== l && ((l = a), N()); + }; + J.alignSetter = function(a) { + a = { left: 0, center: 0.5, right: 1 }[a]; + a !== n && ((n = a), F && J.attr({ x: Q })); + }; + J.textSetter = function(a) { + void 0 !== a && t.textSetter(a); + O(); + N(); + }; + J['stroke-widthSetter'] = function(a, g) { + a && (p = !0); + I = this['stroke-width'] = a; + T(g, a); + }; + J.strokeSetter = J.fillSetter = J.rSetter = function(a, g) { + 'r' !== g && ('fill' === g && a && (p = !0), (J[g] = a)); + T(g, a); + }; + J.anchorXSetter = function(a, g) { + z = J.anchorX = a; + T(g, Math.round(a) - K() - Q); + }; + J.anchorYSetter = function(a, g) { + h = J.anchorY = a; + T(g, a - G); + }; + J.xSetter = function(a) { + J.x = a; + n && (a -= n * ((C || F.width) + 2 * B)); + Q = Math.round(a); + J.attr('translateX', Q); + }; + J.ySetter = function(a) { + G = J.y = Math.round(a); + J.attr('translateY', G); + }; + var U = J.css; + return c(J, { + css: function(a) { + if (a) { + var g = {}; + a = q(a); + d(J.textProps, function(b) { + void 0 !== a[b] && ((g[b] = a[b]), delete a[b]); + }); + t.css(g); + } + return U.call(J, a); + }, + getBBox: function() { + return { + width: F.width + 2 * B, + height: F.height + 2 * B, + x: F.x - B, + y: F.y - B, + }; + }, + shadow: function(a) { + a && (O(), x && x.shadow(a)); + return J; + }, + destroy: function() { + v(J.element, 'mouseenter'); + v(J.element, 'mouseleave'); + t && (t = t.destroy()); + x && (x = x.destroy()); + E.prototype.destroy.call(J); + J = y = O = N = T = null; + }, + }); + }, + }); + a.Renderer = D; + })(M); + (function(a) { + var E = a.attr, + D = a.createElement, + H = a.css, + p = a.defined, + f = a.each, + l = a.extend, + r = a.isFirefox, + n = a.isMS, + w = a.isWebKit, + u = a.pick, + e = a.pInt, + h = a.SVGRenderer, + m = a.win, + d = a.wrap; + l(a.SVGElement.prototype, { + htmlCss: function(a) { + var b = this.element; + if ((b = a && 'SPAN' === b.tagName && a.width)) + delete a.width, (this.textWidth = b), this.updateTransform(); + a && + 'ellipsis' === a.textOverflow && + ((a.whiteSpace = 'nowrap'), (a.overflow = 'hidden')); + this.styles = l(this.styles, a); + H(this.element, a); + return this; + }, + htmlGetBBox: function() { + var a = this.element; + return { + x: a.offsetLeft, + y: a.offsetTop, + width: a.offsetWidth, + height: a.offsetHeight, + }; + }, + htmlUpdateTransform: function() { + if (this.added) { + var a = this.renderer, + b = this.element, + d = this.translateX || 0, + z = this.translateY || 0, + h = this.x || 0, + m = this.y || 0, + x = this.textAlign || 'left', + n = { left: 0, center: 0.5, right: 1 }[x], + t = this.styles; + H(b, { marginLeft: d, marginTop: z }); + this.shadows && + f(this.shadows, function(a) { + H(a, { marginLeft: d + 1, marginTop: z + 1 }); + }); + this.inverted && + f(b.childNodes, function(c) { + a.invertChild(c, b); + }); + if ('SPAN' === b.tagName) { + var l = this.rotation, + u = e(this.textWidth), + q = t && t.whiteSpace, + A = [l, x, b.innerHTML, this.textWidth, this.textAlign].join(); + A !== this.cTT && + ((t = a.fontMetrics(b.style.fontSize).b), + p(l) && this.setSpanRotation(l, n, t), + H(b, { width: '', whiteSpace: q || 'nowrap' }), + b.offsetWidth > u && + /[ \-]/.test(b.textContent || b.innerText) && + H(b, { + width: u + 'px', + display: 'block', + whiteSpace: q || 'normal', + }), + this.getSpanCorrection(b.offsetWidth, t, n, l, x)); + H(b, { + left: h + (this.xCorr || 0) + 'px', + top: m + (this.yCorr || 0) + 'px', + }); + w && (t = b.offsetHeight); + this.cTT = A; + } + } else this.alignOnAdd = !0; + }, + setSpanRotation: function(a, b, d) { + var c = {}, + k = this.renderer.getTransformKey(); + c[k] = c.transform = 'rotate(' + a + 'deg)'; + c[k + (r ? 'Origin' : '-origin')] = c.transformOrigin = + 100 * b + '% ' + d + 'px'; + H(this.element, c); + }, + getSpanCorrection: function(a, b, d) { + this.xCorr = -a * d; + this.yCorr = -b; + }, + }); + l(h.prototype, { + getTransformKey: function() { + return n && !/Edge/.test(m.navigator.userAgent) + ? '-ms-transform' + : w + ? '-webkit-transform' + : r + ? 'MozTransform' + : m.opera + ? '-o-transform' + : ''; + }, + html: function(a, b, k) { + var c = this.createElement('span'), + e = c.element, + h = c.renderer, + m = h.isSVG, + w = function(a, b) { + f(['opacity', 'visibility'], function(c) { + d(a, c + 'Setter', function(a, c, d, k) { + a.call(this, c, d, k); + b[d] = c; + }); + }); + }; + c.textSetter = function(a) { + a !== e.innerHTML && delete this.bBox; + this.textStr = a; + e.innerHTML = u(a, ''); + c.htmlUpdateTransform(); + }; + m && w(c, c.element.style); + c.xSetter = c.ySetter = c.alignSetter = c.rotationSetter = function( + a, + b, + ) { + 'align' === b && (b = 'textAlign'); + c[b] = a; + c.htmlUpdateTransform(); + }; + c.attr({ text: a, x: Math.round(b), y: Math.round(k) }).css({ + fontFamily: this.style.fontFamily, + fontSize: this.style.fontSize, + position: 'absolute', + }); + e.style.whiteSpace = 'nowrap'; + c.css = c.htmlCss; + m && + (c.add = function(a) { + var b, + d = h.box.parentNode, + k = []; + if ((this.parentGroup = a)) { + if (((b = a.div), !b)) { + for (; a; ) k.push(a), (a = a.parentGroup); + f(k.reverse(), function(a) { + function e(g, b) { + a[b] = g; + n + ? (q[h.getTransformKey()] = + 'translate(' + + (a.x || a.translateX) + + 'px,' + + (a.y || a.translateY) + + 'px)') + : 'translateX' === b + ? (q.left = g + 'px') + : (q.top = g + 'px'); + a.doTransform = !0; + } + var q, + g = E(a.element, 'class'); + g && (g = { className: g }); + b = a.div = + a.div || + D( + 'div', + g, + { + position: 'absolute', + left: (a.translateX || 0) + 'px', + top: (a.translateY || 0) + 'px', + display: a.display, + opacity: a.opacity, + pointerEvents: a.styles && a.styles.pointerEvents, + }, + b || d, + ); + q = b.style; + l(a, { + classSetter: (function(a) { + return function(g) { + this.element.setAttribute('class', g); + a.className = g; + }; + })(b), + on: function() { + k[0].div && c.on.apply({ element: k[0].div }, arguments); + return a; + }, + translateXSetter: e, + translateYSetter: e, + }); + w(a, q); + }); + } + } else b = d; + b.appendChild(e); + c.added = !0; + c.alignOnAdd && c.htmlUpdateTransform(); + return c; + }); + return c; + }, + }); + })(M); + (function(a) { + function E() { + var n = a.defaultOptions.global, + l = r.moment; + if (n.timezone) { + if (l) + return function(a) { + return -l.tz(a, n.timezone).utcOffset(); + }; + a.error(25); + } + return n.useUTC && n.getTimezoneOffset; + } + function D() { + var n = a.defaultOptions.global, + f, + u = n.useUTC, + e = u ? 'getUTC' : 'get', + h = u ? 'setUTC' : 'set', + m = 'Minutes Hours Day Date Month FullYear'.split(' '), + d = m.concat(['Milliseconds', 'Seconds']); + a.Date = f = n.Date || r.Date; + f.hcTimezoneOffset = u && n.timezoneOffset; + f.hcGetTimezoneOffset = E(); + f.hcHasTimeZone = !(!f.hcTimezoneOffset && !f.hcGetTimezoneOffset); + f.hcMakeTime = function(a, b, d, e, h, m) { + var c; + u + ? ((c = f.UTC.apply(0, arguments)), (c += p(c))) + : (c = new f(a, b, l(d, 1), l(e, 0), l(h, 0), l(m, 0)).getTime()); + return c; + }; + for (n = 0; n < m.length; n++) f['hcGet' + m[n]] = e + m[n]; + for (n = 0; n < d.length; n++) f['hcSet' + d[n]] = h + d[n]; + } + var H = a.color, + p = a.getTZOffset, + f = a.merge, + l = a.pick, + r = a.win; + a.defaultOptions = { + colors: '#7cb5ec #434348 #90ed7d #f7a35c #8085e9 #f15c80 #e4d354 #2b908f #f45b5b #91e8e1'.split( + ' ', + ), + symbols: ['circle', 'diamond', 'square', 'triangle', 'triangle-down'], + lang: { + loading: 'Loading...', + months: 'January February March April May June July August September October November December'.split( + ' ', + ), + shortMonths: 'Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec'.split( + ' ', + ), + weekdays: 'Sunday Monday Tuesday Wednesday Thursday Friday Saturday'.split( + ' ', + ), + decimalPoint: '.', + numericSymbols: 'kMGTPE'.split(''), + resetZoom: 'Reset zoom', + resetZoomTitle: 'Reset zoom level 1:1', + thousandsSep: ' ', + }, + global: { useUTC: !0 }, + chart: { + borderRadius: 0, + defaultSeriesType: 'line', + ignoreHiddenSeries: !0, + spacing: [10, 10, 15, 10], + resetZoomButton: { + theme: { zIndex: 6 }, + position: { align: 'right', x: -10, y: 10 }, + }, + width: null, + height: null, + borderColor: '#335cad', + backgroundColor: '#ffffff', + plotBorderColor: '#cccccc', + }, + title: { + text: 'Chart title', + align: 'center', + margin: 15, + widthAdjust: -44, + }, + subtitle: { text: '', align: 'center', widthAdjust: -44 }, + plotOptions: {}, + labels: { style: { position: 'absolute', color: '#333333' } }, + legend: { + enabled: !0, + align: 'center', + layout: 'horizontal', + labelFormatter: function() { + return this.name; + }, + borderColor: '#999999', + borderRadius: 0, + navigation: { activeColor: '#003399', inactiveColor: '#cccccc' }, + itemStyle: { + color: '#333333', + fontSize: '12px', + fontWeight: 'bold', + textOverflow: 'ellipsis', + }, + itemHoverStyle: { color: '#000000' }, + itemHiddenStyle: { color: '#cccccc' }, + shadow: !1, + itemCheckboxStyle: { + position: 'absolute', + width: '13px', + height: '13px', + }, + squareSymbol: !0, + symbolPadding: 5, + verticalAlign: 'bottom', + x: 0, + y: 0, + title: { style: { fontWeight: 'bold' } }, + }, + loading: { + labelStyle: { fontWeight: 'bold', position: 'relative', top: '45%' }, + style: { + position: 'absolute', + backgroundColor: '#ffffff', + opacity: 0.5, + textAlign: 'center', + }, + }, + tooltip: { + enabled: !0, + animation: a.svg, + borderRadius: 3, + dateTimeLabelFormats: { + millisecond: '%A, %b %e, %H:%M:%S.%L', + second: '%A, %b %e, %H:%M:%S', + minute: '%A, %b %e, %H:%M', + hour: '%A, %b %e, %H:%M', + day: '%A, %b %e, %Y', + week: 'Week from %A, %b %e, %Y', + month: '%B %Y', + year: '%Y', + }, + footerFormat: '', + padding: 8, + snap: a.isTouchDevice ? 25 : 10, + backgroundColor: H('#f7f7f7') + .setOpacity(0.85) + .get(), + borderWidth: 1, + headerFormat: + '\x3cspan style\x3d"font-size: 10px"\x3e{point.key}\x3c/span\x3e\x3cbr/\x3e', + pointFormat: + '\x3cspan style\x3d"color:{point.color}"\x3e\u25cf\x3c/span\x3e {series.name}: \x3cb\x3e{point.y}\x3c/b\x3e\x3cbr/\x3e', + shadow: !0, + style: { + color: '#333333', + cursor: 'default', + fontSize: '12px', + pointerEvents: 'none', + whiteSpace: 'nowrap', + }, + }, + credits: { + enabled: !0, + href: 'http://www.highcharts.com', + position: { align: 'right', x: -10, verticalAlign: 'bottom', y: -5 }, + style: { cursor: 'pointer', color: '#999999', fontSize: '9px' }, + text: 'Highcharts.com', + }, + }; + a.setOptions = function(n) { + a.defaultOptions = f(!0, a.defaultOptions, n); + D(); + return a.defaultOptions; + }; + a.getOptions = function() { + return a.defaultOptions; + }; + a.defaultPlotOptions = a.defaultOptions.plotOptions; + D(); + })(M); + (function(a) { + var E = a.correctFloat, + D = a.defined, + H = a.destroyObjectProperties, + p = a.isNumber, + f = a.merge, + l = a.pick, + r = a.deg2rad; + a.Tick = function(a, l, f, e) { + this.axis = a; + this.pos = l; + this.type = f || ''; + this.isNewLabel = this.isNew = !0; + f || e || this.addLabel(); + }; + a.Tick.prototype = { + addLabel: function() { + var a = this.axis, + w = a.options, + u = a.chart, + e = a.categories, + h = a.names, + m = this.pos, + d = w.labels, + c = a.tickPositions, + b = m === c[0], + k = m === c[c.length - 1], + h = e ? l(e[m], h[m], m) : m, + e = this.label, + c = c.info, + z; + a.isDatetimeAxis && + c && + (z = w.dateTimeLabelFormats[c.higherRanks[m] || c.unitName]); + this.isFirst = b; + this.isLast = k; + w = a.labelFormatter.call({ + axis: a, + chart: u, + isFirst: b, + isLast: k, + dateTimeLabelFormat: z, + value: a.isLog ? E(a.lin2log(h)) : h, + pos: m, + }); + D(e) + ? e && e.attr({ text: w }) + : ((this.labelLength = + (this.label = e = + D(w) && d.enabled + ? u.renderer + .text(w, 0, 0, d.useHTML) + .css(f(d.style)) + .add(a.labelGroup) + : null) && e.getBBox().width), + (this.rotation = 0)); + }, + getLabelSize: function() { + return this.label + ? this.label.getBBox()[this.axis.horiz ? 'height' : 'width'] + : 0; + }, + handleOverflow: function(a) { + var f = this.axis, + n = f.options.labels, + e = a.x, + h = f.chart.chartWidth, + m = f.chart.spacing, + d = l(f.labelLeft, Math.min(f.pos, m[3])), + m = l( + f.labelRight, + Math.max(f.isRadial ? 0 : f.pos + f.len, h - m[1]), + ), + c = this.label, + b = this.rotation, + k = { left: 0, center: 0.5, right: 1 }[ + f.labelAlign || c.attr('align') + ], + z = c.getBBox().width, + B = f.getSlotWidth(), + I = B, + x = 1, + p, + t = {}; + if (b || !1 === n.overflow) + 0 > b && e - k * z < d + ? (p = Math.round(e / Math.cos(b * r) - d)) + : 0 < b && + e + k * z > m && + (p = Math.round((h - e) / Math.cos(b * r))); + else if ( + ((h = e + (1 - k) * z), + e - k * z < d + ? (I = a.x + I * (1 - k) - d) + : h > m && ((I = m - a.x + I * k), (x = -1)), + (I = Math.min(B, I)), + I < B && + 'center' === f.labelAlign && + (a.x += x * (B - I - k * (B - Math.min(z, I)))), + z > I || (f.autoRotation && (c.styles || {}).width)) + ) + p = I; + p && + ((t.width = p), + (n.style || {}).textOverflow || (t.textOverflow = 'ellipsis'), + c.css(t)); + }, + getPosition: function(a, f, l, e) { + var h = this.axis, + m = h.chart, + d = (e && m.oldChartHeight) || m.chartHeight; + return { + x: a + ? h.translate(f + l, null, null, e) + h.transB + : h.left + + h.offset + + (h.opposite + ? ((e && m.oldChartWidth) || m.chartWidth) - h.right - h.left + : 0), + y: a + ? d - h.bottom + h.offset - (h.opposite ? h.height : 0) + : d - h.translate(f + l, null, null, e) - h.transB, + }; + }, + getLabelPosition: function(a, f, l, e, h, m, d, c) { + var b = this.axis, + k = b.transA, + z = b.reversed, + B = b.staggerLines, + n = b.tickRotCorr || { x: 0, y: 0 }, + x = h.y, + u = + e || b.reserveSpaceDefault + ? 0 + : -b.labelOffset * ('center' === b.labelAlign ? 0.5 : 1); + D(x) || + (x = + 0 === b.side + ? l.rotation + ? -8 + : -l.getBBox().height + : 2 === b.side + ? n.y + 8 + : Math.cos(l.rotation * r) * (n.y - l.getBBox(!1, 0).height / 2)); + a = a + h.x + u + n.x - (m && e ? m * k * (z ? -1 : 1) : 0); + f = f + x - (m && !e ? m * k * (z ? 1 : -1) : 0); + B && + ((l = (d / (c || 1)) % B), + b.opposite && (l = B - l - 1), + (f += (b.labelOffset / B) * l)); + return { x: a, y: Math.round(f) }; + }, + getMarkPath: function(a, f, l, e, h, m) { + return m.crispLine( + ['M', a, f, 'L', a + (h ? 0 : -l), f + (h ? l : 0)], + e, + ); + }, + renderGridLine: function(a, f, l) { + var e = this.axis, + h = e.options, + m = this.gridLine, + d = {}, + c = this.pos, + b = this.type, + k = e.tickmarkOffset, + z = e.chart.renderer, + B = b ? b + 'Grid' : 'grid', + n = h[B + 'LineWidth'], + x = h[B + 'LineColor'], + h = h[B + 'LineDashStyle']; + m || + ((d.stroke = x), + (d['stroke-width'] = n), + h && (d.dashstyle = h), + b || (d.zIndex = 1), + a && (d.opacity = 0), + (this.gridLine = m = z + .path() + .attr(d) + .addClass('highcharts-' + (b ? b + '-' : '') + 'grid-line') + .add(e.gridGroup))); + if ( + !a && + m && + (a = e.getPlotLinePath(c + k, m.strokeWidth() * l, a, !0)) + ) + m[this.isNew ? 'attr' : 'animate']({ d: a, opacity: f }); + }, + renderMark: function(a, f, u) { + var e = this.axis, + h = e.options, + m = e.chart.renderer, + d = this.type, + c = d ? d + 'Tick' : 'tick', + b = e.tickSize(c), + k = this.mark, + z = !k, + B = a.x; + a = a.y; + var n = l(h[c + 'Width'], !d && e.isXAxis ? 1 : 0), + h = h[c + 'Color']; + b && + (e.opposite && (b[0] = -b[0]), + z && + ((this.mark = k = m + .path() + .addClass('highcharts-' + (d ? d + '-' : '') + 'tick') + .add(e.axisGroup)), + k.attr({ stroke: h, 'stroke-width': n })), + k[z ? 'attr' : 'animate']({ + d: this.getMarkPath(B, a, b[0], k.strokeWidth() * u, e.horiz, m), + opacity: f, + })); + }, + renderLabel: function(a, f, u, e) { + var h = this.axis, + m = h.horiz, + d = h.options, + c = this.label, + b = d.labels, + k = b.step, + h = h.tickmarkOffset, + z = !0, + B = a.x; + a = a.y; + c && + p(B) && + ((c.xy = a = this.getLabelPosition(B, a, c, m, b, h, e, k)), + (this.isFirst && !this.isLast && !l(d.showFirstLabel, 1)) || + (this.isLast && !this.isFirst && !l(d.showLastLabel, 1)) + ? (z = !1) + : !m || + b.step || + b.rotation || + f || + 0 === u || + this.handleOverflow(a), + k && e % k && (z = !1), + z && p(a.y) + ? ((a.opacity = u), + c[this.isNewLabel ? 'attr' : 'animate'](a), + (this.isNewLabel = !1)) + : (c.attr('y', -9999), (this.isNewLabel = !0))); + }, + render: function(a, f, u) { + var e = this.axis, + h = e.horiz, + m = this.getPosition(h, this.pos, e.tickmarkOffset, f), + d = m.x, + c = m.y, + e = (h && d === e.pos + e.len) || (!h && c === e.pos) ? -1 : 1; + u = l(u, 1); + this.isActive = !0; + this.renderGridLine(f, u, e); + this.renderMark(m, u, e); + this.renderLabel(m, f, u, a); + this.isNew = !1; + }, + destroy: function() { + H(this, this.axis); + }, + }; + })(M); + var V = (function(a) { + var E = a.addEvent, + D = a.animObject, + H = a.arrayMax, + p = a.arrayMin, + f = a.color, + l = a.correctFloat, + r = a.defaultOptions, + n = a.defined, + w = a.deg2rad, + u = a.destroyObjectProperties, + e = a.each, + h = a.extend, + m = a.fireEvent, + d = a.format, + c = a.getMagnitude, + b = a.grep, + k = a.inArray, + z = a.isArray, + B = a.isNumber, + I = a.isString, + x = a.merge, + K = a.normalizeTickInterval, + t = a.objectEach, + C = a.pick, + N = a.removeEvent, + q = a.splat, + A = a.syncTimeout, + F = a.Tick, + G = function() { + this.init.apply(this, arguments); + }; + a.extend(G.prototype, { + defaultOptions: { + dateTimeLabelFormats: { + millisecond: '%H:%M:%S.%L', + second: '%H:%M:%S', + minute: '%H:%M', + hour: '%H:%M', + day: '%e. %b', + week: '%e. %b', + month: "%b '%y", + year: '%Y', + }, + endOnTick: !1, + labels: { + enabled: !0, + style: { color: '#666666', cursor: 'default', fontSize: '11px' }, + x: 0, + }, + maxPadding: 0.01, + minorTickLength: 2, + minorTickPosition: 'outside', + minPadding: 0.01, + startOfWeek: 1, + startOnTick: !1, + tickLength: 10, + tickmarkPlacement: 'between', + tickPixelInterval: 100, + tickPosition: 'outside', + title: { align: 'middle', style: { color: '#666666' } }, + type: 'linear', + minorGridLineColor: '#f2f2f2', + minorGridLineWidth: 1, + minorTickColor: '#999999', + lineColor: '#ccd6eb', + lineWidth: 1, + gridLineColor: '#e6e6e6', + tickColor: '#ccd6eb', + }, + defaultYAxisOptions: { + endOnTick: !0, + tickPixelInterval: 72, + showLastLabel: !0, + labels: { x: -8 }, + maxPadding: 0.05, + minPadding: 0.05, + startOnTick: !0, + title: { rotation: 270, text: 'Values' }, + stackLabels: { + allowOverlap: !1, + enabled: !1, + formatter: function() { + return a.numberFormat(this.total, -1); + }, + style: { + fontSize: '11px', + fontWeight: 'bold', + color: '#000000', + textOutline: '1px contrast', + }, + }, + gridLineWidth: 1, + lineWidth: 0, + }, + defaultLeftAxisOptions: { labels: { x: -15 }, title: { rotation: 270 } }, + defaultRightAxisOptions: { labels: { x: 15 }, title: { rotation: 90 } }, + defaultBottomAxisOptions: { + labels: { autoRotation: [-45], x: 0 }, + title: { rotation: 0 }, + }, + defaultTopAxisOptions: { + labels: { autoRotation: [-45], x: 0 }, + title: { rotation: 0 }, + }, + init: function(a, b) { + var g = b.isX, + v = this; + v.chart = a; + v.horiz = a.inverted && !v.isZAxis ? !g : g; + v.isXAxis = g; + v.coll = v.coll || (g ? 'xAxis' : 'yAxis'); + v.opposite = b.opposite; + v.side = + b.side || (v.horiz ? (v.opposite ? 0 : 2) : v.opposite ? 1 : 3); + v.setOptions(b); + var c = this.options, + d = c.type; + v.labelFormatter = c.labels.formatter || v.defaultLabelFormatter; + v.userOptions = b; + v.minPixelPadding = 0; + v.reversed = c.reversed; + v.visible = !1 !== c.visible; + v.zoomEnabled = !1 !== c.zoomEnabled; + v.hasNames = 'category' === d || !0 === c.categories; + v.categories = c.categories || v.hasNames; + v.names = v.names || []; + v.plotLinesAndBandsGroups = {}; + v.isLog = 'logarithmic' === d; + v.isDatetimeAxis = 'datetime' === d; + v.positiveValuesOnly = v.isLog && !v.allowNegativeLog; + v.isLinked = n(c.linkedTo); + v.ticks = {}; + v.labelEdge = []; + v.minorTicks = {}; + v.plotLinesAndBands = []; + v.alternateBands = {}; + v.len = 0; + v.minRange = v.userMinRange = c.minRange || c.maxZoom; + v.range = c.range; + v.offset = c.offset || 0; + v.stacks = {}; + v.oldStacks = {}; + v.stacksTouched = 0; + v.max = null; + v.min = null; + v.crosshair = C( + c.crosshair, + q(a.options.tooltip.crosshairs)[g ? 0 : 1], + !1, + ); + b = v.options.events; + -1 === k(v, a.axes) && + (g ? a.axes.splice(a.xAxis.length, 0, v) : a.axes.push(v), + a[v.coll].push(v)); + v.series = v.series || []; + a.inverted && + !v.isZAxis && + g && + void 0 === v.reversed && + (v.reversed = !0); + t(b, function(a, g) { + E(v, g, a); + }); + v.lin2log = c.linearToLogConverter || v.lin2log; + v.isLog && ((v.val2lin = v.log2lin), (v.lin2val = v.lin2log)); + }, + setOptions: function(a) { + this.options = x( + this.defaultOptions, + 'yAxis' === this.coll && this.defaultYAxisOptions, + [ + this.defaultTopAxisOptions, + this.defaultRightAxisOptions, + this.defaultBottomAxisOptions, + this.defaultLeftAxisOptions, + ][this.side], + x(r[this.coll], a), + ); + }, + defaultLabelFormatter: function() { + var g = this.axis, + b = this.value, + c = g.categories, + k = this.dateTimeLabelFormat, + e = r.lang, + q = e.numericSymbols, + e = e.numericSymbolMagnitude || 1e3, + h = q && q.length, + m, + z = g.options.labels.format, + g = g.isLog ? Math.abs(b) : g.tickInterval; + if (z) m = d(z, this); + else if (c) m = b; + else if (k) m = a.dateFormat(k, b); + else if (h && 1e3 <= g) + for (; h-- && void 0 === m; ) + (c = Math.pow(e, h + 1)), + g >= c && + 0 === (10 * b) % c && + null !== q[h] && + 0 !== b && + (m = a.numberFormat(b / c, -1) + q[h]); + void 0 === m && + (m = + 1e4 <= Math.abs(b) + ? a.numberFormat(b, -1) + : a.numberFormat(b, -1, void 0, '')); + return m; + }, + getSeriesExtremes: function() { + var a = this, + v = a.chart; + a.hasVisibleSeries = !1; + a.dataMin = a.dataMax = a.threshold = null; + a.softThreshold = !a.isXAxis; + a.buildStacks && a.buildStacks(); + e(a.series, function(g) { + if (g.visible || !v.options.chart.ignoreHiddenSeries) { + var c = g.options, + d = c.threshold, + k; + a.hasVisibleSeries = !0; + a.positiveValuesOnly && 0 >= d && (d = null); + if (a.isXAxis) + (c = g.xData), + c.length && + ((g = p(c)), + (k = H(c)), + B(g) || g instanceof Date || ((c = b(c, B)), (g = p(c))), + (a.dataMin = Math.min(C(a.dataMin, c[0], g), g)), + (a.dataMax = Math.max(C(a.dataMax, c[0], k), k))); + else if ( + (g.getExtremes(), + (k = g.dataMax), + (g = g.dataMin), + n(g) && + n(k) && + ((a.dataMin = Math.min(C(a.dataMin, g), g)), + (a.dataMax = Math.max(C(a.dataMax, k), k))), + n(d) && (a.threshold = d), + !c.softThreshold || a.positiveValuesOnly) + ) + a.softThreshold = !1; + } + }); + }, + translate: function(a, b, c, d, k, e) { + var g = this.linkedParent || this, + v = 1, + q = 0, + h = d ? g.oldTransA : g.transA; + d = d ? g.oldMin : g.min; + var m = g.minPixelPadding; + k = (g.isOrdinal || g.isBroken || (g.isLog && k)) && g.lin2val; + h || (h = g.transA); + c && ((v *= -1), (q = g.len)); + g.reversed && ((v *= -1), (q -= v * (g.sector || g.len))); + b + ? ((a = (a * v + q - m) / h + d), k && (a = g.lin2val(a))) + : (k && (a = g.val2lin(a)), + (a = B(d) + ? v * (a - d) * h + q + v * m + (B(e) ? h * e : 0) + : void 0)); + return a; + }, + toPixels: function(a, b) { + return ( + this.translate(a, !1, !this.horiz, null, !0) + (b ? 0 : this.pos) + ); + }, + toValue: function(a, b) { + return this.translate( + a - (b ? 0 : this.pos), + !0, + !this.horiz, + null, + !0, + ); + }, + getPlotLinePath: function(a, b, c, d, k) { + var g = this.chart, + v = this.left, + q = this.top, + e, + h, + m = (c && g.oldChartHeight) || g.chartHeight, + z = (c && g.oldChartWidth) || g.chartWidth, + A; + e = this.transB; + var t = function(a, g, b) { + if (a < g || a > b) d ? (a = Math.min(Math.max(g, a), b)) : (A = !0); + return a; + }; + k = C(k, this.translate(a, null, null, c)); + a = c = Math.round(k + e); + e = h = Math.round(m - k - e); + B(k) + ? this.horiz + ? ((e = q), + (h = m - this.bottom), + (a = c = t(a, v, v + this.width))) + : ((a = v), + (c = z - this.right), + (e = h = t(e, q, q + this.height))) + : ((A = !0), (d = !1)); + return A && !d + ? null + : g.renderer.crispLine(['M', a, e, 'L', c, h], b || 1); + }, + getLinearTickPositions: function(a, b, c) { + var g, + v = l(Math.floor(b / a) * a); + c = l(Math.ceil(c / a) * a); + var d = [], + k; + l(v + a) === v && (k = 20); + if (this.single) return [b]; + for (b = v; b <= c; ) { + d.push(b); + b = l(b + a, k); + if (b === g) break; + g = b; + } + return d; + }, + getMinorTickInterval: function() { + var a = this.options; + return !0 === a.minorTicks + ? C(a.minorTickInterval, 'auto') + : !1 === a.minorTicks + ? null + : a.minorTickInterval; + }, + getMinorTickPositions: function() { + var a = this, + b = a.options, + c = a.tickPositions, + d = a.minorTickInterval, + k = [], + q = a.pointRangePadding || 0, + h = a.min - q, + q = a.max + q, + m = q - h; + if (m && m / d < a.len / 3) + if (a.isLog) + e(this.paddedTicks, function(g, b, v) { + b && + k.push.apply(k, a.getLogTickPositions(d, v[b - 1], v[b], !0)); + }); + else if (a.isDatetimeAxis && 'auto' === this.getMinorTickInterval()) + k = k.concat( + a.getTimeTicks( + a.normalizeTimeTickInterval(d), + h, + q, + b.startOfWeek, + ), + ); + else + for (b = h + ((c[0] - h) % d); b <= q && b !== k[0]; b += d) + k.push(b); + 0 !== k.length && a.trimTicks(k); + return k; + }, + adjustForMinRange: function() { + var a = this.options, + b = this.min, + c = this.max, + d, + k, + q, + h, + m, + z, + A, + t; + this.isXAxis && + void 0 === this.minRange && + !this.isLog && + (n(a.min) || n(a.max) + ? (this.minRange = null) + : (e(this.series, function(a) { + z = a.xData; + for (h = A = a.xIncrement ? 1 : z.length - 1; 0 < h; h--) + if (((m = z[h] - z[h - 1]), void 0 === q || m < q)) q = m; + }), + (this.minRange = Math.min(5 * q, this.dataMax - this.dataMin)))); + c - b < this.minRange && + ((k = this.dataMax - this.dataMin >= this.minRange), + (t = this.minRange), + (d = (t - c + b) / 2), + (d = [b - d, C(a.min, b - d)]), + k && (d[2] = this.isLog ? this.log2lin(this.dataMin) : this.dataMin), + (b = H(d)), + (c = [b + t, C(a.max, b + t)]), + k && (c[2] = this.isLog ? this.log2lin(this.dataMax) : this.dataMax), + (c = p(c)), + c - b < t && ((d[0] = c - t), (d[1] = C(a.min, c - t)), (b = H(d)))); + this.min = b; + this.max = c; + }, + getClosest: function() { + var a; + this.categories + ? (a = 1) + : e(this.series, function(g) { + var b = g.closestPointRange, + v = g.visible || !g.chart.options.chart.ignoreHiddenSeries; + !g.noSharedTooltip && + n(b) && + v && + (a = n(a) ? Math.min(a, b) : b); + }); + return a; + }, + nameToX: function(a) { + var g = z(this.categories), + b = g ? this.categories : this.names, + c = a.options.x, + d; + a.series.requireSorting = !1; + n(c) || + (c = + !1 === this.options.uniqueNames + ? a.series.autoIncrement() + : k(a.name, b)); + -1 === c ? g || (d = b.length) : (d = c); + void 0 !== d && (this.names[d] = a.name); + return d; + }, + updateNames: function() { + var a = this; + 0 < this.names.length && + ((this.names.length = 0), + (this.minRange = this.userMinRange), + e(this.series || [], function(g) { + g.xIncrement = null; + if (!g.points || g.isDirtyData) g.processData(), g.generatePoints(); + e(g.points, function(b, v) { + var c; + b.options && + ((c = a.nameToX(b)), + void 0 !== c && c !== b.x && ((b.x = c), (g.xData[v] = c))); + }); + })); + }, + setAxisTranslation: function(a) { + var g = this, + b = g.max - g.min, + c = g.axisPointRange || 0, + d, + k = 0, + q = 0, + h = g.linkedParent, + m = !!g.categories, + z = g.transA, + A = g.isXAxis; + if (A || m || c) + (d = g.getClosest()), + h + ? ((k = h.minPointOffset), (q = h.pointRangePadding)) + : e(g.series, function(a) { + var b = m + ? 1 + : A + ? C(a.options.pointRange, d, 0) + : g.axisPointRange || 0; + a = a.options.pointPlacement; + c = Math.max(c, b); + g.single || + ((k = Math.max(k, I(a) ? 0 : b / 2)), + (q = Math.max(q, 'on' === a ? 0 : b))); + }), + (h = g.ordinalSlope && d ? g.ordinalSlope / d : 1), + (g.minPointOffset = k *= h), + (g.pointRangePadding = q *= h), + (g.pointRange = Math.min(c, b)), + A && (g.closestPointRange = d); + a && (g.oldTransA = z); + g.translationSlope = g.transA = z = + g.options.staticScale || g.len / (b + q || 1); + g.transB = g.horiz ? g.left : g.bottom; + g.minPixelPadding = z * k; + }, + minFromRange: function() { + return this.max - this.range; + }, + setTickInterval: function(g) { + var b = this, + d = b.chart, + k = b.options, + q = b.isLog, + h = b.log2lin, + z = b.isDatetimeAxis, + A = b.isXAxis, + t = b.isLinked, + x = k.maxPadding, + f = k.minPadding, + F = k.tickInterval, + u = k.tickPixelInterval, + G = b.categories, + p = b.threshold, + I = b.softThreshold, + r, + w, + N, + D; + z || G || t || this.getTickAmount(); + N = C(b.userMin, k.min); + D = C(b.userMax, k.max); + t + ? ((b.linkedParent = d[b.coll][k.linkedTo]), + (d = b.linkedParent.getExtremes()), + (b.min = C(d.min, d.dataMin)), + (b.max = C(d.max, d.dataMax)), + k.type !== b.linkedParent.options.type && a.error(11, 1)) + : (!I && + n(p) && + (b.dataMin >= p + ? ((r = p), (f = 0)) + : b.dataMax <= p && ((w = p), (x = 0))), + (b.min = C(N, r, b.dataMin)), + (b.max = C(D, w, b.dataMax))); + q && + (b.positiveValuesOnly && + !g && + 0 >= Math.min(b.min, C(b.dataMin, b.min)) && + a.error(10, 1), + (b.min = l(h(b.min), 15)), + (b.max = l(h(b.max), 15))); + b.range && + n(b.max) && + ((b.userMin = b.min = N = Math.max(b.dataMin, b.minFromRange())), + (b.userMax = D = b.max), + (b.range = null)); + m(b, 'foundExtremes'); + b.beforePadding && b.beforePadding(); + b.adjustForMinRange(); + !(G || b.axisPointRange || b.usePercentage || t) && + n(b.min) && + n(b.max) && + (h = b.max - b.min) && + (!n(N) && f && (b.min -= h * f), !n(D) && x && (b.max += h * x)); + B(k.softMin) && !B(b.userMin) && (b.min = Math.min(b.min, k.softMin)); + B(k.softMax) && !B(b.userMax) && (b.max = Math.max(b.max, k.softMax)); + B(k.floor) && (b.min = Math.max(b.min, k.floor)); + B(k.ceiling) && (b.max = Math.min(b.max, k.ceiling)); + I && + n(b.dataMin) && + ((p = p || 0), + !n(N) && b.min < p && b.dataMin >= p + ? (b.min = p) + : !n(D) && b.max > p && b.dataMax <= p && (b.max = p)); + b.tickInterval = + b.min === b.max || void 0 === b.min || void 0 === b.max + ? 1 + : t && !F && u === b.linkedParent.options.tickPixelInterval + ? (F = b.linkedParent.tickInterval) + : C( + F, + this.tickAmount + ? (b.max - b.min) / Math.max(this.tickAmount - 1, 1) + : void 0, + G ? 1 : ((b.max - b.min) * u) / Math.max(b.len, u), + ); + A && + !g && + e(b.series, function(a) { + a.processData(b.min !== b.oldMin || b.max !== b.oldMax); + }); + b.setAxisTranslation(!0); + b.beforeSetTickPositions && b.beforeSetTickPositions(); + b.postProcessTickInterval && + (b.tickInterval = b.postProcessTickInterval(b.tickInterval)); + b.pointRange && + !F && + (b.tickInterval = Math.max(b.pointRange, b.tickInterval)); + g = C(k.minTickInterval, b.isDatetimeAxis && b.closestPointRange); + !F && b.tickInterval < g && (b.tickInterval = g); + z || + q || + F || + (b.tickInterval = K( + b.tickInterval, + null, + c(b.tickInterval), + C( + k.allowDecimals, + !( + 0.5 < b.tickInterval && + 5 > b.tickInterval && + 1e3 < b.max && + 9999 > b.max + ), + ), + !!this.tickAmount, + )); + this.tickAmount || (b.tickInterval = b.unsquish()); + this.setTickPositions(); + }, + setTickPositions: function() { + var a = this.options, + b, + c = a.tickPositions; + b = this.getMinorTickInterval(); + var d = a.tickPositioner, + k = a.startOnTick, + q = a.endOnTick; + this.tickmarkOffset = + this.categories && + 'between' === a.tickmarkPlacement && + 1 === this.tickInterval + ? 0.5 + : 0; + this.minorTickInterval = + 'auto' === b && this.tickInterval ? this.tickInterval / 5 : b; + this.single = + this.min === this.max && + n(this.min) && + !this.tickAmount && + (parseInt(this.min, 10) === this.min || !1 !== a.allowDecimals); + this.tickPositions = b = c && c.slice(); + !b && + ((b = this.isDatetimeAxis + ? this.getTimeTicks( + this.normalizeTimeTickInterval(this.tickInterval, a.units), + this.min, + this.max, + a.startOfWeek, + this.ordinalPositions, + this.closestPointRange, + !0, + ) + : this.isLog + ? this.getLogTickPositions(this.tickInterval, this.min, this.max) + : this.getLinearTickPositions( + this.tickInterval, + this.min, + this.max, + )), + b.length > this.len && + ((b = [b[0], b.pop()]), b[0] === b[1] && (b.length = 1)), + (this.tickPositions = b), + d && (d = d.apply(this, [this.min, this.max]))) && + (this.tickPositions = b = d); + this.paddedTicks = b.slice(0); + this.trimTicks(b, k, q); + this.isLinked || + (this.single && + 2 > b.length && + ((this.min -= 0.5), (this.max += 0.5)), + c || d || this.adjustTickAmount()); + }, + trimTicks: function(a, b, c) { + var g = a[0], + d = a[a.length - 1], + k = this.minPointOffset || 0; + if (!this.isLinked) { + if (b && -Infinity !== g) this.min = g; + else for (; this.min - k > a[0]; ) a.shift(); + if (c) this.max = d; + else for (; this.max + k < a[a.length - 1]; ) a.pop(); + 0 === a.length && + n(g) && + !this.options.tickPositions && + a.push((d + g) / 2); + } + }, + alignToOthers: function() { + var a = {}, + b, + c = this.options; + !1 === this.chart.options.chart.alignTicks || + !1 === c.alignTicks || + this.isLog || + e(this.chart[this.coll], function(g) { + var c = g.options, + c = [g.horiz ? c.left : c.top, c.width, c.height, c.pane].join(); + g.series.length && (a[c] ? (b = !0) : (a[c] = 1)); + }); + return b; + }, + getTickAmount: function() { + var a = this.options, + b = a.tickAmount, + c = a.tickPixelInterval; + !n(a.tickInterval) && + this.len < c && + !this.isRadial && + !this.isLog && + a.startOnTick && + a.endOnTick && + (b = 2); + !b && this.alignToOthers() && (b = Math.ceil(this.len / c) + 1); + 4 > b && ((this.finalTickAmt = b), (b = 5)); + this.tickAmount = b; + }, + adjustTickAmount: function() { + var a = this.tickInterval, + b = this.tickPositions, + c = this.tickAmount, + d = this.finalTickAmt, + k = b && b.length, + q = C(this.threshold, this.softThreshold ? 0 : null); + if (this.hasData()) { + if (k < c) { + for (; b.length < c; ) + b.length % 2 || this.min === q + ? b.push(l(b[b.length - 1] + a)) + : b.unshift(l(b[0] - a)); + this.transA *= (k - 1) / (c - 1); + this.min = b[0]; + this.max = b[b.length - 1]; + } else k > c && ((this.tickInterval *= 2), this.setTickPositions()); + if (n(d)) { + for (a = c = b.length; a--; ) + ((3 === d && 1 === a % 2) || (2 >= d && 0 < a && a < c - 1)) && + b.splice(a, 1); + this.finalTickAmt = void 0; + } + } + }, + setScale: function() { + var a, b; + this.oldMin = this.min; + this.oldMax = this.max; + this.oldAxisLength = this.len; + this.setAxisSize(); + b = this.len !== this.oldAxisLength; + e(this.series, function(b) { + if (b.isDirtyData || b.isDirty || b.xAxis.isDirty) a = !0; + }); + b || + a || + this.isLinked || + this.forceRedraw || + this.userMin !== this.oldUserMin || + this.userMax !== this.oldUserMax || + this.alignToOthers() + ? (this.resetStacks && this.resetStacks(), + (this.forceRedraw = !1), + this.getSeriesExtremes(), + this.setTickInterval(), + (this.oldUserMin = this.userMin), + (this.oldUserMax = this.userMax), + this.isDirty || + (this.isDirty = + b || this.min !== this.oldMin || this.max !== this.oldMax)) + : this.cleanStacks && this.cleanStacks(); + }, + setExtremes: function(a, b, c, d, k) { + var g = this, + q = g.chart; + c = C(c, !0); + e(g.series, function(a) { + delete a.kdTree; + }); + k = h(k, { min: a, max: b }); + m(g, 'setExtremes', k, function() { + g.userMin = a; + g.userMax = b; + g.eventArgs = k; + c && q.redraw(d); + }); + }, + zoom: function(a, b) { + var g = this.dataMin, + c = this.dataMax, + d = this.options, + k = Math.min(g, C(d.min, g)), + d = Math.max(c, C(d.max, c)); + if (a !== this.min || b !== this.max) + this.allowZoomOutside || + (n(g) && (a < k && (a = k), a > d && (a = d)), + n(c) && (b < k && (b = k), b > d && (b = d))), + (this.displayBtn = void 0 !== a || void 0 !== b), + this.setExtremes(a, b, !1, void 0, { trigger: 'zoom' }); + return !0; + }, + setAxisSize: function() { + var b = this.chart, + c = this.options, + d = c.offsets || [0, 0, 0, 0], + k = this.horiz, + q = (this.width = Math.round( + a.relativeLength( + C(c.width, b.plotWidth - d[3] + d[1]), + b.plotWidth, + ), + )), + e = (this.height = Math.round( + a.relativeLength( + C(c.height, b.plotHeight - d[0] + d[2]), + b.plotHeight, + ), + )), + h = (this.top = Math.round( + a.relativeLength( + C(c.top, b.plotTop + d[0]), + b.plotHeight, + b.plotTop, + ), + )), + c = (this.left = Math.round( + a.relativeLength( + C(c.left, b.plotLeft + d[3]), + b.plotWidth, + b.plotLeft, + ), + )); + this.bottom = b.chartHeight - e - h; + this.right = b.chartWidth - q - c; + this.len = Math.max(k ? q : e, 0); + this.pos = k ? c : h; + }, + getExtremes: function() { + var a = this.isLog, + b = this.lin2log; + return { + min: a ? l(b(this.min)) : this.min, + max: a ? l(b(this.max)) : this.max, + dataMin: this.dataMin, + dataMax: this.dataMax, + userMin: this.userMin, + userMax: this.userMax, + }; + }, + getThreshold: function(a) { + var b = this.isLog, + g = this.lin2log, + c = b ? g(this.min) : this.min, + b = b ? g(this.max) : this.max; + null === a ? (a = c) : c > a ? (a = c) : b < a && (a = b); + return this.translate(a, 0, 1, 0, 1); + }, + autoLabelAlign: function(a) { + a = (C(a, 0) - 90 * this.side + 720) % 360; + return 15 < a && 165 > a + ? 'right' + : 195 < a && 345 > a + ? 'left' + : 'center'; + }, + tickSize: function(a) { + var b = this.options, + g = b[a + 'Length'], + c = C(b[a + 'Width'], 'tick' === a && this.isXAxis ? 1 : 0); + if (c && g) return 'inside' === b[a + 'Position'] && (g = -g), [g, c]; + }, + labelMetrics: function() { + var a = (this.tickPositions && this.tickPositions[0]) || 0; + return this.chart.renderer.fontMetrics( + this.options.labels.style && this.options.labels.style.fontSize, + this.ticks[a] && this.ticks[a].label, + ); + }, + unsquish: function() { + var a = this.options.labels, + b = this.horiz, + c = this.tickInterval, + d = c, + k = + this.len / (((this.categories ? 1 : 0) + this.max - this.min) / c), + q, + h = a.rotation, + m = this.labelMetrics(), + z, + A = Number.MAX_VALUE, + t, + x = function(a) { + a /= k || 1; + a = 1 < a ? Math.ceil(a) : 1; + return a * c; + }; + b + ? (t = + !a.staggerLines && + !a.step && + (n(h) + ? [h] + : k < C(a.autoRotationLimit, 80) && a.autoRotation)) && + e(t, function(a) { + var b; + if (a === h || (a && -90 <= a && 90 >= a)) + (z = x(Math.abs(m.h / Math.sin(w * a)))), + (b = z + Math.abs(a / 360)), + b < A && ((A = b), (q = a), (d = z)); + }) + : a.step || (d = x(m.h)); + this.autoRotation = t; + this.labelRotation = C(q, h); + return d; + }, + getSlotWidth: function() { + var a = this.chart, + b = this.horiz, + c = this.options.labels, + d = Math.max( + this.tickPositions.length - (this.categories ? 0 : 1), + 1, + ), + k = a.margin[3]; + return ( + (b && + 2 > (c.step || 0) && + !c.rotation && + ((this.staggerLines || 1) * this.len) / d) || + (!b && + ((c.style && parseInt(c.style.width, 10)) || + (k && k - a.spacing[3]) || + 0.33 * a.chartWidth)) + ); + }, + renderUnsquish: function() { + var a = this.chart, + b = a.renderer, + c = this.tickPositions, + d = this.ticks, + k = this.options.labels, + q = this.horiz, + h = this.getSlotWidth(), + m = Math.max(1, Math.round(h - 2 * (k.padding || 5))), + z = {}, + A = this.labelMetrics(), + t = k.style && k.style.textOverflow, + f, + F = 0, + l, + B; + I(k.rotation) || (z.rotation = k.rotation || 0); + e(c, function(a) { + (a = d[a]) && a.labelLength > F && (F = a.labelLength); + }); + this.maxLabelLength = F; + if (this.autoRotation) + F > m && F > A.h + ? (z.rotation = this.labelRotation) + : (this.labelRotation = 0); + else if (h && ((f = { width: m + 'px' }), !t)) + for (f.textOverflow = 'clip', l = c.length; !q && l--; ) + if (((B = c[l]), (m = d[B].label))) + m.styles && 'ellipsis' === m.styles.textOverflow + ? m.css({ textOverflow: 'clip' }) + : d[B].labelLength > h && m.css({ width: h + 'px' }), + m.getBBox().height > this.len / c.length - (A.h - A.f) && + (m.specCss = { textOverflow: 'ellipsis' }); + z.rotation && + ((f = { + width: + (F > 0.5 * a.chartHeight ? 0.33 * a.chartHeight : a.chartHeight) + + 'px', + }), + t || (f.textOverflow = 'ellipsis')); + if ( + (this.labelAlign = k.align || this.autoLabelAlign(this.labelRotation)) + ) + z.align = this.labelAlign; + e(c, function(a) { + var b = (a = d[a]) && a.label; + b && + (b.attr(z), + f && b.css(x(f, b.specCss)), + delete b.specCss, + (a.rotation = z.rotation)); + }); + this.tickRotCorr = b.rotCorr( + A.b, + this.labelRotation || 0, + 0 !== this.side, + ); + }, + hasData: function() { + return ( + this.hasVisibleSeries || + (n(this.min) && + n(this.max) && + this.tickPositions && + 0 < this.tickPositions.length) + ); + }, + addTitle: function(a) { + var b = this.chart.renderer, + g = this.horiz, + c = this.opposite, + d = this.options.title, + k; + this.axisTitle || + ((k = d.textAlign) || + (k = (g + ? { low: 'left', middle: 'center', high: 'right' } + : { + low: c ? 'right' : 'left', + middle: 'center', + high: c ? 'left' : 'right', + })[d.align]), + (this.axisTitle = b + .text(d.text, 0, 0, d.useHTML) + .attr({ zIndex: 7, rotation: d.rotation || 0, align: k }) + .addClass('highcharts-axis-title') + .css(d.style) + .add(this.axisGroup)), + (this.axisTitle.isNew = !0)); + d.style.width || + this.isRadial || + this.axisTitle.css({ width: this.len }); + this.axisTitle[a ? 'show' : 'hide'](!0); + }, + generateTick: function(a) { + var b = this.ticks; + b[a] ? b[a].addLabel() : (b[a] = new F(this, a)); + }, + getOffset: function() { + var a = this, + b = a.chart, + c = b.renderer, + d = a.options, + k = a.tickPositions, + q = a.ticks, + h = a.horiz, + m = a.side, + z = b.inverted && !a.isZAxis ? [1, 0, 3, 2][m] : m, + A, + x, + f = 0, + F, + l = 0, + B = d.title, + u = d.labels, + G = 0, + p = b.axisOffset, + b = b.clipOffset, + I = [-1, 1, 1, -1][m], + r = d.className, + w = a.axisParent, + K = this.tickSize('tick'); + A = a.hasData(); + a.showAxis = x = A || C(d.showEmpty, !0); + a.staggerLines = a.horiz && u.staggerLines; + a.axisGroup || + ((a.gridGroup = c + .g('grid') + .attr({ zIndex: d.gridZIndex || 1 }) + .addClass( + 'highcharts-' + this.coll.toLowerCase() + '-grid ' + (r || ''), + ) + .add(w)), + (a.axisGroup = c + .g('axis') + .attr({ zIndex: d.zIndex || 2 }) + .addClass('highcharts-' + this.coll.toLowerCase() + ' ' + (r || '')) + .add(w)), + (a.labelGroup = c + .g('axis-labels') + .attr({ zIndex: u.zIndex || 7 }) + .addClass( + 'highcharts-' + a.coll.toLowerCase() + '-labels ' + (r || ''), + ) + .add(w))); + A || a.isLinked + ? (e(k, function(b, c) { + a.generateTick(b, c); + }), + a.renderUnsquish(), + (a.reserveSpaceDefault = + 0 === m || + 2 === m || + { 1: 'left', 3: 'right' }[m] === a.labelAlign), + C( + u.reserveSpace, + 'center' === a.labelAlign ? !0 : null, + a.reserveSpaceDefault, + ) && + e(k, function(a) { + G = Math.max(q[a].getLabelSize(), G); + }), + a.staggerLines && (G *= a.staggerLines), + (a.labelOffset = G * (a.opposite ? -1 : 1))) + : t(q, function(a, b) { + a.destroy(); + delete q[b]; + }); + B && + B.text && + !1 !== B.enabled && + (a.addTitle(x), + x && + !1 !== B.reserveSpace && + ((a.titleOffset = f = a.axisTitle.getBBox()[ + h ? 'height' : 'width' + ]), + (F = B.offset), + (l = n(F) ? 0 : C(B.margin, h ? 5 : 10)))); + a.renderLine(); + a.offset = I * C(d.offset, p[m]); + a.tickRotCorr = a.tickRotCorr || { x: 0, y: 0 }; + c = 0 === m ? -a.labelMetrics().h : 2 === m ? a.tickRotCorr.y : 0; + l = Math.abs(G) + l; + G && (l = l - c + I * (h ? C(u.y, a.tickRotCorr.y + 8 * I) : u.x)); + a.axisTitleMargin = C(F, l); + p[m] = Math.max( + p[m], + a.axisTitleMargin + f + I * a.offset, + l, + A && k.length && K ? K[0] + I * a.offset : 0, + ); + d = d.offset ? 0 : 2 * Math.floor(a.axisLine.strokeWidth() / 2); + b[z] = Math.max(b[z], d); + }, + getLinePath: function(a) { + var b = this.chart, + c = this.opposite, + g = this.offset, + d = this.horiz, + k = this.left + (c ? this.width : 0) + g, + g = b.chartHeight - this.bottom - (c ? this.height : 0) + g; + c && (a *= -1); + return b.renderer.crispLine( + [ + 'M', + d ? this.left : k, + d ? g : this.top, + 'L', + d ? b.chartWidth - this.right : k, + d ? g : b.chartHeight - this.bottom, + ], + a, + ); + }, + renderLine: function() { + this.axisLine || + ((this.axisLine = this.chart.renderer + .path() + .addClass('highcharts-axis-line') + .add(this.axisGroup)), + this.axisLine.attr({ + stroke: this.options.lineColor, + 'stroke-width': this.options.lineWidth, + zIndex: 7, + })); + }, + getTitlePosition: function() { + var a = this.horiz, + b = this.left, + c = this.top, + d = this.len, + k = this.options.title, + q = a ? b : c, + e = this.opposite, + h = this.offset, + m = k.x || 0, + z = k.y || 0, + A = this.axisTitle, + t = this.chart.renderer.fontMetrics(k.style && k.style.fontSize, A), + A = Math.max(A.getBBox(null, 0).height - t.h - 1, 0), + d = { + low: q + (a ? 0 : d), + middle: q + d / 2, + high: q + (a ? d : 0), + }[k.align], + b = + (a ? c + this.height : b) + + (a ? 1 : -1) * (e ? -1 : 1) * this.axisTitleMargin + + [-A, A, t.f, -A][this.side]; + return { + x: a ? d + m : b + (e ? this.width : 0) + h + m, + y: a ? b + z - (e ? this.height : 0) + h : d + z, + }; + }, + renderMinorTick: function(a) { + var b = this.chart.hasRendered && B(this.oldMin), + c = this.minorTicks; + c[a] || (c[a] = new F(this, a, 'minor')); + b && c[a].isNew && c[a].render(null, !0); + c[a].render(null, !1, 1); + }, + renderTick: function(a, b) { + var c = this.isLinked, + g = this.ticks, + d = this.chart.hasRendered && B(this.oldMin); + if (!c || (a >= this.min && a <= this.max)) + g[a] || (g[a] = new F(this, a)), + d && g[a].isNew && g[a].render(b, !0, 0.1), + g[a].render(b); + }, + render: function() { + var b = this, + c = b.chart, + d = b.options, + k = b.isLog, + q = b.lin2log, + h = b.isLinked, + m = b.tickPositions, + z = b.axisTitle, + x = b.ticks, + f = b.minorTicks, + l = b.alternateBands, + C = d.stackLabels, + n = d.alternateGridColor, + u = b.tickmarkOffset, + G = b.axisLine, + p = b.showAxis, + I = D(c.renderer.globalAnimation), + r, + w; + b.labelEdge.length = 0; + b.overlap = !1; + e([x, f, l], function(a) { + t(a, function(a) { + a.isActive = !1; + }); + }); + if (b.hasData() || h) + b.minorTickInterval && + !b.categories && + e(b.getMinorTickPositions(), function(a) { + b.renderMinorTick(a); + }), + m.length && + (e(m, function(a, c) { + b.renderTick(a, c); + }), + u && + (0 === b.min || b.single) && + (x[-1] || (x[-1] = new F(b, -1, null, !0)), x[-1].render(-1))), + n && + e(m, function(d, g) { + w = void 0 !== m[g + 1] ? m[g + 1] + u : b.max - u; + 0 === g % 2 && + d < b.max && + w <= b.max + (c.polar ? -u : u) && + (l[d] || (l[d] = new a.PlotLineOrBand(b)), + (r = d + u), + (l[d].options = { + from: k ? q(r) : r, + to: k ? q(w) : w, + color: n, + }), + l[d].render(), + (l[d].isActive = !0)); + }), + b._addedPlotLB || + (e((d.plotLines || []).concat(d.plotBands || []), function(a) { + b.addPlotBandOrLine(a); + }), + (b._addedPlotLB = !0)); + e([x, f, l], function(a) { + var b, + d = [], + g = I.duration; + t(a, function(a, b) { + a.isActive || (a.render(b, !1, 0), (a.isActive = !1), d.push(b)); + }); + A( + function() { + for (b = d.length; b--; ) + a[d[b]] && + !a[d[b]].isActive && + (a[d[b]].destroy(), delete a[d[b]]); + }, + a !== l && c.hasRendered && g ? g : 0, + ); + }); + G && + (G[G.isPlaced ? 'animate' : 'attr']({ + d: this.getLinePath(G.strokeWidth()), + }), + (G.isPlaced = !0), + G[p ? 'show' : 'hide'](!0)); + z && + p && + ((d = b.getTitlePosition()), + B(d.y) + ? (z[z.isNew ? 'attr' : 'animate'](d), (z.isNew = !1)) + : (z.attr('y', -9999), (z.isNew = !0))); + C && C.enabled && b.renderStackTotals(); + b.isDirty = !1; + }, + redraw: function() { + this.visible && + (this.render(), + e(this.plotLinesAndBands, function(a) { + a.render(); + })); + e(this.series, function(a) { + a.isDirty = !0; + }); + }, + keepProps: 'extKey hcEvents names series userMax userMin'.split(' '), + destroy: function(a) { + var b = this, + c = b.stacks, + d = b.plotLinesAndBands, + g; + a || N(b); + t(c, function(a, b) { + u(a); + c[b] = null; + }); + e([b.ticks, b.minorTicks, b.alternateBands], function(a) { + u(a); + }); + if (d) for (a = d.length; a--; ) d[a].destroy(); + e( + 'stackTotalGroup axisLine axisTitle axisGroup gridGroup labelGroup cross'.split( + ' ', + ), + function(a) { + b[a] && (b[a] = b[a].destroy()); + }, + ); + for (g in b.plotLinesAndBandsGroups) + b.plotLinesAndBandsGroups[g] = b.plotLinesAndBandsGroups[g].destroy(); + t(b, function(a, c) { + -1 === k(c, b.keepProps) && delete b[c]; + }); + }, + drawCrosshair: function(a, b) { + var c, + d = this.crosshair, + g = C(d.snap, !0), + k, + q = this.cross; + a || (a = this.cross && this.cross.e); + this.crosshair && !1 !== (n(b) || !g) + ? (g + ? n(b) && (k = this.isXAxis ? b.plotX : this.len - b.plotY) + : (k = + a && + (this.horiz + ? a.chartX - this.pos + : this.len - a.chartY + this.pos)), + n(k) && + (c = + this.getPlotLinePath( + b && (this.isXAxis ? b.x : C(b.stackY, b.y)), + null, + null, + null, + k, + ) || null), + n(c) + ? ((b = this.categories && !this.isRadial), + q || + ((this.cross = q = this.chart.renderer + .path() + .addClass( + 'highcharts-crosshair highcharts-crosshair-' + + (b ? 'category ' : 'thin ') + + d.className, + ) + .attr({ zIndex: C(d.zIndex, 2) }) + .add()), + q + .attr({ + stroke: + d.color || + (b + ? f('#ccd6eb') + .setOpacity(0.25) + .get() + : '#cccccc'), + 'stroke-width': C(d.width, 1), + }) + .css({ 'pointer-events': 'none' }), + d.dashStyle && q.attr({ dashstyle: d.dashStyle })), + q.show().attr({ d: c }), + b && !d.width && q.attr({ 'stroke-width': this.transA }), + (this.cross.e = a)) + : this.hideCrosshair()) + : this.hideCrosshair(); + }, + hideCrosshair: function() { + this.cross && this.cross.hide(); + }, + }); + return (a.Axis = G); + })(M); + (function(a) { + var E = a.Axis, + D = a.Date, + H = a.dateFormat, + p = a.defaultOptions, + f = a.defined, + l = a.each, + r = a.extend, + n = a.getMagnitude, + w = a.getTZOffset, + u = a.normalizeTickInterval, + e = a.pick, + h = a.timeUnits; + E.prototype.getTimeTicks = function(a, d, c, b) { + var k = [], + m = {}, + B = p.global.useUTC, + n, + x = new D(d - Math.max(w(d), w(c))), + u = D.hcMakeTime, + t = a.unitRange, + C = a.count, + N, + q; + if (f(d)) { + x[D.hcSetMilliseconds]( + t >= h.second ? 0 : C * Math.floor(x.getMilliseconds() / C), + ); + if (t >= h.second) + x[D.hcSetSeconds]( + t >= h.minute ? 0 : C * Math.floor(x.getSeconds() / C), + ); + if (t >= h.minute) + x[D.hcSetMinutes]( + t >= h.hour ? 0 : C * Math.floor(x[D.hcGetMinutes]() / C), + ); + if (t >= h.hour) + x[D.hcSetHours]( + t >= h.day ? 0 : C * Math.floor(x[D.hcGetHours]() / C), + ); + if (t >= h.day) + x[D.hcSetDate]( + t >= h.month ? 1 : C * Math.floor(x[D.hcGetDate]() / C), + ); + t >= h.month && + (x[D.hcSetMonth]( + t >= h.year ? 0 : C * Math.floor(x[D.hcGetMonth]() / C), + ), + (n = x[D.hcGetFullYear]())); + if (t >= h.year) x[D.hcSetFullYear](n - (n % C)); + if (t === h.week) + x[D.hcSetDate](x[D.hcGetDate]() - x[D.hcGetDay]() + e(b, 1)); + n = x[D.hcGetFullYear](); + b = x[D.hcGetMonth](); + var A = x[D.hcGetDate](), + F = x[D.hcGetHours](); + d = x.getTime(); + D.hcHasTimeZone && + ((q = + (!B || !!D.hcGetTimezoneOffset) && + (c - d > 4 * h.month || w(d) !== w(c))), + (N = w(x)), + (x = new D(d + N))); + B = x.getTime(); + for (d = 1; B < c; ) + k.push(B), + (B = + t === h.year + ? u(n + d * C, 0) + : t === h.month + ? u(n, b + d * C) + : !q || (t !== h.day && t !== h.week) + ? q && t === h.hour + ? u(n, b, A, F + d * C, 0, 0, N) - N + : B + t * C + : u(n, b, A + d * C * (t === h.day ? 1 : 7))), + d++; + k.push(B); + t <= h.hour && + 1e4 > k.length && + l(k, function(a) { + 0 === a % 18e5 && + '000000000' === H('%H%M%S%L', a) && + (m[a] = 'day'); + }); + } + k.info = r(a, { higherRanks: m, totalRange: t * C }); + return k; + }; + E.prototype.normalizeTimeTickInterval = function(a, d) { + var c = d || [ + ['millisecond', [1, 2, 5, 10, 20, 25, 50, 100, 200, 500]], + ['second', [1, 2, 5, 10, 15, 30]], + ['minute', [1, 2, 5, 10, 15, 30]], + ['hour', [1, 2, 3, 4, 6, 8, 12]], + ['day', [1, 2]], + ['week', [1, 2]], + ['month', [1, 2, 3, 4, 6]], + ['year', null], + ]; + d = c[c.length - 1]; + var b = h[d[0]], + k = d[1], + e; + for ( + e = 0; + e < c.length && + !((d = c[e]), + (b = h[d[0]]), + (k = d[1]), + c[e + 1] && a <= (b * k[k.length - 1] + h[c[e + 1][0]]) / 2); + e++ + ); + b === h.year && a < 5 * b && (k = [1, 2, 5]); + a = u(a / b, k, 'year' === d[0] ? Math.max(n(a / b), 1) : 1); + return { unitRange: b, count: a, unitName: d[0] }; + }; + })(M); + (function(a) { + var E = a.Axis, + D = a.getMagnitude, + H = a.map, + p = a.normalizeTickInterval, + f = a.pick; + E.prototype.getLogTickPositions = function(a, r, n, w) { + var l = this.options, + e = this.len, + h = this.lin2log, + m = this.log2lin, + d = []; + w || (this._minorAutoInterval = null); + if (0.5 <= a) + (a = Math.round(a)), (d = this.getLinearTickPositions(a, r, n)); + else if (0.08 <= a) + for ( + var e = Math.floor(r), + c, + b, + k, + z, + B, + l = + 0.3 < a + ? [1, 2, 4] + : 0.15 < a + ? [1, 2, 4, 6, 8] + : [1, 2, 3, 4, 5, 6, 7, 8, 9]; + e < n + 1 && !B; + e++ + ) + for (b = l.length, c = 0; c < b && !B; c++) + (k = m(h(e) * l[c])), + k > r && (!w || z <= n) && void 0 !== z && d.push(z), + z > n && (B = !0), + (z = k); + else + (r = h(r)), + (n = h(n)), + (a = w ? this.getMinorTickInterval() : l.tickInterval), + (a = f( + 'auto' === a ? null : a, + this._minorAutoInterval, + ((l.tickPixelInterval / (w ? 5 : 1)) * (n - r)) / + ((w ? e / this.tickPositions.length : e) || 1), + )), + (a = p(a, null, D(a))), + (d = H(this.getLinearTickPositions(a, r, n), m)), + w || (this._minorAutoInterval = a / 5); + w || (this.tickInterval = a); + return d; + }; + E.prototype.log2lin = function(a) { + return Math.log(a) / Math.LN10; + }; + E.prototype.lin2log = function(a) { + return Math.pow(10, a); + }; + })(M); + (function(a, E) { + var D = a.arrayMax, + H = a.arrayMin, + p = a.defined, + f = a.destroyObjectProperties, + l = a.each, + r = a.erase, + n = a.merge, + w = a.pick; + a.PlotLineOrBand = function(a, e) { + this.axis = a; + e && ((this.options = e), (this.id = e.id)); + }; + a.PlotLineOrBand.prototype = { + render: function() { + var f = this, + e = f.axis, + h = e.horiz, + m = f.options, + d = m.label, + c = f.label, + b = m.to, + k = m.from, + z = m.value, + l = p(k) && p(b), + r = p(z), + x = f.svgElem, + K = !x, + t = [], + C = m.color, + N = w(m.zIndex, 0), + q = m.events, + t = { + class: + 'highcharts-plot-' + + (l ? 'band ' : 'line ') + + (m.className || ''), + }, + A = {}, + F = e.chart.renderer, + G = l ? 'bands' : 'lines', + g = e.log2lin; + e.isLog && ((k = g(k)), (b = g(b)), (z = g(z))); + r + ? ((t = { stroke: C, 'stroke-width': m.width }), + m.dashStyle && (t.dashstyle = m.dashStyle)) + : l && + (C && (t.fill = C), + m.borderWidth && + ((t.stroke = m.borderColor), + (t['stroke-width'] = m.borderWidth))); + A.zIndex = N; + G += '-' + N; + (C = e.plotLinesAndBandsGroups[G]) || + (e.plotLinesAndBandsGroups[G] = C = F.g('plot-' + G) + .attr(A) + .add()); + K && + (f.svgElem = x = F.path() + .attr(t) + .add(C)); + if (r) t = e.getPlotLinePath(z, x.strokeWidth()); + else if (l) t = e.getPlotBandPath(k, b, m); + else return; + K && t && t.length + ? (x.attr({ d: t }), + q && + a.objectEach(q, function(a, b) { + x.on(b, function(a) { + q[b].apply(f, [a]); + }); + })) + : x && + (t + ? (x.show(), x.animate({ d: t })) + : (x.hide(), c && (f.label = c = c.destroy()))); + d && + p(d.text) && + t && + t.length && + 0 < e.width && + 0 < e.height && + !t.flat + ? ((d = n( + { + align: h && l && 'center', + x: h ? !l && 4 : 10, + verticalAlign: !h && l && 'middle', + y: h ? (l ? 16 : 10) : l ? 6 : -4, + rotation: h && !l && 90, + }, + d, + )), + this.renderLabel(d, t, l, N)) + : c && c.hide(); + return f; + }, + renderLabel: function(a, e, h, m) { + var d = this.label, + c = this.axis.chart.renderer; + d || + ((d = { + align: a.textAlign || a.align, + rotation: a.rotation, + class: + 'highcharts-plot-' + + (h ? 'band' : 'line') + + '-label ' + + (a.className || ''), + }), + (d.zIndex = m), + (this.label = d = c + .text(a.text, 0, 0, a.useHTML) + .attr(d) + .add()), + d.css(a.style)); + m = e.xBounds || [e[1], e[4], h ? e[6] : e[1]]; + e = e.yBounds || [e[2], e[5], h ? e[7] : e[2]]; + h = H(m); + c = H(e); + d.align(a, !1, { x: h, y: c, width: D(m) - h, height: D(e) - c }); + d.show(); + }, + destroy: function() { + r(this.axis.plotLinesAndBands, this); + delete this.axis; + f(this); + }, + }; + a.extend(E.prototype, { + getPlotBandPath: function(a, e) { + var h = this.getPlotLinePath(e, null, null, !0), + m = this.getPlotLinePath(a, null, null, !0), + d = [], + c = this.horiz, + b = 1, + k; + a = (a < this.min && e < this.min) || (a > this.max && e > this.max); + if (m && h) + for ( + a && ((k = m.toString() === h.toString()), (b = 0)), a = 0; + a < m.length; + a += 6 + ) + c && h[a + 1] === m[a + 1] + ? ((h[a + 1] += b), (h[a + 4] += b)) + : c || + h[a + 2] !== m[a + 2] || + ((h[a + 2] += b), (h[a + 5] += b)), + d.push( + 'M', + m[a + 1], + m[a + 2], + 'L', + m[a + 4], + m[a + 5], + h[a + 4], + h[a + 5], + h[a + 1], + h[a + 2], + 'z', + ), + (d.flat = k); + return d; + }, + addPlotBand: function(a) { + return this.addPlotBandOrLine(a, 'plotBands'); + }, + addPlotLine: function(a) { + return this.addPlotBandOrLine(a, 'plotLines'); + }, + addPlotBandOrLine: function(f, e) { + var h = new a.PlotLineOrBand(this, f).render(), + m = this.userOptions; + h && + (e && ((m[e] = m[e] || []), m[e].push(f)), + this.plotLinesAndBands.push(h)); + return h; + }, + removePlotBandOrLine: function(a) { + for ( + var e = this.plotLinesAndBands, + h = this.options, + m = this.userOptions, + d = e.length; + d--; + + ) + e[d].id === a && e[d].destroy(); + l( + [ + h.plotLines || [], + m.plotLines || [], + h.plotBands || [], + m.plotBands || [], + ], + function(c) { + for (d = c.length; d--; ) c[d].id === a && r(c, c[d]); + }, + ); + }, + removePlotBand: function(a) { + this.removePlotBandOrLine(a); + }, + removePlotLine: function(a) { + this.removePlotBandOrLine(a); + }, + }); + })(M, V); + (function(a) { + var E = a.dateFormat, + D = a.each, + H = a.extend, + p = a.format, + f = a.isNumber, + l = a.map, + r = a.merge, + n = a.pick, + w = a.splat, + u = a.syncTimeout, + e = a.timeUnits; + a.Tooltip = function() { + this.init.apply(this, arguments); + }; + a.Tooltip.prototype = { + init: function(a, e) { + this.chart = a; + this.options = e; + this.crosshairs = []; + this.now = { x: 0, y: 0 }; + this.isHidden = !0; + this.split = e.split && !a.inverted; + this.shared = e.shared || this.split; + }, + cleanSplit: function(a) { + D(this.chart.series, function(e) { + var d = e && e.tt; + d && (!d.isActive || a ? (e.tt = d.destroy()) : (d.isActive = !1)); + }); + }, + getLabel: function() { + var a = this.chart.renderer, + e = this.options; + this.label || + (this.split + ? (this.label = a.g('tooltip')) + : ((this.label = a + .label( + '', + 0, + 0, + e.shape || 'callout', + null, + null, + e.useHTML, + null, + 'tooltip', + ) + .attr({ padding: e.padding, r: e.borderRadius })), + this.label + .attr({ + fill: e.backgroundColor, + 'stroke-width': e.borderWidth, + }) + .css(e.style) + .shadow(e.shadow)), + this.label.attr({ zIndex: 8 }).add()); + return this.label; + }, + update: function(a) { + this.destroy(); + r(!0, this.chart.options.tooltip.userOptions, a); + this.init(this.chart, r(!0, this.options, a)); + }, + destroy: function() { + this.label && (this.label = this.label.destroy()); + this.split && + this.tt && + (this.cleanSplit(this.chart, !0), (this.tt = this.tt.destroy())); + clearTimeout(this.hideTimer); + clearTimeout(this.tooltipTimeout); + }, + move: function(a, e, d, c) { + var b = this, + k = b.now, + h = + !1 !== b.options.animation && + !b.isHidden && + (1 < Math.abs(a - k.x) || 1 < Math.abs(e - k.y)), + m = b.followPointer || 1 < b.len; + H(k, { + x: h ? (2 * k.x + a) / 3 : a, + y: h ? (k.y + e) / 2 : e, + anchorX: m ? void 0 : h ? (2 * k.anchorX + d) / 3 : d, + anchorY: m ? void 0 : h ? (k.anchorY + c) / 2 : c, + }); + b.getLabel().attr(k); + h && + (clearTimeout(this.tooltipTimeout), + (this.tooltipTimeout = setTimeout(function() { + b && b.move(a, e, d, c); + }, 32))); + }, + hide: function(a) { + var e = this; + clearTimeout(this.hideTimer); + a = n(a, this.options.hideDelay, 500); + this.isHidden || + (this.hideTimer = u(function() { + e.getLabel()[a ? 'fadeOut' : 'hide'](); + e.isHidden = !0; + }, a)); + }, + getAnchor: function(a, e) { + var d, + c = this.chart, + b = c.inverted, + k = c.plotTop, + h = c.plotLeft, + m = 0, + f = 0, + x, + n; + a = w(a); + d = a[0].tooltipPos; + this.followPointer && + e && + (void 0 === e.chartX && (e = c.pointer.normalize(e)), + (d = [e.chartX - c.plotLeft, e.chartY - k])); + d || + (D(a, function(a) { + x = a.series.yAxis; + n = a.series.xAxis; + m += a.plotX + (!b && n ? n.left - h : 0); + f += + (a.plotLow ? (a.plotLow + a.plotHigh) / 2 : a.plotY) + + (!b && x ? x.top - k : 0); + }), + (m /= a.length), + (f /= a.length), + (d = [ + b ? c.plotWidth - f : m, + this.shared && !b && 1 < a.length && e + ? e.chartY - k + : b + ? c.plotHeight - m + : f, + ])); + return l(d, Math.round); + }, + getPosition: function(a, e, d) { + var c = this.chart, + b = this.distance, + k = {}, + h = (c.inverted && d.h) || 0, + m, + f = [ + 'y', + c.chartHeight, + e, + d.plotY + c.plotTop, + c.plotTop, + c.plotTop + c.plotHeight, + ], + x = [ + 'x', + c.chartWidth, + a, + d.plotX + c.plotLeft, + c.plotLeft, + c.plotLeft + c.plotWidth, + ], + l = !this.followPointer && n(d.ttBelow, !c.inverted === !!d.negative), + t = function(a, c, d, g, e, q) { + var m = d < g - b, + z = g + b + d < c, + A = g - b - d; + g += b; + if (l && z) k[a] = g; + else if (!l && m) k[a] = A; + else if (m) k[a] = Math.min(q - d, 0 > A - h ? A : A - h); + else if (z) k[a] = Math.max(e, g + h + d > c ? g : g + h); + else return !1; + }, + C = function(a, c, d, g) { + var e; + g < b || g > c - b + ? (e = !1) + : (k[a] = g < d / 2 ? 1 : g > c - d / 2 ? c - d - 2 : g - d / 2); + return e; + }, + p = function(a) { + var b = f; + f = x; + x = b; + m = a; + }, + q = function() { + !1 !== t.apply(0, f) + ? !1 !== C.apply(0, x) || m || (p(!0), q()) + : m + ? (k.x = k.y = 0) + : (p(!0), q()); + }; + (c.inverted || 1 < this.len) && p(); + q(); + return k; + }, + defaultFormatter: function(a) { + var e = this.points || w(this), + d; + d = [a.tooltipFooterHeaderFormatter(e[0])]; + d = d.concat(a.bodyFormatter(e)); + d.push(a.tooltipFooterHeaderFormatter(e[0], !0)); + return d; + }, + refresh: function(a, e) { + var d, + c = this.options, + b, + k = a, + h, + m = {}, + f = []; + d = c.formatter || this.defaultFormatter; + var m = this.shared, + x; + c.enabled && + (clearTimeout(this.hideTimer), + (this.followPointer = w(k)[0].series.tooltipOptions.followPointer), + (h = this.getAnchor(k, e)), + (e = h[0]), + (b = h[1]), + !m || (k.series && k.series.noSharedTooltip) + ? (m = k.getLabelConfig()) + : (D(k, function(a) { + a.setState('hover'); + f.push(a.getLabelConfig()); + }), + (m = { x: k[0].category, y: k[0].y }), + (m.points = f), + (k = k[0])), + (this.len = f.length), + (m = d.call(m, this)), + (x = k.series), + (this.distance = n(x.tooltipOptions.distance, 16)), + !1 === m + ? this.hide() + : ((d = this.getLabel()), + this.isHidden && d.attr({ opacity: 1 }).show(), + this.split + ? this.renderSplit(m, w(a)) + : (c.style.width || + d.css({ width: this.chart.spacingBox.width }), + d.attr({ text: m && m.join ? m.join('') : m }), + d + .removeClass(/highcharts-color-[\d]+/g) + .addClass( + 'highcharts-color-' + n(k.colorIndex, x.colorIndex), + ), + d.attr({ + stroke: c.borderColor || k.color || x.color || '#666666', + }), + this.updatePosition({ + plotX: e, + plotY: b, + negative: k.negative, + ttBelow: k.ttBelow, + h: h[2] || 0, + })), + (this.isHidden = !1))); + }, + renderSplit: function(e, m) { + var d = this, + c = [], + b = this.chart, + k = b.renderer, + h = !0, + f = this.options, + l = 0, + x = this.getLabel(); + a.isString(e) && (e = [!1, e]); + D(e.slice(0, m.length + 1), function(a, e) { + if (!1 !== a) { + e = m[e - 1] || { isHeader: !0, plotX: m[0].plotX }; + var z = e.series || d, + t = z.tt, + q = e.series || {}, + A = 'highcharts-color-' + n(e.colorIndex, q.colorIndex, 'none'); + t || + (z.tt = t = k + .label(null, null, null, 'callout', null, null, f.useHTML) + .addClass('highcharts-tooltip-box ' + A) + .attr({ + padding: f.padding, + r: f.borderRadius, + fill: f.backgroundColor, + stroke: f.borderColor || e.color || q.color || '#333333', + 'stroke-width': f.borderWidth, + }) + .add(x)); + t.isActive = !0; + t.attr({ text: a }); + t.css(f.style).shadow(f.shadow); + a = t.getBBox(); + q = a.width + t.strokeWidth(); + e.isHeader + ? ((l = a.height), + (q = Math.max( + 0, + Math.min(e.plotX + b.plotLeft - q / 2, b.chartWidth - q), + ))) + : (q = e.plotX + b.plotLeft - n(f.distance, 16) - q); + 0 > q && (h = !1); + a = + (e.series && e.series.yAxis && e.series.yAxis.pos) + + (e.plotY || 0); + a -= b.plotTop; + c.push({ + target: e.isHeader ? b.plotHeight + l : a, + rank: e.isHeader ? 1 : 0, + size: z.tt.getBBox().height + 1, + point: e, + x: q, + tt: t, + }); + } + }); + this.cleanSplit(); + a.distribute(c, b.plotHeight + l); + D(c, function(a) { + var c = a.point, + d = c.series; + a.tt.attr({ + visibility: void 0 === a.pos ? 'hidden' : 'inherit', + x: h || c.isHeader ? a.x : c.plotX + b.plotLeft + n(f.distance, 16), + y: a.pos + b.plotTop, + anchorX: c.isHeader ? c.plotX + b.plotLeft : c.plotX + d.xAxis.pos, + anchorY: c.isHeader + ? a.pos + b.plotTop - 15 + : c.plotY + d.yAxis.pos, + }); + }); + }, + updatePosition: function(a) { + var e = this.chart, + d = this.getLabel(), + d = (this.options.positioner || this.getPosition).call( + this, + d.width, + d.height, + a, + ); + this.move( + Math.round(d.x), + Math.round(d.y || 0), + a.plotX + e.plotLeft, + a.plotY + e.plotTop, + ); + }, + getDateFormat: function(a, m, d, c) { + var b = E('%m-%d %H:%M:%S.%L', m), + k, + h, + f = { millisecond: 15, second: 12, minute: 9, hour: 6, day: 3 }, + l = 'millisecond'; + for (h in e) { + if ( + a === e.week && + +E('%w', m) === d && + '00:00:00.000' === b.substr(6) + ) { + h = 'week'; + break; + } + if (e[h] > a) { + h = l; + break; + } + if (f[h] && b.substr(f[h]) !== '01-01 00:00:00.000'.substr(f[h])) + break; + 'week' !== h && (l = h); + } + h && (k = c[h]); + return k; + }, + getXDateFormat: function(a, e, d) { + e = e.dateTimeLabelFormats; + var c = d && d.closestPointRange; + return ( + (c ? this.getDateFormat(c, a.x, d.options.startOfWeek, e) : e.day) || + e.year + ); + }, + tooltipFooterHeaderFormatter: function(a, e) { + e = e ? 'footer' : 'header'; + var d = a.series, + c = d.tooltipOptions, + b = c.xDateFormat, + k = d.xAxis, + h = k && 'datetime' === k.options.type && f(a.key), + m = c[e + 'Format']; + h && !b && (b = this.getXDateFormat(a, c, k)); + h && + b && + D((a.point && a.point.tooltipDateKeys) || ['key'], function(a) { + m = m.replace('{point.' + a + '}', '{point.' + a + ':' + b + '}'); + }); + return p(m, { point: a, series: d }); + }, + bodyFormatter: function(a) { + return l(a, function(a) { + var d = a.series.tooltipOptions; + return ( + d[(a.point.formatPrefix || 'point') + 'Formatter'] || + a.point.tooltipFormatter + ).call(a.point, d[(a.point.formatPrefix || 'point') + 'Format']); + }); + }, + }; + })(M); + (function(a) { + var E = a.addEvent, + D = a.attr, + H = a.charts, + p = a.color, + f = a.css, + l = a.defined, + r = a.each, + n = a.extend, + w = a.find, + u = a.fireEvent, + e = a.isObject, + h = a.offset, + m = a.pick, + d = a.splat, + c = a.Tooltip; + a.Pointer = function(a, c) { + this.init(a, c); + }; + a.Pointer.prototype = { + init: function(a, d) { + this.options = d; + this.chart = a; + this.runChartClick = d.chart.events && !!d.chart.events.click; + this.pinchDown = []; + this.lastValidTouch = {}; + c && + ((a.tooltip = new c(a, d.tooltip)), + (this.followTouchMove = m(d.tooltip.followTouchMove, !0))); + this.setDOMEvents(); + }, + zoomOption: function(a) { + var b = this.chart, + c = b.options.chart, + d = c.zoomType || '', + b = b.inverted; + /touch/.test(a.type) && (d = m(c.pinchType, d)); + this.zoomX = a = /x/.test(d); + this.zoomY = d = /y/.test(d); + this.zoomHor = (a && !b) || (d && b); + this.zoomVert = (d && !b) || (a && b); + this.hasZoom = a || d; + }, + normalize: function(a, c) { + var b; + b = a.touches + ? a.touches.length + ? a.touches.item(0) + : a.changedTouches[0] + : a; + c || (this.chartPosition = c = h(this.chart.container)); + return n(a, { + chartX: Math.round(b.pageX - c.left), + chartY: Math.round(b.pageY - c.top), + }); + }, + getCoordinates: function(a) { + var b = { xAxis: [], yAxis: [] }; + r(this.chart.axes, function(c) { + b[c.isXAxis ? 'xAxis' : 'yAxis'].push({ + axis: c, + value: c.toValue(a[c.horiz ? 'chartX' : 'chartY']), + }); + }); + return b; + }, + findNearestKDPoint: function(a, c, d) { + var b; + r(a, function(a) { + var k = + !(a.noSharedTooltip && c) && + 0 > a.options.findNearestPointBy.indexOf('y'); + a = a.searchPoint(d, k); + if ((k = e(a, !0)) && !(k = !e(b, !0))) + var k = b.distX - a.distX, + h = b.dist - a.dist, + m = + (a.series.group && a.series.group.zIndex) - + (b.series.group && b.series.group.zIndex), + k = + 0 < + (0 !== k && c + ? k + : 0 !== h + ? h + : 0 !== m + ? m + : b.series.index > a.series.index + ? -1 + : 1); + k && (b = a); + }); + return b; + }, + getPointFromEvent: function(a) { + a = a.target; + for (var b; a && !b; ) (b = a.point), (a = a.parentNode); + return b; + }, + getChartCoordinatesFromPoint: function(a, c) { + var b = a.series, + d = b.xAxis, + b = b.yAxis, + k = m(a.clientX, a.plotX); + if (d && b) + return c + ? { chartX: d.len + d.pos - k, chartY: b.len + b.pos - a.plotY } + : { chartX: k + d.pos, chartY: a.plotY + b.pos }; + }, + getHoverData: function(b, c, d, h, f, l, n) { + var k, + z = [], + x = n && n.isBoosting; + h = !(!h || !b); + n = + c && !c.stickyTracking + ? [c] + : a.grep(d, function(a) { + return ( + a.visible && + !(!f && a.directTouch) && + m(a.options.enableMouseTracking, !0) && + a.stickyTracking + ); + }); + c = (k = h ? b : this.findNearestKDPoint(n, f, l)) && k.series; + k && + (f && !c.noSharedTooltip + ? ((n = a.grep(d, function(a) { + return ( + a.visible && + !(!f && a.directTouch) && + m(a.options.enableMouseTracking, !0) && + !a.noSharedTooltip + ); + })), + r(n, function(a) { + var b = w(a.points, function(a) { + return a.x === k.x && !a.isNull; + }); + e(b) && (x && (b = a.getPoint(b)), z.push(b)); + })) + : z.push(k)); + return { hoverPoint: k, hoverSeries: c, hoverPoints: z }; + }, + runPointActions: function(b, c) { + var d = this.chart, + k = d.tooltip && d.tooltip.options.enabled ? d.tooltip : void 0, + e = k ? k.shared : !1, + h = c || d.hoverPoint, + f = (h && h.series) || d.hoverSeries, + f = this.getHoverData( + h, + f, + d.series, + !!c || (f && f.directTouch && this.isDirectTouch), + e, + b, + { isBoosting: d.isBoosting }, + ), + l, + h = f.hoverPoint; + l = f.hoverPoints; + c = (f = f.hoverSeries) && f.tooltipOptions.followPointer; + e = e && f && !f.noSharedTooltip; + if (h && (h !== d.hoverPoint || (k && k.isHidden))) { + r(d.hoverPoints || [], function(b) { + -1 === a.inArray(b, l) && b.setState(); + }); + r(l || [], function(a) { + a.setState('hover'); + }); + if (d.hoverSeries !== f) f.onMouseOver(); + d.hoverPoint && d.hoverPoint.firePointEvent('mouseOut'); + if (!h.series) return; + h.firePointEvent('mouseOver'); + d.hoverPoints = l; + d.hoverPoint = h; + k && k.refresh(e ? l : h, b); + } else + c && + k && + !k.isHidden && + ((h = k.getAnchor([{}], b)), + k.updatePosition({ plotX: h[0], plotY: h[1] })); + this.unDocMouseMove || + (this.unDocMouseMove = E( + d.container.ownerDocument, + 'mousemove', + function(b) { + var c = H[a.hoverChartIndex]; + if (c) c.pointer.onDocumentMouseMove(b); + }, + )); + r(d.axes, function(c) { + var d = m(c.crosshair.snap, !0), + k = d + ? a.find(l, function(a) { + return a.series[c.coll] === c; + }) + : void 0; + k || !d ? c.drawCrosshair(b, k) : c.hideCrosshair(); + }); + }, + reset: function(a, c) { + var b = this.chart, + k = b.hoverSeries, + e = b.hoverPoint, + h = b.hoverPoints, + m = b.tooltip, + f = m && m.shared ? h : e; + a && + f && + r(d(f), function(b) { + b.series.isCartesian && void 0 === b.plotX && (a = !1); + }); + if (a) + m && + f && + (m.refresh(f), + e && + (e.setState(e.state, !0), + r(b.axes, function(a) { + a.crosshair && a.drawCrosshair(null, e); + }))); + else { + if (e) e.onMouseOut(); + h && + r(h, function(a) { + a.setState(); + }); + if (k) k.onMouseOut(); + m && m.hide(c); + this.unDocMouseMove && (this.unDocMouseMove = this.unDocMouseMove()); + r(b.axes, function(a) { + a.hideCrosshair(); + }); + this.hoverX = b.hoverPoints = b.hoverPoint = null; + } + }, + scaleGroups: function(a, c) { + var b = this.chart, + d; + r(b.series, function(k) { + d = a || k.getPlotBox(); + k.xAxis && + k.xAxis.zoomEnabled && + k.group && + (k.group.attr(d), + k.markerGroup && + (k.markerGroup.attr(d), + k.markerGroup.clip(c ? b.clipRect : null)), + k.dataLabelsGroup && k.dataLabelsGroup.attr(d)); + }); + b.clipRect.attr(c || b.clipBox); + }, + dragStart: function(a) { + var b = this.chart; + b.mouseIsDown = a.type; + b.cancelClick = !1; + b.mouseDownX = this.mouseDownX = a.chartX; + b.mouseDownY = this.mouseDownY = a.chartY; + }, + drag: function(a) { + var b = this.chart, + c = b.options.chart, + d = a.chartX, + e = a.chartY, + h = this.zoomHor, + m = this.zoomVert, + f = b.plotLeft, + l = b.plotTop, + n = b.plotWidth, + q = b.plotHeight, + A, + F = this.selectionMarker, + G = this.mouseDownX, + g = this.mouseDownY, + v = c.panKey && a[c.panKey + 'Key']; + (F && F.touch) || + (d < f ? (d = f) : d > f + n && (d = f + n), + e < l ? (e = l) : e > l + q && (e = l + q), + (this.hasDragged = Math.sqrt( + Math.pow(G - d, 2) + Math.pow(g - e, 2), + )), + 10 < this.hasDragged && + ((A = b.isInsidePlot(G - f, g - l)), + b.hasCartesianSeries && + (this.zoomX || this.zoomY) && + A && + !v && + !F && + (this.selectionMarker = F = b.renderer + .rect(f, l, h ? 1 : n, m ? 1 : q, 0) + .attr({ + fill: + c.selectionMarkerFill || + p('#335cad') + .setOpacity(0.25) + .get(), + class: 'highcharts-selection-marker', + zIndex: 7, + }) + .add()), + F && + h && + ((d -= G), + F.attr({ width: Math.abs(d), x: (0 < d ? 0 : d) + G })), + F && + m && + ((d = e - g), + F.attr({ height: Math.abs(d), y: (0 < d ? 0 : d) + g })), + A && !F && c.panning && b.pan(a, c.panning))); + }, + drop: function(a) { + var b = this, + c = this.chart, + d = this.hasPinched; + if (this.selectionMarker) { + var e = { originalEvent: a, xAxis: [], yAxis: [] }, + h = this.selectionMarker, + m = h.attr ? h.attr('x') : h.x, + t = h.attr ? h.attr('y') : h.y, + p = h.attr ? h.attr('width') : h.width, + w = h.attr ? h.attr('height') : h.height, + q; + if (this.hasDragged || d) + r(c.axes, function(c) { + if ( + c.zoomEnabled && + l(c.min) && + (d || b[{ xAxis: 'zoomX', yAxis: 'zoomY' }[c.coll]]) + ) { + var k = c.horiz, + h = 'touchend' === a.type ? c.minPixelPadding : 0, + g = c.toValue((k ? m : t) + h), + k = c.toValue((k ? m + p : t + w) - h); + e[c.coll].push({ + axis: c, + min: Math.min(g, k), + max: Math.max(g, k), + }); + q = !0; + } + }), + q && + u(c, 'selection', e, function(a) { + c.zoom(n(a, d ? { animation: !1 } : null)); + }); + this.selectionMarker = this.selectionMarker.destroy(); + d && this.scaleGroups(); + } + c && + (f(c.container, { cursor: c._cursor }), + (c.cancelClick = 10 < this.hasDragged), + (c.mouseIsDown = this.hasDragged = this.hasPinched = !1), + (this.pinchDown = [])); + }, + onContainerMouseDown: function(a) { + 2 !== a.button && + ((a = this.normalize(a)), + this.zoomOption(a), + a.preventDefault && a.preventDefault(), + this.dragStart(a)); + }, + onDocumentMouseUp: function(b) { + H[a.hoverChartIndex] && H[a.hoverChartIndex].pointer.drop(b); + }, + onDocumentMouseMove: function(a) { + var b = this.chart, + c = this.chartPosition; + a = this.normalize(a, c); + !c || + this.inClass(a.target, 'highcharts-tracker') || + b.isInsidePlot(a.chartX - b.plotLeft, a.chartY - b.plotTop) || + this.reset(); + }, + onContainerMouseLeave: function(b) { + var c = H[a.hoverChartIndex]; + c && + (b.relatedTarget || b.toElement) && + (c.pointer.reset(), (c.pointer.chartPosition = null)); + }, + onContainerMouseMove: function(b) { + var c = this.chart; + (l(a.hoverChartIndex) && + H[a.hoverChartIndex] && + H[a.hoverChartIndex].mouseIsDown) || + (a.hoverChartIndex = c.index); + b = this.normalize(b); + b.returnValue = !1; + 'mousedown' === c.mouseIsDown && this.drag(b); + (!this.inClass(b.target, 'highcharts-tracker') && + !c.isInsidePlot(b.chartX - c.plotLeft, b.chartY - c.plotTop)) || + c.openMenu || + this.runPointActions(b); + }, + inClass: function(a, c) { + for (var b; a; ) { + if ((b = D(a, 'class'))) { + if (-1 !== b.indexOf(c)) return !0; + if (-1 !== b.indexOf('highcharts-container')) return !1; + } + a = a.parentNode; + } + }, + onTrackerMouseOut: function(a) { + var b = this.chart.hoverSeries; + a = a.relatedTarget || a.toElement; + this.isDirectTouch = !1; + if ( + !( + !b || + !a || + b.stickyTracking || + this.inClass(a, 'highcharts-tooltip') || + (this.inClass(a, 'highcharts-series-' + b.index) && + this.inClass(a, 'highcharts-tracker')) + ) + ) + b.onMouseOut(); + }, + onContainerClick: function(a) { + var b = this.chart, + c = b.hoverPoint, + d = b.plotLeft, + e = b.plotTop; + a = this.normalize(a); + b.cancelClick || + (c && this.inClass(a.target, 'highcharts-tracker') + ? (u(c.series, 'click', n(a, { point: c })), + b.hoverPoint && c.firePointEvent('click', a)) + : (n(a, this.getCoordinates(a)), + b.isInsidePlot(a.chartX - d, a.chartY - e) && u(b, 'click', a))); + }, + setDOMEvents: function() { + var b = this, + c = b.chart.container, + d = c.ownerDocument; + c.onmousedown = function(a) { + b.onContainerMouseDown(a); + }; + c.onmousemove = function(a) { + b.onContainerMouseMove(a); + }; + c.onclick = function(a) { + b.onContainerClick(a); + }; + this.unbindContainerMouseLeave = E( + c, + 'mouseleave', + b.onContainerMouseLeave, + ); + a.unbindDocumentMouseUp || + (a.unbindDocumentMouseUp = E(d, 'mouseup', b.onDocumentMouseUp)); + a.hasTouch && + ((c.ontouchstart = function(a) { + b.onContainerTouchStart(a); + }), + (c.ontouchmove = function(a) { + b.onContainerTouchMove(a); + }), + a.unbindDocumentTouchEnd || + (a.unbindDocumentTouchEnd = E( + d, + 'touchend', + b.onDocumentTouchEnd, + ))); + }, + destroy: function() { + var b = this; + b.unDocMouseMove && b.unDocMouseMove(); + this.unbindContainerMouseLeave(); + a.chartCount || + (a.unbindDocumentMouseUp && + (a.unbindDocumentMouseUp = a.unbindDocumentMouseUp()), + a.unbindDocumentTouchEnd && + (a.unbindDocumentTouchEnd = a.unbindDocumentTouchEnd())); + clearInterval(b.tooltipTimeout); + a.objectEach(b, function(a, c) { + b[c] = null; + }); + }, + }; + })(M); + (function(a) { + var E = a.charts, + D = a.each, + H = a.extend, + p = a.map, + f = a.noop, + l = a.pick; + H(a.Pointer.prototype, { + pinchTranslate: function(a, f, l, p, e, h) { + this.zoomHor && this.pinchTranslateDirection(!0, a, f, l, p, e, h); + this.zoomVert && this.pinchTranslateDirection(!1, a, f, l, p, e, h); + }, + pinchTranslateDirection: function(a, f, l, p, e, h, m, d) { + var c = this.chart, + b = a ? 'x' : 'y', + k = a ? 'X' : 'Y', + z = 'chart' + k, + n = a ? 'width' : 'height', + r = c['plot' + (a ? 'Left' : 'Top')], + x, + w, + t = d || 1, + C = c.inverted, + u = c.bounds[a ? 'h' : 'v'], + q = 1 === f.length, + A = f[0][z], + F = l[0][z], + G = !q && f[1][z], + g = !q && l[1][z], + v; + l = function() { + !q && + 20 < Math.abs(A - G) && + (t = d || Math.abs(F - g) / Math.abs(A - G)); + w = (r - F) / t + A; + x = c['plot' + (a ? 'Width' : 'Height')] / t; + }; + l(); + f = w; + f < u.min + ? ((f = u.min), (v = !0)) + : f + x > u.max && ((f = u.max - x), (v = !0)); + v + ? ((F -= 0.8 * (F - m[b][0])), q || (g -= 0.8 * (g - m[b][1])), l()) + : (m[b] = [F, g]); + C || ((h[b] = w - r), (h[n] = x)); + h = C ? 1 / t : t; + e[n] = x; + e[b] = f; + p[C ? (a ? 'scaleY' : 'scaleX') : 'scale' + k] = t; + p['translate' + k] = h * r + (F - h * A); + }, + pinch: function(a) { + var n = this, + r = n.chart, + u = n.pinchDown, + e = a.touches, + h = e.length, + m = n.lastValidTouch, + d = n.hasZoom, + c = n.selectionMarker, + b = {}, + k = + 1 === h && + ((n.inClass(a.target, 'highcharts-tracker') && r.runTrackerClick) || + n.runChartClick), + z = {}; + 1 < h && (n.initiated = !0); + d && n.initiated && !k && a.preventDefault(); + p(e, function(a) { + return n.normalize(a); + }); + 'touchstart' === a.type + ? (D(e, function(a, b) { + u[b] = { chartX: a.chartX, chartY: a.chartY }; + }), + (m.x = [u[0].chartX, u[1] && u[1].chartX]), + (m.y = [u[0].chartY, u[1] && u[1].chartY]), + D(r.axes, function(a) { + if (a.zoomEnabled) { + var b = r.bounds[a.horiz ? 'h' : 'v'], + c = a.minPixelPadding, + d = a.toPixels(l(a.options.min, a.dataMin)), + e = a.toPixels(l(a.options.max, a.dataMax)), + k = Math.max(d, e); + b.min = Math.min(a.pos, Math.min(d, e) - c); + b.max = Math.max(a.pos + a.len, k + c); + } + }), + (n.res = !0)) + : n.followTouchMove && 1 === h + ? this.runPointActions(n.normalize(a)) + : u.length && + (c || + (n.selectionMarker = c = H({ destroy: f, touch: !0 }, r.plotBox)), + n.pinchTranslate(u, e, b, c, z, m), + (n.hasPinched = d), + n.scaleGroups(b, z), + n.res && ((n.res = !1), this.reset(!1, 0))); + }, + touch: function(f, n) { + var p = this.chart, + r, + e; + if (p.index !== a.hoverChartIndex) + this.onContainerMouseLeave({ relatedTarget: !0 }); + a.hoverChartIndex = p.index; + 1 === f.touches.length + ? ((f = this.normalize(f)), + (e = p.isInsidePlot(f.chartX - p.plotLeft, f.chartY - p.plotTop)) && + !p.openMenu + ? (n && this.runPointActions(f), + 'touchmove' === f.type && + ((n = this.pinchDown), + (r = n[0] + ? 4 <= + Math.sqrt( + Math.pow(n[0].chartX - f.chartX, 2) + + Math.pow(n[0].chartY - f.chartY, 2), + ) + : !1)), + l(r, !0) && this.pinch(f)) + : n && this.reset()) + : 2 === f.touches.length && this.pinch(f); + }, + onContainerTouchStart: function(a) { + this.zoomOption(a); + this.touch(a, !0); + }, + onContainerTouchMove: function(a) { + this.touch(a); + }, + onDocumentTouchEnd: function(f) { + E[a.hoverChartIndex] && E[a.hoverChartIndex].pointer.drop(f); + }, + }); + })(M); + (function(a) { + var E = a.addEvent, + D = a.charts, + H = a.css, + p = a.doc, + f = a.extend, + l = a.noop, + r = a.Pointer, + n = a.removeEvent, + w = a.win, + u = a.wrap; + if (!a.hasTouch && (w.PointerEvent || w.MSPointerEvent)) { + var e = {}, + h = !!w.PointerEvent, + m = function() { + var c = []; + c.item = function(a) { + return this[a]; + }; + a.objectEach(e, function(a) { + c.push({ pageX: a.pageX, pageY: a.pageY, target: a.target }); + }); + return c; + }, + d = function(c, b, d, e) { + ('touch' !== c.pointerType && + c.pointerType !== c.MSPOINTER_TYPE_TOUCH) || + !D[a.hoverChartIndex] || + (e(c), + (e = D[a.hoverChartIndex].pointer), + e[b]({ + type: d, + target: c.currentTarget, + preventDefault: l, + touches: m(), + })); + }; + f(r.prototype, { + onContainerPointerDown: function(a) { + d(a, 'onContainerTouchStart', 'touchstart', function(a) { + e[a.pointerId] = { + pageX: a.pageX, + pageY: a.pageY, + target: a.currentTarget, + }; + }); + }, + onContainerPointerMove: function(a) { + d(a, 'onContainerTouchMove', 'touchmove', function(a) { + e[a.pointerId] = { pageX: a.pageX, pageY: a.pageY }; + e[a.pointerId].target || (e[a.pointerId].target = a.currentTarget); + }); + }, + onDocumentPointerUp: function(a) { + d(a, 'onDocumentTouchEnd', 'touchend', function(a) { + delete e[a.pointerId]; + }); + }, + batchMSEvents: function(a) { + a( + this.chart.container, + h ? 'pointerdown' : 'MSPointerDown', + this.onContainerPointerDown, + ); + a( + this.chart.container, + h ? 'pointermove' : 'MSPointerMove', + this.onContainerPointerMove, + ); + a(p, h ? 'pointerup' : 'MSPointerUp', this.onDocumentPointerUp); + }, + }); + u(r.prototype, 'init', function(a, b, d) { + a.call(this, b, d); + this.hasZoom && + H(b.container, { + '-ms-touch-action': 'none', + 'touch-action': 'none', + }); + }); + u(r.prototype, 'setDOMEvents', function(a) { + a.apply(this); + (this.hasZoom || this.followTouchMove) && this.batchMSEvents(E); + }); + u(r.prototype, 'destroy', function(a) { + this.batchMSEvents(n); + a.call(this); + }); + } + })(M); + (function(a) { + var E = a.addEvent, + D = a.css, + H = a.discardElement, + p = a.defined, + f = a.each, + l = a.isFirefox, + r = a.marginNames, + n = a.merge, + w = a.pick, + u = a.setAnimation, + e = a.stableSort, + h = a.win, + m = a.wrap; + a.Legend = function(a, c) { + this.init(a, c); + }; + a.Legend.prototype = { + init: function(a, c) { + this.chart = a; + this.setOptions(c); + c.enabled && + (this.render(), + E(this.chart, 'endResize', function() { + this.legend.positionCheckboxes(); + })); + }, + setOptions: function(a) { + var c = w(a.padding, 8); + this.options = a; + this.itemStyle = a.itemStyle; + this.itemHiddenStyle = n(this.itemStyle, a.itemHiddenStyle); + this.itemMarginTop = a.itemMarginTop || 0; + this.padding = c; + this.initialItemY = c - 5; + this.itemHeight = this.maxItemWidth = 0; + this.symbolWidth = w(a.symbolWidth, 16); + this.pages = []; + }, + update: function(a, c) { + var b = this.chart; + this.setOptions(n(!0, this.options, a)); + this.destroy(); + b.isDirtyLegend = b.isDirtyBox = !0; + w(c, !0) && b.redraw(); + }, + colorizeItem: function(a, c) { + a.legendGroup[c ? 'removeClass' : 'addClass']( + 'highcharts-legend-item-hidden', + ); + var b = this.options, + d = a.legendItem, + e = a.legendLine, + h = a.legendSymbol, + f = this.itemHiddenStyle.color, + b = c ? b.itemStyle.color : f, + m = c ? a.color || f : f, + l = a.options && a.options.marker, + t = { fill: m }; + d && d.css({ fill: b, color: b }); + e && e.attr({ stroke: m }); + h && + (l && + h.isMarker && + ((t = a.pointAttribs()), c || (t.stroke = t.fill = f)), + h.attr(t)); + }, + positionItem: function(a) { + var c = this.options, + b = c.symbolPadding, + c = !c.rtl, + d = a._legendItemPos, + e = d[0], + d = d[1], + h = a.checkbox; + (a = a.legendGroup) && + a.element && + a.translate(c ? e : this.legendWidth - e - 2 * b - 4, d); + h && ((h.x = e), (h.y = d)); + }, + destroyItem: function(a) { + var c = a.checkbox; + f(['legendItem', 'legendLine', 'legendSymbol', 'legendGroup'], function( + b, + ) { + a[b] && (a[b] = a[b].destroy()); + }); + c && H(a.checkbox); + }, + destroy: function() { + function a(a) { + this[a] && (this[a] = this[a].destroy()); + } + f(this.getAllItems(), function(c) { + f(['legendItem', 'legendGroup'], a, c); + }); + f('clipRect up down pager nav box title group'.split(' '), a, this); + this.display = null; + }, + positionCheckboxes: function() { + var a = this.group && this.group.alignAttr, + c, + b = this.clipHeight || this.legendHeight, + e = this.titleHeight; + a && + ((c = a.translateY), + f( + this.allItems, + function(d) { + var k = d.checkbox, + h; + k && + ((h = c + e + k.y + (this.scrollOffset || 0) + 3), + D(k, { + left: a.translateX + d.checkboxOffset + k.x - 20 + 'px', + top: h + 'px', + display: h > c - 6 && h < c + b - 6 ? '' : 'none', + })); + }, + this, + )); + }, + renderTitle: function() { + var a = this.options, + c = this.padding, + b = a.title, + e = 0; + b.text && + (this.title || + (this.title = this.chart.renderer + .label( + b.text, + c - 3, + c - 4, + null, + null, + null, + a.useHTML, + null, + 'legend-title', + ) + .attr({ zIndex: 1 }) + .css(b.style) + .add(this.group)), + (a = this.title.getBBox()), + (e = a.height), + (this.offsetWidth = a.width), + this.contentGroup.attr({ translateY: e })); + this.titleHeight = e; + }, + setText: function(d) { + var c = this.options; + d.legendItem.attr({ + text: c.labelFormat + ? a.format(c.labelFormat, d) + : c.labelFormatter.call(d), + }); + }, + renderItem: function(a) { + var c = this.chart, + b = c.renderer, + d = this.options, + e = 'horizontal' === d.layout, + h = this.symbolWidth, + f = d.symbolPadding, + m = this.itemStyle, + l = this.itemHiddenStyle, + t = this.padding, + p = e ? w(d.itemDistance, 20) : 0, + r = !d.rtl, + q = d.width, + A = d.itemMarginBottom || 0, + F = this.itemMarginTop, + G = a.legendItem, + g = !a.series, + v = !g && a.series.drawLegendSymbol ? a.series : a, + u = v.options, + L = this.createCheckboxForItem && u && u.showCheckbox, + u = h + f + p + (L ? 20 : 0), + P = d.useHTML, + J = a.options.className; + G || + ((a.legendGroup = b + .g('legend-item') + .addClass( + 'highcharts-' + + v.type + + '-series highcharts-color-' + + a.colorIndex + + (J ? ' ' + J : '') + + (g ? ' highcharts-series-' + a.index : ''), + ) + .attr({ zIndex: 1 }) + .add(this.scrollGroup)), + (a.legendItem = G = b + .text('', r ? h + f : -f, this.baseline || 0, P) + .css(n(a.visible ? m : l)) + .attr({ align: r ? 'left' : 'right', zIndex: 2 }) + .add(a.legendGroup)), + this.baseline || + ((h = m.fontSize), + (this.fontMetrics = b.fontMetrics(h, G)), + (this.baseline = this.fontMetrics.f + 3 + F), + G.attr('y', this.baseline)), + (this.symbolHeight = d.symbolHeight || this.fontMetrics.f), + v.drawLegendSymbol(this, a), + this.setItemEvents && this.setItemEvents(a, G, P), + L && this.createCheckboxForItem(a)); + this.colorizeItem(a, a.visible); + m.width || + G.css({ width: (d.itemWidth || d.width || c.spacingBox.width) - u }); + this.setText(a); + b = G.getBBox(); + m = a.checkboxOffset = d.itemWidth || a.legendItemWidth || b.width + u; + this.itemHeight = b = Math.round( + a.legendItemHeight || b.height || this.symbolHeight, + ); + e && + this.itemX - t + m > (q || c.spacingBox.width - 2 * t - d.x) && + ((this.itemX = t), + (this.itemY += F + this.lastLineHeight + A), + (this.lastLineHeight = 0)); + this.maxItemWidth = Math.max(this.maxItemWidth, m); + this.lastItemY = F + this.itemY + A; + this.lastLineHeight = Math.max(b, this.lastLineHeight); + a._legendItemPos = [this.itemX, this.itemY]; + e + ? (this.itemX += m) + : ((this.itemY += F + b + A), (this.lastLineHeight = b)); + this.offsetWidth = + q || + Math.max( + (e ? this.itemX - t - (a.checkbox ? 0 : p) : m) + t, + this.offsetWidth, + ); + }, + getAllItems: function() { + var a = []; + f(this.chart.series, function(c) { + var b = c && c.options; + c && + w(b.showInLegend, p(b.linkedTo) ? !1 : void 0, !0) && + (a = a.concat( + c.legendItems || ('point' === b.legendType ? c.data : c), + )); + }); + return a; + }, + getAlignment: function() { + var a = this.options; + return a.floating + ? '' + : a.align.charAt(0) + a.verticalAlign.charAt(0) + a.layout.charAt(0); + }, + adjustMargins: function(a, c) { + var b = this.chart, + d = this.options, + e = this.getAlignment(); + e && + f( + [/(lth|ct|rth)/, /(rtv|rm|rbv)/, /(rbh|cb|lbh)/, /(lbv|lm|ltv)/], + function(k, h) { + k.test(e) && + !p(a[h]) && + (b[r[h]] = Math.max( + b[r[h]], + b.legend[(h + 1) % 2 ? 'legendHeight' : 'legendWidth'] + + [1, -1, -1, 1][h] * d[h % 2 ? 'x' : 'y'] + + w(d.margin, 12) + + c[h] + + (0 === h ? b.titleOffset + b.options.title.margin : 0), + )); + }, + ); + }, + render: function() { + var a = this, + c = a.chart, + b = c.renderer, + k = a.group, + h, + m, + l, + x, + p = a.box, + t = a.options, + C = a.padding; + a.itemX = C; + a.itemY = a.initialItemY; + a.offsetWidth = 0; + a.lastItemY = 0; + k || + ((a.group = k = b + .g('legend') + .attr({ zIndex: 7 }) + .add()), + (a.contentGroup = b + .g() + .attr({ zIndex: 1 }) + .add(k)), + (a.scrollGroup = b.g().add(a.contentGroup))); + a.renderTitle(); + h = a.getAllItems(); + e(h, function(a, b) { + return ( + ((a.options && a.options.legendIndex) || 0) - + ((b.options && b.options.legendIndex) || 0) + ); + }); + t.reversed && h.reverse(); + a.allItems = h; + a.display = m = !!h.length; + a.lastLineHeight = 0; + f(h, function(b) { + a.renderItem(b); + }); + l = (t.width || a.offsetWidth) + C; + x = a.lastItemY + a.lastLineHeight + a.titleHeight; + x = a.handleOverflow(x); + x += C; + p || + ((a.box = p = b + .rect() + .addClass('highcharts-legend-box') + .attr({ r: t.borderRadius }) + .add(k)), + (p.isNew = !0)); + p.attr({ + stroke: t.borderColor, + 'stroke-width': t.borderWidth || 0, + fill: t.backgroundColor || 'none', + }).shadow(t.shadow); + 0 < l && + 0 < x && + (p[p.isNew ? 'attr' : 'animate']( + p.crisp.call( + {}, + { x: 0, y: 0, width: l, height: x }, + p.strokeWidth(), + ), + ), + (p.isNew = !1)); + p[m ? 'show' : 'hide'](); + a.legendWidth = l; + a.legendHeight = x; + f(h, function(b) { + a.positionItem(b); + }); + m && + ((b = c.spacingBox), + /(lth|ct|rth)/.test(a.getAlignment()) && + (b = n(b, { y: b.y + c.titleOffset + c.options.title.margin })), + k.align(n(t, { width: l, height: x }), !0, b)); + c.isResizing || this.positionCheckboxes(); + }, + handleOverflow: function(a) { + var c = this, + b = this.chart, + d = b.renderer, + e = this.options, + h = e.y, + m = this.padding, + b = b.spacingBox.height + ('top' === e.verticalAlign ? -h : h) - m, + h = e.maxHeight, + l, + n = this.clipRect, + t = e.navigation, + p = w(t.animation, !0), + r = t.arrowSize || 12, + q = this.nav, + A = this.pages, + F, + G = this.allItems, + g = function(a) { + 'number' === typeof a + ? n.attr({ height: a }) + : n && ((c.clipRect = n.destroy()), c.contentGroup.clip()); + c.contentGroup.div && + (c.contentGroup.div.style.clip = a + ? 'rect(' + m + 'px,9999px,' + (m + a) + 'px,0)' + : 'auto'); + }; + 'horizontal' !== e.layout || + 'middle' === e.verticalAlign || + e.floating || + (b /= 2); + h && (b = Math.min(b, h)); + A.length = 0; + a > b && !1 !== t.enabled + ? ((this.clipHeight = l = Math.max(b - 20 - this.titleHeight - m, 0)), + (this.currentPage = w(this.currentPage, 1)), + (this.fullHeight = a), + f(G, function(a, b) { + var c = a._legendItemPos[1], + d = Math.round(a.legendItem.getBBox().height), + g = A.length; + if (!g || (c - A[g - 1] > l && (F || c) !== A[g - 1])) + A.push(F || c), g++; + a.pageIx = g - 1; + F && (G[b - 1].pageIx = g - 1); + b === G.length - 1 && + c + d - A[g - 1] > l && + (A.push(c), (a.pageIx = g)); + c !== F && (F = c); + }), + n || + ((n = c.clipRect = d.clipRect(0, m, 9999, 0)), + c.contentGroup.clip(n)), + g(l), + q || + ((this.nav = q = d + .g() + .attr({ zIndex: 1 }) + .add(this.group)), + (this.up = d + .symbol('triangle', 0, 0, r, r) + .on('click', function() { + c.scroll(-1, p); + }) + .add(q)), + (this.pager = d + .text('', 15, 10) + .addClass('highcharts-legend-navigation') + .css(t.style) + .add(q)), + (this.down = d + .symbol('triangle-down', 0, 0, r, r) + .on('click', function() { + c.scroll(1, p); + }) + .add(q))), + c.scroll(0), + (a = b)) + : q && + (g(), + (this.nav = q.destroy()), + this.scrollGroup.attr({ translateY: 1 }), + (this.clipHeight = 0)); + return a; + }, + scroll: function(a, c) { + var b = this.pages, + d = b.length; + a = this.currentPage + a; + var e = this.clipHeight, + h = this.options.navigation, + f = this.pager, + m = this.padding; + a > d && (a = d); + 0 < a && + (void 0 !== c && u(c, this.chart), + this.nav.attr({ + translateX: m, + translateY: e + this.padding + 7 + this.titleHeight, + visibility: 'visible', + }), + this.up.attr({ + class: + 1 === a + ? 'highcharts-legend-nav-inactive' + : 'highcharts-legend-nav-active', + }), + f.attr({ text: a + '/' + d }), + this.down.attr({ + x: 18 + this.pager.getBBox().width, + class: + a === d + ? 'highcharts-legend-nav-inactive' + : 'highcharts-legend-nav-active', + }), + this.up + .attr({ fill: 1 === a ? h.inactiveColor : h.activeColor }) + .css({ cursor: 1 === a ? 'default' : 'pointer' }), + this.down + .attr({ fill: a === d ? h.inactiveColor : h.activeColor }) + .css({ cursor: a === d ? 'default' : 'pointer' }), + (this.scrollOffset = -b[a - 1] + this.initialItemY), + this.scrollGroup.animate({ translateY: this.scrollOffset }), + (this.currentPage = a), + this.positionCheckboxes()); + }, + }; + a.LegendSymbolMixin = { + drawRectangle: function(a, c) { + var b = a.symbolHeight, + d = a.options.squareSymbol; + c.legendSymbol = this.chart.renderer + .rect( + d ? (a.symbolWidth - b) / 2 : 0, + a.baseline - b + 1, + d ? b : a.symbolWidth, + b, + w(a.options.symbolRadius, b / 2), + ) + .addClass('highcharts-point') + .attr({ zIndex: 3 }) + .add(c.legendGroup); + }, + drawLineMarker: function(a) { + var c = this.options, + b = c.marker, + d = a.symbolWidth, + e = a.symbolHeight, + h = e / 2, + f = this.chart.renderer, + m = this.legendGroup; + a = a.baseline - Math.round(0.3 * a.fontMetrics.b); + var l; + l = { 'stroke-width': c.lineWidth || 0 }; + c.dashStyle && (l.dashstyle = c.dashStyle); + this.legendLine = f + .path(['M', 0, a, 'L', d, a]) + .addClass('highcharts-graph') + .attr(l) + .add(m); + b && + !1 !== b.enabled && + ((c = Math.min(w(b.radius, h), h)), + 0 === this.symbol.indexOf('url') && + ((b = n(b, { width: e, height: e })), (c = 0)), + (this.legendSymbol = b = f + .symbol(this.symbol, d / 2 - c, a - c, 2 * c, 2 * c, b) + .addClass('highcharts-point') + .add(m)), + (b.isMarker = !0)); + }, + }; + (/Trident\/7\.0/.test(h.navigator.userAgent) || l) && + m(a.Legend.prototype, 'positionItem', function(a, c) { + var b = this, + d = function() { + c._legendItemPos && a.call(b, c); + }; + d(); + setTimeout(d); + }); + })(M); + (function(a) { + var E = a.addEvent, + D = a.animate, + H = a.animObject, + p = a.attr, + f = a.doc, + l = a.Axis, + r = a.createElement, + n = a.defaultOptions, + w = a.discardElement, + u = a.charts, + e = a.css, + h = a.defined, + m = a.each, + d = a.extend, + c = a.find, + b = a.fireEvent, + k = a.grep, + z = a.isNumber, + B = a.isObject, + I = a.isString, + x = a.Legend, + K = a.marginNames, + t = a.merge, + C = a.objectEach, + N = a.Pointer, + q = a.pick, + A = a.pInt, + F = a.removeEvent, + G = a.seriesTypes, + g = a.splat, + v = a.svg, + Q = a.syncTimeout, + L = a.win, + P = (a.Chart = function() { + this.getArgs.apply(this, arguments); + }); + a.chart = function(a, b, c) { + return new P(a, b, c); + }; + d(P.prototype, { + callbacks: [], + getArgs: function() { + var a = [].slice.call(arguments); + if (I(a[0]) || a[0].nodeName) this.renderTo = a.shift(); + this.init(a[0], a[1]); + }, + init: function(b, c) { + var d, + g, + e = b.series, + k = b.plotOptions || {}; + b.series = null; + d = t(n, b); + for (g in d.plotOptions) + d.plotOptions[g].tooltip = (k[g] && t(k[g].tooltip)) || void 0; + d.tooltip.userOptions = + (b.chart && b.chart.forExport && b.tooltip.userOptions) || b.tooltip; + d.series = b.series = e; + this.userOptions = b; + b = d.chart; + g = b.events; + this.margin = []; + this.spacing = []; + this.bounds = { h: {}, v: {} }; + this.labelCollectors = []; + this.callback = c; + this.isResizing = 0; + this.options = d; + this.axes = []; + this.series = []; + this.hasCartesianSeries = b.showAxes; + var q = this; + q.index = u.length; + u.push(q); + a.chartCount++; + g && + C(g, function(a, b) { + E(q, b, a); + }); + q.xAxis = []; + q.yAxis = []; + q.pointCount = q.colorCounter = q.symbolCounter = 0; + q.firstRender(); + }, + initSeries: function(b) { + var c = this.options.chart; + (c = G[b.type || c.type || c.defaultSeriesType]) || a.error(17, !0); + c = new c(); + c.init(this, b); + return c; + }, + orderSeries: function(a) { + var b = this.series; + for (a = a || 0; a < b.length; a++) + b[a] && + ((b[a].index = a), + (b[a].name = b[a].name || 'Series ' + (b[a].index + 1))); + }, + isInsidePlot: function(a, b, c) { + var d = c ? b : a; + a = c ? a : b; + return 0 <= d && d <= this.plotWidth && 0 <= a && a <= this.plotHeight; + }, + redraw: function(c) { + var g = this.axes, + e = this.series, + k = this.pointer, + q = this.legend, + h = this.isDirtyLegend, + f, + l, + v = this.hasCartesianSeries, + A = this.isDirtyBox, + F, + t = this.renderer, + x = t.isHidden(), + n = []; + this.setResponsive && this.setResponsive(!1); + a.setAnimation(c, this); + x && this.temporaryDisplay(); + this.layOutTitles(); + for (c = e.length; c--; ) + if (((F = e[c]), F.options.stacking && ((f = !0), F.isDirty))) { + l = !0; + break; + } + if (l) + for (c = e.length; c--; ) + (F = e[c]), F.options.stacking && (F.isDirty = !0); + m(e, function(a) { + a.isDirty && + 'point' === a.options.legendType && + (a.updateTotals && a.updateTotals(), (h = !0)); + a.isDirtyData && b(a, 'updatedData'); + }); + h && q.options.enabled && (q.render(), (this.isDirtyLegend = !1)); + f && this.getStacks(); + v && + m(g, function(a) { + a.updateNames(); + a.setScale(); + }); + this.getMargins(); + v && + (m(g, function(a) { + a.isDirty && (A = !0); + }), + m(g, function(a) { + var c = a.min + ',' + a.max; + a.extKey !== c && + ((a.extKey = c), + n.push(function() { + b(a, 'afterSetExtremes', d(a.eventArgs, a.getExtremes())); + delete a.eventArgs; + })); + (A || f) && a.redraw(); + })); + A && this.drawChartBox(); + b(this, 'predraw'); + m(e, function(a) { + (A || a.isDirty) && a.visible && a.redraw(); + a.isDirtyData = !1; + }); + k && k.reset(!0); + t.draw(); + b(this, 'redraw'); + b(this, 'render'); + x && this.temporaryDisplay(!0); + m(n, function(a) { + a.call(); + }); + }, + get: function(a) { + function b(b) { + return b.id === a || (b.options && b.options.id === a); + } + var d, + g = this.series, + e; + d = c(this.axes, b) || c(this.series, b); + for (e = 0; !d && e < g.length; e++) d = c(g[e].points || [], b); + return d; + }, + getAxes: function() { + var a = this, + b = this.options, + c = (b.xAxis = g(b.xAxis || {})), + b = (b.yAxis = g(b.yAxis || {})); + m(c, function(a, b) { + a.index = b; + a.isX = !0; + }); + m(b, function(a, b) { + a.index = b; + }); + c = c.concat(b); + m(c, function(b) { + new l(a, b); + }); + }, + getSelectedPoints: function() { + var a = []; + m(this.series, function(b) { + a = a.concat( + k(b.data || [], function(a) { + return a.selected; + }), + ); + }); + return a; + }, + getSelectedSeries: function() { + return k(this.series, function(a) { + return a.selected; + }); + }, + setTitle: function(a, b, c) { + var d = this, + g = d.options, + e; + e = g.title = t( + { + style: { color: '#333333', fontSize: g.isStock ? '16px' : '18px' }, + }, + g.title, + a, + ); + g = g.subtitle = t({ style: { color: '#666666' } }, g.subtitle, b); + m([['title', a, e], ['subtitle', b, g]], function(a, b) { + var c = a[0], + g = d[c], + e = a[1]; + a = a[2]; + g && e && (d[c] = g = g.destroy()); + a && + !g && + ((d[c] = d.renderer + .text(a.text, 0, 0, a.useHTML) + .attr({ + align: a.align, + class: 'highcharts-' + c, + zIndex: a.zIndex || 4, + }) + .add()), + (d[c].update = function(a) { + d.setTitle(!b && a, b && a); + }), + d[c].css(a.style)); + }); + d.layOutTitles(c); + }, + layOutTitles: function(a) { + var b = 0, + c, + g = this.renderer, + e = this.spacingBox; + m( + ['title', 'subtitle'], + function(a) { + var c = this[a], + k = this.options[a]; + a = 'title' === a ? -3 : k.verticalAlign ? 0 : b + 2; + var q; + c && + ((q = k.style.fontSize), + (q = g.fontMetrics(q, c).b), + c + .css({ width: (k.width || e.width + k.widthAdjust) + 'px' }) + .align(d({ y: a + q }, k), !1, 'spacingBox'), + k.floating || + k.verticalAlign || + (b = Math.ceil(b + c.getBBox(k.useHTML).height))); + }, + this, + ); + c = this.titleOffset !== b; + this.titleOffset = b; + !this.isDirtyBox && + c && + ((this.isDirtyBox = c), + this.hasRendered && q(a, !0) && this.isDirtyBox && this.redraw()); + }, + getChartSize: function() { + var b = this.options.chart, + c = b.width, + b = b.height, + d = this.renderTo; + h(c) || (this.containerWidth = a.getStyle(d, 'width')); + h(b) || (this.containerHeight = a.getStyle(d, 'height')); + this.chartWidth = Math.max(0, c || this.containerWidth || 600); + this.chartHeight = Math.max( + 0, + a.relativeLength(b, this.chartWidth) || + (1 < this.containerHeight ? this.containerHeight : 400), + ); + }, + temporaryDisplay: function(b) { + var c = this.renderTo; + if (b) + for (; c && c.style; ) + c.hcOrigStyle && (a.css(c, c.hcOrigStyle), delete c.hcOrigStyle), + c.hcOrigDetached && + (f.body.removeChild(c), (c.hcOrigDetached = !1)), + (c = c.parentNode); + else + for (; c && c.style; ) { + f.body.contains(c) || + c.parentNode || + ((c.hcOrigDetached = !0), f.body.appendChild(c)); + if ('none' === a.getStyle(c, 'display', !1) || c.hcOricDetached) + (c.hcOrigStyle = { + display: c.style.display, + height: c.style.height, + overflow: c.style.overflow, + }), + (b = { display: 'block', overflow: 'hidden' }), + c !== this.renderTo && (b.height = 0), + a.css(c, b), + c.offsetWidth || + c.style.setProperty('display', 'block', 'important'); + c = c.parentNode; + if (c === f.body) break; + } + }, + setClassName: function(a) { + this.container.className = 'highcharts-container ' + (a || ''); + }, + getContainer: function() { + var b, + c = this.options, + g = c.chart, + e, + k; + b = this.renderTo; + var q = a.uniqueKey(), + h; + b || (this.renderTo = b = g.renderTo); + I(b) && (this.renderTo = b = f.getElementById(b)); + b || a.error(13, !0); + e = A(p(b, 'data-highcharts-chart')); + z(e) && u[e] && u[e].hasRendered && u[e].destroy(); + p(b, 'data-highcharts-chart', this.index); + b.innerHTML = ''; + g.skipClone || b.offsetWidth || this.temporaryDisplay(); + this.getChartSize(); + e = this.chartWidth; + k = this.chartHeight; + h = d( + { + position: 'relative', + overflow: 'hidden', + width: e + 'px', + height: k + 'px', + textAlign: 'left', + lineHeight: 'normal', + zIndex: 0, + '-webkit-tap-highlight-color': 'rgba(0,0,0,0)', + }, + g.style, + ); + this.container = b = r('div', { id: q }, h, b); + this._cursor = b.style.cursor; + this.renderer = new (a[g.renderer] || a.Renderer)( + b, + e, + k, + null, + g.forExport, + c.exporting && c.exporting.allowHTML, + ); + this.setClassName(g.className); + this.renderer.setStyle(g.style); + this.renderer.chartIndex = this.index; + }, + getMargins: function(a) { + var b = this.spacing, + c = this.margin, + d = this.titleOffset; + this.resetMargins(); + d && + !h(c[0]) && + (this.plotTop = Math.max( + this.plotTop, + d + this.options.title.margin + b[0], + )); + this.legend && this.legend.display && this.legend.adjustMargins(c, b); + this.extraMargin && + (this[this.extraMargin.type] = + (this[this.extraMargin.type] || 0) + this.extraMargin.value); + this.adjustPlotArea && this.adjustPlotArea(); + a || this.getAxisMargins(); + }, + getAxisMargins: function() { + var a = this, + b = (a.axisOffset = [0, 0, 0, 0]), + c = a.margin; + a.hasCartesianSeries && + m(a.axes, function(a) { + a.visible && a.getOffset(); + }); + m(K, function(d, g) { + h(c[g]) || (a[d] += b[g]); + }); + a.setChartSize(); + }, + reflow: function(b) { + var c = this, + d = c.options.chart, + g = c.renderTo, + e = h(d.width) && h(d.height), + k = d.width || a.getStyle(g, 'width'), + d = d.height || a.getStyle(g, 'height'), + g = b ? b.target : L; + if (!e && !c.isPrinting && k && d && (g === L || g === f)) { + if (k !== c.containerWidth || d !== c.containerHeight) + clearTimeout(c.reflowTimeout), + (c.reflowTimeout = Q( + function() { + c.container && c.setSize(void 0, void 0, !1); + }, + b ? 100 : 0, + )); + c.containerWidth = k; + c.containerHeight = d; + } + }, + initReflow: function() { + var a = this, + b; + b = E(L, 'resize', function(b) { + a.reflow(b); + }); + E(a, 'destroy', b); + }, + setSize: function(c, d, g) { + var k = this, + q = k.renderer; + k.isResizing += 1; + a.setAnimation(g, k); + k.oldChartHeight = k.chartHeight; + k.oldChartWidth = k.chartWidth; + void 0 !== c && (k.options.chart.width = c); + void 0 !== d && (k.options.chart.height = d); + k.getChartSize(); + c = q.globalAnimation; + (c ? D : e)( + k.container, + { width: k.chartWidth + 'px', height: k.chartHeight + 'px' }, + c, + ); + k.setChartSize(!0); + q.setSize(k.chartWidth, k.chartHeight, g); + m(k.axes, function(a) { + a.isDirty = !0; + a.setScale(); + }); + k.isDirtyLegend = !0; + k.isDirtyBox = !0; + k.layOutTitles(); + k.getMargins(); + k.redraw(g); + k.oldChartHeight = null; + b(k, 'resize'); + Q(function() { + k && + b(k, 'endResize', null, function() { + --k.isResizing; + }); + }, H(c).duration); + }, + setChartSize: function(a) { + var b = this.inverted, + c = this.renderer, + d = this.chartWidth, + g = this.chartHeight, + e = this.options.chart, + k = this.spacing, + q = this.clipOffset, + h, + f, + l, + v; + this.plotLeft = h = Math.round(this.plotLeft); + this.plotTop = f = Math.round(this.plotTop); + this.plotWidth = l = Math.max(0, Math.round(d - h - this.marginRight)); + this.plotHeight = v = Math.max( + 0, + Math.round(g - f - this.marginBottom), + ); + this.plotSizeX = b ? v : l; + this.plotSizeY = b ? l : v; + this.plotBorderWidth = e.plotBorderWidth || 0; + this.spacingBox = c.spacingBox = { + x: k[3], + y: k[0], + width: d - k[3] - k[1], + height: g - k[0] - k[2], + }; + this.plotBox = c.plotBox = { x: h, y: f, width: l, height: v }; + d = 2 * Math.floor(this.plotBorderWidth / 2); + b = Math.ceil(Math.max(d, q[3]) / 2); + c = Math.ceil(Math.max(d, q[0]) / 2); + this.clipBox = { + x: b, + y: c, + width: Math.floor(this.plotSizeX - Math.max(d, q[1]) / 2 - b), + height: Math.max( + 0, + Math.floor(this.plotSizeY - Math.max(d, q[2]) / 2 - c), + ), + }; + a || + m(this.axes, function(a) { + a.setAxisSize(); + a.setAxisTranslation(); + }); + }, + resetMargins: function() { + var a = this, + b = a.options.chart; + m(['margin', 'spacing'], function(c) { + var d = b[c], + g = B(d) ? d : [d, d, d, d]; + m(['Top', 'Right', 'Bottom', 'Left'], function(d, e) { + a[c][e] = q(b[c + d], g[e]); + }); + }); + m(K, function(b, c) { + a[b] = q(a.margin[c], a.spacing[c]); + }); + a.axisOffset = [0, 0, 0, 0]; + a.clipOffset = [0, 0, 0, 0]; + }, + drawChartBox: function() { + var a = this.options.chart, + b = this.renderer, + c = this.chartWidth, + d = this.chartHeight, + g = this.chartBackground, + e = this.plotBackground, + k = this.plotBorder, + q, + h = this.plotBGImage, + f = a.backgroundColor, + m = a.plotBackgroundColor, + l = a.plotBackgroundImage, + v, + A = this.plotLeft, + F = this.plotTop, + t = this.plotWidth, + x = this.plotHeight, + n = this.plotBox, + p = this.clipRect, + z = this.clipBox, + G = 'animate'; + g || + ((this.chartBackground = g = b + .rect() + .addClass('highcharts-background') + .add()), + (G = 'attr')); + q = a.borderWidth || 0; + v = q + (a.shadow ? 8 : 0); + f = { fill: f || 'none' }; + if (q || g['stroke-width']) + (f.stroke = a.borderColor), (f['stroke-width'] = q); + g.attr(f).shadow(a.shadow); + g[G]({ + x: v / 2, + y: v / 2, + width: c - v - (q % 2), + height: d - v - (q % 2), + r: a.borderRadius, + }); + G = 'animate'; + e || + ((G = 'attr'), + (this.plotBackground = e = b + .rect() + .addClass('highcharts-plot-background') + .add())); + e[G](n); + e.attr({ fill: m || 'none' }).shadow(a.plotShadow); + l && + (h + ? h.animate(n) + : (this.plotBGImage = b.image(l, A, F, t, x).add())); + p + ? p.animate({ width: z.width, height: z.height }) + : (this.clipRect = b.clipRect(z)); + G = 'animate'; + k || + ((G = 'attr'), + (this.plotBorder = k = b + .rect() + .addClass('highcharts-plot-border') + .attr({ zIndex: 1 }) + .add())); + k.attr({ + stroke: a.plotBorderColor, + 'stroke-width': a.plotBorderWidth || 0, + fill: 'none', + }); + k[G](k.crisp({ x: A, y: F, width: t, height: x }, -k.strokeWidth())); + this.isDirtyBox = !1; + }, + propFromSeries: function() { + var a = this, + b = a.options.chart, + c, + d = a.options.series, + g, + e; + m(['inverted', 'angular', 'polar'], function(k) { + c = G[b.type || b.defaultSeriesType]; + e = b[k] || (c && c.prototype[k]); + for (g = d && d.length; !e && g--; ) + (c = G[d[g].type]) && c.prototype[k] && (e = !0); + a[k] = e; + }); + }, + linkSeries: function() { + var a = this, + b = a.series; + m(b, function(a) { + a.linkedSeries.length = 0; + }); + m(b, function(b) { + var c = b.options.linkedTo; + I(c) && + (c = ':previous' === c ? a.series[b.index - 1] : a.get(c)) && + c.linkedParent !== b && + (c.linkedSeries.push(b), + (b.linkedParent = c), + (b.visible = q(b.options.visible, c.options.visible, b.visible))); + }); + }, + renderSeries: function() { + m(this.series, function(a) { + a.translate(); + a.render(); + }); + }, + renderLabels: function() { + var a = this, + b = a.options.labels; + b.items && + m(b.items, function(c) { + var g = d(b.style, c.style), + e = A(g.left) + a.plotLeft, + k = A(g.top) + a.plotTop + 12; + delete g.left; + delete g.top; + a.renderer + .text(c.html, e, k) + .attr({ zIndex: 2 }) + .css(g) + .add(); + }); + }, + render: function() { + var a = this.axes, + b = this.renderer, + c = this.options, + d, + g, + e; + this.setTitle(); + this.legend = new x(this, c.legend); + this.getStacks && this.getStacks(); + this.getMargins(!0); + this.setChartSize(); + c = this.plotWidth; + d = this.plotHeight = Math.max(this.plotHeight - 21, 0); + m(a, function(a) { + a.setScale(); + }); + this.getAxisMargins(); + g = 1.1 < c / this.plotWidth; + e = 1.05 < d / this.plotHeight; + if (g || e) + m(a, function(a) { + ((a.horiz && g) || (!a.horiz && e)) && a.setTickInterval(!0); + }), + this.getMargins(); + this.drawChartBox(); + this.hasCartesianSeries && + m(a, function(a) { + a.visible && a.render(); + }); + this.seriesGroup || + (this.seriesGroup = b + .g('series-group') + .attr({ zIndex: 3 }) + .add()); + this.renderSeries(); + this.renderLabels(); + this.addCredits(); + this.setResponsive && this.setResponsive(); + this.hasRendered = !0; + }, + addCredits: function(a) { + var b = this; + a = t(!0, this.options.credits, a); + a.enabled && + !this.credits && + ((this.credits = this.renderer + .text(a.text + (this.mapCredits || ''), 0, 0) + .addClass('highcharts-credits') + .on('click', function() { + a.href && (L.location.href = a.href); + }) + .attr({ align: a.position.align, zIndex: 8 }) + .css(a.style) + .add() + .align(a.position)), + (this.credits.update = function(a) { + b.credits = b.credits.destroy(); + b.addCredits(a); + })); + }, + destroy: function() { + var c = this, + d = c.axes, + g = c.series, + e = c.container, + k, + q = e && e.parentNode; + b(c, 'destroy'); + c.renderer.forExport ? a.erase(u, c) : (u[c.index] = void 0); + a.chartCount--; + c.renderTo.removeAttribute('data-highcharts-chart'); + F(c); + for (k = d.length; k--; ) d[k] = d[k].destroy(); + this.scroller && this.scroller.destroy && this.scroller.destroy(); + for (k = g.length; k--; ) g[k] = g[k].destroy(); + m( + 'title subtitle chartBackground plotBackground plotBGImage plotBorder seriesGroup clipRect credits pointer rangeSelector legend resetZoomButton tooltip renderer'.split( + ' ', + ), + function(a) { + var b = c[a]; + b && b.destroy && (c[a] = b.destroy()); + }, + ); + e && ((e.innerHTML = ''), F(e), q && w(e)); + C(c, function(a, b) { + delete c[b]; + }); + }, + isReadyToRender: function() { + var a = this; + return v || L != L.top || 'complete' === f.readyState + ? !0 + : (f.attachEvent('onreadystatechange', function() { + f.detachEvent('onreadystatechange', a.firstRender); + 'complete' === f.readyState && a.firstRender(); + }), + !1); + }, + firstRender: function() { + var a = this, + c = a.options; + if (a.isReadyToRender()) { + a.getContainer(); + b(a, 'init'); + a.resetMargins(); + a.setChartSize(); + a.propFromSeries(); + a.getAxes(); + m(c.series || [], function(b) { + a.initSeries(b); + }); + a.linkSeries(); + b(a, 'beforeRender'); + N && (a.pointer = new N(a, c)); + a.render(); + if (!a.renderer.imgCount && a.onload) a.onload(); + a.temporaryDisplay(!0); + } + }, + onload: function() { + m( + [this.callback].concat(this.callbacks), + function(a) { + a && void 0 !== this.index && a.apply(this, [this]); + }, + this, + ); + b(this, 'load'); + b(this, 'render'); + h(this.index) && !1 !== this.options.chart.reflow && this.initReflow(); + this.onload = null; + }, + }); + })(M); + (function(a) { + var E, + D = a.each, + H = a.extend, + p = a.erase, + f = a.fireEvent, + l = a.format, + r = a.isArray, + n = a.isNumber, + w = a.pick, + u = a.removeEvent; + a.Point = E = function() {}; + a.Point.prototype = { + init: function(a, h, f) { + this.series = a; + this.color = a.color; + this.applyOptions(h, f); + a.options.colorByPoint + ? ((h = a.options.colors || a.chart.options.colors), + (this.color = this.color || h[a.colorCounter]), + (h = h.length), + (f = a.colorCounter), + a.colorCounter++, + a.colorCounter === h && (a.colorCounter = 0)) + : (f = a.colorIndex); + this.colorIndex = w(this.colorIndex, f); + a.chart.pointCount++; + return this; + }, + applyOptions: function(a, h) { + var e = this.series, + d = e.options.pointValKey || e.pointValKey; + a = E.prototype.optionsToObject.call(this, a); + H(this, a); + this.options = this.options ? H(this.options, a) : a; + a.group && delete this.group; + d && (this.y = this[d]); + this.isNull = w( + this.isValid && !this.isValid(), + null === this.x || !n(this.y, !0), + ); + this.selected && (this.state = 'select'); + 'name' in this && + void 0 === h && + e.xAxis && + e.xAxis.hasNames && + (this.x = e.xAxis.nameToX(this)); + void 0 === this.x && + e && + (this.x = void 0 === h ? e.autoIncrement(this) : h); + return this; + }, + optionsToObject: function(a) { + var e = {}, + f = this.series, + d = f.options.keys, + c = d || f.pointArrayMap || ['y'], + b = c.length, + k = 0, + l = 0; + if (n(a) || null === a) e[c[0]] = a; + else if (r(a)) + for ( + !d && + a.length > b && + ((f = typeof a[0]), + 'string' === f ? (e.name = a[0]) : 'number' === f && (e.x = a[0]), + k++); + l < b; + + ) + (d && void 0 === a[k]) || (e[c[l]] = a[k]), k++, l++; + else + 'object' === typeof a && + ((e = a), + a.dataLabels && (f._hasPointLabels = !0), + a.marker && (f._hasPointMarkers = !0)); + return e; + }, + getClassName: function() { + return ( + 'highcharts-point' + + (this.selected ? ' highcharts-point-select' : '') + + (this.negative ? ' highcharts-negative' : '') + + (this.isNull ? ' highcharts-null-point' : '') + + (void 0 !== this.colorIndex + ? ' highcharts-color-' + this.colorIndex + : '') + + (this.options.className ? ' ' + this.options.className : '') + + (this.zone && this.zone.className + ? ' ' + this.zone.className.replace('highcharts-negative', '') + : '') + ); + }, + getZone: function() { + var a = this.series, + h = a.zones, + a = a.zoneAxis || 'y', + f = 0, + d; + for (d = h[f]; this[a] >= d.value; ) d = h[++f]; + d && d.color && !this.options.color && (this.color = d.color); + return d; + }, + destroy: function() { + var a = this.series.chart, + h = a.hoverPoints, + f; + a.pointCount--; + h && (this.setState(), p(h, this), h.length || (a.hoverPoints = null)); + if (this === a.hoverPoint) this.onMouseOut(); + if (this.graphic || this.dataLabel) u(this), this.destroyElements(); + this.legendItem && a.legend.destroyItem(this); + for (f in this) this[f] = null; + }, + destroyElements: function() { + for ( + var a = [ + 'graphic', + 'dataLabel', + 'dataLabelUpper', + 'connector', + 'shadowGroup', + ], + h, + f = 6; + f--; + + ) + (h = a[f]), this[h] && (this[h] = this[h].destroy()); + }, + getLabelConfig: function() { + return { + x: this.category, + y: this.y, + color: this.color, + colorIndex: this.colorIndex, + key: this.name || this.category, + series: this.series, + point: this, + percentage: this.percentage, + total: this.total || this.stackTotal, + }; + }, + tooltipFormatter: function(a) { + var e = this.series, + f = e.tooltipOptions, + d = w(f.valueDecimals, ''), + c = f.valuePrefix || '', + b = f.valueSuffix || ''; + D(e.pointArrayMap || ['y'], function(e) { + e = '{point.' + e; + if (c || b) a = a.replace(e + '}', c + e + '}' + b); + a = a.replace(e + '}', e + ':,.' + d + 'f}'); + }); + return l(a, { point: this, series: this.series }); + }, + firePointEvent: function(a, h, m) { + var d = this, + c = this.series.options; + (c.point.events[a] || + (d.options && d.options.events && d.options.events[a])) && + this.importEvents(); + 'click' === a && + c.allowPointSelect && + (m = function(a) { + d.select && d.select(null, a.ctrlKey || a.metaKey || a.shiftKey); + }); + f(this, a, h, m); + }, + visible: !0, + }; + })(M); + (function(a) { + var E = a.addEvent, + D = a.animObject, + H = a.arrayMax, + p = a.arrayMin, + f = a.correctFloat, + l = a.Date, + r = a.defaultOptions, + n = a.defaultPlotOptions, + w = a.defined, + u = a.each, + e = a.erase, + h = a.extend, + m = a.fireEvent, + d = a.grep, + c = a.isArray, + b = a.isNumber, + k = a.isString, + z = a.merge, + B = a.objectEach, + I = a.pick, + x = a.removeEvent, + K = a.splat, + t = a.SVGElement, + C = a.syncTimeout, + N = a.win; + a.Series = a.seriesType( + 'line', + null, + { + lineWidth: 2, + allowPointSelect: !1, + showCheckbox: !1, + animation: { duration: 1e3 }, + events: {}, + marker: { + lineWidth: 0, + lineColor: '#ffffff', + radius: 4, + states: { + hover: { + animation: { duration: 50 }, + enabled: !0, + radiusPlus: 2, + lineWidthPlus: 1, + }, + select: { + fillColor: '#cccccc', + lineColor: '#000000', + lineWidth: 2, + }, + }, + }, + point: { events: {} }, + dataLabels: { + align: 'center', + formatter: function() { + return null === this.y ? '' : a.numberFormat(this.y, -1); + }, + style: { + fontSize: '11px', + fontWeight: 'bold', + color: 'contrast', + textOutline: '1px contrast', + }, + verticalAlign: 'bottom', + x: 0, + y: 0, + padding: 5, + }, + cropThreshold: 300, + pointRange: 0, + softThreshold: !0, + states: { + hover: { + animation: { duration: 50 }, + lineWidthPlus: 1, + marker: {}, + halo: { size: 10, opacity: 0.25 }, + }, + select: { marker: {} }, + }, + stickyTracking: !0, + turboThreshold: 1e3, + findNearestPointBy: 'x', + }, + { + isCartesian: !0, + pointClass: a.Point, + sorted: !0, + requireSorting: !0, + directTouch: !1, + axisTypes: ['xAxis', 'yAxis'], + colorCounter: 0, + parallelArrays: ['x', 'y'], + coll: 'series', + init: function(a, b) { + var c = this, + d, + g = a.series, + e; + c.chart = a; + c.options = b = c.setOptions(b); + c.linkedSeries = []; + c.bindAxes(); + h(c, { + name: b.name, + state: '', + visible: !1 !== b.visible, + selected: !0 === b.selected, + }); + d = b.events; + B(d, function(a, b) { + E(c, b, a); + }); + if ( + (d && d.click) || + (b.point && b.point.events && b.point.events.click) || + b.allowPointSelect + ) + a.runTrackerClick = !0; + c.getColor(); + c.getSymbol(); + u(c.parallelArrays, function(a) { + c[a + 'Data'] = []; + }); + c.setData(b.data, !1); + c.isCartesian && (a.hasCartesianSeries = !0); + g.length && (e = g[g.length - 1]); + c._i = I(e && e._i, -1) + 1; + a.orderSeries(this.insert(g)); + }, + insert: function(a) { + var c = this.options.index, + d; + if (b(c)) { + for (d = a.length; d--; ) + if (c >= I(a[d].options.index, a[d]._i)) { + a.splice(d + 1, 0, this); + break; + } + -1 === d && a.unshift(this); + d += 1; + } else a.push(this); + return I(d, a.length - 1); + }, + bindAxes: function() { + var b = this, + c = b.options, + d = b.chart, + e; + u(b.axisTypes || [], function(g) { + u(d[g], function(a) { + e = a.options; + if ( + c[g] === e.index || + (void 0 !== c[g] && c[g] === e.id) || + (void 0 === c[g] && 0 === e.index) + ) + b.insert(a.series), (b[g] = a), (a.isDirty = !0); + }); + b[g] || b.optionalAxis === g || a.error(18, !0); + }); + }, + updateParallelArrays: function(a, c) { + var d = a.series, + e = arguments, + g = b(c) + ? function(b) { + var g = 'y' === b && d.toYData ? d.toYData(a) : a[b]; + d[b + 'Data'][c] = g; + } + : function(a) { + Array.prototype[c].apply( + d[a + 'Data'], + Array.prototype.slice.call(e, 2), + ); + }; + u(d.parallelArrays, g); + }, + autoIncrement: function() { + var b = this.options, + c = this.xIncrement, + d, + e = b.pointIntervalUnit, + g = 0, + c = I(c, b.pointStart, 0); + this.pointInterval = d = I(this.pointInterval, b.pointInterval, 1); + e && + ((b = new l(c)), + 'day' === e + ? (b = +b[l.hcSetDate](b[l.hcGetDate]() + d)) + : 'month' === e + ? (b = +b[l.hcSetMonth](b[l.hcGetMonth]() + d)) + : 'year' === e && + (b = +b[l.hcSetFullYear](b[l.hcGetFullYear]() + d)), + l.hcHasTimeZone && (g = a.getTZOffset(b) - a.getTZOffset(c)), + (d = b - c + g)); + this.xIncrement = c + d; + return c; + }, + setOptions: function(a) { + var b = this.chart, + c = b.options, + d = c.plotOptions, + g = (b.userOptions || {}).plotOptions || {}, + e = d[this.type]; + this.userOptions = a; + b = z(e, d.series, a); + this.tooltipOptions = z( + r.tooltip, + r.plotOptions.series && r.plotOptions.series.tooltip, + r.plotOptions[this.type].tooltip, + c.tooltip.userOptions, + d.series && d.series.tooltip, + d[this.type].tooltip, + a.tooltip, + ); + this.stickyTracking = I( + a.stickyTracking, + g[this.type] && g[this.type].stickyTracking, + g.series && g.series.stickyTracking, + this.tooltipOptions.shared && !this.noSharedTooltip + ? !0 + : b.stickyTracking, + ); + null === e.marker && delete b.marker; + this.zoneAxis = b.zoneAxis; + a = this.zones = (b.zones || []).slice(); + (!b.negativeColor && !b.negativeFillColor) || + b.zones || + a.push({ + value: b[this.zoneAxis + 'Threshold'] || b.threshold || 0, + className: 'highcharts-negative', + color: b.negativeColor, + fillColor: b.negativeFillColor, + }); + a.length && + w(a[a.length - 1].value) && + a.push({ color: this.color, fillColor: this.fillColor }); + return b; + }, + getCyclic: function(a, b, c) { + var d, + g = this.chart, + e = this.userOptions, + k = a + 'Index', + h = a + 'Counter', + q = c ? c.length : I(g.options.chart[a + 'Count'], g[a + 'Count']); + b || + ((d = I(e[k], e['_' + k])), + w(d) || + (g.series.length || (g[h] = 0), + (e['_' + k] = d = g[h] % q), + (g[h] += 1)), + c && (b = c[d])); + void 0 !== d && (this[k] = d); + this[a] = b; + }, + getColor: function() { + this.options.colorByPoint + ? (this.options.color = null) + : this.getCyclic( + 'color', + this.options.color || n[this.type].color, + this.chart.options.colors, + ); + }, + getSymbol: function() { + this.getCyclic( + 'symbol', + this.options.marker.symbol, + this.chart.options.symbols, + ); + }, + drawLegendSymbol: a.LegendSymbolMixin.drawLineMarker, + setData: function(d, e, h, f) { + var g = this, + q = g.points, + m = (q && q.length) || 0, + l, + A = g.options, + t = g.chart, + x = null, + n = g.xAxis, + p = A.turboThreshold, + z = this.xData, + F = this.yData, + C = (l = g.pointArrayMap) && l.length; + d = d || []; + l = d.length; + e = I(e, !0); + if ( + !1 !== f && + l && + m === l && + !g.cropped && + !g.hasGroupedData && + g.visible + ) + u(d, function(a, b) { + q[b].update && a !== A.data[b] && q[b].update(a, !1, null, !1); + }); + else { + g.xIncrement = null; + g.colorCounter = 0; + u(this.parallelArrays, function(a) { + g[a + 'Data'].length = 0; + }); + if (p && l > p) { + for (h = 0; null === x && h < l; ) (x = d[h]), h++; + if (b(x)) + for (h = 0; h < l; h++) + (z[h] = this.autoIncrement()), (F[h] = d[h]); + else if (c(x)) + if (C) + for (h = 0; h < l; h++) + (x = d[h]), (z[h] = x[0]), (F[h] = x.slice(1, C + 1)); + else + for (h = 0; h < l; h++) + (x = d[h]), (z[h] = x[0]), (F[h] = x[1]); + else a.error(12); + } else + for (h = 0; h < l; h++) + void 0 !== d[h] && + ((x = { series: g }), + g.pointClass.prototype.applyOptions.apply(x, [d[h]]), + g.updateParallelArrays(x, h)); + F && k(F[0]) && a.error(14, !0); + g.data = []; + g.options.data = g.userOptions.data = d; + for (h = m; h--; ) q[h] && q[h].destroy && q[h].destroy(); + n && (n.minRange = n.userMinRange); + g.isDirty = t.isDirtyBox = !0; + g.isDirtyData = !!q; + h = !1; + } + 'point' === A.legendType && + (this.processData(), this.generatePoints()); + e && t.redraw(h); + }, + processData: function(b) { + var c = this.xData, + d = this.yData, + e = c.length, + g; + g = 0; + var k, + h, + q = this.xAxis, + f, + m = this.options; + f = m.cropThreshold; + var l = this.getExtremesFromAll || m.getExtremesFromAll, + t = this.isCartesian, + m = q && q.val2lin, + x = q && q.isLog, + n = this.requireSorting, + p, + z; + if (t && !this.isDirty && !q.isDirty && !this.yAxis.isDirty && !b) + return !1; + q && ((b = q.getExtremes()), (p = b.min), (z = b.max)); + if (t && this.sorted && !l && (!f || e > f || this.forceCrop)) + if (c[e - 1] < p || c[0] > z) (c = []), (d = []); + else if (c[0] < p || c[e - 1] > z) + (g = this.cropData(this.xData, this.yData, p, z)), + (c = g.xData), + (d = g.yData), + (g = g.start), + (k = !0); + for (f = c.length || 1; --f; ) + (e = x ? m(c[f]) - m(c[f - 1]) : c[f] - c[f - 1]), + 0 < e && (void 0 === h || e < h) + ? (h = e) + : 0 > e && n && (a.error(15), (n = !1)); + this.cropped = k; + this.cropStart = g; + this.processedXData = c; + this.processedYData = d; + this.closestPointRange = h; + }, + cropData: function(a, b, c, d) { + var g = a.length, + e = 0, + k = g, + h = I(this.cropShoulder, 1), + f; + for (f = 0; f < g; f++) + if (a[f] >= c) { + e = Math.max(0, f - h); + break; + } + for (c = f; c < g; c++) + if (a[c] > d) { + k = c + h; + break; + } + return { + xData: a.slice(e, k), + yData: b.slice(e, k), + start: e, + end: k, + }; + }, + generatePoints: function() { + var a = this.options, + b = a.data, + c = this.data, + d, + g = this.processedXData, + e = this.processedYData, + k = this.pointClass, + h = g.length, + f = this.cropStart || 0, + m, + l = this.hasGroupedData, + a = a.keys, + t, + x = [], + n; + c || l || ((c = []), (c.length = b.length), (c = this.data = c)); + a && l && (this.options.keys = !1); + for (n = 0; n < h; n++) + (m = f + n), + l + ? ((t = new k().init(this, [g[n]].concat(K(e[n])))), + (t.dataGroup = this.groupMap[n])) + : (t = c[m]) || + void 0 === b[m] || + (c[m] = t = new k().init(this, b[m], g[n])), + t && ((t.index = m), (x[n] = t)); + this.options.keys = a; + if (c && (h !== (d = c.length) || l)) + for (n = 0; n < d; n++) + n !== f || l || (n += h), + c[n] && (c[n].destroyElements(), (c[n].plotX = void 0)); + this.data = c; + this.points = x; + }, + getExtremes: function(a) { + var d = this.yAxis, + e = this.processedXData, + k, + g = [], + h = 0; + k = this.xAxis.getExtremes(); + var f = k.min, + q = k.max, + m, + l, + t, + n; + a = a || this.stackedYData || this.processedYData || []; + k = a.length; + for (n = 0; n < k; n++) + if ( + ((l = e[n]), + (t = a[n]), + (m = + (b(t, !0) || c(t)) && + (!d.positiveValuesOnly || t.length || 0 < t)), + (l = + this.getExtremesFromAll || + this.options.getExtremesFromAll || + this.cropped || + ((e[n + 1] || l) >= f && (e[n - 1] || l) <= q)), + m && l) + ) + if ((m = t.length)) + for (; m--; ) 'number' === typeof t[m] && (g[h++] = t[m]); + else g[h++] = t; + this.dataMin = p(g); + this.dataMax = H(g); + }, + translate: function() { + this.processedXData || this.processData(); + this.generatePoints(); + var a = this.options, + c = a.stacking, + d = this.xAxis, + e = d.categories, + g = this.yAxis, + k = this.points, + h = k.length, + m = !!this.modifyValue, + l = a.pointPlacement, + t = 'between' === l || b(l), + n = a.threshold, + x = a.startFromThreshold ? n : 0, + p, + z, + C, + r, + u = Number.MAX_VALUE; + 'between' === l && (l = 0.5); + b(l) && (l *= I(a.pointRange || d.pointRange)); + for (a = 0; a < h; a++) { + var B = k[a], + N = B.x, + K = B.y; + z = B.low; + var D = + c && + g.stacks[ + (this.negStacks && K < (x ? 0 : n) ? '-' : '') + this.stackKey + ], + E; + g.positiveValuesOnly && null !== K && 0 >= K && (B.isNull = !0); + B.plotX = p = f( + Math.min( + Math.max( + -1e5, + d.translate(N, 0, 0, 0, 1, l, 'flags' === this.type), + ), + 1e5, + ), + ); + c && + this.visible && + !B.isNull && + D && + D[N] && + ((r = this.getStackIndicator(r, N, this.index)), + (E = D[N]), + (K = E.points[r.key]), + (z = K[0]), + (K = K[1]), + z === x && r.key === D[N].base && (z = I(n, g.min)), + g.positiveValuesOnly && 0 >= z && (z = null), + (B.total = B.stackTotal = E.total), + (B.percentage = E.total && (B.y / E.total) * 100), + (B.stackY = K), + E.setOffset(this.pointXOffset || 0, this.barW || 0)); + B.yBottom = w(z) ? g.translate(z, 0, 1, 0, 1) : null; + m && (K = this.modifyValue(K, B)); + B.plotY = z = + 'number' === typeof K && Infinity !== K + ? Math.min(Math.max(-1e5, g.translate(K, 0, 1, 0, 1)), 1e5) + : void 0; + B.isInside = + void 0 !== z && 0 <= z && z <= g.len && 0 <= p && p <= d.len; + B.clientX = t ? f(d.translate(N, 0, 0, 0, 1, l)) : p; + B.negative = B.y < (n || 0); + B.category = e && void 0 !== e[B.x] ? e[B.x] : B.x; + B.isNull || + (void 0 !== C && (u = Math.min(u, Math.abs(p - C))), (C = p)); + B.zone = this.zones.length && B.getZone(); + } + this.closestPointRangePx = u; + }, + getValidPoints: function(a, b) { + var c = this.chart; + return d(a || this.points || [], function(a) { + return b && !c.isInsidePlot(a.plotX, a.plotY, c.inverted) + ? !1 + : !a.isNull; + }); + }, + setClip: function(a) { + var b = this.chart, + c = this.options, + d = b.renderer, + g = b.inverted, + e = this.clipBox, + k = e || b.clipBox, + h = + this.sharedClipKey || + [ + '_sharedClip', + a && a.duration, + a && a.easing, + k.height, + c.xAxis, + c.yAxis, + ].join(), + f = b[h], + q = b[h + 'm']; + f || + (a && + ((k.width = 0), + g && (k.x = b.plotSizeX), + (b[h + 'm'] = q = d.clipRect( + g ? b.plotSizeX + 99 : -99, + g ? -b.plotLeft : -b.plotTop, + 99, + g ? b.chartWidth : b.chartHeight, + ))), + (b[h] = f = d.clipRect(k)), + (f.count = { length: 0 })); + a && + !f.count[this.index] && + ((f.count[this.index] = !0), (f.count.length += 1)); + !1 !== c.clip && + (this.group.clip(a || e ? f : b.clipRect), + this.markerGroup.clip(q), + (this.sharedClipKey = h)); + a || + (f.count[this.index] && + (delete f.count[this.index], --f.count.length), + 0 === f.count.length && + h && + b[h] && + (e || (b[h] = b[h].destroy()), + b[h + 'm'] && (b[h + 'm'] = b[h + 'm'].destroy()))); + }, + animate: function(a) { + var b = this.chart, + c = D(this.options.animation), + d; + a + ? this.setClip(c) + : ((d = this.sharedClipKey), + (a = b[d]) && a.animate({ width: b.plotSizeX, x: 0 }, c), + b[d + 'm'] && + b[d + 'm'].animate({ width: b.plotSizeX + 99, x: 0 }, c), + (this.animate = null)); + }, + afterAnimate: function() { + this.setClip(); + m(this, 'afterAnimate'); + this.finishedAnimating = !0; + }, + drawPoints: function() { + var a = this.points, + b = this.chart, + c, + d, + g, + e, + k = this.options.marker, + h, + f, + l, + m = this[this.specialGroup] || this.markerGroup, + t, + n = I( + k.enabled, + this.xAxis.isRadial ? !0 : null, + this.closestPointRangePx >= 2 * k.radius, + ); + if (!1 !== k.enabled || this._hasPointMarkers) + for (c = 0; c < a.length; c++) + (d = a[c]), + (e = d.graphic), + (h = d.marker || {}), + (f = !!d.marker), + (g = (n && void 0 === h.enabled) || h.enabled), + (l = d.isInside), + g && !d.isNull + ? ((g = I(h.symbol, this.symbol)), + (d.hasImage = 0 === g.indexOf('url')), + (t = this.markerAttribs(d, d.selected && 'select')), + e + ? e[l ? 'show' : 'hide'](!0).animate(t) + : l && + (0 < t.width || d.hasImage) && + (d.graphic = e = b.renderer + .symbol(g, t.x, t.y, t.width, t.height, f ? h : k) + .add(m)), + e && e.attr(this.pointAttribs(d, d.selected && 'select')), + e && e.addClass(d.getClassName(), !0)) + : e && (d.graphic = e.destroy()); + }, + markerAttribs: function(a, b) { + var c = this.options.marker, + d = a.marker || {}, + g = I(d.radius, c.radius); + b && + ((c = c.states[b]), + (b = d.states && d.states[b]), + (g = I( + b && b.radius, + c && c.radius, + g + ((c && c.radiusPlus) || 0), + ))); + a.hasImage && (g = 0); + a = { x: Math.floor(a.plotX) - g, y: a.plotY - g }; + g && (a.width = a.height = 2 * g); + return a; + }, + pointAttribs: function(a, b) { + var c = this.options.marker, + d = a && a.options, + g = (d && d.marker) || {}, + e = this.color, + k = d && d.color, + h = a && a.color, + d = I(g.lineWidth, c.lineWidth); + a = a && a.zone && a.zone.color; + e = k || a || h || e; + a = g.fillColor || c.fillColor || e; + e = g.lineColor || c.lineColor || e; + b && + ((c = c.states[b]), + (b = (g.states && g.states[b]) || {}), + (d = I( + b.lineWidth, + c.lineWidth, + d + I(b.lineWidthPlus, c.lineWidthPlus, 0), + )), + (a = b.fillColor || c.fillColor || a), + (e = b.lineColor || c.lineColor || e)); + return { stroke: e, 'stroke-width': d, fill: a }; + }, + destroy: function() { + var a = this, + b = a.chart, + c = /AppleWebKit\/533/.test(N.navigator.userAgent), + d, + g, + k = a.data || [], + h, + f; + m(a, 'destroy'); + x(a); + u(a.axisTypes || [], function(b) { + (f = a[b]) && + f.series && + (e(f.series, a), (f.isDirty = f.forceRedraw = !0)); + }); + a.legendItem && a.chart.legend.destroyItem(a); + for (g = k.length; g--; ) (h = k[g]) && h.destroy && h.destroy(); + a.points = null; + clearTimeout(a.animationTimeout); + B(a, function(a, b) { + a instanceof t && + !a.survive && + ((d = c && 'group' === b ? 'hide' : 'destroy'), a[d]()); + }); + b.hoverSeries === a && (b.hoverSeries = null); + e(b.series, a); + b.orderSeries(); + B(a, function(b, c) { + delete a[c]; + }); + }, + getGraphPath: function(a, b, c) { + var d = this, + g = d.options, + e = g.step, + k, + h = [], + f = [], + l; + a = a || d.points; + (k = a.reversed) && a.reverse(); + (e = { right: 1, center: 2 }[e] || (e && 3)) && k && (e = 4 - e); + !g.connectNulls || b || c || (a = this.getValidPoints(a)); + u(a, function(k, m) { + var q = k.plotX, + t = k.plotY, + n = a[m - 1]; + (k.leftCliff || (n && n.rightCliff)) && !c && (l = !0); + k.isNull && !w(b) && 0 < m + ? (l = !g.connectNulls) + : k.isNull && !b + ? (l = !0) + : (0 === m || l + ? (m = ['M', k.plotX, k.plotY]) + : d.getPointSpline + ? (m = d.getPointSpline(a, k, m)) + : e + ? ((m = + 1 === e + ? ['L', n.plotX, t] + : 2 === e + ? [ + 'L', + (n.plotX + q) / 2, + n.plotY, + 'L', + (n.plotX + q) / 2, + t, + ] + : ['L', q, n.plotY]), + m.push('L', q, t)) + : (m = ['L', q, t]), + f.push(k.x), + e && f.push(k.x), + h.push.apply(h, m), + (l = !1)); + }); + h.xMap = f; + return (d.graphPath = h); + }, + drawGraph: function() { + var a = this, + b = this.options, + c = (this.gappedPath || this.getGraphPath).call(this), + d = [ + [ + 'graph', + 'highcharts-graph', + b.lineColor || this.color, + b.dashStyle, + ], + ]; + u(this.zones, function(c, e) { + d.push([ + 'zone-graph-' + e, + 'highcharts-graph highcharts-zone-graph-' + + e + + ' ' + + (c.className || ''), + c.color || a.color, + c.dashStyle || b.dashStyle, + ]); + }); + u(d, function(d, e) { + var g = d[0], + k = a[g]; + k + ? ((k.endX = a.preventGraphAnimation ? null : c.xMap), + k.animate({ d: c })) + : c.length && + ((a[g] = a.chart.renderer + .path(c) + .addClass(d[1]) + .attr({ zIndex: 1 }) + .add(a.group)), + (k = { + stroke: d[2], + 'stroke-width': b.lineWidth, + fill: (a.fillGraph && a.color) || 'none', + }), + d[3] + ? (k.dashstyle = d[3]) + : 'square' !== b.linecap && + (k['stroke-linecap'] = k['stroke-linejoin'] = 'round'), + (k = a[g].attr(k).shadow(2 > e && b.shadow))); + k && ((k.startX = c.xMap), (k.isArea = c.isArea)); + }); + }, + applyZones: function() { + var a = this, + b = this.chart, + c = b.renderer, + d = this.zones, + e, + k, + h = this.clips || [], + f, + m = this.graph, + l = this.area, + t = Math.max(b.chartWidth, b.chartHeight), + n = this[(this.zoneAxis || 'y') + 'Axis'], + x, + p, + z = b.inverted, + C, + r, + w, + B, + K = !1; + d.length && + (m || l) && + n && + void 0 !== n.min && + ((p = n.reversed), + (C = n.horiz), + m && m.hide(), + l && l.hide(), + (x = n.getExtremes()), + u(d, function(d, g) { + e = p ? (C ? b.plotWidth : 0) : C ? 0 : n.toPixels(x.min); + e = Math.min(Math.max(I(k, e), 0), t); + k = Math.min( + Math.max(Math.round(n.toPixels(I(d.value, x.max), !0)), 0), + t, + ); + K && (e = k = n.toPixels(x.max)); + r = Math.abs(e - k); + w = Math.min(e, k); + B = Math.max(e, k); + n.isXAxis + ? ((f = { x: z ? B : w, y: 0, width: r, height: t }), + C || (f.x = b.plotHeight - f.x)) + : ((f = { x: 0, y: z ? B : w, width: t, height: r }), + C && (f.y = b.plotWidth - f.y)); + z && + c.isVML && + (f = n.isXAxis + ? { x: 0, y: p ? w : B, height: f.width, width: b.chartWidth } + : { + x: f.y - b.plotLeft - b.spacingBox.x, + y: 0, + width: f.height, + height: b.chartHeight, + }); + h[g] + ? h[g].animate(f) + : ((h[g] = c.clipRect(f)), + m && a['zone-graph-' + g].clip(h[g]), + l && a['zone-area-' + g].clip(h[g])); + K = d.value > x.max; + }), + (this.clips = h)); + }, + invertGroups: function(a) { + function b() { + u(['group', 'markerGroup'], function(b) { + c[b] && + (d.renderer.isVML && + c[b].attr({ width: c.yAxis.len, height: c.xAxis.len }), + (c[b].width = c.yAxis.len), + (c[b].height = c.xAxis.len), + c[b].invert(a)); + }); + } + var c = this, + d = c.chart, + e; + c.xAxis && + ((e = E(d, 'resize', b)), + E(c, 'destroy', e), + b(a), + (c.invertGroups = b)); + }, + plotGroup: function(a, b, c, d, e) { + var g = this[a], + k = !g; + k && + (this[a] = g = this.chart.renderer + .g() + .attr({ zIndex: d || 0.1 }) + .add(e)); + g.addClass( + 'highcharts-' + + b + + ' highcharts-series-' + + this.index + + ' highcharts-' + + this.type + + '-series ' + + (w(this.colorIndex) + ? 'highcharts-color-' + this.colorIndex + ' ' + : '') + + (this.options.className || '') + + (g.hasClass('highcharts-tracker') ? ' highcharts-tracker' : ''), + !0, + ); + g.attr({ visibility: c })[k ? 'attr' : 'animate'](this.getPlotBox()); + return g; + }, + getPlotBox: function() { + var a = this.chart, + b = this.xAxis, + c = this.yAxis; + a.inverted && ((b = c), (c = this.xAxis)); + return { + translateX: b ? b.left : a.plotLeft, + translateY: c ? c.top : a.plotTop, + scaleX: 1, + scaleY: 1, + }; + }, + render: function() { + var a = this, + b = a.chart, + c, + d = a.options, + e = !!a.animate && b.renderer.isSVG && D(d.animation).duration, + k = a.visible ? 'inherit' : 'hidden', + h = d.zIndex, + f = a.hasRendered, + m = b.seriesGroup, + l = b.inverted; + c = a.plotGroup('group', 'series', k, h, m); + a.markerGroup = a.plotGroup('markerGroup', 'markers', k, h, m); + e && a.animate(!0); + c.inverted = a.isCartesian ? l : !1; + a.drawGraph && (a.drawGraph(), a.applyZones()); + a.drawDataLabels && a.drawDataLabels(); + a.visible && a.drawPoints(); + a.drawTracker && + !1 !== a.options.enableMouseTracking && + a.drawTracker(); + a.invertGroups(l); + !1 === d.clip || a.sharedClipKey || f || c.clip(b.clipRect); + e && a.animate(); + f || + (a.animationTimeout = C(function() { + a.afterAnimate(); + }, e)); + a.isDirty = !1; + a.hasRendered = !0; + }, + redraw: function() { + var a = this.chart, + b = this.isDirty || this.isDirtyData, + c = this.group, + d = this.xAxis, + e = this.yAxis; + c && + (a.inverted && c.attr({ width: a.plotWidth, height: a.plotHeight }), + c.animate({ + translateX: I(d && d.left, a.plotLeft), + translateY: I(e && e.top, a.plotTop), + })); + this.translate(); + this.render(); + b && delete this.kdTree; + }, + kdAxisArray: ['clientX', 'plotY'], + searchPoint: function(a, b) { + var c = this.xAxis, + d = this.yAxis, + e = this.chart.inverted; + return this.searchKDTree( + { + clientX: e ? c.len - a.chartY + c.pos : a.chartX - c.pos, + plotY: e ? d.len - a.chartX + d.pos : a.chartY - d.pos, + }, + b, + ); + }, + buildKDTree: function() { + function a(c, d, e) { + var g, k; + if ((k = c && c.length)) + return ( + (g = b.kdAxisArray[d % e]), + c.sort(function(a, b) { + return a[g] - b[g]; + }), + (k = Math.floor(k / 2)), + { + point: c[k], + left: a(c.slice(0, k), d + 1, e), + right: a(c.slice(k + 1), d + 1, e), + } + ); + } + this.buildingKdTree = !0; + var b = this, + c = -1 < b.options.findNearestPointBy.indexOf('y') ? 2 : 1; + delete b.kdTree; + C( + function() { + b.kdTree = a(b.getValidPoints(null, !b.directTouch), c, c); + b.buildingKdTree = !1; + }, + b.options.kdNow ? 0 : 1, + ); + }, + searchKDTree: function(a, b) { + function c(a, b, g, f) { + var m = b.point, + l = d.kdAxisArray[g % f], + q, + t, + n = m; + t = w(a[e]) && w(m[e]) ? Math.pow(a[e] - m[e], 2) : null; + q = w(a[k]) && w(m[k]) ? Math.pow(a[k] - m[k], 2) : null; + q = (t || 0) + (q || 0); + m.dist = w(q) ? Math.sqrt(q) : Number.MAX_VALUE; + m.distX = w(t) ? Math.sqrt(t) : Number.MAX_VALUE; + l = a[l] - m[l]; + q = 0 > l ? 'left' : 'right'; + t = 0 > l ? 'right' : 'left'; + b[q] && ((q = c(a, b[q], g + 1, f)), (n = q[h] < n[h] ? q : m)); + b[t] && + Math.sqrt(l * l) < n[h] && + ((a = c(a, b[t], g + 1, f)), (n = a[h] < n[h] ? a : n)); + return n; + } + var d = this, + e = this.kdAxisArray[0], + k = this.kdAxisArray[1], + h = b ? 'distX' : 'dist'; + b = -1 < d.options.findNearestPointBy.indexOf('y') ? 2 : 1; + this.kdTree || this.buildingKdTree || this.buildKDTree(); + if (this.kdTree) return c(a, this.kdTree, b, b); + }, + }, + ); + })(M); + (function(a) { + var E = a.Axis, + D = a.Chart, + H = a.correctFloat, + p = a.defined, + f = a.destroyObjectProperties, + l = a.each, + r = a.format, + n = a.objectEach, + w = a.pick, + u = a.Series; + a.StackItem = function(a, h, f, d, c) { + var b = a.chart.inverted; + this.axis = a; + this.isNegative = f; + this.options = h; + this.x = d; + this.total = null; + this.points = {}; + this.stack = c; + this.rightCliff = this.leftCliff = 0; + this.alignOptions = { + align: h.align || (b ? (f ? 'left' : 'right') : 'center'), + verticalAlign: h.verticalAlign || (b ? 'middle' : f ? 'bottom' : 'top'), + y: w(h.y, b ? 4 : f ? 14 : -6), + x: w(h.x, b ? (f ? -6 : 6) : 0), + }; + this.textAlign = h.textAlign || (b ? (f ? 'right' : 'left') : 'center'); + }; + a.StackItem.prototype = { + destroy: function() { + f(this, this.axis); + }, + render: function(a) { + var e = this.options, + f = e.format, + f = f ? r(f, this) : e.formatter.call(this); + this.label + ? this.label.attr({ text: f, visibility: 'hidden' }) + : (this.label = this.axis.chart.renderer + .text(f, null, null, e.useHTML) + .css(e.style) + .attr({ + align: this.textAlign, + rotation: e.rotation, + visibility: 'hidden', + }) + .add(a)); + }, + setOffset: function(a, h) { + var e = this.axis, + d = e.chart, + c = e.translate(e.usePercentage ? 100 : this.total, 0, 0, 0, 1), + e = e.translate(0), + e = Math.abs(c - e); + a = d.xAxis[0].translate(this.x) + a; + c = this.getStackBox(d, this, a, c, h, e); + if ((h = this.label)) + h.align(this.alignOptions, null, c), + (c = h.alignAttr), + h[ + !1 === this.options.crop || d.isInsidePlot(c.x, c.y) + ? 'show' + : 'hide' + ](!0); + }, + getStackBox: function(a, h, f, d, c, b) { + var e = h.axis.reversed, + l = a.inverted; + a = a.plotHeight; + h = (h.isNegative && !e) || (!h.isNegative && e); + return { + x: l ? (h ? d : d - b) : f, + y: l ? a - f - c : h ? a - d - b : a - d, + width: l ? b : c, + height: l ? c : b, + }; + }, + }; + D.prototype.getStacks = function() { + var a = this; + l(a.yAxis, function(a) { + a.stacks && a.hasVisibleSeries && (a.oldStacks = a.stacks); + }); + l(a.series, function(e) { + !e.options.stacking || + (!0 !== e.visible && !1 !== a.options.chart.ignoreHiddenSeries) || + (e.stackKey = e.type + w(e.options.stack, '')); + }); + }; + E.prototype.buildStacks = function() { + var a = this.series, + h = w(this.options.reversedStacks, !0), + f = a.length, + d; + if (!this.isXAxis) { + this.usePercentage = !1; + for (d = f; d--; ) a[h ? d : f - d - 1].setStackedPoints(); + for (d = 0; d < f; d++) a[d].modifyStacks(); + } + }; + E.prototype.renderStackTotals = function() { + var a = this.chart, + h = a.renderer, + f = this.stacks, + d = this.stackTotalGroup; + d || + (this.stackTotalGroup = d = h + .g('stack-labels') + .attr({ visibility: 'visible', zIndex: 6 }) + .add()); + d.translate(a.plotLeft, a.plotTop); + n(f, function(a) { + n(a, function(a) { + a.render(d); + }); + }); + }; + E.prototype.resetStacks = function() { + var a = this, + h = a.stacks; + a.isXAxis || + n(h, function(e) { + n(e, function(d, c) { + d.touched < a.stacksTouched + ? (d.destroy(), delete e[c]) + : ((d.total = null), (d.cumulative = null)); + }); + }); + }; + E.prototype.cleanStacks = function() { + var a; + this.isXAxis || + (this.oldStacks && (a = this.stacks = this.oldStacks), + n(a, function(a) { + n(a, function(a) { + a.cumulative = a.total; + }); + })); + }; + u.prototype.setStackedPoints = function() { + if ( + this.options.stacking && + (!0 === this.visible || + !1 === this.chart.options.chart.ignoreHiddenSeries) + ) { + var e = this.processedXData, + h = this.processedYData, + f = [], + d = h.length, + c = this.options, + b = c.threshold, + k = w(c.startFromThreshold && b, 0), + l = c.stack, + c = c.stacking, + n = this.stackKey, + r = '-' + n, + x = this.negStacks, + u = this.yAxis, + t = u.stacks, + C = u.oldStacks, + N, + q, + A, + F, + G, + g, + v; + u.stacksTouched += 1; + for (G = 0; G < d; G++) + (g = e[G]), + (v = h[G]), + (N = this.getStackIndicator(N, g, this.index)), + (F = N.key), + (A = (q = x && v < (k ? 0 : b)) ? r : n), + t[A] || (t[A] = {}), + t[A][g] || + (C[A] && C[A][g] + ? ((t[A][g] = C[A][g]), (t[A][g].total = null)) + : (t[A][g] = new a.StackItem( + u, + u.options.stackLabels, + q, + g, + l, + ))), + (A = t[A][g]), + null !== v + ? ((A.points[F] = A.points[this.index] = [w(A.cumulative, k)]), + p(A.cumulative) || (A.base = F), + (A.touched = u.stacksTouched), + 0 < N.index && + !1 === this.singleStacks && + (A.points[F][0] = A.points[this.index + ',' + g + ',0'][0])) + : (A.points[F] = A.points[this.index] = null), + 'percent' === c + ? ((q = q ? n : r), + x && t[q] && t[q][g] + ? ((q = t[q][g]), + (A.total = q.total = + Math.max(q.total, A.total) + Math.abs(v) || 0)) + : (A.total = H(A.total + (Math.abs(v) || 0)))) + : (A.total = H(A.total + (v || 0))), + (A.cumulative = w(A.cumulative, k) + (v || 0)), + null !== v && + (A.points[F].push(A.cumulative), (f[G] = A.cumulative)); + 'percent' === c && (u.usePercentage = !0); + this.stackedYData = f; + u.oldStacks = {}; + } + }; + u.prototype.modifyStacks = function() { + var a = this, + h = a.stackKey, + f = a.yAxis.stacks, + d = a.processedXData, + c, + b = a.options.stacking; + a[b + 'Stacker'] && + l([h, '-' + h], function(e) { + for (var k = d.length, h, l; k--; ) + if ( + ((h = d[k]), + (c = a.getStackIndicator(c, h, a.index, e)), + (l = (h = f[e] && f[e][h]) && h.points[c.key])) + ) + a[b + 'Stacker'](l, h, k); + }); + }; + u.prototype.percentStacker = function(a, h, f) { + h = h.total ? 100 / h.total : 0; + a[0] = H(a[0] * h); + a[1] = H(a[1] * h); + this.stackedYData[f] = a[1]; + }; + u.prototype.getStackIndicator = function(a, h, f, d) { + !p(a) || a.x !== h || (d && a.key !== d) + ? (a = { x: h, index: 0, key: d }) + : a.index++; + a.key = [f, h, a.index].join(); + return a; + }; + })(M); + (function(a) { + var E = a.addEvent, + D = a.animate, + H = a.Axis, + p = a.createElement, + f = a.css, + l = a.defined, + r = a.each, + n = a.erase, + w = a.extend, + u = a.fireEvent, + e = a.inArray, + h = a.isNumber, + m = a.isObject, + d = a.isArray, + c = a.merge, + b = a.objectEach, + k = a.pick, + z = a.Point, + B = a.Series, + I = a.seriesTypes, + x = a.setAnimation, + K = a.splat; + w(a.Chart.prototype, { + addSeries: function(a, b, c) { + var d, + e = this; + a && + ((b = k(b, !0)), + u(e, 'addSeries', { options: a }, function() { + d = e.initSeries(a); + e.isDirtyLegend = !0; + e.linkSeries(); + b && e.redraw(c); + })); + return d; + }, + addAxis: function(a, b, d, e) { + var h = b ? 'xAxis' : 'yAxis', + f = this.options; + a = c(a, { index: this[h].length, isX: b }); + b = new H(this, a); + f[h] = K(f[h] || {}); + f[h].push(a); + k(d, !0) && this.redraw(e); + return b; + }, + showLoading: function(a) { + var b = this, + c = b.options, + d = b.loadingDiv, + e = c.loading, + k = function() { + d && + f(d, { + left: b.plotLeft + 'px', + top: b.plotTop + 'px', + width: b.plotWidth + 'px', + height: b.plotHeight + 'px', + }); + }; + d || + ((b.loadingDiv = d = p( + 'div', + { className: 'highcharts-loading highcharts-loading-hidden' }, + null, + b.container, + )), + (b.loadingSpan = p( + 'span', + { className: 'highcharts-loading-inner' }, + null, + d, + )), + E(b, 'redraw', k)); + d.className = 'highcharts-loading'; + b.loadingSpan.innerHTML = a || c.lang.loading; + f(d, w(e.style, { zIndex: 10 })); + f(b.loadingSpan, e.labelStyle); + b.loadingShown || + (f(d, { opacity: 0, display: '' }), + D( + d, + { opacity: e.style.opacity || 0.5 }, + { duration: e.showDuration || 0 }, + )); + b.loadingShown = !0; + k(); + }, + hideLoading: function() { + var a = this.options, + b = this.loadingDiv; + b && + ((b.className = 'highcharts-loading highcharts-loading-hidden'), + D( + b, + { opacity: 0 }, + { + duration: a.loading.hideDuration || 100, + complete: function() { + f(b, { display: 'none' }); + }, + }, + )); + this.loadingShown = !1; + }, + propsRequireDirtyBox: 'backgroundColor borderColor borderWidth margin marginTop marginRight marginBottom marginLeft spacing spacingTop spacingRight spacingBottom spacingLeft borderRadius plotBackgroundColor plotBackgroundImage plotBorderColor plotBorderWidth plotShadow shadow'.split( + ' ', + ), + propsRequireUpdateSeries: 'chart.inverted chart.polar chart.ignoreHiddenSeries chart.type colors plotOptions tooltip'.split( + ' ', + ), + update: function(a, d, f) { + var m = this, + n = { + credits: 'addCredits', + title: 'setTitle', + subtitle: 'setSubtitle', + }, + t = a.chart, + x, + g, + p = []; + if (t) { + c(!0, m.options.chart, t); + 'className' in t && m.setClassName(t.className); + if ('inverted' in t || 'polar' in t) m.propFromSeries(), (x = !0); + 'alignTicks' in t && (x = !0); + b(t, function(a, b) { + -1 !== e('chart.' + b, m.propsRequireUpdateSeries) && (g = !0); + -1 !== e(b, m.propsRequireDirtyBox) && (m.isDirtyBox = !0); + }); + 'style' in t && m.renderer.setStyle(t.style); + } + a.colors && (this.options.colors = a.colors); + a.plotOptions && c(!0, this.options.plotOptions, a.plotOptions); + b(a, function(a, b) { + if (m[b] && 'function' === typeof m[b].update) m[b].update(a, !1); + else if ('function' === typeof m[n[b]]) m[n[b]](a); + 'chart' !== b && -1 !== e(b, m.propsRequireUpdateSeries) && (g = !0); + }); + r('xAxis yAxis zAxis series colorAxis pane'.split(' '), function(b) { + a[b] && + (r(K(a[b]), function(a, c) { + (c = (l(a.id) && m.get(a.id)) || m[b][c]) && + c.coll === b && + (c.update(a, !1), f && (c.touched = !0)); + if (!c && f) + if ('series' === b) m.addSeries(a, !1).touched = !0; + else if ('xAxis' === b || 'yAxis' === b) + m.addAxis(a, 'xAxis' === b, !1).touched = !0; + }), + f && + r(m[b], function(a) { + a.touched ? delete a.touched : p.push(a); + })); + }); + r(p, function(a) { + a.remove(!1); + }); + x && + r(m.axes, function(a) { + a.update({}, !1); + }); + g && + r(m.series, function(a) { + a.update({}, !1); + }); + a.loading && c(!0, m.options.loading, a.loading); + x = t && t.width; + t = t && t.height; + (h(x) && x !== m.chartWidth) || (h(t) && t !== m.chartHeight) + ? m.setSize(x, t) + : k(d, !0) && m.redraw(); + }, + setSubtitle: function(a) { + this.setTitle(void 0, a); + }, + }); + w(z.prototype, { + update: function(a, b, c, d) { + function e() { + h.applyOptions(a); + null === h.y && g && (h.graphic = g.destroy()); + m(a, !0) && + (g && + g.element && + a && + a.marker && + void 0 !== a.marker.symbol && + (h.graphic = g.destroy()), + a && + a.dataLabels && + h.dataLabel && + (h.dataLabel = h.dataLabel.destroy()), + h.connector && (h.connector = h.connector.destroy())); + l = h.index; + f.updateParallelArrays(h, l); + t.data[l] = m(t.data[l], !0) || m(a, !0) ? h.options : a; + f.isDirty = f.isDirtyData = !0; + !f.fixedBox && f.hasCartesianSeries && (n.isDirtyBox = !0); + 'point' === t.legendType && (n.isDirtyLegend = !0); + b && n.redraw(c); + } + var h = this, + f = h.series, + g = h.graphic, + l, + n = f.chart, + t = f.options; + b = k(b, !0); + !1 === d ? e() : h.firePointEvent('update', { options: a }, e); + }, + remove: function(a, b) { + this.series.removePoint(e(this, this.series.data), a, b); + }, + }); + w(B.prototype, { + addPoint: function(a, b, c, d) { + var e = this.options, + h = this.data, + f = this.chart, + g = this.xAxis, + g = g && g.hasNames && g.names, + l = e.data, + m, + n, + t = this.xData, + q, + x; + b = k(b, !0); + m = { series: this }; + this.pointClass.prototype.applyOptions.apply(m, [a]); + x = m.x; + q = t.length; + if (this.requireSorting && x < t[q - 1]) + for (n = !0; q && t[q - 1] > x; ) q--; + this.updateParallelArrays(m, 'splice', q, 0, 0); + this.updateParallelArrays(m, q); + g && m.name && (g[x] = m.name); + l.splice(q, 0, a); + n && (this.data.splice(q, 0, null), this.processData()); + 'point' === e.legendType && this.generatePoints(); + c && + (h[0] && h[0].remove + ? h[0].remove(!1) + : (h.shift(), this.updateParallelArrays(m, 'shift'), l.shift())); + this.isDirtyData = this.isDirty = !0; + b && f.redraw(d); + }, + removePoint: function(a, b, c) { + var d = this, + e = d.data, + h = e[a], + f = d.points, + g = d.chart, + l = function() { + f && f.length === e.length && f.splice(a, 1); + e.splice(a, 1); + d.options.data.splice(a, 1); + d.updateParallelArrays(h || { series: d }, 'splice', a, 1); + h && h.destroy(); + d.isDirty = !0; + d.isDirtyData = !0; + b && g.redraw(); + }; + x(c, g); + b = k(b, !0); + h ? h.firePointEvent('remove', null, l) : l(); + }, + remove: function(a, b, c) { + function d() { + e.destroy(); + h.isDirtyLegend = h.isDirtyBox = !0; + h.linkSeries(); + k(a, !0) && h.redraw(b); + } + var e = this, + h = e.chart; + !1 !== c ? u(e, 'remove', null, d) : d(); + }, + update: function(a, b) { + var d = this, + e = d.chart, + h = d.userOptions, + f = d.oldType || d.type, + l = a.type || h.type || e.options.chart.type, + g = I[f].prototype, + m, + n = ['group', 'markerGroup', 'dataLabelsGroup'], + t = ['navigatorSeries', 'baseSeries'], + x = d.finishedAnimating && { animation: !1 }; + if (Object.keys && 'data' === Object.keys(a).toString()) + return this.setData(a.data, b); + t = n.concat(t); + r(t, function(a) { + t[a] = d[a]; + delete d[a]; + }); + a = c( + h, + x, + { index: d.index, pointStart: d.xData[0] }, + { data: d.options.data }, + a, + ); + d.remove(!1, null, !1); + for (m in g) d[m] = void 0; + w(d, I[l || f].prototype); + r(t, function(a) { + d[a] = t[a]; + }); + d.init(e, a); + a.zIndex !== h.zIndex && + r(n, function(b) { + d[b] && d[b].attr({ zIndex: a.zIndex }); + }); + d.oldType = f; + e.linkSeries(); + k(b, !0) && e.redraw(!1); + }, + }); + w(H.prototype, { + update: function(a, b) { + var d = this.chart; + a = d.options[this.coll][this.options.index] = c(this.userOptions, a); + this.destroy(!0); + this.init(d, w(a, { events: void 0 })); + d.isDirtyBox = !0; + k(b, !0) && d.redraw(); + }, + remove: function(a) { + for ( + var b = this.chart, c = this.coll, e = this.series, h = e.length; + h--; + + ) + e[h] && e[h].remove(!1); + n(b.axes, this); + n(b[c], this); + d(b.options[c]) + ? b.options[c].splice(this.options.index, 1) + : delete b.options[c]; + r(b[c], function(a, b) { + a.options.index = b; + }); + this.destroy(); + b.isDirtyBox = !0; + k(a, !0) && b.redraw(); + }, + setTitle: function(a, b) { + this.update({ title: a }, b); + }, + setCategories: function(a, b) { + this.update({ categories: a }, b); + }, + }); + })(M); + (function(a) { + var E = a.color, + D = a.each, + H = a.map, + p = a.pick, + f = a.Series, + l = a.seriesType; + l( + 'area', + 'line', + { softThreshold: !1, threshold: 0 }, + { + singleStacks: !1, + getStackPoints: function(f) { + var l = [], + r = [], + u = this.xAxis, + e = this.yAxis, + h = e.stacks[this.stackKey], + m = {}, + d = this.index, + c = e.series, + b = c.length, + k, + z = p(e.options.reversedStacks, !0) ? 1 : -1, + B; + f = f || this.points; + if (this.options.stacking) { + for (B = 0; B < f.length; B++) + (f[B].leftNull = f[B].rightNull = null), (m[f[B].x] = f[B]); + a.objectEach(h, function(a, b) { + null !== a.total && r.push(b); + }); + r.sort(function(a, b) { + return a - b; + }); + k = H(c, function() { + return this.visible; + }); + D(r, function(a, c) { + var f = 0, + n, + x; + if (m[a] && !m[a].isNull) + l.push(m[a]), + D([-1, 1], function(e) { + var f = 1 === e ? 'rightNull' : 'leftNull', + l = 0, + t = h[r[c + e]]; + if (t) + for (B = d; 0 <= B && B < b; ) + (n = t.points[B]), + n || + (B === d + ? (m[a][f] = !0) + : k[B] && + (x = h[a].points[B]) && + (l -= x[1] - x[0])), + (B += z); + m[a][1 === e ? 'rightCliff' : 'leftCliff'] = l; + }); + else { + for (B = d; 0 <= B && B < b; ) { + if ((n = h[a].points[B])) { + f = n[1]; + break; + } + B += z; + } + f = e.translate(f, 0, 1, 0, 1); + l.push({ + isNull: !0, + plotX: u.translate(a, 0, 0, 0, 1), + x: a, + plotY: f, + yBottom: f, + }); + } + }); + } + return l; + }, + getGraphPath: function(a) { + var l = f.prototype.getGraphPath, + r = this.options, + u = r.stacking, + e = this.yAxis, + h, + m, + d = [], + c = [], + b = this.index, + k, + z = e.stacks[this.stackKey], + B = r.threshold, + I = e.getThreshold(r.threshold), + x, + r = r.connectNulls || 'percent' === u, + K = function(h, f, l) { + var m = a[h]; + h = u && z[m.x].points[b]; + var n = m[l + 'Null'] || 0; + l = m[l + 'Cliff'] || 0; + var x, + t, + m = !0; + l || n + ? ((x = (n ? h[0] : h[1]) + l), (t = h[0] + l), (m = !!n)) + : !u && a[f] && a[f].isNull && (x = t = B); + void 0 !== x && + (c.push({ + plotX: k, + plotY: null === x ? I : e.getThreshold(x), + isNull: m, + isCliff: !0, + }), + d.push({ + plotX: k, + plotY: null === t ? I : e.getThreshold(t), + doCurve: !1, + })); + }; + a = a || this.points; + u && (a = this.getStackPoints(a)); + for (h = 0; h < a.length; h++) + if ( + ((m = a[h].isNull), + (k = p(a[h].rectPlotX, a[h].plotX)), + (x = p(a[h].yBottom, I)), + !m || r) + ) + r || K(h, h - 1, 'left'), + (m && !u && r) || + (c.push(a[h]), d.push({ x: h, plotX: k, plotY: x })), + r || K(h, h + 1, 'right'); + h = l.call(this, c, !0, !0); + d.reversed = !0; + m = l.call(this, d, !0, !0); + m.length && (m[0] = 'L'); + m = h.concat(m); + l = l.call(this, c, !1, r); + m.xMap = h.xMap; + this.areaPath = m; + return l; + }, + drawGraph: function() { + this.areaPath = []; + f.prototype.drawGraph.apply(this); + var a = this, + l = this.areaPath, + w = this.options, + u = [['area', 'highcharts-area', this.color, w.fillColor]]; + D(this.zones, function(e, h) { + u.push([ + 'zone-area-' + h, + 'highcharts-area highcharts-zone-area-' + h + ' ' + e.className, + e.color || a.color, + e.fillColor || w.fillColor, + ]); + }); + D(u, function(e) { + var h = e[0], + f = a[h]; + f + ? ((f.endX = a.preventGraphAnimation ? null : l.xMap), + f.animate({ d: l })) + : ((f = a[h] = a.chart.renderer + .path(l) + .addClass(e[1]) + .attr({ + fill: p( + e[3], + E(e[2]) + .setOpacity(p(w.fillOpacity, 0.75)) + .get(), + ), + zIndex: 0, + }) + .add(a.group)), + (f.isArea = !0)); + f.startX = l.xMap; + f.shiftUnit = w.step ? 2 : 1; + }); + }, + drawLegendSymbol: a.LegendSymbolMixin.drawRectangle, + }, + ); + })(M); + (function(a) { + var E = a.pick; + a = a.seriesType; + a( + 'spline', + 'line', + {}, + { + getPointSpline: function(a, H, p) { + var f = H.plotX, + l = H.plotY, + r = a[p - 1]; + p = a[p + 1]; + var n, w, u, e; + if ( + r && + !r.isNull && + !1 !== r.doCurve && + !H.isCliff && + p && + !p.isNull && + !1 !== p.doCurve && + !H.isCliff + ) { + a = r.plotY; + u = p.plotX; + p = p.plotY; + var h = 0; + n = (1.5 * f + r.plotX) / 2.5; + w = (1.5 * l + a) / 2.5; + u = (1.5 * f + u) / 2.5; + e = (1.5 * l + p) / 2.5; + u !== n && (h = ((e - w) * (u - f)) / (u - n) + l - e); + w += h; + e += h; + w > a && w > l + ? ((w = Math.max(a, l)), (e = 2 * l - w)) + : w < a && w < l && ((w = Math.min(a, l)), (e = 2 * l - w)); + e > p && e > l + ? ((e = Math.max(p, l)), (w = 2 * l - e)) + : e < p && e < l && ((e = Math.min(p, l)), (w = 2 * l - e)); + H.rightContX = u; + H.rightContY = e; + } + H = [ + 'C', + E(r.rightContX, r.plotX), + E(r.rightContY, r.plotY), + E(n, f), + E(w, l), + f, + l, + ]; + r.rightContX = r.rightContY = null; + return H; + }, + }, + ); + })(M); + (function(a) { + var E = a.seriesTypes.area.prototype, + D = a.seriesType; + D('areaspline', 'spline', a.defaultPlotOptions.area, { + getStackPoints: E.getStackPoints, + getGraphPath: E.getGraphPath, + drawGraph: E.drawGraph, + drawLegendSymbol: a.LegendSymbolMixin.drawRectangle, + }); + })(M); + (function(a) { + var E = a.animObject, + D = a.color, + H = a.each, + p = a.extend, + f = a.isNumber, + l = a.merge, + r = a.pick, + n = a.Series, + w = a.seriesType, + u = a.svg; + w( + 'column', + 'line', + { + borderRadius: 0, + crisp: !0, + groupPadding: 0.2, + marker: null, + pointPadding: 0.1, + minPointLength: 0, + cropThreshold: 50, + pointRange: null, + states: { + hover: { halo: !1, brightness: 0.1 }, + select: { color: '#cccccc', borderColor: '#000000' }, + }, + dataLabels: { align: null, verticalAlign: null, y: null }, + softThreshold: !1, + startFromThreshold: !0, + stickyTracking: !1, + tooltip: { distance: 6 }, + threshold: 0, + borderColor: '#ffffff', + }, + { + cropShoulder: 0, + directTouch: !0, + trackerGroups: ['group', 'dataLabelsGroup'], + negStacks: !0, + init: function() { + n.prototype.init.apply(this, arguments); + var a = this, + h = a.chart; + h.hasRendered && + H(h.series, function(e) { + e.type === a.type && (e.isDirty = !0); + }); + }, + getColumnMetrics: function() { + var a = this, + h = a.options, + f = a.xAxis, + d = a.yAxis, + c = f.reversed, + b, + k = {}, + l = 0; + !1 === h.grouping + ? (l = 1) + : H(a.chart.series, function(c) { + var e = c.options, + h = c.yAxis, + f; + c.type !== a.type || + (!c.visible && a.chart.options.chart.ignoreHiddenSeries) || + d.len !== h.len || + d.pos !== h.pos || + (e.stacking + ? ((b = c.stackKey), + void 0 === k[b] && (k[b] = l++), + (f = k[b])) + : !1 !== e.grouping && (f = l++), + (c.columnIndex = f)); + }); + var n = Math.min( + Math.abs(f.transA) * + (f.ordinalSlope || + h.pointRange || + f.closestPointRange || + f.tickInterval || + 1), + f.len, + ), + p = n * h.groupPadding, + x = (n - 2 * p) / (l || 1), + h = Math.min( + h.maxPointWidth || f.len, + r(h.pointWidth, x * (1 - 2 * h.pointPadding)), + ); + a.columnMetrics = { + width: h, + offset: + (x - h) / 2 + + (p + ((a.columnIndex || 0) + (c ? 1 : 0)) * x - n / 2) * + (c ? -1 : 1), + }; + return a.columnMetrics; + }, + crispCol: function(a, h, f, d) { + var c = this.chart, + b = this.borderWidth, + e = -(b % 2 ? 0.5 : 0), + b = b % 2 ? 0.5 : 1; + c.inverted && c.renderer.isVML && (b += 1); + this.options.crisp && + ((f = Math.round(a + f) + e), (a = Math.round(a) + e), (f -= a)); + d = Math.round(h + d) + b; + e = 0.5 >= Math.abs(h) && 0.5 < d; + h = Math.round(h) + b; + d -= h; + e && d && (--h, (d += 1)); + return { x: a, y: h, width: f, height: d }; + }, + translate: function() { + var a = this, + h = a.chart, + f = a.options, + d = (a.dense = 2 > a.closestPointRange * a.xAxis.transA), + d = (a.borderWidth = r(f.borderWidth, d ? 0 : 1)), + c = a.yAxis, + b = f.threshold, + k = (a.translatedThreshold = c.getThreshold(b)), + l = r(f.minPointLength, 5), + p = a.getColumnMetrics(), + u = p.width, + x = (a.barW = Math.max(u, 1 + 2 * d)), + w = (a.pointXOffset = p.offset); + h.inverted && (k -= 0.5); + f.pointPadding && (x = Math.ceil(x)); + n.prototype.translate.apply(a); + H(a.points, function(d) { + var e = r(d.yBottom, k), + f = 999 + Math.abs(e), + f = Math.min(Math.max(-f, d.plotY), c.len + f), + m = d.plotX + w, + n = x, + t = Math.min(f, e), + p, + g = Math.max(f, e) - t; + l && + Math.abs(g) < l && + ((g = l), + (p = (!c.reversed && !d.negative) || (c.reversed && d.negative)), + d.y === b && a.dataMax <= b && c.min < b && (p = !p), + (t = Math.abs(t - k) > l ? e - l : k - (p ? l : 0))); + d.barX = m; + d.pointWidth = u; + d.tooltipPos = h.inverted + ? [c.len + c.pos - h.plotLeft - f, a.xAxis.len - m - n / 2, g] + : [m + n / 2, f + c.pos - h.plotTop, g]; + d.shapeType = 'rect'; + d.shapeArgs = a.crispCol.apply( + a, + d.isNull ? [m, k, n, 0] : [m, t, n, g], + ); + }); + }, + getSymbol: a.noop, + drawLegendSymbol: a.LegendSymbolMixin.drawRectangle, + drawGraph: function() { + this.group[this.dense ? 'addClass' : 'removeClass']( + 'highcharts-dense-data', + ); + }, + pointAttribs: function(a, f) { + var e = this.options, + d, + c = this.pointAttrToOptions || {}; + d = c.stroke || 'borderColor'; + var b = c['stroke-width'] || 'borderWidth', + k = (a && a.color) || this.color, + h = (a && a[d]) || e[d] || this.color || k, + n = (a && a[b]) || e[b] || this[b] || 0, + c = e.dashStyle; + a && + this.zones.length && + ((k = a.getZone()), + (k = a.options.color || (k && k.color) || this.color)); + f && + ((a = l( + e.states[f], + (a.options.states && a.options.states[f]) || {}, + )), + (f = a.brightness), + (k = + a.color || + (void 0 !== f && + D(k) + .brighten(a.brightness) + .get()) || + k), + (h = a[d] || h), + (n = a[b] || n), + (c = a.dashStyle || c)); + d = { fill: k, stroke: h, 'stroke-width': n }; + c && (d.dashstyle = c); + return d; + }, + drawPoints: function() { + var a = this, + h = this.chart, + m = a.options, + d = h.renderer, + c = m.animationLimit || 250, + b; + H(a.points, function(e) { + var k = e.graphic; + if (f(e.plotY) && null !== e.y) { + b = e.shapeArgs; + if (k) k[h.pointCount < c ? 'animate' : 'attr'](l(b)); + else e.graphic = k = d[e.shapeType](b).add(e.group || a.group); + m.borderRadius && k.attr({ r: m.borderRadius }); + k.attr(a.pointAttribs(e, e.selected && 'select')).shadow( + m.shadow, + null, + m.stacking && !m.borderRadius, + ); + k.addClass(e.getClassName(), !0); + } else k && (e.graphic = k.destroy()); + }); + }, + animate: function(a) { + var e = this, + f = this.yAxis, + d = e.options, + c = this.chart.inverted, + b = {}, + k = c ? 'translateX' : 'translateY', + l; + u && + (a + ? ((b.scaleY = 0.001), + (a = Math.min( + f.pos + f.len, + Math.max(f.pos, f.toPixels(d.threshold)), + )), + c ? (b.translateX = a - f.len) : (b.translateY = a), + e.group.attr(b)) + : ((l = e.group.attr(k)), + e.group.animate( + { scaleY: 1 }, + p(E(e.options.animation), { + step: function(a, c) { + b[k] = l + c.pos * (f.pos - l); + e.group.attr(b); + }, + }), + ), + (e.animate = null))); + }, + remove: function() { + var a = this, + f = a.chart; + f.hasRendered && + H(f.series, function(e) { + e.type === a.type && (e.isDirty = !0); + }); + n.prototype.remove.apply(a, arguments); + }, + }, + ); + })(M); + (function(a) { + a = a.seriesType; + a('bar', 'column', null, { inverted: !0 }); + })(M); + (function(a) { + var E = a.Series; + a = a.seriesType; + a( + 'scatter', + 'line', + { + lineWidth: 0, + findNearestPointBy: 'xy', + marker: { enabled: !0 }, + tooltip: { + headerFormat: + '\x3cspan style\x3d"color:{point.color}"\x3e\u25cf\x3c/span\x3e \x3cspan style\x3d"font-size: 0.85em"\x3e {series.name}\x3c/span\x3e\x3cbr/\x3e', + pointFormat: + 'x: \x3cb\x3e{point.x}\x3c/b\x3e\x3cbr/\x3ey: \x3cb\x3e{point.y}\x3c/b\x3e\x3cbr/\x3e', + }, + }, + { + sorted: !1, + requireSorting: !1, + noSharedTooltip: !0, + trackerGroups: ['group', 'markerGroup', 'dataLabelsGroup'], + takeOrdinalPosition: !1, + drawGraph: function() { + this.options.lineWidth && E.prototype.drawGraph.call(this); + }, + }, + ); + })(M); + (function(a) { + var E = a.deg2rad, + D = a.isNumber, + H = a.pick, + p = a.relativeLength; + a.CenteredSeriesMixin = { + getCenter: function() { + var a = this.options, + l = this.chart, + r = 2 * (a.slicedOffset || 0), + n = l.plotWidth - 2 * r, + l = l.plotHeight - 2 * r, + w = a.center, + w = [ + H(w[0], '50%'), + H(w[1], '50%'), + a.size || '100%', + a.innerSize || 0, + ], + u = Math.min(n, l), + e, + h; + for (e = 0; 4 > e; ++e) + (h = w[e]), + (a = 2 > e || (2 === e && /%$/.test(h))), + (w[e] = p(h, [n, l, u, w[2]][e]) + (a ? r : 0)); + w[3] > w[2] && (w[3] = w[2]); + return w; + }, + getStartAndEndRadians: function(a, l) { + a = D(a) ? a : 0; + l = D(l) && l > a && 360 > l - a ? l : a + 360; + return { start: E * (a + -90), end: E * (l + -90) }; + }, + }; + })(M); + (function(a) { + var E = a.addEvent, + D = a.CenteredSeriesMixin, + H = a.defined, + p = a.each, + f = a.extend, + l = D.getStartAndEndRadians, + r = a.inArray, + n = a.noop, + w = a.pick, + u = a.Point, + e = a.Series, + h = a.seriesType, + m = a.setAnimation; + h( + 'pie', + 'line', + { + center: [null, null], + clip: !1, + colorByPoint: !0, + dataLabels: { + distance: 30, + enabled: !0, + formatter: function() { + return this.point.isNull ? void 0 : this.point.name; + }, + x: 0, + }, + ignoreHiddenPoint: !0, + legendType: 'point', + marker: null, + size: null, + showInLegend: !1, + slicedOffset: 10, + stickyTracking: !1, + tooltip: { followPointer: !0 }, + borderColor: '#ffffff', + borderWidth: 1, + states: { hover: { brightness: 0.1, shadow: !1 } }, + }, + { + isCartesian: !1, + requireSorting: !1, + directTouch: !0, + noSharedTooltip: !0, + trackerGroups: ['group', 'dataLabelsGroup'], + axisTypes: [], + pointAttribs: a.seriesTypes.column.prototype.pointAttribs, + animate: function(a) { + var c = this, + b = c.points, + d = c.startAngleRad; + a || + (p(b, function(a) { + var b = a.graphic, + e = a.shapeArgs; + b && + (b.attr({ r: a.startR || c.center[3] / 2, start: d, end: d }), + b.animate( + { r: e.r, start: e.start, end: e.end }, + c.options.animation, + )); + }), + (c.animate = null)); + }, + updateTotals: function() { + var a, + c = 0, + b = this.points, + e = b.length, + f, + h = this.options.ignoreHiddenPoint; + for (a = 0; a < e; a++) + (f = b[a]), (c += h && !f.visible ? 0 : f.isNull ? 0 : f.y); + this.total = c; + for (a = 0; a < e; a++) + (f = b[a]), + (f.percentage = 0 < c && (f.visible || !h) ? (f.y / c) * 100 : 0), + (f.total = c); + }, + generatePoints: function() { + e.prototype.generatePoints.call(this); + this.updateTotals(); + }, + translate: function(a) { + this.generatePoints(); + var c = 0, + b = this.options, + d = b.slicedOffset, + e = d + (b.borderWidth || 0), + f, + h, + m, + n = l(b.startAngle, b.endAngle), + t = (this.startAngleRad = n.start), + n = (this.endAngleRad = n.end) - t, + p = this.points, + u, + q = b.dataLabels.distance, + b = b.ignoreHiddenPoint, + r, + F = p.length, + G; + a || (this.center = a = this.getCenter()); + this.getX = function(b, c, d) { + m = Math.asin( + Math.min((b - a[1]) / (a[2] / 2 + d.labelDistance), 1), + ); + return ( + a[0] + (c ? -1 : 1) * Math.cos(m) * (a[2] / 2 + d.labelDistance) + ); + }; + for (r = 0; r < F; r++) { + G = p[r]; + G.labelDistance = w( + G.options.dataLabels && G.options.dataLabels.distance, + q, + ); + this.maxLabelDistance = Math.max( + this.maxLabelDistance || 0, + G.labelDistance, + ); + f = t + c * n; + if (!b || G.visible) c += G.percentage / 100; + h = t + c * n; + G.shapeType = 'arc'; + G.shapeArgs = { + x: a[0], + y: a[1], + r: a[2] / 2, + innerR: a[3] / 2, + start: Math.round(1e3 * f) / 1e3, + end: Math.round(1e3 * h) / 1e3, + }; + m = (h + f) / 2; + m > 1.5 * Math.PI + ? (m -= 2 * Math.PI) + : m < -Math.PI / 2 && (m += 2 * Math.PI); + G.slicedTranslation = { + translateX: Math.round(Math.cos(m) * d), + translateY: Math.round(Math.sin(m) * d), + }; + h = (Math.cos(m) * a[2]) / 2; + u = (Math.sin(m) * a[2]) / 2; + G.tooltipPos = [a[0] + 0.7 * h, a[1] + 0.7 * u]; + G.half = m < -Math.PI / 2 || m > Math.PI / 2 ? 1 : 0; + G.angle = m; + f = Math.min(e, G.labelDistance / 5); + G.labelPos = [ + a[0] + h + Math.cos(m) * G.labelDistance, + a[1] + u + Math.sin(m) * G.labelDistance, + a[0] + h + Math.cos(m) * f, + a[1] + u + Math.sin(m) * f, + a[0] + h, + a[1] + u, + 0 > G.labelDistance ? 'center' : G.half ? 'right' : 'left', + m, + ]; + } + }, + drawGraph: null, + drawPoints: function() { + var a = this, + c = a.chart.renderer, + b, + e, + h, + l, + m = a.options.shadow; + m && !a.shadowGroup && (a.shadowGroup = c.g('shadow').add(a.group)); + p(a.points, function(d) { + e = d.graphic; + if (d.isNull) e && (d.graphic = e.destroy()); + else { + l = d.shapeArgs; + b = d.getTranslate(); + var k = d.shadowGroup; + m && !k && (k = d.shadowGroup = c.g('shadow').add(a.shadowGroup)); + k && k.attr(b); + h = a.pointAttribs(d, d.selected && 'select'); + e + ? e + .setRadialReference(a.center) + .attr(h) + .animate(f(l, b)) + : ((d.graphic = e = c[d.shapeType](l) + .setRadialReference(a.center) + .attr(b) + .add(a.group)), + d.visible || e.attr({ visibility: 'hidden' }), + e + .attr(h) + .attr({ 'stroke-linejoin': 'round' }) + .shadow(m, k)); + e.addClass(d.getClassName()); + } + }); + }, + searchPoint: n, + sortByAngle: function(a, c) { + a.sort(function(a, d) { + return void 0 !== a.angle && (d.angle - a.angle) * c; + }); + }, + drawLegendSymbol: a.LegendSymbolMixin.drawRectangle, + getCenter: D.getCenter, + getSymbol: n, + }, + { + init: function() { + u.prototype.init.apply(this, arguments); + var a = this, + c; + a.name = w(a.name, 'Slice'); + c = function(b) { + a.slice('select' === b.type); + }; + E(a, 'select', c); + E(a, 'unselect', c); + return a; + }, + isValid: function() { + return a.isNumber(this.y, !0) && 0 <= this.y; + }, + setVisible: function(a, c) { + var b = this, + d = b.series, + e = d.chart, + f = d.options.ignoreHiddenPoint; + c = w(c, f); + a !== b.visible && + ((b.visible = b.options.visible = a = + void 0 === a ? !b.visible : a), + (d.options.data[r(b, d.data)] = b.options), + p(['graphic', 'dataLabel', 'connector', 'shadowGroup'], function( + c, + ) { + if (b[c]) b[c][a ? 'show' : 'hide'](!0); + }), + b.legendItem && e.legend.colorizeItem(b, a), + a || 'hover' !== b.state || b.setState(''), + f && (d.isDirty = !0), + c && e.redraw()); + }, + slice: function(a, c, b) { + var d = this.series; + m(b, d.chart); + w(c, !0); + this.sliced = this.options.sliced = H(a) ? a : !this.sliced; + d.options.data[r(this, d.data)] = this.options; + this.graphic.animate(this.getTranslate()); + this.shadowGroup && this.shadowGroup.animate(this.getTranslate()); + }, + getTranslate: function() { + return this.sliced + ? this.slicedTranslation + : { translateX: 0, translateY: 0 }; + }, + haloPath: function(a) { + var c = this.shapeArgs; + return this.sliced || !this.visible + ? [] + : this.series.chart.renderer.symbols.arc( + c.x, + c.y, + c.r + a, + c.r + a, + { innerR: this.shapeArgs.r - 1, start: c.start, end: c.end }, + ); + }, + }, + ); + })(M); + (function(a) { + var E = a.addEvent, + D = a.arrayMax, + H = a.defined, + p = a.each, + f = a.extend, + l = a.format, + r = a.map, + n = a.merge, + w = a.noop, + u = a.pick, + e = a.relativeLength, + h = a.Series, + m = a.seriesTypes, + d = a.stableSort; + a.distribute = function(a, b) { + function c(a, b) { + return a.target - b.target; + } + var e, + f = !0, + h = a, + l = [], + m; + m = 0; + for (e = a.length; e--; ) m += a[e].size; + if (m > b) { + d(a, function(a, b) { + return (b.rank || 0) - (a.rank || 0); + }); + for (m = e = 0; m <= b; ) (m += a[e].size), e++; + l = a.splice(e - 1, a.length); + } + d(a, c); + for ( + a = r(a, function(a) { + return { size: a.size, targets: [a.target], align: u(a.align, 0.5) }; + }); + f; + + ) { + for (e = a.length; e--; ) + (f = a[e]), + (m = + (Math.min.apply(0, f.targets) + Math.max.apply(0, f.targets)) / + 2), + (f.pos = Math.min(Math.max(0, m - f.size * f.align), b - f.size)); + e = a.length; + for (f = !1; e--; ) + 0 < e && + a[e - 1].pos + a[e - 1].size > a[e].pos && + ((a[e - 1].size += a[e].size), + (a[e - 1].targets = a[e - 1].targets.concat(a[e].targets)), + (a[e - 1].align = 0.5), + a[e - 1].pos + a[e - 1].size > b && + (a[e - 1].pos = b - a[e - 1].size), + a.splice(e, 1), + (f = !0)); + } + e = 0; + p(a, function(a) { + var b = 0; + p(a.targets, function() { + h[e].pos = a.pos + b; + b += h[e].size; + e++; + }); + }); + h.push.apply(h, l); + d(h, c); + }; + h.prototype.drawDataLabels = function() { + function c(a, b) { + var c = b.filter; + return c + ? ((b = c.operator), + (a = a[c.property]), + (c = c.value), + ('\x3e' === b && a > c) || + ('\x3c' === b && a < c) || + ('\x3e\x3d' === b && a >= c) || + ('\x3c\x3d' === b && a <= c) || + ('\x3d\x3d' === b && a == c) || + ('\x3d\x3d\x3d' === b && a === c) + ? !0 + : !1) + : !0; + } + var b = this, + d = b.options, + e = d.dataLabels, + f = b.points, + h, + m, + r = b.hasRendered || 0, + t, + w, + D = u(e.defer, !!d.animation), + q = b.chart.renderer; + if (e.enabled || b._hasPointLabels) + b.dlProcessOptions && b.dlProcessOptions(e), + (w = b.plotGroup( + 'dataLabelsGroup', + 'data-labels', + D && !r ? 'hidden' : 'visible', + e.zIndex || 6, + )), + D && + (w.attr({ opacity: +r }), + r || + E(b, 'afterAnimate', function() { + b.visible && w.show(!0); + w[d.animation ? 'animate' : 'attr']( + { opacity: 1 }, + { duration: 200 }, + ); + })), + (m = e), + p(f, function(f) { + var k, + p = f.dataLabel, + g, + x, + r = f.connector, + z = !p, + C; + h = f.dlOptions || (f.options && f.options.dataLabels); + (k = u(h && h.enabled, m.enabled) && !f.isNull) && + (k = !0 === c(f, h || e)); + k && + ((e = n(m, h)), + (g = f.getLabelConfig()), + (C = e[f.formatPrefix + 'Format'] || e.format), + (t = H(C) + ? l(C, g) + : (e[f.formatPrefix + 'Formatter'] || e.formatter).call(g, e)), + (C = e.style), + (g = e.rotation), + (C.color = u(e.color, C.color, b.color, '#000000')), + 'contrast' === C.color && + ((f.contrastColor = q.getContrast(f.color || b.color)), + (C.color = + e.inside || 0 > u(f.labelDistance, e.distance) || d.stacking + ? f.contrastColor + : '#000000')), + d.cursor && (C.cursor = d.cursor), + (x = { + fill: e.backgroundColor, + stroke: e.borderColor, + 'stroke-width': e.borderWidth, + r: e.borderRadius || 0, + rotation: g, + padding: e.padding, + zIndex: 1, + }), + a.objectEach(x, function(a, b) { + void 0 === a && delete x[b]; + })); + !p || (k && H(t)) + ? k && + H(t) && + (p + ? (x.text = t) + : ((p = f.dataLabel = g + ? q.text(t, 0, -9999).addClass('highcharts-data-label') + : q.label( + t, + 0, + -9999, + e.shape, + null, + null, + e.useHTML, + null, + 'data-label', + )), + p.addClass( + ' highcharts-data-label-color-' + + f.colorIndex + + ' ' + + (e.className || '') + + (e.useHTML ? 'highcharts-tracker' : ''), + )), + p.attr(x), + p.css(C).shadow(e.shadow), + p.added || p.add(w), + b.alignDataLabel(f, p, e, null, z)) + : ((f.dataLabel = p = p.destroy()), + r && (f.connector = r.destroy())); + }); + }; + h.prototype.alignDataLabel = function(a, b, d, e, h) { + var c = this.chart, + k = c.inverted, + l = u(a.dlBox && a.dlBox.centerX, a.plotX, -9999), + m = u(a.plotY, -9999), + n = b.getBBox(), + p, + q = d.rotation, + r = d.align, + w = + this.visible && + (a.series.forceDL || + c.isInsidePlot(l, Math.round(m), k) || + (e && c.isInsidePlot(l, k ? e.x + 1 : e.y + e.height - 1, k))), + z = 'justify' === u(d.overflow, 'justify'); + if ( + w && + ((p = d.style.fontSize), + (p = c.renderer.fontMetrics(p, b).b), + (e = f( + { + x: k ? this.yAxis.len - m : l, + y: Math.round(k ? this.xAxis.len - l : m), + width: 0, + height: 0, + }, + e, + )), + f(d, { width: n.width, height: n.height }), + q + ? ((z = !1), + (l = c.renderer.rotCorr(p, q)), + (l = { + x: e.x + d.x + e.width / 2 + l.x, + y: + e.y + + d.y + + { top: 0, middle: 0.5, bottom: 1 }[d.verticalAlign] * e.height, + }), + b[h ? 'attr' : 'animate'](l).attr({ align: r }), + (m = (q + 720) % 360), + (m = 180 < m && 360 > m), + 'left' === r + ? (l.y -= m ? n.height : 0) + : 'center' === r + ? ((l.x -= n.width / 2), (l.y -= n.height / 2)) + : 'right' === r && ((l.x -= n.width), (l.y -= m ? 0 : n.height))) + : (b.align(d, null, e), (l = b.alignAttr)), + z + ? (a.isLabelJustified = this.justifyDataLabel(b, d, l, n, e, h)) + : u(d.crop, !0) && + (w = + c.isInsidePlot(l.x, l.y) && + c.isInsidePlot(l.x + n.width, l.y + n.height)), + d.shape && !q) + ) + b[h ? 'attr' : 'animate']({ + anchorX: k ? c.plotWidth - a.plotY : a.plotX, + anchorY: k ? c.plotHeight - a.plotX : a.plotY, + }); + w || (b.attr({ y: -9999 }), (b.placed = !1)); + }; + h.prototype.justifyDataLabel = function(a, b, d, e, f, h) { + var c = this.chart, + k = b.align, + l = b.verticalAlign, + m, + n, + p = a.box ? 0 : a.padding || 0; + m = d.x + p; + 0 > m && ('right' === k ? (b.align = 'left') : (b.x = -m), (n = !0)); + m = d.x + e.width - p; + m > c.plotWidth && + ('left' === k ? (b.align = 'right') : (b.x = c.plotWidth - m), + (n = !0)); + m = d.y + p; + 0 > m && + ('bottom' === l ? (b.verticalAlign = 'top') : (b.y = -m), (n = !0)); + m = d.y + e.height - p; + m > c.plotHeight && + ('top' === l ? (b.verticalAlign = 'bottom') : (b.y = c.plotHeight - m), + (n = !0)); + n && ((a.placed = !h), a.align(b, null, f)); + return n; + }; + m.pie && + ((m.pie.prototype.drawDataLabels = function() { + var c = this, + b = c.data, + d, + e = c.chart, + f = c.options.dataLabels, + l = u(f.connectorPadding, 10), + m = u(f.connectorWidth, 1), + n = e.plotWidth, + t = e.plotHeight, + r, + w = c.center, + q = w[2] / 2, + A = w[1], + F, + G, + g, + v, + E = [[], []], + L, + P, + J, + M, + y = [0, 0, 0, 0]; + c.visible && + (f.enabled || c._hasPointLabels) && + (p(b, function(a) { + a.dataLabel && + a.visible && + a.dataLabel.shortened && + (a.dataLabel + .attr({ width: 'auto' }) + .css({ width: 'auto', textOverflow: 'clip' }), + (a.dataLabel.shortened = !1)); + }), + h.prototype.drawDataLabels.apply(c), + p(b, function(a) { + a.dataLabel && + a.visible && + (E[a.half].push(a), (a.dataLabel._pos = null)); + }), + p(E, function(b, h) { + var k, + m, + x = b.length, + r = [], + z; + if (x) + for ( + c.sortByAngle(b, h - 0.5), + 0 < c.maxLabelDistance && + ((k = Math.max(0, A - q - c.maxLabelDistance)), + (m = Math.min(A + q + c.maxLabelDistance, e.plotHeight)), + p(b, function(a) { + 0 < a.labelDistance && + a.dataLabel && + ((a.top = Math.max(0, A - q - a.labelDistance)), + (a.bottom = Math.min( + A + q + a.labelDistance, + e.plotHeight, + )), + (z = a.dataLabel.getBBox().height || 21), + (a.positionsIndex = + r.push({ + target: a.labelPos[1] - a.top + z / 2, + size: z, + rank: a.y, + }) - 1)); + }), + a.distribute(r, m + z - k)), + M = 0; + M < x; + M++ + ) + (d = b[M]), + (m = d.positionsIndex), + (g = d.labelPos), + (F = d.dataLabel), + (J = !1 === d.visible ? 'hidden' : 'inherit'), + (P = k = g[1]), + r && + H(r[m]) && + (void 0 === r[m].pos + ? (J = 'hidden') + : ((v = r[m].size), (P = d.top + r[m].pos))), + delete d.positionIndex, + (L = f.justify + ? w[0] + (h ? -1 : 1) * (q + d.labelDistance) + : c.getX(P < d.top + 2 || P > d.bottom - 2 ? k : P, h, d)), + (F._attr = { visibility: J, align: g[6] }), + (F._pos = { + x: L + f.x + ({ left: l, right: -l }[g[6]] || 0), + y: P + f.y - 10, + }), + (g.x = L), + (g.y = P), + u(f.crop, !0) && + ((G = F.getBBox().width), + (k = null), + L - G < l + ? ((k = Math.round(G - L + l)), + (y[3] = Math.max(k, y[3]))) + : L + G > n - l && + ((k = Math.round(L + G - n + l)), + (y[1] = Math.max(k, y[1]))), + 0 > P - v / 2 + ? (y[0] = Math.max(Math.round(-P + v / 2), y[0])) + : P + v / 2 > t && + (y[2] = Math.max(Math.round(P + v / 2 - t), y[2])), + (F.sideOverflow = k)); + }), + 0 === D(y) || this.verifyDataLabelOverflow(y)) && + (this.placeDataLabels(), + m && + p(this.points, function(a) { + var b; + r = a.connector; + if ( + (F = a.dataLabel) && + F._pos && + a.visible && + 0 < a.labelDistance + ) { + J = F._attr.visibility; + if ((b = !r)) + (a.connector = r = e.renderer + .path() + .addClass( + 'highcharts-data-label-connector highcharts-color-' + + a.colorIndex, + ) + .add(c.dataLabelsGroup)), + r.attr({ + 'stroke-width': m, + stroke: f.connectorColor || a.color || '#666666', + }); + r[b ? 'attr' : 'animate']({ d: c.connectorPath(a.labelPos) }); + r.attr('visibility', J); + } else r && (a.connector = r.destroy()); + })); + }), + (m.pie.prototype.connectorPath = function(a) { + var b = a.x, + c = a.y; + return u(this.options.dataLabels.softConnector, !0) + ? [ + 'M', + b + ('left' === a[6] ? 5 : -5), + c, + 'C', + b, + c, + 2 * a[2] - a[4], + 2 * a[3] - a[5], + a[2], + a[3], + 'L', + a[4], + a[5], + ] + : [ + 'M', + b + ('left' === a[6] ? 5 : -5), + c, + 'L', + a[2], + a[3], + 'L', + a[4], + a[5], + ]; + }), + (m.pie.prototype.placeDataLabels = function() { + p( + this.points, + function(a) { + var b = a.dataLabel; + b && + a.visible && + ((a = b._pos) + ? (b.sideOverflow && + ((b._attr.width = b.getBBox().width - b.sideOverflow), + b.css({ + width: b._attr.width + 'px', + textOverflow: 'ellipsis', + }), + (b.shortened = !0)), + b.attr(b._attr), + b[b.moved ? 'animate' : 'attr'](a), + (b.moved = !0)) + : b && b.attr({ y: -9999 })); + }, + this, + ); + }), + (m.pie.prototype.alignDataLabel = w), + (m.pie.prototype.verifyDataLabelOverflow = function(a) { + var b = this.center, + c = this.options, + d = c.center, + f = c.minSize || 80, + h, + l = null !== c.size; + l || + (null !== d[0] + ? (h = Math.max(b[2] - Math.max(a[1], a[3]), f)) + : ((h = Math.max(b[2] - a[1] - a[3], f)), + (b[0] += (a[3] - a[1]) / 2)), + null !== d[1] + ? (h = Math.max(Math.min(h, b[2] - Math.max(a[0], a[2])), f)) + : ((h = Math.max(Math.min(h, b[2] - a[0] - a[2]), f)), + (b[1] += (a[0] - a[2]) / 2)), + h < b[2] + ? ((b[2] = h), + (b[3] = Math.min(e(c.innerSize || 0, h), h)), + this.translate(b), + this.drawDataLabels && this.drawDataLabels()) + : (l = !0)); + return l; + })); + m.column && + (m.column.prototype.alignDataLabel = function(a, b, d, e, f) { + var c = this.chart.inverted, + k = a.series, + l = a.dlBox || a.shapeArgs, + m = u(a.below, a.plotY > u(this.translatedThreshold, k.yAxis.len)), + p = u(d.inside, !!this.options.stacking); + l && + ((e = n(l)), + 0 > e.y && ((e.height += e.y), (e.y = 0)), + (l = e.y + e.height - k.yAxis.len), + 0 < l && (e.height -= l), + c && + (e = { + x: k.yAxis.len - e.y - e.height, + y: k.xAxis.len - e.x - e.width, + width: e.height, + height: e.width, + }), + p || + (c + ? ((e.x += m ? 0 : e.width), (e.width = 0)) + : ((e.y += m ? e.height : 0), (e.height = 0)))); + d.align = u(d.align, !c || p ? 'center' : m ? 'right' : 'left'); + d.verticalAlign = u( + d.verticalAlign, + c || p ? 'middle' : m ? 'top' : 'bottom', + ); + h.prototype.alignDataLabel.call(this, a, b, d, e, f); + a.isLabelJustified && + a.contrastColor && + a.dataLabel.css({ color: a.contrastColor }); + }); + })(M); + (function(a) { + var E = a.Chart, + D = a.each, + H = a.objectEach, + p = a.pick; + a = a.addEvent; + a(E.prototype, 'render', function() { + var a = []; + D(this.labelCollectors || [], function(f) { + a = a.concat(f()); + }); + D(this.yAxis || [], function(f) { + f.options.stackLabels && + !f.options.stackLabels.allowOverlap && + H(f.stacks, function(f) { + H(f, function(f) { + a.push(f.label); + }); + }); + }); + D(this.series || [], function(f) { + var l = f.options.dataLabels, + n = f.dataLabelCollections || ['dataLabel']; + (l.enabled || f._hasPointLabels) && + !l.allowOverlap && + f.visible && + D(n, function(l) { + D(f.points, function(f) { + f[l] && + ((f[l].labelrank = p( + f.labelrank, + f.shapeArgs && f.shapeArgs.height, + )), + a.push(f[l])); + }); + }); + }); + this.hideOverlappingLabels(a); + }); + E.prototype.hideOverlappingLabels = function(a) { + var f = a.length, + p, + n, + w, + u, + e, + h, + m, + d, + c, + b = function(a, b, c, d, e, f, h, l) { + return !(e > a + c || e + h < a || f > b + d || f + l < b); + }; + for (n = 0; n < f; n++) + if ((p = a[n])) + (p.oldOpacity = p.opacity), + (p.newOpacity = 1), + p.width || + ((w = p.getBBox()), (p.width = w.width), (p.height = w.height)); + a.sort(function(a, b) { + return (b.labelrank || 0) - (a.labelrank || 0); + }); + for (n = 0; n < f; n++) + for (w = a[n], p = n + 1; p < f; ++p) + if ( + ((u = a[p]), + w && + u && + w !== u && + w.placed && + u.placed && + 0 !== w.newOpacity && + 0 !== u.newOpacity && + ((e = w.alignAttr), + (h = u.alignAttr), + (m = w.parentGroup), + (d = u.parentGroup), + (c = 2 * (w.box ? 0 : w.padding || 0)), + (e = b( + e.x + m.translateX, + e.y + m.translateY, + w.width - c, + w.height - c, + h.x + d.translateX, + h.y + d.translateY, + u.width - c, + u.height - c, + )))) + ) + (w.labelrank < u.labelrank ? w : u).newOpacity = 0; + D(a, function(a) { + var b, c; + a && + ((c = a.newOpacity), + a.oldOpacity !== c && + a.placed && + (c + ? a.show(!0) + : (b = function() { + a.hide(); + }), + (a.alignAttr.opacity = c), + a[a.isOld ? 'animate' : 'attr'](a.alignAttr, null, b)), + (a.isOld = !0)); + }); + }; + })(M); + (function(a) { + var E = a.addEvent, + D = a.Chart, + H = a.createElement, + p = a.css, + f = a.defaultOptions, + l = a.defaultPlotOptions, + r = a.each, + n = a.extend, + w = a.fireEvent, + u = a.hasTouch, + e = a.inArray, + h = a.isObject, + m = a.Legend, + d = a.merge, + c = a.pick, + b = a.Point, + k = a.Series, + z = a.seriesTypes, + B = a.svg, + I; + I = a.TrackerMixin = { + drawTrackerPoint: function() { + var a = this, + b = a.chart.pointer, + c = function(a) { + var c = b.getPointFromEvent(a); + void 0 !== c && ((b.isDirectTouch = !0), c.onMouseOver(a)); + }; + r(a.points, function(a) { + a.graphic && (a.graphic.element.point = a); + a.dataLabel && + (a.dataLabel.div + ? (a.dataLabel.div.point = a) + : (a.dataLabel.element.point = a)); + }); + a._hasTracking || + (r(a.trackerGroups, function(d) { + if (a[d]) { + a[d] + .addClass('highcharts-tracker') + .on('mouseover', c) + .on('mouseout', function(a) { + b.onTrackerMouseOut(a); + }); + if (u) a[d].on('touchstart', c); + a.options.cursor && a[d].css(p).css({ cursor: a.options.cursor }); + } + }), + (a._hasTracking = !0)); + }, + drawTrackerGraph: function() { + var a = this, + b = a.options, + c = b.trackByArea, + d = [].concat(c ? a.areaPath : a.graphPath), + e = d.length, + f = a.chart, + h = f.pointer, + k = f.renderer, + l = f.options.tooltip.snap, + g = a.tracker, + m, + n = function() { + if (f.hoverSeries !== a) a.onMouseOver(); + }, + p = 'rgba(192,192,192,' + (B ? 0.0001 : 0.002) + ')'; + if (e && !c) + for (m = e + 1; m--; ) + 'M' === d[m] && d.splice(m + 1, 0, d[m + 1] - l, d[m + 2], 'L'), + ((m && 'M' === d[m]) || m === e) && + d.splice(m, 0, 'L', d[m - 2] + l, d[m - 1]); + g + ? g.attr({ d: d }) + : a.graph && + ((a.tracker = k + .path(d) + .attr({ + 'stroke-linejoin': 'round', + visibility: a.visible ? 'visible' : 'hidden', + stroke: p, + fill: c ? p : 'none', + 'stroke-width': a.graph.strokeWidth() + (c ? 0 : 2 * l), + zIndex: 2, + }) + .add(a.group)), + r([a.tracker, a.markerGroup], function(a) { + a.addClass('highcharts-tracker') + .on('mouseover', n) + .on('mouseout', function(a) { + h.onTrackerMouseOut(a); + }); + b.cursor && a.css({ cursor: b.cursor }); + if (u) a.on('touchstart', n); + })); + }, + }; + z.column && (z.column.prototype.drawTracker = I.drawTrackerPoint); + z.pie && (z.pie.prototype.drawTracker = I.drawTrackerPoint); + z.scatter && (z.scatter.prototype.drawTracker = I.drawTrackerPoint); + n(m.prototype, { + setItemEvents: function(a, c, e) { + var f = this, + h = f.chart.renderer.boxWrapper, + k = + 'highcharts-legend-' + + (a instanceof b ? 'point' : 'series') + + '-active'; + (e ? c : a.legendGroup) + .on('mouseover', function() { + a.setState('hover'); + h.addClass(k); + c.css(f.options.itemHoverStyle); + }) + .on('mouseout', function() { + c.css(d(a.visible ? f.itemStyle : f.itemHiddenStyle)); + h.removeClass(k); + a.setState(); + }) + .on('click', function(b) { + var c = function() { + a.setVisible && a.setVisible(); + }; + h.removeClass(k); + b = { browserEvent: b }; + a.firePointEvent + ? a.firePointEvent('legendItemClick', b, c) + : w(a, 'legendItemClick', b, c); + }); + }, + createCheckboxForItem: function(a) { + a.checkbox = H( + 'input', + { type: 'checkbox', checked: a.selected, defaultChecked: a.selected }, + this.options.itemCheckboxStyle, + this.chart.container, + ); + E(a.checkbox, 'click', function(b) { + w( + a.series || a, + 'checkboxClick', + { checked: b.target.checked, item: a }, + function() { + a.select(); + }, + ); + }); + }, + }); + f.legend.itemStyle.cursor = 'pointer'; + n(D.prototype, { + showResetZoom: function() { + var a = this, + b = f.lang, + c = a.options.chart.resetZoomButton, + d = c.theme, + e = d.states, + h = 'chart' === c.relativeTo ? null : 'plotBox'; + this.resetZoomButton = a.renderer + .button( + b.resetZoom, + null, + null, + function() { + a.zoomOut(); + }, + d, + e && e.hover, + ) + .attr({ align: c.position.align, title: b.resetZoomTitle }) + .addClass('highcharts-reset-zoom') + .add() + .align(c.position, !1, h); + }, + zoomOut: function() { + var a = this; + w(a, 'selection', { resetSelection: !0 }, function() { + a.zoom(); + }); + }, + zoom: function(a) { + var b, + d = this.pointer, + e = !1, + f; + !a || a.resetSelection + ? (r(this.axes, function(a) { + b = a.zoom(); + }), + (d.initiated = !1)) + : r(a.xAxis.concat(a.yAxis), function(a) { + var c = a.axis; + d[c.isXAxis ? 'zoomX' : 'zoomY'] && + ((b = c.zoom(a.min, a.max)), c.displayBtn && (e = !0)); + }); + f = this.resetZoomButton; + e && !f + ? this.showResetZoom() + : !e && h(f) && (this.resetZoomButton = f.destroy()); + b && + this.redraw( + c( + this.options.chart.animation, + a && a.animation, + 100 > this.pointCount, + ), + ); + }, + pan: function(a, b) { + var c = this, + d = c.hoverPoints, + e; + d && + r(d, function(a) { + a.setState(); + }); + r('xy' === b ? [1, 0] : [1], function(b) { + b = c[b ? 'xAxis' : 'yAxis'][0]; + var d = b.horiz, + f = a[d ? 'chartX' : 'chartY'], + d = d ? 'mouseDownX' : 'mouseDownY', + h = c[d], + g = (b.pointRange || 0) / 2, + k = b.getExtremes(), + l = b.toValue(h - f, !0) + g, + m = b.toValue(h + b.len - f, !0) - g, + n = m < l, + h = n ? m : l, + l = n ? l : m, + m = Math.min( + k.dataMin, + g ? k.min : b.toValue(b.toPixels(k.min) - b.minPixelPadding), + ), + g = Math.max( + k.dataMax, + g ? k.max : b.toValue(b.toPixels(k.max) + b.minPixelPadding), + ), + n = m - h; + 0 < n && ((l += n), (h = m)); + n = l - g; + 0 < n && ((l = g), (h -= n)); + b.series.length && + h !== k.min && + l !== k.max && + (b.setExtremes(h, l, !1, !1, { trigger: 'pan' }), (e = !0)); + c[d] = f; + }); + e && c.redraw(!1); + p(c.container, { cursor: 'move' }); + }, + }); + n(b.prototype, { + select: function(a, b) { + var d = this, + f = d.series, + h = f.chart; + a = c(a, !d.selected); + d.firePointEvent( + a ? 'select' : 'unselect', + { accumulate: b }, + function() { + d.selected = d.options.selected = a; + f.options.data[e(d, f.data)] = d.options; + d.setState(a && 'select'); + b || + r(h.getSelectedPoints(), function(a) { + a.selected && + a !== d && + ((a.selected = a.options.selected = !1), + (f.options.data[e(a, f.data)] = a.options), + a.setState(''), + a.firePointEvent('unselect')); + }); + }, + ); + }, + onMouseOver: function(a) { + var b = this.series.chart, + c = b.pointer; + a = a + ? c.normalize(a) + : c.getChartCoordinatesFromPoint(this, b.inverted); + c.runPointActions(a, this); + }, + onMouseOut: function() { + var a = this.series.chart; + this.firePointEvent('mouseOut'); + r(a.hoverPoints || [], function(a) { + a.setState(); + }); + a.hoverPoints = a.hoverPoint = null; + }, + importEvents: function() { + if (!this.hasImportedEvents) { + var b = this, + c = d(b.series.options.point, b.options).events; + b.events = c; + a.objectEach(c, function(a, c) { + E(b, c, a); + }); + this.hasImportedEvents = !0; + } + }, + setState: function(a, b) { + var d = Math.floor(this.plotX), + e = this.plotY, + f = this.series, + h = f.options.states[a] || {}, + k = l[f.type].marker && f.options.marker, + m = k && !1 === k.enabled, + p = (k && k.states && k.states[a]) || {}, + g = !1 === p.enabled, + r = f.stateMarkerGraphic, + u = this.marker || {}, + w = f.chart, + x = f.halo, + z, + B = k && f.markerAttribs; + a = a || ''; + if ( + !( + (a === this.state && !b) || + (this.selected && 'select' !== a) || + !1 === h.enabled || + (a && (g || (m && !1 === p.enabled))) || + (a && u.states && u.states[a] && !1 === u.states[a].enabled) + ) + ) { + B && (z = f.markerAttribs(this, a)); + if (this.graphic) + this.state && + this.graphic.removeClass('highcharts-point-' + this.state), + a && this.graphic.addClass('highcharts-point-' + a), + this.graphic.animate( + f.pointAttribs(this, a), + c(w.options.chart.animation, h.animation), + ), + z && + this.graphic.animate( + z, + c(w.options.chart.animation, p.animation, k.animation), + ), + r && r.hide(); + else { + if (a && p) { + k = u.symbol || f.symbol; + r && r.currentSymbol !== k && (r = r.destroy()); + if (r) r[b ? 'animate' : 'attr']({ x: z.x, y: z.y }); + else + k && + ((f.stateMarkerGraphic = r = w.renderer + .symbol(k, z.x, z.y, z.width, z.height) + .add(f.markerGroup)), + (r.currentSymbol = k)); + r && r.attr(f.pointAttribs(this, a)); + } + r && + (r[a && w.isInsidePlot(d, e, w.inverted) ? 'show' : 'hide'](), + (r.element.point = this)); + } + (d = h.halo) && d.size + ? (x || + (f.halo = x = w.renderer + .path() + .add((this.graphic || r).parentGroup)), + x[b ? 'animate' : 'attr']({ d: this.haloPath(d.size) }), + x.attr({ + class: + 'highcharts-halo highcharts-color-' + + c(this.colorIndex, f.colorIndex), + }), + (x.point = this), + x.attr( + n( + { + fill: this.color || f.color, + 'fill-opacity': d.opacity, + zIndex: -1, + }, + d.attributes, + ), + )) + : x && + x.point && + x.point.haloPath && + x.animate({ d: x.point.haloPath(0) }); + this.state = a; + } + }, + haloPath: function(a) { + return this.series.chart.renderer.symbols.circle( + Math.floor(this.plotX) - a, + this.plotY - a, + 2 * a, + 2 * a, + ); + }, + }); + n(k.prototype, { + onMouseOver: function() { + var a = this.chart, + b = a.hoverSeries; + if (b && b !== this) b.onMouseOut(); + this.options.events.mouseOver && w(this, 'mouseOver'); + this.setState('hover'); + a.hoverSeries = this; + }, + onMouseOut: function() { + var a = this.options, + b = this.chart, + c = b.tooltip, + d = b.hoverPoint; + b.hoverSeries = null; + if (d) d.onMouseOut(); + this && a.events.mouseOut && w(this, 'mouseOut'); + !c || + this.stickyTracking || + (c.shared && !this.noSharedTooltip) || + c.hide(); + this.setState(); + }, + setState: function(a) { + var b = this, + d = b.options, + e = b.graph, + f = d.states, + h = d.lineWidth, + d = 0; + a = a || ''; + if ( + b.state !== a && + (r([b.group, b.markerGroup, b.dataLabelsGroup], function(c) { + c && + (b.state && c.removeClass('highcharts-series-' + b.state), + a && c.addClass('highcharts-series-' + a)); + }), + (b.state = a), + !f[a] || !1 !== f[a].enabled) && + (a && (h = f[a].lineWidth || h + (f[a].lineWidthPlus || 0)), + e && !e.dashstyle) + ) + for ( + h = { 'stroke-width': h }, + e.animate( + h, + c(b.chart.options.chart.animation, f[a] && f[a].animation), + ); + b['zone-graph-' + d]; + + ) + b['zone-graph-' + d].attr(h), (d += 1); + }, + setVisible: function(a, b) { + var c = this, + d = c.chart, + e = c.legendItem, + f, + h = d.options.chart.ignoreHiddenSeries, + k = c.visible; + f = (c.visible = a = c.options.visible = c.userOptions.visible = + void 0 === a ? !k : a) + ? 'show' + : 'hide'; + r( + ['group', 'dataLabelsGroup', 'markerGroup', 'tracker', 'tt'], + function(a) { + if (c[a]) c[a][f](); + }, + ); + if (d.hoverSeries === c || (d.hoverPoint && d.hoverPoint.series) === c) + c.onMouseOut(); + e && d.legend.colorizeItem(c, a); + c.isDirty = !0; + c.options.stacking && + r(d.series, function(a) { + a.options.stacking && a.visible && (a.isDirty = !0); + }); + r(c.linkedSeries, function(b) { + b.setVisible(a, !1); + }); + h && (d.isDirtyBox = !0); + !1 !== b && d.redraw(); + w(c, f); + }, + show: function() { + this.setVisible(!0); + }, + hide: function() { + this.setVisible(!1); + }, + select: function(a) { + this.selected = a = void 0 === a ? !this.selected : a; + this.checkbox && (this.checkbox.checked = a); + w(this, a ? 'select' : 'unselect'); + }, + drawTracker: I.drawTrackerGraph, + }); + })(M); + (function(a) { + var E = a.Chart, + D = a.each, + H = a.inArray, + p = a.isArray, + f = a.isObject, + l = a.pick, + r = a.splat; + E.prototype.setResponsive = function(f) { + var l = this.options.responsive, + n = [], + e = this.currentResponsive; + l && + l.rules && + D( + l.rules, + function(e) { + void 0 === e._id && (e._id = a.uniqueKey()); + this.matchResponsiveRule(e, n, f); + }, + this, + ); + var h = a.merge.apply( + 0, + a.map(n, function(e) { + return a.find(l.rules, function(a) { + return a._id === e; + }).chartOptions; + }), + ), + n = n.toString() || void 0; + n !== (e && e.ruleIds) && + (e && this.update(e.undoOptions, f), + n + ? ((this.currentResponsive = { + ruleIds: n, + mergedOptions: h, + undoOptions: this.currentOptions(h), + }), + this.update(h, f)) + : (this.currentResponsive = void 0)); + }; + E.prototype.matchResponsiveRule = function(a, f) { + var n = a.condition; + ( + n.callback || + function() { + return ( + this.chartWidth <= l(n.maxWidth, Number.MAX_VALUE) && + this.chartHeight <= l(n.maxHeight, Number.MAX_VALUE) && + this.chartWidth >= l(n.minWidth, 0) && + this.chartHeight >= l(n.minHeight, 0) + ); + } + ).call(this) && f.push(a._id); + }; + E.prototype.currentOptions = function(l) { + function n(e, h, l, d) { + var c; + a.objectEach(e, function(a, e) { + if (!d && -1 < H(e, ['series', 'xAxis', 'yAxis'])) + for (a = r(a), l[e] = [], c = 0; c < a.length; c++) + h[e][c] && ((l[e][c] = {}), n(a[c], h[e][c], l[e][c], d + 1)); + else + f(a) + ? ((l[e] = p(a) ? [] : {}), n(a, h[e] || {}, l[e], d + 1)) + : (l[e] = h[e] || null); + }); + } + var u = {}; + n(l, this.options, u, 0); + return u; + }; + })(M); + return M; +}); From 4218688d8e1c197690a2b629cb68d71d1399d8c0 Mon Sep 17 00:00:00 2001 From: Brenda Wallace Date: Fri, 4 Jan 2019 18:14:36 +1300 Subject: [PATCH 3/5] Revert "Auto corrected by following Format Javascript Code" This reverts commit f83a2b639730d985dc8fb38dd0caa6646404bee7. --- app/assets/javascripts/highcharts.js | 11651 +------------------------ 1 file changed, 382 insertions(+), 11269 deletions(-) diff --git a/app/assets/javascripts/highcharts.js b/app/assets/javascripts/highcharts.js index c7136bafe..9554ef58b 100644 --- a/app/assets/javascripts/highcharts.js +++ b/app/assets/javascripts/highcharts.js @@ -5,11272 +5,385 @@ License: www.highcharts.com/license */ -(function(S, M) { - 'object' === typeof module && module.exports - ? (module.exports = S.document ? M(S) : M) - : (S.Highcharts = M(S)); -})('undefined' !== typeof window ? window : this, function(S) { - var M = (function() { - var a = 'undefined' === typeof S ? window : S, - E = a.document, - D = (a.navigator && a.navigator.userAgent) || '', - H = - E && - E.createElementNS && - !!E.createElementNS('http://www.w3.org/2000/svg', 'svg').createSVGRect, - p = /(edge|msie|trident)/i.test(D) && !a.opera, - f = /Firefox/.test(D), - l = f && 4 > parseInt(D.split('Firefox/')[1], 10); - return a.Highcharts - ? a.Highcharts.error(16, !0) - : { - product: 'Highcharts', - version: '6.0.4', - deg2rad: (2 * Math.PI) / 360, - doc: E, - hasBidiBug: l, - hasTouch: E && void 0 !== E.documentElement.ontouchstart, - isMS: p, - isWebKit: /AppleWebKit/.test(D), - isFirefox: f, - isTouchDevice: /(Mobile|Android|Windows Phone)/.test(D), - SVG_NS: 'http://www.w3.org/2000/svg', - chartCount: 0, - seriesTypes: {}, - symbolSizes: {}, - svg: H, - win: a, - marginNames: ['plotTop', 'marginRight', 'marginBottom', 'plotLeft'], - noop: function() {}, - charts: [], - }; - })(); - (function(a) { - a.timers = []; - var E = a.charts, - D = a.doc, - H = a.win; - a.error = function(p, f) { - p = a.isNumber(p) - ? 'Highcharts error #' + p + ': www.highcharts.com/errors/' + p - : p; - if (f) throw Error(p); - H.console && console.log(p); - }; - a.Fx = function(a, f, l) { - this.options = f; - this.elem = a; - this.prop = l; - }; - a.Fx.prototype = { - dSetter: function() { - var a = this.paths[0], - f = this.paths[1], - l = [], - r = this.now, - n = a.length, - w; - if (1 === r) l = this.toD; - else if (n === f.length && 1 > r) - for (; n--; ) - (w = parseFloat(a[n])), - (l[n] = isNaN(w) ? f[n] : r * parseFloat(f[n] - w) + w); - else l = f; - this.elem.attr('d', l, null, !0); - }, - update: function() { - var a = this.elem, - f = this.prop, - l = this.now, - r = this.options.step; - if (this[f + 'Setter']) this[f + 'Setter'](); - else - a.attr - ? a.element && a.attr(f, l, null, !0) - : (a.style[f] = l + this.unit); - r && r.call(a, l, this); - }, - run: function(p, f, l) { - var r = this, - n = r.options, - w = function(a) { - return w.stopped ? !1 : r.step(a); - }, - u = - H.requestAnimationFrame || - function(a) { - setTimeout(a, 13); - }, - e = function() { - for (var h = 0; h < a.timers.length; h++) - a.timers[h]() || a.timers.splice(h--, 1); - a.timers.length && u(e); - }; - p === f - ? (delete n.curAnim[this.prop], - n.complete && - 0 === a.keys(n.curAnim).length && - n.complete.call(this.elem)) - : ((this.startTime = +new Date()), - (this.start = p), - (this.end = f), - (this.unit = l), - (this.now = this.start), - (this.pos = 0), - (w.elem = this.elem), - (w.prop = this.prop), - w() && 1 === a.timers.push(w) && u(e)); - }, - step: function(p) { - var f = +new Date(), - l, - r = this.options, - n = this.elem, - w = r.complete, - u = r.duration, - e = r.curAnim; - n.attr && !n.element - ? (p = !1) - : p || f >= u + this.startTime - ? ((this.now = this.end), - (this.pos = 1), - this.update(), - (l = e[this.prop] = !0), - a.objectEach(e, function(a) { - !0 !== a && (l = !1); - }), - l && w && w.call(n), - (p = !1)) - : ((this.pos = r.easing((f - this.startTime) / u)), - (this.now = this.start + (this.end - this.start) * this.pos), - this.update(), - (p = !0)); - return p; - }, - initPath: function(p, f, l) { - function r(a) { - var b, c; - for (k = a.length; k--; ) - (b = 'M' === a[k] || 'L' === a[k]), - (c = /[a-zA-Z]/.test(a[k + 3])), - b && - c && - a.splice(k + 1, 0, a[k + 1], a[k + 2], a[k + 1], a[k + 2]); - } - function n(a, b) { - for (; a.length < c; ) { - a[0] = b[c - a.length]; - var e = a.slice(0, d); - [].splice.apply(a, [0, 0].concat(e)); - z && - ((e = a.slice(a.length - d)), - [].splice.apply(a, [a.length, 0].concat(e)), - k--); - } - a[0] = 'M'; - } - function w(a, k) { - for (var e = (c - a.length) / d; 0 < e && e--; ) - (b = a.slice().splice(a.length / B - d, d * B)), - (b[0] = k[c - d - e * d]), - m && ((b[d - 6] = b[d - 2]), (b[d - 5] = b[d - 1])), - [].splice.apply(a, [a.length / B, 0].concat(b)), - z && e--; - } - f = f || ''; - var u, - e = p.startX, - h = p.endX, - m = -1 < f.indexOf('C'), - d = m ? 7 : 3, - c, - b, - k; - f = f.split(' '); - l = l.slice(); - var z = p.isArea, - B = z ? 2 : 1, - I; - m && (r(f), r(l)); - if (e && h) { - for (k = 0; k < e.length; k++) - if (e[k] === h[0]) { - u = k; - break; - } else if (e[0] === h[h.length - e.length + k]) { - u = k; - I = !0; - break; - } - void 0 === u && (f = []); - } - f.length && - a.isNumber(u) && - ((c = l.length + u * B * d), - I ? (n(f, l), w(l, f)) : (n(l, f), w(f, l))); - return [f, l]; - }, - }; - a.Fx.prototype.fillSetter = a.Fx.prototype.strokeSetter = function() { - this.elem.attr( - this.prop, - a.color(this.start).tweenTo(a.color(this.end), this.pos), - null, - !0, - ); - }; - a.extend = function(a, f) { - var l; - a || (a = {}); - for (l in f) a[l] = f[l]; - return a; - }; - a.merge = function() { - var p, - f = arguments, - l, - r = {}, - n = function(l, p) { - 'object' !== typeof l && (l = {}); - a.objectEach(p, function(e, h) { - !a.isObject(e, !0) || a.isClass(e) || a.isDOMElement(e) - ? (l[h] = p[h]) - : (l[h] = n(l[h] || {}, e)); - }); - return l; - }; - !0 === f[0] && ((r = f[1]), (f = Array.prototype.slice.call(f, 2))); - l = f.length; - for (p = 0; p < l; p++) r = n(r, f[p]); - return r; - }; - a.pInt = function(a, f) { - return parseInt(a, f || 10); - }; - a.isString = function(a) { - return 'string' === typeof a; - }; - a.isArray = function(a) { - a = Object.prototype.toString.call(a); - return '[object Array]' === a || '[object Array Iterator]' === a; - }; - a.isObject = function(p, f) { - return !!p && 'object' === typeof p && (!f || !a.isArray(p)); - }; - a.isDOMElement = function(p) { - return a.isObject(p) && 'number' === typeof p.nodeType; - }; - a.isClass = function(p) { - var f = p && p.constructor; - return !( - !a.isObject(p, !0) || - a.isDOMElement(p) || - !f || - !f.name || - 'Object' === f.name - ); - }; - a.isNumber = function(a) { - return ( - 'number' === typeof a && !isNaN(a) && Infinity > a && -Infinity < a - ); - }; - a.erase = function(a, f) { - for (var l = a.length; l--; ) - if (a[l] === f) { - a.splice(l, 1); - break; - } - }; - a.defined = function(a) { - return void 0 !== a && null !== a; - }; - a.attr = function(p, f, l) { - var r; - a.isString(f) - ? a.defined(l) - ? p.setAttribute(f, l) - : p && p.getAttribute && (r = p.getAttribute(f)) - : a.defined(f) && - a.isObject(f) && - a.objectEach(f, function(a, l) { - p.setAttribute(l, a); - }); - return r; - }; - a.splat = function(p) { - return a.isArray(p) ? p : [p]; - }; - a.syncTimeout = function(a, f, l) { - if (f) return setTimeout(a, f, l); - a.call(0, l); - }; - a.pick = function() { - var a = arguments, - f, - l, - r = a.length; - for (f = 0; f < r; f++) - if (((l = a[f]), void 0 !== l && null !== l)) return l; - }; - a.css = function(p, f) { - a.isMS && - !a.svg && - f && - void 0 !== f.opacity && - (f.filter = 'alpha(opacity\x3d' + 100 * f.opacity + ')'); - a.extend(p.style, f); - }; - a.createElement = function(p, f, l, r, n) { - p = D.createElement(p); - var w = a.css; - f && a.extend(p, f); - n && w(p, { padding: 0, border: 'none', margin: 0 }); - l && w(p, l); - r && r.appendChild(p); - return p; - }; - a.extendClass = function(p, f) { - var l = function() {}; - l.prototype = new p(); - a.extend(l.prototype, f); - return l; - }; - a.pad = function(a, f, l) { - return Array((f || 2) + 1 - String(a).length).join(l || 0) + a; - }; - a.relativeLength = function(a, f, l) { - return /%$/.test(a) - ? (f * parseFloat(a)) / 100 + (l || 0) - : parseFloat(a); - }; - a.wrap = function(a, f, l) { - var p = a[f]; - a[f] = function() { - var a = Array.prototype.slice.call(arguments), - f = arguments, - u = this; - u.proceed = function() { - p.apply(u, arguments.length ? arguments : f); - }; - a.unshift(p); - a = l.apply(this, a); - u.proceed = null; - return a; - }; - }; - a.getTZOffset = function(p) { - var f = a.Date; - return ( - 6e4 * - ((f.hcGetTimezoneOffset && f.hcGetTimezoneOffset(p)) || - f.hcTimezoneOffset || - 0) - ); - }; - a.dateFormat = function(p, f, l) { - if (!a.defined(f) || isNaN(f)) - return a.defaultOptions.lang.invalidDate || ''; - p = a.pick(p, '%Y-%m-%d %H:%M:%S'); - var r = a.Date, - n = new r(f - a.getTZOffset(f)), - w = n[r.hcGetHours](), - u = n[r.hcGetDay](), - e = n[r.hcGetDate](), - h = n[r.hcGetMonth](), - m = n[r.hcGetFullYear](), - d = a.defaultOptions.lang, - c = d.weekdays, - b = d.shortWeekdays, - k = a.pad, - r = a.extend( - { - a: b ? b[u] : c[u].substr(0, 3), - A: c[u], - d: k(e), - e: k(e, 2, ' '), - w: u, - b: d.shortMonths[h], - B: d.months[h], - m: k(h + 1), - y: m.toString().substr(2, 2), - Y: m, - H: k(w), - k: w, - I: k(w % 12 || 12), - l: w % 12 || 12, - M: k(n[r.hcGetMinutes]()), - p: 12 > w ? 'AM' : 'PM', - P: 12 > w ? 'am' : 'pm', - S: k(n.getSeconds()), - L: k(Math.round(f % 1e3), 3), - }, - a.dateFormats, - ); - a.objectEach(r, function(a, b) { - for (; -1 !== p.indexOf('%' + b); ) - p = p.replace('%' + b, 'function' === typeof a ? a(f) : a); - }); - return l ? p.substr(0, 1).toUpperCase() + p.substr(1) : p; - }; - a.formatSingle = function(p, f) { - var l = /\.([0-9])/, - r = a.defaultOptions.lang; - /f$/.test(p) - ? ((l = (l = p.match(l)) ? l[1] : -1), - null !== f && - (f = a.numberFormat( - f, - l, - r.decimalPoint, - -1 < p.indexOf(',') ? r.thousandsSep : '', - ))) - : (f = a.dateFormat(p, f)); - return f; - }; - a.format = function(p, f) { - for (var l = '{', r = !1, n, w, u, e, h = [], m; p; ) { - l = p.indexOf(l); - if (-1 === l) break; - n = p.slice(0, l); - if (r) { - n = n.split(':'); - w = n.shift().split('.'); - e = w.length; - m = f; - for (u = 0; u < e; u++) m && (m = m[w[u]]); - n.length && (m = a.formatSingle(n.join(':'), m)); - h.push(m); - } else h.push(n); - p = p.slice(l + 1); - l = (r = !r) ? '}' : '{'; - } - h.push(p); - return h.join(''); - }; - a.getMagnitude = function(a) { - return Math.pow(10, Math.floor(Math.log(a) / Math.LN10)); - }; - a.normalizeTickInterval = function(p, f, l, r, n) { - var w, - u = p; - l = a.pick(l, 1); - w = p / l; - f || - ((f = n - ? [1, 1.2, 1.5, 2, 2.5, 3, 4, 5, 6, 8, 10] - : [1, 2, 2.5, 5, 10]), - !1 === r && - (1 === l - ? (f = a.grep(f, function(a) { - return 0 === a % 1; - })) - : 0.1 >= l && (f = [1 / l]))); - for ( - r = 0; - r < f.length && - !((u = f[r]), - (n && u * l >= p) || (!n && w <= (f[r] + (f[r + 1] || f[r])) / 2)); - r++ - ); - return (u = a.correctFloat( - u * l, - -Math.round(Math.log(0.001) / Math.LN10), - )); - }; - a.stableSort = function(a, f) { - var l = a.length, - p, - n; - for (n = 0; n < l; n++) a[n].safeI = n; - a.sort(function(a, n) { - p = f(a, n); - return 0 === p ? a.safeI - n.safeI : p; - }); - for (n = 0; n < l; n++) delete a[n].safeI; - }; - a.arrayMin = function(a) { - for (var f = a.length, l = a[0]; f--; ) a[f] < l && (l = a[f]); - return l; - }; - a.arrayMax = function(a) { - for (var f = a.length, l = a[0]; f--; ) a[f] > l && (l = a[f]); - return l; - }; - a.destroyObjectProperties = function(p, f) { - a.objectEach(p, function(a, r) { - a && a !== f && a.destroy && a.destroy(); - delete p[r]; - }); - }; - a.discardElement = function(p) { - var f = a.garbageBin; - f || (f = a.createElement('div')); - p && f.appendChild(p); - f.innerHTML = ''; - }; - a.correctFloat = function(a, f) { - return parseFloat(a.toPrecision(f || 14)); - }; - a.setAnimation = function(p, f) { - f.renderer.globalAnimation = a.pick(p, f.options.chart.animation, !0); - }; - a.animObject = function(p) { - return a.isObject(p) ? a.merge(p) : { duration: p ? 500 : 0 }; - }; - a.timeUnits = { - millisecond: 1, - second: 1e3, - minute: 6e4, - hour: 36e5, - day: 864e5, - week: 6048e5, - month: 24192e5, - year: 314496e5, - }; - a.numberFormat = function(p, f, l, r) { - p = +p || 0; - f = +f; - var n = a.defaultOptions.lang, - w = (p.toString().split('.')[1] || '').split('e')[0].length, - u, - e, - h = p.toString().split('e'); - -1 === f - ? (f = Math.min(w, 20)) - : a.isNumber(f) - ? f && - h[1] && - 0 > h[1] && - ((u = f + +h[1]), - 0 <= u - ? ((h[0] = (+h[0]).toExponential(u).split('e')[0]), (f = u)) - : ((h[0] = h[0].split('.')[0] || 0), - (p = 20 > f ? (h[0] * Math.pow(10, h[1])).toFixed(f) : 0), - (h[1] = 0))) - : (f = 2); - e = ( - Math.abs(h[1] ? h[0] : p) + Math.pow(10, -Math.max(f, w) - 1) - ).toFixed(f); - w = String(a.pInt(e)); - u = 3 < w.length ? w.length % 3 : 0; - l = a.pick(l, n.decimalPoint); - r = a.pick(r, n.thousandsSep); - p = (0 > p ? '-' : '') + (u ? w.substr(0, u) + r : ''); - p += w.substr(u).replace(/(\d{3})(?=\d)/g, '$1' + r); - f && (p += l + e.slice(-f)); - h[1] && 0 !== +p && (p += 'e' + h[1]); - return p; - }; - Math.easeInOutSine = function(a) { - return -0.5 * (Math.cos(Math.PI * a) - 1); - }; - a.getStyle = function(p, f, l) { - if ('width' === f) - return ( - Math.min(p.offsetWidth, p.scrollWidth) - - a.getStyle(p, 'padding-left') - - a.getStyle(p, 'padding-right') - ); - if ('height' === f) - return ( - Math.min(p.offsetHeight, p.scrollHeight) - - a.getStyle(p, 'padding-top') - - a.getStyle(p, 'padding-bottom') - ); - H.getComputedStyle || a.error(27, !0); - if ((p = H.getComputedStyle(p, void 0))) - (p = p.getPropertyValue(f)), - a.pick(l, 'opacity' !== f) && (p = a.pInt(p)); - return p; - }; - a.inArray = function(p, f) { - return (a.indexOfPolyfill || Array.prototype.indexOf).call(f, p); - }; - a.grep = function(p, f) { - return (a.filterPolyfill || Array.prototype.filter).call(p, f); - }; - a.find = Array.prototype.find - ? function(a, f) { - return a.find(f); - } - : function(a, f) { - var l, - r = a.length; - for (l = 0; l < r; l++) if (f(a[l], l)) return a[l]; - }; - a.map = function(a, f) { - for (var l = [], r = 0, n = a.length; r < n; r++) - l[r] = f.call(a[r], a[r], r, a); - return l; - }; - a.keys = function(p) { - return (a.keysPolyfill || Object.keys).call(void 0, p); - }; - a.reduce = function(p, f, l) { - return (a.reducePolyfill || Array.prototype.reduce).call(p, f, l); - }; - a.offset = function(a) { - var f = D.documentElement; - a = a.parentElement ? a.getBoundingClientRect() : { top: 0, left: 0 }; - return { - top: a.top + (H.pageYOffset || f.scrollTop) - (f.clientTop || 0), - left: a.left + (H.pageXOffset || f.scrollLeft) - (f.clientLeft || 0), - }; - }; - a.stop = function(p, f) { - for (var l = a.timers.length; l--; ) - a.timers[l].elem !== p || - (f && f !== a.timers[l].prop) || - (a.timers[l].stopped = !0); - }; - a.each = function(p, f, l) { - return (a.forEachPolyfill || Array.prototype.forEach).call(p, f, l); - }; - a.objectEach = function(a, f, l) { - for (var r in a) a.hasOwnProperty(r) && f.call(l, a[r], r, a); - }; - a.addEvent = function(p, f, l) { - var r, - n, - w = p.addEventListener || a.addEventListenerPolyfill; - p.hcEvents && - !Object.prototype.hasOwnProperty.call(p, 'hcEvents') && - ((n = {}), - a.objectEach(p.hcEvents, function(a, e) { - n[e] = a.slice(0); - }), - (p.hcEvents = n)); - r = p.hcEvents = p.hcEvents || {}; - w && w.call(p, f, l, !1); - r[f] || (r[f] = []); - r[f].push(l); - return function() { - a.removeEvent(p, f, l); - }; - }; - a.removeEvent = function(p, f, l) { - function r(e, m) { - var d = p.removeEventListener || a.removeEventListenerPolyfill; - d && d.call(p, e, m, !1); - } - function n() { - var e, m; - p.nodeName && - (f ? ((e = {}), (e[f] = !0)) : (e = u), - a.objectEach(e, function(a, c) { - if (u[c]) for (m = u[c].length; m--; ) r(c, u[c][m]); - })); - } - var w, - u = p.hcEvents, - e; - u && - (f - ? ((w = u[f] || []), - l - ? ((e = a.inArray(l, w)), - -1 < e && (w.splice(e, 1), (u[f] = w)), - r(f, l)) - : (n(), (u[f] = []))) - : (n(), (p.hcEvents = {}))); - }; - a.fireEvent = function(p, f, l, r) { - var n; - n = p.hcEvents; - var w, u; - l = l || {}; - if (D.createEvent && (p.dispatchEvent || p.fireEvent)) - (n = D.createEvent('Events')), - n.initEvent(f, !0, !0), - a.extend(n, l), - p.dispatchEvent ? p.dispatchEvent(n) : p.fireEvent(f, n); - else if (n) - for ( - n = n[f] || [], - w = n.length, - l.target || - a.extend(l, { - preventDefault: function() { - l.defaultPrevented = !0; - }, - target: p, - type: f, - }), - f = 0; - f < w; - f++ - ) - (u = n[f]) && !1 === u.call(p, l) && l.preventDefault(); - r && !l.defaultPrevented && r(l); - }; - a.animate = function(p, f, l) { - var r, - n = '', - w, - u, - e; - a.isObject(l) || - ((e = arguments), - (l = { duration: e[2], easing: e[3], complete: e[4] })); - a.isNumber(l.duration) || (l.duration = 400); - l.easing = - 'function' === typeof l.easing - ? l.easing - : Math[l.easing] || Math.easeInOutSine; - l.curAnim = a.merge(f); - a.objectEach(f, function(e, m) { - a.stop(p, m); - u = new a.Fx(p, l, m); - w = null; - 'd' === m - ? ((u.paths = u.initPath(p, p.d, f.d)), - (u.toD = f.d), - (r = 0), - (w = 1)) - : p.attr - ? (r = p.attr(m)) - : ((r = parseFloat(a.getStyle(p, m)) || 0), - 'opacity' !== m && (n = 'px')); - w || (w = e); - w && w.match && w.match('px') && (w = w.replace(/px/g, '')); - u.run(r, w, n); - }); - }; - a.seriesType = function(p, f, l, r, n) { - var w = a.getOptions(), - u = a.seriesTypes; - w.plotOptions[p] = a.merge(w.plotOptions[f], l); - u[p] = a.extendClass(u[f] || function() {}, r); - u[p].prototype.type = p; - n && (u[p].prototype.pointClass = a.extendClass(a.Point, n)); - return u[p]; - }; - a.uniqueKey = (function() { - var a = Math.random() - .toString(36) - .substring(2, 9), - f = 0; - return function() { - return 'highcharts-' + a + '-' + f++; - }; - })(); - H.jQuery && - (H.jQuery.fn.highcharts = function() { - var p = [].slice.call(arguments); - if (this[0]) - return p[0] - ? (new a[a.isString(p[0]) ? p.shift() : 'Chart']( - this[0], - p[0], - p[1], - ), - this) - : E[a.attr(this[0], 'data-highcharts-chart')]; - }); - })(M); - (function(a) { - var E = a.each, - D = a.isNumber, - H = a.map, - p = a.merge, - f = a.pInt; - a.Color = function(l) { - if (!(this instanceof a.Color)) return new a.Color(l); - this.init(l); - }; - a.Color.prototype = { - parsers: [ - { - regex: /rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]?(?:\.[0-9]+)?)\s*\)/, - parse: function(a) { - return [f(a[1]), f(a[2]), f(a[3]), parseFloat(a[4], 10)]; - }, - }, - { - regex: /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/, - parse: function(a) { - return [f(a[1]), f(a[2]), f(a[3]), 1]; - }, - }, - ], - names: { - none: 'rgba(255,255,255,0)', - white: '#ffffff', - black: '#000000', - }, - init: function(l) { - var f, n, w, u; - if ( - (this.input = l = - this.names[l && l.toLowerCase ? l.toLowerCase() : ''] || l) && - l.stops - ) - this.stops = H(l.stops, function(e) { - return new a.Color(e[1]); - }); - else if ( - (l && - l.charAt && - '#' === l.charAt() && - ((f = l.length), - (l = parseInt(l.substr(1), 16)), - 7 === f - ? (n = [(l & 16711680) >> 16, (l & 65280) >> 8, l & 255, 1]) - : 4 === f && - (n = [ - ((l & 3840) >> 4) | ((l & 3840) >> 8), - ((l & 240) >> 4) | (l & 240), - ((l & 15) << 4) | (l & 15), - 1, - ])), - !n) - ) - for (w = this.parsers.length; w-- && !n; ) - (u = this.parsers[w]), (f = u.regex.exec(l)) && (n = u.parse(f)); - this.rgba = n || []; - }, - get: function(a) { - var f = this.input, - n = this.rgba, - l; - this.stops - ? ((l = p(f)), - (l.stops = [].concat(l.stops)), - E(this.stops, function(n, e) { - l.stops[e] = [l.stops[e][0], n.get(a)]; - })) - : (l = - n && D(n[0]) - ? 'rgb' === a || (!a && 1 === n[3]) - ? 'rgb(' + n[0] + ',' + n[1] + ',' + n[2] + ')' - : 'a' === a - ? n[3] - : 'rgba(' + n.join(',') + ')' - : f); - return l; - }, - brighten: function(a) { - var l, - n = this.rgba; - if (this.stops) - E(this.stops, function(n) { - n.brighten(a); - }); - else if (D(a) && 0 !== a) - for (l = 0; 3 > l; l++) - (n[l] += f(255 * a)), - 0 > n[l] && (n[l] = 0), - 255 < n[l] && (n[l] = 255); - return this; - }, - setOpacity: function(a) { - this.rgba[3] = a; - return this; - }, - tweenTo: function(a, f) { - var n = this.rgba, - l = a.rgba; - l.length && n && n.length - ? ((a = 1 !== l[3] || 1 !== n[3]), - (f = - (a ? 'rgba(' : 'rgb(') + - Math.round(l[0] + (n[0] - l[0]) * (1 - f)) + - ',' + - Math.round(l[1] + (n[1] - l[1]) * (1 - f)) + - ',' + - Math.round(l[2] + (n[2] - l[2]) * (1 - f)) + - (a ? ',' + (l[3] + (n[3] - l[3]) * (1 - f)) : '') + - ')')) - : (f = a.input || 'none'); - return f; - }, - }; - a.color = function(l) { - return new a.Color(l); - }; - })(M); - (function(a) { - var E, - D, - H = a.addEvent, - p = a.animate, - f = a.attr, - l = a.charts, - r = a.color, - n = a.css, - w = a.createElement, - u = a.defined, - e = a.deg2rad, - h = a.destroyObjectProperties, - m = a.doc, - d = a.each, - c = a.extend, - b = a.erase, - k = a.grep, - z = a.hasTouch, - B = a.inArray, - I = a.isArray, - x = a.isFirefox, - K = a.isMS, - t = a.isObject, - C = a.isString, - N = a.isWebKit, - q = a.merge, - A = a.noop, - F = a.objectEach, - G = a.pick, - g = a.pInt, - v = a.removeEvent, - Q = a.stop, - L = a.svg, - P = a.SVG_NS, - J = a.symbolSizes, - R = a.win; - E = a.SVGElement = function() { - return this; - }; - c(E.prototype, { - opacity: 1, - SVG_NS: P, - textProps: 'direction fontSize fontWeight fontFamily fontStyle color lineHeight width textAlign textDecoration textOverflow textOutline'.split( - ' ', - ), - init: function(a, g) { - this.element = 'span' === g ? w(g) : m.createElementNS(this.SVG_NS, g); - this.renderer = a; - }, - animate: function(y, g, b) { - g = a.animObject(G(g, this.renderer.globalAnimation, !0)); - 0 !== g.duration - ? (b && (g.complete = b), p(this, y, g)) - : (this.attr(y, null, b), g.step && g.step.call(this)); - return this; - }, - colorGradient: function(y, g, b) { - var v = this.renderer, - c, - O, - k, - e, - z, - h, - m, - L, - A, - J, - t = [], - x; - y.radialGradient - ? (O = 'radialGradient') - : y.linearGradient && (O = 'linearGradient'); - O && - ((k = y[O]), - (z = v.gradients), - (m = y.stops), - (J = b.radialReference), - I(k) && - (y[O] = k = { - x1: k[0], - y1: k[1], - x2: k[2], - y2: k[3], - gradientUnits: 'userSpaceOnUse', - }), - 'radialGradient' === O && - J && - !u(k.gradientUnits) && - ((e = k), - (k = q(k, v.getRadialAttr(J, e), { - gradientUnits: 'userSpaceOnUse', - }))), - F(k, function(a, y) { - 'id' !== y && t.push(y, a); - }), - F(m, function(a) { - t.push(a); - }), - (t = t.join(',')), - z[t] - ? (J = z[t].attr('id')) - : ((k.id = J = a.uniqueKey()), - (z[t] = h = v - .createElement(O) - .attr(k) - .add(v.defs)), - (h.radAttr = e), - (h.stops = []), - d(m, function(y) { - 0 === y[1].indexOf('rgba') - ? ((c = a.color(y[1])), (L = c.get('rgb')), (A = c.get('a'))) - : ((L = y[1]), (A = 1)); - y = v - .createElement('stop') - .attr({ offset: y[0], 'stop-color': L, 'stop-opacity': A }) - .add(h); - h.stops.push(y); - })), - (x = 'url(' + v.url + '#' + J + ')'), - b.setAttribute(g, x), - (b.gradient = t), - (y.toString = function() { - return x; - })); - }, - applyTextOutline: function(y) { - var g = this.element, - v, - c, - k, - q, - e; - -1 !== y.indexOf('contrast') && - (y = y.replace(/contrast/g, this.renderer.getContrast(g.style.fill))); - y = y.split(' '); - c = y[y.length - 1]; - if ((k = y[0]) && 'none' !== k && a.svg) { - this.fakeTS = !0; - y = [].slice.call(g.getElementsByTagName('tspan')); - this.ySetter = this.xSetter; - k = k.replace(/(^[\d\.]+)(.*?)$/g, function(a, y, g) { - return 2 * y + g; - }); - for (e = y.length; e--; ) - (v = y[e]), - 'highcharts-text-outline' === v.getAttribute('class') && - b(y, g.removeChild(v)); - q = g.firstChild; - d(y, function(a, y) { - 0 === y && - (a.setAttribute('x', g.getAttribute('x')), - (y = g.getAttribute('y')), - a.setAttribute('y', y || 0), - null === y && g.setAttribute('y', 0)); - a = a.cloneNode(1); - f(a, { - class: 'highcharts-text-outline', - fill: c, - stroke: c, - 'stroke-width': k, - 'stroke-linejoin': 'round', - }); - g.insertBefore(a, q); - }); - } - }, - attr: function(a, g, b, v) { - var y, - c = this.element, - k, - d = this, - O, - q; - 'string' === typeof a && - void 0 !== g && - ((y = a), (a = {}), (a[y] = g)); - 'string' === typeof a - ? (d = (this[a + 'Getter'] || this._defaultGetter).call(this, a, c)) - : (F( - a, - function(y, g) { - O = !1; - v || Q(this, g); - this.symbolName && - /^(x|y|width|height|r|start|end|innerR|anchorX|anchorY)$/.test( - g, - ) && - (k || (this.symbolAttr(a), (k = !0)), (O = !0)); - !this.rotation || - ('x' !== g && 'y' !== g) || - (this.doTransform = !0); - O || - ((q = this[g + 'Setter'] || this._defaultSetter), - q.call(this, y, g, c), - this.shadows && - /^(width|height|visibility|x|y|d|transform|cx|cy|r)$/.test( - g, - ) && - this.updateShadows(g, y, q)); - }, - this, - ), - this.afterSetters()); - b && b(); - return d; - }, - afterSetters: function() { - this.doTransform && (this.updateTransform(), (this.doTransform = !1)); - }, - updateShadows: function(a, g, b) { - for (var y = this.shadows, v = y.length; v--; ) - b.call( - y[v], - 'height' === a - ? Math.max(g - (y[v].cutHeight || 0), 0) - : 'd' === a - ? this.d - : g, - a, - y[v], - ); - }, - addClass: function(a, g) { - var y = this.attr('class') || ''; - -1 === y.indexOf(a) && - (g || (a = (y + (y ? ' ' : '') + a).replace(' ', ' ')), - this.attr('class', a)); - return this; - }, - hasClass: function(a) { - return -1 !== B(a, (this.attr('class') || '').split(' ')); - }, - removeClass: function(a) { - return this.attr('class', (this.attr('class') || '').replace(a, '')); - }, - symbolAttr: function(a) { - var y = this; - d( - 'x y r start end width height innerR anchorX anchorY'.split(' '), - function(g) { - y[g] = G(a[g], y[g]); - }, - ); - y.attr({ - d: y.renderer.symbols[y.symbolName](y.x, y.y, y.width, y.height, y), - }); - }, - clip: function(a) { - return this.attr( - 'clip-path', - a ? 'url(' + this.renderer.url + '#' + a.id + ')' : 'none', - ); - }, - crisp: function(a, g) { - var y; - g = g || a.strokeWidth || 0; - y = (Math.round(g) % 2) / 2; - a.x = Math.floor(a.x || this.x || 0) + y; - a.y = Math.floor(a.y || this.y || 0) + y; - a.width = Math.floor((a.width || this.width || 0) - 2 * y); - a.height = Math.floor((a.height || this.height || 0) - 2 * y); - u(a.strokeWidth) && (a.strokeWidth = g); - return a; - }, - css: function(a) { - var y = this.styles, - b = {}, - v = this.element, - k, - d = '', - q, - e = !y, - z = ['textOutline', 'textOverflow', 'width']; - a && a.color && (a.fill = a.color); - y && - F(a, function(a, g) { - a !== y[g] && ((b[g] = a), (e = !0)); - }); - e && - (y && (a = c(y, b)), - (k = this.textWidth = - a && - a.width && - 'auto' !== a.width && - 'text' === v.nodeName.toLowerCase() && - g(a.width)), - (this.styles = a), - k && !L && this.renderer.forExport && delete a.width, - K && !L - ? n(this.element, a) - : ((q = function(a, y) { - return '-' + y.toLowerCase(); - }), - F(a, function(a, y) { - -1 === B(y, z) && - (d += y.replace(/([A-Z])/g, q) + ':' + a + ';'); - }), - d && f(v, 'style', d)), - this.added && - ('text' === this.element.nodeName && this.renderer.buildText(this), - a && a.textOutline && this.applyTextOutline(a.textOutline))); - return this; - }, - strokeWidth: function() { - return this['stroke-width'] || 0; - }, - on: function(a, g) { - var y = this, - b = y.element; - z && 'click' === a - ? ((b.ontouchstart = function(a) { - y.touchEventFired = Date.now(); - a.preventDefault(); - g.call(b, a); - }), - (b.onclick = function(a) { - (-1 === R.navigator.userAgent.indexOf('Android') || - 1100 < Date.now() - (y.touchEventFired || 0)) && - g.call(b, a); - })) - : (b['on' + a] = g); - return this; - }, - setRadialReference: function(a) { - var y = this.renderer.gradients[this.element.gradient]; - this.element.radialReference = a; - y && y.radAttr && y.animate(this.renderer.getRadialAttr(a, y.radAttr)); - return this; - }, - translate: function(a, g) { - return this.attr({ translateX: a, translateY: g }); - }, - invert: function(a) { - this.inverted = a; - this.updateTransform(); - return this; - }, - updateTransform: function() { - var a = this.translateX || 0, - g = this.translateY || 0, - b = this.scaleX, - v = this.scaleY, - c = this.inverted, - k = this.rotation, - d = this.matrix, - q = this.element; - c && ((a += this.width), (g += this.height)); - a = ['translate(' + a + ',' + g + ')']; - u(d) && a.push('matrix(' + d.join(',') + ')'); - c - ? a.push('rotate(90) scale(-1,1)') - : k && - a.push( - 'rotate(' + - k + - ' ' + - G(this.rotationOriginX, q.getAttribute('x'), 0) + - ' ' + - G(this.rotationOriginY, q.getAttribute('y') || 0) + - ')', - ); - (u(b) || u(v)) && a.push('scale(' + G(b, 1) + ' ' + G(v, 1) + ')'); - a.length && q.setAttribute('transform', a.join(' ')); - }, - toFront: function() { - var a = this.element; - a.parentNode.appendChild(a); - return this; - }, - align: function(a, g, v) { - var y, - c, - k, - d, - q = {}; - c = this.renderer; - k = c.alignedObjects; - var e, O; - if (a) { - if ( - ((this.alignOptions = a), (this.alignByTranslate = g), !v || C(v)) - ) - (this.alignTo = y = v || 'renderer'), - b(k, this), - k.push(this), - (v = null); - } else - (a = this.alignOptions), - (g = this.alignByTranslate), - (y = this.alignTo); - v = G(v, c[y], c); - y = a.align; - c = a.verticalAlign; - k = (v.x || 0) + (a.x || 0); - d = (v.y || 0) + (a.y || 0); - 'right' === y ? (e = 1) : 'center' === y && (e = 2); - e && (k += (v.width - (a.width || 0)) / e); - q[g ? 'translateX' : 'x'] = Math.round(k); - 'bottom' === c ? (O = 1) : 'middle' === c && (O = 2); - O && (d += (v.height - (a.height || 0)) / O); - q[g ? 'translateY' : 'y'] = Math.round(d); - this[this.placed ? 'animate' : 'attr'](q); - this.placed = !0; - this.alignAttr = q; - return this; - }, - getBBox: function(a, g) { - var y, - b = this.renderer, - v, - k = this.element, - q = this.styles, - O, - z = this.textStr, - h, - m = b.cache, - L = b.cacheKeys, - A; - g = G(g, this.rotation); - v = g * e; - O = q && q.fontSize; - u(z) && - ((A = z.toString()), - -1 === A.indexOf('\x3c') && (A = A.replace(/[0-9]/g, '0')), - (A += ['', g || 0, O, q && q.width, q && q.textOverflow].join())); - A && !a && (y = m[A]); - if (!y) { - if (k.namespaceURI === this.SVG_NS || b.forExport) { - try { - (h = - this.fakeTS && - function(a) { - d(k.querySelectorAll('.highcharts-text-outline'), function( - y, - ) { - y.style.display = a; - }); - }) && h('none'), - (y = k.getBBox - ? c({}, k.getBBox()) - : { width: k.offsetWidth, height: k.offsetHeight }), - h && h(''); - } catch (W) {} - if (!y || 0 > y.width) y = { width: 0, height: 0 }; - } else y = this.htmlGetBBox(); - b.isSVG && - ((a = y.width), - (b = y.height), - q && - '11px' === q.fontSize && - 17 === Math.round(b) && - (y.height = b = 14), - g && - ((y.width = - Math.abs(b * Math.sin(v)) + Math.abs(a * Math.cos(v))), - (y.height = - Math.abs(b * Math.cos(v)) + Math.abs(a * Math.sin(v))))); - if (A && 0 < y.height) { - for (; 250 < L.length; ) delete m[L.shift()]; - m[A] || L.push(A); - m[A] = y; - } - } - return y; - }, - show: function(a) { - return this.attr({ visibility: a ? 'inherit' : 'visible' }); - }, - hide: function() { - return this.attr({ visibility: 'hidden' }); - }, - fadeOut: function(a) { - var y = this; - y.animate( - { opacity: 0 }, - { - duration: a || 150, - complete: function() { - y.attr({ y: -9999 }); - }, - }, - ); - }, - add: function(a) { - var y = this.renderer, - g = this.element, - b; - a && (this.parentGroup = a); - this.parentInverted = a && a.inverted; - void 0 !== this.textStr && y.buildText(this); - this.added = !0; - if (!a || a.handleZ || this.zIndex) b = this.zIndexSetter(); - b || (a ? a.element : y.box).appendChild(g); - if (this.onAdd) this.onAdd(); - return this; - }, - safeRemoveChild: function(a) { - var y = a.parentNode; - y && y.removeChild(a); - }, - destroy: function() { - var a = this, - g = a.element || {}, - v = a.renderer.isSVG && 'SPAN' === g.nodeName && a.parentGroup, - c = g.ownerSVGElement; - g.onclick = g.onmouseout = g.onmouseover = g.onmousemove = g.point = null; - Q(a); - a.clipPath && - c && - (d(c.querySelectorAll('[clip-path],[CLIP-PATH]'), function(g) { - g - .getAttribute('clip-path') - .match(RegExp('[("]#' + a.clipPath.element.id + '[)"]')) && - g.removeAttribute('clip-path'); - }), - (a.clipPath = a.clipPath.destroy())); - if (a.stops) { - for (c = 0; c < a.stops.length; c++) - a.stops[c] = a.stops[c].destroy(); - a.stops = null; - } - a.safeRemoveChild(g); - for (a.destroyShadows(); v && v.div && 0 === v.div.childNodes.length; ) - (g = v.parentGroup), a.safeRemoveChild(v.div), delete v.div, (v = g); - a.alignTo && b(a.renderer.alignedObjects, a); - F(a, function(g, y) { - delete a[y]; - }); - return null; - }, - shadow: function(a, g, b) { - var y = [], - v, - c, - k = this.element, - d, - q, - e, - z; - if (!a) this.destroyShadows(); - else if (!this.shadows) { - q = G(a.width, 3); - e = (a.opacity || 0.15) / q; - z = this.parentInverted - ? '(-1,-1)' - : '(' + G(a.offsetX, 1) + ', ' + G(a.offsetY, 1) + ')'; - for (v = 1; v <= q; v++) - (c = k.cloneNode(0)), - (d = 2 * q + 1 - 2 * v), - f(c, { - isShadow: 'true', - stroke: a.color || '#000000', - 'stroke-opacity': e * v, - 'stroke-width': d, - transform: 'translate' + z, - fill: 'none', - }), - b && - (f(c, 'height', Math.max(f(c, 'height') - d, 0)), - (c.cutHeight = d)), - g - ? g.element.appendChild(c) - : k.parentNode && k.parentNode.insertBefore(c, k), - y.push(c); - this.shadows = y; - } - return this; - }, - destroyShadows: function() { - d( - this.shadows || [], - function(a) { - this.safeRemoveChild(a); - }, - this, - ); - this.shadows = void 0; - }, - xGetter: function(a) { - 'circle' === this.element.nodeName && - ('x' === a ? (a = 'cx') : 'y' === a && (a = 'cy')); - return this._defaultGetter(a); - }, - _defaultGetter: function(a) { - a = G( - this[a + 'Value'], - this[a], - this.element ? this.element.getAttribute(a) : null, - 0, - ); - /^[\-0-9\.]+$/.test(a) && (a = parseFloat(a)); - return a; - }, - dSetter: function(a, g, b) { - a && a.join && (a = a.join(' ')); - /(NaN| {2}|^$)/.test(a) && (a = 'M 0 0'); - this[g] !== a && (b.setAttribute(g, a), (this[g] = a)); - }, - dashstyleSetter: function(a) { - var b, - v = this['stroke-width']; - 'inherit' === v && (v = 1); - if ((a = a && a.toLowerCase())) { - a = a - .replace('shortdashdotdot', '3,1,1,1,1,1,') - .replace('shortdashdot', '3,1,1,1') - .replace('shortdot', '1,1,') - .replace('shortdash', '3,1,') - .replace('longdash', '8,3,') - .replace(/dot/g, '1,3,') - .replace('dash', '4,3,') - .replace(/,$/, '') - .split(','); - for (b = a.length; b--; ) a[b] = g(a[b]) * v; - a = a.join(',').replace(/NaN/g, 'none'); - this.element.setAttribute('stroke-dasharray', a); - } - }, - alignSetter: function(a) { - this.alignValue = a; - this.element.setAttribute( - 'text-anchor', - { left: 'start', center: 'middle', right: 'end' }[a], - ); - }, - opacitySetter: function(a, g, b) { - this[g] = a; - b.setAttribute(g, a); - }, - titleSetter: function(a) { - var g = this.element.getElementsByTagName('title')[0]; - g || - ((g = m.createElementNS(this.SVG_NS, 'title')), - this.element.appendChild(g)); - g.firstChild && g.removeChild(g.firstChild); - g.appendChild( - m.createTextNode(String(G(a), '').replace(/<[^>]*>/g, '')), - ); - }, - textSetter: function(a) { - a !== this.textStr && - (delete this.bBox, - (this.textStr = a), - this.added && this.renderer.buildText(this)); - }, - fillSetter: function(a, g, b) { - 'string' === typeof a - ? b.setAttribute(g, a) - : a && this.colorGradient(a, g, b); - }, - visibilitySetter: function(a, g, b) { - 'inherit' === a - ? b.removeAttribute(g) - : this[g] !== a && b.setAttribute(g, a); - this[g] = a; - }, - zIndexSetter: function(a, b) { - var v = this.renderer, - y = this.parentGroup, - c = (y || v).element || v.box, - k, - d = this.element, - q, - e, - v = c === v.box; - k = this.added; - var z; - u(a) && - ((d.zIndex = a), (a = +a), this[b] === a && (k = !1), (this[b] = a)); - if (k) { - (a = this.zIndex) && y && (y.handleZ = !0); - b = c.childNodes; - for (z = b.length - 1; 0 <= z && !q; z--) - if (((y = b[z]), (k = y.zIndex), (e = !u(k)), y !== d)) - if (0 > a && e && !v && !z) c.insertBefore(d, b[z]), (q = !0); - else if (g(k) <= a || (e && (!u(a) || 0 <= a))) - c.insertBefore(d, b[z + 1] || null), (q = !0); - q || (c.insertBefore(d, b[v ? 3 : 0] || null), (q = !0)); - } - return q; - }, - _defaultSetter: function(a, g, b) { - b.setAttribute(g, a); - }, - }); - E.prototype.yGetter = E.prototype.xGetter; - E.prototype.translateXSetter = E.prototype.translateYSetter = E.prototype.rotationSetter = E.prototype.verticalAlignSetter = E.prototype.rotationOriginXSetter = E.prototype.rotationOriginYSetter = E.prototype.scaleXSetter = E.prototype.scaleYSetter = E.prototype.matrixSetter = function( - a, - g, - ) { - this[g] = a; - this.doTransform = !0; - }; - E.prototype['stroke-widthSetter'] = E.prototype.strokeSetter = function( - a, - g, - b, - ) { - this[g] = a; - this.stroke && this['stroke-width'] - ? (E.prototype.fillSetter.call(this, this.stroke, 'stroke', b), - b.setAttribute('stroke-width', this['stroke-width']), - (this.hasStroke = !0)) - : 'stroke-width' === g && - 0 === a && - this.hasStroke && - (b.removeAttribute('stroke'), (this.hasStroke = !1)); - }; - D = a.SVGRenderer = function() { - this.init.apply(this, arguments); - }; - c(D.prototype, { - Element: E, - SVG_NS: P, - init: function(a, g, b, v, c, k) { - var y; - v = this.createElement('svg') - .attr({ version: '1.1', class: 'highcharts-root' }) - .css(this.getStyle(v)); - y = v.element; - a.appendChild(y); - f(a, 'dir', 'ltr'); - -1 === a.innerHTML.indexOf('xmlns') && f(y, 'xmlns', this.SVG_NS); - this.isSVG = !0; - this.box = y; - this.boxWrapper = v; - this.alignedObjects = []; - this.url = - (x || N) && m.getElementsByTagName('base').length - ? R.location.href - .replace(/#.*?$/, '') - .replace(/<[^>]*>/g, '') - .replace(/([\('\)])/g, '\\$1') - .replace(/ /g, '%20') - : ''; - this.createElement('desc') - .add() - .element.appendChild( - m.createTextNode('Created with Highcharts 6.0.4'), - ); - this.defs = this.createElement('defs').add(); - this.allowHTML = k; - this.forExport = c; - this.gradients = {}; - this.cache = {}; - this.cacheKeys = []; - this.imgCount = 0; - this.setSize(g, b, !1); - var d; - x && - a.getBoundingClientRect && - ((g = function() { - n(a, { left: 0, top: 0 }); - d = a.getBoundingClientRect(); - n(a, { - left: Math.ceil(d.left) - d.left + 'px', - top: Math.ceil(d.top) - d.top + 'px', - }); - }), - g(), - (this.unSubPixelFix = H(R, 'resize', g))); - }, - getStyle: function(a) { - return (this.style = c( - { - fontFamily: - '"Lucida Grande", "Lucida Sans Unicode", Arial, Helvetica, sans-serif', - fontSize: '12px', - }, - a, - )); - }, - setStyle: function(a) { - this.boxWrapper.css(this.getStyle(a)); - }, - isHidden: function() { - return !this.boxWrapper.getBBox().width; - }, - destroy: function() { - var a = this.defs; - this.box = null; - this.boxWrapper = this.boxWrapper.destroy(); - h(this.gradients || {}); - this.gradients = null; - a && (this.defs = a.destroy()); - this.unSubPixelFix && this.unSubPixelFix(); - return (this.alignedObjects = null); - }, - createElement: function(a) { - var g = new this.Element(); - g.init(this, a); - return g; - }, - draw: A, - getRadialAttr: function(a, g) { - return { - cx: a[0] - a[2] / 2 + g.cx * a[2], - cy: a[1] - a[2] / 2 + g.cy * a[2], - r: g.r * a[2], - }; - }, - getSpanWidth: function(a, g) { - var b = a.getBBox(!0).width; - !L && - this.forExport && - (b = this.measureSpanWidth(g.firstChild.data, a.styles)); - return b; - }, - applyEllipsis: function(a, g, b, v) { - var c = a.rotation, - y = b, - k, - d = 0, - q = b.length, - e = function(a) { - g.removeChild(g.firstChild); - a && g.appendChild(m.createTextNode(a)); - }, - z; - a.rotation = 0; - y = this.getSpanWidth(a, g); - if ((z = y > v)) { - for (; d <= q; ) - (k = Math.ceil((d + q) / 2)), - (y = b.substring(0, k) + '\u2026'), - e(y), - (y = this.getSpanWidth(a, g)), - d === q ? (d = q + 1) : y > v ? (q = k - 1) : (d = k); - 0 === q && e(''); - } - a.rotation = c; - return z; - }, - escapes: { - '\x26': '\x26amp;', - '\x3c': '\x26lt;', - '\x3e': '\x26gt;', - "'": '\x26#39;', - '"': '\x26quot;', - }, - buildText: function(a) { - var b = a.element, - v = this, - c = v.forExport, - y = G(a.textStr, '').toString(), - q = -1 !== y.indexOf('\x3c'), - e = b.childNodes, - z, - h, - A, - J, - t = f(b, 'x'), - x = a.styles, - B = a.textWidth, - l = x && x.lineHeight, - C = x && x.textOutline, - u = x && 'ellipsis' === x.textOverflow, - Q = x && 'nowrap' === x.whiteSpace, - w = x && x.fontSize, - R, - I, - r = e.length, - x = B && !a.added && this.box, - p = function(a) { - var c; - c = /(px|em)$/.test(a && a.style.fontSize) - ? a.style.fontSize - : w || v.style.fontSize || 12; - return l - ? g(l) - : v.fontMetrics(c, a.getAttribute('style') ? a : b).h; - }, - K = function(a) { - F(v.escapes, function(g, b) { - a = a.replace(new RegExp(g, 'g'), b); - }); - return a; - }; - R = [y, u, Q, l, C, w, B].join(); - if (R !== a.textCache) { - for (a.textCache = R; r--; ) b.removeChild(e[r]); - q || C || u || B || -1 !== y.indexOf(' ') - ? ((z = /<.*class="([^"]+)".*>/), - (h = /<.*style="([^"]+)".*>/), - (A = /<.*href="([^"]+)".*>/), - x && x.appendChild(b), - (y = q - ? y - .replace( - /<(b|strong)>/g, - '\x3cspan style\x3d"font-weight:bold"\x3e', - ) - .replace( - /<(i|em)>/g, - '\x3cspan style\x3d"font-style:italic"\x3e', - ) - .replace(//g, '\x3c/span\x3e') - .split(//g) - : [y]), - (y = k(y, function(a) { - return '' !== a; - })), - d(y, function(g, y) { - var k, - q = 0; - g = g - .replace(/^\s+|\s+$/g, '') - .replace(//g, '\x3c/span\x3e|||'); - k = g.split('|||'); - d(k, function(g) { - if ('' !== g || 1 === k.length) { - var d = {}, - e = m.createElementNS(v.SVG_NS, 'tspan'), - x, - F; - z.test(g) && ((x = g.match(z)[1]), f(e, 'class', x)); - h.test(g) && - ((F = g - .match(h)[1] - .replace(/(;| |^)color([ :])/, '$1fill$2')), - f(e, 'style', F)); - A.test(g) && - !c && - (f( - e, - 'onclick', - 'location.href\x3d"' + g.match(A)[1] + '"', - ), - f(e, 'class', 'highcharts-anchor'), - n(e, { cursor: 'pointer' })); - g = K(g.replace(/<[a-zA-Z\/](.|\n)*?>/g, '') || ' '); - if (' ' !== g) { - e.appendChild(m.createTextNode(g)); - q ? (d.dx = 0) : y && null !== t && (d.x = t); - f(e, d); - b.appendChild(e); - !q && - I && - (!L && c && n(e, { display: 'block' }), - f(e, 'dy', p(e))); - if (B) { - d = g.replace(/([^\^])-/g, '$1- ').split(' '); - x = 1 < k.length || y || (1 < d.length && !Q); - var O = [], - l, - C = p(e), - G = a.rotation; - for ( - u && (J = v.applyEllipsis(a, e, g, B)); - !u && x && (d.length || O.length); - - ) - (a.rotation = 0), - (l = v.getSpanWidth(a, e)), - (g = l > B), - void 0 === J && (J = g), - g && 1 !== d.length - ? (e.removeChild(e.firstChild), - O.unshift(d.pop())) - : ((d = O), - (O = []), - d.length && - !Q && - ((e = m.createElementNS(P, 'tspan')), - f(e, { dy: C, x: t }), - F && f(e, 'style', F), - b.appendChild(e)), - l > B && (B = l)), - d.length && - e.appendChild( - m.createTextNode( - d.join(' ').replace(/- /g, '-'), - ), - ); - a.rotation = G; - } - q++; - } - } - }); - I = I || b.childNodes.length; - }), - J && a.attr('title', a.textStr), - x && x.removeChild(b), - C && a.applyTextOutline && a.applyTextOutline(C)) - : b.appendChild(m.createTextNode(K(y))); - } - }, - getContrast: function(a) { - a = r(a).rgba; - return 510 < a[0] + a[1] + a[2] ? '#000000' : '#FFFFFF'; - }, - button: function(a, g, b, v, d, k, e, z, h) { - var y = this.label(a, g, b, h, null, null, null, null, 'button'), - m = 0; - y.attr(q({ padding: 8, r: 2 }, d)); - var A, L, J, t; - d = q( - { - fill: '#f7f7f7', - stroke: '#cccccc', - 'stroke-width': 1, - style: { - color: '#333333', - cursor: 'pointer', - fontWeight: 'normal', - }, - }, - d, - ); - A = d.style; - delete d.style; - k = q(d, { fill: '#e6e6e6' }, k); - L = k.style; - delete k.style; - e = q( - d, - { fill: '#e6ebf5', style: { color: '#000000', fontWeight: 'bold' } }, - e, - ); - J = e.style; - delete e.style; - z = q(d, { style: { color: '#cccccc' } }, z); - t = z.style; - delete z.style; - H(y.element, K ? 'mouseover' : 'mouseenter', function() { - 3 !== m && y.setState(1); - }); - H(y.element, K ? 'mouseout' : 'mouseleave', function() { - 3 !== m && y.setState(m); - }); - y.setState = function(a) { - 1 !== a && (y.state = m = a); - y.removeClass( - /highcharts-button-(normal|hover|pressed|disabled)/, - ).addClass( - 'highcharts-button-' + - ['normal', 'hover', 'pressed', 'disabled'][a || 0], - ); - y.attr([d, k, e, z][a || 0]).css([A, L, J, t][a || 0]); - }; - y.attr(d).css(c({ cursor: 'default' }, A)); - return y.on('click', function(a) { - 3 !== m && v.call(y, a); - }); - }, - crispLine: function(a, g) { - a[1] === a[4] && (a[1] = a[4] = Math.round(a[1]) - (g % 2) / 2); - a[2] === a[5] && (a[2] = a[5] = Math.round(a[2]) + (g % 2) / 2); - return a; - }, - path: function(a) { - var g = { fill: 'none' }; - I(a) ? (g.d = a) : t(a) && c(g, a); - return this.createElement('path').attr(g); - }, - circle: function(a, g, b) { - a = t(a) ? a : { x: a, y: g, r: b }; - g = this.createElement('circle'); - g.xSetter = g.ySetter = function(a, g, b) { - b.setAttribute('c' + g, a); - }; - return g.attr(a); - }, - arc: function(a, g, b, v, c, d) { - t(a) - ? ((v = a), (g = v.y), (b = v.r), (a = v.x)) - : (v = { innerR: v, start: c, end: d }); - a = this.symbol('arc', a, g, b, b, v); - a.r = b; - return a; - }, - rect: function(a, g, b, v, c, d) { - c = t(a) ? a.r : c; - var k = this.createElement('rect'); - a = t(a) - ? a - : void 0 === a - ? {} - : { x: a, y: g, width: Math.max(b, 0), height: Math.max(v, 0) }; - void 0 !== d && ((a.strokeWidth = d), (a = k.crisp(a))); - a.fill = 'none'; - c && (a.r = c); - k.rSetter = function(a, g, b) { - f(b, { rx: a, ry: a }); - }; - return k.attr(a); - }, - setSize: function(a, g, b) { - var v = this.alignedObjects, - c = v.length; - this.width = a; - this.height = g; - for ( - this.boxWrapper.animate( - { width: a, height: g }, - { - step: function() { - this.attr({ - viewBox: - '0 0 ' + this.attr('width') + ' ' + this.attr('height'), - }); - }, - duration: G(b, !0) ? void 0 : 0, - }, - ); - c--; - - ) - v[c].align(); - }, - g: function(a) { - var g = this.createElement('g'); - return a ? g.attr({ class: 'highcharts-' + a }) : g; - }, - image: function(a, g, b, v, d) { - var k = { preserveAspectRatio: 'none' }; - 1 < arguments.length && c(k, { x: g, y: b, width: v, height: d }); - k = this.createElement('image').attr(k); - k.element.setAttributeNS - ? k.element.setAttributeNS('http://www.w3.org/1999/xlink', 'href', a) - : k.element.setAttribute('hc-svg-href', a); - return k; - }, - symbol: function(a, g, b, v, k, q) { - var e = this, - y, - z = /^url\((.*?)\)$/, - h = z.test(a), - A = !h && (this.symbols[a] ? a : 'circle'), - L = A && this.symbols[A], - t = - u(g) && - L && - L.call(this.symbols, Math.round(g), Math.round(b), v, k, q), - x, - F; - L - ? ((y = this.path(t)), - y.attr('fill', 'none'), - c(y, { symbolName: A, x: g, y: b, width: v, height: k }), - q && c(y, q)) - : h && - ((x = a.match(z)[1]), - (y = this.image(x)), - (y.imgwidth = G(J[x] && J[x].width, q && q.width)), - (y.imgheight = G(J[x] && J[x].height, q && q.height)), - (F = function() { - y.attr({ width: y.width, height: y.height }); - }), - d(['width', 'height'], function(a) { - y[a + 'Setter'] = function(a, g) { - var b = {}, - v = this['img' + g], - c = 'width' === g ? 'translateX' : 'translateY'; - this[g] = a; - u(v) && - (this.element && this.element.setAttribute(g, v), - this.alignByTranslate || - ((b[c] = ((this[g] || 0) - v) / 2), this.attr(b))); - }; - }), - u(g) && y.attr({ x: g, y: b }), - (y.isImg = !0), - u(y.imgwidth) && u(y.imgheight) - ? F() - : (y.attr({ width: 0, height: 0 }), - w('img', { - onload: function() { - var a = l[e.chartIndex]; - 0 === this.width && - (n(this, { position: 'absolute', top: '-999em' }), - m.body.appendChild(this)); - J[x] = { width: this.width, height: this.height }; - y.imgwidth = this.width; - y.imgheight = this.height; - y.element && F(); - this.parentNode && this.parentNode.removeChild(this); - e.imgCount--; - if (!e.imgCount && a && a.onload) a.onload(); - }, - src: x, - }), - this.imgCount++)); - return y; - }, - symbols: { - circle: function(a, g, b, v) { - return this.arc(a + b / 2, g + v / 2, b / 2, v / 2, { - start: 0, - end: 2 * Math.PI, - open: !1, - }); - }, - square: function(a, g, b, v) { - return ['M', a, g, 'L', a + b, g, a + b, g + v, a, g + v, 'Z']; - }, - triangle: function(a, g, b, v) { - return ['M', a + b / 2, g, 'L', a + b, g + v, a, g + v, 'Z']; - }, - 'triangle-down': function(a, g, b, v) { - return ['M', a, g, 'L', a + b, g, a + b / 2, g + v, 'Z']; - }, - diamond: function(a, g, b, v) { - return [ - 'M', - a + b / 2, - g, - 'L', - a + b, - g + v / 2, - a + b / 2, - g + v, - a, - g + v / 2, - 'Z', - ]; - }, - arc: function(a, g, b, v, c) { - var k = c.start, - d = c.r || b, - q = c.r || v || b, - e = c.end - 0.001; - b = c.innerR; - v = G(c.open, 0.001 > Math.abs(c.end - c.start - 2 * Math.PI)); - var y = Math.cos(k), - z = Math.sin(k), - h = Math.cos(e), - e = Math.sin(e); - c = 0.001 > c.end - k - Math.PI ? 0 : 1; - d = [ - 'M', - a + d * y, - g + q * z, - 'A', - d, - q, - 0, - c, - 1, - a + d * h, - g + q * e, - ]; - u(b) && - d.push( - v ? 'M' : 'L', - a + b * h, - g + b * e, - 'A', - b, - b, - 0, - c, - 0, - a + b * y, - g + b * z, - ); - d.push(v ? '' : 'Z'); - return d; - }, - callout: function(a, g, b, v, c) { - var d = Math.min((c && c.r) || 0, b, v), - k = d + 6, - q = c && c.anchorX; - c = c && c.anchorY; - var e; - e = [ - 'M', - a + d, - g, - 'L', - a + b - d, - g, - 'C', - a + b, - g, - a + b, - g, - a + b, - g + d, - 'L', - a + b, - g + v - d, - 'C', - a + b, - g + v, - a + b, - g + v, - a + b - d, - g + v, - 'L', - a + d, - g + v, - 'C', - a, - g + v, - a, - g + v, - a, - g + v - d, - 'L', - a, - g + d, - 'C', - a, - g, - a, - g, - a + d, - g, - ]; - q && q > b - ? c > g + k && c < g + v - k - ? e.splice( - 13, - 3, - 'L', - a + b, - c - 6, - a + b + 6, - c, - a + b, - c + 6, - a + b, - g + v - d, - ) - : e.splice( - 13, - 3, - 'L', - a + b, - v / 2, - q, - c, - a + b, - v / 2, - a + b, - g + v - d, - ) - : q && 0 > q - ? c > g + k && c < g + v - k - ? e.splice(33, 3, 'L', a, c + 6, a - 6, c, a, c - 6, a, g + d) - : e.splice(33, 3, 'L', a, v / 2, q, c, a, v / 2, a, g + d) - : c && c > v && q > a + k && q < a + b - k - ? e.splice( - 23, - 3, - 'L', - q + 6, - g + v, - q, - g + v + 6, - q - 6, - g + v, - a + d, - g + v, - ) - : c && - 0 > c && - q > a + k && - q < a + b - k && - e.splice(3, 3, 'L', q - 6, g, q, g - 6, q + 6, g, b - d, g); - return e; - }, - }, - clipRect: function(g, b, v, c) { - var d = a.uniqueKey(), - k = this.createElement('clipPath') - .attr({ id: d }) - .add(this.defs); - g = this.rect(g, b, v, c, 0).add(k); - g.id = d; - g.clipPath = k; - g.count = 0; - return g; - }, - text: function(a, g, b, v) { - var c = {}; - if (v && (this.allowHTML || !this.forExport)) return this.html(a, g, b); - c.x = Math.round(g || 0); - b && (c.y = Math.round(b)); - if (a || 0 === a) c.text = a; - a = this.createElement('text').attr(c); - v || - (a.xSetter = function(a, g, b) { - var v = b.getElementsByTagName('tspan'), - c, - d = b.getAttribute(g), - k; - for (k = 0; k < v.length; k++) - (c = v[k]), c.getAttribute(g) === d && c.setAttribute(g, a); - b.setAttribute(g, a); - }); - return a; - }, - fontMetrics: function(a, b) { - a = - a || - (b && b.style && b.style.fontSize) || - (this.style && this.style.fontSize); - a = /px/.test(a) - ? g(a) - : /em/.test(a) - ? parseFloat(a) * (b ? this.fontMetrics(null, b.parentNode).f : 16) - : 12; - b = 24 > a ? a + 3 : Math.round(1.2 * a); - return { h: b, b: Math.round(0.8 * b), f: a }; - }, - rotCorr: function(a, g, b) { - var v = a; - g && b && (v = Math.max(v * Math.cos(g * e), 4)); - return { x: (-a / 3) * Math.sin(g * e), y: v }; - }, - label: function(g, b, k, e, z, h, m, A, L) { - var y = this, - J = y.g('button' !== L && 'label'), - t = (J.text = y.text('', 0, 0, m).attr({ zIndex: 1 })), - x, - F, - n = 0, - B = 3, - l = 0, - C, - f, - Q, - G, - w, - R = {}, - I, - P, - r = /^url\((.*?)\)$/.test(e), - p = r, - K, - O, - N, - T; - L && J.addClass('highcharts-' + L); - p = r; - K = function() { - return ((I || 0) % 2) / 2; - }; - O = function() { - var a = t.element.style, - g = {}; - F = - (void 0 === C || void 0 === f || w) && u(t.textStr) && t.getBBox(); - J.width = (C || F.width || 0) + 2 * B + l; - J.height = (f || F.height || 0) + 2 * B; - P = B + y.fontMetrics(a && a.fontSize, t).b; - p && - (x || - ((J.box = x = y.symbols[e] || r ? y.symbol(e) : y.rect()), - x.addClass( - ('button' === L ? '' : 'highcharts-label-box') + - (L ? ' highcharts-' + L + '-box' : ''), - ), - x.add(J), - (a = K()), - (g.x = a), - (g.y = (A ? -P : 0) + a)), - (g.width = Math.round(J.width)), - (g.height = Math.round(J.height)), - x.attr(c(g, R)), - (R = {})); - }; - N = function() { - var a = l + B, - g; - g = A ? 0 : P; - u(C) && - F && - ('center' === w || 'right' === w) && - (a += { center: 0.5, right: 1 }[w] * (C - F.width)); - if (a !== t.x || g !== t.y) - t.attr('x', a), void 0 !== g && t.attr('y', g); - t.x = a; - t.y = g; - }; - T = function(a, g) { - x ? x.attr(a, g) : (R[a] = g); - }; - J.onAdd = function() { - t.add(J); - J.attr({ text: g || 0 === g ? g : '', x: b, y: k }); - x && u(z) && J.attr({ anchorX: z, anchorY: h }); - }; - J.widthSetter = function(g) { - C = a.isNumber(g) ? g : null; - }; - J.heightSetter = function(a) { - f = a; - }; - J['text-alignSetter'] = function(a) { - w = a; - }; - J.paddingSetter = function(a) { - u(a) && a !== B && ((B = J.padding = a), N()); - }; - J.paddingLeftSetter = function(a) { - u(a) && a !== l && ((l = a), N()); - }; - J.alignSetter = function(a) { - a = { left: 0, center: 0.5, right: 1 }[a]; - a !== n && ((n = a), F && J.attr({ x: Q })); - }; - J.textSetter = function(a) { - void 0 !== a && t.textSetter(a); - O(); - N(); - }; - J['stroke-widthSetter'] = function(a, g) { - a && (p = !0); - I = this['stroke-width'] = a; - T(g, a); - }; - J.strokeSetter = J.fillSetter = J.rSetter = function(a, g) { - 'r' !== g && ('fill' === g && a && (p = !0), (J[g] = a)); - T(g, a); - }; - J.anchorXSetter = function(a, g) { - z = J.anchorX = a; - T(g, Math.round(a) - K() - Q); - }; - J.anchorYSetter = function(a, g) { - h = J.anchorY = a; - T(g, a - G); - }; - J.xSetter = function(a) { - J.x = a; - n && (a -= n * ((C || F.width) + 2 * B)); - Q = Math.round(a); - J.attr('translateX', Q); - }; - J.ySetter = function(a) { - G = J.y = Math.round(a); - J.attr('translateY', G); - }; - var U = J.css; - return c(J, { - css: function(a) { - if (a) { - var g = {}; - a = q(a); - d(J.textProps, function(b) { - void 0 !== a[b] && ((g[b] = a[b]), delete a[b]); - }); - t.css(g); - } - return U.call(J, a); - }, - getBBox: function() { - return { - width: F.width + 2 * B, - height: F.height + 2 * B, - x: F.x - B, - y: F.y - B, - }; - }, - shadow: function(a) { - a && (O(), x && x.shadow(a)); - return J; - }, - destroy: function() { - v(J.element, 'mouseenter'); - v(J.element, 'mouseleave'); - t && (t = t.destroy()); - x && (x = x.destroy()); - E.prototype.destroy.call(J); - J = y = O = N = T = null; - }, - }); - }, - }); - a.Renderer = D; - })(M); - (function(a) { - var E = a.attr, - D = a.createElement, - H = a.css, - p = a.defined, - f = a.each, - l = a.extend, - r = a.isFirefox, - n = a.isMS, - w = a.isWebKit, - u = a.pick, - e = a.pInt, - h = a.SVGRenderer, - m = a.win, - d = a.wrap; - l(a.SVGElement.prototype, { - htmlCss: function(a) { - var b = this.element; - if ((b = a && 'SPAN' === b.tagName && a.width)) - delete a.width, (this.textWidth = b), this.updateTransform(); - a && - 'ellipsis' === a.textOverflow && - ((a.whiteSpace = 'nowrap'), (a.overflow = 'hidden')); - this.styles = l(this.styles, a); - H(this.element, a); - return this; - }, - htmlGetBBox: function() { - var a = this.element; - return { - x: a.offsetLeft, - y: a.offsetTop, - width: a.offsetWidth, - height: a.offsetHeight, - }; - }, - htmlUpdateTransform: function() { - if (this.added) { - var a = this.renderer, - b = this.element, - d = this.translateX || 0, - z = this.translateY || 0, - h = this.x || 0, - m = this.y || 0, - x = this.textAlign || 'left', - n = { left: 0, center: 0.5, right: 1 }[x], - t = this.styles; - H(b, { marginLeft: d, marginTop: z }); - this.shadows && - f(this.shadows, function(a) { - H(a, { marginLeft: d + 1, marginTop: z + 1 }); - }); - this.inverted && - f(b.childNodes, function(c) { - a.invertChild(c, b); - }); - if ('SPAN' === b.tagName) { - var l = this.rotation, - u = e(this.textWidth), - q = t && t.whiteSpace, - A = [l, x, b.innerHTML, this.textWidth, this.textAlign].join(); - A !== this.cTT && - ((t = a.fontMetrics(b.style.fontSize).b), - p(l) && this.setSpanRotation(l, n, t), - H(b, { width: '', whiteSpace: q || 'nowrap' }), - b.offsetWidth > u && - /[ \-]/.test(b.textContent || b.innerText) && - H(b, { - width: u + 'px', - display: 'block', - whiteSpace: q || 'normal', - }), - this.getSpanCorrection(b.offsetWidth, t, n, l, x)); - H(b, { - left: h + (this.xCorr || 0) + 'px', - top: m + (this.yCorr || 0) + 'px', - }); - w && (t = b.offsetHeight); - this.cTT = A; - } - } else this.alignOnAdd = !0; - }, - setSpanRotation: function(a, b, d) { - var c = {}, - k = this.renderer.getTransformKey(); - c[k] = c.transform = 'rotate(' + a + 'deg)'; - c[k + (r ? 'Origin' : '-origin')] = c.transformOrigin = - 100 * b + '% ' + d + 'px'; - H(this.element, c); - }, - getSpanCorrection: function(a, b, d) { - this.xCorr = -a * d; - this.yCorr = -b; - }, - }); - l(h.prototype, { - getTransformKey: function() { - return n && !/Edge/.test(m.navigator.userAgent) - ? '-ms-transform' - : w - ? '-webkit-transform' - : r - ? 'MozTransform' - : m.opera - ? '-o-transform' - : ''; - }, - html: function(a, b, k) { - var c = this.createElement('span'), - e = c.element, - h = c.renderer, - m = h.isSVG, - w = function(a, b) { - f(['opacity', 'visibility'], function(c) { - d(a, c + 'Setter', function(a, c, d, k) { - a.call(this, c, d, k); - b[d] = c; - }); - }); - }; - c.textSetter = function(a) { - a !== e.innerHTML && delete this.bBox; - this.textStr = a; - e.innerHTML = u(a, ''); - c.htmlUpdateTransform(); - }; - m && w(c, c.element.style); - c.xSetter = c.ySetter = c.alignSetter = c.rotationSetter = function( - a, - b, - ) { - 'align' === b && (b = 'textAlign'); - c[b] = a; - c.htmlUpdateTransform(); - }; - c.attr({ text: a, x: Math.round(b), y: Math.round(k) }).css({ - fontFamily: this.style.fontFamily, - fontSize: this.style.fontSize, - position: 'absolute', - }); - e.style.whiteSpace = 'nowrap'; - c.css = c.htmlCss; - m && - (c.add = function(a) { - var b, - d = h.box.parentNode, - k = []; - if ((this.parentGroup = a)) { - if (((b = a.div), !b)) { - for (; a; ) k.push(a), (a = a.parentGroup); - f(k.reverse(), function(a) { - function e(g, b) { - a[b] = g; - n - ? (q[h.getTransformKey()] = - 'translate(' + - (a.x || a.translateX) + - 'px,' + - (a.y || a.translateY) + - 'px)') - : 'translateX' === b - ? (q.left = g + 'px') - : (q.top = g + 'px'); - a.doTransform = !0; - } - var q, - g = E(a.element, 'class'); - g && (g = { className: g }); - b = a.div = - a.div || - D( - 'div', - g, - { - position: 'absolute', - left: (a.translateX || 0) + 'px', - top: (a.translateY || 0) + 'px', - display: a.display, - opacity: a.opacity, - pointerEvents: a.styles && a.styles.pointerEvents, - }, - b || d, - ); - q = b.style; - l(a, { - classSetter: (function(a) { - return function(g) { - this.element.setAttribute('class', g); - a.className = g; - }; - })(b), - on: function() { - k[0].div && c.on.apply({ element: k[0].div }, arguments); - return a; - }, - translateXSetter: e, - translateYSetter: e, - }); - w(a, q); - }); - } - } else b = d; - b.appendChild(e); - c.added = !0; - c.alignOnAdd && c.htmlUpdateTransform(); - return c; - }); - return c; - }, - }); - })(M); - (function(a) { - function E() { - var n = a.defaultOptions.global, - l = r.moment; - if (n.timezone) { - if (l) - return function(a) { - return -l.tz(a, n.timezone).utcOffset(); - }; - a.error(25); - } - return n.useUTC && n.getTimezoneOffset; - } - function D() { - var n = a.defaultOptions.global, - f, - u = n.useUTC, - e = u ? 'getUTC' : 'get', - h = u ? 'setUTC' : 'set', - m = 'Minutes Hours Day Date Month FullYear'.split(' '), - d = m.concat(['Milliseconds', 'Seconds']); - a.Date = f = n.Date || r.Date; - f.hcTimezoneOffset = u && n.timezoneOffset; - f.hcGetTimezoneOffset = E(); - f.hcHasTimeZone = !(!f.hcTimezoneOffset && !f.hcGetTimezoneOffset); - f.hcMakeTime = function(a, b, d, e, h, m) { - var c; - u - ? ((c = f.UTC.apply(0, arguments)), (c += p(c))) - : (c = new f(a, b, l(d, 1), l(e, 0), l(h, 0), l(m, 0)).getTime()); - return c; - }; - for (n = 0; n < m.length; n++) f['hcGet' + m[n]] = e + m[n]; - for (n = 0; n < d.length; n++) f['hcSet' + d[n]] = h + d[n]; - } - var H = a.color, - p = a.getTZOffset, - f = a.merge, - l = a.pick, - r = a.win; - a.defaultOptions = { - colors: '#7cb5ec #434348 #90ed7d #f7a35c #8085e9 #f15c80 #e4d354 #2b908f #f45b5b #91e8e1'.split( - ' ', - ), - symbols: ['circle', 'diamond', 'square', 'triangle', 'triangle-down'], - lang: { - loading: 'Loading...', - months: 'January February March April May June July August September October November December'.split( - ' ', - ), - shortMonths: 'Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec'.split( - ' ', - ), - weekdays: 'Sunday Monday Tuesday Wednesday Thursday Friday Saturday'.split( - ' ', - ), - decimalPoint: '.', - numericSymbols: 'kMGTPE'.split(''), - resetZoom: 'Reset zoom', - resetZoomTitle: 'Reset zoom level 1:1', - thousandsSep: ' ', - }, - global: { useUTC: !0 }, - chart: { - borderRadius: 0, - defaultSeriesType: 'line', - ignoreHiddenSeries: !0, - spacing: [10, 10, 15, 10], - resetZoomButton: { - theme: { zIndex: 6 }, - position: { align: 'right', x: -10, y: 10 }, - }, - width: null, - height: null, - borderColor: '#335cad', - backgroundColor: '#ffffff', - plotBorderColor: '#cccccc', - }, - title: { - text: 'Chart title', - align: 'center', - margin: 15, - widthAdjust: -44, - }, - subtitle: { text: '', align: 'center', widthAdjust: -44 }, - plotOptions: {}, - labels: { style: { position: 'absolute', color: '#333333' } }, - legend: { - enabled: !0, - align: 'center', - layout: 'horizontal', - labelFormatter: function() { - return this.name; - }, - borderColor: '#999999', - borderRadius: 0, - navigation: { activeColor: '#003399', inactiveColor: '#cccccc' }, - itemStyle: { - color: '#333333', - fontSize: '12px', - fontWeight: 'bold', - textOverflow: 'ellipsis', - }, - itemHoverStyle: { color: '#000000' }, - itemHiddenStyle: { color: '#cccccc' }, - shadow: !1, - itemCheckboxStyle: { - position: 'absolute', - width: '13px', - height: '13px', - }, - squareSymbol: !0, - symbolPadding: 5, - verticalAlign: 'bottom', - x: 0, - y: 0, - title: { style: { fontWeight: 'bold' } }, - }, - loading: { - labelStyle: { fontWeight: 'bold', position: 'relative', top: '45%' }, - style: { - position: 'absolute', - backgroundColor: '#ffffff', - opacity: 0.5, - textAlign: 'center', - }, - }, - tooltip: { - enabled: !0, - animation: a.svg, - borderRadius: 3, - dateTimeLabelFormats: { - millisecond: '%A, %b %e, %H:%M:%S.%L', - second: '%A, %b %e, %H:%M:%S', - minute: '%A, %b %e, %H:%M', - hour: '%A, %b %e, %H:%M', - day: '%A, %b %e, %Y', - week: 'Week from %A, %b %e, %Y', - month: '%B %Y', - year: '%Y', - }, - footerFormat: '', - padding: 8, - snap: a.isTouchDevice ? 25 : 10, - backgroundColor: H('#f7f7f7') - .setOpacity(0.85) - .get(), - borderWidth: 1, - headerFormat: - '\x3cspan style\x3d"font-size: 10px"\x3e{point.key}\x3c/span\x3e\x3cbr/\x3e', - pointFormat: - '\x3cspan style\x3d"color:{point.color}"\x3e\u25cf\x3c/span\x3e {series.name}: \x3cb\x3e{point.y}\x3c/b\x3e\x3cbr/\x3e', - shadow: !0, - style: { - color: '#333333', - cursor: 'default', - fontSize: '12px', - pointerEvents: 'none', - whiteSpace: 'nowrap', - }, - }, - credits: { - enabled: !0, - href: 'http://www.highcharts.com', - position: { align: 'right', x: -10, verticalAlign: 'bottom', y: -5 }, - style: { cursor: 'pointer', color: '#999999', fontSize: '9px' }, - text: 'Highcharts.com', - }, - }; - a.setOptions = function(n) { - a.defaultOptions = f(!0, a.defaultOptions, n); - D(); - return a.defaultOptions; - }; - a.getOptions = function() { - return a.defaultOptions; - }; - a.defaultPlotOptions = a.defaultOptions.plotOptions; - D(); - })(M); - (function(a) { - var E = a.correctFloat, - D = a.defined, - H = a.destroyObjectProperties, - p = a.isNumber, - f = a.merge, - l = a.pick, - r = a.deg2rad; - a.Tick = function(a, l, f, e) { - this.axis = a; - this.pos = l; - this.type = f || ''; - this.isNewLabel = this.isNew = !0; - f || e || this.addLabel(); - }; - a.Tick.prototype = { - addLabel: function() { - var a = this.axis, - w = a.options, - u = a.chart, - e = a.categories, - h = a.names, - m = this.pos, - d = w.labels, - c = a.tickPositions, - b = m === c[0], - k = m === c[c.length - 1], - h = e ? l(e[m], h[m], m) : m, - e = this.label, - c = c.info, - z; - a.isDatetimeAxis && - c && - (z = w.dateTimeLabelFormats[c.higherRanks[m] || c.unitName]); - this.isFirst = b; - this.isLast = k; - w = a.labelFormatter.call({ - axis: a, - chart: u, - isFirst: b, - isLast: k, - dateTimeLabelFormat: z, - value: a.isLog ? E(a.lin2log(h)) : h, - pos: m, - }); - D(e) - ? e && e.attr({ text: w }) - : ((this.labelLength = - (this.label = e = - D(w) && d.enabled - ? u.renderer - .text(w, 0, 0, d.useHTML) - .css(f(d.style)) - .add(a.labelGroup) - : null) && e.getBBox().width), - (this.rotation = 0)); - }, - getLabelSize: function() { - return this.label - ? this.label.getBBox()[this.axis.horiz ? 'height' : 'width'] - : 0; - }, - handleOverflow: function(a) { - var f = this.axis, - n = f.options.labels, - e = a.x, - h = f.chart.chartWidth, - m = f.chart.spacing, - d = l(f.labelLeft, Math.min(f.pos, m[3])), - m = l( - f.labelRight, - Math.max(f.isRadial ? 0 : f.pos + f.len, h - m[1]), - ), - c = this.label, - b = this.rotation, - k = { left: 0, center: 0.5, right: 1 }[ - f.labelAlign || c.attr('align') - ], - z = c.getBBox().width, - B = f.getSlotWidth(), - I = B, - x = 1, - p, - t = {}; - if (b || !1 === n.overflow) - 0 > b && e - k * z < d - ? (p = Math.round(e / Math.cos(b * r) - d)) - : 0 < b && - e + k * z > m && - (p = Math.round((h - e) / Math.cos(b * r))); - else if ( - ((h = e + (1 - k) * z), - e - k * z < d - ? (I = a.x + I * (1 - k) - d) - : h > m && ((I = m - a.x + I * k), (x = -1)), - (I = Math.min(B, I)), - I < B && - 'center' === f.labelAlign && - (a.x += x * (B - I - k * (B - Math.min(z, I)))), - z > I || (f.autoRotation && (c.styles || {}).width)) - ) - p = I; - p && - ((t.width = p), - (n.style || {}).textOverflow || (t.textOverflow = 'ellipsis'), - c.css(t)); - }, - getPosition: function(a, f, l, e) { - var h = this.axis, - m = h.chart, - d = (e && m.oldChartHeight) || m.chartHeight; - return { - x: a - ? h.translate(f + l, null, null, e) + h.transB - : h.left + - h.offset + - (h.opposite - ? ((e && m.oldChartWidth) || m.chartWidth) - h.right - h.left - : 0), - y: a - ? d - h.bottom + h.offset - (h.opposite ? h.height : 0) - : d - h.translate(f + l, null, null, e) - h.transB, - }; - }, - getLabelPosition: function(a, f, l, e, h, m, d, c) { - var b = this.axis, - k = b.transA, - z = b.reversed, - B = b.staggerLines, - n = b.tickRotCorr || { x: 0, y: 0 }, - x = h.y, - u = - e || b.reserveSpaceDefault - ? 0 - : -b.labelOffset * ('center' === b.labelAlign ? 0.5 : 1); - D(x) || - (x = - 0 === b.side - ? l.rotation - ? -8 - : -l.getBBox().height - : 2 === b.side - ? n.y + 8 - : Math.cos(l.rotation * r) * (n.y - l.getBBox(!1, 0).height / 2)); - a = a + h.x + u + n.x - (m && e ? m * k * (z ? -1 : 1) : 0); - f = f + x - (m && !e ? m * k * (z ? 1 : -1) : 0); - B && - ((l = (d / (c || 1)) % B), - b.opposite && (l = B - l - 1), - (f += (b.labelOffset / B) * l)); - return { x: a, y: Math.round(f) }; - }, - getMarkPath: function(a, f, l, e, h, m) { - return m.crispLine( - ['M', a, f, 'L', a + (h ? 0 : -l), f + (h ? l : 0)], - e, - ); - }, - renderGridLine: function(a, f, l) { - var e = this.axis, - h = e.options, - m = this.gridLine, - d = {}, - c = this.pos, - b = this.type, - k = e.tickmarkOffset, - z = e.chart.renderer, - B = b ? b + 'Grid' : 'grid', - n = h[B + 'LineWidth'], - x = h[B + 'LineColor'], - h = h[B + 'LineDashStyle']; - m || - ((d.stroke = x), - (d['stroke-width'] = n), - h && (d.dashstyle = h), - b || (d.zIndex = 1), - a && (d.opacity = 0), - (this.gridLine = m = z - .path() - .attr(d) - .addClass('highcharts-' + (b ? b + '-' : '') + 'grid-line') - .add(e.gridGroup))); - if ( - !a && - m && - (a = e.getPlotLinePath(c + k, m.strokeWidth() * l, a, !0)) - ) - m[this.isNew ? 'attr' : 'animate']({ d: a, opacity: f }); - }, - renderMark: function(a, f, u) { - var e = this.axis, - h = e.options, - m = e.chart.renderer, - d = this.type, - c = d ? d + 'Tick' : 'tick', - b = e.tickSize(c), - k = this.mark, - z = !k, - B = a.x; - a = a.y; - var n = l(h[c + 'Width'], !d && e.isXAxis ? 1 : 0), - h = h[c + 'Color']; - b && - (e.opposite && (b[0] = -b[0]), - z && - ((this.mark = k = m - .path() - .addClass('highcharts-' + (d ? d + '-' : '') + 'tick') - .add(e.axisGroup)), - k.attr({ stroke: h, 'stroke-width': n })), - k[z ? 'attr' : 'animate']({ - d: this.getMarkPath(B, a, b[0], k.strokeWidth() * u, e.horiz, m), - opacity: f, - })); - }, - renderLabel: function(a, f, u, e) { - var h = this.axis, - m = h.horiz, - d = h.options, - c = this.label, - b = d.labels, - k = b.step, - h = h.tickmarkOffset, - z = !0, - B = a.x; - a = a.y; - c && - p(B) && - ((c.xy = a = this.getLabelPosition(B, a, c, m, b, h, e, k)), - (this.isFirst && !this.isLast && !l(d.showFirstLabel, 1)) || - (this.isLast && !this.isFirst && !l(d.showLastLabel, 1)) - ? (z = !1) - : !m || - b.step || - b.rotation || - f || - 0 === u || - this.handleOverflow(a), - k && e % k && (z = !1), - z && p(a.y) - ? ((a.opacity = u), - c[this.isNewLabel ? 'attr' : 'animate'](a), - (this.isNewLabel = !1)) - : (c.attr('y', -9999), (this.isNewLabel = !0))); - }, - render: function(a, f, u) { - var e = this.axis, - h = e.horiz, - m = this.getPosition(h, this.pos, e.tickmarkOffset, f), - d = m.x, - c = m.y, - e = (h && d === e.pos + e.len) || (!h && c === e.pos) ? -1 : 1; - u = l(u, 1); - this.isActive = !0; - this.renderGridLine(f, u, e); - this.renderMark(m, u, e); - this.renderLabel(m, f, u, a); - this.isNew = !1; - }, - destroy: function() { - H(this, this.axis); - }, - }; - })(M); - var V = (function(a) { - var E = a.addEvent, - D = a.animObject, - H = a.arrayMax, - p = a.arrayMin, - f = a.color, - l = a.correctFloat, - r = a.defaultOptions, - n = a.defined, - w = a.deg2rad, - u = a.destroyObjectProperties, - e = a.each, - h = a.extend, - m = a.fireEvent, - d = a.format, - c = a.getMagnitude, - b = a.grep, - k = a.inArray, - z = a.isArray, - B = a.isNumber, - I = a.isString, - x = a.merge, - K = a.normalizeTickInterval, - t = a.objectEach, - C = a.pick, - N = a.removeEvent, - q = a.splat, - A = a.syncTimeout, - F = a.Tick, - G = function() { - this.init.apply(this, arguments); - }; - a.extend(G.prototype, { - defaultOptions: { - dateTimeLabelFormats: { - millisecond: '%H:%M:%S.%L', - second: '%H:%M:%S', - minute: '%H:%M', - hour: '%H:%M', - day: '%e. %b', - week: '%e. %b', - month: "%b '%y", - year: '%Y', - }, - endOnTick: !1, - labels: { - enabled: !0, - style: { color: '#666666', cursor: 'default', fontSize: '11px' }, - x: 0, - }, - maxPadding: 0.01, - minorTickLength: 2, - minorTickPosition: 'outside', - minPadding: 0.01, - startOfWeek: 1, - startOnTick: !1, - tickLength: 10, - tickmarkPlacement: 'between', - tickPixelInterval: 100, - tickPosition: 'outside', - title: { align: 'middle', style: { color: '#666666' } }, - type: 'linear', - minorGridLineColor: '#f2f2f2', - minorGridLineWidth: 1, - minorTickColor: '#999999', - lineColor: '#ccd6eb', - lineWidth: 1, - gridLineColor: '#e6e6e6', - tickColor: '#ccd6eb', - }, - defaultYAxisOptions: { - endOnTick: !0, - tickPixelInterval: 72, - showLastLabel: !0, - labels: { x: -8 }, - maxPadding: 0.05, - minPadding: 0.05, - startOnTick: !0, - title: { rotation: 270, text: 'Values' }, - stackLabels: { - allowOverlap: !1, - enabled: !1, - formatter: function() { - return a.numberFormat(this.total, -1); - }, - style: { - fontSize: '11px', - fontWeight: 'bold', - color: '#000000', - textOutline: '1px contrast', - }, - }, - gridLineWidth: 1, - lineWidth: 0, - }, - defaultLeftAxisOptions: { labels: { x: -15 }, title: { rotation: 270 } }, - defaultRightAxisOptions: { labels: { x: 15 }, title: { rotation: 90 } }, - defaultBottomAxisOptions: { - labels: { autoRotation: [-45], x: 0 }, - title: { rotation: 0 }, - }, - defaultTopAxisOptions: { - labels: { autoRotation: [-45], x: 0 }, - title: { rotation: 0 }, - }, - init: function(a, b) { - var g = b.isX, - v = this; - v.chart = a; - v.horiz = a.inverted && !v.isZAxis ? !g : g; - v.isXAxis = g; - v.coll = v.coll || (g ? 'xAxis' : 'yAxis'); - v.opposite = b.opposite; - v.side = - b.side || (v.horiz ? (v.opposite ? 0 : 2) : v.opposite ? 1 : 3); - v.setOptions(b); - var c = this.options, - d = c.type; - v.labelFormatter = c.labels.formatter || v.defaultLabelFormatter; - v.userOptions = b; - v.minPixelPadding = 0; - v.reversed = c.reversed; - v.visible = !1 !== c.visible; - v.zoomEnabled = !1 !== c.zoomEnabled; - v.hasNames = 'category' === d || !0 === c.categories; - v.categories = c.categories || v.hasNames; - v.names = v.names || []; - v.plotLinesAndBandsGroups = {}; - v.isLog = 'logarithmic' === d; - v.isDatetimeAxis = 'datetime' === d; - v.positiveValuesOnly = v.isLog && !v.allowNegativeLog; - v.isLinked = n(c.linkedTo); - v.ticks = {}; - v.labelEdge = []; - v.minorTicks = {}; - v.plotLinesAndBands = []; - v.alternateBands = {}; - v.len = 0; - v.minRange = v.userMinRange = c.minRange || c.maxZoom; - v.range = c.range; - v.offset = c.offset || 0; - v.stacks = {}; - v.oldStacks = {}; - v.stacksTouched = 0; - v.max = null; - v.min = null; - v.crosshair = C( - c.crosshair, - q(a.options.tooltip.crosshairs)[g ? 0 : 1], - !1, - ); - b = v.options.events; - -1 === k(v, a.axes) && - (g ? a.axes.splice(a.xAxis.length, 0, v) : a.axes.push(v), - a[v.coll].push(v)); - v.series = v.series || []; - a.inverted && - !v.isZAxis && - g && - void 0 === v.reversed && - (v.reversed = !0); - t(b, function(a, g) { - E(v, g, a); - }); - v.lin2log = c.linearToLogConverter || v.lin2log; - v.isLog && ((v.val2lin = v.log2lin), (v.lin2val = v.lin2log)); - }, - setOptions: function(a) { - this.options = x( - this.defaultOptions, - 'yAxis' === this.coll && this.defaultYAxisOptions, - [ - this.defaultTopAxisOptions, - this.defaultRightAxisOptions, - this.defaultBottomAxisOptions, - this.defaultLeftAxisOptions, - ][this.side], - x(r[this.coll], a), - ); - }, - defaultLabelFormatter: function() { - var g = this.axis, - b = this.value, - c = g.categories, - k = this.dateTimeLabelFormat, - e = r.lang, - q = e.numericSymbols, - e = e.numericSymbolMagnitude || 1e3, - h = q && q.length, - m, - z = g.options.labels.format, - g = g.isLog ? Math.abs(b) : g.tickInterval; - if (z) m = d(z, this); - else if (c) m = b; - else if (k) m = a.dateFormat(k, b); - else if (h && 1e3 <= g) - for (; h-- && void 0 === m; ) - (c = Math.pow(e, h + 1)), - g >= c && - 0 === (10 * b) % c && - null !== q[h] && - 0 !== b && - (m = a.numberFormat(b / c, -1) + q[h]); - void 0 === m && - (m = - 1e4 <= Math.abs(b) - ? a.numberFormat(b, -1) - : a.numberFormat(b, -1, void 0, '')); - return m; - }, - getSeriesExtremes: function() { - var a = this, - v = a.chart; - a.hasVisibleSeries = !1; - a.dataMin = a.dataMax = a.threshold = null; - a.softThreshold = !a.isXAxis; - a.buildStacks && a.buildStacks(); - e(a.series, function(g) { - if (g.visible || !v.options.chart.ignoreHiddenSeries) { - var c = g.options, - d = c.threshold, - k; - a.hasVisibleSeries = !0; - a.positiveValuesOnly && 0 >= d && (d = null); - if (a.isXAxis) - (c = g.xData), - c.length && - ((g = p(c)), - (k = H(c)), - B(g) || g instanceof Date || ((c = b(c, B)), (g = p(c))), - (a.dataMin = Math.min(C(a.dataMin, c[0], g), g)), - (a.dataMax = Math.max(C(a.dataMax, c[0], k), k))); - else if ( - (g.getExtremes(), - (k = g.dataMax), - (g = g.dataMin), - n(g) && - n(k) && - ((a.dataMin = Math.min(C(a.dataMin, g), g)), - (a.dataMax = Math.max(C(a.dataMax, k), k))), - n(d) && (a.threshold = d), - !c.softThreshold || a.positiveValuesOnly) - ) - a.softThreshold = !1; - } - }); - }, - translate: function(a, b, c, d, k, e) { - var g = this.linkedParent || this, - v = 1, - q = 0, - h = d ? g.oldTransA : g.transA; - d = d ? g.oldMin : g.min; - var m = g.minPixelPadding; - k = (g.isOrdinal || g.isBroken || (g.isLog && k)) && g.lin2val; - h || (h = g.transA); - c && ((v *= -1), (q = g.len)); - g.reversed && ((v *= -1), (q -= v * (g.sector || g.len))); - b - ? ((a = (a * v + q - m) / h + d), k && (a = g.lin2val(a))) - : (k && (a = g.val2lin(a)), - (a = B(d) - ? v * (a - d) * h + q + v * m + (B(e) ? h * e : 0) - : void 0)); - return a; - }, - toPixels: function(a, b) { - return ( - this.translate(a, !1, !this.horiz, null, !0) + (b ? 0 : this.pos) - ); - }, - toValue: function(a, b) { - return this.translate( - a - (b ? 0 : this.pos), - !0, - !this.horiz, - null, - !0, - ); - }, - getPlotLinePath: function(a, b, c, d, k) { - var g = this.chart, - v = this.left, - q = this.top, - e, - h, - m = (c && g.oldChartHeight) || g.chartHeight, - z = (c && g.oldChartWidth) || g.chartWidth, - A; - e = this.transB; - var t = function(a, g, b) { - if (a < g || a > b) d ? (a = Math.min(Math.max(g, a), b)) : (A = !0); - return a; - }; - k = C(k, this.translate(a, null, null, c)); - a = c = Math.round(k + e); - e = h = Math.round(m - k - e); - B(k) - ? this.horiz - ? ((e = q), - (h = m - this.bottom), - (a = c = t(a, v, v + this.width))) - : ((a = v), - (c = z - this.right), - (e = h = t(e, q, q + this.height))) - : ((A = !0), (d = !1)); - return A && !d - ? null - : g.renderer.crispLine(['M', a, e, 'L', c, h], b || 1); - }, - getLinearTickPositions: function(a, b, c) { - var g, - v = l(Math.floor(b / a) * a); - c = l(Math.ceil(c / a) * a); - var d = [], - k; - l(v + a) === v && (k = 20); - if (this.single) return [b]; - for (b = v; b <= c; ) { - d.push(b); - b = l(b + a, k); - if (b === g) break; - g = b; - } - return d; - }, - getMinorTickInterval: function() { - var a = this.options; - return !0 === a.minorTicks - ? C(a.minorTickInterval, 'auto') - : !1 === a.minorTicks - ? null - : a.minorTickInterval; - }, - getMinorTickPositions: function() { - var a = this, - b = a.options, - c = a.tickPositions, - d = a.minorTickInterval, - k = [], - q = a.pointRangePadding || 0, - h = a.min - q, - q = a.max + q, - m = q - h; - if (m && m / d < a.len / 3) - if (a.isLog) - e(this.paddedTicks, function(g, b, v) { - b && - k.push.apply(k, a.getLogTickPositions(d, v[b - 1], v[b], !0)); - }); - else if (a.isDatetimeAxis && 'auto' === this.getMinorTickInterval()) - k = k.concat( - a.getTimeTicks( - a.normalizeTimeTickInterval(d), - h, - q, - b.startOfWeek, - ), - ); - else - for (b = h + ((c[0] - h) % d); b <= q && b !== k[0]; b += d) - k.push(b); - 0 !== k.length && a.trimTicks(k); - return k; - }, - adjustForMinRange: function() { - var a = this.options, - b = this.min, - c = this.max, - d, - k, - q, - h, - m, - z, - A, - t; - this.isXAxis && - void 0 === this.minRange && - !this.isLog && - (n(a.min) || n(a.max) - ? (this.minRange = null) - : (e(this.series, function(a) { - z = a.xData; - for (h = A = a.xIncrement ? 1 : z.length - 1; 0 < h; h--) - if (((m = z[h] - z[h - 1]), void 0 === q || m < q)) q = m; - }), - (this.minRange = Math.min(5 * q, this.dataMax - this.dataMin)))); - c - b < this.minRange && - ((k = this.dataMax - this.dataMin >= this.minRange), - (t = this.minRange), - (d = (t - c + b) / 2), - (d = [b - d, C(a.min, b - d)]), - k && (d[2] = this.isLog ? this.log2lin(this.dataMin) : this.dataMin), - (b = H(d)), - (c = [b + t, C(a.max, b + t)]), - k && (c[2] = this.isLog ? this.log2lin(this.dataMax) : this.dataMax), - (c = p(c)), - c - b < t && ((d[0] = c - t), (d[1] = C(a.min, c - t)), (b = H(d)))); - this.min = b; - this.max = c; - }, - getClosest: function() { - var a; - this.categories - ? (a = 1) - : e(this.series, function(g) { - var b = g.closestPointRange, - v = g.visible || !g.chart.options.chart.ignoreHiddenSeries; - !g.noSharedTooltip && - n(b) && - v && - (a = n(a) ? Math.min(a, b) : b); - }); - return a; - }, - nameToX: function(a) { - var g = z(this.categories), - b = g ? this.categories : this.names, - c = a.options.x, - d; - a.series.requireSorting = !1; - n(c) || - (c = - !1 === this.options.uniqueNames - ? a.series.autoIncrement() - : k(a.name, b)); - -1 === c ? g || (d = b.length) : (d = c); - void 0 !== d && (this.names[d] = a.name); - return d; - }, - updateNames: function() { - var a = this; - 0 < this.names.length && - ((this.names.length = 0), - (this.minRange = this.userMinRange), - e(this.series || [], function(g) { - g.xIncrement = null; - if (!g.points || g.isDirtyData) g.processData(), g.generatePoints(); - e(g.points, function(b, v) { - var c; - b.options && - ((c = a.nameToX(b)), - void 0 !== c && c !== b.x && ((b.x = c), (g.xData[v] = c))); - }); - })); - }, - setAxisTranslation: function(a) { - var g = this, - b = g.max - g.min, - c = g.axisPointRange || 0, - d, - k = 0, - q = 0, - h = g.linkedParent, - m = !!g.categories, - z = g.transA, - A = g.isXAxis; - if (A || m || c) - (d = g.getClosest()), - h - ? ((k = h.minPointOffset), (q = h.pointRangePadding)) - : e(g.series, function(a) { - var b = m - ? 1 - : A - ? C(a.options.pointRange, d, 0) - : g.axisPointRange || 0; - a = a.options.pointPlacement; - c = Math.max(c, b); - g.single || - ((k = Math.max(k, I(a) ? 0 : b / 2)), - (q = Math.max(q, 'on' === a ? 0 : b))); - }), - (h = g.ordinalSlope && d ? g.ordinalSlope / d : 1), - (g.minPointOffset = k *= h), - (g.pointRangePadding = q *= h), - (g.pointRange = Math.min(c, b)), - A && (g.closestPointRange = d); - a && (g.oldTransA = z); - g.translationSlope = g.transA = z = - g.options.staticScale || g.len / (b + q || 1); - g.transB = g.horiz ? g.left : g.bottom; - g.minPixelPadding = z * k; - }, - minFromRange: function() { - return this.max - this.range; - }, - setTickInterval: function(g) { - var b = this, - d = b.chart, - k = b.options, - q = b.isLog, - h = b.log2lin, - z = b.isDatetimeAxis, - A = b.isXAxis, - t = b.isLinked, - x = k.maxPadding, - f = k.minPadding, - F = k.tickInterval, - u = k.tickPixelInterval, - G = b.categories, - p = b.threshold, - I = b.softThreshold, - r, - w, - N, - D; - z || G || t || this.getTickAmount(); - N = C(b.userMin, k.min); - D = C(b.userMax, k.max); - t - ? ((b.linkedParent = d[b.coll][k.linkedTo]), - (d = b.linkedParent.getExtremes()), - (b.min = C(d.min, d.dataMin)), - (b.max = C(d.max, d.dataMax)), - k.type !== b.linkedParent.options.type && a.error(11, 1)) - : (!I && - n(p) && - (b.dataMin >= p - ? ((r = p), (f = 0)) - : b.dataMax <= p && ((w = p), (x = 0))), - (b.min = C(N, r, b.dataMin)), - (b.max = C(D, w, b.dataMax))); - q && - (b.positiveValuesOnly && - !g && - 0 >= Math.min(b.min, C(b.dataMin, b.min)) && - a.error(10, 1), - (b.min = l(h(b.min), 15)), - (b.max = l(h(b.max), 15))); - b.range && - n(b.max) && - ((b.userMin = b.min = N = Math.max(b.dataMin, b.minFromRange())), - (b.userMax = D = b.max), - (b.range = null)); - m(b, 'foundExtremes'); - b.beforePadding && b.beforePadding(); - b.adjustForMinRange(); - !(G || b.axisPointRange || b.usePercentage || t) && - n(b.min) && - n(b.max) && - (h = b.max - b.min) && - (!n(N) && f && (b.min -= h * f), !n(D) && x && (b.max += h * x)); - B(k.softMin) && !B(b.userMin) && (b.min = Math.min(b.min, k.softMin)); - B(k.softMax) && !B(b.userMax) && (b.max = Math.max(b.max, k.softMax)); - B(k.floor) && (b.min = Math.max(b.min, k.floor)); - B(k.ceiling) && (b.max = Math.min(b.max, k.ceiling)); - I && - n(b.dataMin) && - ((p = p || 0), - !n(N) && b.min < p && b.dataMin >= p - ? (b.min = p) - : !n(D) && b.max > p && b.dataMax <= p && (b.max = p)); - b.tickInterval = - b.min === b.max || void 0 === b.min || void 0 === b.max - ? 1 - : t && !F && u === b.linkedParent.options.tickPixelInterval - ? (F = b.linkedParent.tickInterval) - : C( - F, - this.tickAmount - ? (b.max - b.min) / Math.max(this.tickAmount - 1, 1) - : void 0, - G ? 1 : ((b.max - b.min) * u) / Math.max(b.len, u), - ); - A && - !g && - e(b.series, function(a) { - a.processData(b.min !== b.oldMin || b.max !== b.oldMax); - }); - b.setAxisTranslation(!0); - b.beforeSetTickPositions && b.beforeSetTickPositions(); - b.postProcessTickInterval && - (b.tickInterval = b.postProcessTickInterval(b.tickInterval)); - b.pointRange && - !F && - (b.tickInterval = Math.max(b.pointRange, b.tickInterval)); - g = C(k.minTickInterval, b.isDatetimeAxis && b.closestPointRange); - !F && b.tickInterval < g && (b.tickInterval = g); - z || - q || - F || - (b.tickInterval = K( - b.tickInterval, - null, - c(b.tickInterval), - C( - k.allowDecimals, - !( - 0.5 < b.tickInterval && - 5 > b.tickInterval && - 1e3 < b.max && - 9999 > b.max - ), - ), - !!this.tickAmount, - )); - this.tickAmount || (b.tickInterval = b.unsquish()); - this.setTickPositions(); - }, - setTickPositions: function() { - var a = this.options, - b, - c = a.tickPositions; - b = this.getMinorTickInterval(); - var d = a.tickPositioner, - k = a.startOnTick, - q = a.endOnTick; - this.tickmarkOffset = - this.categories && - 'between' === a.tickmarkPlacement && - 1 === this.tickInterval - ? 0.5 - : 0; - this.minorTickInterval = - 'auto' === b && this.tickInterval ? this.tickInterval / 5 : b; - this.single = - this.min === this.max && - n(this.min) && - !this.tickAmount && - (parseInt(this.min, 10) === this.min || !1 !== a.allowDecimals); - this.tickPositions = b = c && c.slice(); - !b && - ((b = this.isDatetimeAxis - ? this.getTimeTicks( - this.normalizeTimeTickInterval(this.tickInterval, a.units), - this.min, - this.max, - a.startOfWeek, - this.ordinalPositions, - this.closestPointRange, - !0, - ) - : this.isLog - ? this.getLogTickPositions(this.tickInterval, this.min, this.max) - : this.getLinearTickPositions( - this.tickInterval, - this.min, - this.max, - )), - b.length > this.len && - ((b = [b[0], b.pop()]), b[0] === b[1] && (b.length = 1)), - (this.tickPositions = b), - d && (d = d.apply(this, [this.min, this.max]))) && - (this.tickPositions = b = d); - this.paddedTicks = b.slice(0); - this.trimTicks(b, k, q); - this.isLinked || - (this.single && - 2 > b.length && - ((this.min -= 0.5), (this.max += 0.5)), - c || d || this.adjustTickAmount()); - }, - trimTicks: function(a, b, c) { - var g = a[0], - d = a[a.length - 1], - k = this.minPointOffset || 0; - if (!this.isLinked) { - if (b && -Infinity !== g) this.min = g; - else for (; this.min - k > a[0]; ) a.shift(); - if (c) this.max = d; - else for (; this.max + k < a[a.length - 1]; ) a.pop(); - 0 === a.length && - n(g) && - !this.options.tickPositions && - a.push((d + g) / 2); - } - }, - alignToOthers: function() { - var a = {}, - b, - c = this.options; - !1 === this.chart.options.chart.alignTicks || - !1 === c.alignTicks || - this.isLog || - e(this.chart[this.coll], function(g) { - var c = g.options, - c = [g.horiz ? c.left : c.top, c.width, c.height, c.pane].join(); - g.series.length && (a[c] ? (b = !0) : (a[c] = 1)); - }); - return b; - }, - getTickAmount: function() { - var a = this.options, - b = a.tickAmount, - c = a.tickPixelInterval; - !n(a.tickInterval) && - this.len < c && - !this.isRadial && - !this.isLog && - a.startOnTick && - a.endOnTick && - (b = 2); - !b && this.alignToOthers() && (b = Math.ceil(this.len / c) + 1); - 4 > b && ((this.finalTickAmt = b), (b = 5)); - this.tickAmount = b; - }, - adjustTickAmount: function() { - var a = this.tickInterval, - b = this.tickPositions, - c = this.tickAmount, - d = this.finalTickAmt, - k = b && b.length, - q = C(this.threshold, this.softThreshold ? 0 : null); - if (this.hasData()) { - if (k < c) { - for (; b.length < c; ) - b.length % 2 || this.min === q - ? b.push(l(b[b.length - 1] + a)) - : b.unshift(l(b[0] - a)); - this.transA *= (k - 1) / (c - 1); - this.min = b[0]; - this.max = b[b.length - 1]; - } else k > c && ((this.tickInterval *= 2), this.setTickPositions()); - if (n(d)) { - for (a = c = b.length; a--; ) - ((3 === d && 1 === a % 2) || (2 >= d && 0 < a && a < c - 1)) && - b.splice(a, 1); - this.finalTickAmt = void 0; - } - } - }, - setScale: function() { - var a, b; - this.oldMin = this.min; - this.oldMax = this.max; - this.oldAxisLength = this.len; - this.setAxisSize(); - b = this.len !== this.oldAxisLength; - e(this.series, function(b) { - if (b.isDirtyData || b.isDirty || b.xAxis.isDirty) a = !0; - }); - b || - a || - this.isLinked || - this.forceRedraw || - this.userMin !== this.oldUserMin || - this.userMax !== this.oldUserMax || - this.alignToOthers() - ? (this.resetStacks && this.resetStacks(), - (this.forceRedraw = !1), - this.getSeriesExtremes(), - this.setTickInterval(), - (this.oldUserMin = this.userMin), - (this.oldUserMax = this.userMax), - this.isDirty || - (this.isDirty = - b || this.min !== this.oldMin || this.max !== this.oldMax)) - : this.cleanStacks && this.cleanStacks(); - }, - setExtremes: function(a, b, c, d, k) { - var g = this, - q = g.chart; - c = C(c, !0); - e(g.series, function(a) { - delete a.kdTree; - }); - k = h(k, { min: a, max: b }); - m(g, 'setExtremes', k, function() { - g.userMin = a; - g.userMax = b; - g.eventArgs = k; - c && q.redraw(d); - }); - }, - zoom: function(a, b) { - var g = this.dataMin, - c = this.dataMax, - d = this.options, - k = Math.min(g, C(d.min, g)), - d = Math.max(c, C(d.max, c)); - if (a !== this.min || b !== this.max) - this.allowZoomOutside || - (n(g) && (a < k && (a = k), a > d && (a = d)), - n(c) && (b < k && (b = k), b > d && (b = d))), - (this.displayBtn = void 0 !== a || void 0 !== b), - this.setExtremes(a, b, !1, void 0, { trigger: 'zoom' }); - return !0; - }, - setAxisSize: function() { - var b = this.chart, - c = this.options, - d = c.offsets || [0, 0, 0, 0], - k = this.horiz, - q = (this.width = Math.round( - a.relativeLength( - C(c.width, b.plotWidth - d[3] + d[1]), - b.plotWidth, - ), - )), - e = (this.height = Math.round( - a.relativeLength( - C(c.height, b.plotHeight - d[0] + d[2]), - b.plotHeight, - ), - )), - h = (this.top = Math.round( - a.relativeLength( - C(c.top, b.plotTop + d[0]), - b.plotHeight, - b.plotTop, - ), - )), - c = (this.left = Math.round( - a.relativeLength( - C(c.left, b.plotLeft + d[3]), - b.plotWidth, - b.plotLeft, - ), - )); - this.bottom = b.chartHeight - e - h; - this.right = b.chartWidth - q - c; - this.len = Math.max(k ? q : e, 0); - this.pos = k ? c : h; - }, - getExtremes: function() { - var a = this.isLog, - b = this.lin2log; - return { - min: a ? l(b(this.min)) : this.min, - max: a ? l(b(this.max)) : this.max, - dataMin: this.dataMin, - dataMax: this.dataMax, - userMin: this.userMin, - userMax: this.userMax, - }; - }, - getThreshold: function(a) { - var b = this.isLog, - g = this.lin2log, - c = b ? g(this.min) : this.min, - b = b ? g(this.max) : this.max; - null === a ? (a = c) : c > a ? (a = c) : b < a && (a = b); - return this.translate(a, 0, 1, 0, 1); - }, - autoLabelAlign: function(a) { - a = (C(a, 0) - 90 * this.side + 720) % 360; - return 15 < a && 165 > a - ? 'right' - : 195 < a && 345 > a - ? 'left' - : 'center'; - }, - tickSize: function(a) { - var b = this.options, - g = b[a + 'Length'], - c = C(b[a + 'Width'], 'tick' === a && this.isXAxis ? 1 : 0); - if (c && g) return 'inside' === b[a + 'Position'] && (g = -g), [g, c]; - }, - labelMetrics: function() { - var a = (this.tickPositions && this.tickPositions[0]) || 0; - return this.chart.renderer.fontMetrics( - this.options.labels.style && this.options.labels.style.fontSize, - this.ticks[a] && this.ticks[a].label, - ); - }, - unsquish: function() { - var a = this.options.labels, - b = this.horiz, - c = this.tickInterval, - d = c, - k = - this.len / (((this.categories ? 1 : 0) + this.max - this.min) / c), - q, - h = a.rotation, - m = this.labelMetrics(), - z, - A = Number.MAX_VALUE, - t, - x = function(a) { - a /= k || 1; - a = 1 < a ? Math.ceil(a) : 1; - return a * c; - }; - b - ? (t = - !a.staggerLines && - !a.step && - (n(h) - ? [h] - : k < C(a.autoRotationLimit, 80) && a.autoRotation)) && - e(t, function(a) { - var b; - if (a === h || (a && -90 <= a && 90 >= a)) - (z = x(Math.abs(m.h / Math.sin(w * a)))), - (b = z + Math.abs(a / 360)), - b < A && ((A = b), (q = a), (d = z)); - }) - : a.step || (d = x(m.h)); - this.autoRotation = t; - this.labelRotation = C(q, h); - return d; - }, - getSlotWidth: function() { - var a = this.chart, - b = this.horiz, - c = this.options.labels, - d = Math.max( - this.tickPositions.length - (this.categories ? 0 : 1), - 1, - ), - k = a.margin[3]; - return ( - (b && - 2 > (c.step || 0) && - !c.rotation && - ((this.staggerLines || 1) * this.len) / d) || - (!b && - ((c.style && parseInt(c.style.width, 10)) || - (k && k - a.spacing[3]) || - 0.33 * a.chartWidth)) - ); - }, - renderUnsquish: function() { - var a = this.chart, - b = a.renderer, - c = this.tickPositions, - d = this.ticks, - k = this.options.labels, - q = this.horiz, - h = this.getSlotWidth(), - m = Math.max(1, Math.round(h - 2 * (k.padding || 5))), - z = {}, - A = this.labelMetrics(), - t = k.style && k.style.textOverflow, - f, - F = 0, - l, - B; - I(k.rotation) || (z.rotation = k.rotation || 0); - e(c, function(a) { - (a = d[a]) && a.labelLength > F && (F = a.labelLength); - }); - this.maxLabelLength = F; - if (this.autoRotation) - F > m && F > A.h - ? (z.rotation = this.labelRotation) - : (this.labelRotation = 0); - else if (h && ((f = { width: m + 'px' }), !t)) - for (f.textOverflow = 'clip', l = c.length; !q && l--; ) - if (((B = c[l]), (m = d[B].label))) - m.styles && 'ellipsis' === m.styles.textOverflow - ? m.css({ textOverflow: 'clip' }) - : d[B].labelLength > h && m.css({ width: h + 'px' }), - m.getBBox().height > this.len / c.length - (A.h - A.f) && - (m.specCss = { textOverflow: 'ellipsis' }); - z.rotation && - ((f = { - width: - (F > 0.5 * a.chartHeight ? 0.33 * a.chartHeight : a.chartHeight) + - 'px', - }), - t || (f.textOverflow = 'ellipsis')); - if ( - (this.labelAlign = k.align || this.autoLabelAlign(this.labelRotation)) - ) - z.align = this.labelAlign; - e(c, function(a) { - var b = (a = d[a]) && a.label; - b && - (b.attr(z), - f && b.css(x(f, b.specCss)), - delete b.specCss, - (a.rotation = z.rotation)); - }); - this.tickRotCorr = b.rotCorr( - A.b, - this.labelRotation || 0, - 0 !== this.side, - ); - }, - hasData: function() { - return ( - this.hasVisibleSeries || - (n(this.min) && - n(this.max) && - this.tickPositions && - 0 < this.tickPositions.length) - ); - }, - addTitle: function(a) { - var b = this.chart.renderer, - g = this.horiz, - c = this.opposite, - d = this.options.title, - k; - this.axisTitle || - ((k = d.textAlign) || - (k = (g - ? { low: 'left', middle: 'center', high: 'right' } - : { - low: c ? 'right' : 'left', - middle: 'center', - high: c ? 'left' : 'right', - })[d.align]), - (this.axisTitle = b - .text(d.text, 0, 0, d.useHTML) - .attr({ zIndex: 7, rotation: d.rotation || 0, align: k }) - .addClass('highcharts-axis-title') - .css(d.style) - .add(this.axisGroup)), - (this.axisTitle.isNew = !0)); - d.style.width || - this.isRadial || - this.axisTitle.css({ width: this.len }); - this.axisTitle[a ? 'show' : 'hide'](!0); - }, - generateTick: function(a) { - var b = this.ticks; - b[a] ? b[a].addLabel() : (b[a] = new F(this, a)); - }, - getOffset: function() { - var a = this, - b = a.chart, - c = b.renderer, - d = a.options, - k = a.tickPositions, - q = a.ticks, - h = a.horiz, - m = a.side, - z = b.inverted && !a.isZAxis ? [1, 0, 3, 2][m] : m, - A, - x, - f = 0, - F, - l = 0, - B = d.title, - u = d.labels, - G = 0, - p = b.axisOffset, - b = b.clipOffset, - I = [-1, 1, 1, -1][m], - r = d.className, - w = a.axisParent, - K = this.tickSize('tick'); - A = a.hasData(); - a.showAxis = x = A || C(d.showEmpty, !0); - a.staggerLines = a.horiz && u.staggerLines; - a.axisGroup || - ((a.gridGroup = c - .g('grid') - .attr({ zIndex: d.gridZIndex || 1 }) - .addClass( - 'highcharts-' + this.coll.toLowerCase() + '-grid ' + (r || ''), - ) - .add(w)), - (a.axisGroup = c - .g('axis') - .attr({ zIndex: d.zIndex || 2 }) - .addClass('highcharts-' + this.coll.toLowerCase() + ' ' + (r || '')) - .add(w)), - (a.labelGroup = c - .g('axis-labels') - .attr({ zIndex: u.zIndex || 7 }) - .addClass( - 'highcharts-' + a.coll.toLowerCase() + '-labels ' + (r || ''), - ) - .add(w))); - A || a.isLinked - ? (e(k, function(b, c) { - a.generateTick(b, c); - }), - a.renderUnsquish(), - (a.reserveSpaceDefault = - 0 === m || - 2 === m || - { 1: 'left', 3: 'right' }[m] === a.labelAlign), - C( - u.reserveSpace, - 'center' === a.labelAlign ? !0 : null, - a.reserveSpaceDefault, - ) && - e(k, function(a) { - G = Math.max(q[a].getLabelSize(), G); - }), - a.staggerLines && (G *= a.staggerLines), - (a.labelOffset = G * (a.opposite ? -1 : 1))) - : t(q, function(a, b) { - a.destroy(); - delete q[b]; - }); - B && - B.text && - !1 !== B.enabled && - (a.addTitle(x), - x && - !1 !== B.reserveSpace && - ((a.titleOffset = f = a.axisTitle.getBBox()[ - h ? 'height' : 'width' - ]), - (F = B.offset), - (l = n(F) ? 0 : C(B.margin, h ? 5 : 10)))); - a.renderLine(); - a.offset = I * C(d.offset, p[m]); - a.tickRotCorr = a.tickRotCorr || { x: 0, y: 0 }; - c = 0 === m ? -a.labelMetrics().h : 2 === m ? a.tickRotCorr.y : 0; - l = Math.abs(G) + l; - G && (l = l - c + I * (h ? C(u.y, a.tickRotCorr.y + 8 * I) : u.x)); - a.axisTitleMargin = C(F, l); - p[m] = Math.max( - p[m], - a.axisTitleMargin + f + I * a.offset, - l, - A && k.length && K ? K[0] + I * a.offset : 0, - ); - d = d.offset ? 0 : 2 * Math.floor(a.axisLine.strokeWidth() / 2); - b[z] = Math.max(b[z], d); - }, - getLinePath: function(a) { - var b = this.chart, - c = this.opposite, - g = this.offset, - d = this.horiz, - k = this.left + (c ? this.width : 0) + g, - g = b.chartHeight - this.bottom - (c ? this.height : 0) + g; - c && (a *= -1); - return b.renderer.crispLine( - [ - 'M', - d ? this.left : k, - d ? g : this.top, - 'L', - d ? b.chartWidth - this.right : k, - d ? g : b.chartHeight - this.bottom, - ], - a, - ); - }, - renderLine: function() { - this.axisLine || - ((this.axisLine = this.chart.renderer - .path() - .addClass('highcharts-axis-line') - .add(this.axisGroup)), - this.axisLine.attr({ - stroke: this.options.lineColor, - 'stroke-width': this.options.lineWidth, - zIndex: 7, - })); - }, - getTitlePosition: function() { - var a = this.horiz, - b = this.left, - c = this.top, - d = this.len, - k = this.options.title, - q = a ? b : c, - e = this.opposite, - h = this.offset, - m = k.x || 0, - z = k.y || 0, - A = this.axisTitle, - t = this.chart.renderer.fontMetrics(k.style && k.style.fontSize, A), - A = Math.max(A.getBBox(null, 0).height - t.h - 1, 0), - d = { - low: q + (a ? 0 : d), - middle: q + d / 2, - high: q + (a ? d : 0), - }[k.align], - b = - (a ? c + this.height : b) + - (a ? 1 : -1) * (e ? -1 : 1) * this.axisTitleMargin + - [-A, A, t.f, -A][this.side]; - return { - x: a ? d + m : b + (e ? this.width : 0) + h + m, - y: a ? b + z - (e ? this.height : 0) + h : d + z, - }; - }, - renderMinorTick: function(a) { - var b = this.chart.hasRendered && B(this.oldMin), - c = this.minorTicks; - c[a] || (c[a] = new F(this, a, 'minor')); - b && c[a].isNew && c[a].render(null, !0); - c[a].render(null, !1, 1); - }, - renderTick: function(a, b) { - var c = this.isLinked, - g = this.ticks, - d = this.chart.hasRendered && B(this.oldMin); - if (!c || (a >= this.min && a <= this.max)) - g[a] || (g[a] = new F(this, a)), - d && g[a].isNew && g[a].render(b, !0, 0.1), - g[a].render(b); - }, - render: function() { - var b = this, - c = b.chart, - d = b.options, - k = b.isLog, - q = b.lin2log, - h = b.isLinked, - m = b.tickPositions, - z = b.axisTitle, - x = b.ticks, - f = b.minorTicks, - l = b.alternateBands, - C = d.stackLabels, - n = d.alternateGridColor, - u = b.tickmarkOffset, - G = b.axisLine, - p = b.showAxis, - I = D(c.renderer.globalAnimation), - r, - w; - b.labelEdge.length = 0; - b.overlap = !1; - e([x, f, l], function(a) { - t(a, function(a) { - a.isActive = !1; - }); - }); - if (b.hasData() || h) - b.minorTickInterval && - !b.categories && - e(b.getMinorTickPositions(), function(a) { - b.renderMinorTick(a); - }), - m.length && - (e(m, function(a, c) { - b.renderTick(a, c); - }), - u && - (0 === b.min || b.single) && - (x[-1] || (x[-1] = new F(b, -1, null, !0)), x[-1].render(-1))), - n && - e(m, function(d, g) { - w = void 0 !== m[g + 1] ? m[g + 1] + u : b.max - u; - 0 === g % 2 && - d < b.max && - w <= b.max + (c.polar ? -u : u) && - (l[d] || (l[d] = new a.PlotLineOrBand(b)), - (r = d + u), - (l[d].options = { - from: k ? q(r) : r, - to: k ? q(w) : w, - color: n, - }), - l[d].render(), - (l[d].isActive = !0)); - }), - b._addedPlotLB || - (e((d.plotLines || []).concat(d.plotBands || []), function(a) { - b.addPlotBandOrLine(a); - }), - (b._addedPlotLB = !0)); - e([x, f, l], function(a) { - var b, - d = [], - g = I.duration; - t(a, function(a, b) { - a.isActive || (a.render(b, !1, 0), (a.isActive = !1), d.push(b)); - }); - A( - function() { - for (b = d.length; b--; ) - a[d[b]] && - !a[d[b]].isActive && - (a[d[b]].destroy(), delete a[d[b]]); - }, - a !== l && c.hasRendered && g ? g : 0, - ); - }); - G && - (G[G.isPlaced ? 'animate' : 'attr']({ - d: this.getLinePath(G.strokeWidth()), - }), - (G.isPlaced = !0), - G[p ? 'show' : 'hide'](!0)); - z && - p && - ((d = b.getTitlePosition()), - B(d.y) - ? (z[z.isNew ? 'attr' : 'animate'](d), (z.isNew = !1)) - : (z.attr('y', -9999), (z.isNew = !0))); - C && C.enabled && b.renderStackTotals(); - b.isDirty = !1; - }, - redraw: function() { - this.visible && - (this.render(), - e(this.plotLinesAndBands, function(a) { - a.render(); - })); - e(this.series, function(a) { - a.isDirty = !0; - }); - }, - keepProps: 'extKey hcEvents names series userMax userMin'.split(' '), - destroy: function(a) { - var b = this, - c = b.stacks, - d = b.plotLinesAndBands, - g; - a || N(b); - t(c, function(a, b) { - u(a); - c[b] = null; - }); - e([b.ticks, b.minorTicks, b.alternateBands], function(a) { - u(a); - }); - if (d) for (a = d.length; a--; ) d[a].destroy(); - e( - 'stackTotalGroup axisLine axisTitle axisGroup gridGroup labelGroup cross'.split( - ' ', - ), - function(a) { - b[a] && (b[a] = b[a].destroy()); - }, - ); - for (g in b.plotLinesAndBandsGroups) - b.plotLinesAndBandsGroups[g] = b.plotLinesAndBandsGroups[g].destroy(); - t(b, function(a, c) { - -1 === k(c, b.keepProps) && delete b[c]; - }); - }, - drawCrosshair: function(a, b) { - var c, - d = this.crosshair, - g = C(d.snap, !0), - k, - q = this.cross; - a || (a = this.cross && this.cross.e); - this.crosshair && !1 !== (n(b) || !g) - ? (g - ? n(b) && (k = this.isXAxis ? b.plotX : this.len - b.plotY) - : (k = - a && - (this.horiz - ? a.chartX - this.pos - : this.len - a.chartY + this.pos)), - n(k) && - (c = - this.getPlotLinePath( - b && (this.isXAxis ? b.x : C(b.stackY, b.y)), - null, - null, - null, - k, - ) || null), - n(c) - ? ((b = this.categories && !this.isRadial), - q || - ((this.cross = q = this.chart.renderer - .path() - .addClass( - 'highcharts-crosshair highcharts-crosshair-' + - (b ? 'category ' : 'thin ') + - d.className, - ) - .attr({ zIndex: C(d.zIndex, 2) }) - .add()), - q - .attr({ - stroke: - d.color || - (b - ? f('#ccd6eb') - .setOpacity(0.25) - .get() - : '#cccccc'), - 'stroke-width': C(d.width, 1), - }) - .css({ 'pointer-events': 'none' }), - d.dashStyle && q.attr({ dashstyle: d.dashStyle })), - q.show().attr({ d: c }), - b && !d.width && q.attr({ 'stroke-width': this.transA }), - (this.cross.e = a)) - : this.hideCrosshair()) - : this.hideCrosshair(); - }, - hideCrosshair: function() { - this.cross && this.cross.hide(); - }, - }); - return (a.Axis = G); - })(M); - (function(a) { - var E = a.Axis, - D = a.Date, - H = a.dateFormat, - p = a.defaultOptions, - f = a.defined, - l = a.each, - r = a.extend, - n = a.getMagnitude, - w = a.getTZOffset, - u = a.normalizeTickInterval, - e = a.pick, - h = a.timeUnits; - E.prototype.getTimeTicks = function(a, d, c, b) { - var k = [], - m = {}, - B = p.global.useUTC, - n, - x = new D(d - Math.max(w(d), w(c))), - u = D.hcMakeTime, - t = a.unitRange, - C = a.count, - N, - q; - if (f(d)) { - x[D.hcSetMilliseconds]( - t >= h.second ? 0 : C * Math.floor(x.getMilliseconds() / C), - ); - if (t >= h.second) - x[D.hcSetSeconds]( - t >= h.minute ? 0 : C * Math.floor(x.getSeconds() / C), - ); - if (t >= h.minute) - x[D.hcSetMinutes]( - t >= h.hour ? 0 : C * Math.floor(x[D.hcGetMinutes]() / C), - ); - if (t >= h.hour) - x[D.hcSetHours]( - t >= h.day ? 0 : C * Math.floor(x[D.hcGetHours]() / C), - ); - if (t >= h.day) - x[D.hcSetDate]( - t >= h.month ? 1 : C * Math.floor(x[D.hcGetDate]() / C), - ); - t >= h.month && - (x[D.hcSetMonth]( - t >= h.year ? 0 : C * Math.floor(x[D.hcGetMonth]() / C), - ), - (n = x[D.hcGetFullYear]())); - if (t >= h.year) x[D.hcSetFullYear](n - (n % C)); - if (t === h.week) - x[D.hcSetDate](x[D.hcGetDate]() - x[D.hcGetDay]() + e(b, 1)); - n = x[D.hcGetFullYear](); - b = x[D.hcGetMonth](); - var A = x[D.hcGetDate](), - F = x[D.hcGetHours](); - d = x.getTime(); - D.hcHasTimeZone && - ((q = - (!B || !!D.hcGetTimezoneOffset) && - (c - d > 4 * h.month || w(d) !== w(c))), - (N = w(x)), - (x = new D(d + N))); - B = x.getTime(); - for (d = 1; B < c; ) - k.push(B), - (B = - t === h.year - ? u(n + d * C, 0) - : t === h.month - ? u(n, b + d * C) - : !q || (t !== h.day && t !== h.week) - ? q && t === h.hour - ? u(n, b, A, F + d * C, 0, 0, N) - N - : B + t * C - : u(n, b, A + d * C * (t === h.day ? 1 : 7))), - d++; - k.push(B); - t <= h.hour && - 1e4 > k.length && - l(k, function(a) { - 0 === a % 18e5 && - '000000000' === H('%H%M%S%L', a) && - (m[a] = 'day'); - }); - } - k.info = r(a, { higherRanks: m, totalRange: t * C }); - return k; - }; - E.prototype.normalizeTimeTickInterval = function(a, d) { - var c = d || [ - ['millisecond', [1, 2, 5, 10, 20, 25, 50, 100, 200, 500]], - ['second', [1, 2, 5, 10, 15, 30]], - ['minute', [1, 2, 5, 10, 15, 30]], - ['hour', [1, 2, 3, 4, 6, 8, 12]], - ['day', [1, 2]], - ['week', [1, 2]], - ['month', [1, 2, 3, 4, 6]], - ['year', null], - ]; - d = c[c.length - 1]; - var b = h[d[0]], - k = d[1], - e; - for ( - e = 0; - e < c.length && - !((d = c[e]), - (b = h[d[0]]), - (k = d[1]), - c[e + 1] && a <= (b * k[k.length - 1] + h[c[e + 1][0]]) / 2); - e++ - ); - b === h.year && a < 5 * b && (k = [1, 2, 5]); - a = u(a / b, k, 'year' === d[0] ? Math.max(n(a / b), 1) : 1); - return { unitRange: b, count: a, unitName: d[0] }; - }; - })(M); - (function(a) { - var E = a.Axis, - D = a.getMagnitude, - H = a.map, - p = a.normalizeTickInterval, - f = a.pick; - E.prototype.getLogTickPositions = function(a, r, n, w) { - var l = this.options, - e = this.len, - h = this.lin2log, - m = this.log2lin, - d = []; - w || (this._minorAutoInterval = null); - if (0.5 <= a) - (a = Math.round(a)), (d = this.getLinearTickPositions(a, r, n)); - else if (0.08 <= a) - for ( - var e = Math.floor(r), - c, - b, - k, - z, - B, - l = - 0.3 < a - ? [1, 2, 4] - : 0.15 < a - ? [1, 2, 4, 6, 8] - : [1, 2, 3, 4, 5, 6, 7, 8, 9]; - e < n + 1 && !B; - e++ - ) - for (b = l.length, c = 0; c < b && !B; c++) - (k = m(h(e) * l[c])), - k > r && (!w || z <= n) && void 0 !== z && d.push(z), - z > n && (B = !0), - (z = k); - else - (r = h(r)), - (n = h(n)), - (a = w ? this.getMinorTickInterval() : l.tickInterval), - (a = f( - 'auto' === a ? null : a, - this._minorAutoInterval, - ((l.tickPixelInterval / (w ? 5 : 1)) * (n - r)) / - ((w ? e / this.tickPositions.length : e) || 1), - )), - (a = p(a, null, D(a))), - (d = H(this.getLinearTickPositions(a, r, n), m)), - w || (this._minorAutoInterval = a / 5); - w || (this.tickInterval = a); - return d; - }; - E.prototype.log2lin = function(a) { - return Math.log(a) / Math.LN10; - }; - E.prototype.lin2log = function(a) { - return Math.pow(10, a); - }; - })(M); - (function(a, E) { - var D = a.arrayMax, - H = a.arrayMin, - p = a.defined, - f = a.destroyObjectProperties, - l = a.each, - r = a.erase, - n = a.merge, - w = a.pick; - a.PlotLineOrBand = function(a, e) { - this.axis = a; - e && ((this.options = e), (this.id = e.id)); - }; - a.PlotLineOrBand.prototype = { - render: function() { - var f = this, - e = f.axis, - h = e.horiz, - m = f.options, - d = m.label, - c = f.label, - b = m.to, - k = m.from, - z = m.value, - l = p(k) && p(b), - r = p(z), - x = f.svgElem, - K = !x, - t = [], - C = m.color, - N = w(m.zIndex, 0), - q = m.events, - t = { - class: - 'highcharts-plot-' + - (l ? 'band ' : 'line ') + - (m.className || ''), - }, - A = {}, - F = e.chart.renderer, - G = l ? 'bands' : 'lines', - g = e.log2lin; - e.isLog && ((k = g(k)), (b = g(b)), (z = g(z))); - r - ? ((t = { stroke: C, 'stroke-width': m.width }), - m.dashStyle && (t.dashstyle = m.dashStyle)) - : l && - (C && (t.fill = C), - m.borderWidth && - ((t.stroke = m.borderColor), - (t['stroke-width'] = m.borderWidth))); - A.zIndex = N; - G += '-' + N; - (C = e.plotLinesAndBandsGroups[G]) || - (e.plotLinesAndBandsGroups[G] = C = F.g('plot-' + G) - .attr(A) - .add()); - K && - (f.svgElem = x = F.path() - .attr(t) - .add(C)); - if (r) t = e.getPlotLinePath(z, x.strokeWidth()); - else if (l) t = e.getPlotBandPath(k, b, m); - else return; - K && t && t.length - ? (x.attr({ d: t }), - q && - a.objectEach(q, function(a, b) { - x.on(b, function(a) { - q[b].apply(f, [a]); - }); - })) - : x && - (t - ? (x.show(), x.animate({ d: t })) - : (x.hide(), c && (f.label = c = c.destroy()))); - d && - p(d.text) && - t && - t.length && - 0 < e.width && - 0 < e.height && - !t.flat - ? ((d = n( - { - align: h && l && 'center', - x: h ? !l && 4 : 10, - verticalAlign: !h && l && 'middle', - y: h ? (l ? 16 : 10) : l ? 6 : -4, - rotation: h && !l && 90, - }, - d, - )), - this.renderLabel(d, t, l, N)) - : c && c.hide(); - return f; - }, - renderLabel: function(a, e, h, m) { - var d = this.label, - c = this.axis.chart.renderer; - d || - ((d = { - align: a.textAlign || a.align, - rotation: a.rotation, - class: - 'highcharts-plot-' + - (h ? 'band' : 'line') + - '-label ' + - (a.className || ''), - }), - (d.zIndex = m), - (this.label = d = c - .text(a.text, 0, 0, a.useHTML) - .attr(d) - .add()), - d.css(a.style)); - m = e.xBounds || [e[1], e[4], h ? e[6] : e[1]]; - e = e.yBounds || [e[2], e[5], h ? e[7] : e[2]]; - h = H(m); - c = H(e); - d.align(a, !1, { x: h, y: c, width: D(m) - h, height: D(e) - c }); - d.show(); - }, - destroy: function() { - r(this.axis.plotLinesAndBands, this); - delete this.axis; - f(this); - }, - }; - a.extend(E.prototype, { - getPlotBandPath: function(a, e) { - var h = this.getPlotLinePath(e, null, null, !0), - m = this.getPlotLinePath(a, null, null, !0), - d = [], - c = this.horiz, - b = 1, - k; - a = (a < this.min && e < this.min) || (a > this.max && e > this.max); - if (m && h) - for ( - a && ((k = m.toString() === h.toString()), (b = 0)), a = 0; - a < m.length; - a += 6 - ) - c && h[a + 1] === m[a + 1] - ? ((h[a + 1] += b), (h[a + 4] += b)) - : c || - h[a + 2] !== m[a + 2] || - ((h[a + 2] += b), (h[a + 5] += b)), - d.push( - 'M', - m[a + 1], - m[a + 2], - 'L', - m[a + 4], - m[a + 5], - h[a + 4], - h[a + 5], - h[a + 1], - h[a + 2], - 'z', - ), - (d.flat = k); - return d; - }, - addPlotBand: function(a) { - return this.addPlotBandOrLine(a, 'plotBands'); - }, - addPlotLine: function(a) { - return this.addPlotBandOrLine(a, 'plotLines'); - }, - addPlotBandOrLine: function(f, e) { - var h = new a.PlotLineOrBand(this, f).render(), - m = this.userOptions; - h && - (e && ((m[e] = m[e] || []), m[e].push(f)), - this.plotLinesAndBands.push(h)); - return h; - }, - removePlotBandOrLine: function(a) { - for ( - var e = this.plotLinesAndBands, - h = this.options, - m = this.userOptions, - d = e.length; - d--; - - ) - e[d].id === a && e[d].destroy(); - l( - [ - h.plotLines || [], - m.plotLines || [], - h.plotBands || [], - m.plotBands || [], - ], - function(c) { - for (d = c.length; d--; ) c[d].id === a && r(c, c[d]); - }, - ); - }, - removePlotBand: function(a) { - this.removePlotBandOrLine(a); - }, - removePlotLine: function(a) { - this.removePlotBandOrLine(a); - }, - }); - })(M, V); - (function(a) { - var E = a.dateFormat, - D = a.each, - H = a.extend, - p = a.format, - f = a.isNumber, - l = a.map, - r = a.merge, - n = a.pick, - w = a.splat, - u = a.syncTimeout, - e = a.timeUnits; - a.Tooltip = function() { - this.init.apply(this, arguments); - }; - a.Tooltip.prototype = { - init: function(a, e) { - this.chart = a; - this.options = e; - this.crosshairs = []; - this.now = { x: 0, y: 0 }; - this.isHidden = !0; - this.split = e.split && !a.inverted; - this.shared = e.shared || this.split; - }, - cleanSplit: function(a) { - D(this.chart.series, function(e) { - var d = e && e.tt; - d && (!d.isActive || a ? (e.tt = d.destroy()) : (d.isActive = !1)); - }); - }, - getLabel: function() { - var a = this.chart.renderer, - e = this.options; - this.label || - (this.split - ? (this.label = a.g('tooltip')) - : ((this.label = a - .label( - '', - 0, - 0, - e.shape || 'callout', - null, - null, - e.useHTML, - null, - 'tooltip', - ) - .attr({ padding: e.padding, r: e.borderRadius })), - this.label - .attr({ - fill: e.backgroundColor, - 'stroke-width': e.borderWidth, - }) - .css(e.style) - .shadow(e.shadow)), - this.label.attr({ zIndex: 8 }).add()); - return this.label; - }, - update: function(a) { - this.destroy(); - r(!0, this.chart.options.tooltip.userOptions, a); - this.init(this.chart, r(!0, this.options, a)); - }, - destroy: function() { - this.label && (this.label = this.label.destroy()); - this.split && - this.tt && - (this.cleanSplit(this.chart, !0), (this.tt = this.tt.destroy())); - clearTimeout(this.hideTimer); - clearTimeout(this.tooltipTimeout); - }, - move: function(a, e, d, c) { - var b = this, - k = b.now, - h = - !1 !== b.options.animation && - !b.isHidden && - (1 < Math.abs(a - k.x) || 1 < Math.abs(e - k.y)), - m = b.followPointer || 1 < b.len; - H(k, { - x: h ? (2 * k.x + a) / 3 : a, - y: h ? (k.y + e) / 2 : e, - anchorX: m ? void 0 : h ? (2 * k.anchorX + d) / 3 : d, - anchorY: m ? void 0 : h ? (k.anchorY + c) / 2 : c, - }); - b.getLabel().attr(k); - h && - (clearTimeout(this.tooltipTimeout), - (this.tooltipTimeout = setTimeout(function() { - b && b.move(a, e, d, c); - }, 32))); - }, - hide: function(a) { - var e = this; - clearTimeout(this.hideTimer); - a = n(a, this.options.hideDelay, 500); - this.isHidden || - (this.hideTimer = u(function() { - e.getLabel()[a ? 'fadeOut' : 'hide'](); - e.isHidden = !0; - }, a)); - }, - getAnchor: function(a, e) { - var d, - c = this.chart, - b = c.inverted, - k = c.plotTop, - h = c.plotLeft, - m = 0, - f = 0, - x, - n; - a = w(a); - d = a[0].tooltipPos; - this.followPointer && - e && - (void 0 === e.chartX && (e = c.pointer.normalize(e)), - (d = [e.chartX - c.plotLeft, e.chartY - k])); - d || - (D(a, function(a) { - x = a.series.yAxis; - n = a.series.xAxis; - m += a.plotX + (!b && n ? n.left - h : 0); - f += - (a.plotLow ? (a.plotLow + a.plotHigh) / 2 : a.plotY) + - (!b && x ? x.top - k : 0); - }), - (m /= a.length), - (f /= a.length), - (d = [ - b ? c.plotWidth - f : m, - this.shared && !b && 1 < a.length && e - ? e.chartY - k - : b - ? c.plotHeight - m - : f, - ])); - return l(d, Math.round); - }, - getPosition: function(a, e, d) { - var c = this.chart, - b = this.distance, - k = {}, - h = (c.inverted && d.h) || 0, - m, - f = [ - 'y', - c.chartHeight, - e, - d.plotY + c.plotTop, - c.plotTop, - c.plotTop + c.plotHeight, - ], - x = [ - 'x', - c.chartWidth, - a, - d.plotX + c.plotLeft, - c.plotLeft, - c.plotLeft + c.plotWidth, - ], - l = !this.followPointer && n(d.ttBelow, !c.inverted === !!d.negative), - t = function(a, c, d, g, e, q) { - var m = d < g - b, - z = g + b + d < c, - A = g - b - d; - g += b; - if (l && z) k[a] = g; - else if (!l && m) k[a] = A; - else if (m) k[a] = Math.min(q - d, 0 > A - h ? A : A - h); - else if (z) k[a] = Math.max(e, g + h + d > c ? g : g + h); - else return !1; - }, - C = function(a, c, d, g) { - var e; - g < b || g > c - b - ? (e = !1) - : (k[a] = g < d / 2 ? 1 : g > c - d / 2 ? c - d - 2 : g - d / 2); - return e; - }, - p = function(a) { - var b = f; - f = x; - x = b; - m = a; - }, - q = function() { - !1 !== t.apply(0, f) - ? !1 !== C.apply(0, x) || m || (p(!0), q()) - : m - ? (k.x = k.y = 0) - : (p(!0), q()); - }; - (c.inverted || 1 < this.len) && p(); - q(); - return k; - }, - defaultFormatter: function(a) { - var e = this.points || w(this), - d; - d = [a.tooltipFooterHeaderFormatter(e[0])]; - d = d.concat(a.bodyFormatter(e)); - d.push(a.tooltipFooterHeaderFormatter(e[0], !0)); - return d; - }, - refresh: function(a, e) { - var d, - c = this.options, - b, - k = a, - h, - m = {}, - f = []; - d = c.formatter || this.defaultFormatter; - var m = this.shared, - x; - c.enabled && - (clearTimeout(this.hideTimer), - (this.followPointer = w(k)[0].series.tooltipOptions.followPointer), - (h = this.getAnchor(k, e)), - (e = h[0]), - (b = h[1]), - !m || (k.series && k.series.noSharedTooltip) - ? (m = k.getLabelConfig()) - : (D(k, function(a) { - a.setState('hover'); - f.push(a.getLabelConfig()); - }), - (m = { x: k[0].category, y: k[0].y }), - (m.points = f), - (k = k[0])), - (this.len = f.length), - (m = d.call(m, this)), - (x = k.series), - (this.distance = n(x.tooltipOptions.distance, 16)), - !1 === m - ? this.hide() - : ((d = this.getLabel()), - this.isHidden && d.attr({ opacity: 1 }).show(), - this.split - ? this.renderSplit(m, w(a)) - : (c.style.width || - d.css({ width: this.chart.spacingBox.width }), - d.attr({ text: m && m.join ? m.join('') : m }), - d - .removeClass(/highcharts-color-[\d]+/g) - .addClass( - 'highcharts-color-' + n(k.colorIndex, x.colorIndex), - ), - d.attr({ - stroke: c.borderColor || k.color || x.color || '#666666', - }), - this.updatePosition({ - plotX: e, - plotY: b, - negative: k.negative, - ttBelow: k.ttBelow, - h: h[2] || 0, - })), - (this.isHidden = !1))); - }, - renderSplit: function(e, m) { - var d = this, - c = [], - b = this.chart, - k = b.renderer, - h = !0, - f = this.options, - l = 0, - x = this.getLabel(); - a.isString(e) && (e = [!1, e]); - D(e.slice(0, m.length + 1), function(a, e) { - if (!1 !== a) { - e = m[e - 1] || { isHeader: !0, plotX: m[0].plotX }; - var z = e.series || d, - t = z.tt, - q = e.series || {}, - A = 'highcharts-color-' + n(e.colorIndex, q.colorIndex, 'none'); - t || - (z.tt = t = k - .label(null, null, null, 'callout', null, null, f.useHTML) - .addClass('highcharts-tooltip-box ' + A) - .attr({ - padding: f.padding, - r: f.borderRadius, - fill: f.backgroundColor, - stroke: f.borderColor || e.color || q.color || '#333333', - 'stroke-width': f.borderWidth, - }) - .add(x)); - t.isActive = !0; - t.attr({ text: a }); - t.css(f.style).shadow(f.shadow); - a = t.getBBox(); - q = a.width + t.strokeWidth(); - e.isHeader - ? ((l = a.height), - (q = Math.max( - 0, - Math.min(e.plotX + b.plotLeft - q / 2, b.chartWidth - q), - ))) - : (q = e.plotX + b.plotLeft - n(f.distance, 16) - q); - 0 > q && (h = !1); - a = - (e.series && e.series.yAxis && e.series.yAxis.pos) + - (e.plotY || 0); - a -= b.plotTop; - c.push({ - target: e.isHeader ? b.plotHeight + l : a, - rank: e.isHeader ? 1 : 0, - size: z.tt.getBBox().height + 1, - point: e, - x: q, - tt: t, - }); - } - }); - this.cleanSplit(); - a.distribute(c, b.plotHeight + l); - D(c, function(a) { - var c = a.point, - d = c.series; - a.tt.attr({ - visibility: void 0 === a.pos ? 'hidden' : 'inherit', - x: h || c.isHeader ? a.x : c.plotX + b.plotLeft + n(f.distance, 16), - y: a.pos + b.plotTop, - anchorX: c.isHeader ? c.plotX + b.plotLeft : c.plotX + d.xAxis.pos, - anchorY: c.isHeader - ? a.pos + b.plotTop - 15 - : c.plotY + d.yAxis.pos, - }); - }); - }, - updatePosition: function(a) { - var e = this.chart, - d = this.getLabel(), - d = (this.options.positioner || this.getPosition).call( - this, - d.width, - d.height, - a, - ); - this.move( - Math.round(d.x), - Math.round(d.y || 0), - a.plotX + e.plotLeft, - a.plotY + e.plotTop, - ); - }, - getDateFormat: function(a, m, d, c) { - var b = E('%m-%d %H:%M:%S.%L', m), - k, - h, - f = { millisecond: 15, second: 12, minute: 9, hour: 6, day: 3 }, - l = 'millisecond'; - for (h in e) { - if ( - a === e.week && - +E('%w', m) === d && - '00:00:00.000' === b.substr(6) - ) { - h = 'week'; - break; - } - if (e[h] > a) { - h = l; - break; - } - if (f[h] && b.substr(f[h]) !== '01-01 00:00:00.000'.substr(f[h])) - break; - 'week' !== h && (l = h); - } - h && (k = c[h]); - return k; - }, - getXDateFormat: function(a, e, d) { - e = e.dateTimeLabelFormats; - var c = d && d.closestPointRange; - return ( - (c ? this.getDateFormat(c, a.x, d.options.startOfWeek, e) : e.day) || - e.year - ); - }, - tooltipFooterHeaderFormatter: function(a, e) { - e = e ? 'footer' : 'header'; - var d = a.series, - c = d.tooltipOptions, - b = c.xDateFormat, - k = d.xAxis, - h = k && 'datetime' === k.options.type && f(a.key), - m = c[e + 'Format']; - h && !b && (b = this.getXDateFormat(a, c, k)); - h && - b && - D((a.point && a.point.tooltipDateKeys) || ['key'], function(a) { - m = m.replace('{point.' + a + '}', '{point.' + a + ':' + b + '}'); - }); - return p(m, { point: a, series: d }); - }, - bodyFormatter: function(a) { - return l(a, function(a) { - var d = a.series.tooltipOptions; - return ( - d[(a.point.formatPrefix || 'point') + 'Formatter'] || - a.point.tooltipFormatter - ).call(a.point, d[(a.point.formatPrefix || 'point') + 'Format']); - }); - }, - }; - })(M); - (function(a) { - var E = a.addEvent, - D = a.attr, - H = a.charts, - p = a.color, - f = a.css, - l = a.defined, - r = a.each, - n = a.extend, - w = a.find, - u = a.fireEvent, - e = a.isObject, - h = a.offset, - m = a.pick, - d = a.splat, - c = a.Tooltip; - a.Pointer = function(a, c) { - this.init(a, c); - }; - a.Pointer.prototype = { - init: function(a, d) { - this.options = d; - this.chart = a; - this.runChartClick = d.chart.events && !!d.chart.events.click; - this.pinchDown = []; - this.lastValidTouch = {}; - c && - ((a.tooltip = new c(a, d.tooltip)), - (this.followTouchMove = m(d.tooltip.followTouchMove, !0))); - this.setDOMEvents(); - }, - zoomOption: function(a) { - var b = this.chart, - c = b.options.chart, - d = c.zoomType || '', - b = b.inverted; - /touch/.test(a.type) && (d = m(c.pinchType, d)); - this.zoomX = a = /x/.test(d); - this.zoomY = d = /y/.test(d); - this.zoomHor = (a && !b) || (d && b); - this.zoomVert = (d && !b) || (a && b); - this.hasZoom = a || d; - }, - normalize: function(a, c) { - var b; - b = a.touches - ? a.touches.length - ? a.touches.item(0) - : a.changedTouches[0] - : a; - c || (this.chartPosition = c = h(this.chart.container)); - return n(a, { - chartX: Math.round(b.pageX - c.left), - chartY: Math.round(b.pageY - c.top), - }); - }, - getCoordinates: function(a) { - var b = { xAxis: [], yAxis: [] }; - r(this.chart.axes, function(c) { - b[c.isXAxis ? 'xAxis' : 'yAxis'].push({ - axis: c, - value: c.toValue(a[c.horiz ? 'chartX' : 'chartY']), - }); - }); - return b; - }, - findNearestKDPoint: function(a, c, d) { - var b; - r(a, function(a) { - var k = - !(a.noSharedTooltip && c) && - 0 > a.options.findNearestPointBy.indexOf('y'); - a = a.searchPoint(d, k); - if ((k = e(a, !0)) && !(k = !e(b, !0))) - var k = b.distX - a.distX, - h = b.dist - a.dist, - m = - (a.series.group && a.series.group.zIndex) - - (b.series.group && b.series.group.zIndex), - k = - 0 < - (0 !== k && c - ? k - : 0 !== h - ? h - : 0 !== m - ? m - : b.series.index > a.series.index - ? -1 - : 1); - k && (b = a); - }); - return b; - }, - getPointFromEvent: function(a) { - a = a.target; - for (var b; a && !b; ) (b = a.point), (a = a.parentNode); - return b; - }, - getChartCoordinatesFromPoint: function(a, c) { - var b = a.series, - d = b.xAxis, - b = b.yAxis, - k = m(a.clientX, a.plotX); - if (d && b) - return c - ? { chartX: d.len + d.pos - k, chartY: b.len + b.pos - a.plotY } - : { chartX: k + d.pos, chartY: a.plotY + b.pos }; - }, - getHoverData: function(b, c, d, h, f, l, n) { - var k, - z = [], - x = n && n.isBoosting; - h = !(!h || !b); - n = - c && !c.stickyTracking - ? [c] - : a.grep(d, function(a) { - return ( - a.visible && - !(!f && a.directTouch) && - m(a.options.enableMouseTracking, !0) && - a.stickyTracking - ); - }); - c = (k = h ? b : this.findNearestKDPoint(n, f, l)) && k.series; - k && - (f && !c.noSharedTooltip - ? ((n = a.grep(d, function(a) { - return ( - a.visible && - !(!f && a.directTouch) && - m(a.options.enableMouseTracking, !0) && - !a.noSharedTooltip - ); - })), - r(n, function(a) { - var b = w(a.points, function(a) { - return a.x === k.x && !a.isNull; - }); - e(b) && (x && (b = a.getPoint(b)), z.push(b)); - })) - : z.push(k)); - return { hoverPoint: k, hoverSeries: c, hoverPoints: z }; - }, - runPointActions: function(b, c) { - var d = this.chart, - k = d.tooltip && d.tooltip.options.enabled ? d.tooltip : void 0, - e = k ? k.shared : !1, - h = c || d.hoverPoint, - f = (h && h.series) || d.hoverSeries, - f = this.getHoverData( - h, - f, - d.series, - !!c || (f && f.directTouch && this.isDirectTouch), - e, - b, - { isBoosting: d.isBoosting }, - ), - l, - h = f.hoverPoint; - l = f.hoverPoints; - c = (f = f.hoverSeries) && f.tooltipOptions.followPointer; - e = e && f && !f.noSharedTooltip; - if (h && (h !== d.hoverPoint || (k && k.isHidden))) { - r(d.hoverPoints || [], function(b) { - -1 === a.inArray(b, l) && b.setState(); - }); - r(l || [], function(a) { - a.setState('hover'); - }); - if (d.hoverSeries !== f) f.onMouseOver(); - d.hoverPoint && d.hoverPoint.firePointEvent('mouseOut'); - if (!h.series) return; - h.firePointEvent('mouseOver'); - d.hoverPoints = l; - d.hoverPoint = h; - k && k.refresh(e ? l : h, b); - } else - c && - k && - !k.isHidden && - ((h = k.getAnchor([{}], b)), - k.updatePosition({ plotX: h[0], plotY: h[1] })); - this.unDocMouseMove || - (this.unDocMouseMove = E( - d.container.ownerDocument, - 'mousemove', - function(b) { - var c = H[a.hoverChartIndex]; - if (c) c.pointer.onDocumentMouseMove(b); - }, - )); - r(d.axes, function(c) { - var d = m(c.crosshair.snap, !0), - k = d - ? a.find(l, function(a) { - return a.series[c.coll] === c; - }) - : void 0; - k || !d ? c.drawCrosshair(b, k) : c.hideCrosshair(); - }); - }, - reset: function(a, c) { - var b = this.chart, - k = b.hoverSeries, - e = b.hoverPoint, - h = b.hoverPoints, - m = b.tooltip, - f = m && m.shared ? h : e; - a && - f && - r(d(f), function(b) { - b.series.isCartesian && void 0 === b.plotX && (a = !1); - }); - if (a) - m && - f && - (m.refresh(f), - e && - (e.setState(e.state, !0), - r(b.axes, function(a) { - a.crosshair && a.drawCrosshair(null, e); - }))); - else { - if (e) e.onMouseOut(); - h && - r(h, function(a) { - a.setState(); - }); - if (k) k.onMouseOut(); - m && m.hide(c); - this.unDocMouseMove && (this.unDocMouseMove = this.unDocMouseMove()); - r(b.axes, function(a) { - a.hideCrosshair(); - }); - this.hoverX = b.hoverPoints = b.hoverPoint = null; - } - }, - scaleGroups: function(a, c) { - var b = this.chart, - d; - r(b.series, function(k) { - d = a || k.getPlotBox(); - k.xAxis && - k.xAxis.zoomEnabled && - k.group && - (k.group.attr(d), - k.markerGroup && - (k.markerGroup.attr(d), - k.markerGroup.clip(c ? b.clipRect : null)), - k.dataLabelsGroup && k.dataLabelsGroup.attr(d)); - }); - b.clipRect.attr(c || b.clipBox); - }, - dragStart: function(a) { - var b = this.chart; - b.mouseIsDown = a.type; - b.cancelClick = !1; - b.mouseDownX = this.mouseDownX = a.chartX; - b.mouseDownY = this.mouseDownY = a.chartY; - }, - drag: function(a) { - var b = this.chart, - c = b.options.chart, - d = a.chartX, - e = a.chartY, - h = this.zoomHor, - m = this.zoomVert, - f = b.plotLeft, - l = b.plotTop, - n = b.plotWidth, - q = b.plotHeight, - A, - F = this.selectionMarker, - G = this.mouseDownX, - g = this.mouseDownY, - v = c.panKey && a[c.panKey + 'Key']; - (F && F.touch) || - (d < f ? (d = f) : d > f + n && (d = f + n), - e < l ? (e = l) : e > l + q && (e = l + q), - (this.hasDragged = Math.sqrt( - Math.pow(G - d, 2) + Math.pow(g - e, 2), - )), - 10 < this.hasDragged && - ((A = b.isInsidePlot(G - f, g - l)), - b.hasCartesianSeries && - (this.zoomX || this.zoomY) && - A && - !v && - !F && - (this.selectionMarker = F = b.renderer - .rect(f, l, h ? 1 : n, m ? 1 : q, 0) - .attr({ - fill: - c.selectionMarkerFill || - p('#335cad') - .setOpacity(0.25) - .get(), - class: 'highcharts-selection-marker', - zIndex: 7, - }) - .add()), - F && - h && - ((d -= G), - F.attr({ width: Math.abs(d), x: (0 < d ? 0 : d) + G })), - F && - m && - ((d = e - g), - F.attr({ height: Math.abs(d), y: (0 < d ? 0 : d) + g })), - A && !F && c.panning && b.pan(a, c.panning))); - }, - drop: function(a) { - var b = this, - c = this.chart, - d = this.hasPinched; - if (this.selectionMarker) { - var e = { originalEvent: a, xAxis: [], yAxis: [] }, - h = this.selectionMarker, - m = h.attr ? h.attr('x') : h.x, - t = h.attr ? h.attr('y') : h.y, - p = h.attr ? h.attr('width') : h.width, - w = h.attr ? h.attr('height') : h.height, - q; - if (this.hasDragged || d) - r(c.axes, function(c) { - if ( - c.zoomEnabled && - l(c.min) && - (d || b[{ xAxis: 'zoomX', yAxis: 'zoomY' }[c.coll]]) - ) { - var k = c.horiz, - h = 'touchend' === a.type ? c.minPixelPadding : 0, - g = c.toValue((k ? m : t) + h), - k = c.toValue((k ? m + p : t + w) - h); - e[c.coll].push({ - axis: c, - min: Math.min(g, k), - max: Math.max(g, k), - }); - q = !0; - } - }), - q && - u(c, 'selection', e, function(a) { - c.zoom(n(a, d ? { animation: !1 } : null)); - }); - this.selectionMarker = this.selectionMarker.destroy(); - d && this.scaleGroups(); - } - c && - (f(c.container, { cursor: c._cursor }), - (c.cancelClick = 10 < this.hasDragged), - (c.mouseIsDown = this.hasDragged = this.hasPinched = !1), - (this.pinchDown = [])); - }, - onContainerMouseDown: function(a) { - 2 !== a.button && - ((a = this.normalize(a)), - this.zoomOption(a), - a.preventDefault && a.preventDefault(), - this.dragStart(a)); - }, - onDocumentMouseUp: function(b) { - H[a.hoverChartIndex] && H[a.hoverChartIndex].pointer.drop(b); - }, - onDocumentMouseMove: function(a) { - var b = this.chart, - c = this.chartPosition; - a = this.normalize(a, c); - !c || - this.inClass(a.target, 'highcharts-tracker') || - b.isInsidePlot(a.chartX - b.plotLeft, a.chartY - b.plotTop) || - this.reset(); - }, - onContainerMouseLeave: function(b) { - var c = H[a.hoverChartIndex]; - c && - (b.relatedTarget || b.toElement) && - (c.pointer.reset(), (c.pointer.chartPosition = null)); - }, - onContainerMouseMove: function(b) { - var c = this.chart; - (l(a.hoverChartIndex) && - H[a.hoverChartIndex] && - H[a.hoverChartIndex].mouseIsDown) || - (a.hoverChartIndex = c.index); - b = this.normalize(b); - b.returnValue = !1; - 'mousedown' === c.mouseIsDown && this.drag(b); - (!this.inClass(b.target, 'highcharts-tracker') && - !c.isInsidePlot(b.chartX - c.plotLeft, b.chartY - c.plotTop)) || - c.openMenu || - this.runPointActions(b); - }, - inClass: function(a, c) { - for (var b; a; ) { - if ((b = D(a, 'class'))) { - if (-1 !== b.indexOf(c)) return !0; - if (-1 !== b.indexOf('highcharts-container')) return !1; - } - a = a.parentNode; - } - }, - onTrackerMouseOut: function(a) { - var b = this.chart.hoverSeries; - a = a.relatedTarget || a.toElement; - this.isDirectTouch = !1; - if ( - !( - !b || - !a || - b.stickyTracking || - this.inClass(a, 'highcharts-tooltip') || - (this.inClass(a, 'highcharts-series-' + b.index) && - this.inClass(a, 'highcharts-tracker')) - ) - ) - b.onMouseOut(); - }, - onContainerClick: function(a) { - var b = this.chart, - c = b.hoverPoint, - d = b.plotLeft, - e = b.plotTop; - a = this.normalize(a); - b.cancelClick || - (c && this.inClass(a.target, 'highcharts-tracker') - ? (u(c.series, 'click', n(a, { point: c })), - b.hoverPoint && c.firePointEvent('click', a)) - : (n(a, this.getCoordinates(a)), - b.isInsidePlot(a.chartX - d, a.chartY - e) && u(b, 'click', a))); - }, - setDOMEvents: function() { - var b = this, - c = b.chart.container, - d = c.ownerDocument; - c.onmousedown = function(a) { - b.onContainerMouseDown(a); - }; - c.onmousemove = function(a) { - b.onContainerMouseMove(a); - }; - c.onclick = function(a) { - b.onContainerClick(a); - }; - this.unbindContainerMouseLeave = E( - c, - 'mouseleave', - b.onContainerMouseLeave, - ); - a.unbindDocumentMouseUp || - (a.unbindDocumentMouseUp = E(d, 'mouseup', b.onDocumentMouseUp)); - a.hasTouch && - ((c.ontouchstart = function(a) { - b.onContainerTouchStart(a); - }), - (c.ontouchmove = function(a) { - b.onContainerTouchMove(a); - }), - a.unbindDocumentTouchEnd || - (a.unbindDocumentTouchEnd = E( - d, - 'touchend', - b.onDocumentTouchEnd, - ))); - }, - destroy: function() { - var b = this; - b.unDocMouseMove && b.unDocMouseMove(); - this.unbindContainerMouseLeave(); - a.chartCount || - (a.unbindDocumentMouseUp && - (a.unbindDocumentMouseUp = a.unbindDocumentMouseUp()), - a.unbindDocumentTouchEnd && - (a.unbindDocumentTouchEnd = a.unbindDocumentTouchEnd())); - clearInterval(b.tooltipTimeout); - a.objectEach(b, function(a, c) { - b[c] = null; - }); - }, - }; - })(M); - (function(a) { - var E = a.charts, - D = a.each, - H = a.extend, - p = a.map, - f = a.noop, - l = a.pick; - H(a.Pointer.prototype, { - pinchTranslate: function(a, f, l, p, e, h) { - this.zoomHor && this.pinchTranslateDirection(!0, a, f, l, p, e, h); - this.zoomVert && this.pinchTranslateDirection(!1, a, f, l, p, e, h); - }, - pinchTranslateDirection: function(a, f, l, p, e, h, m, d) { - var c = this.chart, - b = a ? 'x' : 'y', - k = a ? 'X' : 'Y', - z = 'chart' + k, - n = a ? 'width' : 'height', - r = c['plot' + (a ? 'Left' : 'Top')], - x, - w, - t = d || 1, - C = c.inverted, - u = c.bounds[a ? 'h' : 'v'], - q = 1 === f.length, - A = f[0][z], - F = l[0][z], - G = !q && f[1][z], - g = !q && l[1][z], - v; - l = function() { - !q && - 20 < Math.abs(A - G) && - (t = d || Math.abs(F - g) / Math.abs(A - G)); - w = (r - F) / t + A; - x = c['plot' + (a ? 'Width' : 'Height')] / t; - }; - l(); - f = w; - f < u.min - ? ((f = u.min), (v = !0)) - : f + x > u.max && ((f = u.max - x), (v = !0)); - v - ? ((F -= 0.8 * (F - m[b][0])), q || (g -= 0.8 * (g - m[b][1])), l()) - : (m[b] = [F, g]); - C || ((h[b] = w - r), (h[n] = x)); - h = C ? 1 / t : t; - e[n] = x; - e[b] = f; - p[C ? (a ? 'scaleY' : 'scaleX') : 'scale' + k] = t; - p['translate' + k] = h * r + (F - h * A); - }, - pinch: function(a) { - var n = this, - r = n.chart, - u = n.pinchDown, - e = a.touches, - h = e.length, - m = n.lastValidTouch, - d = n.hasZoom, - c = n.selectionMarker, - b = {}, - k = - 1 === h && - ((n.inClass(a.target, 'highcharts-tracker') && r.runTrackerClick) || - n.runChartClick), - z = {}; - 1 < h && (n.initiated = !0); - d && n.initiated && !k && a.preventDefault(); - p(e, function(a) { - return n.normalize(a); - }); - 'touchstart' === a.type - ? (D(e, function(a, b) { - u[b] = { chartX: a.chartX, chartY: a.chartY }; - }), - (m.x = [u[0].chartX, u[1] && u[1].chartX]), - (m.y = [u[0].chartY, u[1] && u[1].chartY]), - D(r.axes, function(a) { - if (a.zoomEnabled) { - var b = r.bounds[a.horiz ? 'h' : 'v'], - c = a.minPixelPadding, - d = a.toPixels(l(a.options.min, a.dataMin)), - e = a.toPixels(l(a.options.max, a.dataMax)), - k = Math.max(d, e); - b.min = Math.min(a.pos, Math.min(d, e) - c); - b.max = Math.max(a.pos + a.len, k + c); - } - }), - (n.res = !0)) - : n.followTouchMove && 1 === h - ? this.runPointActions(n.normalize(a)) - : u.length && - (c || - (n.selectionMarker = c = H({ destroy: f, touch: !0 }, r.plotBox)), - n.pinchTranslate(u, e, b, c, z, m), - (n.hasPinched = d), - n.scaleGroups(b, z), - n.res && ((n.res = !1), this.reset(!1, 0))); - }, - touch: function(f, n) { - var p = this.chart, - r, - e; - if (p.index !== a.hoverChartIndex) - this.onContainerMouseLeave({ relatedTarget: !0 }); - a.hoverChartIndex = p.index; - 1 === f.touches.length - ? ((f = this.normalize(f)), - (e = p.isInsidePlot(f.chartX - p.plotLeft, f.chartY - p.plotTop)) && - !p.openMenu - ? (n && this.runPointActions(f), - 'touchmove' === f.type && - ((n = this.pinchDown), - (r = n[0] - ? 4 <= - Math.sqrt( - Math.pow(n[0].chartX - f.chartX, 2) + - Math.pow(n[0].chartY - f.chartY, 2), - ) - : !1)), - l(r, !0) && this.pinch(f)) - : n && this.reset()) - : 2 === f.touches.length && this.pinch(f); - }, - onContainerTouchStart: function(a) { - this.zoomOption(a); - this.touch(a, !0); - }, - onContainerTouchMove: function(a) { - this.touch(a); - }, - onDocumentTouchEnd: function(f) { - E[a.hoverChartIndex] && E[a.hoverChartIndex].pointer.drop(f); - }, - }); - })(M); - (function(a) { - var E = a.addEvent, - D = a.charts, - H = a.css, - p = a.doc, - f = a.extend, - l = a.noop, - r = a.Pointer, - n = a.removeEvent, - w = a.win, - u = a.wrap; - if (!a.hasTouch && (w.PointerEvent || w.MSPointerEvent)) { - var e = {}, - h = !!w.PointerEvent, - m = function() { - var c = []; - c.item = function(a) { - return this[a]; - }; - a.objectEach(e, function(a) { - c.push({ pageX: a.pageX, pageY: a.pageY, target: a.target }); - }); - return c; - }, - d = function(c, b, d, e) { - ('touch' !== c.pointerType && - c.pointerType !== c.MSPOINTER_TYPE_TOUCH) || - !D[a.hoverChartIndex] || - (e(c), - (e = D[a.hoverChartIndex].pointer), - e[b]({ - type: d, - target: c.currentTarget, - preventDefault: l, - touches: m(), - })); - }; - f(r.prototype, { - onContainerPointerDown: function(a) { - d(a, 'onContainerTouchStart', 'touchstart', function(a) { - e[a.pointerId] = { - pageX: a.pageX, - pageY: a.pageY, - target: a.currentTarget, - }; - }); - }, - onContainerPointerMove: function(a) { - d(a, 'onContainerTouchMove', 'touchmove', function(a) { - e[a.pointerId] = { pageX: a.pageX, pageY: a.pageY }; - e[a.pointerId].target || (e[a.pointerId].target = a.currentTarget); - }); - }, - onDocumentPointerUp: function(a) { - d(a, 'onDocumentTouchEnd', 'touchend', function(a) { - delete e[a.pointerId]; - }); - }, - batchMSEvents: function(a) { - a( - this.chart.container, - h ? 'pointerdown' : 'MSPointerDown', - this.onContainerPointerDown, - ); - a( - this.chart.container, - h ? 'pointermove' : 'MSPointerMove', - this.onContainerPointerMove, - ); - a(p, h ? 'pointerup' : 'MSPointerUp', this.onDocumentPointerUp); - }, - }); - u(r.prototype, 'init', function(a, b, d) { - a.call(this, b, d); - this.hasZoom && - H(b.container, { - '-ms-touch-action': 'none', - 'touch-action': 'none', - }); - }); - u(r.prototype, 'setDOMEvents', function(a) { - a.apply(this); - (this.hasZoom || this.followTouchMove) && this.batchMSEvents(E); - }); - u(r.prototype, 'destroy', function(a) { - this.batchMSEvents(n); - a.call(this); - }); - } - })(M); - (function(a) { - var E = a.addEvent, - D = a.css, - H = a.discardElement, - p = a.defined, - f = a.each, - l = a.isFirefox, - r = a.marginNames, - n = a.merge, - w = a.pick, - u = a.setAnimation, - e = a.stableSort, - h = a.win, - m = a.wrap; - a.Legend = function(a, c) { - this.init(a, c); - }; - a.Legend.prototype = { - init: function(a, c) { - this.chart = a; - this.setOptions(c); - c.enabled && - (this.render(), - E(this.chart, 'endResize', function() { - this.legend.positionCheckboxes(); - })); - }, - setOptions: function(a) { - var c = w(a.padding, 8); - this.options = a; - this.itemStyle = a.itemStyle; - this.itemHiddenStyle = n(this.itemStyle, a.itemHiddenStyle); - this.itemMarginTop = a.itemMarginTop || 0; - this.padding = c; - this.initialItemY = c - 5; - this.itemHeight = this.maxItemWidth = 0; - this.symbolWidth = w(a.symbolWidth, 16); - this.pages = []; - }, - update: function(a, c) { - var b = this.chart; - this.setOptions(n(!0, this.options, a)); - this.destroy(); - b.isDirtyLegend = b.isDirtyBox = !0; - w(c, !0) && b.redraw(); - }, - colorizeItem: function(a, c) { - a.legendGroup[c ? 'removeClass' : 'addClass']( - 'highcharts-legend-item-hidden', - ); - var b = this.options, - d = a.legendItem, - e = a.legendLine, - h = a.legendSymbol, - f = this.itemHiddenStyle.color, - b = c ? b.itemStyle.color : f, - m = c ? a.color || f : f, - l = a.options && a.options.marker, - t = { fill: m }; - d && d.css({ fill: b, color: b }); - e && e.attr({ stroke: m }); - h && - (l && - h.isMarker && - ((t = a.pointAttribs()), c || (t.stroke = t.fill = f)), - h.attr(t)); - }, - positionItem: function(a) { - var c = this.options, - b = c.symbolPadding, - c = !c.rtl, - d = a._legendItemPos, - e = d[0], - d = d[1], - h = a.checkbox; - (a = a.legendGroup) && - a.element && - a.translate(c ? e : this.legendWidth - e - 2 * b - 4, d); - h && ((h.x = e), (h.y = d)); - }, - destroyItem: function(a) { - var c = a.checkbox; - f(['legendItem', 'legendLine', 'legendSymbol', 'legendGroup'], function( - b, - ) { - a[b] && (a[b] = a[b].destroy()); - }); - c && H(a.checkbox); - }, - destroy: function() { - function a(a) { - this[a] && (this[a] = this[a].destroy()); - } - f(this.getAllItems(), function(c) { - f(['legendItem', 'legendGroup'], a, c); - }); - f('clipRect up down pager nav box title group'.split(' '), a, this); - this.display = null; - }, - positionCheckboxes: function() { - var a = this.group && this.group.alignAttr, - c, - b = this.clipHeight || this.legendHeight, - e = this.titleHeight; - a && - ((c = a.translateY), - f( - this.allItems, - function(d) { - var k = d.checkbox, - h; - k && - ((h = c + e + k.y + (this.scrollOffset || 0) + 3), - D(k, { - left: a.translateX + d.checkboxOffset + k.x - 20 + 'px', - top: h + 'px', - display: h > c - 6 && h < c + b - 6 ? '' : 'none', - })); - }, - this, - )); - }, - renderTitle: function() { - var a = this.options, - c = this.padding, - b = a.title, - e = 0; - b.text && - (this.title || - (this.title = this.chart.renderer - .label( - b.text, - c - 3, - c - 4, - null, - null, - null, - a.useHTML, - null, - 'legend-title', - ) - .attr({ zIndex: 1 }) - .css(b.style) - .add(this.group)), - (a = this.title.getBBox()), - (e = a.height), - (this.offsetWidth = a.width), - this.contentGroup.attr({ translateY: e })); - this.titleHeight = e; - }, - setText: function(d) { - var c = this.options; - d.legendItem.attr({ - text: c.labelFormat - ? a.format(c.labelFormat, d) - : c.labelFormatter.call(d), - }); - }, - renderItem: function(a) { - var c = this.chart, - b = c.renderer, - d = this.options, - e = 'horizontal' === d.layout, - h = this.symbolWidth, - f = d.symbolPadding, - m = this.itemStyle, - l = this.itemHiddenStyle, - t = this.padding, - p = e ? w(d.itemDistance, 20) : 0, - r = !d.rtl, - q = d.width, - A = d.itemMarginBottom || 0, - F = this.itemMarginTop, - G = a.legendItem, - g = !a.series, - v = !g && a.series.drawLegendSymbol ? a.series : a, - u = v.options, - L = this.createCheckboxForItem && u && u.showCheckbox, - u = h + f + p + (L ? 20 : 0), - P = d.useHTML, - J = a.options.className; - G || - ((a.legendGroup = b - .g('legend-item') - .addClass( - 'highcharts-' + - v.type + - '-series highcharts-color-' + - a.colorIndex + - (J ? ' ' + J : '') + - (g ? ' highcharts-series-' + a.index : ''), - ) - .attr({ zIndex: 1 }) - .add(this.scrollGroup)), - (a.legendItem = G = b - .text('', r ? h + f : -f, this.baseline || 0, P) - .css(n(a.visible ? m : l)) - .attr({ align: r ? 'left' : 'right', zIndex: 2 }) - .add(a.legendGroup)), - this.baseline || - ((h = m.fontSize), - (this.fontMetrics = b.fontMetrics(h, G)), - (this.baseline = this.fontMetrics.f + 3 + F), - G.attr('y', this.baseline)), - (this.symbolHeight = d.symbolHeight || this.fontMetrics.f), - v.drawLegendSymbol(this, a), - this.setItemEvents && this.setItemEvents(a, G, P), - L && this.createCheckboxForItem(a)); - this.colorizeItem(a, a.visible); - m.width || - G.css({ width: (d.itemWidth || d.width || c.spacingBox.width) - u }); - this.setText(a); - b = G.getBBox(); - m = a.checkboxOffset = d.itemWidth || a.legendItemWidth || b.width + u; - this.itemHeight = b = Math.round( - a.legendItemHeight || b.height || this.symbolHeight, - ); - e && - this.itemX - t + m > (q || c.spacingBox.width - 2 * t - d.x) && - ((this.itemX = t), - (this.itemY += F + this.lastLineHeight + A), - (this.lastLineHeight = 0)); - this.maxItemWidth = Math.max(this.maxItemWidth, m); - this.lastItemY = F + this.itemY + A; - this.lastLineHeight = Math.max(b, this.lastLineHeight); - a._legendItemPos = [this.itemX, this.itemY]; - e - ? (this.itemX += m) - : ((this.itemY += F + b + A), (this.lastLineHeight = b)); - this.offsetWidth = - q || - Math.max( - (e ? this.itemX - t - (a.checkbox ? 0 : p) : m) + t, - this.offsetWidth, - ); - }, - getAllItems: function() { - var a = []; - f(this.chart.series, function(c) { - var b = c && c.options; - c && - w(b.showInLegend, p(b.linkedTo) ? !1 : void 0, !0) && - (a = a.concat( - c.legendItems || ('point' === b.legendType ? c.data : c), - )); - }); - return a; - }, - getAlignment: function() { - var a = this.options; - return a.floating - ? '' - : a.align.charAt(0) + a.verticalAlign.charAt(0) + a.layout.charAt(0); - }, - adjustMargins: function(a, c) { - var b = this.chart, - d = this.options, - e = this.getAlignment(); - e && - f( - [/(lth|ct|rth)/, /(rtv|rm|rbv)/, /(rbh|cb|lbh)/, /(lbv|lm|ltv)/], - function(k, h) { - k.test(e) && - !p(a[h]) && - (b[r[h]] = Math.max( - b[r[h]], - b.legend[(h + 1) % 2 ? 'legendHeight' : 'legendWidth'] + - [1, -1, -1, 1][h] * d[h % 2 ? 'x' : 'y'] + - w(d.margin, 12) + - c[h] + - (0 === h ? b.titleOffset + b.options.title.margin : 0), - )); - }, - ); - }, - render: function() { - var a = this, - c = a.chart, - b = c.renderer, - k = a.group, - h, - m, - l, - x, - p = a.box, - t = a.options, - C = a.padding; - a.itemX = C; - a.itemY = a.initialItemY; - a.offsetWidth = 0; - a.lastItemY = 0; - k || - ((a.group = k = b - .g('legend') - .attr({ zIndex: 7 }) - .add()), - (a.contentGroup = b - .g() - .attr({ zIndex: 1 }) - .add(k)), - (a.scrollGroup = b.g().add(a.contentGroup))); - a.renderTitle(); - h = a.getAllItems(); - e(h, function(a, b) { - return ( - ((a.options && a.options.legendIndex) || 0) - - ((b.options && b.options.legendIndex) || 0) - ); - }); - t.reversed && h.reverse(); - a.allItems = h; - a.display = m = !!h.length; - a.lastLineHeight = 0; - f(h, function(b) { - a.renderItem(b); - }); - l = (t.width || a.offsetWidth) + C; - x = a.lastItemY + a.lastLineHeight + a.titleHeight; - x = a.handleOverflow(x); - x += C; - p || - ((a.box = p = b - .rect() - .addClass('highcharts-legend-box') - .attr({ r: t.borderRadius }) - .add(k)), - (p.isNew = !0)); - p.attr({ - stroke: t.borderColor, - 'stroke-width': t.borderWidth || 0, - fill: t.backgroundColor || 'none', - }).shadow(t.shadow); - 0 < l && - 0 < x && - (p[p.isNew ? 'attr' : 'animate']( - p.crisp.call( - {}, - { x: 0, y: 0, width: l, height: x }, - p.strokeWidth(), - ), - ), - (p.isNew = !1)); - p[m ? 'show' : 'hide'](); - a.legendWidth = l; - a.legendHeight = x; - f(h, function(b) { - a.positionItem(b); - }); - m && - ((b = c.spacingBox), - /(lth|ct|rth)/.test(a.getAlignment()) && - (b = n(b, { y: b.y + c.titleOffset + c.options.title.margin })), - k.align(n(t, { width: l, height: x }), !0, b)); - c.isResizing || this.positionCheckboxes(); - }, - handleOverflow: function(a) { - var c = this, - b = this.chart, - d = b.renderer, - e = this.options, - h = e.y, - m = this.padding, - b = b.spacingBox.height + ('top' === e.verticalAlign ? -h : h) - m, - h = e.maxHeight, - l, - n = this.clipRect, - t = e.navigation, - p = w(t.animation, !0), - r = t.arrowSize || 12, - q = this.nav, - A = this.pages, - F, - G = this.allItems, - g = function(a) { - 'number' === typeof a - ? n.attr({ height: a }) - : n && ((c.clipRect = n.destroy()), c.contentGroup.clip()); - c.contentGroup.div && - (c.contentGroup.div.style.clip = a - ? 'rect(' + m + 'px,9999px,' + (m + a) + 'px,0)' - : 'auto'); - }; - 'horizontal' !== e.layout || - 'middle' === e.verticalAlign || - e.floating || - (b /= 2); - h && (b = Math.min(b, h)); - A.length = 0; - a > b && !1 !== t.enabled - ? ((this.clipHeight = l = Math.max(b - 20 - this.titleHeight - m, 0)), - (this.currentPage = w(this.currentPage, 1)), - (this.fullHeight = a), - f(G, function(a, b) { - var c = a._legendItemPos[1], - d = Math.round(a.legendItem.getBBox().height), - g = A.length; - if (!g || (c - A[g - 1] > l && (F || c) !== A[g - 1])) - A.push(F || c), g++; - a.pageIx = g - 1; - F && (G[b - 1].pageIx = g - 1); - b === G.length - 1 && - c + d - A[g - 1] > l && - (A.push(c), (a.pageIx = g)); - c !== F && (F = c); - }), - n || - ((n = c.clipRect = d.clipRect(0, m, 9999, 0)), - c.contentGroup.clip(n)), - g(l), - q || - ((this.nav = q = d - .g() - .attr({ zIndex: 1 }) - .add(this.group)), - (this.up = d - .symbol('triangle', 0, 0, r, r) - .on('click', function() { - c.scroll(-1, p); - }) - .add(q)), - (this.pager = d - .text('', 15, 10) - .addClass('highcharts-legend-navigation') - .css(t.style) - .add(q)), - (this.down = d - .symbol('triangle-down', 0, 0, r, r) - .on('click', function() { - c.scroll(1, p); - }) - .add(q))), - c.scroll(0), - (a = b)) - : q && - (g(), - (this.nav = q.destroy()), - this.scrollGroup.attr({ translateY: 1 }), - (this.clipHeight = 0)); - return a; - }, - scroll: function(a, c) { - var b = this.pages, - d = b.length; - a = this.currentPage + a; - var e = this.clipHeight, - h = this.options.navigation, - f = this.pager, - m = this.padding; - a > d && (a = d); - 0 < a && - (void 0 !== c && u(c, this.chart), - this.nav.attr({ - translateX: m, - translateY: e + this.padding + 7 + this.titleHeight, - visibility: 'visible', - }), - this.up.attr({ - class: - 1 === a - ? 'highcharts-legend-nav-inactive' - : 'highcharts-legend-nav-active', - }), - f.attr({ text: a + '/' + d }), - this.down.attr({ - x: 18 + this.pager.getBBox().width, - class: - a === d - ? 'highcharts-legend-nav-inactive' - : 'highcharts-legend-nav-active', - }), - this.up - .attr({ fill: 1 === a ? h.inactiveColor : h.activeColor }) - .css({ cursor: 1 === a ? 'default' : 'pointer' }), - this.down - .attr({ fill: a === d ? h.inactiveColor : h.activeColor }) - .css({ cursor: a === d ? 'default' : 'pointer' }), - (this.scrollOffset = -b[a - 1] + this.initialItemY), - this.scrollGroup.animate({ translateY: this.scrollOffset }), - (this.currentPage = a), - this.positionCheckboxes()); - }, - }; - a.LegendSymbolMixin = { - drawRectangle: function(a, c) { - var b = a.symbolHeight, - d = a.options.squareSymbol; - c.legendSymbol = this.chart.renderer - .rect( - d ? (a.symbolWidth - b) / 2 : 0, - a.baseline - b + 1, - d ? b : a.symbolWidth, - b, - w(a.options.symbolRadius, b / 2), - ) - .addClass('highcharts-point') - .attr({ zIndex: 3 }) - .add(c.legendGroup); - }, - drawLineMarker: function(a) { - var c = this.options, - b = c.marker, - d = a.symbolWidth, - e = a.symbolHeight, - h = e / 2, - f = this.chart.renderer, - m = this.legendGroup; - a = a.baseline - Math.round(0.3 * a.fontMetrics.b); - var l; - l = { 'stroke-width': c.lineWidth || 0 }; - c.dashStyle && (l.dashstyle = c.dashStyle); - this.legendLine = f - .path(['M', 0, a, 'L', d, a]) - .addClass('highcharts-graph') - .attr(l) - .add(m); - b && - !1 !== b.enabled && - ((c = Math.min(w(b.radius, h), h)), - 0 === this.symbol.indexOf('url') && - ((b = n(b, { width: e, height: e })), (c = 0)), - (this.legendSymbol = b = f - .symbol(this.symbol, d / 2 - c, a - c, 2 * c, 2 * c, b) - .addClass('highcharts-point') - .add(m)), - (b.isMarker = !0)); - }, - }; - (/Trident\/7\.0/.test(h.navigator.userAgent) || l) && - m(a.Legend.prototype, 'positionItem', function(a, c) { - var b = this, - d = function() { - c._legendItemPos && a.call(b, c); - }; - d(); - setTimeout(d); - }); - })(M); - (function(a) { - var E = a.addEvent, - D = a.animate, - H = a.animObject, - p = a.attr, - f = a.doc, - l = a.Axis, - r = a.createElement, - n = a.defaultOptions, - w = a.discardElement, - u = a.charts, - e = a.css, - h = a.defined, - m = a.each, - d = a.extend, - c = a.find, - b = a.fireEvent, - k = a.grep, - z = a.isNumber, - B = a.isObject, - I = a.isString, - x = a.Legend, - K = a.marginNames, - t = a.merge, - C = a.objectEach, - N = a.Pointer, - q = a.pick, - A = a.pInt, - F = a.removeEvent, - G = a.seriesTypes, - g = a.splat, - v = a.svg, - Q = a.syncTimeout, - L = a.win, - P = (a.Chart = function() { - this.getArgs.apply(this, arguments); - }); - a.chart = function(a, b, c) { - return new P(a, b, c); - }; - d(P.prototype, { - callbacks: [], - getArgs: function() { - var a = [].slice.call(arguments); - if (I(a[0]) || a[0].nodeName) this.renderTo = a.shift(); - this.init(a[0], a[1]); - }, - init: function(b, c) { - var d, - g, - e = b.series, - k = b.plotOptions || {}; - b.series = null; - d = t(n, b); - for (g in d.plotOptions) - d.plotOptions[g].tooltip = (k[g] && t(k[g].tooltip)) || void 0; - d.tooltip.userOptions = - (b.chart && b.chart.forExport && b.tooltip.userOptions) || b.tooltip; - d.series = b.series = e; - this.userOptions = b; - b = d.chart; - g = b.events; - this.margin = []; - this.spacing = []; - this.bounds = { h: {}, v: {} }; - this.labelCollectors = []; - this.callback = c; - this.isResizing = 0; - this.options = d; - this.axes = []; - this.series = []; - this.hasCartesianSeries = b.showAxes; - var q = this; - q.index = u.length; - u.push(q); - a.chartCount++; - g && - C(g, function(a, b) { - E(q, b, a); - }); - q.xAxis = []; - q.yAxis = []; - q.pointCount = q.colorCounter = q.symbolCounter = 0; - q.firstRender(); - }, - initSeries: function(b) { - var c = this.options.chart; - (c = G[b.type || c.type || c.defaultSeriesType]) || a.error(17, !0); - c = new c(); - c.init(this, b); - return c; - }, - orderSeries: function(a) { - var b = this.series; - for (a = a || 0; a < b.length; a++) - b[a] && - ((b[a].index = a), - (b[a].name = b[a].name || 'Series ' + (b[a].index + 1))); - }, - isInsidePlot: function(a, b, c) { - var d = c ? b : a; - a = c ? a : b; - return 0 <= d && d <= this.plotWidth && 0 <= a && a <= this.plotHeight; - }, - redraw: function(c) { - var g = this.axes, - e = this.series, - k = this.pointer, - q = this.legend, - h = this.isDirtyLegend, - f, - l, - v = this.hasCartesianSeries, - A = this.isDirtyBox, - F, - t = this.renderer, - x = t.isHidden(), - n = []; - this.setResponsive && this.setResponsive(!1); - a.setAnimation(c, this); - x && this.temporaryDisplay(); - this.layOutTitles(); - for (c = e.length; c--; ) - if (((F = e[c]), F.options.stacking && ((f = !0), F.isDirty))) { - l = !0; - break; - } - if (l) - for (c = e.length; c--; ) - (F = e[c]), F.options.stacking && (F.isDirty = !0); - m(e, function(a) { - a.isDirty && - 'point' === a.options.legendType && - (a.updateTotals && a.updateTotals(), (h = !0)); - a.isDirtyData && b(a, 'updatedData'); - }); - h && q.options.enabled && (q.render(), (this.isDirtyLegend = !1)); - f && this.getStacks(); - v && - m(g, function(a) { - a.updateNames(); - a.setScale(); - }); - this.getMargins(); - v && - (m(g, function(a) { - a.isDirty && (A = !0); - }), - m(g, function(a) { - var c = a.min + ',' + a.max; - a.extKey !== c && - ((a.extKey = c), - n.push(function() { - b(a, 'afterSetExtremes', d(a.eventArgs, a.getExtremes())); - delete a.eventArgs; - })); - (A || f) && a.redraw(); - })); - A && this.drawChartBox(); - b(this, 'predraw'); - m(e, function(a) { - (A || a.isDirty) && a.visible && a.redraw(); - a.isDirtyData = !1; - }); - k && k.reset(!0); - t.draw(); - b(this, 'redraw'); - b(this, 'render'); - x && this.temporaryDisplay(!0); - m(n, function(a) { - a.call(); - }); - }, - get: function(a) { - function b(b) { - return b.id === a || (b.options && b.options.id === a); - } - var d, - g = this.series, - e; - d = c(this.axes, b) || c(this.series, b); - for (e = 0; !d && e < g.length; e++) d = c(g[e].points || [], b); - return d; - }, - getAxes: function() { - var a = this, - b = this.options, - c = (b.xAxis = g(b.xAxis || {})), - b = (b.yAxis = g(b.yAxis || {})); - m(c, function(a, b) { - a.index = b; - a.isX = !0; - }); - m(b, function(a, b) { - a.index = b; - }); - c = c.concat(b); - m(c, function(b) { - new l(a, b); - }); - }, - getSelectedPoints: function() { - var a = []; - m(this.series, function(b) { - a = a.concat( - k(b.data || [], function(a) { - return a.selected; - }), - ); - }); - return a; - }, - getSelectedSeries: function() { - return k(this.series, function(a) { - return a.selected; - }); - }, - setTitle: function(a, b, c) { - var d = this, - g = d.options, - e; - e = g.title = t( - { - style: { color: '#333333', fontSize: g.isStock ? '16px' : '18px' }, - }, - g.title, - a, - ); - g = g.subtitle = t({ style: { color: '#666666' } }, g.subtitle, b); - m([['title', a, e], ['subtitle', b, g]], function(a, b) { - var c = a[0], - g = d[c], - e = a[1]; - a = a[2]; - g && e && (d[c] = g = g.destroy()); - a && - !g && - ((d[c] = d.renderer - .text(a.text, 0, 0, a.useHTML) - .attr({ - align: a.align, - class: 'highcharts-' + c, - zIndex: a.zIndex || 4, - }) - .add()), - (d[c].update = function(a) { - d.setTitle(!b && a, b && a); - }), - d[c].css(a.style)); - }); - d.layOutTitles(c); - }, - layOutTitles: function(a) { - var b = 0, - c, - g = this.renderer, - e = this.spacingBox; - m( - ['title', 'subtitle'], - function(a) { - var c = this[a], - k = this.options[a]; - a = 'title' === a ? -3 : k.verticalAlign ? 0 : b + 2; - var q; - c && - ((q = k.style.fontSize), - (q = g.fontMetrics(q, c).b), - c - .css({ width: (k.width || e.width + k.widthAdjust) + 'px' }) - .align(d({ y: a + q }, k), !1, 'spacingBox'), - k.floating || - k.verticalAlign || - (b = Math.ceil(b + c.getBBox(k.useHTML).height))); - }, - this, - ); - c = this.titleOffset !== b; - this.titleOffset = b; - !this.isDirtyBox && - c && - ((this.isDirtyBox = c), - this.hasRendered && q(a, !0) && this.isDirtyBox && this.redraw()); - }, - getChartSize: function() { - var b = this.options.chart, - c = b.width, - b = b.height, - d = this.renderTo; - h(c) || (this.containerWidth = a.getStyle(d, 'width')); - h(b) || (this.containerHeight = a.getStyle(d, 'height')); - this.chartWidth = Math.max(0, c || this.containerWidth || 600); - this.chartHeight = Math.max( - 0, - a.relativeLength(b, this.chartWidth) || - (1 < this.containerHeight ? this.containerHeight : 400), - ); - }, - temporaryDisplay: function(b) { - var c = this.renderTo; - if (b) - for (; c && c.style; ) - c.hcOrigStyle && (a.css(c, c.hcOrigStyle), delete c.hcOrigStyle), - c.hcOrigDetached && - (f.body.removeChild(c), (c.hcOrigDetached = !1)), - (c = c.parentNode); - else - for (; c && c.style; ) { - f.body.contains(c) || - c.parentNode || - ((c.hcOrigDetached = !0), f.body.appendChild(c)); - if ('none' === a.getStyle(c, 'display', !1) || c.hcOricDetached) - (c.hcOrigStyle = { - display: c.style.display, - height: c.style.height, - overflow: c.style.overflow, - }), - (b = { display: 'block', overflow: 'hidden' }), - c !== this.renderTo && (b.height = 0), - a.css(c, b), - c.offsetWidth || - c.style.setProperty('display', 'block', 'important'); - c = c.parentNode; - if (c === f.body) break; - } - }, - setClassName: function(a) { - this.container.className = 'highcharts-container ' + (a || ''); - }, - getContainer: function() { - var b, - c = this.options, - g = c.chart, - e, - k; - b = this.renderTo; - var q = a.uniqueKey(), - h; - b || (this.renderTo = b = g.renderTo); - I(b) && (this.renderTo = b = f.getElementById(b)); - b || a.error(13, !0); - e = A(p(b, 'data-highcharts-chart')); - z(e) && u[e] && u[e].hasRendered && u[e].destroy(); - p(b, 'data-highcharts-chart', this.index); - b.innerHTML = ''; - g.skipClone || b.offsetWidth || this.temporaryDisplay(); - this.getChartSize(); - e = this.chartWidth; - k = this.chartHeight; - h = d( - { - position: 'relative', - overflow: 'hidden', - width: e + 'px', - height: k + 'px', - textAlign: 'left', - lineHeight: 'normal', - zIndex: 0, - '-webkit-tap-highlight-color': 'rgba(0,0,0,0)', - }, - g.style, - ); - this.container = b = r('div', { id: q }, h, b); - this._cursor = b.style.cursor; - this.renderer = new (a[g.renderer] || a.Renderer)( - b, - e, - k, - null, - g.forExport, - c.exporting && c.exporting.allowHTML, - ); - this.setClassName(g.className); - this.renderer.setStyle(g.style); - this.renderer.chartIndex = this.index; - }, - getMargins: function(a) { - var b = this.spacing, - c = this.margin, - d = this.titleOffset; - this.resetMargins(); - d && - !h(c[0]) && - (this.plotTop = Math.max( - this.plotTop, - d + this.options.title.margin + b[0], - )); - this.legend && this.legend.display && this.legend.adjustMargins(c, b); - this.extraMargin && - (this[this.extraMargin.type] = - (this[this.extraMargin.type] || 0) + this.extraMargin.value); - this.adjustPlotArea && this.adjustPlotArea(); - a || this.getAxisMargins(); - }, - getAxisMargins: function() { - var a = this, - b = (a.axisOffset = [0, 0, 0, 0]), - c = a.margin; - a.hasCartesianSeries && - m(a.axes, function(a) { - a.visible && a.getOffset(); - }); - m(K, function(d, g) { - h(c[g]) || (a[d] += b[g]); - }); - a.setChartSize(); - }, - reflow: function(b) { - var c = this, - d = c.options.chart, - g = c.renderTo, - e = h(d.width) && h(d.height), - k = d.width || a.getStyle(g, 'width'), - d = d.height || a.getStyle(g, 'height'), - g = b ? b.target : L; - if (!e && !c.isPrinting && k && d && (g === L || g === f)) { - if (k !== c.containerWidth || d !== c.containerHeight) - clearTimeout(c.reflowTimeout), - (c.reflowTimeout = Q( - function() { - c.container && c.setSize(void 0, void 0, !1); - }, - b ? 100 : 0, - )); - c.containerWidth = k; - c.containerHeight = d; - } - }, - initReflow: function() { - var a = this, - b; - b = E(L, 'resize', function(b) { - a.reflow(b); - }); - E(a, 'destroy', b); - }, - setSize: function(c, d, g) { - var k = this, - q = k.renderer; - k.isResizing += 1; - a.setAnimation(g, k); - k.oldChartHeight = k.chartHeight; - k.oldChartWidth = k.chartWidth; - void 0 !== c && (k.options.chart.width = c); - void 0 !== d && (k.options.chart.height = d); - k.getChartSize(); - c = q.globalAnimation; - (c ? D : e)( - k.container, - { width: k.chartWidth + 'px', height: k.chartHeight + 'px' }, - c, - ); - k.setChartSize(!0); - q.setSize(k.chartWidth, k.chartHeight, g); - m(k.axes, function(a) { - a.isDirty = !0; - a.setScale(); - }); - k.isDirtyLegend = !0; - k.isDirtyBox = !0; - k.layOutTitles(); - k.getMargins(); - k.redraw(g); - k.oldChartHeight = null; - b(k, 'resize'); - Q(function() { - k && - b(k, 'endResize', null, function() { - --k.isResizing; - }); - }, H(c).duration); - }, - setChartSize: function(a) { - var b = this.inverted, - c = this.renderer, - d = this.chartWidth, - g = this.chartHeight, - e = this.options.chart, - k = this.spacing, - q = this.clipOffset, - h, - f, - l, - v; - this.plotLeft = h = Math.round(this.plotLeft); - this.plotTop = f = Math.round(this.plotTop); - this.plotWidth = l = Math.max(0, Math.round(d - h - this.marginRight)); - this.plotHeight = v = Math.max( - 0, - Math.round(g - f - this.marginBottom), - ); - this.plotSizeX = b ? v : l; - this.plotSizeY = b ? l : v; - this.plotBorderWidth = e.plotBorderWidth || 0; - this.spacingBox = c.spacingBox = { - x: k[3], - y: k[0], - width: d - k[3] - k[1], - height: g - k[0] - k[2], - }; - this.plotBox = c.plotBox = { x: h, y: f, width: l, height: v }; - d = 2 * Math.floor(this.plotBorderWidth / 2); - b = Math.ceil(Math.max(d, q[3]) / 2); - c = Math.ceil(Math.max(d, q[0]) / 2); - this.clipBox = { - x: b, - y: c, - width: Math.floor(this.plotSizeX - Math.max(d, q[1]) / 2 - b), - height: Math.max( - 0, - Math.floor(this.plotSizeY - Math.max(d, q[2]) / 2 - c), - ), - }; - a || - m(this.axes, function(a) { - a.setAxisSize(); - a.setAxisTranslation(); - }); - }, - resetMargins: function() { - var a = this, - b = a.options.chart; - m(['margin', 'spacing'], function(c) { - var d = b[c], - g = B(d) ? d : [d, d, d, d]; - m(['Top', 'Right', 'Bottom', 'Left'], function(d, e) { - a[c][e] = q(b[c + d], g[e]); - }); - }); - m(K, function(b, c) { - a[b] = q(a.margin[c], a.spacing[c]); - }); - a.axisOffset = [0, 0, 0, 0]; - a.clipOffset = [0, 0, 0, 0]; - }, - drawChartBox: function() { - var a = this.options.chart, - b = this.renderer, - c = this.chartWidth, - d = this.chartHeight, - g = this.chartBackground, - e = this.plotBackground, - k = this.plotBorder, - q, - h = this.plotBGImage, - f = a.backgroundColor, - m = a.plotBackgroundColor, - l = a.plotBackgroundImage, - v, - A = this.plotLeft, - F = this.plotTop, - t = this.plotWidth, - x = this.plotHeight, - n = this.plotBox, - p = this.clipRect, - z = this.clipBox, - G = 'animate'; - g || - ((this.chartBackground = g = b - .rect() - .addClass('highcharts-background') - .add()), - (G = 'attr')); - q = a.borderWidth || 0; - v = q + (a.shadow ? 8 : 0); - f = { fill: f || 'none' }; - if (q || g['stroke-width']) - (f.stroke = a.borderColor), (f['stroke-width'] = q); - g.attr(f).shadow(a.shadow); - g[G]({ - x: v / 2, - y: v / 2, - width: c - v - (q % 2), - height: d - v - (q % 2), - r: a.borderRadius, - }); - G = 'animate'; - e || - ((G = 'attr'), - (this.plotBackground = e = b - .rect() - .addClass('highcharts-plot-background') - .add())); - e[G](n); - e.attr({ fill: m || 'none' }).shadow(a.plotShadow); - l && - (h - ? h.animate(n) - : (this.plotBGImage = b.image(l, A, F, t, x).add())); - p - ? p.animate({ width: z.width, height: z.height }) - : (this.clipRect = b.clipRect(z)); - G = 'animate'; - k || - ((G = 'attr'), - (this.plotBorder = k = b - .rect() - .addClass('highcharts-plot-border') - .attr({ zIndex: 1 }) - .add())); - k.attr({ - stroke: a.plotBorderColor, - 'stroke-width': a.plotBorderWidth || 0, - fill: 'none', - }); - k[G](k.crisp({ x: A, y: F, width: t, height: x }, -k.strokeWidth())); - this.isDirtyBox = !1; - }, - propFromSeries: function() { - var a = this, - b = a.options.chart, - c, - d = a.options.series, - g, - e; - m(['inverted', 'angular', 'polar'], function(k) { - c = G[b.type || b.defaultSeriesType]; - e = b[k] || (c && c.prototype[k]); - for (g = d && d.length; !e && g--; ) - (c = G[d[g].type]) && c.prototype[k] && (e = !0); - a[k] = e; - }); - }, - linkSeries: function() { - var a = this, - b = a.series; - m(b, function(a) { - a.linkedSeries.length = 0; - }); - m(b, function(b) { - var c = b.options.linkedTo; - I(c) && - (c = ':previous' === c ? a.series[b.index - 1] : a.get(c)) && - c.linkedParent !== b && - (c.linkedSeries.push(b), - (b.linkedParent = c), - (b.visible = q(b.options.visible, c.options.visible, b.visible))); - }); - }, - renderSeries: function() { - m(this.series, function(a) { - a.translate(); - a.render(); - }); - }, - renderLabels: function() { - var a = this, - b = a.options.labels; - b.items && - m(b.items, function(c) { - var g = d(b.style, c.style), - e = A(g.left) + a.plotLeft, - k = A(g.top) + a.plotTop + 12; - delete g.left; - delete g.top; - a.renderer - .text(c.html, e, k) - .attr({ zIndex: 2 }) - .css(g) - .add(); - }); - }, - render: function() { - var a = this.axes, - b = this.renderer, - c = this.options, - d, - g, - e; - this.setTitle(); - this.legend = new x(this, c.legend); - this.getStacks && this.getStacks(); - this.getMargins(!0); - this.setChartSize(); - c = this.plotWidth; - d = this.plotHeight = Math.max(this.plotHeight - 21, 0); - m(a, function(a) { - a.setScale(); - }); - this.getAxisMargins(); - g = 1.1 < c / this.plotWidth; - e = 1.05 < d / this.plotHeight; - if (g || e) - m(a, function(a) { - ((a.horiz && g) || (!a.horiz && e)) && a.setTickInterval(!0); - }), - this.getMargins(); - this.drawChartBox(); - this.hasCartesianSeries && - m(a, function(a) { - a.visible && a.render(); - }); - this.seriesGroup || - (this.seriesGroup = b - .g('series-group') - .attr({ zIndex: 3 }) - .add()); - this.renderSeries(); - this.renderLabels(); - this.addCredits(); - this.setResponsive && this.setResponsive(); - this.hasRendered = !0; - }, - addCredits: function(a) { - var b = this; - a = t(!0, this.options.credits, a); - a.enabled && - !this.credits && - ((this.credits = this.renderer - .text(a.text + (this.mapCredits || ''), 0, 0) - .addClass('highcharts-credits') - .on('click', function() { - a.href && (L.location.href = a.href); - }) - .attr({ align: a.position.align, zIndex: 8 }) - .css(a.style) - .add() - .align(a.position)), - (this.credits.update = function(a) { - b.credits = b.credits.destroy(); - b.addCredits(a); - })); - }, - destroy: function() { - var c = this, - d = c.axes, - g = c.series, - e = c.container, - k, - q = e && e.parentNode; - b(c, 'destroy'); - c.renderer.forExport ? a.erase(u, c) : (u[c.index] = void 0); - a.chartCount--; - c.renderTo.removeAttribute('data-highcharts-chart'); - F(c); - for (k = d.length; k--; ) d[k] = d[k].destroy(); - this.scroller && this.scroller.destroy && this.scroller.destroy(); - for (k = g.length; k--; ) g[k] = g[k].destroy(); - m( - 'title subtitle chartBackground plotBackground plotBGImage plotBorder seriesGroup clipRect credits pointer rangeSelector legend resetZoomButton tooltip renderer'.split( - ' ', - ), - function(a) { - var b = c[a]; - b && b.destroy && (c[a] = b.destroy()); - }, - ); - e && ((e.innerHTML = ''), F(e), q && w(e)); - C(c, function(a, b) { - delete c[b]; - }); - }, - isReadyToRender: function() { - var a = this; - return v || L != L.top || 'complete' === f.readyState - ? !0 - : (f.attachEvent('onreadystatechange', function() { - f.detachEvent('onreadystatechange', a.firstRender); - 'complete' === f.readyState && a.firstRender(); - }), - !1); - }, - firstRender: function() { - var a = this, - c = a.options; - if (a.isReadyToRender()) { - a.getContainer(); - b(a, 'init'); - a.resetMargins(); - a.setChartSize(); - a.propFromSeries(); - a.getAxes(); - m(c.series || [], function(b) { - a.initSeries(b); - }); - a.linkSeries(); - b(a, 'beforeRender'); - N && (a.pointer = new N(a, c)); - a.render(); - if (!a.renderer.imgCount && a.onload) a.onload(); - a.temporaryDisplay(!0); - } - }, - onload: function() { - m( - [this.callback].concat(this.callbacks), - function(a) { - a && void 0 !== this.index && a.apply(this, [this]); - }, - this, - ); - b(this, 'load'); - b(this, 'render'); - h(this.index) && !1 !== this.options.chart.reflow && this.initReflow(); - this.onload = null; - }, - }); - })(M); - (function(a) { - var E, - D = a.each, - H = a.extend, - p = a.erase, - f = a.fireEvent, - l = a.format, - r = a.isArray, - n = a.isNumber, - w = a.pick, - u = a.removeEvent; - a.Point = E = function() {}; - a.Point.prototype = { - init: function(a, h, f) { - this.series = a; - this.color = a.color; - this.applyOptions(h, f); - a.options.colorByPoint - ? ((h = a.options.colors || a.chart.options.colors), - (this.color = this.color || h[a.colorCounter]), - (h = h.length), - (f = a.colorCounter), - a.colorCounter++, - a.colorCounter === h && (a.colorCounter = 0)) - : (f = a.colorIndex); - this.colorIndex = w(this.colorIndex, f); - a.chart.pointCount++; - return this; - }, - applyOptions: function(a, h) { - var e = this.series, - d = e.options.pointValKey || e.pointValKey; - a = E.prototype.optionsToObject.call(this, a); - H(this, a); - this.options = this.options ? H(this.options, a) : a; - a.group && delete this.group; - d && (this.y = this[d]); - this.isNull = w( - this.isValid && !this.isValid(), - null === this.x || !n(this.y, !0), - ); - this.selected && (this.state = 'select'); - 'name' in this && - void 0 === h && - e.xAxis && - e.xAxis.hasNames && - (this.x = e.xAxis.nameToX(this)); - void 0 === this.x && - e && - (this.x = void 0 === h ? e.autoIncrement(this) : h); - return this; - }, - optionsToObject: function(a) { - var e = {}, - f = this.series, - d = f.options.keys, - c = d || f.pointArrayMap || ['y'], - b = c.length, - k = 0, - l = 0; - if (n(a) || null === a) e[c[0]] = a; - else if (r(a)) - for ( - !d && - a.length > b && - ((f = typeof a[0]), - 'string' === f ? (e.name = a[0]) : 'number' === f && (e.x = a[0]), - k++); - l < b; - - ) - (d && void 0 === a[k]) || (e[c[l]] = a[k]), k++, l++; - else - 'object' === typeof a && - ((e = a), - a.dataLabels && (f._hasPointLabels = !0), - a.marker && (f._hasPointMarkers = !0)); - return e; - }, - getClassName: function() { - return ( - 'highcharts-point' + - (this.selected ? ' highcharts-point-select' : '') + - (this.negative ? ' highcharts-negative' : '') + - (this.isNull ? ' highcharts-null-point' : '') + - (void 0 !== this.colorIndex - ? ' highcharts-color-' + this.colorIndex - : '') + - (this.options.className ? ' ' + this.options.className : '') + - (this.zone && this.zone.className - ? ' ' + this.zone.className.replace('highcharts-negative', '') - : '') - ); - }, - getZone: function() { - var a = this.series, - h = a.zones, - a = a.zoneAxis || 'y', - f = 0, - d; - for (d = h[f]; this[a] >= d.value; ) d = h[++f]; - d && d.color && !this.options.color && (this.color = d.color); - return d; - }, - destroy: function() { - var a = this.series.chart, - h = a.hoverPoints, - f; - a.pointCount--; - h && (this.setState(), p(h, this), h.length || (a.hoverPoints = null)); - if (this === a.hoverPoint) this.onMouseOut(); - if (this.graphic || this.dataLabel) u(this), this.destroyElements(); - this.legendItem && a.legend.destroyItem(this); - for (f in this) this[f] = null; - }, - destroyElements: function() { - for ( - var a = [ - 'graphic', - 'dataLabel', - 'dataLabelUpper', - 'connector', - 'shadowGroup', - ], - h, - f = 6; - f--; - - ) - (h = a[f]), this[h] && (this[h] = this[h].destroy()); - }, - getLabelConfig: function() { - return { - x: this.category, - y: this.y, - color: this.color, - colorIndex: this.colorIndex, - key: this.name || this.category, - series: this.series, - point: this, - percentage: this.percentage, - total: this.total || this.stackTotal, - }; - }, - tooltipFormatter: function(a) { - var e = this.series, - f = e.tooltipOptions, - d = w(f.valueDecimals, ''), - c = f.valuePrefix || '', - b = f.valueSuffix || ''; - D(e.pointArrayMap || ['y'], function(e) { - e = '{point.' + e; - if (c || b) a = a.replace(e + '}', c + e + '}' + b); - a = a.replace(e + '}', e + ':,.' + d + 'f}'); - }); - return l(a, { point: this, series: this.series }); - }, - firePointEvent: function(a, h, m) { - var d = this, - c = this.series.options; - (c.point.events[a] || - (d.options && d.options.events && d.options.events[a])) && - this.importEvents(); - 'click' === a && - c.allowPointSelect && - (m = function(a) { - d.select && d.select(null, a.ctrlKey || a.metaKey || a.shiftKey); - }); - f(this, a, h, m); - }, - visible: !0, - }; - })(M); - (function(a) { - var E = a.addEvent, - D = a.animObject, - H = a.arrayMax, - p = a.arrayMin, - f = a.correctFloat, - l = a.Date, - r = a.defaultOptions, - n = a.defaultPlotOptions, - w = a.defined, - u = a.each, - e = a.erase, - h = a.extend, - m = a.fireEvent, - d = a.grep, - c = a.isArray, - b = a.isNumber, - k = a.isString, - z = a.merge, - B = a.objectEach, - I = a.pick, - x = a.removeEvent, - K = a.splat, - t = a.SVGElement, - C = a.syncTimeout, - N = a.win; - a.Series = a.seriesType( - 'line', - null, - { - lineWidth: 2, - allowPointSelect: !1, - showCheckbox: !1, - animation: { duration: 1e3 }, - events: {}, - marker: { - lineWidth: 0, - lineColor: '#ffffff', - radius: 4, - states: { - hover: { - animation: { duration: 50 }, - enabled: !0, - radiusPlus: 2, - lineWidthPlus: 1, - }, - select: { - fillColor: '#cccccc', - lineColor: '#000000', - lineWidth: 2, - }, - }, - }, - point: { events: {} }, - dataLabels: { - align: 'center', - formatter: function() { - return null === this.y ? '' : a.numberFormat(this.y, -1); - }, - style: { - fontSize: '11px', - fontWeight: 'bold', - color: 'contrast', - textOutline: '1px contrast', - }, - verticalAlign: 'bottom', - x: 0, - y: 0, - padding: 5, - }, - cropThreshold: 300, - pointRange: 0, - softThreshold: !0, - states: { - hover: { - animation: { duration: 50 }, - lineWidthPlus: 1, - marker: {}, - halo: { size: 10, opacity: 0.25 }, - }, - select: { marker: {} }, - }, - stickyTracking: !0, - turboThreshold: 1e3, - findNearestPointBy: 'x', - }, - { - isCartesian: !0, - pointClass: a.Point, - sorted: !0, - requireSorting: !0, - directTouch: !1, - axisTypes: ['xAxis', 'yAxis'], - colorCounter: 0, - parallelArrays: ['x', 'y'], - coll: 'series', - init: function(a, b) { - var c = this, - d, - g = a.series, - e; - c.chart = a; - c.options = b = c.setOptions(b); - c.linkedSeries = []; - c.bindAxes(); - h(c, { - name: b.name, - state: '', - visible: !1 !== b.visible, - selected: !0 === b.selected, - }); - d = b.events; - B(d, function(a, b) { - E(c, b, a); - }); - if ( - (d && d.click) || - (b.point && b.point.events && b.point.events.click) || - b.allowPointSelect - ) - a.runTrackerClick = !0; - c.getColor(); - c.getSymbol(); - u(c.parallelArrays, function(a) { - c[a + 'Data'] = []; - }); - c.setData(b.data, !1); - c.isCartesian && (a.hasCartesianSeries = !0); - g.length && (e = g[g.length - 1]); - c._i = I(e && e._i, -1) + 1; - a.orderSeries(this.insert(g)); - }, - insert: function(a) { - var c = this.options.index, - d; - if (b(c)) { - for (d = a.length; d--; ) - if (c >= I(a[d].options.index, a[d]._i)) { - a.splice(d + 1, 0, this); - break; - } - -1 === d && a.unshift(this); - d += 1; - } else a.push(this); - return I(d, a.length - 1); - }, - bindAxes: function() { - var b = this, - c = b.options, - d = b.chart, - e; - u(b.axisTypes || [], function(g) { - u(d[g], function(a) { - e = a.options; - if ( - c[g] === e.index || - (void 0 !== c[g] && c[g] === e.id) || - (void 0 === c[g] && 0 === e.index) - ) - b.insert(a.series), (b[g] = a), (a.isDirty = !0); - }); - b[g] || b.optionalAxis === g || a.error(18, !0); - }); - }, - updateParallelArrays: function(a, c) { - var d = a.series, - e = arguments, - g = b(c) - ? function(b) { - var g = 'y' === b && d.toYData ? d.toYData(a) : a[b]; - d[b + 'Data'][c] = g; - } - : function(a) { - Array.prototype[c].apply( - d[a + 'Data'], - Array.prototype.slice.call(e, 2), - ); - }; - u(d.parallelArrays, g); - }, - autoIncrement: function() { - var b = this.options, - c = this.xIncrement, - d, - e = b.pointIntervalUnit, - g = 0, - c = I(c, b.pointStart, 0); - this.pointInterval = d = I(this.pointInterval, b.pointInterval, 1); - e && - ((b = new l(c)), - 'day' === e - ? (b = +b[l.hcSetDate](b[l.hcGetDate]() + d)) - : 'month' === e - ? (b = +b[l.hcSetMonth](b[l.hcGetMonth]() + d)) - : 'year' === e && - (b = +b[l.hcSetFullYear](b[l.hcGetFullYear]() + d)), - l.hcHasTimeZone && (g = a.getTZOffset(b) - a.getTZOffset(c)), - (d = b - c + g)); - this.xIncrement = c + d; - return c; - }, - setOptions: function(a) { - var b = this.chart, - c = b.options, - d = c.plotOptions, - g = (b.userOptions || {}).plotOptions || {}, - e = d[this.type]; - this.userOptions = a; - b = z(e, d.series, a); - this.tooltipOptions = z( - r.tooltip, - r.plotOptions.series && r.plotOptions.series.tooltip, - r.plotOptions[this.type].tooltip, - c.tooltip.userOptions, - d.series && d.series.tooltip, - d[this.type].tooltip, - a.tooltip, - ); - this.stickyTracking = I( - a.stickyTracking, - g[this.type] && g[this.type].stickyTracking, - g.series && g.series.stickyTracking, - this.tooltipOptions.shared && !this.noSharedTooltip - ? !0 - : b.stickyTracking, - ); - null === e.marker && delete b.marker; - this.zoneAxis = b.zoneAxis; - a = this.zones = (b.zones || []).slice(); - (!b.negativeColor && !b.negativeFillColor) || - b.zones || - a.push({ - value: b[this.zoneAxis + 'Threshold'] || b.threshold || 0, - className: 'highcharts-negative', - color: b.negativeColor, - fillColor: b.negativeFillColor, - }); - a.length && - w(a[a.length - 1].value) && - a.push({ color: this.color, fillColor: this.fillColor }); - return b; - }, - getCyclic: function(a, b, c) { - var d, - g = this.chart, - e = this.userOptions, - k = a + 'Index', - h = a + 'Counter', - q = c ? c.length : I(g.options.chart[a + 'Count'], g[a + 'Count']); - b || - ((d = I(e[k], e['_' + k])), - w(d) || - (g.series.length || (g[h] = 0), - (e['_' + k] = d = g[h] % q), - (g[h] += 1)), - c && (b = c[d])); - void 0 !== d && (this[k] = d); - this[a] = b; - }, - getColor: function() { - this.options.colorByPoint - ? (this.options.color = null) - : this.getCyclic( - 'color', - this.options.color || n[this.type].color, - this.chart.options.colors, - ); - }, - getSymbol: function() { - this.getCyclic( - 'symbol', - this.options.marker.symbol, - this.chart.options.symbols, - ); - }, - drawLegendSymbol: a.LegendSymbolMixin.drawLineMarker, - setData: function(d, e, h, f) { - var g = this, - q = g.points, - m = (q && q.length) || 0, - l, - A = g.options, - t = g.chart, - x = null, - n = g.xAxis, - p = A.turboThreshold, - z = this.xData, - F = this.yData, - C = (l = g.pointArrayMap) && l.length; - d = d || []; - l = d.length; - e = I(e, !0); - if ( - !1 !== f && - l && - m === l && - !g.cropped && - !g.hasGroupedData && - g.visible - ) - u(d, function(a, b) { - q[b].update && a !== A.data[b] && q[b].update(a, !1, null, !1); - }); - else { - g.xIncrement = null; - g.colorCounter = 0; - u(this.parallelArrays, function(a) { - g[a + 'Data'].length = 0; - }); - if (p && l > p) { - for (h = 0; null === x && h < l; ) (x = d[h]), h++; - if (b(x)) - for (h = 0; h < l; h++) - (z[h] = this.autoIncrement()), (F[h] = d[h]); - else if (c(x)) - if (C) - for (h = 0; h < l; h++) - (x = d[h]), (z[h] = x[0]), (F[h] = x.slice(1, C + 1)); - else - for (h = 0; h < l; h++) - (x = d[h]), (z[h] = x[0]), (F[h] = x[1]); - else a.error(12); - } else - for (h = 0; h < l; h++) - void 0 !== d[h] && - ((x = { series: g }), - g.pointClass.prototype.applyOptions.apply(x, [d[h]]), - g.updateParallelArrays(x, h)); - F && k(F[0]) && a.error(14, !0); - g.data = []; - g.options.data = g.userOptions.data = d; - for (h = m; h--; ) q[h] && q[h].destroy && q[h].destroy(); - n && (n.minRange = n.userMinRange); - g.isDirty = t.isDirtyBox = !0; - g.isDirtyData = !!q; - h = !1; - } - 'point' === A.legendType && - (this.processData(), this.generatePoints()); - e && t.redraw(h); - }, - processData: function(b) { - var c = this.xData, - d = this.yData, - e = c.length, - g; - g = 0; - var k, - h, - q = this.xAxis, - f, - m = this.options; - f = m.cropThreshold; - var l = this.getExtremesFromAll || m.getExtremesFromAll, - t = this.isCartesian, - m = q && q.val2lin, - x = q && q.isLog, - n = this.requireSorting, - p, - z; - if (t && !this.isDirty && !q.isDirty && !this.yAxis.isDirty && !b) - return !1; - q && ((b = q.getExtremes()), (p = b.min), (z = b.max)); - if (t && this.sorted && !l && (!f || e > f || this.forceCrop)) - if (c[e - 1] < p || c[0] > z) (c = []), (d = []); - else if (c[0] < p || c[e - 1] > z) - (g = this.cropData(this.xData, this.yData, p, z)), - (c = g.xData), - (d = g.yData), - (g = g.start), - (k = !0); - for (f = c.length || 1; --f; ) - (e = x ? m(c[f]) - m(c[f - 1]) : c[f] - c[f - 1]), - 0 < e && (void 0 === h || e < h) - ? (h = e) - : 0 > e && n && (a.error(15), (n = !1)); - this.cropped = k; - this.cropStart = g; - this.processedXData = c; - this.processedYData = d; - this.closestPointRange = h; - }, - cropData: function(a, b, c, d) { - var g = a.length, - e = 0, - k = g, - h = I(this.cropShoulder, 1), - f; - for (f = 0; f < g; f++) - if (a[f] >= c) { - e = Math.max(0, f - h); - break; - } - for (c = f; c < g; c++) - if (a[c] > d) { - k = c + h; - break; - } - return { - xData: a.slice(e, k), - yData: b.slice(e, k), - start: e, - end: k, - }; - }, - generatePoints: function() { - var a = this.options, - b = a.data, - c = this.data, - d, - g = this.processedXData, - e = this.processedYData, - k = this.pointClass, - h = g.length, - f = this.cropStart || 0, - m, - l = this.hasGroupedData, - a = a.keys, - t, - x = [], - n; - c || l || ((c = []), (c.length = b.length), (c = this.data = c)); - a && l && (this.options.keys = !1); - for (n = 0; n < h; n++) - (m = f + n), - l - ? ((t = new k().init(this, [g[n]].concat(K(e[n])))), - (t.dataGroup = this.groupMap[n])) - : (t = c[m]) || - void 0 === b[m] || - (c[m] = t = new k().init(this, b[m], g[n])), - t && ((t.index = m), (x[n] = t)); - this.options.keys = a; - if (c && (h !== (d = c.length) || l)) - for (n = 0; n < d; n++) - n !== f || l || (n += h), - c[n] && (c[n].destroyElements(), (c[n].plotX = void 0)); - this.data = c; - this.points = x; - }, - getExtremes: function(a) { - var d = this.yAxis, - e = this.processedXData, - k, - g = [], - h = 0; - k = this.xAxis.getExtremes(); - var f = k.min, - q = k.max, - m, - l, - t, - n; - a = a || this.stackedYData || this.processedYData || []; - k = a.length; - for (n = 0; n < k; n++) - if ( - ((l = e[n]), - (t = a[n]), - (m = - (b(t, !0) || c(t)) && - (!d.positiveValuesOnly || t.length || 0 < t)), - (l = - this.getExtremesFromAll || - this.options.getExtremesFromAll || - this.cropped || - ((e[n + 1] || l) >= f && (e[n - 1] || l) <= q)), - m && l) - ) - if ((m = t.length)) - for (; m--; ) 'number' === typeof t[m] && (g[h++] = t[m]); - else g[h++] = t; - this.dataMin = p(g); - this.dataMax = H(g); - }, - translate: function() { - this.processedXData || this.processData(); - this.generatePoints(); - var a = this.options, - c = a.stacking, - d = this.xAxis, - e = d.categories, - g = this.yAxis, - k = this.points, - h = k.length, - m = !!this.modifyValue, - l = a.pointPlacement, - t = 'between' === l || b(l), - n = a.threshold, - x = a.startFromThreshold ? n : 0, - p, - z, - C, - r, - u = Number.MAX_VALUE; - 'between' === l && (l = 0.5); - b(l) && (l *= I(a.pointRange || d.pointRange)); - for (a = 0; a < h; a++) { - var B = k[a], - N = B.x, - K = B.y; - z = B.low; - var D = - c && - g.stacks[ - (this.negStacks && K < (x ? 0 : n) ? '-' : '') + this.stackKey - ], - E; - g.positiveValuesOnly && null !== K && 0 >= K && (B.isNull = !0); - B.plotX = p = f( - Math.min( - Math.max( - -1e5, - d.translate(N, 0, 0, 0, 1, l, 'flags' === this.type), - ), - 1e5, - ), - ); - c && - this.visible && - !B.isNull && - D && - D[N] && - ((r = this.getStackIndicator(r, N, this.index)), - (E = D[N]), - (K = E.points[r.key]), - (z = K[0]), - (K = K[1]), - z === x && r.key === D[N].base && (z = I(n, g.min)), - g.positiveValuesOnly && 0 >= z && (z = null), - (B.total = B.stackTotal = E.total), - (B.percentage = E.total && (B.y / E.total) * 100), - (B.stackY = K), - E.setOffset(this.pointXOffset || 0, this.barW || 0)); - B.yBottom = w(z) ? g.translate(z, 0, 1, 0, 1) : null; - m && (K = this.modifyValue(K, B)); - B.plotY = z = - 'number' === typeof K && Infinity !== K - ? Math.min(Math.max(-1e5, g.translate(K, 0, 1, 0, 1)), 1e5) - : void 0; - B.isInside = - void 0 !== z && 0 <= z && z <= g.len && 0 <= p && p <= d.len; - B.clientX = t ? f(d.translate(N, 0, 0, 0, 1, l)) : p; - B.negative = B.y < (n || 0); - B.category = e && void 0 !== e[B.x] ? e[B.x] : B.x; - B.isNull || - (void 0 !== C && (u = Math.min(u, Math.abs(p - C))), (C = p)); - B.zone = this.zones.length && B.getZone(); - } - this.closestPointRangePx = u; - }, - getValidPoints: function(a, b) { - var c = this.chart; - return d(a || this.points || [], function(a) { - return b && !c.isInsidePlot(a.plotX, a.plotY, c.inverted) - ? !1 - : !a.isNull; - }); - }, - setClip: function(a) { - var b = this.chart, - c = this.options, - d = b.renderer, - g = b.inverted, - e = this.clipBox, - k = e || b.clipBox, - h = - this.sharedClipKey || - [ - '_sharedClip', - a && a.duration, - a && a.easing, - k.height, - c.xAxis, - c.yAxis, - ].join(), - f = b[h], - q = b[h + 'm']; - f || - (a && - ((k.width = 0), - g && (k.x = b.plotSizeX), - (b[h + 'm'] = q = d.clipRect( - g ? b.plotSizeX + 99 : -99, - g ? -b.plotLeft : -b.plotTop, - 99, - g ? b.chartWidth : b.chartHeight, - ))), - (b[h] = f = d.clipRect(k)), - (f.count = { length: 0 })); - a && - !f.count[this.index] && - ((f.count[this.index] = !0), (f.count.length += 1)); - !1 !== c.clip && - (this.group.clip(a || e ? f : b.clipRect), - this.markerGroup.clip(q), - (this.sharedClipKey = h)); - a || - (f.count[this.index] && - (delete f.count[this.index], --f.count.length), - 0 === f.count.length && - h && - b[h] && - (e || (b[h] = b[h].destroy()), - b[h + 'm'] && (b[h + 'm'] = b[h + 'm'].destroy()))); - }, - animate: function(a) { - var b = this.chart, - c = D(this.options.animation), - d; - a - ? this.setClip(c) - : ((d = this.sharedClipKey), - (a = b[d]) && a.animate({ width: b.plotSizeX, x: 0 }, c), - b[d + 'm'] && - b[d + 'm'].animate({ width: b.plotSizeX + 99, x: 0 }, c), - (this.animate = null)); - }, - afterAnimate: function() { - this.setClip(); - m(this, 'afterAnimate'); - this.finishedAnimating = !0; - }, - drawPoints: function() { - var a = this.points, - b = this.chart, - c, - d, - g, - e, - k = this.options.marker, - h, - f, - l, - m = this[this.specialGroup] || this.markerGroup, - t, - n = I( - k.enabled, - this.xAxis.isRadial ? !0 : null, - this.closestPointRangePx >= 2 * k.radius, - ); - if (!1 !== k.enabled || this._hasPointMarkers) - for (c = 0; c < a.length; c++) - (d = a[c]), - (e = d.graphic), - (h = d.marker || {}), - (f = !!d.marker), - (g = (n && void 0 === h.enabled) || h.enabled), - (l = d.isInside), - g && !d.isNull - ? ((g = I(h.symbol, this.symbol)), - (d.hasImage = 0 === g.indexOf('url')), - (t = this.markerAttribs(d, d.selected && 'select')), - e - ? e[l ? 'show' : 'hide'](!0).animate(t) - : l && - (0 < t.width || d.hasImage) && - (d.graphic = e = b.renderer - .symbol(g, t.x, t.y, t.width, t.height, f ? h : k) - .add(m)), - e && e.attr(this.pointAttribs(d, d.selected && 'select')), - e && e.addClass(d.getClassName(), !0)) - : e && (d.graphic = e.destroy()); - }, - markerAttribs: function(a, b) { - var c = this.options.marker, - d = a.marker || {}, - g = I(d.radius, c.radius); - b && - ((c = c.states[b]), - (b = d.states && d.states[b]), - (g = I( - b && b.radius, - c && c.radius, - g + ((c && c.radiusPlus) || 0), - ))); - a.hasImage && (g = 0); - a = { x: Math.floor(a.plotX) - g, y: a.plotY - g }; - g && (a.width = a.height = 2 * g); - return a; - }, - pointAttribs: function(a, b) { - var c = this.options.marker, - d = a && a.options, - g = (d && d.marker) || {}, - e = this.color, - k = d && d.color, - h = a && a.color, - d = I(g.lineWidth, c.lineWidth); - a = a && a.zone && a.zone.color; - e = k || a || h || e; - a = g.fillColor || c.fillColor || e; - e = g.lineColor || c.lineColor || e; - b && - ((c = c.states[b]), - (b = (g.states && g.states[b]) || {}), - (d = I( - b.lineWidth, - c.lineWidth, - d + I(b.lineWidthPlus, c.lineWidthPlus, 0), - )), - (a = b.fillColor || c.fillColor || a), - (e = b.lineColor || c.lineColor || e)); - return { stroke: e, 'stroke-width': d, fill: a }; - }, - destroy: function() { - var a = this, - b = a.chart, - c = /AppleWebKit\/533/.test(N.navigator.userAgent), - d, - g, - k = a.data || [], - h, - f; - m(a, 'destroy'); - x(a); - u(a.axisTypes || [], function(b) { - (f = a[b]) && - f.series && - (e(f.series, a), (f.isDirty = f.forceRedraw = !0)); - }); - a.legendItem && a.chart.legend.destroyItem(a); - for (g = k.length; g--; ) (h = k[g]) && h.destroy && h.destroy(); - a.points = null; - clearTimeout(a.animationTimeout); - B(a, function(a, b) { - a instanceof t && - !a.survive && - ((d = c && 'group' === b ? 'hide' : 'destroy'), a[d]()); - }); - b.hoverSeries === a && (b.hoverSeries = null); - e(b.series, a); - b.orderSeries(); - B(a, function(b, c) { - delete a[c]; - }); - }, - getGraphPath: function(a, b, c) { - var d = this, - g = d.options, - e = g.step, - k, - h = [], - f = [], - l; - a = a || d.points; - (k = a.reversed) && a.reverse(); - (e = { right: 1, center: 2 }[e] || (e && 3)) && k && (e = 4 - e); - !g.connectNulls || b || c || (a = this.getValidPoints(a)); - u(a, function(k, m) { - var q = k.plotX, - t = k.plotY, - n = a[m - 1]; - (k.leftCliff || (n && n.rightCliff)) && !c && (l = !0); - k.isNull && !w(b) && 0 < m - ? (l = !g.connectNulls) - : k.isNull && !b - ? (l = !0) - : (0 === m || l - ? (m = ['M', k.plotX, k.plotY]) - : d.getPointSpline - ? (m = d.getPointSpline(a, k, m)) - : e - ? ((m = - 1 === e - ? ['L', n.plotX, t] - : 2 === e - ? [ - 'L', - (n.plotX + q) / 2, - n.plotY, - 'L', - (n.plotX + q) / 2, - t, - ] - : ['L', q, n.plotY]), - m.push('L', q, t)) - : (m = ['L', q, t]), - f.push(k.x), - e && f.push(k.x), - h.push.apply(h, m), - (l = !1)); - }); - h.xMap = f; - return (d.graphPath = h); - }, - drawGraph: function() { - var a = this, - b = this.options, - c = (this.gappedPath || this.getGraphPath).call(this), - d = [ - [ - 'graph', - 'highcharts-graph', - b.lineColor || this.color, - b.dashStyle, - ], - ]; - u(this.zones, function(c, e) { - d.push([ - 'zone-graph-' + e, - 'highcharts-graph highcharts-zone-graph-' + - e + - ' ' + - (c.className || ''), - c.color || a.color, - c.dashStyle || b.dashStyle, - ]); - }); - u(d, function(d, e) { - var g = d[0], - k = a[g]; - k - ? ((k.endX = a.preventGraphAnimation ? null : c.xMap), - k.animate({ d: c })) - : c.length && - ((a[g] = a.chart.renderer - .path(c) - .addClass(d[1]) - .attr({ zIndex: 1 }) - .add(a.group)), - (k = { - stroke: d[2], - 'stroke-width': b.lineWidth, - fill: (a.fillGraph && a.color) || 'none', - }), - d[3] - ? (k.dashstyle = d[3]) - : 'square' !== b.linecap && - (k['stroke-linecap'] = k['stroke-linejoin'] = 'round'), - (k = a[g].attr(k).shadow(2 > e && b.shadow))); - k && ((k.startX = c.xMap), (k.isArea = c.isArea)); - }); - }, - applyZones: function() { - var a = this, - b = this.chart, - c = b.renderer, - d = this.zones, - e, - k, - h = this.clips || [], - f, - m = this.graph, - l = this.area, - t = Math.max(b.chartWidth, b.chartHeight), - n = this[(this.zoneAxis || 'y') + 'Axis'], - x, - p, - z = b.inverted, - C, - r, - w, - B, - K = !1; - d.length && - (m || l) && - n && - void 0 !== n.min && - ((p = n.reversed), - (C = n.horiz), - m && m.hide(), - l && l.hide(), - (x = n.getExtremes()), - u(d, function(d, g) { - e = p ? (C ? b.plotWidth : 0) : C ? 0 : n.toPixels(x.min); - e = Math.min(Math.max(I(k, e), 0), t); - k = Math.min( - Math.max(Math.round(n.toPixels(I(d.value, x.max), !0)), 0), - t, - ); - K && (e = k = n.toPixels(x.max)); - r = Math.abs(e - k); - w = Math.min(e, k); - B = Math.max(e, k); - n.isXAxis - ? ((f = { x: z ? B : w, y: 0, width: r, height: t }), - C || (f.x = b.plotHeight - f.x)) - : ((f = { x: 0, y: z ? B : w, width: t, height: r }), - C && (f.y = b.plotWidth - f.y)); - z && - c.isVML && - (f = n.isXAxis - ? { x: 0, y: p ? w : B, height: f.width, width: b.chartWidth } - : { - x: f.y - b.plotLeft - b.spacingBox.x, - y: 0, - width: f.height, - height: b.chartHeight, - }); - h[g] - ? h[g].animate(f) - : ((h[g] = c.clipRect(f)), - m && a['zone-graph-' + g].clip(h[g]), - l && a['zone-area-' + g].clip(h[g])); - K = d.value > x.max; - }), - (this.clips = h)); - }, - invertGroups: function(a) { - function b() { - u(['group', 'markerGroup'], function(b) { - c[b] && - (d.renderer.isVML && - c[b].attr({ width: c.yAxis.len, height: c.xAxis.len }), - (c[b].width = c.yAxis.len), - (c[b].height = c.xAxis.len), - c[b].invert(a)); - }); - } - var c = this, - d = c.chart, - e; - c.xAxis && - ((e = E(d, 'resize', b)), - E(c, 'destroy', e), - b(a), - (c.invertGroups = b)); - }, - plotGroup: function(a, b, c, d, e) { - var g = this[a], - k = !g; - k && - (this[a] = g = this.chart.renderer - .g() - .attr({ zIndex: d || 0.1 }) - .add(e)); - g.addClass( - 'highcharts-' + - b + - ' highcharts-series-' + - this.index + - ' highcharts-' + - this.type + - '-series ' + - (w(this.colorIndex) - ? 'highcharts-color-' + this.colorIndex + ' ' - : '') + - (this.options.className || '') + - (g.hasClass('highcharts-tracker') ? ' highcharts-tracker' : ''), - !0, - ); - g.attr({ visibility: c })[k ? 'attr' : 'animate'](this.getPlotBox()); - return g; - }, - getPlotBox: function() { - var a = this.chart, - b = this.xAxis, - c = this.yAxis; - a.inverted && ((b = c), (c = this.xAxis)); - return { - translateX: b ? b.left : a.plotLeft, - translateY: c ? c.top : a.plotTop, - scaleX: 1, - scaleY: 1, - }; - }, - render: function() { - var a = this, - b = a.chart, - c, - d = a.options, - e = !!a.animate && b.renderer.isSVG && D(d.animation).duration, - k = a.visible ? 'inherit' : 'hidden', - h = d.zIndex, - f = a.hasRendered, - m = b.seriesGroup, - l = b.inverted; - c = a.plotGroup('group', 'series', k, h, m); - a.markerGroup = a.plotGroup('markerGroup', 'markers', k, h, m); - e && a.animate(!0); - c.inverted = a.isCartesian ? l : !1; - a.drawGraph && (a.drawGraph(), a.applyZones()); - a.drawDataLabels && a.drawDataLabels(); - a.visible && a.drawPoints(); - a.drawTracker && - !1 !== a.options.enableMouseTracking && - a.drawTracker(); - a.invertGroups(l); - !1 === d.clip || a.sharedClipKey || f || c.clip(b.clipRect); - e && a.animate(); - f || - (a.animationTimeout = C(function() { - a.afterAnimate(); - }, e)); - a.isDirty = !1; - a.hasRendered = !0; - }, - redraw: function() { - var a = this.chart, - b = this.isDirty || this.isDirtyData, - c = this.group, - d = this.xAxis, - e = this.yAxis; - c && - (a.inverted && c.attr({ width: a.plotWidth, height: a.plotHeight }), - c.animate({ - translateX: I(d && d.left, a.plotLeft), - translateY: I(e && e.top, a.plotTop), - })); - this.translate(); - this.render(); - b && delete this.kdTree; - }, - kdAxisArray: ['clientX', 'plotY'], - searchPoint: function(a, b) { - var c = this.xAxis, - d = this.yAxis, - e = this.chart.inverted; - return this.searchKDTree( - { - clientX: e ? c.len - a.chartY + c.pos : a.chartX - c.pos, - plotY: e ? d.len - a.chartX + d.pos : a.chartY - d.pos, - }, - b, - ); - }, - buildKDTree: function() { - function a(c, d, e) { - var g, k; - if ((k = c && c.length)) - return ( - (g = b.kdAxisArray[d % e]), - c.sort(function(a, b) { - return a[g] - b[g]; - }), - (k = Math.floor(k / 2)), - { - point: c[k], - left: a(c.slice(0, k), d + 1, e), - right: a(c.slice(k + 1), d + 1, e), - } - ); - } - this.buildingKdTree = !0; - var b = this, - c = -1 < b.options.findNearestPointBy.indexOf('y') ? 2 : 1; - delete b.kdTree; - C( - function() { - b.kdTree = a(b.getValidPoints(null, !b.directTouch), c, c); - b.buildingKdTree = !1; - }, - b.options.kdNow ? 0 : 1, - ); - }, - searchKDTree: function(a, b) { - function c(a, b, g, f) { - var m = b.point, - l = d.kdAxisArray[g % f], - q, - t, - n = m; - t = w(a[e]) && w(m[e]) ? Math.pow(a[e] - m[e], 2) : null; - q = w(a[k]) && w(m[k]) ? Math.pow(a[k] - m[k], 2) : null; - q = (t || 0) + (q || 0); - m.dist = w(q) ? Math.sqrt(q) : Number.MAX_VALUE; - m.distX = w(t) ? Math.sqrt(t) : Number.MAX_VALUE; - l = a[l] - m[l]; - q = 0 > l ? 'left' : 'right'; - t = 0 > l ? 'right' : 'left'; - b[q] && ((q = c(a, b[q], g + 1, f)), (n = q[h] < n[h] ? q : m)); - b[t] && - Math.sqrt(l * l) < n[h] && - ((a = c(a, b[t], g + 1, f)), (n = a[h] < n[h] ? a : n)); - return n; - } - var d = this, - e = this.kdAxisArray[0], - k = this.kdAxisArray[1], - h = b ? 'distX' : 'dist'; - b = -1 < d.options.findNearestPointBy.indexOf('y') ? 2 : 1; - this.kdTree || this.buildingKdTree || this.buildKDTree(); - if (this.kdTree) return c(a, this.kdTree, b, b); - }, - }, - ); - })(M); - (function(a) { - var E = a.Axis, - D = a.Chart, - H = a.correctFloat, - p = a.defined, - f = a.destroyObjectProperties, - l = a.each, - r = a.format, - n = a.objectEach, - w = a.pick, - u = a.Series; - a.StackItem = function(a, h, f, d, c) { - var b = a.chart.inverted; - this.axis = a; - this.isNegative = f; - this.options = h; - this.x = d; - this.total = null; - this.points = {}; - this.stack = c; - this.rightCliff = this.leftCliff = 0; - this.alignOptions = { - align: h.align || (b ? (f ? 'left' : 'right') : 'center'), - verticalAlign: h.verticalAlign || (b ? 'middle' : f ? 'bottom' : 'top'), - y: w(h.y, b ? 4 : f ? 14 : -6), - x: w(h.x, b ? (f ? -6 : 6) : 0), - }; - this.textAlign = h.textAlign || (b ? (f ? 'right' : 'left') : 'center'); - }; - a.StackItem.prototype = { - destroy: function() { - f(this, this.axis); - }, - render: function(a) { - var e = this.options, - f = e.format, - f = f ? r(f, this) : e.formatter.call(this); - this.label - ? this.label.attr({ text: f, visibility: 'hidden' }) - : (this.label = this.axis.chart.renderer - .text(f, null, null, e.useHTML) - .css(e.style) - .attr({ - align: this.textAlign, - rotation: e.rotation, - visibility: 'hidden', - }) - .add(a)); - }, - setOffset: function(a, h) { - var e = this.axis, - d = e.chart, - c = e.translate(e.usePercentage ? 100 : this.total, 0, 0, 0, 1), - e = e.translate(0), - e = Math.abs(c - e); - a = d.xAxis[0].translate(this.x) + a; - c = this.getStackBox(d, this, a, c, h, e); - if ((h = this.label)) - h.align(this.alignOptions, null, c), - (c = h.alignAttr), - h[ - !1 === this.options.crop || d.isInsidePlot(c.x, c.y) - ? 'show' - : 'hide' - ](!0); - }, - getStackBox: function(a, h, f, d, c, b) { - var e = h.axis.reversed, - l = a.inverted; - a = a.plotHeight; - h = (h.isNegative && !e) || (!h.isNegative && e); - return { - x: l ? (h ? d : d - b) : f, - y: l ? a - f - c : h ? a - d - b : a - d, - width: l ? b : c, - height: l ? c : b, - }; - }, - }; - D.prototype.getStacks = function() { - var a = this; - l(a.yAxis, function(a) { - a.stacks && a.hasVisibleSeries && (a.oldStacks = a.stacks); - }); - l(a.series, function(e) { - !e.options.stacking || - (!0 !== e.visible && !1 !== a.options.chart.ignoreHiddenSeries) || - (e.stackKey = e.type + w(e.options.stack, '')); - }); - }; - E.prototype.buildStacks = function() { - var a = this.series, - h = w(this.options.reversedStacks, !0), - f = a.length, - d; - if (!this.isXAxis) { - this.usePercentage = !1; - for (d = f; d--; ) a[h ? d : f - d - 1].setStackedPoints(); - for (d = 0; d < f; d++) a[d].modifyStacks(); - } - }; - E.prototype.renderStackTotals = function() { - var a = this.chart, - h = a.renderer, - f = this.stacks, - d = this.stackTotalGroup; - d || - (this.stackTotalGroup = d = h - .g('stack-labels') - .attr({ visibility: 'visible', zIndex: 6 }) - .add()); - d.translate(a.plotLeft, a.plotTop); - n(f, function(a) { - n(a, function(a) { - a.render(d); - }); - }); - }; - E.prototype.resetStacks = function() { - var a = this, - h = a.stacks; - a.isXAxis || - n(h, function(e) { - n(e, function(d, c) { - d.touched < a.stacksTouched - ? (d.destroy(), delete e[c]) - : ((d.total = null), (d.cumulative = null)); - }); - }); - }; - E.prototype.cleanStacks = function() { - var a; - this.isXAxis || - (this.oldStacks && (a = this.stacks = this.oldStacks), - n(a, function(a) { - n(a, function(a) { - a.cumulative = a.total; - }); - })); - }; - u.prototype.setStackedPoints = function() { - if ( - this.options.stacking && - (!0 === this.visible || - !1 === this.chart.options.chart.ignoreHiddenSeries) - ) { - var e = this.processedXData, - h = this.processedYData, - f = [], - d = h.length, - c = this.options, - b = c.threshold, - k = w(c.startFromThreshold && b, 0), - l = c.stack, - c = c.stacking, - n = this.stackKey, - r = '-' + n, - x = this.negStacks, - u = this.yAxis, - t = u.stacks, - C = u.oldStacks, - N, - q, - A, - F, - G, - g, - v; - u.stacksTouched += 1; - for (G = 0; G < d; G++) - (g = e[G]), - (v = h[G]), - (N = this.getStackIndicator(N, g, this.index)), - (F = N.key), - (A = (q = x && v < (k ? 0 : b)) ? r : n), - t[A] || (t[A] = {}), - t[A][g] || - (C[A] && C[A][g] - ? ((t[A][g] = C[A][g]), (t[A][g].total = null)) - : (t[A][g] = new a.StackItem( - u, - u.options.stackLabels, - q, - g, - l, - ))), - (A = t[A][g]), - null !== v - ? ((A.points[F] = A.points[this.index] = [w(A.cumulative, k)]), - p(A.cumulative) || (A.base = F), - (A.touched = u.stacksTouched), - 0 < N.index && - !1 === this.singleStacks && - (A.points[F][0] = A.points[this.index + ',' + g + ',0'][0])) - : (A.points[F] = A.points[this.index] = null), - 'percent' === c - ? ((q = q ? n : r), - x && t[q] && t[q][g] - ? ((q = t[q][g]), - (A.total = q.total = - Math.max(q.total, A.total) + Math.abs(v) || 0)) - : (A.total = H(A.total + (Math.abs(v) || 0)))) - : (A.total = H(A.total + (v || 0))), - (A.cumulative = w(A.cumulative, k) + (v || 0)), - null !== v && - (A.points[F].push(A.cumulative), (f[G] = A.cumulative)); - 'percent' === c && (u.usePercentage = !0); - this.stackedYData = f; - u.oldStacks = {}; - } - }; - u.prototype.modifyStacks = function() { - var a = this, - h = a.stackKey, - f = a.yAxis.stacks, - d = a.processedXData, - c, - b = a.options.stacking; - a[b + 'Stacker'] && - l([h, '-' + h], function(e) { - for (var k = d.length, h, l; k--; ) - if ( - ((h = d[k]), - (c = a.getStackIndicator(c, h, a.index, e)), - (l = (h = f[e] && f[e][h]) && h.points[c.key])) - ) - a[b + 'Stacker'](l, h, k); - }); - }; - u.prototype.percentStacker = function(a, h, f) { - h = h.total ? 100 / h.total : 0; - a[0] = H(a[0] * h); - a[1] = H(a[1] * h); - this.stackedYData[f] = a[1]; - }; - u.prototype.getStackIndicator = function(a, h, f, d) { - !p(a) || a.x !== h || (d && a.key !== d) - ? (a = { x: h, index: 0, key: d }) - : a.index++; - a.key = [f, h, a.index].join(); - return a; - }; - })(M); - (function(a) { - var E = a.addEvent, - D = a.animate, - H = a.Axis, - p = a.createElement, - f = a.css, - l = a.defined, - r = a.each, - n = a.erase, - w = a.extend, - u = a.fireEvent, - e = a.inArray, - h = a.isNumber, - m = a.isObject, - d = a.isArray, - c = a.merge, - b = a.objectEach, - k = a.pick, - z = a.Point, - B = a.Series, - I = a.seriesTypes, - x = a.setAnimation, - K = a.splat; - w(a.Chart.prototype, { - addSeries: function(a, b, c) { - var d, - e = this; - a && - ((b = k(b, !0)), - u(e, 'addSeries', { options: a }, function() { - d = e.initSeries(a); - e.isDirtyLegend = !0; - e.linkSeries(); - b && e.redraw(c); - })); - return d; - }, - addAxis: function(a, b, d, e) { - var h = b ? 'xAxis' : 'yAxis', - f = this.options; - a = c(a, { index: this[h].length, isX: b }); - b = new H(this, a); - f[h] = K(f[h] || {}); - f[h].push(a); - k(d, !0) && this.redraw(e); - return b; - }, - showLoading: function(a) { - var b = this, - c = b.options, - d = b.loadingDiv, - e = c.loading, - k = function() { - d && - f(d, { - left: b.plotLeft + 'px', - top: b.plotTop + 'px', - width: b.plotWidth + 'px', - height: b.plotHeight + 'px', - }); - }; - d || - ((b.loadingDiv = d = p( - 'div', - { className: 'highcharts-loading highcharts-loading-hidden' }, - null, - b.container, - )), - (b.loadingSpan = p( - 'span', - { className: 'highcharts-loading-inner' }, - null, - d, - )), - E(b, 'redraw', k)); - d.className = 'highcharts-loading'; - b.loadingSpan.innerHTML = a || c.lang.loading; - f(d, w(e.style, { zIndex: 10 })); - f(b.loadingSpan, e.labelStyle); - b.loadingShown || - (f(d, { opacity: 0, display: '' }), - D( - d, - { opacity: e.style.opacity || 0.5 }, - { duration: e.showDuration || 0 }, - )); - b.loadingShown = !0; - k(); - }, - hideLoading: function() { - var a = this.options, - b = this.loadingDiv; - b && - ((b.className = 'highcharts-loading highcharts-loading-hidden'), - D( - b, - { opacity: 0 }, - { - duration: a.loading.hideDuration || 100, - complete: function() { - f(b, { display: 'none' }); - }, - }, - )); - this.loadingShown = !1; - }, - propsRequireDirtyBox: 'backgroundColor borderColor borderWidth margin marginTop marginRight marginBottom marginLeft spacing spacingTop spacingRight spacingBottom spacingLeft borderRadius plotBackgroundColor plotBackgroundImage plotBorderColor plotBorderWidth plotShadow shadow'.split( - ' ', - ), - propsRequireUpdateSeries: 'chart.inverted chart.polar chart.ignoreHiddenSeries chart.type colors plotOptions tooltip'.split( - ' ', - ), - update: function(a, d, f) { - var m = this, - n = { - credits: 'addCredits', - title: 'setTitle', - subtitle: 'setSubtitle', - }, - t = a.chart, - x, - g, - p = []; - if (t) { - c(!0, m.options.chart, t); - 'className' in t && m.setClassName(t.className); - if ('inverted' in t || 'polar' in t) m.propFromSeries(), (x = !0); - 'alignTicks' in t && (x = !0); - b(t, function(a, b) { - -1 !== e('chart.' + b, m.propsRequireUpdateSeries) && (g = !0); - -1 !== e(b, m.propsRequireDirtyBox) && (m.isDirtyBox = !0); - }); - 'style' in t && m.renderer.setStyle(t.style); - } - a.colors && (this.options.colors = a.colors); - a.plotOptions && c(!0, this.options.plotOptions, a.plotOptions); - b(a, function(a, b) { - if (m[b] && 'function' === typeof m[b].update) m[b].update(a, !1); - else if ('function' === typeof m[n[b]]) m[n[b]](a); - 'chart' !== b && -1 !== e(b, m.propsRequireUpdateSeries) && (g = !0); - }); - r('xAxis yAxis zAxis series colorAxis pane'.split(' '), function(b) { - a[b] && - (r(K(a[b]), function(a, c) { - (c = (l(a.id) && m.get(a.id)) || m[b][c]) && - c.coll === b && - (c.update(a, !1), f && (c.touched = !0)); - if (!c && f) - if ('series' === b) m.addSeries(a, !1).touched = !0; - else if ('xAxis' === b || 'yAxis' === b) - m.addAxis(a, 'xAxis' === b, !1).touched = !0; - }), - f && - r(m[b], function(a) { - a.touched ? delete a.touched : p.push(a); - })); - }); - r(p, function(a) { - a.remove(!1); - }); - x && - r(m.axes, function(a) { - a.update({}, !1); - }); - g && - r(m.series, function(a) { - a.update({}, !1); - }); - a.loading && c(!0, m.options.loading, a.loading); - x = t && t.width; - t = t && t.height; - (h(x) && x !== m.chartWidth) || (h(t) && t !== m.chartHeight) - ? m.setSize(x, t) - : k(d, !0) && m.redraw(); - }, - setSubtitle: function(a) { - this.setTitle(void 0, a); - }, - }); - w(z.prototype, { - update: function(a, b, c, d) { - function e() { - h.applyOptions(a); - null === h.y && g && (h.graphic = g.destroy()); - m(a, !0) && - (g && - g.element && - a && - a.marker && - void 0 !== a.marker.symbol && - (h.graphic = g.destroy()), - a && - a.dataLabels && - h.dataLabel && - (h.dataLabel = h.dataLabel.destroy()), - h.connector && (h.connector = h.connector.destroy())); - l = h.index; - f.updateParallelArrays(h, l); - t.data[l] = m(t.data[l], !0) || m(a, !0) ? h.options : a; - f.isDirty = f.isDirtyData = !0; - !f.fixedBox && f.hasCartesianSeries && (n.isDirtyBox = !0); - 'point' === t.legendType && (n.isDirtyLegend = !0); - b && n.redraw(c); - } - var h = this, - f = h.series, - g = h.graphic, - l, - n = f.chart, - t = f.options; - b = k(b, !0); - !1 === d ? e() : h.firePointEvent('update', { options: a }, e); - }, - remove: function(a, b) { - this.series.removePoint(e(this, this.series.data), a, b); - }, - }); - w(B.prototype, { - addPoint: function(a, b, c, d) { - var e = this.options, - h = this.data, - f = this.chart, - g = this.xAxis, - g = g && g.hasNames && g.names, - l = e.data, - m, - n, - t = this.xData, - q, - x; - b = k(b, !0); - m = { series: this }; - this.pointClass.prototype.applyOptions.apply(m, [a]); - x = m.x; - q = t.length; - if (this.requireSorting && x < t[q - 1]) - for (n = !0; q && t[q - 1] > x; ) q--; - this.updateParallelArrays(m, 'splice', q, 0, 0); - this.updateParallelArrays(m, q); - g && m.name && (g[x] = m.name); - l.splice(q, 0, a); - n && (this.data.splice(q, 0, null), this.processData()); - 'point' === e.legendType && this.generatePoints(); - c && - (h[0] && h[0].remove - ? h[0].remove(!1) - : (h.shift(), this.updateParallelArrays(m, 'shift'), l.shift())); - this.isDirtyData = this.isDirty = !0; - b && f.redraw(d); - }, - removePoint: function(a, b, c) { - var d = this, - e = d.data, - h = e[a], - f = d.points, - g = d.chart, - l = function() { - f && f.length === e.length && f.splice(a, 1); - e.splice(a, 1); - d.options.data.splice(a, 1); - d.updateParallelArrays(h || { series: d }, 'splice', a, 1); - h && h.destroy(); - d.isDirty = !0; - d.isDirtyData = !0; - b && g.redraw(); - }; - x(c, g); - b = k(b, !0); - h ? h.firePointEvent('remove', null, l) : l(); - }, - remove: function(a, b, c) { - function d() { - e.destroy(); - h.isDirtyLegend = h.isDirtyBox = !0; - h.linkSeries(); - k(a, !0) && h.redraw(b); - } - var e = this, - h = e.chart; - !1 !== c ? u(e, 'remove', null, d) : d(); - }, - update: function(a, b) { - var d = this, - e = d.chart, - h = d.userOptions, - f = d.oldType || d.type, - l = a.type || h.type || e.options.chart.type, - g = I[f].prototype, - m, - n = ['group', 'markerGroup', 'dataLabelsGroup'], - t = ['navigatorSeries', 'baseSeries'], - x = d.finishedAnimating && { animation: !1 }; - if (Object.keys && 'data' === Object.keys(a).toString()) - return this.setData(a.data, b); - t = n.concat(t); - r(t, function(a) { - t[a] = d[a]; - delete d[a]; - }); - a = c( - h, - x, - { index: d.index, pointStart: d.xData[0] }, - { data: d.options.data }, - a, - ); - d.remove(!1, null, !1); - for (m in g) d[m] = void 0; - w(d, I[l || f].prototype); - r(t, function(a) { - d[a] = t[a]; - }); - d.init(e, a); - a.zIndex !== h.zIndex && - r(n, function(b) { - d[b] && d[b].attr({ zIndex: a.zIndex }); - }); - d.oldType = f; - e.linkSeries(); - k(b, !0) && e.redraw(!1); - }, - }); - w(H.prototype, { - update: function(a, b) { - var d = this.chart; - a = d.options[this.coll][this.options.index] = c(this.userOptions, a); - this.destroy(!0); - this.init(d, w(a, { events: void 0 })); - d.isDirtyBox = !0; - k(b, !0) && d.redraw(); - }, - remove: function(a) { - for ( - var b = this.chart, c = this.coll, e = this.series, h = e.length; - h--; - - ) - e[h] && e[h].remove(!1); - n(b.axes, this); - n(b[c], this); - d(b.options[c]) - ? b.options[c].splice(this.options.index, 1) - : delete b.options[c]; - r(b[c], function(a, b) { - a.options.index = b; - }); - this.destroy(); - b.isDirtyBox = !0; - k(a, !0) && b.redraw(); - }, - setTitle: function(a, b) { - this.update({ title: a }, b); - }, - setCategories: function(a, b) { - this.update({ categories: a }, b); - }, - }); - })(M); - (function(a) { - var E = a.color, - D = a.each, - H = a.map, - p = a.pick, - f = a.Series, - l = a.seriesType; - l( - 'area', - 'line', - { softThreshold: !1, threshold: 0 }, - { - singleStacks: !1, - getStackPoints: function(f) { - var l = [], - r = [], - u = this.xAxis, - e = this.yAxis, - h = e.stacks[this.stackKey], - m = {}, - d = this.index, - c = e.series, - b = c.length, - k, - z = p(e.options.reversedStacks, !0) ? 1 : -1, - B; - f = f || this.points; - if (this.options.stacking) { - for (B = 0; B < f.length; B++) - (f[B].leftNull = f[B].rightNull = null), (m[f[B].x] = f[B]); - a.objectEach(h, function(a, b) { - null !== a.total && r.push(b); - }); - r.sort(function(a, b) { - return a - b; - }); - k = H(c, function() { - return this.visible; - }); - D(r, function(a, c) { - var f = 0, - n, - x; - if (m[a] && !m[a].isNull) - l.push(m[a]), - D([-1, 1], function(e) { - var f = 1 === e ? 'rightNull' : 'leftNull', - l = 0, - t = h[r[c + e]]; - if (t) - for (B = d; 0 <= B && B < b; ) - (n = t.points[B]), - n || - (B === d - ? (m[a][f] = !0) - : k[B] && - (x = h[a].points[B]) && - (l -= x[1] - x[0])), - (B += z); - m[a][1 === e ? 'rightCliff' : 'leftCliff'] = l; - }); - else { - for (B = d; 0 <= B && B < b; ) { - if ((n = h[a].points[B])) { - f = n[1]; - break; - } - B += z; - } - f = e.translate(f, 0, 1, 0, 1); - l.push({ - isNull: !0, - plotX: u.translate(a, 0, 0, 0, 1), - x: a, - plotY: f, - yBottom: f, - }); - } - }); - } - return l; - }, - getGraphPath: function(a) { - var l = f.prototype.getGraphPath, - r = this.options, - u = r.stacking, - e = this.yAxis, - h, - m, - d = [], - c = [], - b = this.index, - k, - z = e.stacks[this.stackKey], - B = r.threshold, - I = e.getThreshold(r.threshold), - x, - r = r.connectNulls || 'percent' === u, - K = function(h, f, l) { - var m = a[h]; - h = u && z[m.x].points[b]; - var n = m[l + 'Null'] || 0; - l = m[l + 'Cliff'] || 0; - var x, - t, - m = !0; - l || n - ? ((x = (n ? h[0] : h[1]) + l), (t = h[0] + l), (m = !!n)) - : !u && a[f] && a[f].isNull && (x = t = B); - void 0 !== x && - (c.push({ - plotX: k, - plotY: null === x ? I : e.getThreshold(x), - isNull: m, - isCliff: !0, - }), - d.push({ - plotX: k, - plotY: null === t ? I : e.getThreshold(t), - doCurve: !1, - })); - }; - a = a || this.points; - u && (a = this.getStackPoints(a)); - for (h = 0; h < a.length; h++) - if ( - ((m = a[h].isNull), - (k = p(a[h].rectPlotX, a[h].plotX)), - (x = p(a[h].yBottom, I)), - !m || r) - ) - r || K(h, h - 1, 'left'), - (m && !u && r) || - (c.push(a[h]), d.push({ x: h, plotX: k, plotY: x })), - r || K(h, h + 1, 'right'); - h = l.call(this, c, !0, !0); - d.reversed = !0; - m = l.call(this, d, !0, !0); - m.length && (m[0] = 'L'); - m = h.concat(m); - l = l.call(this, c, !1, r); - m.xMap = h.xMap; - this.areaPath = m; - return l; - }, - drawGraph: function() { - this.areaPath = []; - f.prototype.drawGraph.apply(this); - var a = this, - l = this.areaPath, - w = this.options, - u = [['area', 'highcharts-area', this.color, w.fillColor]]; - D(this.zones, function(e, h) { - u.push([ - 'zone-area-' + h, - 'highcharts-area highcharts-zone-area-' + h + ' ' + e.className, - e.color || a.color, - e.fillColor || w.fillColor, - ]); - }); - D(u, function(e) { - var h = e[0], - f = a[h]; - f - ? ((f.endX = a.preventGraphAnimation ? null : l.xMap), - f.animate({ d: l })) - : ((f = a[h] = a.chart.renderer - .path(l) - .addClass(e[1]) - .attr({ - fill: p( - e[3], - E(e[2]) - .setOpacity(p(w.fillOpacity, 0.75)) - .get(), - ), - zIndex: 0, - }) - .add(a.group)), - (f.isArea = !0)); - f.startX = l.xMap; - f.shiftUnit = w.step ? 2 : 1; - }); - }, - drawLegendSymbol: a.LegendSymbolMixin.drawRectangle, - }, - ); - })(M); - (function(a) { - var E = a.pick; - a = a.seriesType; - a( - 'spline', - 'line', - {}, - { - getPointSpline: function(a, H, p) { - var f = H.plotX, - l = H.plotY, - r = a[p - 1]; - p = a[p + 1]; - var n, w, u, e; - if ( - r && - !r.isNull && - !1 !== r.doCurve && - !H.isCliff && - p && - !p.isNull && - !1 !== p.doCurve && - !H.isCliff - ) { - a = r.plotY; - u = p.plotX; - p = p.plotY; - var h = 0; - n = (1.5 * f + r.plotX) / 2.5; - w = (1.5 * l + a) / 2.5; - u = (1.5 * f + u) / 2.5; - e = (1.5 * l + p) / 2.5; - u !== n && (h = ((e - w) * (u - f)) / (u - n) + l - e); - w += h; - e += h; - w > a && w > l - ? ((w = Math.max(a, l)), (e = 2 * l - w)) - : w < a && w < l && ((w = Math.min(a, l)), (e = 2 * l - w)); - e > p && e > l - ? ((e = Math.max(p, l)), (w = 2 * l - e)) - : e < p && e < l && ((e = Math.min(p, l)), (w = 2 * l - e)); - H.rightContX = u; - H.rightContY = e; - } - H = [ - 'C', - E(r.rightContX, r.plotX), - E(r.rightContY, r.plotY), - E(n, f), - E(w, l), - f, - l, - ]; - r.rightContX = r.rightContY = null; - return H; - }, - }, - ); - })(M); - (function(a) { - var E = a.seriesTypes.area.prototype, - D = a.seriesType; - D('areaspline', 'spline', a.defaultPlotOptions.area, { - getStackPoints: E.getStackPoints, - getGraphPath: E.getGraphPath, - drawGraph: E.drawGraph, - drawLegendSymbol: a.LegendSymbolMixin.drawRectangle, - }); - })(M); - (function(a) { - var E = a.animObject, - D = a.color, - H = a.each, - p = a.extend, - f = a.isNumber, - l = a.merge, - r = a.pick, - n = a.Series, - w = a.seriesType, - u = a.svg; - w( - 'column', - 'line', - { - borderRadius: 0, - crisp: !0, - groupPadding: 0.2, - marker: null, - pointPadding: 0.1, - minPointLength: 0, - cropThreshold: 50, - pointRange: null, - states: { - hover: { halo: !1, brightness: 0.1 }, - select: { color: '#cccccc', borderColor: '#000000' }, - }, - dataLabels: { align: null, verticalAlign: null, y: null }, - softThreshold: !1, - startFromThreshold: !0, - stickyTracking: !1, - tooltip: { distance: 6 }, - threshold: 0, - borderColor: '#ffffff', - }, - { - cropShoulder: 0, - directTouch: !0, - trackerGroups: ['group', 'dataLabelsGroup'], - negStacks: !0, - init: function() { - n.prototype.init.apply(this, arguments); - var a = this, - h = a.chart; - h.hasRendered && - H(h.series, function(e) { - e.type === a.type && (e.isDirty = !0); - }); - }, - getColumnMetrics: function() { - var a = this, - h = a.options, - f = a.xAxis, - d = a.yAxis, - c = f.reversed, - b, - k = {}, - l = 0; - !1 === h.grouping - ? (l = 1) - : H(a.chart.series, function(c) { - var e = c.options, - h = c.yAxis, - f; - c.type !== a.type || - (!c.visible && a.chart.options.chart.ignoreHiddenSeries) || - d.len !== h.len || - d.pos !== h.pos || - (e.stacking - ? ((b = c.stackKey), - void 0 === k[b] && (k[b] = l++), - (f = k[b])) - : !1 !== e.grouping && (f = l++), - (c.columnIndex = f)); - }); - var n = Math.min( - Math.abs(f.transA) * - (f.ordinalSlope || - h.pointRange || - f.closestPointRange || - f.tickInterval || - 1), - f.len, - ), - p = n * h.groupPadding, - x = (n - 2 * p) / (l || 1), - h = Math.min( - h.maxPointWidth || f.len, - r(h.pointWidth, x * (1 - 2 * h.pointPadding)), - ); - a.columnMetrics = { - width: h, - offset: - (x - h) / 2 + - (p + ((a.columnIndex || 0) + (c ? 1 : 0)) * x - n / 2) * - (c ? -1 : 1), - }; - return a.columnMetrics; - }, - crispCol: function(a, h, f, d) { - var c = this.chart, - b = this.borderWidth, - e = -(b % 2 ? 0.5 : 0), - b = b % 2 ? 0.5 : 1; - c.inverted && c.renderer.isVML && (b += 1); - this.options.crisp && - ((f = Math.round(a + f) + e), (a = Math.round(a) + e), (f -= a)); - d = Math.round(h + d) + b; - e = 0.5 >= Math.abs(h) && 0.5 < d; - h = Math.round(h) + b; - d -= h; - e && d && (--h, (d += 1)); - return { x: a, y: h, width: f, height: d }; - }, - translate: function() { - var a = this, - h = a.chart, - f = a.options, - d = (a.dense = 2 > a.closestPointRange * a.xAxis.transA), - d = (a.borderWidth = r(f.borderWidth, d ? 0 : 1)), - c = a.yAxis, - b = f.threshold, - k = (a.translatedThreshold = c.getThreshold(b)), - l = r(f.minPointLength, 5), - p = a.getColumnMetrics(), - u = p.width, - x = (a.barW = Math.max(u, 1 + 2 * d)), - w = (a.pointXOffset = p.offset); - h.inverted && (k -= 0.5); - f.pointPadding && (x = Math.ceil(x)); - n.prototype.translate.apply(a); - H(a.points, function(d) { - var e = r(d.yBottom, k), - f = 999 + Math.abs(e), - f = Math.min(Math.max(-f, d.plotY), c.len + f), - m = d.plotX + w, - n = x, - t = Math.min(f, e), - p, - g = Math.max(f, e) - t; - l && - Math.abs(g) < l && - ((g = l), - (p = (!c.reversed && !d.negative) || (c.reversed && d.negative)), - d.y === b && a.dataMax <= b && c.min < b && (p = !p), - (t = Math.abs(t - k) > l ? e - l : k - (p ? l : 0))); - d.barX = m; - d.pointWidth = u; - d.tooltipPos = h.inverted - ? [c.len + c.pos - h.plotLeft - f, a.xAxis.len - m - n / 2, g] - : [m + n / 2, f + c.pos - h.plotTop, g]; - d.shapeType = 'rect'; - d.shapeArgs = a.crispCol.apply( - a, - d.isNull ? [m, k, n, 0] : [m, t, n, g], - ); - }); - }, - getSymbol: a.noop, - drawLegendSymbol: a.LegendSymbolMixin.drawRectangle, - drawGraph: function() { - this.group[this.dense ? 'addClass' : 'removeClass']( - 'highcharts-dense-data', - ); - }, - pointAttribs: function(a, f) { - var e = this.options, - d, - c = this.pointAttrToOptions || {}; - d = c.stroke || 'borderColor'; - var b = c['stroke-width'] || 'borderWidth', - k = (a && a.color) || this.color, - h = (a && a[d]) || e[d] || this.color || k, - n = (a && a[b]) || e[b] || this[b] || 0, - c = e.dashStyle; - a && - this.zones.length && - ((k = a.getZone()), - (k = a.options.color || (k && k.color) || this.color)); - f && - ((a = l( - e.states[f], - (a.options.states && a.options.states[f]) || {}, - )), - (f = a.brightness), - (k = - a.color || - (void 0 !== f && - D(k) - .brighten(a.brightness) - .get()) || - k), - (h = a[d] || h), - (n = a[b] || n), - (c = a.dashStyle || c)); - d = { fill: k, stroke: h, 'stroke-width': n }; - c && (d.dashstyle = c); - return d; - }, - drawPoints: function() { - var a = this, - h = this.chart, - m = a.options, - d = h.renderer, - c = m.animationLimit || 250, - b; - H(a.points, function(e) { - var k = e.graphic; - if (f(e.plotY) && null !== e.y) { - b = e.shapeArgs; - if (k) k[h.pointCount < c ? 'animate' : 'attr'](l(b)); - else e.graphic = k = d[e.shapeType](b).add(e.group || a.group); - m.borderRadius && k.attr({ r: m.borderRadius }); - k.attr(a.pointAttribs(e, e.selected && 'select')).shadow( - m.shadow, - null, - m.stacking && !m.borderRadius, - ); - k.addClass(e.getClassName(), !0); - } else k && (e.graphic = k.destroy()); - }); - }, - animate: function(a) { - var e = this, - f = this.yAxis, - d = e.options, - c = this.chart.inverted, - b = {}, - k = c ? 'translateX' : 'translateY', - l; - u && - (a - ? ((b.scaleY = 0.001), - (a = Math.min( - f.pos + f.len, - Math.max(f.pos, f.toPixels(d.threshold)), - )), - c ? (b.translateX = a - f.len) : (b.translateY = a), - e.group.attr(b)) - : ((l = e.group.attr(k)), - e.group.animate( - { scaleY: 1 }, - p(E(e.options.animation), { - step: function(a, c) { - b[k] = l + c.pos * (f.pos - l); - e.group.attr(b); - }, - }), - ), - (e.animate = null))); - }, - remove: function() { - var a = this, - f = a.chart; - f.hasRendered && - H(f.series, function(e) { - e.type === a.type && (e.isDirty = !0); - }); - n.prototype.remove.apply(a, arguments); - }, - }, - ); - })(M); - (function(a) { - a = a.seriesType; - a('bar', 'column', null, { inverted: !0 }); - })(M); - (function(a) { - var E = a.Series; - a = a.seriesType; - a( - 'scatter', - 'line', - { - lineWidth: 0, - findNearestPointBy: 'xy', - marker: { enabled: !0 }, - tooltip: { - headerFormat: - '\x3cspan style\x3d"color:{point.color}"\x3e\u25cf\x3c/span\x3e \x3cspan style\x3d"font-size: 0.85em"\x3e {series.name}\x3c/span\x3e\x3cbr/\x3e', - pointFormat: - 'x: \x3cb\x3e{point.x}\x3c/b\x3e\x3cbr/\x3ey: \x3cb\x3e{point.y}\x3c/b\x3e\x3cbr/\x3e', - }, - }, - { - sorted: !1, - requireSorting: !1, - noSharedTooltip: !0, - trackerGroups: ['group', 'markerGroup', 'dataLabelsGroup'], - takeOrdinalPosition: !1, - drawGraph: function() { - this.options.lineWidth && E.prototype.drawGraph.call(this); - }, - }, - ); - })(M); - (function(a) { - var E = a.deg2rad, - D = a.isNumber, - H = a.pick, - p = a.relativeLength; - a.CenteredSeriesMixin = { - getCenter: function() { - var a = this.options, - l = this.chart, - r = 2 * (a.slicedOffset || 0), - n = l.plotWidth - 2 * r, - l = l.plotHeight - 2 * r, - w = a.center, - w = [ - H(w[0], '50%'), - H(w[1], '50%'), - a.size || '100%', - a.innerSize || 0, - ], - u = Math.min(n, l), - e, - h; - for (e = 0; 4 > e; ++e) - (h = w[e]), - (a = 2 > e || (2 === e && /%$/.test(h))), - (w[e] = p(h, [n, l, u, w[2]][e]) + (a ? r : 0)); - w[3] > w[2] && (w[3] = w[2]); - return w; - }, - getStartAndEndRadians: function(a, l) { - a = D(a) ? a : 0; - l = D(l) && l > a && 360 > l - a ? l : a + 360; - return { start: E * (a + -90), end: E * (l + -90) }; - }, - }; - })(M); - (function(a) { - var E = a.addEvent, - D = a.CenteredSeriesMixin, - H = a.defined, - p = a.each, - f = a.extend, - l = D.getStartAndEndRadians, - r = a.inArray, - n = a.noop, - w = a.pick, - u = a.Point, - e = a.Series, - h = a.seriesType, - m = a.setAnimation; - h( - 'pie', - 'line', - { - center: [null, null], - clip: !1, - colorByPoint: !0, - dataLabels: { - distance: 30, - enabled: !0, - formatter: function() { - return this.point.isNull ? void 0 : this.point.name; - }, - x: 0, - }, - ignoreHiddenPoint: !0, - legendType: 'point', - marker: null, - size: null, - showInLegend: !1, - slicedOffset: 10, - stickyTracking: !1, - tooltip: { followPointer: !0 }, - borderColor: '#ffffff', - borderWidth: 1, - states: { hover: { brightness: 0.1, shadow: !1 } }, - }, - { - isCartesian: !1, - requireSorting: !1, - directTouch: !0, - noSharedTooltip: !0, - trackerGroups: ['group', 'dataLabelsGroup'], - axisTypes: [], - pointAttribs: a.seriesTypes.column.prototype.pointAttribs, - animate: function(a) { - var c = this, - b = c.points, - d = c.startAngleRad; - a || - (p(b, function(a) { - var b = a.graphic, - e = a.shapeArgs; - b && - (b.attr({ r: a.startR || c.center[3] / 2, start: d, end: d }), - b.animate( - { r: e.r, start: e.start, end: e.end }, - c.options.animation, - )); - }), - (c.animate = null)); - }, - updateTotals: function() { - var a, - c = 0, - b = this.points, - e = b.length, - f, - h = this.options.ignoreHiddenPoint; - for (a = 0; a < e; a++) - (f = b[a]), (c += h && !f.visible ? 0 : f.isNull ? 0 : f.y); - this.total = c; - for (a = 0; a < e; a++) - (f = b[a]), - (f.percentage = 0 < c && (f.visible || !h) ? (f.y / c) * 100 : 0), - (f.total = c); - }, - generatePoints: function() { - e.prototype.generatePoints.call(this); - this.updateTotals(); - }, - translate: function(a) { - this.generatePoints(); - var c = 0, - b = this.options, - d = b.slicedOffset, - e = d + (b.borderWidth || 0), - f, - h, - m, - n = l(b.startAngle, b.endAngle), - t = (this.startAngleRad = n.start), - n = (this.endAngleRad = n.end) - t, - p = this.points, - u, - q = b.dataLabels.distance, - b = b.ignoreHiddenPoint, - r, - F = p.length, - G; - a || (this.center = a = this.getCenter()); - this.getX = function(b, c, d) { - m = Math.asin( - Math.min((b - a[1]) / (a[2] / 2 + d.labelDistance), 1), - ); - return ( - a[0] + (c ? -1 : 1) * Math.cos(m) * (a[2] / 2 + d.labelDistance) - ); - }; - for (r = 0; r < F; r++) { - G = p[r]; - G.labelDistance = w( - G.options.dataLabels && G.options.dataLabels.distance, - q, - ); - this.maxLabelDistance = Math.max( - this.maxLabelDistance || 0, - G.labelDistance, - ); - f = t + c * n; - if (!b || G.visible) c += G.percentage / 100; - h = t + c * n; - G.shapeType = 'arc'; - G.shapeArgs = { - x: a[0], - y: a[1], - r: a[2] / 2, - innerR: a[3] / 2, - start: Math.round(1e3 * f) / 1e3, - end: Math.round(1e3 * h) / 1e3, - }; - m = (h + f) / 2; - m > 1.5 * Math.PI - ? (m -= 2 * Math.PI) - : m < -Math.PI / 2 && (m += 2 * Math.PI); - G.slicedTranslation = { - translateX: Math.round(Math.cos(m) * d), - translateY: Math.round(Math.sin(m) * d), - }; - h = (Math.cos(m) * a[2]) / 2; - u = (Math.sin(m) * a[2]) / 2; - G.tooltipPos = [a[0] + 0.7 * h, a[1] + 0.7 * u]; - G.half = m < -Math.PI / 2 || m > Math.PI / 2 ? 1 : 0; - G.angle = m; - f = Math.min(e, G.labelDistance / 5); - G.labelPos = [ - a[0] + h + Math.cos(m) * G.labelDistance, - a[1] + u + Math.sin(m) * G.labelDistance, - a[0] + h + Math.cos(m) * f, - a[1] + u + Math.sin(m) * f, - a[0] + h, - a[1] + u, - 0 > G.labelDistance ? 'center' : G.half ? 'right' : 'left', - m, - ]; - } - }, - drawGraph: null, - drawPoints: function() { - var a = this, - c = a.chart.renderer, - b, - e, - h, - l, - m = a.options.shadow; - m && !a.shadowGroup && (a.shadowGroup = c.g('shadow').add(a.group)); - p(a.points, function(d) { - e = d.graphic; - if (d.isNull) e && (d.graphic = e.destroy()); - else { - l = d.shapeArgs; - b = d.getTranslate(); - var k = d.shadowGroup; - m && !k && (k = d.shadowGroup = c.g('shadow').add(a.shadowGroup)); - k && k.attr(b); - h = a.pointAttribs(d, d.selected && 'select'); - e - ? e - .setRadialReference(a.center) - .attr(h) - .animate(f(l, b)) - : ((d.graphic = e = c[d.shapeType](l) - .setRadialReference(a.center) - .attr(b) - .add(a.group)), - d.visible || e.attr({ visibility: 'hidden' }), - e - .attr(h) - .attr({ 'stroke-linejoin': 'round' }) - .shadow(m, k)); - e.addClass(d.getClassName()); - } - }); - }, - searchPoint: n, - sortByAngle: function(a, c) { - a.sort(function(a, d) { - return void 0 !== a.angle && (d.angle - a.angle) * c; - }); - }, - drawLegendSymbol: a.LegendSymbolMixin.drawRectangle, - getCenter: D.getCenter, - getSymbol: n, - }, - { - init: function() { - u.prototype.init.apply(this, arguments); - var a = this, - c; - a.name = w(a.name, 'Slice'); - c = function(b) { - a.slice('select' === b.type); - }; - E(a, 'select', c); - E(a, 'unselect', c); - return a; - }, - isValid: function() { - return a.isNumber(this.y, !0) && 0 <= this.y; - }, - setVisible: function(a, c) { - var b = this, - d = b.series, - e = d.chart, - f = d.options.ignoreHiddenPoint; - c = w(c, f); - a !== b.visible && - ((b.visible = b.options.visible = a = - void 0 === a ? !b.visible : a), - (d.options.data[r(b, d.data)] = b.options), - p(['graphic', 'dataLabel', 'connector', 'shadowGroup'], function( - c, - ) { - if (b[c]) b[c][a ? 'show' : 'hide'](!0); - }), - b.legendItem && e.legend.colorizeItem(b, a), - a || 'hover' !== b.state || b.setState(''), - f && (d.isDirty = !0), - c && e.redraw()); - }, - slice: function(a, c, b) { - var d = this.series; - m(b, d.chart); - w(c, !0); - this.sliced = this.options.sliced = H(a) ? a : !this.sliced; - d.options.data[r(this, d.data)] = this.options; - this.graphic.animate(this.getTranslate()); - this.shadowGroup && this.shadowGroup.animate(this.getTranslate()); - }, - getTranslate: function() { - return this.sliced - ? this.slicedTranslation - : { translateX: 0, translateY: 0 }; - }, - haloPath: function(a) { - var c = this.shapeArgs; - return this.sliced || !this.visible - ? [] - : this.series.chart.renderer.symbols.arc( - c.x, - c.y, - c.r + a, - c.r + a, - { innerR: this.shapeArgs.r - 1, start: c.start, end: c.end }, - ); - }, - }, - ); - })(M); - (function(a) { - var E = a.addEvent, - D = a.arrayMax, - H = a.defined, - p = a.each, - f = a.extend, - l = a.format, - r = a.map, - n = a.merge, - w = a.noop, - u = a.pick, - e = a.relativeLength, - h = a.Series, - m = a.seriesTypes, - d = a.stableSort; - a.distribute = function(a, b) { - function c(a, b) { - return a.target - b.target; - } - var e, - f = !0, - h = a, - l = [], - m; - m = 0; - for (e = a.length; e--; ) m += a[e].size; - if (m > b) { - d(a, function(a, b) { - return (b.rank || 0) - (a.rank || 0); - }); - for (m = e = 0; m <= b; ) (m += a[e].size), e++; - l = a.splice(e - 1, a.length); - } - d(a, c); - for ( - a = r(a, function(a) { - return { size: a.size, targets: [a.target], align: u(a.align, 0.5) }; - }); - f; - - ) { - for (e = a.length; e--; ) - (f = a[e]), - (m = - (Math.min.apply(0, f.targets) + Math.max.apply(0, f.targets)) / - 2), - (f.pos = Math.min(Math.max(0, m - f.size * f.align), b - f.size)); - e = a.length; - for (f = !1; e--; ) - 0 < e && - a[e - 1].pos + a[e - 1].size > a[e].pos && - ((a[e - 1].size += a[e].size), - (a[e - 1].targets = a[e - 1].targets.concat(a[e].targets)), - (a[e - 1].align = 0.5), - a[e - 1].pos + a[e - 1].size > b && - (a[e - 1].pos = b - a[e - 1].size), - a.splice(e, 1), - (f = !0)); - } - e = 0; - p(a, function(a) { - var b = 0; - p(a.targets, function() { - h[e].pos = a.pos + b; - b += h[e].size; - e++; - }); - }); - h.push.apply(h, l); - d(h, c); - }; - h.prototype.drawDataLabels = function() { - function c(a, b) { - var c = b.filter; - return c - ? ((b = c.operator), - (a = a[c.property]), - (c = c.value), - ('\x3e' === b && a > c) || - ('\x3c' === b && a < c) || - ('\x3e\x3d' === b && a >= c) || - ('\x3c\x3d' === b && a <= c) || - ('\x3d\x3d' === b && a == c) || - ('\x3d\x3d\x3d' === b && a === c) - ? !0 - : !1) - : !0; - } - var b = this, - d = b.options, - e = d.dataLabels, - f = b.points, - h, - m, - r = b.hasRendered || 0, - t, - w, - D = u(e.defer, !!d.animation), - q = b.chart.renderer; - if (e.enabled || b._hasPointLabels) - b.dlProcessOptions && b.dlProcessOptions(e), - (w = b.plotGroup( - 'dataLabelsGroup', - 'data-labels', - D && !r ? 'hidden' : 'visible', - e.zIndex || 6, - )), - D && - (w.attr({ opacity: +r }), - r || - E(b, 'afterAnimate', function() { - b.visible && w.show(!0); - w[d.animation ? 'animate' : 'attr']( - { opacity: 1 }, - { duration: 200 }, - ); - })), - (m = e), - p(f, function(f) { - var k, - p = f.dataLabel, - g, - x, - r = f.connector, - z = !p, - C; - h = f.dlOptions || (f.options && f.options.dataLabels); - (k = u(h && h.enabled, m.enabled) && !f.isNull) && - (k = !0 === c(f, h || e)); - k && - ((e = n(m, h)), - (g = f.getLabelConfig()), - (C = e[f.formatPrefix + 'Format'] || e.format), - (t = H(C) - ? l(C, g) - : (e[f.formatPrefix + 'Formatter'] || e.formatter).call(g, e)), - (C = e.style), - (g = e.rotation), - (C.color = u(e.color, C.color, b.color, '#000000')), - 'contrast' === C.color && - ((f.contrastColor = q.getContrast(f.color || b.color)), - (C.color = - e.inside || 0 > u(f.labelDistance, e.distance) || d.stacking - ? f.contrastColor - : '#000000')), - d.cursor && (C.cursor = d.cursor), - (x = { - fill: e.backgroundColor, - stroke: e.borderColor, - 'stroke-width': e.borderWidth, - r: e.borderRadius || 0, - rotation: g, - padding: e.padding, - zIndex: 1, - }), - a.objectEach(x, function(a, b) { - void 0 === a && delete x[b]; - })); - !p || (k && H(t)) - ? k && - H(t) && - (p - ? (x.text = t) - : ((p = f.dataLabel = g - ? q.text(t, 0, -9999).addClass('highcharts-data-label') - : q.label( - t, - 0, - -9999, - e.shape, - null, - null, - e.useHTML, - null, - 'data-label', - )), - p.addClass( - ' highcharts-data-label-color-' + - f.colorIndex + - ' ' + - (e.className || '') + - (e.useHTML ? 'highcharts-tracker' : ''), - )), - p.attr(x), - p.css(C).shadow(e.shadow), - p.added || p.add(w), - b.alignDataLabel(f, p, e, null, z)) - : ((f.dataLabel = p = p.destroy()), - r && (f.connector = r.destroy())); - }); - }; - h.prototype.alignDataLabel = function(a, b, d, e, h) { - var c = this.chart, - k = c.inverted, - l = u(a.dlBox && a.dlBox.centerX, a.plotX, -9999), - m = u(a.plotY, -9999), - n = b.getBBox(), - p, - q = d.rotation, - r = d.align, - w = - this.visible && - (a.series.forceDL || - c.isInsidePlot(l, Math.round(m), k) || - (e && c.isInsidePlot(l, k ? e.x + 1 : e.y + e.height - 1, k))), - z = 'justify' === u(d.overflow, 'justify'); - if ( - w && - ((p = d.style.fontSize), - (p = c.renderer.fontMetrics(p, b).b), - (e = f( - { - x: k ? this.yAxis.len - m : l, - y: Math.round(k ? this.xAxis.len - l : m), - width: 0, - height: 0, - }, - e, - )), - f(d, { width: n.width, height: n.height }), - q - ? ((z = !1), - (l = c.renderer.rotCorr(p, q)), - (l = { - x: e.x + d.x + e.width / 2 + l.x, - y: - e.y + - d.y + - { top: 0, middle: 0.5, bottom: 1 }[d.verticalAlign] * e.height, - }), - b[h ? 'attr' : 'animate'](l).attr({ align: r }), - (m = (q + 720) % 360), - (m = 180 < m && 360 > m), - 'left' === r - ? (l.y -= m ? n.height : 0) - : 'center' === r - ? ((l.x -= n.width / 2), (l.y -= n.height / 2)) - : 'right' === r && ((l.x -= n.width), (l.y -= m ? 0 : n.height))) - : (b.align(d, null, e), (l = b.alignAttr)), - z - ? (a.isLabelJustified = this.justifyDataLabel(b, d, l, n, e, h)) - : u(d.crop, !0) && - (w = - c.isInsidePlot(l.x, l.y) && - c.isInsidePlot(l.x + n.width, l.y + n.height)), - d.shape && !q) - ) - b[h ? 'attr' : 'animate']({ - anchorX: k ? c.plotWidth - a.plotY : a.plotX, - anchorY: k ? c.plotHeight - a.plotX : a.plotY, - }); - w || (b.attr({ y: -9999 }), (b.placed = !1)); - }; - h.prototype.justifyDataLabel = function(a, b, d, e, f, h) { - var c = this.chart, - k = b.align, - l = b.verticalAlign, - m, - n, - p = a.box ? 0 : a.padding || 0; - m = d.x + p; - 0 > m && ('right' === k ? (b.align = 'left') : (b.x = -m), (n = !0)); - m = d.x + e.width - p; - m > c.plotWidth && - ('left' === k ? (b.align = 'right') : (b.x = c.plotWidth - m), - (n = !0)); - m = d.y + p; - 0 > m && - ('bottom' === l ? (b.verticalAlign = 'top') : (b.y = -m), (n = !0)); - m = d.y + e.height - p; - m > c.plotHeight && - ('top' === l ? (b.verticalAlign = 'bottom') : (b.y = c.plotHeight - m), - (n = !0)); - n && ((a.placed = !h), a.align(b, null, f)); - return n; - }; - m.pie && - ((m.pie.prototype.drawDataLabels = function() { - var c = this, - b = c.data, - d, - e = c.chart, - f = c.options.dataLabels, - l = u(f.connectorPadding, 10), - m = u(f.connectorWidth, 1), - n = e.plotWidth, - t = e.plotHeight, - r, - w = c.center, - q = w[2] / 2, - A = w[1], - F, - G, - g, - v, - E = [[], []], - L, - P, - J, - M, - y = [0, 0, 0, 0]; - c.visible && - (f.enabled || c._hasPointLabels) && - (p(b, function(a) { - a.dataLabel && - a.visible && - a.dataLabel.shortened && - (a.dataLabel - .attr({ width: 'auto' }) - .css({ width: 'auto', textOverflow: 'clip' }), - (a.dataLabel.shortened = !1)); - }), - h.prototype.drawDataLabels.apply(c), - p(b, function(a) { - a.dataLabel && - a.visible && - (E[a.half].push(a), (a.dataLabel._pos = null)); - }), - p(E, function(b, h) { - var k, - m, - x = b.length, - r = [], - z; - if (x) - for ( - c.sortByAngle(b, h - 0.5), - 0 < c.maxLabelDistance && - ((k = Math.max(0, A - q - c.maxLabelDistance)), - (m = Math.min(A + q + c.maxLabelDistance, e.plotHeight)), - p(b, function(a) { - 0 < a.labelDistance && - a.dataLabel && - ((a.top = Math.max(0, A - q - a.labelDistance)), - (a.bottom = Math.min( - A + q + a.labelDistance, - e.plotHeight, - )), - (z = a.dataLabel.getBBox().height || 21), - (a.positionsIndex = - r.push({ - target: a.labelPos[1] - a.top + z / 2, - size: z, - rank: a.y, - }) - 1)); - }), - a.distribute(r, m + z - k)), - M = 0; - M < x; - M++ - ) - (d = b[M]), - (m = d.positionsIndex), - (g = d.labelPos), - (F = d.dataLabel), - (J = !1 === d.visible ? 'hidden' : 'inherit'), - (P = k = g[1]), - r && - H(r[m]) && - (void 0 === r[m].pos - ? (J = 'hidden') - : ((v = r[m].size), (P = d.top + r[m].pos))), - delete d.positionIndex, - (L = f.justify - ? w[0] + (h ? -1 : 1) * (q + d.labelDistance) - : c.getX(P < d.top + 2 || P > d.bottom - 2 ? k : P, h, d)), - (F._attr = { visibility: J, align: g[6] }), - (F._pos = { - x: L + f.x + ({ left: l, right: -l }[g[6]] || 0), - y: P + f.y - 10, - }), - (g.x = L), - (g.y = P), - u(f.crop, !0) && - ((G = F.getBBox().width), - (k = null), - L - G < l - ? ((k = Math.round(G - L + l)), - (y[3] = Math.max(k, y[3]))) - : L + G > n - l && - ((k = Math.round(L + G - n + l)), - (y[1] = Math.max(k, y[1]))), - 0 > P - v / 2 - ? (y[0] = Math.max(Math.round(-P + v / 2), y[0])) - : P + v / 2 > t && - (y[2] = Math.max(Math.round(P + v / 2 - t), y[2])), - (F.sideOverflow = k)); - }), - 0 === D(y) || this.verifyDataLabelOverflow(y)) && - (this.placeDataLabels(), - m && - p(this.points, function(a) { - var b; - r = a.connector; - if ( - (F = a.dataLabel) && - F._pos && - a.visible && - 0 < a.labelDistance - ) { - J = F._attr.visibility; - if ((b = !r)) - (a.connector = r = e.renderer - .path() - .addClass( - 'highcharts-data-label-connector highcharts-color-' + - a.colorIndex, - ) - .add(c.dataLabelsGroup)), - r.attr({ - 'stroke-width': m, - stroke: f.connectorColor || a.color || '#666666', - }); - r[b ? 'attr' : 'animate']({ d: c.connectorPath(a.labelPos) }); - r.attr('visibility', J); - } else r && (a.connector = r.destroy()); - })); - }), - (m.pie.prototype.connectorPath = function(a) { - var b = a.x, - c = a.y; - return u(this.options.dataLabels.softConnector, !0) - ? [ - 'M', - b + ('left' === a[6] ? 5 : -5), - c, - 'C', - b, - c, - 2 * a[2] - a[4], - 2 * a[3] - a[5], - a[2], - a[3], - 'L', - a[4], - a[5], - ] - : [ - 'M', - b + ('left' === a[6] ? 5 : -5), - c, - 'L', - a[2], - a[3], - 'L', - a[4], - a[5], - ]; - }), - (m.pie.prototype.placeDataLabels = function() { - p( - this.points, - function(a) { - var b = a.dataLabel; - b && - a.visible && - ((a = b._pos) - ? (b.sideOverflow && - ((b._attr.width = b.getBBox().width - b.sideOverflow), - b.css({ - width: b._attr.width + 'px', - textOverflow: 'ellipsis', - }), - (b.shortened = !0)), - b.attr(b._attr), - b[b.moved ? 'animate' : 'attr'](a), - (b.moved = !0)) - : b && b.attr({ y: -9999 })); - }, - this, - ); - }), - (m.pie.prototype.alignDataLabel = w), - (m.pie.prototype.verifyDataLabelOverflow = function(a) { - var b = this.center, - c = this.options, - d = c.center, - f = c.minSize || 80, - h, - l = null !== c.size; - l || - (null !== d[0] - ? (h = Math.max(b[2] - Math.max(a[1], a[3]), f)) - : ((h = Math.max(b[2] - a[1] - a[3], f)), - (b[0] += (a[3] - a[1]) / 2)), - null !== d[1] - ? (h = Math.max(Math.min(h, b[2] - Math.max(a[0], a[2])), f)) - : ((h = Math.max(Math.min(h, b[2] - a[0] - a[2]), f)), - (b[1] += (a[0] - a[2]) / 2)), - h < b[2] - ? ((b[2] = h), - (b[3] = Math.min(e(c.innerSize || 0, h), h)), - this.translate(b), - this.drawDataLabels && this.drawDataLabels()) - : (l = !0)); - return l; - })); - m.column && - (m.column.prototype.alignDataLabel = function(a, b, d, e, f) { - var c = this.chart.inverted, - k = a.series, - l = a.dlBox || a.shapeArgs, - m = u(a.below, a.plotY > u(this.translatedThreshold, k.yAxis.len)), - p = u(d.inside, !!this.options.stacking); - l && - ((e = n(l)), - 0 > e.y && ((e.height += e.y), (e.y = 0)), - (l = e.y + e.height - k.yAxis.len), - 0 < l && (e.height -= l), - c && - (e = { - x: k.yAxis.len - e.y - e.height, - y: k.xAxis.len - e.x - e.width, - width: e.height, - height: e.width, - }), - p || - (c - ? ((e.x += m ? 0 : e.width), (e.width = 0)) - : ((e.y += m ? e.height : 0), (e.height = 0)))); - d.align = u(d.align, !c || p ? 'center' : m ? 'right' : 'left'); - d.verticalAlign = u( - d.verticalAlign, - c || p ? 'middle' : m ? 'top' : 'bottom', - ); - h.prototype.alignDataLabel.call(this, a, b, d, e, f); - a.isLabelJustified && - a.contrastColor && - a.dataLabel.css({ color: a.contrastColor }); - }); - })(M); - (function(a) { - var E = a.Chart, - D = a.each, - H = a.objectEach, - p = a.pick; - a = a.addEvent; - a(E.prototype, 'render', function() { - var a = []; - D(this.labelCollectors || [], function(f) { - a = a.concat(f()); - }); - D(this.yAxis || [], function(f) { - f.options.stackLabels && - !f.options.stackLabels.allowOverlap && - H(f.stacks, function(f) { - H(f, function(f) { - a.push(f.label); - }); - }); - }); - D(this.series || [], function(f) { - var l = f.options.dataLabels, - n = f.dataLabelCollections || ['dataLabel']; - (l.enabled || f._hasPointLabels) && - !l.allowOverlap && - f.visible && - D(n, function(l) { - D(f.points, function(f) { - f[l] && - ((f[l].labelrank = p( - f.labelrank, - f.shapeArgs && f.shapeArgs.height, - )), - a.push(f[l])); - }); - }); - }); - this.hideOverlappingLabels(a); - }); - E.prototype.hideOverlappingLabels = function(a) { - var f = a.length, - p, - n, - w, - u, - e, - h, - m, - d, - c, - b = function(a, b, c, d, e, f, h, l) { - return !(e > a + c || e + h < a || f > b + d || f + l < b); - }; - for (n = 0; n < f; n++) - if ((p = a[n])) - (p.oldOpacity = p.opacity), - (p.newOpacity = 1), - p.width || - ((w = p.getBBox()), (p.width = w.width), (p.height = w.height)); - a.sort(function(a, b) { - return (b.labelrank || 0) - (a.labelrank || 0); - }); - for (n = 0; n < f; n++) - for (w = a[n], p = n + 1; p < f; ++p) - if ( - ((u = a[p]), - w && - u && - w !== u && - w.placed && - u.placed && - 0 !== w.newOpacity && - 0 !== u.newOpacity && - ((e = w.alignAttr), - (h = u.alignAttr), - (m = w.parentGroup), - (d = u.parentGroup), - (c = 2 * (w.box ? 0 : w.padding || 0)), - (e = b( - e.x + m.translateX, - e.y + m.translateY, - w.width - c, - w.height - c, - h.x + d.translateX, - h.y + d.translateY, - u.width - c, - u.height - c, - )))) - ) - (w.labelrank < u.labelrank ? w : u).newOpacity = 0; - D(a, function(a) { - var b, c; - a && - ((c = a.newOpacity), - a.oldOpacity !== c && - a.placed && - (c - ? a.show(!0) - : (b = function() { - a.hide(); - }), - (a.alignAttr.opacity = c), - a[a.isOld ? 'animate' : 'attr'](a.alignAttr, null, b)), - (a.isOld = !0)); - }); - }; - })(M); - (function(a) { - var E = a.addEvent, - D = a.Chart, - H = a.createElement, - p = a.css, - f = a.defaultOptions, - l = a.defaultPlotOptions, - r = a.each, - n = a.extend, - w = a.fireEvent, - u = a.hasTouch, - e = a.inArray, - h = a.isObject, - m = a.Legend, - d = a.merge, - c = a.pick, - b = a.Point, - k = a.Series, - z = a.seriesTypes, - B = a.svg, - I; - I = a.TrackerMixin = { - drawTrackerPoint: function() { - var a = this, - b = a.chart.pointer, - c = function(a) { - var c = b.getPointFromEvent(a); - void 0 !== c && ((b.isDirectTouch = !0), c.onMouseOver(a)); - }; - r(a.points, function(a) { - a.graphic && (a.graphic.element.point = a); - a.dataLabel && - (a.dataLabel.div - ? (a.dataLabel.div.point = a) - : (a.dataLabel.element.point = a)); - }); - a._hasTracking || - (r(a.trackerGroups, function(d) { - if (a[d]) { - a[d] - .addClass('highcharts-tracker') - .on('mouseover', c) - .on('mouseout', function(a) { - b.onTrackerMouseOut(a); - }); - if (u) a[d].on('touchstart', c); - a.options.cursor && a[d].css(p).css({ cursor: a.options.cursor }); - } - }), - (a._hasTracking = !0)); - }, - drawTrackerGraph: function() { - var a = this, - b = a.options, - c = b.trackByArea, - d = [].concat(c ? a.areaPath : a.graphPath), - e = d.length, - f = a.chart, - h = f.pointer, - k = f.renderer, - l = f.options.tooltip.snap, - g = a.tracker, - m, - n = function() { - if (f.hoverSeries !== a) a.onMouseOver(); - }, - p = 'rgba(192,192,192,' + (B ? 0.0001 : 0.002) + ')'; - if (e && !c) - for (m = e + 1; m--; ) - 'M' === d[m] && d.splice(m + 1, 0, d[m + 1] - l, d[m + 2], 'L'), - ((m && 'M' === d[m]) || m === e) && - d.splice(m, 0, 'L', d[m - 2] + l, d[m - 1]); - g - ? g.attr({ d: d }) - : a.graph && - ((a.tracker = k - .path(d) - .attr({ - 'stroke-linejoin': 'round', - visibility: a.visible ? 'visible' : 'hidden', - stroke: p, - fill: c ? p : 'none', - 'stroke-width': a.graph.strokeWidth() + (c ? 0 : 2 * l), - zIndex: 2, - }) - .add(a.group)), - r([a.tracker, a.markerGroup], function(a) { - a.addClass('highcharts-tracker') - .on('mouseover', n) - .on('mouseout', function(a) { - h.onTrackerMouseOut(a); - }); - b.cursor && a.css({ cursor: b.cursor }); - if (u) a.on('touchstart', n); - })); - }, - }; - z.column && (z.column.prototype.drawTracker = I.drawTrackerPoint); - z.pie && (z.pie.prototype.drawTracker = I.drawTrackerPoint); - z.scatter && (z.scatter.prototype.drawTracker = I.drawTrackerPoint); - n(m.prototype, { - setItemEvents: function(a, c, e) { - var f = this, - h = f.chart.renderer.boxWrapper, - k = - 'highcharts-legend-' + - (a instanceof b ? 'point' : 'series') + - '-active'; - (e ? c : a.legendGroup) - .on('mouseover', function() { - a.setState('hover'); - h.addClass(k); - c.css(f.options.itemHoverStyle); - }) - .on('mouseout', function() { - c.css(d(a.visible ? f.itemStyle : f.itemHiddenStyle)); - h.removeClass(k); - a.setState(); - }) - .on('click', function(b) { - var c = function() { - a.setVisible && a.setVisible(); - }; - h.removeClass(k); - b = { browserEvent: b }; - a.firePointEvent - ? a.firePointEvent('legendItemClick', b, c) - : w(a, 'legendItemClick', b, c); - }); - }, - createCheckboxForItem: function(a) { - a.checkbox = H( - 'input', - { type: 'checkbox', checked: a.selected, defaultChecked: a.selected }, - this.options.itemCheckboxStyle, - this.chart.container, - ); - E(a.checkbox, 'click', function(b) { - w( - a.series || a, - 'checkboxClick', - { checked: b.target.checked, item: a }, - function() { - a.select(); - }, - ); - }); - }, - }); - f.legend.itemStyle.cursor = 'pointer'; - n(D.prototype, { - showResetZoom: function() { - var a = this, - b = f.lang, - c = a.options.chart.resetZoomButton, - d = c.theme, - e = d.states, - h = 'chart' === c.relativeTo ? null : 'plotBox'; - this.resetZoomButton = a.renderer - .button( - b.resetZoom, - null, - null, - function() { - a.zoomOut(); - }, - d, - e && e.hover, - ) - .attr({ align: c.position.align, title: b.resetZoomTitle }) - .addClass('highcharts-reset-zoom') - .add() - .align(c.position, !1, h); - }, - zoomOut: function() { - var a = this; - w(a, 'selection', { resetSelection: !0 }, function() { - a.zoom(); - }); - }, - zoom: function(a) { - var b, - d = this.pointer, - e = !1, - f; - !a || a.resetSelection - ? (r(this.axes, function(a) { - b = a.zoom(); - }), - (d.initiated = !1)) - : r(a.xAxis.concat(a.yAxis), function(a) { - var c = a.axis; - d[c.isXAxis ? 'zoomX' : 'zoomY'] && - ((b = c.zoom(a.min, a.max)), c.displayBtn && (e = !0)); - }); - f = this.resetZoomButton; - e && !f - ? this.showResetZoom() - : !e && h(f) && (this.resetZoomButton = f.destroy()); - b && - this.redraw( - c( - this.options.chart.animation, - a && a.animation, - 100 > this.pointCount, - ), - ); - }, - pan: function(a, b) { - var c = this, - d = c.hoverPoints, - e; - d && - r(d, function(a) { - a.setState(); - }); - r('xy' === b ? [1, 0] : [1], function(b) { - b = c[b ? 'xAxis' : 'yAxis'][0]; - var d = b.horiz, - f = a[d ? 'chartX' : 'chartY'], - d = d ? 'mouseDownX' : 'mouseDownY', - h = c[d], - g = (b.pointRange || 0) / 2, - k = b.getExtremes(), - l = b.toValue(h - f, !0) + g, - m = b.toValue(h + b.len - f, !0) - g, - n = m < l, - h = n ? m : l, - l = n ? l : m, - m = Math.min( - k.dataMin, - g ? k.min : b.toValue(b.toPixels(k.min) - b.minPixelPadding), - ), - g = Math.max( - k.dataMax, - g ? k.max : b.toValue(b.toPixels(k.max) + b.minPixelPadding), - ), - n = m - h; - 0 < n && ((l += n), (h = m)); - n = l - g; - 0 < n && ((l = g), (h -= n)); - b.series.length && - h !== k.min && - l !== k.max && - (b.setExtremes(h, l, !1, !1, { trigger: 'pan' }), (e = !0)); - c[d] = f; - }); - e && c.redraw(!1); - p(c.container, { cursor: 'move' }); - }, - }); - n(b.prototype, { - select: function(a, b) { - var d = this, - f = d.series, - h = f.chart; - a = c(a, !d.selected); - d.firePointEvent( - a ? 'select' : 'unselect', - { accumulate: b }, - function() { - d.selected = d.options.selected = a; - f.options.data[e(d, f.data)] = d.options; - d.setState(a && 'select'); - b || - r(h.getSelectedPoints(), function(a) { - a.selected && - a !== d && - ((a.selected = a.options.selected = !1), - (f.options.data[e(a, f.data)] = a.options), - a.setState(''), - a.firePointEvent('unselect')); - }); - }, - ); - }, - onMouseOver: function(a) { - var b = this.series.chart, - c = b.pointer; - a = a - ? c.normalize(a) - : c.getChartCoordinatesFromPoint(this, b.inverted); - c.runPointActions(a, this); - }, - onMouseOut: function() { - var a = this.series.chart; - this.firePointEvent('mouseOut'); - r(a.hoverPoints || [], function(a) { - a.setState(); - }); - a.hoverPoints = a.hoverPoint = null; - }, - importEvents: function() { - if (!this.hasImportedEvents) { - var b = this, - c = d(b.series.options.point, b.options).events; - b.events = c; - a.objectEach(c, function(a, c) { - E(b, c, a); - }); - this.hasImportedEvents = !0; - } - }, - setState: function(a, b) { - var d = Math.floor(this.plotX), - e = this.plotY, - f = this.series, - h = f.options.states[a] || {}, - k = l[f.type].marker && f.options.marker, - m = k && !1 === k.enabled, - p = (k && k.states && k.states[a]) || {}, - g = !1 === p.enabled, - r = f.stateMarkerGraphic, - u = this.marker || {}, - w = f.chart, - x = f.halo, - z, - B = k && f.markerAttribs; - a = a || ''; - if ( - !( - (a === this.state && !b) || - (this.selected && 'select' !== a) || - !1 === h.enabled || - (a && (g || (m && !1 === p.enabled))) || - (a && u.states && u.states[a] && !1 === u.states[a].enabled) - ) - ) { - B && (z = f.markerAttribs(this, a)); - if (this.graphic) - this.state && - this.graphic.removeClass('highcharts-point-' + this.state), - a && this.graphic.addClass('highcharts-point-' + a), - this.graphic.animate( - f.pointAttribs(this, a), - c(w.options.chart.animation, h.animation), - ), - z && - this.graphic.animate( - z, - c(w.options.chart.animation, p.animation, k.animation), - ), - r && r.hide(); - else { - if (a && p) { - k = u.symbol || f.symbol; - r && r.currentSymbol !== k && (r = r.destroy()); - if (r) r[b ? 'animate' : 'attr']({ x: z.x, y: z.y }); - else - k && - ((f.stateMarkerGraphic = r = w.renderer - .symbol(k, z.x, z.y, z.width, z.height) - .add(f.markerGroup)), - (r.currentSymbol = k)); - r && r.attr(f.pointAttribs(this, a)); - } - r && - (r[a && w.isInsidePlot(d, e, w.inverted) ? 'show' : 'hide'](), - (r.element.point = this)); - } - (d = h.halo) && d.size - ? (x || - (f.halo = x = w.renderer - .path() - .add((this.graphic || r).parentGroup)), - x[b ? 'animate' : 'attr']({ d: this.haloPath(d.size) }), - x.attr({ - class: - 'highcharts-halo highcharts-color-' + - c(this.colorIndex, f.colorIndex), - }), - (x.point = this), - x.attr( - n( - { - fill: this.color || f.color, - 'fill-opacity': d.opacity, - zIndex: -1, - }, - d.attributes, - ), - )) - : x && - x.point && - x.point.haloPath && - x.animate({ d: x.point.haloPath(0) }); - this.state = a; - } - }, - haloPath: function(a) { - return this.series.chart.renderer.symbols.circle( - Math.floor(this.plotX) - a, - this.plotY - a, - 2 * a, - 2 * a, - ); - }, - }); - n(k.prototype, { - onMouseOver: function() { - var a = this.chart, - b = a.hoverSeries; - if (b && b !== this) b.onMouseOut(); - this.options.events.mouseOver && w(this, 'mouseOver'); - this.setState('hover'); - a.hoverSeries = this; - }, - onMouseOut: function() { - var a = this.options, - b = this.chart, - c = b.tooltip, - d = b.hoverPoint; - b.hoverSeries = null; - if (d) d.onMouseOut(); - this && a.events.mouseOut && w(this, 'mouseOut'); - !c || - this.stickyTracking || - (c.shared && !this.noSharedTooltip) || - c.hide(); - this.setState(); - }, - setState: function(a) { - var b = this, - d = b.options, - e = b.graph, - f = d.states, - h = d.lineWidth, - d = 0; - a = a || ''; - if ( - b.state !== a && - (r([b.group, b.markerGroup, b.dataLabelsGroup], function(c) { - c && - (b.state && c.removeClass('highcharts-series-' + b.state), - a && c.addClass('highcharts-series-' + a)); - }), - (b.state = a), - !f[a] || !1 !== f[a].enabled) && - (a && (h = f[a].lineWidth || h + (f[a].lineWidthPlus || 0)), - e && !e.dashstyle) - ) - for ( - h = { 'stroke-width': h }, - e.animate( - h, - c(b.chart.options.chart.animation, f[a] && f[a].animation), - ); - b['zone-graph-' + d]; - - ) - b['zone-graph-' + d].attr(h), (d += 1); - }, - setVisible: function(a, b) { - var c = this, - d = c.chart, - e = c.legendItem, - f, - h = d.options.chart.ignoreHiddenSeries, - k = c.visible; - f = (c.visible = a = c.options.visible = c.userOptions.visible = - void 0 === a ? !k : a) - ? 'show' - : 'hide'; - r( - ['group', 'dataLabelsGroup', 'markerGroup', 'tracker', 'tt'], - function(a) { - if (c[a]) c[a][f](); - }, - ); - if (d.hoverSeries === c || (d.hoverPoint && d.hoverPoint.series) === c) - c.onMouseOut(); - e && d.legend.colorizeItem(c, a); - c.isDirty = !0; - c.options.stacking && - r(d.series, function(a) { - a.options.stacking && a.visible && (a.isDirty = !0); - }); - r(c.linkedSeries, function(b) { - b.setVisible(a, !1); - }); - h && (d.isDirtyBox = !0); - !1 !== b && d.redraw(); - w(c, f); - }, - show: function() { - this.setVisible(!0); - }, - hide: function() { - this.setVisible(!1); - }, - select: function(a) { - this.selected = a = void 0 === a ? !this.selected : a; - this.checkbox && (this.checkbox.checked = a); - w(this, a ? 'select' : 'unselect'); - }, - drawTracker: I.drawTrackerGraph, - }); - })(M); - (function(a) { - var E = a.Chart, - D = a.each, - H = a.inArray, - p = a.isArray, - f = a.isObject, - l = a.pick, - r = a.splat; - E.prototype.setResponsive = function(f) { - var l = this.options.responsive, - n = [], - e = this.currentResponsive; - l && - l.rules && - D( - l.rules, - function(e) { - void 0 === e._id && (e._id = a.uniqueKey()); - this.matchResponsiveRule(e, n, f); - }, - this, - ); - var h = a.merge.apply( - 0, - a.map(n, function(e) { - return a.find(l.rules, function(a) { - return a._id === e; - }).chartOptions; - }), - ), - n = n.toString() || void 0; - n !== (e && e.ruleIds) && - (e && this.update(e.undoOptions, f), - n - ? ((this.currentResponsive = { - ruleIds: n, - mergedOptions: h, - undoOptions: this.currentOptions(h), - }), - this.update(h, f)) - : (this.currentResponsive = void 0)); - }; - E.prototype.matchResponsiveRule = function(a, f) { - var n = a.condition; - ( - n.callback || - function() { - return ( - this.chartWidth <= l(n.maxWidth, Number.MAX_VALUE) && - this.chartHeight <= l(n.maxHeight, Number.MAX_VALUE) && - this.chartWidth >= l(n.minWidth, 0) && - this.chartHeight >= l(n.minHeight, 0) - ); - } - ).call(this) && f.push(a._id); - }; - E.prototype.currentOptions = function(l) { - function n(e, h, l, d) { - var c; - a.objectEach(e, function(a, e) { - if (!d && -1 < H(e, ['series', 'xAxis', 'yAxis'])) - for (a = r(a), l[e] = [], c = 0; c < a.length; c++) - h[e][c] && ((l[e][c] = {}), n(a[c], h[e][c], l[e][c], d + 1)); - else - f(a) - ? ((l[e] = p(a) ? [] : {}), n(a, h[e] || {}, l[e], d + 1)) - : (l[e] = h[e] || null); - }); - } - var u = {}; - n(l, this.options, u, 0); - return u; - }; - })(M); - return M; -}); +(function(S,M){"object"===typeof module&&module.exports?module.exports=S.document?M(S):M:S.Highcharts=M(S)})("undefined"!==typeof window?window:this,function(S){var M=function(){var a="undefined"===typeof S?window:S,E=a.document,D=a.navigator&&a.navigator.userAgent||"",H=E&&E.createElementNS&&!!E.createElementNS("http://www.w3.org/2000/svg","svg").createSVGRect,p=/(edge|msie|trident)/i.test(D)&&!a.opera,f=/Firefox/.test(D),l=f&&4>parseInt(D.split("Firefox/")[1],10);return a.Highcharts?a.Highcharts.error(16, +!0):{product:"Highcharts",version:"6.0.4",deg2rad:2*Math.PI/360,doc:E,hasBidiBug:l,hasTouch:E&&void 0!==E.documentElement.ontouchstart,isMS:p,isWebKit:/AppleWebKit/.test(D),isFirefox:f,isTouchDevice:/(Mobile|Android|Windows Phone)/.test(D),SVG_NS:"http://www.w3.org/2000/svg",chartCount:0,seriesTypes:{},symbolSizes:{},svg:H,win:a,marginNames:["plotTop","marginRight","marginBottom","plotLeft"],noop:function(){},charts:[]}}();(function(a){a.timers=[];var E=a.charts,D=a.doc,H=a.win;a.error=function(p, +f){p=a.isNumber(p)?"Highcharts error #"+p+": www.highcharts.com/errors/"+p:p;if(f)throw Error(p);H.console&&console.log(p)};a.Fx=function(a,f,l){this.options=f;this.elem=a;this.prop=l};a.Fx.prototype={dSetter:function(){var a=this.paths[0],f=this.paths[1],l=[],r=this.now,n=a.length,w;if(1===r)l=this.toD;else if(n===f.length&&1>r)for(;n--;)w=parseFloat(a[n]),l[n]=isNaN(w)?f[n]:r*parseFloat(f[n]-w)+w;else l=f;this.elem.attr("d",l,null,!0)},update:function(){var a=this.elem,f=this.prop,l=this.now,r= +this.options.step;if(this[f+"Setter"])this[f+"Setter"]();else a.attr?a.element&&a.attr(f,l,null,!0):a.style[f]=l+this.unit;r&&r.call(a,l,this)},run:function(p,f,l){var r=this,n=r.options,w=function(a){return w.stopped?!1:r.step(a)},u=H.requestAnimationFrame||function(a){setTimeout(a,13)},e=function(){for(var h=0;h=u+this.startTime?(this.now=this.end,this.pos=1,this.update(),l=e[this.prop]=!0,a.objectEach(e,function(a){!0!==a&&(l=!1)}),l&&w&&w.call(n),p=!1):(this.pos=r.easing((f-this.startTime)/u),this.now=this.start+(this.end- +this.start)*this.pos,this.update(),p=!0);return p},initPath:function(p,f,l){function r(a){var b,c;for(k=a.length;k--;)b="M"===a[k]||"L"===a[k],c=/[a-zA-Z]/.test(a[k+3]),b&&c&&a.splice(k+1,0,a[k+1],a[k+2],a[k+1],a[k+2])}function n(a,b){for(;a.lengtha&&-Infinityw?"AM":"PM",P:12>w?"am":"pm",S:k(n.getSeconds()),L:k(Math.round(f%1E3),3)},a.dateFormats);a.objectEach(r,function(a,b){for(;-1!==p.indexOf("%"+b);)p=p.replace("%"+b,"function"===typeof a?a(f):a)});return l?p.substr(0,1).toUpperCase()+p.substr(1):p};a.formatSingle=function(p,f){var l=/\.([0-9])/,r=a.defaultOptions.lang;/f$/.test(p)?(l=(l=p.match(l))?l[1]:-1,null!==f&&(f=a.numberFormat(f,l,r.decimalPoint,-1=l&&(f=[1/l])));for(r=0;r=p||!n&&w<=(f[r]+(f[r+1]||f[r]))/2);r++);return u=a.correctFloat(u*l,-Math.round(Math.log(.001)/Math.LN10))};a.stableSort=function(a,f){var l=a.length,p,n;for(n=0;nl&&(l=a[f]);return l};a.destroyObjectProperties=function(p,f){a.objectEach(p,function(a,r){a&&a!==f&&a.destroy&&a.destroy();delete p[r]})};a.discardElement=function(p){var f=a.garbageBin;f||(f=a.createElement("div"));p&&f.appendChild(p);f.innerHTML=""};a.correctFloat=function(a,f){return parseFloat(a.toPrecision(f||14))};a.setAnimation=function(p,f){f.renderer.globalAnimation=a.pick(p,f.options.chart.animation, +!0)};a.animObject=function(p){return a.isObject(p)?a.merge(p):{duration:p?500:0}};a.timeUnits={millisecond:1,second:1E3,minute:6E4,hour:36E5,day:864E5,week:6048E5,month:24192E5,year:314496E5};a.numberFormat=function(p,f,l,r){p=+p||0;f=+f;var n=a.defaultOptions.lang,w=(p.toString().split(".")[1]||"").split("e")[0].length,u,e,h=p.toString().split("e");-1===f?f=Math.min(w,20):a.isNumber(f)?f&&h[1]&&0>h[1]&&(u=f+ +h[1],0<=u?(h[0]=(+h[0]).toExponential(u).split("e")[0],f=u):(h[0]=h[0].split(".")[0]||0, +p=20>f?(h[0]*Math.pow(10,h[1])).toFixed(f):0,h[1]=0)):f=2;e=(Math.abs(h[1]?h[0]:p)+Math.pow(10,-Math.max(f,w)-1)).toFixed(f);w=String(a.pInt(e));u=3p?"-":"")+(u?w.substr(0,u)+r:"");p+=w.substr(u).replace(/(\d{3})(?=\d)/g,"$1"+r);f&&(p+=l+e.slice(-f));h[1]&&0!==+p&&(p+="e"+h[1]);return p};Math.easeInOutSine=function(a){return-.5*(Math.cos(Math.PI*a)-1)};a.getStyle=function(p,f,l){if("width"===f)return Math.min(p.offsetWidth, +p.scrollWidth)-a.getStyle(p,"padding-left")-a.getStyle(p,"padding-right");if("height"===f)return Math.min(p.offsetHeight,p.scrollHeight)-a.getStyle(p,"padding-top")-a.getStyle(p,"padding-bottom");H.getComputedStyle||a.error(27,!0);if(p=H.getComputedStyle(p,void 0))p=p.getPropertyValue(f),a.pick(l,"opacity"!==f)&&(p=a.pInt(p));return p};a.inArray=function(p,f){return(a.indexOfPolyfill||Array.prototype.indexOf).call(f,p)};a.grep=function(p,f){return(a.filterPolyfill||Array.prototype.filter).call(p, +f)};a.find=Array.prototype.find?function(a,f){return a.find(f)}:function(a,f){var l,r=a.length;for(l=0;l>16,(l&65280)>> +8,l&255,1]:4===f&&(n=[(l&3840)>>4|(l&3840)>>8,(l&240)>>4|l&240,(l&15)<<4|l&15,1])),!n)for(w=this.parsers.length;w--&&!n;)u=this.parsers[w],(f=u.regex.exec(l))&&(n=u.parse(f));this.rgba=n||[]},get:function(a){var f=this.input,n=this.rgba,l;this.stops?(l=p(f),l.stops=[].concat(l.stops),E(this.stops,function(n,e){l.stops[e]=[l.stops[e][0],n.get(a)]})):l=n&&D(n[0])?"rgb"===a||!a&&1===n[3]?"rgb("+n[0]+","+n[1]+","+n[2]+")":"a"===a?n[3]:"rgba("+n.join(",")+")":f;return l},brighten:function(a){var l,n=this.rgba; +if(this.stops)E(this.stops,function(n){n.brighten(a)});else if(D(a)&&0!==a)for(l=0;3>l;l++)n[l]+=f(255*a),0>n[l]&&(n[l]=0),255y.width)y={width:0,height:0}}else y=this.htmlGetBBox();b.isSVG&& +(a=y.width,b=y.height,q&&"11px"===q.fontSize&&17===Math.round(b)&&(y.height=b=14),g&&(y.width=Math.abs(b*Math.sin(v))+Math.abs(a*Math.cos(v)),y.height=Math.abs(b*Math.cos(v))+Math.abs(a*Math.sin(v))));if(A&&0]*>/g,"")))},textSetter:function(a){a!==this.textStr&&(delete this.bBox,this.textStr=a,this.added&&this.renderer.buildText(this))},fillSetter:function(a,g,b){"string"===typeof a?b.setAttribute(g,a):a&&this.colorGradient(a,g,b)},visibilitySetter:function(a,g,b){"inherit"===a?b.removeAttribute(g):this[g]!==a&&b.setAttribute(g,a);this[g]=a},zIndexSetter:function(a,b){var v=this.renderer,y=this.parentGroup,c=(y||v).element||v.box,k,d=this.element,q,e,v=c===v.box;k=this.added;var z;u(a)&& +(d.zIndex=a,a=+a,this[b]===a&&(k=!1),this[b]=a);if(k){(a=this.zIndex)&&y&&(y.handleZ=!0);b=c.childNodes;for(z=b.length-1;0<=z&&!q;z--)if(y=b[z],k=y.zIndex,e=!u(k),y!==d)if(0>a&&e&&!v&&!z)c.insertBefore(d,b[z]),q=!0;else if(g(k)<=a||e&&(!u(a)||0<=a))c.insertBefore(d,b[z+1]||null),q=!0;q||(c.insertBefore(d,b[v?3:0]||null),q=!0)}return q},_defaultSetter:function(a,g,b){b.setAttribute(g,a)}});E.prototype.yGetter=E.prototype.xGetter;E.prototype.translateXSetter=E.prototype.translateYSetter=E.prototype.rotationSetter= +E.prototype.verticalAlignSetter=E.prototype.rotationOriginXSetter=E.prototype.rotationOriginYSetter=E.prototype.scaleXSetter=E.prototype.scaleYSetter=E.prototype.matrixSetter=function(a,g){this[g]=a;this.doTransform=!0};E.prototype["stroke-widthSetter"]=E.prototype.strokeSetter=function(a,g,b){this[g]=a;this.stroke&&this["stroke-width"]?(E.prototype.fillSetter.call(this,this.stroke,"stroke",b),b.setAttribute("stroke-width",this["stroke-width"]),this.hasStroke=!0):"stroke-width"===g&&0===a&&this.hasStroke&& +(b.removeAttribute("stroke"),this.hasStroke=!1)};D=a.SVGRenderer=function(){this.init.apply(this,arguments)};c(D.prototype,{Element:E,SVG_NS:P,init:function(a,g,b,v,c,k){var y;v=this.createElement("svg").attr({version:"1.1","class":"highcharts-root"}).css(this.getStyle(v));y=v.element;a.appendChild(y);f(a,"dir","ltr");-1===a.innerHTML.indexOf("xmlns")&&f(y,"xmlns",this.SVG_NS);this.isSVG=!0;this.box=y;this.boxWrapper=v;this.alignedObjects=[];this.url=(x||N)&&m.getElementsByTagName("base").length? +R.location.href.replace(/#.*?$/,"").replace(/<[^>]*>/g,"").replace(/([\('\)])/g,"\\$1").replace(/ /g,"%20"):"";this.createElement("desc").add().element.appendChild(m.createTextNode("Created with Highcharts 6.0.4"));this.defs=this.createElement("defs").add();this.allowHTML=k;this.forExport=c;this.gradients={};this.cache={};this.cacheKeys=[];this.imgCount=0;this.setSize(g,b,!1);var d;x&&a.getBoundingClientRect&&(g=function(){n(a,{left:0,top:0});d=a.getBoundingClientRect();n(a,{left:Math.ceil(d.left)- +d.left+"px",top:Math.ceil(d.top)-d.top+"px"})},g(),this.unSubPixelFix=H(R,"resize",g))},getStyle:function(a){return this.style=c({fontFamily:'"Lucida Grande", "Lucida Sans Unicode", Arial, Helvetica, sans-serif',fontSize:"12px"},a)},setStyle:function(a){this.boxWrapper.css(this.getStyle(a))},isHidden:function(){return!this.boxWrapper.getBBox().width},destroy:function(){var a=this.defs;this.box=null;this.boxWrapper=this.boxWrapper.destroy();h(this.gradients||{});this.gradients=null;a&&(this.defs=a.destroy()); +this.unSubPixelFix&&this.unSubPixelFix();return this.alignedObjects=null},createElement:function(a){var g=new this.Element;g.init(this,a);return g},draw:A,getRadialAttr:function(a,g){return{cx:a[0]-a[2]/2+g.cx*a[2],cy:a[1]-a[2]/2+g.cy*a[2],r:g.r*a[2]}},getSpanWidth:function(a,g){var b=a.getBBox(!0).width;!L&&this.forExport&&(b=this.measureSpanWidth(g.firstChild.data,a.styles));return b},applyEllipsis:function(a,g,b,v){var c=a.rotation,y=b,k,d=0,q=b.length,e=function(a){g.removeChild(g.firstChild); +a&&g.appendChild(m.createTextNode(a))},z;a.rotation=0;y=this.getSpanWidth(a,g);if(z=y>v){for(;d<=q;)k=Math.ceil((d+q)/2),y=b.substring(0,k)+"\u2026",e(y),y=this.getSpanWidth(a,g),d===q?d=q+1:y>v?q=k-1:d=k;0===q&&e("")}a.rotation=c;return z},escapes:{"\x26":"\x26amp;","\x3c":"\x26lt;","\x3e":"\x26gt;","'":"\x26#39;",'"':"\x26quot;"},buildText:function(a){var b=a.element,v=this,c=v.forExport,y=G(a.textStr,"").toString(),q=-1!==y.indexOf("\x3c"),e=b.childNodes,z,h,A,J,t=f(b,"x"),x=a.styles,B=a.textWidth, +l=x&&x.lineHeight,C=x&&x.textOutline,u=x&&"ellipsis"===x.textOverflow,Q=x&&"nowrap"===x.whiteSpace,w=x&&x.fontSize,R,I,r=e.length,x=B&&!a.added&&this.box,p=function(a){var c;c=/(px|em)$/.test(a&&a.style.fontSize)?a.style.fontSize:w||v.style.fontSize||12;return l?g(l):v.fontMetrics(c,a.getAttribute("style")?a:b).h},K=function(a){F(v.escapes,function(g,b){a=a.replace(new RegExp(g,"g"),b)});return a};R=[y,u,Q,l,C,w,B].join();if(R!==a.textCache){for(a.textCache=R;r--;)b.removeChild(e[r]);q||C||u||B|| +-1!==y.indexOf(" ")?(z=/<.*class="([^"]+)".*>/,h=/<.*style="([^"]+)".*>/,A=/<.*href="([^"]+)".*>/,x&&x.appendChild(b),y=q?y.replace(/<(b|strong)>/g,'\x3cspan style\x3d"font-weight:bold"\x3e').replace(/<(i|em)>/g,'\x3cspan style\x3d"font-style:italic"\x3e').replace(//g,"\x3c/span\x3e").split(//g):[y],y=k(y,function(a){return""!==a}),d(y,function(g,y){var k,q=0;g=g.replace(/^\s+|\s+$/g,"").replace(//g,"\x3c/span\x3e|||"); +k=g.split("|||");d(k,function(g){if(""!==g||1===k.length){var d={},e=m.createElementNS(v.SVG_NS,"tspan"),x,F;z.test(g)&&(x=g.match(z)[1],f(e,"class",x));h.test(g)&&(F=g.match(h)[1].replace(/(;| |^)color([ :])/,"$1fill$2"),f(e,"style",F));A.test(g)&&!c&&(f(e,"onclick",'location.href\x3d"'+g.match(A)[1]+'"'),f(e,"class","highcharts-anchor"),n(e,{cursor:"pointer"}));g=K(g.replace(/<[a-zA-Z\/](.|\n)*?>/g,"")||" ");if(" "!==g){e.appendChild(m.createTextNode(g));q?d.dx=0:y&&null!==t&&(d.x=t);f(e,d);b.appendChild(e); +!q&&I&&(!L&&c&&n(e,{display:"block"}),f(e,"dy",p(e)));if(B){d=g.replace(/([^\^])-/g,"$1- ").split(" ");x=1B,void 0===J&&(J=g),g&&1!==d.length?(e.removeChild(e.firstChild),O.unshift(d.pop())):(d=O,O=[],d.length&&!Q&&(e=m.createElementNS(P,"tspan"),f(e,{dy:C,x:t}),F&&f(e,"style",F),b.appendChild(e)),l>B&&(B=l)),d.length&&e.appendChild(m.createTextNode(d.join(" ").replace(/- /g, +"-")));a.rotation=G}q++}}});I=I||b.childNodes.length}),J&&a.attr("title",a.textStr),x&&x.removeChild(b),C&&a.applyTextOutline&&a.applyTextOutline(C)):b.appendChild(m.createTextNode(K(y)))}},getContrast:function(a){a=r(a).rgba;return 510Math.abs(c.end-c.start-2*Math.PI));var y=Math.cos(k),z=Math.sin(k),h=Math.cos(e),e=Math.sin(e);c=.001>c.end-k-Math.PI?0:1;d=["M",a+d*y,g+q*z,"A",d,q,0,c,1,a+d*h,g+q*e];u(b)&&d.push(v?"M":"L",a+b* +h,g+b*e,"A",b,b,0,c,0,a+b*y,g+b*z);d.push(v?"":"Z");return d},callout:function(a,g,b,v,c){var d=Math.min(c&&c.r||0,b,v),k=d+6,q=c&&c.anchorX;c=c&&c.anchorY;var e;e=["M",a+d,g,"L",a+b-d,g,"C",a+b,g,a+b,g,a+b,g+d,"L",a+b,g+v-d,"C",a+b,g+v,a+b,g+v,a+b-d,g+v,"L",a+d,g+v,"C",a,g+v,a,g+v,a,g+v-d,"L",a,g+d,"C",a,g,a,g,a+d,g];q&&q>b?c>g+k&&cq?c>g+k&&cv&&q>a+k&&qc&&q>a+k&&qa?a+3:Math.round(1.2*a);return{h:b,b:Math.round(.8* +b),f:a}},rotCorr:function(a,g,b){var v=a;g&&b&&(v=Math.max(v*Math.cos(g*e),4));return{x:-a/3*Math.sin(g*e),y:v}},label:function(g,b,k,e,z,h,m,A,L){var y=this,J=y.g("button"!==L&&"label"),t=J.text=y.text("",0,0,m).attr({zIndex:1}),x,F,n=0,B=3,l=0,C,f,Q,G,w,R={},I,P,r=/^url\((.*?)\)$/.test(e),p=r,K,O,N,T;L&&J.addClass("highcharts-"+L);p=r;K=function(){return(I||0)%2/2};O=function(){var a=t.element.style,g={};F=(void 0===C||void 0===f||w)&&u(t.textStr)&&t.getBBox();J.width=(C||F.width||0)+2*B+l;J.height= +(f||F.height||0)+2*B;P=B+y.fontMetrics(a&&a.fontSize,t).b;p&&(x||(J.box=x=y.symbols[e]||r?y.symbol(e):y.rect(),x.addClass(("button"===L?"":"highcharts-label-box")+(L?" highcharts-"+L+"-box":"")),x.add(J),a=K(),g.x=a,g.y=(A?-P:0)+a),g.width=Math.round(J.width),g.height=Math.round(J.height),x.attr(c(g,R)),R={})};N=function(){var a=l+B,g;g=A?0:P;u(C)&&F&&("center"===w||"right"===w)&&(a+={center:.5,right:1}[w]*(C-F.width));if(a!==t.x||g!==t.y)t.attr("x",a),void 0!==g&&t.attr("y",g);t.x=a;t.y=g};T=function(a, +g){x?x.attr(a,g):R[a]=g};J.onAdd=function(){t.add(J);J.attr({text:g||0===g?g:"",x:b,y:k});x&&u(z)&&J.attr({anchorX:z,anchorY:h})};J.widthSetter=function(g){C=a.isNumber(g)?g:null};J.heightSetter=function(a){f=a};J["text-alignSetter"]=function(a){w=a};J.paddingSetter=function(a){u(a)&&a!==B&&(B=J.padding=a,N())};J.paddingLeftSetter=function(a){u(a)&&a!==l&&(l=a,N())};J.alignSetter=function(a){a={left:0,center:.5,right:1}[a];a!==n&&(n=a,F&&J.attr({x:Q}))};J.textSetter=function(a){void 0!==a&&t.textSetter(a); +O();N()};J["stroke-widthSetter"]=function(a,g){a&&(p=!0);I=this["stroke-width"]=a;T(g,a)};J.strokeSetter=J.fillSetter=J.rSetter=function(a,g){"r"!==g&&("fill"===g&&a&&(p=!0),J[g]=a);T(g,a)};J.anchorXSetter=function(a,g){z=J.anchorX=a;T(g,Math.round(a)-K()-Q)};J.anchorYSetter=function(a,g){h=J.anchorY=a;T(g,a-G)};J.xSetter=function(a){J.x=a;n&&(a-=n*((C||F.width)+2*B));Q=Math.round(a);J.attr("translateX",Q)};J.ySetter=function(a){G=J.y=Math.round(a);J.attr("translateY",G)};var U=J.css;return c(J,{css:function(a){if(a){var g= +{};a=q(a);d(J.textProps,function(b){void 0!==a[b]&&(g[b]=a[b],delete a[b])});t.css(g)}return U.call(J,a)},getBBox:function(){return{width:F.width+2*B,height:F.height+2*B,x:F.x-B,y:F.y-B}},shadow:function(a){a&&(O(),x&&x.shadow(a));return J},destroy:function(){v(J.element,"mouseenter");v(J.element,"mouseleave");t&&(t=t.destroy());x&&(x=x.destroy());E.prototype.destroy.call(J);J=y=O=N=T=null}})}});a.Renderer=D})(M);(function(a){var E=a.attr,D=a.createElement,H=a.css,p=a.defined,f=a.each,l=a.extend, +r=a.isFirefox,n=a.isMS,w=a.isWebKit,u=a.pick,e=a.pInt,h=a.SVGRenderer,m=a.win,d=a.wrap;l(a.SVGElement.prototype,{htmlCss:function(a){var b=this.element;if(b=a&&"SPAN"===b.tagName&&a.width)delete a.width,this.textWidth=b,this.updateTransform();a&&"ellipsis"===a.textOverflow&&(a.whiteSpace="nowrap",a.overflow="hidden");this.styles=l(this.styles,a);H(this.element,a);return this},htmlGetBBox:function(){var a=this.element;return{x:a.offsetLeft,y:a.offsetTop,width:a.offsetWidth,height:a.offsetHeight}}, +htmlUpdateTransform:function(){if(this.added){var a=this.renderer,b=this.element,d=this.translateX||0,z=this.translateY||0,h=this.x||0,m=this.y||0,x=this.textAlign||"left",n={left:0,center:.5,right:1}[x],t=this.styles;H(b,{marginLeft:d,marginTop:z});this.shadows&&f(this.shadows,function(a){H(a,{marginLeft:d+1,marginTop:z+1})});this.inverted&&f(b.childNodes,function(c){a.invertChild(c,b)});if("SPAN"===b.tagName){var l=this.rotation,u=e(this.textWidth),q=t&&t.whiteSpace,A=[l,x,b.innerHTML,this.textWidth, +this.textAlign].join();A!==this.cTT&&(t=a.fontMetrics(b.style.fontSize).b,p(l)&&this.setSpanRotation(l,n,t),H(b,{width:"",whiteSpace:q||"nowrap"}),b.offsetWidth>u&&/[ \-]/.test(b.textContent||b.innerText)&&H(b,{width:u+"px",display:"block",whiteSpace:q||"normal"}),this.getSpanCorrection(b.offsetWidth,t,n,l,x));H(b,{left:h+(this.xCorr||0)+"px",top:m+(this.yCorr||0)+"px"});w&&(t=b.offsetHeight);this.cTT=A}}else this.alignOnAdd=!0},setSpanRotation:function(a,b,d){var c={},k=this.renderer.getTransformKey(); +c[k]=c.transform="rotate("+a+"deg)";c[k+(r?"Origin":"-origin")]=c.transformOrigin=100*b+"% "+d+"px";H(this.element,c)},getSpanCorrection:function(a,b,d){this.xCorr=-a*d;this.yCorr=-b}});l(h.prototype,{getTransformKey:function(){return n&&!/Edge/.test(m.navigator.userAgent)?"-ms-transform":w?"-webkit-transform":r?"MozTransform":m.opera?"-o-transform":""},html:function(a,b,k){var c=this.createElement("span"),e=c.element,h=c.renderer,m=h.isSVG,w=function(a,b){f(["opacity","visibility"],function(c){d(a, +c+"Setter",function(a,c,d,k){a.call(this,c,d,k);b[d]=c})})};c.textSetter=function(a){a!==e.innerHTML&&delete this.bBox;this.textStr=a;e.innerHTML=u(a,"");c.htmlUpdateTransform()};m&&w(c,c.element.style);c.xSetter=c.ySetter=c.alignSetter=c.rotationSetter=function(a,b){"align"===b&&(b="textAlign");c[b]=a;c.htmlUpdateTransform()};c.attr({text:a,x:Math.round(b),y:Math.round(k)}).css({fontFamily:this.style.fontFamily,fontSize:this.style.fontSize,position:"absolute"});e.style.whiteSpace="nowrap";c.css= +c.htmlCss;m&&(c.add=function(a){var b,d=h.box.parentNode,k=[];if(this.parentGroup=a){if(b=a.div,!b){for(;a;)k.push(a),a=a.parentGroup;f(k.reverse(),function(a){function e(g,b){a[b]=g;n?q[h.getTransformKey()]="translate("+(a.x||a.translateX)+"px,"+(a.y||a.translateY)+"px)":"translateX"===b?q.left=g+"px":q.top=g+"px";a.doTransform=!0}var q,g=E(a.element,"class");g&&(g={className:g});b=a.div=a.div||D("div",g,{position:"absolute",left:(a.translateX||0)+"px",top:(a.translateY||0)+"px",display:a.display, +opacity:a.opacity,pointerEvents:a.styles&&a.styles.pointerEvents},b||d);q=b.style;l(a,{classSetter:function(a){return function(g){this.element.setAttribute("class",g);a.className=g}}(b),on:function(){k[0].div&&c.on.apply({element:k[0].div},arguments);return a},translateXSetter:e,translateYSetter:e});w(a,q)})}}else b=d;b.appendChild(e);c.added=!0;c.alignOnAdd&&c.htmlUpdateTransform();return c});return c}})})(M);(function(a){function E(){var n=a.defaultOptions.global,l=r.moment;if(n.timezone){if(l)return function(a){return-l.tz(a, +n.timezone).utcOffset()};a.error(25)}return n.useUTC&&n.getTimezoneOffset}function D(){var n=a.defaultOptions.global,f,u=n.useUTC,e=u?"getUTC":"get",h=u?"setUTC":"set",m="Minutes Hours Day Date Month FullYear".split(" "),d=m.concat(["Milliseconds","Seconds"]);a.Date=f=n.Date||r.Date;f.hcTimezoneOffset=u&&n.timezoneOffset;f.hcGetTimezoneOffset=E();f.hcHasTimeZone=!(!f.hcTimezoneOffset&&!f.hcGetTimezoneOffset);f.hcMakeTime=function(a,b,d,e,h,m){var c;u?(c=f.UTC.apply(0,arguments),c+=p(c)):c=(new f(a, +b,l(d,1),l(e,0),l(h,0),l(m,0))).getTime();return c};for(n=0;nb&&e-k*zm&&(p=Math.round((h-e)/Math.cos(b*r)));else if(h=e+(1-k)*z,e-k*zm&&(I=m-a.x+I*k,x=-1),I=Math.min(B,I),II||f.autoRotation&&(c.styles||{}).width)p=I;p&&(t.width=p,(n.style||{}).textOverflow||(t.textOverflow="ellipsis"),c.css(t))},getPosition:function(a,f,l,e){var h=this.axis,m=h.chart,d=e&&m.oldChartHeight||m.chartHeight;return{x:a?h.translate(f+l,null,null,e)+h.transB:h.left+h.offset+(h.opposite?(e&&m.oldChartWidth||m.chartWidth)-h.right-h.left:0),y:a?d-h.bottom+h.offset-(h.opposite?h.height:0):d-h.translate(f+l,null,null,e)-h.transB}},getLabelPosition:function(a, +f,l,e,h,m,d,c){var b=this.axis,k=b.transA,z=b.reversed,B=b.staggerLines,n=b.tickRotCorr||{x:0,y:0},x=h.y,u=e||b.reserveSpaceDefault?0:-b.labelOffset*("center"===b.labelAlign?.5:1);D(x)||(x=0===b.side?l.rotation?-8:-l.getBBox().height:2===b.side?n.y+8:Math.cos(l.rotation*r)*(n.y-l.getBBox(!1,0).height/2));a=a+h.x+u+n.x-(m&&e?m*k*(z?-1:1):0);f=f+x-(m&&!e?m*k*(z?1:-1):0);B&&(l=d/(c||1)%B,b.opposite&&(l=B-l-1),f+=b.labelOffset/B*l);return{x:a,y:Math.round(f)}},getMarkPath:function(a,f,l,e,h,m){return m.crispLine(["M", +a,f,"L",a+(h?0:-l),f+(h?l:0)],e)},renderGridLine:function(a,f,l){var e=this.axis,h=e.options,m=this.gridLine,d={},c=this.pos,b=this.type,k=e.tickmarkOffset,z=e.chart.renderer,B=b?b+"Grid":"grid",n=h[B+"LineWidth"],x=h[B+"LineColor"],h=h[B+"LineDashStyle"];m||(d.stroke=x,d["stroke-width"]=n,h&&(d.dashstyle=h),b||(d.zIndex=1),a&&(d.opacity=0),this.gridLine=m=z.path().attr(d).addClass("highcharts-"+(b?b+"-":"")+"grid-line").add(e.gridGroup));if(!a&&m&&(a=e.getPlotLinePath(c+k,m.strokeWidth()*l,a,!0)))m[this.isNew? +"attr":"animate"]({d:a,opacity:f})},renderMark:function(a,f,u){var e=this.axis,h=e.options,m=e.chart.renderer,d=this.type,c=d?d+"Tick":"tick",b=e.tickSize(c),k=this.mark,z=!k,B=a.x;a=a.y;var n=l(h[c+"Width"],!d&&e.isXAxis?1:0),h=h[c+"Color"];b&&(e.opposite&&(b[0]=-b[0]),z&&(this.mark=k=m.path().addClass("highcharts-"+(d?d+"-":"")+"tick").add(e.axisGroup),k.attr({stroke:h,"stroke-width":n})),k[z?"attr":"animate"]({d:this.getMarkPath(B,a,b[0],k.strokeWidth()*u,e.horiz,m),opacity:f}))},renderLabel:function(a, +f,u,e){var h=this.axis,m=h.horiz,d=h.options,c=this.label,b=d.labels,k=b.step,h=h.tickmarkOffset,z=!0,B=a.x;a=a.y;c&&p(B)&&(c.xy=a=this.getLabelPosition(B,a,c,m,b,h,e,k),this.isFirst&&!this.isLast&&!l(d.showFirstLabel,1)||this.isLast&&!this.isFirst&&!l(d.showLastLabel,1)?z=!1:!m||b.step||b.rotation||f||0===u||this.handleOverflow(a),k&&e%k&&(z=!1),z&&p(a.y)?(a.opacity=u,c[this.isNewLabel?"attr":"animate"](a),this.isNewLabel=!1):(c.attr("y",-9999),this.isNewLabel=!0))},render:function(a,f,u){var e= +this.axis,h=e.horiz,m=this.getPosition(h,this.pos,e.tickmarkOffset,f),d=m.x,c=m.y,e=h&&d===e.pos+e.len||!h&&c===e.pos?-1:1;u=l(u,1);this.isActive=!0;this.renderGridLine(f,u,e);this.renderMark(m,u,e);this.renderLabel(m,f,u,a);this.isNew=!1},destroy:function(){H(this,this.axis)}}})(M);var V=function(a){var E=a.addEvent,D=a.animObject,H=a.arrayMax,p=a.arrayMin,f=a.color,l=a.correctFloat,r=a.defaultOptions,n=a.defined,w=a.deg2rad,u=a.destroyObjectProperties,e=a.each,h=a.extend,m=a.fireEvent,d=a.format, +c=a.getMagnitude,b=a.grep,k=a.inArray,z=a.isArray,B=a.isNumber,I=a.isString,x=a.merge,K=a.normalizeTickInterval,t=a.objectEach,C=a.pick,N=a.removeEvent,q=a.splat,A=a.syncTimeout,F=a.Tick,G=function(){this.init.apply(this,arguments)};a.extend(G.prototype,{defaultOptions:{dateTimeLabelFormats:{millisecond:"%H:%M:%S.%L",second:"%H:%M:%S",minute:"%H:%M",hour:"%H:%M",day:"%e. %b",week:"%e. %b",month:"%b '%y",year:"%Y"},endOnTick:!1,labels:{enabled:!0,style:{color:"#666666",cursor:"default",fontSize:"11px"}, +x:0},maxPadding:.01,minorTickLength:2,minorTickPosition:"outside",minPadding:.01,startOfWeek:1,startOnTick:!1,tickLength:10,tickmarkPlacement:"between",tickPixelInterval:100,tickPosition:"outside",title:{align:"middle",style:{color:"#666666"}},type:"linear",minorGridLineColor:"#f2f2f2",minorGridLineWidth:1,minorTickColor:"#999999",lineColor:"#ccd6eb",lineWidth:1,gridLineColor:"#e6e6e6",tickColor:"#ccd6eb"},defaultYAxisOptions:{endOnTick:!0,tickPixelInterval:72,showLastLabel:!0,labels:{x:-8},maxPadding:.05, +minPadding:.05,startOnTick:!0,title:{rotation:270,text:"Values"},stackLabels:{allowOverlap:!1,enabled:!1,formatter:function(){return a.numberFormat(this.total,-1)},style:{fontSize:"11px",fontWeight:"bold",color:"#000000",textOutline:"1px contrast"}},gridLineWidth:1,lineWidth:0},defaultLeftAxisOptions:{labels:{x:-15},title:{rotation:270}},defaultRightAxisOptions:{labels:{x:15},title:{rotation:90}},defaultBottomAxisOptions:{labels:{autoRotation:[-45],x:0},title:{rotation:0}},defaultTopAxisOptions:{labels:{autoRotation:[-45], +x:0},title:{rotation:0}},init:function(a,b){var g=b.isX,v=this;v.chart=a;v.horiz=a.inverted&&!v.isZAxis?!g:g;v.isXAxis=g;v.coll=v.coll||(g?"xAxis":"yAxis");v.opposite=b.opposite;v.side=b.side||(v.horiz?v.opposite?0:2:v.opposite?1:3);v.setOptions(b);var c=this.options,d=c.type;v.labelFormatter=c.labels.formatter||v.defaultLabelFormatter;v.userOptions=b;v.minPixelPadding=0;v.reversed=c.reversed;v.visible=!1!==c.visible;v.zoomEnabled=!1!==c.zoomEnabled;v.hasNames="category"===d||!0===c.categories;v.categories= +c.categories||v.hasNames;v.names=v.names||[];v.plotLinesAndBandsGroups={};v.isLog="logarithmic"===d;v.isDatetimeAxis="datetime"===d;v.positiveValuesOnly=v.isLog&&!v.allowNegativeLog;v.isLinked=n(c.linkedTo);v.ticks={};v.labelEdge=[];v.minorTicks={};v.plotLinesAndBands=[];v.alternateBands={};v.len=0;v.minRange=v.userMinRange=c.minRange||c.maxZoom;v.range=c.range;v.offset=c.offset||0;v.stacks={};v.oldStacks={};v.stacksTouched=0;v.max=null;v.min=null;v.crosshair=C(c.crosshair,q(a.options.tooltip.crosshairs)[g? +0:1],!1);b=v.options.events;-1===k(v,a.axes)&&(g?a.axes.splice(a.xAxis.length,0,v):a.axes.push(v),a[v.coll].push(v));v.series=v.series||[];a.inverted&&!v.isZAxis&&g&&void 0===v.reversed&&(v.reversed=!0);t(b,function(a,g){E(v,g,a)});v.lin2log=c.linearToLogConverter||v.lin2log;v.isLog&&(v.val2lin=v.log2lin,v.lin2val=v.lin2log)},setOptions:function(a){this.options=x(this.defaultOptions,"yAxis"===this.coll&&this.defaultYAxisOptions,[this.defaultTopAxisOptions,this.defaultRightAxisOptions,this.defaultBottomAxisOptions, +this.defaultLeftAxisOptions][this.side],x(r[this.coll],a))},defaultLabelFormatter:function(){var g=this.axis,b=this.value,c=g.categories,k=this.dateTimeLabelFormat,e=r.lang,q=e.numericSymbols,e=e.numericSymbolMagnitude||1E3,h=q&&q.length,m,z=g.options.labels.format,g=g.isLog?Math.abs(b):g.tickInterval;if(z)m=d(z,this);else if(c)m=b;else if(k)m=a.dateFormat(k,b);else if(h&&1E3<=g)for(;h--&&void 0===m;)c=Math.pow(e,h+1),g>=c&&0===10*b%c&&null!==q[h]&&0!==b&&(m=a.numberFormat(b/c,-1)+q[h]);void 0=== +m&&(m=1E4<=Math.abs(b)?a.numberFormat(b,-1):a.numberFormat(b,-1,void 0,""));return m},getSeriesExtremes:function(){var a=this,v=a.chart;a.hasVisibleSeries=!1;a.dataMin=a.dataMax=a.threshold=null;a.softThreshold=!a.isXAxis;a.buildStacks&&a.buildStacks();e(a.series,function(g){if(g.visible||!v.options.chart.ignoreHiddenSeries){var c=g.options,d=c.threshold,k;a.hasVisibleSeries=!0;a.positiveValuesOnly&&0>=d&&(d=null);if(a.isXAxis)c=g.xData,c.length&&(g=p(c),k=H(c),B(g)||g instanceof Date||(c=b(c,B), +g=p(c)),a.dataMin=Math.min(C(a.dataMin,c[0],g),g),a.dataMax=Math.max(C(a.dataMax,c[0],k),k));else if(g.getExtremes(),k=g.dataMax,g=g.dataMin,n(g)&&n(k)&&(a.dataMin=Math.min(C(a.dataMin,g),g),a.dataMax=Math.max(C(a.dataMax,k),k)),n(d)&&(a.threshold=d),!c.softThreshold||a.positiveValuesOnly)a.softThreshold=!1}})},translate:function(a,b,c,d,k,e){var g=this.linkedParent||this,v=1,q=0,h=d?g.oldTransA:g.transA;d=d?g.oldMin:g.min;var m=g.minPixelPadding;k=(g.isOrdinal||g.isBroken||g.isLog&&k)&&g.lin2val; +h||(h=g.transA);c&&(v*=-1,q=g.len);g.reversed&&(v*=-1,q-=v*(g.sector||g.len));b?(a=(a*v+q-m)/h+d,k&&(a=g.lin2val(a))):(k&&(a=g.val2lin(a)),a=B(d)?v*(a-d)*h+q+v*m+(B(e)?h*e:0):void 0);return a},toPixels:function(a,b){return this.translate(a,!1,!this.horiz,null,!0)+(b?0:this.pos)},toValue:function(a,b){return this.translate(a-(b?0:this.pos),!0,!this.horiz,null,!0)},getPlotLinePath:function(a,b,c,d,k){var g=this.chart,v=this.left,q=this.top,e,h,m=c&&g.oldChartHeight||g.chartHeight,z=c&&g.oldChartWidth|| +g.chartWidth,A;e=this.transB;var t=function(a,g,b){if(ab)d?a=Math.min(Math.max(g,a),b):A=!0;return a};k=C(k,this.translate(a,null,null,c));a=c=Math.round(k+e);e=h=Math.round(m-k-e);B(k)?this.horiz?(e=q,h=m-this.bottom,a=c=t(a,v,v+this.width)):(a=v,c=z-this.right,e=h=t(e,q,q+this.height)):(A=!0,d=!1);return A&&!d?null:g.renderer.crispLine(["M",a,e,"L",c,h],b||1)},getLinearTickPositions:function(a,b,c){var g,v=l(Math.floor(b/a)*a);c=l(Math.ceil(c/a)*a);var d=[],k;l(v+a)===v&&(k=20);if(this.single)return[b]; +for(b=v;b<=c;){d.push(b);b=l(b+a,k);if(b===g)break;g=b}return d},getMinorTickInterval:function(){var a=this.options;return!0===a.minorTicks?C(a.minorTickInterval,"auto"):!1===a.minorTicks?null:a.minorTickInterval},getMinorTickPositions:function(){var a=this,b=a.options,c=a.tickPositions,d=a.minorTickInterval,k=[],q=a.pointRangePadding||0,h=a.min-q,q=a.max+q,m=q-h;if(m&&m/d=this.minRange,t=this.minRange,d=(t-c+b)/2,d=[b-d,C(a.min,b-d)],k&&(d[2]=this.isLog?this.log2lin(this.dataMin):this.dataMin),b=H(d),c=[b+t,C(a.max,b+t)],k&&(c[2]=this.isLog?this.log2lin(this.dataMax):this.dataMax),c=p(c),c-b=p?(r=p,f=0):b.dataMax<=p&&(w=p,x=0)),b.min= +C(N,r,b.dataMin),b.max=C(D,w,b.dataMax));q&&(b.positiveValuesOnly&&!g&&0>=Math.min(b.min,C(b.dataMin,b.min))&&a.error(10,1),b.min=l(h(b.min),15),b.max=l(h(b.max),15));b.range&&n(b.max)&&(b.userMin=b.min=N=Math.max(b.dataMin,b.minFromRange()),b.userMax=D=b.max,b.range=null);m(b,"foundExtremes");b.beforePadding&&b.beforePadding();b.adjustForMinRange();!(G||b.axisPointRange||b.usePercentage||t)&&n(b.min)&&n(b.max)&&(h=b.max-b.min)&&(!n(N)&&f&&(b.min-=h*f),!n(D)&&x&&(b.max+=h*x));B(k.softMin)&&!B(b.userMin)&& +(b.min=Math.min(b.min,k.softMin));B(k.softMax)&&!B(b.userMax)&&(b.max=Math.max(b.max,k.softMax));B(k.floor)&&(b.min=Math.max(b.min,k.floor));B(k.ceiling)&&(b.max=Math.min(b.max,k.ceiling));I&&n(b.dataMin)&&(p=p||0,!n(N)&&b.min=p?b.min=p:!n(D)&&b.max>p&&b.dataMax<=p&&(b.max=p));b.tickInterval=b.min===b.max||void 0===b.min||void 0===b.max?1:t&&!F&&u===b.linkedParent.options.tickPixelInterval?F=b.linkedParent.tickInterval:C(F,this.tickAmount?(b.max-b.min)/Math.max(this.tickAmount-1,1): +void 0,G?1:(b.max-b.min)*u/Math.max(b.len,u));A&&!g&&e(b.series,function(a){a.processData(b.min!==b.oldMin||b.max!==b.oldMax)});b.setAxisTranslation(!0);b.beforeSetTickPositions&&b.beforeSetTickPositions();b.postProcessTickInterval&&(b.tickInterval=b.postProcessTickInterval(b.tickInterval));b.pointRange&&!F&&(b.tickInterval=Math.max(b.pointRange,b.tickInterval));g=C(k.minTickInterval,b.isDatetimeAxis&&b.closestPointRange);!F&&b.tickIntervalb.tickInterval&&1E3b.max)),!!this.tickAmount));this.tickAmount||(b.tickInterval=b.unsquish());this.setTickPositions()},setTickPositions:function(){var a=this.options,b,c=a.tickPositions;b=this.getMinorTickInterval();var d=a.tickPositioner,k=a.startOnTick,q=a.endOnTick;this.tickmarkOffset=this.categories&&"between"===a.tickmarkPlacement&&1===this.tickInterval?.5:0;this.minorTickInterval="auto"===b&&this.tickInterval?this.tickInterval/ +5:b;this.single=this.min===this.max&&n(this.min)&&!this.tickAmount&&(parseInt(this.min,10)===this.min||!1!==a.allowDecimals);this.tickPositions=b=c&&c.slice();!b&&(b=this.isDatetimeAxis?this.getTimeTicks(this.normalizeTimeTickInterval(this.tickInterval,a.units),this.min,this.max,a.startOfWeek,this.ordinalPositions,this.closestPointRange,!0):this.isLog?this.getLogTickPositions(this.tickInterval,this.min,this.max):this.getLinearTickPositions(this.tickInterval,this.min,this.max),b.length>this.len&&(b= +[b[0],b.pop()],b[0]===b[1]&&(b.length=1)),this.tickPositions=b,d&&(d=d.apply(this,[this.min,this.max])))&&(this.tickPositions=b=d);this.paddedTicks=b.slice(0);this.trimTicks(b,k,q);this.isLinked||(this.single&&2>b.length&&(this.min-=.5,this.max+=.5),c||d||this.adjustTickAmount())},trimTicks:function(a,b,c){var g=a[0],d=a[a.length-1],k=this.minPointOffset||0;if(!this.isLinked){if(b&&-Infinity!==g)this.min=g;else for(;this.min-k>a[0];)a.shift();if(c)this.max=d;else for(;this.max+kb&&(this.finalTickAmt=b,b=5);this.tickAmount=b},adjustTickAmount:function(){var a=this.tickInterval,b=this.tickPositions,c=this.tickAmount,d=this.finalTickAmt,k=b&&b.length,q=C(this.threshold,this.softThreshold?0:null);if(this.hasData()){if(kc&&(this.tickInterval*= +2,this.setTickPositions());if(n(d)){for(a=c=b.length;a--;)(3===d&&1===a%2||2>=d&&0d&&(a=d)),n(c)&&(bd&&(b=d))),this.displayBtn=void 0!==a||void 0!==b,this.setExtremes(a,b,!1,void 0,{trigger:"zoom"});return!0},setAxisSize:function(){var b=this.chart,c=this.options,d=c.offsets||[0,0,0,0],k=this.horiz,q=this.width=Math.round(a.relativeLength(C(c.width,b.plotWidth-d[3]+d[1]),b.plotWidth)),e=this.height=Math.round(a.relativeLength(C(c.height, +b.plotHeight-d[0]+d[2]),b.plotHeight)),h=this.top=Math.round(a.relativeLength(C(c.top,b.plotTop+d[0]),b.plotHeight,b.plotTop)),c=this.left=Math.round(a.relativeLength(C(c.left,b.plotLeft+d[3]),b.plotWidth,b.plotLeft));this.bottom=b.chartHeight-e-h;this.right=b.chartWidth-q-c;this.len=Math.max(k?q:e,0);this.pos=k?c:h},getExtremes:function(){var a=this.isLog,b=this.lin2log;return{min:a?l(b(this.min)):this.min,max:a?l(b(this.max)):this.max,dataMin:this.dataMin,dataMax:this.dataMax,userMin:this.userMin, +userMax:this.userMax}},getThreshold:function(a){var b=this.isLog,g=this.lin2log,c=b?g(this.min):this.min,b=b?g(this.max):this.max;null===a?a=c:c>a?a=c:ba?"right":195a?"left":"center"},tickSize:function(a){var b=this.options,g=b[a+"Length"],c=C(b[a+"Width"],"tick"===a&&this.isXAxis?1:0);if(c&&g)return"inside"===b[a+"Position"]&&(g=-g),[g,c]},labelMetrics:function(){var a= +this.tickPositions&&this.tickPositions[0]||0;return this.chart.renderer.fontMetrics(this.options.labels.style&&this.options.labels.style.fontSize,this.ticks[a]&&this.ticks[a].label)},unsquish:function(){var a=this.options.labels,b=this.horiz,c=this.tickInterval,d=c,k=this.len/(((this.categories?1:0)+this.max-this.min)/c),q,h=a.rotation,m=this.labelMetrics(),z,A=Number.MAX_VALUE,t,x=function(a){a/=k||1;a=1=a)z=x(Math.abs(m.h/Math.sin(w*a))),b=z+Math.abs(a/360),b(c.step||0)&&!c.rotation&&(this.staggerLines||1)*this.len/d||!b&&(c.style&&parseInt(c.style.width,10)||k&&k-a.spacing[3]|| +.33*a.chartWidth)},renderUnsquish:function(){var a=this.chart,b=a.renderer,c=this.tickPositions,d=this.ticks,k=this.options.labels,q=this.horiz,h=this.getSlotWidth(),m=Math.max(1,Math.round(h-2*(k.padding||5))),z={},A=this.labelMetrics(),t=k.style&&k.style.textOverflow,f,F=0,l,B;I(k.rotation)||(z.rotation=k.rotation||0);e(c,function(a){(a=d[a])&&a.labelLength>F&&(F=a.labelLength)});this.maxLabelLength=F;if(this.autoRotation)F>m&&F>A.h?z.rotation=this.labelRotation:this.labelRotation=0;else if(h&& +(f={width:m+"px"},!t))for(f.textOverflow="clip",l=c.length;!q&&l--;)if(B=c[l],m=d[B].label)m.styles&&"ellipsis"===m.styles.textOverflow?m.css({textOverflow:"clip"}):d[B].labelLength>h&&m.css({width:h+"px"}),m.getBBox().height>this.len/c.length-(A.h-A.f)&&(m.specCss={textOverflow:"ellipsis"});z.rotation&&(f={width:(F>.5*a.chartHeight?.33*a.chartHeight:a.chartHeight)+"px"},t||(f.textOverflow="ellipsis"));if(this.labelAlign=k.align||this.autoLabelAlign(this.labelRotation))z.align=this.labelAlign;e(c, +function(a){var b=(a=d[a])&&a.label;b&&(b.attr(z),f&&b.css(x(f,b.specCss)),delete b.specCss,a.rotation=z.rotation)});this.tickRotCorr=b.rotCorr(A.b,this.labelRotation||0,0!==this.side)},hasData:function(){return this.hasVisibleSeries||n(this.min)&&n(this.max)&&this.tickPositions&&0=this.min&&a<=this.max)g[a]||(g[a]=new F(this,a)),d&&g[a].isNew&&g[a].render(b,!0,.1),g[a].render(b)},render:function(){var b= +this,c=b.chart,d=b.options,k=b.isLog,q=b.lin2log,h=b.isLinked,m=b.tickPositions,z=b.axisTitle,x=b.ticks,f=b.minorTicks,l=b.alternateBands,C=d.stackLabels,n=d.alternateGridColor,u=b.tickmarkOffset,G=b.axisLine,p=b.showAxis,I=D(c.renderer.globalAnimation),r,w;b.labelEdge.length=0;b.overlap=!1;e([x,f,l],function(a){t(a,function(a){a.isActive=!1})});if(b.hasData()||h)b.minorTickInterval&&!b.categories&&e(b.getMinorTickPositions(),function(a){b.renderMinorTick(a)}),m.length&&(e(m,function(a,c){b.renderTick(a, +c)}),u&&(0===b.min||b.single)&&(x[-1]||(x[-1]=new F(b,-1,null,!0)),x[-1].render(-1))),n&&e(m,function(d,g){w=void 0!==m[g+1]?m[g+1]+u:b.max-u;0===g%2&&d=h.second?0:C*Math.floor(x.getMilliseconds()/C));if(t>=h.second)x[D.hcSetSeconds](t>=h.minute? +0:C*Math.floor(x.getSeconds()/C));if(t>=h.minute)x[D.hcSetMinutes](t>=h.hour?0:C*Math.floor(x[D.hcGetMinutes]()/C));if(t>=h.hour)x[D.hcSetHours](t>=h.day?0:C*Math.floor(x[D.hcGetHours]()/C));if(t>=h.day)x[D.hcSetDate](t>=h.month?1:C*Math.floor(x[D.hcGetDate]()/C));t>=h.month&&(x[D.hcSetMonth](t>=h.year?0:C*Math.floor(x[D.hcGetMonth]()/C)),n=x[D.hcGetFullYear]());if(t>=h.year)x[D.hcSetFullYear](n-n%C);if(t===h.week)x[D.hcSetDate](x[D.hcGetDate]()-x[D.hcGetDay]()+e(b,1));n=x[D.hcGetFullYear]();b=x[D.hcGetMonth](); +var A=x[D.hcGetDate](),F=x[D.hcGetHours]();d=x.getTime();D.hcHasTimeZone&&(q=(!B||!!D.hcGetTimezoneOffset)&&(c-d>4*h.month||w(d)!==w(c)),N=w(x),x=new D(d+N));B=x.getTime();for(d=1;Bk.length&&l(k,function(a){0===a%18E5&&"000000000"===H("%H%M%S%L",a)&&(m[a]="day")})}k.info=r(a,{higherRanks:m,totalRange:t*C});return k}; +E.prototype.normalizeTimeTickInterval=function(a,d){var c=d||[["millisecond",[1,2,5,10,20,25,50,100,200,500]],["second",[1,2,5,10,15,30]],["minute",[1,2,5,10,15,30]],["hour",[1,2,3,4,6,8,12]],["day",[1,2]],["week",[1,2]],["month",[1,2,3,4,6]],["year",null]];d=c[c.length-1];var b=h[d[0]],k=d[1],e;for(e=0;er&&(!w||z<=n)&&void 0!==z&&d.push(z),z>n&& +(B=!0),z=k;else r=h(r),n=h(n),a=w?this.getMinorTickInterval():l.tickInterval,a=f("auto"===a?null:a,this._minorAutoInterval,l.tickPixelInterval/(w?5:1)*(n-r)/((w?e/this.tickPositions.length:e)||1)),a=p(a,null,D(a)),d=H(this.getLinearTickPositions(a,r,n),m),w||(this._minorAutoInterval=a/5);w||(this.tickInterval=a);return d};E.prototype.log2lin=function(a){return Math.log(a)/Math.LN10};E.prototype.lin2log=function(a){return Math.pow(10,a)}})(M);(function(a,E){var D=a.arrayMax,H=a.arrayMin,p=a.defined, +f=a.destroyObjectProperties,l=a.each,r=a.erase,n=a.merge,w=a.pick;a.PlotLineOrBand=function(a,e){this.axis=a;e&&(this.options=e,this.id=e.id)};a.PlotLineOrBand.prototype={render:function(){var f=this,e=f.axis,h=e.horiz,m=f.options,d=m.label,c=f.label,b=m.to,k=m.from,z=m.value,l=p(k)&&p(b),r=p(z),x=f.svgElem,K=!x,t=[],C=m.color,N=w(m.zIndex,0),q=m.events,t={"class":"highcharts-plot-"+(l?"band ":"line ")+(m.className||"")},A={},F=e.chart.renderer,G=l?"bands":"lines",g=e.log2lin;e.isLog&&(k=g(k),b=g(b), +z=g(z));r?(t={stroke:C,"stroke-width":m.width},m.dashStyle&&(t.dashstyle=m.dashStyle)):l&&(C&&(t.fill=C),m.borderWidth&&(t.stroke=m.borderColor,t["stroke-width"]=m.borderWidth));A.zIndex=N;G+="-"+N;(C=e.plotLinesAndBandsGroups[G])||(e.plotLinesAndBandsGroups[G]=C=F.g("plot-"+G).attr(A).add());K&&(f.svgElem=x=F.path().attr(t).add(C));if(r)t=e.getPlotLinePath(z,x.strokeWidth());else if(l)t=e.getPlotBandPath(k,b,m);else return;K&&t&&t.length?(x.attr({d:t}),q&&a.objectEach(q,function(a,b){x.on(b,function(a){q[b].apply(f, +[a])})})):x&&(t?(x.show(),x.animate({d:t})):(x.hide(),c&&(f.label=c=c.destroy())));d&&p(d.text)&&t&&t.length&&0this.max&& +e>this.max;if(m&&h)for(a&&(k=m.toString()===h.toString(),b=0),a=0;aA-h?A:A-h);else if(z)k[a]=Math.max(e,g+h+d>c?g:g+h);else return!1},C=function(a,c,d,g){var e;gc-b?e=!1:k[a]=gc-d/2?c-d-2:g-d/2;return e},p=function(a){var b=f;f=x;x=b;m=a},q=function(){!1!==t.apply(0,f)?!1!==C.apply(0,x)||m||(p(!0),q()):m?k.x=k.y=0:(p(!0),q())};(c.inverted||1q&&(h=!1);a=(e.series&& +e.series.yAxis&&e.series.yAxis.pos)+(e.plotY||0);a-=b.plotTop;c.push({target:e.isHeader?b.plotHeight+l:a,rank:e.isHeader?1:0,size:z.tt.getBBox().height+1,point:e,x:q,tt:t})}});this.cleanSplit();a.distribute(c,b.plotHeight+l);D(c,function(a){var c=a.point,d=c.series;a.tt.attr({visibility:void 0===a.pos?"hidden":"inherit",x:h||c.isHeader?a.x:c.plotX+b.plotLeft+n(f.distance,16),y:a.pos+b.plotTop,anchorX:c.isHeader?c.plotX+b.plotLeft:c.plotX+d.xAxis.pos,anchorY:c.isHeader?a.pos+b.plotTop-15:c.plotY+d.yAxis.pos})})}, +updatePosition:function(a){var e=this.chart,d=this.getLabel(),d=(this.options.positioner||this.getPosition).call(this,d.width,d.height,a);this.move(Math.round(d.x),Math.round(d.y||0),a.plotX+e.plotLeft,a.plotY+e.plotTop)},getDateFormat:function(a,m,d,c){var b=E("%m-%d %H:%M:%S.%L",m),k,h,f={millisecond:15,second:12,minute:9,hour:6,day:3},l="millisecond";for(h in e){if(a===e.week&&+E("%w",m)===d&&"00:00:00.000"===b.substr(6)){h="week";break}if(e[h]>a){h=l;break}if(f[h]&&b.substr(f[h])!=="01-01 00:00:00.000".substr(f[h]))break; +"week"!==h&&(l=h)}h&&(k=c[h]);return k},getXDateFormat:function(a,e,d){e=e.dateTimeLabelFormats;var c=d&&d.closestPointRange;return(c?this.getDateFormat(c,a.x,d.options.startOfWeek,e):e.day)||e.year},tooltipFooterHeaderFormatter:function(a,e){e=e?"footer":"header";var d=a.series,c=d.tooltipOptions,b=c.xDateFormat,k=d.xAxis,h=k&&"datetime"===k.options.type&&f(a.key),m=c[e+"Format"];h&&!b&&(b=this.getXDateFormat(a,c,k));h&&b&&D(a.point&&a.point.tooltipDateKeys||["key"],function(a){m=m.replace("{point."+ +a+"}","{point."+a+":"+b+"}")});return p(m,{point:a,series:d})},bodyFormatter:function(a){return l(a,function(a){var d=a.series.tooltipOptions;return(d[(a.point.formatPrefix||"point")+"Formatter"]||a.point.tooltipFormatter).call(a.point,d[(a.point.formatPrefix||"point")+"Format"])})}}})(M);(function(a){var E=a.addEvent,D=a.attr,H=a.charts,p=a.color,f=a.css,l=a.defined,r=a.each,n=a.extend,w=a.find,u=a.fireEvent,e=a.isObject,h=a.offset,m=a.pick,d=a.splat,c=a.Tooltip;a.Pointer=function(a,c){this.init(a, +c)};a.Pointer.prototype={init:function(a,d){this.options=d;this.chart=a;this.runChartClick=d.chart.events&&!!d.chart.events.click;this.pinchDown=[];this.lastValidTouch={};c&&(a.tooltip=new c(a,d.tooltip),this.followTouchMove=m(d.tooltip.followTouchMove,!0));this.setDOMEvents()},zoomOption:function(a){var b=this.chart,c=b.options.chart,d=c.zoomType||"",b=b.inverted;/touch/.test(a.type)&&(d=m(c.pinchType,d));this.zoomX=a=/x/.test(d);this.zoomY=d=/y/.test(d);this.zoomHor=a&&!b||d&&b;this.zoomVert=d&& +!b||a&&b;this.hasZoom=a||d},normalize:function(a,c){var b;b=a.touches?a.touches.length?a.touches.item(0):a.changedTouches[0]:a;c||(this.chartPosition=c=h(this.chart.container));return n(a,{chartX:Math.round(b.pageX-c.left),chartY:Math.round(b.pageY-c.top)})},getCoordinates:function(a){var b={xAxis:[],yAxis:[]};r(this.chart.axes,function(c){b[c.isXAxis?"xAxis":"yAxis"].push({axis:c,value:c.toValue(a[c.horiz?"chartX":"chartY"])})});return b},findNearestKDPoint:function(a,c,d){var b;r(a,function(a){var k= +!(a.noSharedTooltip&&c)&&0>a.options.findNearestPointBy.indexOf("y");a=a.searchPoint(d,k);if((k=e(a,!0))&&!(k=!e(b,!0)))var k=b.distX-a.distX,h=b.dist-a.dist,m=(a.series.group&&a.series.group.zIndex)-(b.series.group&&b.series.group.zIndex),k=0<(0!==k&&c?k:0!==h?h:0!==m?m:b.series.index>a.series.index?-1:1);k&&(b=a)});return b},getPointFromEvent:function(a){a=a.target;for(var b;a&&!b;)b=a.point,a=a.parentNode;return b},getChartCoordinatesFromPoint:function(a,c){var b=a.series,d=b.xAxis,b=b.yAxis,k= +m(a.clientX,a.plotX);if(d&&b)return c?{chartX:d.len+d.pos-k,chartY:b.len+b.pos-a.plotY}:{chartX:k+d.pos,chartY:a.plotY+b.pos}},getHoverData:function(b,c,d,h,f,l,n){var k,z=[],x=n&&n.isBoosting;h=!(!h||!b);n=c&&!c.stickyTracking?[c]:a.grep(d,function(a){return a.visible&&!(!f&&a.directTouch)&&m(a.options.enableMouseTracking,!0)&&a.stickyTracking});c=(k=h?b:this.findNearestKDPoint(n,f,l))&&k.series;k&&(f&&!c.noSharedTooltip?(n=a.grep(d,function(a){return a.visible&&!(!f&&a.directTouch)&&m(a.options.enableMouseTracking, +!0)&&!a.noSharedTooltip}),r(n,function(a){var b=w(a.points,function(a){return a.x===k.x&&!a.isNull});e(b)&&(x&&(b=a.getPoint(b)),z.push(b))})):z.push(k));return{hoverPoint:k,hoverSeries:c,hoverPoints:z}},runPointActions:function(b,c){var d=this.chart,k=d.tooltip&&d.tooltip.options.enabled?d.tooltip:void 0,e=k?k.shared:!1,h=c||d.hoverPoint,f=h&&h.series||d.hoverSeries,f=this.getHoverData(h,f,d.series,!!c||f&&f.directTouch&&this.isDirectTouch,e,b,{isBoosting:d.isBoosting}),l,h=f.hoverPoint;l=f.hoverPoints; +c=(f=f.hoverSeries)&&f.tooltipOptions.followPointer;e=e&&f&&!f.noSharedTooltip;if(h&&(h!==d.hoverPoint||k&&k.isHidden)){r(d.hoverPoints||[],function(b){-1===a.inArray(b,l)&&b.setState()});r(l||[],function(a){a.setState("hover")});if(d.hoverSeries!==f)f.onMouseOver();d.hoverPoint&&d.hoverPoint.firePointEvent("mouseOut");if(!h.series)return;h.firePointEvent("mouseOver");d.hoverPoints=l;d.hoverPoint=h;k&&k.refresh(e?l:h,b)}else c&&k&&!k.isHidden&&(h=k.getAnchor([{}],b),k.updatePosition({plotX:h[0],plotY:h[1]})); +this.unDocMouseMove||(this.unDocMouseMove=E(d.container.ownerDocument,"mousemove",function(b){var c=H[a.hoverChartIndex];if(c)c.pointer.onDocumentMouseMove(b)}));r(d.axes,function(c){var d=m(c.crosshair.snap,!0),k=d?a.find(l,function(a){return a.series[c.coll]===c}):void 0;k||!d?c.drawCrosshair(b,k):c.hideCrosshair()})},reset:function(a,c){var b=this.chart,k=b.hoverSeries,e=b.hoverPoint,h=b.hoverPoints,m=b.tooltip,f=m&&m.shared?h:e;a&&f&&r(d(f),function(b){b.series.isCartesian&&void 0===b.plotX&& +(a=!1)});if(a)m&&f&&(m.refresh(f),e&&(e.setState(e.state,!0),r(b.axes,function(a){a.crosshair&&a.drawCrosshair(null,e)})));else{if(e)e.onMouseOut();h&&r(h,function(a){a.setState()});if(k)k.onMouseOut();m&&m.hide(c);this.unDocMouseMove&&(this.unDocMouseMove=this.unDocMouseMove());r(b.axes,function(a){a.hideCrosshair()});this.hoverX=b.hoverPoints=b.hoverPoint=null}},scaleGroups:function(a,c){var b=this.chart,d;r(b.series,function(k){d=a||k.getPlotBox();k.xAxis&&k.xAxis.zoomEnabled&&k.group&&(k.group.attr(d), +k.markerGroup&&(k.markerGroup.attr(d),k.markerGroup.clip(c?b.clipRect:null)),k.dataLabelsGroup&&k.dataLabelsGroup.attr(d))});b.clipRect.attr(c||b.clipBox)},dragStart:function(a){var b=this.chart;b.mouseIsDown=a.type;b.cancelClick=!1;b.mouseDownX=this.mouseDownX=a.chartX;b.mouseDownY=this.mouseDownY=a.chartY},drag:function(a){var b=this.chart,c=b.options.chart,d=a.chartX,e=a.chartY,h=this.zoomHor,m=this.zoomVert,f=b.plotLeft,l=b.plotTop,n=b.plotWidth,q=b.plotHeight,A,F=this.selectionMarker,G=this.mouseDownX, +g=this.mouseDownY,v=c.panKey&&a[c.panKey+"Key"];F&&F.touch||(df+n&&(d=f+n),el+q&&(e=l+q),this.hasDragged=Math.sqrt(Math.pow(G-d,2)+Math.pow(g-e,2)),10u.max&&(f=u.max-x,v=!0);v?(F-=.8*(F-m[b][0]),q||(g-=.8*(g-m[b][1])),l()):m[b]=[F,g];C||(h[b]=w-r,h[n]=x);h=C?1/t:t;e[n]=x;e[b]=f;p[C?a?"scaleY":"scaleX":"scale"+k]=t;p["translate"+k]=h*r+(F-h*A)},pinch:function(a){var n=this,r=n.chart,u=n.pinchDown,e=a.touches,h=e.length,m=n.lastValidTouch, +d=n.hasZoom,c=n.selectionMarker,b={},k=1===h&&(n.inClass(a.target,"highcharts-tracker")&&r.runTrackerClick||n.runChartClick),z={};1c-6&&h(q||c.spacingBox.width-2*t-d.x)&&(this.itemX=t,this.itemY+=F+this.lastLineHeight+A,this.lastLineHeight=0);this.maxItemWidth=Math.max(this.maxItemWidth,m);this.lastItemY=F+this.itemY+A;this.lastLineHeight=Math.max(b,this.lastLineHeight);a._legendItemPos=[this.itemX,this.itemY];e?this.itemX+=m:(this.itemY+=F+b+A,this.lastLineHeight=b);this.offsetWidth=q||Math.max((e?this.itemX-t-(a.checkbox?0:p):m)+t,this.offsetWidth)}, +getAllItems:function(){var a=[];f(this.chart.series,function(c){var b=c&&c.options;c&&w(b.showInLegend,p(b.linkedTo)?!1:void 0,!0)&&(a=a.concat(c.legendItems||("point"===b.legendType?c.data:c)))});return a},getAlignment:function(){var a=this.options;return a.floating?"":a.align.charAt(0)+a.verticalAlign.charAt(0)+a.layout.charAt(0)},adjustMargins:function(a,c){var b=this.chart,d=this.options,e=this.getAlignment();e&&f([/(lth|ct|rth)/,/(rtv|rm|rbv)/,/(rbh|cb|lbh)/,/(lbv|lm|ltv)/],function(k,h){k.test(e)&& +!p(a[h])&&(b[r[h]]=Math.max(b[r[h]],b.legend[(h+1)%2?"legendHeight":"legendWidth"]+[1,-1,-1,1][h]*d[h%2?"x":"y"]+w(d.margin,12)+c[h]+(0===h?b.titleOffset+b.options.title.margin:0)))})},render:function(){var a=this,c=a.chart,b=c.renderer,k=a.group,h,m,l,x,p=a.box,t=a.options,C=a.padding;a.itemX=C;a.itemY=a.initialItemY;a.offsetWidth=0;a.lastItemY=0;k||(a.group=k=b.g("legend").attr({zIndex:7}).add(),a.contentGroup=b.g().attr({zIndex:1}).add(k),a.scrollGroup=b.g().add(a.contentGroup));a.renderTitle(); +h=a.getAllItems();e(h,function(a,b){return(a.options&&a.options.legendIndex||0)-(b.options&&b.options.legendIndex||0)});t.reversed&&h.reverse();a.allItems=h;a.display=m=!!h.length;a.lastLineHeight=0;f(h,function(b){a.renderItem(b)});l=(t.width||a.offsetWidth)+C;x=a.lastItemY+a.lastLineHeight+a.titleHeight;x=a.handleOverflow(x);x+=C;p||(a.box=p=b.rect().addClass("highcharts-legend-box").attr({r:t.borderRadius}).add(k),p.isNew=!0);p.attr({stroke:t.borderColor,"stroke-width":t.borderWidth||0,fill:t.backgroundColor|| +"none"}).shadow(t.shadow);0b&&!1!==t.enabled?(this.clipHeight=l=Math.max(b-20-this.titleHeight-m,0),this.currentPage=w(this.currentPage,1),this.fullHeight=a,f(G,function(a,b){var c=a._legendItemPos[1],d=Math.round(a.legendItem.getBBox().height),g=A.length;if(!g||c-A[g-1]>l&&(F||c)!==A[g-1])A.push(F||c),g++;a.pageIx=g-1;F&&(G[b-1].pageIx=g-1);b===G.length-1&&c+d-A[g-1]>l&&(A.push(c),a.pageIx=g);c!==F&&(F=c)}),n||(n=c.clipRect=d.clipRect(0,m,9999,0),c.contentGroup.clip(n)),g(l),q||(this.nav=q=d.g().attr({zIndex:1}).add(this.group), +this.up=d.symbol("triangle",0,0,r,r).on("click",function(){c.scroll(-1,p)}).add(q),this.pager=d.text("",15,10).addClass("highcharts-legend-navigation").css(t.style).add(q),this.down=d.symbol("triangle-down",0,0,r,r).on("click",function(){c.scroll(1,p)}).add(q)),c.scroll(0),a=b):q&&(g(),this.nav=q.destroy(),this.scrollGroup.attr({translateY:1}),this.clipHeight=0);return a},scroll:function(a,c){var b=this.pages,d=b.length;a=this.currentPage+a;var e=this.clipHeight,h=this.options.navigation,f=this.pager, +m=this.padding;a>d&&(a=d);0b&&(f=typeof a[0],"string"===f?e.name=a[0]:"number"===f&&(e.x=a[0]),k++);l=d.value;)d=h[++f];d&&d.color&&!this.options.color&&(this.color=d.color);return d},destroy:function(){var a=this.series.chart,h=a.hoverPoints,f;a.pointCount--;h&&(this.setState(),p(h,this),h.length||(a.hoverPoints=null));if(this===a.hoverPoint)this.onMouseOut();if(this.graphic||this.dataLabel)u(this),this.destroyElements();this.legendItem&&a.legend.destroyItem(this);for(f in this)this[f]=null},destroyElements:function(){for(var a=["graphic","dataLabel", +"dataLabelUpper","connector","shadowGroup"],h,f=6;f--;)h=a[f],this[h]&&(this[h]=this[h].destroy())},getLabelConfig:function(){return{x:this.category,y:this.y,color:this.color,colorIndex:this.colorIndex,key:this.name||this.category,series:this.series,point:this,percentage:this.percentage,total:this.total||this.stackTotal}},tooltipFormatter:function(a){var e=this.series,f=e.tooltipOptions,d=w(f.valueDecimals,""),c=f.valuePrefix||"",b=f.valueSuffix||"";D(e.pointArrayMap||["y"],function(e){e="{point."+ +e;if(c||b)a=a.replace(e+"}",c+e+"}"+b);a=a.replace(e+"}",e+":,."+d+"f}")});return l(a,{point:this,series:this.series})},firePointEvent:function(a,h,m){var d=this,c=this.series.options;(c.point.events[a]||d.options&&d.options.events&&d.options.events[a])&&this.importEvents();"click"===a&&c.allowPointSelect&&(m=function(a){d.select&&d.select(null,a.ctrlKey||a.metaKey||a.shiftKey)});f(this,a,h,m)},visible:!0}})(M);(function(a){var E=a.addEvent,D=a.animObject,H=a.arrayMax,p=a.arrayMin,f=a.correctFloat, +l=a.Date,r=a.defaultOptions,n=a.defaultPlotOptions,w=a.defined,u=a.each,e=a.erase,h=a.extend,m=a.fireEvent,d=a.grep,c=a.isArray,b=a.isNumber,k=a.isString,z=a.merge,B=a.objectEach,I=a.pick,x=a.removeEvent,K=a.splat,t=a.SVGElement,C=a.syncTimeout,N=a.win;a.Series=a.seriesType("line",null,{lineWidth:2,allowPointSelect:!1,showCheckbox:!1,animation:{duration:1E3},events:{},marker:{lineWidth:0,lineColor:"#ffffff",radius:4,states:{hover:{animation:{duration:50},enabled:!0,radiusPlus:2,lineWidthPlus:1},select:{fillColor:"#cccccc", +lineColor:"#000000",lineWidth:2}}},point:{events:{}},dataLabels:{align:"center",formatter:function(){return null===this.y?"":a.numberFormat(this.y,-1)},style:{fontSize:"11px",fontWeight:"bold",color:"contrast",textOutline:"1px contrast"},verticalAlign:"bottom",x:0,y:0,padding:5},cropThreshold:300,pointRange:0,softThreshold:!0,states:{hover:{animation:{duration:50},lineWidthPlus:1,marker:{},halo:{size:10,opacity:.25}},select:{marker:{}}},stickyTracking:!0,turboThreshold:1E3,findNearestPointBy:"x"}, +{isCartesian:!0,pointClass:a.Point,sorted:!0,requireSorting:!0,directTouch:!1,axisTypes:["xAxis","yAxis"],colorCounter:0,parallelArrays:["x","y"],coll:"series",init:function(a,b){var c=this,d,g=a.series,e;c.chart=a;c.options=b=c.setOptions(b);c.linkedSeries=[];c.bindAxes();h(c,{name:b.name,state:"",visible:!1!==b.visible,selected:!0===b.selected});d=b.events;B(d,function(a,b){E(c,b,a)});if(d&&d.click||b.point&&b.point.events&&b.point.events.click||b.allowPointSelect)a.runTrackerClick=!0;c.getColor(); +c.getSymbol();u(c.parallelArrays,function(a){c[a+"Data"]=[]});c.setData(b.data,!1);c.isCartesian&&(a.hasCartesianSeries=!0);g.length&&(e=g[g.length-1]);c._i=I(e&&e._i,-1)+1;a.orderSeries(this.insert(g))},insert:function(a){var c=this.options.index,d;if(b(c)){for(d=a.length;d--;)if(c>=I(a[d].options.index,a[d]._i)){a.splice(d+1,0,this);break}-1===d&&a.unshift(this);d+=1}else a.push(this);return I(d,a.length-1)},bindAxes:function(){var b=this,c=b.options,d=b.chart,e;u(b.axisTypes||[],function(g){u(d[g], +function(a){e=a.options;if(c[g]===e.index||void 0!==c[g]&&c[g]===e.id||void 0===c[g]&&0===e.index)b.insert(a.series),b[g]=a,a.isDirty=!0});b[g]||b.optionalAxis===g||a.error(18,!0)})},updateParallelArrays:function(a,c){var d=a.series,e=arguments,g=b(c)?function(b){var g="y"===b&&d.toYData?d.toYData(a):a[b];d[b+"Data"][c]=g}:function(a){Array.prototype[c].apply(d[a+"Data"],Array.prototype.slice.call(e,2))};u(d.parallelArrays,g)},autoIncrement:function(){var b=this.options,c=this.xIncrement,d,e=b.pointIntervalUnit, +g=0,c=I(c,b.pointStart,0);this.pointInterval=d=I(this.pointInterval,b.pointInterval,1);e&&(b=new l(c),"day"===e?b=+b[l.hcSetDate](b[l.hcGetDate]()+d):"month"===e?b=+b[l.hcSetMonth](b[l.hcGetMonth]()+d):"year"===e&&(b=+b[l.hcSetFullYear](b[l.hcGetFullYear]()+d)),l.hcHasTimeZone&&(g=a.getTZOffset(b)-a.getTZOffset(c)),d=b-c+g);this.xIncrement=c+d;return c},setOptions:function(a){var b=this.chart,c=b.options,d=c.plotOptions,g=(b.userOptions||{}).plotOptions||{},e=d[this.type];this.userOptions=a;b=z(e, +d.series,a);this.tooltipOptions=z(r.tooltip,r.plotOptions.series&&r.plotOptions.series.tooltip,r.plotOptions[this.type].tooltip,c.tooltip.userOptions,d.series&&d.series.tooltip,d[this.type].tooltip,a.tooltip);this.stickyTracking=I(a.stickyTracking,g[this.type]&&g[this.type].stickyTracking,g.series&&g.series.stickyTracking,this.tooltipOptions.shared&&!this.noSharedTooltip?!0:b.stickyTracking);null===e.marker&&delete b.marker;this.zoneAxis=b.zoneAxis;a=this.zones=(b.zones||[]).slice();!b.negativeColor&& +!b.negativeFillColor||b.zones||a.push({value:b[this.zoneAxis+"Threshold"]||b.threshold||0,className:"highcharts-negative",color:b.negativeColor,fillColor:b.negativeFillColor});a.length&&w(a[a.length-1].value)&&a.push({color:this.color,fillColor:this.fillColor});return b},getCyclic:function(a,b,c){var d,g=this.chart,e=this.userOptions,k=a+"Index",h=a+"Counter",q=c?c.length:I(g.options.chart[a+"Count"],g[a+"Count"]);b||(d=I(e[k],e["_"+k]),w(d)||(g.series.length||(g[h]=0),e["_"+k]=d=g[h]%q,g[h]+=1), +c&&(b=c[d]));void 0!==d&&(this[k]=d);this[a]=b},getColor:function(){this.options.colorByPoint?this.options.color=null:this.getCyclic("color",this.options.color||n[this.type].color,this.chart.options.colors)},getSymbol:function(){this.getCyclic("symbol",this.options.marker.symbol,this.chart.options.symbols)},drawLegendSymbol:a.LegendSymbolMixin.drawLineMarker,setData:function(d,e,h,f){var g=this,q=g.points,m=q&&q.length||0,l,A=g.options,t=g.chart,x=null,n=g.xAxis,p=A.turboThreshold,z=this.xData,F= +this.yData,C=(l=g.pointArrayMap)&&l.length;d=d||[];l=d.length;e=I(e,!0);if(!1!==f&&l&&m===l&&!g.cropped&&!g.hasGroupedData&&g.visible)u(d,function(a,b){q[b].update&&a!==A.data[b]&&q[b].update(a,!1,null,!1)});else{g.xIncrement=null;g.colorCounter=0;u(this.parallelArrays,function(a){g[a+"Data"].length=0});if(p&&l>p){for(h=0;null===x&&hf||this.forceCrop))if(c[e-1]z)c=[],d=[];else if(c[0]z)g=this.cropData(this.xData,this.yData,p,z),c=g.xData,d=g.yData,g=g.start,k=!0;for(f=c.length|| +1;--f;)e=x?m(c[f])-m(c[f-1]):c[f]-c[f-1],0e&&n&&(a.error(15),n=!1);this.cropped=k;this.cropStart=g;this.processedXData=c;this.processedYData=d;this.closestPointRange=h},cropData:function(a,b,c,d){var g=a.length,e=0,k=g,h=I(this.cropShoulder,1),f;for(f=0;f=c){e=Math.max(0,f-h);break}for(c=f;cd){k=c+h;break}return{xData:a.slice(e,k),yData:b.slice(e,k),start:e,end:k}},generatePoints:function(){var a=this.options,b=a.data,c=this.data,d,g=this.processedXData, +e=this.processedYData,k=this.pointClass,h=g.length,f=this.cropStart||0,m,l=this.hasGroupedData,a=a.keys,t,x=[],n;c||l||(c=[],c.length=b.length,c=this.data=c);a&&l&&(this.options.keys=!1);for(n=0;n=f&&(e[n-1]||l)<=q,m&&l)if(m=t.length)for(;m--;)"number"===typeof t[m]&&(g[h++]=t[m]);else g[h++]=t;this.dataMin= +p(g);this.dataMax=H(g)},translate:function(){this.processedXData||this.processData();this.generatePoints();var a=this.options,c=a.stacking,d=this.xAxis,e=d.categories,g=this.yAxis,k=this.points,h=k.length,m=!!this.modifyValue,l=a.pointPlacement,t="between"===l||b(l),n=a.threshold,x=a.startFromThreshold?n:0,p,z,C,r,u=Number.MAX_VALUE;"between"===l&&(l=.5);b(l)&&(l*=I(a.pointRange||d.pointRange));for(a=0;a=K&&(B.isNull=!0);B.plotX=p=f(Math.min(Math.max(-1E5,d.translate(N,0,0,0,1,l,"flags"===this.type)),1E5));c&&this.visible&&!B.isNull&&D&&D[N]&&(r=this.getStackIndicator(r,N,this.index),E=D[N],K=E.points[r.key],z=K[0],K=K[1],z===x&&r.key===D[N].base&&(z=I(n,g.min)),g.positiveValuesOnly&&0>=z&&(z=null),B.total=B.stackTotal=E.total,B.percentage=E.total&&B.y/E.total*100,B.stackY=K,E.setOffset(this.pointXOffset||0,this.barW||0));B.yBottom=w(z)?g.translate(z,0,1,0,1): +null;m&&(K=this.modifyValue(K,B));B.plotY=z="number"===typeof K&&Infinity!==K?Math.min(Math.max(-1E5,g.translate(K,0,1,0,1)),1E5):void 0;B.isInside=void 0!==z&&0<=z&&z<=g.len&&0<=p&&p<=d.len;B.clientX=t?f(d.translate(N,0,0,0,1,l)):p;B.negative=B.y<(n||0);B.category=e&&void 0!==e[B.x]?e[B.x]:B.x;B.isNull||(void 0!==C&&(u=Math.min(u,Math.abs(p-C))),C=p);B.zone=this.zones.length&&B.getZone()}this.closestPointRangePx=u},getValidPoints:function(a,b){var c=this.chart;return d(a||this.points||[],function(a){return b&& +!c.isInsidePlot(a.plotX,a.plotY,c.inverted)?!1:!a.isNull})},setClip:function(a){var b=this.chart,c=this.options,d=b.renderer,g=b.inverted,e=this.clipBox,k=e||b.clipBox,h=this.sharedClipKey||["_sharedClip",a&&a.duration,a&&a.easing,k.height,c.xAxis,c.yAxis].join(),f=b[h],q=b[h+"m"];f||(a&&(k.width=0,g&&(k.x=b.plotSizeX),b[h+"m"]=q=d.clipRect(g?b.plotSizeX+99:-99,g?-b.plotLeft:-b.plotTop,99,g?b.chartWidth:b.chartHeight)),b[h]=f=d.clipRect(k),f.count={length:0});a&&!f.count[this.index]&&(f.count[this.index]= +!0,f.count.length+=1);!1!==c.clip&&(this.group.clip(a||e?f:b.clipRect),this.markerGroup.clip(q),this.sharedClipKey=h);a||(f.count[this.index]&&(delete f.count[this.index],--f.count.length),0===f.count.length&&h&&b[h]&&(e||(b[h]=b[h].destroy()),b[h+"m"]&&(b[h+"m"]=b[h+"m"].destroy())))},animate:function(a){var b=this.chart,c=D(this.options.animation),d;a?this.setClip(c):(d=this.sharedClipKey,(a=b[d])&&a.animate({width:b.plotSizeX,x:0},c),b[d+"m"]&&b[d+"m"].animate({width:b.plotSizeX+99,x:0},c),this.animate= +null)},afterAnimate:function(){this.setClip();m(this,"afterAnimate");this.finishedAnimating=!0},drawPoints:function(){var a=this.points,b=this.chart,c,d,g,e,k=this.options.marker,h,f,l,m=this[this.specialGroup]||this.markerGroup,t,n=I(k.enabled,this.xAxis.isRadial?!0:null,this.closestPointRangePx>=2*k.radius);if(!1!==k.enabled||this._hasPointMarkers)for(c=0;ce&&b.shadow));k&&(k.startX=c.xMap,k.isArea=c.isArea)})}, +applyZones:function(){var a=this,b=this.chart,c=b.renderer,d=this.zones,e,k,h=this.clips||[],f,m=this.graph,l=this.area,t=Math.max(b.chartWidth,b.chartHeight),n=this[(this.zoneAxis||"y")+"Axis"],x,p,z=b.inverted,C,r,w,B,K=!1;d.length&&(m||l)&&n&&void 0!==n.min&&(p=n.reversed,C=n.horiz,m&&m.hide(),l&&l.hide(),x=n.getExtremes(),u(d,function(d,g){e=p?C?b.plotWidth:0:C?0:n.toPixels(x.min);e=Math.min(Math.max(I(k,e),0),t);k=Math.min(Math.max(Math.round(n.toPixels(I(d.value,x.max),!0)),0),t);K&&(e=k=n.toPixels(x.max)); +r=Math.abs(e-k);w=Math.min(e,k);B=Math.max(e,k);n.isXAxis?(f={x:z?B:w,y:0,width:r,height:t},C||(f.x=b.plotHeight-f.x)):(f={x:0,y:z?B:w,width:t,height:r},C&&(f.y=b.plotWidth-f.y));z&&c.isVML&&(f=n.isXAxis?{x:0,y:p?w:B,height:f.width,width:b.chartWidth}:{x:f.y-b.plotLeft-b.spacingBox.x,y:0,width:f.height,height:b.chartHeight});h[g]?h[g].animate(f):(h[g]=c.clipRect(f),m&&a["zone-graph-"+g].clip(h[g]),l&&a["zone-area-"+g].clip(h[g]));K=d.value>x.max}),this.clips=h)},invertGroups:function(a){function b(){u(["group", +"markerGroup"],function(b){c[b]&&(d.renderer.isVML&&c[b].attr({width:c.yAxis.len,height:c.xAxis.len}),c[b].width=c.yAxis.len,c[b].height=c.xAxis.len,c[b].invert(a))})}var c=this,d=c.chart,e;c.xAxis&&(e=E(d,"resize",b),E(c,"destroy",e),b(a),c.invertGroups=b)},plotGroup:function(a,b,c,d,e){var g=this[a],k=!g;k&&(this[a]=g=this.chart.renderer.g().attr({zIndex:d||.1}).add(e));g.addClass("highcharts-"+b+" highcharts-series-"+this.index+" highcharts-"+this.type+"-series "+(w(this.colorIndex)?"highcharts-color-"+ +this.colorIndex+" ":"")+(this.options.className||"")+(g.hasClass("highcharts-tracker")?" highcharts-tracker":""),!0);g.attr({visibility:c})[k?"attr":"animate"](this.getPlotBox());return g},getPlotBox:function(){var a=this.chart,b=this.xAxis,c=this.yAxis;a.inverted&&(b=c,c=this.xAxis);return{translateX:b?b.left:a.plotLeft,translateY:c?c.top:a.plotTop,scaleX:1,scaleY:1}},render:function(){var a=this,b=a.chart,c,d=a.options,e=!!a.animate&&b.renderer.isSVG&&D(d.animation).duration,k=a.visible?"inherit": +"hidden",h=d.zIndex,f=a.hasRendered,m=b.seriesGroup,l=b.inverted;c=a.plotGroup("group","series",k,h,m);a.markerGroup=a.plotGroup("markerGroup","markers",k,h,m);e&&a.animate(!0);c.inverted=a.isCartesian?l:!1;a.drawGraph&&(a.drawGraph(),a.applyZones());a.drawDataLabels&&a.drawDataLabels();a.visible&&a.drawPoints();a.drawTracker&&!1!==a.options.enableMouseTracking&&a.drawTracker();a.invertGroups(l);!1===d.clip||a.sharedClipKey||f||c.clip(b.clipRect);e&&a.animate();f||(a.animationTimeout=C(function(){a.afterAnimate()}, +e));a.isDirty=!1;a.hasRendered=!0},redraw:function(){var a=this.chart,b=this.isDirty||this.isDirtyData,c=this.group,d=this.xAxis,e=this.yAxis;c&&(a.inverted&&c.attr({width:a.plotWidth,height:a.plotHeight}),c.animate({translateX:I(d&&d.left,a.plotLeft),translateY:I(e&&e.top,a.plotTop)}));this.translate();this.render();b&&delete this.kdTree},kdAxisArray:["clientX","plotY"],searchPoint:function(a,b){var c=this.xAxis,d=this.yAxis,e=this.chart.inverted;return this.searchKDTree({clientX:e?c.len-a.chartY+ +c.pos:a.chartX-c.pos,plotY:e?d.len-a.chartX+d.pos:a.chartY-d.pos},b)},buildKDTree:function(){function a(c,d,e){var g,k;if(k=c&&c.length)return g=b.kdAxisArray[d%e],c.sort(function(a,b){return a[g]-b[g]}),k=Math.floor(k/2),{point:c[k],left:a(c.slice(0,k),d+1,e),right:a(c.slice(k+1),d+1,e)}}this.buildingKdTree=!0;var b=this,c=-1l?"left":"right";t=0>l?"right":"left";b[q]&&(q=c(a,b[q],g+1,f),n=q[h]x;)q--;this.updateParallelArrays(m,"splice",q,0,0);this.updateParallelArrays(m,q);g&&m.name&&(g[x]=m.name);l.splice(q,0,a);n&&(this.data.splice(q,0,null),this.processData());"point"===e.legendType&&this.generatePoints();c&&(h[0]&&h[0].remove?h[0].remove(!1):(h.shift(),this.updateParallelArrays(m,"shift"),l.shift()));this.isDirtyData=this.isDirty=!0;b&&f.redraw(d)},removePoint:function(a,b,c){var d=this,e=d.data,h=e[a],f=d.points,g=d.chart,l=function(){f&&f.length===e.length&& +f.splice(a,1);e.splice(a,1);d.options.data.splice(a,1);d.updateParallelArrays(h||{series:d},"splice",a,1);h&&h.destroy();d.isDirty=!0;d.isDirtyData=!0;b&&g.redraw()};x(c,g);b=k(b,!0);h?h.firePointEvent("remove",null,l):l()},remove:function(a,b,c){function d(){e.destroy();h.isDirtyLegend=h.isDirtyBox=!0;h.linkSeries();k(a,!0)&&h.redraw(b)}var e=this,h=e.chart;!1!==c?u(e,"remove",null,d):d()},update:function(a,b){var d=this,e=d.chart,h=d.userOptions,f=d.oldType||d.type,l=a.type||h.type||e.options.chart.type, +g=I[f].prototype,m,n=["group","markerGroup","dataLabelsGroup"],t=["navigatorSeries","baseSeries"],x=d.finishedAnimating&&{animation:!1};if(Object.keys&&"data"===Object.keys(a).toString())return this.setData(a.data,b);t=n.concat(t);r(t,function(a){t[a]=d[a];delete d[a]});a=c(h,x,{index:d.index,pointStart:d.xData[0]},{data:d.options.data},a);d.remove(!1,null,!1);for(m in g)d[m]=void 0;w(d,I[l||f].prototype);r(t,function(a){d[a]=t[a]});d.init(e,a);a.zIndex!==h.zIndex&&r(n,function(b){d[b]&&d[b].attr({zIndex:a.zIndex})}); +d.oldType=f;e.linkSeries();k(b,!0)&&e.redraw(!1)}});w(H.prototype,{update:function(a,b){var d=this.chart;a=d.options[this.coll][this.options.index]=c(this.userOptions,a);this.destroy(!0);this.init(d,w(a,{events:void 0}));d.isDirtyBox=!0;k(b,!0)&&d.redraw()},remove:function(a){for(var b=this.chart,c=this.coll,e=this.series,h=e.length;h--;)e[h]&&e[h].remove(!1);n(b.axes,this);n(b[c],this);d(b.options[c])?b.options[c].splice(this.options.index,1):delete b.options[c];r(b[c],function(a,b){a.options.index= +b});this.destroy();b.isDirtyBox=!0;k(a,!0)&&b.redraw()},setTitle:function(a,b){this.update({title:a},b)},setCategories:function(a,b){this.update({categories:a},b)}})})(M);(function(a){var E=a.color,D=a.each,H=a.map,p=a.pick,f=a.Series,l=a.seriesType;l("area","line",{softThreshold:!1,threshold:0},{singleStacks:!1,getStackPoints:function(f){var l=[],r=[],u=this.xAxis,e=this.yAxis,h=e.stacks[this.stackKey],m={},d=this.index,c=e.series,b=c.length,k,z=p(e.options.reversedStacks,!0)?1:-1,B;f=f||this.points; +if(this.options.stacking){for(B=0;Ba&&w>l?(w=Math.max(a,l),e=2*l-w):wp&&e>l?(e=Math.max(p,l),w=2*l-e):e=Math.abs(h)&&.5a.closestPointRange*a.xAxis.transA,d=a.borderWidth=r(f.borderWidth,d?0:1),c=a.yAxis,b=f.threshold,k=a.translatedThreshold=c.getThreshold(b),l=r(f.minPointLength,5),p=a.getColumnMetrics(),u=p.width,x=a.barW=Math.max(u,1+2*d),w=a.pointXOffset=p.offset;h.inverted&&(k-=.5);f.pointPadding&&(x=Math.ceil(x));n.prototype.translate.apply(a);H(a.points,function(d){var e=r(d.yBottom,k),f=999+Math.abs(e),f=Math.min(Math.max(-f,d.plotY),c.len+f),m=d.plotX+w,n=x,t=Math.min(f,e),p,g=Math.max(f,e)-t;l&& +Math.abs(g)l?e-l:k-(p?l:0));d.barX=m;d.pointWidth=u;d.tooltipPos=h.inverted?[c.len+c.pos-h.plotLeft-f,a.xAxis.len-m-n/2,g]:[m+n/2,f+c.pos-h.plotTop,g];d.shapeType="rect";d.shapeArgs=a.crispCol.apply(a,d.isNull?[m,k,n,0]:[m,t,n,g])})},getSymbol:a.noop,drawLegendSymbol:a.LegendSymbolMixin.drawRectangle,drawGraph:function(){this.group[this.dense?"addClass":"removeClass"]("highcharts-dense-data")}, +pointAttribs:function(a,f){var e=this.options,d,c=this.pointAttrToOptions||{};d=c.stroke||"borderColor";var b=c["stroke-width"]||"borderWidth",k=a&&a.color||this.color,h=a&&a[d]||e[d]||this.color||k,n=a&&a[b]||e[b]||this[b]||0,c=e.dashStyle;a&&this.zones.length&&(k=a.getZone(),k=a.options.color||k&&k.color||this.color);f&&(a=l(e.states[f],a.options.states&&a.options.states[f]||{}),f=a.brightness,k=a.color||void 0!==f&&D(k).brighten(a.brightness).get()||k,h=a[d]||h,n=a[b]||n,c=a.dashStyle||c);d={fill:k, +stroke:h,"stroke-width":n};c&&(d.dashstyle=c);return d},drawPoints:function(){var a=this,h=this.chart,m=a.options,d=h.renderer,c=m.animationLimit||250,b;H(a.points,function(e){var k=e.graphic;if(f(e.plotY)&&null!==e.y){b=e.shapeArgs;if(k)k[h.pointCounte;++e)h=w[e],a=2>e||2===e&&/%$/.test(h),w[e]=p(h,[n,l,u,w[2]][e])+(a?r:0);w[3]>w[2]&&(w[3]=w[2]);return w},getStartAndEndRadians:function(a,l){a=D(a)?a:0;l=D(l)&&l>a&&360>l-a?l:a+360;return{start:E*(a+-90),end:E*(l+-90)}}}})(M);(function(a){var E=a.addEvent,D=a.CenteredSeriesMixin,H=a.defined,p=a.each,f=a.extend,l=D.getStartAndEndRadians,r=a.inArray,n=a.noop,w=a.pick,u=a.Point,e=a.Series,h=a.seriesType,m=a.setAnimation;h("pie","line",{center:[null,null],clip:!1,colorByPoint:!0,dataLabels:{distance:30, +enabled:!0,formatter:function(){return this.point.isNull?void 0:this.point.name},x:0},ignoreHiddenPoint:!0,legendType:"point",marker:null,size:null,showInLegend:!1,slicedOffset:10,stickyTracking:!1,tooltip:{followPointer:!0},borderColor:"#ffffff",borderWidth:1,states:{hover:{brightness:.1,shadow:!1}}},{isCartesian:!1,requireSorting:!1,directTouch:!0,noSharedTooltip:!0,trackerGroups:["group","dataLabelsGroup"],axisTypes:[],pointAttribs:a.seriesTypes.column.prototype.pointAttribs,animate:function(a){var c= +this,b=c.points,d=c.startAngleRad;a||(p(b,function(a){var b=a.graphic,e=a.shapeArgs;b&&(b.attr({r:a.startR||c.center[3]/2,start:d,end:d}),b.animate({r:e.r,start:e.start,end:e.end},c.options.animation))}),c.animate=null)},updateTotals:function(){var a,c=0,b=this.points,e=b.length,f,h=this.options.ignoreHiddenPoint;for(a=0;a1.5*Math.PI?m-=2*Math.PI:m<-Math.PI/2&&(m+=2*Math.PI);G.slicedTranslation={translateX:Math.round(Math.cos(m)*d),translateY:Math.round(Math.sin(m)*d)};h=Math.cos(m)*a[2]/ +2;u=Math.sin(m)*a[2]/2;G.tooltipPos=[a[0]+.7*h,a[1]+.7*u];G.half=m<-Math.PI/2||m>Math.PI/2?1:0;G.angle=m;f=Math.min(e,G.labelDistance/5);G.labelPos=[a[0]+h+Math.cos(m)*G.labelDistance,a[1]+u+Math.sin(m)*G.labelDistance,a[0]+h+Math.cos(m)*f,a[1]+u+Math.sin(m)*f,a[0]+h,a[1]+u,0>G.labelDistance?"center":G.half?"right":"left",m]}},drawGraph:null,drawPoints:function(){var a=this,c=a.chart.renderer,b,e,h,l,m=a.options.shadow;m&&!a.shadowGroup&&(a.shadowGroup=c.g("shadow").add(a.group));p(a.points,function(d){e= +d.graphic;if(d.isNull)e&&(d.graphic=e.destroy());else{l=d.shapeArgs;b=d.getTranslate();var k=d.shadowGroup;m&&!k&&(k=d.shadowGroup=c.g("shadow").add(a.shadowGroup));k&&k.attr(b);h=a.pointAttribs(d,d.selected&&"select");e?e.setRadialReference(a.center).attr(h).animate(f(l,b)):(d.graphic=e=c[d.shapeType](l).setRadialReference(a.center).attr(b).add(a.group),d.visible||e.attr({visibility:"hidden"}),e.attr(h).attr({"stroke-linejoin":"round"}).shadow(m,k));e.addClass(d.getClassName())}})},searchPoint:n, +sortByAngle:function(a,c){a.sort(function(a,d){return void 0!==a.angle&&(d.angle-a.angle)*c})},drawLegendSymbol:a.LegendSymbolMixin.drawRectangle,getCenter:D.getCenter,getSymbol:n},{init:function(){u.prototype.init.apply(this,arguments);var a=this,c;a.name=w(a.name,"Slice");c=function(b){a.slice("select"===b.type)};E(a,"select",c);E(a,"unselect",c);return a},isValid:function(){return a.isNumber(this.y,!0)&&0<=this.y},setVisible:function(a,c){var b=this,d=b.series,e=d.chart,f=d.options.ignoreHiddenPoint; +c=w(c,f);a!==b.visible&&(b.visible=b.options.visible=a=void 0===a?!b.visible:a,d.options.data[r(b,d.data)]=b.options,p(["graphic","dataLabel","connector","shadowGroup"],function(c){if(b[c])b[c][a?"show":"hide"](!0)}),b.legendItem&&e.legend.colorizeItem(b,a),a||"hover"!==b.state||b.setState(""),f&&(d.isDirty=!0),c&&e.redraw())},slice:function(a,c,b){var d=this.series;m(b,d.chart);w(c,!0);this.sliced=this.options.sliced=H(a)?a:!this.sliced;d.options.data[r(this,d.data)]=this.options;this.graphic.animate(this.getTranslate()); +this.shadowGroup&&this.shadowGroup.animate(this.getTranslate())},getTranslate:function(){return this.sliced?this.slicedTranslation:{translateX:0,translateY:0}},haloPath:function(a){var c=this.shapeArgs;return this.sliced||!this.visible?[]:this.series.chart.renderer.symbols.arc(c.x,c.y,c.r+a,c.r+a,{innerR:this.shapeArgs.r-1,start:c.start,end:c.end})}})})(M);(function(a){var E=a.addEvent,D=a.arrayMax,H=a.defined,p=a.each,f=a.extend,l=a.format,r=a.map,n=a.merge,w=a.noop,u=a.pick,e=a.relativeLength,h= +a.Series,m=a.seriesTypes,d=a.stableSort;a.distribute=function(a,b){function c(a,b){return a.target-b.target}var e,f=!0,h=a,l=[],m;m=0;for(e=a.length;e--;)m+=a[e].size;if(m>b){d(a,function(a,b){return(b.rank||0)-(a.rank||0)});for(m=e=0;m<=b;)m+=a[e].size,e++;l=a.splice(e-1,a.length)}d(a,c);for(a=r(a,function(a){return{size:a.size,targets:[a.target],align:u(a.align,.5)}});f;){for(e=a.length;e--;)f=a[e],m=(Math.min.apply(0,f.targets)+Math.max.apply(0,f.targets))/2,f.pos=Math.min(Math.max(0,m-f.size* +f.align),b-f.size);e=a.length;for(f=!1;e--;)0a[e].pos&&(a[e-1].size+=a[e].size,a[e-1].targets=a[e-1].targets.concat(a[e].targets),a[e-1].align=.5,a[e-1].pos+a[e-1].size>b&&(a[e-1].pos=b-a[e-1].size),a.splice(e,1),f=!0)}e=0;p(a,function(a){var b=0;p(a.targets,function(){h[e].pos=a.pos+b;b+=h[e].size;e++})});h.push.apply(h,l);d(h,c)};h.prototype.drawDataLabels=function(){function c(a,b){var c=b.filter;return c?(b=c.operator,a=a[c.property],c=c.value,"\x3e"===b&&a>c||"\x3c"=== +b&&a=c||"\x3c\x3d"===b&&a<=c||"\x3d\x3d"===b&&a==c||"\x3d\x3d\x3d"===b&&a===c?!0:!1):!0}var b=this,d=b.options,e=d.dataLabels,f=b.points,h,m,r=b.hasRendered||0,t,w,D=u(e.defer,!!d.animation),q=b.chart.renderer;if(e.enabled||b._hasPointLabels)b.dlProcessOptions&&b.dlProcessOptions(e),w=b.plotGroup("dataLabelsGroup","data-labels",D&&!r?"hidden":"visible",e.zIndex||6),D&&(w.attr({opacity:+r}),r||E(b,"afterAnimate",function(){b.visible&&w.show(!0);w[d.animation?"animate":"attr"]({opacity:1}, +{duration:200})})),m=e,p(f,function(f){var k,p=f.dataLabel,g,x,r=f.connector,z=!p,C;h=f.dlOptions||f.options&&f.options.dataLabels;(k=u(h&&h.enabled,m.enabled)&&!f.isNull)&&(k=!0===c(f,h||e));k&&(e=n(m,h),g=f.getLabelConfig(),C=e[f.formatPrefix+"Format"]||e.format,t=H(C)?l(C,g):(e[f.formatPrefix+"Formatter"]||e.formatter).call(g,e),C=e.style,g=e.rotation,C.color=u(e.color,C.color,b.color,"#000000"),"contrast"===C.color&&(f.contrastColor=q.getContrast(f.color||b.color),C.color=e.inside||0>u(f.labelDistance, +e.distance)||d.stacking?f.contrastColor:"#000000"),d.cursor&&(C.cursor=d.cursor),x={fill:e.backgroundColor,stroke:e.borderColor,"stroke-width":e.borderWidth,r:e.borderRadius||0,rotation:g,padding:e.padding,zIndex:1},a.objectEach(x,function(a,b){void 0===a&&delete x[b]}));!p||k&&H(t)?k&&H(t)&&(p?x.text=t:(p=f.dataLabel=g?q.text(t,0,-9999).addClass("highcharts-data-label"):q.label(t,0,-9999,e.shape,null,null,e.useHTML,null,"data-label"),p.addClass(" highcharts-data-label-color-"+f.colorIndex+" "+(e.className|| +"")+(e.useHTML?"highcharts-tracker":""))),p.attr(x),p.css(C).shadow(e.shadow),p.added||p.add(w),b.alignDataLabel(f,p,e,null,z)):(f.dataLabel=p=p.destroy(),r&&(f.connector=r.destroy()))})};h.prototype.alignDataLabel=function(a,b,d,e,h){var c=this.chart,k=c.inverted,l=u(a.dlBox&&a.dlBox.centerX,a.plotX,-9999),m=u(a.plotY,-9999),n=b.getBBox(),p,q=d.rotation,r=d.align,w=this.visible&&(a.series.forceDL||c.isInsidePlot(l,Math.round(m),k)||e&&c.isInsidePlot(l,k?e.x+1:e.y+e.height-1,k)),z="justify"===u(d.overflow, +"justify");if(w&&(p=d.style.fontSize,p=c.renderer.fontMetrics(p,b).b,e=f({x:k?this.yAxis.len-m:l,y:Math.round(k?this.xAxis.len-l:m),width:0,height:0},e),f(d,{width:n.width,height:n.height}),q?(z=!1,l=c.renderer.rotCorr(p,q),l={x:e.x+d.x+e.width/2+l.x,y:e.y+d.y+{top:0,middle:.5,bottom:1}[d.verticalAlign]*e.height},b[h?"attr":"animate"](l).attr({align:r}),m=(q+720)%360,m=180m,"left"===r?l.y-=m?n.height:0:"center"===r?(l.x-=n.width/2,l.y-=n.height/2):"right"===r&&(l.x-=n.width,l.y-=m?0:n.height)): +(b.align(d,null,e),l=b.alignAttr),z?a.isLabelJustified=this.justifyDataLabel(b,d,l,n,e,h):u(d.crop,!0)&&(w=c.isInsidePlot(l.x,l.y)&&c.isInsidePlot(l.x+n.width,l.y+n.height)),d.shape&&!q))b[h?"attr":"animate"]({anchorX:k?c.plotWidth-a.plotY:a.plotX,anchorY:k?c.plotHeight-a.plotX:a.plotY});w||(b.attr({y:-9999}),b.placed=!1)};h.prototype.justifyDataLabel=function(a,b,d,e,f,h){var c=this.chart,k=b.align,l=b.verticalAlign,m,n,p=a.box?0:a.padding||0;m=d.x+p;0>m&&("right"===k?b.align="left":b.x=-m,n=!0); +m=d.x+e.width-p;m>c.plotWidth&&("left"===k?b.align="right":b.x=c.plotWidth-m,n=!0);m=d.y+p;0>m&&("bottom"===l?b.verticalAlign="top":b.y=-m,n=!0);m=d.y+e.height-p;m>c.plotHeight&&("top"===l?b.verticalAlign="bottom":b.y=c.plotHeight-m,n=!0);n&&(a.placed=!h,a.align(b,null,f));return n};m.pie&&(m.pie.prototype.drawDataLabels=function(){var c=this,b=c.data,d,e=c.chart,f=c.options.dataLabels,l=u(f.connectorPadding,10),m=u(f.connectorWidth,1),n=e.plotWidth,t=e.plotHeight,r,w=c.center,q=w[2]/2,A=w[1],F,G, +g,v,E=[[],[]],L,P,J,M,y=[0,0,0,0];c.visible&&(f.enabled||c._hasPointLabels)&&(p(b,function(a){a.dataLabel&&a.visible&&a.dataLabel.shortened&&(a.dataLabel.attr({width:"auto"}).css({width:"auto",textOverflow:"clip"}),a.dataLabel.shortened=!1)}),h.prototype.drawDataLabels.apply(c),p(b,function(a){a.dataLabel&&a.visible&&(E[a.half].push(a),a.dataLabel._pos=null)}),p(E,function(b,h){var k,m,x=b.length,r=[],z;if(x)for(c.sortByAngle(b,h-.5),0d.bottom-2?k:P,h,d),F._attr={visibility:J,align:g[6]},F._pos={x:L+f.x+({left:l,right:-l}[g[6]]||0),y:P+f.y-10},g.x=L,g.y=P,u(f.crop,!0)&&(G=F.getBBox().width,k=null,L-Gn-l&&(k=Math.round(L+G-n+l),y[1]=Math.max(k,y[1])),0>P-v/2?y[0]=Math.max(Math.round(-P+v/2),y[0]):P+v/2>t&&(y[2]=Math.max(Math.round(P+v/2-t),y[2])),F.sideOverflow=k)}),0===D(y)||this.verifyDataLabelOverflow(y))&&(this.placeDataLabels(), +m&&p(this.points,function(a){var b;r=a.connector;if((F=a.dataLabel)&&F._pos&&a.visible&&0u(this.translatedThreshold,k.yAxis.len)),p=u(d.inside,!!this.options.stacking);l&&(e=n(l),0>e.y&&(e.height+=e.y,e.y=0),l=e.y+e.height-k.yAxis.len,0a+c||e+hb+d||f+lthis.pointCount))},pan:function(a,b){var c=this,d=c.hoverPoints,e;d&&r(d,function(a){a.setState()});r("xy"===b?[1,0]:[1],function(b){b= +c[b?"xAxis":"yAxis"][0];var d=b.horiz,f=a[d?"chartX":"chartY"],d=d?"mouseDownX":"mouseDownY",h=c[d],g=(b.pointRange||0)/2,k=b.getExtremes(),l=b.toValue(h-f,!0)+g,m=b.toValue(h+b.len-f,!0)-g,n=m=l(n.minWidth,0)&&this.chartHeight>=l(n.minHeight,0)}).call(this)&&f.push(a._id)};E.prototype.currentOptions=function(l){function n(e,h,l,d){var c;a.objectEach(e,function(a,e){if(!d&&-1 Date: Fri, 4 Jan 2019 05:15:13 +0000 Subject: [PATCH 4/5] Auto corrected by following Format Javascript Code --- app/assets/javascripts/highcharts.js | 11651 ++++++++++++++++++++++++- 1 file changed, 11269 insertions(+), 382 deletions(-) diff --git a/app/assets/javascripts/highcharts.js b/app/assets/javascripts/highcharts.js index 9554ef58b..c7136bafe 100644 --- a/app/assets/javascripts/highcharts.js +++ b/app/assets/javascripts/highcharts.js @@ -5,385 +5,11272 @@ License: www.highcharts.com/license */ -(function(S,M){"object"===typeof module&&module.exports?module.exports=S.document?M(S):M:S.Highcharts=M(S)})("undefined"!==typeof window?window:this,function(S){var M=function(){var a="undefined"===typeof S?window:S,E=a.document,D=a.navigator&&a.navigator.userAgent||"",H=E&&E.createElementNS&&!!E.createElementNS("http://www.w3.org/2000/svg","svg").createSVGRect,p=/(edge|msie|trident)/i.test(D)&&!a.opera,f=/Firefox/.test(D),l=f&&4>parseInt(D.split("Firefox/")[1],10);return a.Highcharts?a.Highcharts.error(16, -!0):{product:"Highcharts",version:"6.0.4",deg2rad:2*Math.PI/360,doc:E,hasBidiBug:l,hasTouch:E&&void 0!==E.documentElement.ontouchstart,isMS:p,isWebKit:/AppleWebKit/.test(D),isFirefox:f,isTouchDevice:/(Mobile|Android|Windows Phone)/.test(D),SVG_NS:"http://www.w3.org/2000/svg",chartCount:0,seriesTypes:{},symbolSizes:{},svg:H,win:a,marginNames:["plotTop","marginRight","marginBottom","plotLeft"],noop:function(){},charts:[]}}();(function(a){a.timers=[];var E=a.charts,D=a.doc,H=a.win;a.error=function(p, -f){p=a.isNumber(p)?"Highcharts error #"+p+": www.highcharts.com/errors/"+p:p;if(f)throw Error(p);H.console&&console.log(p)};a.Fx=function(a,f,l){this.options=f;this.elem=a;this.prop=l};a.Fx.prototype={dSetter:function(){var a=this.paths[0],f=this.paths[1],l=[],r=this.now,n=a.length,w;if(1===r)l=this.toD;else if(n===f.length&&1>r)for(;n--;)w=parseFloat(a[n]),l[n]=isNaN(w)?f[n]:r*parseFloat(f[n]-w)+w;else l=f;this.elem.attr("d",l,null,!0)},update:function(){var a=this.elem,f=this.prop,l=this.now,r= -this.options.step;if(this[f+"Setter"])this[f+"Setter"]();else a.attr?a.element&&a.attr(f,l,null,!0):a.style[f]=l+this.unit;r&&r.call(a,l,this)},run:function(p,f,l){var r=this,n=r.options,w=function(a){return w.stopped?!1:r.step(a)},u=H.requestAnimationFrame||function(a){setTimeout(a,13)},e=function(){for(var h=0;h=u+this.startTime?(this.now=this.end,this.pos=1,this.update(),l=e[this.prop]=!0,a.objectEach(e,function(a){!0!==a&&(l=!1)}),l&&w&&w.call(n),p=!1):(this.pos=r.easing((f-this.startTime)/u),this.now=this.start+(this.end- -this.start)*this.pos,this.update(),p=!0);return p},initPath:function(p,f,l){function r(a){var b,c;for(k=a.length;k--;)b="M"===a[k]||"L"===a[k],c=/[a-zA-Z]/.test(a[k+3]),b&&c&&a.splice(k+1,0,a[k+1],a[k+2],a[k+1],a[k+2])}function n(a,b){for(;a.lengtha&&-Infinityw?"AM":"PM",P:12>w?"am":"pm",S:k(n.getSeconds()),L:k(Math.round(f%1E3),3)},a.dateFormats);a.objectEach(r,function(a,b){for(;-1!==p.indexOf("%"+b);)p=p.replace("%"+b,"function"===typeof a?a(f):a)});return l?p.substr(0,1).toUpperCase()+p.substr(1):p};a.formatSingle=function(p,f){var l=/\.([0-9])/,r=a.defaultOptions.lang;/f$/.test(p)?(l=(l=p.match(l))?l[1]:-1,null!==f&&(f=a.numberFormat(f,l,r.decimalPoint,-1=l&&(f=[1/l])));for(r=0;r=p||!n&&w<=(f[r]+(f[r+1]||f[r]))/2);r++);return u=a.correctFloat(u*l,-Math.round(Math.log(.001)/Math.LN10))};a.stableSort=function(a,f){var l=a.length,p,n;for(n=0;nl&&(l=a[f]);return l};a.destroyObjectProperties=function(p,f){a.objectEach(p,function(a,r){a&&a!==f&&a.destroy&&a.destroy();delete p[r]})};a.discardElement=function(p){var f=a.garbageBin;f||(f=a.createElement("div"));p&&f.appendChild(p);f.innerHTML=""};a.correctFloat=function(a,f){return parseFloat(a.toPrecision(f||14))};a.setAnimation=function(p,f){f.renderer.globalAnimation=a.pick(p,f.options.chart.animation, -!0)};a.animObject=function(p){return a.isObject(p)?a.merge(p):{duration:p?500:0}};a.timeUnits={millisecond:1,second:1E3,minute:6E4,hour:36E5,day:864E5,week:6048E5,month:24192E5,year:314496E5};a.numberFormat=function(p,f,l,r){p=+p||0;f=+f;var n=a.defaultOptions.lang,w=(p.toString().split(".")[1]||"").split("e")[0].length,u,e,h=p.toString().split("e");-1===f?f=Math.min(w,20):a.isNumber(f)?f&&h[1]&&0>h[1]&&(u=f+ +h[1],0<=u?(h[0]=(+h[0]).toExponential(u).split("e")[0],f=u):(h[0]=h[0].split(".")[0]||0, -p=20>f?(h[0]*Math.pow(10,h[1])).toFixed(f):0,h[1]=0)):f=2;e=(Math.abs(h[1]?h[0]:p)+Math.pow(10,-Math.max(f,w)-1)).toFixed(f);w=String(a.pInt(e));u=3p?"-":"")+(u?w.substr(0,u)+r:"");p+=w.substr(u).replace(/(\d{3})(?=\d)/g,"$1"+r);f&&(p+=l+e.slice(-f));h[1]&&0!==+p&&(p+="e"+h[1]);return p};Math.easeInOutSine=function(a){return-.5*(Math.cos(Math.PI*a)-1)};a.getStyle=function(p,f,l){if("width"===f)return Math.min(p.offsetWidth, -p.scrollWidth)-a.getStyle(p,"padding-left")-a.getStyle(p,"padding-right");if("height"===f)return Math.min(p.offsetHeight,p.scrollHeight)-a.getStyle(p,"padding-top")-a.getStyle(p,"padding-bottom");H.getComputedStyle||a.error(27,!0);if(p=H.getComputedStyle(p,void 0))p=p.getPropertyValue(f),a.pick(l,"opacity"!==f)&&(p=a.pInt(p));return p};a.inArray=function(p,f){return(a.indexOfPolyfill||Array.prototype.indexOf).call(f,p)};a.grep=function(p,f){return(a.filterPolyfill||Array.prototype.filter).call(p, -f)};a.find=Array.prototype.find?function(a,f){return a.find(f)}:function(a,f){var l,r=a.length;for(l=0;l>16,(l&65280)>> -8,l&255,1]:4===f&&(n=[(l&3840)>>4|(l&3840)>>8,(l&240)>>4|l&240,(l&15)<<4|l&15,1])),!n)for(w=this.parsers.length;w--&&!n;)u=this.parsers[w],(f=u.regex.exec(l))&&(n=u.parse(f));this.rgba=n||[]},get:function(a){var f=this.input,n=this.rgba,l;this.stops?(l=p(f),l.stops=[].concat(l.stops),E(this.stops,function(n,e){l.stops[e]=[l.stops[e][0],n.get(a)]})):l=n&&D(n[0])?"rgb"===a||!a&&1===n[3]?"rgb("+n[0]+","+n[1]+","+n[2]+")":"a"===a?n[3]:"rgba("+n.join(",")+")":f;return l},brighten:function(a){var l,n=this.rgba; -if(this.stops)E(this.stops,function(n){n.brighten(a)});else if(D(a)&&0!==a)for(l=0;3>l;l++)n[l]+=f(255*a),0>n[l]&&(n[l]=0),255y.width)y={width:0,height:0}}else y=this.htmlGetBBox();b.isSVG&& -(a=y.width,b=y.height,q&&"11px"===q.fontSize&&17===Math.round(b)&&(y.height=b=14),g&&(y.width=Math.abs(b*Math.sin(v))+Math.abs(a*Math.cos(v)),y.height=Math.abs(b*Math.cos(v))+Math.abs(a*Math.sin(v))));if(A&&0]*>/g,"")))},textSetter:function(a){a!==this.textStr&&(delete this.bBox,this.textStr=a,this.added&&this.renderer.buildText(this))},fillSetter:function(a,g,b){"string"===typeof a?b.setAttribute(g,a):a&&this.colorGradient(a,g,b)},visibilitySetter:function(a,g,b){"inherit"===a?b.removeAttribute(g):this[g]!==a&&b.setAttribute(g,a);this[g]=a},zIndexSetter:function(a,b){var v=this.renderer,y=this.parentGroup,c=(y||v).element||v.box,k,d=this.element,q,e,v=c===v.box;k=this.added;var z;u(a)&& -(d.zIndex=a,a=+a,this[b]===a&&(k=!1),this[b]=a);if(k){(a=this.zIndex)&&y&&(y.handleZ=!0);b=c.childNodes;for(z=b.length-1;0<=z&&!q;z--)if(y=b[z],k=y.zIndex,e=!u(k),y!==d)if(0>a&&e&&!v&&!z)c.insertBefore(d,b[z]),q=!0;else if(g(k)<=a||e&&(!u(a)||0<=a))c.insertBefore(d,b[z+1]||null),q=!0;q||(c.insertBefore(d,b[v?3:0]||null),q=!0)}return q},_defaultSetter:function(a,g,b){b.setAttribute(g,a)}});E.prototype.yGetter=E.prototype.xGetter;E.prototype.translateXSetter=E.prototype.translateYSetter=E.prototype.rotationSetter= -E.prototype.verticalAlignSetter=E.prototype.rotationOriginXSetter=E.prototype.rotationOriginYSetter=E.prototype.scaleXSetter=E.prototype.scaleYSetter=E.prototype.matrixSetter=function(a,g){this[g]=a;this.doTransform=!0};E.prototype["stroke-widthSetter"]=E.prototype.strokeSetter=function(a,g,b){this[g]=a;this.stroke&&this["stroke-width"]?(E.prototype.fillSetter.call(this,this.stroke,"stroke",b),b.setAttribute("stroke-width",this["stroke-width"]),this.hasStroke=!0):"stroke-width"===g&&0===a&&this.hasStroke&& -(b.removeAttribute("stroke"),this.hasStroke=!1)};D=a.SVGRenderer=function(){this.init.apply(this,arguments)};c(D.prototype,{Element:E,SVG_NS:P,init:function(a,g,b,v,c,k){var y;v=this.createElement("svg").attr({version:"1.1","class":"highcharts-root"}).css(this.getStyle(v));y=v.element;a.appendChild(y);f(a,"dir","ltr");-1===a.innerHTML.indexOf("xmlns")&&f(y,"xmlns",this.SVG_NS);this.isSVG=!0;this.box=y;this.boxWrapper=v;this.alignedObjects=[];this.url=(x||N)&&m.getElementsByTagName("base").length? -R.location.href.replace(/#.*?$/,"").replace(/<[^>]*>/g,"").replace(/([\('\)])/g,"\\$1").replace(/ /g,"%20"):"";this.createElement("desc").add().element.appendChild(m.createTextNode("Created with Highcharts 6.0.4"));this.defs=this.createElement("defs").add();this.allowHTML=k;this.forExport=c;this.gradients={};this.cache={};this.cacheKeys=[];this.imgCount=0;this.setSize(g,b,!1);var d;x&&a.getBoundingClientRect&&(g=function(){n(a,{left:0,top:0});d=a.getBoundingClientRect();n(a,{left:Math.ceil(d.left)- -d.left+"px",top:Math.ceil(d.top)-d.top+"px"})},g(),this.unSubPixelFix=H(R,"resize",g))},getStyle:function(a){return this.style=c({fontFamily:'"Lucida Grande", "Lucida Sans Unicode", Arial, Helvetica, sans-serif',fontSize:"12px"},a)},setStyle:function(a){this.boxWrapper.css(this.getStyle(a))},isHidden:function(){return!this.boxWrapper.getBBox().width},destroy:function(){var a=this.defs;this.box=null;this.boxWrapper=this.boxWrapper.destroy();h(this.gradients||{});this.gradients=null;a&&(this.defs=a.destroy()); -this.unSubPixelFix&&this.unSubPixelFix();return this.alignedObjects=null},createElement:function(a){var g=new this.Element;g.init(this,a);return g},draw:A,getRadialAttr:function(a,g){return{cx:a[0]-a[2]/2+g.cx*a[2],cy:a[1]-a[2]/2+g.cy*a[2],r:g.r*a[2]}},getSpanWidth:function(a,g){var b=a.getBBox(!0).width;!L&&this.forExport&&(b=this.measureSpanWidth(g.firstChild.data,a.styles));return b},applyEllipsis:function(a,g,b,v){var c=a.rotation,y=b,k,d=0,q=b.length,e=function(a){g.removeChild(g.firstChild); -a&&g.appendChild(m.createTextNode(a))},z;a.rotation=0;y=this.getSpanWidth(a,g);if(z=y>v){for(;d<=q;)k=Math.ceil((d+q)/2),y=b.substring(0,k)+"\u2026",e(y),y=this.getSpanWidth(a,g),d===q?d=q+1:y>v?q=k-1:d=k;0===q&&e("")}a.rotation=c;return z},escapes:{"\x26":"\x26amp;","\x3c":"\x26lt;","\x3e":"\x26gt;","'":"\x26#39;",'"':"\x26quot;"},buildText:function(a){var b=a.element,v=this,c=v.forExport,y=G(a.textStr,"").toString(),q=-1!==y.indexOf("\x3c"),e=b.childNodes,z,h,A,J,t=f(b,"x"),x=a.styles,B=a.textWidth, -l=x&&x.lineHeight,C=x&&x.textOutline,u=x&&"ellipsis"===x.textOverflow,Q=x&&"nowrap"===x.whiteSpace,w=x&&x.fontSize,R,I,r=e.length,x=B&&!a.added&&this.box,p=function(a){var c;c=/(px|em)$/.test(a&&a.style.fontSize)?a.style.fontSize:w||v.style.fontSize||12;return l?g(l):v.fontMetrics(c,a.getAttribute("style")?a:b).h},K=function(a){F(v.escapes,function(g,b){a=a.replace(new RegExp(g,"g"),b)});return a};R=[y,u,Q,l,C,w,B].join();if(R!==a.textCache){for(a.textCache=R;r--;)b.removeChild(e[r]);q||C||u||B|| --1!==y.indexOf(" ")?(z=/<.*class="([^"]+)".*>/,h=/<.*style="([^"]+)".*>/,A=/<.*href="([^"]+)".*>/,x&&x.appendChild(b),y=q?y.replace(/<(b|strong)>/g,'\x3cspan style\x3d"font-weight:bold"\x3e').replace(/<(i|em)>/g,'\x3cspan style\x3d"font-style:italic"\x3e').replace(//g,"\x3c/span\x3e").split(//g):[y],y=k(y,function(a){return""!==a}),d(y,function(g,y){var k,q=0;g=g.replace(/^\s+|\s+$/g,"").replace(//g,"\x3c/span\x3e|||"); -k=g.split("|||");d(k,function(g){if(""!==g||1===k.length){var d={},e=m.createElementNS(v.SVG_NS,"tspan"),x,F;z.test(g)&&(x=g.match(z)[1],f(e,"class",x));h.test(g)&&(F=g.match(h)[1].replace(/(;| |^)color([ :])/,"$1fill$2"),f(e,"style",F));A.test(g)&&!c&&(f(e,"onclick",'location.href\x3d"'+g.match(A)[1]+'"'),f(e,"class","highcharts-anchor"),n(e,{cursor:"pointer"}));g=K(g.replace(/<[a-zA-Z\/](.|\n)*?>/g,"")||" ");if(" "!==g){e.appendChild(m.createTextNode(g));q?d.dx=0:y&&null!==t&&(d.x=t);f(e,d);b.appendChild(e); -!q&&I&&(!L&&c&&n(e,{display:"block"}),f(e,"dy",p(e)));if(B){d=g.replace(/([^\^])-/g,"$1- ").split(" ");x=1B,void 0===J&&(J=g),g&&1!==d.length?(e.removeChild(e.firstChild),O.unshift(d.pop())):(d=O,O=[],d.length&&!Q&&(e=m.createElementNS(P,"tspan"),f(e,{dy:C,x:t}),F&&f(e,"style",F),b.appendChild(e)),l>B&&(B=l)),d.length&&e.appendChild(m.createTextNode(d.join(" ").replace(/- /g, -"-")));a.rotation=G}q++}}});I=I||b.childNodes.length}),J&&a.attr("title",a.textStr),x&&x.removeChild(b),C&&a.applyTextOutline&&a.applyTextOutline(C)):b.appendChild(m.createTextNode(K(y)))}},getContrast:function(a){a=r(a).rgba;return 510Math.abs(c.end-c.start-2*Math.PI));var y=Math.cos(k),z=Math.sin(k),h=Math.cos(e),e=Math.sin(e);c=.001>c.end-k-Math.PI?0:1;d=["M",a+d*y,g+q*z,"A",d,q,0,c,1,a+d*h,g+q*e];u(b)&&d.push(v?"M":"L",a+b* -h,g+b*e,"A",b,b,0,c,0,a+b*y,g+b*z);d.push(v?"":"Z");return d},callout:function(a,g,b,v,c){var d=Math.min(c&&c.r||0,b,v),k=d+6,q=c&&c.anchorX;c=c&&c.anchorY;var e;e=["M",a+d,g,"L",a+b-d,g,"C",a+b,g,a+b,g,a+b,g+d,"L",a+b,g+v-d,"C",a+b,g+v,a+b,g+v,a+b-d,g+v,"L",a+d,g+v,"C",a,g+v,a,g+v,a,g+v-d,"L",a,g+d,"C",a,g,a,g,a+d,g];q&&q>b?c>g+k&&cq?c>g+k&&cv&&q>a+k&&qc&&q>a+k&&qa?a+3:Math.round(1.2*a);return{h:b,b:Math.round(.8* -b),f:a}},rotCorr:function(a,g,b){var v=a;g&&b&&(v=Math.max(v*Math.cos(g*e),4));return{x:-a/3*Math.sin(g*e),y:v}},label:function(g,b,k,e,z,h,m,A,L){var y=this,J=y.g("button"!==L&&"label"),t=J.text=y.text("",0,0,m).attr({zIndex:1}),x,F,n=0,B=3,l=0,C,f,Q,G,w,R={},I,P,r=/^url\((.*?)\)$/.test(e),p=r,K,O,N,T;L&&J.addClass("highcharts-"+L);p=r;K=function(){return(I||0)%2/2};O=function(){var a=t.element.style,g={};F=(void 0===C||void 0===f||w)&&u(t.textStr)&&t.getBBox();J.width=(C||F.width||0)+2*B+l;J.height= -(f||F.height||0)+2*B;P=B+y.fontMetrics(a&&a.fontSize,t).b;p&&(x||(J.box=x=y.symbols[e]||r?y.symbol(e):y.rect(),x.addClass(("button"===L?"":"highcharts-label-box")+(L?" highcharts-"+L+"-box":"")),x.add(J),a=K(),g.x=a,g.y=(A?-P:0)+a),g.width=Math.round(J.width),g.height=Math.round(J.height),x.attr(c(g,R)),R={})};N=function(){var a=l+B,g;g=A?0:P;u(C)&&F&&("center"===w||"right"===w)&&(a+={center:.5,right:1}[w]*(C-F.width));if(a!==t.x||g!==t.y)t.attr("x",a),void 0!==g&&t.attr("y",g);t.x=a;t.y=g};T=function(a, -g){x?x.attr(a,g):R[a]=g};J.onAdd=function(){t.add(J);J.attr({text:g||0===g?g:"",x:b,y:k});x&&u(z)&&J.attr({anchorX:z,anchorY:h})};J.widthSetter=function(g){C=a.isNumber(g)?g:null};J.heightSetter=function(a){f=a};J["text-alignSetter"]=function(a){w=a};J.paddingSetter=function(a){u(a)&&a!==B&&(B=J.padding=a,N())};J.paddingLeftSetter=function(a){u(a)&&a!==l&&(l=a,N())};J.alignSetter=function(a){a={left:0,center:.5,right:1}[a];a!==n&&(n=a,F&&J.attr({x:Q}))};J.textSetter=function(a){void 0!==a&&t.textSetter(a); -O();N()};J["stroke-widthSetter"]=function(a,g){a&&(p=!0);I=this["stroke-width"]=a;T(g,a)};J.strokeSetter=J.fillSetter=J.rSetter=function(a,g){"r"!==g&&("fill"===g&&a&&(p=!0),J[g]=a);T(g,a)};J.anchorXSetter=function(a,g){z=J.anchorX=a;T(g,Math.round(a)-K()-Q)};J.anchorYSetter=function(a,g){h=J.anchorY=a;T(g,a-G)};J.xSetter=function(a){J.x=a;n&&(a-=n*((C||F.width)+2*B));Q=Math.round(a);J.attr("translateX",Q)};J.ySetter=function(a){G=J.y=Math.round(a);J.attr("translateY",G)};var U=J.css;return c(J,{css:function(a){if(a){var g= -{};a=q(a);d(J.textProps,function(b){void 0!==a[b]&&(g[b]=a[b],delete a[b])});t.css(g)}return U.call(J,a)},getBBox:function(){return{width:F.width+2*B,height:F.height+2*B,x:F.x-B,y:F.y-B}},shadow:function(a){a&&(O(),x&&x.shadow(a));return J},destroy:function(){v(J.element,"mouseenter");v(J.element,"mouseleave");t&&(t=t.destroy());x&&(x=x.destroy());E.prototype.destroy.call(J);J=y=O=N=T=null}})}});a.Renderer=D})(M);(function(a){var E=a.attr,D=a.createElement,H=a.css,p=a.defined,f=a.each,l=a.extend, -r=a.isFirefox,n=a.isMS,w=a.isWebKit,u=a.pick,e=a.pInt,h=a.SVGRenderer,m=a.win,d=a.wrap;l(a.SVGElement.prototype,{htmlCss:function(a){var b=this.element;if(b=a&&"SPAN"===b.tagName&&a.width)delete a.width,this.textWidth=b,this.updateTransform();a&&"ellipsis"===a.textOverflow&&(a.whiteSpace="nowrap",a.overflow="hidden");this.styles=l(this.styles,a);H(this.element,a);return this},htmlGetBBox:function(){var a=this.element;return{x:a.offsetLeft,y:a.offsetTop,width:a.offsetWidth,height:a.offsetHeight}}, -htmlUpdateTransform:function(){if(this.added){var a=this.renderer,b=this.element,d=this.translateX||0,z=this.translateY||0,h=this.x||0,m=this.y||0,x=this.textAlign||"left",n={left:0,center:.5,right:1}[x],t=this.styles;H(b,{marginLeft:d,marginTop:z});this.shadows&&f(this.shadows,function(a){H(a,{marginLeft:d+1,marginTop:z+1})});this.inverted&&f(b.childNodes,function(c){a.invertChild(c,b)});if("SPAN"===b.tagName){var l=this.rotation,u=e(this.textWidth),q=t&&t.whiteSpace,A=[l,x,b.innerHTML,this.textWidth, -this.textAlign].join();A!==this.cTT&&(t=a.fontMetrics(b.style.fontSize).b,p(l)&&this.setSpanRotation(l,n,t),H(b,{width:"",whiteSpace:q||"nowrap"}),b.offsetWidth>u&&/[ \-]/.test(b.textContent||b.innerText)&&H(b,{width:u+"px",display:"block",whiteSpace:q||"normal"}),this.getSpanCorrection(b.offsetWidth,t,n,l,x));H(b,{left:h+(this.xCorr||0)+"px",top:m+(this.yCorr||0)+"px"});w&&(t=b.offsetHeight);this.cTT=A}}else this.alignOnAdd=!0},setSpanRotation:function(a,b,d){var c={},k=this.renderer.getTransformKey(); -c[k]=c.transform="rotate("+a+"deg)";c[k+(r?"Origin":"-origin")]=c.transformOrigin=100*b+"% "+d+"px";H(this.element,c)},getSpanCorrection:function(a,b,d){this.xCorr=-a*d;this.yCorr=-b}});l(h.prototype,{getTransformKey:function(){return n&&!/Edge/.test(m.navigator.userAgent)?"-ms-transform":w?"-webkit-transform":r?"MozTransform":m.opera?"-o-transform":""},html:function(a,b,k){var c=this.createElement("span"),e=c.element,h=c.renderer,m=h.isSVG,w=function(a,b){f(["opacity","visibility"],function(c){d(a, -c+"Setter",function(a,c,d,k){a.call(this,c,d,k);b[d]=c})})};c.textSetter=function(a){a!==e.innerHTML&&delete this.bBox;this.textStr=a;e.innerHTML=u(a,"");c.htmlUpdateTransform()};m&&w(c,c.element.style);c.xSetter=c.ySetter=c.alignSetter=c.rotationSetter=function(a,b){"align"===b&&(b="textAlign");c[b]=a;c.htmlUpdateTransform()};c.attr({text:a,x:Math.round(b),y:Math.round(k)}).css({fontFamily:this.style.fontFamily,fontSize:this.style.fontSize,position:"absolute"});e.style.whiteSpace="nowrap";c.css= -c.htmlCss;m&&(c.add=function(a){var b,d=h.box.parentNode,k=[];if(this.parentGroup=a){if(b=a.div,!b){for(;a;)k.push(a),a=a.parentGroup;f(k.reverse(),function(a){function e(g,b){a[b]=g;n?q[h.getTransformKey()]="translate("+(a.x||a.translateX)+"px,"+(a.y||a.translateY)+"px)":"translateX"===b?q.left=g+"px":q.top=g+"px";a.doTransform=!0}var q,g=E(a.element,"class");g&&(g={className:g});b=a.div=a.div||D("div",g,{position:"absolute",left:(a.translateX||0)+"px",top:(a.translateY||0)+"px",display:a.display, -opacity:a.opacity,pointerEvents:a.styles&&a.styles.pointerEvents},b||d);q=b.style;l(a,{classSetter:function(a){return function(g){this.element.setAttribute("class",g);a.className=g}}(b),on:function(){k[0].div&&c.on.apply({element:k[0].div},arguments);return a},translateXSetter:e,translateYSetter:e});w(a,q)})}}else b=d;b.appendChild(e);c.added=!0;c.alignOnAdd&&c.htmlUpdateTransform();return c});return c}})})(M);(function(a){function E(){var n=a.defaultOptions.global,l=r.moment;if(n.timezone){if(l)return function(a){return-l.tz(a, -n.timezone).utcOffset()};a.error(25)}return n.useUTC&&n.getTimezoneOffset}function D(){var n=a.defaultOptions.global,f,u=n.useUTC,e=u?"getUTC":"get",h=u?"setUTC":"set",m="Minutes Hours Day Date Month FullYear".split(" "),d=m.concat(["Milliseconds","Seconds"]);a.Date=f=n.Date||r.Date;f.hcTimezoneOffset=u&&n.timezoneOffset;f.hcGetTimezoneOffset=E();f.hcHasTimeZone=!(!f.hcTimezoneOffset&&!f.hcGetTimezoneOffset);f.hcMakeTime=function(a,b,d,e,h,m){var c;u?(c=f.UTC.apply(0,arguments),c+=p(c)):c=(new f(a, -b,l(d,1),l(e,0),l(h,0),l(m,0))).getTime();return c};for(n=0;nb&&e-k*zm&&(p=Math.round((h-e)/Math.cos(b*r)));else if(h=e+(1-k)*z,e-k*zm&&(I=m-a.x+I*k,x=-1),I=Math.min(B,I),II||f.autoRotation&&(c.styles||{}).width)p=I;p&&(t.width=p,(n.style||{}).textOverflow||(t.textOverflow="ellipsis"),c.css(t))},getPosition:function(a,f,l,e){var h=this.axis,m=h.chart,d=e&&m.oldChartHeight||m.chartHeight;return{x:a?h.translate(f+l,null,null,e)+h.transB:h.left+h.offset+(h.opposite?(e&&m.oldChartWidth||m.chartWidth)-h.right-h.left:0),y:a?d-h.bottom+h.offset-(h.opposite?h.height:0):d-h.translate(f+l,null,null,e)-h.transB}},getLabelPosition:function(a, -f,l,e,h,m,d,c){var b=this.axis,k=b.transA,z=b.reversed,B=b.staggerLines,n=b.tickRotCorr||{x:0,y:0},x=h.y,u=e||b.reserveSpaceDefault?0:-b.labelOffset*("center"===b.labelAlign?.5:1);D(x)||(x=0===b.side?l.rotation?-8:-l.getBBox().height:2===b.side?n.y+8:Math.cos(l.rotation*r)*(n.y-l.getBBox(!1,0).height/2));a=a+h.x+u+n.x-(m&&e?m*k*(z?-1:1):0);f=f+x-(m&&!e?m*k*(z?1:-1):0);B&&(l=d/(c||1)%B,b.opposite&&(l=B-l-1),f+=b.labelOffset/B*l);return{x:a,y:Math.round(f)}},getMarkPath:function(a,f,l,e,h,m){return m.crispLine(["M", -a,f,"L",a+(h?0:-l),f+(h?l:0)],e)},renderGridLine:function(a,f,l){var e=this.axis,h=e.options,m=this.gridLine,d={},c=this.pos,b=this.type,k=e.tickmarkOffset,z=e.chart.renderer,B=b?b+"Grid":"grid",n=h[B+"LineWidth"],x=h[B+"LineColor"],h=h[B+"LineDashStyle"];m||(d.stroke=x,d["stroke-width"]=n,h&&(d.dashstyle=h),b||(d.zIndex=1),a&&(d.opacity=0),this.gridLine=m=z.path().attr(d).addClass("highcharts-"+(b?b+"-":"")+"grid-line").add(e.gridGroup));if(!a&&m&&(a=e.getPlotLinePath(c+k,m.strokeWidth()*l,a,!0)))m[this.isNew? -"attr":"animate"]({d:a,opacity:f})},renderMark:function(a,f,u){var e=this.axis,h=e.options,m=e.chart.renderer,d=this.type,c=d?d+"Tick":"tick",b=e.tickSize(c),k=this.mark,z=!k,B=a.x;a=a.y;var n=l(h[c+"Width"],!d&&e.isXAxis?1:0),h=h[c+"Color"];b&&(e.opposite&&(b[0]=-b[0]),z&&(this.mark=k=m.path().addClass("highcharts-"+(d?d+"-":"")+"tick").add(e.axisGroup),k.attr({stroke:h,"stroke-width":n})),k[z?"attr":"animate"]({d:this.getMarkPath(B,a,b[0],k.strokeWidth()*u,e.horiz,m),opacity:f}))},renderLabel:function(a, -f,u,e){var h=this.axis,m=h.horiz,d=h.options,c=this.label,b=d.labels,k=b.step,h=h.tickmarkOffset,z=!0,B=a.x;a=a.y;c&&p(B)&&(c.xy=a=this.getLabelPosition(B,a,c,m,b,h,e,k),this.isFirst&&!this.isLast&&!l(d.showFirstLabel,1)||this.isLast&&!this.isFirst&&!l(d.showLastLabel,1)?z=!1:!m||b.step||b.rotation||f||0===u||this.handleOverflow(a),k&&e%k&&(z=!1),z&&p(a.y)?(a.opacity=u,c[this.isNewLabel?"attr":"animate"](a),this.isNewLabel=!1):(c.attr("y",-9999),this.isNewLabel=!0))},render:function(a,f,u){var e= -this.axis,h=e.horiz,m=this.getPosition(h,this.pos,e.tickmarkOffset,f),d=m.x,c=m.y,e=h&&d===e.pos+e.len||!h&&c===e.pos?-1:1;u=l(u,1);this.isActive=!0;this.renderGridLine(f,u,e);this.renderMark(m,u,e);this.renderLabel(m,f,u,a);this.isNew=!1},destroy:function(){H(this,this.axis)}}})(M);var V=function(a){var E=a.addEvent,D=a.animObject,H=a.arrayMax,p=a.arrayMin,f=a.color,l=a.correctFloat,r=a.defaultOptions,n=a.defined,w=a.deg2rad,u=a.destroyObjectProperties,e=a.each,h=a.extend,m=a.fireEvent,d=a.format, -c=a.getMagnitude,b=a.grep,k=a.inArray,z=a.isArray,B=a.isNumber,I=a.isString,x=a.merge,K=a.normalizeTickInterval,t=a.objectEach,C=a.pick,N=a.removeEvent,q=a.splat,A=a.syncTimeout,F=a.Tick,G=function(){this.init.apply(this,arguments)};a.extend(G.prototype,{defaultOptions:{dateTimeLabelFormats:{millisecond:"%H:%M:%S.%L",second:"%H:%M:%S",minute:"%H:%M",hour:"%H:%M",day:"%e. %b",week:"%e. %b",month:"%b '%y",year:"%Y"},endOnTick:!1,labels:{enabled:!0,style:{color:"#666666",cursor:"default",fontSize:"11px"}, -x:0},maxPadding:.01,minorTickLength:2,minorTickPosition:"outside",minPadding:.01,startOfWeek:1,startOnTick:!1,tickLength:10,tickmarkPlacement:"between",tickPixelInterval:100,tickPosition:"outside",title:{align:"middle",style:{color:"#666666"}},type:"linear",minorGridLineColor:"#f2f2f2",minorGridLineWidth:1,minorTickColor:"#999999",lineColor:"#ccd6eb",lineWidth:1,gridLineColor:"#e6e6e6",tickColor:"#ccd6eb"},defaultYAxisOptions:{endOnTick:!0,tickPixelInterval:72,showLastLabel:!0,labels:{x:-8},maxPadding:.05, -minPadding:.05,startOnTick:!0,title:{rotation:270,text:"Values"},stackLabels:{allowOverlap:!1,enabled:!1,formatter:function(){return a.numberFormat(this.total,-1)},style:{fontSize:"11px",fontWeight:"bold",color:"#000000",textOutline:"1px contrast"}},gridLineWidth:1,lineWidth:0},defaultLeftAxisOptions:{labels:{x:-15},title:{rotation:270}},defaultRightAxisOptions:{labels:{x:15},title:{rotation:90}},defaultBottomAxisOptions:{labels:{autoRotation:[-45],x:0},title:{rotation:0}},defaultTopAxisOptions:{labels:{autoRotation:[-45], -x:0},title:{rotation:0}},init:function(a,b){var g=b.isX,v=this;v.chart=a;v.horiz=a.inverted&&!v.isZAxis?!g:g;v.isXAxis=g;v.coll=v.coll||(g?"xAxis":"yAxis");v.opposite=b.opposite;v.side=b.side||(v.horiz?v.opposite?0:2:v.opposite?1:3);v.setOptions(b);var c=this.options,d=c.type;v.labelFormatter=c.labels.formatter||v.defaultLabelFormatter;v.userOptions=b;v.minPixelPadding=0;v.reversed=c.reversed;v.visible=!1!==c.visible;v.zoomEnabled=!1!==c.zoomEnabled;v.hasNames="category"===d||!0===c.categories;v.categories= -c.categories||v.hasNames;v.names=v.names||[];v.plotLinesAndBandsGroups={};v.isLog="logarithmic"===d;v.isDatetimeAxis="datetime"===d;v.positiveValuesOnly=v.isLog&&!v.allowNegativeLog;v.isLinked=n(c.linkedTo);v.ticks={};v.labelEdge=[];v.minorTicks={};v.plotLinesAndBands=[];v.alternateBands={};v.len=0;v.minRange=v.userMinRange=c.minRange||c.maxZoom;v.range=c.range;v.offset=c.offset||0;v.stacks={};v.oldStacks={};v.stacksTouched=0;v.max=null;v.min=null;v.crosshair=C(c.crosshair,q(a.options.tooltip.crosshairs)[g? -0:1],!1);b=v.options.events;-1===k(v,a.axes)&&(g?a.axes.splice(a.xAxis.length,0,v):a.axes.push(v),a[v.coll].push(v));v.series=v.series||[];a.inverted&&!v.isZAxis&&g&&void 0===v.reversed&&(v.reversed=!0);t(b,function(a,g){E(v,g,a)});v.lin2log=c.linearToLogConverter||v.lin2log;v.isLog&&(v.val2lin=v.log2lin,v.lin2val=v.lin2log)},setOptions:function(a){this.options=x(this.defaultOptions,"yAxis"===this.coll&&this.defaultYAxisOptions,[this.defaultTopAxisOptions,this.defaultRightAxisOptions,this.defaultBottomAxisOptions, -this.defaultLeftAxisOptions][this.side],x(r[this.coll],a))},defaultLabelFormatter:function(){var g=this.axis,b=this.value,c=g.categories,k=this.dateTimeLabelFormat,e=r.lang,q=e.numericSymbols,e=e.numericSymbolMagnitude||1E3,h=q&&q.length,m,z=g.options.labels.format,g=g.isLog?Math.abs(b):g.tickInterval;if(z)m=d(z,this);else if(c)m=b;else if(k)m=a.dateFormat(k,b);else if(h&&1E3<=g)for(;h--&&void 0===m;)c=Math.pow(e,h+1),g>=c&&0===10*b%c&&null!==q[h]&&0!==b&&(m=a.numberFormat(b/c,-1)+q[h]);void 0=== -m&&(m=1E4<=Math.abs(b)?a.numberFormat(b,-1):a.numberFormat(b,-1,void 0,""));return m},getSeriesExtremes:function(){var a=this,v=a.chart;a.hasVisibleSeries=!1;a.dataMin=a.dataMax=a.threshold=null;a.softThreshold=!a.isXAxis;a.buildStacks&&a.buildStacks();e(a.series,function(g){if(g.visible||!v.options.chart.ignoreHiddenSeries){var c=g.options,d=c.threshold,k;a.hasVisibleSeries=!0;a.positiveValuesOnly&&0>=d&&(d=null);if(a.isXAxis)c=g.xData,c.length&&(g=p(c),k=H(c),B(g)||g instanceof Date||(c=b(c,B), -g=p(c)),a.dataMin=Math.min(C(a.dataMin,c[0],g),g),a.dataMax=Math.max(C(a.dataMax,c[0],k),k));else if(g.getExtremes(),k=g.dataMax,g=g.dataMin,n(g)&&n(k)&&(a.dataMin=Math.min(C(a.dataMin,g),g),a.dataMax=Math.max(C(a.dataMax,k),k)),n(d)&&(a.threshold=d),!c.softThreshold||a.positiveValuesOnly)a.softThreshold=!1}})},translate:function(a,b,c,d,k,e){var g=this.linkedParent||this,v=1,q=0,h=d?g.oldTransA:g.transA;d=d?g.oldMin:g.min;var m=g.minPixelPadding;k=(g.isOrdinal||g.isBroken||g.isLog&&k)&&g.lin2val; -h||(h=g.transA);c&&(v*=-1,q=g.len);g.reversed&&(v*=-1,q-=v*(g.sector||g.len));b?(a=(a*v+q-m)/h+d,k&&(a=g.lin2val(a))):(k&&(a=g.val2lin(a)),a=B(d)?v*(a-d)*h+q+v*m+(B(e)?h*e:0):void 0);return a},toPixels:function(a,b){return this.translate(a,!1,!this.horiz,null,!0)+(b?0:this.pos)},toValue:function(a,b){return this.translate(a-(b?0:this.pos),!0,!this.horiz,null,!0)},getPlotLinePath:function(a,b,c,d,k){var g=this.chart,v=this.left,q=this.top,e,h,m=c&&g.oldChartHeight||g.chartHeight,z=c&&g.oldChartWidth|| -g.chartWidth,A;e=this.transB;var t=function(a,g,b){if(ab)d?a=Math.min(Math.max(g,a),b):A=!0;return a};k=C(k,this.translate(a,null,null,c));a=c=Math.round(k+e);e=h=Math.round(m-k-e);B(k)?this.horiz?(e=q,h=m-this.bottom,a=c=t(a,v,v+this.width)):(a=v,c=z-this.right,e=h=t(e,q,q+this.height)):(A=!0,d=!1);return A&&!d?null:g.renderer.crispLine(["M",a,e,"L",c,h],b||1)},getLinearTickPositions:function(a,b,c){var g,v=l(Math.floor(b/a)*a);c=l(Math.ceil(c/a)*a);var d=[],k;l(v+a)===v&&(k=20);if(this.single)return[b]; -for(b=v;b<=c;){d.push(b);b=l(b+a,k);if(b===g)break;g=b}return d},getMinorTickInterval:function(){var a=this.options;return!0===a.minorTicks?C(a.minorTickInterval,"auto"):!1===a.minorTicks?null:a.minorTickInterval},getMinorTickPositions:function(){var a=this,b=a.options,c=a.tickPositions,d=a.minorTickInterval,k=[],q=a.pointRangePadding||0,h=a.min-q,q=a.max+q,m=q-h;if(m&&m/d=this.minRange,t=this.minRange,d=(t-c+b)/2,d=[b-d,C(a.min,b-d)],k&&(d[2]=this.isLog?this.log2lin(this.dataMin):this.dataMin),b=H(d),c=[b+t,C(a.max,b+t)],k&&(c[2]=this.isLog?this.log2lin(this.dataMax):this.dataMax),c=p(c),c-b=p?(r=p,f=0):b.dataMax<=p&&(w=p,x=0)),b.min= -C(N,r,b.dataMin),b.max=C(D,w,b.dataMax));q&&(b.positiveValuesOnly&&!g&&0>=Math.min(b.min,C(b.dataMin,b.min))&&a.error(10,1),b.min=l(h(b.min),15),b.max=l(h(b.max),15));b.range&&n(b.max)&&(b.userMin=b.min=N=Math.max(b.dataMin,b.minFromRange()),b.userMax=D=b.max,b.range=null);m(b,"foundExtremes");b.beforePadding&&b.beforePadding();b.adjustForMinRange();!(G||b.axisPointRange||b.usePercentage||t)&&n(b.min)&&n(b.max)&&(h=b.max-b.min)&&(!n(N)&&f&&(b.min-=h*f),!n(D)&&x&&(b.max+=h*x));B(k.softMin)&&!B(b.userMin)&& -(b.min=Math.min(b.min,k.softMin));B(k.softMax)&&!B(b.userMax)&&(b.max=Math.max(b.max,k.softMax));B(k.floor)&&(b.min=Math.max(b.min,k.floor));B(k.ceiling)&&(b.max=Math.min(b.max,k.ceiling));I&&n(b.dataMin)&&(p=p||0,!n(N)&&b.min=p?b.min=p:!n(D)&&b.max>p&&b.dataMax<=p&&(b.max=p));b.tickInterval=b.min===b.max||void 0===b.min||void 0===b.max?1:t&&!F&&u===b.linkedParent.options.tickPixelInterval?F=b.linkedParent.tickInterval:C(F,this.tickAmount?(b.max-b.min)/Math.max(this.tickAmount-1,1): -void 0,G?1:(b.max-b.min)*u/Math.max(b.len,u));A&&!g&&e(b.series,function(a){a.processData(b.min!==b.oldMin||b.max!==b.oldMax)});b.setAxisTranslation(!0);b.beforeSetTickPositions&&b.beforeSetTickPositions();b.postProcessTickInterval&&(b.tickInterval=b.postProcessTickInterval(b.tickInterval));b.pointRange&&!F&&(b.tickInterval=Math.max(b.pointRange,b.tickInterval));g=C(k.minTickInterval,b.isDatetimeAxis&&b.closestPointRange);!F&&b.tickIntervalb.tickInterval&&1E3b.max)),!!this.tickAmount));this.tickAmount||(b.tickInterval=b.unsquish());this.setTickPositions()},setTickPositions:function(){var a=this.options,b,c=a.tickPositions;b=this.getMinorTickInterval();var d=a.tickPositioner,k=a.startOnTick,q=a.endOnTick;this.tickmarkOffset=this.categories&&"between"===a.tickmarkPlacement&&1===this.tickInterval?.5:0;this.minorTickInterval="auto"===b&&this.tickInterval?this.tickInterval/ -5:b;this.single=this.min===this.max&&n(this.min)&&!this.tickAmount&&(parseInt(this.min,10)===this.min||!1!==a.allowDecimals);this.tickPositions=b=c&&c.slice();!b&&(b=this.isDatetimeAxis?this.getTimeTicks(this.normalizeTimeTickInterval(this.tickInterval,a.units),this.min,this.max,a.startOfWeek,this.ordinalPositions,this.closestPointRange,!0):this.isLog?this.getLogTickPositions(this.tickInterval,this.min,this.max):this.getLinearTickPositions(this.tickInterval,this.min,this.max),b.length>this.len&&(b= -[b[0],b.pop()],b[0]===b[1]&&(b.length=1)),this.tickPositions=b,d&&(d=d.apply(this,[this.min,this.max])))&&(this.tickPositions=b=d);this.paddedTicks=b.slice(0);this.trimTicks(b,k,q);this.isLinked||(this.single&&2>b.length&&(this.min-=.5,this.max+=.5),c||d||this.adjustTickAmount())},trimTicks:function(a,b,c){var g=a[0],d=a[a.length-1],k=this.minPointOffset||0;if(!this.isLinked){if(b&&-Infinity!==g)this.min=g;else for(;this.min-k>a[0];)a.shift();if(c)this.max=d;else for(;this.max+kb&&(this.finalTickAmt=b,b=5);this.tickAmount=b},adjustTickAmount:function(){var a=this.tickInterval,b=this.tickPositions,c=this.tickAmount,d=this.finalTickAmt,k=b&&b.length,q=C(this.threshold,this.softThreshold?0:null);if(this.hasData()){if(kc&&(this.tickInterval*= -2,this.setTickPositions());if(n(d)){for(a=c=b.length;a--;)(3===d&&1===a%2||2>=d&&0d&&(a=d)),n(c)&&(bd&&(b=d))),this.displayBtn=void 0!==a||void 0!==b,this.setExtremes(a,b,!1,void 0,{trigger:"zoom"});return!0},setAxisSize:function(){var b=this.chart,c=this.options,d=c.offsets||[0,0,0,0],k=this.horiz,q=this.width=Math.round(a.relativeLength(C(c.width,b.plotWidth-d[3]+d[1]),b.plotWidth)),e=this.height=Math.round(a.relativeLength(C(c.height, -b.plotHeight-d[0]+d[2]),b.plotHeight)),h=this.top=Math.round(a.relativeLength(C(c.top,b.plotTop+d[0]),b.plotHeight,b.plotTop)),c=this.left=Math.round(a.relativeLength(C(c.left,b.plotLeft+d[3]),b.plotWidth,b.plotLeft));this.bottom=b.chartHeight-e-h;this.right=b.chartWidth-q-c;this.len=Math.max(k?q:e,0);this.pos=k?c:h},getExtremes:function(){var a=this.isLog,b=this.lin2log;return{min:a?l(b(this.min)):this.min,max:a?l(b(this.max)):this.max,dataMin:this.dataMin,dataMax:this.dataMax,userMin:this.userMin, -userMax:this.userMax}},getThreshold:function(a){var b=this.isLog,g=this.lin2log,c=b?g(this.min):this.min,b=b?g(this.max):this.max;null===a?a=c:c>a?a=c:ba?"right":195a?"left":"center"},tickSize:function(a){var b=this.options,g=b[a+"Length"],c=C(b[a+"Width"],"tick"===a&&this.isXAxis?1:0);if(c&&g)return"inside"===b[a+"Position"]&&(g=-g),[g,c]},labelMetrics:function(){var a= -this.tickPositions&&this.tickPositions[0]||0;return this.chart.renderer.fontMetrics(this.options.labels.style&&this.options.labels.style.fontSize,this.ticks[a]&&this.ticks[a].label)},unsquish:function(){var a=this.options.labels,b=this.horiz,c=this.tickInterval,d=c,k=this.len/(((this.categories?1:0)+this.max-this.min)/c),q,h=a.rotation,m=this.labelMetrics(),z,A=Number.MAX_VALUE,t,x=function(a){a/=k||1;a=1=a)z=x(Math.abs(m.h/Math.sin(w*a))),b=z+Math.abs(a/360),b(c.step||0)&&!c.rotation&&(this.staggerLines||1)*this.len/d||!b&&(c.style&&parseInt(c.style.width,10)||k&&k-a.spacing[3]|| -.33*a.chartWidth)},renderUnsquish:function(){var a=this.chart,b=a.renderer,c=this.tickPositions,d=this.ticks,k=this.options.labels,q=this.horiz,h=this.getSlotWidth(),m=Math.max(1,Math.round(h-2*(k.padding||5))),z={},A=this.labelMetrics(),t=k.style&&k.style.textOverflow,f,F=0,l,B;I(k.rotation)||(z.rotation=k.rotation||0);e(c,function(a){(a=d[a])&&a.labelLength>F&&(F=a.labelLength)});this.maxLabelLength=F;if(this.autoRotation)F>m&&F>A.h?z.rotation=this.labelRotation:this.labelRotation=0;else if(h&& -(f={width:m+"px"},!t))for(f.textOverflow="clip",l=c.length;!q&&l--;)if(B=c[l],m=d[B].label)m.styles&&"ellipsis"===m.styles.textOverflow?m.css({textOverflow:"clip"}):d[B].labelLength>h&&m.css({width:h+"px"}),m.getBBox().height>this.len/c.length-(A.h-A.f)&&(m.specCss={textOverflow:"ellipsis"});z.rotation&&(f={width:(F>.5*a.chartHeight?.33*a.chartHeight:a.chartHeight)+"px"},t||(f.textOverflow="ellipsis"));if(this.labelAlign=k.align||this.autoLabelAlign(this.labelRotation))z.align=this.labelAlign;e(c, -function(a){var b=(a=d[a])&&a.label;b&&(b.attr(z),f&&b.css(x(f,b.specCss)),delete b.specCss,a.rotation=z.rotation)});this.tickRotCorr=b.rotCorr(A.b,this.labelRotation||0,0!==this.side)},hasData:function(){return this.hasVisibleSeries||n(this.min)&&n(this.max)&&this.tickPositions&&0=this.min&&a<=this.max)g[a]||(g[a]=new F(this,a)),d&&g[a].isNew&&g[a].render(b,!0,.1),g[a].render(b)},render:function(){var b= -this,c=b.chart,d=b.options,k=b.isLog,q=b.lin2log,h=b.isLinked,m=b.tickPositions,z=b.axisTitle,x=b.ticks,f=b.minorTicks,l=b.alternateBands,C=d.stackLabels,n=d.alternateGridColor,u=b.tickmarkOffset,G=b.axisLine,p=b.showAxis,I=D(c.renderer.globalAnimation),r,w;b.labelEdge.length=0;b.overlap=!1;e([x,f,l],function(a){t(a,function(a){a.isActive=!1})});if(b.hasData()||h)b.minorTickInterval&&!b.categories&&e(b.getMinorTickPositions(),function(a){b.renderMinorTick(a)}),m.length&&(e(m,function(a,c){b.renderTick(a, -c)}),u&&(0===b.min||b.single)&&(x[-1]||(x[-1]=new F(b,-1,null,!0)),x[-1].render(-1))),n&&e(m,function(d,g){w=void 0!==m[g+1]?m[g+1]+u:b.max-u;0===g%2&&d=h.second?0:C*Math.floor(x.getMilliseconds()/C));if(t>=h.second)x[D.hcSetSeconds](t>=h.minute? -0:C*Math.floor(x.getSeconds()/C));if(t>=h.minute)x[D.hcSetMinutes](t>=h.hour?0:C*Math.floor(x[D.hcGetMinutes]()/C));if(t>=h.hour)x[D.hcSetHours](t>=h.day?0:C*Math.floor(x[D.hcGetHours]()/C));if(t>=h.day)x[D.hcSetDate](t>=h.month?1:C*Math.floor(x[D.hcGetDate]()/C));t>=h.month&&(x[D.hcSetMonth](t>=h.year?0:C*Math.floor(x[D.hcGetMonth]()/C)),n=x[D.hcGetFullYear]());if(t>=h.year)x[D.hcSetFullYear](n-n%C);if(t===h.week)x[D.hcSetDate](x[D.hcGetDate]()-x[D.hcGetDay]()+e(b,1));n=x[D.hcGetFullYear]();b=x[D.hcGetMonth](); -var A=x[D.hcGetDate](),F=x[D.hcGetHours]();d=x.getTime();D.hcHasTimeZone&&(q=(!B||!!D.hcGetTimezoneOffset)&&(c-d>4*h.month||w(d)!==w(c)),N=w(x),x=new D(d+N));B=x.getTime();for(d=1;Bk.length&&l(k,function(a){0===a%18E5&&"000000000"===H("%H%M%S%L",a)&&(m[a]="day")})}k.info=r(a,{higherRanks:m,totalRange:t*C});return k}; -E.prototype.normalizeTimeTickInterval=function(a,d){var c=d||[["millisecond",[1,2,5,10,20,25,50,100,200,500]],["second",[1,2,5,10,15,30]],["minute",[1,2,5,10,15,30]],["hour",[1,2,3,4,6,8,12]],["day",[1,2]],["week",[1,2]],["month",[1,2,3,4,6]],["year",null]];d=c[c.length-1];var b=h[d[0]],k=d[1],e;for(e=0;er&&(!w||z<=n)&&void 0!==z&&d.push(z),z>n&& -(B=!0),z=k;else r=h(r),n=h(n),a=w?this.getMinorTickInterval():l.tickInterval,a=f("auto"===a?null:a,this._minorAutoInterval,l.tickPixelInterval/(w?5:1)*(n-r)/((w?e/this.tickPositions.length:e)||1)),a=p(a,null,D(a)),d=H(this.getLinearTickPositions(a,r,n),m),w||(this._minorAutoInterval=a/5);w||(this.tickInterval=a);return d};E.prototype.log2lin=function(a){return Math.log(a)/Math.LN10};E.prototype.lin2log=function(a){return Math.pow(10,a)}})(M);(function(a,E){var D=a.arrayMax,H=a.arrayMin,p=a.defined, -f=a.destroyObjectProperties,l=a.each,r=a.erase,n=a.merge,w=a.pick;a.PlotLineOrBand=function(a,e){this.axis=a;e&&(this.options=e,this.id=e.id)};a.PlotLineOrBand.prototype={render:function(){var f=this,e=f.axis,h=e.horiz,m=f.options,d=m.label,c=f.label,b=m.to,k=m.from,z=m.value,l=p(k)&&p(b),r=p(z),x=f.svgElem,K=!x,t=[],C=m.color,N=w(m.zIndex,0),q=m.events,t={"class":"highcharts-plot-"+(l?"band ":"line ")+(m.className||"")},A={},F=e.chart.renderer,G=l?"bands":"lines",g=e.log2lin;e.isLog&&(k=g(k),b=g(b), -z=g(z));r?(t={stroke:C,"stroke-width":m.width},m.dashStyle&&(t.dashstyle=m.dashStyle)):l&&(C&&(t.fill=C),m.borderWidth&&(t.stroke=m.borderColor,t["stroke-width"]=m.borderWidth));A.zIndex=N;G+="-"+N;(C=e.plotLinesAndBandsGroups[G])||(e.plotLinesAndBandsGroups[G]=C=F.g("plot-"+G).attr(A).add());K&&(f.svgElem=x=F.path().attr(t).add(C));if(r)t=e.getPlotLinePath(z,x.strokeWidth());else if(l)t=e.getPlotBandPath(k,b,m);else return;K&&t&&t.length?(x.attr({d:t}),q&&a.objectEach(q,function(a,b){x.on(b,function(a){q[b].apply(f, -[a])})})):x&&(t?(x.show(),x.animate({d:t})):(x.hide(),c&&(f.label=c=c.destroy())));d&&p(d.text)&&t&&t.length&&0this.max&& -e>this.max;if(m&&h)for(a&&(k=m.toString()===h.toString(),b=0),a=0;aA-h?A:A-h);else if(z)k[a]=Math.max(e,g+h+d>c?g:g+h);else return!1},C=function(a,c,d,g){var e;gc-b?e=!1:k[a]=gc-d/2?c-d-2:g-d/2;return e},p=function(a){var b=f;f=x;x=b;m=a},q=function(){!1!==t.apply(0,f)?!1!==C.apply(0,x)||m||(p(!0),q()):m?k.x=k.y=0:(p(!0),q())};(c.inverted||1q&&(h=!1);a=(e.series&& -e.series.yAxis&&e.series.yAxis.pos)+(e.plotY||0);a-=b.plotTop;c.push({target:e.isHeader?b.plotHeight+l:a,rank:e.isHeader?1:0,size:z.tt.getBBox().height+1,point:e,x:q,tt:t})}});this.cleanSplit();a.distribute(c,b.plotHeight+l);D(c,function(a){var c=a.point,d=c.series;a.tt.attr({visibility:void 0===a.pos?"hidden":"inherit",x:h||c.isHeader?a.x:c.plotX+b.plotLeft+n(f.distance,16),y:a.pos+b.plotTop,anchorX:c.isHeader?c.plotX+b.plotLeft:c.plotX+d.xAxis.pos,anchorY:c.isHeader?a.pos+b.plotTop-15:c.plotY+d.yAxis.pos})})}, -updatePosition:function(a){var e=this.chart,d=this.getLabel(),d=(this.options.positioner||this.getPosition).call(this,d.width,d.height,a);this.move(Math.round(d.x),Math.round(d.y||0),a.plotX+e.plotLeft,a.plotY+e.plotTop)},getDateFormat:function(a,m,d,c){var b=E("%m-%d %H:%M:%S.%L",m),k,h,f={millisecond:15,second:12,minute:9,hour:6,day:3},l="millisecond";for(h in e){if(a===e.week&&+E("%w",m)===d&&"00:00:00.000"===b.substr(6)){h="week";break}if(e[h]>a){h=l;break}if(f[h]&&b.substr(f[h])!=="01-01 00:00:00.000".substr(f[h]))break; -"week"!==h&&(l=h)}h&&(k=c[h]);return k},getXDateFormat:function(a,e,d){e=e.dateTimeLabelFormats;var c=d&&d.closestPointRange;return(c?this.getDateFormat(c,a.x,d.options.startOfWeek,e):e.day)||e.year},tooltipFooterHeaderFormatter:function(a,e){e=e?"footer":"header";var d=a.series,c=d.tooltipOptions,b=c.xDateFormat,k=d.xAxis,h=k&&"datetime"===k.options.type&&f(a.key),m=c[e+"Format"];h&&!b&&(b=this.getXDateFormat(a,c,k));h&&b&&D(a.point&&a.point.tooltipDateKeys||["key"],function(a){m=m.replace("{point."+ -a+"}","{point."+a+":"+b+"}")});return p(m,{point:a,series:d})},bodyFormatter:function(a){return l(a,function(a){var d=a.series.tooltipOptions;return(d[(a.point.formatPrefix||"point")+"Formatter"]||a.point.tooltipFormatter).call(a.point,d[(a.point.formatPrefix||"point")+"Format"])})}}})(M);(function(a){var E=a.addEvent,D=a.attr,H=a.charts,p=a.color,f=a.css,l=a.defined,r=a.each,n=a.extend,w=a.find,u=a.fireEvent,e=a.isObject,h=a.offset,m=a.pick,d=a.splat,c=a.Tooltip;a.Pointer=function(a,c){this.init(a, -c)};a.Pointer.prototype={init:function(a,d){this.options=d;this.chart=a;this.runChartClick=d.chart.events&&!!d.chart.events.click;this.pinchDown=[];this.lastValidTouch={};c&&(a.tooltip=new c(a,d.tooltip),this.followTouchMove=m(d.tooltip.followTouchMove,!0));this.setDOMEvents()},zoomOption:function(a){var b=this.chart,c=b.options.chart,d=c.zoomType||"",b=b.inverted;/touch/.test(a.type)&&(d=m(c.pinchType,d));this.zoomX=a=/x/.test(d);this.zoomY=d=/y/.test(d);this.zoomHor=a&&!b||d&&b;this.zoomVert=d&& -!b||a&&b;this.hasZoom=a||d},normalize:function(a,c){var b;b=a.touches?a.touches.length?a.touches.item(0):a.changedTouches[0]:a;c||(this.chartPosition=c=h(this.chart.container));return n(a,{chartX:Math.round(b.pageX-c.left),chartY:Math.round(b.pageY-c.top)})},getCoordinates:function(a){var b={xAxis:[],yAxis:[]};r(this.chart.axes,function(c){b[c.isXAxis?"xAxis":"yAxis"].push({axis:c,value:c.toValue(a[c.horiz?"chartX":"chartY"])})});return b},findNearestKDPoint:function(a,c,d){var b;r(a,function(a){var k= -!(a.noSharedTooltip&&c)&&0>a.options.findNearestPointBy.indexOf("y");a=a.searchPoint(d,k);if((k=e(a,!0))&&!(k=!e(b,!0)))var k=b.distX-a.distX,h=b.dist-a.dist,m=(a.series.group&&a.series.group.zIndex)-(b.series.group&&b.series.group.zIndex),k=0<(0!==k&&c?k:0!==h?h:0!==m?m:b.series.index>a.series.index?-1:1);k&&(b=a)});return b},getPointFromEvent:function(a){a=a.target;for(var b;a&&!b;)b=a.point,a=a.parentNode;return b},getChartCoordinatesFromPoint:function(a,c){var b=a.series,d=b.xAxis,b=b.yAxis,k= -m(a.clientX,a.plotX);if(d&&b)return c?{chartX:d.len+d.pos-k,chartY:b.len+b.pos-a.plotY}:{chartX:k+d.pos,chartY:a.plotY+b.pos}},getHoverData:function(b,c,d,h,f,l,n){var k,z=[],x=n&&n.isBoosting;h=!(!h||!b);n=c&&!c.stickyTracking?[c]:a.grep(d,function(a){return a.visible&&!(!f&&a.directTouch)&&m(a.options.enableMouseTracking,!0)&&a.stickyTracking});c=(k=h?b:this.findNearestKDPoint(n,f,l))&&k.series;k&&(f&&!c.noSharedTooltip?(n=a.grep(d,function(a){return a.visible&&!(!f&&a.directTouch)&&m(a.options.enableMouseTracking, -!0)&&!a.noSharedTooltip}),r(n,function(a){var b=w(a.points,function(a){return a.x===k.x&&!a.isNull});e(b)&&(x&&(b=a.getPoint(b)),z.push(b))})):z.push(k));return{hoverPoint:k,hoverSeries:c,hoverPoints:z}},runPointActions:function(b,c){var d=this.chart,k=d.tooltip&&d.tooltip.options.enabled?d.tooltip:void 0,e=k?k.shared:!1,h=c||d.hoverPoint,f=h&&h.series||d.hoverSeries,f=this.getHoverData(h,f,d.series,!!c||f&&f.directTouch&&this.isDirectTouch,e,b,{isBoosting:d.isBoosting}),l,h=f.hoverPoint;l=f.hoverPoints; -c=(f=f.hoverSeries)&&f.tooltipOptions.followPointer;e=e&&f&&!f.noSharedTooltip;if(h&&(h!==d.hoverPoint||k&&k.isHidden)){r(d.hoverPoints||[],function(b){-1===a.inArray(b,l)&&b.setState()});r(l||[],function(a){a.setState("hover")});if(d.hoverSeries!==f)f.onMouseOver();d.hoverPoint&&d.hoverPoint.firePointEvent("mouseOut");if(!h.series)return;h.firePointEvent("mouseOver");d.hoverPoints=l;d.hoverPoint=h;k&&k.refresh(e?l:h,b)}else c&&k&&!k.isHidden&&(h=k.getAnchor([{}],b),k.updatePosition({plotX:h[0],plotY:h[1]})); -this.unDocMouseMove||(this.unDocMouseMove=E(d.container.ownerDocument,"mousemove",function(b){var c=H[a.hoverChartIndex];if(c)c.pointer.onDocumentMouseMove(b)}));r(d.axes,function(c){var d=m(c.crosshair.snap,!0),k=d?a.find(l,function(a){return a.series[c.coll]===c}):void 0;k||!d?c.drawCrosshair(b,k):c.hideCrosshair()})},reset:function(a,c){var b=this.chart,k=b.hoverSeries,e=b.hoverPoint,h=b.hoverPoints,m=b.tooltip,f=m&&m.shared?h:e;a&&f&&r(d(f),function(b){b.series.isCartesian&&void 0===b.plotX&& -(a=!1)});if(a)m&&f&&(m.refresh(f),e&&(e.setState(e.state,!0),r(b.axes,function(a){a.crosshair&&a.drawCrosshair(null,e)})));else{if(e)e.onMouseOut();h&&r(h,function(a){a.setState()});if(k)k.onMouseOut();m&&m.hide(c);this.unDocMouseMove&&(this.unDocMouseMove=this.unDocMouseMove());r(b.axes,function(a){a.hideCrosshair()});this.hoverX=b.hoverPoints=b.hoverPoint=null}},scaleGroups:function(a,c){var b=this.chart,d;r(b.series,function(k){d=a||k.getPlotBox();k.xAxis&&k.xAxis.zoomEnabled&&k.group&&(k.group.attr(d), -k.markerGroup&&(k.markerGroup.attr(d),k.markerGroup.clip(c?b.clipRect:null)),k.dataLabelsGroup&&k.dataLabelsGroup.attr(d))});b.clipRect.attr(c||b.clipBox)},dragStart:function(a){var b=this.chart;b.mouseIsDown=a.type;b.cancelClick=!1;b.mouseDownX=this.mouseDownX=a.chartX;b.mouseDownY=this.mouseDownY=a.chartY},drag:function(a){var b=this.chart,c=b.options.chart,d=a.chartX,e=a.chartY,h=this.zoomHor,m=this.zoomVert,f=b.plotLeft,l=b.plotTop,n=b.plotWidth,q=b.plotHeight,A,F=this.selectionMarker,G=this.mouseDownX, -g=this.mouseDownY,v=c.panKey&&a[c.panKey+"Key"];F&&F.touch||(df+n&&(d=f+n),el+q&&(e=l+q),this.hasDragged=Math.sqrt(Math.pow(G-d,2)+Math.pow(g-e,2)),10u.max&&(f=u.max-x,v=!0);v?(F-=.8*(F-m[b][0]),q||(g-=.8*(g-m[b][1])),l()):m[b]=[F,g];C||(h[b]=w-r,h[n]=x);h=C?1/t:t;e[n]=x;e[b]=f;p[C?a?"scaleY":"scaleX":"scale"+k]=t;p["translate"+k]=h*r+(F-h*A)},pinch:function(a){var n=this,r=n.chart,u=n.pinchDown,e=a.touches,h=e.length,m=n.lastValidTouch, -d=n.hasZoom,c=n.selectionMarker,b={},k=1===h&&(n.inClass(a.target,"highcharts-tracker")&&r.runTrackerClick||n.runChartClick),z={};1c-6&&h(q||c.spacingBox.width-2*t-d.x)&&(this.itemX=t,this.itemY+=F+this.lastLineHeight+A,this.lastLineHeight=0);this.maxItemWidth=Math.max(this.maxItemWidth,m);this.lastItemY=F+this.itemY+A;this.lastLineHeight=Math.max(b,this.lastLineHeight);a._legendItemPos=[this.itemX,this.itemY];e?this.itemX+=m:(this.itemY+=F+b+A,this.lastLineHeight=b);this.offsetWidth=q||Math.max((e?this.itemX-t-(a.checkbox?0:p):m)+t,this.offsetWidth)}, -getAllItems:function(){var a=[];f(this.chart.series,function(c){var b=c&&c.options;c&&w(b.showInLegend,p(b.linkedTo)?!1:void 0,!0)&&(a=a.concat(c.legendItems||("point"===b.legendType?c.data:c)))});return a},getAlignment:function(){var a=this.options;return a.floating?"":a.align.charAt(0)+a.verticalAlign.charAt(0)+a.layout.charAt(0)},adjustMargins:function(a,c){var b=this.chart,d=this.options,e=this.getAlignment();e&&f([/(lth|ct|rth)/,/(rtv|rm|rbv)/,/(rbh|cb|lbh)/,/(lbv|lm|ltv)/],function(k,h){k.test(e)&& -!p(a[h])&&(b[r[h]]=Math.max(b[r[h]],b.legend[(h+1)%2?"legendHeight":"legendWidth"]+[1,-1,-1,1][h]*d[h%2?"x":"y"]+w(d.margin,12)+c[h]+(0===h?b.titleOffset+b.options.title.margin:0)))})},render:function(){var a=this,c=a.chart,b=c.renderer,k=a.group,h,m,l,x,p=a.box,t=a.options,C=a.padding;a.itemX=C;a.itemY=a.initialItemY;a.offsetWidth=0;a.lastItemY=0;k||(a.group=k=b.g("legend").attr({zIndex:7}).add(),a.contentGroup=b.g().attr({zIndex:1}).add(k),a.scrollGroup=b.g().add(a.contentGroup));a.renderTitle(); -h=a.getAllItems();e(h,function(a,b){return(a.options&&a.options.legendIndex||0)-(b.options&&b.options.legendIndex||0)});t.reversed&&h.reverse();a.allItems=h;a.display=m=!!h.length;a.lastLineHeight=0;f(h,function(b){a.renderItem(b)});l=(t.width||a.offsetWidth)+C;x=a.lastItemY+a.lastLineHeight+a.titleHeight;x=a.handleOverflow(x);x+=C;p||(a.box=p=b.rect().addClass("highcharts-legend-box").attr({r:t.borderRadius}).add(k),p.isNew=!0);p.attr({stroke:t.borderColor,"stroke-width":t.borderWidth||0,fill:t.backgroundColor|| -"none"}).shadow(t.shadow);0b&&!1!==t.enabled?(this.clipHeight=l=Math.max(b-20-this.titleHeight-m,0),this.currentPage=w(this.currentPage,1),this.fullHeight=a,f(G,function(a,b){var c=a._legendItemPos[1],d=Math.round(a.legendItem.getBBox().height),g=A.length;if(!g||c-A[g-1]>l&&(F||c)!==A[g-1])A.push(F||c),g++;a.pageIx=g-1;F&&(G[b-1].pageIx=g-1);b===G.length-1&&c+d-A[g-1]>l&&(A.push(c),a.pageIx=g);c!==F&&(F=c)}),n||(n=c.clipRect=d.clipRect(0,m,9999,0),c.contentGroup.clip(n)),g(l),q||(this.nav=q=d.g().attr({zIndex:1}).add(this.group), -this.up=d.symbol("triangle",0,0,r,r).on("click",function(){c.scroll(-1,p)}).add(q),this.pager=d.text("",15,10).addClass("highcharts-legend-navigation").css(t.style).add(q),this.down=d.symbol("triangle-down",0,0,r,r).on("click",function(){c.scroll(1,p)}).add(q)),c.scroll(0),a=b):q&&(g(),this.nav=q.destroy(),this.scrollGroup.attr({translateY:1}),this.clipHeight=0);return a},scroll:function(a,c){var b=this.pages,d=b.length;a=this.currentPage+a;var e=this.clipHeight,h=this.options.navigation,f=this.pager, -m=this.padding;a>d&&(a=d);0b&&(f=typeof a[0],"string"===f?e.name=a[0]:"number"===f&&(e.x=a[0]),k++);l=d.value;)d=h[++f];d&&d.color&&!this.options.color&&(this.color=d.color);return d},destroy:function(){var a=this.series.chart,h=a.hoverPoints,f;a.pointCount--;h&&(this.setState(),p(h,this),h.length||(a.hoverPoints=null));if(this===a.hoverPoint)this.onMouseOut();if(this.graphic||this.dataLabel)u(this),this.destroyElements();this.legendItem&&a.legend.destroyItem(this);for(f in this)this[f]=null},destroyElements:function(){for(var a=["graphic","dataLabel", -"dataLabelUpper","connector","shadowGroup"],h,f=6;f--;)h=a[f],this[h]&&(this[h]=this[h].destroy())},getLabelConfig:function(){return{x:this.category,y:this.y,color:this.color,colorIndex:this.colorIndex,key:this.name||this.category,series:this.series,point:this,percentage:this.percentage,total:this.total||this.stackTotal}},tooltipFormatter:function(a){var e=this.series,f=e.tooltipOptions,d=w(f.valueDecimals,""),c=f.valuePrefix||"",b=f.valueSuffix||"";D(e.pointArrayMap||["y"],function(e){e="{point."+ -e;if(c||b)a=a.replace(e+"}",c+e+"}"+b);a=a.replace(e+"}",e+":,."+d+"f}")});return l(a,{point:this,series:this.series})},firePointEvent:function(a,h,m){var d=this,c=this.series.options;(c.point.events[a]||d.options&&d.options.events&&d.options.events[a])&&this.importEvents();"click"===a&&c.allowPointSelect&&(m=function(a){d.select&&d.select(null,a.ctrlKey||a.metaKey||a.shiftKey)});f(this,a,h,m)},visible:!0}})(M);(function(a){var E=a.addEvent,D=a.animObject,H=a.arrayMax,p=a.arrayMin,f=a.correctFloat, -l=a.Date,r=a.defaultOptions,n=a.defaultPlotOptions,w=a.defined,u=a.each,e=a.erase,h=a.extend,m=a.fireEvent,d=a.grep,c=a.isArray,b=a.isNumber,k=a.isString,z=a.merge,B=a.objectEach,I=a.pick,x=a.removeEvent,K=a.splat,t=a.SVGElement,C=a.syncTimeout,N=a.win;a.Series=a.seriesType("line",null,{lineWidth:2,allowPointSelect:!1,showCheckbox:!1,animation:{duration:1E3},events:{},marker:{lineWidth:0,lineColor:"#ffffff",radius:4,states:{hover:{animation:{duration:50},enabled:!0,radiusPlus:2,lineWidthPlus:1},select:{fillColor:"#cccccc", -lineColor:"#000000",lineWidth:2}}},point:{events:{}},dataLabels:{align:"center",formatter:function(){return null===this.y?"":a.numberFormat(this.y,-1)},style:{fontSize:"11px",fontWeight:"bold",color:"contrast",textOutline:"1px contrast"},verticalAlign:"bottom",x:0,y:0,padding:5},cropThreshold:300,pointRange:0,softThreshold:!0,states:{hover:{animation:{duration:50},lineWidthPlus:1,marker:{},halo:{size:10,opacity:.25}},select:{marker:{}}},stickyTracking:!0,turboThreshold:1E3,findNearestPointBy:"x"}, -{isCartesian:!0,pointClass:a.Point,sorted:!0,requireSorting:!0,directTouch:!1,axisTypes:["xAxis","yAxis"],colorCounter:0,parallelArrays:["x","y"],coll:"series",init:function(a,b){var c=this,d,g=a.series,e;c.chart=a;c.options=b=c.setOptions(b);c.linkedSeries=[];c.bindAxes();h(c,{name:b.name,state:"",visible:!1!==b.visible,selected:!0===b.selected});d=b.events;B(d,function(a,b){E(c,b,a)});if(d&&d.click||b.point&&b.point.events&&b.point.events.click||b.allowPointSelect)a.runTrackerClick=!0;c.getColor(); -c.getSymbol();u(c.parallelArrays,function(a){c[a+"Data"]=[]});c.setData(b.data,!1);c.isCartesian&&(a.hasCartesianSeries=!0);g.length&&(e=g[g.length-1]);c._i=I(e&&e._i,-1)+1;a.orderSeries(this.insert(g))},insert:function(a){var c=this.options.index,d;if(b(c)){for(d=a.length;d--;)if(c>=I(a[d].options.index,a[d]._i)){a.splice(d+1,0,this);break}-1===d&&a.unshift(this);d+=1}else a.push(this);return I(d,a.length-1)},bindAxes:function(){var b=this,c=b.options,d=b.chart,e;u(b.axisTypes||[],function(g){u(d[g], -function(a){e=a.options;if(c[g]===e.index||void 0!==c[g]&&c[g]===e.id||void 0===c[g]&&0===e.index)b.insert(a.series),b[g]=a,a.isDirty=!0});b[g]||b.optionalAxis===g||a.error(18,!0)})},updateParallelArrays:function(a,c){var d=a.series,e=arguments,g=b(c)?function(b){var g="y"===b&&d.toYData?d.toYData(a):a[b];d[b+"Data"][c]=g}:function(a){Array.prototype[c].apply(d[a+"Data"],Array.prototype.slice.call(e,2))};u(d.parallelArrays,g)},autoIncrement:function(){var b=this.options,c=this.xIncrement,d,e=b.pointIntervalUnit, -g=0,c=I(c,b.pointStart,0);this.pointInterval=d=I(this.pointInterval,b.pointInterval,1);e&&(b=new l(c),"day"===e?b=+b[l.hcSetDate](b[l.hcGetDate]()+d):"month"===e?b=+b[l.hcSetMonth](b[l.hcGetMonth]()+d):"year"===e&&(b=+b[l.hcSetFullYear](b[l.hcGetFullYear]()+d)),l.hcHasTimeZone&&(g=a.getTZOffset(b)-a.getTZOffset(c)),d=b-c+g);this.xIncrement=c+d;return c},setOptions:function(a){var b=this.chart,c=b.options,d=c.plotOptions,g=(b.userOptions||{}).plotOptions||{},e=d[this.type];this.userOptions=a;b=z(e, -d.series,a);this.tooltipOptions=z(r.tooltip,r.plotOptions.series&&r.plotOptions.series.tooltip,r.plotOptions[this.type].tooltip,c.tooltip.userOptions,d.series&&d.series.tooltip,d[this.type].tooltip,a.tooltip);this.stickyTracking=I(a.stickyTracking,g[this.type]&&g[this.type].stickyTracking,g.series&&g.series.stickyTracking,this.tooltipOptions.shared&&!this.noSharedTooltip?!0:b.stickyTracking);null===e.marker&&delete b.marker;this.zoneAxis=b.zoneAxis;a=this.zones=(b.zones||[]).slice();!b.negativeColor&& -!b.negativeFillColor||b.zones||a.push({value:b[this.zoneAxis+"Threshold"]||b.threshold||0,className:"highcharts-negative",color:b.negativeColor,fillColor:b.negativeFillColor});a.length&&w(a[a.length-1].value)&&a.push({color:this.color,fillColor:this.fillColor});return b},getCyclic:function(a,b,c){var d,g=this.chart,e=this.userOptions,k=a+"Index",h=a+"Counter",q=c?c.length:I(g.options.chart[a+"Count"],g[a+"Count"]);b||(d=I(e[k],e["_"+k]),w(d)||(g.series.length||(g[h]=0),e["_"+k]=d=g[h]%q,g[h]+=1), -c&&(b=c[d]));void 0!==d&&(this[k]=d);this[a]=b},getColor:function(){this.options.colorByPoint?this.options.color=null:this.getCyclic("color",this.options.color||n[this.type].color,this.chart.options.colors)},getSymbol:function(){this.getCyclic("symbol",this.options.marker.symbol,this.chart.options.symbols)},drawLegendSymbol:a.LegendSymbolMixin.drawLineMarker,setData:function(d,e,h,f){var g=this,q=g.points,m=q&&q.length||0,l,A=g.options,t=g.chart,x=null,n=g.xAxis,p=A.turboThreshold,z=this.xData,F= -this.yData,C=(l=g.pointArrayMap)&&l.length;d=d||[];l=d.length;e=I(e,!0);if(!1!==f&&l&&m===l&&!g.cropped&&!g.hasGroupedData&&g.visible)u(d,function(a,b){q[b].update&&a!==A.data[b]&&q[b].update(a,!1,null,!1)});else{g.xIncrement=null;g.colorCounter=0;u(this.parallelArrays,function(a){g[a+"Data"].length=0});if(p&&l>p){for(h=0;null===x&&hf||this.forceCrop))if(c[e-1]z)c=[],d=[];else if(c[0]z)g=this.cropData(this.xData,this.yData,p,z),c=g.xData,d=g.yData,g=g.start,k=!0;for(f=c.length|| -1;--f;)e=x?m(c[f])-m(c[f-1]):c[f]-c[f-1],0e&&n&&(a.error(15),n=!1);this.cropped=k;this.cropStart=g;this.processedXData=c;this.processedYData=d;this.closestPointRange=h},cropData:function(a,b,c,d){var g=a.length,e=0,k=g,h=I(this.cropShoulder,1),f;for(f=0;f=c){e=Math.max(0,f-h);break}for(c=f;cd){k=c+h;break}return{xData:a.slice(e,k),yData:b.slice(e,k),start:e,end:k}},generatePoints:function(){var a=this.options,b=a.data,c=this.data,d,g=this.processedXData, -e=this.processedYData,k=this.pointClass,h=g.length,f=this.cropStart||0,m,l=this.hasGroupedData,a=a.keys,t,x=[],n;c||l||(c=[],c.length=b.length,c=this.data=c);a&&l&&(this.options.keys=!1);for(n=0;n=f&&(e[n-1]||l)<=q,m&&l)if(m=t.length)for(;m--;)"number"===typeof t[m]&&(g[h++]=t[m]);else g[h++]=t;this.dataMin= -p(g);this.dataMax=H(g)},translate:function(){this.processedXData||this.processData();this.generatePoints();var a=this.options,c=a.stacking,d=this.xAxis,e=d.categories,g=this.yAxis,k=this.points,h=k.length,m=!!this.modifyValue,l=a.pointPlacement,t="between"===l||b(l),n=a.threshold,x=a.startFromThreshold?n:0,p,z,C,r,u=Number.MAX_VALUE;"between"===l&&(l=.5);b(l)&&(l*=I(a.pointRange||d.pointRange));for(a=0;a=K&&(B.isNull=!0);B.plotX=p=f(Math.min(Math.max(-1E5,d.translate(N,0,0,0,1,l,"flags"===this.type)),1E5));c&&this.visible&&!B.isNull&&D&&D[N]&&(r=this.getStackIndicator(r,N,this.index),E=D[N],K=E.points[r.key],z=K[0],K=K[1],z===x&&r.key===D[N].base&&(z=I(n,g.min)),g.positiveValuesOnly&&0>=z&&(z=null),B.total=B.stackTotal=E.total,B.percentage=E.total&&B.y/E.total*100,B.stackY=K,E.setOffset(this.pointXOffset||0,this.barW||0));B.yBottom=w(z)?g.translate(z,0,1,0,1): -null;m&&(K=this.modifyValue(K,B));B.plotY=z="number"===typeof K&&Infinity!==K?Math.min(Math.max(-1E5,g.translate(K,0,1,0,1)),1E5):void 0;B.isInside=void 0!==z&&0<=z&&z<=g.len&&0<=p&&p<=d.len;B.clientX=t?f(d.translate(N,0,0,0,1,l)):p;B.negative=B.y<(n||0);B.category=e&&void 0!==e[B.x]?e[B.x]:B.x;B.isNull||(void 0!==C&&(u=Math.min(u,Math.abs(p-C))),C=p);B.zone=this.zones.length&&B.getZone()}this.closestPointRangePx=u},getValidPoints:function(a,b){var c=this.chart;return d(a||this.points||[],function(a){return b&& -!c.isInsidePlot(a.plotX,a.plotY,c.inverted)?!1:!a.isNull})},setClip:function(a){var b=this.chart,c=this.options,d=b.renderer,g=b.inverted,e=this.clipBox,k=e||b.clipBox,h=this.sharedClipKey||["_sharedClip",a&&a.duration,a&&a.easing,k.height,c.xAxis,c.yAxis].join(),f=b[h],q=b[h+"m"];f||(a&&(k.width=0,g&&(k.x=b.plotSizeX),b[h+"m"]=q=d.clipRect(g?b.plotSizeX+99:-99,g?-b.plotLeft:-b.plotTop,99,g?b.chartWidth:b.chartHeight)),b[h]=f=d.clipRect(k),f.count={length:0});a&&!f.count[this.index]&&(f.count[this.index]= -!0,f.count.length+=1);!1!==c.clip&&(this.group.clip(a||e?f:b.clipRect),this.markerGroup.clip(q),this.sharedClipKey=h);a||(f.count[this.index]&&(delete f.count[this.index],--f.count.length),0===f.count.length&&h&&b[h]&&(e||(b[h]=b[h].destroy()),b[h+"m"]&&(b[h+"m"]=b[h+"m"].destroy())))},animate:function(a){var b=this.chart,c=D(this.options.animation),d;a?this.setClip(c):(d=this.sharedClipKey,(a=b[d])&&a.animate({width:b.plotSizeX,x:0},c),b[d+"m"]&&b[d+"m"].animate({width:b.plotSizeX+99,x:0},c),this.animate= -null)},afterAnimate:function(){this.setClip();m(this,"afterAnimate");this.finishedAnimating=!0},drawPoints:function(){var a=this.points,b=this.chart,c,d,g,e,k=this.options.marker,h,f,l,m=this[this.specialGroup]||this.markerGroup,t,n=I(k.enabled,this.xAxis.isRadial?!0:null,this.closestPointRangePx>=2*k.radius);if(!1!==k.enabled||this._hasPointMarkers)for(c=0;ce&&b.shadow));k&&(k.startX=c.xMap,k.isArea=c.isArea)})}, -applyZones:function(){var a=this,b=this.chart,c=b.renderer,d=this.zones,e,k,h=this.clips||[],f,m=this.graph,l=this.area,t=Math.max(b.chartWidth,b.chartHeight),n=this[(this.zoneAxis||"y")+"Axis"],x,p,z=b.inverted,C,r,w,B,K=!1;d.length&&(m||l)&&n&&void 0!==n.min&&(p=n.reversed,C=n.horiz,m&&m.hide(),l&&l.hide(),x=n.getExtremes(),u(d,function(d,g){e=p?C?b.plotWidth:0:C?0:n.toPixels(x.min);e=Math.min(Math.max(I(k,e),0),t);k=Math.min(Math.max(Math.round(n.toPixels(I(d.value,x.max),!0)),0),t);K&&(e=k=n.toPixels(x.max)); -r=Math.abs(e-k);w=Math.min(e,k);B=Math.max(e,k);n.isXAxis?(f={x:z?B:w,y:0,width:r,height:t},C||(f.x=b.plotHeight-f.x)):(f={x:0,y:z?B:w,width:t,height:r},C&&(f.y=b.plotWidth-f.y));z&&c.isVML&&(f=n.isXAxis?{x:0,y:p?w:B,height:f.width,width:b.chartWidth}:{x:f.y-b.plotLeft-b.spacingBox.x,y:0,width:f.height,height:b.chartHeight});h[g]?h[g].animate(f):(h[g]=c.clipRect(f),m&&a["zone-graph-"+g].clip(h[g]),l&&a["zone-area-"+g].clip(h[g]));K=d.value>x.max}),this.clips=h)},invertGroups:function(a){function b(){u(["group", -"markerGroup"],function(b){c[b]&&(d.renderer.isVML&&c[b].attr({width:c.yAxis.len,height:c.xAxis.len}),c[b].width=c.yAxis.len,c[b].height=c.xAxis.len,c[b].invert(a))})}var c=this,d=c.chart,e;c.xAxis&&(e=E(d,"resize",b),E(c,"destroy",e),b(a),c.invertGroups=b)},plotGroup:function(a,b,c,d,e){var g=this[a],k=!g;k&&(this[a]=g=this.chart.renderer.g().attr({zIndex:d||.1}).add(e));g.addClass("highcharts-"+b+" highcharts-series-"+this.index+" highcharts-"+this.type+"-series "+(w(this.colorIndex)?"highcharts-color-"+ -this.colorIndex+" ":"")+(this.options.className||"")+(g.hasClass("highcharts-tracker")?" highcharts-tracker":""),!0);g.attr({visibility:c})[k?"attr":"animate"](this.getPlotBox());return g},getPlotBox:function(){var a=this.chart,b=this.xAxis,c=this.yAxis;a.inverted&&(b=c,c=this.xAxis);return{translateX:b?b.left:a.plotLeft,translateY:c?c.top:a.plotTop,scaleX:1,scaleY:1}},render:function(){var a=this,b=a.chart,c,d=a.options,e=!!a.animate&&b.renderer.isSVG&&D(d.animation).duration,k=a.visible?"inherit": -"hidden",h=d.zIndex,f=a.hasRendered,m=b.seriesGroup,l=b.inverted;c=a.plotGroup("group","series",k,h,m);a.markerGroup=a.plotGroup("markerGroup","markers",k,h,m);e&&a.animate(!0);c.inverted=a.isCartesian?l:!1;a.drawGraph&&(a.drawGraph(),a.applyZones());a.drawDataLabels&&a.drawDataLabels();a.visible&&a.drawPoints();a.drawTracker&&!1!==a.options.enableMouseTracking&&a.drawTracker();a.invertGroups(l);!1===d.clip||a.sharedClipKey||f||c.clip(b.clipRect);e&&a.animate();f||(a.animationTimeout=C(function(){a.afterAnimate()}, -e));a.isDirty=!1;a.hasRendered=!0},redraw:function(){var a=this.chart,b=this.isDirty||this.isDirtyData,c=this.group,d=this.xAxis,e=this.yAxis;c&&(a.inverted&&c.attr({width:a.plotWidth,height:a.plotHeight}),c.animate({translateX:I(d&&d.left,a.plotLeft),translateY:I(e&&e.top,a.plotTop)}));this.translate();this.render();b&&delete this.kdTree},kdAxisArray:["clientX","plotY"],searchPoint:function(a,b){var c=this.xAxis,d=this.yAxis,e=this.chart.inverted;return this.searchKDTree({clientX:e?c.len-a.chartY+ -c.pos:a.chartX-c.pos,plotY:e?d.len-a.chartX+d.pos:a.chartY-d.pos},b)},buildKDTree:function(){function a(c,d,e){var g,k;if(k=c&&c.length)return g=b.kdAxisArray[d%e],c.sort(function(a,b){return a[g]-b[g]}),k=Math.floor(k/2),{point:c[k],left:a(c.slice(0,k),d+1,e),right:a(c.slice(k+1),d+1,e)}}this.buildingKdTree=!0;var b=this,c=-1l?"left":"right";t=0>l?"right":"left";b[q]&&(q=c(a,b[q],g+1,f),n=q[h]x;)q--;this.updateParallelArrays(m,"splice",q,0,0);this.updateParallelArrays(m,q);g&&m.name&&(g[x]=m.name);l.splice(q,0,a);n&&(this.data.splice(q,0,null),this.processData());"point"===e.legendType&&this.generatePoints();c&&(h[0]&&h[0].remove?h[0].remove(!1):(h.shift(),this.updateParallelArrays(m,"shift"),l.shift()));this.isDirtyData=this.isDirty=!0;b&&f.redraw(d)},removePoint:function(a,b,c){var d=this,e=d.data,h=e[a],f=d.points,g=d.chart,l=function(){f&&f.length===e.length&& -f.splice(a,1);e.splice(a,1);d.options.data.splice(a,1);d.updateParallelArrays(h||{series:d},"splice",a,1);h&&h.destroy();d.isDirty=!0;d.isDirtyData=!0;b&&g.redraw()};x(c,g);b=k(b,!0);h?h.firePointEvent("remove",null,l):l()},remove:function(a,b,c){function d(){e.destroy();h.isDirtyLegend=h.isDirtyBox=!0;h.linkSeries();k(a,!0)&&h.redraw(b)}var e=this,h=e.chart;!1!==c?u(e,"remove",null,d):d()},update:function(a,b){var d=this,e=d.chart,h=d.userOptions,f=d.oldType||d.type,l=a.type||h.type||e.options.chart.type, -g=I[f].prototype,m,n=["group","markerGroup","dataLabelsGroup"],t=["navigatorSeries","baseSeries"],x=d.finishedAnimating&&{animation:!1};if(Object.keys&&"data"===Object.keys(a).toString())return this.setData(a.data,b);t=n.concat(t);r(t,function(a){t[a]=d[a];delete d[a]});a=c(h,x,{index:d.index,pointStart:d.xData[0]},{data:d.options.data},a);d.remove(!1,null,!1);for(m in g)d[m]=void 0;w(d,I[l||f].prototype);r(t,function(a){d[a]=t[a]});d.init(e,a);a.zIndex!==h.zIndex&&r(n,function(b){d[b]&&d[b].attr({zIndex:a.zIndex})}); -d.oldType=f;e.linkSeries();k(b,!0)&&e.redraw(!1)}});w(H.prototype,{update:function(a,b){var d=this.chart;a=d.options[this.coll][this.options.index]=c(this.userOptions,a);this.destroy(!0);this.init(d,w(a,{events:void 0}));d.isDirtyBox=!0;k(b,!0)&&d.redraw()},remove:function(a){for(var b=this.chart,c=this.coll,e=this.series,h=e.length;h--;)e[h]&&e[h].remove(!1);n(b.axes,this);n(b[c],this);d(b.options[c])?b.options[c].splice(this.options.index,1):delete b.options[c];r(b[c],function(a,b){a.options.index= -b});this.destroy();b.isDirtyBox=!0;k(a,!0)&&b.redraw()},setTitle:function(a,b){this.update({title:a},b)},setCategories:function(a,b){this.update({categories:a},b)}})})(M);(function(a){var E=a.color,D=a.each,H=a.map,p=a.pick,f=a.Series,l=a.seriesType;l("area","line",{softThreshold:!1,threshold:0},{singleStacks:!1,getStackPoints:function(f){var l=[],r=[],u=this.xAxis,e=this.yAxis,h=e.stacks[this.stackKey],m={},d=this.index,c=e.series,b=c.length,k,z=p(e.options.reversedStacks,!0)?1:-1,B;f=f||this.points; -if(this.options.stacking){for(B=0;Ba&&w>l?(w=Math.max(a,l),e=2*l-w):wp&&e>l?(e=Math.max(p,l),w=2*l-e):e=Math.abs(h)&&.5a.closestPointRange*a.xAxis.transA,d=a.borderWidth=r(f.borderWidth,d?0:1),c=a.yAxis,b=f.threshold,k=a.translatedThreshold=c.getThreshold(b),l=r(f.minPointLength,5),p=a.getColumnMetrics(),u=p.width,x=a.barW=Math.max(u,1+2*d),w=a.pointXOffset=p.offset;h.inverted&&(k-=.5);f.pointPadding&&(x=Math.ceil(x));n.prototype.translate.apply(a);H(a.points,function(d){var e=r(d.yBottom,k),f=999+Math.abs(e),f=Math.min(Math.max(-f,d.plotY),c.len+f),m=d.plotX+w,n=x,t=Math.min(f,e),p,g=Math.max(f,e)-t;l&& -Math.abs(g)l?e-l:k-(p?l:0));d.barX=m;d.pointWidth=u;d.tooltipPos=h.inverted?[c.len+c.pos-h.plotLeft-f,a.xAxis.len-m-n/2,g]:[m+n/2,f+c.pos-h.plotTop,g];d.shapeType="rect";d.shapeArgs=a.crispCol.apply(a,d.isNull?[m,k,n,0]:[m,t,n,g])})},getSymbol:a.noop,drawLegendSymbol:a.LegendSymbolMixin.drawRectangle,drawGraph:function(){this.group[this.dense?"addClass":"removeClass"]("highcharts-dense-data")}, -pointAttribs:function(a,f){var e=this.options,d,c=this.pointAttrToOptions||{};d=c.stroke||"borderColor";var b=c["stroke-width"]||"borderWidth",k=a&&a.color||this.color,h=a&&a[d]||e[d]||this.color||k,n=a&&a[b]||e[b]||this[b]||0,c=e.dashStyle;a&&this.zones.length&&(k=a.getZone(),k=a.options.color||k&&k.color||this.color);f&&(a=l(e.states[f],a.options.states&&a.options.states[f]||{}),f=a.brightness,k=a.color||void 0!==f&&D(k).brighten(a.brightness).get()||k,h=a[d]||h,n=a[b]||n,c=a.dashStyle||c);d={fill:k, -stroke:h,"stroke-width":n};c&&(d.dashstyle=c);return d},drawPoints:function(){var a=this,h=this.chart,m=a.options,d=h.renderer,c=m.animationLimit||250,b;H(a.points,function(e){var k=e.graphic;if(f(e.plotY)&&null!==e.y){b=e.shapeArgs;if(k)k[h.pointCounte;++e)h=w[e],a=2>e||2===e&&/%$/.test(h),w[e]=p(h,[n,l,u,w[2]][e])+(a?r:0);w[3]>w[2]&&(w[3]=w[2]);return w},getStartAndEndRadians:function(a,l){a=D(a)?a:0;l=D(l)&&l>a&&360>l-a?l:a+360;return{start:E*(a+-90),end:E*(l+-90)}}}})(M);(function(a){var E=a.addEvent,D=a.CenteredSeriesMixin,H=a.defined,p=a.each,f=a.extend,l=D.getStartAndEndRadians,r=a.inArray,n=a.noop,w=a.pick,u=a.Point,e=a.Series,h=a.seriesType,m=a.setAnimation;h("pie","line",{center:[null,null],clip:!1,colorByPoint:!0,dataLabels:{distance:30, -enabled:!0,formatter:function(){return this.point.isNull?void 0:this.point.name},x:0},ignoreHiddenPoint:!0,legendType:"point",marker:null,size:null,showInLegend:!1,slicedOffset:10,stickyTracking:!1,tooltip:{followPointer:!0},borderColor:"#ffffff",borderWidth:1,states:{hover:{brightness:.1,shadow:!1}}},{isCartesian:!1,requireSorting:!1,directTouch:!0,noSharedTooltip:!0,trackerGroups:["group","dataLabelsGroup"],axisTypes:[],pointAttribs:a.seriesTypes.column.prototype.pointAttribs,animate:function(a){var c= -this,b=c.points,d=c.startAngleRad;a||(p(b,function(a){var b=a.graphic,e=a.shapeArgs;b&&(b.attr({r:a.startR||c.center[3]/2,start:d,end:d}),b.animate({r:e.r,start:e.start,end:e.end},c.options.animation))}),c.animate=null)},updateTotals:function(){var a,c=0,b=this.points,e=b.length,f,h=this.options.ignoreHiddenPoint;for(a=0;a1.5*Math.PI?m-=2*Math.PI:m<-Math.PI/2&&(m+=2*Math.PI);G.slicedTranslation={translateX:Math.round(Math.cos(m)*d),translateY:Math.round(Math.sin(m)*d)};h=Math.cos(m)*a[2]/ -2;u=Math.sin(m)*a[2]/2;G.tooltipPos=[a[0]+.7*h,a[1]+.7*u];G.half=m<-Math.PI/2||m>Math.PI/2?1:0;G.angle=m;f=Math.min(e,G.labelDistance/5);G.labelPos=[a[0]+h+Math.cos(m)*G.labelDistance,a[1]+u+Math.sin(m)*G.labelDistance,a[0]+h+Math.cos(m)*f,a[1]+u+Math.sin(m)*f,a[0]+h,a[1]+u,0>G.labelDistance?"center":G.half?"right":"left",m]}},drawGraph:null,drawPoints:function(){var a=this,c=a.chart.renderer,b,e,h,l,m=a.options.shadow;m&&!a.shadowGroup&&(a.shadowGroup=c.g("shadow").add(a.group));p(a.points,function(d){e= -d.graphic;if(d.isNull)e&&(d.graphic=e.destroy());else{l=d.shapeArgs;b=d.getTranslate();var k=d.shadowGroup;m&&!k&&(k=d.shadowGroup=c.g("shadow").add(a.shadowGroup));k&&k.attr(b);h=a.pointAttribs(d,d.selected&&"select");e?e.setRadialReference(a.center).attr(h).animate(f(l,b)):(d.graphic=e=c[d.shapeType](l).setRadialReference(a.center).attr(b).add(a.group),d.visible||e.attr({visibility:"hidden"}),e.attr(h).attr({"stroke-linejoin":"round"}).shadow(m,k));e.addClass(d.getClassName())}})},searchPoint:n, -sortByAngle:function(a,c){a.sort(function(a,d){return void 0!==a.angle&&(d.angle-a.angle)*c})},drawLegendSymbol:a.LegendSymbolMixin.drawRectangle,getCenter:D.getCenter,getSymbol:n},{init:function(){u.prototype.init.apply(this,arguments);var a=this,c;a.name=w(a.name,"Slice");c=function(b){a.slice("select"===b.type)};E(a,"select",c);E(a,"unselect",c);return a},isValid:function(){return a.isNumber(this.y,!0)&&0<=this.y},setVisible:function(a,c){var b=this,d=b.series,e=d.chart,f=d.options.ignoreHiddenPoint; -c=w(c,f);a!==b.visible&&(b.visible=b.options.visible=a=void 0===a?!b.visible:a,d.options.data[r(b,d.data)]=b.options,p(["graphic","dataLabel","connector","shadowGroup"],function(c){if(b[c])b[c][a?"show":"hide"](!0)}),b.legendItem&&e.legend.colorizeItem(b,a),a||"hover"!==b.state||b.setState(""),f&&(d.isDirty=!0),c&&e.redraw())},slice:function(a,c,b){var d=this.series;m(b,d.chart);w(c,!0);this.sliced=this.options.sliced=H(a)?a:!this.sliced;d.options.data[r(this,d.data)]=this.options;this.graphic.animate(this.getTranslate()); -this.shadowGroup&&this.shadowGroup.animate(this.getTranslate())},getTranslate:function(){return this.sliced?this.slicedTranslation:{translateX:0,translateY:0}},haloPath:function(a){var c=this.shapeArgs;return this.sliced||!this.visible?[]:this.series.chart.renderer.symbols.arc(c.x,c.y,c.r+a,c.r+a,{innerR:this.shapeArgs.r-1,start:c.start,end:c.end})}})})(M);(function(a){var E=a.addEvent,D=a.arrayMax,H=a.defined,p=a.each,f=a.extend,l=a.format,r=a.map,n=a.merge,w=a.noop,u=a.pick,e=a.relativeLength,h= -a.Series,m=a.seriesTypes,d=a.stableSort;a.distribute=function(a,b){function c(a,b){return a.target-b.target}var e,f=!0,h=a,l=[],m;m=0;for(e=a.length;e--;)m+=a[e].size;if(m>b){d(a,function(a,b){return(b.rank||0)-(a.rank||0)});for(m=e=0;m<=b;)m+=a[e].size,e++;l=a.splice(e-1,a.length)}d(a,c);for(a=r(a,function(a){return{size:a.size,targets:[a.target],align:u(a.align,.5)}});f;){for(e=a.length;e--;)f=a[e],m=(Math.min.apply(0,f.targets)+Math.max.apply(0,f.targets))/2,f.pos=Math.min(Math.max(0,m-f.size* -f.align),b-f.size);e=a.length;for(f=!1;e--;)0a[e].pos&&(a[e-1].size+=a[e].size,a[e-1].targets=a[e-1].targets.concat(a[e].targets),a[e-1].align=.5,a[e-1].pos+a[e-1].size>b&&(a[e-1].pos=b-a[e-1].size),a.splice(e,1),f=!0)}e=0;p(a,function(a){var b=0;p(a.targets,function(){h[e].pos=a.pos+b;b+=h[e].size;e++})});h.push.apply(h,l);d(h,c)};h.prototype.drawDataLabels=function(){function c(a,b){var c=b.filter;return c?(b=c.operator,a=a[c.property],c=c.value,"\x3e"===b&&a>c||"\x3c"=== -b&&a=c||"\x3c\x3d"===b&&a<=c||"\x3d\x3d"===b&&a==c||"\x3d\x3d\x3d"===b&&a===c?!0:!1):!0}var b=this,d=b.options,e=d.dataLabels,f=b.points,h,m,r=b.hasRendered||0,t,w,D=u(e.defer,!!d.animation),q=b.chart.renderer;if(e.enabled||b._hasPointLabels)b.dlProcessOptions&&b.dlProcessOptions(e),w=b.plotGroup("dataLabelsGroup","data-labels",D&&!r?"hidden":"visible",e.zIndex||6),D&&(w.attr({opacity:+r}),r||E(b,"afterAnimate",function(){b.visible&&w.show(!0);w[d.animation?"animate":"attr"]({opacity:1}, -{duration:200})})),m=e,p(f,function(f){var k,p=f.dataLabel,g,x,r=f.connector,z=!p,C;h=f.dlOptions||f.options&&f.options.dataLabels;(k=u(h&&h.enabled,m.enabled)&&!f.isNull)&&(k=!0===c(f,h||e));k&&(e=n(m,h),g=f.getLabelConfig(),C=e[f.formatPrefix+"Format"]||e.format,t=H(C)?l(C,g):(e[f.formatPrefix+"Formatter"]||e.formatter).call(g,e),C=e.style,g=e.rotation,C.color=u(e.color,C.color,b.color,"#000000"),"contrast"===C.color&&(f.contrastColor=q.getContrast(f.color||b.color),C.color=e.inside||0>u(f.labelDistance, -e.distance)||d.stacking?f.contrastColor:"#000000"),d.cursor&&(C.cursor=d.cursor),x={fill:e.backgroundColor,stroke:e.borderColor,"stroke-width":e.borderWidth,r:e.borderRadius||0,rotation:g,padding:e.padding,zIndex:1},a.objectEach(x,function(a,b){void 0===a&&delete x[b]}));!p||k&&H(t)?k&&H(t)&&(p?x.text=t:(p=f.dataLabel=g?q.text(t,0,-9999).addClass("highcharts-data-label"):q.label(t,0,-9999,e.shape,null,null,e.useHTML,null,"data-label"),p.addClass(" highcharts-data-label-color-"+f.colorIndex+" "+(e.className|| -"")+(e.useHTML?"highcharts-tracker":""))),p.attr(x),p.css(C).shadow(e.shadow),p.added||p.add(w),b.alignDataLabel(f,p,e,null,z)):(f.dataLabel=p=p.destroy(),r&&(f.connector=r.destroy()))})};h.prototype.alignDataLabel=function(a,b,d,e,h){var c=this.chart,k=c.inverted,l=u(a.dlBox&&a.dlBox.centerX,a.plotX,-9999),m=u(a.plotY,-9999),n=b.getBBox(),p,q=d.rotation,r=d.align,w=this.visible&&(a.series.forceDL||c.isInsidePlot(l,Math.round(m),k)||e&&c.isInsidePlot(l,k?e.x+1:e.y+e.height-1,k)),z="justify"===u(d.overflow, -"justify");if(w&&(p=d.style.fontSize,p=c.renderer.fontMetrics(p,b).b,e=f({x:k?this.yAxis.len-m:l,y:Math.round(k?this.xAxis.len-l:m),width:0,height:0},e),f(d,{width:n.width,height:n.height}),q?(z=!1,l=c.renderer.rotCorr(p,q),l={x:e.x+d.x+e.width/2+l.x,y:e.y+d.y+{top:0,middle:.5,bottom:1}[d.verticalAlign]*e.height},b[h?"attr":"animate"](l).attr({align:r}),m=(q+720)%360,m=180m,"left"===r?l.y-=m?n.height:0:"center"===r?(l.x-=n.width/2,l.y-=n.height/2):"right"===r&&(l.x-=n.width,l.y-=m?0:n.height)): -(b.align(d,null,e),l=b.alignAttr),z?a.isLabelJustified=this.justifyDataLabel(b,d,l,n,e,h):u(d.crop,!0)&&(w=c.isInsidePlot(l.x,l.y)&&c.isInsidePlot(l.x+n.width,l.y+n.height)),d.shape&&!q))b[h?"attr":"animate"]({anchorX:k?c.plotWidth-a.plotY:a.plotX,anchorY:k?c.plotHeight-a.plotX:a.plotY});w||(b.attr({y:-9999}),b.placed=!1)};h.prototype.justifyDataLabel=function(a,b,d,e,f,h){var c=this.chart,k=b.align,l=b.verticalAlign,m,n,p=a.box?0:a.padding||0;m=d.x+p;0>m&&("right"===k?b.align="left":b.x=-m,n=!0); -m=d.x+e.width-p;m>c.plotWidth&&("left"===k?b.align="right":b.x=c.plotWidth-m,n=!0);m=d.y+p;0>m&&("bottom"===l?b.verticalAlign="top":b.y=-m,n=!0);m=d.y+e.height-p;m>c.plotHeight&&("top"===l?b.verticalAlign="bottom":b.y=c.plotHeight-m,n=!0);n&&(a.placed=!h,a.align(b,null,f));return n};m.pie&&(m.pie.prototype.drawDataLabels=function(){var c=this,b=c.data,d,e=c.chart,f=c.options.dataLabels,l=u(f.connectorPadding,10),m=u(f.connectorWidth,1),n=e.plotWidth,t=e.plotHeight,r,w=c.center,q=w[2]/2,A=w[1],F,G, -g,v,E=[[],[]],L,P,J,M,y=[0,0,0,0];c.visible&&(f.enabled||c._hasPointLabels)&&(p(b,function(a){a.dataLabel&&a.visible&&a.dataLabel.shortened&&(a.dataLabel.attr({width:"auto"}).css({width:"auto",textOverflow:"clip"}),a.dataLabel.shortened=!1)}),h.prototype.drawDataLabels.apply(c),p(b,function(a){a.dataLabel&&a.visible&&(E[a.half].push(a),a.dataLabel._pos=null)}),p(E,function(b,h){var k,m,x=b.length,r=[],z;if(x)for(c.sortByAngle(b,h-.5),0d.bottom-2?k:P,h,d),F._attr={visibility:J,align:g[6]},F._pos={x:L+f.x+({left:l,right:-l}[g[6]]||0),y:P+f.y-10},g.x=L,g.y=P,u(f.crop,!0)&&(G=F.getBBox().width,k=null,L-Gn-l&&(k=Math.round(L+G-n+l),y[1]=Math.max(k,y[1])),0>P-v/2?y[0]=Math.max(Math.round(-P+v/2),y[0]):P+v/2>t&&(y[2]=Math.max(Math.round(P+v/2-t),y[2])),F.sideOverflow=k)}),0===D(y)||this.verifyDataLabelOverflow(y))&&(this.placeDataLabels(), -m&&p(this.points,function(a){var b;r=a.connector;if((F=a.dataLabel)&&F._pos&&a.visible&&0u(this.translatedThreshold,k.yAxis.len)),p=u(d.inside,!!this.options.stacking);l&&(e=n(l),0>e.y&&(e.height+=e.y,e.y=0),l=e.y+e.height-k.yAxis.len,0a+c||e+hb+d||f+lthis.pointCount))},pan:function(a,b){var c=this,d=c.hoverPoints,e;d&&r(d,function(a){a.setState()});r("xy"===b?[1,0]:[1],function(b){b= -c[b?"xAxis":"yAxis"][0];var d=b.horiz,f=a[d?"chartX":"chartY"],d=d?"mouseDownX":"mouseDownY",h=c[d],g=(b.pointRange||0)/2,k=b.getExtremes(),l=b.toValue(h-f,!0)+g,m=b.toValue(h+b.len-f,!0)-g,n=m=l(n.minWidth,0)&&this.chartHeight>=l(n.minHeight,0)}).call(this)&&f.push(a._id)};E.prototype.currentOptions=function(l){function n(e,h,l,d){var c;a.objectEach(e,function(a,e){if(!d&&-1 parseInt(D.split('Firefox/')[1], 10); + return a.Highcharts + ? a.Highcharts.error(16, !0) + : { + product: 'Highcharts', + version: '6.0.4', + deg2rad: (2 * Math.PI) / 360, + doc: E, + hasBidiBug: l, + hasTouch: E && void 0 !== E.documentElement.ontouchstart, + isMS: p, + isWebKit: /AppleWebKit/.test(D), + isFirefox: f, + isTouchDevice: /(Mobile|Android|Windows Phone)/.test(D), + SVG_NS: 'http://www.w3.org/2000/svg', + chartCount: 0, + seriesTypes: {}, + symbolSizes: {}, + svg: H, + win: a, + marginNames: ['plotTop', 'marginRight', 'marginBottom', 'plotLeft'], + noop: function() {}, + charts: [], + }; + })(); + (function(a) { + a.timers = []; + var E = a.charts, + D = a.doc, + H = a.win; + a.error = function(p, f) { + p = a.isNumber(p) + ? 'Highcharts error #' + p + ': www.highcharts.com/errors/' + p + : p; + if (f) throw Error(p); + H.console && console.log(p); + }; + a.Fx = function(a, f, l) { + this.options = f; + this.elem = a; + this.prop = l; + }; + a.Fx.prototype = { + dSetter: function() { + var a = this.paths[0], + f = this.paths[1], + l = [], + r = this.now, + n = a.length, + w; + if (1 === r) l = this.toD; + else if (n === f.length && 1 > r) + for (; n--; ) + (w = parseFloat(a[n])), + (l[n] = isNaN(w) ? f[n] : r * parseFloat(f[n] - w) + w); + else l = f; + this.elem.attr('d', l, null, !0); + }, + update: function() { + var a = this.elem, + f = this.prop, + l = this.now, + r = this.options.step; + if (this[f + 'Setter']) this[f + 'Setter'](); + else + a.attr + ? a.element && a.attr(f, l, null, !0) + : (a.style[f] = l + this.unit); + r && r.call(a, l, this); + }, + run: function(p, f, l) { + var r = this, + n = r.options, + w = function(a) { + return w.stopped ? !1 : r.step(a); + }, + u = + H.requestAnimationFrame || + function(a) { + setTimeout(a, 13); + }, + e = function() { + for (var h = 0; h < a.timers.length; h++) + a.timers[h]() || a.timers.splice(h--, 1); + a.timers.length && u(e); + }; + p === f + ? (delete n.curAnim[this.prop], + n.complete && + 0 === a.keys(n.curAnim).length && + n.complete.call(this.elem)) + : ((this.startTime = +new Date()), + (this.start = p), + (this.end = f), + (this.unit = l), + (this.now = this.start), + (this.pos = 0), + (w.elem = this.elem), + (w.prop = this.prop), + w() && 1 === a.timers.push(w) && u(e)); + }, + step: function(p) { + var f = +new Date(), + l, + r = this.options, + n = this.elem, + w = r.complete, + u = r.duration, + e = r.curAnim; + n.attr && !n.element + ? (p = !1) + : p || f >= u + this.startTime + ? ((this.now = this.end), + (this.pos = 1), + this.update(), + (l = e[this.prop] = !0), + a.objectEach(e, function(a) { + !0 !== a && (l = !1); + }), + l && w && w.call(n), + (p = !1)) + : ((this.pos = r.easing((f - this.startTime) / u)), + (this.now = this.start + (this.end - this.start) * this.pos), + this.update(), + (p = !0)); + return p; + }, + initPath: function(p, f, l) { + function r(a) { + var b, c; + for (k = a.length; k--; ) + (b = 'M' === a[k] || 'L' === a[k]), + (c = /[a-zA-Z]/.test(a[k + 3])), + b && + c && + a.splice(k + 1, 0, a[k + 1], a[k + 2], a[k + 1], a[k + 2]); + } + function n(a, b) { + for (; a.length < c; ) { + a[0] = b[c - a.length]; + var e = a.slice(0, d); + [].splice.apply(a, [0, 0].concat(e)); + z && + ((e = a.slice(a.length - d)), + [].splice.apply(a, [a.length, 0].concat(e)), + k--); + } + a[0] = 'M'; + } + function w(a, k) { + for (var e = (c - a.length) / d; 0 < e && e--; ) + (b = a.slice().splice(a.length / B - d, d * B)), + (b[0] = k[c - d - e * d]), + m && ((b[d - 6] = b[d - 2]), (b[d - 5] = b[d - 1])), + [].splice.apply(a, [a.length / B, 0].concat(b)), + z && e--; + } + f = f || ''; + var u, + e = p.startX, + h = p.endX, + m = -1 < f.indexOf('C'), + d = m ? 7 : 3, + c, + b, + k; + f = f.split(' '); + l = l.slice(); + var z = p.isArea, + B = z ? 2 : 1, + I; + m && (r(f), r(l)); + if (e && h) { + for (k = 0; k < e.length; k++) + if (e[k] === h[0]) { + u = k; + break; + } else if (e[0] === h[h.length - e.length + k]) { + u = k; + I = !0; + break; + } + void 0 === u && (f = []); + } + f.length && + a.isNumber(u) && + ((c = l.length + u * B * d), + I ? (n(f, l), w(l, f)) : (n(l, f), w(f, l))); + return [f, l]; + }, + }; + a.Fx.prototype.fillSetter = a.Fx.prototype.strokeSetter = function() { + this.elem.attr( + this.prop, + a.color(this.start).tweenTo(a.color(this.end), this.pos), + null, + !0, + ); + }; + a.extend = function(a, f) { + var l; + a || (a = {}); + for (l in f) a[l] = f[l]; + return a; + }; + a.merge = function() { + var p, + f = arguments, + l, + r = {}, + n = function(l, p) { + 'object' !== typeof l && (l = {}); + a.objectEach(p, function(e, h) { + !a.isObject(e, !0) || a.isClass(e) || a.isDOMElement(e) + ? (l[h] = p[h]) + : (l[h] = n(l[h] || {}, e)); + }); + return l; + }; + !0 === f[0] && ((r = f[1]), (f = Array.prototype.slice.call(f, 2))); + l = f.length; + for (p = 0; p < l; p++) r = n(r, f[p]); + return r; + }; + a.pInt = function(a, f) { + return parseInt(a, f || 10); + }; + a.isString = function(a) { + return 'string' === typeof a; + }; + a.isArray = function(a) { + a = Object.prototype.toString.call(a); + return '[object Array]' === a || '[object Array Iterator]' === a; + }; + a.isObject = function(p, f) { + return !!p && 'object' === typeof p && (!f || !a.isArray(p)); + }; + a.isDOMElement = function(p) { + return a.isObject(p) && 'number' === typeof p.nodeType; + }; + a.isClass = function(p) { + var f = p && p.constructor; + return !( + !a.isObject(p, !0) || + a.isDOMElement(p) || + !f || + !f.name || + 'Object' === f.name + ); + }; + a.isNumber = function(a) { + return ( + 'number' === typeof a && !isNaN(a) && Infinity > a && -Infinity < a + ); + }; + a.erase = function(a, f) { + for (var l = a.length; l--; ) + if (a[l] === f) { + a.splice(l, 1); + break; + } + }; + a.defined = function(a) { + return void 0 !== a && null !== a; + }; + a.attr = function(p, f, l) { + var r; + a.isString(f) + ? a.defined(l) + ? p.setAttribute(f, l) + : p && p.getAttribute && (r = p.getAttribute(f)) + : a.defined(f) && + a.isObject(f) && + a.objectEach(f, function(a, l) { + p.setAttribute(l, a); + }); + return r; + }; + a.splat = function(p) { + return a.isArray(p) ? p : [p]; + }; + a.syncTimeout = function(a, f, l) { + if (f) return setTimeout(a, f, l); + a.call(0, l); + }; + a.pick = function() { + var a = arguments, + f, + l, + r = a.length; + for (f = 0; f < r; f++) + if (((l = a[f]), void 0 !== l && null !== l)) return l; + }; + a.css = function(p, f) { + a.isMS && + !a.svg && + f && + void 0 !== f.opacity && + (f.filter = 'alpha(opacity\x3d' + 100 * f.opacity + ')'); + a.extend(p.style, f); + }; + a.createElement = function(p, f, l, r, n) { + p = D.createElement(p); + var w = a.css; + f && a.extend(p, f); + n && w(p, { padding: 0, border: 'none', margin: 0 }); + l && w(p, l); + r && r.appendChild(p); + return p; + }; + a.extendClass = function(p, f) { + var l = function() {}; + l.prototype = new p(); + a.extend(l.prototype, f); + return l; + }; + a.pad = function(a, f, l) { + return Array((f || 2) + 1 - String(a).length).join(l || 0) + a; + }; + a.relativeLength = function(a, f, l) { + return /%$/.test(a) + ? (f * parseFloat(a)) / 100 + (l || 0) + : parseFloat(a); + }; + a.wrap = function(a, f, l) { + var p = a[f]; + a[f] = function() { + var a = Array.prototype.slice.call(arguments), + f = arguments, + u = this; + u.proceed = function() { + p.apply(u, arguments.length ? arguments : f); + }; + a.unshift(p); + a = l.apply(this, a); + u.proceed = null; + return a; + }; + }; + a.getTZOffset = function(p) { + var f = a.Date; + return ( + 6e4 * + ((f.hcGetTimezoneOffset && f.hcGetTimezoneOffset(p)) || + f.hcTimezoneOffset || + 0) + ); + }; + a.dateFormat = function(p, f, l) { + if (!a.defined(f) || isNaN(f)) + return a.defaultOptions.lang.invalidDate || ''; + p = a.pick(p, '%Y-%m-%d %H:%M:%S'); + var r = a.Date, + n = new r(f - a.getTZOffset(f)), + w = n[r.hcGetHours](), + u = n[r.hcGetDay](), + e = n[r.hcGetDate](), + h = n[r.hcGetMonth](), + m = n[r.hcGetFullYear](), + d = a.defaultOptions.lang, + c = d.weekdays, + b = d.shortWeekdays, + k = a.pad, + r = a.extend( + { + a: b ? b[u] : c[u].substr(0, 3), + A: c[u], + d: k(e), + e: k(e, 2, ' '), + w: u, + b: d.shortMonths[h], + B: d.months[h], + m: k(h + 1), + y: m.toString().substr(2, 2), + Y: m, + H: k(w), + k: w, + I: k(w % 12 || 12), + l: w % 12 || 12, + M: k(n[r.hcGetMinutes]()), + p: 12 > w ? 'AM' : 'PM', + P: 12 > w ? 'am' : 'pm', + S: k(n.getSeconds()), + L: k(Math.round(f % 1e3), 3), + }, + a.dateFormats, + ); + a.objectEach(r, function(a, b) { + for (; -1 !== p.indexOf('%' + b); ) + p = p.replace('%' + b, 'function' === typeof a ? a(f) : a); + }); + return l ? p.substr(0, 1).toUpperCase() + p.substr(1) : p; + }; + a.formatSingle = function(p, f) { + var l = /\.([0-9])/, + r = a.defaultOptions.lang; + /f$/.test(p) + ? ((l = (l = p.match(l)) ? l[1] : -1), + null !== f && + (f = a.numberFormat( + f, + l, + r.decimalPoint, + -1 < p.indexOf(',') ? r.thousandsSep : '', + ))) + : (f = a.dateFormat(p, f)); + return f; + }; + a.format = function(p, f) { + for (var l = '{', r = !1, n, w, u, e, h = [], m; p; ) { + l = p.indexOf(l); + if (-1 === l) break; + n = p.slice(0, l); + if (r) { + n = n.split(':'); + w = n.shift().split('.'); + e = w.length; + m = f; + for (u = 0; u < e; u++) m && (m = m[w[u]]); + n.length && (m = a.formatSingle(n.join(':'), m)); + h.push(m); + } else h.push(n); + p = p.slice(l + 1); + l = (r = !r) ? '}' : '{'; + } + h.push(p); + return h.join(''); + }; + a.getMagnitude = function(a) { + return Math.pow(10, Math.floor(Math.log(a) / Math.LN10)); + }; + a.normalizeTickInterval = function(p, f, l, r, n) { + var w, + u = p; + l = a.pick(l, 1); + w = p / l; + f || + ((f = n + ? [1, 1.2, 1.5, 2, 2.5, 3, 4, 5, 6, 8, 10] + : [1, 2, 2.5, 5, 10]), + !1 === r && + (1 === l + ? (f = a.grep(f, function(a) { + return 0 === a % 1; + })) + : 0.1 >= l && (f = [1 / l]))); + for ( + r = 0; + r < f.length && + !((u = f[r]), + (n && u * l >= p) || (!n && w <= (f[r] + (f[r + 1] || f[r])) / 2)); + r++ + ); + return (u = a.correctFloat( + u * l, + -Math.round(Math.log(0.001) / Math.LN10), + )); + }; + a.stableSort = function(a, f) { + var l = a.length, + p, + n; + for (n = 0; n < l; n++) a[n].safeI = n; + a.sort(function(a, n) { + p = f(a, n); + return 0 === p ? a.safeI - n.safeI : p; + }); + for (n = 0; n < l; n++) delete a[n].safeI; + }; + a.arrayMin = function(a) { + for (var f = a.length, l = a[0]; f--; ) a[f] < l && (l = a[f]); + return l; + }; + a.arrayMax = function(a) { + for (var f = a.length, l = a[0]; f--; ) a[f] > l && (l = a[f]); + return l; + }; + a.destroyObjectProperties = function(p, f) { + a.objectEach(p, function(a, r) { + a && a !== f && a.destroy && a.destroy(); + delete p[r]; + }); + }; + a.discardElement = function(p) { + var f = a.garbageBin; + f || (f = a.createElement('div')); + p && f.appendChild(p); + f.innerHTML = ''; + }; + a.correctFloat = function(a, f) { + return parseFloat(a.toPrecision(f || 14)); + }; + a.setAnimation = function(p, f) { + f.renderer.globalAnimation = a.pick(p, f.options.chart.animation, !0); + }; + a.animObject = function(p) { + return a.isObject(p) ? a.merge(p) : { duration: p ? 500 : 0 }; + }; + a.timeUnits = { + millisecond: 1, + second: 1e3, + minute: 6e4, + hour: 36e5, + day: 864e5, + week: 6048e5, + month: 24192e5, + year: 314496e5, + }; + a.numberFormat = function(p, f, l, r) { + p = +p || 0; + f = +f; + var n = a.defaultOptions.lang, + w = (p.toString().split('.')[1] || '').split('e')[0].length, + u, + e, + h = p.toString().split('e'); + -1 === f + ? (f = Math.min(w, 20)) + : a.isNumber(f) + ? f && + h[1] && + 0 > h[1] && + ((u = f + +h[1]), + 0 <= u + ? ((h[0] = (+h[0]).toExponential(u).split('e')[0]), (f = u)) + : ((h[0] = h[0].split('.')[0] || 0), + (p = 20 > f ? (h[0] * Math.pow(10, h[1])).toFixed(f) : 0), + (h[1] = 0))) + : (f = 2); + e = ( + Math.abs(h[1] ? h[0] : p) + Math.pow(10, -Math.max(f, w) - 1) + ).toFixed(f); + w = String(a.pInt(e)); + u = 3 < w.length ? w.length % 3 : 0; + l = a.pick(l, n.decimalPoint); + r = a.pick(r, n.thousandsSep); + p = (0 > p ? '-' : '') + (u ? w.substr(0, u) + r : ''); + p += w.substr(u).replace(/(\d{3})(?=\d)/g, '$1' + r); + f && (p += l + e.slice(-f)); + h[1] && 0 !== +p && (p += 'e' + h[1]); + return p; + }; + Math.easeInOutSine = function(a) { + return -0.5 * (Math.cos(Math.PI * a) - 1); + }; + a.getStyle = function(p, f, l) { + if ('width' === f) + return ( + Math.min(p.offsetWidth, p.scrollWidth) - + a.getStyle(p, 'padding-left') - + a.getStyle(p, 'padding-right') + ); + if ('height' === f) + return ( + Math.min(p.offsetHeight, p.scrollHeight) - + a.getStyle(p, 'padding-top') - + a.getStyle(p, 'padding-bottom') + ); + H.getComputedStyle || a.error(27, !0); + if ((p = H.getComputedStyle(p, void 0))) + (p = p.getPropertyValue(f)), + a.pick(l, 'opacity' !== f) && (p = a.pInt(p)); + return p; + }; + a.inArray = function(p, f) { + return (a.indexOfPolyfill || Array.prototype.indexOf).call(f, p); + }; + a.grep = function(p, f) { + return (a.filterPolyfill || Array.prototype.filter).call(p, f); + }; + a.find = Array.prototype.find + ? function(a, f) { + return a.find(f); + } + : function(a, f) { + var l, + r = a.length; + for (l = 0; l < r; l++) if (f(a[l], l)) return a[l]; + }; + a.map = function(a, f) { + for (var l = [], r = 0, n = a.length; r < n; r++) + l[r] = f.call(a[r], a[r], r, a); + return l; + }; + a.keys = function(p) { + return (a.keysPolyfill || Object.keys).call(void 0, p); + }; + a.reduce = function(p, f, l) { + return (a.reducePolyfill || Array.prototype.reduce).call(p, f, l); + }; + a.offset = function(a) { + var f = D.documentElement; + a = a.parentElement ? a.getBoundingClientRect() : { top: 0, left: 0 }; + return { + top: a.top + (H.pageYOffset || f.scrollTop) - (f.clientTop || 0), + left: a.left + (H.pageXOffset || f.scrollLeft) - (f.clientLeft || 0), + }; + }; + a.stop = function(p, f) { + for (var l = a.timers.length; l--; ) + a.timers[l].elem !== p || + (f && f !== a.timers[l].prop) || + (a.timers[l].stopped = !0); + }; + a.each = function(p, f, l) { + return (a.forEachPolyfill || Array.prototype.forEach).call(p, f, l); + }; + a.objectEach = function(a, f, l) { + for (var r in a) a.hasOwnProperty(r) && f.call(l, a[r], r, a); + }; + a.addEvent = function(p, f, l) { + var r, + n, + w = p.addEventListener || a.addEventListenerPolyfill; + p.hcEvents && + !Object.prototype.hasOwnProperty.call(p, 'hcEvents') && + ((n = {}), + a.objectEach(p.hcEvents, function(a, e) { + n[e] = a.slice(0); + }), + (p.hcEvents = n)); + r = p.hcEvents = p.hcEvents || {}; + w && w.call(p, f, l, !1); + r[f] || (r[f] = []); + r[f].push(l); + return function() { + a.removeEvent(p, f, l); + }; + }; + a.removeEvent = function(p, f, l) { + function r(e, m) { + var d = p.removeEventListener || a.removeEventListenerPolyfill; + d && d.call(p, e, m, !1); + } + function n() { + var e, m; + p.nodeName && + (f ? ((e = {}), (e[f] = !0)) : (e = u), + a.objectEach(e, function(a, c) { + if (u[c]) for (m = u[c].length; m--; ) r(c, u[c][m]); + })); + } + var w, + u = p.hcEvents, + e; + u && + (f + ? ((w = u[f] || []), + l + ? ((e = a.inArray(l, w)), + -1 < e && (w.splice(e, 1), (u[f] = w)), + r(f, l)) + : (n(), (u[f] = []))) + : (n(), (p.hcEvents = {}))); + }; + a.fireEvent = function(p, f, l, r) { + var n; + n = p.hcEvents; + var w, u; + l = l || {}; + if (D.createEvent && (p.dispatchEvent || p.fireEvent)) + (n = D.createEvent('Events')), + n.initEvent(f, !0, !0), + a.extend(n, l), + p.dispatchEvent ? p.dispatchEvent(n) : p.fireEvent(f, n); + else if (n) + for ( + n = n[f] || [], + w = n.length, + l.target || + a.extend(l, { + preventDefault: function() { + l.defaultPrevented = !0; + }, + target: p, + type: f, + }), + f = 0; + f < w; + f++ + ) + (u = n[f]) && !1 === u.call(p, l) && l.preventDefault(); + r && !l.defaultPrevented && r(l); + }; + a.animate = function(p, f, l) { + var r, + n = '', + w, + u, + e; + a.isObject(l) || + ((e = arguments), + (l = { duration: e[2], easing: e[3], complete: e[4] })); + a.isNumber(l.duration) || (l.duration = 400); + l.easing = + 'function' === typeof l.easing + ? l.easing + : Math[l.easing] || Math.easeInOutSine; + l.curAnim = a.merge(f); + a.objectEach(f, function(e, m) { + a.stop(p, m); + u = new a.Fx(p, l, m); + w = null; + 'd' === m + ? ((u.paths = u.initPath(p, p.d, f.d)), + (u.toD = f.d), + (r = 0), + (w = 1)) + : p.attr + ? (r = p.attr(m)) + : ((r = parseFloat(a.getStyle(p, m)) || 0), + 'opacity' !== m && (n = 'px')); + w || (w = e); + w && w.match && w.match('px') && (w = w.replace(/px/g, '')); + u.run(r, w, n); + }); + }; + a.seriesType = function(p, f, l, r, n) { + var w = a.getOptions(), + u = a.seriesTypes; + w.plotOptions[p] = a.merge(w.plotOptions[f], l); + u[p] = a.extendClass(u[f] || function() {}, r); + u[p].prototype.type = p; + n && (u[p].prototype.pointClass = a.extendClass(a.Point, n)); + return u[p]; + }; + a.uniqueKey = (function() { + var a = Math.random() + .toString(36) + .substring(2, 9), + f = 0; + return function() { + return 'highcharts-' + a + '-' + f++; + }; + })(); + H.jQuery && + (H.jQuery.fn.highcharts = function() { + var p = [].slice.call(arguments); + if (this[0]) + return p[0] + ? (new a[a.isString(p[0]) ? p.shift() : 'Chart']( + this[0], + p[0], + p[1], + ), + this) + : E[a.attr(this[0], 'data-highcharts-chart')]; + }); + })(M); + (function(a) { + var E = a.each, + D = a.isNumber, + H = a.map, + p = a.merge, + f = a.pInt; + a.Color = function(l) { + if (!(this instanceof a.Color)) return new a.Color(l); + this.init(l); + }; + a.Color.prototype = { + parsers: [ + { + regex: /rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]?(?:\.[0-9]+)?)\s*\)/, + parse: function(a) { + return [f(a[1]), f(a[2]), f(a[3]), parseFloat(a[4], 10)]; + }, + }, + { + regex: /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/, + parse: function(a) { + return [f(a[1]), f(a[2]), f(a[3]), 1]; + }, + }, + ], + names: { + none: 'rgba(255,255,255,0)', + white: '#ffffff', + black: '#000000', + }, + init: function(l) { + var f, n, w, u; + if ( + (this.input = l = + this.names[l && l.toLowerCase ? l.toLowerCase() : ''] || l) && + l.stops + ) + this.stops = H(l.stops, function(e) { + return new a.Color(e[1]); + }); + else if ( + (l && + l.charAt && + '#' === l.charAt() && + ((f = l.length), + (l = parseInt(l.substr(1), 16)), + 7 === f + ? (n = [(l & 16711680) >> 16, (l & 65280) >> 8, l & 255, 1]) + : 4 === f && + (n = [ + ((l & 3840) >> 4) | ((l & 3840) >> 8), + ((l & 240) >> 4) | (l & 240), + ((l & 15) << 4) | (l & 15), + 1, + ])), + !n) + ) + for (w = this.parsers.length; w-- && !n; ) + (u = this.parsers[w]), (f = u.regex.exec(l)) && (n = u.parse(f)); + this.rgba = n || []; + }, + get: function(a) { + var f = this.input, + n = this.rgba, + l; + this.stops + ? ((l = p(f)), + (l.stops = [].concat(l.stops)), + E(this.stops, function(n, e) { + l.stops[e] = [l.stops[e][0], n.get(a)]; + })) + : (l = + n && D(n[0]) + ? 'rgb' === a || (!a && 1 === n[3]) + ? 'rgb(' + n[0] + ',' + n[1] + ',' + n[2] + ')' + : 'a' === a + ? n[3] + : 'rgba(' + n.join(',') + ')' + : f); + return l; + }, + brighten: function(a) { + var l, + n = this.rgba; + if (this.stops) + E(this.stops, function(n) { + n.brighten(a); + }); + else if (D(a) && 0 !== a) + for (l = 0; 3 > l; l++) + (n[l] += f(255 * a)), + 0 > n[l] && (n[l] = 0), + 255 < n[l] && (n[l] = 255); + return this; + }, + setOpacity: function(a) { + this.rgba[3] = a; + return this; + }, + tweenTo: function(a, f) { + var n = this.rgba, + l = a.rgba; + l.length && n && n.length + ? ((a = 1 !== l[3] || 1 !== n[3]), + (f = + (a ? 'rgba(' : 'rgb(') + + Math.round(l[0] + (n[0] - l[0]) * (1 - f)) + + ',' + + Math.round(l[1] + (n[1] - l[1]) * (1 - f)) + + ',' + + Math.round(l[2] + (n[2] - l[2]) * (1 - f)) + + (a ? ',' + (l[3] + (n[3] - l[3]) * (1 - f)) : '') + + ')')) + : (f = a.input || 'none'); + return f; + }, + }; + a.color = function(l) { + return new a.Color(l); + }; + })(M); + (function(a) { + var E, + D, + H = a.addEvent, + p = a.animate, + f = a.attr, + l = a.charts, + r = a.color, + n = a.css, + w = a.createElement, + u = a.defined, + e = a.deg2rad, + h = a.destroyObjectProperties, + m = a.doc, + d = a.each, + c = a.extend, + b = a.erase, + k = a.grep, + z = a.hasTouch, + B = a.inArray, + I = a.isArray, + x = a.isFirefox, + K = a.isMS, + t = a.isObject, + C = a.isString, + N = a.isWebKit, + q = a.merge, + A = a.noop, + F = a.objectEach, + G = a.pick, + g = a.pInt, + v = a.removeEvent, + Q = a.stop, + L = a.svg, + P = a.SVG_NS, + J = a.symbolSizes, + R = a.win; + E = a.SVGElement = function() { + return this; + }; + c(E.prototype, { + opacity: 1, + SVG_NS: P, + textProps: 'direction fontSize fontWeight fontFamily fontStyle color lineHeight width textAlign textDecoration textOverflow textOutline'.split( + ' ', + ), + init: function(a, g) { + this.element = 'span' === g ? w(g) : m.createElementNS(this.SVG_NS, g); + this.renderer = a; + }, + animate: function(y, g, b) { + g = a.animObject(G(g, this.renderer.globalAnimation, !0)); + 0 !== g.duration + ? (b && (g.complete = b), p(this, y, g)) + : (this.attr(y, null, b), g.step && g.step.call(this)); + return this; + }, + colorGradient: function(y, g, b) { + var v = this.renderer, + c, + O, + k, + e, + z, + h, + m, + L, + A, + J, + t = [], + x; + y.radialGradient + ? (O = 'radialGradient') + : y.linearGradient && (O = 'linearGradient'); + O && + ((k = y[O]), + (z = v.gradients), + (m = y.stops), + (J = b.radialReference), + I(k) && + (y[O] = k = { + x1: k[0], + y1: k[1], + x2: k[2], + y2: k[3], + gradientUnits: 'userSpaceOnUse', + }), + 'radialGradient' === O && + J && + !u(k.gradientUnits) && + ((e = k), + (k = q(k, v.getRadialAttr(J, e), { + gradientUnits: 'userSpaceOnUse', + }))), + F(k, function(a, y) { + 'id' !== y && t.push(y, a); + }), + F(m, function(a) { + t.push(a); + }), + (t = t.join(',')), + z[t] + ? (J = z[t].attr('id')) + : ((k.id = J = a.uniqueKey()), + (z[t] = h = v + .createElement(O) + .attr(k) + .add(v.defs)), + (h.radAttr = e), + (h.stops = []), + d(m, function(y) { + 0 === y[1].indexOf('rgba') + ? ((c = a.color(y[1])), (L = c.get('rgb')), (A = c.get('a'))) + : ((L = y[1]), (A = 1)); + y = v + .createElement('stop') + .attr({ offset: y[0], 'stop-color': L, 'stop-opacity': A }) + .add(h); + h.stops.push(y); + })), + (x = 'url(' + v.url + '#' + J + ')'), + b.setAttribute(g, x), + (b.gradient = t), + (y.toString = function() { + return x; + })); + }, + applyTextOutline: function(y) { + var g = this.element, + v, + c, + k, + q, + e; + -1 !== y.indexOf('contrast') && + (y = y.replace(/contrast/g, this.renderer.getContrast(g.style.fill))); + y = y.split(' '); + c = y[y.length - 1]; + if ((k = y[0]) && 'none' !== k && a.svg) { + this.fakeTS = !0; + y = [].slice.call(g.getElementsByTagName('tspan')); + this.ySetter = this.xSetter; + k = k.replace(/(^[\d\.]+)(.*?)$/g, function(a, y, g) { + return 2 * y + g; + }); + for (e = y.length; e--; ) + (v = y[e]), + 'highcharts-text-outline' === v.getAttribute('class') && + b(y, g.removeChild(v)); + q = g.firstChild; + d(y, function(a, y) { + 0 === y && + (a.setAttribute('x', g.getAttribute('x')), + (y = g.getAttribute('y')), + a.setAttribute('y', y || 0), + null === y && g.setAttribute('y', 0)); + a = a.cloneNode(1); + f(a, { + class: 'highcharts-text-outline', + fill: c, + stroke: c, + 'stroke-width': k, + 'stroke-linejoin': 'round', + }); + g.insertBefore(a, q); + }); + } + }, + attr: function(a, g, b, v) { + var y, + c = this.element, + k, + d = this, + O, + q; + 'string' === typeof a && + void 0 !== g && + ((y = a), (a = {}), (a[y] = g)); + 'string' === typeof a + ? (d = (this[a + 'Getter'] || this._defaultGetter).call(this, a, c)) + : (F( + a, + function(y, g) { + O = !1; + v || Q(this, g); + this.symbolName && + /^(x|y|width|height|r|start|end|innerR|anchorX|anchorY)$/.test( + g, + ) && + (k || (this.symbolAttr(a), (k = !0)), (O = !0)); + !this.rotation || + ('x' !== g && 'y' !== g) || + (this.doTransform = !0); + O || + ((q = this[g + 'Setter'] || this._defaultSetter), + q.call(this, y, g, c), + this.shadows && + /^(width|height|visibility|x|y|d|transform|cx|cy|r)$/.test( + g, + ) && + this.updateShadows(g, y, q)); + }, + this, + ), + this.afterSetters()); + b && b(); + return d; + }, + afterSetters: function() { + this.doTransform && (this.updateTransform(), (this.doTransform = !1)); + }, + updateShadows: function(a, g, b) { + for (var y = this.shadows, v = y.length; v--; ) + b.call( + y[v], + 'height' === a + ? Math.max(g - (y[v].cutHeight || 0), 0) + : 'd' === a + ? this.d + : g, + a, + y[v], + ); + }, + addClass: function(a, g) { + var y = this.attr('class') || ''; + -1 === y.indexOf(a) && + (g || (a = (y + (y ? ' ' : '') + a).replace(' ', ' ')), + this.attr('class', a)); + return this; + }, + hasClass: function(a) { + return -1 !== B(a, (this.attr('class') || '').split(' ')); + }, + removeClass: function(a) { + return this.attr('class', (this.attr('class') || '').replace(a, '')); + }, + symbolAttr: function(a) { + var y = this; + d( + 'x y r start end width height innerR anchorX anchorY'.split(' '), + function(g) { + y[g] = G(a[g], y[g]); + }, + ); + y.attr({ + d: y.renderer.symbols[y.symbolName](y.x, y.y, y.width, y.height, y), + }); + }, + clip: function(a) { + return this.attr( + 'clip-path', + a ? 'url(' + this.renderer.url + '#' + a.id + ')' : 'none', + ); + }, + crisp: function(a, g) { + var y; + g = g || a.strokeWidth || 0; + y = (Math.round(g) % 2) / 2; + a.x = Math.floor(a.x || this.x || 0) + y; + a.y = Math.floor(a.y || this.y || 0) + y; + a.width = Math.floor((a.width || this.width || 0) - 2 * y); + a.height = Math.floor((a.height || this.height || 0) - 2 * y); + u(a.strokeWidth) && (a.strokeWidth = g); + return a; + }, + css: function(a) { + var y = this.styles, + b = {}, + v = this.element, + k, + d = '', + q, + e = !y, + z = ['textOutline', 'textOverflow', 'width']; + a && a.color && (a.fill = a.color); + y && + F(a, function(a, g) { + a !== y[g] && ((b[g] = a), (e = !0)); + }); + e && + (y && (a = c(y, b)), + (k = this.textWidth = + a && + a.width && + 'auto' !== a.width && + 'text' === v.nodeName.toLowerCase() && + g(a.width)), + (this.styles = a), + k && !L && this.renderer.forExport && delete a.width, + K && !L + ? n(this.element, a) + : ((q = function(a, y) { + return '-' + y.toLowerCase(); + }), + F(a, function(a, y) { + -1 === B(y, z) && + (d += y.replace(/([A-Z])/g, q) + ':' + a + ';'); + }), + d && f(v, 'style', d)), + this.added && + ('text' === this.element.nodeName && this.renderer.buildText(this), + a && a.textOutline && this.applyTextOutline(a.textOutline))); + return this; + }, + strokeWidth: function() { + return this['stroke-width'] || 0; + }, + on: function(a, g) { + var y = this, + b = y.element; + z && 'click' === a + ? ((b.ontouchstart = function(a) { + y.touchEventFired = Date.now(); + a.preventDefault(); + g.call(b, a); + }), + (b.onclick = function(a) { + (-1 === R.navigator.userAgent.indexOf('Android') || + 1100 < Date.now() - (y.touchEventFired || 0)) && + g.call(b, a); + })) + : (b['on' + a] = g); + return this; + }, + setRadialReference: function(a) { + var y = this.renderer.gradients[this.element.gradient]; + this.element.radialReference = a; + y && y.radAttr && y.animate(this.renderer.getRadialAttr(a, y.radAttr)); + return this; + }, + translate: function(a, g) { + return this.attr({ translateX: a, translateY: g }); + }, + invert: function(a) { + this.inverted = a; + this.updateTransform(); + return this; + }, + updateTransform: function() { + var a = this.translateX || 0, + g = this.translateY || 0, + b = this.scaleX, + v = this.scaleY, + c = this.inverted, + k = this.rotation, + d = this.matrix, + q = this.element; + c && ((a += this.width), (g += this.height)); + a = ['translate(' + a + ',' + g + ')']; + u(d) && a.push('matrix(' + d.join(',') + ')'); + c + ? a.push('rotate(90) scale(-1,1)') + : k && + a.push( + 'rotate(' + + k + + ' ' + + G(this.rotationOriginX, q.getAttribute('x'), 0) + + ' ' + + G(this.rotationOriginY, q.getAttribute('y') || 0) + + ')', + ); + (u(b) || u(v)) && a.push('scale(' + G(b, 1) + ' ' + G(v, 1) + ')'); + a.length && q.setAttribute('transform', a.join(' ')); + }, + toFront: function() { + var a = this.element; + a.parentNode.appendChild(a); + return this; + }, + align: function(a, g, v) { + var y, + c, + k, + d, + q = {}; + c = this.renderer; + k = c.alignedObjects; + var e, O; + if (a) { + if ( + ((this.alignOptions = a), (this.alignByTranslate = g), !v || C(v)) + ) + (this.alignTo = y = v || 'renderer'), + b(k, this), + k.push(this), + (v = null); + } else + (a = this.alignOptions), + (g = this.alignByTranslate), + (y = this.alignTo); + v = G(v, c[y], c); + y = a.align; + c = a.verticalAlign; + k = (v.x || 0) + (a.x || 0); + d = (v.y || 0) + (a.y || 0); + 'right' === y ? (e = 1) : 'center' === y && (e = 2); + e && (k += (v.width - (a.width || 0)) / e); + q[g ? 'translateX' : 'x'] = Math.round(k); + 'bottom' === c ? (O = 1) : 'middle' === c && (O = 2); + O && (d += (v.height - (a.height || 0)) / O); + q[g ? 'translateY' : 'y'] = Math.round(d); + this[this.placed ? 'animate' : 'attr'](q); + this.placed = !0; + this.alignAttr = q; + return this; + }, + getBBox: function(a, g) { + var y, + b = this.renderer, + v, + k = this.element, + q = this.styles, + O, + z = this.textStr, + h, + m = b.cache, + L = b.cacheKeys, + A; + g = G(g, this.rotation); + v = g * e; + O = q && q.fontSize; + u(z) && + ((A = z.toString()), + -1 === A.indexOf('\x3c') && (A = A.replace(/[0-9]/g, '0')), + (A += ['', g || 0, O, q && q.width, q && q.textOverflow].join())); + A && !a && (y = m[A]); + if (!y) { + if (k.namespaceURI === this.SVG_NS || b.forExport) { + try { + (h = + this.fakeTS && + function(a) { + d(k.querySelectorAll('.highcharts-text-outline'), function( + y, + ) { + y.style.display = a; + }); + }) && h('none'), + (y = k.getBBox + ? c({}, k.getBBox()) + : { width: k.offsetWidth, height: k.offsetHeight }), + h && h(''); + } catch (W) {} + if (!y || 0 > y.width) y = { width: 0, height: 0 }; + } else y = this.htmlGetBBox(); + b.isSVG && + ((a = y.width), + (b = y.height), + q && + '11px' === q.fontSize && + 17 === Math.round(b) && + (y.height = b = 14), + g && + ((y.width = + Math.abs(b * Math.sin(v)) + Math.abs(a * Math.cos(v))), + (y.height = + Math.abs(b * Math.cos(v)) + Math.abs(a * Math.sin(v))))); + if (A && 0 < y.height) { + for (; 250 < L.length; ) delete m[L.shift()]; + m[A] || L.push(A); + m[A] = y; + } + } + return y; + }, + show: function(a) { + return this.attr({ visibility: a ? 'inherit' : 'visible' }); + }, + hide: function() { + return this.attr({ visibility: 'hidden' }); + }, + fadeOut: function(a) { + var y = this; + y.animate( + { opacity: 0 }, + { + duration: a || 150, + complete: function() { + y.attr({ y: -9999 }); + }, + }, + ); + }, + add: function(a) { + var y = this.renderer, + g = this.element, + b; + a && (this.parentGroup = a); + this.parentInverted = a && a.inverted; + void 0 !== this.textStr && y.buildText(this); + this.added = !0; + if (!a || a.handleZ || this.zIndex) b = this.zIndexSetter(); + b || (a ? a.element : y.box).appendChild(g); + if (this.onAdd) this.onAdd(); + return this; + }, + safeRemoveChild: function(a) { + var y = a.parentNode; + y && y.removeChild(a); + }, + destroy: function() { + var a = this, + g = a.element || {}, + v = a.renderer.isSVG && 'SPAN' === g.nodeName && a.parentGroup, + c = g.ownerSVGElement; + g.onclick = g.onmouseout = g.onmouseover = g.onmousemove = g.point = null; + Q(a); + a.clipPath && + c && + (d(c.querySelectorAll('[clip-path],[CLIP-PATH]'), function(g) { + g + .getAttribute('clip-path') + .match(RegExp('[("]#' + a.clipPath.element.id + '[)"]')) && + g.removeAttribute('clip-path'); + }), + (a.clipPath = a.clipPath.destroy())); + if (a.stops) { + for (c = 0; c < a.stops.length; c++) + a.stops[c] = a.stops[c].destroy(); + a.stops = null; + } + a.safeRemoveChild(g); + for (a.destroyShadows(); v && v.div && 0 === v.div.childNodes.length; ) + (g = v.parentGroup), a.safeRemoveChild(v.div), delete v.div, (v = g); + a.alignTo && b(a.renderer.alignedObjects, a); + F(a, function(g, y) { + delete a[y]; + }); + return null; + }, + shadow: function(a, g, b) { + var y = [], + v, + c, + k = this.element, + d, + q, + e, + z; + if (!a) this.destroyShadows(); + else if (!this.shadows) { + q = G(a.width, 3); + e = (a.opacity || 0.15) / q; + z = this.parentInverted + ? '(-1,-1)' + : '(' + G(a.offsetX, 1) + ', ' + G(a.offsetY, 1) + ')'; + for (v = 1; v <= q; v++) + (c = k.cloneNode(0)), + (d = 2 * q + 1 - 2 * v), + f(c, { + isShadow: 'true', + stroke: a.color || '#000000', + 'stroke-opacity': e * v, + 'stroke-width': d, + transform: 'translate' + z, + fill: 'none', + }), + b && + (f(c, 'height', Math.max(f(c, 'height') - d, 0)), + (c.cutHeight = d)), + g + ? g.element.appendChild(c) + : k.parentNode && k.parentNode.insertBefore(c, k), + y.push(c); + this.shadows = y; + } + return this; + }, + destroyShadows: function() { + d( + this.shadows || [], + function(a) { + this.safeRemoveChild(a); + }, + this, + ); + this.shadows = void 0; + }, + xGetter: function(a) { + 'circle' === this.element.nodeName && + ('x' === a ? (a = 'cx') : 'y' === a && (a = 'cy')); + return this._defaultGetter(a); + }, + _defaultGetter: function(a) { + a = G( + this[a + 'Value'], + this[a], + this.element ? this.element.getAttribute(a) : null, + 0, + ); + /^[\-0-9\.]+$/.test(a) && (a = parseFloat(a)); + return a; + }, + dSetter: function(a, g, b) { + a && a.join && (a = a.join(' ')); + /(NaN| {2}|^$)/.test(a) && (a = 'M 0 0'); + this[g] !== a && (b.setAttribute(g, a), (this[g] = a)); + }, + dashstyleSetter: function(a) { + var b, + v = this['stroke-width']; + 'inherit' === v && (v = 1); + if ((a = a && a.toLowerCase())) { + a = a + .replace('shortdashdotdot', '3,1,1,1,1,1,') + .replace('shortdashdot', '3,1,1,1') + .replace('shortdot', '1,1,') + .replace('shortdash', '3,1,') + .replace('longdash', '8,3,') + .replace(/dot/g, '1,3,') + .replace('dash', '4,3,') + .replace(/,$/, '') + .split(','); + for (b = a.length; b--; ) a[b] = g(a[b]) * v; + a = a.join(',').replace(/NaN/g, 'none'); + this.element.setAttribute('stroke-dasharray', a); + } + }, + alignSetter: function(a) { + this.alignValue = a; + this.element.setAttribute( + 'text-anchor', + { left: 'start', center: 'middle', right: 'end' }[a], + ); + }, + opacitySetter: function(a, g, b) { + this[g] = a; + b.setAttribute(g, a); + }, + titleSetter: function(a) { + var g = this.element.getElementsByTagName('title')[0]; + g || + ((g = m.createElementNS(this.SVG_NS, 'title')), + this.element.appendChild(g)); + g.firstChild && g.removeChild(g.firstChild); + g.appendChild( + m.createTextNode(String(G(a), '').replace(/<[^>]*>/g, '')), + ); + }, + textSetter: function(a) { + a !== this.textStr && + (delete this.bBox, + (this.textStr = a), + this.added && this.renderer.buildText(this)); + }, + fillSetter: function(a, g, b) { + 'string' === typeof a + ? b.setAttribute(g, a) + : a && this.colorGradient(a, g, b); + }, + visibilitySetter: function(a, g, b) { + 'inherit' === a + ? b.removeAttribute(g) + : this[g] !== a && b.setAttribute(g, a); + this[g] = a; + }, + zIndexSetter: function(a, b) { + var v = this.renderer, + y = this.parentGroup, + c = (y || v).element || v.box, + k, + d = this.element, + q, + e, + v = c === v.box; + k = this.added; + var z; + u(a) && + ((d.zIndex = a), (a = +a), this[b] === a && (k = !1), (this[b] = a)); + if (k) { + (a = this.zIndex) && y && (y.handleZ = !0); + b = c.childNodes; + for (z = b.length - 1; 0 <= z && !q; z--) + if (((y = b[z]), (k = y.zIndex), (e = !u(k)), y !== d)) + if (0 > a && e && !v && !z) c.insertBefore(d, b[z]), (q = !0); + else if (g(k) <= a || (e && (!u(a) || 0 <= a))) + c.insertBefore(d, b[z + 1] || null), (q = !0); + q || (c.insertBefore(d, b[v ? 3 : 0] || null), (q = !0)); + } + return q; + }, + _defaultSetter: function(a, g, b) { + b.setAttribute(g, a); + }, + }); + E.prototype.yGetter = E.prototype.xGetter; + E.prototype.translateXSetter = E.prototype.translateYSetter = E.prototype.rotationSetter = E.prototype.verticalAlignSetter = E.prototype.rotationOriginXSetter = E.prototype.rotationOriginYSetter = E.prototype.scaleXSetter = E.prototype.scaleYSetter = E.prototype.matrixSetter = function( + a, + g, + ) { + this[g] = a; + this.doTransform = !0; + }; + E.prototype['stroke-widthSetter'] = E.prototype.strokeSetter = function( + a, + g, + b, + ) { + this[g] = a; + this.stroke && this['stroke-width'] + ? (E.prototype.fillSetter.call(this, this.stroke, 'stroke', b), + b.setAttribute('stroke-width', this['stroke-width']), + (this.hasStroke = !0)) + : 'stroke-width' === g && + 0 === a && + this.hasStroke && + (b.removeAttribute('stroke'), (this.hasStroke = !1)); + }; + D = a.SVGRenderer = function() { + this.init.apply(this, arguments); + }; + c(D.prototype, { + Element: E, + SVG_NS: P, + init: function(a, g, b, v, c, k) { + var y; + v = this.createElement('svg') + .attr({ version: '1.1', class: 'highcharts-root' }) + .css(this.getStyle(v)); + y = v.element; + a.appendChild(y); + f(a, 'dir', 'ltr'); + -1 === a.innerHTML.indexOf('xmlns') && f(y, 'xmlns', this.SVG_NS); + this.isSVG = !0; + this.box = y; + this.boxWrapper = v; + this.alignedObjects = []; + this.url = + (x || N) && m.getElementsByTagName('base').length + ? R.location.href + .replace(/#.*?$/, '') + .replace(/<[^>]*>/g, '') + .replace(/([\('\)])/g, '\\$1') + .replace(/ /g, '%20') + : ''; + this.createElement('desc') + .add() + .element.appendChild( + m.createTextNode('Created with Highcharts 6.0.4'), + ); + this.defs = this.createElement('defs').add(); + this.allowHTML = k; + this.forExport = c; + this.gradients = {}; + this.cache = {}; + this.cacheKeys = []; + this.imgCount = 0; + this.setSize(g, b, !1); + var d; + x && + a.getBoundingClientRect && + ((g = function() { + n(a, { left: 0, top: 0 }); + d = a.getBoundingClientRect(); + n(a, { + left: Math.ceil(d.left) - d.left + 'px', + top: Math.ceil(d.top) - d.top + 'px', + }); + }), + g(), + (this.unSubPixelFix = H(R, 'resize', g))); + }, + getStyle: function(a) { + return (this.style = c( + { + fontFamily: + '"Lucida Grande", "Lucida Sans Unicode", Arial, Helvetica, sans-serif', + fontSize: '12px', + }, + a, + )); + }, + setStyle: function(a) { + this.boxWrapper.css(this.getStyle(a)); + }, + isHidden: function() { + return !this.boxWrapper.getBBox().width; + }, + destroy: function() { + var a = this.defs; + this.box = null; + this.boxWrapper = this.boxWrapper.destroy(); + h(this.gradients || {}); + this.gradients = null; + a && (this.defs = a.destroy()); + this.unSubPixelFix && this.unSubPixelFix(); + return (this.alignedObjects = null); + }, + createElement: function(a) { + var g = new this.Element(); + g.init(this, a); + return g; + }, + draw: A, + getRadialAttr: function(a, g) { + return { + cx: a[0] - a[2] / 2 + g.cx * a[2], + cy: a[1] - a[2] / 2 + g.cy * a[2], + r: g.r * a[2], + }; + }, + getSpanWidth: function(a, g) { + var b = a.getBBox(!0).width; + !L && + this.forExport && + (b = this.measureSpanWidth(g.firstChild.data, a.styles)); + return b; + }, + applyEllipsis: function(a, g, b, v) { + var c = a.rotation, + y = b, + k, + d = 0, + q = b.length, + e = function(a) { + g.removeChild(g.firstChild); + a && g.appendChild(m.createTextNode(a)); + }, + z; + a.rotation = 0; + y = this.getSpanWidth(a, g); + if ((z = y > v)) { + for (; d <= q; ) + (k = Math.ceil((d + q) / 2)), + (y = b.substring(0, k) + '\u2026'), + e(y), + (y = this.getSpanWidth(a, g)), + d === q ? (d = q + 1) : y > v ? (q = k - 1) : (d = k); + 0 === q && e(''); + } + a.rotation = c; + return z; + }, + escapes: { + '\x26': '\x26amp;', + '\x3c': '\x26lt;', + '\x3e': '\x26gt;', + "'": '\x26#39;', + '"': '\x26quot;', + }, + buildText: function(a) { + var b = a.element, + v = this, + c = v.forExport, + y = G(a.textStr, '').toString(), + q = -1 !== y.indexOf('\x3c'), + e = b.childNodes, + z, + h, + A, + J, + t = f(b, 'x'), + x = a.styles, + B = a.textWidth, + l = x && x.lineHeight, + C = x && x.textOutline, + u = x && 'ellipsis' === x.textOverflow, + Q = x && 'nowrap' === x.whiteSpace, + w = x && x.fontSize, + R, + I, + r = e.length, + x = B && !a.added && this.box, + p = function(a) { + var c; + c = /(px|em)$/.test(a && a.style.fontSize) + ? a.style.fontSize + : w || v.style.fontSize || 12; + return l + ? g(l) + : v.fontMetrics(c, a.getAttribute('style') ? a : b).h; + }, + K = function(a) { + F(v.escapes, function(g, b) { + a = a.replace(new RegExp(g, 'g'), b); + }); + return a; + }; + R = [y, u, Q, l, C, w, B].join(); + if (R !== a.textCache) { + for (a.textCache = R; r--; ) b.removeChild(e[r]); + q || C || u || B || -1 !== y.indexOf(' ') + ? ((z = /<.*class="([^"]+)".*>/), + (h = /<.*style="([^"]+)".*>/), + (A = /<.*href="([^"]+)".*>/), + x && x.appendChild(b), + (y = q + ? y + .replace( + /<(b|strong)>/g, + '\x3cspan style\x3d"font-weight:bold"\x3e', + ) + .replace( + /<(i|em)>/g, + '\x3cspan style\x3d"font-style:italic"\x3e', + ) + .replace(//g, '\x3c/span\x3e') + .split(//g) + : [y]), + (y = k(y, function(a) { + return '' !== a; + })), + d(y, function(g, y) { + var k, + q = 0; + g = g + .replace(/^\s+|\s+$/g, '') + .replace(//g, '\x3c/span\x3e|||'); + k = g.split('|||'); + d(k, function(g) { + if ('' !== g || 1 === k.length) { + var d = {}, + e = m.createElementNS(v.SVG_NS, 'tspan'), + x, + F; + z.test(g) && ((x = g.match(z)[1]), f(e, 'class', x)); + h.test(g) && + ((F = g + .match(h)[1] + .replace(/(;| |^)color([ :])/, '$1fill$2')), + f(e, 'style', F)); + A.test(g) && + !c && + (f( + e, + 'onclick', + 'location.href\x3d"' + g.match(A)[1] + '"', + ), + f(e, 'class', 'highcharts-anchor'), + n(e, { cursor: 'pointer' })); + g = K(g.replace(/<[a-zA-Z\/](.|\n)*?>/g, '') || ' '); + if (' ' !== g) { + e.appendChild(m.createTextNode(g)); + q ? (d.dx = 0) : y && null !== t && (d.x = t); + f(e, d); + b.appendChild(e); + !q && + I && + (!L && c && n(e, { display: 'block' }), + f(e, 'dy', p(e))); + if (B) { + d = g.replace(/([^\^])-/g, '$1- ').split(' '); + x = 1 < k.length || y || (1 < d.length && !Q); + var O = [], + l, + C = p(e), + G = a.rotation; + for ( + u && (J = v.applyEllipsis(a, e, g, B)); + !u && x && (d.length || O.length); + + ) + (a.rotation = 0), + (l = v.getSpanWidth(a, e)), + (g = l > B), + void 0 === J && (J = g), + g && 1 !== d.length + ? (e.removeChild(e.firstChild), + O.unshift(d.pop())) + : ((d = O), + (O = []), + d.length && + !Q && + ((e = m.createElementNS(P, 'tspan')), + f(e, { dy: C, x: t }), + F && f(e, 'style', F), + b.appendChild(e)), + l > B && (B = l)), + d.length && + e.appendChild( + m.createTextNode( + d.join(' ').replace(/- /g, '-'), + ), + ); + a.rotation = G; + } + q++; + } + } + }); + I = I || b.childNodes.length; + }), + J && a.attr('title', a.textStr), + x && x.removeChild(b), + C && a.applyTextOutline && a.applyTextOutline(C)) + : b.appendChild(m.createTextNode(K(y))); + } + }, + getContrast: function(a) { + a = r(a).rgba; + return 510 < a[0] + a[1] + a[2] ? '#000000' : '#FFFFFF'; + }, + button: function(a, g, b, v, d, k, e, z, h) { + var y = this.label(a, g, b, h, null, null, null, null, 'button'), + m = 0; + y.attr(q({ padding: 8, r: 2 }, d)); + var A, L, J, t; + d = q( + { + fill: '#f7f7f7', + stroke: '#cccccc', + 'stroke-width': 1, + style: { + color: '#333333', + cursor: 'pointer', + fontWeight: 'normal', + }, + }, + d, + ); + A = d.style; + delete d.style; + k = q(d, { fill: '#e6e6e6' }, k); + L = k.style; + delete k.style; + e = q( + d, + { fill: '#e6ebf5', style: { color: '#000000', fontWeight: 'bold' } }, + e, + ); + J = e.style; + delete e.style; + z = q(d, { style: { color: '#cccccc' } }, z); + t = z.style; + delete z.style; + H(y.element, K ? 'mouseover' : 'mouseenter', function() { + 3 !== m && y.setState(1); + }); + H(y.element, K ? 'mouseout' : 'mouseleave', function() { + 3 !== m && y.setState(m); + }); + y.setState = function(a) { + 1 !== a && (y.state = m = a); + y.removeClass( + /highcharts-button-(normal|hover|pressed|disabled)/, + ).addClass( + 'highcharts-button-' + + ['normal', 'hover', 'pressed', 'disabled'][a || 0], + ); + y.attr([d, k, e, z][a || 0]).css([A, L, J, t][a || 0]); + }; + y.attr(d).css(c({ cursor: 'default' }, A)); + return y.on('click', function(a) { + 3 !== m && v.call(y, a); + }); + }, + crispLine: function(a, g) { + a[1] === a[4] && (a[1] = a[4] = Math.round(a[1]) - (g % 2) / 2); + a[2] === a[5] && (a[2] = a[5] = Math.round(a[2]) + (g % 2) / 2); + return a; + }, + path: function(a) { + var g = { fill: 'none' }; + I(a) ? (g.d = a) : t(a) && c(g, a); + return this.createElement('path').attr(g); + }, + circle: function(a, g, b) { + a = t(a) ? a : { x: a, y: g, r: b }; + g = this.createElement('circle'); + g.xSetter = g.ySetter = function(a, g, b) { + b.setAttribute('c' + g, a); + }; + return g.attr(a); + }, + arc: function(a, g, b, v, c, d) { + t(a) + ? ((v = a), (g = v.y), (b = v.r), (a = v.x)) + : (v = { innerR: v, start: c, end: d }); + a = this.symbol('arc', a, g, b, b, v); + a.r = b; + return a; + }, + rect: function(a, g, b, v, c, d) { + c = t(a) ? a.r : c; + var k = this.createElement('rect'); + a = t(a) + ? a + : void 0 === a + ? {} + : { x: a, y: g, width: Math.max(b, 0), height: Math.max(v, 0) }; + void 0 !== d && ((a.strokeWidth = d), (a = k.crisp(a))); + a.fill = 'none'; + c && (a.r = c); + k.rSetter = function(a, g, b) { + f(b, { rx: a, ry: a }); + }; + return k.attr(a); + }, + setSize: function(a, g, b) { + var v = this.alignedObjects, + c = v.length; + this.width = a; + this.height = g; + for ( + this.boxWrapper.animate( + { width: a, height: g }, + { + step: function() { + this.attr({ + viewBox: + '0 0 ' + this.attr('width') + ' ' + this.attr('height'), + }); + }, + duration: G(b, !0) ? void 0 : 0, + }, + ); + c--; + + ) + v[c].align(); + }, + g: function(a) { + var g = this.createElement('g'); + return a ? g.attr({ class: 'highcharts-' + a }) : g; + }, + image: function(a, g, b, v, d) { + var k = { preserveAspectRatio: 'none' }; + 1 < arguments.length && c(k, { x: g, y: b, width: v, height: d }); + k = this.createElement('image').attr(k); + k.element.setAttributeNS + ? k.element.setAttributeNS('http://www.w3.org/1999/xlink', 'href', a) + : k.element.setAttribute('hc-svg-href', a); + return k; + }, + symbol: function(a, g, b, v, k, q) { + var e = this, + y, + z = /^url\((.*?)\)$/, + h = z.test(a), + A = !h && (this.symbols[a] ? a : 'circle'), + L = A && this.symbols[A], + t = + u(g) && + L && + L.call(this.symbols, Math.round(g), Math.round(b), v, k, q), + x, + F; + L + ? ((y = this.path(t)), + y.attr('fill', 'none'), + c(y, { symbolName: A, x: g, y: b, width: v, height: k }), + q && c(y, q)) + : h && + ((x = a.match(z)[1]), + (y = this.image(x)), + (y.imgwidth = G(J[x] && J[x].width, q && q.width)), + (y.imgheight = G(J[x] && J[x].height, q && q.height)), + (F = function() { + y.attr({ width: y.width, height: y.height }); + }), + d(['width', 'height'], function(a) { + y[a + 'Setter'] = function(a, g) { + var b = {}, + v = this['img' + g], + c = 'width' === g ? 'translateX' : 'translateY'; + this[g] = a; + u(v) && + (this.element && this.element.setAttribute(g, v), + this.alignByTranslate || + ((b[c] = ((this[g] || 0) - v) / 2), this.attr(b))); + }; + }), + u(g) && y.attr({ x: g, y: b }), + (y.isImg = !0), + u(y.imgwidth) && u(y.imgheight) + ? F() + : (y.attr({ width: 0, height: 0 }), + w('img', { + onload: function() { + var a = l[e.chartIndex]; + 0 === this.width && + (n(this, { position: 'absolute', top: '-999em' }), + m.body.appendChild(this)); + J[x] = { width: this.width, height: this.height }; + y.imgwidth = this.width; + y.imgheight = this.height; + y.element && F(); + this.parentNode && this.parentNode.removeChild(this); + e.imgCount--; + if (!e.imgCount && a && a.onload) a.onload(); + }, + src: x, + }), + this.imgCount++)); + return y; + }, + symbols: { + circle: function(a, g, b, v) { + return this.arc(a + b / 2, g + v / 2, b / 2, v / 2, { + start: 0, + end: 2 * Math.PI, + open: !1, + }); + }, + square: function(a, g, b, v) { + return ['M', a, g, 'L', a + b, g, a + b, g + v, a, g + v, 'Z']; + }, + triangle: function(a, g, b, v) { + return ['M', a + b / 2, g, 'L', a + b, g + v, a, g + v, 'Z']; + }, + 'triangle-down': function(a, g, b, v) { + return ['M', a, g, 'L', a + b, g, a + b / 2, g + v, 'Z']; + }, + diamond: function(a, g, b, v) { + return [ + 'M', + a + b / 2, + g, + 'L', + a + b, + g + v / 2, + a + b / 2, + g + v, + a, + g + v / 2, + 'Z', + ]; + }, + arc: function(a, g, b, v, c) { + var k = c.start, + d = c.r || b, + q = c.r || v || b, + e = c.end - 0.001; + b = c.innerR; + v = G(c.open, 0.001 > Math.abs(c.end - c.start - 2 * Math.PI)); + var y = Math.cos(k), + z = Math.sin(k), + h = Math.cos(e), + e = Math.sin(e); + c = 0.001 > c.end - k - Math.PI ? 0 : 1; + d = [ + 'M', + a + d * y, + g + q * z, + 'A', + d, + q, + 0, + c, + 1, + a + d * h, + g + q * e, + ]; + u(b) && + d.push( + v ? 'M' : 'L', + a + b * h, + g + b * e, + 'A', + b, + b, + 0, + c, + 0, + a + b * y, + g + b * z, + ); + d.push(v ? '' : 'Z'); + return d; + }, + callout: function(a, g, b, v, c) { + var d = Math.min((c && c.r) || 0, b, v), + k = d + 6, + q = c && c.anchorX; + c = c && c.anchorY; + var e; + e = [ + 'M', + a + d, + g, + 'L', + a + b - d, + g, + 'C', + a + b, + g, + a + b, + g, + a + b, + g + d, + 'L', + a + b, + g + v - d, + 'C', + a + b, + g + v, + a + b, + g + v, + a + b - d, + g + v, + 'L', + a + d, + g + v, + 'C', + a, + g + v, + a, + g + v, + a, + g + v - d, + 'L', + a, + g + d, + 'C', + a, + g, + a, + g, + a + d, + g, + ]; + q && q > b + ? c > g + k && c < g + v - k + ? e.splice( + 13, + 3, + 'L', + a + b, + c - 6, + a + b + 6, + c, + a + b, + c + 6, + a + b, + g + v - d, + ) + : e.splice( + 13, + 3, + 'L', + a + b, + v / 2, + q, + c, + a + b, + v / 2, + a + b, + g + v - d, + ) + : q && 0 > q + ? c > g + k && c < g + v - k + ? e.splice(33, 3, 'L', a, c + 6, a - 6, c, a, c - 6, a, g + d) + : e.splice(33, 3, 'L', a, v / 2, q, c, a, v / 2, a, g + d) + : c && c > v && q > a + k && q < a + b - k + ? e.splice( + 23, + 3, + 'L', + q + 6, + g + v, + q, + g + v + 6, + q - 6, + g + v, + a + d, + g + v, + ) + : c && + 0 > c && + q > a + k && + q < a + b - k && + e.splice(3, 3, 'L', q - 6, g, q, g - 6, q + 6, g, b - d, g); + return e; + }, + }, + clipRect: function(g, b, v, c) { + var d = a.uniqueKey(), + k = this.createElement('clipPath') + .attr({ id: d }) + .add(this.defs); + g = this.rect(g, b, v, c, 0).add(k); + g.id = d; + g.clipPath = k; + g.count = 0; + return g; + }, + text: function(a, g, b, v) { + var c = {}; + if (v && (this.allowHTML || !this.forExport)) return this.html(a, g, b); + c.x = Math.round(g || 0); + b && (c.y = Math.round(b)); + if (a || 0 === a) c.text = a; + a = this.createElement('text').attr(c); + v || + (a.xSetter = function(a, g, b) { + var v = b.getElementsByTagName('tspan'), + c, + d = b.getAttribute(g), + k; + for (k = 0; k < v.length; k++) + (c = v[k]), c.getAttribute(g) === d && c.setAttribute(g, a); + b.setAttribute(g, a); + }); + return a; + }, + fontMetrics: function(a, b) { + a = + a || + (b && b.style && b.style.fontSize) || + (this.style && this.style.fontSize); + a = /px/.test(a) + ? g(a) + : /em/.test(a) + ? parseFloat(a) * (b ? this.fontMetrics(null, b.parentNode).f : 16) + : 12; + b = 24 > a ? a + 3 : Math.round(1.2 * a); + return { h: b, b: Math.round(0.8 * b), f: a }; + }, + rotCorr: function(a, g, b) { + var v = a; + g && b && (v = Math.max(v * Math.cos(g * e), 4)); + return { x: (-a / 3) * Math.sin(g * e), y: v }; + }, + label: function(g, b, k, e, z, h, m, A, L) { + var y = this, + J = y.g('button' !== L && 'label'), + t = (J.text = y.text('', 0, 0, m).attr({ zIndex: 1 })), + x, + F, + n = 0, + B = 3, + l = 0, + C, + f, + Q, + G, + w, + R = {}, + I, + P, + r = /^url\((.*?)\)$/.test(e), + p = r, + K, + O, + N, + T; + L && J.addClass('highcharts-' + L); + p = r; + K = function() { + return ((I || 0) % 2) / 2; + }; + O = function() { + var a = t.element.style, + g = {}; + F = + (void 0 === C || void 0 === f || w) && u(t.textStr) && t.getBBox(); + J.width = (C || F.width || 0) + 2 * B + l; + J.height = (f || F.height || 0) + 2 * B; + P = B + y.fontMetrics(a && a.fontSize, t).b; + p && + (x || + ((J.box = x = y.symbols[e] || r ? y.symbol(e) : y.rect()), + x.addClass( + ('button' === L ? '' : 'highcharts-label-box') + + (L ? ' highcharts-' + L + '-box' : ''), + ), + x.add(J), + (a = K()), + (g.x = a), + (g.y = (A ? -P : 0) + a)), + (g.width = Math.round(J.width)), + (g.height = Math.round(J.height)), + x.attr(c(g, R)), + (R = {})); + }; + N = function() { + var a = l + B, + g; + g = A ? 0 : P; + u(C) && + F && + ('center' === w || 'right' === w) && + (a += { center: 0.5, right: 1 }[w] * (C - F.width)); + if (a !== t.x || g !== t.y) + t.attr('x', a), void 0 !== g && t.attr('y', g); + t.x = a; + t.y = g; + }; + T = function(a, g) { + x ? x.attr(a, g) : (R[a] = g); + }; + J.onAdd = function() { + t.add(J); + J.attr({ text: g || 0 === g ? g : '', x: b, y: k }); + x && u(z) && J.attr({ anchorX: z, anchorY: h }); + }; + J.widthSetter = function(g) { + C = a.isNumber(g) ? g : null; + }; + J.heightSetter = function(a) { + f = a; + }; + J['text-alignSetter'] = function(a) { + w = a; + }; + J.paddingSetter = function(a) { + u(a) && a !== B && ((B = J.padding = a), N()); + }; + J.paddingLeftSetter = function(a) { + u(a) && a !== l && ((l = a), N()); + }; + J.alignSetter = function(a) { + a = { left: 0, center: 0.5, right: 1 }[a]; + a !== n && ((n = a), F && J.attr({ x: Q })); + }; + J.textSetter = function(a) { + void 0 !== a && t.textSetter(a); + O(); + N(); + }; + J['stroke-widthSetter'] = function(a, g) { + a && (p = !0); + I = this['stroke-width'] = a; + T(g, a); + }; + J.strokeSetter = J.fillSetter = J.rSetter = function(a, g) { + 'r' !== g && ('fill' === g && a && (p = !0), (J[g] = a)); + T(g, a); + }; + J.anchorXSetter = function(a, g) { + z = J.anchorX = a; + T(g, Math.round(a) - K() - Q); + }; + J.anchorYSetter = function(a, g) { + h = J.anchorY = a; + T(g, a - G); + }; + J.xSetter = function(a) { + J.x = a; + n && (a -= n * ((C || F.width) + 2 * B)); + Q = Math.round(a); + J.attr('translateX', Q); + }; + J.ySetter = function(a) { + G = J.y = Math.round(a); + J.attr('translateY', G); + }; + var U = J.css; + return c(J, { + css: function(a) { + if (a) { + var g = {}; + a = q(a); + d(J.textProps, function(b) { + void 0 !== a[b] && ((g[b] = a[b]), delete a[b]); + }); + t.css(g); + } + return U.call(J, a); + }, + getBBox: function() { + return { + width: F.width + 2 * B, + height: F.height + 2 * B, + x: F.x - B, + y: F.y - B, + }; + }, + shadow: function(a) { + a && (O(), x && x.shadow(a)); + return J; + }, + destroy: function() { + v(J.element, 'mouseenter'); + v(J.element, 'mouseleave'); + t && (t = t.destroy()); + x && (x = x.destroy()); + E.prototype.destroy.call(J); + J = y = O = N = T = null; + }, + }); + }, + }); + a.Renderer = D; + })(M); + (function(a) { + var E = a.attr, + D = a.createElement, + H = a.css, + p = a.defined, + f = a.each, + l = a.extend, + r = a.isFirefox, + n = a.isMS, + w = a.isWebKit, + u = a.pick, + e = a.pInt, + h = a.SVGRenderer, + m = a.win, + d = a.wrap; + l(a.SVGElement.prototype, { + htmlCss: function(a) { + var b = this.element; + if ((b = a && 'SPAN' === b.tagName && a.width)) + delete a.width, (this.textWidth = b), this.updateTransform(); + a && + 'ellipsis' === a.textOverflow && + ((a.whiteSpace = 'nowrap'), (a.overflow = 'hidden')); + this.styles = l(this.styles, a); + H(this.element, a); + return this; + }, + htmlGetBBox: function() { + var a = this.element; + return { + x: a.offsetLeft, + y: a.offsetTop, + width: a.offsetWidth, + height: a.offsetHeight, + }; + }, + htmlUpdateTransform: function() { + if (this.added) { + var a = this.renderer, + b = this.element, + d = this.translateX || 0, + z = this.translateY || 0, + h = this.x || 0, + m = this.y || 0, + x = this.textAlign || 'left', + n = { left: 0, center: 0.5, right: 1 }[x], + t = this.styles; + H(b, { marginLeft: d, marginTop: z }); + this.shadows && + f(this.shadows, function(a) { + H(a, { marginLeft: d + 1, marginTop: z + 1 }); + }); + this.inverted && + f(b.childNodes, function(c) { + a.invertChild(c, b); + }); + if ('SPAN' === b.tagName) { + var l = this.rotation, + u = e(this.textWidth), + q = t && t.whiteSpace, + A = [l, x, b.innerHTML, this.textWidth, this.textAlign].join(); + A !== this.cTT && + ((t = a.fontMetrics(b.style.fontSize).b), + p(l) && this.setSpanRotation(l, n, t), + H(b, { width: '', whiteSpace: q || 'nowrap' }), + b.offsetWidth > u && + /[ \-]/.test(b.textContent || b.innerText) && + H(b, { + width: u + 'px', + display: 'block', + whiteSpace: q || 'normal', + }), + this.getSpanCorrection(b.offsetWidth, t, n, l, x)); + H(b, { + left: h + (this.xCorr || 0) + 'px', + top: m + (this.yCorr || 0) + 'px', + }); + w && (t = b.offsetHeight); + this.cTT = A; + } + } else this.alignOnAdd = !0; + }, + setSpanRotation: function(a, b, d) { + var c = {}, + k = this.renderer.getTransformKey(); + c[k] = c.transform = 'rotate(' + a + 'deg)'; + c[k + (r ? 'Origin' : '-origin')] = c.transformOrigin = + 100 * b + '% ' + d + 'px'; + H(this.element, c); + }, + getSpanCorrection: function(a, b, d) { + this.xCorr = -a * d; + this.yCorr = -b; + }, + }); + l(h.prototype, { + getTransformKey: function() { + return n && !/Edge/.test(m.navigator.userAgent) + ? '-ms-transform' + : w + ? '-webkit-transform' + : r + ? 'MozTransform' + : m.opera + ? '-o-transform' + : ''; + }, + html: function(a, b, k) { + var c = this.createElement('span'), + e = c.element, + h = c.renderer, + m = h.isSVG, + w = function(a, b) { + f(['opacity', 'visibility'], function(c) { + d(a, c + 'Setter', function(a, c, d, k) { + a.call(this, c, d, k); + b[d] = c; + }); + }); + }; + c.textSetter = function(a) { + a !== e.innerHTML && delete this.bBox; + this.textStr = a; + e.innerHTML = u(a, ''); + c.htmlUpdateTransform(); + }; + m && w(c, c.element.style); + c.xSetter = c.ySetter = c.alignSetter = c.rotationSetter = function( + a, + b, + ) { + 'align' === b && (b = 'textAlign'); + c[b] = a; + c.htmlUpdateTransform(); + }; + c.attr({ text: a, x: Math.round(b), y: Math.round(k) }).css({ + fontFamily: this.style.fontFamily, + fontSize: this.style.fontSize, + position: 'absolute', + }); + e.style.whiteSpace = 'nowrap'; + c.css = c.htmlCss; + m && + (c.add = function(a) { + var b, + d = h.box.parentNode, + k = []; + if ((this.parentGroup = a)) { + if (((b = a.div), !b)) { + for (; a; ) k.push(a), (a = a.parentGroup); + f(k.reverse(), function(a) { + function e(g, b) { + a[b] = g; + n + ? (q[h.getTransformKey()] = + 'translate(' + + (a.x || a.translateX) + + 'px,' + + (a.y || a.translateY) + + 'px)') + : 'translateX' === b + ? (q.left = g + 'px') + : (q.top = g + 'px'); + a.doTransform = !0; + } + var q, + g = E(a.element, 'class'); + g && (g = { className: g }); + b = a.div = + a.div || + D( + 'div', + g, + { + position: 'absolute', + left: (a.translateX || 0) + 'px', + top: (a.translateY || 0) + 'px', + display: a.display, + opacity: a.opacity, + pointerEvents: a.styles && a.styles.pointerEvents, + }, + b || d, + ); + q = b.style; + l(a, { + classSetter: (function(a) { + return function(g) { + this.element.setAttribute('class', g); + a.className = g; + }; + })(b), + on: function() { + k[0].div && c.on.apply({ element: k[0].div }, arguments); + return a; + }, + translateXSetter: e, + translateYSetter: e, + }); + w(a, q); + }); + } + } else b = d; + b.appendChild(e); + c.added = !0; + c.alignOnAdd && c.htmlUpdateTransform(); + return c; + }); + return c; + }, + }); + })(M); + (function(a) { + function E() { + var n = a.defaultOptions.global, + l = r.moment; + if (n.timezone) { + if (l) + return function(a) { + return -l.tz(a, n.timezone).utcOffset(); + }; + a.error(25); + } + return n.useUTC && n.getTimezoneOffset; + } + function D() { + var n = a.defaultOptions.global, + f, + u = n.useUTC, + e = u ? 'getUTC' : 'get', + h = u ? 'setUTC' : 'set', + m = 'Minutes Hours Day Date Month FullYear'.split(' '), + d = m.concat(['Milliseconds', 'Seconds']); + a.Date = f = n.Date || r.Date; + f.hcTimezoneOffset = u && n.timezoneOffset; + f.hcGetTimezoneOffset = E(); + f.hcHasTimeZone = !(!f.hcTimezoneOffset && !f.hcGetTimezoneOffset); + f.hcMakeTime = function(a, b, d, e, h, m) { + var c; + u + ? ((c = f.UTC.apply(0, arguments)), (c += p(c))) + : (c = new f(a, b, l(d, 1), l(e, 0), l(h, 0), l(m, 0)).getTime()); + return c; + }; + for (n = 0; n < m.length; n++) f['hcGet' + m[n]] = e + m[n]; + for (n = 0; n < d.length; n++) f['hcSet' + d[n]] = h + d[n]; + } + var H = a.color, + p = a.getTZOffset, + f = a.merge, + l = a.pick, + r = a.win; + a.defaultOptions = { + colors: '#7cb5ec #434348 #90ed7d #f7a35c #8085e9 #f15c80 #e4d354 #2b908f #f45b5b #91e8e1'.split( + ' ', + ), + symbols: ['circle', 'diamond', 'square', 'triangle', 'triangle-down'], + lang: { + loading: 'Loading...', + months: 'January February March April May June July August September October November December'.split( + ' ', + ), + shortMonths: 'Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec'.split( + ' ', + ), + weekdays: 'Sunday Monday Tuesday Wednesday Thursday Friday Saturday'.split( + ' ', + ), + decimalPoint: '.', + numericSymbols: 'kMGTPE'.split(''), + resetZoom: 'Reset zoom', + resetZoomTitle: 'Reset zoom level 1:1', + thousandsSep: ' ', + }, + global: { useUTC: !0 }, + chart: { + borderRadius: 0, + defaultSeriesType: 'line', + ignoreHiddenSeries: !0, + spacing: [10, 10, 15, 10], + resetZoomButton: { + theme: { zIndex: 6 }, + position: { align: 'right', x: -10, y: 10 }, + }, + width: null, + height: null, + borderColor: '#335cad', + backgroundColor: '#ffffff', + plotBorderColor: '#cccccc', + }, + title: { + text: 'Chart title', + align: 'center', + margin: 15, + widthAdjust: -44, + }, + subtitle: { text: '', align: 'center', widthAdjust: -44 }, + plotOptions: {}, + labels: { style: { position: 'absolute', color: '#333333' } }, + legend: { + enabled: !0, + align: 'center', + layout: 'horizontal', + labelFormatter: function() { + return this.name; + }, + borderColor: '#999999', + borderRadius: 0, + navigation: { activeColor: '#003399', inactiveColor: '#cccccc' }, + itemStyle: { + color: '#333333', + fontSize: '12px', + fontWeight: 'bold', + textOverflow: 'ellipsis', + }, + itemHoverStyle: { color: '#000000' }, + itemHiddenStyle: { color: '#cccccc' }, + shadow: !1, + itemCheckboxStyle: { + position: 'absolute', + width: '13px', + height: '13px', + }, + squareSymbol: !0, + symbolPadding: 5, + verticalAlign: 'bottom', + x: 0, + y: 0, + title: { style: { fontWeight: 'bold' } }, + }, + loading: { + labelStyle: { fontWeight: 'bold', position: 'relative', top: '45%' }, + style: { + position: 'absolute', + backgroundColor: '#ffffff', + opacity: 0.5, + textAlign: 'center', + }, + }, + tooltip: { + enabled: !0, + animation: a.svg, + borderRadius: 3, + dateTimeLabelFormats: { + millisecond: '%A, %b %e, %H:%M:%S.%L', + second: '%A, %b %e, %H:%M:%S', + minute: '%A, %b %e, %H:%M', + hour: '%A, %b %e, %H:%M', + day: '%A, %b %e, %Y', + week: 'Week from %A, %b %e, %Y', + month: '%B %Y', + year: '%Y', + }, + footerFormat: '', + padding: 8, + snap: a.isTouchDevice ? 25 : 10, + backgroundColor: H('#f7f7f7') + .setOpacity(0.85) + .get(), + borderWidth: 1, + headerFormat: + '\x3cspan style\x3d"font-size: 10px"\x3e{point.key}\x3c/span\x3e\x3cbr/\x3e', + pointFormat: + '\x3cspan style\x3d"color:{point.color}"\x3e\u25cf\x3c/span\x3e {series.name}: \x3cb\x3e{point.y}\x3c/b\x3e\x3cbr/\x3e', + shadow: !0, + style: { + color: '#333333', + cursor: 'default', + fontSize: '12px', + pointerEvents: 'none', + whiteSpace: 'nowrap', + }, + }, + credits: { + enabled: !0, + href: 'http://www.highcharts.com', + position: { align: 'right', x: -10, verticalAlign: 'bottom', y: -5 }, + style: { cursor: 'pointer', color: '#999999', fontSize: '9px' }, + text: 'Highcharts.com', + }, + }; + a.setOptions = function(n) { + a.defaultOptions = f(!0, a.defaultOptions, n); + D(); + return a.defaultOptions; + }; + a.getOptions = function() { + return a.defaultOptions; + }; + a.defaultPlotOptions = a.defaultOptions.plotOptions; + D(); + })(M); + (function(a) { + var E = a.correctFloat, + D = a.defined, + H = a.destroyObjectProperties, + p = a.isNumber, + f = a.merge, + l = a.pick, + r = a.deg2rad; + a.Tick = function(a, l, f, e) { + this.axis = a; + this.pos = l; + this.type = f || ''; + this.isNewLabel = this.isNew = !0; + f || e || this.addLabel(); + }; + a.Tick.prototype = { + addLabel: function() { + var a = this.axis, + w = a.options, + u = a.chart, + e = a.categories, + h = a.names, + m = this.pos, + d = w.labels, + c = a.tickPositions, + b = m === c[0], + k = m === c[c.length - 1], + h = e ? l(e[m], h[m], m) : m, + e = this.label, + c = c.info, + z; + a.isDatetimeAxis && + c && + (z = w.dateTimeLabelFormats[c.higherRanks[m] || c.unitName]); + this.isFirst = b; + this.isLast = k; + w = a.labelFormatter.call({ + axis: a, + chart: u, + isFirst: b, + isLast: k, + dateTimeLabelFormat: z, + value: a.isLog ? E(a.lin2log(h)) : h, + pos: m, + }); + D(e) + ? e && e.attr({ text: w }) + : ((this.labelLength = + (this.label = e = + D(w) && d.enabled + ? u.renderer + .text(w, 0, 0, d.useHTML) + .css(f(d.style)) + .add(a.labelGroup) + : null) && e.getBBox().width), + (this.rotation = 0)); + }, + getLabelSize: function() { + return this.label + ? this.label.getBBox()[this.axis.horiz ? 'height' : 'width'] + : 0; + }, + handleOverflow: function(a) { + var f = this.axis, + n = f.options.labels, + e = a.x, + h = f.chart.chartWidth, + m = f.chart.spacing, + d = l(f.labelLeft, Math.min(f.pos, m[3])), + m = l( + f.labelRight, + Math.max(f.isRadial ? 0 : f.pos + f.len, h - m[1]), + ), + c = this.label, + b = this.rotation, + k = { left: 0, center: 0.5, right: 1 }[ + f.labelAlign || c.attr('align') + ], + z = c.getBBox().width, + B = f.getSlotWidth(), + I = B, + x = 1, + p, + t = {}; + if (b || !1 === n.overflow) + 0 > b && e - k * z < d + ? (p = Math.round(e / Math.cos(b * r) - d)) + : 0 < b && + e + k * z > m && + (p = Math.round((h - e) / Math.cos(b * r))); + else if ( + ((h = e + (1 - k) * z), + e - k * z < d + ? (I = a.x + I * (1 - k) - d) + : h > m && ((I = m - a.x + I * k), (x = -1)), + (I = Math.min(B, I)), + I < B && + 'center' === f.labelAlign && + (a.x += x * (B - I - k * (B - Math.min(z, I)))), + z > I || (f.autoRotation && (c.styles || {}).width)) + ) + p = I; + p && + ((t.width = p), + (n.style || {}).textOverflow || (t.textOverflow = 'ellipsis'), + c.css(t)); + }, + getPosition: function(a, f, l, e) { + var h = this.axis, + m = h.chart, + d = (e && m.oldChartHeight) || m.chartHeight; + return { + x: a + ? h.translate(f + l, null, null, e) + h.transB + : h.left + + h.offset + + (h.opposite + ? ((e && m.oldChartWidth) || m.chartWidth) - h.right - h.left + : 0), + y: a + ? d - h.bottom + h.offset - (h.opposite ? h.height : 0) + : d - h.translate(f + l, null, null, e) - h.transB, + }; + }, + getLabelPosition: function(a, f, l, e, h, m, d, c) { + var b = this.axis, + k = b.transA, + z = b.reversed, + B = b.staggerLines, + n = b.tickRotCorr || { x: 0, y: 0 }, + x = h.y, + u = + e || b.reserveSpaceDefault + ? 0 + : -b.labelOffset * ('center' === b.labelAlign ? 0.5 : 1); + D(x) || + (x = + 0 === b.side + ? l.rotation + ? -8 + : -l.getBBox().height + : 2 === b.side + ? n.y + 8 + : Math.cos(l.rotation * r) * (n.y - l.getBBox(!1, 0).height / 2)); + a = a + h.x + u + n.x - (m && e ? m * k * (z ? -1 : 1) : 0); + f = f + x - (m && !e ? m * k * (z ? 1 : -1) : 0); + B && + ((l = (d / (c || 1)) % B), + b.opposite && (l = B - l - 1), + (f += (b.labelOffset / B) * l)); + return { x: a, y: Math.round(f) }; + }, + getMarkPath: function(a, f, l, e, h, m) { + return m.crispLine( + ['M', a, f, 'L', a + (h ? 0 : -l), f + (h ? l : 0)], + e, + ); + }, + renderGridLine: function(a, f, l) { + var e = this.axis, + h = e.options, + m = this.gridLine, + d = {}, + c = this.pos, + b = this.type, + k = e.tickmarkOffset, + z = e.chart.renderer, + B = b ? b + 'Grid' : 'grid', + n = h[B + 'LineWidth'], + x = h[B + 'LineColor'], + h = h[B + 'LineDashStyle']; + m || + ((d.stroke = x), + (d['stroke-width'] = n), + h && (d.dashstyle = h), + b || (d.zIndex = 1), + a && (d.opacity = 0), + (this.gridLine = m = z + .path() + .attr(d) + .addClass('highcharts-' + (b ? b + '-' : '') + 'grid-line') + .add(e.gridGroup))); + if ( + !a && + m && + (a = e.getPlotLinePath(c + k, m.strokeWidth() * l, a, !0)) + ) + m[this.isNew ? 'attr' : 'animate']({ d: a, opacity: f }); + }, + renderMark: function(a, f, u) { + var e = this.axis, + h = e.options, + m = e.chart.renderer, + d = this.type, + c = d ? d + 'Tick' : 'tick', + b = e.tickSize(c), + k = this.mark, + z = !k, + B = a.x; + a = a.y; + var n = l(h[c + 'Width'], !d && e.isXAxis ? 1 : 0), + h = h[c + 'Color']; + b && + (e.opposite && (b[0] = -b[0]), + z && + ((this.mark = k = m + .path() + .addClass('highcharts-' + (d ? d + '-' : '') + 'tick') + .add(e.axisGroup)), + k.attr({ stroke: h, 'stroke-width': n })), + k[z ? 'attr' : 'animate']({ + d: this.getMarkPath(B, a, b[0], k.strokeWidth() * u, e.horiz, m), + opacity: f, + })); + }, + renderLabel: function(a, f, u, e) { + var h = this.axis, + m = h.horiz, + d = h.options, + c = this.label, + b = d.labels, + k = b.step, + h = h.tickmarkOffset, + z = !0, + B = a.x; + a = a.y; + c && + p(B) && + ((c.xy = a = this.getLabelPosition(B, a, c, m, b, h, e, k)), + (this.isFirst && !this.isLast && !l(d.showFirstLabel, 1)) || + (this.isLast && !this.isFirst && !l(d.showLastLabel, 1)) + ? (z = !1) + : !m || + b.step || + b.rotation || + f || + 0 === u || + this.handleOverflow(a), + k && e % k && (z = !1), + z && p(a.y) + ? ((a.opacity = u), + c[this.isNewLabel ? 'attr' : 'animate'](a), + (this.isNewLabel = !1)) + : (c.attr('y', -9999), (this.isNewLabel = !0))); + }, + render: function(a, f, u) { + var e = this.axis, + h = e.horiz, + m = this.getPosition(h, this.pos, e.tickmarkOffset, f), + d = m.x, + c = m.y, + e = (h && d === e.pos + e.len) || (!h && c === e.pos) ? -1 : 1; + u = l(u, 1); + this.isActive = !0; + this.renderGridLine(f, u, e); + this.renderMark(m, u, e); + this.renderLabel(m, f, u, a); + this.isNew = !1; + }, + destroy: function() { + H(this, this.axis); + }, + }; + })(M); + var V = (function(a) { + var E = a.addEvent, + D = a.animObject, + H = a.arrayMax, + p = a.arrayMin, + f = a.color, + l = a.correctFloat, + r = a.defaultOptions, + n = a.defined, + w = a.deg2rad, + u = a.destroyObjectProperties, + e = a.each, + h = a.extend, + m = a.fireEvent, + d = a.format, + c = a.getMagnitude, + b = a.grep, + k = a.inArray, + z = a.isArray, + B = a.isNumber, + I = a.isString, + x = a.merge, + K = a.normalizeTickInterval, + t = a.objectEach, + C = a.pick, + N = a.removeEvent, + q = a.splat, + A = a.syncTimeout, + F = a.Tick, + G = function() { + this.init.apply(this, arguments); + }; + a.extend(G.prototype, { + defaultOptions: { + dateTimeLabelFormats: { + millisecond: '%H:%M:%S.%L', + second: '%H:%M:%S', + minute: '%H:%M', + hour: '%H:%M', + day: '%e. %b', + week: '%e. %b', + month: "%b '%y", + year: '%Y', + }, + endOnTick: !1, + labels: { + enabled: !0, + style: { color: '#666666', cursor: 'default', fontSize: '11px' }, + x: 0, + }, + maxPadding: 0.01, + minorTickLength: 2, + minorTickPosition: 'outside', + minPadding: 0.01, + startOfWeek: 1, + startOnTick: !1, + tickLength: 10, + tickmarkPlacement: 'between', + tickPixelInterval: 100, + tickPosition: 'outside', + title: { align: 'middle', style: { color: '#666666' } }, + type: 'linear', + minorGridLineColor: '#f2f2f2', + minorGridLineWidth: 1, + minorTickColor: '#999999', + lineColor: '#ccd6eb', + lineWidth: 1, + gridLineColor: '#e6e6e6', + tickColor: '#ccd6eb', + }, + defaultYAxisOptions: { + endOnTick: !0, + tickPixelInterval: 72, + showLastLabel: !0, + labels: { x: -8 }, + maxPadding: 0.05, + minPadding: 0.05, + startOnTick: !0, + title: { rotation: 270, text: 'Values' }, + stackLabels: { + allowOverlap: !1, + enabled: !1, + formatter: function() { + return a.numberFormat(this.total, -1); + }, + style: { + fontSize: '11px', + fontWeight: 'bold', + color: '#000000', + textOutline: '1px contrast', + }, + }, + gridLineWidth: 1, + lineWidth: 0, + }, + defaultLeftAxisOptions: { labels: { x: -15 }, title: { rotation: 270 } }, + defaultRightAxisOptions: { labels: { x: 15 }, title: { rotation: 90 } }, + defaultBottomAxisOptions: { + labels: { autoRotation: [-45], x: 0 }, + title: { rotation: 0 }, + }, + defaultTopAxisOptions: { + labels: { autoRotation: [-45], x: 0 }, + title: { rotation: 0 }, + }, + init: function(a, b) { + var g = b.isX, + v = this; + v.chart = a; + v.horiz = a.inverted && !v.isZAxis ? !g : g; + v.isXAxis = g; + v.coll = v.coll || (g ? 'xAxis' : 'yAxis'); + v.opposite = b.opposite; + v.side = + b.side || (v.horiz ? (v.opposite ? 0 : 2) : v.opposite ? 1 : 3); + v.setOptions(b); + var c = this.options, + d = c.type; + v.labelFormatter = c.labels.formatter || v.defaultLabelFormatter; + v.userOptions = b; + v.minPixelPadding = 0; + v.reversed = c.reversed; + v.visible = !1 !== c.visible; + v.zoomEnabled = !1 !== c.zoomEnabled; + v.hasNames = 'category' === d || !0 === c.categories; + v.categories = c.categories || v.hasNames; + v.names = v.names || []; + v.plotLinesAndBandsGroups = {}; + v.isLog = 'logarithmic' === d; + v.isDatetimeAxis = 'datetime' === d; + v.positiveValuesOnly = v.isLog && !v.allowNegativeLog; + v.isLinked = n(c.linkedTo); + v.ticks = {}; + v.labelEdge = []; + v.minorTicks = {}; + v.plotLinesAndBands = []; + v.alternateBands = {}; + v.len = 0; + v.minRange = v.userMinRange = c.minRange || c.maxZoom; + v.range = c.range; + v.offset = c.offset || 0; + v.stacks = {}; + v.oldStacks = {}; + v.stacksTouched = 0; + v.max = null; + v.min = null; + v.crosshair = C( + c.crosshair, + q(a.options.tooltip.crosshairs)[g ? 0 : 1], + !1, + ); + b = v.options.events; + -1 === k(v, a.axes) && + (g ? a.axes.splice(a.xAxis.length, 0, v) : a.axes.push(v), + a[v.coll].push(v)); + v.series = v.series || []; + a.inverted && + !v.isZAxis && + g && + void 0 === v.reversed && + (v.reversed = !0); + t(b, function(a, g) { + E(v, g, a); + }); + v.lin2log = c.linearToLogConverter || v.lin2log; + v.isLog && ((v.val2lin = v.log2lin), (v.lin2val = v.lin2log)); + }, + setOptions: function(a) { + this.options = x( + this.defaultOptions, + 'yAxis' === this.coll && this.defaultYAxisOptions, + [ + this.defaultTopAxisOptions, + this.defaultRightAxisOptions, + this.defaultBottomAxisOptions, + this.defaultLeftAxisOptions, + ][this.side], + x(r[this.coll], a), + ); + }, + defaultLabelFormatter: function() { + var g = this.axis, + b = this.value, + c = g.categories, + k = this.dateTimeLabelFormat, + e = r.lang, + q = e.numericSymbols, + e = e.numericSymbolMagnitude || 1e3, + h = q && q.length, + m, + z = g.options.labels.format, + g = g.isLog ? Math.abs(b) : g.tickInterval; + if (z) m = d(z, this); + else if (c) m = b; + else if (k) m = a.dateFormat(k, b); + else if (h && 1e3 <= g) + for (; h-- && void 0 === m; ) + (c = Math.pow(e, h + 1)), + g >= c && + 0 === (10 * b) % c && + null !== q[h] && + 0 !== b && + (m = a.numberFormat(b / c, -1) + q[h]); + void 0 === m && + (m = + 1e4 <= Math.abs(b) + ? a.numberFormat(b, -1) + : a.numberFormat(b, -1, void 0, '')); + return m; + }, + getSeriesExtremes: function() { + var a = this, + v = a.chart; + a.hasVisibleSeries = !1; + a.dataMin = a.dataMax = a.threshold = null; + a.softThreshold = !a.isXAxis; + a.buildStacks && a.buildStacks(); + e(a.series, function(g) { + if (g.visible || !v.options.chart.ignoreHiddenSeries) { + var c = g.options, + d = c.threshold, + k; + a.hasVisibleSeries = !0; + a.positiveValuesOnly && 0 >= d && (d = null); + if (a.isXAxis) + (c = g.xData), + c.length && + ((g = p(c)), + (k = H(c)), + B(g) || g instanceof Date || ((c = b(c, B)), (g = p(c))), + (a.dataMin = Math.min(C(a.dataMin, c[0], g), g)), + (a.dataMax = Math.max(C(a.dataMax, c[0], k), k))); + else if ( + (g.getExtremes(), + (k = g.dataMax), + (g = g.dataMin), + n(g) && + n(k) && + ((a.dataMin = Math.min(C(a.dataMin, g), g)), + (a.dataMax = Math.max(C(a.dataMax, k), k))), + n(d) && (a.threshold = d), + !c.softThreshold || a.positiveValuesOnly) + ) + a.softThreshold = !1; + } + }); + }, + translate: function(a, b, c, d, k, e) { + var g = this.linkedParent || this, + v = 1, + q = 0, + h = d ? g.oldTransA : g.transA; + d = d ? g.oldMin : g.min; + var m = g.minPixelPadding; + k = (g.isOrdinal || g.isBroken || (g.isLog && k)) && g.lin2val; + h || (h = g.transA); + c && ((v *= -1), (q = g.len)); + g.reversed && ((v *= -1), (q -= v * (g.sector || g.len))); + b + ? ((a = (a * v + q - m) / h + d), k && (a = g.lin2val(a))) + : (k && (a = g.val2lin(a)), + (a = B(d) + ? v * (a - d) * h + q + v * m + (B(e) ? h * e : 0) + : void 0)); + return a; + }, + toPixels: function(a, b) { + return ( + this.translate(a, !1, !this.horiz, null, !0) + (b ? 0 : this.pos) + ); + }, + toValue: function(a, b) { + return this.translate( + a - (b ? 0 : this.pos), + !0, + !this.horiz, + null, + !0, + ); + }, + getPlotLinePath: function(a, b, c, d, k) { + var g = this.chart, + v = this.left, + q = this.top, + e, + h, + m = (c && g.oldChartHeight) || g.chartHeight, + z = (c && g.oldChartWidth) || g.chartWidth, + A; + e = this.transB; + var t = function(a, g, b) { + if (a < g || a > b) d ? (a = Math.min(Math.max(g, a), b)) : (A = !0); + return a; + }; + k = C(k, this.translate(a, null, null, c)); + a = c = Math.round(k + e); + e = h = Math.round(m - k - e); + B(k) + ? this.horiz + ? ((e = q), + (h = m - this.bottom), + (a = c = t(a, v, v + this.width))) + : ((a = v), + (c = z - this.right), + (e = h = t(e, q, q + this.height))) + : ((A = !0), (d = !1)); + return A && !d + ? null + : g.renderer.crispLine(['M', a, e, 'L', c, h], b || 1); + }, + getLinearTickPositions: function(a, b, c) { + var g, + v = l(Math.floor(b / a) * a); + c = l(Math.ceil(c / a) * a); + var d = [], + k; + l(v + a) === v && (k = 20); + if (this.single) return [b]; + for (b = v; b <= c; ) { + d.push(b); + b = l(b + a, k); + if (b === g) break; + g = b; + } + return d; + }, + getMinorTickInterval: function() { + var a = this.options; + return !0 === a.minorTicks + ? C(a.minorTickInterval, 'auto') + : !1 === a.minorTicks + ? null + : a.minorTickInterval; + }, + getMinorTickPositions: function() { + var a = this, + b = a.options, + c = a.tickPositions, + d = a.minorTickInterval, + k = [], + q = a.pointRangePadding || 0, + h = a.min - q, + q = a.max + q, + m = q - h; + if (m && m / d < a.len / 3) + if (a.isLog) + e(this.paddedTicks, function(g, b, v) { + b && + k.push.apply(k, a.getLogTickPositions(d, v[b - 1], v[b], !0)); + }); + else if (a.isDatetimeAxis && 'auto' === this.getMinorTickInterval()) + k = k.concat( + a.getTimeTicks( + a.normalizeTimeTickInterval(d), + h, + q, + b.startOfWeek, + ), + ); + else + for (b = h + ((c[0] - h) % d); b <= q && b !== k[0]; b += d) + k.push(b); + 0 !== k.length && a.trimTicks(k); + return k; + }, + adjustForMinRange: function() { + var a = this.options, + b = this.min, + c = this.max, + d, + k, + q, + h, + m, + z, + A, + t; + this.isXAxis && + void 0 === this.minRange && + !this.isLog && + (n(a.min) || n(a.max) + ? (this.minRange = null) + : (e(this.series, function(a) { + z = a.xData; + for (h = A = a.xIncrement ? 1 : z.length - 1; 0 < h; h--) + if (((m = z[h] - z[h - 1]), void 0 === q || m < q)) q = m; + }), + (this.minRange = Math.min(5 * q, this.dataMax - this.dataMin)))); + c - b < this.minRange && + ((k = this.dataMax - this.dataMin >= this.minRange), + (t = this.minRange), + (d = (t - c + b) / 2), + (d = [b - d, C(a.min, b - d)]), + k && (d[2] = this.isLog ? this.log2lin(this.dataMin) : this.dataMin), + (b = H(d)), + (c = [b + t, C(a.max, b + t)]), + k && (c[2] = this.isLog ? this.log2lin(this.dataMax) : this.dataMax), + (c = p(c)), + c - b < t && ((d[0] = c - t), (d[1] = C(a.min, c - t)), (b = H(d)))); + this.min = b; + this.max = c; + }, + getClosest: function() { + var a; + this.categories + ? (a = 1) + : e(this.series, function(g) { + var b = g.closestPointRange, + v = g.visible || !g.chart.options.chart.ignoreHiddenSeries; + !g.noSharedTooltip && + n(b) && + v && + (a = n(a) ? Math.min(a, b) : b); + }); + return a; + }, + nameToX: function(a) { + var g = z(this.categories), + b = g ? this.categories : this.names, + c = a.options.x, + d; + a.series.requireSorting = !1; + n(c) || + (c = + !1 === this.options.uniqueNames + ? a.series.autoIncrement() + : k(a.name, b)); + -1 === c ? g || (d = b.length) : (d = c); + void 0 !== d && (this.names[d] = a.name); + return d; + }, + updateNames: function() { + var a = this; + 0 < this.names.length && + ((this.names.length = 0), + (this.minRange = this.userMinRange), + e(this.series || [], function(g) { + g.xIncrement = null; + if (!g.points || g.isDirtyData) g.processData(), g.generatePoints(); + e(g.points, function(b, v) { + var c; + b.options && + ((c = a.nameToX(b)), + void 0 !== c && c !== b.x && ((b.x = c), (g.xData[v] = c))); + }); + })); + }, + setAxisTranslation: function(a) { + var g = this, + b = g.max - g.min, + c = g.axisPointRange || 0, + d, + k = 0, + q = 0, + h = g.linkedParent, + m = !!g.categories, + z = g.transA, + A = g.isXAxis; + if (A || m || c) + (d = g.getClosest()), + h + ? ((k = h.minPointOffset), (q = h.pointRangePadding)) + : e(g.series, function(a) { + var b = m + ? 1 + : A + ? C(a.options.pointRange, d, 0) + : g.axisPointRange || 0; + a = a.options.pointPlacement; + c = Math.max(c, b); + g.single || + ((k = Math.max(k, I(a) ? 0 : b / 2)), + (q = Math.max(q, 'on' === a ? 0 : b))); + }), + (h = g.ordinalSlope && d ? g.ordinalSlope / d : 1), + (g.minPointOffset = k *= h), + (g.pointRangePadding = q *= h), + (g.pointRange = Math.min(c, b)), + A && (g.closestPointRange = d); + a && (g.oldTransA = z); + g.translationSlope = g.transA = z = + g.options.staticScale || g.len / (b + q || 1); + g.transB = g.horiz ? g.left : g.bottom; + g.minPixelPadding = z * k; + }, + minFromRange: function() { + return this.max - this.range; + }, + setTickInterval: function(g) { + var b = this, + d = b.chart, + k = b.options, + q = b.isLog, + h = b.log2lin, + z = b.isDatetimeAxis, + A = b.isXAxis, + t = b.isLinked, + x = k.maxPadding, + f = k.minPadding, + F = k.tickInterval, + u = k.tickPixelInterval, + G = b.categories, + p = b.threshold, + I = b.softThreshold, + r, + w, + N, + D; + z || G || t || this.getTickAmount(); + N = C(b.userMin, k.min); + D = C(b.userMax, k.max); + t + ? ((b.linkedParent = d[b.coll][k.linkedTo]), + (d = b.linkedParent.getExtremes()), + (b.min = C(d.min, d.dataMin)), + (b.max = C(d.max, d.dataMax)), + k.type !== b.linkedParent.options.type && a.error(11, 1)) + : (!I && + n(p) && + (b.dataMin >= p + ? ((r = p), (f = 0)) + : b.dataMax <= p && ((w = p), (x = 0))), + (b.min = C(N, r, b.dataMin)), + (b.max = C(D, w, b.dataMax))); + q && + (b.positiveValuesOnly && + !g && + 0 >= Math.min(b.min, C(b.dataMin, b.min)) && + a.error(10, 1), + (b.min = l(h(b.min), 15)), + (b.max = l(h(b.max), 15))); + b.range && + n(b.max) && + ((b.userMin = b.min = N = Math.max(b.dataMin, b.minFromRange())), + (b.userMax = D = b.max), + (b.range = null)); + m(b, 'foundExtremes'); + b.beforePadding && b.beforePadding(); + b.adjustForMinRange(); + !(G || b.axisPointRange || b.usePercentage || t) && + n(b.min) && + n(b.max) && + (h = b.max - b.min) && + (!n(N) && f && (b.min -= h * f), !n(D) && x && (b.max += h * x)); + B(k.softMin) && !B(b.userMin) && (b.min = Math.min(b.min, k.softMin)); + B(k.softMax) && !B(b.userMax) && (b.max = Math.max(b.max, k.softMax)); + B(k.floor) && (b.min = Math.max(b.min, k.floor)); + B(k.ceiling) && (b.max = Math.min(b.max, k.ceiling)); + I && + n(b.dataMin) && + ((p = p || 0), + !n(N) && b.min < p && b.dataMin >= p + ? (b.min = p) + : !n(D) && b.max > p && b.dataMax <= p && (b.max = p)); + b.tickInterval = + b.min === b.max || void 0 === b.min || void 0 === b.max + ? 1 + : t && !F && u === b.linkedParent.options.tickPixelInterval + ? (F = b.linkedParent.tickInterval) + : C( + F, + this.tickAmount + ? (b.max - b.min) / Math.max(this.tickAmount - 1, 1) + : void 0, + G ? 1 : ((b.max - b.min) * u) / Math.max(b.len, u), + ); + A && + !g && + e(b.series, function(a) { + a.processData(b.min !== b.oldMin || b.max !== b.oldMax); + }); + b.setAxisTranslation(!0); + b.beforeSetTickPositions && b.beforeSetTickPositions(); + b.postProcessTickInterval && + (b.tickInterval = b.postProcessTickInterval(b.tickInterval)); + b.pointRange && + !F && + (b.tickInterval = Math.max(b.pointRange, b.tickInterval)); + g = C(k.minTickInterval, b.isDatetimeAxis && b.closestPointRange); + !F && b.tickInterval < g && (b.tickInterval = g); + z || + q || + F || + (b.tickInterval = K( + b.tickInterval, + null, + c(b.tickInterval), + C( + k.allowDecimals, + !( + 0.5 < b.tickInterval && + 5 > b.tickInterval && + 1e3 < b.max && + 9999 > b.max + ), + ), + !!this.tickAmount, + )); + this.tickAmount || (b.tickInterval = b.unsquish()); + this.setTickPositions(); + }, + setTickPositions: function() { + var a = this.options, + b, + c = a.tickPositions; + b = this.getMinorTickInterval(); + var d = a.tickPositioner, + k = a.startOnTick, + q = a.endOnTick; + this.tickmarkOffset = + this.categories && + 'between' === a.tickmarkPlacement && + 1 === this.tickInterval + ? 0.5 + : 0; + this.minorTickInterval = + 'auto' === b && this.tickInterval ? this.tickInterval / 5 : b; + this.single = + this.min === this.max && + n(this.min) && + !this.tickAmount && + (parseInt(this.min, 10) === this.min || !1 !== a.allowDecimals); + this.tickPositions = b = c && c.slice(); + !b && + ((b = this.isDatetimeAxis + ? this.getTimeTicks( + this.normalizeTimeTickInterval(this.tickInterval, a.units), + this.min, + this.max, + a.startOfWeek, + this.ordinalPositions, + this.closestPointRange, + !0, + ) + : this.isLog + ? this.getLogTickPositions(this.tickInterval, this.min, this.max) + : this.getLinearTickPositions( + this.tickInterval, + this.min, + this.max, + )), + b.length > this.len && + ((b = [b[0], b.pop()]), b[0] === b[1] && (b.length = 1)), + (this.tickPositions = b), + d && (d = d.apply(this, [this.min, this.max]))) && + (this.tickPositions = b = d); + this.paddedTicks = b.slice(0); + this.trimTicks(b, k, q); + this.isLinked || + (this.single && + 2 > b.length && + ((this.min -= 0.5), (this.max += 0.5)), + c || d || this.adjustTickAmount()); + }, + trimTicks: function(a, b, c) { + var g = a[0], + d = a[a.length - 1], + k = this.minPointOffset || 0; + if (!this.isLinked) { + if (b && -Infinity !== g) this.min = g; + else for (; this.min - k > a[0]; ) a.shift(); + if (c) this.max = d; + else for (; this.max + k < a[a.length - 1]; ) a.pop(); + 0 === a.length && + n(g) && + !this.options.tickPositions && + a.push((d + g) / 2); + } + }, + alignToOthers: function() { + var a = {}, + b, + c = this.options; + !1 === this.chart.options.chart.alignTicks || + !1 === c.alignTicks || + this.isLog || + e(this.chart[this.coll], function(g) { + var c = g.options, + c = [g.horiz ? c.left : c.top, c.width, c.height, c.pane].join(); + g.series.length && (a[c] ? (b = !0) : (a[c] = 1)); + }); + return b; + }, + getTickAmount: function() { + var a = this.options, + b = a.tickAmount, + c = a.tickPixelInterval; + !n(a.tickInterval) && + this.len < c && + !this.isRadial && + !this.isLog && + a.startOnTick && + a.endOnTick && + (b = 2); + !b && this.alignToOthers() && (b = Math.ceil(this.len / c) + 1); + 4 > b && ((this.finalTickAmt = b), (b = 5)); + this.tickAmount = b; + }, + adjustTickAmount: function() { + var a = this.tickInterval, + b = this.tickPositions, + c = this.tickAmount, + d = this.finalTickAmt, + k = b && b.length, + q = C(this.threshold, this.softThreshold ? 0 : null); + if (this.hasData()) { + if (k < c) { + for (; b.length < c; ) + b.length % 2 || this.min === q + ? b.push(l(b[b.length - 1] + a)) + : b.unshift(l(b[0] - a)); + this.transA *= (k - 1) / (c - 1); + this.min = b[0]; + this.max = b[b.length - 1]; + } else k > c && ((this.tickInterval *= 2), this.setTickPositions()); + if (n(d)) { + for (a = c = b.length; a--; ) + ((3 === d && 1 === a % 2) || (2 >= d && 0 < a && a < c - 1)) && + b.splice(a, 1); + this.finalTickAmt = void 0; + } + } + }, + setScale: function() { + var a, b; + this.oldMin = this.min; + this.oldMax = this.max; + this.oldAxisLength = this.len; + this.setAxisSize(); + b = this.len !== this.oldAxisLength; + e(this.series, function(b) { + if (b.isDirtyData || b.isDirty || b.xAxis.isDirty) a = !0; + }); + b || + a || + this.isLinked || + this.forceRedraw || + this.userMin !== this.oldUserMin || + this.userMax !== this.oldUserMax || + this.alignToOthers() + ? (this.resetStacks && this.resetStacks(), + (this.forceRedraw = !1), + this.getSeriesExtremes(), + this.setTickInterval(), + (this.oldUserMin = this.userMin), + (this.oldUserMax = this.userMax), + this.isDirty || + (this.isDirty = + b || this.min !== this.oldMin || this.max !== this.oldMax)) + : this.cleanStacks && this.cleanStacks(); + }, + setExtremes: function(a, b, c, d, k) { + var g = this, + q = g.chart; + c = C(c, !0); + e(g.series, function(a) { + delete a.kdTree; + }); + k = h(k, { min: a, max: b }); + m(g, 'setExtremes', k, function() { + g.userMin = a; + g.userMax = b; + g.eventArgs = k; + c && q.redraw(d); + }); + }, + zoom: function(a, b) { + var g = this.dataMin, + c = this.dataMax, + d = this.options, + k = Math.min(g, C(d.min, g)), + d = Math.max(c, C(d.max, c)); + if (a !== this.min || b !== this.max) + this.allowZoomOutside || + (n(g) && (a < k && (a = k), a > d && (a = d)), + n(c) && (b < k && (b = k), b > d && (b = d))), + (this.displayBtn = void 0 !== a || void 0 !== b), + this.setExtremes(a, b, !1, void 0, { trigger: 'zoom' }); + return !0; + }, + setAxisSize: function() { + var b = this.chart, + c = this.options, + d = c.offsets || [0, 0, 0, 0], + k = this.horiz, + q = (this.width = Math.round( + a.relativeLength( + C(c.width, b.plotWidth - d[3] + d[1]), + b.plotWidth, + ), + )), + e = (this.height = Math.round( + a.relativeLength( + C(c.height, b.plotHeight - d[0] + d[2]), + b.plotHeight, + ), + )), + h = (this.top = Math.round( + a.relativeLength( + C(c.top, b.plotTop + d[0]), + b.plotHeight, + b.plotTop, + ), + )), + c = (this.left = Math.round( + a.relativeLength( + C(c.left, b.plotLeft + d[3]), + b.plotWidth, + b.plotLeft, + ), + )); + this.bottom = b.chartHeight - e - h; + this.right = b.chartWidth - q - c; + this.len = Math.max(k ? q : e, 0); + this.pos = k ? c : h; + }, + getExtremes: function() { + var a = this.isLog, + b = this.lin2log; + return { + min: a ? l(b(this.min)) : this.min, + max: a ? l(b(this.max)) : this.max, + dataMin: this.dataMin, + dataMax: this.dataMax, + userMin: this.userMin, + userMax: this.userMax, + }; + }, + getThreshold: function(a) { + var b = this.isLog, + g = this.lin2log, + c = b ? g(this.min) : this.min, + b = b ? g(this.max) : this.max; + null === a ? (a = c) : c > a ? (a = c) : b < a && (a = b); + return this.translate(a, 0, 1, 0, 1); + }, + autoLabelAlign: function(a) { + a = (C(a, 0) - 90 * this.side + 720) % 360; + return 15 < a && 165 > a + ? 'right' + : 195 < a && 345 > a + ? 'left' + : 'center'; + }, + tickSize: function(a) { + var b = this.options, + g = b[a + 'Length'], + c = C(b[a + 'Width'], 'tick' === a && this.isXAxis ? 1 : 0); + if (c && g) return 'inside' === b[a + 'Position'] && (g = -g), [g, c]; + }, + labelMetrics: function() { + var a = (this.tickPositions && this.tickPositions[0]) || 0; + return this.chart.renderer.fontMetrics( + this.options.labels.style && this.options.labels.style.fontSize, + this.ticks[a] && this.ticks[a].label, + ); + }, + unsquish: function() { + var a = this.options.labels, + b = this.horiz, + c = this.tickInterval, + d = c, + k = + this.len / (((this.categories ? 1 : 0) + this.max - this.min) / c), + q, + h = a.rotation, + m = this.labelMetrics(), + z, + A = Number.MAX_VALUE, + t, + x = function(a) { + a /= k || 1; + a = 1 < a ? Math.ceil(a) : 1; + return a * c; + }; + b + ? (t = + !a.staggerLines && + !a.step && + (n(h) + ? [h] + : k < C(a.autoRotationLimit, 80) && a.autoRotation)) && + e(t, function(a) { + var b; + if (a === h || (a && -90 <= a && 90 >= a)) + (z = x(Math.abs(m.h / Math.sin(w * a)))), + (b = z + Math.abs(a / 360)), + b < A && ((A = b), (q = a), (d = z)); + }) + : a.step || (d = x(m.h)); + this.autoRotation = t; + this.labelRotation = C(q, h); + return d; + }, + getSlotWidth: function() { + var a = this.chart, + b = this.horiz, + c = this.options.labels, + d = Math.max( + this.tickPositions.length - (this.categories ? 0 : 1), + 1, + ), + k = a.margin[3]; + return ( + (b && + 2 > (c.step || 0) && + !c.rotation && + ((this.staggerLines || 1) * this.len) / d) || + (!b && + ((c.style && parseInt(c.style.width, 10)) || + (k && k - a.spacing[3]) || + 0.33 * a.chartWidth)) + ); + }, + renderUnsquish: function() { + var a = this.chart, + b = a.renderer, + c = this.tickPositions, + d = this.ticks, + k = this.options.labels, + q = this.horiz, + h = this.getSlotWidth(), + m = Math.max(1, Math.round(h - 2 * (k.padding || 5))), + z = {}, + A = this.labelMetrics(), + t = k.style && k.style.textOverflow, + f, + F = 0, + l, + B; + I(k.rotation) || (z.rotation = k.rotation || 0); + e(c, function(a) { + (a = d[a]) && a.labelLength > F && (F = a.labelLength); + }); + this.maxLabelLength = F; + if (this.autoRotation) + F > m && F > A.h + ? (z.rotation = this.labelRotation) + : (this.labelRotation = 0); + else if (h && ((f = { width: m + 'px' }), !t)) + for (f.textOverflow = 'clip', l = c.length; !q && l--; ) + if (((B = c[l]), (m = d[B].label))) + m.styles && 'ellipsis' === m.styles.textOverflow + ? m.css({ textOverflow: 'clip' }) + : d[B].labelLength > h && m.css({ width: h + 'px' }), + m.getBBox().height > this.len / c.length - (A.h - A.f) && + (m.specCss = { textOverflow: 'ellipsis' }); + z.rotation && + ((f = { + width: + (F > 0.5 * a.chartHeight ? 0.33 * a.chartHeight : a.chartHeight) + + 'px', + }), + t || (f.textOverflow = 'ellipsis')); + if ( + (this.labelAlign = k.align || this.autoLabelAlign(this.labelRotation)) + ) + z.align = this.labelAlign; + e(c, function(a) { + var b = (a = d[a]) && a.label; + b && + (b.attr(z), + f && b.css(x(f, b.specCss)), + delete b.specCss, + (a.rotation = z.rotation)); + }); + this.tickRotCorr = b.rotCorr( + A.b, + this.labelRotation || 0, + 0 !== this.side, + ); + }, + hasData: function() { + return ( + this.hasVisibleSeries || + (n(this.min) && + n(this.max) && + this.tickPositions && + 0 < this.tickPositions.length) + ); + }, + addTitle: function(a) { + var b = this.chart.renderer, + g = this.horiz, + c = this.opposite, + d = this.options.title, + k; + this.axisTitle || + ((k = d.textAlign) || + (k = (g + ? { low: 'left', middle: 'center', high: 'right' } + : { + low: c ? 'right' : 'left', + middle: 'center', + high: c ? 'left' : 'right', + })[d.align]), + (this.axisTitle = b + .text(d.text, 0, 0, d.useHTML) + .attr({ zIndex: 7, rotation: d.rotation || 0, align: k }) + .addClass('highcharts-axis-title') + .css(d.style) + .add(this.axisGroup)), + (this.axisTitle.isNew = !0)); + d.style.width || + this.isRadial || + this.axisTitle.css({ width: this.len }); + this.axisTitle[a ? 'show' : 'hide'](!0); + }, + generateTick: function(a) { + var b = this.ticks; + b[a] ? b[a].addLabel() : (b[a] = new F(this, a)); + }, + getOffset: function() { + var a = this, + b = a.chart, + c = b.renderer, + d = a.options, + k = a.tickPositions, + q = a.ticks, + h = a.horiz, + m = a.side, + z = b.inverted && !a.isZAxis ? [1, 0, 3, 2][m] : m, + A, + x, + f = 0, + F, + l = 0, + B = d.title, + u = d.labels, + G = 0, + p = b.axisOffset, + b = b.clipOffset, + I = [-1, 1, 1, -1][m], + r = d.className, + w = a.axisParent, + K = this.tickSize('tick'); + A = a.hasData(); + a.showAxis = x = A || C(d.showEmpty, !0); + a.staggerLines = a.horiz && u.staggerLines; + a.axisGroup || + ((a.gridGroup = c + .g('grid') + .attr({ zIndex: d.gridZIndex || 1 }) + .addClass( + 'highcharts-' + this.coll.toLowerCase() + '-grid ' + (r || ''), + ) + .add(w)), + (a.axisGroup = c + .g('axis') + .attr({ zIndex: d.zIndex || 2 }) + .addClass('highcharts-' + this.coll.toLowerCase() + ' ' + (r || '')) + .add(w)), + (a.labelGroup = c + .g('axis-labels') + .attr({ zIndex: u.zIndex || 7 }) + .addClass( + 'highcharts-' + a.coll.toLowerCase() + '-labels ' + (r || ''), + ) + .add(w))); + A || a.isLinked + ? (e(k, function(b, c) { + a.generateTick(b, c); + }), + a.renderUnsquish(), + (a.reserveSpaceDefault = + 0 === m || + 2 === m || + { 1: 'left', 3: 'right' }[m] === a.labelAlign), + C( + u.reserveSpace, + 'center' === a.labelAlign ? !0 : null, + a.reserveSpaceDefault, + ) && + e(k, function(a) { + G = Math.max(q[a].getLabelSize(), G); + }), + a.staggerLines && (G *= a.staggerLines), + (a.labelOffset = G * (a.opposite ? -1 : 1))) + : t(q, function(a, b) { + a.destroy(); + delete q[b]; + }); + B && + B.text && + !1 !== B.enabled && + (a.addTitle(x), + x && + !1 !== B.reserveSpace && + ((a.titleOffset = f = a.axisTitle.getBBox()[ + h ? 'height' : 'width' + ]), + (F = B.offset), + (l = n(F) ? 0 : C(B.margin, h ? 5 : 10)))); + a.renderLine(); + a.offset = I * C(d.offset, p[m]); + a.tickRotCorr = a.tickRotCorr || { x: 0, y: 0 }; + c = 0 === m ? -a.labelMetrics().h : 2 === m ? a.tickRotCorr.y : 0; + l = Math.abs(G) + l; + G && (l = l - c + I * (h ? C(u.y, a.tickRotCorr.y + 8 * I) : u.x)); + a.axisTitleMargin = C(F, l); + p[m] = Math.max( + p[m], + a.axisTitleMargin + f + I * a.offset, + l, + A && k.length && K ? K[0] + I * a.offset : 0, + ); + d = d.offset ? 0 : 2 * Math.floor(a.axisLine.strokeWidth() / 2); + b[z] = Math.max(b[z], d); + }, + getLinePath: function(a) { + var b = this.chart, + c = this.opposite, + g = this.offset, + d = this.horiz, + k = this.left + (c ? this.width : 0) + g, + g = b.chartHeight - this.bottom - (c ? this.height : 0) + g; + c && (a *= -1); + return b.renderer.crispLine( + [ + 'M', + d ? this.left : k, + d ? g : this.top, + 'L', + d ? b.chartWidth - this.right : k, + d ? g : b.chartHeight - this.bottom, + ], + a, + ); + }, + renderLine: function() { + this.axisLine || + ((this.axisLine = this.chart.renderer + .path() + .addClass('highcharts-axis-line') + .add(this.axisGroup)), + this.axisLine.attr({ + stroke: this.options.lineColor, + 'stroke-width': this.options.lineWidth, + zIndex: 7, + })); + }, + getTitlePosition: function() { + var a = this.horiz, + b = this.left, + c = this.top, + d = this.len, + k = this.options.title, + q = a ? b : c, + e = this.opposite, + h = this.offset, + m = k.x || 0, + z = k.y || 0, + A = this.axisTitle, + t = this.chart.renderer.fontMetrics(k.style && k.style.fontSize, A), + A = Math.max(A.getBBox(null, 0).height - t.h - 1, 0), + d = { + low: q + (a ? 0 : d), + middle: q + d / 2, + high: q + (a ? d : 0), + }[k.align], + b = + (a ? c + this.height : b) + + (a ? 1 : -1) * (e ? -1 : 1) * this.axisTitleMargin + + [-A, A, t.f, -A][this.side]; + return { + x: a ? d + m : b + (e ? this.width : 0) + h + m, + y: a ? b + z - (e ? this.height : 0) + h : d + z, + }; + }, + renderMinorTick: function(a) { + var b = this.chart.hasRendered && B(this.oldMin), + c = this.minorTicks; + c[a] || (c[a] = new F(this, a, 'minor')); + b && c[a].isNew && c[a].render(null, !0); + c[a].render(null, !1, 1); + }, + renderTick: function(a, b) { + var c = this.isLinked, + g = this.ticks, + d = this.chart.hasRendered && B(this.oldMin); + if (!c || (a >= this.min && a <= this.max)) + g[a] || (g[a] = new F(this, a)), + d && g[a].isNew && g[a].render(b, !0, 0.1), + g[a].render(b); + }, + render: function() { + var b = this, + c = b.chart, + d = b.options, + k = b.isLog, + q = b.lin2log, + h = b.isLinked, + m = b.tickPositions, + z = b.axisTitle, + x = b.ticks, + f = b.minorTicks, + l = b.alternateBands, + C = d.stackLabels, + n = d.alternateGridColor, + u = b.tickmarkOffset, + G = b.axisLine, + p = b.showAxis, + I = D(c.renderer.globalAnimation), + r, + w; + b.labelEdge.length = 0; + b.overlap = !1; + e([x, f, l], function(a) { + t(a, function(a) { + a.isActive = !1; + }); + }); + if (b.hasData() || h) + b.minorTickInterval && + !b.categories && + e(b.getMinorTickPositions(), function(a) { + b.renderMinorTick(a); + }), + m.length && + (e(m, function(a, c) { + b.renderTick(a, c); + }), + u && + (0 === b.min || b.single) && + (x[-1] || (x[-1] = new F(b, -1, null, !0)), x[-1].render(-1))), + n && + e(m, function(d, g) { + w = void 0 !== m[g + 1] ? m[g + 1] + u : b.max - u; + 0 === g % 2 && + d < b.max && + w <= b.max + (c.polar ? -u : u) && + (l[d] || (l[d] = new a.PlotLineOrBand(b)), + (r = d + u), + (l[d].options = { + from: k ? q(r) : r, + to: k ? q(w) : w, + color: n, + }), + l[d].render(), + (l[d].isActive = !0)); + }), + b._addedPlotLB || + (e((d.plotLines || []).concat(d.plotBands || []), function(a) { + b.addPlotBandOrLine(a); + }), + (b._addedPlotLB = !0)); + e([x, f, l], function(a) { + var b, + d = [], + g = I.duration; + t(a, function(a, b) { + a.isActive || (a.render(b, !1, 0), (a.isActive = !1), d.push(b)); + }); + A( + function() { + for (b = d.length; b--; ) + a[d[b]] && + !a[d[b]].isActive && + (a[d[b]].destroy(), delete a[d[b]]); + }, + a !== l && c.hasRendered && g ? g : 0, + ); + }); + G && + (G[G.isPlaced ? 'animate' : 'attr']({ + d: this.getLinePath(G.strokeWidth()), + }), + (G.isPlaced = !0), + G[p ? 'show' : 'hide'](!0)); + z && + p && + ((d = b.getTitlePosition()), + B(d.y) + ? (z[z.isNew ? 'attr' : 'animate'](d), (z.isNew = !1)) + : (z.attr('y', -9999), (z.isNew = !0))); + C && C.enabled && b.renderStackTotals(); + b.isDirty = !1; + }, + redraw: function() { + this.visible && + (this.render(), + e(this.plotLinesAndBands, function(a) { + a.render(); + })); + e(this.series, function(a) { + a.isDirty = !0; + }); + }, + keepProps: 'extKey hcEvents names series userMax userMin'.split(' '), + destroy: function(a) { + var b = this, + c = b.stacks, + d = b.plotLinesAndBands, + g; + a || N(b); + t(c, function(a, b) { + u(a); + c[b] = null; + }); + e([b.ticks, b.minorTicks, b.alternateBands], function(a) { + u(a); + }); + if (d) for (a = d.length; a--; ) d[a].destroy(); + e( + 'stackTotalGroup axisLine axisTitle axisGroup gridGroup labelGroup cross'.split( + ' ', + ), + function(a) { + b[a] && (b[a] = b[a].destroy()); + }, + ); + for (g in b.plotLinesAndBandsGroups) + b.plotLinesAndBandsGroups[g] = b.plotLinesAndBandsGroups[g].destroy(); + t(b, function(a, c) { + -1 === k(c, b.keepProps) && delete b[c]; + }); + }, + drawCrosshair: function(a, b) { + var c, + d = this.crosshair, + g = C(d.snap, !0), + k, + q = this.cross; + a || (a = this.cross && this.cross.e); + this.crosshair && !1 !== (n(b) || !g) + ? (g + ? n(b) && (k = this.isXAxis ? b.plotX : this.len - b.plotY) + : (k = + a && + (this.horiz + ? a.chartX - this.pos + : this.len - a.chartY + this.pos)), + n(k) && + (c = + this.getPlotLinePath( + b && (this.isXAxis ? b.x : C(b.stackY, b.y)), + null, + null, + null, + k, + ) || null), + n(c) + ? ((b = this.categories && !this.isRadial), + q || + ((this.cross = q = this.chart.renderer + .path() + .addClass( + 'highcharts-crosshair highcharts-crosshair-' + + (b ? 'category ' : 'thin ') + + d.className, + ) + .attr({ zIndex: C(d.zIndex, 2) }) + .add()), + q + .attr({ + stroke: + d.color || + (b + ? f('#ccd6eb') + .setOpacity(0.25) + .get() + : '#cccccc'), + 'stroke-width': C(d.width, 1), + }) + .css({ 'pointer-events': 'none' }), + d.dashStyle && q.attr({ dashstyle: d.dashStyle })), + q.show().attr({ d: c }), + b && !d.width && q.attr({ 'stroke-width': this.transA }), + (this.cross.e = a)) + : this.hideCrosshair()) + : this.hideCrosshair(); + }, + hideCrosshair: function() { + this.cross && this.cross.hide(); + }, + }); + return (a.Axis = G); + })(M); + (function(a) { + var E = a.Axis, + D = a.Date, + H = a.dateFormat, + p = a.defaultOptions, + f = a.defined, + l = a.each, + r = a.extend, + n = a.getMagnitude, + w = a.getTZOffset, + u = a.normalizeTickInterval, + e = a.pick, + h = a.timeUnits; + E.prototype.getTimeTicks = function(a, d, c, b) { + var k = [], + m = {}, + B = p.global.useUTC, + n, + x = new D(d - Math.max(w(d), w(c))), + u = D.hcMakeTime, + t = a.unitRange, + C = a.count, + N, + q; + if (f(d)) { + x[D.hcSetMilliseconds]( + t >= h.second ? 0 : C * Math.floor(x.getMilliseconds() / C), + ); + if (t >= h.second) + x[D.hcSetSeconds]( + t >= h.minute ? 0 : C * Math.floor(x.getSeconds() / C), + ); + if (t >= h.minute) + x[D.hcSetMinutes]( + t >= h.hour ? 0 : C * Math.floor(x[D.hcGetMinutes]() / C), + ); + if (t >= h.hour) + x[D.hcSetHours]( + t >= h.day ? 0 : C * Math.floor(x[D.hcGetHours]() / C), + ); + if (t >= h.day) + x[D.hcSetDate]( + t >= h.month ? 1 : C * Math.floor(x[D.hcGetDate]() / C), + ); + t >= h.month && + (x[D.hcSetMonth]( + t >= h.year ? 0 : C * Math.floor(x[D.hcGetMonth]() / C), + ), + (n = x[D.hcGetFullYear]())); + if (t >= h.year) x[D.hcSetFullYear](n - (n % C)); + if (t === h.week) + x[D.hcSetDate](x[D.hcGetDate]() - x[D.hcGetDay]() + e(b, 1)); + n = x[D.hcGetFullYear](); + b = x[D.hcGetMonth](); + var A = x[D.hcGetDate](), + F = x[D.hcGetHours](); + d = x.getTime(); + D.hcHasTimeZone && + ((q = + (!B || !!D.hcGetTimezoneOffset) && + (c - d > 4 * h.month || w(d) !== w(c))), + (N = w(x)), + (x = new D(d + N))); + B = x.getTime(); + for (d = 1; B < c; ) + k.push(B), + (B = + t === h.year + ? u(n + d * C, 0) + : t === h.month + ? u(n, b + d * C) + : !q || (t !== h.day && t !== h.week) + ? q && t === h.hour + ? u(n, b, A, F + d * C, 0, 0, N) - N + : B + t * C + : u(n, b, A + d * C * (t === h.day ? 1 : 7))), + d++; + k.push(B); + t <= h.hour && + 1e4 > k.length && + l(k, function(a) { + 0 === a % 18e5 && + '000000000' === H('%H%M%S%L', a) && + (m[a] = 'day'); + }); + } + k.info = r(a, { higherRanks: m, totalRange: t * C }); + return k; + }; + E.prototype.normalizeTimeTickInterval = function(a, d) { + var c = d || [ + ['millisecond', [1, 2, 5, 10, 20, 25, 50, 100, 200, 500]], + ['second', [1, 2, 5, 10, 15, 30]], + ['minute', [1, 2, 5, 10, 15, 30]], + ['hour', [1, 2, 3, 4, 6, 8, 12]], + ['day', [1, 2]], + ['week', [1, 2]], + ['month', [1, 2, 3, 4, 6]], + ['year', null], + ]; + d = c[c.length - 1]; + var b = h[d[0]], + k = d[1], + e; + for ( + e = 0; + e < c.length && + !((d = c[e]), + (b = h[d[0]]), + (k = d[1]), + c[e + 1] && a <= (b * k[k.length - 1] + h[c[e + 1][0]]) / 2); + e++ + ); + b === h.year && a < 5 * b && (k = [1, 2, 5]); + a = u(a / b, k, 'year' === d[0] ? Math.max(n(a / b), 1) : 1); + return { unitRange: b, count: a, unitName: d[0] }; + }; + })(M); + (function(a) { + var E = a.Axis, + D = a.getMagnitude, + H = a.map, + p = a.normalizeTickInterval, + f = a.pick; + E.prototype.getLogTickPositions = function(a, r, n, w) { + var l = this.options, + e = this.len, + h = this.lin2log, + m = this.log2lin, + d = []; + w || (this._minorAutoInterval = null); + if (0.5 <= a) + (a = Math.round(a)), (d = this.getLinearTickPositions(a, r, n)); + else if (0.08 <= a) + for ( + var e = Math.floor(r), + c, + b, + k, + z, + B, + l = + 0.3 < a + ? [1, 2, 4] + : 0.15 < a + ? [1, 2, 4, 6, 8] + : [1, 2, 3, 4, 5, 6, 7, 8, 9]; + e < n + 1 && !B; + e++ + ) + for (b = l.length, c = 0; c < b && !B; c++) + (k = m(h(e) * l[c])), + k > r && (!w || z <= n) && void 0 !== z && d.push(z), + z > n && (B = !0), + (z = k); + else + (r = h(r)), + (n = h(n)), + (a = w ? this.getMinorTickInterval() : l.tickInterval), + (a = f( + 'auto' === a ? null : a, + this._minorAutoInterval, + ((l.tickPixelInterval / (w ? 5 : 1)) * (n - r)) / + ((w ? e / this.tickPositions.length : e) || 1), + )), + (a = p(a, null, D(a))), + (d = H(this.getLinearTickPositions(a, r, n), m)), + w || (this._minorAutoInterval = a / 5); + w || (this.tickInterval = a); + return d; + }; + E.prototype.log2lin = function(a) { + return Math.log(a) / Math.LN10; + }; + E.prototype.lin2log = function(a) { + return Math.pow(10, a); + }; + })(M); + (function(a, E) { + var D = a.arrayMax, + H = a.arrayMin, + p = a.defined, + f = a.destroyObjectProperties, + l = a.each, + r = a.erase, + n = a.merge, + w = a.pick; + a.PlotLineOrBand = function(a, e) { + this.axis = a; + e && ((this.options = e), (this.id = e.id)); + }; + a.PlotLineOrBand.prototype = { + render: function() { + var f = this, + e = f.axis, + h = e.horiz, + m = f.options, + d = m.label, + c = f.label, + b = m.to, + k = m.from, + z = m.value, + l = p(k) && p(b), + r = p(z), + x = f.svgElem, + K = !x, + t = [], + C = m.color, + N = w(m.zIndex, 0), + q = m.events, + t = { + class: + 'highcharts-plot-' + + (l ? 'band ' : 'line ') + + (m.className || ''), + }, + A = {}, + F = e.chart.renderer, + G = l ? 'bands' : 'lines', + g = e.log2lin; + e.isLog && ((k = g(k)), (b = g(b)), (z = g(z))); + r + ? ((t = { stroke: C, 'stroke-width': m.width }), + m.dashStyle && (t.dashstyle = m.dashStyle)) + : l && + (C && (t.fill = C), + m.borderWidth && + ((t.stroke = m.borderColor), + (t['stroke-width'] = m.borderWidth))); + A.zIndex = N; + G += '-' + N; + (C = e.plotLinesAndBandsGroups[G]) || + (e.plotLinesAndBandsGroups[G] = C = F.g('plot-' + G) + .attr(A) + .add()); + K && + (f.svgElem = x = F.path() + .attr(t) + .add(C)); + if (r) t = e.getPlotLinePath(z, x.strokeWidth()); + else if (l) t = e.getPlotBandPath(k, b, m); + else return; + K && t && t.length + ? (x.attr({ d: t }), + q && + a.objectEach(q, function(a, b) { + x.on(b, function(a) { + q[b].apply(f, [a]); + }); + })) + : x && + (t + ? (x.show(), x.animate({ d: t })) + : (x.hide(), c && (f.label = c = c.destroy()))); + d && + p(d.text) && + t && + t.length && + 0 < e.width && + 0 < e.height && + !t.flat + ? ((d = n( + { + align: h && l && 'center', + x: h ? !l && 4 : 10, + verticalAlign: !h && l && 'middle', + y: h ? (l ? 16 : 10) : l ? 6 : -4, + rotation: h && !l && 90, + }, + d, + )), + this.renderLabel(d, t, l, N)) + : c && c.hide(); + return f; + }, + renderLabel: function(a, e, h, m) { + var d = this.label, + c = this.axis.chart.renderer; + d || + ((d = { + align: a.textAlign || a.align, + rotation: a.rotation, + class: + 'highcharts-plot-' + + (h ? 'band' : 'line') + + '-label ' + + (a.className || ''), + }), + (d.zIndex = m), + (this.label = d = c + .text(a.text, 0, 0, a.useHTML) + .attr(d) + .add()), + d.css(a.style)); + m = e.xBounds || [e[1], e[4], h ? e[6] : e[1]]; + e = e.yBounds || [e[2], e[5], h ? e[7] : e[2]]; + h = H(m); + c = H(e); + d.align(a, !1, { x: h, y: c, width: D(m) - h, height: D(e) - c }); + d.show(); + }, + destroy: function() { + r(this.axis.plotLinesAndBands, this); + delete this.axis; + f(this); + }, + }; + a.extend(E.prototype, { + getPlotBandPath: function(a, e) { + var h = this.getPlotLinePath(e, null, null, !0), + m = this.getPlotLinePath(a, null, null, !0), + d = [], + c = this.horiz, + b = 1, + k; + a = (a < this.min && e < this.min) || (a > this.max && e > this.max); + if (m && h) + for ( + a && ((k = m.toString() === h.toString()), (b = 0)), a = 0; + a < m.length; + a += 6 + ) + c && h[a + 1] === m[a + 1] + ? ((h[a + 1] += b), (h[a + 4] += b)) + : c || + h[a + 2] !== m[a + 2] || + ((h[a + 2] += b), (h[a + 5] += b)), + d.push( + 'M', + m[a + 1], + m[a + 2], + 'L', + m[a + 4], + m[a + 5], + h[a + 4], + h[a + 5], + h[a + 1], + h[a + 2], + 'z', + ), + (d.flat = k); + return d; + }, + addPlotBand: function(a) { + return this.addPlotBandOrLine(a, 'plotBands'); + }, + addPlotLine: function(a) { + return this.addPlotBandOrLine(a, 'plotLines'); + }, + addPlotBandOrLine: function(f, e) { + var h = new a.PlotLineOrBand(this, f).render(), + m = this.userOptions; + h && + (e && ((m[e] = m[e] || []), m[e].push(f)), + this.plotLinesAndBands.push(h)); + return h; + }, + removePlotBandOrLine: function(a) { + for ( + var e = this.plotLinesAndBands, + h = this.options, + m = this.userOptions, + d = e.length; + d--; + + ) + e[d].id === a && e[d].destroy(); + l( + [ + h.plotLines || [], + m.plotLines || [], + h.plotBands || [], + m.plotBands || [], + ], + function(c) { + for (d = c.length; d--; ) c[d].id === a && r(c, c[d]); + }, + ); + }, + removePlotBand: function(a) { + this.removePlotBandOrLine(a); + }, + removePlotLine: function(a) { + this.removePlotBandOrLine(a); + }, + }); + })(M, V); + (function(a) { + var E = a.dateFormat, + D = a.each, + H = a.extend, + p = a.format, + f = a.isNumber, + l = a.map, + r = a.merge, + n = a.pick, + w = a.splat, + u = a.syncTimeout, + e = a.timeUnits; + a.Tooltip = function() { + this.init.apply(this, arguments); + }; + a.Tooltip.prototype = { + init: function(a, e) { + this.chart = a; + this.options = e; + this.crosshairs = []; + this.now = { x: 0, y: 0 }; + this.isHidden = !0; + this.split = e.split && !a.inverted; + this.shared = e.shared || this.split; + }, + cleanSplit: function(a) { + D(this.chart.series, function(e) { + var d = e && e.tt; + d && (!d.isActive || a ? (e.tt = d.destroy()) : (d.isActive = !1)); + }); + }, + getLabel: function() { + var a = this.chart.renderer, + e = this.options; + this.label || + (this.split + ? (this.label = a.g('tooltip')) + : ((this.label = a + .label( + '', + 0, + 0, + e.shape || 'callout', + null, + null, + e.useHTML, + null, + 'tooltip', + ) + .attr({ padding: e.padding, r: e.borderRadius })), + this.label + .attr({ + fill: e.backgroundColor, + 'stroke-width': e.borderWidth, + }) + .css(e.style) + .shadow(e.shadow)), + this.label.attr({ zIndex: 8 }).add()); + return this.label; + }, + update: function(a) { + this.destroy(); + r(!0, this.chart.options.tooltip.userOptions, a); + this.init(this.chart, r(!0, this.options, a)); + }, + destroy: function() { + this.label && (this.label = this.label.destroy()); + this.split && + this.tt && + (this.cleanSplit(this.chart, !0), (this.tt = this.tt.destroy())); + clearTimeout(this.hideTimer); + clearTimeout(this.tooltipTimeout); + }, + move: function(a, e, d, c) { + var b = this, + k = b.now, + h = + !1 !== b.options.animation && + !b.isHidden && + (1 < Math.abs(a - k.x) || 1 < Math.abs(e - k.y)), + m = b.followPointer || 1 < b.len; + H(k, { + x: h ? (2 * k.x + a) / 3 : a, + y: h ? (k.y + e) / 2 : e, + anchorX: m ? void 0 : h ? (2 * k.anchorX + d) / 3 : d, + anchorY: m ? void 0 : h ? (k.anchorY + c) / 2 : c, + }); + b.getLabel().attr(k); + h && + (clearTimeout(this.tooltipTimeout), + (this.tooltipTimeout = setTimeout(function() { + b && b.move(a, e, d, c); + }, 32))); + }, + hide: function(a) { + var e = this; + clearTimeout(this.hideTimer); + a = n(a, this.options.hideDelay, 500); + this.isHidden || + (this.hideTimer = u(function() { + e.getLabel()[a ? 'fadeOut' : 'hide'](); + e.isHidden = !0; + }, a)); + }, + getAnchor: function(a, e) { + var d, + c = this.chart, + b = c.inverted, + k = c.plotTop, + h = c.plotLeft, + m = 0, + f = 0, + x, + n; + a = w(a); + d = a[0].tooltipPos; + this.followPointer && + e && + (void 0 === e.chartX && (e = c.pointer.normalize(e)), + (d = [e.chartX - c.plotLeft, e.chartY - k])); + d || + (D(a, function(a) { + x = a.series.yAxis; + n = a.series.xAxis; + m += a.plotX + (!b && n ? n.left - h : 0); + f += + (a.plotLow ? (a.plotLow + a.plotHigh) / 2 : a.plotY) + + (!b && x ? x.top - k : 0); + }), + (m /= a.length), + (f /= a.length), + (d = [ + b ? c.plotWidth - f : m, + this.shared && !b && 1 < a.length && e + ? e.chartY - k + : b + ? c.plotHeight - m + : f, + ])); + return l(d, Math.round); + }, + getPosition: function(a, e, d) { + var c = this.chart, + b = this.distance, + k = {}, + h = (c.inverted && d.h) || 0, + m, + f = [ + 'y', + c.chartHeight, + e, + d.plotY + c.plotTop, + c.plotTop, + c.plotTop + c.plotHeight, + ], + x = [ + 'x', + c.chartWidth, + a, + d.plotX + c.plotLeft, + c.plotLeft, + c.plotLeft + c.plotWidth, + ], + l = !this.followPointer && n(d.ttBelow, !c.inverted === !!d.negative), + t = function(a, c, d, g, e, q) { + var m = d < g - b, + z = g + b + d < c, + A = g - b - d; + g += b; + if (l && z) k[a] = g; + else if (!l && m) k[a] = A; + else if (m) k[a] = Math.min(q - d, 0 > A - h ? A : A - h); + else if (z) k[a] = Math.max(e, g + h + d > c ? g : g + h); + else return !1; + }, + C = function(a, c, d, g) { + var e; + g < b || g > c - b + ? (e = !1) + : (k[a] = g < d / 2 ? 1 : g > c - d / 2 ? c - d - 2 : g - d / 2); + return e; + }, + p = function(a) { + var b = f; + f = x; + x = b; + m = a; + }, + q = function() { + !1 !== t.apply(0, f) + ? !1 !== C.apply(0, x) || m || (p(!0), q()) + : m + ? (k.x = k.y = 0) + : (p(!0), q()); + }; + (c.inverted || 1 < this.len) && p(); + q(); + return k; + }, + defaultFormatter: function(a) { + var e = this.points || w(this), + d; + d = [a.tooltipFooterHeaderFormatter(e[0])]; + d = d.concat(a.bodyFormatter(e)); + d.push(a.tooltipFooterHeaderFormatter(e[0], !0)); + return d; + }, + refresh: function(a, e) { + var d, + c = this.options, + b, + k = a, + h, + m = {}, + f = []; + d = c.formatter || this.defaultFormatter; + var m = this.shared, + x; + c.enabled && + (clearTimeout(this.hideTimer), + (this.followPointer = w(k)[0].series.tooltipOptions.followPointer), + (h = this.getAnchor(k, e)), + (e = h[0]), + (b = h[1]), + !m || (k.series && k.series.noSharedTooltip) + ? (m = k.getLabelConfig()) + : (D(k, function(a) { + a.setState('hover'); + f.push(a.getLabelConfig()); + }), + (m = { x: k[0].category, y: k[0].y }), + (m.points = f), + (k = k[0])), + (this.len = f.length), + (m = d.call(m, this)), + (x = k.series), + (this.distance = n(x.tooltipOptions.distance, 16)), + !1 === m + ? this.hide() + : ((d = this.getLabel()), + this.isHidden && d.attr({ opacity: 1 }).show(), + this.split + ? this.renderSplit(m, w(a)) + : (c.style.width || + d.css({ width: this.chart.spacingBox.width }), + d.attr({ text: m && m.join ? m.join('') : m }), + d + .removeClass(/highcharts-color-[\d]+/g) + .addClass( + 'highcharts-color-' + n(k.colorIndex, x.colorIndex), + ), + d.attr({ + stroke: c.borderColor || k.color || x.color || '#666666', + }), + this.updatePosition({ + plotX: e, + plotY: b, + negative: k.negative, + ttBelow: k.ttBelow, + h: h[2] || 0, + })), + (this.isHidden = !1))); + }, + renderSplit: function(e, m) { + var d = this, + c = [], + b = this.chart, + k = b.renderer, + h = !0, + f = this.options, + l = 0, + x = this.getLabel(); + a.isString(e) && (e = [!1, e]); + D(e.slice(0, m.length + 1), function(a, e) { + if (!1 !== a) { + e = m[e - 1] || { isHeader: !0, plotX: m[0].plotX }; + var z = e.series || d, + t = z.tt, + q = e.series || {}, + A = 'highcharts-color-' + n(e.colorIndex, q.colorIndex, 'none'); + t || + (z.tt = t = k + .label(null, null, null, 'callout', null, null, f.useHTML) + .addClass('highcharts-tooltip-box ' + A) + .attr({ + padding: f.padding, + r: f.borderRadius, + fill: f.backgroundColor, + stroke: f.borderColor || e.color || q.color || '#333333', + 'stroke-width': f.borderWidth, + }) + .add(x)); + t.isActive = !0; + t.attr({ text: a }); + t.css(f.style).shadow(f.shadow); + a = t.getBBox(); + q = a.width + t.strokeWidth(); + e.isHeader + ? ((l = a.height), + (q = Math.max( + 0, + Math.min(e.plotX + b.plotLeft - q / 2, b.chartWidth - q), + ))) + : (q = e.plotX + b.plotLeft - n(f.distance, 16) - q); + 0 > q && (h = !1); + a = + (e.series && e.series.yAxis && e.series.yAxis.pos) + + (e.plotY || 0); + a -= b.plotTop; + c.push({ + target: e.isHeader ? b.plotHeight + l : a, + rank: e.isHeader ? 1 : 0, + size: z.tt.getBBox().height + 1, + point: e, + x: q, + tt: t, + }); + } + }); + this.cleanSplit(); + a.distribute(c, b.plotHeight + l); + D(c, function(a) { + var c = a.point, + d = c.series; + a.tt.attr({ + visibility: void 0 === a.pos ? 'hidden' : 'inherit', + x: h || c.isHeader ? a.x : c.plotX + b.plotLeft + n(f.distance, 16), + y: a.pos + b.plotTop, + anchorX: c.isHeader ? c.plotX + b.plotLeft : c.plotX + d.xAxis.pos, + anchorY: c.isHeader + ? a.pos + b.plotTop - 15 + : c.plotY + d.yAxis.pos, + }); + }); + }, + updatePosition: function(a) { + var e = this.chart, + d = this.getLabel(), + d = (this.options.positioner || this.getPosition).call( + this, + d.width, + d.height, + a, + ); + this.move( + Math.round(d.x), + Math.round(d.y || 0), + a.plotX + e.plotLeft, + a.plotY + e.plotTop, + ); + }, + getDateFormat: function(a, m, d, c) { + var b = E('%m-%d %H:%M:%S.%L', m), + k, + h, + f = { millisecond: 15, second: 12, minute: 9, hour: 6, day: 3 }, + l = 'millisecond'; + for (h in e) { + if ( + a === e.week && + +E('%w', m) === d && + '00:00:00.000' === b.substr(6) + ) { + h = 'week'; + break; + } + if (e[h] > a) { + h = l; + break; + } + if (f[h] && b.substr(f[h]) !== '01-01 00:00:00.000'.substr(f[h])) + break; + 'week' !== h && (l = h); + } + h && (k = c[h]); + return k; + }, + getXDateFormat: function(a, e, d) { + e = e.dateTimeLabelFormats; + var c = d && d.closestPointRange; + return ( + (c ? this.getDateFormat(c, a.x, d.options.startOfWeek, e) : e.day) || + e.year + ); + }, + tooltipFooterHeaderFormatter: function(a, e) { + e = e ? 'footer' : 'header'; + var d = a.series, + c = d.tooltipOptions, + b = c.xDateFormat, + k = d.xAxis, + h = k && 'datetime' === k.options.type && f(a.key), + m = c[e + 'Format']; + h && !b && (b = this.getXDateFormat(a, c, k)); + h && + b && + D((a.point && a.point.tooltipDateKeys) || ['key'], function(a) { + m = m.replace('{point.' + a + '}', '{point.' + a + ':' + b + '}'); + }); + return p(m, { point: a, series: d }); + }, + bodyFormatter: function(a) { + return l(a, function(a) { + var d = a.series.tooltipOptions; + return ( + d[(a.point.formatPrefix || 'point') + 'Formatter'] || + a.point.tooltipFormatter + ).call(a.point, d[(a.point.formatPrefix || 'point') + 'Format']); + }); + }, + }; + })(M); + (function(a) { + var E = a.addEvent, + D = a.attr, + H = a.charts, + p = a.color, + f = a.css, + l = a.defined, + r = a.each, + n = a.extend, + w = a.find, + u = a.fireEvent, + e = a.isObject, + h = a.offset, + m = a.pick, + d = a.splat, + c = a.Tooltip; + a.Pointer = function(a, c) { + this.init(a, c); + }; + a.Pointer.prototype = { + init: function(a, d) { + this.options = d; + this.chart = a; + this.runChartClick = d.chart.events && !!d.chart.events.click; + this.pinchDown = []; + this.lastValidTouch = {}; + c && + ((a.tooltip = new c(a, d.tooltip)), + (this.followTouchMove = m(d.tooltip.followTouchMove, !0))); + this.setDOMEvents(); + }, + zoomOption: function(a) { + var b = this.chart, + c = b.options.chart, + d = c.zoomType || '', + b = b.inverted; + /touch/.test(a.type) && (d = m(c.pinchType, d)); + this.zoomX = a = /x/.test(d); + this.zoomY = d = /y/.test(d); + this.zoomHor = (a && !b) || (d && b); + this.zoomVert = (d && !b) || (a && b); + this.hasZoom = a || d; + }, + normalize: function(a, c) { + var b; + b = a.touches + ? a.touches.length + ? a.touches.item(0) + : a.changedTouches[0] + : a; + c || (this.chartPosition = c = h(this.chart.container)); + return n(a, { + chartX: Math.round(b.pageX - c.left), + chartY: Math.round(b.pageY - c.top), + }); + }, + getCoordinates: function(a) { + var b = { xAxis: [], yAxis: [] }; + r(this.chart.axes, function(c) { + b[c.isXAxis ? 'xAxis' : 'yAxis'].push({ + axis: c, + value: c.toValue(a[c.horiz ? 'chartX' : 'chartY']), + }); + }); + return b; + }, + findNearestKDPoint: function(a, c, d) { + var b; + r(a, function(a) { + var k = + !(a.noSharedTooltip && c) && + 0 > a.options.findNearestPointBy.indexOf('y'); + a = a.searchPoint(d, k); + if ((k = e(a, !0)) && !(k = !e(b, !0))) + var k = b.distX - a.distX, + h = b.dist - a.dist, + m = + (a.series.group && a.series.group.zIndex) - + (b.series.group && b.series.group.zIndex), + k = + 0 < + (0 !== k && c + ? k + : 0 !== h + ? h + : 0 !== m + ? m + : b.series.index > a.series.index + ? -1 + : 1); + k && (b = a); + }); + return b; + }, + getPointFromEvent: function(a) { + a = a.target; + for (var b; a && !b; ) (b = a.point), (a = a.parentNode); + return b; + }, + getChartCoordinatesFromPoint: function(a, c) { + var b = a.series, + d = b.xAxis, + b = b.yAxis, + k = m(a.clientX, a.plotX); + if (d && b) + return c + ? { chartX: d.len + d.pos - k, chartY: b.len + b.pos - a.plotY } + : { chartX: k + d.pos, chartY: a.plotY + b.pos }; + }, + getHoverData: function(b, c, d, h, f, l, n) { + var k, + z = [], + x = n && n.isBoosting; + h = !(!h || !b); + n = + c && !c.stickyTracking + ? [c] + : a.grep(d, function(a) { + return ( + a.visible && + !(!f && a.directTouch) && + m(a.options.enableMouseTracking, !0) && + a.stickyTracking + ); + }); + c = (k = h ? b : this.findNearestKDPoint(n, f, l)) && k.series; + k && + (f && !c.noSharedTooltip + ? ((n = a.grep(d, function(a) { + return ( + a.visible && + !(!f && a.directTouch) && + m(a.options.enableMouseTracking, !0) && + !a.noSharedTooltip + ); + })), + r(n, function(a) { + var b = w(a.points, function(a) { + return a.x === k.x && !a.isNull; + }); + e(b) && (x && (b = a.getPoint(b)), z.push(b)); + })) + : z.push(k)); + return { hoverPoint: k, hoverSeries: c, hoverPoints: z }; + }, + runPointActions: function(b, c) { + var d = this.chart, + k = d.tooltip && d.tooltip.options.enabled ? d.tooltip : void 0, + e = k ? k.shared : !1, + h = c || d.hoverPoint, + f = (h && h.series) || d.hoverSeries, + f = this.getHoverData( + h, + f, + d.series, + !!c || (f && f.directTouch && this.isDirectTouch), + e, + b, + { isBoosting: d.isBoosting }, + ), + l, + h = f.hoverPoint; + l = f.hoverPoints; + c = (f = f.hoverSeries) && f.tooltipOptions.followPointer; + e = e && f && !f.noSharedTooltip; + if (h && (h !== d.hoverPoint || (k && k.isHidden))) { + r(d.hoverPoints || [], function(b) { + -1 === a.inArray(b, l) && b.setState(); + }); + r(l || [], function(a) { + a.setState('hover'); + }); + if (d.hoverSeries !== f) f.onMouseOver(); + d.hoverPoint && d.hoverPoint.firePointEvent('mouseOut'); + if (!h.series) return; + h.firePointEvent('mouseOver'); + d.hoverPoints = l; + d.hoverPoint = h; + k && k.refresh(e ? l : h, b); + } else + c && + k && + !k.isHidden && + ((h = k.getAnchor([{}], b)), + k.updatePosition({ plotX: h[0], plotY: h[1] })); + this.unDocMouseMove || + (this.unDocMouseMove = E( + d.container.ownerDocument, + 'mousemove', + function(b) { + var c = H[a.hoverChartIndex]; + if (c) c.pointer.onDocumentMouseMove(b); + }, + )); + r(d.axes, function(c) { + var d = m(c.crosshair.snap, !0), + k = d + ? a.find(l, function(a) { + return a.series[c.coll] === c; + }) + : void 0; + k || !d ? c.drawCrosshair(b, k) : c.hideCrosshair(); + }); + }, + reset: function(a, c) { + var b = this.chart, + k = b.hoverSeries, + e = b.hoverPoint, + h = b.hoverPoints, + m = b.tooltip, + f = m && m.shared ? h : e; + a && + f && + r(d(f), function(b) { + b.series.isCartesian && void 0 === b.plotX && (a = !1); + }); + if (a) + m && + f && + (m.refresh(f), + e && + (e.setState(e.state, !0), + r(b.axes, function(a) { + a.crosshair && a.drawCrosshair(null, e); + }))); + else { + if (e) e.onMouseOut(); + h && + r(h, function(a) { + a.setState(); + }); + if (k) k.onMouseOut(); + m && m.hide(c); + this.unDocMouseMove && (this.unDocMouseMove = this.unDocMouseMove()); + r(b.axes, function(a) { + a.hideCrosshair(); + }); + this.hoverX = b.hoverPoints = b.hoverPoint = null; + } + }, + scaleGroups: function(a, c) { + var b = this.chart, + d; + r(b.series, function(k) { + d = a || k.getPlotBox(); + k.xAxis && + k.xAxis.zoomEnabled && + k.group && + (k.group.attr(d), + k.markerGroup && + (k.markerGroup.attr(d), + k.markerGroup.clip(c ? b.clipRect : null)), + k.dataLabelsGroup && k.dataLabelsGroup.attr(d)); + }); + b.clipRect.attr(c || b.clipBox); + }, + dragStart: function(a) { + var b = this.chart; + b.mouseIsDown = a.type; + b.cancelClick = !1; + b.mouseDownX = this.mouseDownX = a.chartX; + b.mouseDownY = this.mouseDownY = a.chartY; + }, + drag: function(a) { + var b = this.chart, + c = b.options.chart, + d = a.chartX, + e = a.chartY, + h = this.zoomHor, + m = this.zoomVert, + f = b.plotLeft, + l = b.plotTop, + n = b.plotWidth, + q = b.plotHeight, + A, + F = this.selectionMarker, + G = this.mouseDownX, + g = this.mouseDownY, + v = c.panKey && a[c.panKey + 'Key']; + (F && F.touch) || + (d < f ? (d = f) : d > f + n && (d = f + n), + e < l ? (e = l) : e > l + q && (e = l + q), + (this.hasDragged = Math.sqrt( + Math.pow(G - d, 2) + Math.pow(g - e, 2), + )), + 10 < this.hasDragged && + ((A = b.isInsidePlot(G - f, g - l)), + b.hasCartesianSeries && + (this.zoomX || this.zoomY) && + A && + !v && + !F && + (this.selectionMarker = F = b.renderer + .rect(f, l, h ? 1 : n, m ? 1 : q, 0) + .attr({ + fill: + c.selectionMarkerFill || + p('#335cad') + .setOpacity(0.25) + .get(), + class: 'highcharts-selection-marker', + zIndex: 7, + }) + .add()), + F && + h && + ((d -= G), + F.attr({ width: Math.abs(d), x: (0 < d ? 0 : d) + G })), + F && + m && + ((d = e - g), + F.attr({ height: Math.abs(d), y: (0 < d ? 0 : d) + g })), + A && !F && c.panning && b.pan(a, c.panning))); + }, + drop: function(a) { + var b = this, + c = this.chart, + d = this.hasPinched; + if (this.selectionMarker) { + var e = { originalEvent: a, xAxis: [], yAxis: [] }, + h = this.selectionMarker, + m = h.attr ? h.attr('x') : h.x, + t = h.attr ? h.attr('y') : h.y, + p = h.attr ? h.attr('width') : h.width, + w = h.attr ? h.attr('height') : h.height, + q; + if (this.hasDragged || d) + r(c.axes, function(c) { + if ( + c.zoomEnabled && + l(c.min) && + (d || b[{ xAxis: 'zoomX', yAxis: 'zoomY' }[c.coll]]) + ) { + var k = c.horiz, + h = 'touchend' === a.type ? c.minPixelPadding : 0, + g = c.toValue((k ? m : t) + h), + k = c.toValue((k ? m + p : t + w) - h); + e[c.coll].push({ + axis: c, + min: Math.min(g, k), + max: Math.max(g, k), + }); + q = !0; + } + }), + q && + u(c, 'selection', e, function(a) { + c.zoom(n(a, d ? { animation: !1 } : null)); + }); + this.selectionMarker = this.selectionMarker.destroy(); + d && this.scaleGroups(); + } + c && + (f(c.container, { cursor: c._cursor }), + (c.cancelClick = 10 < this.hasDragged), + (c.mouseIsDown = this.hasDragged = this.hasPinched = !1), + (this.pinchDown = [])); + }, + onContainerMouseDown: function(a) { + 2 !== a.button && + ((a = this.normalize(a)), + this.zoomOption(a), + a.preventDefault && a.preventDefault(), + this.dragStart(a)); + }, + onDocumentMouseUp: function(b) { + H[a.hoverChartIndex] && H[a.hoverChartIndex].pointer.drop(b); + }, + onDocumentMouseMove: function(a) { + var b = this.chart, + c = this.chartPosition; + a = this.normalize(a, c); + !c || + this.inClass(a.target, 'highcharts-tracker') || + b.isInsidePlot(a.chartX - b.plotLeft, a.chartY - b.plotTop) || + this.reset(); + }, + onContainerMouseLeave: function(b) { + var c = H[a.hoverChartIndex]; + c && + (b.relatedTarget || b.toElement) && + (c.pointer.reset(), (c.pointer.chartPosition = null)); + }, + onContainerMouseMove: function(b) { + var c = this.chart; + (l(a.hoverChartIndex) && + H[a.hoverChartIndex] && + H[a.hoverChartIndex].mouseIsDown) || + (a.hoverChartIndex = c.index); + b = this.normalize(b); + b.returnValue = !1; + 'mousedown' === c.mouseIsDown && this.drag(b); + (!this.inClass(b.target, 'highcharts-tracker') && + !c.isInsidePlot(b.chartX - c.plotLeft, b.chartY - c.plotTop)) || + c.openMenu || + this.runPointActions(b); + }, + inClass: function(a, c) { + for (var b; a; ) { + if ((b = D(a, 'class'))) { + if (-1 !== b.indexOf(c)) return !0; + if (-1 !== b.indexOf('highcharts-container')) return !1; + } + a = a.parentNode; + } + }, + onTrackerMouseOut: function(a) { + var b = this.chart.hoverSeries; + a = a.relatedTarget || a.toElement; + this.isDirectTouch = !1; + if ( + !( + !b || + !a || + b.stickyTracking || + this.inClass(a, 'highcharts-tooltip') || + (this.inClass(a, 'highcharts-series-' + b.index) && + this.inClass(a, 'highcharts-tracker')) + ) + ) + b.onMouseOut(); + }, + onContainerClick: function(a) { + var b = this.chart, + c = b.hoverPoint, + d = b.plotLeft, + e = b.plotTop; + a = this.normalize(a); + b.cancelClick || + (c && this.inClass(a.target, 'highcharts-tracker') + ? (u(c.series, 'click', n(a, { point: c })), + b.hoverPoint && c.firePointEvent('click', a)) + : (n(a, this.getCoordinates(a)), + b.isInsidePlot(a.chartX - d, a.chartY - e) && u(b, 'click', a))); + }, + setDOMEvents: function() { + var b = this, + c = b.chart.container, + d = c.ownerDocument; + c.onmousedown = function(a) { + b.onContainerMouseDown(a); + }; + c.onmousemove = function(a) { + b.onContainerMouseMove(a); + }; + c.onclick = function(a) { + b.onContainerClick(a); + }; + this.unbindContainerMouseLeave = E( + c, + 'mouseleave', + b.onContainerMouseLeave, + ); + a.unbindDocumentMouseUp || + (a.unbindDocumentMouseUp = E(d, 'mouseup', b.onDocumentMouseUp)); + a.hasTouch && + ((c.ontouchstart = function(a) { + b.onContainerTouchStart(a); + }), + (c.ontouchmove = function(a) { + b.onContainerTouchMove(a); + }), + a.unbindDocumentTouchEnd || + (a.unbindDocumentTouchEnd = E( + d, + 'touchend', + b.onDocumentTouchEnd, + ))); + }, + destroy: function() { + var b = this; + b.unDocMouseMove && b.unDocMouseMove(); + this.unbindContainerMouseLeave(); + a.chartCount || + (a.unbindDocumentMouseUp && + (a.unbindDocumentMouseUp = a.unbindDocumentMouseUp()), + a.unbindDocumentTouchEnd && + (a.unbindDocumentTouchEnd = a.unbindDocumentTouchEnd())); + clearInterval(b.tooltipTimeout); + a.objectEach(b, function(a, c) { + b[c] = null; + }); + }, + }; + })(M); + (function(a) { + var E = a.charts, + D = a.each, + H = a.extend, + p = a.map, + f = a.noop, + l = a.pick; + H(a.Pointer.prototype, { + pinchTranslate: function(a, f, l, p, e, h) { + this.zoomHor && this.pinchTranslateDirection(!0, a, f, l, p, e, h); + this.zoomVert && this.pinchTranslateDirection(!1, a, f, l, p, e, h); + }, + pinchTranslateDirection: function(a, f, l, p, e, h, m, d) { + var c = this.chart, + b = a ? 'x' : 'y', + k = a ? 'X' : 'Y', + z = 'chart' + k, + n = a ? 'width' : 'height', + r = c['plot' + (a ? 'Left' : 'Top')], + x, + w, + t = d || 1, + C = c.inverted, + u = c.bounds[a ? 'h' : 'v'], + q = 1 === f.length, + A = f[0][z], + F = l[0][z], + G = !q && f[1][z], + g = !q && l[1][z], + v; + l = function() { + !q && + 20 < Math.abs(A - G) && + (t = d || Math.abs(F - g) / Math.abs(A - G)); + w = (r - F) / t + A; + x = c['plot' + (a ? 'Width' : 'Height')] / t; + }; + l(); + f = w; + f < u.min + ? ((f = u.min), (v = !0)) + : f + x > u.max && ((f = u.max - x), (v = !0)); + v + ? ((F -= 0.8 * (F - m[b][0])), q || (g -= 0.8 * (g - m[b][1])), l()) + : (m[b] = [F, g]); + C || ((h[b] = w - r), (h[n] = x)); + h = C ? 1 / t : t; + e[n] = x; + e[b] = f; + p[C ? (a ? 'scaleY' : 'scaleX') : 'scale' + k] = t; + p['translate' + k] = h * r + (F - h * A); + }, + pinch: function(a) { + var n = this, + r = n.chart, + u = n.pinchDown, + e = a.touches, + h = e.length, + m = n.lastValidTouch, + d = n.hasZoom, + c = n.selectionMarker, + b = {}, + k = + 1 === h && + ((n.inClass(a.target, 'highcharts-tracker') && r.runTrackerClick) || + n.runChartClick), + z = {}; + 1 < h && (n.initiated = !0); + d && n.initiated && !k && a.preventDefault(); + p(e, function(a) { + return n.normalize(a); + }); + 'touchstart' === a.type + ? (D(e, function(a, b) { + u[b] = { chartX: a.chartX, chartY: a.chartY }; + }), + (m.x = [u[0].chartX, u[1] && u[1].chartX]), + (m.y = [u[0].chartY, u[1] && u[1].chartY]), + D(r.axes, function(a) { + if (a.zoomEnabled) { + var b = r.bounds[a.horiz ? 'h' : 'v'], + c = a.minPixelPadding, + d = a.toPixels(l(a.options.min, a.dataMin)), + e = a.toPixels(l(a.options.max, a.dataMax)), + k = Math.max(d, e); + b.min = Math.min(a.pos, Math.min(d, e) - c); + b.max = Math.max(a.pos + a.len, k + c); + } + }), + (n.res = !0)) + : n.followTouchMove && 1 === h + ? this.runPointActions(n.normalize(a)) + : u.length && + (c || + (n.selectionMarker = c = H({ destroy: f, touch: !0 }, r.plotBox)), + n.pinchTranslate(u, e, b, c, z, m), + (n.hasPinched = d), + n.scaleGroups(b, z), + n.res && ((n.res = !1), this.reset(!1, 0))); + }, + touch: function(f, n) { + var p = this.chart, + r, + e; + if (p.index !== a.hoverChartIndex) + this.onContainerMouseLeave({ relatedTarget: !0 }); + a.hoverChartIndex = p.index; + 1 === f.touches.length + ? ((f = this.normalize(f)), + (e = p.isInsidePlot(f.chartX - p.plotLeft, f.chartY - p.plotTop)) && + !p.openMenu + ? (n && this.runPointActions(f), + 'touchmove' === f.type && + ((n = this.pinchDown), + (r = n[0] + ? 4 <= + Math.sqrt( + Math.pow(n[0].chartX - f.chartX, 2) + + Math.pow(n[0].chartY - f.chartY, 2), + ) + : !1)), + l(r, !0) && this.pinch(f)) + : n && this.reset()) + : 2 === f.touches.length && this.pinch(f); + }, + onContainerTouchStart: function(a) { + this.zoomOption(a); + this.touch(a, !0); + }, + onContainerTouchMove: function(a) { + this.touch(a); + }, + onDocumentTouchEnd: function(f) { + E[a.hoverChartIndex] && E[a.hoverChartIndex].pointer.drop(f); + }, + }); + })(M); + (function(a) { + var E = a.addEvent, + D = a.charts, + H = a.css, + p = a.doc, + f = a.extend, + l = a.noop, + r = a.Pointer, + n = a.removeEvent, + w = a.win, + u = a.wrap; + if (!a.hasTouch && (w.PointerEvent || w.MSPointerEvent)) { + var e = {}, + h = !!w.PointerEvent, + m = function() { + var c = []; + c.item = function(a) { + return this[a]; + }; + a.objectEach(e, function(a) { + c.push({ pageX: a.pageX, pageY: a.pageY, target: a.target }); + }); + return c; + }, + d = function(c, b, d, e) { + ('touch' !== c.pointerType && + c.pointerType !== c.MSPOINTER_TYPE_TOUCH) || + !D[a.hoverChartIndex] || + (e(c), + (e = D[a.hoverChartIndex].pointer), + e[b]({ + type: d, + target: c.currentTarget, + preventDefault: l, + touches: m(), + })); + }; + f(r.prototype, { + onContainerPointerDown: function(a) { + d(a, 'onContainerTouchStart', 'touchstart', function(a) { + e[a.pointerId] = { + pageX: a.pageX, + pageY: a.pageY, + target: a.currentTarget, + }; + }); + }, + onContainerPointerMove: function(a) { + d(a, 'onContainerTouchMove', 'touchmove', function(a) { + e[a.pointerId] = { pageX: a.pageX, pageY: a.pageY }; + e[a.pointerId].target || (e[a.pointerId].target = a.currentTarget); + }); + }, + onDocumentPointerUp: function(a) { + d(a, 'onDocumentTouchEnd', 'touchend', function(a) { + delete e[a.pointerId]; + }); + }, + batchMSEvents: function(a) { + a( + this.chart.container, + h ? 'pointerdown' : 'MSPointerDown', + this.onContainerPointerDown, + ); + a( + this.chart.container, + h ? 'pointermove' : 'MSPointerMove', + this.onContainerPointerMove, + ); + a(p, h ? 'pointerup' : 'MSPointerUp', this.onDocumentPointerUp); + }, + }); + u(r.prototype, 'init', function(a, b, d) { + a.call(this, b, d); + this.hasZoom && + H(b.container, { + '-ms-touch-action': 'none', + 'touch-action': 'none', + }); + }); + u(r.prototype, 'setDOMEvents', function(a) { + a.apply(this); + (this.hasZoom || this.followTouchMove) && this.batchMSEvents(E); + }); + u(r.prototype, 'destroy', function(a) { + this.batchMSEvents(n); + a.call(this); + }); + } + })(M); + (function(a) { + var E = a.addEvent, + D = a.css, + H = a.discardElement, + p = a.defined, + f = a.each, + l = a.isFirefox, + r = a.marginNames, + n = a.merge, + w = a.pick, + u = a.setAnimation, + e = a.stableSort, + h = a.win, + m = a.wrap; + a.Legend = function(a, c) { + this.init(a, c); + }; + a.Legend.prototype = { + init: function(a, c) { + this.chart = a; + this.setOptions(c); + c.enabled && + (this.render(), + E(this.chart, 'endResize', function() { + this.legend.positionCheckboxes(); + })); + }, + setOptions: function(a) { + var c = w(a.padding, 8); + this.options = a; + this.itemStyle = a.itemStyle; + this.itemHiddenStyle = n(this.itemStyle, a.itemHiddenStyle); + this.itemMarginTop = a.itemMarginTop || 0; + this.padding = c; + this.initialItemY = c - 5; + this.itemHeight = this.maxItemWidth = 0; + this.symbolWidth = w(a.symbolWidth, 16); + this.pages = []; + }, + update: function(a, c) { + var b = this.chart; + this.setOptions(n(!0, this.options, a)); + this.destroy(); + b.isDirtyLegend = b.isDirtyBox = !0; + w(c, !0) && b.redraw(); + }, + colorizeItem: function(a, c) { + a.legendGroup[c ? 'removeClass' : 'addClass']( + 'highcharts-legend-item-hidden', + ); + var b = this.options, + d = a.legendItem, + e = a.legendLine, + h = a.legendSymbol, + f = this.itemHiddenStyle.color, + b = c ? b.itemStyle.color : f, + m = c ? a.color || f : f, + l = a.options && a.options.marker, + t = { fill: m }; + d && d.css({ fill: b, color: b }); + e && e.attr({ stroke: m }); + h && + (l && + h.isMarker && + ((t = a.pointAttribs()), c || (t.stroke = t.fill = f)), + h.attr(t)); + }, + positionItem: function(a) { + var c = this.options, + b = c.symbolPadding, + c = !c.rtl, + d = a._legendItemPos, + e = d[0], + d = d[1], + h = a.checkbox; + (a = a.legendGroup) && + a.element && + a.translate(c ? e : this.legendWidth - e - 2 * b - 4, d); + h && ((h.x = e), (h.y = d)); + }, + destroyItem: function(a) { + var c = a.checkbox; + f(['legendItem', 'legendLine', 'legendSymbol', 'legendGroup'], function( + b, + ) { + a[b] && (a[b] = a[b].destroy()); + }); + c && H(a.checkbox); + }, + destroy: function() { + function a(a) { + this[a] && (this[a] = this[a].destroy()); + } + f(this.getAllItems(), function(c) { + f(['legendItem', 'legendGroup'], a, c); + }); + f('clipRect up down pager nav box title group'.split(' '), a, this); + this.display = null; + }, + positionCheckboxes: function() { + var a = this.group && this.group.alignAttr, + c, + b = this.clipHeight || this.legendHeight, + e = this.titleHeight; + a && + ((c = a.translateY), + f( + this.allItems, + function(d) { + var k = d.checkbox, + h; + k && + ((h = c + e + k.y + (this.scrollOffset || 0) + 3), + D(k, { + left: a.translateX + d.checkboxOffset + k.x - 20 + 'px', + top: h + 'px', + display: h > c - 6 && h < c + b - 6 ? '' : 'none', + })); + }, + this, + )); + }, + renderTitle: function() { + var a = this.options, + c = this.padding, + b = a.title, + e = 0; + b.text && + (this.title || + (this.title = this.chart.renderer + .label( + b.text, + c - 3, + c - 4, + null, + null, + null, + a.useHTML, + null, + 'legend-title', + ) + .attr({ zIndex: 1 }) + .css(b.style) + .add(this.group)), + (a = this.title.getBBox()), + (e = a.height), + (this.offsetWidth = a.width), + this.contentGroup.attr({ translateY: e })); + this.titleHeight = e; + }, + setText: function(d) { + var c = this.options; + d.legendItem.attr({ + text: c.labelFormat + ? a.format(c.labelFormat, d) + : c.labelFormatter.call(d), + }); + }, + renderItem: function(a) { + var c = this.chart, + b = c.renderer, + d = this.options, + e = 'horizontal' === d.layout, + h = this.symbolWidth, + f = d.symbolPadding, + m = this.itemStyle, + l = this.itemHiddenStyle, + t = this.padding, + p = e ? w(d.itemDistance, 20) : 0, + r = !d.rtl, + q = d.width, + A = d.itemMarginBottom || 0, + F = this.itemMarginTop, + G = a.legendItem, + g = !a.series, + v = !g && a.series.drawLegendSymbol ? a.series : a, + u = v.options, + L = this.createCheckboxForItem && u && u.showCheckbox, + u = h + f + p + (L ? 20 : 0), + P = d.useHTML, + J = a.options.className; + G || + ((a.legendGroup = b + .g('legend-item') + .addClass( + 'highcharts-' + + v.type + + '-series highcharts-color-' + + a.colorIndex + + (J ? ' ' + J : '') + + (g ? ' highcharts-series-' + a.index : ''), + ) + .attr({ zIndex: 1 }) + .add(this.scrollGroup)), + (a.legendItem = G = b + .text('', r ? h + f : -f, this.baseline || 0, P) + .css(n(a.visible ? m : l)) + .attr({ align: r ? 'left' : 'right', zIndex: 2 }) + .add(a.legendGroup)), + this.baseline || + ((h = m.fontSize), + (this.fontMetrics = b.fontMetrics(h, G)), + (this.baseline = this.fontMetrics.f + 3 + F), + G.attr('y', this.baseline)), + (this.symbolHeight = d.symbolHeight || this.fontMetrics.f), + v.drawLegendSymbol(this, a), + this.setItemEvents && this.setItemEvents(a, G, P), + L && this.createCheckboxForItem(a)); + this.colorizeItem(a, a.visible); + m.width || + G.css({ width: (d.itemWidth || d.width || c.spacingBox.width) - u }); + this.setText(a); + b = G.getBBox(); + m = a.checkboxOffset = d.itemWidth || a.legendItemWidth || b.width + u; + this.itemHeight = b = Math.round( + a.legendItemHeight || b.height || this.symbolHeight, + ); + e && + this.itemX - t + m > (q || c.spacingBox.width - 2 * t - d.x) && + ((this.itemX = t), + (this.itemY += F + this.lastLineHeight + A), + (this.lastLineHeight = 0)); + this.maxItemWidth = Math.max(this.maxItemWidth, m); + this.lastItemY = F + this.itemY + A; + this.lastLineHeight = Math.max(b, this.lastLineHeight); + a._legendItemPos = [this.itemX, this.itemY]; + e + ? (this.itemX += m) + : ((this.itemY += F + b + A), (this.lastLineHeight = b)); + this.offsetWidth = + q || + Math.max( + (e ? this.itemX - t - (a.checkbox ? 0 : p) : m) + t, + this.offsetWidth, + ); + }, + getAllItems: function() { + var a = []; + f(this.chart.series, function(c) { + var b = c && c.options; + c && + w(b.showInLegend, p(b.linkedTo) ? !1 : void 0, !0) && + (a = a.concat( + c.legendItems || ('point' === b.legendType ? c.data : c), + )); + }); + return a; + }, + getAlignment: function() { + var a = this.options; + return a.floating + ? '' + : a.align.charAt(0) + a.verticalAlign.charAt(0) + a.layout.charAt(0); + }, + adjustMargins: function(a, c) { + var b = this.chart, + d = this.options, + e = this.getAlignment(); + e && + f( + [/(lth|ct|rth)/, /(rtv|rm|rbv)/, /(rbh|cb|lbh)/, /(lbv|lm|ltv)/], + function(k, h) { + k.test(e) && + !p(a[h]) && + (b[r[h]] = Math.max( + b[r[h]], + b.legend[(h + 1) % 2 ? 'legendHeight' : 'legendWidth'] + + [1, -1, -1, 1][h] * d[h % 2 ? 'x' : 'y'] + + w(d.margin, 12) + + c[h] + + (0 === h ? b.titleOffset + b.options.title.margin : 0), + )); + }, + ); + }, + render: function() { + var a = this, + c = a.chart, + b = c.renderer, + k = a.group, + h, + m, + l, + x, + p = a.box, + t = a.options, + C = a.padding; + a.itemX = C; + a.itemY = a.initialItemY; + a.offsetWidth = 0; + a.lastItemY = 0; + k || + ((a.group = k = b + .g('legend') + .attr({ zIndex: 7 }) + .add()), + (a.contentGroup = b + .g() + .attr({ zIndex: 1 }) + .add(k)), + (a.scrollGroup = b.g().add(a.contentGroup))); + a.renderTitle(); + h = a.getAllItems(); + e(h, function(a, b) { + return ( + ((a.options && a.options.legendIndex) || 0) - + ((b.options && b.options.legendIndex) || 0) + ); + }); + t.reversed && h.reverse(); + a.allItems = h; + a.display = m = !!h.length; + a.lastLineHeight = 0; + f(h, function(b) { + a.renderItem(b); + }); + l = (t.width || a.offsetWidth) + C; + x = a.lastItemY + a.lastLineHeight + a.titleHeight; + x = a.handleOverflow(x); + x += C; + p || + ((a.box = p = b + .rect() + .addClass('highcharts-legend-box') + .attr({ r: t.borderRadius }) + .add(k)), + (p.isNew = !0)); + p.attr({ + stroke: t.borderColor, + 'stroke-width': t.borderWidth || 0, + fill: t.backgroundColor || 'none', + }).shadow(t.shadow); + 0 < l && + 0 < x && + (p[p.isNew ? 'attr' : 'animate']( + p.crisp.call( + {}, + { x: 0, y: 0, width: l, height: x }, + p.strokeWidth(), + ), + ), + (p.isNew = !1)); + p[m ? 'show' : 'hide'](); + a.legendWidth = l; + a.legendHeight = x; + f(h, function(b) { + a.positionItem(b); + }); + m && + ((b = c.spacingBox), + /(lth|ct|rth)/.test(a.getAlignment()) && + (b = n(b, { y: b.y + c.titleOffset + c.options.title.margin })), + k.align(n(t, { width: l, height: x }), !0, b)); + c.isResizing || this.positionCheckboxes(); + }, + handleOverflow: function(a) { + var c = this, + b = this.chart, + d = b.renderer, + e = this.options, + h = e.y, + m = this.padding, + b = b.spacingBox.height + ('top' === e.verticalAlign ? -h : h) - m, + h = e.maxHeight, + l, + n = this.clipRect, + t = e.navigation, + p = w(t.animation, !0), + r = t.arrowSize || 12, + q = this.nav, + A = this.pages, + F, + G = this.allItems, + g = function(a) { + 'number' === typeof a + ? n.attr({ height: a }) + : n && ((c.clipRect = n.destroy()), c.contentGroup.clip()); + c.contentGroup.div && + (c.contentGroup.div.style.clip = a + ? 'rect(' + m + 'px,9999px,' + (m + a) + 'px,0)' + : 'auto'); + }; + 'horizontal' !== e.layout || + 'middle' === e.verticalAlign || + e.floating || + (b /= 2); + h && (b = Math.min(b, h)); + A.length = 0; + a > b && !1 !== t.enabled + ? ((this.clipHeight = l = Math.max(b - 20 - this.titleHeight - m, 0)), + (this.currentPage = w(this.currentPage, 1)), + (this.fullHeight = a), + f(G, function(a, b) { + var c = a._legendItemPos[1], + d = Math.round(a.legendItem.getBBox().height), + g = A.length; + if (!g || (c - A[g - 1] > l && (F || c) !== A[g - 1])) + A.push(F || c), g++; + a.pageIx = g - 1; + F && (G[b - 1].pageIx = g - 1); + b === G.length - 1 && + c + d - A[g - 1] > l && + (A.push(c), (a.pageIx = g)); + c !== F && (F = c); + }), + n || + ((n = c.clipRect = d.clipRect(0, m, 9999, 0)), + c.contentGroup.clip(n)), + g(l), + q || + ((this.nav = q = d + .g() + .attr({ zIndex: 1 }) + .add(this.group)), + (this.up = d + .symbol('triangle', 0, 0, r, r) + .on('click', function() { + c.scroll(-1, p); + }) + .add(q)), + (this.pager = d + .text('', 15, 10) + .addClass('highcharts-legend-navigation') + .css(t.style) + .add(q)), + (this.down = d + .symbol('triangle-down', 0, 0, r, r) + .on('click', function() { + c.scroll(1, p); + }) + .add(q))), + c.scroll(0), + (a = b)) + : q && + (g(), + (this.nav = q.destroy()), + this.scrollGroup.attr({ translateY: 1 }), + (this.clipHeight = 0)); + return a; + }, + scroll: function(a, c) { + var b = this.pages, + d = b.length; + a = this.currentPage + a; + var e = this.clipHeight, + h = this.options.navigation, + f = this.pager, + m = this.padding; + a > d && (a = d); + 0 < a && + (void 0 !== c && u(c, this.chart), + this.nav.attr({ + translateX: m, + translateY: e + this.padding + 7 + this.titleHeight, + visibility: 'visible', + }), + this.up.attr({ + class: + 1 === a + ? 'highcharts-legend-nav-inactive' + : 'highcharts-legend-nav-active', + }), + f.attr({ text: a + '/' + d }), + this.down.attr({ + x: 18 + this.pager.getBBox().width, + class: + a === d + ? 'highcharts-legend-nav-inactive' + : 'highcharts-legend-nav-active', + }), + this.up + .attr({ fill: 1 === a ? h.inactiveColor : h.activeColor }) + .css({ cursor: 1 === a ? 'default' : 'pointer' }), + this.down + .attr({ fill: a === d ? h.inactiveColor : h.activeColor }) + .css({ cursor: a === d ? 'default' : 'pointer' }), + (this.scrollOffset = -b[a - 1] + this.initialItemY), + this.scrollGroup.animate({ translateY: this.scrollOffset }), + (this.currentPage = a), + this.positionCheckboxes()); + }, + }; + a.LegendSymbolMixin = { + drawRectangle: function(a, c) { + var b = a.symbolHeight, + d = a.options.squareSymbol; + c.legendSymbol = this.chart.renderer + .rect( + d ? (a.symbolWidth - b) / 2 : 0, + a.baseline - b + 1, + d ? b : a.symbolWidth, + b, + w(a.options.symbolRadius, b / 2), + ) + .addClass('highcharts-point') + .attr({ zIndex: 3 }) + .add(c.legendGroup); + }, + drawLineMarker: function(a) { + var c = this.options, + b = c.marker, + d = a.symbolWidth, + e = a.symbolHeight, + h = e / 2, + f = this.chart.renderer, + m = this.legendGroup; + a = a.baseline - Math.round(0.3 * a.fontMetrics.b); + var l; + l = { 'stroke-width': c.lineWidth || 0 }; + c.dashStyle && (l.dashstyle = c.dashStyle); + this.legendLine = f + .path(['M', 0, a, 'L', d, a]) + .addClass('highcharts-graph') + .attr(l) + .add(m); + b && + !1 !== b.enabled && + ((c = Math.min(w(b.radius, h), h)), + 0 === this.symbol.indexOf('url') && + ((b = n(b, { width: e, height: e })), (c = 0)), + (this.legendSymbol = b = f + .symbol(this.symbol, d / 2 - c, a - c, 2 * c, 2 * c, b) + .addClass('highcharts-point') + .add(m)), + (b.isMarker = !0)); + }, + }; + (/Trident\/7\.0/.test(h.navigator.userAgent) || l) && + m(a.Legend.prototype, 'positionItem', function(a, c) { + var b = this, + d = function() { + c._legendItemPos && a.call(b, c); + }; + d(); + setTimeout(d); + }); + })(M); + (function(a) { + var E = a.addEvent, + D = a.animate, + H = a.animObject, + p = a.attr, + f = a.doc, + l = a.Axis, + r = a.createElement, + n = a.defaultOptions, + w = a.discardElement, + u = a.charts, + e = a.css, + h = a.defined, + m = a.each, + d = a.extend, + c = a.find, + b = a.fireEvent, + k = a.grep, + z = a.isNumber, + B = a.isObject, + I = a.isString, + x = a.Legend, + K = a.marginNames, + t = a.merge, + C = a.objectEach, + N = a.Pointer, + q = a.pick, + A = a.pInt, + F = a.removeEvent, + G = a.seriesTypes, + g = a.splat, + v = a.svg, + Q = a.syncTimeout, + L = a.win, + P = (a.Chart = function() { + this.getArgs.apply(this, arguments); + }); + a.chart = function(a, b, c) { + return new P(a, b, c); + }; + d(P.prototype, { + callbacks: [], + getArgs: function() { + var a = [].slice.call(arguments); + if (I(a[0]) || a[0].nodeName) this.renderTo = a.shift(); + this.init(a[0], a[1]); + }, + init: function(b, c) { + var d, + g, + e = b.series, + k = b.plotOptions || {}; + b.series = null; + d = t(n, b); + for (g in d.plotOptions) + d.plotOptions[g].tooltip = (k[g] && t(k[g].tooltip)) || void 0; + d.tooltip.userOptions = + (b.chart && b.chart.forExport && b.tooltip.userOptions) || b.tooltip; + d.series = b.series = e; + this.userOptions = b; + b = d.chart; + g = b.events; + this.margin = []; + this.spacing = []; + this.bounds = { h: {}, v: {} }; + this.labelCollectors = []; + this.callback = c; + this.isResizing = 0; + this.options = d; + this.axes = []; + this.series = []; + this.hasCartesianSeries = b.showAxes; + var q = this; + q.index = u.length; + u.push(q); + a.chartCount++; + g && + C(g, function(a, b) { + E(q, b, a); + }); + q.xAxis = []; + q.yAxis = []; + q.pointCount = q.colorCounter = q.symbolCounter = 0; + q.firstRender(); + }, + initSeries: function(b) { + var c = this.options.chart; + (c = G[b.type || c.type || c.defaultSeriesType]) || a.error(17, !0); + c = new c(); + c.init(this, b); + return c; + }, + orderSeries: function(a) { + var b = this.series; + for (a = a || 0; a < b.length; a++) + b[a] && + ((b[a].index = a), + (b[a].name = b[a].name || 'Series ' + (b[a].index + 1))); + }, + isInsidePlot: function(a, b, c) { + var d = c ? b : a; + a = c ? a : b; + return 0 <= d && d <= this.plotWidth && 0 <= a && a <= this.plotHeight; + }, + redraw: function(c) { + var g = this.axes, + e = this.series, + k = this.pointer, + q = this.legend, + h = this.isDirtyLegend, + f, + l, + v = this.hasCartesianSeries, + A = this.isDirtyBox, + F, + t = this.renderer, + x = t.isHidden(), + n = []; + this.setResponsive && this.setResponsive(!1); + a.setAnimation(c, this); + x && this.temporaryDisplay(); + this.layOutTitles(); + for (c = e.length; c--; ) + if (((F = e[c]), F.options.stacking && ((f = !0), F.isDirty))) { + l = !0; + break; + } + if (l) + for (c = e.length; c--; ) + (F = e[c]), F.options.stacking && (F.isDirty = !0); + m(e, function(a) { + a.isDirty && + 'point' === a.options.legendType && + (a.updateTotals && a.updateTotals(), (h = !0)); + a.isDirtyData && b(a, 'updatedData'); + }); + h && q.options.enabled && (q.render(), (this.isDirtyLegend = !1)); + f && this.getStacks(); + v && + m(g, function(a) { + a.updateNames(); + a.setScale(); + }); + this.getMargins(); + v && + (m(g, function(a) { + a.isDirty && (A = !0); + }), + m(g, function(a) { + var c = a.min + ',' + a.max; + a.extKey !== c && + ((a.extKey = c), + n.push(function() { + b(a, 'afterSetExtremes', d(a.eventArgs, a.getExtremes())); + delete a.eventArgs; + })); + (A || f) && a.redraw(); + })); + A && this.drawChartBox(); + b(this, 'predraw'); + m(e, function(a) { + (A || a.isDirty) && a.visible && a.redraw(); + a.isDirtyData = !1; + }); + k && k.reset(!0); + t.draw(); + b(this, 'redraw'); + b(this, 'render'); + x && this.temporaryDisplay(!0); + m(n, function(a) { + a.call(); + }); + }, + get: function(a) { + function b(b) { + return b.id === a || (b.options && b.options.id === a); + } + var d, + g = this.series, + e; + d = c(this.axes, b) || c(this.series, b); + for (e = 0; !d && e < g.length; e++) d = c(g[e].points || [], b); + return d; + }, + getAxes: function() { + var a = this, + b = this.options, + c = (b.xAxis = g(b.xAxis || {})), + b = (b.yAxis = g(b.yAxis || {})); + m(c, function(a, b) { + a.index = b; + a.isX = !0; + }); + m(b, function(a, b) { + a.index = b; + }); + c = c.concat(b); + m(c, function(b) { + new l(a, b); + }); + }, + getSelectedPoints: function() { + var a = []; + m(this.series, function(b) { + a = a.concat( + k(b.data || [], function(a) { + return a.selected; + }), + ); + }); + return a; + }, + getSelectedSeries: function() { + return k(this.series, function(a) { + return a.selected; + }); + }, + setTitle: function(a, b, c) { + var d = this, + g = d.options, + e; + e = g.title = t( + { + style: { color: '#333333', fontSize: g.isStock ? '16px' : '18px' }, + }, + g.title, + a, + ); + g = g.subtitle = t({ style: { color: '#666666' } }, g.subtitle, b); + m([['title', a, e], ['subtitle', b, g]], function(a, b) { + var c = a[0], + g = d[c], + e = a[1]; + a = a[2]; + g && e && (d[c] = g = g.destroy()); + a && + !g && + ((d[c] = d.renderer + .text(a.text, 0, 0, a.useHTML) + .attr({ + align: a.align, + class: 'highcharts-' + c, + zIndex: a.zIndex || 4, + }) + .add()), + (d[c].update = function(a) { + d.setTitle(!b && a, b && a); + }), + d[c].css(a.style)); + }); + d.layOutTitles(c); + }, + layOutTitles: function(a) { + var b = 0, + c, + g = this.renderer, + e = this.spacingBox; + m( + ['title', 'subtitle'], + function(a) { + var c = this[a], + k = this.options[a]; + a = 'title' === a ? -3 : k.verticalAlign ? 0 : b + 2; + var q; + c && + ((q = k.style.fontSize), + (q = g.fontMetrics(q, c).b), + c + .css({ width: (k.width || e.width + k.widthAdjust) + 'px' }) + .align(d({ y: a + q }, k), !1, 'spacingBox'), + k.floating || + k.verticalAlign || + (b = Math.ceil(b + c.getBBox(k.useHTML).height))); + }, + this, + ); + c = this.titleOffset !== b; + this.titleOffset = b; + !this.isDirtyBox && + c && + ((this.isDirtyBox = c), + this.hasRendered && q(a, !0) && this.isDirtyBox && this.redraw()); + }, + getChartSize: function() { + var b = this.options.chart, + c = b.width, + b = b.height, + d = this.renderTo; + h(c) || (this.containerWidth = a.getStyle(d, 'width')); + h(b) || (this.containerHeight = a.getStyle(d, 'height')); + this.chartWidth = Math.max(0, c || this.containerWidth || 600); + this.chartHeight = Math.max( + 0, + a.relativeLength(b, this.chartWidth) || + (1 < this.containerHeight ? this.containerHeight : 400), + ); + }, + temporaryDisplay: function(b) { + var c = this.renderTo; + if (b) + for (; c && c.style; ) + c.hcOrigStyle && (a.css(c, c.hcOrigStyle), delete c.hcOrigStyle), + c.hcOrigDetached && + (f.body.removeChild(c), (c.hcOrigDetached = !1)), + (c = c.parentNode); + else + for (; c && c.style; ) { + f.body.contains(c) || + c.parentNode || + ((c.hcOrigDetached = !0), f.body.appendChild(c)); + if ('none' === a.getStyle(c, 'display', !1) || c.hcOricDetached) + (c.hcOrigStyle = { + display: c.style.display, + height: c.style.height, + overflow: c.style.overflow, + }), + (b = { display: 'block', overflow: 'hidden' }), + c !== this.renderTo && (b.height = 0), + a.css(c, b), + c.offsetWidth || + c.style.setProperty('display', 'block', 'important'); + c = c.parentNode; + if (c === f.body) break; + } + }, + setClassName: function(a) { + this.container.className = 'highcharts-container ' + (a || ''); + }, + getContainer: function() { + var b, + c = this.options, + g = c.chart, + e, + k; + b = this.renderTo; + var q = a.uniqueKey(), + h; + b || (this.renderTo = b = g.renderTo); + I(b) && (this.renderTo = b = f.getElementById(b)); + b || a.error(13, !0); + e = A(p(b, 'data-highcharts-chart')); + z(e) && u[e] && u[e].hasRendered && u[e].destroy(); + p(b, 'data-highcharts-chart', this.index); + b.innerHTML = ''; + g.skipClone || b.offsetWidth || this.temporaryDisplay(); + this.getChartSize(); + e = this.chartWidth; + k = this.chartHeight; + h = d( + { + position: 'relative', + overflow: 'hidden', + width: e + 'px', + height: k + 'px', + textAlign: 'left', + lineHeight: 'normal', + zIndex: 0, + '-webkit-tap-highlight-color': 'rgba(0,0,0,0)', + }, + g.style, + ); + this.container = b = r('div', { id: q }, h, b); + this._cursor = b.style.cursor; + this.renderer = new (a[g.renderer] || a.Renderer)( + b, + e, + k, + null, + g.forExport, + c.exporting && c.exporting.allowHTML, + ); + this.setClassName(g.className); + this.renderer.setStyle(g.style); + this.renderer.chartIndex = this.index; + }, + getMargins: function(a) { + var b = this.spacing, + c = this.margin, + d = this.titleOffset; + this.resetMargins(); + d && + !h(c[0]) && + (this.plotTop = Math.max( + this.plotTop, + d + this.options.title.margin + b[0], + )); + this.legend && this.legend.display && this.legend.adjustMargins(c, b); + this.extraMargin && + (this[this.extraMargin.type] = + (this[this.extraMargin.type] || 0) + this.extraMargin.value); + this.adjustPlotArea && this.adjustPlotArea(); + a || this.getAxisMargins(); + }, + getAxisMargins: function() { + var a = this, + b = (a.axisOffset = [0, 0, 0, 0]), + c = a.margin; + a.hasCartesianSeries && + m(a.axes, function(a) { + a.visible && a.getOffset(); + }); + m(K, function(d, g) { + h(c[g]) || (a[d] += b[g]); + }); + a.setChartSize(); + }, + reflow: function(b) { + var c = this, + d = c.options.chart, + g = c.renderTo, + e = h(d.width) && h(d.height), + k = d.width || a.getStyle(g, 'width'), + d = d.height || a.getStyle(g, 'height'), + g = b ? b.target : L; + if (!e && !c.isPrinting && k && d && (g === L || g === f)) { + if (k !== c.containerWidth || d !== c.containerHeight) + clearTimeout(c.reflowTimeout), + (c.reflowTimeout = Q( + function() { + c.container && c.setSize(void 0, void 0, !1); + }, + b ? 100 : 0, + )); + c.containerWidth = k; + c.containerHeight = d; + } + }, + initReflow: function() { + var a = this, + b; + b = E(L, 'resize', function(b) { + a.reflow(b); + }); + E(a, 'destroy', b); + }, + setSize: function(c, d, g) { + var k = this, + q = k.renderer; + k.isResizing += 1; + a.setAnimation(g, k); + k.oldChartHeight = k.chartHeight; + k.oldChartWidth = k.chartWidth; + void 0 !== c && (k.options.chart.width = c); + void 0 !== d && (k.options.chart.height = d); + k.getChartSize(); + c = q.globalAnimation; + (c ? D : e)( + k.container, + { width: k.chartWidth + 'px', height: k.chartHeight + 'px' }, + c, + ); + k.setChartSize(!0); + q.setSize(k.chartWidth, k.chartHeight, g); + m(k.axes, function(a) { + a.isDirty = !0; + a.setScale(); + }); + k.isDirtyLegend = !0; + k.isDirtyBox = !0; + k.layOutTitles(); + k.getMargins(); + k.redraw(g); + k.oldChartHeight = null; + b(k, 'resize'); + Q(function() { + k && + b(k, 'endResize', null, function() { + --k.isResizing; + }); + }, H(c).duration); + }, + setChartSize: function(a) { + var b = this.inverted, + c = this.renderer, + d = this.chartWidth, + g = this.chartHeight, + e = this.options.chart, + k = this.spacing, + q = this.clipOffset, + h, + f, + l, + v; + this.plotLeft = h = Math.round(this.plotLeft); + this.plotTop = f = Math.round(this.plotTop); + this.plotWidth = l = Math.max(0, Math.round(d - h - this.marginRight)); + this.plotHeight = v = Math.max( + 0, + Math.round(g - f - this.marginBottom), + ); + this.plotSizeX = b ? v : l; + this.plotSizeY = b ? l : v; + this.plotBorderWidth = e.plotBorderWidth || 0; + this.spacingBox = c.spacingBox = { + x: k[3], + y: k[0], + width: d - k[3] - k[1], + height: g - k[0] - k[2], + }; + this.plotBox = c.plotBox = { x: h, y: f, width: l, height: v }; + d = 2 * Math.floor(this.plotBorderWidth / 2); + b = Math.ceil(Math.max(d, q[3]) / 2); + c = Math.ceil(Math.max(d, q[0]) / 2); + this.clipBox = { + x: b, + y: c, + width: Math.floor(this.plotSizeX - Math.max(d, q[1]) / 2 - b), + height: Math.max( + 0, + Math.floor(this.plotSizeY - Math.max(d, q[2]) / 2 - c), + ), + }; + a || + m(this.axes, function(a) { + a.setAxisSize(); + a.setAxisTranslation(); + }); + }, + resetMargins: function() { + var a = this, + b = a.options.chart; + m(['margin', 'spacing'], function(c) { + var d = b[c], + g = B(d) ? d : [d, d, d, d]; + m(['Top', 'Right', 'Bottom', 'Left'], function(d, e) { + a[c][e] = q(b[c + d], g[e]); + }); + }); + m(K, function(b, c) { + a[b] = q(a.margin[c], a.spacing[c]); + }); + a.axisOffset = [0, 0, 0, 0]; + a.clipOffset = [0, 0, 0, 0]; + }, + drawChartBox: function() { + var a = this.options.chart, + b = this.renderer, + c = this.chartWidth, + d = this.chartHeight, + g = this.chartBackground, + e = this.plotBackground, + k = this.plotBorder, + q, + h = this.plotBGImage, + f = a.backgroundColor, + m = a.plotBackgroundColor, + l = a.plotBackgroundImage, + v, + A = this.plotLeft, + F = this.plotTop, + t = this.plotWidth, + x = this.plotHeight, + n = this.plotBox, + p = this.clipRect, + z = this.clipBox, + G = 'animate'; + g || + ((this.chartBackground = g = b + .rect() + .addClass('highcharts-background') + .add()), + (G = 'attr')); + q = a.borderWidth || 0; + v = q + (a.shadow ? 8 : 0); + f = { fill: f || 'none' }; + if (q || g['stroke-width']) + (f.stroke = a.borderColor), (f['stroke-width'] = q); + g.attr(f).shadow(a.shadow); + g[G]({ + x: v / 2, + y: v / 2, + width: c - v - (q % 2), + height: d - v - (q % 2), + r: a.borderRadius, + }); + G = 'animate'; + e || + ((G = 'attr'), + (this.plotBackground = e = b + .rect() + .addClass('highcharts-plot-background') + .add())); + e[G](n); + e.attr({ fill: m || 'none' }).shadow(a.plotShadow); + l && + (h + ? h.animate(n) + : (this.plotBGImage = b.image(l, A, F, t, x).add())); + p + ? p.animate({ width: z.width, height: z.height }) + : (this.clipRect = b.clipRect(z)); + G = 'animate'; + k || + ((G = 'attr'), + (this.plotBorder = k = b + .rect() + .addClass('highcharts-plot-border') + .attr({ zIndex: 1 }) + .add())); + k.attr({ + stroke: a.plotBorderColor, + 'stroke-width': a.plotBorderWidth || 0, + fill: 'none', + }); + k[G](k.crisp({ x: A, y: F, width: t, height: x }, -k.strokeWidth())); + this.isDirtyBox = !1; + }, + propFromSeries: function() { + var a = this, + b = a.options.chart, + c, + d = a.options.series, + g, + e; + m(['inverted', 'angular', 'polar'], function(k) { + c = G[b.type || b.defaultSeriesType]; + e = b[k] || (c && c.prototype[k]); + for (g = d && d.length; !e && g--; ) + (c = G[d[g].type]) && c.prototype[k] && (e = !0); + a[k] = e; + }); + }, + linkSeries: function() { + var a = this, + b = a.series; + m(b, function(a) { + a.linkedSeries.length = 0; + }); + m(b, function(b) { + var c = b.options.linkedTo; + I(c) && + (c = ':previous' === c ? a.series[b.index - 1] : a.get(c)) && + c.linkedParent !== b && + (c.linkedSeries.push(b), + (b.linkedParent = c), + (b.visible = q(b.options.visible, c.options.visible, b.visible))); + }); + }, + renderSeries: function() { + m(this.series, function(a) { + a.translate(); + a.render(); + }); + }, + renderLabels: function() { + var a = this, + b = a.options.labels; + b.items && + m(b.items, function(c) { + var g = d(b.style, c.style), + e = A(g.left) + a.plotLeft, + k = A(g.top) + a.plotTop + 12; + delete g.left; + delete g.top; + a.renderer + .text(c.html, e, k) + .attr({ zIndex: 2 }) + .css(g) + .add(); + }); + }, + render: function() { + var a = this.axes, + b = this.renderer, + c = this.options, + d, + g, + e; + this.setTitle(); + this.legend = new x(this, c.legend); + this.getStacks && this.getStacks(); + this.getMargins(!0); + this.setChartSize(); + c = this.plotWidth; + d = this.plotHeight = Math.max(this.plotHeight - 21, 0); + m(a, function(a) { + a.setScale(); + }); + this.getAxisMargins(); + g = 1.1 < c / this.plotWidth; + e = 1.05 < d / this.plotHeight; + if (g || e) + m(a, function(a) { + ((a.horiz && g) || (!a.horiz && e)) && a.setTickInterval(!0); + }), + this.getMargins(); + this.drawChartBox(); + this.hasCartesianSeries && + m(a, function(a) { + a.visible && a.render(); + }); + this.seriesGroup || + (this.seriesGroup = b + .g('series-group') + .attr({ zIndex: 3 }) + .add()); + this.renderSeries(); + this.renderLabels(); + this.addCredits(); + this.setResponsive && this.setResponsive(); + this.hasRendered = !0; + }, + addCredits: function(a) { + var b = this; + a = t(!0, this.options.credits, a); + a.enabled && + !this.credits && + ((this.credits = this.renderer + .text(a.text + (this.mapCredits || ''), 0, 0) + .addClass('highcharts-credits') + .on('click', function() { + a.href && (L.location.href = a.href); + }) + .attr({ align: a.position.align, zIndex: 8 }) + .css(a.style) + .add() + .align(a.position)), + (this.credits.update = function(a) { + b.credits = b.credits.destroy(); + b.addCredits(a); + })); + }, + destroy: function() { + var c = this, + d = c.axes, + g = c.series, + e = c.container, + k, + q = e && e.parentNode; + b(c, 'destroy'); + c.renderer.forExport ? a.erase(u, c) : (u[c.index] = void 0); + a.chartCount--; + c.renderTo.removeAttribute('data-highcharts-chart'); + F(c); + for (k = d.length; k--; ) d[k] = d[k].destroy(); + this.scroller && this.scroller.destroy && this.scroller.destroy(); + for (k = g.length; k--; ) g[k] = g[k].destroy(); + m( + 'title subtitle chartBackground plotBackground plotBGImage plotBorder seriesGroup clipRect credits pointer rangeSelector legend resetZoomButton tooltip renderer'.split( + ' ', + ), + function(a) { + var b = c[a]; + b && b.destroy && (c[a] = b.destroy()); + }, + ); + e && ((e.innerHTML = ''), F(e), q && w(e)); + C(c, function(a, b) { + delete c[b]; + }); + }, + isReadyToRender: function() { + var a = this; + return v || L != L.top || 'complete' === f.readyState + ? !0 + : (f.attachEvent('onreadystatechange', function() { + f.detachEvent('onreadystatechange', a.firstRender); + 'complete' === f.readyState && a.firstRender(); + }), + !1); + }, + firstRender: function() { + var a = this, + c = a.options; + if (a.isReadyToRender()) { + a.getContainer(); + b(a, 'init'); + a.resetMargins(); + a.setChartSize(); + a.propFromSeries(); + a.getAxes(); + m(c.series || [], function(b) { + a.initSeries(b); + }); + a.linkSeries(); + b(a, 'beforeRender'); + N && (a.pointer = new N(a, c)); + a.render(); + if (!a.renderer.imgCount && a.onload) a.onload(); + a.temporaryDisplay(!0); + } + }, + onload: function() { + m( + [this.callback].concat(this.callbacks), + function(a) { + a && void 0 !== this.index && a.apply(this, [this]); + }, + this, + ); + b(this, 'load'); + b(this, 'render'); + h(this.index) && !1 !== this.options.chart.reflow && this.initReflow(); + this.onload = null; + }, + }); + })(M); + (function(a) { + var E, + D = a.each, + H = a.extend, + p = a.erase, + f = a.fireEvent, + l = a.format, + r = a.isArray, + n = a.isNumber, + w = a.pick, + u = a.removeEvent; + a.Point = E = function() {}; + a.Point.prototype = { + init: function(a, h, f) { + this.series = a; + this.color = a.color; + this.applyOptions(h, f); + a.options.colorByPoint + ? ((h = a.options.colors || a.chart.options.colors), + (this.color = this.color || h[a.colorCounter]), + (h = h.length), + (f = a.colorCounter), + a.colorCounter++, + a.colorCounter === h && (a.colorCounter = 0)) + : (f = a.colorIndex); + this.colorIndex = w(this.colorIndex, f); + a.chart.pointCount++; + return this; + }, + applyOptions: function(a, h) { + var e = this.series, + d = e.options.pointValKey || e.pointValKey; + a = E.prototype.optionsToObject.call(this, a); + H(this, a); + this.options = this.options ? H(this.options, a) : a; + a.group && delete this.group; + d && (this.y = this[d]); + this.isNull = w( + this.isValid && !this.isValid(), + null === this.x || !n(this.y, !0), + ); + this.selected && (this.state = 'select'); + 'name' in this && + void 0 === h && + e.xAxis && + e.xAxis.hasNames && + (this.x = e.xAxis.nameToX(this)); + void 0 === this.x && + e && + (this.x = void 0 === h ? e.autoIncrement(this) : h); + return this; + }, + optionsToObject: function(a) { + var e = {}, + f = this.series, + d = f.options.keys, + c = d || f.pointArrayMap || ['y'], + b = c.length, + k = 0, + l = 0; + if (n(a) || null === a) e[c[0]] = a; + else if (r(a)) + for ( + !d && + a.length > b && + ((f = typeof a[0]), + 'string' === f ? (e.name = a[0]) : 'number' === f && (e.x = a[0]), + k++); + l < b; + + ) + (d && void 0 === a[k]) || (e[c[l]] = a[k]), k++, l++; + else + 'object' === typeof a && + ((e = a), + a.dataLabels && (f._hasPointLabels = !0), + a.marker && (f._hasPointMarkers = !0)); + return e; + }, + getClassName: function() { + return ( + 'highcharts-point' + + (this.selected ? ' highcharts-point-select' : '') + + (this.negative ? ' highcharts-negative' : '') + + (this.isNull ? ' highcharts-null-point' : '') + + (void 0 !== this.colorIndex + ? ' highcharts-color-' + this.colorIndex + : '') + + (this.options.className ? ' ' + this.options.className : '') + + (this.zone && this.zone.className + ? ' ' + this.zone.className.replace('highcharts-negative', '') + : '') + ); + }, + getZone: function() { + var a = this.series, + h = a.zones, + a = a.zoneAxis || 'y', + f = 0, + d; + for (d = h[f]; this[a] >= d.value; ) d = h[++f]; + d && d.color && !this.options.color && (this.color = d.color); + return d; + }, + destroy: function() { + var a = this.series.chart, + h = a.hoverPoints, + f; + a.pointCount--; + h && (this.setState(), p(h, this), h.length || (a.hoverPoints = null)); + if (this === a.hoverPoint) this.onMouseOut(); + if (this.graphic || this.dataLabel) u(this), this.destroyElements(); + this.legendItem && a.legend.destroyItem(this); + for (f in this) this[f] = null; + }, + destroyElements: function() { + for ( + var a = [ + 'graphic', + 'dataLabel', + 'dataLabelUpper', + 'connector', + 'shadowGroup', + ], + h, + f = 6; + f--; + + ) + (h = a[f]), this[h] && (this[h] = this[h].destroy()); + }, + getLabelConfig: function() { + return { + x: this.category, + y: this.y, + color: this.color, + colorIndex: this.colorIndex, + key: this.name || this.category, + series: this.series, + point: this, + percentage: this.percentage, + total: this.total || this.stackTotal, + }; + }, + tooltipFormatter: function(a) { + var e = this.series, + f = e.tooltipOptions, + d = w(f.valueDecimals, ''), + c = f.valuePrefix || '', + b = f.valueSuffix || ''; + D(e.pointArrayMap || ['y'], function(e) { + e = '{point.' + e; + if (c || b) a = a.replace(e + '}', c + e + '}' + b); + a = a.replace(e + '}', e + ':,.' + d + 'f}'); + }); + return l(a, { point: this, series: this.series }); + }, + firePointEvent: function(a, h, m) { + var d = this, + c = this.series.options; + (c.point.events[a] || + (d.options && d.options.events && d.options.events[a])) && + this.importEvents(); + 'click' === a && + c.allowPointSelect && + (m = function(a) { + d.select && d.select(null, a.ctrlKey || a.metaKey || a.shiftKey); + }); + f(this, a, h, m); + }, + visible: !0, + }; + })(M); + (function(a) { + var E = a.addEvent, + D = a.animObject, + H = a.arrayMax, + p = a.arrayMin, + f = a.correctFloat, + l = a.Date, + r = a.defaultOptions, + n = a.defaultPlotOptions, + w = a.defined, + u = a.each, + e = a.erase, + h = a.extend, + m = a.fireEvent, + d = a.grep, + c = a.isArray, + b = a.isNumber, + k = a.isString, + z = a.merge, + B = a.objectEach, + I = a.pick, + x = a.removeEvent, + K = a.splat, + t = a.SVGElement, + C = a.syncTimeout, + N = a.win; + a.Series = a.seriesType( + 'line', + null, + { + lineWidth: 2, + allowPointSelect: !1, + showCheckbox: !1, + animation: { duration: 1e3 }, + events: {}, + marker: { + lineWidth: 0, + lineColor: '#ffffff', + radius: 4, + states: { + hover: { + animation: { duration: 50 }, + enabled: !0, + radiusPlus: 2, + lineWidthPlus: 1, + }, + select: { + fillColor: '#cccccc', + lineColor: '#000000', + lineWidth: 2, + }, + }, + }, + point: { events: {} }, + dataLabels: { + align: 'center', + formatter: function() { + return null === this.y ? '' : a.numberFormat(this.y, -1); + }, + style: { + fontSize: '11px', + fontWeight: 'bold', + color: 'contrast', + textOutline: '1px contrast', + }, + verticalAlign: 'bottom', + x: 0, + y: 0, + padding: 5, + }, + cropThreshold: 300, + pointRange: 0, + softThreshold: !0, + states: { + hover: { + animation: { duration: 50 }, + lineWidthPlus: 1, + marker: {}, + halo: { size: 10, opacity: 0.25 }, + }, + select: { marker: {} }, + }, + stickyTracking: !0, + turboThreshold: 1e3, + findNearestPointBy: 'x', + }, + { + isCartesian: !0, + pointClass: a.Point, + sorted: !0, + requireSorting: !0, + directTouch: !1, + axisTypes: ['xAxis', 'yAxis'], + colorCounter: 0, + parallelArrays: ['x', 'y'], + coll: 'series', + init: function(a, b) { + var c = this, + d, + g = a.series, + e; + c.chart = a; + c.options = b = c.setOptions(b); + c.linkedSeries = []; + c.bindAxes(); + h(c, { + name: b.name, + state: '', + visible: !1 !== b.visible, + selected: !0 === b.selected, + }); + d = b.events; + B(d, function(a, b) { + E(c, b, a); + }); + if ( + (d && d.click) || + (b.point && b.point.events && b.point.events.click) || + b.allowPointSelect + ) + a.runTrackerClick = !0; + c.getColor(); + c.getSymbol(); + u(c.parallelArrays, function(a) { + c[a + 'Data'] = []; + }); + c.setData(b.data, !1); + c.isCartesian && (a.hasCartesianSeries = !0); + g.length && (e = g[g.length - 1]); + c._i = I(e && e._i, -1) + 1; + a.orderSeries(this.insert(g)); + }, + insert: function(a) { + var c = this.options.index, + d; + if (b(c)) { + for (d = a.length; d--; ) + if (c >= I(a[d].options.index, a[d]._i)) { + a.splice(d + 1, 0, this); + break; + } + -1 === d && a.unshift(this); + d += 1; + } else a.push(this); + return I(d, a.length - 1); + }, + bindAxes: function() { + var b = this, + c = b.options, + d = b.chart, + e; + u(b.axisTypes || [], function(g) { + u(d[g], function(a) { + e = a.options; + if ( + c[g] === e.index || + (void 0 !== c[g] && c[g] === e.id) || + (void 0 === c[g] && 0 === e.index) + ) + b.insert(a.series), (b[g] = a), (a.isDirty = !0); + }); + b[g] || b.optionalAxis === g || a.error(18, !0); + }); + }, + updateParallelArrays: function(a, c) { + var d = a.series, + e = arguments, + g = b(c) + ? function(b) { + var g = 'y' === b && d.toYData ? d.toYData(a) : a[b]; + d[b + 'Data'][c] = g; + } + : function(a) { + Array.prototype[c].apply( + d[a + 'Data'], + Array.prototype.slice.call(e, 2), + ); + }; + u(d.parallelArrays, g); + }, + autoIncrement: function() { + var b = this.options, + c = this.xIncrement, + d, + e = b.pointIntervalUnit, + g = 0, + c = I(c, b.pointStart, 0); + this.pointInterval = d = I(this.pointInterval, b.pointInterval, 1); + e && + ((b = new l(c)), + 'day' === e + ? (b = +b[l.hcSetDate](b[l.hcGetDate]() + d)) + : 'month' === e + ? (b = +b[l.hcSetMonth](b[l.hcGetMonth]() + d)) + : 'year' === e && + (b = +b[l.hcSetFullYear](b[l.hcGetFullYear]() + d)), + l.hcHasTimeZone && (g = a.getTZOffset(b) - a.getTZOffset(c)), + (d = b - c + g)); + this.xIncrement = c + d; + return c; + }, + setOptions: function(a) { + var b = this.chart, + c = b.options, + d = c.plotOptions, + g = (b.userOptions || {}).plotOptions || {}, + e = d[this.type]; + this.userOptions = a; + b = z(e, d.series, a); + this.tooltipOptions = z( + r.tooltip, + r.plotOptions.series && r.plotOptions.series.tooltip, + r.plotOptions[this.type].tooltip, + c.tooltip.userOptions, + d.series && d.series.tooltip, + d[this.type].tooltip, + a.tooltip, + ); + this.stickyTracking = I( + a.stickyTracking, + g[this.type] && g[this.type].stickyTracking, + g.series && g.series.stickyTracking, + this.tooltipOptions.shared && !this.noSharedTooltip + ? !0 + : b.stickyTracking, + ); + null === e.marker && delete b.marker; + this.zoneAxis = b.zoneAxis; + a = this.zones = (b.zones || []).slice(); + (!b.negativeColor && !b.negativeFillColor) || + b.zones || + a.push({ + value: b[this.zoneAxis + 'Threshold'] || b.threshold || 0, + className: 'highcharts-negative', + color: b.negativeColor, + fillColor: b.negativeFillColor, + }); + a.length && + w(a[a.length - 1].value) && + a.push({ color: this.color, fillColor: this.fillColor }); + return b; + }, + getCyclic: function(a, b, c) { + var d, + g = this.chart, + e = this.userOptions, + k = a + 'Index', + h = a + 'Counter', + q = c ? c.length : I(g.options.chart[a + 'Count'], g[a + 'Count']); + b || + ((d = I(e[k], e['_' + k])), + w(d) || + (g.series.length || (g[h] = 0), + (e['_' + k] = d = g[h] % q), + (g[h] += 1)), + c && (b = c[d])); + void 0 !== d && (this[k] = d); + this[a] = b; + }, + getColor: function() { + this.options.colorByPoint + ? (this.options.color = null) + : this.getCyclic( + 'color', + this.options.color || n[this.type].color, + this.chart.options.colors, + ); + }, + getSymbol: function() { + this.getCyclic( + 'symbol', + this.options.marker.symbol, + this.chart.options.symbols, + ); + }, + drawLegendSymbol: a.LegendSymbolMixin.drawLineMarker, + setData: function(d, e, h, f) { + var g = this, + q = g.points, + m = (q && q.length) || 0, + l, + A = g.options, + t = g.chart, + x = null, + n = g.xAxis, + p = A.turboThreshold, + z = this.xData, + F = this.yData, + C = (l = g.pointArrayMap) && l.length; + d = d || []; + l = d.length; + e = I(e, !0); + if ( + !1 !== f && + l && + m === l && + !g.cropped && + !g.hasGroupedData && + g.visible + ) + u(d, function(a, b) { + q[b].update && a !== A.data[b] && q[b].update(a, !1, null, !1); + }); + else { + g.xIncrement = null; + g.colorCounter = 0; + u(this.parallelArrays, function(a) { + g[a + 'Data'].length = 0; + }); + if (p && l > p) { + for (h = 0; null === x && h < l; ) (x = d[h]), h++; + if (b(x)) + for (h = 0; h < l; h++) + (z[h] = this.autoIncrement()), (F[h] = d[h]); + else if (c(x)) + if (C) + for (h = 0; h < l; h++) + (x = d[h]), (z[h] = x[0]), (F[h] = x.slice(1, C + 1)); + else + for (h = 0; h < l; h++) + (x = d[h]), (z[h] = x[0]), (F[h] = x[1]); + else a.error(12); + } else + for (h = 0; h < l; h++) + void 0 !== d[h] && + ((x = { series: g }), + g.pointClass.prototype.applyOptions.apply(x, [d[h]]), + g.updateParallelArrays(x, h)); + F && k(F[0]) && a.error(14, !0); + g.data = []; + g.options.data = g.userOptions.data = d; + for (h = m; h--; ) q[h] && q[h].destroy && q[h].destroy(); + n && (n.minRange = n.userMinRange); + g.isDirty = t.isDirtyBox = !0; + g.isDirtyData = !!q; + h = !1; + } + 'point' === A.legendType && + (this.processData(), this.generatePoints()); + e && t.redraw(h); + }, + processData: function(b) { + var c = this.xData, + d = this.yData, + e = c.length, + g; + g = 0; + var k, + h, + q = this.xAxis, + f, + m = this.options; + f = m.cropThreshold; + var l = this.getExtremesFromAll || m.getExtremesFromAll, + t = this.isCartesian, + m = q && q.val2lin, + x = q && q.isLog, + n = this.requireSorting, + p, + z; + if (t && !this.isDirty && !q.isDirty && !this.yAxis.isDirty && !b) + return !1; + q && ((b = q.getExtremes()), (p = b.min), (z = b.max)); + if (t && this.sorted && !l && (!f || e > f || this.forceCrop)) + if (c[e - 1] < p || c[0] > z) (c = []), (d = []); + else if (c[0] < p || c[e - 1] > z) + (g = this.cropData(this.xData, this.yData, p, z)), + (c = g.xData), + (d = g.yData), + (g = g.start), + (k = !0); + for (f = c.length || 1; --f; ) + (e = x ? m(c[f]) - m(c[f - 1]) : c[f] - c[f - 1]), + 0 < e && (void 0 === h || e < h) + ? (h = e) + : 0 > e && n && (a.error(15), (n = !1)); + this.cropped = k; + this.cropStart = g; + this.processedXData = c; + this.processedYData = d; + this.closestPointRange = h; + }, + cropData: function(a, b, c, d) { + var g = a.length, + e = 0, + k = g, + h = I(this.cropShoulder, 1), + f; + for (f = 0; f < g; f++) + if (a[f] >= c) { + e = Math.max(0, f - h); + break; + } + for (c = f; c < g; c++) + if (a[c] > d) { + k = c + h; + break; + } + return { + xData: a.slice(e, k), + yData: b.slice(e, k), + start: e, + end: k, + }; + }, + generatePoints: function() { + var a = this.options, + b = a.data, + c = this.data, + d, + g = this.processedXData, + e = this.processedYData, + k = this.pointClass, + h = g.length, + f = this.cropStart || 0, + m, + l = this.hasGroupedData, + a = a.keys, + t, + x = [], + n; + c || l || ((c = []), (c.length = b.length), (c = this.data = c)); + a && l && (this.options.keys = !1); + for (n = 0; n < h; n++) + (m = f + n), + l + ? ((t = new k().init(this, [g[n]].concat(K(e[n])))), + (t.dataGroup = this.groupMap[n])) + : (t = c[m]) || + void 0 === b[m] || + (c[m] = t = new k().init(this, b[m], g[n])), + t && ((t.index = m), (x[n] = t)); + this.options.keys = a; + if (c && (h !== (d = c.length) || l)) + for (n = 0; n < d; n++) + n !== f || l || (n += h), + c[n] && (c[n].destroyElements(), (c[n].plotX = void 0)); + this.data = c; + this.points = x; + }, + getExtremes: function(a) { + var d = this.yAxis, + e = this.processedXData, + k, + g = [], + h = 0; + k = this.xAxis.getExtremes(); + var f = k.min, + q = k.max, + m, + l, + t, + n; + a = a || this.stackedYData || this.processedYData || []; + k = a.length; + for (n = 0; n < k; n++) + if ( + ((l = e[n]), + (t = a[n]), + (m = + (b(t, !0) || c(t)) && + (!d.positiveValuesOnly || t.length || 0 < t)), + (l = + this.getExtremesFromAll || + this.options.getExtremesFromAll || + this.cropped || + ((e[n + 1] || l) >= f && (e[n - 1] || l) <= q)), + m && l) + ) + if ((m = t.length)) + for (; m--; ) 'number' === typeof t[m] && (g[h++] = t[m]); + else g[h++] = t; + this.dataMin = p(g); + this.dataMax = H(g); + }, + translate: function() { + this.processedXData || this.processData(); + this.generatePoints(); + var a = this.options, + c = a.stacking, + d = this.xAxis, + e = d.categories, + g = this.yAxis, + k = this.points, + h = k.length, + m = !!this.modifyValue, + l = a.pointPlacement, + t = 'between' === l || b(l), + n = a.threshold, + x = a.startFromThreshold ? n : 0, + p, + z, + C, + r, + u = Number.MAX_VALUE; + 'between' === l && (l = 0.5); + b(l) && (l *= I(a.pointRange || d.pointRange)); + for (a = 0; a < h; a++) { + var B = k[a], + N = B.x, + K = B.y; + z = B.low; + var D = + c && + g.stacks[ + (this.negStacks && K < (x ? 0 : n) ? '-' : '') + this.stackKey + ], + E; + g.positiveValuesOnly && null !== K && 0 >= K && (B.isNull = !0); + B.plotX = p = f( + Math.min( + Math.max( + -1e5, + d.translate(N, 0, 0, 0, 1, l, 'flags' === this.type), + ), + 1e5, + ), + ); + c && + this.visible && + !B.isNull && + D && + D[N] && + ((r = this.getStackIndicator(r, N, this.index)), + (E = D[N]), + (K = E.points[r.key]), + (z = K[0]), + (K = K[1]), + z === x && r.key === D[N].base && (z = I(n, g.min)), + g.positiveValuesOnly && 0 >= z && (z = null), + (B.total = B.stackTotal = E.total), + (B.percentage = E.total && (B.y / E.total) * 100), + (B.stackY = K), + E.setOffset(this.pointXOffset || 0, this.barW || 0)); + B.yBottom = w(z) ? g.translate(z, 0, 1, 0, 1) : null; + m && (K = this.modifyValue(K, B)); + B.plotY = z = + 'number' === typeof K && Infinity !== K + ? Math.min(Math.max(-1e5, g.translate(K, 0, 1, 0, 1)), 1e5) + : void 0; + B.isInside = + void 0 !== z && 0 <= z && z <= g.len && 0 <= p && p <= d.len; + B.clientX = t ? f(d.translate(N, 0, 0, 0, 1, l)) : p; + B.negative = B.y < (n || 0); + B.category = e && void 0 !== e[B.x] ? e[B.x] : B.x; + B.isNull || + (void 0 !== C && (u = Math.min(u, Math.abs(p - C))), (C = p)); + B.zone = this.zones.length && B.getZone(); + } + this.closestPointRangePx = u; + }, + getValidPoints: function(a, b) { + var c = this.chart; + return d(a || this.points || [], function(a) { + return b && !c.isInsidePlot(a.plotX, a.plotY, c.inverted) + ? !1 + : !a.isNull; + }); + }, + setClip: function(a) { + var b = this.chart, + c = this.options, + d = b.renderer, + g = b.inverted, + e = this.clipBox, + k = e || b.clipBox, + h = + this.sharedClipKey || + [ + '_sharedClip', + a && a.duration, + a && a.easing, + k.height, + c.xAxis, + c.yAxis, + ].join(), + f = b[h], + q = b[h + 'm']; + f || + (a && + ((k.width = 0), + g && (k.x = b.plotSizeX), + (b[h + 'm'] = q = d.clipRect( + g ? b.plotSizeX + 99 : -99, + g ? -b.plotLeft : -b.plotTop, + 99, + g ? b.chartWidth : b.chartHeight, + ))), + (b[h] = f = d.clipRect(k)), + (f.count = { length: 0 })); + a && + !f.count[this.index] && + ((f.count[this.index] = !0), (f.count.length += 1)); + !1 !== c.clip && + (this.group.clip(a || e ? f : b.clipRect), + this.markerGroup.clip(q), + (this.sharedClipKey = h)); + a || + (f.count[this.index] && + (delete f.count[this.index], --f.count.length), + 0 === f.count.length && + h && + b[h] && + (e || (b[h] = b[h].destroy()), + b[h + 'm'] && (b[h + 'm'] = b[h + 'm'].destroy()))); + }, + animate: function(a) { + var b = this.chart, + c = D(this.options.animation), + d; + a + ? this.setClip(c) + : ((d = this.sharedClipKey), + (a = b[d]) && a.animate({ width: b.plotSizeX, x: 0 }, c), + b[d + 'm'] && + b[d + 'm'].animate({ width: b.plotSizeX + 99, x: 0 }, c), + (this.animate = null)); + }, + afterAnimate: function() { + this.setClip(); + m(this, 'afterAnimate'); + this.finishedAnimating = !0; + }, + drawPoints: function() { + var a = this.points, + b = this.chart, + c, + d, + g, + e, + k = this.options.marker, + h, + f, + l, + m = this[this.specialGroup] || this.markerGroup, + t, + n = I( + k.enabled, + this.xAxis.isRadial ? !0 : null, + this.closestPointRangePx >= 2 * k.radius, + ); + if (!1 !== k.enabled || this._hasPointMarkers) + for (c = 0; c < a.length; c++) + (d = a[c]), + (e = d.graphic), + (h = d.marker || {}), + (f = !!d.marker), + (g = (n && void 0 === h.enabled) || h.enabled), + (l = d.isInside), + g && !d.isNull + ? ((g = I(h.symbol, this.symbol)), + (d.hasImage = 0 === g.indexOf('url')), + (t = this.markerAttribs(d, d.selected && 'select')), + e + ? e[l ? 'show' : 'hide'](!0).animate(t) + : l && + (0 < t.width || d.hasImage) && + (d.graphic = e = b.renderer + .symbol(g, t.x, t.y, t.width, t.height, f ? h : k) + .add(m)), + e && e.attr(this.pointAttribs(d, d.selected && 'select')), + e && e.addClass(d.getClassName(), !0)) + : e && (d.graphic = e.destroy()); + }, + markerAttribs: function(a, b) { + var c = this.options.marker, + d = a.marker || {}, + g = I(d.radius, c.radius); + b && + ((c = c.states[b]), + (b = d.states && d.states[b]), + (g = I( + b && b.radius, + c && c.radius, + g + ((c && c.radiusPlus) || 0), + ))); + a.hasImage && (g = 0); + a = { x: Math.floor(a.plotX) - g, y: a.plotY - g }; + g && (a.width = a.height = 2 * g); + return a; + }, + pointAttribs: function(a, b) { + var c = this.options.marker, + d = a && a.options, + g = (d && d.marker) || {}, + e = this.color, + k = d && d.color, + h = a && a.color, + d = I(g.lineWidth, c.lineWidth); + a = a && a.zone && a.zone.color; + e = k || a || h || e; + a = g.fillColor || c.fillColor || e; + e = g.lineColor || c.lineColor || e; + b && + ((c = c.states[b]), + (b = (g.states && g.states[b]) || {}), + (d = I( + b.lineWidth, + c.lineWidth, + d + I(b.lineWidthPlus, c.lineWidthPlus, 0), + )), + (a = b.fillColor || c.fillColor || a), + (e = b.lineColor || c.lineColor || e)); + return { stroke: e, 'stroke-width': d, fill: a }; + }, + destroy: function() { + var a = this, + b = a.chart, + c = /AppleWebKit\/533/.test(N.navigator.userAgent), + d, + g, + k = a.data || [], + h, + f; + m(a, 'destroy'); + x(a); + u(a.axisTypes || [], function(b) { + (f = a[b]) && + f.series && + (e(f.series, a), (f.isDirty = f.forceRedraw = !0)); + }); + a.legendItem && a.chart.legend.destroyItem(a); + for (g = k.length; g--; ) (h = k[g]) && h.destroy && h.destroy(); + a.points = null; + clearTimeout(a.animationTimeout); + B(a, function(a, b) { + a instanceof t && + !a.survive && + ((d = c && 'group' === b ? 'hide' : 'destroy'), a[d]()); + }); + b.hoverSeries === a && (b.hoverSeries = null); + e(b.series, a); + b.orderSeries(); + B(a, function(b, c) { + delete a[c]; + }); + }, + getGraphPath: function(a, b, c) { + var d = this, + g = d.options, + e = g.step, + k, + h = [], + f = [], + l; + a = a || d.points; + (k = a.reversed) && a.reverse(); + (e = { right: 1, center: 2 }[e] || (e && 3)) && k && (e = 4 - e); + !g.connectNulls || b || c || (a = this.getValidPoints(a)); + u(a, function(k, m) { + var q = k.plotX, + t = k.plotY, + n = a[m - 1]; + (k.leftCliff || (n && n.rightCliff)) && !c && (l = !0); + k.isNull && !w(b) && 0 < m + ? (l = !g.connectNulls) + : k.isNull && !b + ? (l = !0) + : (0 === m || l + ? (m = ['M', k.plotX, k.plotY]) + : d.getPointSpline + ? (m = d.getPointSpline(a, k, m)) + : e + ? ((m = + 1 === e + ? ['L', n.plotX, t] + : 2 === e + ? [ + 'L', + (n.plotX + q) / 2, + n.plotY, + 'L', + (n.plotX + q) / 2, + t, + ] + : ['L', q, n.plotY]), + m.push('L', q, t)) + : (m = ['L', q, t]), + f.push(k.x), + e && f.push(k.x), + h.push.apply(h, m), + (l = !1)); + }); + h.xMap = f; + return (d.graphPath = h); + }, + drawGraph: function() { + var a = this, + b = this.options, + c = (this.gappedPath || this.getGraphPath).call(this), + d = [ + [ + 'graph', + 'highcharts-graph', + b.lineColor || this.color, + b.dashStyle, + ], + ]; + u(this.zones, function(c, e) { + d.push([ + 'zone-graph-' + e, + 'highcharts-graph highcharts-zone-graph-' + + e + + ' ' + + (c.className || ''), + c.color || a.color, + c.dashStyle || b.dashStyle, + ]); + }); + u(d, function(d, e) { + var g = d[0], + k = a[g]; + k + ? ((k.endX = a.preventGraphAnimation ? null : c.xMap), + k.animate({ d: c })) + : c.length && + ((a[g] = a.chart.renderer + .path(c) + .addClass(d[1]) + .attr({ zIndex: 1 }) + .add(a.group)), + (k = { + stroke: d[2], + 'stroke-width': b.lineWidth, + fill: (a.fillGraph && a.color) || 'none', + }), + d[3] + ? (k.dashstyle = d[3]) + : 'square' !== b.linecap && + (k['stroke-linecap'] = k['stroke-linejoin'] = 'round'), + (k = a[g].attr(k).shadow(2 > e && b.shadow))); + k && ((k.startX = c.xMap), (k.isArea = c.isArea)); + }); + }, + applyZones: function() { + var a = this, + b = this.chart, + c = b.renderer, + d = this.zones, + e, + k, + h = this.clips || [], + f, + m = this.graph, + l = this.area, + t = Math.max(b.chartWidth, b.chartHeight), + n = this[(this.zoneAxis || 'y') + 'Axis'], + x, + p, + z = b.inverted, + C, + r, + w, + B, + K = !1; + d.length && + (m || l) && + n && + void 0 !== n.min && + ((p = n.reversed), + (C = n.horiz), + m && m.hide(), + l && l.hide(), + (x = n.getExtremes()), + u(d, function(d, g) { + e = p ? (C ? b.plotWidth : 0) : C ? 0 : n.toPixels(x.min); + e = Math.min(Math.max(I(k, e), 0), t); + k = Math.min( + Math.max(Math.round(n.toPixels(I(d.value, x.max), !0)), 0), + t, + ); + K && (e = k = n.toPixels(x.max)); + r = Math.abs(e - k); + w = Math.min(e, k); + B = Math.max(e, k); + n.isXAxis + ? ((f = { x: z ? B : w, y: 0, width: r, height: t }), + C || (f.x = b.plotHeight - f.x)) + : ((f = { x: 0, y: z ? B : w, width: t, height: r }), + C && (f.y = b.plotWidth - f.y)); + z && + c.isVML && + (f = n.isXAxis + ? { x: 0, y: p ? w : B, height: f.width, width: b.chartWidth } + : { + x: f.y - b.plotLeft - b.spacingBox.x, + y: 0, + width: f.height, + height: b.chartHeight, + }); + h[g] + ? h[g].animate(f) + : ((h[g] = c.clipRect(f)), + m && a['zone-graph-' + g].clip(h[g]), + l && a['zone-area-' + g].clip(h[g])); + K = d.value > x.max; + }), + (this.clips = h)); + }, + invertGroups: function(a) { + function b() { + u(['group', 'markerGroup'], function(b) { + c[b] && + (d.renderer.isVML && + c[b].attr({ width: c.yAxis.len, height: c.xAxis.len }), + (c[b].width = c.yAxis.len), + (c[b].height = c.xAxis.len), + c[b].invert(a)); + }); + } + var c = this, + d = c.chart, + e; + c.xAxis && + ((e = E(d, 'resize', b)), + E(c, 'destroy', e), + b(a), + (c.invertGroups = b)); + }, + plotGroup: function(a, b, c, d, e) { + var g = this[a], + k = !g; + k && + (this[a] = g = this.chart.renderer + .g() + .attr({ zIndex: d || 0.1 }) + .add(e)); + g.addClass( + 'highcharts-' + + b + + ' highcharts-series-' + + this.index + + ' highcharts-' + + this.type + + '-series ' + + (w(this.colorIndex) + ? 'highcharts-color-' + this.colorIndex + ' ' + : '') + + (this.options.className || '') + + (g.hasClass('highcharts-tracker') ? ' highcharts-tracker' : ''), + !0, + ); + g.attr({ visibility: c })[k ? 'attr' : 'animate'](this.getPlotBox()); + return g; + }, + getPlotBox: function() { + var a = this.chart, + b = this.xAxis, + c = this.yAxis; + a.inverted && ((b = c), (c = this.xAxis)); + return { + translateX: b ? b.left : a.plotLeft, + translateY: c ? c.top : a.plotTop, + scaleX: 1, + scaleY: 1, + }; + }, + render: function() { + var a = this, + b = a.chart, + c, + d = a.options, + e = !!a.animate && b.renderer.isSVG && D(d.animation).duration, + k = a.visible ? 'inherit' : 'hidden', + h = d.zIndex, + f = a.hasRendered, + m = b.seriesGroup, + l = b.inverted; + c = a.plotGroup('group', 'series', k, h, m); + a.markerGroup = a.plotGroup('markerGroup', 'markers', k, h, m); + e && a.animate(!0); + c.inverted = a.isCartesian ? l : !1; + a.drawGraph && (a.drawGraph(), a.applyZones()); + a.drawDataLabels && a.drawDataLabels(); + a.visible && a.drawPoints(); + a.drawTracker && + !1 !== a.options.enableMouseTracking && + a.drawTracker(); + a.invertGroups(l); + !1 === d.clip || a.sharedClipKey || f || c.clip(b.clipRect); + e && a.animate(); + f || + (a.animationTimeout = C(function() { + a.afterAnimate(); + }, e)); + a.isDirty = !1; + a.hasRendered = !0; + }, + redraw: function() { + var a = this.chart, + b = this.isDirty || this.isDirtyData, + c = this.group, + d = this.xAxis, + e = this.yAxis; + c && + (a.inverted && c.attr({ width: a.plotWidth, height: a.plotHeight }), + c.animate({ + translateX: I(d && d.left, a.plotLeft), + translateY: I(e && e.top, a.plotTop), + })); + this.translate(); + this.render(); + b && delete this.kdTree; + }, + kdAxisArray: ['clientX', 'plotY'], + searchPoint: function(a, b) { + var c = this.xAxis, + d = this.yAxis, + e = this.chart.inverted; + return this.searchKDTree( + { + clientX: e ? c.len - a.chartY + c.pos : a.chartX - c.pos, + plotY: e ? d.len - a.chartX + d.pos : a.chartY - d.pos, + }, + b, + ); + }, + buildKDTree: function() { + function a(c, d, e) { + var g, k; + if ((k = c && c.length)) + return ( + (g = b.kdAxisArray[d % e]), + c.sort(function(a, b) { + return a[g] - b[g]; + }), + (k = Math.floor(k / 2)), + { + point: c[k], + left: a(c.slice(0, k), d + 1, e), + right: a(c.slice(k + 1), d + 1, e), + } + ); + } + this.buildingKdTree = !0; + var b = this, + c = -1 < b.options.findNearestPointBy.indexOf('y') ? 2 : 1; + delete b.kdTree; + C( + function() { + b.kdTree = a(b.getValidPoints(null, !b.directTouch), c, c); + b.buildingKdTree = !1; + }, + b.options.kdNow ? 0 : 1, + ); + }, + searchKDTree: function(a, b) { + function c(a, b, g, f) { + var m = b.point, + l = d.kdAxisArray[g % f], + q, + t, + n = m; + t = w(a[e]) && w(m[e]) ? Math.pow(a[e] - m[e], 2) : null; + q = w(a[k]) && w(m[k]) ? Math.pow(a[k] - m[k], 2) : null; + q = (t || 0) + (q || 0); + m.dist = w(q) ? Math.sqrt(q) : Number.MAX_VALUE; + m.distX = w(t) ? Math.sqrt(t) : Number.MAX_VALUE; + l = a[l] - m[l]; + q = 0 > l ? 'left' : 'right'; + t = 0 > l ? 'right' : 'left'; + b[q] && ((q = c(a, b[q], g + 1, f)), (n = q[h] < n[h] ? q : m)); + b[t] && + Math.sqrt(l * l) < n[h] && + ((a = c(a, b[t], g + 1, f)), (n = a[h] < n[h] ? a : n)); + return n; + } + var d = this, + e = this.kdAxisArray[0], + k = this.kdAxisArray[1], + h = b ? 'distX' : 'dist'; + b = -1 < d.options.findNearestPointBy.indexOf('y') ? 2 : 1; + this.kdTree || this.buildingKdTree || this.buildKDTree(); + if (this.kdTree) return c(a, this.kdTree, b, b); + }, + }, + ); + })(M); + (function(a) { + var E = a.Axis, + D = a.Chart, + H = a.correctFloat, + p = a.defined, + f = a.destroyObjectProperties, + l = a.each, + r = a.format, + n = a.objectEach, + w = a.pick, + u = a.Series; + a.StackItem = function(a, h, f, d, c) { + var b = a.chart.inverted; + this.axis = a; + this.isNegative = f; + this.options = h; + this.x = d; + this.total = null; + this.points = {}; + this.stack = c; + this.rightCliff = this.leftCliff = 0; + this.alignOptions = { + align: h.align || (b ? (f ? 'left' : 'right') : 'center'), + verticalAlign: h.verticalAlign || (b ? 'middle' : f ? 'bottom' : 'top'), + y: w(h.y, b ? 4 : f ? 14 : -6), + x: w(h.x, b ? (f ? -6 : 6) : 0), + }; + this.textAlign = h.textAlign || (b ? (f ? 'right' : 'left') : 'center'); + }; + a.StackItem.prototype = { + destroy: function() { + f(this, this.axis); + }, + render: function(a) { + var e = this.options, + f = e.format, + f = f ? r(f, this) : e.formatter.call(this); + this.label + ? this.label.attr({ text: f, visibility: 'hidden' }) + : (this.label = this.axis.chart.renderer + .text(f, null, null, e.useHTML) + .css(e.style) + .attr({ + align: this.textAlign, + rotation: e.rotation, + visibility: 'hidden', + }) + .add(a)); + }, + setOffset: function(a, h) { + var e = this.axis, + d = e.chart, + c = e.translate(e.usePercentage ? 100 : this.total, 0, 0, 0, 1), + e = e.translate(0), + e = Math.abs(c - e); + a = d.xAxis[0].translate(this.x) + a; + c = this.getStackBox(d, this, a, c, h, e); + if ((h = this.label)) + h.align(this.alignOptions, null, c), + (c = h.alignAttr), + h[ + !1 === this.options.crop || d.isInsidePlot(c.x, c.y) + ? 'show' + : 'hide' + ](!0); + }, + getStackBox: function(a, h, f, d, c, b) { + var e = h.axis.reversed, + l = a.inverted; + a = a.plotHeight; + h = (h.isNegative && !e) || (!h.isNegative && e); + return { + x: l ? (h ? d : d - b) : f, + y: l ? a - f - c : h ? a - d - b : a - d, + width: l ? b : c, + height: l ? c : b, + }; + }, + }; + D.prototype.getStacks = function() { + var a = this; + l(a.yAxis, function(a) { + a.stacks && a.hasVisibleSeries && (a.oldStacks = a.stacks); + }); + l(a.series, function(e) { + !e.options.stacking || + (!0 !== e.visible && !1 !== a.options.chart.ignoreHiddenSeries) || + (e.stackKey = e.type + w(e.options.stack, '')); + }); + }; + E.prototype.buildStacks = function() { + var a = this.series, + h = w(this.options.reversedStacks, !0), + f = a.length, + d; + if (!this.isXAxis) { + this.usePercentage = !1; + for (d = f; d--; ) a[h ? d : f - d - 1].setStackedPoints(); + for (d = 0; d < f; d++) a[d].modifyStacks(); + } + }; + E.prototype.renderStackTotals = function() { + var a = this.chart, + h = a.renderer, + f = this.stacks, + d = this.stackTotalGroup; + d || + (this.stackTotalGroup = d = h + .g('stack-labels') + .attr({ visibility: 'visible', zIndex: 6 }) + .add()); + d.translate(a.plotLeft, a.plotTop); + n(f, function(a) { + n(a, function(a) { + a.render(d); + }); + }); + }; + E.prototype.resetStacks = function() { + var a = this, + h = a.stacks; + a.isXAxis || + n(h, function(e) { + n(e, function(d, c) { + d.touched < a.stacksTouched + ? (d.destroy(), delete e[c]) + : ((d.total = null), (d.cumulative = null)); + }); + }); + }; + E.prototype.cleanStacks = function() { + var a; + this.isXAxis || + (this.oldStacks && (a = this.stacks = this.oldStacks), + n(a, function(a) { + n(a, function(a) { + a.cumulative = a.total; + }); + })); + }; + u.prototype.setStackedPoints = function() { + if ( + this.options.stacking && + (!0 === this.visible || + !1 === this.chart.options.chart.ignoreHiddenSeries) + ) { + var e = this.processedXData, + h = this.processedYData, + f = [], + d = h.length, + c = this.options, + b = c.threshold, + k = w(c.startFromThreshold && b, 0), + l = c.stack, + c = c.stacking, + n = this.stackKey, + r = '-' + n, + x = this.negStacks, + u = this.yAxis, + t = u.stacks, + C = u.oldStacks, + N, + q, + A, + F, + G, + g, + v; + u.stacksTouched += 1; + for (G = 0; G < d; G++) + (g = e[G]), + (v = h[G]), + (N = this.getStackIndicator(N, g, this.index)), + (F = N.key), + (A = (q = x && v < (k ? 0 : b)) ? r : n), + t[A] || (t[A] = {}), + t[A][g] || + (C[A] && C[A][g] + ? ((t[A][g] = C[A][g]), (t[A][g].total = null)) + : (t[A][g] = new a.StackItem( + u, + u.options.stackLabels, + q, + g, + l, + ))), + (A = t[A][g]), + null !== v + ? ((A.points[F] = A.points[this.index] = [w(A.cumulative, k)]), + p(A.cumulative) || (A.base = F), + (A.touched = u.stacksTouched), + 0 < N.index && + !1 === this.singleStacks && + (A.points[F][0] = A.points[this.index + ',' + g + ',0'][0])) + : (A.points[F] = A.points[this.index] = null), + 'percent' === c + ? ((q = q ? n : r), + x && t[q] && t[q][g] + ? ((q = t[q][g]), + (A.total = q.total = + Math.max(q.total, A.total) + Math.abs(v) || 0)) + : (A.total = H(A.total + (Math.abs(v) || 0)))) + : (A.total = H(A.total + (v || 0))), + (A.cumulative = w(A.cumulative, k) + (v || 0)), + null !== v && + (A.points[F].push(A.cumulative), (f[G] = A.cumulative)); + 'percent' === c && (u.usePercentage = !0); + this.stackedYData = f; + u.oldStacks = {}; + } + }; + u.prototype.modifyStacks = function() { + var a = this, + h = a.stackKey, + f = a.yAxis.stacks, + d = a.processedXData, + c, + b = a.options.stacking; + a[b + 'Stacker'] && + l([h, '-' + h], function(e) { + for (var k = d.length, h, l; k--; ) + if ( + ((h = d[k]), + (c = a.getStackIndicator(c, h, a.index, e)), + (l = (h = f[e] && f[e][h]) && h.points[c.key])) + ) + a[b + 'Stacker'](l, h, k); + }); + }; + u.prototype.percentStacker = function(a, h, f) { + h = h.total ? 100 / h.total : 0; + a[0] = H(a[0] * h); + a[1] = H(a[1] * h); + this.stackedYData[f] = a[1]; + }; + u.prototype.getStackIndicator = function(a, h, f, d) { + !p(a) || a.x !== h || (d && a.key !== d) + ? (a = { x: h, index: 0, key: d }) + : a.index++; + a.key = [f, h, a.index].join(); + return a; + }; + })(M); + (function(a) { + var E = a.addEvent, + D = a.animate, + H = a.Axis, + p = a.createElement, + f = a.css, + l = a.defined, + r = a.each, + n = a.erase, + w = a.extend, + u = a.fireEvent, + e = a.inArray, + h = a.isNumber, + m = a.isObject, + d = a.isArray, + c = a.merge, + b = a.objectEach, + k = a.pick, + z = a.Point, + B = a.Series, + I = a.seriesTypes, + x = a.setAnimation, + K = a.splat; + w(a.Chart.prototype, { + addSeries: function(a, b, c) { + var d, + e = this; + a && + ((b = k(b, !0)), + u(e, 'addSeries', { options: a }, function() { + d = e.initSeries(a); + e.isDirtyLegend = !0; + e.linkSeries(); + b && e.redraw(c); + })); + return d; + }, + addAxis: function(a, b, d, e) { + var h = b ? 'xAxis' : 'yAxis', + f = this.options; + a = c(a, { index: this[h].length, isX: b }); + b = new H(this, a); + f[h] = K(f[h] || {}); + f[h].push(a); + k(d, !0) && this.redraw(e); + return b; + }, + showLoading: function(a) { + var b = this, + c = b.options, + d = b.loadingDiv, + e = c.loading, + k = function() { + d && + f(d, { + left: b.plotLeft + 'px', + top: b.plotTop + 'px', + width: b.plotWidth + 'px', + height: b.plotHeight + 'px', + }); + }; + d || + ((b.loadingDiv = d = p( + 'div', + { className: 'highcharts-loading highcharts-loading-hidden' }, + null, + b.container, + )), + (b.loadingSpan = p( + 'span', + { className: 'highcharts-loading-inner' }, + null, + d, + )), + E(b, 'redraw', k)); + d.className = 'highcharts-loading'; + b.loadingSpan.innerHTML = a || c.lang.loading; + f(d, w(e.style, { zIndex: 10 })); + f(b.loadingSpan, e.labelStyle); + b.loadingShown || + (f(d, { opacity: 0, display: '' }), + D( + d, + { opacity: e.style.opacity || 0.5 }, + { duration: e.showDuration || 0 }, + )); + b.loadingShown = !0; + k(); + }, + hideLoading: function() { + var a = this.options, + b = this.loadingDiv; + b && + ((b.className = 'highcharts-loading highcharts-loading-hidden'), + D( + b, + { opacity: 0 }, + { + duration: a.loading.hideDuration || 100, + complete: function() { + f(b, { display: 'none' }); + }, + }, + )); + this.loadingShown = !1; + }, + propsRequireDirtyBox: 'backgroundColor borderColor borderWidth margin marginTop marginRight marginBottom marginLeft spacing spacingTop spacingRight spacingBottom spacingLeft borderRadius plotBackgroundColor plotBackgroundImage plotBorderColor plotBorderWidth plotShadow shadow'.split( + ' ', + ), + propsRequireUpdateSeries: 'chart.inverted chart.polar chart.ignoreHiddenSeries chart.type colors plotOptions tooltip'.split( + ' ', + ), + update: function(a, d, f) { + var m = this, + n = { + credits: 'addCredits', + title: 'setTitle', + subtitle: 'setSubtitle', + }, + t = a.chart, + x, + g, + p = []; + if (t) { + c(!0, m.options.chart, t); + 'className' in t && m.setClassName(t.className); + if ('inverted' in t || 'polar' in t) m.propFromSeries(), (x = !0); + 'alignTicks' in t && (x = !0); + b(t, function(a, b) { + -1 !== e('chart.' + b, m.propsRequireUpdateSeries) && (g = !0); + -1 !== e(b, m.propsRequireDirtyBox) && (m.isDirtyBox = !0); + }); + 'style' in t && m.renderer.setStyle(t.style); + } + a.colors && (this.options.colors = a.colors); + a.plotOptions && c(!0, this.options.plotOptions, a.plotOptions); + b(a, function(a, b) { + if (m[b] && 'function' === typeof m[b].update) m[b].update(a, !1); + else if ('function' === typeof m[n[b]]) m[n[b]](a); + 'chart' !== b && -1 !== e(b, m.propsRequireUpdateSeries) && (g = !0); + }); + r('xAxis yAxis zAxis series colorAxis pane'.split(' '), function(b) { + a[b] && + (r(K(a[b]), function(a, c) { + (c = (l(a.id) && m.get(a.id)) || m[b][c]) && + c.coll === b && + (c.update(a, !1), f && (c.touched = !0)); + if (!c && f) + if ('series' === b) m.addSeries(a, !1).touched = !0; + else if ('xAxis' === b || 'yAxis' === b) + m.addAxis(a, 'xAxis' === b, !1).touched = !0; + }), + f && + r(m[b], function(a) { + a.touched ? delete a.touched : p.push(a); + })); + }); + r(p, function(a) { + a.remove(!1); + }); + x && + r(m.axes, function(a) { + a.update({}, !1); + }); + g && + r(m.series, function(a) { + a.update({}, !1); + }); + a.loading && c(!0, m.options.loading, a.loading); + x = t && t.width; + t = t && t.height; + (h(x) && x !== m.chartWidth) || (h(t) && t !== m.chartHeight) + ? m.setSize(x, t) + : k(d, !0) && m.redraw(); + }, + setSubtitle: function(a) { + this.setTitle(void 0, a); + }, + }); + w(z.prototype, { + update: function(a, b, c, d) { + function e() { + h.applyOptions(a); + null === h.y && g && (h.graphic = g.destroy()); + m(a, !0) && + (g && + g.element && + a && + a.marker && + void 0 !== a.marker.symbol && + (h.graphic = g.destroy()), + a && + a.dataLabels && + h.dataLabel && + (h.dataLabel = h.dataLabel.destroy()), + h.connector && (h.connector = h.connector.destroy())); + l = h.index; + f.updateParallelArrays(h, l); + t.data[l] = m(t.data[l], !0) || m(a, !0) ? h.options : a; + f.isDirty = f.isDirtyData = !0; + !f.fixedBox && f.hasCartesianSeries && (n.isDirtyBox = !0); + 'point' === t.legendType && (n.isDirtyLegend = !0); + b && n.redraw(c); + } + var h = this, + f = h.series, + g = h.graphic, + l, + n = f.chart, + t = f.options; + b = k(b, !0); + !1 === d ? e() : h.firePointEvent('update', { options: a }, e); + }, + remove: function(a, b) { + this.series.removePoint(e(this, this.series.data), a, b); + }, + }); + w(B.prototype, { + addPoint: function(a, b, c, d) { + var e = this.options, + h = this.data, + f = this.chart, + g = this.xAxis, + g = g && g.hasNames && g.names, + l = e.data, + m, + n, + t = this.xData, + q, + x; + b = k(b, !0); + m = { series: this }; + this.pointClass.prototype.applyOptions.apply(m, [a]); + x = m.x; + q = t.length; + if (this.requireSorting && x < t[q - 1]) + for (n = !0; q && t[q - 1] > x; ) q--; + this.updateParallelArrays(m, 'splice', q, 0, 0); + this.updateParallelArrays(m, q); + g && m.name && (g[x] = m.name); + l.splice(q, 0, a); + n && (this.data.splice(q, 0, null), this.processData()); + 'point' === e.legendType && this.generatePoints(); + c && + (h[0] && h[0].remove + ? h[0].remove(!1) + : (h.shift(), this.updateParallelArrays(m, 'shift'), l.shift())); + this.isDirtyData = this.isDirty = !0; + b && f.redraw(d); + }, + removePoint: function(a, b, c) { + var d = this, + e = d.data, + h = e[a], + f = d.points, + g = d.chart, + l = function() { + f && f.length === e.length && f.splice(a, 1); + e.splice(a, 1); + d.options.data.splice(a, 1); + d.updateParallelArrays(h || { series: d }, 'splice', a, 1); + h && h.destroy(); + d.isDirty = !0; + d.isDirtyData = !0; + b && g.redraw(); + }; + x(c, g); + b = k(b, !0); + h ? h.firePointEvent('remove', null, l) : l(); + }, + remove: function(a, b, c) { + function d() { + e.destroy(); + h.isDirtyLegend = h.isDirtyBox = !0; + h.linkSeries(); + k(a, !0) && h.redraw(b); + } + var e = this, + h = e.chart; + !1 !== c ? u(e, 'remove', null, d) : d(); + }, + update: function(a, b) { + var d = this, + e = d.chart, + h = d.userOptions, + f = d.oldType || d.type, + l = a.type || h.type || e.options.chart.type, + g = I[f].prototype, + m, + n = ['group', 'markerGroup', 'dataLabelsGroup'], + t = ['navigatorSeries', 'baseSeries'], + x = d.finishedAnimating && { animation: !1 }; + if (Object.keys && 'data' === Object.keys(a).toString()) + return this.setData(a.data, b); + t = n.concat(t); + r(t, function(a) { + t[a] = d[a]; + delete d[a]; + }); + a = c( + h, + x, + { index: d.index, pointStart: d.xData[0] }, + { data: d.options.data }, + a, + ); + d.remove(!1, null, !1); + for (m in g) d[m] = void 0; + w(d, I[l || f].prototype); + r(t, function(a) { + d[a] = t[a]; + }); + d.init(e, a); + a.zIndex !== h.zIndex && + r(n, function(b) { + d[b] && d[b].attr({ zIndex: a.zIndex }); + }); + d.oldType = f; + e.linkSeries(); + k(b, !0) && e.redraw(!1); + }, + }); + w(H.prototype, { + update: function(a, b) { + var d = this.chart; + a = d.options[this.coll][this.options.index] = c(this.userOptions, a); + this.destroy(!0); + this.init(d, w(a, { events: void 0 })); + d.isDirtyBox = !0; + k(b, !0) && d.redraw(); + }, + remove: function(a) { + for ( + var b = this.chart, c = this.coll, e = this.series, h = e.length; + h--; + + ) + e[h] && e[h].remove(!1); + n(b.axes, this); + n(b[c], this); + d(b.options[c]) + ? b.options[c].splice(this.options.index, 1) + : delete b.options[c]; + r(b[c], function(a, b) { + a.options.index = b; + }); + this.destroy(); + b.isDirtyBox = !0; + k(a, !0) && b.redraw(); + }, + setTitle: function(a, b) { + this.update({ title: a }, b); + }, + setCategories: function(a, b) { + this.update({ categories: a }, b); + }, + }); + })(M); + (function(a) { + var E = a.color, + D = a.each, + H = a.map, + p = a.pick, + f = a.Series, + l = a.seriesType; + l( + 'area', + 'line', + { softThreshold: !1, threshold: 0 }, + { + singleStacks: !1, + getStackPoints: function(f) { + var l = [], + r = [], + u = this.xAxis, + e = this.yAxis, + h = e.stacks[this.stackKey], + m = {}, + d = this.index, + c = e.series, + b = c.length, + k, + z = p(e.options.reversedStacks, !0) ? 1 : -1, + B; + f = f || this.points; + if (this.options.stacking) { + for (B = 0; B < f.length; B++) + (f[B].leftNull = f[B].rightNull = null), (m[f[B].x] = f[B]); + a.objectEach(h, function(a, b) { + null !== a.total && r.push(b); + }); + r.sort(function(a, b) { + return a - b; + }); + k = H(c, function() { + return this.visible; + }); + D(r, function(a, c) { + var f = 0, + n, + x; + if (m[a] && !m[a].isNull) + l.push(m[a]), + D([-1, 1], function(e) { + var f = 1 === e ? 'rightNull' : 'leftNull', + l = 0, + t = h[r[c + e]]; + if (t) + for (B = d; 0 <= B && B < b; ) + (n = t.points[B]), + n || + (B === d + ? (m[a][f] = !0) + : k[B] && + (x = h[a].points[B]) && + (l -= x[1] - x[0])), + (B += z); + m[a][1 === e ? 'rightCliff' : 'leftCliff'] = l; + }); + else { + for (B = d; 0 <= B && B < b; ) { + if ((n = h[a].points[B])) { + f = n[1]; + break; + } + B += z; + } + f = e.translate(f, 0, 1, 0, 1); + l.push({ + isNull: !0, + plotX: u.translate(a, 0, 0, 0, 1), + x: a, + plotY: f, + yBottom: f, + }); + } + }); + } + return l; + }, + getGraphPath: function(a) { + var l = f.prototype.getGraphPath, + r = this.options, + u = r.stacking, + e = this.yAxis, + h, + m, + d = [], + c = [], + b = this.index, + k, + z = e.stacks[this.stackKey], + B = r.threshold, + I = e.getThreshold(r.threshold), + x, + r = r.connectNulls || 'percent' === u, + K = function(h, f, l) { + var m = a[h]; + h = u && z[m.x].points[b]; + var n = m[l + 'Null'] || 0; + l = m[l + 'Cliff'] || 0; + var x, + t, + m = !0; + l || n + ? ((x = (n ? h[0] : h[1]) + l), (t = h[0] + l), (m = !!n)) + : !u && a[f] && a[f].isNull && (x = t = B); + void 0 !== x && + (c.push({ + plotX: k, + plotY: null === x ? I : e.getThreshold(x), + isNull: m, + isCliff: !0, + }), + d.push({ + plotX: k, + plotY: null === t ? I : e.getThreshold(t), + doCurve: !1, + })); + }; + a = a || this.points; + u && (a = this.getStackPoints(a)); + for (h = 0; h < a.length; h++) + if ( + ((m = a[h].isNull), + (k = p(a[h].rectPlotX, a[h].plotX)), + (x = p(a[h].yBottom, I)), + !m || r) + ) + r || K(h, h - 1, 'left'), + (m && !u && r) || + (c.push(a[h]), d.push({ x: h, plotX: k, plotY: x })), + r || K(h, h + 1, 'right'); + h = l.call(this, c, !0, !0); + d.reversed = !0; + m = l.call(this, d, !0, !0); + m.length && (m[0] = 'L'); + m = h.concat(m); + l = l.call(this, c, !1, r); + m.xMap = h.xMap; + this.areaPath = m; + return l; + }, + drawGraph: function() { + this.areaPath = []; + f.prototype.drawGraph.apply(this); + var a = this, + l = this.areaPath, + w = this.options, + u = [['area', 'highcharts-area', this.color, w.fillColor]]; + D(this.zones, function(e, h) { + u.push([ + 'zone-area-' + h, + 'highcharts-area highcharts-zone-area-' + h + ' ' + e.className, + e.color || a.color, + e.fillColor || w.fillColor, + ]); + }); + D(u, function(e) { + var h = e[0], + f = a[h]; + f + ? ((f.endX = a.preventGraphAnimation ? null : l.xMap), + f.animate({ d: l })) + : ((f = a[h] = a.chart.renderer + .path(l) + .addClass(e[1]) + .attr({ + fill: p( + e[3], + E(e[2]) + .setOpacity(p(w.fillOpacity, 0.75)) + .get(), + ), + zIndex: 0, + }) + .add(a.group)), + (f.isArea = !0)); + f.startX = l.xMap; + f.shiftUnit = w.step ? 2 : 1; + }); + }, + drawLegendSymbol: a.LegendSymbolMixin.drawRectangle, + }, + ); + })(M); + (function(a) { + var E = a.pick; + a = a.seriesType; + a( + 'spline', + 'line', + {}, + { + getPointSpline: function(a, H, p) { + var f = H.plotX, + l = H.plotY, + r = a[p - 1]; + p = a[p + 1]; + var n, w, u, e; + if ( + r && + !r.isNull && + !1 !== r.doCurve && + !H.isCliff && + p && + !p.isNull && + !1 !== p.doCurve && + !H.isCliff + ) { + a = r.plotY; + u = p.plotX; + p = p.plotY; + var h = 0; + n = (1.5 * f + r.plotX) / 2.5; + w = (1.5 * l + a) / 2.5; + u = (1.5 * f + u) / 2.5; + e = (1.5 * l + p) / 2.5; + u !== n && (h = ((e - w) * (u - f)) / (u - n) + l - e); + w += h; + e += h; + w > a && w > l + ? ((w = Math.max(a, l)), (e = 2 * l - w)) + : w < a && w < l && ((w = Math.min(a, l)), (e = 2 * l - w)); + e > p && e > l + ? ((e = Math.max(p, l)), (w = 2 * l - e)) + : e < p && e < l && ((e = Math.min(p, l)), (w = 2 * l - e)); + H.rightContX = u; + H.rightContY = e; + } + H = [ + 'C', + E(r.rightContX, r.plotX), + E(r.rightContY, r.plotY), + E(n, f), + E(w, l), + f, + l, + ]; + r.rightContX = r.rightContY = null; + return H; + }, + }, + ); + })(M); + (function(a) { + var E = a.seriesTypes.area.prototype, + D = a.seriesType; + D('areaspline', 'spline', a.defaultPlotOptions.area, { + getStackPoints: E.getStackPoints, + getGraphPath: E.getGraphPath, + drawGraph: E.drawGraph, + drawLegendSymbol: a.LegendSymbolMixin.drawRectangle, + }); + })(M); + (function(a) { + var E = a.animObject, + D = a.color, + H = a.each, + p = a.extend, + f = a.isNumber, + l = a.merge, + r = a.pick, + n = a.Series, + w = a.seriesType, + u = a.svg; + w( + 'column', + 'line', + { + borderRadius: 0, + crisp: !0, + groupPadding: 0.2, + marker: null, + pointPadding: 0.1, + minPointLength: 0, + cropThreshold: 50, + pointRange: null, + states: { + hover: { halo: !1, brightness: 0.1 }, + select: { color: '#cccccc', borderColor: '#000000' }, + }, + dataLabels: { align: null, verticalAlign: null, y: null }, + softThreshold: !1, + startFromThreshold: !0, + stickyTracking: !1, + tooltip: { distance: 6 }, + threshold: 0, + borderColor: '#ffffff', + }, + { + cropShoulder: 0, + directTouch: !0, + trackerGroups: ['group', 'dataLabelsGroup'], + negStacks: !0, + init: function() { + n.prototype.init.apply(this, arguments); + var a = this, + h = a.chart; + h.hasRendered && + H(h.series, function(e) { + e.type === a.type && (e.isDirty = !0); + }); + }, + getColumnMetrics: function() { + var a = this, + h = a.options, + f = a.xAxis, + d = a.yAxis, + c = f.reversed, + b, + k = {}, + l = 0; + !1 === h.grouping + ? (l = 1) + : H(a.chart.series, function(c) { + var e = c.options, + h = c.yAxis, + f; + c.type !== a.type || + (!c.visible && a.chart.options.chart.ignoreHiddenSeries) || + d.len !== h.len || + d.pos !== h.pos || + (e.stacking + ? ((b = c.stackKey), + void 0 === k[b] && (k[b] = l++), + (f = k[b])) + : !1 !== e.grouping && (f = l++), + (c.columnIndex = f)); + }); + var n = Math.min( + Math.abs(f.transA) * + (f.ordinalSlope || + h.pointRange || + f.closestPointRange || + f.tickInterval || + 1), + f.len, + ), + p = n * h.groupPadding, + x = (n - 2 * p) / (l || 1), + h = Math.min( + h.maxPointWidth || f.len, + r(h.pointWidth, x * (1 - 2 * h.pointPadding)), + ); + a.columnMetrics = { + width: h, + offset: + (x - h) / 2 + + (p + ((a.columnIndex || 0) + (c ? 1 : 0)) * x - n / 2) * + (c ? -1 : 1), + }; + return a.columnMetrics; + }, + crispCol: function(a, h, f, d) { + var c = this.chart, + b = this.borderWidth, + e = -(b % 2 ? 0.5 : 0), + b = b % 2 ? 0.5 : 1; + c.inverted && c.renderer.isVML && (b += 1); + this.options.crisp && + ((f = Math.round(a + f) + e), (a = Math.round(a) + e), (f -= a)); + d = Math.round(h + d) + b; + e = 0.5 >= Math.abs(h) && 0.5 < d; + h = Math.round(h) + b; + d -= h; + e && d && (--h, (d += 1)); + return { x: a, y: h, width: f, height: d }; + }, + translate: function() { + var a = this, + h = a.chart, + f = a.options, + d = (a.dense = 2 > a.closestPointRange * a.xAxis.transA), + d = (a.borderWidth = r(f.borderWidth, d ? 0 : 1)), + c = a.yAxis, + b = f.threshold, + k = (a.translatedThreshold = c.getThreshold(b)), + l = r(f.minPointLength, 5), + p = a.getColumnMetrics(), + u = p.width, + x = (a.barW = Math.max(u, 1 + 2 * d)), + w = (a.pointXOffset = p.offset); + h.inverted && (k -= 0.5); + f.pointPadding && (x = Math.ceil(x)); + n.prototype.translate.apply(a); + H(a.points, function(d) { + var e = r(d.yBottom, k), + f = 999 + Math.abs(e), + f = Math.min(Math.max(-f, d.plotY), c.len + f), + m = d.plotX + w, + n = x, + t = Math.min(f, e), + p, + g = Math.max(f, e) - t; + l && + Math.abs(g) < l && + ((g = l), + (p = (!c.reversed && !d.negative) || (c.reversed && d.negative)), + d.y === b && a.dataMax <= b && c.min < b && (p = !p), + (t = Math.abs(t - k) > l ? e - l : k - (p ? l : 0))); + d.barX = m; + d.pointWidth = u; + d.tooltipPos = h.inverted + ? [c.len + c.pos - h.plotLeft - f, a.xAxis.len - m - n / 2, g] + : [m + n / 2, f + c.pos - h.plotTop, g]; + d.shapeType = 'rect'; + d.shapeArgs = a.crispCol.apply( + a, + d.isNull ? [m, k, n, 0] : [m, t, n, g], + ); + }); + }, + getSymbol: a.noop, + drawLegendSymbol: a.LegendSymbolMixin.drawRectangle, + drawGraph: function() { + this.group[this.dense ? 'addClass' : 'removeClass']( + 'highcharts-dense-data', + ); + }, + pointAttribs: function(a, f) { + var e = this.options, + d, + c = this.pointAttrToOptions || {}; + d = c.stroke || 'borderColor'; + var b = c['stroke-width'] || 'borderWidth', + k = (a && a.color) || this.color, + h = (a && a[d]) || e[d] || this.color || k, + n = (a && a[b]) || e[b] || this[b] || 0, + c = e.dashStyle; + a && + this.zones.length && + ((k = a.getZone()), + (k = a.options.color || (k && k.color) || this.color)); + f && + ((a = l( + e.states[f], + (a.options.states && a.options.states[f]) || {}, + )), + (f = a.brightness), + (k = + a.color || + (void 0 !== f && + D(k) + .brighten(a.brightness) + .get()) || + k), + (h = a[d] || h), + (n = a[b] || n), + (c = a.dashStyle || c)); + d = { fill: k, stroke: h, 'stroke-width': n }; + c && (d.dashstyle = c); + return d; + }, + drawPoints: function() { + var a = this, + h = this.chart, + m = a.options, + d = h.renderer, + c = m.animationLimit || 250, + b; + H(a.points, function(e) { + var k = e.graphic; + if (f(e.plotY) && null !== e.y) { + b = e.shapeArgs; + if (k) k[h.pointCount < c ? 'animate' : 'attr'](l(b)); + else e.graphic = k = d[e.shapeType](b).add(e.group || a.group); + m.borderRadius && k.attr({ r: m.borderRadius }); + k.attr(a.pointAttribs(e, e.selected && 'select')).shadow( + m.shadow, + null, + m.stacking && !m.borderRadius, + ); + k.addClass(e.getClassName(), !0); + } else k && (e.graphic = k.destroy()); + }); + }, + animate: function(a) { + var e = this, + f = this.yAxis, + d = e.options, + c = this.chart.inverted, + b = {}, + k = c ? 'translateX' : 'translateY', + l; + u && + (a + ? ((b.scaleY = 0.001), + (a = Math.min( + f.pos + f.len, + Math.max(f.pos, f.toPixels(d.threshold)), + )), + c ? (b.translateX = a - f.len) : (b.translateY = a), + e.group.attr(b)) + : ((l = e.group.attr(k)), + e.group.animate( + { scaleY: 1 }, + p(E(e.options.animation), { + step: function(a, c) { + b[k] = l + c.pos * (f.pos - l); + e.group.attr(b); + }, + }), + ), + (e.animate = null))); + }, + remove: function() { + var a = this, + f = a.chart; + f.hasRendered && + H(f.series, function(e) { + e.type === a.type && (e.isDirty = !0); + }); + n.prototype.remove.apply(a, arguments); + }, + }, + ); + })(M); + (function(a) { + a = a.seriesType; + a('bar', 'column', null, { inverted: !0 }); + })(M); + (function(a) { + var E = a.Series; + a = a.seriesType; + a( + 'scatter', + 'line', + { + lineWidth: 0, + findNearestPointBy: 'xy', + marker: { enabled: !0 }, + tooltip: { + headerFormat: + '\x3cspan style\x3d"color:{point.color}"\x3e\u25cf\x3c/span\x3e \x3cspan style\x3d"font-size: 0.85em"\x3e {series.name}\x3c/span\x3e\x3cbr/\x3e', + pointFormat: + 'x: \x3cb\x3e{point.x}\x3c/b\x3e\x3cbr/\x3ey: \x3cb\x3e{point.y}\x3c/b\x3e\x3cbr/\x3e', + }, + }, + { + sorted: !1, + requireSorting: !1, + noSharedTooltip: !0, + trackerGroups: ['group', 'markerGroup', 'dataLabelsGroup'], + takeOrdinalPosition: !1, + drawGraph: function() { + this.options.lineWidth && E.prototype.drawGraph.call(this); + }, + }, + ); + })(M); + (function(a) { + var E = a.deg2rad, + D = a.isNumber, + H = a.pick, + p = a.relativeLength; + a.CenteredSeriesMixin = { + getCenter: function() { + var a = this.options, + l = this.chart, + r = 2 * (a.slicedOffset || 0), + n = l.plotWidth - 2 * r, + l = l.plotHeight - 2 * r, + w = a.center, + w = [ + H(w[0], '50%'), + H(w[1], '50%'), + a.size || '100%', + a.innerSize || 0, + ], + u = Math.min(n, l), + e, + h; + for (e = 0; 4 > e; ++e) + (h = w[e]), + (a = 2 > e || (2 === e && /%$/.test(h))), + (w[e] = p(h, [n, l, u, w[2]][e]) + (a ? r : 0)); + w[3] > w[2] && (w[3] = w[2]); + return w; + }, + getStartAndEndRadians: function(a, l) { + a = D(a) ? a : 0; + l = D(l) && l > a && 360 > l - a ? l : a + 360; + return { start: E * (a + -90), end: E * (l + -90) }; + }, + }; + })(M); + (function(a) { + var E = a.addEvent, + D = a.CenteredSeriesMixin, + H = a.defined, + p = a.each, + f = a.extend, + l = D.getStartAndEndRadians, + r = a.inArray, + n = a.noop, + w = a.pick, + u = a.Point, + e = a.Series, + h = a.seriesType, + m = a.setAnimation; + h( + 'pie', + 'line', + { + center: [null, null], + clip: !1, + colorByPoint: !0, + dataLabels: { + distance: 30, + enabled: !0, + formatter: function() { + return this.point.isNull ? void 0 : this.point.name; + }, + x: 0, + }, + ignoreHiddenPoint: !0, + legendType: 'point', + marker: null, + size: null, + showInLegend: !1, + slicedOffset: 10, + stickyTracking: !1, + tooltip: { followPointer: !0 }, + borderColor: '#ffffff', + borderWidth: 1, + states: { hover: { brightness: 0.1, shadow: !1 } }, + }, + { + isCartesian: !1, + requireSorting: !1, + directTouch: !0, + noSharedTooltip: !0, + trackerGroups: ['group', 'dataLabelsGroup'], + axisTypes: [], + pointAttribs: a.seriesTypes.column.prototype.pointAttribs, + animate: function(a) { + var c = this, + b = c.points, + d = c.startAngleRad; + a || + (p(b, function(a) { + var b = a.graphic, + e = a.shapeArgs; + b && + (b.attr({ r: a.startR || c.center[3] / 2, start: d, end: d }), + b.animate( + { r: e.r, start: e.start, end: e.end }, + c.options.animation, + )); + }), + (c.animate = null)); + }, + updateTotals: function() { + var a, + c = 0, + b = this.points, + e = b.length, + f, + h = this.options.ignoreHiddenPoint; + for (a = 0; a < e; a++) + (f = b[a]), (c += h && !f.visible ? 0 : f.isNull ? 0 : f.y); + this.total = c; + for (a = 0; a < e; a++) + (f = b[a]), + (f.percentage = 0 < c && (f.visible || !h) ? (f.y / c) * 100 : 0), + (f.total = c); + }, + generatePoints: function() { + e.prototype.generatePoints.call(this); + this.updateTotals(); + }, + translate: function(a) { + this.generatePoints(); + var c = 0, + b = this.options, + d = b.slicedOffset, + e = d + (b.borderWidth || 0), + f, + h, + m, + n = l(b.startAngle, b.endAngle), + t = (this.startAngleRad = n.start), + n = (this.endAngleRad = n.end) - t, + p = this.points, + u, + q = b.dataLabels.distance, + b = b.ignoreHiddenPoint, + r, + F = p.length, + G; + a || (this.center = a = this.getCenter()); + this.getX = function(b, c, d) { + m = Math.asin( + Math.min((b - a[1]) / (a[2] / 2 + d.labelDistance), 1), + ); + return ( + a[0] + (c ? -1 : 1) * Math.cos(m) * (a[2] / 2 + d.labelDistance) + ); + }; + for (r = 0; r < F; r++) { + G = p[r]; + G.labelDistance = w( + G.options.dataLabels && G.options.dataLabels.distance, + q, + ); + this.maxLabelDistance = Math.max( + this.maxLabelDistance || 0, + G.labelDistance, + ); + f = t + c * n; + if (!b || G.visible) c += G.percentage / 100; + h = t + c * n; + G.shapeType = 'arc'; + G.shapeArgs = { + x: a[0], + y: a[1], + r: a[2] / 2, + innerR: a[3] / 2, + start: Math.round(1e3 * f) / 1e3, + end: Math.round(1e3 * h) / 1e3, + }; + m = (h + f) / 2; + m > 1.5 * Math.PI + ? (m -= 2 * Math.PI) + : m < -Math.PI / 2 && (m += 2 * Math.PI); + G.slicedTranslation = { + translateX: Math.round(Math.cos(m) * d), + translateY: Math.round(Math.sin(m) * d), + }; + h = (Math.cos(m) * a[2]) / 2; + u = (Math.sin(m) * a[2]) / 2; + G.tooltipPos = [a[0] + 0.7 * h, a[1] + 0.7 * u]; + G.half = m < -Math.PI / 2 || m > Math.PI / 2 ? 1 : 0; + G.angle = m; + f = Math.min(e, G.labelDistance / 5); + G.labelPos = [ + a[0] + h + Math.cos(m) * G.labelDistance, + a[1] + u + Math.sin(m) * G.labelDistance, + a[0] + h + Math.cos(m) * f, + a[1] + u + Math.sin(m) * f, + a[0] + h, + a[1] + u, + 0 > G.labelDistance ? 'center' : G.half ? 'right' : 'left', + m, + ]; + } + }, + drawGraph: null, + drawPoints: function() { + var a = this, + c = a.chart.renderer, + b, + e, + h, + l, + m = a.options.shadow; + m && !a.shadowGroup && (a.shadowGroup = c.g('shadow').add(a.group)); + p(a.points, function(d) { + e = d.graphic; + if (d.isNull) e && (d.graphic = e.destroy()); + else { + l = d.shapeArgs; + b = d.getTranslate(); + var k = d.shadowGroup; + m && !k && (k = d.shadowGroup = c.g('shadow').add(a.shadowGroup)); + k && k.attr(b); + h = a.pointAttribs(d, d.selected && 'select'); + e + ? e + .setRadialReference(a.center) + .attr(h) + .animate(f(l, b)) + : ((d.graphic = e = c[d.shapeType](l) + .setRadialReference(a.center) + .attr(b) + .add(a.group)), + d.visible || e.attr({ visibility: 'hidden' }), + e + .attr(h) + .attr({ 'stroke-linejoin': 'round' }) + .shadow(m, k)); + e.addClass(d.getClassName()); + } + }); + }, + searchPoint: n, + sortByAngle: function(a, c) { + a.sort(function(a, d) { + return void 0 !== a.angle && (d.angle - a.angle) * c; + }); + }, + drawLegendSymbol: a.LegendSymbolMixin.drawRectangle, + getCenter: D.getCenter, + getSymbol: n, + }, + { + init: function() { + u.prototype.init.apply(this, arguments); + var a = this, + c; + a.name = w(a.name, 'Slice'); + c = function(b) { + a.slice('select' === b.type); + }; + E(a, 'select', c); + E(a, 'unselect', c); + return a; + }, + isValid: function() { + return a.isNumber(this.y, !0) && 0 <= this.y; + }, + setVisible: function(a, c) { + var b = this, + d = b.series, + e = d.chart, + f = d.options.ignoreHiddenPoint; + c = w(c, f); + a !== b.visible && + ((b.visible = b.options.visible = a = + void 0 === a ? !b.visible : a), + (d.options.data[r(b, d.data)] = b.options), + p(['graphic', 'dataLabel', 'connector', 'shadowGroup'], function( + c, + ) { + if (b[c]) b[c][a ? 'show' : 'hide'](!0); + }), + b.legendItem && e.legend.colorizeItem(b, a), + a || 'hover' !== b.state || b.setState(''), + f && (d.isDirty = !0), + c && e.redraw()); + }, + slice: function(a, c, b) { + var d = this.series; + m(b, d.chart); + w(c, !0); + this.sliced = this.options.sliced = H(a) ? a : !this.sliced; + d.options.data[r(this, d.data)] = this.options; + this.graphic.animate(this.getTranslate()); + this.shadowGroup && this.shadowGroup.animate(this.getTranslate()); + }, + getTranslate: function() { + return this.sliced + ? this.slicedTranslation + : { translateX: 0, translateY: 0 }; + }, + haloPath: function(a) { + var c = this.shapeArgs; + return this.sliced || !this.visible + ? [] + : this.series.chart.renderer.symbols.arc( + c.x, + c.y, + c.r + a, + c.r + a, + { innerR: this.shapeArgs.r - 1, start: c.start, end: c.end }, + ); + }, + }, + ); + })(M); + (function(a) { + var E = a.addEvent, + D = a.arrayMax, + H = a.defined, + p = a.each, + f = a.extend, + l = a.format, + r = a.map, + n = a.merge, + w = a.noop, + u = a.pick, + e = a.relativeLength, + h = a.Series, + m = a.seriesTypes, + d = a.stableSort; + a.distribute = function(a, b) { + function c(a, b) { + return a.target - b.target; + } + var e, + f = !0, + h = a, + l = [], + m; + m = 0; + for (e = a.length; e--; ) m += a[e].size; + if (m > b) { + d(a, function(a, b) { + return (b.rank || 0) - (a.rank || 0); + }); + for (m = e = 0; m <= b; ) (m += a[e].size), e++; + l = a.splice(e - 1, a.length); + } + d(a, c); + for ( + a = r(a, function(a) { + return { size: a.size, targets: [a.target], align: u(a.align, 0.5) }; + }); + f; + + ) { + for (e = a.length; e--; ) + (f = a[e]), + (m = + (Math.min.apply(0, f.targets) + Math.max.apply(0, f.targets)) / + 2), + (f.pos = Math.min(Math.max(0, m - f.size * f.align), b - f.size)); + e = a.length; + for (f = !1; e--; ) + 0 < e && + a[e - 1].pos + a[e - 1].size > a[e].pos && + ((a[e - 1].size += a[e].size), + (a[e - 1].targets = a[e - 1].targets.concat(a[e].targets)), + (a[e - 1].align = 0.5), + a[e - 1].pos + a[e - 1].size > b && + (a[e - 1].pos = b - a[e - 1].size), + a.splice(e, 1), + (f = !0)); + } + e = 0; + p(a, function(a) { + var b = 0; + p(a.targets, function() { + h[e].pos = a.pos + b; + b += h[e].size; + e++; + }); + }); + h.push.apply(h, l); + d(h, c); + }; + h.prototype.drawDataLabels = function() { + function c(a, b) { + var c = b.filter; + return c + ? ((b = c.operator), + (a = a[c.property]), + (c = c.value), + ('\x3e' === b && a > c) || + ('\x3c' === b && a < c) || + ('\x3e\x3d' === b && a >= c) || + ('\x3c\x3d' === b && a <= c) || + ('\x3d\x3d' === b && a == c) || + ('\x3d\x3d\x3d' === b && a === c) + ? !0 + : !1) + : !0; + } + var b = this, + d = b.options, + e = d.dataLabels, + f = b.points, + h, + m, + r = b.hasRendered || 0, + t, + w, + D = u(e.defer, !!d.animation), + q = b.chart.renderer; + if (e.enabled || b._hasPointLabels) + b.dlProcessOptions && b.dlProcessOptions(e), + (w = b.plotGroup( + 'dataLabelsGroup', + 'data-labels', + D && !r ? 'hidden' : 'visible', + e.zIndex || 6, + )), + D && + (w.attr({ opacity: +r }), + r || + E(b, 'afterAnimate', function() { + b.visible && w.show(!0); + w[d.animation ? 'animate' : 'attr']( + { opacity: 1 }, + { duration: 200 }, + ); + })), + (m = e), + p(f, function(f) { + var k, + p = f.dataLabel, + g, + x, + r = f.connector, + z = !p, + C; + h = f.dlOptions || (f.options && f.options.dataLabels); + (k = u(h && h.enabled, m.enabled) && !f.isNull) && + (k = !0 === c(f, h || e)); + k && + ((e = n(m, h)), + (g = f.getLabelConfig()), + (C = e[f.formatPrefix + 'Format'] || e.format), + (t = H(C) + ? l(C, g) + : (e[f.formatPrefix + 'Formatter'] || e.formatter).call(g, e)), + (C = e.style), + (g = e.rotation), + (C.color = u(e.color, C.color, b.color, '#000000')), + 'contrast' === C.color && + ((f.contrastColor = q.getContrast(f.color || b.color)), + (C.color = + e.inside || 0 > u(f.labelDistance, e.distance) || d.stacking + ? f.contrastColor + : '#000000')), + d.cursor && (C.cursor = d.cursor), + (x = { + fill: e.backgroundColor, + stroke: e.borderColor, + 'stroke-width': e.borderWidth, + r: e.borderRadius || 0, + rotation: g, + padding: e.padding, + zIndex: 1, + }), + a.objectEach(x, function(a, b) { + void 0 === a && delete x[b]; + })); + !p || (k && H(t)) + ? k && + H(t) && + (p + ? (x.text = t) + : ((p = f.dataLabel = g + ? q.text(t, 0, -9999).addClass('highcharts-data-label') + : q.label( + t, + 0, + -9999, + e.shape, + null, + null, + e.useHTML, + null, + 'data-label', + )), + p.addClass( + ' highcharts-data-label-color-' + + f.colorIndex + + ' ' + + (e.className || '') + + (e.useHTML ? 'highcharts-tracker' : ''), + )), + p.attr(x), + p.css(C).shadow(e.shadow), + p.added || p.add(w), + b.alignDataLabel(f, p, e, null, z)) + : ((f.dataLabel = p = p.destroy()), + r && (f.connector = r.destroy())); + }); + }; + h.prototype.alignDataLabel = function(a, b, d, e, h) { + var c = this.chart, + k = c.inverted, + l = u(a.dlBox && a.dlBox.centerX, a.plotX, -9999), + m = u(a.plotY, -9999), + n = b.getBBox(), + p, + q = d.rotation, + r = d.align, + w = + this.visible && + (a.series.forceDL || + c.isInsidePlot(l, Math.round(m), k) || + (e && c.isInsidePlot(l, k ? e.x + 1 : e.y + e.height - 1, k))), + z = 'justify' === u(d.overflow, 'justify'); + if ( + w && + ((p = d.style.fontSize), + (p = c.renderer.fontMetrics(p, b).b), + (e = f( + { + x: k ? this.yAxis.len - m : l, + y: Math.round(k ? this.xAxis.len - l : m), + width: 0, + height: 0, + }, + e, + )), + f(d, { width: n.width, height: n.height }), + q + ? ((z = !1), + (l = c.renderer.rotCorr(p, q)), + (l = { + x: e.x + d.x + e.width / 2 + l.x, + y: + e.y + + d.y + + { top: 0, middle: 0.5, bottom: 1 }[d.verticalAlign] * e.height, + }), + b[h ? 'attr' : 'animate'](l).attr({ align: r }), + (m = (q + 720) % 360), + (m = 180 < m && 360 > m), + 'left' === r + ? (l.y -= m ? n.height : 0) + : 'center' === r + ? ((l.x -= n.width / 2), (l.y -= n.height / 2)) + : 'right' === r && ((l.x -= n.width), (l.y -= m ? 0 : n.height))) + : (b.align(d, null, e), (l = b.alignAttr)), + z + ? (a.isLabelJustified = this.justifyDataLabel(b, d, l, n, e, h)) + : u(d.crop, !0) && + (w = + c.isInsidePlot(l.x, l.y) && + c.isInsidePlot(l.x + n.width, l.y + n.height)), + d.shape && !q) + ) + b[h ? 'attr' : 'animate']({ + anchorX: k ? c.plotWidth - a.plotY : a.plotX, + anchorY: k ? c.plotHeight - a.plotX : a.plotY, + }); + w || (b.attr({ y: -9999 }), (b.placed = !1)); + }; + h.prototype.justifyDataLabel = function(a, b, d, e, f, h) { + var c = this.chart, + k = b.align, + l = b.verticalAlign, + m, + n, + p = a.box ? 0 : a.padding || 0; + m = d.x + p; + 0 > m && ('right' === k ? (b.align = 'left') : (b.x = -m), (n = !0)); + m = d.x + e.width - p; + m > c.plotWidth && + ('left' === k ? (b.align = 'right') : (b.x = c.plotWidth - m), + (n = !0)); + m = d.y + p; + 0 > m && + ('bottom' === l ? (b.verticalAlign = 'top') : (b.y = -m), (n = !0)); + m = d.y + e.height - p; + m > c.plotHeight && + ('top' === l ? (b.verticalAlign = 'bottom') : (b.y = c.plotHeight - m), + (n = !0)); + n && ((a.placed = !h), a.align(b, null, f)); + return n; + }; + m.pie && + ((m.pie.prototype.drawDataLabels = function() { + var c = this, + b = c.data, + d, + e = c.chart, + f = c.options.dataLabels, + l = u(f.connectorPadding, 10), + m = u(f.connectorWidth, 1), + n = e.plotWidth, + t = e.plotHeight, + r, + w = c.center, + q = w[2] / 2, + A = w[1], + F, + G, + g, + v, + E = [[], []], + L, + P, + J, + M, + y = [0, 0, 0, 0]; + c.visible && + (f.enabled || c._hasPointLabels) && + (p(b, function(a) { + a.dataLabel && + a.visible && + a.dataLabel.shortened && + (a.dataLabel + .attr({ width: 'auto' }) + .css({ width: 'auto', textOverflow: 'clip' }), + (a.dataLabel.shortened = !1)); + }), + h.prototype.drawDataLabels.apply(c), + p(b, function(a) { + a.dataLabel && + a.visible && + (E[a.half].push(a), (a.dataLabel._pos = null)); + }), + p(E, function(b, h) { + var k, + m, + x = b.length, + r = [], + z; + if (x) + for ( + c.sortByAngle(b, h - 0.5), + 0 < c.maxLabelDistance && + ((k = Math.max(0, A - q - c.maxLabelDistance)), + (m = Math.min(A + q + c.maxLabelDistance, e.plotHeight)), + p(b, function(a) { + 0 < a.labelDistance && + a.dataLabel && + ((a.top = Math.max(0, A - q - a.labelDistance)), + (a.bottom = Math.min( + A + q + a.labelDistance, + e.plotHeight, + )), + (z = a.dataLabel.getBBox().height || 21), + (a.positionsIndex = + r.push({ + target: a.labelPos[1] - a.top + z / 2, + size: z, + rank: a.y, + }) - 1)); + }), + a.distribute(r, m + z - k)), + M = 0; + M < x; + M++ + ) + (d = b[M]), + (m = d.positionsIndex), + (g = d.labelPos), + (F = d.dataLabel), + (J = !1 === d.visible ? 'hidden' : 'inherit'), + (P = k = g[1]), + r && + H(r[m]) && + (void 0 === r[m].pos + ? (J = 'hidden') + : ((v = r[m].size), (P = d.top + r[m].pos))), + delete d.positionIndex, + (L = f.justify + ? w[0] + (h ? -1 : 1) * (q + d.labelDistance) + : c.getX(P < d.top + 2 || P > d.bottom - 2 ? k : P, h, d)), + (F._attr = { visibility: J, align: g[6] }), + (F._pos = { + x: L + f.x + ({ left: l, right: -l }[g[6]] || 0), + y: P + f.y - 10, + }), + (g.x = L), + (g.y = P), + u(f.crop, !0) && + ((G = F.getBBox().width), + (k = null), + L - G < l + ? ((k = Math.round(G - L + l)), + (y[3] = Math.max(k, y[3]))) + : L + G > n - l && + ((k = Math.round(L + G - n + l)), + (y[1] = Math.max(k, y[1]))), + 0 > P - v / 2 + ? (y[0] = Math.max(Math.round(-P + v / 2), y[0])) + : P + v / 2 > t && + (y[2] = Math.max(Math.round(P + v / 2 - t), y[2])), + (F.sideOverflow = k)); + }), + 0 === D(y) || this.verifyDataLabelOverflow(y)) && + (this.placeDataLabels(), + m && + p(this.points, function(a) { + var b; + r = a.connector; + if ( + (F = a.dataLabel) && + F._pos && + a.visible && + 0 < a.labelDistance + ) { + J = F._attr.visibility; + if ((b = !r)) + (a.connector = r = e.renderer + .path() + .addClass( + 'highcharts-data-label-connector highcharts-color-' + + a.colorIndex, + ) + .add(c.dataLabelsGroup)), + r.attr({ + 'stroke-width': m, + stroke: f.connectorColor || a.color || '#666666', + }); + r[b ? 'attr' : 'animate']({ d: c.connectorPath(a.labelPos) }); + r.attr('visibility', J); + } else r && (a.connector = r.destroy()); + })); + }), + (m.pie.prototype.connectorPath = function(a) { + var b = a.x, + c = a.y; + return u(this.options.dataLabels.softConnector, !0) + ? [ + 'M', + b + ('left' === a[6] ? 5 : -5), + c, + 'C', + b, + c, + 2 * a[2] - a[4], + 2 * a[3] - a[5], + a[2], + a[3], + 'L', + a[4], + a[5], + ] + : [ + 'M', + b + ('left' === a[6] ? 5 : -5), + c, + 'L', + a[2], + a[3], + 'L', + a[4], + a[5], + ]; + }), + (m.pie.prototype.placeDataLabels = function() { + p( + this.points, + function(a) { + var b = a.dataLabel; + b && + a.visible && + ((a = b._pos) + ? (b.sideOverflow && + ((b._attr.width = b.getBBox().width - b.sideOverflow), + b.css({ + width: b._attr.width + 'px', + textOverflow: 'ellipsis', + }), + (b.shortened = !0)), + b.attr(b._attr), + b[b.moved ? 'animate' : 'attr'](a), + (b.moved = !0)) + : b && b.attr({ y: -9999 })); + }, + this, + ); + }), + (m.pie.prototype.alignDataLabel = w), + (m.pie.prototype.verifyDataLabelOverflow = function(a) { + var b = this.center, + c = this.options, + d = c.center, + f = c.minSize || 80, + h, + l = null !== c.size; + l || + (null !== d[0] + ? (h = Math.max(b[2] - Math.max(a[1], a[3]), f)) + : ((h = Math.max(b[2] - a[1] - a[3], f)), + (b[0] += (a[3] - a[1]) / 2)), + null !== d[1] + ? (h = Math.max(Math.min(h, b[2] - Math.max(a[0], a[2])), f)) + : ((h = Math.max(Math.min(h, b[2] - a[0] - a[2]), f)), + (b[1] += (a[0] - a[2]) / 2)), + h < b[2] + ? ((b[2] = h), + (b[3] = Math.min(e(c.innerSize || 0, h), h)), + this.translate(b), + this.drawDataLabels && this.drawDataLabels()) + : (l = !0)); + return l; + })); + m.column && + (m.column.prototype.alignDataLabel = function(a, b, d, e, f) { + var c = this.chart.inverted, + k = a.series, + l = a.dlBox || a.shapeArgs, + m = u(a.below, a.plotY > u(this.translatedThreshold, k.yAxis.len)), + p = u(d.inside, !!this.options.stacking); + l && + ((e = n(l)), + 0 > e.y && ((e.height += e.y), (e.y = 0)), + (l = e.y + e.height - k.yAxis.len), + 0 < l && (e.height -= l), + c && + (e = { + x: k.yAxis.len - e.y - e.height, + y: k.xAxis.len - e.x - e.width, + width: e.height, + height: e.width, + }), + p || + (c + ? ((e.x += m ? 0 : e.width), (e.width = 0)) + : ((e.y += m ? e.height : 0), (e.height = 0)))); + d.align = u(d.align, !c || p ? 'center' : m ? 'right' : 'left'); + d.verticalAlign = u( + d.verticalAlign, + c || p ? 'middle' : m ? 'top' : 'bottom', + ); + h.prototype.alignDataLabel.call(this, a, b, d, e, f); + a.isLabelJustified && + a.contrastColor && + a.dataLabel.css({ color: a.contrastColor }); + }); + })(M); + (function(a) { + var E = a.Chart, + D = a.each, + H = a.objectEach, + p = a.pick; + a = a.addEvent; + a(E.prototype, 'render', function() { + var a = []; + D(this.labelCollectors || [], function(f) { + a = a.concat(f()); + }); + D(this.yAxis || [], function(f) { + f.options.stackLabels && + !f.options.stackLabels.allowOverlap && + H(f.stacks, function(f) { + H(f, function(f) { + a.push(f.label); + }); + }); + }); + D(this.series || [], function(f) { + var l = f.options.dataLabels, + n = f.dataLabelCollections || ['dataLabel']; + (l.enabled || f._hasPointLabels) && + !l.allowOverlap && + f.visible && + D(n, function(l) { + D(f.points, function(f) { + f[l] && + ((f[l].labelrank = p( + f.labelrank, + f.shapeArgs && f.shapeArgs.height, + )), + a.push(f[l])); + }); + }); + }); + this.hideOverlappingLabels(a); + }); + E.prototype.hideOverlappingLabels = function(a) { + var f = a.length, + p, + n, + w, + u, + e, + h, + m, + d, + c, + b = function(a, b, c, d, e, f, h, l) { + return !(e > a + c || e + h < a || f > b + d || f + l < b); + }; + for (n = 0; n < f; n++) + if ((p = a[n])) + (p.oldOpacity = p.opacity), + (p.newOpacity = 1), + p.width || + ((w = p.getBBox()), (p.width = w.width), (p.height = w.height)); + a.sort(function(a, b) { + return (b.labelrank || 0) - (a.labelrank || 0); + }); + for (n = 0; n < f; n++) + for (w = a[n], p = n + 1; p < f; ++p) + if ( + ((u = a[p]), + w && + u && + w !== u && + w.placed && + u.placed && + 0 !== w.newOpacity && + 0 !== u.newOpacity && + ((e = w.alignAttr), + (h = u.alignAttr), + (m = w.parentGroup), + (d = u.parentGroup), + (c = 2 * (w.box ? 0 : w.padding || 0)), + (e = b( + e.x + m.translateX, + e.y + m.translateY, + w.width - c, + w.height - c, + h.x + d.translateX, + h.y + d.translateY, + u.width - c, + u.height - c, + )))) + ) + (w.labelrank < u.labelrank ? w : u).newOpacity = 0; + D(a, function(a) { + var b, c; + a && + ((c = a.newOpacity), + a.oldOpacity !== c && + a.placed && + (c + ? a.show(!0) + : (b = function() { + a.hide(); + }), + (a.alignAttr.opacity = c), + a[a.isOld ? 'animate' : 'attr'](a.alignAttr, null, b)), + (a.isOld = !0)); + }); + }; + })(M); + (function(a) { + var E = a.addEvent, + D = a.Chart, + H = a.createElement, + p = a.css, + f = a.defaultOptions, + l = a.defaultPlotOptions, + r = a.each, + n = a.extend, + w = a.fireEvent, + u = a.hasTouch, + e = a.inArray, + h = a.isObject, + m = a.Legend, + d = a.merge, + c = a.pick, + b = a.Point, + k = a.Series, + z = a.seriesTypes, + B = a.svg, + I; + I = a.TrackerMixin = { + drawTrackerPoint: function() { + var a = this, + b = a.chart.pointer, + c = function(a) { + var c = b.getPointFromEvent(a); + void 0 !== c && ((b.isDirectTouch = !0), c.onMouseOver(a)); + }; + r(a.points, function(a) { + a.graphic && (a.graphic.element.point = a); + a.dataLabel && + (a.dataLabel.div + ? (a.dataLabel.div.point = a) + : (a.dataLabel.element.point = a)); + }); + a._hasTracking || + (r(a.trackerGroups, function(d) { + if (a[d]) { + a[d] + .addClass('highcharts-tracker') + .on('mouseover', c) + .on('mouseout', function(a) { + b.onTrackerMouseOut(a); + }); + if (u) a[d].on('touchstart', c); + a.options.cursor && a[d].css(p).css({ cursor: a.options.cursor }); + } + }), + (a._hasTracking = !0)); + }, + drawTrackerGraph: function() { + var a = this, + b = a.options, + c = b.trackByArea, + d = [].concat(c ? a.areaPath : a.graphPath), + e = d.length, + f = a.chart, + h = f.pointer, + k = f.renderer, + l = f.options.tooltip.snap, + g = a.tracker, + m, + n = function() { + if (f.hoverSeries !== a) a.onMouseOver(); + }, + p = 'rgba(192,192,192,' + (B ? 0.0001 : 0.002) + ')'; + if (e && !c) + for (m = e + 1; m--; ) + 'M' === d[m] && d.splice(m + 1, 0, d[m + 1] - l, d[m + 2], 'L'), + ((m && 'M' === d[m]) || m === e) && + d.splice(m, 0, 'L', d[m - 2] + l, d[m - 1]); + g + ? g.attr({ d: d }) + : a.graph && + ((a.tracker = k + .path(d) + .attr({ + 'stroke-linejoin': 'round', + visibility: a.visible ? 'visible' : 'hidden', + stroke: p, + fill: c ? p : 'none', + 'stroke-width': a.graph.strokeWidth() + (c ? 0 : 2 * l), + zIndex: 2, + }) + .add(a.group)), + r([a.tracker, a.markerGroup], function(a) { + a.addClass('highcharts-tracker') + .on('mouseover', n) + .on('mouseout', function(a) { + h.onTrackerMouseOut(a); + }); + b.cursor && a.css({ cursor: b.cursor }); + if (u) a.on('touchstart', n); + })); + }, + }; + z.column && (z.column.prototype.drawTracker = I.drawTrackerPoint); + z.pie && (z.pie.prototype.drawTracker = I.drawTrackerPoint); + z.scatter && (z.scatter.prototype.drawTracker = I.drawTrackerPoint); + n(m.prototype, { + setItemEvents: function(a, c, e) { + var f = this, + h = f.chart.renderer.boxWrapper, + k = + 'highcharts-legend-' + + (a instanceof b ? 'point' : 'series') + + '-active'; + (e ? c : a.legendGroup) + .on('mouseover', function() { + a.setState('hover'); + h.addClass(k); + c.css(f.options.itemHoverStyle); + }) + .on('mouseout', function() { + c.css(d(a.visible ? f.itemStyle : f.itemHiddenStyle)); + h.removeClass(k); + a.setState(); + }) + .on('click', function(b) { + var c = function() { + a.setVisible && a.setVisible(); + }; + h.removeClass(k); + b = { browserEvent: b }; + a.firePointEvent + ? a.firePointEvent('legendItemClick', b, c) + : w(a, 'legendItemClick', b, c); + }); + }, + createCheckboxForItem: function(a) { + a.checkbox = H( + 'input', + { type: 'checkbox', checked: a.selected, defaultChecked: a.selected }, + this.options.itemCheckboxStyle, + this.chart.container, + ); + E(a.checkbox, 'click', function(b) { + w( + a.series || a, + 'checkboxClick', + { checked: b.target.checked, item: a }, + function() { + a.select(); + }, + ); + }); + }, + }); + f.legend.itemStyle.cursor = 'pointer'; + n(D.prototype, { + showResetZoom: function() { + var a = this, + b = f.lang, + c = a.options.chart.resetZoomButton, + d = c.theme, + e = d.states, + h = 'chart' === c.relativeTo ? null : 'plotBox'; + this.resetZoomButton = a.renderer + .button( + b.resetZoom, + null, + null, + function() { + a.zoomOut(); + }, + d, + e && e.hover, + ) + .attr({ align: c.position.align, title: b.resetZoomTitle }) + .addClass('highcharts-reset-zoom') + .add() + .align(c.position, !1, h); + }, + zoomOut: function() { + var a = this; + w(a, 'selection', { resetSelection: !0 }, function() { + a.zoom(); + }); + }, + zoom: function(a) { + var b, + d = this.pointer, + e = !1, + f; + !a || a.resetSelection + ? (r(this.axes, function(a) { + b = a.zoom(); + }), + (d.initiated = !1)) + : r(a.xAxis.concat(a.yAxis), function(a) { + var c = a.axis; + d[c.isXAxis ? 'zoomX' : 'zoomY'] && + ((b = c.zoom(a.min, a.max)), c.displayBtn && (e = !0)); + }); + f = this.resetZoomButton; + e && !f + ? this.showResetZoom() + : !e && h(f) && (this.resetZoomButton = f.destroy()); + b && + this.redraw( + c( + this.options.chart.animation, + a && a.animation, + 100 > this.pointCount, + ), + ); + }, + pan: function(a, b) { + var c = this, + d = c.hoverPoints, + e; + d && + r(d, function(a) { + a.setState(); + }); + r('xy' === b ? [1, 0] : [1], function(b) { + b = c[b ? 'xAxis' : 'yAxis'][0]; + var d = b.horiz, + f = a[d ? 'chartX' : 'chartY'], + d = d ? 'mouseDownX' : 'mouseDownY', + h = c[d], + g = (b.pointRange || 0) / 2, + k = b.getExtremes(), + l = b.toValue(h - f, !0) + g, + m = b.toValue(h + b.len - f, !0) - g, + n = m < l, + h = n ? m : l, + l = n ? l : m, + m = Math.min( + k.dataMin, + g ? k.min : b.toValue(b.toPixels(k.min) - b.minPixelPadding), + ), + g = Math.max( + k.dataMax, + g ? k.max : b.toValue(b.toPixels(k.max) + b.minPixelPadding), + ), + n = m - h; + 0 < n && ((l += n), (h = m)); + n = l - g; + 0 < n && ((l = g), (h -= n)); + b.series.length && + h !== k.min && + l !== k.max && + (b.setExtremes(h, l, !1, !1, { trigger: 'pan' }), (e = !0)); + c[d] = f; + }); + e && c.redraw(!1); + p(c.container, { cursor: 'move' }); + }, + }); + n(b.prototype, { + select: function(a, b) { + var d = this, + f = d.series, + h = f.chart; + a = c(a, !d.selected); + d.firePointEvent( + a ? 'select' : 'unselect', + { accumulate: b }, + function() { + d.selected = d.options.selected = a; + f.options.data[e(d, f.data)] = d.options; + d.setState(a && 'select'); + b || + r(h.getSelectedPoints(), function(a) { + a.selected && + a !== d && + ((a.selected = a.options.selected = !1), + (f.options.data[e(a, f.data)] = a.options), + a.setState(''), + a.firePointEvent('unselect')); + }); + }, + ); + }, + onMouseOver: function(a) { + var b = this.series.chart, + c = b.pointer; + a = a + ? c.normalize(a) + : c.getChartCoordinatesFromPoint(this, b.inverted); + c.runPointActions(a, this); + }, + onMouseOut: function() { + var a = this.series.chart; + this.firePointEvent('mouseOut'); + r(a.hoverPoints || [], function(a) { + a.setState(); + }); + a.hoverPoints = a.hoverPoint = null; + }, + importEvents: function() { + if (!this.hasImportedEvents) { + var b = this, + c = d(b.series.options.point, b.options).events; + b.events = c; + a.objectEach(c, function(a, c) { + E(b, c, a); + }); + this.hasImportedEvents = !0; + } + }, + setState: function(a, b) { + var d = Math.floor(this.plotX), + e = this.plotY, + f = this.series, + h = f.options.states[a] || {}, + k = l[f.type].marker && f.options.marker, + m = k && !1 === k.enabled, + p = (k && k.states && k.states[a]) || {}, + g = !1 === p.enabled, + r = f.stateMarkerGraphic, + u = this.marker || {}, + w = f.chart, + x = f.halo, + z, + B = k && f.markerAttribs; + a = a || ''; + if ( + !( + (a === this.state && !b) || + (this.selected && 'select' !== a) || + !1 === h.enabled || + (a && (g || (m && !1 === p.enabled))) || + (a && u.states && u.states[a] && !1 === u.states[a].enabled) + ) + ) { + B && (z = f.markerAttribs(this, a)); + if (this.graphic) + this.state && + this.graphic.removeClass('highcharts-point-' + this.state), + a && this.graphic.addClass('highcharts-point-' + a), + this.graphic.animate( + f.pointAttribs(this, a), + c(w.options.chart.animation, h.animation), + ), + z && + this.graphic.animate( + z, + c(w.options.chart.animation, p.animation, k.animation), + ), + r && r.hide(); + else { + if (a && p) { + k = u.symbol || f.symbol; + r && r.currentSymbol !== k && (r = r.destroy()); + if (r) r[b ? 'animate' : 'attr']({ x: z.x, y: z.y }); + else + k && + ((f.stateMarkerGraphic = r = w.renderer + .symbol(k, z.x, z.y, z.width, z.height) + .add(f.markerGroup)), + (r.currentSymbol = k)); + r && r.attr(f.pointAttribs(this, a)); + } + r && + (r[a && w.isInsidePlot(d, e, w.inverted) ? 'show' : 'hide'](), + (r.element.point = this)); + } + (d = h.halo) && d.size + ? (x || + (f.halo = x = w.renderer + .path() + .add((this.graphic || r).parentGroup)), + x[b ? 'animate' : 'attr']({ d: this.haloPath(d.size) }), + x.attr({ + class: + 'highcharts-halo highcharts-color-' + + c(this.colorIndex, f.colorIndex), + }), + (x.point = this), + x.attr( + n( + { + fill: this.color || f.color, + 'fill-opacity': d.opacity, + zIndex: -1, + }, + d.attributes, + ), + )) + : x && + x.point && + x.point.haloPath && + x.animate({ d: x.point.haloPath(0) }); + this.state = a; + } + }, + haloPath: function(a) { + return this.series.chart.renderer.symbols.circle( + Math.floor(this.plotX) - a, + this.plotY - a, + 2 * a, + 2 * a, + ); + }, + }); + n(k.prototype, { + onMouseOver: function() { + var a = this.chart, + b = a.hoverSeries; + if (b && b !== this) b.onMouseOut(); + this.options.events.mouseOver && w(this, 'mouseOver'); + this.setState('hover'); + a.hoverSeries = this; + }, + onMouseOut: function() { + var a = this.options, + b = this.chart, + c = b.tooltip, + d = b.hoverPoint; + b.hoverSeries = null; + if (d) d.onMouseOut(); + this && a.events.mouseOut && w(this, 'mouseOut'); + !c || + this.stickyTracking || + (c.shared && !this.noSharedTooltip) || + c.hide(); + this.setState(); + }, + setState: function(a) { + var b = this, + d = b.options, + e = b.graph, + f = d.states, + h = d.lineWidth, + d = 0; + a = a || ''; + if ( + b.state !== a && + (r([b.group, b.markerGroup, b.dataLabelsGroup], function(c) { + c && + (b.state && c.removeClass('highcharts-series-' + b.state), + a && c.addClass('highcharts-series-' + a)); + }), + (b.state = a), + !f[a] || !1 !== f[a].enabled) && + (a && (h = f[a].lineWidth || h + (f[a].lineWidthPlus || 0)), + e && !e.dashstyle) + ) + for ( + h = { 'stroke-width': h }, + e.animate( + h, + c(b.chart.options.chart.animation, f[a] && f[a].animation), + ); + b['zone-graph-' + d]; + + ) + b['zone-graph-' + d].attr(h), (d += 1); + }, + setVisible: function(a, b) { + var c = this, + d = c.chart, + e = c.legendItem, + f, + h = d.options.chart.ignoreHiddenSeries, + k = c.visible; + f = (c.visible = a = c.options.visible = c.userOptions.visible = + void 0 === a ? !k : a) + ? 'show' + : 'hide'; + r( + ['group', 'dataLabelsGroup', 'markerGroup', 'tracker', 'tt'], + function(a) { + if (c[a]) c[a][f](); + }, + ); + if (d.hoverSeries === c || (d.hoverPoint && d.hoverPoint.series) === c) + c.onMouseOut(); + e && d.legend.colorizeItem(c, a); + c.isDirty = !0; + c.options.stacking && + r(d.series, function(a) { + a.options.stacking && a.visible && (a.isDirty = !0); + }); + r(c.linkedSeries, function(b) { + b.setVisible(a, !1); + }); + h && (d.isDirtyBox = !0); + !1 !== b && d.redraw(); + w(c, f); + }, + show: function() { + this.setVisible(!0); + }, + hide: function() { + this.setVisible(!1); + }, + select: function(a) { + this.selected = a = void 0 === a ? !this.selected : a; + this.checkbox && (this.checkbox.checked = a); + w(this, a ? 'select' : 'unselect'); + }, + drawTracker: I.drawTrackerGraph, + }); + })(M); + (function(a) { + var E = a.Chart, + D = a.each, + H = a.inArray, + p = a.isArray, + f = a.isObject, + l = a.pick, + r = a.splat; + E.prototype.setResponsive = function(f) { + var l = this.options.responsive, + n = [], + e = this.currentResponsive; + l && + l.rules && + D( + l.rules, + function(e) { + void 0 === e._id && (e._id = a.uniqueKey()); + this.matchResponsiveRule(e, n, f); + }, + this, + ); + var h = a.merge.apply( + 0, + a.map(n, function(e) { + return a.find(l.rules, function(a) { + return a._id === e; + }).chartOptions; + }), + ), + n = n.toString() || void 0; + n !== (e && e.ruleIds) && + (e && this.update(e.undoOptions, f), + n + ? ((this.currentResponsive = { + ruleIds: n, + mergedOptions: h, + undoOptions: this.currentOptions(h), + }), + this.update(h, f)) + : (this.currentResponsive = void 0)); + }; + E.prototype.matchResponsiveRule = function(a, f) { + var n = a.condition; + ( + n.callback || + function() { + return ( + this.chartWidth <= l(n.maxWidth, Number.MAX_VALUE) && + this.chartHeight <= l(n.maxHeight, Number.MAX_VALUE) && + this.chartWidth >= l(n.minWidth, 0) && + this.chartHeight >= l(n.minHeight, 0) + ); + } + ).call(this) && f.push(a._id); + }; + E.prototype.currentOptions = function(l) { + function n(e, h, l, d) { + var c; + a.objectEach(e, function(a, e) { + if (!d && -1 < H(e, ['series', 'xAxis', 'yAxis'])) + for (a = r(a), l[e] = [], c = 0; c < a.length; c++) + h[e][c] && ((l[e][c] = {}), n(a[c], h[e][c], l[e][c], d + 1)); + else + f(a) + ? ((l[e] = p(a) ? [] : {}), n(a, h[e] || {}, l[e], d + 1)) + : (l[e] = h[e] || null); + }); + } + var u = {}; + n(l, this.options, u, 0); + return u; + }; + })(M); + return M; +}); From e9ead68e9458635101dcdb01d0bec8dc7ddd2af2 Mon Sep 17 00:00:00 2001 From: Brenda Wallace Date: Fri, 4 Jan 2019 18:17:27 +1300 Subject: [PATCH 5/5] Revert "Auto corrected by following Format Javascript Code" This reverts commit 334b33c555e4d53f60c7c4c2be8ec1fa11209f6d. --- app/assets/javascripts/highcharts.js | 11651 +------------------------ 1 file changed, 382 insertions(+), 11269 deletions(-) diff --git a/app/assets/javascripts/highcharts.js b/app/assets/javascripts/highcharts.js index c7136bafe..9554ef58b 100644 --- a/app/assets/javascripts/highcharts.js +++ b/app/assets/javascripts/highcharts.js @@ -5,11272 +5,385 @@ License: www.highcharts.com/license */ -(function(S, M) { - 'object' === typeof module && module.exports - ? (module.exports = S.document ? M(S) : M) - : (S.Highcharts = M(S)); -})('undefined' !== typeof window ? window : this, function(S) { - var M = (function() { - var a = 'undefined' === typeof S ? window : S, - E = a.document, - D = (a.navigator && a.navigator.userAgent) || '', - H = - E && - E.createElementNS && - !!E.createElementNS('http://www.w3.org/2000/svg', 'svg').createSVGRect, - p = /(edge|msie|trident)/i.test(D) && !a.opera, - f = /Firefox/.test(D), - l = f && 4 > parseInt(D.split('Firefox/')[1], 10); - return a.Highcharts - ? a.Highcharts.error(16, !0) - : { - product: 'Highcharts', - version: '6.0.4', - deg2rad: (2 * Math.PI) / 360, - doc: E, - hasBidiBug: l, - hasTouch: E && void 0 !== E.documentElement.ontouchstart, - isMS: p, - isWebKit: /AppleWebKit/.test(D), - isFirefox: f, - isTouchDevice: /(Mobile|Android|Windows Phone)/.test(D), - SVG_NS: 'http://www.w3.org/2000/svg', - chartCount: 0, - seriesTypes: {}, - symbolSizes: {}, - svg: H, - win: a, - marginNames: ['plotTop', 'marginRight', 'marginBottom', 'plotLeft'], - noop: function() {}, - charts: [], - }; - })(); - (function(a) { - a.timers = []; - var E = a.charts, - D = a.doc, - H = a.win; - a.error = function(p, f) { - p = a.isNumber(p) - ? 'Highcharts error #' + p + ': www.highcharts.com/errors/' + p - : p; - if (f) throw Error(p); - H.console && console.log(p); - }; - a.Fx = function(a, f, l) { - this.options = f; - this.elem = a; - this.prop = l; - }; - a.Fx.prototype = { - dSetter: function() { - var a = this.paths[0], - f = this.paths[1], - l = [], - r = this.now, - n = a.length, - w; - if (1 === r) l = this.toD; - else if (n === f.length && 1 > r) - for (; n--; ) - (w = parseFloat(a[n])), - (l[n] = isNaN(w) ? f[n] : r * parseFloat(f[n] - w) + w); - else l = f; - this.elem.attr('d', l, null, !0); - }, - update: function() { - var a = this.elem, - f = this.prop, - l = this.now, - r = this.options.step; - if (this[f + 'Setter']) this[f + 'Setter'](); - else - a.attr - ? a.element && a.attr(f, l, null, !0) - : (a.style[f] = l + this.unit); - r && r.call(a, l, this); - }, - run: function(p, f, l) { - var r = this, - n = r.options, - w = function(a) { - return w.stopped ? !1 : r.step(a); - }, - u = - H.requestAnimationFrame || - function(a) { - setTimeout(a, 13); - }, - e = function() { - for (var h = 0; h < a.timers.length; h++) - a.timers[h]() || a.timers.splice(h--, 1); - a.timers.length && u(e); - }; - p === f - ? (delete n.curAnim[this.prop], - n.complete && - 0 === a.keys(n.curAnim).length && - n.complete.call(this.elem)) - : ((this.startTime = +new Date()), - (this.start = p), - (this.end = f), - (this.unit = l), - (this.now = this.start), - (this.pos = 0), - (w.elem = this.elem), - (w.prop = this.prop), - w() && 1 === a.timers.push(w) && u(e)); - }, - step: function(p) { - var f = +new Date(), - l, - r = this.options, - n = this.elem, - w = r.complete, - u = r.duration, - e = r.curAnim; - n.attr && !n.element - ? (p = !1) - : p || f >= u + this.startTime - ? ((this.now = this.end), - (this.pos = 1), - this.update(), - (l = e[this.prop] = !0), - a.objectEach(e, function(a) { - !0 !== a && (l = !1); - }), - l && w && w.call(n), - (p = !1)) - : ((this.pos = r.easing((f - this.startTime) / u)), - (this.now = this.start + (this.end - this.start) * this.pos), - this.update(), - (p = !0)); - return p; - }, - initPath: function(p, f, l) { - function r(a) { - var b, c; - for (k = a.length; k--; ) - (b = 'M' === a[k] || 'L' === a[k]), - (c = /[a-zA-Z]/.test(a[k + 3])), - b && - c && - a.splice(k + 1, 0, a[k + 1], a[k + 2], a[k + 1], a[k + 2]); - } - function n(a, b) { - for (; a.length < c; ) { - a[0] = b[c - a.length]; - var e = a.slice(0, d); - [].splice.apply(a, [0, 0].concat(e)); - z && - ((e = a.slice(a.length - d)), - [].splice.apply(a, [a.length, 0].concat(e)), - k--); - } - a[0] = 'M'; - } - function w(a, k) { - for (var e = (c - a.length) / d; 0 < e && e--; ) - (b = a.slice().splice(a.length / B - d, d * B)), - (b[0] = k[c - d - e * d]), - m && ((b[d - 6] = b[d - 2]), (b[d - 5] = b[d - 1])), - [].splice.apply(a, [a.length / B, 0].concat(b)), - z && e--; - } - f = f || ''; - var u, - e = p.startX, - h = p.endX, - m = -1 < f.indexOf('C'), - d = m ? 7 : 3, - c, - b, - k; - f = f.split(' '); - l = l.slice(); - var z = p.isArea, - B = z ? 2 : 1, - I; - m && (r(f), r(l)); - if (e && h) { - for (k = 0; k < e.length; k++) - if (e[k] === h[0]) { - u = k; - break; - } else if (e[0] === h[h.length - e.length + k]) { - u = k; - I = !0; - break; - } - void 0 === u && (f = []); - } - f.length && - a.isNumber(u) && - ((c = l.length + u * B * d), - I ? (n(f, l), w(l, f)) : (n(l, f), w(f, l))); - return [f, l]; - }, - }; - a.Fx.prototype.fillSetter = a.Fx.prototype.strokeSetter = function() { - this.elem.attr( - this.prop, - a.color(this.start).tweenTo(a.color(this.end), this.pos), - null, - !0, - ); - }; - a.extend = function(a, f) { - var l; - a || (a = {}); - for (l in f) a[l] = f[l]; - return a; - }; - a.merge = function() { - var p, - f = arguments, - l, - r = {}, - n = function(l, p) { - 'object' !== typeof l && (l = {}); - a.objectEach(p, function(e, h) { - !a.isObject(e, !0) || a.isClass(e) || a.isDOMElement(e) - ? (l[h] = p[h]) - : (l[h] = n(l[h] || {}, e)); - }); - return l; - }; - !0 === f[0] && ((r = f[1]), (f = Array.prototype.slice.call(f, 2))); - l = f.length; - for (p = 0; p < l; p++) r = n(r, f[p]); - return r; - }; - a.pInt = function(a, f) { - return parseInt(a, f || 10); - }; - a.isString = function(a) { - return 'string' === typeof a; - }; - a.isArray = function(a) { - a = Object.prototype.toString.call(a); - return '[object Array]' === a || '[object Array Iterator]' === a; - }; - a.isObject = function(p, f) { - return !!p && 'object' === typeof p && (!f || !a.isArray(p)); - }; - a.isDOMElement = function(p) { - return a.isObject(p) && 'number' === typeof p.nodeType; - }; - a.isClass = function(p) { - var f = p && p.constructor; - return !( - !a.isObject(p, !0) || - a.isDOMElement(p) || - !f || - !f.name || - 'Object' === f.name - ); - }; - a.isNumber = function(a) { - return ( - 'number' === typeof a && !isNaN(a) && Infinity > a && -Infinity < a - ); - }; - a.erase = function(a, f) { - for (var l = a.length; l--; ) - if (a[l] === f) { - a.splice(l, 1); - break; - } - }; - a.defined = function(a) { - return void 0 !== a && null !== a; - }; - a.attr = function(p, f, l) { - var r; - a.isString(f) - ? a.defined(l) - ? p.setAttribute(f, l) - : p && p.getAttribute && (r = p.getAttribute(f)) - : a.defined(f) && - a.isObject(f) && - a.objectEach(f, function(a, l) { - p.setAttribute(l, a); - }); - return r; - }; - a.splat = function(p) { - return a.isArray(p) ? p : [p]; - }; - a.syncTimeout = function(a, f, l) { - if (f) return setTimeout(a, f, l); - a.call(0, l); - }; - a.pick = function() { - var a = arguments, - f, - l, - r = a.length; - for (f = 0; f < r; f++) - if (((l = a[f]), void 0 !== l && null !== l)) return l; - }; - a.css = function(p, f) { - a.isMS && - !a.svg && - f && - void 0 !== f.opacity && - (f.filter = 'alpha(opacity\x3d' + 100 * f.opacity + ')'); - a.extend(p.style, f); - }; - a.createElement = function(p, f, l, r, n) { - p = D.createElement(p); - var w = a.css; - f && a.extend(p, f); - n && w(p, { padding: 0, border: 'none', margin: 0 }); - l && w(p, l); - r && r.appendChild(p); - return p; - }; - a.extendClass = function(p, f) { - var l = function() {}; - l.prototype = new p(); - a.extend(l.prototype, f); - return l; - }; - a.pad = function(a, f, l) { - return Array((f || 2) + 1 - String(a).length).join(l || 0) + a; - }; - a.relativeLength = function(a, f, l) { - return /%$/.test(a) - ? (f * parseFloat(a)) / 100 + (l || 0) - : parseFloat(a); - }; - a.wrap = function(a, f, l) { - var p = a[f]; - a[f] = function() { - var a = Array.prototype.slice.call(arguments), - f = arguments, - u = this; - u.proceed = function() { - p.apply(u, arguments.length ? arguments : f); - }; - a.unshift(p); - a = l.apply(this, a); - u.proceed = null; - return a; - }; - }; - a.getTZOffset = function(p) { - var f = a.Date; - return ( - 6e4 * - ((f.hcGetTimezoneOffset && f.hcGetTimezoneOffset(p)) || - f.hcTimezoneOffset || - 0) - ); - }; - a.dateFormat = function(p, f, l) { - if (!a.defined(f) || isNaN(f)) - return a.defaultOptions.lang.invalidDate || ''; - p = a.pick(p, '%Y-%m-%d %H:%M:%S'); - var r = a.Date, - n = new r(f - a.getTZOffset(f)), - w = n[r.hcGetHours](), - u = n[r.hcGetDay](), - e = n[r.hcGetDate](), - h = n[r.hcGetMonth](), - m = n[r.hcGetFullYear](), - d = a.defaultOptions.lang, - c = d.weekdays, - b = d.shortWeekdays, - k = a.pad, - r = a.extend( - { - a: b ? b[u] : c[u].substr(0, 3), - A: c[u], - d: k(e), - e: k(e, 2, ' '), - w: u, - b: d.shortMonths[h], - B: d.months[h], - m: k(h + 1), - y: m.toString().substr(2, 2), - Y: m, - H: k(w), - k: w, - I: k(w % 12 || 12), - l: w % 12 || 12, - M: k(n[r.hcGetMinutes]()), - p: 12 > w ? 'AM' : 'PM', - P: 12 > w ? 'am' : 'pm', - S: k(n.getSeconds()), - L: k(Math.round(f % 1e3), 3), - }, - a.dateFormats, - ); - a.objectEach(r, function(a, b) { - for (; -1 !== p.indexOf('%' + b); ) - p = p.replace('%' + b, 'function' === typeof a ? a(f) : a); - }); - return l ? p.substr(0, 1).toUpperCase() + p.substr(1) : p; - }; - a.formatSingle = function(p, f) { - var l = /\.([0-9])/, - r = a.defaultOptions.lang; - /f$/.test(p) - ? ((l = (l = p.match(l)) ? l[1] : -1), - null !== f && - (f = a.numberFormat( - f, - l, - r.decimalPoint, - -1 < p.indexOf(',') ? r.thousandsSep : '', - ))) - : (f = a.dateFormat(p, f)); - return f; - }; - a.format = function(p, f) { - for (var l = '{', r = !1, n, w, u, e, h = [], m; p; ) { - l = p.indexOf(l); - if (-1 === l) break; - n = p.slice(0, l); - if (r) { - n = n.split(':'); - w = n.shift().split('.'); - e = w.length; - m = f; - for (u = 0; u < e; u++) m && (m = m[w[u]]); - n.length && (m = a.formatSingle(n.join(':'), m)); - h.push(m); - } else h.push(n); - p = p.slice(l + 1); - l = (r = !r) ? '}' : '{'; - } - h.push(p); - return h.join(''); - }; - a.getMagnitude = function(a) { - return Math.pow(10, Math.floor(Math.log(a) / Math.LN10)); - }; - a.normalizeTickInterval = function(p, f, l, r, n) { - var w, - u = p; - l = a.pick(l, 1); - w = p / l; - f || - ((f = n - ? [1, 1.2, 1.5, 2, 2.5, 3, 4, 5, 6, 8, 10] - : [1, 2, 2.5, 5, 10]), - !1 === r && - (1 === l - ? (f = a.grep(f, function(a) { - return 0 === a % 1; - })) - : 0.1 >= l && (f = [1 / l]))); - for ( - r = 0; - r < f.length && - !((u = f[r]), - (n && u * l >= p) || (!n && w <= (f[r] + (f[r + 1] || f[r])) / 2)); - r++ - ); - return (u = a.correctFloat( - u * l, - -Math.round(Math.log(0.001) / Math.LN10), - )); - }; - a.stableSort = function(a, f) { - var l = a.length, - p, - n; - for (n = 0; n < l; n++) a[n].safeI = n; - a.sort(function(a, n) { - p = f(a, n); - return 0 === p ? a.safeI - n.safeI : p; - }); - for (n = 0; n < l; n++) delete a[n].safeI; - }; - a.arrayMin = function(a) { - for (var f = a.length, l = a[0]; f--; ) a[f] < l && (l = a[f]); - return l; - }; - a.arrayMax = function(a) { - for (var f = a.length, l = a[0]; f--; ) a[f] > l && (l = a[f]); - return l; - }; - a.destroyObjectProperties = function(p, f) { - a.objectEach(p, function(a, r) { - a && a !== f && a.destroy && a.destroy(); - delete p[r]; - }); - }; - a.discardElement = function(p) { - var f = a.garbageBin; - f || (f = a.createElement('div')); - p && f.appendChild(p); - f.innerHTML = ''; - }; - a.correctFloat = function(a, f) { - return parseFloat(a.toPrecision(f || 14)); - }; - a.setAnimation = function(p, f) { - f.renderer.globalAnimation = a.pick(p, f.options.chart.animation, !0); - }; - a.animObject = function(p) { - return a.isObject(p) ? a.merge(p) : { duration: p ? 500 : 0 }; - }; - a.timeUnits = { - millisecond: 1, - second: 1e3, - minute: 6e4, - hour: 36e5, - day: 864e5, - week: 6048e5, - month: 24192e5, - year: 314496e5, - }; - a.numberFormat = function(p, f, l, r) { - p = +p || 0; - f = +f; - var n = a.defaultOptions.lang, - w = (p.toString().split('.')[1] || '').split('e')[0].length, - u, - e, - h = p.toString().split('e'); - -1 === f - ? (f = Math.min(w, 20)) - : a.isNumber(f) - ? f && - h[1] && - 0 > h[1] && - ((u = f + +h[1]), - 0 <= u - ? ((h[0] = (+h[0]).toExponential(u).split('e')[0]), (f = u)) - : ((h[0] = h[0].split('.')[0] || 0), - (p = 20 > f ? (h[0] * Math.pow(10, h[1])).toFixed(f) : 0), - (h[1] = 0))) - : (f = 2); - e = ( - Math.abs(h[1] ? h[0] : p) + Math.pow(10, -Math.max(f, w) - 1) - ).toFixed(f); - w = String(a.pInt(e)); - u = 3 < w.length ? w.length % 3 : 0; - l = a.pick(l, n.decimalPoint); - r = a.pick(r, n.thousandsSep); - p = (0 > p ? '-' : '') + (u ? w.substr(0, u) + r : ''); - p += w.substr(u).replace(/(\d{3})(?=\d)/g, '$1' + r); - f && (p += l + e.slice(-f)); - h[1] && 0 !== +p && (p += 'e' + h[1]); - return p; - }; - Math.easeInOutSine = function(a) { - return -0.5 * (Math.cos(Math.PI * a) - 1); - }; - a.getStyle = function(p, f, l) { - if ('width' === f) - return ( - Math.min(p.offsetWidth, p.scrollWidth) - - a.getStyle(p, 'padding-left') - - a.getStyle(p, 'padding-right') - ); - if ('height' === f) - return ( - Math.min(p.offsetHeight, p.scrollHeight) - - a.getStyle(p, 'padding-top') - - a.getStyle(p, 'padding-bottom') - ); - H.getComputedStyle || a.error(27, !0); - if ((p = H.getComputedStyle(p, void 0))) - (p = p.getPropertyValue(f)), - a.pick(l, 'opacity' !== f) && (p = a.pInt(p)); - return p; - }; - a.inArray = function(p, f) { - return (a.indexOfPolyfill || Array.prototype.indexOf).call(f, p); - }; - a.grep = function(p, f) { - return (a.filterPolyfill || Array.prototype.filter).call(p, f); - }; - a.find = Array.prototype.find - ? function(a, f) { - return a.find(f); - } - : function(a, f) { - var l, - r = a.length; - for (l = 0; l < r; l++) if (f(a[l], l)) return a[l]; - }; - a.map = function(a, f) { - for (var l = [], r = 0, n = a.length; r < n; r++) - l[r] = f.call(a[r], a[r], r, a); - return l; - }; - a.keys = function(p) { - return (a.keysPolyfill || Object.keys).call(void 0, p); - }; - a.reduce = function(p, f, l) { - return (a.reducePolyfill || Array.prototype.reduce).call(p, f, l); - }; - a.offset = function(a) { - var f = D.documentElement; - a = a.parentElement ? a.getBoundingClientRect() : { top: 0, left: 0 }; - return { - top: a.top + (H.pageYOffset || f.scrollTop) - (f.clientTop || 0), - left: a.left + (H.pageXOffset || f.scrollLeft) - (f.clientLeft || 0), - }; - }; - a.stop = function(p, f) { - for (var l = a.timers.length; l--; ) - a.timers[l].elem !== p || - (f && f !== a.timers[l].prop) || - (a.timers[l].stopped = !0); - }; - a.each = function(p, f, l) { - return (a.forEachPolyfill || Array.prototype.forEach).call(p, f, l); - }; - a.objectEach = function(a, f, l) { - for (var r in a) a.hasOwnProperty(r) && f.call(l, a[r], r, a); - }; - a.addEvent = function(p, f, l) { - var r, - n, - w = p.addEventListener || a.addEventListenerPolyfill; - p.hcEvents && - !Object.prototype.hasOwnProperty.call(p, 'hcEvents') && - ((n = {}), - a.objectEach(p.hcEvents, function(a, e) { - n[e] = a.slice(0); - }), - (p.hcEvents = n)); - r = p.hcEvents = p.hcEvents || {}; - w && w.call(p, f, l, !1); - r[f] || (r[f] = []); - r[f].push(l); - return function() { - a.removeEvent(p, f, l); - }; - }; - a.removeEvent = function(p, f, l) { - function r(e, m) { - var d = p.removeEventListener || a.removeEventListenerPolyfill; - d && d.call(p, e, m, !1); - } - function n() { - var e, m; - p.nodeName && - (f ? ((e = {}), (e[f] = !0)) : (e = u), - a.objectEach(e, function(a, c) { - if (u[c]) for (m = u[c].length; m--; ) r(c, u[c][m]); - })); - } - var w, - u = p.hcEvents, - e; - u && - (f - ? ((w = u[f] || []), - l - ? ((e = a.inArray(l, w)), - -1 < e && (w.splice(e, 1), (u[f] = w)), - r(f, l)) - : (n(), (u[f] = []))) - : (n(), (p.hcEvents = {}))); - }; - a.fireEvent = function(p, f, l, r) { - var n; - n = p.hcEvents; - var w, u; - l = l || {}; - if (D.createEvent && (p.dispatchEvent || p.fireEvent)) - (n = D.createEvent('Events')), - n.initEvent(f, !0, !0), - a.extend(n, l), - p.dispatchEvent ? p.dispatchEvent(n) : p.fireEvent(f, n); - else if (n) - for ( - n = n[f] || [], - w = n.length, - l.target || - a.extend(l, { - preventDefault: function() { - l.defaultPrevented = !0; - }, - target: p, - type: f, - }), - f = 0; - f < w; - f++ - ) - (u = n[f]) && !1 === u.call(p, l) && l.preventDefault(); - r && !l.defaultPrevented && r(l); - }; - a.animate = function(p, f, l) { - var r, - n = '', - w, - u, - e; - a.isObject(l) || - ((e = arguments), - (l = { duration: e[2], easing: e[3], complete: e[4] })); - a.isNumber(l.duration) || (l.duration = 400); - l.easing = - 'function' === typeof l.easing - ? l.easing - : Math[l.easing] || Math.easeInOutSine; - l.curAnim = a.merge(f); - a.objectEach(f, function(e, m) { - a.stop(p, m); - u = new a.Fx(p, l, m); - w = null; - 'd' === m - ? ((u.paths = u.initPath(p, p.d, f.d)), - (u.toD = f.d), - (r = 0), - (w = 1)) - : p.attr - ? (r = p.attr(m)) - : ((r = parseFloat(a.getStyle(p, m)) || 0), - 'opacity' !== m && (n = 'px')); - w || (w = e); - w && w.match && w.match('px') && (w = w.replace(/px/g, '')); - u.run(r, w, n); - }); - }; - a.seriesType = function(p, f, l, r, n) { - var w = a.getOptions(), - u = a.seriesTypes; - w.plotOptions[p] = a.merge(w.plotOptions[f], l); - u[p] = a.extendClass(u[f] || function() {}, r); - u[p].prototype.type = p; - n && (u[p].prototype.pointClass = a.extendClass(a.Point, n)); - return u[p]; - }; - a.uniqueKey = (function() { - var a = Math.random() - .toString(36) - .substring(2, 9), - f = 0; - return function() { - return 'highcharts-' + a + '-' + f++; - }; - })(); - H.jQuery && - (H.jQuery.fn.highcharts = function() { - var p = [].slice.call(arguments); - if (this[0]) - return p[0] - ? (new a[a.isString(p[0]) ? p.shift() : 'Chart']( - this[0], - p[0], - p[1], - ), - this) - : E[a.attr(this[0], 'data-highcharts-chart')]; - }); - })(M); - (function(a) { - var E = a.each, - D = a.isNumber, - H = a.map, - p = a.merge, - f = a.pInt; - a.Color = function(l) { - if (!(this instanceof a.Color)) return new a.Color(l); - this.init(l); - }; - a.Color.prototype = { - parsers: [ - { - regex: /rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]?(?:\.[0-9]+)?)\s*\)/, - parse: function(a) { - return [f(a[1]), f(a[2]), f(a[3]), parseFloat(a[4], 10)]; - }, - }, - { - regex: /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/, - parse: function(a) { - return [f(a[1]), f(a[2]), f(a[3]), 1]; - }, - }, - ], - names: { - none: 'rgba(255,255,255,0)', - white: '#ffffff', - black: '#000000', - }, - init: function(l) { - var f, n, w, u; - if ( - (this.input = l = - this.names[l && l.toLowerCase ? l.toLowerCase() : ''] || l) && - l.stops - ) - this.stops = H(l.stops, function(e) { - return new a.Color(e[1]); - }); - else if ( - (l && - l.charAt && - '#' === l.charAt() && - ((f = l.length), - (l = parseInt(l.substr(1), 16)), - 7 === f - ? (n = [(l & 16711680) >> 16, (l & 65280) >> 8, l & 255, 1]) - : 4 === f && - (n = [ - ((l & 3840) >> 4) | ((l & 3840) >> 8), - ((l & 240) >> 4) | (l & 240), - ((l & 15) << 4) | (l & 15), - 1, - ])), - !n) - ) - for (w = this.parsers.length; w-- && !n; ) - (u = this.parsers[w]), (f = u.regex.exec(l)) && (n = u.parse(f)); - this.rgba = n || []; - }, - get: function(a) { - var f = this.input, - n = this.rgba, - l; - this.stops - ? ((l = p(f)), - (l.stops = [].concat(l.stops)), - E(this.stops, function(n, e) { - l.stops[e] = [l.stops[e][0], n.get(a)]; - })) - : (l = - n && D(n[0]) - ? 'rgb' === a || (!a && 1 === n[3]) - ? 'rgb(' + n[0] + ',' + n[1] + ',' + n[2] + ')' - : 'a' === a - ? n[3] - : 'rgba(' + n.join(',') + ')' - : f); - return l; - }, - brighten: function(a) { - var l, - n = this.rgba; - if (this.stops) - E(this.stops, function(n) { - n.brighten(a); - }); - else if (D(a) && 0 !== a) - for (l = 0; 3 > l; l++) - (n[l] += f(255 * a)), - 0 > n[l] && (n[l] = 0), - 255 < n[l] && (n[l] = 255); - return this; - }, - setOpacity: function(a) { - this.rgba[3] = a; - return this; - }, - tweenTo: function(a, f) { - var n = this.rgba, - l = a.rgba; - l.length && n && n.length - ? ((a = 1 !== l[3] || 1 !== n[3]), - (f = - (a ? 'rgba(' : 'rgb(') + - Math.round(l[0] + (n[0] - l[0]) * (1 - f)) + - ',' + - Math.round(l[1] + (n[1] - l[1]) * (1 - f)) + - ',' + - Math.round(l[2] + (n[2] - l[2]) * (1 - f)) + - (a ? ',' + (l[3] + (n[3] - l[3]) * (1 - f)) : '') + - ')')) - : (f = a.input || 'none'); - return f; - }, - }; - a.color = function(l) { - return new a.Color(l); - }; - })(M); - (function(a) { - var E, - D, - H = a.addEvent, - p = a.animate, - f = a.attr, - l = a.charts, - r = a.color, - n = a.css, - w = a.createElement, - u = a.defined, - e = a.deg2rad, - h = a.destroyObjectProperties, - m = a.doc, - d = a.each, - c = a.extend, - b = a.erase, - k = a.grep, - z = a.hasTouch, - B = a.inArray, - I = a.isArray, - x = a.isFirefox, - K = a.isMS, - t = a.isObject, - C = a.isString, - N = a.isWebKit, - q = a.merge, - A = a.noop, - F = a.objectEach, - G = a.pick, - g = a.pInt, - v = a.removeEvent, - Q = a.stop, - L = a.svg, - P = a.SVG_NS, - J = a.symbolSizes, - R = a.win; - E = a.SVGElement = function() { - return this; - }; - c(E.prototype, { - opacity: 1, - SVG_NS: P, - textProps: 'direction fontSize fontWeight fontFamily fontStyle color lineHeight width textAlign textDecoration textOverflow textOutline'.split( - ' ', - ), - init: function(a, g) { - this.element = 'span' === g ? w(g) : m.createElementNS(this.SVG_NS, g); - this.renderer = a; - }, - animate: function(y, g, b) { - g = a.animObject(G(g, this.renderer.globalAnimation, !0)); - 0 !== g.duration - ? (b && (g.complete = b), p(this, y, g)) - : (this.attr(y, null, b), g.step && g.step.call(this)); - return this; - }, - colorGradient: function(y, g, b) { - var v = this.renderer, - c, - O, - k, - e, - z, - h, - m, - L, - A, - J, - t = [], - x; - y.radialGradient - ? (O = 'radialGradient') - : y.linearGradient && (O = 'linearGradient'); - O && - ((k = y[O]), - (z = v.gradients), - (m = y.stops), - (J = b.radialReference), - I(k) && - (y[O] = k = { - x1: k[0], - y1: k[1], - x2: k[2], - y2: k[3], - gradientUnits: 'userSpaceOnUse', - }), - 'radialGradient' === O && - J && - !u(k.gradientUnits) && - ((e = k), - (k = q(k, v.getRadialAttr(J, e), { - gradientUnits: 'userSpaceOnUse', - }))), - F(k, function(a, y) { - 'id' !== y && t.push(y, a); - }), - F(m, function(a) { - t.push(a); - }), - (t = t.join(',')), - z[t] - ? (J = z[t].attr('id')) - : ((k.id = J = a.uniqueKey()), - (z[t] = h = v - .createElement(O) - .attr(k) - .add(v.defs)), - (h.radAttr = e), - (h.stops = []), - d(m, function(y) { - 0 === y[1].indexOf('rgba') - ? ((c = a.color(y[1])), (L = c.get('rgb')), (A = c.get('a'))) - : ((L = y[1]), (A = 1)); - y = v - .createElement('stop') - .attr({ offset: y[0], 'stop-color': L, 'stop-opacity': A }) - .add(h); - h.stops.push(y); - })), - (x = 'url(' + v.url + '#' + J + ')'), - b.setAttribute(g, x), - (b.gradient = t), - (y.toString = function() { - return x; - })); - }, - applyTextOutline: function(y) { - var g = this.element, - v, - c, - k, - q, - e; - -1 !== y.indexOf('contrast') && - (y = y.replace(/contrast/g, this.renderer.getContrast(g.style.fill))); - y = y.split(' '); - c = y[y.length - 1]; - if ((k = y[0]) && 'none' !== k && a.svg) { - this.fakeTS = !0; - y = [].slice.call(g.getElementsByTagName('tspan')); - this.ySetter = this.xSetter; - k = k.replace(/(^[\d\.]+)(.*?)$/g, function(a, y, g) { - return 2 * y + g; - }); - for (e = y.length; e--; ) - (v = y[e]), - 'highcharts-text-outline' === v.getAttribute('class') && - b(y, g.removeChild(v)); - q = g.firstChild; - d(y, function(a, y) { - 0 === y && - (a.setAttribute('x', g.getAttribute('x')), - (y = g.getAttribute('y')), - a.setAttribute('y', y || 0), - null === y && g.setAttribute('y', 0)); - a = a.cloneNode(1); - f(a, { - class: 'highcharts-text-outline', - fill: c, - stroke: c, - 'stroke-width': k, - 'stroke-linejoin': 'round', - }); - g.insertBefore(a, q); - }); - } - }, - attr: function(a, g, b, v) { - var y, - c = this.element, - k, - d = this, - O, - q; - 'string' === typeof a && - void 0 !== g && - ((y = a), (a = {}), (a[y] = g)); - 'string' === typeof a - ? (d = (this[a + 'Getter'] || this._defaultGetter).call(this, a, c)) - : (F( - a, - function(y, g) { - O = !1; - v || Q(this, g); - this.symbolName && - /^(x|y|width|height|r|start|end|innerR|anchorX|anchorY)$/.test( - g, - ) && - (k || (this.symbolAttr(a), (k = !0)), (O = !0)); - !this.rotation || - ('x' !== g && 'y' !== g) || - (this.doTransform = !0); - O || - ((q = this[g + 'Setter'] || this._defaultSetter), - q.call(this, y, g, c), - this.shadows && - /^(width|height|visibility|x|y|d|transform|cx|cy|r)$/.test( - g, - ) && - this.updateShadows(g, y, q)); - }, - this, - ), - this.afterSetters()); - b && b(); - return d; - }, - afterSetters: function() { - this.doTransform && (this.updateTransform(), (this.doTransform = !1)); - }, - updateShadows: function(a, g, b) { - for (var y = this.shadows, v = y.length; v--; ) - b.call( - y[v], - 'height' === a - ? Math.max(g - (y[v].cutHeight || 0), 0) - : 'd' === a - ? this.d - : g, - a, - y[v], - ); - }, - addClass: function(a, g) { - var y = this.attr('class') || ''; - -1 === y.indexOf(a) && - (g || (a = (y + (y ? ' ' : '') + a).replace(' ', ' ')), - this.attr('class', a)); - return this; - }, - hasClass: function(a) { - return -1 !== B(a, (this.attr('class') || '').split(' ')); - }, - removeClass: function(a) { - return this.attr('class', (this.attr('class') || '').replace(a, '')); - }, - symbolAttr: function(a) { - var y = this; - d( - 'x y r start end width height innerR anchorX anchorY'.split(' '), - function(g) { - y[g] = G(a[g], y[g]); - }, - ); - y.attr({ - d: y.renderer.symbols[y.symbolName](y.x, y.y, y.width, y.height, y), - }); - }, - clip: function(a) { - return this.attr( - 'clip-path', - a ? 'url(' + this.renderer.url + '#' + a.id + ')' : 'none', - ); - }, - crisp: function(a, g) { - var y; - g = g || a.strokeWidth || 0; - y = (Math.round(g) % 2) / 2; - a.x = Math.floor(a.x || this.x || 0) + y; - a.y = Math.floor(a.y || this.y || 0) + y; - a.width = Math.floor((a.width || this.width || 0) - 2 * y); - a.height = Math.floor((a.height || this.height || 0) - 2 * y); - u(a.strokeWidth) && (a.strokeWidth = g); - return a; - }, - css: function(a) { - var y = this.styles, - b = {}, - v = this.element, - k, - d = '', - q, - e = !y, - z = ['textOutline', 'textOverflow', 'width']; - a && a.color && (a.fill = a.color); - y && - F(a, function(a, g) { - a !== y[g] && ((b[g] = a), (e = !0)); - }); - e && - (y && (a = c(y, b)), - (k = this.textWidth = - a && - a.width && - 'auto' !== a.width && - 'text' === v.nodeName.toLowerCase() && - g(a.width)), - (this.styles = a), - k && !L && this.renderer.forExport && delete a.width, - K && !L - ? n(this.element, a) - : ((q = function(a, y) { - return '-' + y.toLowerCase(); - }), - F(a, function(a, y) { - -1 === B(y, z) && - (d += y.replace(/([A-Z])/g, q) + ':' + a + ';'); - }), - d && f(v, 'style', d)), - this.added && - ('text' === this.element.nodeName && this.renderer.buildText(this), - a && a.textOutline && this.applyTextOutline(a.textOutline))); - return this; - }, - strokeWidth: function() { - return this['stroke-width'] || 0; - }, - on: function(a, g) { - var y = this, - b = y.element; - z && 'click' === a - ? ((b.ontouchstart = function(a) { - y.touchEventFired = Date.now(); - a.preventDefault(); - g.call(b, a); - }), - (b.onclick = function(a) { - (-1 === R.navigator.userAgent.indexOf('Android') || - 1100 < Date.now() - (y.touchEventFired || 0)) && - g.call(b, a); - })) - : (b['on' + a] = g); - return this; - }, - setRadialReference: function(a) { - var y = this.renderer.gradients[this.element.gradient]; - this.element.radialReference = a; - y && y.radAttr && y.animate(this.renderer.getRadialAttr(a, y.radAttr)); - return this; - }, - translate: function(a, g) { - return this.attr({ translateX: a, translateY: g }); - }, - invert: function(a) { - this.inverted = a; - this.updateTransform(); - return this; - }, - updateTransform: function() { - var a = this.translateX || 0, - g = this.translateY || 0, - b = this.scaleX, - v = this.scaleY, - c = this.inverted, - k = this.rotation, - d = this.matrix, - q = this.element; - c && ((a += this.width), (g += this.height)); - a = ['translate(' + a + ',' + g + ')']; - u(d) && a.push('matrix(' + d.join(',') + ')'); - c - ? a.push('rotate(90) scale(-1,1)') - : k && - a.push( - 'rotate(' + - k + - ' ' + - G(this.rotationOriginX, q.getAttribute('x'), 0) + - ' ' + - G(this.rotationOriginY, q.getAttribute('y') || 0) + - ')', - ); - (u(b) || u(v)) && a.push('scale(' + G(b, 1) + ' ' + G(v, 1) + ')'); - a.length && q.setAttribute('transform', a.join(' ')); - }, - toFront: function() { - var a = this.element; - a.parentNode.appendChild(a); - return this; - }, - align: function(a, g, v) { - var y, - c, - k, - d, - q = {}; - c = this.renderer; - k = c.alignedObjects; - var e, O; - if (a) { - if ( - ((this.alignOptions = a), (this.alignByTranslate = g), !v || C(v)) - ) - (this.alignTo = y = v || 'renderer'), - b(k, this), - k.push(this), - (v = null); - } else - (a = this.alignOptions), - (g = this.alignByTranslate), - (y = this.alignTo); - v = G(v, c[y], c); - y = a.align; - c = a.verticalAlign; - k = (v.x || 0) + (a.x || 0); - d = (v.y || 0) + (a.y || 0); - 'right' === y ? (e = 1) : 'center' === y && (e = 2); - e && (k += (v.width - (a.width || 0)) / e); - q[g ? 'translateX' : 'x'] = Math.round(k); - 'bottom' === c ? (O = 1) : 'middle' === c && (O = 2); - O && (d += (v.height - (a.height || 0)) / O); - q[g ? 'translateY' : 'y'] = Math.round(d); - this[this.placed ? 'animate' : 'attr'](q); - this.placed = !0; - this.alignAttr = q; - return this; - }, - getBBox: function(a, g) { - var y, - b = this.renderer, - v, - k = this.element, - q = this.styles, - O, - z = this.textStr, - h, - m = b.cache, - L = b.cacheKeys, - A; - g = G(g, this.rotation); - v = g * e; - O = q && q.fontSize; - u(z) && - ((A = z.toString()), - -1 === A.indexOf('\x3c') && (A = A.replace(/[0-9]/g, '0')), - (A += ['', g || 0, O, q && q.width, q && q.textOverflow].join())); - A && !a && (y = m[A]); - if (!y) { - if (k.namespaceURI === this.SVG_NS || b.forExport) { - try { - (h = - this.fakeTS && - function(a) { - d(k.querySelectorAll('.highcharts-text-outline'), function( - y, - ) { - y.style.display = a; - }); - }) && h('none'), - (y = k.getBBox - ? c({}, k.getBBox()) - : { width: k.offsetWidth, height: k.offsetHeight }), - h && h(''); - } catch (W) {} - if (!y || 0 > y.width) y = { width: 0, height: 0 }; - } else y = this.htmlGetBBox(); - b.isSVG && - ((a = y.width), - (b = y.height), - q && - '11px' === q.fontSize && - 17 === Math.round(b) && - (y.height = b = 14), - g && - ((y.width = - Math.abs(b * Math.sin(v)) + Math.abs(a * Math.cos(v))), - (y.height = - Math.abs(b * Math.cos(v)) + Math.abs(a * Math.sin(v))))); - if (A && 0 < y.height) { - for (; 250 < L.length; ) delete m[L.shift()]; - m[A] || L.push(A); - m[A] = y; - } - } - return y; - }, - show: function(a) { - return this.attr({ visibility: a ? 'inherit' : 'visible' }); - }, - hide: function() { - return this.attr({ visibility: 'hidden' }); - }, - fadeOut: function(a) { - var y = this; - y.animate( - { opacity: 0 }, - { - duration: a || 150, - complete: function() { - y.attr({ y: -9999 }); - }, - }, - ); - }, - add: function(a) { - var y = this.renderer, - g = this.element, - b; - a && (this.parentGroup = a); - this.parentInverted = a && a.inverted; - void 0 !== this.textStr && y.buildText(this); - this.added = !0; - if (!a || a.handleZ || this.zIndex) b = this.zIndexSetter(); - b || (a ? a.element : y.box).appendChild(g); - if (this.onAdd) this.onAdd(); - return this; - }, - safeRemoveChild: function(a) { - var y = a.parentNode; - y && y.removeChild(a); - }, - destroy: function() { - var a = this, - g = a.element || {}, - v = a.renderer.isSVG && 'SPAN' === g.nodeName && a.parentGroup, - c = g.ownerSVGElement; - g.onclick = g.onmouseout = g.onmouseover = g.onmousemove = g.point = null; - Q(a); - a.clipPath && - c && - (d(c.querySelectorAll('[clip-path],[CLIP-PATH]'), function(g) { - g - .getAttribute('clip-path') - .match(RegExp('[("]#' + a.clipPath.element.id + '[)"]')) && - g.removeAttribute('clip-path'); - }), - (a.clipPath = a.clipPath.destroy())); - if (a.stops) { - for (c = 0; c < a.stops.length; c++) - a.stops[c] = a.stops[c].destroy(); - a.stops = null; - } - a.safeRemoveChild(g); - for (a.destroyShadows(); v && v.div && 0 === v.div.childNodes.length; ) - (g = v.parentGroup), a.safeRemoveChild(v.div), delete v.div, (v = g); - a.alignTo && b(a.renderer.alignedObjects, a); - F(a, function(g, y) { - delete a[y]; - }); - return null; - }, - shadow: function(a, g, b) { - var y = [], - v, - c, - k = this.element, - d, - q, - e, - z; - if (!a) this.destroyShadows(); - else if (!this.shadows) { - q = G(a.width, 3); - e = (a.opacity || 0.15) / q; - z = this.parentInverted - ? '(-1,-1)' - : '(' + G(a.offsetX, 1) + ', ' + G(a.offsetY, 1) + ')'; - for (v = 1; v <= q; v++) - (c = k.cloneNode(0)), - (d = 2 * q + 1 - 2 * v), - f(c, { - isShadow: 'true', - stroke: a.color || '#000000', - 'stroke-opacity': e * v, - 'stroke-width': d, - transform: 'translate' + z, - fill: 'none', - }), - b && - (f(c, 'height', Math.max(f(c, 'height') - d, 0)), - (c.cutHeight = d)), - g - ? g.element.appendChild(c) - : k.parentNode && k.parentNode.insertBefore(c, k), - y.push(c); - this.shadows = y; - } - return this; - }, - destroyShadows: function() { - d( - this.shadows || [], - function(a) { - this.safeRemoveChild(a); - }, - this, - ); - this.shadows = void 0; - }, - xGetter: function(a) { - 'circle' === this.element.nodeName && - ('x' === a ? (a = 'cx') : 'y' === a && (a = 'cy')); - return this._defaultGetter(a); - }, - _defaultGetter: function(a) { - a = G( - this[a + 'Value'], - this[a], - this.element ? this.element.getAttribute(a) : null, - 0, - ); - /^[\-0-9\.]+$/.test(a) && (a = parseFloat(a)); - return a; - }, - dSetter: function(a, g, b) { - a && a.join && (a = a.join(' ')); - /(NaN| {2}|^$)/.test(a) && (a = 'M 0 0'); - this[g] !== a && (b.setAttribute(g, a), (this[g] = a)); - }, - dashstyleSetter: function(a) { - var b, - v = this['stroke-width']; - 'inherit' === v && (v = 1); - if ((a = a && a.toLowerCase())) { - a = a - .replace('shortdashdotdot', '3,1,1,1,1,1,') - .replace('shortdashdot', '3,1,1,1') - .replace('shortdot', '1,1,') - .replace('shortdash', '3,1,') - .replace('longdash', '8,3,') - .replace(/dot/g, '1,3,') - .replace('dash', '4,3,') - .replace(/,$/, '') - .split(','); - for (b = a.length; b--; ) a[b] = g(a[b]) * v; - a = a.join(',').replace(/NaN/g, 'none'); - this.element.setAttribute('stroke-dasharray', a); - } - }, - alignSetter: function(a) { - this.alignValue = a; - this.element.setAttribute( - 'text-anchor', - { left: 'start', center: 'middle', right: 'end' }[a], - ); - }, - opacitySetter: function(a, g, b) { - this[g] = a; - b.setAttribute(g, a); - }, - titleSetter: function(a) { - var g = this.element.getElementsByTagName('title')[0]; - g || - ((g = m.createElementNS(this.SVG_NS, 'title')), - this.element.appendChild(g)); - g.firstChild && g.removeChild(g.firstChild); - g.appendChild( - m.createTextNode(String(G(a), '').replace(/<[^>]*>/g, '')), - ); - }, - textSetter: function(a) { - a !== this.textStr && - (delete this.bBox, - (this.textStr = a), - this.added && this.renderer.buildText(this)); - }, - fillSetter: function(a, g, b) { - 'string' === typeof a - ? b.setAttribute(g, a) - : a && this.colorGradient(a, g, b); - }, - visibilitySetter: function(a, g, b) { - 'inherit' === a - ? b.removeAttribute(g) - : this[g] !== a && b.setAttribute(g, a); - this[g] = a; - }, - zIndexSetter: function(a, b) { - var v = this.renderer, - y = this.parentGroup, - c = (y || v).element || v.box, - k, - d = this.element, - q, - e, - v = c === v.box; - k = this.added; - var z; - u(a) && - ((d.zIndex = a), (a = +a), this[b] === a && (k = !1), (this[b] = a)); - if (k) { - (a = this.zIndex) && y && (y.handleZ = !0); - b = c.childNodes; - for (z = b.length - 1; 0 <= z && !q; z--) - if (((y = b[z]), (k = y.zIndex), (e = !u(k)), y !== d)) - if (0 > a && e && !v && !z) c.insertBefore(d, b[z]), (q = !0); - else if (g(k) <= a || (e && (!u(a) || 0 <= a))) - c.insertBefore(d, b[z + 1] || null), (q = !0); - q || (c.insertBefore(d, b[v ? 3 : 0] || null), (q = !0)); - } - return q; - }, - _defaultSetter: function(a, g, b) { - b.setAttribute(g, a); - }, - }); - E.prototype.yGetter = E.prototype.xGetter; - E.prototype.translateXSetter = E.prototype.translateYSetter = E.prototype.rotationSetter = E.prototype.verticalAlignSetter = E.prototype.rotationOriginXSetter = E.prototype.rotationOriginYSetter = E.prototype.scaleXSetter = E.prototype.scaleYSetter = E.prototype.matrixSetter = function( - a, - g, - ) { - this[g] = a; - this.doTransform = !0; - }; - E.prototype['stroke-widthSetter'] = E.prototype.strokeSetter = function( - a, - g, - b, - ) { - this[g] = a; - this.stroke && this['stroke-width'] - ? (E.prototype.fillSetter.call(this, this.stroke, 'stroke', b), - b.setAttribute('stroke-width', this['stroke-width']), - (this.hasStroke = !0)) - : 'stroke-width' === g && - 0 === a && - this.hasStroke && - (b.removeAttribute('stroke'), (this.hasStroke = !1)); - }; - D = a.SVGRenderer = function() { - this.init.apply(this, arguments); - }; - c(D.prototype, { - Element: E, - SVG_NS: P, - init: function(a, g, b, v, c, k) { - var y; - v = this.createElement('svg') - .attr({ version: '1.1', class: 'highcharts-root' }) - .css(this.getStyle(v)); - y = v.element; - a.appendChild(y); - f(a, 'dir', 'ltr'); - -1 === a.innerHTML.indexOf('xmlns') && f(y, 'xmlns', this.SVG_NS); - this.isSVG = !0; - this.box = y; - this.boxWrapper = v; - this.alignedObjects = []; - this.url = - (x || N) && m.getElementsByTagName('base').length - ? R.location.href - .replace(/#.*?$/, '') - .replace(/<[^>]*>/g, '') - .replace(/([\('\)])/g, '\\$1') - .replace(/ /g, '%20') - : ''; - this.createElement('desc') - .add() - .element.appendChild( - m.createTextNode('Created with Highcharts 6.0.4'), - ); - this.defs = this.createElement('defs').add(); - this.allowHTML = k; - this.forExport = c; - this.gradients = {}; - this.cache = {}; - this.cacheKeys = []; - this.imgCount = 0; - this.setSize(g, b, !1); - var d; - x && - a.getBoundingClientRect && - ((g = function() { - n(a, { left: 0, top: 0 }); - d = a.getBoundingClientRect(); - n(a, { - left: Math.ceil(d.left) - d.left + 'px', - top: Math.ceil(d.top) - d.top + 'px', - }); - }), - g(), - (this.unSubPixelFix = H(R, 'resize', g))); - }, - getStyle: function(a) { - return (this.style = c( - { - fontFamily: - '"Lucida Grande", "Lucida Sans Unicode", Arial, Helvetica, sans-serif', - fontSize: '12px', - }, - a, - )); - }, - setStyle: function(a) { - this.boxWrapper.css(this.getStyle(a)); - }, - isHidden: function() { - return !this.boxWrapper.getBBox().width; - }, - destroy: function() { - var a = this.defs; - this.box = null; - this.boxWrapper = this.boxWrapper.destroy(); - h(this.gradients || {}); - this.gradients = null; - a && (this.defs = a.destroy()); - this.unSubPixelFix && this.unSubPixelFix(); - return (this.alignedObjects = null); - }, - createElement: function(a) { - var g = new this.Element(); - g.init(this, a); - return g; - }, - draw: A, - getRadialAttr: function(a, g) { - return { - cx: a[0] - a[2] / 2 + g.cx * a[2], - cy: a[1] - a[2] / 2 + g.cy * a[2], - r: g.r * a[2], - }; - }, - getSpanWidth: function(a, g) { - var b = a.getBBox(!0).width; - !L && - this.forExport && - (b = this.measureSpanWidth(g.firstChild.data, a.styles)); - return b; - }, - applyEllipsis: function(a, g, b, v) { - var c = a.rotation, - y = b, - k, - d = 0, - q = b.length, - e = function(a) { - g.removeChild(g.firstChild); - a && g.appendChild(m.createTextNode(a)); - }, - z; - a.rotation = 0; - y = this.getSpanWidth(a, g); - if ((z = y > v)) { - for (; d <= q; ) - (k = Math.ceil((d + q) / 2)), - (y = b.substring(0, k) + '\u2026'), - e(y), - (y = this.getSpanWidth(a, g)), - d === q ? (d = q + 1) : y > v ? (q = k - 1) : (d = k); - 0 === q && e(''); - } - a.rotation = c; - return z; - }, - escapes: { - '\x26': '\x26amp;', - '\x3c': '\x26lt;', - '\x3e': '\x26gt;', - "'": '\x26#39;', - '"': '\x26quot;', - }, - buildText: function(a) { - var b = a.element, - v = this, - c = v.forExport, - y = G(a.textStr, '').toString(), - q = -1 !== y.indexOf('\x3c'), - e = b.childNodes, - z, - h, - A, - J, - t = f(b, 'x'), - x = a.styles, - B = a.textWidth, - l = x && x.lineHeight, - C = x && x.textOutline, - u = x && 'ellipsis' === x.textOverflow, - Q = x && 'nowrap' === x.whiteSpace, - w = x && x.fontSize, - R, - I, - r = e.length, - x = B && !a.added && this.box, - p = function(a) { - var c; - c = /(px|em)$/.test(a && a.style.fontSize) - ? a.style.fontSize - : w || v.style.fontSize || 12; - return l - ? g(l) - : v.fontMetrics(c, a.getAttribute('style') ? a : b).h; - }, - K = function(a) { - F(v.escapes, function(g, b) { - a = a.replace(new RegExp(g, 'g'), b); - }); - return a; - }; - R = [y, u, Q, l, C, w, B].join(); - if (R !== a.textCache) { - for (a.textCache = R; r--; ) b.removeChild(e[r]); - q || C || u || B || -1 !== y.indexOf(' ') - ? ((z = /<.*class="([^"]+)".*>/), - (h = /<.*style="([^"]+)".*>/), - (A = /<.*href="([^"]+)".*>/), - x && x.appendChild(b), - (y = q - ? y - .replace( - /<(b|strong)>/g, - '\x3cspan style\x3d"font-weight:bold"\x3e', - ) - .replace( - /<(i|em)>/g, - '\x3cspan style\x3d"font-style:italic"\x3e', - ) - .replace(//g, '\x3c/span\x3e') - .split(//g) - : [y]), - (y = k(y, function(a) { - return '' !== a; - })), - d(y, function(g, y) { - var k, - q = 0; - g = g - .replace(/^\s+|\s+$/g, '') - .replace(//g, '\x3c/span\x3e|||'); - k = g.split('|||'); - d(k, function(g) { - if ('' !== g || 1 === k.length) { - var d = {}, - e = m.createElementNS(v.SVG_NS, 'tspan'), - x, - F; - z.test(g) && ((x = g.match(z)[1]), f(e, 'class', x)); - h.test(g) && - ((F = g - .match(h)[1] - .replace(/(;| |^)color([ :])/, '$1fill$2')), - f(e, 'style', F)); - A.test(g) && - !c && - (f( - e, - 'onclick', - 'location.href\x3d"' + g.match(A)[1] + '"', - ), - f(e, 'class', 'highcharts-anchor'), - n(e, { cursor: 'pointer' })); - g = K(g.replace(/<[a-zA-Z\/](.|\n)*?>/g, '') || ' '); - if (' ' !== g) { - e.appendChild(m.createTextNode(g)); - q ? (d.dx = 0) : y && null !== t && (d.x = t); - f(e, d); - b.appendChild(e); - !q && - I && - (!L && c && n(e, { display: 'block' }), - f(e, 'dy', p(e))); - if (B) { - d = g.replace(/([^\^])-/g, '$1- ').split(' '); - x = 1 < k.length || y || (1 < d.length && !Q); - var O = [], - l, - C = p(e), - G = a.rotation; - for ( - u && (J = v.applyEllipsis(a, e, g, B)); - !u && x && (d.length || O.length); - - ) - (a.rotation = 0), - (l = v.getSpanWidth(a, e)), - (g = l > B), - void 0 === J && (J = g), - g && 1 !== d.length - ? (e.removeChild(e.firstChild), - O.unshift(d.pop())) - : ((d = O), - (O = []), - d.length && - !Q && - ((e = m.createElementNS(P, 'tspan')), - f(e, { dy: C, x: t }), - F && f(e, 'style', F), - b.appendChild(e)), - l > B && (B = l)), - d.length && - e.appendChild( - m.createTextNode( - d.join(' ').replace(/- /g, '-'), - ), - ); - a.rotation = G; - } - q++; - } - } - }); - I = I || b.childNodes.length; - }), - J && a.attr('title', a.textStr), - x && x.removeChild(b), - C && a.applyTextOutline && a.applyTextOutline(C)) - : b.appendChild(m.createTextNode(K(y))); - } - }, - getContrast: function(a) { - a = r(a).rgba; - return 510 < a[0] + a[1] + a[2] ? '#000000' : '#FFFFFF'; - }, - button: function(a, g, b, v, d, k, e, z, h) { - var y = this.label(a, g, b, h, null, null, null, null, 'button'), - m = 0; - y.attr(q({ padding: 8, r: 2 }, d)); - var A, L, J, t; - d = q( - { - fill: '#f7f7f7', - stroke: '#cccccc', - 'stroke-width': 1, - style: { - color: '#333333', - cursor: 'pointer', - fontWeight: 'normal', - }, - }, - d, - ); - A = d.style; - delete d.style; - k = q(d, { fill: '#e6e6e6' }, k); - L = k.style; - delete k.style; - e = q( - d, - { fill: '#e6ebf5', style: { color: '#000000', fontWeight: 'bold' } }, - e, - ); - J = e.style; - delete e.style; - z = q(d, { style: { color: '#cccccc' } }, z); - t = z.style; - delete z.style; - H(y.element, K ? 'mouseover' : 'mouseenter', function() { - 3 !== m && y.setState(1); - }); - H(y.element, K ? 'mouseout' : 'mouseleave', function() { - 3 !== m && y.setState(m); - }); - y.setState = function(a) { - 1 !== a && (y.state = m = a); - y.removeClass( - /highcharts-button-(normal|hover|pressed|disabled)/, - ).addClass( - 'highcharts-button-' + - ['normal', 'hover', 'pressed', 'disabled'][a || 0], - ); - y.attr([d, k, e, z][a || 0]).css([A, L, J, t][a || 0]); - }; - y.attr(d).css(c({ cursor: 'default' }, A)); - return y.on('click', function(a) { - 3 !== m && v.call(y, a); - }); - }, - crispLine: function(a, g) { - a[1] === a[4] && (a[1] = a[4] = Math.round(a[1]) - (g % 2) / 2); - a[2] === a[5] && (a[2] = a[5] = Math.round(a[2]) + (g % 2) / 2); - return a; - }, - path: function(a) { - var g = { fill: 'none' }; - I(a) ? (g.d = a) : t(a) && c(g, a); - return this.createElement('path').attr(g); - }, - circle: function(a, g, b) { - a = t(a) ? a : { x: a, y: g, r: b }; - g = this.createElement('circle'); - g.xSetter = g.ySetter = function(a, g, b) { - b.setAttribute('c' + g, a); - }; - return g.attr(a); - }, - arc: function(a, g, b, v, c, d) { - t(a) - ? ((v = a), (g = v.y), (b = v.r), (a = v.x)) - : (v = { innerR: v, start: c, end: d }); - a = this.symbol('arc', a, g, b, b, v); - a.r = b; - return a; - }, - rect: function(a, g, b, v, c, d) { - c = t(a) ? a.r : c; - var k = this.createElement('rect'); - a = t(a) - ? a - : void 0 === a - ? {} - : { x: a, y: g, width: Math.max(b, 0), height: Math.max(v, 0) }; - void 0 !== d && ((a.strokeWidth = d), (a = k.crisp(a))); - a.fill = 'none'; - c && (a.r = c); - k.rSetter = function(a, g, b) { - f(b, { rx: a, ry: a }); - }; - return k.attr(a); - }, - setSize: function(a, g, b) { - var v = this.alignedObjects, - c = v.length; - this.width = a; - this.height = g; - for ( - this.boxWrapper.animate( - { width: a, height: g }, - { - step: function() { - this.attr({ - viewBox: - '0 0 ' + this.attr('width') + ' ' + this.attr('height'), - }); - }, - duration: G(b, !0) ? void 0 : 0, - }, - ); - c--; - - ) - v[c].align(); - }, - g: function(a) { - var g = this.createElement('g'); - return a ? g.attr({ class: 'highcharts-' + a }) : g; - }, - image: function(a, g, b, v, d) { - var k = { preserveAspectRatio: 'none' }; - 1 < arguments.length && c(k, { x: g, y: b, width: v, height: d }); - k = this.createElement('image').attr(k); - k.element.setAttributeNS - ? k.element.setAttributeNS('http://www.w3.org/1999/xlink', 'href', a) - : k.element.setAttribute('hc-svg-href', a); - return k; - }, - symbol: function(a, g, b, v, k, q) { - var e = this, - y, - z = /^url\((.*?)\)$/, - h = z.test(a), - A = !h && (this.symbols[a] ? a : 'circle'), - L = A && this.symbols[A], - t = - u(g) && - L && - L.call(this.symbols, Math.round(g), Math.round(b), v, k, q), - x, - F; - L - ? ((y = this.path(t)), - y.attr('fill', 'none'), - c(y, { symbolName: A, x: g, y: b, width: v, height: k }), - q && c(y, q)) - : h && - ((x = a.match(z)[1]), - (y = this.image(x)), - (y.imgwidth = G(J[x] && J[x].width, q && q.width)), - (y.imgheight = G(J[x] && J[x].height, q && q.height)), - (F = function() { - y.attr({ width: y.width, height: y.height }); - }), - d(['width', 'height'], function(a) { - y[a + 'Setter'] = function(a, g) { - var b = {}, - v = this['img' + g], - c = 'width' === g ? 'translateX' : 'translateY'; - this[g] = a; - u(v) && - (this.element && this.element.setAttribute(g, v), - this.alignByTranslate || - ((b[c] = ((this[g] || 0) - v) / 2), this.attr(b))); - }; - }), - u(g) && y.attr({ x: g, y: b }), - (y.isImg = !0), - u(y.imgwidth) && u(y.imgheight) - ? F() - : (y.attr({ width: 0, height: 0 }), - w('img', { - onload: function() { - var a = l[e.chartIndex]; - 0 === this.width && - (n(this, { position: 'absolute', top: '-999em' }), - m.body.appendChild(this)); - J[x] = { width: this.width, height: this.height }; - y.imgwidth = this.width; - y.imgheight = this.height; - y.element && F(); - this.parentNode && this.parentNode.removeChild(this); - e.imgCount--; - if (!e.imgCount && a && a.onload) a.onload(); - }, - src: x, - }), - this.imgCount++)); - return y; - }, - symbols: { - circle: function(a, g, b, v) { - return this.arc(a + b / 2, g + v / 2, b / 2, v / 2, { - start: 0, - end: 2 * Math.PI, - open: !1, - }); - }, - square: function(a, g, b, v) { - return ['M', a, g, 'L', a + b, g, a + b, g + v, a, g + v, 'Z']; - }, - triangle: function(a, g, b, v) { - return ['M', a + b / 2, g, 'L', a + b, g + v, a, g + v, 'Z']; - }, - 'triangle-down': function(a, g, b, v) { - return ['M', a, g, 'L', a + b, g, a + b / 2, g + v, 'Z']; - }, - diamond: function(a, g, b, v) { - return [ - 'M', - a + b / 2, - g, - 'L', - a + b, - g + v / 2, - a + b / 2, - g + v, - a, - g + v / 2, - 'Z', - ]; - }, - arc: function(a, g, b, v, c) { - var k = c.start, - d = c.r || b, - q = c.r || v || b, - e = c.end - 0.001; - b = c.innerR; - v = G(c.open, 0.001 > Math.abs(c.end - c.start - 2 * Math.PI)); - var y = Math.cos(k), - z = Math.sin(k), - h = Math.cos(e), - e = Math.sin(e); - c = 0.001 > c.end - k - Math.PI ? 0 : 1; - d = [ - 'M', - a + d * y, - g + q * z, - 'A', - d, - q, - 0, - c, - 1, - a + d * h, - g + q * e, - ]; - u(b) && - d.push( - v ? 'M' : 'L', - a + b * h, - g + b * e, - 'A', - b, - b, - 0, - c, - 0, - a + b * y, - g + b * z, - ); - d.push(v ? '' : 'Z'); - return d; - }, - callout: function(a, g, b, v, c) { - var d = Math.min((c && c.r) || 0, b, v), - k = d + 6, - q = c && c.anchorX; - c = c && c.anchorY; - var e; - e = [ - 'M', - a + d, - g, - 'L', - a + b - d, - g, - 'C', - a + b, - g, - a + b, - g, - a + b, - g + d, - 'L', - a + b, - g + v - d, - 'C', - a + b, - g + v, - a + b, - g + v, - a + b - d, - g + v, - 'L', - a + d, - g + v, - 'C', - a, - g + v, - a, - g + v, - a, - g + v - d, - 'L', - a, - g + d, - 'C', - a, - g, - a, - g, - a + d, - g, - ]; - q && q > b - ? c > g + k && c < g + v - k - ? e.splice( - 13, - 3, - 'L', - a + b, - c - 6, - a + b + 6, - c, - a + b, - c + 6, - a + b, - g + v - d, - ) - : e.splice( - 13, - 3, - 'L', - a + b, - v / 2, - q, - c, - a + b, - v / 2, - a + b, - g + v - d, - ) - : q && 0 > q - ? c > g + k && c < g + v - k - ? e.splice(33, 3, 'L', a, c + 6, a - 6, c, a, c - 6, a, g + d) - : e.splice(33, 3, 'L', a, v / 2, q, c, a, v / 2, a, g + d) - : c && c > v && q > a + k && q < a + b - k - ? e.splice( - 23, - 3, - 'L', - q + 6, - g + v, - q, - g + v + 6, - q - 6, - g + v, - a + d, - g + v, - ) - : c && - 0 > c && - q > a + k && - q < a + b - k && - e.splice(3, 3, 'L', q - 6, g, q, g - 6, q + 6, g, b - d, g); - return e; - }, - }, - clipRect: function(g, b, v, c) { - var d = a.uniqueKey(), - k = this.createElement('clipPath') - .attr({ id: d }) - .add(this.defs); - g = this.rect(g, b, v, c, 0).add(k); - g.id = d; - g.clipPath = k; - g.count = 0; - return g; - }, - text: function(a, g, b, v) { - var c = {}; - if (v && (this.allowHTML || !this.forExport)) return this.html(a, g, b); - c.x = Math.round(g || 0); - b && (c.y = Math.round(b)); - if (a || 0 === a) c.text = a; - a = this.createElement('text').attr(c); - v || - (a.xSetter = function(a, g, b) { - var v = b.getElementsByTagName('tspan'), - c, - d = b.getAttribute(g), - k; - for (k = 0; k < v.length; k++) - (c = v[k]), c.getAttribute(g) === d && c.setAttribute(g, a); - b.setAttribute(g, a); - }); - return a; - }, - fontMetrics: function(a, b) { - a = - a || - (b && b.style && b.style.fontSize) || - (this.style && this.style.fontSize); - a = /px/.test(a) - ? g(a) - : /em/.test(a) - ? parseFloat(a) * (b ? this.fontMetrics(null, b.parentNode).f : 16) - : 12; - b = 24 > a ? a + 3 : Math.round(1.2 * a); - return { h: b, b: Math.round(0.8 * b), f: a }; - }, - rotCorr: function(a, g, b) { - var v = a; - g && b && (v = Math.max(v * Math.cos(g * e), 4)); - return { x: (-a / 3) * Math.sin(g * e), y: v }; - }, - label: function(g, b, k, e, z, h, m, A, L) { - var y = this, - J = y.g('button' !== L && 'label'), - t = (J.text = y.text('', 0, 0, m).attr({ zIndex: 1 })), - x, - F, - n = 0, - B = 3, - l = 0, - C, - f, - Q, - G, - w, - R = {}, - I, - P, - r = /^url\((.*?)\)$/.test(e), - p = r, - K, - O, - N, - T; - L && J.addClass('highcharts-' + L); - p = r; - K = function() { - return ((I || 0) % 2) / 2; - }; - O = function() { - var a = t.element.style, - g = {}; - F = - (void 0 === C || void 0 === f || w) && u(t.textStr) && t.getBBox(); - J.width = (C || F.width || 0) + 2 * B + l; - J.height = (f || F.height || 0) + 2 * B; - P = B + y.fontMetrics(a && a.fontSize, t).b; - p && - (x || - ((J.box = x = y.symbols[e] || r ? y.symbol(e) : y.rect()), - x.addClass( - ('button' === L ? '' : 'highcharts-label-box') + - (L ? ' highcharts-' + L + '-box' : ''), - ), - x.add(J), - (a = K()), - (g.x = a), - (g.y = (A ? -P : 0) + a)), - (g.width = Math.round(J.width)), - (g.height = Math.round(J.height)), - x.attr(c(g, R)), - (R = {})); - }; - N = function() { - var a = l + B, - g; - g = A ? 0 : P; - u(C) && - F && - ('center' === w || 'right' === w) && - (a += { center: 0.5, right: 1 }[w] * (C - F.width)); - if (a !== t.x || g !== t.y) - t.attr('x', a), void 0 !== g && t.attr('y', g); - t.x = a; - t.y = g; - }; - T = function(a, g) { - x ? x.attr(a, g) : (R[a] = g); - }; - J.onAdd = function() { - t.add(J); - J.attr({ text: g || 0 === g ? g : '', x: b, y: k }); - x && u(z) && J.attr({ anchorX: z, anchorY: h }); - }; - J.widthSetter = function(g) { - C = a.isNumber(g) ? g : null; - }; - J.heightSetter = function(a) { - f = a; - }; - J['text-alignSetter'] = function(a) { - w = a; - }; - J.paddingSetter = function(a) { - u(a) && a !== B && ((B = J.padding = a), N()); - }; - J.paddingLeftSetter = function(a) { - u(a) && a !== l && ((l = a), N()); - }; - J.alignSetter = function(a) { - a = { left: 0, center: 0.5, right: 1 }[a]; - a !== n && ((n = a), F && J.attr({ x: Q })); - }; - J.textSetter = function(a) { - void 0 !== a && t.textSetter(a); - O(); - N(); - }; - J['stroke-widthSetter'] = function(a, g) { - a && (p = !0); - I = this['stroke-width'] = a; - T(g, a); - }; - J.strokeSetter = J.fillSetter = J.rSetter = function(a, g) { - 'r' !== g && ('fill' === g && a && (p = !0), (J[g] = a)); - T(g, a); - }; - J.anchorXSetter = function(a, g) { - z = J.anchorX = a; - T(g, Math.round(a) - K() - Q); - }; - J.anchorYSetter = function(a, g) { - h = J.anchorY = a; - T(g, a - G); - }; - J.xSetter = function(a) { - J.x = a; - n && (a -= n * ((C || F.width) + 2 * B)); - Q = Math.round(a); - J.attr('translateX', Q); - }; - J.ySetter = function(a) { - G = J.y = Math.round(a); - J.attr('translateY', G); - }; - var U = J.css; - return c(J, { - css: function(a) { - if (a) { - var g = {}; - a = q(a); - d(J.textProps, function(b) { - void 0 !== a[b] && ((g[b] = a[b]), delete a[b]); - }); - t.css(g); - } - return U.call(J, a); - }, - getBBox: function() { - return { - width: F.width + 2 * B, - height: F.height + 2 * B, - x: F.x - B, - y: F.y - B, - }; - }, - shadow: function(a) { - a && (O(), x && x.shadow(a)); - return J; - }, - destroy: function() { - v(J.element, 'mouseenter'); - v(J.element, 'mouseleave'); - t && (t = t.destroy()); - x && (x = x.destroy()); - E.prototype.destroy.call(J); - J = y = O = N = T = null; - }, - }); - }, - }); - a.Renderer = D; - })(M); - (function(a) { - var E = a.attr, - D = a.createElement, - H = a.css, - p = a.defined, - f = a.each, - l = a.extend, - r = a.isFirefox, - n = a.isMS, - w = a.isWebKit, - u = a.pick, - e = a.pInt, - h = a.SVGRenderer, - m = a.win, - d = a.wrap; - l(a.SVGElement.prototype, { - htmlCss: function(a) { - var b = this.element; - if ((b = a && 'SPAN' === b.tagName && a.width)) - delete a.width, (this.textWidth = b), this.updateTransform(); - a && - 'ellipsis' === a.textOverflow && - ((a.whiteSpace = 'nowrap'), (a.overflow = 'hidden')); - this.styles = l(this.styles, a); - H(this.element, a); - return this; - }, - htmlGetBBox: function() { - var a = this.element; - return { - x: a.offsetLeft, - y: a.offsetTop, - width: a.offsetWidth, - height: a.offsetHeight, - }; - }, - htmlUpdateTransform: function() { - if (this.added) { - var a = this.renderer, - b = this.element, - d = this.translateX || 0, - z = this.translateY || 0, - h = this.x || 0, - m = this.y || 0, - x = this.textAlign || 'left', - n = { left: 0, center: 0.5, right: 1 }[x], - t = this.styles; - H(b, { marginLeft: d, marginTop: z }); - this.shadows && - f(this.shadows, function(a) { - H(a, { marginLeft: d + 1, marginTop: z + 1 }); - }); - this.inverted && - f(b.childNodes, function(c) { - a.invertChild(c, b); - }); - if ('SPAN' === b.tagName) { - var l = this.rotation, - u = e(this.textWidth), - q = t && t.whiteSpace, - A = [l, x, b.innerHTML, this.textWidth, this.textAlign].join(); - A !== this.cTT && - ((t = a.fontMetrics(b.style.fontSize).b), - p(l) && this.setSpanRotation(l, n, t), - H(b, { width: '', whiteSpace: q || 'nowrap' }), - b.offsetWidth > u && - /[ \-]/.test(b.textContent || b.innerText) && - H(b, { - width: u + 'px', - display: 'block', - whiteSpace: q || 'normal', - }), - this.getSpanCorrection(b.offsetWidth, t, n, l, x)); - H(b, { - left: h + (this.xCorr || 0) + 'px', - top: m + (this.yCorr || 0) + 'px', - }); - w && (t = b.offsetHeight); - this.cTT = A; - } - } else this.alignOnAdd = !0; - }, - setSpanRotation: function(a, b, d) { - var c = {}, - k = this.renderer.getTransformKey(); - c[k] = c.transform = 'rotate(' + a + 'deg)'; - c[k + (r ? 'Origin' : '-origin')] = c.transformOrigin = - 100 * b + '% ' + d + 'px'; - H(this.element, c); - }, - getSpanCorrection: function(a, b, d) { - this.xCorr = -a * d; - this.yCorr = -b; - }, - }); - l(h.prototype, { - getTransformKey: function() { - return n && !/Edge/.test(m.navigator.userAgent) - ? '-ms-transform' - : w - ? '-webkit-transform' - : r - ? 'MozTransform' - : m.opera - ? '-o-transform' - : ''; - }, - html: function(a, b, k) { - var c = this.createElement('span'), - e = c.element, - h = c.renderer, - m = h.isSVG, - w = function(a, b) { - f(['opacity', 'visibility'], function(c) { - d(a, c + 'Setter', function(a, c, d, k) { - a.call(this, c, d, k); - b[d] = c; - }); - }); - }; - c.textSetter = function(a) { - a !== e.innerHTML && delete this.bBox; - this.textStr = a; - e.innerHTML = u(a, ''); - c.htmlUpdateTransform(); - }; - m && w(c, c.element.style); - c.xSetter = c.ySetter = c.alignSetter = c.rotationSetter = function( - a, - b, - ) { - 'align' === b && (b = 'textAlign'); - c[b] = a; - c.htmlUpdateTransform(); - }; - c.attr({ text: a, x: Math.round(b), y: Math.round(k) }).css({ - fontFamily: this.style.fontFamily, - fontSize: this.style.fontSize, - position: 'absolute', - }); - e.style.whiteSpace = 'nowrap'; - c.css = c.htmlCss; - m && - (c.add = function(a) { - var b, - d = h.box.parentNode, - k = []; - if ((this.parentGroup = a)) { - if (((b = a.div), !b)) { - for (; a; ) k.push(a), (a = a.parentGroup); - f(k.reverse(), function(a) { - function e(g, b) { - a[b] = g; - n - ? (q[h.getTransformKey()] = - 'translate(' + - (a.x || a.translateX) + - 'px,' + - (a.y || a.translateY) + - 'px)') - : 'translateX' === b - ? (q.left = g + 'px') - : (q.top = g + 'px'); - a.doTransform = !0; - } - var q, - g = E(a.element, 'class'); - g && (g = { className: g }); - b = a.div = - a.div || - D( - 'div', - g, - { - position: 'absolute', - left: (a.translateX || 0) + 'px', - top: (a.translateY || 0) + 'px', - display: a.display, - opacity: a.opacity, - pointerEvents: a.styles && a.styles.pointerEvents, - }, - b || d, - ); - q = b.style; - l(a, { - classSetter: (function(a) { - return function(g) { - this.element.setAttribute('class', g); - a.className = g; - }; - })(b), - on: function() { - k[0].div && c.on.apply({ element: k[0].div }, arguments); - return a; - }, - translateXSetter: e, - translateYSetter: e, - }); - w(a, q); - }); - } - } else b = d; - b.appendChild(e); - c.added = !0; - c.alignOnAdd && c.htmlUpdateTransform(); - return c; - }); - return c; - }, - }); - })(M); - (function(a) { - function E() { - var n = a.defaultOptions.global, - l = r.moment; - if (n.timezone) { - if (l) - return function(a) { - return -l.tz(a, n.timezone).utcOffset(); - }; - a.error(25); - } - return n.useUTC && n.getTimezoneOffset; - } - function D() { - var n = a.defaultOptions.global, - f, - u = n.useUTC, - e = u ? 'getUTC' : 'get', - h = u ? 'setUTC' : 'set', - m = 'Minutes Hours Day Date Month FullYear'.split(' '), - d = m.concat(['Milliseconds', 'Seconds']); - a.Date = f = n.Date || r.Date; - f.hcTimezoneOffset = u && n.timezoneOffset; - f.hcGetTimezoneOffset = E(); - f.hcHasTimeZone = !(!f.hcTimezoneOffset && !f.hcGetTimezoneOffset); - f.hcMakeTime = function(a, b, d, e, h, m) { - var c; - u - ? ((c = f.UTC.apply(0, arguments)), (c += p(c))) - : (c = new f(a, b, l(d, 1), l(e, 0), l(h, 0), l(m, 0)).getTime()); - return c; - }; - for (n = 0; n < m.length; n++) f['hcGet' + m[n]] = e + m[n]; - for (n = 0; n < d.length; n++) f['hcSet' + d[n]] = h + d[n]; - } - var H = a.color, - p = a.getTZOffset, - f = a.merge, - l = a.pick, - r = a.win; - a.defaultOptions = { - colors: '#7cb5ec #434348 #90ed7d #f7a35c #8085e9 #f15c80 #e4d354 #2b908f #f45b5b #91e8e1'.split( - ' ', - ), - symbols: ['circle', 'diamond', 'square', 'triangle', 'triangle-down'], - lang: { - loading: 'Loading...', - months: 'January February March April May June July August September October November December'.split( - ' ', - ), - shortMonths: 'Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec'.split( - ' ', - ), - weekdays: 'Sunday Monday Tuesday Wednesday Thursday Friday Saturday'.split( - ' ', - ), - decimalPoint: '.', - numericSymbols: 'kMGTPE'.split(''), - resetZoom: 'Reset zoom', - resetZoomTitle: 'Reset zoom level 1:1', - thousandsSep: ' ', - }, - global: { useUTC: !0 }, - chart: { - borderRadius: 0, - defaultSeriesType: 'line', - ignoreHiddenSeries: !0, - spacing: [10, 10, 15, 10], - resetZoomButton: { - theme: { zIndex: 6 }, - position: { align: 'right', x: -10, y: 10 }, - }, - width: null, - height: null, - borderColor: '#335cad', - backgroundColor: '#ffffff', - plotBorderColor: '#cccccc', - }, - title: { - text: 'Chart title', - align: 'center', - margin: 15, - widthAdjust: -44, - }, - subtitle: { text: '', align: 'center', widthAdjust: -44 }, - plotOptions: {}, - labels: { style: { position: 'absolute', color: '#333333' } }, - legend: { - enabled: !0, - align: 'center', - layout: 'horizontal', - labelFormatter: function() { - return this.name; - }, - borderColor: '#999999', - borderRadius: 0, - navigation: { activeColor: '#003399', inactiveColor: '#cccccc' }, - itemStyle: { - color: '#333333', - fontSize: '12px', - fontWeight: 'bold', - textOverflow: 'ellipsis', - }, - itemHoverStyle: { color: '#000000' }, - itemHiddenStyle: { color: '#cccccc' }, - shadow: !1, - itemCheckboxStyle: { - position: 'absolute', - width: '13px', - height: '13px', - }, - squareSymbol: !0, - symbolPadding: 5, - verticalAlign: 'bottom', - x: 0, - y: 0, - title: { style: { fontWeight: 'bold' } }, - }, - loading: { - labelStyle: { fontWeight: 'bold', position: 'relative', top: '45%' }, - style: { - position: 'absolute', - backgroundColor: '#ffffff', - opacity: 0.5, - textAlign: 'center', - }, - }, - tooltip: { - enabled: !0, - animation: a.svg, - borderRadius: 3, - dateTimeLabelFormats: { - millisecond: '%A, %b %e, %H:%M:%S.%L', - second: '%A, %b %e, %H:%M:%S', - minute: '%A, %b %e, %H:%M', - hour: '%A, %b %e, %H:%M', - day: '%A, %b %e, %Y', - week: 'Week from %A, %b %e, %Y', - month: '%B %Y', - year: '%Y', - }, - footerFormat: '', - padding: 8, - snap: a.isTouchDevice ? 25 : 10, - backgroundColor: H('#f7f7f7') - .setOpacity(0.85) - .get(), - borderWidth: 1, - headerFormat: - '\x3cspan style\x3d"font-size: 10px"\x3e{point.key}\x3c/span\x3e\x3cbr/\x3e', - pointFormat: - '\x3cspan style\x3d"color:{point.color}"\x3e\u25cf\x3c/span\x3e {series.name}: \x3cb\x3e{point.y}\x3c/b\x3e\x3cbr/\x3e', - shadow: !0, - style: { - color: '#333333', - cursor: 'default', - fontSize: '12px', - pointerEvents: 'none', - whiteSpace: 'nowrap', - }, - }, - credits: { - enabled: !0, - href: 'http://www.highcharts.com', - position: { align: 'right', x: -10, verticalAlign: 'bottom', y: -5 }, - style: { cursor: 'pointer', color: '#999999', fontSize: '9px' }, - text: 'Highcharts.com', - }, - }; - a.setOptions = function(n) { - a.defaultOptions = f(!0, a.defaultOptions, n); - D(); - return a.defaultOptions; - }; - a.getOptions = function() { - return a.defaultOptions; - }; - a.defaultPlotOptions = a.defaultOptions.plotOptions; - D(); - })(M); - (function(a) { - var E = a.correctFloat, - D = a.defined, - H = a.destroyObjectProperties, - p = a.isNumber, - f = a.merge, - l = a.pick, - r = a.deg2rad; - a.Tick = function(a, l, f, e) { - this.axis = a; - this.pos = l; - this.type = f || ''; - this.isNewLabel = this.isNew = !0; - f || e || this.addLabel(); - }; - a.Tick.prototype = { - addLabel: function() { - var a = this.axis, - w = a.options, - u = a.chart, - e = a.categories, - h = a.names, - m = this.pos, - d = w.labels, - c = a.tickPositions, - b = m === c[0], - k = m === c[c.length - 1], - h = e ? l(e[m], h[m], m) : m, - e = this.label, - c = c.info, - z; - a.isDatetimeAxis && - c && - (z = w.dateTimeLabelFormats[c.higherRanks[m] || c.unitName]); - this.isFirst = b; - this.isLast = k; - w = a.labelFormatter.call({ - axis: a, - chart: u, - isFirst: b, - isLast: k, - dateTimeLabelFormat: z, - value: a.isLog ? E(a.lin2log(h)) : h, - pos: m, - }); - D(e) - ? e && e.attr({ text: w }) - : ((this.labelLength = - (this.label = e = - D(w) && d.enabled - ? u.renderer - .text(w, 0, 0, d.useHTML) - .css(f(d.style)) - .add(a.labelGroup) - : null) && e.getBBox().width), - (this.rotation = 0)); - }, - getLabelSize: function() { - return this.label - ? this.label.getBBox()[this.axis.horiz ? 'height' : 'width'] - : 0; - }, - handleOverflow: function(a) { - var f = this.axis, - n = f.options.labels, - e = a.x, - h = f.chart.chartWidth, - m = f.chart.spacing, - d = l(f.labelLeft, Math.min(f.pos, m[3])), - m = l( - f.labelRight, - Math.max(f.isRadial ? 0 : f.pos + f.len, h - m[1]), - ), - c = this.label, - b = this.rotation, - k = { left: 0, center: 0.5, right: 1 }[ - f.labelAlign || c.attr('align') - ], - z = c.getBBox().width, - B = f.getSlotWidth(), - I = B, - x = 1, - p, - t = {}; - if (b || !1 === n.overflow) - 0 > b && e - k * z < d - ? (p = Math.round(e / Math.cos(b * r) - d)) - : 0 < b && - e + k * z > m && - (p = Math.round((h - e) / Math.cos(b * r))); - else if ( - ((h = e + (1 - k) * z), - e - k * z < d - ? (I = a.x + I * (1 - k) - d) - : h > m && ((I = m - a.x + I * k), (x = -1)), - (I = Math.min(B, I)), - I < B && - 'center' === f.labelAlign && - (a.x += x * (B - I - k * (B - Math.min(z, I)))), - z > I || (f.autoRotation && (c.styles || {}).width)) - ) - p = I; - p && - ((t.width = p), - (n.style || {}).textOverflow || (t.textOverflow = 'ellipsis'), - c.css(t)); - }, - getPosition: function(a, f, l, e) { - var h = this.axis, - m = h.chart, - d = (e && m.oldChartHeight) || m.chartHeight; - return { - x: a - ? h.translate(f + l, null, null, e) + h.transB - : h.left + - h.offset + - (h.opposite - ? ((e && m.oldChartWidth) || m.chartWidth) - h.right - h.left - : 0), - y: a - ? d - h.bottom + h.offset - (h.opposite ? h.height : 0) - : d - h.translate(f + l, null, null, e) - h.transB, - }; - }, - getLabelPosition: function(a, f, l, e, h, m, d, c) { - var b = this.axis, - k = b.transA, - z = b.reversed, - B = b.staggerLines, - n = b.tickRotCorr || { x: 0, y: 0 }, - x = h.y, - u = - e || b.reserveSpaceDefault - ? 0 - : -b.labelOffset * ('center' === b.labelAlign ? 0.5 : 1); - D(x) || - (x = - 0 === b.side - ? l.rotation - ? -8 - : -l.getBBox().height - : 2 === b.side - ? n.y + 8 - : Math.cos(l.rotation * r) * (n.y - l.getBBox(!1, 0).height / 2)); - a = a + h.x + u + n.x - (m && e ? m * k * (z ? -1 : 1) : 0); - f = f + x - (m && !e ? m * k * (z ? 1 : -1) : 0); - B && - ((l = (d / (c || 1)) % B), - b.opposite && (l = B - l - 1), - (f += (b.labelOffset / B) * l)); - return { x: a, y: Math.round(f) }; - }, - getMarkPath: function(a, f, l, e, h, m) { - return m.crispLine( - ['M', a, f, 'L', a + (h ? 0 : -l), f + (h ? l : 0)], - e, - ); - }, - renderGridLine: function(a, f, l) { - var e = this.axis, - h = e.options, - m = this.gridLine, - d = {}, - c = this.pos, - b = this.type, - k = e.tickmarkOffset, - z = e.chart.renderer, - B = b ? b + 'Grid' : 'grid', - n = h[B + 'LineWidth'], - x = h[B + 'LineColor'], - h = h[B + 'LineDashStyle']; - m || - ((d.stroke = x), - (d['stroke-width'] = n), - h && (d.dashstyle = h), - b || (d.zIndex = 1), - a && (d.opacity = 0), - (this.gridLine = m = z - .path() - .attr(d) - .addClass('highcharts-' + (b ? b + '-' : '') + 'grid-line') - .add(e.gridGroup))); - if ( - !a && - m && - (a = e.getPlotLinePath(c + k, m.strokeWidth() * l, a, !0)) - ) - m[this.isNew ? 'attr' : 'animate']({ d: a, opacity: f }); - }, - renderMark: function(a, f, u) { - var e = this.axis, - h = e.options, - m = e.chart.renderer, - d = this.type, - c = d ? d + 'Tick' : 'tick', - b = e.tickSize(c), - k = this.mark, - z = !k, - B = a.x; - a = a.y; - var n = l(h[c + 'Width'], !d && e.isXAxis ? 1 : 0), - h = h[c + 'Color']; - b && - (e.opposite && (b[0] = -b[0]), - z && - ((this.mark = k = m - .path() - .addClass('highcharts-' + (d ? d + '-' : '') + 'tick') - .add(e.axisGroup)), - k.attr({ stroke: h, 'stroke-width': n })), - k[z ? 'attr' : 'animate']({ - d: this.getMarkPath(B, a, b[0], k.strokeWidth() * u, e.horiz, m), - opacity: f, - })); - }, - renderLabel: function(a, f, u, e) { - var h = this.axis, - m = h.horiz, - d = h.options, - c = this.label, - b = d.labels, - k = b.step, - h = h.tickmarkOffset, - z = !0, - B = a.x; - a = a.y; - c && - p(B) && - ((c.xy = a = this.getLabelPosition(B, a, c, m, b, h, e, k)), - (this.isFirst && !this.isLast && !l(d.showFirstLabel, 1)) || - (this.isLast && !this.isFirst && !l(d.showLastLabel, 1)) - ? (z = !1) - : !m || - b.step || - b.rotation || - f || - 0 === u || - this.handleOverflow(a), - k && e % k && (z = !1), - z && p(a.y) - ? ((a.opacity = u), - c[this.isNewLabel ? 'attr' : 'animate'](a), - (this.isNewLabel = !1)) - : (c.attr('y', -9999), (this.isNewLabel = !0))); - }, - render: function(a, f, u) { - var e = this.axis, - h = e.horiz, - m = this.getPosition(h, this.pos, e.tickmarkOffset, f), - d = m.x, - c = m.y, - e = (h && d === e.pos + e.len) || (!h && c === e.pos) ? -1 : 1; - u = l(u, 1); - this.isActive = !0; - this.renderGridLine(f, u, e); - this.renderMark(m, u, e); - this.renderLabel(m, f, u, a); - this.isNew = !1; - }, - destroy: function() { - H(this, this.axis); - }, - }; - })(M); - var V = (function(a) { - var E = a.addEvent, - D = a.animObject, - H = a.arrayMax, - p = a.arrayMin, - f = a.color, - l = a.correctFloat, - r = a.defaultOptions, - n = a.defined, - w = a.deg2rad, - u = a.destroyObjectProperties, - e = a.each, - h = a.extend, - m = a.fireEvent, - d = a.format, - c = a.getMagnitude, - b = a.grep, - k = a.inArray, - z = a.isArray, - B = a.isNumber, - I = a.isString, - x = a.merge, - K = a.normalizeTickInterval, - t = a.objectEach, - C = a.pick, - N = a.removeEvent, - q = a.splat, - A = a.syncTimeout, - F = a.Tick, - G = function() { - this.init.apply(this, arguments); - }; - a.extend(G.prototype, { - defaultOptions: { - dateTimeLabelFormats: { - millisecond: '%H:%M:%S.%L', - second: '%H:%M:%S', - minute: '%H:%M', - hour: '%H:%M', - day: '%e. %b', - week: '%e. %b', - month: "%b '%y", - year: '%Y', - }, - endOnTick: !1, - labels: { - enabled: !0, - style: { color: '#666666', cursor: 'default', fontSize: '11px' }, - x: 0, - }, - maxPadding: 0.01, - minorTickLength: 2, - minorTickPosition: 'outside', - minPadding: 0.01, - startOfWeek: 1, - startOnTick: !1, - tickLength: 10, - tickmarkPlacement: 'between', - tickPixelInterval: 100, - tickPosition: 'outside', - title: { align: 'middle', style: { color: '#666666' } }, - type: 'linear', - minorGridLineColor: '#f2f2f2', - minorGridLineWidth: 1, - minorTickColor: '#999999', - lineColor: '#ccd6eb', - lineWidth: 1, - gridLineColor: '#e6e6e6', - tickColor: '#ccd6eb', - }, - defaultYAxisOptions: { - endOnTick: !0, - tickPixelInterval: 72, - showLastLabel: !0, - labels: { x: -8 }, - maxPadding: 0.05, - minPadding: 0.05, - startOnTick: !0, - title: { rotation: 270, text: 'Values' }, - stackLabels: { - allowOverlap: !1, - enabled: !1, - formatter: function() { - return a.numberFormat(this.total, -1); - }, - style: { - fontSize: '11px', - fontWeight: 'bold', - color: '#000000', - textOutline: '1px contrast', - }, - }, - gridLineWidth: 1, - lineWidth: 0, - }, - defaultLeftAxisOptions: { labels: { x: -15 }, title: { rotation: 270 } }, - defaultRightAxisOptions: { labels: { x: 15 }, title: { rotation: 90 } }, - defaultBottomAxisOptions: { - labels: { autoRotation: [-45], x: 0 }, - title: { rotation: 0 }, - }, - defaultTopAxisOptions: { - labels: { autoRotation: [-45], x: 0 }, - title: { rotation: 0 }, - }, - init: function(a, b) { - var g = b.isX, - v = this; - v.chart = a; - v.horiz = a.inverted && !v.isZAxis ? !g : g; - v.isXAxis = g; - v.coll = v.coll || (g ? 'xAxis' : 'yAxis'); - v.opposite = b.opposite; - v.side = - b.side || (v.horiz ? (v.opposite ? 0 : 2) : v.opposite ? 1 : 3); - v.setOptions(b); - var c = this.options, - d = c.type; - v.labelFormatter = c.labels.formatter || v.defaultLabelFormatter; - v.userOptions = b; - v.minPixelPadding = 0; - v.reversed = c.reversed; - v.visible = !1 !== c.visible; - v.zoomEnabled = !1 !== c.zoomEnabled; - v.hasNames = 'category' === d || !0 === c.categories; - v.categories = c.categories || v.hasNames; - v.names = v.names || []; - v.plotLinesAndBandsGroups = {}; - v.isLog = 'logarithmic' === d; - v.isDatetimeAxis = 'datetime' === d; - v.positiveValuesOnly = v.isLog && !v.allowNegativeLog; - v.isLinked = n(c.linkedTo); - v.ticks = {}; - v.labelEdge = []; - v.minorTicks = {}; - v.plotLinesAndBands = []; - v.alternateBands = {}; - v.len = 0; - v.minRange = v.userMinRange = c.minRange || c.maxZoom; - v.range = c.range; - v.offset = c.offset || 0; - v.stacks = {}; - v.oldStacks = {}; - v.stacksTouched = 0; - v.max = null; - v.min = null; - v.crosshair = C( - c.crosshair, - q(a.options.tooltip.crosshairs)[g ? 0 : 1], - !1, - ); - b = v.options.events; - -1 === k(v, a.axes) && - (g ? a.axes.splice(a.xAxis.length, 0, v) : a.axes.push(v), - a[v.coll].push(v)); - v.series = v.series || []; - a.inverted && - !v.isZAxis && - g && - void 0 === v.reversed && - (v.reversed = !0); - t(b, function(a, g) { - E(v, g, a); - }); - v.lin2log = c.linearToLogConverter || v.lin2log; - v.isLog && ((v.val2lin = v.log2lin), (v.lin2val = v.lin2log)); - }, - setOptions: function(a) { - this.options = x( - this.defaultOptions, - 'yAxis' === this.coll && this.defaultYAxisOptions, - [ - this.defaultTopAxisOptions, - this.defaultRightAxisOptions, - this.defaultBottomAxisOptions, - this.defaultLeftAxisOptions, - ][this.side], - x(r[this.coll], a), - ); - }, - defaultLabelFormatter: function() { - var g = this.axis, - b = this.value, - c = g.categories, - k = this.dateTimeLabelFormat, - e = r.lang, - q = e.numericSymbols, - e = e.numericSymbolMagnitude || 1e3, - h = q && q.length, - m, - z = g.options.labels.format, - g = g.isLog ? Math.abs(b) : g.tickInterval; - if (z) m = d(z, this); - else if (c) m = b; - else if (k) m = a.dateFormat(k, b); - else if (h && 1e3 <= g) - for (; h-- && void 0 === m; ) - (c = Math.pow(e, h + 1)), - g >= c && - 0 === (10 * b) % c && - null !== q[h] && - 0 !== b && - (m = a.numberFormat(b / c, -1) + q[h]); - void 0 === m && - (m = - 1e4 <= Math.abs(b) - ? a.numberFormat(b, -1) - : a.numberFormat(b, -1, void 0, '')); - return m; - }, - getSeriesExtremes: function() { - var a = this, - v = a.chart; - a.hasVisibleSeries = !1; - a.dataMin = a.dataMax = a.threshold = null; - a.softThreshold = !a.isXAxis; - a.buildStacks && a.buildStacks(); - e(a.series, function(g) { - if (g.visible || !v.options.chart.ignoreHiddenSeries) { - var c = g.options, - d = c.threshold, - k; - a.hasVisibleSeries = !0; - a.positiveValuesOnly && 0 >= d && (d = null); - if (a.isXAxis) - (c = g.xData), - c.length && - ((g = p(c)), - (k = H(c)), - B(g) || g instanceof Date || ((c = b(c, B)), (g = p(c))), - (a.dataMin = Math.min(C(a.dataMin, c[0], g), g)), - (a.dataMax = Math.max(C(a.dataMax, c[0], k), k))); - else if ( - (g.getExtremes(), - (k = g.dataMax), - (g = g.dataMin), - n(g) && - n(k) && - ((a.dataMin = Math.min(C(a.dataMin, g), g)), - (a.dataMax = Math.max(C(a.dataMax, k), k))), - n(d) && (a.threshold = d), - !c.softThreshold || a.positiveValuesOnly) - ) - a.softThreshold = !1; - } - }); - }, - translate: function(a, b, c, d, k, e) { - var g = this.linkedParent || this, - v = 1, - q = 0, - h = d ? g.oldTransA : g.transA; - d = d ? g.oldMin : g.min; - var m = g.minPixelPadding; - k = (g.isOrdinal || g.isBroken || (g.isLog && k)) && g.lin2val; - h || (h = g.transA); - c && ((v *= -1), (q = g.len)); - g.reversed && ((v *= -1), (q -= v * (g.sector || g.len))); - b - ? ((a = (a * v + q - m) / h + d), k && (a = g.lin2val(a))) - : (k && (a = g.val2lin(a)), - (a = B(d) - ? v * (a - d) * h + q + v * m + (B(e) ? h * e : 0) - : void 0)); - return a; - }, - toPixels: function(a, b) { - return ( - this.translate(a, !1, !this.horiz, null, !0) + (b ? 0 : this.pos) - ); - }, - toValue: function(a, b) { - return this.translate( - a - (b ? 0 : this.pos), - !0, - !this.horiz, - null, - !0, - ); - }, - getPlotLinePath: function(a, b, c, d, k) { - var g = this.chart, - v = this.left, - q = this.top, - e, - h, - m = (c && g.oldChartHeight) || g.chartHeight, - z = (c && g.oldChartWidth) || g.chartWidth, - A; - e = this.transB; - var t = function(a, g, b) { - if (a < g || a > b) d ? (a = Math.min(Math.max(g, a), b)) : (A = !0); - return a; - }; - k = C(k, this.translate(a, null, null, c)); - a = c = Math.round(k + e); - e = h = Math.round(m - k - e); - B(k) - ? this.horiz - ? ((e = q), - (h = m - this.bottom), - (a = c = t(a, v, v + this.width))) - : ((a = v), - (c = z - this.right), - (e = h = t(e, q, q + this.height))) - : ((A = !0), (d = !1)); - return A && !d - ? null - : g.renderer.crispLine(['M', a, e, 'L', c, h], b || 1); - }, - getLinearTickPositions: function(a, b, c) { - var g, - v = l(Math.floor(b / a) * a); - c = l(Math.ceil(c / a) * a); - var d = [], - k; - l(v + a) === v && (k = 20); - if (this.single) return [b]; - for (b = v; b <= c; ) { - d.push(b); - b = l(b + a, k); - if (b === g) break; - g = b; - } - return d; - }, - getMinorTickInterval: function() { - var a = this.options; - return !0 === a.minorTicks - ? C(a.minorTickInterval, 'auto') - : !1 === a.minorTicks - ? null - : a.minorTickInterval; - }, - getMinorTickPositions: function() { - var a = this, - b = a.options, - c = a.tickPositions, - d = a.minorTickInterval, - k = [], - q = a.pointRangePadding || 0, - h = a.min - q, - q = a.max + q, - m = q - h; - if (m && m / d < a.len / 3) - if (a.isLog) - e(this.paddedTicks, function(g, b, v) { - b && - k.push.apply(k, a.getLogTickPositions(d, v[b - 1], v[b], !0)); - }); - else if (a.isDatetimeAxis && 'auto' === this.getMinorTickInterval()) - k = k.concat( - a.getTimeTicks( - a.normalizeTimeTickInterval(d), - h, - q, - b.startOfWeek, - ), - ); - else - for (b = h + ((c[0] - h) % d); b <= q && b !== k[0]; b += d) - k.push(b); - 0 !== k.length && a.trimTicks(k); - return k; - }, - adjustForMinRange: function() { - var a = this.options, - b = this.min, - c = this.max, - d, - k, - q, - h, - m, - z, - A, - t; - this.isXAxis && - void 0 === this.minRange && - !this.isLog && - (n(a.min) || n(a.max) - ? (this.minRange = null) - : (e(this.series, function(a) { - z = a.xData; - for (h = A = a.xIncrement ? 1 : z.length - 1; 0 < h; h--) - if (((m = z[h] - z[h - 1]), void 0 === q || m < q)) q = m; - }), - (this.minRange = Math.min(5 * q, this.dataMax - this.dataMin)))); - c - b < this.minRange && - ((k = this.dataMax - this.dataMin >= this.minRange), - (t = this.minRange), - (d = (t - c + b) / 2), - (d = [b - d, C(a.min, b - d)]), - k && (d[2] = this.isLog ? this.log2lin(this.dataMin) : this.dataMin), - (b = H(d)), - (c = [b + t, C(a.max, b + t)]), - k && (c[2] = this.isLog ? this.log2lin(this.dataMax) : this.dataMax), - (c = p(c)), - c - b < t && ((d[0] = c - t), (d[1] = C(a.min, c - t)), (b = H(d)))); - this.min = b; - this.max = c; - }, - getClosest: function() { - var a; - this.categories - ? (a = 1) - : e(this.series, function(g) { - var b = g.closestPointRange, - v = g.visible || !g.chart.options.chart.ignoreHiddenSeries; - !g.noSharedTooltip && - n(b) && - v && - (a = n(a) ? Math.min(a, b) : b); - }); - return a; - }, - nameToX: function(a) { - var g = z(this.categories), - b = g ? this.categories : this.names, - c = a.options.x, - d; - a.series.requireSorting = !1; - n(c) || - (c = - !1 === this.options.uniqueNames - ? a.series.autoIncrement() - : k(a.name, b)); - -1 === c ? g || (d = b.length) : (d = c); - void 0 !== d && (this.names[d] = a.name); - return d; - }, - updateNames: function() { - var a = this; - 0 < this.names.length && - ((this.names.length = 0), - (this.minRange = this.userMinRange), - e(this.series || [], function(g) { - g.xIncrement = null; - if (!g.points || g.isDirtyData) g.processData(), g.generatePoints(); - e(g.points, function(b, v) { - var c; - b.options && - ((c = a.nameToX(b)), - void 0 !== c && c !== b.x && ((b.x = c), (g.xData[v] = c))); - }); - })); - }, - setAxisTranslation: function(a) { - var g = this, - b = g.max - g.min, - c = g.axisPointRange || 0, - d, - k = 0, - q = 0, - h = g.linkedParent, - m = !!g.categories, - z = g.transA, - A = g.isXAxis; - if (A || m || c) - (d = g.getClosest()), - h - ? ((k = h.minPointOffset), (q = h.pointRangePadding)) - : e(g.series, function(a) { - var b = m - ? 1 - : A - ? C(a.options.pointRange, d, 0) - : g.axisPointRange || 0; - a = a.options.pointPlacement; - c = Math.max(c, b); - g.single || - ((k = Math.max(k, I(a) ? 0 : b / 2)), - (q = Math.max(q, 'on' === a ? 0 : b))); - }), - (h = g.ordinalSlope && d ? g.ordinalSlope / d : 1), - (g.minPointOffset = k *= h), - (g.pointRangePadding = q *= h), - (g.pointRange = Math.min(c, b)), - A && (g.closestPointRange = d); - a && (g.oldTransA = z); - g.translationSlope = g.transA = z = - g.options.staticScale || g.len / (b + q || 1); - g.transB = g.horiz ? g.left : g.bottom; - g.minPixelPadding = z * k; - }, - minFromRange: function() { - return this.max - this.range; - }, - setTickInterval: function(g) { - var b = this, - d = b.chart, - k = b.options, - q = b.isLog, - h = b.log2lin, - z = b.isDatetimeAxis, - A = b.isXAxis, - t = b.isLinked, - x = k.maxPadding, - f = k.minPadding, - F = k.tickInterval, - u = k.tickPixelInterval, - G = b.categories, - p = b.threshold, - I = b.softThreshold, - r, - w, - N, - D; - z || G || t || this.getTickAmount(); - N = C(b.userMin, k.min); - D = C(b.userMax, k.max); - t - ? ((b.linkedParent = d[b.coll][k.linkedTo]), - (d = b.linkedParent.getExtremes()), - (b.min = C(d.min, d.dataMin)), - (b.max = C(d.max, d.dataMax)), - k.type !== b.linkedParent.options.type && a.error(11, 1)) - : (!I && - n(p) && - (b.dataMin >= p - ? ((r = p), (f = 0)) - : b.dataMax <= p && ((w = p), (x = 0))), - (b.min = C(N, r, b.dataMin)), - (b.max = C(D, w, b.dataMax))); - q && - (b.positiveValuesOnly && - !g && - 0 >= Math.min(b.min, C(b.dataMin, b.min)) && - a.error(10, 1), - (b.min = l(h(b.min), 15)), - (b.max = l(h(b.max), 15))); - b.range && - n(b.max) && - ((b.userMin = b.min = N = Math.max(b.dataMin, b.minFromRange())), - (b.userMax = D = b.max), - (b.range = null)); - m(b, 'foundExtremes'); - b.beforePadding && b.beforePadding(); - b.adjustForMinRange(); - !(G || b.axisPointRange || b.usePercentage || t) && - n(b.min) && - n(b.max) && - (h = b.max - b.min) && - (!n(N) && f && (b.min -= h * f), !n(D) && x && (b.max += h * x)); - B(k.softMin) && !B(b.userMin) && (b.min = Math.min(b.min, k.softMin)); - B(k.softMax) && !B(b.userMax) && (b.max = Math.max(b.max, k.softMax)); - B(k.floor) && (b.min = Math.max(b.min, k.floor)); - B(k.ceiling) && (b.max = Math.min(b.max, k.ceiling)); - I && - n(b.dataMin) && - ((p = p || 0), - !n(N) && b.min < p && b.dataMin >= p - ? (b.min = p) - : !n(D) && b.max > p && b.dataMax <= p && (b.max = p)); - b.tickInterval = - b.min === b.max || void 0 === b.min || void 0 === b.max - ? 1 - : t && !F && u === b.linkedParent.options.tickPixelInterval - ? (F = b.linkedParent.tickInterval) - : C( - F, - this.tickAmount - ? (b.max - b.min) / Math.max(this.tickAmount - 1, 1) - : void 0, - G ? 1 : ((b.max - b.min) * u) / Math.max(b.len, u), - ); - A && - !g && - e(b.series, function(a) { - a.processData(b.min !== b.oldMin || b.max !== b.oldMax); - }); - b.setAxisTranslation(!0); - b.beforeSetTickPositions && b.beforeSetTickPositions(); - b.postProcessTickInterval && - (b.tickInterval = b.postProcessTickInterval(b.tickInterval)); - b.pointRange && - !F && - (b.tickInterval = Math.max(b.pointRange, b.tickInterval)); - g = C(k.minTickInterval, b.isDatetimeAxis && b.closestPointRange); - !F && b.tickInterval < g && (b.tickInterval = g); - z || - q || - F || - (b.tickInterval = K( - b.tickInterval, - null, - c(b.tickInterval), - C( - k.allowDecimals, - !( - 0.5 < b.tickInterval && - 5 > b.tickInterval && - 1e3 < b.max && - 9999 > b.max - ), - ), - !!this.tickAmount, - )); - this.tickAmount || (b.tickInterval = b.unsquish()); - this.setTickPositions(); - }, - setTickPositions: function() { - var a = this.options, - b, - c = a.tickPositions; - b = this.getMinorTickInterval(); - var d = a.tickPositioner, - k = a.startOnTick, - q = a.endOnTick; - this.tickmarkOffset = - this.categories && - 'between' === a.tickmarkPlacement && - 1 === this.tickInterval - ? 0.5 - : 0; - this.minorTickInterval = - 'auto' === b && this.tickInterval ? this.tickInterval / 5 : b; - this.single = - this.min === this.max && - n(this.min) && - !this.tickAmount && - (parseInt(this.min, 10) === this.min || !1 !== a.allowDecimals); - this.tickPositions = b = c && c.slice(); - !b && - ((b = this.isDatetimeAxis - ? this.getTimeTicks( - this.normalizeTimeTickInterval(this.tickInterval, a.units), - this.min, - this.max, - a.startOfWeek, - this.ordinalPositions, - this.closestPointRange, - !0, - ) - : this.isLog - ? this.getLogTickPositions(this.tickInterval, this.min, this.max) - : this.getLinearTickPositions( - this.tickInterval, - this.min, - this.max, - )), - b.length > this.len && - ((b = [b[0], b.pop()]), b[0] === b[1] && (b.length = 1)), - (this.tickPositions = b), - d && (d = d.apply(this, [this.min, this.max]))) && - (this.tickPositions = b = d); - this.paddedTicks = b.slice(0); - this.trimTicks(b, k, q); - this.isLinked || - (this.single && - 2 > b.length && - ((this.min -= 0.5), (this.max += 0.5)), - c || d || this.adjustTickAmount()); - }, - trimTicks: function(a, b, c) { - var g = a[0], - d = a[a.length - 1], - k = this.minPointOffset || 0; - if (!this.isLinked) { - if (b && -Infinity !== g) this.min = g; - else for (; this.min - k > a[0]; ) a.shift(); - if (c) this.max = d; - else for (; this.max + k < a[a.length - 1]; ) a.pop(); - 0 === a.length && - n(g) && - !this.options.tickPositions && - a.push((d + g) / 2); - } - }, - alignToOthers: function() { - var a = {}, - b, - c = this.options; - !1 === this.chart.options.chart.alignTicks || - !1 === c.alignTicks || - this.isLog || - e(this.chart[this.coll], function(g) { - var c = g.options, - c = [g.horiz ? c.left : c.top, c.width, c.height, c.pane].join(); - g.series.length && (a[c] ? (b = !0) : (a[c] = 1)); - }); - return b; - }, - getTickAmount: function() { - var a = this.options, - b = a.tickAmount, - c = a.tickPixelInterval; - !n(a.tickInterval) && - this.len < c && - !this.isRadial && - !this.isLog && - a.startOnTick && - a.endOnTick && - (b = 2); - !b && this.alignToOthers() && (b = Math.ceil(this.len / c) + 1); - 4 > b && ((this.finalTickAmt = b), (b = 5)); - this.tickAmount = b; - }, - adjustTickAmount: function() { - var a = this.tickInterval, - b = this.tickPositions, - c = this.tickAmount, - d = this.finalTickAmt, - k = b && b.length, - q = C(this.threshold, this.softThreshold ? 0 : null); - if (this.hasData()) { - if (k < c) { - for (; b.length < c; ) - b.length % 2 || this.min === q - ? b.push(l(b[b.length - 1] + a)) - : b.unshift(l(b[0] - a)); - this.transA *= (k - 1) / (c - 1); - this.min = b[0]; - this.max = b[b.length - 1]; - } else k > c && ((this.tickInterval *= 2), this.setTickPositions()); - if (n(d)) { - for (a = c = b.length; a--; ) - ((3 === d && 1 === a % 2) || (2 >= d && 0 < a && a < c - 1)) && - b.splice(a, 1); - this.finalTickAmt = void 0; - } - } - }, - setScale: function() { - var a, b; - this.oldMin = this.min; - this.oldMax = this.max; - this.oldAxisLength = this.len; - this.setAxisSize(); - b = this.len !== this.oldAxisLength; - e(this.series, function(b) { - if (b.isDirtyData || b.isDirty || b.xAxis.isDirty) a = !0; - }); - b || - a || - this.isLinked || - this.forceRedraw || - this.userMin !== this.oldUserMin || - this.userMax !== this.oldUserMax || - this.alignToOthers() - ? (this.resetStacks && this.resetStacks(), - (this.forceRedraw = !1), - this.getSeriesExtremes(), - this.setTickInterval(), - (this.oldUserMin = this.userMin), - (this.oldUserMax = this.userMax), - this.isDirty || - (this.isDirty = - b || this.min !== this.oldMin || this.max !== this.oldMax)) - : this.cleanStacks && this.cleanStacks(); - }, - setExtremes: function(a, b, c, d, k) { - var g = this, - q = g.chart; - c = C(c, !0); - e(g.series, function(a) { - delete a.kdTree; - }); - k = h(k, { min: a, max: b }); - m(g, 'setExtremes', k, function() { - g.userMin = a; - g.userMax = b; - g.eventArgs = k; - c && q.redraw(d); - }); - }, - zoom: function(a, b) { - var g = this.dataMin, - c = this.dataMax, - d = this.options, - k = Math.min(g, C(d.min, g)), - d = Math.max(c, C(d.max, c)); - if (a !== this.min || b !== this.max) - this.allowZoomOutside || - (n(g) && (a < k && (a = k), a > d && (a = d)), - n(c) && (b < k && (b = k), b > d && (b = d))), - (this.displayBtn = void 0 !== a || void 0 !== b), - this.setExtremes(a, b, !1, void 0, { trigger: 'zoom' }); - return !0; - }, - setAxisSize: function() { - var b = this.chart, - c = this.options, - d = c.offsets || [0, 0, 0, 0], - k = this.horiz, - q = (this.width = Math.round( - a.relativeLength( - C(c.width, b.plotWidth - d[3] + d[1]), - b.plotWidth, - ), - )), - e = (this.height = Math.round( - a.relativeLength( - C(c.height, b.plotHeight - d[0] + d[2]), - b.plotHeight, - ), - )), - h = (this.top = Math.round( - a.relativeLength( - C(c.top, b.plotTop + d[0]), - b.plotHeight, - b.plotTop, - ), - )), - c = (this.left = Math.round( - a.relativeLength( - C(c.left, b.plotLeft + d[3]), - b.plotWidth, - b.plotLeft, - ), - )); - this.bottom = b.chartHeight - e - h; - this.right = b.chartWidth - q - c; - this.len = Math.max(k ? q : e, 0); - this.pos = k ? c : h; - }, - getExtremes: function() { - var a = this.isLog, - b = this.lin2log; - return { - min: a ? l(b(this.min)) : this.min, - max: a ? l(b(this.max)) : this.max, - dataMin: this.dataMin, - dataMax: this.dataMax, - userMin: this.userMin, - userMax: this.userMax, - }; - }, - getThreshold: function(a) { - var b = this.isLog, - g = this.lin2log, - c = b ? g(this.min) : this.min, - b = b ? g(this.max) : this.max; - null === a ? (a = c) : c > a ? (a = c) : b < a && (a = b); - return this.translate(a, 0, 1, 0, 1); - }, - autoLabelAlign: function(a) { - a = (C(a, 0) - 90 * this.side + 720) % 360; - return 15 < a && 165 > a - ? 'right' - : 195 < a && 345 > a - ? 'left' - : 'center'; - }, - tickSize: function(a) { - var b = this.options, - g = b[a + 'Length'], - c = C(b[a + 'Width'], 'tick' === a && this.isXAxis ? 1 : 0); - if (c && g) return 'inside' === b[a + 'Position'] && (g = -g), [g, c]; - }, - labelMetrics: function() { - var a = (this.tickPositions && this.tickPositions[0]) || 0; - return this.chart.renderer.fontMetrics( - this.options.labels.style && this.options.labels.style.fontSize, - this.ticks[a] && this.ticks[a].label, - ); - }, - unsquish: function() { - var a = this.options.labels, - b = this.horiz, - c = this.tickInterval, - d = c, - k = - this.len / (((this.categories ? 1 : 0) + this.max - this.min) / c), - q, - h = a.rotation, - m = this.labelMetrics(), - z, - A = Number.MAX_VALUE, - t, - x = function(a) { - a /= k || 1; - a = 1 < a ? Math.ceil(a) : 1; - return a * c; - }; - b - ? (t = - !a.staggerLines && - !a.step && - (n(h) - ? [h] - : k < C(a.autoRotationLimit, 80) && a.autoRotation)) && - e(t, function(a) { - var b; - if (a === h || (a && -90 <= a && 90 >= a)) - (z = x(Math.abs(m.h / Math.sin(w * a)))), - (b = z + Math.abs(a / 360)), - b < A && ((A = b), (q = a), (d = z)); - }) - : a.step || (d = x(m.h)); - this.autoRotation = t; - this.labelRotation = C(q, h); - return d; - }, - getSlotWidth: function() { - var a = this.chart, - b = this.horiz, - c = this.options.labels, - d = Math.max( - this.tickPositions.length - (this.categories ? 0 : 1), - 1, - ), - k = a.margin[3]; - return ( - (b && - 2 > (c.step || 0) && - !c.rotation && - ((this.staggerLines || 1) * this.len) / d) || - (!b && - ((c.style && parseInt(c.style.width, 10)) || - (k && k - a.spacing[3]) || - 0.33 * a.chartWidth)) - ); - }, - renderUnsquish: function() { - var a = this.chart, - b = a.renderer, - c = this.tickPositions, - d = this.ticks, - k = this.options.labels, - q = this.horiz, - h = this.getSlotWidth(), - m = Math.max(1, Math.round(h - 2 * (k.padding || 5))), - z = {}, - A = this.labelMetrics(), - t = k.style && k.style.textOverflow, - f, - F = 0, - l, - B; - I(k.rotation) || (z.rotation = k.rotation || 0); - e(c, function(a) { - (a = d[a]) && a.labelLength > F && (F = a.labelLength); - }); - this.maxLabelLength = F; - if (this.autoRotation) - F > m && F > A.h - ? (z.rotation = this.labelRotation) - : (this.labelRotation = 0); - else if (h && ((f = { width: m + 'px' }), !t)) - for (f.textOverflow = 'clip', l = c.length; !q && l--; ) - if (((B = c[l]), (m = d[B].label))) - m.styles && 'ellipsis' === m.styles.textOverflow - ? m.css({ textOverflow: 'clip' }) - : d[B].labelLength > h && m.css({ width: h + 'px' }), - m.getBBox().height > this.len / c.length - (A.h - A.f) && - (m.specCss = { textOverflow: 'ellipsis' }); - z.rotation && - ((f = { - width: - (F > 0.5 * a.chartHeight ? 0.33 * a.chartHeight : a.chartHeight) + - 'px', - }), - t || (f.textOverflow = 'ellipsis')); - if ( - (this.labelAlign = k.align || this.autoLabelAlign(this.labelRotation)) - ) - z.align = this.labelAlign; - e(c, function(a) { - var b = (a = d[a]) && a.label; - b && - (b.attr(z), - f && b.css(x(f, b.specCss)), - delete b.specCss, - (a.rotation = z.rotation)); - }); - this.tickRotCorr = b.rotCorr( - A.b, - this.labelRotation || 0, - 0 !== this.side, - ); - }, - hasData: function() { - return ( - this.hasVisibleSeries || - (n(this.min) && - n(this.max) && - this.tickPositions && - 0 < this.tickPositions.length) - ); - }, - addTitle: function(a) { - var b = this.chart.renderer, - g = this.horiz, - c = this.opposite, - d = this.options.title, - k; - this.axisTitle || - ((k = d.textAlign) || - (k = (g - ? { low: 'left', middle: 'center', high: 'right' } - : { - low: c ? 'right' : 'left', - middle: 'center', - high: c ? 'left' : 'right', - })[d.align]), - (this.axisTitle = b - .text(d.text, 0, 0, d.useHTML) - .attr({ zIndex: 7, rotation: d.rotation || 0, align: k }) - .addClass('highcharts-axis-title') - .css(d.style) - .add(this.axisGroup)), - (this.axisTitle.isNew = !0)); - d.style.width || - this.isRadial || - this.axisTitle.css({ width: this.len }); - this.axisTitle[a ? 'show' : 'hide'](!0); - }, - generateTick: function(a) { - var b = this.ticks; - b[a] ? b[a].addLabel() : (b[a] = new F(this, a)); - }, - getOffset: function() { - var a = this, - b = a.chart, - c = b.renderer, - d = a.options, - k = a.tickPositions, - q = a.ticks, - h = a.horiz, - m = a.side, - z = b.inverted && !a.isZAxis ? [1, 0, 3, 2][m] : m, - A, - x, - f = 0, - F, - l = 0, - B = d.title, - u = d.labels, - G = 0, - p = b.axisOffset, - b = b.clipOffset, - I = [-1, 1, 1, -1][m], - r = d.className, - w = a.axisParent, - K = this.tickSize('tick'); - A = a.hasData(); - a.showAxis = x = A || C(d.showEmpty, !0); - a.staggerLines = a.horiz && u.staggerLines; - a.axisGroup || - ((a.gridGroup = c - .g('grid') - .attr({ zIndex: d.gridZIndex || 1 }) - .addClass( - 'highcharts-' + this.coll.toLowerCase() + '-grid ' + (r || ''), - ) - .add(w)), - (a.axisGroup = c - .g('axis') - .attr({ zIndex: d.zIndex || 2 }) - .addClass('highcharts-' + this.coll.toLowerCase() + ' ' + (r || '')) - .add(w)), - (a.labelGroup = c - .g('axis-labels') - .attr({ zIndex: u.zIndex || 7 }) - .addClass( - 'highcharts-' + a.coll.toLowerCase() + '-labels ' + (r || ''), - ) - .add(w))); - A || a.isLinked - ? (e(k, function(b, c) { - a.generateTick(b, c); - }), - a.renderUnsquish(), - (a.reserveSpaceDefault = - 0 === m || - 2 === m || - { 1: 'left', 3: 'right' }[m] === a.labelAlign), - C( - u.reserveSpace, - 'center' === a.labelAlign ? !0 : null, - a.reserveSpaceDefault, - ) && - e(k, function(a) { - G = Math.max(q[a].getLabelSize(), G); - }), - a.staggerLines && (G *= a.staggerLines), - (a.labelOffset = G * (a.opposite ? -1 : 1))) - : t(q, function(a, b) { - a.destroy(); - delete q[b]; - }); - B && - B.text && - !1 !== B.enabled && - (a.addTitle(x), - x && - !1 !== B.reserveSpace && - ((a.titleOffset = f = a.axisTitle.getBBox()[ - h ? 'height' : 'width' - ]), - (F = B.offset), - (l = n(F) ? 0 : C(B.margin, h ? 5 : 10)))); - a.renderLine(); - a.offset = I * C(d.offset, p[m]); - a.tickRotCorr = a.tickRotCorr || { x: 0, y: 0 }; - c = 0 === m ? -a.labelMetrics().h : 2 === m ? a.tickRotCorr.y : 0; - l = Math.abs(G) + l; - G && (l = l - c + I * (h ? C(u.y, a.tickRotCorr.y + 8 * I) : u.x)); - a.axisTitleMargin = C(F, l); - p[m] = Math.max( - p[m], - a.axisTitleMargin + f + I * a.offset, - l, - A && k.length && K ? K[0] + I * a.offset : 0, - ); - d = d.offset ? 0 : 2 * Math.floor(a.axisLine.strokeWidth() / 2); - b[z] = Math.max(b[z], d); - }, - getLinePath: function(a) { - var b = this.chart, - c = this.opposite, - g = this.offset, - d = this.horiz, - k = this.left + (c ? this.width : 0) + g, - g = b.chartHeight - this.bottom - (c ? this.height : 0) + g; - c && (a *= -1); - return b.renderer.crispLine( - [ - 'M', - d ? this.left : k, - d ? g : this.top, - 'L', - d ? b.chartWidth - this.right : k, - d ? g : b.chartHeight - this.bottom, - ], - a, - ); - }, - renderLine: function() { - this.axisLine || - ((this.axisLine = this.chart.renderer - .path() - .addClass('highcharts-axis-line') - .add(this.axisGroup)), - this.axisLine.attr({ - stroke: this.options.lineColor, - 'stroke-width': this.options.lineWidth, - zIndex: 7, - })); - }, - getTitlePosition: function() { - var a = this.horiz, - b = this.left, - c = this.top, - d = this.len, - k = this.options.title, - q = a ? b : c, - e = this.opposite, - h = this.offset, - m = k.x || 0, - z = k.y || 0, - A = this.axisTitle, - t = this.chart.renderer.fontMetrics(k.style && k.style.fontSize, A), - A = Math.max(A.getBBox(null, 0).height - t.h - 1, 0), - d = { - low: q + (a ? 0 : d), - middle: q + d / 2, - high: q + (a ? d : 0), - }[k.align], - b = - (a ? c + this.height : b) + - (a ? 1 : -1) * (e ? -1 : 1) * this.axisTitleMargin + - [-A, A, t.f, -A][this.side]; - return { - x: a ? d + m : b + (e ? this.width : 0) + h + m, - y: a ? b + z - (e ? this.height : 0) + h : d + z, - }; - }, - renderMinorTick: function(a) { - var b = this.chart.hasRendered && B(this.oldMin), - c = this.minorTicks; - c[a] || (c[a] = new F(this, a, 'minor')); - b && c[a].isNew && c[a].render(null, !0); - c[a].render(null, !1, 1); - }, - renderTick: function(a, b) { - var c = this.isLinked, - g = this.ticks, - d = this.chart.hasRendered && B(this.oldMin); - if (!c || (a >= this.min && a <= this.max)) - g[a] || (g[a] = new F(this, a)), - d && g[a].isNew && g[a].render(b, !0, 0.1), - g[a].render(b); - }, - render: function() { - var b = this, - c = b.chart, - d = b.options, - k = b.isLog, - q = b.lin2log, - h = b.isLinked, - m = b.tickPositions, - z = b.axisTitle, - x = b.ticks, - f = b.minorTicks, - l = b.alternateBands, - C = d.stackLabels, - n = d.alternateGridColor, - u = b.tickmarkOffset, - G = b.axisLine, - p = b.showAxis, - I = D(c.renderer.globalAnimation), - r, - w; - b.labelEdge.length = 0; - b.overlap = !1; - e([x, f, l], function(a) { - t(a, function(a) { - a.isActive = !1; - }); - }); - if (b.hasData() || h) - b.minorTickInterval && - !b.categories && - e(b.getMinorTickPositions(), function(a) { - b.renderMinorTick(a); - }), - m.length && - (e(m, function(a, c) { - b.renderTick(a, c); - }), - u && - (0 === b.min || b.single) && - (x[-1] || (x[-1] = new F(b, -1, null, !0)), x[-1].render(-1))), - n && - e(m, function(d, g) { - w = void 0 !== m[g + 1] ? m[g + 1] + u : b.max - u; - 0 === g % 2 && - d < b.max && - w <= b.max + (c.polar ? -u : u) && - (l[d] || (l[d] = new a.PlotLineOrBand(b)), - (r = d + u), - (l[d].options = { - from: k ? q(r) : r, - to: k ? q(w) : w, - color: n, - }), - l[d].render(), - (l[d].isActive = !0)); - }), - b._addedPlotLB || - (e((d.plotLines || []).concat(d.plotBands || []), function(a) { - b.addPlotBandOrLine(a); - }), - (b._addedPlotLB = !0)); - e([x, f, l], function(a) { - var b, - d = [], - g = I.duration; - t(a, function(a, b) { - a.isActive || (a.render(b, !1, 0), (a.isActive = !1), d.push(b)); - }); - A( - function() { - for (b = d.length; b--; ) - a[d[b]] && - !a[d[b]].isActive && - (a[d[b]].destroy(), delete a[d[b]]); - }, - a !== l && c.hasRendered && g ? g : 0, - ); - }); - G && - (G[G.isPlaced ? 'animate' : 'attr']({ - d: this.getLinePath(G.strokeWidth()), - }), - (G.isPlaced = !0), - G[p ? 'show' : 'hide'](!0)); - z && - p && - ((d = b.getTitlePosition()), - B(d.y) - ? (z[z.isNew ? 'attr' : 'animate'](d), (z.isNew = !1)) - : (z.attr('y', -9999), (z.isNew = !0))); - C && C.enabled && b.renderStackTotals(); - b.isDirty = !1; - }, - redraw: function() { - this.visible && - (this.render(), - e(this.plotLinesAndBands, function(a) { - a.render(); - })); - e(this.series, function(a) { - a.isDirty = !0; - }); - }, - keepProps: 'extKey hcEvents names series userMax userMin'.split(' '), - destroy: function(a) { - var b = this, - c = b.stacks, - d = b.plotLinesAndBands, - g; - a || N(b); - t(c, function(a, b) { - u(a); - c[b] = null; - }); - e([b.ticks, b.minorTicks, b.alternateBands], function(a) { - u(a); - }); - if (d) for (a = d.length; a--; ) d[a].destroy(); - e( - 'stackTotalGroup axisLine axisTitle axisGroup gridGroup labelGroup cross'.split( - ' ', - ), - function(a) { - b[a] && (b[a] = b[a].destroy()); - }, - ); - for (g in b.plotLinesAndBandsGroups) - b.plotLinesAndBandsGroups[g] = b.plotLinesAndBandsGroups[g].destroy(); - t(b, function(a, c) { - -1 === k(c, b.keepProps) && delete b[c]; - }); - }, - drawCrosshair: function(a, b) { - var c, - d = this.crosshair, - g = C(d.snap, !0), - k, - q = this.cross; - a || (a = this.cross && this.cross.e); - this.crosshair && !1 !== (n(b) || !g) - ? (g - ? n(b) && (k = this.isXAxis ? b.plotX : this.len - b.plotY) - : (k = - a && - (this.horiz - ? a.chartX - this.pos - : this.len - a.chartY + this.pos)), - n(k) && - (c = - this.getPlotLinePath( - b && (this.isXAxis ? b.x : C(b.stackY, b.y)), - null, - null, - null, - k, - ) || null), - n(c) - ? ((b = this.categories && !this.isRadial), - q || - ((this.cross = q = this.chart.renderer - .path() - .addClass( - 'highcharts-crosshair highcharts-crosshair-' + - (b ? 'category ' : 'thin ') + - d.className, - ) - .attr({ zIndex: C(d.zIndex, 2) }) - .add()), - q - .attr({ - stroke: - d.color || - (b - ? f('#ccd6eb') - .setOpacity(0.25) - .get() - : '#cccccc'), - 'stroke-width': C(d.width, 1), - }) - .css({ 'pointer-events': 'none' }), - d.dashStyle && q.attr({ dashstyle: d.dashStyle })), - q.show().attr({ d: c }), - b && !d.width && q.attr({ 'stroke-width': this.transA }), - (this.cross.e = a)) - : this.hideCrosshair()) - : this.hideCrosshair(); - }, - hideCrosshair: function() { - this.cross && this.cross.hide(); - }, - }); - return (a.Axis = G); - })(M); - (function(a) { - var E = a.Axis, - D = a.Date, - H = a.dateFormat, - p = a.defaultOptions, - f = a.defined, - l = a.each, - r = a.extend, - n = a.getMagnitude, - w = a.getTZOffset, - u = a.normalizeTickInterval, - e = a.pick, - h = a.timeUnits; - E.prototype.getTimeTicks = function(a, d, c, b) { - var k = [], - m = {}, - B = p.global.useUTC, - n, - x = new D(d - Math.max(w(d), w(c))), - u = D.hcMakeTime, - t = a.unitRange, - C = a.count, - N, - q; - if (f(d)) { - x[D.hcSetMilliseconds]( - t >= h.second ? 0 : C * Math.floor(x.getMilliseconds() / C), - ); - if (t >= h.second) - x[D.hcSetSeconds]( - t >= h.minute ? 0 : C * Math.floor(x.getSeconds() / C), - ); - if (t >= h.minute) - x[D.hcSetMinutes]( - t >= h.hour ? 0 : C * Math.floor(x[D.hcGetMinutes]() / C), - ); - if (t >= h.hour) - x[D.hcSetHours]( - t >= h.day ? 0 : C * Math.floor(x[D.hcGetHours]() / C), - ); - if (t >= h.day) - x[D.hcSetDate]( - t >= h.month ? 1 : C * Math.floor(x[D.hcGetDate]() / C), - ); - t >= h.month && - (x[D.hcSetMonth]( - t >= h.year ? 0 : C * Math.floor(x[D.hcGetMonth]() / C), - ), - (n = x[D.hcGetFullYear]())); - if (t >= h.year) x[D.hcSetFullYear](n - (n % C)); - if (t === h.week) - x[D.hcSetDate](x[D.hcGetDate]() - x[D.hcGetDay]() + e(b, 1)); - n = x[D.hcGetFullYear](); - b = x[D.hcGetMonth](); - var A = x[D.hcGetDate](), - F = x[D.hcGetHours](); - d = x.getTime(); - D.hcHasTimeZone && - ((q = - (!B || !!D.hcGetTimezoneOffset) && - (c - d > 4 * h.month || w(d) !== w(c))), - (N = w(x)), - (x = new D(d + N))); - B = x.getTime(); - for (d = 1; B < c; ) - k.push(B), - (B = - t === h.year - ? u(n + d * C, 0) - : t === h.month - ? u(n, b + d * C) - : !q || (t !== h.day && t !== h.week) - ? q && t === h.hour - ? u(n, b, A, F + d * C, 0, 0, N) - N - : B + t * C - : u(n, b, A + d * C * (t === h.day ? 1 : 7))), - d++; - k.push(B); - t <= h.hour && - 1e4 > k.length && - l(k, function(a) { - 0 === a % 18e5 && - '000000000' === H('%H%M%S%L', a) && - (m[a] = 'day'); - }); - } - k.info = r(a, { higherRanks: m, totalRange: t * C }); - return k; - }; - E.prototype.normalizeTimeTickInterval = function(a, d) { - var c = d || [ - ['millisecond', [1, 2, 5, 10, 20, 25, 50, 100, 200, 500]], - ['second', [1, 2, 5, 10, 15, 30]], - ['minute', [1, 2, 5, 10, 15, 30]], - ['hour', [1, 2, 3, 4, 6, 8, 12]], - ['day', [1, 2]], - ['week', [1, 2]], - ['month', [1, 2, 3, 4, 6]], - ['year', null], - ]; - d = c[c.length - 1]; - var b = h[d[0]], - k = d[1], - e; - for ( - e = 0; - e < c.length && - !((d = c[e]), - (b = h[d[0]]), - (k = d[1]), - c[e + 1] && a <= (b * k[k.length - 1] + h[c[e + 1][0]]) / 2); - e++ - ); - b === h.year && a < 5 * b && (k = [1, 2, 5]); - a = u(a / b, k, 'year' === d[0] ? Math.max(n(a / b), 1) : 1); - return { unitRange: b, count: a, unitName: d[0] }; - }; - })(M); - (function(a) { - var E = a.Axis, - D = a.getMagnitude, - H = a.map, - p = a.normalizeTickInterval, - f = a.pick; - E.prototype.getLogTickPositions = function(a, r, n, w) { - var l = this.options, - e = this.len, - h = this.lin2log, - m = this.log2lin, - d = []; - w || (this._minorAutoInterval = null); - if (0.5 <= a) - (a = Math.round(a)), (d = this.getLinearTickPositions(a, r, n)); - else if (0.08 <= a) - for ( - var e = Math.floor(r), - c, - b, - k, - z, - B, - l = - 0.3 < a - ? [1, 2, 4] - : 0.15 < a - ? [1, 2, 4, 6, 8] - : [1, 2, 3, 4, 5, 6, 7, 8, 9]; - e < n + 1 && !B; - e++ - ) - for (b = l.length, c = 0; c < b && !B; c++) - (k = m(h(e) * l[c])), - k > r && (!w || z <= n) && void 0 !== z && d.push(z), - z > n && (B = !0), - (z = k); - else - (r = h(r)), - (n = h(n)), - (a = w ? this.getMinorTickInterval() : l.tickInterval), - (a = f( - 'auto' === a ? null : a, - this._minorAutoInterval, - ((l.tickPixelInterval / (w ? 5 : 1)) * (n - r)) / - ((w ? e / this.tickPositions.length : e) || 1), - )), - (a = p(a, null, D(a))), - (d = H(this.getLinearTickPositions(a, r, n), m)), - w || (this._minorAutoInterval = a / 5); - w || (this.tickInterval = a); - return d; - }; - E.prototype.log2lin = function(a) { - return Math.log(a) / Math.LN10; - }; - E.prototype.lin2log = function(a) { - return Math.pow(10, a); - }; - })(M); - (function(a, E) { - var D = a.arrayMax, - H = a.arrayMin, - p = a.defined, - f = a.destroyObjectProperties, - l = a.each, - r = a.erase, - n = a.merge, - w = a.pick; - a.PlotLineOrBand = function(a, e) { - this.axis = a; - e && ((this.options = e), (this.id = e.id)); - }; - a.PlotLineOrBand.prototype = { - render: function() { - var f = this, - e = f.axis, - h = e.horiz, - m = f.options, - d = m.label, - c = f.label, - b = m.to, - k = m.from, - z = m.value, - l = p(k) && p(b), - r = p(z), - x = f.svgElem, - K = !x, - t = [], - C = m.color, - N = w(m.zIndex, 0), - q = m.events, - t = { - class: - 'highcharts-plot-' + - (l ? 'band ' : 'line ') + - (m.className || ''), - }, - A = {}, - F = e.chart.renderer, - G = l ? 'bands' : 'lines', - g = e.log2lin; - e.isLog && ((k = g(k)), (b = g(b)), (z = g(z))); - r - ? ((t = { stroke: C, 'stroke-width': m.width }), - m.dashStyle && (t.dashstyle = m.dashStyle)) - : l && - (C && (t.fill = C), - m.borderWidth && - ((t.stroke = m.borderColor), - (t['stroke-width'] = m.borderWidth))); - A.zIndex = N; - G += '-' + N; - (C = e.plotLinesAndBandsGroups[G]) || - (e.plotLinesAndBandsGroups[G] = C = F.g('plot-' + G) - .attr(A) - .add()); - K && - (f.svgElem = x = F.path() - .attr(t) - .add(C)); - if (r) t = e.getPlotLinePath(z, x.strokeWidth()); - else if (l) t = e.getPlotBandPath(k, b, m); - else return; - K && t && t.length - ? (x.attr({ d: t }), - q && - a.objectEach(q, function(a, b) { - x.on(b, function(a) { - q[b].apply(f, [a]); - }); - })) - : x && - (t - ? (x.show(), x.animate({ d: t })) - : (x.hide(), c && (f.label = c = c.destroy()))); - d && - p(d.text) && - t && - t.length && - 0 < e.width && - 0 < e.height && - !t.flat - ? ((d = n( - { - align: h && l && 'center', - x: h ? !l && 4 : 10, - verticalAlign: !h && l && 'middle', - y: h ? (l ? 16 : 10) : l ? 6 : -4, - rotation: h && !l && 90, - }, - d, - )), - this.renderLabel(d, t, l, N)) - : c && c.hide(); - return f; - }, - renderLabel: function(a, e, h, m) { - var d = this.label, - c = this.axis.chart.renderer; - d || - ((d = { - align: a.textAlign || a.align, - rotation: a.rotation, - class: - 'highcharts-plot-' + - (h ? 'band' : 'line') + - '-label ' + - (a.className || ''), - }), - (d.zIndex = m), - (this.label = d = c - .text(a.text, 0, 0, a.useHTML) - .attr(d) - .add()), - d.css(a.style)); - m = e.xBounds || [e[1], e[4], h ? e[6] : e[1]]; - e = e.yBounds || [e[2], e[5], h ? e[7] : e[2]]; - h = H(m); - c = H(e); - d.align(a, !1, { x: h, y: c, width: D(m) - h, height: D(e) - c }); - d.show(); - }, - destroy: function() { - r(this.axis.plotLinesAndBands, this); - delete this.axis; - f(this); - }, - }; - a.extend(E.prototype, { - getPlotBandPath: function(a, e) { - var h = this.getPlotLinePath(e, null, null, !0), - m = this.getPlotLinePath(a, null, null, !0), - d = [], - c = this.horiz, - b = 1, - k; - a = (a < this.min && e < this.min) || (a > this.max && e > this.max); - if (m && h) - for ( - a && ((k = m.toString() === h.toString()), (b = 0)), a = 0; - a < m.length; - a += 6 - ) - c && h[a + 1] === m[a + 1] - ? ((h[a + 1] += b), (h[a + 4] += b)) - : c || - h[a + 2] !== m[a + 2] || - ((h[a + 2] += b), (h[a + 5] += b)), - d.push( - 'M', - m[a + 1], - m[a + 2], - 'L', - m[a + 4], - m[a + 5], - h[a + 4], - h[a + 5], - h[a + 1], - h[a + 2], - 'z', - ), - (d.flat = k); - return d; - }, - addPlotBand: function(a) { - return this.addPlotBandOrLine(a, 'plotBands'); - }, - addPlotLine: function(a) { - return this.addPlotBandOrLine(a, 'plotLines'); - }, - addPlotBandOrLine: function(f, e) { - var h = new a.PlotLineOrBand(this, f).render(), - m = this.userOptions; - h && - (e && ((m[e] = m[e] || []), m[e].push(f)), - this.plotLinesAndBands.push(h)); - return h; - }, - removePlotBandOrLine: function(a) { - for ( - var e = this.plotLinesAndBands, - h = this.options, - m = this.userOptions, - d = e.length; - d--; - - ) - e[d].id === a && e[d].destroy(); - l( - [ - h.plotLines || [], - m.plotLines || [], - h.plotBands || [], - m.plotBands || [], - ], - function(c) { - for (d = c.length; d--; ) c[d].id === a && r(c, c[d]); - }, - ); - }, - removePlotBand: function(a) { - this.removePlotBandOrLine(a); - }, - removePlotLine: function(a) { - this.removePlotBandOrLine(a); - }, - }); - })(M, V); - (function(a) { - var E = a.dateFormat, - D = a.each, - H = a.extend, - p = a.format, - f = a.isNumber, - l = a.map, - r = a.merge, - n = a.pick, - w = a.splat, - u = a.syncTimeout, - e = a.timeUnits; - a.Tooltip = function() { - this.init.apply(this, arguments); - }; - a.Tooltip.prototype = { - init: function(a, e) { - this.chart = a; - this.options = e; - this.crosshairs = []; - this.now = { x: 0, y: 0 }; - this.isHidden = !0; - this.split = e.split && !a.inverted; - this.shared = e.shared || this.split; - }, - cleanSplit: function(a) { - D(this.chart.series, function(e) { - var d = e && e.tt; - d && (!d.isActive || a ? (e.tt = d.destroy()) : (d.isActive = !1)); - }); - }, - getLabel: function() { - var a = this.chart.renderer, - e = this.options; - this.label || - (this.split - ? (this.label = a.g('tooltip')) - : ((this.label = a - .label( - '', - 0, - 0, - e.shape || 'callout', - null, - null, - e.useHTML, - null, - 'tooltip', - ) - .attr({ padding: e.padding, r: e.borderRadius })), - this.label - .attr({ - fill: e.backgroundColor, - 'stroke-width': e.borderWidth, - }) - .css(e.style) - .shadow(e.shadow)), - this.label.attr({ zIndex: 8 }).add()); - return this.label; - }, - update: function(a) { - this.destroy(); - r(!0, this.chart.options.tooltip.userOptions, a); - this.init(this.chart, r(!0, this.options, a)); - }, - destroy: function() { - this.label && (this.label = this.label.destroy()); - this.split && - this.tt && - (this.cleanSplit(this.chart, !0), (this.tt = this.tt.destroy())); - clearTimeout(this.hideTimer); - clearTimeout(this.tooltipTimeout); - }, - move: function(a, e, d, c) { - var b = this, - k = b.now, - h = - !1 !== b.options.animation && - !b.isHidden && - (1 < Math.abs(a - k.x) || 1 < Math.abs(e - k.y)), - m = b.followPointer || 1 < b.len; - H(k, { - x: h ? (2 * k.x + a) / 3 : a, - y: h ? (k.y + e) / 2 : e, - anchorX: m ? void 0 : h ? (2 * k.anchorX + d) / 3 : d, - anchorY: m ? void 0 : h ? (k.anchorY + c) / 2 : c, - }); - b.getLabel().attr(k); - h && - (clearTimeout(this.tooltipTimeout), - (this.tooltipTimeout = setTimeout(function() { - b && b.move(a, e, d, c); - }, 32))); - }, - hide: function(a) { - var e = this; - clearTimeout(this.hideTimer); - a = n(a, this.options.hideDelay, 500); - this.isHidden || - (this.hideTimer = u(function() { - e.getLabel()[a ? 'fadeOut' : 'hide'](); - e.isHidden = !0; - }, a)); - }, - getAnchor: function(a, e) { - var d, - c = this.chart, - b = c.inverted, - k = c.plotTop, - h = c.plotLeft, - m = 0, - f = 0, - x, - n; - a = w(a); - d = a[0].tooltipPos; - this.followPointer && - e && - (void 0 === e.chartX && (e = c.pointer.normalize(e)), - (d = [e.chartX - c.plotLeft, e.chartY - k])); - d || - (D(a, function(a) { - x = a.series.yAxis; - n = a.series.xAxis; - m += a.plotX + (!b && n ? n.left - h : 0); - f += - (a.plotLow ? (a.plotLow + a.plotHigh) / 2 : a.plotY) + - (!b && x ? x.top - k : 0); - }), - (m /= a.length), - (f /= a.length), - (d = [ - b ? c.plotWidth - f : m, - this.shared && !b && 1 < a.length && e - ? e.chartY - k - : b - ? c.plotHeight - m - : f, - ])); - return l(d, Math.round); - }, - getPosition: function(a, e, d) { - var c = this.chart, - b = this.distance, - k = {}, - h = (c.inverted && d.h) || 0, - m, - f = [ - 'y', - c.chartHeight, - e, - d.plotY + c.plotTop, - c.plotTop, - c.plotTop + c.plotHeight, - ], - x = [ - 'x', - c.chartWidth, - a, - d.plotX + c.plotLeft, - c.plotLeft, - c.plotLeft + c.plotWidth, - ], - l = !this.followPointer && n(d.ttBelow, !c.inverted === !!d.negative), - t = function(a, c, d, g, e, q) { - var m = d < g - b, - z = g + b + d < c, - A = g - b - d; - g += b; - if (l && z) k[a] = g; - else if (!l && m) k[a] = A; - else if (m) k[a] = Math.min(q - d, 0 > A - h ? A : A - h); - else if (z) k[a] = Math.max(e, g + h + d > c ? g : g + h); - else return !1; - }, - C = function(a, c, d, g) { - var e; - g < b || g > c - b - ? (e = !1) - : (k[a] = g < d / 2 ? 1 : g > c - d / 2 ? c - d - 2 : g - d / 2); - return e; - }, - p = function(a) { - var b = f; - f = x; - x = b; - m = a; - }, - q = function() { - !1 !== t.apply(0, f) - ? !1 !== C.apply(0, x) || m || (p(!0), q()) - : m - ? (k.x = k.y = 0) - : (p(!0), q()); - }; - (c.inverted || 1 < this.len) && p(); - q(); - return k; - }, - defaultFormatter: function(a) { - var e = this.points || w(this), - d; - d = [a.tooltipFooterHeaderFormatter(e[0])]; - d = d.concat(a.bodyFormatter(e)); - d.push(a.tooltipFooterHeaderFormatter(e[0], !0)); - return d; - }, - refresh: function(a, e) { - var d, - c = this.options, - b, - k = a, - h, - m = {}, - f = []; - d = c.formatter || this.defaultFormatter; - var m = this.shared, - x; - c.enabled && - (clearTimeout(this.hideTimer), - (this.followPointer = w(k)[0].series.tooltipOptions.followPointer), - (h = this.getAnchor(k, e)), - (e = h[0]), - (b = h[1]), - !m || (k.series && k.series.noSharedTooltip) - ? (m = k.getLabelConfig()) - : (D(k, function(a) { - a.setState('hover'); - f.push(a.getLabelConfig()); - }), - (m = { x: k[0].category, y: k[0].y }), - (m.points = f), - (k = k[0])), - (this.len = f.length), - (m = d.call(m, this)), - (x = k.series), - (this.distance = n(x.tooltipOptions.distance, 16)), - !1 === m - ? this.hide() - : ((d = this.getLabel()), - this.isHidden && d.attr({ opacity: 1 }).show(), - this.split - ? this.renderSplit(m, w(a)) - : (c.style.width || - d.css({ width: this.chart.spacingBox.width }), - d.attr({ text: m && m.join ? m.join('') : m }), - d - .removeClass(/highcharts-color-[\d]+/g) - .addClass( - 'highcharts-color-' + n(k.colorIndex, x.colorIndex), - ), - d.attr({ - stroke: c.borderColor || k.color || x.color || '#666666', - }), - this.updatePosition({ - plotX: e, - plotY: b, - negative: k.negative, - ttBelow: k.ttBelow, - h: h[2] || 0, - })), - (this.isHidden = !1))); - }, - renderSplit: function(e, m) { - var d = this, - c = [], - b = this.chart, - k = b.renderer, - h = !0, - f = this.options, - l = 0, - x = this.getLabel(); - a.isString(e) && (e = [!1, e]); - D(e.slice(0, m.length + 1), function(a, e) { - if (!1 !== a) { - e = m[e - 1] || { isHeader: !0, plotX: m[0].plotX }; - var z = e.series || d, - t = z.tt, - q = e.series || {}, - A = 'highcharts-color-' + n(e.colorIndex, q.colorIndex, 'none'); - t || - (z.tt = t = k - .label(null, null, null, 'callout', null, null, f.useHTML) - .addClass('highcharts-tooltip-box ' + A) - .attr({ - padding: f.padding, - r: f.borderRadius, - fill: f.backgroundColor, - stroke: f.borderColor || e.color || q.color || '#333333', - 'stroke-width': f.borderWidth, - }) - .add(x)); - t.isActive = !0; - t.attr({ text: a }); - t.css(f.style).shadow(f.shadow); - a = t.getBBox(); - q = a.width + t.strokeWidth(); - e.isHeader - ? ((l = a.height), - (q = Math.max( - 0, - Math.min(e.plotX + b.plotLeft - q / 2, b.chartWidth - q), - ))) - : (q = e.plotX + b.plotLeft - n(f.distance, 16) - q); - 0 > q && (h = !1); - a = - (e.series && e.series.yAxis && e.series.yAxis.pos) + - (e.plotY || 0); - a -= b.plotTop; - c.push({ - target: e.isHeader ? b.plotHeight + l : a, - rank: e.isHeader ? 1 : 0, - size: z.tt.getBBox().height + 1, - point: e, - x: q, - tt: t, - }); - } - }); - this.cleanSplit(); - a.distribute(c, b.plotHeight + l); - D(c, function(a) { - var c = a.point, - d = c.series; - a.tt.attr({ - visibility: void 0 === a.pos ? 'hidden' : 'inherit', - x: h || c.isHeader ? a.x : c.plotX + b.plotLeft + n(f.distance, 16), - y: a.pos + b.plotTop, - anchorX: c.isHeader ? c.plotX + b.plotLeft : c.plotX + d.xAxis.pos, - anchorY: c.isHeader - ? a.pos + b.plotTop - 15 - : c.plotY + d.yAxis.pos, - }); - }); - }, - updatePosition: function(a) { - var e = this.chart, - d = this.getLabel(), - d = (this.options.positioner || this.getPosition).call( - this, - d.width, - d.height, - a, - ); - this.move( - Math.round(d.x), - Math.round(d.y || 0), - a.plotX + e.plotLeft, - a.plotY + e.plotTop, - ); - }, - getDateFormat: function(a, m, d, c) { - var b = E('%m-%d %H:%M:%S.%L', m), - k, - h, - f = { millisecond: 15, second: 12, minute: 9, hour: 6, day: 3 }, - l = 'millisecond'; - for (h in e) { - if ( - a === e.week && - +E('%w', m) === d && - '00:00:00.000' === b.substr(6) - ) { - h = 'week'; - break; - } - if (e[h] > a) { - h = l; - break; - } - if (f[h] && b.substr(f[h]) !== '01-01 00:00:00.000'.substr(f[h])) - break; - 'week' !== h && (l = h); - } - h && (k = c[h]); - return k; - }, - getXDateFormat: function(a, e, d) { - e = e.dateTimeLabelFormats; - var c = d && d.closestPointRange; - return ( - (c ? this.getDateFormat(c, a.x, d.options.startOfWeek, e) : e.day) || - e.year - ); - }, - tooltipFooterHeaderFormatter: function(a, e) { - e = e ? 'footer' : 'header'; - var d = a.series, - c = d.tooltipOptions, - b = c.xDateFormat, - k = d.xAxis, - h = k && 'datetime' === k.options.type && f(a.key), - m = c[e + 'Format']; - h && !b && (b = this.getXDateFormat(a, c, k)); - h && - b && - D((a.point && a.point.tooltipDateKeys) || ['key'], function(a) { - m = m.replace('{point.' + a + '}', '{point.' + a + ':' + b + '}'); - }); - return p(m, { point: a, series: d }); - }, - bodyFormatter: function(a) { - return l(a, function(a) { - var d = a.series.tooltipOptions; - return ( - d[(a.point.formatPrefix || 'point') + 'Formatter'] || - a.point.tooltipFormatter - ).call(a.point, d[(a.point.formatPrefix || 'point') + 'Format']); - }); - }, - }; - })(M); - (function(a) { - var E = a.addEvent, - D = a.attr, - H = a.charts, - p = a.color, - f = a.css, - l = a.defined, - r = a.each, - n = a.extend, - w = a.find, - u = a.fireEvent, - e = a.isObject, - h = a.offset, - m = a.pick, - d = a.splat, - c = a.Tooltip; - a.Pointer = function(a, c) { - this.init(a, c); - }; - a.Pointer.prototype = { - init: function(a, d) { - this.options = d; - this.chart = a; - this.runChartClick = d.chart.events && !!d.chart.events.click; - this.pinchDown = []; - this.lastValidTouch = {}; - c && - ((a.tooltip = new c(a, d.tooltip)), - (this.followTouchMove = m(d.tooltip.followTouchMove, !0))); - this.setDOMEvents(); - }, - zoomOption: function(a) { - var b = this.chart, - c = b.options.chart, - d = c.zoomType || '', - b = b.inverted; - /touch/.test(a.type) && (d = m(c.pinchType, d)); - this.zoomX = a = /x/.test(d); - this.zoomY = d = /y/.test(d); - this.zoomHor = (a && !b) || (d && b); - this.zoomVert = (d && !b) || (a && b); - this.hasZoom = a || d; - }, - normalize: function(a, c) { - var b; - b = a.touches - ? a.touches.length - ? a.touches.item(0) - : a.changedTouches[0] - : a; - c || (this.chartPosition = c = h(this.chart.container)); - return n(a, { - chartX: Math.round(b.pageX - c.left), - chartY: Math.round(b.pageY - c.top), - }); - }, - getCoordinates: function(a) { - var b = { xAxis: [], yAxis: [] }; - r(this.chart.axes, function(c) { - b[c.isXAxis ? 'xAxis' : 'yAxis'].push({ - axis: c, - value: c.toValue(a[c.horiz ? 'chartX' : 'chartY']), - }); - }); - return b; - }, - findNearestKDPoint: function(a, c, d) { - var b; - r(a, function(a) { - var k = - !(a.noSharedTooltip && c) && - 0 > a.options.findNearestPointBy.indexOf('y'); - a = a.searchPoint(d, k); - if ((k = e(a, !0)) && !(k = !e(b, !0))) - var k = b.distX - a.distX, - h = b.dist - a.dist, - m = - (a.series.group && a.series.group.zIndex) - - (b.series.group && b.series.group.zIndex), - k = - 0 < - (0 !== k && c - ? k - : 0 !== h - ? h - : 0 !== m - ? m - : b.series.index > a.series.index - ? -1 - : 1); - k && (b = a); - }); - return b; - }, - getPointFromEvent: function(a) { - a = a.target; - for (var b; a && !b; ) (b = a.point), (a = a.parentNode); - return b; - }, - getChartCoordinatesFromPoint: function(a, c) { - var b = a.series, - d = b.xAxis, - b = b.yAxis, - k = m(a.clientX, a.plotX); - if (d && b) - return c - ? { chartX: d.len + d.pos - k, chartY: b.len + b.pos - a.plotY } - : { chartX: k + d.pos, chartY: a.plotY + b.pos }; - }, - getHoverData: function(b, c, d, h, f, l, n) { - var k, - z = [], - x = n && n.isBoosting; - h = !(!h || !b); - n = - c && !c.stickyTracking - ? [c] - : a.grep(d, function(a) { - return ( - a.visible && - !(!f && a.directTouch) && - m(a.options.enableMouseTracking, !0) && - a.stickyTracking - ); - }); - c = (k = h ? b : this.findNearestKDPoint(n, f, l)) && k.series; - k && - (f && !c.noSharedTooltip - ? ((n = a.grep(d, function(a) { - return ( - a.visible && - !(!f && a.directTouch) && - m(a.options.enableMouseTracking, !0) && - !a.noSharedTooltip - ); - })), - r(n, function(a) { - var b = w(a.points, function(a) { - return a.x === k.x && !a.isNull; - }); - e(b) && (x && (b = a.getPoint(b)), z.push(b)); - })) - : z.push(k)); - return { hoverPoint: k, hoverSeries: c, hoverPoints: z }; - }, - runPointActions: function(b, c) { - var d = this.chart, - k = d.tooltip && d.tooltip.options.enabled ? d.tooltip : void 0, - e = k ? k.shared : !1, - h = c || d.hoverPoint, - f = (h && h.series) || d.hoverSeries, - f = this.getHoverData( - h, - f, - d.series, - !!c || (f && f.directTouch && this.isDirectTouch), - e, - b, - { isBoosting: d.isBoosting }, - ), - l, - h = f.hoverPoint; - l = f.hoverPoints; - c = (f = f.hoverSeries) && f.tooltipOptions.followPointer; - e = e && f && !f.noSharedTooltip; - if (h && (h !== d.hoverPoint || (k && k.isHidden))) { - r(d.hoverPoints || [], function(b) { - -1 === a.inArray(b, l) && b.setState(); - }); - r(l || [], function(a) { - a.setState('hover'); - }); - if (d.hoverSeries !== f) f.onMouseOver(); - d.hoverPoint && d.hoverPoint.firePointEvent('mouseOut'); - if (!h.series) return; - h.firePointEvent('mouseOver'); - d.hoverPoints = l; - d.hoverPoint = h; - k && k.refresh(e ? l : h, b); - } else - c && - k && - !k.isHidden && - ((h = k.getAnchor([{}], b)), - k.updatePosition({ plotX: h[0], plotY: h[1] })); - this.unDocMouseMove || - (this.unDocMouseMove = E( - d.container.ownerDocument, - 'mousemove', - function(b) { - var c = H[a.hoverChartIndex]; - if (c) c.pointer.onDocumentMouseMove(b); - }, - )); - r(d.axes, function(c) { - var d = m(c.crosshair.snap, !0), - k = d - ? a.find(l, function(a) { - return a.series[c.coll] === c; - }) - : void 0; - k || !d ? c.drawCrosshair(b, k) : c.hideCrosshair(); - }); - }, - reset: function(a, c) { - var b = this.chart, - k = b.hoverSeries, - e = b.hoverPoint, - h = b.hoverPoints, - m = b.tooltip, - f = m && m.shared ? h : e; - a && - f && - r(d(f), function(b) { - b.series.isCartesian && void 0 === b.plotX && (a = !1); - }); - if (a) - m && - f && - (m.refresh(f), - e && - (e.setState(e.state, !0), - r(b.axes, function(a) { - a.crosshair && a.drawCrosshair(null, e); - }))); - else { - if (e) e.onMouseOut(); - h && - r(h, function(a) { - a.setState(); - }); - if (k) k.onMouseOut(); - m && m.hide(c); - this.unDocMouseMove && (this.unDocMouseMove = this.unDocMouseMove()); - r(b.axes, function(a) { - a.hideCrosshair(); - }); - this.hoverX = b.hoverPoints = b.hoverPoint = null; - } - }, - scaleGroups: function(a, c) { - var b = this.chart, - d; - r(b.series, function(k) { - d = a || k.getPlotBox(); - k.xAxis && - k.xAxis.zoomEnabled && - k.group && - (k.group.attr(d), - k.markerGroup && - (k.markerGroup.attr(d), - k.markerGroup.clip(c ? b.clipRect : null)), - k.dataLabelsGroup && k.dataLabelsGroup.attr(d)); - }); - b.clipRect.attr(c || b.clipBox); - }, - dragStart: function(a) { - var b = this.chart; - b.mouseIsDown = a.type; - b.cancelClick = !1; - b.mouseDownX = this.mouseDownX = a.chartX; - b.mouseDownY = this.mouseDownY = a.chartY; - }, - drag: function(a) { - var b = this.chart, - c = b.options.chart, - d = a.chartX, - e = a.chartY, - h = this.zoomHor, - m = this.zoomVert, - f = b.plotLeft, - l = b.plotTop, - n = b.plotWidth, - q = b.plotHeight, - A, - F = this.selectionMarker, - G = this.mouseDownX, - g = this.mouseDownY, - v = c.panKey && a[c.panKey + 'Key']; - (F && F.touch) || - (d < f ? (d = f) : d > f + n && (d = f + n), - e < l ? (e = l) : e > l + q && (e = l + q), - (this.hasDragged = Math.sqrt( - Math.pow(G - d, 2) + Math.pow(g - e, 2), - )), - 10 < this.hasDragged && - ((A = b.isInsidePlot(G - f, g - l)), - b.hasCartesianSeries && - (this.zoomX || this.zoomY) && - A && - !v && - !F && - (this.selectionMarker = F = b.renderer - .rect(f, l, h ? 1 : n, m ? 1 : q, 0) - .attr({ - fill: - c.selectionMarkerFill || - p('#335cad') - .setOpacity(0.25) - .get(), - class: 'highcharts-selection-marker', - zIndex: 7, - }) - .add()), - F && - h && - ((d -= G), - F.attr({ width: Math.abs(d), x: (0 < d ? 0 : d) + G })), - F && - m && - ((d = e - g), - F.attr({ height: Math.abs(d), y: (0 < d ? 0 : d) + g })), - A && !F && c.panning && b.pan(a, c.panning))); - }, - drop: function(a) { - var b = this, - c = this.chart, - d = this.hasPinched; - if (this.selectionMarker) { - var e = { originalEvent: a, xAxis: [], yAxis: [] }, - h = this.selectionMarker, - m = h.attr ? h.attr('x') : h.x, - t = h.attr ? h.attr('y') : h.y, - p = h.attr ? h.attr('width') : h.width, - w = h.attr ? h.attr('height') : h.height, - q; - if (this.hasDragged || d) - r(c.axes, function(c) { - if ( - c.zoomEnabled && - l(c.min) && - (d || b[{ xAxis: 'zoomX', yAxis: 'zoomY' }[c.coll]]) - ) { - var k = c.horiz, - h = 'touchend' === a.type ? c.minPixelPadding : 0, - g = c.toValue((k ? m : t) + h), - k = c.toValue((k ? m + p : t + w) - h); - e[c.coll].push({ - axis: c, - min: Math.min(g, k), - max: Math.max(g, k), - }); - q = !0; - } - }), - q && - u(c, 'selection', e, function(a) { - c.zoom(n(a, d ? { animation: !1 } : null)); - }); - this.selectionMarker = this.selectionMarker.destroy(); - d && this.scaleGroups(); - } - c && - (f(c.container, { cursor: c._cursor }), - (c.cancelClick = 10 < this.hasDragged), - (c.mouseIsDown = this.hasDragged = this.hasPinched = !1), - (this.pinchDown = [])); - }, - onContainerMouseDown: function(a) { - 2 !== a.button && - ((a = this.normalize(a)), - this.zoomOption(a), - a.preventDefault && a.preventDefault(), - this.dragStart(a)); - }, - onDocumentMouseUp: function(b) { - H[a.hoverChartIndex] && H[a.hoverChartIndex].pointer.drop(b); - }, - onDocumentMouseMove: function(a) { - var b = this.chart, - c = this.chartPosition; - a = this.normalize(a, c); - !c || - this.inClass(a.target, 'highcharts-tracker') || - b.isInsidePlot(a.chartX - b.plotLeft, a.chartY - b.plotTop) || - this.reset(); - }, - onContainerMouseLeave: function(b) { - var c = H[a.hoverChartIndex]; - c && - (b.relatedTarget || b.toElement) && - (c.pointer.reset(), (c.pointer.chartPosition = null)); - }, - onContainerMouseMove: function(b) { - var c = this.chart; - (l(a.hoverChartIndex) && - H[a.hoverChartIndex] && - H[a.hoverChartIndex].mouseIsDown) || - (a.hoverChartIndex = c.index); - b = this.normalize(b); - b.returnValue = !1; - 'mousedown' === c.mouseIsDown && this.drag(b); - (!this.inClass(b.target, 'highcharts-tracker') && - !c.isInsidePlot(b.chartX - c.plotLeft, b.chartY - c.plotTop)) || - c.openMenu || - this.runPointActions(b); - }, - inClass: function(a, c) { - for (var b; a; ) { - if ((b = D(a, 'class'))) { - if (-1 !== b.indexOf(c)) return !0; - if (-1 !== b.indexOf('highcharts-container')) return !1; - } - a = a.parentNode; - } - }, - onTrackerMouseOut: function(a) { - var b = this.chart.hoverSeries; - a = a.relatedTarget || a.toElement; - this.isDirectTouch = !1; - if ( - !( - !b || - !a || - b.stickyTracking || - this.inClass(a, 'highcharts-tooltip') || - (this.inClass(a, 'highcharts-series-' + b.index) && - this.inClass(a, 'highcharts-tracker')) - ) - ) - b.onMouseOut(); - }, - onContainerClick: function(a) { - var b = this.chart, - c = b.hoverPoint, - d = b.plotLeft, - e = b.plotTop; - a = this.normalize(a); - b.cancelClick || - (c && this.inClass(a.target, 'highcharts-tracker') - ? (u(c.series, 'click', n(a, { point: c })), - b.hoverPoint && c.firePointEvent('click', a)) - : (n(a, this.getCoordinates(a)), - b.isInsidePlot(a.chartX - d, a.chartY - e) && u(b, 'click', a))); - }, - setDOMEvents: function() { - var b = this, - c = b.chart.container, - d = c.ownerDocument; - c.onmousedown = function(a) { - b.onContainerMouseDown(a); - }; - c.onmousemove = function(a) { - b.onContainerMouseMove(a); - }; - c.onclick = function(a) { - b.onContainerClick(a); - }; - this.unbindContainerMouseLeave = E( - c, - 'mouseleave', - b.onContainerMouseLeave, - ); - a.unbindDocumentMouseUp || - (a.unbindDocumentMouseUp = E(d, 'mouseup', b.onDocumentMouseUp)); - a.hasTouch && - ((c.ontouchstart = function(a) { - b.onContainerTouchStart(a); - }), - (c.ontouchmove = function(a) { - b.onContainerTouchMove(a); - }), - a.unbindDocumentTouchEnd || - (a.unbindDocumentTouchEnd = E( - d, - 'touchend', - b.onDocumentTouchEnd, - ))); - }, - destroy: function() { - var b = this; - b.unDocMouseMove && b.unDocMouseMove(); - this.unbindContainerMouseLeave(); - a.chartCount || - (a.unbindDocumentMouseUp && - (a.unbindDocumentMouseUp = a.unbindDocumentMouseUp()), - a.unbindDocumentTouchEnd && - (a.unbindDocumentTouchEnd = a.unbindDocumentTouchEnd())); - clearInterval(b.tooltipTimeout); - a.objectEach(b, function(a, c) { - b[c] = null; - }); - }, - }; - })(M); - (function(a) { - var E = a.charts, - D = a.each, - H = a.extend, - p = a.map, - f = a.noop, - l = a.pick; - H(a.Pointer.prototype, { - pinchTranslate: function(a, f, l, p, e, h) { - this.zoomHor && this.pinchTranslateDirection(!0, a, f, l, p, e, h); - this.zoomVert && this.pinchTranslateDirection(!1, a, f, l, p, e, h); - }, - pinchTranslateDirection: function(a, f, l, p, e, h, m, d) { - var c = this.chart, - b = a ? 'x' : 'y', - k = a ? 'X' : 'Y', - z = 'chart' + k, - n = a ? 'width' : 'height', - r = c['plot' + (a ? 'Left' : 'Top')], - x, - w, - t = d || 1, - C = c.inverted, - u = c.bounds[a ? 'h' : 'v'], - q = 1 === f.length, - A = f[0][z], - F = l[0][z], - G = !q && f[1][z], - g = !q && l[1][z], - v; - l = function() { - !q && - 20 < Math.abs(A - G) && - (t = d || Math.abs(F - g) / Math.abs(A - G)); - w = (r - F) / t + A; - x = c['plot' + (a ? 'Width' : 'Height')] / t; - }; - l(); - f = w; - f < u.min - ? ((f = u.min), (v = !0)) - : f + x > u.max && ((f = u.max - x), (v = !0)); - v - ? ((F -= 0.8 * (F - m[b][0])), q || (g -= 0.8 * (g - m[b][1])), l()) - : (m[b] = [F, g]); - C || ((h[b] = w - r), (h[n] = x)); - h = C ? 1 / t : t; - e[n] = x; - e[b] = f; - p[C ? (a ? 'scaleY' : 'scaleX') : 'scale' + k] = t; - p['translate' + k] = h * r + (F - h * A); - }, - pinch: function(a) { - var n = this, - r = n.chart, - u = n.pinchDown, - e = a.touches, - h = e.length, - m = n.lastValidTouch, - d = n.hasZoom, - c = n.selectionMarker, - b = {}, - k = - 1 === h && - ((n.inClass(a.target, 'highcharts-tracker') && r.runTrackerClick) || - n.runChartClick), - z = {}; - 1 < h && (n.initiated = !0); - d && n.initiated && !k && a.preventDefault(); - p(e, function(a) { - return n.normalize(a); - }); - 'touchstart' === a.type - ? (D(e, function(a, b) { - u[b] = { chartX: a.chartX, chartY: a.chartY }; - }), - (m.x = [u[0].chartX, u[1] && u[1].chartX]), - (m.y = [u[0].chartY, u[1] && u[1].chartY]), - D(r.axes, function(a) { - if (a.zoomEnabled) { - var b = r.bounds[a.horiz ? 'h' : 'v'], - c = a.minPixelPadding, - d = a.toPixels(l(a.options.min, a.dataMin)), - e = a.toPixels(l(a.options.max, a.dataMax)), - k = Math.max(d, e); - b.min = Math.min(a.pos, Math.min(d, e) - c); - b.max = Math.max(a.pos + a.len, k + c); - } - }), - (n.res = !0)) - : n.followTouchMove && 1 === h - ? this.runPointActions(n.normalize(a)) - : u.length && - (c || - (n.selectionMarker = c = H({ destroy: f, touch: !0 }, r.plotBox)), - n.pinchTranslate(u, e, b, c, z, m), - (n.hasPinched = d), - n.scaleGroups(b, z), - n.res && ((n.res = !1), this.reset(!1, 0))); - }, - touch: function(f, n) { - var p = this.chart, - r, - e; - if (p.index !== a.hoverChartIndex) - this.onContainerMouseLeave({ relatedTarget: !0 }); - a.hoverChartIndex = p.index; - 1 === f.touches.length - ? ((f = this.normalize(f)), - (e = p.isInsidePlot(f.chartX - p.plotLeft, f.chartY - p.plotTop)) && - !p.openMenu - ? (n && this.runPointActions(f), - 'touchmove' === f.type && - ((n = this.pinchDown), - (r = n[0] - ? 4 <= - Math.sqrt( - Math.pow(n[0].chartX - f.chartX, 2) + - Math.pow(n[0].chartY - f.chartY, 2), - ) - : !1)), - l(r, !0) && this.pinch(f)) - : n && this.reset()) - : 2 === f.touches.length && this.pinch(f); - }, - onContainerTouchStart: function(a) { - this.zoomOption(a); - this.touch(a, !0); - }, - onContainerTouchMove: function(a) { - this.touch(a); - }, - onDocumentTouchEnd: function(f) { - E[a.hoverChartIndex] && E[a.hoverChartIndex].pointer.drop(f); - }, - }); - })(M); - (function(a) { - var E = a.addEvent, - D = a.charts, - H = a.css, - p = a.doc, - f = a.extend, - l = a.noop, - r = a.Pointer, - n = a.removeEvent, - w = a.win, - u = a.wrap; - if (!a.hasTouch && (w.PointerEvent || w.MSPointerEvent)) { - var e = {}, - h = !!w.PointerEvent, - m = function() { - var c = []; - c.item = function(a) { - return this[a]; - }; - a.objectEach(e, function(a) { - c.push({ pageX: a.pageX, pageY: a.pageY, target: a.target }); - }); - return c; - }, - d = function(c, b, d, e) { - ('touch' !== c.pointerType && - c.pointerType !== c.MSPOINTER_TYPE_TOUCH) || - !D[a.hoverChartIndex] || - (e(c), - (e = D[a.hoverChartIndex].pointer), - e[b]({ - type: d, - target: c.currentTarget, - preventDefault: l, - touches: m(), - })); - }; - f(r.prototype, { - onContainerPointerDown: function(a) { - d(a, 'onContainerTouchStart', 'touchstart', function(a) { - e[a.pointerId] = { - pageX: a.pageX, - pageY: a.pageY, - target: a.currentTarget, - }; - }); - }, - onContainerPointerMove: function(a) { - d(a, 'onContainerTouchMove', 'touchmove', function(a) { - e[a.pointerId] = { pageX: a.pageX, pageY: a.pageY }; - e[a.pointerId].target || (e[a.pointerId].target = a.currentTarget); - }); - }, - onDocumentPointerUp: function(a) { - d(a, 'onDocumentTouchEnd', 'touchend', function(a) { - delete e[a.pointerId]; - }); - }, - batchMSEvents: function(a) { - a( - this.chart.container, - h ? 'pointerdown' : 'MSPointerDown', - this.onContainerPointerDown, - ); - a( - this.chart.container, - h ? 'pointermove' : 'MSPointerMove', - this.onContainerPointerMove, - ); - a(p, h ? 'pointerup' : 'MSPointerUp', this.onDocumentPointerUp); - }, - }); - u(r.prototype, 'init', function(a, b, d) { - a.call(this, b, d); - this.hasZoom && - H(b.container, { - '-ms-touch-action': 'none', - 'touch-action': 'none', - }); - }); - u(r.prototype, 'setDOMEvents', function(a) { - a.apply(this); - (this.hasZoom || this.followTouchMove) && this.batchMSEvents(E); - }); - u(r.prototype, 'destroy', function(a) { - this.batchMSEvents(n); - a.call(this); - }); - } - })(M); - (function(a) { - var E = a.addEvent, - D = a.css, - H = a.discardElement, - p = a.defined, - f = a.each, - l = a.isFirefox, - r = a.marginNames, - n = a.merge, - w = a.pick, - u = a.setAnimation, - e = a.stableSort, - h = a.win, - m = a.wrap; - a.Legend = function(a, c) { - this.init(a, c); - }; - a.Legend.prototype = { - init: function(a, c) { - this.chart = a; - this.setOptions(c); - c.enabled && - (this.render(), - E(this.chart, 'endResize', function() { - this.legend.positionCheckboxes(); - })); - }, - setOptions: function(a) { - var c = w(a.padding, 8); - this.options = a; - this.itemStyle = a.itemStyle; - this.itemHiddenStyle = n(this.itemStyle, a.itemHiddenStyle); - this.itemMarginTop = a.itemMarginTop || 0; - this.padding = c; - this.initialItemY = c - 5; - this.itemHeight = this.maxItemWidth = 0; - this.symbolWidth = w(a.symbolWidth, 16); - this.pages = []; - }, - update: function(a, c) { - var b = this.chart; - this.setOptions(n(!0, this.options, a)); - this.destroy(); - b.isDirtyLegend = b.isDirtyBox = !0; - w(c, !0) && b.redraw(); - }, - colorizeItem: function(a, c) { - a.legendGroup[c ? 'removeClass' : 'addClass']( - 'highcharts-legend-item-hidden', - ); - var b = this.options, - d = a.legendItem, - e = a.legendLine, - h = a.legendSymbol, - f = this.itemHiddenStyle.color, - b = c ? b.itemStyle.color : f, - m = c ? a.color || f : f, - l = a.options && a.options.marker, - t = { fill: m }; - d && d.css({ fill: b, color: b }); - e && e.attr({ stroke: m }); - h && - (l && - h.isMarker && - ((t = a.pointAttribs()), c || (t.stroke = t.fill = f)), - h.attr(t)); - }, - positionItem: function(a) { - var c = this.options, - b = c.symbolPadding, - c = !c.rtl, - d = a._legendItemPos, - e = d[0], - d = d[1], - h = a.checkbox; - (a = a.legendGroup) && - a.element && - a.translate(c ? e : this.legendWidth - e - 2 * b - 4, d); - h && ((h.x = e), (h.y = d)); - }, - destroyItem: function(a) { - var c = a.checkbox; - f(['legendItem', 'legendLine', 'legendSymbol', 'legendGroup'], function( - b, - ) { - a[b] && (a[b] = a[b].destroy()); - }); - c && H(a.checkbox); - }, - destroy: function() { - function a(a) { - this[a] && (this[a] = this[a].destroy()); - } - f(this.getAllItems(), function(c) { - f(['legendItem', 'legendGroup'], a, c); - }); - f('clipRect up down pager nav box title group'.split(' '), a, this); - this.display = null; - }, - positionCheckboxes: function() { - var a = this.group && this.group.alignAttr, - c, - b = this.clipHeight || this.legendHeight, - e = this.titleHeight; - a && - ((c = a.translateY), - f( - this.allItems, - function(d) { - var k = d.checkbox, - h; - k && - ((h = c + e + k.y + (this.scrollOffset || 0) + 3), - D(k, { - left: a.translateX + d.checkboxOffset + k.x - 20 + 'px', - top: h + 'px', - display: h > c - 6 && h < c + b - 6 ? '' : 'none', - })); - }, - this, - )); - }, - renderTitle: function() { - var a = this.options, - c = this.padding, - b = a.title, - e = 0; - b.text && - (this.title || - (this.title = this.chart.renderer - .label( - b.text, - c - 3, - c - 4, - null, - null, - null, - a.useHTML, - null, - 'legend-title', - ) - .attr({ zIndex: 1 }) - .css(b.style) - .add(this.group)), - (a = this.title.getBBox()), - (e = a.height), - (this.offsetWidth = a.width), - this.contentGroup.attr({ translateY: e })); - this.titleHeight = e; - }, - setText: function(d) { - var c = this.options; - d.legendItem.attr({ - text: c.labelFormat - ? a.format(c.labelFormat, d) - : c.labelFormatter.call(d), - }); - }, - renderItem: function(a) { - var c = this.chart, - b = c.renderer, - d = this.options, - e = 'horizontal' === d.layout, - h = this.symbolWidth, - f = d.symbolPadding, - m = this.itemStyle, - l = this.itemHiddenStyle, - t = this.padding, - p = e ? w(d.itemDistance, 20) : 0, - r = !d.rtl, - q = d.width, - A = d.itemMarginBottom || 0, - F = this.itemMarginTop, - G = a.legendItem, - g = !a.series, - v = !g && a.series.drawLegendSymbol ? a.series : a, - u = v.options, - L = this.createCheckboxForItem && u && u.showCheckbox, - u = h + f + p + (L ? 20 : 0), - P = d.useHTML, - J = a.options.className; - G || - ((a.legendGroup = b - .g('legend-item') - .addClass( - 'highcharts-' + - v.type + - '-series highcharts-color-' + - a.colorIndex + - (J ? ' ' + J : '') + - (g ? ' highcharts-series-' + a.index : ''), - ) - .attr({ zIndex: 1 }) - .add(this.scrollGroup)), - (a.legendItem = G = b - .text('', r ? h + f : -f, this.baseline || 0, P) - .css(n(a.visible ? m : l)) - .attr({ align: r ? 'left' : 'right', zIndex: 2 }) - .add(a.legendGroup)), - this.baseline || - ((h = m.fontSize), - (this.fontMetrics = b.fontMetrics(h, G)), - (this.baseline = this.fontMetrics.f + 3 + F), - G.attr('y', this.baseline)), - (this.symbolHeight = d.symbolHeight || this.fontMetrics.f), - v.drawLegendSymbol(this, a), - this.setItemEvents && this.setItemEvents(a, G, P), - L && this.createCheckboxForItem(a)); - this.colorizeItem(a, a.visible); - m.width || - G.css({ width: (d.itemWidth || d.width || c.spacingBox.width) - u }); - this.setText(a); - b = G.getBBox(); - m = a.checkboxOffset = d.itemWidth || a.legendItemWidth || b.width + u; - this.itemHeight = b = Math.round( - a.legendItemHeight || b.height || this.symbolHeight, - ); - e && - this.itemX - t + m > (q || c.spacingBox.width - 2 * t - d.x) && - ((this.itemX = t), - (this.itemY += F + this.lastLineHeight + A), - (this.lastLineHeight = 0)); - this.maxItemWidth = Math.max(this.maxItemWidth, m); - this.lastItemY = F + this.itemY + A; - this.lastLineHeight = Math.max(b, this.lastLineHeight); - a._legendItemPos = [this.itemX, this.itemY]; - e - ? (this.itemX += m) - : ((this.itemY += F + b + A), (this.lastLineHeight = b)); - this.offsetWidth = - q || - Math.max( - (e ? this.itemX - t - (a.checkbox ? 0 : p) : m) + t, - this.offsetWidth, - ); - }, - getAllItems: function() { - var a = []; - f(this.chart.series, function(c) { - var b = c && c.options; - c && - w(b.showInLegend, p(b.linkedTo) ? !1 : void 0, !0) && - (a = a.concat( - c.legendItems || ('point' === b.legendType ? c.data : c), - )); - }); - return a; - }, - getAlignment: function() { - var a = this.options; - return a.floating - ? '' - : a.align.charAt(0) + a.verticalAlign.charAt(0) + a.layout.charAt(0); - }, - adjustMargins: function(a, c) { - var b = this.chart, - d = this.options, - e = this.getAlignment(); - e && - f( - [/(lth|ct|rth)/, /(rtv|rm|rbv)/, /(rbh|cb|lbh)/, /(lbv|lm|ltv)/], - function(k, h) { - k.test(e) && - !p(a[h]) && - (b[r[h]] = Math.max( - b[r[h]], - b.legend[(h + 1) % 2 ? 'legendHeight' : 'legendWidth'] + - [1, -1, -1, 1][h] * d[h % 2 ? 'x' : 'y'] + - w(d.margin, 12) + - c[h] + - (0 === h ? b.titleOffset + b.options.title.margin : 0), - )); - }, - ); - }, - render: function() { - var a = this, - c = a.chart, - b = c.renderer, - k = a.group, - h, - m, - l, - x, - p = a.box, - t = a.options, - C = a.padding; - a.itemX = C; - a.itemY = a.initialItemY; - a.offsetWidth = 0; - a.lastItemY = 0; - k || - ((a.group = k = b - .g('legend') - .attr({ zIndex: 7 }) - .add()), - (a.contentGroup = b - .g() - .attr({ zIndex: 1 }) - .add(k)), - (a.scrollGroup = b.g().add(a.contentGroup))); - a.renderTitle(); - h = a.getAllItems(); - e(h, function(a, b) { - return ( - ((a.options && a.options.legendIndex) || 0) - - ((b.options && b.options.legendIndex) || 0) - ); - }); - t.reversed && h.reverse(); - a.allItems = h; - a.display = m = !!h.length; - a.lastLineHeight = 0; - f(h, function(b) { - a.renderItem(b); - }); - l = (t.width || a.offsetWidth) + C; - x = a.lastItemY + a.lastLineHeight + a.titleHeight; - x = a.handleOverflow(x); - x += C; - p || - ((a.box = p = b - .rect() - .addClass('highcharts-legend-box') - .attr({ r: t.borderRadius }) - .add(k)), - (p.isNew = !0)); - p.attr({ - stroke: t.borderColor, - 'stroke-width': t.borderWidth || 0, - fill: t.backgroundColor || 'none', - }).shadow(t.shadow); - 0 < l && - 0 < x && - (p[p.isNew ? 'attr' : 'animate']( - p.crisp.call( - {}, - { x: 0, y: 0, width: l, height: x }, - p.strokeWidth(), - ), - ), - (p.isNew = !1)); - p[m ? 'show' : 'hide'](); - a.legendWidth = l; - a.legendHeight = x; - f(h, function(b) { - a.positionItem(b); - }); - m && - ((b = c.spacingBox), - /(lth|ct|rth)/.test(a.getAlignment()) && - (b = n(b, { y: b.y + c.titleOffset + c.options.title.margin })), - k.align(n(t, { width: l, height: x }), !0, b)); - c.isResizing || this.positionCheckboxes(); - }, - handleOverflow: function(a) { - var c = this, - b = this.chart, - d = b.renderer, - e = this.options, - h = e.y, - m = this.padding, - b = b.spacingBox.height + ('top' === e.verticalAlign ? -h : h) - m, - h = e.maxHeight, - l, - n = this.clipRect, - t = e.navigation, - p = w(t.animation, !0), - r = t.arrowSize || 12, - q = this.nav, - A = this.pages, - F, - G = this.allItems, - g = function(a) { - 'number' === typeof a - ? n.attr({ height: a }) - : n && ((c.clipRect = n.destroy()), c.contentGroup.clip()); - c.contentGroup.div && - (c.contentGroup.div.style.clip = a - ? 'rect(' + m + 'px,9999px,' + (m + a) + 'px,0)' - : 'auto'); - }; - 'horizontal' !== e.layout || - 'middle' === e.verticalAlign || - e.floating || - (b /= 2); - h && (b = Math.min(b, h)); - A.length = 0; - a > b && !1 !== t.enabled - ? ((this.clipHeight = l = Math.max(b - 20 - this.titleHeight - m, 0)), - (this.currentPage = w(this.currentPage, 1)), - (this.fullHeight = a), - f(G, function(a, b) { - var c = a._legendItemPos[1], - d = Math.round(a.legendItem.getBBox().height), - g = A.length; - if (!g || (c - A[g - 1] > l && (F || c) !== A[g - 1])) - A.push(F || c), g++; - a.pageIx = g - 1; - F && (G[b - 1].pageIx = g - 1); - b === G.length - 1 && - c + d - A[g - 1] > l && - (A.push(c), (a.pageIx = g)); - c !== F && (F = c); - }), - n || - ((n = c.clipRect = d.clipRect(0, m, 9999, 0)), - c.contentGroup.clip(n)), - g(l), - q || - ((this.nav = q = d - .g() - .attr({ zIndex: 1 }) - .add(this.group)), - (this.up = d - .symbol('triangle', 0, 0, r, r) - .on('click', function() { - c.scroll(-1, p); - }) - .add(q)), - (this.pager = d - .text('', 15, 10) - .addClass('highcharts-legend-navigation') - .css(t.style) - .add(q)), - (this.down = d - .symbol('triangle-down', 0, 0, r, r) - .on('click', function() { - c.scroll(1, p); - }) - .add(q))), - c.scroll(0), - (a = b)) - : q && - (g(), - (this.nav = q.destroy()), - this.scrollGroup.attr({ translateY: 1 }), - (this.clipHeight = 0)); - return a; - }, - scroll: function(a, c) { - var b = this.pages, - d = b.length; - a = this.currentPage + a; - var e = this.clipHeight, - h = this.options.navigation, - f = this.pager, - m = this.padding; - a > d && (a = d); - 0 < a && - (void 0 !== c && u(c, this.chart), - this.nav.attr({ - translateX: m, - translateY: e + this.padding + 7 + this.titleHeight, - visibility: 'visible', - }), - this.up.attr({ - class: - 1 === a - ? 'highcharts-legend-nav-inactive' - : 'highcharts-legend-nav-active', - }), - f.attr({ text: a + '/' + d }), - this.down.attr({ - x: 18 + this.pager.getBBox().width, - class: - a === d - ? 'highcharts-legend-nav-inactive' - : 'highcharts-legend-nav-active', - }), - this.up - .attr({ fill: 1 === a ? h.inactiveColor : h.activeColor }) - .css({ cursor: 1 === a ? 'default' : 'pointer' }), - this.down - .attr({ fill: a === d ? h.inactiveColor : h.activeColor }) - .css({ cursor: a === d ? 'default' : 'pointer' }), - (this.scrollOffset = -b[a - 1] + this.initialItemY), - this.scrollGroup.animate({ translateY: this.scrollOffset }), - (this.currentPage = a), - this.positionCheckboxes()); - }, - }; - a.LegendSymbolMixin = { - drawRectangle: function(a, c) { - var b = a.symbolHeight, - d = a.options.squareSymbol; - c.legendSymbol = this.chart.renderer - .rect( - d ? (a.symbolWidth - b) / 2 : 0, - a.baseline - b + 1, - d ? b : a.symbolWidth, - b, - w(a.options.symbolRadius, b / 2), - ) - .addClass('highcharts-point') - .attr({ zIndex: 3 }) - .add(c.legendGroup); - }, - drawLineMarker: function(a) { - var c = this.options, - b = c.marker, - d = a.symbolWidth, - e = a.symbolHeight, - h = e / 2, - f = this.chart.renderer, - m = this.legendGroup; - a = a.baseline - Math.round(0.3 * a.fontMetrics.b); - var l; - l = { 'stroke-width': c.lineWidth || 0 }; - c.dashStyle && (l.dashstyle = c.dashStyle); - this.legendLine = f - .path(['M', 0, a, 'L', d, a]) - .addClass('highcharts-graph') - .attr(l) - .add(m); - b && - !1 !== b.enabled && - ((c = Math.min(w(b.radius, h), h)), - 0 === this.symbol.indexOf('url') && - ((b = n(b, { width: e, height: e })), (c = 0)), - (this.legendSymbol = b = f - .symbol(this.symbol, d / 2 - c, a - c, 2 * c, 2 * c, b) - .addClass('highcharts-point') - .add(m)), - (b.isMarker = !0)); - }, - }; - (/Trident\/7\.0/.test(h.navigator.userAgent) || l) && - m(a.Legend.prototype, 'positionItem', function(a, c) { - var b = this, - d = function() { - c._legendItemPos && a.call(b, c); - }; - d(); - setTimeout(d); - }); - })(M); - (function(a) { - var E = a.addEvent, - D = a.animate, - H = a.animObject, - p = a.attr, - f = a.doc, - l = a.Axis, - r = a.createElement, - n = a.defaultOptions, - w = a.discardElement, - u = a.charts, - e = a.css, - h = a.defined, - m = a.each, - d = a.extend, - c = a.find, - b = a.fireEvent, - k = a.grep, - z = a.isNumber, - B = a.isObject, - I = a.isString, - x = a.Legend, - K = a.marginNames, - t = a.merge, - C = a.objectEach, - N = a.Pointer, - q = a.pick, - A = a.pInt, - F = a.removeEvent, - G = a.seriesTypes, - g = a.splat, - v = a.svg, - Q = a.syncTimeout, - L = a.win, - P = (a.Chart = function() { - this.getArgs.apply(this, arguments); - }); - a.chart = function(a, b, c) { - return new P(a, b, c); - }; - d(P.prototype, { - callbacks: [], - getArgs: function() { - var a = [].slice.call(arguments); - if (I(a[0]) || a[0].nodeName) this.renderTo = a.shift(); - this.init(a[0], a[1]); - }, - init: function(b, c) { - var d, - g, - e = b.series, - k = b.plotOptions || {}; - b.series = null; - d = t(n, b); - for (g in d.plotOptions) - d.plotOptions[g].tooltip = (k[g] && t(k[g].tooltip)) || void 0; - d.tooltip.userOptions = - (b.chart && b.chart.forExport && b.tooltip.userOptions) || b.tooltip; - d.series = b.series = e; - this.userOptions = b; - b = d.chart; - g = b.events; - this.margin = []; - this.spacing = []; - this.bounds = { h: {}, v: {} }; - this.labelCollectors = []; - this.callback = c; - this.isResizing = 0; - this.options = d; - this.axes = []; - this.series = []; - this.hasCartesianSeries = b.showAxes; - var q = this; - q.index = u.length; - u.push(q); - a.chartCount++; - g && - C(g, function(a, b) { - E(q, b, a); - }); - q.xAxis = []; - q.yAxis = []; - q.pointCount = q.colorCounter = q.symbolCounter = 0; - q.firstRender(); - }, - initSeries: function(b) { - var c = this.options.chart; - (c = G[b.type || c.type || c.defaultSeriesType]) || a.error(17, !0); - c = new c(); - c.init(this, b); - return c; - }, - orderSeries: function(a) { - var b = this.series; - for (a = a || 0; a < b.length; a++) - b[a] && - ((b[a].index = a), - (b[a].name = b[a].name || 'Series ' + (b[a].index + 1))); - }, - isInsidePlot: function(a, b, c) { - var d = c ? b : a; - a = c ? a : b; - return 0 <= d && d <= this.plotWidth && 0 <= a && a <= this.plotHeight; - }, - redraw: function(c) { - var g = this.axes, - e = this.series, - k = this.pointer, - q = this.legend, - h = this.isDirtyLegend, - f, - l, - v = this.hasCartesianSeries, - A = this.isDirtyBox, - F, - t = this.renderer, - x = t.isHidden(), - n = []; - this.setResponsive && this.setResponsive(!1); - a.setAnimation(c, this); - x && this.temporaryDisplay(); - this.layOutTitles(); - for (c = e.length; c--; ) - if (((F = e[c]), F.options.stacking && ((f = !0), F.isDirty))) { - l = !0; - break; - } - if (l) - for (c = e.length; c--; ) - (F = e[c]), F.options.stacking && (F.isDirty = !0); - m(e, function(a) { - a.isDirty && - 'point' === a.options.legendType && - (a.updateTotals && a.updateTotals(), (h = !0)); - a.isDirtyData && b(a, 'updatedData'); - }); - h && q.options.enabled && (q.render(), (this.isDirtyLegend = !1)); - f && this.getStacks(); - v && - m(g, function(a) { - a.updateNames(); - a.setScale(); - }); - this.getMargins(); - v && - (m(g, function(a) { - a.isDirty && (A = !0); - }), - m(g, function(a) { - var c = a.min + ',' + a.max; - a.extKey !== c && - ((a.extKey = c), - n.push(function() { - b(a, 'afterSetExtremes', d(a.eventArgs, a.getExtremes())); - delete a.eventArgs; - })); - (A || f) && a.redraw(); - })); - A && this.drawChartBox(); - b(this, 'predraw'); - m(e, function(a) { - (A || a.isDirty) && a.visible && a.redraw(); - a.isDirtyData = !1; - }); - k && k.reset(!0); - t.draw(); - b(this, 'redraw'); - b(this, 'render'); - x && this.temporaryDisplay(!0); - m(n, function(a) { - a.call(); - }); - }, - get: function(a) { - function b(b) { - return b.id === a || (b.options && b.options.id === a); - } - var d, - g = this.series, - e; - d = c(this.axes, b) || c(this.series, b); - for (e = 0; !d && e < g.length; e++) d = c(g[e].points || [], b); - return d; - }, - getAxes: function() { - var a = this, - b = this.options, - c = (b.xAxis = g(b.xAxis || {})), - b = (b.yAxis = g(b.yAxis || {})); - m(c, function(a, b) { - a.index = b; - a.isX = !0; - }); - m(b, function(a, b) { - a.index = b; - }); - c = c.concat(b); - m(c, function(b) { - new l(a, b); - }); - }, - getSelectedPoints: function() { - var a = []; - m(this.series, function(b) { - a = a.concat( - k(b.data || [], function(a) { - return a.selected; - }), - ); - }); - return a; - }, - getSelectedSeries: function() { - return k(this.series, function(a) { - return a.selected; - }); - }, - setTitle: function(a, b, c) { - var d = this, - g = d.options, - e; - e = g.title = t( - { - style: { color: '#333333', fontSize: g.isStock ? '16px' : '18px' }, - }, - g.title, - a, - ); - g = g.subtitle = t({ style: { color: '#666666' } }, g.subtitle, b); - m([['title', a, e], ['subtitle', b, g]], function(a, b) { - var c = a[0], - g = d[c], - e = a[1]; - a = a[2]; - g && e && (d[c] = g = g.destroy()); - a && - !g && - ((d[c] = d.renderer - .text(a.text, 0, 0, a.useHTML) - .attr({ - align: a.align, - class: 'highcharts-' + c, - zIndex: a.zIndex || 4, - }) - .add()), - (d[c].update = function(a) { - d.setTitle(!b && a, b && a); - }), - d[c].css(a.style)); - }); - d.layOutTitles(c); - }, - layOutTitles: function(a) { - var b = 0, - c, - g = this.renderer, - e = this.spacingBox; - m( - ['title', 'subtitle'], - function(a) { - var c = this[a], - k = this.options[a]; - a = 'title' === a ? -3 : k.verticalAlign ? 0 : b + 2; - var q; - c && - ((q = k.style.fontSize), - (q = g.fontMetrics(q, c).b), - c - .css({ width: (k.width || e.width + k.widthAdjust) + 'px' }) - .align(d({ y: a + q }, k), !1, 'spacingBox'), - k.floating || - k.verticalAlign || - (b = Math.ceil(b + c.getBBox(k.useHTML).height))); - }, - this, - ); - c = this.titleOffset !== b; - this.titleOffset = b; - !this.isDirtyBox && - c && - ((this.isDirtyBox = c), - this.hasRendered && q(a, !0) && this.isDirtyBox && this.redraw()); - }, - getChartSize: function() { - var b = this.options.chart, - c = b.width, - b = b.height, - d = this.renderTo; - h(c) || (this.containerWidth = a.getStyle(d, 'width')); - h(b) || (this.containerHeight = a.getStyle(d, 'height')); - this.chartWidth = Math.max(0, c || this.containerWidth || 600); - this.chartHeight = Math.max( - 0, - a.relativeLength(b, this.chartWidth) || - (1 < this.containerHeight ? this.containerHeight : 400), - ); - }, - temporaryDisplay: function(b) { - var c = this.renderTo; - if (b) - for (; c && c.style; ) - c.hcOrigStyle && (a.css(c, c.hcOrigStyle), delete c.hcOrigStyle), - c.hcOrigDetached && - (f.body.removeChild(c), (c.hcOrigDetached = !1)), - (c = c.parentNode); - else - for (; c && c.style; ) { - f.body.contains(c) || - c.parentNode || - ((c.hcOrigDetached = !0), f.body.appendChild(c)); - if ('none' === a.getStyle(c, 'display', !1) || c.hcOricDetached) - (c.hcOrigStyle = { - display: c.style.display, - height: c.style.height, - overflow: c.style.overflow, - }), - (b = { display: 'block', overflow: 'hidden' }), - c !== this.renderTo && (b.height = 0), - a.css(c, b), - c.offsetWidth || - c.style.setProperty('display', 'block', 'important'); - c = c.parentNode; - if (c === f.body) break; - } - }, - setClassName: function(a) { - this.container.className = 'highcharts-container ' + (a || ''); - }, - getContainer: function() { - var b, - c = this.options, - g = c.chart, - e, - k; - b = this.renderTo; - var q = a.uniqueKey(), - h; - b || (this.renderTo = b = g.renderTo); - I(b) && (this.renderTo = b = f.getElementById(b)); - b || a.error(13, !0); - e = A(p(b, 'data-highcharts-chart')); - z(e) && u[e] && u[e].hasRendered && u[e].destroy(); - p(b, 'data-highcharts-chart', this.index); - b.innerHTML = ''; - g.skipClone || b.offsetWidth || this.temporaryDisplay(); - this.getChartSize(); - e = this.chartWidth; - k = this.chartHeight; - h = d( - { - position: 'relative', - overflow: 'hidden', - width: e + 'px', - height: k + 'px', - textAlign: 'left', - lineHeight: 'normal', - zIndex: 0, - '-webkit-tap-highlight-color': 'rgba(0,0,0,0)', - }, - g.style, - ); - this.container = b = r('div', { id: q }, h, b); - this._cursor = b.style.cursor; - this.renderer = new (a[g.renderer] || a.Renderer)( - b, - e, - k, - null, - g.forExport, - c.exporting && c.exporting.allowHTML, - ); - this.setClassName(g.className); - this.renderer.setStyle(g.style); - this.renderer.chartIndex = this.index; - }, - getMargins: function(a) { - var b = this.spacing, - c = this.margin, - d = this.titleOffset; - this.resetMargins(); - d && - !h(c[0]) && - (this.plotTop = Math.max( - this.plotTop, - d + this.options.title.margin + b[0], - )); - this.legend && this.legend.display && this.legend.adjustMargins(c, b); - this.extraMargin && - (this[this.extraMargin.type] = - (this[this.extraMargin.type] || 0) + this.extraMargin.value); - this.adjustPlotArea && this.adjustPlotArea(); - a || this.getAxisMargins(); - }, - getAxisMargins: function() { - var a = this, - b = (a.axisOffset = [0, 0, 0, 0]), - c = a.margin; - a.hasCartesianSeries && - m(a.axes, function(a) { - a.visible && a.getOffset(); - }); - m(K, function(d, g) { - h(c[g]) || (a[d] += b[g]); - }); - a.setChartSize(); - }, - reflow: function(b) { - var c = this, - d = c.options.chart, - g = c.renderTo, - e = h(d.width) && h(d.height), - k = d.width || a.getStyle(g, 'width'), - d = d.height || a.getStyle(g, 'height'), - g = b ? b.target : L; - if (!e && !c.isPrinting && k && d && (g === L || g === f)) { - if (k !== c.containerWidth || d !== c.containerHeight) - clearTimeout(c.reflowTimeout), - (c.reflowTimeout = Q( - function() { - c.container && c.setSize(void 0, void 0, !1); - }, - b ? 100 : 0, - )); - c.containerWidth = k; - c.containerHeight = d; - } - }, - initReflow: function() { - var a = this, - b; - b = E(L, 'resize', function(b) { - a.reflow(b); - }); - E(a, 'destroy', b); - }, - setSize: function(c, d, g) { - var k = this, - q = k.renderer; - k.isResizing += 1; - a.setAnimation(g, k); - k.oldChartHeight = k.chartHeight; - k.oldChartWidth = k.chartWidth; - void 0 !== c && (k.options.chart.width = c); - void 0 !== d && (k.options.chart.height = d); - k.getChartSize(); - c = q.globalAnimation; - (c ? D : e)( - k.container, - { width: k.chartWidth + 'px', height: k.chartHeight + 'px' }, - c, - ); - k.setChartSize(!0); - q.setSize(k.chartWidth, k.chartHeight, g); - m(k.axes, function(a) { - a.isDirty = !0; - a.setScale(); - }); - k.isDirtyLegend = !0; - k.isDirtyBox = !0; - k.layOutTitles(); - k.getMargins(); - k.redraw(g); - k.oldChartHeight = null; - b(k, 'resize'); - Q(function() { - k && - b(k, 'endResize', null, function() { - --k.isResizing; - }); - }, H(c).duration); - }, - setChartSize: function(a) { - var b = this.inverted, - c = this.renderer, - d = this.chartWidth, - g = this.chartHeight, - e = this.options.chart, - k = this.spacing, - q = this.clipOffset, - h, - f, - l, - v; - this.plotLeft = h = Math.round(this.plotLeft); - this.plotTop = f = Math.round(this.plotTop); - this.plotWidth = l = Math.max(0, Math.round(d - h - this.marginRight)); - this.plotHeight = v = Math.max( - 0, - Math.round(g - f - this.marginBottom), - ); - this.plotSizeX = b ? v : l; - this.plotSizeY = b ? l : v; - this.plotBorderWidth = e.plotBorderWidth || 0; - this.spacingBox = c.spacingBox = { - x: k[3], - y: k[0], - width: d - k[3] - k[1], - height: g - k[0] - k[2], - }; - this.plotBox = c.plotBox = { x: h, y: f, width: l, height: v }; - d = 2 * Math.floor(this.plotBorderWidth / 2); - b = Math.ceil(Math.max(d, q[3]) / 2); - c = Math.ceil(Math.max(d, q[0]) / 2); - this.clipBox = { - x: b, - y: c, - width: Math.floor(this.plotSizeX - Math.max(d, q[1]) / 2 - b), - height: Math.max( - 0, - Math.floor(this.plotSizeY - Math.max(d, q[2]) / 2 - c), - ), - }; - a || - m(this.axes, function(a) { - a.setAxisSize(); - a.setAxisTranslation(); - }); - }, - resetMargins: function() { - var a = this, - b = a.options.chart; - m(['margin', 'spacing'], function(c) { - var d = b[c], - g = B(d) ? d : [d, d, d, d]; - m(['Top', 'Right', 'Bottom', 'Left'], function(d, e) { - a[c][e] = q(b[c + d], g[e]); - }); - }); - m(K, function(b, c) { - a[b] = q(a.margin[c], a.spacing[c]); - }); - a.axisOffset = [0, 0, 0, 0]; - a.clipOffset = [0, 0, 0, 0]; - }, - drawChartBox: function() { - var a = this.options.chart, - b = this.renderer, - c = this.chartWidth, - d = this.chartHeight, - g = this.chartBackground, - e = this.plotBackground, - k = this.plotBorder, - q, - h = this.plotBGImage, - f = a.backgroundColor, - m = a.plotBackgroundColor, - l = a.plotBackgroundImage, - v, - A = this.plotLeft, - F = this.plotTop, - t = this.plotWidth, - x = this.plotHeight, - n = this.plotBox, - p = this.clipRect, - z = this.clipBox, - G = 'animate'; - g || - ((this.chartBackground = g = b - .rect() - .addClass('highcharts-background') - .add()), - (G = 'attr')); - q = a.borderWidth || 0; - v = q + (a.shadow ? 8 : 0); - f = { fill: f || 'none' }; - if (q || g['stroke-width']) - (f.stroke = a.borderColor), (f['stroke-width'] = q); - g.attr(f).shadow(a.shadow); - g[G]({ - x: v / 2, - y: v / 2, - width: c - v - (q % 2), - height: d - v - (q % 2), - r: a.borderRadius, - }); - G = 'animate'; - e || - ((G = 'attr'), - (this.plotBackground = e = b - .rect() - .addClass('highcharts-plot-background') - .add())); - e[G](n); - e.attr({ fill: m || 'none' }).shadow(a.plotShadow); - l && - (h - ? h.animate(n) - : (this.plotBGImage = b.image(l, A, F, t, x).add())); - p - ? p.animate({ width: z.width, height: z.height }) - : (this.clipRect = b.clipRect(z)); - G = 'animate'; - k || - ((G = 'attr'), - (this.plotBorder = k = b - .rect() - .addClass('highcharts-plot-border') - .attr({ zIndex: 1 }) - .add())); - k.attr({ - stroke: a.plotBorderColor, - 'stroke-width': a.plotBorderWidth || 0, - fill: 'none', - }); - k[G](k.crisp({ x: A, y: F, width: t, height: x }, -k.strokeWidth())); - this.isDirtyBox = !1; - }, - propFromSeries: function() { - var a = this, - b = a.options.chart, - c, - d = a.options.series, - g, - e; - m(['inverted', 'angular', 'polar'], function(k) { - c = G[b.type || b.defaultSeriesType]; - e = b[k] || (c && c.prototype[k]); - for (g = d && d.length; !e && g--; ) - (c = G[d[g].type]) && c.prototype[k] && (e = !0); - a[k] = e; - }); - }, - linkSeries: function() { - var a = this, - b = a.series; - m(b, function(a) { - a.linkedSeries.length = 0; - }); - m(b, function(b) { - var c = b.options.linkedTo; - I(c) && - (c = ':previous' === c ? a.series[b.index - 1] : a.get(c)) && - c.linkedParent !== b && - (c.linkedSeries.push(b), - (b.linkedParent = c), - (b.visible = q(b.options.visible, c.options.visible, b.visible))); - }); - }, - renderSeries: function() { - m(this.series, function(a) { - a.translate(); - a.render(); - }); - }, - renderLabels: function() { - var a = this, - b = a.options.labels; - b.items && - m(b.items, function(c) { - var g = d(b.style, c.style), - e = A(g.left) + a.plotLeft, - k = A(g.top) + a.plotTop + 12; - delete g.left; - delete g.top; - a.renderer - .text(c.html, e, k) - .attr({ zIndex: 2 }) - .css(g) - .add(); - }); - }, - render: function() { - var a = this.axes, - b = this.renderer, - c = this.options, - d, - g, - e; - this.setTitle(); - this.legend = new x(this, c.legend); - this.getStacks && this.getStacks(); - this.getMargins(!0); - this.setChartSize(); - c = this.plotWidth; - d = this.plotHeight = Math.max(this.plotHeight - 21, 0); - m(a, function(a) { - a.setScale(); - }); - this.getAxisMargins(); - g = 1.1 < c / this.plotWidth; - e = 1.05 < d / this.plotHeight; - if (g || e) - m(a, function(a) { - ((a.horiz && g) || (!a.horiz && e)) && a.setTickInterval(!0); - }), - this.getMargins(); - this.drawChartBox(); - this.hasCartesianSeries && - m(a, function(a) { - a.visible && a.render(); - }); - this.seriesGroup || - (this.seriesGroup = b - .g('series-group') - .attr({ zIndex: 3 }) - .add()); - this.renderSeries(); - this.renderLabels(); - this.addCredits(); - this.setResponsive && this.setResponsive(); - this.hasRendered = !0; - }, - addCredits: function(a) { - var b = this; - a = t(!0, this.options.credits, a); - a.enabled && - !this.credits && - ((this.credits = this.renderer - .text(a.text + (this.mapCredits || ''), 0, 0) - .addClass('highcharts-credits') - .on('click', function() { - a.href && (L.location.href = a.href); - }) - .attr({ align: a.position.align, zIndex: 8 }) - .css(a.style) - .add() - .align(a.position)), - (this.credits.update = function(a) { - b.credits = b.credits.destroy(); - b.addCredits(a); - })); - }, - destroy: function() { - var c = this, - d = c.axes, - g = c.series, - e = c.container, - k, - q = e && e.parentNode; - b(c, 'destroy'); - c.renderer.forExport ? a.erase(u, c) : (u[c.index] = void 0); - a.chartCount--; - c.renderTo.removeAttribute('data-highcharts-chart'); - F(c); - for (k = d.length; k--; ) d[k] = d[k].destroy(); - this.scroller && this.scroller.destroy && this.scroller.destroy(); - for (k = g.length; k--; ) g[k] = g[k].destroy(); - m( - 'title subtitle chartBackground plotBackground plotBGImage plotBorder seriesGroup clipRect credits pointer rangeSelector legend resetZoomButton tooltip renderer'.split( - ' ', - ), - function(a) { - var b = c[a]; - b && b.destroy && (c[a] = b.destroy()); - }, - ); - e && ((e.innerHTML = ''), F(e), q && w(e)); - C(c, function(a, b) { - delete c[b]; - }); - }, - isReadyToRender: function() { - var a = this; - return v || L != L.top || 'complete' === f.readyState - ? !0 - : (f.attachEvent('onreadystatechange', function() { - f.detachEvent('onreadystatechange', a.firstRender); - 'complete' === f.readyState && a.firstRender(); - }), - !1); - }, - firstRender: function() { - var a = this, - c = a.options; - if (a.isReadyToRender()) { - a.getContainer(); - b(a, 'init'); - a.resetMargins(); - a.setChartSize(); - a.propFromSeries(); - a.getAxes(); - m(c.series || [], function(b) { - a.initSeries(b); - }); - a.linkSeries(); - b(a, 'beforeRender'); - N && (a.pointer = new N(a, c)); - a.render(); - if (!a.renderer.imgCount && a.onload) a.onload(); - a.temporaryDisplay(!0); - } - }, - onload: function() { - m( - [this.callback].concat(this.callbacks), - function(a) { - a && void 0 !== this.index && a.apply(this, [this]); - }, - this, - ); - b(this, 'load'); - b(this, 'render'); - h(this.index) && !1 !== this.options.chart.reflow && this.initReflow(); - this.onload = null; - }, - }); - })(M); - (function(a) { - var E, - D = a.each, - H = a.extend, - p = a.erase, - f = a.fireEvent, - l = a.format, - r = a.isArray, - n = a.isNumber, - w = a.pick, - u = a.removeEvent; - a.Point = E = function() {}; - a.Point.prototype = { - init: function(a, h, f) { - this.series = a; - this.color = a.color; - this.applyOptions(h, f); - a.options.colorByPoint - ? ((h = a.options.colors || a.chart.options.colors), - (this.color = this.color || h[a.colorCounter]), - (h = h.length), - (f = a.colorCounter), - a.colorCounter++, - a.colorCounter === h && (a.colorCounter = 0)) - : (f = a.colorIndex); - this.colorIndex = w(this.colorIndex, f); - a.chart.pointCount++; - return this; - }, - applyOptions: function(a, h) { - var e = this.series, - d = e.options.pointValKey || e.pointValKey; - a = E.prototype.optionsToObject.call(this, a); - H(this, a); - this.options = this.options ? H(this.options, a) : a; - a.group && delete this.group; - d && (this.y = this[d]); - this.isNull = w( - this.isValid && !this.isValid(), - null === this.x || !n(this.y, !0), - ); - this.selected && (this.state = 'select'); - 'name' in this && - void 0 === h && - e.xAxis && - e.xAxis.hasNames && - (this.x = e.xAxis.nameToX(this)); - void 0 === this.x && - e && - (this.x = void 0 === h ? e.autoIncrement(this) : h); - return this; - }, - optionsToObject: function(a) { - var e = {}, - f = this.series, - d = f.options.keys, - c = d || f.pointArrayMap || ['y'], - b = c.length, - k = 0, - l = 0; - if (n(a) || null === a) e[c[0]] = a; - else if (r(a)) - for ( - !d && - a.length > b && - ((f = typeof a[0]), - 'string' === f ? (e.name = a[0]) : 'number' === f && (e.x = a[0]), - k++); - l < b; - - ) - (d && void 0 === a[k]) || (e[c[l]] = a[k]), k++, l++; - else - 'object' === typeof a && - ((e = a), - a.dataLabels && (f._hasPointLabels = !0), - a.marker && (f._hasPointMarkers = !0)); - return e; - }, - getClassName: function() { - return ( - 'highcharts-point' + - (this.selected ? ' highcharts-point-select' : '') + - (this.negative ? ' highcharts-negative' : '') + - (this.isNull ? ' highcharts-null-point' : '') + - (void 0 !== this.colorIndex - ? ' highcharts-color-' + this.colorIndex - : '') + - (this.options.className ? ' ' + this.options.className : '') + - (this.zone && this.zone.className - ? ' ' + this.zone.className.replace('highcharts-negative', '') - : '') - ); - }, - getZone: function() { - var a = this.series, - h = a.zones, - a = a.zoneAxis || 'y', - f = 0, - d; - for (d = h[f]; this[a] >= d.value; ) d = h[++f]; - d && d.color && !this.options.color && (this.color = d.color); - return d; - }, - destroy: function() { - var a = this.series.chart, - h = a.hoverPoints, - f; - a.pointCount--; - h && (this.setState(), p(h, this), h.length || (a.hoverPoints = null)); - if (this === a.hoverPoint) this.onMouseOut(); - if (this.graphic || this.dataLabel) u(this), this.destroyElements(); - this.legendItem && a.legend.destroyItem(this); - for (f in this) this[f] = null; - }, - destroyElements: function() { - for ( - var a = [ - 'graphic', - 'dataLabel', - 'dataLabelUpper', - 'connector', - 'shadowGroup', - ], - h, - f = 6; - f--; - - ) - (h = a[f]), this[h] && (this[h] = this[h].destroy()); - }, - getLabelConfig: function() { - return { - x: this.category, - y: this.y, - color: this.color, - colorIndex: this.colorIndex, - key: this.name || this.category, - series: this.series, - point: this, - percentage: this.percentage, - total: this.total || this.stackTotal, - }; - }, - tooltipFormatter: function(a) { - var e = this.series, - f = e.tooltipOptions, - d = w(f.valueDecimals, ''), - c = f.valuePrefix || '', - b = f.valueSuffix || ''; - D(e.pointArrayMap || ['y'], function(e) { - e = '{point.' + e; - if (c || b) a = a.replace(e + '}', c + e + '}' + b); - a = a.replace(e + '}', e + ':,.' + d + 'f}'); - }); - return l(a, { point: this, series: this.series }); - }, - firePointEvent: function(a, h, m) { - var d = this, - c = this.series.options; - (c.point.events[a] || - (d.options && d.options.events && d.options.events[a])) && - this.importEvents(); - 'click' === a && - c.allowPointSelect && - (m = function(a) { - d.select && d.select(null, a.ctrlKey || a.metaKey || a.shiftKey); - }); - f(this, a, h, m); - }, - visible: !0, - }; - })(M); - (function(a) { - var E = a.addEvent, - D = a.animObject, - H = a.arrayMax, - p = a.arrayMin, - f = a.correctFloat, - l = a.Date, - r = a.defaultOptions, - n = a.defaultPlotOptions, - w = a.defined, - u = a.each, - e = a.erase, - h = a.extend, - m = a.fireEvent, - d = a.grep, - c = a.isArray, - b = a.isNumber, - k = a.isString, - z = a.merge, - B = a.objectEach, - I = a.pick, - x = a.removeEvent, - K = a.splat, - t = a.SVGElement, - C = a.syncTimeout, - N = a.win; - a.Series = a.seriesType( - 'line', - null, - { - lineWidth: 2, - allowPointSelect: !1, - showCheckbox: !1, - animation: { duration: 1e3 }, - events: {}, - marker: { - lineWidth: 0, - lineColor: '#ffffff', - radius: 4, - states: { - hover: { - animation: { duration: 50 }, - enabled: !0, - radiusPlus: 2, - lineWidthPlus: 1, - }, - select: { - fillColor: '#cccccc', - lineColor: '#000000', - lineWidth: 2, - }, - }, - }, - point: { events: {} }, - dataLabels: { - align: 'center', - formatter: function() { - return null === this.y ? '' : a.numberFormat(this.y, -1); - }, - style: { - fontSize: '11px', - fontWeight: 'bold', - color: 'contrast', - textOutline: '1px contrast', - }, - verticalAlign: 'bottom', - x: 0, - y: 0, - padding: 5, - }, - cropThreshold: 300, - pointRange: 0, - softThreshold: !0, - states: { - hover: { - animation: { duration: 50 }, - lineWidthPlus: 1, - marker: {}, - halo: { size: 10, opacity: 0.25 }, - }, - select: { marker: {} }, - }, - stickyTracking: !0, - turboThreshold: 1e3, - findNearestPointBy: 'x', - }, - { - isCartesian: !0, - pointClass: a.Point, - sorted: !0, - requireSorting: !0, - directTouch: !1, - axisTypes: ['xAxis', 'yAxis'], - colorCounter: 0, - parallelArrays: ['x', 'y'], - coll: 'series', - init: function(a, b) { - var c = this, - d, - g = a.series, - e; - c.chart = a; - c.options = b = c.setOptions(b); - c.linkedSeries = []; - c.bindAxes(); - h(c, { - name: b.name, - state: '', - visible: !1 !== b.visible, - selected: !0 === b.selected, - }); - d = b.events; - B(d, function(a, b) { - E(c, b, a); - }); - if ( - (d && d.click) || - (b.point && b.point.events && b.point.events.click) || - b.allowPointSelect - ) - a.runTrackerClick = !0; - c.getColor(); - c.getSymbol(); - u(c.parallelArrays, function(a) { - c[a + 'Data'] = []; - }); - c.setData(b.data, !1); - c.isCartesian && (a.hasCartesianSeries = !0); - g.length && (e = g[g.length - 1]); - c._i = I(e && e._i, -1) + 1; - a.orderSeries(this.insert(g)); - }, - insert: function(a) { - var c = this.options.index, - d; - if (b(c)) { - for (d = a.length; d--; ) - if (c >= I(a[d].options.index, a[d]._i)) { - a.splice(d + 1, 0, this); - break; - } - -1 === d && a.unshift(this); - d += 1; - } else a.push(this); - return I(d, a.length - 1); - }, - bindAxes: function() { - var b = this, - c = b.options, - d = b.chart, - e; - u(b.axisTypes || [], function(g) { - u(d[g], function(a) { - e = a.options; - if ( - c[g] === e.index || - (void 0 !== c[g] && c[g] === e.id) || - (void 0 === c[g] && 0 === e.index) - ) - b.insert(a.series), (b[g] = a), (a.isDirty = !0); - }); - b[g] || b.optionalAxis === g || a.error(18, !0); - }); - }, - updateParallelArrays: function(a, c) { - var d = a.series, - e = arguments, - g = b(c) - ? function(b) { - var g = 'y' === b && d.toYData ? d.toYData(a) : a[b]; - d[b + 'Data'][c] = g; - } - : function(a) { - Array.prototype[c].apply( - d[a + 'Data'], - Array.prototype.slice.call(e, 2), - ); - }; - u(d.parallelArrays, g); - }, - autoIncrement: function() { - var b = this.options, - c = this.xIncrement, - d, - e = b.pointIntervalUnit, - g = 0, - c = I(c, b.pointStart, 0); - this.pointInterval = d = I(this.pointInterval, b.pointInterval, 1); - e && - ((b = new l(c)), - 'day' === e - ? (b = +b[l.hcSetDate](b[l.hcGetDate]() + d)) - : 'month' === e - ? (b = +b[l.hcSetMonth](b[l.hcGetMonth]() + d)) - : 'year' === e && - (b = +b[l.hcSetFullYear](b[l.hcGetFullYear]() + d)), - l.hcHasTimeZone && (g = a.getTZOffset(b) - a.getTZOffset(c)), - (d = b - c + g)); - this.xIncrement = c + d; - return c; - }, - setOptions: function(a) { - var b = this.chart, - c = b.options, - d = c.plotOptions, - g = (b.userOptions || {}).plotOptions || {}, - e = d[this.type]; - this.userOptions = a; - b = z(e, d.series, a); - this.tooltipOptions = z( - r.tooltip, - r.plotOptions.series && r.plotOptions.series.tooltip, - r.plotOptions[this.type].tooltip, - c.tooltip.userOptions, - d.series && d.series.tooltip, - d[this.type].tooltip, - a.tooltip, - ); - this.stickyTracking = I( - a.stickyTracking, - g[this.type] && g[this.type].stickyTracking, - g.series && g.series.stickyTracking, - this.tooltipOptions.shared && !this.noSharedTooltip - ? !0 - : b.stickyTracking, - ); - null === e.marker && delete b.marker; - this.zoneAxis = b.zoneAxis; - a = this.zones = (b.zones || []).slice(); - (!b.negativeColor && !b.negativeFillColor) || - b.zones || - a.push({ - value: b[this.zoneAxis + 'Threshold'] || b.threshold || 0, - className: 'highcharts-negative', - color: b.negativeColor, - fillColor: b.negativeFillColor, - }); - a.length && - w(a[a.length - 1].value) && - a.push({ color: this.color, fillColor: this.fillColor }); - return b; - }, - getCyclic: function(a, b, c) { - var d, - g = this.chart, - e = this.userOptions, - k = a + 'Index', - h = a + 'Counter', - q = c ? c.length : I(g.options.chart[a + 'Count'], g[a + 'Count']); - b || - ((d = I(e[k], e['_' + k])), - w(d) || - (g.series.length || (g[h] = 0), - (e['_' + k] = d = g[h] % q), - (g[h] += 1)), - c && (b = c[d])); - void 0 !== d && (this[k] = d); - this[a] = b; - }, - getColor: function() { - this.options.colorByPoint - ? (this.options.color = null) - : this.getCyclic( - 'color', - this.options.color || n[this.type].color, - this.chart.options.colors, - ); - }, - getSymbol: function() { - this.getCyclic( - 'symbol', - this.options.marker.symbol, - this.chart.options.symbols, - ); - }, - drawLegendSymbol: a.LegendSymbolMixin.drawLineMarker, - setData: function(d, e, h, f) { - var g = this, - q = g.points, - m = (q && q.length) || 0, - l, - A = g.options, - t = g.chart, - x = null, - n = g.xAxis, - p = A.turboThreshold, - z = this.xData, - F = this.yData, - C = (l = g.pointArrayMap) && l.length; - d = d || []; - l = d.length; - e = I(e, !0); - if ( - !1 !== f && - l && - m === l && - !g.cropped && - !g.hasGroupedData && - g.visible - ) - u(d, function(a, b) { - q[b].update && a !== A.data[b] && q[b].update(a, !1, null, !1); - }); - else { - g.xIncrement = null; - g.colorCounter = 0; - u(this.parallelArrays, function(a) { - g[a + 'Data'].length = 0; - }); - if (p && l > p) { - for (h = 0; null === x && h < l; ) (x = d[h]), h++; - if (b(x)) - for (h = 0; h < l; h++) - (z[h] = this.autoIncrement()), (F[h] = d[h]); - else if (c(x)) - if (C) - for (h = 0; h < l; h++) - (x = d[h]), (z[h] = x[0]), (F[h] = x.slice(1, C + 1)); - else - for (h = 0; h < l; h++) - (x = d[h]), (z[h] = x[0]), (F[h] = x[1]); - else a.error(12); - } else - for (h = 0; h < l; h++) - void 0 !== d[h] && - ((x = { series: g }), - g.pointClass.prototype.applyOptions.apply(x, [d[h]]), - g.updateParallelArrays(x, h)); - F && k(F[0]) && a.error(14, !0); - g.data = []; - g.options.data = g.userOptions.data = d; - for (h = m; h--; ) q[h] && q[h].destroy && q[h].destroy(); - n && (n.minRange = n.userMinRange); - g.isDirty = t.isDirtyBox = !0; - g.isDirtyData = !!q; - h = !1; - } - 'point' === A.legendType && - (this.processData(), this.generatePoints()); - e && t.redraw(h); - }, - processData: function(b) { - var c = this.xData, - d = this.yData, - e = c.length, - g; - g = 0; - var k, - h, - q = this.xAxis, - f, - m = this.options; - f = m.cropThreshold; - var l = this.getExtremesFromAll || m.getExtremesFromAll, - t = this.isCartesian, - m = q && q.val2lin, - x = q && q.isLog, - n = this.requireSorting, - p, - z; - if (t && !this.isDirty && !q.isDirty && !this.yAxis.isDirty && !b) - return !1; - q && ((b = q.getExtremes()), (p = b.min), (z = b.max)); - if (t && this.sorted && !l && (!f || e > f || this.forceCrop)) - if (c[e - 1] < p || c[0] > z) (c = []), (d = []); - else if (c[0] < p || c[e - 1] > z) - (g = this.cropData(this.xData, this.yData, p, z)), - (c = g.xData), - (d = g.yData), - (g = g.start), - (k = !0); - for (f = c.length || 1; --f; ) - (e = x ? m(c[f]) - m(c[f - 1]) : c[f] - c[f - 1]), - 0 < e && (void 0 === h || e < h) - ? (h = e) - : 0 > e && n && (a.error(15), (n = !1)); - this.cropped = k; - this.cropStart = g; - this.processedXData = c; - this.processedYData = d; - this.closestPointRange = h; - }, - cropData: function(a, b, c, d) { - var g = a.length, - e = 0, - k = g, - h = I(this.cropShoulder, 1), - f; - for (f = 0; f < g; f++) - if (a[f] >= c) { - e = Math.max(0, f - h); - break; - } - for (c = f; c < g; c++) - if (a[c] > d) { - k = c + h; - break; - } - return { - xData: a.slice(e, k), - yData: b.slice(e, k), - start: e, - end: k, - }; - }, - generatePoints: function() { - var a = this.options, - b = a.data, - c = this.data, - d, - g = this.processedXData, - e = this.processedYData, - k = this.pointClass, - h = g.length, - f = this.cropStart || 0, - m, - l = this.hasGroupedData, - a = a.keys, - t, - x = [], - n; - c || l || ((c = []), (c.length = b.length), (c = this.data = c)); - a && l && (this.options.keys = !1); - for (n = 0; n < h; n++) - (m = f + n), - l - ? ((t = new k().init(this, [g[n]].concat(K(e[n])))), - (t.dataGroup = this.groupMap[n])) - : (t = c[m]) || - void 0 === b[m] || - (c[m] = t = new k().init(this, b[m], g[n])), - t && ((t.index = m), (x[n] = t)); - this.options.keys = a; - if (c && (h !== (d = c.length) || l)) - for (n = 0; n < d; n++) - n !== f || l || (n += h), - c[n] && (c[n].destroyElements(), (c[n].plotX = void 0)); - this.data = c; - this.points = x; - }, - getExtremes: function(a) { - var d = this.yAxis, - e = this.processedXData, - k, - g = [], - h = 0; - k = this.xAxis.getExtremes(); - var f = k.min, - q = k.max, - m, - l, - t, - n; - a = a || this.stackedYData || this.processedYData || []; - k = a.length; - for (n = 0; n < k; n++) - if ( - ((l = e[n]), - (t = a[n]), - (m = - (b(t, !0) || c(t)) && - (!d.positiveValuesOnly || t.length || 0 < t)), - (l = - this.getExtremesFromAll || - this.options.getExtremesFromAll || - this.cropped || - ((e[n + 1] || l) >= f && (e[n - 1] || l) <= q)), - m && l) - ) - if ((m = t.length)) - for (; m--; ) 'number' === typeof t[m] && (g[h++] = t[m]); - else g[h++] = t; - this.dataMin = p(g); - this.dataMax = H(g); - }, - translate: function() { - this.processedXData || this.processData(); - this.generatePoints(); - var a = this.options, - c = a.stacking, - d = this.xAxis, - e = d.categories, - g = this.yAxis, - k = this.points, - h = k.length, - m = !!this.modifyValue, - l = a.pointPlacement, - t = 'between' === l || b(l), - n = a.threshold, - x = a.startFromThreshold ? n : 0, - p, - z, - C, - r, - u = Number.MAX_VALUE; - 'between' === l && (l = 0.5); - b(l) && (l *= I(a.pointRange || d.pointRange)); - for (a = 0; a < h; a++) { - var B = k[a], - N = B.x, - K = B.y; - z = B.low; - var D = - c && - g.stacks[ - (this.negStacks && K < (x ? 0 : n) ? '-' : '') + this.stackKey - ], - E; - g.positiveValuesOnly && null !== K && 0 >= K && (B.isNull = !0); - B.plotX = p = f( - Math.min( - Math.max( - -1e5, - d.translate(N, 0, 0, 0, 1, l, 'flags' === this.type), - ), - 1e5, - ), - ); - c && - this.visible && - !B.isNull && - D && - D[N] && - ((r = this.getStackIndicator(r, N, this.index)), - (E = D[N]), - (K = E.points[r.key]), - (z = K[0]), - (K = K[1]), - z === x && r.key === D[N].base && (z = I(n, g.min)), - g.positiveValuesOnly && 0 >= z && (z = null), - (B.total = B.stackTotal = E.total), - (B.percentage = E.total && (B.y / E.total) * 100), - (B.stackY = K), - E.setOffset(this.pointXOffset || 0, this.barW || 0)); - B.yBottom = w(z) ? g.translate(z, 0, 1, 0, 1) : null; - m && (K = this.modifyValue(K, B)); - B.plotY = z = - 'number' === typeof K && Infinity !== K - ? Math.min(Math.max(-1e5, g.translate(K, 0, 1, 0, 1)), 1e5) - : void 0; - B.isInside = - void 0 !== z && 0 <= z && z <= g.len && 0 <= p && p <= d.len; - B.clientX = t ? f(d.translate(N, 0, 0, 0, 1, l)) : p; - B.negative = B.y < (n || 0); - B.category = e && void 0 !== e[B.x] ? e[B.x] : B.x; - B.isNull || - (void 0 !== C && (u = Math.min(u, Math.abs(p - C))), (C = p)); - B.zone = this.zones.length && B.getZone(); - } - this.closestPointRangePx = u; - }, - getValidPoints: function(a, b) { - var c = this.chart; - return d(a || this.points || [], function(a) { - return b && !c.isInsidePlot(a.plotX, a.plotY, c.inverted) - ? !1 - : !a.isNull; - }); - }, - setClip: function(a) { - var b = this.chart, - c = this.options, - d = b.renderer, - g = b.inverted, - e = this.clipBox, - k = e || b.clipBox, - h = - this.sharedClipKey || - [ - '_sharedClip', - a && a.duration, - a && a.easing, - k.height, - c.xAxis, - c.yAxis, - ].join(), - f = b[h], - q = b[h + 'm']; - f || - (a && - ((k.width = 0), - g && (k.x = b.plotSizeX), - (b[h + 'm'] = q = d.clipRect( - g ? b.plotSizeX + 99 : -99, - g ? -b.plotLeft : -b.plotTop, - 99, - g ? b.chartWidth : b.chartHeight, - ))), - (b[h] = f = d.clipRect(k)), - (f.count = { length: 0 })); - a && - !f.count[this.index] && - ((f.count[this.index] = !0), (f.count.length += 1)); - !1 !== c.clip && - (this.group.clip(a || e ? f : b.clipRect), - this.markerGroup.clip(q), - (this.sharedClipKey = h)); - a || - (f.count[this.index] && - (delete f.count[this.index], --f.count.length), - 0 === f.count.length && - h && - b[h] && - (e || (b[h] = b[h].destroy()), - b[h + 'm'] && (b[h + 'm'] = b[h + 'm'].destroy()))); - }, - animate: function(a) { - var b = this.chart, - c = D(this.options.animation), - d; - a - ? this.setClip(c) - : ((d = this.sharedClipKey), - (a = b[d]) && a.animate({ width: b.plotSizeX, x: 0 }, c), - b[d + 'm'] && - b[d + 'm'].animate({ width: b.plotSizeX + 99, x: 0 }, c), - (this.animate = null)); - }, - afterAnimate: function() { - this.setClip(); - m(this, 'afterAnimate'); - this.finishedAnimating = !0; - }, - drawPoints: function() { - var a = this.points, - b = this.chart, - c, - d, - g, - e, - k = this.options.marker, - h, - f, - l, - m = this[this.specialGroup] || this.markerGroup, - t, - n = I( - k.enabled, - this.xAxis.isRadial ? !0 : null, - this.closestPointRangePx >= 2 * k.radius, - ); - if (!1 !== k.enabled || this._hasPointMarkers) - for (c = 0; c < a.length; c++) - (d = a[c]), - (e = d.graphic), - (h = d.marker || {}), - (f = !!d.marker), - (g = (n && void 0 === h.enabled) || h.enabled), - (l = d.isInside), - g && !d.isNull - ? ((g = I(h.symbol, this.symbol)), - (d.hasImage = 0 === g.indexOf('url')), - (t = this.markerAttribs(d, d.selected && 'select')), - e - ? e[l ? 'show' : 'hide'](!0).animate(t) - : l && - (0 < t.width || d.hasImage) && - (d.graphic = e = b.renderer - .symbol(g, t.x, t.y, t.width, t.height, f ? h : k) - .add(m)), - e && e.attr(this.pointAttribs(d, d.selected && 'select')), - e && e.addClass(d.getClassName(), !0)) - : e && (d.graphic = e.destroy()); - }, - markerAttribs: function(a, b) { - var c = this.options.marker, - d = a.marker || {}, - g = I(d.radius, c.radius); - b && - ((c = c.states[b]), - (b = d.states && d.states[b]), - (g = I( - b && b.radius, - c && c.radius, - g + ((c && c.radiusPlus) || 0), - ))); - a.hasImage && (g = 0); - a = { x: Math.floor(a.plotX) - g, y: a.plotY - g }; - g && (a.width = a.height = 2 * g); - return a; - }, - pointAttribs: function(a, b) { - var c = this.options.marker, - d = a && a.options, - g = (d && d.marker) || {}, - e = this.color, - k = d && d.color, - h = a && a.color, - d = I(g.lineWidth, c.lineWidth); - a = a && a.zone && a.zone.color; - e = k || a || h || e; - a = g.fillColor || c.fillColor || e; - e = g.lineColor || c.lineColor || e; - b && - ((c = c.states[b]), - (b = (g.states && g.states[b]) || {}), - (d = I( - b.lineWidth, - c.lineWidth, - d + I(b.lineWidthPlus, c.lineWidthPlus, 0), - )), - (a = b.fillColor || c.fillColor || a), - (e = b.lineColor || c.lineColor || e)); - return { stroke: e, 'stroke-width': d, fill: a }; - }, - destroy: function() { - var a = this, - b = a.chart, - c = /AppleWebKit\/533/.test(N.navigator.userAgent), - d, - g, - k = a.data || [], - h, - f; - m(a, 'destroy'); - x(a); - u(a.axisTypes || [], function(b) { - (f = a[b]) && - f.series && - (e(f.series, a), (f.isDirty = f.forceRedraw = !0)); - }); - a.legendItem && a.chart.legend.destroyItem(a); - for (g = k.length; g--; ) (h = k[g]) && h.destroy && h.destroy(); - a.points = null; - clearTimeout(a.animationTimeout); - B(a, function(a, b) { - a instanceof t && - !a.survive && - ((d = c && 'group' === b ? 'hide' : 'destroy'), a[d]()); - }); - b.hoverSeries === a && (b.hoverSeries = null); - e(b.series, a); - b.orderSeries(); - B(a, function(b, c) { - delete a[c]; - }); - }, - getGraphPath: function(a, b, c) { - var d = this, - g = d.options, - e = g.step, - k, - h = [], - f = [], - l; - a = a || d.points; - (k = a.reversed) && a.reverse(); - (e = { right: 1, center: 2 }[e] || (e && 3)) && k && (e = 4 - e); - !g.connectNulls || b || c || (a = this.getValidPoints(a)); - u(a, function(k, m) { - var q = k.plotX, - t = k.plotY, - n = a[m - 1]; - (k.leftCliff || (n && n.rightCliff)) && !c && (l = !0); - k.isNull && !w(b) && 0 < m - ? (l = !g.connectNulls) - : k.isNull && !b - ? (l = !0) - : (0 === m || l - ? (m = ['M', k.plotX, k.plotY]) - : d.getPointSpline - ? (m = d.getPointSpline(a, k, m)) - : e - ? ((m = - 1 === e - ? ['L', n.plotX, t] - : 2 === e - ? [ - 'L', - (n.plotX + q) / 2, - n.plotY, - 'L', - (n.plotX + q) / 2, - t, - ] - : ['L', q, n.plotY]), - m.push('L', q, t)) - : (m = ['L', q, t]), - f.push(k.x), - e && f.push(k.x), - h.push.apply(h, m), - (l = !1)); - }); - h.xMap = f; - return (d.graphPath = h); - }, - drawGraph: function() { - var a = this, - b = this.options, - c = (this.gappedPath || this.getGraphPath).call(this), - d = [ - [ - 'graph', - 'highcharts-graph', - b.lineColor || this.color, - b.dashStyle, - ], - ]; - u(this.zones, function(c, e) { - d.push([ - 'zone-graph-' + e, - 'highcharts-graph highcharts-zone-graph-' + - e + - ' ' + - (c.className || ''), - c.color || a.color, - c.dashStyle || b.dashStyle, - ]); - }); - u(d, function(d, e) { - var g = d[0], - k = a[g]; - k - ? ((k.endX = a.preventGraphAnimation ? null : c.xMap), - k.animate({ d: c })) - : c.length && - ((a[g] = a.chart.renderer - .path(c) - .addClass(d[1]) - .attr({ zIndex: 1 }) - .add(a.group)), - (k = { - stroke: d[2], - 'stroke-width': b.lineWidth, - fill: (a.fillGraph && a.color) || 'none', - }), - d[3] - ? (k.dashstyle = d[3]) - : 'square' !== b.linecap && - (k['stroke-linecap'] = k['stroke-linejoin'] = 'round'), - (k = a[g].attr(k).shadow(2 > e && b.shadow))); - k && ((k.startX = c.xMap), (k.isArea = c.isArea)); - }); - }, - applyZones: function() { - var a = this, - b = this.chart, - c = b.renderer, - d = this.zones, - e, - k, - h = this.clips || [], - f, - m = this.graph, - l = this.area, - t = Math.max(b.chartWidth, b.chartHeight), - n = this[(this.zoneAxis || 'y') + 'Axis'], - x, - p, - z = b.inverted, - C, - r, - w, - B, - K = !1; - d.length && - (m || l) && - n && - void 0 !== n.min && - ((p = n.reversed), - (C = n.horiz), - m && m.hide(), - l && l.hide(), - (x = n.getExtremes()), - u(d, function(d, g) { - e = p ? (C ? b.plotWidth : 0) : C ? 0 : n.toPixels(x.min); - e = Math.min(Math.max(I(k, e), 0), t); - k = Math.min( - Math.max(Math.round(n.toPixels(I(d.value, x.max), !0)), 0), - t, - ); - K && (e = k = n.toPixels(x.max)); - r = Math.abs(e - k); - w = Math.min(e, k); - B = Math.max(e, k); - n.isXAxis - ? ((f = { x: z ? B : w, y: 0, width: r, height: t }), - C || (f.x = b.plotHeight - f.x)) - : ((f = { x: 0, y: z ? B : w, width: t, height: r }), - C && (f.y = b.plotWidth - f.y)); - z && - c.isVML && - (f = n.isXAxis - ? { x: 0, y: p ? w : B, height: f.width, width: b.chartWidth } - : { - x: f.y - b.plotLeft - b.spacingBox.x, - y: 0, - width: f.height, - height: b.chartHeight, - }); - h[g] - ? h[g].animate(f) - : ((h[g] = c.clipRect(f)), - m && a['zone-graph-' + g].clip(h[g]), - l && a['zone-area-' + g].clip(h[g])); - K = d.value > x.max; - }), - (this.clips = h)); - }, - invertGroups: function(a) { - function b() { - u(['group', 'markerGroup'], function(b) { - c[b] && - (d.renderer.isVML && - c[b].attr({ width: c.yAxis.len, height: c.xAxis.len }), - (c[b].width = c.yAxis.len), - (c[b].height = c.xAxis.len), - c[b].invert(a)); - }); - } - var c = this, - d = c.chart, - e; - c.xAxis && - ((e = E(d, 'resize', b)), - E(c, 'destroy', e), - b(a), - (c.invertGroups = b)); - }, - plotGroup: function(a, b, c, d, e) { - var g = this[a], - k = !g; - k && - (this[a] = g = this.chart.renderer - .g() - .attr({ zIndex: d || 0.1 }) - .add(e)); - g.addClass( - 'highcharts-' + - b + - ' highcharts-series-' + - this.index + - ' highcharts-' + - this.type + - '-series ' + - (w(this.colorIndex) - ? 'highcharts-color-' + this.colorIndex + ' ' - : '') + - (this.options.className || '') + - (g.hasClass('highcharts-tracker') ? ' highcharts-tracker' : ''), - !0, - ); - g.attr({ visibility: c })[k ? 'attr' : 'animate'](this.getPlotBox()); - return g; - }, - getPlotBox: function() { - var a = this.chart, - b = this.xAxis, - c = this.yAxis; - a.inverted && ((b = c), (c = this.xAxis)); - return { - translateX: b ? b.left : a.plotLeft, - translateY: c ? c.top : a.plotTop, - scaleX: 1, - scaleY: 1, - }; - }, - render: function() { - var a = this, - b = a.chart, - c, - d = a.options, - e = !!a.animate && b.renderer.isSVG && D(d.animation).duration, - k = a.visible ? 'inherit' : 'hidden', - h = d.zIndex, - f = a.hasRendered, - m = b.seriesGroup, - l = b.inverted; - c = a.plotGroup('group', 'series', k, h, m); - a.markerGroup = a.plotGroup('markerGroup', 'markers', k, h, m); - e && a.animate(!0); - c.inverted = a.isCartesian ? l : !1; - a.drawGraph && (a.drawGraph(), a.applyZones()); - a.drawDataLabels && a.drawDataLabels(); - a.visible && a.drawPoints(); - a.drawTracker && - !1 !== a.options.enableMouseTracking && - a.drawTracker(); - a.invertGroups(l); - !1 === d.clip || a.sharedClipKey || f || c.clip(b.clipRect); - e && a.animate(); - f || - (a.animationTimeout = C(function() { - a.afterAnimate(); - }, e)); - a.isDirty = !1; - a.hasRendered = !0; - }, - redraw: function() { - var a = this.chart, - b = this.isDirty || this.isDirtyData, - c = this.group, - d = this.xAxis, - e = this.yAxis; - c && - (a.inverted && c.attr({ width: a.plotWidth, height: a.plotHeight }), - c.animate({ - translateX: I(d && d.left, a.plotLeft), - translateY: I(e && e.top, a.plotTop), - })); - this.translate(); - this.render(); - b && delete this.kdTree; - }, - kdAxisArray: ['clientX', 'plotY'], - searchPoint: function(a, b) { - var c = this.xAxis, - d = this.yAxis, - e = this.chart.inverted; - return this.searchKDTree( - { - clientX: e ? c.len - a.chartY + c.pos : a.chartX - c.pos, - plotY: e ? d.len - a.chartX + d.pos : a.chartY - d.pos, - }, - b, - ); - }, - buildKDTree: function() { - function a(c, d, e) { - var g, k; - if ((k = c && c.length)) - return ( - (g = b.kdAxisArray[d % e]), - c.sort(function(a, b) { - return a[g] - b[g]; - }), - (k = Math.floor(k / 2)), - { - point: c[k], - left: a(c.slice(0, k), d + 1, e), - right: a(c.slice(k + 1), d + 1, e), - } - ); - } - this.buildingKdTree = !0; - var b = this, - c = -1 < b.options.findNearestPointBy.indexOf('y') ? 2 : 1; - delete b.kdTree; - C( - function() { - b.kdTree = a(b.getValidPoints(null, !b.directTouch), c, c); - b.buildingKdTree = !1; - }, - b.options.kdNow ? 0 : 1, - ); - }, - searchKDTree: function(a, b) { - function c(a, b, g, f) { - var m = b.point, - l = d.kdAxisArray[g % f], - q, - t, - n = m; - t = w(a[e]) && w(m[e]) ? Math.pow(a[e] - m[e], 2) : null; - q = w(a[k]) && w(m[k]) ? Math.pow(a[k] - m[k], 2) : null; - q = (t || 0) + (q || 0); - m.dist = w(q) ? Math.sqrt(q) : Number.MAX_VALUE; - m.distX = w(t) ? Math.sqrt(t) : Number.MAX_VALUE; - l = a[l] - m[l]; - q = 0 > l ? 'left' : 'right'; - t = 0 > l ? 'right' : 'left'; - b[q] && ((q = c(a, b[q], g + 1, f)), (n = q[h] < n[h] ? q : m)); - b[t] && - Math.sqrt(l * l) < n[h] && - ((a = c(a, b[t], g + 1, f)), (n = a[h] < n[h] ? a : n)); - return n; - } - var d = this, - e = this.kdAxisArray[0], - k = this.kdAxisArray[1], - h = b ? 'distX' : 'dist'; - b = -1 < d.options.findNearestPointBy.indexOf('y') ? 2 : 1; - this.kdTree || this.buildingKdTree || this.buildKDTree(); - if (this.kdTree) return c(a, this.kdTree, b, b); - }, - }, - ); - })(M); - (function(a) { - var E = a.Axis, - D = a.Chart, - H = a.correctFloat, - p = a.defined, - f = a.destroyObjectProperties, - l = a.each, - r = a.format, - n = a.objectEach, - w = a.pick, - u = a.Series; - a.StackItem = function(a, h, f, d, c) { - var b = a.chart.inverted; - this.axis = a; - this.isNegative = f; - this.options = h; - this.x = d; - this.total = null; - this.points = {}; - this.stack = c; - this.rightCliff = this.leftCliff = 0; - this.alignOptions = { - align: h.align || (b ? (f ? 'left' : 'right') : 'center'), - verticalAlign: h.verticalAlign || (b ? 'middle' : f ? 'bottom' : 'top'), - y: w(h.y, b ? 4 : f ? 14 : -6), - x: w(h.x, b ? (f ? -6 : 6) : 0), - }; - this.textAlign = h.textAlign || (b ? (f ? 'right' : 'left') : 'center'); - }; - a.StackItem.prototype = { - destroy: function() { - f(this, this.axis); - }, - render: function(a) { - var e = this.options, - f = e.format, - f = f ? r(f, this) : e.formatter.call(this); - this.label - ? this.label.attr({ text: f, visibility: 'hidden' }) - : (this.label = this.axis.chart.renderer - .text(f, null, null, e.useHTML) - .css(e.style) - .attr({ - align: this.textAlign, - rotation: e.rotation, - visibility: 'hidden', - }) - .add(a)); - }, - setOffset: function(a, h) { - var e = this.axis, - d = e.chart, - c = e.translate(e.usePercentage ? 100 : this.total, 0, 0, 0, 1), - e = e.translate(0), - e = Math.abs(c - e); - a = d.xAxis[0].translate(this.x) + a; - c = this.getStackBox(d, this, a, c, h, e); - if ((h = this.label)) - h.align(this.alignOptions, null, c), - (c = h.alignAttr), - h[ - !1 === this.options.crop || d.isInsidePlot(c.x, c.y) - ? 'show' - : 'hide' - ](!0); - }, - getStackBox: function(a, h, f, d, c, b) { - var e = h.axis.reversed, - l = a.inverted; - a = a.plotHeight; - h = (h.isNegative && !e) || (!h.isNegative && e); - return { - x: l ? (h ? d : d - b) : f, - y: l ? a - f - c : h ? a - d - b : a - d, - width: l ? b : c, - height: l ? c : b, - }; - }, - }; - D.prototype.getStacks = function() { - var a = this; - l(a.yAxis, function(a) { - a.stacks && a.hasVisibleSeries && (a.oldStacks = a.stacks); - }); - l(a.series, function(e) { - !e.options.stacking || - (!0 !== e.visible && !1 !== a.options.chart.ignoreHiddenSeries) || - (e.stackKey = e.type + w(e.options.stack, '')); - }); - }; - E.prototype.buildStacks = function() { - var a = this.series, - h = w(this.options.reversedStacks, !0), - f = a.length, - d; - if (!this.isXAxis) { - this.usePercentage = !1; - for (d = f; d--; ) a[h ? d : f - d - 1].setStackedPoints(); - for (d = 0; d < f; d++) a[d].modifyStacks(); - } - }; - E.prototype.renderStackTotals = function() { - var a = this.chart, - h = a.renderer, - f = this.stacks, - d = this.stackTotalGroup; - d || - (this.stackTotalGroup = d = h - .g('stack-labels') - .attr({ visibility: 'visible', zIndex: 6 }) - .add()); - d.translate(a.plotLeft, a.plotTop); - n(f, function(a) { - n(a, function(a) { - a.render(d); - }); - }); - }; - E.prototype.resetStacks = function() { - var a = this, - h = a.stacks; - a.isXAxis || - n(h, function(e) { - n(e, function(d, c) { - d.touched < a.stacksTouched - ? (d.destroy(), delete e[c]) - : ((d.total = null), (d.cumulative = null)); - }); - }); - }; - E.prototype.cleanStacks = function() { - var a; - this.isXAxis || - (this.oldStacks && (a = this.stacks = this.oldStacks), - n(a, function(a) { - n(a, function(a) { - a.cumulative = a.total; - }); - })); - }; - u.prototype.setStackedPoints = function() { - if ( - this.options.stacking && - (!0 === this.visible || - !1 === this.chart.options.chart.ignoreHiddenSeries) - ) { - var e = this.processedXData, - h = this.processedYData, - f = [], - d = h.length, - c = this.options, - b = c.threshold, - k = w(c.startFromThreshold && b, 0), - l = c.stack, - c = c.stacking, - n = this.stackKey, - r = '-' + n, - x = this.negStacks, - u = this.yAxis, - t = u.stacks, - C = u.oldStacks, - N, - q, - A, - F, - G, - g, - v; - u.stacksTouched += 1; - for (G = 0; G < d; G++) - (g = e[G]), - (v = h[G]), - (N = this.getStackIndicator(N, g, this.index)), - (F = N.key), - (A = (q = x && v < (k ? 0 : b)) ? r : n), - t[A] || (t[A] = {}), - t[A][g] || - (C[A] && C[A][g] - ? ((t[A][g] = C[A][g]), (t[A][g].total = null)) - : (t[A][g] = new a.StackItem( - u, - u.options.stackLabels, - q, - g, - l, - ))), - (A = t[A][g]), - null !== v - ? ((A.points[F] = A.points[this.index] = [w(A.cumulative, k)]), - p(A.cumulative) || (A.base = F), - (A.touched = u.stacksTouched), - 0 < N.index && - !1 === this.singleStacks && - (A.points[F][0] = A.points[this.index + ',' + g + ',0'][0])) - : (A.points[F] = A.points[this.index] = null), - 'percent' === c - ? ((q = q ? n : r), - x && t[q] && t[q][g] - ? ((q = t[q][g]), - (A.total = q.total = - Math.max(q.total, A.total) + Math.abs(v) || 0)) - : (A.total = H(A.total + (Math.abs(v) || 0)))) - : (A.total = H(A.total + (v || 0))), - (A.cumulative = w(A.cumulative, k) + (v || 0)), - null !== v && - (A.points[F].push(A.cumulative), (f[G] = A.cumulative)); - 'percent' === c && (u.usePercentage = !0); - this.stackedYData = f; - u.oldStacks = {}; - } - }; - u.prototype.modifyStacks = function() { - var a = this, - h = a.stackKey, - f = a.yAxis.stacks, - d = a.processedXData, - c, - b = a.options.stacking; - a[b + 'Stacker'] && - l([h, '-' + h], function(e) { - for (var k = d.length, h, l; k--; ) - if ( - ((h = d[k]), - (c = a.getStackIndicator(c, h, a.index, e)), - (l = (h = f[e] && f[e][h]) && h.points[c.key])) - ) - a[b + 'Stacker'](l, h, k); - }); - }; - u.prototype.percentStacker = function(a, h, f) { - h = h.total ? 100 / h.total : 0; - a[0] = H(a[0] * h); - a[1] = H(a[1] * h); - this.stackedYData[f] = a[1]; - }; - u.prototype.getStackIndicator = function(a, h, f, d) { - !p(a) || a.x !== h || (d && a.key !== d) - ? (a = { x: h, index: 0, key: d }) - : a.index++; - a.key = [f, h, a.index].join(); - return a; - }; - })(M); - (function(a) { - var E = a.addEvent, - D = a.animate, - H = a.Axis, - p = a.createElement, - f = a.css, - l = a.defined, - r = a.each, - n = a.erase, - w = a.extend, - u = a.fireEvent, - e = a.inArray, - h = a.isNumber, - m = a.isObject, - d = a.isArray, - c = a.merge, - b = a.objectEach, - k = a.pick, - z = a.Point, - B = a.Series, - I = a.seriesTypes, - x = a.setAnimation, - K = a.splat; - w(a.Chart.prototype, { - addSeries: function(a, b, c) { - var d, - e = this; - a && - ((b = k(b, !0)), - u(e, 'addSeries', { options: a }, function() { - d = e.initSeries(a); - e.isDirtyLegend = !0; - e.linkSeries(); - b && e.redraw(c); - })); - return d; - }, - addAxis: function(a, b, d, e) { - var h = b ? 'xAxis' : 'yAxis', - f = this.options; - a = c(a, { index: this[h].length, isX: b }); - b = new H(this, a); - f[h] = K(f[h] || {}); - f[h].push(a); - k(d, !0) && this.redraw(e); - return b; - }, - showLoading: function(a) { - var b = this, - c = b.options, - d = b.loadingDiv, - e = c.loading, - k = function() { - d && - f(d, { - left: b.plotLeft + 'px', - top: b.plotTop + 'px', - width: b.plotWidth + 'px', - height: b.plotHeight + 'px', - }); - }; - d || - ((b.loadingDiv = d = p( - 'div', - { className: 'highcharts-loading highcharts-loading-hidden' }, - null, - b.container, - )), - (b.loadingSpan = p( - 'span', - { className: 'highcharts-loading-inner' }, - null, - d, - )), - E(b, 'redraw', k)); - d.className = 'highcharts-loading'; - b.loadingSpan.innerHTML = a || c.lang.loading; - f(d, w(e.style, { zIndex: 10 })); - f(b.loadingSpan, e.labelStyle); - b.loadingShown || - (f(d, { opacity: 0, display: '' }), - D( - d, - { opacity: e.style.opacity || 0.5 }, - { duration: e.showDuration || 0 }, - )); - b.loadingShown = !0; - k(); - }, - hideLoading: function() { - var a = this.options, - b = this.loadingDiv; - b && - ((b.className = 'highcharts-loading highcharts-loading-hidden'), - D( - b, - { opacity: 0 }, - { - duration: a.loading.hideDuration || 100, - complete: function() { - f(b, { display: 'none' }); - }, - }, - )); - this.loadingShown = !1; - }, - propsRequireDirtyBox: 'backgroundColor borderColor borderWidth margin marginTop marginRight marginBottom marginLeft spacing spacingTop spacingRight spacingBottom spacingLeft borderRadius plotBackgroundColor plotBackgroundImage plotBorderColor plotBorderWidth plotShadow shadow'.split( - ' ', - ), - propsRequireUpdateSeries: 'chart.inverted chart.polar chart.ignoreHiddenSeries chart.type colors plotOptions tooltip'.split( - ' ', - ), - update: function(a, d, f) { - var m = this, - n = { - credits: 'addCredits', - title: 'setTitle', - subtitle: 'setSubtitle', - }, - t = a.chart, - x, - g, - p = []; - if (t) { - c(!0, m.options.chart, t); - 'className' in t && m.setClassName(t.className); - if ('inverted' in t || 'polar' in t) m.propFromSeries(), (x = !0); - 'alignTicks' in t && (x = !0); - b(t, function(a, b) { - -1 !== e('chart.' + b, m.propsRequireUpdateSeries) && (g = !0); - -1 !== e(b, m.propsRequireDirtyBox) && (m.isDirtyBox = !0); - }); - 'style' in t && m.renderer.setStyle(t.style); - } - a.colors && (this.options.colors = a.colors); - a.plotOptions && c(!0, this.options.plotOptions, a.plotOptions); - b(a, function(a, b) { - if (m[b] && 'function' === typeof m[b].update) m[b].update(a, !1); - else if ('function' === typeof m[n[b]]) m[n[b]](a); - 'chart' !== b && -1 !== e(b, m.propsRequireUpdateSeries) && (g = !0); - }); - r('xAxis yAxis zAxis series colorAxis pane'.split(' '), function(b) { - a[b] && - (r(K(a[b]), function(a, c) { - (c = (l(a.id) && m.get(a.id)) || m[b][c]) && - c.coll === b && - (c.update(a, !1), f && (c.touched = !0)); - if (!c && f) - if ('series' === b) m.addSeries(a, !1).touched = !0; - else if ('xAxis' === b || 'yAxis' === b) - m.addAxis(a, 'xAxis' === b, !1).touched = !0; - }), - f && - r(m[b], function(a) { - a.touched ? delete a.touched : p.push(a); - })); - }); - r(p, function(a) { - a.remove(!1); - }); - x && - r(m.axes, function(a) { - a.update({}, !1); - }); - g && - r(m.series, function(a) { - a.update({}, !1); - }); - a.loading && c(!0, m.options.loading, a.loading); - x = t && t.width; - t = t && t.height; - (h(x) && x !== m.chartWidth) || (h(t) && t !== m.chartHeight) - ? m.setSize(x, t) - : k(d, !0) && m.redraw(); - }, - setSubtitle: function(a) { - this.setTitle(void 0, a); - }, - }); - w(z.prototype, { - update: function(a, b, c, d) { - function e() { - h.applyOptions(a); - null === h.y && g && (h.graphic = g.destroy()); - m(a, !0) && - (g && - g.element && - a && - a.marker && - void 0 !== a.marker.symbol && - (h.graphic = g.destroy()), - a && - a.dataLabels && - h.dataLabel && - (h.dataLabel = h.dataLabel.destroy()), - h.connector && (h.connector = h.connector.destroy())); - l = h.index; - f.updateParallelArrays(h, l); - t.data[l] = m(t.data[l], !0) || m(a, !0) ? h.options : a; - f.isDirty = f.isDirtyData = !0; - !f.fixedBox && f.hasCartesianSeries && (n.isDirtyBox = !0); - 'point' === t.legendType && (n.isDirtyLegend = !0); - b && n.redraw(c); - } - var h = this, - f = h.series, - g = h.graphic, - l, - n = f.chart, - t = f.options; - b = k(b, !0); - !1 === d ? e() : h.firePointEvent('update', { options: a }, e); - }, - remove: function(a, b) { - this.series.removePoint(e(this, this.series.data), a, b); - }, - }); - w(B.prototype, { - addPoint: function(a, b, c, d) { - var e = this.options, - h = this.data, - f = this.chart, - g = this.xAxis, - g = g && g.hasNames && g.names, - l = e.data, - m, - n, - t = this.xData, - q, - x; - b = k(b, !0); - m = { series: this }; - this.pointClass.prototype.applyOptions.apply(m, [a]); - x = m.x; - q = t.length; - if (this.requireSorting && x < t[q - 1]) - for (n = !0; q && t[q - 1] > x; ) q--; - this.updateParallelArrays(m, 'splice', q, 0, 0); - this.updateParallelArrays(m, q); - g && m.name && (g[x] = m.name); - l.splice(q, 0, a); - n && (this.data.splice(q, 0, null), this.processData()); - 'point' === e.legendType && this.generatePoints(); - c && - (h[0] && h[0].remove - ? h[0].remove(!1) - : (h.shift(), this.updateParallelArrays(m, 'shift'), l.shift())); - this.isDirtyData = this.isDirty = !0; - b && f.redraw(d); - }, - removePoint: function(a, b, c) { - var d = this, - e = d.data, - h = e[a], - f = d.points, - g = d.chart, - l = function() { - f && f.length === e.length && f.splice(a, 1); - e.splice(a, 1); - d.options.data.splice(a, 1); - d.updateParallelArrays(h || { series: d }, 'splice', a, 1); - h && h.destroy(); - d.isDirty = !0; - d.isDirtyData = !0; - b && g.redraw(); - }; - x(c, g); - b = k(b, !0); - h ? h.firePointEvent('remove', null, l) : l(); - }, - remove: function(a, b, c) { - function d() { - e.destroy(); - h.isDirtyLegend = h.isDirtyBox = !0; - h.linkSeries(); - k(a, !0) && h.redraw(b); - } - var e = this, - h = e.chart; - !1 !== c ? u(e, 'remove', null, d) : d(); - }, - update: function(a, b) { - var d = this, - e = d.chart, - h = d.userOptions, - f = d.oldType || d.type, - l = a.type || h.type || e.options.chart.type, - g = I[f].prototype, - m, - n = ['group', 'markerGroup', 'dataLabelsGroup'], - t = ['navigatorSeries', 'baseSeries'], - x = d.finishedAnimating && { animation: !1 }; - if (Object.keys && 'data' === Object.keys(a).toString()) - return this.setData(a.data, b); - t = n.concat(t); - r(t, function(a) { - t[a] = d[a]; - delete d[a]; - }); - a = c( - h, - x, - { index: d.index, pointStart: d.xData[0] }, - { data: d.options.data }, - a, - ); - d.remove(!1, null, !1); - for (m in g) d[m] = void 0; - w(d, I[l || f].prototype); - r(t, function(a) { - d[a] = t[a]; - }); - d.init(e, a); - a.zIndex !== h.zIndex && - r(n, function(b) { - d[b] && d[b].attr({ zIndex: a.zIndex }); - }); - d.oldType = f; - e.linkSeries(); - k(b, !0) && e.redraw(!1); - }, - }); - w(H.prototype, { - update: function(a, b) { - var d = this.chart; - a = d.options[this.coll][this.options.index] = c(this.userOptions, a); - this.destroy(!0); - this.init(d, w(a, { events: void 0 })); - d.isDirtyBox = !0; - k(b, !0) && d.redraw(); - }, - remove: function(a) { - for ( - var b = this.chart, c = this.coll, e = this.series, h = e.length; - h--; - - ) - e[h] && e[h].remove(!1); - n(b.axes, this); - n(b[c], this); - d(b.options[c]) - ? b.options[c].splice(this.options.index, 1) - : delete b.options[c]; - r(b[c], function(a, b) { - a.options.index = b; - }); - this.destroy(); - b.isDirtyBox = !0; - k(a, !0) && b.redraw(); - }, - setTitle: function(a, b) { - this.update({ title: a }, b); - }, - setCategories: function(a, b) { - this.update({ categories: a }, b); - }, - }); - })(M); - (function(a) { - var E = a.color, - D = a.each, - H = a.map, - p = a.pick, - f = a.Series, - l = a.seriesType; - l( - 'area', - 'line', - { softThreshold: !1, threshold: 0 }, - { - singleStacks: !1, - getStackPoints: function(f) { - var l = [], - r = [], - u = this.xAxis, - e = this.yAxis, - h = e.stacks[this.stackKey], - m = {}, - d = this.index, - c = e.series, - b = c.length, - k, - z = p(e.options.reversedStacks, !0) ? 1 : -1, - B; - f = f || this.points; - if (this.options.stacking) { - for (B = 0; B < f.length; B++) - (f[B].leftNull = f[B].rightNull = null), (m[f[B].x] = f[B]); - a.objectEach(h, function(a, b) { - null !== a.total && r.push(b); - }); - r.sort(function(a, b) { - return a - b; - }); - k = H(c, function() { - return this.visible; - }); - D(r, function(a, c) { - var f = 0, - n, - x; - if (m[a] && !m[a].isNull) - l.push(m[a]), - D([-1, 1], function(e) { - var f = 1 === e ? 'rightNull' : 'leftNull', - l = 0, - t = h[r[c + e]]; - if (t) - for (B = d; 0 <= B && B < b; ) - (n = t.points[B]), - n || - (B === d - ? (m[a][f] = !0) - : k[B] && - (x = h[a].points[B]) && - (l -= x[1] - x[0])), - (B += z); - m[a][1 === e ? 'rightCliff' : 'leftCliff'] = l; - }); - else { - for (B = d; 0 <= B && B < b; ) { - if ((n = h[a].points[B])) { - f = n[1]; - break; - } - B += z; - } - f = e.translate(f, 0, 1, 0, 1); - l.push({ - isNull: !0, - plotX: u.translate(a, 0, 0, 0, 1), - x: a, - plotY: f, - yBottom: f, - }); - } - }); - } - return l; - }, - getGraphPath: function(a) { - var l = f.prototype.getGraphPath, - r = this.options, - u = r.stacking, - e = this.yAxis, - h, - m, - d = [], - c = [], - b = this.index, - k, - z = e.stacks[this.stackKey], - B = r.threshold, - I = e.getThreshold(r.threshold), - x, - r = r.connectNulls || 'percent' === u, - K = function(h, f, l) { - var m = a[h]; - h = u && z[m.x].points[b]; - var n = m[l + 'Null'] || 0; - l = m[l + 'Cliff'] || 0; - var x, - t, - m = !0; - l || n - ? ((x = (n ? h[0] : h[1]) + l), (t = h[0] + l), (m = !!n)) - : !u && a[f] && a[f].isNull && (x = t = B); - void 0 !== x && - (c.push({ - plotX: k, - plotY: null === x ? I : e.getThreshold(x), - isNull: m, - isCliff: !0, - }), - d.push({ - plotX: k, - plotY: null === t ? I : e.getThreshold(t), - doCurve: !1, - })); - }; - a = a || this.points; - u && (a = this.getStackPoints(a)); - for (h = 0; h < a.length; h++) - if ( - ((m = a[h].isNull), - (k = p(a[h].rectPlotX, a[h].plotX)), - (x = p(a[h].yBottom, I)), - !m || r) - ) - r || K(h, h - 1, 'left'), - (m && !u && r) || - (c.push(a[h]), d.push({ x: h, plotX: k, plotY: x })), - r || K(h, h + 1, 'right'); - h = l.call(this, c, !0, !0); - d.reversed = !0; - m = l.call(this, d, !0, !0); - m.length && (m[0] = 'L'); - m = h.concat(m); - l = l.call(this, c, !1, r); - m.xMap = h.xMap; - this.areaPath = m; - return l; - }, - drawGraph: function() { - this.areaPath = []; - f.prototype.drawGraph.apply(this); - var a = this, - l = this.areaPath, - w = this.options, - u = [['area', 'highcharts-area', this.color, w.fillColor]]; - D(this.zones, function(e, h) { - u.push([ - 'zone-area-' + h, - 'highcharts-area highcharts-zone-area-' + h + ' ' + e.className, - e.color || a.color, - e.fillColor || w.fillColor, - ]); - }); - D(u, function(e) { - var h = e[0], - f = a[h]; - f - ? ((f.endX = a.preventGraphAnimation ? null : l.xMap), - f.animate({ d: l })) - : ((f = a[h] = a.chart.renderer - .path(l) - .addClass(e[1]) - .attr({ - fill: p( - e[3], - E(e[2]) - .setOpacity(p(w.fillOpacity, 0.75)) - .get(), - ), - zIndex: 0, - }) - .add(a.group)), - (f.isArea = !0)); - f.startX = l.xMap; - f.shiftUnit = w.step ? 2 : 1; - }); - }, - drawLegendSymbol: a.LegendSymbolMixin.drawRectangle, - }, - ); - })(M); - (function(a) { - var E = a.pick; - a = a.seriesType; - a( - 'spline', - 'line', - {}, - { - getPointSpline: function(a, H, p) { - var f = H.plotX, - l = H.plotY, - r = a[p - 1]; - p = a[p + 1]; - var n, w, u, e; - if ( - r && - !r.isNull && - !1 !== r.doCurve && - !H.isCliff && - p && - !p.isNull && - !1 !== p.doCurve && - !H.isCliff - ) { - a = r.plotY; - u = p.plotX; - p = p.plotY; - var h = 0; - n = (1.5 * f + r.plotX) / 2.5; - w = (1.5 * l + a) / 2.5; - u = (1.5 * f + u) / 2.5; - e = (1.5 * l + p) / 2.5; - u !== n && (h = ((e - w) * (u - f)) / (u - n) + l - e); - w += h; - e += h; - w > a && w > l - ? ((w = Math.max(a, l)), (e = 2 * l - w)) - : w < a && w < l && ((w = Math.min(a, l)), (e = 2 * l - w)); - e > p && e > l - ? ((e = Math.max(p, l)), (w = 2 * l - e)) - : e < p && e < l && ((e = Math.min(p, l)), (w = 2 * l - e)); - H.rightContX = u; - H.rightContY = e; - } - H = [ - 'C', - E(r.rightContX, r.plotX), - E(r.rightContY, r.plotY), - E(n, f), - E(w, l), - f, - l, - ]; - r.rightContX = r.rightContY = null; - return H; - }, - }, - ); - })(M); - (function(a) { - var E = a.seriesTypes.area.prototype, - D = a.seriesType; - D('areaspline', 'spline', a.defaultPlotOptions.area, { - getStackPoints: E.getStackPoints, - getGraphPath: E.getGraphPath, - drawGraph: E.drawGraph, - drawLegendSymbol: a.LegendSymbolMixin.drawRectangle, - }); - })(M); - (function(a) { - var E = a.animObject, - D = a.color, - H = a.each, - p = a.extend, - f = a.isNumber, - l = a.merge, - r = a.pick, - n = a.Series, - w = a.seriesType, - u = a.svg; - w( - 'column', - 'line', - { - borderRadius: 0, - crisp: !0, - groupPadding: 0.2, - marker: null, - pointPadding: 0.1, - minPointLength: 0, - cropThreshold: 50, - pointRange: null, - states: { - hover: { halo: !1, brightness: 0.1 }, - select: { color: '#cccccc', borderColor: '#000000' }, - }, - dataLabels: { align: null, verticalAlign: null, y: null }, - softThreshold: !1, - startFromThreshold: !0, - stickyTracking: !1, - tooltip: { distance: 6 }, - threshold: 0, - borderColor: '#ffffff', - }, - { - cropShoulder: 0, - directTouch: !0, - trackerGroups: ['group', 'dataLabelsGroup'], - negStacks: !0, - init: function() { - n.prototype.init.apply(this, arguments); - var a = this, - h = a.chart; - h.hasRendered && - H(h.series, function(e) { - e.type === a.type && (e.isDirty = !0); - }); - }, - getColumnMetrics: function() { - var a = this, - h = a.options, - f = a.xAxis, - d = a.yAxis, - c = f.reversed, - b, - k = {}, - l = 0; - !1 === h.grouping - ? (l = 1) - : H(a.chart.series, function(c) { - var e = c.options, - h = c.yAxis, - f; - c.type !== a.type || - (!c.visible && a.chart.options.chart.ignoreHiddenSeries) || - d.len !== h.len || - d.pos !== h.pos || - (e.stacking - ? ((b = c.stackKey), - void 0 === k[b] && (k[b] = l++), - (f = k[b])) - : !1 !== e.grouping && (f = l++), - (c.columnIndex = f)); - }); - var n = Math.min( - Math.abs(f.transA) * - (f.ordinalSlope || - h.pointRange || - f.closestPointRange || - f.tickInterval || - 1), - f.len, - ), - p = n * h.groupPadding, - x = (n - 2 * p) / (l || 1), - h = Math.min( - h.maxPointWidth || f.len, - r(h.pointWidth, x * (1 - 2 * h.pointPadding)), - ); - a.columnMetrics = { - width: h, - offset: - (x - h) / 2 + - (p + ((a.columnIndex || 0) + (c ? 1 : 0)) * x - n / 2) * - (c ? -1 : 1), - }; - return a.columnMetrics; - }, - crispCol: function(a, h, f, d) { - var c = this.chart, - b = this.borderWidth, - e = -(b % 2 ? 0.5 : 0), - b = b % 2 ? 0.5 : 1; - c.inverted && c.renderer.isVML && (b += 1); - this.options.crisp && - ((f = Math.round(a + f) + e), (a = Math.round(a) + e), (f -= a)); - d = Math.round(h + d) + b; - e = 0.5 >= Math.abs(h) && 0.5 < d; - h = Math.round(h) + b; - d -= h; - e && d && (--h, (d += 1)); - return { x: a, y: h, width: f, height: d }; - }, - translate: function() { - var a = this, - h = a.chart, - f = a.options, - d = (a.dense = 2 > a.closestPointRange * a.xAxis.transA), - d = (a.borderWidth = r(f.borderWidth, d ? 0 : 1)), - c = a.yAxis, - b = f.threshold, - k = (a.translatedThreshold = c.getThreshold(b)), - l = r(f.minPointLength, 5), - p = a.getColumnMetrics(), - u = p.width, - x = (a.barW = Math.max(u, 1 + 2 * d)), - w = (a.pointXOffset = p.offset); - h.inverted && (k -= 0.5); - f.pointPadding && (x = Math.ceil(x)); - n.prototype.translate.apply(a); - H(a.points, function(d) { - var e = r(d.yBottom, k), - f = 999 + Math.abs(e), - f = Math.min(Math.max(-f, d.plotY), c.len + f), - m = d.plotX + w, - n = x, - t = Math.min(f, e), - p, - g = Math.max(f, e) - t; - l && - Math.abs(g) < l && - ((g = l), - (p = (!c.reversed && !d.negative) || (c.reversed && d.negative)), - d.y === b && a.dataMax <= b && c.min < b && (p = !p), - (t = Math.abs(t - k) > l ? e - l : k - (p ? l : 0))); - d.barX = m; - d.pointWidth = u; - d.tooltipPos = h.inverted - ? [c.len + c.pos - h.plotLeft - f, a.xAxis.len - m - n / 2, g] - : [m + n / 2, f + c.pos - h.plotTop, g]; - d.shapeType = 'rect'; - d.shapeArgs = a.crispCol.apply( - a, - d.isNull ? [m, k, n, 0] : [m, t, n, g], - ); - }); - }, - getSymbol: a.noop, - drawLegendSymbol: a.LegendSymbolMixin.drawRectangle, - drawGraph: function() { - this.group[this.dense ? 'addClass' : 'removeClass']( - 'highcharts-dense-data', - ); - }, - pointAttribs: function(a, f) { - var e = this.options, - d, - c = this.pointAttrToOptions || {}; - d = c.stroke || 'borderColor'; - var b = c['stroke-width'] || 'borderWidth', - k = (a && a.color) || this.color, - h = (a && a[d]) || e[d] || this.color || k, - n = (a && a[b]) || e[b] || this[b] || 0, - c = e.dashStyle; - a && - this.zones.length && - ((k = a.getZone()), - (k = a.options.color || (k && k.color) || this.color)); - f && - ((a = l( - e.states[f], - (a.options.states && a.options.states[f]) || {}, - )), - (f = a.brightness), - (k = - a.color || - (void 0 !== f && - D(k) - .brighten(a.brightness) - .get()) || - k), - (h = a[d] || h), - (n = a[b] || n), - (c = a.dashStyle || c)); - d = { fill: k, stroke: h, 'stroke-width': n }; - c && (d.dashstyle = c); - return d; - }, - drawPoints: function() { - var a = this, - h = this.chart, - m = a.options, - d = h.renderer, - c = m.animationLimit || 250, - b; - H(a.points, function(e) { - var k = e.graphic; - if (f(e.plotY) && null !== e.y) { - b = e.shapeArgs; - if (k) k[h.pointCount < c ? 'animate' : 'attr'](l(b)); - else e.graphic = k = d[e.shapeType](b).add(e.group || a.group); - m.borderRadius && k.attr({ r: m.borderRadius }); - k.attr(a.pointAttribs(e, e.selected && 'select')).shadow( - m.shadow, - null, - m.stacking && !m.borderRadius, - ); - k.addClass(e.getClassName(), !0); - } else k && (e.graphic = k.destroy()); - }); - }, - animate: function(a) { - var e = this, - f = this.yAxis, - d = e.options, - c = this.chart.inverted, - b = {}, - k = c ? 'translateX' : 'translateY', - l; - u && - (a - ? ((b.scaleY = 0.001), - (a = Math.min( - f.pos + f.len, - Math.max(f.pos, f.toPixels(d.threshold)), - )), - c ? (b.translateX = a - f.len) : (b.translateY = a), - e.group.attr(b)) - : ((l = e.group.attr(k)), - e.group.animate( - { scaleY: 1 }, - p(E(e.options.animation), { - step: function(a, c) { - b[k] = l + c.pos * (f.pos - l); - e.group.attr(b); - }, - }), - ), - (e.animate = null))); - }, - remove: function() { - var a = this, - f = a.chart; - f.hasRendered && - H(f.series, function(e) { - e.type === a.type && (e.isDirty = !0); - }); - n.prototype.remove.apply(a, arguments); - }, - }, - ); - })(M); - (function(a) { - a = a.seriesType; - a('bar', 'column', null, { inverted: !0 }); - })(M); - (function(a) { - var E = a.Series; - a = a.seriesType; - a( - 'scatter', - 'line', - { - lineWidth: 0, - findNearestPointBy: 'xy', - marker: { enabled: !0 }, - tooltip: { - headerFormat: - '\x3cspan style\x3d"color:{point.color}"\x3e\u25cf\x3c/span\x3e \x3cspan style\x3d"font-size: 0.85em"\x3e {series.name}\x3c/span\x3e\x3cbr/\x3e', - pointFormat: - 'x: \x3cb\x3e{point.x}\x3c/b\x3e\x3cbr/\x3ey: \x3cb\x3e{point.y}\x3c/b\x3e\x3cbr/\x3e', - }, - }, - { - sorted: !1, - requireSorting: !1, - noSharedTooltip: !0, - trackerGroups: ['group', 'markerGroup', 'dataLabelsGroup'], - takeOrdinalPosition: !1, - drawGraph: function() { - this.options.lineWidth && E.prototype.drawGraph.call(this); - }, - }, - ); - })(M); - (function(a) { - var E = a.deg2rad, - D = a.isNumber, - H = a.pick, - p = a.relativeLength; - a.CenteredSeriesMixin = { - getCenter: function() { - var a = this.options, - l = this.chart, - r = 2 * (a.slicedOffset || 0), - n = l.plotWidth - 2 * r, - l = l.plotHeight - 2 * r, - w = a.center, - w = [ - H(w[0], '50%'), - H(w[1], '50%'), - a.size || '100%', - a.innerSize || 0, - ], - u = Math.min(n, l), - e, - h; - for (e = 0; 4 > e; ++e) - (h = w[e]), - (a = 2 > e || (2 === e && /%$/.test(h))), - (w[e] = p(h, [n, l, u, w[2]][e]) + (a ? r : 0)); - w[3] > w[2] && (w[3] = w[2]); - return w; - }, - getStartAndEndRadians: function(a, l) { - a = D(a) ? a : 0; - l = D(l) && l > a && 360 > l - a ? l : a + 360; - return { start: E * (a + -90), end: E * (l + -90) }; - }, - }; - })(M); - (function(a) { - var E = a.addEvent, - D = a.CenteredSeriesMixin, - H = a.defined, - p = a.each, - f = a.extend, - l = D.getStartAndEndRadians, - r = a.inArray, - n = a.noop, - w = a.pick, - u = a.Point, - e = a.Series, - h = a.seriesType, - m = a.setAnimation; - h( - 'pie', - 'line', - { - center: [null, null], - clip: !1, - colorByPoint: !0, - dataLabels: { - distance: 30, - enabled: !0, - formatter: function() { - return this.point.isNull ? void 0 : this.point.name; - }, - x: 0, - }, - ignoreHiddenPoint: !0, - legendType: 'point', - marker: null, - size: null, - showInLegend: !1, - slicedOffset: 10, - stickyTracking: !1, - tooltip: { followPointer: !0 }, - borderColor: '#ffffff', - borderWidth: 1, - states: { hover: { brightness: 0.1, shadow: !1 } }, - }, - { - isCartesian: !1, - requireSorting: !1, - directTouch: !0, - noSharedTooltip: !0, - trackerGroups: ['group', 'dataLabelsGroup'], - axisTypes: [], - pointAttribs: a.seriesTypes.column.prototype.pointAttribs, - animate: function(a) { - var c = this, - b = c.points, - d = c.startAngleRad; - a || - (p(b, function(a) { - var b = a.graphic, - e = a.shapeArgs; - b && - (b.attr({ r: a.startR || c.center[3] / 2, start: d, end: d }), - b.animate( - { r: e.r, start: e.start, end: e.end }, - c.options.animation, - )); - }), - (c.animate = null)); - }, - updateTotals: function() { - var a, - c = 0, - b = this.points, - e = b.length, - f, - h = this.options.ignoreHiddenPoint; - for (a = 0; a < e; a++) - (f = b[a]), (c += h && !f.visible ? 0 : f.isNull ? 0 : f.y); - this.total = c; - for (a = 0; a < e; a++) - (f = b[a]), - (f.percentage = 0 < c && (f.visible || !h) ? (f.y / c) * 100 : 0), - (f.total = c); - }, - generatePoints: function() { - e.prototype.generatePoints.call(this); - this.updateTotals(); - }, - translate: function(a) { - this.generatePoints(); - var c = 0, - b = this.options, - d = b.slicedOffset, - e = d + (b.borderWidth || 0), - f, - h, - m, - n = l(b.startAngle, b.endAngle), - t = (this.startAngleRad = n.start), - n = (this.endAngleRad = n.end) - t, - p = this.points, - u, - q = b.dataLabels.distance, - b = b.ignoreHiddenPoint, - r, - F = p.length, - G; - a || (this.center = a = this.getCenter()); - this.getX = function(b, c, d) { - m = Math.asin( - Math.min((b - a[1]) / (a[2] / 2 + d.labelDistance), 1), - ); - return ( - a[0] + (c ? -1 : 1) * Math.cos(m) * (a[2] / 2 + d.labelDistance) - ); - }; - for (r = 0; r < F; r++) { - G = p[r]; - G.labelDistance = w( - G.options.dataLabels && G.options.dataLabels.distance, - q, - ); - this.maxLabelDistance = Math.max( - this.maxLabelDistance || 0, - G.labelDistance, - ); - f = t + c * n; - if (!b || G.visible) c += G.percentage / 100; - h = t + c * n; - G.shapeType = 'arc'; - G.shapeArgs = { - x: a[0], - y: a[1], - r: a[2] / 2, - innerR: a[3] / 2, - start: Math.round(1e3 * f) / 1e3, - end: Math.round(1e3 * h) / 1e3, - }; - m = (h + f) / 2; - m > 1.5 * Math.PI - ? (m -= 2 * Math.PI) - : m < -Math.PI / 2 && (m += 2 * Math.PI); - G.slicedTranslation = { - translateX: Math.round(Math.cos(m) * d), - translateY: Math.round(Math.sin(m) * d), - }; - h = (Math.cos(m) * a[2]) / 2; - u = (Math.sin(m) * a[2]) / 2; - G.tooltipPos = [a[0] + 0.7 * h, a[1] + 0.7 * u]; - G.half = m < -Math.PI / 2 || m > Math.PI / 2 ? 1 : 0; - G.angle = m; - f = Math.min(e, G.labelDistance / 5); - G.labelPos = [ - a[0] + h + Math.cos(m) * G.labelDistance, - a[1] + u + Math.sin(m) * G.labelDistance, - a[0] + h + Math.cos(m) * f, - a[1] + u + Math.sin(m) * f, - a[0] + h, - a[1] + u, - 0 > G.labelDistance ? 'center' : G.half ? 'right' : 'left', - m, - ]; - } - }, - drawGraph: null, - drawPoints: function() { - var a = this, - c = a.chart.renderer, - b, - e, - h, - l, - m = a.options.shadow; - m && !a.shadowGroup && (a.shadowGroup = c.g('shadow').add(a.group)); - p(a.points, function(d) { - e = d.graphic; - if (d.isNull) e && (d.graphic = e.destroy()); - else { - l = d.shapeArgs; - b = d.getTranslate(); - var k = d.shadowGroup; - m && !k && (k = d.shadowGroup = c.g('shadow').add(a.shadowGroup)); - k && k.attr(b); - h = a.pointAttribs(d, d.selected && 'select'); - e - ? e - .setRadialReference(a.center) - .attr(h) - .animate(f(l, b)) - : ((d.graphic = e = c[d.shapeType](l) - .setRadialReference(a.center) - .attr(b) - .add(a.group)), - d.visible || e.attr({ visibility: 'hidden' }), - e - .attr(h) - .attr({ 'stroke-linejoin': 'round' }) - .shadow(m, k)); - e.addClass(d.getClassName()); - } - }); - }, - searchPoint: n, - sortByAngle: function(a, c) { - a.sort(function(a, d) { - return void 0 !== a.angle && (d.angle - a.angle) * c; - }); - }, - drawLegendSymbol: a.LegendSymbolMixin.drawRectangle, - getCenter: D.getCenter, - getSymbol: n, - }, - { - init: function() { - u.prototype.init.apply(this, arguments); - var a = this, - c; - a.name = w(a.name, 'Slice'); - c = function(b) { - a.slice('select' === b.type); - }; - E(a, 'select', c); - E(a, 'unselect', c); - return a; - }, - isValid: function() { - return a.isNumber(this.y, !0) && 0 <= this.y; - }, - setVisible: function(a, c) { - var b = this, - d = b.series, - e = d.chart, - f = d.options.ignoreHiddenPoint; - c = w(c, f); - a !== b.visible && - ((b.visible = b.options.visible = a = - void 0 === a ? !b.visible : a), - (d.options.data[r(b, d.data)] = b.options), - p(['graphic', 'dataLabel', 'connector', 'shadowGroup'], function( - c, - ) { - if (b[c]) b[c][a ? 'show' : 'hide'](!0); - }), - b.legendItem && e.legend.colorizeItem(b, a), - a || 'hover' !== b.state || b.setState(''), - f && (d.isDirty = !0), - c && e.redraw()); - }, - slice: function(a, c, b) { - var d = this.series; - m(b, d.chart); - w(c, !0); - this.sliced = this.options.sliced = H(a) ? a : !this.sliced; - d.options.data[r(this, d.data)] = this.options; - this.graphic.animate(this.getTranslate()); - this.shadowGroup && this.shadowGroup.animate(this.getTranslate()); - }, - getTranslate: function() { - return this.sliced - ? this.slicedTranslation - : { translateX: 0, translateY: 0 }; - }, - haloPath: function(a) { - var c = this.shapeArgs; - return this.sliced || !this.visible - ? [] - : this.series.chart.renderer.symbols.arc( - c.x, - c.y, - c.r + a, - c.r + a, - { innerR: this.shapeArgs.r - 1, start: c.start, end: c.end }, - ); - }, - }, - ); - })(M); - (function(a) { - var E = a.addEvent, - D = a.arrayMax, - H = a.defined, - p = a.each, - f = a.extend, - l = a.format, - r = a.map, - n = a.merge, - w = a.noop, - u = a.pick, - e = a.relativeLength, - h = a.Series, - m = a.seriesTypes, - d = a.stableSort; - a.distribute = function(a, b) { - function c(a, b) { - return a.target - b.target; - } - var e, - f = !0, - h = a, - l = [], - m; - m = 0; - for (e = a.length; e--; ) m += a[e].size; - if (m > b) { - d(a, function(a, b) { - return (b.rank || 0) - (a.rank || 0); - }); - for (m = e = 0; m <= b; ) (m += a[e].size), e++; - l = a.splice(e - 1, a.length); - } - d(a, c); - for ( - a = r(a, function(a) { - return { size: a.size, targets: [a.target], align: u(a.align, 0.5) }; - }); - f; - - ) { - for (e = a.length; e--; ) - (f = a[e]), - (m = - (Math.min.apply(0, f.targets) + Math.max.apply(0, f.targets)) / - 2), - (f.pos = Math.min(Math.max(0, m - f.size * f.align), b - f.size)); - e = a.length; - for (f = !1; e--; ) - 0 < e && - a[e - 1].pos + a[e - 1].size > a[e].pos && - ((a[e - 1].size += a[e].size), - (a[e - 1].targets = a[e - 1].targets.concat(a[e].targets)), - (a[e - 1].align = 0.5), - a[e - 1].pos + a[e - 1].size > b && - (a[e - 1].pos = b - a[e - 1].size), - a.splice(e, 1), - (f = !0)); - } - e = 0; - p(a, function(a) { - var b = 0; - p(a.targets, function() { - h[e].pos = a.pos + b; - b += h[e].size; - e++; - }); - }); - h.push.apply(h, l); - d(h, c); - }; - h.prototype.drawDataLabels = function() { - function c(a, b) { - var c = b.filter; - return c - ? ((b = c.operator), - (a = a[c.property]), - (c = c.value), - ('\x3e' === b && a > c) || - ('\x3c' === b && a < c) || - ('\x3e\x3d' === b && a >= c) || - ('\x3c\x3d' === b && a <= c) || - ('\x3d\x3d' === b && a == c) || - ('\x3d\x3d\x3d' === b && a === c) - ? !0 - : !1) - : !0; - } - var b = this, - d = b.options, - e = d.dataLabels, - f = b.points, - h, - m, - r = b.hasRendered || 0, - t, - w, - D = u(e.defer, !!d.animation), - q = b.chart.renderer; - if (e.enabled || b._hasPointLabels) - b.dlProcessOptions && b.dlProcessOptions(e), - (w = b.plotGroup( - 'dataLabelsGroup', - 'data-labels', - D && !r ? 'hidden' : 'visible', - e.zIndex || 6, - )), - D && - (w.attr({ opacity: +r }), - r || - E(b, 'afterAnimate', function() { - b.visible && w.show(!0); - w[d.animation ? 'animate' : 'attr']( - { opacity: 1 }, - { duration: 200 }, - ); - })), - (m = e), - p(f, function(f) { - var k, - p = f.dataLabel, - g, - x, - r = f.connector, - z = !p, - C; - h = f.dlOptions || (f.options && f.options.dataLabels); - (k = u(h && h.enabled, m.enabled) && !f.isNull) && - (k = !0 === c(f, h || e)); - k && - ((e = n(m, h)), - (g = f.getLabelConfig()), - (C = e[f.formatPrefix + 'Format'] || e.format), - (t = H(C) - ? l(C, g) - : (e[f.formatPrefix + 'Formatter'] || e.formatter).call(g, e)), - (C = e.style), - (g = e.rotation), - (C.color = u(e.color, C.color, b.color, '#000000')), - 'contrast' === C.color && - ((f.contrastColor = q.getContrast(f.color || b.color)), - (C.color = - e.inside || 0 > u(f.labelDistance, e.distance) || d.stacking - ? f.contrastColor - : '#000000')), - d.cursor && (C.cursor = d.cursor), - (x = { - fill: e.backgroundColor, - stroke: e.borderColor, - 'stroke-width': e.borderWidth, - r: e.borderRadius || 0, - rotation: g, - padding: e.padding, - zIndex: 1, - }), - a.objectEach(x, function(a, b) { - void 0 === a && delete x[b]; - })); - !p || (k && H(t)) - ? k && - H(t) && - (p - ? (x.text = t) - : ((p = f.dataLabel = g - ? q.text(t, 0, -9999).addClass('highcharts-data-label') - : q.label( - t, - 0, - -9999, - e.shape, - null, - null, - e.useHTML, - null, - 'data-label', - )), - p.addClass( - ' highcharts-data-label-color-' + - f.colorIndex + - ' ' + - (e.className || '') + - (e.useHTML ? 'highcharts-tracker' : ''), - )), - p.attr(x), - p.css(C).shadow(e.shadow), - p.added || p.add(w), - b.alignDataLabel(f, p, e, null, z)) - : ((f.dataLabel = p = p.destroy()), - r && (f.connector = r.destroy())); - }); - }; - h.prototype.alignDataLabel = function(a, b, d, e, h) { - var c = this.chart, - k = c.inverted, - l = u(a.dlBox && a.dlBox.centerX, a.plotX, -9999), - m = u(a.plotY, -9999), - n = b.getBBox(), - p, - q = d.rotation, - r = d.align, - w = - this.visible && - (a.series.forceDL || - c.isInsidePlot(l, Math.round(m), k) || - (e && c.isInsidePlot(l, k ? e.x + 1 : e.y + e.height - 1, k))), - z = 'justify' === u(d.overflow, 'justify'); - if ( - w && - ((p = d.style.fontSize), - (p = c.renderer.fontMetrics(p, b).b), - (e = f( - { - x: k ? this.yAxis.len - m : l, - y: Math.round(k ? this.xAxis.len - l : m), - width: 0, - height: 0, - }, - e, - )), - f(d, { width: n.width, height: n.height }), - q - ? ((z = !1), - (l = c.renderer.rotCorr(p, q)), - (l = { - x: e.x + d.x + e.width / 2 + l.x, - y: - e.y + - d.y + - { top: 0, middle: 0.5, bottom: 1 }[d.verticalAlign] * e.height, - }), - b[h ? 'attr' : 'animate'](l).attr({ align: r }), - (m = (q + 720) % 360), - (m = 180 < m && 360 > m), - 'left' === r - ? (l.y -= m ? n.height : 0) - : 'center' === r - ? ((l.x -= n.width / 2), (l.y -= n.height / 2)) - : 'right' === r && ((l.x -= n.width), (l.y -= m ? 0 : n.height))) - : (b.align(d, null, e), (l = b.alignAttr)), - z - ? (a.isLabelJustified = this.justifyDataLabel(b, d, l, n, e, h)) - : u(d.crop, !0) && - (w = - c.isInsidePlot(l.x, l.y) && - c.isInsidePlot(l.x + n.width, l.y + n.height)), - d.shape && !q) - ) - b[h ? 'attr' : 'animate']({ - anchorX: k ? c.plotWidth - a.plotY : a.plotX, - anchorY: k ? c.plotHeight - a.plotX : a.plotY, - }); - w || (b.attr({ y: -9999 }), (b.placed = !1)); - }; - h.prototype.justifyDataLabel = function(a, b, d, e, f, h) { - var c = this.chart, - k = b.align, - l = b.verticalAlign, - m, - n, - p = a.box ? 0 : a.padding || 0; - m = d.x + p; - 0 > m && ('right' === k ? (b.align = 'left') : (b.x = -m), (n = !0)); - m = d.x + e.width - p; - m > c.plotWidth && - ('left' === k ? (b.align = 'right') : (b.x = c.plotWidth - m), - (n = !0)); - m = d.y + p; - 0 > m && - ('bottom' === l ? (b.verticalAlign = 'top') : (b.y = -m), (n = !0)); - m = d.y + e.height - p; - m > c.plotHeight && - ('top' === l ? (b.verticalAlign = 'bottom') : (b.y = c.plotHeight - m), - (n = !0)); - n && ((a.placed = !h), a.align(b, null, f)); - return n; - }; - m.pie && - ((m.pie.prototype.drawDataLabels = function() { - var c = this, - b = c.data, - d, - e = c.chart, - f = c.options.dataLabels, - l = u(f.connectorPadding, 10), - m = u(f.connectorWidth, 1), - n = e.plotWidth, - t = e.plotHeight, - r, - w = c.center, - q = w[2] / 2, - A = w[1], - F, - G, - g, - v, - E = [[], []], - L, - P, - J, - M, - y = [0, 0, 0, 0]; - c.visible && - (f.enabled || c._hasPointLabels) && - (p(b, function(a) { - a.dataLabel && - a.visible && - a.dataLabel.shortened && - (a.dataLabel - .attr({ width: 'auto' }) - .css({ width: 'auto', textOverflow: 'clip' }), - (a.dataLabel.shortened = !1)); - }), - h.prototype.drawDataLabels.apply(c), - p(b, function(a) { - a.dataLabel && - a.visible && - (E[a.half].push(a), (a.dataLabel._pos = null)); - }), - p(E, function(b, h) { - var k, - m, - x = b.length, - r = [], - z; - if (x) - for ( - c.sortByAngle(b, h - 0.5), - 0 < c.maxLabelDistance && - ((k = Math.max(0, A - q - c.maxLabelDistance)), - (m = Math.min(A + q + c.maxLabelDistance, e.plotHeight)), - p(b, function(a) { - 0 < a.labelDistance && - a.dataLabel && - ((a.top = Math.max(0, A - q - a.labelDistance)), - (a.bottom = Math.min( - A + q + a.labelDistance, - e.plotHeight, - )), - (z = a.dataLabel.getBBox().height || 21), - (a.positionsIndex = - r.push({ - target: a.labelPos[1] - a.top + z / 2, - size: z, - rank: a.y, - }) - 1)); - }), - a.distribute(r, m + z - k)), - M = 0; - M < x; - M++ - ) - (d = b[M]), - (m = d.positionsIndex), - (g = d.labelPos), - (F = d.dataLabel), - (J = !1 === d.visible ? 'hidden' : 'inherit'), - (P = k = g[1]), - r && - H(r[m]) && - (void 0 === r[m].pos - ? (J = 'hidden') - : ((v = r[m].size), (P = d.top + r[m].pos))), - delete d.positionIndex, - (L = f.justify - ? w[0] + (h ? -1 : 1) * (q + d.labelDistance) - : c.getX(P < d.top + 2 || P > d.bottom - 2 ? k : P, h, d)), - (F._attr = { visibility: J, align: g[6] }), - (F._pos = { - x: L + f.x + ({ left: l, right: -l }[g[6]] || 0), - y: P + f.y - 10, - }), - (g.x = L), - (g.y = P), - u(f.crop, !0) && - ((G = F.getBBox().width), - (k = null), - L - G < l - ? ((k = Math.round(G - L + l)), - (y[3] = Math.max(k, y[3]))) - : L + G > n - l && - ((k = Math.round(L + G - n + l)), - (y[1] = Math.max(k, y[1]))), - 0 > P - v / 2 - ? (y[0] = Math.max(Math.round(-P + v / 2), y[0])) - : P + v / 2 > t && - (y[2] = Math.max(Math.round(P + v / 2 - t), y[2])), - (F.sideOverflow = k)); - }), - 0 === D(y) || this.verifyDataLabelOverflow(y)) && - (this.placeDataLabels(), - m && - p(this.points, function(a) { - var b; - r = a.connector; - if ( - (F = a.dataLabel) && - F._pos && - a.visible && - 0 < a.labelDistance - ) { - J = F._attr.visibility; - if ((b = !r)) - (a.connector = r = e.renderer - .path() - .addClass( - 'highcharts-data-label-connector highcharts-color-' + - a.colorIndex, - ) - .add(c.dataLabelsGroup)), - r.attr({ - 'stroke-width': m, - stroke: f.connectorColor || a.color || '#666666', - }); - r[b ? 'attr' : 'animate']({ d: c.connectorPath(a.labelPos) }); - r.attr('visibility', J); - } else r && (a.connector = r.destroy()); - })); - }), - (m.pie.prototype.connectorPath = function(a) { - var b = a.x, - c = a.y; - return u(this.options.dataLabels.softConnector, !0) - ? [ - 'M', - b + ('left' === a[6] ? 5 : -5), - c, - 'C', - b, - c, - 2 * a[2] - a[4], - 2 * a[3] - a[5], - a[2], - a[3], - 'L', - a[4], - a[5], - ] - : [ - 'M', - b + ('left' === a[6] ? 5 : -5), - c, - 'L', - a[2], - a[3], - 'L', - a[4], - a[5], - ]; - }), - (m.pie.prototype.placeDataLabels = function() { - p( - this.points, - function(a) { - var b = a.dataLabel; - b && - a.visible && - ((a = b._pos) - ? (b.sideOverflow && - ((b._attr.width = b.getBBox().width - b.sideOverflow), - b.css({ - width: b._attr.width + 'px', - textOverflow: 'ellipsis', - }), - (b.shortened = !0)), - b.attr(b._attr), - b[b.moved ? 'animate' : 'attr'](a), - (b.moved = !0)) - : b && b.attr({ y: -9999 })); - }, - this, - ); - }), - (m.pie.prototype.alignDataLabel = w), - (m.pie.prototype.verifyDataLabelOverflow = function(a) { - var b = this.center, - c = this.options, - d = c.center, - f = c.minSize || 80, - h, - l = null !== c.size; - l || - (null !== d[0] - ? (h = Math.max(b[2] - Math.max(a[1], a[3]), f)) - : ((h = Math.max(b[2] - a[1] - a[3], f)), - (b[0] += (a[3] - a[1]) / 2)), - null !== d[1] - ? (h = Math.max(Math.min(h, b[2] - Math.max(a[0], a[2])), f)) - : ((h = Math.max(Math.min(h, b[2] - a[0] - a[2]), f)), - (b[1] += (a[0] - a[2]) / 2)), - h < b[2] - ? ((b[2] = h), - (b[3] = Math.min(e(c.innerSize || 0, h), h)), - this.translate(b), - this.drawDataLabels && this.drawDataLabels()) - : (l = !0)); - return l; - })); - m.column && - (m.column.prototype.alignDataLabel = function(a, b, d, e, f) { - var c = this.chart.inverted, - k = a.series, - l = a.dlBox || a.shapeArgs, - m = u(a.below, a.plotY > u(this.translatedThreshold, k.yAxis.len)), - p = u(d.inside, !!this.options.stacking); - l && - ((e = n(l)), - 0 > e.y && ((e.height += e.y), (e.y = 0)), - (l = e.y + e.height - k.yAxis.len), - 0 < l && (e.height -= l), - c && - (e = { - x: k.yAxis.len - e.y - e.height, - y: k.xAxis.len - e.x - e.width, - width: e.height, - height: e.width, - }), - p || - (c - ? ((e.x += m ? 0 : e.width), (e.width = 0)) - : ((e.y += m ? e.height : 0), (e.height = 0)))); - d.align = u(d.align, !c || p ? 'center' : m ? 'right' : 'left'); - d.verticalAlign = u( - d.verticalAlign, - c || p ? 'middle' : m ? 'top' : 'bottom', - ); - h.prototype.alignDataLabel.call(this, a, b, d, e, f); - a.isLabelJustified && - a.contrastColor && - a.dataLabel.css({ color: a.contrastColor }); - }); - })(M); - (function(a) { - var E = a.Chart, - D = a.each, - H = a.objectEach, - p = a.pick; - a = a.addEvent; - a(E.prototype, 'render', function() { - var a = []; - D(this.labelCollectors || [], function(f) { - a = a.concat(f()); - }); - D(this.yAxis || [], function(f) { - f.options.stackLabels && - !f.options.stackLabels.allowOverlap && - H(f.stacks, function(f) { - H(f, function(f) { - a.push(f.label); - }); - }); - }); - D(this.series || [], function(f) { - var l = f.options.dataLabels, - n = f.dataLabelCollections || ['dataLabel']; - (l.enabled || f._hasPointLabels) && - !l.allowOverlap && - f.visible && - D(n, function(l) { - D(f.points, function(f) { - f[l] && - ((f[l].labelrank = p( - f.labelrank, - f.shapeArgs && f.shapeArgs.height, - )), - a.push(f[l])); - }); - }); - }); - this.hideOverlappingLabels(a); - }); - E.prototype.hideOverlappingLabels = function(a) { - var f = a.length, - p, - n, - w, - u, - e, - h, - m, - d, - c, - b = function(a, b, c, d, e, f, h, l) { - return !(e > a + c || e + h < a || f > b + d || f + l < b); - }; - for (n = 0; n < f; n++) - if ((p = a[n])) - (p.oldOpacity = p.opacity), - (p.newOpacity = 1), - p.width || - ((w = p.getBBox()), (p.width = w.width), (p.height = w.height)); - a.sort(function(a, b) { - return (b.labelrank || 0) - (a.labelrank || 0); - }); - for (n = 0; n < f; n++) - for (w = a[n], p = n + 1; p < f; ++p) - if ( - ((u = a[p]), - w && - u && - w !== u && - w.placed && - u.placed && - 0 !== w.newOpacity && - 0 !== u.newOpacity && - ((e = w.alignAttr), - (h = u.alignAttr), - (m = w.parentGroup), - (d = u.parentGroup), - (c = 2 * (w.box ? 0 : w.padding || 0)), - (e = b( - e.x + m.translateX, - e.y + m.translateY, - w.width - c, - w.height - c, - h.x + d.translateX, - h.y + d.translateY, - u.width - c, - u.height - c, - )))) - ) - (w.labelrank < u.labelrank ? w : u).newOpacity = 0; - D(a, function(a) { - var b, c; - a && - ((c = a.newOpacity), - a.oldOpacity !== c && - a.placed && - (c - ? a.show(!0) - : (b = function() { - a.hide(); - }), - (a.alignAttr.opacity = c), - a[a.isOld ? 'animate' : 'attr'](a.alignAttr, null, b)), - (a.isOld = !0)); - }); - }; - })(M); - (function(a) { - var E = a.addEvent, - D = a.Chart, - H = a.createElement, - p = a.css, - f = a.defaultOptions, - l = a.defaultPlotOptions, - r = a.each, - n = a.extend, - w = a.fireEvent, - u = a.hasTouch, - e = a.inArray, - h = a.isObject, - m = a.Legend, - d = a.merge, - c = a.pick, - b = a.Point, - k = a.Series, - z = a.seriesTypes, - B = a.svg, - I; - I = a.TrackerMixin = { - drawTrackerPoint: function() { - var a = this, - b = a.chart.pointer, - c = function(a) { - var c = b.getPointFromEvent(a); - void 0 !== c && ((b.isDirectTouch = !0), c.onMouseOver(a)); - }; - r(a.points, function(a) { - a.graphic && (a.graphic.element.point = a); - a.dataLabel && - (a.dataLabel.div - ? (a.dataLabel.div.point = a) - : (a.dataLabel.element.point = a)); - }); - a._hasTracking || - (r(a.trackerGroups, function(d) { - if (a[d]) { - a[d] - .addClass('highcharts-tracker') - .on('mouseover', c) - .on('mouseout', function(a) { - b.onTrackerMouseOut(a); - }); - if (u) a[d].on('touchstart', c); - a.options.cursor && a[d].css(p).css({ cursor: a.options.cursor }); - } - }), - (a._hasTracking = !0)); - }, - drawTrackerGraph: function() { - var a = this, - b = a.options, - c = b.trackByArea, - d = [].concat(c ? a.areaPath : a.graphPath), - e = d.length, - f = a.chart, - h = f.pointer, - k = f.renderer, - l = f.options.tooltip.snap, - g = a.tracker, - m, - n = function() { - if (f.hoverSeries !== a) a.onMouseOver(); - }, - p = 'rgba(192,192,192,' + (B ? 0.0001 : 0.002) + ')'; - if (e && !c) - for (m = e + 1; m--; ) - 'M' === d[m] && d.splice(m + 1, 0, d[m + 1] - l, d[m + 2], 'L'), - ((m && 'M' === d[m]) || m === e) && - d.splice(m, 0, 'L', d[m - 2] + l, d[m - 1]); - g - ? g.attr({ d: d }) - : a.graph && - ((a.tracker = k - .path(d) - .attr({ - 'stroke-linejoin': 'round', - visibility: a.visible ? 'visible' : 'hidden', - stroke: p, - fill: c ? p : 'none', - 'stroke-width': a.graph.strokeWidth() + (c ? 0 : 2 * l), - zIndex: 2, - }) - .add(a.group)), - r([a.tracker, a.markerGroup], function(a) { - a.addClass('highcharts-tracker') - .on('mouseover', n) - .on('mouseout', function(a) { - h.onTrackerMouseOut(a); - }); - b.cursor && a.css({ cursor: b.cursor }); - if (u) a.on('touchstart', n); - })); - }, - }; - z.column && (z.column.prototype.drawTracker = I.drawTrackerPoint); - z.pie && (z.pie.prototype.drawTracker = I.drawTrackerPoint); - z.scatter && (z.scatter.prototype.drawTracker = I.drawTrackerPoint); - n(m.prototype, { - setItemEvents: function(a, c, e) { - var f = this, - h = f.chart.renderer.boxWrapper, - k = - 'highcharts-legend-' + - (a instanceof b ? 'point' : 'series') + - '-active'; - (e ? c : a.legendGroup) - .on('mouseover', function() { - a.setState('hover'); - h.addClass(k); - c.css(f.options.itemHoverStyle); - }) - .on('mouseout', function() { - c.css(d(a.visible ? f.itemStyle : f.itemHiddenStyle)); - h.removeClass(k); - a.setState(); - }) - .on('click', function(b) { - var c = function() { - a.setVisible && a.setVisible(); - }; - h.removeClass(k); - b = { browserEvent: b }; - a.firePointEvent - ? a.firePointEvent('legendItemClick', b, c) - : w(a, 'legendItemClick', b, c); - }); - }, - createCheckboxForItem: function(a) { - a.checkbox = H( - 'input', - { type: 'checkbox', checked: a.selected, defaultChecked: a.selected }, - this.options.itemCheckboxStyle, - this.chart.container, - ); - E(a.checkbox, 'click', function(b) { - w( - a.series || a, - 'checkboxClick', - { checked: b.target.checked, item: a }, - function() { - a.select(); - }, - ); - }); - }, - }); - f.legend.itemStyle.cursor = 'pointer'; - n(D.prototype, { - showResetZoom: function() { - var a = this, - b = f.lang, - c = a.options.chart.resetZoomButton, - d = c.theme, - e = d.states, - h = 'chart' === c.relativeTo ? null : 'plotBox'; - this.resetZoomButton = a.renderer - .button( - b.resetZoom, - null, - null, - function() { - a.zoomOut(); - }, - d, - e && e.hover, - ) - .attr({ align: c.position.align, title: b.resetZoomTitle }) - .addClass('highcharts-reset-zoom') - .add() - .align(c.position, !1, h); - }, - zoomOut: function() { - var a = this; - w(a, 'selection', { resetSelection: !0 }, function() { - a.zoom(); - }); - }, - zoom: function(a) { - var b, - d = this.pointer, - e = !1, - f; - !a || a.resetSelection - ? (r(this.axes, function(a) { - b = a.zoom(); - }), - (d.initiated = !1)) - : r(a.xAxis.concat(a.yAxis), function(a) { - var c = a.axis; - d[c.isXAxis ? 'zoomX' : 'zoomY'] && - ((b = c.zoom(a.min, a.max)), c.displayBtn && (e = !0)); - }); - f = this.resetZoomButton; - e && !f - ? this.showResetZoom() - : !e && h(f) && (this.resetZoomButton = f.destroy()); - b && - this.redraw( - c( - this.options.chart.animation, - a && a.animation, - 100 > this.pointCount, - ), - ); - }, - pan: function(a, b) { - var c = this, - d = c.hoverPoints, - e; - d && - r(d, function(a) { - a.setState(); - }); - r('xy' === b ? [1, 0] : [1], function(b) { - b = c[b ? 'xAxis' : 'yAxis'][0]; - var d = b.horiz, - f = a[d ? 'chartX' : 'chartY'], - d = d ? 'mouseDownX' : 'mouseDownY', - h = c[d], - g = (b.pointRange || 0) / 2, - k = b.getExtremes(), - l = b.toValue(h - f, !0) + g, - m = b.toValue(h + b.len - f, !0) - g, - n = m < l, - h = n ? m : l, - l = n ? l : m, - m = Math.min( - k.dataMin, - g ? k.min : b.toValue(b.toPixels(k.min) - b.minPixelPadding), - ), - g = Math.max( - k.dataMax, - g ? k.max : b.toValue(b.toPixels(k.max) + b.minPixelPadding), - ), - n = m - h; - 0 < n && ((l += n), (h = m)); - n = l - g; - 0 < n && ((l = g), (h -= n)); - b.series.length && - h !== k.min && - l !== k.max && - (b.setExtremes(h, l, !1, !1, { trigger: 'pan' }), (e = !0)); - c[d] = f; - }); - e && c.redraw(!1); - p(c.container, { cursor: 'move' }); - }, - }); - n(b.prototype, { - select: function(a, b) { - var d = this, - f = d.series, - h = f.chart; - a = c(a, !d.selected); - d.firePointEvent( - a ? 'select' : 'unselect', - { accumulate: b }, - function() { - d.selected = d.options.selected = a; - f.options.data[e(d, f.data)] = d.options; - d.setState(a && 'select'); - b || - r(h.getSelectedPoints(), function(a) { - a.selected && - a !== d && - ((a.selected = a.options.selected = !1), - (f.options.data[e(a, f.data)] = a.options), - a.setState(''), - a.firePointEvent('unselect')); - }); - }, - ); - }, - onMouseOver: function(a) { - var b = this.series.chart, - c = b.pointer; - a = a - ? c.normalize(a) - : c.getChartCoordinatesFromPoint(this, b.inverted); - c.runPointActions(a, this); - }, - onMouseOut: function() { - var a = this.series.chart; - this.firePointEvent('mouseOut'); - r(a.hoverPoints || [], function(a) { - a.setState(); - }); - a.hoverPoints = a.hoverPoint = null; - }, - importEvents: function() { - if (!this.hasImportedEvents) { - var b = this, - c = d(b.series.options.point, b.options).events; - b.events = c; - a.objectEach(c, function(a, c) { - E(b, c, a); - }); - this.hasImportedEvents = !0; - } - }, - setState: function(a, b) { - var d = Math.floor(this.plotX), - e = this.plotY, - f = this.series, - h = f.options.states[a] || {}, - k = l[f.type].marker && f.options.marker, - m = k && !1 === k.enabled, - p = (k && k.states && k.states[a]) || {}, - g = !1 === p.enabled, - r = f.stateMarkerGraphic, - u = this.marker || {}, - w = f.chart, - x = f.halo, - z, - B = k && f.markerAttribs; - a = a || ''; - if ( - !( - (a === this.state && !b) || - (this.selected && 'select' !== a) || - !1 === h.enabled || - (a && (g || (m && !1 === p.enabled))) || - (a && u.states && u.states[a] && !1 === u.states[a].enabled) - ) - ) { - B && (z = f.markerAttribs(this, a)); - if (this.graphic) - this.state && - this.graphic.removeClass('highcharts-point-' + this.state), - a && this.graphic.addClass('highcharts-point-' + a), - this.graphic.animate( - f.pointAttribs(this, a), - c(w.options.chart.animation, h.animation), - ), - z && - this.graphic.animate( - z, - c(w.options.chart.animation, p.animation, k.animation), - ), - r && r.hide(); - else { - if (a && p) { - k = u.symbol || f.symbol; - r && r.currentSymbol !== k && (r = r.destroy()); - if (r) r[b ? 'animate' : 'attr']({ x: z.x, y: z.y }); - else - k && - ((f.stateMarkerGraphic = r = w.renderer - .symbol(k, z.x, z.y, z.width, z.height) - .add(f.markerGroup)), - (r.currentSymbol = k)); - r && r.attr(f.pointAttribs(this, a)); - } - r && - (r[a && w.isInsidePlot(d, e, w.inverted) ? 'show' : 'hide'](), - (r.element.point = this)); - } - (d = h.halo) && d.size - ? (x || - (f.halo = x = w.renderer - .path() - .add((this.graphic || r).parentGroup)), - x[b ? 'animate' : 'attr']({ d: this.haloPath(d.size) }), - x.attr({ - class: - 'highcharts-halo highcharts-color-' + - c(this.colorIndex, f.colorIndex), - }), - (x.point = this), - x.attr( - n( - { - fill: this.color || f.color, - 'fill-opacity': d.opacity, - zIndex: -1, - }, - d.attributes, - ), - )) - : x && - x.point && - x.point.haloPath && - x.animate({ d: x.point.haloPath(0) }); - this.state = a; - } - }, - haloPath: function(a) { - return this.series.chart.renderer.symbols.circle( - Math.floor(this.plotX) - a, - this.plotY - a, - 2 * a, - 2 * a, - ); - }, - }); - n(k.prototype, { - onMouseOver: function() { - var a = this.chart, - b = a.hoverSeries; - if (b && b !== this) b.onMouseOut(); - this.options.events.mouseOver && w(this, 'mouseOver'); - this.setState('hover'); - a.hoverSeries = this; - }, - onMouseOut: function() { - var a = this.options, - b = this.chart, - c = b.tooltip, - d = b.hoverPoint; - b.hoverSeries = null; - if (d) d.onMouseOut(); - this && a.events.mouseOut && w(this, 'mouseOut'); - !c || - this.stickyTracking || - (c.shared && !this.noSharedTooltip) || - c.hide(); - this.setState(); - }, - setState: function(a) { - var b = this, - d = b.options, - e = b.graph, - f = d.states, - h = d.lineWidth, - d = 0; - a = a || ''; - if ( - b.state !== a && - (r([b.group, b.markerGroup, b.dataLabelsGroup], function(c) { - c && - (b.state && c.removeClass('highcharts-series-' + b.state), - a && c.addClass('highcharts-series-' + a)); - }), - (b.state = a), - !f[a] || !1 !== f[a].enabled) && - (a && (h = f[a].lineWidth || h + (f[a].lineWidthPlus || 0)), - e && !e.dashstyle) - ) - for ( - h = { 'stroke-width': h }, - e.animate( - h, - c(b.chart.options.chart.animation, f[a] && f[a].animation), - ); - b['zone-graph-' + d]; - - ) - b['zone-graph-' + d].attr(h), (d += 1); - }, - setVisible: function(a, b) { - var c = this, - d = c.chart, - e = c.legendItem, - f, - h = d.options.chart.ignoreHiddenSeries, - k = c.visible; - f = (c.visible = a = c.options.visible = c.userOptions.visible = - void 0 === a ? !k : a) - ? 'show' - : 'hide'; - r( - ['group', 'dataLabelsGroup', 'markerGroup', 'tracker', 'tt'], - function(a) { - if (c[a]) c[a][f](); - }, - ); - if (d.hoverSeries === c || (d.hoverPoint && d.hoverPoint.series) === c) - c.onMouseOut(); - e && d.legend.colorizeItem(c, a); - c.isDirty = !0; - c.options.stacking && - r(d.series, function(a) { - a.options.stacking && a.visible && (a.isDirty = !0); - }); - r(c.linkedSeries, function(b) { - b.setVisible(a, !1); - }); - h && (d.isDirtyBox = !0); - !1 !== b && d.redraw(); - w(c, f); - }, - show: function() { - this.setVisible(!0); - }, - hide: function() { - this.setVisible(!1); - }, - select: function(a) { - this.selected = a = void 0 === a ? !this.selected : a; - this.checkbox && (this.checkbox.checked = a); - w(this, a ? 'select' : 'unselect'); - }, - drawTracker: I.drawTrackerGraph, - }); - })(M); - (function(a) { - var E = a.Chart, - D = a.each, - H = a.inArray, - p = a.isArray, - f = a.isObject, - l = a.pick, - r = a.splat; - E.prototype.setResponsive = function(f) { - var l = this.options.responsive, - n = [], - e = this.currentResponsive; - l && - l.rules && - D( - l.rules, - function(e) { - void 0 === e._id && (e._id = a.uniqueKey()); - this.matchResponsiveRule(e, n, f); - }, - this, - ); - var h = a.merge.apply( - 0, - a.map(n, function(e) { - return a.find(l.rules, function(a) { - return a._id === e; - }).chartOptions; - }), - ), - n = n.toString() || void 0; - n !== (e && e.ruleIds) && - (e && this.update(e.undoOptions, f), - n - ? ((this.currentResponsive = { - ruleIds: n, - mergedOptions: h, - undoOptions: this.currentOptions(h), - }), - this.update(h, f)) - : (this.currentResponsive = void 0)); - }; - E.prototype.matchResponsiveRule = function(a, f) { - var n = a.condition; - ( - n.callback || - function() { - return ( - this.chartWidth <= l(n.maxWidth, Number.MAX_VALUE) && - this.chartHeight <= l(n.maxHeight, Number.MAX_VALUE) && - this.chartWidth >= l(n.minWidth, 0) && - this.chartHeight >= l(n.minHeight, 0) - ); - } - ).call(this) && f.push(a._id); - }; - E.prototype.currentOptions = function(l) { - function n(e, h, l, d) { - var c; - a.objectEach(e, function(a, e) { - if (!d && -1 < H(e, ['series', 'xAxis', 'yAxis'])) - for (a = r(a), l[e] = [], c = 0; c < a.length; c++) - h[e][c] && ((l[e][c] = {}), n(a[c], h[e][c], l[e][c], d + 1)); - else - f(a) - ? ((l[e] = p(a) ? [] : {}), n(a, h[e] || {}, l[e], d + 1)) - : (l[e] = h[e] || null); - }); - } - var u = {}; - n(l, this.options, u, 0); - return u; - }; - })(M); - return M; -}); +(function(S,M){"object"===typeof module&&module.exports?module.exports=S.document?M(S):M:S.Highcharts=M(S)})("undefined"!==typeof window?window:this,function(S){var M=function(){var a="undefined"===typeof S?window:S,E=a.document,D=a.navigator&&a.navigator.userAgent||"",H=E&&E.createElementNS&&!!E.createElementNS("http://www.w3.org/2000/svg","svg").createSVGRect,p=/(edge|msie|trident)/i.test(D)&&!a.opera,f=/Firefox/.test(D),l=f&&4>parseInt(D.split("Firefox/")[1],10);return a.Highcharts?a.Highcharts.error(16, +!0):{product:"Highcharts",version:"6.0.4",deg2rad:2*Math.PI/360,doc:E,hasBidiBug:l,hasTouch:E&&void 0!==E.documentElement.ontouchstart,isMS:p,isWebKit:/AppleWebKit/.test(D),isFirefox:f,isTouchDevice:/(Mobile|Android|Windows Phone)/.test(D),SVG_NS:"http://www.w3.org/2000/svg",chartCount:0,seriesTypes:{},symbolSizes:{},svg:H,win:a,marginNames:["plotTop","marginRight","marginBottom","plotLeft"],noop:function(){},charts:[]}}();(function(a){a.timers=[];var E=a.charts,D=a.doc,H=a.win;a.error=function(p, +f){p=a.isNumber(p)?"Highcharts error #"+p+": www.highcharts.com/errors/"+p:p;if(f)throw Error(p);H.console&&console.log(p)};a.Fx=function(a,f,l){this.options=f;this.elem=a;this.prop=l};a.Fx.prototype={dSetter:function(){var a=this.paths[0],f=this.paths[1],l=[],r=this.now,n=a.length,w;if(1===r)l=this.toD;else if(n===f.length&&1>r)for(;n--;)w=parseFloat(a[n]),l[n]=isNaN(w)?f[n]:r*parseFloat(f[n]-w)+w;else l=f;this.elem.attr("d",l,null,!0)},update:function(){var a=this.elem,f=this.prop,l=this.now,r= +this.options.step;if(this[f+"Setter"])this[f+"Setter"]();else a.attr?a.element&&a.attr(f,l,null,!0):a.style[f]=l+this.unit;r&&r.call(a,l,this)},run:function(p,f,l){var r=this,n=r.options,w=function(a){return w.stopped?!1:r.step(a)},u=H.requestAnimationFrame||function(a){setTimeout(a,13)},e=function(){for(var h=0;h=u+this.startTime?(this.now=this.end,this.pos=1,this.update(),l=e[this.prop]=!0,a.objectEach(e,function(a){!0!==a&&(l=!1)}),l&&w&&w.call(n),p=!1):(this.pos=r.easing((f-this.startTime)/u),this.now=this.start+(this.end- +this.start)*this.pos,this.update(),p=!0);return p},initPath:function(p,f,l){function r(a){var b,c;for(k=a.length;k--;)b="M"===a[k]||"L"===a[k],c=/[a-zA-Z]/.test(a[k+3]),b&&c&&a.splice(k+1,0,a[k+1],a[k+2],a[k+1],a[k+2])}function n(a,b){for(;a.lengtha&&-Infinityw?"AM":"PM",P:12>w?"am":"pm",S:k(n.getSeconds()),L:k(Math.round(f%1E3),3)},a.dateFormats);a.objectEach(r,function(a,b){for(;-1!==p.indexOf("%"+b);)p=p.replace("%"+b,"function"===typeof a?a(f):a)});return l?p.substr(0,1).toUpperCase()+p.substr(1):p};a.formatSingle=function(p,f){var l=/\.([0-9])/,r=a.defaultOptions.lang;/f$/.test(p)?(l=(l=p.match(l))?l[1]:-1,null!==f&&(f=a.numberFormat(f,l,r.decimalPoint,-1=l&&(f=[1/l])));for(r=0;r=p||!n&&w<=(f[r]+(f[r+1]||f[r]))/2);r++);return u=a.correctFloat(u*l,-Math.round(Math.log(.001)/Math.LN10))};a.stableSort=function(a,f){var l=a.length,p,n;for(n=0;nl&&(l=a[f]);return l};a.destroyObjectProperties=function(p,f){a.objectEach(p,function(a,r){a&&a!==f&&a.destroy&&a.destroy();delete p[r]})};a.discardElement=function(p){var f=a.garbageBin;f||(f=a.createElement("div"));p&&f.appendChild(p);f.innerHTML=""};a.correctFloat=function(a,f){return parseFloat(a.toPrecision(f||14))};a.setAnimation=function(p,f){f.renderer.globalAnimation=a.pick(p,f.options.chart.animation, +!0)};a.animObject=function(p){return a.isObject(p)?a.merge(p):{duration:p?500:0}};a.timeUnits={millisecond:1,second:1E3,minute:6E4,hour:36E5,day:864E5,week:6048E5,month:24192E5,year:314496E5};a.numberFormat=function(p,f,l,r){p=+p||0;f=+f;var n=a.defaultOptions.lang,w=(p.toString().split(".")[1]||"").split("e")[0].length,u,e,h=p.toString().split("e");-1===f?f=Math.min(w,20):a.isNumber(f)?f&&h[1]&&0>h[1]&&(u=f+ +h[1],0<=u?(h[0]=(+h[0]).toExponential(u).split("e")[0],f=u):(h[0]=h[0].split(".")[0]||0, +p=20>f?(h[0]*Math.pow(10,h[1])).toFixed(f):0,h[1]=0)):f=2;e=(Math.abs(h[1]?h[0]:p)+Math.pow(10,-Math.max(f,w)-1)).toFixed(f);w=String(a.pInt(e));u=3p?"-":"")+(u?w.substr(0,u)+r:"");p+=w.substr(u).replace(/(\d{3})(?=\d)/g,"$1"+r);f&&(p+=l+e.slice(-f));h[1]&&0!==+p&&(p+="e"+h[1]);return p};Math.easeInOutSine=function(a){return-.5*(Math.cos(Math.PI*a)-1)};a.getStyle=function(p,f,l){if("width"===f)return Math.min(p.offsetWidth, +p.scrollWidth)-a.getStyle(p,"padding-left")-a.getStyle(p,"padding-right");if("height"===f)return Math.min(p.offsetHeight,p.scrollHeight)-a.getStyle(p,"padding-top")-a.getStyle(p,"padding-bottom");H.getComputedStyle||a.error(27,!0);if(p=H.getComputedStyle(p,void 0))p=p.getPropertyValue(f),a.pick(l,"opacity"!==f)&&(p=a.pInt(p));return p};a.inArray=function(p,f){return(a.indexOfPolyfill||Array.prototype.indexOf).call(f,p)};a.grep=function(p,f){return(a.filterPolyfill||Array.prototype.filter).call(p, +f)};a.find=Array.prototype.find?function(a,f){return a.find(f)}:function(a,f){var l,r=a.length;for(l=0;l>16,(l&65280)>> +8,l&255,1]:4===f&&(n=[(l&3840)>>4|(l&3840)>>8,(l&240)>>4|l&240,(l&15)<<4|l&15,1])),!n)for(w=this.parsers.length;w--&&!n;)u=this.parsers[w],(f=u.regex.exec(l))&&(n=u.parse(f));this.rgba=n||[]},get:function(a){var f=this.input,n=this.rgba,l;this.stops?(l=p(f),l.stops=[].concat(l.stops),E(this.stops,function(n,e){l.stops[e]=[l.stops[e][0],n.get(a)]})):l=n&&D(n[0])?"rgb"===a||!a&&1===n[3]?"rgb("+n[0]+","+n[1]+","+n[2]+")":"a"===a?n[3]:"rgba("+n.join(",")+")":f;return l},brighten:function(a){var l,n=this.rgba; +if(this.stops)E(this.stops,function(n){n.brighten(a)});else if(D(a)&&0!==a)for(l=0;3>l;l++)n[l]+=f(255*a),0>n[l]&&(n[l]=0),255y.width)y={width:0,height:0}}else y=this.htmlGetBBox();b.isSVG&& +(a=y.width,b=y.height,q&&"11px"===q.fontSize&&17===Math.round(b)&&(y.height=b=14),g&&(y.width=Math.abs(b*Math.sin(v))+Math.abs(a*Math.cos(v)),y.height=Math.abs(b*Math.cos(v))+Math.abs(a*Math.sin(v))));if(A&&0]*>/g,"")))},textSetter:function(a){a!==this.textStr&&(delete this.bBox,this.textStr=a,this.added&&this.renderer.buildText(this))},fillSetter:function(a,g,b){"string"===typeof a?b.setAttribute(g,a):a&&this.colorGradient(a,g,b)},visibilitySetter:function(a,g,b){"inherit"===a?b.removeAttribute(g):this[g]!==a&&b.setAttribute(g,a);this[g]=a},zIndexSetter:function(a,b){var v=this.renderer,y=this.parentGroup,c=(y||v).element||v.box,k,d=this.element,q,e,v=c===v.box;k=this.added;var z;u(a)&& +(d.zIndex=a,a=+a,this[b]===a&&(k=!1),this[b]=a);if(k){(a=this.zIndex)&&y&&(y.handleZ=!0);b=c.childNodes;for(z=b.length-1;0<=z&&!q;z--)if(y=b[z],k=y.zIndex,e=!u(k),y!==d)if(0>a&&e&&!v&&!z)c.insertBefore(d,b[z]),q=!0;else if(g(k)<=a||e&&(!u(a)||0<=a))c.insertBefore(d,b[z+1]||null),q=!0;q||(c.insertBefore(d,b[v?3:0]||null),q=!0)}return q},_defaultSetter:function(a,g,b){b.setAttribute(g,a)}});E.prototype.yGetter=E.prototype.xGetter;E.prototype.translateXSetter=E.prototype.translateYSetter=E.prototype.rotationSetter= +E.prototype.verticalAlignSetter=E.prototype.rotationOriginXSetter=E.prototype.rotationOriginYSetter=E.prototype.scaleXSetter=E.prototype.scaleYSetter=E.prototype.matrixSetter=function(a,g){this[g]=a;this.doTransform=!0};E.prototype["stroke-widthSetter"]=E.prototype.strokeSetter=function(a,g,b){this[g]=a;this.stroke&&this["stroke-width"]?(E.prototype.fillSetter.call(this,this.stroke,"stroke",b),b.setAttribute("stroke-width",this["stroke-width"]),this.hasStroke=!0):"stroke-width"===g&&0===a&&this.hasStroke&& +(b.removeAttribute("stroke"),this.hasStroke=!1)};D=a.SVGRenderer=function(){this.init.apply(this,arguments)};c(D.prototype,{Element:E,SVG_NS:P,init:function(a,g,b,v,c,k){var y;v=this.createElement("svg").attr({version:"1.1","class":"highcharts-root"}).css(this.getStyle(v));y=v.element;a.appendChild(y);f(a,"dir","ltr");-1===a.innerHTML.indexOf("xmlns")&&f(y,"xmlns",this.SVG_NS);this.isSVG=!0;this.box=y;this.boxWrapper=v;this.alignedObjects=[];this.url=(x||N)&&m.getElementsByTagName("base").length? +R.location.href.replace(/#.*?$/,"").replace(/<[^>]*>/g,"").replace(/([\('\)])/g,"\\$1").replace(/ /g,"%20"):"";this.createElement("desc").add().element.appendChild(m.createTextNode("Created with Highcharts 6.0.4"));this.defs=this.createElement("defs").add();this.allowHTML=k;this.forExport=c;this.gradients={};this.cache={};this.cacheKeys=[];this.imgCount=0;this.setSize(g,b,!1);var d;x&&a.getBoundingClientRect&&(g=function(){n(a,{left:0,top:0});d=a.getBoundingClientRect();n(a,{left:Math.ceil(d.left)- +d.left+"px",top:Math.ceil(d.top)-d.top+"px"})},g(),this.unSubPixelFix=H(R,"resize",g))},getStyle:function(a){return this.style=c({fontFamily:'"Lucida Grande", "Lucida Sans Unicode", Arial, Helvetica, sans-serif',fontSize:"12px"},a)},setStyle:function(a){this.boxWrapper.css(this.getStyle(a))},isHidden:function(){return!this.boxWrapper.getBBox().width},destroy:function(){var a=this.defs;this.box=null;this.boxWrapper=this.boxWrapper.destroy();h(this.gradients||{});this.gradients=null;a&&(this.defs=a.destroy()); +this.unSubPixelFix&&this.unSubPixelFix();return this.alignedObjects=null},createElement:function(a){var g=new this.Element;g.init(this,a);return g},draw:A,getRadialAttr:function(a,g){return{cx:a[0]-a[2]/2+g.cx*a[2],cy:a[1]-a[2]/2+g.cy*a[2],r:g.r*a[2]}},getSpanWidth:function(a,g){var b=a.getBBox(!0).width;!L&&this.forExport&&(b=this.measureSpanWidth(g.firstChild.data,a.styles));return b},applyEllipsis:function(a,g,b,v){var c=a.rotation,y=b,k,d=0,q=b.length,e=function(a){g.removeChild(g.firstChild); +a&&g.appendChild(m.createTextNode(a))},z;a.rotation=0;y=this.getSpanWidth(a,g);if(z=y>v){for(;d<=q;)k=Math.ceil((d+q)/2),y=b.substring(0,k)+"\u2026",e(y),y=this.getSpanWidth(a,g),d===q?d=q+1:y>v?q=k-1:d=k;0===q&&e("")}a.rotation=c;return z},escapes:{"\x26":"\x26amp;","\x3c":"\x26lt;","\x3e":"\x26gt;","'":"\x26#39;",'"':"\x26quot;"},buildText:function(a){var b=a.element,v=this,c=v.forExport,y=G(a.textStr,"").toString(),q=-1!==y.indexOf("\x3c"),e=b.childNodes,z,h,A,J,t=f(b,"x"),x=a.styles,B=a.textWidth, +l=x&&x.lineHeight,C=x&&x.textOutline,u=x&&"ellipsis"===x.textOverflow,Q=x&&"nowrap"===x.whiteSpace,w=x&&x.fontSize,R,I,r=e.length,x=B&&!a.added&&this.box,p=function(a){var c;c=/(px|em)$/.test(a&&a.style.fontSize)?a.style.fontSize:w||v.style.fontSize||12;return l?g(l):v.fontMetrics(c,a.getAttribute("style")?a:b).h},K=function(a){F(v.escapes,function(g,b){a=a.replace(new RegExp(g,"g"),b)});return a};R=[y,u,Q,l,C,w,B].join();if(R!==a.textCache){for(a.textCache=R;r--;)b.removeChild(e[r]);q||C||u||B|| +-1!==y.indexOf(" ")?(z=/<.*class="([^"]+)".*>/,h=/<.*style="([^"]+)".*>/,A=/<.*href="([^"]+)".*>/,x&&x.appendChild(b),y=q?y.replace(/<(b|strong)>/g,'\x3cspan style\x3d"font-weight:bold"\x3e').replace(/<(i|em)>/g,'\x3cspan style\x3d"font-style:italic"\x3e').replace(//g,"\x3c/span\x3e").split(//g):[y],y=k(y,function(a){return""!==a}),d(y,function(g,y){var k,q=0;g=g.replace(/^\s+|\s+$/g,"").replace(//g,"\x3c/span\x3e|||"); +k=g.split("|||");d(k,function(g){if(""!==g||1===k.length){var d={},e=m.createElementNS(v.SVG_NS,"tspan"),x,F;z.test(g)&&(x=g.match(z)[1],f(e,"class",x));h.test(g)&&(F=g.match(h)[1].replace(/(;| |^)color([ :])/,"$1fill$2"),f(e,"style",F));A.test(g)&&!c&&(f(e,"onclick",'location.href\x3d"'+g.match(A)[1]+'"'),f(e,"class","highcharts-anchor"),n(e,{cursor:"pointer"}));g=K(g.replace(/<[a-zA-Z\/](.|\n)*?>/g,"")||" ");if(" "!==g){e.appendChild(m.createTextNode(g));q?d.dx=0:y&&null!==t&&(d.x=t);f(e,d);b.appendChild(e); +!q&&I&&(!L&&c&&n(e,{display:"block"}),f(e,"dy",p(e)));if(B){d=g.replace(/([^\^])-/g,"$1- ").split(" ");x=1B,void 0===J&&(J=g),g&&1!==d.length?(e.removeChild(e.firstChild),O.unshift(d.pop())):(d=O,O=[],d.length&&!Q&&(e=m.createElementNS(P,"tspan"),f(e,{dy:C,x:t}),F&&f(e,"style",F),b.appendChild(e)),l>B&&(B=l)),d.length&&e.appendChild(m.createTextNode(d.join(" ").replace(/- /g, +"-")));a.rotation=G}q++}}});I=I||b.childNodes.length}),J&&a.attr("title",a.textStr),x&&x.removeChild(b),C&&a.applyTextOutline&&a.applyTextOutline(C)):b.appendChild(m.createTextNode(K(y)))}},getContrast:function(a){a=r(a).rgba;return 510Math.abs(c.end-c.start-2*Math.PI));var y=Math.cos(k),z=Math.sin(k),h=Math.cos(e),e=Math.sin(e);c=.001>c.end-k-Math.PI?0:1;d=["M",a+d*y,g+q*z,"A",d,q,0,c,1,a+d*h,g+q*e];u(b)&&d.push(v?"M":"L",a+b* +h,g+b*e,"A",b,b,0,c,0,a+b*y,g+b*z);d.push(v?"":"Z");return d},callout:function(a,g,b,v,c){var d=Math.min(c&&c.r||0,b,v),k=d+6,q=c&&c.anchorX;c=c&&c.anchorY;var e;e=["M",a+d,g,"L",a+b-d,g,"C",a+b,g,a+b,g,a+b,g+d,"L",a+b,g+v-d,"C",a+b,g+v,a+b,g+v,a+b-d,g+v,"L",a+d,g+v,"C",a,g+v,a,g+v,a,g+v-d,"L",a,g+d,"C",a,g,a,g,a+d,g];q&&q>b?c>g+k&&cq?c>g+k&&cv&&q>a+k&&qc&&q>a+k&&qa?a+3:Math.round(1.2*a);return{h:b,b:Math.round(.8* +b),f:a}},rotCorr:function(a,g,b){var v=a;g&&b&&(v=Math.max(v*Math.cos(g*e),4));return{x:-a/3*Math.sin(g*e),y:v}},label:function(g,b,k,e,z,h,m,A,L){var y=this,J=y.g("button"!==L&&"label"),t=J.text=y.text("",0,0,m).attr({zIndex:1}),x,F,n=0,B=3,l=0,C,f,Q,G,w,R={},I,P,r=/^url\((.*?)\)$/.test(e),p=r,K,O,N,T;L&&J.addClass("highcharts-"+L);p=r;K=function(){return(I||0)%2/2};O=function(){var a=t.element.style,g={};F=(void 0===C||void 0===f||w)&&u(t.textStr)&&t.getBBox();J.width=(C||F.width||0)+2*B+l;J.height= +(f||F.height||0)+2*B;P=B+y.fontMetrics(a&&a.fontSize,t).b;p&&(x||(J.box=x=y.symbols[e]||r?y.symbol(e):y.rect(),x.addClass(("button"===L?"":"highcharts-label-box")+(L?" highcharts-"+L+"-box":"")),x.add(J),a=K(),g.x=a,g.y=(A?-P:0)+a),g.width=Math.round(J.width),g.height=Math.round(J.height),x.attr(c(g,R)),R={})};N=function(){var a=l+B,g;g=A?0:P;u(C)&&F&&("center"===w||"right"===w)&&(a+={center:.5,right:1}[w]*(C-F.width));if(a!==t.x||g!==t.y)t.attr("x",a),void 0!==g&&t.attr("y",g);t.x=a;t.y=g};T=function(a, +g){x?x.attr(a,g):R[a]=g};J.onAdd=function(){t.add(J);J.attr({text:g||0===g?g:"",x:b,y:k});x&&u(z)&&J.attr({anchorX:z,anchorY:h})};J.widthSetter=function(g){C=a.isNumber(g)?g:null};J.heightSetter=function(a){f=a};J["text-alignSetter"]=function(a){w=a};J.paddingSetter=function(a){u(a)&&a!==B&&(B=J.padding=a,N())};J.paddingLeftSetter=function(a){u(a)&&a!==l&&(l=a,N())};J.alignSetter=function(a){a={left:0,center:.5,right:1}[a];a!==n&&(n=a,F&&J.attr({x:Q}))};J.textSetter=function(a){void 0!==a&&t.textSetter(a); +O();N()};J["stroke-widthSetter"]=function(a,g){a&&(p=!0);I=this["stroke-width"]=a;T(g,a)};J.strokeSetter=J.fillSetter=J.rSetter=function(a,g){"r"!==g&&("fill"===g&&a&&(p=!0),J[g]=a);T(g,a)};J.anchorXSetter=function(a,g){z=J.anchorX=a;T(g,Math.round(a)-K()-Q)};J.anchorYSetter=function(a,g){h=J.anchorY=a;T(g,a-G)};J.xSetter=function(a){J.x=a;n&&(a-=n*((C||F.width)+2*B));Q=Math.round(a);J.attr("translateX",Q)};J.ySetter=function(a){G=J.y=Math.round(a);J.attr("translateY",G)};var U=J.css;return c(J,{css:function(a){if(a){var g= +{};a=q(a);d(J.textProps,function(b){void 0!==a[b]&&(g[b]=a[b],delete a[b])});t.css(g)}return U.call(J,a)},getBBox:function(){return{width:F.width+2*B,height:F.height+2*B,x:F.x-B,y:F.y-B}},shadow:function(a){a&&(O(),x&&x.shadow(a));return J},destroy:function(){v(J.element,"mouseenter");v(J.element,"mouseleave");t&&(t=t.destroy());x&&(x=x.destroy());E.prototype.destroy.call(J);J=y=O=N=T=null}})}});a.Renderer=D})(M);(function(a){var E=a.attr,D=a.createElement,H=a.css,p=a.defined,f=a.each,l=a.extend, +r=a.isFirefox,n=a.isMS,w=a.isWebKit,u=a.pick,e=a.pInt,h=a.SVGRenderer,m=a.win,d=a.wrap;l(a.SVGElement.prototype,{htmlCss:function(a){var b=this.element;if(b=a&&"SPAN"===b.tagName&&a.width)delete a.width,this.textWidth=b,this.updateTransform();a&&"ellipsis"===a.textOverflow&&(a.whiteSpace="nowrap",a.overflow="hidden");this.styles=l(this.styles,a);H(this.element,a);return this},htmlGetBBox:function(){var a=this.element;return{x:a.offsetLeft,y:a.offsetTop,width:a.offsetWidth,height:a.offsetHeight}}, +htmlUpdateTransform:function(){if(this.added){var a=this.renderer,b=this.element,d=this.translateX||0,z=this.translateY||0,h=this.x||0,m=this.y||0,x=this.textAlign||"left",n={left:0,center:.5,right:1}[x],t=this.styles;H(b,{marginLeft:d,marginTop:z});this.shadows&&f(this.shadows,function(a){H(a,{marginLeft:d+1,marginTop:z+1})});this.inverted&&f(b.childNodes,function(c){a.invertChild(c,b)});if("SPAN"===b.tagName){var l=this.rotation,u=e(this.textWidth),q=t&&t.whiteSpace,A=[l,x,b.innerHTML,this.textWidth, +this.textAlign].join();A!==this.cTT&&(t=a.fontMetrics(b.style.fontSize).b,p(l)&&this.setSpanRotation(l,n,t),H(b,{width:"",whiteSpace:q||"nowrap"}),b.offsetWidth>u&&/[ \-]/.test(b.textContent||b.innerText)&&H(b,{width:u+"px",display:"block",whiteSpace:q||"normal"}),this.getSpanCorrection(b.offsetWidth,t,n,l,x));H(b,{left:h+(this.xCorr||0)+"px",top:m+(this.yCorr||0)+"px"});w&&(t=b.offsetHeight);this.cTT=A}}else this.alignOnAdd=!0},setSpanRotation:function(a,b,d){var c={},k=this.renderer.getTransformKey(); +c[k]=c.transform="rotate("+a+"deg)";c[k+(r?"Origin":"-origin")]=c.transformOrigin=100*b+"% "+d+"px";H(this.element,c)},getSpanCorrection:function(a,b,d){this.xCorr=-a*d;this.yCorr=-b}});l(h.prototype,{getTransformKey:function(){return n&&!/Edge/.test(m.navigator.userAgent)?"-ms-transform":w?"-webkit-transform":r?"MozTransform":m.opera?"-o-transform":""},html:function(a,b,k){var c=this.createElement("span"),e=c.element,h=c.renderer,m=h.isSVG,w=function(a,b){f(["opacity","visibility"],function(c){d(a, +c+"Setter",function(a,c,d,k){a.call(this,c,d,k);b[d]=c})})};c.textSetter=function(a){a!==e.innerHTML&&delete this.bBox;this.textStr=a;e.innerHTML=u(a,"");c.htmlUpdateTransform()};m&&w(c,c.element.style);c.xSetter=c.ySetter=c.alignSetter=c.rotationSetter=function(a,b){"align"===b&&(b="textAlign");c[b]=a;c.htmlUpdateTransform()};c.attr({text:a,x:Math.round(b),y:Math.round(k)}).css({fontFamily:this.style.fontFamily,fontSize:this.style.fontSize,position:"absolute"});e.style.whiteSpace="nowrap";c.css= +c.htmlCss;m&&(c.add=function(a){var b,d=h.box.parentNode,k=[];if(this.parentGroup=a){if(b=a.div,!b){for(;a;)k.push(a),a=a.parentGroup;f(k.reverse(),function(a){function e(g,b){a[b]=g;n?q[h.getTransformKey()]="translate("+(a.x||a.translateX)+"px,"+(a.y||a.translateY)+"px)":"translateX"===b?q.left=g+"px":q.top=g+"px";a.doTransform=!0}var q,g=E(a.element,"class");g&&(g={className:g});b=a.div=a.div||D("div",g,{position:"absolute",left:(a.translateX||0)+"px",top:(a.translateY||0)+"px",display:a.display, +opacity:a.opacity,pointerEvents:a.styles&&a.styles.pointerEvents},b||d);q=b.style;l(a,{classSetter:function(a){return function(g){this.element.setAttribute("class",g);a.className=g}}(b),on:function(){k[0].div&&c.on.apply({element:k[0].div},arguments);return a},translateXSetter:e,translateYSetter:e});w(a,q)})}}else b=d;b.appendChild(e);c.added=!0;c.alignOnAdd&&c.htmlUpdateTransform();return c});return c}})})(M);(function(a){function E(){var n=a.defaultOptions.global,l=r.moment;if(n.timezone){if(l)return function(a){return-l.tz(a, +n.timezone).utcOffset()};a.error(25)}return n.useUTC&&n.getTimezoneOffset}function D(){var n=a.defaultOptions.global,f,u=n.useUTC,e=u?"getUTC":"get",h=u?"setUTC":"set",m="Minutes Hours Day Date Month FullYear".split(" "),d=m.concat(["Milliseconds","Seconds"]);a.Date=f=n.Date||r.Date;f.hcTimezoneOffset=u&&n.timezoneOffset;f.hcGetTimezoneOffset=E();f.hcHasTimeZone=!(!f.hcTimezoneOffset&&!f.hcGetTimezoneOffset);f.hcMakeTime=function(a,b,d,e,h,m){var c;u?(c=f.UTC.apply(0,arguments),c+=p(c)):c=(new f(a, +b,l(d,1),l(e,0),l(h,0),l(m,0))).getTime();return c};for(n=0;nb&&e-k*zm&&(p=Math.round((h-e)/Math.cos(b*r)));else if(h=e+(1-k)*z,e-k*zm&&(I=m-a.x+I*k,x=-1),I=Math.min(B,I),II||f.autoRotation&&(c.styles||{}).width)p=I;p&&(t.width=p,(n.style||{}).textOverflow||(t.textOverflow="ellipsis"),c.css(t))},getPosition:function(a,f,l,e){var h=this.axis,m=h.chart,d=e&&m.oldChartHeight||m.chartHeight;return{x:a?h.translate(f+l,null,null,e)+h.transB:h.left+h.offset+(h.opposite?(e&&m.oldChartWidth||m.chartWidth)-h.right-h.left:0),y:a?d-h.bottom+h.offset-(h.opposite?h.height:0):d-h.translate(f+l,null,null,e)-h.transB}},getLabelPosition:function(a, +f,l,e,h,m,d,c){var b=this.axis,k=b.transA,z=b.reversed,B=b.staggerLines,n=b.tickRotCorr||{x:0,y:0},x=h.y,u=e||b.reserveSpaceDefault?0:-b.labelOffset*("center"===b.labelAlign?.5:1);D(x)||(x=0===b.side?l.rotation?-8:-l.getBBox().height:2===b.side?n.y+8:Math.cos(l.rotation*r)*(n.y-l.getBBox(!1,0).height/2));a=a+h.x+u+n.x-(m&&e?m*k*(z?-1:1):0);f=f+x-(m&&!e?m*k*(z?1:-1):0);B&&(l=d/(c||1)%B,b.opposite&&(l=B-l-1),f+=b.labelOffset/B*l);return{x:a,y:Math.round(f)}},getMarkPath:function(a,f,l,e,h,m){return m.crispLine(["M", +a,f,"L",a+(h?0:-l),f+(h?l:0)],e)},renderGridLine:function(a,f,l){var e=this.axis,h=e.options,m=this.gridLine,d={},c=this.pos,b=this.type,k=e.tickmarkOffset,z=e.chart.renderer,B=b?b+"Grid":"grid",n=h[B+"LineWidth"],x=h[B+"LineColor"],h=h[B+"LineDashStyle"];m||(d.stroke=x,d["stroke-width"]=n,h&&(d.dashstyle=h),b||(d.zIndex=1),a&&(d.opacity=0),this.gridLine=m=z.path().attr(d).addClass("highcharts-"+(b?b+"-":"")+"grid-line").add(e.gridGroup));if(!a&&m&&(a=e.getPlotLinePath(c+k,m.strokeWidth()*l,a,!0)))m[this.isNew? +"attr":"animate"]({d:a,opacity:f})},renderMark:function(a,f,u){var e=this.axis,h=e.options,m=e.chart.renderer,d=this.type,c=d?d+"Tick":"tick",b=e.tickSize(c),k=this.mark,z=!k,B=a.x;a=a.y;var n=l(h[c+"Width"],!d&&e.isXAxis?1:0),h=h[c+"Color"];b&&(e.opposite&&(b[0]=-b[0]),z&&(this.mark=k=m.path().addClass("highcharts-"+(d?d+"-":"")+"tick").add(e.axisGroup),k.attr({stroke:h,"stroke-width":n})),k[z?"attr":"animate"]({d:this.getMarkPath(B,a,b[0],k.strokeWidth()*u,e.horiz,m),opacity:f}))},renderLabel:function(a, +f,u,e){var h=this.axis,m=h.horiz,d=h.options,c=this.label,b=d.labels,k=b.step,h=h.tickmarkOffset,z=!0,B=a.x;a=a.y;c&&p(B)&&(c.xy=a=this.getLabelPosition(B,a,c,m,b,h,e,k),this.isFirst&&!this.isLast&&!l(d.showFirstLabel,1)||this.isLast&&!this.isFirst&&!l(d.showLastLabel,1)?z=!1:!m||b.step||b.rotation||f||0===u||this.handleOverflow(a),k&&e%k&&(z=!1),z&&p(a.y)?(a.opacity=u,c[this.isNewLabel?"attr":"animate"](a),this.isNewLabel=!1):(c.attr("y",-9999),this.isNewLabel=!0))},render:function(a,f,u){var e= +this.axis,h=e.horiz,m=this.getPosition(h,this.pos,e.tickmarkOffset,f),d=m.x,c=m.y,e=h&&d===e.pos+e.len||!h&&c===e.pos?-1:1;u=l(u,1);this.isActive=!0;this.renderGridLine(f,u,e);this.renderMark(m,u,e);this.renderLabel(m,f,u,a);this.isNew=!1},destroy:function(){H(this,this.axis)}}})(M);var V=function(a){var E=a.addEvent,D=a.animObject,H=a.arrayMax,p=a.arrayMin,f=a.color,l=a.correctFloat,r=a.defaultOptions,n=a.defined,w=a.deg2rad,u=a.destroyObjectProperties,e=a.each,h=a.extend,m=a.fireEvent,d=a.format, +c=a.getMagnitude,b=a.grep,k=a.inArray,z=a.isArray,B=a.isNumber,I=a.isString,x=a.merge,K=a.normalizeTickInterval,t=a.objectEach,C=a.pick,N=a.removeEvent,q=a.splat,A=a.syncTimeout,F=a.Tick,G=function(){this.init.apply(this,arguments)};a.extend(G.prototype,{defaultOptions:{dateTimeLabelFormats:{millisecond:"%H:%M:%S.%L",second:"%H:%M:%S",minute:"%H:%M",hour:"%H:%M",day:"%e. %b",week:"%e. %b",month:"%b '%y",year:"%Y"},endOnTick:!1,labels:{enabled:!0,style:{color:"#666666",cursor:"default",fontSize:"11px"}, +x:0},maxPadding:.01,minorTickLength:2,minorTickPosition:"outside",minPadding:.01,startOfWeek:1,startOnTick:!1,tickLength:10,tickmarkPlacement:"between",tickPixelInterval:100,tickPosition:"outside",title:{align:"middle",style:{color:"#666666"}},type:"linear",minorGridLineColor:"#f2f2f2",minorGridLineWidth:1,minorTickColor:"#999999",lineColor:"#ccd6eb",lineWidth:1,gridLineColor:"#e6e6e6",tickColor:"#ccd6eb"},defaultYAxisOptions:{endOnTick:!0,tickPixelInterval:72,showLastLabel:!0,labels:{x:-8},maxPadding:.05, +minPadding:.05,startOnTick:!0,title:{rotation:270,text:"Values"},stackLabels:{allowOverlap:!1,enabled:!1,formatter:function(){return a.numberFormat(this.total,-1)},style:{fontSize:"11px",fontWeight:"bold",color:"#000000",textOutline:"1px contrast"}},gridLineWidth:1,lineWidth:0},defaultLeftAxisOptions:{labels:{x:-15},title:{rotation:270}},defaultRightAxisOptions:{labels:{x:15},title:{rotation:90}},defaultBottomAxisOptions:{labels:{autoRotation:[-45],x:0},title:{rotation:0}},defaultTopAxisOptions:{labels:{autoRotation:[-45], +x:0},title:{rotation:0}},init:function(a,b){var g=b.isX,v=this;v.chart=a;v.horiz=a.inverted&&!v.isZAxis?!g:g;v.isXAxis=g;v.coll=v.coll||(g?"xAxis":"yAxis");v.opposite=b.opposite;v.side=b.side||(v.horiz?v.opposite?0:2:v.opposite?1:3);v.setOptions(b);var c=this.options,d=c.type;v.labelFormatter=c.labels.formatter||v.defaultLabelFormatter;v.userOptions=b;v.minPixelPadding=0;v.reversed=c.reversed;v.visible=!1!==c.visible;v.zoomEnabled=!1!==c.zoomEnabled;v.hasNames="category"===d||!0===c.categories;v.categories= +c.categories||v.hasNames;v.names=v.names||[];v.plotLinesAndBandsGroups={};v.isLog="logarithmic"===d;v.isDatetimeAxis="datetime"===d;v.positiveValuesOnly=v.isLog&&!v.allowNegativeLog;v.isLinked=n(c.linkedTo);v.ticks={};v.labelEdge=[];v.minorTicks={};v.plotLinesAndBands=[];v.alternateBands={};v.len=0;v.minRange=v.userMinRange=c.minRange||c.maxZoom;v.range=c.range;v.offset=c.offset||0;v.stacks={};v.oldStacks={};v.stacksTouched=0;v.max=null;v.min=null;v.crosshair=C(c.crosshair,q(a.options.tooltip.crosshairs)[g? +0:1],!1);b=v.options.events;-1===k(v,a.axes)&&(g?a.axes.splice(a.xAxis.length,0,v):a.axes.push(v),a[v.coll].push(v));v.series=v.series||[];a.inverted&&!v.isZAxis&&g&&void 0===v.reversed&&(v.reversed=!0);t(b,function(a,g){E(v,g,a)});v.lin2log=c.linearToLogConverter||v.lin2log;v.isLog&&(v.val2lin=v.log2lin,v.lin2val=v.lin2log)},setOptions:function(a){this.options=x(this.defaultOptions,"yAxis"===this.coll&&this.defaultYAxisOptions,[this.defaultTopAxisOptions,this.defaultRightAxisOptions,this.defaultBottomAxisOptions, +this.defaultLeftAxisOptions][this.side],x(r[this.coll],a))},defaultLabelFormatter:function(){var g=this.axis,b=this.value,c=g.categories,k=this.dateTimeLabelFormat,e=r.lang,q=e.numericSymbols,e=e.numericSymbolMagnitude||1E3,h=q&&q.length,m,z=g.options.labels.format,g=g.isLog?Math.abs(b):g.tickInterval;if(z)m=d(z,this);else if(c)m=b;else if(k)m=a.dateFormat(k,b);else if(h&&1E3<=g)for(;h--&&void 0===m;)c=Math.pow(e,h+1),g>=c&&0===10*b%c&&null!==q[h]&&0!==b&&(m=a.numberFormat(b/c,-1)+q[h]);void 0=== +m&&(m=1E4<=Math.abs(b)?a.numberFormat(b,-1):a.numberFormat(b,-1,void 0,""));return m},getSeriesExtremes:function(){var a=this,v=a.chart;a.hasVisibleSeries=!1;a.dataMin=a.dataMax=a.threshold=null;a.softThreshold=!a.isXAxis;a.buildStacks&&a.buildStacks();e(a.series,function(g){if(g.visible||!v.options.chart.ignoreHiddenSeries){var c=g.options,d=c.threshold,k;a.hasVisibleSeries=!0;a.positiveValuesOnly&&0>=d&&(d=null);if(a.isXAxis)c=g.xData,c.length&&(g=p(c),k=H(c),B(g)||g instanceof Date||(c=b(c,B), +g=p(c)),a.dataMin=Math.min(C(a.dataMin,c[0],g),g),a.dataMax=Math.max(C(a.dataMax,c[0],k),k));else if(g.getExtremes(),k=g.dataMax,g=g.dataMin,n(g)&&n(k)&&(a.dataMin=Math.min(C(a.dataMin,g),g),a.dataMax=Math.max(C(a.dataMax,k),k)),n(d)&&(a.threshold=d),!c.softThreshold||a.positiveValuesOnly)a.softThreshold=!1}})},translate:function(a,b,c,d,k,e){var g=this.linkedParent||this,v=1,q=0,h=d?g.oldTransA:g.transA;d=d?g.oldMin:g.min;var m=g.minPixelPadding;k=(g.isOrdinal||g.isBroken||g.isLog&&k)&&g.lin2val; +h||(h=g.transA);c&&(v*=-1,q=g.len);g.reversed&&(v*=-1,q-=v*(g.sector||g.len));b?(a=(a*v+q-m)/h+d,k&&(a=g.lin2val(a))):(k&&(a=g.val2lin(a)),a=B(d)?v*(a-d)*h+q+v*m+(B(e)?h*e:0):void 0);return a},toPixels:function(a,b){return this.translate(a,!1,!this.horiz,null,!0)+(b?0:this.pos)},toValue:function(a,b){return this.translate(a-(b?0:this.pos),!0,!this.horiz,null,!0)},getPlotLinePath:function(a,b,c,d,k){var g=this.chart,v=this.left,q=this.top,e,h,m=c&&g.oldChartHeight||g.chartHeight,z=c&&g.oldChartWidth|| +g.chartWidth,A;e=this.transB;var t=function(a,g,b){if(ab)d?a=Math.min(Math.max(g,a),b):A=!0;return a};k=C(k,this.translate(a,null,null,c));a=c=Math.round(k+e);e=h=Math.round(m-k-e);B(k)?this.horiz?(e=q,h=m-this.bottom,a=c=t(a,v,v+this.width)):(a=v,c=z-this.right,e=h=t(e,q,q+this.height)):(A=!0,d=!1);return A&&!d?null:g.renderer.crispLine(["M",a,e,"L",c,h],b||1)},getLinearTickPositions:function(a,b,c){var g,v=l(Math.floor(b/a)*a);c=l(Math.ceil(c/a)*a);var d=[],k;l(v+a)===v&&(k=20);if(this.single)return[b]; +for(b=v;b<=c;){d.push(b);b=l(b+a,k);if(b===g)break;g=b}return d},getMinorTickInterval:function(){var a=this.options;return!0===a.minorTicks?C(a.minorTickInterval,"auto"):!1===a.minorTicks?null:a.minorTickInterval},getMinorTickPositions:function(){var a=this,b=a.options,c=a.tickPositions,d=a.minorTickInterval,k=[],q=a.pointRangePadding||0,h=a.min-q,q=a.max+q,m=q-h;if(m&&m/d=this.minRange,t=this.minRange,d=(t-c+b)/2,d=[b-d,C(a.min,b-d)],k&&(d[2]=this.isLog?this.log2lin(this.dataMin):this.dataMin),b=H(d),c=[b+t,C(a.max,b+t)],k&&(c[2]=this.isLog?this.log2lin(this.dataMax):this.dataMax),c=p(c),c-b=p?(r=p,f=0):b.dataMax<=p&&(w=p,x=0)),b.min= +C(N,r,b.dataMin),b.max=C(D,w,b.dataMax));q&&(b.positiveValuesOnly&&!g&&0>=Math.min(b.min,C(b.dataMin,b.min))&&a.error(10,1),b.min=l(h(b.min),15),b.max=l(h(b.max),15));b.range&&n(b.max)&&(b.userMin=b.min=N=Math.max(b.dataMin,b.minFromRange()),b.userMax=D=b.max,b.range=null);m(b,"foundExtremes");b.beforePadding&&b.beforePadding();b.adjustForMinRange();!(G||b.axisPointRange||b.usePercentage||t)&&n(b.min)&&n(b.max)&&(h=b.max-b.min)&&(!n(N)&&f&&(b.min-=h*f),!n(D)&&x&&(b.max+=h*x));B(k.softMin)&&!B(b.userMin)&& +(b.min=Math.min(b.min,k.softMin));B(k.softMax)&&!B(b.userMax)&&(b.max=Math.max(b.max,k.softMax));B(k.floor)&&(b.min=Math.max(b.min,k.floor));B(k.ceiling)&&(b.max=Math.min(b.max,k.ceiling));I&&n(b.dataMin)&&(p=p||0,!n(N)&&b.min=p?b.min=p:!n(D)&&b.max>p&&b.dataMax<=p&&(b.max=p));b.tickInterval=b.min===b.max||void 0===b.min||void 0===b.max?1:t&&!F&&u===b.linkedParent.options.tickPixelInterval?F=b.linkedParent.tickInterval:C(F,this.tickAmount?(b.max-b.min)/Math.max(this.tickAmount-1,1): +void 0,G?1:(b.max-b.min)*u/Math.max(b.len,u));A&&!g&&e(b.series,function(a){a.processData(b.min!==b.oldMin||b.max!==b.oldMax)});b.setAxisTranslation(!0);b.beforeSetTickPositions&&b.beforeSetTickPositions();b.postProcessTickInterval&&(b.tickInterval=b.postProcessTickInterval(b.tickInterval));b.pointRange&&!F&&(b.tickInterval=Math.max(b.pointRange,b.tickInterval));g=C(k.minTickInterval,b.isDatetimeAxis&&b.closestPointRange);!F&&b.tickIntervalb.tickInterval&&1E3b.max)),!!this.tickAmount));this.tickAmount||(b.tickInterval=b.unsquish());this.setTickPositions()},setTickPositions:function(){var a=this.options,b,c=a.tickPositions;b=this.getMinorTickInterval();var d=a.tickPositioner,k=a.startOnTick,q=a.endOnTick;this.tickmarkOffset=this.categories&&"between"===a.tickmarkPlacement&&1===this.tickInterval?.5:0;this.minorTickInterval="auto"===b&&this.tickInterval?this.tickInterval/ +5:b;this.single=this.min===this.max&&n(this.min)&&!this.tickAmount&&(parseInt(this.min,10)===this.min||!1!==a.allowDecimals);this.tickPositions=b=c&&c.slice();!b&&(b=this.isDatetimeAxis?this.getTimeTicks(this.normalizeTimeTickInterval(this.tickInterval,a.units),this.min,this.max,a.startOfWeek,this.ordinalPositions,this.closestPointRange,!0):this.isLog?this.getLogTickPositions(this.tickInterval,this.min,this.max):this.getLinearTickPositions(this.tickInterval,this.min,this.max),b.length>this.len&&(b= +[b[0],b.pop()],b[0]===b[1]&&(b.length=1)),this.tickPositions=b,d&&(d=d.apply(this,[this.min,this.max])))&&(this.tickPositions=b=d);this.paddedTicks=b.slice(0);this.trimTicks(b,k,q);this.isLinked||(this.single&&2>b.length&&(this.min-=.5,this.max+=.5),c||d||this.adjustTickAmount())},trimTicks:function(a,b,c){var g=a[0],d=a[a.length-1],k=this.minPointOffset||0;if(!this.isLinked){if(b&&-Infinity!==g)this.min=g;else for(;this.min-k>a[0];)a.shift();if(c)this.max=d;else for(;this.max+kb&&(this.finalTickAmt=b,b=5);this.tickAmount=b},adjustTickAmount:function(){var a=this.tickInterval,b=this.tickPositions,c=this.tickAmount,d=this.finalTickAmt,k=b&&b.length,q=C(this.threshold,this.softThreshold?0:null);if(this.hasData()){if(kc&&(this.tickInterval*= +2,this.setTickPositions());if(n(d)){for(a=c=b.length;a--;)(3===d&&1===a%2||2>=d&&0d&&(a=d)),n(c)&&(bd&&(b=d))),this.displayBtn=void 0!==a||void 0!==b,this.setExtremes(a,b,!1,void 0,{trigger:"zoom"});return!0},setAxisSize:function(){var b=this.chart,c=this.options,d=c.offsets||[0,0,0,0],k=this.horiz,q=this.width=Math.round(a.relativeLength(C(c.width,b.plotWidth-d[3]+d[1]),b.plotWidth)),e=this.height=Math.round(a.relativeLength(C(c.height, +b.plotHeight-d[0]+d[2]),b.plotHeight)),h=this.top=Math.round(a.relativeLength(C(c.top,b.plotTop+d[0]),b.plotHeight,b.plotTop)),c=this.left=Math.round(a.relativeLength(C(c.left,b.plotLeft+d[3]),b.plotWidth,b.plotLeft));this.bottom=b.chartHeight-e-h;this.right=b.chartWidth-q-c;this.len=Math.max(k?q:e,0);this.pos=k?c:h},getExtremes:function(){var a=this.isLog,b=this.lin2log;return{min:a?l(b(this.min)):this.min,max:a?l(b(this.max)):this.max,dataMin:this.dataMin,dataMax:this.dataMax,userMin:this.userMin, +userMax:this.userMax}},getThreshold:function(a){var b=this.isLog,g=this.lin2log,c=b?g(this.min):this.min,b=b?g(this.max):this.max;null===a?a=c:c>a?a=c:ba?"right":195a?"left":"center"},tickSize:function(a){var b=this.options,g=b[a+"Length"],c=C(b[a+"Width"],"tick"===a&&this.isXAxis?1:0);if(c&&g)return"inside"===b[a+"Position"]&&(g=-g),[g,c]},labelMetrics:function(){var a= +this.tickPositions&&this.tickPositions[0]||0;return this.chart.renderer.fontMetrics(this.options.labels.style&&this.options.labels.style.fontSize,this.ticks[a]&&this.ticks[a].label)},unsquish:function(){var a=this.options.labels,b=this.horiz,c=this.tickInterval,d=c,k=this.len/(((this.categories?1:0)+this.max-this.min)/c),q,h=a.rotation,m=this.labelMetrics(),z,A=Number.MAX_VALUE,t,x=function(a){a/=k||1;a=1=a)z=x(Math.abs(m.h/Math.sin(w*a))),b=z+Math.abs(a/360),b(c.step||0)&&!c.rotation&&(this.staggerLines||1)*this.len/d||!b&&(c.style&&parseInt(c.style.width,10)||k&&k-a.spacing[3]|| +.33*a.chartWidth)},renderUnsquish:function(){var a=this.chart,b=a.renderer,c=this.tickPositions,d=this.ticks,k=this.options.labels,q=this.horiz,h=this.getSlotWidth(),m=Math.max(1,Math.round(h-2*(k.padding||5))),z={},A=this.labelMetrics(),t=k.style&&k.style.textOverflow,f,F=0,l,B;I(k.rotation)||(z.rotation=k.rotation||0);e(c,function(a){(a=d[a])&&a.labelLength>F&&(F=a.labelLength)});this.maxLabelLength=F;if(this.autoRotation)F>m&&F>A.h?z.rotation=this.labelRotation:this.labelRotation=0;else if(h&& +(f={width:m+"px"},!t))for(f.textOverflow="clip",l=c.length;!q&&l--;)if(B=c[l],m=d[B].label)m.styles&&"ellipsis"===m.styles.textOverflow?m.css({textOverflow:"clip"}):d[B].labelLength>h&&m.css({width:h+"px"}),m.getBBox().height>this.len/c.length-(A.h-A.f)&&(m.specCss={textOverflow:"ellipsis"});z.rotation&&(f={width:(F>.5*a.chartHeight?.33*a.chartHeight:a.chartHeight)+"px"},t||(f.textOverflow="ellipsis"));if(this.labelAlign=k.align||this.autoLabelAlign(this.labelRotation))z.align=this.labelAlign;e(c, +function(a){var b=(a=d[a])&&a.label;b&&(b.attr(z),f&&b.css(x(f,b.specCss)),delete b.specCss,a.rotation=z.rotation)});this.tickRotCorr=b.rotCorr(A.b,this.labelRotation||0,0!==this.side)},hasData:function(){return this.hasVisibleSeries||n(this.min)&&n(this.max)&&this.tickPositions&&0=this.min&&a<=this.max)g[a]||(g[a]=new F(this,a)),d&&g[a].isNew&&g[a].render(b,!0,.1),g[a].render(b)},render:function(){var b= +this,c=b.chart,d=b.options,k=b.isLog,q=b.lin2log,h=b.isLinked,m=b.tickPositions,z=b.axisTitle,x=b.ticks,f=b.minorTicks,l=b.alternateBands,C=d.stackLabels,n=d.alternateGridColor,u=b.tickmarkOffset,G=b.axisLine,p=b.showAxis,I=D(c.renderer.globalAnimation),r,w;b.labelEdge.length=0;b.overlap=!1;e([x,f,l],function(a){t(a,function(a){a.isActive=!1})});if(b.hasData()||h)b.minorTickInterval&&!b.categories&&e(b.getMinorTickPositions(),function(a){b.renderMinorTick(a)}),m.length&&(e(m,function(a,c){b.renderTick(a, +c)}),u&&(0===b.min||b.single)&&(x[-1]||(x[-1]=new F(b,-1,null,!0)),x[-1].render(-1))),n&&e(m,function(d,g){w=void 0!==m[g+1]?m[g+1]+u:b.max-u;0===g%2&&d=h.second?0:C*Math.floor(x.getMilliseconds()/C));if(t>=h.second)x[D.hcSetSeconds](t>=h.minute? +0:C*Math.floor(x.getSeconds()/C));if(t>=h.minute)x[D.hcSetMinutes](t>=h.hour?0:C*Math.floor(x[D.hcGetMinutes]()/C));if(t>=h.hour)x[D.hcSetHours](t>=h.day?0:C*Math.floor(x[D.hcGetHours]()/C));if(t>=h.day)x[D.hcSetDate](t>=h.month?1:C*Math.floor(x[D.hcGetDate]()/C));t>=h.month&&(x[D.hcSetMonth](t>=h.year?0:C*Math.floor(x[D.hcGetMonth]()/C)),n=x[D.hcGetFullYear]());if(t>=h.year)x[D.hcSetFullYear](n-n%C);if(t===h.week)x[D.hcSetDate](x[D.hcGetDate]()-x[D.hcGetDay]()+e(b,1));n=x[D.hcGetFullYear]();b=x[D.hcGetMonth](); +var A=x[D.hcGetDate](),F=x[D.hcGetHours]();d=x.getTime();D.hcHasTimeZone&&(q=(!B||!!D.hcGetTimezoneOffset)&&(c-d>4*h.month||w(d)!==w(c)),N=w(x),x=new D(d+N));B=x.getTime();for(d=1;Bk.length&&l(k,function(a){0===a%18E5&&"000000000"===H("%H%M%S%L",a)&&(m[a]="day")})}k.info=r(a,{higherRanks:m,totalRange:t*C});return k}; +E.prototype.normalizeTimeTickInterval=function(a,d){var c=d||[["millisecond",[1,2,5,10,20,25,50,100,200,500]],["second",[1,2,5,10,15,30]],["minute",[1,2,5,10,15,30]],["hour",[1,2,3,4,6,8,12]],["day",[1,2]],["week",[1,2]],["month",[1,2,3,4,6]],["year",null]];d=c[c.length-1];var b=h[d[0]],k=d[1],e;for(e=0;er&&(!w||z<=n)&&void 0!==z&&d.push(z),z>n&& +(B=!0),z=k;else r=h(r),n=h(n),a=w?this.getMinorTickInterval():l.tickInterval,a=f("auto"===a?null:a,this._minorAutoInterval,l.tickPixelInterval/(w?5:1)*(n-r)/((w?e/this.tickPositions.length:e)||1)),a=p(a,null,D(a)),d=H(this.getLinearTickPositions(a,r,n),m),w||(this._minorAutoInterval=a/5);w||(this.tickInterval=a);return d};E.prototype.log2lin=function(a){return Math.log(a)/Math.LN10};E.prototype.lin2log=function(a){return Math.pow(10,a)}})(M);(function(a,E){var D=a.arrayMax,H=a.arrayMin,p=a.defined, +f=a.destroyObjectProperties,l=a.each,r=a.erase,n=a.merge,w=a.pick;a.PlotLineOrBand=function(a,e){this.axis=a;e&&(this.options=e,this.id=e.id)};a.PlotLineOrBand.prototype={render:function(){var f=this,e=f.axis,h=e.horiz,m=f.options,d=m.label,c=f.label,b=m.to,k=m.from,z=m.value,l=p(k)&&p(b),r=p(z),x=f.svgElem,K=!x,t=[],C=m.color,N=w(m.zIndex,0),q=m.events,t={"class":"highcharts-plot-"+(l?"band ":"line ")+(m.className||"")},A={},F=e.chart.renderer,G=l?"bands":"lines",g=e.log2lin;e.isLog&&(k=g(k),b=g(b), +z=g(z));r?(t={stroke:C,"stroke-width":m.width},m.dashStyle&&(t.dashstyle=m.dashStyle)):l&&(C&&(t.fill=C),m.borderWidth&&(t.stroke=m.borderColor,t["stroke-width"]=m.borderWidth));A.zIndex=N;G+="-"+N;(C=e.plotLinesAndBandsGroups[G])||(e.plotLinesAndBandsGroups[G]=C=F.g("plot-"+G).attr(A).add());K&&(f.svgElem=x=F.path().attr(t).add(C));if(r)t=e.getPlotLinePath(z,x.strokeWidth());else if(l)t=e.getPlotBandPath(k,b,m);else return;K&&t&&t.length?(x.attr({d:t}),q&&a.objectEach(q,function(a,b){x.on(b,function(a){q[b].apply(f, +[a])})})):x&&(t?(x.show(),x.animate({d:t})):(x.hide(),c&&(f.label=c=c.destroy())));d&&p(d.text)&&t&&t.length&&0this.max&& +e>this.max;if(m&&h)for(a&&(k=m.toString()===h.toString(),b=0),a=0;aA-h?A:A-h);else if(z)k[a]=Math.max(e,g+h+d>c?g:g+h);else return!1},C=function(a,c,d,g){var e;gc-b?e=!1:k[a]=gc-d/2?c-d-2:g-d/2;return e},p=function(a){var b=f;f=x;x=b;m=a},q=function(){!1!==t.apply(0,f)?!1!==C.apply(0,x)||m||(p(!0),q()):m?k.x=k.y=0:(p(!0),q())};(c.inverted||1q&&(h=!1);a=(e.series&& +e.series.yAxis&&e.series.yAxis.pos)+(e.plotY||0);a-=b.plotTop;c.push({target:e.isHeader?b.plotHeight+l:a,rank:e.isHeader?1:0,size:z.tt.getBBox().height+1,point:e,x:q,tt:t})}});this.cleanSplit();a.distribute(c,b.plotHeight+l);D(c,function(a){var c=a.point,d=c.series;a.tt.attr({visibility:void 0===a.pos?"hidden":"inherit",x:h||c.isHeader?a.x:c.plotX+b.plotLeft+n(f.distance,16),y:a.pos+b.plotTop,anchorX:c.isHeader?c.plotX+b.plotLeft:c.plotX+d.xAxis.pos,anchorY:c.isHeader?a.pos+b.plotTop-15:c.plotY+d.yAxis.pos})})}, +updatePosition:function(a){var e=this.chart,d=this.getLabel(),d=(this.options.positioner||this.getPosition).call(this,d.width,d.height,a);this.move(Math.round(d.x),Math.round(d.y||0),a.plotX+e.plotLeft,a.plotY+e.plotTop)},getDateFormat:function(a,m,d,c){var b=E("%m-%d %H:%M:%S.%L",m),k,h,f={millisecond:15,second:12,minute:9,hour:6,day:3},l="millisecond";for(h in e){if(a===e.week&&+E("%w",m)===d&&"00:00:00.000"===b.substr(6)){h="week";break}if(e[h]>a){h=l;break}if(f[h]&&b.substr(f[h])!=="01-01 00:00:00.000".substr(f[h]))break; +"week"!==h&&(l=h)}h&&(k=c[h]);return k},getXDateFormat:function(a,e,d){e=e.dateTimeLabelFormats;var c=d&&d.closestPointRange;return(c?this.getDateFormat(c,a.x,d.options.startOfWeek,e):e.day)||e.year},tooltipFooterHeaderFormatter:function(a,e){e=e?"footer":"header";var d=a.series,c=d.tooltipOptions,b=c.xDateFormat,k=d.xAxis,h=k&&"datetime"===k.options.type&&f(a.key),m=c[e+"Format"];h&&!b&&(b=this.getXDateFormat(a,c,k));h&&b&&D(a.point&&a.point.tooltipDateKeys||["key"],function(a){m=m.replace("{point."+ +a+"}","{point."+a+":"+b+"}")});return p(m,{point:a,series:d})},bodyFormatter:function(a){return l(a,function(a){var d=a.series.tooltipOptions;return(d[(a.point.formatPrefix||"point")+"Formatter"]||a.point.tooltipFormatter).call(a.point,d[(a.point.formatPrefix||"point")+"Format"])})}}})(M);(function(a){var E=a.addEvent,D=a.attr,H=a.charts,p=a.color,f=a.css,l=a.defined,r=a.each,n=a.extend,w=a.find,u=a.fireEvent,e=a.isObject,h=a.offset,m=a.pick,d=a.splat,c=a.Tooltip;a.Pointer=function(a,c){this.init(a, +c)};a.Pointer.prototype={init:function(a,d){this.options=d;this.chart=a;this.runChartClick=d.chart.events&&!!d.chart.events.click;this.pinchDown=[];this.lastValidTouch={};c&&(a.tooltip=new c(a,d.tooltip),this.followTouchMove=m(d.tooltip.followTouchMove,!0));this.setDOMEvents()},zoomOption:function(a){var b=this.chart,c=b.options.chart,d=c.zoomType||"",b=b.inverted;/touch/.test(a.type)&&(d=m(c.pinchType,d));this.zoomX=a=/x/.test(d);this.zoomY=d=/y/.test(d);this.zoomHor=a&&!b||d&&b;this.zoomVert=d&& +!b||a&&b;this.hasZoom=a||d},normalize:function(a,c){var b;b=a.touches?a.touches.length?a.touches.item(0):a.changedTouches[0]:a;c||(this.chartPosition=c=h(this.chart.container));return n(a,{chartX:Math.round(b.pageX-c.left),chartY:Math.round(b.pageY-c.top)})},getCoordinates:function(a){var b={xAxis:[],yAxis:[]};r(this.chart.axes,function(c){b[c.isXAxis?"xAxis":"yAxis"].push({axis:c,value:c.toValue(a[c.horiz?"chartX":"chartY"])})});return b},findNearestKDPoint:function(a,c,d){var b;r(a,function(a){var k= +!(a.noSharedTooltip&&c)&&0>a.options.findNearestPointBy.indexOf("y");a=a.searchPoint(d,k);if((k=e(a,!0))&&!(k=!e(b,!0)))var k=b.distX-a.distX,h=b.dist-a.dist,m=(a.series.group&&a.series.group.zIndex)-(b.series.group&&b.series.group.zIndex),k=0<(0!==k&&c?k:0!==h?h:0!==m?m:b.series.index>a.series.index?-1:1);k&&(b=a)});return b},getPointFromEvent:function(a){a=a.target;for(var b;a&&!b;)b=a.point,a=a.parentNode;return b},getChartCoordinatesFromPoint:function(a,c){var b=a.series,d=b.xAxis,b=b.yAxis,k= +m(a.clientX,a.plotX);if(d&&b)return c?{chartX:d.len+d.pos-k,chartY:b.len+b.pos-a.plotY}:{chartX:k+d.pos,chartY:a.plotY+b.pos}},getHoverData:function(b,c,d,h,f,l,n){var k,z=[],x=n&&n.isBoosting;h=!(!h||!b);n=c&&!c.stickyTracking?[c]:a.grep(d,function(a){return a.visible&&!(!f&&a.directTouch)&&m(a.options.enableMouseTracking,!0)&&a.stickyTracking});c=(k=h?b:this.findNearestKDPoint(n,f,l))&&k.series;k&&(f&&!c.noSharedTooltip?(n=a.grep(d,function(a){return a.visible&&!(!f&&a.directTouch)&&m(a.options.enableMouseTracking, +!0)&&!a.noSharedTooltip}),r(n,function(a){var b=w(a.points,function(a){return a.x===k.x&&!a.isNull});e(b)&&(x&&(b=a.getPoint(b)),z.push(b))})):z.push(k));return{hoverPoint:k,hoverSeries:c,hoverPoints:z}},runPointActions:function(b,c){var d=this.chart,k=d.tooltip&&d.tooltip.options.enabled?d.tooltip:void 0,e=k?k.shared:!1,h=c||d.hoverPoint,f=h&&h.series||d.hoverSeries,f=this.getHoverData(h,f,d.series,!!c||f&&f.directTouch&&this.isDirectTouch,e,b,{isBoosting:d.isBoosting}),l,h=f.hoverPoint;l=f.hoverPoints; +c=(f=f.hoverSeries)&&f.tooltipOptions.followPointer;e=e&&f&&!f.noSharedTooltip;if(h&&(h!==d.hoverPoint||k&&k.isHidden)){r(d.hoverPoints||[],function(b){-1===a.inArray(b,l)&&b.setState()});r(l||[],function(a){a.setState("hover")});if(d.hoverSeries!==f)f.onMouseOver();d.hoverPoint&&d.hoverPoint.firePointEvent("mouseOut");if(!h.series)return;h.firePointEvent("mouseOver");d.hoverPoints=l;d.hoverPoint=h;k&&k.refresh(e?l:h,b)}else c&&k&&!k.isHidden&&(h=k.getAnchor([{}],b),k.updatePosition({plotX:h[0],plotY:h[1]})); +this.unDocMouseMove||(this.unDocMouseMove=E(d.container.ownerDocument,"mousemove",function(b){var c=H[a.hoverChartIndex];if(c)c.pointer.onDocumentMouseMove(b)}));r(d.axes,function(c){var d=m(c.crosshair.snap,!0),k=d?a.find(l,function(a){return a.series[c.coll]===c}):void 0;k||!d?c.drawCrosshair(b,k):c.hideCrosshair()})},reset:function(a,c){var b=this.chart,k=b.hoverSeries,e=b.hoverPoint,h=b.hoverPoints,m=b.tooltip,f=m&&m.shared?h:e;a&&f&&r(d(f),function(b){b.series.isCartesian&&void 0===b.plotX&& +(a=!1)});if(a)m&&f&&(m.refresh(f),e&&(e.setState(e.state,!0),r(b.axes,function(a){a.crosshair&&a.drawCrosshair(null,e)})));else{if(e)e.onMouseOut();h&&r(h,function(a){a.setState()});if(k)k.onMouseOut();m&&m.hide(c);this.unDocMouseMove&&(this.unDocMouseMove=this.unDocMouseMove());r(b.axes,function(a){a.hideCrosshair()});this.hoverX=b.hoverPoints=b.hoverPoint=null}},scaleGroups:function(a,c){var b=this.chart,d;r(b.series,function(k){d=a||k.getPlotBox();k.xAxis&&k.xAxis.zoomEnabled&&k.group&&(k.group.attr(d), +k.markerGroup&&(k.markerGroup.attr(d),k.markerGroup.clip(c?b.clipRect:null)),k.dataLabelsGroup&&k.dataLabelsGroup.attr(d))});b.clipRect.attr(c||b.clipBox)},dragStart:function(a){var b=this.chart;b.mouseIsDown=a.type;b.cancelClick=!1;b.mouseDownX=this.mouseDownX=a.chartX;b.mouseDownY=this.mouseDownY=a.chartY},drag:function(a){var b=this.chart,c=b.options.chart,d=a.chartX,e=a.chartY,h=this.zoomHor,m=this.zoomVert,f=b.plotLeft,l=b.plotTop,n=b.plotWidth,q=b.plotHeight,A,F=this.selectionMarker,G=this.mouseDownX, +g=this.mouseDownY,v=c.panKey&&a[c.panKey+"Key"];F&&F.touch||(df+n&&(d=f+n),el+q&&(e=l+q),this.hasDragged=Math.sqrt(Math.pow(G-d,2)+Math.pow(g-e,2)),10u.max&&(f=u.max-x,v=!0);v?(F-=.8*(F-m[b][0]),q||(g-=.8*(g-m[b][1])),l()):m[b]=[F,g];C||(h[b]=w-r,h[n]=x);h=C?1/t:t;e[n]=x;e[b]=f;p[C?a?"scaleY":"scaleX":"scale"+k]=t;p["translate"+k]=h*r+(F-h*A)},pinch:function(a){var n=this,r=n.chart,u=n.pinchDown,e=a.touches,h=e.length,m=n.lastValidTouch, +d=n.hasZoom,c=n.selectionMarker,b={},k=1===h&&(n.inClass(a.target,"highcharts-tracker")&&r.runTrackerClick||n.runChartClick),z={};1c-6&&h(q||c.spacingBox.width-2*t-d.x)&&(this.itemX=t,this.itemY+=F+this.lastLineHeight+A,this.lastLineHeight=0);this.maxItemWidth=Math.max(this.maxItemWidth,m);this.lastItemY=F+this.itemY+A;this.lastLineHeight=Math.max(b,this.lastLineHeight);a._legendItemPos=[this.itemX,this.itemY];e?this.itemX+=m:(this.itemY+=F+b+A,this.lastLineHeight=b);this.offsetWidth=q||Math.max((e?this.itemX-t-(a.checkbox?0:p):m)+t,this.offsetWidth)}, +getAllItems:function(){var a=[];f(this.chart.series,function(c){var b=c&&c.options;c&&w(b.showInLegend,p(b.linkedTo)?!1:void 0,!0)&&(a=a.concat(c.legendItems||("point"===b.legendType?c.data:c)))});return a},getAlignment:function(){var a=this.options;return a.floating?"":a.align.charAt(0)+a.verticalAlign.charAt(0)+a.layout.charAt(0)},adjustMargins:function(a,c){var b=this.chart,d=this.options,e=this.getAlignment();e&&f([/(lth|ct|rth)/,/(rtv|rm|rbv)/,/(rbh|cb|lbh)/,/(lbv|lm|ltv)/],function(k,h){k.test(e)&& +!p(a[h])&&(b[r[h]]=Math.max(b[r[h]],b.legend[(h+1)%2?"legendHeight":"legendWidth"]+[1,-1,-1,1][h]*d[h%2?"x":"y"]+w(d.margin,12)+c[h]+(0===h?b.titleOffset+b.options.title.margin:0)))})},render:function(){var a=this,c=a.chart,b=c.renderer,k=a.group,h,m,l,x,p=a.box,t=a.options,C=a.padding;a.itemX=C;a.itemY=a.initialItemY;a.offsetWidth=0;a.lastItemY=0;k||(a.group=k=b.g("legend").attr({zIndex:7}).add(),a.contentGroup=b.g().attr({zIndex:1}).add(k),a.scrollGroup=b.g().add(a.contentGroup));a.renderTitle(); +h=a.getAllItems();e(h,function(a,b){return(a.options&&a.options.legendIndex||0)-(b.options&&b.options.legendIndex||0)});t.reversed&&h.reverse();a.allItems=h;a.display=m=!!h.length;a.lastLineHeight=0;f(h,function(b){a.renderItem(b)});l=(t.width||a.offsetWidth)+C;x=a.lastItemY+a.lastLineHeight+a.titleHeight;x=a.handleOverflow(x);x+=C;p||(a.box=p=b.rect().addClass("highcharts-legend-box").attr({r:t.borderRadius}).add(k),p.isNew=!0);p.attr({stroke:t.borderColor,"stroke-width":t.borderWidth||0,fill:t.backgroundColor|| +"none"}).shadow(t.shadow);0b&&!1!==t.enabled?(this.clipHeight=l=Math.max(b-20-this.titleHeight-m,0),this.currentPage=w(this.currentPage,1),this.fullHeight=a,f(G,function(a,b){var c=a._legendItemPos[1],d=Math.round(a.legendItem.getBBox().height),g=A.length;if(!g||c-A[g-1]>l&&(F||c)!==A[g-1])A.push(F||c),g++;a.pageIx=g-1;F&&(G[b-1].pageIx=g-1);b===G.length-1&&c+d-A[g-1]>l&&(A.push(c),a.pageIx=g);c!==F&&(F=c)}),n||(n=c.clipRect=d.clipRect(0,m,9999,0),c.contentGroup.clip(n)),g(l),q||(this.nav=q=d.g().attr({zIndex:1}).add(this.group), +this.up=d.symbol("triangle",0,0,r,r).on("click",function(){c.scroll(-1,p)}).add(q),this.pager=d.text("",15,10).addClass("highcharts-legend-navigation").css(t.style).add(q),this.down=d.symbol("triangle-down",0,0,r,r).on("click",function(){c.scroll(1,p)}).add(q)),c.scroll(0),a=b):q&&(g(),this.nav=q.destroy(),this.scrollGroup.attr({translateY:1}),this.clipHeight=0);return a},scroll:function(a,c){var b=this.pages,d=b.length;a=this.currentPage+a;var e=this.clipHeight,h=this.options.navigation,f=this.pager, +m=this.padding;a>d&&(a=d);0b&&(f=typeof a[0],"string"===f?e.name=a[0]:"number"===f&&(e.x=a[0]),k++);l=d.value;)d=h[++f];d&&d.color&&!this.options.color&&(this.color=d.color);return d},destroy:function(){var a=this.series.chart,h=a.hoverPoints,f;a.pointCount--;h&&(this.setState(),p(h,this),h.length||(a.hoverPoints=null));if(this===a.hoverPoint)this.onMouseOut();if(this.graphic||this.dataLabel)u(this),this.destroyElements();this.legendItem&&a.legend.destroyItem(this);for(f in this)this[f]=null},destroyElements:function(){for(var a=["graphic","dataLabel", +"dataLabelUpper","connector","shadowGroup"],h,f=6;f--;)h=a[f],this[h]&&(this[h]=this[h].destroy())},getLabelConfig:function(){return{x:this.category,y:this.y,color:this.color,colorIndex:this.colorIndex,key:this.name||this.category,series:this.series,point:this,percentage:this.percentage,total:this.total||this.stackTotal}},tooltipFormatter:function(a){var e=this.series,f=e.tooltipOptions,d=w(f.valueDecimals,""),c=f.valuePrefix||"",b=f.valueSuffix||"";D(e.pointArrayMap||["y"],function(e){e="{point."+ +e;if(c||b)a=a.replace(e+"}",c+e+"}"+b);a=a.replace(e+"}",e+":,."+d+"f}")});return l(a,{point:this,series:this.series})},firePointEvent:function(a,h,m){var d=this,c=this.series.options;(c.point.events[a]||d.options&&d.options.events&&d.options.events[a])&&this.importEvents();"click"===a&&c.allowPointSelect&&(m=function(a){d.select&&d.select(null,a.ctrlKey||a.metaKey||a.shiftKey)});f(this,a,h,m)},visible:!0}})(M);(function(a){var E=a.addEvent,D=a.animObject,H=a.arrayMax,p=a.arrayMin,f=a.correctFloat, +l=a.Date,r=a.defaultOptions,n=a.defaultPlotOptions,w=a.defined,u=a.each,e=a.erase,h=a.extend,m=a.fireEvent,d=a.grep,c=a.isArray,b=a.isNumber,k=a.isString,z=a.merge,B=a.objectEach,I=a.pick,x=a.removeEvent,K=a.splat,t=a.SVGElement,C=a.syncTimeout,N=a.win;a.Series=a.seriesType("line",null,{lineWidth:2,allowPointSelect:!1,showCheckbox:!1,animation:{duration:1E3},events:{},marker:{lineWidth:0,lineColor:"#ffffff",radius:4,states:{hover:{animation:{duration:50},enabled:!0,radiusPlus:2,lineWidthPlus:1},select:{fillColor:"#cccccc", +lineColor:"#000000",lineWidth:2}}},point:{events:{}},dataLabels:{align:"center",formatter:function(){return null===this.y?"":a.numberFormat(this.y,-1)},style:{fontSize:"11px",fontWeight:"bold",color:"contrast",textOutline:"1px contrast"},verticalAlign:"bottom",x:0,y:0,padding:5},cropThreshold:300,pointRange:0,softThreshold:!0,states:{hover:{animation:{duration:50},lineWidthPlus:1,marker:{},halo:{size:10,opacity:.25}},select:{marker:{}}},stickyTracking:!0,turboThreshold:1E3,findNearestPointBy:"x"}, +{isCartesian:!0,pointClass:a.Point,sorted:!0,requireSorting:!0,directTouch:!1,axisTypes:["xAxis","yAxis"],colorCounter:0,parallelArrays:["x","y"],coll:"series",init:function(a,b){var c=this,d,g=a.series,e;c.chart=a;c.options=b=c.setOptions(b);c.linkedSeries=[];c.bindAxes();h(c,{name:b.name,state:"",visible:!1!==b.visible,selected:!0===b.selected});d=b.events;B(d,function(a,b){E(c,b,a)});if(d&&d.click||b.point&&b.point.events&&b.point.events.click||b.allowPointSelect)a.runTrackerClick=!0;c.getColor(); +c.getSymbol();u(c.parallelArrays,function(a){c[a+"Data"]=[]});c.setData(b.data,!1);c.isCartesian&&(a.hasCartesianSeries=!0);g.length&&(e=g[g.length-1]);c._i=I(e&&e._i,-1)+1;a.orderSeries(this.insert(g))},insert:function(a){var c=this.options.index,d;if(b(c)){for(d=a.length;d--;)if(c>=I(a[d].options.index,a[d]._i)){a.splice(d+1,0,this);break}-1===d&&a.unshift(this);d+=1}else a.push(this);return I(d,a.length-1)},bindAxes:function(){var b=this,c=b.options,d=b.chart,e;u(b.axisTypes||[],function(g){u(d[g], +function(a){e=a.options;if(c[g]===e.index||void 0!==c[g]&&c[g]===e.id||void 0===c[g]&&0===e.index)b.insert(a.series),b[g]=a,a.isDirty=!0});b[g]||b.optionalAxis===g||a.error(18,!0)})},updateParallelArrays:function(a,c){var d=a.series,e=arguments,g=b(c)?function(b){var g="y"===b&&d.toYData?d.toYData(a):a[b];d[b+"Data"][c]=g}:function(a){Array.prototype[c].apply(d[a+"Data"],Array.prototype.slice.call(e,2))};u(d.parallelArrays,g)},autoIncrement:function(){var b=this.options,c=this.xIncrement,d,e=b.pointIntervalUnit, +g=0,c=I(c,b.pointStart,0);this.pointInterval=d=I(this.pointInterval,b.pointInterval,1);e&&(b=new l(c),"day"===e?b=+b[l.hcSetDate](b[l.hcGetDate]()+d):"month"===e?b=+b[l.hcSetMonth](b[l.hcGetMonth]()+d):"year"===e&&(b=+b[l.hcSetFullYear](b[l.hcGetFullYear]()+d)),l.hcHasTimeZone&&(g=a.getTZOffset(b)-a.getTZOffset(c)),d=b-c+g);this.xIncrement=c+d;return c},setOptions:function(a){var b=this.chart,c=b.options,d=c.plotOptions,g=(b.userOptions||{}).plotOptions||{},e=d[this.type];this.userOptions=a;b=z(e, +d.series,a);this.tooltipOptions=z(r.tooltip,r.plotOptions.series&&r.plotOptions.series.tooltip,r.plotOptions[this.type].tooltip,c.tooltip.userOptions,d.series&&d.series.tooltip,d[this.type].tooltip,a.tooltip);this.stickyTracking=I(a.stickyTracking,g[this.type]&&g[this.type].stickyTracking,g.series&&g.series.stickyTracking,this.tooltipOptions.shared&&!this.noSharedTooltip?!0:b.stickyTracking);null===e.marker&&delete b.marker;this.zoneAxis=b.zoneAxis;a=this.zones=(b.zones||[]).slice();!b.negativeColor&& +!b.negativeFillColor||b.zones||a.push({value:b[this.zoneAxis+"Threshold"]||b.threshold||0,className:"highcharts-negative",color:b.negativeColor,fillColor:b.negativeFillColor});a.length&&w(a[a.length-1].value)&&a.push({color:this.color,fillColor:this.fillColor});return b},getCyclic:function(a,b,c){var d,g=this.chart,e=this.userOptions,k=a+"Index",h=a+"Counter",q=c?c.length:I(g.options.chart[a+"Count"],g[a+"Count"]);b||(d=I(e[k],e["_"+k]),w(d)||(g.series.length||(g[h]=0),e["_"+k]=d=g[h]%q,g[h]+=1), +c&&(b=c[d]));void 0!==d&&(this[k]=d);this[a]=b},getColor:function(){this.options.colorByPoint?this.options.color=null:this.getCyclic("color",this.options.color||n[this.type].color,this.chart.options.colors)},getSymbol:function(){this.getCyclic("symbol",this.options.marker.symbol,this.chart.options.symbols)},drawLegendSymbol:a.LegendSymbolMixin.drawLineMarker,setData:function(d,e,h,f){var g=this,q=g.points,m=q&&q.length||0,l,A=g.options,t=g.chart,x=null,n=g.xAxis,p=A.turboThreshold,z=this.xData,F= +this.yData,C=(l=g.pointArrayMap)&&l.length;d=d||[];l=d.length;e=I(e,!0);if(!1!==f&&l&&m===l&&!g.cropped&&!g.hasGroupedData&&g.visible)u(d,function(a,b){q[b].update&&a!==A.data[b]&&q[b].update(a,!1,null,!1)});else{g.xIncrement=null;g.colorCounter=0;u(this.parallelArrays,function(a){g[a+"Data"].length=0});if(p&&l>p){for(h=0;null===x&&hf||this.forceCrop))if(c[e-1]z)c=[],d=[];else if(c[0]z)g=this.cropData(this.xData,this.yData,p,z),c=g.xData,d=g.yData,g=g.start,k=!0;for(f=c.length|| +1;--f;)e=x?m(c[f])-m(c[f-1]):c[f]-c[f-1],0e&&n&&(a.error(15),n=!1);this.cropped=k;this.cropStart=g;this.processedXData=c;this.processedYData=d;this.closestPointRange=h},cropData:function(a,b,c,d){var g=a.length,e=0,k=g,h=I(this.cropShoulder,1),f;for(f=0;f=c){e=Math.max(0,f-h);break}for(c=f;cd){k=c+h;break}return{xData:a.slice(e,k),yData:b.slice(e,k),start:e,end:k}},generatePoints:function(){var a=this.options,b=a.data,c=this.data,d,g=this.processedXData, +e=this.processedYData,k=this.pointClass,h=g.length,f=this.cropStart||0,m,l=this.hasGroupedData,a=a.keys,t,x=[],n;c||l||(c=[],c.length=b.length,c=this.data=c);a&&l&&(this.options.keys=!1);for(n=0;n=f&&(e[n-1]||l)<=q,m&&l)if(m=t.length)for(;m--;)"number"===typeof t[m]&&(g[h++]=t[m]);else g[h++]=t;this.dataMin= +p(g);this.dataMax=H(g)},translate:function(){this.processedXData||this.processData();this.generatePoints();var a=this.options,c=a.stacking,d=this.xAxis,e=d.categories,g=this.yAxis,k=this.points,h=k.length,m=!!this.modifyValue,l=a.pointPlacement,t="between"===l||b(l),n=a.threshold,x=a.startFromThreshold?n:0,p,z,C,r,u=Number.MAX_VALUE;"between"===l&&(l=.5);b(l)&&(l*=I(a.pointRange||d.pointRange));for(a=0;a=K&&(B.isNull=!0);B.plotX=p=f(Math.min(Math.max(-1E5,d.translate(N,0,0,0,1,l,"flags"===this.type)),1E5));c&&this.visible&&!B.isNull&&D&&D[N]&&(r=this.getStackIndicator(r,N,this.index),E=D[N],K=E.points[r.key],z=K[0],K=K[1],z===x&&r.key===D[N].base&&(z=I(n,g.min)),g.positiveValuesOnly&&0>=z&&(z=null),B.total=B.stackTotal=E.total,B.percentage=E.total&&B.y/E.total*100,B.stackY=K,E.setOffset(this.pointXOffset||0,this.barW||0));B.yBottom=w(z)?g.translate(z,0,1,0,1): +null;m&&(K=this.modifyValue(K,B));B.plotY=z="number"===typeof K&&Infinity!==K?Math.min(Math.max(-1E5,g.translate(K,0,1,0,1)),1E5):void 0;B.isInside=void 0!==z&&0<=z&&z<=g.len&&0<=p&&p<=d.len;B.clientX=t?f(d.translate(N,0,0,0,1,l)):p;B.negative=B.y<(n||0);B.category=e&&void 0!==e[B.x]?e[B.x]:B.x;B.isNull||(void 0!==C&&(u=Math.min(u,Math.abs(p-C))),C=p);B.zone=this.zones.length&&B.getZone()}this.closestPointRangePx=u},getValidPoints:function(a,b){var c=this.chart;return d(a||this.points||[],function(a){return b&& +!c.isInsidePlot(a.plotX,a.plotY,c.inverted)?!1:!a.isNull})},setClip:function(a){var b=this.chart,c=this.options,d=b.renderer,g=b.inverted,e=this.clipBox,k=e||b.clipBox,h=this.sharedClipKey||["_sharedClip",a&&a.duration,a&&a.easing,k.height,c.xAxis,c.yAxis].join(),f=b[h],q=b[h+"m"];f||(a&&(k.width=0,g&&(k.x=b.plotSizeX),b[h+"m"]=q=d.clipRect(g?b.plotSizeX+99:-99,g?-b.plotLeft:-b.plotTop,99,g?b.chartWidth:b.chartHeight)),b[h]=f=d.clipRect(k),f.count={length:0});a&&!f.count[this.index]&&(f.count[this.index]= +!0,f.count.length+=1);!1!==c.clip&&(this.group.clip(a||e?f:b.clipRect),this.markerGroup.clip(q),this.sharedClipKey=h);a||(f.count[this.index]&&(delete f.count[this.index],--f.count.length),0===f.count.length&&h&&b[h]&&(e||(b[h]=b[h].destroy()),b[h+"m"]&&(b[h+"m"]=b[h+"m"].destroy())))},animate:function(a){var b=this.chart,c=D(this.options.animation),d;a?this.setClip(c):(d=this.sharedClipKey,(a=b[d])&&a.animate({width:b.plotSizeX,x:0},c),b[d+"m"]&&b[d+"m"].animate({width:b.plotSizeX+99,x:0},c),this.animate= +null)},afterAnimate:function(){this.setClip();m(this,"afterAnimate");this.finishedAnimating=!0},drawPoints:function(){var a=this.points,b=this.chart,c,d,g,e,k=this.options.marker,h,f,l,m=this[this.specialGroup]||this.markerGroup,t,n=I(k.enabled,this.xAxis.isRadial?!0:null,this.closestPointRangePx>=2*k.radius);if(!1!==k.enabled||this._hasPointMarkers)for(c=0;ce&&b.shadow));k&&(k.startX=c.xMap,k.isArea=c.isArea)})}, +applyZones:function(){var a=this,b=this.chart,c=b.renderer,d=this.zones,e,k,h=this.clips||[],f,m=this.graph,l=this.area,t=Math.max(b.chartWidth,b.chartHeight),n=this[(this.zoneAxis||"y")+"Axis"],x,p,z=b.inverted,C,r,w,B,K=!1;d.length&&(m||l)&&n&&void 0!==n.min&&(p=n.reversed,C=n.horiz,m&&m.hide(),l&&l.hide(),x=n.getExtremes(),u(d,function(d,g){e=p?C?b.plotWidth:0:C?0:n.toPixels(x.min);e=Math.min(Math.max(I(k,e),0),t);k=Math.min(Math.max(Math.round(n.toPixels(I(d.value,x.max),!0)),0),t);K&&(e=k=n.toPixels(x.max)); +r=Math.abs(e-k);w=Math.min(e,k);B=Math.max(e,k);n.isXAxis?(f={x:z?B:w,y:0,width:r,height:t},C||(f.x=b.plotHeight-f.x)):(f={x:0,y:z?B:w,width:t,height:r},C&&(f.y=b.plotWidth-f.y));z&&c.isVML&&(f=n.isXAxis?{x:0,y:p?w:B,height:f.width,width:b.chartWidth}:{x:f.y-b.plotLeft-b.spacingBox.x,y:0,width:f.height,height:b.chartHeight});h[g]?h[g].animate(f):(h[g]=c.clipRect(f),m&&a["zone-graph-"+g].clip(h[g]),l&&a["zone-area-"+g].clip(h[g]));K=d.value>x.max}),this.clips=h)},invertGroups:function(a){function b(){u(["group", +"markerGroup"],function(b){c[b]&&(d.renderer.isVML&&c[b].attr({width:c.yAxis.len,height:c.xAxis.len}),c[b].width=c.yAxis.len,c[b].height=c.xAxis.len,c[b].invert(a))})}var c=this,d=c.chart,e;c.xAxis&&(e=E(d,"resize",b),E(c,"destroy",e),b(a),c.invertGroups=b)},plotGroup:function(a,b,c,d,e){var g=this[a],k=!g;k&&(this[a]=g=this.chart.renderer.g().attr({zIndex:d||.1}).add(e));g.addClass("highcharts-"+b+" highcharts-series-"+this.index+" highcharts-"+this.type+"-series "+(w(this.colorIndex)?"highcharts-color-"+ +this.colorIndex+" ":"")+(this.options.className||"")+(g.hasClass("highcharts-tracker")?" highcharts-tracker":""),!0);g.attr({visibility:c})[k?"attr":"animate"](this.getPlotBox());return g},getPlotBox:function(){var a=this.chart,b=this.xAxis,c=this.yAxis;a.inverted&&(b=c,c=this.xAxis);return{translateX:b?b.left:a.plotLeft,translateY:c?c.top:a.plotTop,scaleX:1,scaleY:1}},render:function(){var a=this,b=a.chart,c,d=a.options,e=!!a.animate&&b.renderer.isSVG&&D(d.animation).duration,k=a.visible?"inherit": +"hidden",h=d.zIndex,f=a.hasRendered,m=b.seriesGroup,l=b.inverted;c=a.plotGroup("group","series",k,h,m);a.markerGroup=a.plotGroup("markerGroup","markers",k,h,m);e&&a.animate(!0);c.inverted=a.isCartesian?l:!1;a.drawGraph&&(a.drawGraph(),a.applyZones());a.drawDataLabels&&a.drawDataLabels();a.visible&&a.drawPoints();a.drawTracker&&!1!==a.options.enableMouseTracking&&a.drawTracker();a.invertGroups(l);!1===d.clip||a.sharedClipKey||f||c.clip(b.clipRect);e&&a.animate();f||(a.animationTimeout=C(function(){a.afterAnimate()}, +e));a.isDirty=!1;a.hasRendered=!0},redraw:function(){var a=this.chart,b=this.isDirty||this.isDirtyData,c=this.group,d=this.xAxis,e=this.yAxis;c&&(a.inverted&&c.attr({width:a.plotWidth,height:a.plotHeight}),c.animate({translateX:I(d&&d.left,a.plotLeft),translateY:I(e&&e.top,a.plotTop)}));this.translate();this.render();b&&delete this.kdTree},kdAxisArray:["clientX","plotY"],searchPoint:function(a,b){var c=this.xAxis,d=this.yAxis,e=this.chart.inverted;return this.searchKDTree({clientX:e?c.len-a.chartY+ +c.pos:a.chartX-c.pos,plotY:e?d.len-a.chartX+d.pos:a.chartY-d.pos},b)},buildKDTree:function(){function a(c,d,e){var g,k;if(k=c&&c.length)return g=b.kdAxisArray[d%e],c.sort(function(a,b){return a[g]-b[g]}),k=Math.floor(k/2),{point:c[k],left:a(c.slice(0,k),d+1,e),right:a(c.slice(k+1),d+1,e)}}this.buildingKdTree=!0;var b=this,c=-1l?"left":"right";t=0>l?"right":"left";b[q]&&(q=c(a,b[q],g+1,f),n=q[h]x;)q--;this.updateParallelArrays(m,"splice",q,0,0);this.updateParallelArrays(m,q);g&&m.name&&(g[x]=m.name);l.splice(q,0,a);n&&(this.data.splice(q,0,null),this.processData());"point"===e.legendType&&this.generatePoints();c&&(h[0]&&h[0].remove?h[0].remove(!1):(h.shift(),this.updateParallelArrays(m,"shift"),l.shift()));this.isDirtyData=this.isDirty=!0;b&&f.redraw(d)},removePoint:function(a,b,c){var d=this,e=d.data,h=e[a],f=d.points,g=d.chart,l=function(){f&&f.length===e.length&& +f.splice(a,1);e.splice(a,1);d.options.data.splice(a,1);d.updateParallelArrays(h||{series:d},"splice",a,1);h&&h.destroy();d.isDirty=!0;d.isDirtyData=!0;b&&g.redraw()};x(c,g);b=k(b,!0);h?h.firePointEvent("remove",null,l):l()},remove:function(a,b,c){function d(){e.destroy();h.isDirtyLegend=h.isDirtyBox=!0;h.linkSeries();k(a,!0)&&h.redraw(b)}var e=this,h=e.chart;!1!==c?u(e,"remove",null,d):d()},update:function(a,b){var d=this,e=d.chart,h=d.userOptions,f=d.oldType||d.type,l=a.type||h.type||e.options.chart.type, +g=I[f].prototype,m,n=["group","markerGroup","dataLabelsGroup"],t=["navigatorSeries","baseSeries"],x=d.finishedAnimating&&{animation:!1};if(Object.keys&&"data"===Object.keys(a).toString())return this.setData(a.data,b);t=n.concat(t);r(t,function(a){t[a]=d[a];delete d[a]});a=c(h,x,{index:d.index,pointStart:d.xData[0]},{data:d.options.data},a);d.remove(!1,null,!1);for(m in g)d[m]=void 0;w(d,I[l||f].prototype);r(t,function(a){d[a]=t[a]});d.init(e,a);a.zIndex!==h.zIndex&&r(n,function(b){d[b]&&d[b].attr({zIndex:a.zIndex})}); +d.oldType=f;e.linkSeries();k(b,!0)&&e.redraw(!1)}});w(H.prototype,{update:function(a,b){var d=this.chart;a=d.options[this.coll][this.options.index]=c(this.userOptions,a);this.destroy(!0);this.init(d,w(a,{events:void 0}));d.isDirtyBox=!0;k(b,!0)&&d.redraw()},remove:function(a){for(var b=this.chart,c=this.coll,e=this.series,h=e.length;h--;)e[h]&&e[h].remove(!1);n(b.axes,this);n(b[c],this);d(b.options[c])?b.options[c].splice(this.options.index,1):delete b.options[c];r(b[c],function(a,b){a.options.index= +b});this.destroy();b.isDirtyBox=!0;k(a,!0)&&b.redraw()},setTitle:function(a,b){this.update({title:a},b)},setCategories:function(a,b){this.update({categories:a},b)}})})(M);(function(a){var E=a.color,D=a.each,H=a.map,p=a.pick,f=a.Series,l=a.seriesType;l("area","line",{softThreshold:!1,threshold:0},{singleStacks:!1,getStackPoints:function(f){var l=[],r=[],u=this.xAxis,e=this.yAxis,h=e.stacks[this.stackKey],m={},d=this.index,c=e.series,b=c.length,k,z=p(e.options.reversedStacks,!0)?1:-1,B;f=f||this.points; +if(this.options.stacking){for(B=0;Ba&&w>l?(w=Math.max(a,l),e=2*l-w):wp&&e>l?(e=Math.max(p,l),w=2*l-e):e=Math.abs(h)&&.5a.closestPointRange*a.xAxis.transA,d=a.borderWidth=r(f.borderWidth,d?0:1),c=a.yAxis,b=f.threshold,k=a.translatedThreshold=c.getThreshold(b),l=r(f.minPointLength,5),p=a.getColumnMetrics(),u=p.width,x=a.barW=Math.max(u,1+2*d),w=a.pointXOffset=p.offset;h.inverted&&(k-=.5);f.pointPadding&&(x=Math.ceil(x));n.prototype.translate.apply(a);H(a.points,function(d){var e=r(d.yBottom,k),f=999+Math.abs(e),f=Math.min(Math.max(-f,d.plotY),c.len+f),m=d.plotX+w,n=x,t=Math.min(f,e),p,g=Math.max(f,e)-t;l&& +Math.abs(g)l?e-l:k-(p?l:0));d.barX=m;d.pointWidth=u;d.tooltipPos=h.inverted?[c.len+c.pos-h.plotLeft-f,a.xAxis.len-m-n/2,g]:[m+n/2,f+c.pos-h.plotTop,g];d.shapeType="rect";d.shapeArgs=a.crispCol.apply(a,d.isNull?[m,k,n,0]:[m,t,n,g])})},getSymbol:a.noop,drawLegendSymbol:a.LegendSymbolMixin.drawRectangle,drawGraph:function(){this.group[this.dense?"addClass":"removeClass"]("highcharts-dense-data")}, +pointAttribs:function(a,f){var e=this.options,d,c=this.pointAttrToOptions||{};d=c.stroke||"borderColor";var b=c["stroke-width"]||"borderWidth",k=a&&a.color||this.color,h=a&&a[d]||e[d]||this.color||k,n=a&&a[b]||e[b]||this[b]||0,c=e.dashStyle;a&&this.zones.length&&(k=a.getZone(),k=a.options.color||k&&k.color||this.color);f&&(a=l(e.states[f],a.options.states&&a.options.states[f]||{}),f=a.brightness,k=a.color||void 0!==f&&D(k).brighten(a.brightness).get()||k,h=a[d]||h,n=a[b]||n,c=a.dashStyle||c);d={fill:k, +stroke:h,"stroke-width":n};c&&(d.dashstyle=c);return d},drawPoints:function(){var a=this,h=this.chart,m=a.options,d=h.renderer,c=m.animationLimit||250,b;H(a.points,function(e){var k=e.graphic;if(f(e.plotY)&&null!==e.y){b=e.shapeArgs;if(k)k[h.pointCounte;++e)h=w[e],a=2>e||2===e&&/%$/.test(h),w[e]=p(h,[n,l,u,w[2]][e])+(a?r:0);w[3]>w[2]&&(w[3]=w[2]);return w},getStartAndEndRadians:function(a,l){a=D(a)?a:0;l=D(l)&&l>a&&360>l-a?l:a+360;return{start:E*(a+-90),end:E*(l+-90)}}}})(M);(function(a){var E=a.addEvent,D=a.CenteredSeriesMixin,H=a.defined,p=a.each,f=a.extend,l=D.getStartAndEndRadians,r=a.inArray,n=a.noop,w=a.pick,u=a.Point,e=a.Series,h=a.seriesType,m=a.setAnimation;h("pie","line",{center:[null,null],clip:!1,colorByPoint:!0,dataLabels:{distance:30, +enabled:!0,formatter:function(){return this.point.isNull?void 0:this.point.name},x:0},ignoreHiddenPoint:!0,legendType:"point",marker:null,size:null,showInLegend:!1,slicedOffset:10,stickyTracking:!1,tooltip:{followPointer:!0},borderColor:"#ffffff",borderWidth:1,states:{hover:{brightness:.1,shadow:!1}}},{isCartesian:!1,requireSorting:!1,directTouch:!0,noSharedTooltip:!0,trackerGroups:["group","dataLabelsGroup"],axisTypes:[],pointAttribs:a.seriesTypes.column.prototype.pointAttribs,animate:function(a){var c= +this,b=c.points,d=c.startAngleRad;a||(p(b,function(a){var b=a.graphic,e=a.shapeArgs;b&&(b.attr({r:a.startR||c.center[3]/2,start:d,end:d}),b.animate({r:e.r,start:e.start,end:e.end},c.options.animation))}),c.animate=null)},updateTotals:function(){var a,c=0,b=this.points,e=b.length,f,h=this.options.ignoreHiddenPoint;for(a=0;a1.5*Math.PI?m-=2*Math.PI:m<-Math.PI/2&&(m+=2*Math.PI);G.slicedTranslation={translateX:Math.round(Math.cos(m)*d),translateY:Math.round(Math.sin(m)*d)};h=Math.cos(m)*a[2]/ +2;u=Math.sin(m)*a[2]/2;G.tooltipPos=[a[0]+.7*h,a[1]+.7*u];G.half=m<-Math.PI/2||m>Math.PI/2?1:0;G.angle=m;f=Math.min(e,G.labelDistance/5);G.labelPos=[a[0]+h+Math.cos(m)*G.labelDistance,a[1]+u+Math.sin(m)*G.labelDistance,a[0]+h+Math.cos(m)*f,a[1]+u+Math.sin(m)*f,a[0]+h,a[1]+u,0>G.labelDistance?"center":G.half?"right":"left",m]}},drawGraph:null,drawPoints:function(){var a=this,c=a.chart.renderer,b,e,h,l,m=a.options.shadow;m&&!a.shadowGroup&&(a.shadowGroup=c.g("shadow").add(a.group));p(a.points,function(d){e= +d.graphic;if(d.isNull)e&&(d.graphic=e.destroy());else{l=d.shapeArgs;b=d.getTranslate();var k=d.shadowGroup;m&&!k&&(k=d.shadowGroup=c.g("shadow").add(a.shadowGroup));k&&k.attr(b);h=a.pointAttribs(d,d.selected&&"select");e?e.setRadialReference(a.center).attr(h).animate(f(l,b)):(d.graphic=e=c[d.shapeType](l).setRadialReference(a.center).attr(b).add(a.group),d.visible||e.attr({visibility:"hidden"}),e.attr(h).attr({"stroke-linejoin":"round"}).shadow(m,k));e.addClass(d.getClassName())}})},searchPoint:n, +sortByAngle:function(a,c){a.sort(function(a,d){return void 0!==a.angle&&(d.angle-a.angle)*c})},drawLegendSymbol:a.LegendSymbolMixin.drawRectangle,getCenter:D.getCenter,getSymbol:n},{init:function(){u.prototype.init.apply(this,arguments);var a=this,c;a.name=w(a.name,"Slice");c=function(b){a.slice("select"===b.type)};E(a,"select",c);E(a,"unselect",c);return a},isValid:function(){return a.isNumber(this.y,!0)&&0<=this.y},setVisible:function(a,c){var b=this,d=b.series,e=d.chart,f=d.options.ignoreHiddenPoint; +c=w(c,f);a!==b.visible&&(b.visible=b.options.visible=a=void 0===a?!b.visible:a,d.options.data[r(b,d.data)]=b.options,p(["graphic","dataLabel","connector","shadowGroup"],function(c){if(b[c])b[c][a?"show":"hide"](!0)}),b.legendItem&&e.legend.colorizeItem(b,a),a||"hover"!==b.state||b.setState(""),f&&(d.isDirty=!0),c&&e.redraw())},slice:function(a,c,b){var d=this.series;m(b,d.chart);w(c,!0);this.sliced=this.options.sliced=H(a)?a:!this.sliced;d.options.data[r(this,d.data)]=this.options;this.graphic.animate(this.getTranslate()); +this.shadowGroup&&this.shadowGroup.animate(this.getTranslate())},getTranslate:function(){return this.sliced?this.slicedTranslation:{translateX:0,translateY:0}},haloPath:function(a){var c=this.shapeArgs;return this.sliced||!this.visible?[]:this.series.chart.renderer.symbols.arc(c.x,c.y,c.r+a,c.r+a,{innerR:this.shapeArgs.r-1,start:c.start,end:c.end})}})})(M);(function(a){var E=a.addEvent,D=a.arrayMax,H=a.defined,p=a.each,f=a.extend,l=a.format,r=a.map,n=a.merge,w=a.noop,u=a.pick,e=a.relativeLength,h= +a.Series,m=a.seriesTypes,d=a.stableSort;a.distribute=function(a,b){function c(a,b){return a.target-b.target}var e,f=!0,h=a,l=[],m;m=0;for(e=a.length;e--;)m+=a[e].size;if(m>b){d(a,function(a,b){return(b.rank||0)-(a.rank||0)});for(m=e=0;m<=b;)m+=a[e].size,e++;l=a.splice(e-1,a.length)}d(a,c);for(a=r(a,function(a){return{size:a.size,targets:[a.target],align:u(a.align,.5)}});f;){for(e=a.length;e--;)f=a[e],m=(Math.min.apply(0,f.targets)+Math.max.apply(0,f.targets))/2,f.pos=Math.min(Math.max(0,m-f.size* +f.align),b-f.size);e=a.length;for(f=!1;e--;)0a[e].pos&&(a[e-1].size+=a[e].size,a[e-1].targets=a[e-1].targets.concat(a[e].targets),a[e-1].align=.5,a[e-1].pos+a[e-1].size>b&&(a[e-1].pos=b-a[e-1].size),a.splice(e,1),f=!0)}e=0;p(a,function(a){var b=0;p(a.targets,function(){h[e].pos=a.pos+b;b+=h[e].size;e++})});h.push.apply(h,l);d(h,c)};h.prototype.drawDataLabels=function(){function c(a,b){var c=b.filter;return c?(b=c.operator,a=a[c.property],c=c.value,"\x3e"===b&&a>c||"\x3c"=== +b&&a=c||"\x3c\x3d"===b&&a<=c||"\x3d\x3d"===b&&a==c||"\x3d\x3d\x3d"===b&&a===c?!0:!1):!0}var b=this,d=b.options,e=d.dataLabels,f=b.points,h,m,r=b.hasRendered||0,t,w,D=u(e.defer,!!d.animation),q=b.chart.renderer;if(e.enabled||b._hasPointLabels)b.dlProcessOptions&&b.dlProcessOptions(e),w=b.plotGroup("dataLabelsGroup","data-labels",D&&!r?"hidden":"visible",e.zIndex||6),D&&(w.attr({opacity:+r}),r||E(b,"afterAnimate",function(){b.visible&&w.show(!0);w[d.animation?"animate":"attr"]({opacity:1}, +{duration:200})})),m=e,p(f,function(f){var k,p=f.dataLabel,g,x,r=f.connector,z=!p,C;h=f.dlOptions||f.options&&f.options.dataLabels;(k=u(h&&h.enabled,m.enabled)&&!f.isNull)&&(k=!0===c(f,h||e));k&&(e=n(m,h),g=f.getLabelConfig(),C=e[f.formatPrefix+"Format"]||e.format,t=H(C)?l(C,g):(e[f.formatPrefix+"Formatter"]||e.formatter).call(g,e),C=e.style,g=e.rotation,C.color=u(e.color,C.color,b.color,"#000000"),"contrast"===C.color&&(f.contrastColor=q.getContrast(f.color||b.color),C.color=e.inside||0>u(f.labelDistance, +e.distance)||d.stacking?f.contrastColor:"#000000"),d.cursor&&(C.cursor=d.cursor),x={fill:e.backgroundColor,stroke:e.borderColor,"stroke-width":e.borderWidth,r:e.borderRadius||0,rotation:g,padding:e.padding,zIndex:1},a.objectEach(x,function(a,b){void 0===a&&delete x[b]}));!p||k&&H(t)?k&&H(t)&&(p?x.text=t:(p=f.dataLabel=g?q.text(t,0,-9999).addClass("highcharts-data-label"):q.label(t,0,-9999,e.shape,null,null,e.useHTML,null,"data-label"),p.addClass(" highcharts-data-label-color-"+f.colorIndex+" "+(e.className|| +"")+(e.useHTML?"highcharts-tracker":""))),p.attr(x),p.css(C).shadow(e.shadow),p.added||p.add(w),b.alignDataLabel(f,p,e,null,z)):(f.dataLabel=p=p.destroy(),r&&(f.connector=r.destroy()))})};h.prototype.alignDataLabel=function(a,b,d,e,h){var c=this.chart,k=c.inverted,l=u(a.dlBox&&a.dlBox.centerX,a.plotX,-9999),m=u(a.plotY,-9999),n=b.getBBox(),p,q=d.rotation,r=d.align,w=this.visible&&(a.series.forceDL||c.isInsidePlot(l,Math.round(m),k)||e&&c.isInsidePlot(l,k?e.x+1:e.y+e.height-1,k)),z="justify"===u(d.overflow, +"justify");if(w&&(p=d.style.fontSize,p=c.renderer.fontMetrics(p,b).b,e=f({x:k?this.yAxis.len-m:l,y:Math.round(k?this.xAxis.len-l:m),width:0,height:0},e),f(d,{width:n.width,height:n.height}),q?(z=!1,l=c.renderer.rotCorr(p,q),l={x:e.x+d.x+e.width/2+l.x,y:e.y+d.y+{top:0,middle:.5,bottom:1}[d.verticalAlign]*e.height},b[h?"attr":"animate"](l).attr({align:r}),m=(q+720)%360,m=180m,"left"===r?l.y-=m?n.height:0:"center"===r?(l.x-=n.width/2,l.y-=n.height/2):"right"===r&&(l.x-=n.width,l.y-=m?0:n.height)): +(b.align(d,null,e),l=b.alignAttr),z?a.isLabelJustified=this.justifyDataLabel(b,d,l,n,e,h):u(d.crop,!0)&&(w=c.isInsidePlot(l.x,l.y)&&c.isInsidePlot(l.x+n.width,l.y+n.height)),d.shape&&!q))b[h?"attr":"animate"]({anchorX:k?c.plotWidth-a.plotY:a.plotX,anchorY:k?c.plotHeight-a.plotX:a.plotY});w||(b.attr({y:-9999}),b.placed=!1)};h.prototype.justifyDataLabel=function(a,b,d,e,f,h){var c=this.chart,k=b.align,l=b.verticalAlign,m,n,p=a.box?0:a.padding||0;m=d.x+p;0>m&&("right"===k?b.align="left":b.x=-m,n=!0); +m=d.x+e.width-p;m>c.plotWidth&&("left"===k?b.align="right":b.x=c.plotWidth-m,n=!0);m=d.y+p;0>m&&("bottom"===l?b.verticalAlign="top":b.y=-m,n=!0);m=d.y+e.height-p;m>c.plotHeight&&("top"===l?b.verticalAlign="bottom":b.y=c.plotHeight-m,n=!0);n&&(a.placed=!h,a.align(b,null,f));return n};m.pie&&(m.pie.prototype.drawDataLabels=function(){var c=this,b=c.data,d,e=c.chart,f=c.options.dataLabels,l=u(f.connectorPadding,10),m=u(f.connectorWidth,1),n=e.plotWidth,t=e.plotHeight,r,w=c.center,q=w[2]/2,A=w[1],F,G, +g,v,E=[[],[]],L,P,J,M,y=[0,0,0,0];c.visible&&(f.enabled||c._hasPointLabels)&&(p(b,function(a){a.dataLabel&&a.visible&&a.dataLabel.shortened&&(a.dataLabel.attr({width:"auto"}).css({width:"auto",textOverflow:"clip"}),a.dataLabel.shortened=!1)}),h.prototype.drawDataLabels.apply(c),p(b,function(a){a.dataLabel&&a.visible&&(E[a.half].push(a),a.dataLabel._pos=null)}),p(E,function(b,h){var k,m,x=b.length,r=[],z;if(x)for(c.sortByAngle(b,h-.5),0d.bottom-2?k:P,h,d),F._attr={visibility:J,align:g[6]},F._pos={x:L+f.x+({left:l,right:-l}[g[6]]||0),y:P+f.y-10},g.x=L,g.y=P,u(f.crop,!0)&&(G=F.getBBox().width,k=null,L-Gn-l&&(k=Math.round(L+G-n+l),y[1]=Math.max(k,y[1])),0>P-v/2?y[0]=Math.max(Math.round(-P+v/2),y[0]):P+v/2>t&&(y[2]=Math.max(Math.round(P+v/2-t),y[2])),F.sideOverflow=k)}),0===D(y)||this.verifyDataLabelOverflow(y))&&(this.placeDataLabels(), +m&&p(this.points,function(a){var b;r=a.connector;if((F=a.dataLabel)&&F._pos&&a.visible&&0u(this.translatedThreshold,k.yAxis.len)),p=u(d.inside,!!this.options.stacking);l&&(e=n(l),0>e.y&&(e.height+=e.y,e.y=0),l=e.y+e.height-k.yAxis.len,0a+c||e+hb+d||f+lthis.pointCount))},pan:function(a,b){var c=this,d=c.hoverPoints,e;d&&r(d,function(a){a.setState()});r("xy"===b?[1,0]:[1],function(b){b= +c[b?"xAxis":"yAxis"][0];var d=b.horiz,f=a[d?"chartX":"chartY"],d=d?"mouseDownX":"mouseDownY",h=c[d],g=(b.pointRange||0)/2,k=b.getExtremes(),l=b.toValue(h-f,!0)+g,m=b.toValue(h+b.len-f,!0)-g,n=m=l(n.minWidth,0)&&this.chartHeight>=l(n.minHeight,0)}).call(this)&&f.push(a._id)};E.prototype.currentOptions=function(l){function n(e,h,l,d){var c;a.objectEach(e,function(a,e){if(!d&&-1