1(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){ 2module.exports={"type":"Topology","objects":{"default":{"type":"GeometryCollection","geometries":[{"type":"MultiPolygon","arcs":[[[9]],[[10]],[[11,12,13,14,15,16,17,18]]],"id":"US.MA","properties":{"hc-group":"admin1","hc-key":"us-ma","hc-a2":"MA","labelrank":"0","hasc":"US.MA","woe-id":"2347580","state-fips":"25","fips":"US25","postal-code":"MA","name":"Massachusetts","country":"United States of America","region":"Northeast","longitude":"-71.99930000000001","woe-name":"Massachusetts","latitude":"42.3739","woe-label":"Massachusetts, US, United States","type":"State","hc-middle-lon":-67.878,"hc-middle-lat":38.8}},{"type":"MultiPolygon","arcs":[[[19]],[[20,21,22]]],"id":"US.WA","properties":{"hc-group":"admin1","hc-key":"us-wa","hc-a2":"WA","labelrank":"0","hasc":"US.WA","woe-id":"2347606","state-fips":"53","fips":"US53","postal-code":"WA","name":"Washington","country":"United States of America","region":"West","longitude":"-120.361","woe-name":"Washington","latitude":"47.4865","woe-label":"Washington, US, United States","type":"State","hc-middle-lon":-120.01,"hc-middle-lat":47.403}},{"type":"Polygon","arcs":[[23,24,25,26]],"id":"US.CA","properties":{"hc-group":"admin1","hc-key":"us-ca","hc-a2":"CA","labelrank":"0","hasc":"US.CA","woe-id":"2347563","state-fips":"6","fips":"US06","postal-code":"CA","name":"California","country":"United States of America","region":"West","longitude":"-119.591","woe-name":"California","latitude":"36.7496","woe-label":"California, US, United States","type":"State","hc-middle-lon":-118.415,"hc-middle-lat":35.686}},{"type":"Polygon","arcs":[[-24,27,-22,28,29]],"id":"US.OR","properties":{"hc-group":"admin1","hc-key":"us-or","hc-a2":"OR","labelrank":"0","hasc":"US.OR","woe-id":"2347596","state-fips":"41","fips":"US41","postal-code":"OR","name":"Oregon","country":"United States of America","region":"West","longitude":"-120.386","woe-name":"Oregon","latitude":"43.8333","woe-label":"Oregon, US, United States","type":"State","hc-middle-lon":-120.81,"hc-middle-lat":43.957}},{"type":"MultiPolygon","arcs":[[[30]],[[31,32,33,34,35,36,37,38]]],"id":"US.WI","properties":{"hc-group":"admin1","hc-key":"us-wi","hc-a2":"WI","labelrank":"0","hasc":"US.WI","woe-id":"2347608","state-fips":"55","fips":"US55","postal-code":"WI","name":"Wisconsin","country":"United States of America","region":"Midwest","longitude":"-89.5831","woe-name":"Wisconsin","latitude":"44.3709","woe-label":"Wisconsin, US, United States","type":"State","hc-middle-lon":-90.479,"hc-middle-lat":45.253}},{"type":"MultiPolygon","arcs":[[[39]],[[40,41]]],"id":"US.ME","properties":{"hc-group":"admin1","hc-key":"us-me","hc-a2":"ME","labelrank":"0","hasc":"US.ME","woe-id":"2347578","state-fips":"23","fips":"US23","postal-code":"ME","name":"Maine","country":"United States of America","region":"Northeast","longitude":"-69.1973","woe-name":"Maine","latitude":"45.148","woe-label":"Maine, US, United States","type":"State","hc-middle-lon":-69.074,"hc-middle-lat":45.611}},{"type":"MultiPolygon","arcs":[[[42]],[[43]],[[44,45,46]],[[-36,47]]],"id":"US.MI","properties":{"hc-group":"admin1","hc-key":"us-mi","hc-a2":"MI","labelrank":"0","hasc":"US.MI","woe-id":"2347581","state-fips":"26","fips":"US26","postal-code":"MI","name":"Michigan","country":"United States of America","region":"Midwest","longitude":"-84.9479","woe-name":"Michigan","latitude":"43.4343","woe-label":"Michigan, US, United States","type":"State","hc-middle-lon":-84.717,"hc-middle-lat":43.677}},{"type":"Polygon","arcs":[[-30,48,49,50,-25]],"id":"US.NV","properties":{"hc-group":"admin1","hc-key":"us-nv","hc-a2":"NV","labelrank":"0","hasc":"US.NV","woe-id":"2347587","state-fips":"32","fips":"US32","postal-code":"NV","name":"Nevada","country":"United States of America","region":"West","longitude":"-117.02","woe-name":"Nevada","latitude":"39.4299","woe-label":"Nevada, US, United States","type":"State","hc-middle-lon":-117.046,"hc-middle-lat":39.518}},{"type":"Polygon","arcs":[[51,52,53,54,55]],"id":"US.NM","properties":{"hc-group":"admin1","hc-key":"us-nm","hc-a2":"NM","labelrank":"0","hasc":"US.NM","woe-id":"2347590","state-fips":"35","fips":"US35","postal-code":"NM","name":"New Mexico","country":"United States of America","region":"West","longitude":"-106.024","woe-name":"New Mexico","latitude":"34.5002","woe-label":"New Mexico, US, United States","type":"State","hc-middle-lon":-106.098,"hc-middle-lat":34.421}},{"type":"Polygon","arcs":[[-52,56,57,58,59,60]],"id":"US.CO","properties":{"hc-group":"admin1","hc-key":"us-co","hc-a2":"CO","labelrank":"0","hasc":"US.CO","woe-id":"2347564","state-fips":"8","fips":"US08","postal-code":"CO","name":"Colorado","country":"United States of America","region":"West","longitude":"-105.543","woe-name":"Colorado","latitude":"38.9998","woe-label":"Colorado, US, United States","type":"State","hc-middle-lon":-105.57,"hc-middle-lat":39.042}},{"type":"Polygon","arcs":[[-58,61,62,63,64,65]],"id":"US.WY","properties":{"hc-group":"admin1","hc-key":"us-wy","hc-a2":"WY","labelrank":"0","hasc":"US.WY","woe-id":"2347609","state-fips":"56","fips":"US56","postal-code":"WY","name":"Wyoming","country":"United States of America","region":"West","longitude":"-107.552","woe-name":"Wyoming","latitude":"42.9999","woe-label":"Wyoming, US, United States","type":"State","hc-middle-lon":-107.579,"hc-middle-lat":43.039}},{"type":"Polygon","arcs":[[66,67,68,-60]],"id":"US.KS","properties":{"hc-group":"admin1","hc-key":"us-ks","hc-a2":"KS","labelrank":"0","hasc":"US.KS","woe-id":"2347575","state-fips":"20","fips":"US20","postal-code":"KS","name":"Kansas","country":"United States of America","region":"Midwest","longitude":"-98.3309","woe-name":"Kansas","latitude":"38.5","woe-label":"Kansas, US, United States","type":"State","hc-middle-lon":-99.894,"hc-middle-lat":38.549}},{"type":"Polygon","arcs":[[-67,-59,-66,69,70,71,72]],"id":"US.NE","properties":{"hc-group":"admin1","hc-key":"us-ne","hc-a2":"NE","labelrank":"0","hasc":"US.NE","woe-id":"2347586","state-fips":"31","fips":"US31","postal-code":"NE","name":"Nebraska","country":"United States of America","region":"Midwest","longitude":"-99.68550000000001","woe-name":"Nebraska","latitude":"41.5002","woe-label":"Nebraska, US, United States","type":"State","hc-middle-lon":-100.323,"hc-middle-lat":41.555}},{"type":"Polygon","arcs":[[-69,73,74,75,-53,-61]],"id":"US.OK","properties":{"hc-group":"admin1","hc-key":"us-ok","hc-a2":"OK","labelrank":"0","hasc":"US.OK","woe-id":"2347595","state-fips":"40","fips":"US40","postal-code":"OK","name":"Oklahoma","country":"United States of America","region":"South","longitude":"-97.1309","woe-name":"Oklahoma","latitude":"35.452","woe-label":"Oklahoma, US, United States","type":"State","hc-middle-lon":-96.299,"hc-middle-lat":35.365}},{"type":"Polygon","arcs":[[-74,-68,-73,76,77,78,79,80,81,82]],"id":"US.MO","properties":{"hc-group":"admin1","hc-key":"us-mo","hc-a2":"MO","labelrank":"0","hasc":"US.MO","woe-id":"2347584","state-fips":"29","fips":"US29","postal-code":"MO","name":"Missouri","country":"United States of America","region":"Midwest","longitude":"-92.446","woe-name":"Missouri","latitude":"38.5487","woe-label":"Missouri, US, United States","type":"State","hc-middle-lon":-92.521,"hc-middle-lat":38.313}},{"type":"Polygon","arcs":[[83,84,85,-78,86,-39,87]],"id":"US.IL","properties":{"hc-group":"admin1","hc-key":"us-il","hc-a2":"IL","labelrank":"0","hasc":"US.IL","woe-id":"2347572","state-fips":"17","fips":"US17","postal-code":"IL","name":"Illinois","country":"United States of America","region":"Midwest","longitude":"-89.1991","woe-name":"Illinois","latitude":"39.946","woe-label":"Illinois, US, United States","type":"State","hc-middle-lon":-89.191,"hc-middle-lat":40.062}},{"type":"Polygon","arcs":[[88,-46,89,90,-85]],"id":"US.IN","properties":{"hc-group":"admin1","hc-key":"us-in","hc-a2":"IN","labelrank":"0","hasc":"US.IN","woe-id":"2347573","state-fips":"18","fips":"US18","postal-code":"IN","name":"Indiana","country":"United States of America","region":"Midwest","longitude":"-86.1396","woe-name":"Indiana","latitude":"39.8874","woe-label":"Indiana, US, United States","type":"State","hc-middle-lon":-86.242,"hc-middle-lat":40.071}},{"type":"MultiPolygon","arcs":[[[91]],[[92,93,94,-16]]],"id":"US.VT","properties":{"hc-group":"admin1","hc-key":"us-vt","hc-a2":"VT","labelrank":"0","hasc":"US.VT","woe-id":"2347604","state-fips":"50","fips":"US50","postal-code":"
2VT","name":"Vermont","country":"United States of America","region":"Northeast","longitude":"-72.7317","woe-name":"Vermont","latitude":"44.0886","woe-label":"Vermont, US, United States","type":"State","hc-middle-lon":-66.109,"hc-middle-lat":42.883}},{"type":"Polygon","arcs":[[95,-75,-83,96,97,98]],"id":"US.AR","properties":{"hc-group":"admin1","hc-key":"us-ar","hc-a2":"AR","labelrank":"0","hasc":"US.AR","woe-id":"2347562","state-fips":"5","fips":"US05","postal-code":"AR","name":"Arkansas","country":"United States of America","region":"South","longitude":"-92.14279999999999","woe-name":"Arkansas","latitude":"34.7563","woe-label":"Arkansas, US, United States","type":"State","hc-middle-lon":-92.364,"hc-middle-lat":35.031}},{"type":"MultiPolygon","arcs":[[[-96,99,100,-54,-76]],[[101]]],"id":"US.TX","properties":{"hc-group":"admin1","hc-key":"us-tx","hc-a2":"TX","labelrank":"0","hasc":"US.TX","woe-id":"2347602","state-fips":"48","fips":"US48","postal-code":"TX","name":"Texas","country":"United States of America","region":"South","longitude":"-98.7607","woe-name":"Texas","latitude":"31.131","woe-label":"Texas, US, United States","type":"State","hc-middle-lon":-97.541,"hc-middle-lat":31.032}},{"type":"MultiPolygon","arcs":[[[102]],[[103,-19]],[[-13,104,105]]],"id":"US.RI","properties":{"hc-group":"admin1","hc-key":"us-ri","hc-a2":"RI","labelrank":"0","hasc":"US.RI","woe-id":"2347598","state-fips":"44","fips":"US44","postal-code":"RI","name":"Rhode Island","country":"United States of America","region":"Northeast","longitude":"-71.5082","woe-name":"Rhode Island","latitude":"41.6242","woe-label":"Rhode Island, US, United States","type":"State","hc-middle-lon":-68.726,"hc-middle-lat":36.713}},{"type":"Polygon","arcs":[[106,107,108,109,110]],"id":"US.AL","properties":{"hc-group":"admin1","hc-key":"us-al","hc-a2":"AL","labelrank":"0","hasc":"US.AL","woe-id":"2347559","state-fips":"1","fips":"US01","postal-code":"AL","name":"Alabama","country":"United States of America","region":"South","longitude":"-86.7184","woe-name":"Alabama","latitude":"32.8551","woe-label":"Alabama, US, United States","type":"State","hc-middle-lon":-86.668,"hc-middle-lat":32.985}},{"type":"Polygon","arcs":[[111,112,-98,113,-108]],"id":"US.MS","properties":{"hc-group":"admin1","hc-key":"us-ms","hc-a2":"MS","labelrank":"0","hasc":"US.MS","woe-id":"2347583","state-fips":"28","fips":"US28","postal-code":"MS","name":"Mississippi","country":"United States of America","region":"South","longitude":"-89.71890000000001","woe-name":"Mississippi","latitude":"32.8657","woe-label":"Mississippi, US, United States","type":"State","hc-middle-lon":-89.833,"hc-middle-lat":32.749}},{"type":"MultiPolygon","arcs":[[[114,115,116,117]],[[118,119]],[[120,121,122,123,124]]],"id":"US.NC","properties":{"hc-group":"admin1","hc-key":"us-nc","hc-a2":"NC","labelrank":"0","hasc":"US.NC","woe-id":"2347592","state-fips":"37","fips":"US37","postal-code":"NC","name":"North Carolina","country":"United States of America","region":"South","longitude":"-78.866","woe-name":"North Carolina","latitude":"35.6152","woe-label":"North Carolina, US, United States","type":"State","hc-middle-lon":-78.867,"hc-middle-lat":35.491}},{"type":"MultiPolygon","arcs":[[[125,-116,126,-121,127,128,129,130,131,132,133,-120],[134]],[[135,-118]],[[136,137]],[[138,139]]],"id":"US.VA","properties":{"hc-group":"admin1","hc-key":"us-va","hc-a2":"VA","labelrank":"0","hasc":"US.VA","woe-id":"2347605","state-fips":"51","fips":"US51","postal-code":"
2VA","name":"Virginia","country":"United States of America","region":"South","longitude":"-78.2431","woe-name":"Virginia","latitude":"37.7403","woe-label":"Virginia, US, United States","type":"State","hc-middle-lon":-78.329,"hc-middle-lat":37.526}},{"type":"Polygon","arcs":[[-87,-77,140,-71,141,142,-33,143]],"id":"US.IA","properties":{"hc-group":"admin1","hc-key":"us-ia","hc-a2":"IA","labelrank":"0","hasc":"US.IA","woe-id":"2347574","state-fips":"19","fips":"US19","postal-code":"IA","name":"Iowa","country":"United States of America","region":"Midwest","longitude":"-93.3891","woe-name":"Iowa","latitude":"42.0423","woe-label":"Iowa, US, United States","type":"State","hc-middle-lon":-94.374,"hc-middle-lat":42.051}},{"type":"MultiPolygon","arcs":[[[144]],[[145,-138]],[[146,147]],[[-139,148,149,-131,150,151,152,153]]],"id":"US.MD","properties":{"hc-group":"admin1","hc-key":"us-md","hc-a2":"MD","labelrank":"0","hasc":"US.MD","woe-id":"2347579","state-fips":"24","fips":"US24","postal-code":"MD","name":"Maryland","country":"United States of America","region":"South","longitude":"-77.0454","woe-name":"Maryland","latitude":"39.3874","woe-label":"Maryland, US, United States","type":"State","hc-middle-lon":-71.572,"hc-middle-lat":28.505}},{"type":"MultiPolygon","arcs":[[[154]],[[155,-153,156,157,-148]]],"id":"US.DE","properties":{"hc-group":"admin1","hc-key":"us-de","hc-a2":"DE","labelrank":"0","hasc":"US.DE","woe-id":"2347566","state-fips":"10","fips":"US10","postal-code":"DE","name":"Delaware","country":"United States of America","region":"South","longitude":"-75.41119999999999","woe-name":"Delaware","latitude":"38.8657","woe-label":"Delaware, US, United States","type":"State","hc-middle-lon":-70.858,"hc-middle-lat":30.54}},{"type":"Polygon","arcs":[[158,-157,-152,159,160,161,162,163]],"id":"US.PA","properties":{"hc-group":"admin1","hc-key":"us-pa","hc-a2":"PA","labelrank":"0","hasc":"US.PA","woe-id":"2347597","state-fips":"42","fips":"US42","postal-code":"PA","name":"Pennsylvania","country":"United States of America","region":"Northeast","longitude":"-77.60939999999999","woe-name":"Pennsylvania","latitude":"40.8601","woe-label":"Pennsylvania, US, United States","type":"State","hc-middle-lon":-77.652,"hc-middle-lat":40.87}},{"type":"MultiPolygon","arcs":[[[164]],[[165,166,167,-164]]],"id":"US.NJ","properties":{"hc-group":"admin1","hc-key":"us-nj","hc-a2":"NJ","labelrank":"0","hasc":"US.NJ","woe-id":"2347589","state-fips":"34","fips":"US34","postal-code":"NJ","name":"New Jersey","country":"United States of America","region":"Northeast","longitude":"-74.4653","woe-name":"New Jersey","latitude":"40.0449","woe-label":"New Jersey, US, United States","type":"State","hc-middle-lon":-70.197,"hc-middle-lat":32.63}},{"type":"Polygon","arcs":[[-163,168,-93,-15,169,170,-167,171]],"id":"US.NY","properties":{"hc-group":"admin1","hc-key":"us-ny","hc-a2":"NY","labelrank":"0","hasc":"US.NY","woe-id":"2347591","state-fips":"36","fips":"US36","postal-code":"NY","name":"New York","country":"United States of America","region":"Northeast","longitude":"-75.32420000000001","woe-name":"New York","latitude":"43.1988","woe-label":"New York, US, United States","type":"State","hc-middle-lon":-75.04,"hc-middle-lat":43.02}},{"type":"Polygon","arcs":[[172,173,-63,174,-49,-29,-21]],"id":"US.ID","properties":{"hc-group":"admin1","hc-key":"us-id","hc-a2":"ID","labelrank":"0","hasc":"US.ID","woe-id":"2347571","state-fips":"16","fips":"US16","postal-code":"ID","name":"Idaho","country":"United States of America","region":"West","longitude":"-114.133","woe-name":"Idaho","latitude":"43.7825","woe-label":"Idaho, US, United States","type":"State","hc-middle-lon":-114.097,"hc-middle-lat":43.549}},{"type":"Polygon","arcs":[[-65,175,176,177,-142,-70]],"id":"US.SD","properties":{"hc-group":"admin1","hc-key":"us-sd","hc-a2":"SD","labelrank":"0","hasc":"US.SD","woe-id":"2347600","state-fips":"46","fips":"US46","postal-code":"SD","name":"South Dakota","country":"United States of America","region":"Midwest","longitude":"-100.255","woe-name":"South Dakota","latitude":"44.4711","woe-label":"South Dakota, US, United States","type":"State","hc-middle-lon":-100.262,"hc-middle-lat":44.506}},{"type":"MultiPolygon","arcs":[[[178]],[[179,-170,-14,-106]]],"id":"US.CT","properties":{"hc-group":"admin1","hc-key":"us-ct","hc-a2":"CT","labelrank":"0","hasc":"US.CT","woe-id":"2347565","state-fips":"9","fips":"US09","postal-code":"CT","name":"Connecticut","country":"United States of America","region":"Northeast","longitude":"-72.7594","woe-name":"Connecticut","latitude":"41.6486","woe-label":"Connecticut, US, United States","type":"State","hc-middle-lon":-69.47,"hc-middle-lat":34.644}},{"type":"MultiPolygon","arcs":[[[180]],[[181,-17,-95,182,-42]]],"id":"US.NH","properties":{"hc-group":"admin1","hc-key":"us-nh","hc-a2":"NH","labelrank":"0","hasc":"US.NH","woe-id":"2347588","state-fips":"33","fips":"US33","postal-code":"NH","name":"New Hampshire","country":"United States of America","region":"Northeast","longitude":"-71.6301","woe-name":"New Hampshire","latitude":"43.5993","woe-label":"New Hampshire, US, United States","type":"State","hc-middle-lon":-67.043,"hc-middle-lat":40.842}},{"type":"MultiPolygon","arcs":[[[-81,183]],[[-79,-86,-91,184,185,-129,186]],[[187,187,187]]],"id":"US.KY","properties":{"hc-group":"admin1","hc-key":"us-ky","hc-a2":"KY","labelrank":"0","hasc":"US.KY","woe-id":"2347576","state-fips":"21","fips":"US21","postal-code":"KY","name":"Kentucky","country":"United States of America","region":"South","longitude":"-85.5729","woe-name":"Kentucky","latitude":"37.3994","woe-label":"Kentucky, US, United States","type":"State","hc-middle-lon":-84.594,"hc-middle-lat":37.611}},{"type":"Polygon","arcs":[[-45,188,-161,189,-185,-90]],"id":"US.OH","properties":{"hc-group":"admin1","hc-key":"us-oh","hc-a2":"OH","labelrank":"0","hasc":"US.OH","woe-id":"2347594","state-fips":"39","fips":"US39","postal-code":"OH","name":"Ohio","country":"United States of America","region":"Midwest","longitude":"-82.67189999999999","woe-name":"Ohio","latitude":"40.0924","woe-label":"Ohio, US, United States","type":"State","hc-middle-lon":-83.048,"hc-middle-lat":40.263}},{"type":"Polygon","arcs":[[-114,-97,-82,-184,-80,-187,-128,-125,190,-109]],"id":"US.TN","properties":{"hc-group":"admin1","hc-key":"us-tn","hc-a2":"TN","labelrank":"0","hasc":"US.TN","woe-id":"2347601","state-fips":"47","fips":"US47","postal-code":"TN","name":"Tennessee","country":"United States of America","region":"South","longitude":"-86.3415","woe-name":"Tennessee","latitude":"35.7514","woe-label":"Tennessee, US, United States","type":"State","hc-middle-lon":-86.623,"hc-middle-lat":35.846}},{"type":"Polygon","arcs":[[-190,-160,-151,-130,-186]],"id":"US.WV","properties":{"hc-group":"admin1","hc-key":"us-wv","hc-a2":"WV","labelrank":"0","hasc":"US.WV","woe-id":"2347607","state-fips":"54","fips":"US54","postal-code":"WV","name":"West Virginia","country":"United States of America","region":"South","longitude":"-80.7128","woe-name":"West Virginia","latitude":"38.6422","woe-label":"West Virginia, US, United States","type":"State","hc-middle-lon":-80.919,"hc-middle-lat":38.701}},{"type":"MultiPolygon","arcs":[[[191]],[[192,-132,-150]]],"id":"US.DC","properties":{"hc-group":"admin1","hc-key":"us-dc","hc-a2":"DC","labelrank":"9","hasc":"US.DC","woe-id":"2347567","state-fips":"11","fips":"US11","postal-code":"DC","name":"District of Columbia","country":"United States of America","region":"South","longitude":"-77.01130000000001","woe-name":"District of Columbia","latitude":"38.8922","woe-label":"District of Columbia, US, United States","type":"Federal District","hc-middle-lon":-72.145,"hc-middle-lat":26.435}},{"type":"Polygon","arcs":[[193,-100,-99,-113]],"id":"US.LA","properties":{"hc-group":"admin1","hc-key":"us-la","hc-a2":"LA","labelrank":"0","hasc":"US.LA","woe-id":"2347577","state-fips":"22","fips":"US22","postal-code":"LA","name":"Louisiana","country":"United States of America","region":"South","longitude":"-91.9991","woe-name":"Louisiana","latitude":"30.5274","woe-label":"Louisiana, US, United States","type":"State","hc-middle-lon":-92.307,"hc-middle-lat":31.273}},{"type":"Polygon","arcs":[[-111,194,195]],"id":"US.FL","properties":{"hc-group":"admin1","hc-key":"us-fl","hc-a2":"FL","labelrank":"0","hasc":"US.FL","woe-id":"2347568","state-fips":"12","fips":"US12","postal-code":"FL","
2name":"Florida","country":"United States of America","region":"South","longitude":"-81.6228","woe-name":"Florida","latitude":"28.1568","woe-label":"Florida, US, United States","type":"State","hc-middle-lon":-81.631,"hc-middle-lat":27.933}},{"type":"Polygon","arcs":[[-110,-191,-124,196,197,-195]],"id":"US.GA","properties":{"hc-group":"admin1","hc-key":"us-ga","hc-a2":"GA","labelrank":"0","hasc":"US.GA","woe-id":"2347569","state-fips":"13","fips":"US13","postal-code":"GA","name":"Georgia","country":"United States of America","region":"South","longitude":"-83.4078","woe-name":"Georgia","latitude":"32.8547","woe-label":"Georgia, US, United States","type":"State","hc-middle-lon":-83.674,"hc-middle-lat":32.715}},{"type":"Polygon","arcs":[[198,-197,-123]],"id":"US.SC","properties":{"hc-group":"admin1","hc-key":"us-sc","hc-a2":"SC","labelrank":"0","hasc":"US.SC","woe-id":"2347599","state-fips":"45","fips":"US45","postal-code":"SC","name":"South Carolina","country":"United States of America","region":"South","longitude":"-80.6471","woe-name":"South Carolina","latitude":"33.8578","woe-label":"South Carolina, US, United States","type":"State","hc-middle-lon":-80.813,"hc-middle-lat":34.034}},{"type":"Polygon","arcs":[[199,-34,-143,-178,200]],"id":"US.MN","properties":{"hc-group":"admin1","hc-key":"us-mn","hc-a2":"MN","labelrank":"0","hasc":"US.MN","woe-id":"2347582","state-fips":"27","fips":"US27","postal-code":"MN","name":"Minnesota","country":"United States of America","region":"Midwest","longitude":"-93.364","woe-name":"Minnesota","latitude":"46.0592","woe-label":"Minnesota, US, United States","type":"State","hc-middle-lon":-94.386,"hc-middle-lat":45.85}},{"type":"Polygon","arcs":[[201,202,-176,-64,-174]],"id":"US.MT","properties":{"hc-group":"admin1","hc-key":"us-mt","hc-a2":"MT","labelrank":"0","hasc":"US.MT","woe-id":"2347585","state-fips":"30","fips":"US30","postal-code":"MT","name":"Montana","country":"United States of America","region":"West","longitude":"-110.044","woe-name":"Montana","latitude":"46.9965","woe-label":"Montana, US, United States","type":"State","hc-middle-lon":-109.139,"hc-middle-lat":47.053}},{"type":"Polygon","arcs":[[-203,203,-201,-177]],"id":"US.ND","properties":{"hc-group":"admin1","hc-key":"us-nd","hc-a2":"ND","labelrank":"0","hasc":"US.ND","woe-id":"2347593","state-fips":"38","fips":"US38","postal-code":"ND","name":"North Dakota","country":"United States of America","region":"Midwest","longitude":"-100.302","woe-name":"North Dakota","latitude":"47.4675","woe-label":"North Dakota, US, United States","type":"State","hc-middle-lon":-100.635,"hc-middle-lat":47.51}},{"type":"Polygon","arcs":[[204,-26,-51,205,-56]],"id":"US.AZ","properties":{"hc-group":"admin1","hc-key":"us-az","hc-a2":"AZ","labelrank":"0","hasc":"US.AZ","woe-id":"2347561","state-fips":"4","fips":"US04","postal-code":"AZ","name":"Arizona","country":"United States of America","region":"West","longitude":"-111.935","woe-name":"Arizona","latitude":"34.3046","woe-label":"Arizona, US, United States","type":"State","hc-middle-lon":-111.881,"hc-middle-lat":34.446}},{"type":"Polygon","arcs":[[-206,-50,-175,-62,-57]],"id":"US.UT","properties":{"hc-group":"admin1","hc-key":"us-ut","hc-a2":"UT","labelrank":"0","hasc":"US.UT","woe-id":"2347603","state-fips":"49","fips":"US49","postal-code":"UT","name":"Utah","country":"United States of America","region":"West","longitude":"-111.544","woe-name":"Utah","latitude":"39.5007","woe-label":"Utah, US, United States","type":"State","hc-middle-lon":-111.491,"hc-middle-lat":39.012}},{"type":"MultiPolygon","arcs":[[[206]],[[207]],[[208]],[[209]],[[210]],[[211]],[[212]],[[213]]],"id":"US.HI","properties":{"hc-group":"admin1","hc-key":"us-hi","hc-a2":"HI","labelrank":"0","hasc":"US.HI","woe-id":"2347570","state-fips":"15","fips":"US15","postal-code":"HI","name":"Hawaii","country":"United States of America","region":"West","longitude":"-157.999","woe-name":"Hawaii","latitude":"21.4919","woe-label":"Hawaii, US, United States","type":"State","hc-middle-lon":-155.52,"hc-middle-lat":19.605,"hc-inset":"us-all-hawaii"}},{"type":"MultiPolygon","arcs":[[[214],[215]],[[216]],[[217]],[[218]],[[219]],[[220]],[[221]],[[222]],[[223]
2],[[224]],[[225]],[[226]],[[227]],[[228]],[[229]],[[230]],[[231]],[[232]],[[233]],[[234]],[[235]],[[236]],[[237]],[[238]],[[239]],[[240]],[[241]],[[242]],[[243]],[[244]],[[245]],[[246]],[[247]],[[248]],[[249]],[[250]],[[251]],[[252]],[[253]],[[254]],[[255]],[[256]],[[257]],[[258]],[[259]]],"id":"US.AK","properties":{"hc-group":"admin1","hc-key":"us-ak","hc-a2":"AK","labelrank":"0","hasc":"US.AK","woe-id":"2347560","state-fips":"2","fips":"US02","postal-code":"AK","name":"Alaska","country":"United States of America","region":"West","longitude":"-151.604","woe-name":"Alaska","latitude":"65.3609","woe-label":"Alaska, US, United States","type":"State","hc-middle-lon":-150.208,"hc-middle-lat":65.023,"hc-inset":"us-all-alaska"}},{"type":"LineString","arcs":[0],"properties":{"hc-group":"__separator_lines__"}},{"type":"LineString","arcs":[1],"properties":{"hc-group":"__separator_lines__"}},{"type":"LineString","arcs":[2],"properties":{"hc-group":"__separator_lines__"}},{"type":"LineString","arcs":[3],"properties":{"hc-group":"__separator_lines__"}},{"type":"LineString","arcs":[4],"properties":{"hc-group":"__separator_lines__"}},{"type":"LineString","arcs":[5],"properties":{"hc-group":"__separator_lines__"}},{"type":"LineString","arcs":[6],"properties":{"hc-group":"__separator_lines__"}},{"type":"LineString","arcs":[7],"properties":{"hc-group":"__separator_lines__"}},{"type":"LineString","arcs":[8],"properties":{"hc-group":"__separator_lines__"}}],"hc-recommended-transform":{"default":{"crs":"+proj=lcc +lat_1=33 +lat_2=45 +lat_0=39 +lon_0=-96 +x_0=0 +y_0=0 +datum=NAD83 +units=m +no_defs","scale":0.000151481324748,"jsonres":15.5,"jsonmarginX":-999,"jsonmarginY":9851,"xoffset":-2361356.09818,"yoffset":1398996.77886},"us-all-hawaii":{"xpan":190,"ypan":417,"crs":"+proj=aea +lat_1=8 +lat_2=18 +lat_0=13 +lon_0=-157 +x_0=0 +y_0=0 +datum=NAD83 +units=m +no_defs","scale":0.000123090941806,"jsonres":15.5,"jsonmarginX":-999,"jsonmarginY":9851,"xoffset":-338610.47557,"yoffset":1022754.31736,"geometry":{"type":"Polygon","coordinates":[[[-108.02234811026737,28.131995556971578],[-99.6925136210582,25.09851533842571],[-99.13103120627295,10.80433106513135],[-105.76273688266124,10.337841364791041],[-108.02234811026737,28.131995556971578]]]}},"us-all-alaska":{"rotation":-0.0174532925199,"xpan":5,"ypan":357,"crs":"+proj=tmerc +lat_0=54 +lon_0=-142 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs","scale":0.0000584397059179,"jsonres":15.5,"jsonmarginX":-999,"jsonmarginY":9851,"xoffset":-1566154.00853,"yoffset":1992671.14918,"geometry":{"type":"Polygon","coordinates":[[[-120.85794661131852,30.762825284322425],[-119.60838899484447,31.05714930388009],[-108.02234811026737,28.131995556971578],[-105.76273688266124,10.337841364791041],[-115.12985129390901,8.8460581322757],[
2-120.85794661131852,30.762825284322425]]]}}},"hc-recommended-mapview":{"projection":{"name":"LambertConformalConic","parallels":[33,45],"rotation":[96]},"padding":[0,0,"8%",0],"insets":[{"id":"us-alaska","borderPath":{"type":"MultiLineString","coordinates":[[[0,60],[25,80],[25,100]]]},"field":{"type":"Polygon","coordinates":[[[0,60],[25,80],[25,100],[0,100]]]},"geoBounds":{"type":"Polygon","coordinates":[[[-179.5,50],[-129,50],[-129,72],[-179.5,72]]]},"padding":["30%","5%",0,0],"projection":{"name":"LambertConformalConic","parallels":[55,65],"rotation":[154]}},{"id":"us-hawaii","borderPath":{"type":"LineString","coordinates":[[[25,80],[40,92]]]},"field":{"type":"Polygon","coordinates":[[[25,80],[40,92],[40,100],[25,100]]]},"geoBounds":{"type":"Polygon","coordinates":[[[-162,23],[-152,23],[-152,18],[-162,18]]]},"padding":["30%","20%",0,"10%"],"projection":{"name":"LambertConformalConic","parallels":[8,18],"rotation":[157]}}]}}},"arcs":[[[9171,4808],[387,-132]],[[9292,4621],[82,-287],[105,-50]],[[9327,4389],[-16,-454],[95,-44]],[[9266,4321],[-29,-778],[100,-46]],[[9163,4298],[-15,-1140],[123,-56]],[[8986,3941],[78,-1168],[145,-66]],[[8922,3783],[62,-1396],[166,-75]],[[8884,3693],[25,-1692],[186,-82]],[[8764,3812],[73,-2196],[205,-89]],[[9445,4073],[377,-198],[-77,-366],[-367,192],[67,372]],[[9345,4303],[19,-17],[-20,-2],[-11,-11],[12,30]],[[9296,4344],[0,9],[-4,-2]],[[9292,4351],[-10,17],[-4,41],[-38,0]],[[9240,4409],[-87,3],[-66,5]],[[9087,4417],[-3,4],[23,127]],[[9107,4548],[32,0],[41,-2]],[[9180,4546],[106,-6],[13,21],[31,13]],[[9330,4574],[4,-31],[16,-16],[-26,-18],[-14,-44],[13,2],[16,-21],[17,-75],[23,-19],[24,14],[-3,48],[10,-35],[0,-35],[-22,-3],[-46,-24],[2,36],[-22,-16],[-2,-17],[-18,-7]],[[9302,4313],[-1,29],[-5,2]],[[4574,5694],[15,-16],[-16,-15],[10,-30],[-31,16],[11,9],[11,36]],[[5110,5740],[0,-498],[12,-37],[3,-35]],[[5125,5170],[-194,-1],[-9,-10],[-45,-4],[-58,-36],[-36,-1],[-26,-17],[-24,-2],[-9,15],[-48,2],[-43,-29],[-43,18],[-6,60],[-10,25],[-25,14]],[[4549,5204],[-18,-5],[-9,23],[-19,6],[-17,-13],[-17,23],[0,56],[6,-38],[9,18],[0,38],[-18,-1],[-3,28],[29,14],[-33,15],[-14,61],[-9,73],[-20,32],[-9,50],[15,38],[48,-37],[73,-12],[9,12],[14,-27],[21,20],[13,-48],[-12,-42],[21,45],[-6,-59],[21,-41],[-33,-8],[-5,-32],[-4,40],[-19,-50],[35,1],[10,37],[19,14],[-7,35],[0,39],[18,39],[-21,48],[4,14],[-18,14],[-12,-28],[12,-5],[23,-49],[-20,7],[-6,33],[-12,17],[15,26],[-5,3],[-7,27],[21,-18],[5,25],[-5,30],[-14,5],[-15,32],[6,12],[521,-1]],[[4455,4406],[385,0]],[[4840,4406],[0,-573],[171,-249],[134,-210],[185,-303]],[[5330,3071],[24,-102],[22,-36],[-23,-29],[-13,-36],[3,-40],[-13,-56],[-8,-4],[2,-62],[20,-19],[-6,-48],[-16,-5]],[[5322,2634],[-220,-34],[-1,30],[-11,2],[-6,78],[-17,43],[-61,82],[-21,-5],[2,19],[-14,38],[-24,-7],[-37,29],[-6,20],[-31,31],[-24,-3],[-24,13],[-30,-4],[-16,26],[0,105],[-23,22],[6,16],[-31,57],[-11,6],[-40,102],[-16,19],[-7,52],[15,21],[2,24],[-13,32],[-20,0],[-23,41],[1,32],[-11,33],[0,48],[10,5],[4,-41],[29,-27],[-11,40],[-15,23],[-3,43],[21,6],[-24,21],[-10,-7],[-2,-57],[-35,41],[-20,80],[-55,89],[4,21],[-13,61],[5,38],[-7,55],[-24,52],[-23,30],[-4,34],[27,114],[5,76],[-9,57],[-10,8],[5,42]],[[4455,4406],[-13,22],[-7,41],[2,64],[-13,35],[10,35],[6,59],[13,39],[8,64],[9,144],[-1,36],[15,140],[-8,40],[4,41],[-5,42],[35,-3],[12,13],[9,-21],[18,7]],[[5125,5170],[11,-32],[21,-16],[6,-32],[-17,-45],[-17,-82],[-34,-83],[1,-35],[27,-22],[-11,-76],[0,-341]],[[5112,4406],[-272,0]],[[7856,5044],[-8,-43],[-22,-56],[-10,19],[15,48],[25,32]],[[7520,4504],[-6,27]],[[7514,4531],[-31,17],[-11,79],[8,23],[-15,43]],[[7465,4693],[-4,79],[-12,20],[-22,10],[-40,69],[-27,28],[-17,5],[-22,28],[6,33],[1,71],[7,28],[-20,24],[1,27],[16,38],[37,32],[0,111],[17,20]],[[7386,5316],[29,-12],[55,30],[21,17],[20,-5],[-5,-28],[12,-26],[23,-10]],[[7541,5282],[17,-15],[10,-33],[91,-36],[26,-22],[59,-14],[11,-33],[24,-19],[-5,-63],[19,-2],[-7,-32],[12,-15]],[[7798,4998],[-21,-29],[-19,-72],[10,-3],[28,55],[16,8],[11,-16],[-21,-94],[5,-17],[-20,-56],[1,-42],[-18,-84],[0,-47],[11,-40],[-2,-61]],[[7779,4500],[-161,2],[-83,1]],[[7535,4503],[-15,1]],[[9548,4851],[14,21],[8,-16],[-19,-35],[-3,30]],[[9306,5037],[16,-12],[20,63],[25,30],[14,43],[-5,22],[11,55],[11,11],[6,55],[67,140],[18,-1],[4,-35],[12,-12],[64,30],[36,-59],[1,-260],[32,-13],[-3,-62],[11,-22],[17,3],[23,-65],[-25,-37],[-13,12],[-7,-21],[-42,-11],[-3,-27],[-14,-14],[-5,29],[-29,2],[-19,-37],[3,-47],[-18,61],[6,32],[-23,-22],[-8,-70],[-17,-24],[-10,9],[-13,-27],[-17,-2],[-12,-24],[-11,29],[-26,-29],[3,-26],[-34,-55],[
2-15,-36]],[[9337,4613],[-21,57],[1,34],[-11,333]],[[8166,5184],[1,-28],[-22,3],[8,31],[13,-6]],[[7715,5584],[-17,-31],[-40,-34],[0,25],[57,40]],[[8176,4355],[-77,-4],[-46,-2]],[[8053,4349],[0,11],[-186,1]],[[7867,4361],[22,34],[20,60],[15,87],[0,48],[-30,127],[10,30],[-8,57],[23,55],[0,60],[15,11],[3,33],[21,6],[18,45],[7,-23],[-8,-40],[8,-14],[13,28],[3,57],[20,28],[17,2],[-8,47],[28,32],[25,-22],[-8,25],[21,-5],[-9,-23],[21,-5],[12,-26],[53,-28],[11,-15],[7,-40],[-13,-13],[16,-57],[-7,-71],[-16,-12],[-6,-39],[-24,-14],[-4,-59],[21,-14],[17,19],[23,54],[29,15],[21,-28],[15,-123],[10,-50],[-9,-70],[-27,1],[-7,-48],[-22,-25],[-12,-65],[-18,-38]],[[7541,5282],[36,20],[21,26],[36,7],[24,26],[15,3],[30,42],[4,-11],[15,36],[34,22],[30,-10],[-47,-47],[-16,-37],[0,25],[-14,4],[12,-31],[-2,-36],[21,28],[40,-7],[15,-14],[26,-60],[34,5],[8,-16],[27,1],[40,43],[57,-1],[30,18],[23,1],[-10,-48],[20,-14],[17,9],[7,-16],[14,17],[28,3],[-3,-55],[23,-43],[-12,-9],[-46,5],[-11,12],[-8,-38],[-26,32],[-29,17],[-18,-3],[-11,-21],[-54,-6],[-11,-28],[-31,-26],[13,42],[-19,-5],[-20,-28],[-1,36],[-54,-154]],[[5112,4406],[187,1],[85,-1]],[[5384,4406],[0,-536],[0,-417]],[[5384,3453],[-1,-149],[-7,-34],[-39,22],[-15,-13],[5,-42],[-1,-68],[9,-62],[-5,-36]],[[5840,3452],[552,0]],[[6392,3452],[0,-71],[0,-24]],[[6392,3357],[-4,-4],[-2,-854],[-328,-1],[14,-44]],[[6072,2454],[-157,2],[1,-86],[-76,0]],[[5840,2370],[0,542],[0,540]],[[5840,3452],[0,644],[0,120]],[[5840,4216],[455,-1]],[[6295,4215],[184,0],[-1,-190]],[[6478,4025],[1,-125],[0,-448]],[[6479,3452],[-87,0]],[[5840,4216],[-183,-1],[0,191]],[[5657,4406],[0,149],[0,328]],[[5657,4883],[0,95],[638,0]],[[6295,4978],[1,-309],[-1,-72]],[[6295,4597],[1,-72],[-1,-310]],[[6478,4025],[615,0]],[[7093,4025],[40,-35],[-20,-55],[18,-28],[7,-32],[19,-18],[0,-405]],[[7157,3452],[-678,0]],[[6295,4597],[509,0],[37,-37],[22,12],[49,4],[16,-19],[38,-21],[21,-31]],[[6987,4505],[8,-4],[4,-55],[18,-42],[8,-37],[-2,-46],[14,-16],[6,-31],[3,-98]],[[7046,4176],[6,-33],[0,-4]],[[7052,4139],[13,-49],[28,-65]],[[7157,3452],[0,-24],[0,-71]],[[7157,3357],[16,-213],[-4,-331]],[[7169,2813],[-35,20],[
2-32,40],[-12,-18],[-23,16],[-15,-18],[-15,7],[-36,-37],[-29,41],[-19,-8],[-6,15],[-14,-18],[-4,-25],[-9,35],[-14,-16],[-29,30],[-25,-17],[-12,46],[-36,-12],[-43,26],[-22,4],[-6,34],[-38,-2],[-29,33],[-1,367],[-273,1]],[[7052,4139],[118,-5],[126,1],[125,8],[26,-46]],[[7447,4097],[-7,-39],[6,-59],[9,-30],[28,-49],[21,-25],[10,-62],[11,-23],[14,17],[28,-25],[-23,-102],[24,-54],[18,-12],[34,-48],[9,-49],[-7,-34],[13,-34],[24,-20]],[[7659,3449],[-2,-47],[-10,-32],[-10,14],[-6,-27]],[[7631,3357],[-5,-9],[-1,9]],[[7625,3357],[-7,10],[1,-10]],[[7619,3357],[2,-22],[-15,-27],[8,-20],[-10,-27]],[[7604,3261],[-60,-2],[28,58],[-8,40],[-407,0]],[[7779,4500],[-1,-40],[27,-105]],[[7805,4355],[-1,-452],[-12,-47],[11,-28],[3,-40],[-13,-46],[-10,-11],[-16,-57],[-8,-12],[-2,-56]],[[7757,3606],[-11,-32],[4,-31],[-31,-13],[-2,-64],[-38,28],[-13,-2],[-12,-28],[5,-15]],[[7447,4097],[5,42],[18,10],[20,56],[2,25],[-12,22],[8,46],[26,3],[33,30],[13,40],[3,58],[-21,24],[-22,51]],[[7535,4503],[115,-1],[129,-2]],[[7805,4355],[21,-20],[41,26]],[[8053,4349],[0,-77],[-2,-420]],[[8051,3852],[-5,-33],[6,-25],[-34,-19],[-24,6],[2,-35],[-18,-20],[-3,-24],[-14,-4],[-9,-43],[-13,-18],[-21,33],[-22,-23],[-1,-17],[-19,-5],[-7,17],[-31,-28],[-24,19],[-16,-17],[-26,14],[-15,-24]],[[9602,4855],[397,-208],[-86,-363],[-387,203],[76,368]],[[9107,4548],[1,154],[-16,9],[5,29],[-6,58],[10,35],[3,45],[-7,20],[2,81]],[[9099,4979],[59,1],[109,1]],[[9267,4981],[-12,-52],[8,-27],[-11,-29],[-34,-31],[-1,-27],[-14,-68],[-17,-48],[-1,-45],[-13,-80],[8,-28]],[[7210,2691],[-1,103],[-25,1],[-15,18]],[[7604,3261],[0,-31],[-20,-19],[2,-36],[-17,-30],[0,-50],[-18,-24]],[[7551,3071],[3,-15],[-18,-18],[-11,-36],[0,-41],[-34,-51],[5,-23],[-17,-8],[4,-34],[-16,-25],[9,-39],[-5,-31],[7,-32],[-6,-26]],[[7472,2692],[-17,0],[-245,-1]],[[7210,2691],[-1,-193],[21,-55],[-1,-24],[29,-103],[-6,-43],[-14,-48],[1,-93],[-7,-18]],[[7232,2114],[-12,-40],[5,-19],[-17,1],[-54,-44],[8,23],[-17,-9],[4,43],[-25,-15],[-4,-25],[27,-40],[-20,-21],[5,29],[-25,-62],[-40,-54],[-32,-15],[-5,-17],[-36,-39],[-1,-12],[-26,-28],[-29,-56],[13,46],[-13,15],[-18,-26],[17,-6],[-16,-42],[-17,2],[12,-29],[-14,-66],[-7,13],[-21,-26],[26,2],[-11,-51],[22,-169],[16,-30],[-26,-22],[-35,40],[-38,3],[-13,22],[-25,10],[-15,24],[-26,7],[-7,60],[-27,64],[-6,48],[2,50],[-18,17],[-34,95],[-19,26],[-11,57],[-20,63],[-4,37],[-32,52],[6,17],[-18,7],[-24,50],[-64,5],[-19,18],[-8,-23],[-25,-6],[-20,-89],[3,-9],[-26,-47],[-14,3],[-45,53],[-24,12],[-19,35],[-24,27],[-14,53],[0,47],[-30,93],[-32,33],[-58,104],[-15,10],[-18,51],[-13,10]],[[6923,1669],[-18,-85],[0,-53],[11,-88],[-13,69],[3,98],[17,59]],[[9374,3679],[367,-192],[-72,-368],[-359,187],[64,373]],[[9302,4313],[-7,-2],[1,33]],[[9292,4351],[0,-43],[-18,-3],[-6,-20],[-32,-10]],[[9236,4275],[5,40],[-1,94]],[[7814,2209],[-21,-44],[-60,-3],[18,7],[-7,18],[-20,4]],[[7724,2191],[-7,286],[36,573],[-8,20]],[[7745,3070],[-1,3],[236,-5]],[[7980,3068],[37,-390],[11,-62],[16,-65],[-13,-27],[-9,-60],[9,-55],[-6,-50],[10,-51]],[[8035,2308],[-236,-1],[-4,-24],[21,-43],[-2,-31]],[[7724,2191],[-41,4],[-43,-21],[-18,-21]],[[7622,2153],[-29,94],[10,61],[-176,-1],[8,11],[-7,41],[10,2],[1,42],[9,14],[9,54],[22,30],[16,62],[-16,21],[-6,61],[8,29],[-9,18]],[[7551,3071],[154,-1],[40,0]],[[8865,3366],[1,-10],[-11,10]],[[8855,3366],[5,0]],[[8860,3366],[0,-1],[2,1]],[[8862,3366],[1,0],[2,0]],[[8870,3366],[6,-51],[28,-108],[-22,66],[-14,93]],[[8868,3366],[1,1],[1,-1]],[[8340,3378],[40,-8],[103,-6],[371,2]],[[8854,3366],[23,-89],[-38,42],[13,-25],[-43,-30],[-15,8],[-4,-21],[62,7],[2,-63],[4,45],[12,17],[12,-28],[-5,-49],[-10,12],[-16,-48],[-19,-7],[-27,29],[-3,-20],[-36,19],[45,-35],[-16,-27],[11,-9],[-26,-25],[-22,32],[13,-34],[16,-13],[21,4],[7,27],[11,-34],[-27,-39],[-46,-2],[-48,-58],[-15,-32],[-13,-69],[-26,15],[-29,-8]],[[8622,2858],[-99,174],[-102,5],[-2,26],[-25,37],[-111,10],[-76,-39]],[[8207,3071],[-34,-1],[-76,-2]],[[8097,3068],[5,51],[16,1],[7,32],[22,25],[25,3],[39,42],[15,29],[26,21],[4,-16],[35,36],[10,-12],[15,37],[16,18],[8,43]],[[8868,3366],[-8,31],[0,-31]],[[8855,3366],[-2,8],[1,-8]],[[8340,3378],[-26,-3],[-157,2]],[[8157,3377],[48,28],[23,27],[23,52],[26,21],[35,50]],[[8312,3555],[13,-48],[25,-14],[19,23],[11,-17],[25,10],[9,25],[11,-9],[40,24],[1,34],[45,113],[14,60],[31,-32],[28,80],[10,-11],[27,39],[15,34],[9,54],[44,-59],[9,36]],[[8698,3897],[25,-17],[-4,-17],[36,-42]],[[8755,3821],[2,-5],[3,-1]],[[8760,3815],[1,-36],[-16,-11],[-11,-47],[9,-15],[19,13],[14,-42],[25,-5],[7,-24],[26,-23],[-6,-54],[-16,7],[-13,30],[-27,31],[37,-69],[26,-32],[-19,-15],[-4,-21]],[[8812,3502],[8,-5],[10,-42],[-12,-8],[-21,50],[-33,11],[27,-27],[22,-46],[19,10],[26,-9],[12,-70]],[[8812,3502],[-2,1],[-24,52],[15,-47],[9,-5],[1,-4],[1,3]],[[8862,3366],[3,5],[0,-5]],[[8926,3647],[-8,-25],[6,25]],[[8924,3647],[2,0]],[[8889,3637],[2,5],[23,4]],[[8914,3646],[-11,-35],[-36,-91],[6,-30],[
2-11,-21],[-6,43],[7,50],[26,75]],[[7052,4139],[-6,37]],[[6987,4505],[-14,45],[16,70],[-10,20],[-2,52],[12,1]],[[6989,4693],[327,0],[149,0]],[[7514,4531],[7,-23],[-1,-4]],[[9125,2100],[333,-170],[-59,-366],[-325,165],[51,371]],[[8924,3647],[6,16],[-4,-16]],[[8944,3730],[-3,-22],[2,21]],[[8943,3729],[1,1]],[[8889,3637],[-19,-7],[7,43],[-24,29],[-1,-13],[-24,44],[28,18],[-9,23],[-18,15],[18,22],[-13,13],[-2,39],[22,46],[9,40],[-25,-45],[-11,8],[-5,-31],[-17,3],[14,-33],[-11,-38],[2,-69],[8,-39],[-19,29],[29,-64],[-1,-19],[-22,30],[-25,11],[-18,43],[-15,-22],[-6,24],[22,41],[1,19]],[[8764,3797],[10,16],[-19,8]],[[8698,3897],[-10,53],[-26,18],[-27,-15],[-4,-17],[-19,2],[-9,17],[-17,-35],[-9,6],[-39,-52],[1,97]],[[8539,3971],[159,0],[178,0]],[[8876,3971],[9,-240],[55,-1]],[[8940,3730],[-6,-41],[-8,-3],[-12,-40]],[[9182,2494],[341,-175],[-62,-367],[-333,170],[54,372]],[[8943,3729],[-3,2],[0,-1]],[[8876,3971],[17,23],[16,-6]],[[8909,3988],[-16,-37],[1,-29],[15,-28],[3,-49],[21,-51],[7,1],[4,-65]],[[8946,4028],[-11,-22],[-26,-18]],[[8539,3971],[-95,1],[0,176]],[[8444,4148],[0,255]],[[8444,4403],[13,8],[56,46]],[[8513,4457],[0,-51],[404,0],[24,-33],[1,-40],[34,-50]],[[8976,4283],[-41,-71],[8,-17],[-12,-26],[0,-35],[9,-3],[33,-75],[-27,-28]],[[9243,2889],[349,-181],[-65,-368],[-341,176],[57,373]],[[8976,4283],[36,-35]],[[9012,4248],[36,-34]],[[9048,4214],[-11,-53],[-17,-15],[-6,-26],[26,-18],[2,-15],[-12,-114],[-21,-32],[-7,-39],[-22,-30],[-20,-49],[-9,-2],[7,41],[-23,7],[-36,56],[-2,27],[11,30],[27,19],[11,27]],[[8513,4457],[56,60],[26,51],[-18,49],[1,33],[33,16],[53,6],[33,-9],[19,-17],[16,8],[35,-3],[25,11],[27,37],[21,10],[-3,52],[11,28],[-17,-6],[-7,30],[19,31],[27,16],[15,39],[38,53],[37,29],[16,-3],[123,1]],[[9087,4417],[-6,-145],[5,-15],[-21,-22],[7,-19]],[[9072,4216],[-12,-32],[27,21],[23,-7],[12,11],[45,5],[24,28],[14,-25],[5,16],[1,-14],[24,10],[-50,-40],[-29,-10],[-29,-26],[-49,-19],[-37,-1],[-24,-13],[5,24],[12,-2],[13,31],[-8,-4],[9,45]],[[9012,4248],[-27,26],[-9,9]],[[5110,5
2740],[90,1]],[[5200,5741],[0,-189],[31,-58],[0,-51],[34,-31],[39,-68],[1,-14],[31,-38],[19,7],[1,-28],[-10,-50],[-1,-52],[7,-19],[-14,-22],[0,-40],[19,-17],[34,40],[16,-21],[7,-53],[25,-58],[-4,-13],[14,-27],[13,2],[13,-29],[5,-36],[13,-16],[15,24],[29,-7],[12,19],[39,-7],[28,9],[4,27],[13,3],[24,-45]],[[5657,4406],[-120,0],[-153,0]],[[6295,4978],[2,1],[0,179]],[[6297,5158],[577,0],[106,1]],[[6980,5159],[-7,-35],[-21,-31],[16,-37],[22,-21],[-1,-342]],[[9307,3284],[357,-186],[-68,-368],[-350,181],[61,373]],[[9236,4275],[-5,6],[-55,-16],[-35,-3],[-27,-13],[-42,-33]],[[9521,4465],[387,-203],[-81,-365],[-377,197],[71,371]],[[9337,4613],[3,-4],[-10,-35]],[[9267,4981],[16,53],[23,3]],[[7625,3357],[-6,0]],[[8051,3852],[35,1],[11,-14],[12,-42],[30,-8],[14,-24],[16,13],[21,-20],[38,27],[5,-30],[22,-32]],[[8255,3723],[-4,-50],[31,-89],[30,-29]],[[8157,3377],[-6,-4],[-127,7],[-28,-1],[-103,8],[-117,-3],[-21,9],[3,-36],[-127,0]],[[8255,3723],[0,0]],[[8176,4355],[52,-37],[-7,-9],[42,-18],[42,22],[34,2],[30,39],[75,49]],[[8444,4148],[-14,-11],[6,-58],[-24,-98],[0,-27],[-32,-44],[-23,0],[-19,-25],[-13,-37],[6,-26],[-13,-12],[-14,25],[-14,-42],[3,-33],[-14,-32],[-24,-5]],[[8097,3068],[-50,0],[-67,0]],[[9071,1707],[325,-164],[-56,-364],[-318,159],[49,369]],[[8764,3797],[0,9],[-4,9]],[[7622,2153],[-41,14],[-22,23],[-20,-46],[9,-15],[27,-5],[15,22],[22,-2],[-16,-38],[17,-12],[15,37],[12,-30],[-36,-53],[16,-44],[32,-11],[15,-26],[-11,-32],[-21,8],[-10,27],[-30,16],[6,15],[-30,22],[2,-56],[-15,-25],[-6,29],[-19,14],[-13,-32],[-22,-2],[-41,31],[6,38],[-25,8],[-13,42],[-16,-7],[1,22],[-26,-19],[2,-22],[17,6],[19,-13],[-11,-19],[-27,20],[-13,-10],[-37,13],[-47,33],[-24,-1],[-34,-13],[3,54]],[[8035,2308],[12,-54],[240,-29],[5,-39],[12,2],[1,69],[12,16],[38,-20]],[[8355,2253],[5,-2],[4,-77],[15,-108],[28,-127],[37,-114],[-6,-13],[5,-73],[16,-61],[26,-139],[2,-79],[-8,-126],[-19,-77],[-1,-64],[-20,-40],[12,43],[-6,14],[-18,-20],[-13,8],[-22,-12],[-8,20],[3,32],[-12,59],[-31,46],[-11,-3],[-10,92],[-23,2],[4,85],[-15,19],[6,-31],[-15,8],[-31,111],[24,70],[-2,23],[-17,-7],[-3,-34],[-18,20],[4,68],[11,55],[3,81],[-15,57],[-21,0],[-17,45],[-17,23],[-25,75],[-32,35],[-33,-14],[3,-25],[-14,3],[-7,-23],[-35,-35],[-35,12],[5,23],[-10,26],[-24,36],[-36,35],[-41,19],[-93,-24],[17,29],[-7,10]],[[8207,3071],[-22,-56],[29,-41],[17,-6],[11,-53],[15,-41],[30,-42],[4,-22],[24,-30],[1,-22],[15,-39],[22,-22],[10,-79],[19,-27],[11,-76],[17,-11]],[[8410,2504],[6,-6],[-46,-87],[6,-51],[-17,-16],[3,-51],[-7,-40]],[[8622,2858],[-33,-47],[-18,-42],[-5,-45],[-17,-30],[-13,3],[-7,-24],[-37,-57],[-31,-25],[-31,5],[22,-20],[-42,-72]],[[6919,5741],[187,-1],[1,72],[31,-14],[11,-93],[10,-15],[33,-15],[33,-2],[11,-23],[24,5],[21,16],[26,-2],[30,-15],[24,-58],[7,14],[24,5],[32,-45],[24,-12],[47,37],[12,-24],[55,2],[19,-20],[31,-2],[-41,-36],[-41,-19],[-44,-42],[-45,-71],[-55,-67]],[[6980,5159],[-4,73],[-18,60],[4,53],[-7,16],[-2,92],[-25,131],[-3,69],[5,22],[-11,66]],[[5200,5741],[320,-1],[776,0]],[[6296,5740],[0,-545],[1,-37]],[[6296,5740],[168,0],[455,1]],[[5840,2370],[-179,0],[-46,28],[-303,195],[10,41]],[[5384,3453],[299,0],[157,-1]],[[1589,235],[2,-3],[2,1],[3,0],[10,-7],[8,-8],[15,-19],[5,-10],[2,-7],[0,-17],[0,-8],[3,0],[4,3],[2,-3],[1,-4],[0,-9],[1,-5],[2,-4],[4,-9],[5,-4],[2,-3],[1,-4],[0,-6],[-5,-12],[-4,-3],[-6,-11],[-4,-3],[0,-2],[-3,-1],[-3,-5],[-10,-5],[-4,2],[-2,0],[-2,-2],[-5,-6],[-2,-4],[-3,-2],[-4,-5],[-4,-5],[-2,-1],[-4,-7],[0,-3],[0,-7],[-5,-10],[-1,-8],[-2,-3],[-3,-6],[-1,1],[0,4],[-2,3],[-4,4],[-6,8],[-6,3],[-1,7],[-1,1],[-1,5],[-1,8],[1,10],[2,28],[0,4],[-1,5],[-3,19],[-2,6],[0,4],[-1,4],[-1,10],[-2,5],[-1,2],[-2,4],[-3,12],[2,10],[5,8],[1,4],[1,2],[4,3],[2,8],[3,7],[2,5],[1,0],[1,9],[-1,3],[-1,3],[-3,10],[-2,8],[0,13],[2,7],[1,2],[3,0],[9,-4],[2,-9],[4,-3],[2,-2],[2,-4],[2,-2]],[[1504,310],[-1,-3],[-2,0],[-3,0],[-4,-1],[-3,-1],[-2,4],[1,3],[2,3],[5,6],[3,2],[2,0],[2,-5],[-1,-6],[1,-2]],[[1470,349],[-5,-1],[-2,6],[0,4],[0,8],[-1,4],[-1,2],[-4,3],[-1,4],[1,4],[2,2],[4,1],[8,-3],[4,-7],[3,-7],[2,-5],[-1,-4],[-2,-6],[-4,-3],[-3,-2]],[[1499,405],[1,-2],[3,-3],[1,-2],[1,-1],[0,-5],[1,-2],[3,-9],[2,0],[1,3],[1,0],[5,1],[3,4],[2,1],[3,0],[5,-2],[1,-2],[1,-2],[2,-5],[3,-4],[0,-2],[2,1],[1,-2],[1,-4],[3,-1],[3,-3],[5,-3],[2,-8],[-1,-7],[-1,-6],[-3,-2],[-1,-5],[-3,0],[-5,-5],[-5,0],[-2,0],[-9,-8],[-4,2],[-1,-1],[-4,0],[-3,4],[-1,5],[0,1],[1,4],[-1,12],[-1,4],[0,4],[0,3],[-2,3],[-3,-2],[-1,-2],[-1,-1],[-2,4],[-2,0],[-2,3],[-2,0],[-3,7],[-3,7],[0,4],[-1,2],[1,10],[1,4],[1,3],[1,0],[2,5],[2,-1],[1,2],[1,-1]],[[1439,442],[4,-1],[1,0],[0,-2],[2,0],[13,-4],[4,-1],[1,6],[1,0],[1,-3],[0,-4],[5,-2],[5,0],[2,1],[2,1],[2,0],[3,-1],[1,-2],[2,-1],[-1,-6],[-3,-5],[-3,-4],[-4,-3],[-3,-1],[-4,0],[-4,2],[-7,3],[-4,3],[-10,-1],[-4,-1],[-4,0],[-2,2],[-1,2],[0,4],[2,5],[1,1],[2,4],[0,4],[-1,4],[1,0]],[[1380,514],[1,-4],[1,-1],[0,-3],[2,0],[1,-5],[0,-4],[-1,-1],[1,-9],[2,-1],[1,-5],[2,-1],[1,-2],[1,4],[-1,2],[0,2],[1,1],[4,-1],[-2,-3],[0,-6],[2,-2],[1,-4],[0,-2],[1,-5],[4,-5],[1,-1],[-5,-8],[-1,-1],[0,3],[-1,1],[-4,-1],[-3,-4],[-2,1],[-1,3],[-5,4],[-1,5],[0,2],[-2,-3],[1,-2],[-4,-1],[1,2],[-2,1],[-1,6],[3,3],[1,1],[-3,4],[-1,-4],[-2,4],[1,-5],[-1,-1],[-3,5],[1,-4],[4,-6],[-1,-3],[-2,-1],[-8,-3],[-2,2],[-1,6],[-1,5],[-2,6],[-2,1],[0,6],[-1,2],[-2,4],[-1,4],[-1,9],[0,2],[-4,6],[4,2],[4,0],[6,0],[1,4],[2,2],[2,4],[0,1],[2,6],[3,5],[3,2],[2,-1],[2,-5],[2,-6],[0,-4],[2,-5]],[[1170,549],[-2,-1],[-2,3],[-1,7],[0,4],[1,4],[4,7],[3,5],[3,4],[1,5],[0,3],[2,2],[2,0],[1,-2],[1,-3],[-2,-5],[-1,-4],[1,-5],[-1,-3],[-3,-3],[-2,-1],[-3,-5],[-1,-3],[-1,-9]],[[1244,634],[1,-1],[1,0],[2,-2],[1,-3],[2,-2],[1,-7],[0,-1],[0,-7],[-1,-3],[-1,-7],[-1,-1],[-1,-6],[1,-7],[0,-5],[-3,-1],[1,-3],[-1,-1],[-2,-2],[-1,-3],[-3,-5],[-1,-2],[-4,3],[-4,0],[-5,2],[-1,2],[-1,-2],[-1,1],[-2,3],[-1,5],[-1,0],[-2,3],[-1,0],[-3,2],[-3,2],[-1,5],[-2,3],[0,9],[1,1],[4,8],[0,5],[2,3],[4,3],[3,3],[1,3],[2,1],[1,2],[4,2],[1,-2],[3,-2],[0,3],[2,1],[4,0],[2,-1],[2,2],[1,-1]],[[1186,9864],[-6,8],[38,31],[62,-6],[86,12],[75,43],[38,47],[109,-24],[1,-23],[-42,-18],[14,-29],[30,5],[34,53],[55,-24],[-2,-31],[47,-9],[19,22],[55,4],[100,-21],[-39,-48],[82,-1],[-22,-21],[73,-1],[117,14],[80,-5],[59,-34],[20,8],[32,-22],[63,-14],[112,3],[55,-35],[63,-2],[50,19],[69,7],[63,-21],[31,-31],[42,-6],[36,-33],[36,2],[2,-1781],[90,-25],[34,27],[49,2],[-8,-52],[45,-35],[9,-26],[89,-98],[18,-62],[53,46],[22,0],[24,84],[79,39],[41,-49],[-6,-24],[63,-70],[16,-40],[32,-20],[45,-62],[104,-232],[19,
2-32],[-6,-31],[21,-14],[6,-39],[20,2],[134,-94],[8,-38],[-13,-30],[17,-87],[-34,-73],[-29,-26],[-22,6],[-12,76],[17,27],[-3,71],[-28,50],[-49,-17],[-21,-74],[-27,49],[19,9],[16,79],[-55,74],[-4,29],[-63,80],[-30,1],[19,44],[-25,31],[-7,41],[-34,53],[4,66],[-20,-39],[-11,8],[9,-11],[-33,10],[-4,14],[22,-7],[-32,22],[-54,167],[-1,-65],[30,-110],[-8,-26],[-30,31],[-42,-1],[7,30],[-23,65],[-10,-24],[-75,62],[2,-35],[38,-7],[47,-64],[-2,-35],[-45,4],[-9,-24],[-90,77],[-55,84],[-84,46],[-60,43],[36,34],[-15,33],[-65,-36],[-99,32],[15,28],[-43,-10],[-98,27],[-103,-21],[-29,30],[-63,29],[17,70],[-25,-29],[-8,-40],[-41,27],[-35,1],[30,43],[-59,-5],[-40,17],[18,14],[-22,27],[-48,-12],[-39,11],[-40,-18],[-2,49],[-24,-93],[18,28],[24,-53],[-23,-34],[-20,-68],[-70,9],[-41,-23],[-9,-43],[-15,10],[-45,-53],[16,51],[-42,-75],[-25,-16],[-41,6],[-37,-18],[-16,28],[48,31],[44,57],[-44,-27],[-38,30],[38,75],[18,67],[-14,34],[32,14],[56,46],[38,-22],[19,11],[65,-16],[-87,52],[8,16],[-42,1],[-8,24],[-57,-60],[-38,-13],[-71,-99],[10,-15],[-34,-32],[5,-22],[-46,-78],[-59,-13],[-2,-33],[-37,-16],[-4,-65],[43,7],[38,-45],[-72,-66],[8,-21],[-33,-25],[-20,-44],[-43,-1],[-32,-56],[-20,14],[-12,-47],[-25,6],[-48,-53],[18,3],[-18,-64],[-23,10],[-35,-50],[-21,18],[-4,-43],[-28,8],[-69,-65],[29,-12],[-43,-59],[-75,-38],[-31,16],[-77,-75],[-22,10],[-33,-31],[-21,6],[11,37],[-21,6],[-32,-91],[-31,-28],[-25,61],[-19,-70],[-23,30],[-26,-54],[0,54],[71,70],[66,80],[87,22],[8,-21],[50,-10],[-31,29],[19,54],[57,59],[73,50],[28,-14],[-3,49],[33,55],[58,49],[16,170],[40,50],[-3,32],[-97,-52],[-37,39],[9,48],[-41,-57],[13,-48],[-26,-19],[-49,93],[-29,-27],[-29,15],[-12,42],[-43,-41],[-42,-13],[-6,-25],[-76,-2],[43,21],[-8,50],[-23,49],[32,43],[-56,116],[-8,53],[-10,-74],[-101,-37],[-44,6],[-1,33],[-50,55],[-30,9],[-40,41],[70,51],[64,-8],[29,-35],[20,32],[-48,19],[-57,-2],[-51,14],[17,17],[-38,38],[0,-28],[-50,63],[13,23],[-39,15],[37,16],[-28,27],[45,4],[-10,52],[53,76],[23,4],[0,57],[26,57],[41,25],[35,-9],[38,-37],[23,5],[45,43],[29,44],[11,-14],[90,13],[36,47],[-17,95],[-42,35],[58,41],[-35,55],[-23,-31],[-60,-9],[-47,-41],[-48,-18],[-37,29],[-79,1],[-59,-23],[-104,26],[-27,27],[8,33],[-51,48],[38,-3],[37,29],[-116,22],[-61,36],[18,30],[54,30],[21,-5],[28,36],[124,69],[79,28],[71,5],[-16,-76],[22,-25],[137,1],[25,-19],[30,53],[52,-5],[-46,34],[-40,-15],[7,28],[-69,80],[27,11],[30,-36],[-7,-19],[44,-42],[36,17],[39,-31],[47,6],[4,24],[-61,26],[-55,-25],[-35,32],[3,67],[-55,-12],[-113,20],[-12,45],[-31,54],[-118,85],[-46,15],[-55,41],[27,40],[0,59],[52,-3],[122,12],[66,38],[46,52],[-5,50],[16,37],[40,50],[18,-10],[43,53],[15,-16],[79,17],[63,51],[14,-1]],[[1186,9864],[5,-5],[-13,-50],[28,35],[-15,15],[1,4],[-6,1]],[[58,6370],[-24,-7],[18,28],[13,-11],[-7,-10]],[[278,6477],[22,5],[-2,-20],[-10,9],[-10,6]],[[416,6502],[-12,8],[-41,-33],[39,81],[16,-6],[4,41],[35,20],[14,-34],[-40,-29],[-15,-48]],[[674,6724],[-24,-22],[-22,16],[14,20],[32,-14]],[[932,6772],[-3,20],[21,-10],[9,-14],[-27,4]],[[845,6899],[17,-2],[18,-55],[-23,-29],[-46,1],[-25,-34],[-41,-2],[-10,31],[23,16],[14,39],[30,3],[43,32]],[[1237,6898],[3,-7],[-21,8],[10,14],[8,-15]],[[3675,6858],[-8,-29],[-33,76],[8,29],[17,-58],[16,-18]],[[3813,6900],[-8,-41],[-27,31],[9,50],[26,-40]],[[1195,6928],[2,-22],[-32,-33],[23,36],[7,19]],[[1157,6963],[-20,-10],[1,-42],[-25,-2],[-3,42],[47,12]],[[3761,6966],[16,-23],[-10,-28],[-10,42],[4,9]],[[3598,6980],[3,-4],[16,6],[-20,-49],[1,47]],[[3625,7042],[-17,-20],[-15,10],[3,13],[29,-3]],[[3816,7067],[23,-47],[-1,-60],[-20,-38],[-57,53],[15,16],[-2,56],[42,20]],[[3576,7058],[14,32],[36,15],[0,-25],[-50,-22]],[[3701,7114],[35,-16],[-20,-36],[-37,37],[17,45],[5,-30]],[[3686,7161],[-1,-30],[-38,12],[13,21],[26,-3]],[[3730,7145],[20,-30],[-12,-15],[-27,30],[1,42],[18,-27]],[[1693,7193],[-1,-16],[-23,-23],[3,25],[21,14]],[[1732,7183],[6,-9],[-33,2],[4,16],[23,-9]],[[3663,7230],[32,-38],[-23,-19],[-14,3],[5,54]],[[1811,7301],[20,0],[-36,-33],[-5,15],[21,18]],[[3418,7314],[-5,-45],[-20,-3],[12,35],[13,13]],[[3349,7461],[-12,-31],[-9,32],[7,16],[14,-17]],[[1808,7478],[28,-20],[-12,0],[-36,13],[20,7]],[[1846,7514],[13,37
2],[25,-25],[23,9],[14,-30],[-13,-17],[-63,-31],[-34,23],[6,32],[29,2]],[[1874,7551],[-17,13],[27,17],[1,-17],[-11,-13]],[[1112,7583],[-23,-20],[1,29],[34,22],[-12,-31]],[[2295,7855],[-3,-15],[-23,-10],[17,41],[9,-16]],[[2364,7909],[17,-9],[-50,-71],[-40,-27],[19,39],[46,46],[8,22]],[[630,7916],[38,-17],[-3,-45],[16,-26],[-54,-20],[-44,5],[-51,32],[-23,32],[52,4],[7,16],[62,19]],[[2416,7931],[37,-6],[-42,-38],[9,23],[-4,21]],[[2311,7937],[8,-12],[-12,-35],[-11,22],[15,25]],[[43,7916],[-2,-13],[-40,30],[-1,18],[43,-35]],[[2458,7933],[-18,-5],[-1,12],[49,13],[-30,-20]],[[622,6689],[-35,-49],[45,25],[-17,-28],[-108,-71],[-35,-2],[62,32],[13,93],[38,5],[-1,-30],[22,33],[16,-8]],[[3633,6938],[23,70],[-37,-1],[14,49],[-7,53],[-25,4],[-5,31],[41,-3],[10,-53],[29,-11],[59,-137],[13,-94],[-18,-17],[-32,78],[-34,-13],[7,45],[-38,-1]],[[3415,7338],[20,35],[43,-42],[28,-114],[-5,-106],[-47,96],[6,30],[-23,-1],[19,39],[-19,10],[3,30],[-25,23]],[[1841,7449],[-8,-34],[40,37],[12,-32],[-6,-35],[26,2],[-18,-35],[-58,15],[32,-21],[-3,-20],[-44,3],[-49,-58],[-33,-63],[-8,19],[29,70],[-28,-5],[-11,-42],[-27,16],[0,36],[-23,18],[5,30],[46,47],[20,-8],[11,-44],[7,49],[-11,29],[25,15],[10,-36],[6,53],[37,-27],[-19,33],[40,-12]],[[3397,7412],[23,-58],[-28,-10],[-9,43],[-42,41],[9,29],[46,54],[82,-47],[-2,-41],[-41,-1],[15,-19],[29,10],[8,-53],[-23,-2],[-67,54]],[[3520,7327],[-17,56],[-15,97],[-15,53],[25,-41],[45,-9],[29,-63],[-8,-20],[-24,71],[2,-42],[25,-42],[0,-59],[-62,-58],[0,42],[15,15]],[[168,8529],[21,-7],[27,22],[32,1],[20,-40],[47,-22],[78,-11],[-9,-26],[-45,4],[-41,-44],[-12,34],[-75,49],[-39,7],[-28,-21],[-28,10],[-10,28],[10,52],[18,-33],[34,-3]],[[3586,7222],[-22,-77],[7,-25],[-28,-30],[-7,56],[22,23],[-24,17],[-9,53],[25,4],[23,-31],[13,12],[-1,7],[-24,50],[22,2],[72,-27],[-1,-63],[-33,44],[24,-57],[-5,-15],[-48,1],[-6,56]]],"bbox":[-173.0093523315348,18.90630573265573,-63.48999976734578,71.31215663572162],"transform":{"scale":[0.010953030559474851,0.005241109201226711],"translate":[-173.0093523315348,18.90630573265573]},"title":"United States of America, small","version":"2.2.0","copyright":"Copyright (c) 2024 Highsoft AS, Based on data from Natural Earth","copyrightShort":"Natural Earth","copyrightUrl":"http://www.naturalearthdata.com"} 3},{}],2:[function(require,module,exports){ 4module.exports={"type":"Topology","objects":{"default":{"type":"GeometryCollection","geometries":[{"type":"MultiPolygon","arcs":[[[0]],[[1,2,3,4,5,6,7,8]]],"id":"US.MA","properties":{"hc-group":"admin1","hc-key":"us-ma","hc-a2":"MA","labelrank":"0","hasc":"US.MA","woe-id":"2347580","state-fips":"25","fips":"US25","postal-code":"MA","name":"Massachusetts","country":"United States of America","region":"Northeast","longitude":"-71.99930000000001","woe-name":"Massachusetts","latitude":"42.3739","
4woe-label":"Massachusetts, US, United States","type":"State","hc-middle-lon":-72.055,"hc-middle-lat":42.398}},{"type":"MultiPolygon","arcs":[[[9]],[[10,11,12]]],"id":"US.WA","properties":{"hc-group":"admin1","hc-key":"us-wa","hc-a2":"WA","labelrank":"0","hasc":"US.WA","woe-id":"2347606","state-fips":"53","fips":"US53","postal-code":"WA","name":"Washington","country":"United States of America","region":"West","longitude":"-120.361","woe-name":"Washington","latitude":"47.4865","woe-label":"Washington, US, United States","type":"State","hc-middle-lon":-120.01,"hc-middle-lat":47.403}},{"type":"Polygon","arcs":[[13,14,15,16]],"id":"US.CA","properties":{"hc-group":"admin1","hc-key":"us-ca","hc-a2":"CA","labelrank":"0","hasc":"US.CA","woe-id":"2347563","state-fips":"6","fips":"US06","postal-code":"CA","name":"California","country":"United States of America","region":"West","longitude":"-119.591","woe-name":"California","latitude":"36.7496","woe-label":"California, US, United States","type":"State","hc-middle-lon":-118.415,"hc-middle-lat":35.686}},{"type":"Polygon","arcs":[[-14,17,-12,18,19]],"id":"US.OR","properties":{"hc-group":"admin1","hc-key":"us-or","hc-a2":"OR","labelrank":"0","hasc":"US.OR","woe-id":"2347596","state-fips":"41","fips":"US41","postal-code":"OR","name":"Oregon","country":"United States of America","region":"West","longitude":"-120.386","woe-name":"Oregon","latitude":"43.8333","woe-label":"Oregon, US, United States","type":"State","hc-middle-lon":-120.81,"hc-middle-lat":43.957}},{"type":"MultiPolygon","arcs":[[[20]],[[21,22,23,24,25,26,27,28]]],"id":"US.WI","properties":{"hc-group":"admin1","hc-key":"us-wi","hc-a2":"WI","labelrank":"0","hasc":"US.WI","woe-id":"2347608","state-fips":"55","fips":"US55","postal-code":"WI","name":"Wisconsin","country":"United States of America","region":"Midwest","longitude":"-89.5831","woe-name":"Wisconsin","latitude":"44.3709","woe-label":"Wisconsin, US, United States","type":"State","hc-middle-lon":-90.479,"hc-middle-lat":45.253}},{"type":"MultiPolygon","arcs":[[[29]],[[30,31]]],"id":"US.ME","properties":{"hc-group":"admin1","hc-key":"us-me","hc-a2":"ME","labelrank":"0","hasc":"US.ME","woe-id":"2347578","state-fips":"23","fips":"US23","postal-code":"ME","name":"Maine","country":"United States of America","region":"Northeast","longitude":"-69.1973","woe-name":"Maine","latitude":"45.148","woe-label":"Maine, US, United States","type":"State","hc-middle-lon":-69.074,"hc-middle-lat":45.611}},{"type":"MultiPolygon","arcs":[[[32]],[[33]],[[34,35,36]],[[-26,37]]],"id":"US.MI","properties":{"hc-group":"admin1","hc-key":"us-mi","hc-a2":"MI","labelrank":"0","hasc":"US.MI","woe-id":"2347581","state-fips":"26","fips":"US26","postal-code":"MI","name":"Michigan","country":"United States of America","region":"Midwest","longitude":"-84.9479","woe-name":"Michigan","latitude":"43.4343","woe-label":"Michigan, US, United States","type":"State","hc-middle-lon":-84.717,"hc-middle-lat":43.677}},{"type":"Polygon","arcs":[[-20,38,39,40,-15]],"id":"US.NV","properties":{"hc-group":"admin1","hc-key":"us-nv","hc-a2":"NV","labelrank":"0","hasc":"US.NV","woe-id":"2347587","state-fips":"32","fips":"US32","postal-code":"NV","name":"Nevada","country":"United States of America","region":"West","longitude":"-117.02","woe-name":"Nevada","latitude":"39.4299","woe-label":"Nevada, US, United States","type":"State","hc-middle-lon":-117.046,"hc-middle-lat":39.518}},{"type":"Polygon","arcs":[[41,42,43,44,45]],"id":"US.NM","properties":{"hc-group":"admin1","hc-key":"us-nm","hc-a2":"NM","labelrank":"0","hasc":"US.NM","woe-id":"2347590","state-fips":"35","fips":"US35","postal-code":"NM","name":"New Mexico","country":"United States of America","region":"West","longitude":"-106.024","woe-name":"New Mexico","latitude":"34.5002","woe-label":"New Mexico, US, United States","type":"State","hc-middle-lon":-106.098,"hc-middle-lat":34.421}},{"type":"Polygon","arcs":[[-42,46,47,48,49,50]],"id":"US.CO","properties":{"hc-group":"admin1","hc-key":"us-co","hc-a2":"CO","labelrank":"0","hasc":"US.CO","woe-id":"2347564","state-fips":"8","fips":"US08","postal-code":"CO","name":"Colorado","country":"United States of America","region":"West","longitude":"-105.543","woe-name":"Colorado","latitude":"38.9998","woe-label":"Colorado, US, United States","type":"State","hc-middle-lon":-105.57,"hc-middle-lat":39.042}},{"type":"Polygon","arcs":[[-48,51,52,53,54,55]],"id":"US.WY","properties":{"hc-group":"admin1","hc-key":"us-wy","hc-a2":"WY","labelrank":"0","hasc":"US.WY","woe-id":"2347609","state-fips":"56","fips":"US56","postal-code":"WY","name":"Wyoming","country":"United States of America","region":"West","longitude":"-107.552","woe-name":"Wyoming","latitude":"42.9999","woe-label":"Wyoming, US, United States","type":"State","hc-middle-lon":-107.579,"hc-middle-lat":43.039}},{"type":"Polygon","arcs":[[56,57,58,-50]],"id":"US.KS","properties":{"hc-group":"admin1","hc-key":"us-ks","hc-a2":"KS","labelrank":"0","hasc":"US.KS","woe-id":"2347575","state-fips":"20","fips":"US20","postal-code":"KS","name":"Kansas","country":"United States of America","region":"Midwest","longitude":"-98.3309","woe-name":"Kansas","latitude":"38.5","woe-label":"Kansas, US, United States","type":"State","hc-middle-lon":-99.894,"hc-middle-lat":38.549}},{"type":"Polygon","arcs":[[-57,-49,-56,59,60,61,62]],"id":"US.NE","properties":{"hc-group":"admin1","hc-key":"us-ne","hc-a2":"NE","labelrank":"0","hasc":"US.NE","woe-id":"2347586","state-fips":"31","fips":"US31","postal-code":"NE","name":"Nebraska","country":"United States of America","region":"Midwest","longitude":"-99.68550000000001","woe-name":"Nebraska","latitude":"41.5002","woe-label":"Nebraska, US, United States","type":"State","hc-middle-lon":-100.323,"hc-middle-lat":41.555}},{"type":"Polygon","arcs":[[-59,63,64,65,-43,-51]],"id":"US.OK","properties":{"hc-group":"admin1","hc-key":"us-ok","hc-a2":"OK","labelrank":"0","hasc":"US.OK","woe-id":"2347595","state-fips":"40","fips":"US40","postal-code":"OK","name":"Oklahoma","country":"United States of America","region":"South","longitude":"-97.1309","woe-name":"Oklahoma","latitude":"35.452","woe-label":"Oklahoma, US, United States","type":"State","hc-middle-lon":-96.299,"hc-middle-lat":35.365}},{"type":"Polygon","arcs":[[-64,-58,-63,66,67,68,69,70,71,72]],"id":"US.MO","properties":{"hc-group":"admin1","hc-key":"us-mo","hc-a2":"MO","labelrank":"0","hasc":"US.MO","woe-id":"2347584","state-fips":"29","fips":"US29","postal-code":"MO","name":"Missouri","country":"United States of America","region":"Midwest","longitude":"-92.446","woe-name":"Missouri","latitude":"38.5487","woe-label":"Missouri, US, United States","type":"State","hc-middle-lon":-92.521,"hc-middle-lat":38.313}},{"type":"Polygon","arcs":[[73,74,75,-68,76,-29,77]],"id":"US.IL","properties":{"hc-group":"admin1","hc-key":"us-il","hc-a2":"IL","labelrank":"0","hasc":"US.IL","woe-id":"2347572","state-fips":"17","fips":"US17","postal-code":"IL","name":"Illinois","country":"United States of America","region":"Midwest","longitude":"-89.1991","woe-name":"Illinois","latitude":"39.946","woe-label":"Illinois, US, United States","type":"State","hc-middle-lon":-89.191,"hc-middle-lat":40.062}},{"type":"Polygon","arcs":[[78,-36,79,80,-75]],"id":"US.IN","properties":{"hc-group":"admin1","hc-key":"us-in","hc-a2":"IN","labelrank":"0","hasc":"US.IN","woe-id":"2347573","state-fips":"18","fips":"US18","postal-code":"IN","name":"Indiana","country":"United States of America","region":"Midwest","longitude":"-86.1396","woe-name":"Indiana","latitude":"39.8874","woe-label":"Indiana, US, United States","type":"State","hc-middle-lon":-86.242,"hc-middle-lat":40.071}},{"type":"Polygon","arcs":[[81,82,83,-6]],"id":"US.VT","properties":{"hc-group":"admin1","hc-key":"us-vt","hc-a2":"VT","labelrank":"0","hasc":"US.VT","woe-id":"2347604","state-fips":"50","fips":"US50","postal-code":"
4VT","name":"Vermont","country":"United States of America","region":"Northeast","longitude":"-72.7317","woe-name":"Vermont","latitude":"44.0886","woe-label":"Vermont, US, United States","type":"State","hc-middle-lon":-72.843,"hc-middle-lat":44.15}},{"type":"Polygon","arcs":[[84,-65,-73,85,86,87]],"id":"US.AR","properties":{"hc-group":"admin1","hc-key":"us-ar","hc-a2":"AR","labelrank":"0","hasc":"US.AR","woe-id":"2347562","state-fips":"5","fips":"US05","postal-code":"AR","name":"Arkansas","country":"United States of America","region":"South","longitude":"-92.14279999999999","woe-name":"Arkansas","latitude":"34.7563","woe-label":"Arkansas, US, United States","type":"State","hc-middle-lon":-92.364,"hc-middle-lat":35.031}},{"type":"MultiPolygon","arcs":[[[-85,88,89,-44,-66]],[[90]]],"id":"US.TX","properties":{"hc-group":"admin1","hc-key":"us-tx","hc-a2":"TX","labelrank":"0","hasc":"US.TX","woe-id":"2347602","state-fips":"48","fips":"US48","postal-code":"TX","name":"Texas","country":"United States of America","region":"South","longitude":"-98.7607","woe-name":"Texas","latitude":"31.131","woe-label":"Texas, US, United States","type":"State","hc-middle-lon":-97.541,"hc-middle-lat":31.032}},{"type":"MultiPolygon","arcs":[[[91,-9]],[[-3,92,93]]],"id":"US.RI","properties":{"hc-group":"admin1","hc-key":"us-ri","hc-a2":"RI","labelrank":"0","hasc":"US.RI","woe-id":"2347598","state-fips":"44","fips":"US44","postal-code":"RI","name":"Rhode Island","country":"United States of America","region":"Northeast","longitude":"-71.5082","woe-name":"Rhode Island","latitude":"41.6242","woe-label":"Rhode Island, US, United States","type":"State","hc-middle-lon":-71.542,"hc-middle-lat":41.424}},{"type":"Polygon","arcs":[[94,95,96,97,98]],"id":"US.AL","properties":{"hc-group":"admin1","hc-key":"us-al","hc-a2":"AL","labelrank":"0","hasc":"US.AL","woe-id":"2347559","state-fips":"1","fips":"US01","postal-code":"AL","name":"Alabama","country":"United States of America","region":"South","longitude":"-86.7184","woe-name":"Alabama","latitude":"32.8551","woe-label":"Alabama, US, United States","type":"State","hc-middle-lon":-86.668,"hc-middle-lat":32.985}},{"type":"Polygon","arcs":[[99,100,-87,101,-96]],"id":"US.MS","properties":{"hc-group":"admin1","hc-key":"us-ms","hc-a2":"MS","labelrank":"0","hasc":"US.MS","woe-id":"2347583","state-fips":"28","fips":"US28","postal-code":"MS","name":"Mississippi","country":"United States of America","region":"South","longitude":"-89.71890000000001","woe-name":"Mississippi","latitude":"32.8657","woe-label":"Mississippi, US, United States","type":"State","hc-middle-lon":-89.833,"hc-middle-lat":32.749}},{"type":"MultiPolygon","arcs":[[[102,103,104,105]],[[106,107]],[[108,109,110,111,112]]],"id":"US.NC","properties":{"hc-group":"admin1","hc-key":"us-nc","hc-a2":"NC","labelrank":"0","hasc":"US.NC","woe-id":"2347592","state-fips":"37","fips":"US37","postal-code":"NC","name":"North Carolina","country":"United States of America","region":"South","longitude":"-78.866","woe-name":"North Carolina","latitude":"35.6152","woe-label":"North Carolina, US, United States","type":"State","hc-middle-lon":-78.867,"hc-middle-lat":35.491}},{"type":"MultiPolygon","arcs":[[[113,-104,114,-109,115,116,117,118,119,120,121,-108],[122]],[[123,-106]],[[124,125]],[[126,127]]],"id":"US.VA","properties":{"hc-group":"admin1","hc-key":"us-va","hc-a2":"VA","labelrank":"0","hasc":"US.VA","woe-id":"2347605","state-fips":"51","fips":"US51","postal-code":"
4VA","name":"Virginia","country":"United States of America","region":"South","longitude":"-78.2431","woe-name":"Virginia","latitude":"37.7403","woe-label":"Virginia, US, United States","type":"State","hc-middle-lon":-78.329,"hc-middle-lat":37.526}},{"type":"Polygon","arcs":[[-77,-67,128,-61,129,130,-23,131]],"id":"US.IA","properties":{"hc-group":"admin1","hc-key":"us-ia","hc-a2":"IA","labelrank":"0","hasc":"US.IA","woe-id":"2347574","state-fips":"19","fips":"US19","postal-code":"IA","name":"Iowa","country":"United States of America","region":"Midwest","longitude":"-93.3891","woe-name":"Iowa","latitude":"42.0423","woe-label":"Iowa, US, United States","type":"State","hc-middle-lon":-94.374,"hc-middle-lat":42.051}},{"type":"MultiPolygon","arcs":[[[132,-126]],[[133,134]],[[-127,135,136,-119,137,138,139,140]]],"id":"US.MD","properties":{"hc-group":"admin1","hc-key":"us-md","hc-a2":"MD","labelrank":"0","hasc":"US.MD","woe-id":"2347579","state-fips":"24","fips":"US24","postal-code":"MD","name":"Maryland","country":"United States of America","region":"South","longitude":"-77.0454","woe-name":"Maryland","latitude":"39.3874","woe-label":"Maryland, US, United States","type":"State","hc-middle-lon":-76.642,"hc-middle-lat":39.381}},{"type":"Polygon","arcs":[[141,-140,142,143,-135]],"id":"US.DE","properties":{"hc-group":"admin1","hc-key":"us-de","hc-a2":"DE","labelrank":"0","hasc":"US.DE","woe-id":"2347566","state-fips":"10","fips":"US10","postal-code":"DE","name":"Delaware","country":"United States of America","region":"South","longitude":"-75.41119999999999","woe-name":"Delaware","latitude":"38.8657","woe-label":"Delaware, US, United States","type":"State","hc-middle-lon":-75.081,"hc-middle-lat":38.671}},{"type":"Polygon","arcs":[[144,-143,-139,145,146,147,148,149]],"id":"US.PA","properties":{"hc-group":"admin1","hc-key":"us-pa","hc-a2":"PA","labelrank":"0","hasc":"US.PA","woe-id":"2347597","state-fips":"42","fips":"US42","postal-code":"PA","name":"Pennsylvania","country":"United States of America","region":"Northeast","longitude":"-77.60939999999999","woe-name":"Pennsylvania","latitude":"40.8601","woe-label":"Pennsylvania, US, United States","type":"State","hc-middle-lon":-77.652,"hc-middle-lat":40.87}},{"type":"Polygon","arcs":[[150,151,152,-150]],"id":"US.NJ","properties":{"hc-group":"admin1","hc-key":"us-nj","hc-a2":"NJ","labelrank":"0","hasc":"US.NJ","woe-id":"2347589","state-fips":"34","fips":"US34","postal-code":"NJ","name":"New Jersey","country":"United States of America","region":"Northeast","longitude":"-74.4653","woe-name":"New Jersey","latitude":"40.0449","woe-label":"New Jersey, US, United States","type":"State","hc-middle-lon":-74.556,"hc-middle-lat":39.748}},{"type":"Polygon","arcs":[[-149,153,-82,-5,154,155,-152,156]],"id":"US.NY","properties":{"hc-group":"admin1","hc-key":"us-ny","hc-a2":"NY","labelrank":"0","hasc":"US.NY","woe-id":"2347591","state-fips":"36","fips":"US36","postal-code":"NY","name":"New York","country":"United States of America","region":"Northeast","longitude":"-75.32420000000001","woe-name":"New York","latitude":"43.1988","woe-label":"New York, US, United States","type":"State","hc-middle-lon":-75.04,"hc-middle-lat":43.02}},{"type":"Polygon","arcs":[[157,158,-53,159,-39,-19,-11]],"id":"US.ID","properties":{"hc-group":"admin1","hc-key":"us-id","hc-a2":"ID","labelrank":"0","hasc":"US.ID","woe-id":"2347571","state-fips":"16","fips":"US16","postal-code":"ID","name":"Idaho","country":"United States of America","region":"West","longitude":"-114.133","woe-name":"Idaho","latitude":"43.7825","woe-label":"Idaho, US, United States","type":"State","hc-middle-lon":-114.097,"hc-middle-lat":43.549}},{"type":"Polygon","arcs":[[-55,160,161,162,-130,-60]],"id":"US.SD","properties":{"hc-group":"admin1","hc-key":"us-sd","hc-a2":"SD","labelrank":"0","hasc":"US.SD","woe-id":"2347600","state-fips":"46","fips":"US46","postal-code":"SD","name":"South Dakota","country":"United States of America","region":"Midwest","longitude":"-100.255","woe-name":"South Dakota","latitude":"44.4711","woe-label":"South Dakota, US, United States","type":"State","hc-middle-lon":-100.262,"hc-middle-lat":44.506}},{"type":"Polygon","arcs":[[163,-155,-4,-94]],"id":"US.CT","properties":{"hc-group":"admin1","hc-key":"us-ct","hc-a2":"CT","labelrank":"0","hasc":"US.CT","woe-id":"2347565","state-fips":"9","fips":"US09","postal-code":"CT","name":"Connecticut","country":"United States of America","region":"Northeast","longitude":"-72.7594","woe-name":"Connecticut","latitude":"41.6486","woe-label":"Connecticut, US, United States","type":"State","hc-middle-lon":-72.757,"hc-middle-lat":41.516}},{"type":"Polygon","arcs":[[164,-7,-84,165,-32]],"id":"US.NH","properties":{"hc-group":"admin1","hc-key":"us-nh","hc-a2":"NH","labelrank":"0","hasc":"US.NH","woe-id":"2347588","state-fips":"33","fips":"US33","postal-code":"NH","name":"New Hampshire","country":"United States of America","region":"Northeast","longitude":"-71.6301","woe-name":"New Hampshire","latitude":"43.5993","woe-label":"New Hampshire, US, United States","type":"State","hc-middle-lon":-71.593,"hc-middle-lat":43.783}},{"type":"MultiPolygon","arcs":[[[-71,166]],[[-69,-76,-81,167,168,-117,169]],[[170,170,170]]],"id":"US.KY","properties":{"hc-group":"admin1","hc-key":"us-ky","hc-a2":"KY","labelrank":"0","hasc":"US.KY","woe-id":"2347576","state-fips":"21","fips":"US21","postal-code":"KY","name":"Kentucky","country":"United States of America","region":"South","longitude":"-85.5729","woe-name":"Kentucky","latitude":"37.3994","woe-label":"Kentucky, US, United States","type":"State","hc-middle-lon":-84.594,"hc-middle-lat":37.611}},{"type":"Polygon","arcs":[[-35,171,-147,172,-168,-80]],"id":"US.OH","properties":{"hc-group":"admin1","hc-key":"us-oh","hc-a2":"OH","labelrank":"0","hasc":"US.OH","woe-id":"2347594","state-fips":"39","fips":"US39","postal-code":"OH","name":"Ohio","country":"United States of America","region":"Midwest","longitude":"-82.67189999999999","woe-name":"Ohio","latitude":"40.0924","woe-label":"Ohio, US, United States","type":"State","hc-middle-lon":-83.048,"hc-middle-lat":40.263}},{"type":"Polygon","arcs":[[-102,-86,-72,-167,-70,-170,-116,-113,173,-97]],"id":"US.TN","properties":{"hc-group":"admin1","hc-key":"us-tn","hc-a2":"TN","labelrank":"0","hasc":"US.TN","woe-id":"2347601","state-fips":"47","fips":"US47","postal-code":"TN","name":"Tennessee","country":"United States of America","region":"South","longitude":"-86.3415","woe-name":"Tennessee","latitude":"35.7514","woe-label":"Tennessee, US, United States","type":"State","hc-middle-lon":-86.623,"hc-middle-lat":35.846}},{"type":"Polygon","arcs":[[-173,-146,-138,-118,-169]],"id":"US.WV","properties":{"hc-group":"admin1","hc-key":"us-wv","hc-a2":"WV","labelrank":"0","hasc":"US.WV","woe-id":"2347607","state-fips":"54","fips":"US54","postal-code":"WV","name":"West Virginia","country":"United States of America","region":"South","longitude":"-80.7128","woe-name":"West Virginia","latitude":"38.6422","woe-label":"West Virginia, US, United States","type":"State","hc-middle-lon":-80.919,"hc-middle-lat":38.701}},{"type":"Polygon","arcs":[[174,-120,-137]],"id":"US.DC","properties":{"hc-group":"admin1","hc-key":"us-dc","hc-a2":"DC","labelrank":"9","hasc":"US.DC","woe-id":"2347567","state-fips":"11","fips":"US11","postal-code":"DC","name":"District of Columbia","country":"United States of America","region":"South","longitude":"-77.01130000000001","woe-name":"District of Columbia","latitude":"38.8922","woe-label":"District of Columbia, US, United States","type":"Federal District","hc-middle-lon":-77.001,"hc-middle-lat":38.899}},{"type":"Polygon","arcs":[[175,-89,-88,-101]],"id":"US.LA","properties":{"hc-group":"admin1","hc-key":"us-la","hc-a2":"LA","labelrank":"0","hasc":"US.LA","woe-id":"2347577","state-fips":"22","fips":"US22","postal-code":"LA","name":"Louisiana","country":"United States of America","region":"South","longitude":"-91.9991","woe-name":"Louisiana","latitude":"30.5274","woe-label":"Louisiana, US, United States","type":"State","hc-middle-lon":-92.307,"hc-middle-lat":31.273}},{"type":"Polygon","arcs":[[-99,176,177]],"id":"US.FL","properties":{"hc-group":"admin1","hc-key":"us-fl","hc-a2":"FL","labelrank":"0","hasc":"US.FL","woe-id":"2347568","state-fips":"12","fips":"US12","postal-code":"FL","
4name":"Florida","country":"United States of America","region":"South","longitude":"-81.6228","woe-name":"Florida","latitude":"28.1568","woe-label":"Florida, US, United States","type":"State","hc-middle-lon":-81.631,"hc-middle-lat":27.933}},{"type":"Polygon","arcs":[[-98,-174,-112,178,179,-177]],"id":"US.GA","properties":{"hc-group":"admin1","hc-key":"us-ga","hc-a2":"GA","labelrank":"0","hasc":"US.GA","woe-id":"2347569","state-fips":"13","fips":"US13","postal-code":"GA","name":"Georgia","country":"United States of America","region":"South","longitude":"-83.4078","woe-name":"Georgia","latitude":"32.8547","woe-label":"Georgia, US, United States","type":"State","hc-middle-lon":-83.674,"hc-middle-lat":32.715}},{"type":"Polygon","arcs":[[180,-179,-111]],"id":"US.SC","properties":{"hc-group":"admin1","hc-key":"us-sc","hc-a2":"SC","labelrank":"0","hasc":"US.SC","woe-id":"2347599","state-fips":"45","fips":"US45","postal-code":"SC","name":"South Carolina","country":"United States of America","region":"South","longitude":"-80.6471","woe-name":"South Carolina","latitude":"33.8578","woe-label":"South Carolina, US, United States","type":"State","hc-middle-lon":-80.813,"hc-middle-lat":34.034}},{"type":"Polygon","arcs":[[181,-24,-131,-163,182]],"id":"US.MN","properties":{"hc-group":"admin1","hc-key":"us-mn","hc-a2":"MN","labelrank":"0","hasc":"US.MN","woe-id":"2347582","state-fips":"27","fips":"US27","postal-code":"MN","name":"Minnesota","country":"United States of America","region":"Midwest","longitude":"-93.364","woe-name":"Minnesota","latitude":"46.0592","woe-label":"Minnesota, US, United States","type":"State","hc-middle-lon":-94.386,"hc-middle-lat":45.85}},{"type":"Polygon","arcs":[[183,184,-161,-54,-159]],"id":"US.MT","properties":{"hc-group":"admin1","hc-key":"us-mt","hc-a2":"MT","labelrank":"0","hasc":"US.MT","woe-id":"2347585","state-fips":"30","fips":"US30","postal-code":"MT","name":"Montana","country":"United States of America","region":"West","longitude":"-110.044","woe-name":"Montana","latitude":"46.9965","woe-label":"Montana, US, United States","type":"State","hc-middle-lon":-109.139,"hc-middle-lat":47.053}},{"type":"Polygon","arcs":[[-185,185,-183,-162]],"id":"US.ND","properties":{"hc-group":"admin1","hc-key":"us-nd","hc-a2":"ND","labelrank":"0","hasc":"US.ND","woe-id":"2347593","state-fips":"38","fips":"US38","postal-code":"ND","name":"North Dakota","country":"United States of America","region":"Midwest","longitude":"-100.302","woe-name":"North Dakota","latitude":"47.4675","woe-label":"North Dakota, US, United States","type":"State","hc-middle-lon":-100.635,"hc-middle-lat":47.51}},{"type":"Polygon","arcs":[[186,-16,-41,187,-46]],"id":"US.AZ","properties":{"hc-group":"admin1","hc-key":"us-az","hc-a2":"AZ","labelrank":"0","hasc":"US.AZ","woe-id":"2347561","state-fips":"4","fips":"US04","postal-code":"AZ","name":"Arizona","country":"United States of America","region":"West","longitude":"-111.935","woe-name":"Arizona","latitude":"34.3046","woe-label":"Arizona, US, United States","type":"State","hc-middle-lon":-111.881,"hc-middle-lat":34.446}},{"type":"Polygon","arcs":[[-188,-40,-160,-52,-47]],"id":"US.UT","properties":{"hc-group":"admin1","hc-key":"us-ut","hc-a2":"UT","labelrank":"0","hasc":"US.UT","woe-id":"2347603","state-fips":"49","fips":"US49","postal-code":"UT","name":"Utah","country":"United States of America","region":"West","longitude":"-111.544","woe-name":"Utah","latitude":"39.5007","woe-label":"Utah, US, United States","type":"State","hc-middle-lon":-111.491,"hc-middle-lat":39.012}},{"type":"MultiPolygon","arcs":[[[188]],[[189]],[[190]],[[191]],[[192]],[[193]],[[194]],[[195]]],"id":"US.HI","properties":{"hc-group":"admin1","hc-key":"us-hi","hc-a2":"HI","labelrank":"0","hasc":"US.HI","woe-id":"2347570","state-fips":"15","fips":"US15","postal-code":"HI","name":"Hawaii","country":"United States of America","region":"West","longitude":"-157.999","woe-name":"Hawaii","latitude":"21.4919","woe-label":"Hawaii, US, United States","type":"State","hc-middle-lon":-155.52,"hc-middle-lat":19.605,"hc-inset":"us-all-hawaii"}},{"type":"MultiPolygon","arcs":[[[196],[197]],[[198]],[[199]],[[200]],[[201]],[[202]],[[203]],[[204]],[[205]],[[206]],[[207]],[[208]],[[209]],[[210]],[[211]],[[212]],[[213]],[[214]],[[215]],[[216]],[[217]],[[218]],[[219]],[[220]],[[221]],[[222]],[[223]
4],[[224]],[[225]],[[226]],[[227]],[[228]],[[229]],[[230]],[[231]],[[232]],[[233]],[[234]],[[235]],[[236]],[[237]],[[238]],[[239]],[[240]],[[241]]],"id":"US.AK","properties":{"hc-group":"admin1","hc-key":"us-ak","hc-a2":"AK","labelrank":"0","hasc":"US.AK","woe-id":"2347560","state-fips":"2","fips":"US02","postal-code":"AK","name":"Alaska","country":"United States of America","region":"West","longitude":"-151.604","woe-name":"Alaska","latitude":"65.3609","woe-label":"Alaska, US, United States","type":"State","hc-middle-lon":-150.208,"hc-middle-lat":65.023,"hc-inset":"us-all-alaska"}}],"hc-recommended-transform":{"default":{"crs":"+proj=lcc +lat_1=33 +lat_2=45 +lat_0=39 +lon_0=-96 +x_0=0 +y_0=0 +datum=NAD83 +units=m +no_defs","scale":0.000151481324748,"jsonres":15.5,"jsonmarginX":-999,"jsonmarginY":9851,"xoffset":-2361356.09818,"yoffset":1398996.77886},"us-all-hawaii":{"xpan":190,"ypan":417,"crs":"+proj=aea +lat_1=8 +lat_2=18 +lat_0=13 +lon_0=-157 +x_0=0 +y_0=0 +datum=NAD83 +units=m +no_defs","scale":0.000123090941806,"jsonres":15.5,"jsonmarginX":-999,"jsonmarginY":9851,"xoffset":-338610.47557,"yoffset":1022754.31736,"geometry":{"type":"Polygon","coordinates":[[[-108.02234811026737,28.131995556971578],[-99.6925136210582,25.09851533842571],[-99.13103120627295,10.80433106513135],[-105.76273688266124,10.337841364791041],[-108.02234811026737,28.131995556971578]]]}},"us-all-alaska":{"rotation":-0.0174532925199,"xpan":5,"ypan":357,"crs":"+proj=tmerc +lat_0=54 +lon_0=-142 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs","scale":0.0000584397059179,"jsonres":15.5,"jsonmarginX":-999,"jsonmarginY":9851,"xoffset":-1566154.00853,"yoffset":1992671.14918,"geometry":{"type":"Polygon","coordinates":[[[-120.85794661131852,30.762825284322425],[-119.60838899484447,31.05714930388009],[-108.02234811026737,28.131995556971578],[-105.76273688266124,10.337841364791041],[-115.12985129390901,8.8460581322757],[
4-120.85794661131852,30.762825284322425]]]}}},"hc-recommended-mapview":{"projection":{"name":"LambertConformalConic","parallels":[33,45],"rotation":[96]},"padding":[0,0,"8%",0],"insets":[{"id":"us-alaska","borderPath":{"type":"MultiLineString","coordinates":[[[0,60],[25,80],[25,100]]]},"field":{"type":"Polygon","coordinates":[[[0,60],[25,80],[25,100],[0,100]]]},"geoBounds":{"type":"Polygon","coordinates":[[[-179.5,50],[-129,50],[-129,72],[-179.5,72]]]},"padding":["30%","5%",0,0],"projection":{"name":"LambertConformalConic","parallels":[55,65],"rotation":[154]}},{"id":"us-hawaii","borderPath":{"type":"LineString","coordinates":[[[25,80],[40,92]]]},"field":{"type":"Polygon","coordinates":[[[25,80],[40,92],[40,100],[25,100]]]},"geoBounds":{"type":"Polygon","coordinates":[[[-162,23],[-152,23],[-152,18],[-162,18]]]},"padding":["30%","20%",0,"10%"],"projection":{"name":"LambertConformalConic","parallels":[8,18],"rotation":[157]}}]}}},"arcs":[[[9647,4303],[19,-17],[-20,-2],[-11,-11],[12,30]],[[9596,4344],[1,9],[-5,-2]],[[9592,4351],[-10,17],[-4,41],[-39,0]],[[9539,4409],[-90,3],[-68,5]],[[9381,4417],[-3,4],[23,127]],[[9401,4548],[33,0],[42,-2]],[[9476,4546],[110,-6],[14,21],[32,13]],[[9632,4574],[3,-31],[17,-16],[-26,-18],[-15,-44],[13,2],[17,-21],[17,-75],[25,-19],[24,14],[-3,48],[10,-35],[0,-35],[-23,-3],[-47,-24],[3,36],[-24,-16],[-2,-17],[-18,-7]],[[9603,4313],[-1,29],[-6,2]],[[4722,5694],[15,-16],[-16,-15],[10,-30],[-32,16],[12,9],[11,36]],[[5276,5740],[-1,-498],[12,-37],[4,-35]],[[5291,5170],[-201,-1],[-9,-10],[-46,-4],[-61,-36],[-36,-1],[-27,-17],[-25,-2],[-10,15],[-49,2],[-44,-29],[-45,18],[-6,60],[-10,25],[-26,14]],[[4696,5204],[-18,-5],[-10,23],[-20,6],[-17,-13],[-18,23],[0,56],[6,-38],[10,18],[0,38],[-18,-1],[-4,28],[30,14],[-34,15],[-14,61],[-10,73],[-20,32],[-9,50],[15,38],[49,-37],[76,-12],[9,12],[15,-27],[21,20],[14,-48],[-13,-42],[22,45],[-6,-59],[21,-41],[-34,-8],[-4,-32],[-5,40],[-19,-50],[35,1],[11,37],[20,14],[-8,35],[1,39],[18,39],[-22,48],[5,14],[-19,14],[-12,-28],[11,-5],[24,-49],[-20,7],[-6,33],[-12,17],[15,26],[-6,3],[-6,27],[21,-18],[5,25],[-5,30],[-15,5],[-15,32],[6,12],[539,-1]],[[4599,4406],[397,0]],[[4996,4406],[0,-573],[177,-249],[138,-210],[192,-303]],[[5503,3071],[24,-102],[23,-36],[-24,-29],[-13,-36],[3,-40],[-13,-56],[-9,-4],[2,-62],[21,-19],[-6,-48],[-17,-5]],[[5494,2634],[-227,-34],[-1,30],[-12,2],[-6,78],[-17,43],[-63,82],[-22,-5],[2,19],[-14,38],[-25,-7],[-39,29],[-5,20],[-33,31],[-24,-3],[-25,13],[-31,-4],[-17,26],[1,105],[-24,22],[6,16],[-32,57],[-11,6],[-42,102],[-16,19],[-7,52],[15,21],[2,24],[-13,32],[-21,0],[-23,41],[0,32],[-11,33],[0,48],[10,5],[5,-41],[30,-27],[-12,40],[-16,23],[-3,43],[22,6],[-25,21],[-10,-7],[-2,-57],[-36,41],[-21,80],[-56,89],[4,21],[-14,61],[6,38],[-8,55],[-25,52],[-23,30],[-4,34],[28,114],[4,76],[-9,57],[-10,8],[5,42]],[[4599,4406],[-14,22],[-7,41],[2,64],[-13,35],[10,35],[7,59],[13,39],[8,64],[10,144],[-2,36],[16,140],[-8,40],[4,41],[-5,42],[35,-3],[13,13],[9,-21],[19,7]],[[5291,5170],[11,-32],[21,-16],[7,-32],[-18,-45],[-17,-82],[-35,-83],[1,-35],[27,-22],[-11,-76],[0,-341]],[[5277,4406],[-281,0]],[[8109,5044],[-7,-43],[-23,-56],[-11,19],[16,48],[25,32]],[[7763,4504],[-6,27]],[[7757,4531],[-32,17],[-11,79],[7,23],[-15,43]],[[7706,4693],[-4,79],[-13,20],[-22,10],[-42,69],[-27,28],[-18,5],[-22,28],[6,33],[0,71],[8,28],[-20,24],[0,27],[17,38],[39,32],[0,111],[17,20]],[[7625,5316],[30,-12],[57,30],[21,17],[21,-5],[-6,-28],[13,-26],[24,-10]],[[7785,5282],[17,-15],[11,-33],[94,-36],[26,-22],[61,-14],[11,-33],[26,-19],[-6,-63],[20,-2],[-7,-32],[12,-15]],[[8050,4998],[-21,-29],[-20,-72],[10,-3],[29,55],[16,8],[11,-16],[-21,-94],[5,-17],[-21,-56],[2,-42],[-19,-84],[1,-47],[11,-40],[-3,-61]],[[8030,4500],[-166,2],[-86,1]],[[7778,4503],[-15,1]],[[9856,4851],[15,21],[9,-16],[-21,-35],[-3,30]],[[9606,5037],[17,-12],[21,63],[26,30],[14,43],[-5,22],[12,55],[11,11],[6,55],[70,140],[18,-1],[3,-35],[13,-12],[67,30],[36,-59],[2,-260],[33,-13],[-3,-62],[11,-22],[17,3],[24,-65],[-26,-37],[-13,12],[-7,-21],[-44,-11],[-3,-27],[-14,-14],[-5,29],[-31,2],[-19,-37],[4,-47],[-20,61],[6,32],[-23,-22],[-8,-70],[-18,-24],[-10,9],[-13,-27],[-19,-2],[-11,-24],[-12,29],[-27,-29],[3,-26],[-35,-55],[-15,-36]],[[9639,4613],[-22,57],[1,34],[-12,333]],[[8430,5184],[1,-28],[-23,3],[8,31],[14,-6]],[[7965,5584],[-18,-31],[-42,-34],[1,25],[59,40]],[[8440,4355],[-79,
4-4],[-48,-2]],[[8313,4349],[0,11],[-192,1]],[[8121,4361],[23,34],[21,60],[15,87],[0,48],[-31,127],[10,30],[-7,57],[23,55],[0,60],[16,11],[2,33],[22,6],[19,45],[7,-23],[-8,-40],[8,-14],[14,28],[2,57],[21,28],[18,2],[-9,47],[29,32],[26,-22],[-8,25],[22,-5],[-10,-23],[22,-5],[12,-26],[55,-28],[12,-15],[7,-40],[-14,-13],[16,-57],[-6,-71],[-17,-12],[-6,-39],[-25,-14],[-4,-59],[21,-14],[18,19],[24,54],[30,15],[22,-28],[15,-123],[11,-50],[-10,-70],[-28,1],[-7,-48],[-23,-25],[-12,-65],[-19,-38]],[[7785,5282],[37,20],[21,26],[37,7],[25,26],[16,3],[31,42],[4,-11],[15,36],[36,22],[31,-10],[-49,-47],[-17,-37],[0,25],[-13,4],[12,-31],[-2,-36],[21,28],[41,-7],[16,-14],[27,-60],[35,5],[8,-16],[28,1],[42,43],[59,-1],[30,18],[23,1],[-10,-48],[21,-14],[17,9],[8,-16],[14,17],[30,3],[-3,-55],[23,-43],[-12,-9],[-48,5],[-12,12],[-7,-38],[-27,32],[-30,17],[-19,-3],[-11,-21],[-56,-6],[-12,-28],[-31,-26],[13,42],[-20,-5],[-20,-28],[-1,36],[-56,-154]],[[5277,4406],[193,1],[88,-1]],[[5558,4406],[0,-536],[0,-417]],[[5558,3453],[-1,-149],[-7,-34],[-41,22],[-15,-13],[5,-42],[0,-68],[9,-62],[-5,-36]],[[6028,3452],[570,0]],[[6598,3452],[0,-71],[0,-24]],[[6598,3357],[-3,-4],[-3,-854],[-339,-1],[15,-44]],[[6268,2454],[-161,2],[0,-86],[-79,0]],[[6028,2370],[1,542],[-1,540]],[[6028,3452],[0,644],[1,120]],[[6029,4216],[470,-1]],[[6499,4215],[189,0],[0,-190]],[[6688,4025],[0,-125],[1,-448]],[[6689,3452],[-91,0]],[[6029,4216],[-189,-1],[0,191]],[[5840,4406],[0,149],[0,328]],[[5840,4883],[0,95],[659,0]],[[6499,4978],[0,-309],[0,-72]],[[6499,4597],[0,-72],[0,-310]],[[6688,4025],[635,0]],[[7323,4025],[41,-35],[-21,-55],[19,-28],[6,-32],[20,-18],[0,-405]],[[7388,3452],[-699,0]],[[6499,4597],[525,0],[38,-37],[23,12],[51,4],[16,-19],[39,-21],[22,-31]],[[7213,4505],[8,-4],[4,-55],[18,-42],[9,-37],[-2,-46],[15,-16],[5,-31],[4,-98]],[[7274,4176],[6,-33],[0,-4]],[[7280,4139],[13,-49],[30,-65]],[[7388,3452],[0,-24],[0,-71]],[[7388,3357],[17,-213],[-4,-331]],[[7401,2813],[-37,20],[-33,40],[-12,-18],[-23,16],[-16,-18],[-16,7],[-37,-37],[-30,41],[-19,-8],[-6,15],[-15,-18],[-4,-25],[-9,35],[-15,-16],[-29,30],[-26,-17],[-13,46],[-37,-12],[-44,26],[-23,4],[-7,34],[-39,-2],[-30,33],[0,367],[-283,1]],[[7280,4139],[121,-5],[131,1],[129,8],[27,-46]],[[7688,4097],[-8,-39],[7,-59],[9,-30],[29,-49],[21,-25],[11,-62],[12,-23],[14,17],[28,-25],[-24,-102],[26,-54],[18,-12],[35,-48],[9,-49],[-7,-34],[13,-34],[25,-20]],[[7906,3449],[-1,-47],[-11,-32],[-10,14],[-6,-27]],[[7878,3357],[-5,-9],[-2,9]],[[7871,3357],[-7,10],[1,-10]],[[7865,3357],[3,-22],[-16,-27],[8,-20],[-10,-27]],[[7850,3261],[-62,-2],[29,58],[-9,40],[-420,0]],[[8030,4500],[-1,-40],[28,-105]],[[8057,4355],[-1,-452],[-12,-47],[11,-28],[3,-40],[-13,-46],[-10,-11],[-17,-57],[-9,-12],[-1,-56]],[[8008,3606],[-11,-32],[4,-31],[-33,-13],[-2,-64],[-39,28],[-13,-2],[-13,-28],[5,-15]],[[7688,4097],[5,42],[19,10],[20,56],[2,25],[-12,22],[8,46],[27,3],[34,30],[14,40],[3,58],[-22,24],[-23,51]],[[7778,4503],[119,-1],[133,-2]],[[8057,4355],[22,-20],[42,26]],[[8313,4349],[1,-77],[-3,-420]],[[8311,3852],[-5,-33],[6,-25],[-35,-19],[-25,6],[3,-35],[-19,-20],[-4,-24],[-14,-4],[-9,-43],[-13,-18],[-22,33],[-23,-23],[-1,-17],[-19,-5],[-7,17],[-33,-28],[-25,19],[-16,-17],[-27,14],[-15,-24]],[[9401,4548],[1,154],[-16,9],[5,29],[-6,58],[10,35],[3,45],[-6,20],[1,81]],[[9393,4979],[61,1],[113,1]],[[9567,4981],[-13,-52],[8,-27],[-11,-29],[-35,-31],[-1,-27],[-15,-68],[-17,-48],[-1,-45],[-14,-80],[8,-28]],[[7443,2691],[-1,103],[-26,1],[-15,18]],[[7850,3261],[0,-31],[-21,-19],[3,-36],[-18,-30],[0,-50],[-19,-24]],[[7795,3071],[3,-15],[-18,-18],[-12,-36],[0,-41],[-34,-51],[4,-23],[-17,-8],[4,-34],[-17,-25],[9,-39],[-5,-31],[8,-32],[-6,-26]],[[7714,2692],[-18,0],[-253,-1]],[[7443,2691],[-1,-193],[22,-55],[-1,-24],[30,-103],[-6,-43],[-15,-48],[1,-93],[-8,-18]],[[7465,2114],[-12,-40],[5,-19],[-17,1],[-56,-44],[9,23],[-19,-9],[5,43],[-26,-15],[-4,-25],[28,-40],[-20,-21],[5,29],[-26,-62],[-41,-54],[-33,-15],[-5,-17],[-38,-39],[-1,-12],[-27,-28],[-29,-56],[12,46],[-13,15],[-19,-26],[19,-6],[-17,-42],[-17,2],[11,-29],[-14,-66],[-7,13],[-21,-26],[26,2],[-11,-51],[23,-169],[16,-30],[-27,-22],[-36,40],[-39,3],[-14,22],[-26,10],[-15,24],[-27,7],[-7,60],[-28,64],[-6,48],[2,50],[-19,17],[-35,95],[-19,26],[-11,57],[-22,63],[-4,37],[-33,52],[7,17],[-19,7],[-24,50],[-67,5],[-20,18],[-7,-23],[-27,-6],[-20,-89],[3,-9],[-27,-47],[-14,3],[-46,53],[-25,12],[-20,35],[-25,27],[-14,53],[0,47],[-31,93],[-33,33],[-61,104],[-15,10],[-18,51],[-14,10]],[[7147,1669],[-19,-85],[0,-53],[11,-88],[-13,69],[3,98],[18,59]],[[9603,4313],[-8,-2],[1,33]],[[9592,4351],[0,-43],[-18,-3],[-6,-20],[-34,-10]],[[9534,4275],[5,40],[0,94]],[[8067,2209],[-22,-44],[-62,-3],[19,7],[-7,18],[-21,4]],[[7974,2191],[-8,286],[38,573],[-9,20]],[[7995,3070],[0,3],[243,-5]],[[8238,3068],[38,-390],[11,-62],[17,-65],[-14,-27],[-9,-60],[10,-55],[-7,-50
4],[10,-51]],[[8294,2308],[-243,-1],[-4,-24],[21,-43],[-1,-31]],[[7974,2191],[-43,4],[-44,-21],[-19,-21]],[[7868,2153],[-30,94],[11,61],[-181,-1],[7,11],[-6,41],[9,2],[1,42],[9,14],[10,54],[23,30],[16,62],[-16,21],[-6,61],[7,29],[-8,18]],[[7795,3071],[159,-1],[41,0]],[[9152,3366],[0,-10],[-10,10]],[[9142,3366],[4,0]],[[9146,3366],[1,-1],[2,1]],[[9149,3366],[1,0],[2,0]],[[9157,3366],[6,-51],[29,-108],[-23,66],[-14,93]],[[9155,3366],[1,1],[1,-1]],[[8610,3378],[41,-8],[106,-6],[383,2]],[[9140,3366],[23,-89],[-39,42],[14,-25],[-44,-30],[-15,8],[-5,-21],[64,7],[2,-63],[4,45],[13,17],[12,-28],[-6,-49],[-9,12],[-17,-48],[-19,-7],[-29,29],[-2,-20],[-37,19],[46,-35],[-16,-27],[10,-9],[-26,-25],[-23,32],[14,-34],[16,-13],[21,4],[8,27],[12,-34],[-28,-39],[-48,-2],[-50,-58],[-15,-32],[-14,-69],[-26,15],[-30,-8]],[[8901,2858],[-102,174],[-106,5],[-1,26],[-27,37],[-114,10],[-78,-39]],[[8473,3071],[-36,-1],[-78,-2]],[[8359,3068],[5,51],[16,1],[8,32],[22,25],[26,3],[40,42],[16,29],[26,21],[5,-16],[36,36],[11,-12],[15,37],[17,18],[8,43]],[[9155,3366],[-8,31],[-1,-31]],[[9142,3366],[-3,8],[1,-8]],[[8610,3378],[-28,-3],[-162,2]],[[8420,3377],[51,28],[23,27],[24,52],[27,21],[36,50]],[[8581,3555],[13,-48],[26,-14],[20,23],[11,-17],[26,10],[9,25],[11,-9],[41,24],[1,34],[47,113],[15,60],[31,-32],[30,80],[10,-11],[28,39],[16,34],[8,54],[46,-59],[10,36]],[[8980,3897],[25,-17],[-5,-17],[38,-42]],[[9038,3821],[2,-5],[3,-1]],[[9043,3815],[2,-36],[
4-18,-11],[-11,-47],[9,-15],[20,13],[15,-42],[25,-5],[8,-24],[27,-23],[-7,-54],[-16,7],[-13,30],[-28,31],[38,-69],[26,-32],[-19,-15],[-4,-21]],[[9097,3502],[8,-5],[10,-42],[-12,-8],[-21,50],[-35,11],[29,-27],[22,-46],[20,10],[26,-9],[13,-70]],[[9097,3502],[-3,1],[-24,52],[16,-47],[8,-5],[2,-4],[1,3]],[[9149,3366],[2,5],[1,-5]],[[9214,3647],[-7,-25],[6,25]],[[9213,3647],[1,0]],[[9177,3637],[2,5],[23,4]],[[9202,3646],[-11,-35],[-37,-91],[6,-30],[-12,-21],[-6,43],[7,50],[28,75]],[[7280,4139],[-6,37]],[[7213,4505],[-15,45],[17,70],[-10,20],[-3,52],[13,1]],[[7215,4693],[338,0],[153,0]],[[7757,4531],[7,-23],[-1,-4]],[[9213,3647],[6,16],[-5,-16]],[[9233,3730],[-3,-22],[2,21]],[[9232,3729],[1,1]],[[9177,3637],[-21,-7],[8,43],[-24,29],[-1,-13],[-26,44],[29,18],[-9,23],[-19,15],[19,22],[-13,13],[-3,39],[23,46],[9,40],[-25,-45],[-11,8],[-6,-31],[-17,3],[14,-33],[-12,-38],[3,-69],[9,-39],[-21,29],[30,-64],[0,-19],[-23,30],[-26,11],[-18,43],[-16,-22],[-6,24],[22,41],[1,19]],[[9047,3797],[11,16],[-20,8]],[[8980,3897],[-11,53],[-27,18],[-28,-15],[-4,-17],[-20,2],[-9,17],[-17,-35],[-10,6],[-40,-52],[1,97]],[[8815,3971],[164,0],[184,0]],[[9163,3971],[9,-240],[57,-1]],[[9229,3730],[-6,-41],[-9,-3],[-12,-40]],[[9232,3729],[-3,2],[0,-1]],[[9163,3971],[18,23],[16,-6]],[[9197,3988],[-17,-37],[2,-29],[15,-28],[3,-49],[22,-51],[7,1],[4,-65]],[[9235,4028],[-12,-22],[-26,-18]],[[8815,3971],[-98,1],[0,176]],[[8717,4148],[0,255]],[[8717,4403],[14,8],[58,46]],[[8789,4457],[-1,-51],[418,0],[24,-33],[1,-40],[35,-50]],[[9266,4283],[-42,-71],[8,-17],[-12,-26],[0,-35],[9,-3],[34,-75],[-28,-28]],[[9266,4283],[37,-35]],[[9303,4248],[37,-34]],[[9340,4214],[-11,-53],[-17,-15],[-7,-26],[27,-18],[2,-15],[-12,-114],[-21,-32],[-8,-39],[-23,-30],[-21,-49],[-8,-2],[7,41],[-24,7],[-37,56],[-2,27],[11,30],[28,19],[11,27]],[[8789,4457],[57,60],[27,51],[-19,49],[1,33],[35,16],[54,6],[35,-9],[19,-17],[16,8],[36,-3],[26,11],[28,37],[22,10],[-3,52],[11,28],[-17,-6],[-8,30],[20,31],[28,16],[15,39],[40,53],[38,29],[16,-3],[127,1]],[[9381,4417],[-6,-145],[5,-15],[-22,-22],[7,-19]],[[9365,4216],[-12,-32],[27,21],[25,-7],[12,11],[46,5],[25,28],[15,-25],[5,16],[0,-14],[26,10],[-52,-40],[-30,-10],[-30,-26],[-50,-19],[-39,-1],[-24,-13],[4,24],[13,-2],[14,31],[-8,-4],[8,45]],[[9303,4248],[-28,26],[-9,9]],[[5276,5740],[93,1]],[[5369,5741],[0,-189],[31,-58],[0,-51],[35,-31],[40,-68],[1,-14],[32,-38],[20,7],[1,-28],[-10,-50],[-1,-52],[7,-19],[-15,-22],[1,-40],[19,-17],[36,40],[16,-21],[7,-53],[26,-58],[-4,-13],[14,-27],[14,2],[12,-29],[6,-36],[14,-16],[15,24],[30,-7],[12,19],[41,-7],[28,9],[5,27],[13,3],[25,-45]],[[5840,4406],[-124,0],[-158,0]],[[6499,4978],[1,1],[0,179]],[[6500,5158],[596,0],[110,1]],[[7206,5159],[-8,-35],[-21,-31],[16,-37],[22,-21],[0,-342]],[[9534,4275],[-4,6],[-58,-16],[-36,-3],[-28,-13],[-43,-33]],[[9639,4613],[3,-4],[-10,-35]],[[9567,4981],[16,53],[23,3]],[[7871,3357],[-6,0]],[[8311,3852],[36,1],[12,-14],[12,-42],[31,-8],[14,-24],[17,13],[21,-20],[40,27],[6,-30],[22,-32]],[[8522,3723],[-4,-50],[32,-89],[31,-29]],[[8420,3377],[-5,-4],[-132,7],[-28,-1],[-106,8],[-121,-3],[-22,9],[2,-36],[-130,0]],[[8522,3723],[0,0]],[[8440,4355],[54,-37],[-7,-9],[43,-18],[44,22],[35,2],[30,39],[78,49]],[[8717,4148],[-15,-11],[6,-58],[-24,-98],[0,-27],[-33,-44],[-24,0],[-19,-25],[-13,-37],[5,-26],[-13,-12],[-15,25],[-14,-42],[3,-33],[-15,-32],[-24,-5]],[[8359,3068],[-52,0],[-69,0]],[[9047,3797],[1,9],[-5,9]],[[7868,2153],[-41,14],[-24,23],[-20,-46],[9,-15],[28,-5],[15,22],[23,-2],[-16,-38],[17,-12],[16,37],[12,-30],[-37,-53],[16,-44],[33,-11],[16,-26],[-11,-32],[-22,8],[-11,27],[-30,16],[6,15],[-31,22],[2,-56],[-16,-25],[-5,29],[-20,14],[-14,-32],[-23,-2],[-41,31],[5,38],[-25,8],[-14,42],[-16,-7],[1,22],[-27,-19],[2,-22],[17,6],[19,-13],[-11,-19],[-28,20],[-13,-10],[-38,13],[-49,33],[-24,-1],[-35,-13],[2,54]],[[8294,2308],[14,-54],[247,-29],[6,-39],[12,2],[1,69],[12,16],[39,-20]],[[8625,2253],[5,-2],[5,-77],[14,-108],[30,-127],[38,-114],[-7,-13],[6,-73],[16,-61],[27,-139],[2,-79],[-8,-126],[-19,-77],[-2,-64],[-21,-40],[13,43],[-6,14],[-19,-20],[-13,8],[-22,-12],[-9,20],[3,32],[-13,59],[-32,46],[-10,-3],[-11,92],[-24,2],[4,85],[-15,19],[6,-31],[-15,8],[-33,111],[25,70],[-2,23],[-17,-7],[-4,-34],[-17,20],[4,68],[11,55],[3,8
41],[-16,57],[-21,0],[-18,45],[-18,23],[-26,75],[-32,35],[-34,-14],[3,-25],[-15,3],[-7,-23],[-36,-35],[-36,12],[5,23],[-10,26],[-25,36],[-37,35],[-43,19],[-95,-24],[17,29],[-7,10]],[[8473,3071],[-23,-56],[29,-41],[18,-6],[11,-53],[16,-41],[31,-42],[4,-22],[25,-30],[0,-22],[16,-39],[23,-22],[11,-79],[19,-27],[12,-76],[17,-11]],[[8682,2504],[6,-6],[-47,-87],[5,-51],[-17,-16],[3,-51],[-7,-40]],[[8901,2858],[-35,-47],[-18,-42],[-5,-45],[-17,-30],[-15,3],[-6,-24],[-39,-57],[-31,-25],[-33,5],[23,-20],[-43,-72]],[[7143,5741],[193,-1],[1,72],[32,-14],[11,-93],[11,-15],[34,-15],[33,-2],[12,-23],[25,5],[21,16],[27,-2],[31,-15],[25,-58],[7,14],[25,5],[33,-45],[25,-12],[48,37],[12,-24],[58,2],[19,-20],[32,-2],[-42,-36],[-43,-19],[-45,-42],[-47,-71],[-56,-67]],[[7206,5159],[-5,73],[-18,60],[4,53],[-7,16],[-2,92],[-26,131],[-3,69],[5,22],[-11,66]],[[5369,5741],[330,-1],[801,0]],[[6500,5740],[0,-545],[0,-37]],[[6500,5740],[173,0],[470,1]],[[6028,2370],[-184,0],[-47,28],[-313,195],[10,41]],[[5558,3453],[309,0],[161,-1]],[[1640,235],[2,-3],[2,1],[4,0],[10,-7],[8,-8],[16,-19],[4,-10],[3,-7],[0,-17],[0,-8],[3,0],[4,3],[2,-3],[2,-4],[-1,-9],[2,-5],[1,-4],[5,-9],[5,-4],[2,-3],[1,-4],[0,-6],[-6,-12],[-4,-3],[-6,-11],[-4,-3],[0,-2],[-4,-1],[-2,-5],[-11,-5],[-4,2],[-2,0],[-2,-2],[-5,-6],[-2,-4],[-3,-2],[-4,-5],[-5,-5],[-1,-1],[-4,-7],[-1,-3],[0,-7],[-4,-10],[-2,-8],[-1,-3],[-4,-6],[-1,1],[0,4],[-2,3],[-4,4],[-7,8],[-5,3],[-2,7],[-1,1],[-1,5],[0,8],[1,10],[2,28],[0,4],[-2,5],[-3,19],[-2,6],[0,4],[-1,4],[-1,10],[-2,5],[-1,2],[-2,4],[-3,12],[2,10],[5,8],[1,4],[1,2],[4,3],[3,8],[2,7],[2,5],[2,0],[1,9],[-1,3],[-2,3],[-3,10],[-1,8],[0,13],[1,7],[2,2],[3,0],[9,-4],[2,-9],[4,-3],[2,-2],[2,-4],[2,-2]],[[1553,310],[-1,-3],[-3,0],[-2,0],[-5,-1],[-3,-1],[-2,4],[1,3],[2,3],[6,6],[2,2],[2,0],[3,-5],[-2,-6],[2,-2]],[[1517,349],[-5,-1],[-1,6],[-1,4],[0,8],[0,4],[-2,2],[-4,3],[-1,4],[1,4],[2,2],[4,1],[9,-3],[4,-7],[3,-7],[1,-5],[0,-4],[-2,-6],[-4,-3],[-4,-2]],[[1548,405],[0,-2],[4,-3],[0,-2],[2,-1],[0,-5],[1,-2],[3,-9],[1,0],[1,3],[2,0],[5,1],[3,4],[2,1],[3,0],[5,-2],[2,-2],[0,-2],[3,-5],[2,-4],[1,-2],[2,1],[1,-2],[1,-4],[3,-1],[3,-3],[5,-3],[2,-8],[0,-7],[-2,-6],[-3,-2],[-1,-5],[-3,0],[-5,-5],[-5,0],[-2,0],[-9,-8],[-5,2],[-1,-1],[-4,0],[-3,4],[-1,5],[0,1],[0,4],[0,12],[-1,4],[0,4],[-1,3],[-2,3],[-3,-2],[0,-2],[-1,-1],[-3,4],[-2,0],[-2,3],[-1,0],[-4,7],[-2,7],[-1,4],[0,2],[0,10],[1,4],[1,3],[1,0],[2,5],[2,-1],[2,2],[1,-1]],[[1485,442],[4,-1],[1,0],[1,-2],[2,0],[13,-4],[4,-1],[1,6],[1,0],[1,-3],[1,-4],[5,-2],[4,0],[2,1],[3,1],[2,0],[3,-1],[1,-2],[3,-1],[-2,-6],[-3,-5],[-4,-4],[-3,-3],[-4,-1],[-3,0],[-4,2],[-7,3],[-5,3],[-11,-1],[-3,-1],[-5,0],[-2,2],[-1,2],[0,4],[2,5],[2,1],[1,4],[1,4],[-2,4],[1,0]],[[1425,514],[0,-4],[1,-1],[1,-3],[1,0],[2,-5],[0,-4],[-1,-1],[1,-9],[2,-1],[1,-5],[2,-1],[1,-2],[1,4],[-1,2],[0,2],[1,1],[4,-1],[-2,-3],[0,-6],[2,-2],[1,-4],[0,-2],[1,-5],[4,-5],[1,-1],[-4,-8],[-1,-1],[-1,3],[-1,1],[-4,-1],[-3,-4],[-2,1],[-1,3],[-5,4],[-1,5],[0,2],[-2,-3],[1,-2],[-4,-1],[0,2],[-2,1],[0,6],[3,3],[0,1],[-3,4],[0,-4],[-3,4],[1,-5],[0,-1],[-3,5],[0,-4],[4,-6],[-1,-3],[-1,-1],[-9,-3],[-2,2],[-1,6],[-1,5],[-2,6],[-2,1],[0,6],[-1,2],[-3,4],[-1,4],[0,9],[-1,2],[-4,6],[4,2],[4,0],[7,0],[1,4],[2,2],[2,4],[0,1],[2,6],[3,5],[3,2],[2,-1],[3,-5],[2,-6],[-1,-4],[3,-5]],[[1207,549],[-1,-1],[-2,3],[-1,7],[0,4],[1,4],[4,7],[3,5],[3,4],[2,5],[-1,3],[2,2],[2,0],[1,-2],[1,-3],[-2,-5],[0,-4],[0,-5],[-1,-3],[-3,-3],[-2,-1],[-3,-5],[-1,-3],[-2,-9]],[[1284,634],[1,-1],[2,0],[1,-2],[1,-3],[2,-2],[1,-7],[1,-1],[0,-7],[-1,-3],[-2,-7],[-1,-1],[0,-6],[0,-7],[0,-5],[-2,-1],[1,-3],[-2,-1],[-2,-2],[0,-3],[-4,-5],[-1,-2],[-4,3],[-5,0],[-4,2],[-1,2],[-2,-2],[0,1],[-2,3],[-2,5],[-1,0],[-1,3],[-2,0],[-3,2],[-3,2],[-1,5],[-2,3],[0,9],[1,1],[4,8],[0,5],[2,3],[4,3],[3,3],[2,3],[2,1],[1,2],[4,2],[1,-2],[3,-2],[0,3],[2,1],[4,0],[2,-1],[2,2],[1,-1]],[[1225,9864],[-7,8],[39,31],[64,-6],[89,12],[78,43],[39,47],[112,-24],[1,-23],[-43,-18],[15,-29],[30,5],[36,53],[57,-24],[-3,-31],[49,-9],[20,22],[56,4],[103,-21],[-40,-48],[85,-1],[-23,-21],[76,-1],[121,14],[82,-5],[60,-34],[21,8],[33,-22],[65,-14],[116,3],[57,-35],[65,-2],[51,19],[71,7],[66,-21],[32,-31],[43,-6],[37,-33],[37,2],[2,-1781],[93,-25],[35,27],[51,2],[-8,-52],[46,-35],[9,-26],[93,-98],[18,-62],[55,46],[22,0],[25,84],[82,39],[42,-49],[-6,-24],[65,-70],[16,-40],[34,-20],[46,-62],[108,-232],[19,
4-32],[-6,-31],[22,-14],[6,-39],[21,2],[138,-94],[8,-38],[-13,-30],[17,-87],[-35,-73],[-30,-26],[-22,6],[-13,76],[17,27],[-2,71],[-29,50],[-52,-17],[-20,-74],[-28,49],[19,9],[17,79],[-58,74],[-4,29],[-65,80],[-31,1],[20,44],[-26,31],[-7,41],[-35,53],[5,66],[-21,-39],[-12,8],[9,-11],[-34,10],[-4,14],[23,-7],[-33,22],[-55,167],[-2,-65],[31,-110],[-9,-26],[-30,31],[-43,-1],[6,30],[-23,65],[-10,-24],[-78,62],[3,-35],[39,-7],[48,-64],[-2,-35],[-46,4],[-9,-24],[-94,77],[-57,84],[-86,46],[-62,43],[37,34],[-15,33],[-67,-36],[-103,32],[16,28],[-45,-10],[-101,27],[-106,-21],[-30,30],[-65,29],[17,70],[-26,-29],[-8,-40],[-42,27],[-36,1],[30,43],[-60,-5],[-41,17],[18,14],[-22,27],[-50,-12],[-41,11],[-41,-18],[-2,49],[-25,-93],[19,28],[25,-53],[-24,-34],[-21,-68],[-72,9],[-42,-23],[-9,-43],[-16,10],[-46,-53],[17,51],[-44,-75],[-26,-16],[-42,6],[-38,-18],[-17,28],[50,31],[45,57],[-46,-27],[-38,30],[39,75],[18,67],[-14,34],[33,14],[58,46],[39,-22],[20,11],[67,-16],[-90,52],[8,16],[-43,1],[-9,24],[-59,-60],[-39,-13],[-73,-99],[10,-15],[-35,-32],[5,-22],[-47,-78],[-61,-13],[-2,-33],[-38,-16],[-4,-65],[44,7],[40,-45],[-75,-66],[8,-21],[-33,-25],[-22,-44],[-44,-1],[-33,-56],[-20,14],[-13,-47],[-26,6],[-50,-53],[19,3],[-18,-64],[-25,10],[-35,-50],[-22,18],[-4,-43],[-29,8],[-71,-65],[29,-12],[-44,-59],[-78,-38],[-32,16],[-79,-75],[-22,10],[-35,-31],[-21,6],[11,37],[-22,6],[-33,-91],[-31,-28],[-27,61],[-19,-70],[-24,30],[-26,-54],[-1,54],[74,70],[68,80],[90,22],[8,-21],[51,-10],[-32,29],[20,54],[59,59],[76,50],[28,-14],[-3,49],[34,55],[60,49],[17,170],[41,50],[-3,32],[-100,-52],[-38,39],[9,48],[-42,-57],[13,-48],[-27,-19],[-51,93],[-30,-27],[-29,15],[-13,42],[-45,-41],[-42,-13],[-7,-25],[-78,-2],[44,21],[-8,50],[-23,49],[33,43],[-59,116],[-8,53],[-10,-74],[-104,-37],[-46,6],[-1,33],[-52,55],[-30,9],[-42,41],[73,51],[66,-8],[30,-35],[21,32],[-50,19],[-59,-2],[-53,14],[18,17],[-40,38],[0,-28],[-51,63],[13,23],[-40,15],[39,16],[-29,27],[45,4],[-9,52],[54,76],[24,4],[0,57],[27,57],[42,25],[36,-9],[39,-37],[24,5],[47,43],[30,44],[12,-14],[92,13],[37,47],[-18,95],[-43,35],[60,41],[-36,55],[-24,-31],[-62,-9],[-48,-41],[-50,-18],[-38,29],[-82,1],[-61,-23],[-107,26],[-28,27],[9,33],[-53,48],[39,-3],[38,29],[-119,22],[-64,36],[19,30],[55,30],[22,-5],[29,36],[129,69],[81,28],[74,5],[-17,-76],[23,-25],[141,1],[26,-19],[30,53],[55,-5],[-49,34],[-40,-15],[6,28],[-71,80],[28,11],[31,-36],[-7,-19],[46,-42],[37,17],[40,-31],[49,6],[3,24],[-62,26],[-57,-25],[-36,32],[3,67],[-57,-12],[-116,20],[-12,45],[-33,54],[-122,85],[-47,15],[-56,41],[26,40],[1,59],[54,-3],[125,12],[69,38],[47,52],[-5,50],[16,37],[42,50],[19,-10],[43,53],[17,-16],[81,17],[65,51],[15,-1]],[[1225,9864],[5,-5],[-14,-50],[29,35],[-15,15],[1,4],[-6,1]],[[59,6370],[-24,-7],[19,28],[13,-11],[-8,-10]],[[287,6477],[22,5],[-1,-20],[-11,9],[-10,6]],[[429,6502],[-12,8],[-42,-33],[40,81],[16,-6],[5,41],[36,20],[14,-34],[-41,-29],[-16,-48]],[[696,6724],[-25,-22],[-22,16],[14,20],[33,-14]],[[962,6772],[-3,20],[22,-10],[8,-14],[-27,4]],[[872,6899],[17,-2],[20,-55],[-24,-29],[-48,1],[-26,-34],[-42,-2],[-10,31],[24,16],[14,39],[31,3],[44,32]],[[1277,6898],[3,-7],[-22,8],[11,14],[8,-15]],[[3794,6858],[-8,-29],[-35,76],[9,29],[17,-58],[17,-18]],[[3936,6900],[-8,-41],[-28,31],[9,50],[27,-40]],[[1234,6928],[2,-22],[-33,-33],[24,36],[7,19]],[[1195,6963],[-21,-10],[1,-42],[-26,-2],[-3,42],[49,12]],[[3883,6966],[17,-23],[-11,-28],[-11,42],[5,9]],[[3714,6980],[3,-4],[17,6],[-21,-49],[1,47]],[[3742,7042],[-18,-20],[-15,10],[3,13],[30,-3]],[[3940,7067],[23,-47],[-1,-60],[-21,-38],[-58,53],[15,16],[-2,56],[44,20]],[[3692,7058],[14,32],[37,15],[0,-25],[-51,-22]],[[3820,7114],[37,-16],[-20,-36],[-39,37],[18,45],[4,-30]],[[3805,7161],[-1,-30],[-39,12],[13,21],[27,-3]],[[3850,7145],[21,-30],[-12,-15],[-28,30],[1,42],[18,-27]],[[1747,7193],[-1,-16],[-23,-23],[3,25],[21,14]],[[1788,7183],[6,-9],[-34,2],[5,16],[23,-9]],[[3782,7230],[32,-38],[-23,-19],[-15,3],[6,54]],[[1869,7301],[21,0],[-37,-33],[-5,15],[21,18]],[[3528,7314],[-4,-45],[-21,-3],[12,35],[13,13]],[[3457,7461],[-12,-31],[-9,32],[7,16],[14,-17]],[[1866,7478],[30,-20],[-13,0],[-37,13],[20,7]],[[1906,7514],[13,37
4],[26,-25],[24,9],[14,-30],[-13,-17],[-66,-31],[-35,23],[7,32],[30,2]],[[1935,7551],[-18,13],[28,17],[1,-17],[-11,-13]],[[1148,7583],[-24,-20],[2,29],[35,22],[-13,-31]],[[2369,7855],[-3,-15],[-24,-10],[18,41],[9,-16]],[[2440,7909],[18,-9],[-52,-71],[-41,-27],[20,39],[47,46],[8,22]],[[650,7916],[40,-17],[-4,-45],[17,-26],[-56,-20],[-45,5],[-53,32],[-24,32],[54,4],[7,16],[64,19]],[[2494,7931],[38,-6],[-43,-38],[10,23],[-5,21]],[[2386,7937],[8,-12],[-13,-35],[-11,22],[16,25]],[[44,7916],[-2,-13],[-41,30],[-1,18],[44,-35]],[[2537,7933],[-18,-5],[-1,12],[51,13],[-32,-20]],[[642,6689],[-36,-49],[46,25],[-17,-28],[-112,-71],[-36,-2],[64,32],[13,93],[39,5],[-1,-30],[23,33],[17,-8]],[[3750,6938],[24,70],[-38,-1],[14,49],[-6,53],[-27,4],[-4,31],[42,-3],[10,-53],[30,-11],[61,-137],[13,-94],[-18,-17],[-34,78],[-34,-13],[7,45],[-40,-1]],[[3525,7338],[21,35],[45,-42],[28,-114],[-5,-106],[-49,96],[7,30],[-24,-1],[19,39],[-19,10],[3,30],[-26,23]],[[1900,7449],[-8,-34],[41,37],[13,-32],[-6,-35],[26,2],[-18,-35],[-60,15],[33,-21],[-3,-20],[-45,3],[-51,-58],[-34,-63],[-8,19],[29,70],[-28,-5],[-11,-42],[-28,16],[-1,36],[-23,18],[5,30],[47,47],[21,-8],[11,-44],[7,49],[-11,29],[26,15],[11,-36],[6,53],[37,-27],[-18,33],[40,-12]],[[3507,7412],[24,-58],[-29,-10],[-10,43],[-43,41],[9,29],[48,54],[84,-47],[-1,-41],[-42,-1],[15,-19],[29,10],[8,-53],[-23,-2],[-69,54]],[[3634,7327],[-18,56],[-15,97],[-16,53],[26,-41],[47,-9],[29,-63],[-8,-20],[-24,71],[1,-42],[27,-42],[-1,-59],[-64,-58],[0,42],[16,15]],[[174,8529],[22,-7],[27,22],[33,1],[20,-40],[50,-22],[80,-11],[-10,-26],[-46,4],[-43,-44],[-12,34],[-78,49],[-39,7],[-30,-21],[-28,10],[-10,28],[10,52],[18,-33],[36,-3]],[[3702,7222],[-23,-77],[7,-25],[-29,-30],[-7,56],[23,23],[-25,17],[-9,53],[26,4],[24,-31],[13,12],[-1,7],[-24,50],[22,2],[74,-27],[-1,-63],[-34,44],[25,-57],[-5,-15],[-49,1],[-7,56]]],"bbox":[-173.0093523315348,18.90630573265573,-66.91930887013093,71.31215663572162],"transform":{"scale":[0.010610065352675656,0.005241109201226711],"translate":[-173.0093523315348,18.90630573265573]},"title":"United States of America","version":"2.2.0","copyright":"Copyright (c) 2024 Highsoft AS, Based on data from Natural Earth","copyrightShort":"Natural Earth","copyrightUrl":"http://www.naturalearthdata.com"} 5},{}],3:[function(require,module,exports){ 6'use strict'; 7 8var ToIntegerOrInfinity = require('es-abstract/2024/ToIntegerOrInfinity'); 9var ToLength = require('es-abstract/2024/ToLength'); 10var ToObject = require('es-object-atoms/ToObject'); 11var SameValueZero = require('es-abstract/2024/SameValueZero'); 12var $isNaN = require('es-abstract/helpers/isNaN'); 13var $isFinite = require('es-abstract/helpers/isFinite'); 14var GetIntrinsic = require('get-intrinsic'); 15var callBound = require('call-bind/callBound'); 16var isString = require('is-string'); 17 18var $charAt = callBound('String.prototype.charAt'); 19var $indexOf = GetIntrinsic('%Array.prototype.indexOf%'); // TODO: use callBind.apply without breaking IE 8 20var $max = GetIntrinsic('%Math.max%'); 21 22module.exports = function includes(searchElement) { 23 var fromIndex = arguments.length > 1 ? ToIntegerOrInfinity(arguments[1]) : 0; 24 if ($indexOf && !$isNaN(searchElement) && $isFinite(fromIndex) && typeof searchElement !== 'undefined') { 25 return $indexOf.apply(this, arguments) > -1; 26 } 27 28 var O = ToObject(this); 29 var length = ToLength(O.length); 30 if (length === 0) { 31 return false; 32 } 33 var k = fromIndex >= 0 ? fromIndex : $max(0, length + fromIndex); 34 while (k < length) { 35 if (SameValueZero(searchElement, isString(O) ? $charAt(O, k) : O[k])) { 36 return true; 37 } 38 k += 1; 39 } 40 return false; 41}; 42 43},{"call-bind/callBound":13,"es-abstract/2024/SameValueZero":40,"es-abstract/2024/ToIntegerOrInfinity":43,"es-abstract/2024/ToLength":44,"es-abstract/helpers/isFinite":63,"es-abstract/helpers/isNaN":65,"es-object-atoms/ToObject":80,"get-intrinsic":101,"is-string":118}],4:[function(require,module,exports){ 44'use strict'; 45 46var define = require('define-properties'); 47var RequireObjectCoercible = require('es-object-atoms/RequireObjectCoercible'); 48var callBind = require('call-bind'); 49var callBound = require('call-bind/callBound'); 50 51var implementation = require('./implementation'); 52var getPolyfill = require('./polyfill'); 53var polyfill = callBind.apply(getPolyfill()); 54var shim = require('./shim'); 55 56var $slice = callBound('Array.prototype.slice'); 57 58/* eslint-disable no-unused-vars */ 59var boundShim = function includes(array, searchElement) { 60/* eslint-enable no-unused-vars */ 61 RequireObjectCoercible(array); 62 return polyfill(array, $slice(arguments, 1)); 63}; 64define(boundShim, { 65 getPolyfill: getPolyfill, 66 implementation: implementation, 67 shim: shim 68}); 69 70module.exports = boundShim; 71 72},{"./implementation":3,"./polyfill":5,"./shim":6,"call-bind":14,"call-bind/callBound":13,"define-properties":16,"es-object-atoms/RequireObjectCoercible":79}],5:[function(require,module,exports){ 73'use strict'; 74 75var implementation = require('./implementation'); 76 77module.exports = function getPolyfill() { 78 if ( 79 Array.prototype.includes 80 && Array(1).includes(undefined) // https://bugzilla.mozilla.org/show_bug.cgi?id=1767541 81 ) { 82 return Array.prototype.includes; 83 } 84 return implementation; 85}; 86 87},{"./implementation":3}],6:[function(require,module,exports){ 88'use strict'; 89 90var define = require('define-properties'); 91var getPolyfill = require('./polyfill'); 92 93module.exports = function shimArrayPrototypeIncludes() { 94 var polyfill = getPolyfill(); 95 define( 96 Array.prototype, 97 { includes: polyfill }, 98 { includes: function () { return Array.prototype.includes !== polyfill; } } 99 ); 100 return polyfill; 101}; 102 103},{"./polyfill":5,"define-properties":16}],7:[function(require,module,exports){ 104'use strict'; 105 106var Call = require('es-abstract/2024/Call'); 107var Get = require('es-abstract/2024/Get'); 108var HasProperty = require('es-abstract/2024/HasProperty'); 109var IsCallable = require('es-abstract/2024/IsCallable'); 110var LengthOfArrayLike = require('es-abstract/2024/LengthOfArrayLike'); 111var ToObject = require('es-object-atoms/ToObject'); 112var ToString = require('es-abstract/2024/ToString'); 113 114var callBound = require('call-bind/callBound'); 115var isString = require('is-string'); 116var $Object = require('es-object-atoms'); 117var $TypeError = require('es-errors/type'); 118
119// Check failure of by-index access of string characters (IE < 9) and failure of `0 in boxedString` (Rhino) 120var boxedString = $Object('a'); 121var splitString = boxedString[0] !== 'a' || !(0 in boxedString); 122 123var strSplit = callBound('%String.prototype.split%'); 124 125module.exports = function reduce(callbackfn) { 126 var O = ToObject(this); 127 var self = splitString && isString(O) ? strSplit(O, '') : O; 128 var len = LengthOfArrayLike(self); 129 130 // If no callback function or if callback is not a callable function 131 if (!IsCallable(callbackfn)) { 132 throw new $TypeError('Array.prototype.reduce callback must be a function'); 133 } 134 135 if (len === 0 && arguments.length < 2) { 136 throw new $TypeError('reduce of empty array with no initial value'); 137 } 138 139 var k = 0; 140 141 var accumulator; 142 var Pk, kPresent; 143 if (arguments.length > 1) { 144 accumulator = arguments[1]; 145 } else { 146 kPresent = false; 147 while (!kPresent && k < len) { 148 Pk = ToString(k); 149 kPresent = HasProperty(O, Pk); 150 if (kPresent) { 151 accumulator = Get(O, Pk); 152 } 153 k += 1; 154 } 155 if (!kPresent) { 156 throw new $TypeError('reduce of empty array with no initial value'); 157 } 158 } 159 160 while (k < len) { 161 Pk = ToString(k); 162 kPresent = HasProperty(O, Pk); 163 if (kPresent) { 164 var kValue = Get(O, Pk); 165 accumulator = Call(callbackfn, void undefined, [accumulator, kValue, k, O]); 166 } 167 k += 1; 168 } 169 170 return accumulator; 171}; 172 173},{"call-bind/callBound":13,"es-abstract/2024/Call":24,"es-abstract/2024/Get":27,"es-abstract/2024/HasProperty":28,"es-abstract/2024/IsCallable":31,"es-abstract/2024/LengthOfArrayLike":36,"es-abstract/2024/ToString":48,"es-errors/type":77,"es-object-atoms":81,"es-object-atoms/ToObject":80,"is-string":118}],8:[function(require,module,exports){ 174'use strict'; 175 176var define = require('define-properties'); 177var RequireObjectCoercible = require('es-abstract/2024/RequireObjectCoercible'); 178var callBind = require('call-bind'); 179var callBound = require('call-bind/callBound'); 180 181var implementation = require('./implementation'); 182 183var getPolyfill = require('./polyfill'); 184var polyfill = callBind.apply(getPolyfill()); 185 186var shim = require('./shim'); 187 188var $slice = callBound('%Array.prototype.slice%'); 189 190// eslint-disable-next-line no-unused-vars 191var boundShim = function reduce(array, callbackfn) { 192 RequireObjectCoercible(array); 193 return polyfill(array, $slice(arguments, 1)); 194}; 195define(boundShim, { 196 getPolyfill: getPolyfill, 197 implementation: implementation, 198 shim: shim 199}); 200 201module.exports = boundShim; 202 203},{"./implementation":7,"./polyfill":9,"./shim":10,"call-bind":14,"call-bind/callBound":13,"define-properties":16,"es-abstract/2024/RequireObjectCoercible":38}],9:[function(require,module,exports){ 204'use strict'; 205 206var arrayMethodBoxesProperly = require('es-array-method-boxes-properly'); 207 208var implementation = require('./implementation'); 209 210module.exports = function getPolyfill() { 211 var method = Array.prototype.reduce; 212 return arrayMethodBoxesProperly(method) ? method : implementation; 213}; 214 215},{"./implementation":7,"es-array-method-boxes-properly":70}],10:[function(require,module,exports){ 216'use strict'; 217 218var define = require('define-properties'); 219var getPolyfill = require('./polyfill'); 220 221module.exports = function shimArrayPrototypeReduce() { 222 var polyfill = getPolyfill(); 223 define( 224 Array.prototype, 225 { reduce: polyfill }, 226 { reduce: function () { return Array.prototype.reduce !== polyfill; } } 227 ); 228 return polyfill; 229}; 230 231},{"./polyfill":9,"define-properties":16}],11:[function(require,module,exports){ 232/* 233 * JavaScript Canvas to Blob 234 * https://github.com/blueimp/JavaScript-Canvas-to-Blob 235 * 236 * Copyright 2012, Sebastian Tschan 237 * https://blueimp.net 238 * 239 * Licensed under the MIT license: 240 * https://opensource.org/licenses/MIT 241 * 242 * Based on stackoverflow user Stoive's code snippet: 243 * http://stackoverflow.com/q/4998908 244 */ 245 246/* global define, Uint8Array, ArrayBuffer, module */ 247 248;(function (window) { 249 'use strict' 250 251 var CanvasPrototype = 252 window.HTMLCanvasElement && window.HTMLCanvasElement.prototype 253 var hasBlobConstructor = 254 window.Blob && 255 (function () { 256 try { 257 return Boolean(new Blob()) 258 } catch (e) { 259 return false 260 } 261 })() 262 var hasArrayBufferViewSupport = 263 hasBlobConstructor && 264 window.Uint8Array && 265 (function () {
266 try { 267 return new Blob([new Uint8Array(100)]).size === 100 268 } catch (e) { 269 return false 270 } 271 })() 272 var BlobBuilder = 273 window.BlobBuilder || 274 window.WebKitBlobBuilder || 275 window.MozBlobBuilder || 276 window.MSBlobBuilder 277 var dataURIPattern = /^data:((.*?)(;charset=.*?)?)(;base64)?,/ 278 var dataURLtoBlob = 279 (hasBlobConstructor || BlobBuilder) && 280 window.atob && 281 window.ArrayBuffer && 282 window.Uint8Array && 283 function (dataURI) { 284 var matches, 285 mediaType, 286 isBase64, 287 dataString, 288 byteString, 289 arrayBuffer, 290 intArray, 291 i, 292 bb 293 // Parse the dataURI components as per RFC 2397 294 matches = dataURI.match(dataURIPattern) 295 if (!matches) { 296 throw new Error('invalid data URI') 297 } 298 // Default to text/plain;charset=US-ASCII 299 mediaType = matches[2] 300 ? matches[1] 301 : 'text/plain' + (matches[3] || ';charset=US-ASCII') 302 isBase64 = !!matches[4] 303 dataString = dataURI.slice(matches[0].length) 304 if (isBase64) { 305 // Convert base64 to raw binary data held in a string: 306 byteString = atob(dataString) 307 } else { 308 // Convert base64/URLEncoded data component to raw binary: 309 byteString = decodeURIComponent(dataString) 310 } 311 // Write the bytes of the string to an ArrayBuffer: 312 arrayBuffer = new ArrayBuffer(byteString.length) 313 intArray = new Uint8Array(arrayBuffer) 314 for (i = 0; i < byteString.length; i += 1) { 315 intArray[i] = byteString.charCodeAt(i) 316 } 317 // Write the ArrayBuffer (or ArrayBufferView) to a blob: 318 if (hasBlobConstructor) { 319 return new Blob([hasArrayBufferViewSupport ? intArray : arrayBuffer], { 320 type: mediaType 321 }) 322 } 323 bb = new BlobBuilder() 324 bb.append(arrayBuffer) 325 return bb.getBlob(mediaType) 326 } 327 if (window.HTMLCanvasElement && !CanvasPrototype.toBlob) { 328 if (CanvasPrototype.mozGetAsFile) { 329 CanvasPrototype.toBlob = function (callback, type, quality) { 330 var self = this 331 setTimeout(function () { 332 if (quality && CanvasPrototype.toDataURL && dataURLtoBlob) { 333 callback(dataURLtoBlob(self.toDataURL(type, quality))) 334 } else { 335 callback(self.mozGetAsFile('blob', type)) 336 } 337 }) 338 } 339 } else if (CanvasPrototype.toDataURL && dataURLtoBlob) { 340 if (CanvasPrototype.msToBlob) { 341 CanvasPrototype.toBlob = function (callback, type, quality) { 342 var self = this 343 setTimeout(function () { 344 if ( 345 ((type && type !== 'image/png') || quality) && 346 CanvasPrototype.toDataURL && 347 dataURLtoBlob 348 ) { 349 callback(dataURLtoBlob(self.toDataURL(type, quality))) 350 } else { 351 callback(self.msToBlob(type)) 352 } 353 }) 354 } 355 } else { 356 CanvasPrototype.toBlob = function (callback, type, quality) { 357 var self = this 358 setTimeout(function () { 359 callback(dataURLtoBlob(self.toDataURL(type, quality))) 360 }) 361 } 362 } 363 } 364 } 365 if (typeof define === 'function' && define.amd) { 366 define(function () { 367 return dataURLtoBlob 368 }) 369 } else if (typeof module === 'object' && module.exports) { 370 module.exports = dataURLtoBlob 371 } else { 372 window.dataURLtoBlob = dataURLtoBlob 373 } 374})(window) 375 376},{}],12:[function(require,module,exports){ 377 378},{}],13:[function(require,module,exports){ 379'use strict'; 380 381var GetIntrinsic = require('get-intrinsic'); 382 383var callBind = require('./'); 384 385var $indexOf = callBind(GetIntrinsic('String.prototype.indexOf')); 386 387module.exports = function callBoundIntrinsic(name, allowMissing) { 388 var intrinsic = GetIntrinsic(name, !!allowMissing); 389 if (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) { 390 return callBind(intrinsic); 391 } 392 return intrinsic; 393}; 394 395},{"./":14,"get-intrinsic":101}],14:[function(require,module,exports){ 396'use strict'; 397 398var bind = require('function-bind'); 399var GetIntrinsic = require('get-intrinsic'); 400var setFunctionLength = require('set-function-length'); 401 402var $TypeError = require('es-errors/type'); 403var $apply = GetIntrinsic('%Function.prototype.apply%'); 404var $call = GetIntrinsic('%Function.prototype.call%');
405var $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply); 406 407var $defineProperty = require('es-define-property'); 408var $max = GetIntrinsic('%Math.max%'); 409 410module.exports = function callBind(originalFunction) { 411 if (typeof originalFunction !== 'function') { 412 throw new $TypeError('a function is required'); 413 } 414 var func = $reflectApply(bind, $call, arguments); 415 return setFunctionLength( 416 func, 417 1 + $max(0, originalFunction.length - (arguments.length - 1)), 418 true 419 ); 420}; 421 422var applyBind = function applyBind() { 423 return $reflectApply(bind, $apply, arguments); 424}; 425 426if ($defineProperty) { 427 $defineProperty(module.exports, 'apply', { value: applyBind }); 428} else { 429 module.exports.apply = applyBind; 430} 431 432},{"es-define-property":71,"es-errors/type":77,"function-bind":100,"get-intrinsic":101,"set-function-length":142}],15:[function(require,module,exports){ 433'use strict'; 434 435var $defineProperty = require('es-define-property'); 436 437var $SyntaxError = require('es-errors/syntax'); 438var $TypeError = require('es-errors/type'); 439 440var gopd = require('gopd'); 441 442/** @type {import('.')} */ 443module.exports = function defineDataProperty( 444 obj, 445 property, 446 value 447) { 448 if (!obj || (typeof obj !== 'object' && typeof obj !== 'function')) { 449 throw new $TypeError('`obj` must be an object or a function`'); 450 } 451 if (typeof property !== 'string' && typeof property !== 'symbol') { 452 throw new $TypeError('`property` must be a string or a symbol`'); 453 } 454 if (arguments.length > 3 && typeof arguments[3] !== 'boolean' && arguments[3] !== null) { 455 throw new $TypeError('`nonEnumerable`, if provided, must be a boolean or null'); 456 } 457 if (arguments.length > 4 && typeof arguments[4] !== 'boolean' && arguments[4] !== null) { 458 throw new $TypeError('`nonWritable`, if provided, must be a boolean or null'); 459 } 460 if (arguments.length > 5 && typeof arguments[5] !== 'boolean' && arguments[5] !== null) { 461 throw new $TypeError('`nonConfigurable`, if provided, must be a boolean or null'); 462 } 463 if (arguments.length > 6 && typeof arguments[6] !== 'boolean') { 464 throw new $TypeError('`loose`, if provided, must be a boolean'); 465 } 466 467 var nonEnumerable = arguments.length > 3 ? arguments[3] : null; 468 var nonWritable = arguments.length > 4 ? arguments[4] : null; 469 var nonConfigurable = arguments.length > 5 ? arguments[5] : null; 470 var loose = arguments.length > 6 ? arguments[6] : false; 471 472 /* @type {false | TypedPropertyDescriptor<unknown>} */ 473 var desc = !!gopd && gopd(obj, property); 474 475 if ($defineProperty) { 476 $defineProperty(obj, property, { 477 configurable: nonConfigurable === null && desc ? desc.configurable : !nonConfigurable, 478 enumerable: nonEnumerable === null && desc ? desc.enumerable : !nonEnumerable, 479 value: value, 480 writable: nonWritable === null && desc ? desc.writable : !nonWritable 481 }); 482 } else if (loose || (!nonEnumerable && !nonWritable && !nonConfigurable)) { 483 // must fall back to [[Set]], and was not explicitly asked to make non-enumerable, non-writable, or non-configurable 484 obj[property] = value; // eslint-disable-line no-param-reassign 485 } else { 486 throw new $SyntaxError('This environment does not support defining a property as non-configurable, non-writable, or non-enumerable.'); 487 } 488}; 489 490},{"es-define-property":71,"es-errors/syntax":76,"es-errors/type":77,"gopd":102}],16:[function(require,module,exports){ 491'use strict'; 492 493var keys = require('object-keys'); 494var hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol'; 495 496var toStr = Object.prototype.toString; 497var concat = Array.prototype.concat; 498var defineDataProperty = require('define-data-property'); 499 500var isFunction = function (fn) { 501 return typeof fn === 'function' && toStr.call(fn) === '[object Function]'; 502}; 503 504var supportsDescriptors = require('has-property-descriptors')(); 505 506var defineProperty = function (object, name, value, predicate) { 507 if (name in object) { 508 if (predicate === true) { 509 if (object[name] === value) { 510 return; 511 } 512 } else if (!isFunction(predicate) || !predicate()) { 513 return; 514 } 515 } 516 517 if (supportsDescriptors) { 518 defineDataProperty(object, name, value, true); 519 } else { 520 defineDataProperty(object, name, value); 521 } 522}; 523 524var defineProperties = function (object, map) { 525 var predicates = arguments.length > 2 ? arguments[2] : {}; 526 var props = keys(map); 527 if (hasSymbols) { 528 props = concat.call(props, Object.getOwnPropertySymbols(map)); 529 } 530 for (var i = 0; i < props.length; i += 1) { 531 defineProperty(object, props[i], map[props[i]], predicates[props[i]]); 532 } 533}; 534 535defineProperties.supportsDescriptors = !!supportsDescriptors; 536 537module.exports = defineProperties; 538 539},{"define-data-property":15,"has-property-descriptors":103,"object-keys":123}],17:[function(require,module,exports){ 540var e;e=function(e){function O(e){this.series&&((o=Array.isArray(e.yAxis)?e.yAxis:[e.yAxis]).forEac
540h(function(e){e.yType=null}),this.series.forEach(function(e){var t;e.baseSeries||(t=void 0!==e.options.yAxis?e.options.yAxis:0,o[t].yType=null==o[t].yType||e.options.yType==o[t].yType?e.options.yType:I.yTypes.mixed)})),e.minXType=r.call(this,n),e.maxXType=r.call(this,s);var o,t=z(e.xAxis);switch(t[0].minRange=void 0!==t[0].minRange?t[0].minRange:I.xMinRanges[e.minXType],e.minXType){case I.xTypes.annual:t[0].minTickInterval=31536e6;break;case I.xTypes.monthly:t[0].minTickInterval=24192e5;break;case I.xTypes.weekly:t[0].minTickInterval=6048e5;break;case I.xTypes.daily:t[0].minTickInterval=864e5;break;case I.xTypes.quarterly:t[0].minTickInterval=7776e6;break;case I.xTypes.hourly:t[0].minTickInterval=36e5;break;default:t[0].minTickInterval=null}}function i(e){for(var t,o,i,r,a,s,n,l,p,h,d,c,g="datetime"==z(this.options.xAxis)[0].type,y=!1,u=!1,x=!0,m=t=o=i=!0,f=r=a=s=null,b=!0,v=e.xData||e.data,C=e.yData||e.data,T=0;T<v.length;T++){x=!1,g&&(k=(c=new Date(void 0!==v[T]&&void 0!==v[T].x?v[T].x:v[T])).getUTCMonth(),l=c.getUTCDate(),p=c.getUTCDay(),h=c.getUTCHours(),c=c.getHours(),null!==f&&null!==r&&null!==a&&null!==s&&(m&=k==f,o&=p==a,i&=h==s||c==n,t&=l==r)&&i&&!m&&((k-f)%3==0?b&=!0:b=!1),f=k,r=l,a=p,s=h,n=c);var k=C[T]&&void 0!==C[T].y?C[T].y:C[T];y|=k<0,u|=0<k}return{xType:d=x?d:g?m&&t&&i?I.xTypes.annual:t&&i&&b?I.xTypes.quarterly:t&&i?I.xTypes.monthly:o&&i?I.xTypes.weekly:i?I.xTypes.daily:I.xTypes.hourly:I.xTypes.category,yType:y&&u||"value"==e.options.compare||"percent"==e.options.compare?I.yTypes.mixed:y?I.yTypes.negative:I.yTypes.positive}}function r(e){for(var t,o,i=0;i<this.series.length;i++)o=this.series[i].options.xType,t=isNaN(t)?o:e(t,o);return t}function a(){var e=!!this.options.chart.lineUpYAxisZeros&&function(){var e,t,o,i,r=!1,a=[],s=!0,n=!0,l=void 0,p={},h=this.yAxis;if(this.axisZerosAligned++,1<h.length){for(i=0;i<this.yAxis.length;i++)o=h[i],o=o.getExtremes(),a[i]={min:e=Math.abs(o.min),max:o=Math.abs(o.max),axisLength:t=o+e,positiveRatio:Math.abs(o)/t,negativeRatio:Math.abs(e)/t};for(i=0;i<a.length;i++){var d=a[i].positiveRatio,c=a[i].negativeRatio,g=Math.abs(d-c);!isNaN(d)&&!isNaN(c)&&(s&=1==d,n&=1==c,void 0===l||g<l)&&(l=g,p={positiveRatio:d,negativeRatio:c})}for(1!=l||s||n||(p={positiveRatio:.5,negativeRatio:.5}),i=0;i<this.yAxis.length;i++)a[i].positiveRatio==p.positiveRatio||isNaN(a[i].min)||isNaN(a[i].max)||(r=!0,p.positiveRatio<a[i].positiveRatio?h[i].setExtremes(a[i].max*p.negativeRatio/p.positiveRatio*-1,a[i].max,!1):h[i].setExtremes(-1*a[i].min,a[i].min*p.positiveRatio/p.negativeRatio,!1))}r&&y.apply(this);return this.axisZerosAligned--,r}.apply(this);l&&(l=!1,e||y.apply(this))}function y(){for(var e=this,t=Array.isArray(e.yAxis)?e.yAxis:[e.yAxis],o=0;o<t.length;o++)t[o].isDirty=!0;for(o=0;o<e.series.length;o++)e.series[o].isDirty=!0;null!==e.redraw?e.redraw(!1):e.detachedredraw(!1)}function p(){if(this.logoElement&&Array.isArray(this.logoElement))for(var e=this.logoElement.length-1;0<=e;e--)this.logoElement[e].destroy(),this.logoElement.pop();switch(this.options.chart.logo){case I.logos.eia:!function(){var e,t,o={eia_logo1:I.eiaColors.yellow,eia_logo2:I.eiaColors.green,eia_logo3:I.eiaColors.blue,eia_logo4:I.eiaColors.darkGrey,eia_logo5:I.eiaColors.darkGrey,eia_logo6:"white"},i={eia_logo3:function(e,t,o){return["M",e+41.61*o,t+8.68*o,"C",e+34.49*o,t+4.67*o,e+23.03*o,t+5.18*o,e+1.84*o,t+17.02*o,"C",e+.68*o,t+17.67*o,e+.67*o,t+17.31*o,e+.95*o,t+16.97*o,"C",e+2.42*o,t+15.22*o,e+21.34*o,t+-.32*o,e+38.13*o,t+1.15*o,"C",e+43.03*o,t+1.58*o,e+51.75*o,t+4.42*o,e+53.2*o,t+13.88*o,"C",e+54.65*o,t+23.32*o,e+50.36*o,t+28.88*o,e+49.07*o,t+29.18*o,"C",e+50.78*o,t+22.6*o,e+49.67*o,t+13.22*o,e+41.61*o,t+8.68*o,"Z"]},eia_logo4:function(e,t,o){return["M",e+20.43*o,t+17.17*o,"C",e+20.43*o,t+19.1946*o,e+22.6217*o,t+20.4599*o,e+24.375*o,t+19.4476*o,"C",e+25.1887*o,t+18.9778*o,e+25.69*o,t+18.1096*o,e+25.69*o,t+17.17*o,"C",e+25.69*o,t+15.1454*o,e+23.4983*o,t+13.8801*o,e+21.745*o,t+14.8924*o,"C",e+20.9313*o,t+15.3622*o,e+20.43*o,t+16.2304*o,e+20.43*o,t+17.17*o]},eia_logo5:function(e,t,o){return["M",e+17.69*o,t+29.88*o,"C",e+17.75*o,t+24.43*o,e+14.74*o,t+20.56*o,e+9.3*o,t+20.58*o,"C",e+3.97*o,t+20.52*o,e+.73*o,t+24.64*o,e+.81*o,t+29.89*o,"C",e+.81*o,t+32.7*o,e+1.61*o,t+34.96*o,e+3.2*o,t+36.66*o,"C",e+5.2*o,t+38.96*o,e+9.01*o,t+39.67*o,e+12.07*o,t+38.9*o,"C",e+14.28*o,t+38.37*o,e+16.01*o,t+36.87*o,e+17.27*o,t+34.96*o,"L",e+13.8*o,t+33.05*o,"C",e+11.22*o,t+37.35*o,e+5.28*o,t+35.86*o,e+5.05*o,t+30.83*o,"H",e+17.67*o,"L",e+17.69*o,t+29.87*o,"Z","M",e+5.32*o,t+27.51*o,"C",e+6.28*o,t+23.27*o,e+12.61*o,t+23.07*o,e+13.5*o,t+27.51*o,"H",e+5.31*o,"Z","M",e+21.02*o,t+22.35*o,"V",t+39.04*o,"H",e+25.1*o,"V",t+22.35*o,"H",e+21.02*o,"Z","M",e+44.23*o,t+28.13*o,"C",e+44.25*o,t+21.79*o,e+40.9*o,t+20.58*o,e+38.04*o,t+20.37*o,"C",e+33.32*o,t+20.02*o,e+29.84*o,t+22.91*o,e+29.84*o,t+22.91*o,"L",e+32.43*o,t+25.56*o,"C",e+35.19*o,t+23.35*o,e+39.85*o,t+23.81*o,e+40.22*o,t+26.69*o,"C",e+40.22*o,t+26.69*o,e+36.14*o,t+27.61*o,e+35.24*o,t+27.77*o,"C",e+32.4*o,t+28.37*o,e+30.54*o,t+28.62*o,e+29.05*o,t+30.72*o,"C",e+27.76*o,t+32.7
5405*o,e+28.1*o,t+35.86*o,e+30*o,t+37.54*o,"C",e+32.63*o,t+39.87*o,e+38.07*o,t+39.87*o,e+40.8*o,t+36.72*o,"C",e+40.8*o,t+36.72*o,e+41.14*o,t+38.49*o,e+41.38*o,t+39.04*o,"H",e+45.49*o,"C",e+43.76*o,t+35.07*o,e+44.22*o,t+30.81*o,e+44.23*o,t+28.13*o,"Z","M",e+40.22*o,t+30.98*o,"C",e+39.99*o,t+32.84*o,e+38.74*o,t+35.09*o,e+35.33*o,t+35.53*o,"C",e+33.23*o,t+35.8*o,e+31.23*o,t+34.43*o,e+32.28*o,t+32.5*o,"C",e+32.61*o,t+31.9*o,e+33.36*o,t+31.43*o,e+34.34*o,t+31.29*o,"C",e+34.94*o,t+31.2*o,e+35.61*o,t+31.13*o,e+36.31*o,t+31.01*o,"C",e+37.85*o,t+30.76*o,e+39.34*o,t+30.47*o,e+40.22*o,t+30.13*o,"C",e+40.22*o,t+30.13*o,e+40.25*o,t+30.76*o,e+40.22*o,t+30.98*o,"Z"]},eia_logo6:function(e,t,o){return["M",e+5.32*o,t+27.51*o,"C",e+6.28*o,t+23.27*o,e+12.61*o,t+23.07*o,e+13.5*o,t+27.51*o,"H",e+5.31*o,"Z","M",e+40.22*o,t+30.98*o,"C",e+39.99*o,t+32.84*o,e+38.74*o,t+35.09*o,e+35.33*o,t+35.53*o,"C",e+33.23*o,t+35.8*o,e+31.23*o,t+34.43*o,e+32.28*o,t+32.5*o,"C",e+32.61*o,t+31.9*o,e+33.36*o,t+31.43*o,e+34.34*o,t+31.29*o,"C",e+34.94*o,t+31.2*o,e+35.61*o,t+31.13*o,e+36.31*o,t+31.01*o,"C",e+37.85*o,t+30.76*o,e+39.34*o,t+30.47*o,e+40.22*o,t+30.13*o,"C",e+40.22*o,t+30.13*o,e+40.25*o,t+30.76*o,e+40.22*o,t+30.98*o,"Z"]}};Array.isArray(this.logoElement)||(this.logoElement=[]);for(e in i)i.hasOwnProperty(e)&&(this.renderer.symbols[e]=i[e],t=this.renderer.symbol(e,0,0,u).attr({stroke:"none",fill:o[e],class:"highcharts-eia-logo"}).add().align({verticalAlign:"bottom",align:"left",y:-(x+m),x:m}),this.logoElement.push(t))}.call(this);break;case I.logos.reuters:!function(){Array.isArray(this.logoElement)||(this.logoElement=[]);this.logoElement.push(this.renderer.image(f,0,0,v,b).align({verticalAlign:"bottom",align:"left",y:-(b+C),x:C}).add())}.call(this);break;case I.logos.bloomberg:!function(){return!1}.call(this);break;case I.logos.none:}}function h(e,t){var o="",i=new Date(t);switch(e){case I.xTypes.annual:o=i.getUTCFullYear().toString();break;case I.xTypes.monthly:o=i.getUTCFullYear().toString()+(i.getUTCMonth()+1<10?"0":"")+(i.getUTCMonth()+1).toString();break;case I.xTypes.weekly:case I.xTypes.daily:o=i.getUTCFullYear().toString()+(i.getUTCMonth()+1<10?"0":"")+(i.getUTCMonth()+1).toString()+(i.getUTCDate()<10?"0":"")+i.getUTCDate().toString();break;case I.xTypes.quarterly:o=i.getUTCFullYear().toString()+"Q"+Math.ceil((i.getUTCMonth()+1)/3).toString();break;case I.xTypes.hourly:o=i.getUTCFullYear().toString()+(i.getUTCMonth()+1<10?"0":"")+(i.getUTCMonth()+1).toString()+(i.getUTCDate()<10?"0":"")+i.getUTCDate().toString()+"T"+(i.getUTCHours()<10?"0":"")+i.getUTCHours()+"Z"}return o}var I,t,o,z,d,s,n,c,g,l,u,x,m,f,b,v,C;e=(I=e).Chart,I.StockChart,t=I.extend,I.Axis,I.pick,I.PREFIX,I.Tick,(o=Math).round,o.floor,o.ceil,o.max,o.min,o.abs,o.cos,o.sin,o.PI,z=I.splat||function(e){return e=Array.isArray(e)?e:[e]},d=I.merge,s=Math.max,n=Math.min,Math.pow,Math.abs,document,window,o=null!=navigator.userAgent.match(/MSIE/),t(I,{eia_theme_version:"1.1.3",logos:{none:0,eia:1,reuters:2,bloomberg:3},eia_projections_line:{color:"#888",dashStyle:"Dash",width:1,zIndex:3},eia_projections_label:{color:"#888",fontWeight:"bold"},eia_zero_axis_line:{color:"#333",dashStyle:"Solid",zIndex:1,width:1,value:0}}),t(I,{eiaColors:{extraLightGreen:"#d7e5cc",lightGreen:"#a6c68e",green:"#5d9732",darkGreen:"#416a23",extraLightBlue:"#bfe5f5",lightBlue:"#73c5e9",blue:"#0096d7",darkBlue:"#006997",extraLightBrown:"#efdcca",lightBrown:"#dbb28a",brown:"#bd732a",darkBrown:"#84511d",extraLightYellow:"#fff1c0",lightYellow:"#ffe381",yellow:"#ffc702",darkYellow:"#cc9900",extraLightRed:"#e8cccf",lightRed:"#cc8f96",red:"#a33340",darkRed:"#72242d",extraLightPurple:"#e5e2eb",lightPurple:"#c2bbd0",purple:"#7d6d9b",darkPurple:"#49366e",extraLightOrange:"#ffe2d2",lightOrange:"#ffb084",orange:"#ff6f1f",darkOrange:"#b34e16",extraLightGrey:"#e0e0e0",lightGrey:"#adadad",grey:"#707070",darkGrey:"#333333"},eia_blue:"#0096d7",eia_tan:"#bd732a",eia_green:"#5D9732",eia_yellow:"#ffc702",eia_red:"#a33340",eia_brown:"#bd732a",eia_lt_blue:"#73c5e9",eia_lt_green:"#a6c68e",eia_dk_red:"#72242d",eia_grey:"#707070",eia_dk_blue:"#006997",eia_dk_green:"#416a23",eia_dk_grey:"#333333",eia_mut_purple:"#746395",eia_mut_red:"#b55c66",eia_mut_blue:"#66a0b9",eia_mut_brown:"#a27d33",eia_mut_green:"#92a753",eia_mut_blue_sub_sh1:"#99c0d0",eia_mut_blue_sub_sh2:"#66a0b9",eia_mut_blue_sub_sh3:"#3380a2",eia_mut_blue_sub_sh4:"#003953"}),t(I,{eiaColorPalettes:{default:[I.eiaColors.blue,I.eiaColors.brown,I.eiaColors.green,I.eiaColors.purple,I.eiaColors.orange,I.eiaColors.yellow,I.eiaColors.red,I.eiaColors.grey,I.eiaColors.lightBlue,I.eiaColors.lightBrown,I.eiaColors.lightGreen,I.eiaColors.lightPurple,I.eiaColors.lightOrange,I.eiaColors.lightYellow,I.eiaColors.lightRed,I.eiaColors.lightGrey,I.eiaColors.extraLightBlue,I.eiaColors.extraLightBrown,I.eiaColors.extraLightGreen,I.eiaColors.extraLightPurple,I.eiaColors.extraLightOrange,I.eiaColors.extraLightYellow,I.eiaColors.extraLightRed,I.eiaColors.extraLightGrey,I.eiaColors.darkBlue,I.eiaColors.darkBrown,I.eiaColors.darkGreen,I.eiaColors.darkPurple,I.eiaColors.darkOrange,I.eiaColors.darkYellow,I.eiaColors.darkRed,I.eiaColors.darkGrey],green:[I.eiaColors.green,I.eiaColors.lightGreen,I.eiaColors.extraLightGreen,I.eiaColors.darkGreen],blue:[I.eiaColors.blue,I.eiaColors.lightBlue,I.eiaColors.extraLightBlue,I.eiaColors.darkBlue],brown:[I.eiaColors.brown,I.eiaColors.lightBrown,I.eiaColors.extraLightBrown,I.eiaColors.darkBrown],yellow:[I.eiaColors.yellow,I.eiaColors.lightYellow,I.eiaColors.extraLightYellow,I.eiaColors.darkYellow],red:[I.eiaColors.red,I.eiaColors.lightRed,I.eiaColors.extraLightRed,I.eiaColors.darkRed],purple:[I.eiaColors.purple,I.eiaColors.lightPurple,I.eiaColors.extraLightPurple,I.eiaColors.darkPurple],orange:[I.eiaColors.orange,I.eiaColors.lightOrange,I.eiaColors.extraLightOrange,I.eiaColors.darkOrange],grey:[I.eiaColors.grey,I.eiaColors.lightGrey,I.eiaColors.extraLightGrey,I.eiaColors.darkGrey]}}
540),t(I,{eiaTheme:{chart:{animation:!o,plotBackgroundColor:"rgba(255, 255, 255, .1)",spacingBottom:20,logo:I.logos.eia,events:{redraw:function(){!function(){var e,t,o;for(o=0;o<this.series.length;o++)(e=this.series[o]).options.hasOwnProperty("xType")||(t=i.call(this,e),e.options.xType=t.xType,t.yType===I.yTypes.mixed&&(t=e.yAxis.getExtremes(),e.yAxis.setExtremes(t.min||null,t.max,!1)));a.apply(this)}.apply(this,arguments)},load:function(){!function(){this.options.originalSeriesOptions||(this.options.originalSeriesOptions=this.series.map(function(e){return d({color:e.color},e.options)}));a.apply(this)}.apply(this,arguments)}},style:{fontFamily:"Arial, Verdana, Helvetica, sans-serif"},lineUpYAxisZeros:!1,borderColor:"#ffffff",breakLines:!0},colors:I.eiaColorPalettes.default,title:{align:"left",margin:35,style:{color:"#333",fontSize:"16px",fontWeight:"bold",fontFamily:"Arial, Verdana, Helvetica, sans-serif",wordWrap:"break-word"}},subtitle:{style:{color:"#333",fontSize:"12px",fontFamily:"Arial, Verdana, Helvetica, sans-serif"},align:"left",floating:!1},credits:{style:{color:"#888",fontSize:"11px"},text:"Data source: U.S. Energy Information Administration",href:"http://www.eia.gov",position:{align:"left",verticalAlign:"bottom",x:42,y:-5}},labels:{style:{fontSize:"12px",color:"#333"}},xAxis:{labels:{style:{fontSize:"12px",color:"#333"}},endOnTick:!1,startOnTick:!1,tickColor:"#333",lineColor:"#333",title:{style:{color:"#888",fontWeight:"bold",fontSize:"12px",fontFamily:"Arial, Verdana, Helvetica, sans-serif"}},dateTimeLabelFormats:{day:"%e %b. %Y",week:"%e %b. %Y",month:"%b '%y",year:"%Y"}},yAxis:{labels:{style:{fontSize:"12px",color:"#333",fontFamily:"Arial, Verdana, Helvetica, sans-serif"}},lineColor:"#A0A0A0",minorTickInterval:null,tickColor:"#A0A0A0",tickWidth:0,title:{align:"above",style:{color:"#888",fontWeight:"bold",fontSize:"12px"}}},tooltip:{backgroundColor:"rgba(255, 255, 255, 0.75)",style:{fontSize:"12px",color:"#333333",padding:5},formatter:function(){return I.universalTooltipFormatter.apply(this,arguments)}},plotOptions:{series:{animation:!o,tooltip:{showName:!0}},line:{shadow:0,lineWidth:2,borderWidth:0,dataLabels:{color:"#333"},marker:{enabled:!1,states:{hover:{enabled:!0,radius:5}}}},area:{borderWidth:0,shadow:!1,lineWidth:0,marker:{enabled:!1,states:{hover:{enabled:!0,radius:4}}}},spline:{marker:{lineColor:"#333"}},column:{borderWidth:0,borderRadius:0,shadow:!1,lineWidth:0},bar:{borderRadius:0,shadow:!1},pie:{allowPointSelect:!0,borderRadius:0,shadow:!1,dataLabels:{style:{fontSize:"12px",color:"red"}}},scatter:{marker:{radius:3,symbol:"circle",states:{hover:{enabled:!0,lineColor:"rgb(100,100,100)"}}},states:{hover:{marker:{radius:3,enabled:!0}}}}},legend:{floating:!1,borderWidth:1,borderColor:"#e4e4e4",backgroundColor:"#f1f1f1",borderRadius:0,symbolPadding:5,itemMarginTop:0,itemMarginBottom:0,itemStyle:{fontWeight:"bold",fontSize:"12px",textDecoration:"none"},itemHoverStyle:{color:"#189bd7",textDecoration:"underline"},itemHiddenStyle:{color:"#CCC"}},lang:{exportButtonTitle:"Export an image or data"},exporting:{menuItemDefinitions:{downloadPDF:{onclick:function(){var e={url:"//wwwdev.eia.gov/global/scripts/jquery/highcharts/exporting-server/index.php",width:this.chartWidth,type:"application/pdf"};"function"==typeof this.exportChartLocal?this.exportChartLocal(e):this.exportChart(e)},text:"Download PDF"},downloadImage:{onclick:function(){var e={url:"//wwwdev.eia.gov/global/scripts/jquery/highcharts/exporting-server/index.php",width:this.chartWidth,type:"image/png"};"function"==typeof this.exportChartLocal?this.exportChartLocal(e):this.exportChart(e)},text:"Download image"}
540,downloadData:{onclick:function(){this.generateCSV()},text:"Download data"}},buttons:{contextButton:{menuItems:["printChart","separator","downloadImage","downloadPDF","downloadData"]}},csv:{dateFormat:null},combineLinkedSeriesInExport:!0},time:{useUTC:!0}},yTypes:{mixed:0,positive:1,negative:-1},xTypes:{category:0,annual:1,quarterly:2,monthly:3,weekly:4,daily:5,hourly:6},csvXLabels:["Category","Year","Quarter","Month","Week of","Day"],tooltipXLabels:["","Year","Quarter","Month","Week of","Day"],xMinRanges:[0,126144e6,31536e6,107136e5,24192e5,6048e5,864e5],parseXValue:function(e,t,o,i){var r,a,s;if(""!==i&&null!=i)r=I.dateFormat(i,t);else switch(e){case I.xTypes.annual:r=I.dateFormat("%Y",t);break;case I.xTypes.monthly:r=I.dateFormat("%b %Y",t);break;case I.xTypes.weekly:case I.xTypes.daily:r=I.dateFormat("%m/%e/%Y",t);break;case I.xTypes.quarterly:a=I.dateFormat("%m",t),s=I.dateFormat("%Y",t),r="Q"+Math.ceil(a/3)+" "+s;break;case I.xTypes.hourly:r=I.dateFormat("%m/%e/%Y %HH",t)+(void 0!==o?" "+o:"");break;default:r=t}return r},universalTooltipFormatter:function(){var e="";if(null!=this.point){var t=this.series,o=this.series.chart,i=t.options.tooltip,r=o.options,a=((c="pie"==r.chart.type)||r.xAxis.type,t.name),r=t.options.xType,s=!c&&(t.xAxis.options.categoryTitle||t.xAxis.options.title.text||I.tooltipXLabels[r])||"",n=!c&&t.yAxis.options.title.text||"";g=c?(p=this.point.name,l=s,this.y):(p=a,l=(0<s.length?s+" : ":"")+I.parseXValue(r,this.point.options&&void 0!==this.point.options.tooltipX?this.point.options.tooltipX:this.x,o.userOptions.timezone),this.series.userOptions&&this.series.userOptions.projection&&0<this.series.data.indexOf(this.point)&&(l+=" (Projected)"),null!=t.options.compare?I.numberFormat(this.point.change,i.precision||void 0)+" "+n:I.numberFormat(this.y,i.precision||void 0)+" "+n),e=(t.legendLine?'<span style="font-size:18pt;color:'+this.point.color+'">â </span>':'<span style="font-size:18pt;color:'+this.point.color+'">â </span>')+(t.options.tooltip.showName?"<b>"+p+"</b><br/>":"")+l+(""!=l?"<br/>":"")+g}else{var l,p,h,d,c,g="",y=this.points,r=((c="pie"==(o=y[0].series.chart).options.chart.type)||o.options.xAxis.type,o.options.maxXType),s=I.tooltipXLabels[r];if(c)for(h=0;h<y.length;h++)p=(d=y[h]).point.name,g=I.numberFormat(d.y,void 0),e+=(d.series.legendLine?'<span style="font-size:18pt;color:'+d.color+'">â </span>':'<span style="font-size:18pt;color:'+d.color+'">â </span>')+"<b>"+p+"</b> "+g,h<y.length&&(e+="</br>");else for(e+=(l="<b>"+(void 0!==s&&""!=s?s+" : ":"")+I.parseXValue(r,this.x,o.userOptions.timezone)+"</b>")+"<br/>",h=0;h<y.length;h++)d=y[h],i=(t=y[h].series).options.tooltip,p=a=t.name,n=t.yAxis.options.title.text||"",g=I.numberFormat(d.y,i.precision||void 0)+" "+n,e+=(t.legendLine?'<span style="font-size:18pt;color:'+d.color+'">â </span>':'<span style="font-size:18pt;color:'+d.color+'">â </span>')+"<b>"+p+"</b> "+g,h<y.length&&(e+="<br/>")}return e},numberFormat:function(e,t,o,i){var r,a;return null==e||""===e||isNaN(e)||Math.abs(e)===1/0?"":(r=I.getOptions().lang,e=e,t=isNaN(t=Math.abs(t))?Math.min(e.toString().match(/\d+\.?(\d*)/)[1].length,20):t,o=void 0===o?r.decimalPoint:o,r=void 0===i?r.thousandsSep:i,(e<0?"-":"")+((a=3<(i=String(parseInt(e=Math.abs(+e||0).toFixed(t)))).length?i.length%3:0)?i.substr(0,a)+r:"")+i.substr(a).replace(/(\d{3})(?=\d)/g,"$1"+r)+(t?o+Math.abs(e-i).toFixed(t).slice(2):""))}}),I.setOptions(d(!1,I.eiaTheme,{exporting:{csvOptions:{overrideURL:null,postURL:"//wwwdev.eia.gov/global/scripts/jquery/highcharts/exporting-server/csv_exporter.php"}}})),t(e.prototype,{resetZoom:function(){this.xAxis.forEach(function(e){e.setExtremes(null,null,!1)})},resetSeries:function(e){var t,o=this;for(o.removeAllSeries(e=void 0===e?!0:e),t=0;t<o.options.originalSeriesOptions.length;t++)o.addSeries(o.options.originalSeriesOptions[t],!1);e&&o.redraw()},removeAllSeries:function(e){var t,o=this,i=[];for(void 0===e&&(e=!0),t=0;t<o.series.length;t++)o.scroller&&o.scroller.series===o.series[t]||i.push(o.series[t]);for(t=0;t<i.length;t++)i[t].remove(!1);o.scroller&&o.scroller.series&&(o.scroller.series=null),e&&o.redraw()},generateCSV:function(){function e(e){if(!S.hasOwnProperty(e)){if(k){for(o=w.length-1;
5400<=o&&!(e<w[o]);o--);w.splice(o+1,0,e)}else w.push(e);S[e]=1}}var t,o,i,r,a,s,n,l,p,h,d,c,g,y,u,x,m,f,b=this,v=b.options.exporting.csvOptions.overrideURL,R=/,/g,Y=/\n/g,C=/<[\/\w\s]+>/g,T=z(b.options.xAxis)[0],B=!0,k=!1,w=[],A={},_={},S={},L=!1,M=!1,H=this.cleanTitleForCSVExport();if(v)return window.location=v;try{k="datetime"==T.type}catch(e){}try{void 0!==T.title.text&&0<T.title.text.length&&(s=T.title.text)}catch(e){}for(F=0;F<b.series.length;F++)if(a=b.series[F],b.options.navigator){if(!(b.options.navigator.enabled&&"Navigator"==a.name||!1===a.visible||null!=a.linkedParent&&b.options.exporting.combineLinkedSeriesInExport)){var O,U=A[O=a.name+(a.yAxis&&a.yAxis.axisTitle?" "+a.yAxis.axisTitle.textStr:"")]={};if("pie"==a.type)for(t=0;t<a.points.length;t++)U[i=(r=a.points[t]).name]=I.numberFormat(r.y,a.options.tooltip.precision||void 0,".",""),e(i);else{E=a.points;if(b.options.exporting.combineLinkedSeriesInExport)for(var D=0;D<a.linkedSeries.length;D++)E=E.concat(a.linkedSeries[D].points);else if(null!=a.linkedParent){for(var P=[],F=0;F<a.linkedParent.points.length;F++)a.linkedParent.points[F].y&&P.push(a.linkedParent.points[F].y);P[P.length-1]===E[0].y&&E.splice(0,1)}for(t=0;t<E.length;t++)U[i="string"==typeof(i=void 0!==(r=E[t]).category?r.category:r.x)?'"'+i.replace(C," ")+'"':i]=I.numberFormat(a.options.compare?r.change:r.y,a.options.tooltip.precision||void 0,".",""),e(i)}}}else if("range"==a.options.type||"arearange"==a.options.type){for(m=a.name+" Low "+(a.yAxis&&a.yAxis.axisTitle?" "+a.yAxis.axisTitle.textStr:""),f=a.name+" High "+(a.yAxis&&a.yAxis.axisTitle?" "+a.yAxis.axisTitle.textStr:""),u=A[m]={},x=A[f]={},_[m]={sourceKey:a.options.sourceKey,sourceLink:a.options.sourceLink},_[f]={sourceKey:a.options.sourceKey,sourceLink:a.options.sourceLink},L|=void 0!==_[m].sourceLink,M|=void 0!==_[m].sourceKey,t=0;t<a.data.length;t++)if(!1!==a.data[t].export&&(u[i=void 0!==(r=a.data[t]).category?r.category:r.name]=I.numberFormat(a.options.compare?r.change:r.low,a.options.tooltip.precision||void 0,".",""),x[i]=I.numberFormat(a.options.compare?r.change:r.high,a.options.tooltip.precision||void 0,".",""),!S.hasOwnProperty(i))){if(k){for(o=w.length-1;0<=o&&!(i<w[o]);o--);w.splice(o+1,0,i)}else w.push(i);S[i]=1}}else if(null==a.linkedParent){U=A[O=a.name+(a.yAxis&&a.yAxis.axisTitle?" "+a.yAxis.axisTitle.textStr:"")]={},_[O]={sourceKey:a.options.sourceKey,sourceLink:a.options.sourceLink},L|=void 0!==_[O].sourceLink,M|=void 0!==_[O].sourceKey;var E=a.data;for(D=0;D<a.linkedSeries.length;D++)E=E.concat(a.linkedSeries[D].data);for(t=0;t<E.length;t++)if(!1!==E[t].export&&(U[i=void 0!==(r=E[t]).category?r.category:r.name]=I.numberFormat(a.options.compare?r.change:r.y,a.options.tooltip.precision||void 0,".",""),!S.hasOwnProperty(i))){if(k){for(o=w.length-1;0<=o&&!(i<w[o]);o--);w.splice(o+1,0,i)}else w.push(i);S[i]=1}}for(g=b.options.maxXType,void 0===s&&(s=I.csvXLabels[g]||I.csvXLabels[I.xTypes.category]),p=(p=[[H]]).concat(this.generateCSVHeaders()),L&&p.push(l=["Series Link"]),M&&p.push(y=["Series Key"]),p.push(h=[s]),c=p.length,F=0;F<w.length;F++){for(o in t=w[F],d=p[F+c]=[I.parseXValue(g,t,b.userOptions.timezone,b.options.exporting.csv.dateFormat)],A)A.hasOwnProperty(o)&&(U=A[o],n=_[o],B&&(h.push(o.replace(R,"").replace(Y," ").replace(C," ")),L&&l.push(void 0!==n.sourceLink?n.sourceLink:""),M)&&y.push(void 0!==n.sourceKey?n.sourceKey:""),U.hasOwnProperty(t)?null==U[t]?d.push("--"):d.push(U[t]):d.push(""));B=!1}this.postCSVData(p,H.replace(/\s+/g,"_"))},cleanTitleForCSVExport:function(){var e=this,t="chartData",o=/[\?%\*:\|"\<\>\\,]/g,i=/\//g,r=/\s+/g,a=/<[\/\w]+>/gi;try{void 0!==e.options.title.text&&0<e.options.title.text.length&&(t=e.options.title.text.replace(a," ").replace(o,"").replace(i," per ").replace(r," ")),void 0!==e.options.subtitle.text&&0<e.options.subtitle.text.length&&(t+=" ("+e.options.subtitle.text.replace(a," ").replace(o,"").replace(i," per ").replace(r," ")+")")}catch(e){}return t},generateCSVHeaders:function(){var e=[];return e.push([window.location.href.toString()]),e.push([(new Date).toTimeString()]),e.push([this.options.credits.text]),e},postCSVData:function(e,t){var o=this.options.exporting.csvOptions.postURL,i=document.createElement("input");i.setAttribute("type","hidden"),i.setAttribute("name","csvArr"),i.setAttribute("value",JSON.stringify(e)),(e=document.createElement("input")).setAttribute("type","hidden"),e.setAttribute("name","fileName"),e.setAttribute("value",t),jQuery('<form style="display:none;" action="'+o+'" method="post"></form>').append(i).append(e).appendTo("body").submit().remove()}}),c=I.eiaTheme.yAxis,g=I.eiaTheme.xAxis,I.setOptions(I.eiaTheme),u=.6,x=23,f="/global/images/logos/Thomson_Reuters_logo.png",b=30,v=135,C=m=5,e.prototype.callbacks.push(p),I.Chart.prototype.openAPIEmbed=function(){window.open("/opendata/embed.php?"+this.getEmbedParams())},I.Chart.prototype.getEmbedOptions=function(){var e=this.options;return void 0!==e.exporting&&void 0!==e.exporting.embedOptions?e.exporting.embedOptions:null},I.Chart.prototype.setEmbedOptions=function(e){var t=this.options;void 0!==t.exporting?void 0!==t.exporting.embedOptions?d(t.exporting.embedOptions,e):t.exporting.embedOptions=e:t.exporting={embedOptions:e}},I.Chart.prototype.getEmbedParams=function(){var e,t,o,i,r,a,s,n=this,l=this.options.exporting.embedOptions,p=["type=chart"];for(e in l)l.hasOwnProperty(e)&&"start"!=e&&"end"!=e&&"date_mode"!=e&&p.push(e+"="+l[e]);return"datetime"==this.xAxis[0].options.type&&(t=this.xAxis[0].dataMin,o=this.xAxis[0].dataMax,i=this.xAxis[0].min,r=this.xAxis[0].max,a=Math.max(n.xAxis[0].min,n.xAxis[0].dataMin),s=Math.min(n.xAxis[0].max,n.xAxis[0].dataMax),t<i&&o<=r?(p.push("date_mode=periods"),p.push("start="+h(n.options.minXType,a)),p.push("end="+h(n.options.minXType,s))):t<i&&r<o?(p.push("date_mode=range"),p.push("start="+h(n.options.minXType,a)),p.push("end="+h(n.options.minXType,s))):l.hasOwnProperty("date_mode")?(p.push("date_mode="+l.date_mode),"range"!=l.date_mode&&"start"!=l.date_mode||(l.hasOwnProperty("start")?p.push("start="+l.start):p.push("start="+h(n.options.minXType,a))),"range"==l.date_mode&&(l.hasOwnProperty("end")?p.push("end="+l.end):p.push("end="+h(n.options.minXType,s))),"periods"==l.date_mode&&l.hasOwnProperty("periods")&&p.push("periods="+l.periods)):p.push("date_mode=all")),p.join("&")},I.wrap(I.Chart.prototype,"init",function(e,t,o){var i=t,r=t||{},t=(null!=i.chart&&null!=i.chart.type&&i.chart.type,this.axisZerosAligned=0,I.getOptions());if(void 0!==i.exporting&&void 0!==i.exporting.embedOptions){i.exporting=d(!1,t.exp
540orting,i.exporting);for(var a=i.exporting.buttons.contextButton.menuItems,s=!1,n={text:"Embed Chart",onclick:function(){this.openAPIEmbed()}},l=0;l<a.length;l++)if(null==a[l]){a[l]=n,s=!0;break}s||a.push(n)}return i.xAxis=z(i.xAxis||{}).map(function(e){return d(!1,d(!1,g,e),r.xAxis||{})}),i.yAxis=z(i.yAxis||{}).map(function(e){return d(!1,d(!1,c,e),r.yAxis||{})}),e.call(this,i,o)}),I.wrap(I.Series.prototype,"remove",function(e,t,o){var i=this.chart,r=i.options;if(this.linkedSeries)for(var a=this.linkedSeries.length-1;0<=a;a--)this.linkedSeries[a].remove();for(var e=e.call(this,t,o),s=(O.call(i,r),-1/0),a=0;a<i.series.length;a++)i.scroller&&i.series[a]===i.scroller.series||(s=Math.max(s,i.options.colors.indexOf(i.series[a].color)));return function(){if(this.options.chart&&this.options.chart.lineUpYAxisZeros)for(var e=0;e<this.yAxis.length;e++){var t=this.yAxis[e];null==t.userMin&&null==t.userMax||t.setExtremes(null,null,!1)}}.call(i),e}),I.wrap(I.Chart.prototype,"getSVG",function(e,t){return e.call(this,t).replace(/></g,">\r\n<")}),I.wrap(I.Axis.prototype,"init",function(e,t,o,i){return o.isX||void 0!==i&&"yAxis"!==i||void 0!==this.coll&&"yAxis"!==this.coll||t.options.chart&&"map"===t.options.chart.type||(o.softMin=void 0===o.softMin?0:o.softMin,o.softMax=void 0===o.softMax?0:o.softMax),e.call(this,t,o,i)}),I.wrap(I.Axis.prototype,"addTitle",function(e,t){var o,i=e.call(this,t);return null!==this.options.title.text&&("above"===this.options.title.align||"above"===this.options.title.originalAlign)&&!0!==this.horiz&&(o=this.axisTitle.element.getBBox(),void 0!==(o="above"===this.options.title.align?{originalAlign:"above",reserveSpace:!1,align:"high",rotation:0,x:this.options.opposite?-1*o.width:o.width,y:-15,offset:0}:{x:this.options.opposite?-1*o.width:o.width}).align&&o.align!==this.options.title.align||void 0!==o.reserveSpace&&o.reserveSpace!==this.options.title.reserveSpace||void 0!==o.x&&o.x!==this.options.title.x||void 0!==o.y&&o.y!==this.options.title.y||void 0!==o.rotation&&o.rotation!==this.options.title.rotation)&&(d(!0,this.options.title,o),this.axisTitle.destroy(),delete this.axisTitle,i=e.call(this,t)),i}),I.wrap(I.Axis.prototype,"setTitle",function(e,t,o){return e.call(this,t,o)}),I.wrap(I.Series.prototype,"setData",function(e,t,o,i,r){t=e.call(this,t,o,i,r);if("heatmap"!==this.type&&"mapline"!==this.type){for(var a,s,n,l,p,h,d,c,g,y,u,x,m=this,f=m.chart,b="datetime"==z(f.options.xAxis)[0].type,v=!1,C=!1,T=!0,k=a=s=n=!0,w=l=p=h=null,A=!0,_=m.xData||m.data,S=m.yData||m.data,L=0;L<_.length;L++){T=!1,b&&(M=(x=new Date(void 0!==_[L]&&void 0!==_[L].x?_[L].x:_[L])).getUTCMonth(),c=x.getUTCDate(),g=x.getUTCDay(),y=x.getUTCHours(),x=x.getHours(),null!==w&&null!==l&&null!==p&&null!==h&&(k&=M==w,s&=g==p,n&=y==h||x==d,a&=c==l)&&n&&!k&&((M-w)%3==0?A&=!0:A=!1),w=M,l=c,p=g,h=y,d=x);var M=S[L]&&void 0!==S[L].y?S[L].y:S[L];v|=M<0,C|=0<M}T||(u=b?k&&a&&n?I.xTypes.annual:a&&n&&A?I.xTypes.quarterly:a&&n?I.xTypes.monthly:s&&n?I.xTypes.weekly:n?I.xTypes.daily:I.xTypes.hourly:I.xTypes.category),m.options.xType=u,m.options.yType=v&&C||"value"==m.options.compare||"percent"==m.options.compare?I.yTypes.mixed:v?I.yTypes.negative:I.yTypes.positive,O.call(this.chart,this.chart.options),1<=this.options.xType&&this.chart.options.chart.breakLines&&(!function(e){var t=0,o=0,i=0,r=0;switch(e.xType){case I.xTypes.hourly:r=1;break;case I.xTypes.daily:o=1;break;case I.xTypes.weekly:o=7;break;case I.xTypes.monthly:t=1;break;case I.xTypes.quarterly:t=3;break;case I.xTypes.annual:i=1;break;default:return}var a=void 0,s=void 0,n=void 0,l=void 0,p=!1;if(Array.isArray(e.data))for(var h=0;h<e.data.length;h++){var d,c,g,y,u,x,m,f,b,n=new Date(Array.isArray(e.data[h])?e.data[h][0]:e.data[h].x),v=Array.isArray(e.data[h])?e.data[h][1]:e.data[h].y;void 0!==a&&(d=n.getUTCHours(),f=n.getUTCMonth(),b=n.getUTCDate(),m=n.getUTCFullYear(),c=a.getUTCHours(),g=a.getUTCMonth(),y=a.getUTCDate(),u=a.getUTCFullYear(),x=n.getTimezoneOffset()/60-a.getTimezoneOffset()/60,m=Date.UTC(m,f,b,d),f=Date.UTC(u+i,g+t,y+o,c+r),b=Date.UTC(u+i,g+t,y+o,c+r+x),f!==m)&&(e.xType>=I.xTypes.hourly||0!=x&&b!==m)&&null!==s&&null!==v&&(null==l&&(e.data[h-1]={marker:{enabled:!0,lineWidth:1},y:Array.isArray(e.data[h-1])?e.data[h-1][1]:e.data[h-1].y,x:Array.isArray(e.data[h-1])?e.data[h-1][0]:e.data[h-1].x},p|=!0),e.data.splice(h++,0,{x:f,y:null,export:!1}),a=null),l=a,a=n,s=v}a&&!l&&null!==s&&(e.data[e.data.length-1]={marker:{enabled:!0,lineWidth:1},y:Array.isArray(e.data[e.data.length-1])?e.data[e.data.length-1][1]:e.data[e.data.length-1].y,x:Array.isArray(e.data[e.data.length-1])?e.data[e.data.length-1][0]:e.data[e.data.length-1].x},p|=!0),p&&(e.turboThreshold=0)}(this.options),t=e.call(this,this.options.data,o,i,r))}return t}),I.wrap(I.Chart.prototype,"update",function(e,t,o,i,r){e=e.call(this,t,o,i,!1),t.chart&&void 0!==t.chart.spacingBottom&&(this.legend.update({},!0),this.redraw()),o=this.options;if(null!=o.chart&&null!=o.chart.type&&o.chart.type,void 0!==o.exporting&&void 0!==o.exporting.embedOptions){for(var a=o.exporting.buttons.contextButton.menuItems,s=!1,n={text:"Embed Chart",onclick:function(){this.openAPIEmbed()}},l=0;l<a.length;l++)if(null==a[l]){a[l]=n,s=!0;break}s||a.push(n)}return p.call(this),e})},"object"==typeof module&&module.exports?module.exports=e:"function"==typeof define&&define.amd?define(function(){return e}
540):e(Highcharts); 541 542},{}],18:[function(require,module,exports){ 543module.exports={ 544 "title": "United States of America, small", 545 "version": "1.1.2", 546 "type": "FeatureCollection", 547 "copyright": "Copyright (c) 2015 Highsoft AS, Based on data from Natural Earth", 548 "copyrightShort": "Natural Earth", 549 "copyrightUrl": "http://www.naturalearthdata.com", 550 "crs": { 551 "type": "name", 552 "properties": { 553 "name": "urn:ogc:def:crs:EPSG:102004" 554 } 555 }, 556 "hc-transform": { 557 "default": { 558 "crs": "+proj=lcc +lat_1=33 +lat_2=45 +lat_0=39 +lon_0=-96 +x_0=0 +y_0=0 +datum=NAD83 +units=m +no_defs", 559 "scale": 0.000151481324748, 560 "jsonres": 15.5, 561 "jsonmarginX": -999, 562 "jsonmarginY": 9851, 563 "xoffset": -2361356.09818, 564 "yoffset": 1398996.77886 565 }, 566 "us-all-hawaii": { 567 "xpan": 190, 568 "ypan": 417, 569 "hitZone": { 570 "type": "Polygon", 571 "coordinates": [ 572 [ 573 [ 574 1747, 575 3920 576 ], 577 [ 578 3651, 579 2950 580 ], 581 [ 582 3651, 583 -999 584 ], 585 [ 586 1747, 587 -999 588 ], 589 [ 590 1747, 591 3920 592 ] 593 ] 594 ] 595 }, 596 "crs": "+proj=aea +lat_1=8 +lat_2=18 +lat_0=13 +lon_0=-157 +x_0=0 +y_0=0 +datum=NAD83 +units=m +no_defs", 597 "scale": 0.000123090941806, 598 "jsonres": 15.5, 599 "jsonmarginX": -999, 600 "jsonmarginY": 9851, 601 "xoffset": -338610.47557, 602 "yoffset": 1022754.31736 603 }, 604 "us-all-alaska": { 605 "rotation": -0.0174532925199, 606 "xpan": 5, 607 "ypan": 357, 608 "hitZone": { 609 "type": "Polygon", 610 "coordinates": [ 611 [ 612 [ 613 -999, 614 5188 615 ], 616 [ 617 -707, 618 5188 619 ], 620 [ 621 1747, 622 3920 623 ], 624 [ 625 1747, 626 -999 627 ], 628 [ 629 -999, 630 -999 631 ], 632 [ 633 -999, 634 5188 635 ] 636 ] 637 ] 638 }, 639 "crs": "+proj=tmerc +lat_0=54 +lon_0=-142 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs", 640 "scale": 0.0000584397059179, 641 "jsonres": 15.5, 642 "jsonmarginX": -999, 643 "jsonmarginY": 9851, 644 "xoffset": -1566154.00853, 645 "yoffset": 1992671.14918 646 } 647 }, 648 "features": [ 649 { 650 "type": "Feature", 651 "id": "US.MA", 652 "properties": { 653 "hc-group": "admin1", 654 "hc-middle-x": 0.75, 655 "hc-middle-y": 0.76, 656 "hc-key": "us-ma", 657 "hc-a2": "MA", 658 "labelrank": "0", 659 "hasc": "US.MA", 660 "woe-id": "2347580", 661 "state-fips": "25", 662 "fips": "US25", 663 "postal-code": "MA", 664 "name": "Massachusetts", 665 "country": "United States of America", 666 "region": "Northeast", 667 "longitude": "-71.99930000000001", 668 "woe-name": "Massachusetts", 669 "latitude": "42.3739", 670 "woe-label": "Massachusetts, US, United States", 671 "type": "State" 672 }, 673 "geometry": { 674 "type": "MultiPolygon", 675 "coordinates": [ 676 [ 677 [ 678 [ 679 9727, 680 7650 681 ], 682 [ 683 10595, 684 7650 685 ], 686 [ 687 10595, 688 7123 689 ], 690 [ 691 9727, 692 7123 693 ], 694 [ 695 9727, 696 7650 697 ] 698 ] 699 ], 700 [ 701 [ 702 [ 703 9430, 704 7889 705 ], 706 [ 707 9476, 708 7878 709 ], 710 [ 711 9436, 712 7864 713 ], 714 [ 715 9417, 716 7844 717 ], 718 [ 719 9430, 720 7889 721 ] 722 ] 723 ], 724 [ 725 [ 726 [ 727 9314, 728 7915 729 ], 730 [ 731 9312, 732 7927 733 ], 734 [ 735 9304, 736 7921 737 ], 738 [ 739 9278, 740 7938 741 ], 742 [ 743 9254, 744 7990 745 ], 746 [ 747 9177, 748 7968 749 ], 750 [ 751 8997, 752 7925 753 ], 754 [ 755 8860, 756 7896 757 ], 758 [ 759 8853, 760 7901 761 ], 762 [ 763 8856, 764 8080 765 ], 766 [ 767 8922, 768 8096 769 ], 770 [ 771 9005, 772 8115 773 ], 774 [ 775 9005, 776 8115 777 ], 778 [ 779 9222, 780 8166 781 ], 782 [ 783 9242, 784 8201 785 ], 786 [ 787 9300, 788 8236 789 ], 790 [ 791 9318, 792 8197 793 ], 794 [ 795 9357, 796 8186 797 ], 798 [ 799 9312, 800 8147 801 ], 802 [ 803 9299, 804 8081 805 ], 806 [ 807 9324, 808 8091 809 ], 810 [ 811 9365, 812 8074 813 ], 814 [ 815 9428, 816 7985 817 ], 818 [ 819 9483, 820 7974 821 ], 822 [ 823 9525,
824 8007 825 ], 826 [ 827 9501, 828 8067 829 ], 830 [ 831 9535, 832 8028 833 ], 834 [ 835 9549, 836 7982 837 ], 838 [ 839 9504, 840 7965 841 ], 842 [ 843 9420, 844 7906 845 ], 846 [ 847 9411, 848 7955 849 ], 850 [ 851 9371, 852 7921 853 ], 854 [ 855 9373, 856 7898 857 ], 858 [ 859 9339, 860 7878 861 ], 862 [ 863 9327, 864 7915 865 ], 866 [ 867 9314, 868 7915 869 ] 870 ] 871 ] 872 ] 873 } 874 }, 875 { 876 "type": "Feature", 877 "id": "US.WA", 878 "properties": { 879 "hc-group": "admin1", 880 "hc-middle-x": 0.56, 881 "hc-middle-y": 0.52, 882 "hc-key": "us-wa", 883 "hc-a2": "WA", 884 "labelrank": "0", 885 "hasc": "US.WA", 886 "woe-id": "2347606", 887 "state-fips": "53", 888 "fips": "US53", 889 "postal-code": "WA", 890 "name": "Washington", 891 "country": "United States of America", 892 "region": "West", 893 "longitude": "-120.361", 894 "woe-name": "Washington", 895 "latitude": "47.4865", 896 "woe-label": "Washington, US, United States", 897 "type": "State" 898 }, 899 "geometry": { 900 "type": "MultiPolygon", 901 "coordinates": [ 902 [ 903 [ 904 [ 905 -77, 906 9797 907 ], 908 [ 909 -56, 910 9768 911 ], 912 [ 913 -91, 914 9757 915 ], 916 [ 917 -86, 918 9712 919 ], 920 [ 921 -136, 922 9751 923 ], 924 [ 925 -111, 926 9756 927 ], 928 [ 929 -77, 930 9797 931 ] 932 ] 933 ], 934 [ 935 [ 936 [ 937 -52, 938 9689 939 ], 940 [ 941 -85, 942 9658 943 ], 944 [ 945 -66, 946 9645 947 ], 948 [ 949 -43, 950 9568 951 ], 952 [ 953 -77, 954 9588 955 ], 956 [ 957 -74, 958 9635 959 ], 960 [ 961 -89, 962 9664 963 ], 964 [ 965 -52, 966 9690 967 ], 968 [ 969 -60, 970 9697 971 ], 972 [ 973 -61, 974 9737 975 ], 976 [ 977 -31, 978 9701 979 ], 980 [ 981 -12, 982 9731 983 ], 984 [ 985 -9, 986 9774 987 ], 988 [ 989 -33, 990 9788 991 ], 992 [ 993 -46, 994 9839 995 ], 996 [ 997 -32, 998 9851 999 ], 1000 [ 1001 926, 1002 9593 1003 ], 1004 [ 1005 767, 1006 8925 1007 ], 1008 [ 1009 779, 1010 8870 1011 ], 1012 [ 1013 774, 1014 8822 1015 ], 1016 [ 1017 398, 1018 8914 1019 ], 1020 [ 1021 378, 1022 8905 1023 ], 1024 [ 1025 289, 1026 8922 1027 ], 1028 [ 1029 163, 1030 8905 1031 ], 1032 [ 1033 94, 1034 8923 1035 ], 1036 [ 1037 38, 1038 8914 1039 ], 1040 [ 1041 -10, 1042 8925 1043 ], 1044 [ 1045 -22, 1046 8950 1047 ], 1048 [ 1049 -113, 1050 8979 1051 ], 1052 [ 1053 -207, 1054 8965 1055 ], 1056 [ 1057 -283, 1058 9014 1059 ], 1060 [ 1061 -271, 1062 9096 1063 ], 1064 [ 1065 -280, 1066 9134 1067 ], 1068 [ 1069 -321, 1070 9167 1071 ], 1072 [ 1073 -357, 1074 9171 1075 ], 1076 [ 1077 -365, 1078 9207 1079 ], 1080 [ 1081 -400, 1082 9226 1083 ], 1084 [ 1085 -436, 1086 9219 1087 ], 1088 [ 1089 -460, 1090 9259 1091 ], 1092 [ 1093 -436, 1094 9333 1095 ], 1096 [ 1097 -441, 1098 9279 1099 ], 1100 [ 1101 -416, 1102 9297 1103 ], 1104 [ 1105 -401, 1106 9347 1107 ], 1108 [ 1109 -434, 1110 9357 1111 ], 1112 [ 1113 -429, 1114 9395 1115 ], 1116 [ 1117 -369, 1118 9396 1119 ], 1120 [ 1121 -424,
1122 9436 1123 ], 1124 [ 1125 -424, 1126 9523 1127 ], 1128 [ 1129 -410, 1130 9624 1131 ], 1132 [ 1133 -433, 1134 9678 1135 ], 1136 [ 1137 -428, 1138 9749 1139 ], 1140 [ 1141 -385, 1142 9790 1143 ], 1144 [ 1145 -313, 1146 9713 1147 ], 1148 [ 1149 -183, 1150 9655 1151 ], 1152 [ 1153 -161, 1154 9666 1155 ], 1156 [ 1157 -146, 1158 9623 1159 ], 1160 [ 1161 -100, 1162 9637 1163 ], 1164 [ 1165 -95, 1166 9567 1167 ], 1168 [ 1169 -135, 1170 9518 1171 ], 1172 [ 1173 -77, 1174 9566 1175 ], 1176 [ 1177 -112, 1178 9491 1179 ], 1180 [ 1181 -89, 1182 9426 1183 ], 1184 [ 1185 -154, 1186 9433 1187 ], 1188 [ 1189 -175, 1190 9394 1191 ], 1192 [ 1193 -167, 1194 9449 1195 ], 1196 [ 1197 -222, 1198 9394 1199 ], 1200 [ 1201 -157, 1202 9376 1203 ], 1204 [ 1205 -124, 1206 9418 1207 ], 1208 [ 1209 -82, 1210 9426 1211 ], 1212 [ 1213 -82, 1214 9476 1215 ], 1216 [ 1217 -66, 1218 9527 1219 ], 1220 [ 1221 -18, 1222 9570 1223 ], 1224 [ 1225 -37, 1226 9644 1227 ], 1228 [ 1229 -24, 1230 9661 1231 ], 1232 [ 1233 -52, 1234 9689 1235 ] 1236 ] 1237 ] 1238 ] 1239 } 1240 }, 1241 { 1242 "type": "Feature", 1243 "id": "US.CA", 1244 "properties": { 1245 "hc-group": "admin1", 1246 "hc-middle-x": 0.51, 1247 "hc-middle-y": 0.67, 1248 "hc-key": "us-ca", 1249 "hc-a2": "CA", 1250 "labelrank": "0", 1251 "hasc": "US.CA", 1252 "woe-id": "2347563", 1253 "state-fips": "6", 1254 "fips": "US06", 1255 "postal-code": "CA", 1256 "name": "California", 1257 "country": "United States of America", 1258 "region": "West", 1259 "longitude": "-119.591", 1260 "woe-name": "California", 1261 "latitude": "36.7496", 1262 "woe-label": "California, US, United States", 1263 "type": "State" 1264 }, 1265 "geometry": { 1266 "type": "Polygon", 1267 "coordinates": [ 1268 [ 1269 [ 1270 -833, 1271 8186 1272 ], 1273 [ 1274 -50, 1275 7955 1276 ], 1277 [ 1278 -253, 1279 7203 1280 ], 1281 [ 1282 32, 1283 6779 1284 ], 1285 [ 1286 261, 1287 6430 1288 ], 1289 [ 1290 593, 1291 5936 1292 ], 1293 [ 1294 620, 1295 5788 1296 ], 1297 [ 1298 660, 1299 5730 1300 ], 1301 [ 1302 598, 1303 5702 1304 ], 1305 [ 1306 559, 1307 5661 1308 ], 1309 [ 1310 555, 1311 5605 1312 ], 1313 [ 1314 510, 1315 5537 1316 ], 1317 [ 1318 489, 1319 5536 1320 ], 1321 [ 1322 476, 1323 5452 1324 ], 1325 [ 1326 519, 1327 5416 1328 ], 1329 [ 1330 492, 1331 5355 1332 ], 1333 [ 1334 451, 1335 5357 1336 ], 1337 [ 1338 -76, 1339 5426 1340 ], 1341 [ 1342 -69, 1343 5467 1344 ], 1345 [ 1346 -95, 1347 5476 1348 ], 1349 [ 1350 -84, 1351 5583 1352 ], 1353 [ 1354 -110, 1355 5649 1356 ], 1357 [ 1358 -224, 1359 5792 1360 ], 1361 [ 1362 -276, 1363 5799 1364 ], 1365 [ 1366 -265, 1367 5822 1368 ], 1369 [ 1370 -284, 1371 5881 1372 ], 1373 [ 1374 -342, 1375 5885 1376 ], 1377 [ 1378 -417, 1379 5946 1380 ], 1381 [ 1382 -422, 1383 5975 1384 ], 1385 [ 1386 -484, 1387 6035 1388 ], 1389 [ 1390 -539, 1391 6046 1392 ], 1393 [ 1394 -588, 1395 6077 1396 ], 1397 [ 1398 -659, 1399 6091 1400 ], 1401 [ 1402 -686, 1403 6135 1404 ], 1405 [ 1406 -647, 1407 6273 1408 ], 1409 [ 1410 -691, 1411 6316 1412 ], 1413 [ 1414 -672, 1415 6333 1416 ], 1417 [ 1418 -720, 1419 6428 1420 ], 1421 [ 1422 -742, 1423 6442 1424 ], 1425 [ 1426 -793, 1427 6601 1428 ], 1429 [ 1430 -820, 1431 6637 1432 ], 1433 [ 1434 -816, 1435 6709 1436 ], 1437 [ 1438 -775, 1439 6726 1440 ], 1441 [ 1442 -761, 1443 6756 1444 ], 1445 [ 1446 -778,
1447 6807 1448 ], 1449 [ 1450 -821, 1451 6819 1452 ], 1453 [ 1454 -855, 1455 6888 1456 ], 1457 [ 1458 -842, 1459 6929 1460 ], 1461 [ 1462 -853, 1463 6979 1464 ], 1465 [ 1466 -833, 1467 7041 1468 ], 1469 [ 1470 -810, 1471 7042 1472 ], 1473 [ 1474 -816, 1475 6985 1476 ], 1477 [ 1478 -764, 1479 6931 1480 ], 1481 [ 1482 -772, 1483 6991 1484 ], 1485 [ 1486 -797, 1487 7030 1488 ], 1489 [ 1490 -787, 1491 7089 1492 ], 1493 [ 1494 -738, 1495 7083 1496 ], 1497 [ 1498 -782, 1499 7126 1500 ], 1501 [ 1502 -806, 1503 7122 1504 ], 1505 [ 1506 -833, 1507 7050 1508 ], 1509 [ 1510 -892, 1511 7126 1512 ], 1513 [ 1514 -903, 1515 7243 1516 ], 1517 [ 1518 -983, 1519 7395 1520 ], 1521 [ 1522 -967, 1523 7420 1524 ], 1525 [ 1526 -969, 1527 7507 1528 ], 1529 [ 1530 -943, 1531 7553 1532 ], 1533 [ 1534 -936, 1535 7629 1536 ], 1537 [ 1538 -964, 1539 7712 1540 ], 1541 [ 1542 -999, 1543 7766 1544 ], 1545 [ 1546 -993, 1547 7813 1548 ], 1549 [ 1550 -890, 1551 7943 1552 ], 1553 [ 1554 -849, 1555 8038 1556 ], 1557 [ 1558 -844, 1559 8118 1560 ], 1561 [ 1562 -860, 1563 8134 1564 ], 1565 [ 1566 -833, 1567 8186 1568 ] 1569 ] 1570 ] 1571 } 1572 }, 1573 { 1574 "type": "Feature", 1575 "id": "US.OR", 1576 "properties": { 1577 "hc-group": "admin1", 1578 "hc-middle-x": 0.47, 1579 "hc-middle-y": 0.52, 1580 "hc-key": "us-or", 1581 "hc-a2": "OR", 1582 "labelrank": "0", 1583 "hasc": "US.OR", 1584 "woe-id": "2347596", 1585 "state-fips": "41", 1586 "fips": "US41", 1587 "postal-code": "OR", 1588 "name": "Oregon", 1589 "country": "United States of America", 1590 "region": "West", 1591 "longitude": "-120.386", 1592 "woe-name": "Oregon", 1593 "latitude": "43.8333", 1594 "woe-label": "Oregon, US, United States", 1595 "type": "State" 1596 }, 1597 "geometry": { 1598 "type": "Polygon", 1599 "coordinates": [ 1600 [ 1601 [ 1602 -50, 1603 7955 1604 ], 1605 [ 1606 -833, 1607 8186 1608 ], 1609 [ 1610 -851, 1611 8223 1612 ], 1613 [ 1614 -847, 1615 8281 1616 ], 1617 [ 1618 -817, 1619 8362 1620 ], 1621 [ 1622 -827, 1623 8415 1624 ], 1625 [ 1626 -793, 1627 8455 1628 ], 1629 [ 1630 -756, 1631 8527 1632 ], 1633 [ 1634 -714, 1635 8570 1636 ], 1637 [ 1638 -672, 1639 8648 1640 ], 1641 [ 1642 -594, 1643 8829 1644 ], 1645 [ 1646 -582, 1647 8877 1648 ], 1649 [ 1650 -494, 1651 9051 1652 ], 1653 [ 1654 -493, 1655 9108 1656 ], 1657 [ 1658 -468, 1659 9158 1660 ], 1661 [ 1662 -460, 1663 9216 1664 ], 1665 [ 1666 -396, 1667 9192 1668 ], 1669 [ 1670 -367, 1671 9202 1672 ], 1673 [ 1674 -359, 1675 9169 1676 ], 1677 [ 1678 -321, 1679 9167 1680 ], 1681 [ 1682 -280, 1683 9134 1684 ], 1685 [ 1686 -271, 1687 9096 1688 ], 1689 [ 1690 -283, 1691 9014 1692 ], 1693 [ 1694 -207, 1695 8965 1696 ], 1697 [ 1698 -113, 1699 8979 1700 ], 1701 [ 1702 -22, 1703 8950 1704 ], 1705 [ 1706 -10, 1707 8925 1708 ], 1709 [ 1710 38, 1711 8914 1712 ], 1713 [ 1714 94, 1715 8923 1716 ], 1717 [ 1718 163, 1719 8905 1720 ], 1721 [ 1722 289, 1723 8922 1724 ], 1725 [ 1726 378, 1727 8905 1728 ], 1729 [ 1730 398, 1731 8914 1732 ], 1733 [ 1734 774, 1735 8822 1736 ], 1737 [ 1738 785, 1739 8775 1740 ], 1741 [ 1742 821, 1743 8744 1744 ], 1745 [ 1746 823, 1747 8698 1748 ], 1749 [ 1750 776, 1751 8646 1752 ], 1753 [ 1754 718, 1755 8545 1756 ], 1757 [ 1758 624, 1759 8450 1760 ], 1761 [ 1762 615, 1763 8403 1764 ], 1765 [ 1766 662, 1767 8361 1768 ], 1769 [ 1770 616, 1771 8265 1772 ], 1773 [ 1774 510, 1775 7813 1776 ], 1777 [ 1778 -50, 1779 7955 1780 ] 1781 ] 1782 ] 1783 } 1784 }, 1785 { 1786 "type": "Feature", 1787 "id": "US.WI", 1788 "properties": { 1789 "hc-group": "admin1", 1790 "hc-middle-x": 0.41, 1791 "hc-middle-y": 0.38, 1792 "hc-key": "us-wi", 1793 "hc-a2": "WI", 1794 "labelrank": "0", 1795 "hasc": "US.WI", 1796 "woe-id": "2347608",
1797 "state-fips": "55", 1798 "fips": "US55", 1799 "postal-code": "WI", 1800 "name": "Wisconsin", 1801 "country": "United States of America", 1802 "region": "Midwest", 1803 "longitude": "-89.5831", 1804 "woe-name": "Wisconsin", 1805 "latitude": "44.3709", 1806 "woe-label": "Wisconsin, US, United States", 1807 "type": "State" 1808 }, 1809 "geometry": { 1810 "type": "MultiPolygon", 1811 "coordinates": [ 1812 [ 1813 [ 1814 [ 1815 6206, 1816 8297 1817 ], 1818 [ 1819 6197, 1820 8237 1821 ], 1822 [ 1823 6159, 1824 8156 1825 ], 1826 [ 1827 6136, 1828 8180 1829 ], 1830 [ 1831 6161, 1832 8249 1833 ], 1834 [ 1835 6206, 1836 8297 1837 ] 1838 ] 1839 ], 1840 [ 1841 [ 1842 [ 1843 5575, 1844 7508 1845 ], 1846 [ 1847 5561, 1848 7544 1849 ], 1850 [ 1851 5494, 1852 7563 1853 ], 1854 [ 1855 5465, 1856 7670 1857 ], 1858 [ 1859 5479, 1860 7702 1861 ], 1862 [ 1863 5445, 1864 7758 1865 ], 1866 [ 1867 5431, 1868 7866 1869 ], 1870 [ 1871 5405, 1872 7892 1873 ], 1874 [ 1875 5360, 1876 7903 1877 ], 1878 [ 1879 5273, 1880 7994 1881 ], 1882 [ 1883 5217, 1884 8029 1885 ], 1886 [ 1887 5181, 1888 8035 1889 ], 1890 [ 1891 5136, 1892 8072 1893 ], 1894 [ 1895 5146, 1896 8117 1897 ], 1898 [ 1899 5144, 1900 8214 1901 ], 1902 [ 1903 5158, 1904 8253 1905 ], 1906 [ 1907 5117, 1908 8285 1909 ], 1910 [ 1911 5116, 1912 8322 1913 ], 1914 [ 1915 5147, 1916 8375 1917 ], 1918 [ 1919 5220, 1920 8422 1921 ], 1922 [ 1923 5214, 1924 8573 1925 ], 1926 [ 1927 5245, 1928 8603 1929 ], 1930 [ 1931 5303, 1932 8589 1933 ], 1934 [ 1935 5410, 1936 8635 1937 ], 1938 [ 1939 5449, 1940 8660 1941 ], 1942 [ 1943 5489, 1944 8656 1945 ], 1946 [ 1947 5481, 1948 8617 1949 ], 1950 [ 1951 5508, 1952 8583 1953 ], 1954 [ 1955 5554, 1956 8572 1957 ], 1958 [ 1959 5588, 1960 8553 1961 ], 1962 [ 1963 5611, 1964 8510 1965 ], 1966 [ 1967 5795, 1968 8473 1969 ], 1970 [ 1971 5849, 1972 8447 1973 ], 1974 [ 1975 5968, 1976 8437 1977 ], 1978 [ 1979 5993, 1980 8394 1981 ], 1982 [ 1983 6045, 1984 8372 1985 ], 1986 [ 1987 6042, 1988 8286 1989 ], 1990 [ 1991 6080, 1992 8287 1993 ], 1994 [ 1995 6071, 1996 8242 1997 ], 1998 [ 1999 6096, 2000 8224 2001 ], 2002 [ 2003 6058, 2004 8180 2005 ], 2006 [ 2007 6028, 2008 8078 2009 ], 2010 [ 2011 6049, 2012 8076 2013 ], 2014 [ 2015 6099, 2016 8156 2017 ], 2018 [ 2019 6129, 2020 8170 2021 ], 2022 [ 2023 6153, 2024 8151 2025 ], 2026 [ 2027 6124, 2028 8019 2029 ], 2030 [ 2031 6136, 2032 7996 2033 ], 2034 [ 2035 6101, 2036 7916 2037 ], 2038 [ 2039 6110, 2040 7860 2041 ], 2042 [ 2043 6082, 2044 7742 2045 ], 2046 [ 2047 6089, 2048 7679 2049 ], 2050 [ 2051 6116, 2052 7626 2053 ], 2054 [ 2055 6119, 2056 7543 2057 ], 2058 [ 2059 5780, 2060 7519 2061 ], 2062 [ 2063 5606, 2064 7509 2065 ], 2066 [ 2067 5575, 2068 7508 2069 ] 2070 ] 2071 ] 2072 ] 2073 } 2074 }, 2075 { 2076 "type": "Feature", 2077 "id": "US.ME", 2078 "properties": { 2079 "hc-group": "admin1", 2080 "hc-middle-x": 0.43, 2081 "hc-middle-y": 0.4, 2082 "hc-key": "us-me", 2083 "hc-a2": "ME", 2084 "labelrank": "0", 2085 "hasc": "US.ME", 2086 "woe-id": "2347578", 2087 "state-fips": "23", 2088 "fips": "US23", 2089 "postal-code": "ME", 2090 "name": "Maine", 2091 "country": "United States of America", 2092 "region": "Northeast", 2093 "longitude": "-69.1973", 2094 "woe-name": "Maine", 2095 "latitude": "45.148", 2096 "woe-label": "Maine, US, United States", 2097 "type": "State" 2098 }, 2099 "geometry": { 2100 "type": "MultiPolygon", 2101 "coordinates": [ 2102 [ 2103 [ 2104 [ 2105 9623, 2106 8727 2107 ], 2108 [ 2109 9643, 2110 8763 2111 ], 2112 [ 2113 9665, 2114 8747 2115 ], 2116 [ 2117 9641, 2118 8690 2119 ], 2120 [ 2121 9623, 2122 8727 2123 ] 2124 ] 2125 ], 2126 [ 2127 [ 2128 [ 2129 9225, 2130 8399 2131 ], 2132 [ 2133 9079, 2134 8830 2135 ], 2136 [ 2137 9115, 2138 8824 2139 ], 2140 [ 2141 9130, 2142 8917 2143 ], 2144 [ 2145 9168, 2146 8971 2147 ], 2148 [ 2149 9177, 2150 9035 2151 ], 2152 [ 2153 9160, 2154 9062 2155 ], 2156 [ 2157 9160, 2158 9140 2159 ], 2160 [ 2161 9176, 2162 9161 2163 ], 2164 [ 2165 9166, 2166 9236 2167 ], 2168 [ 2169 9238, 2170 9459 2171 ], 2172 [ 2173 9272, 2174 9467 2175 ], 2176 [ 2177 9292, 2178 9423 2179 ], 2180 [ 2181 9319, 2182 9415 2183 ], 2184 [ 2185 9428, 2186 9491 2187 ], 2188 [ 2189 9519, 2190 9435 2191 ], 2192 [ 2193 9630, 2194 9097 2195 ], 2196 [ 2197 9697, 2198 9099 2199 ], 2200 [ 2201 9717, 2202 9017 2203 ], 2204 [ 2205 9747, 2206 8995 2207 ], 2208 [ 2209 9778, 2210 9009 2211 ], 2212 [ 2213 9851, 2214 8939 2215 ], 2216 [ 2217 9818, 2218 8875 2219 ], 2220 [ 2221 9789, 2222 8883 2223 ], 2224 [ 2225 9784, 2226 8851 2227 ], 2228 [ 2229 9706, 2230 8811 2231 ], 2232 [ 2233 9712, 2234 8773 2235 ], 2236 [ 2237 9690, 2238 8747 2239 ], 2240 [ 2241 9669, 2242 8782 2243 ], 2244 [ 2245 9611, 2246 8766 2247 ], 2248 [ 2249 9590, 2250 8707 2251 ], 2252 [ 2253 9615, 2254 8647 2255 ], 2256 [ 2257 9554, 2258 8716 2259 ], 2260 [ 2261 9552, 2262 8761 2263 ], 2264 [ 2265 9517, 2266 8719
2267 ], 2268 [ 2269 9529, 2270 8622 2271 ], 2272 [ 2273 9505, 2274 8581 2275 ], 2276 [ 2277 9483, 2278 8586 2279 ], 2280 [ 2281 9467, 2282 8544 2283 ], 2284 [ 2285 9433, 2286 8531 2287 ], 2288 [ 2289 9420, 2290 8493 2291 ], 2292 [ 2293 9387, 2294 8524 2295 ], 2296 [ 2297 9346, 2298 8471 2299 ], 2300 [ 2301 9362, 2302 8439 2303 ], 2304 [ 2305 9314, 2306 8347 2307 ], 2308 [ 2309 9298, 2310 8291 2311 ], 2312 [ 2313 9235, 2314 8354 2315 ], 2316 [ 2317 9225, 2318 8399 2319 ] 2320 ] 2321 ] 2322 ] 2323 } 2324 }, 2325 { 2326 "type": "Feature", 2327 "id": "US.MI", 2328 "properties": { 2329 "hc-group": "admin1", 2330 "hc-middle-x": 0.71, 2331 "hc-middle-y": 0.67, 2332 "hc-key": "us-mi", 2333 "hc-a2": "MI", 2334 "labelrank": "0", 2335 "hasc": "US.MI", 2336 "woe-id": "2347581", 2337 "state-fips": "26", 2338 "fips": "US26", 2339 "postal-code": "MI", 2340 "name": "Michigan", 2341 "country": "United States of America", 2342 "region": "Midwest", 2343 "longitude": "-84.9479", 2344 "woe-name": "Michigan", 2345 "latitude": "43.4343", 2346 "woe-label": "Michigan, US, United States", 2347 "type": "State" 2348 }, 2349 "geometry": { 2350 "type": "MultiPolygon", 2351 "coordinates": [ 2352 [ 2353 [ 2354 [ 2355 6802, 2356 8561 2357 ], 2358 [ 2359 6808, 2360 8523 2361 ], 2362 [ 2363 6764, 2364 8521 2365 ], 2366 [ 2367 6774, 2368 8565 2369 ], 2370 [ 2371 6802, 2372 8561 2373 ] 2374 ] 2375 ], 2376 [ 2377 [ 2378 [ 2379 5863, 2380 9010 2381 ], 2382 [ 2383 5834, 2384 8966 2385 ], 2386 [ 2387 5759, 2388 8913 2389 ], 2390 [ 2391 5758, 2392 8947 2393 ], 2394 [ 2395 5863, 2396 9010 2397 ] 2398 ] 2399 ], 2400 [ 2401 [ 2402 [ 2403 6976, 2404 7443 2405 ], 2406 [ 2407 6815, 2408 7415 2409 ], 2410 [ 2411 6718, 2412 7400 2413 ], 2414 [ 2415 6716, 2416 7416 2417 ], 2418 [ 2419 6323, 2420 7372 2421 ], 2422 [ 2423 6364, 2424 7423 2425 ], 2426 [ 2427 6399, 2428 7509 2429 ], 2430 [ 2431 6417, 2432 7630 2433 ], 2434 [ 2435 6409, 2436 7695 2437 ], 2438 [ 2439 6330, 2440 7861 2441 ], 2442 [ 2443 6345, 2444 7903 2445 ], 2446 [ 2447 6322, 2448 7979 2449 ], 2450 [ 2451 6361, 2452 8059 2453 ], 2454 [ 2455 6352, 2456 8141 2457 ], 2458 [ 2459 6381, 2460 8159 2461 ], 2462 [ 2463 6381, 2464 8204 2465 ], 2466 [ 2467 6423, 2468 8217 2469 ], 2470 [ 2471 6453, 2472 8283 2473 ], 2474 [ 2475 6469, 2476 8252 2477 ], 2478 [ 2479 6460, 2480 8196 2481 ], 2482 [ 2483 6479, 2484 8180 2485 ], 2486 [ 2487 6501, 2488 8221 2489 ], 2490 [ 2491 6497, 2492 8298 2493 ], 2494 [ 2495 6533, 2496 8342 2497 ], 2498 [ 2499 6567, 2500 8348 2501 ], 2502 [ 2503 6542, 2504 8410 2505 ], 2506 [ 2507 6593, 2508 8461 2509 ], 2510 [ 2511 6646, 2512 8436 2513 ], 2514 [ 2515 6627, 2516 8469 2517 ], 2518 [ 2519 6669, 2520 8467 2521 ], 2522 [ 2523 6654, 2524 8434 2525 ], 2526 [ 2527 6698, 2528 8433 2529 ], 2530 [ 2531 6726, 2532 8400 2533 ], 2534 [ 2535 6837, 2536 8377 2537 ], 2538 [ 2539 6863, 2540 8359 2541 ], 2542 [ 2543 6884, 2544 8307 2545 ], 2546 [ 2547 6860, 2548 8285 2549 ], 2550 [ 2551 6902, 2552 8213 2553 ], 2554 [ 2555 6903, 2556 8115 2557 ], 2558 [ 2559 6872, 2560 8094 2561 ], 2562 [ 2563 6868, 2564 8040 2565 ], 2566 [ 2567 6821, 2568 8014 2569 ], 2570 [ 2571 6824, 2572 7934 2573 ], 2574 [ 2575 6868, 2576 7920 2577 ], 2578 [ 2579 6900, 2580 7950 2581 ], 2582 [ 2583 6937, 2584 8030 2585 ], 2586 [ 2587 6993, 2588 8059 2589 ], 2590 [ 2591 7042, 2592 8027 2593 ], 2594 [ 2595 7097, 2596 7866 2597 ], 2598 [ 2599 7128, 2600 7802 2601 ], 2602 [ 2603 7124, 2604 7704 2605 ], 2606 [ 2607 7066, 2608 7697 2609 ], 2610 [ 2611 7061, 2612 7631 2613 ], 2614 [ 2615 7021, 2616 7590 2617 ], 2618 [ 2619 7008, 2620 7500 2621 ], 2622 [ 2623 6976, 2624 7443 2625 ] 2626 ] 2627 ], 2628 [ 2629 [ 2630 [ 2631 5874, 2632 8741 2633 ], 2634 [ 2635 5900, 2636 8700 2637 ], 2638 [ 2639 5901, 2640 8651 2641 ], 2642 [ 2643 5938, 2644 8693 2645 ], 2646 [ 2647 6017, 2648 8689 2649 ], 2650 [ 2651 6049, 2652 8673 2653 ], 2654 [ 2655 6107, 2656 8596 2657 ], 2658 [ 2659 6174, 2660 8609 2661 ], 2662 [ 2663 6192, 2664 8589 2665 ], 2666 [ 2667 6244, 2668 8596 2669 ], 2670 [ 2671 6318, 2672 8663 2673 ], 2674 [ 2675 6430, 2676 8674 2677 ], 2678 [ 2679 6485, 2680 8705 2681 ], 2682 [ 2683 6529, 2684 8713 2685 ], 2686 [ 2687 6518, 2688 8645 2689 ], 2690 [ 2691 6560, 2692 8631 2693 ], 2694 [ 2695 6591, 2696 8646 2697 ], 2698 [ 2699 6609, 2700 8627 2701 ], 2702 [ 2703 6633, 2704 8653 2705 ], 2706 [ 2707 6688, 2708 8665 2709 ], 2710 [ 2711 6692, 2712 8589 2713 ], 2714 [ 2715 6745, 2716 8536 2717 ], 2718 [ 2719 6723, 2720 8521 2721 ], 2722 [ 2723 6631, 2724 8516 2725 ], 2726 [ 2727 6606, 2728 8530 2729 ], 2730 [ 2731 6598, 2732 8476 2733 ], 2734 [ 2735 6541, 2736 8514 2737 ], 2738 [ 2739 6480, 2740 8
2740529 2741 ], 2742 [ 2743 6444, 2744 8521 2745 ], 2746 [ 2747 6426, 2748 8490 2749 ], 2750 [ 2751 6320, 2752 8470 2753 ], 2754 [ 2755 6302, 2756 8429 2757 ], 2758 [ 2759 6244, 2760 8388 2761 ], 2762 [ 2763 6264, 2764 8448 2765 ], 2766 [ 2767 6227, 2768 8437 2769 ], 2770 [ 2771 6192, 2772 8395 2773 ], 2774 [ 2775 6185, 2776 8444 2777 ], 2778 [ 2779 6096, 2780 8224 2781 ], 2782 [ 2783 6071, 2784 8242 2785 ], 2786 [ 2787 6080, 2788 8287 2789 ], 2790 [ 2791 6042, 2792 8286 2793 ], 2794 [ 2795 6045, 2796 8372 2797 ], 2798 [ 2799 5993, 2800 8394 2801 ], 2802 [ 2803 5968, 2804 8437 2805 ], 2806 [ 2807 5849, 2808 8447 2809 ], 2810 [ 2811 5795, 2812 8473 2813 ], 2814 [ 2815 5611, 2816 8510 2817 ], 2818 [ 2819 5588, 2820 8553 2821 ], 2822 [ 2823 5554, 2824 8572 2825 ], 2826 [ 2827 5623, 2828 8604 2829 ], 2830 [ 2831 5661, 2832 8642 2833 ], 2834 [ 2835 5731, 2836 8656 2837 ], 2838 [ 2839 5776, 2840 8696 2841 ], 2842 [ 2843 5805, 2844 8702 2845 ], 2846 [ 2847 5860, 2848 8764 2849 ], 2850 [ 2851 5868, 2852 8750 2853 ], 2854 [ 2855 5893, 2856 8802 2857 ], 2858 [ 2859 5958, 2860 8837 2861 ], 2862 [ 2863 6017, 2864 8829 2865 ], 2866 [ 2867 5931, 2868 8757 2869 ], 2870 [ 2871 5903, 2872 8703 2873 ], 2874 [ 2875 5900, 2876 8738 2877 ], 2878 [ 2879 5874, 2880 8741 2881 ] 2882 ] 2883 ] 2884 ] 2885 } 2886 }, 2887 { 2888 "type": "Feature", 2889 "id": "US.NV", 2890 "properties": { 2891 "hc-group": "admin1", 2892 "hc-middle-x": 0.46, 2893 "hc-middle-y": 0.38, 2894 "hc-key": "us-nv", 2895 "hc-a2": "NV", 2896 "labelrank": "0", 2897 "hasc": "US.NV", 2898 "woe-id": "2347587", 2899 "state-fips": "32", 2900 "fips": "US32", 2901 "postal-code": "NV", 2902 "name": "Nevada", 2903 "country": "United States of America", 2904 "region": "West", 2905 "longitude": "-117.02", 2906 "woe-name": "Nevada", 2907 "latitude": "39.4299", 2908 "woe-label": "Nevada, US, United States", 2909 "type": "State" 2910 }, 2911 "geometry": { 2912 "type": "Polygon", 2913 "coordinates": [ 2914 [ 2915 [ 2916 -50, 2917 7955 2918 ], 2919 [ 2920 510, 2921 7813 2922 ], 2923 [ 2924 897, 2925 7727 2926 ], 2927 [ 2928 1073, 2929 7690 2930 ], 2931 [ 2932 929, 2933 6975 2934 ], 2935 [ 2936 818, 2937 6420 2938 ], 2939 [ 2940 777, 2941 6221 2942 ], 2943 [ 2944 752, 2945 6180 2946 ], 2947 [ 2948 669, 2949 6227 2950 ], 2951 [ 2952 631, 2953 6217 2954 ], 2955 [ 2956 631, 2957 6159 2958 ], 2959 [ 2960 611, 2961 6068 2962 ], 2963 [ 2964 614, 2965 5982 2966 ], 2967 [ 2968 593, 2969 5936 2970 ], 2971 [ 2972 261, 2973 6430 2974 ], 2975 [ 2976 32, 2977 6779 2978 ], 2979 [ 2980 -253, 2981 7203 2982 ], 2983 [ 2984 -50, 2985 7955 2986 ] 2987 ] 2988 ] 2989 } 2990 }, 2991 { 2992 "type": "Feature", 2993 "id": "US.NM", 2994 "properties": { 2995 "hc-group": "admin1", 2996 "hc-middle-x": 0.51, 2997 "hc-middle-y": 0.5, 2998 "hc-key": "us-nm", 2999 "hc-a2": "NM", 3000 "labelrank": "0", 3001 "hasc": "US.NM", 3002 "woe-id": "2347590", 3003 "state-fips": "35", 3004 "fips": "US35", 3005 "postal-code": "NM", 3006 "name": "New Mexico", 3007 "country": "United States of America", 3008 "region": "West", 3009 "longitude": "-106.024", 3010 "woe-name": "New Mexico", 3011 "latitude": "34.5002", 3012 "woe-label": "New Mexico, US, United States", 3013 "type": "State" 3014 }, 3015 "geometry": { 3016 "type": "Polygon", 3017 "coordinates": [ 3018 [ 3019 [ 3020 1841, 3021 6242 3022 ], 3023 [ 3024 3091, 3025 6104 3026 ], 3027 [ 3028 3083, 3029 6007 3030 ], 3031 [ 3032 3081, 3033 5975 3034 ], 3035 [ 3036 3072, 3037 5970 3038 ], 3039 [ 3040 2976, 3041 4810 3042 ], 3043 [ 3044 2181, 3045 4887 3046 ], 3047 [ 3048 2208, 3049 4823 3050 ], 3051 [ 3052 1830, 3053 4873 3054 ], 3055 [ 3056 1815, 3057 4756 3058 ], 3059 [ 3060 1630, 3061 4782 3062 ], 3063 [ 3064 1736, 3065 5514 3066 ], 3067 [ 3068 1841, 3069 6242 3070 ] 3071 ] 3072 ] 3073 } 3074 }, 3075 { 3076 "type": "Feature", 3077 "id": "US.CO", 3078 "properties": { 3079 "hc-group": "admin1", 3080 "hc-middle-x": 0.51, 3081 "hc-middle-y": 0.5, 3082 "hc-key": "us-co", 3083 "hc-a2": "CO", 3084 "labelrank": "0", 3085 "hasc": "US.CO", 3086 "woe-id": "2347564", 3087 "state-fips": "8", 3088 "fips": "US08", 3089 "postal-code": "CO", 3090 "name": "Colorado", 3091 "country": "United States of America", 3092 "region": "West", 3093 "longitude": "-105.543", 3094 "woe-name": "Colorado", 3095 "latitude": "38.9998", 3096 "woe-label": "Colorado, US, United States", 3097 "type": "State" 3098 }, 3099 "geometry": { 3100 "type": "Polygon", 3101 "coordinates": [ 3102 [ 3103 [ 3104 3091, 3105 6104 3106 ], 3107 [ 3108 1841, 3109 6242 3110 ], 3111 [ 3112 1966, 3113 7108 3114 ], 3115 [ 3116 1990, 3117 7269 3118 ], 3119 [ 3120 2964, 3121 7155 3122 ], 3123 [ 3124 3357, 3125 7124 3126 ], 3127 [ 3128 3339, 3129 6866 3130 ], 3131 [ 3132 3329, 3133 6696 3134 ], 3135 [ 3136 3290, 3137 6089 3138 ], 3139 [ 3140 3091, 3141 6104 3142 ] 3143 ] 3144 ] 3145 } 3146 }, 3147 { 3148 "type": "Feature", 3149 "id": "US.WY", 3150 "properties": { 3151 "hc-group": "admin1", 3152 "hc-middle-x": 0.51, 3153 "hc-middle-y": 0.5, 3154 "hc-key": "us-wy", 3155 "hc-a2": "WY", 3156 "labelrank": "0", 3157 "hasc": "US.WY", 3158 "woe-id": "2347609", 3159 "state-fips": "56", 3160 "fips": "US56", 3161 "postal-code": "WY", 3162 "name": "Wyoming", 3163 "country": "United States of America", 3164 "region": "West", 3165 "longitude": "-107.552", 3166 "woe-name": "Wyoming", 3167 "latitude": "42.9999",
3168 "woe-label": "Wyoming, US, United States", 3169 "type": "State" 3170 }, 3171 "geometry": { 3172 "type": "Polygon", 3173 "coordinates": [ 3174 [ 3175 [ 3176 2964, 3177 7155 3178 ], 3179 [ 3180 1990, 3181 7269 3182 ], 3183 [ 3184 1600, 3185 7329 3186 ], 3187 [ 3188 1643, 3189 7585 3190 ], 3191 [ 3192 1677, 3193 7785 3194 ], 3195 [ 3196 1750, 3197 8226 3198 ], 3199 [ 3200 1772, 3201 8355 3202 ], 3203 [ 3204 3056, 3205 8191 3206 ], 3207 [ 3208 3019, 3209 7770 3210 ], 3211 [ 3212 3010, 3213 7672 3214 ], 3215 [ 3216 3002, 3217 7575 3218 ], 3219 [ 3220 2964, 3221 7155 3222 ] 3223 ] 3224 ] 3225 } 3226 }, 3227 { 3228 "type": "Feature", 3229 "id": "US.KS", 3230 "properties": { 3231 "hc-group": "admin1", 3232 "hc-middle-x": 0.3, 3233 "hc-middle-y": 0.49, 3234 "hc-key": "us-ks", 3235 "hc-a2": "KS", 3236 "labelrank": "0", 3237 "hasc": "US.KS", 3238 "woe-id": "2347575", 3239 "state-fips": "20", 3240 "fips": "US20", 3241 "postal-code": "KS", 3242 "name": "Kansas", 3243 "country": "United States of America", 3244 "region": "Midwest", 3245 "longitude": "-98.3309", 3246 "woe-name": "Kansas", 3247 "latitude": "38.5", 3248 "woe-label": "Kansas, US, United States", 3249 "type": "State" 3250 }, 3251 "geometry": { 3252 "type": "Polygon", 3253 "coordinates": [ 3254 [ 3255 [ 3256 3339, 3257 6866 3258 ], 3259 [ 3260 4682, 3261 6826 3262 ], 3263 [ 3264 4769, 3265 6780 3266 ], 3267 [ 3268 4726, 3269 6705 3270 ], 3271 [ 3272 4767, 3273 6667 3274 ], 3275 [ 3276 4781, 3277 6624 3278 ], 3279 [ 3280 4824, 3281 6600 3282 ], 3283 [ 3284 4833, 3285 6050 3286 ], 3287 [ 3288 3290, 3289 6089 3290 ], 3291 [ 3292 3329, 3293 6696 3294 ], 3295 [ 3296 3339, 3297 6866 3298 ] 3299 ] 3300 ] 3301 } 3302 }, 3303 { 3304 "type": "Feature", 3305 "id": "US.NE", 3306 "properties": { 3307 "hc-group": "admin1", 3308 "hc-middle-x": 0.43, 3309 "hc-middle-y": 0.5, 3310 "hc-key": "us-ne", 3311 "hc-a2": "NE", 3312 "labelrank": "0", 3313 "hasc": "US.NE", 3314 "woe-id": "2347586", 3315 "state-fips": "31", 3316 "fips": "US31", 3317 "postal-code": "NE", 3318 "name": "Nebraska", 3319 "country": "United States of America", 3320 "region": "Midwest", 3321 "longitude": "-99.68550000000001", 3322 "woe-name": "Nebraska", 3323 "latitude": "41.5002", 3324 "woe-label": "Nebraska, US, United States", 3325 "type": "State" 3326 }, 3327 "geometry": { 3328 "type": "Polygon", 3329 "coordinates": [ 3330 [ 3331 [ 3332 4682, 3333 6826 3334 ], 3335 [ 3336 3339, 3337 6866 3338 ], 3339 [ 3340 3357, 3341 7124 3342 ], 3343 [ 3344 2964, 3345 7155 3346 ], 3347 [ 3348 3002, 3349 7575 3350 ], 3351 [ 3352 3010, 3353 7672 3354 ], 3355 [ 3356 4071, 3357 7611 3358 ], 3359 [ 3360 4148, 3361 7558 3362 ], 3363 [ 3364 4194, 3365 7574 3366 ], 3367 [ 3368 4297, 3369 7577 3370 ], 3371 [ 3372 4330, 3373 7551 3374 ], 3375 [ 3376 4409, 3377 7521 3378 ], 3379 [ 3380 4453, 3381 7479 3382 ], 3383 [ 3384 4469, 3385 7474 3386 ], 3387 [ 3388 4478, 3389 7398 3390 ], 3391 [ 3392 4515, 3393 7341 3394 ], 3395 [ 3396 4533, 3397 7291 3398 ], 3399 [ 3400 4529, 3401 7228 3402 ], 3403 [ 3404 4559, 3405 7206 3406 ], 3407 [ 3408 4571, 3409 7165 3410 ], 3411 [ 3412 4579, 3413 7031 3414 ], 3415 [ 3416 4592, 3417 6986 3418 ], 3419 [ 3420 4592, 3421 6981 3422 ], 3423 [ 3424 4592, 3425 6981 3426 ], 3427 [ 3428 4591, 3429 6981 3430 ], 3431 [ 3432 4591, 3433 6981 3434 ], 3435 [ 3436 4619, 3437 6915 3438 ], 3439 [ 3440 4682, 3441 6826 3442 ] 3443 ] 3444 ] 3445 } 3446 }, 3447 { 3448 "type": "Feature", 3449 "id": "US.OK", 3450 "properties": { 3451 "hc-group": "admin1", 3452 "hc-middle-x": 0.78, 3453 "hc-middle-y": 0.52, 3454 "hc-key": "us-ok", 3455 "hc-a2": "OK", 3456 "labelrank": "0", 3457 "hasc": "US.OK", 3458 "woe-id": "2347595", 3459 "state-fips": "40", 3460 "fips": "US40", 3461 "postal-code": "OK", 3462 "name": "Oklahoma", 3463 "country": "United States of America",
3464 "region": "South", 3465 "longitude": "-97.1309", 3466 "woe-name": "Oklahoma", 3467 "latitude": "35.452", 3468 "woe-label": "Oklahoma, US, United States", 3469 "type": "State" 3470 }, 3471 "geometry": { 3472 "type": "Polygon", 3473 "coordinates": [ 3474 [ 3475 [ 3476 3290, 3477 6089 3478 ], 3479 [ 3480 4833, 3481 6050 3482 ], 3483 [ 3484 4833, 3485 6017 3486 ], 3487 [ 3488 4835, 3489 5920 3490 ], 3491 [ 3492 4877, 3493 5632 3494 ], 3495 [ 3496 4875, 3497 5180 3498 ], 3499 [ 3500 4790, 3501 5207 3502 ], 3503 [ 3504 4714, 3505 5260 3506 ], 3507 [ 3508 4685, 3509 5235 3510 ], 3511 [ 3512 4632, 3513 5257 3514 ], 3515 [ 3516 4595, 3517 5233 3518 ], 3519 [ 3520 4559, 3521 5242 3522 ], 3523 [ 3524 4474, 3525 5191 3526 ], 3527 [ 3528 4405, 3529 5248 3530 ], 3531 [ 3532 4360, 3533 5237 3534 ], 3535 [ 3536 4347, 3537 5258 3538 ], 3539 [ 3540 4312, 3541 5234 3542 ], 3543 [ 3544 4304, 3545 5199 3546 ], 3547 [ 3548 4283, 3549 5247 3550 ], 3551 [ 3552 4248, 3553 5227 3554 ], 3555 [ 3556 4181, 3557 5268 3558 ], 3559 [ 3560 4121, 3561 5246 3562 ], 3563 [ 3564 4093, 3565 5310 3566 ], 3567 [ 3568 4007, 3569 5296 3570 ], 3571 [ 3572 3908, 3573 5334 3574 ], 3575 [ 3576 3856, 3577 5341 3578 ], 3579 [ 3580 3842, 3581 5388 3582 ], 3583 [ 3584 3753, 3585 5388 3586 ], 3587 [ 3588 3686, 3589 5437 3590 ], 3591 [ 3592 3707, 3593 5936 3594 ], 3595 [ 3596 3081, 3597 5975 3598 ], 3599 [ 3600 3083, 3601 6007 3602 ], 3603 [ 3604 3091, 3605 6104 3606 ], 3607 [ 3608 3290, 3609 6089 3610 ] 3611 ] 3612 ] 3613 } 3614 }, 3615 { 3616 "type": "Feature", 3617 "id": "US.MO",
3618 "properties": { 3619 "hc-group": "admin1", 3620 "hc-middle-x": 0.48, 3621 "hc-middle-y": 0.51, 3622 "hc-key": "us-mo", 3623 "hc-a2": "MO", 3624 "labelrank": "0", 3625 "hasc": "US.MO", 3626 "woe-id": "2347584", 3627 "state-fips": "29", 3628 "fips": "US29", 3629 "postal-code": "MO", 3630 "name": "Missouri", 3631 "country": "United States of America", 3632 "region": "Midwest", 3633 "longitude": "-92.446", 3634 "woe-name": "Missouri", 3635 "latitude": "38.5487", 3636 "woe-label": "Missouri, US, United States", 3637 "type": "State" 3638 }, 3639 "geometry": { 3640 "type": "Polygon", 3641 "coordinates": [ 3642 [ 3643 [ 3644 4835, 3645 5920 3646 ], 3647 [ 3648 4833, 3649 6017 3650 ], 3651 [ 3652 4833, 3653 6050 3654 ], 3655 [ 3656 4824, 3657 6600 3658 ], 3659 [ 3660 4781, 3661 6624 3662 ], 3663 [ 3664 4767, 3665 6667 3666 ], 3667 [ 3668 4726, 3669 6705 3670 ], 3671 [ 3672 4769, 3673 6780 3674 ], 3675 [ 3676 4682, 3677 6826 3678 ], 3679 [ 3680 4619, 3681 6915 3682 ], 3683 [ 3684 4591, 3685 6981 3686 ], 3687 [ 3688 4591, 3689 6981 3690 ], 3691 [ 3692 4592, 3693 6981 3694 ], 3695 [ 3696 4846, 3697 6977 3698 ], 3699 [ 3700 5120, 3701 6985 3702 ], 3703 [ 3704 5389, 3705 7006 3706 ], 3707 [ 3708 5449, 3709 6947 3710 ], 3711 [ 3712 5449, 3713 6947 3714 ], 3715 [ 3716 5449, 3717 6947 3718 ], 3719 [ 3720 5436, 3721 6893 3722 ], 3723 [ 3724 5454, 3725 6813 3726 ], 3727 [ 3728 5475, 3729 6774 3730 ], 3731 [ 3732 5540, 3733 6711 3734 ], 3735 [ 3736 5588, 3737 6679 3738 ], 3739 [ 3740 5616, 3741 6596 3742 ], 3743 [ 3744 5642, 3745 6567 3746 ], 3747 [ 3748 5672, 3749 6592 3750 ], 3751 [ 3752 5735, 3753 6561 3754 ], 3755 [ 3756 5692, 3757 6420 3758 ], 3759 [ 3760 5752, 3761 6350 3762 ], 3763 [ 3764 5792, 3765 6336 3766 ], 3767 [ 3768 5873, 3769 6276 3770 ], 3771 [ 3772 5898, 3773 6211 3774 ], 3775 [ 3776 5886, 3777 6165 3778 ], 3779 [ 3780 5918, 3781 6121 3782 ], 3783 [ 3784 5975, 3785 6097 3786 ], 3787 [ 3788 5976, 3789 6033 3790 ], 3791 [ 3792 5956, 3793 5988 3794 ], 3795 [ 3796 5932, 3797 6005 3798 ], 3799 [ 3800 5921, 3801 5968 3802 ], 3803 [ 3804 5911, 3805 5955 3806 ], 3807 [ 3808 5907, 3809 5967 3810 ], 3811 [ 3812 5890, 3813 5980 3814 ], 3815 [ 3816 5893, 3817 5966 3818 ], 3819 [ 3820 5901, 3821 5936 3822 ], 3823 [ 3824 5869, 3825 5898 3826 ], 3827 [ 3828 5888, 3829 5872 3830 ], 3831 [ 3832 5868, 3833 5834 3834 ], 3835 [ 3836 5731, 3837 5821 3838 ], 3839 [ 3840 5790, 3841 5904 3842 ], 3843 [ 3844 5767, 3845 5957 3846 ], 3847 [ 3848 4835, 3849 5920 3850 ] 3851 ] 3852 ] 3853 } 3854 }, 3855 { 3856 "type": "Feature", 3857 "id": "US.IL", 3858 "properties": { 3859 "hc-group": "admin1", 3860 "hc-middle-x": 0.56, 3861 "hc-middle-y": 0.45, 3862 "hc-key": "us-il", 3863 "hc-a2": "IL", 3864 "labelrank": "0", 3865 "hasc": "US.IL", 3866 "woe-id": "2347572", 3867 "state-fips": "17", 3868 "fips": "US17", 3869 "postal-code": "IL", 3870 "name": "Illinois", 3871 "country": "United States of America", 3872 "region": "Midwest", 3873 "longitude": "-89.1991", 3874 "woe-name": "Illinois", 3875 "latitude": "39.946", 3876 "woe-label": "Illinois, US, United States", 3877 "type": "State" 3878 }, 3879 "geometry": { 3880 "type": "Polygon", 3881 "coordinates": [ 3882 [ 3883 [ 3884 6119, 3885 7543 3886 ], 3887 [ 3888 6121, 3889 7488 3890 ], 3891 [ 3892 6192, 3893 7351 3894 ], 3895 [ 3896 6247, 3897 6739 3898 ], 3899 [ 3900 6226, 3901 6674 3902 ], 3903 [ 3904 6254, 3905 6638 3906 ], 3907 [ 3908 6266, 3909 6585 3910 ], 3911 [ 3912 6244, 3913 6520 3914 ], 3915 [ 3916 6222, 3917 6503 3918 ], 3919 [ 3920 6194,
3921 6422 3922 ], 3923 [ 3924 6176, 3925 6404 3926 ], 3927 [ 3928 6179, 3929 6328 3930 ], 3931 [ 3932 6159, 3933 6283 3934 ], 3935 [ 3936 6171, 3937 6241 3938 ], 3939 [ 3940 6102, 3941 6218 3942 ], 3943 [ 3944 6105, 3945 6131 3946 ], 3947 [ 3948 6015, 3949 6162 3950 ], 3951 [ 3952 5987, 3953 6157 3954 ], 3955 [ 3956 5962, 3957 6117 3958 ], 3959 [ 3960 5975, 3961 6097 3962 ], 3963 [ 3964 5918, 3965 6121 3966 ], 3967 [ 3968 5886, 3969 6165 3970 ], 3971 [ 3972 5898, 3973 6211 3974 ], 3975 [ 3976 5873, 3977 6276 3978 ], 3979 [ 3980 5792, 3981 6336 3982 ], 3983 [ 3984 5752, 3985 6350 3986 ], 3987 [ 3988 5692, 3989 6420 3990 ], 3991 [ 3992 5735, 3993 6561 3994 ], 3995 [ 3996 5672, 3997 6592 3998 ], 3999 [ 4000 5642, 4001 6567 4002 ], 4003 [ 4004 5616, 4005 6596 4006 ], 4007 [ 4008 5588, 4009 6679 4010 ], 4011 [ 4012 5540, 4013 6711 4014 ], 4015 [ 4016 5475, 4017 6774 4018 ], 4019 [ 4020 5454, 4021 6813 4022 ], 4023 [ 4024 5436, 4025 6893 4026 ], 4027 [ 4028 5449, 4029 6947 4030 ], 4031 [ 4032 5449, 4033 6947 4034 ], 4035 [ 4036 5449, 4037 6947 4038 ], 4039 [ 4040 5458, 4041 7004 4042 ], 4043 [ 4044 5496, 4045 7020 4046 ], 4047 [ 4048 5535, 4049 7098 4050 ], 4051 [ 4052 5536, 4053 7132 4054 ], 4055 [ 4056 5509, 4057 7160 4058 ], 4059 [ 4060 5523, 4061 7224 4062 ], 4063 [ 4064 5579, 4065 7232 4066 ], 4067 [ 4068 5646, 4069 7276 4070 ], 4071 [ 4072 5671, 4073 7332
4074 ], 4075 [ 4076 5672, 4077 7411 4078 ], 4079 [ 4080 5625, 4081 7441 4082 ], 4083 [ 4084 5575, 4085 7508 4086 ], 4087 [ 4088 5575, 4089 7508 4090 ], 4091 [ 4092 5606, 4093 7509 4094 ], 4095 [ 4096 5848, 4097 7523 4098 ], 4099 [ 4100 6119, 4101 7543 4102 ] 4103 ] 4104 ] 4105 } 4106 }, 4107 { 4108 "type": "Feature", 4109 "id": "US.IN", 4110 "properties": { 4111 "hc-group": "admin1", 4112 "hc-middle-x": 0.49, 4113 "hc-middle-y": 0.43, 4114 "hc-key": "us-in", 4115 "hc-a2": "IN", 4116 "labelrank": "0", 4117 "hasc": "US.IN", 4118 "woe-id": "2347573", 4119 "state-fips": "18", 4120 "fips": "US18", 4121 "postal-code": "IN", 4122 "name": "Indiana", 4123 "country": "United States of America", 4124 "region": "Midwest", 4125 "longitude": "-86.1396", 4126 "woe-name": "Indiana", 4127 "latitude": "39.8874", 4128 "woe-label": "Indiana, US, United States", 4129 "type": "State" 4130 }, 4131 "geometry": { 4132 "type": "Polygon", 4133 "coordinates": [ 4134 [ 4135 [ 4136 6192, 4137 7351 4138 ], 4139 [ 4140 6239, 4141 7329 4142 ], 4143 [ 4144 6323, 4145 7372 4146 ], 4147 [ 4148 6716, 4149 7416 4150 ], 4151 [ 4152 6718, 4153 7400 4154 ], 4155 [ 4156 6732, 4157 7296 4158 ], 4159 [ 4160 6797, 4161 6730 4162 ], 4163 [ 4164 6792, 4165 6683 4166 ], 4167 [ 4168 6808, 4169 6651 4170 ], 4171 [ 4172 6737, 4173 6617 4174 ], 4175 [ 4176 6682, 4177 6619 4178 ], 4179 [ 4180 6693, 4181 6572 4182 ], 4183 [ 4184 6657, 4185 6540 4186 ], 4187 [ 4188 6652, 4189 6507 4190 ], 4191 [ 4192 6622, 4193 6498 4194 ], 4195 [ 4196 6608, 4197 6438 4198 ], 4199 [ 4200 6583, 4201 6411 4202 ], 4203 [ 4204 6531, 4205 6450 4206 ], 4207 [ 4208 6485, 4209 6413 4210 ], 4211 [ 4212 6485, 4213 6390 4214 ], 4215 [ 4216 6444, 4217 6379 4218 ], 4219 [ 4220 6426, 4221 6401 4222 ], 4223 [ 4224 6359, 4225 6356 4226 ], 4227 [ 4228 6303, 4229 6376 4230 ], 4231 [ 4232 6269, 4233 6350 4234 ], 4235 [ 4236 6209, 4237 6363 4238 ], 4239 [ 4240 6179, 4241 6328 4242 ], 4243 [ 4244 6176, 4245 6404 4246 ], 4247 [ 4248 6194,
4249 6422 4250 ], 4251 [ 4252 6222, 4253 6503 4254 ], 4255 [ 4256 6244, 4257 6520 4258 ], 4259 [ 4260 6266, 4261 6585 4262 ], 4263 [ 4264 6254, 4265 6638 4266 ], 4267 [ 4268 6226, 4269 6674 4270 ], 4271 [ 4272 6247, 4273 6739 4274 ], 4275 [ 4276 6192, 4277 7351 4278 ] 4279 ] 4280 ] 4281 } 4282 }, 4283 { 4284 "type": "Feature", 4285 "id": "US.VT", 4286 "properties": { 4287 "hc-group": "admin1", 4288 "hc-middle-x": 0.77, 4289 "hc-middle-y": 0.38, 4290 "hc-key": "us-vt", 4291 "hc-a2": "VT", 4292 "labelrank": "0", 4293 "hasc": "US.VT", 4294 "woe-id": "2347604", 4295 "state-fips": "50", 4296 "fips": "US50", 4297 "postal-code": "VT", 4298 "name": "Vermont", 4299 "country": "United States of America", 4300 "region": "Northeast", 4301 "longitude": "-72.7317", 4302 "woe-name": "Vermont", 4303 "latitude": "44.0886", 4304 "woe-label": "Vermont, US, United States", 4305 "type": "State" 4306 }, 4307 "geometry": { 4308 "type": "MultiPolygon", 4309 "coordinates": [ 4310 [ 4311 [ 4312 [ 4313 9727, 4314 8766 4315 ], 4316 [ 4317 10595, 4318 8766 4319 ], 4320 [ 4321 10595, 4322 8239 4323 ], 4324 [ 4325 9727, 4326 8239 4327 ], 4328 [ 4329 9727, 4330 8766 4331 ] 4332 ] 4333 ], 4334 [ 4335 [ 4336 [ 4337 8922, 4338 8096 4339 ], 4340 [ 4341 8856, 4342 8080 4343 ], 4344 [ 4345 8807, 4346 8284 4347 ], 4348 [ 4349 8772, 4350 8287 4351 ], 4352 [ 4353 8772, 4354 8328 4355 ], 4356 [ 4357 8740, 4358 8402 4359 ], 4360 [ 4361 8748, 4362 8453 4363 ], 4364 [ 4365 8739, 4366 8514 4367 ], 4368 [ 4369 8720, 4370 8537 4371 ], 4372 [ 4373 8695, 4374 8646 4375 ], 4376 [ 4377 8811, 4378 8677 4379 ], 4380 [ 4381 9024, 4382 8736 4383 ], 4384 [ 4385 9020, 4386 8661 4387 ], 4388 [ 4389 9045, 4390 8629 4391 ], 4392 [ 4393 9033, 4394 8585 4395 ], 4396 [ 4397 8978, 4398 8526 4399 ], 4400 [ 4401 8986, 4402 8490 4403 ], 4404 [ 4405 8981, 4406 8392 4407 ], 4408 [ 4409 8964, 4410 8320 4411 ], 4412 [ 4413 8979, 4414 8261 4415 ], 4416 [ 4417 8979, 4418 8148 4419 ], 4420 [ 4421 9005, 4422 8115 4423 ], 4424 [ 4425 9005, 4426 8115 4427 ], 4428 [ 4429 8922, 4430 8096 4431 ] 4432 ] 4433 ] 4434 ] 4435 } 4436 }, 4437 { 4438 "type": "Feature", 4439 "id": "US.AR", 4440 "properties": { 4441 "hc-group": "admin1", 4442 "hc-middle-x": 0.47, 4443 "hc-middle-y": 0.43, 4444 "hc-key": "us-ar", 4445 "hc-a2": "AR", 4446 "labelrank": "0", 4447 "hasc": "US.AR", 4448 "woe-id": "2347562", 4449 "state-fips": "5", 4450 "fips": "US05", 4451 "postal-code": "AR", 4452 "name": "Arkansas", 4453 "country": "United States of America",
4454 "region": "South", 4455 "longitude": "-92.14279999999999", 4456 "woe-name": "Arkansas", 4457 "latitude": "34.7563", 4458 "woe-label": "Arkansas, US, United States", 4459 "type": "State" 4460 }, 4461 "geometry": { 4462 "type": "Polygon", 4463 "coordinates": [ 4464 [ 4465 [ 4466 4975, 4467 5016 4468 ], 4469 [ 4470 4971, 4471 5157 4472 ], 4473 [ 4474 4910, 4475 5157 4476 ], 4477 [ 4478 4875, 4479 5180 4480 ], 4481 [ 4482 4877, 4483 5632 4484 ], 4485 [ 4486 4835, 4487 5920 4488 ], 4489 [ 4490 5767, 4491 5957 4492 ], 4493 [ 4494 5790, 4495 5904 4496 ], 4497 [ 4498 5731, 4499 5821 4500 ], 4501 [ 4502 5868, 4503 5834 4504 ], 4505 [ 4506 5871, 4507 5791 4508 ], 4509 [ 4510 5827, 4511 5763 4512 ], 4513 [ 4514 5835, 4515 5714 4516 ], 4517 [ 4518 5798, 4519 5670 4520 ], 4521 [ 4522 5802, 4523 5602 4524 ], 4525 [ 4526 5762, 4527 5567 4528 ], 4529 [ 4530 5770, 4531 5547 4532 ], 4533 [ 4534 5730, 4535 5520 4536 ], 4537 [ 4538 5706, 4539 5470 4540 ], 4541 [ 4542 5709, 4543 5414 4544 ], 4545 [ 4546 5635, 4547 5340 4548 ], 4549 [ 4550 5647, 4551 5309 4552 ], 4553 [ 4554 5609, 4555 5297 4556 ], 4557 [ 4558 5620, 4559 5250 4560 ], 4561 [ 4562 5583, 4563 5215 4564 ], 4565 [ 4566 5607, 4567 5162 4568 ], 4569 [ 4570 5598, 4571 5120 4572 ], 4573 [ 4574 5618, 4575 5077 4576 ], 4577 [ 4578 5605, 4579 5041 4580 ], 4581 [ 4582 5563, 4583 5038 4584 ], 4585 [ 4586 4975, 4587 5016 4588 ] 4589 ] 4590 ] 4591 } 4592 }, 4593 { 4594 "type": "Feature", 4595 "id": "US.TX", 4596 "properties": { 4597 "hc-group": "admin1", 4598 "hc-middle-x": 0.69, 4599 "hc-middle-y": 0.52, 4600 "hc-key": "us-tx", 4601 "hc-a2": "TX", 4602 "labelrank": "0", 4603 "hasc": "US.TX", 4604 "woe-id": "2347602", 4605 "state-fips": "48", 4606 "fips": "US48", 4607 "postal-code": "TX", 4608 "name": "Texas", 4609 "country": "United States of America",
4610 "region": "South", 4611 "longitude": "-98.7607", 4612 "woe-name": "Texas", 4613 "latitude": "31.131", 4614 "woe-label": "Texas, US, United States", 4615 "type": "State" 4616 }, 4617 "geometry": { 4618 "type": "MultiPolygon", 4619 "coordinates": [ 4620 [ 4621 [ 4622 [ 4623 4875, 4624 5180 4625 ], 4626 [ 4627 4910, 4628 5157 4629 ], 4630 [ 4631 4971, 4632 5157 4633 ], 4634 [ 4635 4975, 4636 5016 4637 ], 4638 [ 4639 4980, 4640 4752 4641 ], 4642 [ 4643 5033, 4644 4679 4645 ], 4646 [ 4647 5031, 4648 4646 4649 ], 4650 [ 4651 5105, 4652 4506 4653 ], 4654 [ 4655 5093, 4656 4447 4657 ], 4658 [ 4659 5059, 4660 4380 4661 ], 4662 [ 4663 5065, 4664 4253 4665 ], 4666 [ 4667 5047, 4668 4228 4669 ], 4670 [ 4671 5018, 4672 4172 4673 ], 4674 [ 4675 5032, 4676 4146 4677 ], 4678 [ 4679 4989, 4680 4147 4681 ], 4682 [ 4683 4854, 4684 4084 4685 ], 4686 [ 4687 4875, 4688 4116 4689 ], 4690 [ 4691 4831, 4692 4102 4693 ], 4694 [ 4695 4842, 4696 4162 4697 ], 4698 [ 4699 4778, 4700 4141 4701 ], 4702 [ 4703 4769, 4704 4106 4705 ], 4706 [ 4707 4839, 4708 4052 4709 ], 4710 [ 4711 4789, 4712 4023 4713 ], 4714 [ 4715 4801, 4716 4063 4717 ], 4718 [ 4719 4739, 4720 3976 4721 ], 4722 [ 4723 4638, 4724 3901 4725 ], 4726 [ 4727 4557, 4728 3881 4729 ], 4730 [ 4731 4544, 4732 3857 4733 ], 4734 [ 4735 4451, 4736 3804 4737 ], 4738 [ 4739 4448, 4740 3787 4741 ], 4742 [ 4743 4381, 4744 3749 4745 ], 4746 [ 4747 4308, 4748 3672 4749 ], 4750 [ 4751 4340, 4752 3735 4753 ], 4754 [ 4755 4307, 4756 3756 4757 ], 4758 [ 4759 4261, 4760 3721 4761 ], 4762 [ 4763 4306, 4764 3712 4765 ], 4766 [ 4767 4263, 4768 3655 4769 ], 4770 [ 4771 4221, 4772 3658 4773 ], 4774 [ 4775 4249, 4776 3617 4777 ], 4778 [ 4779 4213, 4780 3527 4781 ], 4782 [ 4783 4195, 4784 3545 4785 ], 4786 [ 4787 4141, 4788 3510 4789 ], 4790 [ 4791 4206, 4792 3511 4793 ], 4794 [ 4795 4178, 4796 3442 4797 ], 4798 [ 4799 4232, 4800 3206 4801 ], 4802 [ 4803 4272, 4804 3164 4805 ], 4806 [ 4807 4203, 4808 3135 4809 ], 4810 [ 4811 4114, 4812 3192 4813 ], 4814 [ 4815 4013, 4816 3198 4817 ], 4818 [ 4819 3979, 4820 3230 4821 ], 4822 [ 4823 3915, 4824 3245 4825 ], 4826 [ 4827 3878, 4828 3279 4829 ], 4830 [ 4831 3810, 4832 3292 4833 ], 4834 [ 4835 3795, 4836 3375 4837 ], 4838 [ 4839 3727, 4840 3467 4841 ], 4842 [ 4843 3715, 4844 3534 4845 ], 4846 [ 4847 3721, 4848 3603 4849 ], 4850 [ 4851 3677, 4852 3628 4853 ], 4854 [ 4855 3595, 4856 3762 4857 ], 4858 [ 4859 3548, 4860 3801 4861 ], 4862 [ 4863 3525, 4864 3881 4865 ], 4866 [ 4867 3477, 4868 3970 4869 ], 4870 [ 4871 3469, 4872 4021 4873 ], 4874 [ 4875 3393, 4876 4097 4877 ], 4878 [ 4879 3411, 4880 4119 4881 ], 4882 [ 4883 3365, 4884 4132 4885 ], 4886 [ 4887 3310, 4888 4204 4889 ], 4890 [ 4891 3150, 4892 4220 4893 ], 4894 [ 4895 3103, 4896 4248 4897 ], 4898 [ 4899 3082, 4900 4218 4901 ], 4902 [ 4903 3018, 4904 4214 4905 ], 4906 [ 4907 2959, 4908 4096 4909 ], 4910 [ 4911 2967, 4912 4083 4913 ], 4914 [ 4915 2896, 4916 4024 4917 ], 4918 [ 4919 2861, 4920 4031 4921 ], 4922 [ 4923 2754, 4924 4113 4925 ], 4926 [ 4927 2695, 4928 4134 4929 ], 4930 [ 4931 2651, 4932 4187 4933 ], 4934 [ 4935 2595, 4936 4230 4937 ], 4938 [ 4939 2567, 4940 4305 4941 ], 4942 [ 4943 2573, 4944 4370 4945 ], 4946 [ 4947 2512, 4948 4503 4949 ], 4950 [ 4951 2437, 4952 4557 4953 ], 4954 [ 4955 2309, 4956 4714 4957 ], 4958 [ 4959 2275, 4960 4731 4961 ], 4962 [ 4963 2239, 4964 4806 4965 ], 4966 [ 4967 2208, 4968 4823 4969 ], 4970 [ 4971 2181, 4972 4887 4973 ], 4974 [ 4975 2976, 4976 4810 4977 ], 4978 [ 4979 3072, 4980 5970 4981 ], 4982 [ 4983 3081, 4984 5975 4985 ], 4986 [ 4987 3707, 4988 5936 4989 ], 4990 [ 4991 3686, 4992 5437 4993 ], 4994 [ 4995 3753, 4996 5388 4997 ], 4998 [ 4999 3842, 5000 5388 5001 ], 5002 [ 5003 3856, 5004 5341 5005 ], 5006 [ 5007 3908, 5008 5334 5009 ], 5010 [ 5011 4007, 5012 5296 5013 ], 5014 [ 5015 4093, 5016 5310 5017 ], 5018 [ 5019 4121, 5020 5246 5021 ], 5022 [ 5023 4181, 5024 5268 5025 ], 5026 [ 5027 4248, 5028 5227 5029 ], 5030 [ 5031 4283, 5032 5247 5033 ], 5034 [ 5035 4304, 5036 5199 5037 ], 5038 [ 5039 4312, 5040 5234 5041 ], 5042 [ 5043 4347, 5044 5258 5045 ], 5046 [ 5047 4360, 5048 5237 5049 ], 5050 [ 5051 4405, 5052 5248 5053 ], 5054 [ 5055 4474, 5056 5191 5057 ], 5058 [ 5059 4559, 5060 5242 5061 ], 5062 [ 5063 4595, 5064 5233 5065 ], 5066 [ 5067 4632, 5068 5257 5069 ], 5070 [ 5071 4685, 5072 5235 5073 ], 5074 [ 5075 4714, 5076 5260 5077 ], 5078
5078 [ 5079 4790, 5080 5207 5081 ], 5082 [ 5083 4875, 5084 5180 5085 ] 5086 ] 5087 ], 5088 [ 5089 [ 5090 [ 5091 4269, 5092 3610 5093 ], 5094 [ 5095 4220, 5096 3493 5097 ], 5098 [ 5099 4219, 5100 3420 5101 ], 5102 [ 5103 4245, 5104 3297 5105 ], 5106 [ 5107 4214, 5108 3394 5109 ], 5110 [ 5111 4222, 5112 3530 5113 ], 5114 [ 5115 4269, 5116 3610 5117 ] 5118 ] 5119 ] 5120 ] 5121 } 5122 }, 5123 { 5124 "type": "Feature", 5125 "id": "US.RI", 5126 "properties": { 5127 "hc-group": "admin1", 5128 "hc-middle-x": 0.69, 5129 "hc-middle-y": 0.82, 5130 "hc-key": "us-ri", 5131 "hc-a2": "RI", 5132 "labelrank": "0", 5133 "hasc": "US.RI", 5134 "woe-id": "2347598", 5135 "state-fips": "44", 5136 "fips": "US44", 5137 "postal-code": "RI", 5138 "name": "Rhode Island", 5139 "country": "United States of America", 5140 "region": "Northeast", 5141 "longitude": "-71.5082", 5142 "woe-name": "Rhode Island", 5143 "latitude": "41.6242", 5144 "woe-label": "Rhode Island, US, United States", 5145 "type": "State" 5146 }, 5147 "geometry": { 5148 "type": "MultiPolygon", 5149 "coordinates": [ 5150 [ 5151 [ 5152 [ 5153 9727, 5154 7092 5155 ], 5156 [ 5157 10595, 5158 7092 5159 ], 5160 [ 5161 10595, 5162 6565 5163 ], 5164 [ 5165 9727, 5166 6565 5167 ], 5168 [ 5169 9727, 5170 7092 5171 ] 5172 ] 5173 ], 5174 [ 5175 [ 5176 [ 5177 9339, 5178 7878 5179 ], 5180 [ 5181 9325, 5182 7871 5183 ], 5184 [ 5185 9314, 5186 7915 5187 ], 5188 [ 5189 9327, 5190 7915 5191 ], 5192 [ 5193 9339, 5194 7878 5195 ] 5196 ] 5197 ], 5198 [ 5199 [ 5200 [ 5201 9177, 5202 7968 5203 ], 5204 [ 5205 9254, 5206 7990 5207 ], 5208 [ 5209 9278, 5210 7938 5211 ], 5212 [ 5213 9304, 5214 7921 5215 ], 5216 [ 5217 9320, 5218 7866 5219 ], 5220 [ 5221 9285, 5222 7851 5223 ], 5224 [ 5225 9279, 5226 7822 5227 ], 5228 [ 5229 9216, 5230 7790 5231 ], 5232 [ 5233 9212, 5234 7845 5235 ], 5236 [ 5237 9177, 5238 7968 5239 ] 5240 ] 5241 ] 5242 ] 5243 } 5244 }, 5245 { 5246 "type": "Feature", 5247 "id": "US.AL", 5248 "properties": { 5249 "hc-group": "admin1", 5250 "hc-middle-x": 0.47, 5251 "hc-middle-y": 0.42, 5252 "hc-key": "us-al", 5253 "hc-a2": "AL", 5254 "labelrank": "0", 5255 "hasc": "US.AL", 5256 "woe-id": "2347559", 5257 "state-fips": "1", 5258 "fips": "US01", 5259 "postal-code": "AL", 5260 "name": "Alabama", 5261 "country": "United States of America",
5262 "region": "South", 5263 "longitude": "-86.7184", 5264 "woe-name": "Alabama", 5265 "latitude": "32.8551", 5266 "woe-label": "Alabama, US, United States", 5267 "type": "State" 5268 }, 5269 "geometry": { 5270 "type": "Polygon", 5271 "coordinates": [ 5272 [ 5273 [ 5274 6487, 5275 4443 5276 ], 5277 [ 5278 6440, 5279 4378 5280 ], 5281 [ 5282 6291, 5283 4361 5284 ], 5285 [ 5286 6336, 5287 4375 5288 ], 5289 [ 5290 6317, 5291 4398 5292 ], 5293 [ 5294 6267, 5295 4399 5296 ], 5297 [ 5298 6216, 5299 4788 5300 ], 5301 [ 5302 6236, 5303 5574 5304 ], 5305 [ 5306 6215, 5307 5600 5308 ], 5309 [ 5310 6213, 5311 5603 5312 ], 5313 [ 5314 6762, 5315 5652 5316 ], 5317 [ 5318 6912, 5319 5135 5320 ], 5321 [ 5322 6947, 5323 5053 5324 ], 5325 [ 5326 6998, 5327 4970 5328 ], 5329 [ 5330 6970, 5331 4930 5332 ], 5333 [ 5334 6958, 5335 4846 5336 ], 5337 [ 5338 6990, 5339 4774 5340 ], 5341 [ 5342 6983, 5343 4704 5344 ], 5345 [ 5346 7015, 5347 4637 5348 ], 5349 [ 5350 6436, 5351 4574 5352 ], 5353 [ 5354 6431, 5355 4541 5356 ], 5357 [ 5358 6487, 5359 4486 5360 ], 5361 [ 5362 6487, 5363 4443 5364 ] 5365 ] 5366 ] 5367 } 5368 }, 5369 { 5370 "type": "Feature", 5371 "id": "US.MS", 5372 "properties": { 5373 "hc-group": "admin1", 5374 "hc-middle-x": 0.51, 5375 "hc-middle-y": 0.48, 5376 "hc-key": "us-ms", 5377 "hc-a2": "MS", 5378 "labelrank": "0", 5379 "hasc": "US.MS", 5380 "woe-id": "2347583", 5381 "state-fips": "28", 5382 "fips": "US28", 5383 "postal-code": "MS", 5384 "name": "Mississippi", 5385 "country": "United States of America", 5386 "region": "South", 5387 "longitude": "-89.71890000000001", 5388 "woe-name": "Mississippi", 5389 "latitude": "32.8657", 5390 "woe-label": "Mississippi, US, United States", 5391 "type": "State" 5392 }, 5393 "geometry": { 5394 "type": "Polygon", 5395 "coordinates": [ 5396 [ 5397 [ 5398 6267, 5399 4399 5400 ], 5401 [ 5402 6164, 5403 4396 5404 ], 5405 [ 5406 6059, 5407 4360 5408 ], 5409 [ 5410 6017, 5411 4328 5412 ], 5413 [ 5414 5936, 5415 4451 5416 ], 5417 [ 5418 5955, 5419 4536 5420 ], 5421 [ 5422 5523, 5423 4510 5424 ], 5425 [ 5426 5540, 5427 4526 5428 ], 5429 [ 5430 5522, 5431 4581 5432 ], 5433 [ 5434 5545, 5435 4585 5436 ], 5437 [ 5438 5545, 5439 4642 5440 ], 5441 [ 5442 5565, 5443 4662 5444 ], 5445 [ 5446 5584, 5447 4738 5448 ], 5449 [ 5450 5636, 5451 4781 5452 ], 5453 [ 5454 5670, 5455 4868
5456 ], 5457 [ 5458 5629, 5459 4895 5460 ], 5461 [ 5462 5611, 5463 4977 5464 ], 5465 [ 5466 5627, 5467 5018 5468 ], 5469 [ 5470 5605, 5471 5041 5472 ], 5473 [ 5474 5618, 5475 5077 5476 ], 5477 [ 5478 5598, 5479 5120 5480 ], 5481 [ 5482 5607, 5483 5162 5484 ], 5485 [ 5486 5583, 5487 5215 5488 ], 5489 [ 5490 5620, 5491 5250 5492 ], 5493 [ 5494 5609, 5495 5297 5496 ], 5497 [ 5498 5647, 5499 5309 5500 ], 5501 [ 5502 5635, 5503 5340 5504 ], 5505 [ 5506 5709, 5507 5414 5508 ], 5509 [ 5510 5706, 5511 5470 5512 ], 5513 [ 5514 5730, 5515 5520 5516 ], 5517 [ 5518 5770, 5519 5547 5520 ], 5521 [ 5522 5762, 5523 5567 5524 ], 5525 [ 5526 6122, 5527 5592 5528 ], 5529 [ 5530 6215, 5531 5600 5532 ], 5533 [ 5534 6236, 5535 5574 5536 ], 5537 [ 5538 6216, 5539 4788 5540 ], 5541 [ 5542 6267, 5543 4399 5544 ] 5545 ] 5546 ] 5547 } 5548 }, 5549 { 5550 "type": "Feature", 5551 "id": "US.NC", 5552 "properties": { 5553 "hc-group": "admin1", 5554 "hc-middle-x": 0.62, 5555 "hc-middle-y": 0.5, 5556 "hc-key": "us-nc", 5557 "hc-a2": "NC", 5558 "labelrank": "0", 5559 "hasc": "US.NC", 5560 "woe-id": "2347592", 5561 "state-fips": "37", 5562 "fips": "US37", 5563 "postal-code": "NC", 5564 "name": "North Carolina", 5565 "country": "United States of America", 5566 "region": "South", 5567 "longitude": "-78.866", 5568 "woe-name": "North Carolina", 5569 "latitude": "35.6152", 5570 "woe-label": "North Carolina, US, United States", 5571 "type": "State" 5572 }, 5573 "geometry": { 5574 "type": "MultiPolygon", 5575 "coordinates": [ 5576 [ 5577 [ 5578 [ 5579 8716, 5580 6394 5581 ], 5582 [ 5583 8720, 5584 6381 5585 ], 5586 [ 5587 8694, 5588 6389 5589 ], 5590 [ 5591 8694, 5592 6389 5593 ], 5594 [ 5595 8704, 5596 6391 5597 ], 5598 [ 5599 8705, 5600 6390 5601 ], 5602 [ 5603 8709, 5604 6392 5605 ], 5606 [ 5607 8712, 5608 6393 5609 ], 5610 [ 5611 8716, 5612 6394 5613 ] 5614 ] 5615 ], 5616 [ 5617 [ 5618 [ 5619 8727, 5620 6396 5621 ], 5622 [ 5623 8756, 5624 6332 5625 ], 5626 [ 5627 8852, 5628 6203 5629 ], 5630 [ 5631 8782, 5632 6278 5633 ], 5634 [ 5635 8722, 5636 6395 5637 ], 5638 [ 5639 8724, 5640 6396 5641 ], 5642 [ 5643 8727, 5644 6396 5645 ] 5646 ] 5647 ], 5648 [ 5649 [ 5650 [ 5651 7532, 5652 6183 5653 ], 5654 [ 5655 7623, 5656 6187 5657 ], 5658 [ 5659 7858, 5660 6219 5661 ], 5662 [ 5663 8691, 5664 6388 5665 ], 5666 [ 5667 8768, 5668 6281 5669 ], 5670 [ 5671 8670, 5672 6318 5673 ], 5674 [ 5675 8707, 5676 6291 5677 ], 5678 [ 5679 8620, 5680 6230 5681 ], 5682 [ 5683 8584, 5684 6234 5685 ], 5686 [ 5687 8581, 5688 6204 5689 ], 5690 [ 5691 8719, 5692 6244 5693 ], 5694 [ 5695 8742, 5696 6161 5697 ], 5698 [ 5699 8737, 5700 6222 5701 ], 5702 [ 5703 8760, 5704 6252 5705 ], 5706 [ 5707 8795, 5708 6220 5709 ], 5710 [ 5711 8797, 5712 6153 5713 ], 5714 [ 5715 8772, 5716 6164 5717 ], 5718 [ 5719 8750, 5720 6091 5721 ], 5722 [ 5723 8709, 5724 6073 5725 ], 5726 [ 5727 8638, 5728 6097 5729 ], 5730 [ 5731 8638, 5732 6070 5733 ], 5734 [ 5735 8551, 5736 6078 5737 ], 5738 [ 5739 8664, 5740 6053 5741 ], 5742 [ 5743 8635, 5744 6009
5745 ], 5746 [ 5747 8661, 5748 6003 5749 ], 5750 [ 5751 8610, 5752 5957 5753 ], 5754 [ 5755 8551, 5756 5988 5757 ], 5758 [ 5759 8590, 5760 5949 5761 ], 5762 [ 5763 8631, 5764 5940 5765 ], 5766 [ 5767 8676, 5768 5955 5769 ], 5770 [ 5771 8686, 5772 5995 5773 ], 5774 [ 5775 8721, 5776 5956 5777 ], 5778 [ 5779 8670, 5780 5890 5781 ], 5782 [ 5783 8565, 5784 5865 5785 ], 5786 [ 5787 8469, 5788 5764 5789 ], 5790 [ 5791 8443, 5792 5714 5793 ], 5794 [ 5795 8432, 5796 5616 5797 ], 5798 [ 5799 8368, 5800 5624 5801 ], 5802 [ 5803 8302, 5804 5600 5805 ], 5806 [ 5807 8029, 5808 5790 5809 ], 5810 [ 5811 7791, 5812 5756 5813 ], 5814 [ 5815 7782, 5816 5790 5817 ], 5818 [ 5819 7714, 5820 5830 5821 ], 5822 [ 5823 7457, 5824 5802 5825 ], 5826 [ 5827 7290, 5828 5724 5829 ], 5830 [ 5831 7210, 5832 5711 5833 ], 5834 [ 5835 7034, 5836 5685 5837 ], 5838 [ 5839 7038, 5840 5756 5841 ], 5842 [ 5843 7073,
5844 5762 5845 ], 5846 [ 5847 7085, 5848 5807 5849 ], 5850 [ 5851 7131, 5852 5847 5853 ], 5854 [ 5855 7188, 5856 5859 5857 ], 5858 [ 5859 7269, 5860 5928 5861 ], 5862 [ 5863 7298, 5864 5973 5865 ], 5866 [ 5867 7352, 5868 6010 5869 ], 5870 [ 5871 7365, 5872 5989 5873 ], 5874 [ 5875 7437, 5876 6050 5877 ], 5878 [ 5879 7464, 5880 6038 5881 ], 5882 [ 5883 7490, 5884 6093 5885 ], 5886 [ 5887 7523, 5888 6123 5889 ], 5890 [ 5891 7532, 5892 6183 5893 ] 5894 ] 5895 ] 5896 ] 5897 } 5898 }, 5899 { 5900 "type": "Feature", 5901 "id": "US.VA", 5902 "properties": { 5903 "hc-group": "admin1", 5904 "hc-middle-x": 0.64, 5905 "hc-middle-y": 0.54, 5906 "hc-key": "us-va", 5907 "hc-a2": "VA", 5908 "labelrank": "0", 5909 "hasc": "US.VA", 5910 "woe-id": "2347605", 5911 "state-fips": "51", 5912 "fips": "US51", 5913 "postal-code": "VA", 5914 "name": "Virginia", 5915 "country": "United States of America", 5916 "region": "South", 5917 "longitude": "-78.2431", 5918 "woe-name": "Virginia", 5919 "latitude": "37.7403", 5920 "woe-label": "Virginia, US, United States", 5921 "type": "State" 5922 }, 5923 "geometry": { 5924 "type": "MultiPolygon", 5925 "coordinates": [ 5926 [ 5927 [ 5928 [ 5929 8722, 5930 6395 5931 ], 5932 [ 5933 8696, 5934 6432 5935 ], 5936 [ 5937 8704, 5938 6391 5939 ], 5940 [ 5941 8694, 5942 6389 5943 ], 5944 [ 5945 8694, 5946 6389 5947 ], 5948 [ 5949 8686, 5950 6398 5951 ], 5952 [ 5953 8691, 5954 6388 5955 ], 5956 [ 5957 7858, 5958 6219 5959 ], 5960 [ 5961 7623, 5962 6187 5963 ], 5964 [ 5965 7532, 5966 6183 5967 ], 5968 [ 5969 7472, 5970 6170 5971 ], 5972 [ 5973 7116, 5974 6120 5975 ], 5976 [ 5977 7221, 5978 6173 5979 ], 5980 [ 5981 7268, 5982 6217 5983 ], 5984 [ 5985 7309, 5986 6294 5987 ], 5988 [ 5989 7363, 5990 6332 5991 ], 5992 [ 5993 7431, 5994 6411 5995 ], 5996 [ 5997 7470, 5998 6351 5999 ], 6000 [ 6001 7530, 6002 6341 6003 ], 6004 [ 6005 7567, 6006 6378 6007 ], 6008 [ 6009 7595, 6010 6360 6011 ], 6012 [ 6013 7649, 6014 6382 6015 ], 6016 [ 6017 7664, 6018 6419 6019 ], 6020 [ 6021 7690, 6022 6412 6023 ], 6024 [ 6025 7773, 6026 6459 6027 ], 6028 [ 6029 7767, 6030 6505 6031 ], 6032 [ 6033 7840, 6034 6674 6035 ], 6036 [ 6037 7857, 6038 6759 6039 ], 6040 [ 6041 7932, 6042 6729 6043 ], 6044 [ 6045 7974, 6046 6848 6047 ], 6048 [ 6049 7998, 6050 6837 6051 ], 6052 [ 6053 8048, 6054 6900 6055 ], 6056 [ 6057 8072, 6058 6952 6059 ], 6060 [ 6061 8076, 6062 7028 6063 ], 6064 [ 6065 8188, 6066 6969 6067 ], 6068 [ 6069 8198, 6070 7020 6071 ], 6072 [ 6073 8256, 6074 7009 6075 ], 6076 [ 6077 8251, 6078 6984 6079 ], 6080 [ 6081 8341, 6082 6945 6083 ], 6084 [ 6085 8347, 6086 6939 6087 ], 6088 [ 6089 8353, 6090 6939 6091 ], 6092 [ 6093 8367, 6094 6892 6095 ], 6096 [ 6097 8334, 6098 6870 6099 ], 6100 [ 6101 8323, 6102 6802 6103 ], 6104 [ 6105 8347, 6106 6786 6107 ], 6108 [ 6109 8385, 6110 6812 6111 ], 6112 [ 6113 8429, 6114 6763 6115 ], 6116 [ 6117 8484, 6118 6768 6119 ], 6120 [ 6121 8507, 6122 6740 6123 ], 6124 [ 6125 8571, 6126 6721 6127 ], 6128 [ 6129 8572, 6130 6647 6131 ], 6132 [ 6133 8536, 6134 6648 6135 ], 6136 [ 6137 8499, 6138 6683 6139 ], 6140 [ 6141 8431, 6142 6711 6143 ], 6144 [ 6145 8532, 6146 6636 6147 ], 6148 [ 6149 8597, 6150 6606 6151 ], 6152 [ 6153 8561, 6154 6578 6155 ], 6156 [ 6157 8558, 6158 6548 6159 ], 6160 [ 6161 8577, 6162 6545 6163 ], 6164 [ 6165 8611, 6166 6494 6167 ], 6168 [ 6169 8586, 6170 6478 6171 ], 6172 [ 6173 8526, 6174 6534 6175 ], 6176 [ 6177 8449, 6178 6533 6179 ], 6180 [ 6181 8518, 6182 6510 6183 ], 6184 [ 6185 8580, 6186 6459 6187 ], 6188 [ 6189 8619, 6190 6482 6191 ], 6192 [ 6193 8679, 6194 6482 6195 ], 6196 [ 6197 8727, 6198 6396 6199 ], 6200 [ 6201 8724, 6202 6396 6203 ], 6204 [ 6205 8722, 6206 6395 6207 ] 6208 ], 6209 [ 6210 [ 6211 8558, 6212 6548 6213 ], 6214 [ 6215 8552, 6216 6548 6217 ], 6218 [ 6219 8552, 6220 6548 6221 ], 6222 [ 6223 8552, 6224 6548 6225 ], 6226 [ 6227 8484, 6228 6605 6229 ], 6230 [ 6231 8532, 6232 6551 6233 ], 6234 [ 6235 8552, 6236 6548 6237 ], 6238 [ 6239 8552, 6240 6548 6241 ], 6242 [ 6243 8552, 6244 6548 6245 ], 6246 [ 6247 8557, 6248 6544 6249 ], 6250 [ 6251 8558, 6252 6548 6253 ] 6254 ] 6255 ], 6256 [ 6257 [ 6258 [ 6259 8709, 6260 6392 6261 ], 6262 [ 6263 8713, 6264 6400 6265 ], 6266 [ 6267 8716, 6268 6394 6269 ], 6270 [ 6271 8712, 6272 6393 6273 ], 6274 [ 6275 8709, 6276 6392 6277 ] 6278 ] 6279 ], 6280 [ 6281 [ 6282 [ 6283 8765, 6284 6797 6285 ], 6286 [ 6287 8756, 6288 6760 6289 ], 6290 [ 6291 8761, 6292 6796 6293 ], 6294 [ 6295 8765, 6296 6797 6297 ] 6298 ] 6299 ], 6300 [ 6301 [ 6302 [ 6303 8688, 6304 6764 6305 ], 6306 [ 6307 8691, 6308 6772 6309 ], 6310 [ 6311 8739, 6312 6789 6313 ], 6314 [ 6315 8726, 6316 6737 6317 ], 6318
6318 [ 6319 8674, 6320 6599 6321 ], 6322 [ 6323 8696, 6324 6561 6325 ], 6326 [ 6327 8678, 6328 6528 6329 ], 6330 [ 6331 8652, 6332 6583 6333 ], 6334 [ 6335 8652, 6336 6652 6337 ], 6338 [ 6339 8688, 6340 6764 6341 ] 6342 ] 6343 ] 6344 ] 6345 } 6346 }, 6347 { 6348 "type": "Feature", 6349 "id": "US.IA", 6350 "properties": { 6351 "hc-group": "admin1", 6352 "hc-middle-x": 0.35, 6353 "hc-middle-y": 0.49, 6354 "hc-key": "us-ia", 6355 "hc-a2": "IA", 6356 "labelrank": "0", 6357 "hasc": "US.IA", 6358 "woe-id": "2347574", 6359 "state-fips": "19", 6360 "fips": "US19", 6361 "postal-code": "IA", 6362 "name": "Iowa", 6363 "country": "United States of America", 6364 "region": "Midwest", 6365 "longitude": "-93.3891", 6366 "woe-name": "Iowa", 6367 "latitude": "42.0423", 6368 "woe-label": "Iowa, US, United States", 6369 "type": "State" 6370 }, 6371 "geometry": { 6372 "type": "Polygon", 6373 "coordinates": [ 6374 [ 6375 [ 6376 5575, 6377 7508 6378 ], 6379 [ 6380 5625, 6381 7441 6382 ], 6383 [ 6384 5672, 6385 7411 6386 ], 6387 [ 6388 5671, 6389 7332 6390 ], 6391 [ 6392 5646, 6393 7276 6394 ], 6395 [ 6396 5579, 6397 7232 6398 ], 6399 [ 6400 5523, 6401 7224 6402 ], 6403 [ 6404 5509, 6405 7160 6406 ], 6407 [ 6408 5536, 6409 7132 6410 ], 6411 [ 6412 5535, 6413 7098 6414 ], 6415 [ 6416 5496, 6417 7020 6418 ], 6419 [ 6420 5458, 6421 7004 6422 ], 6423 [ 6424 5449, 6425 6947 6426 ], 6427 [ 6428 5449, 6429 6947 6430 ], 6431 [ 6432 5449, 6433 6947 6434 ], 6435 [ 6436 5389, 6437 7006 6438 ], 6439 [ 6440 5120, 6441 6985 6442 ], 6443 [ 6444 4846, 6445 6977 6446 ], 6447 [ 6448 4592, 6449 6981 6450 ], 6451 [ 6452 4591, 6453 6981 6454 ], 6455 [ 6456 4579, 6457 7031 6458 ], 6459 [ 6460 4571, 6461 7165 6462 ], 6463 [ 6464 4559, 6465 7206 6466 ], 6467 [ 6468 4529, 6469 7228 6470 ], 6471 [ 6472 4533, 6473 7291 6474 ], 6475 [ 6476 4515, 6477 7341 6478 ], 6479 [ 6480 4478, 6481 7398 6482 ], 6483 [ 6484 4469, 6485 7474 6486 ], 6487 [ 6488 4453, 6489 7479 6490 ], 6491 [ 6492 4423, 6493 7540 6494 ], 6495 [ 6496 4459, 6497 7636 6498 ], 6499 [ 6500 4438, 6501 7663 6502 ], 6503 [ 6504 4433, 6505 7734 6506 ], 6507 [ 6508 4459, 6509 7735 6510 ], 6511 [ 6512 5137, 6513 7745 6514 ], 6515 [ 6516 5445, 6517 7758 6518 ], 6519 [ 6520 5479,
6521 7702 6522 ], 6523 [ 6524 5465, 6525 7670 6526 ], 6527 [ 6528 5494, 6529 7563 6530 ], 6531 [ 6532 5561, 6533 7544 6534 ], 6535 [ 6536 5577, 6537 7513 6538 ], 6539 [ 6540 5575, 6541 7508 6542 ], 6543 [ 6544 5575, 6545 7508 6546 ] 6547 ] 6548 ] 6549 } 6550 }, 6551 { 6552 "type": "Feature", 6553 "id": "US.MD", 6554 "properties": { 6555 "hc-group": "admin1", 6556 "hc-middle-x": 0.84, 6557 "hc-middle-y": 0.91, 6558 "hc-key": "us-md", 6559 "hc-a2": "MD", 6560 "labelrank": "0", 6561 "hasc": "US.MD", 6562 "woe-id": "2347579", 6563 "state-fips": "24", 6564 "fips": "US24", 6565 "postal-code": "MD", 6566 "name": "Maryland", 6567 "country": "United States of America", 6568 "region": "South", 6569 "longitude": "-77.0454", 6570 "woe-name": "Maryland", 6571 "latitude": "39.3874", 6572 "woe-label": "Maryland, US, United States", 6573 "type": "State" 6574 }, 6575 "geometry": { 6576 "type": "MultiPolygon", 6577 "coordinates": [ 6578 [ 6579 [ 6580 [ 6581 9727, 6582 4860 6583 ], 6584 [ 6585 10595, 6586 4860 6587 ], 6588 [ 6589 10595, 6590 4333 6591 ], 6592 [ 6593 9727, 6594 4333 6595 ], 6596 [ 6597 9727, 6598 4860 6599 ] 6600 ] 6601 ], 6602 [ 6603 [ 6604 [ 6605 8761, 6606 6796 6607 ], 6608 [ 6609 8769, 6610 6819 6611 ], 6612 [ 6613 8765, 6614 6797 6615 ], 6616 [ 6617 8761, 6618 6796 6619 ] 6620 ] 6621 ], 6622 [ 6623 [ 6624 [ 6625 8779, 6626 6915 6627 ], 6628 [ 6629 8779, 6630 6884 6631 ], 6632 [ 6633 8777, 6634 6914 6635 ], 6636 [ 6637 8777, 6638 6914 6639 ], 6640 [ 6641 8779, 6642 6915 6643 ] 6644 ] 6645 ], 6646 [ 6647 [ 6648 [ 6649 8739, 6650 6789 6651 ], 6652 [ 6653 8691, 6654 6772 6655 ], 6656 [ 6657 8688, 6658 6764 6659 ], 6660 [ 6661 8647, 6662 6746 6663 ], 6664 [ 6665 8650, 6666 6806 6667 ], 6668 [ 6669 8590, 6670 6833 6671 ], 6672 [ 6673 8592, 6674 6815 6675 ], 6676 [ 6677 8525, 6678 6862 6679 ], 6680 [ 6681 8581, 6682 6899 6683 ], 6684 [ 6685 8555, 6686 6926 6687 ], 6688 [ 6689 8511, 6690 6936 6691 ], 6692 [ 6693 8544, 6694 6974 6695 ], 6696 [ 6697 8512, 6698 6986 6699 ], 6700 [ 6701 8496, 6702 7036 6703 ], 6704 [ 6705 8530, 6706 7108 6707 ], 6708 [ 6709 8537, 6710 7165 6711 ], 6712 [ 6713 8497, 6714 7093 6715 ], 6716 [ 6717 8472, 6718 7099 6719 ], 6720 [ 6721 8469, 6722 7056 6723 ], 6724 [ 6725 8432, 6726 7052 6727 ], 6728 [ 6729 8471, 6730 7014 6731 ], 6732 [ 6733 8458, 6734 6959 6735 ], 6736 [ 6737 8483, 6738 6868 6739 ], 6740 [ 6741 8513, 6742 6820 6743 ], 6744 [ 6745 8462, 6746 6849 6747 ], 6748 [ 6749 8543, 6750 6778 6751 ], 6752 [ 6753 8548, 6754 6753 6755 ], 6756 [ 6757 8491, 6758 6782 6759 ], 6760 [ 6761 8433, 6762 6785 6763 ], 6764 [ 6765 8382, 6766 6834 6767 ], 6768 [ 6769 8354, 6770 6797 6771 ], 6772 [ 6773 8335, 6774 6827 6775 ], 6776 [ 6777 8370, 6778 6891 6779 ], 6780 [ 6781 8367, 6782 6916 6783 ], 6784 [ 6785 8385, 6786 6943 6787 ], 6788 [ 6789 8341, 6790 6945 6791 ], 6792 [ 6793 8251, 6794 6984 6795 ], 6796 [ 6797 8256, 6798 7009 6799 ], 6800 [ 6801 8198, 6802 7020 6803 ], 6804 [ 6805 8162, 6806 7087 6807 ], 6808 [ 6809 8101, 6810 7099 6811 ], 6812 [ 6813 8046, 6814 7067 6815 ], 6816 [ 6817 8043, 6818 7043 6819 ], 6820 [ 6821 8000, 6822 7038 6823 ], 6824 [ 6825 7977, 6826 7057 6827 ], 6828 [ 6829 7949, 6830 7003 6831 ], 6832 [ 6833 7928, 6834 7007 6835 ], 6836 [ 6837 7857, 6838 6922 6839 ], 6840 [ 6841 7835, 6842 7053 6843 ], 6844 [ 6845 8176, 6846 7119 6847 ], 6848 [ 6849 8559, 6850 7201 6851 ], 6852 [ 6853 8650, 6854 6887 6855 ], 6856 [ 6857 8771, 6858 6913 6859 ], 6860 [ 6861 8770, 6862 6856 6863 ], 6864 [ 6865 8753, 6866 6848 6867 ], 6868 [ 6869 8739, 6870 6789 6871 ] 6872 ] 6873 ] 6874 ] 6875 } 6876 }, 6877 { 6878 "type": "Feature", 6879 "id": "US.DE", 6880 "properties": { 6881 "hc-group": "admin1", 6882 "hc-middle-x": 0.79, 6883 "hc-middle-y": 0.89, 6884 "hc-key": "us-de", 6885 "hc-a2": "DE", 6886 "labelrank": "0", 6887 "hasc": "US.DE", 6888 "woe-id": "2347566", 6889 "state-fips": "10", 6890 "fips": "US10", 6891 "postal-code": "DE", 6892 "name": "Delaware", 6893 "country": "United States of America",
6894 "region": "South", 6895 "longitude": "-75.41119999999999", 6896 "woe-name": "Delaware", 6897 "latitude": "38.8657", 6898 "woe-label": "Delaware, US, United States", 6899 "type": "State" 6900 }, 6901 "geometry": { 6902 "type": "MultiPolygon", 6903 "coordinates": [ 6904 [ 6905 [ 6906 [ 6907 9727, 6908 5418 6909 ], 6910 [ 6911 10595, 6912 5418 6913 ], 6914 [ 6915 10595, 6916 4891 6917 ], 6918 [ 6919 9727, 6920 4891 6921 ], 6922 [ 6923 9727, 6924 5418 6925 ] 6926 ] 6927 ], 6928 [ 6929 [ 6930 [ 6931 8777, 6932 6914 6933 ], 6934 [ 6935 8771, 6936 6915 6937 ], 6938 [ 6939 8771, 6940 6913 6941 ], 6942 [ 6943 8650, 6944 6887 6945 ], 6946 [ 6947 8559, 6948 7201 6949 ], 6950 [ 6951 8589, 6952 7239 6953 ], 6954 [ 6955 8625, 6956 7239 6957 ], 6958 [ 6959 8601, 6960 7183 6961 ], 6962 [ 6963 8613, 6964 7145 6965 ], 6966 [ 6967 8652, 6968 7114 6969 ], 6970 [ 6971 8675, 6972 7051 6973 ], 6974 [ 6975 8735, 6976 6995 6977 ], 6978 [ 6979 8751, 6980 6999 6981 ], 6982 [ 6983 8779, 6984 6915 6985 ], 6986 [ 6987 8777, 6988 6914 6989 ], 6990 [ 6991 8777, 6992 6914 6993 ] 6994 ] 6995 ] 6996 ] 6997 } 6998 }, 6999 { 7000 "type": "Feature", 7001 "id": "US.PA", 7002 "properties": { 7003 "hc-group": "admin1", 7004 "hc-middle-x": 0.5, 7005 "hc-middle-y": 0.49, 7006 "hc-key": "us-pa", 7007 "hc-a2": "PA", 7008 "labelrank": "0", 7009 "hasc": "US.PA", 7010 "woe-id": "2347597", 7011 "state-fips": "42", 7012 "fips": "US42", 7013 "postal-code": "PA", 7014 "name": "Pennsylvania", 7015 "country": "United States of America", 7016 "region": "Northeast", 7017 "longitude": "-77.60939999999999", 7018 "woe-name": "Pennsylvania", 7019 "latitude": "40.8601", 7020 "woe-label": "Pennsylvania, US, United States", 7021 "type": "State" 7022 }, 7023 "geometry": { 7024 "type": "Polygon", 7025 "coordinates": [ 7026 [ 7027 [ 7028 8611, 7029 7549 7030 ], 7031 [ 7032 8632, 7033 7530 7034 ], 7035 [ 7036 8615, 7037 7490 7038 ], 7039 [ 7040 8627, 7041 7443 7042 ], 7043 [ 7044 8646, 7045 7444 7046 ], 7047 [ 7048 8739, 7049 7361 7050 ], 7051 [ 7052 8691, 7053 7310 7054 ], 7055 [ 7056 8673, 7057 7276 7058 ], 7059 [ 7060 8625, 7061 7239 7062 ], 7063 [ 7064 8589, 7065 7239 7066 ], 7067 [ 7068 8559, 7069 7201 7070 ], 7071 [ 7072 8176, 7073 7119 7074 ], 7075 [ 7076 7835, 7077 7053 7078 ], 7079 [ 7080 7630, 7081 7017 7082 ], 7083 [ 7084 7589, 7085 7253 7086 ], 7087 [ 7088 7589, 7089 7253 7090 ], 7091 [ 7092 7530, 7093 7595 7094 ], 7095 [ 7096 7556, 7097 7610 7098 ], 7099 [ 7100 7662, 7101 7693 7102 ], 7103 [ 7104 7674, 7105 7625 7106 ], 7107 [ 7108 8514, 7109 7797 7110 ], 7111 [ 7112 8573, 7113 7765 7114 ], 7115 [ 7116 8588, 7117 7712 7118 ], 7119 [ 7120 8673, 7121 7663 7122 ], 7123 [ 7124 8673, 7125 7663 7126 ], 7127 [ 7128 8611, 7129 7549 7130 ] 7131 ] 7132 ] 7133 } 7134 }, 7135 { 7136 "type": "Feature", 7137 "id": "US.NJ", 7138 "properties": { 7139 "hc-group": "admin1", 7140 "hc-middle-x": 0.78, 7141 "hc-middle-y": 0.88, 7142 "hc-key": "us-nj", 7143 "hc-a2": "NJ", 7144 "labelrank": "0", 7145 "hasc": "US.NJ", 7146 "woe-id": "2347589", 7147 "state-fips": "34", 7148 "fips": "US34", 7149 "postal-code": "NJ", 7150 "name": "New Jersey", 7151 "country": "United States of America", 7152 "region": "Northeast", 7153 "longitude": "-74.4653", 7154 "woe-name": "New Jersey", 7155 "latitude": "40.0449", 7156 "woe-label": "New Jersey, US, United States", 7157 "type": "State" 7158 }, 7159 "geometry": { 7160 "type": "MultiPolygon", 7161 "coordinates": [ 7162 [ 7163 [ 7164 [ 7165 9727, 7166 5976 7167 ], 7168 [ 7169 10595, 7170 5976 7171 ], 7172 [ 7173 10595, 7174 5449 7175 ], 7176 [ 7177 9727, 7178 5449 7179 ], 7180 [ 7181 9727, 7182 5976 7183 ] 7184 ] 7185 ], 7186 [ 7187 [ 7188 [ 7189 8611, 7190 7549 7191 ], 7192 [ 7193 8673, 7194 7663 7195 ], 7196 [ 7197 8759, 7198 7635 7199 ], 7200 [ 7201 8846, 7202 7608 7203 ], 7204 [ 7205 8840, 7206 7532 7207 ], 7208 [ 7209 8810, 7210 7504 7211 ], 7212 [ 7213 8805, 7214 7466 7215 ], 7216 [ 7217 8866, 7218 7456 7219 ], 7220 [ 7221 8875, 7222 7438 7223 ], 7224 [ 7225 8886, 7226 7281 7227 ], 7228 [ 7229 8853, 7230 7228 7231 ], 7232 [ 7233 8849, 7234 7172 7235 ], 7236 [ 7237 8812, 7238 7122 7239 ], 7240 [ 7241 8784, 7242 7047 7243 ], 7244 [ 7245 8766, 7246 7040 7247 ], 7248 [ 7249 8769, 7250 7097 7251 ], 7252 [ 7253 8716, 7254 7095 7255 ], 7256 [ 7257 8623, 7258 7151 7259 ], 7260 [ 7261 8610, 7262 7186 7263 ], 7264 [ 7265 8624, 7266 7231 7267 ], 7268 [ 7269 8676, 7270 7269 7271 ], 7272 [ 7273 8691, 7274 7310 7275 ], 7276 [ 7277 8739, 7278 7361 7279 ], 7280 [ 7281 8646, 7282 7444 7283 ], 7284 [ 7285 8627, 7286 7443 7287 ], 7288 [ 7289 8615, 7290 7490 7291 ], 7292 [ 7293 8632, 7294 7530 7295 ], 7296 [ 7297 8611, 7298 7549 7299 ] 7300 ] 7301 ] 7302 ] 7303 } 7304 }, 7305 { 7306 "type": "Feature", 7307 "id": "US.NY", 7308 "properties": { 7309 "hc-group": "admin1", 7310 "hc-middle-x": 0.54, 7311 "hc-middle-y": 0.49, 7312 "hc-key": "us-ny", 7313 "hc-a2": "NY", 7314 "labelrank": "0", 7315 "hasc": "US.NY", 7316 "woe-id": "2347591", 7317 "state-fips": "36", 7318 "fips": "US36", 7319 "postal-code": "NY", 7320 "name": "New York", 7321 "country": "United States of America", 7322 "region": "Northeast", 7323 "longitude": "-75.32420000000001", 7324 "woe-name": "New York", 7325 "latitude": "43.1988", 7326 "woe-label": "New York, US, United States", 7327 "type": "State" 7328 }, 7329 "geometry": { 7330 "type": "Polygon", 7331 "coordinates": [ 7332 [ 7333 [ 7334 8673, 7335 7663 7336 ], 7337 [ 7338 8588, 7339 7712 7340 ], 7341 [ 7342 8573, 7343 7765 7344 ], 7345 [ 7346 8514, 7347 7797 7348 ], 7349 [ 7350 7674, 7351 7625 7352 ], 7353 [ 7354 7662, 7355 7693 7356 ], 7357 [ 7358 7763, 7359 7795 7360 ], 7361 [ 7362 7803, 7363 7872 7364 ], 7365 [ 7366 7754, 7367 7932 7368 ], 7369 [ 7370 7747, 7371 7976 7372 ], 7373 [ 7374 7812, 7375 8010 7376 ], 7377 [ 7378 7918, 7379 8040 7380 ], 7381 [ 7382 7988, 7383 8041 7384 ], 7385 [ 7386 8031, 7387
7387 8026 7388 ], 7389 [ 7390 8061, 7391 8043 7392 ], 7393 [ 7394 8133, 7395 8055 7396 ], 7397 [ 7398 8180, 7399 8080 7400 ], 7401 [ 7402 8224, 7403 8141 7404 ], 7405 [ 7406 8264, 7407 8164 7408 ], 7409 [ 7410 8243, 7411 8232 7412 ], 7413 [ 7414 8257, 7415 8274 7416 ], 7417 [ 7418 8225, 7419 8259 7420 ], 7421 [ 7422 8202, 7423 8296 7424 ], 7425 [ 7426 8230, 7427 8345 7428 ], 7429 [ 7430 8280, 7431 8379 7432 ], 7433 [ 7434 8297, 7435 8437 7436 ], 7437 [ 7438 8358, 7439 8526 7440 ], 7441 [ 7442 8422, 7443 8581 7444 ], 7445 [ 7446 8453, 7447 8585 7448 ], 7449 [ 7450 8695, 7451 8646 7452 ], 7453 [ 7454 8720, 7455 8537 7456 ], 7457 [ 7458 8739, 7459 8514 7460 ], 7461 [ 7462 8748, 7463 8453 7464 ], 7465 [ 7466 8740, 7467 8402 7468 ], 7469 [ 7470 8772, 7471 8328 7472 ], 7473 [ 7474 8772, 7475 8287 7476 ], 7477 [ 7478 8807, 7479 8284 7480 ], 7481 [ 7482 8856, 7483 8080 7484 ], 7485 [ 7486 8853, 7487 7901 7488 ], 7489 [ 7490 8860, 7491 7896 7492 ], 7493 [ 7494 8896, 7495 7702 7496 ], 7497 [ 7498 8912, 7499 7685 7500 ], 7501 [ 7502 8874, 7503 7645 7504 ], 7505 [ 7506 8896, 7507 7623 7508 ], 7509 [ 7510 8881, 7511 7575 7512 ], 7513 [ 7514 8930, 7515 7617 7516 ], 7517 [ 7518 8982, 7519 7620 7520 ], 7521 [ 7522 9002, 7523 7641 7524 ], 7525 [ 7526 9094, 7527 7671 7528 ], 7529 [ 7530 9134, 7531 7722 7532 ], 7533 [ 7534 9173, 7535 7697 7536 ], 7537 [ 7538 9177, 7539 7721 7540 ], 7541 [ 7542 9184, 7543 7702 7544 ], 7545 [ 7546 9231, 7547 7730 7548 ], 7549 [ 7550 9141, 7551 7649 7552 ], 7553 [ 7554 9083, 7555 7619 7556 ], 7557 [ 7558 9032, 7559 7570 7560 ], 7561 [ 7562 8936, 7563 7519 7564 ], 7565 [ 7566 8857, 7567 7498 7568 ], 7569 [ 7570 8812, 7571 7468 7572 ], 7573 [ 7574 8814, 7575 7503 7576 ], 7577 [ 7578 8840, 7579 7506 7580 ], 7581 [ 7582 8858, 7583 7554 7584 ], 7585 [ 7586 8843, 7587 7544 7588 ], 7589 [ 7590 8846, 7591 7608 7592 ], 7593 [ 7594 8759, 7595 7635 7596 ], 7597 [ 7598 8695, 7599 7656 7600 ], 7601 [ 7602 8673, 7603 7663 7604 ], 7605 [ 7606 8673, 7607 7663 7608 ] 7609 ] 7610 ] 7611 } 7612 }, 7613 { 7614 "type": "Feature", 7615 "id": "US.ID", 7616 "properties": { 7617 "hc-group": "admin1", 7618 "hc-middle-x": 0.51, 7619 "hc-middle-y": 0.75, 7620 "hc-key": "us-id", 7621 "hc-a2": "ID", 7622 "labelrank": "0", 7623 "hasc": "US.ID", 7624 "woe-id": "2347571", 7625 "state-fips": "16", 7626 "fips": "US16", 7627 "postal-code": "ID", 7628 "name": "Idaho", 7629 "country": "United States of America", 7630 "region": "West", 7631 "longitude": "-114.133", 7632 "woe-name": "Idaho", 7633 "latitude": "43.7825", 7634 "woe-label": "Idaho, US, United States", 7635 "type": "State" 7636 }, 7637 "geometry": { 7638 "type": "Polygon", 7639 "coordinates": [ 7640 [ 7641 [ 7642 926, 7643 9593 7644 ], 7645 [ 7646 1093, 7647 9555 7648 ], 7649 [ 7650 1036, 7651 9301 7652 ], 7653 [ 7654 1076, 7655 9210 7656 ], 7657 [ 7658 1061, 7659 9142 7660 ], 7661 [ 7662 1117, 7663 9085 7664 ], 7665 [ 7666 1172, 7667 8979 7668 ], 7669 [ 7670 1170, 7671 8959 7672 ], 7673 [ 7674 1219, 7675 8896 7676 ], 7677 [ 7678 1258, 7679 8897 7680 ], 7681 [ 7682 1253, 7683 8859 7684 ], 7685 [ 7686 1219, 7687 8796 7688 ], 7689 [ 7690 1204, 7691 8727 7692 ], 7693 [ 7694 1211, 7695 8698 7696 ], 7697 [ 7698 1177, 7699 8675 7700 ], 7701 [ 7702 1167, 7703 8620 7704 ], 7705 [ 7706 1200, 7707 8590 7708 ], 7709 [ 7710 1278, 7711 8630 7712 ], 7713 [ 7714 1303, 7715 8596 7716 ], 7717 [ 7718 1303, 7719 8522 7720 ], 7721 [ 7722 1338, 7723 8434 7724 ], 7725 [ 7726 1326, 7727 8419 7728 ], 7729 [ 7730 1347, 7731 8377 7732 ], 7733 [ 7734 1374, 7735 8375 7736 ], 7737 [ 7738 1391, 7739 8331 7740 ], 7741 [ 7742 1392,
7743 8280 7744 ], 7745 [ 7746 1415, 7747 8254 7748 ], 7749 [ 7750 1451, 7751 8281 7752 ], 7753 [ 7754 1508, 7755 8261 7756 ], 7757 [ 7758 1536, 7759 8282 7760 ], 7761 [ 7762 1614, 7763 8258 7764 ], 7765 [ 7766 1671, 7767 8261 7768 ], 7769 [ 7770 1686, 7771 8296 7772 ], 7773 [ 7774 1713, 7775 8295 7776 ], 7777 [ 7778 1750, 7779 8226 7780 ], 7781 [ 7782 1677, 7783 7785 7784 ], 7785 [ 7786 1643, 7787 7585 7788 ], 7789 [ 7790 1393, 7791 7629 7792 ], 7793 [ 7794 1073, 7795 7690 7796 ], 7797 [ 7798 897, 7799 7727 7800 ], 7801 [ 7802 510, 7803 7813 7804 ], 7805 [ 7806 616, 7807 8265 7808 ], 7809 [ 7810 662, 7811 8361 7812 ], 7813 [ 7814 615, 7815 8403 7816 ], 7817 [ 7818 624, 7819 8450 7820 ], 7821 [ 7822 718, 7823 8545 7824 ], 7825 [ 7826 776, 7827 8646 7828 ], 7829 [ 7830 823, 7831 8698 7832 ], 7833 [ 7834 821, 7835 8744 7836 ], 7837 [ 7838 785, 7839 8775 7840 ], 7841 [ 7842 774, 7843 8822 7844 ], 7845 [ 7846 779, 7847 8870 7848 ], 7849 [ 7850 767, 7851 8925 7852 ], 7853 [ 7854 926, 7855 9593 7856 ] 7857 ] 7858 ] 7859 } 7860 }, 7861 { 7862 "type": "Feature", 7863 "id": "US.SD", 7864 "properties": { 7865 "hc-group": "admin1", 7866 "hc-middle-x": 0.51, 7867 "hc-middle-y": 0.44, 7868 "hc-key": "us-sd", 7869 "hc-a2": "SD", 7870 "labelrank": "0", 7871 "hasc": "US.SD", 7872 "woe-id": "2347600", 7873 "state-fips": "46", 7874 "fips": "US46", 7875 "postal-code": "SD", 7876 "name": "South Dakota", 7877 "country": "United States of America", 7878 "region": "Midwest", 7879 "longitude": "-100.255", 7880 "woe-name": "South Dakota", 7881 "latitude": "44.4711", 7882 "woe-label": "South Dakota, US, United States", 7883 "type": "State" 7884 }, 7885 "geometry": { 7886 "type": "Polygon", 7887 "coordinates": [ 7888 [ 7889 [ 7890 3010, 7891 7672 7892 ], 7893 [ 7894 3019, 7895 7770 7896 ], 7897 [ 7898 3056, 7899 8191 7900 ], 7901 [ 7902 3059, 7903 8191 7904 ], 7905 [ 7906 3080, 7907 8436 7908 ], 7909 [ 7910 4231, 7911 8374 7912 ], 7913 [ 7914 4444, 7915 8372 7916 ], 7917 [ 7918 4429, 7919 8325 7920 ], 7921 [ 7922 4387, 7923 8283 7924 ], 7925 [ 7926 4419, 7927 8232 7928 ], 7929 [ 7930 4462, 7931 8203 7932 ], 7933 [ 7934 4459, 7935 7735 7936 ], 7937 [ 7938 4433, 7939 7734 7940 ], 7941 [ 7942 4438, 7943 7663 7944 ], 7945 [ 7946 4459, 7947 7636 7948 ], 7949 [ 7950 4423, 7951 7540 7952 ], 7953 [ 7954 4453, 7955 7479 7956 ], 7957 [ 7958 4409, 7959 7521 7960 ], 7961 [ 7962 4330, 7963 7551 7964 ], 7965 [ 7966 4297, 7967 7577 7968 ], 7969 [ 7970 4194, 7971 7574 7972 ], 7973 [ 7974 4148, 7975 7558 7976 ], 7977 [ 7978 4071, 7979 7611 7980 ], 7981 [ 7982 3010, 7983 7672 7984 ] 7985 ] 7986 ] 7987 } 7988 }, 7989 { 7990 "type": "Feature", 7991 "id": "US.CT", 7992 "properties": { 7993 "hc-group": "admin1", 7994 "hc-middle-x": 0.75, 7995 "hc-middle-y": 0.87, 7996 "hc-key": "us-ct", 7997 "hc-a2": "CT", 7998 "labelrank": "0", 7999 "hasc": "US.CT", 8000 "woe-id": "2347565", 8001 "state-fips": "9", 8002 "fips": "US09", 8003 "postal-code": "CT", 8004 "name": "Connecticut", 8005 "country": "United States of America", 8006 "region": "Northeast", 8007 "longitude": "-72.7594", 8008 "woe-name": "Connecticut", 8009 "latitude": "41.6486", 8010 "woe-label": "Connecticut, US, United States", 8011 "type": "State" 8012 }, 8013 "geometry": { 8014 "type": "MultiPolygon", 8015 "coordinates": [ 8016 [ 8017 [ 8018 [ 8019 9727, 8020 6534 8021 ], 8022 [ 8023 10595, 8024 6534 8025 ], 8026 [ 8027 10595, 8028 6007 8029 ], 8030 [ 8031 9727, 8032 6007 8033 ], 8034 [ 8035 9727, 8036 6534 8037 ] 8038 ] 8039 ], 8040 [ 8041 [ 8042 [ 8043 9216, 8044 7790 8045 ], 8046 [ 8047 9204, 8048 7796 8049 ], 8050 [ 8051 9095, 8052 7743 8053 ], 8054 [ 8055 9023, 8056 7721 8057 ], 8058 [ 8059 8972, 8060 7689 8061 ], 8062 [ 8063 8896, 8064 7623 8065 ], 8066 [ 8067 8874, 8068 7645 8069 ], 8070 [ 8071 8912, 8072 7685 8073 ], 8074 [ 8075 8896, 8076 7702 8077 ], 8078 [ 8079 8860, 8080 7896 8081 ], 8082 [ 8083 8997, 8084 7925 8085 ], 8086 [ 8087 9177, 8088 7968 8089 ], 8090 [ 8091 9212, 8092 7845 8093 ], 8094 [ 8095 9216, 8096 7790 8097 ] 8098 ] 8099 ] 8100 ] 8101 } 8102 }, 8103 { 8104 "type": "Feature", 8105 "id": "US.NH", 8106 "properties": { 8107 "hc-group": "admin1", 8108 "hc-middle-x": 0.73, 8109 "hc-middle-y": 0.77, 8110 "hc-key": "us-nh", 8111 "hc-a2": "NH", 8112 "labelrank": "0", 8113 "hasc": "US.NH", 8114 "woe-id": "2347588", 8115 "state-fips": "33", 8116 "fips": "US33", 8117 "postal-code": "NH", 8118 "name": "New Hampshire", 8119 "country": "United States of America", 8120 "region": "Northeast", 8121 "longitude": "-71.6301", 8122 "woe-name": "New Hampshire", 8123 "latitude": "43.5993", 8124 "woe-label": "New Hampshire, US, United States", 8125 "type": "State" 8126 }, 8127 "geometry": { 8128 "type": "MultiPolygon", 8129 "coordinates": [ 8130 [ 8131 [ 8132 [ 8133 9727, 8134 8208 8135 ], 8136 [ 8137 10595, 8138 8208 8139 ], 8140 [ 8141 10595, 8142 7681 8143 ], 8144 [ 8145 9727, 8146 7681 8147 ], 8148 [ 8149 9727, 8150 8208 8151 ] 8152 ] 8153 ], 8154 [ 8155 [ 8156 [ 8157 9298, 8158 8291 8159 ], 8160 [ 8161 9306, 8162 8288 8163 ], 8164 [ 8165 9300, 8166 8236 8167 ], 8168 [ 8169 9242, 8170 8201 8171 ], 8172 [ 8173 9222, 8174 8166 8175 ], 8176 [ 8177 9005, 8178 8115 8179 ], 8180 [ 8181 9005, 8182 8115 8183 ], 8184 [ 8185 8979, 8186 8148 8187 ], 8188 [ 8189 8979, 8190 8261 8191 ], 8192 [ 8193 8964, 8194 8320 8195 ], 8196 [ 8197 8981, 8198 8392 8199 ], 8200 [ 8201 8986, 8202 8490 8203 ], 8204 [ 8205 8978, 8206 8526 8207 ], 8208 [ 8209 9033, 8210 8585 8211 ], 8212 [ 8213 9045, 8214 8629 8215 ], 8216 [ 8217 9020, 8218 8661 8219 ], 8220 [ 8221 9024, 8222 8736 8223 ], 8224 [ 8225 9036, 8226 8814 8227 ], 8228 [ 8229 9079, 8230 8830 8231 ], 8232 [ 8233 9225, 8234 8399 8235 ], 8236 [ 8237 9235, 8238 8354 8239 ], 8240 [ 8241 9298, 8242 829
82421 8243 ] 8244 ] 8245 ] 8246 ] 8247 } 8248 }, 8249 { 8250 "type": "Feature", 8251 "id": "US.KY", 8252 "properties": { 8253 "hc-group": "admin1", 8254 "hc-middle-x": 0.65, 8255 "hc-middle-y": 0.5, 8256 "hc-key": "us-ky", 8257 "hc-a2": "KY", 8258 "labelrank": "0", 8259 "hasc": "US.KY", 8260 "woe-id": "2347576", 8261 "state-fips": "21", 8262 "fips": "US21", 8263 "postal-code": "KY", 8264 "name": "Kentucky", 8265 "country": "United States of America", 8266 "region": "South", 8267 "longitude": "-85.5729", 8268 "woe-name": "Kentucky", 8269 "latitude": "37.3994", 8270 "woe-label": "Kentucky, US, United States", 8271 "type": "State" 8272 }, 8273 "geometry": { 8274 "type": "MultiPolygon", 8275 "coordinates": [ 8276 [ 8277 [ 8278 [ 8279 5893, 8280 5966 8281 ], 8282 [ 8283 5890, 8284 5980 8285 ], 8286 [ 8287 5907, 8288 5967 8289 ], 8290 [ 8291 5893, 8292 5966 8293 ] 8294 ] 8295 ], 8296 [ 8297 [ 8298 [ 8299 5921, 8300 5968 8301 ], 8302 [ 8303 5932, 8304 6005 8305 ], 8306 [ 8307 5956, 8308 5988 8309 ], 8310 [ 8311 5976, 8312 6033 8313 ], 8314 [ 8315 5975, 8316 6097 8317 ], 8318 [ 8319 5962, 8320 6117 8321 ], 8322 [ 8323 5987, 8324 6157 8325 ], 8326 [ 8327 6015, 8328 6162 8329 ], 8330 [ 8331 6105, 8332 6131 8333 ], 8334 [ 8335 6102, 8336 6218 8337 ], 8338 [ 8339 6171, 8340 6241 8341 ], 8342 [ 8343 6159, 8344 6283 8345 ], 8346 [ 8347 6179, 8348 6328 8349 ], 8350 [ 8351 6209, 8352 6363 8353 ], 8354 [ 8355 6269, 8356 6350 8357 ], 8358 [ 8359 6303, 8360 6376 8361 ], 8362 [ 8363 6359, 8364 6356 8365 ], 8366 [ 8367 6426, 8368 6401 8369 ], 8370 [ 8371 6444, 8372 6379 8373 ], 8374 [ 8375 6485, 8376 6390 8377 ], 8378 [ 8379 6485, 8380 6413 8381 ], 8382 [ 8383 6531, 8384 6450 8385 ], 8386 [ 8387 6583, 8388 6411 8389 ], 8390 [ 8391 6608, 8392 6438 8393 ], 8394 [ 8395 6622, 8396 6498 8397 ], 8398 [ 8399 6652, 8400 6507 8401 ], 8402 [ 8403 6657, 8404 6540 8405 ], 8406 [ 8407 6693, 8408 6572 8409 ], 8410 [ 8411 6682, 8412 6619 8413 ], 8414 [ 8415 6737, 8416 6617 8417 ], 8418 [ 8419 6808, 8420 6651 8421 ], 8422 [ 8423 6792, 8424 6683 8425 ], 8426 [ 8427 6797, 8428 6730 8429 ], 8430 [ 8431 6873, 8432 6741 8433 ], 8434 [ 8435 6900, 8436 6725 8437 ], 8438 [ 8439 6933, 8440 6672 8441 ], 8442 [ 8443 7001, 8444 6669 8445 ], 8446 [ 8447 7036, 8448 6641 8449 ], 8450 [ 8451 7069, 8452 6664 8453 ], 8454 [ 8455 7119, 8456 6643 8457 ], 8458 [ 8459 7198, 8460 6692 8461 ], 8462 [ 8463 7216, 8464 6653 8465 ], 8466 [ 8467 7270, 8468 6617 8469 ], 8470 [ 8471 7270, 8472 6617 8473 ], 8474 [ 8475 7270, 8476 6617 8477 ], 8478 [ 8479 7272, 8480 6548 8481 ], 8482 [ 8483 7358, 8484 6439 8485 ], 8486 [ 8487 7431, 8488 6411 8489 ], 8490 [ 8491 7363, 8492 6332 8493 ], 8494 [ 8495 7309, 8496 6294 8497 ], 8498 [ 8499 7268, 8500 6217 8501 ], 8502 [ 8503 7221, 8504 6173 8505 ], 8506 [ 8507 7116, 8508 6120 8509 ], 8510 [ 8511 7104, 8512 6113 8513 ], 8514 [ 8515 6814, 8516 6086 8517 ], 8518 [ 8519 6751, 8520 6077 8521 ], 8522 [ 8523 6516, 8524 6061 8525 ], 8526 [ 8527 6250, 8528 6032 8529 ], 8530 [ 8531 6200, 8532 6040 8533 ], 8534 [ 8535 6210, 8536 5991 8537 ], 8538 [ 8539 5921, 8540 5968 8541 ] 8542 ] 8543 ], 8544 [ 8545 [ 8546 [ 8547 7270, 8548 6617 8549 ], 8550 [ 8551 7271, 8552 6617 8553 ], 8554 [ 8555 7270, 8556 6617 8557 ], 8558 [ 8559 7270, 8560 6617 8561 ], 8562 [ 8563 7270, 8564 6617 8565 ], 8566 [ 8567 7270, 8568 6617 8569 ] 8570 ] 8571 ] 8572 ] 8573 } 8574 }, 8575 { 8576 "type": "Feature", 8577 "id": "US.OH", 8578 "properties": { 8579 "hc-group": "admin1", 8580 "hc-middle-x": 0.45, 8581 "hc-middle-y": 0.53, 8582 "hc-key": "us-oh", 8583 "hc-a2": "OH", 8584 "labelrank": "0", 8585 "hasc": "US.OH", 8586 "woe-id": "2347594", 8587 "state-fips": "39", 8588 "fips": "US39", 8589 "postal-code": "OH", 8590 "name": "Ohio", 8591 "country": "United States of America", 8592 "region": "Midwest", 8593 "longitude": "-82.67189999999999", 8594 "woe-name": "Ohio", 8595 "latitude": "40.0924", 8596 "woe-label": "Ohio, US, United States", 8597 "type": "State" 8598 }, 8599 "geometry": { 8600 "type": "Polygon", 8601 "coordinates": [ 8602 [ 8603 [ 8604 6718, 8605 7400 8606 ], 8607 [ 8608 6815, 8609 7415 8610 ], 8611 [ 8612 6976, 8613 7443 8614 ], 8615 [ 8616 7095, 8617 7408 8618 ], 8619 [ 8620 7082, 8621 7394 8622 ], 8623 [ 8624 7173,
8625 7383 8626 ], 8627 [ 8628 7258, 8629 7426 8630 ], 8631 [ 8632 7329, 8633 7440 8634 ], 8635 [ 8636 7383, 8637 7503 8638 ], 8639 [ 8640 7530, 8641 7595 8642 ], 8643 [ 8644 7589, 8645 7253 8646 ], 8647 [ 8648 7561, 8649 7233 8650 ], 8651 [ 8652 7587, 8653 7158 8654 ], 8655 [ 8656 7558, 8657 7018 8658 ], 8659 [ 8660 7564, 8661 6981 8662 ], 8663 [ 8664 7504, 8665 6911 8666 ], 8667 [ 8668 7454, 8669 6903 8670 ], 8671 [ 8672 7419, 8673 6863 8674 ], 8675 [ 8676 7399, 8677 6809 8678 ], 8679 [ 8680 7416, 8681 6775 8682 ], 8683 [ 8684 7391, 8685 6755 8686 ], 8687 [ 8688 7354, 8689 6783 8690 ], 8691 [ 8692 7333, 8693 6723 8694 ], 8695 [ 8696 7346, 8697 6679 8698 ], 8699 [ 8700 7321, 8701 6631 8702 ], 8703 [ 8704 7271, 8705 6617 8706 ], 8707 [ 8708 7270, 8709 6617 8710 ], 8711 [ 8712 7216, 8713 6653 8714 ], 8715 [ 8716 7198, 8717 6692 8718 ], 8719 [ 8720 7119, 8721 6643 8722 ], 8723 [ 8724 7069, 8725 6664 8726 ], 8727 [ 8728 7036, 8729 6641 8730 ], 8731 [ 8732 7001, 8733 6669 8734 ], 8735 [ 8736 6933, 8737 6672 8738 ], 8739 [ 8740 6900, 8741 6725 8742 ], 8743 [ 8744 6873, 8745 6741 8746 ], 8747 [ 8748 6797, 8749 6730 8750 ], 8751 [ 8752 6732, 8753 7296 8754 ], 8755 [ 8756 6718, 8757 7400 8758 ] 8759 ] 8760 ] 8761 } 8762 }, 8763 { 8764 "type": "Feature", 8765 "id": "US.TN", 8766 "properties": { 8767 "hc-group": "admin1", 8768 "hc-middle-x": 0.43, 8769 "hc-middle-y": 0.54, 8770 "hc-key": "us-tn", 8771 "hc-a2": "TN", 8772 "labelrank": "0", 8773 "hasc": "US.TN", 8774 "woe-id": "2347601", 8775 "state-fips": "47", 8776 "fips": "US47", 8777 "postal-code": "TN", 8778 "name": "Tennessee", 8779 "country": "United States of America",
8780 "region": "South", 8781 "longitude": "-86.3415", 8782 "woe-name": "Tennessee", 8783 "latitude": "35.7514", 8784 "woe-label": "Tennessee, US, United States", 8785 "type": "State" 8786 }, 8787 "geometry": { 8788 "type": "Polygon", 8789 "coordinates": [ 8790 [ 8791 [ 8792 6215, 8793 5600 8794 ], 8795 [ 8796 6122, 8797 5592 8798 ], 8799 [ 8800 5762, 8801 5567 8802 ], 8803 [ 8804 5802, 8805 5602 8806 ], 8807 [ 8808 5798, 8809 5670 8810 ], 8811 [ 8812 5835, 8813 5714 8814 ], 8815 [ 8816 5827, 8817 5763 8818 ], 8819 [ 8820 5871, 8821 5791 8822 ], 8823 [ 8824 5868, 8825 5834 8826 ], 8827 [ 8828 5888, 8829 5872 8830 ], 8831 [ 8832 5869, 8833 5898 8834 ], 8835 [ 8836 5901, 8837 5936 8838 ], 8839 [ 8840 5893, 8841 5966 8842 ], 8843 [ 8844 5907, 8845 5967 8846 ], 8847 [ 8848 5911, 8849 5955 8850 ], 8851 [ 8852 5921, 8853 5968 8854 ], 8855 [ 8856 6210, 8857 5991 8858 ], 8859 [ 8860 6200, 8861 6040 8862 ], 8863 [ 8864 6250, 8865 6032 8866 ], 8867 [ 8868 6516, 8869 6061 8870 ], 8871 [ 8872 6751, 8873 6077 8874 ], 8875 [ 8876 6814, 8877 6086 8878 ], 8879 [ 8880 7104, 8881 6113 8882 ], 8883 [ 8884 7116, 8885 6120 8886 ], 8887 [ 8888 7472, 8889 6170 8890 ], 8891 [ 8892 7532, 8893 6183 8894 ], 8895 [ 8896 7523, 8897 6123 8898 ], 8899 [ 8900 7490, 8901 6093 8902 ], 8903 [ 8904 7464, 8905 6038 8906 ], 8907 [ 8908 7437, 8909 6050 8910 ], 8911 [ 8912 7365, 8913 5989 8914 ], 8915 [ 8916 7352, 8917 6010 8918 ], 8919 [ 8920 7298, 8921 5973 8922 ], 8923 [ 8924 7269, 8925 5928 8926 ], 8927 [ 8928 7188, 8929 5859 8930 ], 8931 [ 8932 7131, 8933 5847 8934 ], 8935 [ 8936 7085, 8937 5807 8938 ], 8939 [ 8940 7073,
8941 5762 8942 ], 8943 [ 8944 7038, 8945 5756 8946 ], 8947 [ 8948 7034, 8949 5685 8950 ], 8951 [ 8952 6918, 8953 5671 8954 ], 8955 [ 8956 6762, 8957 5652 8958 ], 8959 [ 8960 6213, 8961 5603 8962 ], 8963 [ 8964 6215, 8965 5600 8966 ] 8967 ] 8968 ] 8969 } 8970 }, 8971 { 8972 "type": "Feature", 8973 "id": "US.WV", 8974 "properties": { 8975 "hc-group": "admin1", 8976 "hc-middle-x": 0.35, 8977 "hc-middle-y": 0.56, 8978 "hc-key": "us-wv", 8979 "hc-a2": "WV", 8980 "labelrank": "0", 8981 "hasc": "US.WV", 8982 "woe-id": "2347607", 8983 "state-fips": "54", 8984 "fips": "US54", 8985 "postal-code": "WV", 8986 "name": "West Virginia", 8987 "country": "United States of America", 8988 "region": "South", 8989 "longitude": "-80.7128", 8990 "woe-name": "West Virginia", 8991 "latitude": "38.6422", 8992 "woe-label": "West Virginia, US, United States", 8993 "type": "State" 8994 }, 8995 "geometry": { 8996 "type": "Polygon", 8997 "coordinates": [ 8998 [ 8999 [ 9000 7270, 9001 6617 9002 ], 9003 [ 9004 7271, 9005 6617 9006 ], 9007 [ 9008 7321, 9009 6631 9010 ], 9011 [ 9012 7346, 9013 6679 9014 ], 9015 [ 9016 7333, 9017 6723 9018 ], 9019 [ 9020 7354, 9021 6783 9022 ], 9023 [ 9024 7391, 9025 6755 9026 ], 9027 [ 9028 7416, 9029 6775 9030 ], 9031 [ 9032 7399, 9033 6809 9034 ], 9035 [ 9036 7419, 9037 6863 9038 ], 9039 [ 9040 7454, 9041 6903 9042 ], 9043 [ 9044 7504, 9045 6911 9046 ], 9047 [ 9048 7564, 9049 6981 9050 ], 9051 [ 9052 7558, 9053 7018 9054 ], 9055 [ 9056 7587, 9057 7158 9058 ], 9059 [ 9060 7561, 9061 7233 9062 ], 9063 [ 9064 7589, 9065 7253 9066 ], 9067 [ 9068 7630, 9069 7017 9070 ], 9071 [ 9072 7835, 9073 7053 9074 ], 9075 [ 9076 7857, 9077 6922 9078 ], 9079 [ 9080 7928, 9081 7007 9082 ], 9083 [ 9084 7949, 9085 7003 9086 ], 9087 [ 9088 7977, 9089 7057 9090 ], 9091 [ 9092 8000, 9093 7038 9094 ], 9095 [ 9096 8043, 9097 7043 9098 ], 9099 [ 9100 8046, 9101 7067 9102 ], 9103 [ 9104 8101, 9105 7099 9106 ], 9107 [ 9108 8162, 9109 7087 9110 ], 9111 [ 9112 8198, 9113 7020 9114 ], 9115 [ 9116 8188, 9117 6969 9118 ], 9119 [ 9120 8076, 9121 7028 9122 ], 9123 [ 9124 8072, 9125 6952 9126 ], 9127 [ 9128 8048, 9129 6900 9130 ], 9131 [ 9132 7998, 9133 6837 9134 ], 9135 [ 9136 7974, 9137 6848 9138 ], 9139 [ 9140 7932, 9141 6729 9142 ], 9143 [ 9144 7857, 9145 6759 9146 ], 9147 [ 9148 7840, 9149 6674 9150 ], 9151 [ 9152 7767, 9153 6505 9154 ], 9155 [ 9156 7773, 9157 6459 9158 ], 9159 [ 9160 7690, 9161 6412 9162 ], 9163 [ 9164 7664, 9165 6419 9166 ], 9167 [ 9168 7649, 9169 6382 9170 ], 9171 [ 9172 7595, 9173 6360 9174 ], 9175 [ 9176 7567, 9177 6378 9178 ], 9179 [ 9180 7530, 9181 6341 9182 ], 9183 [ 9184 7470, 9185 6351 9186 ], 9187 [ 9188 7431, 9189 6411 9190 ], 9191 [ 9192 7358, 9193 6439 9194 ], 9195 [ 9196 7272, 9197 6548 9198 ], 9199 [ 9200 7270, 9201 6617 9202 ], 9203 [ 9204 7270, 9205 6617 9206 ], 9207 [ 9208 7270, 9209 6617 9210 ], 9211 [ 9212 7270, 9213 6617 9214 ], 9215 [ 9216 7270, 9217 6617 9218 ] 9219 ] 9220 ] 9221 } 9222 }, 9223 { 9224 "type": "Feature", 9225 "id": "US.DC", 9226 "properties": { 9227 "hc-group": "admin1", 9228 "hc-middle-x": 0.81, 9229 "hc-middle-y": 0.92, 9230 "hc-key": "us-dc", 9231 "hc-a2": "DC", 9232 "labelrank": "9", 9233 "hasc": "US.DC", 9234 "woe-id": "2347567", 9235 "state-fips": "11", 9236 "fips": "US11", 9237 "postal-code": "DC", 9238 "name": "District of Columbia", 9239 "country": "United States of America",
9240 "region": "South", 9241 "longitude": "-77.01130000000001", 9242 "woe-name": "District of Columbia", 9243 "latitude": "38.8922", 9244 "woe-label": "District of Columbia, US, United States", 9245 "type": "Federal District" 9246 }, 9247 "geometry": { 9248 "type": "MultiPolygon", 9249 "coordinates": [ 9250 [ 9251 [ 9252 [ 9253 9727, 9254 4302 9255 ], 9256 [ 9257 10595, 9258 4302 9259 ], 9260 [ 9261 10595, 9262 3775 9263 ], 9264 [ 9265 9727, 9266 3775 9267 ], 9268 [ 9269 9727, 9270 4302 9271 ] 9272 ] 9273 ], 9274 [ 9275 [ 9276 [ 9277 8367, 9278 6916 9279 ], 9280 [ 9281 8366, 9282 6929 9283 ], 9284 [ 9285 8353, 9286 6939 9287 ], 9288 [ 9289 8347, 9290 6939 9291 ], 9292 [ 9293 8341, 9294 6945 9295 ], 9296 [ 9297 8385, 9298 6943 9299 ], 9300 [ 9301 8367, 9302 6916 9303 ] 9304 ] 9305 ] 9306 ] 9307 } 9308 }, 9309 { 9310 "type": "Feature", 9311 "id": "US.LA", 9312 "properties": { 9313 "hc-group": "admin1", 9314 "hc-middle-x": 0.34, 9315 "hc-middle-y": 0.46, 9316 "hc-key": "us-la", 9317 "hc-a2": "LA", 9318 "labelrank": "0", 9319 "hasc": "US.LA", 9320 "woe-id": "2347577", 9321 "state-fips": "22", 9322 "fips": "US22", 9323 "postal-code": "LA", 9324 "name": "Louisiana", 9325 "country": "United States of America", 9326 "region": "South", 9327 "longitude": "-91.9991", 9328 "woe-name": "Louisiana", 9329 "latitude": "30.5274", 9330 "woe-label": "Louisiana, US, United States", 9331 "type": "State" 9332 }, 9333 "geometry": { 9334 "type": "Polygon", 9335 "coordinates": [ 9336 [ 9337 [ 9338 6017, 9339 4328 9340 ], 9341 [ 9342 5915, 9343 4340 9344 ], 9345 [ 9346 5856, 9347 4368 9348 ], 9349 [ 9350 5812, 9351 4302 9352 ], 9353 [ 9354 5834, 9355 4283 9356 ], 9357 [ 9358 5904, 9359 4280 9360 ], 9361 [ 9362 5937, 9363 4313 9364 ], 9365 [ 9366 5992,
9367 4313 9368 ], 9369 [ 9370 5957, 9371 4259 9372 ], 9373 [ 9374 6001, 9375 4245 9376 ], 9377 [ 9378 6035, 9379 4298 9380 ], 9381 [ 9382 6067, 9383 4259 9384 ], 9385 [ 9386 5982, 9387 4181 9388 ], 9389 [ 9390 6027, 9391 4123 9392 ], 9393 [ 9394 6107, 9395 4114 9396 ], 9397 [ 9398 6148, 9399 4081 9400 ], 9401 [ 9402 6125, 9403 4035 9404 ], 9405 [ 9406 6070, 9407 4042 9408 ], 9409 [ 9410 6042, 9411 4077 9412 ], 9413 [ 9414 5966, 9415 4094 9416 ], 9417 [ 9418 5980, 9419 4115 9420 ], 9421 [ 9422 5902, 9423 4141 9424 ], 9425 [ 9426 5913, 9427 4064 9428 ], 9429 [ 9430 5876, 9431 4028 9432 ], 9433 [ 9434 5860, 9435 4066 9436 ], 9437 [ 9438 5811, 9439 4082 9440 ], 9441 [ 9442 5780, 9443 4036 9444 ], 9445 [ 9446 5724, 9447 4031 9448 ], 9449 [ 9450 5620, 9451 4068 9452 ], 9453 [ 9454 5631, 9455 4121 9456 ], 9457 [ 9458 5569, 9459 4128 9460 ], 9461 [ 9462 5532, 9463 4184 9464 ], 9465 [ 9466 5493, 9467 4173 9468 ], 9469 [ 9470 5494, 9471 4203 9472 ], 9473 [ 9474 5430, 9475 4175 9476 ], 9477 [ 9478 5437, 9479 4145 9480 ], 9481 [ 9482 5478, 9483 4154 9484 ], 9485 [ 9486 5526, 9487 4139 9488 ], 9489 [ 9490 5500, 9491 4112 9492 ], 9493 [ 9494 5431, 9495 4136 9496 ], 9497 [ 9498 5399, 9499 4121 9500 ], 9501 [ 9502 5305, 9503 4135 9504 ], 9505 [ 9506 5186, 9507 4176 9508 ], 9509 [ 9510 5128, 9511 4173 9512 ], 9513 [ 9514 5042, 9515 4153 9516 ], 9517 [ 9518 5047, 9519 4228 9520 ], 9521 [ 9522 5065, 9523 4253 9524 ], 9525 [ 9526 5059, 9527 4380 9528 ], 9529 [ 9530 5093, 9531 4447 9532 ], 9533 [ 9534 5105, 9535 4506 9536 ], 9537 [ 9538 5031, 9539 4646 9540 ], 9541 [ 9542 5033, 9543 4679 9544 ], 9545 [ 9546 4980, 9547 4752 9548 ], 9549 [ 9550 4975, 9551 5016 9552 ], 9553 [ 9554 5563, 9555 5038 9556 ], 9557 [ 9558 5605, 9559 5041 9560 ], 9561 [ 9562 5627, 9563 5018 9564 ], 9565 [ 9566 5611, 9567 4977 9568 ], 9569 [ 9570 5629, 9571 4895 9572 ], 9573 [ 9574 5670, 9575 4868
9576 ], 9577 [ 9578 5636, 9579 4781 9580 ], 9581 [ 9582 5584, 9583 4738 9584 ], 9585 [ 9586 5565, 9587 4662 9588 ], 9589 [ 9590 5545, 9591 4642 9592 ], 9593 [ 9594 5545, 9595 4585 9596 ], 9597 [ 9598 5522, 9599 4581 9600 ], 9601 [ 9602 5540, 9603 4526 9604 ], 9605 [ 9606 5523, 9607 4510 9608 ], 9609 [ 9610 5955, 9611 4536 9612 ], 9613 [ 9614 5936, 9615 4451 9616 ], 9617 [ 9618 6017, 9619 4328 9620 ] 9621 ] 9622 ] 9623 } 9624 }, 9625 { 9626 "type": "Feature", 9627 "id": "US.FL", 9628 "properties": { 9629 "hc-group": "admin1", 9630 "hc-middle-x": 0.77, 9631 "hc-middle-y": 0.5, 9632 "hc-key": "us-fl", 9633 "hc-a2": "FL", 9634 "labelrank": "0", 9635 "hasc": "US.FL", 9636 "woe-id": "2347568", 9637 "state-fips": "12", 9638 "fips": "US12", 9639 "postal-code": "FL", 9640 "name": "Florida", 9641 "country": "United States of America", 9642 "region": "South", 9643 "longitude": "-81.6228", 9644 "woe-name": "Florida", 9645 "latitude": "28.1568", 9646 "woe-label": "Florida, US, United States", 9647 "type": "State" 9648 }, 9649 "geometry": { 9650 "type": "Polygon", 9651 "coordinates": [ 9652 [ 9653 [ 9654 6487, 9655 4443 9656 ], 9657 [ 9658 6487, 9659 4486 9660 ], 9661 [ 9662 6431, 9663 4541 9664 ], 9665 [ 9666 6436, 9667 4574 9668 ], 9669 [ 9670 7015, 9671 4637 9672 ], 9673 [ 9674 7055, 9675 4568 9676 ], 9677 [ 9678 7649, 9679 4609 9680 ], 9681 [ 9682 7670, 9683 4559 9684 ], 9685 [ 9686 7699, 9687 4566 9688 ], 9689 [ 9690 7687, 9691 4660 9692 ], 9693 [ 9694 7713, 9695 4686 9696 ], 9697 [ 9698 7808, 9699 4673 9700 ], 9701 [ 9702 7822, 9703 4672 9704 ], 9705 [ 9706 7849, 9707 4570 9708 ], 9709 [ 9710 7908, 9711 4430 9712 ], 9713 [ 9714 8008, 9715 4269 9716 ], 9717 [ 9718 8125, 9719 4130 9720 ], 9721 [ 9722 8113, 9723 4109 9724 ], 9725 [ 9726 8144, 9727 4012 9728 ], 9729 [ 9730 8198, 9731 3936 9732 ], 9733 [ 9734 8297, 9735 3758 9736 ], 9737 [ 9738 8321, 9739 3651 9740 ], 9741 [ 9742 8331, 9743 3476 9744 ], 9745 [ 9746 8302, 9747 3361 9748 ], 9749 [ 9750 8313, 9751 3273 9752 ], 9753 [ 9754 8270, 9755 3209 9756 ], 9757 [ 9758 8291, 9759 3273 9760 ], 9761 [ 9762 8273, 9763 3290 9764 ], 9765 [ 9766 8230, 9767 3255 9768 ], 9769 [ 9770 8194, 9771 3260 9772 ], 9773 [ 9774 8141, 9775 3234 9776 ], 9777 [ 9778 8115, 9779 3258 9780 ], 9781 [ 9782 8115, 9783 3303 9784 ], 9785 [ 9786 8070, 9787 3379 9788 ], 9789 [ 9790 7979, 9791 3429 9792 ], 9793 [ 9794 7953, 9795 3420 9796 ], 9797 [ 9798 7907, 9799 3543 9800 ], 9801 [ 9802 7846, 9803 3536 9804 ], 9805 [ 9806 7839, 9807 3654 9808 ], 9809 [ 9810 7796, 9811 3674 9812 ], 9813 [ 9814 7819, 9815 3634 9816 ], 9817 [ 9818 7779, 9819 3640 9820 ], 9821 [ 9822 7675, 9823 3779 9824 ], 9825 [ 9826 7722, 9827 3884 9828 ], 9829 [ 9830 7712, 9831 3915 9832 ], 9833 [ 9834 7671, 9835 3899 9836 ], 9837 [ 9838 7670, 9839 3851 9840 ], 9841 [ 9842 7622, 9843 3872 9844 ], 9845 [ 9846 7618, 9847 3966 9848 ], 9849 [ 9850 7635, 9851 4045 9852 ], 9853 [ 9854 7626, 9855 4157 9856 ], 9857 [ 9858 7576, 9859 4229 9860 ], 9861 [ 9862 7525, 9863 4222 9864 ], 9865 [ 9866 7473, 9867 4277 9868 ], 9869 [ 9870 7425, 9871 4302 9872 ], 9873 [ 9874 7349, 9875 4395 9876 ], 9877 [ 9878 7265, 9879 4433 9880 ], 9881 [ 9882 7186, 9883 4403 9884 ], 9885 [ 9886 7198, 9887 4370 9888 ], 9889 [ 9890 7162, 9891 4370 9892 ], 9893 [ 9894 7148, 9895 4336 9896 ], 9897 [ 9898 7067, 9899 4277 9900 ], 9901 [ 9902 6979, 9903 4284 9904 ], 9905 [ 9906 6986, 9907 4316 9908 ], 9909 [ 9910 6958, 9911 4349 9912 ], 9913 [ 9914 6892, 9915 4391 9916 ], 9917 [ 9918 6798, 9919 4429 9920 ], 9921 [ 9922 6694, 9923 4444 9924 ], 9925 [ 9926 6468, 9927 4388 9928 ], 9929 [ 9930 6505, 9931 4431 9932 ], 9933 [ 9934 6487, 9935 4443 9936 ] 9937 ] 9938 ] 9939 } 9940 }, 9941 { 9942 "type": "Feature", 9943 "id": "US.GA", 9944 "properties": { 9945 "hc-group": "admin1", 9946 "hc-middle-x": 0.43, 9947 "hc-middle-y": 0.52, 9948 "hc-key": "us-ga", 9949 "hc-a2": "GA",
9950 "labelrank": "0", 9951 "hasc": "US.GA", 9952 "woe-id": "2347569", 9953 "state-fips": "13", 9954 "fips": "US13", 9955 "postal-code": "GA", 9956 "name": "Georgia", 9957 "country": "United States of America", 9958 "region": "South", 9959 "longitude": "-83.4078", 9960 "woe-name": "Georgia", 9961 "latitude": "32.8547", 9962 "woe-label": "Georgia, US, United States", 9963 "type": "State" 9964 }, 9965 "geometry": { 9966 "type": "Polygon", 9967 "coordinates": [ 9968 [ 9969 [ 9970 7713, 9971 4686 9972 ], 9973 [ 9974 7687, 9975 4660 9976 ], 9977 [ 9978 7699, 9979 4566 9980 ], 9981 [ 9982 7670, 9983 4559 9984 ], 9985 [ 9986 7649, 9987 4609 9988 ], 9989 [ 9990 7055, 9991 4568 9992 ], 9993 [ 9994 7015, 9995 4637 9996 ], 9997 [ 9998 6983, 9999 4704 10000 ], 10001 [ 10002 6990, 10003 4774 10004 ], 10005 [ 10006 6958, 10007 4846 10008 ], 10009 [ 10010 6970, 10011 4930 10012 ], 10013 [ 10014 6998, 10015 4970 10016 ], 10017 [ 10018 6947, 10019 5053 10020 ], 10021 [ 10022 6912, 10023 5135 10024 ], 10025 [ 10026 6762, 10027 5652 10028 ], 10029 [ 10030 6918, 10031 5671 10032 ], 10033 [ 10034 7034, 10035 5685 10036 ], 10037 [ 10038 7210, 10039 5711 10040 ], 10041 [ 10042 7290, 10043 5724 10044 ], 10045 [ 10046 7249, 10047 5641 10048 ], 10049 [ 10050 7323, 10051 5596 10052 ], 10053 [ 10054 7364, 10055 5593 10056 ], 10057 [ 10058 7401, 10059 5526 10060 ], 10061 [ 10062 7444, 10063 5475 10064 ], 10065 [ 10066 7523, 10067 5430 10068 ], 10069 [ 10070 7538, 10071 5402 10072 ], 10073 [ 10074 7600, 10075 5369 10076 ], 10077 [ 10078 7606, 10079 5340 10080 ], 10081 [ 10082 7651, 10083 5293 10084 ], 10085 [ 10086 7708, 10087 5272 10088 ], 10089 [ 10090 7750, 10091 5169 10092 ], 10093 [ 10094 7800, 10095 5140 10096 ], 10097 [ 10098 7844, 10099 5042 10100 ], 10101 [ 10102 7887, 10103 5035 10104 ], 10105 [ 10106 7901, 10107 5029 10108 ], 10109 [ 10110 7811, 10111 4893 10112 ], 10113 [ 10114 7836, 10115 4826 10116 ], 10117 [ 10118 7798, 10119 4798 10120 ], 10121 [ 10122 7817, 10123 4730 10124 ], 10125 [ 10126 7808, 10127 4673 10128 ], 10129 [ 10130 7713, 10131 4686 10132 ] 10133 ] 10134 ] 10135 } 10136 }, 10137 { 10138 "type": "Feature", 10139 "id": "US.SC", 10140 "properties": { 10141 "hc-group": "admin1", 10142 "hc-middle-x": 0.54, 10143 "hc-middle-y": 0.35, 10144 "hc-key": "us-sc", 10145 "hc-a2": "SC", 10146 "labelrank": "0", 10147 "hasc": "US.SC", 10148 "woe-id": "2347599", 10149 "state-fips": "45", 10150 "fips": "US45", 10151 "postal-code": "SC", 10152 "name": "South Carolina", 10153 "country": "United States of America",
10154 "region": "South", 10155 "longitude": "-80.6471", 10156 "woe-name": "South Carolina", 10157 "latitude": "33.8578", 10158 "woe-label": "South Carolina, US, United States", 10159 "type": "State" 10160 }, 10161 "geometry": { 10162 "type": "Polygon", 10163 "coordinates": [ 10164 [ 10165 [ 10166 8302, 10167 5600 10168 ], 10169 [ 10170 8236, 10171 5523 10172 ], 10173 [ 10174 8205, 10175 5458 10176 ], 10177 [ 10178 8206, 10179 5396 10180 ], 10181 [ 10182 8173, 10183 5348 10184 ], 10185 [ 10186 8140, 10187 5346 10188 ], 10189 [ 10190 8131, 10191 5311 10192 ], 10193 [ 10194 8056, 10195 5219 10196 ], 10197 [ 10198 7989, 10199 5173 10200 ], 10201 [ 10202 7913, 10203 5166 10204 ], 10205 [ 10206 7971, 10207 5149 10208 ], 10209 [ 10210 7887, 10211 5035 10212 ], 10213 [ 10214 7844, 10215 5042 10216 ], 10217 [ 10218 7800, 10219 5140 10220 ], 10221 [ 10222 7750, 10223 5169 10224 ], 10225 [ 10226 7708, 10227 5272 10228 ], 10229 [ 10230 7651, 10231 5293 10232 ], 10233 [ 10234 7606, 10235 5340 10236 ], 10237 [ 10238 7600, 10239 5369 10240 ], 10241 [ 10242 7538, 10243 5402 10244 ], 10245 [ 10246 7523, 10247 5430 10248 ], 10249 [ 10250 7444, 10251 5475 10252 ], 10253 [ 10254 7401, 10255 5526 10256 ], 10257 [ 10258 7364, 10259 5593 10260 ], 10261 [ 10262 7323, 10263 5596 10264 ], 10265 [ 10266 7249, 10267 5641 10268 ], 10269 [ 10270 7290, 10271 5724 10272 ], 10273 [ 10274 7457, 10275 5802 10276 ], 10277 [ 10278 7714, 10279 5830 10280 ], 10281 [ 10282 7782, 10283 5790 10284 ], 10285 [ 10286 7791, 10287 5756 10288 ], 10289 [ 10290 8029, 10291 5790 10292 ], 10293 [ 10294 8302, 10295 5600 10296 ] 10297 ] 10298 ] 10299 } 10300 }, 10301 { 10302 "type": "Feature", 10303 "id": "US.MN", 10304 "properties": { 10305 "hc-group": "admin1", 10306 "hc-middle-x": 0.38, 10307 "hc-middle-y": 0.6, 10308 "hc-key": "us-mn", 10309 "hc-a2": "MN", 10310 "labelrank": "0", 10311 "hasc": "US.MN", 10312 "woe-id": "2347582", 10313 "state-fips": "27", 10314 "fips": "US27", 10315 "postal-code": "MN", 10316 "name": "Minnesota", 10317 "country": "United States of America", 10318 "region": "Midwest", 10319 "longitude": "-93.364", 10320 "woe-name": "Minnesota", 10321 "latitude": "46.0592", 10322 "woe-label": "Minnesota, US, United States", 10323 "type": "State" 10324 }, 10325 "geometry": { 10326 "type": "Polygon", 10327 "coordinates": [ 10328 [ 10329 [ 10330 4333, 10331 9174 10332 ], 10333 [ 10334 4688, 10335 9173 10336 ], 10337 [ 10338 4690, 10339 9272 10340 ], 10341 [ 10342 4748, 10343 9253 10344 ], 10345 [ 10346 4770, 10347 9125 10348 ], 10349 [ 10350 4791, 10351 9104 10352 ], 10353 [ 10354 4854, 10355 9085 10356 ], 10357 [ 10358 4916, 10359 9083 10360 ], 10361 [ 10362 4938, 10363 9052 10364 ], 10365 [ 10366 4984, 10367 9060 10368 ], 10369 [ 10370 5024, 10371 9084 10372 ], 10373 [ 10374 5073, 10375 9082 10376 ], 10377 [ 10378 5132, 10379 9063 10380 ], 10381 [ 10382 5181, 10383 8985 10384 ], 10385 [ 10386 5194, 10387 9006 10388 ], 10389 [ 10390 5240, 10391 9014 10392 ], 10393 [ 10394 5304, 10395 8955 10396 ], 10397 [ 10398 5351, 10399 8941 10400 ], 10401 [ 10402 5438, 10403 8996 10404 ], 10405 [ 10406 5463, 10407 8964 10408 ], 10409 [ 10410 5570, 10411 8974 10412 ], 10413 [ 10414 5607, 10415 8949 10416 ], 10417 [ 10418 5668, 10419 8950 10420 ], 10421 [ 10422 5592, 10423 8895 10424 ], 10425 [ 10426 5514, 10427 8864 10428 ], 10429 [ 10430 5432, 10431 8802 10432 ], 10433 [ 10434 5349, 10435 8700 10436 ], 10437 [ 10438 5245, 10439 8603 10440 ], 10441 [ 10442 5214, 10443 8573 10444 ], 10445 [ 10446 5220, 10447 8422 10448 ], 10449 [ 10450 5147, 10451 8375 10452 ], 10453 [ 10454 5116, 10455 8322 10456 ], 10457 [ 10458 5117, 10459 8285 10460 ], 10461 [ 10462 5158, 10463 8253 10464 ], 10465 [ 10466 5144, 10467 8214 10468 ], 10469 [ 10470 5146, 10471 8117 10472 ], 10473 [ 10474 5136, 10475 8072 10476 ], 10477 [ 10478 5181, 10479 8035 10480 ], 10481 [ 10482 5217, 10483 8029 10484 ], 10485 [ 10486 5273, 10487 7994 10488 ], 10489 [ 10490 5360, 10491 7903 10492 ], 10493 [ 10494 5405, 10495 7892 10496 ], 10497 [ 10498 5431, 10499 7866 10500 ], 10501 [ 10502 5445, 10503 7758 10504 ], 10505 [ 10506 5137, 10507 7745 10508 ], 10509 [ 10510 4459, 10511 7735 10512 ], 10513 [ 10514 4462, 10515 8203 10516 ], 10517 [ 10518 4419, 10519 8232 10520 ], 10521 [ 10522 4387, 10523 8283 10524 ], 10525 [ 10526 4429, 10527 8325 10528 ], 10529 [ 10530 4444, 10531 8372 10532 ], 10533 [ 10534 4436, 10535 8472 10536 ], 10537 [ 10538 4402, 10539 8555 10540 ], 10541 [ 10542 4409, 10543 8628 10544 ], 10545 [ 10546 4397, 10547 8650 10548 ], 10549 [ 10550 4394, 10551 8777 10552 ], 10553 [ 10554 4347, 10555 8957 10556 ], 10557 [ 10558 4343, 10559 9053
10560 ], 10561 [ 10562 4353, 10563 9083 10564 ], 10565 [ 10566 4333, 10567 9174 10568 ] 10569 ] 10570 ] 10571 } 10572 }, 10573 { 10574 "type": "Feature", 10575 "id": "US.MT", 10576 "properties": { 10577 "hc-group": "admin1", 10578 "hc-middle-x": 0.55, 10579 "hc-middle-y": 0.53, 10580 "hc-key": "us-mt", 10581 "hc-a2": "MT", 10582 "labelrank": "0", 10583 "hasc": "US.MT", 10584 "woe-id": "2347585", 10585 "state-fips": "30", 10586 "fips": "US30", 10587 "postal-code": "MT", 10588 "name": "Montana", 10589 "country": "United States of America", 10590 "region": "West", 10591 "longitude": "-110.044", 10592 "woe-name": "Montana", 10593 "latitude": "46.9965", 10594 "woe-label": "Montana, US, United States", 10595 "type": "State" 10596 }, 10597 "geometry": { 10598 "type": "Polygon", 10599 "coordinates": [ 10600 [ 10601 [ 10602 1093, 10603 9555 10604 ], 10605 [ 10606 1689, 10607 9433 10608 ], 10609 [ 10610 3150, 10611 9234 10612 ], 10613 [ 10614 3084, 10615 8486 10616 ], 10617 [ 10618 3080, 10619 8436 10620 ], 10621 [ 10622 3059, 10623 8191 10624 ], 10625 [ 10626 3056, 10627 8191 10628 ], 10629 [ 10630 1772, 10631 8355 10632 ], 10633 [ 10634 1750, 10635 8226 10636 ], 10637 [ 10638 1713, 10639 8295 10640 ], 10641 [ 10642 1686, 10643 8296 10644 ], 10645 [ 10646 1671, 10647 8261 10648 ], 10649 [ 10650 1614, 10651 8258 10652 ], 10653 [ 10654 1536, 10655 8282 10656 ], 10657 [ 10658 1508, 10659 8261 10660 ], 10661 [ 10662 1451, 10663 8281 10664 ], 10665 [ 10666 1415, 10667 8254 10668 ], 10669 [ 10670 1392, 10671 8280 10672 ], 10673 [ 10674 1391, 10675 8331 10676 ], 10677 [ 10678 1374, 10679 8375 10680 ], 10681 [ 10682 1347, 10683 8377 10684 ], 10685 [ 10686 1326, 10687 8419 10688 ], 10689 [ 10690 1338, 10691 8434 10692 ], 10693 [ 10694 1303, 10695 8522 10696 ], 10697 [ 10698 1303, 10699 8596 10700 ], 10701 [ 10702 1278, 10703 8630 10704 ], 10705 [ 10706 1200, 10707 8590 10708 ], 10709 [ 10710 1167, 10711 8620 10712 ], 10713 [ 10714 1177, 10715 8675 10716 ], 10717 [ 10718 1211, 10719 8698 10720 ], 10721 [ 10722 1204, 10723 8727 10724 ], 10725 [ 10726 1219, 10727 8796 10728 ], 10729 [ 10730 1253, 10731 8859 10732 ], 10733 [ 10734 1258, 10735 8897 10736 ], 10737 [ 10738 1219, 10739 8896 10740 ], 10741 [ 10742 1170, 10743 8959 10744 ], 10745 [ 10746 1172, 10747 8979 10748 ], 10749 [ 10750 1117, 10751 9085 10752 ], 10753 [ 10754 1061, 10755 9142 10756 ], 10757 [ 10758 1076, 10759 9210 10760 ], 10761 [ 10762 1036, 10763 9301 10764 ], 10765 [ 10766 1093, 10767 9555 10768 ] 10769 ] 10770 ] 10771 } 10772 }, 10773 { 10774 "type": "Feature", 10775 "id": "US.ND", 10776 "properties": { 10777 "hc-group": "admin1", 10778 "hc-middle-x": 0.47, 10779 "hc-middle-y": 0.5, 10780 "hc-key": "us-nd", 10781 "hc-a2": "ND", 10782 "labelrank": "0", 10783 "hasc": "US.ND", 10784 "woe-id": "2347593", 10785 "state-fips": "38", 10786 "fips": "US38", 10787 "postal-code": "ND", 10788 "name": "North Dakota", 10789 "country": "United States of America", 10790 "region": "Midwest", 10791 "longitude": "-100.302", 10792 "woe-name": "North Dakota", 10793 "latitude": "47.4675", 10794 "woe-label": "North Dakota, US, United States", 10795 "type": "State" 10796 }, 10797 "geometry": { 10798 "type": "Polygon", 10799 "coordinates": [ 10800 [ 10801 [ 10802 3080, 10803 8436 10804 ], 10805 [ 10806 3084, 10807 8486 10808 ], 10809 [ 10810 3150, 10811 9234 10812 ], 10813 [ 10814 3468, 10815 9209 10816 ], 10817 [ 10818 4333, 10819 9174 10820 ], 10821 [ 10822 4353, 10823 9083 10824 ], 10825 [ 10826 4343, 10827 9053
10828 ], 10829 [ 10830 4347, 10831 8957 10832 ], 10833 [ 10834 4394, 10835 8777 10836 ], 10837 [ 10838 4397, 10839 8650 10840 ], 10841 [ 10842 4409, 10843 8628 10844 ], 10845 [ 10846 4402, 10847 8555 10848 ], 10849 [ 10850 4436, 10851 8472 10852 ], 10853 [ 10854 4444, 10855 8372 10856 ], 10857 [ 10858 4231, 10859 8374 10860 ], 10861 [ 10862 3080, 10863 8436 10864 ] 10865 ] 10866 ] 10867 } 10868 }, 10869 { 10870 "type": "Feature", 10871 "id": "US.AZ", 10872 "properties": { 10873 "hc-group": "admin1", 10874 "hc-middle-x": 0.51, 10875 "hc-middle-y": 0.45, 10876 "hc-key": "us-az", 10877 "hc-a2": "AZ", 10878 "labelrank": "0", 10879 "hasc": "US.AZ", 10880 "woe-id": "2347561", 10881 "state-fips": "4", 10882 "fips": "US04", 10883 "postal-code": "AZ", 10884 "name": "Arizona", 10885 "country": "United States of America", 10886 "region": "West", 10887 "longitude": "-111.935", 10888 "woe-name": "Arizona", 10889 "latitude": "34.3046", 10890 "woe-label": "Arizona, US, United States", 10891 "type": "State" 10892 }, 10893 "geometry": { 10894 "type": "Polygon", 10895 "coordinates": [ 10896 [ 10897 [ 10898 1630, 10899 4782 10900 ], 10901 [ 10902 1196, 10903 4850 10904 ], 10905 [ 10906 1092, 10907 4906 10908 ], 10909 [ 10910 418, 10911 5307 10912 ], 10913 [ 10914 451, 10915 5357 10916 ], 10917 [ 10918 492, 10919 5355 10920 ], 10921 [ 10922 519, 10923 5416 10924 ], 10925 [ 10926 476, 10927 5452 10928 ], 10929 [ 10930 489, 10931 5536 10932 ], 10933 [ 10934 510, 10935 5537 10936 ], 10937 [ 10938 555, 10939 5605 10940 ], 10941 [ 10942 559, 10943 5661 10944 ], 10945 [ 10946 598, 10947 5702 10948 ], 10949 [ 10950 660, 10951 5730 10952 ], 10953 [ 10954 620, 10955 5788 10956 ], 10957 [ 10958 593, 10959 5936 10960 ], 10961 [ 10962 614, 10963 5982 10964 ], 10965 [ 10966 611, 10967 6068 10968 ], 10969 [ 10970 631, 10971 6159 10972 ], 10973 [ 10974 631, 10975 6217 10976 ], 10977 [ 10978 669, 10979 6227 10980 ], 10981 [ 10982 752, 10983 6180 10984 ], 10985 [ 10986 777, 10987 6221 10988 ], 10989 [ 10990 818, 10991 6420 10992 ], 10993 [ 10994 1488, 10995 6297 10996 ], 10997 [ 10998 1841, 10999 6242 11000 ], 11001 [ 11002 1736, 11003 5514 11004 ], 11005 [ 11006 1630, 11007 4782 11008 ] 11009 ] 11010 ] 11011 } 11012 }, 11013 { 11014 "type": "Feature", 11015 "id": "US.UT", 11016 "properties": { 11017 "hc-group": "admin1", 11018 "hc-middle-x": 0.52, 11019 "hc-middle-y": 0.59, 11020 "hc-key": "us-ut", 11021 "hc-a2": "UT", 11022 "labelrank": "0", 11023 "hasc": "US.UT", 11024 "woe-id": "2347603", 11025 "state-fips": "49", 11026 "fips": "US49", 11027 "postal-code": "UT", 11028 "name": "Utah", 11029 "country": "United States of America", 11030 "region": "West", 11031 "longitude": "-111.544", 11032 "woe-name": "Utah", 11033 "latitude": "39.5007", 11034 "woe-label": "Utah, US, United States", 11035 "type": "State" 11036 }, 11037 "geometry": { 11038 "type": "Polygon", 11039 "coordinates": [ 11040 [ 11041 [ 11042 1841, 11043 6242 11044 ], 11045 [ 11046 1488, 11047 6297 11048 ], 11049 [ 11050 818, 11051 6420 11052 ], 11053 [ 11054 929, 11055 6975 11056 ], 11057 [ 11058 1073, 11059 7690 11060 ], 11061 [ 11062 1393, 11063 7629 11064 ], 11065 [ 11066 1643, 11067 7585 11068 ], 11069 [ 11070 1600, 11071 7329 11072 ], 11073 [ 11074 1990, 11075 7269 11076 ], 11077 [ 11078 1966, 11079 7108 11080 ], 11081 [ 11082 1841, 11083 6242 11084 ] 11085 ] 11086 ] 11087 } 11088 }, 11089 { 11090 "type": "Feature", 11091 "id": "US.HI", 11092 "properties": { 11093 "hc-group": "admin1", 11094 "hc-middle-x": 0.87, 11095 "hc-middle-y": 0.79, 11096 "hc-key": "us-hi", 11097 "hc-a2": "HI", 11098 "labelrank": "0", 11099 "hasc": "US.HI", 11100 "woe-id": "2347570", 11101 "state-fips": "15", 11102 "fips": "US15", 11103 "postal-code": "HI", 11104 "name": "Hawaii", 11105 "country": "United States of America", 11106 "region": "West", 11107 "longitude": "-157.999",
11108 "woe-name": "Hawaii", 11109 "latitude": "21.4919", 11110 "woe-label": "Hawaii, US, United States", 11111 "type": "State" 11112 }, 11113 "geometry": { 11114 "type": "MultiPolygon", 11115 "coordinates": [ 11116 [ 11117 [ 11118 [ 11119 2871.1, 11120 2945.9 11121 ], 11122 [ 11123 2875.2, 11124 2942.7 11125 ], 11126 [ 11127 2879.9, 11128 2943.9 11129 ], 11130 [ 11131 2887, 11132 2943.5 11133 ], 11134 [ 11135 2908.4, 11136 2936 11137 ], 11138 [ 11139 2926.2, 11140 2927 11141 ], 11142 [ 11143 2959.3, 11144 2906.2 11145 ], 11146 [ 11147 2969.8, 11148 2895.8 11149 ], 11150 [ 11151 2975.6, 11152 2888.1 11153 ], 11154 [ 11155 2975.6, 11156 2868.8 11157 ], 11158 [ 11159 2976.2, 11160 2860.2 11161 ], 11162 [ 11163 2981.8, 11164 2860.4 11165 ], 11166 [ 11167 2989.5, 11168 2864.1 11169 ], 11170 [ 11171 2995.3, 11172 2860.2 11173 ], 11174 [ 11175 2998, 11176 2855.8 11177 ], 11178 [ 11179 2997.4, 11180 2846.7 11181 ], 11182 [ 11183 3000.1, 11184 2841.1 11185 ], 11186 [ 11187 3003.5, 11188 2836 11189 ], 11190 [ 11191 3013.7, 11192 2826.7 11193 ], 11194 [ 11195 3024.4, 11196 2822.1 11197 ], 11198 [ 11199 3028.7, 11200 2818.5 11201 ], 11202 [ 11203 3031, 11204 2814.1 11205 ], 11206 [ 11207 3030.4, 11208 2808.4 11209 ], 11210 [ 11211 3019, 11212 2794.3 11213 ], 11214 [ 11215 3010.1, 11216 2790.9 11217 ], 11218 [ 11219 2997.5, 11220 2778.6 11221 ], 11222 [ 11223 2988.9, 11224 2776 11225 ], 11226 [ 11227 2988.6, 11228 2773.6 11229 ], 11230 [ 11231 2981.4, 11232 2771.8 11233 ], 11234 [ 11235 2975.3, 11236 2767.2 11237 ], 11238 [ 11239 2953.3, 11240 2760.6 11241 ], 11242 [ 11243 2944.8, 11244 2762.6 11245 ], 11246 [ 11247 2939.9, 11248 2762.7 11249 ], 11250 [ 11251 2935.5, 11252 2761.3 11253 ], 11254 [ 11255 2924.6, 11256 2753.9 11257 ], 11258 [ 11259 2920.9, 11260 2749.4 11261 ], 11262 [ 11263 2913.7, 11264 2747.3 11265 ], 11266 [ 11267 2906.4, 11268 2742.2 11269 ], 11270 [ 11271 2896.2, 11272 2736.4 11273 ], 11274 [ 11275 2893.2, 11276 2735.4 11277 ], 11278 [ 11279 2884.5, 11280 2727 11281 ], 11282 [ 11283 2883, 11284 2723.6 11285 ], 11286 [ 11287 2883.3, 11288 2715.9 11289 ], 11290 [ 11291 2873.3, 11292 2705.7 11293 ], 11294 [ 11295 2870.1, 11296 2696.8 11297 ], 11298 [ 11299 2867.2, 11300 2693.6 11301 ], 11302 [ 11303 2858.8, 11304 2686.4 11305 ], 11306 [ 11307 2857, 11308 2687.4 11309 ], 11310 [ 11311 2857.1, 11312 2692 11313 ], 11314 [ 11315 2852.9, 11316 2695.4 11317 ], 11318 [ 11319 2844.7, 11320 2699.6 11321 ], 11322 [ 11323 2830, 11324 2708.8 11325 ], 11326 [ 11327 2817.8, 11328 2712.1 11329 ], 11330 [ 11331 2815.1, 11332 2719.8 11333 ], 11334 [ 11335 2812.5, 11336 2720.6 11337 ], 11338 [ 11339 2810.9, 11340 2726.2 11341 ], 11342 [ 11343 2809.3, 11344 2735.1 11345 ], 11346 [ 11347 2811.5, 11348 2745.8 11349 ], 11350 [ 11351 2816, 11352 2776.4 11353 ], 11354 [ 11355 2815.6, 11356 2781.7 11357 ], 11358 [ 11359 2812.9, 11360 2786.6 11361 ], 11362 [ 11363 2805.6, 11364 2807.3 11365 ], 11366 [ 11367 2801.6, 11368 2814.3 11369 ], 11370 [ 11371 2802.1, 11372 2818.9 11373 ], 11374 [ 11375 2799.7, 11376 2823.2 11377 ], 11378 [ 11379 2796.3, 11380 2833.9 11381 ], 11382 [ 11383 2792.8, 11384 2839.1 11385 ], 11386 [ 11387 2789.8, 11388 2841.4 11389 ], 11390 [ 11391 2785.4, 11392 2846.6 11393 ], 11394 [ 11395 2780.6, 11396 2859.9 11397 ], 11398 [ 11399 2784.8, 11400 2870.8 11401 ], 11402 [ 11403 2795.1, 11404 2879.5 11405 ], 11406 [ 11407 2796.2, 11408 2883.5 11409 ], 11410 [ 11411 2799, 11412 2885.8 11413 ], 11414 [ 11415 2807.4, 11416 2888.9 11417 ], 11418 [ 11419 2813.4, 11420 2898.4 11421 ], 11422 [ 11423 2817.9, 11424 2906.3 11425 ], 11426 [ 11427 2822.3, 11428 2911.4 11429 ], 11430 [ 11431 2825.4, 11432 2911.5 11433 ], 11434 [ 11435 2827.7, 11436 2920.9 11437 ], 11438 [ 11439 2826.3, 11440 2924.9 11441 ], 11442 [ 11443 2822.9, 11444 2928.1 11445 ], 11446 [ 11447 2815.9, 11448 2938.7 11449 ], 11450 [ 11451 2813, 11452 2947.9 11453 ], 11454 [ 11455 2812.4, 11456 2962.2 11457 ], 11458 [ 11459 2816.2, 11460 2969.6 11461 ], 11462 [ 11463 2818.8, 11464 2972 11465 ], 11466 [ 11467 2826, 11468 2972 11469 ], 11470 [ 11471 2844.7, 11472 2968 11473 ], 11474 [ 11475 2850, 11476 2958 11477 ], 11478 [ 11479 2857.7, 11480 2955 11481 ], 11482 [ 11483 2862.8, 11484 2952.2 11485 ], 11486 [ 11487 2866.3, 11488 2948 11489 ], 11490 [ 11491 2871.1, 11492 2945.9 11493 ] 11494 ] 11495 ], 11496 [ 11497 [ 11498 [ 11499 2685.2, 11500 3028 11501 ], 11502 [ 11503 2683.1, 11504 3024.1 11505 ], 11506 [ 11507 2677.4, 11508 3024.1 11509 ], 11510 [ 11511 2672.1, 11512 3025 11513 ], 11514 [ 11515 2662.7, 11516 3023 11517 ], 11518 [ 11519 2656.2, 11520 3022.3 11521 ], 11522 [ 11523 2651.9, 11524 3026.6 11525 ], 11526 [ 11527 2654.3, 11528 3029.7 11529 ], 11530 [ 11531 2658.6, 11532 3033.4 11533 ], 11534 [ 11535 2670.2, 11536 3040.4 11537 ], 11538 [ 11539 2675.5, 11540 3042.3 11541 ], 11542 [ 11543 2679.6, 11544 3041.9 11545 ], 11546 [ 11547 2684.7, 11548 3036.2 11549 ], 11550 [ 11551 2682.1, 11552 3030 11553 ], 11554 [ 11555 2685.2, 11556 3028 11557 ] 11558 ] 11559 ], 11560 [ 11561 [ 11562 [ 11563 2609.3, 11564 3070.6 11565 ], 11566 [ 11567
115672599.6, 11568 3070.1 11569 ], 11570 [ 11571 2595.6, 11572 3075.8 11573 ], 11574 [ 11575 2594.6, 11576 3080.7 11577 ], 11578 [ 11579 2594.3, 11580 3089.5 11581 ], 11582 [ 11583 2593.6, 11584 3094 11585 ], 11586 [ 11587 2590.2, 11588 3096 11589 ], 11590 [ 11591 2581.9, 11592 3099.3 11593 ], 11594 [ 11595 2579.4, 11596 3103.3 11597 ], 11598 [ 11599 2581, 11600 3107.7 11601 ], 11602 [ 11603 2585.7, 11604 3110.1 11605 ], 11606 [ 11607 2594, 11608 3111.1 11609 ], 11610 [ 11611 2613.5, 11612 3108.3 11613 ], 11614 [ 11615 2622.3, 11616 3100.4 11617 ], 11618 [ 11619 2628.7, 11620 3093.1 11621 ], 11622 [ 11623 2631.3, 11624 3086.9 11625 ], 11626 [ 11627 2630, 11628 3083.4 11629 ], 11630 [ 11631 2625.7, 11632 3076.7 11633 ], 11634 [ 11635 2616.7, 11636 3072.6 11637 ], 11638 [ 11639 2609.3, 11640 3070.6 11641 ] 11642 ] 11643 ], 11644 [ 11645 [ 11646 [ 11647 2673.9, 11648 3132.2 11649 ], 11650 [ 11651 2675.6, 11652 3130.2 11653 ], 11654 [ 11655 2683.4, 11656 3127.1 11657 ], 11658 [ 11659 2684.3, 11660 3124.4 11661 ], 11662 [ 11663 2686.7, 11664 3123.7 11665 ], 11666 [ 11667 2687.2, 11668 3118.4 11669 ], 11670 [ 11671 2690, 11672 3115.9 11673 ], 11674 [ 11675 2695.5, 11676 3106.3 11677 ], 11678 [ 11679 2699, 11680 3106.6 11681 ], 11682 [ 11683 2701.3, 11684 3109.2 11685 ], 11686 [ 11687 2705.1, 11688 3109.1 11689 ], 11690 [ 11691 2716.1, 11692 3110.5 11693 ], 11694 [ 11695 2722.5, 11696 3115.1 11697 ], 11698 [ 11699 2725.7, 11700 3116.2 11701 ], 11702 [ 11703 2732.1, 11704 3116.5 11705 ], 11706 [ 11707 2743.2, 11708 3114.2 11709 ], 11710 [ 11711 2746.4, 11712 3112.2 11713 ], 11714 [ 11715 2747.4, 11716 3109.8 11717 ], 11718 [ 11719 2752.3, 11720 3104.5 11721 ], 11722 [ 11723 2758.6, 11724 3099.6 11725 ], 11726 [ 11727 2758.8, 11728 3097.7 11729 ], 11730 [ 11731 2762.9, 11732 3098.7 11733 ], 11734 [ 11735 2765.5, 11736 3096.6 11737 ], 11738 [ 11739 2767.9, 11740 3092.2 11741 ], 11742 [ 11743 2774.8, 11744 3091.2 11745 ], 11746 [ 11747 2781.6, 11748 3088 11749 ], 11750 [ 11751 2791.4, 11752 3084.8 11753 ], 11754 [ 11755 2795.9, 11756 3075.7 11757 ], 11758 [ 11759 2794.9, 11760 3067.4 11761 ], 11762 [ 11763 2791.3, 11764 3060.7 11765 ], 11766 [ 11767 2786.3, 11768 3059.3 11769 ], 11770 [ 11771 2782.2, 11772 3053.3 11773 ], 11774 [ 11775 2776.8, 11776 3053.2 11777 ], 11778 [ 11779 2766, 11780 3047.7 11781 ], 11782 [ 11783 2754.9, 11784 3048.2 11785 ], 11786 [ 11787 2751.2, 11788 3048 11789 ], 11790 [ 11791 2731.5, 11792 3038.5 11793 ], 11794 [ 11795 2721.5, 11796 3040.8 11797 ], 11798 [ 11799 2718.9, 11800 3040.1 11801 ], 11802 [ 11803 2710.5, 11804 3039.7 11805 ], 11806 [ 11807 2704.9, 11808 3044.9 11809 ], 11810 [ 11811 2701.6, 11812 3049.9 11813 ], 11814 [ 11815 2703.3, 11816 3051.3 11817 ], 11818 [ 11819 2703.4, 11820 3055.1 11821 ], 11822 [ 11823 2701.8, 11824 3068.9 11825 ], 11826 [ 11827 2700.2, 11828 3072.7 11829 ], 11830 [ 11831 2700.3, 11832 3077 11833 ], 11834 [ 11835 2699, 11836 3080.5 11837 ], 11838 [ 11839 2694.8, 11840 3083.7 11841 ], 11842 [ 11843 2688.7, 11844 3082.3 11845 ], 11846 [ 11847 2687.7, 11848 3079.4 11849 ], 11850 [ 11851 2685.2, 11852 3078.9 11853 ], 11854 [ 11855 2679.4, 11856 3082.6 11857 ], 11858 [ 11859 2675, 11860 3083.4 11861 ], 11862 [ 11863 2670.7, 11864 3086.1 11865 ], 11866 [ 11867 2667.9, 11868 3085.8 11869 ], 11870 [ 11871 2660.5, 11872 3094.3 11873 ], 11874 [ 11875 2655, 11876 3101.5 11877 ], 11878 [ 11879 2654.7, 11880 3106.1 11881 ], 11882 [ 11883 2652.7, 11884 3108.6 11885 ], 11886 [ 11887 2654.7, 11888 3118.8 11889 ], 11890 [ 11891 2656.5, 11892 3123.8 11893 ], 11894 [ 11895 2658.6, 11896 3127.1 11897 ], 11898 [ 11899 2661.1, 11900 3127.3 11901 ], 11902 [ 11903 2664.7, 11904 3132 11905 ], 11906 [ 11907 2668.7, 11908 3131.6 11909 ], 11910 [ 11911 2672.3, 11912 3133.2 11913 ], 11914 [ 11915 2673.9, 11916 3132.2 11917 ] 11918 ] 11919 ], 11920 [ 11921 [ 11922 [ 11923 2542.4, 11924 3172.8 11925 ], 11926 [ 11927 2550.3, 11928 3172.5 11929 ], 11930 [ 11931 2552.8, 11932 3171.9 11933 ], 11934 [ 11935 2554.4, 11936 3169.4 11937 ], 11938 [ 11939 2557.4, 11940 3169.4 11941 ], 11942 [ 11943 2586.4, 11944 3165 11945 ], 11946 [ 11947 2594.1, 11948 3164.7 11949 ], 11950 [ 11951 2596.9, 11952 3170.6 11953 ], 11954 [ 11955 2598.9, 11956 3171.1 11957 ], 11958 [ 11959 2601.5, 11960 3167.6 11961 ], 11962 [ 11963 2602.5, 11964 3163.6 11965 ], 11966 [ 11967 2612.6, 11968 3161 11969 ], 11970 [ 11971 2622.6, 11972 3161.3 11973 ], 11974 [ 11975 2627, 11976 3161.9 11977 ], 11978 [ 11979 2631.9, 11980 3163.6 11981 ], 11982 [ 11983 2637.2, 11984 3163.5 11985 ], 11986 [ 11987 2642.1, 11988 3162.2 11989 ], 11990 [ 11991 2644.1, 11992 3162.6 11993 ], 11994 [ 11995 2646.1, 11996 3160.1 11997 ], 11998 [ 11999 2650.7, 12000 3159.2 12001 ], 12002 [ 12003 2646.9, 12004 3152.3 12005 ], 12006 [ 12007 2640.8, 12008 3146.4 12009 ], 12010 [ 12011 2633.3, 12012 3142.2 12013 ], 12014 [ 12015 2625.8, 12016 3139.1 12017 ], 12018 [ 12019 2618.1, 12020 3137.5 12021 ], 12022 [ 12023 2610.3, 12024 3138.3 12025 ], 12026
12026 [ 12027 2602.5, 12028 3139.8 12029 ], 12030 [ 12031 2587.1, 12032 3143.9 12033 ], 12034 [ 12035 2577.6, 12036 3147.2 12037 ], 12038 [ 12039 2554.7, 12040 3145.6 12041 ], 12042 [ 12043 2547.6, 12044 3144.5 12045 ], 12046 [ 12047 2537.6, 12048 3144.7 12049 ], 12050 [ 12051 2533.7, 12052 3146.2 12053 ], 12054 [ 12055 2531.4, 12056 3149.3 12057 ], 12058 [ 12059 2531.3, 12060 3153.2 12061 ], 12062 [ 12063 2535.1, 12064 3159.1 12065 ], 12066 [ 12067 2538.7, 12068 3160.4 12069 ], 12070 [ 12071 2541.9, 12072 3164.2 12073 ], 12074 [ 12075 2542.9, 12076 3168.2 12077 ], 12078 [ 12079 2540.2, 12080 3172.9 12081 ], 12082 [ 12083 2542.4, 12084 3172.8 12085 ] 12086 ] 12087 ], 12088 [ 12089 [ 12090 [ 12091 2414.1, 12092 3252.1 12093 ], 12094 [ 12095 2415.3, 12096 3248.5 12097 ], 12098 [ 12099 2417.5, 12100 3247.3 12101 ], 12102 [ 12103 2418.6, 12104 3243.6 12105 ], 12106 [ 12107 2422.1, 12108 3243.3 12109 ], 12110 [ 12111 2425.5, 12112 3238.6 12113 ], 12114 [ 12115 2425.5, 12116 3233.8 12117 ], 12118 [ 12119 2422.8, 12120 3232.6 12121 ], 12122 [ 12123 2424.3, 12124 3223.3 12125 ], 12126 [ 12127 2428.6, 12128 3221.7 12129 ], 12130 [ 12131 2432, 12132 3216.6 12133 ], 12134 [ 12135 2435, 12136 3215.5 12137 ], 12138 [ 12139 2437.4, 12140 3213.2 12141 ], 12142 [ 12143 2440.6, 12144 3217.4 12145 ], 12146 [ 12147 2437.6, 12148 3219.4 12149 ], 12150 [ 12151 2437.9, 12152 3221.8 12153 ], 12154 [ 12155 2440.1, 12156 3222.8 12157 ], 12158 [ 12159 2448, 12160 3221.2 12161 ], 12162 [ 12163 2445.1, 12164 3218.3 12165 ], 12166 [ 12167 2444.8, 12168 3211.6 12169 ], 12170 [ 12171 2448.1, 12172 3209.6 12173 ], 12174 [ 12175 2451.4, 12176 3205.2 12177 ], 12178 [ 12179 2450.5, 12180 3202.8 12181 ], 12182 [ 12183 2453.3, 12184 3197.1 12185 ], 12186 [ 12187 2461.8, 12188 3192 12189 ], 12190 [ 12191 2463, 12192 3190.8 12193 ], 12194 [ 12195 2453.8, 12196 3181.6 12197 ], 12198 [ 12199 2451.7, 12200 3180.9 12201 ], 12202 [ 12203 2451.1, 12204 3184.2 12205 ], 12206 [ 12207 2449.4, 12208 3185.6 12209 ], 12210 [ 12211 2439.8, 12212 3183.8 12213 ], 12214 [ 12215 2433.5, 12216 3180 12217 ], 12218 [ 12219 2429, 12220 3180.6 12221 ], 12222 [ 12223 2426.4, 12224 3184.7 12225 ], 12226 [ 12227 2416.6, 12228 3189.1 12229 ], 12230 [ 12231 2413.7, 12232 3194.2 12233 ], 12234 [ 12235 2413.7, 12236 3196.2 12237 ], 12238 [ 12239 2409.6, 12240 3193 12241 ], 12242 [ 12243 2411.6, 12244 3190.7 12245 ], 12246 [ 12247 2403.3, 12248 3190.2 12249 ], 12250 [ 12251 2404.6, 12252 3191.8 12253 ], 12254 [ 12255 2399.9, 12256 3193 12257 ], 12258 [ 12259 2399.1, 12260 3199.7 12261 ], 12262 [ 12263 2405.5, 12264 3202.8 12265 ], 12266 [ 12267 2406.3, 12268 3204.6 12269 ], 12270 [ 12271 2400.6, 12272 3208.2 12273 ], 12274 [ 12275 2398.9, 12276 3204.7 12277 ], 12278 [ 12279 2394.5, 12280 3208.7 12281 ], 12282 [ 12283 2395.9, 12284 3202.7 12285 ], 12286 [ 12287 2394.8, 12288 3202 12289 ], 12290 [ 12291 2388.7, 12292 3207.1 12293 ], 12294 [ 12295 2390.1, 12296 3203.7 12297 ], 12298 [ 12299 2397.6, 12300 3196.7 12301 ], 12302 [ 12303 2396.6, 12304 3193.5 12305 ], 12306 [ 12307 2393, 12308 3192 12309 ], 12310 [ 12311 2373.9, 12312 3188.4 12313 ], 12314 [ 12315 2369.7, 12316 3190.8 12317 ], 12318 [ 12319 2368, 12320 3197.9 12321 ], 12322 [ 12323 2365.9, 12324 3203.5 12325 ], 12326 [ 12327 2361.4, 12328 3209.6 12329 ], 12330 [ 12331 2357.7, 12332 3211.5 12333 ], 12334 [ 12335 2356.8, 12336 3217.1 12337 ], 12338 [ 12339 2355.5, 12340 3220.1 12341 ], 12342 [ 12343 2349.9, 12344 3224.5 12345 ], 12346 [ 12347 2347.5, 12348 3228.2 12349 ], 12350 [ 12351 2347.2, 12352 3238.6 12353 ], 12354 [ 12355 2345.9, 12356 3240.5 12357 ], 12358 [ 12359 2337.4, 12360 3247.6 12361 ], 12362 [ 12363 2345.9, 12364 3249.6 12365 ], 12366 [ 12367 2354.3, 12368 3250 12369 ], 12370 [ 12371 2368.8, 12372 3249.7 12373 ], 12374 [ 12375 2370.5, 12376 3253.5 12377 ], 12378 [ 12379 2374.1, 12380 3255.5 12381 ], 12382 [ 12383 2379.9, 12384 3260.1 12385 ], 12386 [ 12387 2379.6, 12388 3261.3 12389 ], 12390 [ 12391 2382.9, 12392 3267.5 12393 ], 12394 [ 12395 2390.2, 12396 3273.8 12397 ], 12398 [ 12399 2396.5, 12400 3275.6 12401 ], 12402 [ 12403 2400.5, 12404 3274.5 12405 ], 12406 [ 12407 2406.2, 12408 3268.8 12409 ], 12410 [ 12411 2409.8, 12412 3262 12413 ], 12414 [ 12415 2408.9, 12416 3258.2 12417 ], 12418 [ 12419 2414.1, 12420 3252.1 12421 ] 12422 ] 12423 ], 12424 [ 12425 [ 12426 [ 12427 1955.8, 12428 3294.7 12429 ], 12430 [ 12431 1953.2, 12432 3293.9 12433 ], 12434 [ 12435 1948.4, 12436 3296.6 12437 ], 12438 [ 12439 1946, 12440 3304.1 12441 ], 12442 [ 12443 1946.6, 12444 3308.8 12445 ], 12446 [ 12447 1948.8, 12448 3313.7 12449 ], 12450 [ 12451 1956.7, 12452 3321.5 12453 ], 12454 [ 12455 1963, 12456 3326.1 12457 ], 12458 [ 12459 1971.1, 12460 3330.6 12461 ], 12462 [ 12463 1973.3, 12464 3335.9 12465 ], 12466 [ 12467 1973.1, 12468 3339.8 12469 ], 12470 [ 12471 1976.7, 12472 3341.3 12473 ], 12474 [ 12475 1980.1, 12476 3341.2 12477 ], 12478 [ 12479 1983.8, 12480 3339.7 12481 ], 12482 [ 12483 1985.5, 12484
12484 3336 12485 ], 12486 [ 12487 1981.3, 12488 3331.1 12489 ], 12490 [ 12491 1979.8, 12492 3326.6 12493 ], 12494 [ 12495 1981.2, 12496 3321 12497 ], 12498 [ 12499 1978.5, 12500 3317.4 12501 ], 12502 [ 12503 1972.1, 12504 3314.3 12505 ], 12506 [ 12507 1968.3, 12508 3313.2 12509 ], 12510 [ 12511 1961.2, 12512 3308.2 12513 ], 12514 [ 12515 1959.7, 12516 3305 12517 ], 12518 [ 12519 1955.8, 12520 3294.7 12521 ] 12522 ] 12523 ], 12524 [ 12525 [ 12526 [ 12527 2117.8, 12528 3386.1 12529 ], 12530 [ 12531 2120.7, 12532 3384.6 12533 ], 12534 [ 12535 2123.8, 12536 3384.8 12537 ], 12538 [ 12539 2127.6, 12540 3382.7 12541 ], 12542 [ 12543 2129.1, 12544 3379.5 12545 ], 12546 [ 12547 2132.9, 12548 3376.7 12549 ], 12550 [ 12551 2134.9, 12552 3369.7 12553 ], 12554 [ 12555 2136.6, 12556 3368.7 12557 ], 12558 [ 12559 2136.1, 12560 3360.5 12561 ], 12562 [ 12563 2134.2, 12564 3358 12565 ], 12566 [ 12567 2131.3, 12568 3350.1 12569 ], 12570 [ 12571 2128.4, 12572 3348.5 12573 ], 12574 [ 12575 2128, 12576 3342.6 12577 ], 12578 [ 12579 2128.8, 12580 3334.9 12581 ], 12582 [ 12583 2128, 12584 3329.3 12585 ], 12586 [ 12587 2123, 12588 3328.3 12589 ], 12590 [ 12591 2125.2, 12592 3324.9 12593 ], 12594 [ 12595 2121.7, 12596 3323.7 12597 ], 12598 [ 12599 2118.3, 12600 3320.9 12601 ], 12602 [ 12603 2116.9, 12604 3318.4 12605 ], 12606 [ 12607 2109.4,
12608 3313 12609 ], 12610 [ 12611 2107.3, 12612 3310.8 12613 ], 12614 [ 12615 2098.5, 12616 3314 12617 ], 12618 [ 12619 2089, 12620 3314.5 12621 ], 12622 [ 12623 2078.6, 12624 3316.4 12625 ], 12626 [ 12627 2076.9, 12628 3318 12629 ], 12630 [ 12631 2074, 12632 3315.9 12633 ], 12634 [ 12635 2073.1, 12636 3317.6 12637 ], 12638 [ 12639 2068.2, 12640 3320.6 12641 ], 12642 [ 12643 2065.1, 12644 3326.1 12645 ], 12646 [ 12647 2062.8, 12648 3326.7 12649 ], 12650 [ 12651 2060, 12652 3329.4 12653 ], 12654 [ 12655 2056.1, 12656 3330 12657 ], 12658 [ 12659 2050.6, 12660 3332.5 12661 ], 12662 [ 12663 2043.4, 12664 3334.4 12665 ], 12666 [ 12667 2041.2, 12668 3340.1 12669 ], 12670 [ 12671 2038.1, 12672 3343 12673 ], 12674 [ 12675 2038.3, 12676 3352.8 12677 ], 12678 [ 12679 2040.3, 12680 3353.5 12681 ], 12682 [ 12683 2048.5, 12684 3363 12685 ], 12686 [ 12687 2049.2, 12688 3368.3 12689 ], 12690 [ 12691 2052.4, 12692 3371.8 12693 ], 12694 [ 12695 2062.1, 12696 3374.2 12697 ], 12698 [ 12699 2067.8, 12700 3377.5 12701 ], 12702 [ 12703 2071.4, 12704 3380.6 12705 ], 12706 [ 12707 2076.1, 12708 3382.7 12709 ], 12710 [ 12711 2077.8, 12712 3384.8 12713 ], 12714 [ 12715 2086, 12716 3386.8 12717 ], 12718 [ 12719 2088.1, 12720 3384.2 12721 ], 12722 [ 12723 2095.7, 12724 3382.1 12725 ], 12726 [ 12727 2095.7, 12728 3385.2 12729 ], 12730 [ 12731 2099.3, 12732 3386.6 12733 ], 12734 [ 12735 2107.5, 12736 3385.9 12737 ], 12738 [
12739 2111.6, 12740 3384.7 12741 ], 12742 [ 12743 2115.5, 12744 3387.5 12745 ], 12746 [ 12747 2117.8, 12748 3386.1 12749 ] 12750 ] 12751 ] 12752 ] 12753 } 12754 }, 12755 { 12756 "type": "Feature", 12757 "id": "US.AK", 12758 "properties": { 12759 "hc-group": "admin1", 12760 "hc-middle-x": 0.53, 12761 "hc-middle-y": 0.33, 12762 "hc-key": "us-ak", 12763 "hc-a2": "AK", 12764 "labelrank": "0", 12765 "hasc": "US.AK", 12766 "woe-id": "2347560", 12767 "state-fips": "2", 12768 "fips": "US02", 12769 "postal-code": "AK", 12770 "name": "Alaska", 12771 "country": "United States of America", 12772 "region": "West", 12773 "longitude": "-151.604", 12774 "woe-name": "Alaska", 12775 "latitude": "65.3609", 12776 "woe-label": "Alaska, US, United States", 12777 "type": "State" 12778 }, 12779 "geometry": { 12780 "type": "MultiPolygon", 12781 "coordinates": [ 12782 [ 12783 [ 12784 [ 12785 322, 12786 4275 12787 ], 12788 [ 12789 321, 12790 4280 12791 ], 12792 [ 12793 339, 12794 4292 12795 ], 12796 [ 12797 360, 12798 4283 12799 ], 12800 [ 12801 392, 12802 4281 12803 ], 12804 [ 12805 424, 12806 4297 12807 ], 12808 [ 12809 443, 12810 4318 12811 ], 12812 [ 12813 478, 12814 4297 12815 ], 12816 [ 12817 476, 12818 4285 12819 ], 12820 [ 12821 459, 12822 4279 12823 ], 12824 [ 12825 461, 12826 4263 12827 ], 12828 [ 12829 472, 12830 4263 12831 ], 12832 [ 12833 490, 12834 4288 12835 ], 12836 [ 12837 507, 12838 4272 12839 ], 12840 [ 12841 503, 12842 4256 12843 ], 12844 [ 12845 519, 12846 4248 12847 ], 12848 [ 12849 528, 12850 4258 12851 ], 12852 [ 12853 548, 12854 4257 12855 ], 12856 [ 12857 582, 12858 4240 12859 ], 12860 [ 12861 564, 12862 4217 12863 ], 12864 [ 12865 594, 12866 4212 12867 ], 12868 [ 12869 584, 12870 4202 12871 ], 12872 [ 12873 611, 12874 4198 12875 ], 12876 [ 12877 655, 12878 4200 12879 ], 12880 [ 12881 684, 12882 4194 12883 ], 12884 [ 12885 704, 12886 4174 12887 ], 12888 [ 12889 712, 12890 4178 12891 ], 12892 [ 12893 723, 12894 4165 12895 ], 12896 [ 12897 746, 12898 4156 12899 ], 12900 [ 12901 788, 12902 4155 12903 ], 12904 [ 12905 808, 12906 4136 12907 ], 12908 [ 12909 832,
12910 4134 12911 ], 12912 [ 12913 851, 12914 4144 12915 ], 12916 [ 12917 877, 12918 4147 12919 ], 12920 [ 12921 901, 12922 4136 12923 ], 12924 [ 12925 913, 12926 4120 12927 ], 12928 [ 12929 929, 12930 4117 12931 ], 12932 [ 12933 943, 12934 4100 12935 ], 12936 [ 12937 957, 12938 4101 12939 ], 12940 [ 12941 989, 12942 3159 12943 ], 12944 [ 12945 1039, 12946 3148 12947 ], 12948 [ 12949 1057, 12950 3163 12951 ], 12952 [ 12953 1084, 12954 3166 12955 ], 12956 [ 12957 1081, 12958 3138 12959 ], 12960 [ 12961 1107, 12962 3121 12963 ], 12964 [ 12965 1113, 12966 3108 12967 ], 12968 [ 12969 1167, 12970 3060 12971 ], 12972 [ 12973 1180, 12974 3028 12975 ], 12976 [ 12977 1208, 12978 3055 12979 ], 12980 [ 12981 1220, 12982 3056 12983 ], 12984 [ 12985 1229, 12986 3102 12987 ], 12988 [ 12989 1271, 12990 3127 12991 ], 12992 [ 12993 1297, 12994 3104 12995 ], 12996 [ 12997 1295, 12998 3091 12999 ], 13000 [ 13001 1335, 13002 3059 13003 ], 13004 [ 13005 1347, 13006 3039 13007 ], 13008 [ 13009 1367, 13010 3031 13011 ], 13012 [ 13013 1397, 13014 3002 13015 ], 13016 [ 13017 1477, 13018 2890 13019 ], 13020 [ 13021 1491, 13022 2875 13023 ], 13024 [ 13025 1490, 13026 2858 13027 ], 13028 [ 13029 1504, 13030 2853 13031 ], 13032 [ 13033 1511, 13034 2833 13035 ], 13036 [ 13037 1523, 13038 2836 13039 ], 13040 [ 13041 1613, 13042 2802 13043 ], 13044 [ 13045 1622, 13046 2783 13047 ], 13048 [ 13049 1617, 13050 2766 13051 ], 13052 [ 13053 1636, 13054 2722 13055 ], 13056 [ 13057 1622, 13058 2680 13059 ], 13060 [ 13061 1606, 13062 2663 13063 ], 13064 [ 13065 1592, 13066 2664 13067 ], 13068 [ 13069 1577, 13070 2702 13071 ], 13072 [ 13073 1585, 13074 2718 13075 ], 13076 [ 13077 1577, 13078 2755 13079 ], 13080 [ 13081 1555, 13082 2778 13083 ], 13084 [ 13085 1526, 13086 2764 13087 ], 13088 [ 13089 1520, 13090 2723 13091 ], 13092 [ 13093 1499, 13094 2746 13095 ], 13096 [ 13097 1510, 13098 2753 13099 ], 13100 [ 13101 1513, 13102 2796 13103 ], 13104 [ 13105 1473, 13106 2829 13107 ], 13108 [ 13109 1468, 13110 2844 13111 ], 13112 [ 13113 1424, 13114 2880 13115 ], 13116 [ 13117 1406, 13118 2878 13119 ], 13120 [ 13121 1414, 13122 2903 13123 ], 13124 [ 13125 1397, 13126 2917 13127 ], 13128 [ 13129 1390, 13130 2938 13131 ], 13132 [ 13133 1366, 13134 2963 13135 ], 13136 [ 13137 1364, 13138 2998 13139 ], 13140 [ 13141 1355, 13142 2976 13143 ], 13144 [ 13145 1348, 13146 2979 13147 ], 13148 [ 13149 1354, 13150 2974 13151 ], 13152 [ 13153 1334, 13154 2977 13155 ], 13156 [ 13157 1331, 13158 2984 13159 ], 13160 [ 13161 1344, 13162 2982 13163 ], 13164 [ 13165 1324, 13166 2991 13167 ], 13168 [ 13169 1283, 13170 3075 13171 ], 13172 [ 13173 1286, 13174 3041 13175 ], 13176 [ 13177 1310, 13178 2985 13179 ], 13180 [ 13181 1307, 13182 2971 13183 ], 13184 [ 13185 1288, 13186 2985 13187 ], 13188 [ 13189 1264, 13190 2982 13191 ], 13192 [ 13193 1266, 13194 2998 13195 ], 13196 [ 13197 1249, 13198 3031 13199 ], 13200 [ 13201 1245, 13202 3018 13203 ], 13204 [ 13205 1199, 13206 3046 13207 ], 13208 [ 13209 1202, 13210 3028 13211 ], 13212 [ 13213 1224, 13214 3026 13215 ], 13216 [ 13217 1254, 13218 2995 13219 ], 13220 [ 13221 1255, 13222 2977 13223 ], 13224 [ 13225 1229, 13226 2976 13227 ], 13228 [ 13229 1225, 13230 2963 13231 ], 13232 [ 13233 1169, 13234 2999 13235 ], 13236 [ 13237 1134, 13238 3041 13239 ], 13240 [ 13241 1085, 13242 3062 13243 ], 13244 [ 13245 1050, 13246 3083 13247 ], 13248 [ 13249 1069, 13250 3102 13251 ], 13252 [ 13253 1060, 13254 3119 13255 ], 13256 [ 13257 1025, 13258 3098 13259 ], 13260 [ 13261 969, 13262 3113 13263 ], 13264 [ 13265 977, 13266 3128 13267 ], 13268 [ 13269 953, 13270 3122 13271 ], 13272 [ 13273 899, 13274 3136 13275 ], 13276 [ 13277 842, 13278 3125 13279 ], 13280 [ 13281 826, 13282 3141 13283 ], 13284 [ 13285 792, 13286 3157 13287 ], 13288 [ 13289 802, 13290 3194
13291 ], 13292 [ 13293 788, 13294 3179 13295 ], 13296 [ 13297 783, 13298 3158 13299 ], 13300 [ 13301 761, 13302 3173 13303 ], 13304 [ 13305 742, 13306 3174 13307 ], 13308 [ 13309 759, 13310 3196 13311 ], 13312 [ 13313 727, 13314 3195 13315 ], 13316 [ 13317 706, 13318 3205 13319 ], 13320 [ 13321 716, 13322 3212 13323 ], 13324 [ 13325 705, 13326 3227 13327 ], 13328 [ 13329 679, 13330 3222 13331 ], 13332 [ 13333 658, 13334 3229 13335 ], 13336 [ 13337 636, 13338 3221 13339 ], 13340 [ 13341 637, 13342 3247 13343 ], 13344 [ 13345 620, 13346 3199 13347 ], 13348 [ 13349 631, 13350 3213 13351 ], 13352 [ 13353 642, 13354 3184 13355 ], 13356 [ 13357 628, 13358 3167 13359 ], 13360 [ 13361 614, 13362 3132 13363 ], 13364 [ 13365 576, 13366 3140 13367 ], 13368 [ 13369 552, 13370 3130 13371 ], 13372 [ 13373 545, 13374 3108 13375 ], 13376 [ 13377 537, 13378 3114 13379 ], 13380 [ 13381 509, 13382 3089 13383 ], 13384 [ 13385 521, 13386 3115 13387 ], 13388 [ 13389 493, 13390 3078 13391 ], 13392 [ 13393 478, 13394 3071 13395 ], 13396 [ 13397 455, 13398 3077 13399 ], 13400 [ 13401 433, 13402 3070 13403 ], 13404 [ 13405 426, 13406 3086 13407 ], 13408 [ 13409 455, 13410 3099 13411 ], 13412 [ 13413 483, 13414 3126 13415 ], 13416 [ 13417 457, 13418 3115 13419 ], 13420 [ 13421 438, 13422 3133 13423 ], 13424 [ 13425 464, 13426 3170 13427 ], 13428 [ 13429 478, 13430 3204 13431 ], 13432 [ 13433 473, 13434 3223 13435 ], 13436 [ 13437 491, 13438 3228 13439 ], 13440 [ 13441 524, 13442 3249 13443 ], 13444 [ 13445 543, 13446 3235 13447 ], 13448 [ 13449 554, 13450 3240 13451 ], 13452 [ 13453 588, 13454 3228 13455 ], 13456 [ 13457 544, 13458 3260 13459 ], 13460 [ 13461 549, 13462 3268 13463 ], 13464 [ 13465 527, 13466 3271 13467 ], 13468 [ 13469 524, 13470 3284 13471 ], 13472 [ 13473 490, 13474 3256 13475 ], 13476 [ 13477 469, 13478 3252 13479 ], 13480 [ 13481 424, 13482 3205 13483 ], 13484 [ 13485 428, 13486 3196 13487 ], 13488 [ 13489 407, 13490 3182 13491 ], 13492 [ 13493 408,
13494 3170 13495 ], 13496 [ 13497 377, 13498 3133 13499 ], 13500 [ 13501 343, 13502 3131 13503 ], 13504 [ 13505 339, 13506 3114 13507 ], 13508 [ 13509 317, 13510 3109 13511 ], 13512 [ 13513 309, 13514 3075 13515 ], 13516 [ 13517 334, 13518 3075 13519 ], 13520 [ 13521 352, 13522 3048 13523 ], 13524 [ 13525 305, 13526 3020 13527 ], 13528 [ 13529 308, 13530 3008 13531 ], 13532 [ 13533 287, 13534 2998 13535 ], 13536 [ 13537 271, 13538 2977 13539 ], 13540 [ 13541 246, 13542 2981 13543 ], 13544 [ 13545 222, 13546 2955 13547 ], 13548 [ 13549 212, 13550 2964 13551 ], 13552 [ 13553 200, 13554 2941 13555 ], 13556 [ 13557 186, 13558 2947 13559 ], 13560 [ 13561 152, 13562 2925 13563 ], 13564 [ 13565 163, 13566 2924 13567 ], 13568 [ 13569 146, 13570 2893 13571 ], 13572 [ 13573 133, 13574 2901 13575 ], 13576 [ 13577 107, 13578 2879 13579 ], 13580 [ 13581 96, 13582 2891 13583 ], 13584 [ 13585 89, 13586 2869 13587 ], 13588 [ 13589 73, 13590 2877 13591 ], 13592 [ 13593 24, 13594 2852 13595 ], 13596 [ 13597 40, 13598 2842 13599 ], 13600 [ 13601 7, 13602 2817 13603 ], 13604 [ 13605 -44, 13606 2808 13607 ], 13608 [ 13609 -61, 13610 2821 13611 ], 13612 [ 13613 -118, 13614 2794 13615 ], 13616 [ 13617 -130, 13618 2803 13619 ], 13620 [ 13621 -155, 13622 2792 13623 ], 13624 [ 13625 -167, 13626 2799 13627 ], 13628 [ 13629 -155, 13630 2816 13631 ], 13632 [ 13633 -167, 13634 2823 13635 ], 13636 [ 13637 -200, 13638 2781 13639 ], 13640 [ 13641 -223, 13642 2772 13643 ], 13644 [ 13645 -230, 13646 2808 13647 ], 13648 [ 13649 -252, 13650 2775 13651 ], 13652 [ 13653 -262, 13654 2795 13655 ], 13656 [ 13657 -286, 13658 2772 13659 ], 13660 [ 13661 -278, 13662 2800 13663 ], 13664 [ 13665 -223, 13666 2823 13667 ], 13668 [ 13669 -171, 13670 2853 13671 ], 13672 [ 13673 -115, 13674 2850 13675 ], 13676 [ 13677 -113, 13678 2838 13679 ], 13680 [ 13681 -84, 13682 2825 13683 ], 13684 [ 13685 -99, 13686 2845 13687 ], 13688 [ 13689 -80, 13690 2870 13691 ], 13692 [ 13693 -38, 13694 2892 13695 ], 13696 [ 13697 12, 13698 2907 13699 ], 13700 [ 13701 27, 13702 2896 13703 ], 13704 [ 13705 31, 13706 2922 13707 ], 13708 [ 13709 57, 13710 2946 13711 ], 13712 [ 13713 97, 13714 2964 13715 ], 13716 [ 13717 126, 13718 3051 13719 ], 13720 [ 13721 154, 13722 3072 13723 ], 13724 [ 13725 156, 13726 3089 13727 ], 13728 [ 13729 95, 13730 3074 13731 ], 13732 [ 13733 79, 13734 3099 13735 ], 13736 [ 13737 90, 13738 3123 13739 ], 13740 [ 13741 60, 13742 3099 13743 ], 13744 [ 13745 61, 13746 3072 13747 ], 13748 [ 13749 44, 13750 3066 13751 ], 13752 [ 13753 28, 13754 3121 13755 ], 13756 [ 13757 8, 13758 3111 13759 ], 13760 [ 13761 -6, 13762 3123 13763 ], 13764 [ 13765 -7, 13766 3147 13767 ], 13768 [ 13769 -37, 13770 3132 13771 ], 13772 [ 13773 -62, 13774 3132 13775 ], 13776 [ 13777 -69, 13778 3120 13779 ], 13780 [ 13781 -112, 13782 3131 13783 ], 13784 [ 13785 -85, 13786 3135 13787 ], 13788 [ 13789 -82, 13790 3162 13791 ], 13792 [ 13793 -87, 13794 3191 13795 ], 13796 [ 13797 -63, 13798 3208 13799 ], 13800 [ 13801 -76, 13802 3277 13803 ], 13804 [ 13805 -72, 13806 3305 13807 ], 13808 [ 13809 -89, 13810 3269 13811 ], 13812 [ 13813 -149, 13814 3267 13815 ], 13816 [ 13817 -172, 13818 3278 13819 ], 13820 [ 13821 -167, 13822 3295 13823 ], 13824 [ 13825 -184, 13826 3332 13827 ], 13828 [ 13829 -198, 13830 3342 13831 ], 13832 [ 13833 -212, 13834 3370 13835 ], 13836 [ 13837 -166, 13838 3383 13839 ], 13840 [ 13841 -134, 13842 3368 13843 ], 13844 [ 13845 -125, 13846 3345 13847 ], 13848 [ 13849 -109, 13850 3358 13851 ], 13852 [ 13853 -131, 13854 3376 13855 ], 13856 [ 13857 -161, 13858 3385 13859 ], 13860 [ 13861 -185, 13862 3401 13863 ], 13864 [ 13865 -173, 13866 3407 13867 ], 13868 [ 13869 -186, 13870 3433 13871 ], 13872 [ 13873 -191, 13874 3419 13875 ], 13876 [ 13877 -205, 13878 3460 13879 ], 13880 [ 13881 -194, 13882 3469 13883 ], 13884 [ 13885 -211, 13886 3484 13887 ], 13888 [ 13889 -189, 13890 3485 13891 ], 13892 [ 13893 -198, 13894 3504 13895 ], 13896 [ 13897 -175, 13898 3498 13899 ], 13900 [ 13901 -170, 13902 3526 13903 ], 13904 [ 13905 -130, 13906 3555 13907 ], 13908 [ 13909 -118, 13910 3553 13911 ], 13912 [ 13913 -108, 13914 3582 13915 ], 13916 [ 13917 -85, 13918 3606 13919 ], 13920 [ 13921 -61, 13922 3612 13923 ], 13924 [ 13925 -46, 13926 3602 13927 ], 13928 [ 13929 -34, 13930 3577 13931 ], 13932 [ 13933 -22, 13934 3576 13935 ], 13936 [ 13937 7, 13938 3591 13939 ], 13940 [ 13941 28, 13942 3609 13943 ], 13944 [ 13945 31, 13946 3600 13947 ], 13948 [ 13949 76, 13950 3594 13951 ], 13952 [ 13953 100, 13954 3613 13955 ], 13956 [ 13957 106, 13958 3664 13959 ], 13960 [ 13961 92, 13962 3688 13963 ], 13964 [ 13965
13965 125, 13966 3701 13967 ], 13968 [ 13969 117, 13970 3734 13971 ], 13972 [ 13973 102, 13974 3721 13975 ], 13976 [ 13977 73, 13978 3725 13979 ], 13980 [ 13981 45, 13982 3711 13983 ], 13984 [ 13985 20, 13986 3709 13987 ], 13988 [ 13989 8, 13990 3729 13991 ], 13992 [ 13993 -28, 13994 3742 13995 ], 13996 [ 13997 -59, 13998 3740 13999 ], 14000 [ 14001 -101, 14002 3771 14003 ], 14004 [ 14005 -108, 14006 3789 14007 ], 14008 [ 14009 -98, 14010 3804 14011 ], 14012 [ 14013 -111, 14014 3837 14015 ], 14016 [ 14017 -95, 14018 3829 14019 ], 14020 [ 14021 -73, 14022 3837 14023 ], 14024 [ 14025 -119, 14026 3868 14027 ], 14028 [ 14029 -138, 14030 3897 14031 ], 14032 [ 14033 -124, 14034 3909 14035 ], 14036 [ 14037 -95, 14038 3914 14039 ], 14040 [ 14041 -87, 14042 3908 14043 ], 14044 [ 14045 -68, 14046 3921 14047 ], 14048 [ 14049 -2, 14050 3935 14051 ], 14052 [ 14053 36, 14054 3937 14055 ], 14056 [ 14057 67, 14058 3929 14059 ], 14060 [ 14061 47, 14062 3893 14063 ], 14064 [ 14065 52, 14066 3877 14067 ], 14068 [ 14069 111, 14070 3858 14071 ], 14072 [ 14073 119, 14074 3845 14075 ], 14076 [ 14077 140, 14078 3868 14079 ], 14080 [ 14081 162, 14082 3859 14083 ], 14084 [ 14085 147, 14086 3882 14087 ], 14088 [ 14089 128, 14090 3880 14091 ], 14092 [ 14093 135, 14094 3893 14095 ], 14096 [ 14097 119, 14098 3943 14099 ], 14100 [ 14101 132, 14102 3945 14103 ], 14104 [ 14105 139, 14106 3923 14107 ], 14108 [ 14109 133, 14110 3914 14111 ], 14112 [ 14113 145, 14114 3887 14115 ], 14116 [ 14117 163, 14118 3891 14119 ], 14120 [ 14121 175, 14122 3870 14123 ], 14124 [ 14125 196, 14126 3867 14127 ], 14128 [ 14129 201, 14130 3879 14131 ], 14132 [ 14133 179, 14134 3900 14135 ], 14136 [ 14137 152, 14138 3894 14139 ], 14140 [ 14141 142, 14142 3915 14143 ], 14144 [ 14145 154, 14146 3949 14147 ], 14148 [ 14149 129, 14150 3950 14151 ], 14152 [ 14153 86, 14154 3976 14155 ], 14156 [ 14157 89, 14158 4000 14159 ], 14160 [ 14161 86, 14162 4032 14163 ], 14164 [ 14165 55, 14166 4092 14167 ], 14168 [ 14169 40, 14170 4106 14171 ], 14172 [ 14173 27, 14174 4135 14175 ], 14176 [ 14177 45, 14178 4151 14179 ], 14180 [ 14181 57, 14182 4180 14183 ], 14184 [ 14185 76, 14186 4171 14187 ], 14188 [ 14189 124, 14190 4160 14191 ], 14192 [ 14193 156, 14194 4170 14195 ], 14196 [ 14197 182, 14198 4190 14199 ], 14200 [ 14201 189, 14202 4216 14203 ], 14204 [ 14205 201, 14206 4233 14207 ], 14208 [ 14209 224, 14210 4253 14211 ], 14212 [ 14213 229, 14214 4246 14215 ], 14216 [ 14217 253, 14218 4268 14219 ], 14220 [ 14221 256, 14222 4258 14223 ], 14224 [ 14225 287, 14226 4258 14227 ], 14228 [ 14229 317, 14230 4277 14231 ], 14232 [ 14233 322, 14234 4275 14235 ] 14236 ], 14237 [ 14238 [ 14239 322, 14240 4275 14241 ], 14242 [ 14243 323, 14244 4272 14245 ], 14246 [ 14247 323, 14248 4272 14249 ], 14250 [ 14251 323, 14252 4272 14253 ], 14254 [ 14255 311, 14256 4248 14257 ], 14258 [ 14259 326, 14260 4263
14261 ], 14262 [ 14263 323, 14264 4272 14265 ], 14266 [ 14267 323, 14268 4272 14269 ], 14270 [ 14271 323, 14272 4272 14273 ], 14274 [ 14275 324, 14276 4274 14277 ], 14278 [ 14279 322, 14280 4275 14281 ] 14282 ] 14283 ], 14284 [ 14285 [ 14286 [ 14287 -905, 14288 2721 14289 ], 14290 [ 14291 -922, 14292 2724 14293 ], 14294 [ 14295 -904, 14296 2733 14297 ], 14298 [ 14299 -898, 14300 2724 14301 ], 14302 [ 14303 -905, 14304 2721 14305 ] 14306 ] 14307 ], 14308 [ 14309 [ 14310 [ 14311 -739, 14312 2715 14313 ], 14314 [ 14315 -724, 14316 2712 14317 ], 14318 [ 14319 -729, 14320 2702 14321 ], 14322 [ 14323 -734, 14324 2709 14325 ], 14326 [ 14327 -739, 14328 2715 14329 ] 14330 ] 14331 ], 14332 [ 14333 [ 14334 [ 14335 -645, 14336 2693 14337 ], 14338 [ 14339 -651, 14340 2700 14341 ], 14342 [ 14343 -684, 14344 2693 14345 ], 14346 [ 14347 -643, 14348 2725 14349 ], 14350 [ 14351 -634, 14352 2718 14353 ], 14354 [ 14355 -623, 14356 2738 14357 ], 14358 [ 14359 -597, 14360 2740 14361 ], 14362 [ 14363 -595, 14364 2719 14365 ], 14366 [ 14367 -626, 14368 2714 14369 ], 14370 [ 14371 -645, 14372 2693 14373 ] 14374 ] 14375 ], 14376 [ 14377 [ 14378 [ 14379 -439, 14380 2748 14381 ], 14382 [ 14383 -458, 14384 2742
14385 ], 14386 [ 14387 -469, 14388 2755 14389 ], 14390 [ 14391 -457, 14392 2762 14393 ], 14394 [ 14395 -439, 14396 2748 14397 ] 14398 ] 14399 ], 14400 [ 14401 [ 14402 [ 14403 -268, 14404 2722 14405 ], 14406 [ 14407 -267, 14408 2733 14409 ], 14410 [ 14411 -255, 14412 2724 14413 ], 14414 [ 14415 -252, 14416 2715 14417 ], 14418 [ 14419 -268, 14420 2722 14421 ] 14422 ] 14423 ], 14424 [ 14425 [ 14426 [ 14427 -303, 14428 2804 14429 ], 14430 [ 14431 -293, 14432 2800 14433 ], 14434 [ 14435 -290, 14436 2768 14437 ], 14438 [ 14439 -309, 14440 2757 14441 ], 14442 [ 14443 -338, 14444 2767 14445 ], 14446 [ 14447 -359, 14448 2754 14449 ], 14450 [ 14451 -385, 14452 2761 14453 ], 14454 [ 14455 -386, 14456 2779 14457 ], 14458 [ 14459 -369, 14460 2783 14461 ], 14462 [ 14463 -354, 14464 2800 14465 ], 14466 [ 14467 -335, 14468 2796 14469 ], 14470 [ 14471 -303, 14472 2804 14473 ] 14474 ] 14475 ], 14476 [ 14477 [ 14478 [ 14479 -59, 14480 2737 14481 ], 14482 [ 14483 -58, 14484 2733 14485 ], 14486 [ 14487 -70, 14488 2740 14489 ], 14490 [ 14491 -62, 14492 2746 14493 ], 14494 [ 14495 -59, 14496 2737 14497 ] 14498 ] 14499 ], 14500 [ 14501 [ 14502 [ 14503 1485, 14504 2651 14505 ], 14506 [ 14507 1482, 14508 2635 14509 ], 14510 [ 14511 1455, 14512 2672 14513 ], 14514 [ 14515 1458, 14516 2688 14517 ], 14518 [ 14519 1473, 14520 2659 14521 ], 14522 [ 14523 1485, 14524 2651 14525 ] 14526 ] 14527 ], 14528 [ 14529 [ 14530 [ 14531 1568, 14532 2687 14533 ], 14534 [ 14535 1567, 14536 2665 14537 ], 14538 [ 14539 1547, 14540 2678 14541 ], 14542 [ 14543 1548, 14544 2705 14545 ], 14546 [ 14547 1568, 14548 2687 14549 ] 14550 ] 14551 ], 14552 [ 14553 [ 14554 [ 14555 -81, 14556 2759 14557 ], 14558 [ 14559 -83, 14560 2747 14561 ], 14562 [ 14563 -107, 14564 2735 14565 ], 14566 [ 14567 -88, 14568 2750 14569 ], 14570 [ 14571 -81, 14572 2759 14573 ] 14574 ] 14575 ], 14576 [ 14577 [ 14578 [ 14579 -100, 14580 2783 14581 ], 14582 [ 14583 -114, 14584 2781 14585 ], 14586 [ 14587 -119, 14588 2759 14589 ], 14590 [ 14591 -135, 14592 2762 14593 ], 14594 [ 14595 -131, 14596 2784 14597 ], 14598 [ 14599 -100, 14600 2783 14601 ] 14602 ] 14603 ], 14604 [ 14605 [ 14606 [ 14607 1530, 14608 2716 14609 ], 14610 [ 14611 1542, 14612 2706 14613 ], 14614 [ 14615 1538, 14616 2690 14617 ], 14618 [ 14619 1528, 14620 2711 14621 ], 14622 [ 14623 1530, 14624 2716 14625 ] 14626 ] 14627 ], 14628 [ 14629 [ 14630 [ 14631 1427, 14632 2708 14633 ], 14634 [ 14635 1429, 14636 2706 14637 ], 14638 [ 14639 1439, 14640 2711 14641 ], 14642 [ 14643 1430, 14644 2683 14645 ], 14646 [ 14647 1427, 14648 2708 14649 ] 14650 ] 14651 ], 14652 [ 14653 [ 14654 [ 14655 1439, 14656 2743 14657 ], 14658 [ 14659 1430, 14660 2731 14661 ], 14662 [ 14663 1420, 14664 2735 14665 ], 14666 [ 14667 1421, 14668 2742
14669 ], 14670 [ 14671 1439, 14672 2743 14673 ] 14674 ] 14675 ], 14676 [ 14677 [ 14678 [ 14679 1555, 14680 2775 14681 ], 14682 [ 14683 1573, 14684 2753 14685 ], 14686 [ 14687 1578, 14688 2721 14689 ], 14690 [ 14691 1569, 14692 2699 14693 ], 14694 [ 14695 1529, 14696 2721 14697 ], 14698 [ 14699 1537, 14700 2731 14701 ], 14702 [ 14703 1531, 14704 2760 14705 ], 14706 [ 14707 1555, 14708 2775 14709 ] 14710 ] 14711 ], 14712 [ 14713 [ 14714 [ 14715 1408, 14716 2747 14717 ], 14718 [ 14719 1414, 14720 2765 14721 ], 14722 [ 14723 1435, 14724 2776 14725 ], 14726 [ 14727 1437, 14728 2763 14729 ], 14730 [ 14731 1408, 14732 2747 14733 ] 14734 ] 14735 ], 14736 [ 14737 [ 14738 [ 14739 1480, 14740 2788 14741 ], 14742 [ 14743 1503, 14744 2783 14745 ], 14746 [ 14747 1494, 14748 2762 14749 ], 14750 [ 14751 1468, 14752 2778 14753 ], 14754 [ 14755 1475, 14756 2803 14757 ], 14758 [ 14759 1480, 14760 2788 14761 ] 14762 ] 14763 ], 14764 [ 14765 [ 14766 [ 14767 1467, 14768 2811 14769 ], 14770 [ 14771 1469, 14772 2795 14773 ], 14774 [ 14775 1445, 14776 2798 14777 ], 14778 [ 14779 1451, 14780 2810 14781 ], 14782 [ 14783 1467, 14784 2811 14785 ] 14786 ] 14787 ], 14788 [ 14789 [ 14790 [ 14791 1495, 14792 2807 14793 ], 14794 [ 14795 1510, 14796 2793 14797 ], 14798 [ 14799 1504, 14800 2784 14801 ], 14802 [ 14803 1485, 14804 2797 14805 ], 14806 [ 14807 1482, 14808 2819 14809 ], 14810 [ 14811 1495, 14812 2807 14813 ] 14814 ] 14815 ], 14816 [ 14817 [ 14818 [ 14819 253, 14820 2834 14821 ], 14822 [ 14823 251, 14824 2826 14825 ], 14826 [ 14827 235, 14828 2816 14829 ], 14830 [ 14831 239, 14832 2829 14833 ], 14834 [ 14835 253, 14836 2834 14837 ] 14838 ] 14839 ], 14840 [ 14841 [ 14842 [ 14843 276, 14844 2825 14845 ], 14846 [ 14847 279, 14848 2820 14849 ], 14850 [ 14851 259, 14852 2824 14853 ], 14854 [ 14855 263, 14856 2832 14857 ], 14858 [ 14859 276, 14860 2825 14861 ] 14862 ] 14863 ], 14864 [ 14865 [ 14866 [ 14867 1448, 14868 2845 14869 ], 14870 [ 14871 1470, 14872 2828 14873 ], 14874 [ 14875 1458, 14876 2816 14877 ], 14878 [ 14879 1449, 14880 2816 14881 ], 14882 [ 14883 1448, 14884 2845 14885 ] 14886 ] 14887 ], 14888 [ 14889 [ 14890 [ 14891 333, 14892 2880 14893 ], 14894 [ 14895 345, 14896 2878 14897 ], 14898 [ 14899 321, 14900 2864 14901 ], 14902 [ 14903 319, 14904 2872 14905 ], 14906 [ 14907 333, 14908 2880 14909 ] 14910 ] 14911 ], 14912 [ 14913 [ 14914 [ 14915 1295, 14916 2870 14917 ], 14918 [ 14919 1295, 14920 2846 14921 ], 14922 [ 14923 1283, 14924 2843 14925 ], 14926 [ 14927 1288, 14928 2862 14929 ], 14930 [ 14931 1295, 14932 2870 14933 ] 14934 ] 14935 ], 14936 [ 14937 [ 14938 [ 14939 1246, 14940 2943 14941 ], 14942 [ 14943 1241, 14944 2926 14945 ], 14946 [ 14947 1234, 14948 2942 14949 ], 14950 [ 14951 1237, 14952 2951 14953 ], 14954 [ 14955 1246, 14956 2943 14957 ] 14958 ] 14959 ], 14960 [ 14961 [ 14962 [ 14963 345, 14964 2973 14965 ], 14966 [ 14967 360, 14968 2960 14969 ], 14970 [ 14971 353, 14972 2961 14973 ], 14974 [ 14975 333, 14976 2971 14977 ], 14978 [ 14979 345, 14980 2973 14981 ] 14982 ] 14983 ], 14984 [ 14985 [ 14986 [ 14987 370, 14988 2989 14989 ], 14990 [ 14991 380, 14992 3007 14993 ], 14994 [ 14995 393, 14996 2992 14997 ], 14998 [ 14999 407, 15000 2995 15001 ], 15002 [ 15003 413, 15004 2978 15005 ], 15006 [ 15007 404, 15008 2970 15009 ], 15010 [ 15011 365, 15012 2959 15013 ], 15014 [ 15015 347, 15016 2974 15017 ], 15018 [ 15019 353, 15020 2990 15021 ], 15022 [ 15023 370, 15024 2989 15025 ] 15026 ] 15027 ], 15028 [ 15029 [ 15030 [ 15031 389, 15032 3006 15033 ], 15034 [ 15035 380, 15036 3014 15037 ], 15038 [ 15039 397, 15040 3021 15041 ], 15042 [ 15043 396, 15044 3012 15045 ], 15046 [ 15047 389, 15048 3006 15049 ] 15050 ] 15051 ], 15052 [ 15053 [ 15054 [ 15055 -42, 15056 3112 15057 ], 15058 [ 15059 -58, 15060 3105 15061 ], 15062 [ 15063 -53, 15064 3120 15065 ], 15066 [ 15067 -31, 15068 3126 15069 ], 15070 [ 15071 -42, 15072 3112 15073 ] 15074 ] 15075 ], 15076 [ 15077 [ 15078 [ 15079 643, 15080 3141 15081 ], 15082 [ 15083 641, 15084 3133 15085 ], 15086 [ 15087 628, 15088 3129 15089 ], 15090 [ 15091 639, 15092 3150 15093 ], 15094 [ 15095 643, 15096 3141 15097 ] 15098 ] 15099 ], 15100 [ 15101 [ 15102 [ 15103 683, 15104 3167 15105 ], 15106 [ 15107 692, 15108 3162 15109 ], 15110 [ 15111 662, 15112 3126 15113 ], 15114 [ 15115 639, 15116 3113 15117 ], 15118 [ 15119 651, 15120 3133 15121 ], 15122 [ 15123 678, 15124 3156 15125 ], 15126 [ 15127 683, 15128 3167 15129 ] 15130 ] 15131 ], 15132 [ 15133 [ 15134 [ 15135 -250, 15136 3366 15137 ], 15138 [ 15139 -233, 15140 3350 15141 ], 15142 [ 15143 -243, 15144 3328 15145 ], 15146 [ 15147 -239, 15148 3312 15149 ], 15150 [ 15151 -272, 15152 3312 15153 ], 15154 [ 15155 -294, 15156 3323 15157 ], 15158 [ 15159
15159 -315, 15160 3350 15161 ], 15162 [ 15163 -321, 15164 3371 15165 ], 15166 [ 15167 -293, 15168 3362 15169 ], 15170 [ 15171 -286, 15172 3369 15173 ], 15174 [ 15175 -250, 15176 3366 15177 ] 15178 ] 15179 ], 15180 [ 15181 [ 15182 [ 15183 712, 15184 3177 15185 ], 15186 [ 15187 732, 15188 3173 15189 ], 15190 [ 15191 708, 15192 3154 15193 ], 15194 [ 15195 714, 15196 3166 15197 ], 15198 [ 15199 712, 15200 3177 15201 ] 15202 ] 15203 ], 15204 [ 15205 [ 15206 [ 15207 655, 15208 3184 15209 ], 15210 [ 15211 659, 15212 3177 15213 ], 15214 [ 15215 651, 15216 3159 15217 ], 15218 [ 15219 646, 15220 3171 15221 ], 15222 [ 15223 655, 15224 3184 15225 ] 15226 ] 15227 ], 15228 [ 15229 [ 15230 [ 15231 -553, 15232 3496 15233 ], 15234 [ 15235 -557, 15236 3490 15237 ], 15238 [ 15239 -570, 15240 3515 15241 ], 15242 [ 15243 -566, 15244 3524 15245 ], 15246 [ 15247 -553, 15248 3496 15249 ] 15250 ] 15251 ], 15252 [ 15253 [ 15254 [ 15255 735, 15256 3177 15257 ], 15258 [ 15259 725, 15260 3175 15261 ], 15262 [ 15263 725, 15264 3181 15265 ], 15266 [ 15267 752, 15268 3187 15269 ], 15270 [ 15271 735, 15272 3177 15273 ] 15274 ] 15275 ], 15276 [ 15277 [ 15278 [ 15279 -478, 15280 2741 15281 ], 15282 [ 15283 -509,
15284 2724 15285 ], 15286 [ 15287 -476, 15288 2727 15289 ], 15290 [ 15291 -492, 15292 2716 15293 ], 15294 [ 15295 -574, 15296 2704 15297 ], 15298 [ 15299 -597, 15300 2711 15301 ], 15302 [ 15303 -551, 15304 2713 15305 ], 15306 [ 15307 -526, 15308 2758 15309 ], 15310 [ 15311 -501, 15312 2752 15313 ], 15314 [ 15315 -507, 15316 2737 15317 ], 15318 [ 15319 -487, 15320 2749 15321 ], 15322 [ 15323 -478, 15324 2741 15325 ] 15326 ] 15327 ], 15328 [ 15329 [ 15330 [ 15331 1452, 15332 2689 15333 ], 15334 [ 15335 1461, 15336 2728 15337 ], 15338 [ 15339 1438, 15340 2724 15341 ], 15342 [ 15343 1443, 15344 2751 15345 ], 15346 [ 15347 1435, 15348 2778 15349 ], 15350 [ 15351 1419, 15352 2778 15353 ], 15354 [ 15355 1414, 15356 2794 15357 ], 15358 [ 15359 1439, 15360 2796 15361 ], 15362 [ 15363 1449, 15364 2769 15365 ], 15366 [ 15367 1468, 15368 2766 15369 ], 15370 [ 15371 1516, 15372 2700 15373 ], 15374 [ 15375 1532, 15376 2652 15377 ], 15378 [ 15379 1522, 15380 2641 15381 ], 15382 [ 15383 1495, 15384 2679 15385 ], 15386 [ 15387 1475, 15388 2669 15389 ], 15390 [ 15391 1476, 15392 2693 15393 ], 15394 [ 15395 1452, 15396 2689 15397 ] 15398 ] 15399 ], 15400 [ 15401 [ 15402 [ 15403 1292, 15404 2882 15405 ], 15406 [ 15407 1302, 15408 2902 15409 ], 15410 [ 15411 1330, 15412 2883 15413 ], 15414 [ 15415 1354, 15416 2825 15417 ], 15418 [ 15419 1358, 15420 2769 15421 ], 15422 [ 15423 1323, 15424 2816 15425 ], 15426 [ 15427 1325, 15428 2832 15429 ], 15430 [ 15431 1311, 15432 2830 15433 ], 15434 [ 15435 1320, 15436 2852 15437 ], 15438 [ 15439 1308, 15440 2856 15441 ], 15442 [ 15443 1308, 15444 2872 15445 ], 15446 [ 15447 1292, 15448 2882 15449 ] 15450 ] 15451 ], 15452 [ 15453 [ 15454 [ 15455 362, 15456 2955 15457 ], 15458 [ 15459 355, 15460 2938 15461 ], 15462 [ 15463 381, 15464 2954 15465 ], 15466 [ 15467 386, 15468 2936 15469 ], 15470 [ 15471 380, 15472 2918 15473 ], 15474 [ 15475 395, 15476 2917 15477 ], 15478 [ 15479 382, 15480 2900 15481 ], 15482 [ 15483 349, 15484 2913 15485 ], 15486 [ 15487 366, 15488 2899 15489 ], 15490 [ 15491 363,
15492 2889 15493 ], 15494 [ 15495 337, 15496 2894 15497 ], 15498 [ 15499 303, 15500 2868 15501 ], 15502 [ 15503 278, 15504 2838 15505 ], 15506 [ 15507 275, 15508 2849 15509 ], 15510 [ 15511 298, 15512 2883 15513 ], 15514 [ 15515 281, 15516 2883 15517 ], 15518 [ 15519 271, 15520 2862 15521 ], 15522 [ 15523 256, 15524 2873 15525 ], 15526 [ 15527 259, 15528 2892 15529 ], 15530 [ 15531 247, 15532 2904 15533 ], 15534 [ 15535 253, 15536 2919 15537 ], 15538 [ 15539 284, 15540 2939 15541 ], 15542 [ 15543 295, 15544 2933 15545 ], 15546 [ 15547 298, 15548 2909 15549 ], 15550 [ 15551 306, 15552 2934 15553 ], 15554 [ 15555 302, 15556 2950 15557 ], 15558 [ 15559 318, 15560 2956 15561 ], 15562 [ 15563 321, 15564 2936 15565 ], 15566 [ 15567 329, 15568 2963 15569 ], 15570 [ 15571 348, 15572 2946 15573 ], 15574 [ 15575 340, 15576 2965 15577 ], 15578 [ 15579 362, 15580 2955 15581 ] 15582 ] 15583 ], 15584 [ 15585 [ 15586 [ 15587 1277, 15588 2920 15589 ], 15590 [ 15591 1294, 15592 2891 15593 ], 15594 [ 15595 1278, 15596 2884 15597 ], 15598 [ 15599 1270, 15600 2906 15601 ], 15602 [ 15603 1243, 15604 2925 15605 ], 15606 [ 15607 1247, 15608 2941 15609 ], 15610 [ 15611 1271, 15612 2972 15613 ], 15614 [ 15615 1321, 15616 2953 15617 ], 15618 [ 15619 1323, 15620 2931 15621 ], 15622 [ 15623 1299, 15624 2928 15625 ], 15626 [ 15627 1309, 15628 2919 15629 ], 15630 [ 15631 1325, 15632 2926 15633 ], 15634 [ 15635 1333, 15636 2899 15637 ], 15638 [ 15639 1320, 15640 2896 15641 ], 15642 [ 15643 1277, 15644 2920 15645 ] 15646 ] 15647 ], 15648 [ 15649 [ 15650 [ 15651 1355, 15652 2884 15653 ], 15654 [ 15655 1341, 15656 2912 15657 ], 15658 [ 15659 1326, 15660 2962 15661 ], 15662 [ 15663 1314, 15664 2989 15665 ], 15666 [ 15667 1331, 15668 2969 15669 ], 15670 [ 15671 1358, 15672 2968 15673 ], 15674 [ 15675 1379, 15676 2937 15677 ], 15678 [ 15679 1376, 15680 2926 15681 ], 15682 [ 15683 1357, 15684 2961 15685 ], 15686 [ 15687 1361, 15688 2939 15689 ], 15690 [ 15691 1379, 15692 2919 15693 ], 15694 [ 15695 1383, 15696 2888 15697 ], 15698 [ 15699 1350, 15700 2853 15701 ], 15702 [ 15703 1347, 15704 2875 15705 ], 15706 [ 15707 1355, 15708 2884 15709 ] 15710 ] 15711 ], 15712 [ 15713 [ 15714 [ 15715 -347, 15716 3767 15717 ], 15718 [ 15719 -339, 15720 3759 15721 ], 15722 [ 15723 -322, 15724 3764 15725 ], 15726 [ 15727 -307, 15728 3758 15729 ], 15730 [ 15731 -307, 15732 3734 15733 ], 15734 [ 15735 -290, 15736 3713 15737 ], 15738 [ 15739 -256, 15740 3692 15741 ], 15742 [ 15743 -266, 15744 3681 15745 ], 15746 [ 15747 -286, 15748 3692 15749 ], 15750 [ 15751 -315, 15752 3679 15753 ], 15754 [ 15755 -313, 15756 3698 15757 ], 15758 [ 15759 -337, 15760 3738 15761 ], 15762 [ 15763 -353, 15764 3750 15765 ], 15766 [ 15767 -371, 15768 3746 15769 ], 15770 [ 15771 -381, 15772 3757 15773 ], 15774 [ 15775 -379, 15776 3773 15777 ], 15778 [ 15779 -362, 15780 3796 15781 ], 15782 [ 15783 -362, 15784 3776 15785 ], 15786 [ 15787 -347, 15788 3767 15789 ] 15790 ] 15791 ], 15792 [ 15793 [ 15794 [ 15795 1402, 15796 2834 15797 ], 15798 [ 15799 1394, 15800 2792 15801 ], 15802 [ 15803 1400, 15804 2779 15805 ], 15806 [ 15807 1385, 15808 2761 15809 ], 15810 [ 15811 1377, 15812 2790 15813 ], 15814 [ 15815 1389, 15816 2804 15817 ], 15818 [ 15819 1373, 15820 2811 15821 ], 15822 [ 15823 1364, 15824 2838 15825 ], 15826 [ 15827 1379, 15828 2842 15829 ], 15830 [ 15831 1395, 15832 2828 15833 ], 15834 [ 15835 1402, 15836 2835 15837 ], 15838 [ 15839 1401, 15840 2839 15841 ], 15842 [ 15843 1383, 15844 2863 15845 ], 15846 [ 15847 1396, 15848 2866 15849 ], 15850 [ 15851 1441, 15852 2858 15853 ], 15854 [ 15855 1445, 15856 2825 15857 ], 15858 [ 15859 1422, 15860 2845 15861 ], 15862 [ 15863 1441, 15864 2817 15865 ], 15866 [ 15867 1439, 15868 2809 15869 ], 15870 [ 15871 1410, 15872 2805 15873 ], 15874 [ 15875 1402, 15876 2834 15877 ] 15878 ] 15879 ] 15880 ] 15881 } 15882 }, 15883 { 15884 "type": "Feature", 15885 "properties": { 15886 "hc-group": "__separator_lines__" 15887 }, 15888 "geometry": { 15889 "type": "MultiLineString", 15890 "coordinates": [ 15891 [ 15892 [ 15893 -707, 15894 5188 15895 ], 15896 [ 15897 3651, 15898 2950 15899 ] 15900 ], 15901 [ 15902 [ 15903 1747, 15904 2584 15905 ], 15906 [ 15907 1747, 15908 3799 15909 ] 15910 ] 15911 ] 15912 } 15913 }, 15914 { 15915 "type": "Feature", 15916 "properties": { 15917 "hc-group": "__separator_lines__" 15918 }, 15919 "geometry": { 15920 "type": "LineString", 15921 "coordinates": [ 15922 [ 15923 8896, 15924 8456 15925 ], 15926 [ 15927 9714, 15928 8505 15929 ] 15930 ] 15931 } 15932 }, 15933 { 15934 "type": "Feature", 15935 "properties": { 15936 "hc-group": "__separator_lines__" 15937 }, 15938 "geometry": { 15939 "type": "LineString", 15940 "coordinates": [ 15941 [ 15942 9206, 15943 8276 15944 ], 15945 [ 15946 9479, 15947 7947 15948 ], 15949 [ 15950 9714, 15951 7947 15952 ] 15953 ] 15954 } 15955 }, 15956 { 15957 "type": "Feature", 15958 "properties": { 15959 "hc-group": "__separator_lines__" 15960 }, 15961 "geometry": { 15962 "type": "LineString", 15963 "coordinates": [ 15964 [ 15965 9361, 15966 7991 15967 ], 15968 [ 15969 9497, 15970 7389 15971 ], 15972 [ 15973 9714, 15974 7389 15975 ] 15976 ] 15977 } 15978 }, 15979 { 15980 "type": "Feature", 15981 "properties": { 15982 "hc-group": "__separator_lines__" 15983 }, 15984 "geometry": { 15985 "type": "LineString", 15986 "coordinates": [ 15987 [ 15988 9262, 15989 7867 15990 ], 15991 [
15991 15992 9479, 15993 6831 15994 ], 15995 [ 15996 9714, 15997 6831 15998 ] 15999 ] 16000 } 16001 }, 16002 { 16003 "type": "Feature", 16004 "properties": { 16005 "hc-group": "__separator_lines__" 16006 }, 16007 "geometry": { 16008 "type": "LineString", 16009 "coordinates": [ 16010 [ 16011 9057, 16012 7780 16013 ], 16014 [ 16015 9417, 16016 6273 16017 ], 16018 [ 16019 9714, 16020 6273 16021 ] 16022 ] 16023 } 16024 }, 16025 { 16026 "type": "Feature", 16027 "properties": { 16028 "hc-group": "__separator_lines__" 16029 }, 16030 "geometry": { 16031 "type": "LineString", 16032 "coordinates": [ 16033 [ 16034 8803, 16035 7216 16036 ], 16037 [ 16038 9355, 16039 5715 16040 ], 16041 [ 16042 9714, 16043 5715 16044 ] 16045 ] 16046 } 16047 }, 16048 { 16049 "type": "Feature", 16050 "properties": { 16051 "hc-group": "__separator_lines__" 16052 }, 16053 "geometry": { 16054 "type": "LineString", 16055 "coordinates": [ 16056 [ 16057 8716, 16058 6974 16059 ], 16060 [ 16061 9293, 16062 5157 16063 ], 16064 [ 16065 9714, 16066 5157 16067 ] 16068 ] 16069 } 16070 }, 16071 { 16072 "type": "Feature", 16073 "properties": { 16074 "hc-group": "__separator_lines__" 16075 }, 16076 "geometry": { 16077 "type": "LineString", 16078 "coordinates": [ 16079 [ 16080 8660, 16081 6837 16082 ], 16083 [ 16084 9231, 16085 4599 16086 ], 16087 [ 16088 9714, 16089 4599 16090 ] 16091 ] 16092 } 16093 }, 16094 { 16095 "type": "Feature", 16096 "properties": { 16097 "hc-group": "__separator_lines__" 16098 }, 16099 "geometry": { 16100 "type": "LineString", 16101 "coordinates": [ 16102 [ 16103 8363, 16104 6937 16105 ], 16106 [ 16107 9169, 16108 4041 16109 ], 16110 [ 16111 9714, 16112 4041 16113 ] 16114 ] 16115 } 16116 }, 16117 { 16118 "type": "Feature", 16119 "id": 1, 16120 "geometry": { 16121 "type": "Polygon", 16122 "coordinates": [ 16123 [ 16124 [ 16125 -431.39460668654283, 16126 9597.877478393213 16127 ], 16128 [ 16129 -440.6155811269747, 16130 9607.981831702271 16131 ], 16132 [ 16133 -432.1657187561086, 16134 9624.44152396555 16135 ], 16136 [ 16137 -454.6844335834646, 16138 9704.767491954328 16139 ], 16140 [ 16141 -444.1371126103189, 16142 9723.285892546974 16143 ], 16144 [ 16145 -447.43332768545554, 16146 9759.894296572753 16147 ], 16148 [ 16149 -423.1194293005168, 16150 9781.016998761905 16151 ], 16152 [ 16153 -424.01948174205324, 16154 9809.157957948315 16155 ], 16156 [ 16157 -407.36364695118107, 16158 9821.36993535524 16159 ], 16160 [ 16161 -404.30403070474017, 16162 9831.493696906986 16163 ], 16164 [ 16165 -443.1450473478335, 16166 9844.635728761792 16167 ], 16168 [ 16169 -521.8837683477375, 16170 9826.045253290815 16171 ], 16172 [ 16173 -620.7981106174923, 16174 9816.980068856728 16175 ], 16176 [ 16177 -887.7841990223122,
16178 9751.089807617884 16179 ], 16180 [ 16181 -1075.9007296074278, 16182 9690.51650654704 16183 ], 16184 [ 16185 -1310.2830327374215, 16186 9604.350339352026 16187 ], 16188 [ 16189 -1500.0479991049901, 16190 9676.210418260143 16191 ], 16192 [ 16193 -2286.8646032469196, 16194 7600.16169256266 16195 ], 16196 [ 16197 -1867.5280768894154, 16198 7440.81728796998 16199 ], 16200 [ 16201 -2146.1319882075677, 16202 6706.144884135221 16203 ], 16204 [ 16205 -1756.202324018292, 16206 6558.882388851977 16207 ], 16208 [ 16209 -2008.0901924185678, 16210 5823.801442682512 16211 ], 16212 [ 16213 -1586.5352583708873, 16214 5693.096135910789 16215 ], 16216 [ 16217 -1729.99977469321, 16218 5227.881925553535 16219 ], 16220 [ 16221 -1102.3328528977424, 16222 5187.097882019317 16223 ], 16224 [ 16225 -483.8171173432668, 16226 5150.436709456397 16227 ], 16228 [ 16229 -221.02316568797585, 16230 5486.681207236709 16231 ], 16232 [ 16233 -89.04265589710792, 16234 5430.622093423803 16235 ], 16236 [ 16237 -87.15174222730161, 16238 5452.688083401813 16239 ], 16240 [ 16241 -100.80515051876318, 16242 5454.576685504382 16243 ], 16244 [ 16245 -107.26487604653744, 16246 5465.684446839006 16247 ], 16248 [ 16249 -104.63184762112326, 16250 5514.798888741277 16251 ], 16252 [ 16253 -95.03928398979849, 16254 5527.659915022501 16255 ], 16256 [ 16257 -97.11046327734005, 16258 5582.501387245476 16259 ], 16260 [ 16261 -118.23556860421013, 16262 5637.27923419609 16263 ], 16264 [ 16265 -215.33890628797667, 16266 5766.4440923565435 16267 ], 16268 [ 16269 -257.35917176390296, 16270 5771.301622134405 16271 ], 16272 [ 16273 -286.4347643910422, 16274 5790.9460551104785 16275 ], 16276 [ 16277 -289.88700779053875, 16278 5810.763792705338 16279 ], 16280 [ 16281 -279.0476472375633, 16282 5829.579262679109 16283 ], 16284 [ 16285 -291.022235492238, 16286 5869.04737499925 16287 ], 16288 [ 16289 -347.1159335914592, 16290 5872.919995159491 16291 ], 16292 [ 16293 -410.94558160048973, 16294 5917.513125856437 16295 ], 16296 [ 16297 -432.3941941105538, 16298 5941.598761612152 16299 ], 16300 [ 16301 -436.3263681793861, 16302 5970.5322303030725 16303 ], 16304 [
16305 -485.67589377134755, 16306 6022.059553727497 16307 ], 16308 [ 16309 -543.8236411416437, 16310 6034.317534022957 16311 ], 16312 [ 16313 -592.5488022043692, 16314 6065.298754284886 16315 ], 16316 [ 16317 -661.8150598731064, 16318 6076.171141017492 16319 ], 16320 [ 16321 -671.620207391652, 16322 6084.73848923436 16323 ], 16324 [ 16325 -675.3043736562197, 16326 6106.204987804236 16327 ], 16328 [ 16329 -698.6993640668594, 16330 6124.3254060151885 16331 ], 16332 [ 16333 -700.3978132894329, 16334 6136.898603314398 16335 ], 16336 [ 16337 -682.1913319898163, 16338 6164.005455594181 16339 ], 16340 [ 16341 -685.9962630274074, 16342 6179.820085585554 16343 ], 16344 [ 16345 -674.350907223155, 16346 6199.434296081794 16347 ], 16348 [ 16349 -682.3456918533425, 16350 6218.468102446361 16351 ], 16352 [ 16353 -660.0580844443107, 16354 6266.051054146411 16355 ], 16356 [ 16357 -680.5278504755295, 16358 6276.022475080784 16359 ], 16360 [ 16361 -702.1853140849826, 16362 6303.370316406081 16363 ], 16364 [ 16365 -704.8776019847207, 16366 6320.584199221349 16367 ], 16368 [ 16369 -688.4163415185326, 16370 6353.477060714877 16371 ], 16372 [ 16373 -708.6760681474688, 16374 6366.191357065475 16375 ], 16376 [ 16377 -729.7253615818554, 16378 6416.504427241975 16379 ], 16380 [ 16381 -753.6337911125754, 16382 6435.570564085444 16383 ], 16384 [ 16385 -756.3590371010991, 16386 6470.857370328935 16387 ], 16388 [ 16389 -776.203304303285, 16390 6506.233047117634 16391 ], 16392 [ 16393 -774.8118455347554, 16394 6531.957168937793 16395 ], 16396 [ 16397 -786.3415837653052, 16398 6541.326436581037 16399 ], 16400 [ 16401 -802.2171339435749, 16402 6591.801476596311 16403 ], 16404 [ 16405 -831.6902222201461, 16406 6627.690063274775 16407 ], 16408 [ 16409 -828.5185089322129, 16410 6712.851844049019 16411 ], 16412 [ 16413 -814.9169950321268, 16414 6728.763338687212 16415 ], 16416 [ 16417 -811.3944696570409, 16418 6795.2538910496005 16419 ], 16420 [ 16421 -842.5612917468384, 16422 6828.358553620263 16423 ], 16424 [ 16425 -868.0983407417865, 16426 6884.762069822542
16427 ], 16428 [ 16429 -867.6435769234272, 16430 6905.555738198727 16431 ], 16432 [ 16433 -856.1706602796739, 16434 6928.764566323287 16435 ], 16436 [ 16437 -866.4988319980405, 16438 6979.612224875388 16439 ], 16440 [ 16441 -860.9468102111744, 16442 7000.835446546904 16443 ], 16444 [ 16445 -851.4592786077737, 16446 7010.666394161395 16447 ], 16448 [ 16449 -846.6495828929543, 16450 7047.261653833892 16451 ], 16452 [ 16453 -876.6088251085692, 16454 7075.518785182303 16455 ], 16456 [ 16457 -892.6817911134759, 16458 7110.637208836906 16459 ], 16460 [ 16461 -909.059903953746, 16462 7106.242867829792 16463 ], 16464 [ 16465 -929.3312879724996, 16466 7118.887429279647 16467 ], 16468 [ 16469 -928.3672533685788, 16470 7131.12769843836 16471 ], 16472 [ 16473 -903.8519635900186, 16474 7161.421411639407 16475 ], 16476 [ 16477 -915.8934459478667, 16478 7206.198310641759 16479 ], 16480 [ 16481 -913.098573769158, 16482 7221.877062741813 16483 ], 16484 [ 16485 -920.5937447759263, 16486 7244.387003475035 16487 ], 16488 [ 16489 -945.9865475130124, 16490 7277.992818287739 16491 ], 16492 [ 16493 -959.2160693121626, 16494 7322.201346456721 16495 ], 16496 [ 16497 -996.0465338291268, 16498 7392.415823336079 16499 ], 16500 [ 16501 -995.5516691908988, 16502 7411.857776169187 16503 ], 16504 [ 16505 -979.8707886645152, 16506 7428.401333829972 16507 ], 16508 [ 16509 -981.9911772156391, 16510 7510.622989362148 16511 ], 16512 [ 16513 -965.5201830437941, 16514 7547.559414995063 16515 ], 16516 [ 16517 -955.4975878375647, 16518 7556.789931782357 16519 ], 16520 [ 16521 -949.7336748118743, 16522 7624.1119120361345 16523 ], 16524 [ 16525 -975.9231323779971, 16526 7685.618123379387 16527 ], 16528 [ 16529 -975.6504554904183, 16530 7704.769006575189 16531 ], 16532 [ 16533 -1013.1413661174322, 16534 7758.710510648403 16535 ], 16536 [ 16537 -1004.6259662950548, 16538 7792.918503640609 16539 ], 16540 [ 16541 -1017.0701170944391, 16542 7817.785819167155 16543 ], 16544 [ 16545 -917.0783940641847, 16546 7919.6182884009095 16547 ], 16548 [ 16549 -906.6268464057681, 16550 7936.911996008212 16551 ], 16552 [ 16553 -911.9515771495172, 16554 7951.726910142119 16555 ], 16556 [ 16557 -908.1340293454111, 16558 7975.252399735813 16559 ], 16560 [ 16561 -893.975037975384, 16562 7983.811905998922 16563 ], 16564 [ 16565 -879.7120103475223, 16566 8006.666890114773 16567 ], 16568 [ 16569 -890.0054998696078, 16570 8014.649765418964 16571 ], 16572 [ 16573 -890.4747811286421, 16574 8026.24510942667 16575 ], 16576 [ 16577 -879.7833845944034, 16578 8033.853864438413 16579 ], 16580 [ 16581 -867.9192838542149, 16582 8028.263243822108 16583 ], 16584 [ 16585 -862.5989590585891, 16586 8040.770172984453 16587 ], 16588 [ 16589 -857.5777639795795, 16590 8107.923828174379 16591 ], 16592 [ 16593 -883.6573780768117, 16594 8139.19184290685 16595 ], 16596 [ 16597 -888.8189579576054, 16598 8156.719822279054 16599 ], 16600 [ 16601 -878.6237444414819, 16602 8168.1209720969 16603 ], 16604 [ 16605 -857.2081637461528, 16606 8155.546492341587 16607 ], 16608 [ 16609 -852.1914004428497, 16610 8164.615818813042 16611 ], 16612 [ 16613 -850.796397662527, 16614 8189.8332436821 16615 ], 16616 [ 16617 -865.2940938606282, 16618 8218.477032963221 16619 ], 16620 [ 16621 -864.617119281602, 16622 8257.246700013016 16623 ], 16624 [ 16625 -854.1313634801485, 16626 8300.061096025485 16627 ], 16628 [ 16629 -861.5707974231333, 16630 8318.928497958004 16631 ], 16632 [ 16633 -845.5358434922791, 16634 8336.500190487515 16635 ], 16636 [ 16637 -835.1968800771908, 16638 8338.8825057884 16639 ], 16640 [ 16641 -831.2856183546405, 16642 8353.437921433448 16643 ], 16644 [ 16645 -840.2178288551346, 16646 8361.800667420515 16647 ], 16648 [ 16649 -843.3905989601675, 16650 8386.031409961648 16651 ], 16652 [ 16653 -858.5520760768378, 16654 8392.54718459717 16655 ], 16656 [ 16657 -860.8077419109297, 16658 8406.038299500875 16659 ], 16660 [ 16661 -810.0394312800622, 16662 8453.749661872998 16663 ], 16664 [ 16665 -799.5170576235756, 16666 8482.615148415776 16667 ], 16668 [ 16669 -783.1268412809748, 16670 8498.930391557415 16671 ], 16672 [ 16673 -774.4544396697482, 16674 8530.742510949993 16675 ], 16676 [ 16677 -739.7453399859451, 16678 8557.500874919295 16679 ], 16680 [ 16681 -694.5594584062779, 16682 8634.06688776102 16683 ], 16684 [ 16685 -631.281084789968, 16686 8780.041781618947 16687 ], 16688 [ 16689 -597.713114406957, 16690 8876.636491388785 16691 ], 16692 [ 16693 -540.8321695222103, 16694 8988.754256935947 16695 ], 16696 [ 16697 -543.5275034312967, 16698 9006.841775757131 16699 ], 16700 [ 16701 -533.1693658651961, 16702 9015.291663016398 16703 ], 16704 [ 16705 -531.1359143137015, 16706 9036.436851624647 16707 ], 16708 [ 16709 -518.3940068850852, 16710 9052.612619094876 16711 ], 16712 [ 16713 -503.2631924908761, 16714 9091.81085400092 16715 ], 16716 [ 16717 -508.6051269770936, 16718 9108.62221606136 16719 ], 16720 [ 16721 -494.9620090927436, 16722 9142.68852395119 16723 ], 16724 [ 16725 -497.77371826243495, 16726 9156.761049792094 16727 ], 16728 [ 16729 -475.1254537672869, 16730 9174.429969493553 16731 ], 16732 [ 16733 -473.3938673065329, 16734 9208.312981018065 16735 ], 16736 [ 16737 -484.7708824369287, 16738 9239.889199161056 16739 ], 16740 [ 16741 -465.56668503793003, 16742 9281.186373997723 16743 ], 16744 [ 16745 -443.70332101123427, 16746 9377.633798544244 16747 ], 16748 [ 16749 -447.774430720517, 16750 9409.231090103616 16751 ], 16752 [ 16753 -435.25592094667854, 16754 9444.279323822695 16755 ], 16756 [ 16757 -429.0614830395342, 16758 9493.773242889634 16759 ], 16760 [ 16761 -438.3719539915078,
16762 9508.124361304965 16763 ], 16764 [ 16765 -444.13553290239145, 16766 9551.135589675858 16767 ], 16768 [ 16769 -429.87849539174624, 16770 9563.497009612332 16771 ], 16772 [ 16773 -426.26332230715934, 16774 9597.262084717218 16775 ], 16776 [ 16777 -431.39460668654283, 16778 9597.877478393213 16779 ] 16780 ], 16781 [ 16782 [ 16783 -953.2947983119985, 16784 7058.783327054418 16785 ], 16786 [ 16787 -963.8355842062647, 16788 7074.590072593936 16789 ], 16790 [ 16791 -950.8961797115664, 16792 7086.901026638281 16793 ], 16794 [ 16795 -928.2595481874529, 16796 7065.172536280137 16797 ], 16798 [ 16799 -923.1759969088047, 16800 7043.393642485613 16801 ], 16802 [ 16803 -942.2243925616392, 16804 7036.440609721911 16805 ], 16806 [ 16807 -953.2947983119985, 16808 7058.783327054418 16809 ] 16810 ] 16811 ] 16812 }, 16813 "properties": { 16814 "OBJECTID": 1, 16815 "Shape_Length": 5982094.041632586, 16816 "Shape_Area": 1006407069768.2091, 16817 "hc-group": "admin1", 16818 "hc-middle-x": 0.4, 16819 "hc-middle-y": 0.6, 16820 "hc-key": "us-pac", 16821 "hc-a2": "PAC", 16822 "labelrank": 0, 16823 "hasc": "US.PAC", 16824 "woe-id": null, 16825 "state-fips": "57", 16826 "fips": "US57", 16827 "postal-code": "PAC", 16828 "name": "Pacific", 16829 "country": "United States of America", 16830 "region": "Offshore", 16831 "longitude": "27.598", 16832 "woe-name": "Pacific", 16833 "latitude": "-87.278", 16834 "woe-label": "Pacific, US, United States", 16835 "type": "Outer continental shelf" 16836 } 16837 }, 16838 { 16839 "type": "Feature", 16840 "id": 2, 16841 "geometry": { 16842 "type": "Polygon", 16843 "coordinates": [ 16844 [ 16845 [ 16846 6668.528740612335, 16847 4399.13514953443 16848 ], 16849 [ 16850 6473.698080008123, 16851 4348.186501040629 16852 ], 16853 [ 16854 6471.188269154653, 16855 4375.082092170734 16856 ], 16857 [ 16858 6366.818195225449, 16859 4352.014322634332 16860 ], 16861 [ 16862 6352.2718375295235, 16863 4341.878955124926 16864 ], 16865 [ 16866 6327.277552052732, 16867 4354.294227766652 16868 ], 16869 [ 16870 6261.225183704388, 16871 4335.116765393234 16872 ], 16873 [ 16874 6168.970174061459, 16875 4338.872278959552 16876 ], 16877 [ 16878 6164.746534689774, 16879 4335.947141124015 16880 ], 16881 [ 16882 6194.962939616588, 16883 4280.5947127956815 16884 ], 16885 [ 16886 6194.794717870986, 16887 4241.118673052649 16888 ], 16889 [ 16890 6167.917987907847, 16891 4187.003567800797 16892 ], 16893 [ 16894 6118.988252532131, 16895 4135.2022198718505 16896 ], 16897 [ 16898 6138.408851384316, 16899 4100.999247739669 16900 ], 16901 [ 16902 6174.326466072599, 16903 4088.3814461270067 16904 ], 16905 [ 16906 6176.431522810325, 16907 4061.279844235297 16908 ], 16909 [ 16910 6159.241451950027, 16911 4047.494744651519 16912 ], 16913 [ 16914 6156.707149755028, 16915 4032.2395097297567 16916 ], 16917 [ 16918 6135.213478083508, 16919 4003.947198822031 16920 ], 16921 [ 16922 6120.420662483835, 16923 4002.9594174606536 16924 ], 16925 [ 16926 6106.409075339836, 16927 4017.6541202422904 16928 ], 16929 [ 16930 6096.252375904599, 16931 4014.504188900072 16932 ], 16933 [ 16934 6065.294360129784, 16935 3979.69514264607 16936 ], 16937 [ 16938 6048.88137240087, 16939 3990.843453670708 16940 ], 16941 [ 16942 6050.191842431038, 16943 4045.394793319181 16944 ], 16945 [ 16946 6039.357507498028, 16947 4060.882210309843 16948 ], 16949 [ 16950 6017.202994116495, 16951 4067.0704298188803 16952 ], 16953 [ 16954 5919.863355722484, 16955 4043.570831129404 16956 ], 16957 [ 16958 5892.8162535167085, 16959 4020.3664694585486 16960 ], 16961 [ 16962 5851.305448869641, 16963 4004.6189392952774 16964 ], 16965 [ 16966 5833.40929039544, 16967 4001.1997699014237 16968 ], 16969 [ 16970 5802.586706627786, 16971 4009.7217102678087 16972 ], 16973 [ 16974 5757.751205831271, 16975 3995.0107210927254 16976 ], 16977 [ 16978 5717.786266467275, 16979 3993.706506968603 16980 ], 16981 [ 16982 5694.247046882968, 16983 4005.8671916584544 16984 ], 16985 [ 16986 5703.385373379039, 16987 4026.94339571229 16988 ], 16989 [ 16990 5629.967505665924, 16991 4042.272557580225 16992 ], 16993 [ 16994 5598.326740065706, 16995 4069.029208615353 16996 ], 16997 [ 16998 5546.1288049321165, 16999 4085.6069156371404 17000 ], 17001 [ 17002 5530.526053537295, 17003 4080.95290590028 17004 ], 17005 [ 17006 5515.25383722577, 17007 4089.5691077250403 17008 ], 17009 [ 17010 5492.829770931074, 17011 4079.709544338896 17012 ], 17013 [ 17014 5483.945857229031, 17015 4094.333608962678 17016 ], 17017 [ 17018 5444.748982245178, 17019 4121.920927110479 17020 ], 17021 [ 17022 5397.244276711627, 17023 4106.878801774202 17024 ], 17025 [ 17026 5320.266668381475, 17027 4115.903501772598 17028 ], 17029 [ 17030 5180.655491293043, 17031 4163.271002119214 17032 ], 17033 [ 17034 5155.673435168704, 17035 4154.469471073616 17036 ], 17037 [ 17038 5121.984476208567, 17039 4159.477744382939 17040 ], 17041 [ 17042 5059.077418885706, 17043 4147.115258589922 17044 ], 17045 [ 17046 5046.874025498146, 17047 4125.234876409756 17048 ], 17049 [ 17050 5051.101592303405, 17051 4109.6001490796125 17052 ], 17053 [ 17054 5002.683889829824,
17055 4106.28167338201 17056 ], 17057 [ 17058 4872.699111437158, 17059 4045.5025069478515 17060 ], 17061 [ 17062 4857.101318700174, 17063 4017.0061376077074 17064 ], 17065 [ 17066 4783.425502868857, 17067 3963.5631290147094 17068 ], 17069 [ 17070 4731.226396337749, 17071 3914.484039399853 17072 ], 17073 [ 17074 4500.3537592024195, 17075 3785.7571674796845 17076 ], 17077 [ 17078 4471.806554168761, 17079 3754.8929945218824 17080 ], 17081 [ 17082 4393.990255040401, 17083 3706.7050782582746 17084 ], 17085 [ 17086 4341.427232236291, 17087 3652.3667251621446 17088 ], 17089 [ 17090 4278.4076867070235, 17091 3539.951239553092 17092 ], 17093 [ 17094 4259.137732298282, 17095 3457.8208477518674 17096 ], 17097 [ 17098 4261.931997866028, 17099 3404.9713286818233 17100 ], 17101 [ 17102 4299.072558833664, 17103 3263.0241907816962 17104 ], 17105 [ 17106 4310.5407672715955, 17107 3164.7681084068217 17108 ], 17109 [ 17110 4351.692683098751, 17111 3174.519613483698 17112 ], 17113 [ 17114 5157.566986917168, 17115 3179.1076854449 17116 ], 17117 [ 17118 5267.36605041153,
17119 3123.816575514672 17120 ], 17121 [ 17122 5283.321974046757, 17123 3097.303433110059 17124 ], 17125 [ 17126 5590.374710063424, 17127 3093.5075388488967 17128 ], 17129 [ 17130 5867.383392961449, 17131 3153.351434415452 17132 ], 17133 [ 17134 6374.847749953844, 17135 3168.210677810157 17136 ], 17137 [ 17138 6698.368280029002, 17139 3171.38817561782 17140 ], 17141 [ 17142 6709.446559608788, 17143 3145.794639427326 17144 ], 17145 [ 17146 6827.004294563974, 17147 3079.464651043032 17148 ], 17149 [ 17150 7041.5619985589965, 17151 2977.1474297666464 17152 ], 17153 [ 17154 7286.507410455037, 17155 2882.7450857738486 17156 ], 17157 [ 17158 7483.689808991754, 17159 2827.082330788925 17160 ], 17161 [ 17162 7671.624749235569, 17163 2813.413146729554 17164 ], 17165 [ 17166 7732.8049431025465, 17167 2820.039545685713 17168 ], 17169 [ 17170 7707.853203844617, 17171 2993.210312865608 17172 ], 17173 [ 17174 7686.885997988651, 17175 3005.093061718826 17176 ], 17177 [ 17178 7676.516088005612, 17179 3026.8303805505157 17180 ], 17181 [ 17182 7680.185255792894, 17183 3050.1332121642145 17184 ], 17185 [ 17186 7697.4033540232795, 17187 3069.680737066912 17188 ], 17189 [ 17190 7754.065408994355, 17191 3085.398056961182 17192 ], 17193 [ 17194 7782.423771788628, 17195 3066.7564029382693 17196 ], 17197 [ 17198 7786.647190921614, 17199 3033.124265327444 17200 ], 17201 [ 17202 7865.904329884384, 17203 3044.992115431887 17204 ], 17205 [ 17206 7870.438502533159, 17207 3065.7556951149754 17208 ], 17209 [ 17210 7887.106492629, 17211 3087.572113449897 17212 ], 17213 [ 17214 7908.2323537001685, 17215 3095.7444953219374 17216 ], 17217 [ 17218 7932.414991248979, 17219 3092.6032584775694 17220 ], 17221 [ 17222 7961.098964514118, 17223 3106.2422829838897 17224 ], 17225 [ 17226 8054.7810486032195, 17227 3178.0932667060633 17228 ], 17229 [ 17230 8138.559811070114, 17231 3175.394961580945 17232 ], 17233 [ 17234 8081.7911821704165, 17235 3237.1123598957583 17236 ], 17237 [ 17238 8075.295355177894, 17239 3292.3018839047163 17240 ], 17241 [ 17242 8053.719949826231, 17243 3322.139055168389 17244 ], 17245 [ 17246 8015.603699493962, 17247 3357.236621395514 17248 ], 17249 [ 17250 7991.275317225754, 17251 3366.8551802510538 17252 ], 17253 [ 17254 7955.167738677334, 17255 3362.8770880092197 17256 ], 17257 [ 17258 7923.970788568711, 17259 3390.2965981220786 17260 ], 17261 [ 17262 7893.5062330934215, 17263 3444.4890160791974 17264 ], 17265 [ 17266 7874.2688322183, 17267 3503.501036742169 17268 ], 17269 [ 17270 7835.90265980133, 17271 3498.4861356098536 17272 ], 17273 [ 17274 7795.7337446531255, 17275 3520.8210007707075 17276 ], 17277 [ 17278 7761.005482329232, 17279 3581.140009907971 17280 ], 17281 [ 17282 7752.173003285428, 17283 3612.575462795233 17284 ], 17285 [ 17286 7683.640305310861, 17287 3707.3330729396357 17288 ], 17289 [ 17290 7616.899020923145, 17291 3784.629707354933 17292 ], 17293 [ 17294 7605.548130681231, 17295 3810.459406816206 17296 ], 17297 [ 17298 7606.418776283115, 17299 3837.0338002324606 17300 ], 17301 [ 17302 7584.642368369667, 17303 3858.96350860232 17304 ], 17305 [ 17306 7574.675942255757, 17307 3883.8967780983066 17308 ], 17309 [ 17310 7575.11718931332, 17311 3917.6033545106975 17312 ], 17313 [ 17314 7561.593859623108, 17315 3979.2240400963374 17316 ], 17317 [ 17318 7568.358017884908, 17319 3999.562336505517 17320 ], 17321 [ 17322 7585.093847134862, 17323 4013.4076774779087 17324 ], 17325 [ 17326 7590.16375839972, 17327 4071.9620033849806 17328 ], 17329 [ 17330 7563.679224485433, 17331 4118.849416241304 17332 ], 17333 [ 17334 7551.065536969218,
17335 4169.650774822875 17336 ], 17337 [ 17338 7517.036920629516, 17339 4160.5392465395535 17340 ], 17341 [ 17342 7490.4489841769155, 17343 4170.856484958728 17344 ], 17345 [ 17346 7471.6308088375135, 17347 4209.232247150907 17348 ], 17349 [ 17350 7454.197074146514, 17351 4221.3781307671425 17352 ], 17353 [ 17354 7444.9636824851805, 17355 4241.532111804843 17356 ], 17357 [ 17358 7399.355942634702, 17359 4267.5336270348935 17360 ], 17361 [ 17362 7384.013599316322, 17363 4305.0257206620845 17364 ], 17365 [ 17366 7353.075356891137, 17367 4322.085124231527 17368 ], 17369 [ 17370 7330.790929914085, 17371 4357.894022007624 17372 ], 17373 [ 17374 7261.349613241502, 17375 4388.155814185521 17376 ], 17377 [ 17378 7240.300969313606, 17379 4380.412733182642 17380 ], 17381 [ 17382 7236.867807483743, 17383 4356.155168691259 17384 ], 17385 [ 17386 7223.411735827405, 17387 4337.886274534706 17388 ], 17389 [ 17390 7187.435350747762, 17391 4327.496066198074 17392 ], 17393 [ 17394 7175.204132619111, 17395 4308.829949948344 17396 ], 17397 [ 17398 7090.368985845181, 17399 4243.455404934584 17400 ], 17401 [ 17402 7046.349142354049, 17403 4228.51838370363 17404 ], 17405 [ 17406 7003.645733652024, 17407 4246.113465546573 17408 ], 17409 [ 17410 6980.863481282022, 17411 4238.446423949961 17412 ], 17413 [ 17414 6957.951247695248, 17415 4245.031195913824 17416 ], 17417 [ 17418 6935.67773286476, 17419 4270.4570557899615 17420 ], 17421 [ 17422 6919.007287741392, 17423 4318.862569296021 17424 ], 17425 [ 17426 6821.989739051448, 17427 4375.845463916967 17428 ], 17429 [ 17430 6741.280887788226, 17431 4398.254621836253 17432 ], 17433 [ 17434 6668.528740612335, 17435 4399.13514953443 17436 ] 17437 ] 17438 ] 17439 }, 17440 "properties": { 17441 "OBJECTID": 2, 17442 "Shape_Length": 4429389.06692539, 17443 "Shape_Area": 664710028696.2069, 17444 "hc-group": "admin1", 17445 "hc-middle-x": 0.5, 17446 "hc-middle-y": 0.5, 17447 "hc-key": "us-gom", 17448 "hc-a2": "GOM", 17449 "labelrank": 0, 17450 "hasc": "US.GOM", 17451 "woe-id": null, 17452 "state-fips": "77", 17453 "fips": "US77", 17454 "postal-code": "GOM", 17455 "name": "Gulf of Mexico", 17456 "country": "United States of America", 17457 "region": "Offshore", 17458 "longitude": "27.598", 17459 "woe-name": "Gulf of Mexico", 17460 "latitude": "-87.278", 17461 "woe-label": "Gulf of Mexico, US, United States", 17462 "type": "Outer continental shelf" 17463 } 17464 } 17465 ] 17466} 17467},{}],19:[function(require,module,exports){ 17468'use strict'; 17469 17470var ES5ToInteger = require('../5/ToInteger'); 17471 17472var ToNumber = require('./ToNumber'); 17473 17474// https://262.ecma-international.org/6.0/#sec-tointeger 17475 17476module.exports = function ToInteger(value) { 17477 var number = ToNumber(value); 17478 return ES5ToInteger(number); 17479}; 17480 17481},{"../5/ToInteger":53,"./ToNumber":20}],20:[function(require,module,exports){ 17482'use strict'; 17483 17484var GetIntrinsic = require('get-intrinsic'); 17485 17486var $TypeError = require('es-errors/type'); 17487var $Number = GetIntrinsic('%Number%'); 17488var $RegExp = GetIntrinsic('%RegExp%'); 17489var $parseInteger = GetIntrinsic('%parseInt%'); 17490 17491var callBound = require('call-bind/callBound'); 17492var regexTester = require('safe-regex-test'); 17493var isPrimitive = require('../helpers/isPrimitive'); 17494 17495var $strSlice = callBound('String.prototype.slice'); 17496var isBinary = regexTester(/^0b[01]+$/i); 17497var isOctal = regexTester(/^0o[0-7]+$/i); 17498var isInvalidHexLiteral = regexTester(/^[-+]0x[0-9a-f]+$/i); 17499var nonWS = ['\u0085', '\u200b', '\ufffe'].join(''); 17500var nonWSregex = new $RegExp('[' + nonWS + ']', 'g'); 17501var hasNonWS = regexTester(nonWSregex); 17502 17503var $trim = require('string.prototype.trim'); 17504 17505var ToPrimitive = require('./ToPrimitive'); 17506 17507// https://262.ecma-international.org/6.0/#sec-tonumber 17508 17509module.exports = function ToNumber(argument) { 17510 var value = isPrimitive(argument) ? argument : ToPrimitive(argument, $Number); 17511 if (typeof value === 'symbol') { 17512 throw new $TypeError('Cannot convert a Symbol value to a number'); 17513 } 17514 if (typeof value === 'string') { 17515 if (isBinary(value)) { 17516 return ToNumber($parseInteger($strSlice(value, 2), 2)); 17517 } else if (isOctal(value)) { 17518 return ToNumber($parseInteger($strSlice(value, 2), 8)); 17519 } else if (hasNonWS(value) || isInvalidHexLiteral(value)) { 17520 return NaN; 17521 } 17522 var trimmed = $trim(value); 17523 if (trimmed !== value) { 17524 return ToNumber(trimmed); 17525 } 17526 17527 } 17528 return $Number(value); 17529}; 17530 17531},{"../helpers/isPrimitive":66,"./ToPrimitive":22,"call-bind/callBound":13,"es-errors/type":77,"get-intrinsic":101,"safe-regex-test":141,"string.prototype.trim":153}],21:[function(require,module,exports){ 17532'use strict'; 17533 17534// https://262.ecma-international.org/6.0/#sec-toobject 17535 17536module.exports = require('es-object-atoms/ToObject'); 17537 17538},{"es-object-atoms/ToObject":80}],22:[function(require,module,exports){ 17539'use strict'; 17540 17541var toPrimitive = require('es-to-primitive/es2015'); 17542 17543// https://262.ecma-international.org/6.0/#sec-toprimitive 17544 17545module.exports = function ToPrimitive(input) { 17546 if (arguments.length > 1) { 17547 return toPrimitive(input, arguments[1]); 17548 } 17549 return toPrimitive(input); 17550}; 17551 17552},{"es-to-primitive/es2015":82}],23:[function(require,module,exports){ 17553'use strict'; 17554 17555var GetIntrinsic = require('get-intrinsic'); 17556 17557var $String = GetIntrinsic('%String%'); 17558var $TypeError = require('es-errors/type'); 17559 17560// https://262.ecma-international.org/6.0/#sec-tostring 17561 17562module.exports = function ToString(argument) { 17563 if (typeof argument === 'symbol') { 17564 throw new $TypeError('Cannot convert a Symbol value to a string'); 17565 } 17566 return $String(argument); 17567}; 17568 17569},{"es-errors/type":77,"get-intrinsic":101}
17569],24:[function(require,module,exports){ 17570'use strict'; 17571 17572var GetIntrinsic = require('get-intrinsic'); 17573var callBound = require('call-bind/callBound'); 17574 17575var $TypeError = require('es-errors/type'); 17576 17577var IsArray = require('./IsArray'); 17578 17579var $apply = GetIntrinsic('%Reflect.apply%', true) || callBound('Function.prototype.apply'); 17580 17581// https://262.ecma-international.org/6.0/#sec-call 17582 17583module.exports = function Call(F, V) { 17584 var argumentsList = arguments.length > 2 ? arguments[2] : []; 17585 if (!IsArray(argumentsList)) { 17586 throw new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List'); 17587 } 17588 return $apply(F, V, argumentsList); 17589}; 17590 17591},{"./IsArray":30,"call-bind/callBound":13,"es-errors/type":77,"get-intrinsic":101}],25:[function(require,module,exports){ 17592'use strict'; 17593 17594var $TypeError = require('es-errors/type'); 17595 17596var IsPropertyKey = require('./IsPropertyKey'); 17597var OrdinaryDefineOwnProperty = require('./OrdinaryDefineOwnProperty'); 17598var Type = require('./Type'); 17599 17600// https://262.ecma-international.org/6.0/#sec-createdataproperty 17601 17602module.exports = function CreateDataProperty(O, P, V) { 17603 if (Type(O) !== 'Object') { 17604 throw new $TypeError('Assertion failed: Type(O) is not Object'); 17605 } 17606 if (!IsPropertyKey(P)) { 17607 throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true'); 17608 } 17609 var newDesc = { 17610 '[[Configurable]]': true, 17611 '[[Enumerable]]': true, 17612 '[[Value]]': V, 17613 '[[Writable]]': true 17614 }; 17615 return OrdinaryDefineOwnProperty(O, P, newDesc); 17616}; 17617 17618},{"./IsPropertyKey":35,"./OrdinaryDefineOwnProperty":37,"./Type":49,"es-errors/type":77}],26:[function(require,module,exports){ 17619'use strict'; 17620 17621var $TypeError = require('es-errors/type'); 17622 17623var isPropertyDescriptor = require('../helpers/records/property-descriptor'); 17624var fromPropertyDescriptor = require('../helpers/fromPropertyDescriptor'); 17625 17626// https://262.ecma-international.org/6.0/#sec-frompropertydescriptor 17627 17628module.exports = function FromPropertyDescriptor(Desc) { 17629 if (typeof Desc !== 'undefined' && !isPropertyDescriptor(Desc)) { 17630 throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor'); 17631 } 17632 17633 return fromPropertyDescriptor(Desc); 17634}; 17635 17636},{"../helpers/fromPropertyDescriptor":62,"../helpers/records/property-descriptor":68,"es-errors/type":77}],27:[function(require,module,exports){ 17637'use strict'; 17638 17639var $TypeError = require('es-errors/type'); 17640 17641var inspect = require('object-inspect'); 17642 17643var IsPropertyKey = require('./IsPropertyKey'); 17644var Type = require('./Type'); 17645 17646// https://262.ecma-international.org/6.0/#sec-get-o-p 17647 17648module.exports = function Get(O, P) { 17649 // 7.3.1.1 17650 if (Type(O) !== 'Object') { 17651 throw new $TypeError('Assertion failed: Type(O) is not Object'); 17652 } 17653 // 7.3.1.2 17654 if (!IsPropertyKey(P)) { 17655 throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true, got ' + inspect(P)); 17656 } 17657 // 7.3.1.3 17658 return O[P]; 17659}; 17660 17661},{"./IsPropertyKey":35,"./Type":49,"es-errors/type":77,"object-inspect":121}],28:[function(require,module,exports){ 17662'use strict'; 17663 17664var $TypeError = require('es-errors/type'); 17665 17666var IsPropertyKey = require('./IsPropertyKey'); 17667var Type = require('./Type'); 17668 17669// https://262.ecma-international.org/6.0/#sec-hasproperty 17670 17671module.exports = function HasProperty(O, P) { 17672 if (Type(O) !== 'Object') { 17673 throw new $TypeError('Assertion failed: `O` must be an Object'); 17674 } 17675 if (!IsPropertyKey(P)) { 17676 throw new $TypeError('Assertion failed: `P` must be a Property Key'); 17677 } 17678 return P in O; 17679}; 17680 17681},{"./IsPropertyKey":35,"./Type":49,"es-errors/type":77}],29:[function(require,module,exports){ 17682'use strict'; 17683 17684var $TypeError = require('es-errors/type'); 17685 17686var hasOwn = require('hasown'); 17687 17688var isPropertyDescriptor = require('../helpers/records/property-descriptor'); 17689 17690// https://262.ecma-international.org/5.1/#sec-8.10.1 17691 17692module.exports = function IsAccessorDescriptor(Desc) { 17693 if (typeof Desc === 'undefined') { 17694 return false; 17695 } 17696 17697 if (!isPropertyDescriptor(Desc)) { 17698 throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor'); 17699 } 17700 17701 if (!hasOwn(Desc, '[[Get]]') && !hasOwn(Desc, '[[Set]]')) { 17702 return false; 17703 } 17704 17705 return true; 17706}; 17707 17708},{"../helpers/records/property-descriptor":68,"es-errors/type":77,"hasown":108}],30:[function(require,module,exports){ 17709'use strict'; 17710 17711// https://262.ecma-international.org/6.0/#sec-isarray 17712module.exports = require('../helpers/IsArray'); 17713 17714},{"../helpers/IsArray":60}],31:[function(require,module,exports){ 17715'use strict'; 17716 17717// http://262.ecma-international.org/5.1/#sec-9.11 17718 17719module.exports = require('is-callable'); 17720 17721},{"is-callable":115}],32:[function(require,module,exports){ 17722'use strict'; 17723 17724var $TypeError = require('es-errors/type'); 17725 17726var hasOwn = require('hasown'); 17727 17728var isPropertyDescriptor = require('../helpers/records/property-descriptor'); 17729 17730// https://262.ecma-international.org/5.1/#sec-8.10.2 17731 17732module.exports = function IsDataDescriptor(Desc) { 17733 if (typeof Desc === 'undefined') { 17734 return false;
17735 } 17736 17737 if (!isPropertyDescriptor(Desc)) { 17738 throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor'); 17739 } 17740 17741 if (!hasOwn(Desc, '[[Value]]') && !hasOwn(Desc, '[[Writable]]')) { 17742 return false; 17743 } 17744 17745 return true; 17746}; 17747 17748},{"../helpers/records/property-descriptor":68,"es-errors/type":77,"hasown":108}],33:[function(require,module,exports){ 17749'use strict'; 17750 17751var GetIntrinsic = require('get-intrinsic'); 17752 17753var $preventExtensions = GetIntrinsic('%Object.preventExtensions%', true); 17754var $isExtensible = GetIntrinsic('%Object.isExtensible%', true); 17755 17756var isPrimitive = require('../helpers/isPrimitive'); 17757 17758// https://262.ecma-international.org/6.0/#sec-isextensible-o 17759 17760module.exports = $preventExtensions 17761 ? function IsExtensible(obj) { 17762 return !isPrimitive(obj) && $isExtensible(obj); 17763 } 17764 : function IsExtensible(obj) { 17765 return !isPrimitive(obj); 17766 }; 17767 17768},{"../helpers/isPrimitive":66,"get-intrinsic":101}],34:[function(require,module,exports){ 17769'use strict'; 17770 17771var $TypeError = require('es-errors/type'); 17772 17773var IsAccessorDescriptor = require('./IsAccessorDescriptor'); 17774var IsDataDescriptor = require('./IsDataDescriptor'); 17775 17776var isPropertyDescriptor = require('../helpers/records/property-descriptor'); 17777 17778// https://262.ecma-international.org/6.0/#sec-isgenericdescriptor 17779 17780module.exports = function IsGenericDescriptor(Desc) { 17781 if (typeof Desc === 'undefined') { 17782 return false; 17783 } 17784 17785 if (!isPropertyDescriptor(Desc)) { 17786 throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor'); 17787 } 17788 17789 if (!IsAccessorDescriptor(Desc) && !IsDataDescriptor(Desc)) { 17790 return true; 17791 } 17792 17793 return false; 17794}; 17795 17796},{"../helpers/records/property-descriptor":68,"./IsAccessorDescriptor":29,"./IsDataDescriptor":32,"es-errors/type":77}],35:[function(require,module,exports){ 17797'use strict'; 17798 17799// https://262.ecma-international.org/6.0/#sec-ispropertykey 17800 17801module.exports = function IsPropertyKey(argument) { 17802 return typeof argument === 'string' || typeof argument === 'symbol'; 17803}; 17804 17805},{}],36:[function(require,module,exports){ 17806'use strict'; 17807 17808var $TypeError = require('es-errors/type'); 17809 17810var Get = require('./Get'); 17811var ToLength = require('./ToLength'); 17812var Type = require('./Type'); 17813 17814// https://262.ecma-international.org/11.0/#sec-lengthofarraylike 17815 17816module.exports = function LengthOfArrayLike(obj) { 17817 if (Type(obj) !== 'Object') { 17818 throw new $TypeError('Assertion failed: `obj` must be an Object'); 17819 } 17820 return ToLength(Get(obj, 'length')); 17821}; 17822 17823// TODO: use this all over 17824 17825},{"./Get":27,"./ToLength":44,"./Type":49,"es-errors/type":77}],37:[function(require,module,exports){ 17826'use strict'; 17827 17828var $gOPD = require('gopd'); 17829var $SyntaxError = require('es-errors/syntax'); 17830var $TypeError = require('es-errors/type'); 17831 17832var isPropertyDescriptor = require('../helpers/records/property-descriptor'); 17833 17834var IsAccessorDescriptor = require('./IsAccessorDescriptor'); 17835var IsExtensible = require('./IsExtensible'); 17836var IsPropertyKey = require('./IsPropertyKey'); 17837var ToPropertyDescriptor = require('./ToPropertyDescriptor'); 17838var SameValue = require('./SameValue'); 17839var Type = require('./Type'); 17840var ValidateAndApplyPropertyDescriptor = require('./ValidateAndApplyPropertyDescriptor'); 17841 17842// https://262.ecma-international.org/6.0/#sec-ordinarydefineownproperty 17843 17844module.exports = function OrdinaryDefineOwnProperty(O, P, Desc) { 17845 if (Type(O) !== 'Object') { 17846 throw new $TypeError('Assertion failed: O must be an Object'); 17847 } 17848 if (!IsPropertyKey(P)) { 17849 throw new $TypeError('Assertion failed: P must be a Property Key'); 17850 } 17851 if (!isPropertyDescriptor(Desc)) { 17852 throw new $TypeError('Assertion failed: Desc must be a Property Descriptor'); 17853 } 17854 if (!$gOPD) { 17855 // ES3/IE 8 fallback 17856 if (IsAccessorDescriptor(Desc)) { 17857 throw new $SyntaxError('This environment does not support accessor property descriptors.'); 17858 } 17859 var creatingNormalDataProperty = !(P in O) 17860 && Desc['[[Writable]]'] 17861 && Desc['[[Enumerable]]'] 17862 && Desc['[[Configurable]]'] 17863 && '[[Value]]' in Desc; 17864 var settingExistingDataProperty = (P in O) 17865 && (!('[[Configurable]]' in Desc) || Desc['[[Configurable]]']) 17866 && (!('[[Enumerable]]' in Desc) || Desc['[[Enumerable]]']) 17867 && (!('[[Writable]]' in Desc) || Desc['[[Writable]]']) 17868 && '[[Value]]' in Desc; 17869 if (creatingNormalDataProperty || settingExistingDataProperty) { 17870 O[P] = Desc['[[Value]]']; // eslint-disable-line no-param-reassign 17871 return SameValue(O[P], Desc['[[Value]]']); 17872 } 17873 throw new $SyntaxError('This environment does not support defining non-writable, non-enumerable, or non-configurable properties'); 17874 } 17875 var desc = $gOPD(O, P); 17876 var current = desc && ToPropertyDescriptor(desc); 17877 var extensible = IsExtensible(O); 17878 return ValidateAndApplyPropertyDescriptor(O, P, extensible, Desc, current); 17879}; 17880 17881},{"../helpers/records/property-descriptor":68,"./IsAccessorDescriptor":29,"./IsExtensible":33,"./IsPropertyKey":35,"./SameValue":39,"./ToPropertyDescriptor":47,"./Type":49,"./ValidateAndApplyPropertyDescriptor":50,"es-errors/syntax":76,"es-errors/type":77,"gopd":102}],38:[function(require,module,exports){ 17882'use strict'; 17883 17884module.exports = require('es-object-atoms/RequireObjectCoercible'); 17885 17886},{"es-object-atoms/RequireObjectCoercible":79}],39:[function(require,module,exports){ 17887'use strict'; 17888 17889var $isNaN = require('../helpers/isNaN'); 17890 17891// http://262.ecma-international.org/5.1/#sec-9.12 17892 17893module.exports = function SameValue(x, y) { 17894 if (x === y) { // 0 === -0, but they are not identical. 17895 if (x === 0) { return 1 / x === 1 / y; } 17896 return true; 17897 } 17898 return $isNaN(x) && $isNaN(y); 17899}; 17900 17901},{"../helpers/isNaN":65}],40:[function(require,module,exports){ 17902'use strict'; 17903 17904var $isNaN = require('../helpers/isNaN'); 17905 17906// https://262.ecma-international.org/6.0/#sec-samevaluezero 17907 17908module.exports = function SameValueZero(x, y) { 17909 return (x === y) || ($isNaN(x) && $isNaN(y)); 17910}; 17911 17912},{"../helpers/isNaN":65}],41:[function(require,module,exports){ 17913'use strict'; 17914 17915var GetIntrinsic = require('get-intrinsic'); 17916 17917var $Number = GetIntrinsic('%Number%'); 17918var $RegExp = GetIntrinsic('%RegExp%'); 17919var $TypeError = require('es-errors/type'); 17920var $parseInteger = GetIntrinsic('%parseInt%'); 17921 17922var callBound = require('call-bind/callBound'); 17923var regexTester = require('safe-regex-test'); 17924 17925var $strSlice = callBound('String.prototype.slice'); 17926var isBinary = regexTester(/^0b[01]+$/i); 17927var isOctal = regexTester(/^0o[0-7]+$/i); 17928var isInvalidHexLiteral = regexTester(/^[-+]0x[0-9a-f]+$/i); 17929var nonWS = ['\u0085', '\u200b', '\ufffe'].join(''); 17930var nonWSregex = new $RegExp('[' + nonWS + ']', 'g'); 17931var hasNonWS = regexTester(nonWSregex); 17932 17933var $trim = require('string.prototype.trim'); 17934 17935// https://262.ecma-international.org/13.0/#sec-stringtonumber 17936 17937module.exports = function StringToNumber(argument) { 17938 if (typeof argument !== 'string') { 17939 throw new $TypeError('Assertion failed: `argument` is not a String'); 17940 } 17941 if (isBinary(argument)) { 17942 return $Number($parseInteger($strSlice(argument, 2), 2)); 17943 } 17944 if (isOctal(argument)) { 17945 return $Number($parseInteger($strSlice(argument, 2), 8)); 17946 } 17947 if (hasNonWS(argument) || isInvalidHexLiteral(argument)) { 17948 return NaN; 17949 } 17950 var trimmed = $trim(argument); 17951 if (trimmed !== argument) { 17952 return StringToNumber(trimmed); 17953 } 17954 return $Number(argument); 17955}; 17956 17957},{"call-bind/callBound":13,"es-errors/type":77,"get-intrinsic":101,"safe-regex-test":141,"string.prototype.trim":153}],42:[function(require,module,exports){ 17958'use strict'; 17959 17960// http://262.ecma-international.org/5.1/#sec-9.2 17961 17962module.exports = function ToBoolean(value) { return !!value; }; 17963 17964},{}],43:[function(require,module,exports){ 17965'use strict'; 17966 17967var ToNumber = require('./ToNumber'); 17968var truncate = require('./truncate'); 17969 17970var $isNaN = require('../helpers/isNaN'); 17971var $isFinite = require('../helpers/isFinite'); 17972 17973// https://262.ecma-international.org/14.0/#sec-tointegerorinfinity 17974 17975module.exports = function ToIntegerOrInfinity(value) { 17976 var number = ToNumber(value); 17977 if ($isNaN(number) || number === 0) { return 0; } 17978 if (!$isFinite(number)) { return number; } 17979 return truncate(number); 17980}; 17981 17982},{"../helpers/isFinite":63,"../helpers/isNaN":65,"./ToNumber":45,"./truncate":52}],44:[function(require,module,exports){ 17983'use strict'; 17984 17985var MAX_SAFE_INTEGER = require('../helpers/maxSafeInteger'); 17986 17987var ToIntegerOrInfinity = require('./ToIntegerOrInfinity'); 17988 17989module.exports = function ToLength(argument) { 17990 var len = ToIntegerOrInfinity(argument); 17991 if (len <= 0) { return 0; }
17991 // includes converting -0 to +0 17992 if (len > MAX_SAFE_INTEGER) { return MAX_SAFE_INTEGER; } 17993 return len; 17994}; 17995 17996},{"../helpers/maxSafeInteger":67,"./ToIntegerOrInfinity":43}],45:[function(require,module,exports){ 17997'use strict'; 17998 17999var GetIntrinsic = require('get-intrinsic'); 18000 18001var $TypeError = require('es-errors/type'); 18002var $Number = GetIntrinsic('%Number%'); 18003var isPrimitive = require('../helpers/isPrimitive'); 18004 18005var ToPrimitive = require('./ToPrimitive'); 18006var StringToNumber = require('./StringToNumber'); 18007 18008// https://262.ecma-international.org/13.0/#sec-tonumber 18009 18010module.exports = function ToNumber(argument) { 18011 var value = isPrimitive(argument) ? argument : ToPrimitive(argument, $Number); 18012 if (typeof value === 'symbol') { 18013 throw new $TypeError('Cannot convert a Symbol value to a number'); 18014 } 18015 if (typeof value === 'bigint') { 18016 throw new $TypeError('Conversion from \'BigInt\' to \'number\' is not allowed.'); 18017 } 18018 if (typeof value === 'string') { 18019 return StringToNumber(value); 18020 } 18021 return $Number(value); 18022}; 18023 18024},{"../helpers/isPrimitive":66,"./StringToNumber":41,"./ToPrimitive":46,"es-errors/type":77,"get-intrinsic":101}],46:[function(require,module,exports){ 18025arguments[4][22][0].apply(exports,arguments) 18026},{"dup":22,"es-to-primitive/es2015":82}],47:[function(require,module,exports){ 18027'use strict'; 18028 18029var hasOwn = require('hasown'); 18030 18031var $TypeError = require('es-errors/type'); 18032 18033var Type = require('./Type'); 18034var ToBoolean = require('./ToBoolean'); 18035var IsCallable = require('./IsCallable'); 18036 18037// https://262.ecma-international.org/5.1/#sec-8.10.5 18038 18039module.exports = function ToPropertyDescriptor(Obj) { 18040 if (Type(Obj) !== 'Object') { 18041 throw new $TypeError('ToPropertyDescriptor requires an object'); 18042 } 18043 18044 var desc = {}; 18045 if (hasOwn(Obj, 'enumerable')) { 18046 desc['[[Enumerable]]'] = ToBoolean(Obj.enumerable); 18047 } 18048 if (hasOwn(Obj, 'configurable')) { 18049 desc['[[Configurable]]'] = ToBoolean(Obj.configurable); 18050 } 18051 if (hasOwn(Obj, 'value')) { 18052 desc['[[Value]]'] = Obj.value; 18053 } 18054 if (hasOwn(Obj, 'writable')) { 18055 desc['[[Writable]]'] = ToBoolean(Obj.writable); 18056 } 18057 if (hasOwn(Obj, 'get')) { 18058 var getter = Obj.get; 18059 if (typeof getter !== 'undefined' && !IsCallable(getter)) { 18060 throw new $TypeError('getter must be a function'); 18061 } 18062 desc['[[Get]]'] = getter; 18063 } 18064 if (hasOwn(Obj, 'set')) { 18065 var setter = Obj.set; 18066 if (typeof setter !== 'undefined' && !IsCallable(setter)) { 18067 throw new $TypeError('setter must be a function'); 18068 } 18069 desc['[[Set]]'] = setter; 18070 } 18071 18072 if ((hasOwn(desc, '[[Get]]') || hasOwn(desc, '[[Set]]')) && (hasOwn(desc, '[[Value]]') || hasOwn(desc, '[[Writable]]'))) { 18073 throw new $TypeError('Invalid property descriptor. Cannot both specify accessors and a value or writable attribute'); 18074 } 18075 return desc; 18076}; 18077 18078},{"./IsCallable":31,"./ToBoolean":42,"./Type":49,"es-errors/type":77,"hasown":108}],48:[function(require,module,exports){ 18079arguments[4][23][0].apply(exports,arguments) 18080},{"dup":23,"es-errors/type":77,"get-intrinsic":101}],49:[function(require,module,exports){ 18081'use strict'; 18082 18083var ES5Type = require('../5/Type'); 18084 18085// https://262.ecma-international.org/11.0/#sec-ecmascript-data-types-and-values 18086 18087module.exports = function Type(x) { 18088 if (typeof x === 'symbol') { 18089 return 'Symbol'; 18090 } 18091 if (typeof x === 'bigint') { 18092 return 'BigInt'; 18093 } 18094 return ES5Type(x); 18095}; 18096 18097},{"../5/Type":56}],50:[function(require,module,exports){ 18098'use strict'; 18099 18100var $TypeError = require('es-errors/type'); 18101 18102var DefineOwnProperty = require('../helpers/DefineOwnProperty'); 18103var isFullyPopulatedPropertyDescriptor = require('../helpers/isFullyPopulatedPropertyDescriptor'); 18104var isPropertyDescriptor = require('../helpers/records/property-descriptor'); 18105 18106var FromPropertyDescriptor = require('./FromPropertyDescriptor'); 18107var IsAccessorDescriptor = require('./IsAccessorDescriptor'); 18108var IsDataDescriptor = require('./IsDataDescriptor'); 18109var IsGenericDescriptor = require('./IsGenericDescriptor'); 18110var IsPropertyKey = require('./IsPropertyKey'); 18111var SameValue = require('./SameValue'); 18112var Type = require('./Type'); 18113 18114// https://262.ecma-international.org/13.0/#sec-validateandapplypropertydescriptor 18115 18116// see https://github.com/tc39/ecma262/pull/2468 for ES2022 changes 18117 18118// eslint-disable-next-line max-lines-per-function, max-statements 18119module.exports = function ValidateAndApplyPropertyDescriptor(O, P, extensible, Desc, current) { 18120 var oType = Type(O); 18121 if (oType !== 'Undefined' && oType !== 'Object') { 18122 throw new $TypeError('Assertion failed: O must be undefined or an Object'); 18123 } 18124 if (!IsPropertyKey(P)) { 18125 throw new $TypeError('Assertion failed: P must be a Property Key'); 18126 } 18127 if (typeof extensible !== 'boolean') { 18128 throw new $TypeError('Assertion failed: extensible must be a Boolean'); 18129 } 18130 if (!isPropertyDescriptor(Desc)) { 18131 throw new $TypeError('Assertion failed: Desc must be a Property Descriptor'); 18132 } 18133 if (typeof current !== 'undefined' && !isPropertyDescriptor(current)) { 18134 throw new $TypeError('Assertion failed: current must be a Property Descriptor, or undefined'); 18135 } 18136 18137 if (typeof current === 'undefined') { // step 2 18138 if (!extensible) { 18139 return false; // step 2.a 18140 } 18141 if (oType === 'Undefined') { 18142 return true; // step 2.b 18143 } 18144 if (IsAccessorDescriptor(Desc)) { // step 2.c 18145 return DefineOwnProperty( 18146 IsDataDescriptor, 18147 SameValue, 18148 FromPropertyDescriptor, 18149 O, 18150 P, 18151 Desc 18152 ); 18153 } 18154 // step 2.d 18155 return DefineOwnProperty( 18156 IsDataDescriptor, 18157 SameValue, 18158 FromPropertyDescriptor, 18159 O, 18160 P, 18161 {
18162 '[[Configurable]]': !!Desc['[[Configurable]]'], 18163 '[[Enumerable]]': !!Desc['[[Enumerable]]'], 18164 '[[Value]]': Desc['[[Value]]'], 18165 '[[Writable]]': !!Desc['[[Writable]]'] 18166 } 18167 ); 18168 } 18169 18170 // 3. Assert: current is a fully populated Property Descriptor. 18171 if ( 18172 !isFullyPopulatedPropertyDescriptor( 18173 { 18174 IsAccessorDescriptor: IsAccessorDescriptor, 18175 IsDataDescriptor: IsDataDescriptor 18176 }, 18177 current 18178 ) 18179 ) { 18180 throw new $TypeError('`current`, when present, must be a fully populated and valid Property Descriptor'); 18181 } 18182 18183 // 4. If every field in Desc is absent, return true. 18184 // this can't really match the assertion that it's a Property Descriptor in our JS implementation 18185 18186 // 5. If current.[[Configurable]] is false, then 18187 if (!current['[[Configurable]]']) { 18188 if ('[[Configurable]]' in Desc && Desc['[[Configurable]]']) { 18189 // step 5.a 18190 return false; 18191 } 18192 if ('[[Enumerable]]' in Desc && !SameValue(Desc['[[Enumerable]]'], current['[[Enumerable]]'])) { 18193 // step 5.b 18194 return false; 18195 } 18196 if (!IsGenericDescriptor(Desc) && !SameValue(IsAccessorDescriptor(Desc), IsAccessorDescriptor(current))) { 18197 // step 5.c 18198 return false; 18199 } 18200 if (IsAccessorDescriptor(current)) { // step 5.d 18201 if ('[[Get]]' in Desc && !SameValue(Desc['[[Get]]'], current['[[Get]]'])) { 18202 return false; 18203 } 18204 if ('[[Set]]' in Desc && !SameValue(Desc['[[Set]]'], current['[[Set]]'])) { 18205 return false; 18206 } 18207 } else if (!current['[[Writable]]']) { // step 5.e 18208 if ('[[Writable]]' in Desc && Desc['[[Writable]]']) { 18209 return false; 18210 } 18211 if ('[[Value]]' in Desc && !SameValue(Desc['[[Value]]'], current['[[Value]]'])) { 18212 return false; 18213 } 18214 } 18215 } 18216 18217 // 6. If O is not undefined, then 18218 if (oType !== 'Undefined') { 18219 var configurable; 18220 var enumerable; 18221 if (IsDataDescriptor(current) && IsAccessorDescriptor(Desc)) { // step 6.a 18222 configurable = ('[[Configurable]]' in Desc ? Desc : current)['[[Configurable]]']; 18223 enumerable = ('[[Enumerable]]' in Desc ? Desc : current)['[[Enumerable]]']; 18224 // Replace the property named P of object O with an accessor property having [[Configurable]] and [[Enumerable]] attributes as described by current and each other attribute set to its default value. 18225 return DefineOwnProperty( 18226 IsDataDescriptor, 18227 SameValue, 18228 FromPropertyDescriptor, 18229 O, 18230 P, 18231 { 18232 '[[Configurable]]': !!configurable, 18233 '[[Enumerable]]': !!enumerable, 18234 '[[Get]]': ('[[Get]]' in Desc ? Desc : current)['[[Get]]'], 18235 '[[Set]]': ('[[Set]]' in Desc ? Desc : current)['[[Set]]'] 18236 } 18237 ); 18238 } else if (IsAccessorDescriptor(current) && IsDataDescriptor(Desc)) { 18239 configurable = ('[[Configurable]]' in Desc ? Desc : current)['[[Configurable]]']; 18240 enumerable = ('[[Enumerable]]' in Desc ? Desc : current)['[[Enumerable]]']; 18241 // i. Replace the property named P of object O with a data property having [[Configurable]] and [[Enumerable]] attributes as described by current and each other attribute set to its default value. 18242 return DefineOwnProperty( 18243 IsDataDescriptor, 18244 SameValue, 18245 FromPropertyDescriptor, 18246 O, 18247 P, 18248 { 18249 '[[Configurable]]': !!configurable, 18250 '[[Enumerable]]': !!enumerable, 18251 '[[Value]]': ('[[Value]]' in Desc ? Desc : current)['[[Value]]'], 18252 '[[Writable]]': !!('[[Writable]]' in Desc ? Desc : current)['[[Writable]]'] 18253 } 18254 ); 18255 } 18256 18257 // For each field of Desc that is present, set the corresponding attribute of the property named P of object O to the value of the field. 18258 return DefineOwnProperty( 18259 IsDataDescriptor, 18260 SameValue, 18261 FromPropertyDescriptor, 18262 O, 18263 P, 18264 Desc 18265 ); 18266 } 18267 18268 return true; // step 7 18269}; 18270 18271},{"../helpers/DefineOwnProperty":59,"../helpers/isFullyPopulatedPropertyDescriptor":64,"../helpers/records/property-descriptor":68,"./FromPropertyDescriptor":26,"./IsAccessorDescriptor":29,"./IsDataDescriptor":32,"./IsGenericDescriptor":34,"./IsPropertyKey":35,"./SameValue":39,"./Type":49,"es-errors/type":77}],51:[function(require,module,exports){ 18272'use strict'; 18273 18274// var modulo = require('./modulo'); 18275var $floor = Math.floor; 18276 18277// http://262.ecma-international.org/11.0/#eqn-floor 18278 18279module.exports = function floor(x) { 18280 // return x - modulo(x, 1); 18281 if (typeof x === 'bigint') { 18282 return x; 18283 } 18284 return $floor(x); 18285}; 18286 18287},{}],52:[function(require,module,exports){ 18288'use strict'; 18289 18290var floor = require('./floor'); 18291 18292var $TypeError = require('es-errors/type'); 18293 18294// https://262.ecma-international.org/14.0/#eqn-truncate 18295 18296module.exports = function truncate(x) { 18297 if (typeof x !== 'number' && typeof x !== 'bigint') { 18298 throw new $TypeError('argument must be a Number or a BigInt'); 18299 } 18300 var result = x < 0 ? -floor(-x) : floor(x); 18301 return result === 0 ? 0 : result; // in the spec, these are math values, so we filter out -0 here 18302}; 18303 18304},{"./floor":51,"es-errors/type":77}],53:[function(require,module,exports){ 18305'use strict'; 18306 18307var abs = require('./abs'); 18308var floor = require('./floor'); 18309var ToNumber = require('./ToNumber'); 18310 18311var $isNaN = require('../helpers/isNaN'); 18312var $isFinite = require('../helpers/isFinite'); 18313var $sign = require('../helpers/sign'); 18314 18315// http://262.ecma-international.org/5.1/#sec-9.4 18316 18317module.exports = function ToInteger(value) { 18318 var number = ToNumber(value); 18319 if ($isNaN(number)) { return 0; } 18320 if (number === 0 || !$isFinite(number)) { return number; } 18321 return $sign(number) * floor(abs(number)); 18322}; 18323 18324},{"../helpers/isFinite":63,"../helpers/isNaN":65,"../helpers/sign":69,"./ToNumber":54,"./abs":57,"./floor":58}],54:[function(require,module,exports){ 18325'use strict'; 18326 18327var ToPrimitive = require('./ToPrimitive'); 18328 18329var callBound = require('call-bind/callBound'); 18330 18331var $replace = callBound('String.prototype.replace'); 18332 18333var safeRegexTester = require('safe-regex-test'); 18334 18335var isNonDecimal = safeRegexTester(/^0[ob]|^[+-]0x/); 18336 18337// http://262.ecma-international.org/5.1/#sec-9.3 18338 18339module.exports = function ToNumber(value) { 18340 var prim = ToPrimitive(value, Number); 18341 if (typeof prim !== 'string') { 18342 return +prim; // eslint-disable-line no-implicit-coercion 18343 } 18344 18345 var trimmed = $replace( 18346 prim, 18347 // eslint-disable-next-line no-control-regex 18348 /^[ \t\x0b\f\xa0\ufeff\n\r\u2028\u2029\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u0085]+|[ \t\x0b\f\xa0\ufeff\n\r\u2028\u2029\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u0085]+$/g, 18349 '' 18350 ); 18351 if (isNonDecimal(trimmed)) { 18352 return NaN; 18353 } 18354 18355 return +trimmed; // eslint-disable-line no-implicit-coercion 18356}; 18357 18358},{"./ToPrimitive":55,"call-bind/callBound":13,"safe-regex-test":141}],55:[function(require,module,exports){ 18359'use strict'; 18360 18361// http://262.ecma-international.org/5.1/#sec-9.1 18362 18363module.exports = require('es-to-primitive/es5'); 18364 18365},{"es-to-primitive/es5":83}],56:[function(require,module,exports){ 18366'use strict'; 18367 18368// https://262.ecma-international.org/5.1/#sec-8 18369 18370module.exports = function Type(x) { 18371 if (x === null) { 18372 return 'Null'; 18373 }
18374 if (typeof x === 'undefined') { 18375 return 'Undefined'; 18376 } 18377 if (typeof x === 'function' || typeof x === 'object') { 18378 return 'Object'; 18379 } 18380 if (typeof x === 'number') { 18381 return 'Number'; 18382 } 18383 if (typeof x === 'boolean') { 18384 return 'Boolean'; 18385 } 18386 if (typeof x === 'string') { 18387 return 'String'; 18388 } 18389}; 18390 18391},{}],57:[function(require,module,exports){ 18392'use strict'; 18393 18394var GetIntrinsic = require('get-intrinsic'); 18395 18396var $abs = GetIntrinsic('%Math.abs%'); 18397 18398// http://262.ecma-international.org/5.1/#sec-5.2 18399 18400module.exports = function abs(x) { 18401 return $abs(x); 18402}; 18403 18404},{"get-intrinsic":101}],58:[function(require,module,exports){ 18405'use strict'; 18406 18407// var modulo = require('./modulo'); 18408var $floor = Math.floor; 18409 18410// http://262.ecma-international.org/5.1/#sec-5.2 18411 18412module.exports = function floor(x) { 18413 // return x - modulo(x, 1); 18414 return $floor(x); 18415}; 18416 18417},{}],59:[function(require,module,exports){ 18418'use strict'; 18419 18420var hasPropertyDescriptors = require('has-property-descriptors'); 18421 18422var $defineProperty = require('es-define-property'); 18423 18424var hasArrayLengthDefineBug = hasPropertyDescriptors.hasArrayLengthDefineBug(); 18425 18426// eslint-disable-next-line global-require 18427var isArray = hasArrayLengthDefineBug && require('../helpers/IsArray'); 18428 18429var callBound = require('call-bind/callBound'); 18430 18431var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable'); 18432 18433// eslint-disable-next-line max-params 18434module.exports = function DefineOwnProperty(IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, desc) { 18435 if (!$defineProperty) { 18436 if (!IsDataDescriptor(desc)) { 18437 // ES3 does not support getters/setters 18438 return false; 18439 } 18440 if (!desc['[[Configurable]]'] || !desc['[[Writable]]']) { 18441 return false; 18442 } 18443 18444 // fallback for ES3 18445 if (P in O && $isEnumerable(O, P) !== !!desc['[[Enumerable]]']) { 18446 // a non-enumerable existing property 18447 return false; 18448 } 18449 18450 // property does not exist at all, or exists but is enumerable 18451 var V = desc['[[Value]]']; 18452 // eslint-disable-next-line no-param-reassign 18453 O[P] = V; // will use [[Define]] 18454 return SameValue(O[P], V); 18455 } 18456 if ( 18457 hasArrayLengthDefineBug 18458 && P === 'length' 18459 && '[[Value]]' in desc 18460 && isArray(O) 18461 && O.length !== desc['[[Value]]'] 18462 ) { 18463 // eslint-disable-next-line no-param-reassign 18464 O.length = desc['[[Value]]']; 18465 return O.length === desc['[[Value]]']; 18466 } 18467 18468 $defineProperty(O, P, FromPropertyDescriptor(desc)); 18469 return true; 18470}; 18471 18472},{"../helpers/IsArray":60,"call-bind/callBound":13,"es-define-property":71,"has-property-descriptors":103}],60:[function(require,module,exports){ 18473'use strict'; 18474 18475var GetIntrinsic = require('get-intrinsic'); 18476 18477var $Array = GetIntrinsic('%Array%'); 18478 18479// eslint-disable-next-line global-require 18480var toStr = !$Array.isArray && require('call-bind/callBound')('Object.prototype.toString'); 18481 18482module.exports = $Array.isArray || function IsArray(argument) { 18483 return toStr(argument) === '[object Array]'; 18484}; 18485 18486},{"call-bind/callBound":13,"get-intrinsic":101}],61:[function(require,module,exports){ 18487'use strict'; 18488 18489// TODO; semver-major: remove 18490 18491module.exports = require('call-bind'); 18492 18493},{"call-bind":14}],62:[function(require,module,exports){ 18494'use strict'; 18495 18496module.exports = function fromPropertyDescriptor(Desc) { 18497 if (typeof Desc === 'undefined') { 18498 return Desc; 18499 } 18500 var obj = {}; 18501 if ('[[Value]]' in Desc) { 18502 obj.value = Desc['[[Value]]']; 18503 } 18504 if ('[[Writable]]' in Desc) { 18505 obj.writable = !!Desc['[[Writable]]']; 18506 } 18507 if ('[[Get]]' in Desc) { 18508 obj.get = Desc['[[Get]]']; 18509 } 18510 if ('[[Set]]' in Desc) { 18511 obj.set = Desc['[[Set]]']; 18512 } 18513 if ('[[Enumerable]]' in Desc) { 18514 obj.enumerable = !!Desc['[[Enumerable]]']; 18515 } 18516 if ('[[Configurable]]' in Desc) { 18517 obj.configurable = !!Desc['[[Configurable]]']; 18518 } 18519 return obj; 18520}; 18521 18522},{}],63:[function(require,module,exports){ 18523'use strict'; 18524 18525var $isNaN = require('./isNaN'); 18526 18527module.exports = function (x) { return (typeof x === 'number' || typeof x === 'bigint') && !$isNaN(x) && x !== Infinity && x !== -Infinity; }; 18528 18529},{"./isNaN":65}],64:[function(require,module,exports){ 18530'use strict'; 18531 18532var isPropertyDescriptor = require('./records/property-descriptor'); 18533 18534module.exports = function isFullyPopulatedPropertyDescriptor(ES, Desc) { 18535 return isPropertyDescriptor(Desc) 18536 && typeof Desc === 'object' 18537 && '[[Enumerable]]' in Desc 18538 && '[[Configurable]]' in Desc 18539 && (ES.IsAccessorDescriptor(Desc) || ES.IsDataDescriptor(Desc)); 18540}; 18541 18542},{"./records/property-descriptor":68}],65:[function(require,module,exports){ 18543'use strict'; 18544 18545module.exports = Number.isNaN || function isNaN(a) { 18546 return a !== a; 18547}; 18548 18549},{}],66:[function(require,module,exports){ 18550'use strict'; 18551 18552module.exports = function isPrimitive(value) { 18553 return value === null || (typeof value !== 'function' && typeof value !== 'object'); 18554}; 18555 18556},{}],67:[function(require,module,exports){ 18557'use strict'; 18558 18559module.exports = Number.MAX_SAFE_INTEGER || 9007199254740991; // Math.pow(2, 53) - 1; 18560 18561},{}],68:[function(require,module,exports){ 18562'use strict'; 18563 18564var $TypeError = require('es-errors/type'); 18565 18566var hasOwn = require('hasown'); 18567 18568var allowed = { 18569 __proto__: null, 18570 '[[Configurable]]': true, 18571 '[[Enumerable]]': true, 18572 '[[Get]]': true, 18573 '[[Set]]': true, 18574 '[[Value]]': true, 18575 '[[Writable]]': true 18576}; 18577 18578// https://262.ecma-international.org/6.0/#sec-property-descriptor-specification-type 18579 18580module.exports = function isPropertyDescriptor(Desc) { 18581 if (!Desc || typeof Desc !== 'object') { 18582 return false;
18583 } 18584 18585 for (var key in Desc) { // eslint-disable-line 18586 if (hasOwn(Desc, key) && !allowed[key]) { 18587 return false; 18588 } 18589 } 18590 18591 var isData = hasOwn(Desc, '[[Value]]') || hasOwn(Desc, '[[Writable]]'); 18592 var IsAccessor = hasOwn(Desc, '[[Get]]') || hasOwn(Desc, '[[Set]]'); 18593 if (isData && IsAccessor) { 18594 throw new $TypeError('Property Descriptors may not be both accessor and data descriptors'); 18595 } 18596 return true; 18597}; 18598 18599},{"es-errors/type":77,"hasown":108}],69:[function(require,module,exports){ 18600'use strict'; 18601 18602module.exports = function sign(number) { 18603 return number >= 0 ? 1 : -1; 18604}; 18605 18606},{}],70:[function(require,module,exports){ 18607module.exports = function properlyBoxed(method) { 18608 // Check node 0.6.21 bug where third parameter is not boxed 18609 var properlyBoxesNonStrict = true; 18610 var properlyBoxesStrict = true; 18611 var threwException = false; 18612 if (typeof method === 'function') { 18613 try { 18614 // eslint-disable-next-line max-params 18615 method.call('f', function (_, __, O) { 18616 if (typeof O !== 'object') { 18617 properlyBoxesNonStrict = false; 18618 } 18619 }); 18620 18621 method.call( 18622 [null], 18623 function () { 18624 'use strict'; 18625 18626 properlyBoxesStrict = typeof this === 'string'; // eslint-disable-line no-invalid-this 18627 }, 18628 'x' 18629 ); 18630 } catch (e) { 18631 threwException = true; 18632 } 18633 return !threwException && properlyBoxesNonStrict && properlyBoxesStrict; 18634 } 18635 return false; 18636}; 18637 18638},{}],71:[function(require,module,exports){ 18639'use strict'; 18640 18641var GetIntrinsic = require('get-intrinsic'); 18642 18643/** @type {import('.')} */ 18644var $defineProperty = GetIntrinsic('%Object.defineProperty%', true) || false; 18645if ($defineProperty) { 18646 try { 18647 $defineProperty({}, 'a', { value: 1 }); 18648 } catch (e) { 18649 // IE 8 has a broken defineProperty 18650 $defineProperty = false; 18651 } 18652} 18653 18654module.exports = $defineProperty; 18655 18656},{"get-intrinsic":101}],72:[function(require,module,exports){ 18657'use strict'; 18658 18659/** @type {import('./eval')} */ 18660module.exports = EvalError; 18661 18662},{}],73:[function(require,module,exports){ 18663'use strict'; 18664 18665/** @type {import('.')} */ 18666module.exports = Error; 18667 18668},{}],74:[function(require,module,exports){ 18669'use strict'; 18670 18671/** @type {import('./range')} */ 18672module.exports = RangeError; 18673 18674},{}],75:[function(require,module,exports){ 18675'use strict'; 18676 18677/** @type {import('./ref')} */ 18678module.exports = ReferenceError; 18679 18680},{}],76:[function(require,module,exports){ 18681'use strict'; 18682 18683/** @type {import('./syntax')} */ 18684module.exports = SyntaxError; 18685 18686},{}],77:[function(require,module,exports){ 18687'use strict'; 18688 18689/** @type {import('./type')} */ 18690module.exports = TypeError; 18691 18692},{}],78:[function(require,module,exports){ 18693'use strict'; 18694 18695/** @type {import('./uri')} */ 18696module.exports = URIError; 18697 18698},{}],79:[function(require,module,exports){ 18699'use strict'; 18700 18701var $TypeError = require('es-errors/type'); 18702 18703/** @type {import('./RequireObjectCoercible')} */ 18704module.exports = function RequireObjectCoercible(value) { 18705 if (value == null) { 18706 throw new $TypeError((arguments.length > 0 && arguments[1]) || ('Cannot call method on ' + value)); 18707 } 18708 return value; 18709}; 18710 18711},{"es-errors/type":77}],80:[function(require,module,exports){ 18712'use strict'; 18713 18714var $Object = require('./'); 18715var RequireObjectCoercible = require('./RequireObjectCoercible'); 18716 18717/** @type {import('./ToObject')} */ 18718module.exports = function ToObject(value) { 18719 RequireObjectCoercible(value); 18720 return $Object(value); 18721}; 18722 18723},{"./":81,"./RequireObjectCoercible":79}],81:[function(require,module,exports){ 18724'use strict'; 18725 18726/** @type {import('.')} */ 18727module.exports = Object; 18728 18729},{}],82:[function(require,module,exports){ 18730'use strict'; 18731 18732var hasSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol'; 18733 18734var isPrimitive = require('./helpers/isPrimitive'); 18735var isCallable = require('is-callable'); 18736var isDate = require('is-date-object'); 18737var isSymbol = require('is-symbol'); 18738 18739var ordinaryToPrimitive = function OrdinaryToPrimitive(O, hint) { 18740 if (typeof O === 'undefined' || O === null) { 18741 throw new TypeError('Cannot call method on ' + O); 18742 } 18743 if (typeof hint !== 'string' || (hint !== 'number' && hint !== 'string')) { 18744 throw new TypeError('hint must be "string" or "number"'); 18745 } 18746 var methodNames = hint === 'string' ? ['toString', 'valueOf'] : ['valueOf', 'toString']; 18747 var method, result, i; 18748 for (i = 0; i < methodNames.length; ++i) { 18749 method = O[methodNames[i]]; 18750 if (isCallable(method)) { 18751 result = method.call(O); 18752 if (isPrimitive(result)) { 18753 return result; 18754 } 18755 } 18756 } 18757 throw new TypeError('No default value'); 18758}; 18759 18760var GetMethod = function GetMethod(O, P) { 18761 var func = O[P]; 18762 if (func !== null && typeof func !== 'undefined') { 18763 if (!isCallable(func)) { 18764 throw new TypeError(func + ' returned for property ' + P + ' of object ' + O + ' is not a function'); 18765 } 18766 return func; 18767 } 18768 return void 0; 18769}; 18770 18771// http://www.ecma-international.org/ecma-262/6.0/#sec-toprimitive 18772module.exports = function ToPrimitive(input) { 18773 if (isPrimitive(input)) { 18774 return input; 18775 } 18776 var hint = 'default'; 18777 if (arguments.length > 1) { 18778 if (arguments[1] === String) { 18779 hint = 'string'; 18780 } else if (arguments[1] === Number) { 18781 hint = 'number'; 18782 } 18783 } 18784 18785 var exoticToPrim; 18786 if (hasSymbols) { 18787 if (Symbol.toPrimitive) { 18788 exoticToPrim = GetMethod(input, Symbol.toPrimitive); 18789 } else if (isSymbol(input)) { 18790 exoticToPrim = Symbol.prototype.valueOf; 18791 } 18792 } 18793 if (typeof exoticToPrim !== 'undefined') { 18794 var result = exoticToPrim.call(input, hint); 18795 if (isPrimitive(result)) { 18796 return result; 18797 } 18798 throw new TypeError('unable to convert exotic object to primitive'); 18799 } 18800 if (hint === 'default' && (isDate(input) || isSymbol(input))) { 18801 hint = 'string'; 18802 } 18803 return ordinaryToPrimitive(input, hint === 'default' ? 'number' : hint); 18804}; 18805 18806},{"./helpers/isPrimitive":84,"is-callable":115,"is-date-object":116,"is-symbol":119}],83:[function(require,module,exports){ 18807'use strict'; 18808 18809var toStr = Object.prototype.toString; 18810 18811var isPrimitive = require('./helpers/isPrimitive'); 18812 18813var isCallable = require('is-callable'); 18814 18815// http://ecma-international.org/ecma-262/5.1/#sec-8.12.8 18816var ES5internalSlots = { 18817 '[[DefaultValue]]': function (O) { 18818 var actualHint; 18819 if (arguments.length > 1) { 18820 actualHint = arguments[1]; 18821 } else { 18822 actualHint = toStr.call(O) === '[object Date]' ? String : Number; 18823 } 18824 18825 if (actualHint === String || actualHint === Number) { 18826 var methods = actualHint === String ? ['toString', 'valueOf'] : ['valueOf', 'toString']; 18827 var value, i; 18828 for (i = 0; i < methods.length; ++i) { 18829 if (isCallable(O[methods[i]])) { 18830 value = O[methods[i]](); 18831 if (isPrimitive(value)) { 18832 return value; 18833 } 18834 } 18835 } 18836 throw new TypeError('No default value'); 18837 } 18838 throw new TypeError('invalid [[DefaultValue]] hint supplied'); 18839 } 18840}; 18841 18842// http://ecma-international.org/ecma-262/5.1/#sec-9.1 18843module.exports = function ToPrimitive(input) { 18844 if (isPrimitive(input)) { 18845 return input; 18846 } 18847 if (arguments.length > 1) { 18848 return ES5internalSlots['[[DefaultValue]]'](input, arguments[1]); 18849 } 18850 return ES5internalSlots['[[DefaultValue]]'](input); 18851}; 18852 18853},{"./helpers/isPrimitive":84,"is-callable":115}],84:[function(require,module,exports){ 18854arguments[4][66][0].apply(exports,arguments) 18855},{"dup":66}],85:[function(require,module,exports){ 18856(function (process,global){(function (){ 18857/*! 18858 * https://github.com/paulmillr/es6-shim 18859 * @license es6-shim Copyright 2013-2016 by Paul Miller (http://paulmillr.com) 18860 * and contributors, MIT License 18861 * es6-shim: v0.35.4 18862 * see https://github.com/paulmillr/es6-shim/blob/0.35.3/LICENSE 18863 * Details and documentation: 18864 * https://github.com/paulmillr/es6-shim/ 18865 */ 18866 18867// UMD (Universal Module Definition) 18868// see https://github.com/umdjs/umd/blob/master/returnExports.js 18869(function (root, factory) { 18870 /*global define */ 18871 if (typeof define === 'function' && define.amd) { 18872 // AMD. Register as an anonymous module. 18873 define(factory); 18874 } else if (typeof exports === 'object') { 18875 // Node. Does not work with strict CommonJS, but 18876 // only CommonJS-like environments that support module.exports, 18877 // like Node. 18878 module.exports = factory(); 18879 } else { 18880 // Browser globals (root is window) 18881 root.returnExports = factory(); 18882 } 18883}(this, function () { 18884 'use strict'; 18885 18886 var _apply = Function.call.bind(Function.apply); 18887 var _call = Function.call.bind(Function.call); 18888 var isArray = Array.isArray; 18889 var keys = Object.keys; 18890 18891 var not = function notThunker(func) { 18892 return function notThunk() { 18893 return !_apply(func, this, arguments); 18894 }; 18895 }; 18896 var throwsError = function (func) { 18897 try { 18898 func(); 18899 return false;
18900 } catch (e) { 18901 return true; 18902 } 18903 }; 18904 var valueOrFalseIfThrows = function valueOrFalseIfThrows(func) { 18905 try { 18906 return func(); 18907 } catch (e) { 18908 return false; 18909 } 18910 }; 18911 18912 var isCallableWithoutNew = not(throwsError); 18913 var arePropertyDescriptorsSupported = function () { 18914 // if Object.defineProperty exists but throws, it's IE 8 18915 return !throwsError(function () { 18916 return Object.defineProperty({}, 'x', { get: function () { } }); // eslint-disable-line getter-return 18917 }); 18918 }; 18919 var supportsDescriptors = !!Object.defineProperty && arePropertyDescriptorsSupported(); 18920 var functionsHaveNames = (function foo() {}).name === 'foo'; 18921 18922 var _forEach = Function.call.bind(Array.prototype.forEach); 18923 var _reduce = Function.call.bind(Array.prototype.reduce); 18924 var _filter = Function.call.bind(Array.prototype.filter); 18925 var _some = Function.call.bind(Array.prototype.some); 18926 18927 var defineProperty = function (object, name, value, force) { 18928 if (!force && name in object) { return; } 18929 if (supportsDescriptors) { 18930 Object.defineProperty(object, name, { 18931 configurable: true, 18932 enumerable: false, 18933 writable: true, 18934 value: value 18935 }); 18936 } else { 18937 object[name] = value; 18938 } 18939 }; 18940 18941 // Define configurable, writable and non-enumerable props 18942 // if they donât exist. 18943 var defineProperties = function (object, map, forceOverride) { 18944 _forEach(keys(map), function (name) { 18945 var method = map[name]; 18946 defineProperty(object, name, method, !!forceOverride); 18947 }); 18948 }; 18949 18950 var _toString = Function.call.bind(Object.prototype.toString); 18951 var isCallable = typeof /abc/ === 'function' ? function IsCallableSlow(x) { 18952 // Some old browsers (IE, FF) say that typeof /abc/ === 'function' 18953 return typeof x === 'function' && _toString(x) === '[object Function]'; 18954 } : function IsCallableFast(x) { return typeof x === 'function'; }; 18955 18956 var Value = { 18957 getter: function (object, name, getter) { 18958 if (!supportsDescriptors) { 18959 throw new TypeError('getters require true ES5 support'); 18960 } 18961 Object.defineProperty(object, name, { 18962 configurable: true, 18963 enumerable: false, 18964 get: getter 18965 }); 18966 }, 18967 proxy: function (originalObject, key, targetObject) { 18968 if (!supportsDescriptors) { 18969 throw new TypeError('getters require true ES5 support'); 18970 } 18971 var originalDescriptor = Object.getOwnPropertyDescriptor(originalObject, key); 18972 Object.defineProperty(targetObject, key, { 18973 configurable: originalDescriptor.configurable, 18974 enumerable: originalDescriptor.enumerable, 18975 get: function getKey() { return originalObject[key]; }, 18976 set: function setKey(value) { originalObject[key] = value; } 18977 }); 18978 }, 18979 redefine: function (object, property, newValue) { 18980 if (supportsDescriptors) { 18981 var descriptor = Object.getOwnPropertyDescriptor(object, property); 18982 descriptor.value = newValue; 18983 Object.defineProperty(object, property, descriptor); 18984 } else { 18985 object[property] = newValue; 18986 } 18987 }, 18988 defineByDescriptor: function (object, property, descriptor) { 18989 if (supportsDescriptors) { 18990 Object.defineProperty(object, property, descriptor); 18991 } else if ('value' in descriptor) { 18992 object[property] = descriptor.value; 18993 } 18994 }, 18995 preserveToString: function (target, source) { 18996 if (source && isCallable(source.toString)) { 18997 defineProperty(target, 'toString', source.toString.bind(source), true); 18998 } 18999 } 19000 }; 19001 19002 // Simple shim for Object.create on ES3 browsers 19003 // (unlike real shim, no attempt to support `prototype === null`) 19004 var create = Object.create || function (prototype, properties) { 19005 var Prototype = function Prototype() {}; 19006 Prototype.prototype = prototype; 19007 var object = new Prototype(); 19008 if (typeof properties !== 'undefined') { 19009 keys(properties).forEach(function (key) { 19010 Value.defineByDescriptor(object, key, properties[key]); 19011 }); 19012 } 19013 return object; 19014 }; 19015 19016 var supportsSubclassing = function (C, f) {
19017 if (!Object.setPrototypeOf) { return false; /* skip test on IE < 11 */ } 19018 return valueOrFalseIfThrows(function () { 19019 var Sub = function Subclass(arg) { 19020 var o = new C(arg); 19021 Object.setPrototypeOf(o, Subclass.prototype); 19022 return o; 19023 }; 19024 Object.setPrototypeOf(Sub, C); 19025 Sub.prototype = create(C.prototype, { 19026 constructor: { value: Sub } 19027 }); 19028 return f(Sub); 19029 }); 19030 }; 19031 19032 var getGlobal = function () { 19033 /* global self, window */ 19034 // the only reliable means to get the global object is 19035 // `Function('return this')()` 19036 // However, this causes CSP violations in Chrome apps. 19037 if (typeof self !== 'undefined') { return self; } 19038 if (typeof window !== 'undefined') { return window; } 19039 if (typeof global !== 'undefined') { return global; } 19040 throw new Error('unable to locate global object'); 19041 }; 19042 19043 var globals = getGlobal(); 19044 var globalIsFinite = globals.isFinite; 19045 var _indexOf = Function.call.bind(String.prototype.indexOf); 19046 var _arrayIndexOfApply = Function.apply.bind(Array.prototype.indexOf); 19047 var _concat = Function.call.bind(Array.prototype.concat); 19048 // var _sort = Function.call.bind(Array.prototype.sort); 19049 var _strSlice = Function.call.bind(String.prototype.slice); 19050 var _push = Function.call.bind(Array.prototype.push); 19051 var _pushApply = Function.apply.bind(Array.prototype.push); 19052 var _join = Function.call.bind(Array.prototype.join); 19053 var _shift = Function.call.bind(Array.prototype.shift); 19054 var _max = Math.max; 19055 var _min = Math.min; 19056 var _floor = Math.floor; 19057 var _abs = Math.abs; 19058 var _exp = Math.exp; 19059 var _log = Math.log; 19060 var _sqrt = Math.sqrt; 19061 var _hasOwnProperty = Function.call.bind(Object.prototype.hasOwnProperty); 19062 var ArrayIterator; // make our implementation private 19063 var noop = function () {}; 19064 19065 var OrigMap = globals.Map; 19066 var origMapDelete = OrigMap && OrigMap.prototype['delete']; 19067 var origMapGet = OrigMap && OrigMap.prototype.get; 19068 var origMapHas = OrigMap && OrigMap.prototype.has; 19069 var origMapSet = OrigMap && OrigMap.prototype.set; 19070 19071 var Symbol = globals.Symbol || {}; 19072 var symbolSpecies = Symbol.species || '@@species'; 19073 19074 var numberIsNaN = Number.isNaN || function isNaN(value) { 19075 // NaN !== NaN, but they are identical. 19076 // NaNs are the only non-reflexive value, i.e., if x !== x, 19077 // then x is NaN. 19078 // isNaN is broken: it converts its argument to number, so 19079 // isNaN('foo') => true 19080 return value !== value; 19081 }; 19082 var numberIsFinite = Number.isFinite || function isFinite(value) { 19083 return typeof value === 'number' && globalIsFinite(value); 19084 }; 19085 var _sign = isCallable(Math.sign) ? Math.sign : function sign(value) { 19086 var number = Number(value); 19087 if (number === 0) { return number; } 19088 if (numberIsNaN(number)) { return number; } 19089 return number < 0 ? -1 : 1; 19090 }; 19091 var _log1p = function log1p(value) { 19092 var x = Number(value); 19093 if (x < -1 || numberIsNaN(x)) { return NaN; } 19094 if (x === 0 || x === Infinity) { return x; } 19095 if (x === -1) { return -Infinity; } 19096 19097 return (1 + x) - 1 === 0 ? x : x * (_log(1 + x) / ((1 + x) - 1)); 19098 }; 19099 19100 // taken directly from https://github.com/ljharb/is-arguments/blob/master/index.js 19101 // can be replaced with require('is-arguments') if we ever use a build process instead 19102 var isStandardArguments = function isArguments(value) { 19103 return _toString(value) === '[object Arguments]'; 19104 }; 19105 var isLegacyArguments = function isArguments(value) { 19106 return value !== null 19107 && typeof value === 'object' 19108 && typeof value.length === 'number' 19109 && value.length >= 0 19110 && _toString(value) !== '[object Array]' 19111 && _toString(value.callee) === '[object Function]'; 19112 }; 19113 var isArguments = isStandardArguments(arguments) ? isStandardArguments : isLegacyArguments; 19114 19115 var Type = { 19116 primitive: function (x) { return x === null || (typeof x !== 'function' && typeof x !== 'object'); }, 19117 string: function (x) { return _toString(x) === '[object String]'; }, 19118 regex: function (x) { return _toString(x) === '[object RegExp]'; }, 19119 symbol: function (x) { 19120 return typeof globals.Symbol === 'function' && typeof x === 'symbol'; 19121 } 19122 }; 19123 19124 var overrideNative = function overrideNative(object, property, replacement) { 19125 var original = object[property]; 19126 defineProperty(object, property, replacement, true); 19127 Value.preserveToString(object[property], original); 19128 }; 19129 19130 // eslint-disable-next-line no-restricted-properties 19131 var hasSymbols = typeof Symbol === 'function' && typeof Symbol['for'] === 'function' && Type.symbol(Symbol()); 19132 19133 // This is a private name in the es6 spec, equal to '[Symbol.iterator]' 19134 // we're going to use an arbitrary _-prefixed name to make our shims 19135 // work properly with each other, even though we don't have full Iterator 19136 // support. That is, `Array.from(map.keys())` will work, but we don't 19137 // pretend to export a "real" Iterator interface. 19138 var $iterator$ = Type.symbol(Symbol.iterator) ? Symbol.iterator : '_es6-shim iterator_';
19139 // Firefox ships a partial implementation using the name @@iterator. 19140 // https://bugzilla.mozilla.org/show_bug.cgi?id=907077#c14 19141 // So use that name if we detect it. 19142 if (globals.Set && typeof new globals.Set()['@@iterator'] === 'function') { 19143 $iterator$ = '@@iterator'; 19144 } 19145 19146 // Reflect 19147 if (!globals.Reflect) { 19148 defineProperty(globals, 'Reflect', {}, true); 19149 } 19150 var Reflect = globals.Reflect; 19151 19152 var $String = String; 19153 19154 /* global document */ 19155 var domAll = (typeof document === 'undefined' || !document) ? null : document.all; 19156 var isNullOrUndefined = domAll == null ? function isNullOrUndefined(x) { 19157 return x == null; 19158 } : function isNullOrUndefinedAndNotDocumentAll(x) { 19159 return x == null && x !== domAll; 19160 }; 19161 19162 var ES = { 19163 // http://www.ecma-international.org/ecma-262/6.0/#sec-call 19164 Call: function Call(F, V) { 19165 var args = arguments.length > 2 ? arguments[2] : []; 19166 if (!ES.IsCallable(F)) { 19167 throw new TypeError(F + ' is not a function'); 19168 } 19169 return _apply(F, V, args); 19170 }, 19171 19172 RequireObjectCoercible: function (x, optMessage) { 19173 if (isNullOrUndefined(x)) { 19174 throw new TypeError(optMessage || 'Cannot call method on ' + x); 19175 } 19176 return x; 19177 }, 19178 19179 // This might miss the "(non-standard exotic and does not implement 19180 // [[Call]])" case from 19181 // http://www.ecma-international.org/ecma-262/6.0/#sec-typeof-operator-runtime-semantics-evaluation 19182 // but we can't find any evidence these objects exist in practice. 19183 // If we find some in the future, you could test `Object(x) === x`, 19184 // which is reliable according to 19185 // http://www.ecma-international.org/ecma-262/6.0/#sec-toobject 19186 // but is not well optimized by runtimes and creates an object 19187 // whenever it returns false, and thus is very slow. 19188 TypeIsObject: function (x) { 19189 if (x === void 0 || x === null || x === true || x === false) { 19190 return false; 19191 } 19192 return typeof x === 'function' || typeof x === 'object' || x === domAll; 19193 }, 19194 19195 ToObject: function (o, optMessage) { 19196 return Object(ES.RequireObjectCoercible(o, optMessage)); 19197 }, 19198 19199 IsCallable: isCallable, 19200 19201 IsConstructor: function (x) { 19202 // We can't tell callables from constructors in ES5 19203 return ES.IsCallable(x); 19204 }, 19205 19206 ToInt32: function (x) { 19207 return ES.ToNumber(x) >> 0; 19208 }, 19209 19210 ToUint32: function (x) { 19211 return ES.ToNumber(x) >>> 0; 19212 }, 19213 19214 ToNumber: function (value) { 19215 if (hasSymbols && _toString(value) === '[object Symbol]') { 19216 throw new TypeError('Cannot convert a Symbol value to a number'); 19217 } 19218 return +value; 19219 }, 19220 19221 ToInteger: function (value) { 19222 var number = ES.ToNumber(value); 19223 if (numberIsNaN(number)) { return 0; } 19224 if (number === 0 || !numberIsFinite(number)) { return number; } 19225 return (number > 0 ? 1 : -1) * _floor(_abs(number)); 19226 }, 19227 19228 ToLength: function (value) { 19229 var len = ES.ToInteger(value); 19230 if (len <= 0) { return 0; } // includes converting -0 to +0 19231 if (len > Number.MAX_SAFE_INTEGER) { return Number.MAX_SAFE_INTEGER; } 19232 return len; 19233 }, 19234 19235 SameValue: function (a, b) { 19236 if (a === b) { 19237 // 0 === -0, but they are not identical. 19238 if (a === 0) { return 1 / a === 1 / b; } 19239 return true; 19240 } 19241 return numberIsNaN(a) && numberIsNaN(b); 19242 }, 19243 19244 SameValueZero: function (a, b) { 19245 // same as SameValue except for SameValueZero(+0, -0) == true 19246 return (a === b) || (numberIsNaN(a) && numberIsNaN(b)); 19247 }, 19248 19249 GetIterator: function (o) { 19250 if (isArguments(o)) { 19251 // special case support for `arguments` 19252 return new ArrayIterator(o, 'value'); 19253 } 19254 var itFn = ES.GetMethod(o, $iterator$); 19255 if (!ES.IsCallable(itFn)) { 19256 // Better diagnostics if itFn is null or undefined 19257 throw new TypeError('value is not an iterable'); 19258 } 19259 var it = ES.Call(itFn, o); 19260 if (!ES.TypeIsObject(it)) { 19261 throw new TypeError('bad iterator'); 19262 } 19263 return it; 19264 }, 19265 19266 GetMethod: function (o, p) { 19267 var func = ES.ToObject(o)[p]; 19268 if (isNullOrUndefined(func)) { 19269 return void 0; 19270 } 19271 if (!ES.IsCallable(func)) { 19272 throw new TypeError('Method not callable: ' + p); 19273 } 19274 return func; 19275 }, 19276 19277 IteratorComplete: function (iterResult) { 19278 return !!iterResult.done; 19279 }, 19280 19281 IteratorClose: function (iterator, completionIsThrow) { 19282 var returnMethod = ES.GetMethod(iterator, 'return'); 19283 if (returnMethod === void 0) { 19284 return; 19285 } 19286 var innerResult, innerException;
19287 try { 19288 innerResult = ES.Call(returnMethod, iterator); 19289 } catch (e) { 19290 innerException = e; 19291 } 19292 if (completionIsThrow) { 19293 return; 19294 } 19295 if (innerException) { 19296 throw innerException; 19297 } 19298 if (!ES.TypeIsObject(innerResult)) { 19299 throw new TypeError("Iterator's return method returned a non-object."); 19300 } 19301 }, 19302 19303 IteratorNext: function (it) { 19304 var result = arguments.length > 1 ? it.next(arguments[1]) : it.next(); 19305 if (!ES.TypeIsObject(result)) { 19306 throw new TypeError('bad iterator'); 19307 } 19308 return result; 19309 }, 19310 19311 IteratorStep: function (it) { 19312 var result = ES.IteratorNext(it); 19313 var done = ES.IteratorComplete(result); 19314 return done ? false : result; 19315 }, 19316 19317 Construct: function (C, args, newTarget, isES6internal) { 19318 var target = typeof newTarget === 'undefined' ? C : newTarget; 19319 19320 if (!isES6internal && Reflect.construct) { 19321 // Try to use Reflect.construct if available 19322 return Reflect.construct(C, args, target); 19323 } 19324 // OK, we have to fake it. This will only work if the 19325 // C.[[ConstructorKind]] == "base" -- but that's the only 19326 // kind we can make in ES5 code anyway. 19327 19328 // OrdinaryCreateFromConstructor(target, "%ObjectPrototype%") 19329 var proto = target.prototype; 19330 if (!ES.TypeIsObject(proto)) { 19331 proto = Object.prototype; 19332 } 19333 var obj = create(proto); 19334 // Call the constructor. 19335 var result = ES.Call(C, obj, args); 19336 return ES.TypeIsObject(result) ? result : obj; 19337 }, 19338 19339 SpeciesConstructor: function (O, defaultConstructor) { 19340 var C = O.constructor; 19341 if (C === void 0) { 19342 return defaultConstructor; 19343 } 19344 if (!ES.TypeIsObject(C)) { 19345 throw new TypeError('Bad constructor'); 19346 } 19347 var S = C[symbolSpecies]; 19348 if (isNullOrUndefined(S)) { 19349 return defaultConstructor; 19350 } 19351 if (!ES.IsConstructor(S)) { 19352 throw new TypeError('Bad @@species'); 19353 } 19354 return S; 19355 }, 19356 19357 CreateHTML: function (string, tag, attribute, value) { 19358 var S = ES.ToString(string); 19359 var p1 = '<' + tag; 19360 if (attribute !== '') { 19361 var V = ES.ToString(value); 19362 var escapedV = V.replace(/"/g, '"'); 19363 p1 += ' ' + attribute + '="' + escapedV + '"'; 19364 } 19365 var p2 = p1 + '>'; 19366 var p3 = p2 + S; 19367 return p3 + '</' + tag + '>'; 19368 }, 19369 19370 IsRegExp: function IsRegExp(argument) { 19371 if (!ES.TypeIsObject(argument)) { 19372 return false; 19373 } 19374 var isRegExp = argument[Symbol.match]; 19375 if (typeof isRegExp !== 'undefined') { 19376 return !!isRegExp; 19377 } 19378 return Type.regex(argument); 19379 }, 19380 19381 ToString: function ToString(string) { 19382 if (hasSymbols && _toString(string) === '[object Symbol]') { 19383 throw new TypeError('Cannot convert a Symbol value to a number'); 19384 } 19385 return $String(string); 19386 } 19387 }; 19388 19389 // Well-known Symbol shims 19390 if (supportsDescriptors && hasSymbols) { 19391 var defineWellKnownSymbol = function defineWellKnownSymbol(name) { 19392 if (Type.symbol(Symbol[name])) { 19393 return Symbol[name]; 19394 } 19395 // eslint-disable-next-line no-restricted-properties 19396 var sym = Symbol['for']('Symbol.' + name); 19397 Object.defineProperty(Symbol, name, { 19398 configurable: false, 19399 enumerable: false, 19400 writable: false, 19401 value: sym 19402 }); 19403 return sym; 19404 }; 19405 if (!Type.symbol(Symbol.search)) { 19406 var symbolSearch = defineWellKnownSymbol('search'); 19407 var originalSearch = String.prototype.search; 19408 defineProperty(RegExp.prototype, symbolSearch, function search(string) { 19409 return ES.Call(originalSearch, string, [this]); 19410 }); 19411 var searchShim = function search(regexp) { 19412 var O = ES.RequireObjectCoercible(this); 19413 if (!isNullOrUndefined(regexp)) { 19414 var searcher = ES.GetMethod(regexp, symbolSearch); 19415 if (typeof searcher !== 'undefined') { 19416 return ES.Call(searcher, regexp, [O]); 19417 } 19418 } 19419 return ES.Call(originalSearch, O, [ES.ToString(regexp)]); 19420 }; 19421 overrideNative(String.prototype, 'search', searchShim); 19422 } 19423 if (!Type.symbol(Symbol.replace)) { 19424 var symbolReplace = defineWellKnownSymbol('replace'); 19425 var originalReplace = String.prototype.replace; 19426 defineProperty(RegExp.prototype, symbolReplace, function replace(string, replaceValue) { 19427 return ES.Call(originalReplace, string, [this, replaceValue]); 19428 }); 19429 var replaceShim = function replace(searchValue, replaceValue) { 19430 var O = ES.RequireObjectCoercible(this); 19431 if (!isNullOrUndefined(searchValue)) { 19432 var replacer = ES.GetMethod(searchValue, symbolReplace); 19433 if (typeof replacer !== 'undefined') { 19434 return ES.Call(replacer, searchValue, [O, replaceValue]); 19435 } 19436 } 19437 return ES.Call(originalReplace, O, [ES.ToString(searchValue), replaceValue]); 19438 }; 19439 overrideNative(String.prototype, 'replace', replaceShim); 19440 } 19441 if (!Type.symbol(Symbol.split)) { 19442 var symbolSplit = defineWellKnownSymbol('split'); 19443 var originalSplit = String.prototype.split; 19444 defineProperty(RegExp.prototype, symbolSplit, function split(string, limit) { 19445 return ES.Call(originalSplit, string, [this, limit]); 19446 }); 19447 var splitShim = function split(separator, limit) { 19448 var O = ES.RequireObjectCoercible(this); 19449 if (!isNullOrUndefined(separator)) { 19450 var splitter = ES.GetMethod(separator, symbolSplit); 19451 if (typeof splitter !== 'undefined') { 19452 return ES.Call(splitter, separator, [O, limit]); 19453 } 19454 } 19455 return ES.Call(originalSplit, O, [ES.ToString(separator), limit]); 19456 }; 19457 overrideNative(String.prototype, 'split', splitShim); 19458 } 19459 var symbolMatchExists = Type.symbol(Symbol.match); 19460 var stringMatchIgnoresSymbolMatch = symbolMatchExists && (function () { 19461 // Firefox 41, through Nightly 45 has Symbol.match, but Str
19461ing#match ignores it. 19462 // Firefox 40 and below have Symbol.match but String#match works fine. 19463 var o = {}; 19464 o[Symbol.match] = function () { return 42; }; 19465 return 'a'.match(o) !== 42; 19466 }()); 19467 if (!symbolMatchExists || stringMatchIgnoresSymbolMatch) { 19468 var symbolMatch = defineWellKnownSymbol('match'); 19469 19470 var originalMatch = String.prototype.match; 19471 defineProperty(RegExp.prototype, symbolMatch, function match(string) { 19472 return ES.Call(originalMatch, string, [this]); 19473 }); 19474 19475 var matchShim = function match(regexp) { 19476 var O = ES.RequireObjectCoercible(this); 19477 if (!isNullOrUndefined(regexp)) { 19478 var matcher = ES.GetMethod(regexp, symbolMatch); 19479 if (typeof matcher !== 'undefined') { 19480 return ES.Call(matcher, regexp, [O]); 19481 } 19482 } 19483 return ES.Call(originalMatch, O, [ES.ToString(regexp)]); 19484 }; 19485 overrideNative(String.prototype, 'match', matchShim); 19486 } 19487 } 19488 19489 var wrapConstructor = function wrapConstructor(original, replacement, keysToSkip) { 19490 Value.preserveToString(replacement, original); 19491 if (Object.setPrototypeOf) { 19492 // sets up proper prototype chain where possible 19493 Object.setPrototypeOf(original, replacement); 19494 } 19495 if (supportsDescriptors) { 19496 _forEach(Object.getOwnPropertyNames(original), function (key) { 19497 if (key in noop || keysToSkip[key]) { return; } 19498 Value.proxy(original, key, replacement); 19499 }); 19500 } else { 19501 _forEach(Object.keys(original), function (key) { 19502 if (key in noop || keysToSkip[key]) { return; } 19503 replacement[key] = original[key]; 19504 }); 19505 } 19506 replacement.prototype = original.prototype; 19507 Value.redefine(original.prototype, 'constructor', replacement); 19508 }; 19509 19510 var defaultSpeciesGetter = function () { return this; }; 19511 var addDefaultSpecies = function (C) { 19512 if (supportsDescriptors && !_hasOwnProperty(C, symbolSpecies)) { 19513 Value.getter(C, symbolSpecies, defaultSpeciesGetter); 19514 } 19515 }; 19516 19517 var addIterator = function (prototype, impl) { 19518 var implementation = impl || function iterator() { return this; }; 19519 defineProperty(prototype, $iterator$, implementation); 19520 if (!prototype[$iterator$] && Type.symbol($iterator$)) { 19521 // implementations are buggy when $iterator$ is a Symbol 19522 prototype[$iterator$] = implementation; 19523 } 19524 }; 19525 19526 var createDataProperty = function createDataProperty(object, name, value) { 19527 if (supportsDescriptors) { 19528 Object.defineProperty(object, name, { 19529 configurable: true, 19530 enumerable: true, 19531 writable: true, 19532 value: value 19533 }); 19534 } else { 19535 object[name] = value; 19536 } 19537 }; 19538 var createDataPropertyOrThrow = function createDataPropertyOrThrow(object, name, value) { 19539 createDataProperty(object, name, value); 19540 if (!ES.SameValue(object[name], value)) { 19541 throw new TypeError('property is nonconfigurable'); 19542 } 19543 }; 19544 19545 var emulateES6construct = function (o, defaultNewTarget, defaultProto, slots) { 19546 // This is an es5 approximation to es6 construct semantics. in es6, 19547 // 'new Foo' invokes Foo.[[Construct]] which (for almost all objects) 19548 // just sets the internal variable NewTarget (in es6 syntax `new.target`) 19549 // to Foo and then returns Foo(). 19550 19551 // Many ES6 object then have constructors of the form: 19552 // 1. If NewTarget is undefined, throw a TypeError exception 19553 // 2. Let xxx by OrdinaryCreateFromConstructor(NewTarget, yyy, zzz) 19554 19555 // So we're going to emulate those first two steps. 19556 if (!ES.TypeIsObject(o)) { 19557 throw new TypeError('Constructor requires `new`: ' + defaultNewTarget.name); 19558 } 19559 var proto = defaultNewTarget.prototype; 19560 if (!ES.TypeIsObject(proto)) { 19561 proto = defaultProto; 19562 } 19563 var obj = create(proto); 19564 for (var name in slots) { 19565 if (_hasOwnProperty(slots, name)) { 19566 var value = slots[name]; 19567 defineProperty(obj, name, value, true); 19568 } 19569 } 19570 return obj; 19571 }; 19572 19573 // Firefox 31 reports this function's length as 0 19574 // https://bugzilla.mozilla.org/show_bug.cgi?id=1062484 19575 if (String.fromCodePoint && String.fromCodePoint.length !== 1) { 19576 var originalFromCodePoint = String.fromCodePoint; 19577 overrideNative(String, 'fromCodePoint', function fromCodePoint(codePoints) { 19578 return ES.Call(originalFromCodePoint, this, arguments); 19579 }); 19580 } 19581 19582 var StringShims = { 19583 fromCodePoint: function fromCodePoint(codePoints) { 19584 var result = []; 19585 var next; 19586 for (var i = 0, length = arguments.length; i < length; i++) { 19587 next = Number(arguments[i]); 19588 if (!ES.SameValue(next, ES.ToInteger(next)) || next < 0 || next > 0x10FFFF) { 19589 throw new RangeError('Invalid code point ' + next); 19590 } 19591 19592 if (next < 0x10000) {
19593 _push(result, String.fromCharCode(next)); 19594 } else { 19595 next -= 0x10000; 19596 _push(result, String.fromCharCode((next >> 10) + 0xD800)); 19597 _push(result, String.fromCharCode((next % 0x400) + 0xDC00)); 19598 } 19599 } 19600 return _join(result, ''); 19601 }, 19602 19603 raw: function raw(template) { 19604 var numberOfSubstitutions = arguments.length - 1; 19605 var cooked = ES.ToObject(template, 'bad template'); 19606 var raw = ES.ToObject(cooked.raw, 'bad raw value'); 19607 var len = raw.length; 19608 var literalSegments = ES.ToLength(len); 19609 if (literalSegments <= 0) { 19610 return ''; 19611 } 19612 19613 var stringElements = []; 19614 var nextIndex = 0; 19615 var nextKey, next, nextSeg, nextSub; 19616 while (nextIndex < literalSegments) { 19617 nextKey = ES.ToString(nextIndex); 19618 nextSeg = ES.ToString(raw[nextKey]); 19619 _push(stringElements, nextSeg); 19620 if (nextIndex + 1 >= literalSegments) { 19621 break; 19622 } 19623 next = nextIndex + 1 < arguments.length ? arguments[nextIndex + 1] : ''; 19624 nextSub = ES.ToString(next); 19625 _push(stringElements, nextSub); 19626 nextIndex += 1; 19627 } 19628 return _join(stringElements, ''); 19629 } 19630 }; 19631 if (String.raw && String.raw({ raw: { 0: 'x', 1: 'y', length: 2 } }) !== 'xy') { 19632 // IE 11 TP has a broken String.raw implementation 19633 overrideNative(String, 'raw', StringShims.raw); 19634 } 19635 defineProperties(String, StringShims); 19636 19637 // Fast repeat, uses the `Exponentiation by squaring` algorithm. 19638 // Perf: http://jsperf.com/string-repeat2/2 19639 var stringRepeat = function repeat(s, times) { 19640 if (times < 1) { return ''; } 19641 if (times % 2) { return repeat(s, times - 1) + s; } 19642 var half = repeat(s, times / 2); 19643 return half + half; 19644 }; 19645 var stringMaxLength = Infinity; 19646 19647 var StringPrototypeShims = { 19648 repeat: function repeat(times) { 19649 var thisStr = ES.ToString(ES.RequireObjectCoercible(this)); 19650 var numTimes = ES.ToInteger(times); 19651 if (numTimes < 0 || numTimes >= stringMaxLength) { 19652 throw new RangeError('repeat count must be less than infinity and not overflow maximum string size'); 19653 } 19654 return stringRepeat(thisStr, numTimes); 19655 }, 19656 19657 startsWith: function startsWith(searchString) { 19658 var S = ES.ToString(ES.RequireObjectCoercible(this)); 19659 if (ES.IsRegExp(searchString)) { 19660 throw new TypeError('Cannot call method "startsWith" with a regex'); 19661 } 19662 var searchStr = ES.ToString(searchString); 19663 var position; 19664 if (arguments.length > 1) { 19665 position = arguments[1]; 19666 } 19667 var start = _max(ES.ToInteger(position), 0); 19668 return _strSlice(S, start, start + searchStr.length) === searchStr; 19669 }, 19670 19671 endsWith: function endsWith(searchString) { 19672 var S = ES.ToString(ES.RequireObjectCoercible(this)); 19673 if (ES.IsRegExp(searchString)) { 19674 throw new TypeError('Cannot call method "endsWith" with a regex'); 19675 } 19676 var searchStr = ES.ToString(searchString); 19677 var len = S.length; 19678 var endPosition; 19679 if (arguments.length > 1) { 19680 endPosition = arguments[1]; 19681 } 19682 var pos = typeof endPosition === 'undefined' ? len : ES.ToInteger(endPosition); 19683 var end = _min(_max(pos, 0), len); 19684 return _strSlice(S, end - searchStr.length, end) === searchStr; 19685 }, 19686 19687 includes: function includes(searchString) { 19688 if (ES.IsRegExp(searchString)) { 19689 throw new TypeError('"includes" does not accept a RegExp'); 19690 } 19691 var searchStr = ES.ToString(searchString); 19692 var position; 19693 if (arguments.length > 1) { 19694 position = arguments[1]; 19695 } 19696 // Somehow this trick makes method 100% compat with the spec. 19697 return _indexOf(this, searchStr, position) !== -1; 19698 }, 19699 19700 codePointAt: function codePointAt(pos) { 19701 var thisStr = ES.ToString(ES.RequireObjectCoercible(this)); 19702 var position = ES.ToInteger(pos); 19703 var length = thisStr.length; 19704 if (position >= 0 && position < length) { 19705 var first = thisStr.charCodeAt(position); 19706 var isEnd = position + 1 === length; 19707 if (first < 0xD800 || first > 0xDBFF || isEnd) { return first; } 19708 var second = thisStr.charCodeAt(position + 1); 19709 if (second < 0xDC00 || second > 0xDFFF) { return first; } 19710 return ((first - 0xD800) * 1024) + (second - 0xDC00) + 0x10000; 19711 } 19712 } 19713 }; 19714 if (String.prototype.includes && 'a'.includes('a', Infinity) !== false) { 19715 overrideNative(String.prototype, 'includes', StringPrototypeShims.includes); 19716 } 19717 19718 if (String.prototype.startsWith && String.prototype.endsWith) { 19719 var startsWithRejectsRegex = throwsError(function () { 19720 /* throws if spec-compliant */ 19721 return '/a/'.startsWith(/a/); 19722 }); 19723 var startsWithHandlesInfinity = valueOrFalseIfThrows(function () { 19724 return 'abc'.startsWith('a', Infinity) === false; 19725 }); 19726 if (!startsWithRejectsRegex || !startsWithHandlesInfinity) { 19727 // Firefox (< 37?) and IE 11 TP have a noncompliant startsWith implementation 19728 overrideNative(String.prototype, 'startsWith', StringPrototypeShims.startsWith); 19729 overrideNative(String.prototype, 'endsWith', StringPrototypeShims.endsWith); 19730 } 19731 } 19732 if (hasSymbols) { 19733 var startsWithSupportsSymbolMatch = valueOrFalseIfThrows(function () { 19734 var re = /a/; 19735 re[Symbol.match] = false;
19736 return '/a/'.startsWith(re); 19737 }); 19738 if (!startsWithSupportsSymbolMatch) { 19739 overrideNative(String.prototype, 'startsWith', StringPrototypeShims.startsWith); 19740 } 19741 var endsWithSupportsSymbolMatch = valueOrFalseIfThrows(function () { 19742 var re = /a/; 19743 re[Symbol.match] = false; 19744 return '/a/'.endsWith(re); 19745 }); 19746 if (!endsWithSupportsSymbolMatch) { 19747 overrideNative(String.prototype, 'endsWith', StringPrototypeShims.endsWith); 19748 } 19749 var includesSupportsSymbolMatch = valueOrFalseIfThrows(function () { 19750 var re = /a/; 19751 re[Symbol.match] = false; 19752 return '/a/'.includes(re); 19753 }); 19754 if (!includesSupportsSymbolMatch) { 19755 overrideNative(String.prototype, 'includes', StringPrototypeShims.includes); 19756 } 19757 } 19758 19759 defineProperties(String.prototype, StringPrototypeShims); 19760 19761 // whitespace from: http://es5.github.io/#x15.5.4.20 19762 // implementation from https://github.com/es-shims/es5-shim/blob/v3.4.0/es5-shim.js#L1304-L1324 19763 var ws = [ 19764 '\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003', 19765 '\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028', 19766 '\u2029\uFEFF' 19767 ].join(''); 19768 var trimRegexp = new RegExp('(^[' + ws + ']+)|([' + ws + ']+$)', 'g'); 19769 var trimShim = function trim() { 19770 return ES.ToString(ES.RequireObjectCoercible(this)).replace(trimRegexp, ''); 19771 }; 19772 var nonWS = ['\u0085', '\u200b', '\ufffe'].join(''); 19773 var nonWSregex = new RegExp('[' + nonWS + ']', 'g'); 19774 var isBadHexRegex = /^[-+]0x[0-9a-f]+$/i; 19775 var hasStringTrimBug = nonWS.trim().length !== nonWS.length; 19776 defineProperty(String.prototype, 'trim', trimShim, hasStringTrimBug); 19777 19778 // Given an argument x, it will return an IteratorResult object, 19779 // with value set to x and done to false. 19780 // Given no arguments, it will return an iterator completion object. 19781 var iteratorResult = function (x) { 19782 return { value: x, done: arguments.length === 0 }; 19783 }; 19784 19785 // see http://www.ecma-international.org/ecma-262/6.0/#sec-string.prototype-@@iterator 19786 var StringIterator = function (s) { 19787 ES.RequireObjectCoercible(s); 19788 defineProperty(this, '_s', ES.ToString(s)); 19789 defineProperty(this, '_i', 0); 19790 }; 19791 StringIterator.prototype.next = function () { 19792 var s = this._s; 19793 var i = this._i; 19794 if (typeof s === 'undefined' || i >= s.length) { 19795 this._s = void 0; 19796 return iteratorResult(); 19797 } 19798 var first = s.charCodeAt(i); 19799 var second, len; 19800 if (first < 0xD800 || first > 0xDBFF || (i + 1) === s.length) { 19801 len = 1; 19802 } else { 19803 second = s.charCodeAt(i + 1); 19804 len = (second < 0xDC00 || second > 0xDFFF) ? 1 : 2; 19805 } 19806 this._i = i + len; 19807 return iteratorResult(s.substr(i, len)); 19808 }; 19809 addIterator(StringIterator.prototype); 19810 addIterator(String.prototype, function () { 19811 return new StringIterator(this); 19812 }); 19813 19814 var ArrayShims = { 19815 from: function from(items) { 19816 var C = this; 19817 var mapFn; 19818 if (arguments.length > 1) { 19819 mapFn = arguments[1]; 19820 } 19821 var mapping, T; 19822 if (typeof mapFn === 'undefined') { 19823 mapping = false; 19824 } else { 19825 if (!ES.IsCallable(mapFn)) { 19826 throw new TypeError('Array.from: when provided, the second argument must be a function'); 19827 } 19828 if (arguments.length > 2) { 19829 T = arguments[2]; 19830 } 19831 mapping = true; 19832 } 19833 19834 // Note that that Arrays will use ArrayIterator: 19835 // https://bugs.ecmascript.org/show_bug.cgi?id=2416 19836 var usingIterator = typeof (isArguments(items) || ES.GetMethod(items, $iterator$)) !== 'undefined'; 19837 19838 var length, result, i; 19839 if (usingIterator) { 19840 result = ES.IsConstructor(C) ? Object(new C()) : []; 19841 var iterator = ES.GetIterator(items); 19842 var next, nextValue; 19843 19844 i = 0; 19845 while (true) { 19846 next = ES.IteratorStep(iterator); 19847 if (next === false) { 19848 break; 19849 } 19850 nextValue = next.value; 19851 try { 19852 if (mapping) { 19853 nextValue = typeof T === 'undefined' ? mapFn(nextValue, i) : _call(mapFn, T, nextValue, i); 19854 } 19855 result[i] = nextValue; 19856 } catch (e) { 19857 ES.IteratorClose(iterator, true); 19858 throw e; 19859 } 19860 i += 1; 19861 } 19862 length = i; 19863 } else { 19864 var arrayLike = ES.ToObject(items); 19865 length = ES.ToLength(arrayLike.length); 19866 result = ES.IsConstructor(C) ? Object(new C(length)) : new Array(length); 19867 var value; 19868 for (i = 0; i < length; ++i) { 19869 value = arrayLike[i]; 19870 if (mapping) { 19871 value = typeof T === 'undefined' ? mapFn(value, i) : _
19871call(mapFn, T, value, i); 19872 } 19873 createDataPropertyOrThrow(result, i, value); 19874 } 19875 } 19876 19877 result.length = length; 19878 return result; 19879 }, 19880 19881 of: function of() { 19882 var len = arguments.length; 19883 var C = this; 19884 var A = isArray(C) || !ES.IsCallable(C) ? new Array(len) : ES.Construct(C, [len]); 19885 for (var k = 0; k < len; ++k) { 19886 createDataPropertyOrThrow(A, k, arguments[k]); 19887 } 19888 A.length = len; 19889 return A; 19890 } 19891 }; 19892 defineProperties(Array, ArrayShims); 19893 addDefaultSpecies(Array); 19894 19895 // Our ArrayIterator is private; see 19896 // https://github.com/paulmillr/es6-shim/issues/252 19897 ArrayIterator = function (array, kind) { 19898 defineProperty(this, 'i', 0); 19899 defineProperty(this, 'array', array); 19900 defineProperty(this, 'kind', kind); 19901 }; 19902 19903 defineProperties(ArrayIterator.prototype, { 19904 next: function () { 19905 var i = this.i; 19906 var array = this.array; 19907 if (!(this instanceof ArrayIterator)) { 19908 throw new TypeError('Not an ArrayIterator'); 19909 } 19910 if (typeof array !== 'undefined') { 19911 var len = ES.ToLength(array.length); 19912 if (i < len) { 19913 //for (; i < len; i++) { 19914 var kind = this.kind; 19915 var retval; 19916 if (kind === 'key') { 19917 retval = i; 19918 } else if (kind === 'value') { 19919 retval = array[i]; 19920 } else if (kind === 'entry') { 19921 retval = [i, array[i]]; 19922 } 19923 this.i = i + 1; 19924 return iteratorResult(retval); 19925 } 19926 } 19927 this.array = void 0; 19928 return iteratorResult(); 19929 } 19930 }); 19931 addIterator(ArrayIterator.prototype); 19932 19933 /* 19934 var orderKeys = function orderKeys(a, b) { 19935 var aNumeric = String(ES.ToInteger(a)) === a; 19936 var bNumeric = String(ES.ToInteger(b)) === b; 19937 if (aNumeric && bNumeric) { 19938 return b - a; 19939 } else if (aNumeric && !bNumeric) { 19940 return -1; 19941 } else if (!aNumeric && bNumeric) { 19942 return 1; 19943 } else { 19944 return a.localeCompare(b); 19945 } 19946 }; 19947 19948 var getAllKeys = function getAllKeys(object) { 19949 var ownKeys = []; 19950 var keys = []; 19951 19952 for (var key in object) { 19953 _push(_hasOwnProperty(object, key) ? ownKeys : keys, key); 19954 } 19955 _sort(ownKeys, orderKeys); 19956 _sort(keys, orderKeys); 19957 19958 return _concat(ownKeys, keys); 19959 }; 19960 */ 19961 19962 // note: this is positioned here because it depends on ArrayIterator 19963 var arrayOfSupportsSubclassing = Array.of === ArrayShims.of || (function () { 19964 // Detects a bug in Webkit nightly r181886 19965 var Foo = function Foo(len) { this.length = len; }; 19966 Foo.prototype = []; 19967 var fooArr = Array.of.apply(Foo, [1, 2]); 19968 return fooArr instanceof Foo && fooArr.length === 2; 19969 }()); 19970 if (!arrayOfSupportsSubclassing) { 19971 overrideNative(Array, 'of', ArrayShims.of); 19972 } 19973 19974 var ArrayPrototypeShims = { 19975 copyWithin: function copyWithin(target, start) { 19976 var o = ES.ToObject(this); 19977 var len = ES.ToLength(o.length); 19978 var relativeTarget = ES.ToInteger(target); 19979 var relativeStart = ES.ToInteger(start); 19980 var to = relativeTarget < 0 ? _max(len + relativeTarget, 0) : _min(relativeTarget, len); 19981 var from = relativeStart < 0 ? _max(len + relativeStart, 0) : _min(relativeStart, len); 19982 var end; 19983 if (arguments.length > 2) { 19984 end = arguments[2]; 19985 } 19986 var relativeEnd = typeof end === 'undefined' ? len : ES.ToInteger(end); 19987 var finalItem = relativeEnd < 0 ? _max(len + relativeEnd, 0) : _min(relativeEnd, len); 19988 var count = _min(finalItem - from, len - to); 19989 var direction = 1; 19990 if (from < to && to < (from + count)) { 19991 direction = -1; 19992 from += count - 1; 19993 to += count - 1; 19994 } 19995 while (count > 0) { 19996 if (from in o) { 19997 o[to] = o[from]; 19998 } else { 19999 delete o[to]; 20000 } 20001 from += direction; 20002 to += direction; 20003 count -= 1; 20004 } 20005 return o; 20006 }, 20007 20008 fill: function fill(value) { 20009 var start; 20010 if (arguments.length > 1) { 20011 start = arguments[1]; 20012 } 20013 var end; 20014 if (arguments.length > 2) { 20015 end = arguments[2]; 20016 } 20017 var O = ES.ToObject(this); 20018 var len = ES.ToLength(O.length); 20019 start = ES.ToInteger(typeof start === 'undefined' ? 0 : start); 20020 end = ES.ToInteger(typeof end === 'undefined' ? len : end); 20021 20022 var relativeStart = start < 0 ? _max(len + start, 0) : _min(start, len); 20023 var relativeEnd = end < 0 ? len + end : end; 20024 20025 for (var i = relativeStart; i < len && i < relativeEnd; ++i) { 20026 O[i] = value; 20027 } 20028 return O; 20029 }, 20030 20031 find: function find(predicate) { 20032 var list = ES.ToObject(this); 20033 var length = ES.ToLength(list.length); 20034 if (!ES.IsCallable(predicate)) { 20035 throw new TypeError('Array#find: predicate must be a function'); 20036 } 20037 var thisArg = arguments.length > 1 ? arguments[1] : null; 20038 for (var i = 0, value; i < length; i++) { 20039 value = list[i]; 20040 if (thisArg) { 20041 if (_call(predicate, thisArg, value, i, list)) { 20042 return value; 20043 } 20044 } else if (predicate(value, i, list)) { 20045 return value; 20046 } 20047 } 20048 }, 20049 20050 findIndex: function findIndex(predicate) { 20051 var list = ES.ToObject(this); 20052 var length = ES.ToLength(list.length); 20053 if (!ES.IsCallable(predicate)) { 20054 throw new TypeError('Array#findIndex: predicate must be a function'); 20055 } 20056 var thisArg = arguments.length > 1 ? arguments[1] : null; 20057 for (var i = 0; i < length; i++) { 20058 if (thisArg) { 20059 if (_call(predicate, thisArg, list[i], i, list)) { 20060 return i; 20061 } 20062 } else if (predicate(list[i], i, list)) { 20063 return i; 20064 } 20065 } 20066 return -1; 20067 }, 20068 20069 keys: function keys() { 20070 return new ArrayIterator(this, 'key'); 20071 }, 20072 20073 values: function values() { 20074 return new ArrayIterator(this, 'value'); 20075 }, 20076 20077 entries: function entries() { 20078 return new ArrayIterator(this, 'entry'); 20079 } 20080 }; 20081 // Safari 7.1 defines Array#keys and Array#entries natively, 20082 // but the resulting ArrayIterator objects don't have a "next" method. 20083 if (Array.prototype.keys && !ES.IsCallable([1].keys().next)) { 20084 delete Array.prototype.keys; 20085 } 20086 if (Array.prototype.entries && !ES.IsCallable([1].entries().next)) { 20087 delete Array.prototype.entries; 20088 } 20089 20090 // Chrome 38 defines Array#keys and Array#entries, and Array#@@iterator, but not Array#values 20091 if (Array.prototype.keys && Array.prototype.entries && !Array.prototype.values && Array.prototype[$iterator$]) { 20092 defineProperties(Array.prototype, { 20093 values: Array.prototype[$iterator$] 20094 }); 20095 if (Type.symbol(Symbol.unscopables)) { 20096 Array.prototype[Symbol.unscopables].values = true; 20097 } 20098 } 20099 // Chrome 40 defines Array#values with the incorrect name, although Array#{keys,entries} have the correct name 20100 if (functionsHaveNames && Array.prototype.values && Array.prototype.values.name !== 'values') { 20101 var originalArrayPrototypeValues = Array.prototype.values; 20102 overrideNative(Array.prototype, 'values', function values() { return ES.Call(originalArrayPrototypeValues, this, arguments); }); 20103 defineProperty(Array.prototype, $iterator$, Array.prototype.values, true); 20104 } 20105 defineProperties(Array.prototype, ArrayPrototypeShims); 20106 20107 if (1 / [true].indexOf(true, -0) < 0) { 20108 // indexOf when given a position arg of -0 should return +0. 20109 // https://github.com/tc39/ecma262/pull/316 20110 defineProperty(Array.prototype, 'indexOf', function indexOf(searchElement) { 20111 var value = _arrayIndexOfApply(this, arguments); 20112 if (value === 0 && (1 / value) < 0) { 20113 return 0; 20114 } 20115 return value; 20116 }, true); 20117 } 20118 20119 addIterator(Array.prototype, function () { return this.values(); }); 20120 // Chrome defines keys/values/entries on Array, but doesn't give us 20121 // any way to identify its iterator. So add our own shimmed field. 20122 if (Object.getPrototypeOf) { 20123 var ChromeArrayIterator = Object.getPrototypeOf([].values()); 20124 if (ChromeArrayIterator) { // in WSH, this is `undefined` 20125 addIterator(ChromeArrayIterator); 20126 } 20127 } 20128 20129 // note: this is positioned here because it relies on Array#entries 20130 var arrayFromSwallowsNegativeLengths = (function () { 20131 // Detects a Firefox bug in v32 20132 // https://bugzilla.mozilla.org/show_bug.cgi?id=1063993 20133 return valueOrFalseIfThrows(function () { 20134 return Array.from({ length: -1 }).length === 0; 20135 }); 20136 }()); 20137 var arrayFromHandlesIterables = (function () { 20138 // Detects a bug in Webkit nightly r181886 20139 var arr = Array.from([0].entries()); 20140 return arr.length === 1 && isArray(arr[0]) && arr[0][0] === 0 && arr[0][1] === 0; 20141 }()); 20142 if (!arrayFromSwallowsNegativeLengths || !arrayFromHandlesIterables) { 20143 overrideNative(Array, 'from', ArrayShims.from); 20144 } 20145 var arrayFromHandlesUndefinedMapFunction = (function () { 20146 // Microsoft Edge v0.11 throws if the mapFn argument is *provided* but undefined, 20147 // but the spec doesn't care if it's provided or not - undefined doesn't throw. 20148 return valueOrFalseIfThrows(function () { 20149 return Array.from([0], void 0); 20150 }); 20151 }()); 20152 if (!arrayFromHandlesUndefinedMapFunction) { 20153 var origArrayFrom = Array.from; 20154 overrideNative(Array, 'from', function from(items) { 20155 if (arguments.length > 1 && typeof arguments[1] !== 'undefined') { 20156 return ES.Call(origArrayFrom, this, arguments); 20157 } 20158 return _call(origArrayFrom, this, items); 20159 20160 }); 20161 } 20162 20163 var int32sAsOne = -(Math.pow(2, 32) - 1); 20164 var toLengthsCorrectly = function (method, reversed) { 20165 var obj = { length: int32sAsOne }; 20166 obj[reversed ? (obj.length >>> 0) - 1 : 0] = true; 20167 return valueOrFalseIfThrows(function () { 20168 _call(method, obj, function () { 20169 // note: in nonconforming browsers, this will be called 20170 // -1 >>> 0 times, which is 4294967295, so the throw matters. 20171 throw new RangeError('should not reach here'); 20172 }, []); 20173 return true; 20174 }); 20175 }; 20176 if (!toLengthsCorrectly(Array.prototype.forEach)) { 20177 var originalForEach = Array.prototype.forEach; 20178 overrideNative(Array.prototype, 'forEach', function forEach(callbackFn) { 20179 return ES.Call(originalForEach, this.length >
20179= 0 ? this : [], arguments); 20180 }); 20181 } 20182 if (!toLengthsCorrectly(Array.prototype.map)) { 20183 var originalMap = Array.prototype.map; 20184 overrideNative(Array.prototype, 'map', function map(callbackFn) { 20185 return ES.Call(originalMap, this.length >= 0 ? this : [], arguments); 20186 }); 20187 } 20188 if (!toLengthsCorrectly(Array.prototype.filter)) { 20189 var originalFilter = Array.prototype.filter; 20190 overrideNative(Array.prototype, 'filter', function filter(callbackFn) { 20191 return ES.Call(originalFilter, this.length >= 0 ? this : [], arguments); 20192 }); 20193 } 20194 if (!toLengthsCorrectly(Array.prototype.some)) { 20195 var originalSome = Array.prototype.some; 20196 overrideNative(Array.prototype, 'some', function some(callbackFn) { 20197 return ES.Call(originalSome, this.length >= 0 ? this : [], arguments); 20198 }); 20199 } 20200 if (!toLengthsCorrectly(Array.prototype.every)) { 20201 var originalEvery = Array.prototype.every; 20202 overrideNative(Array.prototype, 'every', function every(callbackFn) { 20203 return ES.Call(originalEvery, this.length >= 0 ? this : [], arguments); 20204 }); 20205 } 20206 if (!toLengthsCorrectly(Array.prototype.reduce)) { 20207 var originalReduce = Array.prototype.reduce; 20208 overrideNative(Array.prototype, 'reduce', function reduce(callbackFn) { 20209 return ES.Call(originalReduce, this.length >= 0 ? this : [], arguments); 20210 }); 20211 } 20212 if (!toLengthsCorrectly(Array.prototype.reduceRight, true)) { 20213 var originalReduceRight = Array.prototype.reduceRight; 20214 overrideNative(Array.prototype, 'reduceRight', function reduceRight(callbackFn) { 20215 return ES.Call(originalReduceRight, this.length >= 0 ? this : [], arguments); 20216 }); 20217 } 20218 20219 var lacksOctalSupport = Number('0o10') !== 8; 20220 var lacksBinarySupport = Number('0b10') !== 2; 20221 var trimsNonWhitespace = _some(nonWS, function (c) { 20222 return Number(c + 0 + c) === 0; 20223 }); 20224 if (lacksOctalSupport || lacksBinarySupport || trimsNonWhitespace) { 20225 var OrigNumber = Number; 20226 var binaryRegex = /^0b[01]+$/i; 20227 var octalRegex = /^0o[0-7]+$/i; 20228 // Note that in IE 8, RegExp.prototype.test doesn't seem to exist: ie, "test" is an own property of regexes. wtf. 20229 var isBinary = binaryRegex.test.bind(binaryRegex); 20230 var isOctal = octalRegex.test.bind(octalRegex); 20231 var toPrimitive = function (O, hint) { // need to replace this with `es-to-primitive/es6` 20232 var result; 20233 if (typeof O.valueOf === 'function') { 20234 result = O.valueOf(); 20235 if (Type.primitive(result)) { 20236 return result; 20237 } 20238 } 20239 if (typeof O.toString === 'function') { 20240 result = O.toString(); 20241 if (Type.primitive(result)) { 20242 return result; 20243 } 20244 } 20245 throw new TypeError('No default value'); 20246 }; 20247 var hasNonWS = nonWSregex.test.bind(nonWSregex); 20248 var isBadHex = isBadHexRegex.test.bind(isBadHexRegex); 20249 var NumberShim = (function () { 20250 // this is wrapped in an IIFE because of IE 6-8's wacky scoping issues with named function expressions. 20251 var NumberShim = function Number(value) { 20252 var primValue; 20253 if (arguments.length > 0) { 20254 primValue = Type.primitive(value) ? value : toPrimitive(value, 'number'); 20255 } else { 20256 primValue = 0; 20257 } 20258 if (typeof primValue === 'string') { 20259 primValue = ES.Call(trimShim, primValue); 20260 if (isBinary(primValue)) { 20261 primValue = parseInt(_strSlice(primValue, 2), 2); 20262 } else if (isOctal(primValue)) { 20263 primValue = parseInt(_strSlice(primValue, 2), 8); 20264 } else if (hasNonWS(primValue) || isBadHex(primValue)) { 20265 primValue = NaN; 20266 } 20267 } 20268 var receiver = this; 20269 var valueOfSucceeds = valueOrFalseIfThrows(function () { 20270 OrigNumber.prototype.valueOf.call(receiver); 20271 return true; 20272 }); 20273 if (receiver instanceof NumberShim && !valueOfSucceeds) { 20274 return new OrigNumber(primValue); 20275 } 20276 return OrigNumber(primValue); 20277 }; 20278 return NumberShim; 20279 }()); 20280 wrapConstructor(OrigNumber, NumberShim, {}); 20281 // this is necessary for ES3 browsers, where these properties are non-enumerable. 20282 defineProperties(NumberShim, { 20283 NaN: OrigNumber.NaN, 20284 MAX_VALUE: OrigNumber.MAX_VALUE, 20285 MIN_VALUE: OrigNumber.MIN_VALUE, 20286 NEGATIVE_INFINITY: OrigNumber.NEGATIVE_INFINITY, 20287 POSITIVE_INFINITY: OrigNumber.POSITIVE_INFINITY 20288 }); 20289 Number = NumberShim; // eslint-disable-line no-global-assign 20290 Value.redefine(globals, 'Number', NumberShim); 20291 } 20292 20293 var maxSafeInteger = Math.pow(2, 53) - 1; 20294 defineProperties(Number, { 20295 MAX_SAFE_INTEGER: maxSafeInteger, 20296 MIN_SAFE_INTEGER: -maxSafeInteger, 20297 EPSILON: 2.220446049250313e-16, 20298 20299 parseInt: globals.parseInt, 20300 parseFloat: globals.parseFloat, 20301 20302 isFinite: numberIsFinite, 20303 20304 isInteger: function isInteger(value) { 20305 return numberIsFinite(value) && ES.ToInteger(value) === value; 20306 }, 20307 20308 isSafeInteger: function isSafeInteger(value) { 20309 return Number.isInteger(value) && _abs(value) <= Number.MAX_SAFE_INTEGER; 20310 }, 20311 20312 isNaN: numberIsNaN 20313 }); 20314 // Firefox 37 has a conforming Number.parseInt, but it's not === to the global parseInt (fixed in v40) 20315 defineProperty(Number, 'parseInt', globals.parseInt, Number.parseInt !== globals.parseInt); 20316 20317 // Work around bugs in Array#find and Array#findIndex -- early 20318 // implementations skipped holes in sparse arrays. (Note that the 20319 // implementations of find/findIndex indirectly use shimmed 20320 // methods of Number, so this test has to happen down here.) 20321 /* eslint-disable no-sparse-arrays */ 20322 if ([, 1].find(function () { return true; }) === 1) { 20323 overrideNative(Array.prototype, 'find', ArrayPrototypeShims.find); 20324 } 20325 if ([, 1].findIndex(function () { return true; }) !== 0) { 20326 overrideNative(Array.prototype, 'findIndex', ArrayPrototypeShims.findIndex); 20327 } 20328 /* eslint-enable no-sparse-arrays */ 20329 20330 var isEnumerableOn = Function.bind.call(Function.bind, Object.prototype.propertyIsEnumerable); 20331 var ensureEnumerable = function ensureEnumerable(obj, prop) { 20332 if (supportsDescriptors && isEnumerableOn(obj, prop)) { 20333 Object.defineProperty(obj, prop, { enumerable: false }); 20334 } 20335 }; 20336 var sliceArgs = function sliceArgs() { 20337 // per https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments 20338 // and https://gist.github.com/WebReflection/4327762cb87a8c634a29 20339 var initial = Number(this); 20340 var len = arguments.length; 20341 var desiredArgCount = len - initial; 20342 var args = new Array(desiredArgCount < 0 ? 0 : desiredArgCount); 20343 for (var i = initial; i < len; ++i) { 20344 args[i - initial] = arguments[i]; 20345 } 20346 return args; 20347 }; 20348 var assignTo = function assignTo(source) { 20349 return function assignToSource(target, key) { 20350 target[key] = source[key]; 20351 return target; 20352 }; 20353 }; 20354 var assignReducer = function (target, source) { 20355 var sourceKeys = keys(Object(source)); 20356 var symbols; 20357 if (ES.IsCallable(Object.getOwnPropertySymbols)) { 20358 symbols = _filter(Object.getOwnPropertySymbols(Object(source)), isEnumerableOn(source)); 20359 } 20360 return _reduce(_concat(sourceKeys, symbols || []), assignTo(source), target); 20361 }; 20362 20363 var ObjectShims = { 20364 // 19.1.3.1 20365 assign: function (target, source) { 20366 var to = ES.ToObject(target, 'Cannot convert undefined or null to object'); 20367 return _reduce(ES.Call(sliceArgs, 1, arguments), assignReducer, to); 20368 }, 20369 20370 // Added in WebKit in https://bugs.webkit.org/show_bug.cgi?id=143865 20371 is: function is(a, b) { 20372 return ES.SameValue(a, b); 20373 } 20374 }; 20375 var assignHasPendingExceptions = Object.assign && Object.preventExtensions && (function () { 20376 // Firefox 37 still has "pending exception" logic in its Object.assign implementation, 20377 // which is 72% slower than our shim, and Firefox 40's native implementation. 20378 var thrower = Object.preventExtensions({ 1: 2 }); 20379 try { 20380 Object.assign(thrower, 'xy'); 20381 } catch (e) { 20382 return thrower[1] === 'y'; 20383 } 20384 }()); 20385 if (assignHasPendingExceptions) { 20386 overrideNative(Object, 'assign', ObjectShims.assign); 20387 } 20388 defineProperties(Object, ObjectShims); 20389 20390 if (supportsDescriptors) { 20391 var ES5ObjectShims = { 20392 // 19.1.3.9 20393 // shim from https://gist.github.com/WebReflection/5593554 20394 setPrototypeOf: (function (Object) { 20395 var set; 20396 20397 var checkArgs = function (O, proto) { 20398 if (!ES.TypeIsObject(O)) { 20399 throw new TypeError('cannot set prototype on a non-object'); 20400 } 20401 if (!(proto === null || ES.TypeIsObject(proto))) { 20402 throw new TypeError('can only set prototype to an object or null' + proto); 20403 } 20404 }; 20405 20406 var setPrototypeOf = function (O, proto) { 20407 checkArgs(O, proto); 20408 _call(set, O, proto); 20409 return O; 20410 }; 20411 20412 try { 20413 // this works already in Firefox and Safari 20414 set = Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set; 20415 _call(set, {}, null); 20416 } catch (e) { 20417 if (Object.prototype !== ({}).__proto__) { // eslint-disable-line no-proto 20418 // IE < 11 cannot be shimmed 20419 return; 20420 } 20421 // probably Chrome or some old Mobile stock browser 20422 set = function (proto) { 20423 this.__proto__ = proto; // eslint-disable-line no-proto 20424 }; 20425 // please note that this will **not** work 20426 // in those browsers that do not inherit 20427 // __proto__ by mistake from Object.prototype 20428 // in these cases we should probably throw an error 20429 // or at least be informed about the issue 20430 setPrototypeOf.polyfill = setPrototypeOf( 20431 setPrototypeOf({}, null), 20432 Object.prototype 20433 ) instanceof Object; 20434 // setPrototypeOf.polyfill === true means it works as meant 20435 // setPrototypeOf.polyfill === false means it's not 100% reliable 20436 // setPrototypeOf.polyfill === undefined 20437 // or 20438 // setPrototypeOf.polyfill == null means it's not a polyfill 20439 // which means it works as expected 20440 // we can even delete Object.prototype.__proto__; 20441 } 20442 return setPrototypeOf; 20443 }(Object)) 20444 }; 20445 20446 defineProperties(Object, ES5ObjectShims); 20447 } 20448 20449 // Workaround bug in Opera 12 where setPrototypeOf(x, null) doesn't work, 20450 // but Object.create(null) does. 20451 if ( 20452 Object.setPrototypeOf 20453 && Object.getPrototypeOf 20454 && Object.getPrototypeOf(Object.setPrototypeOf({}, null)) !== null 20455 && Object.getPrototypeOf(Object.create(null)) === null 20456 ) { 20457 (function () { 20458 var FAKENULL = Object.create(null); 20459 var gpo = Object.getPrototypeOf; 20460 var spo = Object.setPrototypeOf; 20461 Object.getPrototypeOf = function (o) { 20462 var result = gpo(o); 20463 return result === FAKENULL ? null : result; 20464 }; 20465 Object.setPrototypeOf = function (o, p) { 20466 var proto = p === null ? FAKENULL : p; 20467 return spo(o, proto); 20468 }; 20469 Object.setPrototypeOf.polyfill = false;
20470 }()); 20471 } 20472 20473 var objectKeysAcceptsPrimitives = !throwsError(function () { return Object.keys('foo'); }); 20474 if (!objectKeysAcceptsPrimitives) { 20475 var originalObjectKeys = Object.keys; 20476 overrideNative(Object, 'keys', function keys(value) { 20477 return originalObjectKeys(ES.ToObject(value)); 20478 }); 20479 keys = Object.keys; 20480 } 20481 var objectKeysRejectsRegex = throwsError(function () { return Object.keys(/a/g); }); 20482 if (objectKeysRejectsRegex) { 20483 var regexRejectingObjectKeys = Object.keys; 20484 overrideNative(Object, 'keys', function keys(value) { 20485 if (Type.regex(value)) { 20486 var regexKeys = []; 20487 for (var k in value) { 20488 if (_hasOwnProperty(value, k)) { 20489 _push(regexKeys, k); 20490 } 20491 } 20492 return regexKeys; 20493 } 20494 return regexRejectingObjectKeys(value); 20495 }); 20496 keys = Object.keys; 20497 } 20498 20499 if (Object.getOwnPropertyNames) { 20500 var objectGOPNAcceptsPrimitives = !throwsError(function () { return Object.getOwnPropertyNames('foo'); }); 20501 if (!objectGOPNAcceptsPrimitives) { 20502 var cachedWindowNames = typeof window === 'object' ? Object.getOwnPropertyNames(window) : []; 20503 var originalObjectGetOwnPropertyNames = Object.getOwnPropertyNames; 20504 overrideNative(Object, 'getOwnPropertyNames', function getOwnPropertyNames(value) { 20505 var val = ES.ToObject(value); 20506 if (_toString(val) === '[object Window]') { 20507 try { 20508 return originalObjectGetOwnPropertyNames(val); 20509 } catch (e) { 20510 // IE bug where layout engine calls userland gOPN for cross-domain `window` objects 20511 return _concat([], cachedWindowNames); 20512 } 20513 } 20514 return originalObjectGetOwnPropertyNames(val); 20515 }); 20516 } 20517 } 20518 if (Object.getOwnPropertyDescriptor) { 20519 var objectGOPDAcceptsPrimitives = !throwsError(function () { return Object.getOwnPropertyDescriptor('foo', 'bar'); }); 20520 if (!objectGOPDAcceptsPrimitives) { 20521 var originalObjectGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; 20522 overrideNative(Object, 'getOwnPropertyDescriptor', function getOwnPropertyDescriptor(value, property) { 20523 return originalObjectGetOwnPropertyDescriptor(ES.ToObject(value), property); 20524 }); 20525 } 20526 } 20527 if (Object.seal) { 20528 var objectSealAcceptsPrimitives = !throwsError(function () { return Object.seal('foo'); }); 20529 if (!objectSealAcceptsPrimitives) { 20530 var originalObjectSeal = Object.seal; 20531 overrideNative(Object, 'seal', function seal(value) { 20532 if (!ES.TypeIsObject(value)) { return value; } 20533 return originalObjectSeal(value); 20534 }); 20535 } 20536 } 20537 if (Object.isSealed) { 20538 var objectIsSealedAcceptsPrimitives = !throwsError(function () { return Object.isSealed('foo'); }); 20539 if (!objectIsSealedAcceptsPrimitives) { 20540 var originalObjectIsSealed = Object.isSealed; 20541 overrideNative(Object, 'isSealed', function isSealed(value) { 20542 if (!ES.TypeIsObject(value)) { return true; } 20543 return originalObjectIsSealed(value); 20544 }); 20545 } 20546 } 20547 if (Object.freeze) { 20548 var objectFreezeAcceptsPrimitives = !throwsError(function () { return Object.freeze('foo'); }); 20549 if (!objectFreezeAcceptsPrimitives) { 20550 var originalObjectFreeze = Object.freeze; 20551 overrideNative(Object, 'freeze', function freeze(value) { 20552 if (!ES.TypeIsObject(value)) { return value; } 20553 return originalObjectFreeze(value); 20554 }); 20555 } 20556 } 20557 if (Object.isFrozen) { 20558 var objectIsFrozenAcceptsPrimitives = !throwsError(function () { return Object.isFrozen('foo'); }); 20559 if (!objectIsFrozenAcceptsPrimitives) { 20560 var originalObjectIsFrozen = Object.isFrozen; 20561 overrideNative(Object, 'isFrozen', function isFrozen(value) { 20562 if (!ES.TypeIsObject(value)) { return true; } 20563 return originalObjectIsFrozen(value); 20564 }); 20565 } 20566 } 20567 if (Object.preventExtensions) { 20568 var objectPreventExtensionsAcceptsPrimitives = !throwsError(function () { return Object.preventExtensions('foo'); }); 20569 if (!objectPreventExtensionsAcceptsPrimitives) { 20570 var originalObjectPreventExtensions = Object.preventExtensions; 20571 overrideNative(Object, 'preventExtensions', function preventExtensions(value) { 20572 if (!ES.TypeIsObject(value)) { return value; } 20573 return originalObjectPreventExtensions(value); 20574 }); 20575 } 20576 } 20577 if (Object.isExtensible) { 20578 var objectIsExtensibleAcceptsPrimitives = !throwsError(function () { return Object.isExtensible('foo'); }); 20579 if (!objectIsExtensibleAcceptsPrimitives) { 20580 var originalObjectIsExtensible = Object.isExtensible; 20581 overrideNative(Object, 'isExtensible', function isExtensible(value) { 20582 if (!ES.TypeIsObject(value)) { return false; } 20583 return originalObjectIsExtensible(value); 20584 }); 20585 } 20586 } 20587 if (Object.getPrototypeOf) { 20588 var objectGetProtoAcceptsPrimitives = !throwsError(function () { return Object.getPrototypeOf('foo'); }); 20589 if (!objectGetProtoAcceptsPrimitives) { 20590 var originalGetProto = Object.getPrototypeOf; 20591 overrideNative(Object, 'getPrototypeOf', function getPrototypeOf(value) { 20592 return originalGetProto(ES.ToObject(value)); 20593 }); 20594 } 20595 } 20596 20597 var hasFlags = supportsDescriptors && (function () { 20598 var desc = Object.getOwnPropertyDescriptor(RegExp.prototype, 'flags'); 20599 return desc && ES.IsCallable(desc.get); 20600 }()); 20601 if (supportsDescriptors && !hasFlags) { 20602 var regExpFlagsGetter = function flags() { 20603 if (!ES.TypeIsObject(this)) { 20604 throw new TypeError('Method called on incompatible type: must be an object.'); 20605 } 20606 var result = ''; 20607 if (this.global) { 20608 result += 'g'; 20609 } 20610 if (this.ignoreCase) { 20611 result += 'i'; 20612 } 20613 if (this.multiline) { 20614 result += 'm'; 20615 } 20616 if (this.unicode) { 20617 result += 'u'; 20618 } 20619 if (this.sticky) { 20620 result += 'y'; 20621 } 20622 return result; 20623 }; 20624 20625 Value.getter(RegExp.prototype, 'flags', regExpFlagsGetter); 20626 } 20627 20628 var regExpSupportsFlagsWithRegex = supportsDescriptors && valueOrFalseIfThrows(function () { 20629 return String(new RegExp(/a/g, 'i')) === '/a/i'; 20630 }); 20631 var regExpNeedsToSupportSymbolMatch = hasSymbols && supportsDescriptors && (function () { 20632 // Edge 0.12 supports flags fully, but does not support Symbol.match 20633 var regex = /./; 20634 regex[Symbol.match] = false;
20635 return RegExp(regex) === regex; 20636 }()); 20637 20638 var regexToStringIsGeneric = valueOrFalseIfThrows(function () { 20639 return RegExp.prototype.toString.call({ source: 'abc' }) === '/abc/'; 20640 }); 20641 var regexToStringSupportsGenericFlags = regexToStringIsGeneric && valueOrFalseIfThrows(function () { 20642 return RegExp.prototype.toString.call({ source: 'a', flags: 'b' }) === '/a/b'; 20643 }); 20644 if (!regexToStringIsGeneric || !regexToStringSupportsGenericFlags) { 20645 var origRegExpToString = RegExp.prototype.toString; 20646 defineProperty(RegExp.prototype, 'toString', function toString() { 20647 var R = ES.RequireObjectCoercible(this); 20648 if (Type.regex(R)) { 20649 return _call(origRegExpToString, R); 20650 } 20651 var pattern = $String(R.source); 20652 var flags = $String(R.flags); 20653 return '/' + pattern + '/' + flags; 20654 }, true); 20655 Value.preserveToString(RegExp.prototype.toString, origRegExpToString); 20656 RegExp.prototype.toString.prototype = void 0; 20657 } 20658 20659 if (supportsDescriptors && (!regExpSupportsFlagsWithRegex || regExpNeedsToSupportSymbolMatch)) { 20660 var flagsGetter = Object.getOwnPropertyDescriptor(RegExp.prototype, 'flags').get; 20661 var sourceDesc = Object.getOwnPropertyDescriptor(RegExp.prototype, 'source') || {}; 20662 var legacySourceGetter = function () { 20663 // prior to it being a getter, it's own + nonconfigurable 20664 return this.source; 20665 }; 20666 var sourceGetter = ES.IsCallable(sourceDesc.get) ? sourceDesc.get : legacySourceGetter; 20667 20668 var OrigRegExp = RegExp; 20669 var RegExpShim = (function () { 20670 return function RegExp(pattern, flags) { 20671 var patternIsRegExp = ES.IsRegExp(pattern); 20672 var calledWithNew = this instanceof RegExp; 20673 if (!calledWithNew && patternIsRegExp && typeof flags === 'undefined' && pattern.constructor === RegExp) { 20674 return pattern; 20675 } 20676 20677 var P = pattern; 20678 var F = flags; 20679 if (Type.regex(pattern)) { 20680 P = ES.Call(sourceGetter, pattern); 20681 F = typeof flags === 'undefined' ? ES.Call(flagsGetter, pattern) : flags; 20682 return new RegExp(P, F); 20683 } else if (patternIsRegExp) { 20684 P = pattern.source; 20685 F = typeof flags === 'undefined' ? pattern.flags : flags; 20686 } 20687 return new OrigRegExp(pattern, flags); 20688 }; 20689 }()); 20690 wrapConstructor(OrigRegExp, RegExpShim, { 20691 $input: true // Chrome < v39 & Opera < 26 have a nonstandard "$input" property 20692 }); 20693 RegExp = RegExpShim; // eslint-disable-line no-global-assign 20694 Value.redefine(globals, 'RegExp', RegExpShim); 20695 } 20696 20697 if (supportsDescriptors) { 20698 var regexGlobals = { 20699 input: '$_', 20700 lastMatch: '$&', 20701 lastParen: '$+', 20702 leftContext: '$`', 20703 rightContext: '$\'' 20704 }; 20705 _forEach(keys(regexGlobals), function (prop) { 20706 if (prop in RegExp && !(regexGlobals[prop] in RegExp)) { 20707 Value.getter(RegExp, regexGlobals[prop], function get() { 20708 return RegExp[prop]; 20709 }); 20710 } 20711 }); 20712 } 20713 addDefaultSpecies(RegExp); 20714 20715 var inverseEpsilon = 1 / Number.EPSILON; 20716 var roundTiesToEven = function roundTiesToEven(n) { 20717 // Even though this reduces down to `return n`, it takes advantage of built-in rounding. 20718 return (n + inverseEpsilon) - inverseEpsilon; 20719 }; 20720 var BINARY_32_EPSILON = Math.pow(2, -23); 20721 var BINARY_32_MAX_VALUE = Math.pow(2, 127) * (2 - BINARY_32_EPSILON); 20722 var BINARY_32_MIN_VALUE = Math.pow(2, -126); 20723 var E = Math.E; 20724 var LOG2E = Math.LOG2E; 20725 var LOG10E = Math.LOG10E; 20726 var numberCLZ = Number.prototype.clz; 20727 delete Number.prototype.clz; // Safari 8 has Number#clz 20728 20729 var MathShims = { 20730 acosh: function acosh(value) { 20731 var x = Number(value); 20732 if (numberIsNaN(x) || value < 1) { return NaN; } 20733 if (x === 1) { return 0; } 20734 if (x === Infinity) { return x; } 20735 20736 var xInvSquared = 1 / (x * x); 20737 if (x < 2) { 20738 return _log1p(x - 1 + (_sqrt(1 - xInvSquared) * x)); 20739 } 20740 var halfX = x / 2; 20741 return _log1p(halfX + (_sqrt(1 - xInvSquared) * halfX) - 1) + (1 / LOG2E); 20742 }, 20743 20744 asinh: function asinh(value) { 20745 var x = Number(value); 20746 if (x === 0 || !globalIsFinite(x)) { 20747 return x; 20748 } 20749 20750 var a = _abs(x); 20751 var aSquared = a * a; 20752 var s = _sign(x); 20753 if (a < 1) { 20754 return s * _log1p(a + (aSquared / (_sqrt(aSquared + 1) + 1))); 20755 } 20756 return s * (_log1p((a / 2) + (_sqrt(1 + (1 / aSquared)) * a / 2) - 1) + (1 / LOG2E)); 20757 }, 20758 20759 atanh: function atanh(value) { 20760 var x = Number(value); 20761 20762 if (x === 0) { return x; } 20763 if (x === -1) { return -Infinity; } 20764 if (x === 1) { return Infinity; } 20765 if (numberIsNaN(x) || x < -1 || x > 1) { 20766 return NaN; 20767 } 20768 20769 var a = _abs(x); 20770 return _sign(x) * _log1p(2 * a / (1 - a)) / 2; 20771 }, 20772 20773 cbrt: function cbrt(value) { 20774 var x = Number(value); 20775 if (x === 0) { return x; } 20776 var negate = x < 0; 20777 var result; 20778 if (negate) { x = -x; } 20779 if (x === Infinity) { 20780 result = Infinity; 20781 } else { 20782 result = _exp(_log(x) / 3); 20783 // from http://en.wikipedia.org/wiki/Cube_root#Numerical_methods 20784 result = ((x / (result * result)) + (2 * result)) / 3; 20785 } 20786 return negate ? -result : result; 20787 }, 20788 20789 clz32: function clz32(value) { 20790 // See https://bugs.ecmascript.org/show_bug.cgi?id=2465 20791 var x = Number(value); 20792 var number = ES.ToUint32(x); 20793 if (number === 0) { 20794 return 32; 20795 } 20796 return numberCLZ ? ES.Call(numberCLZ, number) : 31 - _floor(_log(number + 0.5) * LOG2E); 20797 }, 20798 20799 cosh: function cosh(value) { 20800 var x = Number(value); 20801 if (x === 0) { return 1; } // +0 or -0 20802 if (numberIsNaN(x)) { return NaN; } 20803 if (!globalIsFinite(x)) { return Infinity; } 20804 20805 var t = _exp(_abs(x) - 1); 20806 return (t + (1 / (t * E * E))) * (E / 2); 20807 }, 20808 20809 expm1: function expm1(value) { 20810 var x = Number(value); 20811 if (x === -Infinity) { return -1; } 20812 if (!globalIsFinite(x) || x === 0) { return x; } 20813 if (_abs(x) > 0.5) { 20814 return _exp(x) - 1; 20815 } 20816 // A more precise approximation using Taylor series expansion 20817 // from https://github.com/paulmillr/es6-shim/issues/314#issuecomment-70293986 20818 var t = x; 20819 var sum = 0; 20820 var n = 1; 20821 while (sum + t !== sum) { 20822 sum += t; 20823 n += 1; 20824 t *= x / n; 20825 } 20826 return sum; 20827 }, 20828 20829 hypot: function hypot(x, y) { 20830 var result = 0; 20831 var largest = 0; 20832 for (var i = 0; i < arguments.length; ++i) { 20833 var value = _abs(Number(arguments[i])); 20834 if (largest < value) { 20835 result *= (largest / value) * (largest / value); 20836 result += 1; 20837 largest = value; 20838 } else { 20839 result += value > 0 ? (value / largest) * (value / largest) : value; 20840 } 20841 } 20842 return largest === Infinity ? Infinity : largest * _sqrt(result); 20843 }, 20844 20845 log2: function log2(value) { 20846 return _log(value) * LOG2E; 20847 }, 20848 20849 log10: function log10(value) { 20850 return _log(value) * LOG10E; 20851 }, 20852 20853 log1p: _log1p, 20854 20855 sign: _sign, 20856 20857 sinh: function sinh(value) { 20858 var x = Number(value); 20859 if (!globalIsFinite(x) || x === 0) { return x; } 20860 20861 var a = _abs(x); 20862 if (a < 1) { 20863 var u = Math.expm1(a); 20864 return _sign(x) * u * (1 + (1 / (u + 1))) / 2; 20865 } 20866 var t = _exp(a - 1); 20867 return _sign(x) * (t - (1 / (t * E * E))) * (E / 2); 20868 }, 20869 20870 tanh: function tanh(value) { 20871 var x = Number(value); 20872 if (numberIsNaN(x) || x === 0) { return x; } 20873 // can exit early at +-20 as JS loses precision for true value at this integer 20874 if (x >= 20) { return 1; } 20875 if (x <= -20) { return -1; } 20876 20877 return (Math.expm1(x) - Math.expm1(-x)) / (_exp(x) + _exp(-x)); 20878 }, 20879 20880 trunc: function trunc(value) { 20881 var x = Number(value); 20882 return x < 0 ? -_floor(-x) : _floor(x); 20883 }, 20884 20885 imul: function imul(x, y) { 20886 // taken from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/imul 20887 var a = ES.ToUint32(x); 20888 var b = ES.ToUint32(y); 20889 var ah = (a >>> 16) & 0xffff; 20890 var al = a & 0xffff; 20891 var bh = (b >>> 16) & 0xffff; 20892 var bl = b & 0xffff; 20893 // the shift by 0 fixes the sign on the high part 20894 // the final |0 converts the unsigned value into a signed value 20895 return (al * bl) + ((((ah * bl) + (al * bh)) << 16) >>> 0) | 0; 20896 }, 20897 20898 fround: function fround(x) { 20899 var v = Number(x); 20900 if (v === 0 || v === Infinity || v === -Infinity || numberIsNaN(v)) { 20901 return v; 20902 } 20903 var sign = _sign(v); 20904 var abs = _abs(v); 20905 if (abs < BINARY_32_MIN_VALUE) { 20906 return sign * roundTiesToEven(abs / BINARY_32_MIN_VALUE / BINARY_32_EPSILON) * BINARY_32_MIN_VALUE * BINARY_32_EPSILON; 20907 } 20908 // Veltkamp's splitting (?) 20909 var a = (1 + (BINARY_32_EPSILON / Number.EPSILON)) * abs; 20910 var result = a - (a - abs); 20911 if (result > BINARY_32_MAX_VALUE || numberIsNaN(result)) { 20912 return sign * Infinity; 20913 } 20914 return sign * result; 20915 } 20916 }; 20917 20918 var withinULPDistance = function withinULPDistance(result, expected, distance) { 20919 return _abs(1 - (result / expected)) / Number.EPSILON < (distance || 8); 20920 }; 20921 20922 defineProperties(Math, MathShims); 20923 // Chrome < 40 sinh returns â for large numbers 20924 defineProperty(Math, 'sinh', MathShims.sinh, Math.sinh(710) === Infinity); 20925 // Chrome < 40 cosh returns â for large numbers 20926 defineProperty(Math, 'cosh', MathShims.cosh, Math.cosh(710) === Infinity); 20927 // IE 11 TP has an imprecise log1p: reports Math.log1p(-1e-17) as 0 20928 defineProperty(Math, 'log1p', MathShims.log1p, Math.log1p(-1e-17) !== -1e-17); 20929 // IE 11 TP has an imprecise asinh: reports Math.asinh(-1e7) as not exactly equal to -Math.asinh(1e7) 20930 defineProperty(Math, 'asinh', MathShims.asinh, Math.asinh(-1e7) !== -Math.asinh(1e7)); 20931 // Chrome < 54 asinh returns â for large numbers and should not 20932 defineProperty(Math, 'asinh', MathShims.asinh, Math.asinh(1e+300) === Infinity); 20933 // Chrome < 54 atanh incorrectly returns 0 for large numbers 20934 defineProperty(Math, 'atanh', MathShims.atanh, Math.atanh(1e-300) === 0); 20935 // Chrome 40 has an imprecise Math.tanh with very small numbers 20936 defineProperty(Math, 'tanh', MathShims.tanh, Math.tanh(-2e-17) !== -2e-17);
20937 // Chrome 40 loses Math.acosh precision with high numbers 20938 defineProperty(Math, 'acosh', MathShims.acosh, Math.acosh(Number.MAX_VALUE) === Infinity); 20939 // Chrome < 54 has an inaccurate acosh for EPSILON deltas 20940 defineProperty(Math, 'acosh', MathShims.acosh, !withinULPDistance(Math.acosh(1 + Number.EPSILON), Math.sqrt(2 * Number.EPSILON))); 20941 // Firefox 38 on Windows 20942 defineProperty(Math, 'cbrt', MathShims.cbrt, !withinULPDistance(Math.cbrt(1e-300), 1e-100)); 20943 // node 0.11 has an imprecise Math.sinh with very small numbers 20944 defineProperty(Math, 'sinh', MathShims.sinh, Math.sinh(-2e-17) !== -2e-17); 20945 // FF 35 on Linux reports 22025.465794806725 for Math.expm1(10) 20946 var expm1OfTen = Math.expm1(10); 20947 defineProperty(Math, 'expm1', MathShims.expm1, expm1OfTen > 22025.465794806719 || expm1OfTen < 22025.4657948067165168); 20948 // node v12.11 - v12.15 report NaN 20949 defineProperty(Math, 'hypot', MathShims.hypot, Math.hypot(Infinity, NaN) !== Infinity); 20950 20951 var origMathRound = Math.round; 20952 // breaks in e.g. Safari 8, Internet Explorer 11, Opera 12 20953 var roundHandlesBoundaryConditions = Math.round(0.5 - (Number.EPSILON / 4)) === 0 20954 && Math.round(-0.5 + (Number.EPSILON / 3.99)) === 1; 20955 20956 // When engines use Math.floor(x + 0.5) internally, Math.round can be buggy for large integers. 20957 // This behavior should be governed by "round to nearest, ties to even mode" 20958 // see http://www.ecma-international.org/ecma-262/6.0/#sec-terms-and-definitions-number-type 20959 // These are the boundary cases where it breaks. 20960 var smallestPositiveNumberWhereRoundBreaks = inverseEpsilon + 1; 20961 var largestPositiveNumberWhereRoundBreaks = (2 * inverseEpsilon) - 1; 20962 var roundDoesNotIncreaseIntegers = [ 20963 smallestPositiveNumberWhereRoundBreaks, 20964 largestPositiveNumberWhereRoundBreaks 20965 ].every(function (num) { 20966 return Math.round(num) === num; 20967 }); 20968 defineProperty(Math, 'round', function round(x) { 20969 var floor = _floor(x); 20970 var ceil = floor === -1 ? -0 : floor + 1; 20971 return x - floor < 0.5 ? floor : ceil; 20972 }, !roundHandlesBoundaryConditions || !roundDoesNotIncreaseIntegers); 20973 Value.preserveToString(Math.round, origMathRound); 20974 20975 var origImul = Math.imul; 20976 if (Math.imul(0xffffffff, 5) !== -5) { 20977 // Safari 6.1, at least, reports "0" for this value 20978 Math.imul = MathShims.imul; 20979 Value.preserveToString(Math.imul, origImul); 20980 } 20981 if (Math.imul.length !== 2) { 20982 // Safari 8.0.4 has a length of 1 20983 // fixed in https://bugs.webkit.org/show_bug.cgi?id=143658 20984 overrideNative(Math, 'imul', function imul(x, y) { 20985 return ES.Call(origImul, Math, arguments); 20986 }); 20987 } 20988 20989 // Promises 20990 // Simplest possible implementation; use a 3rd-party library if you 20991 // want the best possible speed and/or long stack traces. 20992 var PromiseShim = (function () { 20993 var setTimeout = globals.setTimeout; 20994 // some environments don't have setTimeout - no way to shim here. 20995 if (typeof setTimeout !== 'function' && typeof setTimeout !== 'object') { return; } 20996 20997 ES.IsPromise = function (promise) { 20998 if (!ES.TypeIsObject(promise)) { 20999 return false; 21000 } 21001 if (typeof promise._promise === 'undefined') { 21002 return false; // uninitialized, or missing our hidden field. 21003 } 21004 return true; 21005 }; 21006 21007 // "PromiseCapability" in the spec is what most promise implementations 21008 // call a "deferred". 21009 var PromiseCapability = function (C) { 21010 if (!ES.IsConstructor(C)) { 21011 throw new TypeError('Bad promise constructor'); 21012 } 21013 var capability = this; 21014 var resolver = function (resolve, reject) { 21015 if (capability.resolve !== void 0 || capability.reject !== void 0) { 21016 throw new TypeError('Bad Promise implementation!'); 21017 } 21018 capability.resolve = resolve; 21019 capability.reject = reject; 21020 }; 21021 // Initialize fields to inform optimizers about the object shape. 21022 capability.resolve = void 0; 21023 capability.reject = void 0; 21024 capability.promise = new C(resolver); 21025 if (!(ES.IsCallable(capability.resolve) && ES.IsCallable(capability.reject))) { 21026 throw new TypeError('Bad promise constructor'); 21027 } 21028 }; 21029 21030 // find an appropriate setImmediate-alike 21031 var makeZeroTimeout; 21032 if (typeof window !== 'undefined' && ES.IsCallable(window.postMessage)) { 21033 makeZeroTimeout = function () { 21034 // from http://dbaron.org/log/20100309-faster-timeouts 21035 var timeouts = []; 21036 var messageName = 'zero-timeout-message';
21037 var setZeroTimeout = function (fn) { 21038 _push(timeouts, fn); 21039 window.postMessage(messageName, '*'); 21040 }; 21041 var handleMessage = function (event) { 21042 if (event.source === window && event.data === messageName) { 21043 event.stopPropagation(); 21044 if (timeouts.length === 0) { return; } 21045 var fn = _shift(timeouts); 21046 fn(); 21047 } 21048 }; 21049 window.addEventListener('message', handleMessage, true); 21050 return setZeroTimeout; 21051 }; 21052 } 21053 var makePromiseAsap = function () { 21054 // An efficient task-scheduler based on a pre-existing Promise 21055 // implementation, which we can use even if we override the 21056 // global Promise below (in order to workaround bugs) 21057 // https://github.com/Raynos/observ-hash/issues/2#issuecomment-35857671 21058 var P = globals.Promise; 21059 var pr = P && P.resolve && P.resolve(); 21060 return pr && function (task) { 21061 return pr.then(task); 21062 }; 21063 }; 21064 var enqueue = ES.IsCallable(globals.setImmediate) 21065 ? globals.setImmediate 21066 : ( 21067 typeof process === 'object' && process.nextTick 21068 ? process.nextTick 21069 : makePromiseAsap() || (ES.IsCallable(makeZeroTimeout) ? makeZeroTimeout() : function (task) { setTimeout(task, 0); }) 21070 ); // fallback 21071 21072 // Constants for Promise implementation 21073 var PROMISE_IDENTITY = function (x) { return x; }; 21074 var PROMISE_THROWER = function (e) { throw e; }; 21075 var PROMISE_PENDING = 0; 21076 var PROMISE_FULFILLED = 1; 21077 var PROMISE_REJECTED = 2; 21078 // We store fulfill/reject handlers and capabilities in a single array. 21079 var PROMISE_FULFILL_OFFSET = 0; 21080 var PROMISE_REJECT_OFFSET = 1; 21081 var PROMISE_CAPABILITY_OFFSET = 2; 21082 // This is used in an optimization for chaining promises via then. 21083 var PROMISE_FAKE_CAPABILITY = {}; 21084 21085 var enqueuePromiseReactionJob = function (handler, capability, argument) { 21086 enqueue(function () { 21087 promiseReactionJob(handler, capability, argument); 21088 }); 21089 }; 21090 21091 var promiseReactionJob = function (handler, promiseCapability, argument) { 21092 var handlerResult, f; 21093 if (promiseCapability === PROMISE_FAKE_CAPABILITY) { 21094 // Fast case, when we don't actually need to chain through to a 21095 // (real) promiseCapability. 21096 return handler(argument); 21097 } 21098 try { 21099 handlerResult = handler(argument); 21100 f = promiseCapability.resolve; 21101 } catch (e) { 21102 handlerResult = e; 21103 f = promiseCapability.reject; 21104 } 21105 f(handlerResult); 21106 }; 21107 21108 var fulfillPromise = function (promise, value) { 21109 var _promise = promise._promise; 21110 var length = _promise.reactionLength; 21111 if (length > 0) { 21112 enqueuePromiseReactionJob( 21113 _promise.fulfillReactionHandler0, 21114 _promise.reactionCapability0, 21115 value 21116 ); 21117 _promise.fulfillReactionHandler0 = void 0; 21118 _promise.rejectReactions0 = void 0; 21119 _promise.reactionCapability0 = void 0; 21120 if (length > 1) { 21121 for (var i = 1, idx = 0; i < length; i++, idx += 3) { 21122 enqueuePromiseReactionJob( 21123 _promise[idx + PROMISE_FULFILL_OFFSET], 21124 _promise[idx + PROMISE_CAPABILITY_OFFSET], 21125 value 21126 ); 21127 promise[idx + PROMISE_FULFILL_OFFSET] = void 0; 21128 promise[idx + PROMISE_REJECT_OFFSET] = void 0; 21129 promise[idx + PROMISE_CAPABILITY_OFFSET] = void 0; 21130 } 21131 } 21132 } 21133 _promise.result = value; 21134 _promise.state = PROMISE_FULFILLED; 21135 _promise.reactionLength = 0; 21136 }; 21137 21138 var rejectPromise = function (promise, reason) { 21139 var _promise = promise._promise; 21140 var length = _promise.reactionLength; 21141 if (length > 0) { 21142 enqueuePromiseReactionJob( 21143 _promise.rejectReactionHandler0, 21144 _promise.reactionCapability0, 21145 reason 21146 ); 21147 _promise.fulfillReactionHandler0 = void 0; 21148 _promise.rejectReactions0 = void 0; 21149 _promise.reactionCapability0 = void 0; 21150 if (length > 1) { 21151 for (var i = 1, idx = 0; i < length; i++, idx += 3) { 21152 enqueuePromiseReactionJob( 21153 _promise[idx + PROMISE_REJECT_OFFSET], 21154 _promise[idx + PROMISE_CAPABILITY_OFFSET], 21155 reason 21156 ); 21157 promise[idx + PROMISE_FULFILL_OFFSET] = void 0; 21158 promise[idx + PROMISE_REJECT_OFFSET] = void 0; 21159 promise[idx + PROMISE_CAPABILITY_OFFSET] = void 0; 21160 } 21161 } 21162 } 21163 _promise.result = reason; 21164 _promise.state = PROMISE_REJECTED; 21165 _promise.reactionLength = 0; 21166 }; 21167 21168 var createResolvingFunctions = function (promise) { 21169 var alreadyResolved = false;
21170 var resolve = function (resolution) { 21171 var then; 21172 if (alreadyResolved) { return; } 21173 alreadyResolved = true; 21174 if (resolution === promise) { 21175 return rejectPromise(promise, new TypeError('Self resolution')); 21176 } 21177 if (!ES.TypeIsObject(resolution)) { 21178 return fulfillPromise(promise, resolution); 21179 } 21180 try { 21181 then = resolution.then; 21182 } catch (e) { 21183 return rejectPromise(promise, e); 21184 } 21185 if (!ES.IsCallable(then)) { 21186 return fulfillPromise(promise, resolution); 21187 } 21188 enqueue(function () { 21189 promiseResolveThenableJob(promise, resolution, then); 21190 }); 21191 }; 21192 var reject = function (reason) { 21193 if (alreadyResolved) { return; } 21194 alreadyResolved = true; 21195 return rejectPromise(promise, reason); 21196 }; 21197 return { resolve: resolve, reject: reject }; 21198 }; 21199 21200 var optimizedThen = function (then, thenable, resolve, reject) { 21201 // Optimization: since we discard the result, we can pass our 21202 // own then implementation a special hint to let it know it 21203 // doesn't have to create it. (The PROMISE_FAKE_CAPABILITY 21204 // object is local to this implementation and unforgeable outside.) 21205 if (then === Promise$prototype$then) { 21206 _call(then, thenable, resolve, reject, PROMISE_FAKE_CAPABILITY); 21207 } else { 21208 _call(then, thenable, resolve, reject); 21209 } 21210 }; 21211 var promiseResolveThenableJob = function (promise, thenable, then) { 21212 var resolvingFunctions = createResolvingFunctions(promise); 21213 var resolve = resolvingFunctions.resolve; 21214 var reject = resolvingFunctions.reject; 21215 try { 21216 optimizedThen(then, thenable, resolve, reject); 21217 } catch (e) { 21218 reject(e); 21219 } 21220 }; 21221 21222 var Promise$prototype, Promise$prototype$then; 21223 var Promise = (function () { 21224 var PromiseShim = function Promise(resolver) { 21225 if (!(this instanceof PromiseShim)) { 21226 throw new TypeError('Constructor Promise requires "new"'); 21227 } 21228 if (this && this._promise) { 21229 throw new TypeError('Bad construction'); 21230 } 21231 // see https://bugs.ecmascript.org/show_bug.cgi?id=2482 21232 if (!ES.IsCallable(resolver)) { 21233 throw new TypeError('not a valid resolver'); 21234 } 21235 var promise = emulateES6construct(this, PromiseShim, Promise$prototype, { 21236 _promise: { 21237 result: void 0, 21238 state: PROMISE_PENDING, 21239 // The first member of the "reactions" array is inlined here, 21240 // since most promises only have one reaction. 21241 // We've also exploded the 'reaction' object to inline the 21242 // "handler" and "capability" fields, since both fulfill and 21243 // reject reactions share the same capability. 21244 reactionLength: 0, 21245 fulfillReactionHandler0: void 0, 21246 rejectReactionHandler0: void 0, 21247 reactionCapability0: void 0 21248 } 21249 }); 21250 var resolvingFunctions = createResolvingFunctions(promise); 21251 var reject = resolvingFunctions.reject; 21252 try { 21253 resolver(resolvingFunctions.resolve, reject); 21254 } catch (e) { 21255 reject(e); 21256 } 21257 return promise; 21258 }; 21259 return PromiseShim; 21260 }()); 21261 Promise$prototype = Promise.prototype; 21262 21263 var _promiseAllResolver = function (index, values, capability, remaining) { 21264 var alreadyCalled = false; 21265 return function (x) { 21266 if (alreadyCalled) { return; } 21267 alreadyCalled = true; 21268 values[index] = x; 21269 if ((--remaining.count) === 0) { 21270 var resolve = capability.resolve; 21271 resolve(values); // call w/ this===undefined 21272 } 21273 }; 21274 }; 21275 21276 var performPromiseAll = function (iteratorRecord, C, resultCapability) { 21277 var it = iteratorRecord.iterator; 21278 var values = []; 21279 var remaining = { count: 1 }; 21280 var next, nextValue; 21281 var index = 0; 21282 while (true) { 21283 try { 21284 next = ES.IteratorStep(it); 21285 if (next === false) { 21286 iteratorRecord.done = true; 21287 break; 21288 } 21289 nextValue = next.value; 21290 } catch (e) { 21291 iteratorRecord.done = true; 21292 throw e; 21293 } 21294 values[index] = void 0;
21295 var nextPromise = C.resolve(nextValue); 21296 var resolveElement = _promiseAllResolver( 21297 index, 21298 values, 21299 resultCapability, 21300 remaining 21301 ); 21302 remaining.count += 1; 21303 optimizedThen(nextPromise.then, nextPromise, resolveElement, resultCapability.reject); 21304 index += 1; 21305 } 21306 if ((--remaining.count) === 0) { 21307 var resolve = resultCapability.resolve; 21308 resolve(values); // call w/ this===undefined 21309 } 21310 return resultCapability.promise; 21311 }; 21312 21313 var performPromiseRace = function (iteratorRecord, C, resultCapability) { 21314 var it = iteratorRecord.iterator; 21315 var next, nextValue, nextPromise; 21316 while (true) { 21317 try { 21318 next = ES.IteratorStep(it); 21319 if (next === false) { 21320 // NOTE: If iterable has no items, resulting promise will never 21321 // resolve; see: 21322 // https://github.com/domenic/promises-unwrapping/issues/75 21323 // https://bugs.ecmascript.org/show_bug.cgi?id=2515 21324 iteratorRecord.done = true; 21325 break; 21326 } 21327 nextValue = next.value; 21328 } catch (e) { 21329 iteratorRecord.done = true; 21330 throw e; 21331 }
21332 nextPromise = C.resolve(nextValue); 21333 optimizedThen(nextPromise.then, nextPromise, resultCapability.resolve, resultCapability.reject); 21334 } 21335 return resultCapability.promise; 21336 }; 21337 21338 defineProperties(Promise, { 21339 all: function all(iterable) { 21340 var C = this; 21341 if (!ES.TypeIsObject(C)) { 21342 throw new TypeError('Promise is not object'); 21343 } 21344 var capability = new PromiseCapability(C); 21345 var iterator, iteratorRecord; 21346 try { 21347 iterator = ES.GetIterator(iterable); 21348 iteratorRecord = { iterator: iterator, done: false }; 21349 return performPromiseAll(iteratorRecord, C, capability); 21350 } catch (e) { 21351 var exception = e; 21352 if (iteratorRecord && !iteratorRecord.done) { 21353 try { 21354 ES.IteratorClose(iterator, true); 21355 } catch (ee) { 21356 exception = ee; 21357 } 21358 } 21359 var reject = capability.reject; 21360 reject(exception); 21361 return capability.promise; 21362 } 21363 }, 21364 21365 race: function race(iterable) { 21366 var C = this; 21367 if (!ES.TypeIsObject(C)) { 21368 throw new TypeError('Promise is not object'); 21369 } 21370 var capability = new PromiseCapability(C); 21371 var iterator, iteratorRecord; 21372 try { 21373 iterator = ES.GetIterator(iterable); 21374 iteratorRecord = { iterator: iterator, done: false }; 21375 return performPromiseRace(iteratorRecord, C, capability); 21376 } catch (e) { 21377 var exception = e; 21378 if (iteratorRecord && !iteratorRecord.done) { 21379 try { 21380 ES.IteratorClose(iterator, true); 21381 } catch (ee) { 21382 exception = ee; 21383 } 21384 } 21385 var reject = capability.reject; 21386 reject(exception); 21387 return capability.promise; 21388 } 21389 }, 21390 21391 reject: function reject(reason) { 21392 var C = this; 21393 if (!ES.TypeIsObject(C)) { 21394 throw new TypeError('Bad promise constructor'); 21395 } 21396 var capability = new PromiseCapability(C); 21397 var rejectFunc = capability.reject; 21398 rejectFunc(reason); // call with this===undefined 21399 return capability.promise; 21400 }, 21401 21402 resolve: function resolve(v) { 21403 // See https://esdiscuss.org/topic/fixing-promise-resolve for spec 21404 var C = this; 21405 if (!ES.TypeIsObject(C)) { 21406 throw new TypeError('Bad promise constructor'); 21407 } 21408 if (ES.IsPromise(v)) { 21409 var constructor = v.constructor; 21410 if (constructor === C) { 21411 return v; 21412 } 21413 } 21414 var capability = new PromiseCapability(C); 21415 var resolveFunc = capability.resolve; 21416 resolveFunc(v); // call with this===undefined 21417 return capability.promise; 21418 } 21419 }); 21420 21421 defineProperties(Promise$prototype, { 21422 'catch': function (onRejected) { 21423 return this.then(null, onRejected); 21424 }, 21425 21426 then: function then(onFulfilled, onRejected) { 21427 var promise = this; 21428 if (!ES.IsPromise(promise)) { throw new TypeError('not a promise'); } 21429 var C = ES.SpeciesConstructor(promise, Promise); 21430 var resultCapability; 21431 var returnValueIsIgnored = arguments.length > 2 && arguments[2] === PROMISE_FAKE_CAPABILITY; 21432 if (returnValueIsIgnored && C === Promise) { 21433 resultCapability = PROMISE_FAKE_CAPABILITY; 21434 } else { 21435 resultCapability = new PromiseCapability(C); 21436 } 21437 // PerformPromiseThen(promise, onFulfilled, onRejected, resultCapability) 21438 // Note that we've split the 'reaction' object into its two 21439 // components, "capabilities" and "handler" 21440 // "capabilities" is always equal to `resultCapability` 21441 var fulfillReactionHandler = ES.IsCallable(onFulfilled) ? onFulfilled : PROMISE_IDENTITY; 21442 var rejectReactionHandler = ES.IsCallable(onRejected) ? onRejected : PROMISE_THROWER; 21443 var _promise = promise._promise; 21444 var value; 21445 if (_promise.state === PROMISE_PENDING) { 21446 if (_promise.reactionLength === 0) { 21447 _promise.fulfillReactionHandler0 = fulfillReactionHandler; 21448 _promise.rejectReactionHandler0 = rejectReactionHandler; 21449 _promise.reactionCapability0 = resultCapability; 21450 } else { 21451 var idx = 3 * (_promise.reactionLength - 1); 21452 _promise[idx + PROMISE_FULFILL_OFFSET] = fulfillReactionHandler; 21453 _promise[idx + PROMISE_REJECT_OFFSET] = rejectReactionHandler; 21454 _promise[idx + PROMISE_CAPABILITY_OFFSET] = resultCapability; 21455 } 21456 _promise.reactionLength += 1; 21457 } else if (_promise.state === PROMISE_FULFILLED) { 21458 value = _promise.result; 21459 enqueuePromiseReactionJob( 21460 fulfillReactionHandler, 21461 resultCapability, 21462 value 21463 ); 21464 } else if (_promise.state === PROMISE_REJECTED) { 21465 value = _promise.result; 21466 enqueuePromiseReactionJob( 21467 rejectReactionHandler, 21468 resultCapability, 21469 value 21470 ); 21471 } else { 21472 throw new TypeError('unexpected Promise state'); 21473 } 21474 return resultCapability.promise; 21475 } 21476 }); 21477 // This helps the optimizer by ensuring that methods which take 21478 // capabilities aren't polymorphic. 21479 PROMISE_FAKE_CAPABILITY = new PromiseCapability(Promise); 21480 Promise$prototype$then = Promise$prototype.then; 21481 21482 return Promise; 21483 }()); 21484 21485 // Chrome's native Promise has extra methods that it shouldn't have. Let's remove them. 21486 if (globals.Promise) { 21487 delete globals.Promise.accept; 21488 delete globals.Promise.defer; 21489 delete globals.Promise.prototype.chain; 21490 } 21491 21492 if (typeof PromiseShim === 'function') { 21493 // export the Promise constructor. 21494 defineProperties(globals, { Promise: PromiseShim }); 21495 // In Chrome 33 (and thereabouts) Promise is defined, but the 21496 // implementation is buggy in a number of ways. Let's check subclassing 21497 // support to see if we have a buggy implementation. 21498 var promiseSupportsSubclassing = supportsSubclassing(globals.Promise, function (S) { 21499 return S.resolve(42).then(function () {}) instanceof S; 21500 }); 21501 var promiseIgnoresNonFunctionThenCallbacks = !throwsError(function () { 21502 return globals.Promise.reject(42).then(null, 5).then(null, noop); 21503 });
21504 var promiseRequiresObjectContext = throwsError(function () { return globals.Promise.call(3, noop); }); 21505 // Promise.resolve() was errata'ed late in the ES6 process. 21506 // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1170742 21507 // https://code.google.com/p/v8/issues/detail?id=4161 21508 // It serves as a proxy for a number of other bugs in early Promise 21509 // implementations. 21510 var promiseResolveBroken = (function (Promise) { 21511 var p = Promise.resolve(5); 21512 p.constructor = {}; 21513 var p2 = Promise.resolve(p); 21514 try { 21515 p2.then(null, noop).then(null, noop); // avoid "uncaught rejection" warnings in console 21516 } catch (e) { 21517 return true; // v8 native Promises break here https://code.google.com/p/chromium/issues/detail?id=575314 21518 } 21519 return p === p2; // This *should* be false! 21520 }(globals.Promise)); 21521 21522 // Chrome 46 (probably older too) does not retrieve a thenable's .then synchronously 21523 var getsThenSynchronously = supportsDescriptors && (function () { 21524 var count = 0; 21525 // eslint-disable-next-line getter-return 21526 var thenable = Object.defineProperty({}, 'then', { get: function () { count += 1; } }); 21527 Promise.resolve(thenable); 21528 return count === 1; 21529 }()); 21530 21531 var BadResolverPromise = function BadResolverPromise(executor) { 21532 var p = new Promise(executor); 21533 executor(3, function () {}); 21534 this.then = p.then; 21535 this.constructor = BadResolverPromise; 21536 }; 21537 BadResolverPromise.prototype = Promise.prototype; 21538 BadResolverPromise.all = Promise.all; 21539 // Chrome Canary 49 (probably older too) has some implementation bugs 21540 var hasBadResolverPromise = valueOrFalseIfThrows(function () { 21541 return !!BadResolverPromise.all([1, 2]); 21542 }); 21543 21544 if ( 21545 !promiseSupportsSubclassing 21546 || !promiseIgnoresNonFunctionThenCallbacks 21547 || !promiseRequiresObjectContext 21548 || promiseResolveBroken 21549 || !getsThenSynchronously 21550 || hasBadResolverPromise 21551 ) { 21552 Promise = PromiseShim; // eslint-disable-line no-global-assign 21553 overrideNative(globals, 'Promise', PromiseShim); 21554 } 21555 if (Promise.all.length !== 1) { 21556 var origAll = Promise.all; 21557 overrideNative(Promise, 'all', function all(iterable) { 21558 return ES.Call(origAll, this, arguments); 21559 }); 21560 } 21561 if (Promise.race.length !== 1) { 21562 var origRace = Promise.race; 21563 overrideNative(Promise, 'race', function race(iterable) { 21564 return ES.Call(origRace, this, arguments); 21565 }); 21566 } 21567 if (Promise.resolve.length !== 1) { 21568 var origResolve = Promise.resolve; 21569 overrideNative(Promise, 'resolve', function resolve(x) { 21570 return ES.Call(origResolve, this, arguments); 21571 }); 21572 } 21573 if (Promise.reject.length !== 1) { 21574 var origReject = Promise.reject; 21575 overrideNative(Promise, 'reject', function reject(r) { 21576 return ES.Call(origReject, this, arguments); 21577 }); 21578 } 21579 ensureEnumerable(Promise, 'all'); 21580 ensureEnumerable(Promise, 'race'); 21581 ensureEnumerable(Promise, 'resolve'); 21582 ensureEnumerable(Promise, 'reject'); 21583 addDefaultSpecies(Promise); 21584 } 21585 21586 // Map and Set require a true ES5 environment 21587 // Their fast path also requires that the environment preserve 21588 // property insertion order, which is not guaranteed by the spec. 21589 var testOrder = function (a) { 21590 var b = keys(_reduce(a, function (o, k) { 21591 o[k] = true; 21592 return o; 21593 }, {})); 21594 return a.join(':') === b.join(':'); 21595 }; 21596 var preservesInsertionOrder = testOrder(['z', 'a', 'bb']); 21597 // some engines (eg, Chrome) only preserve insertion order for string keys 21598 var preservesNumericInsertionOrder = testOrder(['z', 1, 'a', '3', 2]); 21599 21600 if (supportsDescriptors) { 21601 21602 var fastkey = function fastkey(key, skipInsertionOrderCheck) { 21603 if (!skipInsertionOrderCheck && !preservesInsertionOrder) { 21604 return null; 21605 } 21606 if (isNullOrUndefined(key)) { 21607 return '^' + ES.ToString(key); 21608 } else if (typeof key === 'string') { 21609 return '$' + key; 21610 } else if (typeof key === 'number') { 21611 // note that -0 will get coerced to "0" when used as a property key 21612 if (!preservesNumericInsertionOrder) { 21613 return 'n' + key; 21614 } 21615 return key; 21616 } else if (typeof key === 'boolean') { 21617 return 'b' + key; 21618 } 21619 return null; 21620 }; 21621 21622 var emptyObject = function emptyObject() { 21623 // accomodate some older not-quite-ES5 browsers 21624 return Object.create ? Object.create(null) : {}; 21625 }; 21626 21627 var addIterableToMap = function addIterableToMap(MapConstructor, map, iterable) { 21628 if (isArray(iterable) || Type.string(iterable)) {
21629 _forEach(iterable, function (entry) { 21630 if (!ES.TypeIsObject(entry)) { 21631 throw new TypeError('Iterator value ' + entry + ' is not an entry object'); 21632 } 21633 map.set(entry[0], entry[1]); 21634 }); 21635 } else if (iterable instanceof MapConstructor) { 21636 _call(MapConstructor.prototype.forEach, iterable, function (value, key) { 21637 map.set(key, value); 21638 }); 21639 } else { 21640 var iter, adder; 21641 if (!isNullOrUndefined(iterable)) { 21642 adder = map.set; 21643 if (!ES.IsCallable(adder)) { throw new TypeError('bad map'); } 21644 iter = ES.GetIterator(iterable); 21645 } 21646 if (typeof iter !== 'undefined') { 21647 while (true) { 21648 var next = ES.IteratorStep(iter); 21649 if (next === false) { break; } 21650 var nextItem = next.value; 21651 try { 21652 if (!ES.TypeIsObject(nextItem)) { 21653 throw new TypeError('Iterator value ' + nextItem + ' is not an entry object'); 21654 } 21655 _call(adder, map, nextItem[0], nextItem[1]); 21656 } catch (e) { 21657 ES.IteratorClose(iter, true); 21658 throw e; 21659 } 21660 } 21661 } 21662 } 21663 }; 21664 var addIterableToSet = function addIterableToSet(SetConstructor, set, iterable) { 21665 if (isArray(iterable) || Type.string(iterable)) { 21666 _forEach(iterable, function (value) { 21667 set.add(value); 21668 }); 21669 } else if (iterable instanceof SetConstructor) { 21670 _call(SetConstructor.prototype.forEach, iterable, function (value) { 21671 set.add(value); 21672 }); 21673 } else { 21674 var iter, adder; 21675 if (!isNullOrUndefined(iterable)) { 21676 adder = set.add; 21677 if (!ES.IsCallable(adder)) { throw new TypeError('bad set'); } 21678 iter = ES.GetIterator(iterable); 21679 } 21680 if (typeof iter !== 'undefined') { 21681 while (true) { 21682 var next = ES.IteratorStep(iter); 21683 if (next === false) { break; } 21684 var nextValue = next.value; 21685 try { 21686 _call(adder, set, nextValue); 21687 } catch (e) { 21688 ES.IteratorClose(iter, true); 21689 throw e; 21690 } 21691 } 21692 } 21693 } 21694 }; 21695 21696 var collectionShims = { 21697 Map: (function () { 21698 21699 var empty = {}; 21700 21701 var MapEntry = function MapEntry(key, value) { 21702 this.key = key; 21703 this.value = value; 21704 this.next = null; 21705 this.prev = null; 21706 }; 21707 21708 MapEntry.prototype.isRemoved = function isRemoved() { 21709 return this.key === empty; 21710 }; 21711 21712 var isMap = function isMap(map) { 21713 return !!map._es6map; 21714 }; 21715 21716 var requireMapSlot = function requireMapSlot(map, method) { 21717 if (!ES.TypeIsObject(map) || !isMap(map)) { 21718 throw new TypeError('Method Map.prototype.' + method + ' called on incompatible receiver ' + ES.ToString(map)); 21719 } 21720 }; 21721 21722 var MapIterator = function MapIterator(map, kind) { 21723 requireMapSlot(map, '[[MapIterator]]'); 21724 defineProperty(this, 'head', map._head); 21725 defineProperty(this, 'i', this.head); 21726 defineProperty(this, 'kind', kind); 21727 }; 21728 21729 MapIterator.prototype = { 21730 isMapIterator: true, 21731 next: function next() { 21732 if (!this.isMapIterator) { 21733 throw new TypeError('Not a MapIterator'); 21734 } 21735 var i = this.i; 21736 var kind = this.kind; 21737 var head = this.head; 21738 if (typeof this.i === 'undefined') { 21739 return iteratorResult(); 21740 } 21741 while (i.isRemoved() && i !== head) { 21742 // back up off of removed entries 21743 i = i.prev; 21744 } 21745 // advance to next unreturned element. 21746 var result; 21747 while (i.next !== head) { 21748 i = i.next; 21749 if (!i.isRemoved()) { 21750 if (kind === 'key') { 21751 result = i.key; 21752 } else if (kind === 'value') { 21753 result = i.value; 21754 } else { 21755 result = [i.key, i.value]; 21756 } 21757 this.i = i; 21758 return iteratorResult(result); 21759 } 21760 } 21761 // once the iterator is done, it is done forever. 21762 this.i = void 0; 21763 return iteratorResult(); 21764 } 21765 }; 21766 addIterator(MapIterator.prototype); 21767 21768 var Map$prototype; 21769 var MapShim = function Map() { 21770 if (!(this instanceof Map)) { 21771 throw new TypeError('Constructor Map requires "new"'); 21772 } 21773 if (this && this._es6map) { 21774 throw new TypeError('Bad construction'); 21775 } 21776 var map = emulateES6construct(this, Map, Map$prototype, { 21777 _es6map: true, 21778 _head: null, 21779 _map: OrigMap ? new OrigMap() : null, 21780 _size: 0, 21781 _storage: emptyObject() 21782 }); 21783 21784 var head = new MapEntry(null, null); 21785 // circular doubly-linked list. 21786 /* eslint no-multi-assign: 1 */ 21787 head.next = head.prev = head; 21788 map._head = head; 21789 21790 // Optionally initialize map from iterable 21791 if (arguments.length > 0) { 21792 addIterableToMap(Map, map, arguments[0]); 21793 } 21794 return map; 21795 }; 21796 Map$prototype = MapShim.prototype; 21797 21798 Value.getter(Map$prototype, 'size', function () { 21799 if (typeof this._size === 'undefined') { 21800 throw new TypeError('size method called on incompatible Map'); 21801 } 21802 return this._size; 21803 }); 21804 21805 defineProperties(Map$prototype, { 21806 get: function get(key) { 21807 requireMapSlot(this, 'get'); 21808 var entry; 21809 var fkey = fastkey(key, true); 21810 if (fkey !== null) { 21811 // fast O(1) path 21812 entry = this._storage[fkey]; 21813 if (entry) { 21814 return entry.value; 21815 } 21816 return; 21817 21818 } 21819 if (this._map) { 21820 // fast object key path 21821 entry = origMapGet.call(this._map, key); 21822 if (entry) { 21823 return entry.value; 21824 } 21825 return; 21826 21827 } 21828 var head = this._head; 21829 var i = head; 21830 while ((i = i.next) !== head) { 21831 if (ES.SameValueZero(i.key, key)) { 21832 return i.value; 21833 } 21834 } 21835 }, 21836 21837 has: function has(key) { 21838 requireMapSlot(this, 'has'); 21839 var fkey = fastkey(key, true); 21840 if (fkey !== null) { 21841 // fast O(1) path 21842 return typeof this._storage[fkey] !== 'undefined'; 21843 } 21844 if (this._map) { 21845 // fast object key path 21846 return origMapHas.call(this._map, key); 21847 } 21848 var head = this._head; 21849 var i = head; 21850 while ((i = i.next) !== head) { 21851 if (ES.SameValueZero(i.key, key)) { 21852 return true; 21853 } 21854 } 21855 return false;
21856 }, 21857 21858 set: function set(key, value) { 21859 requireMapSlot(this, 'set'); 21860 var head = this._head; 21861 var i = head; 21862 var entry; 21863 var fkey = fastkey(key, true); 21864 if (fkey !== null) { 21865 // fast O(1) path 21866 if (typeof this._storage[fkey] !== 'undefined') { 21867 this._storage[fkey].value = value; 21868 return this; 21869 } 21870 entry = this._storage[fkey] = new MapEntry(key, value); /* eslint no-multi-assign: 1 */ 21871 i = head.prev; 21872 // fall through 21873 21874 } else if (this._map) { 21875 // fast object key path 21876 if (origMapHas.call(this._map, key)) { 21877 origMapGet.call(this._map, key).value = value; 21878 } else { 21879 entry = new MapEntry(key, value); 21880 origMapSet.call(this._map, key, entry); 21881 i = head.prev; 21882 // fall through 21883 } 21884 } 21885 while ((i = i.next) !== head) { 21886 if (ES.SameValueZero(i.key, key)) { 21887 i.value = value; 21888 return this; 21889 } 21890 } 21891 entry = entry || new MapEntry(key, value); 21892 if (ES.SameValue(-0, key)) { 21893 entry.key = +0; // coerce -0 to +0 in entry 21894 } 21895 entry.next = this._head; 21896 entry.prev = this._head.prev; 21897 entry.prev.next = entry; 21898 entry.next.prev = entry; 21899 this._size += 1; 21900 return this; 21901 }, 21902 21903 'delete': function (key) { 21904 requireMapSlot(this, 'delete'); 21905 var head = this._head; 21906 var i = head; 21907 var fkey = fastkey(key, true); 21908 if (fkey !== null) { 21909 // fast O(1) path 21910 if (typeof this._storage[fkey] === 'undefined') { 21911 return false; 21912 } 21913 i = this._storage[fkey].prev; 21914 delete this._storage[fkey]; 21915 // fall through 21916 } else if (this._map) { 21917 // fast object key path 21918 if (!origMapHas.call(this._map, key)) { 21919 return false; 21920 } 21921 i = origMapGet.call(this._map, key).prev; 21922 origMapDelete.call(this._map, key); 21923 // fall through 21924 } 21925 while ((i = i.next) !== head) { 21926 if (ES.SameValueZero(i.key, key)) { 21927 i.key = empty; 21928 i.value = empty; 21929 i.prev.next = i.next; 21930 i.next.prev = i.prev; 21931 this._size -= 1; 21932 return true; 21933 } 21934 } 21935 return false; 21936 }, 21937 21938 clear: function clear() { 21939 /* eslint no-multi-assign: 1 */ 21940 requireMapSlot(this, 'clear'); 21941 this._map = OrigMap ? new OrigMap() : null; 21942 this._size = 0; 21943 this._storage = emptyObject(); 21944 var head = this._head; 21945 var i = head; 21946 var p = i.next; 21947 while ((i = p) !== head) { 21948 i.key = empty; 21949 i.value = empty; 21950 p = i.next; 21951 i.next = i.prev = head; 21952 } 21953 head.next = head.prev = head; 21954 }, 21955 21956 keys: function keys() { 21957 requireMapSlot(this, 'keys'); 21958 return new MapIterator(this, 'key'); 21959 }, 21960 21961 values: function values() { 21962 requireMapSlot(this, 'values'); 21963 return new MapIterator(this, 'value'); 21964 }, 21965 21966 entries: function entries() { 21967 requireMapSlot(this, 'entries'); 21968 return new MapIterator(this, 'key+value'); 21969 }, 21970 21971 forEach: function forEach(callback) { 21972 requireMapSlot(this, 'forEach'); 21973 var context = arguments.length > 1 ? arguments[1] : null; 21974 var it = this.entries(); 21975 for (var entry = it.next(); !entry.done; entry = it.next()) { 21976 if (context) { 21977 _call(callback, context, entry.value[1], entry.value[0], this); 21978 } else { 21979 callback(entry.value[1], entry.value[0], this); 21980 } 21981 } 21982 } 21983 }); 21984 addIterator(Map$prototype, Map$prototype.entries); 21985 21986 return MapShim; 21987 }()), 21988 21989 Set: (function () { 21990 var isSet = function isSet(set) { 21991 return set._es6set && typeof set._storage !== 'undefined'; 21992 }; 21993 var requireSetSlot = function requireSetSlot(set, method) { 21994 if (!ES.TypeIsObject(set) || !isSet(set)) { 21995 // https://github.com/paulmillr/es6-shim/issues/176 21996 throw new TypeError('Set.prototype.' + method + ' called on incompatible receiver ' + ES.ToString(set)); 21997 } 21998 }; 21999 22000 // Creating a Map is expensive. To speed up the common case of 22001 // Sets containing only string or numeric keys, we use an object 22002 // as backing storage and lazily create a full Map only when 22003 // required. 22004 var Set$prototype; 22005 var SetShim = function Set() { 22006 if (!(this instanceof Set)) { 22007 throw new TypeError('Constructor Set requires "new"'); 22008 } 22009 if (this && this._es6set) { 22010 throw new TypeError('Bad construction'); 22011 } 22012 var set = emulateES6construct(this, Set, Set$prototype, { 22013 _es6set: true, 22014 '[[SetData]]': null, 22015 _storage: emptyObject() 22016 }); 22017 if (!set._es6set) { 22018 throw new TypeError('bad set'); 22019 } 22020 22021 // Optionally initialize Set from iterable 22022 if (arguments.length > 0) { 22023 addIterableToSet(Set, set, arguments[0]); 22024 } 22025 return set; 22026 }; 22027 Set$prototype = SetShim.prototype; 22028 22029 var decodeKey = function (key) { 22030 var k = key; 22031 if (k === '^null') { 22032 return null; 22033 } else if (k === '^undefined') { 22034 return void 0; 22035 } 22036 var first = k.charAt(0); 22037 if (first === '$') { 22038 return _strSlice(k, 1); 22039 } else if (first === 'n') { 22040 return +_strSlice(k, 1); 22041 } else if (first === 'b') { 22042 return k === 'btrue'; 22043 } 22044 22045 return +k; 22046 }; 22047 // Switch from the object backing storage to a full Map. 22048 var ensureMap = function ensureMap(set) { 22049 if (!set['[[SetData]]']) { 22050 var m = new collectionShims.Map(); 22051 set['[[SetData]]'] = m;
22052 _forEach(keys(set._storage), function (key) { 22053 var k = decodeKey(key); 22054 m.set(k, k); 22055 }); 22056 set['[[SetData]]'] = m; 22057 } 22058 set._storage = null; // free old backing storage 22059 }; 22060 22061 Value.getter(SetShim.prototype, 'size', function () { 22062 requireSetSlot(this, 'size'); 22063 if (this._storage) { 22064 return keys(this._storage).length; 22065 } 22066 ensureMap(this); 22067 return this['[[SetData]]'].size; 22068 }); 22069 22070 defineProperties(SetShim.prototype, { 22071 has: function has(key) { 22072 requireSetSlot(this, 'has'); 22073 var fkey; 22074 if (this._storage && (fkey = fastkey(key)) !== null) { 22075 return !!this._storage[fkey]; 22076 } 22077 ensureMap(this); 22078 return this['[[SetData]]'].has(key); 22079 }, 22080 22081 add: function add(key) { 22082 requireSetSlot(this, 'add'); 22083 var fkey; 22084 if (this._storage && (fkey = fastkey(key)) !== null) { 22085 this._storage[fkey] = true; 22086 return this; 22087 } 22088 ensureMap(this); 22089 this['[[SetData]]'].set(key, key); 22090 return this; 22091 }, 22092 22093 'delete': function (key) { 22094 requireSetSlot(this, 'delete'); 22095 var fkey; 22096 if (this._storage && (fkey = fastkey(key)) !== null) { 22097 var hasFKey = _hasOwnProperty(this._storage, fkey); 22098 return (delete this._storage[fkey]) && hasFKey; 22099 } 22100 ensureMap(this); 22101 return this['[[SetData]]']['delete'](key); 22102 }, 22103 22104 clear: function clear() { 22105 requireSetSlot(this, 'clear'); 22106 if (this._storage) { 22107 this._storage = emptyObject(); 22108 } 22109 if (this['[[SetData]]']) { 22110 this['[[SetData]]'].clear(); 22111 } 22112 }, 22113 22114 values: function values() { 22115 requireSetSlot(this, 'values'); 22116 ensureMap(this); 22117 return new SetIterator(this['[[SetData]]'].values()); 22118 }, 22119 22120 entries: function entries() { 22121 requireSetSlot(this, 'entries'); 22122 ensureMap(this); 22123 return new SetIterator(this['[[SetData]]'].entries()); 22124 }, 22125 22126 forEach: function forEach(callback) { 22127 requireSetSlot(this, 'forEach'); 22128 var context = arguments.length > 1 ? arguments[1] : null; 22129 var entireSet = this; 22130 ensureMap(entireSet); 22131 this['[[SetData]]'].forEach(function (value, key) { 22132 if (context) { 22133 _call(callback, context, key, key, entireSet); 22134 } else { 22135 callback(key, key, entireSet); 22136 } 22137 }); 22138 } 22139 }); 22140 defineProperty(SetShim.prototype, 'keys', SetShim.prototype.values, true); 22141 addIterator(SetShim.prototype, SetShim.prototype.values); 22142 22143 var SetIterator = function SetIterator(it) { 22144 defineProperty(this, 'it', it); 22145 }; 22146 SetIterator.prototype = { 22147 isSetIterator: true, 22148 next: function next() { 22149 if (!this.isSetIterator) { 22150 throw new TypeError('Not a SetIterator'); 22151 } 22152 return this.it.next(); 22153 } 22154 }; 22155 addIterator(SetIterator.prototype); 22156 22157 return SetShim; 22158 }()) 22159 }; 22160 22161 var isGoogleTranslate = globals.Set && !Set.prototype['delete'] && Set.prototype.remove && Set.prototype.items && Set.prototype.map && Array.isArray(new Set().keys); 22162 if (isGoogleTranslate) { 22163 // special-case force removal of wildly invalid Set implementation in Google Translate iframes 22164 // see https://github.com/paulmillr/es6-shim/issues/438 / https://twitter.com/ljharb/status/849335573114363904 22165 globals.Set = collectionShims.Set; 22166 } 22167 if (globals.Map || globals.Set) { 22168 // Safari 8, for example, doesn't accept an iterable. 22169 var mapAcceptsArguments = valueOrFalseIfThrows(function () { return new Map([[1, 2]]).get(1) === 2; }); 22170 if (!mapAcceptsArguments) { 22171 globals.Map = function Map() { 22172 if (!(this instanceof Map)) { 22173 throw new TypeError('Constructor Map requires "new"'); 22174 } 22175 var m = new OrigMap(); 22176 if (arguments.length > 0) { 22177 addIterableToMap(Map, m, arguments[0]); 22178 } 22179 delete m.constructor; 22180 Object.setPrototypeOf(m, globals.Map.prototype); 22181 return m; 22182 }; 22183 globals.Map.prototype = create(OrigMap.prototype); 22184 defineProperty(globals.Map.prototype, 'constructor', globals.Map, true); 22185 Value.preserveToString(globals.Map, OrigMap); 22186 } 22187 var testMap = new Map(); 22188 var mapUsesSameValueZero = (function () { 22189 // Chrome 38-42, node 0.11/0.12, iojs 1/2 also have a bug when the Map has a size > 4 22190 var m = new Map([[1, 0], [2, 0], [3, 0], [4, 0]]); 22191 m.set(-0, m); 22192 return m.get(0) === m && m.get(-0) === m && m.has(0) && m.has(-0); 22193 }()); 22194 var mapSupportsChaining = testMap.set(1, 2) === testMap; 22195 if (!mapUsesSameValueZero || !mapSupportsChaining) { 22196 overrideNative(Map.prototype, 'set', function set(k, v) { 22197 _call(origMapSet, this, k === 0 ? 0 : k, v); 22198 return this; 22199 }); 22200 } 22201 if (!mapUsesSameValueZero) { 22202 defineProperties(Map.prototype, { 22203 get: function get(k) { 22204 return _call(origMapGet, this, k === 0 ? 0 : k); 22205 }, 22206 has: function has(k) { 22207 return _call(origMapHas, this, k === 0 ? 0 : k); 22208 } 22209 }, true); 22210 Value.preserveToString(Map.prototype.get, origMapGet); 22211 Value.preserveToString(Map.prototype.has, origMapHas); 22212 } 22213 var testSet = new Set(); 22214 var setUsesSameValueZero = Set.prototype['delete'] && Set.prototype.add && Set.prototype.has && (function (s) { 22215 s['delete'](0); 22216 s.add(-0); 22217 return !s.has(0); 22218 }(testSet)); 22219 var setSupportsChaining = testSet.add(1) === testSet; 22220 if (!setUsesSameValueZero || !setSupportsChaining) { 22221 var origSetAdd = Set.prototype.add; 22222 Set.prototype.add = function add(v) { 22223 _call(origSetAdd, this, v === 0 ? 0 : v); 22224 return this; 22225 }; 22226 Value.preserveToString(Set.prototype.add, origSetAdd); 22227 } 22228 if (!setUsesSameValueZero) { 22229 var origSetHas = Set.prototype.has; 22230 Set.prototype.has = function has(v) { 22231 return _call(origSetHas, this, v === 0 ? 0 : v); 22232 }; 22233 Value.preserveToString(Set.prototype.has, origSetHas); 22234 var origSetDel = Set.prototype['delete']; 22235 Set.prototype['delete'] = function SetDelete(v) { 22236 return _call(origSetDel, this, v === 0 ? 0 : v); 22237 }; 22238 Value.preserveToString(Set.prototype['delete'], origSetDel); 22239 } 22240 var mapSupportsSubclassing = supportsSubclassing(globals.Map, function (M) { 22241 var m = new M([]); 22242 // Firefox 32 is ok with the instantiating the subclass but will 22243 // throw when the map is used. 22244 m.set(42, 42); 22245 return m instanceof M; 22246 }); 22247 // without Object.setPrototypeOf, subclassing is not possible 22248 var mapFailsToSupportSubclassing = Object.setPrototypeOf && !mapSupportsSubclassing; 22249 var mapRequiresNew = (function () { 22250 try { 22251 return !(globals.Map() instanceof globals.Map); 22252 } catch (e) { 22253 return e instanceof TypeError; 22254 } 22255 }()); 22256 if (globals.Map.length !== 0 || mapFailsToSupportSubclassing || !mapRequiresNew) { 22257 globals.Map = function Map() { 22258 if (!(this instanceof Map)) { 22259 throw new TypeError('Constructor Map requires "new"'); 22260 } 22261 var m = new OrigMap(); 22262 if (arguments.length > 0) { 22263 addIterableToMap(Map, m, arguments[0]); 22264 } 22265 delete m.constructor; 22266 Object.setPrototypeOf(m, Map.prototype); 22267 return m; 22268 }; 22269 globals.Map.prototype = OrigMap.prototype; 22270 defineProperty(globals.Map.prototype, 'constructor', globals.Map, true); 22271 Value.preserveToString(globals.Map, OrigMap); 22272 } 22273 var setSupportsSubclassing = supportsSubclassing(globals.Set, function (S) { 22274 var s = new S([]); 22275 s.add(42, 42); 22276 return s instanceof S; 22277 }); 22278 // without Object.setPrototypeOf, subclassing is not possible 22279 var setFailsToSupportSubclassing = Object.setPrototypeOf && !setSupportsSubclassing; 22280 var setRequiresNew = (function () { 22281 try { 22282 return !(globals.Set() instanceof globals.Set); 22283 } catch (e) { 22284 return e instanceof TypeError; 22285 } 22286 }()); 22287 if (globals.Set.length !== 0 || setFailsToSupportSubclassing || !setRequiresNew) { 22288 var OrigSet = globals.Set; 22289 globals.Set = function Set() { 22290 if (!(this instanceof Set)) { 22291 throw new TypeError('Constructor Set requires "new"'); 22292 } 22293 var s = new OrigSet(); 22294 if (arguments.length > 0) { 22295 addIterableToSet(Set, s, arguments[0]); 22296 } 22297 delete s.constructor; 22298 Object.setPrototypeOf(s, Set.prototype); 22299 return s; 22300 }; 22301 globals.Set.prototype = OrigSet.prototype; 22302 defineProperty(globals.Set.prototype, 'constructor', globals.Set, true); 22303 Value.preserveToString(globals.Set, OrigSet); 22304 } 22305 var newMap = new globals.Map(); 22306 var mapIterationThrowsStopIterator = !valueOrFalseIfThrows(function () { 22307 return newMap.keys().next().done; 22308 }); 22309 /* 22310 - In Firefox < 23, Map#size is a function. 22311 - In all current Firefox, Set#entries/keys/values & Map#clear do not exist 22312 - https://bugzilla.mozilla.org/show_bug.cgi?id=869996
22313 - In Firefox 24, Map and Set do not implement forEach 22314 - In Firefox 25 at least, Map and Set are callable without "new" 22315 */ 22316 if ( 22317 typeof globals.Map.prototype.clear !== 'function' 22318 || new globals.Set().size !== 0 22319 || newMap.size !== 0 22320 || typeof globals.Map.prototype.keys !== 'function' 22321 || typeof globals.Set.prototype.keys !== 'function' 22322 || typeof globals.Map.prototype.forEach !== 'function' 22323 || typeof globals.Set.prototype.forEach !== 'function' 22324 || isCallableWithoutNew(globals.Map) 22325 || isCallableWithoutNew(globals.Set) 22326 || typeof newMap.keys().next !== 'function' // Safari 8 22327 || mapIterationThrowsStopIterator // Firefox 25 22328 || !mapSupportsSubclassing 22329 ) { 22330 defineProperties(globals, { 22331 Map: collectionShims.Map, 22332 Set: collectionShims.Set 22333 }, true); 22334 } 22335 22336 if (globals.Set.prototype.keys !== globals.Set.prototype.values) { 22337 // Fixed in WebKit with https://bugs.webkit.org/show_bug.cgi?id=144190 22338 defineProperty(globals.Set.prototype, 'keys', globals.Set.prototype.values, true); 22339 } 22340 22341 // Shim incomplete iterator implementations. 22342 addIterator(Object.getPrototypeOf((new globals.Map()).keys())); 22343 addIterator(Object.getPrototypeOf((new globals.Set()).keys())); 22344 22345 if (functionsHaveNames && globals.Set.prototype.has.name !== 'has') { 22346 // Microsoft Edge v0.11.10074.0 is missing a name on Set#has 22347 var anonymousSetHas = globals.Set.prototype.has; 22348 overrideNative(globals.Set.prototype, 'has', function has(key) { 22349 return _call(anonymousSetHas, this, key); 22350 }); 22351 } 22352 } 22353 defineProperties(globals, collectionShims); 22354 addDefaultSpecies(globals.Map); 22355 addDefaultSpecies(globals.Set); 22356 } 22357 22358 var throwUnlessTargetIsObject = function throwUnlessTargetIsObject(target) { 22359 if (!ES.TypeIsObject(target)) { 22360 throw new TypeError('target must be an object'); 22361 } 22362 }; 22363 22364 // Some Reflect methods are basically the same as 22365 // those on the Object global, except that a TypeError is thrown if 22366 // target isn't an object. As well as returning a boolean indicating 22367 // the success of the operation. 22368 var ReflectShims = { 22369 // Apply method in a functional form. 22370 apply: function apply() { 22371 return ES.Call(ES.Call, null, arguments); 22372 }, 22373 22374 // New operator in a functional form. 22375 construct: function construct(constructor, args) { 22376 if (!ES.IsConstructor(constructor)) { 22377 throw new TypeError('First argument must be a constructor.'); 22378 } 22379 var newTarget = arguments.length > 2 ? arguments[2] : constructor; 22380 if (!ES.IsConstructor(newTarget)) { 22381 throw new TypeError('new.target must be a constructor.'); 22382 } 22383 return ES.Construct(constructor, args, newTarget, 'internal'); 22384 }, 22385 22386 // When deleting a non-existent or configurable property, 22387 // true is returned. 22388 // When attempting to delete a non-configurable property, 22389 // it will return false. 22390 deleteProperty: function deleteProperty(target, key) { 22391 throwUnlessTargetIsObject(target); 22392 if (supportsDescriptors) { 22393 var desc = Object.getOwnPropertyDescriptor(target, key); 22394 22395 if (desc && !desc.configurable) { 22396 return false; 22397 } 22398 } 22399 22400 // Will return true. 22401 return delete target[key]; 22402 }, 22403 22404 has: function has(target, key) { 22405 throwUnlessTargetIsObject(target); 22406 return key in target; 22407 } 22408 }; 22409 22410 if (Object.getOwnPropertyNames) { 22411 Object.assign(ReflectShims, { 22412 // Basically the result of calling the internal [[OwnPropertyKeys]]. 22413 // Concatenating propertyNames and propertySymbols should do the trick. 22414 // This should continue to work together with a Symbol shim 22415 // which overrides Object.getOwnPropertyNames and implements 22416 // Object.getOwnPropertySymbols. 22417 ownKeys: function ownKeys(target) { 22418 throwUnlessTargetIsObject(target); 22419 var keys = Object.getOwnPropertyNames(target); 22420 22421 if (ES.IsCallable(Object.getOwnPropertySymbols)) { 22422 _pushApply(keys, Object.getOwnPropertySymbols(target)); 22423 } 22424 22425 return keys; 22426 } 22427 }); 22428 } 22429 22430 var callAndCatchException = function ConvertExceptionToBoolean(func) { 22431 return !throwsError(func); 22432 }; 22433 22434 if (Object.preventExtensions) { 22435 Object.assign(ReflectShims, { 22436 isExtensible: function isExtensible(target) { 22437 throwUnlessTargetIsObject(target); 22438 return Object.isExtensible(target); 22439 }, 22440 preventExtensions: function preventExtensions(target) { 22441 throwUnlessTargetIsObject(target); 22442 return callAndCatchException(function () { 22443 return Object.preventExtensions(target); 22444 }); 22445 } 22446 }); 22447 } 22448 22449 if (supportsDescriptors) { 22450 var internalGet = function get(target, key, receiver) { 22451 var desc = Object.getOwnPropertyDescriptor(target, key); 22452 22453 if (!desc) { 22454 var parent = Object.getPrototypeOf(target); 22455 22456 if (parent === null) { 22457 return void 0; 22458 } 22459 22460 return internalGet(parent, key, receiver); 22461 } 22462 22463 if ('value' in desc) { 22464 return desc.value; 22465 } 22466 22467 if (desc.get) { 22468 return ES.Call(desc.get, receiver); 22469 } 22470 22471 return void 0; 22472 }; 22473 22474 var internalSet = function set(target, key, value, receiver) { 22475 var desc = Object.getOwnPropertyDescriptor(target, key); 22476 22477 if (!desc) { 22478 var parent = Object.getPrototypeOf(target); 22479 22480 if (parent !== null) { 22481 return internalSet(parent, key, value, receiver); 22482 } 22483 22484 desc = { 22485 value: void 0, 22486 writable: true, 22487 enumerable: true, 22488 configurable: true 22489 }; 22490 } 22491 22492 if ('value' in desc) { 22493 if (!desc.writable) { 22494 return false;
22495 } 22496 22497 if (!ES.TypeIsObject(receiver)) { 22498 return false; 22499 } 22500 22501 var existingDesc = Object.getOwnPropertyDescriptor(receiver, key); 22502 22503 if (existingDesc) { 22504 return Reflect.defineProperty(receiver, key, { 22505 value: value 22506 }); 22507 } 22508 return Reflect.defineProperty(receiver, key, { 22509 value: value, 22510 writable: true, 22511 enumerable: true, 22512 configurable: true 22513 }); 22514 22515 } 22516 22517 if (desc.set) { 22518 _call(desc.set, receiver, value); 22519 return true; 22520 } 22521 22522 return false; 22523 }; 22524 22525 Object.assign(ReflectShims, { 22526 defineProperty: function defineProperty(target, propertyKey, attributes) { 22527 throwUnlessTargetIsObject(target); 22528 return callAndCatchException(function () { 22529 return Object.defineProperty(target, propertyKey, attributes); 22530 }); 22531 }, 22532 22533 getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) { 22534 throwUnlessTargetIsObject(target); 22535 return Object.getOwnPropertyDescriptor(target, propertyKey); 22536 }, 22537 22538 // Syntax in a functional form. 22539 get: function get(target, key) { 22540 throwUnlessTargetIsObject(target); 22541 var receiver = arguments.length > 2 ? arguments[2] : target; 22542 22543 return internalGet(target, key, receiver); 22544 }, 22545 22546 set: function set(target, key, value) { 22547 throwUnlessTargetIsObject(target); 22548 var receiver = arguments.length > 3 ? arguments[3] : target; 22549 22550 return internalSet(target, key, value, receiver); 22551 } 22552 }); 22553 } 22554 22555 if (Object.getPrototypeOf) { 22556 var objectDotGetPrototypeOf = Object.getPrototypeOf; 22557 ReflectShims.getPrototypeOf = function getPrototypeOf(target) { 22558 throwUnlessTargetIsObject(target); 22559 return objectDotGetPrototypeOf(target); 22560 }; 22561 } 22562 22563 if (Object.setPrototypeOf && ReflectShims.getPrototypeOf) { 22564 var willCreateCircularPrototype = function (object, lastProto) { 22565 var proto = lastProto; 22566 while (proto) { 22567 if (object === proto) { 22568 return true; 22569 } 22570 proto = ReflectShims.getPrototypeOf(proto); 22571 } 22572 return false; 22573 }; 22574 22575 Object.assign(ReflectShims, { 22576 // Sets the prototype of the given object. 22577 // Returns true on success, otherwise false. 22578 setPrototypeOf: function setPrototypeOf(object, proto) { 22579 throwUnlessTargetIsObject(object); 22580 if (proto !== null && !ES.TypeIsObject(proto)) { 22581 throw new TypeError('proto must be an object or null'); 22582 } 22583 22584 // If they already are the same, we're done. 22585 if (proto === Reflect.getPrototypeOf(object)) { 22586 return true; 22587 } 22588 22589 // Cannot alter prototype if object not extensible. 22590 if (Reflect.isExtensible && !Reflect.isExtensible(object)) { 22591 return false; 22592 } 22593 22594 // Ensure that we do not create a circular prototype chain. 22595 if (willCreateCircularPrototype(object, proto)) { 22596 return false; 22597 } 22598 22599 Object.setPrototypeOf(object, proto); 22600 22601 return true; 22602 } 22603 }); 22604 } 22605 var defineOrOverrideReflectProperty = function (key, shim) { 22606 if (!ES.IsCallable(globals.Reflect[key])) { 22607 defineProperty(globals.Reflect, key, shim); 22608 } else { 22609 var acceptsPrimitives = valueOrFalseIfThrows(function () { 22610 globals.Reflect[key](1); 22611 globals.Reflect[key](NaN); 22612 globals.Reflect[key](true); 22613 return true; 22614 }); 22615 if (acceptsPrimitives) { 22616 overrideNative(globals.Reflect, key, shim); 22617 } 22618 } 22619 }; 22620 Object.keys(ReflectShims).forEach(function (key) { 22621 defineOrOverrideReflectProperty(key, ReflectShims[key]); 22622 }); 22623 var originalReflectGetProto = globals.Reflect.getPrototypeOf; 22624 if (functionsHaveNames && originalReflectGetProto && originalReflectGetProto.name !== 'getPrototypeOf') { 22625 overrideNative(globals.Reflect, 'getPrototypeOf', function getPrototypeOf(target) { 22626 return _call(originalReflectGetProto, globals.Reflect, target); 22627 }); 22628 } 22629 if (globals.Reflect.setPrototypeOf) { 22630 if (valueOrFalseIfThrows(function () { 22631 globals.Reflect.setPrototypeOf(1, {}); 22632 return true; 22633 })) { 22634 overrideNative(globals.Reflect, 'setPrototypeOf', ReflectShims.setPrototypeOf); 22635 } 22636 } 22637 if (globals.Reflect.defineProperty) { 22638 if (!valueOrFalseIfThrows(function () { 22639 var basic = !globals.Reflect.defineProperty(1, 'test', { value: 1 }); 22640 // "extensible" fails on Edge 0.12 22641 var extensible = typeof Object.preventExtensions !== 'function' || !globals.Reflect.defineProperty(Object.preventExtensions({}), 'test', {}); 22642 return basic && extensible; 22643 })) { 22644 overrideNative(globals.Reflect, 'defineProperty', ReflectShims.defineProperty); 22645 } 22646 } 22647 if (globals.Reflect.construct) { 22648 if (!valueOrFalseIfThrows(function () { 22649 var F = function F() {}; 22650 return globals.Reflect.construct(function () {}, [], F) instanceof F; 22651 })) { 22652 overrideNative(globals.Reflect, 'construct', ReflectShims.construct); 22653 } 22654 } 22655 22656 if (String(new Date(NaN)) !== 'Invalid Date') { 22657 var dateToString = Date.prototype.toString; 22658 var shimmedDateToString = function toString() { 22659 var valueOf = +this; 22660 if (valueOf !== valueOf) { 22661 return 'Invalid Date'; 22662 } 22663 return ES.Call(dateToString, this); 22664 }; 22665 overrideNative(Date.prototype, 'toString', shimmedDateToString); 22666 } 22667 22668 // Annex B HTML methods 22669 // http://www.ecma-international.org/ecma-262/6.0/#sec-additional-properties-of-the-string.prototype-object 22670 var stringHTMLshims = { 22671 anchor: function anchor(name) { return ES.CreateHTML(this, 'a', 'name', name); }, 22672 big: function big() { return ES.CreateHTML(this, 'big', '', ''); }, 22673 blink: function blink() { return ES.CreateHTML(this, 'blink', '', ''); }, 22674 bold: function bold() { return ES.CreateHTML(this, 'b', '', ''); }, 22675 fixed: function fixed() { return ES.CreateHTML(this, 'tt', '', ''); },
22676 fontcolor: function fontcolor(color) { return ES.CreateHTML(this, 'font', 'color', color); }, 22677 fontsize: function fontsize(size) { return ES.CreateHTML(this, 'font', 'size', size); }, 22678 italics: function italics() { return ES.CreateHTML(this, 'i', '', ''); }, 22679 link: function link(url) { return ES.CreateHTML(this, 'a', 'href', url); }, 22680 small: function small() { return ES.CreateHTML(this, 'small', '', ''); }, 22681 strike: function strike() { return ES.CreateHTML(this, 'strike', '', ''); }, 22682 sub: function sub() { return ES.CreateHTML(this, 'sub', '', ''); }, 22683 sup: function sub() { return ES.CreateHTML(this, 'sup', '', ''); } 22684 }; 22685 _forEach(Object.keys(stringHTMLshims), function (key) { 22686 var method = String.prototype[key]; 22687 var shouldOverwrite = false; 22688 if (ES.IsCallable(method)) { 22689 var output = _call(method, '', ' " '); 22690 var quotesCount = _concat([], output.match(/"/g)).length; 22691 shouldOverwrite = output !== output.toLowerCase() || quotesCount > 2; 22692 } else { 22693 shouldOverwrite = true; 22694 } 22695 if (shouldOverwrite) { 22696 overrideNative(String.prototype, key, stringHTMLshims[key]); 22697 } 22698 }); 22699 22700 var JSONstringifiesSymbols = (function () { 22701 // Microsoft Edge v0.12 stringifies Symbols incorrectly 22702 if (!hasSymbols) { return false; } // Symbols are not supported 22703 var stringify = typeof JSON === 'object' && typeof JSON.stringify === 'function' ? JSON.stringify : null; 22704 if (!stringify) { return false; } // JSON.stringify is not supported 22705 if (typeof stringify(Symbol()) !== 'undefined') { return true; } // Symbols should become `undefined` 22706 if (stringify([Symbol()]) !== '[null]') { return true; } // Symbols in arrays should become `null` 22707 var obj = { a: Symbol() }; 22708 obj[Symbol()] = true; 22709 if (stringify(obj) !== '{}') { return true; } // Symbol-valued keys *and* Symbol-valued properties should be omitted 22710 return false; 22711 }()); 22712 var JSONstringifyAcceptsObjectSymbol = valueOrFalseIfThrows(function () { 22713 // Chrome 45 throws on stringifying object symbols 22714 if (!hasSymbols) { return true; } // Symbols are not supported 22715 return JSON.stringify(Object(Symbol())) === '{}' && JSON.stringify([Object(Symbol())]) === '[{}]'; 22716 }); 22717 if (JSONstringifiesSymbols || !JSONstringifyAcceptsObjectSymbol) { 22718 var origStringify = JSON.stringify; 22719 overrideNative(JSON, 'stringify', function stringify(value) { 22720 if (typeof value === 'symbol') { return; } 22721 var replacer; 22722 if (arguments.length > 1) { 22723 replacer = arguments[1]; 22724 } 22725 var args = [value]; 22726 if (!isArray(replacer)) { 22727 var replaceFn = ES.IsCallable(replacer) ? replacer : null; 22728 var wrappedReplacer = function (key, val) { 22729 var parsedValue = replaceFn ? _call(replaceFn, this, key, val) : val; 22730 if (typeof parsedValue !== 'symbol') { 22731 if (Type.symbol(parsedValue)) { 22732 return assignTo({})(parsedValue); 22733 } 22734 return parsedValue; 22735 22736 } 22737 }; 22738 args.push(wrappedReplacer); 22739 } else { 22740 // create wrapped replacer that handles an array replacer? 22741 args.push(replacer); 22742 } 22743 if (arguments.length > 2) { 22744 args.push(arguments[2]); 22745 } 22746 return origStringify.apply(this, args); 22747 }); 22748 } 22749 22750 return globals; 22751})); 22752 22753}).call(this)}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) 22754},{"_process":137}],86:[function(require,module,exports){ 22755'use strict'; 22756 22757var proto = require('./Array.prototype'); 22758 22759module.exports = { 22760 prototype: proto, 22761 shim: function shimArray() { 22762 proto.shim(); 22763 } 22764}; 22765 22766},{"./Array.prototype":88}],87:[function(require,module,exports){ 22767'use strict'; 22768 22769module.exports = require('array-includes'); 22770 22771},{"array-includes":4}],88:[function(require,module,exports){ 22772'use strict'; 22773 22774var includes = require('./Array.prototype.includes'); 22775 22776module.exports = { 22777 includes: includes, 22778 shim: function shimArrayPrototype() { 22779 includes.shim(); 22780 } 22781}; 22782 22783},{"./Array.prototype.includes":87}],89:[function(require,module,exports){ 22784'use strict'; 22785 22786var getDescriptors = require('object.getownpropertydescriptors'); 22787var entries = require('object.entries'); 22788var values = require('object.values'); 22789 22790module.exports = { 22791 entries: entries, 22792 getOwnPropertyDescriptors: getDescriptors, 22793 shim: function shimObject() { 22794 getDescriptors.shim(); 22795 entries.shim(); 22796 values.shim(); 22797 }, 22798 values: values 22799}; 22800 22801},{"object.entries":126,"object.getownpropertydescriptors":130,"object.values":134}],90:[function(require,module,exports){ 22802'use strict'; 22803 22804var stringPrototype = require('./String.prototype'); 22805 22806module.exports = { 22807 prototype: stringPrototype, 22808 shim: function shimString() { 22809 stringPrototype.shim(); 22810 } 22811}; 22812 22813},{"./String.prototype":92}],91:[function(require,module,exports){ 22814'use strict'; 22815 22816module.exports = require('string-at'); 22817 22818},{"string-at":143}],92:[function(require,module,exports){ 22819'use strict'; 22820 22821var at = require('./String.prototype.at'); 22822var padStart = require('./String.prototype.padStart'); 22823var padEnd = require('./String.prototype.padEnd'); 22824var trimLeft = require('./String.prototype.trimLeft'); 22825var trimRight = require('./String.prototype.trimRight'); 22826 22827module.exports = { 22828 at: at, 22829 padStart: padStart, 22830 padEnd: padEnd, 22831 trimLeft: trimLeft, 22832 trimRight: trimRight, 22833 shim: function shimStringPrototype() { 22834 at.shim(); 22835 padStart.shim(); 22836 padEnd.shim(); 22837 trimLeft.shim(); 22838 trimRight.shim(); 22839 } 22840}; 22841 22842},{"./String.prototype.at":91,"./String.prototype.padEnd":93,"./String.prototype.padStart":94,"./String.prototype.trimLeft":95,"./String.prototype.trimRight":96}],93:[function(require,module,exports){ 22843'use strict'; 22844 22845module.exports = require('string.prototype.padend'); 22846 22847},{"string.prototype.padend":145}],94:[function(require,module,exports){ 22848'use strict'; 22849 22850module.exports = require('string.prototype.padstart'); 22851 22852},{"string.prototype.padstart":149}],95:[function(require,module,exports){ 22853'use strict'; 22854 22855module.exports = require('string.prototype.trimleft'); 22856 22857},{"string.prototype.trimleft":158}],96:[function(require,module,exports){ 22858'use strict'; 22859 22860module.exports = require('string.prototype.trimright'); 22861 22862},{"string.prototype.trimright":162}],97:[function(require,module,exports){ 22863'use strict'; 22864 22865module.exports = require('./es7-shim').shim(); 22866 22867},{"./es7-shim":98}],98:[function(require,module,exports){ 22868/*! 22869 * https://github.com/es-shims/es7-shim 22870 * @license es7-shim Copyright 2014 by contributors, MIT License 22871 * see https://github.com/es-shims/es7-shim/blob/master/LICENSE 22872 */ 22873 22874'use strict'; 22875 22876var $Array = require('./Array'); 22877var $Object = require('./Object'); 22878var $String = require('./String'); 22879 22880module.exports = { 22881 Array: $Array, 22882 Object: $Object, 22883 String: $String, 22884 shim: function shimES7() { 22885 $Array.shim(); 22886 $Object.shim(); 22887 $String.shim(); 22888 } 22889}; 22890 22891},{"./Array":86,"./Object":89,"./String":90}],99:[function(require,module,exports){ 22892'use strict'; 22893 22894/* eslint no-invalid-this: 1 */ 22895 22896var ERROR_MESSAGE = 'Function.prototype.bind called on incompatible '; 22897var toStr = Object.prototype.toString; 22898var max = Math.max; 22899var funcType = '[object Function]'; 22900 22901var concatty = function concatty(a, b) { 22902 var arr = []; 22903 22904 for (var i = 0; i < a.length; i += 1) { 22905 arr[i] = a[i]; 22906 } 22907 for (var j = 0; j < b.length; j += 1) { 22908 arr[j + a.length] = b[j]; 22909 } 22910 22911 return arr; 22912}; 22913 22914var slicy = function slicy(arrLike, offset) { 22915 var arr = []; 22916 for (var i = offset || 0, j = 0; i < arrLike.length; i += 1, j += 1) { 22917 arr[j] = arrLike[i]; 22918 } 22919 return arr; 22920}; 22921 22922var joiny = function (arr, joiner) { 22923 var str = ''; 22924 for (var i = 0; i < arr.length; i += 1) { 22925 str += arr[i]; 22926 if (i + 1 < arr.length) { 22927 str += joiner; 22928 } 22929 } 22930 return str; 22931}; 22932 22933module.exports = function bind(that) { 22934 var target = this; 22935 if (typeof target !== 'function' || toStr.apply(target) !== funcType) { 22936 throw new TypeError(ERROR_MESSAGE + target); 22937 } 22938 var args = slicy(arguments, 1); 22939 22940 var bound; 22941 var binder = function () { 22942 if (this instanceof bound) { 22943 var result = target.apply( 22944 this, 22945 concatty(args, arguments) 22946 ); 22947 if (Object(result) === result) { 22948 return result; 22949 } 22950 return this; 22951 } 22952 return target.apply( 22953 that, 22954 concatty(args, arguments) 22955 ); 22956 22957 }; 22958 22959 var boundLength = max(0, target.length - args.length); 22960 var boundArgs = []; 22961 for (var i = 0; i < boundLength; i++) { 22962 boundArgs[i] = '$' + i; 22963 } 22964 22965 bound = Function('binder', 'return function (' + joiny(boundArgs, ',') + '){ return binder.apply(this,arguments); }')(binder); 22966 22967 if (target.prototype) { 22968 var Empty = function Empty() {}; 22969 Empty.prototype = target.prototype; 22970 bound.prototype = new Empty(); 22971 Empty.prototype = null; 22972 } 22973 22974 return bound; 22975}; 22976 22977},{}],100:[function(require,module,exports){ 22978'use strict'; 22979 22980var implementation = require('./implementation'); 22981 22982module.exports = Function.prototype.bind || implementation; 22983 22984},{"./implementation":99}],101:[function(require,module,exports){ 22985'use strict'; 22986 22987var undefined; 22988 22989var $Error = require('es-errors'); 22990var $EvalError = require('es-errors/eval'); 22991var $RangeError = require('es-errors/range'); 22992var $ReferenceError = require('es-errors/ref'); 22993var $SyntaxError = require('es-errors/syntax'); 22994var $TypeError = require('es-errors/type'); 22995var $URIError = require('es-errors/uri'); 22996 22997var $Function = Function; 22998 22999// eslint-disable-next-line consistent-return 23000var getEvalledConstructor = function (expressionSyntax) { 23001 try { 23002 return $Function('"use strict"; return (' + expressionSyntax + ').constructor;')(); 23003 } catch (e) {} 23004}; 23005 23006var $gOPD = Object.getOwnPropertyDescriptor; 23007if ($gOPD) { 23008 try { 23009 $gOPD({}, ''); 23010 } catch (e) { 23011 $gOPD = null; // this is IE 8, which has a broken gOPD 23012 } 23013} 23014 23015var throwTypeError = function () { 23016 throw new $TypeError(); 23017}; 23018var ThrowTypeError = $gOPD 23019 ? (function () { 23020 try { 23021 // eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties 23022 arguments.callee; // IE 8 does not throw here 23023 return throwTypeError; 23024 } catch (calleeThrows) { 23025 try { 23026 // IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '') 23027 return $gOPD(arguments, 'callee').get; 23028 } catch (gOPDthrows) { 23029 return throwTypeError; 23030 } 23031 } 23032 }()) 23033 : throwTypeError; 23034 23035var hasSymbols = require('has-symbols')(); 23036var hasProto = require('has-proto')(); 23037 23038var getProto = Object.getPrototypeOf || ( 23039 hasProto 23040 ? function (x) { return x.__proto__; } // eslint-disable-line no-proto 23041 : null 23042); 23043 23044var needsEval = {}; 23045 23046var TypedArray = typeof Uint8Array === 'undefined' || !getProto ? undefined : getProto(Uint8Array); 23047 23048var INTRINSICS = { 23049 __proto__: null, 23050 '%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError, 23051 '%Array%': Array, 23052 '%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer, 23053 '%ArrayIteratorPrototype%': hasSymbols && getProto ? getProto([][Symbol.iterator]()) : undefined, 23054 '%AsyncFromSyncIteratorPrototype%': undefined, 23055 '%AsyncFunction%': needsEval, 23056 '%AsyncGenerator%': needsEval, 23057 '%AsyncGeneratorFunction%': needsEval, 23058 '%AsyncIteratorPrototype%': needsEval, 23059 '%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics, 23060 '%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt, 23061 '%BigInt64Array%': typeof BigInt64Array === 'undefined' ? undefined : BigInt64Array, 23062 '%BigUint64Array%': typeof BigUint64Array === 'undefined' ? undefined : BigUint64Array, 23063 '%Boolean%': Boolean, 23064 '%DataView%': typeof DataView === 'undefined' ? undefined : DataView, 23065 '%Date%': Date, 23066 '%decodeURI%': decodeURI, 23067 '%decodeURIComponent%': decodeURIComponent, 23068 '%encodeURI%': encodeURI, 23069 '%encodeURIComponent%': encodeURIComponent, 23070 '%Error%': $Error, 23071 '%eval%': eval, // eslint-disable-line no-eval 23072 '%EvalError%': $EvalError, 23073 '%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array, 23074 '%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array, 23075 '%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry, 23076 '%Function%': $Function, 23077 '%GeneratorFunction%': needsEval, 23078 '%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array, 23079 '%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array, 23080 '%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array, 23081 '%isFinite%': isFinite, 23082 '%isNaN%': isNaN, 23083 '%IteratorPrototype%': hasSymbols && getProto ? getProto(getProto([][Symbol.iterator]())) : undefined, 23084 '%JSON%': typeof JSON === 'object' ? JSON : undefined, 23085 '%Map%': typeof Map === 'undefined' ? undefined : Map, 23086 '%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Map()[Symbol.iterator]()), 23087 '%Math%': Math, 23088 '%Number%': Number, 23089 '%Object%': Object, 23090 '%parseFloat%': parseFloat, 23091 '%parseInt%': parseInt, 23092 '%Promise%': typeof Promise === 'undefined' ? undefined : Promise, 23093 '%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy, 23094 '%RangeError%': $RangeError, 23095 '%ReferenceError%': $ReferenceError, 23096 '%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect, 23097 '%RegExp%': RegExp, 23098 '%Set%': typeof Set === 'undefined' ? undefined : Set, 23099 '%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Set()[Symbol.iterator]()), 23100 '%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer, 23101 '%String%': String, 23102 '%StringIteratorPrototype%': hasSymbols && getProto ? getProto(''[Symbol.iterator]()) : undefined, 23103 '%Symbol%': hasSymbols ? Symbol : undefined, 23104 '%SyntaxError%': $SyntaxError, 23105 '%ThrowTypeError%': ThrowTypeError, 23106 '%TypedArray%': TypedArray, 23107 '%TypeError%': $TypeError, 23108 '%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array, 23109 '%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray, 23110 '%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array, 23111 '%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array, 23112 '%URIError%': $URIError, 23113 '%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap, 23114 '%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef, 23115 '%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet 23116}; 23117 23118if (getProto) { 23119 try { 23120 null.error; // eslint-disable-line no-unused-expressions 23121 } catch (e) { 23122 // https://github.com/tc39/proposal-shadowrealm/pull/384#issuecomment-1364264229 23123 var errorProto = getProto(getProto(e)); 23124 INTRINSICS['%Error.prototype%'] = errorProto; 23125 } 23126} 23127 23128var doEval = function doEval(name) { 23129 var value; 23130 if (name === '%AsyncFunction%') { 23131 value = getEvalledConstructor('async function () {}'); 23132 } else if (name === '%GeneratorFunction%') { 23133 value = getEvalledConstructor('function* () {}'); 23134 } else if (name === '%AsyncGeneratorFunction%') { 23135 value = getEvalledConstructor('async function* () {}'); 23136 } else if (name === '%AsyncGenerator%') { 23137 var fn = doEval('%AsyncGeneratorFunction%'); 23138 if (fn) { 23139 value = fn.prototype; 23140 } 23141 } else if (name === '%AsyncIteratorPrototype%') { 23142 var gen = doEval('%AsyncGenerator%'); 23143 if (gen && getProto) { 23144 value = getProto(gen.prototype); 23145 } 23146 } 23147 23148 INTRINSICS[name] = value; 23149 23150 return value; 23151}; 23152 23153var LEGACY_ALIASES = { 23154 __proto__: null, 23155 '%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'], 23156 '%ArrayPrototype%': ['Array', 'prototype'], 23157 '%ArrayProto_entries%': ['Array', 'prototype', 'entries'], 23158 '%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'], 23159 '%ArrayProto_keys%': ['Array', 'prototype', 'keys'], 23160 '%ArrayProto_values%': ['Array', 'prototype', 'values'], 23161 '%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'], 23162 '%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'], 23163 '%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'], 23164 '%BooleanPrototype%': ['Boolean', 'prototype'], 23165 '%DataViewPrototype%': ['DataView', 'prototype'], 23166 '%DatePrototype%': ['Date', 'prototype'], 23167 '%ErrorPrototype%': ['Error', 'prototype'], 23168 '%EvalErrorPrototype%': ['EvalError', 'prototype'], 23169 '%Float32ArrayPrototype%': ['Float32Array', 'prototype'], 23170 '%Float6
vendor: 9,302 bytes, lines 23170-23437
231704ArrayPrototype%': ['Float64Array', 'prototype'], 23171 '%FunctionPrototype%': ['Function', 'prototype'], 23172 '%Generator%': ['GeneratorFunction', 'prototype'], 23173 '%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'], 23174 '%Int8ArrayPrototype%': ['Int8Array', 'prototype'], 23175 '%Int16ArrayPrototype%': ['Int16Array', 'prototype'], 23176 '%Int32ArrayPrototype%': ['Int32Array', 'prototype'], 23177 '%JSONParse%': ['JSON', 'parse'], 23178 '%JSONStringify%': ['JSON', 'stringify'], 23179 '%MapPrototype%': ['Map', 'prototype'], 23180 '%NumberPrototype%': ['Number', 'prototype'], 23181 '%ObjectPrototype%': ['Object', 'prototype'], 23182 '%ObjProto_toString%': ['Object', 'prototype', 'toString'], 23183 '%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'], 23184 '%PromisePrototype%': ['Promise', 'prototype'], 23185 '%PromiseProto_then%': ['Promise', 'prototype', 'then'], 23186 '%Promise_all%': ['Promise', 'all'], 23187 '%Promise_reject%': ['Promise', 'reject'], 23188 '%Promise_resolve%': ['Promise', 'resolve'], 23189 '%RangeErrorPrototype%': ['RangeError', 'prototype'], 23190 '%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'], 23191 '%RegExpPrototype%': ['RegExp', 'prototype'], 23192 '%SetPrototype%': ['Set', 'prototype'], 23193 '%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'], 23194 '%StringPrototype%': ['String', 'prototype'], 23195 '%SymbolPrototype%': ['Symbol', 'prototype'], 23196 '%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'], 23197 '%TypedArrayPrototype%': ['TypedArray', 'prototype'], 23198 '%TypeErrorPrototype%': ['TypeError', 'prototype'], 23199 '%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'], 23200 '%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'], 23201 '%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'], 23202 '%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'], 23203 '%URIErrorPrototype%': ['URIError', 'prototype'], 23204 '%WeakMapPrototype%': ['WeakMap', 'prototype'], 23205 '%WeakSetPrototype%': ['WeakSet', 'prototype'] 23206}; 23207 23208var bind = require('function-bind'); 23209var hasOwn = require('hasown'); 23210var $concat = bind.call(Function.call, Array.prototype.concat); 23211var $spliceApply = bind.call(Function.apply, Array.prototype.splice); 23212var $replace = bind.call(Function.call, String.prototype.replace); 23213var $strSlice = bind.call(Function.call, String.prototype.slice); 23214var $exec = bind.call(Function.call, RegExp.prototype.exec); 23215 23216/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */ 23217var rePropName = /[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g; 23218var reEscapeChar = /\\(\\)?/g; /** Used to match backslashes in property paths. */ 23219var stringToPath = function stringToPath(string) { 23220 var first = $strSlice(string, 0, 1); 23221 var last = $strSlice(string, -1); 23222 if (first === '%' && last !== '%') { 23223 throw new $SyntaxError('invalid intrinsic syntax, expected closing `%`'); 23224 } else if (last === '%' && first !== '%') { 23225 throw new $SyntaxError('invalid intrinsic syntax, expected opening `%`'); 23226 } 23227 var result = []; 23228 $replace(string, rePropName, function (match, number, quote, subString) { 23229 result[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match; 23230 }); 23231 return result; 23232}; 23233/* end adaptation */ 23234 23235var getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) { 23236 var intrinsicName = name; 23237 var alias; 23238 if (hasOwn(LEGACY_ALIASES, intrinsicName)) { 23239 alias = LEGACY_ALIASES[intrinsicName]; 23240 intrinsicName = '%' + alias[0] + '%'; 23241 } 23242 23243 if (hasOwn(INTRINSICS, intrinsicName)) { 23244 var value = INTRINSICS[intrinsicName]; 23245 if (value === needsEval) { 23246 value = doEval(intrinsicName); 23247 } 23248 if (typeof value === 'undefined' && !allowMissing) { 23249 throw new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!'); 23250 } 23251 23252 return { 23253 alias: alias, 23254 name: intrinsicName, 23255 value: value 23256 }; 23257 } 23258 23259 throw new $SyntaxError('intrinsic ' + name + ' does not exist!'); 23260}; 23261 23262module.exports = function GetIntrinsic(name, allowMissing) { 23263 if (typeof name !== 'string' || name.length === 0) { 23264 throw new $TypeError('intrinsic name must be a non-empty string'); 23265 } 23266 if (arguments.length > 1 && typeof allowMissing !== 'boolean') { 23267 throw new $TypeError('"allowMissing" argument must be a boolean'); 23268 } 23269 23270 if ($exec(/^%?[^%]*%?$/, name) === null) { 23271 throw new $SyntaxError('`%` may not be present anywhere but at the beginning and end of the intrinsic name'); 23272 } 23273 var parts = stringToPath(name); 23274 var intrinsicBaseName = parts.length > 0 ? parts[0] : ''; 23275 23276 var intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing); 23277 var intrinsicRealName = intrinsic.name; 23278 var value = intrinsic.value; 23279 var skipFurtherCaching = false; 23280 23281 var alias = intrinsic.alias; 23282 if (alias) { 23283 intrinsicBaseName = alias[0]; 23284 $spliceApply(parts, $concat([0, 1], alias)); 23285 } 23286 23287 for (var i = 1, isOwn = true; i < parts.length; i += 1) { 23288 var part = parts[i]; 23289 var first = $strSlice(part, 0, 1); 23290 var last = $strSlice(part, -1); 23291 if ( 23292 ( 23293 (first === '"' || first === "'" || first === '`') 23294 || (last === '"' || last === "'" || last === '`') 23295 ) 23296 && first !== last 23297 ) { 23298 throw new $SyntaxError('property names with quotes must have matching quotes'); 23299 } 23300 if (part === 'constructor' || !isOwn) { 23301 skipFurtherCaching = true; 23302 } 23303 23304 intrinsicBaseName += '.' + part; 23305 intrinsicRealName = '%' + intrinsicBaseName + '%'; 23306 23307 if (hasOwn(INTRINSICS, intrinsicRealName)) { 23308 value = INTRINSICS[intrinsicRealName]; 23309 } else if (value != null) { 23310 if (!(part in value)) { 23311 if (!allowMissing) { 23312 throw new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.'); 23313 } 23314 return void undefined; 23315 } 23316 if ($gOPD && (i + 1) >= parts.length) { 23317 var desc = $gOPD(value, part); 23318 isOwn = !!desc; 23319 23320 // By convention, when a data property is converted to an accessor 23321 // property to emulate a data property that does not suffer from 23322 // the override mistake, that accessor's getter is marked with 23323 // an `originalValue` property. Here, when we detect this, we 23324 // uphold the illusion by pretending to see that original data 23325 // property, i.e., returning the value rather than the getter 23326 // itself. 23327 if (isOwn && 'get' in desc && !('originalValue' in desc.get)) { 23328 value = desc.get; 23329 } else { 23330 value = value[part]; 23331 } 23332 } else { 23333 isOwn = hasOwn(value, part); 23334 value = value[part]; 23335 } 23336 23337 if (isOwn && !skipFurtherCaching) { 23338 INTRINSICS[intrinsicRealName] = value; 23339 } 23340 } 23341 } 23342 return value; 23343}; 23344 23345},{"es-errors":73,"es-errors/eval":72,"es-errors/range":74,"es-errors/ref":75,"es-errors/syntax":76,"es-errors/type":77,"es-errors/uri":78,"function-bind":100,"has-proto":104,"has-symbols":105,"hasown":108}],102:[function(require,module,exports){ 23346'use strict'; 23347 23348var GetIntrinsic = require('get-intrinsic'); 23349 23350var $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true); 23351 23352if ($gOPD) { 23353 try { 23354 $gOPD([], 'length'); 23355 } catch (e) { 23356 // IE 8 has a broken gOPD 23357 $gOPD = null; 23358 } 23359} 23360 23361module.exports = $gOPD; 23362 23363},{"get-intrinsic":101}],103:[function(require,module,exports){ 23364'use strict'; 23365 23366var $defineProperty = require('es-define-property'); 23367 23368var hasPropertyDescriptors = function hasPropertyDescriptors() { 23369 return !!$defineProperty; 23370}; 23371 23372hasPropertyDescriptors.hasArrayLengthDefineBug = function hasArrayLengthDefineBug() { 23373 // node v0.6 has a bug where array lengths can be Set but not Defined 23374 if (!$defineProperty) { 23375 return null; 23376 } 23377 try { 23378 return $defineProperty([], 'length', { value: 1 }).length !== 1; 23379 } catch (e) { 23380 // In Firefox 4-22, defining length on an array throws an exception. 23381 return true; 23382 } 23383}; 23384 23385module.exports = hasPropertyDescriptors; 23386 23387},{"es-define-property":71}],104:[function(require,module,exports){ 23388'use strict'; 23389 23390var test = { 23391 __proto__: null, 23392 foo: {} 23393}; 23394 23395var $Object = Object; 23396 23397/** @type {import('.')} */ 23398module.exports = function hasProto() { 23399 // @ts-expect-error: TS errors on an inherited property for some reason 23400 return { __proto__: test }.foo === test.foo 23401 && !(test instanceof $Object); 23402}; 23403 23404},{}],105:[function(require,module,exports){ 23405'use strict'; 23406 23407var origSymbol = typeof Symbol !== 'undefined' && Symbol; 23408var hasSymbolSham = require('./shams'); 23409 23410module.exports = function hasNativeSymbols() { 23411 if (typeof origSymbol !== 'function') { return false; } 23412 if (typeof Symbol !== 'function') { return false; } 23413 if (typeof origSymbol('foo') !== 'symbol') { return false; } 23414 if (typeof Symbol('bar') !== 'symbol') { return false; } 23415 23416 return hasSymbolSham(); 23417}; 23418 23419},{"./shams":106}],106:[function(require,module,exports){ 23420'use strict'; 23421 23422/* eslint complexity: [2, 18], max-statements: [2, 33] */ 23423module.exports = function hasSymbols() { 23424 if (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; } 23425 if (typeof Symbol.iterator === 'symbol') { return true; } 23426 23427 var obj = {}; 23428 var sym = Symbol('test'); 23429 var symObj = Object(sym); 23430 if (typeof sym === 'string') { return false; } 23431 23432 if (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; } 23433 if (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; } 23434 23435 // temp disabled per https://github.com/ljharb/object.assign/issues/17 23436 // if (sym instanceof Symbol) { return false; } 23437 // temp disabled per https://github.com/WebReflection/get-own-property-symbol
23437s/issues/4 23438 // if (!(symObj instanceof Symbol)) { return false; } 23439 23440 // if (typeof Symbol.prototype.toString !== 'function') { return false; } 23441 // if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; } 23442 23443 var symVal = 42; 23444 obj[sym] = symVal; 23445 for (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop 23446 if (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; } 23447 23448 if (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; } 23449 23450 var syms = Object.getOwnPropertySymbols(obj); 23451 if (syms.length !== 1 || syms[0] !== sym) { return false; } 23452 23453 if (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; } 23454 23455 if (typeof Object.getOwnPropertyDescriptor === 'function') { 23456 var descriptor = Object.getOwnPropertyDescriptor(obj, sym); 23457 if (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; } 23458 } 23459 23460 return true; 23461}; 23462 23463},{}],107:[function(require,module,exports){ 23464'use strict'; 23465 23466var hasSymbols = require('has-symbols/shams'); 23467 23468/** @type {import('.')} */ 23469module.exports = function hasToStringTagShams() { 23470 return hasSymbols() && !!Symbol.toStringTag; 23471}; 23472 23473},{"has-symbols/shams":106}],108:[function(require,module,exports){ 23474'use strict'; 23475 23476var call = Function.prototype.call; 23477var $hasOwn = Object.prototype.hasOwnProperty; 23478var bind = require('function-bind'); 23479 23480/** @type {import('.')} */ 23481module.exports = bind.call(call, $hasOwn); 23482 23483},{"function-bind":100}],109:[function(require,module,exports){ 23484!/** 23485 * Highcharts JS v11.4.3 (2024-05-22) 23486 * 23487 * (c) 2009-2024 Torstein Honsi 23488 * 23489 * License: www.highcharts.com/license 23490 */function(t){"object"==typeof module&&module.exports?(t.default=t,module.exports=t):"function"==typeof define&&define.amd?define("highcharts/highcharts-more",["highcharts"],function(e){return t(e),t.Highcharts=e,t}):t("undefined"!=typeof Highcharts?Highcharts:void 0)}(function(t){"use strict";var e=t?t._modules:{};function i(t,e,i,s){t.hasOwnProperty(e)||(t[e]=s.apply(null,i),"function"==typeof CustomEvent&&window.dispatchEvent(new CustomEvent("HighchartsModuleLoaded",{detail:{path:e,module:t[e]}})))}i(e,"Extensions/Pane/PaneComposition.js",[e["Core/Utilities.js"]],function(t){let{addEvent:e,correctFloat:i,defined:s,pick:o}=t;function a(t){let e;let i=this;return t&&i.pane.forEach(s=>{r(t.chartX-i.plotLeft,t.chartY-i.plotTop,s.center)&&(e=s)}),e}function r(t,e,o,a,r){let n=!0,l=o[0],h=o[1];if(s(a)&&s(r)){let s=Math.atan2(i(e-h,8),i(t-l,8));r!==a&&(n=a>r?s>=a&&s<=Math.PI||s<=r&&s>=-Math.PI:s>=a&&s<=i(r,8))}return Math.sqrt(Math.pow(t-l,2)+Math.pow(e-h,2))<=Math.ceil(o[2]/2)&&n}function n(t){this.polar&&(t.options.inverted&&([t.x,t.y]=[t.y,t.x]),t.isInsidePlot=this.pane.some(e=>r(t.x,t.y,e.center,e.axis&&e.axis.normalizedStartAngleRad,e.axis&&e.axis.normalizedEndAngleRad)))}function l(t){let e=this.chart;t.hoverPoint&&t.hoverPoint.plotX&&t.hoverPoint.plotY&&e.hoverPane&&!r(t.hoverPoint.plotX,t.hoverPoint.plotY,e.hoverPane.center)&&(t.hoverPoint=void 0)}function h(t){let e=this.chart;e.polar?(e.hoverPane=e.getHoverPane(t),t.filter=function(i){return i.visible&&!(!t.shared&&i.directTouch)&&o(i.options.enableMouseTracking,!0)&&(!e.hoverPane||i.xAxis.pane===e.hoverPane)}):e.hoverPane=void 0}return{compose:function(t,i){let s=t.prototype;s.getHoverPane||(s.collectionsWithUpdate.push("pane"),s.getHoverPane=a,e(t,"afterIsInsidePlot",n),e(i,"afterGetHoverData",l),e(i,"beforeGetHoverData",h))}}}),i(e,"Extensions/Pane/PaneDefaults.js",[],function(){return{pane:{center:["50%","50%"],size:"85%",innerSize:"0%",startAngle:0},background:{shape:"circle",borderRadius:0,borderWidth:1,borderColor:"#cccccc",backgroundColor:{linearGradient:{x1:0,y1:0,x2:0,y2:1},stops:[[0,"#ffffff"],[1,"#e6e6e6"]]},from:-Number.MAX_VALUE,innerRadius:0,to:Number.MAX_VALUE,outerRadius:"105%"}}}),i(e,"Extensions/Pane/Pane.js",[e["Series/CenteredUtilities.js"],e["Extensions/Pane/PaneComposition.js"],e["Extensions/Pane/PaneDefaults.js"],e["Core/Utilities.js"]],function(t,e,i,s){let{extend:o,merge:a,splat:r}=s;class n{constructor(t,e){this.coll="pane",this.init(t,e)}init(t,e){this.chart=e,this.background=[],e.pane.push(this),this.setOptions(t)}setOptions(t){this.options=t=a(i.pane,this.chart.angular?{background:{}}:void 0,t)}render(){let t=this.options,e=this.chart.renderer;this.group||(this.group=e.g("pane-group").attr({zIndex:t.zIndex||
234900}).add()),this.updateCenter();let s=this.options.background;if(s){let t=Math.max((s=r(s)).length,this.background.length||0);for(let e=0;e<t;e++)s[e]&&this.axis?this.renderBackground(a(i.background,s[e]),e):this.background[e]&&(this.background[e]=this.background[e].destroy(),this.background.splice(e,1))}}renderBackground(t,e){let i={class:"highcharts-pane "+(t.className||"")},s="animate";this.chart.styledMode||o(i,{fill:t.backgroundColor,stroke:t.borderColor,"stroke-width":t.borderWidth}),this.background[e]||(this.background[e]=this.chart.renderer.path().add(this.group),s="attr"),this.background[e][s]({d:this.axis.getPlotBandPath(t.from,t.to,t)}).attr(i)}updateCenter(e){this.center=(e||this.axis||{}).center=t.getCenter.call(this)}update(t,e){a(!0,this.options,t),this.setOptions(this.options),this.render(),this.chart.axes.forEach(function(t){t.pane===this&&(t.pane=null,t.update({},e))},this)}}return n.compose=e.compose,n}),i(e,"Series/AreaRange/AreaRangePoint.js",[e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e){let{area:{prototype:{pointClass:i,pointClass:{prototype:s}}}}=t.seriesTypes,{defined:o,isNumber:a}=e;return class extends i{setState(){let t=this.state,e=this.series,i=e.chart.polar;o(this.plotHigh)||(this.plotHigh=e.yAxis.toPixels(this.high,!0)),o(this.plotLow)||(this.plotLow=this.plotY=e.yAxis.toPixels(this.low,!0)),e.lowerStateMarkerGraphic=e.stateMarkerGraphic,e.stateMarkerGraphic=e.upperStateMarkerGraphic,this.graphic=this.graphics&&this.graphics[1],this.plotY=this.plotHigh,i&&a(this.plotHighX)&&(this.plotX=this.plotHighX),s.setState.apply(this,arguments),this.state=t,this.plotY=this.plotLow,this.graphic=this.graphics&&this.graphics[0],i&&a(this.plotLowX)&&(this.plotX=this.plotLowX),e.upperStateMarkerGraphic=e.stateMarkerGraphic,e.stateMarkerGraphic=e.lowerStateMarkerGraphic,e.lowerStateMarkerGraphic=void 0;let r=e.modifyMarkerSettings();s.setState.apply(this,arguments),e.restoreMarkerSettings(r)}haloPath(){let t=this.series.chart.polar,e=[];return this.plotY=this.plotLow,t&&a(this.plotLowX)&&(this.plotX=this.plotLowX),this.isInside&&(e=s.haloPath.apply(this,arguments)),this.plotY=this.plotHigh,t&&a(this.plotHighX)&&(this.plotX=this.plotHighX),this.isTopInside&&(e=e.concat(s.haloPath.apply(this,arguments))),e}isValid(){return a(this.low)&&a(this.high)}}}),i(e,"Series/AreaRange/AreaRangeSeries.js",[e["Series/AreaRange/AreaRangePoint.js"],e["Core/Globals.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e,i,s){let{noop:o}=e,{area:a,area:{prototype:r},column:{prototype:n}}=i.seriesTypes,{addEvent:l,defined:h,extend:p,isArray:d,isNumber:c,pick:u,merge:g}=s;class f extends a{toYData(t){return[t.low,t.high]}highToXY(t){let e=this.chart,i=this.xAxis.postTranslate(t.rectPlotX||0,this.yAxis.len-(t.plotHigh||0));t.plotHighX=i.x-e.plotLeft,t.plotHigh=i.y-e.plotTop,t.plotLowX=t.plotX}getGraphPath(t){let e=[],i=[],s=r.getGraphPath,o=this.options,a=this.chart.polar,n=a&&!1!==o.connectEnds,l=o.connectNulls,h,p,d,c=o.step;for(h=(t=t||this.points).length;h--;){p=t[h];let s=a?{plotX:p.rectPlotX,plotY:p.yBottom,doCurve:!1}:{plotX:p.plotX,plotY:p.plotY,doCurve:!1};p.isNull||n||l||t[h+1]&&!t[h+1].isNull||i.push(s),d={polarPlotY:p.polarPlotY,rectPlotX:p.rectPlotX,yBottom:p.yBottom,plotX:u(p.plotHighX,p.plotX),plotY:p.plotHigh,isNull:p.isNull},i.push(d),e.push(d),p.isNull||n||l||t[h-1]&&!t[h-1].isNull||i.push(s)}let g=s.call(this,t);c&&(!0===c&&(c="left"),o.step=({left:"right",center:"center",right:"left"})[c]);let f=s.call(this,e),b=s.call(this,i);o.step=c;let m=[].concat(g,f);return!this.chart.polar&&b[0]&&"M"===b[0][0]&&(b[0]=["L",b[0][1],b[0][2]]),this.graphPath=m,this.areaPath=g.concat(b),m.isArea=!0,m.xMap=g.xMap,this.areaPath.xMap=g.xMap,m}drawDataLabels(){let t,e,i,s,o;let a=this.points,n=a.length,l=[],h=this.options.dataLabels,c=this.chart.inverted;if(h){if(d(h)?(s=h[0]||{enabled:!1},o=h[1]||{enabled:!1}):((s=p({},h)).x=h.xHigh,s.y=h.yHigh,(o=p({},h)).x=h.xLow,o.y=h.yLow),s.enabled||this.hasDataLabels?.()){for(t=n;t--;)if(e=a[t]){let{plotHigh:o=0,plotLow:a=0}=e;i=s.inside?o<a:o>a,e.y=e.high,e._plotY=e.plotY,e.plotY=o,l[t]=e.dataLabel,e.dataLabel=e.dataLabelUpper,e.below=i,c?s.align||(s.align=i?"right":"left"):s.verticalAlign||(s.verticalAlign=i?"top":"bottom")}for(this.options.dataLabels=s,r.drawDataLabels&&r.drawDataLabels.apply(this,arguments),t=n;t--;)(e=a[t])&&(e.dataLabelUpper=e.dataLabel,e.dataLabel=l[t],delete e.dataLabels,e.y=e.low,e.plotY=e._plotY)}if(o.enabled||this.hasDataLabels?.()){for(t=n;t--;)if(e=a[t]){let{plotHigh:t=0,plotLow:s=0}=e;i=o.inside?t<s:t>s,e.below=!i,c?o.align||(o.align=i?"left":"right"):o.verticalAlign||(o.verticalAlign=i?"bottom":"top")}this.options.dataLabels=o,r.drawDataLabels&&r.drawDataLabels.apply(this,arguments)}if(s.enabled)for(t=n;t--;)(e=a[t])&&(e.dataLabels=[e.dataLabelUpper,e.dataLabel].filter(function(t){return!!t}));this.options.dataLabels=h}}alignDataLabel(){n.alignDataLabel.apply(this,arguments)}
23490modifyMarkerSettings(){let t={marker:this.options.marker,symbol:this.symbol};if(this.options.lowMarker){let{options:{marker:t,lowMarker:e}}=this;this.options.marker=g(t,e),e.symbol&&(this.symbol=e.symbol)}return t}restoreMarkerSettings(t){this.options.marker=t.marker,this.symbol=t.symbol}drawPoints(){let t,e;let i=this.points.length,s=this.modifyMarkerSettings();for(r.drawPoints.apply(this,arguments),this.restoreMarkerSettings(s),t=0;t<i;)(e=this.points[t]).graphics=e.graphics||[],e.origProps={plotY:e.plotY,plotX:e.plotX,isInside:e.isInside,negative:e.negative,zone:e.zone,y:e.y},(e.graphic||e.graphics[0])&&(e.graphics[0]=e.graphic),e.graphic=e.graphics[1],e.plotY=e.plotHigh,h(e.plotHighX)&&(e.plotX=e.plotHighX),e.y=u(e.high,e.origProps.y),e.negative=e.y<(this.options.threshold||0),this.zones.length&&(e.zone=e.getZone()),this.chart.polar||(e.isInside=e.isTopInside=void 0!==e.plotY&&e.plotY>=0&&e.plotY<=this.yAxis.len&&e.plotX>=0&&e.plotX<=this.xAxis.len),t++;for(r.drawPoints.apply(this,arguments),t=0;t<i;)(e=this.points[t]).graphics=e.graphics||[],(e.graphic||e.graphics[1])&&(e.graphics[1]=e.graphic),e.graphic=e.graphics[0],e.origProps&&(p(e,e.origProps),delete e.origProps),t++}hasMarkerChanged(t,e){let i=t.lowMarker,s=e.lowMarker||{};return i&&(!1===i.enabled||s.symbol!==i.symbol||s.height!==i.height||s.width!==i.width)||super.hasMarkerChanged(t,e)}}return f.defaultOptions=g(a.defaultOptions,{lineWidth:1,threshold:null,tooltip:{pointFormat:'<span style="color:{series.color}">â</span> {series.name}: <b>{point.low}</b> - <b>{point.high}</b><br/>'},trackByArea:!0,dataLabels:{align:void 0,verticalAlign:void 0,xLow:0,xHigh:0,yLow:0,yHigh:0}}),l(f,"afterTranslate",function(){"low,high"===this.pointArrayMap.join(",")&&this.points.forEach(t=>{let e=t.high,i=t.plotY;t.isNull?t.plotY=void 0:(t.plotLow=i,t.plotHigh=c(e)?this.yAxis.translate(this.dataModify?this.dataModify.modifyValue(e):e,!1,!0,void 0,!0):void 0,this.dataModify&&(t.yBottom=t.plotHigh))})},{order:0}),l(f,"afterTranslate",function(){this.points.forEach(t=>{if(this.chart.polar)this.highToXY(t),t.plotLow=t.plotY,t.tooltipPos=[((t.plotHighX||0)+(t.plotLowX||0))/2,((t.plotHigh||0)+(t.plotLow||0))/2];else{let e=t.pos(!1,t.plotLow),i=t.pos(!1,t.plotHigh);e&&i&&(e[0]=(e[0]+i[0])/2,e[1]=(e[1]+i[1])/2),t.tooltipPos=e}})},{order:3}),p(f.prototype,{deferTranslatePolar:!0,pointArrayMap:["low","high"],pointClass:t,pointValKey:"low",setStackedPoints:o}),i.registerSeriesType("arearange",f),f}),i(e,"Series/AreaSplineRange/AreaSplineRangeSeries.js",[e["Series/AreaRange/AreaRangeSeries.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e,i){let{spline:{prototype:s}}=e.seriesTypes,{merge:o,extend:a}=i;class r extends t{}return r.defaultOptions=o(t.defaultOptions),a(r.prototype,{getPointSpline:s.getPointSpline}),e.registerSeriesType("areasplinerange",r),r}),i(e,"Series/BoxPlot/BoxPlotSeriesDefaults.js",[],function(){return{threshold:null,tooltip:{pointFormat:'<span style="color:{point.color}">â</span> <b>{series.name}</b><br/>Maximum: {point.high}<br/>Upper quartile: {point.q3}<br/>Median: {point.median}<br/>Lower quartile: {point.q1}<br/>Minimum: {point.low}<br/>'},whiskerLength:"50%",fillColor:"#ffffff",lineWidth:1,medianWidth:2,whiskerWidth:2}}),i(e,"Series/BoxPlot/BoxPlotSeries.js",[e["Series/BoxPlot/BoxPlotSeriesDefaults.js"],e["Series/Column/ColumnSeries.js"],e["Core/Globals.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e,i,s,o){let{noop:a}=i,{crisp:r,extend:n,merge:l,pick:h}=o;class p extends e{pointAttribs(){return{}}translate(){let t=this.yAxis,e=this.pointArrayMap;super.translate.apply(this),this.points.forEach(function(i){e.forEach(function(e){null!==i[e]&&(i[e+"Plot"]=t.translate(i[e],0,1,0,1))}),i.plotHigh=i.highPlot})}drawPoints(){let t,e,i,s,o,a,n,l,p,d,c,u,g;let f=this.points,b=this.options,m=this.chart,y=m.renderer,x=!1!==this.doQuartiles,P=this.options.whiskerLength;for(let S of f){let f=(l=S.graphic)?"animate":"attr",M=S.shapeArgs,L={},k={},C={},v={},A=S.color||this.color;if(void 0!==S.plotY){let w;p=M.width,c=(d=M.x)+p,u=p/2,t=x?S.q1Plot:S.lowPlot,e=x?S.q3Plot:S.lowPlot,i=S.highPlot,s=S.lowPlot,l||(S.graphic=l=y.g("point").add(this.group),S.stem=y.path().addClass("highcharts-boxplot-stem").add(l),P&&(S.whiskers=y.path().addClass("highcharts-boxplot-whisker").add(l)),x&&(S.box=y.path(n).addClass("highcharts-boxplot-box").add(l)),S.medianShape=y.path(a).addClass("highcharts-boxplot-median").add(l)),m.styledMode||(k.stroke=S.stemColor||b.stemColor||A,k["stroke-width"]=h(S.stemWidth,b.stemWidth,b.lineWidth),k.dashstyle=S.stemDashStyle||b.stemDashStyle||b.dashStyle,S.stem.attr(k),P&&(C.stroke=S.whiskerColor||b.whiskerColor||A,C["stroke-width"]=h(S.whiskerWidth,b.whiskerWidth,b.lineWidth),C.dashstyle=S.whiskerDashStyle||b.whiskerDashStyle||b.dashStyle,S.whiskers.attr(C)),x&&(L.fill=S.fillColor||b.fillColor||A,L.stroke=b.lineColor||A,L["stroke-width"]=b.lineWidth||0,L.dashstyle=S.boxDashStyle||b.boxDashStyle||b.dashStyle,S.box.attr(L)),v.stroke=S.medianColor||b.medianColor||A,v["stroke-width"]=h(S.medianWidth,b.medianWidth,b.lineWidth),v.dashstyle=S.medianDashStyle||b.medianDashStyle||b.dashStyle,S.medianShape.attr(v));let N=r(S.plotX||0,S.stem.strokeWidth());if(w=[["M",N,e],["L",N,i],["M",N,t],["L",N,s]],S.stem[f]({d:w}),x){let i=S.box.strokeWidth();t=r(t,i),e=r(e,i),w=[["M",d=r(d,i),e],["L",d,t],["L",c=r(c,i),t],["L",c,e],["L",d,e],["Z"]],S.box[f]({d:w})}if(P){let t=S.whiskers.strokeWidth();i=r(S.highPlot,t),s=r(S.lowPlot,t),w=[["M",r(N-(g="string"==typeof P&&/%$/.test(P)?u*parseFloat(P)/100:Number(P)/2)),i],["L",r(N+g),i],["M",r(N-g),s],["L",r(N+g),s]],S.whiskers[f]({d:w})}w=[["M",d,o=r(S.medianPlot,S.medianShape.strokeWidth())],["L",c,o]],S.medianShape[f]({d:w})}}}toYData(t){return[t.low,t.q1,t.median,t.q3,t.high]}}return p.defaultOptions=l(e.defaultOptions,t),n(p.prototype,{pointArrayMap:["low","q1","median","q3","high"],pointV
vendor: 4,106 bytes, line 23490
23490alKey:"high",drawDataLabels:a,setStackedPoints:a}),s.registerSeriesType("boxplot",p),p}),i(e,"Series/Bubble/BubbleLegendDefaults.js",[],function(){return{borderColor:void 0,borderWidth:2,className:void 0,color:void 0,connectorClassName:void 0,connectorColor:void 0,connectorDistance:60,connectorWidth:1,enabled:!1,labels:{className:void 0,allowOverlap:!1,format:"",formatter:void 0,align:"right",style:{fontSize:"0.9em",color:"#000000"},x:0,y:0},maxSize:60,minSize:10,legendIndex:0,ranges:{value:void 0,borderColor:void 0,color:void 0,connectorColor:void 0},sizeBy:"area",sizeByAbsoluteValue:!1,zIndex:1,zThreshold:0}}),i(e,"Series/Bubble/BubbleLegendItem.js",[e["Core/Color/Color.js"],e["Core/Templating.js"],e["Core/Globals.js"],e["Core/Utilities.js"]],function(t,e,i,s){let{parse:o}=t,{noop:a}=i,{arrayMax:r,arrayMin:n,isNumber:l,merge:h,pick:p,stableSort:d}=s;return class{constructor(t,e){this.setState=a,this.init(t,e)}init(t,e){this.options=t,this.visible=!0,this.chart=e.chart,this.legend=e}addToLegend(t){t.splice(this.options.legendIndex,0,this)}drawLegendSymbol(t){let e;let i=p(t.options.itemDistance,20),s=this.legendItem||{},o=this.options,a=o.ranges,r=o.connectorDistance;if(!a||!a.length||!l(a[0].value)){t.options.bubbleLegend.autoRanges=!0;return}d(a,function(t,e){return e.value-t.value}),this.ranges=a,this.setOptions(),this.render();let n=this.getMaxLabelSize(),h=this.ranges[0].radius,c=2*h;e=(e=r-h+n.width)>0?e:0,this.maxLabel=n,this.movementX="left"===o.labels.align?e:0,s.labelWidth=c+e+i,s.labelHeight=c+n.height/2}setOptions(){let t=this.ranges,e=this.options,i=this.chart.series[e.seriesIndex],s=this.legend.baseline,a={zIndex:e.zIndex,"stroke-width":e.borderWidth},r={zIndex:e.zIndex,"stroke-width":e.connectorWidth},n={align:this.legend.options.rtl||"left"===e.labels.align?"right":"left",zIndex:e.zIndex},l=i.options.marker.fillOpacity,d=this.chart.styledMode;t.forEach(function(c,u){d||(a.stroke=p(c.borderColor,e.borderColor,i.color),a.fill=p(c.color,e.color,1!==l?o(i.color).setOpacity(l).get("rgba"):i.color),r.stroke=p(c.connectorColor,e.connectorColor,i.color)),t[u].radius=this.getRangeRadius(c.value),t[u]=h(t[u],{center:t[0].radius-t[u].radius+s}),d||h(!0,t[u],{bubbleAttribs:h(a),connectorAttribs:h(r),labelAttribs:n})},this)}getRangeRadius(t){let e=this.options,i=this.options.seriesIndex,s=this.chart.series[i],o=e.ranges[0].value,a=e.ranges[e.ranges.length-1].value,r=e.minSize,n=e.maxSize;return s.getRadius.call(this,a,o,r,n,t)}render(){let t=this.legendItem||{},e=this.chart.renderer,i=this.options.zThreshold;for(let s of(this.symbols||(this.symbols={connectors:[],bubbleItems:[],labels:[]}),t.symbol=e.g("bubble-legend"),t.label=e.g("bubble-legend-item").css(this.legend.itemStyle||{}),t.symbol.translateX=0,t.symbol.translateY=0,t.symbol.add(t.label),t.label.add(t.group),this.ranges))s.value>=i&&this.renderRange(s);this.hideOverlappingLabels()}renderRange(t){let e=this.ranges[0],i=this.legend,s=this.options,o=s.labels,a=this.chart,r=a.series[s.seriesIndex],n=a.renderer,l=this.symbols,h=l.labels,p=t.center,d=Math.abs(t.radius),c=s.connectorDistance||0,u=o.align,g=i.options.rtl,f=s.borderWidth,b=s.connectorWidth,m=e.radius||0,y=p-d-f/2+b/2,x=(y%1?1:.5)-(b%2?0:.5),P=n.styledMode,S=g||"left"===u?-c:c;"center"===u&&(S=0,s.connectorDistance=0,t.labelAttribs.align="center"),l.bubbleItems.push(n.circle(m,p+x,d).attr(P?{}:t.bubbleAttribs).addClass((P?"highcharts-color-"+r.colorIndex+" ":"")+"highcharts-bubble-legend-symbol "+(s.className||"")).add(this.legendItem.symbol)),l.connectors.push(n.path(n.crispLine([["M",m,y],["L",m+S,y]],s.connectorWidth)).attr(P?{}:t.connectorAttribs).addClass((P?"highcharts-color-"+this.options.seriesIndex+" ":"")+"highcharts-bubble-legend-connectors "+(s.connectorClassName||"")).add(this.legendItem.symbol));let M=n.text(this.formatLabel(t)).attr(P?{}:t.labelAttribs).css(P?{}:o.style).addClass("highcharts-bubble-legend-labels "+(s.labels.className||"")).add(this.legendItem.symbol),L={x:m+S+s.labels.x,y:y+s.labels.y+.4*M.getBBox().height};M.attr(L),h.push(M),M.placed=!0,M.alignAttr=L}getMaxLabelSize(){let t,e;
23490return this.symbols.labels.forEach(function(i){e=i.getBBox(!0),t=t?e.width>t.width?e:t:e}),t||{}}formatLabel(t){let i=this.options,s=i.labels.formatter,o=i.labels.format,{numberFormatter:a}=this.chart;return o?e.format(o,t):s?s.call(t):a(t.value,1)}hideOverlappingLabels(){let t=this.chart,e=this.options.labels.allowOverlap,i=this.symbols;!e&&i&&(t.hideOverlappingLabels(i.labels),i.labels.forEach(function(t,e){t.newOpacity?t.newOpacity!==t.oldOpacity&&i.connectors[e].show():i.connectors[e].hide()}))}getRanges(){let t=this.legend.bubbleLegend,e=t.chart.series,i=t.options.ranges,s,o,a=Number.MAX_VALUE,d=-Number.MAX_VALUE;return e.forEach(function(t){t.isBubble&&!t.ignoreSeries&&(o=t.zData.filter(l)).length&&(a=p(t.options.zMin,Math.min(a,Math.max(n(o),!1===t.options.displayNegative?t.options.zThreshold:-Number.MAX_VALUE))),d=p(t.options.zMax,Math.max(d,r(o))))}),s=a===d?[{value:d}]:[{value:a},{value:(a+d)/2},{value:d,autoRanges:!0}],i.length&&i[0].radius&&s.reverse(),s.forEach(function(t,e){i&&i[e]&&(s[e]=h(i[e],t))}),s}predictBubbleSizes(){let t=this.chart,e=t.legend.options,i=e.floating,s="horizontal"===e.layout,o=s?t.legend.lastLineHeight:0,a=t.plotSizeX,r=t.plotSizeY,n=t.series[this.options.seriesIndex],l=n.getPxExtremes(),h=Math.ceil(l.minPxSize),p=Math.ceil(l.maxPxSize),d,c=n.options.maxSize;return i||!/%$/.test(c)?d=p:(d=(Math.min(r,a)+o)*(c=parseFloat(c))/100/(c/100+1),(s&&r-d>=a||!s&&a-d>=r)&&(d=p)),[h,Math.ceil(d)]}updateRanges(t,e){let i=this.legend.options.bubbleLegend;i.minSize=t,i.maxSize=e,i.ranges=this.getRanges()}correctSizes(){let t=this.legend,e=this.chart.series[this.options.seriesIndex].getPxExtremes();Math.abs(Math.ceil(e.maxPxSize)-this.options.maxSize)>1&&(this.updateRanges(this.options.minSize,e.maxPxSize),t.render())}}}),i(e,"Series/Bubble/BubbleLegendComposition.js",[e["Series/Bubble/BubbleLegendDefaults.js"],e["Series/Bubble/BubbleLegendItem.js"],e["Core/Defaults.js"],e["Core/Globals.js"],e["Core/Utilities.js"]],function(t,e,i,s,o){let{setOptions:a}=i,{composed:r}=s,{addEvent:n,objectEach:l,pushUnique:h,wrap:p}=o;function d(t,e,i){let s,o,a;let r=this.legend,n=c(this)>=0;r&&r.options.enabled&&r.bubbleLegend&&r.options.bubbleLegend.autoRanges&&n?(s=r.bubbleLegend.options,o=r.bubbleLegend.predictBubbleSizes(),r.bubbleLegend.updateRanges(o[0],o[1]),s.placed||(r.group.placed=!1,r.allItems.forEach(t=>{(a=t.legendItem||{}).group&&(a.group.translateY=void 0)})),r.render(),s.placed||(this.getMargins(),this.axes.forEach(function(t){t.visible&&t.render(),s.placed||(t.setScale(),t.updateNames(),l(t.ticks,function(t){t.isNew=!0,t.isNewLabel=!0}))}),this.getMargins()),s.placed=!0,t.call(this,e,i),r.bubbleLegend.correctSizes(),b(r,u(r))):(t.call(this,e,i),r&&r.options.enabled&&r.bubbleLegend&&(r.render(),b(r,u(r))))}function c(t){let e=t.series,i=0;for(;i<e.length;){if(e[i]&&e[i].isBubble&&e[i].visible&&e[i].zData.length)return i;i++}return -1}function u(t){let e=t.allItems,i=[],s=e.length,o,a,r,n=0,l=0;for(n=0;n<s;n++)if(a=e[n].legendItem||{},r=(e[n+1]||{}).legendItem||{},a.labelHeight&&(e[n].itemHeight=a.labelHeight),e[n]===e[s-1]||a.y!==r.y){for(i.push({height:0}),o=i[i.length-1];l<=n;l++)e[l].itemHeight>o.height&&(o.height=e[l].itemHeight);o.step=n}return i}function g(t){let i=this.bubbleLegend,s=this.options,o=s.bubbleLegend,a=c(this.chart);i&&i.ranges&&i.ranges.length&&(o.ranges.length&&(o.autoRanges=!!o.ranges[0].autoRanges),this.destroyItem(i)),a>=0&&s.enabled&&o.enabled&&(o.seriesIndex=a,this.bubbleLegend=new e(o,this),this.bubbleLegend.addToLegend(t.allItems))}function f(t){let e;if(t.defaultPrevented)return!1;let i=this.chart,s=this.visible,o=this.chart.legend;o&&o.bubbleLegend&&(this.visible=!s,this.ignoreSeries=s,e=c(i)>=0,o.bubbleLegend.visible!==e&&(o.update({bubbleLegend:{enabled:e}}),o.bubbleLegend.visible=e),this.visible=s)}function b(t,e){let i=t.allItems,s=t.options.rtl,o,a,r,n,l=0;i.forEach((t,i)=>{(n=t.legendItem||{}).group&&(o=n.group.translateX||0,a=n.y||0,((r=t.movementX)||s&&t.ranges)&&(r=s?o-t.options.maxSize/2:o+r,n.group.attr({translateX:r})),i>e[l].step&&l++,n.group.attr({translateY:Math.round(a+e[l].height/2)}),n.y=a+e[l].height/2)})}return{compose:function(e,i,s){h(r,"Series.BubbleLegend")&&(a({legend:{bubbleLegend:t}}),p(e.prototype,"drawChartBox",d),n(i,"afterGetAllItems",g),n(s,"legendItemClick",f))}}}),i(e,"Series/Bubble/BubblePoint.js",[e["Core/Series/Point.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e,
23490i){let{seriesTypes:{scatter:{prototype:{pointClass:s}}}}=e,{extend:o}=i;class a extends s{haloPath(e){return t.prototype.haloPath.call(this,0===e?0:(this.marker&&this.marker.radius||0)+e)}}return o(a.prototype,{ttBelow:!1}),a}),i(e,"Series/Bubble/BubbleSeries.js",[e["Series/Bubble/BubbleLegendComposition.js"],e["Series/Bubble/BubblePoint.js"],e["Core/Color/Color.js"],e["Core/Globals.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e,i,s,o,a){let{parse:r}=i,{composed:n,noop:l}=s,{series:h,seriesTypes:{column:{prototype:p},scatter:d}}=o,{addEvent:c,arrayMax:u,arrayMin:g,clamp:f,extend:b,isNumber:m,merge:y,pick:x,pushUnique:P}=a;function S(){let t=this.len,{coll:e,isXAxis:i,min:s}=this,o=i?"xData":"yData",a=(this.max||0)-(s||0),r=0,n=t,l=t/a,h;("xAxis"===e||"yAxis"===e)&&(this.series.forEach(t=>{if(t.bubblePadding&&t.reserveSpace()){this.allowZoomOutside=!0,h=!0;let e=t[o];if(i&&((t.onPoint||t).getRadii(0,0,t),t.onPoint&&(t.radii=t.onPoint.radii)),a>0){let i=e.length;for(;i--;)if(m(e[i])&&this.dataMin<=e[i]&&e[i]<=this.max){let o=t.radii&&t.radii[i]||0;r=Math.min((e[i]-s)*l-o,r),n=Math.max((e[i]-s)*l+o,n)}}}}),h&&a>0&&!this.logarithmic&&(n-=t,l*=(t+Math.max(0,r)-Math.min(n,t))/t,[["min","userMin",r],["max","userMax",n]].forEach(t=>{void 0===x(this.options[t[0]],this[t[1]])&&(this[t[0]]+=t[2]/l)})))}class M extends d{static compose(e,i,s,o){t.compose(i,s,o),P(n,"Series.Bubble")&&c(e,"foundExtremes",S)}animate(t){!t&&this.points.length<this.options.animationLimit&&this.points.forEach(function(t){let{graphic:e,plotX:i=0,plotY:s=0}=t;e&&e.width&&(this.hasRendered||e.attr({x:i,y:s,width:1,height:1}),e.animate(this.markerAttribs(t),this.options.animation))},this)}getRadii(){let t=this.zData,e=this.yData,i=[],s,o,a,r=this.chart.bubbleZExtremes,{minPxSize:n,maxPxSize:l}=this.getPxExtremes();if(!r){let t,e=Number.MAX_VALUE,i=-Number.MAX_VALUE;this.chart.series.forEach(s=>{if(s.bubblePadding&&s.reserveSpace()){let o=(s.onPoint||s).getZExtremes();o&&(e=Math.min(x(e,o.zMin),o.zMin),i=Math.max(x(i,o.zMax),o.zMax),t=!0)}}),t?(r={zMin:e,zMax:i},this.chart.bubbleZExtremes=r):r={zMin:0,zMax:0}}for(o=0,s=t.length;o<s;o++)a=t[o],i.push(this.getRadius(r.zMin,r.zMax,n,l,a,e&&e[o]));this.radii=i}getRadius(t,e,i,s,o,a){let r=this.options,n="width"!==r.sizeBy,l=r.zThreshold,h=e-t,p=.5;if(null===a||null===o)return null;if(m(o)){if(r.sizeByAbsoluteValue&&(o=Math.abs(o-l),e=h=Math.max(e-l,Math.abs(t-l)),t=0),o<t)return i/2-1;h>0&&(p=(o-t)/h)}return n&&p>=0&&(p=Math.sqrt(p)),Math.ceil(i+p*(s-i))/2}hasData(){return!!this.processedXData.length}markerAttribs(t,e){let i=super.markerAttribs(t,e),{height:s=0,width:o=0}=i;return this.chart.inverted?b(i,{x:(t.plotX||0)-o/2,y:(t.plotY||0)-s/2}):i}pointAttribs(t,e){let i=this.options.marker.fillOpacity,s=h.prototype.pointAttribs.call(this,t,e);return 1!==i&&(s.fill=r(s.fill).setOpacity(i).get("rgba")),s}translate(){super.translate.call(this),this.getRadii(),this.translateBubble()}translateBubble(){let{data:t,options:e,radii:i}=this,{minPxSize:s}=this.getPxExtremes(),o=t.length;for(;o--;){let a=t[o],r=i?i[o]:0;"z"===this.zoneAxis&&(a.negative=(a.z||0)<(e.zThreshold||0)),m(r)&&r>=s/2?(a.marker=b(a.marker,{radius:r,width:2*r,height:2*r}),a.dlBox={x:a.plotX-r,y:a.plotY-r,width:2*r,height:2*r}):(a.shapeArgs=a.plotY=a.dlBox=void 0,a.isInside=!1)}}getPxExtremes(){let t=Math.min(this.chart.plotWidth,this.chart.plotHeight),e=e=>{let i;return"string"==typeof e&&(i=/%$/.test(e),e=parseInt(e,10)),i?t*e/100:e},i=e(x(this.options.minSize,8)),s=Math.max(e(x(this.options.maxSize,"20%")),i);return{minPxSize:i,maxPxSize:s}}getZExtremes(){let t=this.options,e=(this.zData||[]).filter(m);if(e.length){let i=x(t.zMin,f(g(e),!1===t.displayNegative?t.zThreshold||0:-Number.MAX_VALUE,Number.MAX_VALUE)),s=x(t.zMax,u(e));if(m(i)&&m(s))return{zMin:i,zMax:s}}}}return M.defaultOptions=y(d.defaultOptions,{dataLabels:{formatter:function(){let{numberFormatter:t}=this.series.chart,{z:e}=this.point;return m(e)?t(e,-1):""},inside:!0,verticalAlign:"middle"},animationLimit:250,marker:{lineColor:null,lineWidth:1,fillOpacity:.5,radius:null,
23490states:{hover:{radiusPlus:0}},symbol:"circle"},minSize:8,maxSize:"20%",softThreshold:!1,states:{hover:{halo:{size:5}}},tooltip:{pointFormat:"({point.x}, {point.y}), Size: {point.z}"},turboThreshold:0,zThreshold:0,zoneAxis:"z"}),b(M.prototype,{alignDataLabel:p.alignDataLabel,applyZones:l,bubblePadding:!0,isBubble:!0,pointArrayMap:["y","z"],pointClass:e,parallelArrays:["x","y","z"],trackerGroups:["group","dataLabelsGroup"],specialGroup:"group",zoneAxis:"z"}),c(M,"updatedData",t=>{delete t.target.chart.bubbleZExtremes}),c(M,"remove",t=>{delete t.target.chart.bubbleZExtremes}),o.registerSeriesType("bubble",M),M}),i(e,"Series/ColumnRange/ColumnRangePoint.js",[e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e){let{seriesTypes:{column:{prototype:{pointClass:{prototype:i}}},arearange:{prototype:{pointClass:s}}}}=t,{extend:o,isNumber:a}=e;class r extends s{isValid(){return a(this.low)}}return o(r.prototype,{setState:i.setState}),r}),i(e,"Series/ColumnRange/ColumnRangeSeries.js",[e["Series/ColumnRange/ColumnRangePoint.js"],e["Core/Globals.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e,i,s){let{noop:o}=e,{seriesTypes:{arearange:a,column:r,column:{prototype:n}}}=i,{addEvent:l,clamp:h,extend:p,isNumber:d,merge:c,pick:u}=s;class g extends a{setOptions(){return c(!0,arguments[0],{stacking:void 0}),a.prototype.setOptions.apply(this,arguments)}translate(){return n.translate.apply(this)}pointAttribs(){return n.pointAttribs.apply(this,arguments)}translate3dPoints(){return n.translate3dPoints.apply(this,arguments)}translate3dShapes(){return n.translate3dShapes.apply(this,arguments)}afterColumnTranslate(){let t,e,i,s;let o=this.yAxis,a=this.xAxis,r=a.startAngleRad,n=this.chart,l=this.xAxis.isRadial,p=Math.max(n.chartWidth,n.chartHeight)+999;this.points.forEach(g=>{let f=g.shapeArgs||{},b=this.options.minPointLength,m=g.plotY,y=o.translate(g.high,0,1,0,1);if(d(y)&&d(m)){if(g.plotHigh=h(y,-p,p),g.plotLow=h(m,-p,p),s=g.plotHigh,Math.abs(t=u(g.rectPlotY,g.plotY)-g.plotHigh)<b?(e=b-t,t+=e,s-=e/2):t<0&&(t*=-1,s-=t),l&&this.polar)i=g.barX+r,g.shapeType="arc",g.shapeArgs=this.polar.arc(s+t,s,i,i+g.pointWidth);else{f.height=t,f.y=s;let{x:e=0,width:i=0}=f;g.shapeArgs=c(g.shapeArgs,this.crispCol(e,s,i,t)),g.tooltipPos=n.inverted?[o.len+o.pos-n.plotLeft-s-t/2,a.len+a.pos-n.plotTop-e-i/2,t]:[a.left-n.plotLeft+e+i/2,o.pos-n.plotTop+s+t/2,t]}}})}}return g.defaultOptions=c(r.defaultOptions,a.defaultOptions,{borderRadius:{where:"all"},pointRange:null,legendSymbol:"rectangle",marker:null,states:{hover:{halo:!1}}}),l(g,"afterColumnTranslate",function(){g.prototype.afterColumnTranslate.apply(this)},{order:5}),p(g.prototype,{directTouch:!0,pointClass:t,trackerGroups:["group","dataLabelsGroup"],adjustForMissingColumns:n.adjustForMissingColumns,animate:n.animate,crispCol:n.crispCol,drawGraph:o,drawPoints:n.drawPoints,getSymbol:o,drawTracker:n.drawTracker,getColumnMetrics:n.getColumnMetrics}),i.registerSeriesType("columnrange",g),g}),i(e,"Series/ColumnPyramid/ColumnPyramidSeriesDefaults.js",[],function(){return{}}),i(e,"Series/ColumnPyramid/ColumnPyramidSeries.js",[e["Series/ColumnPyramid/ColumnPyramidSeriesDefaults.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e,i){let{column:s}=e.seriesTypes,{clamp:o,merge:a,pick:r}=i;class n extends s{translate(){let t=this.chart,e=this.options,i=this.dense=this.closestPointRange*this.xAxis.transA<2,s=this.borderWidth=r(e.borderWidth,i?0:1),a=this.yAxis,n=e.threshold,l=r(e.minPointLength,5),h=this.getColumnMetrics(),p=h.width,d=this.pointXOffset=h.offset,c=this.translatedThreshold=a.getThreshold(n),u=this.barW=Math.max(p,1+2*s);for(let i of(t.inverted&&(c-=.5),e.pointPadding&&(u=Math.ceil(u)),super.translate(),this.points)){let s=r(i.yBottom,c),g=999+Math.abs(s),f=o(i.plotY,-g,a.len+g),b=u/2,m=Math.min(f,s),y=Math.max(f,s)-m,x=i.plotX+d,P,S,M,L,k,C,v,A,w,N,T;e.centerInCategory&&(x=this.adjustForMissingColumns(x,p,i,h)),i.barX=x,i.pointWidth=p,i.tooltipPos=t.inverted?[a.len+a.pos-t.plotLeft-f,this.xAxis.len-x-b,y]:[x+b,f+a.pos-t.plotTop,y],P=n+(i.total||i.y),"percent"===e.stacking&&(P=n+(i.y<0)?-100:100);let X=a.toPixels(P,!0);M=(S=t.plotHeight-X-(t.plotHeight-c))?b*(m-X)/S:0,L=S?b*(m+y-X)/S:0,C=x-M+b,v=x+M+b,A=x+L+b,w=x-L+b,N=m-l,T=m+y,i.y<0&&(N=m,T=m+y+l),t.inverted&&(k=a.width-m,S=X-(a.width-c),M=b*(X-k)/S,L=b*(X-(k-y))/S,v=(C=x+b+M
23490)-2*M,A=x-L+b,w=x+L+b,N=m,T=m+y-l,i.y<0&&(T=m+y+l)),i.shapeType="path",i.shapeArgs={x:C,y:N,width:v-C,height:y,d:[["M",C,N],["L",v,N],["L",A,T],["L",w,T],["Z"]]}}}}return n.defaultOptions=a(s.defaultOptions,t),e.registerSeriesType("columnpyramid",n),n}),i(e,"Series/ErrorBar/ErrorBarSeriesDefaults.js",[],function(){return{color:"#000000",grouping:!1,linkedTo:":previous",tooltip:{pointFormat:'<span style="color:{point.color}">â</span> {series.name}: <b>{point.low}</b> - <b>{point.high}</b><br/>'},whiskerWidth:null}}),i(e,"Series/ErrorBar/ErrorBarSeries.js",[e["Series/BoxPlot/BoxPlotSeries.js"],e["Series/Column/ColumnSeries.js"],e["Series/ErrorBar/ErrorBarSeriesDefaults.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e,i,s,o){let{arearange:a}=s.seriesTypes,{addEvent:r,merge:n,extend:l}=o;class h extends t{getColumnMetrics(){return this.linkedParent&&this.linkedParent.columnMetrics||e.prototype.getColumnMetrics.call(this)}drawDataLabels(){let t=this.pointValKey;if(a)for(let e of(a.prototype.drawDataLabels.call(this),this.points))e.y=e[t]}toYData(t){return[t.low,t.high]}}return h.defaultOptions=n(t.defaultOptions,i),r(h,"afterTranslate",function(){for(let t of this.points)t.plotLow=t.plotY},{order:0}),l(h.prototype,{pointArrayMap:["low","high"],pointValKey:"high",doQuartiles:!1}),s.registerSeriesType("errorbar",h),h}),i(e,"Series/Gauge/GaugePoint.js",[e["Core/Series/SeriesRegistry.js"]],function(t){let{series:{prototype:{pointClass:e}}}=t;return class extends e{setState(t){this.state=t}}}),i(e,"Series/Gauge/GaugeSeries.js",[e["Series/Gauge/GaugePoint.js"],e["Core/Globals.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e,i,s){let{noop:o}=e,{series:a,seriesTypes:{column:r}}=i,{clamp:n,isNumber:l,extend:h,merge:p,pick:d,pInt:c,defined:u}=s;class g extends a{translate(){let t=this.yAxis,e=this.options,i=t.center;this.generatePoints(),this.points.forEach(s=>{let o=p(e.dial,s.dial),a=c(o.radius)*i[2]/200,r=c(o.baseLength)*a/100,h=c(o.rearLength)*a/100,d=o.baseWidth,g=o.topWidth,f=e.overshoot,b=t.startAngleRad+t.translate(s.y,void 0,void 0,void 0,!0);(l(f)||!1===e.wrap)&&(f=l(f)?f/180*Math.PI:0,b=n(b,t.startAngleRad-f,t.endAngleRad+f)),b=180*b/Math.PI,s.shapeType="path";let m=o.path||[["M",-h,-d/2],["L",r,-d/2],["L",a,-g/2],["L",a,g/2],["L",r,d/2],["L",-h,d/2],["Z"]];s.shapeArgs={d:m,translateX:i[0],translateY:i[1],rotation:b},s.plotX=i[0],s.plotY=i[1],u(s.y)&&t.max-t.min&&(s.percentage=(s.y-t.min)/(t.max-t.min)*100)})}drawPoints(){let t=this,e=t.chart,i=t.yAxis.center,s=t.pivot,o=t.options,a=o.pivot,r=e.renderer;t.points.forEach(i=>{let s=i.graphic,a=i.shapeArgs,n=a.d,l=p(o.dial,i.dial);s?(s.animate(a),a.d=n):i.graphic=r[i.shapeType](a).addClass("highcharts-dial").add(t.group),e.styledMode||i.graphic[s?"animate":"attr"]({stroke:l.borderColor,"stroke-width":l.borderWidth,fill:l.backgroundColor})}),s?s.animate({translateX:i[0],translateY:i[1]}):a&&(t.pivot=r.circle(0,0,a.radius).attr({zIndex:2}).addClass("highcharts-pivot").translate(i[0],i[1]).add(t.group),e.styledMode||t.pivot.attr({fill:a.backgroundColor,stroke:a.borderColor,"stroke-width":a.borderWidth}))}animate(t){let e=this;t||e.points.forEach(t=>{let i=t.graphic;i&&(i.attr({rotation:180*e.yAxis.startAngleRad/Math.PI}),i.animate({rotation:t.shapeArgs.rotation},e.options.animation))})}render(){this.group=this.plotGroup("group","series",this.visible?"inherit":"hidden",this.options.zIndex,this.chart.seriesGroup),a.prototype.render.call(this),this.group.clip(this.chart.clipRect)}setData(t,e){a.prototype.setData.call(this,t,!1),this.processData(),this.generatePoints(),d(e,!0)&&this.chart.redraw()}hasData(){return!!this.points.length}}return g.defaultOptions=p(a.defaultOptions,{dataLabels:{borderColor:"#cccccc",borderRadius:3,borderWidth:1,crop:!1,defer:!1,enabled:!0,verticalAlign:"top",y:15,zIndex:2},dial:{backgroundColor:"#000000",baseLength:"70%",baseWidth:3,borderColor:"#cccccc",borderWidth:0,radius:"80%",rearLength:"10%",topWidth:1},pivot:{radius:5,borderWidth:0,borderColor:"#cccccc",backgroundColor:"#000000"},tooltip:{headerFormat:""},showInLegend:!1}),h(g.prototype,{angular:!0,directTouch:!0,drawGraph:o,drawTracker:r.prototype.drawTracker,fixedBox:!0,forceDL:!0,noSharedTooltip:!0,pointClass:t,trackerGroups:["group","dataLabelsGroup"]}),i.registerSeriesType("gauge",g),g}),i(e,"Series/DragNodesComposition.js",[e["Core/Globals.js"],e["Core/Utilities.js"]],function(t,e){let{composed:i}=t,{addEvent:s,pushUnique:o}=e;function a(){let t,e,i;let o=this;o.container&&(t=s(o.container,"mousedown",t=>{let a=o.hoverPoint;a&&a.series&&a.series.hasDraggableNodes&&a.series.options.draggable&&(a.series.onMouseDown(a,t),e=s(o.container,"mousemove",t=>a&&a.series&&a.series.onMouseMove(a,t)),i=s(o.container.ownerDocument,"mouseup",t=>(e(),i(),a&&a.series&&a.series.onMouseUp(a,t))))})),s(o,"destroy",function(){t()})}return{compose:function(t){o(i,"DragNodes")&&s(t,"load",a)},onMouseDown:function(t,e){let i=this.chart.pointer?.normalize(e)||e;t.fixedPosition={chartX:i.chartX,chartY:i.chartY,plotX:t.plotX,plotY:t.plotY},t.inDragMode=!0},onMouseMove:function(t,e){if(t.fixedPosition&&t.inDragMode){let i,s;let o=this.chart,a=o.pointer?.normalize(e)||e,r=t.fixedPosition.chartX-a.chartX,n=t.fixedPosition.chartY-a.chartY,l=o.graphLayoutsLookup;(Math.abs(r)>5||Math.abs(n)>5)&&(i=t.fixedPosition.plotX-r,s=t.fixedPosition.plotY-n,o.isInsidePlot(i,s)&&(t.plotX=i,t.plotY=s,t.hasDragged=!0,this.redrawHalo(t),l.forEach(t=>{t.restartSimulation()})))}},onMouseUp:function(t){t.fixedPosition&&(t.hasDragged&&(this.layout.enableSimulation?this.layout.start():this.chart.redraw()),t.inDragMode=t.hasDragged=!1,this.options.fixedDraggable||delete t.fixedPosition)},redrawHalo:function(t){t&&this.halo&&this.halo.attr({d:t.haloPath(this.options.states.hover.halo.size)})}}}
23490),i(e,"Series/GraphLayoutComposition.js",[e["Core/Animation/AnimationUtilities.js"],e["Core/Globals.js"],e["Core/Utilities.js"]],function(t,e,i){let{setAnimation:s}=t,{composed:o}=e,{addEvent:a,pushUnique:r}=i;function n(){this.graphLayoutsLookup&&(this.graphLayoutsLookup.forEach(t=>{t.updateSimulation()}),this.redraw())}function l(){this.graphLayoutsLookup&&(this.graphLayoutsLookup.forEach(t=>{t.updateSimulation(!1)}),this.redraw())}function h(){this.graphLayoutsLookup&&this.graphLayoutsLookup.forEach(t=>{t.stop()})}function p(){let t,e=!1,i=i=>{i.maxIterations--&&isFinite(i.temperature)&&!i.isStable()&&!i.enableSimulation&&(i.beforeStep&&i.beforeStep(),i.step(),t=!1,e=!0)};if(this.graphLayoutsLookup){for(s(!1,this),this.graphLayoutsLookup.forEach(t=>t.start());!t;)t=!0,this.graphLayoutsLookup.forEach(i);e&&this.series.forEach(t=>{t&&t.layout&&t.render()})}}return{compose:function(t){r(o,"GraphLayout")&&(a(t,"afterPrint",n),a(t,"beforePrint",l),a(t,"predraw",h),a(t,"render",p))},integrations:{},layouts:{}}}),i(e,"Series/PackedBubble/PackedBubblePoint.js",[e["Core/Chart/Chart.js"],e["Core/Series/Point.js"],e["Core/Series/SeriesRegistry.js"]],function(t,e,i){let{seriesTypes:{bubble:{prototype:{pointClass:s}}}}=i;return class extends s{destroy(){return this.series.layout&&this.series.layout.removeElementFromCollection(this,this.series.layout.nodes),e.prototype.destroy.apply(this,arguments)}firePointEvent(){let t=this.series.options;if(this.isParentNode&&t.parentNode){let i=t.allowPointSelect;t.allowPointSelect=t.parentNode.allowPointSelect,e.prototype.firePointEvent.apply(this,arguments),t.allowPointSelect=i}else e.prototype.firePointEvent.apply(this,arguments)}select(){let i=this.series.chart;this.isParentNode?(i.getSelectedPoints=i.getSelectedParentNodes,e.prototype.select.apply(this,arguments),i.getSelectedPoints=t.prototype.getSelectedPoints):e.prototype.select.apply(this,arguments)}}}),i(e,"Series/PackedBubble/PackedBubbleSeriesDefaults.js",[e["Core/Utilities.js"]],function(t){let{isNumber:e}=t;return{minSize:"10%",maxSize:"50%",sizeBy:"area",zoneAxis:"y",crisp:!1,tooltip:{pointFormat:"Value: {point.value}"},draggable:!0,useSimulation:!0,parentNode:{allowPointSelect:!1},dataLabels:{formatter:function(){let{numberFormatter:t}=this.series.chart,{value:i}=this.point;return e(i)?t(i,-1):""},parentNodeFormatter:function(){return this.name},parentNodeTextPath:{enabled:!0},padding:0,style:{transition:"opacity 2000ms"}},layoutAlgorithm:{initialPositions:"circle",initialPositionRadius:20,bubblePadding:5,parentNodeLimit:!1,seriesInteraction:!0,dragBetweenSeries:!1,parentNodeOptions:{maxIterations:400,gravitationalConstant:.03,maxSpeed:50,initialPositionRadius:100,seriesInteraction:!0,marker:{fillColor:null,fillOpacity:1,lineWidth:null,lineColor:null,symbol:"circle"}},enableSimulation:!0,type:"packedbubble",integration:"packedbubble",maxIterations:1e3,splitSeries:!1,maxSpeed:5,gravitationalConstant:.01,friction:-.981}}}),i(e,"Series/Networkgraph/VerletIntegration.js",[],function(){return{attractive:function(t,e,i){let s=t.getMass(),o=-i.x*e*this.diffTemperature,a=-i.y*e*this.diffTemperature;t.fromNode.fixedPosition||(t.fromNode.plotX-=o*s.fromNode/t.fromNode.degree,t.fromNode.plotY-=a*s.fromNode/t.fromNode.degree),t.toNode.fixedPosition||(t.toNode.plotX+=o*s.toNode/t.toNode.degree,t.toNode.plotY+=a*s.toNode/t.toNode.degree)},attractiveForceFunction:function(t,e){return(e-t)/t},barycenter:function(){let t=this.options.gravitationalConstant||0,e=(this.barycenter.xFactor-(this.box.left+this.box.width)/2)*t,i=(this.barycenter.yFactor-(this.box.top+this.box.height)/2)*t;this.nodes.forEach(function(t){t.fixedPosition||(t.plotX-=e/t.mass/t.degree,t.plotY-=i/t.mass/t.degree)})},getK:function(t){return Math.pow(t.box.width*t.box.height/t.nodes.length,.5)},integrate:function(t,e){let i=-t.options.friction,s=t.options.maxSpeed,o=e.prevX,a=e.prevY,r=(e.plotX+e.dispX-o)*i,n=(e.plotY+e.dispY-a)*i,l=Math.abs,h=l(r)/(r||1),p=l(n)/(n||1),d=h*Math.min(s,Math.abs(r)),c=p*Math.min(s,Math.abs(n));e.prevX=e.plotX+e.dispX,e.prevY=e.plotY+e.dispY,e.plotX+=d,e.plotY+=c,e.temperature=t.vectorLength({x:d,y:c})}
23490,repulsive:function(t,e,i){let s=e*this.diffTemperature/t.mass/t.degree;t.fixedPosition||(t.plotX+=i.x*s,t.plotY+=i.y*s)},repulsiveForceFunction:function(t,e){return(e-t)/t*(e>t?1:0)}}}),i(e,"Series/PackedBubble/PackedBubbleIntegration.js",[e["Core/Globals.js"],e["Series/Networkgraph/VerletIntegration.js"]],function(t,e){let{noop:i}=t;return{barycenter:function(){let t,e;let i=this.options.gravitationalConstant,s=this.box,o=this.nodes;for(let a of o)this.options.splitSeries&&!a.isParentNode?(t=a.series.parentNode.plotX,e=a.series.parentNode.plotY):(t=s.width/2,e=s.height/2),a.fixedPosition||(a.plotX-=(a.plotX-t)*i/(a.mass*Math.sqrt(o.length)),a.plotY-=(a.plotY-e)*i/(a.mass*Math.sqrt(o.length)))},getK:i,integrate:e.integrate,repulsive:function(t,e,i,s){let o=e*this.diffTemperature/t.mass/t.degree,a=i.x*o,r=i.y*o;t.fixedPosition||(t.plotX+=a,t.plotY+=r),s.fixedPosition||(s.plotX-=a,s.plotY-=r)},repulsiveForceFunction:function(t,e,i,s){return Math.min(t,(i.marker.radius+s.marker.radius)/2)}}}),i(e,"Series/Networkgraph/EulerIntegration.js",[],function(){return{attractive:function(t,e,i,s){let o=t.getMass(),a=i.x/s*e,r=i.y/s*e;t.fromNode.fixedPosition||(t.fromNode.dispX-=a*o.fromNode/t.fromNode.degree,t.fromNode.dispY-=r*o.fromNode/t.fromNode.degree),t.toNode.fixedPosition||(t.toNode.dis
vendor: 8,685 bytes, line 23490
23490pX+=a*o.toNode/t.toNode.degree,t.toNode.dispY+=r*o.toNode/t.toNode.degree)},attractiveForceFunction:function(t,e){return t*t/e},barycenter:function(){let t=this.options.gravitationalConstant,e=this.barycenter.xFactor,i=this.barycenter.yFactor;this.nodes.forEach(function(s){if(!s.fixedPosition){let o=s.getDegree(),a=o*(1+o/2);s.dispX+=(e-s.plotX)*t*a/s.degree,s.dispY+=(i-s.plotY)*t*a/s.degree}})},getK:function(t){return Math.pow(t.box.width*t.box.height/t.nodes.length,.3)},integrate:function(t,e){e.dispX+=e.dispX*t.options.friction,e.dispY+=e.dispY*t.options.friction;let i=e.temperature=t.vectorLength({x:e.dispX,y:e.dispY});0!==i&&(e.plotX+=e.dispX/i*Math.min(Math.abs(e.dispX),t.temperature),e.plotY+=e.dispY/i*Math.min(Math.abs(e.dispY),t.temperature))},repulsive:function(t,e,i,s){t.dispX+=i.x/s*e/t.degree,t.dispY+=i.y/s*e/t.degree},repulsiveForceFunction:function(t,e){return e*e/t}}}),i(e,"Series/Networkgraph/QuadTreeNode.js",[],function(){class t{constructor(t){this.body=!1,this.isEmpty=!1,this.isInternal=!1,this.nodes=[],this.box=t,this.boxSize=Math.min(t.width,t.height)}divideBox(){let e=this.box.width/2,i=this.box.height/2;this.nodes[0]=new t({left:this.box.left,top:this.box.top,width:e,height:i}),this.nodes[1]=new t({left:this.box.left+e,top:this.box.top,width:e,height:i}),this.nodes[2]=new t({left:this.box.left+e,top:this.box.top+i,width:e,height:i}),this.nodes[3]=new t({left:this.box.left,top:this.box.top+i,width:e,height:i})}getBoxPosition(t){let e=t.plotX<this.box.left+this.box.width/2,i=t.plotY<this.box.top+this.box.height/2;return e?i?0:3:i?1:2}insert(e,i){let s;this.isInternal?this.nodes[this.getBoxPosition(e)].insert(e,i-1):(this.isEmpty=!1,this.body?i?(this.isInternal=!0,this.divideBox(),!0!==this.body&&(this.nodes[this.getBoxPosition(this.body)].insert(this.body,i-1),this.body=!0),this.nodes[this.getBoxPosition(e)].insert(e,i-1)):((s=new t({top:e.plotX||NaN,left:e.plotY||NaN,width:.1,height:.1})).body=e,s.isInternal=!1,this.nodes.push(s)):(this.isInternal=!1,this.body=e))}updateMassAndCenter(){let t=0,e=0,i=0;if(this.isInternal){for(let s of this.nodes)s.isEmpty||(t+=s.mass,e+=s.plotX*s.mass,i+=s.plotY*s.mass);e/=t,i/=t}else this.body&&(t=this.body.mass,e=this.body.plotX,i=this.body.plotY);this.mass=t,this.plotX=e,this.plotY=i}}return t}),i(e,"Series/Networkgraph/QuadTree.js",[e["Series/Networkgraph/QuadTreeNode.js"]],function(t){return class{constructor(e,i,s,o){this.box={left:e,top:i,width:s,height:o},this.maxDepth=25,this.root=new t(this.box),this.root.isInternal=!0,this.root.isRoot=!0,this.root.divideBox()}calculateMassAndCenter(){this.visitNodeRecursive(null,null,function(t){t.updateMassAndCenter()})}insertNodes(t){for(let e of t)this.root.insert(e,this.maxDepth)}visitNodeRecursive(t,e,i){let s;if(t||(t=this.root),t===this.root&&e&&(s=e(t)),!1!==s){for(let o of t.nodes){if(o.isInternal){if(e&&(s=e(o)),!1===s)continue;this.visitNodeRecursive(o,e,i)}else o.body&&e&&e(o.body);i&&i(o)}t===this.root&&i&&i(t)}}}}),i(e,"Series/Networkgraph/ReingoldFruchtermanLayout.js",[e["Series/Networkgraph/EulerIntegration.js"],e["Core/Globals.js"],e["Series/GraphLayoutComposition.js"],e["Series/Networkgraph/QuadTree.js"],e["Core/Utilities.js"],e["Series/Networkgraph/VerletIntegration.js"]],function(t,e,i,s,o,a){let{win:r}=e,{clamp:n,defined:l,isFunction:h,fireEvent:p,pick:d}=o;class c{constructor(){this.box={},this.currentStep=0,this.initialRendering=!0,this.links=[],this.nodes=[],this.series=[],this.simulation=!1}static compose(e){i.compose(e),i.integrations.euler=t,i.integrations.verlet=a,i.layouts["reingold-fruchterman"]=c}init(t){this.options=t,this.nodes=[],this.links=[],this.series=[],this.box={x:0,y:0,width:0,height:0},this.setInitialRendering(!0),this.integration=i.integrations[t.integration],this.enableSimulation=t.enableSimulation,this.attractiveForce=d(t.attractiveForce,this.integration.attractiveForceFunction),this.repulsiveForce=d(t.repulsiveForce,this.integration.repulsiveForceFunction),this.approximation=t.approximation}updateSimulation(t){this.enableSimulation=d(t,this.options.enableSimulation)}start(){let t=this.series,e=this.options;this.currentStep=0,this.forces=t[0]&&t[0].forces||[],this.chart=t[0]&&t[0].chart,this.initialRendering&&(this.initPositions(),t.forEach(function(t){t.finishedAnimating=!0,t.render()})),this.setK(),this.resetSimulation(e),this.enableSimulation&&this.step()}step(){let t=this.series;for(let t of(this.currentStep++,"barnes-hut"===this.approximation&&(this.createQuadTree(),this.quadTree.calculateMassAndCenter()),this.forces||[]))this[t+"Forces"](this.temperature);if(this.applyLimits(),this.temperature=this.coolDown(this.startTemperature,this.diffTemperature,this.currentStep),this.prevSystemTemperature=this.systemTemperature,this.systemTemperature=this.getSystemTemperature(),this.enableSimulation){for(let e of t)e.chart&&e.render();this.maxIterations--&&isFinite(this.temperature)&&!this.isStable()?(this.simulation&&r.cancelAnimationFrame(this.simulation),this.simulation=r.requestAnimationFrame(()=>this.step())):(this.simulation=!1,this.series.forEach(t=>{p(t,"afterSimulation")}))}}stop(){this.simulation&&r.cancelAnimationFrame(this.simulation)}setArea(t,e,i,s){this.box={left:t,top:e,width:i,height:s}}setK(){this.k=this.options.linkLength||this.integration.getK(this)}addElementsToCollection(t,e){for(let i of t)-1===e.indexOf(i)&&e.push(i)}removeElementFromCollection(t,e){let i=e.indexOf(t);-1!==i&&e.splice(i,1)}clear(){this.nodes.length=0,this.links.length=0,this.series.length=0,this.resetSimulation()}resetSimulation(){this.forcedStop=!1,this.systemTemperature=0,this.setMaxIterations(),this.setTemperature(),this.setDiffTemperature()}restartSimulation(){this.simulation?this.resetSimulation():(this.setInitialRendering(!1),this.enableSimulation?this.start():this.setMaxIterations(1),this.chart&&this.chart.redraw(),this.setInitialRendering(!0))}setMaxIterations(t){this.maxIterations=d(t,this.options.maxIterations)}setTemperature(){this.temperature=this.startTemperature=Math.sqrt(this.nodes.length)}setDiffTemperature(){this.diffTemperature=this.startTemperature/(this.options.maxIterations+1)}setInitialRendering(t){this.initialRendering=t}createQuadTree(){this.quadTree=new s(this.box.left,this.box.top,this.box.width,this.box.height),this.quadTree.insertNodes(this.nodes)}initPositions(){let t=this.options.initialPositions;if(h(t))for(let e of(t.call(this),this.nodes))l(e.prevX)||(e.prevX=e.plotX),l(e.prevY)||(e.prevY=e.plotY),e.dispX=0,e.dispY=0;else"circle"===t?this.setCircularPositions():this.setRandomPositions()}setCircularPositions(){let t;let e=this.box,i=this.nodes,s=2*Math.PI/(i.length+1),o=i.filter(function(t){return 0===t.linksTo.length}),a={},r=this.options.initialPositionRadius,n=t=>{for(let e of t.linksFrom||[])a[e.toNode.id]||(a[e.toNode.id]=!0,l.push(e.toNode),n(e.toNode))},l=[];for(let t of o)l.push(t),n(t);if(l.length)for(let t of i)-1===l.indexOf(t)&&l.push(t);else l=i;for(let i=0,o=l.length;i<o;++i)(t=l[i]).plotX=t.prevX=d(t.plotX,e.width/2+r*Math.cos(i*s)),t.plotY=t.prevY=d(t.plotY,e.height/2+r*Math.sin(i*s)),t.dispX=0,t.dispY=0}setRandomPositions(){let t;let e=this.box,i=this.nodes,s=i.length+1,o=t=>{let e=t*t/Math.PI;return e-Math.floor(e)};for(let a=0,r=i.length;a<r;++a)(t=i[a]).plotX=t.prevX=d(t.plotX,e.width*o(a)),t.plotY=t.prevY=d(t.plotY,e.height*o(s+a)),t.dispX=0,t.dispY=0}force(t,...e){this.integration[t].apply(this,e)}barycenterForces(){this.getBarycenter(),this.force("barycenter")}getBarycenter(){let t=0,e=0,i=0;for(let s of this.nodes)e+=s.plotX*s.mass,i+=s.plotY*s.mass,t+=s.mass;return this.barycenter={x:e,y:i,xFactor:e/t,yFactor:i/t},this.barycenter}barnesHutApproximation(t,e){let i,s;let o=this.getDistXY(t,e),a=this.vectorLength(o);return t!==e&&0!==a&&(e.isInternal?e.boxSize/a<this.options.theta&&0!==a?(s=this.repulsiveForce(a,this.k),this.force("repulsive",t,s*e.mass,o,a),i=!1):i=!0:(s=this.repulsiveForce(a,this.k),this.force("repulsive",t,s*e.mass,o,a))),i}repulsiveForces(){if("barnes-hut"===this.approximation)for(let t of this.nodes)this.quadTree.visitNodeRecursive(null,e=>this.barnesHutApproximation(t,e));else{let t,e,i;for(let s of this.nodes)for(let o of this.nodes)s===o||s.fixedPosition||(i=this.getDistXY(s,o),0!==(e=this.vectorLength(i))&&(t=this.repulsiveForce(e,this.k),this.force("repulsive",s,t*o.mass,i,e)))}}attractiveForces(){let t,e,i;for(let s of this.links)s.fromNode&&s.toNode&&(t=this.getDistXY(s.fromNode,s.toNode),0!==(e=this.vectorLength(t))&&(i=this.attractiveForce(e,this.k),this.force("attractive",s,i,t,e)))}applyLimits(){for(let t of this.nodes)t.fixedPosition||(this.integration.integrate(this,t),this.applyLimitBox(t,this.box),t.dis
23490pX=0,t.dispY=0)}applyLimitBox(t,e){let i=t.radius;t.plotX=n(t.plotX,e.left+i,e.width-i),t.plotY=n(t.plotY,e.top+i,e.height-i)}coolDown(t,e,i){return t-e*i}isStable(){return 1e-5>Math.abs(this.systemTemperature-this.prevSystemTemperature)||this.temperature<=0}getSystemTemperature(){let t=0;for(let e of this.nodes)t+=e.temperature;return t}vectorLength(t){return Math.sqrt(t.x*t.x+t.y*t.y)}getDistR(t,e){let i=this.getDistXY(t,e);return this.vectorLength(i)}getDistXY(t,e){let i=t.plotX-e.plotX,s=t.plotY-e.plotY;return{x:i,y:s,absX:Math.abs(i),absY:Math.abs(s)}}}return c}),i(e,"Series/PackedBubble/PackedBubbleLayout.js",[e["Series/GraphLayoutComposition.js"],e["Series/PackedBubble/PackedBubbleIntegration.js"],e["Series/Networkgraph/ReingoldFruchtermanLayout.js"],e["Core/Utilities.js"]],function(t,e,i,s){let{addEvent:o,pick:a}=s;function r(){let t=this.series,e=[];return t.forEach(t=>{t.parentNode&&t.parentNode.selected&&e.push(t.parentNode)}),e}function n(){this.allDataPoints&&delete this.allDataPoints}class l extends i{constructor(){super(...arguments),this.index=NaN,this.nodes=[],this.series=[]}static compose(s){i.compose(s),t.integrations.packedbubble=e,t.layouts.packedbubble=l;let a=s.prototype;a.getSelectedParentNodes||(o(s,"beforeRedraw",n),a.getSelectedParentNodes=r)}beforeStep(){this.options.marker&&this.series.forEach(t=>{t&&t.calculateParentRadius()})}isStable(){let t=Math.abs(this.prevSystemTemperature-this.systemTemperature);return 1>Math.abs(10*this.systemTemperature/Math.sqrt(this.nodes.length))&&t<1e-5||this.temperature<=0}setCircularPositions(){let t=this.box,e=this.nodes,i=2*Math.PI/(e.length+1),s=this.options.initialPositionRadius,o,r,n=0;for(let l of e)this.options.splitSeries&&!l.isParentNode?(o=l.series.parentNode.plotX,r=l.series.parentNode.plotY):(o=t.width/2,r=t.height/2),l.plotX=l.prevX=a(l.plotX,o+s*Math.cos(l.index||n*i)),l.plotY=l.prevY=a(l.plotY,r+s*Math.sin(l.index||n*i)),l.dispX=0,l.dispY=0,n++}repulsiveForces(){let t,e,i;let s=this,o=s.options.bubblePadding,a=s.nodes;a.forEach(r=>{r.degree=r.mass,r.neighbours=0,a.forEach(a=>{t=0,r!==a&&!r.fixedPosition&&(s.options.seriesInteraction||r.series===a.series)&&(i=s.getDistXY(r,a),(e=s.vectorLength(i)-(r.marker.radius+a.marker.radius+o))<0&&(r.degree+=.01,r.neighbours++,t=s.repulsiveForce(-e/Math.sqrt(r.neighbours),s.k,r,a)),s.force("repulsive",r,t*a.mass,i,a,e))})})}applyLimitBox(t,e){let i,s;this.options.splitSeries&&!t.isParentNode&&this.options.parentNodeLimit&&(i=this.getDistXY(t,t.series.parentNode),(s=t.series.parentNodeRadius-t.marker.radius-this.vectorLength(i))<0&&s>-2*t.marker.radius&&(t.plotX-=.01*i.x,t.plotY-=.01*i.y)),super.applyLimitBox(t,e)}}return t.layouts.packedbubble=l,l}),i(e,"Series/SimulationSeriesUtilities.js",[e["Core/Utilities.js"],e["Core/Animation/AnimationUtilities.js"]],function(t,e){let{merge:i,syncTimeout:s}=t,{animObject:o}=e;return{initDataLabels:function(){let t=this.options.dataLabels;if(!this.dataLabelsGroup){let e=this.initDataLabelsGroup();return!this.chart.styledMode&&t?.style&&e.css(t.style),e.attr({opacity:0}),this.visible&&e.show(),e}return this.dataLabelsGroup.attr(i({opacity:1},this.getPlotBox("data-labels"))),this.dataLabelsGroup},initDataLabelsDefer:function(){let t=this.options.dataLabels;t?.defer&&this.options.layoutAlgorithm?.enableSimulation?s(()=>{this.deferDataLabels=!1},t?o(t.animation).defer:0):this.deferDataLabels=!1}}}),i(e,"Series/PackedBubble/PackedBubbleSeries.js",[e["Core/Color/Color.js"],e["Series/DragNodesComposition.js"],e["Series/GraphLayoutComposition.js"],e["Core/Globals.js"],e["Series/PackedBubble/PackedBubblePoint.js"],e["Series/PackedBubble/PackedBubbleSeriesDefaults.js"],e["Series/PackedBubble/PackedBubbleLayout.js"],e["Core/Series/SeriesRegistry.js"],e["Series/SimulationSeriesUtilities.js"],e["Core/Utilities.js"]],function(t,e,i,s,o,a,r,n,l,h){let{parse:p}=t,{noop:d}=s,{series:{prototype:c},seriesTypes:{bubble:u}}=n,{initDataLabels:g,initDataLabelsDefer:f}=l,{addEvent:b,clamp:m,defined:y,extend:x,fireEvent:P,isArray:S,isNumber:M,merge:L,pick:k}=h;class C extends u{constructor(){super(...arguments),this.parentNodeMass=0,this.deferDataLabels=!0}static compose(t,i,s,o){u.compose(t,i,s,o),e.compose(i),r.compose(i)}accumulateAllPoints(){let t;let e=this.chart,i=[];for(let s of e.series)if(s.is("packedbubble")&&s.reserveSpace()){t=s.yData||[];for(let e=0;e<t.length;e++)i.push([null,null,t[e],s.index,e,{id:e,marker:{radius:0}}])}return i}addLayout(){let t=this.options.layoutAlgorithm=this.options.layoutAlgorithm||{},e=t.type||"packedbubble",s=this.chart.options.chart,o=this.chart.graphLayoutsStorage,a=this.chart.graphLayoutsLookup,r;o||(this.chart.graphLayoutsStorage=o={},this.chart.graphLayoutsLookup=a=[]),(r=o[e])||(t.enableSimulation=y(s.forExport)?!s.forExport:t.enableSimulation,o[e]=r=ne
vendor: 6,453 bytes, line 23490
23490w i.layouts[e],r.init(t),a.splice(r.index,0,r)),this.layout=r,this.points.forEach(t=>{t.mass=2,t.degree=1,t.collisionNmb=1}),r.setArea(0,0,this.chart.plotWidth,this.chart.plotHeight),r.addElementsToCollection([this],r.series),r.addElementsToCollection(this.points,r.nodes)}addSeriesLayout(){let t=this.options.layoutAlgorithm=this.options.layoutAlgorithm||{},e=t.type||"packedbubble",s=this.chart.graphLayoutsStorage,o=this.chart.graphLayoutsLookup,a=L(t,t.parentNodeOptions,{enableSimulation:this.layout.options.enableSimulation}),r=s[e+"-series"];r||(s[e+"-series"]=r=new i.layouts[e],r.init(a),o.splice(r.index,0,r)),this.parentNodeLayout=r,this.createParentNodes()}calculateParentRadius(){let t=this.seriesBox();this.parentNodeRadius=m(Math.sqrt(2*this.parentNodeMass/Math.PI)+20,20,t?Math.max(Math.sqrt(Math.pow(t.width,2)+Math.pow(t.height,2))/2+20,20):Math.sqrt(2*this.parentNodeMass/Math.PI)+20),this.parentNode&&(this.parentNode.marker.radius=this.parentNode.radius=this.parentNodeRadius)}calculateZExtremes(){let t=this.chart.series,e=this.options.zMin,i=this.options.zMax,s=1/0,o=-1/0;return e&&i?[e,i]:(t.forEach(t=>{t.yData.forEach(t=>{y(t)&&(t>o&&(o=t),t<s&&(s=t))})}),[e=k(e,s),i=k(i,o)])}checkOverlap(t,e){let i=t[0]-e[0],s=t[1]-e[1];return Math.sqrt(i*i+s*s)-Math.abs(t[2]+e[2])<-.001}createParentNodes(){let t=this.pointClass,e=this.chart,i=this.parentNodeLayout,s=this.layout.options,o,a=this.parentNode,r={radius:this.parentNodeRadius,lineColor:this.color,fillColor:p(this.color).brighten(.4).get()};s.parentNodeOptions&&(r=L(s.parentNodeOptions.marker||{},r)),this.parentNodeMass=0,this.points.forEach(t=>{this.parentNodeMass+=Math.PI*Math.pow(t.marker.radius,2)}),this.calculateParentRadius(),i.nodes.forEach(t=>{t.seriesIndex===this.index&&(o=!0)}),i.setArea(0,0,e.plotWidth,e.plotHeight),o||(a||(a=new t(this,{mass:this.parentNodeRadius/2,marker:r,dataLabels:{inside:!1},states:{normal:{marker:r},hover:{marker:r}},dataLabelOnNull:!0,degree:this.parentNodeRadius,isParentNode:!0,seriesIndex:this.index})),this.parentNode&&(a.plotX=this.parentNode.plotX,a.plotY=this.parentNode.plotY),this.parentNode=a,i.addElementsToCollection([this],i.series),i.addElementsToCollection([a],i.nodes))}deferLayout(){let t=this.options.layoutAlgorithm;this.visible&&(this.addLayout(),t.splitSeries&&this.addSeriesLayout())}destroy(){this.chart.graphLayoutsLookup&&this.chart.graphLayoutsLookup.forEach(t=>{t.removeElementFromCollection(this,t.series)},this),this.parentNode&&this.parentNodeLayout&&(this.parentNodeLayout.removeElementFromCollection(this.parentNode,this.parentNodeLayout.nodes),this.parentNode.dataLabel&&(this.parentNode.dataLabel=this.parentNode.dataLabel.destroy())),c.destroy.apply(this,arguments)}drawDataLabels(){!this.deferDataLabels&&(c.drawDataLabels.call(this,this.points),this.parentNode&&(this.parentNode.formatPrefix="parentNode",c.drawDataLabels.call(this,[this.parentNode])))}drawGraph(){if(!this.layout||!this.layout.options.splitSeries)return;let t=this.chart,e=this.layout.options.parentNodeOptions.marker,i={fill:e.fillColor||p(this.color).brighten(.4).get(),opacity:e.fillOpacity,stroke:e.lineColor||this.color,"stroke-width":k(e.lineWidth,this.options.lineWidth)},s={};this.parentNodesGroup=this.plotGroup("parentNodesGroup","parentNode",this.visible?"inherit":"hidden",.1,t.seriesGroup),this.group?.attr({zIndex:2}),this.calculateParentRadius(),this.parentNode&&y(this.parentNode.plotX)&&y(this.parentNode.plotY)&&y(this.parentNodeRadius)&&(s=L({x:this.parentNode.plotX-this.parentNodeRadius,y:this.parentNode.plotY-this.parentNodeRadius,width:2*this.parentNodeRadius,height:2*this.parentNodeRadius},i),this.parentNode.graphic||(this.graph=this.parentNode.graphic=t.renderer.symbol(i.symbol).add(this.parentNodesGroup)),this.parentNode.graphic.attr(s))}drawTracker(){let t;let e=this.parentNode;super.drawTracker(),e&&(t=S(e.dataLabels)?e.dataLabels:e.dataLabel?[e.dataLabel]:[],e.graphic&&(e.graphic.element.point=e),t.forEach(t=>{(t.div||t.element).point=e}))}getPointRadius(){let t,e,i,s;let o=this.chart,a=o.plotWidth,r=o.plotHeight,n=this.options,l=n.useSimulation,h=Math.min(a,r),p={},d=[],c=o.allDataPoints||[],u=c.length;["minSize","maxSize"].forEach(t=>{let e=parseInt(n[t],10),i=/%$/.test(n[t]);p[t]=i?h*e/100:e*Math.sqrt(u)}),o.minRadius=t=p.minSize/Math.sqrt(u),o.maxRadius=e=p.maxSize/Math.sqrt(u);let g=l?this.calculateZExtremes():[t,e];c.forEach((o,a)=>{i=l?m(o[2],g[0],g[1]):o[2],0===(s=this.getRadius(g[0],g[1],t,e,i))&&(s=null),c[a][2]=s,d.push(s)}),this.radii=d}init(){return c.init.apply(this,arguments),f.call(this),this.eventsToUnbind.push(b(this,"updatedData",function(){this.chart.series.forEach(t=>{t.type===this.type&&(t.isDirty=!0)},this)})),this}onMouseUp(t){if(t.fixedPosition&&!t.removed){let i;let s=this.layout,o=this.parentNodeLayout;o&&s.options.dragBetweenSeries&&o.nodes.forEach(e=>{t&&t.marker&&e!==t.series.parentNode&&(i=s.getDistXY(t,e),s.vectorLength(i)-e.marker.radius-t.marker.radius<0&&(e.series.addPoint(L(t.options,{plotX:t.plotX,plotY:t.plotY}),!1),s.removeElementFromCollection(t,s.nodes),t.remove()))}),e.onMouseUp.apply(this,arguments)}}placeBubbles(t){let e=this.checkOverlap,i=this.positionBubble,s=[],o=1,a=0,r=0,n,l=[],h,p=t.sort((t,e)=>e[2]-t[2]);if(p.length){if(s.push([[0,0,p[0][2],p[0][3],p[0][4]]]),p.length>1)for(s.push([[0,0-p[1][2]-p[0][2],p[1][2],p[1][3],p[1][4]]]),h=2;h<p.length;h++)p[h][2]=p[h][2]||1,e(n=i(s[o][a],s[o-1][r],p[h]),s[o][0])?(s.push([]),r=0,s[o+1].push(i(s[o][a],s[o][0],p[h])),o++,a=0):o>1&&s[o-1][r+1]&&e(n,s[o-1][r+1])?(r++,s[o].push(i(s[o][a],s[o-1][r],p[h])),a++):(a++,s[o].push(n));this.chart.stages=s,this.chart.rawPositions=[].concat.apply([],s),this.resizeRadius(),l=this.chart.rawPositions}return l}pointAttribs(t,e){let i=this.options,s=t&&t.isParentNode,o=i.marker;s&&i.layoutAlgorithm&&i.layoutAlgorithm.parentNodeOptions&&(o=i.layoutAlgorithm.parentNodeOptions.marker);let a=o.fillOpacity,r=c.pointAttribs.call(this,t,e);return 1!==a&&(r["fill-opacity"]=a),r}positionBubble(t,e,i){let s=Math.pow,o=(0,Math.sqrt)(s(t[0]-e[0],2)+s(t[1]-e[1],2)),a=(0,Math.acos)((s(o,2)+s(i[2]+e[2],2)-s(i[2]+t[2],2))/(2*(i[2]+e[2])*o)),r=(0,Math.asin)((0,Math.abs)(t[0]-e[0])/o),n=(t[1]-e[1]<0?0:Math.PI)+a+r*((t[0]-e[0])*(t[1]-e[1])<0?1:-1);return[e[0]+(e[2]+i[2])*Math.sin(n),e[1]-(e[2]+i[2])*Math.cos(n),i[2],i[3],i[4]]}render(){let t=[];c.render.apply(this,arguments),!this.options.dataLabels.allowOverlap&&(this.data.forEach(e=>
23490{S(e.dataLabels)&&e.dataLabels.forEach(e=>{t.push(e)})}),this.options.useSimulation&&this.chart.hideOverlappingLabels(t))}resizeRadius(){let t,e,i,s,o;let a=this.chart,r=a.rawPositions,n=Math.min,l=Math.max,h=a.plotLeft,p=a.plotTop,d=a.plotHeight,c=a.plotWidth;for(let a of(t=i=Number.POSITIVE_INFINITY,e=s=Number.NEGATIVE_INFINITY,r))o=a[2],t=n(t,a[0]-o),e=l(e,a[0]+o),i=n(i,a[1]-o),s=l(s,a[1]+o);let u=[e-t,s-i],g=[(c-h)/u[0],(d-p)/u[1]],f=n.apply([],g);if(Math.abs(f-1)>1e-10){for(let t of r)t[2]*=f;this.placeBubbles(r)}else a.diffY=d/2+p-i-(s-i)/2,a.diffX=c/2+h-t-(e-t)/2}seriesBox(){let t;let e=this.chart,i=this.data,s=Math.max,o=Math.min,a=[e.plotLeft,e.plotLeft+e.plotWidth,e.plotTop,e.plotTop+e.plotHeight];return i.forEach(e=>{y(e.plotX)&&y(e.plotY)&&e.marker.radius&&(t=e.marker.radius,a[0]=o(a[0],e.plotX-t),a[1]=s(a[1],e.plotX+t),a[2]=o(a[2],e.plotY-t),a[3]=s(a[3],e.plotY+t))}),M(a.width/a.height)?a:null}setVisible(){let t=this;c.setVisible.apply(t,arguments),t.parentNodeLayout&&t.graph?t.visible?(t.graph.show(),t.parentNode.dataLabel&&t.parentNode.dataLabel.show()):(t.graph.hide(),t.parentNodeLayout.removeElementFromCollection(t.parentNode,t.parentNodeLayout.nodes),t.parentNode.dataLabel&&t.parentNode.dataLabel.hide()):t.layout&&(t.visible?t.layout.addElementsToCollection(t.points,t.layout.nodes):t.points.forEach(e=>{t.layout.removeElementFromCollection(e,t.layout.nodes)}))}translate(){let t,e,i;let s=this.chart,o=this.data,a=this.index,r=this.options.useSimulation;for(let n of(this.processedXData=this.xData,this.generatePoints(),y(s.allDataPoints)||(s.allDataPoints=this.accumulateAllPoints(),this.getPointRadius()),r?i=s.allDataPoints:(i=this.placeBubbles(s.allDataPoints),this.options.draggable=!1),i))n[3]===a&&(t=o[n[4]],e=k(n[2],void 0),r||(t.plotX=n[0]-s.plotLeft+s.diffX,t.plotY=n[1]-s.plotTop+s.diffY),M(e)&&(t.marker=x(t.marker,{radius:e,width:2*e,height:2*e}),t.radius=e));r&&this.deferLayout(),P(this,"afterTranslate")}}return C.defaultOptions=L(u.defaultOptions,a),x(C.prototype,{pointClass:o,axisTypes:[],directTouch:!0,forces:["barycenter","repulsive"],hasDraggableNodes:!0,invertible:!1,isCartesian:!1,noSharedTooltip:!0,pointArrayMap:["value"],pointValKey:"value",requireSorting:!1,trackerGroups:["group","dataLabelsGroup","parentNodesGroup"],initDataLabels:g,alignDataLabel:c.alignDataLabel,indexateNodes:d,onMouseDown:e.onMouseDown,onMouseMove:e.onMouseMove,redrawHalo:e.redrawHalo,searchPoint:d}),n.registerSeriesType("packedbubble",C),C}),i(e,"Series/Polygon/PolygonSeriesDefaults.js",[],function(){return{marker:{enabled:!1,states:{hover:{enabled:!1}}},stickyTracking:!1,tooltip:{followPointer:!0,pointFormat:""},trackByArea:!0,legendSymbol:"rectangle"}}),i(e,"Series/Polygon/PolygonSeries.js",[e["Core/Globals.js"],e["Series/Polygon/PolygonSeriesDefaults.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e,i,s){let{noop:o}=t,{area:a,line:r,scatter:n}=i.seriesTypes,{extend:l,merge:h}=s;class p extends n{getGraphPath(){let t=r.prototype.getGraphPath.call(this),e=t.length+1;for(;e--;)(e===t.length||"M"===t[e][0])&&e>0&&t.splice(e,0,["Z"]);return this.areaPath=t,t}drawGraph(){this.options.fillColor=this.color,a.prototype.drawGraph.call(this)}}return p.defaultOptions=h(n.defaultOptions,e),l(p.prototype,{type:"polygon",drawTracker:r.prototype.drawTracker,setStackedPoints:o}),i.registerSeriesType("polygon",p),p}),i(e,"Core/Axis/RadialAxisDefaults.js",[],function(){return{circular:{gridLineWidth:1,labels:{align:void 0,x:0,y:void 0,style:{textOverflow:"none"}},maxPadding:0,minPadding:0,showLastLabel:!1,tickLength:0},radial:{gridLineInterpolation:"circle",gridLineWidth:1,labels:{align:"right",padding:5,x:-3,y:-2},showLastLabel:!1,title:{x:4,text:null,rotation:90}},radialGauge:{endOnTick:!1,gridLineWidth:0,labels:{align:"center",distance:-25,x:0,y:void 0},lineWidth:1,minorGridLineWidth:0,minorTickInterval:"auto",minorTickLength:10,minorTickPosition:"inside",minorTickWidth:1,startOnTick:!1,tickLength:10,tickPixelInterval:100,tickPosition:"inside",tickWidth:2,title:{rotation:0,text:""},zIndex:2}}}),i(e,"Core/Axis/RadialAxis.js",[e["Core/Axis/RadialAxisDefaults.js"],e["Core/Defaults.js"],e["Core/Globals.js"],e["Core/Utilities.js"]],function(t,e,
23490i,s){var o;let{defaultOptions:a}=e,{composed:r,noop:n}=i,{addEvent:l,correctFloat:h,defined:p,extend:d,fireEvent:c,isObject:u,merge:g,pick:f,pushUnique:b,relativeLength:m,wrap:y}=s;return function(e){function s(){this.autoConnect=this.isCircular&&void 0===f(this.userMax,this.options.max)&&h(this.endAngleRad-this.startAngleRad)===h(2*Math.PI),!this.isCircular&&this.chart.inverted&&this.max++,this.autoConnect&&(this.max+=this.categories&&1||this.pointRange||this.closestPointRange||0)}function o(){return()=>{if(this.isRadial&&this.tickPositions&&this.options.labels&&!0!==this.options.labels.allowOverlap)return this.tickPositions.map(t=>this.ticks[t]&&this.ticks[t].label).filter(t=>!!t)}}function x(){return n}function P(t,e,i){let s=this.pane.center,o=t.value,a,r,n;return this.isCircular?(p(o)?t.point&&(t.point.shapeArgs||{}).start&&(o=this.chart.inverted?this.translate(t.point.rectPlotY,!0):t.point.x):(r=t.chartX||0,n=t.chartY||0,o=this.translate(Math.atan2(n-i,r-e)-this.startAngleRad,!0)),r=(a=this.getPosition(o)).x,n=a.y):(p(o)||(r=t.chartX,n=t.chartY),p(r)&&p(n)&&(i=s[1]+this.chart.plotTop,o=this.translate(Math.min(Math.sqrt(Math.pow(r-e,2)+Math.pow(n-i,2)),s[2]/2)-s[3]/2,!0))),[o,r||0,n||0]}function S(t,e,i){let s=this.pane.center,o=this.chart,a=this.left||0,r=this.top||0,n,l=f(e,s[2]/2-this.offset),h;return void 0===i&&(i=this.horiz?0:this.center&&-this.center[3]/2),i&&(l+=i),this.isCircular||void 0!==e?((h=this.chart.renderer.symbols.arc(a+s[0],r+s[1],l,l,{start:this.startAngleRad,end:this.endAngleRad,open:!0,innerR:0})).xBounds=[a+s[0]],h.yBounds=[r+s[1]-l]):(n=this.postTranslate(this.angleRad,l),h=[["M",this.center[0]+o.plotLeft,this.center[1]+o.plotTop],["L",n.x,n.y]]),h}function M(){this.constructor.prototype.getOffset.call(this),this.chart.axisOffset[this.side]=0}function L(t,e,i){let s=this.chart,o=t=>{if("string"==typeof t){let e=parseInt(t,10);return d.test(t)&&(e=e*n/100),e}return t},a=this.center,r=this.startAngleRad,n=a[2]/2,l=Math.min(this.offset,0),h=this.left||0,p=this.top||0,d=/%$/,c=this.isCircular,u,g,b,m,y,x,P=f(o(i.outerRadius),n),S=o(i.innerRadius),M=f(o(i.thickness),10);if("polygon"===this.options.gridLineInterpolation)x=this.getPlotLinePath({value:t}).concat(this.getPlotLinePath({value:e,reverse:!0}));else{t=Math.max(t,this.min),e=Math.min(e,this.max);let o=this.translate(t),n=this.translate(e);c||(P=o||0,S=n||0),"circle"!==i.shape&&c?(u=r+(o||0),g=r+(n||0)):(u=-Math.PI/2,g=1.5*Math.PI,y=!0),P-=l,M-=l,x=s.renderer.symbols.arc(h+a[0],p+a[1],P,P,{start:Math.min(u,g),end:Math.max(u,g),innerR:f(S,P-M),open:y,borderRadius:i.borderRadius}),c&&(b=(g+u)/2,m=h+a[0]+a[2]/2*Math.cos(b),x.xBounds=b>-Math.PI/2&&b<Math.PI/2?[m,s.plotWidth]:[0,m],x.yBounds=[p+a[1]+a[2]/2*Math.sin(b)],x.yBounds[0]+=b>-Math.PI&&b<0||b>Math.PI?-10:10)}return x}function k(t){let e=this.pane.center,i=this.chart,s=i.inverted,o=t.reverse,a=this.pane.options.background?this.pane.options.background[0]||this.pane.options.background:{},r=a.innerRadius||"0%",n=a.outerRadius||"100%",l=e[0]+i.plotLeft,h=e[1]+i.plotTop,p=this.height,d=t.isCrosshair,c=e[3]/2,u=t.value,g,f,b,y,x,P,S,M,L,k=this.getPosition(u),C=k.x,v=k.y;if(d&&(u=(M=this.getCrosshairPosition(t,l,h))[0],C=M[1],v=M[2]),this.isCircular)f=Math.sqrt(Math.pow(C-l,2)+Math.pow(v-h,2)),b="string"==typeof r?m(r,1):r/f,y="string"==typeof n?m(n,1):n/f,e&&c&&(b<(g=c/f)&&(b=g),y<g&&(y=g)),L=[["M",l+b*(C-l),h-b*(h-v)],["L",C-(1-y)*(C-l),v+(1-y)*(h-v)]];else if((u=this.translate(u))&&(u<0||u>p)&&(u=0),"circle"===this.options.gridLineInterpolation)L=this.getLinePath(0,u,c);else if(L=[],i[s?"yAxis":"xAxis"].forEach(t=>{t.pane===this.pane&&(x=t)}),x){S=x.tickPositions,x.autoConnect&&(S=S.concat([S[0]])),o&&(S=S.slice().reverse()),u&&(u+=c);for(let t=0;t<S.length;t++)P=x.getPosition(S[t],u),L.push(t?["L",P.x,P.y]:["M",P.x,P.y])}return L}function C(t,e){let i=this.translate(t);return this.postTranslate(this.isCircular?i:this.angleRad,f(this.isCircular?e:i<0?0:i,this.center[2]/2)-this.offset)}function v(){let t=this.center,e=this.chart,i=this.options.title;return{x:e.plotLeft+t[0]+(i.x||0),y:e.plotTop+t[1]-({high:.5,middle:.25,low:0})[i.align]*t[2]+(i.y||0)}}function A(t){t.beforeSetTickPositions=s,t.createLabelCollector=o,t.getCrosshairPosition=P,t.getLinePath=S,t.getOffset=M,t.getPlotBandPath=L,t.getPlotLinePath=k,t.getPosition=C,t.getTitlePosition=v,t.postTranslate=D,t.setAxisSize=E,t.setAxisTranslation=z,t.setOptions=O}function w(){let t=this.chart,e=this.options,i=t.angular&&this.isXAxis,s=this.pane,o=s&&s.options;if(!i&&s&&(t.angular||t.polar)){let t=2*Math.PI,i=(f(o.startAngle,0)-90)*Math.PI/180,s=(f(o.endAngle,f(o.startAngle,0)+360)-90)*Math.PI/180;this.angleRad=(e.angle||0)*Math.PI/180,this.startAngleRad=i,this.endAngleRad=s,this.offset=e.offset||0;let a=(i%t+t)%t,r=(s%t+t)%t;a>Math.PI&&(a-=t),r>Math.PI&&(r-=t),this.normalizedStartAngleRad=a,this.normalizedEndAngleRad=r}}function N(t){this.isRadial&&(t.align=void 0,t.preventDefault())}function T(){if(this.chart&&this.chart.labelCollectors){let t=this.labelCollector?this.chart.labelCollectors.indexOf(this.labelCollector):-1;t>=0&&this.chart.labelCollectors.splice(t,1)}}function X(t){let e;let i=this.chart,s=i.angular,o=i.polar,a=this.isXAxis,r=this.coll,l=t.userOptions.pane||0,h=this.pane=i.pane&&i.pane[l];
23490if("colorAxis"===r){this.isRadial=!1;return}s?(s&&a?(this.isHidden=!0,this.createLabelCollector=x,this.getOffset=n,this.redraw=B,this.render=B,this.setScale=n,this.setCategories=n,this.setTitle=n):A(this),e=!a):o&&(A(this),e=this.horiz),s||o?(this.isRadial=!0,this.labelCollector||(this.labelCollector=this.createLabelCollector()),this.labelCollector&&i.labelCollectors.push(this.labelCollector)):this.isRadial=!1,h&&e&&(h.axis=this),this.isCircular=e}function R(){this.isRadial&&this.beforeSetTickPositions()}function Y(t){let e=this.label;if(!e)return;let i=this.axis,s=e.getBBox(),o=i.options.labels,a=(i.translate(this.pos)+i.startAngleRad+Math.PI/2)/Math.PI*180%360,r=Math.round(a),n=p(o.y)?0:-(.3*s.height),l=o.y,h,d=20,c=o.align,u="end",g=r<0?r+360:r,b=g,y=0,x=0;i.isRadial&&(h=i.getPosition(this.pos,i.center[2]/2+m(f(o.distance,-25),i.center[2]/2,-i.center[2]/2)),"auto"===o.rotation?e.attr({rotation:a}):p(l)||(l=i.chart.renderer.fontMetrics(e).b-s.height/2),p(c)||(i.isCircular?(s.width>i.len*i.tickInterval/(i.max-i.min)&&(d=0),c=a>d&&a<180-d?"left":a>180+d&&a<360-d?"right":"center"):c="center",e.attr({align:c})),"auto"===c&&2===i.tickPositions.length&&i.isCircular&&(g>90&&g<180?g=180-g:g>270&&g<=360&&(g=540-g),b>180&&b<=360&&(b=360-b),(i.pane.options.startAngle===r||i.pane.options.startAngle===r+360||i.pane.options.startAngle===r-360)&&(u="start"),c=r>=-90&&r<=90||r>=-360&&r<=-270||r>=270&&r<=360?"start"===u?"right":"left":"start"===u?"left":"right",b>70&&b<110&&(c="center"),g<15||g>=180&&g<195?y=.3*s.height:g>=15&&g<=35?y="start"===u?0:.75*s.height:g>=195&&g<=215?y="start"===u?.75*s.height:0:g>35&&g<=90?y="start"===u?-(.25*s.height):s.height:g>215&&g<=270&&(y="start"===u?s.height:-(.25*s.height)),b<15?x="start"===u?-(.15*s.height):.15*s.height:b>165&&b<=180&&(x="start"===u?.15*s.height:-(.15*s.height)),e.attr({align:c}),e.translate(x,y+n)),t.pos.x=h.x+(o.x||0),t.pos.y=h.y+(l||0))}function j(t){this.axis.getPosition&&d(t.pos,this.axis.getPosition(this.pos))}function I({options:t}){t.xAxis&&g(!0,e.radialDefaultOptions.circular,t.xAxis),t.yAxis&&g(!0,e.radialDefaultOptions.radialGauge,t.yAxis)}function D(t,e){let i=this.chart,s=this.center;return t=this.startAngleRad+t,{x:i.plotLeft+s[0]+Math.cos(t)*e,y:i.plotTop+s[1]+Math.sin(t)*e}}function B(){this.isDirty=!1}function E(){let t,e;this.constructor.prototype.setAxisSize.call(this),this.isRadial&&(this.pane.updateCenter(this),t=this.center=this.pane.center.slice(),this.isCircular?this.sector=this.endAngleRad-this.startAngleRad:(e=this.postTranslate(this.angleRad,t[3]/2),t[0]=e.x-this.chart.plotLeft,t[1]=e.y-this.chart.plotTop),this.len=this.width=this.height=(t[2]-t[3])*f(this.sector,1)/2)}function z(){this.constructor.prototype.setAxisTranslation.call(this),this.center&&(this.isCircular?this.transA=(this.endAngleRad-this.startAngleRad)/(this.max-this.min||1):this.transA=(this.center[2]-this.center[3])/2/(this.max-this.min||1),this.isXAxis?this.minPixelPadding=this.transA*this.minPointOffset:this.minPixelPadding=0)}function O(t){let{coll:i}=this,{angular:s,inverted:o,polar:r}=this.chart,n={};s?this.isXAxis||(n=g(a.yAxis,e.radialDefaultOptions.radialGauge)):r&&(n=this.horiz?g(a.xAxis,e.radialDefaultOptions.circular):g("xAxis"===i?a.xAxis:a.yAxis,e.radialDefaultOptions.radial)),o&&"yAxis"===i&&(n.stackLabels=u(a.yAxis,!0)?a.yAxis.stackLabels:{},n.reversedStacks=!0);let l=this.options=g(n,t);l.plotBands||(l.plotBands=[]),c(this,"afterSetOptions")}function W(t,e,i,s,o,a,r){let n;let l=this.axis;return l.isRadial?["M",e,i,"L",(n=l.getPosition(this.pos,l.center[2]/2+s)).x,n.y]:t.call(this,e,i,s,o,a,r)}e.radialDefaultOptions=g(t),e.compose=function(t,e){return b(r,"Axis.Radial")&&(l(t,"afterInit",w),l(t,"autoLabelAlign",N),l(t,"destroy",T),l(t,"init",X),l(t,"initialAxisTranslation",R),l(e,"afterGetLabelPosition",Y),l(e,"afterGetPosition",j),l(i,"setOptions",I),y(e.prototype,"getMarkPath",W)),t}}(o||(o={})),o}),i(e,"Series/PolarComposition.js",[e["Core/Animation/AnimationUtilities.js"],e["Core/Globals.js"],e["Core/Series/Series.js"],e["Extensions/Pane/Pane.js"],e["Core/Axis/RadialAxis.js"],e["Core/Utilities.js"]],function(t,e,
vendor: 5,047 bytes, line 23490
23490i,s,o,a){let{animObject:r}=t,{composed:n}=e,{addEvent:l,defined:h,find:p,isNumber:d,merge:c,pick:u,pushUnique:g,relativeLength:f,splat:b,uniqueKey:m,wrap:y}=a;function x(){(this.pane||[]).forEach(t=>{t.render()})}function P(t){let e=t.args[0].xAxis,i=t.args[0].yAxis,s=t.args[0].chart;e&&i&&("polygon"===i.gridLineInterpolation?(e.startOnTick=!0,e.endOnTick=!0):"polygon"===e.gridLineInterpolation&&s.inverted&&(i.startOnTick=!0,i.endOnTick=!0))}function S(){this.pane||(this.pane=[]),this.options.pane=b(this.options.pane),this.options.pane.forEach(t=>{new s(t,this)},this)}function M(t){let e=t.args.marker,i=this.chart.xAxis[0],s=this.chart.yAxis[0],o=this.chart.inverted,a=o?s:i,r=o?i:s;if(this.chart.polar){t.preventDefault();let i=(e.attr?e.attr("start"):e.start)-a.startAngleRad,s=e.attr?e.attr("r"):e.r,o=(e.attr?e.attr("end"):e.end)-a.startAngleRad,n=e.attr?e.attr("innerR"):e.innerR;t.result.x=i+a.pos,t.result.width=o-i,t.result.y=r.len+r.pos-s,t.result.height=s-n}}function L(t){let e=this.chart;if(e.polar&&e.hoverPane&&e.hoverPane.axis){t.preventDefault();let i=e.hoverPane.center,s=e.mouseDownX||0,o=e.mouseDownY||0,a=t.args.chartY,r=t.args.chartX,n=2*Math.PI,l=e.hoverPane.axis.startAngleRad,h=e.hoverPane.axis.endAngleRad,p=e.inverted?e.xAxis[0]:e.yAxis[0],d={},c="arc";if(d.x=i[0]+e.plotLeft,d.y=i[1]+e.plotTop,this.zoomHor){let t=l>0?h-l:Math.abs(l)+Math.abs(h),u=Math.atan2(o-e.plotTop-i[1],s-e.plotLeft-i[0])-l,g=Math.atan2(a-e.plotTop-i[1],r-e.plotLeft-i[0])-l;d.r=i[2]/2,d.innerR=i[3]/2,u<=0&&(u+=n),g<=0&&(g+=n),g<u&&(g=[u,u=g][0]),t<n&&l+g>h+(n-t)/2&&(g=u,u=l<=0?l:0);let f=d.start=Math.max(u+l,l),b=d.end=Math.min(g+l,h);if("polygon"===p.options.gridLineInterpolation){let t=e.hoverPane.axis,s=f-t.startAngleRad+t.pos,o=p.getPlotLinePath({value:p.max}),a=t.toValue(s),r=t.toValue(s+(b-f));if(a<t.getExtremes().min){let{min:e,max:i}=t.getExtremes();a=i-(e-a)}if(r<t.getExtremes().min){let{min:e,max:i}=t.getExtremes();r=i-(e-r)}r<a&&(r=[a,a=r][0]),(o=A(o,a,r,t)).push(["L",i[0]+e.plotLeft,e.plotTop+i[1]]),d.d=o,c="path"}}if(this.zoomVert){let t=e.inverted?e.xAxis[0]:e.yAxis[0],n=Math.sqrt(Math.pow(s-e.plotLeft-i[0],2)+Math.pow(o-e.plotTop-i[1],2)),p=Math.sqrt(Math.pow(r-e.plotLeft-i[0],2)+Math.pow(a-e.plotTop-i[1],2));if(p<n&&(n=[p,p=n][0]),p>i[2]/2&&(p=i[2]/2),n<i[3]/2&&(n=i[3]/2),this.zoomHor||(d.start=l,d.end=h),d.r=p,d.innerR=n,"polygon"===t.options.gridLineInterpolation){let e=t.toValue(t.len+t.pos-n),i=t.toValue(t.len+t.pos-p),s=t.getPlotLinePath({value:i}).concat(t.getPlotLinePath({value:e,reverse:!0}));d.d=s,c="path"}}if(this.zoomHor&&this.zoomVert&&"polygon"===p.options.gridLineInterpolation){let t=e.hoverPane.axis,i=d.start||0,s=d.end||0,o=i-t.startAngleRad+t.pos,a=t.toValue(o),r=t.toValue(o+(s-i));if(d.d instanceof Array){let t=d.d.slice(0,d.d.length/2),i=d.d.slice(d.d.length/2,d.d.length);i=[...i].reverse();let s=e.hoverPane.axis;t=A(t,a,r,s),(i=A(i,a,r,s))&&(i[0][0]="L"),i=[...i].reverse(),d.d=t.concat(i),c="path"}}t.attrs=d,t.shapeType=c}}function k(){let t=this.chart;t.polar&&(this.polar=new B(this),t.inverted&&(this.isRadialSeries=!0,this.is("column")&&(this.isRadialBar=!0)))}function C(){if(this.chart.polar&&this.xAxis){let{xAxis:t,yAxis:i}=this,s=this.chart;this.kdByAngle=s.tooltip&&s.tooltip.shared,this.kdByAngle||s.inverted?this.searchPoint=v:this.options.findNearestPointBy="xy";let o=this.points,a=o.length;for(;a--;)this.is("column")||this.is("columnrange")||this.polar.toXY(o[a]),s.hasParallelCoordinates||this.yAxis.reversed||(u(o[a].y,Number.MIN_VALUE)<i.min||o[a].x<t.min||o[a].x>t.max?(o[a].isNull=!0,o[a].plotY=NaN):o[a].isNull=o[a].isValid&&!o[a].isValid());this.hasClipCircleSetter||(this.hasClipCircleSetter=!!this.eventsToUnbind.push(l(this,"afterRender",function(){let t;s.polar&&!1!==this.options.clip&&(t=this.yAxis.pane.center,this.clipCircle?this.clipCircle.animate({x:t[0],y:t[1],r:t[2]/2,innerR:t[3]/2}):this.clipCircle=function(t,e,i,s,o){let a=m(),r=t.createElement("clipPath").attr({id:a}).add(t.defs),n=o?t.arc(e,i,s,o,0,2*Math.PI).add(r):t.circle(e,i,s).add(r);return n.id=a,n.clipPath=r,n}(s.renderer,t[0],t[1],t[2]/2,t[3]/2),this.group.clip(this.clipCircle),this.setClip=e.noop)})))}}function v(t){let e=this.chart,i=this.xAxis,s=this.yAxis,o=i.pane&&i.pane.center,a=t.chartX-(o&&o[0]||0)-e.plotLeft,r=t.chartY-(o&&o[1]||0)-e.plotTop,n=e.inverted?{clientX:t.chartX-s.pos,plotY:t.chartY-i.pos}:{clientX:180+-180/Math.PI*Math.atan2(a,r)};return this.searchKDTree(n)}function A(t,e,i,s){let o=s.tickInterval,a=s.tickPositions,r=p(a,t=>t>=i),n=p([...a].reverse(),t=>t<=e);return h(r)||(r=a[a.length-1]),h(n)||(n=a[0],r+=o,t[0][0]="L",t.unshift(t[t.length-3])),(t=t.slice(a.indexOf(n),a.indexOf(r)+1))[0][0]="M",t}function w(t,e){return p(this.pane||[],t=>t.options.id===e)||t.call(this,e)}function N(t,e,s,o,a,r){let n,l,h;let p=this.chart,d=u(o.inside,!!this.options.stacking);if(p.polar){if(n=e.rectPlotX/Math.PI*180,p.inverted)this.forceDL=p.isInsidePlot(e.plotX,e.plotY),d&&e.shapeArgs?(l=e.shapeArgs,a=c(a,{x:(h=this.yAxis.postTranslate(((l.start||0
23490)+(l.end||0))/2-this.xAxis.startAngleRad,e.barX+e.pointWidth/2)).x-p.plotLeft,y:h.y-p.plotTop})):e.tooltipPos&&(a=c(a,{x:e.tooltipPos[0],y:e.tooltipPos[1]})),o.align=u(o.align,"center"),o.verticalAlign=u(o.verticalAlign,"middle");else{var g;let t,e;null===(g=o).align&&(t=n>20&&n<160?"left":n>200&&n<340?"right":"center",g.align=t),null===g.verticalAlign&&(e=n<45||n>315?"bottom":n>135&&n<225?"top":"middle",g.verticalAlign=e),o=g}i.prototype.alignDataLabel.call(this,e,s,o,a,r),this.isRadialBar&&e.shapeArgs&&e.shapeArgs.start===e.shapeArgs.end?s.hide():s.show()}else t.call(this,e,s,o,a,r)}function T(){let t=this.options,e=t.stacking,i=this.chart,s=this.xAxis,o=this.yAxis,r=o.reversed,n=o.center,l=s.startAngleRad,p=s.endAngleRad-l,c=t.threshold,u=0,g,b,m,y,x,P=0,S=0,M,L,k,C,v,A,w,N;if(s.isRadial)for(m=(g=this.points).length,y=o.translate(o.min),x=o.translate(o.max),c=t.threshold||0,i.inverted&&d(c)&&h(u=o.translate(c))&&(u<0?u=0:u>p&&(u=p),this.translatedThreshold=u+l);m--;){if(A=(b=g[m]).barX,L=b.x,k=b.y,b.shapeType="arc",i.inverted){b.plotY=o.translate(k),e&&o.stacking?(v=o.stacking.stacks[(k<0?"-":"")+this.stackKey],this.visible&&v&&v[L]&&!b.isNull&&(C=v[L].points[this.getStackIndicator(void 0,L,this.index).key],P=o.translate(C[0]),S=o.translate(C[1]),h(P)&&(P=a.clamp(P,0,p)))):(P=u,S=b.plotY),P>S&&(S=[P,P=S][0]),r?S>y?S=y:P<x?P=x:(P>y||S<x)&&(P=S=p):P<y?P=y:S>x?S=x:(S<y||P>x)&&(P=S=0),o.min>o.max&&(P=S=r?p:0),P+=l,S+=l,n&&(b.barX=A+=n[3]/2),w=Math.max(A,0),N=Math.max(A+b.pointWidth,0);let i=t.borderRadius,s=f(("object"==typeof i?i.radius:i)||0,N-w);b.shapeArgs={x:n[0],y:n[1],r:N,innerR:w,start:P,end:S,borderRadius:s},b.opacity=P===S?0:void 0,b.plotY=(h(this.translatedThreshold)&&(P<this.translatedThreshold?P:S))-l}else P=A+l,b.shapeArgs=this.polar.arc(b.yBottom,b.plotY,P,P+b.pointWidth),b.shapeArgs.borderRadius=0;this.polar.toXY(b),i.inverted?(M=o.postTranslate(b.rectPlotY,A+b.pointWidth/2),b.tooltipPos=[M.x-i.plotLeft,M.y-i.plotTop]):b.tooltipPos=[b.plotX,b.plotY],n&&(b.ttBelow=b.plotY>n[1])}}function X(t,e){let i,s;let o=this;if(this.chart.polar){e=e||this.points;for(let t=0;t<e.length;t++)if(!e[t].isNull){i=t;break}!1!==this.options.connectEnds&&void 0!==i&&(this.connectEnds=!0,e.splice(e.length,0,e[i]),s=!0),e.forEach(t=>{void 0===t.polarPlotY&&o.polar.toXY(t)})}let a=t.apply(this,[].slice.call(arguments,1));return s&&e.pop(),a}function R(t,e){let i=this.chart,s={xAxis:[],yAxis:[]};return i.polar?i.axes.forEach(t=>{if("colorAxis"===t.coll)return;let o=t.isXAxis,a=t.center,r=e.chartX-a[0]-i.plotLeft,n=e.chartY-a[1]-i.plotTop;s[o?"xAxis":"yAxis"].push({axis:t,value:t.translate(o?Math.PI-Math.atan2(r,n):Math.sqrt(Math.pow(r,2)+Math.pow(n,2)),!0)})}):s=t.call(this,e),s}function Y(t,e){this.chart.polar||t.call(this,e)}function j(t,i){let s=this,o=this.chart,a=this.group,n=this.markerGroup,l=this.xAxis&&this.xAxis.center,h=o.plotLeft,p=o.plotTop,d=this.options.animation,c,g,f,b,m,y;o.polar?s.isRadialBar?i||(s.startAngleRad=u(s.translatedThreshold,s.xAxis.startAngleRad),e.seriesTypes.pie.prototype.animate.call(s,i)):(d=r(d),s.is("column")?i||(g=l[3]/2,s.points.forEach(t=>{f=t.graphic,m=(b=t.shapeArgs)&&b.r,y=b&&b.innerR,f&&b&&(f.attr({r:g,innerR:g}),f.animate({r:m,innerR:y},s.options.animation))})):i?(c={translateX:l[0]+h,translateY:l[1]+p,scaleX:.001,scaleY:.001},a.attr(c),n&&n.attr(c)):(c={translateX:h,translateY:p,scaleX:1,scaleY:1},a.animate(c,d),n&&n.animate(c,d))):t.call(this,i)}function I(t,e,i,s){let o,a;if(this.chart.polar){if(s){let t=(a=function t(e,i,s,o){let a,r,n,l,h,p;let d=o?1:0,c=(a=i>=0&&i<=e.length-1?i:i<0?e.length-1+i:0)-1<0?e.length-(1+d):a-1,u=a+1>e.length-1?d:a+1,g=e[c],f=e[u],b=g.plotX,m=g.plotY,y=f.plotX,x=f.plotY,P=e[a].plotX,S=e[a].plotY;
23490r=(1.5*P+b)/2.5,n=(1.5*S+m)/2.5,l=(1.5*P+y)/2.5,h=(1.5*S+x)/2.5;let M=Math.sqrt(Math.pow(r-P,2)+Math.pow(n-S,2)),L=Math.sqrt(Math.pow(l-P,2)+Math.pow(h-S,2)),k=Math.atan2(n-S,r-P);p=Math.PI/2+(k+Math.atan2(h-S,l-P))/2,Math.abs(k-p)>Math.PI/2&&(p-=Math.PI),r=P+Math.cos(p)*M,n=S+Math.sin(p)*M;let C={rightContX:l=P+Math.cos(Math.PI+p)*L,rightContY:h=S+Math.sin(Math.PI+p)*L,leftContX:r,leftContY:n,plotX:P,plotY:S};return s&&(C.prevPointCont=t(e,c,!1,o)),C}(e,s,!0,this.connectEnds)).prevPointCont&&a.prevPointCont.rightContX,i=a.prevPointCont&&a.prevPointCont.rightContY;o=["C",d(t)?t:a.plotX,d(i)?i:a.plotY,d(a.leftContX)?a.leftContX:a.plotX,d(a.leftContY)?a.leftContY:a.plotY,a.plotX,a.plotY]}else o=["M",i.plotX,i.plotY]}else o=t.call(this,e,i,s);return o}function D(t,e,i=this.plotY){if(!this.destroyed){let{plotX:s,series:o}=this,{chart:a}=o;return a.polar&&d(s)&&d(i)?[s+(e?a.plotLeft:0),i+(e?a.plotTop:0)]:t.call(this,e,i)}}class B{static compose(t,e,i,a,r,h,p,d,c,u){if(s.compose(e,i),o.compose(t,r),g(n,"Polar")){let t=e.prototype,s=h.prototype,o=i.prototype,r=a.prototype;if(l(e,"afterDrawChartBox",x),l(e,"getAxes",S),l(e,"init",P),y(t,"get",w),y(o,"getCoordinates",R),y(o,"pinch",Y),l(i,"getSelectionMarkerAttrs",L),l(i,"getSelectionBox",M),l(a,"afterInit",k),l(a,"afterTranslate",C,{order:2}),l(a,"afterColumnTranslate",T,{order:4}),y(r,"animate",j),y(s,"pos",D),d){let t=d.prototype;y(t,"alignDataLabel",N),y(t,"animate",j)}if(c&&y(c.prototype,"getGraphPath",X),u){let t=u.prototype;y(t,"getPointSpline",I),p&&(p.prototype.getPointSpline=t.getPointSpline)}}}constructor(t){this.series=t}arc(t,e,i,s){let o=this.series,a=o.xAxis.center,r=o.yAxis.len,n=a[3]/2,l=r-e+n,h=r-u(t,r)+n;return o.yAxis.reversed&&(l<0&&(l=n),h<0&&(h=n)),{x:a[0],y:a[1],r:l,innerR:h,start:i,end:s}}toXY(t){let e=this.series,i=e.chart,s=e.xAxis,o=e.yAxis,a=t.plotX,r=i.inverted,n=t.y,l=t.plotY,h=r?a:o.len-l,p;if(r&&e&&!e.isRadialBar&&(t.plotY=l=d(n)?o.translate(n):0),t.rectPlotX=a,t.rectPlotY=l,o.center&&(h+=o.center[3]/2),d(l)){let e=r?o.postTranslate(l,h):s.postTranslate(a,h);t.plotX=t.polarPlotX=e.x-i.plotLeft,t.plotY=t.polarPlotY=e.y-i.plotTop}e.kdByAngle?((p=(a/Math.PI*180+s.pane.options.startAngle)%360)<0&&(p+=360),t.clientX=p):t.clientX=t.plotX}}return B}),i(e,"Core/Axis/WaterfallAxis.js",[e["Core/Globals.js"],e["Core/Axis/Stacking/StackItem.js"],e["Core/Utilities.js"]],function(t,e,i){var s;let{composed:o}=t,{addEvent:a,objectEach:r,pushUnique:n}=i;return function(t){function i(){let t=this.waterfall.stacks;t&&(t.changed=!1,delete t.alreadyChanged)}function s(){let t=this.options.stackLabels;t&&t.enabled&&this.waterfall.stacks&&this.waterfall.renderStackTotals()}function l(){this.waterfall||(this.waterfall=new p(this))}function h(){let t=this.axes;for(let e of this.series)if(e.options.stacking){for(let e of t)e.isXAxis||(e.waterfall.stacks.changed=!0);break}}t.compose=function(t,e){n(o,"Axis.Waterfall")&&(a(t,"init",l),a(t,"afterBuildStacks",i),a(t,"afterRender",s),a(e,"beforeRedraw",h))};class p{constructor(t){this.axis=t,this.stacks={changed:!1}}renderStackTotals(){let t=this.axis,i=t.waterfall.stacks,s=t.stacking&&t.stacking.stackTotalGroup,o=new e(t,t.options.stackLabels||{},!1,0,void 0);this.dummyStackItem=o,s&&r(i,t=>{r(t,(t,i)=>{o.total=t.stackTotal,o.x=+i,t.label&&(o.label=t.label),e.prototype.render.call(o,s),t.label=o.label,delete o.label})}),o.total=null}}t.Composition=p}(s||(s={})),s}),i(e,"Series/Waterfall/WaterfallPoint.js",[e["Series/Column/ColumnSeries.js"],e["Core/Series/Point.js"],e["Core/Utilities.js"]],function(t,e,i){let{isNumber:s}=i;class o extends t.prototype.pointClass{getClassName(){let t=e.prototype.getClassName.call(this);return this.isSum?t+=" highcharts-sum":this.isIntermediateSum&&(t+=" highcharts-intermediate-sum"),t}isValid(){return s(this.y)||this.isSum||!!this.isIntermediateSum}}return o}),i(e,"Series/Waterfall/WaterfallSeriesDefaults.js",[],function(){return{dataLabels:{inside:!0},lineWidth:1,lineColor:"#333333",dashStyle:"Dot",borderColor:"#333333",states:{hover:{lineWidthPlus:0}}}}),i(e,"Series/Waterfall/WaterfallSeries.js",[e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"],e["Core/Axis/WaterfallAxis.js"],e["Series/Waterfall/WaterfallPoint.js"],e["Series/Waterfall/WaterfallSeriesDefaults.js"]],function(t,e,
23490i,s,o){let{column:a,line:r}=t.seriesTypes,{addEvent:n,arrayMax:l,arrayMin:h,correctFloat:p,crisp:d,extend:c,isNumber:u,merge:g,objectEach:f,pick:b}=e;function m(t,e){return Object.hasOwnProperty.call(t,e)}class y extends a{generatePoints(){a.prototype.generatePoints.apply(this);for(let t=0,e=this.points.length;t<e;t++){let e=this.points[t],i=this.processedYData[t];u(i)&&(e.isIntermediateSum||e.isSum)&&(e.y=p(i))}}processData(t){let e,i,s,o,a,r;let n=this.options,l=this.yData,h=n.data,d=l.length,c=n.threshold||0;s=i=o=a=0;for(let t=0;t<d;t++)r=l[t],e=h&&h[t]?h[t]:{},"sum"===r||e.isSum?l[t]=p(s):"intermediateSum"===r||e.isIntermediateSum?(l[t]=p(i),i=0):(s+=r,i+=r),o=Math.min(s,o),a=Math.max(s,a);super.processData.call(this,t),n.stacking||(this.dataMin=o+c,this.dataMax=a)}toYData(t){return t.isSum?"sum":t.isIntermediateSum?"intermediateSum":t.y}updateParallelArrays(t,e){super.updateParallelArrays.call(this,t,e),("sum"===this.yData[0]||"intermediateSum"===this.yData[0])&&(this.yData[0]=null)}pointAttribs(t,e){let i=this.options.upColor;i&&!t.options.color&&u(t.y)&&(t.color=t.y>0?i:void 0);let s=a.prototype.pointAttribs.call(this,t,e);return delete s.dashstyle,s}getGraphPath(){return[["M",0,0]]}getCrispPath(){let t=this.data.filter(t=>u(t.y)),e=this.yAxis,i=t.length,s=this.graph?.strokeWidth()||0,o=this.xAxis.reversed,a=this.yAxis.reversed,r=this.options.stacking,n=[];for(let l=1;l<i;l++){if(!(this.options.connectNulls||u(this.data[t[l].index-1].y)))continue;let i=t[l].box,h=t[l-1],p=h.y||0,c=t[l-1].box;if(!i||!c)continue;let g=e.waterfall.stacks[this.stackKey],f=p>0?-c.height:0;if(g&&c&&i){let t;let p=g[l-1];if(r){let i=p.connectorThreshold;t=d(e.translate(i,!1,!0,!1,!0)+(a?f:0),s)}else t=d(c.y+(h.minPointLengthOffset||0),s);n.push(["M",(c.x||0)+(o?0:c.width||0),t],["L",(i.x||0)+(o&&i.width||0),t])}if(c&&n.length&&(!r&&p<0&&!a||p>0&&a)){let t=n[n.length-2];t&&"number"==typeof t[2]&&(t[2]+=c.height||0);let e=n[n.length-1];e&&"number"==typeof e[2]&&(e[2]+=c.height||0)}}return n}drawGraph(){r.prototype.drawGraph.call(this),this.graph&&this.graph.attr({d:this.getCrispPath()})}setStackedPoints(t){let e=this.options,i=t.waterfall?.stacks,s=e.threshold||0,o=this.stackKey,a=this.xData,r=a.length,n=s,l=n,h,p=0,d=0,c=0,u,g,f,b,m,y,x,P,S=(t,e,i,s)=>{if(h){if(u)for(;i<u;i++)h.stackState[i]+=s;else h.stackState[0]=t,u=h.stackState.length;h.stackState.push(h.stackState[u-1]+e)}};if(t.stacking&&i&&this.reserveSpace()){P=i.changed,(x=i.alreadyChanged)&&0>x.indexOf(o)&&(P=!0),i[o]||(i[o]={});let t=i[o];if(t)for(let i=0;i<r;i++)(!t[y=a[i]]||P)&&(t[y]={negTotal:0,posTotal:0,stackTotal:0,threshold:0,stateIndex:0,stackState:[],label:P&&t[y]?t[y].label:void 0}),h=t[y],(m=this.yData[i])>=0?h.posTotal+=m:h.negTotal+=m,b=e.data[i],g=h.absolutePos=h.posTotal,f=h.absoluteNeg=h.negTotal,h.stackTotal=g+f,u=h.stackState.length,b&&b.isIntermediateSum?(S(c,d,0,c),c=d,d=s,n^=l,l^=n,n^=l):b&&b.isSum?(S(s,p,u,0),n=s):(S(n,m,0,p),b&&(p+=m,d+=m)),h.stateIndex++,h.threshold=n,n+=h.stackTotal;i.changed=!1,i.alreadyChanged||(i.alreadyChanged=[]),i.alreadyChanged.push(o)}}getExtremes(){let t,e,i;let s=this.options.stacking;return s?(t=this.yAxis.waterfall.stacks,e=this.stackedYNeg=[],i=this.stackedYPos=[],"overlap"===s?f(t[this.stackKey],function(t){e.push(h(t.stackState)),i.push(l(t.stackState))}):f(t[this.stackKey],function(t){e.push(t.negTotal+t.threshold),i.push(t.posTotal+t.threshold)}),{dataMin:h(e),dataMax:l(i)}):{dataMin:this.dataMin,dataMax:this.dataMax}}}return y.defaultOptions=g(a.defaultOptions,o),y.compose=i.compose,c(y.prototype,{pointValKey:"y",showLine:!0,pointClass:s}),n(y,"afterColumnTranslate",function(){let{options:t,points:e,yAxis:i}=this,s=b(t.minPointLength,5),o=s/2,a=t.threshold||0,r=t.stacking,n=i.waterfall.stacks[this.stackKey],l=a,h=a,p,f,y,x;for(let t=0;t<e.length;t++){let b=e[t],P=this.processedYData[t],S=c({x:0,y:0,width:0,height:0},b.shapeArgs||{});b.box=S;let M=[0,P],L=b.y||0;if(r){if(n){let e=n[t];"overlap"===r?(f=e.stackState[e.stateIndex--],p=L>=0?f:f-L,m(e,"absolutePos")&&delete e.absolutePos,m(e,"absoluteNeg")&&delete e.absoluteNeg):(L>=0?(f=e.threshold+e.posTotal,e.posTotal-=L,p=f):(f=e.threshold+e.negTotal,e.negTotal-=L,p=f-L),!e.posTotal&&u(e.absolutePos)&&m(e,"absolutePos")&&(e.posTotal=e.absolutePos,delete e.absolutePos),!e.negTotal&&u(e.absoluteNeg)&&m(e,"absoluteNeg")&&(e.negTotal=e.absoluteNeg,delete e.absoluteNeg)),b.isSum||(e.connectorThreshold=e.threshold+e.stackTotal),i.reversed?(y=L>=0?p-L:p+L,x=p):(y=p,x=p-L),b.below=y<=a,S.y=i.translate(y,!1,!0,!1,!0),S.height=Math.abs(S.y-i.translate(x,!1,!0,!1,!0));let s=i.waterfall.dummyStackItem;s&&(s.x=t,s.label=n[t].label,s.setOffset(this.pointXOffset||0,this.barW||0,this.stackedYNeg[t],this.stackedYPos[t],void 0,this.xAxis))}}else p=Math.max(h,h+L)+M[0],S.y=i.translate(p,!1,!0,!1,!0),b.isSum?(S.y=i.translate(M[1],!1,!0,!1,!0),S.height=Math.min(i.translate(M[0],!1,!0,!1,!0),i.len)-S.y,b.below=M[1]<=a):b.isIntermediateSum?(L>=0?(y=M[1]+l,x=l):(y=l,x=M[1]+l),i.reversed&&(y^=x,x^=y,y^=x),S.y=i.translate(y,!1,!0,!1,!0),S.height=Math.abs(S.y-Math.min(i.translate(x,!1,!0,!1,!0),i.len)),l+=M[1],b.below=y<=a):(S.height=P>0?i.translate(h,!1,!0,!1,!0)-S.y:i.translate(h,!1,!0,!1,!0)-i.translate(h-P,!1,!0,!1,!0),h+=P,b.below=h<a),S.height<0&&(S.y+=S.height,S.height*=-1);b.plotY=S.y,b.yBottom=S.y+S.height,S.height<=s&&!b.isNull?(S.height=s,S.y-=o,b.yBottom=S.y+S.height,b.plotY=S.y,L<0?b.minPointLengthOffset=-o:b.minPointLengthOffset=o):(b.isNull&&(S.width=0),b.minPointLengthOffset=0);let k=b.plotY+(b.negative?S.height:0);b.below&&(b.plotY+=S.height),b.tooltipPos&&(this.chart.inverted?b.tooltipPos[0]=i.len-k:b.tooltipPos[1]=k),b.isInside=this.isPointInside(b);let C=d(b.yBottom,this.borderWidth);S.y=d(S.y,this.borderWidth),S.height=C-S.y,g(!0,b.shapeArgs,S)}},{order:2}),t.registerSeriesType("waterfall",y),y}),i(e,"masters/highcharts-more.src.js",[e["Core/Globals.js"],e["Core/Series/SeriesRegistry.js"],e["Extensions/Pane/Pane.js"],e["Series/Bubble/BubbleSeries.js"],e["Series/PackedBubble/PackedBubbleSeries.js"],e["Series/PolarComposition.js"],e["Core/Axis/RadialAxis.js"],e["Series/Waterfall/WaterfallSeries.js"]],function(t,e,
23490i,s,o,a,r,n){return t.RadialAxis=r,s.compose(t.Axis,t.Chart,t.Legend,t.Series),o.compose(t.Axis,t.Chart,t.Legend,t.Series),i.compose(t.Chart,t.Pointer),a.compose(t.Axis,t.Chart,t.Pointer,t.Series,t.Tick,t.Point,e.seriesTypes.areasplinerange,e.seriesTypes.column,e.seriesTypes.line,e.seriesTypes.spline),n.compose(t.Axis,t.Chart),t})}); 23491},{}],110:[function(require,module,exports){ 23492!/** 23493 * Highcharts JS v11.4.3 (2024-05-22) 23494 * 23495 * (c) 2009-2024 Torstein Honsi 23496 * 23497 * License: www.highcharts.com/license 23498 */function(t,e){"object"==typeof module&&module.exports?(e.default=e,module.exports=t&&t.document?e(t):e):"function"==typeof define&&define.amd?define("highcharts/highcharts",function(){return e(t)}):(t.Highcharts&&t.Highcharts.error(16,!0),t.Highcharts=e(t))}("undefined"!=typeof window?window:this,function(t){"use strict";var e={};function i(e,i,s,r){e.hasOwnProperty(i)||(e[i]=r.apply(null,s),"function"==typeof CustomEvent&&t.dispatchEvent(new CustomEvent("HighchartsModuleLoaded",{detail:{path:i,module:e[i]}})))}return i(e,"Core/Globals.js",[],function(){var e,i;return(i=e||(e={})).SVG_NS="http://www.w3.org/2000/svg",i.product="Highcharts",i.version="11.4.3",i.win=void 0!==t?t:{},i.doc=i.win.document,i.svg=i.doc&&i.doc.createElementNS&&!!i.doc.createElementNS(i.SVG_NS,"svg").createSVGRect,i.userAgent=i.win.navigator&&i.win.navigator.userAgent||"",i.isChrome=-1!==i.userAgent.indexOf("Chrome"),i.isFirefox=-1!==i.userAgent.indexOf("Firefox"),i.isMS=/(edge|msie|trident)/i.test(i.userAgent)&&!i.win.opera,i.isSafari=!i.isChrome&&-1!==i.userAgent.indexOf("Safari"),i.isTouchDevice=/(Mobile|Android|Windows Phone)/.test(i.userAgent),i.isWebKit=-1!==i.userAgent.indexOf("AppleWebKit"),i.deg2rad=2*Math.PI/360,i.hasBidiBug=i.isFirefox&&4>parseInt(i.userAgent.split("Firefox/")[1],10),i.marginNames=["plotTop","marginRight","marginBottom","plotLeft"],i.noop=function(){},i.supportsPassiveEvents=function(){let t=!1;if(!i.isMS){let e=Object.defineProperty({},"passive",{get:function(){t=!0}});i.win.addEventListener&&i.win.removeEventListener&&(i.win.addEventListener("testPassive",i.noop,e),i.win.removeEventListener("testPassive",i.noop,e))}return t}(),i.charts=[],i.composed=[],i.dateFormats={},i.seriesTypes={},i.symbolSizes={},i.chartCount=0,e}),i(e,"Core/Utilities.js",[e["Core/Globals.js"]],function(t){let e;let{charts:i,doc:s,win:r}=t;function o(e,i,s,a){let n=i?"Highcharts error":"Highcharts warning";32===e&&(e=`${n}: Deprecated member`);let h=p(e),l=h?`${n} #${e}: www.highcharts.com/errors/${e}/`:e.toString();if(void 0!==a){let t="";h&&(l+="?"),C(a,function(e,i){t+=` 23499 - ${i}: ${e}`,h&&(l+=encodeURI(i)+"="+encodeURI(e))}),l+=t}M(t,"displayError",{chart:s,code:e,message:l,params:a},function(){if(i)throw Error(l);r.console&&-1===o.messages.indexOf(l)&&console.warn(l)}),o.messages.push(l)}function a(t,e){return parseInt(t,e||10)}function n(t){return"string"==typeof t}function h(t){let e=Object.prototype.toString.call(t);return"[object Array]"===e||"[object Array Iterator]"===e}function l(t,e){return!!t&&"object"==typeof t&&(!e||!h(t))}function d(t){return l(t)&&"number"==typeof t.nodeType}function c(t){let e=t&&t.constructor;return!!(l(t,!0)&&!d(t)&&e&&e.name&&"Object"!==e.name)}function p(t){return"number"==typeof t&&!isNaN(t)&&t<1/0&&t>-1/0}function u(t){return null!=t}function g(t,e,i){let s;let r=n(e)&&!u(i),o=(e,i)=>{u(e)?t.setAttribute(i,e):r?(s=t.getAttribute(i))||"class"!==i||(s=t.getAttribute(i+"Name")):t.removeAttribute(i)};return n(e)?o(i,e):C(e,o),s}function f(t){return h(t)?t:[t]}function m(t,e){let i;for(i in t||(t={}),e)t[i]=e[i];return t}function x(){let t=arguments,e=t.length;for(let i=0;i<e;i++){let e=t[i];if(null!=e)return e}}function y(t,e){m(t.style,e)}function b(t){return Math.pow(10,Math.floor(Math.log(t)/Math.LN10))}function v(t,e){return t>1e14?t:parseFloat(t.toPrecision(e||14))}(o||(o={})).messages=[],Math.easeInOutSine=function(t){return -.5*(Math.cos(Math.PI*t)-1)};let S=Array.prototype.find?function(t,e){return t.find(e)}:function(t,e){let i;let s=t.length;for(i=0;i<s;i++)if(e(t[i],i))return t[i]};function C(t,e,i){for(let s in t)Object.hasOwnProperty.call(t,s)&&e.call(i||t[s],t[s],s,t)}function k(t,e,i){function s(e,i){let s=t.removeEventListener;s&&s.call(t,e,i,!1)}function r(i){let r,o;t.nodeName&&(e?(r={})[e]=!0:r=i,C(r,function(t,e){if(i[e])for(o=i[e].length;o--;)s(e,i[e][o].fn)}))}let o="function"==typeof t&&t.prototype||t;
23499if(Object.hasOwnProperty.call(o,"hcEvents")){let t=o.hcEvents;if(e){let o=t[e]||[];i?(t[e]=o.filter(function(t){return i!==t.fn}),s(e,i)):(r(t),t[e]=[])}else r(t),delete o.hcEvents}}function M(e,i,r,o){if(r=r||{},s.createEvent&&(e.dispatchEvent||e.fireEvent&&e!==t)){let t=s.createEvent("Events");t.initEvent(i,!0,!0),r=m(t,r),e.dispatchEvent?e.dispatchEvent(r):e.fireEvent(i,r)}else if(e.hcEvents){r.target||m(r,{preventDefault:function(){r.defaultPrevented=!0},target:e,type:i});let t=[],s=e,o=!1;for(;s.hcEvents;)Object.hasOwnProperty.call(s,"hcEvents")&&s.hcEvents[i]&&(t.length&&(o=!0),t.unshift.apply(t,s.hcEvents[i])),s=Object.getPrototypeOf(s);o&&t.sort((t,e)=>t.order-e.order),t.forEach(t=>{!1===t.fn.call(e,r)&&r.preventDefault()})}o&&!r.defaultPrevented&&o.call(e,r)}C({map:"map",each:"forEach",grep:"filter",reduce:"reduce",some:"some"},function(e,i){t[i]=function(t){return o(32,!1,void 0,{[`Highcharts.${i}`]:`use Array.${e}`}),Array.prototype[e].apply(t,[].slice.call(arguments,1))}});let w=function(){let t=Math.random().toString(36).substring(2,9)+"-",i=0;return function(){return"highcharts-"+(e?"":t)+i++}}();return r.jQuery&&(r.jQuery.fn.highcharts=function(){let e=[].slice.call(arguments);if(this[0])return e[0]?(new t[n(e[0])?e.shift():"Chart"](this[0],e[0],e[1]),this):i[g(this[0],"data-highcharts-chart")]}),{addEvent:function(e,i,s,r={}){let o="function"==typeof e&&e.prototype||e;Object.hasOwnProperty.call(o,"hcEvents")||(o.hcEvents={});let a=o.hcEvents;t.Point&&e instanceof t.Point&&e.series&&e.series.chart&&(e.series.chart.runTrackerClick=!0);let n=e.addEventListener;n&&n.call(e,i,s,!!t.supportsPassiveEvents&&{passive:void 0===r.passive?-1!==i.indexOf("touch"):r.passive,capture:!1}),a[i]||(a[i]=[]);let h={fn:s,order:"number"==typeof r.order?r.order:1/0};return a[i].push(h),a[i].sort((t,e)=>t.order-e.order),function(){k(e,i,s)}},arrayMax:function(t){let e=t.length,i=t[0];for(;e--;)t[e]>i&&(i=t[e]);return i},arrayMin:function(t){let e=t.length,i=t[0];for(;e--;)t[e]<i&&(i=t[e]);return i},attr:g,clamp:function(t,e,i){return t>e?t<i?t:i:e},clearTimeout:function(t){u(t)&&clearTimeout(t)},correctFloat:v,createElement:function(t,e,i,r,o){let a=s.createElement(t);return e&&m(a,e),o&&y(a,{padding:"0",border:"none",margin:"0"}),i&&y(a,i),r&&r.appendChild(a),a},crisp:(t,e=0,i)=>{let s=e%2/2,r=i?-1:1;return(Math.round(t*r-s)+s)*r},css:y,defined:u,destroyObjectProperties:function(t,e,i){C(t,function(s,r){s!==e&&s?.destroy&&s.destroy(),(s?.destroy||!i)&&delete t[r]})},diffObjects:function(t,e,i,s){let r={};return function t(e,r,o,a){let n=i?r:e;C(e,function(i,d){if(!a&&s&&s.indexOf(d)>-1&&r[d]){i=f(i),o[d]=[];for(let e=0;e<Math.max(i.length,r[d].length);e++)r[d][e]&&(void 0===i[e]?o[d][e]=r[d][e]:(o[d][e]={},t(i[e],r[d][e],o[d][e],a+1)))}else l(i,!0)&&!i.nodeType?(o[d]=h(i)?[]:{},t(i,r[d]||{},o[d],a+1),0!==Object.keys(o[d]).length||"colorAxis"===d&&0===a||delete o[d]):(e[d]!==r[d]||d in e&&!(d in r))&&"__proto__"!==d&&"constructor"!==d&&(o[d]=n[d])})}(t,e,r,0),r},discardElement:function(t){t&&t.parentElement&&t.parentElement.removeChild(t)},erase:function(t,e){let i=t.length;for(;i--;)if(t[i]===e){t.splice(i,1);break}},error:o,extend:m,extendClass:function(t,e){let i=function(){};return i.prototype=new t,m(i.prototype,e),i},find:S,fireEvent:M,getClosestDistance:function(t,e){let i,s,r,o;let a=!e;return t.forEach(t=>{if(t.length>1)for(o=s=t.length-1;o>0;o--)(r=t[o]-t[o-1])<0&&!a?(e?.(),e=void 0):r&&(void 0===i||r<i)&&(i=r)}),i},getMagnitude:b,getNestedProperty:function(t,e){let i=t.split(".");for(;i.length&&u(e);){let t=i.shift();if(void 0===t||"__proto__"===t)return;if("this"===t){let t;return l(e)&&(t=e["@this"]),t??e}let s=e[t];if(!u(s)||"function"==typeof s||"number"==typeof s.nodeType||s===r)return;e=s}return e},getStyle:function t(e,i,s){let o;if("width"===i){let i=Math.min(e.offsetWidth,e.scrollWidth),s=e.getBoundingClientRect&&e.getBoundingClientRect().width;return s<i&&s>=i-1&&(i=Math.floor(s)),Math.max(0,i-(t(e,"padding-left",!0)||0)-(t(e,"padding-right",!0)||0))}if("height"===i)return Math.max(0,Math.min(e.offsetHeight,e.scrollHeight)-(t(e,"padding-top",!0)||0)-(t(e,"padding-bottom",!0)||0));let n=r.getComputedStyle(e,void 0);return n&&(o=n.getPropertyValue(i),x(s,"opacity"!==i)&&(o=a(o))),o}
23499,inArray:function(t,e,i){return o(32,!1,void 0,{"Highcharts.inArray":"use Array.indexOf"}),e.indexOf(t,i)},insertItem:function(t,e){let i;let s=t.options.index,r=e.length;for(i=t.options.isInternal?r:0;i<r+1;i++)if(!e[i]||p(s)&&s<x(e[i].options.index,e[i]._i)||e[i].options.isInternal){e.splice(i,0,t);break}return i},isArray:h,isClass:c,isDOMElement:d,isFunction:function(t){return"function"==typeof t},isNumber:p,isObject:l,isString:n,keys:function(t){return o(32,!1,void 0,{"Highcharts.keys":"use Object.keys"}),Object.keys(t)},merge:function(){let t,e=arguments,i={},s=function(t,e){return"object"!=typeof t&&(t={}),C(e,function(i,r){"__proto__"!==r&&"constructor"!==r&&(!l(i,!0)||c(i)||d(i)?t[r]=e[r]:t[r]=s(t[r]||{},i))}),t};!0===e[0]&&(i=e[1],e=Array.prototype.slice.call(e,2));let r=e.length;for(t=0;t<r;t++)i=s(i,e[t]);return i},normalizeTickInterval:function(t,e,i,s,r){let o,a=t;i=x(i,b(t));let n=t/i;for(!e&&(e=r?[1,1.2,1.5,2,2.5,3,4,5,6,8,10]:[1,2,2.5,5,10],!1===s&&(1===i?e=e.filter(function(t){return t%1==0}):i<=.1&&(e=[1/i]))),o=0;o<e.length&&(a=e[o],(!r||!(a*i>=t))&&(r||!(n<=(e[o]+(e[o+1]||e[o]))/2)));o++);return v(a*i,-Math.round(Math.log(.001)/Math.LN10))},objectEach:C,offset:function(t){let e=s.documentElement,i=t.parentElement||t.parentNode?t.getBoundingClientRect():{top:0,left:0,width:0,height:0};return{top:i.top+(r.pageYOffset||e.scrollTop)-(e.clientTop||0),left:i.left+(r.pageXOffset||e.scrollLeft)-(e.clientLeft||0),width:i.width,height:i.height}},pad:function(t,e,i){return Array((e||2)+1-String(t).replace("-","").length).join(i||"0")+t},pick:x,pInt:a,pushUnique:function(t,e){return 0>t.indexOf(e)&&!!t.push(e)},relativeLength:function(t,e,i){return/%$/.test(t)?e*parseFloat(t)/100+(i||0):parseFloat(t)},removeEvent:k,replaceNested:function(t,...e){let i,s;do for(s of(i=t,e))t=t.replace(s[0],s[1]);while(t!==i);return t},splat:f,stableSort:function(t,e){let i,s;let r=t.length;for(s=0;s<r;s++)t[s].safeI=s;for(t.sort(function(t,s){return 0===(i=e(t,s))?t.safeI-s.safeI:i}),s=0;s<r;s++)delete t[s].safeI},syncTimeout:function(t,e,i){return e>0?setTimeout(t,e,i):(t.call(0,i),-1)},timeUnits:{millisecond:1,second:1e3,minute:6e4,hour:36e5,day:864e5,week:6048e5,month:24192e5,year:314496e5},uniqueKey:w,useSerialIds:function(t){return e=x(t,e)},wrap:function(t,e,i){let s=t[e];t[e]=function(){let t=arguments,e=this;return i.apply(this,[function(){return s.apply(e,arguments.length?arguments:t)}].concat([].slice.call(arguments)))}}}}),i(e,"Core/Chart/ChartDefaults.js",[],function(){return{alignThresholds:!1,panning:{enabled:!1,type:"x"},styledMode:!1,borderRadius:0,colorCount:10,allowMutatingData:!0,ignoreHiddenSeries:!0,spacing:[10,10,15,10],resetZoomButton:{theme:{},position:{}},reflow:!0,type:"line",zooming:{singleTouch:!1,resetButton:{theme:{zIndex:6},position:{align:"right",x:-10,y:10}}},width:null,height:null,borderColor:"#334eff",backgroundColor:"#ffffff",plotBorderColor:"#cccccc"}}),i(e,"Core/Color/Palettes.js",[],function(){return{colors:["#2caffe","#544fc5","#00e272","#fe6a35","#6b8abc","#d568fb","#2ee0ca","#fa4b42","#feb56a","#91e8e1"]}}),i(e,"Core/Time.js",[e["Core/Globals.js"],e["Core/Utilities.js"]],function(t,e){let{win:i}=t,{defined:s,error:r,extend:o,isNumber:a,isObject:n,merge:h,objectEach:l,pad:d,pick:c,splat:p,timeUnits:u}=e,g=t.isSafari&&i.Intl&&i.Intl.DateTimeFormat.prototype.formatRange,f=t.isSafari&&i.Intl&&!i.Intl.DateTimeFormat.prototype.formatRange;class m{constructor(t){this.options={},this.useUTC=!1,this.variableTimezone=!1,this.Date=i.Date,this.getTimezoneOffset=this.timezoneOffsetFunction(),this.update(t)}get(t,e){if(this.variableTimezone||this.timezoneOffset){let i=e.getTime(),s=i-this.getTimezoneOffset(e);e.setTime(s);let r=e["getUTC"+t]();return e.setTime(i),r}return this.useUTC?e["getUTC"+t]():e["get"+t]()}set(t,e,i){if(this.variableTimezone||this.timezoneOffset){if("Milliseconds"===t||"Seconds"===t||"Minutes"===t&&this.getTimezoneOffset(e)%36e5==0)return e["setUTC"+t](i);let s=this.getTimezoneOffset(e),r=e.getTime()-s;e.setTime(r),e["setUTC"+t](i);let o=this.getTimezoneOffset(e);return r=e.getTime()+o,e.setTime(r)}return this.useUTC||g&&"FullYear"===t?e["setUTC"+t](i):e["set"+t](i)}update(t={}){let e=c(t.useUTC,!0);this.options=t=h(!0,this.options,t),this.Date=t.Date||i.Date||Date,this.useUTC=e,this.timezoneOffset=e&&t.timezoneOffset||void 0,this.getTimezoneOffset=this.timezoneOffsetFunction(),this.variableTimezone=e&&!!(t.getTimezoneOffset||t.timezone)}makeTime(t,e,i,s,r,o){let a,n,h;return this.useUTC?(a=this.Date.UTC.apply(0,arguments),n=this.getTimezoneOffset(a),a+=n,n!==(h=this.getTimezoneOffset(a))?a+=h-n:n-36e5!==this.getTimezoneOffset(a-36e5)||f||(a-=36e5)):a=new this.Date(t,e,c(i,1),c(s,0),c(r,0),c(o,0)).getTime(),a}timezoneOffsetFunction(){let t=this,e=this.options,i=e.getTimezoneOffset;return this.useUTC?e.timezone?t=>{try{let i=`shortOffset,${e.timezone||""}`,[s,r,o,n,h=0]=(m.formatCache[i]=m.formatCache[i]||Intl.DateTimeFormat("en",{timeZone:e.timezone,timeZoneName:"shortOffset"}
23499)).format(t).split(/(GMT|:)/).map(Number),l=-(36e5*(o+h/60));if(a(l))return l}catch(t){r(34)}return 0}:this.useUTC&&i?t=>6e4*i(t.valueOf()):()=>6e4*(t.timezoneOffset||0):t=>6e4*new Date(t.toString()).getTimezoneOffset()}dateFormat(e,i,r){if(!s(i)||isNaN(i))return t.defaultOptions.lang&&t.defaultOptions.lang.invalidDate||"";e=c(e,"%Y-%m-%d %H:%M:%S");let a=this,n=new this.Date(i),h=this.get("Hours",n),p=this.get("Day",n),u=this.get("Date",n),g=this.get("Month",n),f=this.get("FullYear",n),m=t.defaultOptions.lang,x=m&&m.weekdays,y=m&&m.shortWeekdays;return l(o({a:y?y[p]:x[p].substr(0,3),A:x[p],d:d(u),e:d(u,2," "),w:p,b:m.shortMonths[g],B:m.months[g],m:d(g+1),o:g+1,y:f.toString().substr(2,2),Y:f,H:d(h),k:h,I:d(h%12||12),l:h%12||12,M:d(this.get("Minutes",n)),p:h<12?"AM":"PM",P:h<12?"am":"pm",S:d(this.get("Seconds",n)),L:d(Math.floor(i%1e3),3)},t.dateFormats),function(t,s){for(;-1!==e.indexOf("%"+s);)e=e.replace("%"+s,"function"==typeof t?t.call(a,i):t)}),r?e.substr(0,1).toUpperCase()+e.substr(1):e}resolveDTLFormat(t){return n(t,!0)?t:{main:(t=p(t))[0],from:t[1],to:t[2]}}getTimeTicks(t,e,i,r){let a,n,h,l;let d=this,p=d.Date,g=[],f={},m=new p(e),x=t.unitRange,y=t.count||1;if(r=c(r,1),s(e)){d.set("Milliseconds",m,x>=u.second?0:y*Math.floor(d.get("Milliseconds",m)/y)),x>=u.second&&d.set("Seconds",m,x>=u.minute?0:y*Math.floor(d.get("Seconds",m)/y)),x>=u.minute&&d.set("Minutes",m,x>=u.hour?0:y*Math.floor(d.get("Minutes",m)/y)),x>=u.hour&&d.set("Hours",m,x>=u.day?0:y*Math.floor(d.get("Hours",m)/y)),x>=u.day&&d.set("Date",m,x>=u.month?1:Math.max(1,y*Math.floor(d.get("Date",m)/y))),x>=u.month&&(d.set("Month",m,x>=u.year?0:y*Math.floor(d.get("Month",m)/y)),n=d.get("FullYear",m)),x>=u.year&&(n-=n%y,d.set("FullYear",m,n)),x===u.week&&(l=d.get("Day",m),d.set("Date",m,d.get("Date",m)-l+r+(l<r?-7:0))),n=d.get("FullYear",m);let t=d.get("Month",m),o=d.get("Date",m),c=d.get("Hours",m);e=m.getTime(),(d.variableTimezone||!d.useUTC)&&s(i)&&(h=i-e>4*u.month||d.getTimezoneOffset(e)!==d.getTimezoneOffset(i));let p=m.getTime();for(a=1;p<i;)g.push(p),x===u.year?p=d.makeTime(n+a*y,0):x===u.month?p=d.makeTime(n,t+a*y):h&&(x===u.day||x===u.week)?p=d.makeTime(n,t,o+a*y*(x===u.day?1:7)):h&&x===u.hour&&y>1?p=d.makeTime(n,t,o,c+a*y):p+=x*y,a++;g.push(p),x<=u.hour&&g.length<1e4&&g.forEach(function(t){t%18e5==0&&"000000000"===d.dateFormat("%H%M%S%L",t)&&(f[t]="day")})}return g.info=o(t,{higherRanks:f,totalRange:x*y}),g}getDateFormat(t,e,i,s){let r=this.dateFormat("%m-%d %H:%M:%S.%L",e),o="01-01 00:00:00.000",a={millisecond:15,second:12,minute:9,hour:6,day:3},n="millisecond",h=n;for(n in u){if(t===u.week&&+this.dateFormat("%w",e)===i&&r.substr(6)===o.substr(6)){n="week";break}if(u[n]>t){n=h;break}if(a[n]&&r.substr(a[n])!==o.substr(a[n]))break;"week"!==n&&(h=n)}return this.resolveDTLFormat(s[n]).main}}return m.formatCache={},m}),i(e,"Core/Defaults.js",[e["Core/Chart/ChartDefaults.js"],e["Core/Globals.js"],e["Core/Color/Palettes.js"],e["Core/Time.js"],e["Core/Utilities.js"]],function(t,e,i,s,r){let{isTouchDevice:o}=e,{fireEvent:a,merge:n}=r,h={colors:i.colors,symbols:["circle","diamond","square","triangle","triangle-down"],lang:{loading:"Loading...",months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],weekdays:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],decimalPoint:".",numericSymbols:["k","M","G","T","P","E"],resetZoom:"Reset zoom",resetZoomTitle:"Reset zoom level 1:1",thousandsSep:" "},global:{buttonTheme:{fill:"#f7f7f7",padding:8,r:2,stroke:"#cccccc","stroke-width":1,style:{color:"#333333",cursor:"pointer",fontSize:"0.8em",fontWeight:"normal"},states:{hover:{fill:"#e6e6e6"},select:{fill:"#e6e9ff",style:{color:"#000000",fontWeight:"bold"}},disabled:{style:{color:"#cccccc"}}}}},time:{Date:void 0,getTimezoneOffset:void 0,timezone:void 0,timezoneOffset:0,useUTC:!0},chart:t,title:{style:{color:"#333333",fontWeight:"bold"},text:"Chart title",align:"center",margin:15,widthAdjust:-44},subtitle:{style:{color:"#666666",fontSize:"0.8em"},text:"",align:"center",widthAdjust:-44},caption:{margin:15,style:{color:"#666666",fontSize:"0.8em"},text:"",align:"left",verticalAlign:"bottom"},plotOptions:{},legend:{enabled:!0,align:"center",alignColumns:!0,className:"highcharts-no-tooltip",layout:"horizontal",itemMarginBottom:2,itemMarginTop:2,labelFormatter:function(){return this.name},borderColor:"#999999",borderRadius:0,navigation:{style:{fontSize:"0.8em"},activeColor:"#0022ff",inactiveColor:"#cccccc"},itemStyle:{color:"#333333",cursor:"pointer",fontSize:"0.8em",textDecoration:"none",textOverflow:"ellipsis"},itemHoverStyle:{color:"#000000"},itemHiddenStyle:{color:"#666666",textDecoration:"line-through"},shadow:!1,itemCheckboxStyle:{position:"absolute",width:"13px",height:"13px"},squareSymbol:!0,symbolPadding:5,verticalAlign:"bottom",x:0,y:0,title:{style:{fontSize:"0.8em",fontWeight:"bold"}}},loading:{labelStyle:{fontWeight:"bold",position:"relative",top:"45%"},style:{position:"absolute",backgroundColor:"#ffffff",opacity:.5,textAlign:"center"}},tooltip:{enabled:!0,animation:{duration:300,easing:t=>Math.sqrt(1-Math.pow(t-1,2))},borderRadius:3,dateTimeLabelFormats:{millisecond:"%A, %e %b, %H:%M:%S.%L",second:"%A, %e %b, %H:%M:%S",minute:"%A, %e %b, %H:%M",hour:"%A, %e %b, %H:%M",day:"%A, %e %b %Y",week:"Week from %A, %e %b %Y",month:"%B %Y",year:"%Y"},footerFormat:"",headerShape:"callout",hideDelay:500,padding:8,shape:"callout",shared:!1,snap:o?25:10,headerFormat:'<span style="font-size: 0.8em">{point.key}</span><br/>',pointFormat:'<span style="color:{point.color}">â</span> {series.name}: <b>{point.y}</b><br/>',backgroundColor:"#ffffff",borderWidth:void 0,shadow:!0,stickOnContact:!1,style:{color:"#333333",cursor:"default",fontSize:"0.8em"},useHTML:!1},credits:{enabled:!0,href:"https://www.highcharts.com?credits",position:{align:"right",x:-10,verticalAlign:"bottom",y:-5},style:{cursor:"pointer",color:"#999999",fontSize:"0.6em"},text:"Highcharts.com"}};h.chart.styledMode=!1;let l=new s(h.time);return{defaultOptions:h,defaultTime:l,getOptions:function(){return h},setOptions:function(t){return a(e,"setOptions",{options:t}),n(!0,h,t),(t.time||t.global)&&(e.time?e.time.update(n(h.global,h.time,t.global,t.time)):e.time=l),h}}}),i(e,"Core/Color/Color.js",[e["Core/Globals.js"],e["Core/Utilities.js"]],function(t,e){let{isNumber:i,merge:s,pInt:r}=e;class o{static parse(t){return t?new o(t):o.None}constructor(e){let i,s,r,a;this.rgba=[NaN,NaN,NaN,NaN],this.input=e;let n=t.Color;if(n&&n!==o)return new n(e);if("object"==typeof e&&void 0!==e.stops)this.stops=e.stops.map(t=>new o(t[1]));else if("string"==typeof e){if(this.input=e=o.names[e.toLowerCase()]||e,"#"===e.charAt(0)){let t=e.length,i=parseInt(e.substr(1),16);7===t?s=[(16711680&i)>>16,(65280&i)>>8,255&i,1]:4===t&&(s=[(3840&i)>>4|(3840&i)>>8,(240&i)>>4|240&i,(15&i)<<4|15&i,1])}if(!s)for(r=o.parsers.length;r--&&!s;)(i=(a=o.parsers[r]).regex.exec(e))&&(s=a.parse(i))}s&&(this.rgba=s)}get(t){let e=this.input,r=this.rgba;if("object"==typeof e&&void 0!==this.stops){let i=s(e);return i.stops=[].slice.call(i.stops),this.stops.forEach((e,s)=>{i.stops[s]=[i.stops[s][0],e.get(t)]}),i}return r&&i(r[0])?"rgb"!==t&&(t||1!==r[3])?"a"===t?`${r[3]}`:"rgba("+r.join(",")+")":"rgb("+r[0]+","+r[1]+","+r[2]+")":e}brighten(t){let e=this.rgba;if(this.stops)this.stops.forEach(function(e){e.brighten(t)});else if(i(t)&&0!==t)for(let i=0;i<3;i++)e[i]+=r(255*t),e[i]<0&&(e[i]=0),e[i]>255&&(e[i]=255);return this}setOpacity(t){return this.rgba[3]=t,this}tweenTo(t,e){let s=this.rgba,r=t.rgba;
23499if(!i(s[0])||!i(r[0]))return t.input||"none";let o=1!==r[3]||1!==s[3];return(o?"rgba(":"rgb(")+Math.round(r[0]+(s[0]-r[0])*(1-e))+","+Math.round(r[1]+(s[1]-r[1])*(1-e))+","+Math.round(r[2]+(s[2]-r[2])*(1-e))+(o?","+(r[3]+(s[3]-r[3])*(1-e)):"")+")"}}return o.names={white:"#ffffff",black:"#000000"},o.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(t){return[r(t[1]),r(t[2]),r(t[3]),parseFloat(t[4],10)]}},{regex:/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/,parse:function(t){return[r(t[1]),r(t[2]),r(t[3]),1]}}],o.None=new o(""),o}),i(e,"Core/Animation/Fx.js",[e["Core/Color/Color.js"],e["Core/Globals.js"],e["Core/Utilities.js"]],function(t,e,i){let{parse:s}=t,{win:r}=e,{isNumber:o,objectEach:a}=i;class n{constructor(t,e,i){this.pos=NaN,this.options=e,this.elem=t,this.prop=i}dSetter(){let t=this.paths,e=t&&t[0],i=t&&t[1],s=this.now||0,r=[];if(1!==s&&e&&i){if(e.length===i.length&&s<1)for(let t=0;t<i.length;t++){let a=e[t],n=i[t],h=[];for(let t=0;t<n.length;t++){let e=a[t],i=n[t];o(e)&&o(i)&&!("A"===n[0]&&(4===t||5===t))?h[t]=e+s*(i-e):h[t]=i}r.push(h)}else r=i}else r=this.toD||[];this.elem.attr("d",r,void 0,!0)}update(){let t=this.elem,e=this.prop,i=this.now,s=this.options.step;this[e+"Setter"]?this[e+"Setter"]():t.attr?t.element&&t.attr(e,i,null,!0):t.style[e]=i+this.unit,s&&s.call(t,i,this)}run(t,e,i){let s=this,o=s.options,a=function(t){return!a.stopped&&s.step(t)},h=r.requestAnimationFrame||function(t){setTimeout(t,13)},l=function(){for(let t=0;t<n.timers.length;t++)n.timers[t]()||n.timers.splice(t--,1);n.timers.length&&h(l)};t!==e||this.elem["forceAnimate:"+this.prop]?(this.startTime=+new Date,this.start=t,this.end=e,this.unit=i,this.now=this.start,this.pos=0,a.elem=this.elem,a.prop=this.prop,a()&&1===n.timers.push(a)&&h(l)):(delete o.curAnim[this.prop],o.complete&&0===Object.keys(o.curAnim).length&&o.complete.call(this.elem))}step(t){let e,i;let s=+new Date,r=this.options,o=this.elem,n=r.complete,h=r.duration,l=r.curAnim;return o.attr&&!o.element?e=!1:t||s>=h+this.startTime?(this.now=this.end,this.pos=1,this.update(),l[this.prop]=!0,i=!0,a(l,function(t){!0!==t&&(i=!1)}),i&&n&&n.call(o),e=!1):(this.pos=r.easing((s-this.startTime)/h),this.now=this.start+(this.end-this.start)*this.pos,this.update(),e=!0),e}initPath(t,e,i){let s=t.startX,r=t.endX,a=i.slice(),n=t.isArea,h=n?2:1,l,d,c,p,u=e&&e.slice();if(!u)return[a,a];function g(t,e){for(;t.length<d;){let i=t[0],s=e[d-t.length];if(s&&"M"===i[0]&&("C"===s[0]?t[0]=["C",i[1],i[2],i[1],i[2],i[1],i[2]]:t[0]=["L",i[1],i[2]]),t.unshift(i),n){let e=t.pop();t.push(t[t.length-1],e)}}}function f(t){for(;t.length<d;){let e=t[Math.floor(t.length/h)-1].slice();if("C"===e[0]&&(e[1]=e[5],e[2]=e[6]),n){let i=t[Math.floor(t.length/h)].slice();t.splice(t.length/2,0,e,i)}else t.push(e)}}if(s&&r&&r.length){for(c=0;c<s.length;c++){if(s[c]===r[0]){l=c;break}if(s[0]===r[r.length-s.length+c]){l=c,p=!0;break}if(s[s.length-1]===r[r.length-s.length+c]){l=s.length-c;break}}void 0===l&&(u=[])}return u.length&&o(l)&&(d=a.length+l*h,p?(g(u,a),f(a)):(g(a,u),f(u))),[u,a]}fillSetter(){n.prototype.strokeSetter.apply(this,arguments)}strokeSetter(){this.elem.attr(this.prop,s(this.start).tweenTo(s(this.end),this.pos),void 0,!0)}}return n.timers=[],n}),i(e,"Core/Animation/AnimationUtilities.js",[e["Core/Animation/Fx.js"],e["Core/Utilities.js"]],function(t,e){let{defined:i,getStyle:s,isArray:r,isNumber:o,isObject:a,merge:n,objectEach:h,pick:l}=e;function d(t){return a(t)?n({duration:500,defer:0},t):{duration:t?500:0,defer:0}}function c(e,i){let s=t.timers.length;for(;s--;)t.timers[s].elem!==e||i&&i!==t.timers[s].prop||(t.timers[s].stopped=!0)}return{animate:function(e,i,l){let d,p="",u,g,f;a(l)||(f=arguments,l={duration:f[2],easing:f[3],complete:f[4]}),o(l.duration)||(l.duration=400),l.easing="function"==typeof l.easing?l.easing:Math[l.easing]||Math.easeInOutSine,l.curAnim=n(i),h(i,function(o,a){c(e,a),g=new t(e,l,a),u=void 0,"d"===a&&r(i.d)?(g.paths=g.initPath(e,e.pathArray,i.d),g.toD=i.d,d=0,u=1):e.attr?d=e.attr(a):(d=parseFloat(s(e,a))||0,"opacity"!==a&&(p="px")),u||(u=o),"string"==typeof u&&u.match("px")&&(u=u.replace(/px/g,"")),g.run(d,u,p)})},animObject:d,getDeferredAnimation:function(t,e,s){let r=d(e),o=s?[s]:t.series,n=0,h=0;return o.forEach(t=>{let s=d(t.options.animation);n=a(e)&&i(e.defer)?r.defer:Math.max(n,s.duration+s.defer),h=Math.min(r.duration,s.duration)}),t.renderer.forExport&&(n=0),{defer:Math.max(0,n-h),duration:Math.min(n,h)}},setAnimation:function(t,e){e.renderer.globalAnimation=l(t,e.options.chart.animation,!0)},stop:c}}),i(e,"Core/Renderer/HTML/AST.js",[e["Core/Globals.js"],e["Core/Utilities.js"]],function(t,e){let{SVG_NS:i,win:s}=t,{attr:r,createElement:o,css:a,error:n,isFunction:h,isString:l,objectEach:d,splat:c}=e,{trustedTypes:p}=s,u=p&&h(p.createPolicy)&&p.createPolicy("highcharts",{createHTML:t=>t}),g=u?u.createHTML(""):"",f=function(){try{return!!new DOMParser().parseFromString(g,"text/html")}catch(t){return!1}}();class m{static filterUserAttributes(t){return d(t,(e,i)=>{let s=!0;-1===m.allowedAttributes.indexOf(i)&&(s=!1),-1!==["background","dynsrc","href","lowsrc","src"].indexOf(i)&&(s=l(e)&&m.allowedReferences.some(t=>0===e.indexOf(t))),s||(n(33,!1,void 0,{"Invalid attribute in config":`${i}`}),delete t[i]),l(e)&&t[i]&&(t[i]=e.replace(/</g,"<"))}),t}static parseStyle(t){return t.split(";").reduce((t,e)=>{let i=e.split(":").map(t=>t.trim()),s=i.shift();return s&&i.length&&(t[s.replace(/-([a-z])/g,t=>t[1].toUpperCase())]=i.join(":")),t},{})}static setElementHTML(t,e){t.innerHTML=m.emptyHTML,e&&new m(e).addToDOM(t)}constructor(t){this.nodes="string"==typeof t?this.parseMarkup(t):t}addToDOM(e){return function e(s,o){let h;
23499return c(s).forEach(function(s){let l;let c=s.tagName,p=s.textContent?t.doc.createTextNode(s.textContent):void 0,u=m.bypassHTMLFiltering;if(c){if("#text"===c)l=p;else if(-1!==m.allowedTags.indexOf(c)||u){let n="svg"===c?i:o.namespaceURI||i,h=t.doc.createElementNS(n,c),g=s.attributes||{};d(s,function(t,e){"tagName"!==e&&"attributes"!==e&&"children"!==e&&"style"!==e&&"textContent"!==e&&(g[e]=t)}),r(h,u?g:m.filterUserAttributes(g)),s.style&&a(h,s.style),p&&h.appendChild(p),e(s.children||[],h),l=h}else n(33,!1,void 0,{"Invalid tagName in config":c})}l&&o.appendChild(l),h=l}),h}(this.nodes,e)}parseMarkup(t){let e;let i=[];if(t=t.trim().replace(/ style=(["'])/g," data-style=$1"),f)e=new DOMParser().parseFromString(u?u.createHTML(t):t,"text/html");else{let i=o("div");i.innerHTML=t,e={body:i}}let s=(t,e)=>{let i=t.nodeName.toLowerCase(),r={tagName:i};"#text"===i&&(r.textContent=t.textContent||"");let o=t.attributes;if(o){let t={};[].forEach.call(o,e=>{"data-style"===e.name?r.style=m.parseStyle(e.value):t[e.name]=e.value}),r.attributes=t}if(t.childNodes.length){let e=[];[].forEach.call(t.childNodes,t=>{s(t,e)}),e.length&&(r.children=e)}e.push(r)};return[].forEach.call(e.body.childNodes,t=>s(t,i)),i}}return m.allowedAttributes=["alt","aria-controls","aria-describedby","aria-expanded","aria-haspopup","aria-hidden","aria-label","aria-labelledby","aria-live","aria-pressed","aria-readonly","aria-roledescription","aria-selected","class","clip-path","color","colspan","cx","cy","d","dx","dy","disabled","fill","filterUnits","flood-color","flood-opacity","height","href","id","in","markerHeight","markerWidth","offset","opacity","orient","padding","paddingLeft","paddingRight","patternUnits","r","refX","refY","role","scope","slope","src","startOffset","stdDeviation","stroke","stroke-linecap","stroke-width","style","tableValues","result","rowspan","summary","target","tabindex","text-align","text-anchor","textAnchor","textLength","title","type","valign","width","x","x1","x2","xlink:href","y","y1","y2","zIndex"],m.allowedReferences=["https://","http://","mailto:","/","../","./","#"],m.allowedTags=["a","abbr","b","br","button","caption","circle","clipPath","code","dd","defs","div","dl","dt","em","feComponentTransfer","feDropShadow","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feOffset","feMerge","feMergeNode","filter","h1","h2","h3","h4","h5","h6","hr","i","img","li","linearGradient","marker","ol","p","path","pattern","pre","rect","small","span","stop","strong","style","sub","sup","svg","table","text","textPath","thead","title","tbody","tspan","td","th","tr","u","ul","#text"],m.emptyHTML=g,m.bypassHTMLFiltering=!1,m}),i(e,"Core/Templating.js",[e["Core/Defaults.js"],e["Core/Utilities.js"]],function(t,e){let{defaultOptions:i,defaultTime:s}=t,{extend:r,getNestedProperty:o,isArray:a,isNumber:n,isObject:h,pick:l,pInt:d}=e,c={add:(t,e)=>
23499t+e,divide:(t,e)=>0!==e?t/e:"",eq:(t,e)=>t==e,each:function(t){let e=arguments[arguments.length-1];return!!a(t)&&t.map((i,s)=>p(e.body,r(h(i)?i:{"@this":i},{"@index":s,"@first":0===s,"@last":s===t.length-1}))).join("")},ge:(t,e)=>t>=e,gt:(t,e)=>t>e,if:t=>!!t,le:(t,e)=>t<=e,lt:(t,e)=>t<e,multiply:(t,e)=>t*e,ne:(t,e)=>t!=e,subtract:(t,e)=>t-e,unless:t=>!t};function p(t="",e,r){let a=/\{([a-zA-Z0-9\:\.\,;\-\/<>%_@"'= #\(\)]+)\}/g,n=/\(([a-zA-Z0-9\:\.\,;\-\/<>%_@"'= ]+)\)/g,h=[],d=/f$/,g=/\.([0-9])/,f=i.lang,m=r&&r.time||s,x=r&&r.numberFormatter||u,y=(t="")=>{let i;return"true"===t||"false"!==t&&((i=Number(t)).toString()===t?i:o(t,e))},b,v,S=0,C;for(;null!==(b=a.exec(t));){let i=n.exec(b[1]);i&&(b=i,C=!0),v&&v.isBlock||(v={ctx:e,expression:b[1],find:b[0],isBlock:"#"===b[1].charAt(0),start:b.index,startInner:b.index+b[0].length,length:b[0].length});let s=b[1].split(" ")[0].replace("#","");c[s]&&(v.isBlock&&s===v.fn&&S++,v.fn||(v.fn=s));let r="else"===b[1];if(v.isBlock&&v.fn&&(b[1]===`/${v.fn}`||r)){if(S)!r&&S--;else{let e=v.startInner,i=t.substr(e,b.index-e);void 0===v.body?(v.body=i,v.startInner=b.index+b[0].length):v.elseBody=i,v.find+=i+b[0],r||(h.push(v),v=void 0)}}else v.isBlock||h.push(v);if(i&&!v?.isBlock)break}return h.forEach(i=>{let s,o;let{body:a,elseBody:n,expression:h,fn:u}=i;if(u){let t=[i],l=h.split(" ");for(o=c[u].length;o--;)t.unshift(y(l[o+1]));s=c[u].apply(e,t),i.isBlock&&"boolean"==typeof s&&(s=p(s?a:n,e,r))}else{let t=h.split(":");if(s=y(t.shift()||""),t.length&&"number"==typeof s){let e=t.join(":");if(d.test(e)){let t=parseInt((e.match(g)||["","-1"])[1],10);null!==s&&(s=x(s,t,f.decimalPoint,e.indexOf(",")>-1?f.thousandsSep:""))}else s=m.dateFormat(e,s)}}t=t.replace(i.find,l(s,""))}),C?p(t,e,r):t}function u(t,e,s,r){let o,a;t=+t||0,e=+e;let h=i.lang,c=(t.toString().split(".")[1]||"").split("e")[0].length,p=t.toString().split("e"),u=e;-1===e?e=Math.min(c,20):n(e)?e&&p[1]&&p[1]<0&&((a=e+ +p[1])>=0?(p[0]=(+p[0]).toExponential(a).split("e")[0],e=a):(p[0]=p[0].split(".")[0]||0,t=e<20?(p[0]*Math.pow(10,p[1])).toFixed(e):0,p[1]=0)):e=2;let g=(Math.abs(p[1]?p[0]:t)+Math.pow(10,-Math.max(e,c)-1)).toFixed(e),f=String(d(g)),m=f.length>3?f.length%3:0;return s=l(s,h.decimalPoint),r=l(r,h.thousandsSep),o=(t<0?"-":"")+(m?f.substr(0,m)+r:""),0>+p[1]&&!u?o="0":o+=f.substr(m).replace(/(\d{3})(?=\d)/g,"$1"+r),e?o+=s+g.slice(-e):0==+o&&(o="0"),p[1]&&0!=+o&&(o+="e"+p[1]),o}return{dateFormat:function(t,e,i){return s.dateFormat(t,e,i)},format:p,helpers:c,numberFormat:u}}),i(e,"Core/Renderer/RendererRegistry.js",[e["Core/Globals.js"]],function(t){var e,i;let s;return(i=e||(e={})).rendererTypes={},i.getRendererType=function(t=s){return i.rendererTypes[t]||i.rendererTypes[s]},i.registerRendererType=function(e,r,o){i.rendererTypes[e]=r,(!s||o)&&(s=e,t.Renderer=r)},e}),i(e,"Core/Renderer/RendererUtilities.js",[e["Core/Utilities.js"]],function(t){var e;let{clamp:i,pick:s,pushUnique:r,stableSort:o}=t;return(e||(e={})).distribute=function t(e,a,n){let h=e,l=h.reducedLen||a,d=(t,e)=>t.target-e.target,c=[],p=e.length,u=[],g=c.push,f,m,x,y=!0,b,v,S=0,C;for(f=p;f--;)S+=e[f].size;if(S>l){for(o(e,(t,e)=>(e.rank||0)-(t.rank||0)),x=(C=e[0].rank===e[e.length-1].rank)?p/2:-1,m=C?x:p-1;x&&S>l;)b=e[f=Math.floor(m)],r(u,f)&&(S-=b.size),m+=x,C&&m>=e.length&&(x/=2,m=x);u.sort((t,e)=>e-t).forEach(t=>g.apply(c,e.splice(t,1)))}for(o(e,d),e=e.map(t=>({size:t.size,targets:[t.target],align:s(t.align,.5)}));y;){for(f=e.length;f--;)b=e[f],v=(Math.min.apply(0,b.targets)+Math.max.apply(0,b.targets))/2,b.pos=i(v-b.size*b.align,0,a-b.size);for(f=e.length,y=!1;f--;)f>0&&e[f-1].pos+e[f-1].size>e[f].pos&&(e[f-1].size+=e[f].size,e[f-1].targets=e[f-1].targets.concat(e[f].targets),e[f-1].align=.5,e[f-1].pos+e[f-1].size>a&&(e[f-1].pos=a-e[f-1].size),e.splice(f,1),y=!0)}return g.apply(h,c),f=0,e.some(e=>{let i=0;return(e.targets||[]).some(()=>(h[f].pos=e.pos+i,void 0!==n&&Math.abs(h[f].pos-h[f].target)>n)?(h.slice(0,f+1).forEach(t=>delete t.pos),h.reducedLen=(h.reducedLen||a)-.1*a,h.reducedLen>.1*a&&t(h,a,n),!0):(i+=h[f].size,f++,!1))}),o(h,d),h},e}
vendor: 6,542 bytes, line 23499
23499),i(e,"Core/Renderer/SVG/SVGElement.js",[e["Core/Animation/AnimationUtilities.js"],e["Core/Color/Color.js"],e["Core/Globals.js"],e["Core/Utilities.js"]],function(t,e,i,s){let{animate:r,animObject:o,stop:a}=t,{deg2rad:n,doc:h,svg:l,SVG_NS:d,win:c}=i,{addEvent:p,attr:u,createElement:g,crisp:f,css:m,defined:x,erase:y,extend:b,fireEvent:v,isArray:S,isFunction:C,isObject:k,isString:M,merge:w,objectEach:A,pick:T,pInt:P,pushUnique:L,replaceNested:O,syncTimeout:D,uniqueKey:E}=s;class I{_defaultGetter(t){let e=T(this[t+"Value"],this[t],this.element?this.element.getAttribute(t):null,0);return/^[\-0-9\.]+$/.test(e)&&(e=parseFloat(e)),e}_defaultSetter(t,e,i){i.setAttribute(e,t)}add(t){let e;let i=this.renderer,s=this.element;return t&&(this.parentGroup=t),void 0!==this.textStr&&"text"===this.element.nodeName&&i.buildText(this),this.added=!0,(!t||t.handleZ||this.zIndex)&&(e=this.zIndexSetter()),e||(t?t.element:i.box).appendChild(s),this.onAdd&&this.onAdd(),this}addClass(t,e){let i=e?"":this.attr("class")||"";return(t=(t||"").split(/ /g).reduce(function(t,e){return -1===i.indexOf(e)&&t.push(e),t},i?[i]:[]).join(" "))!==i&&this.attr("class",t),this}afterSetters(){this.doTransform&&(this.updateTransform(),this.doTransform=!1)}align(t,e,i,s=!0){let r,o,a,n;let h={},l=this.renderer,d=l.alignedObjects,c=!!t;t?(this.alignOptions=t,this.alignByTranslate=e,this.alignTo=i):(t=this.alignOptions||{},e=this.alignByTranslate,i=this.alignTo);let p=!i||M(i)?i||"renderer":void 0;p&&(c&&L(d,this),i=void 0);let u=T(i,l[p],l),g=t.align,f=t.verticalAlign;return r=(u.x||0)+(t.x||0),o=(u.y||0)+(t.y||0),"right"===g?a=1:"center"===g&&(a=2),a&&(r+=((u.width||0)-(t.width||0))/a),h[e?"translateX":"x"]=Math.round(r),"bottom"===f?n=1:"middle"===f&&(n=2),n&&(o+=((u.height||0)-(t.height||0))/n),h[e?"translateY":"y"]=Math.round(o),s&&(this[this.placed?"animate":"attr"](h),this.placed=!0),this.alignAttr=h,this}alignSetter(t){let e={left:"start",center:"middle",right:"end"};e[t]&&(this.alignValue=t,this.element.setAttribute("text-anchor",e[t]))}animate(t,e,i){let s=o(T(e,this.renderer.globalAnimation,!0)),a=s.defer;return h.hidden&&(s.duration=0),0!==s.duration?(i&&(s.complete=i),D(()=>{this.element&&r(this,t,s)},a)):(this.attr(t,void 0,i||s.complete),A(t,function(t,e){s.step&&s.step.call(this,t,{prop:e,pos:1,elem:this})},this)),this}applyTextOutline(t){let e=this.element;-1!==t.indexOf("contrast")&&(t=t.replace(/contrast/g,this.renderer.getContrast(e.style.fill)));let s=t.split(" "),r=s[s.length-1],o=s[0];if(o&&"none"!==o&&i.svg){this.fakeTS=!0,o=o.replace(/(^[\d\.]+)(.*?)$/g,function(t,e,i){return 2*Number(e)+i}),this.removeTextOutline();let t=h.createElementNS(d,"tspan");u(t,{class:"highcharts-text-outline",fill:r,stroke:r,"stroke-width":o,"stroke-linejoin":"round"});let i=e.querySelector("textPath")||e;[].forEach.call(i.childNodes,e=>{let i=e.cloneNode(!0);i.removeAttribute&&["fill","stroke","stroke-width","stroke"].forEach(t=>i.removeAttribute(t)),t.appendChild(i)});let s=0;[].forEach.call(i.querySelectorAll("text tspan"),t=>{s+=Number(t.getAttribute("dy"))});let a=h.createElementNS(d,"tspan");a.textContent="â",u(a,{x:Number(e.getAttribute("x")),dy:-s}),t.appendChild(a),i.insertBefore(t,i.firstChild)}}attr(t,e,i,s){let{element:r}=this,o=I.symbolCustomAttribs,n,h,l=this,d;return"string"==typeof t&&void 0!==e&&(n=t,(t={})[n]=e),"string"==typeof t?l=(this[t+"Getter"]||this._defaultGetter).call(this,t,r):(A(t,function(e,i){d=!1,s||a(this,i),this.symbolName&&-1!==o.indexOf(i)&&(h||(this.symbolAttr(t),h=!0),d=!0),this.rotation&&("x"===i||"y"===i)&&(this.doTransform=!0),d||(this[i+"Setter"]||this._defaultSetter).call(this,e,i,r)},this),this.afterSetters()),i&&i.call(this),l}clip(t){if(t&&!t.clipPath){let e=E()+"-",i=this.renderer.createElement("clipPath").attr({id:e}).add(this.renderer.defs);b(t,{clipPath:i,id:e,count:0}),t.add(i)}return this.attr("clip-path",t?`url(${this.renderer.url}#${t.id})`:"none")}crisp(t,e){e=Math.round(e||t.strokeWidth||0);let i=t.x||this.x||0,s=t.y||this.y||0,r=(t.width||this.width||0)+i,o=(t.height||this.height||0)+s,a=f(i,e),n=f(s,e);return b(t,{x:a,y:n,width:f(r,e)-a,height:f(o,e)-n}),x(t.strokeWidth)&&(t.strokeWidth=e),t}complexColor(t,i,s){let r=this.renderer,o,a,n,h,l,d,c,p,u,g,f=[],m;v(this.renderer,"complexColor",{args:arguments},function(){if(t.radialGradient?a="radialGradient":t.linearGradient&&(a="linearGradient"),a){if(n=t[a],l=r.gradients,d=t.stops,u=s.radialReference,S(n)&&(t[a]=n={x1:n[0],y1:n[1],x2:n[2],y2:n[3],gradientUnits:"userSpaceOnUse"}),"radialGradient"===a&&u&&!x(n.gradientUnits)&&(h=n,n=w(n,r.getRadialAttr(u,h),{gradientUnits:"userSpaceOnUse"})),A(n,function(t,e){"id"!==e&&f.push(e,t)}),A(d,function(t){f.push(t)}),l[f=f.join(",")])g=l[f].attr("id");else{n.id=g=E();let t=l[f]=r.createElement(a).attr(n).add(r.defs);t.radAttr=h,t.stops=[],d.forEach(function(i){0===i[1].indexOf("rgba")?(c=(o=e.parse(i[1])).get("rgb"),p=o.get("a")):(c=i[1],p=1);let s=r.createElement("stop").attr({offset:i[0],"stop-color":c,"stop-opacity":p}).add(t);t.stops.push(s)})}m="url("+r.url+"#"+g+")",s.setAttribute(i,m),s.gradient=f,t.toString=function(){return m}}})}css(t){let e=this.styles,i={},s=this.element,r,o=!e;if(e&&A(t,function(t,s){e&&e[s]!==t&&(i[s]=t,o=!0)}),o){e&&(t=b(e,i)),null===t.width||"auto"===t.width?delete this.textWidth:"text"===s.nodeName.toLowerCase()&&t.width&&(r=this.textWidth=P(t.width)),b(this.styles,t),r&&!l&&this.renderer.forExport&&delete t.width;let o=w(t);s.namespaceURI===this.SVG_NS&&(["textOutline","textOverflow","width"].forEach(t=>o&&delete o[t]),o.color&&(o.fill=o.color)),m(s,o)}return this.added&&("text"===this.element.nodeName&&this.renderer.buildText(this),t.textOutline&&this.applyTextOutline(t.textOutline)),this}dashstyleSetter(t){let e,i=this["stroke-width"];if("inherit"===i&&(i=1),t=t&&t.toLowerCase()){let s=t.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(e=s.length;e--;)s[e]=""+P(s[e])*T(i,NaN);t=s.join(",").replace(/NaN/g,"none"),this.element.setAttribute("stroke-dasharray",t)}}destroy(){let t=this,e=t.element||{},i=t.renderer,s=e.ownerSVGElement,r="SPAN"===e.nodeName&&t.parentGroup||void 0,o,n;if(e.onclick=e.onmouseout=e.onmouseover=e.onmousemove=e.point=null,a(t),t.clipPath&&s){let e=t.clipPath;[].forEach.call(s.querySelectorAll("[clip-path],[CLIP-PATH]"),function(t){t.getAttribute("clip-path").indexOf(e.element.i
23499d)>-1&&t.removeAttribute("clip-path")}),t.clipPath=e.destroy()}if(t.connector=t.connector?.destroy(),t.stops){for(n=0;n<t.stops.length;n++)t.stops[n].destroy();t.stops.length=0,t.stops=void 0}for(t.safeRemoveChild(e);r&&r.div&&0===r.div.childNodes.length;)o=r.parentGroup,t.safeRemoveChild(r.div),delete r.div,r=o;t.alignOptions&&y(i.alignedObjects,t),A(t,function(e,i){t[i]&&t[i].parentGroup===t&&t[i].destroy&&t[i].destroy(),delete t[i]})}dSetter(t,e,i){S(t)&&("string"==typeof t[0]&&(t=this.renderer.pathToSegments(t)),this.pathArray=t,t=t.reduce((t,e,i)=>e&&e.join?(i?t+" ":"")+e.join(" "):(e||"").toString(),"")),/(NaN| {2}|^$)/.test(t)&&(t="M 0 0"),this[e]!==t&&(i.setAttribute(e,t),this[e]=t)}fillSetter(t,e,i){"string"==typeof t?i.setAttribute(e,t):t&&this.complexColor(t,e,i)}hrefSetter(t,e,i){i.setAttributeNS("http://www.w3.org/1999/xlink",e,t)}getBBox(t,e){let i,s,r,o;let{alignValue:a,element:n,renderer:h,styles:l,textStr:d}=this,{cache:c,cacheKeys:p}=h,u=n.namespaceURI===this.SVG_NS,g=T(e,this.rotation,0),f=h.styledMode?n&&I.prototype.getStyle.call(n,"font-size"):l.fontSize;if(x(d)&&(-1===(o=d.toString()).indexOf("<")&&(o=o.replace(/[0-9]/g,"0")),o+=["",h.rootFontSize,f,g,this.textWidth,a,l.textOverflow,l.fontWeight].join(",")),o&&!t&&(i=c[o]),!i){if(u||h.forExport){try{r=this.fakeTS&&function(t){let e=n.querySelector(".highcharts-text-outline");e&&m(e,{display:t})},C(r)&&r("none"),i=n.getBBox?b({},n.getBBox()):{width:n.offsetWidth,height:n.offsetHeight,x:0,y:0},C(r)&&r("")}catch(t){}(!i||i.width<0)&&(i={x:0,y:0,width:0,height:0})}else i=this.htmlGetBBox();s=i.height,u&&(i.height=s=({"11px,17":14,"13px,20":16})[`${f||""},${Math.round(s)}`]||s),g&&(i=this.getRotatedBox(i,g))}if(o&&(""===d||i.height>0)){for(;p.length>250;)delete c[p.shift()];c[o]||p.push(o),c[o]=i}return i}getRotatedBox(t,e){let{x:i,y:s,width:r,height:o}=t,{alignValue:a,translateY:h,rotationOriginX:l=0,rotationOriginY:d=0}=this,c={right:1,center:.5}[a||0]||0,p=Number(this.element.getAttribute("y")||0)-(h?0:s),u=e*n,g=(e-90)*n,f=Math.cos(u),m=Math.sin(u),x=r*f,y=r*m,b=Math.cos(g),v=Math.sin(g),[[S,C],[k,M]]=[l,d].map(t=>[t-t*f,t*m]),w=i+c*(r-x)+S+M+p*b,A=w+x,T=A-o*b,P=T-x,L=s+p-c*y-C+k+p*v,O=L+y,D=O-o*v,E=D-y,I=Math.min(w,A,T,P),j=Math.min(L,O,D,E),B=Math.max(w,A,T,P)-I,R=Math.max(L,O,D,E)-j;return{x:I,y:j,width:B,height:R}}getStyle(t){return c.getComputedStyle(this.element||this,"").getPropertyValue(t)}hasClass(t){return -1!==(""+this.attr("class")).split(" ").indexOf(t)}hide(){return this.attr({visibility:"hidden"})}htmlGetBBox(){return{height:0,width:0,x:0,y:0}}constructor(t,e){this.onEvents={},this.opacity=1,this.SVG_NS=d,this.element="span"===e||"body"===e?g(e):h.createElementNS(this.SVG_NS,e),this.renderer=t,this.styles={},v(this,"afterInit")}on(t,e){let{onEvents:i}=this;return i[t]&&i[t](),i[t]=p(this.element,t,e),this}opacitySetter(t,e,i){let s=Number(Number(t).toFixed(3));this.opacity=s,i.setAttribute(e,s)}reAlign(){this.alignOptions?.width&&"left"!==this.alignOptions.align&&(this.alignOptions.width=this.getBBox().width,this.placed=!1,this.align())}removeClass(t){return this.attr("class",(""+this.attr("class")).replace(M(t)?RegExp(`(^| )${t}( |$)`):t," ").replace(/ +/g," ").trim())}removeTextOutline(){let t=this.element.querySelector("tspan.highcharts-text-outline");t&&this.safeRemoveChild(t)}safeRemoveChild(t){let e=t.parentNode;e&&e.removeChild(t)}setRadialReference(t){let e=this.element.gradient&&this.renderer.gradients[this.element.gradient];return this.element.radialReference=t,e&&e.radAttr&&e.animate(this.renderer.getRadialAttr(t,e.radAttr)),this}setTextPath(t,e){e=w(!0,{enabled:!0,attributes:{dy:-5,startOffset:"50%",textAnchor:"middle"}},e);let i=this.renderer.url,s=this.text||this,r=s.textPath,{attributes:o,enabled:a}=e;if(t=t||r&&r.path,r&&r.undo(),t&&a){let e=p(s,"afterModifyTree",e=>{if(t&&a){let r=t.attr("id");r||t.attr("id",r=E());let a={x:0,y:0};x(o.dx)&&(a.dx=o.dx,delete o.dx),x(o.dy)&&(a.dy=o.dy,delete o.dy),s.attr(a),this.attr({transform:""}),this.box&&(this.box=this.box.destroy());let n=e.nodes.slice(0);e.nodes.length=0,e.nodes[0]={tagName:"textPath",attributes:b(o,{"text-anchor":o.textAnchor,href:`${i}#${r}`}),children:n}}});s.textPath={path:t,undo:e}}else s.attr({dx:0,dy:0}),delete s.textPath;return this.added&&(s.textCache="",this.renderer.buildText(s)),this}shadow(t){let{renderer:e}=this,i=w(this.parentGroup?.rotation===90?{offsetX:-1,offsetY:-1}:{},k(t)?t:{}),s=e.shadowDefinition(i);return this.attr({filter:t?`url(${e.url}#${s})`:"none"})}show(t=!0){return this.attr({visibility:t?"inherit":"visible"})}"stroke-widthSetter"(t,e,i){this[e]=t,i.setAttribute(e,t)}strokeWidth(){if(!this.renderer.styledMode)return this["stroke-width"]||0;let t=this.getStyle("stroke-width"),e=0,i;return/px$/.test(t)?e=P(t):""!==t&&(u(i=h.createElementNS(d,"rect"),{width:t,"stroke-width":0}),this.element.parentNode.appendChild(i),e=i.getBBox().width,i.parentNode.removeChild(i)),e}symbolAttr(t){let e=this;
23499I.symbolCustomAttribs.forEach(function(i){e[i]=T(t[i],e[i])}),e.attr({d:e.renderer.symbols[e.symbolName](e.x,e.y,e.width,e.height,e)})}textSetter(t){t!==this.textStr&&(delete this.textPxLength,this.textStr=t,this.added&&this.renderer.buildText(this),this.reAlign())}titleSetter(t){let e=this.element,i=e.getElementsByTagName("title")[0]||h.createElementNS(this.SVG_NS,"title");e.insertBefore?e.insertBefore(i,e.firstChild):e.appendChild(i),i.textContent=O(T(t,""),[/<[^>]*>/g,""]).replace(/</g,"<").replace(/>/g,">")}toFront(){let t=this.element;return t.parentNode.appendChild(t),this}translate(t,e){return this.attr({translateX:t,translateY:e})}updateTransform(t="transform"){let{element:e,matrix:i,rotation:s=0,rotationOriginX:r,rotationOriginY:o,scaleX:a,scaleY:n,translateX:h=0,translateY:l=0}=this,d=["translate("+h+","+l+")"];x(i)&&d.push("matrix("+i.join(",")+")"),s&&(d.push("rotate("+s+" "+T(r,e.getAttribute("x"),0)+" "+T(o,e.getAttribute("y")||0)+")"),this.text?.element.tagName==="SPAN"&&this.text.attr({rotation:s,rotationOriginX:(r||0)-this.padding,rotationOriginY:(o||0)-this.padding})),(x(a)||x(n))&&d.push("scale("+T(a,1)+" "+T(n,1)+")"),d.length&&!(this.text||this).textPath&&e.setAttribute(t,d.join(" "))}visibilitySetter(t,e,i){"inherit"===t?i.removeAttribute(e):this[e]!==t&&i.setAttribute(e,t),this[e]=t}xGetter(t){return"circle"===this.element.nodeName&&("x"===t?t="cx":"y"===t&&(t="cy")),this._defaultGetter(t)}zIndexSetter(t,e){let i=this.renderer,s=this.parentGroup,r=(s||i).element||i.box,o=this.element,a=r===i.box,n,h,l,d=!1,c,p=this.added,u;if(x(t)?(o.setAttribute("data-z-index",t),t=+t,this[e]===t&&(p=!1)):x(this[e])&&o.removeAttribute("data-z-index"),this[e]=t,p){for((t=this.zIndex)&&s&&(s.handleZ=!0),u=(n=r.childNodes).length-1;u>=0&&!d;u--)c=!x(l=(h=n[u]).getAttribute("data-z-index")),h!==o&&(t<0&&c&&!a&&!u?(r.insertBefore(o,n[u]),d=!0):(P(l)<=t||c&&(!x(t)||t>=0))&&(r.insertBefore(o,n[u+1]),d=!0));d||(r.insertBefore(o,n[a?3:0]),d=!0)}return d}}return I.symbolCustomAttribs=["anchorX","anchorY","clockwise","end","height","innerR","r","start","width","x","y"],I.prototype.strokeSetter=I.prototype.fillSetter,I.prototype.yGetter=I.prototype.xGetter,I.prototype.matrixSetter=I.prototype.rotationOriginXSetter=I.prototype.rotationOriginYSetter=I.prototype.rotationSetter=I.prototype.scaleXSetter=I.prototype.scaleYSetter=I.prototype.translateXSetter=I.prototype.translateYSetter=I.prototype.verticalAlignSetter=function(t,e){this[e]=t,this.doTransform=!0},I}),i(e,"Core/Renderer/SVG/SVGLabel.js",[e["Core/Renderer/SVG/SVGElement.js"],e["Core/Utilities.js"]],function(t,e){let{defined:i,extend:s,isNumber:r,merge:o,pick:a,removeEvent:n}=e;class h extends t{constructor(t,e,i,s,r,o,a,n,l,d){let c;super(t,"g"),this.paddingLeftSetter=this.paddingSetter,this.paddingRightSetter=this.paddingSetter,this.textStr=e,this.x=i,this.y=s,this.anchorX=o,this.anchorY=a,this.baseline=l,this.className=d,this.addClass("button"===d?"highcharts-no-tooltip":"highcharts-label"),d&&this.addClass("highcharts-"+d),this.text=t.text(void 0,0,0,n).attr({zIndex:1}),"string"==typeof r&&((c=/^url\((.*?)\)$/.test(r))||this.renderer.symbols[r])&&(this.symbolKey=r),this.bBox=h.emptyBBox,this.padding=3,this.baselineOffset=0,this.needsBox=t.styledMode||c,this.deferredAttr={},this.alignFactor=0}alignSetter(t){let e={left:0,center:.5,right:1}[t];e!==this.alignFactor&&(this.alignFactor=e,this.bBox&&r(this.xSetting)&&this.attr({x:this.xSetting}))}anchorXSetter(t,e){this.anchorX=t,this.boxAttr(e,Math.round(t)-this.getCrispAdjust()-this.xSetting)}anchorYSetter(t,e){this.anchorY=t,this.boxAttr(e,t-this.ySetting)}boxAttr(t,e){this.box?this.box.attr(t,e):this.deferredAttr[t]=e}css(e){if(e){let t={};e=o(e),h.textProps.forEach(i=>{void 0!==e[i]&&(t[i]=e[i],delete e[i])}),this.text.css(t),"fontSize"in t||"fontWeight"in t?this.updateTextPadding():("width"in t||"textOverflow"in t)&&this.updateBoxSize()}return t.prototype.css.call(this,e)}destroy(){n(this.element,"mouseenter"),n(this.element,"mouseleave"),this.text&&this.text.destroy(),this.box&&(this.box=this.box.destroy()),t.prototype.destroy.call(this)}fillSetter(t,e){t&&(this.needsBox=!0),this.fill=t,this.boxAttr(e,t)}getBBox(t,e){this.textStr&&0===this.bBox.width&&0===this.bBox.height&&this.updateBoxSize();let{padding:i,height:s=0,translateX:r=0,translateY:o=0,width:n=0}=this,h=a(this.paddingLeft,i),l=e??(this.rotation||0),d={width:n,height:s,x:r+this.bBox.x-h,y:o+this.bBox.y-i+this.baselineOffset};return l&&(d=this.getRotatedBox(d,l)),d}getCrispAdjust(){return(this.renderer.styledMode&&this.box?this.box.strokeWidth():this["stroke-width"]?parseInt(this["stroke-width"],10):0)%2/2}heightSetter(t){this.heightSetting=t}onAdd(){this.text.add(this),this.attr({text:a(this.textStr,""),x:this.x||0,y:this.y||0}),this.box&&i(this.anchorX)&&this.attr({anchorX:this.anchorX,anchorY:this.anchorY})}paddingSetter(t,e){r(t)?t!==this[e]&&(this[e]=t,this.updateTextPadding()):this[e]=void 0}rSetter(t,e){this.boxAttr(e,t)}strokeSetter(t,e){this.stroke=t,this.boxAttr(e,t)}"stroke-widthSetter"(t,e){t&&(this.needsBox=!0),this["stroke-width"]=t,this.boxAttr(e,t)}"text-alignSetter"(t){this.textAlign=t}textSetter(t){void 0!==t&&this.text.attr({text:t}),this.updateTextPadding(),this.reAlign()}updateBoxSize(){let t;let e=this.text,o={},a=this.padding,n=this.bBox=(!r(this.widthSetting)||!r(this.heightSetting)||this.textAlign)&&i(e.textStr)?e.getBBox(void 0,0):h.emptyBBox;this.width=this.getPaddedWidth(),this.height=(this.heightSetting||n.height||0)+2*a;let l=this.renderer.fontMetrics(e);if(this.baselineOffset=a+Math.min((this.text.firstLineMetrics||l).b,n.height||1/0),this.heightSetting&&(this.baselineOffset+=(this.heightSetting-l.h)/2),this.needsBox&&!e.textPath){if(!this.box){let t=this.box=this.symbolKey?this.renderer.symbol(this.symbolKey):this.renderer.rect();t.addClass(("button"===this.className?"":"highcharts-label-box")+(this.className?" highcharts-"+this.className+"-box":"")),t.add(this)}t=this.getCrispAdjust(),o.x=t,o.y=(this.baseline?-this.baselineOffset:0)+t,o.width=Math.round(this.width),o.height=Math.round(this.height),this.box.attr(s(o,this.deferredAttr)),this.deferredAttr={}}}updateTextPadding(){let t=this.text;if(!t.textPath){this.updateBoxSize();let e=this.baseline?0:this.baselineOffset,s=a(this.paddingLeft,this.padding);i(this.widthSetting)&&this.bBox&&("center"===this.textAlign||"right"===this.textAlign)&&(s+=({center:.5,right:1})[this.textAlign]*(this.widthSetting-this.bBox.width)),(s!==t.x||e!==t.y)&&(t.attr("x",s),t.hasBoxWidthChanged&&(this.bBox=t.getBBox(!0)),void 0!==e&&t.attr("y",e)),t.x=s,t.y=e}}widthSetter(t){this.widthSetting=r(t)?t:void 0}getPaddedWidth(){let t=this.padding,e=a(this.paddingLeft,t),i=a(this.paddingRight,t);return(this.widthSetting||this.bBox.width||0)+e+i}xSetter(t){this.x=t,this.alignFactor&&(t-=this.alignFactor*this.getPaddedWidth(),this["forceAnimate:x"]=!0),this.xSetting=Math.round(t),this.attr("translateX",this.xSetting)}ySetter(t){this.ySetting=this.y=Math.round(t),this.attr("translateY",this.ySetting)}}return h.emptyBBox={width:0,height:0,x:0,y:0},h.textProps=["color","direction","fontFamily","fontSize","fontStyle","fontWeight","lineHeight","textAlign","textDecoration","textOutline","textOverflow","whiteSpace","width"],h}),i(e,"Core/Renderer/SVG/Symbols.js",[e["Core/Utilities.js"]],function(t){let{defined:e,isNumber:i,pick:s}=t;function r(t,i,r,o,a){let n=[];if(a){let h=a.start||0,l=s(a.r,r),d=s(a.r,o||r),c=2e-4/Math.max(l,1),p=Math.abs((a.end||0)-h-2*Math.PI)<c,u=(a.end||0)-c,g=a.innerR,f=s(a.open,p),m=Math.cos(h),x=Math.sin(h),y=Math.cos(u),b=Math.sin(u),v=s(a.longArc,u-h-Math.PI<c?0:1),S=["A",l,d,0,v,s(a.clockwise,1),t+l*y,i+d*b];S.params={start:h,end:u,cx:t,cy:i},n.push(["M",t+l*m,i+d*x],S),e(g)&&((S=["A",g,g,0,v,e(a.clockwise)?1-a.clockwise:0,t+g*m,i+g*x]).params={start:u,end:h,cx:t,cy:i},n.push(f?["M",t+g*y,i+g*b]:["L",t+g*y,i+g*b],S)),f||n.push(["Z"])}return n}
23499function o(t,e,i,s,r){return r&&r.r?a(t,e,i,s,r):[["M",t,e],["L",t+i,e],["L",t+i,e+s],["L",t,e+s],["Z"]]}function a(t,e,i,s,r){let o=r?.r||0;return[["M",t+o,e],["L",t+i-o,e],["A",o,o,0,0,1,t+i,e+o],["L",t+i,e+s-o],["A",o,o,0,0,1,t+i-o,e+s],["L",t+o,e+s],["A",o,o,0,0,1,t,e+s-o],["L",t,e+o],["A",o,o,0,0,1,t+o,e],["Z"]]}return{arc:r,callout:function(t,e,s,r,o){let n=Math.min(o&&o.r||0,s,r),h=n+6,l=o&&o.anchorX,d=o&&o.anchorY||0,c=a(t,e,s,r,{r:n});if(!i(l)||l<s&&l>0&&d<r&&d>0)return c;if(t+l>s-h){if(d>e+h&&d<e+r-h)c.splice(3,1,["L",t+s,d-6],["L",t+s+6,d],["L",t+s,d+6],["L",t+s,e+r-n]);else if(l<s){let i=d<e+h,o=i?e:e+r;c.splice(i?2:5,0,["L",l,d],["L",t+s-n,o])}else c.splice(3,1,["L",t+s,r/2],["L",l,d],["L",t+s,r/2],["L",t+s,e+r-n])}else if(t+l<h){if(d>e+h&&d<e+r-h)c.splice(7,1,["L",t,d+6],["L",t-6,d],["L",t,d-6],["L",t,e+n]);else if(l>0){let i=d<e+h,s=i?e:e+r;c.splice(i?1:6,0,["L",l,d],["L",t+n,s])}else c.splice(7,1,["L",t,r/2],["L",l,d],["L",t,r/2],["L",t,e+n])}else d>r&&l<s-h?c.splice(5,1,["L",l+6,e+r],["L",l,e+r+6],["L",l-6,e+r],["L",t+n,e+r]):d<0&&l>h&&c.splice(1,1,["L",l-6,e],["L",l,e-6],["L",l+6,e],["L",s-n,e]);return c},circle:function(t,e,i,s){return r(t+i/2,e+s/2,i/2,s/2,{start:.5*Math.PI,end:2.5*Math.PI,open:!1})},diamond:function(t,e,i,s){return[["M",t+i/2,e],["L",t+i,e+s/2],["L",t+i/2,e+s],["L",t,e+s/2],["Z"]]},rect:o,roundedRect:a,square:o,triangle:function(t,e,i,s){return[["M",t+i/2,e],["L",t+i,e+s],["L",t,e+s],["Z"]]},"triangle-down":function(t,e,i,s){return[["M",t,e],["L",t+i,e],["L",t+i/2,e+s],["Z"]]}}}),i(e,"Core/Renderer/SVG/TextBuilder.js",[e["Core/Renderer/HTML/AST.js"],e["Core/Globals.js"],e["Core/Utilities.js"]],function(t,e,i){let{doc:s,SVG_NS:r,win:o}=e,{attr:a,extend:n,fireEvent:h,isString:l,objectEach:d,pick:c}=i;return class{constructor(t){let e=t.styles;this.renderer=t.renderer,this.svgElement=t,this.width=t.textWidth,this.textLineHeight=e&&e.lineHeight,this.textOutline=e&&e.textOutline,this.ellipsis=!!(e&&"ellipsis"===e.textOverflow),this.noWrap=!!(e&&"nowrap"===e.whiteSpace)}buildSVG(){let e=this.svgElement,i=e.element,r=e.renderer,o=c(e.textStr,"").toString(),a=-1!==o.indexOf("<"),n=i.childNodes,h=!e.added&&r.box,d=[o,this.ellipsis,this.noWrap,this.textLineHeight,this.textOutline,e.getStyle("font-size"),this.width].join(",");if(d!==e.textCache){e.textCache=d,delete e.actualWidth;for(let t=n.length;t--;)i.removeChild(n[t]);if(a||this.ellipsis||this.width||e.textPath||-1!==o.indexOf(" ")&&(!this.noWrap||/<br.*?>/g.test(o))){if(""!==o){h&&h.appendChild(i);let s=new t(o);this.modifyTree(s.nodes),s.addToDOM(i),this.modifyDOM(),this.ellipsis&&-1!==(i.textContent||"").indexOf("â¦")&&e.attr("title",this.unescapeEntities(e.textStr||"",["<",">"])),h&&h.removeChild(i)}}else i.appendChild(s.createTextNode(this.unescapeEntities(o)));l(this.textOutline)&&e.applyTextOutline&&e.applyTextOutline(this.textOutline)}}modifyDOM(){let t;let e=this.svgElement,i=a(e.element,"x");for(e.firstLineMetrics=void 0;t=e.element.firstChild;)if(/^[\s\u200B]*$/.test(t.textContent||" "))e.element.removeChild(t);else break;[].forEach.call(e.element.querySelectorAll("tspan.highcharts-br"),(t,s)=>{t.nextSibling&&t.previousSibling&&(0===s&&1===t.previousSibling.nodeType&&(e.firstLineMetrics=e.renderer.fontMetrics(t.previousSibling)),a(t,{dy:this.getLineHeight(t.nextSibling),x:i}))});let n=this.width||0;if(!n)return;let h=(t,o)=>{let h=t.textContent||"",l=h.replace(/([^\^])-/g,"$1- ").split(" "),d=!this.noWrap&&(l.length>1||e.element.childNodes.length>1),c=this.getLineHeight(o),p=0,u=e.actualWidth;if(this.ellipsis)h&&this.truncate(t,h,void 0,0,Math.max(0,n-.8*c),(t,e)=>t.substring(0,e)+"â¦");else if(d){let h=[],d=[];for(;o.firstChild&&o.firstChild!==t;)d.push(o.firstChild),o.removeChild(o.firstChild);for(;l.length;)l.length&&!this.noWrap&&p>0&&(h.push(t.textContent||""),t.textContent=l.join(" ").replace(/- /g,"-")),this.truncate(t,void 0,l,0===p&&u||0,n,(t,e)=>l.slice(0,e).join(" ").replace(/- /g,"-")),u=e.actualWidth,p++;d.forEach(e=>{o.insertBefore(e,t)}),h.forEach(e=>{o.insertBefore(s.createTextNode(e),t);let n=s.createElementNS(r,"tspan");n.textContent="â",a(n,{dy:c,x:i}),o.insertBefore(n,t)})}},l=t=>
vendor: 4,668 bytes, line 23499
23499{[].slice.call(t.childNodes).forEach(i=>{i.nodeType===o.Node.TEXT_NODE?h(i,t):(-1!==i.className.baseVal.indexOf("highcharts-br")&&(e.actualWidth=0),l(i))})};l(e.element)}getLineHeight(t){let e=t.nodeType===o.Node.TEXT_NODE?t.parentElement:t;return this.textLineHeight?parseInt(this.textLineHeight.toString(),10):this.renderer.fontMetrics(e||this.svgElement.element).h}modifyTree(t){let e=(i,s)=>{let{attributes:r={},children:o,style:a={},tagName:h}=i,l=this.renderer.styledMode;if("b"===h||"strong"===h?l?r.class="highcharts-strong":a.fontWeight="bold":("i"===h||"em"===h)&&(l?r.class="highcharts-emphasized":a.fontStyle="italic"),a&&a.color&&(a.fill=a.color),"br"===h){r.class="highcharts-br",i.textContent="â";let e=t[s+1];e&&e.textContent&&(e.textContent=e.textContent.replace(/^ +/gm,""))}else"a"===h&&o&&o.some(t=>"#text"===t.tagName)&&(i.children=[{children:o,tagName:"tspan"}]);"#text"!==h&&"a"!==h&&(i.tagName="tspan"),n(i,{attributes:r,style:a}),o&&o.filter(t=>"#text"!==t.tagName).forEach(e)};t.forEach(e),h(this.svgElement,"afterModifyTree",{nodes:t})}truncate(t,e,i,s,r,o){let a,n;let h=this.svgElement,{rotation:l}=h,d=[],c=i?1:0,p=(e||i||"").length,u=p,g=function(e,r){let o=r||e,a=t.parentNode;if(a&&void 0===d[o]&&a.getSubStringLength)try{d[o]=s+a.getSubStringLength(0,i?o+1:o)}catch(t){}return d[o]};if(h.rotation=0,s+(n=g(t.textContent.length))>r){for(;c<=p;)u=Math.ceil((c+p)/2),i&&(a=o(i,u)),n=g(u,a&&a.length-1),c===p?c=p+1:n>r?p=u-1:c=u;0===p?t.textContent="":e&&p===e.length-1||(t.textContent=a||o(e||i,u))}i&&i.splice(0,u),h.actualWidth=n,h.rotation=l}unescapeEntities(t,e){return d(this.renderer.escapes,function(i,s){e&&-1!==e.indexOf(i)||(t=t.toString().replace(RegExp(i,"g"),s))}),t}}}),i(e,"Core/Renderer/SVG/SVGRenderer.js",[e["Core/Renderer/HTML/AST.js"],e["Core/Defaults.js"],e["Core/Color/Color.js"],e["Core/Globals.js"],e["Core/Renderer/RendererRegistry.js"],e["Core/Renderer/SVG/SVGElement.js"],e["Core/Renderer/SVG/SVGLabel.js"],e["Core/Renderer/SVG/Symbols.js"],e["Core/Renderer/SVG/TextBuilder.js"],e["Core/Utilities.js"]],function(t,e,i,s,r,o,a,n,h,l){let d;let{defaultOptions:c}=e,{charts:p,deg2rad:u,doc:g,isFirefox:f,isMS:m,isWebKit:x,noop:y,SVG_NS:b,symbolSizes:v,win:S}=s,{addEvent:C,attr:k,createElement:M,crisp:w,css:A,defined:T,destroyObjectProperties:P,extend:L,isArray:O,isNumber:D,isObject:E,isString:I,merge:j,pick:B,pInt:R,replaceNested:z,uniqueKey:N}=l;class W{constructor(t,e,i,s,r,o,a){let n,h;let l=this.createElement("svg").attr({version:"1.1",class:"highcharts-root"}),d=l.element;a||l.css(this.getStyle(s||{})),t.appendChild(d),k(t,"dir","ltr"),-1===t.innerHTML.indexOf("xmlns")&&k(d,"xmlns",this.SVG_NS),this.box=d,this.boxWrapper=l,this.alignedObjects=[],this.url=this.getReferenceURL(),this.createElement("desc").add().element.appendChild(g.createTextNode("Created with Highcharts 11.4.3")),this.defs=this.createElement("defs").add(),this.allowHTML=o,this.forExport=r,this.styledMode=a,this.gradients={},this.cache={},this.cacheKeys=[],this.imgCount=0,this.rootFontSize=l.getStyle("font-size"),this.setSize(e,i,!1),f&&t.getBoundingClientRect&&((n=function(){A(t,{left:0,top:0}),h=t.getBoundingClientRect(),A(t,{left:Math.ceil(h.left)-h.left+"px",top:Math.ceil(h.top)-h.top+"px"})})(),this.unSubPixelFix=C(S,"resize",n))}definition(e){return new t([e]).addToDOM(this.defs.element)}getReferenceURL(){if((f||x)&&g.getElementsByTagName("base").length){if(!T(d)){let e=N(),i=new t([{tagName:"svg",attributes:{width:8,height:8},children:[{tagName:"defs",children:[{tagName:"clipPath",attributes:{id:e},children:[{tagName:"rect",attributes:{width:4,height:4}}]}]},{tagName:"rect",attributes:{id:"hitme",width:8,height:8,"clip-path":`url(#${e})`,fill:"rgba(0,0,0,0.001)"}}]}]).addToDOM(g.body);A(i,{position:"fixed",top:0,left:0,zIndex:9e5});let s=g.elementFromPoint(6,6);d="hitme"===(s&&s.id),g.body.removeChild(i)}if(d)return z(S.location.href.split("#")[0],[/<[^>]*>/g,""],[/([\('\)])/g,"\\$1"],[/ /g,"%20"])}return""}getStyle(t){return this.style=L({fontFamily:"Helvetica, Arial, sans-serif",fontSize:"1rem"},t),this.style}setStyle(t){this.boxWrapper.css(this.getStyle(t))}isHidden(){return!this.boxWrapper.getBBox().width}destroy(){let t=this.defs;return this.box=null,this.boxWrapper=this.boxWrapper.destroy(),P(this.gradients||{}),this.gradients=null,this.defs=t.destroy(),this.unSubPixelFix&&this.unSubPixelFix(),this.alignedObjects=null,null}createElement(t){return new this.Element(this,t)}getRadialAttr(t,e){return{cx:t[0]-t[2]/2+(e.cx||0)*t[2],cy:t[1]-t[2]/2+(e.cy||0)*t[2],r:(e.r||0)*t[2]}}shadowDefinition(t){let e=[`highcharts-drop-shadow-${this.chartIndex}`,...Object.keys(t).map(e=>`${e}-${t[e]}
23499`)].join("-").toLowerCase().replace(/[^a-z0-9\-]/g,""),i=j({color:"#000000",offsetX:1,offsetY:1,opacity:.15,width:5},t);return this.defs.element.querySelector(`#${e}`)||this.definition({tagName:"filter",attributes:{id:e,filterUnits:i.filterUnits},children:[{tagName:"feDropShadow",attributes:{dx:i.offsetX,dy:i.offsetY,"flood-color":i.color,"flood-opacity":Math.min(5*i.opacity,1),stdDeviation:i.width/2}}]}),e}buildText(t){new h(t).buildSVG()}getContrast(t){let e=i.parse(t).rgba.map(t=>{let e=t/255;return e<=.03928?e/12.92:Math.pow((e+.055)/1.055,2.4)}),s=.2126*e[0]+.7152*e[1]+.0722*e[2];return 1.05/(s+.05)>(s+.05)/.05?"#FFFFFF":"#000000"}button(e,i,s,r,o={},a,n,h,l,d){let p=this.label(e,i,s,l,void 0,void 0,d,void 0,"button"),u=this.styledMode,g=arguments,f=0;o=j(c.global.buttonTheme,o),u&&(delete o.fill,delete o.stroke,delete o["stroke-width"]);let x=o.states||{},y=o.style||{};delete o.states,delete o.style;let b=[t.filterUserAttributes(o)],v=[y];return u||["hover","select","disabled"].forEach((e,i)=>{b.push(j(b[0],t.filterUserAttributes(g[i+5]||x[e]||{}))),v.push(b[i+1].style),delete b[i+1].style}),C(p.element,m?"mouseover":"mouseenter",function(){3!==f&&p.setState(1)}),C(p.element,m?"mouseout":"mouseleave",function(){3!==f&&p.setState(f)}),p.setState=(t=0)=>{if(1!==t&&(p.state=f=t),p.removeClass(/highcharts-button-(normal|hover|pressed|disabled)/).addClass("highcharts-button-"+["normal","hover","pressed","disabled"][t]),!u){p.attr(b[t]);let e=v[t];E(e)&&p.css(e)}},p.attr(b[0]),!u&&(p.css(L({cursor:"default"},y)),d&&p.text.css({pointerEvents:"none"})),p.on("touchstart",t=>t.stopPropagation()).on("click",function(t){3!==f&&r.call(p,t)})}crispLine(t,e){let[i,s]=t;return T(i[1])&&i[1]===s[1]&&(i[1]=s[1]=w(i[1],e)),T(i[2])&&i[2]===s[2]&&(i[2]=s[2]=w(i[2],e)),t}path(t){let e=this.styledMode?{}:{fill:"none"};return O(t)?e.d=t:E(t)&&L(e,t),this.createElement("path").attr(e)}circle(t,e,i){let s=E(t)?t:void 0===t?{}:{x:t,y:e,r:i},r=this.createElement("circle");return r.xSetter=r.ySetter=function(t,e,i){i.setAttribute("c"+e,t)},r.attr(s)}arc(t,e,i,s,r,o){let a;E(t)?(e=(a=t).y,i=a.r,s=a.innerR,r=a.start,o=a.end,t=a.x):a={innerR:s,start:r,end:o};let n=this.symbol("arc",t,e,i,i,a);return n.r=i,n}rect(t,e,i,s,r,o){let a=E(t)?t:void 0===t?{}:{x:t,y:e,r,width:Math.max(i||0,0),height:Math.max(s||0,0)},n=this.createElement("rect");return this.styledMode||(void 0!==o&&(a["stroke-width"]=o,L(a,n.crisp(a))),a.fill="none"),n.rSetter=function(t,e,i){n.r=t,k(i,{rx:t,ry:t})},n.rGetter=function(){return n.r||0},n.attr(a)}roundedRect(t){return this.symbol("roundedRect").attr(t)}setSize(t,e,i){this.width=t,this.height=e,this.boxWrapper.animate({width:t,height:e},{step:function(){this.attr({viewBox:"0 0 "+this.attr("width")+" "+this.attr("height")})},duration:B(i,!0)?void 0:0}),this.alignElements()}g(t){let e=this.createElement("g");return t?e.attr({class:"highcharts-"+t}):e}image(t,e,i,s,r,o){let a={preserveAspectRatio:"none"};D(e)&&(a.x=e),D(i)&&(a.y=i),D(s)&&(a.width=s),D(r)&&(a.height=r);let n=this.createElement("image").attr(a),h=function(e){n.attr({href:t}),o.call(n,e)};if(o){n.attr({href:"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="});let e=new S.Image;C(e,"load",h),e.src=t,e.complete&&h({})}else n.attr({href:t});return n}symbol(t,e,i,s,r,o){let a,n,h,l;let d=this,c=/^url\((.*?)\)$/,u=c.test(t),f=!u&&(this.symbols[t]?t:"circle"),m=f&&this.symbols[f];if(m)"number"==typeof e&&(n=m.call(this.symbols,e||0,i||0,s||0,r||0,o)),a=this.path(n),d.styledMode||a.attr("fill","none"),L(a,{symbolName:f||void 0,x:e,y:i,width:s,height:r}),o&&L(a,o);else if(u){h=t.match(c)[1];let s=a=this.image(h);s.imgwidth=B(o&&o.width,v[h]&&v[h].width),s.imgheight=B(o&&o.height,v[h]&&v[h].height),l=t=>t.attr({width:t.width,height:t.height}),["width","height"].forEach(t=>{s[`${t}Setter`]=function(t,e){this[e]=t;let{alignByTranslate:i,element:s,width:r,height:a,imgwidth:n,imgheight:h}=this,l="width"===e?n:h,d=1;o&&"within"===o.backgroundSize&&r&&a&&n&&h?(d=Math.min(r/n,a/h),k(s,{width:Math.round(n*d),height:Math.round(h*d)})):s&&l&&s.setAttribute(e,l),!i&&n&&h&&this.translate(((r||0)-n*d)/2,((a||0)-h*d)/2)}}),T(e)&&s.attr({x:e,y:i}),s.isImg=!0,T(s.imgwidth)&&T(s.imgheight)?l(s):(s.attr({width:0,height:0}),M("img",{onload:function(){let t=p[d.chartIndex];0===this.width&&(A(this,{position:"absolute",top:"-999em"}),g.body.appendChild(this)),v[h]={width:this.width,height:this.height},s.imgwidth=this.width,s.imgheight=this.height,s.element&&l(s),this.parentNode&&this.parentNode.removeChild(this),d.imgCount--,d.imgCount||!t||t.hasLoaded||t.onload()},src:h}),this.imgCount++)}return a}clipRect(t,e,i,s){return this.rect(t,e,i,s,0)}text(t,e,i,s){let r={};if(s&&(this.allowHTML||!this.forExport))return this.html(t,e,i);r.x=Math.round(e||0),i&&(r.y=Math.round(i)),T(t)&&(r.text=t);let o=this.createElement("text").attr(r);return s&&(!this.forExport||this.allowHTML)||(o.xSetter=function(t,e,
23499i){let s=i.getElementsByTagName("tspan"),r=i.getAttribute(e);for(let i=0,o;i<s.length;i++)(o=s[i]).getAttribute(e)===r&&o.setAttribute(e,t);i.setAttribute(e,t)}),o}fontMetrics(t){let e=R(o.prototype.getStyle.call(t,"font-size")||0),i=e<24?e+3:Math.round(1.2*e),s=Math.round(.8*i);return{h:i,b:s,f:e}}rotCorr(t,e,i){let s=t;return e&&i&&(s=Math.max(s*Math.cos(e*u),4)),{x:-t/3*Math.sin(e*u),y:s}}pathToSegments(t){let e=[],i=[],s={A:8,C:7,H:2,L:3,M:3,Q:5,S:5,T:3,V:2};for(let r=0;r<t.length;r++)I(i[0])&&D(t[r])&&i.length===s[i[0].toUpperCase()]&&t.splice(r,0,i[0].replace("M","L").replace("m","l")),"string"==typeof t[r]&&(i.length&&e.push(i.slice(0)),i.length=0),i.push(t[r]);return e.push(i.slice(0)),e}label(t,e,i,s,r,o,n,h,l){return new a(this,t,e,i,s,r,o,n,h,l)}alignElements(){this.alignedObjects.forEach(t=>t.align())}}return L(W.prototype,{Element:o,SVG_NS:b,escapes:{"&":"&","<":"<",">":">","'":"'",'"':"""},symbols:n,draw:y}),r.registerRendererType("svg",W,!0),W}),i(e,"Core/Renderer/HTML/HTMLElement.js",[e["Core/Renderer/HTML/AST.js"],e["Core/Globals.js"],e["Core/Renderer/SVG/SVGElement.js"],e["Core/Utilities.js"]],function(t,e,i,s){let{composed:r}=e,{attr:o,css:a,createElement:n,defined:h,extend:l,pInt:d,pushUnique:c}=s;function p(t,e,s){let r=this.div?.style||s.style;i.prototype[`${e}Setter`].call(this,t,e,s),r&&(r[e]=t)}let u=(t,e)=>{if(!t.div){let s=o(t.element,"class"),r=t.css,a=n("div",s?{className:s}:void 0,{position:"absolute",left:`${t.translateX||0}px`,top:`${t.translateY||0}px`,...t.styles,display:t.display,opacity:t.opacity,visibility:t.visibility},t.parentGroup?.div||e);t.classSetter=(t,e,i)=>{i.setAttribute("class",t),a.className=t},t.translateXSetter=t.translateYSetter=(e,i)=>{t[i]=e,a.style["translateX"===i?"left":"top"]=`${e}px`,t.doTransform=!0},t.opacitySetter=t.visibilitySetter=p,t.css=e=>(r.call(t,e),e.cursor&&(a.style.cursor=e.cursor),e.pointerEvents&&(a.style.pointerEvents=e.pointerEvents),t),t.on=function(){return i.prototype.on.apply({element:a,onEvents:t.onEvents},arguments),t},t.div=a}return t.div};class g extends i{static compose(t){c(r,this.compose)&&(t.prototype.html=function(t,e,i){return new g(this,"span").attr({text:t,x:Math.round(e),y:Math.round(i)})})}constructor(t,e){super(t,e),this.css({position:"absolute",...t.styledMode?{}:{fontFamily:t.style.fontFamily,fontSize:t.style.fontSize}}),this.element.style.whiteSpace="nowrap"}getSpanCorrection(t,e,i){this.xCorr=-t*i,this.yCorr=-e}css(t){let e;let{element:i}=this,s="SPAN"===i.tagName&&t&&"width"in t,r=s&&t.width;return s&&(delete t.width,this.textWidth=d(r)||void 0,e=!0),t?.textOverflow==="ellipsis"&&(t.whiteSpace="nowrap",t.overflow="hidden"),l(this.styles,t),a(i,t),e&&this.updateTransform(),this}htmlGetBBox(){let{element:t}=this;return{x:t.offsetLeft,y:t.offsetTop,width:t.offsetWidth,height:t.offsetHeight}}updateTransform(){if(!this.added){this.alignOnAdd=!0;return}let{element:t,renderer:e,rotation:i,rotationOriginX:s,rotationOriginY:r,styles:o,textAlign:n="left",textWidth:l,translateX:d=0,translateY:c=0,x:p=0,y:u=0}=this,g=o.whiteSpace;if(a(t,{marginLeft:`${d}px`,marginTop:`${c}px`}),"SPAN"===t.tagName){let o=[i,n,t.innerHTML,l,this.textAlign].join(","),d=-(this.parentGroup?.padding*1)||0,c,f=!1;if(l!==this.oldTextWidth){let e=this.textPxLength?this.textPxLength:(a(t,{width:"",whiteSpace:g||"nowrap"}),t.offsetWidth),s=l||0;(s>this.oldTextWidth||e>s)&&(/[ \-]/.test(t.textContent||t.innerText)||"ellipsis"===t.style.textOverflow)&&(a(t,{width:e>s||i?l+"px":"auto",display:"block",whiteSpace:g||"normal"}),this.oldTextWidth=l,f=!0)}this.hasBoxWidthChanged=f,o!==this.cTT&&(c=e.fontMetrics(t).b,h(i)&&(i!==(this.oldRotation||0)||n!==this.oldAlign)&&this.setSpanRotation(i,d,d),this.get
23499SpanCorrection(!h(i)&&this.textPxLength||t.offsetWidth,c,{left:0,center:.5,right:1}[n]));let{xCorr:m=0,yCorr:x=0}=this,y=(s??p)-m-p-d,b=(r??u)-x-u-d;a(t,{left:`${p+m}px`,top:`${u+x}px`,transformOrigin:`${y}px ${b}px`}),this.cTT=o,this.oldRotation=i,this.oldAlign=n}}setSpanRotation(t,e,i){a(this.element,{transform:`rotate(${t}deg)`,transformOrigin:`${e}% ${i}px`})}add(t){let e;let i=this.renderer.box.parentNode,s=[];if(this.parentGroup=t,t&&!(e=t.div)){let r=t;for(;r;)s.push(r),r=r.parentGroup;for(let t of s.reverse())e=u(t,i)}return(e||i).appendChild(this.element),this.added=!0,this.alignOnAdd&&this.updateTransform(),this}textSetter(e){e!==this.textStr&&(delete this.bBox,delete this.oldTextWidth,t.setElementHTML(this.element,e??""),this.textStr=e,this.doTransform=!0)}alignSetter(t){this.alignValue=this.textAlign=t,this.doTransform=!0}xSetter(t,e){this[e]=t,this.doTransform=!0}}let f=g.prototype;return f.visibilitySetter=f.opacitySetter=p,f.ySetter=f.rotationSetter=f.rotationOriginXSetter=f.rotationOriginYSetter=f.xSetter,g}),i(e,"Core/Axis/AxisDefaults.js",[],function(){var t,e;return(e=t||(t={})).xAxis={alignTicks:!0,allowDecimals:void 0,panningEnabled:!0,zIndex:2,zoomEnabled:!0,dateTimeLabelFormats:{millisecond:{main:"%H:%M:%S.%L",range:!1},second:{main:"%H:%M:%S",range:!1},minute:{main:"%H:%M",range:!1},hour:{main:"%H:%M",range:!1},day:{main:"%e %b"},week:{main:"%e %b"},month:{main:"%b '%y"},year:{main:"%Y"}},endOnTick:!1,gridLineDashStyle:"Solid",gridZIndex:1,labels:{autoRotationLimit:80,distance:15,enabled:!0,indentation:10,overflow:"justify",reserveSpace:void 0,rotation:void 0,staggerLines:0,step:0,useHTML:!1,zIndex:7,style:{color:"#333333",cursor:"default",fontSize:"0.8em"}},maxPadding:.01,minorGridLineDashStyle:"Solid",minorTickLength:2,minorTickPosition:"outside",minorTicksPerMajor:5,minPadding:.01,offset:void 0,reversed:void 0,reversedStacks:!1,showEmpty:!0,showFirstLabel:!0,showLastLabel:!0,startOfWeek:1,startOnTick:!1,tickLength:10,tickPixelInterval:100,tickmarkPlacement:"between",tickPosition:"outside",title:{align:"middle",useHTML:!1,x:0,y:0,style:{color:"#666666",fontSize:"0.8em"}},type:"linear",uniqueNames:!0,visible:!0,minorGridLineColor:"#f2f2f2",minorGridLineWidth:1,minorTickColor:"#999999",lineColor:"#333333",lineWidth:1,gridLineColor:"#e6e6e6",gridLineWidth:void 0,tickColor:"#333333"},e.yAxis={reversedStacks:!0,endOnTick:!0,maxPadding:.05,minPadding:.05,tickPixelInterval:72,showLastLabel:!0,labels:{x:void 0},startOnTick:!0,title:{text:"Values"},stackLabels:{animation:{},allowOverlap:!1,enabled:!1,crop:!0,overflow:"justify",formatter:function(){let{numberFormatter:t}=this.axis.chart;return t(this.total||0,-1)},style:{color:"#000000",fontSize:"0.7em",fontWeight:"bold",textOutline:"1px contrast"}},gridLineWidth:1,lineWidth:0},t}),i(e,"Core/Foundation.js",[e["Core/Utilities.js"]],function(t){var e;let{addEvent:i,isFunction:s,objectEach:r,removeEvent:o}=t;return(e||(e={})).registerEventOptions=function(t,e){t.eventOptions=t.eventOptions||{},r(e.events,function(e,r){t.eventOptions[r]!==e&&(t.eventOptions[r]&&(o(t,r,t.eventOptions[r]),delete t.eventOptions[r]),s(e)&&(t.eventOptions[r]=e,i(t,r,e,{order:0})))})},e}),i(e,"Core/Axis/Tick.js",[e["Core/Templating.js"],e["Core/Globals.js"],e["Core/Utilities.js"]],function(t,e,i){let{deg2rad:s}=e,{clamp:r,correctFloat:o,defined:a,destroyObjectProperties:n,extend:h,fireEvent:l,isNumber:d,merge:c,objectEach:p,pick:u}=i;return class{constructor(t,e,i,s,r){this.isNew=!0,this.isNewLabel=!0,this.axis=t,this.pos=e,this.type=i||"",this.parameters=r||{},this.tickmarkOffset=this.parameters.tickmarkOffset,this.options=this.parameters.options,l(this,"init"),i||s||this.addLabel()}addLabel(){let e=this,i=e.axis,s=i.options,r=i.chart,n=i.categories,c=i.logarithmic,p=i.names,g=e.pos,f=u(e.options&&e.options.labels,s.labels),m=i.tickPositions,x=g===m[0],y=g===m[m.length-1],b=(!f.step||1===f.step)&&1===i.tickInterval,v=m.info,S=e.label,C,k,M,w=this.parameters.category||(n?u(n[g],p[g],g):g);c&&d(w)&&(w=o(c.lin2log(w))),i.dateTime&&(v?C=(k=r.time.resolveDTLFormat(s.dateTimeLabelFormats[!s.grid&&v.higherRanks[g]||v.unitName])).main:d(w)&&(C=i.dateTime.getXDateFormat(w,s.dateTimeLabelFormats||{}))),e.isFirst=x,e.isLast=y;let A={axis:i,chart:r,dateTimeLabelFormat:C,isFirst:x,isLast:y,pos:g,tick:e,tickPositionInfo:v,value:w};l(this,"labelFormat",A);let T=e=>f.formatter?f.formatter.call(e,e):f.format?(e.text=i.defaultLabelFormatter.call(e),t.format(f.format,e,r)):i.defaultLabelFormatter.call(e),P=T.call(A,A),L=k&&k.list;L?e.shortenLabel=function(){for(M=0;M<L.length;M++)if(h(A,{dateTimeLabelFormat:L[M]}),S.attr({text:T.call(A,A)}),S.getBBox().width<i.getSlotWidth(e)-2*(f.padding||0))return;S.attr({text:""})}:e.shortenLabel=void 0,b&&i._addedPlotLB&&e.moveLabel(P,f),a(S)||e.movedLabel?S&&S.textStr!==P&&!b&&(!S.textWidth||f.style.width||S.styles.width||S.css({width:null}),S.attr({text:P}),S.textPxLength=S.getBBox().width):(e.label=S=e.createLabel(P,f),e.rotation=0)}createLabel(t,e,i){let s=this.axis,r=s.chart,o=a(t)&&e.enabled?r.renderer.text(t,i?.x,i?.y,e.useHTML).add(s.labelGroup):void 0;return o&&(r.styledMode||o.css(c(e.style)),o.textPxLength=o.getBBox().width),o}destroy(){n(this,this.axis)}
23499getPosition(t,e,i,s){let a=this.axis,n=a.chart,h=s&&n.oldChartHeight||n.chartHeight,d={x:t?o(a.translate(e+i,void 0,void 0,s)+a.transB):a.left+a.offset+(a.opposite?(s&&n.oldChartWidth||n.chartWidth)-a.right-a.left:0),y:t?h-a.bottom+a.offset-(a.opposite?a.height:0):o(h-a.translate(e+i,void 0,void 0,s)-a.transB)};return d.y=r(d.y,-1e5,1e5),l(this,"afterGetPosition",{pos:d}),d}getLabelPosition(t,e,i,r,o,n,h,d){let c,p;let g=this.axis,f=g.transA,m=g.isLinked&&g.linkedParent?g.linkedParent.reversed:g.reversed,x=g.staggerLines,y=g.tickRotCorr||{x:0,y:0},b=r||g.reserveSpaceDefault?0:-g.labelOffset*("center"===g.labelAlign?.5:1),v=o.distance,S={};return c=0===g.side?i.rotation?-v:-i.getBBox().height:2===g.side?y.y+v:Math.cos(i.rotation*s)*(y.y-i.getBBox(!1,0).height/2),a(o.y)&&(c=0===g.side&&g.horiz?o.y+c:o.y),t=t+u(o.x,[0,1,0,-1][g.side]*v)+b+y.x-(n&&r?n*f*(m?-1:1):0),e=e+c-(n&&!r?n*f*(m?1:-1):0),x&&(p=h/(d||1)%x,g.opposite&&(p=x-p-1),e+=g.labelOffset/x*p),S.x=t,S.y=Math.round(e),l(this,"afterGetLabelPosition",{pos:S,tickmarkOffset:n,index:h}),S}getLabelSize(){return this.label?this.label.getBBox()[this.axis.horiz?"height":"width"]:0}getMarkPath(t,e,i,s,r=!1,o){return o.crispLine([["M",t,e],["L",t+(r?0:-i),e+(r?i:0)]],s)}handleOverflow(t){let e=this.axis,i=e.options.labels,r=t.x,o=e.chart.chartWidth,a=e.chart.spacing,n=u(e.labelLeft,Math.min(e.pos,a[3])),h=u(e.labelRight,Math.max(e.isRadial?0:e.pos+e.len,o-a[1])),l=this.label,d=this.rotation,c={left:0,center:.5,right:1}[e.labelAlign||l.attr("align")],p=l.getBBox().width,g=e.getSlotWidth(this),f={},m=g,x=1,y,b,v;d||"justify"!==i.overflow?d<0&&r-c*p<n?v=Math.round(r/Math.cos(d*s)-n):d>0&&r+c*p>h&&(v=Math.round((o-r)/Math.cos(d*s))):(y=r-c*p,b=r+(1-c)*p,y<n?m=t.x+m*(1-c)-n:b>h&&(m=h-t.x+m*c,x=-1),(m=Math.min(g,m))<g&&"center"===e.labelAlign&&(t.x+=x*(g-m-c*(g-Math.min(p,m)))),(p>m||e.autoRotation&&(l.styles||{}).width)&&(v=m)),v&&(this.shortenLabel?this.shortenLabel():(f.width=Math.floor(v)+"px",(i.style||{}).textOverflow||(f.textOverflow="ellipsis"),l.css(f)))}moveLabel(t,e){let i=this,s=i.label,r=i.axis,o=!1,a;s&&s.textStr===t?(i.movedLabel=s,o=!0,delete i.label):p(r.ticks,function(e){o||e.isNew||e===i||!e.label||e.label.textStr!==t||(i.movedLabel=e.label,o=!0,e.labelPos=i.movedLabel.xy,delete e.label)}),!o&&(i.labelPos||s)&&(a=i.labelPos||s.xy,i.movedLabel=i.createLabel(t,e,a),i.movedLabel&&i.movedLabel.attr({opacity:0}))}render(t,e,i){let s=this.axis,r=s.horiz,a=this.pos,n=u(this.tickmarkOffset,s.tickmarkOffset),h=this.getPosition(r,a,n,e),d=h.x,c=h.y,p=s.pos,g=p+s.len,f=r?d:c;!s.chart.polar&&this.isNew&&(o(f)<p||f>g)&&(i=0);let m=u(i,this.label&&this.label.newOpacity,1);i=u(i,1),this.isActive=!0,this.renderGridLine(e,i),this.renderMark(h,i),this.renderLabel(h,e,m,t),this.isNew=!1,l(this,"afterRender")}renderGridLine(t,e){let i=this.axis,s=i.options,r={},o=this.pos,a=this.type,n=u(this.tickmarkOffset,i.tickmarkOffset),h=i.chart.renderer,l=this.gridLine,d,c=s.gridLineWidth,p=s.gridLineColor,g=s.gridLineDashStyle;"minor"===this.type&&(c=s.minorGridLineWidth,p=s.minorGridLineColor,g=s.minorGridLineDashStyle),l||(i.chart.styledMode||(r.stroke=p,r["stroke-width"]=c||0,r.dashstyle=g),a||(r.zIndex=1),t&&(e=0),this.gridLine=l=h.path().attr(r).addClass("highcharts-"+(a?a+"-":"")+"grid-line").add(i.gridGroup)),l&&(d=i.getPlotLinePath({value:o+n,lineWidth:l.strokeWidth(),force:"pass",old:t,acrossPanes:!1}))&&l[t||this.isNew?"attr":"animate"]({d:d,opacity:e})}renderMark(t,e){let i=this.axis,s=i.options,r=i.chart.renderer,o=this.type,a=i.tickSize(o?o+"Tick":"tick"),n=t.x,h=t.y,l=u(s["minor"!==o?"tickWidth":"minorTickWidth"],!o&&i.isXAxis?1:0),d=s["minor"!==o?"tickColor":"minorTickColor"],c=this.mark,p=!c;a&&(i.opposite&&(a[0]=-a[0]),c||(this.mark=c=r.path().addClass("highcharts-"+(o?o+"-":"")+"tick").add(i.axisGroup),i.chart.styledMode||c.attr({stroke:d,"stroke-width":l})),c[p?"attr":"animate"]({d:this.getMarkPath(n,h,a[0],c.strokeWidth(),i.horiz,r),opacity:e}))}renderLabel(t,e,i,s){let r=this.axis,o=r.horiz,a=r.options,n=this.label,h=a.labels,l=h.step,c=u(this.tickmarkOffset,r.tickmarkOffset),p=t.x,g=t.y,f=!0;n&&d(p)&&(n.xy=t=this.getLabelPosition(p,g,n,o,h,c,s,l),(!this.isFirst||this.isLast||a.showFirstLabel)&&(!this.isLast||this.isFirst||a.showLastLabel)?!o||h.step||h.rotation||e||0===i||this.handleOverflow(t):f=!1,l&&s%l&&(f=!1),f&&d(t.y)?(t.opacity=i,n[this.isNewLabel?"attr":"animate"](t).show(!0),this.isNewLabel=!1):(n.hide(),this.isNewLabel=!0))}replaceMovedLabel(){let t=this.label,e=this.axis;t&&!this.isNew&&(t.animate({opacity:0}
23499,void 0,t.destroy),delete this.label),e.isDirty=!0,this.label=this.movedLabel,delete this.movedLabel}}}),i(e,"Core/Axis/Axis.js",[e["Core/Animation/AnimationUtilities.js"],e["Core/Axis/AxisDefaults.js"],e["Core/Color/Color.js"],e["Core/Defaults.js"],e["Core/Foundation.js"],e["Core/Globals.js"],e["Core/Axis/Tick.js"],e["Core/Utilities.js"]],function(t,e,i,s,r,o,a,n){let{animObject:h}=t,{xAxis:l,yAxis:d}=e,{defaultOptions:c}=s,{registerEventOptions:p}=r,{deg2rad:u}=o,{arrayMax:g,arrayMin:f,clamp:m,correctFloat:x,defined:y,destroyObjectProperties:b,erase:v,error:S,extend:C,fireEvent:k,getClosestDistance:M,insertItem:w,isArray:A,isNumber:T,isString:P,merge:L,normalizeTickInterval:O,objectEach:D,pick:E,relativeLength:I,removeEvent:j,splat:B,syncTimeout:R}=n,z=(t,e)=>O(e,void 0,void 0,E(t.options.allowDecimals,e<.5||void 0!==t.tickAmount),!!t.tickAmount);C(c,{xAxis:l,yAxis:L(l,d)});class N{constructor(t,e,i){this.init(t,e,i)}init(t,e,i=this.coll){let s="xAxis"===i,r=this.isZAxis||(t.inverted?!s:s);this.chart=t,this.horiz=r,this.isXAxis=s,this.coll=i,k(this,"init",{userOptions:e}),this.opposite=E(e.opposite,this.opposite),this.side=E(e.side,this.side,r?this.opposite?0:2:this.opposite?1:3),this.setOptions(e);let o=this.options,a=o.labels,n=o.type;this.userOptions=e,this.minPixelPadding=0,this.reversed=E(o.reversed,this.reversed),this.visible=o.visible,this.zoomEnabled=o.zoomEnabled,this.hasNames="category"===n||!0===o.categories,this.categories=A(o.categories)&&o.categories||(this.hasNames?[]:void 0),this.names||(this.names=[],this.names.keys={}),this.plotLinesAndBandsGroups={},this.positiveValuesOnly=!!this.logarithmic,this.isLinked=y(o.linkedTo),this.ticks={},this.labelEdge=[],this.minorTicks={},this.plotLinesAndBands=[],this.alternateBands={},this.len??(this.len=0),this.minRange=this.userMinRange=o.minRange||o.maxZoom,this.range=o.range,this.offset=o.offset||0,this.max=void 0,this.min=void 0;let h=E(o.crosshair,B(t.options.tooltip.crosshairs)[s?0:1]);this.crosshair=!0===h?{}:h,-1===t.axes.indexOf(this)&&(s?t.axes.splice(t.xAxis.length,0,this):t.axes.push(this),w(this,t[this.coll])),t.orderItems(this.coll),this.series=this.series||[],t.inverted&&!this.isZAxis&&s&&!y(this.reversed)&&(this.reversed=!0),this.labelRotation=T(a.rotation)?a.rotation:void 0,p(this,o),k(this,"afterInit")}setOptions(t){let e=this.horiz?{labels:{autoRotation:[-45],padding:4},margin:15}:{labels:{padding:1},title:{rotation:90*this.side}};this.options=L(e,c[this.coll],t),k(this,"afterSetOptions",{userOptions:t})}defaultLabelFormatter(){let t=this.axis,{numberFormatter:e}=this.chart,i=T(this.value)?this.value:NaN,s=t.chart.time,r=t.categories,o=this.dateTimeLabelFormat,a=c.lang,n=a.numericSymbols,h=a.numericSymbolMagnitude||1e3,l=t.logarithmic?Math.abs(i):t.tickInterval,d=n&&n.length,p,u;if(r)u=`${this.value}`;else if(o)u=s.dateFormat(o,i);else if(d&&n&&l>=1e3)for(;d--&&void 0===u;)l>=(p=Math.pow(h,d+1))&&10*i%p==0&&null!==n[d]&&0!==i&&(u=e(i/p,-1)+n[d]);return void 0===u&&(u=Math.abs(i)>=1e4?e(i,-1):e(i,-1,void 0,"")),u}getSeriesExtremes(){let t;let e=this;k(this,"getSeriesExtremes",null,function(){e.hasVisibleSeries=!1,e.dataMin=e.dataMax=e.threshold=void 0,e.softThreshold=!e.isXAxis,e.series.forEach(i=>{if(i.reserveSpace()){let s=i.options,r,o=s.threshold,a,n;if(e.hasVisibleSeries=!0,e.positiveValuesOnly&&0>=(o||0)&&(o=void 0),e.isXAxis)(r=i.xData)&&r.length&&(r=e.logarithmic?r.filter(t=>t>0):r,a=(t=i.getXExtremes(r)).min,n=t.max,T(a)||a instanceof Date||(r=r.filter(T),a=(t=i.getXExtremes(r)).min,n=t.max),r.length&&(e.dataMin=Math.min(E(e.dataMin,a),a),e.dataMax=Math.max(E(e.dataMax,n),n)));else{let t=i.applyExtremes();T(t.dataMin)&&(a=t.dataMin,e.dataMin=Math.min(E(e.dataMin,a),a)),T(t.dataMax)&&(n=t.dataMax,e.dataMax=Math.max(E(e.dataMax,n),n)),y(o)&&(e.threshold=o),(!s.softThreshold||e.positiveValuesOnly)&&(e.softThreshold=!1)}}})}),k(this,"afterGetSeriesExtremes")}translate(t,e,i,s,r,o){let a=this.linkedParent||this,n=s&&a.old?a.old.min:a.min;if(!T(n))return NaN;let h=a.minPixelPadding,l=(a.isOrdinal||a.brokenAxis?.hasBreaks||a.logarithmic&&r)&&a.lin2val,d=1,c=0,p=s&&a.old?a.old.transA:a.transA,u=0;return p||(p=a.transA),i&&(d*=-1,c=a.len),a.reversed&&(d*=-1,c-=d*(a.sector||a.len)),e?(u=(t=t*d+c-h)/p+n,l&&(u=a.lin2val(u))):(l&&(t=a.val2lin(t)),u=d*(t-n)*p+c+d*h+(T(o)?p*o:0),a.isRadial||(u=x(u))),u}toPixels(t,e){return this.translate(t,!1,!this.horiz,void 0,!0)+(e?0:this.pos)}toValue(t,e){return this.translate(t-(e?0:this.pos),!0,!this.horiz,void 0,!0)}getPlotLinePath(t){let e=this,i=e.chart,s=e.left,r=e.top,o=t.old,a=t.value,n=t.lineWidth,h=o&&i.oldCh
23499artHeight||i.chartHeight,l=o&&i.oldChartWidth||i.chartWidth,d=e.transB,c=t.translatedValue,p=t.force,u,g,f,x,y;function b(t,e,i){return"pass"!==p&&(t<e||t>i)&&(p?t=m(t,e,i):y=!0),t}let v={value:a,lineWidth:n,old:o,force:p,acrossPanes:t.acrossPanes,translatedValue:c};return k(this,"getPlotLinePath",v,function(t){u=f=(c=m(c=E(c,e.translate(a,void 0,void 0,o)),-1e5,1e5))+d,g=x=h-c-d,T(c)?e.horiz?(g=r,x=h-e.bottom+(i.scrollablePixelsY||0),u=f=b(u,s,s+e.width)):(u=s,f=l-e.right+(i.scrollablePixelsX||0),g=x=b(g,r,r+e.height)):(y=!0,p=!1),t.path=y&&!p?void 0:i.renderer.crispLine([["M",u,g],["L",f,x]],n||1)}),v.path}getLinearTickPositions(t,e,i){let s,r,o;let a=x(Math.floor(e/t)*t),n=x(Math.ceil(i/t)*t),h=[];if(x(a+t)===a&&(o=20),this.single)return[e];for(s=a;s<=n&&(h.push(s),(s=x(s+t,o))!==r);)r=s;return h}getMinorTickInterval(){let{minorTicks:t,minorTickInterval:e}=this.options;return!0===t?E(e,"auto"):!1!==t?e:void 0}getMinorTickPositions(){let t=this.options,e=this.tickPositions,i=this.minorTickInterval,s=this.pointRangePadding||0,r=(this.min||0)-s,o=(this.max||0)+s,a=o-r,n=[],h;if(a&&a/i<this.len/3){let s=this.logarithmic;if(s)this.paddedTicks.forEach(function(t,e,r){e&&n.push.apply(n,s.getLogTickPositions(i,r[e-1],r[e],!0))});else if(this.dateTime&&"auto"===this.getMinorTickInterval())n=n.concat(this.getTimeTicks(this.dateTime.normalizeTimeTickInterval(i),r,o,t.startOfWeek));else for(h=r+(e[0]-r)%i;h<=o&&h!==n[0];h+=i)n.push(h)}return 0!==n.length&&this.trimTicks(n),n}adjustForMinRange(){let t=this.options,e=this.logarithmic,{max:i,min:s,minRange:r}=this,o,a,n,h;this.isXAxis&&void 0===r&&!e&&(r=y(t.min)||y(t.max)||y(t.floor)||y(t.ceiling)?null:Math.min(5*(M(this.series.map(t=>(t.xIncrement?t.xData?.slice(0,2):t.xData)||[]))||0),this.dataMax-this.dataMin)),T(i)&&T(s)&&T(r)&&i-s<r&&(a=this.dataMax-this.dataMin>=r,o=(r-i+s)/2,n=[s-o,E(t.min,s-o)],a&&(n[2]=e?e.log2lin(this.dataMin):this.dataMin),h=[(s=g(n))+r,E(t.max,s+r)],a&&(h[2]=e?e.log2lin(this.dataMax):this.dataMax),(i=f(h))-s<r&&(n[0]=i-r,n[1]=E(t.min,i-r),s=g(n))),this.minRange=r,this.min=s,this.max=i}getClosest(){let t,e;if(this.categories)e=1;else{let i=[];this.series.forEach(function(t){let s=t.closestPointRange;t.xData?.length===1?i.push(t.xData[0]):!t.noSharedTooltip&&y(s)&&t.reserveSpace()&&(e=y(e)?Math.min(e,s):s)}),i.length&&(i.sort((t,e)=>t-e),t=M([i]))}return t&&e?Math.min(t,e):t||e}nameToX(t){let e=A(this.options.categories),i=e?this.categories:this.names,s=t.options.x,r;return t.series.requireSorting=!1,y(s)||(s=this.options.uniqueNames&&i?e?i.indexOf(t.name):E(i.keys[t.name],-1):t.series.autoIncrement()),-1===s?!e&&i&&(r=i.length):r=s,void 0!==r?(this.names[r]=t.name,this.names.keys[t.name]=r):t.x&&(r=t.x),r}updateNames(){let t=this,e=this.names;e.length>0&&(Object.keys(e.keys).forEach(function(t){delete e.keys[t]}),e.length=0,this.minRange=this.userMinRange,(this.series||[]).forEach(e=>{e.xIncrement=null,(!e.points||e.isDirtyData)&&(t.max=Math.max(t.max,e.xData.length-1),e.processData(),e.generatePoints()),e.data.forEach(function(i,s){let r;i?.options&&void 0!==i.name&&void 0!==(r=t.nameToX(i))&&r!==i.x&&(i.x=r,e.xData[s]=r)})}))}setAxisTranslation(){let t=this,e=t.max-t.min,i=t.linkedParent,s=!!t.categories,r=t.isXAxis,o=t.axisPointRange||0,a,n=0,h=0,l,d=t.transA;(r||s||o)&&(a=t.getClosest(),i?(n=i.minPointOffset,h=i.pointRangePadding):t.series.forEach(function(e){let i=s?1:r?E(e.options.pointRange,a,0):t.axisPointRange||0,l=e.options.pointPlacement;if(o=Math.max(o,i),!t.single||s){let t=e.is("xrange")?!r:r;n=Math.max(n,t&&P(l)?0:i/2),h=Math.max(h,t&&"on"===l?0:i)}}),l=t.ordinal&&t.ordinal.slope&&a?t.ordinal.slope/a:1,t.minPointOffset=n*=l,t.pointRangePadding=h*=l,t.pointRange=Math.min(o,t.single&&s?1:e),r&&a&&(t.closestPointRange=a)),t.translationSlope=t.transA=d=t.staticScale||t.len/(e+h||1),t.transB=t.horiz?t.left:t.bottom,t.minPixelPadding=d*n,k(this,"afterSetAxisTranslation")}minFromRange(){let{max:t,min:e}=this;return T(t)&&T(e)&&t-e||void 0}setTickInterval(t){let{categories:e,chart:i,dataMax:s,dataMin:r,dateTime:o,isXAxis:a,logarithmic:n,options:h,softThreshold:l}=this,d=T(this.threshold)?this.threshold:void 0,c=this.minRange||0,{ceiling:p,floor:u,linkedTo:g,softMax:f,softMin:m}=h,b=T(g)&&i[this.coll]?.[g],v=h.tickPixelInterval,C=h.maxPadding,M=h.minPadding,w=0,A,P=T(h.tickInterval)&&h.tickInterval>=0?h.tickInterval:void 0,L,O,D,I;if(o||e||b||this.getTickAmount(),D=E(this.userMin,h.min),I=E(this.userMax,h.max),b?(this.linkedParent=b,A=b.getExtremes(),this.min=E(A.min,A.dataMin),this.max=E(A.max,A.dataMax),h.type!==b.options.type&&S(11,!0,i)):(l&&y(d)&&T(s)&&T(r)&&(r>=d?(L=d,M=0):s<=d&&(O=d,C=0)),this.min=E(D,L,r),this.max=E(I,O,s)),T(this.max)&&T(this.min)&&(n&&(this.positiveValuesOnly&&!t&&0>=Math.min(this.min,E(r,this.min))&&S(10,!0,i),this.min=x(n.log2lin(this.min),16),this.max=x(n.log2lin(this.max),16)),this.range&&T(r)&&(this.userMin=this.min=D=Math.max(r,this.minFromRange()||0),this.userMax=I=this.max,this.range=void 0)),k(this,"foundExtremes"),this.adjustForMinRange(),T(this.min)&&T(this.max)){if(!T(this.userMin)&&T(m)&&m<this.min&&(this.min=D=m),!T(this.userMax)&&T(f)&&f>this.max&&(this.max=I=f),e||this.axisPointRange||this.stacking?.usePercentage||b||!(w=this.max-this.min)||(!y(D)&&M&&(this.min-=w*M),y(I)||!C||(this.max+=w*C)),!T(this.userMin)&&T(u)&&(this.min=Math.max(this.min,u)),!T(this.userMax)&&T(p)&&(this.max=Math.min(this.max,p)),l&&T(r)&&T(s)){let t=d||0;!y(D)&&this.min<t&&r>=t?this.min=h.minRange?Math.min(t,this.max-c):t:!y(I)&&this.max>t&&s<=t&&(this.max=h.minRange?Math.max(t,this.min+c):t)}!i.polar&&this.min>this.max&&(y(h.min)?this.max=this.min:y(h.max)&&(this.min=this.max)),w=this.max-this.min}if(this.min!==this.max&&T(this.min)&&T(this.max)?b&&!P&&v===b.options.tickPixelInterval?this.tickInterval=P=b.tickInterval:this.tickInterval=E(P,this.tickAmount?w/Math.max(this.tickAmount-1,1):void 0,e?1:w*v/Math.max(this.len,v)):this.tickInterval=1,a&&!t){let t=this.min!==this.old?.min||this.max!==this.old?.max;
vendor: 4,585 bytes, line 23499
23499this.series.forEach(function(e){e.forceCrop=e.forceCropping?.(),e.processData(t)}),k(this,"postProcessData",{hasExtremesChanged:t})}this.setAxisTranslation(),k(this,"initialAxisTranslation"),this.pointRange&&!P&&(this.tickInterval=Math.max(this.pointRange,this.tickInterval));let j=E(h.minTickInterval,o&&!this.series.some(t=>t.noSharedTooltip)?this.closestPointRange:0);!P&&this.tickInterval<j&&(this.tickInterval=j),o||n||P||(this.tickInterval=z(this,this.tickInterval)),this.tickAmount||(this.tickInterval=this.unsquish()),this.setTickPositions()}setTickPositions(){let t=this.options,e=t.tickPositions,i=t.tickPositioner,s=this.getMinorTickInterval(),r=!this.isPanning,o=r&&t.startOnTick,a=r&&t.endOnTick,n=[],h;if(this.tickmarkOffset=this.categories&&"between"===t.tickmarkPlacement&&1===this.tickInterval?.5:0,this.minorTickInterval="auto"===s&&this.tickInterval?this.tickInterval/t.minorTicksPerMajor:s,this.single=this.min===this.max&&y(this.min)&&!this.tickAmount&&(this.min%1==0||!1!==t.allowDecimals),e)n=e.slice();else if(T(this.min)&&T(this.max)){if(!this.ordinal?.positions&&(this.max-this.min)/this.tickInterval>Math.max(2*this.len,200))n=[this.min,this.max],S(19,!1,this.chart);else if(this.dateTime)n=this.getTimeTicks(this.dateTime.normalizeTimeTickInterval(this.tickInterval,t.units),this.min,this.max,t.startOfWeek,this.ordinal?.positions,this.closestPointRange,!0);else if(this.logarithmic)n=this.logarithmic.getLogTickPositions(this.tickInterval,this.min,this.max);else{let t=this.tickInterval,e=t;for(;e<=2*t;)if(n=this.getLinearTickPositions(this.tickInterval,this.min,this.max),this.tickAmount&&n.length>this.tickAmount)this.tickInterval=z(this,e*=1.1);else break}n.length>this.len&&(n=[n[0],n[n.length-1]])[0]===n[1]&&(n.length=1),i&&(this.tickPositions=n,(h=i.apply(this,[this.min,this.max]))&&(n=h))}this.tickPositions=n,this.paddedTicks=n.slice(0),this.trimTicks(n,o,a),!this.isLinked&&T(this.min)&&T(this.max)&&(this.single&&n.length<2&&!this.categories&&!this.series.some(t=>t.is("heatmap")&&"between"===t.options.pointPlacement)&&(this.min-=.5,this.max+=.5),e||h||this.adjustTickAmount()),k(this,"afterSetTickPositions")}trimTicks(t,e,i){let s=t[0],r=t[t.length-1],o=!this.isOrdinal&&this.minPointOffset||0;if(k(this,"trimTicks"),!this.isLinked){if(e&&s!==-1/0)this.min=s;else for(;this.min-o>t[0];)t.shift();if(i)this.max=r;else for(;this.max+o<t[t.length-1];)t.pop();0===t.length&&y(s)&&!this.options.tickPositions&&t.push((r+s)/2)}}alignToOthers(){let t;let e=this,i=e.chart,s=[this],r=e.options,o=i.options.chart,a="yAxis"===this.coll&&o.alignThresholds,n=[];if(e.thresholdAlignment=void 0,(!1!==o.alignTicks&&r.alignTicks||a)&&!1!==r.startOnTick&&!1!==r.endOnTick&&!e.logarithmic){let r=t=>{let{horiz:e,options:i}=t;return[e?i.left:i.top,i.width,i.height,i.pane].join(",")},o=r(this);i[this.coll].forEach(function(i){let{series:a}=i;a.length&&a.some(t=>t.visible)&&i!==e&&r(i)===o&&(t=!0,s.push(i))})}if(t&&a){s.forEach(t=>{let i=t.getThresholdAlignment(e);T(i)&&n.push(i)});let t=n.length>1?n.reduce((t,e)=>t+=e,0)/n.length:void 0;s.forEach(e=>{e.thresholdAlignment=t})}return t}getThresholdAlignment(t){if((!T(this.dataMin)||this!==t&&this.series.some(t=>t.isDirty||t.isDirtyData))&&this.getSeriesExtremes(),T(this.threshold)){let t=m((this.threshold-(this.dataMin||0))/((this.dataMax||0)-(this.dataMin||0)),0,1);return this.options.reversed&&(t=1-t),t}}getTickAmount(){let t=this.options,e=t.tickPixelInterval,i=t.tickAmount;y(t.tickInterval)||i||!(this.len<e)||this.isRadial||this.logarithmic||!t.startOnTick||!t.endOnTick||(i=2),!i&&this.alignToOthers()&&(i=Math.ceil(this.len/e)+1),i<4&&(this.finalTickAmt=i,i=5),this.tickAmount=i}adjustTickAmount(){let t=this,{finalTickAmt:e,max:i,min:s,options:r,tickPositions:o,tickAmount:a,thresholdAlignment:n}=t,h=o?.length,l=E(t.threshold,t.softThreshold?0:null),d,c,p=t.tickInterval,u,g=()=>o.push(x(o[o.length-1]+p)),f=()=>o.unshift(x(o[0]-p));if(T(n)&&(u=n<.5?Math.ceil(n*(a-1)):Math.floor(n*(a-1)),r.reversed&&(u=a-1-u)),t.hasData()&&T(s)&&T(i)){let n=()=>{t.transA*=(h-1)/(a-1),t.min=r.startOnTick?o[0]:Math.min(s,o[0]),t.max=r.endOnTick?o[o.length-1]:Math.max(i,o[o.length-1])};if(T(u)&&T(t.threshold)){for(;o[u]!==l||o.length!==a||o[0]>s||o[o.length-1]<i;){for(o.length=0,o.push(t.threshold);o.length<a;)void 0===o[u]||o[u]>t.threshold?f():g();if(p>8*t.tickInterval)break;p*=2}n()}else if(h<a){for(;o.length<a;)o.length%2||s===l?g():f();n()}if(y(e)){for(c=d=o.length;c--;)(3===e&&c%2==1||e<=2&&c>0&&c<d-1)&&o.splice(c,1);t.finalTickAmt=void 0}}}setScale(){let{coll:t,stacking:e}=this,i=!1,s=!1;
23499this.series.forEach(t=>{i=i||t.isDirtyData||t.isDirty,s=s||t.xAxis&&t.xAxis.isDirty||!1}),this.setAxisSize();let r=this.len!==(this.old&&this.old.len);r||i||s||this.isLinked||this.forceRedraw||this.userMin!==(this.old&&this.old.userMin)||this.userMax!==(this.old&&this.old.userMax)||this.alignToOthers()?(e&&"yAxis"===t&&e.buildStacks(),this.forceRedraw=!1,this.userMinRange||(this.minRange=void 0),this.getSeriesExtremes(),this.setTickInterval(),e&&"xAxis"===t&&e.buildStacks(),this.isDirty||(this.isDirty=r||this.min!==this.old?.min||this.max!==this.old?.max)):e&&e.cleanStacks(),i&&delete this.allExtremes,k(this,"afterSetScale")}setExtremes(t,e,i=!0,s,r){this.series.forEach(t=>{delete t.kdTree}),k(this,"setExtremes",r=C(r,{min:t,max:e}),t=>{this.userMin=t.min,this.userMax=t.max,this.eventArgs=t,i&&this.chart.redraw(s)})}setAxisSize(){let t=this.chart,e=this.options,i=e.offsets||[0,0,0,0],s=this.horiz,r=this.width=Math.round(I(E(e.width,t.plotWidth-i[3]+i[1]),t.plotWidth)),o=this.height=Math.round(I(E(e.height,t.plotHeight-i[0]+i[2]),t.plotHeight)),a=this.top=Math.round(I(E(e.top,t.plotTop+i[0]),t.plotHeight,t.plotTop)),n=this.left=Math.round(I(E(e.left,t.plotLeft+i[3]),t.plotWidth,t.plotLeft));this.bottom=t.chartHeight-o-a,this.right=t.chartWidth-r-n,this.len=Math.max(s?r:o,0),this.pos=s?n:a}getExtremes(){let t=this.logarithmic;return{min:t?x(t.lin2log(this.min)):this.min,max:t?x(t.lin2log(this.max)):this.max,dataMin:this.dataMin,dataMax:this.dataMax,userMin:this.userMin,userMax:this.userMax}}getThreshold(t){let e=this.logarithmic,i=e?e.lin2log(this.min):this.min,s=e?e.lin2log(this.max):this.max;return null===t||t===-1/0?t=i:t===1/0?t=s:i>t?t=i:s<t&&(t=s),this.translate(t,0,1,0,1)}autoLabelAlign(t){let e=(E(t,0)-90*this.side+720)%360,i={align:"center"};return k(this,"autoLabelAlign",i,function(t){e>15&&e<165?t.align="right":e>195&&e<345&&(t.align="left")}),i.align}tickSize(t){let e=this.options,i=E(e["tick"===t?"tickWidth":"minorTickWidth"],"tick"===t&&this.isXAxis&&!this.categories?1:0),s=e["tick"===t?"tickLength":"minorTickLength"],r;i&&s&&("inside"===e[t+"Position"]&&(s=-s),r=[s,i]);let o={tickSize:r};return k(this,"afterTickSize",o),o.tickSize}labelMetrics(){let t=this.chart.renderer,e=this.ticks,i=e[Object.keys(e)[0]]||{};return this.chart.renderer.fontMetrics(i.label||i.movedLabel||t.box)}unsquish(){let t=this.options.labels,e=t.padding||0,i=this.horiz,s=this.tickInterval,r=this.len/(((this.categories?1:0)+this.max-this.min)/s),o=t.rotation,a=x(.8*this.labelMetrics().h),n=Math.max(this.max-this.min,0),h=function(t){let i=(t+2*e)/(r||1);return(i=i>1?Math.ceil(i):1)*s>n&&t!==1/0&&r!==1/0&&n&&(i=Math.ceil(n/s)),x(i*s)},l=s,d,c=Number.MAX_VALUE,p;if(i){if(!t.staggerLines&&(T(o)?p=[o]:r<t.autoRotationLimit&&(p=t.autoRotation)),p){let t,e;for(let i of p)(i===o||i&&i>=-90&&i<=90)&&(e=(t=h(Math.abs(a/Math.sin(u*i))))+Math.abs(i/360))<c&&(c=e,d=i,l=t)}}else l=h(.75*a);return this.autoRotation=p,this.labelRotation=E(d,T(o)?o:0),t.step?s:l}getSlotWidth(t){let e=this.chart,i=this.horiz,s=this.options.labels,r=Math.max(this.tickPositions.length-(this.categories?0:1),1),o=e.margin[3];if(t&&T(t.slotWidth))return t.slotWidth;if(i&&s.step<2)return s.rotation?0:(this.staggerLines||1)*this.len/r;if(!i){let t=s.style.width;if(void 0!==t)return parseInt(String(t),10);if(o)return o-e.spacing[3]}return .33*e.chartWidth}renderUnsquish(){let t=this.chart,e=t.renderer,i=this.tickPositions,s=this.ticks,r=this.options.labels,o=r.style,a=this.horiz,n=this.getSlotWidth(),h=Math.max(1,Math.round(n-(a?2*(r.padding||0):r.distance||0))),l={},d=this.labelMetrics(),c=o.textOverflow,p,u,g=0,f,m;if(P(r.rotation)||(l.rotation=r.rotation||0),i.forEach(function(t){let e=s[t];e.movedLabel&&e.replaceMovedLabel(),e&&e.label&&e.label.textPxLength>g&&(g=e.label.textPxLength)}),this.maxLabelLength=g,this.autoRotation)g>h&&g>d.h?l.rotation=this.labelRotation:this.labelRotation=0;else if(n&&(p=h,!c))for(u="clip",m=i.length;!a&&m--;)(f=s[i[m]].label)&&("ellipsis"===f.styles.textOverflow?f.css({textOverflow:"clip"}):f.textPxLength>n&&f.css({width:n+"px"}),f.getBBox().height>this.len/i.length-(d.h-d.f)&&(f.specificTextOverflow="ellipsis"));l.rotation&&(p=g>.5*t.chartHeight?.33*t.chartHeight:g,c||(u="ellipsis")),this.labelAlign=r.align||this.autoLabelAlign(this.labelRotation),this.labelAlign&&(l.align=this.labelAlign),i.forEac
23499h(function(t){let e=s[t],i=e&&e.label,r=o.width,a={};i&&(i.attr(l),e.shortenLabel?e.shortenLabel():p&&!r&&"nowrap"!==o.whiteSpace&&(p<i.textPxLength||"SPAN"===i.element.tagName)?(a.width=p+"px",c||(a.textOverflow=i.specificTextOverflow||u),i.css(a)):!i.styles.width||a.width||r||i.css({width:null}),delete i.specificTextOverflow,e.rotation=l.rotation)},this),this.tickRotCorr=e.rotCorr(d.b,this.labelRotation||0,0!==this.side)}hasData(){return this.series.some(function(t){return t.hasData()})||this.options.showEmpty&&y(this.min)&&y(this.max)}addTitle(t){let e;let i=this.chart.renderer,s=this.horiz,r=this.opposite,o=this.options.title,a=this.chart.styledMode;this.axisTitle||((e=o.textAlign)||(e=(s?{low:"left",middle:"center",high:"right"}:{low:r?"right":"left",middle:"center",high:r?"left":"right"})[o.align]),this.axisTitle=i.text(o.text||"",0,0,o.useHTML).attr({zIndex:7,rotation:o.rotation||0,align:e}).addClass("highcharts-axis-title"),a||this.axisTitle.css(L(o.style)),this.axisTitle.add(this.axisGroup),this.axisTitle.isNew=!0),a||o.style.width||this.isRadial||this.axisTitle.css({width:this.len+"px"}),this.axisTitle[t?"show":"hide"](t)}generateTick(t){let e=this.ticks;e[t]?e[t].addLabel():e[t]=new a(this,t)}createGroups(){let{axisParent:t,chart:e,coll:i,options:s}=this,r=e.renderer,o=(e,o,a)=>r.g(e).attr({zIndex:a}).addClass(`highcharts-${i.toLowerCase()}${o} `+(this.isRadial?`highcharts-radial-axis${o} `:"")+(s.className||"")).add(t);this.axisGroup||(this.gridGroup=o("grid","-grid",s.gridZIndex),this.axisGroup=o("axis","",s.zIndex),this.labelGroup=o("axis-labels","-labels",s.labels.zIndex))}getOffset(){let t=this,{chart:e,horiz:i,options:s,side:r,ticks:o,tickPositions:a,coll:n}=t,h=e.inverted&&!t.isZAxis?[1,0,3,2][r]:r,l=t.hasData(),d=s.title,c=s.labels,p=T(s.crossing),u=e.axisOffset,g=e.clipOffset,f=[-1,1,1,-1][r],m,x=0,b,v=0,S=0,C,M;if(t.showAxis=m=l||s.showEmpty,t.staggerLines=t.horiz&&c.staggerLines||void 0,t.createGroups(),l||t.isLinked?(a.forEach(function(e){t.generateTick(e)}),t.renderUnsquish(),t.reserveSpaceDefault=0===r||2===r||({1:"left",3:"right"})[r]===t.labelAlign,E(c.reserveSpace,!p&&null,"center"===t.labelAlign||null,t.reserveSpaceDefault)&&a.forEach(function(t){S=Math.max(o[t].getLabelSize(),S)}),t.staggerLines&&(S*=t.staggerLines),t.labelOffset=S*(t.opposite?-1:1)):D(o,function(t,e){t.destroy(),delete o[e]}),d?.text&&!1!==d.enabled&&(t.addTitle(m),m&&!p&&!1!==d.reserveSpace&&(t.titleOffset=x=t.axisTitle.getBBox()[i?"height":"width"],v=y(b=d.offset)?0:E(d.margin,i?5:10))),t.renderLine(),t.offset=f*E(s.offset,u[r]?u[r]+(s.margin||0):0),t.tickRotCorr=t.tickRotCorr||{x:0,y:0},M=0===r?-t.labelMetrics().h:2===r?t.tickRotCorr.y:0,C=Math.abs(S)+v,S&&(C-=M,C+=f*(i?E(c.y,t.tickRotCorr.y+f*c.distance):E(c.x,f*c.distance))),t.axisTitleMargin=E(b,C),t.getMaxLabelDimensions&&(t.maxLabelDimensions=t.getMaxLabelDimensions(o,a)),"colorAxis"!==n&&g){let e=this.tickSize("tick");u[r]=Math.max(u[r],(t.axisTitleMargin||0)+x+f*t.offset,C,a&&a.length&&e?e[0]+f*t.offset:0);let i=!t.axisLine||s.offset?0:t.axisLine.strokeWidth()/2;g[h]=Math.max(g[h],i)}k(this,"afterGetOffset")}getLinePath(t){let e=this.chart,i=this.opposite,s=this.offset,r=this.horiz,o=this.left+(i?this.width:0)+s,a=e.chartHeight-this.bottom-(i?this.height:0)+s;return i&&(t*=-1),e.renderer.crispLine([["M",r?this.left:o,r?a:this.top],["L",r?e.chartWidth-this.right:o,r?a:e.chartHeight-this.bottom]],t)}renderLine(){this.axisLine||(this.axisLine=this.chart.renderer.path().addClass("highcharts-axis-line").add(this.axisGroup),this.chart.styledMode||this.axisLine.attr({stroke:this.options.lineColor,"stroke-width":this.options.lineWidth,zIndex:7}))}getTitlePosition(t){let e=this.horiz,i=this.left,s=this.top,r=this.len,o=this.options.title,a=e?i:s,n=this.opposite,h=this.offset,l=o.x,d=o.y,c=this.chart.renderer.fontMetrics(t),p=t?Math.max(t.getBBox(!1,0).height-c.h-1,0):0,u={low:a+(e?0:r),middle:a+r/2,high:a+(e?r:0)}[o.align],g=(e?s+this.height:i)+(e?1:-1)*(n?-1:1)*(this.axisTitleMargin||0)+[-p,p,c.f,-p][this.side],f={x:e?u+l:g+(n?this.width:0)+h+l,y:e?g+d-(n?this.height:0)+h:u+d};return k(this,"afterGetTitlePosition",{titlePosition:f}),f}renderMinorTick(t,e){let i=this.minorTicks;i[t]||(i[t]=new a(this,t,"minor")),e&&i[t].isNew&&i[t].render(null,!0),i[t].render(null,!1,1)}
23499renderTick(t,e,i){let s=this.isLinked,r=this.ticks;(!s||t>=this.min&&t<=this.max||this.grid&&this.grid.isColumn)&&(r[t]||(r[t]=new a(this,t)),i&&r[t].isNew&&r[t].render(e,!0,-1),r[t].render(e))}render(){let t,e;let i=this,s=i.chart,r=i.logarithmic,n=s.renderer,l=i.options,d=i.isLinked,c=i.tickPositions,p=i.axisTitle,u=i.ticks,g=i.minorTicks,f=i.alternateBands,m=l.stackLabels,x=l.alternateGridColor,y=l.crossing,b=i.tickmarkOffset,v=i.axisLine,S=i.showAxis,C=h(n.globalAnimation);if(i.labelEdge.length=0,i.overlap=!1,[u,g,f].forEach(function(t){D(t,function(t){t.isActive=!1})}),T(y)){let t=this.isXAxis?s.yAxis[0]:s.xAxis[0],e=[1,-1,-1,1][this.side];if(t){let s=t.toPixels(y,!0);i.horiz&&(s=t.len-s),i.offset=e*s}}if(i.hasData()||d){let n=i.chart.hasRendered&&i.old&&T(i.old.min);i.minorTickInterval&&!i.categories&&i.getMinorTickPositions().forEach(function(t){i.renderMinorTick(t,n)}),c.length&&(c.forEach(function(t,e){i.renderTick(t,e,n)}),b&&(0===i.min||i.single)&&(u[-1]||(u[-1]=new a(i,-1,null,!0)),u[-1].render(-1))),x&&c.forEach(function(a,n){e=void 0!==c[n+1]?c[n+1]+b:i.max-b,n%2==0&&a<i.max&&e<=i.max+(s.polar?-b:b)&&(f[a]||(f[a]=new o.PlotLineOrBand(i,{}
23499)),t=a+b,f[a].options={from:r?r.lin2log(t):t,to:r?r.lin2log(e):e,color:x,className:"highcharts-alternate-grid"},f[a].render(),f[a].isActive=!0)}),i._addedPlotLB||(i._addedPlotLB=!0,(l.plotLines||[]).concat(l.plotBands||[]).forEach(function(t){i.addPlotBandOrLine(t)}))}[u,g,f].forEach(function(t){let e=[],i=C.duration;D(t,function(t,i){t.isActive||(t.render(i,!1,0),t.isActive=!1,e.push(i))}),R(function(){let i=e.length;for(;i--;)t[e[i]]&&!t[e[i]].isActive&&(t[e[i]].destroy(),delete t[e[i]])},t!==f&&s.hasRendered&&i?i:0)}),v&&(v[v.isPlaced?"animate":"attr"]({d:this.getLinePath(v.strokeWidth())}),v.isPlaced=!0,v[S?"show":"hide"](S)),p&&S&&(p[p.isNew?"attr":"animate"](i.getTitlePosition(p)),p.isNew=!1),m&&m.enabled&&i.stacking&&i.stacking.renderStackTotals(),i.old={len:i.len,max:i.max,min:i.min,transA:i.transA,userMax:i.userMax,userMin:i.userMin},i.isDirty=!1,k(this,"afterRender")}redraw(){this.visible&&(this.render(),this.plotLinesAndBands.forEach(function(t){t.render()})),this.series.forEach(function(t){t.isDirty=!0})}getKeepProps(){return this.keepProps||N.keepProps}destroy(t){let e=this,i=e.plotLinesAndBands,s=this.eventOptions;if(k(this,"destroy",{keepEvents:t}),t||j(e),[e.ticks,e.minorTicks,e.alternateBands].forEach(function(t){b(t)}),i){let t=i.length;for(;t--;)i[t].destroy()}for(let t in["axisLine","axisTitle","axisGroup","gridGroup","labelGroup","cross","scrollbar"].forEach(function(t){e[t]&&(e[t]=e[t].destroy())}),e.plotLinesAndBandsGroups)e.plotLinesAndBandsGroups[t]=e.plotLinesAndBandsGroups[t].destroy();D(e,function(t,i){-1===e.getKeepProps().indexOf(i)&&delete e[i]}),this.eventOptions=s}drawCrosshair(t,e){let s=this.crosshair,r=E(s&&s.snap,!0),o=this.chart,a,n,h,l=this.cross,d;if(k(this,"drawCrosshair",{e:t,point:e}),t||(t=this.cross&&this.cross.e),s&&!1!==(y(e)||!r)){if(r?y(e)&&(n=E("colorAxis"!==this.coll?e.crosshairPos:null,this.isXAxis?e.plotX:this.len-e.plotY)):n=t&&(this.horiz?t.chartX-this.pos:this.len-t.chartY+this.pos),y(n)&&(d={value:e&&(this.isXAxis?e.x:E(e.stackY,e.y)),translatedValue:n},o.polar&&C(d,{isCrosshair:!0,chartX:t&&t.chartX,chartY:t&&t.chartY,point:e}),a=this.getPlotLinePath(d)||null),!y(a)){this.hideCrosshair();return}h=this.categories&&!this.isRadial,l||(this.cross=l=o.renderer.path().addClass("highcharts-crosshair highcharts-crosshair-"+(h?"category ":"thin ")+(s.className||"")).attr({zIndex:E(s.zIndex,2)}).add(),!o.styledMode&&(l.attr({stroke:s.color||(h?i.parse("#ccd3ff").setOpacity(.25).get():"#cccccc"),"stroke-width":E(s.width,1)}).css({"pointer-events":"none"}),s.dashStyle&&l.attr({dashstyle:s.dashStyle}))),l.show().attr({d:a}),h&&!s.width&&l.attr({"stroke-width":this.transA}),this.cross.e=t}else this.hideCrosshair();k(this,"afterDrawCrosshair",{e:t,point:e})}hideCrosshair(){this.cross&&this.cross.hide(),k(this,"afterHideCrosshair")}update(t,e){let i=this.chart;t=L(this.userOptions,t),this.destroy(!0),this.init(i,t),i.isDirtyBox=!0,E(e,!0)&&i.redraw()}remove(t){let e=this.chart,i=this.coll,s=this.series,r=s.length;for(;r--;)s[r]&&s[r].remove(!1);v(e.axes,this),v(e[i]||[],this),e.orderItems(i),this.destroy(),e.isDirtyBox=!0,E(t,!0)&&e.redraw()}setTitle(t,e){this.update({title:t},e)}setCategories(t,e){this.update({categories:t},e)}}return N.keepProps=["coll","extKey","hcEvents","len","names","series","userMax","userMin"],N}),i(e,"Core/Axis/DateTimeAxis.js",[e["Core/Utilities.js"]],function(t){var e;let{addEvent:i,getMagnitude:s,normalizeTickInterval:r,timeUnits:o}=t;return function(t){function e(){return this.chart.time.getTimeTicks.apply(this.chart.time,arguments)}function a(){if("datetime"!==this.options.type){this.dateTime=void 0;return}this.dateTime||(this.dateTime=new n(this))}t.compose=function(t){return t.keepProps.includes("dateTime")||(t.keepProps.push("dateTime"),t.prototype.getTimeTicks=e,i(t,"afterSetOptions",a)),t};class n{constructor(t){this.axis=t}normalizeTimeTickInterval(t,e){let i=e||[["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]],a=i[i.length-1],n=o[a[0]],h=a[1],l;for(l=0;l<i.length&&(n=o[(a=i[l])[0]],h=a[1],!i[l+1]||!(t<=(n*h[h.length-1]+o[i[l+1][0]])/2));l++);n===o.year&&t<5*n&&(h=[1,2,5]);let d=r(t/n,h,"year"===a[0]?Math.max(s(t/n),1):1);return{unitRange:n,count:d,unitName:a[0]}}getXDateFormat(t,e){let{axis:i}=this,s=i.chart.time;return i.closestPointRange?s.getDateFormat(i.closestPointRange,t,i.options.startOfWeek,e)||s.resolveDTLFormat(e.year).main:s.resolveDTLFormat(e.day).main}}t.Additions=n}(e||(e={})),e}),i(e,"Core/Axis/LogarithmicAxis.js",[e["Core/Utilities.js"]],function(t){var e;let{addEvent:i,normalizeTickInterval:s,pick:r}=t;return function(t){function e(t){let e=t.userOptions,i=this.logarithmic;"logarithmic"!==e.type?this.logarithmic=void 0:i||(i=this.logarithmic=new a(this))}function o(){let t=this.logarithmic;t&&(this.lin2val=function(e){return t.lin2log(e)},this.val2lin=function(e){return t.log2lin(e)})}t.compose=function(t){return t.keepProps.includes("logarithmic")||(t.keepProps.push("logarithmic"),i(t,"init",e),i(t,"afterInit",o)),t};class a{constructor(t){this.axis=t}getLogTickPositions(t,e,i,o){let a=this.axis,n=a.len,h=a.options,l=[];
23499if(o||(this.minorAutoInterval=void 0),t>=.5)t=Math.round(t),l=a.getLinearTickPositions(t,e,i);else if(t>=.08){let s,r,a,n,h,d,c;let p=Math.floor(e);for(s=t>.3?[1,2,4]:t>.15?[1,2,4,6,8]:[1,2,3,4,5,6,7,8,9],r=p;r<i+1&&!c;r++)for(a=0,n=s.length;a<n&&!c;a++)(h=this.log2lin(this.lin2log(r)*s[a]))>e&&(!o||d<=i)&&void 0!==d&&l.push(d),d>i&&(c=!0),d=h}else{let d=this.lin2log(e),c=this.lin2log(i),p=o?a.getMinorTickInterval():h.tickInterval,u=h.tickPixelInterval/(o?5:1),g=o?n/a.tickPositions.length:n;t=s(t=r("auto"===p?null:p,this.minorAutoInterval,(c-d)*u/(g||1))),l=a.getLinearTickPositions(t,d,c).map(this.log2lin),o||(this.minorAutoInterval=t/5)}return o||(a.tickInterval=t),l}lin2log(t){return Math.pow(10,t)}log2lin(t){return Math.log(t)/Math.LN10}}t.Additions=a}(e||(e={})),e}),i(e,"Core/Axis/PlotLineOrBand/PlotLineOrBandAxis.js",[e["Core/Utilities.js"]],function(t){var e;let{erase:i,extend:s,isNumber:r}=t;return function(t){let e;function o(t){return this.addPlotBandOrLine(t,"plotBands")}function a(t,i){let s=this.userOptions,r=new e(this,t);if(this.visible&&(r=r.render()),r){if(this._addedPlotLB||(this._addedPlotLB=!0,(s.plotLines||[]).concat(s.plotBands||[]).forEach(t=>{this.addPlotBandOrLine(t)})),i){let e=s[i]||[];e.push(t),s[i]=e}this.plotLinesAndBands.push(r)}return r}function n(t){return this.addPlotBandOrLine(t,"plotLines")}function h(t,e,i){i=i||this.options;let s=this.getPlotLinePath({value:e,force:!0,acrossPanes:i.acrossPanes}),o=[],a=this.horiz,n=!r(this.min)||!r(this.max)||t<this.min&&e<this.min||t>this.max&&e>this.max,h=this.getPlotLinePath({value:t,force:!0,acrossPanes:i.acrossPanes}),l,d=1,c;if(h&&s)for(n&&(c=h.toString()===s.toString(),d=0),l=0;l<h.length;l+=2){let t=h[l],e=h[l+1],i=s[l],r=s[l+1];("M"===t[0]||"L"===t[0])&&("M"===e[0]||"L"===e[0])&&("M"===i[0]||"L"===i[0])&&("M"===r[0]||"L"===r[0])&&(a&&i[1]===t[1]?(i[1]+=d,r[1]+=d):a||i[2]!==t[2]||(i[2]+=d,r[2]+=d),o.push(["M",t[1],t[2]],["L",e[1],e[2]],["L",r[1],r[2]],["L",i[1],i[2]],["Z"])),o.isFlat=c}return o}function l(t){this.removePlotBandOrLine(t)}function d(t){let e=this.plotLinesAndBands,s=this.options,r=this.userOptions;if(e){let o=e.length;for(;o--;)e[o].id===t&&e[o].destroy();[s.plotLines||[],r.plotLines||[],s.plotBands||[],r.plotBands||[]].forEach(function(e){for(o=e.length;o--;)(e[o]||{}).id===t&&i(e,e[o])})}}function c(t){this.removePlotBandOrLine(t)}t.compose=function(t,i){let r=i.prototype;return r.addPlotBand||(e=t,s(r,{addPlotBand:o,addPlotLine:n,addPlotBandOrLine:a,getPlotBandPath:h,removePlotBand:l,removePlotLine:c,removePlotBandOrLine:d})),i}}(e||(e={})),e}),i(e,"Core/Axis/PlotLineOrBand/PlotLineOrBand.js",[e["Core/Axis/PlotLineOrBand/PlotLineOrBandAxis.js"],e["Core/Utilities.js"]],function(t,e){let{arrayMax:i,arrayMin:s,defined:r,destroyObjectProperties:o,erase:a,fireEvent:n,merge:h,objectEach:l,pick:d}=e;class c{static compose(e){return t.compose(c,e)}constructor(t,e){this.axis=t,this.options=e,this.id=e.id}render(){n(this,"render");let{axis:t,options:e}=this,{horiz:i,logarithmic:s}=t,{color:o,events:a,zIndex:c=0}=e,p={},u=t.chart.renderer,g=e.to,f=e.from,m=e.value,x=e.borderWidth,y=e.label,{label:b,svgElem:v}=this,S=[],C,k=r(f)&&r(g),M=r(m),w=!v,A={class:"highcharts-plot-"+(k?"band ":"line ")+(e.className||"")},T=k?"bands":"lines";if(!t.chart.styledMode&&(M?(A.stroke=o||"#999999",A["stroke-width"]=d(e.width,1),e.dashStyle&&(A.dashstyle=e.dashStyle)):k&&(A.fill=o||"#e6e9ff",x&&(A.stroke=e.borderColor,A["stroke-width"]=x))),p.zIndex=c,T+="-"+c,(C=t.plotLinesAndBandsGroups[T])||(t.plotLinesAndBandsGroups[T]=C=u.g("plot-"+T).attr(p).add()),v||(this.svgElem=v=u.path().attr(A).add(C)),r(m))S=t.getPlotLinePath({value:s?.log2lin(m)??m,lineWidth:v.strokeWidth(),acrossPanes:e.acrossPanes});else{if(!(r(f)&&r(g)))return;S=t.getPlotBandPath(s?.log2lin(f)??f,s?.log2lin(g)??g,e)}return!this.eventsAdded&&a&&(l(a,(t,e)=>{v?.on(e,t=>{a[e].apply(this,[t])})}),this.eventsAdded=!0),(w||!v.d)&&S?.length?v.attr({d:S}):v&&(S?(v.show(),v.animate({d:S})):v.d&&(v.hide(),b&&(this.label=b=b.destroy()))),y&&(r(y.text)||r(y.formatter))&&S?.length&&t.width>0&&t.height>0&&!S.isFlat?(y=h({align:i&&k?"center":void 0,x:i?!k&&4:10,verticalAlign:!i&&k?"middle":void 0,y:i?k?16:10:k?6:-4,rotation:i&&!k?90:0},y),this.renderLabel(y,S,k,c)):b&&b.hide(),this}renderLabel(t,e,r,o){let a=this.axis,n=a.chart.renderer,l=this.label;l||(this.label=l=n.text(this.getLabelText(t),0,0,t.useHTML).attr({align:t.textAlign||t.align,rotation:t.rotation,class:"highcharts-plot-"+(r?"band":"line")+"-label "+(t.className||""),zIndex:o}),a.chart.styledMode||l.css(h({fontSize:"0.8em",textOverflow:"ellipsis"},t.style)),l.add());let d=e.xBounds||[e[0][1],e[1][1],r?e[2][1]:e[0][1]],c=e.yBounds||[e[0][2],e[1][2],r?e[2][2]:e[0][2]],p=s(d),u=s(c);if(l.align(t,!1,{x:p,y:u,width:i(d)-p,height:i(c)-u}),!l.alignValue||"left"===l.alignValue){let e=t.clip?a.width:a.chart.chartWidth;l.css({width:(90===l.rotation?a.height-(l.alignAttr.y-a.top):e-(l.alignAttr.x-a.left))+"px"})}l.show(!0)}getLabelText(t){return r(t.formatter)?t.formatter.call(this):t.text}destroy(){a(this.axis.plotLinesAndBands,this),delete this.axis,o(this)}}return c}
23499),i(e,"Core/Tooltip.js",[e["Core/Animation/AnimationUtilities.js"],e["Core/Templating.js"],e["Core/Globals.js"],e["Core/Renderer/RendererUtilities.js"],e["Core/Renderer/RendererRegistry.js"],e["Core/Utilities.js"]],function(t,e,i,s,r,o){var a;let{animObject:n}=t,{format:h}=e,{composed:l,doc:d,isSafari:c}=i,{distribute:p}=s,{addEvent:u,clamp:g,css:f,discardElement:m,extend:x,fireEvent:y,isArray:b,isNumber:v,isString:S,merge:C,pick:k,pushUnique:M,splat:w,syncTimeout:A}=o;class T{constructor(t,e,i){this.allowShared=!0,this.crosshairs=[],this.distance=0,this.isHidden=!0,this.isSticky=!1,this.options={},this.outside=!1,this.chart=t,this.init(t,e),this.pointer=i}bodyFormatter(t){return t.map(function(t){let e=t.series.tooltipOptions;return(e[(t.point.formatPrefix||"point")+"Formatter"]||t.point.tooltipFormatter).call(t.point,e[(t.point.formatPrefix||"point")+"Format"]||"")})}cleanSplit(t){this.chart.series.forEach(function(e){let i=e&&e.tt;i&&(!i.isActive||t?e.tt=i.destroy():i.isActive=!1)})}defaultFormatter(t){let e;let i=this.points||w(this);return(e=(e=[t.tooltipFooterHeaderFormatter(i[0])]).concat(t.bodyFormatter(i))).push(t.tooltipFooterHeaderFormatter(i[0],!0)),e}destroy(){this.label&&(this.label=this.label.destroy()),this.split&&(this.cleanSplit(!0),this.tt&&(this.tt=this.tt.destroy())),this.renderer&&(this.renderer=this.renderer.destroy(),m(this.container)),o.clearTimeout(this.hideTimer)}getAnchor(t,e){let i;let{chart:s,pointer:r}=this,o=s.inverted,a=s.plotTop,n=s.plotLeft;if((t=w(t))[0].series&&t[0].series.yAxis&&!t[0].series.yAxis.options.reversedStacks&&(t=t.slice().reverse()),this.followPointer&&e)void 0===e.chartX&&(e=r.normalize(e)),i=[e.chartX-n,e.chartY-a];else if(t[0].tooltipPos)i=t[0].tooltipPos;else{let s=0,r=0;t.forEach(function(t){let e=t.pos(!0);e&&(s+=e[0],r+=e[1])}),s/=t.length,r/=t.length,this.shared&&t.length>1&&e&&(o?s=e.chartX:r=e.chartY),i=[s-n,r-a]}return i.map(Math.round)}getClassName(t,e,i){let s=this.options,r=t.series,o=r.options;return[s.className,"highcharts-label",i&&"highcharts-tooltip-header",e?"highcharts-tooltip-box":"highcharts-tooltip",!i&&"highcharts-color-"+k(t.colorIndex,r.colorIndex),o&&o.className].filter(S).join(" ")}getLabel(){let t=this,e=this.chart.styledMode,s=this.options,o=this.split&&this.allowShared,a=this.container,n=this.chart.renderer;if(this.label){let t=!this.label.hasClass("highcharts-label");(!o&&t||o&&!t)&&this.destroy()}if(!this.label){if(this.outside){let t=this.chart.options.chart.style,e=r.getRendererType();this.container=a=i.doc.createElement("div"),a.className="highcharts-tooltip-container",f(a,{position:"absolute",top:"1px",pointerEvents:"none",zIndex:Math.max(this.options.style.zIndex||0,(t&&t.zIndex||0)+3)}),this.renderer=n=new e(a,0,0,t,void 0,void 0,n.styledMode)}if(o?this.label=n.g("tooltip"):(this.label=n.label("",0,0,s.shape,void 0,void 0,s.useHTML,void 0,"tooltip").attr({padding:s.padding,r:s.borderRadius}),e||this.label.attr({fill:s.backgroundColor,"stroke-width":s.borderWidth||0}).css(s.style).css({pointerEvents:s.style.pointerEvents||(this.shouldStickOnContact()?"auto":"none")})),t.outside){let e=this.label;[e.xSetter,e.ySetter].forEach((i,s)=>{e[s?"ySetter":"xSetter"]=r=>{i.call(e,t.distance),e[s?"y":"x"]=r,a&&(a.style[s?"top":"left"]=`${r}px`)}})}this.label.attr({zIndex:8}).shadow(s.shadow).add()}return a&&!a.parentElement&&i.doc.body.appendChild(a),this.label}getPlayingField(){let{body:t,documentElement:e}=d,{chart:i,distance:s,outside:r}=this;return{width:r?Math.max(t.scrollWidth,e.scrollWidth,t.offsetWidth,e.offsetWidth,e.clientWidth)-2*s:i.chartWidth,height:r?Math.max(t.scrollHeight,e.scrollHeight,t.offsetHeight,e.offsetHeight,e.clientHeight):i.chartHeight}}getPosition(t,e,i){let{distance:s,chart:r,outside:o,pointer:a}=this,{inverted:n,plotLeft:h,plotTop:l,polar:d}=r,{plotX:c=0,plotY:p=0}=i,u={},g=n&&i.h||0,{height:f,width:m}=this.getPlayingField(),x=a.getChartPosition(),y=t=>t*x.scaleX,b=t=>t*x.scaleY,v=i=>{let a="x"===i;return[i,a?m:f,a?t:e].concat(o?[a?y(t):b(e),a?x.left-s+y(c+h):x.top-s+b(p+l),0,a?m:f]:[a?t:e,a?c+h:p+l,a?h:l,a?h+r.plotWidth:l+r.plotHeight])},S=v("y"),C=v("x"),M,w=!!i.negative;!d&&r.hoverSeries?.yAxis?.reversed&&(w=!w);let A=!this.followPointer&&k(i.ttBelow,!d&&!n===w),T=function(t,e,
23499i,r,a,n,h){let l=o?"y"===t?b(s):y(s):s,d=(i-r)/2,c=r<a-s,p=a+s+r<e,f=a-l-i+d,m=a+l-d;if(A&&p)u[t]=m;else if(!A&&c)u[t]=f;else if(c)u[t]=Math.min(h-r,f-g<0?f:f-g);else{if(!p)return!1;u[t]=Math.max(n,m+g+i>e?m:m+g)}},P=function(t,e,i,r,o){if(o<s||o>e-s)return!1;o<i/2?u[t]=1:o>e-r/2?u[t]=e-r-2:u[t]=o-i/2},L=function(t){[S,C]=[C,S],M=t},O=()=>{!1!==T.apply(0,S)?!1!==P.apply(0,C)||M||(L(!0),O()):M?u.x=u.y=0:(L(!0),O())};return(n&&!d||this.len>1)&&L(),O(),u}hide(t){let e=this;o.clearTimeout(this.hideTimer),t=k(t,this.options.hideDelay),this.isHidden||(this.hideTimer=A(function(){let i=e.getLabel();e.getLabel().animate({opacity:0},{duration:t?150:t,complete:()=>{i.hide(),e.container&&e.container.remove()}}),e.isHidden=!0},t))}init(t,e){this.chart=t,this.options=e,this.crosshairs=[],this.isHidden=!0,this.split=e.split&&!t.inverted&&!t.polar,this.shared=e.shared||this.split,this.outside=k(e.outside,!!(t.scrollablePixelsX||t.scrollablePixelsY))}shouldStickOnContact(t){return!!(!this.followPointer&&this.options.stickOnContact&&(!t||this.pointer.inClass(t.target,"highcharts-tooltip")))}move(t,e,i,s){let r=this,o=n(!r.isHidden&&r.options.animation),a=r.followPointer||(r.len||0)>1,h={x:t,y:e};a||(h.anchorX=i,h.anchorY=s),o.step=()=>r.drawTracker(),r.getLabel().animate(h,o)}refresh(t,e){let{chart:i,options:s,pointer:r,shared:a}=this,n=w(t),l=n[0],d=[],c=s.format,p=s.formatter||this.defaultFormatter,u=i.styledMode,g={};if(!s.enabled||!l.series)return;o.clearTimeout(this.hideTimer),this.allowShared=!(!b(t)&&t.series&&t.series.noSharedTooltip),this.followPointer=!this.split&&l.series.tooltipOptions.followPointer;let f=this.getAnchor(t,e),m=f[0],x=f[1];a&&this.allowShared?(r.applyInactiveState(n),n.forEach(function(t){t.setState("hover"),d.push(t.getLabelConfig())}),(g=l.getLabelConfig()).points=d):g=l.getLabelConfig(),this.len=d.length;let v=S(c)?h(c,g,i):p.call(g,this),C=l.series;if(this.distance=k(C.tooltipOptions.distance,16),!1===v)this.hide();else{if(this.split&&this.allowShared)this.renderSplit(v,n);else{let t=m,o=x;if(e&&r.isDirectTouch&&(t=e.chartX-i.plotLeft,o=e.chartY-i.plotTop),i.polar||!1===C.options.clip||n.some(e=>r.isDirectTouch||e.series.shouldShowTooltip(t,o))){let t=this.getLabel();(!s.style.width||u)&&t.css({width:(this.outside?this.getPlayingField():i.spacingBox).width+"px"}),t.attr({text:v&&v.join?v.join(""):v}),t.addClass(this.getClassName(l),!0),u||t.attr({stroke:s.borderColor||l.color||C.color||"#666666"}),this.updatePosition({plotX:m,plotY:x,negative:l.negative,ttBelow:l.ttBelow,h:f[2]||0})}else{this.hide();return}}this.isHidden&&this.label&&this.label.attr({opacity:1}).show(),this.isHidden=!1}y(this,"refresh")}renderSplit(t,e){let i=this,{chart:s,chart:{chartWidth:r,chartHeight:o,plotHeight:a,plotLeft:n,plotTop:h,scrollablePixelsY:l=0,scrollablePixelsX:u,styledMode:f},distance:m,options:y,options:{positioner:b},pointer:v}=i,{scrollLeft:C=0,scrollTop:M=0}=s.scrollablePlotArea?.scrollingContainer||{},w=i.outside&&"number"!=typeof u?d.documentElement.getBoundingClientRect():{left:C,right:C+r,top:M,bottom:M+o},A=i.getLabel(),T=this.renderer||s.renderer,P=!!(s.xAxis[0]&&s.xAxis[0].opposite),{left:L,top:O}=v.getChartPosition(),D=h+M,E=0,I=a-l;function j(t,e,s,r,o=!0){let a,n;return s?(a=P?0:I,n=g(t-r/2,w.left,w.right-r-(i.outside?L:0))):(a=e-D,n=g(n=o?t-r-m:t+m,o?n:w.left,w.right)),{x:n,y:a}}S(t)&&(t=[!1,t]);let B=t.slice(0,e.length+1).reduce(function(t,s,r){if(!1!==s&&""!==s){let o=e[r-1]||{isHeader:!0,plotX:e[0].plotX,plotY:a,series:{}},l=o.isHeader,d=l?i:o.series,c=d.tt=function(t,e,s){let r=t,{isHeader:o,series:a}=e;if(!r){let t={padding:y.padding,r:y.borderRadius};f||(t.fill=y.backgroundColor,t["stroke-width"]=y.borderWidth??1),r=T.label("",0,0,y[o?"headerShape":"shape"],void 0,void 0,y.useHTML).addClass(i.getClassName(e,!0,o)).attr(t).add(A)}return r.isActive=!0,r.attr({text:s}),f||r.css(y.style).attr({stroke:y.borderColor||e.color||a.color||"#333333"}),r}(d.tt,o,s.toString()),p=c.getBBox(),u=p.width+c.strokeWidth();l&&(E=p.height,I+=E,P&&(D-=E));let{anchorX:x,anchorY:v}=function(t){let e,i;let{isHeader:s,plotX:r=0,plotY:o=0,series:l}=t;if(s)e=Math.max(n+r,n),i=h+a/2;else{let{xAxis:t,yAxis:s}=l;e=t.pos+g(r,-m,t.len+m),l.shouldShowTooltip(0,s.pos-h+o,{ignoreX:!0})&&(i=s.pos+o)}return{anchorX:e=g(e,w.left-m,w.right+m),anchorY:i}}(o);if("number"==typeof v){let e=p.height+1,s=b?b.call(i,u,e,o):j(x,v,l,u);t.push({align:b?0:void 0,anchorX:x,anchorY:v,boxWidth:u,point:o,rank:k(s.rank,l?1:0),size:e,target:s.y,tt:c,x:s.x})}else c.isActive=!1}return t},[]);!b&&B.some(t=>{let{outside:e}=i,s=(e?L:0)+t.anchorX;return s<w.left&&s+t.boxWidth<w.right||s<L-w.left+t.boxWidth&&w.right-s>s})&&(B=B.map(t=>{let{x:e,y:i}=j(t.anchorX,t.anchorY,t.point.isHeader,t.boxWidth,!1);return x(t,{target:i,x:e})})),i.cleanSplit(),p(B,I);let R={left:L,right:L};B.forEach(function(t){let{x:e,boxWidth:s,isHeader:r}=t;!r&&(i.outside&&L+e<R.left&&(R.left=L+e),!r&&i.outside&&R.left+s>R.right&&(R.right=L+e))}),B.forEach(function(t){let{x:e,anchorX:s,anchorY:r,pos:o,point:{isHeader:a}}=t,n={visibility:void 0===o?"hidden":"inherit",x:e,y:(o||0)+D,anchorX:s,anchorY:r};
23499if(i.outside&&e<s){let t=L-R.left;t>0&&(a||(n.x=e+t,n.anchorX=s+t),a&&(n.x=(R.right-R.left)/2,n.anchorX=s+t))}t.tt.attr(n)});let{container:z,outside:N,renderer:W}=i;if(N&&z&&W){let{width:t,height:e,x:i,y:s}=A.getBBox();W.setSize(t+i,e+s,!1),z.style.left=R.left+"px",z.style.top=O+"px"}c&&A.attr({opacity:1===A.opacity?.999:1})}drawTracker(){if(!this.shouldStickOnContact()){this.tracker&&(this.tracker=this.tracker.destroy());return}let t=this.chart,e=this.label,i=this.shared?t.hoverPoints:t.hoverPoint;if(!e||!i)return;let s={x:0,y:0,width:0,height:0},r=this.getAnchor(i),o=e.getBBox();r[0]+=t.plotLeft-(e.translateX||0),r[1]+=t.plotTop-(e.translateY||0),s.x=Math.min(0,r[0]),s.y=Math.min(0,r[1]),s.width=r[0]<0?Math.max(Math.abs(r[0]),o.width-r[0]):Math.max(Math.abs(r[0]),o.width),s.height=r[1]<0?Math.max(Math.abs(r[1]),o.height-Math.abs(r[1])):Math.max(Math.abs(r[1]),o.height),this.tracker?this.tracker.attr(s):(this.tracker=e.renderer.rect(s).addClass("highcharts-tracker").add(e),t.styledMode||this.tracker.attr({fill:"rgba(0,0,0,0)"}))}styledModeFormat(t){return t.replace('style="font-size: 0.8em"','class="highcharts-header"').replace(/style="color:{(point|series)\.color}"/g,'class="highcharts-color-{$1.colorIndex} {series.options.className} {point.options.className}"')}tooltipFooterHeaderFormatter(t,e){let i=t.series,s=i.tooltipOptions,r=i.xAxis,o=r&&r.dateTime,a={isFooter:e,labelConfig:t},n=s.xDateFormat,l=s[e?"footerFormat":"headerFormat"];return y(this,"headerFormatter",a,function(e){o&&!n&&v(t.key)&&(n=o.getXDateFormat(t.key,s.dateTimeLabelFormats)),o&&n&&(t.point&&t.point.tooltipDateKeys||["key"]).forEac
23499h(function(t){l=l.replace("{point."+t+"}","{point."+t+":"+n+"}")}),i.chart.styledMode&&(l=this.styledModeFormat(l)),e.text=h(l,{point:t,series:i},this.chart)}),a.text}update(t){this.destroy(),this.init(this.chart,C(!0,this.options,t))}updatePosition(t){let{chart:e,container:i,distance:s,options:r,pointer:o,renderer:a}=this,{height:n=0,width:h=0}=this.getLabel(),{left:l,top:d,scaleX:c,scaleY:p}=o.getChartPosition(),u=(r.positioner||this.getPosition).call(this,h,n,t),g=(t.plotX||0)+e.plotLeft,m=(t.plotY||0)+e.plotTop,x;a&&i&&(r.positioner&&(u.x+=l-s,u.y+=d-s),x=(r.borderWidth||0)+2*s+2,a.setSize(h+x,n+x,!1),(1!==c||1!==p)&&(f(i,{transform:`scale(${c}, ${p})`}),g*=c,m*=p),g+=l-u.x,m+=d-u.y),this.move(Math.round(u.x),Math.round(u.y||0),g,m)}}return(a=T||(T={})).compose=function(t){M(l,"Core.Tooltip")&&u(t,"afterInit",function(){let t=this.chart;t.options.tooltip&&(t.tooltip=new a(t,t.options.tooltip,this))})},T}),i(e,"Core/Series/Point.js",[e["Core/Renderer/HTML/AST.js"],e["Core/Animation/AnimationUtilities.js"],e["Core/Defaults.js"],e["Core/Templating.js"],e["Core/Utilities.js"]],function(t,e,i,s,r){let{animObject:o}=e,{defaultOptions:a}=i,{format:n}=s,{addEvent:h,crisp:l,erase:d,extend:c,fireEvent:p,getNestedProperty:u,isArray:g,isFunction:f,isNumber:m,isObject:x,merge:y,pick:b,syncTimeout:v,removeEvent:S,uniqueKey:C}=r;class k{animateBeforeDestroy(){let t=this,e={x:t.startXPos,opacity:0},i=t.getGraphicalProps();i.singular.forEach(function(i){t[i]=t[i].animate("dataLabel"===i?{x:t[i].startXPos,y:t[i].startYPos,opacity:0}:e)}),i.plural.forEach(function(e){t[e].forEach(function(e){e.element&&e.animate(c({x:t.startXPos},e.startYPos?{x:e.startXPos,y:e.startYPos}:{}))})})}applyOptions(t,e){let i=this.series,s=i.options.pointValKey||i.pointValKey;return c(this,t=k.prototype.optionsToObject.call(this,t)),this.options=this.options?c(this.options,t):t,t.group&&delete this.group,t.dataLabels&&delete this.dataLabels,s&&(this.y=k.prototype.getNestedProperty.call(this,s)),this.selected&&(this.state="select"),"name"in this&&void 0===e&&i.xAxis&&i.xAxis.hasNames&&(this.x=i.xAxis.nameToX(this)),void 0===this.x&&i?void 0===e?this.x=i.autoIncrement():this.x=e:m(t.x)&&i.options.relativeXValue&&(this.x=i.autoIncrement(t.x)),this.isNull=this.isValid&&!this.isValid(),this.formatPrefix=this.isNull?"null":"point",this}destroy(){if(!this.destroyed){let t=this,e=t.series,i=e.chart,s=e.options.dataSorting,r=i.hoverPoints,a=o(t.series.chart.renderer.globalAnimation),n=()=>{for(let e in(t.graphic||t.graphics||t.dataLabel||t.dataLabels)&&(S(t),t.destroyElements()),t)delete t[e]};t.legendItem&&i.legend.destroyItem(t),r&&(t.setState(),d(r,t),r.length||(i.hoverPoints=null)),t===i.hoverPoint&&t.onMouseOut(),s&&s.enabled?(this.animateBeforeDestroy(),v(n,a.duration)):n(),i.pointCount--}this.destroyed=!0}destroyElements(t){let e=this,i=e.getGraphicalProps(t);i.singular.forEach(function(t){e[t]=e[t].destroy()}),i.plural.forEach(function(t){e[t].forEach(function(t){t&&t.element&&t.destroy()}),delete e[t]})}firePointEvent(t,e,i){let s=this,r=this.series.options;s.manageEvent(t),"click"===t&&r.allowPointSelect&&(i=function(t){!s.destroyed&&s.select&&s.select(null,t.ctrlKey||t.metaKey||t.shiftKey)}),p(s,t,e,i)}getClassName(){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",""):"")}getGraphicalProps(t){let e,i;let s=this,r=[],o={singular:[],plural:[]};for((t=t||{graphic:1,dataLabel:1}).graphic&&r.push("graphic","connector"),t.dataLabel&&r.push("dataLabel","dataLabelPath","dataLabelUpper"),i=r.length;i--;)s[e=r[i]]&&o.singular.push(e);return["graphic","dataLabel"].forEach(function(e){let i=e+"s";t[e]&&s[i]&&o.plural.push(i)}),o}getLabelConfig(){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}}getNestedProperty(t){return t?0===t.indexOf("custom.")?u(t,this.options):this[t]:void 0}getZone(){let t=this.series,e=t.zones,i=t.zoneAxis||"y",s,r=0;for(s=e[0];this[i]>=s.value;)s=e[++r];return this.nonZonedColor||(this.nonZonedColor=this.color),s&&s.color&&!this.options.color?this.color=s.color:this.color=this.nonZonedColor,s}hasNewShapeType(){return(this.graphic&&(this.graphic.symbolName||this.graphic.element.nodeName))!==this.shapeType}constructor(t,e,i){this.formatPrefix="point",this.visible=!0,this.series=t,this.applyOptions(e,i),this.id??(this.id=C()),this.resolveColor(),t.chart.pointCount++,p(this,"afterInit")}isValid(){return(m(this.x)||this.x instanceof Date)&&m(this.y)}optionsToObject(t){let e=this.series,i=e.options.keys,s=i||e.pointArrayMap||["y"],r=s.length,o={},a,n=0,h=0;if(m(t)||null===t)o[s[0]]=t;else if(g(t))for(!i&&t.length>r&&("string"==(a=typeof t[0])?o.name=t[0]:"number"===a&&(o.x=t[0]),n++);h<r;)i&&void 0===t[n]||(s[h].indexOf(".")>0?k.prototype.setNestedProperty(o,t[n],s[h]):o[s[h]]=t[n]),n++,h++;else"object"==typeof t&&(o=t,t.dataLabels&&(e.hasDataLabels=()=>!0),t.marker&&(e._hasPointMarkers=!0));return o}pos(t,e=this.plotY){if(!this.destroyed){let{plotX:i,series:s}=this,{chart:r,xAxis:o,yAxis:a}=s,n=0,h=0;if(m(i)&&m(e))return t&&(n=o?o.pos:r.plotLeft,h=a?a.pos:r.plotTop),r.inverted&&o&&a?[a.len-e+h,o.len-i+n]:[i+n,e+h]}}resolveColor(){let t=this.series,e=t.chart.options.chart,i=t.chart.styledMode,s,r,o=e.colorCount,a;delete this.nonZonedColor,t.options.colorByPoint?(i||(s=(r=t.options.colors||t.chart.options.colors)[t.colorCounter],o=r.length),a=t.colorCounter,t.colorCounter++,t.colorCounter===o&&(t.colorCounter=0)):(i||(s=t.color),a=t.colorIndex),this.colorIndex=b(this.options.colorIndex,a),this.color=b(this.options.color,s)}setNestedProperty(t,e,i){return i.split(".").reduce(function(t,i,s,r){let o=r.length-1===s;return t[i]=o?e:x(t[i],!0)?t[i]:{},t[i]},t),t}shouldDraw(){return!this.isNull}tooltipFormatter(t){let e=this.series,i=e.tooltipOptions,s=b(i.valueDecimals,""),r=i.valuePrefix||"",o=i.valueSuffix||"";return e.chart.styledMode&&(t=e.chart.tooltip.styledModeFormat(t)),(e.pointArrayMap||["y"]).forEac
23499h(function(e){e="{point."+e,(r||o)&&(t=t.replace(RegExp(e+"}","g"),r+e+"}"+o)),t=t.replace(RegExp(e+"}","g"),e+":,."+s+"f}")}),n(t,{point:this,series:this.series},e.chart)}update(t,e,i,s){let r;let o=this,a=o.series,n=o.graphic,h=a.chart,l=a.options;function d(){o.applyOptions(t);let s=n&&o.hasMockGraphic,d=null===o.y?!s:s;n&&d&&(o.graphic=n.destroy(),delete o.hasMockGraphic),x(t,!0)&&(n&&n.element&&t&&t.marker&&void 0!==t.marker.symbol&&(o.graphic=n.destroy()),t?.dataLabels&&o.dataLabel&&(o.dataLabel=o.dataLabel.destroy())),r=o.index,a.updateParallelArrays(o,r),l.data[r]=x(l.data[r],!0)||x(t,!0)?o.options:b(t,l.data[r]),a.isDirty=a.isDirtyData=!0,!a.fixedBox&&a.hasCartesianSeries&&(h.isDirtyBox=!0),"point"===l.legendType&&(h.isDirtyLegend=!0),e&&h.redraw(i)}e=b(e,!0),!1===s?d():o.firePointEvent("update",{options:t},d)}remove(t,e){this.series.removePoint(this.series.data.indexOf(this),t,e)}select(t,e){let i=this,s=i.series,r=s.chart;t=b(t,!i.selected),this.selectedStaging=t,i.firePointEvent(t?"select":"unselect",{accumulate:e},function(){i.selected=i.options.selected=t,s.options.data[s.data.indexOf(i)]=i.options,i.setState(t&&"select"),e||r.getSelectedPoints().forEac
23499h(function(t){let e=t.series;t.selected&&t!==i&&(t.selected=t.options.selected=!1,e.options.data[e.data.indexOf(t)]=t.options,t.setState(r.hoverPoints&&e.options.inactiveOtherPoints?"inactive":""),t.firePointEvent("unselect"))})}),delete this.selectedStaging}onMouseOver(t){let{inverted:e,pointer:i}=this.series.chart;i&&(t=t?i.normalize(t):i.getChartCoordinatesFromPoint(this,e),i.runPointActions(t,this))}onMouseOut(){let t=this.series.chart;this.firePointEvent("mouseOut"),this.series.options.inactiveOtherPoints||(t.hoverPoints||[]).forEach(function(t){t.setState()}),t.hoverPoints=t.hoverPoint=null}manageEvent(t){let e=y(this.series.options.point,this.options),i=e.events?.[t];f(i)&&(!this.hcEvents?.[t]||this.hcEvents?.[t]?.map(t=>t.fn).indexOf(i)===-1)?(h(this,t,i),this.hasImportedEvents=!0):this.hasImportedEvents&&!i&&this.hcEvents?.[t]&&(S(this,t),delete this.hcEvents[t],Object.keys(this.hcEvents)||(this.hasImportedEvents=!1))}setState(e,i){let s=this.series,r=this.state,o=s.options.states[e||"normal"]||{},n=a.plotOptions[s.type].marker&&s.options.marker,h=n&&!1===n.enabled,l=n&&n.states&&n.states[e||"normal"]||{},d=!1===l.enabled,u=this.marker||{},g=s.chart,f=n&&s.markerAttribs,x=s.halo,y,v,S,C=s.stateMarkerGraphic,k;if((e=e||"")===this.state&&!i||this.selected&&"select"!==e||!1===o.enabled||e&&(d||h&&!1===l.enabled)||e&&u.states&&u.states[e]&&!1===u.states[e].enabled)return;if(this.state=e,f&&(y=s.markerAttribs(this,e)),this.graphic&&!this.hasMockGraphic){if(r&&this.graphic.removeClass("highcharts-point-"+r),e&&this.graphic.addClass("highcharts-point-"+e),!g.styledMode){v=s.pointAttribs(this,e),S=b(g.options.chart.animation,o.animation);let t=v.opacity;s.options.inactiveOtherPoints&&m(t)&&(this.dataLabels||[]).forEach(function(e){e&&!e.hasClass("highcharts-data-label-hidden")&&(e.animate({opacity:t},S),e.connector&&e.connector.animate({opacity:t},S))}),this.graphic.animate(v,S)}y&&this.graphic.animate(y,b(g.options.chart.animation,l.animation,n.animation)),C&&C.hide()}else e&&l&&(k=u.symbol||s.symbol,C&&C.currentSymbol!==k&&(C=C.destroy()),y&&(C?C[i?"animate":"attr"]({x:y.x,y:y.y}):k&&(s.stateMarkerGraphic=C=g.renderer.symbol(k,y.x,y.y,y.width,y.height).add(s.markerGroup),C.currentSymbol=k)),!g.styledMode&&C&&"inactive"!==this.state&&C.attr(s.pointAttribs(this,e))),C&&(C[e&&this.isInside?"show":"hide"](),C.element.point=this,C.addClass(this.getClassName(),!0));let M=o.halo,w=this.graphic||C,A=w&&w.visibility||"inherit";M&&M.size&&w&&"hidden"!==A&&!this.isCluster?(x||(s.halo=x=g.renderer.path().add(w.parentGroup)),x.show()[i?"animate":"attr"]({d:this.haloPath(M.size)}),x.attr({class:"highcharts-halo highcharts-color-"+b(this.colorIndex,s.colorIndex)+(this.className?" "+this.className:""),visibility:A,zIndex:-1}),x.point=this,g.styledMode||x.attr(c({fill:this.color||s.color,"fill-opacity":M.opacity},t.filterUserAttributes(M.attributes||{})))):x?.point?.haloPath&&!x.point.destroyed&&x.animate({d:x.point.haloPath(0)},null,x.hide),p(this,"afterSetState",{state:e})}haloPath(t){let e=this.pos();return e?this.series.chart.renderer.symbols.circle(l(e[0],1)-t,e[1]-t,2*t,2*t):[]}}return k}),i(e,"Core/Pointer.js",[e["Core/Color/Color.js"],e["Core/Globals.js"],e["Core/Utilities.js"]],function(t,e,i){var s;let{parse:r}=t,{charts:o,composed:a,isTouchDevice:n}=e,{addEvent:h,attr:l,css:d,extend:c,find:p,fireEvent:u,isNumber:g,isObject:f,objectEach:m,offset:x,pick:y,pushUnique:b,splat:v}=i;class S{applyInactiveState(t){let e=[],i;(t||[]).forEach(function(t){i=t.series,e.push(i),i.linkedParent&&e.push(i.linkedParent),i.linkedSeries&&(e=e.concat(i.linkedSeries)),i.navigatorSeries&&e.push(i.navigatorSeries)}),this.chart.series.forEach(function(t){-1===e.indexOf(t)?t.setState("inactive",!0):t.options.inactiveOtherPoints&&t.setAllPointsToState("inactive")})}destroy(){let t=this;this.eventsToUnbind.forEach(t=>t()),this.eventsToUnbind=[],!e.chartCount&&(S.unbindDocumentMouseUp&&(S.unbindDocumentMouseUp=S.unbindDocumentMouseUp()),S.unbindDocumentTouchEnd&&(S.unbindDocumentTouchEnd=S.unbindDocumentTouchEnd())),clearInterval(t.tooltipTimeout),m(t,function(e,i){t[i]=void 0})}getSelectionMarkerAttrs(t,e){let i={args:{chartX:t,chartY:e},attrs:{},shapeType:"rect"};return u(this,"getSelectionMarkerAttrs",i,i=>{let s;let{chart:r,zoomHor:o,zoomVert:a}
vendor: 4,219 bytes, line 23499
23499=this,{mouseDownX:n=0,mouseDownY:h=0}=r,l=i.attrs;l.x=r.plotLeft,l.y=r.plotTop,l.width=o?1:r.plotWidth,l.height=a?1:r.plotHeight,o&&(s=t-n,l.width=Math.max(1,Math.abs(s)),l.x=(s>0?0:s)+n),a&&(s=e-h,l.height=Math.max(1,Math.abs(s)),l.y=(s>0?0:s)+h)}),i}drag(t){let{chart:e}=this,{mouseDownX:i=0,mouseDownY:s=0}=e,{panning:o,panKey:a,selectionMarkerFill:n}=e.options.chart,h=e.plotLeft,l=e.plotTop,d=e.plotWidth,c=e.plotHeight,p=f(o)?o.enabled:o,u=a&&t[`${a}Key`],g=t.chartX,m=t.chartY,x,y=this.selectionMarker;if((!y||!y.touch)&&(g<h?g=h:g>h+d&&(g=h+d),m<l?m=l:m>l+c&&(m=l+c),this.hasDragged=Math.sqrt(Math.pow(i-g,2)+Math.pow(s-m,2)),this.hasDragged>10)){x=e.isInsidePlot(i-h,s-l,{visiblePlotOnly:!0});let{shapeType:a,attrs:d}=this.getSelectionMarkerAttrs(g,m);(e.hasCartesianSeries||e.mapView)&&this.hasZoom&&x&&!u&&!y&&(this.selectionMarker=y=e.renderer[a](),y.attr({class:"highcharts-selection-marker",zIndex:7}).add(),e.styledMode||y.attr({fill:n||r("#334eff").setOpacity(.25).get()})),y&&y.attr(d),x&&!y&&p&&e.pan(t,o)}}dragStart(t){let e=this.chart;e.mouseIsDown=t.type,e.cancelClick=!1,e.mouseDownX=t.chartX,e.mouseDownY=t.chartY}getSelectionBox(t){let e={args:{marker:t},result:t.getBBox()};return u(this,"getSelectionBox",e),e.result}drop(t){let e;let{chart:i,selectionMarker:s}=this;for(let t of i.axes)t.isPanning&&(t.isPanning=!1,(t.options.startOnTick||t.options.endOnTick||t.series.some(t=>t.boosted))&&(t.forceRedraw=!0,t.setExtremes(t.userMin,t.userMax,!1),e=!0));if(e&&i.redraw(),s&&t){if(this.hasDragged){let e=this.getSelectionBox(s);i.transform({axes:i.axes.filter(t=>t.zoomEnabled&&("xAxis"===t.coll&&this.zoomX||"yAxis"===t.coll&&this.zoomY)),selection:{originalEvent:t,xAxis:[],yAxis:[],...e},from:e})}g(i.index)&&(this.selectionMarker=s.destroy())}i&&g(i.index)&&(d(i.container,{cursor:i._cursor}),i.cancelClick=this.hasDragged>10,i.mouseIsDown=!1,this.hasDragged=0,this.pinchDown=[])}findNearestKDPoint(t,e,i){let s;return t.forEach(function(t){let r=!(t.noSharedTooltip&&e)&&0>t.options.findNearestPointBy.indexOf("y"),o=t.searchPoint(i,r);f(o,!0)&&o.series&&(!f(s,!0)||function(t,i){let s=t.distX-i.distX,r=t.dist-i.dist,o=i.series.group?.zIndex-t.series.group?.zIndex;return 0!==s&&e?s:0!==r?r:0!==o?o:t.series.index>i.series.index?-1:1}(s,o)>0)&&(s=o)}),s}getChartCoordinatesFromPoint(t,e){let{xAxis:i,yAxis:s}=t.series,r=t.shapeArgs;if(i&&s){let o=t.clientX??t.plotX??0,a=t.plotY||0;return t.isNode&&r&&g(r.x)&&g(r.y)&&(o=r.x,a=r.y),e?{chartX:s.len+s.pos-a,chartY:i.len+i.pos-o}:{chartX:o+i.pos,chartY:a+s.pos}}if(r&&r.x&&r.y)return{chartX:r.x,chartY:r.y}}getChartPosition(){if(this.chartPosition)return this.chartPosition;let{container:t}=this.chart,e=x(t);this.chartPosition={left:e.left,top:e.top,scaleX:1,scaleY:1};let{offsetHeight:i,offsetWidth:s}=t;return s>2&&i>2&&(this.chartPosition.scaleX=e.width/s,this.chartPosition.scaleY=e.height/i),this.chartPosition}getCoordinates(t){let e={xAxis:[],yAxis:[]};for(let i of this.chart.axes)e[i.isXAxis?"xAxis":"yAxis"].push({axis:i,value:i.toValue(t[i.horiz?"chartX":"chartY"])});return e}getHoverData(t,e,i,s,r,o){let a=[],n=function(t){return t.visible&&!(!r&&t.directTouch)&&y(t.options.enableMouseTracking,!0)},h=e,l,d={chartX:o?o.chartX:void 0,chartY:o?o.chartY:void 0,shared:r};u(this,"beforeGetHoverData",d),l=h&&!h.stickyTracking?[h]:i.filter(t=>t.stickyTracking&&(d.filter||n)(t));let c=s&&t||!o?t:this.findNearestKDPoint(l,r,o);return h=c&&c.series,c&&(r&&!h.noSharedTooltip?(l=i.filter(function(t){return d.filter?d.filter(t):n(t)&&!t.noSharedTooltip})).forEach(function(t){let e=p(t.points,function(t){return t.x===c.x&&!t.isNull});f(e)&&(t.boosted&&t.boost&&(e=t.boost.getPoint(e)),a.push(e))}):a.push(c)),u(this,"afterGetHoverData",d={hoverPoint:c}),{hoverPoint:d.hoverPoint,hoverSeries:h,hoverPoints:a}}getPointFromEvent(t){let e=t.target,i;for(;e&&!i;)i=e.point,e=e.parentNode;return i}onTrackerMouseOut(t){let e=this.chart,i=t.relatedTarget,s=e.hoverSeries;this.isDirectTouch=!1,!s||!i||s.stickyTracking||this.inClass(i,"highcharts-tooltip")||this.inClass(i,"highcharts-series-"+s.index)&&this.inClass(i,"highcharts-tracker")||s.onMouseOut()}inClass(t,e){let i=t,s;for(;i;){if(s=l(i,"class")){if(-1!==s.indexOf(e))return!0;
vendor: 4,445 bytes, line 23499
23499if(-1!==s.indexOf("highcharts-container"))return!1}i=i.parentElement}}constructor(t,e){this.hasDragged=0,this.pointerCaptureEventsToUnbind=[],this.eventsToUnbind=[],this.options=e,this.chart=t,this.runChartClick=!!e.chart.events?.click,this.pinchDown=[],this.setDOMEvents(),u(this,"afterInit")}normalize(t,e){let i=t.touches,s=i?i.length?i.item(0):y(i.changedTouches,t.changedTouches)[0]:t;e||(e=this.getChartPosition());let r=s.pageX-e.left,o=s.pageY-e.top;return c(t,{chartX:Math.round(r/=e.scaleX),chartY:Math.round(o/=e.scaleY)})}onContainerClick(t){let e=this.chart,i=e.hoverPoint,s=this.normalize(t),r=e.plotLeft,o=e.plotTop;!e.cancelClick&&(i&&this.inClass(s.target,"highcharts-tracker")?(u(i.series,"click",c(s,{point:i})),e.hoverPoint&&i.firePointEvent("click",s)):(c(s,this.getCoordinates(s)),e.isInsidePlot(s.chartX-r,s.chartY-o,{visiblePlotOnly:!0})&&u(e,"click",s)))}onContainerMouseDown(t){let i=(1&(t.buttons||t.button))==1;t=this.normalize(t),e.isFirefox&&0!==t.button&&this.onContainerMouseMove(t),(void 0===t.button||i)&&(this.zoomOption(t),i&&t.preventDefault?.(),this.dragStart(t))}onContainerMouseLeave(t){let{pointer:e}=o[y(S.hoverChartIndex,-1)]||{};t=this.normalize(t),this.onContainerMouseMove(t),e&&t.relatedTarget&&!this.inClass(t.relatedTarget,"highcharts-tooltip")&&(e.reset(),e.chartPosition=void 0)}onContainerMouseEnter(){delete this.chartPosition}onContainerMouseMove(t){let e=this.chart,i=e.tooltip,s=this.normalize(t);this.setHoverChartIndex(t),("mousedown"===e.mouseIsDown||this.touchSelect(s))&&this.drag(s),!e.openMenu&&(this.inClass(s.target,"highcharts-tracker")||e.isInsidePlot(s.chartX-e.plotLeft,s.chartY-e.plotTop,{visiblePlotOnly:!0}))&&!(i&&i.shouldStickOnContact(s))&&(this.inClass(s.target,"highcharts-no-tooltip")?this.reset(!1,0):this.runPointActions(s))}onDocumentTouchEnd(t){this.onDocumentMouseUp(t)}onContainerTouchMove(t){this.touchSelect(t)?this.onContainerMouseMove(t):this.touch(t)}onContainerTouchStart(t){this.touchSelect(t)?this.onContainerMouseDown(t):(this.zoomOption(t),this.touch(t,!0))}onDocumentMouseMove(t){let e=this.chart,i=e.tooltip,s=this.chartPosition,r=this.normalize(t,s);!s||e.isInsidePlot(r.chartX-e.plotLeft,r.chartY-e.plotTop,{visiblePlotOnly:!0})||i&&i.shouldStickOnContact(r)||this.inClass(r.target,"highcharts-tracker")||this.reset()}onDocumentMouseUp(t){o[y(S.hoverChartIndex,-1)]?.pointer?.drop(t)}pinch(t){let e=this,{chart:i,hasZoom:s,lastTouches:r}=e,o=[].map.call(t.touches||[],t=>e.normalize(t)),a=o.length,n=1===a&&(e.inClass(t.target,"highcharts-tracker")&&i.runTrackerClick||e.runChartClick),h=i.tooltip,l=1===a&&y(h?.options.followTouchMove,!0);a>1?e.initiated=!0:l&&(e.initiated=!1),s&&e.initiated&&!n&&!1!==t.cancelable&&t.preventDefault(),"touchstart"===t.type?(e.pinchDown=o,e.res=!0):l?this.runPointActions(e.normalize(t)):r&&(u(i,"touchpan",{originalEvent:t,touches:o},()=>{let e=t=>{let e=t[0],i=t[1]||e;return{x:e.chartX,y:e.chartY,width:i.chartX-e.chartX,height:i.chartY-e.chartY}};i.transform({axes:i.axes.filter(t=>t.zoomEnabled&&(this.zoomHor&&t.horiz||this.zoomVert&&!t.horiz)),to:e(o),from:e(r),trigger:t.type})}),e.res&&(e.res=!1,this.reset(!1,0))),e.lastTouches=o}reset(t,e){let i=this.chart,s=i.hoverSeries,r=i.hoverPoint,o=i.hoverPoints,a=i.tooltip,n=a&&a.shared?o:r;t&&n&&v(n).forEach(function(e){e.series.isCartesian&&void 0===e.plotX&&(t=!1)}),t?a&&n&&v(n).length&&(a.refresh(n),a.shared&&o?o.forEach(function(t){t.setState(t.state,!0),t.series.isCartesian&&(t.series.xAxis.crosshair&&t.series.xAxis.drawCrosshair(null,t),t.series.yAxis.crosshair&&t.series.yAxis.drawCrosshair(null,t))}):r&&(r.setState(r.state,!0),i.axes.forEach(function(t){t.crosshair&&r.series[t.coll]===t&&t.drawCrosshair(null,r)}))):(r&&r.onMouseOut(),o&&o.forEach(function(t){t.setState()}),s&&s.onMouseOut(),a&&a.hide(e),this.unDocMouseMove&&(this.unDocMouseMove=this.unDocMouseMove()),i.axes.forEach(function(t){t.hideCrosshair()}),i.hoverPoints=i.hoverPoint=void 0)}runPointActions(t,e,i){let s=this.chart,r=s.series,a=s.tooltip&&s.tooltip.options.enabled?s.tooltip:void 0,n=!!a&&a.shared,l=e||s.hoverPoint,d=l&&l.series||s.hoverSeries,c=(!t||"touchmove"!==t.type)&&(!!e||d&&d.directTouch&&this.isDirectTouch),u=this.getHoverData(l,d,r,c,n,t);l=u.hoverPoint,d=u.hoverSeries;let g=u.hoverPoints,f=d&&d.tooltipOptions.followPointer&&!d.tooltipOptions.split,m=n&&d&&!d.noSharedTooltip;if(l&&(i||l!==s.hoverPoint||a&&a.isHidden)){if((s.hoverPoints||[]).forEac
23499h(function(t){-1===g.indexOf(t)&&t.setState()}),s.hoverSeries!==d&&d.onMouseOver(),this.applyInactiveState(g),(g||[]).forEach(function(t){t.setState("hover")}),s.hoverPoint&&s.hoverPoint.firePointEvent("mouseOut"),!l.series)return;s.hoverPoints=g,s.hoverPoint=l,l.firePointEvent("mouseOver",void 0,()=>{a&&l&&a.refresh(m?g:l,t)})}else if(f&&a&&!a.isHidden){let e=a.getAnchor([{}],t);s.isInsidePlot(e[0],e[1],{visiblePlotOnly:!0})&&a.updatePosition({plotX:e[0],plotY:e[1]})}this.unDocMouseMove||(this.unDocMouseMove=h(s.container.ownerDocument,"mousemove",t=>o[S.hoverChartIndex??-1]?.pointer?.onDocumentMouseMove(t)),this.eventsToUnbind.push(this.unDocMouseMove)),s.axes.forEach(function(e){let i;let r=y((e.crosshair||{}).snap,!0);!r||(i=s.hoverPoint)&&i.series[e.coll]===e||(i=p(g,t=>t.series&&t.series[e.coll]===e)),i||!r?e.drawCrosshair(t,i):e.hideCrosshair()})}setDOMEvents(){let t=this.chart.container,e=t.ownerDocument;t.onmousedown=this.onContainerMouseDown.bind(this),t.onmousemove=this.onContainerMouseMove.bind(this),t.onclick=this.onContainerClick.bind(this),this.eventsToUnbind.push(h(t,"mouseenter",this.onContainerMouseEnter.bind(this)),h(t,"mouseleave",this.onContainerMouseLeave.bind(this))),S.unbindDocumentMouseUp||(S.unbindDocumentMouseUp=h(e,"mouseup",this.onDocumentMouseUp.bind(this)));let i=this.chart.renderTo.parentElement;for(;i&&"BODY"!==i.tagName;)this.eventsToUnbind.push(h(i,"scroll",()=>{delete this.chartPosition})),i=i.parentElement;this.eventsToUnbind.push(h(t,"touchstart",this.onContainerTouchStart.bind(this),{passive:!1}),h(t,"touchmove",this.onContainerTouchMove.bind(this),{passive:!1})),S.unbindDocumentTouchEnd||(S.unbindDocumentTouchEnd=h(e,"touchend",this.onDocumentTouchEnd.bind(this),{passive:!1})),this.setPointerCapture(),h(this.chart,"redraw",this.setPointerCapture.bind(this))}setPointerCapture(){if(!n)return;let t=this.pointerCaptureEventsToUnbind,e=this.chart,i=e.container,s=y(e.options.tooltip?.followTouchMove,!0)&&e.series.some(t=>t.options.findNearestPointBy.indexOf("y")>-1);!this.hasPointerCapture&&s?(t.push(h(i,"pointerdown",t=>{t.target?.hasPointerCapture(t.pointerId)&&t.target?.releasePointerCapture(t.pointerId)}),h(i,"pointermove",t=>{e.pointer?.getPointFromEvent(t)?.onMouseOver(t)})),e.styledMode||d(i,{"touch-action":"none"}),i.className+=" highcharts-no-touch-action",this.hasPointerCapture=!0):this.hasPointerCapture&&!s&&(t.forEach(t=>t()),t.length=0,e.styledMode||d(i,{"touch-action":y(e.options.chart.style?.["touch-action"],"manipulation")}),i.className=i.className.replace(" highcharts-no-touch-action",""),this.hasPointerCapture=!1)}setHoverChartIndex(t){let i=this.chart,s=e.charts[y(S.hoverChartIndex,-1)];s&&s!==i&&s.pointer?.onContainerMouseLeave(t||{relatedTarget:i.container}),s&&s.mouseIsDown||(S.hoverChartIndex=i.index)}touch(t,e){let i;let{chart:s,pinchDown:r=[]}=this;this.setHoverChartIndex(),1===t.touches.length?(t=this.normalize(t),s.isInsidePlot(t.chartX-s.plotLeft,t.chartY-s.plotTop,{visiblePlotOnly:!0})&&!s.openMenu?(e&&this.runPointActions(t),"touchmove"===t.type&&(i=!!r[0]&&Math.pow(r[0].chartX-t.chartX,2)+Math.pow(r[0].chartY-t.chartY,2)>=16),y(i,!0)&&this.pinch(t)):e&&this.reset()):2===t.touches.length&&this.pinch(t)}touchSelect(t){return!!(this.chart.zooming.singleTouch&&t.touches&&1===t.touches.length)}zoomOption(t){let e=this.chart,i=e.inverted,s=e.zooming.type||"",r,o;/touch/.test(t.type)&&(s=y(e.zooming.pinchType,s)),this.zoomX=r=/x/.test(s),this.zoomY=o=/y/.test(s),this.zoomHor=r&&!i||o&&i,this.zoomVert=o&&!i||r&&i,this.hasZoom=r||o}}return(s=S||(S={})).compose=function(t){b(a,"Core.Pointer")&&h(t,"beforeRender",function(){this.pointer=new s(this,this.options)})},S}),i(e,"Core/Legend/Legend.js",[e["Core/Animation/AnimationUtilities.js"],e["Core/Templating.js"],e["Core/Globals.js"],e["Core/Series/Point.js"],e["Core/Renderer/RendererUtilities.js"],e["Core/Utilities.js"]],function(t,e,i,s,r,o){var a;let{animObject:n,setAnimation:h}=t,{format:l}=e,{composed:d,marginNames:c}=i,{distribute:p}=r,{addEvent:u,createElement:g,css:f,defined:m,discardElement:x,find:y,fireEvent:b,isNumber:v,merge:S,pick:C,pushUnique:k,relativeLength:M,stableSort:w,syncTimeout:A}=o;class T{constructor(t,e){this.allItems=[],this.initialItemY=0,this.itemHeight=0,this.itemMarginBottom=0,this.itemMarginTop=0,this.itemX=0,this.itemY=0,this.lastItemY=0,this.lastLineHeight=0,this.legendHeight=0,this.legendWidth=0,this.maxItemWidth=0,this.maxLegendWidth=0,this.offsetWidth=0,this.padding=0,this.pages=[],this.symbolHeight=0,this.symbolWi
23499dth=0,this.titleHeight=0,this.totalItemWidth=0,this.widthOption=0,this.chart=t,this.setOptions(e),e.enabled&&(this.render(),u(this.chart,"endResize",function(){this.legend.positionCheckboxes()})),u(this.chart,"render",()=>{this.options.enabled&&this.proximate&&(this.proximatePositions(),this.positionItems())})}setOptions(t){let e=C(t.padding,8);this.options=t,this.chart.styledMode||(this.itemStyle=t.itemStyle,this.itemHiddenStyle=S(this.itemStyle,t.itemHiddenStyle)),this.itemMarginTop=t.itemMarginTop,this.itemMarginBottom=t.itemMarginBottom,this.padding=e,this.initialItemY=e-5,this.symbolWidth=C(t.symbolWidth,16),this.pages=[],this.proximate="proximate"===t.layout&&!this.chart.inverted,this.baseline=void 0}update(t,e){let i=this.chart;this.setOptions(S(!0,this.options,t)),this.destroy(),i.isDirtyLegend=i.isDirtyBox=!0,C(e,!0)&&i.redraw(),b(this,"afterUpdate",{redraw:e})}colorizeItem(t,e){let{area:i,group:s,label:r,line:o,symbol:a}=t.legendItem||{};if(s?.[e?"removeClass":"addClass"]("highcharts-legend-item-hidden"),!this.chart.styledMode){let{itemHiddenStyle:s={}}=this,n=s.color,{fillColor:h,fillOpacity:l,lineColor:d,marker:c}=t.options,p=t=>(!e&&(t.fill&&(t.fill=n),t.stroke&&(t.stroke=n)),t);r?.css(S(e?this.itemStyle:s)),o?.attr(p({stroke:d||t.color})),a&&a.attr(p(c&&a.isMarker?t.pointAttribs():{fill:t.color})),i?.attr(p({fill:h||t.color,"fill-opacity":h?1:l??.75}))}b(this,"afterColorizeItem",{item:t,visible:e})}positionItems(){this.allItems.forEach(this.positionItem,this),this.chart.isResizing||this.positionCheckboxes()}positionItem(t){let{group:e,x:i=0,y:s=0}=t.legendItem||{},r=this.options,o=r.symbolPadding,a=!r.rtl,n=t.checkbox;if(e&&e.element){let r={translateX:a?i:this.legendWidth-i-2*o-4,translateY:s};e[m(e.translateY)?"animate":"attr"](r,void 0,()=>{b(this,"afterPositionItem",{item:t})})}n&&(n.x=i,n.y=s)}destroyItem(t){let e=t.checkbox,i=t.legendItem||{};for(let t of["group","label","line","symbol"])i[t]&&(i[t]=i[t].destroy());e&&x(e),t.legendItem=void 0}destroy(){for(let t of this.getAllItems())this.destroyItem(t);for(let t of["clipRect","up","down","pager","nav","box","title","group"])this[t]&&(this[t]=this[t].destroy());this.display=null}positionCheckboxes(){let t;let e=this.group&&this.group.alignAttr,i=this.clipHeight||this.legendHeight,s=this.titleHeight;e&&(t=e.translateY,this.allItems.forEach(function(r){let o;let a=r.checkbox;a&&(o=t+s+a.y+(this.scrollOffset||0)+3,f(a,{left:e.translateX+r.checkboxOffset+a.x-20+"px",top:o+"px",display:this.proximate||o>t-6&&o<t+i-6?"":"none"}))},this))}renderTitle(){let t=this.options,e=this.padding,i=t.title,s,r=0;i.text&&(this.title||(this.title=this.chart.renderer.label(i.text,e-3,e-4,void 0,void 0,void 0,t.useHTML,void 0,"legend-title").attr({zIndex:1}),this.chart.styledMode||this.title.css(i.style),this.title.add(this.group)),i.width||this.title.css({width:this.maxLegendWidth+"px"}),r=(s=this.title.getBBox()).height,this.offsetWidth=s.width,this.contentGroup.attr({translateY:r})),this.titleHeight=r}setText(t){let e=this.options;t.legendItem.label.attr({text:e.labelFormat?l(e.labelFormat,t,this.chart):e.labelFormatter.call(t)})}renderItem(t){let e=t.legendItem=t.legendItem||{},i=this.chart,s=i.renderer,r=this.options,o="horizontal"===r.layout,a=this.symbolWidth,n=r.symbolPadding||0,h=this.itemStyle,l=this.itemHiddenStyle,d=o?C(r.itemDistance,20):0,c=!r.rtl,p=!t.series,u=!p&&t.series.drawLegendSymbol?t.series:t,g=u.options,f=!!this.createCheckboxForItem&&g&&g.showCheckbox,m=r.useHTML,x=t.options.className,y=e.label,b=a+n+d+(f?20:0);!y&&(e.group=s.g("legend-item").addClass("highcharts-"+u.type+"-series highcharts-color-"+t.colorIndex+(x?" "+x:"")+(p?" highcharts-series-"+t.index:"")).attr({zIndex:1}).add(this.scrollGroup),e.label=y=s.text("",c?a+n:-n,this.baseline||0,m),i.styledMode||y.css(S(t.visible?h:l)),y.attr({align:c?"left":"right",zIndex:2}).add(e.group),!this.baseline&&(this.fontMetrics=s.fontMetrics(y),this.baseline=this.fontMetrics.f+3+this.itemMarginTop,y.attr("y",this.baseline),this.symbolHeight=C(r.symbolHeight,this.fontMetrics.f),r.squareSymbol&&(this.symbolWi
23499dth=C(r.symbolWidth,Math.max(this.symbolHeight,16)),b=this.symbolWidth+n+d+(f?20:0),c&&y.attr("x",this.symbolWidth+n))),u.drawLegendSymbol(this,t),this.setItemEvents&&this.setItemEvents(t,y,m)),f&&!t.checkbox&&this.createCheckboxForItem&&this.createCheckboxForItem(t),this.colorizeItem(t,t.visible),(i.styledMode||!h.width)&&y.css({width:(r.itemWidth||this.widthOption||i.spacingBox.width)-b+"px"}),this.setText(t);let v=y.getBBox(),k=this.fontMetrics&&this.fontMetrics.h||0;t.itemWidth=t.checkboxOffset=r.itemWidth||e.labelWidth||v.width+b,this.maxItemWidth=Math.max(this.maxItemWidth,t.itemWidth),this.totalItemWidth+=t.itemWidth,this.itemHeight=t.itemHeight=Math.round(e.labelHeight||(v.height>1.5*k?v.height:k))}layoutItem(t){let e=this.options,i=this.padding,s="horizontal"===e.layout,r=t.itemHeight,o=this.itemMarginBottom,a=this.itemMarginTop,n=s?C(e.itemDistance,20):0,h=this.maxLegendWidth,l=e.alignColumns&&this.totalItemWidth>h?this.maxItemWidth:t.itemWidth,d=t.legendItem||{};s&&this.itemX-i+l>h&&(this.itemX=i,this.lastLineHeight&&(this.itemY+=a+this.lastLineHeight+o),this.lastLineHeight=0),this.lastItemY=a+this.itemY+o,this.lastLineHeight=Math.max(r,this.lastLineHeight),d.x=this.itemX,d.y=this.itemY,s?this.itemX+=l:(this.itemY+=a+r+o,this.lastLineHeight=r),this.offsetWidth=this.widthOption||Math.max((s?this.itemX-i-(t.checkbox?0:n):l)+i,this.offsetWidth)}getAllItems(){let t=[];return this.chart.series.forEach(function(e){let i=e&&e.options;e&&C(i.showInLegend,!m(i.linkedTo)&&void 0,!0)&&(t=t.concat((e.legendItem||{}).labels||("point"===i.legendType?e.data:e)))}),b(this,"afterGetAllItems",{allItems:t}),t}getAlignment(){let t=this.options;return this.proximate?t.align.charAt(0)+"tv":t.floating?"":t.align.charAt(0)+t.verticalAlign.charAt(0)+t.layout.charAt(0)}adjustMargins(t,e){let i=this.chart,s=this.options,r=this.getAlignment();r&&[/(lth|ct|rth)/,/(rtv|rm|rbv)/,/(rbh|cb|lbh)/,/(lbv|lm|ltv)/].forEac
vendor: 5,700 bytes, line 23499
23499h(function(o,a){o.test(r)&&!m(t[a])&&(i[c[a]]=Math.max(i[c[a]],i.legend[(a+1)%2?"legendHeight":"legendWidth"]+[1,-1,-1,1][a]*s[a%2?"x":"y"]+C(s.margin,12)+e[a]+(i.titleOffset[a]||0)))})}proximatePositions(){let t;let e=this.chart,i=[],s="left"===this.options.align;for(let r of(this.allItems.forEach(function(t){let r,o,a=s,n,h;t.yAxis&&(t.xAxis.options.reversed&&(a=!a),t.points&&(r=y(a?t.points:t.points.slice(0).reverse(),function(t){return v(t.plotY)})),o=this.itemMarginTop+t.legendItem.label.getBBox().height+this.itemMarginBottom,h=t.yAxis.top-e.plotTop,n=t.visible?(r?r.plotY:t.yAxis.height)+(h-.3*o):h+t.yAxis.height,i.push({target:n,size:o,item:t}))},this),p(i,e.plotHeight)))t=r.item.legendItem||{},v(r.pos)&&(t.y=e.plotTop-e.spacing[0]+r.pos)}render(){let t=this.chart,e=t.renderer,i=this.options,s=this.padding,r=this.getAllItems(),o,a,n,h=this.group,l,d=this.box;this.itemX=s,this.itemY=this.initialItemY,this.offsetWidth=0,this.lastItemY=0,this.widthOption=M(i.width,t.spacingBox.width-s),l=t.spacingBox.width-2*s-i.x,["rm","lm"].indexOf(this.getAlignment().substring(0,2))>-1&&(l/=2),this.maxLegendWidth=this.widthOption||l,h||(this.group=h=e.g("legend").addClass(i.className||"").attr({zIndex:7}).add(),this.contentGroup=e.g().attr({zIndex:1}).add(h),this.scrollGroup=e.g().add(this.contentGroup)),this.renderTitle(),w(r,(t,e)=>(t.options&&t.options.legendIndex||0)-(e.options&&e.options.legendIndex||0)),i.reversed&&r.reverse(),this.allItems=r,this.display=o=!!r.length,this.lastLineHeight=0,this.maxItemWidth=0,this.totalItemWidth=0,this.itemHeight=0,r.forEach(this.renderItem,this),r.forEach(this.layoutItem,this),a=(this.widthOption||this.offsetWidth)+s,n=this.lastItemY+this.lastLineHeight+this.titleHeight,n=this.handleOverflow(n)+s,d||(this.box=d=e.rect().addClass("highcharts-legend-box").attr({r:i.borderRadius}).add(h)),t.styledMode||d.attr({stroke:i.borderColor,"stroke-width":i.borderWidth||0,fill:i.backgroundColor||"none"}).shadow(i.shadow),a>0&&n>0&&d[d.placed?"animate":"attr"](d.crisp.call({},{x:0,y:0,width:a,height:n},d.strokeWidth())),h[o?"show":"hide"](),t.styledMode&&"none"===h.getStyle("display")&&(a=n=0),this.legendWidth=a,this.legendHeight=n,o&&this.align(),this.proximate||this.positionItems(),b(this,"afterRender")}align(t=this.chart.spacingBox){let e=this.chart,i=this.options,s=t.y;/(lth|ct|rth)/.test(this.getAlignment())&&e.titleOffset[0]>0?s+=e.titleOffset[0]:/(lbh|cb|rbh)/.test(this.getAlignment())&&e.titleOffset[2]>0&&(s-=e.titleOffset[2]),s!==t.y&&(t=S(t,{y:s})),e.hasRendered||(this.group.placed=!1),this.group.align(S(i,{width:this.legendWidth,height:this.legendHeight,verticalAlign:this.proximate?"top":i.verticalAlign}),!0,t)}handleOverflow(t){let e=this,i=this.chart,s=i.renderer,r=this.options,o=r.y,a="top"===r.verticalAlign,n=this.padding,h=r.maxHeight,l=r.navigation,d=C(l.animation,!0),c=l.arrowSize||12,p=this.pages,u=this.allItems,g=function(t){"number"==typeof t?S.attr({height:t}):S&&(e.clipRect=S.destroy(),e.contentGroup.clip()),e.contentGroup.div&&(e.contentGroup.div.style.clip=t?"rect("+n+"px,9999px,"+(n+t)+"px,0)":"auto")},f=function(t){return e[t]=s.circle(0,0,1.3*c).translate(c/2,c/2).add(v),i.styledMode||e[t].attr("fill","rgba(0,0,0,0.0001)"),e[t]},m,x,y,b=i.spacingBox.height+(a?-o:o)-n,v=this.nav,S=this.clipRect;return"horizontal"!==r.layout||"middle"===r.verticalAlign||r.floating||(b/=2),h&&(b=Math.min(b,h)),p.length=0,t&&b>0&&t>b&&!1!==l.enabled?(this.clipHeight=m=Math.max(b-20-this.titleHeight-n,0),this.currentPage=C(this.currentPage,1),this.fullHeight=t,u.forEach((t,e)=>{let i=(y=t.legendItem||{}).y||0,s=Math.round(y.label.getBBox().height),r=p.length;(!r||i-p[r-1]>m&&(x||i)!==p[r-1])&&(p.push(x||i),r++),y.pageIx=r-1,x&&((u[e-1].legendItem||{}).pageIx=r-1),e===u.length-1&&i+s-p[r-1]>m&&i>p[r-1]&&(p.push(i),y.pageIx=r),i!==x&&(x=i)}),S||(S=e.clipRect=s.clipRect(0,n-2,9999,0),e.contentGroup.clip(S)),g(m),v||(this.nav=v=s.g().attr({zIndex:1}).add(this.group),this.up=s.symbol("triangle",0,0,c,c).add(v),f("upTracker").on("click",function(){e.scroll(-1,d)}),this.pager=s.text("",15,10).addClass("highcharts-legend-navigation"),!i.styledMode&&l.style&&this.pager.css(l.style),this.pager.add(v),this.down=s.symbol("triangle-down",0,0,c,c).add(v),f("downTracker").on("click",function(){e.scroll(1,d)})),e.scroll(0),t=b):v&&(g(),this.nav=v.destroy(),this.scrollGroup.attr({translateY:1}),this.clipHeight=0),t}scroll(t,e){let i=this.chart,s=this.pages,r=s.length,o=this.clipHeight,a=this.options.navigation,l=this.pager,d=this.padding,c=this.currentPage+t;c>r&&(c=r),c>0&&(void 0!==e&&h(e,i),this.nav.attr({translateX:d,translateY:o+this.padding+7+this.titleHeight,visibility:"inherit"}),[this.up,this.upTracker].forEach(function(t){t.attr({class:1===c?"highcharts-legend-nav-inactive":"highcharts-legend-nav-active"})}),l.attr({text:c+"/"+r}),[this.down,this.downTracker].forEach(function(t){t.attr({x:18+this.pager.getBBox().width,class:c===r?"highcharts-legend-nav-inactive":"highcharts-legend-nav-active"})},this),i.styledMode||(this.up.attr({fill:1===c?a.inactiveColor:a.activeColor}),this.upTracker.css({cursor:1===c?"default":"pointer"}),this.down.attr({fill:c===r?a.inactiveColor:a.activeColor}),this.downTracker.css({cursor:c===r?"default":"pointer"})),this.scrollOffset=-s[c-1]+this.initialItemY,this.scrollGroup.animate({translateY:this.scrollOffset}),this.currentPage=c,this.positionCheckboxes(),A(()=>{b(this,"afterScroll",{currentPage:c})},n(C(e,i.renderer.globalAnimation,!0)).duration))}setItemEvents(t,e,i){let r=this,o=t.legendItem||{},a=r.chart.renderer.boxWrapper,n=t instanceof s,h="highcharts-legend-"+(n?"point":"series")+"-active",l=r.chart.styledMode,d=i?[e,o.symbol]:[o.group],c=e=>
23499{r.allItems.forEach(i=>{t!==i&&[i].concat(i.linkedSeries||[]).forEach(t=>{t.setState(e,!n)})})};for(let i of d)i&&i.on("mouseover",function(){t.visible&&c("inactive"),t.setState("hover"),t.visible&&a.addClass(h),l||e.css(r.options.itemHoverStyle)}).on("mouseout",function(){r.chart.styledMode||e.css(S(t.visible?r.itemStyle:r.itemHiddenStyle)),c(""),a.removeClass(h),t.setState()}).on("click",function(e){let i="legendItemClick",s=function(){t.setVisible&&t.setVisible(),c(t.visible?"inactive":"")};a.removeClass(h),e={browserEvent:e},t.firePointEvent?t.firePointEvent(i,e,s):b(t,i,e,s)})}createCheckboxForItem(t){t.checkbox=g("input",{type:"checkbox",className:"highcharts-legend-checkbox",checked:t.selected,defaultChecked:t.selected},this.options.itemCheckboxStyle,this.chart.container),u(t.checkbox,"click",function(e){let i=e.target;b(t.series||t,"checkboxClick",{checked:i.checked,item:t},function(){t.select()})})}}return(a=T||(T={})).compose=function(t){k(d,"Core.Legend")&&u(t,"beforeMargins",function(){this.legend=new a(this,this.options.legend)})},T}),i(e,"Core/Legend/LegendSymbol.js",[e["Core/Utilities.js"]],function(t){var e;let{extend:i,merge:s,pick:r}=t;return function(t){function e(t,e,o){let a=this.legendItem=this.legendItem||{},{chart:n,options:h}=this,{baseline:l=0,symbolWidth:d,symbolHeight:c}=t,p=this.symbol||"circle",u=c/2,g=n.renderer,f=a.group,m=l-Math.round(c*(o?.4:.3)),x={},y,b=h.marker,v=0;if(n.styledMode||(x["stroke-width"]=Math.min(h.lineWidth||0,24),h.dashStyle?x.dashstyle=h.dashStyle:"square"===h.linecap||(x["stroke-linecap"]="round")),a.line=g.path().addClass("highcharts-graph").attr(x).add(f),o&&(a.area=g.path().addClass("highcharts-area").add(f)),x["stroke-linecap"]&&(v=Math.min(a.line.strokeWidth(),d)/2),d){let t=[["M",v,m],["L",d-v,m]];a.line.attr({d:t}),a.area?.attr({d:[...t,["L",d-v,l],["L",v,l]]})}if(b&&!1!==b.enabled&&d){let t=Math.min(r(b.radius,u),u);0===p.indexOf("url")&&(b=s(b,{width:c,height:c}),t=0),a.symbol=y=g.symbol(p,d/2-t,m-t,2*t,2*t,i({context:"legend"},b)).addClass("highcharts-point").add(f),y.isMarker=!0}}t.areaMarker=function(t,i){e.call(this,t,i,!0)},t.lineMarker=e,t.rectangle=function(t,e){let i=e.legendItem||{},s=t.options,o=t.symbolHeight,a=s.squareSymbol,n=a?o:t.symbolWidth;i.symbol=this.chart.renderer.rect(a?(t.symbolWidth-o)/2:0,t.baseline-o+1,n,o,r(t.options.symbolRadius,o/2)).addClass("highcharts-point").attr({zIndex:3}).add(i.group)}}(e||(e={})),e}),i(e,"Core/Series/SeriesDefaults.js",[],function(){return{lineWidth:2,allowPointSelect:!1,crisp:!0,showCheckbox:!1,animation:{duration:1e3},enableMouseTracking:!0,events:{},marker:{enabledThreshold:2,lineColor:"#ffffff",lineWidth:0,radius:4,states:{normal:{animation:!0},hover:{animation:{duration:150},enabled:!0,radiusPlus:2,lineWidthPlus:1},select:{fillColor:"#cccccc",lineColor:"#000000",lineWidth:2}}},point:{events:{}},dataLabels:{animation:{},align:"center",borderWidth:0,defer:!0,formatter:function(){let{numberFormatter:t}=this.series.chart;return"number"!=typeof this.y?"":t(this.y,-1)},padding:5,style:{fontSize:"0.7em",fontWeight:"bold",color:"contrast",textOutline:"1px contrast"},verticalAlign:"bottom",x:0,y:0},cropThreshold:300,opacity:1,pointRange:0,softThreshold:!0,states:{normal:{animation:!0},hover:{animation:{duration:150},lineWidthPlus:1,marker:{},halo:{size:10,opacity:.25}},select:{animation:{duration:0}},inactive:{animation:{duration:150},opacity:.2}},stickyTracking:!0,turboThreshold:1e3,findNearestPointBy:"x"}}),i(e,"Core/Series/SeriesRegistry.js",[e["Core/Globals.js"],e["Core/Defaults.js"],e["Core/Series/Point.js"],e["Core/Utilities.js"]],function(t,e,i,s){var r;let{defaultOptions:o}=e,{extend:a,extendClass:n,merge:h}=s;return function(e){function s(t,s){let r=o.plotOptions||{},a=s.defaultOptions,n=s.prototype;return n.type=t,n.pointClass||(n.pointClass=i),!e.seriesTypes[t]&&(a&&(r[t]=a),e.seriesTypes[t]=s,!0)}e.seriesTypes=t.seriesTypes,e.registerSeriesType=s,e.seriesType=function(t,r,l,d,c){let p=o.plotOptions||{};if(r=r||"",p[t]=h(p[r],l),delete e.seriesTypes[t],s(t,n(e.seriesTypes[r]||function(){},d)),e.seriesTypes[t].prototype.type=t,c){class s extends i{}a(s.prototype,c),e.seriesTypes[t].prototype.pointClass=s}return e.seriesTypes[t]}}(r||(r={})),r}
23499),i(e,"Core/Series/Series.js",[e["Core/Animation/AnimationUtilities.js"],e["Core/Defaults.js"],e["Core/Foundation.js"],e["Core/Globals.js"],e["Core/Legend/LegendSymbol.js"],e["Core/Series/Point.js"],e["Core/Series/SeriesDefaults.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Renderer/SVG/SVGElement.js"],e["Core/Utilities.js"]],function(t,e,i,s,r,o,a,n,h,l){let{animObject:d,setAnimation:c}=t,{defaultOptions:p}=e,{registerEventOptions:u}=i,{svg:g,win:f}=s,{seriesTypes:m}=n,{arrayMax:x,arrayMin:y,clamp:b,correctFloat:v,crisp:S,defined:C,destroyObjectProperties:k,diffObjects:M,erase:w,error:A,extend:T,find:P,fireEvent:L,getClosestDistance:O,getNestedProperty:D,insertItem:E,isArray:I,isNumber:j,isString:B,merge:R,objectEach:z,pick:N,removeEvent:W,splat:G,syncTimeout:H}=l;class X{constructor(){this.zoneAxis="y"}init(t,e){let i;L(this,"init",{options:e});let s=this,r=t.series;this.eventsToUnbind=[],s.chart=t,s.options=s.setOptions(e);let o=s.options,a=!1!==o.visible;s.linkedSeries=[],s.bindAxes(),T(s,{name:o.name,state:"",visible:a,selected:!0===o.selected}),u(this,o);let n=o.events;(n&&n.click||o.point&&o.point.events&&o.point.events.click||o.allowPointSelect)&&(t.runTrackerClick=!0),s.getColor(),s.getSymbol(),s.parallelArrays.forEach(function(t){s[t+"Data"]||(s[t+"Data"]=[])}),s.isCartesian&&(t.hasCartesianSeries=!0),r.length&&(i=r[r.length-1]),s._i=N(i&&i._i,-1)+1,s.opacity=s.options.opacity,t.orderItems("series",E(this,r)),o.dataSorting&&o.dataSorting.enabled?s.setDataSortingOptions():s.points||s.data||s.setData(o.data,!1),L(this,"afterInit")}is(t){return m[t]&&this instanceof m[t]}bindAxes(){let t;let e=this,i=e.options,s=e.chart;L(this,"bindAxes",null,function(){(e.axisTypes||[]).forEach(function(r){(s[r]||[]).forEach(function(s){t=s.options,
23499(N(i[r],0)===s.index||void 0!==i[r]&&i[r]===t.id)&&(E(e,s.series),e[r]=s,s.isDirty=!0)}),e[r]||e.optionalAxis===r||A(18,!0,s)})}),L(this,"afterBindAxes")}updateParallelArrays(t,e,i){let s=t.series,r=j(e)?function(i){let r="y"===i&&s.toYData?s.toYData(t):t[i];s[i+"Data"][e]=r}:function(t){Array.prototype[e].apply(s[t+"Data"],i)};s.parallelArrays.forEach(r)}hasData(){return this.visible&&void 0!==this.dataMax&&void 0!==this.dataMin||this.visible&&this.yData&&this.yData.length>0}hasMarkerChanged(t,e){let i=t.marker,s=e.marker||{};return i&&(s.enabled&&!i.enabled||s.symbol!==i.symbol||s.height!==i.height||s.width!==i.width)}autoIncrement(t){let e=this.options,i=e.pointIntervalUnit,s=e.relativeXValue,r=this.chart.time,o=this.xIncrement,a,n;return(o=N(o,e.pointStart,0),this.pointInterval=n=N(this.pointInterval,e.pointInterval,1),s&&j(t)&&(n*=t),i&&(a=new r.Date(o),"day"===i?r.set("Date",a,r.get("Date",a)+n):"month"===i?r.set("Month",a,r.get("Month",a)+n):"year"===i&&r.set("FullYear",a,r.get("FullYear",a)+n),n=a.getTime()-o),s&&j(t))?o+n:(this.xIncrement=o+n,o)}setDataSortingOptions(){let t=this.options;T(this,{requireSorting:!1,sorted:!1,enabledDataSorting:!0,allowDG:!1}),C(t.pointRange)||(t.pointRange=1)}setOptions(t){let e;let i=this.chart,s=i.options.plotOptions,r=i.userOptions||{},o=R(t),a=i.styledMode,n={plotOptions:s,userOptions:o};L(this,"setOptions",n);let h=n.plotOptions[this.type],l=r.plotOptions||{},d=l.series||{},c=p.plotOptions[this.type]||{},u=l[this.type]||{};this.userOptions=n.userOptions;let g=R(h,s.series,u,o);this.tooltipOptions=R(p.tooltip,p.plotOptions.series?.tooltip,c?.tooltip,i.userOptions.tooltip,l.series?.tooltip,u.tooltip,o.tooltip),this.stickyTracking=N(o.stickyTracking,u.stickyTracking,d.stickyTracking,!!this.tooltipOptions.shared&&!this.noSharedTooltip||g.stickyTracking),null===h.marker&&delete g.marker,this.zoneAxis=g.zoneAxis||"y";let f=this.zones=(g.zones||[]).map(t=>({...t}));return(g.negativeColor||g.negativeFillColor)&&!g.zones&&(e={value:g[this.zoneAxis+"Threshold"]||g.threshold||0,className:"highcharts-negative"},a||(e.color=g.negativeColor,e.fillColor=g.negativeFillColor),f.push(e)),f.length&&C(f[f.length-1].value)&&f.push(a?{}:{color:this.color,fillColor:this.fillColor}),L(this,"afterSetOptions",{options:g}),g}getName(){return N(this.options.name,"Series "+(this.index+1))}getCyclic(t,e,i){let s,r;let o=this.chart,a=`${t}Index`,n=`${t}Counter`,h=i?.length||o.options.chart.colorCount;!e&&(C(r=N("color"===t?this.options.colorIndex:void 0,this[a]))?s=r:(o.series.length||(o[n]=0),s=o[n]%h,o[n]+=1),i&&(e=i[s])),void 0!==s&&(this[a]=s),this[t]=e}getColor(){this.chart.styledMode?this.getCyclic("color"):this.options.colorByPoint?this.color="#cccccc":this.getCyclic("color",this.options.color||p.plotOptions[this.type].color,this.chart.options.colors)}getPointsCollection(){return(this.hasGroupedData?this.points:this.data)||[]}getSymbol(){let t=this.options.marker;this.getCyclic("symbol",t.symbol,this.chart.options.symbols)}findPointIndex(t,e){let i,s,r;let a=t.id,n=t.x,h=this.points,l=this.options.dataSorting;if(a){let t=this.chart.get(a);t instanceof o&&(i=t)}else if(this.linkedParent||this.enabledDataSorting||this.options.relativeXValue){let e=e=>!e.touched&&e.index===t.index;if(l&&l.matchByName?e=e=>!e.touched&&e.name===t.name:this.options.relativeXValue&&(e=e=>!e.touched&&e.options.x===t.x),!(i=P(h,e)))return}return i&&void 0!==(r=i&&i.index)&&(s=!0),void 0===r&&j(n)&&(r=this.xData.indexOf(n,e)),-1!==r&&void 0!==r&&this.cropped&&(r=r>=this.cropStart?r-this.cropStart:r),!s&&j(r)&&h[r]&&h[r].touched&&(r=void 0),r}updateData(t,e){let i=this.options,s=i.dataSorting,r=this.points,o=[],a=this.requireSorting,n=t.length===r.length,h,l,d,c,p=!0;if(this.xIncrement=null,t.forEach(function(t,e){let l;let d=C(t)&&this.pointClass.prototype.optionsToObject.call({series:this},t)||{},p=d.x;d.id||j(p)?(-1===(l=this.findPointIndex(d,c))||void 0===l?o.push(t):r[l]&&t!==i.data[l]?(r[l].update(t,!1,null,!1),r[l].touched=!0,a&&(c=l+1)):r[l]&&(r[l].touched=!0),(!n||e!==l||s&&s.enabled||this.hasDerivedData)&&(h=!0)):o.push(t)},this),h)for(l=r.length;l--;)(d=r[l])&&!d.touched&&d.remove&&d.remove(!1,e);else!n||s&&s.enabled?p=!1:(t.forEach(function(t,e){t===r[e].y||r[e].destroyed||r[e].update(t,!1,null,!1)}),o.length=0);return r.forEach(function(t){t&&(t.touched=!1)}
23499),!!p&&(o.forEach(function(t){this.addPoint(t,!1,null,null,!1)},this),null===this.xIncrement&&this.xData&&this.xData.length&&(this.xIncrement=x(this.xData),this.autoIncrement()),!0)}setData(t,e=!0,i,s){let r=this,o=r.points,a=o&&o.length||0,n=r.options,h=r.chart,l=n.dataSorting,d=r.xAxis,c=n.turboThreshold,p=this.xData,u=this.yData,g=r.pointArrayMap,f=g&&g.length,m=n.keys,x,y,b,v=0,S=1,C=null,k;h.options.chart.allowMutatingData||(n.data&&delete r.options.data,r.userOptions.data&&delete r.userOptions.data,k=R(!0,t));let M=(t=k||t||[]).length;if(l&&l.enabled&&(t=this.sortData(t)),h.options.chart.allowMutatingData&&!1!==s&&M&&a&&!r.cropped&&!r.hasGroupedData&&r.visible&&!r.boosted&&(b=this.updateData(t,i)),!b){if(r.xIncrement=null,r.colorCounter=0,this.parallelArrays.forEach(function(t){r[t+"Data"].length=0}),c&&M>c){if(j(C=r.getFirstValidPoint(t)))for(x=0;x<M;x++)p[x]=this.autoIncrement(),u[x]=t[x];else if(I(C)){if(f){if(C.length===f)for(x=0;x<M;x++)p[x]=this.autoIncrement(),u[x]=t[x];else for(x=0;x<M;x++)y=t[x],p[x]=y[0],u[x]=y.slice(1,f+1)}else if(m&&(v=m.indexOf("x"),S=m.indexOf("y"),v=v>=0?v:0,S=S>=0?S:1),1===C.length&&(S=0),v===S)for(x=0;x<M;x++)p[x]=this.autoIncrement(),u[x]=t[x][S];else for(x=0;x<M;x++)y=t[x],p[x]=y[v],u[x]=y[S]}else A(12,!1,h)}else for(x=0;x<M;x++)y={series:r},r.pointClass.prototype.applyOptions.apply(y,[t[x]]),r.updateParallelArrays(y,x);for(u&&B(u[0])&&A(14,!0,h),r.data=[],r.options.data=r.userOptions.data=t,x=a;x--;)o[x]?.destroy();d&&(d.minRange=d.userMinRange),r.isDirty=h.isDirtyBox=!0,r.isDirtyData=!!o,i=!1}"point"===n.legendType&&(this.processData(),this.generatePoints()),e&&h.redraw(i)}sortData(t){let e=this,i=e.options.dataSorting.sortKey||"y",s=function(t,e){return C(e)&&t.pointClass.prototype.optionsToObject.call({series:t},e)||{}};return t.forEach(function(i,r){t[r]=s(e,i),t[r].index=r},this),t.concat().sort((t,e)=>{let s=D(i,t),r=D(i,e);return r<s?-1:r>s?1:0}).forEach(function(t,e){t.x=e},this),e.linkedSeries&&e.linkedSeries.forEach(function(e){let i=e.options,r=i.data;i.dataSorting&&i.dataSorting.enabled||!r||(r.forEach(function(i,o){r[o]=s(e,i),t[o]&&(r[o].x=t[o].x,r[o].index=o)}),e.setData(r,!1))}),t}getProcessedData(t){let e=this,i=e.xAxis,s=e.options.cropThreshold,r=i?.logarithmic,o=e.isCartesian,a,n,h=0,l,d,c,p=e.xData,u=e.yData,g=!1,f=p.length;i&&(d=(l=i.getExtremes()).min,c=l.max,g=!!(i.categories&&!i.names.length)),o&&e.sorted&&!t&&(!s||f>s||e.forceCrop)&&(p[f-1]<d||p[0]>c?(p=[],u=[]):e.yData&&(p[0]<d||p[f-1]>c)&&(p=(a=this.cropData(e.xData,e.yData,d,c)).xData,u=a.yData,h=a.start,n=!0));let m=O([r?p.map(r.log2lin):p],()=>e.requireSorting&&!g&&A(15,!1,e.chart));return{xData:p,yData:u,cropped:n,cropStart:h,closestPointRange:m}}processData(t){let e=this.xAxis;if(this.isCartesian&&!this.isDirty&&!e.isDirty&&!this.yAxis.isDirty&&!t)return!1;let i=this.getProcessedData();this.cropped=i.cropped,this.cropStart=i.cropStart,this.processedXData=i.xData,this.processedYData=i.yData,this.closestPointRange=this.basePointRange=i.closestPointRange,L(this,"afterProcessData")}cropData(t,e,i,s){let r=t.length,o,a,n=0,h=r;for(o=0;o<r;o++)if(t[o]>=i){n=Math.max(0,o-1);break}for(a=o;a<r;a++)if(t[a]>s){h=a+1;break}return{xData:t.slice(n,h),yData:e.slice(n,h),start:n,end:h}}generatePoints(){let t=this.options,e=this.processedData||t.data,i=this.processedXData,s=this.processedYData,r=this.pointClass,o=i.length,a=this.cropStart||0,n=this.hasGroupedData,h=t.keys,l=[],d=t.dataGrouping&&t.dataGrouping.groupAll?a:0,c,p,u,g,f=this.data;if(!f&&!n){let t=[];t.length=e.length,f=this.data=t}for(h&&n&&(this.options.keys=!1),g=0;g<o;g++)p=a+g,n?((u=new r(this,[i[g]].concat(G(s[g])))).dataGroup=this.groupMap[d+g],u.dataGroup.options&&(u.options=u.dataGroup.options,T(u,u.dataGroup.options),delete u.dataLabels)):(u=f[p])||void 0===e[p]||(f[p]=u=new r(this,e[p],i[g])),u&&(u.index=n?d+g:p,l[g]=u);if(this.options.keys=h,f&&(o!==(c=f.length)||n))for(g=0;g<c;g++)g!==a||n||(g+=o),f[g]&&(f[g].destroyElements(),f[g].plotX=void 0);this.data=f,this.points=l,L(this,"afterGeneratePoints")}getXExtremes(t){return{min:y(t),max:x(t)}}getExtremes(t,e){let i=this.xAxis,s=this.yAxis,r=[],o=this.requireSorting&&!this.is("column")?1:0,a=!!s&&s.positiveValuesOnly,n=e||this.getExtremesFromAll||this.options.getExtremesFromAll,{processedXData:h,processedYData:l}=this,d,c,p,u,g,f,m,b=0,v=0,S=0;if(this.cropped&&n){let t=this.getProcessedData(!0);h=t.xData,l=t.yData}let C=(t=t||this.stackedYData||l||[]).length,k=h||this.xData;for(i&&(b=(d=i.getExtremes()).min,v=d.max),f=0;f<C;f++)if(u=k[f],c=(j(g=t[f])||I(g))&&((j(g)?g>0:g.length)||!a),p=e||this.getExtremesFromAll||this.options.getExtremesFromAll||this.cropped||!i||(k[f+o]||u)>=b&&(k[f-o]||u)<=v,c&&p){if(m=g.length)for(;m--;)j(g[m])&&(r[S++]=g[m]);else r[S++]=g}let M={activeYData:r,dataMin:y(r),dataMax:x(r)};return L(this,"afterGetExtremes",{dataExtremes:M}),M}applyExtremes(){let t=this.getExtremes();return this.dataMin=t.dataMin,this.dataMax=t.dataMax,t}getFirstValidPoint(t){let e=t.length,i=0,s=null;for(;null===s&&i<e;)s=t[i],i++;return s}translate(){this.processedXData||this.processData(),this.generatePoints();
23499let t=this.options,e=t.stacking,i=this.xAxis,s=i.categories,r=this.enabledDataSorting,o=this.yAxis,a=this.points,n=a.length,h=this.pointPlacementToXValue(),l=!!h,d=t.threshold,c=t.startFromThreshold?d:0,p,u,g,f,m=Number.MAX_VALUE;function x(t){return b(t,-1e5,1e5)}for(p=0;p<n;p++){let t;let n=a[p],y=n.x,b,S,k=n.y,M=n.low,w=e&&o.stacking?.stacks[(this.negStacks&&k<(c?0:d)?"-":"")+this.stackKey];u=i.translate(y,!1,!1,!1,!0,h),n.plotX=j(u)?v(x(u)):void 0,e&&this.visible&&w&&w[y]&&(f=this.getStackIndicator(f,y,this.index),!n.isNull&&f.key&&(S=(b=w[y]).points[f.key]),b&&I(S)&&(M=S[0],k=S[1],M===c&&f.key===w[y].base&&(M=N(j(d)?d:o.min)),o.positiveValuesOnly&&C(M)&&M<=0&&(M=void 0),n.total=n.stackTotal=N(b.total),n.percentage=C(n.y)&&b.total?n.y/b.total*100:void 0,n.stackY=k,this.irregularWidths||b.setOffset(this.pointXOffset||0,this.barW||0,void 0,void 0,void 0,this.xAxis))),n.yBottom=C(M)?x(o.translate(M,!1,!0,!1,!0)):void 0,this.dataModify&&(k=this.dataModify.modifyValue(k,p)),j(k)&&void 0!==n.plotX&&(t=j(t=o.translate(k,!1,!0,!1,!0))?x(t):void 0),n.plotY=t,n.isInside=this.isPointInside(n),n.clientX=l?v(i.translate(y,!1,!1,!1,!0,h)):u,n.negative=(n.y||0)<(d||0),n.category=N(s&&s[n.x],n.x),n.isNull||!1===n.visible||(void 0!==g&&(m=Math.min(m,Math.abs(u-g))),g=u),n.zone=this.zones.length?n.getZone():void 0,!n.graphic&&this.group&&r&&(n.isNew=!0)}this.closestPointRangePx=m,L(this,"afterTranslate")}getValidPoints(t,e,i){let s=this.chart;return(t||this.points||[]).filter(function(t){let{plotX:r,plotY:o}=t;return!!((i||!t.isNull&&j(o))&&(!e||s.isInsidePlot(r,o,{inverted:s.inverted})))&&!1!==t.visible})}getClipBox(){let{chart:t,xAxis:e,yAxis:i}=this,{x:s,y:r,width:o,height:a}=R(t.clipBox);return e&&e.len!==t.plotSizeX&&(o=e.len),i&&i.len!==t.plotSizeY&&(a=i.len),t.inverted&&!this.invertible&&([o,a]=[a,o]),{x:s,y:r,width:o,height:a}}getSharedClipKey(){return this.sharedClipKey=(this.options.xAxis||0)+","+(this.options.yAxis||0),this.sharedClipKey}setClip(){let{chart:t,group:e,markerGroup:i}=this,s=t.sharedClips,r=t.renderer,o=this.getClipBox(),a=this.getSharedClipKey(),n=s[a];n?n.animate(o):s[a]=n=r.clipRect(o),e&&e.clip(!1===this.options.clip?void 0:n),i&&i.clip()}animate(t){let{chart:e,group:i,markerGroup:s}=this,r=e.inverted,o=d(this.options.animation),a=[this.getSharedClipKey(),o.duration,o.easing,o.defer].join(","),n=e.sharedClips[a],h=e.sharedCl
23499ips[a+"m"];if(t&&i){let t=this.getClipBox();if(n)n.attr("height",t.height);else{t.width=0,r&&(t.x=e.plotHeight),n=e.renderer.clipRect(t),e.sharedClips[a]=n;let i={x:-99,y:-99,width:r?e.plotWidth+199:99,height:r?99:e.plotHeight+199};h=e.renderer.clipRect(i),e.sharedClips[a+"m"]=h}i.clip(n),s?.clip(h)}else if(n&&!n.hasClass("highcharts-animating")){let t=this.getClipBox(),i=o.step;(s?.element.childNodes.length||e.series.length>1)&&(o.step=function(t,e){i&&i.apply(e,arguments),"width"===e.prop&&h?.element&&h.attr(r?"height":"width",t+99)}),n.addClass("highcharts-animating").animate(t,o)}}afterAnimate(){this.setClip(),z(this.chart.sharedClips,(t,e,i)=>{t&&!this.chart.container.querySelector(`[clip-path="url(#${t.id})"]`)&&(t.destroy(),delete i[e])}),this.finishedAnimating=!0,L(this,"afterAnimate")}drawPoints(t=this.points){let e,i,s,r,o,a,n;let h=this.chart,l=h.styledMode,{colorAxis:d,options:c}=this,p=c.marker,u=this[this.specialGroup||"markerGroup"],g=this.xAxis,f=N(p.enabled,!g||!!g.isRadial||null,this.closestPointRangePx>=p.enabledThreshold*p.radius);if(!1!==p.enabled||this._hasPointMarkers)for(e=0;e<t.length;e++)if(r=(s=(i=t[e]).graphic)?"animate":"attr",o=i.marker||{},a=!!i.marker,(f&&void 0===o.enabled||o.enabled)&&!i.isNull&&!1!==i.visible){let t=N(o.symbol,this.symbol,"rect");n=this.markerAttribs(i,i.selected&&"select"),this.enabledDataSorting&&(i.startXPos=g.reversed?-(n.width||0):g.width);let e=!1!==i.isInside;if(!s&&e&&((n.width||0)>0||i.hasImage)&&(i.graphic=s=h.renderer.symbol(t,n.x,n.y,n.width,n.height,a?o:p).add(u),this.enabledDataSorting&&h.hasRendered&&(s.attr({x:i.startXPos}),r="animate")),s&&"animate"===r&&s[e?"show":"hide"](e).animate(n),s){let t=this.pointAttribs(i,l||!i.selected?void 0:"select");l?d&&s.css({fill:t.fill}):s[r](t)}s&&s.addClass(i.getClassName(),!0)}else s&&(i.graphic=s.destroy())}markerAttribs(t,e){let i=this.options,s=i.marker,r=t.marker||{},o=r.symbol||s.symbol,a={},n,h,l=N(r.radius,s&&s.radius);e&&(n=s.states[e],l=N((h=r.states&&r.states[e])&&h.radius,n&&n.radius,l&&l+(n&&n.radiusPlus||0))),t.hasImage=o&&0===o.indexOf("url"),t.hasImage&&(l=0);let d=t.pos();return j(l)&&d&&(i.crisp&&(d[0]=S(d[0],t.hasImage?0:"rect"===o?s?.lineWidth||0:1)),a.x=d[0]-l,a.y=d[1]-l),l&&(a.width=a.height=2*l),a}pointAttribs(t,e){let i=this.options.marker,s=t&&t.options,r=s&&s.marker||{},o=s&&s.color,a=t&&t.color,n=t&&t.zone&&t.zone.color,h,l,d=this.color,c,p,u=N(r.lineWidth,i.lineWidth),g=1;return d=o||n||a||d,c=r.fillColor||i.fillColor||d,p=r.lineColor||i.lineColor||d,e=e||"normal",h=i.states[e]||{},u=N((l=r.states&&r.states[e]||{}).lineWidth,h.lineWidth,u+N(l.lineWidthPlus,h.lineWidthPlus,0)),c=l.fillColor||h.fillColor||c,{stroke:p=l.lineColor||h.lineColor||p,"stroke-width":u,fill:c,opacity:g=N(l.opacity,h.opacity,g)}}destroy(t){let e,i,s;
vendor: 5,829 bytes, line 23499
23499let r=this,o=r.chart,a=/AppleWebKit\/533/.test(f.navigator.userAgent),n=r.data||[];for(L(r,"destroy",{keepEventsForUpdate:t}),this.removeEvents(t),(r.axisTypes||[]).forEach(function(t){(s=r[t])&&s.series&&(w(s.series,r),s.isDirty=s.forceRedraw=!0)}),r.legendItem&&r.chart.legend.destroyItem(r),e=n.length;e--;)(i=n[e])&&i.destroy&&i.destroy();for(let t of r.zones)k(t,void 0,!0);l.clearTimeout(r.animationTimeout),z(r,function(t,e){t instanceof h&&!t.survive&&t[a&&"group"===e?"hide":"destroy"]()}),o.hoverSeries===r&&(o.hoverSeries=void 0),w(o.series,r),o.orderItems("series"),z(r,function(e,i){t&&"hcEvents"===i||delete r[i]})}applyZones(){let{area:t,chart:e,graph:i,zones:s,points:r,xAxis:o,yAxis:a,zoneAxis:n}=this,{inverted:h,renderer:l}=e,d=this[`${n}Axis`],{isXAxis:c,len:p=0}=d||{},u=(i?.strokeWidth()||0)/2+1,g=(t,e=0,i=0)=>{h&&(i=p-i);let{translated:s=0,lineClip:r}=t,o=i-s;r?.push(["L",e,Math.abs(o)<u?i-u*(o<=0?-1:1):s])};if(s.length&&(i||t)&&d&&j(d.min)){let e=d.getExtremes().max,u=t=>{t.forEach((e,i)=>{("M"===e[0]||"L"===e[0])&&(t[i]=[e[0],c?p-e[1]:e[1],c?e[2]:p-e[2]])})};if(s.forEach(t=>{t.lineClip=[],t.translated=b(d.toPixels(N(t.value,e),!0)||0,0,p)}),i&&!this.showLine&&i.hide(),t&&t.hide(),"y"===n&&r.length<o.len)for(let t of r){let{plotX:e,plotY:i,zone:r}=t,o=r&&s[s.indexOf(r)-1];r&&g(r,e,i),o&&g(o,e,i)}let f=[],m=d.toPixels(d.getExtremes().min,!0);s.forEach(e=>{let s=e.lineClip||[],r=Math.round(e.translated||0);o.reversed&&s.reverse();let{clip:n,simpleClip:d}=e,p=0,g=0,x=o.len,y=a.len;c?(p=r,x=m):(g=r,y=m);let b=[["M",p,g],["L",x,g],["L",x,y],["L",p,y],["Z"]],v=[b[0],...s,b[1],b[2],...f,b[3],b[4]];f=s.reverse(),m=r,h&&(u(v),t&&u(b)),n?(n.animate({d:v}),d?.animate({d:b})):(n=e.clip=l.path(v),t&&(d=e.simpleClip=l.path(b))),i&&e.graph?.clip(n),t&&e.area?.clip(d)})}else this.visible&&(i&&i.show(),t&&t.show())}plotGroup(t,e,i,s,r){let o=this[t],a=!o,n={visibility:i,zIndex:s||.1};return C(this.opacity)&&!this.chart.styledMode&&"inactive"!==this.state&&(n.opacity=this.opacity),o||(this[t]=o=this.chart.renderer.g().add(r)),o.addClass("highcharts-"+e+" highcharts-series-"+this.index+" highcharts-"+this.type+"-series "+(C(this.colorIndex)?"highcharts-color-"+this.colorIndex+" ":"")+(this.options.className||"")+(o.hasClass("highcharts-tracker")?" highcharts-tracker":""),!0),o.attr(n)[a?"attr":"animate"](this.getPlotBox(e)),o}getPlotBox(t){let e=this.xAxis,i=this.yAxis,s=this.chart,r=s.inverted&&!s.polar&&e&&this.invertible&&"series"===t;return s.inverted&&(e=i,i=this.xAxis),{translateX:e?e.left:s.plotLeft,translateY:i?i.top:s.plotTop,rotation:r?90:0,rotationOriginX:r?(e.len-i.len)/2:0,rotationOriginY:r?(e.len+i.len)/2:0,scaleX:r?-1:1,scaleY:1}}removeEvents(t){let{eventsToUnbind:e}=this;t||W(this),e.length&&(e.forEach(t=>{t()}),e.length=0)}render(){let t=this,{chart:e,options:i,hasRendered:s}=t,r=d(i.animation),o=t.visible?"inherit":"hidden",a=i.zIndex,n=e.seriesGroup,h=t.finishedAnimating?0:r.duration;L(this,"render"),t.plotGroup("group","series",o,a,n),t.markerGroup=t.plotGroup("markerGroup","markers",o,a,n),!1!==i.clip&&t.setClip(),h&&t.animate?.(!0),t.drawGraph&&(t.drawGraph(),t.applyZones()),t.visible&&t.drawPoints(),t.drawDataLabels?.(),t.redrawPoints?.(),i.enableMouseTracking&&t.drawTracker?.(),h&&t.animate?.(),s||(h&&r.defer&&(h+=r.defer),t.animationTimeout=H(()=>{t.afterAnimate()},h||0)),t.isDirty=!1,t.hasRendered=!0,L(t,"afterRender")}redraw(){let t=this.isDirty||this.isDirtyData;this.translate(),this.render(),t&&delete this.kdTree}reserveSpace(){return this.visible||!this.chart.options.chart.ignoreHiddenSeries}searchPoint(t,e){let{xAxis:i,yAxis:s}=this,r=this.chart.inverted;return this.searchKDTree({clientX:r?i.len-t.chartY+i.pos:t.chartX-i.pos,plotY:r?s.len-t.chartX+s.pos:t.chartY-s.pos},e,t)}buildKDTree(t){this.buildingKdTree=!0;let e=this,i=e.options.findNearestPointBy.indexOf("y")>-1?2:1;delete e.kdTree,H(function(){e.kdTree=function t(i,s,r){let o,a;let n=i?.length;if(n)return o=e.kdAxisArray[s%r],i.sort((t,e)=>(t[o]||0)-(e[o]||0)),{point:i[a=Math.floor(n/2)],left:t(i.slice(0,a),s+1,r),right:t(i.slice(a+1),s+1,r)}}(e.getValidPoints(void 0,!e.directTouch),i,i),e.buildingKdTree=!1},e.options.kdNow||t?.type==="touchstart"?0:1)}searchKDTree(t,e,i){let s=this,[r,o]=this.kdAxisArray,a=e?"distX":"dist",n=(s.options.findNearestPointBy||"").indexOf("y")>-1?2:1,h=!!s.isBubble;if(this.kdTree||this.buildingKdTree||this.buildKDTree(i),this.kdTree)return function t(e,i,n,l){let d=i.point,c=s.kdAxisArray[n%l],p,u,g=d;!function(t,e){let i=t[r],s=e[r],a=C(i)&&C(s)?i-s:null,n=t[o],l=e[o],d=C(n)&&C(l)?n-l:0,c=h&&e.marker?.radius||0;e.dist=Math.sqrt((a&&a*a||0)+d*d)-c,e.distX=C(a)?Math.abs(a)-c:Number.MAX_VALUE}(e,d);let f=(e[c]||0)-(d[c]||0)+(h&&d.marker?.radius||0),m=f<0?"left":"right",x=f<0?"right":"left";return i[m]&&(g=(p=t(e,i[m],n+1,l))[a]<g[a]?p:d),i[x]&&Math.sqrt(f*f)<g[a]&&(g=(u=t(e,i[x],n+1,l))[a]<g[a]?u:g),g}(t,this.kdTree,n,n)}pointPlacementToXValue(){let{options:t,xAxis:e}=this,i=t.pointPlacement;return"between"===i&&(i=e.reversed?-.5:.5),j(i)?i*(t.pointRange||e.pointRange):0}isPointInside(t){let{chart:e,xAxis:i,yAxis:s}=this,{plotX:r=-1,plotY:o=-1}=t;return o>=0&&o<=(s?s.len:e.plotHeight)&&r>=0&&r<=(i?i.len:e.plotWidth)}drawTracker(){let t=this,e=t.options,i=e.trackByArea,s=[].concat((i?t.areaPath:t.graphPath)||[]),r=t.chart,o=r.pointer,a=r.renderer,n=r.options.tooltip?.snap||0,h=()=>{e.enableMouseTracking&&r.hoverSeries!==t&&t.onMouseOver()},l="rgba(192,192,192,"+(g?1e-4:.002)+")",d=t.tracker;d?d.attr({d:s}):t.graph&&(t.tracker=d=a.path(s).attr({visibility:t.visible?"inherit":"hidden",zIndex:2}).addClass(i?"highcharts-tracker-area":"highcharts-tracker-line").add(t.group),r.styledMode||d.attr({"stroke-linecap":"round","stroke-linejoin":"round",stroke:l,fill:i?l:"none","stroke-width":t.graph.strokeWidth()+(i?0:2*n)}
23499),[t.tracker,t.markerGroup,t.dataLabelsGroup].forEach(t=>{t&&(t.addClass("highcharts-tracker").on("mouseover",h).on("mouseout",t=>{o?.onTrackerMouseOut(t)}),e.cursor&&!r.styledMode&&t.css({cursor:e.cursor}),t.on("touchstart",h))})),L(this,"afterDrawTracker")}addPoint(t,e,i,s,r){let o,a;let n=this.options,h=this.data,l=this.chart,d=this.xAxis,c=d&&d.hasNames&&d.names,p=n.data,u=this.xData;e=N(e,!0);let g={series:this};this.pointClass.prototype.applyOptions.apply(g,[t]);let f=g.x;if(a=u.length,this.requireSorting&&f<u[a-1])for(o=!0;a&&u[a-1]>f;)a--;this.updateParallelArrays(g,"splice",[a,0,0]),this.updateParallelArrays(g,a),c&&g.name&&(c[f]=g.name),p.splice(a,0,t),(o||this.processedData)&&(this.data.splice(a,0,null),this.processData()),"point"===n.legendType&&this.generatePoints(),i&&(h[0]&&h[0].remove?h[0].remove(!1):(h.shift(),this.updateParallelArrays(g,"shift"),p.shift())),!1!==r&&L(this,"addPoint",{point:g}),this.isDirty=!0,this.isDirtyData=!0,e&&l.redraw(s)}removePoint(t,e,i){let s=this,r=s.data,o=r[t],a=s.points,n=s.chart,h=function(){a&&a.length===r.length&&a.splice(t,1),r.splice(t,1),s.options.data.splice(t,1),s.updateParallelArrays(o||{series:s},"splice",[t,1]),o&&o.destroy(),s.isDirty=!0,s.isDirtyData=!0,e&&n.redraw()};c(i,n),e=N(e,!0),o?o.firePointEvent("remove",null,h):h()}remove(t,e,i,s){let r=this,o=r.chart;function a(){r.destroy(s),o.isDirtyLegend=o.isDirtyBox=!0,o.linkSeries(s),N(t,!0)&&o.redraw(e)}!1!==i?L(r,"remove",null,a):a()}update(t,e){L(this,"update",{options:t=M(t,this.userOptions)});let i=this,s=i.chart,r=i.userOptions,o=i.initialType||i.type,a=s.options.plotOptions,n=m[o].prototype,h=i.finishedAnimating&&{animation:!1},l={},d,c,p=["colorIndex","eventOptions","navigatorSeries","symbolIndex","baseSeries"],u=t.type||r.type||s.options.chart.type,g=!(this.hasDerivedData||u&&u!==this.type||void 0!==t.pointStart||void 0!==t.pointInterval||void 0!==t.relativeXValue||t.joinBy||t.mapData||["dataGrouping","pointStart","pointInterval","pointIntervalUnit","keys"].some(t=>i.hasOptionChanged(t)));u=u||o,g&&(p.push("data","isDirtyData","isDirtyCanvas","points","processedData","processedXData","processedYData","xIncrement","cropped","_hasPointMarkers","hasDataLabels","nodes","layout","level","mapMap","mapData","minY","maxY","minX","maxX","transformGroups"),!1!==t.visible&&p.push("area","graph"),i.parallelArrays.forEach(function(t){p.push(t+"Data")}),t.data&&(t.dataSorting&&T(i.options.dataSorting,t.dataSorting),this.setData(t.data,!1))),t=R(r,{index:void 0===r.index?i.index:r.index,pointStart:a?.series?.pointStart??r.pointStart??i.xData?.[0]},!g&&{data:i.options.data},t,h),g&&t.data&&(t.data=i.options.data),(p=["group","markerGroup","dataLabelsGroup","transformGroup"].concat(p)).forEach(function(t){p[t]=i[t],delete i[t]});let f=!1;if(m[u]){if(f=u!==i.type,i.remove(!1,!1,!1,!0),f){if(s.propFromSeries(),Object.setPrototypeOf)Object.setPrototypeOf(i,m[u].prototype);else{let t=Object.hasOwnProperty.call(i,"hcEvents")&&i.hcEvents;for(c in n)i[c]=void 0;T(i,m[u].prototype),t?i.hcEvents=t:delete i.hcEvents}}}else A(17,!0,s,{missingModuleFor:u});if(p.forEach(function(t){i[t]=p[t]}),i.init(s,t),g&&this.points)for(let t of(!1===(d=i.options).visible?(l.graphic=1,l.dataLabel=1):(this.hasMarkerChanged(d,r)&&(l.graphic=1),i.hasDataLabels?.()||(l.dataLabel=1)),this.points))t&&t.series&&(t.resolveColor(),Object.keys(l).length&&t.destroyElements(l),!1===d.showInLegend&&t.legendItem&&s.legend.destroyItem(t));i.initialType=o,s.linkSeries(),s.setSortedData(),f&&i.linkedSeries.length&&(i.isDirtyData=!0),L(this,"afterUpdate"),N(e,!0)&&s.redraw(!!g&&void 0)}setName(t){this.name=this.options.name=this.userOptions.name=t,this.chart.isDirtyLegend=!0}hasOptionChanged(t){let e=this.chart,i=this.options[t],s=e.options.plotOptions,r=this.userOptions[t],o=N(s?.[this.type]?.[t],s?.series?.[t]);return r&&!C(o)?i!==r:i!==N(o,i)}onMouseOver(){let t=this.chart,e=t.hoverSeries,i=t.pointer;i?.setHoverChartIndex(),e&&e!==this&&e.onMouseOut(),this.options.events.mouseOver&&L(this,"mouseOver"),this.setState("hover"),t.hoverSeries=this}onMouseOut(){let t=this.options,e=this.chart,i=e.tooltip,s=e.hoverPoint;
23499e.hoverSeries=null,s&&s.onMouseOut(),this&&t.events.mouseOut&&L(this,"mouseOut"),i&&!this.stickyTracking&&(!i.shared||this.noSharedTooltip)&&i.hide(),e.series.forEach(function(t){t.setState("",!0)})}setState(t,e){let i=this,s=i.options,r=i.graph,o=s.inactiveOtherPoints,a=s.states,n=N(a[t||"normal"]&&a[t||"normal"].animation,i.chart.options.chart.animation),h=s.lineWidth,l=s.opacity;if(t=t||"",i.state!==t&&([i.group,i.markerGroup,i.dataLabelsGroup].forEach(function(e){e&&(i.state&&e.removeClass("highcharts-series-"+i.state),t&&e.addClass("highcharts-series-"+t))}),i.state=t,!i.chart.styledMode)){if(a[t]&&!1===a[t].enabled)return;if(t&&(h=a[t].lineWidth||h+(a[t].lineWidthPlus||0),l=N(a[t].opacity,l)),r&&!r.dashstyle&&j(h))for(let t of[r,...this.zones.map(t=>t.graph)])t?.animate({"stroke-width":h},n);o||[i.group,i.markerGroup,i.dataLabelsGroup,i.labelBySeries].forEach(function(t){t&&t.animate({opacity:l},n)})}e&&o&&i.points&&i.setAllPointsToState(t||void 0)}setAllPointsToState(t){this.points.forEach(function(e){e.setState&&e.setState(t)})}setVisible(t,e){let i=this,s=i.chart,r=s.options.chart.ignoreHiddenSeries,o=i.visible;i.visible=t=i.options.visible=i.userOptions.visible=void 0===t?!o:t;let a=t?"show":"hide";["group","dataLabelsGroup","markerGroup","tracker","tt"].forEach(t=>{i[t]?.[a]()}),(s.hoverSeries===i||s.hoverPoint?.series===i)&&i.onMouseOut(),i.legendItem&&s.legend.colorizeItem(i,t),i.isDirty=!0,i.options.stacking&&s.series.forEach(t=>{t.options.stacking&&t.visible&&(t.isDirty=!0)}),i.linkedSeries.forEach(e=>{e.setVisible(t,!1)}),r&&(s.isDirtyBox=!0),L(i,a),!1!==e&&s.redraw()}show(){this.setVisible(!0)}hide(){this.setVisible(!1)}select(t){this.selected=t=this.options.selected=void 0===t?!this.selected:t,this.checkbox&&(this.checkbox.checked=t),L(this,t?"select":"unselect")}shouldShowTooltip(t,e,i={}){return i.series=this,i.visiblePlotOnly=!0,this.chart.isInsidePlot(t,e,i)}drawLegendSymbol(t,e){r[this.options.legendSymbol||"rectangle"]?.call(this,t,e)}}return X.defaultOptions=a,X.types=n.seriesTypes,X.registerType=n.registerSeriesType,T(X.prototype,{axisTypes:["xAxis","yAxis"],coll:"series",colorCounter:0,directTouch:!1,invertible:!0,isCartesian:!0,kdAxisArray:["clientX","plotY"],parallelArrays:["x","y"],pointClass:o,requireSorting:!0,sorted:!0}),n.series=X,X}),i(e,"Core/Chart/Chart.js",[e["Core/Animation/AnimationUtilities.js"],e["Core/Axis/Axis.js"],e["Core/Defaults.js"],e["Core/Templating.js"],e["Core/Foundation.js"],e["Core/Globals.js"],e["Core/Renderer/RendererRegistry.js"],e["Core/Series/Series.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Renderer/SVG/SVGRenderer.js"],e["Core/Time.js"],e["Core/Utilities.js"],e["Core/Renderer/HTML/AST.js"],e["Core/Axis/Tick.js"]],function(t,e,i,s,r,o,a,n,h,l,d,c,p,u){let{animate:g,animObject:f,setAnimation:m}=t,{defaultOptions:x,defaultTime:y}=i,{numberFormat:b}=s,{registerEventOptions:v}=r,{charts:S,doc:C,marginNames:k,svg:M,win:w}=o,{seriesTypes:A}=h,{addEvent:T,attr:P,createElement:L,css:O,defined:D,diffObjects:E,discardElement:I,erase:j,error:B,extend:R,find:z,fireEvent:N,getStyle:W,isArray:G,isNumber:H,isObject:X,isString:F,merge:Y,objectEach:U,pick:V,pInt:$,relativeLength:Z,removeEvent:_,splat:q,syncTimeout:K,uniqueKey:J}=c;class Q{static chart(t,e,i){return new Q(t,e,i)}constructor(t,e,i){this.sharedClips={};let s=[...arguments];(F(t)||t.nodeName)&&(this.renderTo=s.shift()),this.init(s[0],s[1])}setZoomOptions(){let t=this.options.chart,e=t.zooming;this.zooming={...e,type:V(t.zoomType,e.type),key:V(t.zoomKey,e.key),pinchType:V(t.pinchType,e.pinchType),singleTouch:V(t.zoomBySingleTouch,e.singleTouch,!1),resetButton:Y(e.resetButton,t.resetZoomButton)}}init(t,e){N(this,"init",{args:arguments},function(){let i=Y(x,t),s=i.chart;this.userOptions=R({},t),this.margin=[],this.spacing=[],this.labelCollectors=[],this.callback=e,this.isResizing=0,this.options=i,this.axes=[],this.series=[],this.time=t.time&&Object.keys(t.time).length?new d(t.time):o.time,this.numberFormatter=s.numberFormatter||b,this.styledMode=s.styledMode,this.hasCartesianSeries=s.showAxes,this.index=S.length,S.push(this),o.chartCount++,v(this,s),this.xAxis=[],this.yAxis=[],this.pointCount=this.colorCounter=this.symbolCounter=0,this.setZoomOptions(),N(this,"afterInit"),this.firstRen
23499der()})}initSeries(t){let e=this.options.chart,i=t.type||e.type,s=A[i];s||B(17,!0,this,{missingModuleFor:i});let r=new s;return"function"==typeof r.init&&r.init(this,t),r}setSortedData(){this.getSeriesOrderByLinks().forEach(function(t){t.points||t.data||!t.enabledDataSorting||t.setData(t.options.data,!1)})}getSeriesOrderByLinks(){return this.series.concat().sort(function(t,e){return t.linkedSeries.length||e.linkedSeries.length?e.linkedSeries.length-t.linkedSeries.length:0})}orderItems(t,e=0){let i=this[t],s=this.options[t]=q(this.options[t]).slice(),r=this.userOptions[t]=this.userOptions[t]?q(this.userOptions[t]).slice():[];if(this.hasRendered&&(s.splice(e),r.splice(e)),i)for(let t=e,o=i.length;t<o;++t){let e=i[t];e&&(e.index=t,e instanceof n&&(e.name=e.getName()),e.options.isInternal||(s[t]=e.options,r[t]=e.userOptions))}}isInsidePlot(t,e,i={}){let{inverted:s,plotBox:r,plotLeft:o,plotTop:a,scrollablePlotBox:n}=this,{scrollLeft:h=0,scrollTop:l=0}=i.visiblePlotOnly&&this.scrollablePlotArea?.scrollingContainer||{},d=i.series,c=i.visiblePlotOnly&&n||r,p=i.inverted?e:t,u=i.inverted?t:e,g={x:p,y:u,isInsidePlot:!0,options:i};if(!i.ignoreX){let t=d&&(s&&!this.polar?d.yAxis:d.xAxis)||{pos:o,len:1/0},e=i.paneCoordinates?t.pos+p:o+p;e>=Math.max(h+o,t.pos)&&e<=Math.min(h+o+c.width,t.pos+t.len)||(g.isInsidePlot=!1)}if(!i.ignoreY&&g.isInsidePlot){let t=!s&&i.axis&&!i.axis.isXAxis&&i.axis||d&&(s?d.xAxis:d.yAxis)||{pos:a,len:1/0},e=i.paneCoordinates?t.pos+u:a+u;e>=Math.max(l+a,t.pos)&&e<=Math.min(l+a+c.height,t.pos+t.len)||(g.isInsidePlot=!1)}return N(this,"afterIsInsidePlot",g),g.isInsidePlot}redraw(t){N(this,"beforeRedraw");let e=this.hasCartesianSeries?this.axes:this.colorAxis||[],i=this.series,s=this.pointer,r=this.legend,o=this.userOptions.legend,a=this.renderer,n=a.isHidden(),h=[],l,d,c,p=this.isDirtyBox,u=this.isDirtyLegend,g;for(a.rootFontSize=a.boxWrapper.getStyle("font-size"),this.setResponsive&&this.setResponsive(!1),m(!!this.hasRendered&&t,this),n&&this.temporaryDisplay(),this.layOutTitles(!1),c=i.length;c--;)if(((g=i[c]).options.stacking||g.options.centerInCategory)&&(d=!0,g.isDirty)){l=!0;break}if(l)for(c=i.length;c--;)(g=i[c]).options.stacking&&(g.isDirty=!0);i.forEach(function(t){t.isDirty&&("point"===t.options.legendType?("function"==typeof t.updateTotals&&t.updateTotals(),u=!0):o&&(o.labelFormatter||o.labelFormat)&&(u=!0)),t.isDirtyData&&N(t,"updatedData")}),u&&r&&r.options.enabled&&(r.render(),this.isDirtyLegend=!1),d&&this.getStacks(),e.forEach(function(t){t.updateNames(),t.setScale()}),this.getMargins(),e.forEach(function(t){t.isDirty&&(p=!0)}),e.forEach(function(t){let e=t.min+","+t.max;t.extKey!==e&&(t.extKey=e,h.push(function(){N(t,"afterSetExtremes",R(t.eventArgs,t.getExtremes())),delete t.eventArgs})),(p||d)&&t.redraw()}),p&&this.drawChartBox(),N(this,"predraw"),i.forEach(function(t){(p||t.isDirty)&&t.visible&&t.redraw(),t.isDirtyData=!1}),s&&s.reset(!0),a.draw(),N(this,"redraw"),N(this,"render"),n&&this.temporaryDisplay(!0),h.forEach(function(t){t.call()})}get(t){let e=this.series;function i(e){return e.id===t||e.options&&e.options.id===t}let s=z(this.axes,i)||z(this.series,i);for(let t=0;!s&&t<e.length;t++)s=z(e[t].points||[],i);return s}getAxes(){let t=this.userOptions;for(let i of(N(this,"getAxes"),["xAxis","yAxis"]))for(let s of t[i]=q(t[i]||{}))new e(this,s,i);N(this,"afterGetAxes")}getSelectedPoints(){return this.series.reduce((t,e)=>(e.getPointsCollection().forEach(e=>{V(e.selectedStaging,e.selected)&&t.push(e)}),t),[])}getSelectedSeries(){return this.series.filter(function(t){return t.selected})}setTitle(t,e,i){this.applyDescription("title",t),this.applyDescription("subtitle",e),this.applyDescription("caption",void 0),this.layOutTitles(i)}applyDescription(t,e){let i=this,s=this.options[t]=Y(this.options[t],e),r=this[t];r&&e&&(this[t]=r=r.destroy()),s&&!r&&((r=this.renderer.text(s.text,0,0,s.useHTML).attr({align:s.align,class:"highcharts-"+t,zIndex:s.zIndex||4}).add()).update=function(e,s){i.applyDescription(t,e),i.layOutTitles(s)},this.styledMode||r.css(R("title"===t?{fontSize:this.options.isStock?"1em":"1.2em"}:{},s.style)),this[t]=r)}layOutTitles(t=!0){let e=[0,0,0],i=this.renderer,s=this.spacingBox;["title","subtitle","caption"].forEach(function(t){let r=this[t],o=this.options[t],a=o.verticalAlign||"top",n="title"===t?"top"===a?-3:0:"top"===a?e[0]+2:0;if(r){r.css({width:(o.width||s.width+(o.widthAdjust||0))+"px"});let t=i.fontMetrics(r).b,h=Math.round(r.getBBox(o.useHTML).height);r.align(R({y:"bottom"===a?t:n+t,height:h},o),!1,"spacingBox"),o.floating||("top"===a?e[0]=Math.ceil(e[0]+h):"bottom"===a&&(e[2]=Math.ceil(e[2]+h)))}},this),e[0]&&"top"===(this.options.title.verticalAlign||"top")&&(e[0]+=this.options.title.margin),e[2]&&"bottom"===this.options.caption.verticalAlign&&(e[2]+=this.options.caption.margin);let r=!this.titleOffset||this.titleOffset.join(",")!==e.join(",");this.titleOffset=e,N(this,"afterLayOutTitles"),!this.isDirtyBox&&r&&(this.isDirtyBox=this.isDirtyLegend=r,this.hasRendered&&t&&this.isDirtyBox&&this.redraw())}getContainerBox(){return{width:W(this.renderTo,"width",!0)||0,height:W(this.renderTo,"height",!0)||0}}getChartSize(){let t=this.options.chart,e=t.width,i=t.height,s=this.getContainerBox();
23499this.chartWidth=Math.max(0,e||s.width||600),this.chartHeight=Math.max(0,Z(i,this.chartWidth)||(s.height>1?s.height:400)),this.containerBox=s}temporaryDisplay(t){let e=this.renderTo,i;if(t)for(;e&&e.style;)e.hcOrigStyle&&(O(e,e.hcOrigStyle),delete e.hcOrigStyle),e.hcOrigDetached&&(C.body.removeChild(e),e.hcOrigDetached=!1),e=e.parentNode;else for(;e&&e.style&&(C.body.contains(e)||e.parentNode||(e.hcOrigDetached=!0,C.body.appendChild(e)),("none"===W(e,"display",!1)||e.hcOricDetached)&&(e.hcOrigStyle={display:e.style.display,height:e.style.height,overflow:e.style.overflow},i={display:"block",overflow:"hidden"},e!==this.renderTo&&(i.height=0),O(e,i),e.offsetWidth||e.style.setProperty("display","block","important")),(e=e.parentNode)!==C.body););}setClassName(t){this.container.className="highcharts-container "+(t||"")}getContainer(){let t=this.options,e=t.chart,i="data-highcharts-chart",s=J(),r,o=this.renderTo;o||(this.renderTo=o=e.renderTo),F(o)&&(this.renderTo=o=C.getElementById(o)),o||B(13,!0,this);let n=$(P(o,i));H(n)&&S[n]&&S[n].hasRendered&&S[n].destroy(),P(o,i,this.index),o.innerHTML=p.emptyHTML,e.skipClone||o.offsetWidth||this.temporaryDisplay(),this.getChartSize();let h=this.chartHeight,d=this.chartWidth;O(o,{overflow:"hidden"}),this.styledMode||(r=R({position:"relative",overflow:"hidden",width:d+"px",height:h+"px",textAlign:"left",lineHeight:"normal",zIndex:0,"-webkit-tap-highlight-color":"rgba(0,0,0,0)",userSelect:"none","touch-action":"manipulation",outline:"none"},e.style||{}));let c=L("div",{id:s},r,o);this.container=c,this.getChartSize(),d===this.chartWidth||(d=this.chartWidth,this.styledMode||O(c,{width:V(e.style?.width,d+"px")})),this.containerBox=this.getContainerBox(),this._cursor=c.style.cursor;let u=e.renderer||!M?a.getRendererType(e.renderer):l;if(this.renderer=new u(c,d,h,void 0,e.forExport,t.exporting&&t.exporting.allowHTML,this.styledMode),m(void 0,this),this.setClassName(e.className),this.styledMode)for(let e in t.defs)this.renderer.definition(t.defs[e]);else this.renderer.setStyle(e.style);this.renderer.chartIndex=this.index,N(this,"afterGetContainer")}getMargins(t){let{spacing:e,margin:i,titleOffset:s}=this;this.resetMargins(),s[0]&&!D(i[0])&&(this.plotTop=Math.max(this.plotTop,s[0]+e[0])),s[2]&&!D(i[2])&&(this.marginBottom=Math.max(this.marginBottom,s[2]+e[2])),this.legend&&this.legend.display&&this.legend.adjustMargins(i,e),N(this,"getMargins"),t||this.getAxisMargins()}getAxisMargins(){let t=this,e=t.axisOffset=[0,0,0,0],i=t.colorAxis,s=t.margin,r=function(t){t.forEach(function(t){t.visible&&t.getOffset()})};t.hasCartesianSeries?r(t.axes):i&&i.length&&r(i),k.forEach(function(i,r){D(s[r])||(t[i]+=e[r])}),t.setChartSize()}getOptions(){return E(this.userOptions,x)}reflow(t){let e=this,i=e.containerBox,s=e.getContainerBox();delete e.pointer?.chartPosition,!e.isPrinting&&!e.isResizing&&i&&s.width&&((s.width!==i.width||s.height!==i.height)&&(c.clearTimeout(e.reflowTimeout),e.reflowTimeout=K(function(){e.container&&e.setSize(void 0,void 0,!1)},t?100:0)),e.containerBox=s)}setReflow(){let t=this,e=e=>{t.options?.chart.reflow&&t.hasLoaded&&t.reflow(e)};if("function"==typeof ResizeObserver)new ResizeObserver(e).observe(t.renderTo);else{let t=T(w,"resize",e);T(this,"destroy",t)}}setSize(t,e,i){let s=this,r=s.renderer;s.isResizing+=1,m(i,s);let o=r.globalAnimation;s.oldChartHeight=s.chartHeight,s.oldChartWidth=s.chartWidth,void 0!==t&&(s.options.chart.width=t),void 0!==e&&(s.options.chart.height=e),s.getChartSize();let{chartWidth:a,chartHeight:n,scrollablePixelsX:h=0,scrollablePixelsY:l=0}=s;(s.isDirtyBox||a!==s.oldChartWidth||n!==s.oldChartHeight)&&(s.styledMode||(o?g:O)(s.container,{width:`${a+h}px`,height:`${n+l}px`},o),s.setChartSize(!0),r.setSize(a,n,o),s.axes.forEach(function(t){t.isDirty=!0,t.setScale()}),s.isDirtyLegend=!0,s.isDirtyBox=!0,s.layOutTitles(),s.getMargins(),s.redraw(o),s.oldCh
23499artHeight=void 0,N(s,"resize"),setTimeout(()=>{s&&N(s,"endResize")},f(o).duration)),s.isResizing-=1}setChartSize(t){let e,i,s,r;let{chartHeight:o,chartWidth:a,inverted:n,spacing:h,renderer:l}=this,d=this.clipOffset,c=Math[n?"floor":"round"];this.plotLeft=e=Math.round(this.plotLeft),this.plotTop=i=Math.round(this.plotTop),this.plotWidth=s=Math.max(0,Math.round(a-e-this.marginRight)),this.plotHeight=r=Math.max(0,Math.round(o-i-this.marginBottom)),this.plotSizeX=n?r:s,this.plotSizeY=n?s:r,this.spacingBox=l.spacingBox={x:h[3],y:h[0],width:a-h[3]-h[1],height:o-h[0]-h[2]},this.plotBox=l.plotBox={x:e,y:i,width:s,height:r},d&&(this.clipBox={x:c(d[3]),y:c(d[0]),width:c(this.plotSizeX-d[1]-d[3]),height:c(this.plotSizeY-d[0]-d[2])}),t||(this.axes.forEach(function(t){t.setAxisSize(),t.setAxisTranslation()}),l.alignElements()),N(this,"afterSetChartSize",{skipAxes:t})}resetMargins(){N(this,"resetMargins");let t=this,e=t.options.chart,i=e.plotBorderWidth||0,s=i/2;["margin","spacing"].forEach(function(i){let s=e[i],r=X(s)?s:[s,s,s,s];["Top","Right","Bottom","Left"].forEach(function(s,o){t[i][o]=V(e[i+s],r[o])})}),k.forEach(function(e,i){t[e]=V(t.margin[i],t.spacing[i])}),t.axisOffset=[0,0,0,0],t.clipOffset=[s,s,s,s],t.plotBorderWidth=i}drawChartBox(){let t=this.options.chart,e=this.renderer,i=this.chartWidth,s=this.chartHeight,r=this.styledMode,o=this.plotBGImage,a=t.backgroundColor,n=t.plotBackgroun
23499dColor,h=t.plotBackgroundImage,l=this.plotLeft,d=this.plotTop,c=this.plotWidth,p=this.plotHeight,u=this.plotBox,g=this.clipRect,f=this.clipBox,m=this.chartBackground,x=this.plotBackground,y=this.plotBorder,b,v,S,C="animate";m||(this.chartBackground=m=e.rect().addClass("highcharts-background").add(),C="attr"),r?b=v=m.strokeWidth():(v=(b=t.borderWidth||0)+(t.shadow?8:0),S={fill:a||"none"},(b||m["stroke-width"])&&(S.stroke=t.borderColor,S["stroke-width"]=b),m.attr(S).shadow(t.shadow)),m[C]({x:v/2,y:v/2,width:i-v-b%2,height:s-v-b%2,r:t.borderRadius}),C="animate",x||(C="attr",this.plotBackground=x=e.rect().addClass("highcharts-plot-background").add()),x[C](u),!r&&(x.attr({fill:n||"none"}).shadow(t.plotShadow),h&&(o?(h!==o.attr("href")&&o.attr("href",h),o.animate(u)):this.plotBGImage=e.image(h,l,d,c,p).add())),g?g.animate({width:f.width,height:f.height}):this.clipRect=e.clipRect(f),C="animate",y||(C="attr",this.plotBorder=y=e.rect().addClass("highcharts-plot-border").attr({zIndex:1}).add()),r||y.attr({stroke:t.plotBorderColor,"stroke-width":t.plotBorderWidth||0,fill:"none"}),y[C](y.crisp({x:l,y:d,width:c,height:p},-y.strokeWidth())),this.isDirtyBox=!1,N(this,"afterDrawChartBox")}propFromSeries(){let t,e,i;let s=this,r=s.options.chart,o=s.options.series;["inverted","angular","polar"].forEach(function(a){for(e=A[r.type],i=r[a]||e&&e.prototype[a],t=o&&o.length;!i&&t--;)(e=A[o[t].type])&&e.prototype[a]&&(i=!0);s[a]=i})}linkSeries(t){let e=this,i=e.series;i.forEach(function(t){t.linkedSeries.length=0}),i.forEach(function(t){let{linkedTo:i}=t.options;if(F(i)){let s;(s=":previous"===i?e.series[t.index-1]:e.get(i))&&s.linkedParent!==t&&(s.linkedSeries.push(t),t.linkedParent=s,s.enabledDataSorting&&t.setDataSortingOptions(),t.visible=V(t.options.visible,s.options.visible,t.visible))}}),N(this,"afterLinkSeries",{isUpdating:t})}renderSeries(){this.series.forEach(function(t){t.translate(),t.render()})}render(){let t=this.axes,e=this.colorAxis,i=this.renderer,s=this.options.chart.axisLayoutRuns||2,r=t=>{t.forEach(t=>{t.visible&&t.render()})},o=0,a=!0,n,h=0;for(let e of(this.setTitle(),N(this,"beforeMargins"),this.getStacks?.(),this.getMargins(!0),this.setChartSize(),t)){let{options:t}=e,{labels:i}=t;if(this.hasCartesianSeries&&e.horiz&&e.visible&&i.enabled&&e.series.length&&"colorAxis"!==e.coll&&!this.polar){o=t.tickLength,e.createGroups();let s=new u(e,0,"",!0),r=s.createLabel("x",i);if(s.destroy(),r&&V(i.reserveSpace,!H(t.crossing))&&(o=r.getBBox().height+i.distance+Math.max(t.offset||0,0)),o){r?.destroy();break}}}for(this.plotHeight=Math.max(this.plotHeight-o,0);(a||n||s>1)&&h<s;){let e=this.plotWidth,i=this.plotHeight;for(let e of t)0===h?e.setScale():(e.horiz&&a||!e.horiz&&n)&&e.setTickInterval(!0);0===h?this.getAxisMargins():this.getMargins(),a=e/this.plotWidth>(h?1:1.1),n=i/this.plotHeight>(h?1:1.05),h++}this.drawChartBox(),this.hasCartesianSeries?r(t):e&&e.length&&r(e),this.seriesGroup||(this.seriesGroup=i.g("series-group").attr({zIndex:3}).shadow(this.options.chart.seriesGroupShadow).add()),this.renderSeries(),this.addCredits(),this.setResponsive&&this.setResponsive(),this.hasRendered=!0}addCredits(t){let e=this,i=Y(!0,this.options.credits,t);i.enabled&&!this.credits&&(this.credits=this.renderer.text(i.text+(this.mapCredits||""),0,0).addClass("highcharts-credits").on("click",function(){i.href&&(w.location.href=i.href)}).attr({align:i.position.align,zIndex:8}),e.styledMode||this.credits.css(i.style),this.credits.add().align(i.position),this.credits.update=function(t){e.credits=e.credits.destroy(),e.addCredits(t)})}destroy(){let t;let e=this,i=e.axes,s=e.series,r=e.container,a=r&&r.parentNode;for(N(e,"destroy"),e.renderer.forExport?j(S,e):S[e.index]=void 0,o.chartCount--,e.renderTo.removeAttribute("data-highcharts-chart"),_(e),t=i.length;t--;)i[t]=i[t].destroy();for(this.scroller&&this.scroller.destroy&&this.scroller.destroy(),t=s.length;t--;)s[t]=s[t].destroy();
23499["title","subtitle","chartBackground","plotBackground","plotBGImage","plotBorder","seriesGroup","clipRect","credits","pointer","rangeSelector","legend","resetZoomButton","tooltip","renderer"].forEach(function(t){let i=e[t];i&&i.destroy&&(e[t]=i.destroy())}),r&&(r.innerHTML=p.emptyHTML,_(r),a&&I(r)),U(e,function(t,i){delete e[i]})}firstRender(){let t=this,e=t.options;t.getContainer(),t.resetMargins(),t.setChartSize(),t.propFromSeries(),t.getAxes();let i=G(e.series)?e.series:[];e.series=[],i.forEach(function(e){t.initSeries(e)}),t.linkSeries(),t.setSortedData(),N(t,"beforeRender"),t.render(),t.pointer?.getChartPosition(),t.renderer.imgCount||t.hasLoaded||t.onload(),t.temporaryDisplay(!0)}onload(){this.callbacks.concat([this.callback]).forEach(function(t){t&&void 0!==this.index&&t.apply(this,[this])},this),N(this,"load"),N(this,"render"),D(this.index)&&this.setReflow(),this.warnIfA11yModuleNotLoaded(),this.hasLoaded=!0}warnIfA11yModuleNotLoaded(){let{options:t,title:e}=this;!t||this.accessibility||(this.renderer.boxWrapper.attr({role:"img","aria-label":(e&&e.element.textContent||"").replace(/</g,"<")}),t.accessibility&&!1===t.accessibility.enabled||B('Highcharts warning: Consider including the "accessibility.js" module to make your chart more usable for people with disabilities. Set the "accessibility.enabled" option to false to remove this warning. See https://www.highcharts.com/docs/accessibility/accessibility-module.',!1,this))}addSeries(t,e,i){let s;let r=this;return t&&(e=V(e,!0),N(r,"addSeries",{options:t},function(){s=r.initSeries(t),r.isDirtyLegend=!0,r.linkSeries(),s.enabledDataSorting&&s.setData(t.data,!1),N(r,"afterAddSeries",{series:s}),e&&r.redraw(i)})),s}addAxis(t,e,i,s){return this.createAxis(e?"xAxis":"yAxis",{axis:t,redraw:i,animation:s})}addColorAxis(t,e,i){return this.createAxis("colorAxis",{axis:t,redraw:e,animation:i})}createAxis(t,i){let s=new e(this,i.axis,t);return V(i.redraw,!0)&&this.redraw(i.animation),s}showLoading(t){let e=this,i=e.options,s=i.loading,r=function(){o&&O(o,{left:e.plotLeft+"px",top:e.plotTop+"px",width:e.plotWidth+"px",height:e.plotHeight+"px"})},o=e.loadingDiv,a=e.loadingSpan;o||(e.loadingDiv=o=L("div",{className:"highcharts-loading highcharts-loading-hidden"},null,e.container)),a||(e.loadingSpan=a=L("span",{className:"highcharts-loading-inner"},null,o),T(e,"redraw",r)),o.className="highcharts-loading",p.setElementHTML(a,V(t,i.lang.loading,"")),e.styledMode||(O(o,R(s.style,{zIndex:10})),O(a,s.labelStyle),e.loadingShown||(O(o,{opacity:0,display:""}),g(o,{opacity:s.style.opacity||.5},{duration:s.showDuration||0}))),e.loadingShown=!0,r()}hideLoading(){let t=this.options,e=this.loadingDiv;e&&(e.className="highcharts-loading highcharts-loading-hidden",this.styledMode||g(e,{opacity:0},{duration:t.loading.hideDuration||100,complete:function(){O(e,{display:"none"})}})),this.loadingShown=!1}update(t,e,i,s){let r,o,a;let n=this,h={credits:"addCredits",title:"setTitle",subtitle:"setSubtitle",caption:"setCaption"},l=t.isResponsiveOptions,c=[];N(n,"update",{options:t}),l||n.setResponsive(!1,!0),t=E(t,n.options),n.userOptions=Y(n.userOptions,t);let p=t.chart;p&&(Y(!0,n.options.chart,p),this.setZoomOptions(),"className"in p&&n.setClassName(p.className),("inverted"in p||"polar"in p||"type"in p)&&(n.propFromSeries(),r=!0),"alignTicks"in p&&(r=!0),"events"in p&&v(this,p),U(p,function(t,e){-1!==n.propsRequireUpdateSeries.indexOf("chart."+e)&&(o=!0),-1!==n.propsRequireDirtyBox.indexOf(e)&&(n.isDirtyBox=!0),-1===n.propsRequireReflow.indexOf(e)||(n.isDirtyBox=!0,l||(a=!0))}),!n.styledMode&&p.style&&n.renderer.setStyle(n.options.chart.style||{})),!n.styledMode&&t.colors&&(this.options.colors=t.colors),t.time&&(this.time===y&&(this.time=new d(t.time)),Y(!0,n.options.time,t.time)),U(t,function(e,i){n[i]&&"function"==typeof n[i].update?n[i].update(e,!1):"function"==typeof n[h[i]]?n[h[i]](e):"colors"!==i&&-1===n.collectionsWithUpdate.indexOf(i)&&Y(!0,n.options[i],t[i]),"chart"!==i&&-1!==n.propsRequireUpdateSeries.indexOf(i)&&(o=!0)}),this.collectionsWithUpdate.forEach(function(e){t[e]&&(q(t[e]).forEach(function(t,s){let r;let o=D(t.id);o&&(r=n.get(t.id)),!r&&n[e]&&(r=n[e][V(t.index,s)])&&(o&&D(r.options.id)||r.options.isInternal)&&(r=void 0),r&&r.coll===e&&(r.update(t,!1),i&&(r.touched=!0)),!r&&i&&n.collectionsWithInit[e]&&(n.collectionsWithInit[e][0].apply(n,[t].concat(n.collectionsWithInit[e][1]||[]).concat([!1])).touched=!0)}),i&&n[e].forEach(function(t){t.touched||t.options.isInternal?delete t.touched:c.push(t)}))}
23499),c.forEach(function(t){t.chart&&t.remove&&t.remove(!1)}),r&&n.axes.forEach(function(t){t.update({},!1)}),o&&n.getSeriesOrderByLinks().forEach(function(t){t.chart&&t.update({},!1)},this);let u=p&&p.width,g=p&&(F(p.height)?Z(p.height,u||n.chartWidth):p.height);a||H(u)&&u!==n.chartWidth||H(g)&&g!==n.chartHeight?n.setSize(u,g,s):V(e,!0)&&n.redraw(s),N(n,"afterUpdate",{options:t,redraw:e,animation:s})}setSubtitle(t,e){this.applyDescription("subtitle",t),this.layOutTitles(e)}setCaption(t,e){this.applyDescription("caption",t),this.layOutTitles(e)}showResetZoom(){let t=this,e=x.lang,i=t.zooming.resetButton,s=i.theme,r="chart"===i.relativeTo||"spacingBox"===i.relativeTo?null:"plotBox";function o(){t.zoomOut()}N(this,"beforeShowResetZoom",null,function(){t.resetZoomButton=t.renderer.button(e.resetZoom,null,null,o,s).attr({align:i.position.align,title:e.resetZoomTitle}).addClass("highcharts-reset-zoom").add().align(i.position,!1,r)}),N(this,"afterShowResetZoom")}zoomOut(){N(this,"selection",{resetSelection:!0},()=>this.transform({reset:!0,trigger:"zoom"}))}pan(t,e){let i=this,s="object"==typeof e?e:{enabled:e,type:"x"},r=s.type,o=r&&i[({x:"xAxis",xy:"axes",y:"yAxis"})[r]].filter(t=>t.options.panningEnabled&&!t.options.isInternal),a=i.options.chart;a?.panning&&(a.panning=s),N(this,"pan",{originalEvent:t},()=>{i.transform({axes:o,event:t,to:{x:t.chartX-(i.mouseDownX||0),y:t.chartY-(i.mouseDownY||0)},trigger:"pan"}),O(i.container,{cursor:"move"})})}transform(t){let{axes:e=this.axes,event:i,from:s={},reset:r,selection:o,to:a={},trigger:n}=t,{inverted:h}=this,l=!1,d;for(let t of(this.hoverPoints?.forEach(t=>t.setState()),e)){let{horiz:e,len:c,minPointOffset:p=0,options:u,reversed:g}=t,f=e?"width":"height",m=e?"x":"y",x=V(a[f],t.len),y=V(s[f],t.len),b=10>Math.abs(x)?1:x/y,v=(s[m]||0)+y/2-t.pos,S=v-((a[m]??t.pos)+x/2-t.pos)/b,C=g&&!h||!g&&h?-1:1;if(!r&&(v<0||v>t.len))continue;let k=t.toValue(S,!0)+(o?0:p*C),M=t.toValue(S+c/b,!0)-(o?0:p*C||0),w=t.allExtremes;if(k>M&&([k,M]=[M,k]),1===b&&!r&&"yAxis"===t.coll&&!w){for(let e of t.series){let t=e.getExtremes(e.getProcessedData(!0).yData,!0);w??(w={dataMin:Number.MAX_VALUE,dataMax:-Number.MAX_VALUE}),H(t.dataMin)&&H(t.dataMax)&&(w.dataMin=Math.min(t.dataMin,w.dataMin),w.dataMax=Math.max(t.dataMax,w.dataMax))}t.allExtremes=w}let{dataMin:A,dataMax:T,min:P,max:L}=R(t.getExtremes(),w||{}),O=A??u.min,E=T??u.max,I=M-k,j=t.categories?0:Math.min(I,E-O),B=O-j*(D(u.min)?0:u.minPadding),z=E+j*(D(u.max)?0:u.maxPadding),N=t.allowZoomOutside||1===b||"zoom"!==n&&b>1,W=Math.min(u.min??B,B,N?P:B),G=Math.max(u.max??z,z,N?L:z);(!t.isOrdinal||1!==b||r)&&(k<W&&(k=W,b>=1&&(M=k+I)),M>G&&(M=G,b>=1&&(k=M-I)),(r||t.series.length&&(k!==P||M!==L)&&k>=W&&M<=G)&&(o?o[t.coll].push({axis:t,min:k,max:M}):(t.isPanning="zoom"!==n,t.setExtremes(r?void 0:k,r?void 0:M,!1,!1,{move:S,trigger:n,scale:b}),!r&&(k>W||M<G)&&"mousewheel"!==n&&(d=!0)),l=!0),i&&(this[e?"mouseDownX":"mouseDownY"]=i[e?"chartX":"chartY"]))}return l&&(o?N(this,"selection",o,()=>{delete t.selection,t.trigger="zoom",this.transform(t)}):(d&&!this.resetZoomButton?this.showResetZoom():!d&&this.resetZoomButton&&(this.resetZoomButton=this.resetZoomButton.destroy()),this.redraw("zoom"===n&&(this.options.chart.animation??this.pointCount<100)))),l}}return R(Q.prototype,{callbacks:[],collectionsWithInit:{xAxis:[Q.prototype.addAxis,[!0]],yAxis:[Q.prototype.addAxis,[!1]],series:[Q.prototype.addSeries]},collectionsWithUpdate:["xAxis","yAxis","series"],propsRequireDirtyBox:["backgroundColor","borderColor","borderWidth","borderRadius","plotBackgroun
23499dColor","plotBackgroundImage","plotBorderColor","plotBorderWidth","plotShadow","shadow"],propsRequireReflow:["margin","marginTop","marginRight","marginBottom","marginLeft","spacing","spacingTop","spacingRight","spacingBottom","spacingLeft"],propsRequireUpdateSeries:["chart.inverted","chart.polar","chart.ignoreHiddenSeries","chart.type","colors","plotOptions","time","tooltip"]}),Q}),i(e,"Extensions/ScrollablePlotArea.js",[e["Core/Animation/AnimationUtilities.js"],e["Core/Globals.js"],e["Core/Renderer/RendererRegistry.js"],e["Core/Utilities.js"]],function(t,e,i,s){let{stop:r}=t,{composed:o}=e,{addEvent:a,createElement:n,css:h,defined:l,merge:d,pushUnique:c}=s;function p(){let t=this.scrollablePlotArea;(this.scrollablePixelsX||this.scrollablePixelsY)&&!t&&(this.scrollablePlotArea=t=new g(this)),t?.applyFixed()}function u(){this.chart.scrollablePlotArea&&(this.chart.scrollablePlotArea.isDirty=!0)}class g{static compose(t,e,i){c(o,this.compose)&&(a(t,"afterInit",u),a(e,"afterSetChartSize",t=>this.afterSetSize(t.target,t)),a(e,"render",p),a(i,"show",u))}static afterSetSize(t,e){let i,s,r;let{minWidth:o,minHeight:a}=t.options.chart.scrollablePlotArea||{},{clipBox:n,plotBox:h,inverted:c,renderer:p}=t;if(!p.forExport&&(o?(t.scrollablePixelsX=i=Math.max(0,o-t.chartWidth),i&&(t.scrollablePlotBox=d(t.plotBox),h.width=t.plotWidth+=i,n[c?"height":"width"]+=i,r=!0)):a&&(t.scrollablePixelsY=s=Math.max(0,a-t.chartHeight),l(s)&&(t.scrollablePlotBox=d(t.plotBox),h.height=t.plotHeight+=s,n[c?"width":"height"]+=s,r=!1)),l(r)&&!e.skipAxes))for(let e of t.axes)e.horiz===r&&(e.setAxisSize(),e.setAxisTranslation())}constructor(t){let e;let s=t.options.chart,r=i.getRendererType(),o=s.scrollablePlotArea||{},l=this.moveFixedElements.bind(this),d={WebkitOverflowScrolling:"touch",overflowX:"hidden",overflowY:"hidden"};t.scrollablePixelsX&&(d.overflowX="auto"),t.scrollablePixelsY&&(d.overflowY="auto"),this.chart=t;let c=this.parentDiv=n("div",{className:"highcharts-scrolling-parent"},{position:"relative"},t.renderTo),p=this.scrollingContainer=n("div",{className:"highcharts-scrolling"},d,c),u=this.innerContainer=n("div",{className:"highcharts-inner-container"},void 0,p),g=this.fixedDiv=n("div",{className:"highcharts-fixed"},{position:"absolute",overflow:"hidden",pointerEvents:"none",zIndex:(s.style?.zIndex||0)+2,top:0},void 0,!0),f=this.fixedRenderer=new r(g,t.chartWidth,t.chartHeight,s.style);this.mask=f.path().attr({fill:s.backgroundColor||"#fff","fill-opacity":o.opacity??.85,zIndex:-1}).addClass("highcharts-scrollable-mask").add(),p.parentNode.insertBefore(g,p),h(t.renderTo,{overflow:"visible"}),a(t,"afterShowResetZoom",l),a(t,"afterApplyDrilldown",l),a(t,"afterLayOutTitles",l),a(p,"scroll",()=>{let{pointer:i,hoverPoint:s}=t;i&&(delete i.chartPosition,s&&(e=s),i.runPointActions(void 0,e,!0))}),u.appendChild(t.container)}applyFixed(){let{chart:t,fixedRenderer:e,isDirty:i,scrollingContainer:s}=this,{axisOffset:o,chartWidth:a,chartHeight:n,container:d,plotHeight:c,plotLeft:p,plotTop:u,plotWidth:g,scrollablePixelsX:f=0,scrollablePixelsY:m=0}=t,{scrollPositionX:x=0,scrollPositionY:y=0}=t.options.chart.scrollablePlotArea||{},b=a+f,v=n+m;e.setSize(a,n),(i??!0)&&(this.isDirty=!1,this.moveFixedElements()),r(t.container),h(d,{width:`${b}px`,height:`${v}px`}),t.renderer.boxWrapper.attr({width:b,height:v,viewBox:[0,0,b,v].join(" ")}),t.chartBackground?.attr({width:b,height:v}),h(s,{width:`${a}px`,height:`${n}px`}),l(i)||(s.scrollLeft=f*x,s.scrollTop=m*y);let S=u-o[0]-1,C=p-o[3]-1,k=u+c+o[2]+1,M=p+g+o[1]+1,w=p+g-f,A=u+c-m,T=[["M",0,0]];f?T=[["M",0,S],["L",p-1,S],["L",p-1,k],["L",0,k],["Z"],["M",w,S],["L",a,S],["L",a,k],["L",w,k],["Z"]]:m&&(T=[["M",C,0],["L",C,u-1],["L",M,u-1],["L",M,0],["Z"],["M",C,A],["L",C,n],["L",M,n],["L",M,A],["Z"]]),"adjustHeight"!==t.redrawTrigger&&this.mask.attr({d:T})}moveFixedElements(){let t;let{container:e,inverted:i,scrollablePixelsX:s,scrollablePixelsY:r}=this.chart,o=this.fixedRenderer,a=g.fixedSelectors;for(let n of(s&&!i?t=".highcharts-yaxis":s&&i?t=".highcharts-xaxis":r&&!i?t=".highcharts-xaxis":r&&i&&(t=".highcharts-yaxis"),t&&a.push(`${t}:not(.highcharts-radial-axis)`,`${t}-labels:not(.highcharts-radial-axis-labels)`),a))[].forEach.call(e.querySelectorAll(n),t=>
23499{(t.namespaceURI===o.SVG_NS?o.box:o.box.parentNode).appendChild(t),t.style.pointerEvents="auto"})}}return g.fixedSelectors=[".highcharts-breadcrumbs-group",".highcharts-contextbutton",".highcharts-caption",".highcharts-credits",".highcharts-drillup-button",".highcharts-legend",".highcharts-legend-checkbox",".highcharts-navigator-series",".highcharts-navigator-xaxis",".highcharts-navigator-yaxis",".highcharts-navigator",".highcharts-range-selector-group",".highcharts-reset-zoom",".highcharts-scrollbar",".highcharts-subtitle",".highcharts-title"],g}),i(e,"Core/Axis/Stacking/StackItem.js",[e["Core/Templating.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e,i){let{format:s}=t,{series:r}=e,{destroyObjectProperties:o,fireEvent:a,isNumber:n,pick:h}=i;return class{constructor(t,e,i,s,r){let o=t.chart.inverted,a=t.reversed;this.axis=t;let n=this.isNegative=!!i!=!!a;this.options=e=e||{},this.x=s,this.total=null,this.cumulative=null,this.points={},this.hasValidPoints=!1,this.stack=r,this.leftCliff=0,this.rightCliff=0,this.alignOptions={align:e.align||(o?n?"left":"right":"center"),verticalAlign:e.verticalAlign||(o?"middle":n?"bottom":"top"),y:e.y,x:e.x},this.textAlign=e.textAlign||(o?n?"right":"left":"center")}destroy(){o(this,this.axis)}render(t){let e=this.axis.chart,i=this.options,r=i.format,o=r?s(r,this,e):i.formatter.call(this);if(this.label)this.label.attr({text:o,visibility:"hidden"});else{this.label=e.renderer.label(o,null,void 0,i.shape,void 0,void 0,i.useHTML,!1,"stack-labels");let s={r:i.borderRadius||0,text:o,padding:h(i.padding,5),visibility:"hidden"};e.styledMode||(s.fill=i.backgroundColor,s.stroke=i.borderColor,s["stroke-width"]=i.borderWidth,this.label.css(i.style||{})),this.label.attr(s),this.label.added||this.label.add(t)}this.label.labelrank=e.plotSizeY,a(this,"afterRender")}setOffset(t,e,i,s,o,l){let{alignOptions:d,axis:c,label:p,options:u,textAlign:g}=this,f=c.chart,m=this.getStackBox({xOffset:t,width:e,boxBottom:i,boxTop:s,defaultX:o,xAxis:l}),{verticalAlign:x}=d;if(p&&m){let t=p.getBBox(void 0,0),e=p.padding,i="justify"===h(u.overflow,"justify"),s;d.x=u.x||0,d.y=u.y||0;let{x:o,y:a}=this.adjustStackPosition({labelBox:t,verticalAlign:x,textAlign:g});m.x-=o,m.y-=a,p.align(d,!1,m),(s=f.isInsidePlot(p.alignAttr.x+d.x+o,p.alignAttr.y+d.y+a))||(i=!1),i&&r.prototype.justifyDataLabel.call(c,p,d,p.alignAttr,t,m),p.attr({x:p.alignAttr.x,y:p.alignAttr.y,rotation:u.rotation,rotationOriginX:t.width*({left:0,center:.5,right:1})[u.textAlign||"center"],rotationOriginY:t.height/2}),h(!i&&u.crop,!0)&&(s=n(p.x)&&n(p.y)&&f.isInsidePlot(p.x-e+(p.width||0),p.y)&&f.isInsidePlot(p.x+e,p.y)),p[s?"show":"hide"]()}a(this,"afterSetOffset",{xOffset:t,width:e})}adjustStackPosition({labelBox:t,verticalAlign:e,textAlign:i}){let s={bottom:0,middle:1,top:2,right:1,center:0,left:-1},r=s[e],o=s[i];return{x:t.width/2+t.width/2*o,y:t.height/2*r}}getStackBox(t){let e=this.axis,i=e.chart,{boxTop:s,defaultX:r,xOffset:o,width:a,boxBottom:l}=t,d=e.stacking.usePercentage?100:h(s,this.total,0),c=e.toPixels(d),p=t.xAxis||i.xAxis[0],u=h(r,p.translate(this.x))+o,g=Math.abs(c-e.toPixels(l||n(e.min)&&e.logarithmic&&e.logarithmic.lin2log(e.min)||0)),f=i.inverted,m=this.isNegative;return f?{x:(m?c:c-g)-i.plotLeft,y:p.height-u-a,width:g,height:a}:{x:u+p.transB-i.plotLeft,y:(m?c-g:c)-i.plotTop,width:a,height:g}}}}),i(e,"Core/Axis/Stacking/StackingAxis.js",[e["Core/Animation/AnimationUtilities.js"],e["Core/Axis/Axis.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Axis/Stacking/StackItem.js"],e["Core/Utilities.js"]],function(t,e,i,s,r){var o;let{getDeferredAnimation:a}=t,{series:{prototype:n}}=i,{addEvent:h,correctFloat:l,defined:d,destroyObjectProperties:c,fireEvent:p,isArray:u,isNumber:g,objectEach:f,pick:m}=r;function x(){let t=this.inverted;this.axes.forEach(t=>{t.stacking&&t.stacking.stacks&&t.hasVisibleSeries&&(t.stacking.oldStacks=t.stacking.stacks)}),this.series.forEach(e=>{let i=e.xAxis&&e.xAxis.options||{};e.options.stacking&&e.reserveSpace()&&(e.stackKey=[e.type,m(e.options.stack,""),t?i.top:i.left,t?i.height:i.width].join(","))})}function y(){let t=this.stacking;if(t){let e=t.stacks;f(e,(t,i)=>{c(t),delete e[i]}),t.stackTotalGroup?.destroy()}}function b(){this.stacking||(this.stacking=new w(this))}function v(t,e,i,s){return!d(t)||t.x!==e||s&&t.stackKey!==s?t={x:e,index:0,key:s,stackKey:s}:t.index++,t.key=[i,e,t.index].join(","),t}function S(){let t;let e=this,i=e.yAxis,s=e.stackKey||"",r=i.stacking.stacks,o=e.processedXData,a=e.options.stacking,n=e[a+"Stacker"];
23499n&&[s,"-"+s].forEach(i=>{let s=o.length,a,h,l;for(;s--;)a=o[s],t=e.getStackIndicator(t,a,e.index,i),h=r[i]?.[a],(l=h?.points[t.key||""])&&n.call(e,l,h,s)})}function C(t,e,i){let s=e.total?100/e.total:0;t[0]=l(t[0]*s),t[1]=l(t[1]*s),this.stackedYData[i]=t[1]}function k(t){(this.is("column")||this.is("columnrange"))&&(this.options.centerInCategory&&!this.options.stacking&&this.chart.series.length>1?n.setStackedPoints.call(this,t,"group"):t.stacking.resetStacks())}function M(t,e){let i,r,o,a,n,h,c,p,g;let f=e||this.options.stacking;if(!f||!this.reserveSpace()||(({group:"xAxis"})[f]||"yAxis")!==t.coll)return;let x=this.processedXData,y=this.processedYData,b=[],v=y.length,S=this.options,C=S.threshold||0,k=S.startFromThreshold?C:0,M=S.stack,w=e?`${this.type},${f}`:this.stackKey||"",A="-"+w,T=this.negStacks,P=t.stacking,L=P.stacks,O=P.oldStacks;for(P.stacksTouched+=1,c=0;c<v;c++){p=x[c],g=y[c],h=(i=this.getStackIndicator(i,p,this.index)).key||"",L[n=(r=T&&g<(k?0:C))?A:w]||(L[n]={}),L[n][p]||(O[n]?.[p]?(L[n][p]=O[n][p],L[n][p].total=null):L[n][p]=new s(t,t.options.stackLabels,!!r,p,M)),o=L[n][p],null!==g?(o.points[h]=o.points[this.index]=[m(o.cumulative,k)],d(o.cumulative)||(o.base=h),o.touched=P.stacksTouched,i.index>0&&!1===this.singleStacks&&(o.points[h][0]=o.points[this.index+","+p+",0"][0])):(delete o.points[h],delete o.points[this.index]);let e=o.total||0;"percent"===f?(a=r?w:A,e=T&&L[a]?.[p]?(a=L[a][p]).total=Math.max(a.total||0,e)+Math.abs(g)||0:l(e+(Math.abs(g)||0))):"group"===f?(u(g)&&(g=g[0]),null!==g&&e++):e=l(e+(g||0)),"group"===f?o.cumulative=(e||1)-1:o.cumulative=l(m(o.cumulative,k)+(g||0)),o.total=e,null!==g&&(o.points[h].push(o.cumulative),b[c]=o.cumulative,o.hasValidPoints=!0)}"percent"===f&&(P.usePercentage=!0),"group"!==f&&(this.stackedYData=b),P.oldStacks={}}class w{constructor(t){this.oldStacks={},this.stacks={},this.stacksTouched=0,this.axis=t}buildStacks(){let t,e;let i=this.axis,s=i.series,r="xAxis"===i.coll,o=i.options.reversedStacks,a=s.length;for(this.resetStacks(),this.usePercentage=!1,e=a;e--;)t=s[o?e:a-e-1],r&&t.setGroupedPoints(i),t.setStackedPoints(i);if(!r)for(e=0;e<a;e++)s[e].modifyStacks();p(i,"afterBuildStacks")}cleanStacks(){this.oldStacks&&(this.stacks=this.oldStacks,f(this.stacks,t=>{f(t,t=>{t.cumulative=t.total})}))}resetStacks(){f(this.stacks,t=>{f(t,(e,i)=>{g(e.touched)&&e.touched<this.stacksTouched?(e.destroy(),delete t[i]):(e.total=null,e.cumulative=null)})})}renderStackTotals(){let t=this.axis,e=t.chart,i=e.renderer,s=this.stacks,r=a(e,t.options.stackLabels?.animation||!1),o=this.stackTotalGroup=this.stackTotalGroup||i.g("stack-labels").attr({zIndex:6,opacity:0}).add();o.translate(e.plotLeft,e.plotTop),f(s,t=>{f(t,t=>{t.render(o)})}),o.animate({opacity:1},r)}}return(o||(o={})).compose=function(t,e,i){let s=e.prototype,r=i.prototype;s.getStacks||(h(t,"init",b),h(t,"destroy",y),s.getStacks=x,r.getStackIndicator=v,r.modifyStacks=S,r.percentStacker=C,r.setGroupedPoints=k,r.setStackedPoints=M)},o}),i(e,"Series/Line/LineSeries.js",[e["Core/Series/Series.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e,i){let{defined:s,merge:r,isObject:o}=i;class a extends t{drawGraph(){let t=this.options,e=(this.gappedPath||this.getGraphPath).call(this),i=this.chart.styledMode;[this,...this.zones].forEach((s,a)=>{let n,h=s.graph,l=h?"animate":"attr",d=s.dashStyle||t.dashStyle;h?(h.endX=this.preventGraphAnimation?null:e.xMap,h.animate({d:e})):e.length&&(s.graph=h=this.chart.renderer.path(e).addClass("highcharts-graph"+(a?` highcharts-zone-graph-${a-1} `:" ")+(a&&s.className||"")).attr({zIndex:1}).add(this.group)),h&&!i&&(n={stroke:!a&&t.lineColor||s.color||this.color||"#cccccc","stroke-width":t.lineWidth||0,fill:this.fillGraph&&this.color||"none"},d?n.dashstyle=d:"square"!==t.linecap&&(n["stroke-linecap"]=n["stroke-linejoin"]="round"),h[l](n).shadow(a<2&&t.shadow&&r({filterUnits:"userSpaceOnUse"},o(t.shadow)?t.shadow:{}))),h&&(h.startX=e.xMap,h.isArea=e.isArea)})}getGraphPath(t,e,i){let r=this,o=r.options,a=[],n=[],h,l=o.step,d=(t=t||r.points).reversed;return d&&t.reverse(),(l=({right:1,center:2})[l]||l&&3)&&d&&(l=4-l),(t=this.getValidPoints(t,!1,!(o.connectNulls&&!e&&!i))).forEac
23499h(function(d,c){let p;let u=d.plotX,g=d.plotY,f=t[c-1],m=d.isNull||"number"!=typeof g;(d.leftCliff||f&&f.rightCliff)&&!i&&(h=!0),m&&!s(e)&&c>0?h=!o.connectNulls:m&&!e?h=!0:(0===c||h?p=[["M",d.plotX,d.plotY]]:r.getPointSpline?p=[r.getPointSpline(t,d,c)]:l?(p=1===l?[["L",f.plotX,g]]:2===l?[["L",(f.plotX+u)/2,f.plotY],["L",(f.plotX+u)/2,g]]:[["L",u,f.plotY]]).push(["L",u,g]):p=[["L",u,g]],n.push(d.x),l&&(n.push(d.x),2===l&&n.push(d.x)),a.push.apply(a,p),h=!1)}),a.xMap=n,r.graphPath=a,a}}return a.defaultOptions=r(t.defaultOptions,{legendSymbol:"lineMarker"}),e.registerSeriesType("line",a),a}),i(e,"Series/Area/AreaSeriesDefaults.js",[],function(){return{threshold:0,legendSymbol:"areaMarker"}}),i(e,"Series/Area/AreaSeries.js",[e["Series/Area/AreaSeriesDefaults.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e,i){let{seriesTypes:{line:s}}=e,{extend:r,merge:o,objectEach:a,pick:n}=i;class h extends s{drawGraph(){this.areaPath=[],super.drawGraph.apply(this);let{areaPath:t,options:e}=this;[this,...this.zones].forEach((i,s)=>{let r={},o=i.fillColor||e.fillColor,a=i.area,n=a?"animate":"attr";a?(a.endX=this.preventGraphAnimation?null:t.xMap,a.animate({d:t})):(r.zIndex=0,(a=i.area=this.chart.renderer.path(t).addClass("highcharts-area"+(s?` highcharts-zone-area-${s-1} `:" ")+(s&&i.className||"")).add(this.group)).isArea=!0),this.chart.styledMode||(r.fill=o||i.color||this.color,r["fill-opacity"]=o?1:e.fillOpacity??.75,a.css({pointerEvents:this.stickyTracking?"none":"auto"})),a[n](r),a.startX=t.xMap,a.shiftUnit=e.step?2:1})}getGraphPath(t){let e,i,r;let o=s.prototype.getGraphPath,a=this.options,h=a.stacking,l=this.yAxis,d=[],c=[],p=this.index,u=l.stacking.stacks[this.stackKey],g=a.threshold,f=Math.round(l.getThreshold(a.threshold)),m=n(a.connectNulls,"percent"===h),x=function(i,s,r){let o=t[i],a=h&&u[o.x].points[p],n=o[r+"Null"]||0,m=o[r+"Cliff"]||0,x,y,b=!0;m||n?(x=(n?a[0]:a[1])+m,y=a[0]+m,b=!!n):!h&&t[s]&&t[s].isNull&&(x=y=g),void 0!==x&&(c.push({plotX:e,plotY:null===x?f:l.getThreshold(x),isNull:b,isCliff:!0}
23499),d.push({plotX:e,plotY:null===y?f:l.getThreshold(y),doCurve:!1}))};t=t||this.points,h&&(t=this.getStackPoints(t));for(let s=0,o=t.length;s<o;++s)h||(t[s].leftCliff=t[s].rightCliff=t[s].leftNull=t[s].rightNull=void 0),i=t[s].isNull,e=n(t[s].rectPlotX,t[s].plotX),r=h?n(t[s].yBottom,f):f,i&&!m||(m||x(s,s-1,"left"),i&&!h&&m||(c.push(t[s]),d.push({x:s,plotX:e,plotY:r})),m||x(s,s+1,"right"));let y=o.call(this,c,!0,!0);d.reversed=!0;let b=o.call(this,d,!0,!0),v=b[0];v&&"M"===v[0]&&(b[0]=["L",v[1],v[2]]);let S=y.concat(b);S.length&&S.push(["Z"]);let C=o.call(this,c,!1,m);return S.xMap=y.xMap,this.areaPath=S,C}getStackPoints(t){let e=this,i=[],s=[],r=this.xAxis,o=this.yAxis,h=o.stacking.stacks[this.stackKey],l={},d=o.series,c=d.length,p=o.options.reversedStacks?1:-1,u=d.indexOf(e);if(t=t||this.points,this.options.stacking){for(let e=0;e<t.length;e++)t[e].leftNull=t[e].rightNull=void 0,l[t[e].x]=t[e];a(h,function(t,e){null!==t.total&&s.push(e)}),s.sort(function(t,e){return t-e});let g=d.map(t=>t.visible);s.forEach(function(t,a){let f=0,m,x;if(l[t]&&!l[t].isNull)i.push(l[t]),[-1,1].forEach(function(i){let r=1===i?"rightNull":"leftNull",o=h[s[a+i]],n=0;if(o){let i=u;for(;i>=0&&i<c;){let s=d[i].index;!(m=o.points[s])&&(s===e.index?l[t][r]=!0:g[i]&&(x=h[t].points[s])&&(n-=x[1]-x[0])),i+=p}}l[t][1===i?"rightCliff":"leftCliff"]=n});else{let e=u;for(;e>=0&&e<c;){let i=d[e].index;if(m=h[t].points[i]){f=m[1];break}e+=p}f=n(f,0),f=o.translate(f,0,1,0,1),i.push({isNull:!0,plotX:r.translate(t,0,0,0,1),x:t,plotY:f,yBottom:f})}})}return i}}return h.defaultOptions=o(s.defaultOptions,t),r(h.prototype,{singleStacks:!1}),e.registerSeriesType("area",h),h}),i(e,"Series/Spline/SplineSeries.js",[e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e){let{line:i}=t.seriesTypes,{merge:s,pick:r}=e;class o extends i{getPointSpline(t,e,i){let s,o,a,n;let h=e.plotX||0,l=e.plotY||0,d=t[i-1],c=t[i+1];function p(t){return t&&!t.isNull&&!1!==t.doCurve&&!e.isCliff}if(p(d)&&p(c)){let t=d.plotX||0,i=d.plotY||0,r=c.plotX||0,p=c.plotY||0,u=0;s=(1.5*h+t)/2.5,o=(1.5*l+i)/2.5,a=(1.5*h+r)/2.5,n=(1.5*l+p)/2.5,a!==s&&(u=(n-o)*(a-h)/(a-s)+l-n),o+=u,n+=u,o>i&&o>l?(o=Math.max(i,l),n=2*l-o):o<i&&o<l&&(o=Math.min(i,l),n=2*l-o),n>p&&n>l?(n=Math.max(p,l),o=2*l-n):n<p&&n<l&&(n=Math.min(p,l),o=2*l-n),e.rightContX=a,e.rightContY=n,e.controlPoints={low:[s,o],high:[a,n]}}let u=["C",r(d.rightContX,d.plotX,0),r(d.rightContY,d.plotY,0),r(s,h,0),r(o,l,0),h,l];return d.rightContX=d.rightContY=void 0,u}}return o.defaultOptions=s(i.defaultOptions),t.registerSeriesType("spline",o),o}),i(e,"Series/AreaSpline/AreaSplineSeries.js",[e["Series/Spline/SplineSeries.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e,i){let{area:s,area:{prototype:r}}=e.seriesTypes,{extend:o,merge:a}=i;class n extends t{}return n.defaultOptions=a(t.defaultOptions,s.defaultOptions),o(n.prototype,{getGraphPath:r.getGraphPath,getStackPoints:r.getStackPoints,drawGraph:r.drawGraph}),e.registerSeriesType("areaspline",n),n}),i(e,"Series/Column/ColumnSeriesDefaults.js",[],function(){return{borderRadius:3,centerInCategory:!1,groupPadding:.2,marker:null,pointPadding:.1,minPointLength:0,cropThreshold:50,pointRange:null,states:{hover:{halo:!1,brightness:.1},select:{color:"#cccccc",borderColor:"#000000"}},dataLabels:{align:void 0,verticalAlign:void 0,y:void 0},startFromThreshold:!0,stickyTracking:!1,tooltip:{distance:6},threshold:0,borderColor:"#ffffff"}}),i(e,"Series/Column/ColumnSeries.js",[e["Core/Animation/AnimationUtilities.js"],e["Core/Color/Color.js"],e["Series/Column/ColumnSeriesDefaults.js"],e["Core/Globals.js"],e["Core/Series/Series.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e,i,s,r,o,a){let{animObject:n}=t,{parse:h}=e,{noop:l}=s,{clamp:d,crisp:c,defined:p,extend:u,fireEvent:g,isArray:f,isNumber:m,merge:x,pick:y,objectEach:b}=a;class v extends r{animate(t){let e,i;let s=this,r=this.yAxis,o=r.pos,a=r.reversed,h=s.options,{clipOffset:l,inverted:c}=this.chart,p={},g=c?"translateX":"translateY";t&&l?(p.scaleY=.001,i=d(r.toPixels(h.threshold),o,o+r.len),c?(i+=a?-Math.floor(l[0]):Math.ceil(l[2]),p.translateX=i-r.len):(i+=a?Math.
23499ceil(l[0]):-Math.floor(l[2]),p.translateY=i),s.clipBox&&s.setClip(),s.group.attr(p)):(e=Number(s.group.attr(g)),s.group.animate({scaleY:1},u(n(s.options.animation),{step:function(t,i){s.group&&(p[g]=e+i.pos*(o-e),s.group.attr(p))}})))}init(t,e){super.init.apply(this,arguments);let i=this;(t=i.chart).hasRendered&&t.series.forEach(function(t){t.type===i.type&&(t.isDirty=!0)})}getColumnMetrics(){let t=this,e=t.options,i=t.xAxis,s=t.yAxis,r=i.options.reversedStacks,o=i.reversed&&!r||!i.reversed&&r,a={},n,h=0;!1===e.grouping?h=1:t.chart.series.forEach(function(e){let i;let r=e.yAxis,o=e.options;e.type===t.type&&e.reserveSpace()&&s.len===r.len&&s.pos===r.pos&&(o.stacking&&"group"!==o.stacking?(void 0===a[n=e.stackKey]&&(a[n]=h++),i=a[n]):!1!==o.grouping&&(i=h++),e.columnIndex=i)});let l=Math.min(Math.abs(i.transA)*(!i.brokenAxis?.hasBreaks&&i.ordinal?.slope||e.pointRange||i.closestPointRange||i.tickInterval||1),i.len),d=l*e.groupPadding,c=(l-2*d)/(h||1),p=Math.min(e.maxPointWidth||i.len,y(e.pointWidth,c*(1-2*e.pointPadding))),u=(t.columnIndex||0)+(o?1:0);return t.columnMetrics={width:p,offset:(c-p)/2+(d+u*c-l/2)*(o?-1:1),paddedWidth:c,columnCount:h},t.columnMetrics}crispCol(t,e,i,s){let r=this.borderWidth,o=this.chart.inverted;return s=c(e+s,r,o)-(e=c(e,r,o)),this.options.crisp&&(i=c(t+i,r)-(t=c(t,r))),{x:t,y:e,width:i,height:s}}adjustForMissingColumns(t,e,i,s){if(!i.isNull&&s.columnCount>1){let r=this.xAxis.series.filter(t=>t.visible).map(t=>t.index),o=0,a=0;b(this.xAxis.stacking?.stacks,t=>{if("number"==typeof i.x){let e=t[i.x.toString()];if(e&&f(e.points[this.index])){let t=Object.keys(e.points).filter(t=>!t.match(",")&&e.points[t]&&e.points[t].length>1).map(parseFloat).filter(t=>-1!==r.indexOf(t)).sort((t,e)=>e-t);o=t.indexOf(this.index),a=t.length}}}),o=this.xAxis.reversed?a-1-o:o;let n=(a-1)*s.paddedWidth+e;t=(i.plotX||0)+n/2-e-o*s.paddedWidth}return t}translate(){let t=this,e=t.chart,i=t.options,s=t.dense=t.closestPointRange*t.xAxis.transA<2,o=t.borderWidth=y(i.borderWidth,s?0:1),a=t.xAxis,n=t.yAxis,h=i.threshold,l=y(i.minPointLength,5),c=t.getColumnMetrics(),u=c.width,f=t.pointXOffset=c.offset,x=t.dataMin,b=t.dataMax,v=t.translatedThreshold=n.getThreshold(h),S=t.barW=Math.max(u,1+2*o);i.pointPadding&&(S=Math.ceil(S)),r.prototype.translate.apply(t),t.points.forEach(function(s){let r=y(s.yBottom,v),o=999+Math.abs(r),g=s.plotX||0,C=d(s.plotY,-o,n.len+o),k,M=Math.min(C,r),w=Math.max(C,r)-M,A=u,T=g+f,P=S;l&&Math.abs(w)<l&&(w=l,k=!n.reversed&&!s.negative||n.reversed&&s.negative,m(h)&&m(b)&&s.y===h&&b<=h&&(n.min||0)<h&&(x!==b||(n.max||0)<=h)&&(k=!k,s.negative=!s.negative),M=Math.abs(M-v)>l?r-l:v-(k?l:0)),p(s.options.pointWidth)&&(T-=Math.round(((A=P=Math.ceil(s.options.pointWidth))-u)/2)),i.centerInCategory&&!i.stacking&&(T=t.adjustForMissingColumns(T,A,s,c)),s.barX=T,s.pointWidth=A,s.tooltipPos=e.inverted?[d(n.len+n.pos-e.plotLeft-C,n.pos-e.plotLeft,n.len+n.pos-e.plotLeft),a.len+a.pos-e.plotTop-T-P/2,w]:[a.left-e.plotLeft+T+P/2,d(C+n.pos-e.plotTop,n.pos-e.plotTop,n.len+n.pos-e.plotTop),w],s.shapeType=t.pointClass.prototype.shapeType||"roundedRect",s.shapeArgs=t.crispCol(T,s.isNull?v:M,P,s.isNull?0:w)}),g(this,"afterColumnTranslate")}drawGraph(){this.group[this.dense?"addClass":"removeClass"]("highcharts-dense-data")}pointAttribs(t,e){let i=this.options,s=this.pointAttrToOptions||{},r=s.stroke||"borderColor",o=s["stroke-width"]||"borderWidth",a,n,l,d=t&&t.color||this.color,c=t&&t[r]||i[r]||d,p=t&&t.options.dashStyle||i.dashStyle,u=t&&t[o]||i[o]||this[o]||0,g=y(t&&t.opacity,i.opacity,1);t&&this.zones.length&&(n=t.getZone(),d=t.options.color||n&&(n.color||t.nonZonedColor)||this.color,n&&(c=n.borderColor||c,p=n.dashStyle||p,u=n.borderWidth||u)),e&&t&&(l=(a=x(i.states[e],t.options.states&&t.options.states[e]||{})).brightness,d=a.color||void 0!==l&&h(d).brighten(a.brightness).get()||d,c=a[r]||c,u=a[o]||u,p=a.dashStyle||p,g=y(a.opacity,g));let f={fill:d,stroke:c,"stroke-width":u,opacity:g};return p&&(f.dashstyle=p),f}drawPoints(t=this.points){let e;let i=this,s=this.chart,r=i.options,o=s.renderer,a=r.animationLimit||250;t.forEach(function(t){let n=t.plotY,h=t.graphic,l=!!h,d=h&&s.pointCount<a?"animate":"attr";m(n)&&null!==t.y?(e=t.shapeArgs,h&&t.hasNewShapeType()&&(h=h.destroy()),i.enabledDataSorting&&(t.startXPos=i.xAxis.reversed?-(e&&e.width||0):i.xAxis.width),!h&&(t.graphic=h=o[t.shapeType](e).add(t.group||i.group),h&&i.enabledDataSorting&&s.hasRendered&&s.pointCount<a&&(h.attr({x:t.startXPos}),l=!0,d="animate")),h&&l&&h[d](x(e)),s.styledMode||h[d](i.pointAttribs(t,t.selected&&"select")).shadow(!1!==t.allowShadow&&r.shadow),h&&(h.addClass(t.getClassName(),!0),h.attr({visibility:t.visible?"inherit":"hidden"}))):h&&(t.graphic=h.destroy())})}drawTracker(t=this.points){let e;let i=this,s=i.chart,r=s.pointer,o=function(t){let e=r?.getPointFromEvent(t);r&&e&&i.options.enableMouseTracking&&(r.isDirectTouch=!0,e.onMouseOver(t))};t.forEach(function(t){e=f(t.dataLabels)?t.dataLabels:t.dataLabel?[t.dataLabel]:[],t.graphic&&(t.graphic.element.point=t),e.forEach(function(e){(e.div||e.element).point=t})}),i._hasTracking||(i.trackerGroups.forEach(function(t){i[t]&&(i[t].addClass("highcharts-tracker").on("mouseover",o).on("mouseout",function(t){r?.onTrackerMouseOut(t)}).on("touchstart",o),!s.styledMode&&i.options.cursor&&i[t].css({cursor:i.options.cursor}))}),i._hasTracking=!0),g(this,"afterDrawTracker")}remove(){let t=this,e=t.chart;
23499e.hasRendered&&e.series.forEach(function(e){e.type===t.type&&(e.isDirty=!0)}),r.prototype.remove.apply(t,arguments)}}return v.defaultOptions=x(r.defaultOptions,i),u(v.prototype,{directTouch:!0,getSymbol:l,negStacks:!0,trackerGroups:["group","dataLabelsGroup"]}),o.registerSeriesType("column",v),v}),i(e,"Core/Series/DataLabel.js",[e["Core/Animation/AnimationUtilities.js"],e["Core/Templating.js"],e["Core/Utilities.js"]],function(t,e,i){var s;let{getDeferredAnimation:r}=t,{format:o}=e,{defined:a,extend:n,fireEvent:h,isArray:l,isString:d,merge:c,objectEach:p,pick:u,pInt:g,splat:f}=i;return function(t){function e(){return v(this).some(t=>t?.enabled)}function i(t,e,i,s,r){let{chart:o,enabledDataSorting:h}=this,l=this.isCartesian&&o.inverted,d=t.plotX,p=t.plotY,g=i.rotation||0,f=a(d)&&a(p)&&o.isInsidePlot(d,Math.round(p),{inverted:l,paneCoordinates:!0,series:this}),m=0===g&&"justify"===u(i.overflow,h?"none":"justify"),x=this.visible&&!1!==t.visible&&a(d)&&(t.series.forceDL||h&&!m||f||u(i.inside,!!this.options.stacking)&&s&&o.isInsidePlot(d,l?s.x+1:s.y+s.height-1,{inverted:l,paneCoordinates:!0,series:this})),y=t.pos();if(x&&y){var b;let a=e.getBBox(),d=e.getBBox(void 0,0),p={right:1,center:.5}[i.align||0]||0,v={bottom:1,middle:.5}[i.verticalAlign||0]||0;if(s=n({x:y[0],y:Math.round(y[1]),width:0,height:0},s||{}),"plotEdges"===i.alignTo&&this.isCartesian&&(s[l?"x":"y"]=0,s[l?"width":"height"]=this.yAxis?.len||0),n(i,{width:a.width,height:a.height}),b=s,h&&this.xAxis&&!m&&this.setDataLabelStartPos(t,e,r,f,b),e.align(c(i,{width:d.width,height:d.height}),!1,s,!1),e.alignAttr.x+=p*(d.width-a.width),e.alignAttr.y+=v*(d.height-a.height),e[e.placed?"animate":"attr"]({x:e.alignAttr.x+(a.width-d.width)/2,y:e.alignAttr.y+(a.height-d.height)/2,rotationOriginX:(e.width||0)/2,rotationOriginY:(e.height||0)/2}),m&&s.height>=0)this.justifyDataLabel(e,i,e.alignAttr,a,s,r);else if(u(i.crop,!0)){let{x:t,y:i}=e.alignAttr;x=o.isInsidePlot(t,i,{paneCoordinates:!0,series:this})&&o.isInsidePlot(t+a.width-1,i+a.height-1,{paneCoordinates:!0,series:this})}i.shape&&!g&&e[r?"attr":"animate"]({anchorX:y[0],anchorY:y[1]})}r&&h&&(e.placed=!1),x||h&&!m?(e.show(),e.placed=!0):(e.hide(),e.placed=!1)}function s(){return this.plotGroup("dataLabelsGroup","data-labels",this.hasRendered?"inherit":"hidden",this.options.dataLabels.zIndex||6)}function m(t){let e=this.hasRendered||0,i=this.initDataLabelsGroup().attr({opacity:+e});return!e&&i&&(this.visible&&i.show(),this.options.animation?i.animate({opacity:1},t):i.attr({opacity:1})),i}function x(t){let e;t=t||this.points;let i=this,s=i.chart,n=i.options,l=s.renderer,{backgroundColor:c,plotBackgroun
23499dColor:m}=s.options.chart,x=l.getContrast(d(m)&&m||d(c)&&c||"#000000"),y=v(i),{animation:S,defer:C}=y[0],k=C?r(s,S,i):{defer:0,duration:0};h(this,"drawDataLabels"),i.hasDataLabels?.()&&(e=this.initDataLabels(k),t.forEach(t=>{let r=t.dataLabels||[];f(b(y,t.dlOptions||t.options?.dataLabels)).forEach((h,c)=>{let f=h.enabled&&(t.visible||t.dataLabelOnHidden)&&(!t.isNull||t.dataLabelOnNull)&&function(t,e){let i=e.filter;if(i){let e=i.operator,s=t[i.property],r=i.value;return">"===e&&s>r||"<"===e&&s<r||">="===e&&s>=r||"<="===e&&s<=r||"=="===e&&s==r||"==="===e&&s===r||"!="===e&&s!=r||"!=="===e&&s!==r}return!0}(t,h),{backgroundColor:m,borderColor:y,distance:b,style:v={}}=h,S,C,k,M,w={},A=r[c],T=!A,P;if(f&&(C=u(h[t.formatPrefix+"Format"],h.format),S=t.getLabelConfig(),k=a(C)?o(C,S,s):(h[t.formatPrefix+"Formatter"]||h.formatter).call(S,h),M=h.rotation,!s.styledMode&&(v.color=u(h.color,v.color,d(i.color)?i.color:void 0,"#000000"),"contrast"===v.color?("none"!==m&&(P=m),t.contrastColor=l.getContrast("auto"!==P&&P||t.color||i.color),v.color=P||!a(b)&&h.inside||0>g(b||0)||n.stacking?t.contrastColor:x):delete t.contrastColor,n.cursor&&(v.cursor=n.cursor)),w={r:h.borderRadius||0,rotation:M,padding:h.padding,zIndex:1},s.styledMode||(w.fill="auto"===m?t.color:m,w.stroke="auto"===y?t.color:y,w["stroke-width"]=h.borderWidth),p(w,(t,e)=>{void 0===t&&delete w[e]})),!A||f&&a(k)&&!!A.div==!!h.useHTML&&(A.rotation&&h.rotation||A.rotation===h.rotation)||(A=void 0,T=!0),f&&a(k)&&(A?w.text=k:(A=l.label(k,0,0,h.shape,void 0,void 0,h.useHTML,void 0,"data-label")).addClass(" highcharts-data-label-color-"+t.colorIndex+" "+(h.className||"")+(h.useHTML?" highcharts-tracker":"")),A)){A.options=h,A.attr(w),s.styledMode||A.css(v).shadow(h.shadow);let o=h[t.formatPrefix+"TextPath"]||h.textPath;o&&!h.useHTML&&(A.setTextPath(t.getDataLabelPath?.(A)||t.graphic,o),t.dataLabelPath&&!o.enabled&&(t.dataLabelPath=t.dataLabelPath.destroy())),A.added||A.add(e),i.alignDataLabel(t,A,h,void 0,T),A.isActive=!0,r[c]&&r[c]!==A&&r[c].destroy(),r[c]=A}});let h=r.length;for(;h--;)r[h]&&r[h].isActive?r[h].isActive=!1:(r[h]?.destroy(),r.splice(h,1));t.dataLabel=r[0],t.dataLabels=r})),h(this,"afterDrawDataLabels")}function y(t,e,i,s,r,o){let a=this.chart,n=e.align,h=e.verticalAlign,l=t.box?0:t.padding||0,d=a.inverted?this.yAxis:this.xAxis,c=d?d.left-a.plotLeft:0,p=a.inverted?this.xAxis:this.yAxis,u=p?p.top-a.plotTop:0,{x:g=0,y:f=0}=e,m,x;return(m=(i.x||0)+l+c)<0&&("right"===n&&g>=0?(e.align="left",e.inside=!0):g-=m,x=!0),(m=(i.x||0)+s.width-l+c)>a.plotWidth&&("left"===n&&g<=0?(e.align="right",e.inside=!0):g+=a.plotWidth-m,x=!0),(m=i.y+l+u)<0&&("bottom"===h&&f>=0?(e.verticalAlign="top",e.inside=!0):f-=m,x=!0),(m=(i.y||0)+s.height-l+u)>a.plotHeight&&("top"===h&&f<=0?(e.verticalAlign="bottom",e.inside=!0):f+=a.plotHeight-m,x=!0),x&&(e.x=g,e.y=f,t.placed=!o,t.align(e,void 0,r)),x}function b(t,e){let i=[],s;if(l(t)&&!l(e))i=t.map(function(t){return c(t,e)});else if(l(e)&&!l(t))i=e.map(function(e){return c(t,e)});else if(l(t)||l(e)){if(l(t)&&l(e))for(s=Math.max(t.length,e.length);s--;)i[s]=c(t[s],e[s])}else i=c(t,e);return i}function v(t){let e=t.chart.options.plotOptions;return f(b(b(e?.series?.dataLabels,e?.[t.type]?.dataLabels),t.options.dataLabels))}function S(t,e,i,s,r){let o=this.chart,a=o.inverted,n=this.xAxis,h=n.reversed,l=((a?e.height:e.width)||0)/2,d=t.pointWidth,c=d?d/2:0;e.startXPos=a?r.x:h?-l-c:n.width-l+c,e.startYPos=a?h?this.yAxis.height-l+c:-l-c:r.y,s?"hidden"===e.visibility&&(e.show(),e.attr({opacity:0}).animate({opacity:1})):e.attr({opacity:1}).animate({opacity:0}
23499,void 0,e.hide),o.hasRendered&&(i&&e.attr({x:e.startXPos,y:e.startYPos}),e.placed=!0)}t.compose=function(t){let r=t.prototype;r.initDataLabels||(r.initDataLabels=m,r.initDataLabelsGroup=s,r.alignDataLabel=i,r.drawDataLabels=x,r.justifyDataLabel=y,r.setDataLabelStartPos=S,r.hasDataLabels=e)}}(s||(s={})),s}),i(e,"Series/Column/ColumnDataLabel.js",[e["Core/Series/DataLabel.js"],e["Core/Globals.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e,i,s){var r;let{composed:o}=e,{series:a}=i,{merge:n,pick:h,pushUnique:l}=s;return function(e){function i(t,e,i,s,r){let o=this.chart.inverted,l=t.series,d=(l.xAxis?l.xAxis.len:this.chart.plotSizeX)||0,c=(l.yAxis?l.yAxis.len:this.chart.plotSizeY)||0,p=t.dlBox||t.shapeArgs,u=h(t.below,t.plotY>h(this.translatedThreshold,c)),g=h(i.inside,!!this.options.stacking);if(p){if(s=n(p),!("allow"===i.overflow&&!1===i.crop)){s.y<0&&(s.height+=s.y,s.y=0);let t=s.y+s.height-c;t>0&&t<s.height-1&&(s.height-=t)}o&&(s={x:c-s.y-s.height,y:d-s.x-s.width,width:s.height,height:s.width}),g||(o?(s.x+=u?0:s.width,s.width=0):(s.y+=u?s.height:0,s.height=0))}i.align=h(i.align,!o||g?"center":u?"right":"left"),i.verticalAlign=h(i.verticalAlign,o||g?"middle":u?"top":"bottom"),a.prototype.alignDataLabel.call(this,t,e,i,s,r),i.inside&&t.contrastColor&&e.css({color:t.contrastColor})}e.compose=function(e){t.compose(a),l(o,"ColumnDataLabel")&&(e.prototype.alignDataLabel=i)}}(r||(r={})),r}),i(e,"Series/Bar/BarSeries.js",[e["Series/Column/ColumnSeries.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e,i){let{extend:s,merge:r}=i;class o extends t{}return o.defaultOptions=r(t.defaultOptions,{}),s(o.prototype,{inverted:!0}),e.registerSeriesType("bar",o),o}),i(e,"Series/Scatter/ScatterSeriesDefaults.js",[],function(){return{lineWidth:0,findNearestPointBy:"xy",jitter:{x:0,y:0},marker:{enabled:!0},tooltip:{headerFormat:'<span style="color:{point.color}">â</span> <span style="font-size: 0.8em"> {series.name}</span><br/>',pointFormat:"x: <b>{point.x}</b><br/>y: <b>{point.y}</b><br/>"}}}),i(e,"Series/Scatter/ScatterSeries.js",[e["Series/Scatter/ScatterSeriesDefaults.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e,i){let{column:s,line:r}=e.seriesTypes,{addEvent:o,extend:a,merge:n}=i;class h extends r{applyJitter(){let t=this,e=this.options.jitter,i=this.points.length;e&&this.points.forEach(function(s,r){["x","y"].forEach(function(o,a){if(e[o]&&!s.isNull){let n=`plot${o.toUpperCase()}`,h=t[`${o}Axis`],l=e[o]*h.transA;if(h&&!h.logarithmic){let t=Math.max(0,(s[n]||0)-l),e=Math.min(h.len,(s[n]||0)+l);s[n]=t+(e-t)*function(t){let e=1e4*Math.sin(t);return e-Math.floor(e)}(r+a*i),"x"===o&&(s.clientX=s.plotX)}}})})}drawGraph(){this.options.lineWidth?super.drawGraph():this.graph&&(this.graph=this.graph.destroy())}}return h.defaultOptions=n(r.defaultOptions,t),a(h.prototype,{drawTracker:s.prototype.drawTracker,sorted:!1,requireSorting:!1,noSharedTooltip:!0,trackerGroups:["group","markerGroup","dataLabelsGroup"]}),o(h,"afterTranslate",function(){this.applyJitter()}),e.registerSeriesType("scatter",h),h}),i(e,"Series/CenteredUtilities.js",[e["Core/Globals.js"],e["Core/Series/Series.js"],e["Core/Utilities.js"]],function(t,e,i){var s,r;let{deg2rad:o}=t,{fireEvent:a,isNumber:n,pick:h,relativeLength:l}=i;return(r=s||(s={})).getCenter=function(){let t=this.options,i=this.chart,s=2*(t.slicedOffset||0),r=i.plotWidth-2*s,o=i.plotHeight-2*s,d=t.center,c=Math.min(r,o),p=t.thickness,u,g=t.size,f=t.innerSize||0,m,x;"string"==typeof g&&(g=parseFloat(g)),"string"==typeof f&&(f=parseFloat(f));let y=[h(d[0],"50%"),h(d[1],"50%"),h(g&&g<0?void 0:t.size,"100%"),h(f&&f<0?void 0:t.innerSize||0,"0%")];for(!i.angular||this instanceof e||(y[3]=0),m=0;m<4;++m)x=y[m],u=m<2||2===m&&/%$/.test(x),y[m]=l(x,[r,o,c,y[2]][m])+(u?s:0);return y[3]>y[2]&&(y[3]=y[2]),n(p)&&2*p<y[2]&&p>0&&(y[3]=y[2]-2*p),a(this,"afterGetCenter",{positions:y}),y},r.getStartAndEndRadians=function(t,e){let i=n(t)?t:0,s=n(e)&&e>i&&e-i<360?e:i+360;return{start:o*(i+-90),end:o*(s+-90)}},s}
23499),i(e,"Series/Pie/PiePoint.js",[e["Core/Animation/AnimationUtilities.js"],e["Core/Series/Point.js"],e["Core/Utilities.js"]],function(t,e,i){let{setAnimation:s}=t,{addEvent:r,defined:o,extend:a,isNumber:n,pick:h,relativeLength:l}=i;class d extends e{getConnectorPath(t){let e=t.dataLabelPosition,i=t.options||{},s=i.connectorShape,r=this.connectorShapes[s]||s;return e&&r.call(this,{...e.computed,alignment:e.alignment},e.connectorPosition,i)||[]}getTranslate(){return this.sliced&&this.slicedTranslation||{translateX:0,translateY:0}}haloPath(t){let e=this.shapeArgs;return this.sliced||!this.visible?[]:this.series.chart.renderer.symbols.arc(e.x,e.y,e.r+t,e.r+t,{innerR:e.r-1,start:e.start,end:e.end,borderRadius:e.borderRadius})}constructor(t,e,i){super(t,e,i),this.half=0,this.name??(this.name="Slice");let s=t=>{this.slice("select"===t.type)};r(this,"select",s),r(this,"unselect",s)}isValid(){return n(this.y)&&this.y>=0}setVisible(t,e=!0){t!==this.visible&&this.update({visible:t??!this.visible},e,void 0,!1)}slice(t,e,i){let r=this.series;s(i,r.chart),e=h(e,!0),this.sliced=this.options.sliced=t=o(t)?t:!this.sliced,r.options.data[r.data.indexOf(this)]=this.options,this.graphic&&this.graphic.animate(this.getTranslate())}}return a(d.prototype,{connectorShapes:{fixedOffset:function(t,e,i){let s=e.breakAt,r=e.touchingSliceAt,o=i.softConnector?["C",t.x+("left"===t.alignment?-5:5),t.y,2*s.x-r.x,2*s.y-r.y,s.x,s.y]:["L",s.x,s.y];return[["M",t.x,t.y],o,["L",r.x,r.y]]},straight:function(t,e){let i=e.touchingSliceAt;return[["M",t.x,t.y],["L",i.x,i.y]]},crookedLine:function(t,e,i){let{breakAt:s,touchingSliceAt:r}=e,{series:o}=this,[a,n,h]=o.center,d=h/2,{plotLeft:c,plotWidth:p}=o.chart,u="left"===t.alignment,{x:g,y:f}=t,m=s.x;if(i.crookDistance){let t=l(i.crookDistance,1);m=u?a+d+(p+c-a-d)*(1-t):c+(a-d)*t}else m=a+(n-f)*Math.tan((this.angle||0)-Math.PI/2);let x=[["M",g,f]];return(u?m<=g&&m>=s.x:m>=g&&m<=s.x)&&x.push(["L",m,f]),x.push(["L",s.x,s.y],["L",r.x,r.y]),x}}}),d}),i(e,"Series/Pie/PieSeriesDefaults.js",[],function(){return{borderRadius:3,center:[null,null],clip:!1,colorByPoint:!0,dataLabels:{connectorPadding:5,connectorShape:"crookedLine",crookDistance:void 0,distance:30,enabled:!0,formatter:function(){return this.point.isNull?void 0:this.point.name},softConnector:!0,x:0},fillColor:void 0,ignoreHiddenPoint:!0,inactiveOtherPoints:!0,legendType:"point",marker:null,size:null,showInLegend:!1,slicedOffset:10,stickyTracking:!1,tooltip:{followPointer:!0},borderColor:"#ffffff",borderWidth:1,lineWidth:void 0,states:{hover:{brightness:.1}}}}),i(e,"Series/Pie/PieSeries.js",[e["Series/CenteredUtilities.js"],e["Series/Column/ColumnSeries.js"],e["Core/Globals.js"],e["Series/Pie/PiePoint.js"],e["Series/Pie/PieSeriesDefaults.js"],e["Core/Series/Series.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Renderer/SVG/Symbols.js"],e["Core/Utilities.js"]],function(t,e,i,s,r,o,a,n,h){let{getStartAndEndRadians:l}=t,{noop:d}=i,{clamp:c,extend:p,fireEvent:u,merge:g,pick:f}=h;class m extends o{animate(t){let e=this,i=e.points,s=e.startAngleRad;t||i.forEach(function(t){let i=t.graphic,r=t.shapeArgs;i&&r&&(i.attr({r:f(t.startR,e.center&&e.center[3]/2),start:s,end:s}),i.animate({r:r.r,start:r.start,end:r.end},e.options.animation))})}drawEmpty(){let t,e;let i=this.startAngleRad,s=this.endAngleRad,r=this.options;0===this.total&&this.center?(t=this.center[0],e=this.center[1],this.graph||(this.graph=this.chart.renderer.arc(t,e,this.center[1]/2,0,i,s).addClass("highcharts-empty-series").add(this.group)),this.graph.attr({d:n.arc(t,e,this.center[2]/2,0,{start:i,end:s,innerR:this.center[3]/2})}),this.chart.styledMode||this.graph.attr({"stroke-width":r.borderWidth,fill:r.fillColor||"none",stroke:r.color||"#cccccc"})):this.graph&&(this.graph=this.graph.destroy())}drawPoints(){let t=this.chart.renderer;this.points.forEach(function(e){e.graphic&&e.hasNewShapeType()&&(e.graphic=e.graphic.destroy()),e.graphic||(e.graphic=t[e.shapeType](e.shapeArgs).add(e.series.group),e.delayedRendering=!0)})}generatePoints(){super.generatePoints(),this.updateTotals()}getX(t,e,i,s){let r=this.center,o=this.radii?this.radii[i.index]||0:r[2]/2,a=s.dataLabelPosition,n=a?.distance||0,h=Math.asin(c((t-r[1])/(o+n),-1,1));return r[0]+Math.cos(h)*(o+n)*(e?-1:1)+(n>0?(e?-1:1)*(s.padding||0):0)}hasData(){return!!this.processedXData.length}redrawPoints(){let t,e,i,s;let r=this,o=r.chart;this.drawEmpty(),r.group&&!o.styledMode&&r.group.shadow(r.options.shadow),r.points.forEac
vendor: 3,064 bytes, line 23499
23499h(function(a){let n={};e=a.graphic,!a.isNull&&e?(s=a.shapeArgs,t=a.getTranslate(),o.styledMode||(i=r.pointAttribs(a,a.selected&&"select")),a.delayedRendering?(e.setRadialReference(r.center).attr(s).attr(t),o.styledMode||e.attr(i).attr({"stroke-linejoin":"round"}),a.delayedRendering=!1):(e.setRadialReference(r.center),o.styledMode||g(!0,n,i),g(!0,n,s,t),e.animate(n)),e.attr({visibility:a.visible?"inherit":"hidden"}),e.addClass(a.getClassName(),!0)):e&&(a.graphic=e.destroy())})}sortByAngle(t,e){t.sort(function(t,i){return void 0!==t.angle&&(i.angle-t.angle)*e})}translate(t){u(this,"translate"),this.generatePoints();let e=this.options,i=e.slicedOffset,s=l(e.startAngle,e.endAngle),r=this.startAngleRad=s.start,o=(this.endAngleRad=s.end)-r,a=this.points,n=e.ignoreHiddenPoint,h=a.length,d,c,p,g,f,m,x,y=0;for(t||(this.center=t=this.getCenter()),m=0;m<h;m++){x=a[m],d=r+y*o,x.isValid()&&(!n||x.visible)&&(y+=x.percentage/100),c=r+y*o;let e={x:t[0],y:t[1],r:t[2]/2,innerR:t[3]/2,start:Math.round(1e3*d)/1e3,end:Math.round(1e3*c)/1e3};x.shapeType="arc",x.shapeArgs=e,(p=(c+d)/2)>1.5*Math.PI?p-=2*Math.PI:p<-Math.PI/2&&(p+=2*Math.PI),x.slicedTranslation={translateX:Math.round(Math.cos(p)*i),translateY:Math.round(Math.sin(p)*i)},g=Math.cos(p)*t[2]/2,f=Math.sin(p)*t[2]/2,x.tooltipPos=[t[0]+.7*g,t[1]+.7*f],x.half=p<-Math.PI/2||p>Math.PI/2?1:0,x.angle=p}u(this,"afterTranslate")}updateTotals(){let t=this.points,e=t.length,i=this.options.ignoreHiddenPoint,s,r,o=0;for(s=0;s<e;s++)(r=t[s]).isValid()&&(!i||r.visible)&&(o+=r.y);for(s=0,this.total=o;s<e;s++)(r=t[s]).percentage=o>0&&(r.visible||!i)?r.y/o*100:0,r.total=o}}return m.defaultOptions=g(o.defaultOptions,r),p(m.prototype,{axisTypes:[],directTouch:!0,drawGraph:void 0,drawTracker:e.prototype.drawTracker,getCenter:t.getCenter,getSymbol:d,invertible:!1,isCartesian:!1,noSharedTooltip:!0,pointAttribs:e.prototype.pointAttribs,pointClass:s,requireSorting:!1,searchPoint:d,trackerGroups:["group","dataLabelsGroup"]}),a.registerSeriesType("pie",m),m}),i(e,"Series/Pie/PieDataLabel.js",[e["Core/Series/DataLabel.js"],e["Core/Globals.js"],e["Core/Renderer/RendererUtilities.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e,i,s,r){var o;let{composed:a,noop:n}=e,{distribute:h}=i,{series:l}=s,{arrayMax:d,clamp:c,defined:p,pick:u,pushUnique:g,relativeLength:f}=r;return function(e){let i={radialDistributionY:function(t,e){return(e.dataLabelPosition?.top||0)+t.distributeBox.pos},radialDistributionX:function(t,e,i,s,r){let o=r.dataLabelPosition;return t.getX(i<(o?.top||0)+2||i>(o?.bottom||0)-2?s:i,e.half,e,r)},justify:function(t,e,i,s){return s[0]+(t.half?-1:1)*(i+(e.dataLabelPosition?.distance||0))},alignToPlotEdges:function(t,e,i,s){let r=t.getBBox().width;return e?r+s:i-r-s},alignToConnectors:function(t,e,i,s){let r=0,o;return t.forEach(function(t){(o=t.dataLabel.getBBox().width)>r&&(r=o)}),e?r+s:i-r-s}};function s(t,e){let{center:i,options:s}=this,r=i[2]/2,o=t.angle||0,a=Math.cos(o),n=Math.sin(o),h=i[0]+a*r,l=i[1]+n*r,d=Math.min((s.slicedOffset||0)+(s.borderWidth||0),e/5);
vendor: 4,810 bytes, line 23499
23499return{natural:{x:h+a*e,y:l+n*e},computed:{},alignment:e<0?"center":t.half?"right":"left",connectorPosition:{breakAt:{x:h+a*d,y:l+n*d},touchingSliceAt:{x:h,y:l}},distance:e}}function r(){let t=this,e=t.points,i=t.chart,s=i.plotWidth,r=i.plotHeight,o=i.plotLeft,a=Math.round(i.chartWidth/3),n=t.center,c=n[2]/2,g=n[1],m=[[],[]],x=[0,0,0,0],y=t.dataLabelPositioners,b,v,S,C=0;t.visible&&t.hasDataLabels?.()&&(e.forEach(t=>{(t.dataLabels||[]).forEach(t=>{t.shortened&&(t.attr({width:"auto"}).css({width:"auto",textOverflow:"clip"}),t.shortened=!1)})}),l.prototype.drawDataLabels.apply(t),e.forEach(t=>{(t.dataLabels||[]).forEach((e,i)=>{let s=n[2]/2,r=e.options,o=f(r?.distance||0,s);0===i&&m[t.half].push(t),!p(r?.style?.width)&&e.getBBox().width>a&&(e.css({width:Math.round(.7*a)+"px"}),e.shortened=!0),e.dataLabelPosition=this.getDataLabelPosition(t,o),C=Math.max(C,o)})}),m.forEach((e,a)=>{let l=e.length,d=[],f,m,b=0,k;l&&(t.sortByAngle(e,a-.5),C>0&&(f=Math.max(0,g-c-C),m=Math.min(g+c+C,i.plotHeight),e.forEach(t=>{(t.dataLabels||[]).forEach(e=>{let s=e.dataLabelPosition;s&&s.distance>0&&(s.top=Math.max(0,g-c-s.distance),s.bottom=Math.min(g+c+s.distance,i.plotHeight),b=e.getBBox().height||21,t.distributeBox={target:(e.dataLabelPosition?.natural.y||0)-s.top+b/2,size:b,rank:t.y},d.push(t.distributeBox))})}),h(d,k=m+b-f,k/5)),e.forEach(i=>{(i.dataLabels||[]).forEach(h=>{let l=h.options||{},g=i.distributeBox,f=h.dataLabelPosition,m=f?.natural.y||0,b=l.connectorPadding||0,C=0,k=m,M="inherit";if(f){if(d&&p(g)&&f.distance>0&&(void 0===g.pos?M="hidden":(S=g.size,k=y.radialDistributionY(i,h))),l.justify)C=y.justify(i,h,c,n);else switch(l.alignTo){case"connectors":C=y.alignToConnectors(e,a,s,o);break;case"plotEdges":C=y.alignToPlotEdges(h,a,s,o);break;default:C=y.radialDistributionX(t,i,k,m,h)}if(f.attribs={visibility:M,align:f.alignment},f.posAttribs={x:C+(l.x||0)+(({left:b,right:-b})[f.alignment]||0),y:k+(l.y||0)-h.getBBox().height/2},f.computed.x=C,f.computed.y=k,u(l.crop,!0)){let t;C-(v=h.getBBox().width)<b&&1===a?(t=Math.round(v-C+b),x[3]=Math.max(t,x[3])):C+v>s-b&&0===a&&(t=Math.round(C+v-s+b),x[1]=Math.max(t,x[1])),k-S/2<0?x[0]=Math.max(Math.round(-k+S/2),x[0]):k+S/2>r&&(x[2]=Math.max(Math.round(k+S/2-r),x[2])),f.sideOverflow=t}}})}))}),(0===d(x)||this.verifyDataLabelOverflow(x))&&(this.placeDataLabels(),this.points.forEach(e=>{(e.dataLabels||[]).forEach(s=>{let{connectorColor:r,connectorWidth:o=1}=s.options||{},a=s.dataLabelPosition;if(o){let n;b=s.connector,a&&a.distance>0?(n=!b,b||(s.connector=b=i.renderer.path().addClass("highcharts-data-label-connector highcharts-color-"+e.colorIndex+(e.className?" "+e.className:"")).add(t.dataLabelsGroup)),i.styledMode||b.attr({"stroke-width":o,stroke:r||e.color||"#666666"}),b[n?"attr":"animate"]({d:e.getConnectorPath(s)}),b.attr({visibility:a.attribs?.visibility})):b&&(s.connector=b.destroy())}})})))}function o(){this.points.forEach(t=>{(t.dataLabels||[]).forEach(t=>{let e=t.dataLabelPosition;e?(e.sideOverflow&&(t.css({width:Math.max(t.getBBox().width-e.sideOverflow,0)+"px",textOverflow:(t.options?.style||{}).textOverflow||"ellipsis"}),t.shortened=!0),t.attr(e.attribs),t[t.moved?"animate":"attr"](e.posAttribs),t.moved=!0):t&&t.attr({y:-9999})}),delete t.distributeBox},this)}function m(t){let e=this.center,i=this.options,s=i.center,r=i.minSize||80,o=r,a=null!==i.size;return!a&&(null!==s[0]?o=Math.max(e[2]-Math.max(t[1],t[3]),r):(o=Math.max(e[2]-t[1]-t[3],r),e[0]+=(t[3]-t[1])/2),null!==s[1]?o=c(o,r,e[2]-Math.max(t[0],t[2])):(o=c(o,r,e[2]-t[0]-t[2]),e[1]+=(t[0]-t[2])/2),o<e[2]?(e[2]=o,e[3]=Math.min(i.thickness?Math.max(0,o-2*i.thickness):Math.max(0,f(i.innerSize||0,o)),o),this.translate(e),this.drawDataLabels&&this.drawDataLabels()):a=!0),a}e.compose=function(e){if(t.compose(l),g(a,"PieDataLabel")){let t=e.prototype;t.dataLabelPositioners=i,t.alignDataLabel=n,t.drawDataLabels=r,t.getDataLabelPosition=s,t.placeDataLabels=o,t.verifyDataLabelOverflow=m}}}(o||(o={})),o}),i(e,"Extensions/OverlappingDataLabels.js",[e["Core/Utilities.js"]],function(t){let{addEvent:e,fireEvent:i,objectEach:s,pick:r}=t;function o(t){let e=t.length,s=(t,e)=>!(e.x>=t.x+t.width||e.x+e.width<=t.x||e.y>=t.y+t.height||e.y+e.height<=t.y),r,o,n,h,l,d=!1;for(let i=0;i<e;i++)(r=t[i])&&(r.oldOpacity=r.opacity,r.newOpacity=1,r.absoluteBox=function(t){if(t&&(!t.alignAttr||t.placed)){let e=t.box?0:t.padding||0,i=t.alignAttr||{x:t.attr("x"),y:t.attr("y")},s=t.getBBox();return t.width=s.width,t.height=s.height,{x:i.x+(t.parentGroup?.translateX||0)+e,y:i.y+(t.parentGroup?.translateY||0)+e,width:(t.width||0)-2*e,height:(t.height||0)-2*e}}}(r));t.sort((t,e)=>(e.labelrank||0)-(t.labelrank||0));for(let i=0;i<e;++i){h=(o=t[i])&&o.absoluteBox;for(let r=i+1;r<e;++r)l=(n=t[r])&&n.absoluteBox,h&&l&&o!==n&&0!==o.newOpacity&&0!==n.newOpacity&&"hidden"
23499!==o.visibility&&"hidden"!==n.visibility&&s(h,l)&&((o.labelrank<n.labelrank?o:n).newOpacity=0)}for(let e of t)a(e,this)&&(d=!0);d&&i(this,"afterHideAllOverlappingLabels")}function a(t,e){let s,r,o=!1;return t&&(r=t.newOpacity,t.oldOpacity!==r&&(t.hasClass("highcharts-data-label")?(t[r?"removeClass":"addClass"]("highcharts-data-label-hidden"),s=function(){e.styledMode||t.css({pointerEvents:r?"auto":"none"})},o=!0,t[t.isOld?"animate":"attr"]({opacity:r},void 0,s),i(e,"afterHideOverlappingLabel")):t.attr({opacity:r})),t.isOld=!0),o}function n(){let t=this,e=[];for(let i of t.labelCollectors||[])e=e.concat(i());for(let i of t.yAxis||[])i.stacking&&i.options.stackLabels&&!i.options.stackLabels.allowOverlap&&s(i.stacking.stacks,t=>{s(t,t=>{t.label&&e.push(t.label)})});for(let i of t.series||[])if(i.visible&&i.hasDataLabels?.()){let s=i=>{for(let s of i)s.visible&&(s.dataLabels||[]).forEach(i=>{let o=i.options||{};i.labelrank=r(o.labelrank,s.labelrank,s.shapeArgs?.height),o.allowOverlap??Number(o.distance)>0?(i.oldOpacity=i.opacity,i.newOpacity=1,a(i,t)):e.push(i)})};s(i.nodes||[]),s(i.points)}this.hideOverlappingLabels(e)}return{compose:function(t){let i=t.prototype;i.hideOverlappingLabels||(i.hideOverlappingLabels=o,e(t,"render",n))}}}
vendor: 3,847 bytes, line 23499
23499),i(e,"Extensions/BorderRadius.js",[e["Core/Defaults.js"],e["Core/Globals.js"],e["Core/Utilities.js"]],function(t,e,i){let{defaultOptions:s}=t,{noop:r}=e,{addEvent:o,extend:a,isObject:n,merge:h,relativeLength:l}=i,d={radius:0,scope:"stack",where:void 0},c=r,p=r;function u(t,e,i,s,r={}){let o=c(t,e,i,s,r),{innerR:a=0,r:n=i,start:h=0,end:d=0}=r;if(r.open||!r.borderRadius)return o;let p=d-h,u=Math.sin(p/2),g=Math.max(Math.min(l(r.borderRadius||0,n-a),(n-a)/2,n*u/(1+u)),0),f=Math.min(g,p/Math.PI*2*a),m=o.length-1;for(;m--;)!function(t,e,i){let s,r,o;let a=t[e],n=t[e+1];if("Z"===n[0]&&(n=t[0]),("M"===a[0]||"L"===a[0])&&"A"===n[0]?(s=a,r=n,o=!0):"A"===a[0]&&("M"===n[0]||"L"===n[0])&&(s=n,r=a),s&&r&&r.params){let a=r[1],n=r[5],h=r.params,{start:l,end:d,cx:c,cy:p}=h,u=n?a-i:a+i,g=u?Math.asin(i/u):0,f=n?g:-g,m=Math.cos(g)*u;o?(h.start=l+f,s[1]=c+m*Math.cos(l),s[2]=p+m*Math.sin(l),t.splice(e+1,0,["A",i,i,0,0,1,c+a*Math.cos(h.start),p+a*Math.sin(h.start)])):(h.end=d-f,r[6]=c+a*Math.cos(h.end),r[7]=p+a*Math.sin(h.end),t.splice(e+1,0,["A",i,i,0,0,1,c+m*Math.cos(d),p+m*Math.sin(d)])),r[4]=Math.abs(h.end-h.start)<Math.PI?0:1}}(o,m,m>1?f:g);return o}function g(){if(this.options.borderRadius&&!(this.chart.is3d&&this.chart.is3d())){let{options:t,yAxis:e}=this,i="percent"===t.stacking,r=s.plotOptions?.[this.type]?.borderRadius,o=f(t.borderRadius,n(r)?r:{}),h=e.options.reversed;for(let s of this.points){let{shapeArgs:r}=s;if("roundedRect"===s.shapeType&&r){let{width:n=0,height:d=0,y:c=0}=r,p=c,u=d;if("stack"===o.scope&&s.stackTotal){let r=e.translate(i?100:s.stackTotal,!1,!0,!1,!0),o=e.translate(t.threshold||0,!1,!0,!1,!0),a=this.crispCol(0,Math.min(r,o),0,Math.abs(r-o));p=a.y,u=a.height}let g=(s.negative?-1:1)*(h?-1:1)==-1,f=o.where;!f&&this.is("waterfall")&&Math.abs((s.yBottom||0)-(this.translatedThreshold||0))>this.borderWidth&&(f="all"),f||(f="end");let m=Math.min(l(o.radius,n),n/2,"all"===f?d/2:1/0)||0;"end"===f&&(g&&(p-=m),u+=m),a(r,{brBoxHeight:u,brBoxY:p,r:m})}}}}function f(t,e){return n(t)||(t={radius:t||0}),h(d,e,t)}function m(){let t=f(this.options.borderRadius);for(let e of this.points){let i=e.shapeArgs;i&&(i.borderRadius=l(t.radius,(i.r||0)-(i.innerR||0)))}}function x(t,e,i,s,r={}){let o=p(t,e,i,s,r),{r:a=0,brBoxHeight:n=s,brBoxY:h=e}=r,l=e-h,d=h+n-(e+s),c=l-a>-.1?0:a,u=d-a>-.1?0:a,g=Math.max(c&&l,0),f=Math.max(u&&d,0),m=[t+c,e],x=[t+i-c,e],y=[t+i,e+c],b=[t+i,e+s-u],v=[t+i-u,e+s],S=[t+u,e+s],C=[t,e+s-u],k=[t,e+c],M=(t,e)=>Math.sqrt(Math.pow(t,2)-Math.pow(e,2));if(g){let t=M(c,c-g);m[0]-=t,x[0]+=t,y[1]=k[1]=e+c-g}if(s<c-g){let r=M(c,c-g-s);y[0]=b[0]=t+i-c+r,v[0]=Math.min(y[0],v[0]),S[0]=Math.max(b[0],S[0]),C[0]=k[0]=t+c-r,y[1]=k[1]=e+s}if(f){let t=M(u,u-f);v[0]+=t,S[0]-=t,b[1]=C[1]=e+s-u+f}if(s<u-f){let r=M(u,u-f-s);y[0]=b[0]=t+i-u+r,x[0]=Math.min(y[0],x[0]),m[0]=Math.max(b[0],m[0]),C[0]=k[0]=t+u-r,b[1]=C[1]=e}return o.length=0,o.push(["M",...m],["L",...x],["A",c,c,0,0,1,...y],["L",...b],["A",u,u,0,0,1,...v],["L",...S],["A",u,u,0,0,1,...C],["L",...k],["A",c,c,0,0,1,...m],["Z"]),o}return{compose:function(t,e,i){let s=t.types.pie;if(!e.symbolCustomAttribs.includes("borderRadius")){let r=i.prototype.symbols;o(t,"afterColumnTranslate",g,{order:9}),o(s,"afterTranslate",m),e.symbolCustomAttribs.push("borderRadius","brBoxHeight","brBoxY"),c=r.arc,p=r.roundedRect,r.arc=u,r.roundedRect=x}},optionsToObject:f}}),i(e,"Core/Responsive.js",[e["Core/Utilities.js"]],function(t){var e;let{diffObjects:i,extend:s,find:r,merge:o,pick:a,uniqueKey:n}=t;return function(t){function e(t,e){let i=t.condition;(i.callback||function(){return this.chartWidth<=a(i.maxWidth,Number.MAX_VALUE)&&this.chartHeight<=a(i.maxHeight,Number.MAX_VALUE)&&this.chartWidth>=a(i.minWidth,0)&&this.chartHeight>=a(i.minHeight,0)}).call(this)&&e.push(t._id)}function h(t,e){let s=this.options.responsive,a=this.currentResponsive,h=[],l;
23499!e&&s&&s.rules&&s.rules.forEach(t=>{void 0===t._id&&(t._id=n()),this.matchResponsiveRule(t,h)},this);let d=o(...h.map(t=>r((s||{}).rules||[],e=>e._id===t)).map(t=>t&&t.chartOptions));d.isResponsiveOptions=!0,h=h.toString()||void 0;let c=a&&a.ruleIds;h!==c&&(a&&this.update(a.undoOptions,t,!0),h?((l=i(d,this.options,!0,this.collectionsWithUpdate)).isResponsiveOptions=!0,this.currentResponsive={ruleIds:h,mergedOptions:d,undoOptions:l},this.update(d,t,!0)):this.currentResponsive=void 0)}t.compose=function(t){let i=t.prototype;return i.matchResponsiveRule||s(i,{matchResponsiveRule:e,setResponsive:h}),t}}(e||(e={})),e}),i(e,"masters/highcharts.src.js",[e["Core/Globals.js"],e["Core/Utilities.js"],e["Core/Defaults.js"],e["Core/Animation/Fx.js"],e["Core/Animation/AnimationUtilities.js"],e["Core/Renderer/HTML/AST.js"],e["Core/Templating.js"],e["Core/Renderer/RendererRegistry.js"],e["Core/Renderer/RendererUtilities.js"],e["Core/Renderer/SVG/SVGElement.js"],e["Core/Renderer/SVG/SVGRenderer.js"],e["Core/Renderer/HTML/HTMLElement.js"],e["Core/Axis/Axis.js"],e["Core/Axis/DateTimeAxis.js"],e["Core/Axis/LogarithmicAxis.js"],e["Core/Axis/PlotLineOrBand/PlotLineOrBand.js"],e["Core/Axis/Tick.js"],e["Core/Tooltip.js"],e["Core/Series/Point.js"],e["Core/Pointer.js"],e["Core/Legend/Legend.js"],e["Core/Legend/LegendSymbol.js"],e["Core/Chart/Chart.js"],e["Extensions/ScrollablePlotArea.js"],e["Core/Axis/Stacking/StackingAxis.js"],e["Core/Axis/Stacking/StackItem.js"],e["Core/Series/Series.js"],e["Core/Series/SeriesRegistry.js"],e["Series/Column/ColumnDataLabel.js"],e["Series/Pie/PieDataLabel.js"],e["Core/Series/DataLabel.js"],e["Extensions/OverlappingDataLabels.js"],e["Extensions/
23499BorderRadius.js"],e["Core/Responsive.js"],e["Core/Color/Color.js"],e["Core/Time.js"]],function(t,e,i,s,r,o,a,n,h,l,d,c,p,u,g,f,m,x,y,b,v,S,C,k,M,w,A,T,P,L,O,D,E,I,j,B){return t.AST=o,t.Axis=p,t.Chart=C,t.Color=j,t.DataLabel=O,t.Fx=s,t.HTMLElement=c,t.Legend=v,t.LegendSymbol=S,t.OverlappingDataLabels=t.OverlappingDataLabels||D,t.PlotLineOrBand=f,t.Point=y,t.Pointer=b,t.RendererRegistry=n,t.Series=A,t.SeriesRegistry=T,t.StackItem=w,t.SVGElement=l,t.SVGRenderer=d,t.Templating=a,t.Tick=m,t.Time=B,t.Tooltip=x,t.animate=r.animate,t.animObject=r.animObject,t.chart=C.chart,t.color=j.parse,t.dateFormat=a.dateFormat,t.defaultOptions=i.defaultOptions,t.distribute=h.distribute,t.format=a.format,t.getDeferredAnimation=r.getDeferredAnimation,t.getOptions=i.getOptions,t.numberFormat=a.numberFormat,t.seriesType=T.seriesType,t.setAnimation=r.setAnimation,t.setOptions=i.setOptions,t.stop=r.stop,t.time=i.defaultTime,t.timers=s.timers,E.compose(t.Series,t.SVGElement,t.SVGRenderer),P.compose(t.Series.types.column),O.compose(t.Series),u.compose(t.Axis),c.compose(t.SVGRenderer),v.compose(t.Chart),g.compose(t.Axis),D.compose(t.Chart),L.compose(t.Series.types.pie),f.compose(t.Axis),b.compose(t.Chart),I.compose(t.Chart),k.compose(t.Axis,t.Chart,t.Series),M.compose(t.Axis,t.Chart,t.Series),x.compose(t.Pointer),e.extend(t,e),t}),e["masters/highcharts.src.js"]._modules=e,e["masters/highcharts.src.js"]}); 23500},{}],111:[function(require,module,exports){ 23501!/** 23502 * Highcharts JS v11.4.3 (2024-05-22) 23503 * 23504 * Accessibility module 23505 * 23506 * (c) 2010-2024 Highsoft AS 23507 * Author: Oystein Moseng 23508 * 23509 * License: www.highcharts.com/license 23510 */function(e){"object"==typeof module&&module.exports?(e.default=e,module.exports=e):"function"==typeof define&&define.amd?define("highcharts/modules/accessibility",["highcharts"],function(t){return e(t),e.Highcharts=t,e}):e("undefined"!=typeof Highcharts?Highcharts:void 0)}(function(e){"use strict";var t=e?e._modules:{};function i(e,t,i,s){e.hasOwnProperty(t)||(e[t]=s.apply(null,i),"function"==typeof CustomEvent&&window.dispatchEvent(new CustomEvent("HighchartsModuleLoaded",{detail:{path:t,module:e[t]}})))}i(t,"Accessibility/Utils/HTMLUtilities.js",[t["Core/Globals.js"],t["Core/Utilities.js"]],function(e,t){let{doc:i,win:s}=e,{css:n}=t,o=s.EventTarget&&new s.EventTarget||"none";function r(e){if("function"==typeof s.MouseEvent)return new s.MouseEvent(e.type,e);if(i.createEvent){let t=i.createEvent("MouseEvent");if(t.initMouseEvent)return t.initMouseEvent(e.type,e.bubbles,e.cancelable,e.view||s,e.detail,e.screenX,e.screenY,e.clientX,e.clientY,e.ctrlKey,e.altKey,e.shiftKey,e.metaKey,e.button,e.relatedTarget),t}return a(e.type)}function a(e,t,n){let r=t||{x:0,y:0};if("function"==typeof s.MouseEvent)return new s.MouseEvent(e,{bubbles:!0,cancelable:!0,composed:!0,button:0,buttons:1,relatedTarget:n||o,view:s,detail:"click"===e?1:0,screenX:r.x,screenY:r.y,clientX:r.x,clientY:r.y});if(i.createEvent){let t=i.createEvent("MouseEvent");if(t.initMouseEvent)return t.initMouseEvent(e,!0,!0,s,"click"===e?1:0,r.x,r.y,r.x,r.y,!1,!1,!1,!1,0,null),t}return{type:e}}return{addClass:function(e,t){e.classList?e.classList.add(t):0>e.className.indexOf(t)&&(e.className+=" "+t)},cloneMouseEvent:r,cloneTouchEvent:function(e){let t=e=>{let t=[];for(let i=0;i<e.length;++i){let s=e.item(i);s&&t.push(s)}return t};if("function"==typeof s.TouchEvent){let i=new s.TouchEvent(e.type,{touches:t(e.touches),targetTouches:t(e.targetTouches),changedTouches:t(e.changedTouches),ctrlKey:e.ctrlKey,shiftKey:e.shiftKey,altKey:e.altKey,metaKey:e.metaKey,bubbles:e.bubbles,cancelable:e.cancelable,composed:e.composed,detail:e.detail,view:e.view});return e.defaultPrevented&&i.preventDefault(),i}let i=r(e);return i.touches=e.touches,i.changedTouches=e.changedTouches,i.targetTouches=e.targetTouches,i},escapeStringForHTML:function(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'").replace(/\//g,"/")},getElement:function(e){return i.getElementById(e)},getFakeMouseEvent:a,getHeadingTagNameForElement:function(e){let t=e=>"h"+Math.min(6,parseInt(e.slice(1),10)+1),i=e=>/H[1-6]/.test(e),s=e=>{let t=e;for(;t=t.previousSibling;){let e=t.tagName||"";if(i(e))return e}return""},n=e=>{let o=s(e);if(o)return t(o);let r=e.parentElement;if(!r)return"p";let a=r.tagName;return i(a)?t(a):n(r)};return n(e)},removeChildNodes:function(e){for(;e.lastChild;)e.removeChild(e.lastChild)},removeClass:function(e,t){e.classList?e.classList.remove(t):e.className=e.className.replace(RegExp(t,"g"),"")},removeElement:function(e){e&&e.parentNode&&e.parentNode.removeChild(e)},reverseChildNodes:function(e){let t=e.childNodes.length;for(;t--;)e.appendChild(e.childNodes[t])},simulatedEventTarget:o,stripHTMLTagsFromString:function(e,t=!1){return"string"==typeof e?t?e.replace(/<\/?[^>]+(>|$)/g,""):e.replace(/<\/?(?!\s)[^>]+(>|$)/g,""):e},visuallyHideElement:function(e){n(e,{position:"absolute",width:"1px",height:"1px",overflow:"hidden",
23510whiteSpace:"nowrap",clip:"rect(1px, 1px, 1px, 1px)",marginTop:"-3px","-ms-filter":"progid:DXImageTransform.Microsoft.Alpha(Opacity=1)",filter:"alpha(opacity=1)",opacity:.01})}}}),i(t,"Accessibility/A11yI18n.js",[t["Core/Templating.js"],t["Core/Utilities.js"]],function(e,t){var i;let{format:s}=e,{getNestedProperty:n,pick:o}=t;return function(e){function t(e,t,i){let r=(e,t)=>{let i=e.slice(t||0),s=i.indexOf("{"),n=i.indexOf("}");if(s>-1&&n>s)return{statement:i.substring(s+1,n),begin:t+s+1,end:t+n}},a=[],l,h,c=0;do l=r(e,c),(h=e.substring(c,l&&l.begin-1)).length&&a.push({value:h,type:"constant"}),l&&a.push({value:l.statement,type:"statement"}),c=l?l.end+1:c+1;while(l);return a.forEach(e=>{"statement"===e.type&&(e.value=function(e,t){let i,s;let r=e.indexOf("#each("),a=e.indexOf("#plural("),l=e.indexOf("["),h=e.indexOf("]");if(r>-1){let o=e.slice(r).indexOf(")")+r,a=e.substring(0,r),l=e.substring(o+1),h=e.substring(r+6,o).split(","),c=Number(h[1]),d;if(s="",i=n(h[0],t)){d=(c=isNaN(c)?i.length:c)<0?i.length+c:Math.min(c,i.length);for(let e=0;e<d;++e)s+=a+i[e]+l}return s.length?s:""}if(a>-1){var c;let i=e.slice(a).indexOf(")")+a,r=e.substring(a+8,i).split(",");switch(Number(n(r[0],t))){case 0:s=o(r[4],r[1]);break;case 1:s=o(r[2],r[1]);break;case 2:s=o(r[3],r[1]);break;default:s=r[1]}return s?(c=s).trim&&c.trim()||c.replace(/^\s+|\s+$/g,""):""}if(l>-1){let s;let o=e.substring(0,l),r=Number(e.substring(l+1,h));return i=n(o,t),!isNaN(r)&&i&&(r<0?void 0===(s=i[i.length+r])&&(s=i[0]):void 0===(s=i[r])&&(s=i[i.length-1])),void 0!==s?s:""}return"{"+e+"}"}(e.value,t))}),s(a.reduce((e,t)=>e+t.value,""),t,i)}function i(e,i){let s=e.split("."),n=this.options.lang,o=0;for(;o<s.length;++o)n=n&&n[s[o]];return"string"==typeof n?t(n,i,this):""}e.compose=function(e){let t=e.prototype;t.langFormat||(t.langFormat=i)},e.i18nFormat=t}(i||(i={})),i}),i(t,"Accessibility/Utils/ChartUtilities.js",[t["Core/Globals.js"],t["Accessibility/Utils/HTMLUtilities.js"],t["Core/Utilities.js"]],function(e,t,i){let{doc:s}=e,{stripHTMLTagsFromString:n}=t,{defined:o,find:r,fireEvent:a}=i;function l(e){if(e.points&&e.points.length){let t=r(e.points,e=>!!e.graphic);return t&&t.graphic&&t.graphic.element}}function h(e){let t=l(e);return t&&t.parentNode||e.graph&&e.graph.element||e.group&&e.group.element}return{fireEventOnWrappedOrUnwrappedElement:function e(t,i){let n=i.type,o=t.hcEvents;s.createEvent&&(t.dispatchEvent||t.fireEvent)?t.dispatchEvent?t.dispatchEvent(i):t.fireEvent(n,i):o&&o[n]?a(t,n,i):t.element&&e(t.element,i)},getChartTitle:function(e){return n(e.options.title.text||e.langFormat("accessibility.defaultChartTitle",{chart:e}),e.renderer.forExport)},getAxisDescription:function(e){return e&&(e.options.accessibility?.description||e.axisTitle?.textStr||e.options.id||e.categories&&"categories"||e.dateTime&&"Time"||"values")},getAxisRangeDescription:function(e){let t=e.options||{};return t.accessibility&&void 0!==t.accessibility.rangeDescription?t.accessibility.rangeDescription:e.categories?function(e){let t=e.chart;return e.dataMax&&e.dataMin?t.langFormat("accessibility.axis.rangeCategories",{chart:t,axis:e,numCategories:e.dataMax-e.dataMin+1}):""}(e):e.dateTime&&(0===e.min||0===e.dataMin)?function(e){let t=e.chart,i={},s=e.dataMin||e.min||0,n=e.dataMax||e.max||0,o="Seconds";i.Seconds=(n-s)/1e3,i.Minutes=i.Seconds/60,i.Hours=i.Minutes/60,i.Days=i.Hours/24,["Minutes","Hours","Days"].forEach(function(e){i[e]>2&&(o=e)});let r=i[o].toFixed("Seconds"!==o&&"Minutes"!==o?1:0);return t.langFormat("accessibility.axis.timeRange"+o,{chart:t,axis:e,range:r.replace(".0","")})}(e):function(e){let t=e.chart,i=t.options,s=i&&i.accessibility&&i.accessibility.screenReaderSection.axisRangeDateFormat||"",n={min:e.dataMin||e.min||0,max:e.dataMax||e.max||0},o=function(i){return e.dateTime?t.time.dateFormat(s,n[i]):n[i].toString()};return t.langFormat("accessibility.axis.rangeFromTo",{chart:t,axis:e,rangeFrom:o("min"),rangeTo:o("max")})}(e)},getPointFromXY:function(e,t,i){let s=e.length,n;for(;s--;)if(n=r(e[s].points||[],function(e){return e.x===t&&e.y===i}))return n},getSeriesFirstPointElement:l,getSeriesFromName:function(e,t){return t?(e.series||[]).filter(function(e){return e.name===t}):e.series},getSeriesA11yElement:h,unhideChartElementFromAT:function e(t,i){i.setAttribute("aria-hidden",!1),i!==t.renderTo&&i.parentNode&&i.parentNode!==s.body&&(Array.prototype.forEach.call(i.parentNode.childNodes,function(e){e.hasAttribute("aria-hidden")||e.setAttribute("aria-hidden",!0)}),e(t,i.parentNode))},hideSeriesFromAT:function(e){let t=h(e);t&&t.setAttribute("aria-hidden",!0)},scrollAxisToPoint:function(e){let t=e.series.xAxis,i=e.series.yAxis,s=t&&t.scrollbar?t:i,n=s&&s.scrollbar;if(n&&o(n.to)&&o(n.from)){let t=n.to-n.from,i=function(e,t){if(!o(e.dataMin)||
23510!o(e.dataMax))return 0;let i=e.toPixels(e.dataMin),s=e.toPixels(e.dataMax),n="xAxis"===e.coll?"x":"y";return(e.toPixels(t[n]||0)-i)/(s-i)}(s,e);n.updatePosition(i-t/2,i+t/2),a(n,"changed",{from:n.from,to:n.to,trigger:"scrollbar",DOMEvent:null})}}}}),i(t,"Accessibility/Utils/DOMElementProvider.js",[t["Core/Globals.js"],t["Accessibility/Utils/HTMLUtilities.js"]],function(e,t){let{doc:i}=e,{removeElement:s}=t;return class{constructor(){this.elements=[]}createElement(){let e=i.createElement.apply(i,arguments);return this.elements.push(e),e}removeElement(e){s(e),this.elements.splice(this.elements.indexOf(e),1)}destroyCreatedElements(){this.elements.forEach(function(e){s(e)}),this.elements=[]}}}),i(t,"Accessibility/Utils/EventProvider.js",[t["Core/Globals.js"],t["Core/Utilities.js"]],function(e,t){let{addEvent:i}=t;return class{constructor(){this.eventRemovers=[]}addEvent(){let t=i.apply(e,arguments);return this.eventRemovers.push({element:arguments[0],remover:t}),t}removeEvent(e){let t=this.eventRemovers.map(e=>e.remover).indexOf(e);this.eventRemovers[t].remover(),this.eventRemovers.splice(t,1)}removeAddedEvents(){this.eventRemovers.map(e=>e.remover).forEach(e=>e()),this.eventRemovers=[]}}}),i(t,"Accessibility/AccessibilityComponent.js",[t["Accessibility/Utils/ChartUtilities.js"],t["Accessibility/Utils/DOMElementProvider.js"],t["Accessibility/Utils/EventProvider.js"],t["Accessibility/Utils/HTMLUtilities.js"],t["Core/Utilities.js"]],function(e,t,i,s,n){let{fireEventOnWrappedOrUnwrappedElement:o}=e,{getFakeMouseEvent:r}=s,{extend:a}=n;class l{initBase(e,s){this.chart=e,this.eventProvider=new i,this.domElementProvider=new t,this.proxyProvider=s,this.keyCodes={left:37,right:39,up:38,down:40,enter:13,space:32,esc:27,tab:9,pageUp:33,pageDown:34,end:35,home:36}}addEvent(e,t,i,s){return this.eventProvider.addEvent(e,t,i,s)}createElement(e,t){return this.domElementProvider.createElement(e,t)}fakeClickEvent(e){o(e,r("click"))}destroyBase(){this.domElementProvider.destroyCreatedElements(),this.eventProvider.removeAddedEvents()}}return a(l.prototype,{init(){},getKeyboardNavigation:function(){},onChartUpdate(){},onChartRender(){},destroy(){}}),l}),i(t,"Accessibility/KeyboardNavigationHandler.js",[t["Core/Utilities.js"]],function(e){let{find:t}=e;return class{constructor(e,t){this.chart=e,this.keyCodeMap=t.keyCodeMap||[],this.validate=t.validate,this.init=t.init,this.terminate=t.terminate,this.response={success:1,prev:2,next:3,noHandler:4,fail:5}}run(e){let i=e.which||e.keyCode,s=this.response.noHandler,n=t(this.keyCodeMap,function(e){return e[0].indexOf(i)>-1});return n?s=n[1].call(this,i,e):9===i&&(s=this.response[e.shiftKey?"prev":"next"]),s}}}),i(t,"Accessibility/Components/ContainerComponent.js",[t["Accessibility/AccessibilityComponent.js"],t["Accessibility/KeyboardNavigationHandler.js"],t["Accessibility/Utils/ChartUtilities.js"],t["Core/Globals.js"],t["Accessibility/Utils/HTMLUtilities.js"]],function(e,t,i,s,n){let{unhideChartElementFromAT:o,getChartTitle:r}=i,{doc:a}=s,{stripHTMLTagsFromString:l}=n;return class extends e{onChartUpdate(){this.handleSVGTitleElement(),this.setSVGContainerLabel(),this.setGraphicContainerAttrs(),this.setRenderToAttrs(),this.makeCreditsAccessible()}handleSVGTitleElement(){let e=this.chart,t="highcharts-title-"+e.index,i=l(e.langFormat("accessibility.svgContainerTitle",{chartTitle:r(e)}));if(i.length){let s=this.svgTitleElement=this.svgTitleElement||a.createElementNS("http://www.w3.org/2000/svg","title");s.textContent=i,s.id=t,e.renderTo.insertBefore(s,e.renderTo.firstChild)}}setSVGContainerLabel(){let e=this.chart,t=e.langFormat("accessibility.svgContainerLabel",{chartTitle:r(e)});e.renderer.box&&t.length&&e.renderer.box.setAttribute("aria-label",t)}setGraphicContainerAttrs(){let e=this.chart,t=e.langFormat("accessibility.graphicContainerLabel",{chartTitle:r(e)});t.length&&e.container.setAttribute("aria-label",t)}setRenderToAttrs(){let e=this.chart,t="disabled"!==e.options.accessibility.landmarkVerbosity,i=e.langFormat("accessibility.chartContainerLabel",{title:r(e),chart:e});i&&(e.renderTo.setAttribute("role",t?"region":"group"),e.renderTo.setAttribute("aria-label",i))}makeCreditsAccessible(){let e=this.chart,t=e.credits;t&&(t.textStr&&t.element.setAttribute("aria-label",e.langFormat("accessibility.credits",{creditsStr:l(t.textStr,e.renderer.forExport)})),o(e,t.element))}getKeyboardNavigation(){let e=this.chart;return new t(e,{keyCodeMap:[],validate:function(){return!0},init:function(){let t=e.accessibility;t&&t.keyboardNavigation.tabindexContainer.focus()}})}destroy(){this.chart.renderTo.setAttribute("aria-hidden",!0)}}}),i(t,"Accessibility/FocusBorder.js",[t["Core/Utilities.js"]],function(e){var t;let{addEvent:i,pick:s}=e;return function(e){let t=["x","y","transform","width","height","r","d","stroke-width"];function n(){let e=this.focusElement,t=this.options.accessibility.keyboardNavigation.focusBorder;e&&(e.removeFocusBorder(),t.enabled&&e.addFocusBorder(t.margin,{stroke:t.style.color,strokeWidth:t.style.lineWidth,r:t.style.borderRadius}))}function o(e,t){let s=this.options.accessibility.keyboardNavigation.focusBorder,n=t||e.element;n&&n.focus&&(n.hcEvents&&n.hcEvents.focusin||i(n,"focusin",function(){}),n.focus(),s.hideBrowserFocusOutline&&(n.style.outline="none")),this.focusElement&&this.focusElement.removeFocusBorder(),this.focusElement=e,this.renderFocusBorder()}function r(e,i){this.focusBorder&&this.removeFocusBorder();let n=this.getBBox(),o=s(e,3),r=this.parentGroup,a=this.scaleX||r&&r.scaleX,l=this.scaleY||r&&r.scaleY,h=(a?!l:l)?Math.abs(a||l||1):(Math.abs(a||1)+Math.abs(l||1))/2;n.x+=this.translateX?this.translateX:0,n.y+=this.translateY?this.translateY:0;let c=n.x-o,d=n.y-o,u=n.width+2*o,p=n.height+2*o,g=!!this.text;if("text"===this.element.nodeName||g){let e,t;let i=!!this.rotation,s=g?{x:i?1:0,y:0}:(e=0,t=0,"middle"===this.attr("text-anchor")?e=t=.5:this.rotation?e=.25:t=.75,{x:e,y:t}),r=+this.attr("x"),a=+this.attr("y");
23510if(isNaN(r)||(c=r-n.width*s.x-o),isNaN(a)||(d=a-n.height*s.y-o),g&&i){let e=u;u=p,p=e,isNaN(r)||(c=r-n.height*s.x-o),isNaN(a)||(d=a-n.width*s.y-o)}}this.focusBorder=this.renderer.rect(c,d,u,p,parseInt((i&&i.r||0).toString(),10)/h).addClass("highcharts-focus-border").attr({zIndex:99}).add(r),this.renderer.styledMode||this.focusBorder.attr({stroke:i&&i.stroke,"stroke-width":(i&&i.strokeWidth||0)/h}),function(e,...i){e.focusBorderUpdateHooks||(e.focusBorderUpdateHooks={},t.forEach(t=>{let s=t+"Setter",n=e[s]||e._defaultSetter;e.focusBorderUpdateHooks[s]=n,e[s]=function(){let t=n.apply(e,arguments);return e.addFocusBorder.apply(e,i),t}}))}(this,e,i),function(e){if(e.focusBorderDestroyHook)return;let t=e.destroy;e.destroy=function(){return e.focusBorder&&e.focusBorder.destroy&&e.focusBorder.destroy(),t.apply(e,arguments)},e.focusBorderDestroyHook=t}(this)}function a(){var e;e=this,e.focusBorderUpdateHooks&&(Object.keys(e.focusBorderUpdateHooks).forEach(t=>{let i=e.focusBorderUpdateHooks[t];i===e._defaultSetter?delete e[t]:e[t]=i}),delete e.focusBorderUpdateHooks),this.focusBorderDestroyHook&&(this.destroy=this.focusBorderDestroyHook,delete this.focusBorderDestroyHook),this.focusBorder&&(this.focusBorder.destroy(),delete this.focusBorder)}e.compose=function(e,t){let i=e.prototype,s=t.prototype;i.renderFocusBorder||(i.renderFocusBorder=n,i.setFocusToElement=o),s.addFocusBorder||(s.addFocusBorder=r,s.removeFocusBorder=a)}}(t||(t={})),t}),i(t,"Accessibility/Utils/Announcer.js",[t["Core/Renderer/HTML/AST.js"],t["Accessibility/Utils/DOMElementProvider.js"],t["Core/Globals.js"],t["Accessibility/Utils/HTMLUtilities.js"],t["Core/Utilities.js"]],function(e,t,i,s,n){let{doc:o}=i,{addClass:r,visuallyHideElement:a}=s,{attr:l}=n;return class{constructor(e,i){this.chart=e,this.domElementProvider=new t,this.announceRegion=this.addAnnounceRegion(i)}destroy(){this.domElementProvider.destroyCreatedElements()}announce(t){e.setElementHTML(this.announceRegion,t),this.clearAnnouncementRegionTimer&&clearTimeout(this.clearAnnouncementRegionTimer),this.clearAnnouncementRegionTimer=setTimeout(()=>{this.announceRegion.innerHTML=e.emptyHTML,delete this.clearAnnouncementRegionTimer},3e3)}addAnnounceRegion(e){let t=this.chart.announcerContainer||this.createAnnouncerContainer(),i=this.domElementProvider.createElement("div");return l(i,{"aria-hidden":!1,"aria-live":e,"aria-atomic":!0}),this.chart.styledMode?r(i,"highcharts-visually-hidden"):a(i),t.appendChild(i),i}createAnnouncerContainer(){let e=this.chart,t=o.createElement("div");return l(t,{"aria-hidden":!1,class:"highcharts-announcer-container"}),t.style.position="relative",e.renderTo.insertBefore(t,e.renderTo.firstChild),e.announcerContainer=t,t}}}),i(t,"Accessibility/Components/AnnotationsA11y.js",[t["Accessibility/Utils/HTMLUtilities.js"]],function(e){let{escapeStringForHTML:t,stripHTMLTagsFromString:i}=e;function s(e){return(e.annotations||[]).reduce((e,t)=>(t.options&&!1!==t.options.visible&&(e=e.concat(t.labels)),e),[])}function n(e){return e.options&&e.options.accessibility&&e.options.accessibility.description||e.graphic&&e.graphic.text&&e.graphic.text.textStr||""}function o(e){let t=e.options&&e.options.accessibility&&e.options.accessibility.description;if(t)return t;let i=e.chart,s=n(e),o=e.points,r=e=>e.graphic&&e.graphic.element&&e.graphic.element.getAttribute("aria-label")||"",a=o.filter(e=>!!e.graphic).map(e=>{let t=e.accessibility&&e.accessibility.valueDescription||r(e),i=e&&e.series.name||"";return(i?i+", ":"")+"data point "+t}).filter(e=>!!e),l=a.length,h=l>1?"MultiplePoints":l?"SinglePoint":"NoPoints",c={annotationText:s,annotation:e,numPoints:l,annotationPoint:a[0],additionalAnnotationPoints:a.slice(1)};return i.langFormat("accessibility.screenReaderSection.annotations.description"+h,c)}function r(e){return s(e).map(s=>{let n=t(i(o(s),e.renderer.forExport));return n?`<li>${n}</li>`:""})}return{getAnnotationsInfoHTML:function(e){let t=e.annotations;if(!(t&&t.length))return"";let i=r(e);return`<ul style="list-style-type: none">${i.join(" ")}</ul>`},getAnnotationLabelDescription:o,getAnnotationListItems:r,getPointAnnotationTexts:function(e){let t=s(e.series.chart).filter(t=>t.points.indexOf(e)>-1);return t.length?t.map(e=>`${n(e)}`):[]}}}),i(t,"Accessibility/Components/InfoRegionsComponent.js",[t["Accessibility/A11yI18n.js"],t["Accessibility/AccessibilityComponent.js"],t["Accessibility/Utils/Announcer.js"],t["Accessibility/Components/AnnotationsA11y.js"],t["Core/Renderer/HTML/AST.js"],t["Accessibility/Utils/ChartUtilities.js"],t["Core/Templating.js"],t["Core/Globals.js"],t["Accessibility/Utils/HTMLUtilities.js"],t["Core/Utilities.js"]],function(e,t,i,s,n,o,r,a,l,h){let{getAnnotationsInfoHTML:c}=s,{getAxisDescription:d,getAxisRangeDescription:u,getChartTitle:p,unhideChartElementFromAT:g}=o,{format:m}=r,{doc:b}=a,{addClass:y,getElement:f,getHeadingTagNameForElement:x,stripHTMLTagsFromString:v,visuallyHideElement:A}=l,{attr:C,pick:w,replaceNested:E}=h;function T(e){return E(e,[/<([\w\-.:!]+)\b[^<>]*>\s*<\/\1>/g,""])}return class extends t{constructor(){super(...arguments),this.screenReaderSections={}}init(){let e=this.chart,t=this;this.initRegionsDefinitions(),this.addEvent(e,"aftergetTableAST",function(e){t.onDataTableCreated(e)}),this.addEvent(e,"afterViewData",function(e){e.wasHidden&&(t.dataTableDiv=e.element,setTimeout(function(){t.focusDataTable()},300))}
23510),this.addEvent(e,"afterHideData",function(){t.viewDataTableButton&&t.viewDataTableButton.setAttribute("aria-expanded","false")}),this.announcer=new i(e,"assertive")}initRegionsDefinitions(){let e=this,t=this.chart.options.accessibility;this.screenReaderSections={before:{element:null,buildContent:function(i){let s=t.screenReaderSection.beforeChartFormatter;return s?s(i):e.defaultBeforeChartFormatter(i)},insertIntoDOM:function(e,t){t.renderTo.insertBefore(e,t.renderTo.firstChild)},afterInserted:function(){void 0!==e.sonifyButtonId&&e.initSonifyButton(e.sonifyButtonId),void 0!==e.dataTableButtonId&&e.initDataTableButton(e.dataTableButtonId)}},after:{element:null,buildContent:function(i){let s=t.screenReaderSection.afterChartFormatter;return s?s(i):e.defaultAfterChartFormatter()},insertIntoDOM:function(e,t){t.renderTo.insertBefore(e,t.container.nextSibling)},afterInserted:function(){e.chart.accessibility&&t.keyboardNavigation.enabled&&e.chart.accessibility.keyboardNavigation.updateExitAnchor()}}}}onChartRender(){let e=this;this.linkedDescriptionElement=this.getLinkedDescriptionElement(),this.setLinkedDescriptionAttrs(),Object.keys(this.screenReaderSections).forEach(function(t){e.updateScreenReaderSection(t)})}getLinkedDescriptionElement(){let e=this.chart.options.accessibility.linkedDescription;if(!e)return;if("string"!=typeof e)return e;let t=m(e,this.chart),i=b.querySelectorAll(t);if(1===i.length)return i[0]}setLinkedDescriptionAttrs(){let e=this.linkedDescriptionElement;e&&(e.setAttribute("aria-hidden","true"),y(e,"highcharts-linked-description"))}updateScreenReaderSection(e){let t=this.chart,i=this.screenReaderSections[e],s=i.buildContent(t),o=i.element=i.element||this.createElement("div"),r=o.firstChild||this.createElement("div");s?(this.setScreenReaderSectionAttribs(o,e),n.setElementHTML(r,s),o.appendChild(r),i.insertIntoDOM(o,t),t.styledMode?y(r,"highcharts-visually-hidden"):A(r),g(t,r),i.afterInserted&&i.afterInserted()):(o.parentNode&&o.parentNode.removeChild(o),i.element=null)}setScreenReaderSectionAttribs(e,t){let i=this.chart,s=i.langFormat("accessibility.screenReaderSection."+t+"RegionLabel",{chart:i,chartTitle:p(i)});C(e,{id:`highcharts-screen-reader-region-${t}-${i.index}`,"aria-label":s||void 0}),e.style.position="relative",s&&e.setAttribute("role","all"===i.options.accessibility.landmarkVerbosity?"region":"group")}defaultBeforeChartFormatter(){let t=this.chart,i=t.options.accessibility.screenReaderSection.beforeChartFormat;if(!i)return"";let s=this.getAxesDescription(),n=t.sonify&&t.options.sonification&&t.options.sonification.enabled,o="highcharts-a11y-sonify-data-btn-"+t.index,r="hc-linkto-highcharts-data-table-"+t.index,a=c(t),l=t.langFormat("accessibility.screenReaderSection.annotations.heading",{chart:t}),h={headingTagName:x(t.renderTo),chartTitle:p(t),typeDescription:this.getTypeDescriptionText(),chartSubtitle:this.getSubtitleText(),chartLongdesc:this.getLongdescText(),xAxisDescription:s.xAxis,yAxisDescription:s.yAxis,playAsSoundButton:n?this.getSonifyButtonText(o):"",viewTableButton:t.getCSV?this.getDataTableButtonText(r):"",annotationsTitle:a?l:"",annotationsList:a},d=e.i18nFormat(i,h,t);return this.dataTableButtonId=r,this.sonifyButtonId=o,T(d)}defaultAfterChartFormatter(){let t=this.chart,i=t.options.accessibility.screenReaderSection.afterChartFormat;if(!i)return"";let s={endOfChartMarker:this.getEndOfChartMarkerText()};return T(e.i18nFormat(i,s,t))}getLinkedDescription(){let e=this.linkedDescriptionElement;return v(e&&e.innerHTML||"",this.chart.renderer.forExport)}getLongdescText(){let e=this.chart.options,t=e.caption,i=t&&t.text,s=this.getLinkedDescription();return e.accessibility.description||s||i||""}getTypeDescriptionText(){let e=this.chart;return e.types?e.options.accessibility.typeDescription||function(e,t){let i=t[0],s=e.series&&e.series[0]||{},n=e.mapView&&e.mapView.geoMap&&e.mapView.geoMap.title,o={numSeries:e.series.length,numPoints:s.points&&s.points.length,chart:e,mapTitle:n};return i?"map"===i||"tiledwebmap"===i?o.mapTitle?e.langFormat("accessibility.chartTypes.mapTypeDescription",o):e.langFormat("accessibility.chartTypes.unknownMap",o):e.types.length>1?e.langFormat("accessibility.chartTypes.combinationChart",o):function(e,t,i){let s=t[0],n=e.langFormat("accessibility.seriesTypeDescriptions."+s,i),o=e.series&&e.series.length<2?"Single":"Multiple";return(e.langFormat("accessibility.chartTypes."+s+o,i)||e.langFormat("accessibility.chartTypes.default"+o,i))+(n?" "+n:"")}(e,t,o):e.langFormat("accessibility.chartTypes.emptyChart",o)}(e,e.types):""}getDataTableButtonText(e){let t=this.chart;return'<button id="'+e+'">'+t.langFormat("accessibility.table.viewAsDataTableButtonText",{chart:t,chartTitle:p(t)})+"</button>"}getSonifyButtonText(e){let t=this.chart;return t.options.sonification&&!1===t.options.sonification.enabled?"":'<button id="'+e+'">'+t.langFormat("accessibility.sonification.playAsSoundButtonText",{chart:t,chartTitle:p(t)})+"</button>"}getSubtitleText(){let e=this.chart.options.subtitle;return v(e&&e.text||"",this.chart.renderer.forExport)}getEndOfChartMarkerText(){let e=f(`highcharts-end-of-chart-marker-${this.chart.index}`);
23510if(e)return e.outerHTML;let t=this.chart,i=t.langFormat("accessibility.screenReaderSection.endOfChartMarker",{chart:t});return'<div id="highcharts-end-of-chart-marker-'+t.index+'">'+i+"</div>"}onDataTableCreated(e){let t=this.chart;if(t.options.accessibility.enabled){this.viewDataTableButton&&this.viewDataTableButton.setAttribute("aria-expanded","true");let i=e.tree.attributes||{};i.tabindex=-1,i.summary=t.langFormat("accessibility.table.tableSummary",{chart:t}),e.tree.attributes=i}}focusDataTable(){let e=this.dataTableDiv,t=e&&e.getElementsByTagName("table")[0];t&&t.focus&&t.focus()}initSonifyButton(e){let t=this.sonifyButton=f(e),i=this.chart,s=e=>{t&&(t.setAttribute("aria-hidden","true"),t.setAttribute("aria-label","")),e.preventDefault(),e.stopPropagation();let s=i.langFormat("accessibility.sonification.playAsSoundClickAnnouncement",{chart:i});this.announcer.announce(s),setTimeout(()=>{t&&(t.removeAttribute("aria-hidden"),t.removeAttribute("aria-label")),i.sonify&&i.sonify()},1e3)};t&&i&&(t.setAttribute("tabindex",-1),t.onclick=function(e){(i.options.accessibility&&i.options.accessibility.screenReaderSection.onPlayAsSoundClick||s).call(this,e,i)})}initDataTableButton(e){let t=this.viewDataTableButton=f(e),i=this.chart,s=e.replace("hc-linkto-","");t&&(C(t,{tabindex:-1,"aria-expanded":!!f(s)}),t.onclick=i.options.accessibility.screenReaderSection.onViewDataTableClick||function(){i.viewData()})}getAxesDescription(){let e=this.chart,t=function(t,i){let s=e[t];return s.length>1||s[0]&&w(s[0].options.accessibility&&s[0].options.accessibility.enabled,i)},i=!!e.types&&0>e.types.indexOf("map")&&0>e.types.indexOf("treemap")&&0>e.types.indexOf("tilemap"),s=!!e.hasCartesianSeries,n=t("xAxis",!e.angular&&s&&i),o=t("yAxis",s&&i),r={};return n&&(r.xAxis=this.getAxisDescriptionText("xAxis")),o&&(r.yAxis=this.getAxisDescriptionText("yAxis")),r}getAxisDescriptionText(e){let t=this.chart,i=t[e];return t.langFormat("accessibility.axis."+e+"Description"+(i.length>1?"Plural":"Singular"),{chart:t,names:i.map(function(e){return d(e)}),ranges:i.map(function(e){return u(e)}),numAxes:i.length})}destroy(){this.announcer&&this.announcer.destroy()}}}),i(t,"Accessibility/Components/MenuComponent.js",[t["Core/Utilities.js"],t["Accessibility/AccessibilityComponent.js"],t["Accessibility/KeyboardNavigationHandler.js"],t["Accessibility/Utils/ChartUtilities.js"],t["Accessibility/Utils/HTMLUtilities.js"]],function(e,t,i,s,n){let{attr:o}=e,{getChartTitle:r,unhideChartElementFromAT:a}=s,{getFakeMouseEvent:l}=n;function h(e){return e.exportSVGElements&&e.exportSVGElements[0]}class c extends t{init(){let e=this.chart,t=this;this.addEvent(e,"exportMenuShown",function(){t.onMenuShown()}),this.addEvent(e,"exportMenuHidden",function(){t.onMenuHidden()}),this.createProxyGroup()}onMenuHidden(){let e=this.chart.exportContextMenu;e&&e.setAttribute("aria-hidden","true"),this.setExportButtonExpandedState("false")}onMenuShown(){let e=this.chart,t=e.exportContextMenu;t&&(this.addAccessibleContextMenuAttribs(),a(e,t)),this.setExportButtonExpandedState("true")}setExportButtonExpandedState(e){this.exportButtonProxy&&this.exportButtonProxy.innerElement.setAttribute("aria-expanded",e)}onChartRender(){let e=this.chart,t=e.focusElement,i=e.accessibility;this.proxyProvider.clearGroup("chartMenu"),this.proxyMenuButton(),this.exportButtonProxy&&t&&t===e.exportingGroup&&(t.focusBorder?e.setFocusToElement(t,this.exportButtonProxy.innerElement):i&&i.keyboardNavigation.tabindexContainer.focus())}proxyMenuButton(){let e=this.chart,t=this.proxyProvider,i=h(e);(function(e){let t=e.options.exporting,i=h(e);return!!(t&&!1!==t.enabled&&t.accessibility&&t.accessibility.enabled&&i&&i.element)})(e)&&i&&(this.exportButtonProxy=t.addProxyElement("chartMenu",{click:i},"button",{"aria-label":e.langFormat("accessibility.exporting.menuButtonLabel",{chart:e,chartTitle:r(e)}),"aria-expanded":!1,title:e.options.lang.contextButtonTitle||null}))}createProxyGroup(){this.chart&&this.proxyProvider&&this.proxyProvider.addGroup("chartMenu")}addAccessibleContextMenuAttribs(){let e=this.chart,t=e.exportDivElements;
23510if(t&&t.length){t.forEach(e=>{e&&("LI"!==e.tagName||e.children&&e.children.length?e.setAttribute("aria-hidden","true"):e.setAttribute("tabindex",-1))});let i=t[0]&&t[0].parentNode;i&&o(i,{"aria-hidden":void 0,"aria-label":e.langFormat("accessibility.exporting.chartMenuLabel",{chart:e}),role:"list"})}}getKeyboardNavigation(){let e=this.keyCodes,t=this.chart,s=this;return new i(t,{keyCodeMap:[[[e.left,e.up],function(){return s.onKbdPrevious(this)}],[[e.right,e.down],function(){return s.onKbdNext(this)}],[[e.enter,e.space],function(){return s.onKbdClick(this)}]],validate:function(){return!!t.exporting&&!1!==t.options.exporting.enabled&&!1!==t.options.exporting.accessibility.enabled},init:function(){let e=s.exportButtonProxy,i=s.chart.exportingGroup;e&&i&&t.setFocusToElement(i,e.innerElement)},terminate:function(){t.hideExportMenu()}})}onKbdPrevious(e){let t=this.chart,i=t.options.accessibility,s=e.response,n=t.highlightedExportItemIx||0;for(;n--;)if(t.highlightExportItem(n))return s.success;return i.keyboardNavigation.wrapAround?(t.highlightLastExportItem(),s.success):s.prev}onKbdNext(e){let t=this.chart,i=t.options.accessibility,s=e.response;for(let e=(t.highlightedExportItemIx||0)+1;e<t.exportDivElements.length;++e)if(t.highlightExportItem(e))return s.success;return i.keyboardNavigation.wrapAround?(t.highlightExportItem(0),s.success):s.next}onKbdClick(e){let t=this.chart,i=t.exportDivElements[t.highlightedExportItemIx],s=h(t).element;return t.openMenu?this.fakeClickEvent(i):(this.fakeClickEvent(s),t.highlightExportItem(0)),e.response.success}}return function(e){function t(){let e=h(this);if(e){let t=e.element;t.onclick&&t.onclick(l("click"))}}function i(){let e=this.exportDivElements;e&&this.exportContextMenu&&this.openMenu&&(e.forEach(e=>{e&&"highcharts-menu-item"===e.className&&e.onmouseout&&e.onmouseout(l("mouseout"))}),this.highlightedExportItemIx=0,this.exportContextMenu.hideMenu(),this.container.focus())}function s(e){let t=this.exportDivElements&&this.exportDivElements[e],i=this.exportDivElements&&this.exportDivElements[this.highlightedExportItemIx];if(t&&"LI"===t.tagName&&!(t.children&&t.children.length)){let s=!!(this.renderTo.getElementsByTagName("g")[0]||{}).focus;return t.focus&&s&&t.focus(),i&&i.onmouseout&&i.onmouseout(l("mouseout")),t.onmouseover&&t.onmouseover(l("mouseover")),this.highlightedExportItemIx=e,!0}return!1}function n(){if(this.exportDivElements){let e=this.exportDivElements.length;for(;e--;)if(this.highlightExportItem(e))return!0}return!1}e.compose=function(e){let o=e.prototype;o.hideExportMenu||(o.hideExportMenu=i,o.highlightExportItem=s,o.highlightLastExportItem=n,o.showExportMenu=t)}}(c||(c={})),c}),i(t,"Accessibility/KeyboardNavigation.js",[t["Core/Globals.js"],t["Accessibility/Components/MenuComponent.js"],t["Core/Utilities.js"],t["Accessibility/Utils/EventProvider.js"],t["Accessibility/Utils/HTMLUtilities.js"]],function(e,t,i,s,n){let{doc:o,win:r}=e,{addEvent:a,defined:l,fireEvent:h}=i,{getElement:c,simulatedEventTarget:d}=n;class u{constructor(e,t){this.currentModuleIx=NaN,this.modules=[],this.init(e,t)}init(e,t){let i=this.eventProvider=new s;this.chart=e,this.components=t,this.modules=[],this.currentModuleIx=0,this.update(),i.addEvent(this.tabindexContainer,"keydown",e=>this.onKeydown(e)),i.addEvent(this.tabindexContainer,"focus",e=>this.onFocus(e)),["mouseup","touchend"].forEach(e=>i.addEvent(o,e,e=>this.onMouseUp(e))),["mousedown","touchstart"].forEach(t=>i.addEvent(e.renderTo,t,()=>{this.isClickingChart=!0}))}update(e){let t=this.chart.options.accessibility,i=t&&t.keyboardNavigation,s=this.components;this.updateContainerTabindex(),i&&i.enabled&&e&&e.length?(this.modules=e.reduce(function(e,t){let i=s[t].getKeyboardNavigation();return e.concat(i)},[]),this.updateExitAnchor()):(this.modules=[],this.currentModuleIx=0,this.removeExitAnchor())}updateExitAnchor(){let e=c(`highcharts-end-of-chart-marker-${this.chart.index}`);this.removeExitAnchor(),e?(this.makeElementAnExitAnchor(e),this.exitAnchor=e):this.createExitAnchor()}move(e){let t=this.modules&&this.modules[this.currentModuleIx];t&&t.terminate&&t.terminate(e),this.chart.focusElement&&this.chart.focusElement.removeFocusBorder(),this.currentModuleIx+=e;let i=this.modules&&this.modules[this.currentModuleIx];if(i){if(i.validate&&!i.validate())return this.move(e);
23510if(i.init)return i.init(e),!0}return this.currentModuleIx=0,this.exiting=!0,e>0?this.exitAnchor&&this.exitAnchor.focus():this.tabindexContainer.focus(),!1}onFocus(e){let t=this.chart,i=e.relatedTarget&&t.container.contains(e.relatedTarget),s=t.options.accessibility,n=s&&s.keyboardNavigation;if(n&&n.enabled&&!this.exiting&&!this.tabbingInBackwards&&!this.isClickingChart&&!i){let e=this.getFirstValidModuleIx();null!==e&&(this.currentModuleIx=e,this.modules[e].init(1))}this.keyboardReset=!1,this.exiting=!1}onMouseUp(e){if(delete this.isClickingChart,!this.keyboardReset&&e.relatedTarget!==d){let t=this.chart;if(!e.target||!t.container.contains(e.target)){let e=this.modules&&this.modules[this.currentModuleIx||0];e&&e.terminate&&e.terminate(),this.currentModuleIx=0}t.focusElement&&(t.focusElement.removeFocusBorder(),delete t.focusElement),this.keyboardReset=!0}}onKeydown(e){let t;let i=e||r.event,s=this.modules&&this.modules.length&&this.modules[this.currentModuleIx],n=i.target;if((!n||"INPUT"!==n.nodeName||n.classList.contains("highcharts-a11y-proxy-element"))&&(this.keyboardReset=!1,this.exiting=!1,s)){let e=s.run(i);e===s.response.success?t=!0:e===s.response.prev?t=this.move(-1):e===s.response.next&&(t=this.move(1)),t&&(i.preventDefault(),i.stopPropagation())}}updateContainerTabindex(){let e;let t=this.chart.options.accessibility,i=t&&t.keyboardNavigation,s=!(i&&!1===i.enabled),n=this.chart,o=n.container;n.renderTo.hasAttribute("tabindex")?(o.removeAttribute("tabindex"),e=n.renderTo):e=o,this.tabindexContainer=e;let r=e.getAttribute("tabindex");s&&!r?e.setAttribute("tabindex","0"):s||n.container.removeAttribute("tabindex")}createExitAnchor(){let e=this.chart,t=this.exitAnchor=o.createElement("div");e.renderTo.appendChild(t),this.makeElementAnExitAnchor(t)}makeElementAnExitAnchor(e){let t=this.tabindexContainer.getAttribute("tabindex")||0;e.setAttribute("class","highcharts-exit-anchor"),e.setAttribute("tabindex",t),e.setAttribute("aria-hidden",!1),this.addExitAnchorEventsToEl(e)}removeExitAnchor(){if(this.exitAnchor){let e=this.eventProvider.eventRemovers.find(e=>e.element===this.exitAnchor);e&&l(e.remover)&&this.eventProvider.removeEvent(e.remover),this.exitAnchor.parentNode&&this.exitAnchor.parentNode.removeChild(this.exitAnchor),delete this.exitAnchor}}addExitAnchorEventsToEl(e){let t=this.chart,i=this;this.eventProvider.addEvent(e,"focus",function(e){let s=e||r.event,n=!(s.relatedTarget&&t.container.contains(s.relatedTarget)||i.exiting);if(t.focusElement&&delete t.focusElement,n){if(i.tabbingInBackwards=!0,i.tabindexContainer.focus(),delete i.tabbingInBackwards,s.preventDefault(),i.modules&&i.modules.length){i.currentModuleIx=i.modules.length-1;let e=i.modules[i.currentModuleIx];e&&e.validate&&!e.validate()?i.move(-1):e&&e.init(-1)}}else i.exiting=!1})}getFirstValidModuleIx(){let e=this.modules.length;for(let t=0;t<e;++t){let e=this.modules[t];if(!e.validate||e.validate())return t}return null}destroy(){this.removeExitAnchor(),this.eventProvider.removeAddedEvents(),this.chart.container.removeAttribute("tabindex")}}return function(i){function s(){let e=this;h(this,"dismissPopupContent",{},function(){e.tooltip&&e.tooltip.hide(0),e.hideExportMenu()})}function n(t){27===(t.which||t.keyCode)&&e.charts&&e.charts.forEach(e=>{e&&e.dismissPopupContent&&e.dismissPopupContent()})}i.compose=function(e){t.compose(e);let i=e.prototype;return i.dismissPopupContent||(i.dismissPopupContent=s,a(o,"keydown",n)),e}}(u||(u={})),u}),i(t,"Accessibility/Components/LegendComponent.js",[t["Core/Animation/AnimationUtilities.js"],t["Core/Globals.js"],t["Core/Legend/Legend.js"],t["Core/Utilities.js"],t["Accessibility/AccessibilityComponent.js"],t["Accessibility/KeyboardNavigationHandler.js"],t["Accessibility/Utils/ChartUtilities.js"],t["Accessibility/Utils/HTMLUtilities.js"]],function(e,t,i,s,n,o,r,a){let{animObject:l}=e,{doc:h}=t,{addEvent:c,fireEvent:d,isNumber:u,pick:p,syncTimeout:g}=s,{getChartTitle:m}=r,{stripHTMLTagsFromString:b,addClass:y,removeClass:f}=a;function x(e){let t=e.legend&&e.legend.allItems,i=e.options.legend.accessibility||{},s=e.colorAxis&&e.colorAxis.some(e=>!e.dataClasses||!e.dataClasses.length);return!!(t&&t.length&&!s&&!1!==i.enabled)}function v(e,t){let i=t.legendItem||{};for(let s of(t.setState(e?"hover":"",!0),["group","label","symbol"])){let t=i[s],n=t&&t.element||t;n&&d(n,e?"mouseover":"mouseout")}}class A extends n{constructor(){super(...arguments),this.highlightedLegendItemIx=NaN,this.proxyGroup=null}init(){let e=this;this.recreateProxies(),this.addEvent(i,"afterScroll",function(){this.chart===e.chart&&(e.proxyProvider.updateGroupProxyElementPositions("legend"),e.updateLegendItemProxyVisibility(),e.highlightedLegendItemIx>-1&&this.chart.highlightLegendItem(e.highlightedLegendItemIx))}),this.addEvent(i,"afterPositionItem",function(t){this.chart===e.chart&&this.chart.renderer&&e.updateProxyPositionForItem(t.item)}
23510),this.addEvent(i,"afterRender",function(){this.chart===e.chart&&this.chart.renderer&&e.recreateProxies()&&g(()=>e.proxyProvider.updateGroupProxyElementPositions("legend"),l(p(this.chart.renderer.globalAnimation,!0)).duration)})}updateLegendItemProxyVisibility(){let e;let t=this.chart,i=t.legend,s=i.allItems||[],n=i.currentPage||1,o=i.clipHeight||0;s.forEach(s=>{if(s.a11yProxyElement){let r=i.pages&&i.pages.length,a=s.a11yProxyElement.element,l=!1;if(e=s.legendItem||{},r){let t=e.pageIx||0;l=(e.y||0)+(e.label?Math.round(e.label.getBBox().height):0)-i.pages[t]>o||t!==n-1}l?t.styledMode?y(a,"highcharts-a11y-invisible"):a.style.visibility="hidden":(f(a,"highcharts-a11y-invisible"),a.style.visibility="")}})}onChartRender(){x(this.chart)||this.removeProxies()}highlightAdjacentLegendPage(e){let t=this.chart,i=t.legend,s=(i.currentPage||1)+e,n=i.pages||[];if(s>0&&s<=n.length){let e=0;for(let n of i.allItems)((n.legendItem||{}).pageIx||0)+1===s&&t.highlightLegendItem(e)&&(this.highlightedLegendItemIx=e),++e}}updateProxyPositionForItem(e){e.a11yProxyElement&&e.a11yProxyElement.refreshPosition()}recreateProxies(){let e=h.activeElement,t=this.proxyGroup,i=e&&t&&t.contains(e);return this.removeProxies(),!!x(this.chart)&&(this.addLegendProxyGroup(),this.proxyLegendItems(),this.updateLegendItemProxyVisibility(),this.updateLegendTitle(),i&&this.chart.highlightLegendItem(this.highlightedLegendItemIx),!0)}removeProxies(){this.proxyProvider.removeGroup("legend")}updateLegendTitle(){let e=this.chart,t=b((e.legend&&e.legend.options.title&&e.legend.options.title.text||"").replace(/<br ?\/?>/g," "),e.renderer.forExport),i=e.langFormat("accessibility.legend.legendLabel"+(t?"":"NoTitle"),{chart:e,legendTitle:t,chartTitle:m(e)});this.proxyProvider.updateGroupAttrs("legend",{"aria-label":i})}addLegendProxyGroup(){let e="all"===this.chart.options.accessibility.landmarkVerbosity?"region":null;this.proxyGroup=this.proxyProvider.addGroup("legend","ul",{"aria-label":"_placeholder_",role:e})}proxyLegendItems(){let e;let t=this;((this.chart.legend||{}).allItems||[]).forEach(i=>{(e=i.legendItem||{}).label&&e.label.element&&t.proxyLegendItem(i)})}proxyLegendItem(e){let t=e.legendItem||{};if(!t.label||!t.group)return;let i=this.chart.langFormat("accessibility.legend.legendItem",{chart:this.chart,itemName:b(e.name,this.chart.renderer.forExport),item:e}),s={tabindex:-1,"aria-pressed":e.visible,"aria-label":i},n=t.group.div?t.label:t.group;e.a11yProxyElement=this.proxyProvider.addProxyElement("legend",{click:t.label,visual:n.element},"button",s)}getKeyboardNavigation(){let e=this.keyCodes,t=this,i=this.chart;return new o(i,{keyCodeMap:[[[e.left,e.right,e.up,e.down],function(e){return t.onKbdArrowKey(this,e)}],[[e.enter,e.space],function(){return t.onKbdClick(this)}],[[e.pageDown,e.pageUp],function(i){let s=i===e.pageDown?1:-1;return t.highlightAdjacentLegendPage(s),this.response.success}]],validate:function(){return t.shouldHaveLegendNavigation()},init:function(){i.highlightLegendItem(0),t.highlightedLegendItemIx=0},terminate:function(){t.highlightedLegendItemIx=-1,i.legend.allItems.forEach(e=>v(!1,e))}})}onKbdArrowKey(e,t){let{keyCodes:{left:i,up:s},highlightedLegendItemIx:n,chart:o}=this,r=o.legend.allItems.length,a=o.options.accessibility.keyboardNavigation.wrapAround,l=t===i||t===s?-1:1;return o.highlightLegendItem(n+l)?this.highlightedLegendItemIx+=l:a&&r>1&&(this.highlightedLegendItemIx=l>0?0:r-1,o.highlightLegendItem(this.highlightedLegendItemIx)),e.response.success}onKbdClick(e){let t=this.chart.legend.allItems[this.highlightedLegendItemIx];return t&&t.a11yProxyElement&&t.a11yProxyElement.click(),e.response.success}shouldHaveLegendNavigation(){if(!x(this.chart))return!1;let e=this.chart,t=(e.options.legend||{}).accessibility||{};return!!(e.legend.display&&t.keyboardNavigation&&t.keyboardNavigation.enabled)}destroy(){this.removeProxies()}}return function(e){function t(e){let t=this.legend.allItems,i=this.accessibility&&this.accessibility.components.legend.highlightedLegendItemIx,s=t[e],n=s?.legendItem||{};if(s){u(i)&&t[i]&&v(!1,t[i]),function(e,t){let i=(e.allItems[t].legendItem||{}).pageIx,s=e.currentPage;void 0!==i&&i+1!==s&&e.scroll(1+i-s)}(this.legend,e);let o=n.label,r=s.a11yProxyElement&&s.a11yProxyElement.innerElement;return o&&o.element&&r&&this.setFocusToElement(o,r),v(!0,s),!0}return!1}function i(e){let t=this.chart.options.accessibility,i=e.item;t.enabled&&i&&i.a11yProxyElement&&i.a11yProxyElement.innerElement.setAttribute("aria-pressed",e.visible?"true":"false")}e.compose=function(e,s){let n=e.prototype;n.highlightLegendItem||(n.highlightLegendItem=t,c(s,"afterColorizeItem",i))}}(A||(A={})),A}),i(t,"Stock/Navigator/ChartNavigatorComposition.js",[t["Core/Globals.js"],t["Core/Utilities.js"]],function(e,t){let i;let{isTouchDevice:s}=e,{addEvent:n,merge:o,pick:r}=t,a=[];function l(){this.navigator&&this.navigator.setBaseSeries(null,!1)}function h(){let e,t,i;let s=this.legend,n=this.navigator;if(n){e=s&&s.options,t=n.xAxis,i=n.yAxis;let{scrollbarHeight:o,scrollButtonSize:a}=n;this.inverted?(n.left=n.opposite?this.chartWidth-o-n.height:this.spacing[3]+o,n.top=this.plotTop+a):(n.left=r(t.left,this.plotLeft+a),n.top=n.navigatorOptions.top||this.chartHe
23510ight-n.height-o-(this.scrollbar?.options.margin||0)-this.spacing[2]-(this.rangeSelector&&this.extraBottomMargin?this.rangeSelector.getHeight():0)-(e&&"bottom"===e.verticalAlign&&"proximate"!==e.layout&&e.enabled&&!e.floating?s.legendHeight+r(e.margin,10):0)-(this.titleOffset?this.titleOffset[2]:0)),t&&i&&(this.inverted?t.options.left=i.options.left=n.left:t.options.top=i.options.top=n.top,t.setAxisSize(),i.setAxisSize())}}function c(e){!this.navigator&&!this.scroller&&(this.options.navigator.enabled||this.options.scrollbar.enabled)&&(this.scroller=this.navigator=new i(this),r(e.redraw,!0)&&this.redraw(e.animation))}function d(){let e=this.options;(e.navigator.enabled||e.scrollbar.enabled)&&(this.scroller=this.navigator=new i(this))}function u(){let e=this.options,t=e.navigator,i=e.rangeSelector;if((t&&t.enabled||i&&i.enabled)&&(!s&&"x"===this.zooming.type||s&&"x"===this.zooming.pinchType))return!1}function p(e){let t=e.navigator;if(t&&e.xAxis[0]){let i=e.xAxis[0].getExtremes();t.render(i.min,i.max)}}function g(e){let t=e.options.navigator||{},i=e.options.scrollbar||{};!this.navigator&&!this.scroller&&(t.enabled||i.enabled)&&(o(!0,this.options.navigator,t),o(!0,this.options.scrollbar,i),delete e.options.navigator,delete e.options.scrollbar)}return{compose:function(e,s){if(t.pushUnique(a,e)){let t=e.prototype;i=s,t.callbacks.push(p),n(e,"afterAddSeries",l),n(e,"afterSetChartSize",h),n(e,"afterUpdate",c),n(e,"beforeRender",d),n(e,"beforeShowResetZoom",u),n(e,"update",g)}}}}),i(t,"Core/Axis/NavigatorAxisComposition.js",[t["Core/Globals.js"],t["Core/Utilities.js"]],function(e,t){let{isTouchDevice:i}=e,{addEvent:s,correctFloat:n,defined:o,isNumber:r,pick:a}=t;function l(){this.navigatorAxis||(this.navigatorAxis=new c(this))}function h(e){let t;let s=this.chart,n=s.options,r=n.navigator,a=this.navigatorAxis,l=s.zooming.pinchType,h=n.rangeSelector,c=s.zooming.type;if(this.isXAxis&&(r?.enabled||h?.enabled)){if("y"===c&&"zoom"===e.trigger)t=!1;else if(("zoom"===e.trigger&&"xy"===c||i&&"xy"===l)&&this.options.range){let t=a.previousZoom;o(e.min)?a.previousZoom=[this.min,this.max]:t&&(e.min=t[0],e.max=t[1],a.previousZoom=void 0)}}void 0!==t&&e.preventDefault()}class c{static compose(e){e.keepProps.includes("navigatorAxis")||(e.keepProps.push("navigatorAxis"),s(e,"init",l),s(e,"setExtremes",h))}constructor(e){this.axis=e}destroy(){this.axis=void 0}toFixedRange(e,t,i,s){let l=this.axis,h=(l.pointRange||0)/2,c=a(i,l.translate(e,!0,!l.horiz)),d=a(s,l.translate(t,!0,!l.horiz));return o(i)||(c=n(c+h)),o(s)||(d=n(d-h)),r(c)&&r(d)||(c=d=void 0),{min:c,max:d}}}return c}),i(t,"Stock/Navigator/NavigatorDefaults.js",[t["Core/Color/Color.js"],t["Core/Series/SeriesRegistry.js"]],function(e,t){let{parse:i}=e,{seriesTypes:s}=t;return{height:40,margin:25,maskInside:!0,handles:{width:7,borderRadius:0,height:15,symbols:["navigator-handle","navigator-handle"],enabled:!0,lineWidth:1,backgroundColor:"#f2f2f2",borderColor:"#999999"},maskFill:i("#667aff").setOpacity(.3).get(),outlineColor:"#999999",outlineWidth:1,series:{type:void 0===s.areaspline?"line":"areaspline",fillOpacity:.05,lineWidth:1,compare:null,sonification:{enabled:!1},dataGrouping:{approximation:"average",enabled:!0,groupPixelWidth:2,firstAnchor:"firstPoint",anchor:"middle",lastAnchor:"lastPoint",units:[["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,3,4]],["week",[1,2,3]],["month",[1,3,6]],["year",null]]},dataLabels:{enabled:!1,zIndex:2},id:"highcharts-navigator-series",className:"highcharts-navigator-series",lineColor:null,marker:{enabled:!1},threshold:null},xAxis:{className:"highcharts-navigator-xaxis",tickLength:0,lineWidth:0,gridLineColor:"#e6e6e6",id:"navigator-x-axis",gridLineWidth:1,tickPixelInterval:200,labels:{align:"left",style:{color:"#000000",fontSize:"0.7em",opacity:.6,textOutline:"2px contrast"},x:3,y:-4},crosshair:!1},yAxis:{className:"highcharts-navigator-yaxis",gridLineWidth:0,startOnTick:!1,endOnTick:!1,minPadding:.1,id:"navigator-y-axis",maxPadding:.1,labels:{enabled:!1},crosshair:!1,title:{text:null},tickLength:0,tickWidth:0}}}),i(t,"Stock/Navigator/NavigatorSymbols.js",[t["Core/Renderer/SVG/Symbols.js"],t["Core/Utilities.js"]],function(e,t){let{relativeLength:i}=t;return{"navigator-handle":function(t,s,n,o,r={}){let a=r.width?r.width/2:n,l=i(r.borderRadius||0,Math.min(2*a,o));return[["M",-1.5,(o=r.height||o)/2-3.5],["L",-1.5,o/2+4.5],["M",.5,o/2-3.5],["L",.5,o/2+4.5],...e.rect(-a-1,.5,2*a+1,o,{r:l})]}}}),i(t,"Stock/Utilities/StockUtilities.js",[t["Core/Utilities.js"]],function(e){let{defined:t}=e;return{setFixedRange:function(e){let i=this.xAxis[0];t(i.dataMax)&&t(i.dataMin)&&e?this.fixedRange=Math.min(e,i.dataMax-i.dataMin):this.fixedRange=e}}}),i(t,"Stock/Navigator/NavigatorComposition.js",[t["Core/Defaults.js"],t["Core/Globals.js"],t["Core/Axis/NavigatorAxisComposition.js"],t["Stock/Navigator/NavigatorDefaults.js"],t["Stock/Navigator/NavigatorSymbols.js"],t["Core/Renderer/RendererRegistry.js"],t["Stock/Utilities/StockUtilities.js"],t["Core/Utilities.js"]],function(e,t,i,s,n,o,r,a){let{setOptions:l}=e,{composed:h}=t,{getRendererType:c}=o,{setFixedRange:d}=r,{addEvent:u,extend:p,pushUnique:g}=a;function m(){this.chart.navigator&&!this.options.isInternal&&this.chart.navigator.setBaseSeries(null,!1)}return{compose:function(e,t,o){i.compose(t),g(h,"Navigator")&&(e.prototype.setFixedRange=d,p(c().prototype.symbols,n),u(o,"afterUpdate",m),l({navigator:s}))}}}),i(t,"Core/Axis/ScrollbarAxis.js",[t["Core/Globals.js"],t["Core/Utilities.js"]],function(e,t){var i;
23510let{composed:s}=e,{addEvent:n,defined:o,pick:r,pushUnique:a}=t;return function(e){let t;function i(e){let t=r(e.options&&e.options.min,e.min),i=r(e.options&&e.options.max,e.max);return{axisMin:t,axisMax:i,scrollMin:o(e.dataMin)?Math.min(t,e.min,e.dataMin,r(e.threshold,1/0)):t,scrollMax:o(e.dataMax)?Math.max(i,e.max,e.dataMax,r(e.threshold,-1/0)):i}}function l(){let e=this.scrollbar,t=e&&!e.options.opposite,i=this.horiz?2:t?3:1;e&&(this.chart.scrollbarsOffsets=[0,0],this.chart.axisOffset[i]+=e.size+(e.options.margin||0))}function h(){let e=this;e.options&&e.options.scrollbar&&e.options.scrollbar.enabled&&(e.options.scrollbar.vertical=!e.horiz,e.options.startOnTick=e.options.endOnTick=!1,e.scrollbar=new t(e.chart.renderer,e.options.scrollbar,e.chart),n(e.scrollbar,"changed",function(t){let s,n;let{axisMin:r,axisMax:a,scrollMin:l,scrollMax:h}=i(e),c=h-l;if(o(r)&&o(a)){if(e.horiz&&!e.reversed||!e.horiz&&e.reversed?(s=l+c*this.to,n=l+c*this.from):(s=l+c*(1-this.from),n=l+c*(1-this.to)),this.shouldUpdateExtremes(t.DOMType)){let i="mousemove"!==t.DOMType&&"touchmove"!==t.DOMType&&void 0;e.setExtremes(n,s,!0,i,t)}else this.setRange(this.from,this.to)}}))}function c(){let e,t,s;let{scrollMin:n,scrollMax:r}=i(this),a=this.scrollbar,l=this.axisTitleMargin+(this.titleOffset||0),h=this.chart.scrollbarsOffsets,c=this.options.margin||0;if(a&&h){if(this.horiz)this.opposite||(h[1]+=l),a.position(this.left,this.top+this.height+2+h[1]-(this.opposite?c:0),this.width,this.height),this.opposite||(h[1]+=c),e=1;else{let t;this.opposite&&(h[0]+=l),t=a.options.opposite?this.left+this.width+2+h[0]-(this.opposite?0:c):this.opposite?0:c,a.position(t,this.top,this.width,this.height),this.opposite&&(h[0]+=c),e=0}h[e]+=a.size+(a.options.margin||0),isNaN(n)||isNaN(r)||!o(this.min)||!o(this.max)||this.min===this.max?a.setRange(0,1):(t=(this.min-n)/(r-n),s=(this.max-n)/(r-n),this.horiz&&!this.reversed||!this.horiz&&this.reversed?a.setRange(t,s):a.setRange(1-s,1-t))}}e.compose=function(e,i){a(s,"Axis.Scrollbar")&&(t=i,n(e,"afterGetOffset",l),n(e,"afterInit",h),n(e,"afterRender",c))}}(i||(i={})),i}),i(t,"Stock/Scrollbar/ScrollbarDefaults.js",[],function(){return{height:10,barBorderRadius:5,buttonBorderRadius:0,buttonsEnabled:!1,liveRedraw:void 0,margin:void 0,minWidth:6,opposite:!0,step:.2,zIndex:3,barBackgroundColor:"#cccccc",barBorderWidth:0,barBorderColor:"#cccccc",buttonArrowColor:"#333333",buttonBackgroundColor:"#e6e6e6",buttonBorderColor:"#cccccc",buttonBorderWidth:1,rifleColor:"none",trackBackgroundColor:"rgba(255, 255, 255, 0.001)",trackBorderColor:"#cccccc",trackBorderRadius:5,trackBorderWidth:1}}),i(t,"Stock/Scrollbar/Scrollbar.js",[t["Core/Defaults.js"],t["Core/Globals.js"],t["Core/Axis/ScrollbarAxis.js"],t["Stock/Scrollbar/ScrollbarDefaults.js"],t["Core/Utilities.js"]],function(e,t,i,s,n){let{defaultOptions:o}=e,{addEvent:r,correctFloat:a,crisp:l,defined:h,destroyObjectProperties:c,fireEvent:d,merge:u,pick:p,removeEvent:g}=n;class m{static compose(e){i.compose(e,m)}static swapXY(e,t){return t&&e.forEach(e=>{let t;let i=e.length;for(let s=0;s<i;s+=2)"number"==typeof(t=e[s+1])&&(e[s+1]=e[s+2],e[s+2]=t)}),e}constructor(e,t,i){this._events=[],this.chartX=0,this.chartY=0,this.from=0,this.scrollbarButtons=[],this.scrollbarLeft=0,this.scrollbarStrokeWidth=1,this.scrollbarTop=0,this.size=0,this.to=0,this.trackBorderWidth=1,this.x=0,this.y=0,this.init(e,t,i)}addEvents(){let e=this.options.inverted?[1,0]:[0,1],t=this.scrollbarButtons,i=this.scrollbarGroup.element,s=this.track.element,n=this.mouseDownHandler.bind(this),o=this.mouseMoveHandler.bind(this),a=this.mouseUpHandler.bind(this),l=[[t[e[0]].element,"click",this.buttonToMinClick.bind(this)],[t[e[1]].element,"click",this.buttonToMaxClick.bind(this)],[s,"click",this.trackClick.bind(this)],[i,"mousedown",n],[i.ownerDocument,"mousemove",o],[i.ownerDocument,"mouseup",a],[i,"touchstart",n],[i.ownerDocument,"touchmove",o],[i.ownerDocument,"touchend",a]];l.forEach(function(e){r.apply(null,e)}),this._events=l}buttonToMaxClick(e){let t=(this.to-this.from)*p(this.options.step,.2);this.updatePosition(this.from+t,this.to+t),d(this,"changed",{from:this.from,to:this.to,trigger:"scrollbar",DOMEvent:e})}buttonToMinClick(e){let t=a(this.to-this.from)*p(this.options.step,.2);this.updatePosition(a(this.from-t),a(this.to-t)),d(this,"changed",{from:this.from,to:this.to,trigger:"scrollbar",DOMEvent:e})}cursorToScrollbarPosition(e){let t=this.options,i=t.minWidth>this.calculatedWidth?t.minWidth:0;return{chartX:(e.chartX-this.x-this.xOffset)/(this.barWidth-i),chartY:(e.chartY-this.y-this.yOffset)/(this.barWidth-i)}}destroy(){let e=this,t=e.chart.scroller;e.removeEvents(),["track","scrollbarRifles","scrollbar","scrollbarGroup","group"].forEach(function(t){e[t]&&e[t].destroy&&(e[t]=e[t].destroy())}),t&&e===t.scrollbar&&(t.scrollbar=null,c(t.scrollbarButtons))}drawScrollbarButton(e){let t=this.renderer,i=this.scrollbarButtons,s=this.options,n=this.size,o=t.g().add(this.group);if(i.push(o),s.buttonsEnabled){let r=t.rect().addClass("highcharts-scrollbar-button").add(o);this.chart.styledMode||r.attr({stroke:s.buttonBorderColor,"stroke-width":s.buttonBorderWidth,fill:s.buttonBackgroun
vendor: 5,144 bytes, line 23510
23510dColor}),r.attr(r.crisp({x:-.5,y:-.5,width:n,height:n,r:s.buttonBorderRadius},r.strokeWidth()));let a=t.path(m.swapXY([["M",n/2+(e?-1:1),n/2-3],["L",n/2+(e?-1:1),n/2+3],["L",n/2+(e?2:-2),n/2]],s.vertical)).addClass("highcharts-scrollbar-arrow").add(i[e]);this.chart.styledMode||a.attr({fill:s.buttonArrowColor})}}init(e,t,i){this.scrollbarButtons=[],this.renderer=e,this.userOptions=t,this.options=u(s,o.scrollbar,t),this.options.margin=p(this.options.margin,10),this.chart=i,this.size=p(this.options.size,this.options.height),t.enabled&&(this.render(),this.addEvents())}mouseDownHandler(e){let t=this.chart.pointer?.normalize(e)||e,i=this.cursorToScrollbarPosition(t);this.chartX=i.chartX,this.chartY=i.chartY,this.initPositions=[this.from,this.to],this.grabbedCenter=!0}mouseMoveHandler(e){let t;let i=this.chart.pointer?.normalize(e)||e,s=this.options.vertical?"chartY":"chartX",n=this.initPositions||[];this.grabbedCenter&&(!e.touches||0!==e.touches[0][s])&&(t=this.cursorToScrollbarPosition(i)[s]-this[s],this.hasDragged=!0,this.updatePosition(n[0]+t,n[1]+t),this.hasDragged&&d(this,"changed",{from:this.from,to:this.to,trigger:"scrollbar",DOMType:e.type,DOMEvent:e}))}mouseUpHandler(e){this.hasDragged&&d(this,"changed",{from:this.from,to:this.to,trigger:"scrollbar",DOMType:e.type,DOMEvent:e}),this.grabbedCenter=this.hasDragged=this.chartX=this.chartY=null}position(e,t,i,s){let{buttonsEnabled:n,margin:o=0,vertical:r}=this.options,a=this.rendered?"animate":"attr",l=s,h=0;this.group.show(),this.x=e,this.y=t+this.trackBorderWidth,this.width=i,this.height=s,this.xOffset=l,this.yOffset=h,r?(this.width=this.yOffset=i=h=this.size,this.xOffset=l=0,this.yOffset=h=n?this.size:0,this.barWidth=s-(n?2*i:0),this.x=e+=o):(this.height=s=this.size,this.xOffset=l=n?this.size:0,this.barWidth=i-(n?2*s:0),this.y=this.y+o),this.group[a]({translateX:e,translateY:this.y}),this.track[a]({width:i,height:s}),this.scrollbarButtons[1][a]({translateX:r?0:i-l,translateY:r?s-h:0})}removeEvents(){this._events.forEach(function(e){g.apply(null,e)}),this._events.length=0}render(){let e=this.renderer,t=this.options,i=this.size,s=this.chart.styledMode,n=e.g("scrollbar").attr({zIndex:t.zIndex}).hide().add();this.group=n,this.track=e.rect().addClass("highcharts-scrollbar-track").attr({r:t.trackBorderRadius||0,height:i,width:i}).add(n),s||this.track.attr({fill:t.trackBackgroundColor,stroke:t.trackBorderColor,"stroke-width":t.trackBorderWidth});let o=this.trackBorderWidth=this.track.strokeWidth();this.track.attr({x:-l(0,o),y:-l(0,o)}),this.scrollbarGroup=e.g().add(n),this.scrollbar=e.rect().addClass("highcharts-scrollbar-thumb").attr({height:i-o,width:i-o,r:t.barBorderRadius||0}).add(this.scrollbarGroup),this.scrollbarRifles=e.path(m.swapXY([["M",-3,i/4],["L",-3,2*i/3],["M",0,i/4],["L",0,2*i/3],["M",3,i/4],["L",3,2*i/3]],t.vertical)).addClass("highcharts-scrollbar-rifles").add(this.scrollbarGroup),s||(this.scrollbar.attr({fill:t.barBackgroundColor,stroke:t.barBorderColor,"stroke-width":t.barBorderWidth}),this.scrollbarRifles.attr({stroke:t.rifleColor,"stroke-width":1})),this.scrollbarStrokeWidth=this.scrollbar.strokeWidth(),this.scrollbarGroup.translate(-l(0,this.scrollbarStrokeWidth),-l(0,this.scrollbarStrokeWidth)),this.drawScrollbarButton(0),this.drawScrollbarButton(1)}setRange(e,t){let i,s;let n=this.options,o=n.vertical,r=n.minWidth,l=this.barWidth,c=!this.rendered||this.hasDragged||this.chart.navigator&&this.chart.navigator.hasDragged?"attr":"animate";if(!h(l))return;let d=l*Math.min(t,1);i=Math.ceil(l*(e=Math.max(e,0))),this.calculatedWidth=s=a(d-i),s<r&&(i=(l-r+s)*e,s=r);let u=Math.floor(i+this.xOffset+this.yOffset),p=s/2-.5;this.from=e,this.to=t,o?(this.scrollbarGroup[c]({translateY:u}),this.scrollbar[c]({height:s}),this.scrollbarRifles[c]({translateY:p}),this.scrollbarTop=u,this.scrollbarLeft=0):(this.scrollbarGroup[c]({translateX:u}),this.scrollbar[c]({width:s}),this.scrollbarRifles[c]({translateX:p}),this.scrollbarLeft=u,this.scrollbarTop=0),s<=12?this.scrollbarRifles.hide():this.scrollbarRifles.show(),!1===n.showFull&&(e<=0&&t>=1?this.group.hide():this.group.show()),this.rendered=!0}shouldUpdateExtremes(e){return p(this.options.liveRedraw,t.svg&&!t.isTouchDevice&&!this.chart.boosted)||"mouseup"===e||"touchend"===e||!h(e)}trackClick(e){let t=this.chart.pointer?.normalize(e)||e,i=this.to-this.from,s=this.y+this.scrollbarTop,n=this.x+this.scrollbarLeft;this.options.vertical&&t.chartY>s||!this.options.vertical&&t.chartX>n?this.updatePosition(this.from+i,this.to+i):this.updatePosition(this.from-i,this.to-i),d(this,"changed",{from:this.from,to:this.to,trigger:"scrollbar",DOMEvent:e})}update(e){this.destroy(),this.init(this.chart.renderer,u(!0,this.options,e),this.chart)}updatePosition(e,t){t>1&&(e=a(1-a(t-e)),t=1),e<0&&(t=a(t-e),e=0),this.from=e,this.to=t}}return m.defaultOptions=s,o.scrollbar=u(!0,m.defaultOptions,o.scrollbar),m}),i(t,"Stock/Navigator/Navigator.js",[t["Core/Axis/Axis.js"],t["Stock/Navigator/ChartNavigatorComposition.js"],t["Core/Defaults.js"],t["Core/Globals.js"],t["Core/Axis/NavigatorAxisComposition.js"],t["Stock/Navigator/NavigatorComposition.js"],t["Stock/Scrollbar/Scrollbar.
23510js"],t["Core/Utilities.js"]],function(e,t,i,s,n,o,r,a){let{defaultOptions:l}=i,{isTouchDevice:h}=s,{addEvent:c,clamp:d,correctFloat:u,defined:p,destroyObjectProperties:g,erase:m,extend:b,find:y,fireEvent:f,isArray:x,isNumber:v,merge:A,pick:C,removeEvent:w,splat:E}=a;function T(e,...t){let i=[].filter.call(t,v);if(i.length)return Math[e].apply(0,i)}class M{static compose(e,i,s){t.compose(e,M),o.compose(e,i,s)}constructor(e){this.scrollbarHeight=0,this.init(e)}drawHandle(e,t,i,s){let n=this.navigatorOptions.handles.height;this.handles[t][s](i?{translateX:Math.round(this.left+this.height/2),translateY:Math.round(this.top+parseInt(e,10)+.5-n)}:{translateX:Math.round(this.left+parseInt(e,10)),translateY:Math.round(this.top+this.height/2-n/2-1)})}drawOutline(e,t,i,s){let n=this.navigatorOptions.maskInside,o=this.outline.strokeWidth(),r=o/2,a=o%2/2,l=this.scrollButtonSize,h=this.size,c=this.top,d=this.height,u=c-r,p=c+d,g=this.left,m,b;i?(m=c+t+a,t=c+e+a,b=[["M",g+d,c-l-a],["L",g+d,m],["L",g,m],["M",g,t],["L",g+d,t],["L",g+d,c+h+l]],n&&b.push(["M",g+d,m-r],["L",g+d,t+r])):(g-=l,e+=g+l-a,t+=g+l-a,b=[["M",g,u],["L",e,u],["L",e,p],["M",t,p],["L",t,u],["L",g+h+2*l,c+r]],n&&b.push(["M",e-r,u],["L",t+r,u])),this.outline[s]({d:b})}drawMasks(e,t,i,s){let n,o,r,a;let l=this.left,h=this.top,c=this.height;i?(r=[l,l,l],a=[h,h+e,h+t],o=[c,c,c],n=[e,t-e,this.size-t]):(r=[l,l+e,l+t],a=[h,h,h],o=[e,t-e,this.size-t],n=[c,c,c]),this.shades.forEach((e,t)=>{e[s]({x:r[t],y:a[t],width:o[t],height:n[t]})})}renderElements(){let e=this,t=e.navigatorOptions,i=t.maskInside,s=e.chart,n=s.inverted,o=s.renderer,r={cursor:n?"ns-resize":"ew-resize"},a=e.navigatorGroup=o.g("navigator").attr({zIndex:8,visibility:"hidden"}).add();if([!i,i,!i].forEach((i,n)=>{let l=o.rect().addClass("highcharts-navigator-mask"+(1===n?"-inside":"-outside")).add(a);s.styledMode||(l.attr({fill:i?t.maskFill:"rgba(0,0,0,0)"}),1===n&&l.css(r)),e.shades[n]=l}),e.outline=o.path().addClass("highcharts-navigator-outline").add(a),s.styledMode||e.outline.attr({"stroke-width":t.outlineWidth,stroke:t.outlineColor}),t.handles&&t.handles.enabled){let i=t.handles,{height:n,width:l}=i;[0,1].forEach(t=>{e.handles[t]=o.symbol(i.symbols[t],-l/2-1,0,l,n,i),s.inverted&&e.handles[t].attr({rotation:90,rotationOriginX:Math.floor(-l/2),rotationOriginY:(n+l)/2}),e.handles[t].attr({zIndex:7-t}).addClass("highcharts-navigator-handle highcharts-navigator-handle-"+["left","right"][t]).add(a),s.styledMode||e.handles[t].attr({fill:i.backgroundColor,stroke:i.borderColor,"stroke-width":i.lineWidth}).css(r)})}}update(e){(this.series||[]).forEach(e=>{e.baseSeries&&delete e.baseSeries.navigatorSeries}),this.destroy(),A(!0,this.chart.options.navigator,e),this.init(this.chart)}render(e,t,i,s){let n=this.chart,o=this.xAxis,r=o.pointRange||0,a=o.navigatorAxis.fake?n.xAxis[0]:o,l=this.navigatorEnabled,h=this.rendered,c=n.inverted,g=n.xAxis[0].minRange,m=n.xAxis[0].options.maxRange,b=this.scrollButtonSize,y,x,A,w=this.scrollbarHeight,E,T;if(this.hasDragged&&!p(i))return;if(e=u(e-r/2),t=u(t+r/2),!v(e)||!v(t)){if(!h)return;i=0,s=C(o.width,a.width)}this.left=C(o.left,n.plotLeft+b+(c?n.plotWidth:0));let M=this.size=E=C(o.len,(c?n.plotHeight:n.plotWidth)-2*b);y=c?w:E+2*b,i=C(i,o.toPixels(e,!0)),s=C(s,o.toPixels(t,!0)),v(i)&&Math.abs(i)!==1/0||(i=0,s=y);let S=o.toValue(i,!0),k=o.toValue(s,!0),P=Math.abs(u(k-S));P<g?this.grabbedLeft?i=o.toPixels(k-g-r,!0):this.grabbedRight&&(s=o.toPixels(S+g+r,!0)):p(m)&&u(P-r)>m&&(this.grabbedLeft?i=o.toPixels(k-m-r,!0):this.grabbedRight&&(s=o.toPixels(S+m+r,!0))),this.zoomedMax=d(Math.max(i,s),0,M),this.zoomedMin=d(this.fixedWidth?this.zoomedMax-this.fixedWidth:Math.min(i,s),0,M),this.range=this.zoomedMax-this.zoomedMin,M=Math.round(this.zoomedMax);let D=Math.round(this.zoomedMin);l&&(this.navigatorGroup.attr({visibility:"inherit"}),T=h&&!this.hasDragged?"animate":"attr",this.drawMasks(D,M,c,T),this.drawOutline(D,M,c,T),this.navigatorOptions.handles.enabled&&(this.drawHandle(D,0,c,T),this.drawHandle(M,1,c,T))),this.scrollbar&&(c?(A=this.top-b,x=this.left-w+(l||!a.opposite?0:(a.titleOffset||0)+a.axisTitleMargin),w=E+2*b):(A=this.top+(l?this.height:-w),x=this.left-b),this.scrollbar.position(x,A,y,w),this.scrollbar.setRange(this.zoomedMin/(E||1),this.zoomedMax/(E||1))),this.rendered=!0,f(this,"afterRe
23510nder")}addMouseEvents(){let e=this,t=e.chart,i=t.container,s=[],n,o;e.mouseMoveHandler=n=function(t){e.onMouseMove(t)},e.mouseUpHandler=o=function(t){e.onMouseUp(t)},(s=e.getPartsEvents("mousedown")).push(c(t.renderTo,"mousemove",n),c(i.ownerDocument,"mouseup",o),c(t.renderTo,"touchmove",n),c(i.ownerDocument,"touchend",o)),s.concat(e.getPartsEvents("touchstart")),e.eventsToUnbind=s,e.series&&e.series[0]&&s.push(c(e.series[0].xAxis,"foundExtremes",function(){t.navigator.modifyNavigatorAxisExtremes()}))}getPartsEvents(e){let t=this,i=[];return["shades","handles"].forEach(function(s){t[s].forEach(function(n,o){i.push(c(n.element,e,function(e){t[s+"Mousedown"](e,o)}))})}),i}shadesMousedown(e,t){e=this.chart.pointer?.normalize(e)||e;let i=this.chart,s=this.xAxis,n=this.zoomedMin,o=this.size,r=this.range,a=this.left,l=e.chartX,h,c,d,u;i.inverted&&(l=e.chartY,a=this.top),1===t?(this.grabbedCenter=l,this.fixedWidth=r,this.dragOffset=l-n):(u=l-a-r/2,0===t?u=Math.max(0,u):2===t&&u+r>=o&&(u=o-r,this.reversedExtremes?(u-=r,c=this.getUnionExtremes().dataMin):h=this.getUnionExtremes().dataMax),u!==n&&(this.fixedWidth=r,p((d=s.navigatorAxis.toFixedRange(u,u+r,c,h)).min)&&f(this,"setRange",{min:Math.min(d.min,d.max),max:Math.max(d.min,d.max),redraw:!0,eventArguments:{trigger:"navigator"}})))}handlesMousedown(e,t){e=this.chart.pointer?.normalize(e)||e;let i=this.chart,s=i.xAxis[0],n=this.reversedExtremes;0===t?(this.grabbedLeft=!0,this.otherHandlePos=this.zoomedMax,this.fixedExtreme=n?s.min:s.max):(this.grabbedRight=!0,this.otherHandlePos=this.zoomedMin,this.fixedExtreme=n?s.max:s.min),i.setFixedRange(void 0)}onMouseMove(e){let t=this,i=t.chart,s=t.navigatorSize,n=t.range,o=t.dragOffset,r=i.inverted,a=t.left,l;(!e.touches||0!==e.touches[0].pageX)&&(l=(e=i.pointer?.normalize(e)||e).chartX,r&&(a=t.top,l=e.chartY),t.grabbedLeft?(t.hasDragged=!0,t.render(0,0,l-a,t.otherHandlePos)):t.grabbedRight?(t.hasDragged=!0,t.render(0,0,t.otherHandlePos,l-a)):t.grabbedCenter&&(t.hasDragged=!0,l<o?l=o:l>s+o-n&&(l=s+o-n),t.render(0,0,l-o,l-o+n)),t.hasDragged&&t.scrollbar&&C(t.scrollbar.options.liveRedraw,!h&&!this.chart.boosted)&&(e.DOMType=e.type,setTimeout(function(){t.onMouseUp(e)},0)))}onMouseUp(e){let t,i,s,n,o,r;let a=this.chart,l=this.xAxis,h=this.scrollbar,c=e.DOMEvent||e,d=a.inverted,u=this.rendered&&!this.hasDragged?"animate":"attr";(this.hasDragged&&(!h||!h.hasDragged)||"scrollbar"===e.trigger)&&(s=this.getUnionExtremes(),this.zoomedMin===this.otherHandlePos?n=this.fixedExtreme:this.zoomedMax===this.otherHandlePos&&(o=this.fixedExtreme),this.zoomedMax===this.size&&(o=this.reversedExtremes?s.dataMin:s.dataMax),0===this.zoomedMin&&(n=this.reversedExtremes?s.dataMax:s.dataMin),p((r=l.navigatorAxis.toFixedRange(this.zoomedMin,this.zoomedMax,n,o)).min)&&f(this,"setRange",{min:Math.min(r.min,r.max),max:Math.max(r.min,r.max),redraw:!0,animation:!this.hasDragged&&null,eventArguments:{trigger:"navigator",triggerOp:"navigator-drag",DOMEvent:c}})),"mousemove"!==e.DOMType&&"touchmove"!==e.DOMType&&(this.grabbedLeft=this.grabbedRight=this.grabbedCenter=this.fixedWidth=this.fixedExtreme=this.otherHandlePos=this.hasDragged=this.dragOffset=null),this.navigatorEnabled&&v(this.zoomedMin)&&v(this.zoomedMax)&&(i=Math.round(this.zoomedMin),t=Math.round(this.zoomedMax),this.shades&&this.drawMasks(i,t,d,u),this.outline&&this.drawOutline(i,t,d,u),this.navigatorOptions.handles.enabled&&Object.keys(this.handles).length===this.handles.length&&(this.drawHandle(i,0,d,u),this.drawHandle(t,1,d,u)))}removeEvents(){this.eventsToUnbind&&(this.eventsToUnbind.forEach(function(e){e()}),this.eventsToUnbind=void 0),this.removeBaseSeriesEvents()}removeBaseSeriesEvents(){let e=this.baseSeries||[];this.navigatorEnabled&&e[0]&&(!1!==this.navigatorOptions.adaptToUpdatedData&&e.forEach(function(e){w(e,"updatedData",this.updatedDataHandler)},this),e[0].xAxis&&w(e[0].xAxis,"foundExtremes",this.modifyBaseAxisExtremes))}init(t){let i=t.options,s=i.navigator||{},o=s.enabled,a=i.scrollbar||{},l=a.enabled,h=o&&s.height||0,d=l&&a.height||0,u=a.buttonsEnabled&&d||0;this.handles=[],this.shades=[],this.chart=t,this.setBaseSeries(),this.height=h,this.scrollbarHeight=d,this.scrollButtonSize=u,this.scrollbarEnabled=l,this.navigatorEnabled=o,this.navigatorOptions=s,this.scrollbarOptions=a,this.opposite=C(s.opposite,!!(!o&&t.inverted));let p=this,g=p.baseSeries,m=t.xAxis.length,b=t.yAxis.length,y=g&&g[0]&&g[0].xAxis||t.xAxis[0]||{options:{}};if(t.isDirtyBox=!0,p.navigatorEnabled?(p.xAxis=new e(t,A({breaks:y.options.breaks,ordinal:y.options.ordinal,overscroll:y.options.overscroll},s.xAxis,{type:"datetime",index:m,isInternal:!0,offset:0,keepOrdinalPadding:!0,startOnTick:!1,endOnTick:!1,minPadding:0,maxPadding:0,zoomEnabled:!1},t.inverted?{offsets:[u,0,-u,0],width:h}:{offsets:[0,-u,0,u],height:h}),"xAxis"),p.yAxis=new e(t,A(s.yAxis,{alignTicks:!1,offset:0,index:b,isInternal:!0,reversed:C(s.yAxis&&s.yAxis.reversed,t.yAxis[0]&&t.yAxis[0].reversed,!1),zoomEnabled:!1},t.inverted?{width:h}:{height:h}),"yAxis"),g||s.series.data?p.updateNavigatorSeries(!1):0===t.series.length&&(p.unbindRedraw=c(t,"beforeRedraw",function(){t.series.length>0&&!p.series&&(p.setBaseSeries(),p.unbindRedraw())})),p.reversedExtremes=t.inverted&&!p.xAxis.reversed||!t.inverted&&p.xAxis.reversed,p.renderElements(),p.addMouseEvents()):(p.xAxis={chart:t,navigatorAxis:{fake:!0},translate:function(e,i){let s=t.xAxis[0],n=s.getExtremes(),o=s.len-2*u,r=T("min",s.options.min,n.dataMin),a=T("max",s.options.max,n.dataMax)-r;return i?e*a/o+r:o*(e-r)/a},toPixels:function(e){return this.translate(e)},toValue:function(e){return this.translate(e,!0)}},p.xAxis.navigatorAxis.axis=p.xAxis,p.xAxis.navigatorAxis.toFixedRange=n.prototype.toFixedRange.bind(p.xAxis.navigatorAxis)),t.options.scrollbar.enabled){let e=A(t.options.scrollbar,{vertical:t.inverted});!v(e.margin)&&p.navigatorEnabled&&(e.margin=t.inverted?-3:3),t.scrollbar=p.scrollbar=new r(t.renderer,e,t),c(p.scrollbar,"changed",function(e){let t=p.size,i=t*this.to,s=t*this.from;p.hasDragged=p.scrollbar.hasDragged,p.render(0,0,s,i),this.shouldUpdateExtremes(e.DOMType)&&setTimeout(function(){p.onMouseUp(e)})})}p.addBaseSeriesEvents(),p.addChartEvents()}getUnionExtremes(e){let t;let i=this.chart.xAxis[0],s=this.xAxis,n=s.options,o=i.options;return e&&null===i.dataMin||(t={dataMin:C(n&&n.min,T("min",o.min,i.dataMin,s.dataMin,s.min)),dataMax:C(n&&n.max,T("max",o.max,i.dataMax,s.dataMax,s.max))}),t}setBaseSeries(e,t){let i=this.chart,s=this.baseSeries=[];e=e||i.options&&i.options.navigator.baseSeries||(i.series.length?y(i.series,e=>
23510!e.options.isInternal).index:0),(i.series||[]).forEach((t,i)=>{!t.options.isInternal&&(t.options.showInNavigator||(i===e||t.options.id===e)&&!1!==t.options.showInNavigator)&&s.push(t)}),this.xAxis&&!this.xAxis.navigatorAxis.fake&&this.updateNavigatorSeries(!0,t)}updateNavigatorSeries(e,t){let i=this,s=i.chart,n=i.baseSeries,o={enableMouseTracking:!1,index:null,linkedTo:null,group:"nav",padXAxis:!1,xAxis:this.navigatorOptions.xAxis?.id,yAxis:this.navigatorOptions.yAxis?.id,showInLegend:!1,stacking:void 0,isInternal:!0,states:{inactive:{opacity:1}}},r=i.series=(i.series||[]).filter(e=>{let t=e.baseSeries;return!(0>n.indexOf(t))||(t&&(w(t,"updatedData",i.updatedDataHandler),delete t.navigatorSeries),e.chart&&e.destroy(),!1)}),a,h,c=i.navigatorOptions.series,d;n&&n.length&&n.forEach(e=>{let u=e.navigatorSeries,p=b({color:e.color,visible:e.visible},x(c)?l.navigator.series:c);if(u&&!1===i.navigatorOptions.adaptToUpdatedData)return;o.name="Navigator "+n.length,d=(a=e.options||{}).navigatorOptions||{},p.dataLabels=E(p.dataLabels),(h=A(a,o,p,d)).pointRange=C(p.pointRange,d.pointRange,l.plotOptions[h.type||"line"].pointRange);let g=d.data||p.data;i.hasNavigatorData=i.hasNavigatorData||!!g,h.data=g||a.data&&a.data.slice(0),u&&u.options?u.update(h,t):(e.navigatorSeries=s.initSeries(h),s.setSortedData(),e.navigatorSeries.baseSeries=e,r.push(e.navigatorSeries))}),(c.data&&!(n&&n.length)||x(c))&&(i.hasNavigatorData=!1,(c=E(c)).forEach((e,t)=>{o.name="Navigator "+(r.length+1),(h=A(l.navigator.series,{color:s.series[t]&&!s.series[t].options.isInternal&&s.series[t].color||s.options.colors[t]||s.options.colors[0]},o,e)).data=e.data,h.data&&(i.hasNavigatorData=!0,r.push(s.initSeries(h)))})),e&&this.addBaseSeriesEvents()}addBaseSeriesEvents(){let e=this,t=e.baseSeries||[];t[0]&&t[0].xAxis&&t[0].eventsToUnbind.push(c(t[0].xAxis,"foundExtremes",this.modifyBaseAxisExtremes)),t.forEach(t=>{t.eventsToUnbind.push(c(t,"show",function(){this.navigatorSeries&&this.navigatorSeries.setVisible(!0,!1)})),t.eventsToUnbind.push(c(t,"hide",function(){this.navigatorSeries&&this.navigatorSeries.setVisible(!1,!1)})),!1!==this.navigatorOptions.adaptToUpdatedData&&t.xAxis&&t.eventsToUnbind.push(c(t,"updatedData",this.updatedDataHandler)),t.eventsToUnbind.push(c(t,"remove",function(){this.navigatorSeries&&(m(e.series,this.navigatorSeries),p(this.navigatorSeries.options)&&this.navigatorSeries.remove(!1),delete this.navigatorSeries)}))})}getBaseSeriesMin(e){return this.baseSeries.reduce(function(e,t){return Math.min(e,t.xData&&t.xData.length?t.xData[0]:e)},e)}modifyNavigatorAxisExtremes(){let e=this.xAxis;if(void 0!==e.getExtremes){let t=this.getUnionExtremes(!0);t&&(t.dataMin!==e.min||t.dataMax!==e.max)&&(e.min=t.dataMin,e.max=t.dataMax)}}modifyBaseAxisExtremes(){let e,t;let i=this.chart.navigator,s=this.getExtremes(),n=s.min,o=s.max,r=s.dataMin,a=s.dataMax,l=o-n,h=i.stickToMin,c=i.stickToMax,d=C(this.ordinal?.convertOverscroll(this.options.overscroll),0),u=i.series&&i.series[0],p=!!this.setExtremes;!(this.eventArgs&&"rangeSelectorButton"===this.eventArgs.trigger)&&(h&&(e=(t=r)+l),c&&(e=a+d,h||(t=Math.max(r,e-l,i.getBaseSeriesMin(u&&u.xData?u.xData[0]:-Number.MAX_VALUE)))),p&&(h||c)&&v(t)&&(this.min=this.userMin=t,this.max=this.userMax=e)),i.stickToMin=i.stickToMax=null}updatedDataHandler(){let e=this.chart.navigator,t=this.navigatorSeries,i=e.reversedExtremes?0===Math.round(e.zoomedMin):Math.round(e.zoomedMax)>=Math.round(e.size);e.stickToMax=C(this.chart.options.navigator&&this.chart.options.navigator.stickToMax,i),e.stickToMin=e.shouldStickToMin(this,e),t&&!e.hasNavigatorData&&(t.options.pointStart=this.xData[0],t.setData(this.options.data,!1,null,!1))}shouldStickToMin(e,t){let i=t.getBaseSeriesMin(e.xData[0]),s=e.xAxis,n=s.max,o=s.min,r=s.options.range;return!!(v(n)&&v(o))&&(r&&n-i>0?n-i<r:o<=i)}addChartEvents(){this.eventsToUnbind||(this.eventsToUnbind=[]),this.eventsToUnbind.push(c(this.chart,"redraw",function(){let e=this.navigator,t=e&&(e.baseSeries&&e.baseSeries[0]&&e.baseSeries[0].xAxis||this.xAxis[0]);t&&e.render(t.min,t.max)}),c(this.chart,"getMargins",function(){let e=this.navigator,t=e.opposite?"plotTop":"marginBottom";this.inverted&&(t=e.opposite?"marginRight":"plotLeft"),this[t]=(this[t]||0)+(e.navigatorEnabled||!this.inverted?e.height+e.scrollbarHeight:0)+e.navigatorOptions.margin}),c(M,"setRange",function(e){this.chart.xAxis[0].setExtremes(e.min,e.max,e.redraw,e.animation,e.eventArguments)}))}destroy(){this.removeEvents(),this.xAxis&&(m(this.chart.xAxis,this.xAxis),m(this.chart.axes,this.xAxis)),this.yAxis&&(m(this.chart.yAxis,this.yAxis),m(this.chart.axes,this.yAxis)),(this.series||[]).forEac
23510h(e=>{e.destroy&&e.destroy()}),["series","xAxis","yAxis","shades","outline","scrollbarTrack","scrollbarRifles","scrollbarGroup","scrollbar","navigatorGroup","rendered"].forEach(e=>{this[e]&&this[e].destroy&&this[e].destroy(),this[e]=null}),[this.handles].forEach(e=>{g(e)})}}return M}),i(t,"Accessibility/Components/NavigatorComponent.js",[t["Accessibility/AccessibilityComponent.js"],t["Accessibility/Utils/Announcer.js"],t["Accessibility/KeyboardNavigationHandler.js"],t["Stock/Navigator/Navigator.js"],t["Core/Animation/AnimationUtilities.js"],t["Core/Templating.js"],t["Core/Utilities.js"],t["Accessibility/Utils/HTMLUtilities.js"],t["Accessibility/Utils/ChartUtilities.js"]],function(e,t,i,s,n,o,r,a,l){let{animObject:h}=n,{format:c}=o,{clamp:d,pick:u,syncTimeout:p}=r,{getFakeMouseEvent:g}=a,{getAxisRangeDescription:m,fireEventOnWrappedOrUnwrappedElement:b}=l;return class extends e{init(){let e=this.chart,i=this;this.announcer=new t(e,"polite"),this.addEvent(s,"afterRender",function(){this.chart===i.chart&&this.chart.renderer&&p(()=>{i.proxyProvider.updateGroupProxyElementPositions("navigator"),i.updateHandleValues()},h(u(this.chart.renderer.globalAnimation,!0)).duration)})}onChartUpdate(){let e=this.chart,t=e.options;if(t.navigator.accessibility?.enabled){let i=t.accessibility.landmarkVerbosity,s=t.lang.accessibility?.navigator.groupLabel;this.proxyProvider.removeGroup("navigator"),this.proxyProvider.addGroup("navigator","div",{role:"all"===i?"region":"group","aria-label":c(s,{chart:e},e)});let n=t.lang.accessibility?.navigator.handleLabel;[0,1].forEach(t=>{let i=this.getHandleByIx(t);if(i){let s=this.proxyProvider.addProxyElement("navigator",{click:i},"input",{type:"range","aria-label":c(n,{handleIx:t,chart:e},e)});this[t?"maxHandleProxy":"minHandleProxy"]=s.innerElement,s.innerElement.style.pointerEvents="none",s.innerElement.oninput=()=>this.updateNavigator()}}),this.updateHandleValues()}else this.proxyProvider.removeGroup("navigator")}getNavigatorHandleNavigation(e){let t=this,s=this.chart,n=e?this.maxHandleProxy:this.minHandleProxy,o=this.keyCodes;return new i(s,{keyCodeMap:[[[o.left,o.right,o.up,o.down],function(i){if(n){let r=i===o.left||i===o.up?-1:1;n.value=""+d(parseFloat(n.value)+r,0,100),t.updateNavigator(()=>{let i=t.getHandleByIx(e);i&&s.setFocusToElement(i,n)})}return this.response.success}]],init:()=>{s.setFocusToElement(this.getHandleByIx(e),n)},validate:()=>!!(this.getHandleByIx(e)&&n&&s.options.navigator.accessibility?.enabled)})}getKeyboardNavigation(){return[this.getNavigatorHandleNavigation(0),this.getNavigatorHandleNavigation(1)]}destroy(){this.updateNavigatorThrottleTimer&&clearTimeout(this.updateNavigatorThrottleTimer),this.proxyProvider.removeGroup("navigator"),this.announcer&&this.announcer.destroy()}updateHandleValues(){let e=this.chart.navigator;if(e&&this.minHandleProxy&&this.maxHandleProxy){let t=e.size;this.minHandleProxy.value=""+Math.round(e.zoomedMin/t*100),this.maxHandleProxy.value=""+Math.round(e.zoomedMax/t*100)}}getHandleByIx(e){let t=this.chart.navigator;return t&&t.handles&&t.handles[e]}updateNavigator(e){this.updateNavigatorThrottleTimer&&clearTimeout(this.updateNavigatorThrottleTimer),this.updateNavigatorThrottleTimer=setTimeout((e=>{let t=this.chart,{navigator:i,pointer:s}=t;if(i&&s&&this.minHandleProxy&&this.maxHandleProxy){let n=s.getChartPosition(),o=parseFloat(this.minHandleProxy.value)/100*i.size,r=parseFloat(this.maxHandleProxy.value)/100*i.size;[[0,"mousedown",i.zoomedMin],[0,"mousemove",o],[0,"mouseup",o],[1,"mousedown",i.zoomedMax],[1,"mousemove",r],[1,"mouseup",r]].forEach(([e,t,s])=>{let o=this.getHandleByIx(e)?.element;o&&b(o,g(t,{x:n.left+i.left+s,y:n.top+i.top},o))}),e&&e();let a=t.options.lang.accessibility?.navigator.changeAnnouncement,l=m(t.xAxis[0]);this.announcer.announce(c(a,{axisRangeDescription:l,chart:t},t))}}).bind(this,e),20)}}}),i(t,"Accessibility/Components/SeriesComponent/SeriesDescriber.js",[t["Accessibility/Components/AnnotationsA11y.js"],t["Accessibility/Utils/ChartUtilities.js"],t["Core/Templating.js"],t["Accessibility/Utils/HTMLUtilities.js"],t["Core/Utilities.js"]],function(e,t,i,s,n){let{getPointAnnotationTexts:o}=e,{getAxisDescription:r,getSeriesFirstPointElement:a,getSeriesA11yElement:l,unhideChartElementFromAT:h}=t,{format:c,numberFormat:d}=i,{reverseChildNodes:u,stripHTMLTagsFromString:p}=s,{find:g,isNumber:m,isString:b,pick:y,defined:f}=n;function x(e){let t=e.chart.options.accessibility.series.pointDescriptionEnabledThreshold;return!!(!1!==t&&e.points&&e.points.length>=+t)}function v(e,t){let i=e.series,s=i.chart,n=s.options.accessibility.point||{},o=i.options.accessibility&&i.options.accessibility.point||{},r=i.tooltipOptions||{},a=s.options.lang;return m(t)?d(t,o.valueDecimals||n.valueDecimals||r.valueDecimals||-1,a.decimalPoint,a.accessibility.thousandsSep||a.thousandsSep):t}function A(e,t){let i=e[t];return e.chart.langFormat("accessibility.series."+t+"Description",{name:r(i),series:e})}function C(e){let t=e.series,i=t.chart.series.length>1||t.options.name,s=function(e){let t=e.series,i=t.chart,s=t.options.accessibility,n=s&&s.point&&s.point.valueDescriptionFormat||i.options.accessibility.point.valueDescriptionFormat,o=y(t.xAxis&&t.xAxis.options.accessibility&&t.xAxis.options.accessibility.enabled,!i.angular&&"flowmap"!==t.type),r=o?function(e){let t=function(e){let t=e.series,i=t.chart,s=t.options.accessibility&&t.options.accessibility.point||{},n=i.options.accessibility.point||{},o=t.xAxis&&t.xAxis.dateTime;
23510if(o){let t=o.getXDateFormat(e.x||0,i.options.tooltip.dateTimeLabelFormats),r=s.dateFormatter&&s.dateFormatter(e)||n.dateFormatter&&n.dateFormatter(e)||s.dateFormat||n.dateFormat||t;return i.time.dateFormat(r,e.x||0,void 0)}}(e),i=(e.series.xAxis||{}).categories&&f(e.category)&&(""+e.category).replace("<br/>"," "),s=f(e.id)&&0>(""+e.id).indexOf("highcharts-"),n="x, "+e.x;return e.name||t||i||(s?e.id:n)}(e):"";return c(n,{point:e,index:f(e.index)?e.index+1:"",xDescription:r,value:function(e){let t=e.series,i=t.chart.options.accessibility.point||{},s=t.chart.options.accessibility&&t.chart.options.accessibility.point||{},n=t.tooltipOptions||{},o=s.valuePrefix||i.valuePrefix||n.valuePrefix||"",r=s.valueSuffix||i.valueSuffix||n.valueSuffix||"",a=void 0!==e.value?"value":"y",l=v(e,e[a]);return e.isNull?t.chart.langFormat("accessibility.series.nullPointValue",{point:e}):t.pointArrayMap?function(e,t,i){let s=t||"",n=i||"",o=function(t){let i=v(e,y(e[t],e.options[t]));return void 0!==i?t+": "+s+i+n:i};return e.series.pointArrayMap.reduce(function(e,t){let i=o(t);return i?e+(e.length?", ":"")+i:e},"")}(e,o,r):o+l+r}(e),separator:o?", ":""},i)}(e),n=e.options&&e.options.accessibility&&e.options.accessibility.description,r=i?" "+t.name+".":"",a=function(e){let t=e.series.chart,i=o(e);return i.length?t.langFormat("accessibility.series.pointAnnotationsDescription",{point:e,annotations:i}):""}(e);return e.accessibility=e.accessibility||{},e.accessibility.valueDescription=s,s+(n?" "+n:"")+r+(a?" "+a:"")}function w(e){let t=e.chart,i=t.types||[],s=function(e){let t=(e.options.accessibility||{}).description;return t&&e.chart.langFormat("accessibility.series.description",{description:t,series:e})||""}(e),n=function(i){return t[i]&&t[i].length>1&&e[i]},o=e.index+1,r=A(e,"xAxis"),a=A(e,"yAxis"),l={seriesNumber:o,series:e,chart:t},h=i.length>1?"Combination":"",d=t.langFormat("accessibility.series.summary."+e.type+h,l)||t.langFormat("accessibility.series.summary.default"+h,l),u=(n("yAxis")?" "+a+".":"")+(n("xAxis")?" "+r+".":"");return c(y(e.options.accessibility&&e.options.accessibility.descriptionFormat,t.options.accessibility.series.descriptionFormat,""),{seriesDescription:d,authorDescription:s?" "+s:"",axisDescription:u,series:e,chart:t,seriesNumber:o},void 0)}return{defaultPointDescriptionFormatter:C,defaultSeriesDescriptionFormatter:w,describeSeries:function(e){let t=e.chart,i=a(e),s=l(e),n=t.is3d&&t.is3d();s&&(s.lastChild!==i||n||u(s),function(e){let t=function(e){let t=e.options.accessibility||{};return!x(e)&&!t.exposeAsGroupOnly}(e),i=function(e){let t=e.chart.options.accessibility.keyboardNavigation.seriesNavigation;return!!(e.points&&(e.points.length<+t.pointNavigationEnabledThreshold||!1===t.pointNavigationEnabledThreshold))}(e),s=e.chart.options.accessibility.point.describeNull;(t||i)&&e.points.forEach(i=>{let n=i.graphic&&i.graphic.element||function(e){let t=e.series,i=t&&t.chart,s=t&&t.is("sunburst"),n=e.isNull,o=i&&i.options.accessibility.point.describeNull;return n&&!s&&o}(i)&&function(e){let t=e.series,i=function(e){let t=e.index;return e.series&&e.series.data&&f(t)&&g(e.series.data,function(e){return!!(e&&void 0!==e.index&&e.index>t&&e.graphic&&e.graphic.element)})||null}(e),s=i&&i.graphic,n=s?s.parentGroup:t.graph||t.group,o=i?{x:y(e.plotX,i.plotX,0),y:y(e.plotY,i.plotY,0)}:{x:y(e.plotX,0),y:y(e.plotY,0)},r=function(e,t){let i=e.series.chart.renderer.rect(t.x,t.y,1,1);return i.attr({class:"highcharts-a11y-mock-point",fill:"none",opacity:0,"fill-opacity":0,"stroke-opacity":0}),i}(e,o);if(n&&n.element)return e.graphic=r,e.hasMockGraphic=!0,r.add(n),n.element.insertBefore(r.element,s?s.element:null),r.element}(i),o=i.options&&i.options.accessibility&&!1===i.options.accessibility.enabled;if(n){if(i.isNull&&!s){n.setAttribute("aria-hidden",!0);return}n.setAttribute("tabindex","-1"),e.chart.styledMode||(n.style.outline="none"),t&&!o?function(e,t){let i=e.series,s=i.options.accessibility?.point||{},n=i.chart.options.accessibility.point||{},o=p(b(s.descriptionFormat)&&c(s.descriptionFormat,e,i.chart)||s.descriptionFormatter?.(e)||b(n.descriptionFormat)&&c(n.descriptionFormat,e,i.chart)||n.descriptionFormatter?.(e)||C(e),i.chart.renderer.forExport);t.setAttribute("role","img"),t.setAttribute("aria-label",o)}(i,n):n.setAttribute("aria-hidden",!0)}})}(e),h(t,s),function(e){let t=e.chart,i=t.options.chart,s=i.options3d&&i.options3d.enabled,n=t.series.length>1,o=t.options.accessibility.series.describeSingleSeries,r=(e.options.accessibility||{}).exposeAsGroupOnly;return!(s&&n)&&(n||o||r||x(e))}(e)?function(e,t){let i=e.options.accessibility||{},s=e.chart.options.accessibility,n=s.landmarkVerbosity;i.exposeAsGroupOnly?t.setAttribute("role","img"):"all"===n?t.setAttribute("role","regi
23510on"):t.setAttribute("role","group"),t.setAttribute("tabindex","-1"),e.chart.styledMode||(t.style.outline="none"),t.setAttribute("aria-label",p(s.series.descriptionFormatter&&s.series.descriptionFormatter(e)||w(e),e.chart.renderer.forExport))}(e,s):s.removeAttribute("aria-label"))}}}),i(t,"Accessibility/Components/SeriesComponent/NewDataAnnouncer.js",[t["Core/Globals.js"],t["Core/Utilities.js"],t["Accessibility/Utils/Announcer.js"],t["Accessibility/Utils/ChartUtilities.js"],t["Accessibility/Utils/EventProvider.js"],t["Accessibility/Components/SeriesComponent/SeriesDescriber.js"]],function(e,t,i,s,n,o){let{composed:r}=e,{addEvent:a,defined:l,pushUnique:h}=t,{getChartTitle:c}=s,{defaultPointDescriptionFormatter:d,defaultSeriesDescriptionFormatter:u}=o;function p(e){return!!e.options.accessibility.announceNewData.enabled}class g{constructor(e){this.dirty={allSeries:{}},this.lastAnnouncementTime=0,this.chart=e}init(){let e=this.chart,t=e.options.accessibility.announceNewData.interruptUser?"assertive":"polite";this.lastAnnouncementTime=0,this.dirty={allSeries:{}},this.eventProvider=new n,this.announcer=new i(e,t),this.addEventListeners()}destroy(){this.eventProvider.removeAddedEvents(),this.announcer.destroy()}addEventListeners(){let e=this,t=this.chart,i=this.eventProvider;i.addEvent(t,"afterApplyDrilldown",function(){e.lastAnnouncementTime=0}),i.addEvent(t,"afterAddSeries",function(t){e.onSeriesAdded(t.series)}),i.addEvent(t,"redraw",function(){e.announceDirtyData()})}onSeriesAdded(e){p(this.chart)&&(this.dirty.hasDirty=!0,this.dirty.allSeries[e.name+e.index]=e,this.dirty.newSeries=l(this.dirty.newSeries)?void 0:e)}announceDirtyData(){let e=this.chart,t=this;if(e.options.accessibility.announceNewData&&this.dirty.hasDirty){let e=this.dirty.newPoint;e&&(e=function(e){let t=e.series.data.filter(t=>e.x===t.x&&e.y===t.y);return 1===t.length?t[0]:e}(e)),this.queueAnnouncement(Object.keys(this.dirty.allSeries).map(e=>t.dirty.allSeries[e]),this.dirty.newSeries,e),this.dirty={allSeries:{}}}}queueAnnouncement(e,t,i){let s=this.chart.options.accessibility.announceNewData;if(s.enabled){let n=+new Date,o=n-this.lastAnnouncementTime,r=Math.max(0,s.minAnnounceInterval-o),a=function(e,t){let i=(e||[]).concat(t||[]).reduce((e,t)=>(e[t.name+t.index]=t,e),{});return Object.keys(i).map(e=>i[e])}(this.queuedAnnouncement&&this.queuedAnnouncement.series,e),l=this.buildAnnouncementMessage(a,t,i);l&&(this.queuedAnnouncement&&clearTimeout(this.queuedAnnouncementTimer),this.queuedAnnouncement={time:n,message:l,series:a},this.queuedAnnouncementTimer=setTimeout(()=>{this&&this.announcer&&(this.lastAnnouncementTime=+new Date,this.announcer.announce(this.queuedAnnouncement.message),delete this.queuedAnnouncement,delete this.queuedAnnouncementTimer)},r))}}buildAnnouncementMessage(t,i,s){let n=this.chart,o=n.options.accessibility.announceNewData;if(o.announcementFormatter){let e=o.announcementFormatter(t,i,s);if(!1!==e)return e.length?e:null}let r=e.charts&&e.charts.length>1?"Multiple":"Single",a=i?"newSeriesAnnounce"+r:s?"newPointAnnounce"+r:"newDataAnnounce",l=c(n);return n.langFormat("accessibility.announceNewData."+a,{chartTitle:l,seriesDesc:i?u(i):null,pointDesc:s?d(s):null,point:s,series:i})}}return function(e){function t(e){let t=this.chart,i=t.accessibility?.components.series.newDataAnnouncer;i&&i.chart===t&&p(t)&&(i.dirty.newPoint=l(i.dirty.newPoint)?void 0:e.point)}function i(){let e=this.chart,t=e.accessibility?.components.series.newDataAnnouncer;t&&t.chart===e&&p(e)&&(t.dirty.hasDirty=!0,t.dirty.allSeries[this.name+this.index]=this)}e.compose=function(e){h(r,"A11y.NDA")&&(a(e,"addPoint",t),a(e,"updatedData",i))}}(g||(g={})),g}),i(t,"Accessibility/ProxyElement.js",[t["Core/Globals.js"],t["Core/Utilities.js"],t["Accessibility/Utils/EventProvider.js"],t["Accessibility/Utils/ChartUtilities.js"],t["Accessibility/Utils/HTMLUtilities.js"]],function(e,t,i,s,n){let{doc:o}=e,{attr:r,css:a,merge:l}=t,{fireEventOnWrappedOrUnwrappedElement:h}=s,{cloneMouseEvent:c,cloneTouchEvent:d,getFakeMouseEvent:u,removeElement:p}=n;return class{constructor(e,t,s="button",n,r){this.chart=e,this.target=t,this.eventProvider=new i;let a=this.innerElement=o.createElement(s),l=this.element=n?o.createElement(n):a;e.styledMode||this.hideElementVisually(a),n&&("li"!==n||e.styledMode||(l.style.listStyle="none"),l.appendChild(a),this.element=l),this.updateTarget(t,r)}click(){let e=this.getTargetPosition();e.x+=e.width/2,e.y+=e.height/2;let t=u("click",e);h(this.target.click,t)}updateTarget(e,t){this.target=e,this.updateCSSClassName();let i=t||{};
23510Object.keys(i).forEach(e=>{null===i[e]&&delete i[e]});let s=this.getTargetAttr(e.click,"aria-label");r(this.innerElement,l(s?{"aria-label":s}:{},i)),this.eventProvider.removeAddedEvents(),this.addProxyEventsToElement(this.innerElement,e.click),this.refreshPosition()}refreshPosition(){let e=this.getTargetPosition();a(this.innerElement,{width:(e.width||1)+"px",height:(e.height||1)+"px",left:(Math.round(e.x)||0)+"px",top:(Math.round(e.y)||0)+"px"})}remove(){this.eventProvider.removeAddedEvents(),p(this.element)}updateCSSClassName(){let e=e=>e.indexOf("highcharts-no-tooltip")>-1,t=this.chart.legend,i=t.group&&t.group.div,s=e(i&&i.className||""),n=e(this.getTargetAttr(this.target.click,"class")||"");this.innerElement.className=s||n?"highcharts-a11y-proxy-element highcharts-no-tooltip":"highcharts-a11y-proxy-element"}addProxyEventsToElement(e,t){["click","touchstart","touchend","touchcancel","touchmove","mouseover","mouseenter","mouseleave","mouseout"].forEach(i=>{let s=0===i.indexOf("touch");this.eventProvider.addEvent(e,i,e=>{let i=s?d(e):c(e);t&&h(t,i),e.stopPropagation(),s||e.preventDefault()},{passive:!1})})}hideElementVisually(e){a(e,{borderWidth:0,backgroundColor:"transparent",cursor:"pointer",outline:"none",opacity:.001,filter:"alpha(opacity=1)",zIndex:999,overflow:"hidden",padding:0,margin:0,display:"block",position:"absolute","-ms-filter":"progid:DXImageTransform.Microsoft.Alpha(Opacity=1)"})}getTargetPosition(){let e=this.target.click,t=e.element?e.element:e,i=this.target.visual||t,s=this.chart.renderTo,n=this.chart.pointer;if(s&&i?.getBoundingClientRect&&n){let e=i.getBoundingClientRect(),t=n.getChartPosition();return{x:(e.left-t.left)/t.scaleX,y:(e.top-t.top)/t.scaleY,width:e.right/t.scaleX-e.left/t.scaleX,height:e.bottom/t.scaleY-e.top/t.scaleY}}return{x:0,y:0,width:1,height:1}}getTargetAttr(e,t){return e.element?e.element.getAttribute(t):e.getAttribute(t)}}}),i(t,"Accessibility/ProxyProvider.js",[t["Core/Globals.js"],t["Core/Utilities.js"],t["Accessibility/Utils/ChartUtilities.js"],t["Accessibility/Utils/DOMElementProvider.js"],t["Accessibility/Utils/HTMLUtilities.js"],t["Accessibility/ProxyElement.js"]],function(e,t,i,s,n,o){let{doc:r}=e,{attr:a,css:l}=t,{unhideChartElementFromAT:h}=i,{removeChildNodes:c}=n;return class{constructor(e){this.chart=e,this.domElementProvider=new s,this.groups={},this.groupOrder=[],this.beforeChartProxyPosContainer=this.createProxyPosContainer("before"),this.afterChartProxyPosContainer=this.createProxyPosContainer("after"),this.update()}addProxyElement(e,t,i="button",s){let n=this.groups[e];if(!n)throw Error("ProxyProvider.addProxyElement: Invalid group key "+e);let r="ul"===n.type||"ol"===n.type?"li":void 0,a=new o(this.chart,t,i,r,s);return n.proxyContainerElement.appendChild(a.element),n.proxyElements.push(a),a}addGroup(e,t="div",i){let s;let n=this.groups[e];if(n)return n.groupElement;let o=this.domElementProvider.createElement(t);return i&&i.role&&"div"!==t?(s=this.domElementProvider.createElement("div")).appendChild(o):s=o,s.className="highcharts-a11y-proxy-group highcharts-a11y-proxy-group-"+e.replace(/\W/g,"-"),this.groups[e]={proxyContainerElement:o,groupElement:s,type:t,proxyElements:[]},a(s,i||{}),"ul"===t&&o.setAttribute("role","list"),this.afterChartProxyPosContainer.appendChild(s),this.updateGroupOrder(this.groupOrder),s}updateGroupAttrs(e,t){let i=this.groups[e];if(!i)throw Error("ProxyProvider.updateGroupAttrs: Invalid group key "+e);a(i.groupElement,t)}updateGroupOrder(e){if(this.groupOrder=e.slice(),this.isDOMOrderGroupOrder())return;let t=e.indexOf("series"),i=t>-1?e.slice(0,t):e,s=t>-1?e.slice(t+1):[],n=r.activeElement;["before","after"].forEach(e=>{let t=this["before"===e?"beforeChartProxyPosContainer":"afterChartProxyPosContainer"];
23510c(t),("before"===e?i:s).forEach(e=>{let i=this.groups[e];i&&t.appendChild(i.groupElement)})}),(this.beforeChartProxyPosContainer.contains(n)||this.afterChartProxyPosContainer.contains(n))&&n&&n.focus&&n.focus()}clearGroup(e){let t=this.groups[e];if(!t)throw Error("ProxyProvider.clearGroup: Invalid group key "+e);c(t.proxyContainerElement)}removeGroup(e){let t=this.groups[e];t&&(this.domElementProvider.removeElement(t.groupElement),t.groupElement!==t.proxyContainerElement&&this.domElementProvider.removeElement(t.proxyContainerElement),delete this.groups[e])}update(){this.updatePosContainerPositions(),this.updateGroupOrder(this.groupOrder),this.updateProxyElementPositions()}updateProxyElementPositions(){Object.keys(this.groups).forEach(this.updateGroupProxyElementPositions.bind(this))}updateGroupProxyElementPositions(e){let t=this.groups[e];t&&t.proxyElements.forEach(e=>e.refreshPosition())}destroy(){this.domElementProvider.destroyCreatedElements()}createProxyPosContainer(e){let t=this.domElementProvider.createElement("div");return t.setAttribute("aria-hidden","false"),t.className="highcharts-a11y-proxy-container"+(e?"-"+e:""),l(t,{top:"0",left:"0"}),this.chart.styledMode||(t.style.whiteSpace="nowrap",t.style.position="absolute"),t}getCurrentGroupOrderInDOM(){let e=e=>{let t=Object.keys(this.groups),i=t.length;for(;i--;){let s=t[i],n=this.groups[s];if(n&&e===n.groupElement)return s}},t=t=>{let i=[],s=t.children;for(let t=0;t<s.length;++t){let n=e(s[t]);n&&i.push(n)}return i},i=t(this.beforeChartProxyPosContainer),s=t(this.afterChartProxyPosContainer);return i.push("series"),i.concat(s)}isDOMOrderGroupOrder(){let e=this.getCurrentGroupOrderInDOM(),t=this.groupOrder.filter(e=>"series"===e||!!this.groups[e]),i=e.length;if(i!==t.length)return!1;for(;i--;)if(e[i]!==t[i])return!1;return!0}updatePosContainerPositions(){let e=this.chart;if(e.renderer.forExport)return;let t=e.renderer.box;e.container.insertBefore(this.afterChartProxyPosContainer,t.nextSibling),e.container.insertBefore(this.beforeChartProxyPosContainer,t),h(this.chart,this.afterChartProxyPosContainer),h(this.chart,this.beforeChartProxyPosContainer)}}}),i(t,"Accessibility/Components/RangeSelectorComponent.js",[t["Accessibility/AccessibilityComponent.js"],t["Accessibility/Utils/Announcer.js"],t["Accessibility/Utils/ChartUtilities.js"],t["Accessibility/KeyboardNavigationHandler.js"],t["Core/Utilities.js"]],function(e,t,i,s,n){let{unhideChartElementFromAT:o,getAxisRangeDescription:r}=i,{addEvent:a,attr:l}=n;class h extends e{init(){let e=this.chart;this.announcer=new t(e,"polite")}onChartUpdate(){let e=this.chart,t=this,i=e.rangeSelector;i&&(this.updateSelectorVisibility(),this.setDropdownAttrs(),i.buttons&&i.buttons.length&&i.buttons.forEach(e=>{t.setRangeButtonAttrs(e)}),i.maxInput&&i.minInput&&["minInput","maxInput"].forEach(function(s,n){let r=i[s];r&&(o(e,r),t.setRangeInputAttrs(r,"accessibility.rangeSelector."+(n?"max":"min")+"InputLabel"))}))}updateSelectorVisibility(){let e=this.chart,t=e.rangeSelector,i=t&&t.dropdown,s=t&&t.buttons||[],n=e=>e.setAttribute("aria-hidden",!0);t&&t.hasVisibleDropdown&&i?(o(e,i),s.forEach(e=>
23510n(e.element))):(i&&n(i),s.forEach(t=>o(e,t.element)))}setDropdownAttrs(){let e=this.chart,t=e.rangeSelector&&e.rangeSelector.dropdown;if(t){let i=e.langFormat("accessibility.rangeSelector.dropdownLabel",{rangeTitle:e.options.lang.rangeSelectorZoom});t.setAttribute("aria-label",i),t.setAttribute("tabindex",-1)}}setRangeButtonAttrs(e){l(e.element,{tabindex:-1,role:"button"})}setRangeInputAttrs(e,t){let i=this.chart;l(e,{tabindex:-1,"aria-label":i.langFormat(t,{chart:i})})}onButtonNavKbdArrowKey(e,t){let i=e.response,s=this.keyCodes,n=this.chart,o=n.options.accessibility.keyboardNavigation.wrapAround,r=t===s.left||t===s.up?-1:1;return n.highlightRangeSelectorButton(n.highlightedRangeSelectorItemIx+r)?i.success:o?(e.init(r),i.success):i[r>0?"next":"prev"]}onButtonNavKbdClick(e){let t=e.response,i=this.chart;return 3!==i.oldRangeSelectorItemState&&this.fakeClickEvent(i.rangeSelector.buttons[i.highlightedRangeSelectorItemIx].element),t.success}onAfterBtnClick(){let e=this.chart,t=r(e.xAxis[0]),i=e.langFormat("accessibility.rangeSelector.clickButtonAnnouncement",{chart:e,axisRangeDescription:t});i&&this.announcer.announce(i)}onInputKbdMove(e){let t=this.chart,i=t.rangeSelector,s=t.highlightedInputRangeIx=(t.highlightedInputRangeIx||0)+e;if(s>1||s<0){if(t.accessibility)return t.accessibility.keyboardNavigation.exiting=!0,t.accessibility.keyboardNavigation.tabindexContainer.focus(),t.accessibility.keyboardNavigation.move(e)}else if(i){let e=i[s?"maxDateBox":"minDateBox"],n=i[s?"maxInput":"minInput"];e&&n&&t.setFocusToElement(e,n)}return!0}onInputNavInit(e){let t=this,i=this.chart,s=e>0?0:1,n=i.rangeSelector,o=n&&n[s?"maxDateBox":"minDateBox"],r=n&&n.minInput,l=n&&n.maxInput;if(i.highlightedInputRangeIx=s,o&&r&&l){i.setFocusToElement(o,s?l:r),this.removeInputKeydownHandler&&this.removeInputKeydownHandler();let e=e=>{(e.which||e.keyCode)===this.keyCodes.tab&&t.onInputKbdMove(e.shiftKey?-1:1)&&(e.preventDefault(),e.stopPropagation())},n=a(r,"keydown",e),h=a(l,"keydown",e);this.removeInputKeydownHandler=()=>{n(),h()}}}onInputNavTerminate(){let e=this.chart.rangeSelector||{};e.maxInput&&e.hideInput("max"),e.minInput&&e.hideInput("min"),this.removeInputKeydownHandler&&(this.removeInputKeydownHandler(),delete this.removeInputKeydownHandler)}initDropdownNav(){let e=this.chart,t=e.rangeSelector,i=t&&t.dropdown;t&&i&&(e.setFocusToElement(t.buttonGroup,i),this.removeDropdownKeydownHandler&&this.removeDropdownKeydownHandler(),this.removeDropdownKeydownHandler=a(i,"keydown",t=>{let i=(t.which||t.keyCode)===this.keyCodes.tab,s=e.accessibility;i&&(t.preventDefault(),t.stopPropagation(),s&&(s.keyboardNavigation.tabindexContainer.focus(),s.keyboardNavigation.move(t.shiftKey?-1:1)))}))}getRangeSelectorButtonNavigation(){let e=this.chart,t=this.keyCodes,i=this;return new s(e,{keyCodeMap:[[[t.left,t.right,t.up,t.down],function(e){return i.onButtonNavKbdArrowKey(this,e)}],[[t.enter,t.space],function(){return i.onButtonNavKbdClick(this)}]],validate:function(){return!!(e.rangeSelector&&e.rangeSelector.buttons&&e.rangeSelector.buttons.length)},init:function(t){let s=e.rangeSelector;if(s&&s.hasVisibleDropdown)i.initDropdownNav();else if(s){let i=s.buttons.length-1;e.highlightRangeSelectorButton(t>0?0:i)}},terminate:function(){i.removeDropdownKeydownHandler&&(i.removeDropdownKeydownHandler(),delete i.removeDropdownKeydownHandler)}})}getRangeSelectorInputNavigation(){let e=this.chart,t=this;return new s(e,{keyCodeMap:[],validate:function(){return!!(e.rangeSelector&&e.rangeSelector.inputGroup&&"hidden"!==e.rangeSelector.inputGroup.element.style.visibility&&!1!==e.options.rangeSelector.inputEnabled&&e.rangeSelector.minInput&&e.rangeSelector.maxInput)},init:function(e){t.onInputNavInit(e)},terminate:function(){t.onInputNavTerminate()}})}getKeyboardNavigation(){return[this.getRangeSelectorButtonNavigation(),this.getRangeSelectorInputNavigation()]}destroy(){this.removeDropdownKeydownHandler&&this.removeDropdownKeydownHandler(),this.removeInputKeydownHandler&&this.removeInputKeydownHandler(),this.announcer&&this.announcer.destroy()}}return function(e){function t(e){let t=this.rangeSelector&&this.rangeSelector.buttons||[],i=this.highlightedRangeSelectorItemIx,s=this.rangeSelector&&this.rangeSelector.selected;return void 0!==i&&t[i]&&i!==s&&t[i].setState(this.oldRangeSelectorItemState||0),this.highlightedRangeSelectorItemIx=e,!!t[e]&&(this.setFocusToElement(t[e].box,t[e].element),e!==s&&(this.oldRangeSelectorItemState=t[e].state,t[e].setState(1)),!0)}function i(){let e=this.chart.accessibility;if(e&&e.components.rangeSelector)return e.components.rangeSelector.onAfterBtnClick()}e.compose=function(e,s){let n=e.prototype;n.highlightRangeSelectorButton||(n.highlightRangeSelectorButton=t,a(s,"afterBtnClick",i))}}(h||(h={})),h}),i(t,"Accessibility/Components/SeriesComponent/ForcedMarkers.js",[t["Core/Globals.js"],t["Core/Utilities.js"]],function(e,t){var i;
23510let{composed:s}=e,{addEvent:n,merge:o,pushUnique:r}=t;return function(e){function t(e){o(!0,e,{marker:{enabled:!0,states:{normal:{opacity:0}}}})}function i(e){return e.marker.states&&e.marker.states.normal&&e.marker.states.normal.opacity}function a(e){return!!(e._hasPointMarkers&&e.points&&e.points.length)}function l(){this.chart.styledMode&&(this.markerGroup&&this.markerGroup[this.a11yMarkersForced?"addClass":"removeClass"]("highcharts-a11y-markers-hidden"),a(this)&&this.points.forEach(e=>{e.graphic&&(e.graphic[e.hasForcedA11yMarker?"addClass":"removeClass"]("highcharts-a11y-marker-hidden"),e.graphic[!1===e.hasForcedA11yMarker?"addClass":"removeClass"]("highcharts-a11y-marker-visible"))}))}function h(e){this.resetA11yMarkerOptions=o(e.options.marker||{},this.userOptions.marker||{})}function c(){let e=this.options;(function(e){let t=e.chart.options.accessibility.enabled,i=!1!==(e.options.accessibility&&e.options.accessibility.enabled);return t&&i&&function(e){let t=e.chart.options.accessibility;return e.points.length<t.series.pointDescriptionEnabledThreshold||!1===t.series.pointDescriptionEnabledThreshold}(e)})(this)?(e.marker&&!1===e.marker.enabled&&(this.a11yMarkersForced=!0,t(this.options)),a(this)&&function(e){let s=e.points.length;for(;s--;){let n=e.points[s],r=n.options,a=n.hasForcedA11yMarker;if(delete n.hasForcedA11yMarker,r.marker){let e=a&&0===i(r);r.marker.enabled&&!e?(o(!0,r.marker,{states:{normal:{opacity:i(r)||1}}}),n.hasForcedA11yMarker=!1):!1===r.marker.enabled&&(t(r),n.hasForcedA11yMarker=!0)}}}(this)):this.a11yMarkersForced&&(delete this.a11yMarkersForced,function(e){let t=e.resetA11yMarkerOptions;if(t){let i=t.states&&t.states.normal&&t.states.normal.opacity;e.userOptions&&e.userOptions.marker&&(e.userOptions.marker.enabled=!0),e.update({marker:{enabled:t.enabled,states:{normal:{opacity:i}}}})}}(this),delete this.resetA11yMarkerOptions)}function d(){this.boosted&&this.a11yMarkersForced&&(o(!0,this.options,{marker:{enabled:!1}}),delete this.a11yMarkersForced)}e.compose=function(e){r(s,"A11y.FM")&&(n(e,"afterSetOptions",h),n(e,"render",c),n(e,"afterRender",l),n(e,"renderCanvas",d))}}(i||(i={})),i}),i(t,"Accessibility/Components/SeriesComponent/SeriesKeyboardNavigation.js",[t["Core/Series/Point.js"],t["Core/Series/Series.js"],t["Core/Series/SeriesRegistry.js"],t["Core/Globals.js"],t["Core/Utilities.js"],t["Accessibility/KeyboardNavigationHandler.js"],t["Accessibility/Utils/EventProvider.js"],t["Accessibility/Utils/ChartUtilities.js"]],function(e,t,i,s,n,o,r,a){let{seriesTypes:l}=i,{doc:h}=s,{defined:c,fireEvent:d}=n,{getPointFromXY:u,getSeriesFromName:p,scrollAxisToPoint:g}=a;function m(e){let t=e.index,i=e.series.points,s=i.length;if(i[t]===e)return t;for(;s--;)if(i[s]===e)return s}function b(e){let t=e.chart.options.accessibility.keyboardNavigation.seriesNavigation,i=e.options.accessibility||{},s=i.keyboardNavigation;return s&&!1===s.enabled||!1===i.enabled||!1===e.options.enableMouseTracking||!e.visible||t.pointNavigationEnabledThreshold&&+t.pointNavigationEnabledThreshold<=e.points.length}function y(e){let t=e.series.chart.options.accessibility,i=e.options.accessibility&&!1===e.options.accessibility.enabled;return e.isNull&&t.keyboardNavigation.seriesNavigation.skipNullPoints||!1===e.visible||!1===e.isInside||i||b(e.series)}function f(e){let t=e.series||[],i=t.length;for(let e=0;e<i;++e)if(!b(t[e])){let i=function(e){let t=e.points||[],i=t.length;for(let e=0;e<i;++e)if(!y(t[e]))return t[e];return null}(t[e]);if(i)return i}return null}function x(e){let t=e.series.length,i=!1;for(;t--&&(e.highlightedPoint=e.series[t].points[e.series[t].points.length-1],!(i=e.series[t].highlightNextValidPoint())););return i}function v(e){delete e.highlightedPoint;let t=f(e);return!!t&&t.highlight()}class A{constructor(e,t){this.keyCodes=t,this.chart=e}init(){let i=this,s=this.chart,n=this.eventProvider=new r;n.addEvent(t,"destroy",function(){return i.onSeriesDestroy(this)}),n.addEvent(s,"afterApplyDrilldown",function(){!function(e){let t=f(e);t&&t.highlight(!1)}(this)}),n.addEvent(s,"drilldown",function(e){let t=e.point,s=t.series;i.lastDrilledDownPoint={x:t.x,y:t.y,seriesName:s?s.name:""}}),n.addEvent(s,"drillupall",function(){setTimeout(function(){i.onDrillupAll()},10)}),n.addEvent(e,"afterSetState",function(){let e=this.graphic&&this.graphic.element,t=h.activeElement,i=t&&t.getAttribute("class"),n=i&&i.indexOf("highcharts-a11y-proxy-element")>-1;s.highlightedPoint===this&&t!==e&&!n&&e&&e.focus&&e.focus()})}onDrillupAll(){let e;let t=this.lastDrilledDownPoint,i=this.chart,s=t&&p(i,t.seriesName);t&&s&&c(t.x)&&c(t.y)&&(e=u(s,t.x,t.y)),e=e||f(i),i.container&&i.container.focus(),e&&e.highlight&&e.highlight(!1)}getKeyboardNavigationHandler(){let e=this,t=this.keyCodes,i=this.chart,s=i.inverted;return new o(i,{keyCodeMap:[[s?[t.up,t.down]:[t.left,t.right],function(t){return e.onKbdSideways(this,t)}],[s?[t.left,t.right]:[t.up,t.down],function(t){return e.onKbdVertical(this,t)}],[[t.enter,t.space],function(e,t){let s=i.highlightedPoint;if(s){let{plotLeft:e,plotTop:i}=this.chart,{plotX:n=0,plotY:o=0}=s;t={...t,chartX:e+n,chartY:i+o,point:s,target:s.graphic?.element||t.target},d(s.series,"click",t),s.firePointEvent("click",t)}return this.response.success}],[[t.home],function(){return v(i),this.response.success}],[[t.end],function(){return x(i),this.response.success}],[[t.pageDown,t.pageUp],function(e){return i.highlightAdjacentSeries(e===t.pageDown),this.response.success}]],init:function(){return e.onHandlerInit(this)},validate:function(){return!!f(i)},terminate:function(){return e.onHandlerTerminate()}})}onKbdSideways(e,t){let i=this.keyCodes,s=t===i.right||t===i.down;return this.attemptHighlightAdjacentPoint(e,s)}onHandlerInit(e){let t=this.chart;return t.options.accessibility.keyboardNavigation.seriesNavigation.rememberPointFocus&&t.highlightedPoint?t.highlightedPoint.highlight():v(t),e.response.success}onKbdVertical(e,t){let i=this.chart,s=this.keyCodes,n=t===s.down||t===s.right,o=i.options.accessibility.keyboardNavigation.seriesNavigation;if(o.mode&&"serialize"===o.mode)return this.attemptHighlightAdjacentPoint(e,n);let r=i.highlightedPoint&&i.highlightedPoint.series.keyboardMoveVertical?"highlightAdjacentPointVertical":"highlightAdjacentSeries";return i[r](n),e.response.success}onHandlerTerminate(){let e=this.chart,t=e.options.accessibility.keyboardNavigation;e.tooltip&&e.tooltip.hide(0);let i=e.highlightedPoint&&e.highlightedPoint.series;i&&i.onMouseOut&&i.onMouseOut(),e.highlightedPoint&&e.highlightedPoint.onMouseOut&&e.highlightedPoint.onMouseOut(),t.seriesNavigation.rememberPointFocus||delete e.highlightedPoint}attemptHighlightAdjacentPoint(e,t){let i=this.chart,s=i.options.accessibility.keyboardNavigation.wrapAround;return i.highlightAdjacentPoint(t)?e.response.success:s&&(t?v(i):x(i))?e.response.success:e.response[t?"next":"prev"]}onSeriesDestroy(e){let t=this.chart;t.highlightedPoint&&t.highlightedPoint.series===e&&(delete t.highlightedPoint,t.focusElement&&t.focusElement.removeFocusBorder())}destroy(){this.eventProvider.removeAddedEvents()}}return function(e){function t(e){let t,i;let s=this.series,n=this.highlightedPoint,o=n&&m(n)||0,r=n&&n.series.points||[],a=this.series&&this.series[this.series.length-1],l=a&&a.points&&a.points[a.points.length-1];if(!s[0]||!s[0].points)return!1;if(n){if(t=s[n.series.index+(e?1:-1)],(i=r[o+(e?1:-1)])||!t||(i=t.points[e?0:t.points.length-1]),!i)return!1}else i=e?s[0].points[0]:l;return y(i)?(b(t=i.series)?this.highlightedPoint=e?t.points[t.points.length-1]:t.points[0]:this.highlightedPoint=i,this.highlightAdjacentPoint(e)):i.highlight()}function i(e){let t=this.highlightedPoint,i=1/0,s;
23510return!!(c(t.plotX)&&c(t.plotY))&&(this.series.forEach(n=>{b(n)||n.points.forEach(o=>{if(!c(o.plotY)||!c(o.plotX)||o===t)return;let r=o.plotY-t.plotY,a=Math.abs(o.plotX-t.plotX),l=Math.abs(r)*Math.abs(r)+a*a*4;n.yAxis&&n.yAxis.reversed&&(r*=-1),!(r<=0&&e||r>=0&&!e||l<5||y(o))&&l<i&&(i=l,s=o)})}),!!s&&s.highlight())}function s(e){let t,i,s;let n=this.highlightedPoint,o=this.series&&this.series[this.series.length-1],r=o&&o.points&&o.points[o.points.length-1];return this.highlightedPoint?!!((t=this.series[n.series.index+(e?-1:1)])&&(i=function(e,t,i,s){let n=1/0,o,r,a,l=t.points.length,h=e=>!(c(e.plotX)&&c(e.plotY));if(!h(e)){for(;l--;)!h(o=t.points[l])&&(a=(e.plotX-o.plotX)*(e.plotX-o.plotX)*4+(e.plotY-o.plotY)*(e.plotY-o.plotY)*1)<n&&(n=a,r=l);return c(r)?t.points[r]:void 0}}(n,t,0)))&&(b(t)?(i.highlight(),s=this.highlightAdjacentSeries(e))?s:(n.highlight(),!1):(i.highlight(),i.series.highlightNextValidPoint())):(t=e?this.series&&this.series[0]:o,!!(i=e?t&&t.points&&t.points[0]:r)&&i.highlight())}function n(e=!0){let t=this.series.chart,i=t.tooltip?.label?.element;!this.isNull&&e?this.onMouseOver():t.tooltip&&t.tooltip.hide(0),g(this),this.graphic&&(t.setFocusToElement(this.graphic),!e&&t.focusElement&&t.focusElement.removeFocusBorder()),t.highlightedPoint=this;let s=i?.getBoundingClientRect().top;if(i&&s&&s<0){let e=window.scrollY;window.scrollTo({behavior:"smooth",top:e+s})}return this}function o(){let e=this.chart.highlightedPoint,t=(e&&e.series)===this?m(e):0,i=this.points,s=i.length;if(i&&s){for(let e=t;e<s;++e)if(!y(i[e]))return i[e].highlight();for(let e=t;e>=0;--e)if(!y(i[e]))return i[e].highlight()}return!1}e.compose=function(e,r,a){let h=e.prototype,c=r.prototype,d=a.prototype;h.highlightAdjacentPoint||(h.highlightAdjacentPoint=t,h.highlightAdjacentPointVertical=i,h.highlightAdjacentSeries=s,c.highlight=n,d.keyboardMoveVertical=!0,["column","gantt","pie"].forEach(e=>{l[e]&&(l[e].prototype.keyboardMoveVertical=!1)}),d.highlightNextValidPoint=o)}}(A||(A={})),A}),i(t,"Accessibility/Components/SeriesComponent/SeriesComponent.js",[t["Accessibility/AccessibilityComponent.js"],t["Accessibility/Utils/ChartUtilities.js"],t["Accessibility/Components/SeriesComponent/ForcedMarkers.js"],t["Accessibility/Components/SeriesComponent/NewDataAnnouncer.js"],t["Accessibility/Components/SeriesComponent/SeriesDescriber.js"],t["Accessibility/Components/SeriesComponent/SeriesKeyboardNavigation.js"]],function(e,t,i,s,n,o){let{hideSeriesFromAT:r}=t,{describeSeries:a}=n;return class extends e{static compose(e,t,n){s.compose(n),i.compose(n),o.compose(e,t,n)}init(){this.newDataAnnouncer=new s(this.chart),this.newDataAnnouncer.init(),this.keyboardNavigation=new o(this.chart,this.keyCodes),this.keyboardNavigation.init(),this.hideTooltipFromATWhenShown(),this.hideSeriesLabelsFromATWhenShown()}hideTooltipFromATWhenShown(){let e=this;this.chart.tooltip&&this.addEvent(this.chart.tooltip.constructor,"refresh",function(){this.chart===e.chart&&this.label&&this.label.element&&this.label.element.setAttribute("aria-hidden",!0)})}hideSeriesLabelsFromATWhenShown(){this.addEvent(this.chart,"afterDrawSeriesLabels",function(){this.series.forEach(function(e){e.labelBySeries&&e.labelBySeries.attr("aria-hidden",!0)})})}onChartRender(){this.chart.series.forEach(function(e){!1!==(e.options.accessibility&&e.options.accessibility.enabled)&&e.visible&&0!==e.getPointsCollection().length?a(e):r(e)})}getKeyboardNavigation(){return this.keyboardNavigation.getKeyboardNavigationHandler()}destroy(){this.newDataAnnouncer.destroy(),this.keyboardNavigation.destroy()}}}),i(t,"Accessibility/Components/ZoomComponent.js",[t["Accessibility/AccessibilityComponent.js"],t["Accessibility/Utils/ChartUtilities.js"],t["Accessibility/Utils/HTMLUtilities.js"],t["Accessibility/KeyboardNavigationHandler.js"],t["Core/Utilities.js"]],function(e,t,i,s,n){let{unhideChartElementFromAT:o}=t,{getFakeMouseEvent:r}=i,{attr:a,pick:l}=n;return class extends e{constructor(){super(...arguments),this.focusedMapNavButtonIx=-1}init(){let e=this,t=this.chart;this.proxyProvider.addGroup("zoom","div"),["afterShowResetZoom","afterApplyDrilldown","drillupall"].forEach(i=>
23510{e.addEvent(t,i,function(){e.updateProxyOverlays()})})}onChartUpdate(){let e=this.chart,t=this;e.mapNavigation&&e.mapNavigation.navButtons.forEach((i,s)=>{o(e,i.element),t.setMapNavButtonAttrs(i.element,"accessibility.zoom.mapZoom"+(s?"Out":"In"))})}setMapNavButtonAttrs(e,t){let i=this.chart;a(e,{tabindex:-1,role:"button","aria-label":i.langFormat(t,{chart:i})})}onChartRender(){this.updateProxyOverlays()}updateProxyOverlays(){let e=this.chart;if(this.proxyProvider.clearGroup("zoom"),e.resetZoomButton&&this.createZoomProxyButton(e.resetZoomButton,"resetZoomProxyButton",e.langFormat("accessibility.zoom.resetZoomButton",{chart:e})),e.drillUpButton&&e.breadcrumbs&&e.breadcrumbs.list){let t=e.breadcrumbs.list[e.breadcrumbs.list.length-1];this.createZoomProxyButton(e.drillUpButton,"drillUpProxyButton",e.langFormat("accessibility.drillUpButton",{chart:e,buttonText:e.breadcrumbs.getButtonText(t)}))}}createZoomProxyButton(e,t,i){this[t]=this.proxyProvider.addProxyElement("zoom",{click:e},"button",{"aria-label":i,tabindex:-1})}getMapZoomNavigation(){let e=this.keyCodes,t=this.chart,i=this;return new s(t,{keyCodeMap:[[[e.up,e.down,e.left,e.right],function(e){return i.onMapKbdArrow(this,e)}],[[e.tab],function(e,t){return i.onMapKbdTab(this,t)}],[[e.space,e.enter],function(){return i.onMapKbdClick(this)}]],validate:function(){return!!(t.mapView&&t.mapNavigation&&t.mapNavigation.navButtons.length)},init:function(e){return i.onMapNavInit(e)}})}onMapKbdArrow(e,t){let i=this.chart,s=this.keyCodes,n=i.container,o=t===s.up||t===s.down,a=t===s.left||t===s.up?1:-1,l=(o?i.plotHeight:i.plotWidth)/10*a,h=10*Math.random(),c={x:n.offsetLeft+i.plotLeft+i.plotWidth/2+h,y:n.offsetTop+i.plotTop+i.plotHeight/2+h},d=o?{x:c.x,y:c.y+l}:{x:c.x+l,y:c.y};return[r("mousedown",c),r("mousemove",d),r("mouseup",d)].forEach(e=>n.dispatchEvent(e)),e.response.success}onMapKbdTab(e,t){let i=this.chart,s=e.response,n=t.shiftKey,o=n&&!this.focusedMapNavButtonIx||!n&&this.focusedMapNavButtonIx;if(i.mapNavigation.navButtons[this.focusedMapNavButtonIx].setState(0),o)return i.mapView&&i.mapView.zoomBy(),s[n?"prev":"next"];this.focusedMapNavButtonIx+=n?-1:1;let r=i.mapNavigation.navButtons[this.focusedMapNavButtonIx];return i.setFocusToElement(r.box,r.element),r.setState(2),s.success}onMapKbdClick(e){let t=this.chart.mapNavigation.navButtons[this.focusedMapNavButtonIx].element;return this.fakeClickEvent(t),e.response.success}onMapNavInit(e){let t=this.chart,i=t.mapNavigation.navButtons[0],s=t.mapNavigation.navButtons[1],n=e>0?i:s;t.setFocusToElement(n.box,n.element),n.setState(2),this.focusedMapNavButtonIx=e>0?0:1}simpleButtonNavigation(e,t,i){let n=this.keyCodes,o=this,r=this.chart;return new s(r,{keyCodeMap:[[[n.tab,n.up,n.down,n.left,n.right],function(e,t){let i=e===n.tab&&t.shiftKey||e===n.left||e===n.up;return this.response[i?"prev":"next"]}],[[n.space,n.enter],function(){return l(i(this,r),this.response.success)}]],validate:function(){return r[e]&&r[e].box&&o[t].innerElement},init:function(){r.setFocusToElement(r[e].box,o[t].innerElement)}})}getKeyboardNavigation(){return[this.simpleButtonNavigation("resetZoomButton","resetZoomProxyButton",function(e,t){t.zoomOut()}),this.simpleButtonNavigation("drillUpButton","drillUpProxyButton",function(e,t){return t.drillUp(),e.response.prev}),this.getMapZoomNavigation()]}}}),i(t,"Accessibility/HighContrastMode.js",[t["Core/Globals.js"]],function(e){let{doc:t,isMS:i,win:s}=e;return{isHighContrastModeActive:function(){let e=/(Edg)/.test(s.navigator.userAgent);if(s.matchMedia&&e)return s.matchMedia("(-ms-high-contrast: active)").matches;if(i&&s.getComputedStyle){let e=t.createElement("div");e.style.backgroundImage="url(data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==)",t.body.appendChild(e);let i=(e.currentStyle||s.getComputedStyle(e)).backgroundImage;return t.body.removeChild(e),"none"===i}return s.matchMedia&&s.matchMedia("(forced-colors: active)").matches},setHighContrastTheme:function(e){e.highContrastModeActive=!0;let t=e.options.accessibility.highContrastTheme;e.update(t,!1);let i=t.colors?.length>1;
23510e.series.forEach(function(e){let s=t.plotOptions[e.type]||{},n=i&&void 0!==e.colorIndex?t.colors[e.colorIndex]:s.color||"window",o={color:s.color||"windowText",colors:i?t.colors:[s.color||"windowText"],borderColor:s.borderColor||"window",fillColor:n};e.update(o,!1),e.points&&e.points.forEach(function(e){e.options&&e.options.color&&e.update({color:s.color||"windowText",borderColor:s.borderColor||"window"},!1)})}),e.redraw()}}}),i(t,"Accessibility/HighContrastTheme.js",[],function(){return{chart:{backgroundColor:"window"},title:{style:{color:"windowText"}},subtitle:{style:{color:"windowText"}},colorAxis:{minColor:"windowText",maxColor:"windowText",stops:[],dataClasses:[]},colors:["windowText"],xAxis:{gridLineColor:"windowText",labels:{style:{color:"windowText"}},lineColor:"windowText",minorGridLineColor:"windowText",tickColor:"windowText",title:{style:{color:"windowText"}}},yAxis:{gridLineColor:"windowText",labels:{style:{color:"windowText"}},lineColor:"windowText",minorGridLineColor:"windowText",tickColor:"windowText",title:{style:{color:"windowText"}}},tooltip:{backgroundColor:"window",borderColor:"windowText",style:{color:"windowText"}},plotOptions:{series:{lineColor:"windowText",fillColor:"window",borderColor:"windowText",edgeColor:"windowText",borderWidth:1,dataLabels:{connectorColor:"windowText",color:"windowText",style:{color:"windowText",textOutline:"none"}},marker:{lineColor:"windowText",fillColor:"windowText"}},pie:{color:"window",colors:["window"],borderColor:"windowText",borderWidth:1},boxplot:{fillColor:"window"},candlestick:{lineColor:"windowText",fillColor:"window"},errorbar:{fillColor:"window"}},legend:{backgroundColor:"window",itemStyle:{color:"windowText"},itemHoverStyle:{color:"windowText"},itemHiddenStyle:{color:"#555"},title:{style:{color:"windowText"}}},credits:{style:{color:"windowText"}},drilldown:{activeAxisLabelStyle:{color:"windowText"},activeDataLabelStyle:{color:"windowText"}},navigation:{buttonOptions:{symbolStroke:"windowText",theme:{fill:"window"}}},rangeSelector:{buttonTheme:{fill:"window",stroke:"windowText",style:{color:"windowText"},states:{hover:{fill:"window",stroke:"windowText",style:{color:"windowText"}},select:{fill:"#444",stroke:"windowText",style:{color:"windowText"}}}},inputBoxBorderColor:"windowText",inputStyle:{backgroundColor:"window",color:"windowText"},labelStyle:{color:"windowText"}},navigator:{handles:{backgroundColor:"window",borderColor:"windowText"},outlineColor:"windowText",maskFill:"transparent",series:{color:"windowText",lineColor:"windowText"},xAxis:{gridLineColor:"windowText"}},scrollbar:{barBackgroundColor:"#444",barBorderColor:"windowText",buttonArrowColor:"windowText",buttonBackgroundColor:"window",buttonBorderColor:"windowText",rifleColor:"windowText",trackBackgroundColor:"window",trackBorderColor:"windowText"}}}),i(t,"Accessibility/Options/A11yDefaults.js",[],function(){return{accessibility:{enabled:!0,screenReaderSection:{beforeChartFormat:"<{headingTagName}>{chartTitle}</{headingTagName}><div>{typeDescription}</div><div>{chartSubtitle}</div><div>{chartLongdesc}</div><div>{playAsSoundButton}</div><div>{viewTableButton}</div><div>{xAxisDescription}</div><div>{yAxisDescription}</div><div>{annotationsTitle}{annotationsList}</div>",afterChartFormat:"{endOfChartMarker}",axisRangeDateFormat:"%Y-%m-%d %H:%M:%S"},series:{descriptionFormat:"{seriesDescription}{authorDescription}{axisDescription}",describeSingleSeries:!1,pointDescriptionEnabledThreshold:200},point:{valueDescriptionFormat:"{xDescription}{separator}{value}.",describeNull:!0},landmarkVerbosity:"all",linkedDescription:'*[data-highcharts-chart="{index}"] + .highcharts-description',highContrastMode:"auto",keyboardNavigation:{enabled:!0,focusBorder:{enabled:!0,hideBrowserFocusOutline:!0,style:{color:"#334eff",lineWidth:2,borderRadius:3},margin:2},order:["series","zoom","rangeSelector","navigator","legend","chartMenu"],wrapAround:!0,seriesNavigation:{skipNullPoints:!0,pointNavigationEnabledThreshold:!1,rememberPointFocus:!1}},announceNewData:{enabled:!1,minAnnounceInterval:5e3,interruptUser:!1}},legend:{accessibility:{enabled:!0,keyboardNavigation:{enabled:!0}}},exporting:{accessibility:{enabled:!0}},navigator:{accessibility:{enabled:!0}}}}),i(t,"Accessibility/Options/LangDefaults.js",[],function(){return{accessibility:{defaultChartTitle:"Chart",chartContainerLabel:"{title}. Highcharts interactive chart.",svgContainerLabel:"Interactive chart",drillUpButton:"{buttonText}",credits:"Chart credits: {creditsStr}",thousandsSep:",",svgContainerTitle:"",graphicContainerLabel:"",screenReaderSection:{beforeRegionLabel:"",afterRegionLabel:"",annotations:{heading:"Chart annotations summary",descriptionSinglePoint:"{annotationText}. Related to {annotationPoint}",descriptionMultiplePoints:"{annotationText}. Related to {annotationPoint}{#each additionalAnnotationPoints}, also related to {this}{/each}",descriptionNoPoints:"{annotationText}"},endOfChartMarker:"End of interactive chart."},sonification:{playAsSoundButtonText:"Play as sound, {chartTitle}",playAsSoundClickAnnouncement:"Play"},legend:{legendLabelNoTitle:"Toggle series visibility, {chartTitle}",legendLabel:"Chart legend: {legendTitle}",legendItem:"Show {itemName}"}
23510,zoom:{mapZoomIn:"Zoom chart",mapZoomOut:"Zoom out chart",resetZoomButton:"Reset zoom"},rangeSelector:{dropdownLabel:"{rangeTitle}",minInputLabel:"Select start date.",maxInputLabel:"Select end date.",clickButtonAnnouncement:"Viewing {axisRangeDescription}"},navigator:{handleLabel:"{#eq handleIx 0}Start, percent{else}End, percent{/eq}",groupLabel:"Axis zoom",changeAnnouncement:"{axisRangeDescription}"},table:{viewAsDataTableButtonText:"View as data table, {chartTitle}",tableSummary:"Table representation of chart."},announceNewData:{newDataAnnounce:"Updated data for chart {chartTitle}",newSeriesAnnounceSingle:"New data series: {seriesDesc}",newPointAnnounceSingle:"New data point: {pointDesc}",newSeriesAnnounceMultiple:"New data series in chart {chartTitle}: {seriesDesc}",newPointAnnounceMultiple:"New data point in chart {chartTitle}: {pointDesc}"},seriesTypeDescriptions:{boxplot:"Box plot charts are typically used to display groups of statistical data. Each data point in the chart can have up to 5 values: minimum, lower quartile, median, upper quartile, and maximum.",arearange:"Arearange charts are line charts displaying a range between a lower and higher value for each point.",areasplinerange:"These charts are line charts displaying a range between a lower and higher value for each point.",bubble:"Bubble charts are scatter charts where each data point also has a size value.",columnrange:"Columnrange charts are column charts displaying a range between a lower and higher value for each point.",errorbar:"Errorbar series are used to display the variability of the data.",funnel:"Funnel charts are used to display reduction of data in stages.",pyramid:"Pyramid charts consist of a single pyramid with item heights corresponding to each point value.",waterfall:"A waterfall chart is a column chart where each column contributes towards a total end value."},chartTypes:{emptyChart:"Empty chart",mapTypeDescription:"Map of {mapTitle} with {numSeries} data series.",unknownMap:"Map of unspecified region with {numSeries} data series.",combinationChart:"Combination chart with {numSeries} data series.",defaultSingle:"Chart with {numPoints} data {#eq numPoints 1}point{else}points{/eq}.",defaultMultiple:"Chart with {numSeries} data series.",splineSingle:"Line chart with {numPoints} data {#eq numPoints 1}point{else}points{/eq}.",splineMultiple:"Line chart with {numSeries} lines.",lineSingle:"Line chart with {numPoints} data {#eq numPoints 1}point{else}points{/eq}.",lineMultiple:"Line chart with {numSeries} lines.",columnSingle:"Bar chart with {numPoints} {#eq numPoints 1}bar{else}bars{/eq}.",columnMultiple:"Bar chart with {numSeries} data series.",barSingle:"Bar chart with {numPoints} {#eq numPoints 1}bar{else}bars{/eq}.",barMultiple:"Bar chart with {numSeries} data series.",pieSingle:"Pie chart with {numPoints} {#eq numPoints 1}slice{else}slices{/eq}.",pieMultiple:"Pie chart with {numSeries} pies.",scatterSingle:"Scatter chart with {numPoints} {#eq numPoints 1}point{else}points{/eq}.",scatterMultiple:"Scatter chart with {numSeries} data series.",boxplotSingle:"Boxplot with {numPoints} {#eq numPoints 1}box{else}boxes{/eq}.",boxplotMultiple:"Boxplot with {numSeries} data series.",bubbleSingle:"Bubble chart with {numPoints} {#eq numPoints 1}bubbles{else}bubble{/eq}.",bubbleMultiple:"Bubble chart with {numSeries} data series."},axis:{xAxisDescriptionSingular:"The chart has 1 X axis displaying {names[0]}. {ranges[0]}",xAxisDescriptionPlural:"The chart has {numAxes} X axes displaying {#each names}{#unless @first},{/unless}{#if @last} and{/if} {this}{/each}.",yAxisDescriptionSingular:"The chart has 1 Y axis displaying {names[0]}. {ranges[0]}",yAxisDescriptionPlural:"The chart has {numAxes} Y axes displaying {#each names}{#unless @first},{/unless}{#if @last} and{/if} {this}{/each}.",timeRangeDays:"Data range: {range} days.",timeRangeHours:"Data range: {range} hours.",timeRangeMinutes:"Data range: {range} minutes.",timeRangeSeconds:"Data range: {range} seconds.",rangeFromTo:"Data ranges from {rangeFrom} to {rangeTo}.",rangeCategories:"Data range: {numCategories} categories."},exporting:{chartMenuLabel:"Chart menu",menuButtonLabel:"View chart menu, {chartTitle}"},series:{summary:{default:"{series.name}, series {seriesNumber} of {chart.series.length} with {series.points.length} data {#eq series.points.length 1}point{else}points{/eq}.",defaultCombination:"{series.name}, series {seriesNumber} of {chart.series.length} with {series.points.length} data {#eq series.points.length 1}point{else}points{/eq}.",line:"{series.name}, line {seriesNumber} of {chart.series.length} with {series.points.length} data {#eq series.points.length 1}point{else}points{/eq}
23510.",lineCombination:"{series.name}, series {seriesNumber} of {chart.series.length}. Line with {series.points.length} data {#eq series.points.length 1}point{else}points{/eq}.",spline:"{series.name}, line {seriesNumber} of {chart.series.length} with {series.points.length} data {#eq series.points.length 1}point{else}points{/eq}.",splineCombination:"{series.name}, series {seriesNumber} of {chart.series.length}. Line with {series.points.length} data {#eq series.points.length 1}point{else}points{/eq}.",column:"{series.name}, bar series {seriesNumber} of {chart.series.length} with {series.points.length} {#eq series.points.length 1}bar{else}bars{/eq}.",columnCombination:"{series.name}, series {seriesNumber} of {chart.series.length}. Bar series with {series.points.length} {#eq series.points.length 1}bar{else}bars{/eq}.",bar:"{series.name}, bar series {seriesNumber} of {chart.series.length} with {series.points.length} {#eq series.points.length 1}bar{else}bars{/eq}.",barCombination:"{series.name}, series {seriesNumber} of {chart.series.length}. Bar series with {series.points.length} {#eq series.points.length 1}bar{else}bars{/eq}.",pie:"{series.name}, pie {seriesNumber} of {chart.series.length} with {series.points.length} {#eq series.points.length 1}slice{else}slices{/eq}.",pieCombination:"{series.name}, series {seriesNumber} of {chart.series.length}. Pie with {series.points.length} {#eq series.points.length 1}slice{else}slices{/eq}.",scatter:"{series.name}, scatter plot {seriesNumber} of {chart.series.length} with {series.points.length} {#eq series.points.length 1}point{else}points{/eq}.",scatterCombination:"{series.name}, series {seriesNumber} of {chart.series.length}, scatter plot with {series.points.length} {#eq series.points.length 1}point{else}points{/eq}.",boxplot:"{series.name}, boxplot {seriesNumber} of {chart.series.length} with {series.points.length} {#eq series.points.length 1}box{else}boxes{/eq}.",boxplotCombination:"{series.name}, series {seriesNumber} of {chart.series.length}. Boxplot with {series.points.length} {#eq series.points.length 1}box{else}boxes{/eq}.",bubble:"{series.name}, bubble series {seriesNumber} of {chart.series.length} with {series.points.length} {#eq series.points.length 1}bubble{else}bubbles{/eq}.",bubbleCombination:"{series.name}, series {seriesNumber} of {chart.series.length}. Bubble series with {series.points.length} {#eq series.points.length 1}bubble{else}bubbles{/eq}.",map:"{series.name}, map {seriesNumber} of {chart.series.length} with {series.points.length} {#eq series.points.length 1}area{else}areas{/eq}.",mapCombination:"{series.name}, series {seriesNumber} of {chart.series.length}. Map with {series.points.length} {#eq series.points.length 1}area{else}areas{/eq}.",mapline:"{series.name}, line {seriesNumber} of {chart.series.length} with {series.points.length} data {#eq series.points.length 1}point{else}points{/eq}.",maplineCombination:"{series.name}, series {seriesNumber} of {chart.series.length}. Line with {series.points.length} data {#eq series.points.length 1}point{else}points{/eq}.",mapbubble:"{series.name}, bubble series {seriesNumber} of {chart.series.length} with {series.points.length} {#eq series.points.length 1}bubble{else}bubbles{/eq}.",mapbubbleCombination:"{series.name}, series {seriesNumber} of {chart.series.length}. Bubble series with {series.points.length} {#eq series.points.length 1}bubble{else}bubbles{/eq}."},description:"{description}",xAxisDescription:"X axis, {name}",yAxisDescription:"Y axis, {name}",nullPointValue:"No value",pointAnnotationsDescription:"{#each annotations}Annotation: {this}{/each}"}}}}),i(t,"Accessibility/Options/DeprecatedOptions.js",[t["Core/Utilities.js"]],function(e){let{error:t,pick:i}=e;function s(e,t,s){let n=e,o,r=0;for(;r<t.length-1;++r)n=n[o=t[r]]=i(n[o],{});n[t[t.length-1]]=s}function n(e,i,n,o){function r(e,t){return t.reduce(function(e,t){return e[t]},e)}let a=r(e.options,i),l=r(e.options,n);Object.keys(o).forEach(function(r){let h=a[r];void 0!==h&&(s(l,o[r],h),t(32,!1,e,{[i.join(".")+"."+r]:n.join(".")+"."+o[r].join(".")}))})}return function(e){(function(e){let i=e.options.chart,s=e.options.accessibility||{};["description","typeDescription"].forEach(function(n){i[n]&&(s[n]=i[n],t(32,!1,e,{[`chart.${n}`]:`use accessibility.${n}`}))})}
23510)(e),function(e){e.axes.forEach(function(i){let s=i.options;s&&s.description&&(s.accessibility=s.accessibility||{},s.accessibility.description=s.description,t(32,!1,e,{"axis.description":"use axis.accessibility.description"}))})}(e),e.series&&function(e){let i={description:["accessibility","description"],exposeElementToA11y:["accessibility","exposeAsGroupOnly"],pointDescriptionFormatter:["accessibility","point","descriptionFormatter"],skipKeyboardNavigation:["accessibility","keyboardNavigation","enabled"],"accessibility.pointDescriptionFormatter":["accessibility","point","descriptionFormatter"]};e.series.forEach(function(n){Object.keys(i).forEach(function(o){let r=n.options[o];"accessibility.pointDescriptionFormatter"===o&&(r=n.options.accessibility&&n.options.accessibility.pointDescriptionFormatter),void 0!==r&&(s(n.options,i[o],"skipKeyboardNavigation"===o?!r:r),t(32,!1,e,{[`series.${o}`]:"series."+i[o].join(".")}))})})}(e),n(e,["accessibility"],["accessibility"],{pointDateFormat:["point","dateFormat"],pointDateFormatter:["point","dateFormatter"],pointDescriptionFormatter:["point","descriptionFormatter"],pointDescriptionThreshold:["series","pointDescriptionEnabledThreshold"],pointNavigationThreshold:["keyboardNavigation","seriesNavigation","pointNavigationEnabledThreshold"],pointValueDecimals:["point","valueDecimals"],pointValuePrefix:["point","valuePrefix"],pointValueSuffix:["point","valueSuffix"],screenReaderSectionFormatter:["screenReaderSection","beforeChartFormatter"],describeSingleSeries:["series","describeSingleSeries"],seriesDescriptionFormatter:["series","descriptionFormatter"],onTableAnchorClick:["screenReaderSection","onViewDataTableClick"],axisRangeDateFormat:["screenReaderSection","axisRangeDateFormat"]}),n(e,["accessibility","keyboardNavigation"],["accessibility","keyboardNavigation","seriesNavigation"],{skipNullPoints:["skipNullPoints"],mode:["mode"]}),n(e,["lang","accessibility"],["lang","accessibility"],{legendItem:["legend","legendItem"],legendLabel:["legend","legendLabel"],mapZoomIn:["zoom","mapZoomIn"],mapZoomOut:["zoom","mapZoomOut"],resetZoomButton:["zoom","resetZoomButton"],screenReaderRegionLabel:["screenReaderSection","beforeRegionLabel"],rangeSelectorButton:["rangeSelector","buttonText"],rangeSelectorMaxInput:["rangeSelector","maxInputLabel"],rangeSelectorMinInput:["rangeSelector","minInputLabel"],svgContainerEnd:["screenReaderSection","endOfChartMarker"],viewAsDataTable:["table","viewAsDataTableButtonText"],tableSummary:["table","tableSummary"]})}}),i(t,"Accessibility/Accessibility.js",[t["Core/Defaults.js"],t["Core/Globals.js"],t["Core/Utilities.js"],t["Accessibility/Utils/HTMLUtilities.js"],t["Accessibility/A11yI18n.js"],t["Accessibility/Components/ContainerComponent.js"],t["Accessibility/FocusBorder.js"],t["Accessibility/Components/InfoRegionsComponent.js"],t["Accessibility/KeyboardNavigation.js"],t["Accessibility/Components/LegendComponent.js"],t["Accessibility/Components/MenuComponent.js"],t["Accessibility/Components/NavigatorComponent.js"],t["Accessibility/Components/SeriesComponent/NewDataAnnouncer.js"],t["Accessibility/ProxyProvider.js"],t["Accessibility/Components/RangeSelectorComponent.js"],t["Accessibility/Components/SeriesComponent/SeriesComponent.js"],t["Accessibility/Components/ZoomComponent.js"],t["Accessibility/HighContrastMode.js"],t["Accessibility/HighContrastTheme.js"],t["Accessibility/Options/A11yDefaults.js"],t["Accessibility/Options/LangDefaults.js"],t["Accessibility/Options/DeprecatedOptions.js"]],function(e,t,i,s,n,o,r,a,l,h,c,d,u,p,g,m,b,y,f,x,v,A){let{defaultOptions:C}=e,{doc:w}=t,{addEvent:E,extend:T,fireEvent:M,merge:S}=i,{removeElement:k}=s;class P{constructor(e){this.init(e)}init(e){if(this.chart=e,!w.addEventListener){this.zombie=!0,this.components={},e.renderTo.setAttribute("aria-hidden",!0);return}A(e),this.proxyProvider=new p(this.chart),this.initComponents(),this.keyboardNavigation=new l(e,this.components)}initComponents(){let e=this.chart,t=this.proxyProvider,i=e.options.accessibility;this.components={container:new o,infoRegions:new a,legend:new h,chartMenu:new c,rangeSelector:new g,series:new m,zoom:new b,navigator:new d},i.customComponents&&T(this.components,i.customComponents);let s=this.components;
23510this.getComponentOrder().forEach(function(i){s[i].initBase(e,t),s[i].init()})}getComponentOrder(){return this.components?this.components.series?["series"].concat(Object.keys(this.components).filter(e=>"series"!==e)):Object.keys(this.components):[]}update(){let e=this.components,t=this.chart,i=t.options.accessibility;M(t,"beforeA11yUpdate"),t.types=this.getChartTypes();let s=i.keyboardNavigation.order;this.proxyProvider.updateGroupOrder(s),this.getComponentOrder().forEach(function(i){e[i].onChartUpdate(),M(t,"afterA11yComponentUpdate",{name:i,component:e[i]})}),this.keyboardNavigation.update(s),!t.highContrastModeActive&&!1!==i.highContrastMode&&(y.isHighContrastModeActive()||!0===i.highContrastMode)&&y.setHighContrastTheme(t),M(t,"afterA11yUpdate",{accessibility:this})}destroy(){let e=this.chart||{},t=this.components;Object.keys(t).forEach(function(e){t[e].destroy(),t[e].destroyBase()}),this.proxyProvider&&this.proxyProvider.destroy(),e.announcerContainer&&k(e.announcerContainer),this.keyboardNavigation&&this.keyboardNavigation.destroy(),e.renderTo&&e.renderTo.setAttribute("aria-hidden",!0),e.focusElement&&e.focusElement.removeFocusBorder()}getChartTypes(){let e={};return this.chart.series.forEach(function(t){e[t.type]=1}),Object.keys(e)}}return function(e){function t(){this.accessibility&&this.accessibility.destroy()}function i(){this.a11yDirty&&this.renderTo&&(delete this.a11yDirty,this.updateA11yEnabled());let e=this.accessibility;e&&!e.zombie&&(e.proxyProvider.updateProxyElementPositions(),e.getComponentOrder().forEach(function(t){e.components[t].onChartRender()}))}function s(e){let t=e.options.accessibility;t&&(t.customComponents&&(this.options.accessibility.customComponents=t.customComponents,delete t.customComponents),S(!0,this.options.accessibility,t),this.accessibility&&this.accessibility.destroy&&(this.accessibility.destroy(),delete this.accessibility)),this.a11yDirty=!0}function o(){let t=this.accessibility,i=this.options.accessibility;i&&i.enabled?t&&!t.zombie?t.update():(this.accessibility=t=new e(this),t&&!t.zombie&&t.update()):t?(t.destroy&&t.destroy(),delete this.accessibility):this.renderTo.setAttribute("aria-hidden",!0)}function a(){this.series.chart.accessibility&&(this.series.chart.a11yDirty=!0)}e.i18nFormat=n.i18nFormat,e.compose=function(e,d,p,b,y,f){l.compose(e),u.compose(b),h.compose(e,d),c.compose(e),m.compose(e,p,b),n.compose(e),r.compose(e,y),f&&g.compose(e,f);let x=e.prototype;x.updateA11yEnabled||(x.updateA11yEnabled=o,E(e,"destroy",t),E(e,"render",i),E(e,"update",s),["addSeries","init"].forEach(t=>{E(e,t,function(){this.a11yDirty=!0})}),["afterApplyDrilldown","drillupall"].forEach(t=>{E(e,t,function(){let e=this.accessibility;e&&!e.zombie&&e.update()})}),E(p,"update",a),["update","updatedData","remove"].forEach(e=>{E(b,e,function(){this.chart.accessibility&&(this.chart.a11yDirty=!0)})}))}}(P||(P={})),S(!0,C,x,{accessibility:{highContrastTheme:f},lang:v}),P}),i(t,"masters/modules/accessibility.src.js",[t["Core/Globals.js"],t["Accessibility/Accessibility.js"],t["Accessibility/AccessibilityComponent.js"],t["Accessibility/Utils/ChartUtilities.js"],t["Accessibility/Utils/HTMLUtilities.js"],t["Accessibility/KeyboardNavigationHandler.js"],t["Accessibility/Components/SeriesComponent/SeriesDescriber.js"]],function(e,t,i,s,n,o,r){return e.i18nFormat=t.i18nFormat,e.A11yChartUtilities=s,e.A11yHTMLUtilities=n,e.AccessibilityComponent=i,e.KeyboardNavigationHandler=o,e.SeriesAccessibilityDescriber=r,t.compose(e.Chart,e.Legend,e.Point,e.Series,e.SVGElement,e.RangeSelector),e})}); 23511},{}],112:[function(require,module,exports){ 23512!/** 23513 * Highcharts JS v11.4.3 (2024-05-22) 23514 * 23515 * Data module 23516 * 23517 * (c) 2012-2024 Torstein Honsi 23518 * 23519 * License: www.highcharts.com/license 23520 */function(e){"object"==typeof module&&module.exports?(e.default=e,module.exports=e):"function"==typeof define&&define.amd?define("highcharts/modules/data",["highcharts"],function(t){return e(t),e.Highcharts=t,e}):e("undefined"!=typeof Highcharts?Highcharts:void 0)}(function(e){"use strict";var t=e?e._modules:{};function s(e,t,s,r){e.hasOwnProperty(t)||(e[t]=r.apply(null,s),"function"==typeof CustomEvent&&window.dispatchEvent(new CustomEvent("HighchartsM
23520oduleLoaded",{detail:{path:t,module:e[t]}})))}s(t,"Core/HttpUtilities.js",[t["Core/Globals.js"],t["Core/Utilities.js"]],function(e,t){let{win:s}=e,{discardElement:r,objectEach:i}=t,a={ajax:function(e){let t={json:"application/json",xml:"application/xml",text:"text/plain",octet:"application/octet-stream"},s=new XMLHttpRequest;function r(t,s){e.error&&e.error(t,s)}if(!e.url)return!1;s.open((e.type||"get").toUpperCase(),e.url,!0),e.headers&&e.headers["Content-Type"]||s.setRequestHeader("Content-Type",t[e.dataType||"json"]||t.text),i(e.headers,function(e,t){s.setRequestHeader(t,e)}),e.responseType&&(s.responseType=e.responseType),s.onreadystatechange=function(){let t;if(4===s.readyState){if(200===s.status){if("blob"!==e.responseType&&(t=s.responseText,"json"===e.dataType))try{t=JSON.parse(t)}catch(e){if(e instanceof Error)return r(s,e)}return e.success&&e.success(t,s)}r(s,s.responseText)}},e.data&&"string"!=typeof e.data&&(e.data=JSON.stringify(e.data)),s.send(e.data)},getJSON:function(e,t){a.ajax({url:e,success:t,dataType:"json",headers:{"Content-Type":"text/plain"}})},post:function(e,t,a){let n=new s.FormData;i(t,function(e,t){n.append(t,e)}),n.append("b64","true");let{filename:o,type:l}=t;return s.fetch(e,{method:"POST",body:n,...a}).then(e=>{e.ok&&e.text().then(e=>{let t=document.createElement("a");t.href=`data:${l};base64,${e}`,t.download=o,t.click(),r(t)})})}};return a}),s(t,"Extensions/Data.js",[t["Core/Chart/Chart.js"],t["Core/Defaults.js"],t["Core/Globals.js"],t["Core/HttpUtilities.js"],t["Core/Series/Point.js"],t["Core/Series/SeriesRegistry.js"],t["Core/Utilities.js"]],function(e,t,s,r,i,a,n){let{getOptions:o}=t,{doc:l}=s,{ajax:u}=r,{seriesTypes:h}=a,{addEvent:d,defined:m,extend:c,fireEvent:p,isNumber:f,merge:g,objectEach:C,pick:x,splat:y}=n;function T(e){return!!(e&&(e.rowsURL||e.csvURL||e.columnsURL))}class v{static data(e,t={},s){return new v(e,t,s)}static rowsToColumns(e){let t,s,r,i,a;if(e)for(t=0,a=[],s=e.length;t<s;t++)for(r=0,i=e[t].length;r<i;r++)a[r]||(a[r]=[]),a[r][t]=e[t][r];return a}constructor(e,t={},s){this.rowsToColumns=v.rowsToColumns,this.dateFormats={"YYYY/mm/dd":{regex:/^([0-9]{4})[\-\/\.]([0-9]{1,2})[\-\/\.]([0-9]{1,2})$/,parser:function(e){return e?Date.UTC(+e[1],e[2]-1,+e[3]):NaN}},"dd/mm/YYYY":{regex:/^([0-9]{1,2})[\-\/\.]([0-9]{1,2})[\-\/\.]([0-9]{4})$/,parser:function(e){return e?Date.UTC(+e[3],e[2]-1,+e[1]):NaN},alternative:"mm/dd/YYYY"},"mm/dd/YYYY":{regex:/^([0-9]{1,2})[\-\/\.]([0-9]{1,2})[\-\/\.]([0-9]{4})$/,parser:function(e){return e?Date.UTC(+e[3],e[1]-1,+e[2]):NaN}},"dd/mm/YY":{regex:/^([0-9]{1,2})[\-\/\.]([0-9]{1,2})[\-\/\.]([0-9]{2})$/,parser:function(e){if(!e)return NaN;let t=new Date,s=+e[3];return s>t.getFullYear()-2e3?s+=1900:s+=2e3,Date.UTC(s,e[2]-1,+e[1])},alternative:"mm/dd/YY"},"mm/dd/YY":{regex:/^([0-9]{1,2})[\-\/\.]([0-9]{1,2})[\-\/\.]([0-9]{2})$/,parser:function(e){return e?Date.UTC(+e[3]+2e3,e[1]-1,+e[2]):NaN}}},this.chart=s,this.chartOptions=t,this.options=e,this.rawColumns=[],this.init(e,t,s)}init(e,t,s){let r=e.decimalPoint,i;t&&(this.chartOptions=t),s&&(this.chart=s),"."!==r&&","!==r&&(r=void 0),this.options=e,this.columns=e.columns||this.rowsToColumns(e.rows)||[],this.firstRowAsNames=x(e.firstRowAsNames,this.firstRowAsNames,!0),this.decimalRegex=r&&RegExp("^(-?[0-9]+)"+r+"([0-9]+)$"),void 0!==this.liveDataTimeout&&clearTimeout(this.liveDataTimeout),this.rawColumns=[],this.columns.length&&(this.dataFound(),i=!T(e)),i||(i=this.fetchLiveData()),i||(i=!!this.parseCSV().length),i||(i=!!this.parseTable().length),i||(i=this.parseGoogleSpreadsheet()),!i&&e.afterComplete&&e.afterComplete()}getColumnDistribution(){let e=this.chartOptions,t=this.options,s=[],r=function(e){return(h[e||"line"].prototype.pointArrayMap||[0]).length},i=function(e){return h[e||"line"].prototype.pointArrayMap},a=e&&e.chart&&e.chart.type,n=[],o=[],l=t&&t.seriesMapping||e&&e.series&&e.series.map(function(){return{x:0}})||[],u=0,d;(e&&e.series||[]).forEach(e=>{n.push(r(e.type||a))}),l.forEach(e=>{s.push(e.x||0)}),0===s.length&&s.push(0),l.forEach(t=>{let s=new R,l=n[u]||r(a),h=(e&&e.series||[])[u]||{},c=i(h.type||a),p=c||["y"];for((m(t.x)||h.isCartesian||!c)&&s.addColumnReader(t.x,"x"),C(t,function(e,t){"x"!==t&&s.addColumnReader(e,t)}),d=0;d<l;d++)s.hasReader(p[d])||s.addColumnReader(void 0,p[d]);o.push(s),u++});let c=i(a);void 0===c&&(c=["y"]),this.valueCount={global:r(a),xColumns:s,individual:n,seriesBuilders:o,globalPointArrayMap:c}}dataFound(){this.options.switchRowsAndColumns&&(this.columns=this.rowsToColumns(this.columns)),this.getColumnDistribution(),this.parseTypes(),!1!==this.parsed()&&this.complete()}parseCSV(e){let t=this,s=this.columns=[],r=e||this.options,i=void 0!==r.startColumn&&r.startColumn?r.startColumn:0,a=r.endColumn||Number.MAX_VALUE,n=[],o={",":0,";":0," ":0},l=r.csv,u=void 0!==r.startRow&&r.startRow?r.startRow:0,h=r.endRow||Number.MAX_VALUE,d,m,c=0;if(l&&r.beforeParse&&(l=r.beforeParse.call(this,l)),l){if(m=l.replace(/\r\n/g,"\n").replace(/\r/g,"\n").split(r.lineDelimiter||"\n"),(!u||u<0)&&(u=0),(!h||h>=m.length)&&(h=m.length-1),r.itemDelimiter)d=r.itemDelimiter;else{let e,s,i;d=null,e=0,s=0,i=!1,m.some(function(t,r){let i=!1,a,n,l,u="";if(r>13)return!0;for(let r=0;r<t.length;r++){if(a=t[r],n=t[r+1],l=t[r-1],"#"===a)return;if('"'===a){if(i){if('"'!==l&&'"'!==n){for(;" "===n&&r<t.length;)n=t[++r];void 0!==o[n]&&o[n]++,i=!1}}else i=!0}else void 0!==o[a]?(isNaN(Date.parse(u=u.trim()))?(isNaN(u)||!isFinite(u))&&o[a]++:o[a]++,u=""):u+=a;","===a&&s++,"."===a&&e++}}),o[";"]>o[","]?i=";":(o[","],o[";"],i=","),r.decimalPoint||(e>s?r.decimalPoint=".":r.decimalPoint=",",t.decimalRegex=RegExp("^(-?[0-9]+)"+r.decimalPoint+"([0-9]+)$")),d=i}let e=0;for(c=u;c<=h;c++)"#"===m[c][0]?e++:function(e,t,o,l){let u=0,h="",m="",c="",p="",f=0,g=0;function C(t){h=e[t],m=e[t-1],c=e[t+1]}function x(e){n.length<g+1&&n.push([e]),n[g][n[g].length-1]!==e&&n[g].push(e)}function y(){if(i>f||f>a){++f,p="";return}
23520r.columnTypes||(!isNaN(parseFloat(p))&&isFinite(p)?(p=parseFloat(p),x("number")):isNaN(Date.parse(p))?x("string"):(p=p.replace(/\//g,"-"),x("date"))),s.length<g+1&&s.push([]),s[g][t]=p,p="",++g,++f}if(e.trim().length&&"#"!==e.trim()[0]){for(;u<e.length;u++)if(C(u),'"'===h)for(C(++u);u<e.length&&('"'!==h||'"'===m||'"'===c);)('"'!==h||'"'===h&&'"'!==m)&&(p+=h),C(++u);else h===d?y():p+=h;y()}}(m[c],c-u-e);(!r.columnTypes||0===r.columnTypes.length)&&n.length&&n[0].length&&"date"===n[0][1]&&!r.dateFormat&&(r.dateFormat=function(e,s){let i="YYYY/mm/dd",a=[],n=[],o,l=[],u,h=0,d=!1,m;for((!s||s>e.length)&&(s=e.length);h<s;h++)if(void 0!==e[h]&&e[h]&&e[h].length)for(m=0,o=e[h].trim().replace(/\//g," ").replace(/\-/g," ").replace(/\./g," ").split(" "),l=["","",""];m<o.length;m++)m<l.length&&(o[m]=parseInt(o[m],10),o[m]&&(n[m]=!n[m]||n[m]<o[m]?o[m]:n[m],void 0!==a[m]?a[m]!==o[m]&&(a[m]=!1):a[m]=o[m],o[m]>31?o[m]<100?l[m]="YY":l[m]="YYYY":o[m]>12&&o[m]<=31?(l[m]="dd",d=!0):l[m].length||(l[m]="mm")));if(d){for(m=0;m<a.length;m++)!1!==a[m]?n[m]>12&&"YY"!==l[m]&&"YYYY"!==l[m]&&(l[m]="YY"):n[m]>12&&"mm"===l[m]&&(l[m]="dd");return(3===l.length&&"dd"===l[1]&&"dd"===l[2]&&(l[2]="YY"),u=l.join("/"),(r.dateFormats||t.dateFormats)[u])?u:(p("deduceDateFailed"),i)}return i}(s[0])),this.dataFound()}return s}parseTable(){let e=this.options,t=this.columns||[],s=e.startRow||0,r=e.endRow||Number.MAX_VALUE,i=e.startColumn||0,a=e.endColumn||Number.MAX_VALUE;if(e.table){let n=e.table;"string"==typeof n&&(n=l.getElementById(n)),[].forEach.call(n.getElementsByTagName("tr"),(e,n)=>{n>=s&&n<=r&&[].forEach.call(e.children,(e,r)=>{let o=t[r-i],l=1;if(("TD"===e.tagName||"TH"===e.tagName)&&r>=i&&r<=a)for(t[r-i]||(t[r-i]=[]),t[r-i][n-s]=e.innerHTML;n-s>=l&&void 0===o[n-s-l];)o[n-s-l]=null,l++})}),this.dataFound()}return t}fetchLiveData(){let e=this,t=this.chart,s=this.options,r=s.enablePolling,i=g(s),a=0,n=1e3*(s.dataRefreshRate||2);return!!T(s)&&(n<1e3&&(n=1e3),delete s.csvURL,delete s.rowsURL,delete s.columnsURL,function o(l){function h(i,h,d){if(!i||!/^(http|\/|\.\/|\.\.\/)/.test(i))return i&&s.error&&s.error("Invalid URL"),!1;function m(){r&&t.liveDataURL===i&&(e.liveDataTimeout=setTimeout(o,n))}return l&&(clearTimeout(e.liveDataTimeout),t.liveDataURL=i),u({url:i,dataType:d||"json",success:function(e){t&&t.series&&h(e),m()},error:function(e,t){return++a<3&&m(),s.error&&s.error(t,e)}}),!0}h(i.csvURL,function(e){t.update({data:{csv:e}})},"text")||h(i.rowsURL,function(e){t.update({data:{rows:e}})})||h(i.columnsURL,function(e){t.update({data:{columns:e}})})}(!0),T(s))}parseGoogleSpreadsheet(){let e=this,t=this.options,s=t.googleSpreadsheetKey,r=this.chart,i=Math.max(1e3*(t.dataRefreshRate||2),4e3),a=()=>{if(t.googleSpreadsheetRange)return t.googleSpreadsheetRange;let e="ABCDEFGHIJKLMNOPQRSTUVWXYZ",s=(e.charAt(t.startColumn||0)||"A")+((t.startRow||0)+1),r=e.charAt(x(t.endColumn,-1))||"ZZ";return m(t.endRow)&&(r+=t.endRow+1),`${s}:${r}`};return s&&(delete t.googleSpreadsheetKey,function r(n){u({url:["https://sheets.googleapis.com/v4/spreadsheets",s,"values",a(),"?alt=json&majorDimension=COLUMNS&valueRenderOption=UNFORMATTED_VALUE&dateTimeRenderOption=FORMATTED_STRING&key="+t.googleAPIKey].join("/"),dataType:"json",success:function(s){n(s),t.enablePolling&&(e.liveDataTimeout=setTimeout(function(){r(n)},i))},error:function(e,s){return t.error&&t.error(s,e)}})}(function(t){let s=t.values;if(!s||0===s.length)return!1;let i=s.reduce((e,t)=>Math.max(e,t.length),0);s.forEach(e=>{for(let t=0;t<i;t++)void 0===e[t]&&(e[t]=null)}),r&&r.series?r.update({data:{columns:s}}):(e.columns=s,e.dataFound())})),!1}trim(e,t){return"string"==typeof e&&(e=e.replace(/^\s+|\s+$/g,""),t&&/^-?[0-9\s]+$/.test(e)&&(e=e.replace(/\s/g,"")),this.decimalRegex&&(e=e.replace(this.decimalRegex,"$1.$2"))),e}parseTypes(){let e=this.columns||[],t=e.length;for(;t--;)this.parseColumn(e[t],t)}parseColumn(e,t){let s=this.rawColumns,r=this.columns,i=this.firstRowAsNames,a=-1!==this.valueCount.xColumns.indexOf(t),n=[],o=this.chartOptions,l=(this.options.columnTypes||[])[t],u=a&&o&&o.xAxis&&"category"===y(o.xAxis)[0].type||"string"===l,h=m(e.name),d=e.length,c,p,g,C,x,T,v;for(s[t]||(s[t]=[]);d--;)c=n[d]||e[d],g=this.trim(c),p=parseFloat(C=this.trim(c,!0)),void 0===s[t][d]&&(s[t][d]=g),u||0===d&&i&&
23520!h?e[d]=""+g:+C===p?(e[d]=p,p>31536e6&&"float"!==l?e.isDatetime=!0:e.isNumeric=!0,void 0!==e[d+1]&&(v=p>e[d+1])):(g&&g.length&&(x=this.parseDate(c)),a&&f(x)&&"float"!==l?(n[d]=c,e[d]=x,e.isDatetime=!0,void 0!==e[d+1]&&((T=x>e[d+1])!==v&&void 0!==v&&(this.alternativeFormat?(this.dateFormat=this.alternativeFormat,d=e.length,this.alternativeFormat=this.dateFormats[this.dateFormat].alternative):e.unsorted=!0),v=T)):(e[d]=""===g?null:g,0!==d&&(e.isDatetime||e.isNumeric)&&(e.mixed=!0)));if(a&&e.mixed&&(r[t]=s[t]),a&&v&&this.options.sort)for(t=0;t<r.length;t++)r[t].reverse(),i&&r[t].unshift(r[t].pop())}parseDate(e){let t=this.options.parseDate,s,r,i,a=this.options.dateFormat||this.dateFormat,n;if(t)s=t(e);else if("string"==typeof e){if(a)(i=this.dateFormats[a])||(i=this.dateFormats["YYYY/mm/dd"]),(n=e.match(i.regex))&&(s=i.parser(n));else for(r in this.dateFormats)if(i=this.dateFormats[r],n=e.match(i.regex)){this.dateFormat=a=r,this.alternativeFormat=i.alternative,s=i.parser(n);break}!n&&(e.match(/:.+(GMT|UTC|[Z+-])/)&&(e=e.replace(/\s*(?:GMT|UTC)?([+-])(\d\d)(\d\d)$/,"$1$2:$3").replace(/(?:\s+|GMT|UTC)([+-])/,"$1").replace(/(\d)\s*(?:GMT|UTC|Z)$/,"$1+00:00")),"object"==typeof(n=Date.parse(e))&&null!==n&&n.getTime?s=n.getTime()-6e4*n.getTimezoneOffset():f(n)&&(s=n-6e4*new Date(n).getTimezoneOffset()))}return s}getData(){if(this.columns)return this.rowsToColumns(this.columns).slice(1)}parsed(){if(this.options.parsed)return this.options.parsed.call(this,this.columns)}complete(){let e,t,s,r,i,a,n,o,l,u,h,d;let c=this.columns,p=this.options,f=[];if([].length=c.length,p.complete||p.afterComplete){if(this.firstRowAsNames)for(r=0;r<c.length;r++){let e=c[r];m(e.name)||(e.name=x(e.shift(),"").toString())}for(n=0,t=[],u=function(e,t){let s,r,i;let a=[],n=[];for(r=0;r<e;r+=1)a.push(!0);for(s=0;s<t.length;s+=1)for(r=0,i=t[s].getReferencedColumnIndexes();r<i.length;r+=1)a[i[r]]=!1;for(r=0;r<a.length;r+=1)a[r]&&n.push(r);return n}(c.length,this.valueCount.seriesBuilders);n<this.valueCount.seriesBuilders.length;n++)(l=this.valueCount.seriesBuilders[n]).populateColumns(u)&&f.push(l);for(;u.length>0;){for((l=new R).addColumnReader(0,"x"),-1!==(d=u.indexOf(0))&&u.splice(d,1),r=0;r<this.valueCount.global;r++)l.addColumnReader(void 0,this.valueCount.globalPointArrayMap[r]);l.populateColumns(u)&&f.push(l)}if(f.length>0&&f[0].readers.length>0&&void 0!==(h=c[f[0].readers[0].columnIndex])&&(h.isDatetime?e="datetime":h.isNumeric||(e="category")),"category"===e)for(n=0;n<f.length;n++)for(a=0,l=f[n];a<l.readers.length;a++)"x"===l.readers[a].configName&&(l.readers[a].configName="name");for(n=0;n<f.length;n++){for(i=0,l=f[n],s=[];i<c[0].length;i++)s[i]=l.read(c,i);t[n]={data:s},l.name&&(t[n].name=l.name),"category"===e&&(t[n].turboThreshold=0)}o={series:t},e&&(o.xAxis={type:e},"category"===e&&(o.xAxis.uniqueNames=!1)),p.complete&&p.complete(o),p.afterComplete&&p.afterComplete(o)}}update(e,t){let s=this.chart,r=s.options;e&&(e.afterComplete=function(e){e&&(e.xAxis&&s.xAxis[0]&&e.xAxis.type===s.xAxis[0].options.type&&delete e.xAxis,s.update(e,t,!0))},g(!0,r.data,e),r.data&&r.data.googleSpreadsheetKey&&!e.columns&&delete r.data.columns,this.init(r.data))}}d(e,"init",function(e){let t=this,s=e.args[1],r=o().data,i=e.args[0]||{};if((r||i&&i.data)&&!t.hasDataDef){t.hasDataDef=!0;let a=g(r,i.data);t.data=new v(c(a,{afterComplete:function(e){let r,a;if(Object.hasOwnProperty.call(i,"series")){if("object"==typeof i.series)for(r=Math.max(i.series.length,e&&e.series?e.series.length:0);r--;)a=i.series[r]||{},i.series[r]=g(a,e&&e.series?e.series[r]:{});else delete i.series}i=g(e,i),t.init(i,s)}}),i,t),e.preventDefault()}});class R{constructor(){this.readers=[],this.pointIsArray=!0}populateColumns(e){let t=!0;return this.readers.forEach(t=>{void 0===t.columnIndex&&(t.columnIndex=e.shift())}),this.readers.forEach(e=>{void 0===e.columnIndex&&(t=!1)}),t}read(e,t){let s=this.pointIsArray,r=s?[]:{};if(this.readers.forEach(a=>{let n=e[a.columnIndex][t];s?r.push(n):a.configName.indexOf(".")>0?i.prototype.setNestedProperty(r,n,a.configName):r[a.configName]=n}),void 0===this.name&&this.readers.length>=2){let t=[];
23520this.readers.forEach(function(e){("x"===e.configName||"name"===e.configName||"y"===e.configName)&&void 0!==e.columnIndex&&t.push(e.columnIndex)}),t.length>=2&&(t.shift(),t.sort(function(e,t){return e-t})),this.name=e[x(t.shift(),0)].name}return r}addColumnReader(e,t){this.readers.push({columnIndex:e,configName:t}),"x"===t||"y"===t||void 0===t||(this.pointIsArray=!1)}getReferencedColumnIndexes(){let e,t;let s=[];for(e=0;e<this.readers.length;e+=1)void 0!==(t=this.readers[e]).columnIndex&&s.push(t.columnIndex);return s}hasReader(e){let t;for(t=0;t<this.readers.length;t+=1)if(this.readers[t].configName===e)return!0}}return v}),s(t,"masters/modules/data.src.js",[t["Core/Globals.js"],t["Core/HttpUtilities.js"],t["Extensions/Data.js"]],function(e,t,s){return e.Data=e.Data||s,e.HttpUtilities=e.HttpUtilities||t,e.ajax=e.HttpUtilities.ajax,e.data=e.Data.data,e.getJSON=e.HttpUtilities.getJSON,e.post=e.HttpUtilities.post,e})}); 23521},{}],113:[function(require,module,exports){ 23522!/** 23523 * Highcharts JS v11.4.3 (2024-05-22) 23524 * 23525 * Exporting module 23526 * 23527 * (c) 2010-2024 Torstein Honsi 23528 * 23529 * License: www.highcharts.com/license 23530 */function(e){"object"==typeof module&&module.exports?(e.default=e,module.exports=e):"function"==typeof define&&define.amd?define("highcharts/modules/exporting",["highcharts"],function(t){return e(t),e.Highcharts=t,e}):e("undefined"!=typeof Highcharts?Highcharts:void 0)}(function(e){"use strict";var t=e?e._modules:{};function n(e,t,n,i){e.hasOwnProperty(t)||(e[t]=i.apply(null,n),"function"==typeof CustomEvent&&window.dispatchEvent(new CustomEvent("HighchartsModuleLoaded",{detail:{path:t,module:e[t]}})))}n(t,"Core/Chart/ChartNavigationComposition.js",[],function(){var e;return function(e){e.compose=function(e){return e.navigation||(e.navigation=new t(e)),e};class t{constructor(e){this.updates=[],this.chart=e}addUpdate(e){this.chart.navigation.updates.push(e)}update(e,t){this.updates.forEach(n=>{n.call(this.chart,e,t)})}}e.Additions=t}(e||(e={})),e}),n(t,"Extensions/Exporting/ExportingDefaults.js",[t["Core/Globals.js"]],function(e){let{isTouchDevice:t}=e;return{exporting:{allowTableSorting:!0,type:"image/png",url:"https://export.highcharts.com/",pdfFont:{normal:void 0,bold:void 0,bolditalic:void 0,italic:void 0},printMaxWidth:780,scale:2,buttons:{contextButton:{className:"highcharts-contextbutton",menuClassName:"highcharts-contextmenu",symbol:"menu",titleKey:"contextButtonTitle",menuItems:["viewFullscreen","printChart","separator","downloadPNG","downloadJPEG","downloadPDF","downloadSVG"]}},menuItemDefinitions:{viewFullscreen:{textKey:"viewFullscreen",onclick:function(){this.fullscreen&&this.fullscreen.toggle()}},printChart:{textKey:"printChart",onclick:function(){this.print()}},separator:{separator:!0},downloadPNG:{textKey:"downloadPNG",onclick:function(){this.exportChart()}},downloadJPEG:{textKey:"downloadJPEG",onclick:function(){this.exportChart({type:"image/jpeg"})}},downloadPDF:{textKey:"downloadPDF",onclick:function(){this.exportChart({type:"application/pdf"})}},downloadSVG:{textKey:"downloadSVG",onclick:function(){this.exportChart({type:"image/svg+xml"})}}}},lang:{viewFullscreen:"View in full screen",exitFullscreen:"Exit from full screen",printChart:"Print chart",downloadPNG:"Download PNG image",downloadJPEG:"Download JPEG image",downloadPDF:"Download PDF document",downloadSVG:"Download SVG vector image",contextButtonTitle:"Chart context menu"},navigation:{buttonOptions:{symbolSize:14,symbolX:14.5,symbolY:13.5,align:"right",buttonSpacing:3,height:28,verticalAlign:"top",width:28,symbolFill:"#666666",symbolStroke:"#666666",symbolStrokeWidth:3,theme:{fill:"#ffffff",padding:5,stroke:"none","stroke-linecap":"round"}},menuStyle:{border:"none",borderRadius:"3px",background:"#ffffff",padding:"0.5em"},menuItemStyle:{background:"none",borderRadius:"3px",color:"#333333",padding:"0.5em",fontSize:t?"0.9em":"0.8em",transition:"background 250ms, color 250ms"},menuItemHoverStyle:{background:"#f2f2f2"}}}}),n(t,"Extensions/Exporting/ExportingSymbols.js",[],function(){var e;return function(e){let t=[];function n(e,t,n,i){return[["M",e,t+2.5],["L",e+n,t+2.5],["M",e,t+i/2+.5],["L",e+n,t+i/2+.5],["M",e,t+i-1.5],["L",e+n,t+i-1.5]]}function i(e,t,n,i){let o=i/3-2;return[].concat(this.circle(n-o,t,o,o),this.circle(n-o,t+o+4,o,o),this.circle(n-o,t+2*(o+4),o,o))}e.compose=function(e){if(-1===t.indexOf(e)){t.push(e);let o=e.prototype.symbols;o.menu=n,o.menuball=i.bind(o)}}}(e||(e={})),e}),n(t,"Extensions/Exporting/Fullscreen.js",[t["Core/Renderer/HTML/AST.js"],t["Core/Globals.js"],t["Core/Utilities.js"]],function(e,t,n){let{composed:i}=t,{addEvent:o,fireEvent:r,pushUnique:s}=n;function l(){this.fullscreen=new a(this)}class a{static compose(e){s(i,"Fullscreen")&&o(e,"beforeRender",l)}constructor(e){this.chart=e,this.isOpen=!1;let t=e.renderTo;!this.browserProps&&("function"==typeof t.requestFullscreen?this.browserProps={fullscreenChange:"fullscreenchange",requestFullscreen:"requestFullscreen",exitFullscreen:"exitFullscreen"}:t.mozRequestFullScreen?this.browserProps={fullscreenChange:"mozfullscreenchange",requestFullscreen:"mozRequestFullScreen",exitFullscreen:"mozCancelFullScreen"}:t.webkitRequestFullScreen?this.browserProps={fullscreenChange:"webkitfullscreenchange",requestFullscreen:"webkitRequestFullScreen",exitFullscreen:"webkitExitFullscreen"}:t.msRequestFullscreen&&(this.browserProps={fullscreenChange:"MSFullscreenChange",requestFullscreen:"msRequestFullscreen",exitFullscreen:"msExitFullscreen"}))}close(){let e=this,t=e.chart,n=t.options.chart;r(t,"fullscreenClose",null,function(){e.isOpen&&e.browserProps&&t.container.ownerDocument instanceof Document&&t.container.ownerDocument[e.browserProps.exitFullscreen](),e.unbindFullscreenEvent&&(e.unbindFullscreenEvent=e.unbindFullscreenEvent()),t.setSize(e.origWidth,e.origHeight,!1),e.origWidth=void 0,e.origHeight=void 0,n.width=e.origWidthOption,n.height=e.origHeightOption,e.origWidthOption=void 0,e.origHeightOption=void 0,e.isOpen=!1,e.setButtonText()})}open(){let e=this,t=e.chart,n=t.options.chart;r(t,"fullscreenOpen",null,function(){if(n&&(e.origWidthOption=n.width,e.origHeightOption=n.height),e.origWidth=t.chartWidth,e.origHeight=t.chartHeight,e.browserProps){let n=o(t.container.ownerDocument,e.browserProps.fullscreenChange,function(){e.isOpen?(e.isOpen=!1,e.close()):(t.setSize(null,null,!1),e.isOpen=!0,e.setButtonText())}),i=o(t,"destroy",n);e.unbindFullscreenEvent=()=>{n(),i()};let r=t.renderTo[e.browserProps.requestFullscreen]();r&&r.catch(function(){alert("Full screen is not supported inside a frame.")})}})}setButtonText(){let t=this.chart,n=t.exportDivElements,i=t.options.exporting,o=i&&i.buttons&&i.buttons.contextButton.menuItems,r=t.options.lang;if(i&&i.menuItemDefinitions&&r&&r.exitFullscreen&&r.viewFullscreen&&o&&n){let t=n[o.indexOf("viewFullscreen")];t&&e.setElementHTML(t,this.isOpen?r.exitFullscreen:i.menuItemDefinitions.viewFullscreen.text||r.viewFullscreen)}}toggle(){this.isOpen?this.close():this.open()}}return a}),n(t,"Core/HttpUtilities.js",[t["Core/Globals.js"],t["Core/Utilities.js"]],function(e,t){let{win:n}=e,{discardElement:i,objectEach:o}=t,r={ajax:function(e){let t={json:"application/json",xml:"application/xml",text:"text/plain",octet:"application/octet-stream"},n=new XMLHttpRequest;function i(t,n){e.error&&e.error(t,n)}if(!e.url)return!1;n.open((e.type||"get").toUpperCase(),e.url,!0),e.headers&&e.headers["Content-Type"]||n.setRequestHeader("Content-Type",t[e.dataType||"json"]||t.text),o(e.headers,function(e,t){n.setRequestHeader(t,e)}),e.responseType&&(n.responseType=e.responseType),n.onreadystatechange=function(){let t;if(4===n.readyState){if(200===n.status){if("blob"!==e.responseType&&(t=n.responseText,"json"===e.dataType))try{t=JSON.parse(t)}catch(e){if(e instanceof Error)return i(n,e)}return e.success&&e.success(t,n)}i(n,n.responseText)}},e.data&&"string"!=typeof e.data&&(e.data=JSON.stringify(e.data)),n.send(e.data)},getJSON:function(e,t){r.ajax({url:e,success:t,dataType:"json",headers:{"Content-Type":"text/plain"}})},post:function(e,t,r){let s=new n.FormData;o(t,function(e,t){s.append(t,e)}),s.append("b64","true");let{filename:l,type:a}=t;return n.fetch(e,{method:"POST",body:s,...r}).then(e=>{e.ok&&e.text().then(e=>{let t=document.createElement("a");t.href=`data:${a};base64,${e}`,t.download=l,t.click(),i(t)})})}};return r}),n(t,"Extensions/Exporting/Exporting.js",[t["Core/Renderer/HTML/AST.js"],t["Core/Chart/Chart.js"],t["Core/Chart/ChartNavigationComposition.js"],t["Core/Defaults.js"],t["Extensions/Exporting/ExportingDefaults.js"],t["Extensions/Exporting/ExportingSymbols.js"],t["Extensions/Exporting/Fullscreen.js"],t["Core/Globals.js"],t["Core/HttpUtilities.js"],t["Core/Utilities.js"]],function(e,t,n,i,o,r,s,l,a,c){var p;let{defaultOptions:u}=i,{doc:h,SVG_NS:d,win:g}=l,{addEvent:f,css:m,createElement:x,discardElement:y,extend:b,find:v,fireEvent:w,isObject:E,merge:C,objectEach:S,pick:F,removeEvent:T,uniqueKey:O}=c;return function(t){let i;let p=[/-/,/^(clipPath|cssText|d|height|width)$/,/^font$/,/[lL]ogical(Width|Height)$/,/^parentRule$/,/^(cssRules|ownerRules)$/,/perspective/,/TapHighlightColor/,/^transition/,/^length$/,/^[0-9]+$/],M=["fill","stroke","strokeLinecap","strokeLinejoin","strokeWidth","textAnchor","x","y"];t.inlineAllowlist=[];let P=["clipPath","defs","desc"];function k(e){let t,n;let i=this,o=i.renderer,r=C(i.options.navigation.buttonOptions,e),s=r.onclick,l=r.menuItems,a=r.symbolSize||12;if(i.btnCount||(i.btnCount=0),i.exportDivElements||(i.exportDivElements=[],i.exportSVGElements=[]),!1===r.enabled||!r.theme)return;let c=i.styledMode?{}:r.theme;s?n=function(e){e&&e.stopPropagation(),s.call(i,e)}:l&&(n=function(e){e&&e.stopPropagation(),i.contextMenu(p.menuClassName,l,p.translateX||0,p.translateY||0,p.width||0,p.height||0,p),p.setState(2)}),r.text&&r.symbol?c.paddingLeft=F(c.paddingLeft,30):r.text||b(c,{width:r.width,height:r.height,padding:0});let p=o.button(r.text,0,0,n,c,void 0,void 0,void 0,void 0,r.useHTML).addClass(e.className).attr({title:F(i.options.lang[r._titleKey||r.titleKey],"")});p.menuClassName=e.menuClassName||"highcharts-menu-"+i.btnCount++,r.symbol&&(t=o.symbol(r.symbol,Math.round((r.symbolX||0)-a/2),Math.round((r.symbolY||0)-a/2),a,a,{width:a,height:a}).addClass("highcharts-button-symbol").attr({zIndex:1}).add(p),i.styledMode||t.attr({stroke:r.symbolStroke,fill:r.symbolFill,"stroke-width":r.symbolStrokeWidth||1})),p.add(i.exportingGroup).align(b(r,{width:p.width,x:F(r.x,i.buttonOffset)}),!0,"spacingBox"),i.buttonOffset+=((p.width||0)+r.buttonSpacing)*("right"===r.align?-1:1),i.exportSVGElements.push(p,t)}function H(){if(!this.printReverseInfo)return;let{childNodes:e,origDisplay:t,resetParams:n}=this.printReverseInfo;this.moveContainers(this.renderTo),[].forEach.call(e,function(e,n){1===e.nodeType&&(e.style.display=t[n]||"")}),this.isPrinting=!1,n&&this.setSize.apply(this,n),delete this.printReverseInfo,i=void 0,w(this,"afterPrint")}function N(){let e=h.body,t=this.options.exporting.printMaxWidth,n={childNodes:e.childNodes,origDisplay:[],resetParams:void 0};this.isPrinting=!0,this.pointer?.reset(void 0,0),w(this,"beforePrint"),t&&this.chartWidth>t&&(n.resetParams=[this.options.chart.width,void 0,!1],this.setSize(t,void 0,!1)),[].forEach.call(n.childNodes,function(e,t){1===e.nodeType&&(n.origDisplay[t]=e.style.display,e.style.display="none")}),this.moveContainers(e),this.printReverseInfo=n}function j(e){e.renderExporting(),f(e,"redraw",e.renderExporting),f(e,"destroy",e.destroyExport)}function G(t,n,i,o,r,s,l){let a=this,p=a.options.navigation,u=a.chartWidth,d=a.chartHe
23530ight,y="cache-"+t,v=Math.max(r,s),C,S=a[y];S||(a.exportContextMenu=a[y]=S=x("div",{className:t},{position:"absolute",zIndex:1e3,padding:v+"px",pointerEvents:"auto",...a.renderer.style},a.scrollablePlotArea?.fixedDiv||a.container),C=x("ul",{className:"highcharts-menu"},a.styledMode?{}:{listStyle:"none",margin:0,padding:0},S),a.styledMode||m(C,b({MozBoxShadow:"3px 3px 10px #888",WebkitBoxShadow:"3px 3px 10px #888",boxShadow:"3px 3px 10px #888"},p.menuStyle)),S.hideMenu=function(){m(S,{display:"none"}),l&&l.setState(0),a.openMenu=!1,m(a.renderTo,{overflow:"hidden"}),m(a.container,{overflow:"hidden"}),c.clearTimeout(S.hideTimer),w(a,"exportMenuHidden")},a.exportEvents.push(f(S,"mouseleave",function(){S.hideTimer=g.setTimeout(S.hideMenu,500)}),f(S,"mouseenter",function(){c.clearTimeout(S.hideTimer)}),f(h,"mouseup",function(e){a.pointer?.inClass(e.target,t)||S.hideMenu()}),f(S,"click",function(){a.openMenu&&S.hideMenu()})),n.forEach(function(t){if("string"==typeof t&&(t=a.options.exporting.menuItemDefinitions[t]),E(t,!0)){let n;t.separator?n=x("hr",void 0,void 0,C):("viewData"===t.textKey&&a.isDataTableVisible&&(t.textKey="hideData"),n=x("li",{className:"highcharts-menu-item",onclick:function(e){e&&e.stopPropagation(),S.hideMenu(),"string"!=typeof t&&t.onclick&&t.onclick.apply(a,arguments)}},void 0,C),e.setElementHTML(n,t.text||a.options.lang[t.textKey]),a.styledMode||(n.onmouseover=function(){m(this,p.menuItemHoverStyle)},n.onmouseout=function(){m(this,p.menuItemStyle)},m(n,b({cursor:"pointer"},p.menuItemStyle||{})))),a.exportDivElements.push(n)}}),a.exportDivElements.push(C,S),a.exportMenuWidth=S.offsetWidth,a.exportMenuHeight=S.offsetHeight);let F={display:"block"};i+(a.exportMenuWidth||0)>u?F.right=u-i-r-v+"px":F.left=i-v+"px",o+s+(a.exportMenuHeight||0)>d&&l.alignOptions?.verticalAlign!=="top"?F.bottom=d-o-v+"px":F.top=o+s-v+"px",m(S,F),m(a.renderTo,{overflow:""}),m(a.container,{overflow:""}),a.openMenu=!0,w(a,"exportMenuShown")}function D(e){let t;let n=e?e.target:this,i=n.exportSVGElements,o=n.exportDivElements,r=n.exportEvents;i&&(i.forEach((e,o)=>{e&&(e.onclick=e.ontouchstart=null,n[t="cache-"+e.menuClassName]&&delete n[t],i[o]=e.destroy())}),i.length=0),n.exportingGroup&&(n.exportingGroup.destroy(),delete n.exportingGroup),o&&(o.forEach(function(e,t){e&&(c.clearTimeout(e.hideTimer),T(e,"mouseleave"),o[t]=e.onmouseout=e.onmouseover=e.ontouchstart=e.onclick=null,y(e))}),o.length=0),r&&(r.forEach(function(e){e()}),r.length=0)}function I(e,t){let n=this.getSVGForExport(e,t);e=C(this.options.exporting,e),a.post(e.url,{filename:e.filename?e.filename.replace(/\//g,"-"):this.getFilename(),type:e.type,width:e.width,scale:e.scale,svg:n},e.fetchOptions)}function W(){return this.styledMode&&this.inlineStyles(),this.container.innerHTML}function R(){let e=this.userOptions.title&&this.userOptions.title.text,t=this.options.exporting.filename;return t?t.replace(/\//g,"-"):("string"==typeof e&&(t=e.toLowerCase().replace(/<\/?[^>]+(>|$)/g,"").replace(/[\s_]+/g,"-").replace(/[^a-z0-9\-]/g,"").replace(/^[\-]+/g,"").replace(/[\-]+/g,"-").substr(0,24).replace(/[\-]+$/g,"")),(!t||t.length<5)&&(t="chart"),t)}function L(e){let t,n,i=C(this.options,e);i.plotOptions=C(this.userOptions.plotOptions,e&&e.plotOptions),i.time=C(this.userOptions.time,e&&e.time);let o=x("div",null,{position:"absolute",top:"-9999em",width:this.chartWidth+"px",height:this.chartHeight+"px"},h.body),r=this.renderTo.style.width,s=this.renderTo.style.height,l=i.exporting.sourceWidth||i.chart.width||/px$/.test(r)&&parseInt(r,10)||(i.isGantt?800:600),a=i.exporting.sourceHeight||i.chart.height||/px$/.test(s)&&parseInt(s,10)||400;b(i.chart,{animation:!1,renderTo:o,forExport:!0,renderer:"SVGRenderer",width:l,height:a}),i.exporting.enabled=!1,delete i.data,i.series=[],this.series.forEach(function(e){(n=C(e.userOptions,{animation:!1,enableMouseTracking:!1,showCheckbox:!1,visible:e.visible})).isInternal||i.series.push(n)});let c={};this.axes.forEach(function(e){e.userOptions.internalKey||(e.userOptions.internalKey=O()),e.options.isInternal||(c[e.coll]||(c[e.coll]=!0,i[e.coll]=[]),i[e.coll].push(C(e.userOptions,{visible:e.visible})))}),i.colorAxis=this.userOptions.colorAxis;let p=new this.constructor(i,this.callback);return e&&["xAxis","yAxis","series"].forEach(function(t){let n={};e[t]&&(n[t]=e[t],p.update(n))}
23530),this.axes.forEach(function(e){let t=v(p.axes,function(t){return t.options.internalKey===e.userOptions.internalKey}),n=e.getExtremes(),i=n.userMin,o=n.userMax;t&&(void 0!==i&&i!==t.min||void 0!==o&&o!==t.max)&&t.setExtremes(i,o,!0,!1)}),t=p.getChartHTML(),w(this,"getSVG",{chartCopy:p}),t=this.sanitizeSVG(t,i),i=null,p.destroy(),y(o),t}function $(e,t){let n=this.options.exporting;return this.getSVG(C({chart:{borderRadius:0}},n.chartOptions,t,{exporting:{sourceWidth:e&&e.sourceWidth||n.sourceWidth,sourceHeight:e&&e.sourceHeight||n.sourceHeight}}))}function q(){let e;let n=t.inlineAllowlist,i={},o=h.createElement("iframe");m(o,{width:"1px",height:"1px",visibility:"hidden"}),h.body.appendChild(o);let r=o.contentWindow&&o.contentWindow.document;r&&r.body.appendChild(r.createElementNS(d,"svg")),function t(o){let s,a,c,u,h,d;let f={};if(r&&1===o.nodeType&&-1===P.indexOf(o.nodeName)){if(s=g.getComputedStyle(o,null),a="svg"===o.nodeName?{}:g.getComputedStyle(o.parentNode,null),!i[o.nodeName]){e=r.getElementsByTagName("svg")[0],c=r.createElementNS(o.namespaceURI,o.nodeName),e.a
23530ppendChild(c);let t=g.getComputedStyle(c,null),n={};for(let e in t)e.length<1e3&&"string"==typeof t[e]&&!/^[0-9]+$/.test(e)&&(n[e]=t[e]);i[o.nodeName]=n,"text"===o.nodeName&&delete i.text.fill,e.removeChild(c)}for(let e in s)(l.isFirefox||l.isMS||l.isSafari||Object.hasOwnProperty.call(s,e))&&function(e,t){if(u=h=!1,n.length){for(d=n.length;d--&&!h;)h=n[d].test(t);u=!h}for("transform"===t&&"none"===e&&(u=!0),d=p.length;d--&&!u;){if(t.length>1e3)throw Error("Input too long");u=p[d].test(t)||"function"==typeof e}!u&&(a[t]!==e||"svg"===o.nodeName)&&i[o.nodeName][t]!==e&&(M&&-1===M.indexOf(t)?f[t]=e:e&&o.setAttribute(t.replace(/([A-Z])/g,function(e,t){return"-"+t.toLowerCase()}),e))}(s[e],e);if(m(o,f),"svg"===o.nodeName&&o.setAttribute("stroke-width","1px"),"text"===o.nodeName)return;[].forEach.call(o.children||o.childNodes,t)}}(this.container.querySelector("svg")),e.parentNode.removeChild(e),o.parentNode.removeChild(o)}function z(e){let{scrollablePlotArea:t}=this;(t?[t.fixedDiv,t.scrollingContainer]:[this.container]).forEach(function(t){e.appendChild(t)})}function V(){let e=this,t=(t,n,i)=>{e.isDirtyExporting=!0,C(!0,e.options[t],n),F(i,!0)&&e.redraw()};e.exporting={update:function(e,n){t("exporting",e,n)}},n.compose(e).navigation.addUpdate((e,n)=>{t("navigation",e,n)})}function A(){let e=this;e.isPrinting||(i=e,l.isSafari||e.beforePrint(),setTimeout(()=>{g.focus(),g.print(),l.isSafari||setTimeout(()=>{e.afterPrint()},1e3)},1))}function K(){let e=this,t=e.options.exporting,n=t.buttons,i=e.isDirtyExporting||!e.exportSVGElements;e.buttonOffset=0,e.isDirtyExporting&&e.destroyExport(),i&&!1!==t.enabled&&(e.exportEvents=[],e.exportingGroup=e.exportingGroup||e.renderer.g("exporting-group").attr({zIndex:3}).add(),S(n,function(t){e.addButton(t)}),e.isDirtyExporting=!1)}function U(e,t){let n=e.indexOf("</svg>")+6,i=e.substr(n);return e=e.substr(0,n),t&&t.exporting&&t.exporting.allowHTML&&i&&(i='<foreignObject x="0" y="0" width="'+t.chart.width+'" height="'+t.chart.height+'"><body xmlns="http://www.w3.org/1999/xhtml">'+i.replace(/(<(?:img|br).*?(?=\>))>/g,"$1 />")+"</body></foreignObject>",e=e.replace("</svg>",i+"</svg>")),e=e.replace(/zIndex="[^"]+"/g,"").replace(/symbolName="[^"]+"/g,"").replace(/jQuery[0-9]+="[^"]+"/g,"").replace(/url\(("|")(.*?)("|")\;?\)/g,"url($2)").replace(/url\([^#]+#/g,"url(#").replace(/<svg /,'<svg xmlns:xlink="http://www.w3.org/1999/xlink" ').replace(/ (|NS[0-9]+\:)href=/g," xlink:href=").replace(/\n+/g," ").replace(/(fill|stroke)="rgba\(([ 0-9]+,[ 0-9]+,[ 0-9]+),([ 0-9\.]+)\)"/g,'$1="rgb($2)" $1-opacity="$3"').replace(/ /g,"\xa0").replace(/­/g,"\xad")}t.compose=function(e,t){r.compose(t),s.compose(e);let n=e.prototype;n.exportChart||(n.afterPrint=H,n.exportChart=I,n.inlineStyles=q,n.print=A,n.sanitizeSVG=U,n.getChartHTML=W,n.getSVG=L,n.getSVGForExport=$,n.getFilename=R,n.moveContainers=z,n.beforePrint=N,n.contextMenu=G,n.addButton=k,n.destroyExport=D,n.renderExporting=K,n.callbacks.push(j),f(e,"init",V),l.isSafari&&g.matchMedia("print").addListener(function(e){i&&(e.matches?i.beforePrint():i.afterPrint())}),u.exporting=C(o.exporting,u.exporting),u.lang=C(o.lang,u.lang),u.navigation=C(o.navigation,u.navigation))}}(p||(p={})),p}),n(t,"masters/modules/exporting.src.js",[t["Core/Globals.js"],t["Extensions/Exporting/Exporting.js"],t["Core/HttpUtilities.js"]],function(e,t,n){return e.HttpUtilities=e.HttpUtilities||n,e.ajax=e.HttpUtilities.ajax,e.getJSON=e.HttpUtilities.getJSON,e.post=e.HttpUtilities.post,t.compose(e.Chart,e.Renderer),e})}); 23531},{}],114:[function(require,module,exports){ 23532!/** 23533 * Highmaps JS v11.4.3 (2024-05-22) 23534 * 23535 * Highmaps as a plugin for Highcharts or Highcharts Stock. 23536 * 23537 * (c) 2011-2024 Torstein Honsi 23538 * 23539 * License: www.highcharts.com/license 23540 */function(t){"object"==typeof module&&module.exports?(t.default=t,module.exports=t):"function"==typeof define&&define.amd?define("highcharts/modules/map",["highcharts"],function(e){return t(e),t.Highcharts=e,t}):t("undefined"!=typeof Highcharts?Highcharts:void 0)}(function(t){"use strict";var e=t?t._modules:{};function i(t,e,i,s){t.hasOwnProperty(e)||(t[e]=s.apply(null,i),"function"==typeof CustomEvent&&window.dispatchEvent(new CustomEvent("HighchartsM
23540oduleLoaded",{detail:{path:e,module:t[e]}})))}i(e,"Core/Axis/Color/ColorAxisComposition.js",[e["Core/Color/Color.js"],e["Core/Utilities.js"]],function(t,e){var i;let{parse:s}=t,{addEvent:o,extend:r,merge:a,pick:n,splat:l}=e;return function(t){let e;function i(){let{userOptions:t}=this;this.colorAxis=[],t.colorAxis&&(t.colorAxis=l(t.colorAxis),t.colorAxis.map(t=>new e(this,t)))}function h(t){let e=this.chart.colorAxis||[],i=e=>{let i=t.allItems.indexOf(e);-1!==i&&(this.destroyItem(t.allItems[i]),t.allItems.splice(i,1))},s=[],o,r;for(e.forEach(function(t){(o=t.options)&&o.showInLegend&&(o.dataClasses&&o.visible?s=s.concat(t.getDataClassLegendSymbols()):o.visible&&s.push(t),t.series.forEach(function(t){(!t.options.showInLegend||o.dataClasses)&&("point"===t.options.legendType?t.points.forEach(function(t){i(t)}):i(t))}))}),r=s.length;r--;)t.allItems.unshift(s[r])}function p(t){t.visible&&t.item.legendColor&&t.item.legendItem.symbol.attr({fill:t.item.legendColor})}function d(t){this.chart.colorAxis?.forEach(e=>{e.update({},t.redraw)})}function c(){(this.chart.colorAxis&&this.chart.colorAxis.length||this.colorAttribs)&&this.translateColors()}function u(){let t=this.axisTypes;t?-1===t.indexOf("colorAxis")&&t.push("colorAxis"):this.axisTypes=["colorAxis"]}function m(t){let e=this,i=t?"show":"hide";e.visible=e.options.visible=!!t,["graphic","dataLabel"].forEach(function(t){e[t]&&e[t][i]()}),this.series.buildKDTree()}function g(){let t=this,e=this.data.length?this.data:this.points,i=this.options.nullColor,s=this.colorAxis,o=this.colorKey;e.forEach(e=>{let r=e.getNestedProperty(o),a=e.options.color||(e.isNull||null===e.value?i:s&&void 0!==r?s.toColor(r,e):e.color||t.color);a&&e.color!==a&&(e.color=a,"point"===t.options.legendType&&e.legendItem&&e.legendItem.label&&t.chart.legend.colorizeItem(e,e.visible))})}function f(){this.elem.attr("fill",s(this.start).tweenTo(s(this.end),this.pos),void 0,!0)}function b(){this.elem.attr("stroke",s(this.start).tweenTo(s(this.end),this.pos),void 0,!0)}t.compose=function(t,s,l,y,x){let M=s.prototype,C=l.prototype,j=x.prototype;M.collectionsWithUpdate.includes("colorAxis")||(e=t,M.collectionsWithUpdate.push("colorAxis"),M.collectionsWithInit.colorAxis=[M.addColorAxis],o(s,"afterGetAxes",i),function(t){let i=t.prototype.createAxis;t.prototype.createAxis=function(t,s){if("colorAxis"!==t)return i.apply(this,arguments);let o=new e(this,a(s.axis,{index:this[t].length,isX:!1}));return this.isDirtyLegend=!0,this.axes.forEach(t=>{t.series=[]}),this.series.forEach(t=>{t.bindAxes(),t.isDirtyData=!0}),n(s.redraw,!0)&&this.redraw(s.animation),o}}(s),C.fillSetter=f,C.strokeSetter=b,o(y,"afterGetAllItems",h),o(y,"afterColorizeItem",p),o(y,"afterUpdate",d),r(j,{optionalAxis:"colorAxis",translateColors:g}),r(j.pointClass.prototype,{setVisible:m}),o(x,"afterTranslate",c,{order:1}),o(x,"bindAxes",u))},t.pointSetVisible=m}(i||(i={})),i}),i(e,"Core/Axis/Color/ColorAxisDefaults.js",[],function(){return{lineWidth:0,minPadding:0,maxPadding:0,gridLineColor:"#ffffff",gridLineWidth:1,tickPixelInterval:72,startOnTick:!0,endOnTick:!0,offset:0,marker:{animation:{duration:50},width:.01,color:"#999999"},labels:{distance:8,overflow:"justify",rotation:0},minColor:"#e6e9ff",maxColor:"#0022ff",tickLength:5,showInLegend:!0}}),i(e,"Core/Axis/Color/ColorAxisLike.js",[e["Core/Color/Color.js"],e["Core/Utilities.js"]],function(t,e){var i,s;let{parse:o}=t,{merge:r}=e;return(s=i||(i={})).initDataClasses=function(t){let e=this.chart,i=this.legendItem=this.legendItem||{},s=this.options,a=t.dataClasses||[],n,l,h=e.options.chart.colorCount,p=0,d;this.dataClasses=l=[],i.labels=[];for(let t=0,i=a.length;t<i;++t)n=r(n=a[t]),l.push(n),(e.styledMode||!n.color)&&("category"===s.dataClassColor?(e.styledMode||(h=(d=e.options.colors||[]).length,n.color=d[p]),n.colorIndex=p,++p===h&&(p=0)):n.color=o(s.minColor).tweenTo(o(s.maxColor),i<2?.5:t/(i-1)))},s.initStops=function(){let t=this.options,e=this.stops=t.stops||[[0,t.minColor||""],[1,t.maxColor||""]];for(let t=0,i=e.length;t<i;++t)e[t].color=o(e[t][1])},s.normalizedValue=function(t){let e=this.max||0,i=this.min||0;return this.logarithmic&&(t=this.logarithmic.log2lin(t)),1-(e-t)/(e-i||1)},s.toColor=function(t,e){let i,s,o,r,a,n;let l=this.dataClasses,h=this.stops;if(l){for(n=l.length;n--;)if(s=(a=l[n]).from,o=a.to,(void 0===s||t>=s)&&(void 0===o||t<=o)){r=a.color,e&&(e.dataClass=n,e.colorIndex=a.colorIndex);break}}else{for(i=this.normalizedValue(t),n=h.length;n--&&!(i>h[n][0]););s=h[n]||h[n+1],i=1-((o=h[n+1]||s)[0]-i)/(o[0]-s[0]||1),r=s.color.tweenTo(o.color,i)}return r},i}),i(e,"Core/Axis/Color/ColorAxis.js",[e["Core/Axis/Axis.js"],e["Core/Axis/Color/ColorAxisComposition.js"],e["Core/Axis/Color/ColorAxisDefaults.js"],e["Core/Axis/Color/ColorAxisLike.js"],e["Core/Defaults.js"],e["Core/Legend/LegendSymbol.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e,
23540i,s,o,r,a,n){let{defaultOptions:l}=o,{series:h}=a,{defined:p,extend:d,fireEvent:c,isArray:u,isNumber:m,merge:g,pick:f,relativeLength:b}=n;l.colorAxis=g(l.xAxis,i);class y extends t{static compose(t,i,s,o){e.compose(y,t,i,s,o)}constructor(t,e){super(t,e),this.coll="colorAxis",this.visible=!0,this.init(t,e)}init(t,e){let i=t.options.legend||{},s=e.layout?"vertical"!==e.layout:"vertical"!==i.layout;this.side=e.side||s?2:1,this.reversed=e.reversed||!s,this.opposite=!s,super.init(t,e,"colorAxis"),this.userOptions=e,u(t.userOptions.colorAxis)&&(t.userOptions.colorAxis[this.index]=e),e.dataClasses&&this.initDataClasses(e),this.initStops(),this.horiz=s,this.zoomEnabled=!1}hasData(){return!!(this.tickPositions||[]).length}setTickPositions(){if(!this.dataClasses)return super.setTickPositions()}setOptions(t){let e=g(l.colorAxis,t,{showEmpty:!1,title:null,visible:this.chart.options.legend.enabled&&!1!==t.visible});super.setOptions(e),this.options.crosshair=this.options.marker}setAxisSize(){let t=this.chart,e=this.legendItem?.symbol,{width:i,height:s}=this.getSize();e&&(this.left=+e.attr("x"),this.top=+e.attr("y"),this.width=i=+e.attr("width"),this.height=s=+e.attr("height"),this.right=t.chartWidth-this.left-i,this.bottom=t.chartHeight-this.top-s,this.pos=this.horiz?this.left:this.top),this.len=(this.horiz?i:s)||y.defaultLegendLength}getOffset(){let t=this.legendItem?.group,e=this.chart.axisOffset[this.side];if(t){this.axisParent=t,super.getOffset();let i=this.chart.legend;i.allItems.forEach(function(t){t instanceof y&&t.drawLegendSymbol(i,t)}),i.render(),this.chart.getMargins(!0),this.chart.series.some(t=>t.isDrilling)||(this.isDirty=!0),this.added||(this.added=!0,this.labelLeft=0,this.labelRight=this.width),this.chart.axisOffset[this.side]=e}}setLegendColor(){let t=this.horiz,e=this.reversed,i=e?1:0,s=e?0:1,o=t?[i,0,s,0]:[0,s,0,i];this.legendColor={linearGradient:{x1:o[0],y1:o[1],x2:o[2],y2:o[3]},stops:this.stops}}drawLegendSymbol(t,e){let i=e.legendItem||{},s=t.padding,o=t.options,r=this.options.labels,a=f(o.itemDistance,10),n=this.horiz,{width:l,height:h}=this.getSize(),p=f(o.labelPadding,n?16:30);this.setLegendColor(),i.symbol||(i.symbol=this.chart.renderer.symbol("roundedRect").attr({r:o.symbolRadius??3,zIndex:1}).add(i.group)),i.symbol.attr({x:0,y:(t.baseline||0)-11,width:l,height:h}),i.labelWidth=l+s+(n?a:f(r.x,r.distance)+(this.maxLabelLength||0)),i.labelHeight=h+s+(n?p:0)}setState(t){this.series.forEach(function(e){e.setState(t)})}setVisible(){}getSeriesExtremes(){let t=this.series,e,i,s,o,r,a,n=t.length,l,d;for(this.dataMin=1/0,this.dataMax=-1/0;n--;){if(i=(a=t[n]).colorKey=f(a.options.colorKey,a.colorKey,a.pointValKey,a.zoneAxis,"y"),o=a.pointArrayMap,r=a[i+"Min"]&&a[i+"Max"],a[i+"Data"])e=a[i+"Data"];else if(o){if(e=[],s=o.indexOf(i),l=a.yData,s>=0&&l)for(d=0;d<l.length;
23540d++)e.push(f(l[d][s],l[d]))}else e=a.yData;if(r)a.minColorValue=a[i+"Min"],a.maxColorValue=a[i+"Max"];else{let t=h.prototype.getExtremes.call(a,e);a.minColorValue=t.dataMin,a.maxColorValue=t.dataMax}p(a.minColorValue)&&p(a.maxColorValue)&&(this.dataMin=Math.min(this.dataMin,a.minColorValue),this.dataMax=Math.max(this.dataMax,a.maxColorValue)),r||h.prototype.applyExtremes.call(a)}}drawCrosshair(t,e){let i;let s=this.legendItem||{},o=e&&e.plotX,r=e&&e.plotY,a=this.pos,n=this.len;e&&((i=this.toPixels(e.getNestedProperty(e.series.colorKey)))<a?i=a-2:i>a+n&&(i=a+n+2),e.plotX=i,e.plotY=this.len-i,super.drawCrosshair(t,e),e.plotX=o,e.plotY=r,this.cross&&!this.cross.addedToColorAxis&&s.group&&(this.cross.addClass("highcharts-coloraxis-marker").add(s.group),this.cross.addedToColorAxis=!0,this.chart.styledMode||"object"!=typeof this.crosshair||this.cross.attr({fill:this.crosshair.color})))}getPlotLinePath(t){let e=this.left,i=t.translatedValue,s=this.top;return m(i)?this.horiz?[["M",i-4,s-6],["L",i+4,s-6],["L",i,s],["Z"]]:[["M",e,i],["L",e-6,i+6],["L",e-6,i-6],["Z"]]:super.getPlotLinePath(t)}update(t,e){let i=this.chart.legend;this.series.forEach(t=>{t.isDirtyData=!0}),(t.dataClasses&&i.allItems||this.dataClasses)&&this.destroyItems(),super.update(t,e),this.legendItem&&this.legendItem.label&&(this.setLegendColor(),i.colorizeItem(this,!0))}destroyItems(){let t=this.chart,e=this.legendItem||{};if(e.label)t.legend.destroyItem(this);else if(e.labels)for(let i of e.labels)t.legend.destroyItem(i);t.isDirtyLegend=!0}destroy(){this.chart.isDirtyLegend=!0,this.destroyItems(),super.destroy(...[].slice.call(arguments))}remove(t){this.destroyItems(),super.remove(t)}getDataClassLegendSymbols(){let t;let e=this,i=e.chart,s=e.legendItem&&e.legendItem.labels||[],o=i.options.legend,a=f(o.valueDecimals,-1),n=f(o.valueSuffix,""),l=t=>e.series.reduce((e,i)=>(e.push(...i.points.filter(e=>e.dataClass===t)),e),[]);return s.length||e.dataClasses.forEach((o,h)=>{let p=o.from,u=o.to,{numberFormatter:m}=i,g=!0;t="",void 0===p?t="< ":void 0===u&&(t="> "),void 0!==p&&(t+=m(p,a)+n),void 0!==p&&void 0!==u&&(t+=" - "),void 0!==u&&(t+=m(u,a)+n),s.push(d({chart:i,name:t,options:{},drawLegendSymbol:r.rectangle,visible:!0,isDataClass:!0,setState:t=>{for(let e of l(h))e.setState(t)},setVisible:function(){this.visible=g=e.visible=!g;let t=[];for(let e of l(h))e.setVisible(g),e.hiddenInDataClass=!g,-1===t.indexOf(e.series)&&t.push(e.series);i.legend.colorizeItem(this,g),t.forEach(t=>{c(t,"afterDataClassLegendClick")})}},o))}),s}getSize(){let{chart:t,horiz:e}=this,{height:i,width:s}=this.options,{legend:o}=t.options;return{width:f(p(s)?b(s,t.chartWidth):void 0,o?.symbolWidth,e?y.defaultLegendLength:12),height:f(p(i)?b(i,t.chartHeight):void 0,o?.symbolHeight,e?12:y.defaultLegendLength)}}}return y.defaultLegendLength=200,y.keepProps=["legendItem"],d(y.prototype,s),Array.prototype.push.apply(t.keepProps,y.keepProps),y}),i(e,"masters/modules/coloraxis.src.js",[e["Core/Globals.js"],e["Core/Axis/Color/ColorAxis.js"]],function(t,e){return t.ColorAxis=t.ColorAxis||e,t.ColorAxis.compose(t.Chart,t.Fx,t.Legend,t.Series),t}),i(e,"Maps/MapNavigationDefaults.js",[],function(){return{lang:{zoomIn:"Zoom in",zoomOut:"Zoom out"},mapNavigation:{buttonOptions:{alignTo:"plotBox",align:"left",verticalAlign:"top",x:0,width:18,height:18,padding:5,style:{color:"#666666",fontSize:"1em",fontWeight:"bold"},theme:{fill:"#ffffff",stroke:"#e6e6e6","stroke-width":1,"text-align":"center"}},buttons:{zoomIn:{onclick:function(){this.mapZoom(.5)},text:"+",y:0},zoomOut:{onclick:function(){this.mapZoom(2)},text:"-",y:28}},mouseWheelSensitivity:1.1}}}),i(e,"Maps/MapPointer.js",[e["Core/Utilities.js"]],function(t){var e;let{defined:i,extend:s,pick:o,wrap:r}=t;return function(t){let e,a=0;function n(t){let e=this.chart;t=this.normalize(t),e.options.mapNavigation.enableDoubleClickZoomTo?e.pointer.inClass(t.target,"highcharts-tracker")&&e.hoverPoint&&e.hoverPoint.zoomTo():e.isInsidePlot(t.chartX-e.plotLeft,t.chartY-e.plotTop)&&e.mapZoom(.5,void 0,void 0,t.chartX,t.chartY)}function l(t){let s=this.chart,o=i((t=this.normalize(t)).wheelDelta)&&-t.wheelDelta/120||t.deltaY||t.detail;Math.abs(o)>=1&&(a+=Math.abs(o),e&&clearTimeout(e),e=setTimeout(()=>{a=0},50)),a<10&&s.isInsidePlot(t.chartX-s.plotLeft,t.chartY-s.plotTop)&&s.mapView&&s.mapView.zoomBy(-((s.options.mapNavigation.mouseWheelSensitivity-1)*o),void 0,[t.chartX,t.chartY],!(1>Math.abs(o))&&void 0)}
23540function h(t,e,i){let o=this.chart;if(e=t.call(this,e,i),o&&o.mapView){let t=o.mapView.pixelsToLonLat({x:e.chartX-o.plotLeft,y:e.chartY-o.plotTop});t&&s(e,t)}return e}function p(t){let e=this.chart.options.mapNavigation;e&&o(e.enableTouchZoom,e.enabled)&&(this.chart.zooming.pinchType="xy"),t.apply(this,[].slice.call(arguments,1))}t.compose=function(t){let e=t.prototype;e.onContainerDblClick||(s(e,{onContainerDblClick:n,onContainerMouseWheel:l}),r(e,"normalize",h),r(e,"zoomOption",p))}}(e||(e={})),e}),i(e,"Maps/MapSymbols.js",[],function(){let t;function e(e,i,s,o,r){if(r){let t=r?.r||0;r.brBoxY=i-t,r.brBoxHeight=o+t}return t.roundedRect(e,i,s,o,r)}function i(e,i,s,o,r){if(r){let t=r?.r||0;r.brBoxHeight=o+t}return t.roundedRect(e,i,s,o,r)}return{compose:function(s){(t=s.prototype.symbols).bottombutton=e,t.topbutton=i}}}),i(e,"Maps/MapNavigation.js",[e["Core/Defaults.js"],e["Core/Globals.js"],e["Maps/MapNavigationDefaults.js"],e["Maps/MapPointer.js"],e["Maps/MapSymbols.js"],e["Core/Utilities.js"]],function(t,e,i,s,o,r){let{setOptions:a}=t,{composed:n}=e,{addEvent:l,extend:h,merge:p,objectEach:d,pick:c,pushUnique:u}=r;function m(t){t&&(t.preventDefault&&t.preventDefault(),t.stopPropagation&&t.stopPropagation(),t.cancelBubble=!0)}class g{static compose(t,e,r){s.compose(e),o.compose(r),u(n,"Map.Navigation")&&(l(t,"beforeRender",function(){this.mapNavigation=new g(this),this.mapNavigation.update()}),a(i))}constructor(t){this.chart=t,this.navButtons=[]}update(t){let e=this,i=e.chart,s=e.navButtons,o=function(t){this.handler.call(i,t),m(t)},r=i.options.mapNavigation;for(t&&(r=i.options.mapNavigation=p(i.options.mapNavigation,t));s.length;)s.pop().destroy();if(!i.renderer.forExport&&c(r.enableButtons,r.enabled)){e.navButtonsGroup||(e.navButtonsGroup=i.renderer.g().attr({zIndex:7}).add()),d(r.buttons,(t,a)=>{let n={padding:(t=p(r.buttonOptions,t)).padding};!i.styledMode&&t.theme&&(h(n,t.theme),n.style=p(t.theme.style,t.style));let{text:d,width:c=0,height:u=0,padding:g=0}=t,f=i.renderer.button("+"!==d&&"-"!==d&&d||"",0,0,o,n,void 0,void 0,void 0,"zoomIn"===a?"topbutton":"bottombutton").addClass("highcharts-map-navigation highcharts-"+({zoomIn:"zoom-in",zoomOut:"zoom-out"})[a]).attr({width:c,height:u,title:i.options.lang[a],zIndex:5}).add(e.navButtonsGroup);if("+"===d||"-"===d){let e=c+1,s=[["M",g+3,g+u/2],["L",g+e-3,g+u/2]];"+"===d&&s.push(["M",g+e/2,g+3],["L",g+e/2,g+u-3]),i.renderer.path(s).addClass("highcharts-button-symbol").attr(i.styledMode?{}:{stroke:t.style?.color,"stroke-width":3,"stroke-linecap":"round"}).add(f)}if(f.handler=t.onclick,l(f.element,"dblclick",m),s.push(f),h(t,{width:f.width,height:2*(f.height||0)}),i.hasLoaded)f.align(t,!1,t.alignTo);else{let e=l(i,"load",()=>{f.element&&f.align(t,!1,t.alignTo),e()})}});let t=(t,e)=>!(e.x>=t.x+t.width||e.x+e.width<=t.x||e.y>=t.y+t.height||e.y+e.height<=t.y);i.hasLoaded||l(i,"render",function(){let s=i.exportingGroup&&i.exportingGroup.getBBox();if(s){let i=e.navButtonsGroup.getBBox();if(t(s,i)){let t=-i.y-i.height+s.y-5,o=s.y+s.height-i.y+5,a=r.buttonOptions&&r.buttonOptions.verticalAlign;e.navButtonsGroup.attr({translateY:"bottom"===a?t:o})}}})}this.updateEvents(r)}updateEvents(t){let e=this.chart;c(t.enableDoubleClickZoom,t.enabled)||t.enableDoubleClickZoomTo?this.unbindDblClick=this.unbindDblClick||l(e.container,"dblclick",function(t){e.pointer.onContainerDblClick(t)}):this.unbindDblClick&&(this.unbindDblClick=this.unbindDblClick()),c(t.enableMouseWheelZoom,t.enabled)?this.unbindMouseWheel=this.unbindMouseWheel||l(e.container,"wheel",function(t){return e.pointer.inClass(t.target,"highcharts-no-mousewheel")||(e.pointer.onContainerMouseWheel(t),m(t)),!1}):this.unbindMouseWheel&&(this.unbindMouseWheel=this.unbindMouseWheel())}}return g}),i(e,"Series/ColorMapComposition.js",[e["Core/Series/SeriesRegistry.js"],e["Core/Renderer/SVG/SVGElement.js"],e["Core/Utilities.js"]],function(t,e,i){var s;let{column:{prototype:o}}=t.seriesTypes,{addEvent:r,defined:a}=i;return function(t){function i(t){let i=this.series,s=i.chart.renderer;this.moveToTopOnHover&&this.graphic&&(i.stateMarkerGraphic||(i.stateMarkerGraphic=new e(s,"use").css({pointerEvents:"none"}).add(this.graphic.parentGroup)),t?.state==="hover"?(this.graphic.attr({id:this.id}),i.stateMarkerGraphic.attr({href:`${s.url}#${this.id}`,visibility:"visible"})):i.stateMarkerGraphic.attr({href:""}))}
23540t.pointMembers={dataLabelOnNull:!0,moveToTopOnHover:!0,isValid:function(){return null!==this.value&&this.value!==1/0&&this.value!==-1/0&&(void 0===this.value||!isNaN(this.value))}},t.seriesMembers={colorKey:"value",axisTypes:["xAxis","yAxis","colorAxis"],parallelArrays:["x","y","value"],pointArrayMap:["value"],trackerGroups:["group","markerGroup","dataLabelsGroup"],colorAttribs:function(t){let e={};return a(t.color)&&(!t.state||"normal"===t.state)&&(e[this.colorProp||"fill"]=t.color),e},pointAttribs:o.pointAttribs},t.compose=function(t){return r(t.prototype.pointClass,"afterSetState",i),t}}(s||(s={})),s}),i(e,"Core/Chart/MapChart.js",[e["Core/Chart/Chart.js"],e["Core/Defaults.js"],e["Core/Renderer/SVG/SVGRenderer.js"],e["Core/Utilities.js"]],function(t,e,i,s){var o;let{getOptions:r}=e,{isNumber:a,merge:n,pick:l}=s;class h extends t{init(t,e){let i=r().credits,s=n({chart:{panning:{enabled:!0,type:"xy"},type:"map"},credits:{mapText:l(i.mapText,' \xa9 <a href="{geojson.copyrightUrl}">{geojson.copyrightShort}</a>'),mapTextFull:l(i.mapTextFull,"{geojson.copyright}")},mapView:{},tooltip:{followTouchMove:!1}},t);super.init(s,e)}mapZoom(t,e,i,s,o){this.mapView&&(a(t)&&(t=Math.log(t)/Math.log(.5)),this.mapView.zoomBy(t,a(e)&&a(i)?this.mapView.projection.inverse([e,i]):void 0,a(s)&&a(o)?[s,o]:void 0))}update(t){t.chart&&"map"in t.chart&&this.mapView?.recommendMapView(this,[t.chart.map,...(this.options.series||[]).map(t=>t.mapData)],!0),super.update.apply(this,arguments)}}return(o=h||(h={})).maps={},o.mapChart=function(t,e,i){return new o(t,e,i)},o.splitPath=function(t){let e;return e="string"==typeof t?(t=t.replace(/([A-Za-z])/g," $1 ").replace(/^\s*/,"").replace(/\s*$/,"")).split(/[ ,;]+/).map(t=>/[A-Za-z]/.test(t)?t:parseFloat(t)):t,i.prototype.pathToSegments(e)},h}),i(e,"Maps/MapUtilities.js",[],function(){return{boundsFromPath:function(t){let e=-Number.MAX_VALUE,i=Number.MAX_VALUE,s=-Number.MAX_VALUE,o=Number.MAX_VALUE,r;if(t.forEach(t=>{let a=t[t.length-2],n=t[t.length-1];"number"==typeof a&&"number"==typeof n&&(i=Math.min(i,a),e=Math.max(e,a),o=Math.min(o,n),s=Math.max(s,n),r=!0)}),r)return{x1:i,y1:o,x2:e,y2:s}},pointInPolygon:function({x:t,y:e},i){let s,o,r=!1;for(s=0,o=i.length-1;s<i.length;o=s++)i[s][1]>e!=i[o][1]>e&&t<(i[o][0]-i[s][0])*(e-i[s][1])/(i[o][1]-i[s][1])+i[s][0]&&(r=!r);return r}}}),i(e,"Series/Map/MapPoint.js",[e["Series/ColorMapComposition.js"],e["Maps/MapUtilities.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e,i,s){let{boundsFromPath:o}=e,r=i.seriesTypes.scatter.prototype.pointClass,{extend:a,isNumber:n,pick:l}=s;class h extends r{static getProjectedPath(t,e){return t.projectedPath||(e&&t.geometry?(e.hasCoordinates=!0,t.projectedPath=e.path(t.geometry)):t.projectedPath=t.path),t.projectedPath||[]}applyOptions(t,e){let i=this.series,s=super.applyOptions(t,e),o=i.joinBy;if(i.mapData&&i.mapMap){let t=o[1],e=super.getNestedProperty(t),r=void 0!==e&&i.mapMap[e];r?a(s,{...r,name:s.name??r.name}):-1!==i.pointArrayMap.indexOf("value")&&(s.value=s.value||null)}return s}getProjectedBounds(t){let e=o(h.getProjectedPath(this,t)),i=this.properties,s=this.series.chart.mapView;if(e){let o=i&&i["hc-middle-lon"],r=i&&i["hc-middle-lat"];if(s&&n(o)&&n(r)){let i=t.forward([o,r]);e.midX=i[0],e.midY=i[1]}else{let t=i&&i["hc-middle-x"],s=i&&i["hc-middle-y"];e.midX=e.x1+(e.x2-e.x1)*l(this.middleX,n(t)?t:.5);let o=l(this.middleY,n(s)?s:.5);this.geometry||(o=1-o),e.midY=e.y2-(e.y2-e.y1)*o}return e}}onMouseOver(t){s.clearTimeout(this.colorInterval),!this.isNull&&this.visible||this.series.options.nullInteraction?super.onMouseOver.call(this,t):this.series.onMouseOut()}setVisible(t){this.visible=this.options.visible=!!t,this.dataLabel&&this.dataLabel[t?"show":"hide"](),this.graphic&&this.graphic.attr(this.series.pointAttribs(this))}zoomTo(t){let e=this.series.chart,i=e.mapView,s=this.bounds;if(i&&s){let o=n(this.insetIndex)&&i.insets[this.insetIndex];if(o){let t=o.projectedUnitsToPixels({x:s.x1,y:s.y1}),e=o.projectedUnitsToPixels({x:s.x2,y:s.y2}),r=i.pixelsToProjectedUnits({x:t.x,y:t.y}),a=i.pixelsToProjectedUnits({x:e.x,y:e.y});s={x1:r.x,y1:r.y,x2:a.x,y2:a.y}}i.fitToBounds(s,void 0,!1),this.series.isDirty=!0,e.redraw(t)}}}
vendor: 29,440 bytes, line 23540
23540return a(h.prototype,{dataLabelOnNull:t.pointMembers.dataLabelOnNull,moveToTopOnHover:t.pointMembers.moveToTopOnHover,isValid:t.pointMembers.isValid}),h}),i(e,"Series/Map/MapSeriesDefaults.js",[e["Core/Utilities.js"]],function(t){let{isNumber:e}=t;return{affectsMapView:!0,animation:!1,dataLabels:{crop:!1,formatter:function(){let{numberFormatter:t}=this.series.chart,{value:i}=this.point;return e(i)?t(i,-1):this.point.name},inside:!0,overflow:!1,padding:0,verticalAlign:"middle"},linecap:"round",marker:null,nullColor:"#f7f7f7",stickyTracking:!1,tooltip:{followPointer:!0,pointFormat:"{point.name}: {point.value}<br/>"},turboThreshold:0,allAreas:!0,borderColor:"#e6e6e6",borderWidth:1,joinBy:"hc-key",states:{hover:{halo:void 0,borderColor:"#666666",borderWidth:2},normal:{animation:!0},select:{color:"#cccccc"}},legendSymbol:"rectangle"}}),i(e,"Maps/MapViewDefaults.js",[],function(){return{center:[0,0],fitToGeometry:void 0,maxZoom:void 0,padding:0,projection:{name:void 0,parallels:void 0,rotation:void 0},zoom:void 0,insetOptions:{borderColor:"#cccccc",borderWidth:1,padding:"10%",relativeTo:"mapBoundingBox",units:"percent"}}}),i(e,"Maps/GeoJSONComposition.js",[e["Core/Globals.js"],e["Core/Templating.js"],e["Core/Utilities.js"]],function(t,e,i){var s;let{win:o}=t,{format:r}=e,{error:a,extend:n,merge:l,wrap:h}=i;return function(t){function e(t){return this.mapView&&this.mapView.lonLatToProjectedUnits(t)}function i(t){return this.mapView&&this.mapView.projectedUnitsToLonLat(t)}function s(t,e){let i=this.options.chart.proj4||o.proj4;if(!i){a(21,!1,this);return}let{jsonmarginX:s=0,jsonmarginY:r=0,jsonres:n=1,scale:l=1,xoffset:h=0,xpan:p=0,yoffset:d=0,ypan:c=0}=e,u=i(e.crs,[t.lon,t.lat]),m=e.cosAngle||e.rotation&&Math.cos(e.rotation),g=e.sinAngle||e.rotation&&Math.sin(e.rotation),f=e.rotation?[u[0]*m+u[1]*g,-u[0]*g+u[1]*m]:u;return{x:((f[0]-h)*l+p)*n+s,y:-(((d-f[1])*l+c)*n-r)}}function p(t,e){let i=this.options.chart.proj4||o.proj4;if(!i){a(21,!1,this);return}if(null===t.y)return;let{jsonmarginX:s=0,jsonmarginY:r=0,jsonres:n=1,scale:l=1,xoffset:h=0,xpan:p=0,yoffset:d=0,ypan:c=0}=e,u={x:((t.x-s)/n-p)/l+h,y:((t.y-r)/n+c)/l+d},m=e.cosAngle||e.rotation&&Math.cos(e.rotation),g=e.sinAngle||e.rotation&&Math.sin(e.rotation),f=i(e.crs,"WGS84",e.rotation?{x:u.x*m+-(u.y*g),y:u.x*g+u.y*m}:u);return{lat:f.y,lon:f.x}}function d(t,e){e||(e=Object.keys(t.objects)[0]);let i=t.objects[e];if(i["hc-decoded-geojson"]&&i["hc-decoded-geojson"].title===t.title)return i["hc-decoded-geojson"];let s=t.arcs;if(t.transform){let e,i,o;let r=t.arcs,{scale:a,translate:n}=t.transform;s=[];for(let t=0,l=r.length;t<l;++t){let l=r[t];s.push(e=[]),i=0,o=0;for(let t=0,s=l.length;t<s;++t)e.push([(i+=l[t][0])*a[0]+n[0],(o+=l[t][1])*a[1]+n[1]])}}let o=t=>"number"==typeof t[0]?t.reduce((t,e,i)=>{let o=e<0?s[~e]:s[e];return e<0?(o=o.slice(0,0===i?o.length:o.length-1)).reverse():i&&(o=o.slice(1)),t.concat(o)},[]):t.map(o),r=i.geometries,a=[];for(let t=0,e=r.length;t<e;++t)a.push({type:"Feature",properties:r[t].properties,geometry:{type:r[t].type,coordinates:r[t].coordinates||o(r[t].arcs)}});let n={type:"FeatureCollection",copyright:t.copyright,copyrightShort:t.copyrightShort,copyrightUrl:t.copyrightUrl,features:a,"hc-recommended-mapview":i["hc-recommended-mapview"],bbox:t.bbox,title:t.title};return i["hc-decoded-geojson"]=n,n}function c(t,e){e=l(!0,this.options.credits,e),this.mapCredits&&(e.href=void 0),t.call(this,e),this.credits&&this.mapCreditsFull&&this.credits.attr({title:this.mapCreditsFull})}t.compose=function(t){let o=t.prototype;o.transformFromLatLon||(o.fromLatLonToPoint=e,o.fromPointToLatLon=i,o.transformFromLatLon=s,o.transformToLatLon=p,h(o,"addCredits",c))},t.geojson=function(t,e="map",i){let s=[],o="Topology"===t.type?d(t):t,a=o.features;for(let t=0,i=a.length;t<i;++t){let i;let o=a[t],r=o.geometry||{},l=r.type,h=r.coordinates,p=o.properties;if(("map"===e||"mapbubble"===e)&&("Polygon"===l||"MultiPolygon"===l)?h.length&&(i={geometry:{coordinates:h,type:l}}):"mapline"===e&&("LineString"===l||"MultiLineString"===l)?h.length&&(i={geometry:{coordinates:h,type:l}}):"mappoint"===e&&"Point"===l&&h.length&&(i={geometry:{coordinates:h,type:l}}),i){let t=p&&(p.name||p.NAME),e=p&&p.lon,o=p&&p.lat;s.push(n(i,{lat:"number"==typeof o?o:void 0,lon:"number"==typeof e?e:void 0,name:"string"==typeof t?t:void 0,properties:p}))}}return i&&o.copyrightShort&&(i.chart.mapCredits=r(i.chart.options.credits?.mapText,{geojson:o}),i.chart.mapCreditsFull=r(i.chart.options.credits?.mapTextFull,{geojson:o})),s},t.topo2geo=d}(s||(s={})),s}),i(e,"Core/Geometry/PolygonClip.js",[],function(){function t(t,s,o=!0){let r=s[s.length-1],a,n,l,h=t;for(let t=0;t<s.length;t++){let p=h;a=s[t],h=[],n=o?p[p.length-1]:p[0];for(let t=0;t<p.length;t++)e(r,a,l=p[t])?(e(r,a,n)||h.push(i(r,a,n,l)),h.push(l)):e(r,a,n)&&h.push(i(r,a,n,l)),n=l;r=a}return h}function e(t,e,i){return(e[0]-t[0])*(i[1]-t[1])>(e[1]-t[1])*(i[0]-t[0])}function i(t,e,i,s){let o=[t[0]-e[0],t[1]-e[1]],r=[i[0]-s[0],i[1]-s[1]],a=t[0]*e[1]-t[1]*e[0],n=i[0]*s[1]-i[1]*s[0],l=1/(o[0]*r[1]-o[1]*r[0]),h=[(a*r[0]-n*o[0])*l,(a*r[1]-n*o[1])*l];return h.isIntersection=!0,h}return{clipLineString:function(e,i){let s=[],o=t(e,i,!1);for(let t=1;t<o.length;t++)o[t].isIntersection&&o[t-1].isIntersection&&(s.push(o.splice(0,t)),t=0),t===o.length-1&&s.push(o);return s},clipPolygon:t}}),i(e,"Maps/Projections/LambertConformalConic.js",[],function(){let t=Math.sign||(t=>0===t?0:t>0?1:-1),e=Math.PI/180,i=Math.PI/2,s=t=>Math.tan((i+t)/2);return class{constructor(i){let o=(i.parallels||[]).map(t=>t*e),r=o[0]||0,a=o[1]??r,n=Math.cos(r);"object"==typeof i.projectedBounds&&(this.projectedBounds=i.projectedBounds);let l=r===a?Math.sin(r):Math.log(n/Math.cos(a))/Math.log(s(a)/s(r));1e-10>Math.abs(l)&&(l=1e-10*(t(l)||1)),this.n=l,this.c=n*Math.pow(s(r),l)/l}forward(t){let{c:o,n:r,projectedBounds:a}=this,n=t[0]*e,l=t[1]*e;o>0?l<-i+1e-6&&(l=-i+1e-6):l>i-1e-6&&(l=i-1e-6);let h=o/Math.pow(s(l),r),p=h*Math.sin(r*n)*63.78137,d=(o-h*Math.cos(r*n))*63.78137,c=[p,d];return a&&(p<a.x1||p>a.x2||d<a.y1||d>a.y2)&&(c.outside=!0),c}inverse(s){let{c:o,n:r}=this,a=s[0]/63.78137,n=o-s[1]/63.78137,l=t(r)*Math.sqrt(a*a+n*n),h=Math.atan2(a,Math.abs(n))*t(n);return n*r<0&&(h-=Math.PI*t(a)*t(n)),[h/r/e,(2*Math.atan(Math.pow(o/l,1/r))-i)/e]}}}),i(e,"Maps/Projections/EqualEarth.js",[],function(){let t=Math.sqrt(3)/2;return class{constructor(){this.bounds={x1:-200.37508342789243,x2:200.37508342789243,y1:-97.52595454902263,y2:97.52595454902263}}forward(e){let i=Math.PI/180,s=Math.asin(t*Math.sin(e[1]*i)),o=s*s,r=o*o*o;return[e[0]*i*Math.cos(s)*74.03120656864502/(t*(1.340264+-.24331799999999998*o+r*(.0062510000000000005+.034164*o))),74.03120656864502*s*(1.340264+-.081106*o+r*(893e-6+.003796*o))]}inverse(e){let i=e[0]/74.03120656864502,s=e[1]/74.03120656864502,o=180/Math.PI,r=s,a,n,l,h;for(let t=0;t<12&&(n=(a=r*r)*a*a,l=r*(1.340264+-.081106*a+n*(893e-6+.003796*a))-s,r-=h=l/(1.340264+-.24331799999999998*a+n*(.0062510000000000005+.034164*a)),!(1e-9>Math.abs(h)));++t);n=(a=r*r)*a*a;let p=o*t*i*(1.340264+-.24331799999999998*a+n*(.0062510000000000005+.034164*a))/Math.cos(r),d=o*Math.asin(Math.sin(r)/t);return Math.abs(p)>180?[NaN,NaN]:[p,d]}}}),i(e,"Maps/Projections/Miller.js",[],function(){let t=Math.PI/4,e=Math.PI/180;return class{constructor(){this.bounds={x1:-200.37508342789243,x2:200.37508342789243,y1:-146.91480769173063,y2:146.91480769173063}}forward(i){return[i[0]*e*63.78137,79.7267125*Math.log(Math.tan(t+.4*i[1]*e))]}inverse(i){return[i[0]/63.78137/e,2.5*(Math.atan(Math.exp(i[1]/63.78137*.8))-t)/e]}}}),i(e,"Maps/Projections/Orthographic.js",[],function(){let t=Math.PI/180;return class{constructor(){this.antimeridianCutting=!1,this.bounds={x1:-63.78460826781007,x2:63.78460826781007,y1:-63.78460826781007,y2:63.78460826781007}}forward(e){let i=e[0],s=e[1]*t,o=[Math.cos(s)*Math.sin(i*t)*63.78460826781007,63.78460826781007*Math.sin(s)];return(i<-90||i>90)&&(o.outside=!0),o}inverse(e){let i=e[0]/63.78460826781007,s=e[1]/63.78460826781007,o=Math.sqrt(i*i+s*s),r=Math.asin(o),a=Math.sin(r);return[Math.atan2(i*a,o*Math.cos(r))/t,Math.asin(o&&s*a/o)/t]}}}),i(e,"Maps/Projections/WebMercator.js",[],function(){let t=Math.PI/180;return class{constructor(){this.bounds={x1:-200.37508342789243,x2:200.37508342789243,y1:-200.3750834278071,y2:200.3750834278071},this.maxLatitude=85.0511287798}forward(e){let i=Math.sin(e[1]*t),s=[63.78137*e[0]*t,63.78137*Math.log((1+i)/(1-i))/2];return Math.abs(e[1])>this.maxLatitude&&(s.outside=!0),s}inverse(e){return[e[0]/(63.78137*t),(2*Math.atan(Math.exp(e[1]/63.78137))-Math.PI/2)/t]}}}),i(e,"Maps/Projections/ProjectionRegistry.js",[e["Maps/Projections/LambertConformalConic.js"],e["Maps/Projections/EqualEarth.js"],e["Maps/Projections/Miller.js"],e["Maps/Projections/Orthographic.js"],e["Maps/Projections/WebMercator.js"]],function(t,e,i,s,o){return{EqualEarth:e,LambertConformalConic:t,Miller:i,Orthographic:s,WebMercator:o}}),i(e,"Maps/Projection.js",[e["Core/Geometry/PolygonClip.js"],e["Maps/Projections/ProjectionRegistry.js"],e["Core/Utilities.js"]],function(t,e,i){let{clipLineString:s,clipPolygon:o}=t,{clamp:r,erase:a}=i,n=2*Math.PI/360,l=t=>(t<-180&&(t+=360),t>180&&(t-=360),t),h=t=>(1-Math.cos(t))/2,p=(t,e)=>{let i=Math.cos,s=t[1]*n,o=t[0]*n,r=e[1]*n,a=e[0]*n;return h(r-s)+i(s)*i(r)*h(a-o)};class d{static add(t,e){d.registry[t]=e}static distance(t,e){let{atan2:i,sqrt:s}=Math,o=p(t,e);return 2*i(s(o),s(1-o))*6371e3}static geodesic(t,e,i,s=5e5){let{atan2:o,cos:r,sin:a,sqrt:l}=Math,h=d.distance,p=t[1]*n,c=t[0]*n,u=e[1]*n,m=e[0]*n,g=r(p)*r(c),f=r(u)*r(m),b=r(p)*a(c),y=r(u)*a(m),x=a(p),M=a(u),C=h(t,e),j=C/6371e3,v=a(j),w=Math.round(C/s),S=[];if(i&&S.push(t),w>1){let t=1/w;for(let e=t;e<.999;e+=t){let t=a((1-e)*j)/v,i=a(e*j)/v,s=t*g+i*f,r=t*b+i*y,h=o(t*x+i*M,l(s*s+r*r)),p=o(r,s);S.push([p/n,h/n])}}return i&&S.push(e),S}static insertGeodesics(t){let e=t.length-1;for(;e--;)if(Math.max(Math.abs(t[e][0]-t[e+1][0]),Math.abs(t[e][1]-t[e+1][1]))>10){let i=d.geodesic(t[e],t[e+1]);i.length&&t.splice(e+1,0,...i)}}static toString(t){let{name:e,rotation:i}=t||{};return[e,i&&i.join(",")].join(";")}constructor(t={}){this.hasCoordinates=!1,this.hasGeoProjection=!1,this.maxLatitude=90,this.options=t;let{name:e,projectedBounds:i,rotation:s}=t;this.rotator=s?this.getRotator(s):void 0;let o=e?d.registry[e]:void 0;o&&(this.def=new o(t));let{def:r,rotator:a}=this;r&&(this.maxLatitude=r.maxLatitude||90,this.hasGeoProjection=!0),a&&r?(this.forward=t=>r.forward(a.forward(t)),this.inverse=t=>a.inverse(r.inverse(t))):r?(this.forward=t=>r.forward(t),this.inverse=t=>r.inverse(t)):a&&(this.forward=a.forward,this.inverse=a.inverse),this.bounds="world"===i?r&&r.bounds:i}lineIntersectsBounds(t){let{x1:e,x2:i,y1:s,y2:o}=this.bounds||{},r=(t,e,i)=>{let[s,o]=t,r=e?0:1;if("number"==typeof i&&s[e]>=i!=o[e]>=i){let t=(i-s[e])/(o[e]-s[e]),a=s[r]+t*(o[r]-s[r]);return e?[a,i]:[i,a]}},a,n=t[0];return(a=r(t,0,e))?(n=a,t[1]=a):(a=r(t,0,i))&&(n=a,t[1]=a),(a=r(t,1,s))?n=a:(a=r(t,1,o))&&(n=a),n}getRotator(t){let e=t[0]*n,i=(t[1]||0)*n,s=(t[2]||0)*n,o=Math.cos(i),r=Math.sin(i),a=Math.cos(s),l=Math.sin(s);if(0!==e||0!==i||0!==s)return{forward:t=>{let i=t[0]*n+e,s=t[1]*n,h=Math.cos(s),p=Math.cos(i)*h,d=Math.sin(i)*h,c=Math.sin(s),u=c*o+p*r;return[Math.atan2(d*a-u*l,p*o-c*r)/n,Math.asin(u*a+d*l)/n]},inverse:t=>{let i=t[0]*n,s=t[1]*n,h=Math.cos(s),p=Math.cos(i)*h,d=Math.sin(i)*h,c=Math.sin(s),u=c*a-d*l;return[(Math.atan2(d*a+c*l,p*o+u*r)-e)/n,Math.asin(u*o-p*r)/n]}}}forward(t){return t}inverse(t){return t}cutOnAntimeridian(t,e){let i;let s=[],o=[t];for(let i=0,o=t.length;i<o;++i){let o=t[i],a=t[i-1];if(!i){if(!e)continue;a=t[t.length-1]}let n=a[0],l=o[0];if((n<-90||n>90)&&(l<-90||l>90)&&n>0!=l>0){let t=r((180-(n+360)%360)/((l+360)%360-(n+360)%360),0,1),e=a[1]+t*(o[1]-a[1]);s.push({i,lat:e,direction:n<0?1:-1,previousLonLat:a,lonLat:o})}}if(s.length){if(e){s.length%2==1&&(i=s.slice().sort((t,e)=>Math.abs(e.lat)-Math.abs(t.lat))[0],a(s,i));let e=s.length-2;for(;e>=0;){let i=s[e].i,r=l(180+1e-6*s[e].direction),a=l(180-1e-6*s[e].direction),n=t.splice(i,s[e+1].i-i,...d.geodesic([r,s[e].lat],[r,s[e+1].lat],!0));n.push(...d.geodesic([a,s[e+1].lat],[a,s[e].lat],!0)),o.push(n),e-=2}if(i)for(let t=0;t<o.length;t++){let{direction:e,lat:s}=i,r=o[t],a=r.indexOf(i.lonLat);if(a>-1){let t=(s<0?-1:1)*this.maxLatitude,o=l(180+1e-6*e),n=l(180-1e-6*e),h=d.geodesic([o,s],[o,t],!0);for(let i=o+120*e;i>-180&&i<180;i+=120*e)h.push([i,t]);h.push(...d.geodesic([n,t],[n,i.lat],!0)),r.splice(a,0,...h);break}}}else{let e=s.length;for(;e--;){let i=s[e].i,r=t.splice(i,t.length,[l(180+1e-6*s[e].direction),s[e].lat]);r.unshift([l(180-1e-6*s[e].direction),s[e].lat]),o.push(r)}}}return o}path(t){let e;let{bounds:i,def:r,rotator:a}=this,n=[],l="Polygon"===t.type||"MultiPolygon"===t.type,h=this.hasGeoProjection,p=!r||!1!==r.antimeridianCutting,c=p?a:void 0,u=p&&r||this;i&&(e=[[i.x1,i.y1],[i.x2,i.y1],[i.x2,i.y2],[i.x1,i.y2]]);let m=t=>{let r=t.map(t=>{if(p){c&&(t=c.forward(t));let e=t[0];1e-6>Math.abs(e-180)&&(e=e<180?179.999999:180.000001),t=[e,t[1]]}return t}),a=[r];h&&(d.insertGeodesics(r),p&&(a=this.cutOnAntimeridian(r,l))),a.forEach(t=>{let r,a;if(t.length<2)return;let c=!1,m=!1,g=t=>{c?n.push(["L",t[0],t[1]]):(n.push(["M",t[0],t[1]]),c=!0)},f=!1,b=!1,y=t.map(t=>{let e=u.forward(t);return e.outside?f=!0:b=!0,e[1]===1/0?e[1]=1e10:e[1]===-1/0&&(e[1]=-1e10),e});if(p){if(l&&y.push(y[0]),f){if(!b)return;if(e){if(l)y=o(y,e);else if(i){s(y,e).forEach(t=>{c=!1,t.forEach(g)});return}}}y.forEach(g)}else for(let e=0;e<y.length;e++){let i=t[e],s=y[e];s.outside?m=!0:(l&&!r&&(r=i,t.push(i),y.push(s)),m&&a&&(l&&h?d.geodesic(a,i).forEach(t=>g(u.forward(t))):c=!1),g(s),a=i,m=!1)}})};return"LineString"===t.type?m(t.coordinates):"MultiLineString"===t.type?t.coordinates.forEach(t=>m(t)):"Polygon"===t.type?(t.coordinates.forEach(t=>m(t)),n.length&&n.push(["Z"])):"MultiPolygon"===t.type&&(t.coordinates.forEach(t=>{t.forEach(t=>m(t))}),n.length&&n.push(["Z"])),n}}return d.registry=e,d}),i(e,"Maps/MapView.js",[e["Core/Globals.js"],e["Maps/MapViewDefaults.js"],e["Maps/GeoJSONComposition.js"],e["Maps/MapUtilities.js"],e["Maps/Projection.js"],e["Core/Utilities.js"]],function(t,e,i,s,o,r){let{composed:a}=t,{topo2geo:n}=i,{boundsFromPath:l,pointInPolygon:h}=s,{addEvent:p,clamp:d,crisp:c,fireEvent:u,isArray:m,isNumber:g,isObject:f,isString:b,merge:y,pick:x,pushUnique:M,relativeLength:C}=r,j={};function v(t,e){let{width:i,height:s}=e;return Math.log(400.979322/Math.max((t.x2-t.x1)/(i/256),(t.y2-t.y1)/(s/256)))/Math.log(2)}function w(t){t.seriesOptions.mapData&&this.mapView?.recommendMapView(this,[this.options.chart.map,t.seriesOptions.mapData],this.options.drilldown?.mapZooming)}class S{static compose(t){M(a,"MapView")&&(j=t.maps,p(t,"afterInit",function(){this.mapView=new S(this,this.options.mapView)},{order:0}),p(t,"addSeriesAsDrilldown",w),p(t,"afterDrillUp",w))}static compositeBounds(t){if(t.length)return t.slice(1).reduce((t,e)=>(t.x1=Math.min(t.x1,e.x1),t.y1=Math.min(t.y1,e.y1),t.x2=Math.max(t.x2,e.x2),t.y2=Math.max(t.y2,e.y2),t),y(t[0]))}static mergeInsets(t,e){let i=t=>{let e={};return t.forEach((t,i)=>{e[t&&t.id||`i${i}`]=t}),e},s=y(i(t),i(e));return Object.keys(s).map(t=>s[t])}constructor(t,i){this.allowTransformAnimation=!0,this.eventsToUnbind=[],this.insets=[],this.padding=[0,0,0,0],this.recommendedMapView={},this instanceof P||this.recommendMapView(t,[t.options.chart.map,...(t.options.series||[]).map(t=>t.mapData)]),this.userOptions=i||{};let s=y(e,this.recommendedMapView,i),r=this.recommendedMapView?.insets,a=i&&i.insets;r&&a&&(s.insets=S.mergeInsets(r,a)),this.chart=t,this.center=s.center,this.options=s,this.projection=new o(s.projection),this.playingField=t.plotBox,this.zoom=s.zoom||0,this.minZoom=s.minZoom,this.createInsets(),this.eventsToUnbind.push(p(t,"afterSetChartSize",()=>{this.playingField=this.getField(),(void 0===this.minZoom||this.minZoom===this.zoom)&&(this.fitToBounds(void 0,void 0,!1),!this.chart.hasRendered&&g(this.userOptions.zoom)&&(this.zoom=this.userOptions.zoom),this.userOptions.center&&y(!0,this.center,this.userOptions.center))})),this.setUpEvents()}createInsets(){let t=this.options,e=t.insets;e&&e.forEach(e=>{let i=new P(this,y(t.insetOptions,e));this.insets.push(i)})}fitToBounds(t,e,i=!0,s){let o=t||this.getProjectedBounds();if(o){let r=x(e,t?0:this.options.padding),a=this.getField(!1),n=m(r)?r:[r,r,r,r];this.padding=[C(n[0],a.height),C(n[1],a.width),C(n[2],a.height),C(n[3],a.width)],this.playingField=this.getField();let l=v(o,this.playingField);t||(this.minZoom=l);let h=this.projection.inverse([(o.x2+o.x1)/2,(o.y2+o.y1)/2]);this.setView(h,l,i,s)}}getField(t=!0){let e=t?this.padding:[0,0,0,0];return{x:e[3],y:e[0],width:this.chart.plotWidth-e[1]-e[3],height:this.chart.plotHeight-e[0]-e[2]}}getGeoMap(t){if(b(t))return j[t]&&"Topology"===j[t].type?n(j[t]):j[t];if(f(t,!0)){if("FeatureCollection"===t.type)return t;if("Topology"===t.type)return n(t)}}getMapBBox(){let t=this.getProjectedBounds(),e=this.getScale();if(t){let i=this.padding,s=this.projectedUnitsToPixels({x:t.x1,y:t.y2});return{width:(t.x2-t.x1)*e+i[1]+i[3],height:(t.y2-t.y1)*e+i[0]+i[2],x:s.x-i[3],y:s.y-i[0]}}}getProjectedBounds(){let t=this.projection,e=this.chart.series.reduce((t,e)=>{let i=e.getProjectedBounds&&e.getProjectedBounds();return i&&!1!==e.options.affectsMapView&&t.push(i),t},[]),i=this.options.fitToGeometry;if(i){if(!this.fitToGeometryCache){if("MultiPoint"===i.type){let e=i.coordinates.map(e=>t.forward(e)),s=e.map(t=>t[0]),o=e.map(t=>t[1]);this.fitToGeometryCache={x1:Math.min.apply(0,s),x2:Math.max.apply(0,s),y1:Math.min.apply(0,o),y2:Math.max.apply(0,o)}}else this.fitToGeometryCache=l(t.path(i))}return this.fitToGeometryCache}return this.projection.bounds||S.compositeBounds(e)}getScale(){return 256/400.979322*Math.pow(2,this.zoom)}getSVGTransform(){let{x:t,y:e,width:i,height:s}=this.playingField,o=this.projection.forward(this.center),r=this.projection.hasCoordinates?-1:1,a=this.getScale(),n=a*r,l=t+i/2-o[0]*a,h=e+s/2-o[1]*n;return{scaleX:a,scaleY:n,translateX:l,translateY:h}}lonLatToPixels(t){let e=this.lonLatToProjectedUnits(t);if(e)return this.projectedUnitsToPixels(e)}lonLatToProjectedUnits(t){let e=this.chart,i=e.mapTransforms;if(i){for(let s in i)if(Object.hasOwnProperty.call(i,s)&&i[s].hitZone){let o=e.transformFromLatLon(t,i[s]);if(o&&h(o,i[s].hitZone.coordinates[0]))return o}return e.transformFromLatLon(t,i.default)}for(let e of this.insets)if(e.options.geoBounds&&h({x:t.lon,y:t.lat},e.options.geoBounds.coordinates[0])){let i=e.projection.forward([t.lon,t.lat]),s=e.projectedUnitsToPixels({x:i[0],y:i[1]});return this.pixelsToProjectedUnits(s)}let s=this.projection.forward([t.lon,t.lat]);if(!s.outside)return{x:s[0],y:s[1]}}projectedUnitsToLonLat(t){let e=this.chart,i=e.mapTransforms;if(i){for(let s in i)if(Object.hasOwnProperty.call(i,s)&&i[s].hitZone&&h(t,i[s].hitZone.coordinates[0]))return e.transformToLatLon(t,i[s]);return e.transformToLatLon(t,i.default)}let s=this.projectedUnitsToPixels(t);for(let t of this.insets)if(t.hitZone&&h(s,t.hitZone.coordinates[0])){let e=t.pixelsToProjectedUnits(s),i=t.projection.inverse([e.x,e.y]);return{lon:i[0],lat:i[1]}}let o=this.projection.inverse([t.x,t.y]);return{lon:o[0],lat:o[1]}}recommendMapView(t,e,i=!1){this.recommendedMapView={};let s=e.map(t=>this.getGeoMap(t)),o=[];s.forEach(t=>{if(t&&(Object.keys(this.recommendedMapView).length||(this.recommendedMapView=t["hc-recommended-mapview"]||{}),t.bbox)){let[e,i,s,r]=t.bbox;o.push({x1:e,y1:i,x2:s,y2:r})}});let r=o.length&&S.compositeBounds(o);u(this,"onRecommendMapView",{geoBounds:r,chart:t},function(){if(r&&this.recommendedMapView){if(!this.recommendedMapView.projection){let{x1:t,y1:e,x2:i,y2:s}=r;this.recommendedMapView.projection=i-t>180&&s-e>90?{name:"EqualEarth",parallels:[0,0],rotation:[0]}:{name:"LambertConformalConic",parallels:[e,s],rotation:[-(t+i)/2]}}this.recommendedMapView.insets||(this.recommendedMapView.insets=void 0)}}),this.geoMap=s[0],i&&t.hasRendered&&!t.userOptions.mapView?.projection&&this.recommendedMapView&&this.update(this.recommendedMapView)}redraw(t){this.chart.series.forEach(t=>{t.useMapGeometry&&(t.isDirty=!0)}),this.chart.redraw(t)}setView(t,e,i=!0,s){t&&(this.center=t),"number"==typeof e&&("number"==typeof this.minZoom&&(e=Math.max(e,this.minZoom)),"number"==typeof this.options.maxZoom&&(e=Math.min(e,this.options.maxZoom)),g(e)&&(this.zoom=e));let o=this.getProjectedBounds();if(o){let t=this.projection.forward(this.center),{x:e,y:i,width:s,height:r}=this.playingField,a=this.getScale(),n=this.projectedUnitsToPixels({x:o.x1,y:o.y1}),l=this.projectedUnitsToPixels({x:o.x2,y:o.y2}),h=[(o.x1+o.x2)/2,(o.y1+o.y2)/2];if(!this.chart.series.some(t=>t.isDrilling)){let o=n.x,p=l.y,d=l.x,c=n.y;d-o<s?t[0]=h[0]:o<e&&d<e+s?t[0]+=Math.max(o-e,d-s-e)/a:d>e+s&&o>e&&(t[0]+=Math.min(d-s-e,o-e)/a),c-p<r?t[1]=h[1]:p<i&&c<i+r?t[1]-=Math.max(p-i,c-r-i)/a:c>i+r&&p>i&&(t[1]-=Math.min(c-r-i,p-i)/a),this.center=this.projection.inverse(t)}this.insets.forEach(t=>{t.options.field&&(t.hitZone=t.getHitZone(),t.playingField=t.getField())}),this.render()}u(this,"afterSetView"),i&&this.redraw(s)}projectedUnitsToPixels(t){let e=this.getScale(),i=this.projection.forward(this.center),s=this.playingField,o=s.x+s.width/2,r=s.y+s.height/2;return{x:o-e*(i[0]-t.x),y:r+e*(i[1]-t.y)}}pixelsToLonLat(t){return this.projectedUnitsToLonLat(this.pixelsToProjectedUnits(t))}pixelsToProjectedUnits(t){let{x:e,y:i}=t,s=this.getScale(),o=this.projection.forward(this.center),r=this.playingField,a=r.x+r.width/2,n=r.y+r.height/2;return{x:o[0]+(e-a)/s,y:o[1]-(i-n)/s}}setUpEvents(){let t,e,i;let{chart:s}=this,o=o=>{let{lastTouches:r,pinchDown:a}=s.pointer,n=this.projection,l=o.touches,{mouseDownX:h,mouseDownY:p}=s,c=0;if(a?.length===1?(h=a[0].chartX,p=a[0].chartY):a?.length===2&&(h=(a[0].chartX+a[1].chartX)/2,p=(a[0].chartY+a[1].chartY)/2),l?.length===2&&r&&(c=Math.log(Math.sqrt(Math.pow(r[0].chartX-r[1].chartX,2)+Math.pow(r[0].chartY-r[1].chartY,2))/Math.sqrt(Math.pow(l[0].chartX-l[1].chartX,2)+Math.pow(l[0].chartY-l[1].chartY,2)))/Math.log(.5)),g(h)&&g(p)){let r=`${h},${p}`,{chartX:a,chartY:u}=o.originalEvent;l?.length===2&&(a=(l[0].chartX+l[1].chartX)/2,u=(l[0].chartY+l[1].chartY)/2),r!==e&&(e=r,t=this.projection.forward(this.center),i=(this.projection.options.rotation||[0,0]).slice());let m=n.def&&n.def.bounds,f=m&&v(m,this.playingField)||-1/0;if("Orthographic"===n.options.name&&2>(l?.length||0)&&(this.minZoom||1/0)<1.3*f){let t=440/(this.getScale()*Math.min(s.plotWidth,s.plotHeight));if(i){let e=(h-a)*t-i[0],o=d(-i[1]-(p-u)*t,-80,80),r=this.zoom;this.update({projection:{rotation:[-e,-o]}},!1),this.fitToBounds(void 0,void 0,!1),this.zoom=r,s.redraw(!1)}}else if(g(a)&&g(u)){let e=this.getScale(),i=this.projection.hasCoordinates?1:-1,s=this.projection.inverse([t[0]+(h-a)/e,t[1]-(p-u)/e*i]);isNaN(s[0]+s[1])||this.zoomBy(c,s,void 0,!1)}o.preventDefault()}};p(s,"pan",o),p(s,"touchpan",o),p(s,"selection",t=>{if(t.resetSelection)this.zoomBy();else{let e=t.x-s.plotLeft,i=t.y-s.plotTop,{y:o,x:r}=this.pixelsToProjectedUnits({x:e,y:i}),{y:a,x:n}=this.pixelsToProjectedUnits({x:e+t.width,y:i+t.height});this.fitToBounds({x1:r,y1:o,x2:n,y2:a},void 0,!0,!t.originalEvent.touches&&void 0),/^touch/.test(t.originalEvent.type)||s.showResetZoom(),t.preventDefault()}})}render(){this.group||(this.group=this.chart.renderer.g("map-view").attr({zIndex:4}).add())}update(t,e=!0,i){let s=t.projection,r=s&&o.toString(s)!==o.toString(this.options.projection),a=!1;y(!0,this.userOptions,t),y(!0,this.options,t),"insets"in t&&(this.insets.forEach(t=>t.destroy()),this.insets.length=0,a=!0),(r||"fitToGeometry"in t)&&delete this.fitToGeometryCache,(r||a)&&(this.chart.series.forEach(t=>{let e=t.transformGroups;if(t.clearBounds&&t.clearBounds(),t.isDirty=!0,t.isDirtyData=!0,a&&e)for(;e.length>1;){let t=e.pop();t&&t.destroy()}}),r&&(this.projection=new o(this.options.projection)),a&&this.createInsets(),!t.center&&Object.hasOwnProperty.call(t,"zoom")&&!g(t.zoom)&&this.fitToBounds(void 0,void 0,!1)),t.center||g(t.zoom)?this.setView(this.options.center,t.zoom,!1):"fitToGeometry"in t&&this.fitToBounds(void 0,void 0,!1),e&&this.chart.redraw(i)}zoomBy(t,e,i,s){let o=this.chart,r=this.projection.forward(this.center);if("number"==typeof t){let a,n,l;let h=this.zoom+t;if(i){let[t,e]=i,s=this.getScale(),a=t-o.plotLeft-o.plotWidth/2,h=e-o.plotTop-o.plotHeight/2;n=r[0]+a/s,l=r[1]+h/s}if("number"==typeof n&&"number"==typeof l){let t=1-Math.pow(2,this.zoom)/Math.pow(2,h),e=r[0]-n,i=r[1]-l;r[0]-=e*t,r[1]+=i*t,a=this.projection.inverse(r)}this.setView(e||a,h,void 0,s)}else this.fitToBounds(void 0,void 0,void 0,s)}}class P extends S{constructor(t,e){if(super(t.chart,e),this.id=e.id,this.mapView=t,this.options=y({center:[0,0]},t.options.insetOptions,e),this.allBounds=[],this.options.geoBounds){let e=t.projection.path(this.options.geoBounds);this.geoBoundsProjectedBox=l(e),this.geoBoundsProjectedPolygon=e.map(t=>[t[1]||0,t[2]||0])}}getField(t=!0){let e=this.hitZone;if(e){let i=t?this.padding:[0,0,0,0],s=e.coordinates[0],o=s.map(t=>t[0]),r=s.map(t=>t[1]),a=Math.min.apply(0,o)+i[3],n=Math.max.apply(0,o)-i[1],l=Math.min.apply(0,r)+i[0],h=Math.max.apply(0,r)-i[2];if(g(a)&&g(l))return{x:a,y:l,width:n-a,height:h-l}}return super.getField.call(this,t)}getHitZone(){let{chart:t,mapView:e,options:i}=this,{coordinates:s}=i.field||{};if(s){let o=s[0];if("percent"===i.units){let s="mapBoundingBox"===i.relativeTo&&e.getMapBBox()||y(t.plotBox,{x:0,y:0});o=o.map(t=>[C(`${t[0]}%`,s.width,s.x),C(`${t[1]}%`,s.height,s.y)])}return{type:"Polygon",coordinates:[o]}}}getProjectedBounds(){return S.compositeBounds(this.allBounds)}isInside(t){let{geoBoundsProjectedBox:e,geoBoundsProjectedPolygon:i}=this;return!!(e&&t.x>=e.x1&&t.x<=e.x2&&t.y>=e.y1&&t.y<=e.y2&&i&&h(t,i))}render(){let{chart:t,mapView:e,options:i}=this,s=i.borderPath||i.field;if(s&&e.group){let o=!0;this.border||(this.border=t.renderer.path().addClass("highcharts-mapview-inset-border").add(e.group),o=!1),t.styledMode||this.border.attr({stroke:i.borderColor,"stroke-width":i.borderWidth});let r=this.border.strokeWidth(),a="mapBoundingBox"===i.relativeTo&&e.getMapBBox()||e.playingField,n=(s.coordinates||[]).reduce((e,s)=>s.reduce((e,s,o)=>{let[n,l]=s;return"percent"===i.units&&(n=t.plotLeft+C(`${n}%`,a.width,a.x),l=t.plotTop+C(`${l}%`,a.height,a.y)),n=c(n,r),l=c(l,r),e.push(0===o?["M",n,l]:["L",n,l]),e},e),[]);this.border[o?"animate":"attr"]({d:n})}}destroy(){this.border&&(this.border=this.border.destroy()),this.eventsToUnbind.forEach(t=>t())}setUpEvents(){}}return S}),i(e,"Series/Map/MapSeries.js",[e["Core/Animation/AnimationUtilities.js"],e["Series/ColorMapComposition.js"],e["Series/CenteredUtilities.js"],e["Core/Globals.js"],e["Core/Chart/MapChart.js"],e["Series/Map/MapPoint.js"],e["Series/Map/MapSeriesDefaults.js"],e["Maps/MapView.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e,i,s,o,r,a,n,l,h){let{animObject:p,stop:d}=t,{noop:c}=s,{splitPath:u}=o,{column:m,scatter:g}=l.seriesTypes,{extend:f,find:b,fireEvent:y,getNestedProperty:x,isArray:M,defined:C,isNumber:j,isObject:v,merge:w,objectEach:S,pick:P,splat:L}=h;class A extends g{constructor(){super(...arguments),this.processedData=[]}animate(t){let{chart:e,group:i}=this,s=p(this.options.animation);t?i.attr({translateX:e.plotLeft+e.plotWidth/2,translateY:e.plotTop+e.plotHeight/2,scaleX:.001,scaleY:.001}):i.animate({translateX:e.plotLeft,translateY:e.plotTop,scaleX:1,scaleY:1},s)}clearBounds(){this.points.forEach(t=>{delete t.bounds,delete t.insetIndex,delete t.projectedPath}),delete this.bounds}doFullTranslate(){return!!(this.isDirtyData||this.chart.isResizing||!this.hasRendered)}drawMapDataLabels(){super.drawDataLabels(),this.dataLabelsGroup&&this.dataLabelsGroup.clip(this.chart.clipRect)}drawPoints(){let t=this,{chart:e,group:i,transformGroups:s=[]}=this,{mapView:o,renderer:r}=e;if(o){this.transformGroups=s,s[0]||(s[0]=r.g().add(i));for(let t=0,e=o.insets.length;t<e;++t)s[t+1]||s.push(r.g().add(i));this.doFullTranslate()&&(this.points.forEach(t=>{let{graphic:e}=t;t.group=s["number"==typeof t.insetIndex?t.insetIndex+1:0],e&&e.parentGroup!==t.group&&e.add(t.group)}),m.prototype.drawPoints.apply(this),this.points.forEach(i=>{let s=i.graphic;if(s){let o=s.animate,r="";i.name&&(r+="highcharts-name-"+i.name.replace(/ /g,"-").toLowerCase()),i.properties&&i.properties["hc-key"]&&(r+=" highcharts-key-"+i.properties["hc-key"].toString().toLowerCase()),r&&s.addClass(r),e.styledMode&&s.css(this.pointAttribs(i,i.selected&&"select"||void 0)),s.attr({visibility:!i.visible&&(i.visible||i.isNull)?"hidden":"inherit"}),s.animate=function(i,r,a){let n=j(i["stroke-width"])&&!j(s["stroke-width"]),l=j(s["stroke-width"])&&!j(i["stroke-width"]);if(n||l){let o=P(t.getStrokeWidth(t.options),1)/(e.mapView&&e.mapView.getScale()||1);n&&(s["stroke-width"]=o),l&&(i["stroke-width"]=o)}return o.call(s,i,r,l?function(){s.element.removeAttribute("stroke-width"),delete s["stroke-width"],a&&a.apply(this,arguments)}:a)}}})),s.forEach((i,s)=>{let a=(0===s?o:o.insets[s-1]).getSVGTransform(),n=P(this.getStrokeWidth(this.options),1),l=a.scaleX,h=a.scaleY>0?1:-1,c=e=>{(t.points||[]).forEach(t=>{let i;let s=t.graphic;s&&s["stroke-width"]&&(i=this.getStrokeWidth(t.options))&&s.attr({"stroke-width":i/e})})};if(r.globalAnimation&&e.hasRendered&&o.allowTransformAnimation){let t=Number(i.attr("translateX")),e=Number(i.attr("translateY")),s=Number(i.attr("scaleX")),o=(o,r)=>
23540{let p=s+(l-s)*r.pos;i.attr({translateX:t+(a.translateX-t)*r.pos,translateY:e+(a.translateY-e)*r.pos,scaleX:p,scaleY:p*h,"stroke-width":n/p}),c(p)},d=w(p(r.globalAnimation)),u=d.step;d.step=function(){u&&u.apply(this,arguments),o.apply(this,arguments)},i.attr({animator:0}).animate({animator:1},d,(function(){"boolean"!=typeof r.globalAnimation&&r.globalAnimation.complete&&r.globalAnimation.complete({applyDrilldown:!0}),y(this,"mapZoomComplete")}).bind(this))}else d(i),i.attr(w(a,{"stroke-width":n/l})),c(l)}),this.isDrilling||this.drawMapDataLabels()}}getProjectedBounds(){if(!this.bounds&&this.chart.mapView){let{insets:t,projection:e}=this.chart.mapView,i=[];(this.points||[]).forEach(s=>{if(s.path||s.geometry){if("string"==typeof s.path?s.path=u(s.path):M(s.path)&&"M"===s.path[0]&&(s.path=this.chart.renderer.pathToSegments(s.path)),!s.bounds){let i=s.getProjectedBounds(e);if(i){s.labelrank=P(s.labelrank,(i.x2-i.x1)*(i.y2-i.y1));let{midX:e,midY:o}=i;if(t&&j(e)&&j(o)){let r=b(t,t=>t.isInside({x:e,y:o}));r&&(delete s.projectedPath,(i=s.getProjectedBounds(r.projection))&&r.allBounds.push(i),s.insetIndex=t.indexOf(r))}s.bounds=i}}s.bounds&&void 0===s.insetIndex&&i.push(s.bounds)}}),this.bounds=n.compositeBounds(i)}return this.bounds}getStrokeWidth(t){let e=this.pointAttrToOptions;return t[e&&e["stroke-width"]||"borderWidth"]}hasData(){return!!this.processedXData.length}pointAttribs(t,e){let{mapView:i,styledMode:s}=t.series.chart,o=s?this.colorAttribs(t):m.prototype.pointAttribs.call(this,t,e),r=this.getStrokeWidth(t.options);if(e){let i=w(this.options.states&&this.options.states[e],t.options.states&&t.options.states[e]||{}),s=this.getStrokeWidth(i);C(s)&&(r=s),o.stroke=i.borderColor??t.color}r&&i&&(r/=i.getScale());let a=this.getStrokeWidth(this.options);return o.dashstyle&&i&&j(a)&&(r=a/i.getScale()),t.visible||(o.fill=this.options.nullColor),C(r)?o["stroke-width"]=r:delete o["stroke-width"],o["stroke-linecap"]=o["stroke-linejoin"]=this.options.linecap,o}updateData(){return!this.processedData&&super.updateData.apply(this,arguments)}setData(t,e=!0,i,s){delete this.bounds,super.setData(t,!1,void 0,s),this.processData(),this.generatePoints(),e&&this.chart.redraw(i)}processData(){let t,e,i;let o=this.options,a=o.data,n=this.chart,l=n.options.chart,h=this.joinBy,p=o.keys||this.pointArrayMap,d=[],c={},u=this.chart.mapView,m=u&&(v(o.mapData,!0)?u.getGeoMap(o.mapData):u.geoMap),g=n.mapTransforms=l.mapTransforms||m&&m["hc-transform"]||n.mapTransforms;g&&S(g,t=>{t.rotation&&(t.cosAngle=Math.cos(t.rotation),t.sinAngle=Math.sin(t.rotation))}),M(o.mapData)?i=o.mapData:m&&"FeatureCollection"===m.type&&(this.mapTitle=m.title,i=s.geojson(m,this.type,this)),this.processedData=[];let f=this.processedData;if(a){let t;for(let e=0,i=a.length;e<i;++e){if(j(t=a[e]))f[e]={value:t};else if(M(t)){let i=0;f[e]={},!o.keys&&t.length>p.length&&"string"==typeof t[0]&&(f[e]["hc-key"]=t[0],++i);for(let s=0;s<p.length;++s,++i)p[s]&&void 0!==t[i]&&(p[s].indexOf(".")>0?r.prototype.setNestedProperty(f[e],t[i],p[s]):f[e][p[s]]=t[i])}else f[e]=a[e];h&&"_i"===h[0]&&(f[e]._i=e)}}if(i){this.mapData=i,this.mapMap={};for(let s=0;s<i.length;s++)e=(t=i[s]).properties,t._i=s,h[0]&&e&&e[h[0]]&&(t[h[0]]=e[h[0]]),c[t[h[0]]]=t;if(this.mapMap=c,h[1]){let t=h[1];f.forEach(e=>{let i=x(t,e);c[i]&&d.push(c[i])})}if(o.allAreas){if(h[1]){let t=h[1];f.forEach(e=>{d.push(x(t,e))})}let t="|"+d.map(function(t){return t&&t[h[0]]}).join("|")+"|";i.forEach(e=>{h[0]&&-1!==t.indexOf("|"+e[h[0]]+"|")||f.push(w(e,{value:null}))})}}this.processedXData=Array(f.length)}setOptions(t){let e=super.setOptions(t),i=e.joinBy;return null===e.joinBy&&(i="_i"),(i=this.joinBy=L(i))[1]||(i[1]=i[0]),e}translate(){let t=this.doFullTranslate(),e=this.chart.mapView,i=e&&e.projection;if(this.chart.hasRendered&&(this.isDirtyData||!this.hasRendered)&&(this.processData(),this.generatePoints(),delete this.bounds,!e||e.userOptions.center||j(e.userOptions.zoom)||e.zoom!==e.minZoom?this.getProjectedBounds():e.fitToBounds(void 0,void 0,!1)),e){let s=e.getSVGTransform();this.points.forEach(o=>{let a=j(o.insetIndex)&&e.insets[o.insetIndex].getSVGTransform()||s;a&&o.bounds&&j(o.bounds.midX)&&j(o.bounds.midY)&&(o.plotX=o.bounds.midX*a.scaleX+a.translateX,o.plotY=o.bounds.midY*a.scaleY+a.translateY),t&&(o.shapeType="path",o.shapeArgs={d:r.getProjectedPath(o,i)}),o.hiddenInDataClass||(o.projectedPath&&!o.projectedPath.length?o.setVisible(!1):o.visible||o.setVisible(!0))})}y(this,"afterTranslate")}update(t){t.mapData&&this.chart.mapView?.recommendMapView(this.chart,[this.chart.options.chart.map,...(this.chart.options.series||[]).map((e,i)=>i===this._i?t.mapData:e.mapData)],!0),super.update.apply(this,arguments)}}return A.defaultOptions=w(g.defaultOptions,a),f(A.prototype,{type:"map",axisTypes:e.seriesMembers.axisTypes,colorAttribs:e.seriesMembers.colorAttribs,colorKey:e.seriesMembers.colorKey,directTouch:!0,drawDataLabels:c,drawGraph:c,forceDL:!0,getCenter:i.getCenter,getExtremesFromAll:!0,getSymbol:c,isCartesian:!1,parallelArrays:e.seriesMembers.parallelArrays,pointArrayMap:e.seriesMembers.pointArrayMap,pointClass:r,preserveAspectRatio:!0,searchPoint:c,trackerGroups:e.seriesMembers.trackerGroups,useMapGeometry:!0}),e.compose(A),l.registerSeriesType("map",A),A}),i(e,"Series/MapLine/MapLineSeriesDefaults.js",[],function(){return{lineWidth:1,fillColor:"none",legendSymbol:"lineMarker"}}),i(e,"Series/MapLine/MapLineSeries.js",[e["Series/MapLine/MapLineSeriesDefaults.js"],e["Series/Map/MapSeries.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e,
vendor: 10,837 bytes, line 23540
23540i,s){let{extend:o,merge:r}=s;class a extends e{pointAttribs(t,e){let i=super.pointAttribs(t,e);return i.fill=this.options.fillColor,i}}return a.defaultOptions=r(e.defaultOptions,t),o(a.prototype,{type:"mapline",colorProp:"stroke",pointAttrToOptions:{stroke:"color","stroke-width":"lineWidth"}}),i.registerSeriesType("mapline",a),a}),i(e,"Series/MapPoint/MapPointPoint.js",[e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e){let{scatter:i}=t.seriesTypes,{isNumber:s}=e;class o extends i.prototype.pointClass{isValid(){return!!(this.options.geometry||s(this.x)&&s(this.y)||s(this.options.lon)&&s(this.options.lat))}}return o}),i(e,"Series/MapPoint/MapPointSeriesDefaults.js",[],function(){return{dataLabels:{crop:!1,defer:!1,enabled:!0,formatter:function(){return this.point.name},overflow:!1,style:{color:"#000000"}},legendSymbol:"lineMarker"}}),i(e,"Series/MapPoint/MapPointSeries.js",[e["Core/Globals.js"],e["Series/MapPoint/MapPointPoint.js"],e["Series/MapPoint/MapPointSeriesDefaults.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Renderer/SVG/SVGRenderer.js"],e["Core/Utilities.js"]],function(t,e,i,s,o,r){let{noop:a}=t,{map:n,scatter:l}=s.seriesTypes,{extend:h,fireEvent:p,isNumber:d,merge:c}=r;class u extends l{constructor(){super(...arguments),this.clearBounds=n.prototype.clearBounds}drawDataLabels(){super.drawDataLabels(),this.dataLabelsGroup&&this.dataLabelsGroup.clip(this.chart.clipRect)}projectPoint(t){let e=this.chart.mapView;if(e){let{geometry:i,lon:s,lat:o}=t,r=i&&"Point"===i.type&&i.coordinates;if(d(s)&&d(o)&&(r=[s,o]),r)return e.lonLatToProjectedUnits({lon:r[0],lat:r[1]})}}translate(){let t=this.chart.mapView;if(this.processedXData||this.processData(),this.generatePoints(),this.getProjectedBounds&&this.isDirtyData&&(delete this.bounds,this.getProjectedBounds()),t){let e=t.getSVGTransform(),{hasCoordinates:i}=t.projection;this.points.forEach(s=>{let o,{x:r,y:a}=s,n=d(s.insetIndex)&&t.insets[s.insetIndex].getSVGTransform()||e,l=this.projectPoint(s.options)||s.properties&&this.projectPoint(s.properties);if(l?(r=l.x,a=l.y):s.bounds&&(r=s.bounds.midX,a=s.bounds.midY,n&&d(r)&&d(a)&&(s.plotX=r*n.scaleX+n.translateX,s.plotY=a*n.scaleY+n.translateY,o=!0)),d(r)&&d(a)){if(!o){let e=t.projectedUnitsToPixels({x:r,y:a});s.plotX=e.x,s.plotY=i?e.y:this.chart.plotHeight-e.y}}else s.y=s.plotX=s.plotY=void 0;s.isInside=this.isPointInside(s),s.zone=this.zones.length?s.getZone():void 0})}p(this,"afterTranslate")}}return u.defaultOptions=c(l.defaultOptions,i),o.prototype.symbols.mapmarker=(t,e,i,s,o)=>{let r,a;let n=o&&"legend"===o.context;n?(r=t+i/2,a=e+s):o&&"number"==typeof o.anchorX&&"number"==typeof o.anchorY?(r=o.anchorX,a=o.anchorY):(r=t+i/2,a=e+s/2,e-=s);let l=n?s/3:s/2;return[["M",r,a],["C",r,a,r-l,e+1.5*l,r-l,e+l],["A",l,l,1,1,1,r+l,e+l],["C",r+l,e+1.5*l,r,a,r,a],["Z"]]},h(u.prototype,{type:"mappoint",axisTypes:["colorAxis"],forceDL:!0,isCartesian:!1,pointClass:e,searchPoint:a,useMapGeometry:!0}),s.registerSeriesType("mappoint",u),u}),i(e,"Series/Bubble/BubbleLegendDefaults.js",[],function(){return{borderColor:void 0,borderWidth:2,className:void 0,color:void 0,connectorClassName:void 0,connectorColor:void 0,connectorDistance:60,connectorWidth:1,enabled:!1,labels:{className:void 0,allowOverlap:!1,format:"",formatter:void 0,align:"right",style:{fontSize:"0.9em",color:"#000000"},x:0,y:0},maxSize:60,minSize:10,legendIndex:0,ranges:{value:void 0,borderColor:void 0,color:void 0,connectorColor:void 0},sizeBy:"area",sizeByAbsoluteValue:!1,zIndex:1,zThreshold:0}}),i(e,"Series/Bubble/BubbleLegendItem.js",[e["Core/Color/Color.js"],e["Core/Templating.js"],e["Core/Globals.js"],e["Core/Utilities.js"]],function(t,e,i,s){let{parse:o}=t,{noop:r}=i,{arrayMax:a,arrayMin:n,isNumber:l,merge:h,pick:p,stableSort:d}=s;return class{constructor(t,e){this.setState=r,this.init(t,e)}init(t,e){this.options=t,this.visible=!0,this.chart=e.chart,this.legend=e}addToLegend(t){t.splice(this.options.legendIndex,0,this)}drawLegendSymbol(t){let e;let i=p(t.options.itemDistance,20),s=this.legendItem||{},o=this.options,r=o.ranges,a=o.connectorDistance;if(!r||!r.length||!l(r[0].value)){t.options.bubbleLegend.autoRanges=!0;return}d(r,function(t,e){return e.value-t.value}),this.ranges=r,this.setOptions(),this.render();let n=this.getMaxLabelSize(),h=this.ranges[0].radius,c=2*h;e=(e=a-h+n.width)>0?e:0,this.maxLabel=n,this.movementX="left"===o.labels.align?e:0,s.labelWidth=c+e+i,s.labelHeight=c+n.height/2}setOptions(){let t=this.ranges,e=this.options,i=this.chart.series[e.seriesIndex],s=this.legend.baseline,r={zIndex:e.zIndex,"stroke-width":e.borderWidth},a={zIndex:e.zIndex,"stroke-width":e.connectorWidth},n={align:this.legend.options.rtl||"left"===e.labels.align?"right":"left",zIndex:e.zIndex},l=i.options.marker.fillOpacity,d=this.chart.styledMode;t.forEach(function(c,u){d||(r.stroke=p(c.borderColor,e.borderColor,i.color),r.fill=p(c.color,e.color,1!==l?o(i.color).setOpacity(l).get("rgba"):i.color),a.stroke=p(c.connectorColor,e.connectorColor,i.color)),t[u].radius=this.getRangeRadius(c.value),t[u]=h(t[u],{center:t[0].radius-t[u].radius+s}),d||h(!0,t[u],{bubbleAttribs:h(r),connectorAttribs:h(a),labelAttribs:n})},this)}getRangeRadius(t){let e=this.options,i=this.options.seriesIndex,s=this.chart.series[i],o=e.ranges[0].value,r=e.ranges[e.ranges.length-1].value,a=e.minSize,n=e.maxSize;return s.getRadius.call(this,r,o,a,n,t)}render(){let t=this.legendItem||{},e=this.chart.renderer,i=this.options.zThreshold;for(let s of(this.symbols||(this.symbols={connectors:[],bubbleItems:[],labels:[]}),t.symbol=e.g("bubble-legend"),t.label=e.g("bubble-legend-item").css(this.legend.itemStyle||{}),t.symbol.translateX=0,t.symbol.translateY=0,t.symbol.add(t.label),t.label.add(t.group),this.ranges))s.value>=i&&this.renderRange(s);this.hideOverlappingLabels()}renderRange(t){let e=this.ranges[0],i=this.legend,s=this.options,o=s.labels,r=this.chart,a=r.series[s.seriesIndex],n=r.renderer,l=this.symbols,h=l.labels,p=t.center,d=Math.abs(t.radius),c=s.connectorDistance||0,u=o.align,m=i.options.rtl,g=s.borderWidth,f=s.connectorWidth,b=e.radius||0,y=p-d-g/2+f/2,x=(y%1?1:.5)-(f%2?0:.5),M=n.styledMode,C=m||"left"===u?-c:c;"center"===u&&(C=0,s.connectorDistance=0,t.labelAttribs.align="center"),l.bubbleItems.push(n.circle(b,p+x,d).attr(M?{}:t.bubbleAttribs).addClass((M?"highcharts-color-"+a.colorIndex+" ":"")+"highcharts-bubble-legend-symbol "+(s.className||"")).add(this.legendItem.symbol)),l.connectors.push(n.path(n.crispLine([["M",b,y],["L",b+C,y]],s.connectorWidth)).attr(M?{}:t.connectorAttribs).addClass((M?"highcharts-color-"+this.options.seriesIndex+" ":"")+"highcharts-bubble-legend-connectors "+(s.connectorClassName||"")).add(this.legendItem.symbol));let j=n.text(this.formatLabel(t)).attr(M?{}:t.labelAttribs).css(M?{}:o.style).addClass("highcharts-bubble-legend-labels "+(s.labels.className||"")).add(this.legendItem.symbol),v={x:b+C+s.labels.x,y:y+s.labels.y+.4*j.getBBox().height};j.attr(v),h.push(j),j.placed=!0,j.alignAttr=v}getMaxLabelSize(){let t,e;return this.symbols.labels.forEach(function(i){e=i.getBBox(!0),t=t?e.width>t.width?e:t:e}),t||{}}formatLabel(t){let i=this.options,s=i.labels.formatter,o=i.labels.format,{numberFormatter:r}=this.chart;return o?e.format(o,t):s?s.call(t):r(t.value,1)}hideOverlappingLabels(){let t=this.chart,e=this.options.labels.allowOverlap,i=this.symbols;!e&&i&&(t.hideOverlappingLabels(i.labels),i.labels.forEach(function(t,e){t.newOpacity?t.newOpacity!==t.oldOpacity&&i.connectors[e].show():i.connectors[e].hide()}))}getRanges(){let t=this.legend.bubbleLegend,e=t.chart.series,i=t.options.ranges,s,o,r=Number.MAX_VALUE,d=-Number.MAX_VALUE;return e.forEach(function(t){t.isBubble&&!t.ignoreSeries&&(o=t.zData.filter(l)).length&&(r=p(t.options.zMin,Math.min(r,Math.max(n(o),!1===t.options.displayNegative?t.options.zThreshold:-Number.MAX_VALUE))),d=p(t.options.zMax,Math.max(d,a(o))))}),s=r===d?[{value:d}]:[{value:r},{value:(r+d)/2},{value:d,autoRanges:!0}],i.length&&i[0].radius&&s.reverse(),s.forEach(function(t,e){i&&i[e]&&(s[e]=h(i[e],t))}),s}predictBubbleSizes(){let t=this.chart,e=t.legend.options,i=e.floating,s="horizontal"===e.layout,o=s?t.legend.lastLineHeight:0,r=t.plotSizeX,a=t.plotSizeY,n=t.series[this.options.seriesIndex],l=n.getPxExtremes(),h=Math.ceil(l.minPxSize),p=Math.ceil(l.maxPxSize),d,c=n.options.maxSize;return i||!/%$/.test(c)?d=p:(d=(Math.min(a,r)+o)*(c=parseFloat(c))/100/(c/100+1),(s&&a-d>=r||!s&&r-d>=a)&&(d=p)),[h,Math.ceil(d)]}updateRanges(t,e){let i=this.legend.options.bubbleLegend;i.minSize=t,i.maxSize=e,i.ranges=this.getRanges()}correctSizes(){let t=this.legend,e=this.chart.series[this.options.seriesIndex].getPxExtremes();Math.abs(Math.ceil(e.maxPxSize)-this.options.maxSize)>1&&(this.updateRanges(this.options.minSize,e.maxPxSize),t.render())}}}),i(e,"Series/Bubble/BubbleLegendComposition.js",[e["Series/Bubble/BubbleLegendDefaults.js"],e["Series/Bubble/BubbleLegendItem.js"],e["Core/Defaults.js"],e["Core/Globals.js"],e["Core/Utilities.js"]],function(t,e,i,s,o){let{setOptions:r}=i,{composed:a}=s,{addEvent:n,objectEach:l,pushUnique:h,wrap:p}=o;function d(t,e,i){let s,o,r;let a=this.legend,n=c(this)>=0;a&&a.options.enabled&&a.bubbleLegend&&a.options.bubbleLegend.autoRanges&&n?(s=a.bubbleLegend.options,o=a.bubbleLegend.predictBubbleSizes(),a.bubbleLegend.updateRanges(o[0],o[1]),s.placed||(a.group.placed=!1,a.allItems.forEach(t=>{(r=t.legendItem||{}).group&&(r.group.translateY=void 0)})),a.render(),s.placed||(this.getMargins(),this.axes.forEach(function(t){t.visible&&t.render(),s.placed||(t.setScale(),t.updateNames(),l(t.ticks,function(t){t.isNew=!0,t.isNewLabel=!0}))}),this.getMargins()),s.placed=!0,t.call(this,e,i),a.bubbleLegend.correctSizes(),f(a,u(a))):(t.call(this,e,i),a&&a.options.enabled&&a.bubbleLegend&&(a.render(),f(a,u(a))))}function c(t){let e=t.series,i=0;for(;i<e.length;){if(e[i]&&e[i].isBubble&&e[i].visible&&e[i].zData.length)return i;i++}return -1}function u(t){let e=t.allItems,i=[],s=e.length,o,r,a,n=0,l=0;for(n=0;n<s;n++)if(r=e[n].legendItem||{},a=(e[n+1]||{}).legendItem||{},r.labelHeight&&(e[n].itemHeight=r.labelHeight),e[n]===e[s-1]||r.y!==a.y){for(i.push({height:0}),o=i[i.length-1];l<=n;l++)e[l].itemHeight>o.height&&(o.height=e[l].itemHeight);o.step=n}return i}function m(t){let i=this.bubbleLegend,s=this.options,o=s.bubbleLegend,r=c(this.chart);i&&i.ranges&&i.ranges.length&&(o.ranges.length&&(o.autoRanges=!!o.ranges[0].autoRanges),this.destroyItem(i)),r>=0&&s.enabled&&o.enabled&&(o.seriesIndex=r,this.bubbleLegend=new e(o,this),this.bubbleLegend.addToLegend(t.allItems))}function g(t){let e;if(t.defaultPrevented)return!1;let i=this.chart,s=this.visible,o=this.chart.legend;o&&o.bubbleLegend&&(this.visible=!s,this.ignoreSeries=s,e=c(i)>=0,o.bubbleLegend.visible!==e&&(o.update({bubbleLegend:{enabled:e}}),o.bubbleLegend.visible=e),this.visible=s)}
23540function f(t,e){let i=t.allItems,s=t.options.rtl,o,r,a,n,l=0;i.forEach((t,i)=>{(n=t.legendItem||{}).group&&(o=n.group.translateX||0,r=n.y||0,((a=t.movementX)||s&&t.ranges)&&(a=s?o-t.options.maxSize/2:o+a,n.group.attr({translateX:a})),i>e[l].step&&l++,n.group.attr({translateY:Math.round(r+e[l].height/2)}),n.y=r+e[l].height/2)})}return{compose:function(e,i,s){h(a,"Series.BubbleLegend")&&(r({legend:{bubbleLegend:t}}),p(e.prototype,"drawChartBox",d),n(i,"afterGetAllItems",m),n(s,"legendItemClick",g))}}}),i(e,"Series/Bubble/BubblePoint.js",[e["Core/Series/Point.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e,i){let{seriesTypes:{scatter:{prototype:{pointClass:s}}}}=e,{extend:o}=i;class r extends s{haloPath(e){return t.prototype.haloPath.call(this,0===e?0:(this.marker&&this.marker.radius||0)+e)}}return o(r.prototype,{ttBelow:!1}),r}),i(e,"Series/Bubble/BubbleSeries.js",[e["Series/Bubble/BubbleLegendComposition.js"],e["Series/Bubble/BubblePoint.js"],e["Core/Color/Color.js"],e["Core/Globals.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e,i,s,o,r){let{parse:a}=i,{composed:n,noop:l}=s,{series:h,seriesTypes:{column:{prototype:p},scatter:d}}=o,{addEvent:c,arrayMax:u,arrayMin:m,clamp:g,extend:f,isNumber:b,merge:y,pick:x,pushUnique:M}=r;function C(){let t=this.len,{coll:e,isXAxis:i,min:s}=this,o=i?"xData":"yData",r=(this.max||0)-(s||0),a=0,n=t,l=t/r,h;
23540("xAxis"===e||"yAxis"===e)&&(this.series.forEach(t=>{if(t.bubblePadding&&t.reserveSpace()){this.allowZoomOutside=!0,h=!0;let e=t[o];if(i&&((t.onPoint||t).getRadii(0,0,t),t.onPoint&&(t.radii=t.onPoint.radii)),r>0){let i=e.length;for(;i--;)if(b(e[i])&&this.dataMin<=e[i]&&e[i]<=this.max){let o=t.radii&&t.radii[i]||0;a=Math.min((e[i]-s)*l-o,a),n=Math.max((e[i]-s)*l+o,n)}}}}),h&&r>0&&!this.logarithmic&&(n-=t,l*=(t+Math.max(0,a)-Math.min(n,t))/t,[["min","userMin",a],["max","userMax",n]].forEach(t=>{void 0===x(this.options[t[0]],this[t[1]])&&(this[t[0]]+=t[2]/l)})))}class j extends d{static compose(e,i,s,o){t.compose(i,s,o),M(n,"Series.Bubble")&&c(e,"foundExtremes",C)}animate(t){!t&&this.points.length<this.options.animationLimit&&this.points.forEach(function(t){let{graphic:e,plotX:i=0,plotY:s=0}=t;e&&e.width&&(this.hasRendered||e.attr({x:i,y:s,width:1,height:1}),e.animate(this.markerAttribs(t),this.options.animation))},this)}getRadii(){let t=this.zData,e=this.yData,i=[],s,o,r,a=this.chart.bubbleZExtremes,{minPxSize:n,maxPxSize:l}=this.getPxExtremes();if(!a){let t,e=Number.MAX_VALUE,i=-Number.MAX_VALUE;this.chart.series.forEach(s=>{if(s.bubblePadding&&s.reserveSpace()){let o=(s.onPoint||s).getZExtremes();o&&(e=Math.min(x(e,o.zMin),o.zMin),i=Math.max(x(i,o.zMax),o.zMax),t=!0)}}),t?(a={zMin:e,zMax:i},this.chart.bubbleZExtremes=a):a={zMin:0,zMax:0}}for(o=0,s=t.length;o<s;o++)r=t[o],i.push(this.getRadius(a.zMin,a.zMax,n,l,r,e&&e[o]));this.radii=i}getRadius(t,e,i,s,o,r){let a=this.options,n="width"!==a.sizeBy,l=a.zThreshold,h=e-t,p=.5;if(null===r||null===o)return null;if(b(o)){if(a.sizeByAbsoluteValue&&(o=Math.abs(o-l),e=h=Math.max(e-l,Math.abs(t-l)),t=0),o<t)return i/2-1;h>0&&(p=(o-t)/h)}return n&&p>=0&&(p=Math.sqrt(p)),Math.ceil(i+p*(s-i))/2}hasData(){return!!this.processedXData.length}markerAttribs(t,e){let i=super.markerAttribs(t,e),{height:s=0,width:o=0}=i;return this.chart.inverted?f(i,{x:(t.plotX||0)-o/2,y:(t.plotY||0)-s/2}):i}pointAttribs(t,e){let i=this.options.marker.fillOpacity,s=h.prototype.pointAttribs.call(this,t,e);return 1!==i&&(s.fill=a(s.fill).setOpacity(i).get("rgba")),s}translate(){super.translate.call(this),this.getRadii(),this.translateBubble()}translateBubble(){let{data:t,options:e,radii:i}=this,{minPxSize:s}=this.getPxExtremes(),o=t.length;for(;o--;){let r=t[o],a=i?i[o]:0;"z"===this.zoneAxis&&(r.negative=(r.z||0)<(e.zThreshold||0)),b(a)&&a>=s/2?(r.marker=f(r.marker,{radius:a,width:2*a,height:2*a}),r.dlBox={x:r.plotX-a,y:r.plotY-a,width:2*a,height:2*a}):(r.shapeArgs=r.plotY=r.dlBox=void 0,r.isInside=!1)}}getPxExtremes(){let t=Math.min(this.chart.plotWidth,this.chart.plotHeight),e=e=>{let i;return"string"==typeof e&&(i=/%$/.test(e),e=parseInt(e,10)),i?t*e/100:e},i=e(x(this.options.minSize,8)),s=Math.max(e(x(this.options.maxSize,"20%")),i);return{minPxSize:i,maxPxSize:s}}getZExtremes(){let t=this.options,e=(this.zData||[]).filter(b);if(e.length){let i=x(t.zMin,g(m(e),!1===t.displayNegative?t.zThreshold||0:-Number.MAX_VALUE,Number.MAX_VALUE)),s=x(t.zMax,u(e));if(b(i)&&b(s))return{zMin:i,zMax:s}}}}return j.defaultOptions=y(d.defaultOptions,{dataLabels:{formatter:function(){let{numberFormatter:t}=this.series.chart,{z:e}=this.point;return b(e)?t(e,-1):""},inside:!0,verticalAlign:"middle"},animationLimit:250,marker:{lineColor:null,lineWidth:1,fillOpacity:.5,radius:null,states:{hover:{radiusPlus:0}},symbol:"circle"},minSize:8,maxSize:"20%",softThreshold:!1,states:{hover:{halo:{size:5}}},tooltip:{pointFormat:"({point.x}, {point.y}), Size: {point.z}"},turboThreshold:0,zThreshold:0,zoneAxis:"z"}),f(j.prototype,{alignDataLabel:p.alignDataLabel,applyZones:l,bubblePadding:!0,isBubble:!0,pointArrayMap:["y","z"],pointClass:e,parallelArrays:["x","y","z"],trackerGroups:["group","dataLabelsGroup"],specialGroup:"group",zoneAxis:"z"}),c(j,"updatedData",t=>{delete t.target.chart.bubbleZExtremes}),c(j,"remove",t=>{delete t.target.chart.bubbleZExtremes}),o.registerSeriesType("bubble",j),j}),i(e,"Series/MapBubble/MapBubblePoint.js",[e["Series/Bubble/BubblePoint.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e,
23540i){let{seriesTypes:{map:{prototype:{pointClass:{prototype:s}}}}}=e,{extend:o}=i;class r extends t{isValid(){return"number"==typeof this.z}}return o(r.prototype,{applyOptions:s.applyOptions,getProjectedBounds:s.getProjectedBounds}),r}),i(e,"Series/MapBubble/MapBubbleSeries.js",[e["Series/Bubble/BubbleSeries.js"],e["Series/MapBubble/MapBubblePoint.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e,i,s){let{seriesTypes:{map:{prototype:o},mappoint:{prototype:r}}}=i,{extend:a,merge:n}=s;class l extends t{constructor(){super(...arguments),this.clearBounds=o.clearBounds}searchPoint(t,e){return this.searchKDTree({plotX:t.chartX-this.chart.plotLeft,plotY:t.chartY-this.chart.plotTop},e,t)}translate(){r.translate.call(this),this.getRadii(),this.translateBubble()}updateParallelArrays(t,e,i){super.updateParallelArrays.call(this,t,e,i);let s=this.processedXData,o=this.xData;s&&o&&(s.length=o.length)}}return l.defaultOptions=n(t.defaultOptions,{lineWidth:0,animationLimit:500,joinBy:"hc-key",tooltip:{pointFormat:"{point.name}: {point.z}"}}),a(l.prototype,{type:"mapbubble",axisTypes:["colorAxis"],getProjectedBounds:o.getProjectedBounds,isCartesian:!1,pointArrayMap:["z"],pointClass:e,processData:o.processData,projectPoint:r.projectPoint,kdAxisArray:["plotX","plotY"],setData:o.setData,setOptions:o.setOptions,updateData:o.updateData,useMapGeometry:!0,xyFromShape:!0}),i.registerSeriesType("mapbubble",l),l}),i(e,"Series/Heatmap/HeatmapPoint.js",[e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e){let{scatter:{prototype:{pointClass:i}}}=t.seriesTypes,{clamp:s,defined:o,extend:r,pick:a}=e;class n extends i{applyOptions(t,e){return(this.isNull||null===this.value)&&delete this.color,super.applyOptions(t,e),this.formatPrefix=this.isNull||null===this.value?"null":"point",this}getCellAttributes(){let t=this.series,e=t.options,i=(e.colsize||1)/2,r=(e.rowsize||1)/2,n=t.xAxis,l=t.yAxis,h=this.options.marker||t.options.marker,p=t.pointPlacementToXValue(),d=a(this.pointPadding,e.pointPadding,0),c={x1:s(Math.round(n.len-n.translate(this.x-i,!1,!0,!1,!0,-p)),-n.len,2*n.len),x2:s(Math.round(n.len-n.translate(this.x+i,!1,!0,!1,!0,-p)),-n.len,2*n.len),y1:s(Math.round(l.translate(this.y-r,!1,!0,!1,!0)),-l.len,2*l.len),y2:s(Math.round(l.translate(this.y+r,!1,!0,!1,!0)),-l.len,2*l.len)};for(let t of[["width","x"],["height","y"]]){let e=t[0],i=t[1],s=i+"1",r=i+"2",a=Math.abs(c[s]-c[r]),p=h&&h.lineWidth||0,u=Math.abs(c[s]+c[r])/2,m=h&&h[e];if(o(m)&&m<a){let t=m/2+p/2;c[s]=u-t,c[r]=u+t}d&&(("x"===i&&n.reversed||"y"===i&&!l.reversed)&&(s=r,r=i+"1"),c[s]+=d,c[r]-=d)}return c}haloPath(t){if(!t)return[];let{x:e=0,y:i=0,width:s=0,height:o=0}=this.shapeArgs||{};return[["M",e-t,i-t],["L",e-t,i+o+t],["L",e+s+t,i+o+t],["L",e+s+t,i-t],["Z"]]}isValid(){return this.value!==1/0&&this.value!==-1/0}}return r(n.prototype,{dataLabelOnNull:!0,moveToTopOnHover:!0,ttBelow:!1}),n}),i(e,"Series/Heatmap/HeatmapSeriesDefaults.js",[e["Core/Utilities.js"]],function(t){let{isNumber:e}=t;return{animation:!1,borderRadius:0,borderWidth:0,interpolation:!1,nullColor:"#f7f7f7",dataLabels:{formatter:function(){let{numberFormatter:t}=this.series.chart,{value:i}=this.point;return e(i)?t(i,-1):""},inside:!0,verticalAlign:"middle",crop:!1,overflow:"allow",padding:0},marker:{symbol:"rect",radius:0,lineColor:void 0,states:{hover:{lineWidthPlus:0},select:{}}},clip:!0,pointRange:null,tooltip:{pointFormat:"{point.x}, {point.y}: {point.value}<br/>"},states:{hover:{halo:!1,brightness:.2}},legendSymbol:"rectangle"}}),i(e,"Series/InterpolationUtilities.js",[e["Core/Globals.js"],e["Core/Utilities.js"]],function(t,e){let{doc:i}=t,{defined:s,pick:o}=e;return{colorFromPoint:function(t,e){let i=e.series.colorAxis;if(i){let r=i.toColor(t||0,e).split(")")[0].split("(")[1].split(",").map(t=>o(parseFloat(t),parseInt(t,10)));return r[3]=255*o(r[3],1),s(t)&&e.visible||(r[3]=0),r}return[0,0,0,0]},getContext:function(t){let{canvas:e,context:s}=t;return e&&s?(s.clearRect(0,0,e.width,e.height),s):(t.canvas=i.createElement("canvas"),t.context=t.canvas.getContext("2d",{willReadFrequently:!0})||void 0,t.context)}}}),i(e,"Series/Heatmap/HeatmapSeries.js",[e["Core/Color/Color.js"],e["Series/ColorMapComposition.js"],e["Series/Heatmap/HeatmapPoint.js"],e["Series/Heatmap/HeatmapSeriesDefaults.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Renderer/SVG/SVGRenderer.js"],e["Core/Utilities.js"],e["Series/InterpolationUtilities.js"]],function(t,e,
vendor: 4,724 bytes, line 23540
23540i,s,o,r,a,n){let{series:l,seriesTypes:{column:h,scatter:p}}=o,{prototype:{symbols:d}}=r,{addEvent:c,extend:u,fireEvent:m,isNumber:g,merge:f,pick:b}=a,{colorFromPoint:y,getContext:x}=n;class M extends p{constructor(){super(...arguments),this.valueMax=NaN,this.valueMin=NaN,this.isDirtyCanvas=!0}drawPoints(){let t=this,e=t.options,i=e.interpolation,s=e.marker||{};if(i){let{image:e,chart:i,xAxis:s,yAxis:o}=t,{reversed:r=!1,len:a}=s,{reversed:n=!1,len:l}=o,h={width:a,height:l};if(!e||t.isDirtyData||t.isDirtyCanvas){let a=x(t),{canvas:l,options:{colsize:p=1,rowsize:d=1},points:c,points:{length:u}}=t,m=i.colorAxis&&i.colorAxis[0];if(l&&a&&m){let{min:m,max:g}=s.getExtremes(),{min:f,max:b}=o.getExtremes(),x=g-m,M=b-f,C=Math.round(x/p/8*8),j=Math.round(M/d/8*8),[v,w]=[[C,C/x,r,"ceil"],[j,j/M,!n,"floor"]].map(([t,e,i,s])=>i?i=>Math[s](t-e*i):t=>Math[s](e*t)),S=l.width=C+1,P=S*(l.height=j+1),L=(u-1)/P,A=new Uint8ClampedArray(4*P),T=(t,e)=>4*Math.ceil(S*w(e-f)+v(t-m));t.buildKDTree();for(let t=0;t<P;t++){let e=c[Math.ceil(L*t)],{x:i,y:s}=e;A.set(y(e.value,e),T(i,s))}a.putImageData(new ImageData(A,S),0,0),e?e.attr({...h,href:l.toDataURL("image/png",1)}):(t.directTouch=!1,t.image=i.renderer.image(l.toDataURL("image/png",1)).attr(h).add(t.group))}t.isDirtyCanvas=!1}else(e.width!==a||e.height!==l)&&e.attr(h)}else(s.enabled||t._hasPointMarkers)&&(l.prototype.drawPoints.call(t),t.points.forEach(e=>{e.graphic&&(e.graphic[t.chart.styledMode?"css":"animate"](t.colorAttribs(e)),null===e.value&&e.graphic.addClass("highcharts-null-point"))}))}getExtremes(){let{dataMin:t,dataMax:e}=l.prototype.getExtremes.call(this,this.valueData);return g(t)&&(this.valueMin=t),g(e)&&(this.valueMax=e),l.prototype.getExtremes.call(this)}getValidPoints(t,e){return l.prototype.getValidPoints.call(this,t,e,!0)}hasData(){return!!this.processedXData.length}init(){super.init.apply(this,arguments);let t=this.options;t.pointRange=b(t.pointRange,t.colsize||1),this.yAxis.axisPointRange=t.rowsize||1,d.ellipse=d.circle,t.marker&&g(t.borderRadius)&&(t.marker.r=t.borderRadius)}markerAttribs(t,e){let i=t.shapeArgs||{};if(t.hasImage)return{x:t.plotX,y:t.plotY};if(e&&"normal"!==e){let s=t.options.marker||{},o=this.options.marker||{},r=o.states&&o.states[e]||{},a=s.states&&s.states[e]||{},n=(a.width||r.width||i.width||0)+(a.widthPlus||r.widthPlus||0),l=(a.height||r.height||i.height||0)+(a.heightPlus||r.heightPlus||0);return{x:(i.x||0)+((i.width||0)-n)/2,y:(i.y||0)+((i.height||0)-l)/2,width:n,height:l}}return i}pointAttribs(e,i){let s=l.prototype.pointAttribs.call(this,e,i),o=this.options||{},r=this.chart.options.plotOptions||{},a=r.series||{},n=r.heatmap||{},h=e&&e.options.borderColor||o.borderColor||n.borderColor||a.borderColor,p=e&&e.options.borderWidth||o.borderWidth||n.borderWidth||a.borderWidth||s["stroke-width"];if(s.stroke=e&&e.marker&&e.marker.lineColor||o.marker&&o.marker.lineColor||h||this.color,s["stroke-width"]=p,i&&"normal"!==i){let r=f(o.states&&o.states[i],o.marker&&o.marker.states&&o.marker.states[i],e&&e.options.states&&e.options.states[i]||{});s.fill=r.color||t.parse(s.fill).brighten(r.brightness||0).get(),s.stroke=r.lineColor||s.stroke}return s}translate(){let{borderRadius:t,marker:e}=this.options,i=e&&e.symbol||"rect",s=d[i]?i:"rect",o=-1!==["circle","square"].indexOf(s);for(let e of(this.generatePoints(),this.points)){let r=e.getCellAttributes(),a=Math.min(r.x1,r.x2),n=Math.min(r.y1,r.y2),l=Math.max(Math.abs(r.x2-r.x1),0),h=Math.max(Math.abs(r.y2-r.y1),0);if(e.hasImage=0===(e.marker&&e.marker.symbol||i||"").indexOf("url"),o){let t=Math.abs(l-h);a=Math.min(r.x1,r.x2)+(l<h?0:t/2),n=Math.min(r.y1,r.y2)+(l<h?t/2:0),l=h=Math.min(l,h)}e.hasImage&&(e.marker={width:l,height:h}),e.plotX=e.clientX=(r.x1+r.x2)/2,e.plotY=(r.y1+r.y2)/2,e.shapeType="path",e.shapeArgs=f(!0,{x:a,y:n,width:l,height:h},{d:d[s](a,n,l,h,{r:g(t)?t:0})})}m(this,"afterTranslate")}}return M.defaultOptions=f(p.defaultOptions,s),c(M,"afterDataClassLegendClick",function(){this.isDirtyCanvas=!0,this.drawPoints()}),u(M.prototype,{axisTypes:e.seriesMembers.axisTypes,colorKey:e.seriesMembers.colorKey,directTouch:!0,getExtremesFromAll:!0,parallelArrays:e.seriesMembers.parallelArrays,pointArrayMap:["y","value"],pointClass:i,specialGroup:"group",trackerGroups:e.seriesMembers.trackerGroups,alignDataLabel:h.prototype.alignDataLabel,colorAttribs:e.seriesMembers.colorAttribs,getSymbol:l.prototype.getSymbol}),e.compose(M),o.registerSeriesType("heatmap",M),M}),i(e,"masters/modules/map.src.js",[e["Core/Globals.js"],e["Maps/MapNavigation.js"],e["Series/ColorMapComposition.js"],e["Series/MapBubble/MapBubbleSeries.js"],e["Maps/GeoJSONComposition.js"],e["Core/Chart/MapChart.js"],e["Maps/MapView.js"],e["Maps/Projection.js"]],function(t,e,
23540i,s,o,r,a,n){return t.ColorMapComposition=i,t.MapChart=t.MapChart||r,t.MapNavigation=t.MapNavigation||e,t.MapView=t.MapView||a,t.Projection=t.Projection||n,t.mapChart=t.Map=t.MapChart.mapChart,t.maps=t.MapChart.maps,t.geojson=o.geojson,t.topo2geo=o.topo2geo,o.compose(t.Chart),s.compose(t.Axis,t.Chart,t.Legend,t.Series),e.compose(r,t.Pointer,t.SVGRenderer),a.compose(r),t})}); 23541},{}],115:[function(require,module,exports){ 23542'use strict'; 23543 23544var fnToStr = Function.prototype.toString; 23545var reflectApply = typeof Reflect === 'object' && Reflect !== null && Reflect.apply; 23546var badArrayLike; 23547var isCallableMarker; 23548if (typeof reflectApply === 'function' && typeof Object.defineProperty === 'function') { 23549 try { 23550 badArrayLike = Object.defineProperty({}, 'length', { 23551 get: function () { 23552 throw isCallableMarker; 23553 } 23554 }); 23555 isCallableMarker = {}; 23556 // eslint-disable-next-line no-throw-literal 23557 reflectApply(function () { throw 42; }, null, badArrayLike); 23558 } catch (_) { 23559 if (_ !== isCallableMarker) { 23560 reflectApply = null; 23561 } 23562 } 23563} else { 23564 reflectApply = null; 23565} 23566 23567var constructorRegex = /^\s*class\b/; 23568var isES6ClassFn = function isES6ClassFunction(value) { 23569 try { 23570 var fnStr = fnToStr.call(value); 23571 return constructorRegex.test(fnStr); 23572 } catch (e) { 23573 return false; // not a function 23574 } 23575}; 23576 23577var tryFunctionObject = function tryFunctionToStr(value) { 23578 try { 23579 if (isES6ClassFn(value)) { return false; } 23580 fnToStr.call(value); 23581 return true; 23582 } catch (e) { 23583 return false; 23584 } 23585}; 23586var toStr = Object.prototype.toString; 23587var objectClass = '[object Object]'; 23588var fnClass = '[object Function]'; 23589var genClass = '[object GeneratorFunction]'; 23590var ddaClass = '[object HTMLAllCollection]'; // IE 11 23591var ddaClass2 = '[object HTML document.all class]'; 23592var ddaClass3 = '[object HTMLCollection]'; // IE 9-10 23593var hasToStringTag = typeof Symbol === 'function' && !!Symbol.toStringTag; // better: use `has-tostringtag` 23594 23595var isIE68 = !(0 in [,]); // eslint-disable-line no-sparse-arrays, comma-spacing 23596 23597var isDDA = function isDocumentDotAll() { return false; }; 23598if (typeof document === 'object') { 23599 // Firefox 3 canonicalizes DDA to undefined when it's not accessed directly 23600 var all = document.all; 23601 if (toStr.call(all) === toStr.call(document.all)) { 23602 isDDA = function isDocumentDotAll(value) { 23603 /* globals document: false */ 23604 // in IE 6-8, typeof document.all is "object" and it's truthy 23605 if ((isIE68 || !value) && (typeof value === 'undefined' || typeof value === 'object')) { 23606 try { 23607 var str = toStr.call(value); 23608 return ( 23609 str === ddaClass 23610 || str === ddaClass2 23611 || str === ddaClass3 // opera 12.16 23612 || str === objectClass // IE 6-8 23613 ) && value('') == null; // eslint-disable-line eqeqeq 23614 } catch (e) { /**/ } 23615 } 23616 return false; 23617 }; 23618 } 23619} 23620 23621module.exports = reflectApply 23622 ? function isCallable(value) { 23623 if (isDDA(value)) { return true; } 23624 if (!value) { return false; } 23625 if (typeof value !== 'function' && typeof value !== 'object') { return false; } 23626 try { 23627 reflectApply(value, null, badArrayLike); 23628 } catch (e) { 23629 if (e !== isCallableMarker) { return false; } 23630 } 23631 return !isES6ClassFn(value) && tryFunctionObject(value); 23632 } 23633 : function isCallable(value) { 23634 if (isDDA(value)) { return true; } 23635 if (!value) { return false; } 23636 if (typeof value !== 'function' && typeof value !== 'object') { return false; } 23637 if (hasToStringTag) { return tryFunctionObject(value); } 23638 if (isES6ClassFn(value)) { return false; } 23639 var strClass = toStr.call(value); 23640 if (strClass !== fnClass && strClass !== genClass && !(/^\[object HTML/).test(strClass)) { return false; } 23641 return tryFunctionObject(value); 23642 }; 23643 23644},{}],116:[function(require,module,exports){ 23645'use strict'; 23646 23647var getDay = Date.prototype.getDay; 23648var tryDateObject = function tryDateGetDayCall(value) { 23649 try { 23650 getDay.call(value); 23651 return true; 23652 } catch (e) { 23653 return false; 23654 } 23655}; 23656 23657var toStr = Object.prototype.toString; 23658var dateClass = '[object Date]'; 23659var hasToStringTag = require('has-tostringtag/shams')(); 23660 23661module.exports = function isDateObject(value) { 23662 if (typeof value !== 'object' || value === null) { 23663 return false;
23664 } 23665 return hasToStringTag ? tryDateObject(value) : toStr.call(value) === dateClass; 23666}; 23667 23668},{"has-tostringtag/shams":107}],117:[function(require,module,exports){ 23669'use strict'; 23670 23671var callBound = require('call-bind/callBound'); 23672var hasToStringTag = require('has-tostringtag/shams')(); 23673var has; 23674var $exec; 23675var isRegexMarker; 23676var badStringifier; 23677 23678if (hasToStringTag) { 23679 has = callBound('Object.prototype.hasOwnProperty'); 23680 $exec = callBound('RegExp.prototype.exec'); 23681 isRegexMarker = {}; 23682 23683 var throwRegexMarker = function () { 23684 throw isRegexMarker; 23685 }; 23686 badStringifier = { 23687 toString: throwRegexMarker, 23688 valueOf: throwRegexMarker 23689 }; 23690 23691 if (typeof Symbol.toPrimitive === 'symbol') { 23692 badStringifier[Symbol.toPrimitive] = throwRegexMarker; 23693 } 23694} 23695 23696var $toString = callBound('Object.prototype.toString'); 23697var gOPD = Object.getOwnPropertyDescriptor; 23698var regexClass = '[object RegExp]'; 23699 23700module.exports = hasToStringTag 23701 // eslint-disable-next-line consistent-return 23702 ? function isRegex(value) { 23703 if (!value || typeof value !== 'object') { 23704 return false; 23705 } 23706 23707 var descriptor = gOPD(value, 'lastIndex'); 23708 var hasLastIndexDataProperty = descriptor && has(descriptor, 'value'); 23709 if (!hasLastIndexDataProperty) { 23710 return false; 23711 } 23712 23713 try { 23714 $exec(value, badStringifier); 23715 } catch (e) { 23716 return e === isRegexMarker; 23717 } 23718 } 23719 : function isRegex(value) { 23720 // In older browsers, typeof regex incorrectly returns 'function' 23721 if (!value || (typeof value !== 'object' && typeof value !== 'function')) { 23722 return false; 23723 } 23724 23725 return $toString(value) === regexClass; 23726 }; 23727 23728},{"call-bind/callBound":13,"has-tostringtag/shams":107}],118:[function(require,module,exports){ 23729'use strict'; 23730 23731var strValue = String.prototype.valueOf; 23732var tryStringObject = function tryStringObject(value) { 23733 try { 23734 strValue.call(value); 23735 return true; 23736 } catch (e) { 23737 return false; 23738 } 23739}; 23740var toStr = Object.prototype.toString; 23741var strClass = '[object String]'; 23742var hasToStringTag = require('has-tostringtag/shams')(); 23743 23744module.exports = function isString(value) { 23745 if (typeof value === 'string') { 23746 return true; 23747 } 23748 if (typeof value !== 'object') { 23749 return false; 23750 } 23751 return hasToStringTag ? tryStringObject(value) : toStr.call(value) === strClass; 23752}; 23753 23754},{"has-tostringtag/shams":107}],119:[function(require,module,exports){ 23755'use strict'; 23756 23757var toStr = Object.prototype.toString; 23758var hasSymbols = require('has-symbols')(); 23759 23760if (hasSymbols) { 23761 var symToStr = Symbol.prototype.toString; 23762 var symStringRegex = /^Symbol\(.*\)$/; 23763 var isSymbolObject = function isRealSymbolObject(value) { 23764 if (typeof value.valueOf() !== 'symbol') { 23765 return false; 23766 } 23767 return symStringRegex.test(symToStr.call(value)); 23768 }; 23769 23770 module.exports = function isSymbol(value) { 23771 if (typeof value === 'symbol') { 23772 return true; 23773 } 23774 if (toStr.call(value) !== '[object Symbol]') { 23775 return false; 23776 } 23777 try { 23778 return isSymbolObject(value); 23779 } catch (e) { 23780 return false; 23781 } 23782 }; 23783} else { 23784 23785 module.exports = function isSymbol(value) { 23786 // this environment does not support Symbols. 23787 return false && value; 23788 }; 23789} 23790 23791},{"has-symbols":105}],120:[function(require,module,exports){ 23792/*! @preserve 23793 * numeral.js 23794 * version : 2.0.6 23795 * author : Adam Draper 23796 * license : MIT 23797 * http://adamwdraper.github.com/Numeral-js/ 23798 */ 23799 23800(function (global, factory) { 23801 if (typeof define === 'function' && define.amd) { 23802 define(factory); 23803 } else if (typeof module === 'object' && module.exports) { 23804 module.exports = factory(); 23805 } else { 23806 global.numeral = factory(); 23807 } 23808}(this, function () { 23809 /************************************ 23810 Variables 23811 ************************************/ 23812 23813 var numeral, 23814 _, 23815 VERSION = '2.0.6', 23816 formats = {}, 23817 locales = {}, 23818 defaults = { 23819 currentLocale: 'en', 23820 zeroFormat: null, 23821 nullFormat: null, 23822 defaultFormat: '0,0', 23823 scalePercentBy100: true 23824 }, 23825 options = { 23826 currentLocale: defaults.currentLocale, 23827 zeroFormat: defaults.zeroFormat, 23828 nullFormat: defaults.nullFormat, 23829 defaultFormat: defaults.defaultFormat, 23830 scalePercentBy100: defaults.scalePercentBy100 23831 }; 23832 23833 23834 /************************************ 23835 Constructors 23836 ************************************/ 23837 23838 // Numeral prototype object 23839 function Numeral(input, number) { 23840 this._input = input; 23841 23842 this._value = number; 23843 } 23844 23845 numeral = function(input) { 23846 var value, 23847 kind, 23848 unformatFunction, 23849 regexp; 23850 23851 if (numeral.isNumeral(input)) { 23852 value = input.value(); 23853 } else if (input === 0 || typeof input === 'undefined') { 23854 value = 0; 23855 } else if (input === null || _.isNaN(input)) { 23856 value = null; 23857 } else if (typeof input === 'string') { 23858 if (options.zeroFormat && input === options.zeroFormat) { 23859 value = 0; 23860 } else if (options.nullFormat && input === options.nullFormat || !input.replace(/[^0-9]+/g, '').length) { 23861 value = null; 23862 } else { 23863 for (kind in formats) { 23864 regexp = typeof formats[kind].regexps.unformat === 'function' ? formats[kind].regexps.unformat() : formats[kind].regexps.unformat; 23865 23866 if (regexp && input.match(regexp)) { 23867 unformatFunction = formats[kind].unformat; 23868 23869 break; 23870 } 23871 } 23872 23873 unformatFunction = unformatFunction || numeral._.stringToNumber; 23874 23875 value = unformatFunction(input); 23876 } 23877 } else { 23878 value = Number(input)|| null; 23879 } 23880 23881 return new Numeral(input, value); 23882 }; 23883 23884 // version number 23885 numeral.version = VERSION; 23886 23887 // compare numeral object 23888 numeral.isNumeral = function(obj) { 23889 return obj instanceof Numeral; 23890 }; 23891 23892 // helper functions 23893 numeral._ = _ = { 23894 // formats numbers separators, decimals places, signs, abbreviations 23895 numberToFormat: function(value, format, roundingFunction) { 23896 var locale = locales[numeral.options.currentLocale], 23897 negP = false, 23898 optDec = false, 23899 leadingCount = 0, 23900 abbr = '', 23901 trillion = 1000000000000, 23902 billion = 1000000000, 23903 million = 1000000, 23904 thousand = 1000, 23905 decimal = '', 23906 neg = false, 23907 abbrForce, // force abbreviation 23908 abs, 23909 min, 23910 max, 23911 power, 23912 int, 23913 precision,
23914 signed, 23915 thousands, 23916 output; 23917 23918 // make sure we never format a null value 23919 value = value || 0; 23920 23921 abs = Math.abs(value); 23922 23923 // see if we should use parentheses for negative number or if we should prefix with a sign 23924 // if both are present we default to parentheses 23925 if (numeral._.includes(format, '(')) { 23926 negP = true; 23927 format = format.replace(/[\(|\)]/g, ''); 23928 } else if (numeral._.includes(format, '+') || numeral._.includes(format, '-')) { 23929 signed = numeral._.includes(format, '+') ? format.indexOf('+') : value < 0 ? format.indexOf('-') : -1; 23930 format = format.replace(/[\+|\-]/g, ''); 23931 } 23932 23933 // see if abbreviation is wanted 23934 if (numeral._.includes(format, 'a')) { 23935 abbrForce = format.match(/a(k|m|b|t)?/); 23936 23937 abbrForce = abbrForce ? abbrForce[1] : false; 23938 23939 // check for space before abbreviation 23940 if (numeral._.includes(format, ' a')) { 23941 abbr = ' '; 23942 } 23943 23944 format = format.replace(new RegExp(abbr + 'a[kmbt]?'), ''); 23945 23946 if (abs >= trillion && !abbrForce || abbrForce === 't') { 23947 // trillion 23948 abbr += locale.abbreviations.trillion; 23949 value = value / trillion; 23950 } else if (abs < trillion && abs >= billion && !abbrForce || abbrForce === 'b') { 23951 // billion 23952 abbr += locale.abbreviations.billion; 23953 value = value / billion; 23954 } else if (abs < billion && abs >= million && !abbrForce || abbrForce === 'm') { 23955 // million 23956 abbr += locale.abbreviations.million; 23957 value = value / million; 23958 } else if (abs < million && abs >= thousand && !abbrForce || abbrForce === 'k') { 23959 // thousand 23960 abbr += locale.abbreviations.thousand; 23961 value = value / thousand; 23962 } 23963 } 23964 23965 // check for optional decimals 23966 if (numeral._.includes(format, '[.]')) { 23967 optDec = true; 23968 format = format.replace('[.]', '.'); 23969 } 23970 23971 // break number and format 23972 int = value.toString().split('.')[0]; 23973 precision = format.split('.')[1]; 23974 thousands = format.indexOf(','); 23975 leadingCount = (format.split('.')[0].split(',')[0].match(/0/g) || []).length; 23976 23977 if (precision) { 23978 if (numeral._.includes(precision, '[')) { 23979 precision = precision.replace(']', ''); 23980 precision = precision.split('['); 23981 decimal = numeral._.toFixed(value, (precision[0].length + precision[1].length), roundingFunction, precision[1].length); 23982 } else { 23983 decimal = numeral._.toFixed(value, precision.length, roundingFunction); 23984 } 23985 23986 int = decimal.split('.')[0]; 23987 23988 if (numeral._.includes(decimal, '.')) { 23989 decimal = locale.delimiters.decimal + decimal.split('.')[1]; 23990 } else { 23991 decimal = ''; 23992 } 23993 23994 if (optDec && Number(decimal.slice(1)) === 0) { 23995 decimal = ''; 23996 } 23997 } else { 23998 int = numeral._.toFixed(value, 0, roundingFunction); 23999 } 24000 24001 // check abbreviation again after rounding 24002 if (abbr && !abbrForce && Number(int) >= 1000 && abbr !== locale.abbreviations.trillion) { 24003 int = String(Number(int) / 1000); 24004 24005 switch (abbr) { 24006 case locale.abbreviations.thousand: 24007 abbr = locale.abbreviations.million; 24008 break; 24009 case locale.abbreviations.million: 24010 abbr = locale.abbreviations.billion; 24011 break; 24012 case locale.abbreviations.billion: 24013 abbr = locale.abbreviations.trillion; 24014 break; 24015 } 24016 } 24017 24018 24019 // format number 24020 if (numeral._.includes(int, '-')) { 24021 int = int.slice(1); 24022 neg = true; 24023 } 24024 24025 if (int.length < leadingCount) { 24026 for (var i = leadingCount - int.length; i > 0; i--) { 24027 int = '0' + int; 24028 } 24029 } 24030 24031 if (thousands > -1) { 24032 int = int.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1' + locale.delimiters.thousands); 24033 } 24034 24035 if (format.indexOf('.') === 0) { 24036 int = ''; 24037 } 24038 24039 output = int + decimal + (abbr ? abbr : ''); 24040 24041 if (negP) { 24042 output = (negP && neg ? '(' : '') + output + (negP && neg ? ')' : ''); 24043 } else { 24044 if (signed >= 0) { 24045 output = signed === 0 ? (neg ? '-' : '+') + output : output + (neg ? '-' : '+'); 24046 } else if (neg) { 24047 output = '-' + output; 24048 } 24049 } 24050 24051 return output; 24052 }, 24053 // unformats numbers separators, decimals places, signs, abbreviations
24054 stringToNumber: function(string) { 24055 var locale = locales[options.currentLocale], 24056 stringOriginal = string, 24057 abbreviations = { 24058 thousand: 3, 24059 million: 6, 24060 billion: 9, 24061 trillion: 12 24062 }, 24063 abbreviation, 24064 value, 24065 i, 24066 regexp; 24067 24068 if (options.zeroFormat && string === options.zeroFormat) { 24069 value = 0; 24070 } else if (options.nullFormat && string === options.nullFormat || !string.replace(/[^0-9]+/g, '').length) { 24071 value = null; 24072 } else { 24073 value = 1; 24074 24075 if (locale.delimiters.decimal !== '.') { 24076 string = string.replace(/\./g, '').replace(locale.delimiters.decimal, '.'); 24077 } 24078 24079 for (abbreviation in abbreviations) { 24080 regexp = new RegExp('[^a-zA-Z]' + locale.abbreviations[abbreviation] + '(?:\\)|(\\' + locale.currency.symbol + ')?(?:\\))?)?$'); 24081 24082 if (stringOriginal.match(regexp)) { 24083 value *= Math.pow(10, abbreviations[abbreviation]); 24084 break; 24085 } 24086 } 24087 24088 // check for negative number 24089 value *= (string.split('-').length + Math.min(string.split('(').length - 1, string.split(')').length - 1)) % 2 ? 1 : -1; 24090 24091 // remove non numbers 24092 string = string.replace(/[^0-9\.]+/g, ''); 24093 24094 value *= Number(string); 24095 } 24096 24097 return value; 24098 }, 24099 isNaN: function(value) { 24100 return typeof value === 'number' && isNaN(value); 24101 }, 24102 includes: function(string, search) { 24103 return string.indexOf(search) !== -1; 24104 }, 24105 insert: function(string, subString, start) { 24106 return string.slice(0, start) + subString + string.slice(start); 24107 }, 24108 reduce: function(array, callback /*, initialValue*/) { 24109 if (this === null) { 24110 throw new TypeError('Array.prototype.reduce called on null or undefined'); 24111 } 24112 24113 if (typeof callback !== 'function') { 24114 throw new TypeError(callback + ' is not a function'); 24115 } 24116 24117 var t = Object(array), 24118 len = t.length >>> 0, 24119 k = 0, 24120 value; 24121 24122 if (arguments.length === 3) { 24123 value = arguments[2]; 24124 } else { 24125 while (k < len && !(k in t)) { 24126 k++; 24127 } 24128 24129 if (k >= len) { 24130 throw new TypeError('Reduce of empty array with no initial value'); 24131 } 24132 24133 value = t[k++]; 24134 } 24135 for (; k < len; k++) { 24136 if (k in t) { 24137 value = callback(value, t[k], k, t); 24138 } 24139 } 24140 return value; 24141 }, 24142 /** 24143 * Computes the multiplier necessary to make x >= 1, 24144 * effectively eliminating miscalculations caused by 24145 * finite precision. 24146 */ 24147 multiplier: function (x) { 24148 var parts = x.toString().split('.'); 24149 24150 return parts.length < 2 ? 1 : Math.pow(10, parts[1].length); 24151 }, 24152 /** 24153 * Given a variable number of arguments, returns the maximum 24154 * multiplier that must be used to normalize an operation involving 24155 * all of them. 24156 */ 24157 correctionFactor: function () { 24158 var args = Array.prototype.slice.call(arguments); 24159 24160 return args.reduce(function(accum, next) { 24161 var mn = _.multiplier(next); 24162 return accum > mn ? accum : mn; 24163 }, 1); 24164 }, 24165 /** 24166 * Implementation of toFixed() that treats floats more like decimals 24167 * 24168 * Fixes binary rounding issues (eg. (0.615).toFixed(2) === '0.61') that present 24169 * problems for accounting- and finance-related software. 24170 */ 24171 toFixed: function(value, maxDecimals, roundingFunction, optionals) { 24172 var splitValue = value.toString().split('.'), 24173 minDecimals = maxDecimals - (optionals || 0), 24174 boundedPrecision,
24175 optionalsRegExp, 24176 power, 24177 output; 24178 24179 // Use the smallest precision value possible to avoid errors from floating point representation 24180 if (splitValue.length === 2) { 24181 boundedPrecision = Math.min(Math.max(splitValue[1].length, minDecimals), maxDecimals); 24182 } else { 24183 boundedPrecision = minDecimals; 24184 } 24185 24186 power = Math.pow(10, boundedPrecision); 24187 24188 // Multiply up by precision, round accurately, then divide and use native toFixed(): 24189 output = (roundingFunction(value + 'e+' + boundedPrecision) / power).toFixed(boundedPrecision); 24190 24191 if (optionals > maxDecimals - boundedPrecision) { 24192 optionalsRegExp = new RegExp('\\.?0{1,' + (optionals - (maxDecimals - boundedPrecision)) + '}$'); 24193 output = output.replace(optionalsRegExp, ''); 24194 } 24195 24196 return output; 24197 } 24198 }; 24199 24200 // avaliable options 24201 numeral.options = options; 24202 24203 // avaliable formats 24204 numeral.formats = formats; 24205 24206 // avaliable formats 24207 numeral.locales = locales; 24208 24209 // This function sets the current locale. If 24210 // no arguments are passed in, it will simply return the current global 24211 // locale key. 24212 numeral.locale = function(key) { 24213 if (key) { 24214 options.currentLocale = key.toLowerCase(); 24215 } 24216 24217 return options.currentLocale; 24218 }; 24219 24220 // This function provides access to the loaded locale data. If 24221 // no arguments are passed in, it will simply return the current 24222 // global locale object. 24223 numeral.localeData = function(key) { 24224 if (!key) { 24225 return locales[options.currentLocale]; 24226 } 24227 24228 key = key.toLowerCase(); 24229 24230 if (!locales[key]) { 24231 throw new Error('Unknown locale : ' + key); 24232 } 24233 24234 return locales[key]; 24235 }; 24236 24237 numeral.reset = function() { 24238 for (var property in defaults) { 24239 options[property] = defaults[property]; 24240 } 24241 }; 24242 24243 numeral.zeroFormat = function(format) { 24244 options.zeroFormat = typeof(format) === 'string' ? format : null; 24245 }; 24246 24247 numeral.nullFormat = function (format) { 24248 options.nullFormat = typeof(format) === 'string' ? format : null; 24249 }; 24250 24251 numeral.defaultFormat = function(format) { 24252 options.defaultFormat = typeof(format) === 'string' ? format : '0.0'; 24253 }; 24254 24255 numeral.register = function(type, name, format) { 24256 name = name.toLowerCase(); 24257 24258 if (this[type + 's'][name]) { 24259 throw new TypeError(name + ' ' + type + ' already registered.'); 24260 } 24261 24262 this[type + 's'][name] = format; 24263 24264 return format; 24265 }; 24266 24267 24268 numeral.validate = function(val, culture) { 24269 var _decimalSep, 24270 _thousandSep, 24271 _currSymbol, 24272 _valArray, 24273 _abbrObj, 24274 _thousandRegEx, 24275 localeData, 24276 temp; 24277 24278 //coerce val to string 24279 if (typeof val !== 'string') { 24280 val += ''; 24281 24282 if (console.warn) { 24283 console.warn('Numeral.js: Value is not string. It has been co-erced to: ', val); 24284 } 24285 } 24286 24287 //trim whitespaces from either sides 24288 val = val.trim(); 24289 24290 //if val is just digits return true 24291 if (!!val.match(/^\d+$/)) { 24292 return true; 24293 } 24294 24295 //if val is empty return false 24296 if (val === '') { 24297 return false; 24298 } 24299 24300 //get the decimal and thousands separator from numeral.localeData 24301 try { 24302 //check if the culture is understood by numeral. if not, default it to current locale 24303 localeData = numeral.localeData(culture); 24304 } catch (e) { 24305 localeData = numeral.localeData(numeral.locale()); 24306 } 24307 24308 //setup the delimiters and currency symbol based on culture/locale 24309 _currSymbol = localeData.currency.symbol; 24310 _abbrObj = localeData.abbreviations; 24311 _decimalSep = localeData.delimiters.decimal; 24312 if (localeData.delimiters.thousands === '.') { 24313 _thousandSep = '\\.'; 24314 } else { 24315 _thousandSep = localeData.delimiters.thousands; 24316 } 24317 24318 // validating currency symbol 24319 temp = val.match(/^[^\d]+/); 24320 if (temp !== null) { 24321 val = val.substr(1); 24322 if (temp[0] !== _currSymbol) { 24323 return false;
24324 } 24325 } 24326 24327 //validating abbreviation symbol 24328 temp = val.match(/[^\d]+$/); 24329 if (temp !== null) { 24330 val = val.slice(0, -1); 24331 if (temp[0] !== _abbrObj.thousand && temp[0] !== _abbrObj.million && temp[0] !== _abbrObj.billion && temp[0] !== _abbrObj.trillion) { 24332 return false; 24333 } 24334 } 24335 24336 _thousandRegEx = new RegExp(_thousandSep + '{2}'); 24337 24338 if (!val.match(/[^\d.,]/g)) { 24339 _valArray = val.split(_decimalSep); 24340 if (_valArray.length > 2) { 24341 return false; 24342 } else { 24343 if (_valArray.length < 2) { 24344 return ( !! _valArray[0].match(/^\d+.*\d$/) && !_valArray[0].match(_thousandRegEx)); 24345 } else { 24346 if (_valArray[0].length === 1) { 24347 return ( !! _valArray[0].match(/^\d+$/) && !_valArray[0].match(_thousandRegEx) && !! _valArray[1].match(/^\d+$/)); 24348 } else { 24349 return ( !! _valArray[0].match(/^\d+.*\d$/) && !_valArray[0].match(_thousandRegEx) && !! _valArray[1].match(/^\d+$/)); 24350 } 24351 } 24352 } 24353 } 24354 24355 return false; 24356 }; 24357 24358 24359 /************************************ 24360 Numeral Prototype 24361 ************************************/ 24362 24363 numeral.fn = Numeral.prototype = { 24364 clone: function() { 24365 return numeral(this); 24366 }, 24367 format: function(inputString, roundingFunction) { 24368 var value = this._value, 24369 format = inputString || options.defaultFormat, 24370 kind, 24371 output, 24372 formatFunction; 24373 24374 // make sure we have a roundingFunction 24375 roundingFunction = roundingFunction || Math.round; 24376 24377 // format based on value 24378 if (value === 0 && options.zeroFormat !== null) { 24379 output = options.zeroFormat; 24380 } else if (value === null && options.nullFormat !== null) { 24381 output = options.nullFormat; 24382 } else { 24383 for (kind in formats) { 24384 if (format.match(formats[kind].regexps.format)) { 24385 formatFunction = formats[kind].format; 24386 24387 break; 24388 } 24389 } 24390 24391 formatFunction = formatFunction || numeral._.numberToFormat; 24392 24393 output = formatFunction(value, format, roundingFunction); 24394 } 24395 24396 return output; 24397 }, 24398 value: function() { 24399 return this._value; 24400 }, 24401 input: function() { 24402 return this._input; 24403 }, 24404 set: function(value) { 24405 this._value = Number(value); 24406 24407 return this; 24408 }, 24409 add: function(value) { 24410 var corrFactor = _.correctionFactor.call(null, this._value, value); 24411 24412 function cback(accum, curr, currI, O) { 24413 return accum + Math.round(corrFactor * curr); 24414 } 24415 24416 this._value = _.reduce([this._value, value], cback, 0) / corrFactor; 24417 24418 return this; 24419 }, 24420 subtract: function(value) { 24421 var corrFactor = _.correctionFactor.call(null, this._value, value); 24422 24423 function cback(accum, curr, currI, O) { 24424 return accum - Math.round(corrFactor * curr); 24425 } 24426 24427 this._value = _.reduce([value], cback, Math.round(this._value * corrFactor)) / corrFactor; 24428 24429 return this; 24430 }, 24431 multiply: function(value) { 24432 function cback(accum, curr, currI, O) { 24433 var corrFactor = _.correctionFactor(accum, curr); 24434 return Math.round(accum * corrFactor) * Math.round(curr * corrFactor) / Math.round(corrFactor * corrFactor); 24435 } 24436 24437 this._value = _.reduce([this._value, value], cback, 1); 24438 24439 return this; 24440 }, 24441 divide: function(value) { 24442 function cback(accum, curr, currI, O) { 24443 var corrFactor = _.correctionFactor(accum, curr); 24444 return Math.round(accum * corrFactor) / Math.round(curr * corrFactor); 24445 } 24446 24447 this._value = _.reduce([this._value, value], cback); 24448 24449 return this; 24450 }, 24451 difference: function(value) { 24452 return Math.abs(numeral(this._value).subtract(value).value()); 24453 } 24454 }; 24455 24456 /************************************ 24457 Default Locale && Format 24458 ************************************/ 24459 24460 numeral.register('locale', 'en', { 24461 delimiters: { 24462 thousands: ',',
24463 decimal: '.' 24464 }, 24465 abbreviations: { 24466 thousand: 'k', 24467 million: 'm', 24468 billion: 'b', 24469 trillion: 't' 24470 }, 24471 ordinal: function(number) { 24472 var b = number % 10; 24473 return (~~(number % 100 / 10) === 1) ? 'th' : 24474 (b === 1) ? 'st' : 24475 (b === 2) ? 'nd' : 24476 (b === 3) ? 'rd' : 'th'; 24477 }, 24478 currency: { 24479 symbol: '$' 24480 } 24481 }); 24482 24483 24484 24485(function() { 24486 numeral.register('format', 'bps', { 24487 regexps: { 24488 format: /(BPS)/, 24489 unformat: /(BPS)/ 24490 }, 24491 format: function(value, format, roundingFunction) { 24492 var space = numeral._.includes(format, ' BPS') ? ' ' : '', 24493 output; 24494 24495 value = value * 10000; 24496 24497 // check for space before BPS 24498 format = format.replace(/\s?BPS/, ''); 24499 24500 output = numeral._.numberToFormat(value, format, roundingFunction); 24501 24502 if (numeral._.includes(output, ')')) { 24503 output = output.split(''); 24504 24505 output.splice(-1, 0, space + 'BPS'); 24506 24507 output = output.join(''); 24508 } else { 24509 output = output + space + 'BPS'; 24510 } 24511 24512 return output; 24513 }, 24514 unformat: function(string) { 24515 return +(numeral._.stringToNumber(string) * 0.0001).toFixed(15); 24516 } 24517 }); 24518})(); 24519 24520 24521(function() { 24522 var decimal = { 24523 base: 1000, 24524 suffixes: ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'] 24525 }, 24526 binary = { 24527 base: 1024, 24528 suffixes: ['B', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB'] 24529 }; 24530 24531 var allSuffixes = decimal.suffixes.concat(binary.suffixes.filter(function (item) { 24532 return decimal.suffixes.indexOf(item) < 0; 24533 })); 24534 var unformatRegex = allSuffixes.join('|'); 24535 // Allow support for BPS (http://www.investopedia.com/terms/b/basispoint.asp) 24536 unformatRegex = '(' + unformatRegex.replace('B', 'B(?!PS)') + ')'; 24537 24538 numeral.register('format', 'bytes', { 24539 regexps: { 24540 format: /([0\s]i?b)/, 24541 unformat: new RegExp(unformatRegex) 24542 }, 24543 format: function(value, format, roundingFunction) { 24544 var output, 24545 bytes = numeral._.includes(format, 'ib') ? binary : decimal, 24546 suffix = numeral._.includes(format, ' b') || numeral._.includes(format, ' ib') ? ' ' : '', 24547 power, 24548 min, 24549 max; 24550 24551 // check for space before 24552 format = format.replace(/\s?i?b/, ''); 24553 24554 for (power = 0; power <= bytes.suffixes.length; power++) { 24555 min = Math.pow(bytes.base, power); 24556 max = Math.pow(bytes.base, power + 1); 24557 24558 if (value === null || value === 0 || value >= min && value < max) { 24559 suffix += bytes.suffixes[power]; 24560 24561 if (min > 0) { 24562 value = value / min; 24563 } 24564 24565 break; 24566 } 24567 } 24568 24569 output = numeral._.numberToFormat(value, format, roundingFunction); 24570 24571 return output + suffix; 24572 }, 24573 unformat: function(string) { 24574 var value = numeral._.stringToNumber(string), 24575 power, 24576 bytesMultiplier; 24577 24578 if (value) { 24579 for (power = decimal.suffixes.length - 1; power >= 0; power--) { 24580 if (numeral._.includes(string, decimal.suffixes[power])) { 24581 bytesMultiplier = Math.pow(decimal.base, power); 24582 24583 break; 24584 } 24585 24586 if (numeral._.includes(string, binary.suffixes[power])) { 24587 bytesMultiplier = Math.pow(binary.base, power); 24588 24589 break; 24590 } 24591 } 24592 24593 value *= (bytesMultiplier || 1); 24594 } 24595 24596 return value; 24597 } 24598 }); 24599})(); 24600 24601 24602(function() { 24603 numeral.register('format', 'currency', { 24604 regexps: { 24605 format: /(\$)/ 24606 }, 24607 format: function(value, format, roundingFunction) { 24608 var locale = numeral.locales[numeral.options.currentLocale], 24609 symbols = { 24610 before: format.match(/^([\+|\-|\(|\s|\$]*)/)[0], 24611 after: format.match(/([\+|\-|\)|\s|\$]*)$/)[0] 24612 }, 24613 output, 24614 symbol, 24615 i; 24616
24617 // strip format of spaces and $ 24618 format = format.replace(/\s?\$\s?/, ''); 24619 24620 // format the number 24621 output = numeral._.numberToFormat(value, format, roundingFunction); 24622 24623 // update the before and after based on value 24624 if (value >= 0) { 24625 symbols.before = symbols.before.replace(/[\-\(]/, ''); 24626 symbols.after = symbols.after.replace(/[\-\)]/, ''); 24627 } else if (value < 0 && (!numeral._.includes(symbols.before, '-') && !numeral._.includes(symbols.before, '('))) { 24628 symbols.before = '-' + symbols.before; 24629 } 24630 24631 // loop through each before symbol 24632 for (i = 0; i < symbols.before.length; i++) { 24633 symbol = symbols.before[i]; 24634 24635 switch (symbol) { 24636 case '$': 24637 output = numeral._.insert(output, locale.currency.symbol, i); 24638 break; 24639 case ' ': 24640 output = numeral._.insert(output, ' ', i + locale.currency.symbol.length - 1); 24641 break; 24642 } 24643 } 24644 24645 // loop through each after symbol 24646 for (i = symbols.after.length - 1; i >= 0; i--) { 24647 symbol = symbols.after[i]; 24648 24649 switch (symbol) { 24650 case '$': 24651 output = i === symbols.after.length - 1 ? output + locale.currency.symbol : numeral._.insert(output, locale.currency.symbol, -(symbols.after.length - (1 + i))); 24652 break; 24653 case ' ': 24654 output = i === symbols.after.length - 1 ? output + ' ' : numeral._.insert(output, ' ', -(symbols.after.length - (1 + i) + locale.currency.symbol.length - 1)); 24655 break; 24656 } 24657 } 24658 24659 24660 return output; 24661 } 24662 }); 24663})(); 24664 24665 24666(function() { 24667 numeral.register('format', 'exponential', { 24668 regexps: { 24669 format: /(e\+|e-)/, 24670 unformat: /(e\+|e-)/ 24671 }, 24672 format: function(value, format, roundingFunction) { 24673 var output, 24674 exponential = typeof value === 'number' && !numeral._.isNaN(value) ? value.toExponential() : '0e+0', 24675 parts = exponential.split('e'); 24676 24677 format = format.replace(/e[\+|\-]{1}0/, ''); 24678 24679 output = numeral._.numberToFormat(Number(parts[0]), format, roundingFunction); 24680 24681 return output + 'e' + parts[1]; 24682 }, 24683 unformat: function(string) { 24684 var parts = numeral._.includes(string, 'e+') ? string.split('e+') : string.split('e-'), 24685 value = Number(parts[0]), 24686 power = Number(parts[1]); 24687 24688 power = numeral._.includes(string, 'e-') ? power *= -1 : power; 24689 24690 function cback(accum, curr, currI, O) { 24691 var corrFactor = numeral._.correctionFactor(accum, curr), 24692 num = (accum * corrFactor) * (curr * corrFactor) / (corrFactor * corrFactor); 24693 return num; 24694 } 24695 24696 return numeral._.reduce([value, Math.pow(10, power)], cback, 1); 24697 } 24698 }); 24699})(); 24700 24701 24702(function() { 24703 numeral.register('format', 'ordinal', { 24704 regexps: { 24705 format: /(o)/ 24706 }, 24707 format: function(value, format, roundingFunction) { 24708 var locale = numeral.locales[numeral.options.currentLocale], 24709 output, 24710 ordinal = numeral._.includes(format, ' o') ? ' ' : ''; 24711 24712 // check for space before 24713 format = format.replace(/\s?o/, ''); 24714 24715 ordinal += locale.ordinal(value); 24716 24717 output = numeral._.numberToFormat(value, format, roundingFunction); 24718 24719 return output + ordinal; 24720 } 24721 }); 24722})(); 24723 24724 24725(function() { 24726 numeral.register('format', 'percentage', { 24727 regexps: { 24728 format: /(%)/, 24729 unformat: /(%)/ 24730 }, 24731 format: function(value, format, roundingFunction) { 24732 var space = numeral._.includes(format, ' %') ? ' ' : '', 24733 output; 24734 24735 if (numeral.options.scalePercentBy100) { 24736 value = value * 100; 24737 } 24738 24739 // check for space before % 24740 format = format.replace(/\s?\%/, ''); 24741 24742 output = numeral._.numberToFormat(value, format, roundingFunction); 24743 24744 if (numeral._.includes(output, ')')) { 24745 output = output.split(''); 24746 24747 output.splice(-1, 0, space + '%'); 24748 24749 output = output.join(''); 24750 } else { 24751 output = output + space + '%'; 24752 } 24753 24754 return output; 24755 }, 24756 unformat: function(string) { 24757 var number = numeral._.stringToNumber(string); 24758 if (numeral.options.scalePercentBy100) { 24759 return number * 0.01; 24760 } 24761 return number; 24762 } 24763 }); 24764})(); 24765 24766 24767(function() { 24768 numeral.register('format', 'time', { 24769 regexps: { 24770 format: /(:)/, 24771 unformat: /(:)/ 24772 }, 24773 format: function(value, format, roundingFunction) { 24774 var hours = Math.floor(value / 60 / 60), 24775 minutes = Math.floor((value - (hours * 60 * 60)) / 60), 24776 seconds = Math.round(value - (hours * 60 * 60) - (minutes * 60)); 24777 24778 return hours + ':' + (minutes < 10 ? '0' + minutes : minutes) + ':' + (seconds < 10 ? '0' + seconds : seconds); 24779 }, 24780 unformat: function(string) { 24781 var timeArray = string.split(':'), 24782 seconds = 0; 24783 24784 // turn hours and minutes into seconds and add them all up 24785 if (timeArray.length === 3) { 24786 // hours 24787 seconds = seconds + (Number(timeArray[0]) * 60 * 60); 24788 // minutes 24789 seconds = seconds + (Number(timeArray[1]) * 60); 24790 // seconds 24791 seconds = seconds + Number(timeArray[2]); 24792 } else if (timeArray.length === 2) { 24793 // minutes 24794 seconds = seconds + (Number(timeArray[0]) * 60); 24795 // seconds 24796 seconds = seconds + Number(timeArray[1]); 24797 } 24798 return Number(seconds); 24799 } 24800 }); 24801})(); 24802 24803return numeral; 24804})); 24805 24806},{}],121:[function(require,module,exports){ 24807(function (global){(function (){ 24808var hasMap = typeof Map === 'function' && Map.prototype; 24809var mapSizeDescriptor = Object.getOwnPropertyDescriptor && hasMap ? Object.getOwnPropertyDescriptor(Map.prototype, 'size') : null; 24810var mapSize = hasMap && mapSizeDescriptor && typeof mapSizeDescriptor.get === 'function' ? mapSizeDescriptor.get : null; 24811var mapForEach = hasMap && Map.prototype.forEach; 24812var hasSet = typeof Set === 'function' && Set.prototype; 24813var setSizeDescriptor = Object.getOwnPropertyDescriptor && hasSet ? Object.getOwnPropertyDescriptor(Set.prototype, 'size') : null; 24814var setSize = hasSet && setSizeDescriptor && typeof setSizeDescriptor.get === 'function' ? setSizeDescriptor.get : null; 24815var setForEach = hasSet && Set.prototype.forEach; 24816var hasWeakMap = typeof WeakMap === 'function' && WeakMap.prototype; 24817var weakMapHas = hasWeakMap ? WeakMap.prototype.has : null; 24818var hasWeakSet = typeof WeakSet === 'function' && WeakSet.prototype; 24819var weakSetHas = hasWeakSet ? WeakSet.prototype.has : null; 24820var hasWeakRef = typeof WeakRef === 'function' && WeakRef.prototype; 24821var weakRefDeref = hasWeakRef ? WeakRef.prototype.deref : null; 24822var booleanValueOf = Boolean.prototype.valueOf; 24823var objectToString = Object.prototype.toString; 24824var functionToString = Function.prototype.toString; 24825var $match = String.prototype.match; 24826var $slice = String.prototype.slice; 24827var $replace = String.prototype.replace; 24828var $toUpperCase = String.prototype.toUpperCase; 24829var $toLowerCase = String.prototype.toLowerCase; 24830var $test = RegExp.prototype.test; 24831var $concat = Array.prototype.concat; 24832var $join = Array.prototype.join; 24833var $arrSlice = Array.prototype.slice; 24834var $floor = Math.floor;
vendor: 4,990 bytes, lines 24835-24969
24835var bigIntValueOf = typeof BigInt === 'function' ? BigInt.prototype.valueOf : null; 24836var gOPS = Object.getOwnPropertySymbols; 24837var symToString = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? Symbol.prototype.toString : null; 24838var hasShammedSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'object'; 24839// ie, `has-tostringtag/shams 24840var toStringTag = typeof Symbol === 'function' && Symbol.toStringTag && (typeof Symbol.toStringTag === hasShammedSymbols ? 'object' : 'symbol') 24841 ? Symbol.toStringTag 24842 : null; 24843var isEnumerable = Object.prototype.propertyIsEnumerable; 24844 24845var gPO = (typeof Reflect === 'function' ? Reflect.getPrototypeOf : Object.getPrototypeOf) || ( 24846 [].__proto__ === Array.prototype // eslint-disable-line no-proto 24847 ? function (O) { 24848 return O.__proto__; // eslint-disable-line no-proto 24849 } 24850 : null 24851); 24852 24853function addNumericSeparator(num, str) { 24854 if ( 24855 num === Infinity 24856 || num === -Infinity 24857 || num !== num 24858 || (num && num > -1000 && num < 1000) 24859 || $test.call(/e/, str) 24860 ) { 24861 return str; 24862 } 24863 var sepRegex = /[0-9](?=(?:[0-9]{3})+(?![0-9]))/g; 24864 if (typeof num === 'number') { 24865 var int = num < 0 ? -$floor(-num) : $floor(num); // trunc(num) 24866 if (int !== num) { 24867 var intStr = String(int); 24868 var dec = $slice.call(str, intStr.length + 1); 24869 return $replace.call(intStr, sepRegex, '$&_') + '.' + $replace.call($replace.call(dec, /([0-9]{3})/g, '$&_'), /_$/, ''); 24870 } 24871 } 24872 return $replace.call(str, sepRegex, '$&_'); 24873} 24874 24875var utilInspect = require('./util.inspect'); 24876var inspectCustom = utilInspect.custom; 24877var inspectSymbol = isSymbol(inspectCustom) ? inspectCustom : null; 24878 24879module.exports = function inspect_(obj, options, depth, seen) { 24880 var opts = options || {}; 24881 24882 if (has(opts, 'quoteStyle') && (opts.quoteStyle !== 'single' && opts.quoteStyle !== 'double')) { 24883 throw new TypeError('option "quoteStyle" must be "single" or "double"'); 24884 } 24885 if ( 24886 has(opts, 'maxStringLength') && (typeof opts.maxStringLength === 'number' 24887 ? opts.maxStringLength < 0 && opts.maxStringLength !== Infinity 24888 : opts.maxStringLength !== null 24889 ) 24890 ) { 24891 throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`'); 24892 } 24893 var customInspect = has(opts, 'customInspect') ? opts.customInspect : true; 24894 if (typeof customInspect !== 'boolean' && customInspect !== 'symbol') { 24895 throw new TypeError('option "customInspect", if provided, must be `true`, `false`, or `\'symbol\'`'); 24896 } 24897 24898 if ( 24899 has(opts, 'indent') 24900 && opts.indent !== null 24901 && opts.indent !== '\t' 24902 && !(parseInt(opts.indent, 10) === opts.indent && opts.indent > 0) 24903 ) { 24904 throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`'); 24905 } 24906 if (has(opts, 'numericSeparator') && typeof opts.numericSeparator !== 'boolean') { 24907 throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`'); 24908 } 24909 var numericSeparator = opts.numericSeparator; 24910 24911 if (typeof obj === 'undefined') { 24912 return 'undefined'; 24913 } 24914 if (obj === null) { 24915 return 'null'; 24916 } 24917 if (typeof obj === 'boolean') { 24918 return obj ? 'true' : 'false'; 24919 } 24920 24921 if (typeof obj === 'string') { 24922 return inspectString(obj, opts); 24923 } 24924 if (typeof obj === 'number') { 24925 if (obj === 0) { 24926 return Infinity / obj > 0 ? '0' : '-0'; 24927 } 24928 var str = String(obj); 24929 return numericSeparator ? addNumericSeparator(obj, str) : str; 24930 } 24931 if (typeof obj === 'bigint') { 24932 var bigIntStr = String(obj) + 'n'; 24933 return numericSeparator ? addNumericSeparator(obj, bigIntStr) : bigIntStr; 24934 } 24935 24936 var maxDepth = typeof opts.depth === 'undefined' ? 5 : opts.depth; 24937 if (typeof depth === 'undefined') { depth = 0; } 24938 if (depth >= maxDepth && maxDepth > 0 && typeof obj === 'object') { 24939 return isArray(obj) ? '[Array]' : '[Object]'; 24940 } 24941 24942 var indent = getIndent(opts, depth); 24943 24944 if (typeof seen === 'undefined') { 24945 seen = []; 24946 } else if (indexOf(seen, obj) >= 0) { 24947 return '[Circular]'; 24948 } 24949 24950 function inspect(value, from, noIndent) { 24951 if (from) { 24952 seen = $arrSlice.call(seen); 24953 seen.push(from); 24954 } 24955 if (noIndent) { 24956 var newOpts = { 24957 depth: opts.depth 24958 }; 24959 if (has(opts, 'quoteStyle')) { 24960 newOpts.quoteStyle = opts.quoteStyle; 24961 } 24962 return inspect_(value, newOpts, depth + 1, seen); 24963 } 24964 return inspect_(value, opts, depth + 1, seen); 24965 } 24966 24967 if (typeof obj === 'function' && !isRegExp(obj)) { // in older engines, regexes are callable 24968 var name = nameOf(obj); 24969 var keys = arrObjKeys(obj, inspect);
vendor: 5,588 bytes, lines 24970-25089
24970 return '[Function' + (name ? ': ' + name : ' (anonymous)') + ']' + (keys.length > 0 ? ' { ' + $join.call(keys, ', ') + ' }' : ''); 24971 } 24972 if (isSymbol(obj)) { 24973 var symString = hasShammedSymbols ? $replace.call(String(obj), /^(Symbol\(.*\))_[^)]*$/, '$1') : symToString.call(obj); 24974 return typeof obj === 'object' && !hasShammedSymbols ? markBoxed(symString) : symString; 24975 } 24976 if (isElement(obj)) { 24977 var s = '<' + $toLowerCase.call(String(obj.nodeName)); 24978 var attrs = obj.attributes || []; 24979 for (var i = 0; i < attrs.length; i++) { 24980 s += ' ' + attrs[i].name + '=' + wrapQuotes(quote(attrs[i].value), 'double', opts); 24981 } 24982 s += '>'; 24983 if (obj.childNodes && obj.childNodes.length) { s += '...'; } 24984 s += '</' + $toLowerCase.call(String(obj.nodeName)) + '>'; 24985 return s; 24986 } 24987 if (isArray(obj)) { 24988 if (obj.length === 0) { return '[]'; } 24989 var xs = arrObjKeys(obj, inspect); 24990 if (indent && !singleLineValues(xs)) { 24991 return '[' + indentedJoin(xs, indent) + ']'; 24992 } 24993 return '[ ' + $join.call(xs, ', ') + ' ]'; 24994 } 24995 if (isError(obj)) { 24996 var parts = arrObjKeys(obj, inspect); 24997 if (!('cause' in Error.prototype) && 'cause' in obj && !isEnumerable.call(obj, 'cause')) { 24998 return '{ [' + String(obj) + '] ' + $join.call($concat.call('[cause]: ' + inspect(obj.cause), parts), ', ') + ' }'; 24999 } 25000 if (parts.length === 0) { return '[' + String(obj) + ']'; } 25001 return '{ [' + String(obj) + '] ' + $join.call(parts, ', ') + ' }'; 25002 } 25003 if (typeof obj === 'object' && customInspect) { 25004 if (inspectSymbol && typeof obj[inspectSymbol] === 'function' && utilInspect) { 25005 return utilInspect(obj, { depth: maxDepth - depth }); 25006 } else if (customInspect !== 'symbol' && typeof obj.inspect === 'function') { 25007 return obj.inspect(); 25008 } 25009 } 25010 if (isMap(obj)) { 25011 var mapParts = []; 25012 if (mapForEach) { 25013 mapForEach.call(obj, function (value, key) { 25014 mapParts.push(inspect(key, obj, true) + ' => ' + inspect(value, obj)); 25015 }); 25016 } 25017 return collectionOf('Map', mapSize.call(obj), mapParts, indent); 25018 } 25019 if (isSet(obj)) { 25020 var setParts = []; 25021 if (setForEach) { 25022 setForEach.call(obj, function (value) { 25023 setParts.push(inspect(value, obj)); 25024 }); 25025 } 25026 return collectionOf('Set', setSize.call(obj), setParts, indent); 25027 } 25028 if (isWeakMap(obj)) { 25029 return weakCollectionOf('WeakMap'); 25030 } 25031 if (isWeakSet(obj)) { 25032 return weakCollectionOf('WeakSet'); 25033 } 25034 if (isWeakRef(obj)) { 25035 return weakCollectionOf('WeakRef'); 25036 } 25037 if (isNumber(obj)) { 25038 return markBoxed(inspect(Number(obj))); 25039 } 25040 if (isBigInt(obj)) { 25041 return markBoxed(inspect(bigIntValueOf.call(obj))); 25042 } 25043 if (isBoolean(obj)) { 25044 return markBoxed(booleanValueOf.call(obj)); 25045 } 25046 if (isString(obj)) { 25047 return markBoxed(inspect(String(obj))); 25048 } 25049 // note: in IE 8, sometimes `global !== window` but both are the prototypes of each other 25050 /* eslint-env browser */ 25051 if (typeof window !== 'undefined' && obj === window) { 25052 return '{ [object Window] }'; 25053 } 25054 if (obj === global) { 25055 return '{ [object globalThis] }'; 25056 } 25057 if (!isDate(obj) && !isRegExp(obj)) { 25058 var ys = arrObjKeys(obj, inspect); 25059 var isPlainObject = gPO ? gPO(obj) === Object.prototype : obj instanceof Object || obj.constructor === Object; 25060 var protoTag = obj instanceof Object ? '' : 'null prototype'; 25061 var stringTag = !isPlainObject && toStringTag && Object(obj) === obj && toStringTag in obj ? $slice.call(toStr(obj), 8, -1) : protoTag ? 'Object' : ''; 25062 var constructorTag = isPlainObject || typeof obj.constructor !== 'function' ? '' : obj.constructor.name ? obj.constructor.name + ' ' : ''; 25063 var tag = constructorTag + (stringTag || protoTag ? '[' + $join.call($concat.call([], stringTag || [], protoTag || []), ': ') + '] ' : ''); 25064 if (ys.length === 0) { return tag + '{}'; } 25065 if (indent) { 25066 return tag + '{' + indentedJoin(ys, indent) + '}'; 25067 } 25068 return tag + '{ ' + $join.call(ys, ', ') + ' }'; 25069 } 25070 return String(obj); 25071}; 25072 25073function wrapQuotes(s, defaultStyle, opts) { 25074 var quoteChar = (opts.quoteStyle || defaultStyle) === 'double' ? '"' : "'"; 25075 return quoteChar + s + quoteChar; 25076} 25077 25078function quote(s) { 25079 return $replace.call(String(s), /"/g, '"'); 25080} 25081 25082function isArray(obj) { return toStr(obj) === '[object Array]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); } 25083function isDate(obj) { return toStr(obj) === '[object Date]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); } 25084function isRegExp(obj) { return toStr(obj) === '[object RegExp]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); } 25085function isError(obj) { return toStr(obj) === '[object Error]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); } 25086function isString(obj) { return toStr(obj) === '[object String]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); } 25087function isNumber(obj) { return toStr(obj) === '[object Number]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); } 25088function isBoolean(obj) { return toStr(obj) === '[object Boolean]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); } 25089
vendor: 4,465 bytes, lines 25090-25266
25090// Symbol and BigInt do have Symbol.toStringTag by spec, so that can't be used to eliminate false positives 25091function isSymbol(obj) { 25092 if (hasShammedSymbols) { 25093 return obj && typeof obj === 'object' && obj instanceof Symbol; 25094 } 25095 if (typeof obj === 'symbol') { 25096 return true; 25097 } 25098 if (!obj || typeof obj !== 'object' || !symToString) { 25099 return false; 25100 } 25101 try { 25102 symToString.call(obj); 25103 return true; 25104 } catch (e) {} 25105 return false; 25106} 25107 25108function isBigInt(obj) { 25109 if (!obj || typeof obj !== 'object' || !bigIntValueOf) { 25110 return false; 25111 } 25112 try { 25113 bigIntValueOf.call(obj); 25114 return true; 25115 } catch (e) {} 25116 return false; 25117} 25118 25119var hasOwn = Object.prototype.hasOwnProperty || function (key) { return key in this; }; 25120function has(obj, key) { 25121 return hasOwn.call(obj, key); 25122} 25123 25124function toStr(obj) { 25125 return objectToString.call(obj); 25126} 25127 25128function nameOf(f) { 25129 if (f.name) { return f.name; } 25130 var m = $match.call(functionToString.call(f), /^function\s*([\w$]+)/); 25131 if (m) { return m[1]; } 25132 return null; 25133} 25134 25135function indexOf(xs, x) { 25136 if (xs.indexOf) { return xs.indexOf(x); } 25137 for (var i = 0, l = xs.length; i < l; i++) { 25138 if (xs[i] === x) { return i; } 25139 } 25140 return -1; 25141} 25142 25143function isMap(x) { 25144 if (!mapSize || !x || typeof x !== 'object') { 25145 return false; 25146 } 25147 try { 25148 mapSize.call(x); 25149 try { 25150 setSize.call(x); 25151 } catch (s) { 25152 return true; 25153 } 25154 return x instanceof Map; // core-js workaround, pre-v2.5.0 25155 } catch (e) {} 25156 return false; 25157} 25158 25159function isWeakMap(x) { 25160 if (!weakMapHas || !x || typeof x !== 'object') { 25161 return false; 25162 } 25163 try { 25164 weakMapHas.call(x, weakMapHas); 25165 try { 25166 weakSetHas.call(x, weakSetHas); 25167 } catch (s) { 25168 return true; 25169 } 25170 return x instanceof WeakMap; // core-js workaround, pre-v2.5.0 25171 } catch (e) {} 25172 return false; 25173} 25174 25175function isWeakRef(x) { 25176 if (!weakRefDeref || !x || typeof x !== 'object') { 25177 return false; 25178 } 25179 try { 25180 weakRefDeref.call(x); 25181 return true; 25182 } catch (e) {} 25183 return false; 25184} 25185 25186function isSet(x) { 25187 if (!setSize || !x || typeof x !== 'object') { 25188 return false; 25189 } 25190 try { 25191 setSize.call(x); 25192 try { 25193 mapSize.call(x); 25194 } catch (m) { 25195 return true; 25196 } 25197 return x instanceof Set; // core-js workaround, pre-v2.5.0 25198 } catch (e) {} 25199 return false; 25200} 25201 25202function isWeakSet(x) { 25203 if (!weakSetHas || !x || typeof x !== 'object') { 25204 return false; 25205 } 25206 try { 25207 weakSetHas.call(x, weakSetHas); 25208 try { 25209 weakMapHas.call(x, weakMapHas); 25210 } catch (s) { 25211 return true; 25212 } 25213 return x instanceof WeakSet; // core-js workaround, pre-v2.5.0 25214 } catch (e) {} 25215 return false; 25216} 25217 25218function isElement(x) { 25219 if (!x || typeof x !== 'object') { return false; } 25220 if (typeof HTMLElement !== 'undefined' && x instanceof HTMLElement) { 25221 return true; 25222 } 25223 return typeof x.nodeName === 'string' && typeof x.getAttribute === 'function'; 25224} 25225 25226function inspectString(str, opts) { 25227 if (str.length > opts.maxStringLength) { 25228 var remaining = str.length - opts.maxStringLength; 25229 var trailer = '... ' + remaining + ' more character' + (remaining > 1 ? 's' : ''); 25230 return inspectString($slice.call(str, 0, opts.maxStringLength), opts) + trailer; 25231 } 25232 // eslint-disable-next-line no-control-regex 25233 var s = $replace.call($replace.call(str, /(['\\])/g, '\\$1'), /[\x00-\x1f]/g, lowbyte); 25234 return wrapQuotes(s, 'single', opts); 25235} 25236 25237function lowbyte(c) { 25238 var n = c.charCodeAt(0); 25239 var x = { 25240 8: 'b', 25241 9: 't', 25242 10: 'n', 25243 12: 'f', 25244 13: 'r' 25245 }[n]; 25246 if (x) { return '\\' + x; } 25247 return '\\x' + (n < 0x10 ? '0' : '') + $toUpperCase.call(n.toString(16)); 25248} 25249 25250function markBoxed(str) { 25251 return 'Object(' + str + ')'; 25252} 25253 25254function weakCollectionOf(type) { 25255 return type + ' { ? }'; 25256} 25257 25258function collectionOf(type, size, entries, indent) { 25259 var joinedEntries = indent ? indentedJoin(entries, indent) : $join.call(entries, ', '); 25260 return type + ' (' + size + ') {' + joinedEntries + '}'; 25261} 25262 25263function singleLineValues(xs) { 25264 for (var i = 0; i < xs.length; i++) { 25265 if (indexOf(xs[i], '\n') >= 0) { 25266 return false;
25267 } 25268 } 25269 return true; 25270} 25271 25272function getIndent(opts, depth) { 25273 var baseIndent; 25274 if (opts.indent === '\t') { 25275 baseIndent = '\t'; 25276 } else if (typeof opts.indent === 'number' && opts.indent > 0) { 25277 baseIndent = $join.call(Array(opts.indent + 1), ' '); 25278 } else { 25279 return null; 25280 } 25281 return { 25282 base: baseIndent, 25283 prev: $join.call(Array(depth + 1), baseIndent) 25284 }; 25285} 25286 25287function indentedJoin(xs, indent) { 25288 if (xs.length === 0) { return ''; } 25289 var lineJoiner = '\n' + indent.prev + indent.base; 25290 return lineJoiner + $join.call(xs, ',' + lineJoiner) + '\n' + indent.prev; 25291} 25292 25293function arrObjKeys(obj, inspect) { 25294 var isArr = isArray(obj); 25295 var xs = []; 25296 if (isArr) { 25297 xs.length = obj.length; 25298 for (var i = 0; i < obj.length; i++) { 25299 xs[i] = has(obj, i) ? inspect(obj[i], obj) : ''; 25300 } 25301 } 25302 var syms = typeof gOPS === 'function' ? gOPS(obj) : []; 25303 var symMap; 25304 if (hasShammedSymbols) { 25305 symMap = {}; 25306 for (var k = 0; k < syms.length; k++) { 25307 symMap['$' + syms[k]] = syms[k]; 25308 } 25309 } 25310 25311 for (var key in obj) { // eslint-disable-line no-restricted-syntax 25312 if (!has(obj, key)) { continue; } // eslint-disable-line no-restricted-syntax, no-continue 25313 if (isArr && String(Number(key)) === key && key < obj.length) { continue; } // eslint-disable-line no-restricted-syntax, no-continue 25314 if (hasShammedSymbols && symMap['$' + key] instanceof Symbol) { 25315 // this is to prevent shammed Symbols, which are stored as strings, from being included in the string key section 25316 continue; // eslint-disable-line no-restricted-syntax, no-continue 25317 } else if ($test.call(/[^\w$]/, key)) { 25318 xs.push(inspect(key, obj) + ': ' + inspect(obj[key], obj)); 25319 } else { 25320 xs.push(key + ': ' + inspect(obj[key], obj)); 25321 } 25322 } 25323 if (typeof gOPS === 'function') { 25324 for (var j = 0; j < syms.length; j++) { 25325 if (isEnumerable.call(obj, syms[j])) { 25326 xs.push('[' + inspect(syms[j]) + ']: ' + inspect(obj[syms[j]], obj)); 25327 } 25328 } 25329 } 25330 return xs; 25331} 25332 25333}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) 25334},{"./util.inspect":12}],122:[function(require,module,exports){ 25335'use strict'; 25336 25337var keysShim; 25338if (!Object.keys) { 25339 // modified from https://github.com/es-shims/es5-shim 25340 var has = Object.prototype.hasOwnProperty; 25341 var toStr = Object.prototype.toString; 25342 var isArgs = require('./isArguments'); // eslint-disable-line global-require 25343 var isEnumerable = Object.prototype.propertyIsEnumerable; 25344 var hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString'); 25345 var hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype'); 25346 var dontEnums = [ 25347 'toString', 25348 'toLocaleString', 25349 'valueOf', 25350 'hasOwnProperty', 25351 'isPrototypeOf', 25352 'propertyIsEnumerable', 25353 'constructor' 25354 ]; 25355 var equalsConstructorPrototype = function (o) { 25356 var ctor = o.constructor; 25357 return ctor && ctor.prototype === o; 25358 }; 25359 var excludedKeys = { 25360 $applicationCache: true, 25361 $console: true, 25362 $external: true, 25363 $frame: true, 25364 $frameElement: true, 25365 $frames: true, 25366 $innerHeight: true, 25367 $innerWidth: true, 25368 $onmozfullscreenchange: true, 25369 $onmozfullscreenerror: true, 25370 $outerHeight: true, 25371 $outerWidth: true, 25372 $pageXOffset: true, 25373 $pageYOffset: true, 25374 $parent: true, 25375 $scrollLeft: true, 25376 $scrollTop: true, 25377 $scrollX: true, 25378 $scrollY: true, 25379 $self: true, 25380 $webkitIndexedDB: true, 25381 $webkitStorageInfo: true, 25382 $window: true 25383 }; 25384 var hasAutomationEqualityBug = (function () { 25385 /* global window */ 25386 if (typeof window === 'undefined') { return false; } 25387 for (var k in window) { 25388 try { 25389 if (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') { 25390 try { 25391 equalsConstructorPrototype(window[k]); 25392 } catch (e) { 25393 return true; 25394 } 25395 } 25396 } catch (e) { 25397 return true; 25398 } 25399 } 25400 return false;
vendor: 2,457 bytes, lines 25401-25492
25401 }()); 25402 var equalsConstructorPrototypeIfNotBuggy = function (o) { 25403 /* global window */ 25404 if (typeof window === 'undefined' || !hasAutomationEqualityBug) { 25405 return equalsConstructorPrototype(o); 25406 } 25407 try { 25408 return equalsConstructorPrototype(o); 25409 } catch (e) { 25410 return false; 25411 } 25412 }; 25413 25414 keysShim = function keys(object) { 25415 var isObject = object !== null && typeof object === 'object'; 25416 var isFunction = toStr.call(object) === '[object Function]'; 25417 var isArguments = isArgs(object); 25418 var isString = isObject && toStr.call(object) === '[object String]'; 25419 var theKeys = []; 25420 25421 if (!isObject && !isFunction && !isArguments) { 25422 throw new TypeError('Object.keys called on a non-object'); 25423 } 25424 25425 var skipProto = hasProtoEnumBug && isFunction; 25426 if (isString && object.length > 0 && !has.call(object, 0)) { 25427 for (var i = 0; i < object.length; ++i) { 25428 theKeys.push(String(i)); 25429 } 25430 } 25431 25432 if (isArguments && object.length > 0) { 25433 for (var j = 0; j < object.length; ++j) { 25434 theKeys.push(String(j)); 25435 } 25436 } else { 25437 for (var name in object) { 25438 if (!(skipProto && name === 'prototype') && has.call(object, name)) { 25439 theKeys.push(String(name)); 25440 } 25441 } 25442 } 25443 25444 if (hasDontEnumBug) { 25445 var skipConstructor = equalsConstructorPrototypeIfNotBuggy(object); 25446 25447 for (var k = 0; k < dontEnums.length; ++k) { 25448 if (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) { 25449 theKeys.push(dontEnums[k]); 25450 } 25451 } 25452 } 25453 return theKeys; 25454 }; 25455} 25456module.exports = keysShim; 25457 25458},{"./isArguments":124}],123:[function(require,module,exports){ 25459'use strict'; 25460 25461var slice = Array.prototype.slice; 25462var isArgs = require('./isArguments'); 25463 25464var origKeys = Object.keys; 25465var keysShim = origKeys ? function keys(o) { return origKeys(o); } : require('./implementation'); 25466 25467var originalKeys = Object.keys; 25468 25469keysShim.shim = function shimObjectKeys() { 25470 if (Object.keys) { 25471 var keysWorksWithArguments = (function () { 25472 // Safari 5.0 bug 25473 var args = Object.keys(arguments); 25474 return args && args.length === arguments.length; 25475 }(1, 2)); 25476 if (!keysWorksWithArguments) { 25477 Object.keys = function keys(object) { // eslint-disable-line func-name-matching 25478 if (isArgs(object)) { 25479 return originalKeys(slice.call(object)); 25480 } 25481 return originalKeys(object); 25482 }; 25483 } 25484 } else { 25485 Object.keys = keysShim; 25486 } 25487 return Object.keys || keysShim; 25488}; 25489 25490module.exports = keysShim; 25491 25492},{"./implementation":122,"./isArguments":124}
25492],124:[function(require,module,exports){ 25493'use strict'; 25494 25495var toStr = Object.prototype.toString; 25496 25497module.exports = function isArguments(value) { 25498 var str = toStr.call(value); 25499 var isArgs = str === '[object Arguments]'; 25500 if (!isArgs) { 25501 isArgs = str !== '[object Array]' && 25502 value !== null && 25503 typeof value === 'object' && 25504 typeof value.length === 'number' && 25505 value.length >= 0 && 25506 toStr.call(value.callee) === '[object Function]'; 25507 } 25508 return isArgs; 25509}; 25510 25511},{}],125:[function(require,module,exports){ 25512'use strict'; 25513 25514var RequireObjectCoercible = require('es-object-atoms/RequireObjectCoercible'); 25515var callBound = require('call-bind/callBound'); 25516var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable'); 25517var $push = callBound('Array.prototype.push'); 25518 25519module.exports = function entries(O) { 25520 var obj = RequireObjectCoercible(O); 25521 var entrys = []; 25522 for (var key in obj) { 25523 if ($isEnumerable(obj, key)) { // checks own-ness as well 25524 $push(entrys, [key, obj[key]]); 25525 } 25526 } 25527 return entrys; 25528}; 25529 25530},{"call-bind/callBound":13,"es-object-atoms/RequireObjectCoercible":79}],126:[function(require,module,exports){ 25531'use strict'; 25532 25533var define = require('define-properties'); 25534var callBind = require('call-bind'); 25535 25536var implementation = require('./implementation'); 25537var getPolyfill = require('./polyfill'); 25538var shim = require('./shim'); 25539 25540var polyfill = callBind(getPolyfill(), Object); 25541 25542define(polyfill, { 25543 getPolyfill: getPolyfill, 25544 implementation: implementation, 25545 shim: shim 25546}); 25547 25548module.exports = polyfill; 25549 25550},{"./implementation":125,"./polyfill":127,"./shim":128,"call-bind":14,"define-properties":16}],127:[function(require,module,exports){ 25551'use strict'; 25552 25553var implementation = require('./implementation'); 25554 25555module.exports = function getPolyfill() { 25556 return typeof Object.entries === 'function' ? Object.entries : implementation; 25557}; 25558 25559},{"./implementation":125}],128:[function(require,module,exports){ 25560'use strict'; 25561 25562var getPolyfill = require('./polyfill'); 25563var define = require('define-properties'); 25564 25565module.exports = function shimEntries() { 25566 var polyfill = getPolyfill(); 25567 define(Object, { entries: polyfill }, { 25568 entries: function testEntries() { 25569 return Object.entries !== polyfill; 25570 } 25571 }); 25572 return polyfill; 25573}; 25574 25575},{"./polyfill":127,"define-properties":16}],129:[function(require,module,exports){ 25576'use strict'; 25577 25578var CreateDataProperty = require('es-abstract/2024/CreateDataProperty'); 25579var RequireObjectCoercible = require('es-object-atoms/RequireObjectCoercible'); 25580var ToObject = require('es-object-atoms/ToObject'); 25581var safeConcat = require('safe-array-concat'); 25582var reduce = require('array.prototype.reduce'); 25583var gOPD = require('gopd'); 25584var $Object = require('es-object-atoms'); 25585 25586var $getOwnNames = $Object.getOwnPropertyNames; 25587var $getSymbols = $Object.getOwnPropertySymbols; 25588 25589var getAll = $getSymbols ? function (obj) { 25590 return safeConcat($getOwnNames(obj), $getSymbols(obj)); 25591} : $getOwnNames; 25592 25593var isES5 = gOPD && typeof $getOwnNames === 'function'; 25594 25595module.exports = function getOwnPropertyDescriptors(value) { 25596 RequireObjectCoercible(value); 25597 if (!isES5) { 25598 throw new TypeError('getOwnPropertyDescriptors requires Object.getOwnPropertyDescriptor'); 25599 } 25600 25601 var O = ToObject(value); 25602 return reduce( 25603 getAll(O), 25604 function (acc, key) { 25605 var descriptor = gOPD(O, key); 25606 if (typeof descriptor !== 'undefined') { 25607 CreateDataProperty(acc, key, descriptor); 25608 } 25609 return acc; 25610 }, 25611 {} 25612 ); 25613}; 25614 25615},{"array.prototype.reduce":8,"es-abstract/2024/CreateDataProperty":25,"es-object-atoms":81,"es-object-atoms/RequireObjectCoercible":79,"es-object-atoms/ToObject":80,"gopd":102,"safe-array-concat":139}],130:[function(require,module,exports){ 25616'use strict'; 25617 25618var define = require('define-properties'); 25619var callBind = require('call-bind'); 25620 25621var implementation = require('./implementation'); 25622var getPolyfill = require('./polyfill'); 25623var shim = require('./shim'); 25624 25625var bound = callBind(getPolyfill(), Object); 25626 25627define(bound, { 25628 getPolyfill: getPolyfill, 25629 implementation: implementation, 25630 shim: shim 25631}); 25632 25633module.exports = bound; 25634 25635},{"./implementation":129,"./polyfill":131,"./shim":132,"call-bind":14,"define-properties":16}],131:[function(require,module,exports){ 25636'use strict'; 25637 25638var implementation = require('./implementation'); 25639 25640module.exports = function getPolyfill() { 25641 return typeof Object.getOwnPropertyDescriptors === 'function' ? Object.getOwnPropertyDescriptors : implementation; 25642}; 25643 25644},{"./implementation":129}
25644],132:[function(require,module,exports){ 25645'use strict'; 25646 25647var getPolyfill = require('./polyfill'); 25648var define = require('define-properties'); 25649 25650module.exports = function shimGetOwnPropertyDescriptors() { 25651 var polyfill = getPolyfill(); 25652 define( 25653 Object, 25654 { getOwnPropertyDescriptors: polyfill }, 25655 { getOwnPropertyDescriptors: function () { return Object.getOwnPropertyDescriptors !== polyfill; } } 25656 ); 25657 return polyfill; 25658}; 25659 25660},{"./polyfill":131,"define-properties":16}],133:[function(require,module,exports){ 25661'use strict'; 25662 25663var RequireObjectCoercible = require('es-object-atoms/RequireObjectCoercible'); 25664var callBound = require('call-bind/callBound'); 25665 25666var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable'); 25667var $push = callBound('Array.prototype.push'); 25668 25669module.exports = function values(O) { 25670 var obj = RequireObjectCoercible(O); 25671 var vals = []; 25672 for (var key in obj) { 25673 if ($isEnumerable(obj, key)) { // checks own-ness as well 25674 $push(vals, obj[key]); 25675 } 25676 } 25677 return vals; 25678}; 25679 25680},{"call-bind/callBound":13,"es-object-atoms/RequireObjectCoercible":79}],134:[function(require,module,exports){ 25681arguments[4][126][0].apply(exports,arguments) 25682},{"./implementation":133,"./polyfill":135,"./shim":136,"call-bind":14,"define-properties":16,"dup":126}],135:[function(require,module,exports){ 25683'use strict'; 25684 25685var implementation = require('./implementation'); 25686 25687module.exports = function getPolyfill() { 25688 return typeof Object.values === 'function' ? Object.values : implementation; 25689}; 25690 25691},{"./implementation":133}],136:[function(require,module,exports){ 25692'use strict'; 25693 25694var getPolyfill = require('./polyfill'); 25695var define = require('define-properties'); 25696 25697module.exports = function shimValues() { 25698 var polyfill = getPolyfill(); 25699 define(Object, { values: polyfill }, { 25700 values: function testValues() { 25701 return Object.values !== polyfill; 25702 } 25703 }); 25704 return polyfill; 25705}; 25706 25707},{"./polyfill":135,"define-properties":16}],137:[function(require,module,exports){ 25708// shim for using process in browser 25709var process = module.exports = {}; 25710 25711// cached from whatever global is present so that test runners that stub it 25712// don't break things. But we need to wrap it in a try catch in case it is 25713// wrapped in strict mode code which doesn't define any globals. It's inside a 25714// function because try/catches deoptimize in certain engines. 25715 25716var cachedSetTimeout; 25717var cachedClearTimeout; 25718 25719function defaultSetTimout() { 25720 throw new Error('setTimeout has not been defined'); 25721} 25722function defaultClearTimeout () { 25723 throw new Error('clearTimeout has not been defined'); 25724} 25725(function () { 25726 try { 25727 if (typeof setTimeout === 'function') { 25728 cachedSetTimeout = setTimeout; 25729 } else { 25730 cachedSetTimeout = defaultSetTimout; 25731 } 25732 } catch (e) { 25733 cachedSetTimeout = defaultSetTimout; 25734 } 25735 try { 25736 if (typeof clearTimeout === 'function') { 25737 cachedClearTimeout = clearTimeout; 25738 } else { 25739 cachedClearTimeout = defaultClearTimeout; 25740 } 25741 } catch (e) { 25742 cachedClearTimeout = defaultClearTimeout; 25743 } 25744} ()) 25745function runTimeout(fun) { 25746 if (cachedSetTimeout === setTimeout) { 25747 //normal enviroments in sane situations 25748 return setTimeout(fun, 0); 25749 } 25750 // if setTimeout wasn't available but was latter defined 25751 if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { 25752 cachedSetTimeout = setTimeout; 25753 return setTimeout(fun, 0); 25754 } 25755 try { 25756 // when when somebody has screwed with setTimeout but no I.E. maddness 25757 return cachedSetTimeout(fun, 0); 25758 } catch(e){ 25759 try { 25760 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally 25761 return cachedSetTimeout.call(null, fun, 0); 25762 } catch(e){ 25763 // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error 25764 return cachedSetTimeout.call(this, fun, 0); 25765 } 25766 } 25767 25768 25769} 25770function runClearTimeout(marker) { 25771 if (cachedClearTimeout === clearTimeout) { 25772 //normal enviroments in sane situations 25773 return clearTimeout(marker); 25774 } 25775 // if clearTimeout wasn't available but was latter defined 25776 if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { 25777 cachedClearTimeout = clearTimeout; 25778 return clearTimeout(marker); 25779 } 25780 try { 25781 // when when somebody has screwed with setTimeout but no I.E. maddness 25782 return cachedClearTimeout(marker); 25783 } catch (e){ 25784 try { 25785 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally 25786 return cachedClearTimeout.call(null, marker); 25787 } catch (e){ 25788 // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. 25789 // Some versions of I.E. have different rules for clearTimeout vs setTimeout 25790 return cachedClearTimeout.call(this, marker); 25791 } 25792 } 25793 25794 25795 25796} 25797var queue = []; 25798var draining = false;
vendor: 3,286 bytes, lines 25799-25915
25799var currentQueue; 25800var queueIndex = -1; 25801 25802function cleanUpNextTick() { 25803 if (!draining || !currentQueue) { 25804 return; 25805 } 25806 draining = false; 25807 if (currentQueue.length) { 25808 queue = currentQueue.concat(queue); 25809 } else { 25810 queueIndex = -1; 25811 } 25812 if (queue.length) { 25813 drainQueue(); 25814 } 25815} 25816 25817function drainQueue() { 25818 if (draining) { 25819 return; 25820 } 25821 var timeout = runTimeout(cleanUpNextTick); 25822 draining = true; 25823 25824 var len = queue.length; 25825 while(len) { 25826 currentQueue = queue; 25827 queue = []; 25828 while (++queueIndex < len) { 25829 if (currentQueue) { 25830 currentQueue[queueIndex].run(); 25831 } 25832 } 25833 queueIndex = -1; 25834 len = queue.length; 25835 } 25836 currentQueue = null; 25837 draining = false; 25838 runClearTimeout(timeout); 25839} 25840 25841process.nextTick = function (fun) { 25842 var args = new Array(arguments.length - 1); 25843 if (arguments.length > 1) { 25844 for (var i = 1; i < arguments.length; i++) { 25845 args[i - 1] = arguments[i]; 25846 } 25847 } 25848 queue.push(new Item(fun, args)); 25849 if (queue.length === 1 && !draining) { 25850 runTimeout(drainQueue); 25851 } 25852}; 25853 25854// v8 likes predictible objects 25855function Item(fun, array) { 25856 this.fun = fun; 25857 this.array = array; 25858} 25859Item.prototype.run = function () { 25860 this.fun.apply(null, this.array); 25861}; 25862process.title = 'browser'; 25863process.browser = true; 25864process.env = {}; 25865process.argv = []; 25866process.version = ''; // empty string to avoid regexp issues 25867process.versions = {}; 25868 25869function noop() {} 25870 25871process.on = noop; 25872process.addListener = noop; 25873process.once = noop; 25874process.off = noop; 25875process.removeListener = noop; 25876process.removeAllListeners = noop; 25877process.emit = noop; 25878process.prependListener = noop; 25879process.prependOnceListener = noop; 25880 25881process.listeners = function (name) { return [] } 25882 25883process.binding = function (name) { 25884 throw new Error('process.binding is not supported'); 25885}; 25886 25887process.cwd = function () { return '/' }; 25888process.chdir = function (dir) { 25889 throw new Error('process.chdir is not supported'); 25890}; 25891process.umask = function() { return 0; }; 25892 25893},{}],138:[function(require,module,exports){ 25894(function (global, factory) { 25895 typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : 25896 typeof define === 'function' && define.amd ? define(factory) : 25897 (global.proj4 = factory()); 25898}(this, (function () { 'use strict'; 25899 25900 var globals = function(defs) { 25901 defs('EPSG:4326', "+title=WGS 84 (long/lat) +proj=longlat +ellps=WGS84 +datum=WGS84 +units=degrees"); 25902 defs('EPSG:4269', "+title=NAD83 (long/lat) +proj=longlat +a=6378137.0 +b=6356752.31414036 +ellps=GRS80 +datum=NAD83 +units=degrees"); 25903 defs('EPSG:3857', "+title=WGS 84 / Pseudo-Mercator +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs"); 25904 25905 defs.WGS84 = defs['EPSG:4326']; 25906 defs['EPSG:3785'] = defs['EPSG:3857']; // maintain backward compat, official code is 3857 25907 defs.GOOGLE = defs['EPSG:3857']; 25908 defs['EPSG:900913'] = defs['EPSG:3857']; 25909 defs['EPSG:102113'] = defs['EPSG:3857']; 25910 }; 25911 25912 var PJD_3PARAM = 1; 25913 var PJD_7PARAM = 2; 25914 var PJD_GRIDSHIFT = 3; 25915 var PJD_WGS84 = 4; // WGS84 or equivalent
25916 var PJD_NODATUM = 5; // WGS84 or equivalent 25917 var SRS_WGS84_SEMIMAJOR = 6378137.0; // only used in grid shift transforms 25918 var SRS_WGS84_SEMIMINOR = 6356752.314; // only used in grid shift transforms 25919 var SRS_WGS84_ESQUARED = 0.0066943799901413165; // only used in grid shift transforms 25920 var SEC_TO_RAD = 4.84813681109535993589914102357e-6; 25921 var HALF_PI = Math.PI/2; 25922 // ellipoid pj_set_ell.c 25923 var SIXTH = 0.1666666666666666667; 25924 /* 1/6 */ 25925 var RA4 = 0.04722222222222222222; 25926 /* 17/360 */ 25927 var RA6 = 0.02215608465608465608; 25928 var EPSLN = 1.0e-10; 25929 // you'd think you could use Number.EPSILON above but that makes 25930 // Mollweide get into an infinate loop. 25931 25932 var D2R = 0.01745329251994329577; 25933 var R2D = 57.29577951308232088; 25934 var FORTPI = Math.PI/4; 25935 var TWO_PI = Math.PI * 2; 25936 // SPI is slightly greater than Math.PI, so values that exceed the -180..180 25937 // degree range by a tiny amount don't get wrapped. This prevents points that 25938 // have drifted from their original location along the 180th meridian (due to 25939 // floating point error) from changing their sign. 25940 var SPI = 3.14159265359; 25941 25942 var exports$1 = {}; 25943 exports$1.greenwich = 0.0; //"0dE", 25944 exports$1.lisbon = -9.131906111111; //"9d07'54.862\"W", 25945 exports$1.paris = 2.337229166667; //"2d20'14.025\"E", 25946 exports$1.bogota = -74.080916666667; //"74d04'51.3\"W", 25947 exports$1.madrid = -3.687938888889; //"3d41'16.58\"W", 25948 exports$1.rome = 12.452333333333; //"12d27'8.4\"E", 25949 exports$1.bern = 7.439583333333; //"7d26'22.5\"E", 25950 exports$1.jakarta = 106.807719444444; //"106d48'27.79\"E", 25951 exports$1.ferro = -17.666666666667; //"17d40'W", 25952 exports$1.brussels = 4.367975; //"4d22'4.71\"E", 25953 exports$1.stockholm = 18.058277777778; //"18d3'29.8\"E", 25954 exports$1.athens = 23.7163375; //"23d42'58.815\"E", 25955 exports$1.oslo = 10.722916666667; //"10d43'22.5\"E" 25956 25957 var units = { 25958 ft: {to_meter: 0.3048}, 25959 'us-ft': {to_meter: 1200 / 3937} 25960 }; 25961 25962 var ignoredChar = /[\s_\-\/\(\)]/g; 25963 function match(obj, key) { 25964 if (obj[key]) { 25965 return obj[key]; 25966 } 25967 var keys = Object.keys(obj); 25968 var lkey = key.toLowerCase().replace(ignoredChar, ''); 25969 var i = -1; 25970 var testkey, processedKey; 25971 while (++i < keys.length) { 25972 testkey = keys[i]; 25973 processedKey = testkey.toLowerCase().replace(ignoredChar, ''); 25974 if (processedKey === lkey) { 25975 return obj[testkey]; 25976 } 25977 } 25978 } 25979 25980 var parseProj = function(defData) { 25981 var self = {}; 25982 var paramObj = defData.split('+').map(function(v) { 25983 return v.trim(); 25984 }).filter(function(a) { 25985 return a; 25986 }).reduce(function(p, a) { 25987 var split = a.split('='); 25988 split.push(true); 25989 p[split[0].toLowerCase()] = split[1]; 25990 return p; 25991 }, {}); 25992 var paramName, paramVal, paramOutname; 25993 var params = { 25994 proj: 'projName', 25995 datum: 'datumCode', 25996 rf: function(v) { 25997 self.rf = parseFloat(v); 25998 }, 25999 lat_0: function(v) { 26000 self.lat0 = v * D2R; 26001 }, 26002 lat_1: function(v) { 26003 self.lat1 = v * D2R; 26004 }, 26005 lat_2: function(v) { 26006 self.lat2 = v * D2R; 26007 }, 26008 lat_ts: function(v) { 26009 self.lat_ts = v * D2R; 26010 }, 26011 lon_0: function(v) { 26012 self.long0 = v * D2R; 26013 }, 26014 lon_1: function(v) { 26015 self.long1 = v * D2R; 26016 }, 26017 lon_2: function(v) { 26018 self.long2 = v * D2R; 26019 }, 26020 alpha: function(v) { 26021 self.alpha = parseFloat(v) * D2R; 26022 }, 26023 gamma: function(v) { 26024 self.rectified_grid_angle = parseFloat(v); 26025 }, 26026 lonc: function(v) { 26027 self.longc = v * D2R; 26028 }, 26029 x_0: function(v) { 26030 self.x0 = parseFloat(v); 26031 }, 26032 y_0: function(v) { 26033 self.y0 = parseFloat(v); 26034 }, 26035 k_0: function(v) { 26036 self.k0 = parseFloat(v); 26037 }, 26038 k: function(v) { 26039 self.k0 = parseFloat(v); 26040 }, 26041 a: function(v) { 26042 self.a = parseFloat(v); 26043 }, 26044 b: function(v) { 26045 self.b = parseFloat(v); 26046 }, 26047 r: function(v) { 26048 self.a = self.b = parseFloat(v); 26049 }, 26050 r_a: function() { 26051 self.R_A = true; 26052 }, 26053 zone: function(v) { 26054 self.zone = parseInt(v, 10); 26055 }, 26056 south: function() { 26057 self.utmSouth = true; 26058 }, 26059 towgs84: function(v) { 26060 self.datum_params = v.split(",").map(function(a) { 26061 return parseFloat(a); 26062 }); 26063 }, 26064 to_meter: function(v) { 26065 self.to_meter = parseFloat(v); 26066 }, 26067 units: function(v) { 26068 self.units = v; 26069 var unit = match(units, v); 26070 if (unit) { 26071 self.to_meter = unit.to_meter; 26072 } 26073 }, 26074 from_greenwich: function(v) { 26075 self.from_greenwich = v * D2R; 26076 }, 26077 pm: function(v) { 26078 var pm = match(exports$1, v); 26079 self.from_greenwich = (pm ? pm : parseFloat(v)) * D2R; 26080 }, 26081 nadgrids: function(v) { 26082 if (v === '@null') { 26083 self.datumCode = 'none'; 26084 } 26085 else {
26086 self.nadgrids = v; 26087 } 26088 }, 26089 axis: function(v) { 26090 var legalAxis = "ewnsud"; 26091 if (v.length === 3 && legalAxis.indexOf(v.substr(0, 1)) !== -1 && legalAxis.indexOf(v.substr(1, 1)) !== -1 && legalAxis.indexOf(v.substr(2, 1)) !== -1) { 26092 self.axis = v; 26093 } 26094 }, 26095 approx: function() { 26096 self.approx = true; 26097 } 26098 }; 26099 for (paramName in paramObj) { 26100 paramVal = paramObj[paramName]; 26101 if (paramName in params) { 26102 paramOutname = params[paramName]; 26103 if (typeof paramOutname === 'function') { 26104 paramOutname(paramVal); 26105 } 26106 else { 26107 self[paramOutname] = paramVal; 26108 } 26109 } 26110 else { 26111 self[paramName] = paramVal; 26112 } 26113 } 26114 if(typeof self.datumCode === 'string' && self.datumCode !== "WGS84"){ 26115 self.datumCode = self.datumCode.toLowerCase(); 26116 } 26117 return self; 26118 }; 26119 26120 var NEUTRAL = 1; 26121 var KEYWORD = 2; 26122 var NUMBER = 3; 26123 var QUOTED = 4; 26124 var AFTERQUOTE = 5; 26125 var ENDED = -1; 26126 var whitespace = /\s/; 26127 var latin = /[A-Za-z]/; 26128 var keyword = /[A-Za-z84_]/; 26129 var endThings = /[,\]]/; 26130 var digets = /[\d\.E\-\+]/; 26131 // const ignoredChar = /[\s_\-\/\(\)]/g; 26132 function Parser(text) { 26133 if (typeof text !== 'string') { 26134 throw new Error('not a string'); 26135 } 26136 this.text = text.trim(); 26137 this.level = 0; 26138 this.place = 0; 26139 this.root = null; 26140 this.stack = []; 26141 this.currentObject = null; 26142 this.state = NEUTRAL; 26143 } 26144 Parser.prototype.readCharicter = function() { 26145 var char = this.text[this.place++]; 26146 if (this.state !== QUOTED) { 26147 while (whitespace.test(char)) { 26148 if (this.place >= this.text.length) { 26149 return; 26150 } 26151 char = this.text[this.place++]; 26152 } 26153 } 26154 switch (this.state) { 26155 case NEUTRAL: 26156 return this.neutral(char); 26157 case KEYWORD: 26158 return this.keyword(char) 26159 case QUOTED: 26160 return this.quoted(char); 26161 case AFTERQUOTE: 26162 return this.afterquote(char); 26163 case NUMBER: 26164 return this.number(char); 26165 case ENDED: 26166 return; 26167 } 26168 }; 26169 Parser.prototype.afterquote = function(char) { 26170 if (char === '"') { 26171 this.word += '"'; 26172 this.state = QUOTED; 26173 return; 26174 } 26175 if (endThings.test(char)) { 26176 this.word = this.word.trim(); 26177 this.afterItem(char); 26178 return; 26179 } 26180 throw new Error('havn\'t handled "' +char + '" in afterquote yet, index ' + this.place); 26181 }; 26182 Parser.prototype.afterItem = function(char) { 26183 if (char === ',') { 26184 if (this.word !== null) { 26185 this.currentObject.push(this.word); 26186 } 26187 this.word = null; 26188 this.state = NEUTRAL; 26189 return; 26190 } 26191 if (char === ']') { 26192 this.level--; 26193 if (this.word !== null) { 26194 this.currentObject.push(this.word); 26195 this.word = null; 26196 } 26197 this.state = NEUTRAL; 26198 this.currentObject = this.stack.pop(); 26199 if (!this.currentObject) { 26200 this.state = ENDED; 26201 } 26202 26203 return; 26204 } 26205 }; 26206 Parser.prototype.number = function(char) { 26207 if (digets.test(char)) { 26208 this.word += char; 26209 return; 26210 } 26211 if (endThings.test(char)) { 26212 this.word = parseFloat(this.word); 26213 this.afterItem(char); 26214 return; 26215 } 26216 throw new Error('havn\'t handled "' +char + '" in number yet, index ' + this.place); 26217 }; 26218 Parser.prototype.quoted = function(char) { 26219 if (char === '"') { 26220 this.state = AFTERQUOTE; 26221 return; 26222 } 26223 this.word += char; 26224 return; 26225 }; 26226 Parser.prototype.keyword = function(char) { 26227 if (keyword.test(char)) { 26228 this.word += char; 26229 return; 26230 } 26231 if (char === '[') { 26232 var newObjects = []; 26233 newObjects.push(this.word); 26234 this.level++; 26235 if (this.root === null) { 26236 this.root = newObjects; 26237 } else { 26238 this.currentObject.push(newObjects); 26239 } 26240 this.stack.push(this.currentObject); 26241 this.currentObject = newObjects; 26242 this.state = NEUTRAL; 26243 return; 26244 } 26245 if (endThings.test(char)) { 26246 this.afterItem(char); 26247 return; 26248 } 26249 throw new Error('havn\'t handled "' +char + '" in keyword yet, index ' + this.place); 26250 };
26251 Parser.prototype.neutral = function(char) { 26252 if (latin.test(char)) { 26253 this.word = char; 26254 this.state = KEYWORD; 26255 return; 26256 } 26257 if (char === '"') { 26258 this.word = ''; 26259 this.state = QUOTED; 26260 return; 26261 } 26262 if (digets.test(char)) { 26263 this.word = char; 26264 this.state = NUMBER; 26265 return; 26266 } 26267 if (endThings.test(char)) { 26268 this.afterItem(char); 26269 return; 26270 } 26271 throw new Error('havn\'t handled "' +char + '" in neutral yet, index ' + this.place); 26272 }; 26273 Parser.prototype.output = function() { 26274 while (this.place < this.text.length) { 26275 this.readCharicter(); 26276 } 26277 if (this.state === ENDED) { 26278 return this.root; 26279 } 26280 throw new Error('unable to parse string "' +this.text + '". State is ' + this.state); 26281 }; 26282 26283 function parseString(txt) { 26284 var parser = new Parser(txt); 26285 return parser.output(); 26286 } 26287 26288 function mapit(obj, key, value) { 26289 if (Array.isArray(key)) { 26290 value.unshift(key); 26291 key = null; 26292 } 26293 var thing = key ? {} : obj; 26294 26295 var out = value.reduce(function(newObj, item) { 26296 sExpr(item, newObj); 26297 return newObj 26298 }, thing); 26299 if (key) { 26300 obj[key] = out; 26301 } 26302 } 26303 26304 function sExpr(v, obj) { 26305 if (!Array.isArray(v)) { 26306 obj[v] = true; 26307 return; 26308 } 26309 var key = v.shift(); 26310 if (key === 'PARAMETER') { 26311 key = v.shift(); 26312 } 26313 if (v.length === 1) { 26314 if (Array.isArray(v[0])) { 26315 obj[key] = {}; 26316 sExpr(v[0], obj[key]); 26317 return; 26318 } 26319 obj[key] = v[0]; 26320 return; 26321 } 26322 if (!v.length) { 26323 obj[key] = true; 26324 return; 26325 } 26326 if (key === 'TOWGS84') { 26327 obj[key] = v; 26328 return; 26329 } 26330 if (key === 'AXIS') { 26331 if (!(key in obj)) { 26332 obj[key] = []; 26333 } 26334 obj[key].push(v); 26335 return; 26336 } 26337 if (!Array.isArray(key)) { 26338 obj[key] = {}; 26339 } 26340 26341 var i; 26342 switch (key) { 26343 case 'UNIT': 26344 case 'PRIMEM': 26345 case 'VERT_DATUM': 26346 obj[key] = { 26347 name: v[0].toLowerCase(), 26348 convert: v[1] 26349 }; 26350 if (v.length === 3) { 26351 sExpr(v[2], obj[key]); 26352 } 26353 return; 26354 case 'SPHEROID': 26355 case 'ELLIPSOID': 26356 obj[key] = { 26357 name: v[0], 26358 a: v[1], 26359 rf: v[2] 26360 }; 26361 if (v.length === 4) { 26362 sExpr(v[3], obj[key]); 26363 } 26364 return; 26365 case 'PROJECTEDCRS': 26366 case 'PROJCRS': 26367 case 'GEOGCS': 26368 case 'GEOCCS': 26369 case 'PROJCS': 26370 case 'LOCAL_CS': 26371 case 'GEODCRS': 26372 case 'GEODETICCRS': 26373 case 'GEODETICDATUM': 26374 case 'EDATUM': 26375 case 'ENGINEERINGDATUM': 26376 case 'VERT_CS': 26377 case 'VERTCRS': 26378 case 'VERTICALCRS': 26379 case 'COMPD_CS': 26380 case 'COMPOUNDCRS': 26381 case 'ENGINEERINGCRS': 26382 case 'ENGCRS': 26383 case 'FITTED_CS': 26384 case 'LOCAL_DATUM': 26385 case 'DATUM': 26386 v[0] = ['name', v[0]]; 26387 mapit(obj, key, v); 26388 return; 26389 default: 26390 i = -1; 26391 while (++i < v.length) { 26392 if (!Array.isArray(v[i])) { 26393 return sExpr(v, obj[key]); 26394 } 26395 } 26396 return mapit(obj, key, v); 26397 } 26398 } 26399 26400 var D2R$1 = 0.01745329251994329577; 26401 function rename(obj, params) { 26402 var outName = params[0]; 26403 var inName = params[1]; 26404 if (!(outName in obj) && (inName in obj)) { 26405 obj[outName] = obj[inName]; 26406 if (params.length === 3) { 26407 obj[outName] = params[2](obj[outName]); 26408 } 26409 } 26410 } 26411 26412 function d2r(input) { 26413 return input * D2R$1; 26414 } 26415 26416 function cleanWKT(wkt) { 26417 if (wkt.type === 'GEOGCS') { 26418 wkt.projName = 'longlat'; 26419 } else if (wkt.type === 'LOCAL_CS') { 26420 wkt.projName = 'identity'; 26421 wkt.local = true; 26422 } else { 26423 if (typeof wkt.PROJECTION === 'object') { 26424 wkt.projName = Object.keys(wkt.PROJECTION)[0]; 26425 } else { 26426 wkt.projName = wkt.PROJECTION; 26427 } 26428 } 26429 if (wkt.AXIS) { 26430 var axisOrder = ''; 26431 for (var i = 0, ii = wkt.AXIS.length; i < ii; ++i) { 26432 var axis = [wkt.AXIS[i][0].toLowerCase(), wkt.AXIS[i][1].toLowerCase()]; 26433 if (axis[0].indexOf('north') !== -1 || ((axis[0] === 'y' || axis[0] === 'lat') && axis[1] === 'north')) { 26434 axisOrder += 'n'; 26435 } else if (axis[0].indexOf('south') !== -1 || ((axis[0] === 'y' || axis[0] === 'lat') && axis[1] === 'south')) { 26436 axisOrder += 's'; 26437 } else if (axis[0].indexOf('east') !== -1 || ((axis[0] === 'x' || axis[0] === 'lon') && axis[1] === 'east')) { 26438 axisOrder += 'e'; 26439 } else if (axis[0].indexOf('west') !== -1 || ((axis[0] === 'x' || axis[0] === 'lon') && axis[1] === 'west')) { 26440 axisOrder += 'w'; 26441 } 26442 } 26443 if (axisOrder.length === 2) { 26444 axisOrder += 'u'; 26445 } 26446 if (axisOrder.length === 3) { 26447 wkt.axis = axisOrder; 26448 } 26449 } 26450 if (wkt.UNIT) { 26451 wkt.units = wkt.UNIT.name.toLowerCase(); 26452 if (wkt.units === 'metre') { 26453 wkt.units = 'meter'; 26454 } 26455 if (wkt.UNIT.convert) { 26456 if (wkt.type === 'GEOGCS') { 26457 if (wkt.DATUM && wkt.DATUM.SPHEROID) { 26458 wkt.to_meter = wkt.UNIT.convert*wkt.DATUM.SPHEROID.a; 26459 } 26460 } else { 26461 wkt.to_meter = wkt.UNIT.convert; 26462 } 26463 } 26464 } 26465 var geogcs = wkt.GEOGCS; 26466 if (wkt.type === 'GEOGCS') { 26467 geogcs = wkt; 26468 } 26469 if (geogcs) { 26470 //if(wkt.GEOGCS.PRIMEM&&wkt.GEOGCS.PRIMEM.convert){ 26471 // wkt.from_greenwich=wkt.GEOGCS.PRIMEM.convert*D2R; 26472 //} 26473 if (geogcs.DATUM) { 26474 wkt.datumCode = geogcs.DATUM.name.toLowerCase(); 26475 } else { 26476 wkt.datumCode = geogcs.name.toLowerCase(); 26477 } 26478 if (wkt.datumCode.slice(0, 2) === 'd_') { 26479 wkt.datumCode = wkt.datumCode.slice(2); 26480 } 26481 if (wkt.datumCode === 'new_zealand_geodetic_datum_1949' || wkt.datumCode === 'new_zealand_1949') { 26482 wkt.datumCode = 'nzgd49'; 26483 } 26484 if (wkt.datumCode === 'wgs_1984' || wkt.datumCode === 'world_geodetic_system_1984') { 26485 if (wkt.PROJECTION === 'Mercator_Auxiliary_Sphere') { 26486 wkt.sphere = true; 26487 } 26488 wkt.datumCode = 'wgs84'; 26489 } 26490 if (wkt.datumCode.slice(-6) === '_ferro') { 26491 wkt.datumCode = wkt.datumCode.slice(0, - 6); 26492 } 26493 if (wkt.datumCode.slice(-8) === '_jakarta') { 26494 wkt.datumCode = wkt.datumCode.slice(0, - 8); 26495 } 26496 if (~wkt.datumCode.indexOf('belge')) { 26497 wkt.datumCode = 'rnb72'; 26498 } 26499 if (geogcs.DATUM && geogcs.DATUM.SPHEROID) { 26500 wkt.ellps = geogcs.DATUM.SPHEROID.name.replace('_19', '').replace(/[Cc]larke\_18/, 'clrk'); 26501 if (wkt.ellps.toLowerCase().slice(0, 13) === 'international') { 26502 wkt.ellps = 'intl'; 26503 } 26504 26505 wkt.a = geogcs.DATUM.SPHEROID.a; 26506 wkt.rf = parseFloat(geogcs.DATUM.SPHEROID.rf, 10); 26507 } 26508 26509 if (geogcs.DATUM && geogcs.DATUM.TOWGS84) { 26510 wkt.datum_params = geogcs.DATUM.TOWGS84; 26511 } 26512 if (~wkt.datumCode.indexOf('osgb_1936')) { 26513 wkt.datumCode = 'osgb36'; 26514 } 26515 if (~wkt.datumCode.indexOf('osni_1952')) { 26516 wkt.datumCode = 'osni52'; 26517 } 26518 if (~wkt.datumCode.indexOf('tm65') 26519 || ~wkt.datumCode.indexOf('geodetic_datum_of_1965')) { 26520 wkt.datumCode = 'ire65'; 26521 } 26522 if (wkt.datumCode === 'ch1903+') { 26523 wkt.datumCode = 'ch1903'; 26524 } 26525 if (~wkt.datumCode.indexOf('israel')) { 26526 wkt.datumCode = 'isr93'; 26527 } 26528 } 26529 if (wkt.b && !isFinite(wkt.b)) { 26530 wkt.b = wkt.a; 26531 } 26532 26533 function toMeter(input) { 26534 var ratio = wkt.to_meter || 1; 26535 return input * ratio; 26536 } 26537 var renamer = function(a) { 26538 return rename(wkt, a); 26539 }; 26540 var list = [ 26541 ['standard_parallel_1', 'Standard_Parallel_1'], 26542 ['standard_parallel_1', 'Latitude of 1st standard parallel'], 26543 ['standard_parallel_2', 'Standard_Parallel_2'], 26544 ['standard_parallel_2', 'Latitude of 2nd standard parallel'], 26545 ['false_easting', 'False_Easting'], 26546 ['false_easting', 'False easting'], 26547 ['false-easting', 'Easting at false origin'], 26548 ['false_northing', 'False_Northing'], 26549 ['false_northing', 'False northing'], 26550 ['false_northing', 'Northing at false origin'], 26551 ['central_meridian', 'Central_Meridian'], 26552 ['central_meridian', 'Longitude of natural origin'], 26553 ['central_meridian', 'Longitude of false origin'], 26554 ['latitude_of_origin', 'Latitude_Of_Origin'], 26555 ['latitude_of_origin', 'Central_Parallel'], 26556 ['latitude_of_origin', 'Latitude of natural origin'], 26557 ['latitude_of_origin', 'Latitude of false origin'], 26558 ['scale_factor', 'Scale_Factor'], 26559 ['k0', 'scale_factor'], 26560 ['latitude_of_center', 'Latitude_Of_Center'], 26561 ['latitude_of_center', 'Latitude_of_center'], 26562 ['lat0', 'latitude_of_center', d2r], 26563 ['longitude_of_center', 'Longitude_Of_Center'], 26564 ['longitude_of_center', 'Longitude_of_center'], 26565 ['longc', 'longitude_of_center', d2r], 26566 ['x0', 'false_easting', toMeter], 26567 ['y0', 'false_northing', toMeter], 26568 ['long0', 'central_meridian', d2r], 26569 ['lat0', 'latitude_of_origin', d2r], 26570 ['lat0', 'standard_parallel_1', d2r], 26571 ['lat1', 'standard_parallel_1', d2r], 26572 ['lat2', 'standard_parallel_2', d2r], 26573 ['azimuth', 'Azimuth'], 26574 ['alpha', 'azimuth', d2r], 26575 ['srsCode', 'name'] 26576 ]; 26577 list.forEach(renamer); 26578 if (!wkt.long0 && wkt.longc && (wkt.projName === 'Albers_Conic_Equal_Area' || wkt.projName === 'Lambert_Azimuthal_Equal_Area')) { 26579 wkt.long0 = wkt.longc; 26580 } 26581 if (!wkt.lat_ts && wkt.lat1 && (wkt.projName === 'Stereographic_South_Pole' || wkt.projName === 'Polar Stereographic (variant B)')) { 26582 wkt.lat0 = d2r(wkt.lat1 > 0 ? 90 : -90); 26583 wkt.lat_ts = wkt.lat1; 26584 } else if (!wkt.lat_ts && wkt.lat0 && wkt.projName === 'Polar_Stereographic') { 26585 wkt.lat_ts = wkt.lat0; 26586 wkt.lat0 = d2r(wkt.lat0 > 0 ? 90 : -90); 26587 } 26588 } 26589 var wkt = function(wkt) { 26590 var lisp = parseString(wkt); 26591 var type = lisp.shift(); 26592 var name = lisp.shift(); 26593 lisp.unshift(['name', name]); 26594 lisp.unshift(['type', type]); 26595 var obj = {}; 26596 sExpr(lisp, obj); 26597 cleanWKT(obj); 26598 return obj; 26599 }; 26600 26601 function defs(name) { 26602 /*global console*/ 26603 var that = this; 26604 if (arguments.length === 2) { 26605 var def = arguments[1]; 26606 if (typeof def === 'string') { 26607 if (def.charAt(0) === '+') { 26608 defs[name] = parseProj(arguments[1]); 26609 } 26610 else { 26611 defs[name] = wkt(arguments[1]); 26612 } 26613 } else { 26614 defs[name] = def; 26615 } 26616 } 26617 else if (arguments.length === 1) { 26618 if (Array.isArray(name)) { 26619 return name.map(function(v) { 26620 if (Array.isArray(v)) { 26621 defs.apply(that, v); 26622 } 26623 else { 26624 defs(v); 26625 } 26626 }); 26627 } 26628 else if (typeof name === 'string') { 26629 if (name in defs) { 26630 return defs[name]; 26631 } 26632 } 26633 else if ('EPSG' in name) { 26634 defs['EPSG:' + name.EPSG] = name; 26635 } 26636 else if ('ESRI' in name) {
26637 defs['ESRI:' + name.ESRI] = name; 26638 } 26639 else if ('IAU2000' in name) { 26640 defs['IAU2000:' + name.IAU2000] = name; 26641 } 26642 else { 26643 console.log(name); 26644 } 26645 return; 26646 } 26647 26648 26649 } 26650 globals(defs); 26651 26652 function testObj(code){ 26653 return typeof code === 'string'; 26654 } 26655 function testDef(code){ 26656 return code in defs; 26657 } 26658 var codeWords = ['PROJECTEDCRS', 'PROJCRS', 'GEOGCS','GEOCCS','PROJCS','LOCAL_CS', 'GEODCRS', 'GEODETICCRS', 'GEODETICDATUM', 'ENGCRS', 'ENGINEERINGCRS']; 26659 function testWKT(code){ 26660 return codeWords.some(function (word) { 26661 return code.indexOf(word) > -1; 26662 }); 26663 } 26664 var codes = ['3857', '900913', '3785', '102113']; 26665 function checkMercator(item) { 26666 var auth = match(item, 'authority'); 26667 if (!auth) { 26668 return; 26669 } 26670 var code = match(auth, 'epsg'); 26671 return code && codes.indexOf(code) > -1; 26672 } 26673 function checkProjStr(item) { 26674 var ext = match(item, 'extension'); 26675 if (!ext) { 26676 return; 26677 } 26678 return match(ext, 'proj4'); 26679 } 26680 function testProj(code){ 26681 return code[0] === '+'; 26682 } 26683 function parse(code){ 26684 if (testObj(code)) { 26685 //check to see if this is a WKT string 26686 if (testDef(code)) { 26687 return defs[code]; 26688 } 26689 if (testWKT(code)) { 26690 var out = wkt(code); 26691 // test of spetial case, due to this being a very common and often malformed 26692 if (checkMercator(out)) { 26693 return defs['EPSG:3857']; 26694 } 26695 var maybeProjStr = checkProjStr(out); 26696 if (maybeProjStr) { 26697 return parseProj(maybeProjStr); 26698 } 26699 return out; 26700 } 26701 if (testProj(code)) { 26702 return parseProj(code); 26703 } 26704 }else{ 26705 return code; 26706 } 26707 } 26708 26709 var extend = function(destination, source) { 26710 destination = destination || {}; 26711 var value, property; 26712 if (!source) { 26713 return destination; 26714 } 26715 for (property in source) { 26716 value = source[property]; 26717 if (value !== undefined) { 26718 destination[property] = value; 26719 } 26720 } 26721 return destination; 26722 }; 26723 26724 var msfnz = function(eccent, sinphi, cosphi) { 26725 var con = eccent * sinphi; 26726 return cosphi / (Math.sqrt(1 - con * con)); 26727 }; 26728 26729 var sign = function(x) { 26730 return x<0 ? -1 : 1; 26731 }; 26732 26733 var adjust_lon = function(x) { 26734 return (Math.abs(x) <= SPI) ? x : (x - (sign(x) * TWO_PI)); 26735 }; 26736 26737 var tsfnz = function(eccent, phi, sinphi) { 26738 var con = eccent * sinphi; 26739 var com = 0.5 * eccent; 26740 con = Math.pow(((1 - con) / (1 + con)), com); 26741 return (Math.tan(0.5 * (HALF_PI - phi)) / con); 26742 }; 26743 26744 var phi2z = function(eccent, ts) { 26745 var eccnth = 0.5 * eccent; 26746 var con, dphi; 26747 var phi = HALF_PI - 2 * Math.atan(ts); 26748 for (var i = 0; i <= 15; i++) { 26749 con = eccent * Math.sin(phi); 26750 dphi = HALF_PI - 2 * Math.atan(ts * (Math.pow(((1 - con) / (1 + con)), eccnth))) - phi; 26751 phi += dphi; 26752 if (Math.abs(dphi) <= 0.0000000001) { 26753 return phi; 26754 } 26755 } 26756 //console.log("phi2z has NoConvergence"); 26757 return -9999; 26758 }; 26759 26760 function init() { 26761 var con = this.b / this.a; 26762 this.es = 1 - con * con; 26763 if(!('x0' in this)){ 26764 this.x0 = 0; 26765 } 26766 if(!('y0' in this)){ 26767 this.y0 = 0; 26768 } 26769 this.e = Math.sqrt(this.es); 26770 if (this.lat_ts) { 26771 if (this.sphere) { 26772 this.k0 = Math.cos(this.lat_ts); 26773 } 26774 else { 26775 this.k0 = msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts)); 26776 } 26777 } 26778 else { 26779 if (!this.k0) { 26780 if (this.k) { 26781 this.k0 = this.k; 26782 } 26783 else { 26784 this.k0 = 1; 26785 } 26786 } 26787 } 26788 } 26789 26790 /* Mercator forward equations--mapping lat,long to x,y 26791 --------------------------------------------------*/ 26792 26793 function forward(p) { 26794 var lon = p.x; 26795 var lat = p.y; 26796 // convert to radians 26797 if (lat * R2D > 90 && lat * R2D < -90 && lon * R2D > 180 && lon * R2D < -180) { 26798 return null; 26799 } 26800 26801 var x, y; 26802 if (Math.abs(Math.abs(lat) - HALF_PI) <= EPSLN) { 26803 return null; 26804 } 26805 else { 26806 if (this.sphere) { 26807 x = this.x0 + this.a * this.k0 * adjust_lon(lon - this.long0); 26808 y = this.y0 + this.a * this.k0 * Math.log(Math.tan(FORTPI + 0.5 * lat)); 26809 } 26810 else { 26811 var sinphi = Math.sin(lat); 26812 var ts = tsfnz(this.e, lat, sinphi); 26813 x = this.x0 + this.a * this.k0 * adjust_lon(lon - this.long0); 26814 y = this.y0 - this.a * this.k0 * Math.log(ts); 26815 } 26816 p.x = x; 26817 p.y = y; 26818 return p; 26819 } 26820 } 26821 26822 /* Mercator inverse equations--mapping x,y to lat/long 26823 --------------------------------------------------*/ 26824 function inverse(p) { 26825 26826 var x = p.x - this.x0; 26827 var y = p.y - this.y0; 26828 var lon, lat; 26829 26830 if (this.sphere) { 26831 lat = HALF_PI - 2 * Math.atan(Math.exp(-y / (this.a * this.k0))); 26832 } 26833 else { 26834 var ts = Math.exp(-y / (this.a * this.k0)); 26835 lat = phi2z(this.e, ts); 26836 if (lat === -9999) { 26837 return null; 26838 } 26839 } 26840 lon = adjust_lon(this.long0 + x / (this.a * this.k0)); 26841 26842 p.x = lon; 26843 p.y = lat; 26844 return p; 26845 } 26846 26847 var names$1 = ["Mercator", "Popular Visualisation Pseudo Mercator", "Mercator_1SP", "Mercator_Auxiliary_Sphere", "merc"]; 26848 var merc = { 26849 init: init, 26850 forward: forward, 26851 inverse: inverse, 26852 names: names$1 26853 }; 26854 26855 function init$1() { 26856 //no-op for longlat 26857 } 26858 26859 function identity(pt) { 26860 return pt; 26861 } 26862 var names$2 = ["longlat", "identity"]; 26863 var longlat = { 26864 init: init$1, 26865 forward: identity, 26866 inverse: identity, 26867 names: names$2 26868 }; 26869 26870 var projs = [merc, longlat]; 26871 var names = {}; 26872 var projStore = []; 26873 26874 function add(proj, i) { 26875 var len = projStore.length; 26876 if (!proj.names) { 26877 console.log(i); 26878 return true; 26879 } 26880 projStore[len] = proj;
26881 proj.names.forEach(function(n) { 26882 names[n.toLowerCase()] = len; 26883 }); 26884 return this; 26885 } 26886 26887 function get(name) { 26888 if (!name) { 26889 return false; 26890 } 26891 var n = name.toLowerCase(); 26892 if (typeof names[n] !== 'undefined' && projStore[names[n]]) { 26893 return projStore[names[n]]; 26894 } 26895 } 26896 26897 function start() { 26898 projs.forEach(add); 26899 } 26900 var projections = { 26901 start: start, 26902 add: add, 26903 get: get 26904 }; 26905 26906 var exports$2 = {}; 26907 exports$2.MERIT = { 26908 a: 6378137.0, 26909 rf: 298.257, 26910 ellipseName: "MERIT 1983" 26911 }; 26912 26913 exports$2.SGS85 = { 26914 a: 6378136.0, 26915 rf: 298.257, 26916 ellipseName: "Soviet Geodetic System 85" 26917 }; 26918 26919 exports$2.GRS80 = { 26920 a: 6378137.0, 26921 rf: 298.257222101, 26922 ellipseName: "GRS 1980(IUGG, 1980)" 26923 }; 26924 26925 exports$2.IAU76 = { 26926 a: 6378140.0, 26927 rf: 298.257, 26928 ellipseName: "IAU 1976" 26929 }; 26930 26931 exports$2.airy = { 26932 a: 6377563.396, 26933 b: 6356256.910, 26934 ellipseName: "Airy 1830" 26935 }; 26936 26937 exports$2.APL4 = { 26938 a: 6378137, 26939 rf: 298.25, 26940 ellipseName: "Appl. Physics. 1965" 26941 }; 26942 26943 exports$2.NWL9D = { 26944 a: 6378145.0, 26945 rf: 298.25, 26946 ellipseName: "Naval Weapons Lab., 1965" 26947 }; 26948 26949 exports$2.mod_airy = { 26950 a: 6377340.189, 26951 b: 6356034.446, 26952 ellipseName: "Modified Airy" 26953 }; 26954 26955 exports$2.andrae = { 26956 a: 6377104.43, 26957 rf: 300.0, 26958 ellipseName: "Andrae 1876 (Den., Iclnd.)" 26959 }; 26960 26961 exports$2.aust_SA = { 26962 a: 6378160.0, 26963 rf: 298.25, 26964 ellipseName: "Australian Natl & S. Amer. 1969" 26965 }; 26966 26967 exports$2.GRS67 = { 26968 a: 6378160.0, 26969 rf: 298.2471674270, 26970 ellipseName: "GRS 67(IUGG 1967)" 26971 }; 26972 26973 exports$2.bessel = { 26974 a: 6377397.155, 26975 rf: 299.1528128, 26976 ellipseName: "Bessel 1841" 26977 }; 26978 26979 exports$2.bess_nam = { 26980 a: 6377483.865, 26981 rf: 299.1528128, 26982 ellipseName: "Bessel 1841 (Namibia)" 26983 }; 26984 26985 exports$2.clrk66 = { 26986 a: 6378206.4, 26987 b: 6356583.8, 26988 ellipseName: "Clarke 1866" 26989 }; 26990 26991 exports$2.clrk80 = { 26992 a: 6378249.145, 26993 rf: 293.4663, 26994 ellipseName: "Clarke 1880 mod." 26995 }; 26996 26997 exports$2.clrk80ign = { 26998 a: 6378249.2, 26999 b: 6356515, 27000 rf: 293.4660213, 27001 ellipseName: "Clarke 1880 (IGN)" 27002 }; 27003 27004 exports$2.clrk58 = { 27005 a: 6378293.645208759, 27006 rf: 294.2606763692654, 27007 ellipseName: "Clarke 1858" 27008 }; 27009 27010 exports$2.CPM = { 27011 a: 6375738.7, 27012 rf: 334.29, 27013 ellipseName: "Comm. des Poids et Mesures 1799" 27014 }; 27015 27016 exports$2.delmbr = { 27017 a: 6376428.0, 27018 rf: 311.5, 27019 ellipseName: "Delambre 1810 (Belgium)" 27020 }; 27021 27022 exports$2.engelis = { 27023 a: 6378136.05, 27024 rf: 298.2566, 27025 ellipseName: "Engelis 1985" 27026 }; 27027 27028 exports$2.evrst30 = { 27029 a: 6377276.345, 27030 rf: 300.8017, 27031 ellipseName: "Everest 1830" 27032 }; 27033 27034 exports$2.evrst48 = { 27035 a: 6377304.063, 27036 rf: 300.8017, 27037 ellipseName: "Everest 1948" 27038 }; 27039 27040 exports$2.evrst56 = { 27041 a: 6377301.243, 27042 rf: 300.8017, 27043 ellipseName: "Everest 1956" 27044 }; 27045 27046 exports$2.evrst69 = { 27047 a: 6377295.664, 27048 rf: 300.8017, 27049 ellipseName: "Everest 1969" 27050 }; 27051 27052 exports$2.evrstSS = { 27053 a: 6377298.556, 27054 rf: 300.8017, 27055 ellipseName: "Everest (Sabah & Sarawak)" 27056 }; 27057 27058 exports$2.fschr60 = { 27059 a: 6378166.0, 27060 rf: 298.3, 27061 ellipseName: "Fischer (Mercury Datum) 1960" 27062 }; 27063 27064 exports$2.fschr60m = { 27065 a: 6378155.0, 27066 rf: 298.3, 27067 ellipseName: "Fischer 1960" 27068 }; 27069 27070 exports$2.fschr68 = { 27071 a: 6378150.0, 27072 rf: 298.3, 27073 ellipseName: "Fischer 1968" 27074 }; 27075 27076 exports$2.helmert = { 27077 a: 6378200.0, 27078 rf: 298.3, 27079 ellipseName: "Helmert 1906" 27080 }; 27081 27082 exports$2.hough = { 27083 a: 6378270.0, 27084 rf: 297.0, 27085 ellipseName: "Hough" 27086 }; 27087 27088 exports$2.intl = { 27089 a: 6378388.0, 27090 rf: 297.0, 27091 ellipseName: "International 1909 (Hayford)" 27092 }; 27093 27094 exports$2.kaula = { 27095 a: 6378163.0, 27096 rf: 298.24, 27097 ellipseName: "Kaula 1961" 27098 }; 27099 27100 exports$2.lerch = { 27101 a: 6378139.0, 27102 rf: 298.257, 27103 ellipseName: "Lerch 1979" 27104 }; 27105 27106 exports$2.mprts = { 27107 a: 6397300.0, 27108 rf: 191.0, 27109 ellipseName: "Maupertius 1738" 27110 }; 27111 27112 exports$2.new_intl = { 27113 a: 6378157.5, 27114 b: 6356772.2, 27115 ellipseName: "New International 1967" 27116 }; 27117 27118 exports$2.plessis = { 27119 a: 6376523.0, 27120 rf: 6355863.0, 27121 ellipseName: "Plessis 1817 (France)" 27122 }; 27123
27124 exports$2.krass = { 27125 a: 6378245.0, 27126 rf: 298.3, 27127 ellipseName: "Krassovsky, 1942" 27128 }; 27129 27130 exports$2.SEasia = { 27131 a: 6378155.0, 27132 b: 6356773.3205, 27133 ellipseName: "Southeast Asia" 27134 }; 27135 27136 exports$2.walbeck = { 27137 a: 6376896.0, 27138 b: 6355834.8467, 27139 ellipseName: "Walbeck" 27140 }; 27141 27142 exports$2.WGS60 = { 27143 a: 6378165.0, 27144 rf: 298.3, 27145 ellipseName: "WGS 60" 27146 }; 27147 27148 exports$2.WGS66 = { 27149 a: 6378145.0, 27150 rf: 298.25, 27151 ellipseName: "WGS 66" 27152 }; 27153 27154 exports$2.WGS7 = { 27155 a: 6378135.0, 27156 rf: 298.26, 27157 ellipseName: "WGS 72" 27158 }; 27159 27160 var WGS84 = exports$2.WGS84 = { 27161 a: 6378137.0, 27162 rf: 298.257223563, 27163 ellipseName: "WGS 84" 27164 }; 27165 27166 exports$2.sphere = { 27167 a: 6370997.0, 27168 b: 6370997.0, 27169 ellipseName: "Normal Sphere (r=6370997)" 27170 }; 27171 27172 function eccentricity(a, b, rf, R_A) { 27173 var a2 = a * a; // used in geocentric 27174 var b2 = b * b; // used in geocentric 27175 var es = (a2 - b2) / a2; // e ^ 2 27176 var e = 0; 27177 if (R_A) { 27178 a *= 1 - es * (SIXTH + es * (RA4 + es * RA6)); 27179 a2 = a * a; 27180 es = 0; 27181 } else { 27182 e = Math.sqrt(es); // eccentricity 27183 } 27184 var ep2 = (a2 - b2) / b2; // used in geocentric 27185 return { 27186 es: es, 27187 e: e, 27188 ep2: ep2 27189 }; 27190 } 27191 function sphere(a, b, rf, ellps, sphere) { 27192 if (!a) { // do we have an ellipsoid? 27193 var ellipse = match(exports$2, ellps); 27194 if (!ellipse) { 27195 ellipse = WGS84; 27196 } 27197 a = ellipse.a; 27198 b = ellipse.b; 27199 rf = ellipse.rf; 27200 } 27201 27202 if (rf && !b) { 27203 b = (1.0 - 1.0 / rf) * a; 27204 } 27205 if (rf === 0 || Math.abs(a - b) < EPSLN) { 27206 sphere = true; 27207 b = a; 27208 } 27209 return { 27210 a: a, 27211 b: b, 27212 rf: rf, 27213 sphere: sphere 27214 }; 27215 } 27216 27217 var exports$3 = {}; 27218 exports$3.wgs84 = { 27219 towgs84: "0,0,0", 27220 ellipse: "WGS84", 27221 datumName: "WGS84" 27222 }; 27223 27224 exports$3.ch1903 = { 27225 towgs84: "674.374,15.056,405.346", 27226 ellipse: "bessel", 27227 datumName: "swiss" 27228 }; 27229 27230 exports$3.ggrs87 = { 27231 towgs84: "-199.87,74.79,246.62", 27232 ellipse: "GRS80", 27233 datumName: "Greek_Geodetic_Reference_System_1987" 27234 }; 27235 27236 exports$3.nad83 = { 27237 towgs84: "0,0,0", 27238 ellipse: "GRS80", 27239 datumName: "North_American_Datum_1983" 27240 }; 27241 27242 exports$3.nad27 = { 27243 nadgrids: "@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat", 27244 ellipse: "clrk66", 27245 datumName: "North_American_Datum_1927" 27246 }; 27247 27248 exports$3.potsdam = { 27249 towgs84: "598.1,73.7,418.2,0.202,0.045,-2.455,6.7", 27250 ellipse: "bessel", 27251 datumName: "Potsdam Rauenberg 1950 DHDN" 27252 }; 27253 27254 exports$3.carthage = { 27255 towgs84: "-263.0,6.0,431.0", 27256 ellipse: "clark80", 27257 datumName: "Carthage 1934 Tunisia" 27258 }; 27259 27260 exports$3.hermannskogel = { 27261 towgs84: "577.326,90.129,463.919,5.137,1.474,5.297,2.4232", 27262 ellipse: "bessel", 27263 datumName: "Hermannskogel" 27264 }; 27265 27266 exports$3.militargeographische_institut = { 27267 towgs84: "577.326,90.129,463.919,5.137,1.474,5.297,2.4232", 27268 ellipse: "bessel", 27269 datumName: "Militar-Geographische Institut" 27270 }; 27271 27272 exports$3.osni52 = { 27273 towgs84: "482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15", 27274 ellipse: "airy", 27275 datumName: "Irish National" 27276 }; 27277 27278 exports$3.ire65 = { 27279 towgs84: "482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15", 27280 ellipse: "mod_airy", 27281 datumName: "Ireland 1965" 27282 }; 27283 27284 exports$3.rassadiran = { 27285 towgs84: "-133.63,-157.5,-158.62", 27286 ellipse: "intl", 27287 datumName: "Rassadiran" 27288 }; 27289 27290 exports$3.nzgd49 = { 27291 towgs84: "59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993", 27292 ellipse: "intl", 27293 datumName: "New Zealand Geodetic Datum 1949" 27294 }; 27295 27296 exports$3.osgb36 = { 27297 towgs84: "446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894", 27298 ellipse: "airy", 27299 datumName: "Airy 1830" 27300 }; 27301 27302 exports$3.s_jtsk = { 27303 towgs84: "589,76,480", 27304 ellipse: 'bessel', 27305 datumName: 'S-JTSK (Ferro)' 27306 }; 27307 27308 exports$3.beduaram = { 27309 towgs84: '-106,-87,188', 27310 ellipse: 'clrk80', 27311 datumName: 'Beduaram' 27312 }; 27313 27314 exports$3.gunung_segara = { 27315 towgs84: '-403,684,41', 27316 ellipse: 'bessel', 27317 datumName: 'Gunung Segara Jakarta' 27318 }; 27319 27320 exports$3.rnb72 = { 27321 towgs84: "106.869,-52.2978,103.724,-0.33657,0.456955,-1.84218,1", 27322 ellipse: "intl", 27323 datumName: "Reseau National Belge 1972" 27324 }; 27325
27326 function datum(datumCode, datum_params, a, b, es, ep2, nadgrids) { 27327 var out = {}; 27328 27329 if (datumCode === undefined || datumCode === 'none') { 27330 out.datum_type = PJD_NODATUM; 27331 } else { 27332 out.datum_type = PJD_WGS84; 27333 } 27334 27335 if (datum_params) { 27336 out.datum_params = datum_params.map(parseFloat); 27337 if (out.datum_params[0] !== 0 || out.datum_params[1] !== 0 || out.datum_params[2] !== 0) { 27338 out.datum_type = PJD_3PARAM; 27339 } 27340 if (out.datum_params.length > 3) { 27341 if (out.datum_params[3] !== 0 || out.datum_params[4] !== 0 || out.datum_params[5] !== 0 || out.datum_params[6] !== 0) { 27342 out.datum_type = PJD_7PARAM; 27343 out.datum_params[3] *= SEC_TO_RAD; 27344 out.datum_params[4] *= SEC_TO_RAD; 27345 out.datum_params[5] *= SEC_TO_RAD; 27346 out.datum_params[6] = (out.datum_params[6] / 1000000.0) + 1.0; 27347 } 27348 } 27349 } 27350 27351 if (nadgrids) { 27352 out.datum_type = PJD_GRIDSHIFT; 27353 out.grids = nadgr
27353ids; 27354 } 27355 out.a = a; //datum object also uses these values 27356 out.b = b; 27357 out.es = es; 27358 out.ep2 = ep2; 27359 return out; 27360 } 27361 27362 /** 27363 * Resources for details of NTv2 file formats: 27364 * - https://web.archive.org/web/20140127204822if_/http://www.mgs.gov.on.ca:80/stdprodconsume/groups/content/@mgs/@iandit/documents/resourcelist/stel02_047447.pdf 27365 * - http://mimaka.com/help/gs/html/004_NTV2%20Data%20Format.htm 27366 */ 27367 27368 var loadedNadgrids = {}; 27369 27370 /** 27371 * Load a binary NTv2 file (.gsb) to a key that can be used in a proj string like +nadgrids=<key>. Pass the NTv2 file 27372 * as an ArrayBuffer. 27373 */ 27374 function nadgrid(key, data) { 27375 var view = new DataView(data); 27376 var isLittleEndian = detectLittleEndian(view); 27377 var header = readHeader(view, isLittleEndian); 27378 var subgrids = readSubgrids(view, header, isLittleEndian); 27379 var nadgrid = {header: header, subgrids: subgrids}; 27380 loadedNadgrids[key] = nadgrid; 27381 return nadgrid; 27382 } 27383 27384 /** 27385 * Given a proj4 value for nadgrids, return an array of loaded grids 27386 */ 27387 function getNadgrids(nadgrids) { 27388 // Format details: http://proj.maptools.org/gen_parms.html 27389 if (nadgrids === undefined) { return null; } 27390 var grids = nadgrids.split(',');
27391 return grids.map(parseNadgridString); 27392 } 27393 27394 function parseNadgridString(value) { 27395 if (value.length === 0) { 27396 return null; 27397 } 27398 var optional = value[0] === '@'; 27399 if (optional) { 27400 value = value.slice(1); 27401 } 27402 if (value === 'null') { 27403 return {name: 'null', mandatory: !optional, grid: null, isNull: true}; 27404 } 27405 return { 27406 name: value, 27407 mandatory: !optional, 27408 grid: loadedNadgrids[value] || null, 27409 isNull: false 27410 }; 27411 } 27412 27413 function secondsToRadians(seconds) { 27414 return (seconds / 3600) * Math.PI / 180; 27415 } 27416 27417 function detectLittleEndian(view) { 27418 var nFields = view.getInt32(8, false); 27419 if (nFields === 11) { 27420 return false; 27421 } 27422 nFields = view.getInt32(8, true); 27423 if (nFields !== 11) { 27424 console.warn('Failed to detect nadgrid endian-ness, defaulting to little-endian'); 27425 } 27426 return true; 27427 } 27428 27429 function readHeader(view, isLittleEndian) { 27430 return { 27431 nFields: view.getInt32(8, isLittleEndian), 27432 nSubgridFields: view.getInt32(24, isLittleEndian), 27433 nSubgrids: view.getInt32(40, isLittleEndian), 27434 shiftType: decodeString(view, 56, 56 + 8).trim(), 27435 fromSemiMajorAxis: view.getFloat64(120, isLittleEndian), 27436 fromSemiMinorAxis: view.getFloat64(136, isLittleEndian), 27437 toSemiMajorAxis: view.getFloat64(152, isLittleEndian), 27438 toSemiMinorAxis: view.getFloat64(168, isLittleEndian), 27439 }; 27440 } 27441 27442 function decodeString(view, start, end) { 27443 return String.fromCharCode.apply(null, new Uint8Array(view.buffer.slice(start, end))); 27444 } 27445 27446 function readSubgrids(view, header, isLittleEndian) { 27447 var gridOffset = 176; 27448 var grids = []; 27449 for (var i = 0; i < header.nSubgrids; i++) { 27450 var subHeader = readGridHeader(view, gridOffset, isLittleEndian); 27451 var nodes = readGridNodes(view, gridOffset, subHeader, isLittleEndian); 27452 var lngColumnCount = Math.round( 27453 1 + (subHeader.upperLongitude - subHeader.lowerLongitude) / subHeader.longitudeInterval); 27454 var latColumnCount = Math.round( 27455 1 + (subHeader.upperLatitude - subHeader.lowerLatitude) / subHeader.latitudeInterval); 27456 // Proj4 operates on radians whereas the coordinates are in seconds in the grid 27457 grids.push({ 27458 ll: [secondsToRadians(subHeader.lowerLongitude), secondsToRadians(subHeader.lowerLatitude)], 27459 del: [secondsToRadians(subHeader.longitudeInterval), secondsToRadians(subHeader.latitudeInterval)], 27460 lim: [lngColumnCount, latColumnCount], 27461 count: subHeader.gridNodeCount, 27462 cvs: mapNodes(nodes) 27463 }); 27464 gridOffset += 176 + subHeader.gridNodeCount * 16; 27465 } 27466 return grids; 27467 } 27468 27469 function mapNodes(nodes) { 27470 return nodes.map(function (r) {return [secondsToRadians(r.longitudeShift), secondsToRadians(r.latitudeShift)];}); 27471 } 27472 27473 function readGridHeader(view, offset, isLittleEndian) { 27474 return { 27475 name: decodeString(view, offset + 8, offset + 16).trim(), 27476 parent: decodeString(view, offset + 24, offset + 24 + 8).trim(), 27477 lowerLatitude: view.getFloat64(offset + 72, isLittleEndian), 27478 upperLatitude: view.getFloat64(offset + 88, isLittleEndian), 27479 lowerLongitude: view.getFloat64(offset + 104, isLittleEndian), 27480 upperLongitude: view.getFloat64(offset + 120, isLittleEndian), 27481 latitudeInterval: view.getFloat64(offset + 136, isLittleEndian), 27482 longitudeInterval: view.getFloat64(offset + 152, isLittleEndian), 27483 gridNodeCount: view.getInt32(offset + 168, isLittleEndian) 27484 }; 27485 } 27486 27487 function readGridNodes(view, offset, gridHeader, isLittleEndian) { 27488 var nodesOffset = offset + 176; 27489 var gridRecordLength = 16; 27490 var gridShiftRecords = []; 27491 for (var i = 0; i < gridHeader.gridNodeCount; i++) { 27492 var record = { 27493 latitudeShift: view.getFloat32(nodesOffset + i * gridRecordLength, isLittleEndian), 27494 longitudeShift: view.getFloat32(nodesOffset + i * gridRecordLength + 4, isLittleEndian), 27495 latitudeAccuracy: view.getFloat32(nodesOffset + i * gridRecordLength + 8, isLittleEndian), 27496 longitudeAccuracy: view.getFloat32(nodesOffset + i * gridRecordLength + 12, isLittleEndian), 27497 }; 27498 gridShiftRecords.push(record); 27499 } 27500 return gridShiftRecords; 27501 } 27502 27503 function Projection(srsCode,callback) { 27504 if (!(this instanceof Projection)) { 27505 return new Projection(srsCode); 27506 } 27507 callback = callback || function(error){ 27508 if(error){ 27509 throw error; 27510 } 27511 }; 27512 var json = parse(srsCode); 27513 if(typeof json !== 'object'){ 27514 callback(srsCode); 27515 return; 27516 }
27517 var ourProj = Projection.projections.get(json.projName); 27518 if(!ourProj){ 27519 callback(srsCode); 27520 return; 27521 } 27522 if (json.datumCode && json.datumCode !== 'none') { 27523 var datumDef = match(exports$3, json.datumCode); 27524 if (datumDef) { 27525 json.datum_params = json.datum_params || (datumDef.towgs84 ? datumDef.towgs84.split(',') : null); 27526 json.ellps = datumDef.ellipse; 27527 json.datumName = datumDef.datumName ? datumDef.datumName : json.datumCode; 27528 } 27529 } 27530 json.k0 = json.k0 || 1.0; 27531 json.axis = json.axis || 'enu'; 27532 json.ellps = json.ellps || 'wgs84'; 27533 json.lat1 = json.lat1 || json.lat0; // Lambert_Conformal_Conic_1SP, for example, needs this 27534 27535 var sphere_ = sphere(json.a, json.b, json.rf, json.ellps, json.sphere); 27536 var ecc = eccentricity(sphere_.a, sphere_.b, sphere_.rf, json.R_A); 27537 var nadgrids = getNadgrids(json.nadgrids); 27538 var datumObj = json.datum || datum(json.datumCode, json.datum_params, sphere_.a, sphere_.b, ecc.es, ecc.ep2, 27539 nadgrids); 27540 27541 extend(this, json); // transfer everything over from the projection because we don't know what we'll need 27542 extend(this, ourProj); // transfer all the methods from the projection 27543 27544 // copy the 4 things over we calculated in deriveConstants.sphere 27545 this.a = sphere_.a; 27546 this.b = sphere_.b; 27547 this.rf = sphere_.rf; 27548 this.sphere = sphere_.sphere; 27549 27550 // copy the 3 things we calculated in deriveConstants.eccentricity 27551 this.es = ecc.es; 27552 this.e = ecc.e; 27553 this.ep2 = ecc.ep2; 27554 27555 // add in the datum object 27556 this.datum = datumObj; 27557 27558 // init the projection 27559 this.init(); 27560 27561 // legecy callback from back in the day when it went to spatialreference.org 27562 callback(null, this); 27563 27564 } 27565 Projection.projections = projections; 27566 Projection.projections.start(); 27567 27568 'use strict'; 27569 function compareDatums(source, dest) { 27570 if (source.datum_type !== dest.datum_type) { 27571 return false; // false, datums are not equal 27572 } else if (source.a !== dest.a || Math.abs(source.es - dest.es) > 0.000000000050) { 27573 // the tolerance for es is to ensure that GRS80 and WGS84 27574 // are considered identical 27575 return false; 27576 } else if (source.datum_type === PJD_3PARAM) { 27577 return (source.datum_params[0] === dest.datum_params[0] && source.datum_params[1] === dest.datum_params[1] && source.datum_params[2] === dest.datum_params[2]); 27578 } else if (source.datum_type === PJD_7PARAM) { 27579 return (source.datum_params[0] === dest.datum_params[0] && source.datum_params[1] === dest.datum_params[1] && source.datum_params[2] === dest.datum_params[2] && source.datum_params[3] === dest.datum_params[3] && source.datum_params[4] === dest.datum_params[4] && source.datum_params[5] === dest.datum_params[5] && source.datum_params[6] === dest.datum_params[6]); 27580 } else { 27581 return true; // datums are equal 27582 } 27583 } // cs_compare_datums() 27584 27585 /* 27586 * The function Convert_Geodetic_To_Geocentric converts geodetic coordinates 27587 * (latitude, longitude, and height) to geocentric coordinates (X, Y, Z), 27588 * according to the current ellipsoid parameters. 27589 * 27590 * Latitude : Geodetic latitude in radians (input) 27591 * Longitude : Geodetic longitude in radians (input) 27592 * Height : Geodetic height, in meters (input) 27593 * X : Calculated Geocentric X coordinate, in meters (output) 27594 * Y : Calculated Geocentric Y coordinate, in meters (output) 27595 * Z : Calculated Geocentric Z coordinate, in meters (output) 27596 * 27597 */ 27598 function geodeticToGeocentric(p, es, a) { 27599 var Longitude = p.x; 27600 var Latitude = p.y; 27601 var Height = p.z ? p.z : 0; //Z value not always supplied 27602 27603 var Rn; /* Earth radius at location */ 27604 var Sin_Lat; /* Math.sin(Latitude) */ 27605 var Sin2_Lat; /* Square of Math.sin(Latitude) */ 27606 var Cos_Lat; /* Math.cos(Latitude) */ 27607 27608 /* 27609 ** Don't blow up if Latitude is just a little out of the value 27610 ** range as it may just be a rounding issue. Also removed longitude 27611 ** test, it should be wrapped by Math.cos() and Math.sin(). NFW for PROJ.4, Sep/2001. 27612 */ 27613 if (Latitude < -HALF_PI && Latitude > -1.001 * HALF_PI) { 27614 Latitude = -HALF_PI; 27615 } else if (Latitude > HALF_PI && Latitude < 1.001 * HALF_PI) { 27616 Latitude = HALF_PI; 27617 } else if (Latitude < -HALF_PI) { 27618 /* Latitude out of range */ 27619 //..reportError('geocent:lat out of range:' + Latitude); 27620 return { x: -Infinity, y: -Infinity, z: p.z }; 27621 } else if (Latitude > HALF_PI) { 27622 /* Latitude out of range */ 27623 return { x: Infinity, y: Infinity, z: p.z }; 27624 } 27625 27626 if (Longitude > Math.PI) { 27627 Longitude -= (2 * Math.PI); 27628 } 27629 Sin_Lat = Math.sin(Latitude);
27630 Cos_Lat = Math.cos(Latitude); 27631 Sin2_Lat = Sin_Lat * Sin_Lat; 27632 Rn = a / (Math.sqrt(1.0e0 - es * Sin2_Lat)); 27633 return { 27634 x: (Rn + Height) * Cos_Lat * Math.cos(Longitude), 27635 y: (Rn + Height) * Cos_Lat * Math.sin(Longitude), 27636 z: ((Rn * (1 - es)) + Height) * Sin_Lat 27637 }; 27638 } // cs_geodetic_to_geocentric() 27639 27640 function geocentricToGeodetic(p, es, a, b) { 27641 /* local defintions and variables */ 27642 /* end-criterium of loop, accuracy of sin(Latitude) */ 27643 var genau = 1e-12; 27644 var genau2 = (genau * genau); 27645 var maxiter = 30; 27646 27647 var P; /* distance between semi-minor axis and location */ 27648 var RR; /* distance between center and location */ 27649 var CT; /* sin of geocentric latitude */ 27650 var ST; /* cos of geocentric latitude */ 27651 var RX; 27652 var RK; 27653 var RN; /* Earth radius at location */ 27654 var CPHI0; /* cos of start or old geodetic latitude in iterations */ 27655 var SPHI0; /* sin of start or old geodetic latitude in iterations */ 27656 var CPHI; /* cos of searched geodetic latitude */ 27657 var SPHI; /* sin of searched geodetic latitude */ 27658 var SDPHI; /* end-criterium: addition-theorem of sin(Latitude(iter)-Latitude(iter-1)) */ 27659 var iter; /* # of continous iteration, max. 30 is always enough (s.a.) */ 27660 27661 var X = p.x; 27662 var Y = p.y; 27663 var Z = p.z ? p.z : 0.0; //Z value not always supplied 27664 var Longitude; 27665 var Latitude; 27666 var Height; 27667 27668 P = Math.sqrt(X * X + Y * Y); 27669 RR = Math.sqrt(X * X + Y * Y + Z * Z); 27670 27671 /* special cases for latitude and longitude */ 27672 if (P / a < genau) { 27673 27674 /* special case, if P=0. (X=0., Y=0.) */ 27675 Longitude = 0.0; 27676 27677 /* if (X,Y,Z)=(0.,0.,0.) then Height becomes semi-minor axis 27678 * of ellipsoid (=center of mass), Latitude becomes PI/2 */ 27679 if (RR / a < genau) { 27680 Latitude = HALF_PI; 27681 Height = -b; 27682 return { 27683 x: p.x, 27684 y: p.y, 27685 z: p.z 27686 }; 27687 } 27688 } else { 27689 /* ellipsoidal (geodetic) longitude 27690 * interval: -PI < Longitude <= +PI */ 27691 Longitude = Math.atan2(Y, X); 27692 } 27693 27694 /* -------------------------------------------------------------- 27695 * Following iterative algorithm was developped by 27696 * "Institut for Erdmessung", University of Hannover, July 1988. 27697 * Internet: www.ife.uni-hannover.de 27698 * Iterative computation of CPHI,SPHI and Height. 27699 * Iteration of CPHI and SPHI to 10**-12 radian resp. 27700 * 2*10**-7 arcsec. 27701 * -------------------------------------------------------------- 27702 */ 27703 CT = Z / RR; 27704 ST = P / RR; 27705 RX = 1.0 / Math.sqrt(1.0 - es * (2.0 - es) * ST * ST); 27706 CPHI0 = ST * (1.0 - es) * RX; 27707 SPHI0 = CT * RX; 27708 iter = 0; 27709 27710 /* loop to find sin(Latitude) resp. Latitude 27711 * until |sin(Latitude(iter)-Latitude(iter-1))| < genau */ 27712 do { 27713 iter++; 27714 RN = a / Math.sqrt(1.0 - es * SPHI0 * SPHI0); 27715 27716 /* ellipsoidal (geodetic) height */ 27717 Height = P * CPHI0 + Z * SPHI0 - RN * (1.0 - es * SPHI0 * SPHI0); 27718 27719 RK = es * RN / (RN + Height); 27720 RX = 1.0 / Math.sqrt(1.0 - RK * (2.0 - RK) * ST * ST); 27721 CPHI = ST * (1.0 - RK) * RX; 27722 SPHI = CT * RX; 27723 SDPHI = SPHI * CPHI0 - CPHI * SPHI0; 27724 CPHI0 = CPHI; 27725 SPHI0 = SPHI; 27726 } 27727 while (SDPHI * SDPHI > genau2 && iter < maxiter); 27728 27729 /* ellipsoidal (geodetic) latitude */ 27730 Latitude = Math.atan(SPHI / Math.abs(CPHI)); 27731 return { 27732 x: Longitude, 27733 y: Latitude, 27734 z: Height 27735 }; 27736 } // cs_geocentric_to_geodetic() 27737 27738 /****************************************************************/ 27739 // pj_geocentic_to_wgs84( p ) 27740 // p = point to transform in geocentric coordinates (x,y,z) 27741 27742 27743 /** point object, nothing fancy, just allows values to be 27744 passed back and forth by reference rather than by value. 27745 Other point classes may be used as long as they have 27746 x and y properties, which will get modified in the transform method. 27747 */ 27748 function geocentricToWgs84(p, datum_type, datum_params) { 27749 27750 if (datum_type === PJD_3PARAM) { 27751 // if( x[io] === HUGE_VAL ) 27752 // continue; 27753 return { 27754 x: p.x + datum_params[0], 27755 y: p.y + datum_params[1], 27756 z: p.z + datum_params[2], 27757 }; 27758 } else if (datum_type === PJD_7PARAM) { 27759 var Dx_BF = datum_params[0]; 27760 var Dy_BF = datum_params[1]; 27761 var Dz_BF = datum_params[2]; 27762 var Rx_BF = datum_params[3]; 27763 var Ry_BF = datum_params[4]; 27764 var Rz_BF = datum_params[5]; 27765 var M_BF = datum_params[6]; 27766 // if( x[io] === HUGE_VAL ) 27767 // continue; 27768 return { 27769 x: M_BF * (p.x - Rz_BF * p.y + Ry_BF * p.z) + Dx_BF, 27770 y: M_BF * (Rz_BF * p.x + p.y - Rx_BF * p.z) + Dy_BF,
27771 z: M_BF * (-Ry_BF * p.x + Rx_BF * p.y + p.z) + Dz_BF 27772 }; 27773 } 27774 } // cs_geocentric_to_wgs84 27775 27776 /****************************************************************/ 27777 // pj_geocentic_from_wgs84() 27778 // coordinate system definition, 27779 // point to transform in geocentric coordinates (x,y,z) 27780 function geocentricFromWgs84(p, datum_type, datum_params) { 27781 27782 if (datum_type === PJD_3PARAM) { 27783 //if( x[io] === HUGE_VAL ) 27784 // continue; 27785 return { 27786 x: p.x - datum_params[0], 27787 y: p.y - datum_params[1], 27788 z: p.z - datum_params[2], 27789 }; 27790 27791 } else if (datum_type === PJD_7PARAM) { 27792 var Dx_BF = datum_params[0]; 27793 var Dy_BF = datum_params[1]; 27794 var Dz_BF = datum_params[2]; 27795 var Rx_BF = datum_params[3]; 27796 var Ry_BF = datum_params[4]; 27797 var Rz_BF = datum_params[5]; 27798 var M_BF = datum_params[6]; 27799 var x_tmp = (p.x - Dx_BF) / M_BF; 27800 var y_tmp = (p.y - Dy_BF) / M_BF; 27801 var z_tmp = (p.z - Dz_BF) / M_BF; 27802 //if( x[io] === HUGE_VAL ) 27803 // continue; 27804 27805 return { 27806 x: x_tmp + Rz_BF * y_tmp - Ry_BF * z_tmp, 27807 y: -Rz_BF * x_tmp + y_tmp + Rx_BF * z_tmp, 27808 z: Ry_BF * x_tmp - Rx_BF * y_tmp + z_tmp 27809 }; 27810 } //cs_geocentric_from_wgs84() 27811 } 27812 27813 function checkParams(type) { 27814 return (type === PJD_3PARAM || type === PJD_7PARAM); 27815 } 27816 27817 var datum_transform = function(source, dest, point) { 27818 // Short cut if the datums are identical. 27819 if (compareDatums(source, dest)) { 27820 return point; // in this case, zero is sucess, 27821 // whereas cs_compare_datums returns 1 to indicate TRUE 27822 // confusing, should fix this 27823 } 27824 27825 // Explicitly skip datum transform by setting 'datum=none' as parameter for either source or dest 27826 if (source.datum_type === PJD_NODATUM || dest.datum_type === PJD_NODATUM) { 27827 return point; 27828 } 27829 27830 // If this datum requires grid shifts, then apply it to geodetic coordinates. 27831 var source_a = source.a; 27832 var source_es = source.es; 27833 if (source.datum_type === PJD_GRIDSHIFT) { 27834 var gridShiftCode = applyGridShift(source, false, point); 27835 if (gridShiftCode !== 0) { 27836 return undefined; 27837 } 27838 source_a = SRS_WGS84_SEMIMAJOR; 27839 source_es = SRS_WGS84_ESQUARED; 27840 } 27841 27842 var dest_a = dest.a; 27843 var dest_b = dest.b; 27844 var dest_es = dest.es; 27845 if (dest.datum_type === PJD_GRIDSHIFT) { 27846 dest_a = SRS_WGS84_SEMIMAJOR; 27847 dest_b = SRS_WGS84_SEMIMINOR; 27848 dest_es = SRS_WGS84_ESQUARED; 27849 } 27850 27851 // Do we need to go through geocentric coordinates? 27852 if (source_es === dest_es && source_a === dest_a && !checkParams(source.datum_type) && !checkParams(dest.datum_type)) { 27853 return point; 27854 } 27855 27856 // Convert to geocentric coordinates. 27857 point = geodeticToGeocentric(point, source_es, source_a); 27858 // Convert between datums 27859 if (checkParams(source.datum_type)) { 27860 point = geocentricToWgs84(point, source.datum_type, source.datum_params); 27861 } 27862 if (checkParams(dest.datum_type)) { 27863 point = geocentricFromWgs84(point, dest.datum_type, dest.datum_params); 27864 } 27865 point = geocentricToGeodetic(point, dest_es, dest_a, dest_b); 27866 27867 if (dest.datum_type === PJD_GRIDSHIFT) { 27868 var destGridShiftResult = applyGridShift(dest, true, point); 27869 if (destGridShiftResult !== 0) { 27870 return undefined; 27871 } 27872 } 27873 27874 return point; 27875 }; 27876 27877 function applyGridShift(source, inverse, point) { 27878 if (source.grids === null || source.grids.length === 0) { 27879 console.log('Grid shift grids not found'); 27880 return -1; 27881 } 27882 var input = {x: -point.x, y: point.y}; 27883 var output = {x: Number.NaN, y: Number.NaN}; 27884 var attemptedGrids = []; 27885 outer: 27886 for (var i = 0; i < source.grids.length; i++) { 27887 var grid = source.grids[i]; 27888 attemptedGrids.push(grid.name); 27889 if (grid.isNull) { 27890 output = input; 27891 break; 27892 } 27893 if (grid.grid === null) { 27894 if (grid.mandatory) { 27895 console.log("Unable to find mandatory grid '" + grid.name + "'"); 27896 return -1; 27897 } 27898 continue; 27899 } 27900 var subgrids = grid.grid.subgrids; 27901 for (var j = 0, jj = subgrids.length; j < jj; j++) { 27902 var subgrid = subgrids[j]; 27903 // skip tables that don't match our point at all 27904 var epsilon = (Math.abs(subgrid.del[1]) + Math.abs(subgrid.del[0])) / 10000.0; 27905 var minX = subgrid.ll[0] - epsilon; 27906 var minY = subgrid.ll[1] - epsilon; 27907 var maxX = subgrid.ll[0] + (subgrid.lim[0] - 1) * subgrid.del[0] + epsilon; 27908 var maxY = subgrid.ll[1] + (subgrid.lim[1] - 1) * subgrid.del[1] + epsilon; 27909 if (minY > input.y || minX > input.x || maxY < input.y || maxX < input.x ) { 27910 continue; 27911 } 27912 output = applySubgridShift(input, inverse, subgrid); 27913 if (!isNaN(output.x)) { 27914 break outer; 27915 } 27916 } 27917 } 27918 if (isNaN(output.x)) { 27919 console.log("Failed to find a grid shift table for location '"+ 27920 -input.x * R2D + " " + input.y * R2D + " tried: '" + attemptedGrids + "'"); 27921 return -1; 27922 } 27923 point.x = -output.x; 27924 point.y = output.y; 27925 return 0; 27926 } 27927 27928 function applySubgridShift(pin, inverse, ct) { 27929 var val = {x: Number.NaN, y: Number.NaN}; 27930 if (isNaN(pin.x)) { return val; } 27931 var tb = {x: pin.x, y: pin.y}; 27932 tb.x -= ct.ll[0]; 27933 tb.y -= ct.ll[1]; 27934 tb.x = adjust_lon(tb.x - Math.PI) + Math.PI; 27935 var t = nadInterpolate(tb, ct); 27936 if (inverse) { 27937 if (isNaN(t.x)) { 27938 return val; 27939 } 27940 t.x = tb.x - t.x; 27941 t.y = tb.y - t.y; 27942 var i = 9, tol = 1e-12; 27943 var dif, del; 27944 do { 27945 del = nadInterpolate(t, ct); 27946 if (isNaN(del.x)) { 27947 console.log("Inverse grid shift iteration failed, presumably at grid edge. Using first approximation."); 27948 break; 27949 } 27950 dif = {x: tb.x - (del.x + t.x), y: tb.y - (del.y + t.y)}; 27951 t.x += dif.x; 27952 t.y += dif.y; 27953 } while (i-- && Math.abs(dif.x) > tol && Math.abs(dif.y) > tol); 27954 if (i < 0) { 27955 console.log("Inverse grid shift iterator failed to converge."); 27956 return val; 27957 } 27958 val.x = adjust_lon(t.x + ct.ll[0]); 27959 val.y = t.y + ct.ll[1]; 27960 } else { 27961 if (!isNaN(t.x)) { 27962 val.x = pin.x + t.x; 27963 val.y = pin.y + t.y; 27964 } 27965 } 27966 return val; 27967 } 27968 27969 function nadInterpolate(pin, ct) { 27970 var t = {x: pin.x / ct.del[0], y: pin.y / ct.del[1]}; 27971 var indx = {x: Math.floor(t.x), y: Math.floor(t.y)}; 27972 var frct = {x: t.x - 1.0 * indx.x, y: t.y - 1.0 * indx.y}; 27973 var val= {x: Number.NaN, y: Number.NaN}; 27974 var inx; 27975 if (indx.x < 0 || indx.x >= ct.lim[0]) { 27976 return val; 27977 } 27978 if (indx.y < 0 || indx.y >= ct.lim[1]) { 27979 return val; 27980 } 27981 inx = (indx.y * ct.lim[0]) + indx.x; 27982 var f00 = {x: ct.cvs[inx][0], y: ct.cvs[inx][1]}; 27983 inx++; 27984 var f10= {x: ct.cvs[inx][0], y: ct.cvs[inx][1]}; 27985 inx += ct.lim[0]; 27986 var f11 = {x: ct.cvs[inx][0], y: ct.cvs[inx][1]}; 27987 inx--; 27988 var f01 = {x: ct.cvs[inx][0], y: ct.cvs[inx][1]}; 27989 var m11 = frct.x * frct.y, m10 = frct.x * (1.0 - frct.y), 27990 m00 = (1.0 - frct.x) * (1.0 - frct.y), m01 = (1.0 - frct.x) * frct.y; 27991 val.x = (m00 * f00.x + m10 * f10.x + m01 * f01.x + m11 * f11.x); 27992 val.y = (m00 * f00.y + m10 * f10.y + m01 * f01.y + m11 * f11.y); 27993 return val; 27994 } 27995 27996 var adjust_axis = function(crs, denorm, point) {
27997 var xin = point.x, 27998 yin = point.y, 27999 zin = point.z || 0.0; 28000 var v, t, i; 28001 var out = {}; 28002 for (i = 0; i < 3; i++) { 28003 if (denorm && i === 2 && point.z === undefined) { 28004 continue; 28005 } 28006 if (i === 0) { 28007 v = xin; 28008 if ("ew".indexOf(crs.axis[i]) !== -1) { 28009 t = 'x'; 28010 } else { 28011 t = 'y'; 28012 } 28013 28014 } 28015 else if (i === 1) { 28016 v = yin; 28017 if ("ns".indexOf(crs.axis[i]) !== -1) { 28018 t = 'y'; 28019 } else { 28020 t = 'x'; 28021 } 28022 } 28023 else { 28024 v = zin; 28025 t = 'z'; 28026 } 28027 switch (crs.axis[i]) { 28028 case 'e': 28029 out[t] = v; 28030 break; 28031 case 'w': 28032 out[t] = -v; 28033 break; 28034 case 'n': 28035 out[t] = v; 28036 break; 28037 case 's': 28038 out[t] = -v; 28039 break; 28040 case 'u': 28041 if (point[t] !== undefined) { 28042 out.z = v; 28043 } 28044 break; 28045 case 'd': 28046 if (point[t] !== undefined) { 28047 out.z = -v; 28048 } 28049 break; 28050 default: 28051 //console.log("ERROR: unknow axis ("+crs.axis[i]+") - check definition of "+crs.projName); 28052 return null; 28053 } 28054 } 28055 return out; 28056 }; 28057 28058 var toPoint = function (array){ 28059 var out = { 28060 x: array[0], 28061 y: array[1] 28062 }; 28063 if (array.length>2) { 28064 out.z = array[2]; 28065 } 28066 if (array.length>3) { 28067 out.m = array[3]; 28068 } 28069 return out; 28070 }; 28071 28072 var checkSanity = function (point) { 28073 checkCoord(point.x); 28074 checkCoord(point.y); 28075 }; 28076 function checkCoord(num) { 28077 if (typeof Number.isFinite === 'function') { 28078 if (Number.isFinite(num)) { 28079 return; 28080 } 28081 throw new TypeError('coordinates must be finite numbers'); 28082 } 28083 if (typeof num !== 'number' || num !== num || !isFinite(num)) { 28084 throw new TypeError('coordinates must be finite numbers'); 28085 } 28086 } 28087 28088 function checkNotWGS(source, dest) { 28089 return ( 28090 (source.datum.datum_type === PJD_3PARAM || source.datum.datum_type === PJD_7PARAM || source.datum.datum_type === PJD_GRIDSHIFT) && dest.datumCode !== 'WGS84') || 28091 ((dest.datum.datum_type === PJD_3PARAM || dest.datum.datum_type === PJD_7PARAM || dest.datum.datum_type === PJD_GRIDSHIFT) && source.datumCode !== 'WGS84'); 28092 } 28093 28094 function transform(source, dest, point, enforceAxis) { 28095 var wgs84; 28096 if (Array.isArray(point)) { 28097 point = toPoint(point); 28098 } else { 28099 // Clone the point object so inputs don't get modified 28100 point = { 28101 x: point.x, 28102 y: point.y, 28103 z: point.z, 28104 m: point.m 28105 }; 28106 } 28107 var hasZ = point.z !== undefined; 28108 checkSanity(point); 28109 // Workaround for datum shifts towgs84, if either source or destination projection is not wgs84 28110 if (source.datum && dest.datum && checkNotWGS(source, dest)) { 28111 wgs84 = new Projection('WGS84'); 28112 point = transform(source, wgs84, point, enforceAxis); 28113 source = wgs84; 28114 } 28115 // DGR, 2010/11/12 28116 if (enforceAxis && source.axis !== 'enu') { 28117 point = adjust_axis(source, false, point); 28118 } 28119 // Transform source points to long/lat, if they aren't already. 28120 if (source.projName === 'longlat') { 28121 point = { 28122 x: point.x * D2R, 28123 y: point.y * D2R, 28124 z: point.z || 0 28125 }; 28126 } else { 28127 if (source.to_meter) { 28128 point = { 28129 x: point.x * source.to_meter, 28130 y: point.y * source.to_meter, 28131 z: point.z || 0 28132 }; 28133 } 28134 point = source.inverse(point); // Convert Cartesian to longlat 28135 if (!point) { 28136 return; 28137 } 28138 } 28139 // Adjust for the prime meridian if necessary 28140 if (source.from_greenwich) { 28141 point.x += source.from_greenwich; 28142 } 28143 28144 // Convert datums if needed, and if possible. 28145 point = datum_transform(source.datum, dest.datum, point); 28146 if (!point) { 28147 return; 28148 } 28149 28150 // Adjust for the prime meridian if necessary 28151 if (dest.from_greenwich) { 28152 point = { 28153 x: point.x - dest.from_greenwich, 28154 y: point.y, 28155 z: point.z || 0 28156 }; 28157 } 28158 28159 if (dest.projName === 'longlat') { 28160 // convert radians to decimal degrees 28161 point = { 28162 x: point.x * R2D, 28163 y: point.y * R2D, 28164 z: point.z || 0 28165 }; 28166 } else { // else project 28167 point = dest.forward(point); 28168 if (dest.to_meter) { 28169 point = { 28170 x: point.x / dest.to_meter, 28171 y: point.y / dest.to_meter, 28172 z: point.z || 0 28173 }; 28174 } 28175 } 28176 28177 // DGR, 2010/11/12 28178 if (enforceAxis && dest.axis !== 'enu') { 28179 return adjust_axis(dest, true, point); 28180 } 28181 28182 if (point && !hasZ) { 28183 delete point.z; 28184 } 28185 return point; 28186 } 28187 28188 var wgs84 = Projection('WGS84'); 28189 28190 function transformer(from, to, coords, enforceAxis) { 28191 var transformedArray, out, keys; 28192 if (Array.isArray(coords)) { 28193 transformedArray = transform(from, to, coords, enforceAxis) || {x: NaN, y: NaN}; 28194 if (coords.length > 2) { 28195 if ((typeof from.name !== 'undefined' && from.name === 'geocent') || (typeof to.name !== 'undefined' && to.name === 'geocent')) { 28196 if (typeof transformedArray.z === 'number') { 28197 return [transformedArray.x, transformedArray.y, transformedArray.z].concat(coords.splice(3)); 28198 } else { 28199 return [transformedArray.x, transformedArray.y, coords[2]].concat(coords.splice(3)); 28200 } 28201 } else { 28202 return [transformedArray.x, transformedArray.y].concat(coords.splice(2)); 28203 } 28204 } else { 28205 return [transformedArray.x, transformedArray.y]; 28206 } 28207 } else { 28208 out = transform(from, to, coords, enforceAxis); 28209 keys = Object.keys(coords); 28210 if (keys.length === 2) { 28211 return out; 28212 } 28213 keys.forEach(function (key) { 28214 if ((typeof from.name !== 'undefined' && from.name === 'geocent') || (typeof to.name !== 'undefined' && to.name === 'geocent')) { 28215 if (key === 'x' || key === 'y' || key === 'z') { 28216 return; 28217 } 28218 } else { 28219 if (key === 'x' || key === 'y') { 28220 return; 28221 } 28222 } 28223 out[key] = coords[key]; 28224 }); 28225 return out; 28226 } 28227 } 28228 28229 function checkProj(item) { 28230 if (item instanceof Projection) { 28231 return item; 28232 } 28233 if (item.oProj) { 28234 return item.oProj; 28235 } 28236 return Projection(item); 28237 } 28238 28239 function proj4$1(fromProj, toProj, coord) { 28240 fromProj = checkProj(fromProj); 28241 var single = false;
28242 var obj; 28243 if (typeof toProj === 'undefined') { 28244 toProj = fromProj; 28245 fromProj = wgs84; 28246 single = true; 28247 } else if (typeof toProj.x !== 'undefined' || Array.isArray(toProj)) { 28248 coord = toProj; 28249 toProj = fromProj; 28250 fromProj = wgs84; 28251 single = true; 28252 } 28253 toProj = checkProj(toProj); 28254 if (coord) { 28255 return transformer(fromProj, toProj, coord); 28256 } else { 28257 obj = { 28258 forward: function (coords, enforceAxis) { 28259 return transformer(fromProj, toProj, coords, enforceAxis); 28260 }, 28261 inverse: function (coords, enforceAxis) { 28262 return transformer(toProj, fromProj, coords, enforceAxis); 28263 } 28264 }; 28265 if (single) { 28266 obj.oProj = toProj; 28267 } 28268 return obj; 28269 } 28270 } 28271 28272 /** 28273 * UTM zones are grouped, and assigned to one of a group of 6 28274 * sets. 28275 * 28276 * {int} @private 28277 */ 28278 var NUM_100K_SETS = 6; 28279 28280 /** 28281 * The column letters (for easting) of the lower left value, per 28282 * set. 28283 * 28284 * {string} @private 28285 */ 28286 var SET_ORIGIN_COLUMN_LETTERS = 'AJSAJS'; 28287 28288 /** 28289 * The row letters (for northing) of the lower left value, per 28290 * set. 28291 * 28292 * {string} @private 28293 */ 28294 var SET_ORIGIN_ROW_LETTERS = 'AFAFAF'; 28295 28296 var A = 65; // A 28297 var I = 73; // I 28298 var O = 79; // O 28299 var V = 86; // V 28300 var Z = 90; // Z 28301 var mgrs = { 28302 forward: forward$1, 28303 inverse: inverse$1, 28304 toPoint: toPoint$1 28305 }; 28306 /** 28307 * Conversion of lat/lon to MGRS. 28308 * 28309 * @param {object} ll Object literal with lat and lon properties on a 28310 * WGS84 ellipsoid. 28311 * @param {int} accuracy Accuracy in digits (5 for 1 m, 4 for 10 m, 3 for 28312 * 100 m, 2 for 1000 m or 1 for 10000 m). Optional, default is 5. 28313 * @return {string} the MGRS string for the given location and accuracy. 28314 */ 28315 function forward$1(ll, accuracy) { 28316 accuracy = accuracy || 5; // default accuracy 1m 28317 return encode(LLtoUTM({ 28318 lat: ll[1], 28319 lon: ll[0] 28320 }), accuracy); 28321 } 28322 28323 /** 28324 * Conversion of MGRS to lat/lon. 28325 * 28326 * @param {string} mgrs MGRS string. 28327 * @return {array} An array with left (longitude), bottom (latitude), right 28328 * (longitude) and top (latitude) values in WGS84, representing the 28329 * bounding box for the provided MGRS reference. 28330 */ 28331 function inverse$1(mgrs) { 28332 var bbox = UTMtoLL(decode(mgrs.toUpperCase())); 28333 if (bbox.lat && bbox.lon) { 28334 return [bbox.lon, bbox.lat, bbox.lon, bbox.lat]; 28335 } 28336 return [bbox.left, bbox.bottom, bbox.right, bbox.top]; 28337 } 28338 28339 function toPoint$1(mgrs) { 28340 var bbox = UTMtoLL(decode(mgrs.toUpperCase())); 28341 if (bbox.lat && bbox.lon) { 28342 return [bbox.lon, bbox.lat]; 28343 } 28344 return [(bbox.left + bbox.right) / 2, (bbox.top + bbox.bottom) / 2]; 28345 } 28346 /** 28347 * Conversion from degrees to radians. 28348 * 28349 * @private 28350 * @param {number} deg the angle in degrees. 28351 * @return {number} the angle in radians. 28352 */ 28353 function degToRad(deg) { 28354 return (deg * (Math.PI / 180.0)); 28355 } 28356 28357 /** 28358 * Conversion from radians to degrees. 28359 * 28360 * @private 28361 * @param {number} rad the angle in radians. 28362 * @return {number} the angle in degrees. 28363 */ 28364 function radToDeg(rad) { 28365 return (180.0 * (rad / Math.PI)); 28366 } 28367 28368 /** 28369 * Converts a set of Longitude and Latitude co-ordinates to UTM 28370 * using the WGS84 ellipsoid. 28371 * 28372 * @private 28373 * @param {object} ll Object literal with lat and lon properties 28374 * representing the WGS84 coordinate to be converted. 28375 * @return {object} Object literal containing the UTM value with easting, 28376 * northing, zoneNumber and zoneLetter properties, and an optional 28377 * accuracy property in digits. Returns null if the conversion failed. 28378 */ 28379 function LLtoUTM(ll) { 28380 var Lat = ll.lat; 28381 var Long = ll.lon; 28382 var a = 6378137.0; //ellip.radius; 28383 var eccSquared = 0.00669438; //ellip.eccsq; 28384 var k0 = 0.9996; 28385 var LongOrigin; 28386 var eccPrimeSquared; 28387 var N, T, C, A, M; 28388 var LatRad = degToRad(Lat); 28389 var LongRad = degToRad(Long); 28390 var LongOriginRad; 28391 var ZoneNumber; 28392 // (int) 28393 ZoneNumber = Math.floor((Long + 180) / 6) + 1; 28394 28395 //Make sure the longitude 180.00 is in Zone 60 28396 if (Long === 180) { 28397 ZoneNumber = 60; 28398 } 28399 28400 // Special zone for Norway 28401 if (Lat >= 56.0 && Lat < 64.0 && Long >= 3.0 && Long < 12.0) { 28402 ZoneNumber = 32; 28403 } 28404 28405 // Special zones for Svalbard 28406 if (Lat >= 72.0 && Lat < 84.0) { 28407 if (Long >= 0.0 && Long < 9.0) { 28408 ZoneNumber = 31; 28409 } 28410 else if (Long >= 9.0 && Long < 21.0) { 28411 ZoneNumber = 33; 28412 } 28413 else if (Long >= 21.0 && Long < 33.0) { 28414 ZoneNumber = 35; 28415 } 28416 else if (Long >= 33.0 && Long < 42.0) { 28417 ZoneNumber = 37; 28418 } 28419 } 28420 28421 LongOrigin = (ZoneNumber - 1) * 6 - 180 + 3; //+3 puts origin 28422 // in middle of 28423 // zone 28424 LongOriginRad = degToRad(LongOrigin); 28425 28426 eccPrimeSquared = (eccSquared) / (1 - eccSquared); 28427 28428 N = a / Math.sqrt(1 - eccSquared * Math.sin(LatRad) * Math.sin(LatRad)); 28429 T = Math.tan(LatRad) * Math.tan(LatRad); 28430 C = eccPrimeSquared * Math.cos(LatRad) * Math.cos(LatRad);
28431 A = Math.cos(LatRad) * (LongRad - LongOriginRad); 28432 28433 M = a * ((1 - eccSquared / 4 - 3 * eccSquared * eccSquared / 64 - 5 * eccSquared * eccSquared * eccSquared / 256) * LatRad - (3 * eccSquared / 8 + 3 * eccSquared * eccSquared / 32 + 45 * eccSquared * eccSquared * eccSquared / 1024) * Math.sin(2 * LatRad) + (15 * eccSquared * eccSquared / 256 + 45 * eccSquared * eccSquared * eccSquared / 1024) * Math.sin(4 * LatRad) - (35 * eccSquared * eccSquared * eccSquared / 3072) * Math.sin(6 * LatRad)); 28434 28435 var UTMEasting = (k0 * N * (A + (1 - T + C) * A * A * A / 6.0 + (5 - 18 * T + T * T + 72 * C - 58 * eccPrimeSquared) * A * A * A * A * A / 120.0) + 500000.0); 28436 28437 var UTMNorthing = (k0 * (M + N * Math.tan(LatRad) * (A * A / 2 + (5 - T + 9 * C + 4 * C * C) * A * A * A * A / 24.0 + (61 - 58 * T + T * T + 600 * C - 330 * eccPrimeSquared) * A * A * A * A * A * A / 720.0))); 28438 if (Lat < 0.0) { 28439 UTMNorthing += 10000000.0; //10000000 meter offset for 28440 // southern hemisphere 28441 } 28442 28443 return { 28444 northing: Math.round(UTMNorthing), 28445 easting: Math.round(UTMEasting), 28446 zoneNumber: ZoneNumber, 28447 zoneLetter: getLetterDesignator(Lat) 28448 }; 28449 } 28450 28451 /** 28452 * Converts UTM coords to lat/long, using the WGS84 ellipsoid. This is a convenience 28453 * class where the Zone can be specified as a single string eg."60N" which 28454 * is then broken down into the ZoneNumber and ZoneLetter. 28455 * 28456 * @private 28457 * @param {object} utm An object literal with northing, easting, zoneNumber 28458 * and zoneLetter properties. If an optional accuracy property is 28459 * provided (in meters), a bounding box will be returned instead of 28460 * latitude and longitude. 28461 * @return {object} An object literal containing either lat and lon values 28462 * (if no accuracy was provided), or top, right, bottom and left values 28463 * for the bounding box calculated according to the provided accuracy. 28464 * Returns null if the conversion failed. 28465 */ 28466 function UTMtoLL(utm) { 28467 28468 var UTMNorthing = utm.northing; 28469 var UTMEasting = utm.easting; 28470 var zoneLetter = utm.zoneLetter; 28471 var zoneNumber = utm.zoneNumber; 28472 // check the ZoneNummber is valid 28473 if (zoneNumber < 0 || zoneNumber > 60) { 28474 return null; 28475 } 28476 28477 var k0 = 0.9996; 28478 var a = 6378137.0; //ellip.radius; 28479 var eccSquared = 0.00669438; //ellip.eccsq; 28480 var eccPrimeSquared; 28481 var e1 = (1 - Math.sqrt(1 - eccSquared)) / (1 + Math.sqrt(1 - eccSquared)); 28482 var N1, T1, C1, R1, D, M; 28483 var LongOrigin; 28484 var mu, phi1Rad; 28485 28486 // remove 500,000 meter offset for longitude 28487 var x = UTMEasting - 500000.0; 28488 var y = UTMNorthing; 28489 28490 // We must know somehow if we are in the Northern or Southern 28491 // hemisphere, this is the only time we use the letter So even 28492 // if the Zone letter isn't exactly correct it should indicate 28493 // the hemisphere correctly 28494 if (zoneLetter < 'N') { 28495 y -= 10000000.0; // remove 10,000,000 meter offset used 28496 // for southern hemisphere 28497 } 28498 28499 // There are 60 zones with zone 1 being at West -180 to -174 28500 LongOrigin = (zoneNumber - 1) * 6 - 180 + 3; // +3 puts origin 28501 // in middle of 28502 // zone 28503 28504 eccPrimeSquared = (eccSquared) / (1 - eccSquared); 28505 28506 M = y / k0; 28507 mu = M / (a * (1 - eccSquared / 4 - 3 * eccSquared * eccSquared / 64 - 5 * eccSquared * eccSquared * eccSquared / 256)); 28508 28509 phi1Rad = mu + (3 * e1 / 2 - 27 * e1 * e1 * e1 / 32) * Math.sin(2 * mu) + (21 * e1 * e1 / 16 - 55 * e1 * e1 * e1 * e1 / 32) * Math.sin(4 * mu) + (151 * e1 * e1 * e1 / 96) * Math.sin(6 * mu); 28510 // double phi1 = ProjMath.radToDeg(phi1Rad); 28511 28512 N1 = a / Math.sqrt(1 - eccSquared * Math.sin(phi1Rad) * Math.sin(phi1Rad)); 28513 T1 = Math.tan(phi1Rad) * Math.tan(phi1Rad); 28514 C1 = eccPrimeSquared * Math.cos(phi1Rad) * Math.cos(phi1Rad); 28515 R1 = a * (1 - eccSquared) / Math.pow(1 - eccSquared * Math.sin(phi1Rad) * Math.sin(phi1Rad), 1.5); 28516 D = x / (N1 * k0); 28517 28518 var lat = phi1Rad - (N1 * Math.tan(phi1Rad) / R1) * (D * D / 2 - (5 + 3 * T1 + 10 * C1 - 4 * C1 * C1 - 9 * eccPrimeSquared) * D * D * D * D / 24 + (61 + 90 * T1 + 298 * C1 + 45 * T
285181 * T1 - 252 * eccPrimeSquared - 3 * C1 * C1) * D * D * D * D * D * D / 720); 28519 lat = radToDeg(lat); 28520 28521 var lon = (D - (1 + 2 * T1 + C1) * D * D * D / 6 + (5 - 2 * C1 + 28 * T1 - 3 * C1 * C1 + 8 * eccPrimeSquared + 24 * T1 * T1) * D * D * D * D * D / 120) / Math.cos(phi1Rad); 28522 lon = LongOrigin + radToDeg(lon); 28523 28524 var result; 28525 if (utm.accuracy) { 28526 var topRight = UTMtoLL({ 28527 northing: utm.northing + utm.accuracy, 28528 easting: utm.easting + utm.accuracy, 28529 zoneLetter: utm.zoneLetter, 28530 zoneNumber: utm.zoneNumber 28531 }); 28532 result = { 28533 top: topRight.lat, 28534 right: topRight.lon, 28535 bottom: lat, 28536 left: lon 28537 }; 28538 } 28539 else { 28540 result = { 28541 lat: lat, 28542 lon: lon 28543 }; 28544 } 28545 return result; 28546 } 28547 28548 /** 28549 * Calculates the MGRS letter designator for the given latitude. 28550 * 28551 * @private 28552 * @param {number} lat The latitude in WGS84 to get the letter designator 28553 * for. 28554 * @return {char} The letter designator. 28555 */ 28556 function getLetterDesignator(lat) { 28557 //This is here as an error flag to show that the Latitude is 28558 //outside MGRS limits 28559 var LetterDesignator = 'Z'; 28560 28561 if ((84 >= lat) && (lat >= 72)) { 28562 LetterDesignator = 'X'; 28563 } 28564 else if ((72 > lat) && (lat >= 64)) { 28565 LetterDesignator = 'W'; 28566 } 28567 else if ((64 > lat) && (lat >= 56)) { 28568 LetterDesignator = 'V'; 28569 } 28570 else if ((56 > lat) && (lat >= 48)) { 28571 LetterDesignator = 'U'; 28572 } 28573 else if ((48 > lat) && (lat >= 40)) { 28574 LetterDesignator = 'T'; 28575 } 28576 else if ((40 > lat) && (lat >= 32)) { 28577 LetterDesignator = 'S'; 28578 } 28579 else if ((32 > lat) && (lat >= 24)) { 28580 LetterDesignator = 'R'; 28581 } 28582 else if ((24 > lat) && (lat >= 16)) { 28583 LetterDesignator = 'Q'; 28584 } 28585 else if ((16 > lat) && (lat >= 8)) { 28586 LetterDesignator = 'P'; 28587 } 28588 else if ((8 > lat) && (lat >= 0)) { 28589 LetterDesignator = 'N'; 28590 } 28591 else if ((0 > lat) && (lat >= -8)) { 28592 LetterDesignator = 'M'; 28593 } 28594 else if ((-8 > lat) && (lat >= -16)) { 28595 LetterDesignator = 'L'; 28596 } 28597 else if ((-16 > lat) && (lat >= -24)) { 28598 LetterDesignator = 'K'; 28599 } 28600 else if ((-24 > lat) && (lat >= -32)) { 28601 LetterDesignator = 'J'; 28602 } 28603 else if ((-32 > lat) && (lat >= -40)) { 28604 LetterDesignator = 'H'; 28605 } 28606 else if ((-40 > lat) && (lat >= -48)) { 28607 LetterDesignator = 'G'; 28608 } 28609 else if ((-48 > lat) && (lat >= -56)) { 28610 LetterDesignator = 'F'; 28611 } 28612 else if ((-56 > lat) && (lat >= -64)) { 28613 LetterDesignator = 'E'; 28614 } 28615 else if ((-64 > lat) && (lat >= -72)) { 28616 LetterDesignator = 'D'; 28617 } 28618 else if ((-72 > lat) && (lat >= -80)) { 28619 LetterDesignator = 'C'; 28620 } 28621 return LetterDesignator; 28622 } 28623 28624 /** 28625 * Encodes a UTM location as MGRS string. 28626 * 28627 * @private 28628 * @param {object} utm An object literal with easting, northing, 28629 * zoneLetter, zoneNumber 28630 * @param {number} accuracy Accuracy in digits (1-5). 28631 * @return {string} MGRS string for the given UTM location. 28632 */ 28633 function encode(utm, accuracy) { 28634 // prepend with leading zeroes 28635 var seasting = "00000" + utm.easting, 28636 snorthing = "00000" + utm.northing; 28637 28638 return utm.zoneNumber + utm.zoneLetter + get100kID(utm.easting, utm.northing, utm.zoneNumber) + seasting.substr(seasting.length - 5, accuracy) + snorthing.substr(snorthing.length - 5, accuracy); 28639 } 28640 28641 /** 28642 * Get the two letter 100k designator for a given UTM easting, 28643 * northing and zone number value. 28644 * 28645 * @private 28646 * @param {number} easting 28647 * @param {number} northing 28648 * @param {number} zoneNumber 28649 * @return the two letter 100k designator for the given UTM location. 28650 */ 28651 function get100kID(easting, northing, zoneNumber) { 28652 var setParm = get100kSetForZone(zoneNumber); 28653 var setColumn = Math.floor(easting / 100000); 28654 var setRow = Math.floor(northing / 100000) % 20; 28655 return getLetter100kID(setColumn, setRow, setParm); 28656 } 28657 28658 /** 28659 * Given a UTM zone number, figure out the MGRS 100K set it is in. 28660 * 28661 * @private 28662 * @param {number} i An UTM zone number. 28663 * @return {number} the 100k set the UTM zone is in. 28664 */ 28665 function get100kSetForZone(i) { 28666 var setParm = i % NUM_100K_SETS; 28667 if (setParm === 0) { 28668 setParm = NUM_100K_SETS; 28669 } 28670 28671 return setParm; 28672 } 28673 28674 /** 28675 * Get the two-letter MGRS 100k designator given information 28676 * translated from the UTM northing, easting and zone number. 28677 * 28678 * @private 28679 * @param {number} column the column index as it relates to the MGRS 28680 * 100k set spreadsheet, created from the UTM easting. 28681 * Values are 1-8. 28682 * @param {number} row the row index as it relates to the MGRS 100k set 28683 * spreadsheet, created from the UTM northing value. Values 28684 * are from 0-19. 28685 * @param {number} parm the set block, as it relates to the MGRS 100k set 28686 * spreadsheet, created from the UTM zone. Values are from 28687 * 1-60. 28688 * @return two letter MGRS 100k code. 28689 */ 28690 function getLetter100kID(column, row, parm) { 28691 // colOrigin and rowOrigin are the letters at the origin of the set 28692 var index = parm - 1; 28693 var colOrigin = SET_ORIGIN_COLUMN_LETTERS.charCodeAt(index); 28694 var rowOrigin = SET_ORIGIN_ROW_LETTERS.charCodeAt(index); 28695 28696 // colInt and rowInt are the letters to build to return 28697 var colInt = colOrigin + column - 1; 28698 var rowInt = rowOrigin + row; 28699 var rollover = false;
28700 28701 if (colInt > Z) { 28702 colInt = colInt - Z + A - 1; 28703 rollover = true; 28704 } 28705 28706 if (colInt === I || (colOrigin < I && colInt > I) || ((colInt > I || colOrigin < I) && rollover)) { 28707 colInt++; 28708 } 28709 28710 if (colInt === O || (colOrigin < O && colInt > O) || ((colInt > O || colOrigin < O) && rollover)) { 28711 colInt++; 28712 28713 if (colInt === I) { 28714 colInt++; 28715 } 28716 } 28717 28718 if (colInt > Z) { 28719 colInt = colInt - Z + A - 1; 28720 } 28721 28722 if (rowInt > V) { 28723 rowInt = rowInt - V + A - 1; 28724 rollover = true; 28725 } 28726 else { 28727 rollover = false; 28728 } 28729 28730 if (((rowInt === I) || ((rowOrigin < I) && (rowInt > I))) || (((rowInt > I) || (rowOrigin < I)) && rollover)) { 28731 rowInt++; 28732 } 28733 28734 if (((rowInt === O) || ((rowOrigin < O) && (rowInt > O))) || (((rowInt > O) || (rowOrigin < O)) && rollover)) { 28735 rowInt++; 28736 28737 if (rowInt === I) { 28738 rowInt++; 28739 } 28740 } 28741 28742 if (rowInt > V) { 28743 rowInt = rowInt - V + A - 1; 28744 } 28745 28746 var twoLetter = String.fromCharCode(colInt) + String.fromCharCode(rowInt); 28747 return twoLetter; 28748 } 28749 28750 /** 28751 * Decode the UTM parameters from a MGRS string. 28752 * 28753 * @private 28754 * @param {string} mgrsString an UPPERCASE coordinate string is expected. 28755 * @return {object} An object literal with easting, northing, zoneLetter, 28756 * zoneNumber and accuracy (in meters) properties. 28757 */ 28758 function decode(mgrsString) { 28759 28760 if (mgrsString && mgrsString.length === 0) { 28761 throw ("MGRSPoint coverting from nothing"); 28762 } 28763 28764 var length = mgrsString.length; 28765 28766 var hunK = null; 28767 var sb = ""; 28768 var testChar; 28769 var i = 0; 28770 28771 // get Zone number 28772 while (!(/[A-Z]/).test(testChar = mgrsString.charAt(i))) { 28773 if (i >= 2) { 28774 throw ("MGRSPoint bad conversion from: " + mgrsString); 28775 } 28776 sb += testChar; 28777 i++; 28778 } 28779 28780 var zoneNumber = parseInt(sb, 10); 28781 28782 if (i === 0 || i + 3 > length) { 28783 // A good MGRS string has to be 4-5 digits long, 28784 // ##AAA/#AAA at least. 28785 throw ("MGRSPoint bad conversion from: " + mgrsString); 28786 } 28787 28788 var zoneLetter = mgrsString.charAt(i++); 28789 28790 // Should we check the zone letter here? Why not. 28791 if (zoneLetter <= 'A' || zoneLetter === 'B' || zoneLetter === 'Y' || zoneLetter >= 'Z' || zoneLetter === 'I' || zoneLetter === 'O') { 28792 throw ("MGRSPoint zone letter " + zoneLetter + " not handled: " + mgrsString); 28793 } 28794 28795 hunK = mgrsString.substring(i, i += 2); 28796 28797 var set = get100kSetForZone(zoneNumber); 28798 28799 var east100k = getEastingFromChar(hunK.charAt(0), set); 28800 var north100k = getNorthingFromChar(hunK.charAt(1), set); 28801 28802 // We have a bug where the northing may be 2000000 too low. 28803 // How 28804 // do we know when to roll over? 28805 28806 while (north100k < getMinNorthing(zoneLetter)) { 28807 north100k += 2000000; 28808 } 28809 28810 // calculate the char index for easting/northing separator 28811 var remainder = length - i; 28812 28813 if (remainder % 2 !== 0) { 28814 throw ("MGRSPoint has to have an even number \nof digits after the zone letter and two 100km letters - front \nhalf for easting meters, second half for \nnorthing meters" + mgrsString); 28815 } 28816 28817 var sep = remainder / 2; 28818 28819 var sepEasting = 0.0; 28820 var sepNorthing = 0.0; 28821 var accuracyBonus, sepEastingString, sepNorthingString, easting, northing; 28822 if (sep > 0) { 28823 accuracyBonus = 100000.0 / Math.pow(10, sep); 28824 sepEastingString = mgrsString.substring(i, i + sep); 28825 sepEasting = parseFloat(sepEastingString) * accuracyBonus; 28826 sepNorthingString = mgrsString.substring(i + sep); 28827 sepNorthing = parseFloat(sepNorthingString) * accuracyBonus; 28828 } 28829 28830 easting = sepEasting + east100k; 28831 northing = sepNorthing + north100k; 28832 28833 return { 28834 easting: easting, 28835 northing: northing, 28836 zoneLetter: zoneLetter, 28837 zoneNumber: zoneNumber, 28838 accuracy: accuracyBonus 28839 }; 28840 } 28841 28842 /** 28843 * Given the first letter from a two-letter MGRS 100k zone, and g
28843iven the 28844 * MGRS table set for the zone number, figure out the easting value that 28845 * should be added to the other, secondary easting value. 28846 * 28847 * @private 28848 * @param {char} e The first letter from a two-letter MGRS 100´k zone. 28849 * @param {number} set The MGRS table set for the zone number. 28850 * @return {number} The easting value for the given letter and set. 28851 */ 28852 function getEastingFromChar(e, set) { 28853 // colOrigin is the letter at the origin of the set for the 28854 // column 28855 var curCol = SET_ORIGIN_COLUMN_LETTERS.charCodeAt(set - 1); 28856 var eastingValue = 100000.0; 28857 var rewindMarker = false; 28858 28859 while (curCol !== e.charCodeAt(0)) { 28860 curCol++; 28861 if (curCol === I) { 28862 curCol++; 28863 } 28864 if (curCol === O) { 28865 curCol++; 28866 } 28867 if (curCol > Z) { 28868 if (rewindMarker) { 28869 throw ("Bad character: " + e); 28870 } 28871 curCol = A; 28872 rewindMarker = true; 28873 } 28874 eastingValue += 100000.0; 28875 } 28876 28877 return eastingValue; 28878 } 28879 28880 /** 28881 * Given the second letter from a two-letter MGRS 100k zone, and given the 28882 * MGRS table set for the zone number, figure out the northing value that 28883 * should be added to the other, secondary northing value. You have to 28884 * remember that Northings are determined from the equator, and the vertical 28885 * cycle of letters mean a 2000000 additional northing meters. This happens 28886 * approx. every 18 degrees of latitude. This method does *NOT* count any 28887 * additional northings. You have to figure out how many 2000000 meters need 28888 * to be added for the zone letter of the MGRS coordinate. 28889 * 28890 * @private 28891 * @param {char} n Second letter of the MGRS 100k zone 28892 * @param {number} set The MGRS table set number, which is dependent on the 28893 * UTM zone number. 28894 * @return {number} The northing value for the given letter and set. 28895 */ 28896 function getNorthingFromChar(n, set) { 28897 28898 if (n > 'V') { 28899 throw ("MGRSPoint given invalid Northing " + n); 28900 } 28901 28902 // rowOrigin is the letter at the origin of the set for the 28903 // column 28904 var curRow = SET_ORIGIN_ROW_LETTERS.charCodeAt(set - 1); 28905 var northingValue = 0.0; 28906 var rewindMarker = false;
28907 28908 while (curRow !== n.charCodeAt(0)) { 28909 curRow++; 28910 if (curRow === I) { 28911 curRow++; 28912 } 28913 if (curRow === O) { 28914 curRow++; 28915 } 28916 // fixing a bug making whole application hang in this loop 28917 // when 'n' is a wrong character 28918 if (curRow > V) { 28919 if (rewindMarker) { // making sure that this loop ends 28920 throw ("Bad character: " + n); 28921 } 28922 curRow = A; 28923 rewindMarker = true; 28924 } 28925 northingValue += 100000.0; 28926 } 28927 28928 return northingValue; 28929 } 28930 28931 /** 28932 * The function getMinNorthing returns the minimum northing value of a MGRS 28933 * zone. 28934 * 28935 * Ported from Geotrans' c Lattitude_Band_Value structure table. 28936 * 28937 * @private 28938 * @param {char} zoneLetter The MGRS zone to get the min northing for. 28939 * @return {number} 28940 */ 28941 function getMinNorthing(zoneLetter) { 28942 var northing; 28943 switch (zoneLetter) { 28944 case 'C': 28945 northing = 1100000.0; 28946 break; 28947 case 'D': 28948 northing = 2000000.0; 28949 break; 28950 case 'E': 28951 northing = 2800000.0; 28952 break; 28953 case 'F': 28954 northing = 3700000.0; 28955 break; 28956 case 'G': 28957 northing = 4600000.0; 28958 break; 28959 case 'H': 28960 northing = 5500000.0; 28961 break; 28962 case 'J': 28963 northing = 6400000.0; 28964 break; 28965 case 'K': 28966 northing = 7300000.0; 28967 break; 28968 case 'L': 28969 northing = 8200000.0; 28970 break; 28971 case 'M': 28972 northing = 9100000.0; 28973 break; 28974 case 'N': 28975 northing = 0.0; 28976 break; 28977 case 'P': 28978 northing = 800000.0; 28979 break; 28980 case 'Q': 28981 northing = 1700000.0; 28982 break; 28983 case 'R': 28984 northing = 2600000.0; 28985 break; 28986 case 'S': 28987 northing = 3500000.0; 28988 break; 28989 case 'T': 28990 northing = 4400000.0; 28991 break; 28992 case 'U': 28993 northing = 5300000.0; 28994 break; 28995 case 'V': 28996 northing = 6200000.0; 28997 break; 28998 case 'W': 28999 northing = 7000000.0; 29000 break; 29001 case 'X': 29002 northing = 7900000.0; 29003 break; 29004 default: 29005 northing = -1.0; 29006 } 29007 if (northing >= 0.0) { 29008 return northing; 29009 } 29010 else { 29011 throw ("Invalid zone letter: " + zoneLetter); 29012 } 29013 29014 } 29015 29016 function Point(x, y, z) { 29017 if (!(this instanceof Point)) { 29018 return new Point(x, y, z); 29019 } 29020 if (Array.isArray(x)) { 29021 this.x = x[0]; 29022 this.y = x[1]; 29023 this.z = x[2] || 0.0; 29024 } else if(typeof x === 'object') { 29025 this.x = x.x; 29026 this.y = x.y; 29027 this.z = x.z || 0.0; 29028 } else if (typeof x === 'string' && typeof y === 'undefined') { 29029 var coords = x.split(','); 29030 this.x = parseFloat(coords[0], 10); 29031 this.y = parseFloat(coords[1], 10); 29032 this.z = parseFloat(coords[2], 10) || 0.0; 29033 } else { 29034 this.x = x; 29035 this.y = y; 29036 this.z = z || 0.0; 29037 } 29038 console.warn('proj4.Point will be removed in version 3, use proj4.toPoint'); 29039 } 29040 29041 Point.fromMGRS = function(mgrsStr) { 29042 return new Point(toPoint$1(mgrsStr)); 29043 }; 29044 Point.prototype.toMGRS = function(accuracy) { 29045 return forward$1([this.x, this.y], accuracy); 29046 }; 29047 29048 var C00 = 1; 29049 var C02 = 0.25; 29050 var C04 = 0.046875; 29051 var C06 = 0.01953125; 29052 var C08 = 0.01068115234375; 29053 var C22 = 0.75; 29054 var C44 = 0.46875; 29055 var C46 = 0.01302083333333333333; 29056 var C48 = 0.00712076822916666666; 29057 var C66 = 0.36458333333333333333; 29058 var C68 = 0.00569661458333333333; 29059 var C88 = 0.3076171875; 29060 29061 var pj_enfn = function(es) { 29062 var en = []; 29063 en[0] = C00 - es * (C02 + es * (C04 + es * (C06 + es * C08))); 29064 en[1] = es * (C22 - es * (C04 + es * (C06 + es * C08))); 29065 var t = es * es; 29066 en[2] = t * (C44 - es * (C46 + es * C48)); 29067 t *= es; 29068 en[3] = t * (C66 - es * C68); 29069 en[4] = t * es * C88; 29070 return en; 29071 }; 29072 29073 var pj_mlfn = function(phi, sphi, cphi, en) { 29074 cphi *= sphi; 29075 sphi *= sphi; 29076 return (en[0] * phi - cphi * (en[1] + sphi * (en[2] + sphi * (en[3] + sphi * en[4])))); 29077 }; 29078 29079 var MAX_ITER = 20; 29080 29081 var pj_inv_mlfn = function(arg, es, en) { 29082 var k = 1 / (1 - es); 29083 var phi = arg; 29084 for (var i = MAX_ITER; i; --i) { /* rarely goes over 2 iterations */ 29085 var s = Math.sin(phi);
29086 var t = 1 - es * s * s; 29087 //t = this.pj_mlfn(phi, s, Math.cos(phi), en) - arg; 29088 //phi -= t * (t * Math.sqrt(t)) * k; 29089 t = (pj_mlfn(phi, s, Math.cos(phi), en) - arg) * (t * Math.sqrt(t)) * k; 29090 phi -= t; 29091 if (Math.abs(t) < EPSLN) { 29092 return phi; 29093 } 29094 } 29095 //..reportError("cass:pj_inv_mlfn: Convergence error"); 29096 return phi; 29097 }; 29098 29099 // Heavily based on this tmerc projection implementation 29100 // https://github.com/mbloch/mapshaper-proj/blob/master/src/projections/tmerc.js 29101 29102 function init$2() { 29103 this.x0 = this.x0 !== undefined ? this.x0 : 0; 29104 this.y0 = this.y0 !== undefined ? this.y0 : 0; 29105 this.long0 = this.long0 !== undefined ? this.long0 : 0; 29106 this.lat0 = this.lat0 !== undefined ? this.lat0 : 0; 29107 29108 if (this.es) { 29109 this.en = pj_enfn(this.es); 29110 this.ml0 = pj_mlfn(this.lat0, Math.sin(this.lat0), Math.cos(this.lat0), this.en); 29111 } 29112 } 29113 29114 /** 29115 Transverse Mercator Forward - long/lat to x/y 29116 long/lat in radians 29117 */ 29118 function forward$2(p) { 29119 var lon = p.x; 29120 var lat = p.y; 29121 29122 var delta_lon = adjust_lon(lon - this.long0); 29123 var con; 29124 var x, y; 29125 var sin_phi = Math.sin(lat); 29126 var cos_phi = Math.cos(lat); 29127 29128 if (!this.es) { 29129 var b = cos_phi * Math.sin(delta_lon); 29130 29131 if ((Math.abs(Math.abs(b) - 1)) < EPSLN) { 29132 return (93); 29133 } 29134 else { 29135 x = 0.5 * this.a * this.k0 * Math.log((1 + b) / (1 - b)) + this.x0; 29136 y = cos_phi * Math.cos(delta_lon) / Math.sqrt(1 - Math.pow(b, 2)); 29137 b = Math.abs(y); 29138 29139 if (b >= 1) { 29140 if ((b - 1) > EPSLN) { 29141 return (93); 29142 } 29143 else { 29144 y = 0; 29145 } 29146 } 29147 else { 29148 y = Math.acos(y); 29149 } 29150 29151 if (lat < 0) { 29152 y = -y; 29153 } 29154 29155 y = this.a * this.k0 * (y - this.lat0) + this.y0; 29156 } 29157 } 29158 else { 29159 var al = cos_phi * delta_lon; 29160 var als = Math.pow(al, 2); 29161 var c = this.ep2 * Math.pow(cos_phi, 2); 29162 var cs = Math.pow(c, 2); 29163 var tq = Math.abs(cos_phi) > EPSLN ? Math.tan(lat) : 0; 29164 var t = Math.pow(tq, 2); 29165 var ts = Math.pow(t, 2); 29166 con = 1 - this.es * Math.pow(sin_phi, 2); 29167 al = al / Math.sqrt(con); 29168 var ml = pj_mlfn(lat, sin_phi, cos_phi, this.en); 29169 29170 x = this.a * (this.k0 * al * (1 + 29171 als / 6 * (1 - t + c + 29172 als / 20 * (5 - 18 * t + ts + 14 * c - 58 * t * c + 29173 als / 42 * (61 + 179 * ts - ts * t - 479 * t))))) + 29174 this.x0; 29175 29176 y = this.a * (this.k0 * (ml - this.ml0 + 29177 sin_phi * delta_lon * al / 2 * (1 + 29178 als / 12 * (5 - t + 9 * c + 4 * cs + 29179 als / 30 * (61 + ts - 58 * t + 270 * c - 330 * t * c + 29180 als / 56 * (1385 + 543 * ts - ts * t - 3111 * t)))))) + 29181 this.y0; 29182 } 29183 29184 p.x = x; 29185 p.y = y; 29186 29187 return p; 29188 } 29189 29190 /** 29191 Transverse Mercator Inverse - x/y to long/lat 29192 */ 29193 function inverse$2(p) { 29194 var con, phi; 29195 var lat, lon; 29196 var x = (p.x - this.x0) * (1 / this.a); 29197 var y = (p.y - this.y0) * (1 / this.a); 29198 29199 if (!this.es) { 29200 var f = Math.exp(x / this.k0); 29201 var g = 0.5 * (f - 1 / f); 29202 var temp = this.lat0 + y / this.k0; 29203 var h = Math.cos(temp); 29204 con = Math.sqrt((1 - Math.pow(h, 2)) / (1 + Math.pow(g, 2))); 29205 lat = Math.asin(con); 29206 29207 if (y < 0) { 29208 lat = -lat; 29209 } 29210 29211 if ((g === 0) && (h === 0)) { 29212 lon = 0; 29213 } 29214 else { 29215 lon = adjust_lon(Math.atan2(g, h) + this.long0); 29216 } 29217 } 29218 else { // ellipsoidal form 29219 con = this.ml0 + y / this.k0; 29220 phi = pj_inv_mlfn(con, this.es, this.en); 29221 29222 if (Math.abs(phi) < HALF_PI) { 29223 var sin_phi = Math.sin(phi); 29224 var cos_phi = Math.cos(phi); 29225 var tan_phi = Math.abs(cos_phi) > EPSLN ? Math.tan(phi) : 0; 29226 var c = this.ep2 * Math.pow(cos_phi, 2); 29227 var cs = Math.pow(c, 2); 29228 var t = Math.pow(tan_phi, 2); 29229 var ts = Math.pow(t, 2); 29230 con = 1 - this.es * Math.pow(sin_phi, 2); 29231 var d = x * Math.sqrt(con) / this.k0; 29232 var ds = Math.pow(d, 2); 29233 con = con * tan_phi; 29234 29235 lat = phi - (con * ds / (1 - this.es)) * 0.5 * (1 - 29236 ds / 12 * (5 + 3 * t - 9 * c * t + c - 4 * cs - 29237 ds / 30 * (61 + 90 * t - 252 * c * t + 45 * ts + 46 * c - 29238 ds / 56 * (1385 + 3633 * t + 4095 * ts + 1574 * ts * t)))); 29239 29240 lon = adjust_lon(this.long0 + (d * (1 - 29241 ds / 6 * (1 + 2 * t + c - 29242 ds / 20 * (5 + 28 * t + 24 * ts + 8 * c * t + 6 * c - 29243 ds / 42 * (61 + 662 * t + 1320 * ts + 720 * ts * t)))) / cos_phi)); 29244 } 29245 else { 29246 lat = HALF_PI * sign(y); 29247 lon = 0; 29248 } 29249 } 29250 29251 p.x = lon; 29252 p.y = lat; 29253 29254 return p; 29255 } 29256 29257 var names$3 = ["Fast_Transverse_Mercator", "Fast Transverse Mercator"]; 29258 var tmerc = { 29259 init: init$2, 29260 forward: forward$2, 29261 inverse: inverse$2, 29262 names: names$3 29263 }; 29264 29265 var sinh = function(x) { 29266 var r = Math.exp(x); 29267 r = (r - 1 / r) / 2; 29268 return r; 29269 }; 29270 29271 var hypot = function(x, y) { 29272 x = Math.abs(x); 29273 y = Math.abs(y); 29274 var a = Math.max(x, y); 29275 var b = Math.min(x, y) / (a ? a : 1); 29276 29277 return a * Math.sqrt(1 + Math.pow(b, 2)); 29278 }; 29279 29280 var log1py = function(x) { 29281 var y = 1 + x; 29282 var z = y - 1; 29283 29284 return z === 0 ? x : x * Math.log(y) / z; 29285 }; 29286 29287 var asinhy = function(x) { 29288 var y = Math.abs(x); 29289 y = log1py(y * (1 + y / (hypot(1, y) + 1))); 29290 29291 return x < 0 ? -y : y; 29292 }; 29293 29294 var gatg = function(pp, B) { 29295 var cos_2B = 2 * Math.cos(2 * B); 29296 var i = pp.length - 1; 29297 var h1 = pp[i]; 29298 var h2 = 0; 29299 var h; 29300 29301 while (--i >= 0) { 29302 h = -h2 + cos_2B * h1 + pp[i]; 29303 h2 = h1; 29304 h1 = h; 29305 } 29306 29307 return (B + h * Math.sin(2 * B)); 29308 }; 29309 29310 var clens = function(pp, arg_r) { 29311 var r = 2 * Math.cos(arg_r); 29312 var i = pp.length - 1; 29313 var hr1 = pp[i]; 29314 var hr2 = 0; 29315 var hr; 29316 29317 while (--i >= 0) { 29318 hr = -hr2 + r * hr1 + pp[i]; 29319 hr2 = hr1; 29320 hr1 = hr; 29321 } 29322 29323 return Math.sin(arg_r) * hr; 29324 }; 29325 29326 var cosh = function(x) { 29327 var r = Math.exp(x); 29328 r = (r + 1 / r) / 2; 29329 return r; 29330 }; 29331 29332 var clens_cmplx = function(pp, arg_r, arg_i) { 29333 var sin_arg_r = Math.sin(arg_r);
29334 var cos_arg_r = Math.cos(arg_r); 29335 var sinh_arg_i = sinh(arg_i); 29336 var cosh_arg_i = cosh(arg_i); 29337 var r = 2 * cos_arg_r * cosh_arg_i; 29338 var i = -2 * sin_arg_r * sinh_arg_i; 29339 var j = pp.length - 1; 29340 var hr = pp[j]; 29341 var hi1 = 0; 29342 var hr1 = 0; 29343 var hi = 0; 29344 var hr2; 29345 var hi2; 29346 29347 while (--j >= 0) { 29348 hr2 = hr1; 29349 hi2 = hi1; 29350 hr1 = hr; 29351 hi1 = hi; 29352 hr = -hr2 + r * hr1 - i * hi1 + pp[j]; 29353 hi = -hi2 + i * hr1 + r * hi1; 29354 } 29355 29356 r = sin_arg_r * cosh_arg_i; 29357 i = cos_arg_r * sinh_arg_i; 29358 29359 return [r * hr - i * hi, r * hi + i * hr]; 29360 }; 29361 29362 // Heavily based on this etmerc projection implementation 29363 // https://github.com/mbloch/mapshaper-proj/blob/master/src/projections/etmerc.js 29364 29365 function init$3() { 29366 if (!this.approx && (isNaN(this.es) || this.es <= 0)) { 29367 throw new Error('Incorrect elliptical usage. Try using the +approx option in the proj string, or PROJECTION["Fast_Transverse_Mercator"] in the WKT.'); 29368 } 29369 if (this.approx) { 29370 // When '+approx' is set, use tmerc instead 29371 tmerc.init.apply(this); 29372 this.forward = tmerc.forward; 29373 this.inverse = tmerc.inverse; 29374 } 29375 29376 this.x0 = this.x0 !== undefined ? this.x0 : 0; 29377 this.y0 = this.y0 !== undefined ? this.y0 : 0; 29378 this.long0 = this.long0 !== undefined ? this.long0 : 0; 29379 this.lat0 = this.lat0 !== undefined ? this.lat0 : 0; 29380 29381 this.cgb = []; 29382 this.cbg = []; 29383 this.utg = []; 29384 this.gtu = []; 29385 29386 var f = this.es / (1 + Math.sqrt(1 - this.es)); 29387 var n = f / (2 - f); 29388 var np = n; 29389 29390 this.cgb[0] = n * (2 + n * (-2 / 3 + n * (-2 + n * (116 / 45 + n * (26 / 45 + n * (-2854 / 675 )))))); 29391 this.cbg[0] = n * (-2 + n * ( 2 / 3 + n * ( 4 / 3 + n * (-82 / 45 + n * (32 / 45 + n * (4642 / 4725)))))); 29392 29393 np = np * n; 29394 this.cgb[1] = np * (7 / 3 + n * (-8 / 5 + n * (-227 / 45 + n * (2704 / 315 + n * (2323 / 945))))); 29395 this.cbg[1] = np * (5 / 3 + n * (-16 / 15 + n * ( -13 / 9 + n * (904 / 315 + n * (-1522 / 945))))); 29396 29397 np = np * n; 29398 this.cgb[2] = np * (56 / 15 + n * (-136 / 35 + n * (-1262 / 105 + n * (73814 / 2835)))); 29399 this.cbg[2] = np * (-26 / 15 + n * (34 / 21 + n * (8 / 5 + n * (-12686 / 2835)))); 29400 29401 np = np * n; 29402 this.cgb[3] = np * (4279 / 630 + n * (-332 / 35 + n * (-399572 / 14175))); 29403 this.cbg[3] = np * (1237 / 630 + n * (-12 / 5 + n * ( -24832 / 14175))); 29404 29405 np = np * n; 29406 this.cgb[4] = np * (4174 / 315 + n * (-144838 / 6237)); 29407 this.cbg[4] = np * (-734 / 315 + n * (109598 / 31185)); 29408 29409 np = np * n; 29410 this.cgb[5] = np * (601676 / 22275); 29411 this.cbg[5] = np * (444337 / 155925); 29412 29413 np = Math.pow(n, 2); 29414 this.Qn = this.k0 / (1 + n) * (1 + np * (1 / 4 + np * (1 / 64 + np / 256))); 29415 29416 this.utg[0] = n * (-0.5 + n * ( 2 / 3 + n * (-37 / 96 + n * ( 1 / 360 + n * (81 / 512 + n * (-96199 / 604800)))))); 29417 this.gtu[0] = n * (0.5 + n * (-2 / 3 + n * (5 / 16 + n * (41 / 180 + n * (-127 / 288 + n * (7891 / 37800)))))); 29418 29419 this.utg[1] = np * (-1 / 48 + n * (-1 / 15 + n * (437 / 1440 + n * (-46 / 105 + n * (1118711 / 3870720))))); 29420 this.gtu[1] = np * (13 / 48 + n * (-3 / 5 + n * (557 / 1440 + n * (281 / 630 + n * (-1983433 / 1935360))))); 29421 29422 np = np * n; 29423 this.utg[2] = np * (-17 / 480 + n * (37 / 840 + n * (209 / 4480 + n * (-5569 / 90720 )))); 29424 this.gtu[2] = np * (61 / 240 + n * (-103 / 140 + n * (15061 / 26880 + n * (167603 / 181440)))); 29425 29426 np = np * n; 29427 this.utg[3] = np * (-4397 / 161280 + n * (11 / 504 + n * (830251 / 7257600))); 29428 this.gtu[3] = np * (49561 / 161280 + n * (-179 / 168 + n * (6601661 / 7257600))); 29429 29430 np = np * n; 29431 this.utg[4] = np * (-4583 / 161280 + n * (108847 / 3991680)); 29432 this.gtu[4] = np * (34729 / 80640 + n * (-3418889 / 1995840)); 29433 29434 np = np * n; 29435 this.utg[5] = np * (-20648693 / 638668800); 29436 this.gtu[5] = np * (212378941 / 319334400); 29437 29438 var Z = gatg(this.cbg, this.lat0); 29439 this.Zb = -this.Qn * (Z + clens(this.gtu, 2 * Z)); 29440 } 29441 29442 function forward$3(p) { 29443 var Ce = adjust_lon(p.x - this.long0); 29444 var Cn = p.y; 29445 29446 Cn = gatg(this.cbg, Cn); 29447 var sin_Cn = Math.sin(Cn); 29448 var cos_Cn = Math.cos(Cn); 29449 var sin_Ce = Math.sin(Ce);
29450 var cos_Ce = Math.cos(Ce); 29451 29452 Cn = Math.atan2(sin_Cn, cos_Ce * cos_Cn); 29453 Ce = Math.atan2(sin_Ce * cos_Cn, hypot(sin_Cn, cos_Cn * cos_Ce)); 29454 Ce = asinhy(Math.tan(Ce)); 29455 29456 var tmp = clens_cmplx(this.gtu, 2 * Cn, 2 * Ce); 29457 29458 Cn = Cn + tmp[0]; 29459 Ce = Ce + tmp[1]; 29460 29461 var x; 29462 var y; 29463 29464 if (Math.abs(Ce) <= 2.623395162778) { 29465 x = this.a * (this.Qn * Ce) + this.x0; 29466 y = this.a * (this.Qn * Cn + this.Zb) + this.y0; 29467 } 29468 else { 29469 x = Infinity; 29470 y = Infinity; 29471 } 29472 29473 p.x = x; 29474 p.y = y; 29475 29476 return p; 29477 } 29478 29479 function inverse$3(p) { 29480 var Ce = (p.x - this.x0) * (1 / this.a); 29481 var Cn = (p.y - this.y0) * (1 / this.a); 29482 29483 Cn = (Cn - this.Zb) / this.Qn; 29484 Ce = Ce / this.Qn; 29485 29486 var lon; 29487 var lat; 29488 29489 if (Math.abs(Ce) <= 2.623395162778) { 29490 var tmp = clens_cmplx(this.utg, 2 * Cn, 2 * Ce); 29491 29492 Cn = Cn + tmp[0]; 29493 Ce = Ce + tmp[1]; 29494 Ce = Math.atan(sinh(Ce)); 29495 29496 var sin_Cn = Math.sin(Cn); 29497 var cos_Cn = Math.cos(Cn); 29498 var sin_Ce = Math.sin(Ce); 29499 var cos_Ce = Math.cos(Ce); 29500 29501 Cn = Math.atan2(sin_Cn * cos_Ce, hypot(sin_Ce, cos_Ce * cos_Cn)); 29502 Ce = Math.atan2(sin_Ce, cos_Ce * cos_Cn); 29503 29504 lon = adjust_lon(Ce + this.long0); 29505 lat = gatg(this.cgb, Cn); 29506 } 29507 else { 29508 lon = Infinity; 29509 lat = Infinity; 29510 } 29511 29512 p.x = lon; 29513 p.y = lat; 29514 29515 return p; 29516 } 29517 29518 var names$4 = ["Extended_Transverse_Mercator", "Extended Transverse Mercator", "etmerc", "Transverse_Mercator", "Transverse Mercator", "Gauss Kruger", "Gauss_Kruger", "tmerc"]; 29519 var etmerc = { 29520 init: init$3, 29521 forward: forward$3, 29522 inverse: inverse$3, 29523 names: names$4 29524 }; 29525 29526 var adjust_zone = function(zone, lon) { 29527 if (zone === undefined) { 29528 zone = Math.floor((adjust_lon(lon) + Math.PI) * 30 / Math.PI) + 1; 29529 29530 if (zone < 0) { 29531 return 0; 29532 } else if (zone > 60) { 29533 return 60; 29534 } 29535 } 29536 return zone; 29537 }; 29538 29539 var dependsOn = 'etmerc'; 29540 function init$4() { 29541 var zone = adjust_zone(this.zone, this.long0); 29542 if (zone === undefined) { 29543 throw new Error('unknown utm zone'); 29544 } 29545 this.lat0 = 0; 29546 this.long0 = ((6 * Math.abs(zone)) - 183) * D2R; 29547 this.x0 = 500000; 29548 this.y0 = this.utmSouth ? 10000000 : 0; 29549 this.k0 = 0.9996; 29550 29551 etmerc.init.apply(this); 29552 this.forward = etmerc.forward; 29553 this.inverse = etmerc.inverse; 29554 } 29555 29556 var names$5 = ["Universal Transverse Mercator System", "utm"]; 29557 var utm = { 29558 init: init$4, 29559 names: names$5, 29560 dependsOn: dependsOn 29561 }; 29562 29563 var srat = function(esinp, exp) { 29564 return (Math.pow((1 - esinp) / (1 + esinp), exp)); 29565 }; 29566 29567 var MAX_ITER$1 = 20; 29568 function init$6() { 29569 var sphi = Math.sin(this.lat0); 29570 var cphi = Math.cos(this.lat0); 29571 cphi *= cphi; 29572 this.rc = Math.sqrt(1 - this.es) / (1 - this.es * sphi * sphi); 29573 this.C = Math.sqrt(1 + this.es * cphi * cphi / (1 - this.es)); 29574 this.phic0 = Math.asin(sphi / this.C); 29575 this.ratexp = 0.5 * this.C * this.e; 29576 this.K = Math.tan(0.5 * this.phic0 + FORTPI) / (Math.pow(Math.tan(0.5 * this.lat0 + FORTPI), this.C) * srat(this.e * sphi, this.ratexp)); 29577 } 29578 29579 function forward$5(p) { 29580 var lon = p.x; 29581 var lat = p.y; 29582 29583 p.y = 2 * Math.atan(this.K * Math.pow(Math.tan(0.5 * lat + FORTPI), this.C) * srat(this.e * Math.sin(lat), this.ratexp)) - HALF_PI; 29584 p.x = this.C * lon; 29585 return p; 29586 } 29587 29588 function inverse$5(p) { 29589 var DEL_TOL = 1e-14; 29590 var lon = p.x / this.C; 29591 var lat = p.y; 29592 var num = Math.pow(Math.tan(0.5 * lat + FORTPI) / this.K, 1 / this.C); 29593 for (var i = MAX_ITER$1; i > 0; --i) { 29594 lat = 2 * Math.atan(num * srat(this.e * Math.sin(p.y), - 0.5 * this.e)) - HALF_PI; 29595 if (Math.abs(lat - p.y) < DEL_TOL) { 29596 break; 29597 } 29598 p.y = lat; 29599 } 29600 /* convergence failed */ 29601 if (!i) { 29602 return null; 29603 } 29604 p.x = lon; 29605 p.y = lat; 29606 return p; 29607 } 29608 29609 var names$7 = ["gauss"]; 29610 var gauss = { 29611 init: init$6, 29612 forward: forward$5, 29613 inverse: inverse$5, 29614 names: names$7 29615 }; 29616 29617 function init$5() { 29618 gauss.init.apply(this); 29619 if (!this.rc) { 29620 return; 29621 } 29622 this.sinc0 = Math.sin(this.phic0); 29623 this.cosc0 = Math.cos(this.phic0); 29624 this.R2 = 2 * this.rc; 29625 if (!this.title) { 29626 this.title = "Oblique Stereographic Alternative"; 29627 } 29628 } 29629 29630 function forward$4(p) { 29631 var sinc, cosc, cosl, k; 29632 p.x = adjust_lon(p.x - this.long0); 29633 gauss.forward.apply(this, [p]); 29634 sinc = Math.sin(p.y); 29635 cosc = Math.cos(p.y);
29636 cosl = Math.cos(p.x); 29637 k = this.k0 * this.R2 / (1 + this.sinc0 * sinc + this.cosc0 * cosc * cosl); 29638 p.x = k * cosc * Math.sin(p.x); 29639 p.y = k * (this.cosc0 * sinc - this.sinc0 * cosc * cosl); 29640 p.x = this.a * p.x + this.x0; 29641 p.y = this.a * p.y + this.y0; 29642 return p; 29643 } 29644 29645 function inverse$4(p) { 29646 var sinc, cosc, lon, lat, rho; 29647 p.x = (p.x - this.x0) / this.a; 29648 p.y = (p.y - this.y0) / this.a; 29649 29650 p.x /= this.k0; 29651 p.y /= this.k0; 29652 if ((rho = hypot(p.x, p.y))) { 29653 var c = 2 * Math.atan2(rho, this.R2); 29654 sinc = Math.sin(c); 29655 cosc = Math.cos(c); 29656 lat = Math.asin(cosc * this.sinc0 + p.y * sinc * this.cosc0 / rho); 29657 lon = Math.atan2(p.x * sinc, rho * this.cosc0 * cosc - p.y * this.sinc0 * sinc); 29658 } 29659 else { 29660 lat = this.phic0; 29661 lon = 0; 29662 } 29663 29664 p.x = lon; 29665 p.y = lat; 29666 gauss.inverse.apply(this, [p]); 29667 p.x = adjust_lon(p.x + this.long0); 29668 return p; 29669 } 29670 29671 var names$6 = ["Stereographic_North_Pole", "Oblique_Stereographic", "sterea","Oblique Stereographic Alternative","Double_Stereographic"]; 29672 var sterea = { 29673 init: init$5, 29674 forward: forward$4, 29675 inverse: inverse$4, 29676 names: names$6 29677 }; 29678 29679 function ssfn_(phit, sinphi, eccen) { 29680 sinphi *= eccen; 29681 return (Math.tan(0.5 * (HALF_PI + phit)) * Math.pow((1 - sinphi) / (1 + sinphi), 0.5 * eccen)); 29682 } 29683 29684 function init$7() { 29685 29686 // setting default parameters 29687 this.x0 = this.x0 || 0; 29688 this.y0 = this.y0 || 0; 29689 this.lat0 = this.lat0 || 0; 29690 this.long0 = this.long0 || 0; 29691 29692 this.coslat0 = Math.cos(this.lat0); 29693 this.sinlat0 = Math.sin(this.lat0); 29694 if (this.sphere) { 29695 if (this.k0 === 1 && !isNaN(this.lat_ts) && Math.abs(this.coslat0) <= EPSLN) { 29696 this.k0 = 0.5 * (1 + sign(this.lat0) * Math.sin(this.lat_ts)); 29697 } 29698 } 29699 else { 29700 if (Math.abs(this.coslat0) <= EPSLN) { 29701 if (this.lat0 > 0) { 29702 //North pole 29703 //trace('stere:north pole'); 29704 this.con = 1; 29705 } 29706 else { 29707 //South pole 29708 //trace('stere:south pole'); 29709 this.con = -1; 29710 } 29711 } 29712 this.cons = Math.sqrt(Math.pow(1 + this.e, 1 + this.e) * Math.pow(1 - this.e, 1 - this.e)); 29713 if (this.k0 === 1 && !isNaN(this.lat_ts) && Math.abs(this.coslat0) <= EPSLN && Math.abs(Math.cos(this.lat_ts)) > EPSLN) { 29714 // When k0 is 1 (default value) and lat_ts is a vaild number and lat0 is at a pole and lat_ts is not at a pole 29715 // Recalculate k0 using formula 21-35 from p161 of Snyder, 1987 29716 this.k0 = 0.5 * this.cons * msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts)) / tsfnz(this.e, this.con * this.lat_ts, this.con * Math.sin(this.lat_ts)); 29717 } 29718 this.ms1 = msfnz(this.e, this.sinlat0, this.coslat0); 29719 this.X0 = 2 * Math.atan(this.ssfn_(this.lat0, this.sinlat0, this.e)) - HALF_PI; 29720 this.cosX0 = Math.cos(this.X0); 29721 this.sinX0 = Math.sin(this.X0); 29722 } 29723 } 29724 29725 // Stereographic forward equations--mapping lat,long to x,y 29726 function forward$6(p) { 29727 var lon = p.x; 29728 var lat = p.y; 29729 var sinlat = Math.sin(lat); 29730 var coslat = Math.cos(lat); 29731 var A, X, sinX, cosX, ts, rh; 29732 var dlon = adjust_lon(lon - this.long0); 29733 29734 if (Math.abs(Math.abs(lon - this.long0) - Math.PI) <= EPSLN && Math.abs(lat + this.lat0) <= EPSLN) { 29735 //case of the origine point 29736 //trace('stere:this is the origin point'); 29737 p.x = NaN; 29738 p.y = NaN; 29739 return p; 29740 } 29741 if (this.sphere) { 29742 //trace('stere:sphere case'); 29743 A = 2 * this.k0 / (1 + this.sinlat0 * sinlat + this.coslat0 * coslat * Math.cos(dlon)); 29744 p.x = this.a * A * coslat * Math.sin(dlon) + this.x0; 29745 p.y = this.a * A * (this.coslat0 * sinlat - this.sinlat0 * coslat * Math.cos(dlon)) + this.y0; 29746 return p; 29747 } 29748 else { 29749 X = 2 * Math.atan(this.ssfn_(lat, sinlat, this.e)) - HALF_PI; 29750 cosX = Math.cos(X); 29751 sinX = Math.sin(X); 29752 if (Math.abs(this.coslat0) <= EPSLN) { 29753 ts = tsfnz(this.e, lat * this.con, this.con * sinlat); 29754 rh = 2 * this.a * this.k0 * ts / this.cons; 29755 p.x = this.x0 + rh * Math.sin(lon - this.long0); 29756 p.y = this.y0 - this.con * rh * Math.cos(lon - this.long0); 29757 //trace(p.toString()); 29758 return p; 29759 } 29760 else if (Math.abs(this.sinlat0) < EPSLN) { 29761 //Eq 29762 //trace('stere:equateur'); 29763 A = 2 * this.a * this.k0 / (1 + cosX * Math.cos(dlon)); 29764 p.y = A * sinX; 29765 } 29766 else { 29767 //other case 29768 //trace('stere:normal case'); 29769 A = 2 * this.a * this.k0 * this.ms1 / (this.cosX0 * (1 + this.sinX0 * sinX + this.cosX0 * cosX * Math.cos(dlon))); 29770 p.y = A * (this.cosX0 * sinX - this.sinX0 * cosX * Math.cos(dlon)) + this.y0; 29771 } 29772 p.x = A * cosX * Math.sin(dlon) + this.x0; 29773 } 29774 //trace(p.toString()); 29775 return p; 29776 } 29777 29778 //* Stereographic inverse equations--mapping x,y to lat/long 29779 function inverse$6(p) { 29780 p.x -= this.x0; 29781 p.y -= this.y0; 29782 var lon, lat, ts, ce, Chi; 29783 var rh = Math.sqrt(p.x * p.x + p.y * p.y); 29784 if (this.sphere) { 29785 var c = 2 * Math.atan(rh / (2 * this.a * this.k0)); 29786 lon = this.long0; 29787 lat = this.lat0; 29788 if (rh <= EPSLN) { 29789 p.x = lon; 29790 p.y = lat; 29791 return p; 29792 } 29793 lat = Math.asin(Math.cos(c) * this.sinlat0 + p.y * Math.sin(c) * this.coslat0 / rh); 29794 if (Math.abs(this.coslat0) < EPSLN) { 29795 if (this.lat0 > 0) { 29796 lon = adjust_lon(this.long0 + Math.atan2(p.x, - 1 * p.y)); 29797 } 29798 else { 29799 lon = adjust_lon(this.long0 + Math.atan2(p.x, p.y)); 29800 } 29801 } 29802 else { 29803 lon = adjust_lon(this.long0 + Math.atan2(p.x * Math.sin(c), rh * this.coslat0 * Math.cos(c) - p.y * this.sinlat0 * Math.sin(c))); 29804 } 29805 p.x = lon; 29806 p.y = lat; 29807 return p; 29808 } 29809 else { 29810 if (Math.abs(this.coslat0) <= EPSLN) { 29811 if (rh <= EPSLN) { 29812 lat = this.lat0; 29813 lon = this.long0; 29814 p.x = lon; 29815 p.y = lat; 29816 //trace(p.toString()); 29817 return p; 29818 } 29819 p.x *= this.con; 29820 p.y *= this.con; 29821 ts = rh * this.cons / (2 * this.a * this.k0); 29822 lat = this.con * phi2z(this.e, ts); 29823 lon = this.con * adjust_lon(this.con * this.long0 + Math.atan2(p.x, - 1 * p.y)); 29824 } 29825 else { 29826 ce = 2 * Math.atan(rh * this.cosX0 / (2 * this.a * this.k0 * this.ms1)); 29827 lon = this.long0; 29828 if (rh <= EPSLN) { 29829 Chi = this.X0; 29830 } 29831 else { 29832 Chi = Math.asin(Math.cos(ce) * this.sinX0 + p.y * Math.sin(ce) * this.cosX0 / rh); 29833 lon = adjust_lon(this.long0 + Math.atan2(p.x * Math.sin(ce), rh * this.cosX0 * Math.cos(ce) - p.y * this.sinX0 * Math.sin(ce))); 29834 } 29835 lat = -1 * phi2z(this.e, Math.tan(0.5 * (HALF_PI + Chi))); 29836 } 29837 } 29838 p.x = lon; 29839 p.y = lat; 29840 29841 //trace(p.toString()); 29842 return p; 29843 29844 } 29845 29846 var names$8 = ["stere", "Stereographic_South_Pole", "Polar Stereographic (variant B)", "Polar_Stereographic"]; 29847 var stere = { 29848 init: init$7, 29849 forward: forward$6, 29850 inverse: inverse$6, 29851 names: names$8, 29852 ssfn_: ssfn_ 29853 }; 29854 29855 /* 29856 references: 29857 Formules et constantes pour le Calcul pour la 29858 projection cylindrique conforme à axe oblique et pour la transformation entre 29859 des systèmes de référence. 29860 http://www.swisstopo.admin.ch/internet/swisstopo/fr/home/topics/survey/sys/refsys/switzerland.parsysrelated1.31216.downloadList.77004.DownloadFile.tmp/swissprojectionfr.pdf 29861 */ 29862 29863 function init$8() { 29864 var phy0 = this.lat0; 29865 this.lambda0 = this.long0; 29866 var sinPhy0 = Math.sin(phy0); 29867 var semiMajorAxis = this.a; 29868 var invF = this.rf; 29869 var flattening = 1 / invF; 29870 var e2 = 2 * flattening - Math.pow(flattening, 2); 29871 var e = this.e = Math.sqrt(e2); 29872 this.R = this.k0 * semiMajorAxis * Math.sqrt(1 - e2) / (1 - e2 * Math.pow(sinPhy0, 2)); 29873 this.alpha = Math.sqrt(1 + e2 / (1 - e2) * Math.pow(Math.cos(phy0), 4)); 29874 this.b0 = Math.asin(sinPhy0 / this.alpha); 29875 var k1 = Math.log(Math.tan(Math.PI / 4 + this.b0 / 2)); 29876 var k2 = Math.log(Math.tan(Math.PI / 4 + phy0 / 2)); 29877 var k3 = Math.log((1 + e * sinPhy0) / (1 - e * sinPhy0)); 29878 this.K = k1 - this.alpha * k2 + this.alpha * e / 2 * k3; 29879 } 29880 29881 function forward$7(p) { 29882 var Sa1 = Math.log(Math.tan(Math.PI / 4 - p.y / 2)); 29883 var Sa2 = this.e / 2 * Math.log((1 + this.e * Math.sin(p.y)) / (1 - this.e * Math.sin(p.y))); 29884 var S = -this.alpha * (Sa1 + Sa2) + this.K; 29885 29886 // spheric latitude 29887 var b = 2 * (Math.atan(Math.exp(S)) - Math.PI / 4); 29888 29889 // spheric longitude 29890 var I = this.alpha * (p.x - this.lambda0); 29891 29892 // psoeudo equatorial rotation 29893 var rotI = Math.atan(Math.sin(I) / (Math.sin(this.b0) * Math.tan(b) + Math.
29893cos(this.b0) * Math.cos(I))); 29894 29895 var rotB = Math.asin(Math.cos(this.b0) * Math.sin(b) - Math.sin(this.b0) * Math.cos(b) * Math.cos(I)); 29896 29897 p.y = this.R / 2 * Math.log((1 + Math.sin(rotB)) / (1 - Math.sin(rotB))) + this.y0; 29898 p.x = this.R * rotI + this.x0; 29899 return p; 29900 } 29901 29902 function inverse$7(p) { 29903 var Y = p.x - this.x0; 29904 var X = p.y - this.y0; 29905 29906 var rotI = Y / this.R; 29907 var rotB = 2 * (Math.atan(Math.exp(X / this.R)) - Math.PI / 4); 29908 29909 var b = Math.asin(Math.cos(this.b0) * Math.sin(rotB) + Math.sin(this.b0) * Math.cos(rotB) * Math.cos(rotI)); 29910 var I = Math.atan(Math.sin(rotI) / (Math.cos(this.b0) * Math.cos(rotI) - Math.sin(this.b0) * Math.tan(rotB))); 29911 29912 var lambda = this.lambda0 + I / this.alpha; 29913 29914 var S = 0; 29915 var phy = b; 29916 var prevPhy = -1000; 29917 var iteration = 0; 29918 while (Math.abs(phy - prevPhy) > 0.0000001) { 29919 if (++iteration > 20) { 29920 //...reportError("omercFwdInfinity"); 29921 return; 29922 } 29923 //S = Math.log(Math.tan(Math.PI / 4 + phy / 2)); 29924 S = 1 / this.alpha * (Math.log(Math.tan(Math.PI / 4 + b / 2)) - this.K) + this.e * Math.log(Math.tan(Math.PI / 4 + Math.asin(this.e * Math.sin(phy)) / 2)); 29925 prevPhy = phy; 29926 phy = 2 * Math.atan(Math.exp(S)) - Math.PI / 2; 29927 } 29928 29929 p.x = lambda; 29930 p.y = phy; 29931 return p; 29932 } 29933 29934 var names$9 = ["somerc"]; 29935 var somerc = { 29936 init: init$8, 29937 forward: forward$7, 29938 inverse: inverse$7, 29939 names: names$9 29940 }; 29941 29942 var TOL = 1e-7; 29943 29944 function isTypeA(P) { 29945 var typeAProjections = ['Hotine_Oblique_Mercator','Hotine_Oblique_Mercator_Azimuth_Natural_Origin']; 29946 var projectionName = typeof P.PROJECTION === "object" ? Object.keys(P.PROJECTION)[0] : P.PROJECTION; 29947 29948 return 'no_uoff' in P || 'no_off' in P || typeAProjections.indexOf(projectionName) !== -1; 29949 } 29950 29951 29952 /* Initialize the Oblique Mercator projection 29953 ------------------------------------------*/ 29954 function init$9() { 29955 var con, com, cosph0, D, F, H, L, sinph0, p, J, gamma = 0, 29956 gamma0, lamc = 0, lam1 = 0, lam2 = 0, phi1 = 0, phi2 = 0, alpha_c = 0; 29957 29958 // only Type A uses the no_off or no_uoff property 29959 // https://github.com/OSGeo/proj.4/issues/104 29960 this.no_off = isTypeA(this); 29961 this.no_rot = 'no_rot' in this; 29962 29963 var alp = false; 29964 if ("alpha" in this) { 29965 alp = true; 29966 } 29967 29968 var gam = false; 29969 if ("rectified_grid_angle" in this) { 29970 gam = true; 29971 } 29972 29973 if (alp) { 29974 alpha_c = this.alpha; 29975 } 29976 29977 if (gam) { 29978 gamma = (this.rectified_grid_angle * D2R); 29979 } 29980 29981 if (alp || gam) { 29982 lamc = this.longc; 29983 } else { 29984 lam1 = this.long1; 29985 phi1 = this.lat1; 29986 lam2 = this.long2; 29987 phi2 = this.lat2; 29988 29989 if (Math.abs(phi1 - phi2) <= TOL || (con = Math.abs(phi1)) <= TOL || 29990 Math.abs(con - HALF_PI) <= TOL || Math.abs(Math.abs(this.lat0) - HALF_PI) <= TOL || 29991 Math.abs(Math.abs(phi2) - HALF_PI) <= TOL) { 29992 throw new Error(); 29993 } 29994 } 29995 29996 var one_es = 1.0 - this.es; 29997 com = Math.sqrt(one_es); 29998 29999 if (Math.abs(this.lat0) > EPSLN) { 30000 sinph0 = Math.sin(this.lat0); 30001 cosph0 = Math.cos(this.lat0); 30002 con = 1 - this.es * sinph0 * sinph0; 30003 this.B = cosph0 * cosph0; 30004 this.B = Math.sqrt(1 + this.es * this.B * this.B / one_es); 30005 this.A = this.B * this.k0 * com / con; 30006 D = this.B * com / (cosph0 * Math.sqrt(con)); 30007 F = D * D -1; 30008 30009 if (F <= 0) { 30010 F = 0; 30011 } else { 30012 F = Math.sqrt(F); 30013 if (this.lat0 < 0) { 30014 F = -F; 30015 } 30016 } 30017 30018 this.E = F += D; 30019 this.E *= Math.pow(tsfnz(this.e, this.lat0, sinph0), this.B); 30020 } else { 30021 this.B = 1 / com; 30022 this.A = this.k0; 30023 this.E = D = F = 1; 30024 } 30025 30026 if (alp || gam) { 30027 if (alp) { 30028 gamma0 = Math.asin(Math.sin(alpha_c) / D); 30029 if (!gam) { 30030 gamma = alpha_c; 30031 } 30032 } else { 30033 gamma0 = gamma; 30034 alpha_c = Math.asin(D * Math.sin(gamma0)); 30035 } 30036 this.lam0 = lamc - Math.asin(0.5 * (F - 1 / F) * Math.tan(gamma0)) / this.B; 30037 } else { 30038 H = Math.pow(tsfnz(this.e, phi1, Math.sin(phi1)), this.B); 30039 L = Math.pow(tsfnz(this.e, phi2, Math.sin(phi2)), this.B); 30040 F = this.E / H; 30041 p = (L - H) / (L + H); 30042 J = this.E * this.E; 30043 J = (J - L * H) / (J + L * H); 30044 con = lam1 - lam2; 30045 30046 if (con < -Math.pi) { 30047 lam2 -=TWO_PI; 30048 } else if (con > Math.pi) { 30049 lam2 += TWO_PI; 30050 } 30051 30052 this.lam0 = adjust_lon(0.5 * (lam1 + lam2) - Math.atan(J * Math.tan(0.5 * this.B * (lam1 - lam2)) / p) / this.B); 30053 gamma0 = Math.atan(2 * Math.sin(this.B * adjust_lon(lam1 - this.lam0)) / (F - 1 / F)); 30054 gamma = alpha_c = Math.asin(D * Math.sin(gamma0)); 30055 } 30056 30057 this.singam = Math.sin(gamma0);
30058 this.cosgam = Math.cos(gamma0); 30059 this.sinrot = Math.sin(gamma); 30060 this.cosrot = Math.cos(gamma); 30061 30062 this.rB = 1 / this.B; 30063 this.ArB = this.A * this.rB; 30064 this.BrA = 1 / this.ArB; 30065 if (this.no_off) { 30066 this.u_0 = 0; 30067 } else { 30068 this.u_0 = Math.abs(this.ArB * Math.atan(Math.sqrt(D * D - 1) / Math.cos(alpha_c))); 30069 30070 if (this.lat0 < 0) { 30071 this.u_0 = - this.u_0; 30072 } 30073 } 30074 30075 F = 0.5 * gamma0; 30076 this.v_pole_n = this.ArB * Math.log(Math.tan(FORTPI - F)); 30077 this.v_pole_s = this.ArB * Math.log(Math.tan(FORTPI + F)); 30078 } 30079 30080 30081 /* Oblique Mercator forward equations--mapping lat,long to x,y 30082 ----------------------------------------------------------*/ 30083 function forward$8(p) { 30084 var coords = {}; 30085 var S, T, U, V, W, temp, u, v; 30086 p.x = p.x - this.lam0; 30087 30088 if (Math.abs(Math.abs(p.y) - HALF_PI) > EPSLN) { 30089 W = this.E / Math.pow(tsfnz(this.e, p.y, Math.sin(p.y)), this.B); 30090 30091 temp = 1 / W; 30092 S = 0.5 * (W - temp); 30093 T = 0.5 * (W + temp); 30094 V = Math.sin(this.B * p.x); 30095 U = (S * this.singam - V * this.cosgam) / T; 30096 30097 if (Math.abs(Math.abs(U) - 1.0) < EPSLN) { 30098 throw new Error(); 30099 } 30100 30101 v = 0.5 * this.ArB * Math.log((1 - U)/(1 + U)); 30102 temp = Math.cos(this.B * p.x); 30103 30104 if (Math.abs(temp) < TOL) { 30105 u = this.A * p.x; 30106 } else { 30107 u = this.ArB * Math.atan2((S * this.cosgam + V * this.singam), temp); 30108 } 30109 } else { 30110 v = p.y > 0 ? this.v_pole_n : this.v_pole_s; 30111 u = this.ArB * p.y; 30112 } 30113 30114 if (this.no_rot) { 30115 coords.x = u; 30116 coords.y = v; 30117 } else { 30118 u -= this.u_0; 30119 coords.x = v * this.cosrot + u * this.sinrot; 30120 coords.y = u * this.cosrot - v * this.sinrot; 30121 } 30122 30123 coords.x = (this.a * coords.x + this.x0); 30124 coords.y = (this.a * coords.y + this.y0); 30125 30126 return coords; 30127 } 30128 30129 function inverse$8(p) { 30130 var u, v, Qp, Sp, Tp, Vp, Up; 30131 var coords = {}; 30132 30133 p.x = (p.x - this.x0) * (1.0 / this.a); 30134 p.y = (p.y - this.y0) * (1.0 / this.a); 30135 30136 if (this.no_rot) { 30137 v = p.y; 30138 u = p.x; 30139 } else { 30140 v = p.x * this.cosrot - p.y * this.sinrot; 30141 u = p.y * this.cosrot + p.x * this.sinrot + this.u_0; 30142 } 30143 30144 Qp = Math.exp(-this.BrA * v); 30145 Sp = 0.5 * (Qp - 1 / Qp); 30146 Tp = 0.5 * (Qp + 1 / Qp); 30147 Vp = Math.sin(this.BrA * u); 30148 Up = (Vp * this.cosgam + Sp * this.singam) / Tp; 30149 30150 if (Math.abs(Math.abs(Up) - 1) < EPSLN) { 30151 coords.x = 0; 30152 coords.y = Up < 0 ? -HALF_PI : HALF_PI; 30153 } else { 30154 coords.y = this.E / Math.sqrt((1 + Up) / (1 - Up)); 30155 coords.y = phi2z(this.e, Math.pow(coords.y, 1 / this.B)); 30156 30157 if (coords.y === Infinity) { 30158 throw new Error(); 30159 } 30160 30161 coords.x = -this.rB * Math.atan2((Sp * this.cosgam - Vp * this.singam), Math.cos(this.BrA * u)); 30162 } 30163 30164 coords.x += this.lam0; 30165 30166 return coords; 30167 } 30168 30169 var names$10 = ["Hotine_Oblique_Mercator", "Hotine Oblique Mercator", "Hotine_Oblique_Mercator_Azimuth_Natural_Origin", "Hotine_Oblique_Mercator_Two_Point_Natural_Origin", "Hotine_Oblique_Mercator_Azimuth_Center", "Oblique_Mercator", "omerc"]; 30170 var omerc = { 30171 init: init$9, 30172 forward: forward$8, 30173 inverse: inverse$8, 30174 names: names$10 30175 }; 30176 30177 function init$10() { 30178 30179 //double lat0; /* the reference latitude */ 30180 //double long0; /* the reference longitude */ 30181 //double lat1; /* first standard parallel */ 30182 //double lat2; /* second standard parallel */ 30183 //double r_maj; /* major axis */ 30184 //double r_min; /* minor axis */ 30185 //double false_east; /* x offset in meters */ 30186 //double false_north; /* y offset in meters */ 30187 30188 //the above value can be set with proj4.defs 30189 //example: proj4.defs("EPSG:2154","+proj=lcc +lat_1=49 +lat_2=44 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"); 30190 30191 if (!this.lat2) { 30192 this.lat2 = this.lat1; 30193 } //if lat2 is not defined 30194 if (!this.k0) { 30195 this.k0 = 1; 30196 } 30197 this.x0 = this.x0 || 0; 30198 this.y0 = this.y0 || 0; 30199 // Standard Parallels cannot be equal and on opposite sides of the equator 30200 if (Math.abs(this.lat1 + this.lat2) < EPSLN) { 30201 return; 30202 } 30203 30204 var temp = this.b / this.a; 30205 this.e = Math.sqrt(1 - temp * temp); 30206 30207 var sin1 = Math.sin(this.lat1); 30208 var cos1 = Math.cos(this.lat1); 30209 var ms1 = msfnz(this.e, sin1, cos1); 30210 var ts1 = tsfnz(this.e, this.lat1, sin1); 30211 30212 var sin2 = Math.sin(this.lat2);
30213 var cos2 = Math.cos(this.lat2); 30214 var ms2 = msfnz(this.e, sin2, cos2); 30215 var ts2 = tsfnz(this.e, this.lat2, sin2); 30216 30217 var ts0 = tsfnz(this.e, this.lat0, Math.sin(this.lat0)); 30218 30219 if (Math.abs(this.lat1 - this.lat2) > EPSLN) { 30220 this.ns = Math.log(ms1 / ms2) / Math.log(ts1 / ts2); 30221 } 30222 else { 30223 this.ns = sin1; 30224 } 30225 if (isNaN(this.ns)) { 30226 this.ns = sin1; 30227 } 30228 this.f0 = ms1 / (this.ns * Math.pow(ts1, this.ns)); 30229 this.rh = this.a * this.f0 * Math.pow(ts0, this.ns); 30230 if (!this.title) { 30231 this.title = "Lambert Conformal Conic"; 30232 } 30233 } 30234 30235 // Lambert Conformal conic forward equations--mapping lat,long to x,y 30236 // ----------------------------------------------------------------- 30237 function forward$9(p) { 30238 30239 var lon = p.x; 30240 var lat = p.y; 30241 30242 // singular cases : 30243 if (Math.abs(2 * Math.abs(lat) - Math.PI) <= EPSLN) { 30244 lat = sign(lat) * (HALF_PI - 2 * EPSLN); 30245 } 30246 30247 var con = Math.abs(Math.abs(lat) - HALF_PI); 30248 var ts, rh1; 30249 if (con > EPSLN) { 30250 ts = tsfnz(this.e, lat, Math.sin(lat)); 30251 rh1 = this.a * this.f0 * Math.pow(ts, this.ns); 30252 } 30253 else { 30254 con = lat * this.ns; 30255 if (con <= 0) { 30256 return null; 30257 } 30258 rh1 = 0; 30259 } 30260 var theta = this.ns * adjust_lon(lon - this.long0); 30261 p.x = this.k0 * (rh1 * Math.sin(theta)) + this.x0; 30262 p.y = this.k0 * (this.rh - rh1 * Math.cos(theta)) + this.y0; 30263 30264 return p; 30265 } 30266 30267 // Lambert Conformal Conic inverse equations--mapping x,y to lat/long 30268 // ----------------------------------------------------------------- 30269 function inverse$9(p) { 30270 30271 var rh1, con, ts; 30272 var lat, lon; 30273 var x = (p.x - this.x0) / this.k0; 30274 var y = (this.rh - (p.y - this.y0) / this.k0); 30275 if (this.ns > 0) { 30276 rh1 = Math.sqrt(x * x + y * y); 30277 con = 1; 30278 } 30279 else { 30280 rh1 = -Math.sqrt(x * x + y * y); 30281 con = -1; 30282 } 30283 var theta = 0; 30284 if (rh1 !== 0) { 30285 theta = Math.atan2((con * x), (con * y)); 30286 } 30287 if ((rh1 !== 0) || (this.ns > 0)) { 30288 con = 1 / this.ns; 30289 ts = Math.pow((rh1 / (this.a * this.f0)), con); 30290 lat = phi2z(this.e, ts); 30291 if (lat === -9999) { 30292 return null; 30293 } 30294 } 30295 else { 30296 lat = -HALF_PI; 30297 } 30298 lon = adjust_lon(theta / this.ns + this.long0); 30299 30300 p.x = lon; 30301 p.y = lat; 30302 return p; 30303 } 30304 30305 var names$11 = [ 30306 "Lambert Tangential Conformal Conic Projection", 30307 "Lambert_Conformal_Conic", 30308 "Lambert_Conformal_Conic_1SP", 30309 "Lambert_Conformal_Conic_2SP", 30310 "lcc", 30311 "Lambert Conic Conformal (1SP)", 30312 "Lambert Conic Conformal (2SP)" 30313 ]; 30314 30315 var lcc = { 30316 init: init$10, 30317 forward: forward$9, 30318 inverse: inverse$9, 30319 names: names$11 30320 }; 30321 30322 function init$11() { 30323 this.a = 6377397.155; 30324 this.es = 0.006674372230614; 30325 this.e = Math.sqrt(this.es); 30326 if (!this.lat0) { 30327 this.lat0 = 0.863937979737193; 30328 } 30329 if (!this.long0) { 30330 this.long0 = 0.7417649320975901 - 0.308341501185665; 30331 } 30332 /* if scale not set default to 0.9999 */ 30333 if (!this.k0) { 30334 this.k0 = 0.9999; 30335 } 30336 this.s45 = 0.785398163397448; /* 45 */ 30337 this.s90 = 2 * this.s45; 30338 this.fi0 = this.lat0; 30339 this.e2 = this.es; 30340 this.e = Math.sqrt(this.e2); 30341 this.alfa = Math.sqrt(1 + (this.e2 * Math.pow(Math.cos(this.fi0), 4)) / (1 - this.e2)); 30342 this.uq = 1.04216856380474; 30343 this.u0 = Math.asin(Math.sin(this.fi0) / this.alfa); 30344 this.g = Math.pow((1 + this.e * Math.sin(this.fi0)) / (1 - this.e * Math.sin(this.fi0)), this.alfa * this.e / 2); 30345 this.k = Math.tan(this.u0 / 2 + this.s45) / Math.pow(Math.tan(this.fi0 / 2 + this.s45), this.alfa) * this.g; 30346 this.k1 = this.k0; 30347 this.n0 = this.a * Math.sqrt(1 - this.e2) / (1 - this.e2 * Math.pow(Math.sin(this.fi0), 2)); 30348 this.s0 = 1.37008346281555; 30349 this.n = Math.sin(this.s0); 30350 this.ro0 = this.k1 * this.n0 / Math.tan(this.s0); 30351 this.ad = this.s90 - this.uq; 30352 } 30353 30354 /* ellipsoid */ 30355 /* calculate xy from lat/lon */ 30356 /* Constants, identical to inverse transform function */ 30357 function forward$10(p) { 30358 var gfi, u, deltav, s, d, eps, ro; 30359 var lon = p.x; 30360 var lat = p.y; 30361 var delta_lon = adjust_lon(lon - this.long0); 30362 /* Transformation */ 30363 gfi = Math.pow(((1 + this.e * Math.sin(lat)) / (1 - this.e * Math.sin(lat))), (this.alfa * this.e / 2)); 30364 u = 2 * (Math.atan(this.k * Math.pow(Math.tan(lat / 2 + this.s45), this.alfa) / gfi) - this.s45); 30365 deltav = -delta_lon * this.alfa; 30366 s = Math.asin(Math.cos(this.ad) * Math.sin(u) + Math.sin(this.ad) * Math.cos(u) * Math.cos(deltav)); 30367 d = Math.asin(Math.cos(u) * Math.sin(deltav) / Math.cos(s)); 30368 eps = this.n * d; 30369 ro = this.ro0 * Math.pow(Math.tan(this.s0 / 2 + this.s45), this.n) / Math.pow(Math.tan(s / 2 + this.s45), this.n); 30370 p.y = ro * Math.cos(eps) / 1; 30371 p.x = ro * Math.sin(eps) / 1; 30372 30373 if (!this.czech) { 30374 p.y *= -1; 30375 p.x *= -1; 30376 } 30377 return (p); 30378 } 30379 30380 /* calculate lat/lon from xy */ 30381 function inverse$10(p) { 30382 var u, deltav, s, d, eps, ro, fi1; 30383 var ok; 30384 30385 /* Transformation */ 30386 /* revert y, x*/ 30387 var tmp = p.x; 30388 p.x = p.y; 30389 p.y = tmp; 30390 if (!this.czech) { 30391 p.y *= -1; 30392 p.x *= -1; 30393 } 30394 ro = Math.sqrt(p.x * p.x + p.y * p.y); 30395 eps = Math.atan2(p.y, p.x); 30396 d = eps / Math.sin(this.s0); 30397 s = 2 * (Math.atan(Math.pow(this.ro0 / ro, 1 / this.n) * Math.tan(this.s0 / 2 + this.s45)) - this.s45); 30398 u = Math.asin(Math.cos(this.ad) * Math.sin(s) - Math.sin(this.ad) * Math.cos(s) * Math.cos(d)); 30399 deltav = Math.asin(Math.cos(s) * Math.sin(d) / Math.cos(u)); 30400 p.x = this.long0 - deltav / this.alfa; 30401 fi1 = u; 30402 ok = 0; 30403 var iter = 0; 30404 do { 30405 p.y = 2 * (Math.atan(Math.pow(this.k, - 1 / this.alfa) * Math.pow(Math.tan(u / 2 + this.s45), 1 / this.alfa) * Math.pow((1 + this.e * Math.sin(fi1)) / (1 - this.e * Math.sin(fi1)), this.e / 2)) - this.s45); 30406 if (Math.abs(fi1 - p.y) < 0.0000000001) { 30407 ok = 1; 30408 } 30409 fi1 = p.y; 30410 iter += 1; 30411 } while (ok === 0 && iter < 15); 30412 if (iter >= 15) { 30413 return null; 30414 } 30415 30416 return (p); 30417 } 30418 30419 var names$12 = ["Krovak", "krovak"]; 30420 var krovak = { 30421 init: init$11, 30422 forward: forward$10, 30423 inverse: inverse$10, 30424 names: names$12 30425 }; 30426 30427 var mlfn = function(e0, e1, e2, e3, phi) { 30428 return (e0 * phi - e1 * Math.sin(2 * phi) + e2 * Math.sin(4 * phi) - e3 * Math.sin(6 * phi)); 30429 }; 30430 30431 var e0fn = function(x) { 30432 return (1 - 0.25 * x * (1 + x / 16 * (3 + 1.25 * x))); 30433 }; 30434 30435 var e1fn = function(x) { 30436 return (0.375 * x * (1 + 0.25 * x * (1 + 0.46875 * x))); 30437 }; 30438 30439 var e2fn = function(x) { 30440 return (0.05859375 * x * x * (1 + 0.75 * x)); 30441 }; 30442 30443 var e3fn = function(x) { 30444 return (x * x * x * (35 / 3072)); 30445 }; 30446 30447 var gN = function(a, e, sinphi) { 30448 var temp = e * sinphi; 30449 return a / Math.sqrt(1 - temp * temp); 30450 }; 30451 30452 var adjust_lat = function(x) { 30453 return (Math.abs(x) < HALF_PI) ? x : (x - (sign(x) * Math.PI)); 30454 }; 30455 30456 var imlfn = function(ml, e0, e1, e2, e3) { 30457 var phi; 30458 var dphi; 30459 30460 phi = ml / e0; 30461 for (var i = 0; i < 15; i++) { 30462 dphi = (ml - (e0 * phi - e1 * Math.sin(2 * phi) + e2 * Math.sin(4 * phi) - e3 * Math.sin(6 * phi))) / (e0 - 2 * e1 * Math.cos(2 * phi) + 4 * e2 * Math.cos(4 * phi) - 6 * e3 * Math.cos(6 * phi)); 30463 phi += dphi; 30464 if (Math.abs(dphi) <= 0.0000000001) { 30465 return phi; 30466 } 30467 } 30468 30469 //..reportError("IMLFN-CONV:Latitude failed to converge after 15 iterations"); 30470 return NaN; 30471 }; 30472 30473 function init$12() { 30474 if (!this.sphere) { 30475 this.e0 = e0fn(this.es); 30476 this.e1 = e1fn(this.es); 30477 this.e2 = e2fn(this.es); 30478 this.e3 = e3fn(this.es); 30479 this.ml0 = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0); 30480 } 30481 } 30482 30483 /* Cassini forward equations--mapping lat,long to x,y 30484 -----------------------------------------------------------------------*/ 30485 function forward$11(p) { 30486 30487 /* Forward equations 30488 -----------------*/ 30489 var x, y; 30490 var lam = p.x; 30491 var phi = p.y; 30492 lam = adjust_lon(lam - this.long0); 30493 30494 if (this.sphere) { 30495 x = this.a * Math.asin(Math.cos(phi) * Math.sin(lam)); 30496 y = this.a * (Math.atan2(Math.tan(phi), Math.cos(lam)) - this.lat0); 30497 } 30498 else { 30499 //ellipsoid 30500 var sinphi = Math.sin(phi); 30501 var cosphi = Math.cos(phi); 30502 var nl = gN(this.a, this.e, sinphi); 30503 var tl = Math.tan(phi) * Math.tan(phi); 30504 var al = lam * Math.cos(phi); 30505 var asq = al * al; 30506 var cl = this.es * cosphi * cosphi / (1 - this.es); 30507 var ml = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, phi); 30508 30509 x = nl * al * (1 - asq * tl * (1 / 6 - (8 - tl + 8 * cl) * asq / 120)); 30510 y = ml - this.ml0 + nl * sinphi / cosphi * asq * (0.5 + (5 - tl + 6 * cl) * asq / 24); 30511 30512 30513 } 30514 30515 p.x = x + this.x0; 30516 p.y = y + this.y0; 30517 return p; 30518 } 30519 30520 /* Inverse equations 30521 -----------------*/ 30522 function inverse$11(p) { 30523 p.x -= this.x0; 30524 p.y -= this.y0; 30525 var x = p.x / this.a; 30526 var y = p.y / this.a; 30527 var phi, lam; 30528 30529 if (this.sphere) { 30530 var dd = y + this.lat0; 30531 phi = Math.asin(Math.sin(dd) * Math.cos(x)); 30532 lam = Math.atan2(Math.tan(x), Math.cos(dd)); 30533 } 30534 else { 30535 /* ellipsoid */ 30536 var ml1 = this.ml0 / this.a + y; 30537 var phi1 = imlfn(ml1, this.e0, this.e1, this.e2, this.e3); 30538 if (Math.abs(Math.abs(phi1) - HALF_PI) <= EPSLN) { 30539 p.x = this.long0; 30540 p.y = HALF_PI; 30541 if (y < 0) { 30542 p.y *= -1; 30543 } 30544 return p; 30545 } 30546 var nl1 = gN(this.a, this.e, Math.sin(phi1)); 30547 30548 var rl1 = nl1 * nl1 * nl1 / this.a / this.a * (1 - this.es); 30549 var tl1 = Math.pow(Math.tan(phi1), 2); 30550 var dl = x * this.a / nl1; 30551 var dsq = dl * dl; 30552 phi = phi1 - nl1 * Math.tan(phi1) / rl1 * dl * dl * (0.5 - (1 + 3 * tl1) * dl * dl / 24); 30553 lam = dl * (1 - dsq * (tl1 / 3 + (1 + 3 * tl1) * tl1 * dsq / 15)) / Math.cos(phi1); 30554 30555 } 30556 30557 p.x = adjust_lon(lam + this.long0); 30558 p.y = adjust_lat(phi); 30559 return p; 30560 30561 } 30562 30563 var names$13 = ["Cassini", "Cassini_Soldner", "cass"]; 30564 var cass = { 30565 init: init$12, 30566 forward: forward$11, 30567 inverse: inverse$11, 30568 names: names$13 30569 }; 30570 30571 var qsfnz = function(eccent, sinphi) { 30572 var con; 30573 if (eccent > 1.0e-7) { 30574 con = eccent * sinphi; 30575 return ((1 - eccent * eccent) * (sinphi / (1 - con * con) - (0.5 / eccent) * Math.log((1 - con) / (1 + con)))); 30576 } 30577 else { 30578 return (2 * sinphi); 30579 } 30580 }; 30581 30582 /* 30583 reference 30584 "New Equal-Area Map Projections for Noncircular Regions", John P. Snyder, 30585 The American Cartographer, Vol 15, No. 4, October 1988, pp. 341-355. 30586 */ 30587 30588 var S_POLE = 1; 30589 30590 var N_POLE = 2; 30591 var EQUIT = 3; 30592 var OBLIQ = 4; 30593 30594 /* Initialize the Lambert Azimuthal Equal Area projection 30595 ------------------------------------------------------*/ 30596 function init$13() { 30597 var t = Math.abs(this.lat0); 30598 if (Math.abs(t - HALF_PI) < EPSLN) { 30599 this.mode = this.lat0 < 0 ? this.S_POLE : this.N_POLE; 30600 } 30601 else if (Math.abs(t) < EPSLN) { 30602 this.mode = this.EQUIT; 30603 } 30604 else { 30605 this.mode = this.OBLIQ; 30606 } 30607 if (this.es > 0) { 30608 var sinphi; 30609 30610 this.qp = qsfnz(this.e, 1); 30611 this.mmf = 0.5 / (1 - this.es); 30612 this.apa = authset(this.es); 30613 switch (this.mode) { 30614 case this.N_POLE: 30615 this.dd = 1; 30616 break; 30617 case this.S_POLE: 30618 this.dd = 1; 30619 break; 30620 case this.EQUIT: 30621 this.rq = Math.sqrt(0.5 * this.qp); 30622 this.dd = 1 / this.rq; 30623 this.xmf = 1; 30624 this.ymf = 0.5 * this.qp; 30625 break; 30626 case this.OBLIQ: 30627 this.rq = Math.sqrt(0.5 * this.qp); 30628 sinphi = Math.sin(this.lat0); 30629 this.sinb1 = qsfnz(this.e, sinphi) / this.qp; 30630 this.cosb1 = Math.sqrt(1 - this.sinb1 * this.sinb1); 30631 this.dd = Math.cos(this.lat0) / (Math.sqrt(1 - this.es * sinphi * sinphi) * this.rq * this.cosb1); 30632 this.ymf = (this.xmf = this.rq) / this.dd; 30633 this.xmf *= this.dd; 30634 break; 30635 } 30636 } 30637 else { 30638 if (this.mode === this.OBLIQ) { 30639 this.sinph0 = Math.sin(this.lat0); 30640 this.cosph0 = Math.cos(this.lat0); 30641 } 30642 } 30643 } 30644 30645 /* Lambert Azimuthal Equal Area forward equations--mapping lat,long to x,y 30646 -----------------------------------------------------------------------*/ 30647 function forward$12(p) { 30648 30649 /* Forward equations 30650 -----------------*/ 30651 var x, y, coslam, sinlam, sinphi, q, sinb, cosb, b, cosphi; 30652 var lam = p.x; 30653 var phi = p.y; 30654 30655 lam = adjust_lon(lam - this.long0); 30656 if (this.sphere) { 30657 sinphi = Math.sin(phi); 30658 cosphi = Math.cos(phi);
30659 coslam = Math.cos(lam); 30660 if (this.mode === this.OBLIQ || this.mode === this.EQUIT) { 30661 y = (this.mode === this.EQUIT) ? 1 + cosphi * coslam : 1 + this.sinph0 * sinphi + this.cosph0 * cosphi * coslam; 30662 if (y <= EPSLN) { 30663 return null; 30664 } 30665 y = Math.sqrt(2 / y); 30666 x = y * cosphi * Math.sin(lam); 30667 y *= (this.mode === this.EQUIT) ? sinphi : this.cosph0 * sinphi - this.sinph0 * cosphi * coslam; 30668 } 30669 else if (this.mode === this.N_POLE || this.mode === this.S_POLE) { 30670 if (this.mode === this.N_POLE) { 30671 coslam = -coslam; 30672 } 30673 if (Math.abs(phi + this.lat0) < EPSLN) { 30674 return null; 30675 } 30676 y = FORTPI - phi * 0.5; 30677 y = 2 * ((this.mode === this.S_POLE) ? Math.cos(y) : Math.sin(y)); 30678 x = y * Math.sin(lam); 30679 y *= coslam; 30680 } 30681 } 30682 else { 30683 sinb = 0; 30684 cosb = 0; 30685 b = 0; 30686 coslam = Math.cos(lam); 30687 sinlam = Math.sin(lam); 30688 sinphi = Math.sin(phi); 30689 q = qsfnz(this.e, sinphi); 30690 if (this.mode === this.OBLIQ || this.mode === this.EQUIT) { 30691 sinb = q / this.qp; 30692 cosb = Math.sqrt(1 - sinb * sinb); 30693 } 30694 switch (this.mode) { 30695 case this.OBLIQ: 30696 b = 1 + this.sinb1 * sinb + this.cosb1 * cosb * coslam; 30697 break; 30698 case this.EQUIT: 30699 b = 1 + cosb * coslam; 30700 break; 30701 case this.N_POLE: 30702 b = HALF_PI + phi; 30703 q = this.qp - q; 30704 break; 30705 case this.S_POLE: 30706 b = phi - HALF_PI; 30707 q = this.qp + q; 30708 break; 30709 } 30710 if (Math.abs(b) < EPSLN) { 30711 return null; 30712 } 30713 switch (this.mode) { 30714 case this.OBLIQ: 30715 case this.EQUIT: 30716 b = Math.sqrt(2 / b); 30717 if (this.mode === this.OBLIQ) { 30718 y = this.ymf * b * (this.cosb1 * sinb - this.sinb1 * cosb * coslam); 30719 } 30720 else { 30721 y = (b = Math.sqrt(2 / (1 + cosb * coslam))) * sinb * this.ymf; 30722 } 30723 x = this.xmf * b * cosb * sinlam; 30724 break; 30725 case this.N_POLE: 30726 case this.S_POLE: 30727 if (q >= 0) { 30728 x = (b = Math.sqrt(q)) * sinlam; 30729 y = coslam * ((this.mode === this.S_POLE) ? b : -b); 30730 } 30731 else { 30732 x = y = 0; 30733 } 30734 break; 30735 } 30736 } 30737 30738 p.x = this.a * x + this.x0; 30739 p.y = this.a * y + this.y0; 30740 return p; 30741 } 30742 30743 /* Inverse equations 30744 -----------------*/ 30745 function inverse$12(p) { 30746 p.x -= this.x0; 30747 p.y -= this.y0; 30748 var x = p.x / this.a; 30749 var y = p.y / this.a; 30750 var lam, phi, cCe, sCe, q, rho, ab; 30751 if (this.sphere) { 30752 var cosz = 0, 30753 rh, sinz = 0; 30754 30755 rh = Math.sqrt(x * x + y * y); 30756 phi = rh * 0.5; 30757 if (phi > 1) { 30758 return null; 30759 } 30760 phi = 2 * Math.asin(phi); 30761 if (this.mode === this.OBLIQ || this.mode === this.EQUIT) { 30762 sinz = Math.sin(phi); 30763 cosz = Math.cos(phi); 30764 } 30765 switch (this.mode) { 30766 case this.EQUIT: 30767 phi = (Math.abs(rh) <= EPSLN) ? 0 : Math.asin(y * sinz / rh); 30768 x *= sinz; 30769 y = cosz * rh; 30770 break; 30771 case this.OBLIQ: 30772 phi = (Math.abs(rh) <= EPSLN) ? this.lat0 : Math.asin(cosz * this.sinph0 + y * sinz * this.cosph0 / rh); 30773 x *= sinz * this.cosph0; 30774 y = (cosz - Math.sin(phi) * this.sinph0) * rh; 30775 break; 30776 case this.N_POLE: 30777 y = -y; 30778 phi = HALF_PI - phi; 30779 break; 30780 case this.S_POLE: 30781 phi -= HALF_PI; 30782 break; 30783 } 30784 lam = (y === 0 && (this.mode === this.EQUIT || this.mode === this.OBLIQ)) ? 0 : Math.atan2(x, y); 30785 } 30786 else { 30787 ab = 0; 30788 if (this.mode === this.OBLIQ || this.mode === this.EQUIT) { 30789 x /= this.dd; 30790 y *= this.dd; 30791 rho = Math.sqrt(x * x + y * y); 30792 if (rho < EPSLN) { 30793 p.x = this.long0; 30794 p.y = this.lat0; 30795 return p; 30796 } 30797 sCe = 2 * Math.asin(0.5 * rho / this.rq);
30798 cCe = Math.cos(sCe); 30799 x *= (sCe = Math.sin(sCe)); 30800 if (this.mode === this.OBLIQ) { 30801 ab = cCe * this.sinb1 + y * sCe * this.cosb1 / rho; 30802 q = this.qp * ab; 30803 y = rho * this.cosb1 * cCe - y * this.sinb1 * sCe; 30804 } 30805 else { 30806 ab = y * sCe / rho; 30807 q = this.qp * ab; 30808 y = rho * cCe; 30809 } 30810 } 30811 else if (this.mode === this.N_POLE || this.mode === this.S_POLE) { 30812 if (this.mode === this.N_POLE) { 30813 y = -y; 30814 } 30815 q = (x * x + y * y); 30816 if (!q) { 30817 p.x = this.long0; 30818 p.y = this.lat0; 30819 return p; 30820 } 30821 ab = 1 - q / this.qp; 30822 if (this.mode === this.S_POLE) { 30823 ab = -ab; 30824 } 30825 } 30826 lam = Math.atan2(x, y); 30827 phi = authlat(Math.asin(ab), this.apa); 30828 } 30829 30830 p.x = adjust_lon(this.long0 + lam); 30831 p.y = phi; 30832 return p; 30833 } 30834 30835 /* determine latitude from authalic latitude */ 30836 var P00 = 0.33333333333333333333; 30837 30838 var P01 = 0.17222222222222222222; 30839 var P02 = 0.10257936507936507936; 30840 var P10 = 0.06388888888888888888; 30841 var P11 = 0.06640211640211640211; 30842 var P20 = 0.01641501294219154443; 30843 30844 function authset(es) { 30845 var t; 30846 var APA = []; 30847 APA[0] = es * P00; 30848 t = es * es; 30849 APA[0] += t * P01; 30850 APA[1] = t * P10; 30851 t *= es; 30852 APA[0] += t * P02; 30853 APA[1] += t * P11; 30854 APA[2] = t * P20; 30855 return APA; 30856 } 30857 30858 function authlat(beta, APA) { 30859 var t = beta + beta; 30860 return (beta + APA[0] * Math.sin(t) + APA[1] * Math.sin(t + t) + APA[2] * Math.sin(t + t + t)); 30861 } 30862 30863 var names$14 = ["Lambert Azimuthal Equal Area", "Lambert_Azimuthal_Equal_Area", "laea"]; 30864 var laea = { 30865 init: init$13, 30866 forward: forward$12, 30867 inverse: inverse$12, 30868 names: names$14, 30869 S_POLE: S_POLE, 30870 N_POLE: N_POLE, 30871 EQUIT: EQUIT, 30872 OBLIQ: OBLIQ 30873 }; 30874 30875 var asinz = function(x) { 30876 if (Math.abs(x) > 1) { 30877 x = (x > 1) ? 1 : -1; 30878 } 30879 return Math.asin(x); 30880 }; 30881 30882 function init$14() { 30883 30884 if (Math.abs(this.lat1 + this.lat2) < EPSLN) { 30885 return; 30886 } 30887 this.temp = this.b / this.a; 30888 this.es = 1 - Math.pow(this.temp, 2); 30889 this.e3 = Math.sqrt(this.es); 30890 30891 this.sin_po = Math.sin(this.lat1); 30892 this.cos_po = Math.cos(this.lat1); 30893 this.t1 = this.sin_po; 30894 this.con = this.sin_po; 30895 this.ms1 = msfnz(this.e3, this.sin_po, this.cos_po); 30896 this.qs1 = qsfnz(this.e3, this.sin_po); 30897 30898 this.sin_po = Math.sin(this.lat2); 30899 this.cos_po = Math.cos(this.lat2); 30900 this.t2 = this.sin_po; 30901 this.ms2 = msfnz(this.e3, this.sin_po, this.cos_po); 30902 this.qs2 = qsfnz(this.e3, this.sin_po); 30903 30904 this.sin_po = Math.sin(this.lat0); 30905 this.cos_po = Math.cos(this.lat0); 30906 this.t3 = this.sin_po; 30907 this.qs0 = qsfnz(this.e3, this.sin_po); 30908 30909 if (Math.abs(this.lat1 - this.lat2) > EPSLN) { 30910 this.ns0 = (this.ms1 * this.ms1 - this.ms2 * this.ms2) / (this.qs2 - this.qs1); 30911 } 30912 else { 30913 this.ns0 = this.con; 30914 } 30915 this.c = this.ms1 * this.ms1 + this.ns0 * this.qs1; 30916 this.rh = this.a * Math.sqrt(this.c - this.ns0 * this.qs0) / this.ns0; 30917 } 30918 30919 /* Albers Conical Equal Area forward equations--mapping lat,long to x,y 30920 -------------------------------------------------------------------*/ 30921 function forward$13(p) { 30922 30923 var lon = p.x; 30924 var lat = p.y; 30925 30926 this.sin_phi = Math.sin(lat); 30927 this.cos_phi = Math.cos(lat); 30928 30929 var qs = qsfnz(this.e3, this.sin_phi); 30930 var rh1 = this.a * Math.sqrt(this.c - this.ns0 * qs) / this.ns0; 30931 var theta = this.ns0 * adjust_lon(lon - this.long0); 30932 var x = rh1 * Math.sin(theta) + this.x0; 30933 var y = this.rh - rh1 * Math.cos(theta) + this.y0; 30934 30935 p.x = x; 30936 p.y = y; 30937 return p; 30938 } 30939 30940 function inverse$13(p) { 30941 var rh1, qs, con, theta, lon, lat; 30942 30943 p.x -= this.x0; 30944 p.y = this.rh - p.y + this.y0; 30945 if (this.ns0 >= 0) { 30946 rh1 = Math.sqrt(p.x * p.x + p.y * p.y); 30947 con = 1; 30948 } 30949 else {
30950 rh1 = -Math.sqrt(p.x * p.x + p.y * p.y); 30951 con = -1; 30952 } 30953 theta = 0; 30954 if (rh1 !== 0) { 30955 theta = Math.atan2(con * p.x, con * p.y); 30956 } 30957 con = rh1 * this.ns0 / this.a; 30958 if (this.sphere) { 30959 lat = Math.asin((this.c - con * con) / (2 * this.ns0)); 30960 } 30961 else { 30962 qs = (this.c - con * con) / this.ns0; 30963 lat = this.phi1z(this.e3, qs); 30964 } 30965 30966 lon = adjust_lon(theta / this.ns0 + this.long0); 30967 p.x = lon; 30968 p.y = lat; 30969 return p; 30970 } 30971 30972 /* Function to compute phi1, the latitude for the inverse of the 30973 Albers Conical Equal-Area projection. 30974 -------------------------------------------*/ 30975 function phi1z(eccent, qs) { 30976 var sinphi, cosphi, con, com, dphi; 30977 var phi = asinz(0.5 * qs); 30978 if (eccent < EPSLN) { 30979 return phi; 30980 } 30981 30982 var eccnts = eccent * eccent; 30983 for (var i = 1; i <= 25; i++) { 30984 sinphi = Math.sin(phi); 30985 cosphi = Math.cos(phi); 30986 con = eccent * sinphi; 30987 com = 1 - con * con; 30988 dphi = 0.5 * com * com / cosphi * (qs / (1 - eccnts) - sinphi / com + 0.5 / eccent * Math.log((1 - con) / (1 + con))); 30989 phi = phi + dphi; 30990 if (Math.abs(dphi) <= 1e-7) { 30991 return phi; 30992 } 30993 } 30994 return null; 30995 } 30996 30997 var names$15 = ["Albers_Conic_Equal_Area", "Albers", "aea"]; 30998 var aea = { 30999 init: init$14, 31000 forward: forward$13, 31001 inverse: inverse$13, 31002 names: names$15, 31003 phi1z: phi1z 31004 }; 31005 31006 /* 31007 reference: 31008 Wolfram Mathworld "Gnomonic Projection" 31009 http://mathworld.wolfram.com/GnomonicProjection.html 31010 Accessed: 12th November 2009 31011 */ 31012 function init$15() { 31013 31014 /* Place parameters in static storage for common use 31015 -------------------------------------------------*/ 31016 this.sin_p14 = Math.sin(this.lat0); 31017 this.cos_p14 = Math.cos(this.lat0); 31018 // Approximation for projecting points to the horizon (infinity) 31019 this.infinity_dist = 1000 * this.a; 31020 this.rc = 1; 31021 } 31022 31023 /* Gnomonic forward equations--mapping lat,long to x,y 31024 ---------------------------------------------------*/ 31025 function forward$14(p) { 31026 var sinphi, cosphi; /* sin and cos value */ 31027 var dlon; /* delta longitude value */ 31028 var coslon; /* cos of longitude */ 31029 var ksp; /* scale factor */ 31030 var g; 31031 var x, y; 31032 var lon = p.x; 31033 var lat = p.y; 31034 /* Forward equations 31035 -----------------*/ 31036 dlon = adjust_lon(lon - this.long0); 31037 31038 sinphi = Math.sin(lat); 31039 cosphi = Math.cos(lat); 31040 31041 coslon = Math.cos(dlon); 31042 g = this.sin_p14 * sinphi + this.cos_p14 * cosphi * coslon; 31043 ksp = 1; 31044 if ((g > 0) || (Math.abs(g) <= EPSLN)) { 31045 x = this.x0 + this.a * ksp * cosphi * Math.sin(dlon) / g; 31046 y = this.y0 + this.a * ksp * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon) / g; 31047 } 31048 else { 31049 31050 // Point is in the opposing hemisphere and is unprojectable 31051 // We still need to return a reasonable point, so we project 31052 // to infinity, on a bearing 31053 // equivalent to the northern hemisphere equivalent 31054 // This is a reasonable approximation for short shapes and lines that 31055 // straddle the horizon. 31056 31057 x = this.x0 + this.infinity_dist * cosphi * Math.sin(dlon); 31058 y = this.y0 + this.infinity_dist * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon); 31059 31060 } 31061 p.x = x; 31062 p.y = y; 31063 return p; 31064 } 31065 31066 function inverse$14(p) { 31067 var rh; /* Rho */ 31068 var sinc, cosc; 31069 var c; 31070 var lon, lat; 31071 31072 /* Inverse equations 31073 -----------------*/ 31074 p.x = (p.x - this.x0) / this.a; 31075 p.y = (p.y - this.y0) / this.a; 31076 31077 p.x /= this.k0; 31078 p.y /= this.k0; 31079 31080 if ((rh = Math.sqrt(p.x * p.x + p.y * p.y))) { 31081 c = Math.atan2(rh, this.rc); 31082 sinc = Math.sin(c); 31083 cosc = Math.cos(c); 31084 31085 lat = asinz(cosc * this.sin_p14 + (p.y * sinc * this.cos_p14) / rh); 31086 lon = Math.atan2(p.x * sinc, rh * this.cos_p14 * cosc - p.y * this.sin_p14 * sinc); 31087 lon = adjust_lon(this.long0 + lon); 31088 } 31089 else { 31090 lat = this.phic0; 31091 lon = 0; 31092 } 31093 31094 p.x = lon; 31095 p.y = lat; 31096 return p; 31097 } 31098 31099 var names$16 = ["gnom"]; 31100 var gnom = { 31101 init: init$15, 31102 forward: forward$14, 31103 inverse: inverse$14, 31104 names: names$16 31105 }; 31106 31107 var iqsfnz = function(eccent, q) { 31108 var temp = 1 - (1 - eccent * eccent) / (2 * eccent) * Math.log((1 - eccent) / (1 + ecce
31108nt)); 31109 if (Math.abs(Math.abs(q) - temp) < 1.0E-6) { 31110 if (q < 0) { 31111 return (-1 * HALF_PI); 31112 } 31113 else { 31114 return HALF_PI; 31115 } 31116 } 31117 //var phi = 0.5* q/(1-eccent*eccent); 31118 var phi = Math.asin(0.5 * q); 31119 var dphi; 31120 var sin_phi; 31121 var cos_phi; 31122 var con; 31123 for (var i = 0; i < 30; i++) { 31124 sin_phi = Math.sin(phi); 31125 cos_phi = Math.cos(phi); 31126 con = eccent * sin_phi; 31127 dphi = Math.pow(1 - con * con, 2) / (2 * cos_phi) * (q / (1 - eccent * eccent) - sin_phi / (1 - con * con) + 0.5 / eccent * Math.log((1 - con) / (1 + con))); 31128 phi += dphi; 31129 if (Math.abs(dphi) <= 0.0000000001) { 31130 return phi; 31131 } 31132 } 31133 31134 //console.log("IQSFN-CONV:Latitude failed to converge after 30 iterations"); 31135 return NaN; 31136 }; 31137 31138 /* 31139 reference: 31140 "Cartographic Projection Procedures for the UNIX Environment- 31141 A User's Manual" by Gerald I. Evenden, 31142 USGS Open File Report 90-284and Release 4 Interim Reports (2003) 31143 */ 31144 function init$16() { 31145 //no-op 31146 if (!this.sphere) { 31147 this.k0 = msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts)); 31148 } 31149 } 31150 31151 /* Cylindrical Equal Area forward equations--mapping lat,long to x,y 31152 ------------------------------------------------------------*/ 31153 function forward$15(p) { 31154 var lon = p.x; 31155 var lat = p.y; 31156 var x, y; 31157 /* Forward equations 31158 -----------------*/ 31159 var dlon = adjust_lon(lon - this.long0); 31160 if (this.sphere) { 31161 x = this.x0 + this.a * dlon * Math.cos(this.lat_ts); 31162 y = this.y0 + this.a * Math.sin(lat) / Math.cos(this.lat_ts); 31163 } 31164 else { 31165 var qs = qsfnz(this.e, Math.sin(lat)); 31166 x = this.x0 + this.a * this.k0 * dlon; 31167 y = this.y0 + this.a * qs * 0.5 / this.k0; 31168 } 31169 31170 p.x = x; 31171 p.y = y; 31172 return p; 31173 } 31174 31175 /* Cylindrical Equal Area inverse equations--mapping x,y to lat/long 31176 ------------------------------------------------------------*/ 31177 function inverse$15(p) { 31178 p.x -= this.x0; 31179 p.y -= this.y0; 31180 var lon, lat; 31181 31182 if (this.sphere) { 31183 lon = adjust_lon(this.long0 + (p.x / this.a) / Math.cos(this.lat_ts)); 31184 lat = Math.asin((p.y / this.a) * Math.cos(this.lat_ts)); 31185 } 31186 else { 31187 lat = iqsfnz(this.e, 2 * p.y * this.k0 / this.a); 31188 lon = adjust_lon(this.long0 + p.x / (this.a * this.k0)); 31189 } 31190 31191 p.x = lon; 31192 p.y = lat; 31193 return p; 31194 } 31195 31196 var names$17 = ["cea"]; 31197 var cea = { 31198 init: init$16, 31199 forward: forward$15, 31200 inverse: inverse$15, 31201 names: names$17 31202 }; 31203 31204 function init$17() { 31205 31206 this.x0 = this.x0 || 0; 31207 this.y0 = this.y0 || 0; 31208 this.lat0 = this.lat0 || 0; 31209 this.long0 = this.long0 || 0; 31210 this.lat_ts = this.lat_ts || 0; 31211 this.title = this.title || "Equidistant Cylindrical (Plate Carre)"; 31212 31213 this.rc = Math.cos(this.lat_ts); 31214 } 31215 31216 // forward equations--mapping lat,long to x,y 31217 // ----------------------------------------------------------------- 31218 function forward$16(p) { 31219 31220 var lon = p.x; 31221 var lat = p.y; 31222 31223 var dlon = adjust_lon(lon - this.long0); 31224 var dlat = adjust_lat(lat - this.lat0); 31225 p.x = this.x0 + (this.a * dlon * this.rc); 31226 p.y = this.y0 + (this.a * dlat); 31227 return p; 31228 } 31229 31230 // inverse equations--mapping x,y to lat/long 31231 // ----------------------------------------------------------------- 31232 function inverse$16(p) { 31233 31234 var x = p.x; 31235 var y = p.y; 31236 31237 p.x = adjust_lon(this.long0 + ((x - this.x0) / (this.a * this.rc))); 31238 p.y = adjust_lat(this.lat0 + ((y - this.y0) / (this.a))); 31239 return p; 31240 } 31241 31242 var names$18 = ["Equirectangular", "Equidistant_Cylindrical", "eqc"]; 31243 var eqc = { 31244 init: init$17, 31245 forward: forward$16, 31246 inverse: inverse$16, 31247 names: names$18 31248 }; 31249 31250 var MAX_ITER$2 = 20; 31251 31252 function init$18() { 31253 /* Place parameters in static storage for common use 31254 -------------------------------------------------*/ 31255 this.temp = this.b / this.a; 31256 this.es = 1 - Math.pow(this.temp, 2); // devait etre dans tmerc.js mais n y est pas donc je commente sinon retour de valeurs nulles 31257 this.e = Math.sqrt(this.es); 31258 this.e0 = e0fn(this.es); 31259 this.e1 = e1fn(this.es); 31260 this.e2 = e2fn(this.es); 31261 this.e3 = e3fn(this.es); 31262 this.ml0 = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0); //si que des zeros le calcul ne se fait pas 31263 } 31264 31265 /* Polyconic forward equations--mapping lat,long to x,y 31266 ---------------------------------------------------*/ 31267 function forward$17(p) { 31268 var lon = p.x; 31269 var lat = p.y; 31270 var x, y, el; 31271 var dlon = adjust_lon(lon - this.long0); 31272 el = dlon * Math.sin(lat); 31273 if (this.sphere) { 31274 if (Math.abs(lat) <= EPSLN) { 31275 x = this.a * dlon; 31276 y = -1 * this.a * this.lat0; 31277 } 31278 else { 31279 x = this.a * Math.sin(el) / Math.tan(lat); 31280 y = this.a * (adjust_lat(lat - this.lat0) + (1 - Math.cos(el)) / Math.tan(lat)); 31281 } 31282 } 31283 else { 31284 if (Math.abs(lat) <= EPSLN) { 31285 x = this.a * dlon; 31286 y = -1 * this.ml0; 31287 } 31288 else { 31289 var nl = gN(this.a, this.e, Math.sin(lat)) / Math.tan(lat); 31290 x = nl * Math.sin(el); 31291 y = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, lat) - this.ml0 + nl * (1 - Math.cos(el)); 31292 } 31293 31294 } 31295 p.x = x + this.x0; 31296 p.y = y + this.y0; 31297 return p; 31298 } 31299 31300 /* Inverse equations 31301 -----------------*/ 31302 function inverse$17(p) { 31303 var lon, lat, x, y, i; 31304 var al, bl; 31305 var phi, dphi; 31306 x = p.x - this.x0; 31307 y = p.y - this.y0; 31308 31309 if (this.sphere) { 31310 if (Math.abs(y + this.a * this.lat0) <= EPSLN) { 31311 lon = adjust_lon(x / this.a + this.long0); 31312 lat = 0; 31313 } 31314 else { 31315 al = this.lat0 + y / this.a; 31316 bl = x * x / this.a / this.a + al * al; 31317 phi = al; 31318 var tanphi; 31319 for (i = MAX_ITER$2; i; --i) { 31320 tanphi = Math.tan(phi); 31321 dphi = -1 * (al * (phi * tanphi + 1) - phi - 0.5 * (phi * phi + bl) * tanphi) / ((phi - al) / tan
31321phi - 1); 31322 phi += dphi; 31323 if (Math.abs(dphi) <= EPSLN) { 31324 lat = phi; 31325 break; 31326 } 31327 } 31328 lon = adjust_lon(this.long0 + (Math.asin(x * Math.tan(phi) / this.a)) / Math.sin(lat)); 31329 } 31330 } 31331 else { 31332 if (Math.abs(y + this.ml0) <= EPSLN) { 31333 lat = 0; 31334 lon = adjust_lon(this.long0 + x / this.a); 31335 } 31336 else { 31337 31338 al = (this.ml0 + y) / this.a; 31339 bl = x * x / this.a / this.a + al * al; 31340 phi = al; 31341 var cl, mln, mlnp, ma; 31342 var con; 31343 for (i = MAX_ITER$2; i; --i) { 31344 con = this.e * Math.sin(phi); 31345 cl = Math.sqrt(1 - con * con) * Math.tan(phi); 31346 mln = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, phi); 31347 mlnp = this.e0 - 2 * this.e1 * Math.cos(2 * phi) + 4 * this.e2 * Math.cos(4 * phi) - 6 * this.e3 * Math.cos(6 * phi); 31348 ma = mln / this.a; 31349 dphi = (al * (cl * ma + 1) - ma - 0.5 * cl * (ma * ma + bl)) / (this.es * Math.sin(2 * phi) * (ma * ma + bl - 2 * al * ma) / (4 * cl) + (al - ma) * (cl * mlnp - 2 / Math.sin(2 * phi)) - mlnp); 31350 phi -= dphi; 31351 if (Math.abs(dphi) <= EPSLN) { 31352 lat = phi; 31353 break; 31354 } 31355 } 31356 31357 //lat=phi4z(this.e,this.e0,this.e1,this.e2,this.e3,al,bl,0,0); 31358 cl = Math.sqrt(1 - this.es * Math.pow(Math.sin(lat), 2)) * Math.tan(lat); 31359 lon = adjust_lon(this.long0 + Math.asin(x * cl / this.a) / Math.sin(lat)); 31360 } 31361 } 31362 31363 p.x = lon; 31364 p.y = lat; 31365 return p; 31366 } 31367 31368 var names$19 = ["Polyconic", "poly"]; 31369 var poly = { 31370 init: init$18, 31371 forward: forward$17, 31372 inverse: inverse$17, 31373 names: names$19 31374 }; 31375 31376 /* 31377 reference 31378 Department of Land and Survey Technical Circular 1973/32 31379 http://www.linz.govt.nz/docs/miscellaneous/nz-map-definition.pdf 31380 OSG Technical Report 4.1 31381 http://www.linz.govt.nz/docs/miscellaneous/nzmg.pdf 31382 */ 31383 31384 /** 31385 * iterations: Number of iterations to refine inverse transform. 31386 * 0 -> km accuracy 31387 * 1 -> m accuracy -- suitable for most mapping applications 31388 * 2 -> mm accuracy 31389 */ 31390 31391 31392 function init$19() { 31393 this.A = []; 31394 this.A[1] = 0.6399175073; 31395 this.A[2] = -0.1358797613; 31396 this.A[3] = 0.063294409; 31397 this.A[4] = -0.02526853; 31398 this.A[5] = 0.0117879; 31399 this.A[6] = -0.0055161; 31400 this.A[7] = 0.0026906; 31401 this.A[8] = -0.001333; 31402 this.A[9] = 0.00067; 31403 this.A[10] = -0.00034; 31404 31405 this.B_re = []; 31406 this.B_im = []; 31407 this.B_re[1] = 0.7557853228; 31408 this.B_im[1] = 0; 31409 this.B_re[2] = 0.249204646; 31410 this.B_im[2] = 0.003371507; 31411 this.B_re[3] = -0.001541739; 31412 this.B_im[3] = 0.041058560; 31413 this.B_re[4] = -0.10162907; 31414 this.B_im[4] = 0.01727609; 31415 this.B_re[5] = -0.26623489; 31416 this.B_im[5] = -0.36249218; 31417 this.B_re[6] = -0.6870983; 31418 this.B_im[6] = -1.1651967; 31419 31420 this.C_re = []; 31421 this.C_im = []; 31422 this.C_re[1] = 1.3231270439; 31423 this.C_im[1] = 0; 31424 this.C_re[2] = -0.577245789; 31425 this.C_im[2] = -0.007809598; 31426 this.C_re[3] = 0.508307513; 31427 this.C_im[3] = -0.112208952; 31428 this.C_re[4] = -0.15094762; 31429 this.C_im[4] = 0.18200602; 31430 this.C_re[5] = 1.01418179; 31431 this.C_im[5] = 1.64497696; 31432 this.C_re[6] = 1.9660549; 31433 this.C_im[6] = 2.5127645; 31434 31435 this.D = []; 31436 this.D[1] = 1.5627014243; 31437 this.D[2] = 0.5185406398; 31438 this.D[3] = -0.03333098; 31439 this.D[4] = -0.1052906; 31440 this.D[5] = -0.0368594; 31441 this.D[6] = 0.007317; 31442 this.D[7] = 0.01220; 31443 this.D[8] = 0.00394; 31444 this.D[9] = -0.0013; 31445 } 31446 31447 /** 31448 New Zealand Map Grid Forward - long/lat to x/y 31449 long/lat in radians 31450 */ 31451 function forward$18(p) { 31452 var n; 31453 var lon = p.x; 31454 var lat = p.y; 31455 31456 var delta_lat = lat - this.lat0; 31457 var delta_lon = lon - this.long0; 31458 31459 // 1. Calculate d_phi and d_psi ... // and d_lambda 31460 // For this algorithm, delta_latitude is in seconds of arc x 10-5, so we need to scale to those units. Longitude is radians. 31461 var d_phi = delta_lat / SEC_TO_RAD * 1E-5; 31462 var d_lambda = delta_lon; 31463 var d_phi_n = 1; // d_phi^0 31464 31465 var d_psi = 0; 31466 for (n = 1; n <= 10; n++) { 31467 d_phi_n = d_phi_n * d_phi; 31468 d_psi = d_psi + this.A[n] * d_phi_n; 31469 } 31470 31471 // 2. Calculate theta 31472 var th_re = d_psi; 31473 var th_im = d_lambda; 31474 31475 // 3. Calculate z 31476 var th_n_re = 1; 31477 var th_n_im = 0; // theta^0 31478 var th_n_re1; 31479 var th_n_im1; 31480 31481 var z_re = 0; 31482 var z_im = 0; 31483 for (n = 1; n <= 6; n++) { 31484 th_n_re1 = th_n_re * th_re - th_n_im * th_im; 31485 th_n_im1 = th_n_im * th_re + th_n_re * th_im; 31486 th_n_re = th_n_re1; 31487 th_n_im = th_n_im1; 31488 z_re = z_re + this.B_re[n] * th_n_re - this.B_im[n] * th_n_im; 31489 z_im = z_im + this.B_im[n] * th_n_re + this.B_re[n] * th_n_im; 31490 } 31491 31492 // 4. Calculate easting and northing 31493 p.x = (z_im * this.a) + this.x0; 31494 p.y = (z_re * this.a) + this.y0; 31495 31496 return p; 31497 } 31498 31499 /** 31500 New Zealand Map Grid Inverse - x/y to long/lat 31501 */ 31502 function inverse$18(p) { 31503 var n; 31504 var x = p.x; 31505 var y = p.y; 31506 31507 var delta_x = x - this.x0; 31508 var delta_y = y - this.y0; 31509 31510 // 1. Calculate z 31511 var z_re = delta_y / this.a; 31512 var z_im = delta_x / this.a; 31513 31514 // 2a. Calculate theta - first approximation gives km accuracy 31515 var z_n_re = 1; 31516 var z_n_im = 0; // z^0 31517 var z_n_re1; 31518 var z_n_im1; 31519 31520 var th_re = 0; 31521 var th_im = 0; 31522 for (n = 1; n <= 6; n++) { 31523 z_n_re1 = z_n_re * z_re - z_n_im * z_im; 31524 z_n_im1 = z_n_im * z_re + z_n_re * z_im; 31525 z_n_re = z_n_re1; 31526 z_n_im = z_n_im1; 31527 th_re = th_re + this.C_re[n] * z_n_re - this.C_im[n] * z_n_im; 31528 th_im = th_im + this.C_im[n] * z_n_re + this.C_re[n] * z_n_im; 31529 } 31530 31531 // 2b. Iterate to refine the accuracy of the calculation 31532 // 0 iterations gives km accuracy 31533 // 1 iteration gives m accuracy -- good enough for most mapping applications 31534 // 2 iterations bives mm accuracy 31535 for (var i = 0; i < this.iterations; i++) { 31536 var th_n_re = th_re; 31537 var th_n_im = th_im; 31538 var th_n_re1; 31539 var th_n_im1; 31540 31541 var num_re = z_re; 31542 var num_im = z_im;
31543 for (n = 2; n <= 6; n++) { 31544 th_n_re1 = th_n_re * th_re - th_n_im * th_im; 31545 th_n_im1 = th_n_im * th_re + th_n_re * th_im; 31546 th_n_re = th_n_re1; 31547 th_n_im = th_n_im1; 31548 num_re = num_re + (n - 1) * (this.B_re[n] * th_n_re - this.B_im[n] * th_n_im); 31549 num_im = num_im + (n - 1) * (this.B_im[n] * th_n_re + this.B_re[n] * th_n_im); 31550 } 31551 31552 th_n_re = 1; 31553 th_n_im = 0; 31554 var den_re = this.B_re[1]; 31555 var den_im = this.B_im[1]; 31556 for (n = 2; n <= 6; n++) { 31557 th_n_re1 = th_n_re * th_re - th_n_im * th_im; 31558 th_n_im1 = th_n_im * th_re + th_n_re * th_im; 31559 th_n_re = th_n_re1; 31560 th_n_im = th_n_im1; 31561 den_re = den_re + n * (this.B_re[n] * th_n_re - this.B_im[n] * th_n_im); 31562 den_im = den_im + n * (this.B_im[n] * th_n_re + this.B_re[n] * th_n_im); 31563 } 31564 31565 // Complex division 31566 var den2 = den_re * den_re + den_im * den_im; 31567 th_re = (num_re * den_re + num_im * den_im) / den2; 31568 th_im = (num_im * den_re - num_re * den_im) / den2; 31569 } 31570 31571 // 3. Calculate d_phi ... // and d_lambda 31572 var d_psi = th_re; 31573 var d_lambda = th_im; 31574 var d_psi_n = 1; // d_psi^0 31575 31576 var d_phi = 0; 31577 for (n = 1; n <= 9; n++) { 31578 d_psi_n = d_psi_n * d_psi; 31579 d_phi = d_phi + this.D[n] * d_psi_n; 31580 } 31581 31582 // 4. Calculate latitude and longitude 31583 // d_phi is calcuated in second of arc * 10^-5, so we need to scale back to radians. d_lambda is in radians. 31584 var lat = this.lat0 + (d_phi * SEC_TO_RAD * 1E5); 31585 var lon = this.long0 + d_lambda; 31586 31587 p.x = lon; 31588 p.y = lat; 31589 31590 return p; 31591 } 31592 31593 var names$20 = ["New_Zealand_Map_Grid", "nzmg"]; 31594 var nzmg = { 31595 init: init$19, 31596 forward: forward$18, 31597 inverse: inverse$18, 31598 names: names$20 31599 }; 31600 31601 /* 31602 reference 31603 "New Equal-Area Map Projections for Noncircular Regions", John P. Snyder, 31604 The American Cartographer, Vol 15, No. 4, October 1988, pp. 341-355. 31605 */ 31606 31607 31608 /* Initialize the Miller Cylindrical projection 31609 -------------------------------------------*/ 31610 function init$20() { 31611 //no-op 31612 } 31613 31614 /* Miller Cylindrical forward equations--mapping lat,long to x,y 31615 ------------------------------------------------------------*/ 31616 function forward$19(p) { 31617 var lon = p.x; 31618 var lat = p.y; 31619 /* Forward equations 31620 -----------------*/ 31621 var dlon = adjust_lon(lon - this.long0); 31622 var x = this.x0 + this.a * dlon; 31623 var y = this.y0 + this.a * Math.log(Math.tan((Math.PI / 4) + (lat / 2.5))) * 1.25; 31624 31625 p.x = x; 31626 p.y = y; 31627 return p; 31628 } 31629 31630 /* Miller Cylindrical inverse equations--mapping x,y to lat/long 31631 ------------------------------------------------------------*/ 31632 function inverse$19(p) { 31633 p.x -= this.x0; 31634 p.y -= this.y0; 31635 31636 var lon = adjust_lon(this.long0 + p.x / this.a); 31637 var lat = 2.5 * (Math.atan(Math.exp(0.8 * p.y / this.a)) - Math.PI / 4); 31638 31639 p.x = lon; 31640 p.y = lat; 31641 return p; 31642 } 31643 31644 var names$21 = ["Miller_Cylindrical", "mill"]; 31645 var mill = { 31646 init: init$20, 31647 forward: forward$19, 31648 inverse: inverse$19, 31649 names: names$21 31650 }; 31651 31652 var MAX_ITER$3 = 20; 31653 function init$21() { 31654 /* Place parameters in static storage for common use 31655 -------------------------------------------------*/ 31656 31657 31658 if (!this.sphere) { 31659 this.en = pj_enfn(this.es); 31660 } 31661 else { 31662 this.n = 1; 31663 this.m = 0; 31664 this.es = 0; 31665 this.C_y = Math.sqrt((this.m + 1) / this.n); 31666 this.C_x = this.C_y / (this.m + 1); 31667 } 31668 31669 } 31670 31671 /* Sinusoidal forward equations--mapping lat,long to x,y 31672 -----------------------------------------------------*/ 31673 function forward$20(p) { 31674 var x, y; 31675 var lon = p.x; 31676 var lat = p.y; 31677 /* Forward equations 31678 -----------------*/ 31679 lon = adjust_lon(lon - this.long0); 31680 31681 if (this.sphere) { 31682 if (!this.m) { 31683 lat = this.n !== 1 ? Math.asin(this.n * Math.sin(lat)) : lat; 31684 } 31685 else { 31686 var k = this.n * Math.sin(lat); 31687 for (var i = MAX_ITER$3; i; --i) { 31688 var V = (this.m * lat + Math.sin(lat) - k) / (this.m + Math.cos(lat)); 31689 lat -= V; 31690 if (Math.abs(V) < EPSLN) { 31691 break; 31692 } 31693 } 31694 } 31695 x = this.a * this.C_x * lon * (this.m + Math.cos(lat)); 31696 y = this.a * this.C_y * lat; 31697 31698 } 31699 else { 31700 31701 var s = Math.sin(lat); 31702 var c = Math.cos(lat); 31703 y = this.a * pj_mlfn(lat, s, c, this.en); 31704 x = this.a * lon * c / Math.sqrt(1 - this.es * s * s); 31705 } 31706 31707 p.x = x; 31708 p.y = y; 31709 return p; 31710 } 31711 31712 function inverse$20(p) { 31713 var lat, temp, lon, s; 31714 31715 p.x -= this.x0; 31716 lon = p.x / this.a; 31717 p.y -= this.y0; 31718 lat = p.y / this.a; 31719 31720 if (this.sphere) { 31721 lat /= this.C_y; 31722 lon = lon / (this.C_x * (this.m + Math.cos(lat))); 31723 if (this.m) { 31724 lat = asinz((this.m * lat + Math.sin(lat)) / this.n); 31725 } 31726 else if (this.n !== 1) { 31727 lat = asinz(Math.sin(lat) / this.n); 31728 } 31729 lon = adjust_lon(lon + this.long0); 31730 lat = adjust_lat(lat); 31731 } 31732 else { 31733 lat = pj_inv_mlfn(p.y / this.a, this.es, this.en); 31734 s = Math.abs(lat); 31735 if (s < HALF_PI) { 31736 s = Math.sin(lat); 31737 temp = this.long0 + p.x * Math.sqrt(1 - this.es * s * s) / (this.a * Math.cos(lat)); 31738 //temp = this.long0 + p.x / (this.a * Math.cos(lat)); 31739 lon = adjust_lon(temp); 31740 } 31741 else if ((s - EPSLN) < HALF_PI) { 31742 lon = this.long0; 31743 } 31744 } 31745 p.x = lon; 31746 p.y = lat; 31747 return p; 31748 } 31749 31750 var names$22 = ["Sinusoidal", "sinu"]; 31751 var sinu = { 31752 init: init$21, 31753 forward: forward$20, 31754 inverse: inverse$20, 31755 names: names$22 31756 }; 31757 31758 function init$22() {} 31759 /* Mollweide forward equations--mapping lat,long to x,y 31760 ----------------------------------------------------*/ 31761 function forward$21(p) { 31762 31763 /* Forward equations 31764 -----------------*/ 31765 var lon = p.x; 31766 var lat = p.y; 31767 31768 var delta_lon = adjust_lon(lon - this.long0); 31769 var theta = lat; 31770 var con = Math.PI * Math.sin(lat); 31771 31772 /* Iterate using the Newton-Raphson method to find theta 31773 -----------------------------------------------------*/ 31774 while (true) { 31775 var delta_theta = -(theta + Math.sin(theta) - con) / (1 + Math.
31775cos(theta)); 31776 theta += delta_theta; 31777 if (Math.abs(delta_theta) < EPSLN) { 31778 break; 31779 } 31780 } 31781 theta /= 2; 31782 31783 /* If the latitude is 90 deg, force the x coordinate to be "0 + false easting" 31784 this is done here because of precision problems with "cos(theta)" 31785 --------------------------------------------------------------------------*/ 31786 if (Math.PI / 2 - Math.abs(lat) < EPSLN) { 31787 delta_lon = 0; 31788 } 31789 var x = 0.900316316158 * this.a * delta_lon * Math.cos(theta) + this.x0; 31790 var y = 1.4142135623731 * this.a * Math.sin(theta) + this.y0; 31791 31792 p.x = x; 31793 p.y = y; 31794 return p; 31795 } 31796 31797 function inverse$21(p) { 31798 var theta; 31799 var arg; 31800 31801 /* Inverse equations 31802 -----------------*/ 31803 p.x -= this.x0; 31804 p.y -= this.y0; 31805 arg = p.y / (1.4142135623731 * this.a); 31806 31807 /* Because of division by zero problems, 'arg' can not be 1. Therefore 31808 a number very close to one is used instead. 31809 -------------------------------------------------------------------*/ 31810 if (Math.abs(arg) > 0.999999999999) { 31811 arg = 0.999999999999; 31812 } 31813 theta = Math.asin(arg); 31814 var lon = adjust_lon(this.long0 + (p.x / (0.900316316158 * this.a * Math.cos(theta)))); 31815 if (lon < (-Math.PI)) { 31816 lon = -Math.PI; 31817 } 31818 if (lon > Math.PI) { 31819 lon = Math.PI; 31820 } 31821 arg = (2 * theta + Math.sin(2 * theta)) / Math.PI; 31822 if (Math.abs(arg) > 1) { 31823 arg = 1; 31824 } 31825 var lat = Math.asin(arg); 31826 31827 p.x = lon; 31828 p.y = lat; 31829 return p; 31830 } 31831 31832 var names$23 = ["Mollweide", "moll"]; 31833 var moll = { 31834 init: init$22, 31835 forward: forward$21, 31836 inverse: inverse$21, 31837 names: names$23 31838 }; 31839 31840 function init$23() { 31841 31842 /* Place parameters in static storage for common use 31843 -------------------------------------------------*/ 31844 // Standard Parallels cannot be equal and on opposite sides of the equator 31845 if (Math.abs(this.lat1 + this.lat2) < EPSLN) { 31846 return; 31847 } 31848 this.lat2 = this.lat2 || this.lat1; 31849 this.temp = this.b / this.a; 31850 this.es = 1 - Math.pow(this.temp, 2); 31851 this.e = Math.sqrt(this.es); 31852 this.e0 = e0fn(this.es); 31853 this.e1 = e1fn(this.es); 31854 this.e2 = e2fn(this.es); 31855 this.e3 = e3fn(this.es); 31856 31857 this.sinphi = Math.sin(this.lat1); 31858 this.cosphi = Math.cos(this.lat1); 31859 31860 this.ms1 = msfnz(this.e, this.sinphi, this.cosphi); 31861 this.ml1 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat1); 31862 31863 if (Math.abs(this.lat1 - this.lat2) < EPSLN) { 31864 this.ns = this.sinphi; 31865 } 31866 else { 31867 this.sinphi = Math.sin(this.lat2); 31868 this.cosphi = Math.cos(this.lat2); 31869 this.ms2 = msfnz(this.e, this.sinphi, this.cosphi); 31870 this.ml2 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat2); 31871 this.ns = (this.ms1 - this.ms2) / (this.ml2 - this.ml1); 31872 } 31873 this.g = this.ml1 + this.ms1 / this.ns; 31874 this.ml0 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0); 31875 this.rh = this.a * (this.g - this.ml0); 31876 } 31877 31878 /* Equidistant Conic forward equations--mapping lat,long to x,y 31879 -----------------------------------------------------------*/ 31880 function forward$22(p) { 31881 var lon = p.x; 31882 var lat = p.y; 31883 var rh1; 31884 31885 /* Forward equations 31886 -----------------*/ 31887 if (this.sphere) { 31888 rh1 = this.a * (this.g - lat); 31889 } 31890 else { 31891 var ml = mlfn(this.e0, this.e1, this.e2, this.e3, lat); 31892 rh1 = this.a * (this.g - ml); 31893 } 31894 var theta = this.ns * adjust_lon(lon - this.long0); 31895 var x = this.x0 + rh1 * Math.sin(theta); 31896 var y = this.y0 + this.rh - rh1 * Math.cos(theta); 31897 p.x = x; 31898 p.y = y; 31899 return p; 31900 } 31901 31902 /* Inverse equations 31903 -----------------*/ 31904 function inverse$22(p) { 31905 p.x -= this.x0; 31906 p.y = this.rh - p.y + this.y0; 31907 var con, rh1, lat, lon; 31908 if (this.ns >= 0) { 31909 rh1 = Math.sqrt(p.x * p.x + p.y * p.y); 31910 con = 1; 31911 } 31912 else {
31913 rh1 = -Math.sqrt(p.x * p.x + p.y * p.y); 31914 con = -1; 31915 } 31916 var theta = 0; 31917 if (rh1 !== 0) { 31918 theta = Math.atan2(con * p.x, con * p.y); 31919 } 31920 31921 if (this.sphere) { 31922 lon = adjust_lon(this.long0 + theta / this.ns); 31923 lat = adjust_lat(this.g - rh1 / this.a); 31924 p.x = lon; 31925 p.y = lat; 31926 return p; 31927 } 31928 else { 31929 var ml = this.g - rh1 / this.a; 31930 lat = imlfn(ml, this.e0, this.e1, this.e2, this.e3); 31931 lon = adjust_lon(this.long0 + theta / this.ns); 31932 p.x = lon; 31933 p.y = lat; 31934 return p; 31935 } 31936 31937 } 31938 31939 var names$24 = ["Equidistant_Conic", "eqdc"]; 31940 var eqdc = { 31941 init: init$23, 31942 forward: forward$22, 31943 inverse: inverse$22, 31944 names: names$24 31945 }; 31946 31947 /* Initialize the Van Der Grinten projection 31948 ----------------------------------------*/ 31949 function init$24() { 31950 //this.R = 6370997; //Radius of earth 31951 this.R = this.a; 31952 } 31953 31954 function forward$23(p) { 31955 31956 var lon = p.x; 31957 var lat = p.y; 31958 31959 /* Forward equations 31960 -----------------*/ 31961 var dlon = adjust_lon(lon - this.long0); 31962 var x, y; 31963 31964 if (Math.abs(lat) <= EPSLN) { 31965 x = this.x0 + this.R * dlon; 31966 y = this.y0; 31967 } 31968 var theta = asinz(2 * Math.abs(lat / Math.PI)); 31969 if ((Math.abs(dlon) <= EPSLN) || (Math.abs(Math.abs(lat) - HALF_PI) <= EPSLN)) { 31970 x = this.x0; 31971 if (lat >= 0) { 31972 y = this.y0 + Math.PI * this.R * Math.tan(0.5 * theta); 31973 } 31974 else { 31975 y = this.y0 + Math.PI * this.R * -Math.tan(0.5 * theta); 31976 } 31977 // return(OK); 31978 } 31979 var al = 0.5 * Math.abs((Math.PI / dlon) - (dlon / Math.PI)); 31980 var asq = al * al; 31981 var sinth = Math.sin(theta); 31982 var costh = Math.cos(theta); 31983 31984 var g = costh / (sinth + costh - 1); 31985 var gsq = g * g; 31986 var m = g * (2 / sinth - 1); 31987 var msq = m * m; 31988 var con = Math.PI * this.R * (al * (g - msq) + Math.sqrt(asq * (g - msq) * (g - msq) - (msq + asq) * (gsq - msq))) / (msq + asq); 31989 if (dlon < 0) { 31990 con = -con; 31991 } 31992 x = this.x0 + con; 31993 //con = Math.abs(con / (Math.PI * this.R)); 31994 var q = asq + g; 31995 con = Math.PI * this.R * (m * q - al * Math.sqrt((msq + asq) * (asq + 1) - q * q)) / (msq + asq); 31996 if (lat >= 0) { 31997 //y = this.y0 + Math.PI * this.R * Math.sqrt(1 - con * con - 2 * al * con); 31998 y = this.y0 + con; 31999 } 32000 else { 32001 //y = this.y0 - Math.PI * this.R * Math.sqrt(1 - con * con - 2 * al * con); 32002 y = this.y0 - con; 32003 } 32004 p.x = x; 32005 p.y = y; 32006 return p; 32007 } 32008 32009 /* Van Der Grinten inverse equations--mapping x,y to lat/long 32010 ---------------------------------------------------------*/ 32011 function inverse$23(p) { 32012 var lon, lat; 32013 var xx, yy, xys, c1, c2, c3; 32014 var a1; 32015 var m1; 32016 var con; 32017 var th1; 32018 var d; 32019 32020 /* inverse equations 32021 -----------------*/ 32022 p.x -= this.x0; 32023 p.y -= this.y0; 32024 con = Math.PI * this.R; 32025 xx = p.x / con; 32026 yy = p.y / con; 32027 xys = xx * xx + yy * yy; 32028 c1 = -Math.abs(yy) * (1 + xys); 32029 c2 = c1 - 2 * yy * yy + xx * xx; 32030 c3 = -2 * c1 + 1 + 2 * yy * yy + xys * xys; 32031 d = yy * yy / c3 + (2 * c2 * c2 * c2 / c3 / c3 / c3 - 9 * c1 * c2 / c3 / c3) / 27; 32032 a1 = (c1 - c2 * c2 / 3 / c3) / c3; 32033 m1 = 2 * Math.sqrt(-a1 / 3); 32034 con = ((3 * d) / a1) / m1; 32035 if (Math.abs(con) > 1) { 32036 if (con >= 0) { 32037 con = 1; 32038 } 32039 else { 32040 con = -1; 32041 } 32042 } 32043 th1 = Math.acos(con) / 3; 32044 if (p.y >= 0) { 32045 lat = (-m1 * Math.cos(th1 + Math.PI / 3) - c2 / 3 / c3) * Math.PI; 32046 } 32047 else { 32048 lat = -(-m1 * Math.cos(th1 + Math.PI / 3) - c2 / 3 / c3) * Math.PI; 32049 } 32050 32051 if (Math.abs(xx) < EPSLN) { 32052 lon = this.long0; 32053 } 32054 else { 32055 lon = adjust_lon(this.long0 + Math.PI * (xys - 1 + Math.sqrt(1 + 2 * (xx * xx - yy * yy) + xys * xys)) / 2 / xx); 32056 } 32057 32058 p.x = lon; 32059 p.y = lat; 32060 return p; 32061 } 32062 32063 var names$25 = ["Van_der_Grinten_I", "VanDerGrinten", "vandg"]; 32064 var vandg = { 32065 init: init$24, 32066 forward: forward$23, 32067 inverse: inverse$23, 32068 names: names$25 32069 }; 32070 32071 function init$25() { 32072 this.sin_p12 = Math.sin(this.lat0);
32073 this.cos_p12 = Math.cos(this.lat0); 32074 } 32075 32076 function forward$24(p) { 32077 var lon = p.x; 32078 var lat = p.y; 32079 var sinphi = Math.sin(p.y); 32080 var cosphi = Math.cos(p.y); 32081 var dlon = adjust_lon(lon - this.long0); 32082 var e0, e1, e2, e3, Mlp, Ml, tanphi, Nl1, Nl, psi, Az, G, H, GH, Hs, c, kp, cos_c, s, s2, s3, s4, s5; 32083 if (this.sphere) { 32084 if (Math.abs(this.sin_p12 - 1) <= EPSLN) { 32085 //North Pole case 32086 p.x = this.x0 + this.a * (HALF_PI - lat) * Math.sin(dlon); 32087 p.y = this.y0 - this.a * (HALF_PI - lat) * Math.cos(dlon); 32088 return p; 32089 } 32090 else if (Math.abs(this.sin_p12 + 1) <= EPSLN) { 32091 //South Pole case 32092 p.x = this.x0 + this.a * (HALF_PI + lat) * Math.sin(dlon); 32093 p.y = this.y0 + this.a * (HALF_PI + lat) * Math.cos(dlon); 32094 return p; 32095 } 32096 else { 32097 //default case 32098 cos_c = this.sin_p12 * sinphi + this.cos_p12 * cosphi * Math.cos(dlon); 32099 c = Math.acos(cos_c); 32100 kp = c ? c / Math.sin(c) : 1; 32101 p.x = this.x0 + this.a * kp * cosphi * Math.sin(dlon); 32102 p.y = this.y0 + this.a * kp * (this.cos_p12 * sinphi - this.sin_p12 * cosphi * Math.cos(dlon)); 32103 return p; 32104 } 32105 } 32106 else { 32107 e0 = e0fn(this.es); 32108 e1 = e1fn(this.es); 32109 e2 = e2fn(this.es); 32110 e3 = e3fn(this.es); 32111 if (Math.abs(this.sin_p12 - 1) <= EPSLN) { 32112 //North Pole case 32113 Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI); 32114 Ml = this.a * mlfn(e0, e1, e2, e3, lat); 32115 p.x = this.x0 + (Mlp - Ml) * Math.sin(dlon); 32116 p.y = this.y0 - (Mlp - Ml) * Math.cos(dlon); 32117 return p; 32118 } 32119 else if (Math.abs(this.sin_p12 + 1) <= EPSLN) { 32120 //South Pole case 32121 Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI); 32122 Ml = this.a * mlfn(e0, e1, e2, e3, lat); 32123 p.x = this.x0 + (Mlp + Ml) * Math.sin(dlon); 32124 p.y = this.y0 + (Mlp + Ml) * Math.cos(dlon); 32125 return p; 32126 } 32127 else { 32128 //Default case 32129 tanphi = sinphi / cosphi; 32130 Nl1 = gN(this.a, this.e, this.sin_p12); 32131 Nl = gN(this.a, this.e, sinphi); 32132 psi = Math.atan((1 - this.es) * tanphi + this.es * Nl1 * this.sin_p12 / (Nl * cosphi)); 32133 Az = Math.atan2(Math.sin(dlon), this.cos_p12 * Math.tan(psi) - this.sin_p12 * Math.cos(dlon)); 32134 if (Az === 0) { 32135 s = Math.asin(this.cos_p12 * Math.sin(psi) - this.sin_p12 * Math.cos(psi)); 32136 } 32137 else if (Math.abs(Math.abs(Az) - Math.PI) <= EPSLN) { 32138 s = -Math.asin(this.cos_p12 * Math.sin(psi) - this.sin_p12 * Math.cos(psi)); 32139 } 32140 else { 32141 s = Math.asin(Math.sin(dlon) * Math.cos(psi) / Math.sin(Az)); 32142 } 32143 G = this.e * this.sin_p12 / Math.sqrt(1 - this.es); 32144 H = this.e * this.cos_p12 * Math.cos(Az) / Math.sqrt(1 - this.es); 32145 GH = G * H; 32146 Hs = H * H; 32147 s2 = s * s; 32148 s3 = s2 * s; 32149 s4 = s3 * s; 32150 s5 = s4 * s; 32151 c = Nl1 * s * (1 - s2 * Hs * (1 - Hs) / 6 + s3 / 8 * GH * (1 - 2 * Hs) + s4 / 120 * (Hs * (4 - 7 * Hs) - 3 * G * G * (1 - 7 * Hs)) - s5 / 48 * GH); 32152 p.x = this.x0 + c * Math.sin(Az); 32153 p.y = this.y0 + c * Math.cos(Az); 32154 return p; 32155 } 32156 } 32157 32158 32159 } 32160 32161 function inverse$24(p) { 32162 p.x -= this.x0; 32163 p.y -= this.y0; 32164 var rh, z, sinz, cosz, lon, lat, con, e0, e1, e2, e3, Mlp, M, N1, psi, Az, cosAz, tmp, A, B, D, Ee, F, sinpsi; 32165 if (this.sphere) { 32166 rh = Math.sqrt(p.x * p.x + p.y * p.y); 32167 if (rh > (2 * HALF_PI * this.a)) { 32168 return; 32169 } 32170 z = rh / this.a; 32171 32172 sinz = Math.sin(z); 32173 cosz = Math.cos(z); 32174 32175 lon = this.long0; 32176 if (Math.abs(rh) <= EPSLN) { 32177 lat = this.lat0; 32178 } 32179 else { 32180 lat = asinz(cosz * this.sin_p12 + (p.y * sinz * this.cos_p12) / rh); 32181 con = Math.abs(this.lat0) - HALF_PI; 32182 if (Math.abs(con) <= EPSLN) { 32183 if (this.lat0 >= 0) { 32184 lon = adjust_lon(this.long0 + Math.atan2(p.x, - p.y)); 32185 } 32186 else { 32187 lon = adjust_lon(this.long0 - Math.atan2(-p.x, p.y)); 32188 } 32189 } 32190 else { 32191 /*con = cosz - this.sin_p12 * Math.sin(lat); 32192 if ((Math.abs(con) < EPSLN) && (Math.abs(p.x) < EPSLN)) { 32193 //no-op, just keep the lon value as is 32194 } else { 32195 var temp = Math.atan2((p.x * sinz * this.cos_p12), (con * rh)); 32196 lon = adjust_lon(this.long0 + Math.atan2((p.x * sinz * this.cos_p12), (con * rh))); 32197 }*/ 32198 lon = adjust_lon(this.long0 + Math.atan2(p.x * sinz, rh * this.cos_p12 * cosz - p.y * this.sin_p12 * sinz)); 32199 } 32200 } 32201 32202 p.x = lon; 32203 p.y = lat; 32204 return p; 32205 } 32206 else { 32207 e0 = e0fn(this.es); 32208 e1 = e1fn(this.es); 32209 e2 = e2fn(this.es); 32210 e3 = e3fn(this.es); 32211 if (Math.abs(this.sin_p12 - 1) <= EPSLN) { 32212 //North pole case 32213 Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI); 32214 rh = Math.sqrt(p.x * p.x + p.y * p.y); 32215 M = Mlp - rh; 32216 lat = imlfn(M / this.a, e0, e1, e2, e3); 32217 lon = adjust_lon(this.long0 + Math.atan2(p.x, - 1 * p.y)); 32218 p.x = lon; 32219 p.y = lat; 32220 return p; 32221 } 32222 else if (Math.abs(this.sin_p12 + 1) <= EPSLN) { 32223 //South pole case 32224 Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI); 32225 rh = Math.sqrt(p.x * p.x + p.y * p.y); 32226 M = rh - Mlp; 32227 32228 lat = imlfn(M / this.a, e0, e1, e2, e3); 32229 lon = adjust_lon(this.long0 + Math.atan2(p.x, p.y)); 32230 p.x = lon; 32231 p.y = lat; 32232 return p; 32233 } 32234 else { 32235 //default case 32236 rh = Math.sqrt(p.x * p.x + p.y * p.y); 32237 Az = Math.atan2(p.x, p.y); 32238 N1 = gN(this.a, this.e, this.sin_p12);
32239 cosAz = Math.cos(Az); 32240 tmp = this.e * this.cos_p12 * cosAz; 32241 A = -tmp * tmp / (1 - this.es); 32242 B = 3 * this.es * (1 - A) * this.sin_p12 * this.cos_p12 * cosAz / (1 - this.es); 32243 D = rh / N1; 32244 Ee = D - A * (1 + A) * Math.pow(D, 3) / 6 - B * (1 + 3 * A) * Math.pow(D, 4) / 24; 32245 F = 1 - A * Ee * Ee / 2 - D * Ee * Ee * Ee / 6; 32246 psi = Math.asin(this.sin_p12 * Math.cos(Ee) + this.cos_p12 * Math.sin(Ee) * cosAz); 32247 lon = adjust_lon(this.long0 + Math.asin(Math.sin(Az) * Math.sin(Ee) / Math.cos(psi))); 32248 sinpsi = Math.sin(psi); 32249 lat = Math.atan2((sinpsi - this.es * F * this.sin_p12) * Math.tan(psi), sinpsi * (1 - this.es)); 32250 p.x = lon; 32251 p.y = lat; 32252 return p; 32253 } 32254 } 32255 32256 } 32257 32258 var names$26 = ["Azimuthal_Equidistant", "aeqd"]; 32259 var aeqd = { 32260 init: init$25, 32261 forward: forward$24, 32262 inverse: inverse$24, 32263 names: names$26 32264 }; 32265 32266 function init$26() { 32267 //double temp; /* temporary variable */ 32268 32269 /* Place parameters in static storage for common use 32270 -------------------------------------------------*/ 32271 this.sin_p14 = Math.sin(this.lat0); 32272 this.cos_p14 = Math.cos(this.lat0); 32273 } 32274 32275 /* Orthographic forward equations--mapping lat,long to x,y 32276 ---------------------------------------------------*/ 32277 function forward$25(p) { 32278 var sinphi, cosphi; /* sin and cos value */ 32279 var dlon; /* delta longitude value */ 32280 var coslon; /* cos of longitude */ 32281 var ksp; /* scale factor */ 32282 var g, x, y; 32283 var lon = p.x; 32284 var lat = p.y; 32285 /* Forward equations 32286 -----------------*/ 32287 dlon = adjust_lon(lon - this.long0); 32288 32289 sinphi = Math.sin(lat); 32290 cosphi = Math.cos(lat); 32291 32292 coslon = Math.cos(dlon); 32293 g = this.sin_p14 * sinphi + this.cos_p14 * cosphi * coslon; 32294 ksp = 1; 32295 if ((g > 0) || (Math.abs(g) <= EPSLN)) { 32296 x = this.a * ksp * cosphi * Math.sin(dlon); 32297 y = this.y0 + this.a * ksp * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon); 32298 } 32299 p.x = x; 32300 p.y = y; 32301 return p; 32302 } 32303 32304 function inverse$25(p) { 32305 var rh; /* height above ellipsoid */ 32306 var z; /* angle */ 32307 var sinz, cosz; /* sin of z and cos of z */ 32308 var con; 32309 var lon, lat; 32310 /* Inverse equations 32311 -----------------*/ 32312 p.x -= this.x0; 32313 p.y -= this.y0; 32314 rh = Math.sqrt(p.x * p.x + p.y * p.y); 32315 z = asinz(rh / this.a); 32316 32317 sinz = Math.sin(z); 32318 cosz = Math.cos(z); 32319 32320 lon = this.long0; 32321 if (Math.abs(rh) <= EPSLN) { 32322 lat = this.lat0; 32323 p.x = lon; 32324 p.y = lat; 32325 return p; 32326 } 32327 lat = asinz(cosz * this.sin_p14 + (p.y * sinz * this.cos_p14) / rh); 32328 con = Math.abs(this.lat0) - HALF_PI; 32329 if (Math.abs(con) <= EPSLN) { 32330 if (this.lat0 >= 0) { 32331 lon = adjust_lon(this.long0 + Math.atan2(p.x, - p.y)); 32332 } 32333 else { 32334 lon = adjust_lon(this.long0 - Math.atan2(-p.x, p.y)); 32335 } 32336 p.x = lon; 32337 p.y = lat; 32338 return p; 32339 } 32340 lon = adjust_lon(this.long0 + Math.atan2((p.x * sinz), rh * this.cos_p14 * cosz - p.y * this.sin_p14 * sinz)); 32341 p.x = lon; 32342 p.y = lat; 32343 return p; 32344 } 32345 32346 var names$27 = ["ortho"]; 32347 var ortho = { 32348 init: init$26, 32349 forward: forward$25, 32350 inverse: inverse$25, 32351 names: names$27 32352 }; 32353 32354 // QSC projection rewritten from the original PROJ4 32355 // https://github.com/OSGeo/proj.4/blob/master/src/PJ_qsc.c 32356 32357 /* constants */ 32358 var FACE_ENUM = { 32359 FRONT: 1, 32360 RIGHT: 2, 32361 BACK: 3, 32362 LEFT: 4, 32363 TOP: 5, 32364 BOTTOM: 6 32365 }; 32366 32367 var AREA_ENUM = { 32368 AREA_0: 1, 32369 AREA_1: 2, 32370 AREA_2: 3, 32371 AREA_3: 4 32372 }; 32373 32374 function init$27() { 32375 32376 this.x0 = this.x0 || 0; 32377 this.y0 = this.y0 || 0; 32378 this.lat0 = this.lat0 || 0; 32379 this.long0 = this.long0 || 0; 32380 this.lat_ts = this.lat_ts || 0; 32381 this.title = this.title || "Quadrilateralized Spherical Cube"; 32382 32383 /* Determine the cube face from the center of projection. */ 32384 if (this.lat0 >= HALF_PI - FORTPI / 2.0) { 32385 this.face = FACE_ENUM.TOP; 32386 } else if (this.lat0 <= -(HALF_PI - FORTPI / 2.0)) { 32387 this.face = FACE_ENUM.BOTTOM; 32388 } else if (Math.abs(this.long0) <= FORTPI) { 32389 this.face = FACE_ENUM.FRONT; 32390 } else if (Math.abs(this.long0) <= HALF_PI + FORTPI) { 32391 this.face = this.long0 > 0.0 ? FACE_ENUM.RIGHT : FACE_ENUM.LEFT; 32392 } else { 32393 this.face = FACE_ENUM.BACK; 32394 } 32395 32396 /* Fill in useful values for the ellipsoid <-> sphere shift
32397 * described in [LK12]. */ 32398 if (this.es !== 0) { 32399 this.one_minus_f = 1 - (this.a - this.b) / this.a; 32400 this.one_minus_f_squared = this.one_minus_f * this.one_minus_f; 32401 } 32402 } 32403 32404 // QSC forward equations--mapping lat,long to x,y 32405 // ----------------------------------------------------------------- 32406 function forward$26(p) { 32407 var xy = {x: 0, y: 0}; 32408 var lat, lon; 32409 var theta, phi; 32410 var t, mu; 32411 /* nu; */ 32412 var area = {value: 0}; 32413 32414 // move lon according to projection's lon 32415 p.x -= this.long0; 32416 32417 /* Convert the geodetic latitude to a geocentric latitude. 32418 * This corresponds to the shift from the ellipsoid to the sphere 32419 * described in [LK12]. */ 32420 if (this.es !== 0) {//if (P->es != 0) { 32421 lat = Math.atan(this.one_minus_f_squared * Math.tan(p.y)); 32422 } else { 32423 lat = p.y; 32424 } 32425 32426 /* Convert the input lat, lon into theta, phi as used by QSC. 32427 * This depends on the cube face and the area on it. 32428 * For the top and bottom face, we can compute theta and phi 32429 * directly from phi, lam. For the other faces, we must use 32430 * unit sphere cartesian coordinates as an intermediate step. */ 32431 lon = p.x; //lon = lp.lam; 32432 if (this.face === FACE_ENUM.TOP) { 32433 phi = HALF_PI - lat; 32434 if (lon >= FORTPI && lon <= HALF_PI + FORTPI) { 32435 area.value = AREA_ENUM.AREA_0; 32436 theta = lon - HALF_PI; 32437 } else if (lon > HALF_PI + FORTPI || lon <= -(HALF_PI + FORTPI)) { 32438 area.value = AREA_ENUM.AREA_1; 32439 theta = (lon > 0.0 ? lon - SPI : lon + SPI); 32440 } else if (lon > -(HALF_PI + FORTPI) && lon <= -FORTPI) { 32441 area.value = AREA_ENUM.AREA_2; 32442 theta = lon + HALF_PI; 32443 } else { 32444 area.value = AREA_ENUM.AREA_3; 32445 theta = lon; 32446 } 32447 } else if (this.face === FACE_ENUM.BOTTOM) { 32448 phi = HALF_PI + lat; 32449 if (lon >= FORTPI && lon <= HALF_PI + FORTPI) { 32450 area.value = AREA_ENUM.AREA_0; 32451 theta = -lon + HALF_PI; 32452 } else if (lon < FORTPI && lon >= -FORTPI) { 32453 area.value = AREA_ENUM.AREA_1; 32454 theta = -lon; 32455 } else if (lon < -FORTPI && lon >= -(HALF_PI + FORTPI)) { 32456 area.value = AREA_ENUM.AREA_2; 32457 theta = -lon - HALF_PI; 32458 } else { 32459 area.value = AREA_ENUM.AREA_3; 32460 theta = (lon > 0.0 ? -lon + SPI : -lon - SPI); 32461 } 32462 } else { 32463 var q, r, s; 32464 var sinlat, coslat; 32465 var sinlon, coslon; 32466 32467 if (this.face === FACE_ENUM.RIGHT) { 32468 lon = qsc_shift_lon_origin(lon, +HALF_PI); 32469 } else if (this.face === FACE_ENUM.BACK) { 32470 lon = qsc_shift_lon_origin(lon, +SPI); 32471 } else if (this.face === FACE_ENUM.LEFT) { 32472 lon = qsc_shift_lon_origin(lon, -HALF_PI); 32473 } 32474 sinlat = Math.sin(lat); 32475 coslat = Math.cos(lat); 32476 sinlon = Math.sin(lon); 32477 coslon = Math.cos(lon); 32478 q = coslat * coslon; 32479 r = coslat * sinlon; 32480 s = sinlat; 32481 32482 if (this.face === FACE_ENUM.FRONT) { 32483 phi = Math.acos(q); 32484 theta = qsc_fwd_equat_face_theta(phi, s, r, area); 32485 } else if (this.face === FACE_ENUM.RIGHT) { 32486 phi = Math.acos(r); 32487 theta = qsc_fwd_equat_face_theta(phi, s, -q, area); 32488 } else if (this.face === FACE_ENUM.BACK) { 32489 phi = Math.acos(-q); 32490 theta = qsc_fwd_equat_face_theta(phi, s, -r, area); 32491 } else if (this.face === FACE_ENUM.LEFT) { 32492 phi = Math.acos(-r); 32493 theta = qsc_fwd_equat_face_theta(phi, s, q, area); 32494 } else { 32495 /* Impossible */ 32496 phi = theta = 0; 32497 area.value = AREA_ENUM.AREA_0; 32498 } 32499 } 32500 32501 /* Compute mu and nu for the area of definition. 32502 * For mu, see Eq. (3-21) in [OL76], but note the typos: 32503 * compare with Eq. (3-14). For nu, see Eq. (3-38). */ 32504 mu = Math.atan((12 / SPI) * (theta + Math.acos(Math.sin(theta) * Math.cos(FORTPI)) - HALF_PI)); 32505 t = Math.sqrt((1 - Math.cos(phi)) / (Math.cos(mu) * Math.cos(mu)) / (1 - Math.cos(Math.atan(1 / Math.cos(theta))))); 32506 32507 /* Apply the result to the real area. */ 32508 if (area.value === AREA_ENUM.AREA_1) { 32509 mu += HALF_PI; 32510 } else if (area.value === AREA_ENUM.AREA_2) { 32511 mu += SPI; 32512 } else if (area.value === AREA_ENUM.AREA_3) { 32513 mu += 1.5 * SPI; 32514 } 32515 32516 /* Now compute x, y from mu and nu */ 32517 xy.x = t * Math.cos(mu); 32518 xy.y = t * Math.sin(mu); 32519 xy.x = xy.x * this.a + this.x0; 32520 xy.y = xy.y * this.a + this.y0; 32521 32522 p.x = xy.x; 32523 p.y = xy.y; 32524 return p; 32525 } 32526 32527 // QSC inverse equations--mapping x,y to lat/long 32528 // ----------------------------------------------------------------- 32529 function inverse$26(p) { 32530 var lp = {lam: 0, phi: 0}; 32531 var mu, nu, cosmu, tannu; 32532 var tantheta, theta, cosphi, phi; 32533 var t; 32534 var area = {value: 0}; 32535
32536 /* de-offset */ 32537 p.x = (p.x - this.x0) / this.a; 32538 p.y = (p.y - this.y0) / this.a; 32539 32540 /* Convert the input x, y to the mu and nu angles as used by QSC. 32541 * This depends on the area of the cube face. */ 32542 nu = Math.atan(Math.sqrt(p.x * p.x + p.y * p.y)); 32543 mu = Math.atan2(p.y, p.x); 32544 if (p.x >= 0.0 && p.x >= Math.abs(p.y)) { 32545 area.value = AREA_ENUM.AREA_0; 32546 } else if (p.y >= 0.0 && p.y >= Math.abs(p.x)) { 32547 area.value = AREA_ENUM.AREA_1; 32548 mu -= HALF_PI; 32549 } else if (p.x < 0.0 && -p.x >= Math.abs(p.y)) { 32550 area.value = AREA_ENUM.AREA_2; 32551 mu = (mu < 0.0 ? mu + SPI : mu - SPI); 32552 } else { 32553 area.value = AREA_ENUM.AREA_3; 32554 mu += HALF_PI; 32555 } 32556 32557 /* Compute phi and theta for the area of definition. 32558 * The inverse projection is not described in the original paper, but some 32559 * good hints can be found here (as of 2011-12-14): 32560 * http://fits.gsfc.nasa.gov/fitsbits/saf.93/saf.9302 32561 * (search for "Message-Id: <9302181759.AA25477 at fits.cv.nrao.edu>") */ 32562 t = (SPI / 12) * Math.tan(mu); 32563 tantheta = Math.sin(t) / (Math.cos(t) - (1 / Math.sqrt(2))); 32564 theta = Math.atan(tantheta); 32565 cosmu = Math.cos(mu); 32566 tannu = Math.tan(nu); 32567 cosphi = 1 - cosmu * cosmu * tannu * tannu * (1 - Math.cos(Math.atan(1 / Math.cos(theta)))); 32568 if (cosphi < -1) { 32569 cosphi = -1; 32570 } else if (cosphi > +1) { 32571 cosphi = +1; 32572 } 32573 32574 /* Apply the result to the real area on the cube face. 32575 * For the top and bottom face, we can compute phi and lam directly. 32576 * For the other faces, we must use unit sphere cartesian coordinates 32577 * as an intermediate step. */ 32578 if (this.face === FACE_ENUM.TOP) { 32579 phi = Math.acos(cosphi); 32580 lp.phi = HALF_PI - phi; 32581 if (area.value === AREA_ENUM.AREA_0) { 32582 lp.lam = theta + HALF_PI; 32583 } else if (area.value === AREA_ENUM.AREA_1) { 32584 lp.lam = (theta < 0.0 ? theta + SPI : theta - SPI); 32585 } else if (area.value === AREA_ENUM.AREA_2) { 32586 lp.lam = theta - HALF_PI; 32587 } else /* area.value == AREA_ENUM.AREA_3 */ { 32588 lp.lam = theta; 32589 } 32590 } else if (this.face === FACE_ENUM.BOTTOM) { 32591 phi = Math.acos(cosphi); 32592 lp.phi = phi - HALF_PI; 32593 if (area.value === AREA_ENUM.AREA_0) { 32594 lp.lam = -theta + HALF_PI; 32595 } else if (area.value === AREA_ENUM.AREA_1) { 32596 lp.lam = -theta; 32597 } else if (area.value === AREA_ENUM.AREA_2) { 32598 lp.lam = -theta - HALF_PI; 32599 } else /* area.value == AREA_ENUM.AREA_3 */ { 32600 lp.lam = (theta < 0.0 ? -theta - SPI : -theta + SPI); 32601 } 32602 } else { 32603 /* Compute phi and lam via cartesian unit sphere coordinates. */ 32604 var q, r, s; 32605 q = cosphi; 32606 t = q * q; 32607 if (t >= 1) { 32608 s = 0; 32609 } else { 32610 s = Math.sqrt(1 - t) * Math.sin(theta); 32611 } 32612 t += s * s; 32613 if (t >= 1) { 32614 r = 0; 32615 } else { 32616 r = Math.sqrt(1 - t); 32617 } 32618 /* Rotate q,r,s into the correct area. */ 32619 if (area.value === AREA_ENUM.AREA_1) { 32620 t = r; 32621 r = -s; 32622 s = t; 32623 } else if (area.value === AREA_ENUM.AREA_2) { 32624 r = -r; 32625 s = -s; 32626 } else if (area.value === AREA_ENUM.AREA_3) { 32627 t = r; 32628 r = s; 32629 s = -t; 32630 } 32631 /* Rotate q,r,s into the correct cube face. */ 32632 if (this.face === FACE_ENUM.RIGHT) { 32633 t = q; 32634 q = -r; 32635 r = t; 32636 } else if (this.face === FACE_ENUM.BACK) { 32637 q = -q; 32638 r = -r; 32639 } else if (this.face === FACE_ENUM.LEFT) { 32640 t = q; 32641 q = r; 32642 r = -t; 32643 } 32644 /* Now compute phi and lam from the unit sphere coordinates. */ 32645 lp.phi = Math.acos(-s) - HALF_PI; 32646 lp.lam = Math.atan2(r, q); 32647 if (this.face === FACE_ENUM.RIGHT) { 32648 lp.lam = qsc_shift_lon_origin(lp.lam, -HALF_PI); 32649 } else if (this.face === FACE_ENUM.BACK) { 32650 lp.lam = qsc_shift_lon_origin(lp.lam, -SPI); 32651 } else if (this.face === FACE_ENUM.LEFT) { 32652 lp.lam = qsc_shift_lon_origin(lp.lam, +HALF_PI); 32653 } 32654 } 32655 32656 /* Apply the shift from the sphere to the ellipsoid as described 32657 * in [LK12]. */ 32658 if (this.es !== 0) { 32659 var invert_sign; 32660 var tanphi, xa; 32661 invert_sign = (lp.phi < 0 ? 1 : 0); 32662 tanphi = Math.tan(lp.phi); 32663 xa = this.b / Math.sqrt(tanphi * tanphi + this.one_minus_f_squared); 32664 lp.phi = Math.atan(Math.sqrt(this.a * this.a - xa * xa) / (this.one_minus_f * xa)); 32665 if (invert_sign) { 32666 lp.phi = -lp.phi; 32667 } 32668 } 32669 32670 lp.lam += this.long0; 32671 p.x = lp.lam; 32672 p.y = lp.phi; 32673 return p; 32674 } 32675 32676 /* Helper function for forward projection: compute the theta angle 32677 * and determine the area number. */ 32678 function qsc_fwd_equat_face_theta(phi, y, x, area) { 32679 var theta; 32680 if (phi < EPSLN) { 32681 area.value = AREA_ENUM.AREA_0; 32682 theta = 0.0; 32683 } else { 32684 theta = Math.atan2(y, x); 32685 if (Math.abs(theta) <= FORTPI) { 32686 area.value = AREA_ENUM.AREA_0; 32687 } else if (theta > FORTPI && theta <= HALF_PI + FORTPI) { 32688 area.value = AREA_ENUM.AREA_1; 32689 theta -= HALF_PI; 32690 } else if (theta > HALF_PI + FORTPI || theta <= -(HALF_PI + FORTPI)) { 32691 area.value = AREA_ENUM.AREA_2; 32692 theta = (theta >= 0.0 ? theta - SPI : theta + SPI); 32693 } else { 32694 area.value = AREA_ENUM.AREA_3; 32695 theta += HALF_PI; 32696 } 32697 } 32698 return theta; 32699 } 32700 32701 /* Helper function: shift the longitude. */ 32702 function qsc_shift_lon_origin(lon, offset) { 32703 var slon = lon + offset; 32704 if (slon < -SPI) { 32705 slon += TWO_PI; 32706 } else if (slon > +SPI) { 32707 slon -= TWO_PI; 32708 } 32709 return slon; 32710 } 32711 32712 var names$28 = ["Quadrilateralized Spherical Cube", "Quadrilateralized_Spherical_Cube", "qsc"]; 32713 var qsc = { 32714 init: init$27, 32715 forward: forward$26, 32716 inverse: inverse$26, 32717 names: names$28 32718 }; 32719 32720 // Robinson projection 32721 // Based on https://github.com/OSGeo/proj.4/blob/master/src/PJ_robin.c
32722 // Polynomial coeficients from http://article.gmane.org/gmane.comp.gis.proj-4.devel/6039 32723 32724 var COEFS_X = [ 32725 [1.0000, 2.2199e-17, -7.15515e-05, 3.1103e-06], 32726 [0.9986, -0.000482243, -2.4897e-05, -1.3309e-06], 32727 [0.9954, -0.00083103, -4.48605e-05, -9.86701e-07], 32728 [0.9900, -0.00135364, -5.9661e-05, 3.6777e-06], 32729 [0.9822, -0.00167442, -4.49547e-06, -5.72411e-06], 32730 [0.9730, -0.00214868, -9.03571e-05, 1.8736e-08], 32731 [0.9600, -0.00305085, -9.00761e-05, 1.64917e-06], 32732 [0.9427, -0.00382792, -6.53386e-05, -2.6154e-06], 32733 [0.9216, -0.00467746, -0.00010457, 4.81243e-06], 32734 [0.8962, -0.00536223, -3.23831e-05, -5.43432e-06], 32735 [0.8679, -0.00609363, -0.000113898, 3.32484e-06], 32736 [0.8350, -0.00698325, -6.40253e-05, 9.34959e-07], 32737 [0.7986, -0.00755338, -5.00009e-05, 9.35324e-07], 32738 [0.7597, -0.00798324, -3.5971e-05, -2.27626e-06], 32739 [0.7186, -0.00851367, -7.01149e-05, -8.6303e-06], 32740 [0.6732, -0.00986209, -0.000199569, 1.91974e-05], 32741 [0.6213, -0.010418, 8.83923e-05, 6.24051e-06], 32742 [0.5722, -0.00906601, 0.000182, 6.24051e-06], 32743 [0.5322, -0.00677797, 0.000275608, 6.24051e-06] 32744 ]; 32745 32746 var COEFS_Y = [ 32747 [-5.20417e-18, 0.0124, 1.21431e-18, -8.45284e-11], 32748 [0.0620, 0.0124, -1.26793e-09, 4.22642e-10], 32749 [0.1240, 0.0124, 5.07171e-09, -1.60604e-09], 32750 [0.1860, 0.0123999, -1.90189e-08, 6.00152e-09], 32751 [0.2480, 0.0124002, 7.10039e-08, -2.24e-08], 32752 [0.3100, 0.0123992, -2.64997e-07, 8.35986e-08], 32753 [0.3720, 0.0124029, 9.88983e-07, -3.11994e-07], 32754 [0.4340, 0.0123893, -3.69093e-06, -4.35621e-07], 32755 [0.4958, 0.0123198, -1.02252e-05, -3.45523e-07], 32756 [0.5571, 0.0121916, -1.54081e-05, -5.82288e-07], 32757 [0.6176, 0.0119938, -2.41424e-05, -5.25327e-07],
32758 [0.6769, 0.011713, -3.20223e-05, -5.16405e-07], 32759 [0.7346, 0.0113541, -3.97684e-05, -6.09052e-07], 32760 [0.7903, 0.0109107, -4.89042e-05, -1.04739e-06], 32761 [0.8435, 0.0103431, -6.4615e-05, -1.40374e-09], 32762 [0.8936, 0.00969686, -6.4636e-05, -8.547e-06], 32763 [0.9394, 0.00840947, -0.000192841, -4.2106e-06], 32764 [0.9761, 0.00616527, -0.000256, -4.2106e-06], 32765 [1.0000, 0.00328947, -0.000319159, -4.2106e-06] 32766 ]; 32767 32768 var FXC = 0.8487; 32769 var FYC = 1.3523; 32770 var C1 = R2D/5; // rad to 5-degree interval 32771 var RC1 = 1/C1; 32772 var NODES = 18; 32773 32774 var poly3_val = function(coefs, x) { 32775 return coefs[0] + x * (coefs[1] + x * (coefs[2] + x * coefs[3])); 32776 }; 32777 32778 var poly3_der = function(coefs, x) { 32779 return coefs[1] + x * (2 * coefs[2] + x * 3 * coefs[3]); 32780 }; 32781 32782 function newton_rapshon(f_df, start, max_err, iters) { 32783 var x = start; 32784 for (; iters; --iters) { 32785 var upd = f_df(x); 32786 x -= upd; 32787 if (Math.abs(upd) < max_err) { 32788 break; 32789 } 32790 } 32791 return x; 32792 } 32793 32794 function init$28() { 32795 this.x0 = this.x0 || 0; 32796 this.y0 = this.y0 || 0; 32797 this.long0 = this.long0 || 0; 32798 this.es = 0; 32799 this.title = this.title || "Robinson"; 32800 } 32801 32802 function forward$27(ll) { 32803 var lon = adjust_lon(ll.x - this.long0); 32804 32805 var dphi = Math.abs(ll.y); 32806 var i = Math.floor(dphi * C1); 32807 if (i < 0) { 32808 i = 0; 32809 } else if (i >= NODES) { 32810 i = NODES - 1; 32811 } 32812 dphi = R2D * (dphi - RC1 * i); 32813 var xy = { 32814 x: poly3_val(COEFS_X[i], dphi) * lon, 32815 y: poly3_val(COEFS_Y[i], dphi) 32816 }; 32817 if (ll.y < 0) { 32818 xy.y = -xy.y; 32819 } 32820 32821 xy.x = xy.x * this.a * FXC + this.x0; 32822 xy.y = xy.y * this.a * FYC + this.y0; 32823 return xy; 32824 } 32825 32826 function inverse$27(xy) { 32827 var ll = { 32828 x: (xy.x - this.x0) / (this.a * FXC), 32829 y: Math.abs(xy.y - this.y0) / (this.a * FYC) 32830 }; 32831 32832 if (ll.y >= 1) { // pathologic case 32833 ll.x /= COEFS_X[NODES][0]; 32834 ll.y = xy.y < 0 ? -HALF_PI : HALF_PI; 32835 } else { 32836 // find table interval 32837 var i = Math.floor(ll.y * NODES); 32838 if (i < 0) { 32839 i = 0; 32840 } else if (i >= NODES) { 32841 i = NODES - 1; 32842 } 32843 for (;;) { 32844 if (COEFS_Y[i][0] > ll.y) { 32845 --i; 32846 } else if (COEFS_Y[i+1][0] <= ll.y) { 32847 ++i; 32848 } else { 32849 break; 32850 } 32851 } 32852 // linear interpolation in 5 degree interval 32853 var coefs = COEFS_Y[i]; 32854 var t = 5 * (ll.y - coefs[0]) / (COEFS_Y[i+1][0] - coefs[0]); 32855 // find t so that poly3_val(coefs, t) = ll.y 32856 t = newton_rapshon(function(x) { 32857 return (poly3_val(coefs, x) - ll.y) / poly3_der(coefs, x); 32858 }, t, EPSLN, 100); 32859 32860 ll.x /= poly3_val(COEFS_X[i], t); 32861 ll.y = (5 * i + t) * D2R; 32862 if (xy.y < 0) { 32863 ll.y = -ll.y; 32864 } 32865 } 32866 32867 ll.x = adjust_lon(ll.x + this.long0); 32868 return ll; 32869 } 32870 32871 var names$29 = ["Robinson", "robin"]; 32872 var robin = { 32873 init: init$28, 32874 forward: forward$27, 32875 inverse: inverse$27, 32876 names: names$29 32877 }; 32878 32879 function init$29() { 32880 this.name = 'geocent'; 32881 32882 } 32883 32884 function forward$28(p) { 32885 var point = geodeticToGeocentric(p, this.es, this.a); 32886 return point; 32887 } 32888 32889 function inverse$28(p) { 32890 var point = geocentricToGeodetic(p, this.es, this.a, this.b); 32891 return point; 32892 } 32893 32894 var names$30 = ["Geocentric", 'geocentric', "geocent", "Geocent"]; 32895 var geocent = { 32896 init: init$29, 32897 forward: forward$28, 32898 inverse: inverse$28, 32899 names: names$30 32900 }; 32901 32902 var mode = { 32903 N_POLE: 0, 32904 S_POLE: 1, 32905 EQUIT: 2, 32906 OBLIQ: 3 32907 }; 32908 32909 var params = { 32910 h: { def: 100000, num: true }, // default is Karman line, no default in PROJ.7 32911 azi: { def: 0, num: true, degrees: true }, // default is North 32912 tilt: { def: 0, num: true, degrees: true }, // default is Nadir 32913 long0: { def: 0, num: true }, // default is Greenwich, conversion to rad is automatic 32914 lat0: { def: 0, num: true } // default is Equator, conversion to rad is automatic 32915 }; 32916 32917 function init$30() {
32918 Object.keys(params).forEach(function (p) { 32919 if (typeof this[p] === "undefined") { 32920 this[p] = params[p].def; 32921 } else if (params[p].num && isNaN(this[p])) { 32922 throw new Error("Invalid parameter value, must be numeric " + p + " = " + this[p]); 32923 } else if (params[p].num) { 32924 this[p] = parseFloat(this[p]); 32925 } 32926 if (params[p].degrees) { 32927 this[p] = this[p] * D2R; 32928 } 32929 }.bind(this)); 32930 32931 if (Math.abs((Math.abs(this.lat0) - HALF_PI)) < EPSLN) { 32932 this.mode = this.lat0 < 0 ? mode.S_POLE : mode.N_POLE; 32933 } else if (Math.abs(this.lat0) < EPSLN) { 32934 this.mode = mode.EQUIT; 32935 } else { 32936 this.mode = mode.OBLIQ; 32937 this.sinph0 = Math.sin(this.lat0); 32938 this.cosph0 = Math.cos(this.lat0); 32939 } 32940 32941 this.pn1 = this.h / this.a; // Normalize relative to the Earth's radius 32942 32943 if (this.pn1 <= 0 || this.pn1 > 1e10) { 32944 throw new Error("Invalid height"); 32945 } 32946 32947 this.p = 1 + this.pn1; 32948 this.rp = 1 / this.p; 32949 this.h1 = 1 / this.pn1; 32950 this.pfact = (this.p + 1) * this.h1; 32951 this.es = 0; 32952 32953 var omega = this.tilt; 32954 var gamma = this.azi; 32955 this.cg = Math.cos(gamma); 32956 this.sg = Math.sin(gamma); 32957 this.cw = Math.cos(omega); 32958 this.sw = Math.sin(omega); 32959 } 32960 32961 function forward$29(p) { 32962 p.x -= this.long0; 32963 var sinphi = Math.sin(p.y); 32964 var cosphi = Math.cos(p.y); 32965 var coslam = Math.cos(p.x); 32966 var x, y; 32967 switch (this.mode) { 32968 case mode.OBLIQ: 32969 y = this.sinph0 * sinphi + this.cosph0 * cosphi * coslam; 32970 break; 32971 case mode.EQUIT: 32972 y = cosphi * coslam; 32973 break; 32974 case mode.S_POLE: 32975 y = -sinphi; 32976 break; 32977 case mode.N_POLE: 32978 y = sinphi; 32979 break; 32980 } 32981 y = this.pn1 / (this.p - y); 32982 x = y * cosphi * Math.sin(p.x); 32983 32984 switch (this.mode) { 32985 case mode.OBLIQ: 32986 y *= this.cosph0 * sinphi - this.sinph0 * cosphi * coslam; 32987 break; 32988 case mode.EQUIT: 32989 y *= sinphi; 32990 break; 32991 case mode.N_POLE: 32992 y *= -(cosphi * coslam); 32993 break; 32994 case mode.S_POLE: 32995 y *= cosphi * coslam; 32996 break; 32997 } 32998 32999 // Tilt 33000 var yt, ba; 33001 yt = y * this.cg + x * this.sg; 33002 ba = 1 / (yt * this.sw * this.h1 + this.cw); 33003 x = (x * this.cg - y * this.sg) * this.cw * ba; 33004 y = yt * ba; 33005 33006 p.x = x * this.a; 33007 p.y = y * this.a; 33008 return p; 33009 } 33010 33011 function inverse$29(p) { 33012 p.x /= this.a; 33013 p.y /= this.a; 33014 var r = { x: p.x, y: p.y }; 33015 33016 // Un-Tilt 33017 var bm, bq, yt; 33018 yt = 1 / (this.pn1 - p.y * this.sw); 33019 bm = this.pn1 * p.x * yt; 33020 bq = this.pn1 * p.y * this.cw * yt; 33021 p.x = bm * this.cg + bq * this.sg; 33022 p.y = bq * this.cg - bm * this.sg; 33023 33024 var rh = hypot(p.x, p.y); 33025 if (Math.abs(rh) < EPSLN) { 33026 r.x = 0; 33027 r.y = p.y; 33028 } else { 33029 var cosz, sinz; 33030 sinz = 1 - rh * rh * this.pfact; 33031 sinz = (this.p - Math.sqrt(sinz)) / (this.pn1 / rh + rh / this.pn1); 33032 cosz = Math.sqrt(1 - sinz * sinz); 33033 switch (this.mode) { 33034 case mode.OBLIQ: 33035 r.y = Math.asin(cosz * this.sinph0 + p.y * sinz * this.cosph0 / rh); 33036 p.y = (cosz - this.sinph0 * Math.sin(r.y)) * rh; 33037 p.x *= sinz * this.cosph0; 33038 break; 33039 case mode.EQUIT: 33040 r.y = Math.asin(p.y * sinz / rh); 33041 p.y = cosz * rh; 33042 p.x *= sinz; 33043 break; 33044 case mode.N_POLE: 33045 r.y = Math.asin(cosz); 33046 p.y = -p.y; 33047 break; 33048 case mode.S_POLE: 33049 r.y = -Math.asin(cosz); 33050 break; 33051 } 33052 r.x = Math.atan2(p.x, p.y); 33053 } 33054 33055 p.x = r.x + this.long0; 33056 p.y = r.y; 33057 return p; 33058 } 33059 33060 var names$31 = ["Tilted_Perspective", "tpers"]; 33061 var tpers = { 33062 init: init$30, 33063 forward: forward$29, 33064 inverse: inverse$29, 33065 names: names$31 33066 }; 33067 33068 function init$31() { 33069 this.flip_axis = (this.sweep === 'x' ? 1 : 0); 33070 this.h = Number(this.h); 33071 this.radius_g_1 = this.h / this.a; 33072 33073 if (this.radius_g_1 <= 0 || this.radius_g_1 > 1e10) { 33074 throw new Error(); 33075 } 33076 33077 this.radius_g = 1.0 + this.radius_g_1; 33078 this.C = this.radius_g * this.radius_g - 1.0; 33079 33080 if (this.es !== 0.0) { 33081 var one_es = 1.0 - this.es; 33082 var rone_es = 1 / one_es; 33083 33084 this.radius_p = Math.sqrt(one_es); 33085 this.radius_p2 = one_es; 33086 this.radius_p_inv2 = rone_es; 33087 33088 this.shape = 'ellipse'; // Use as a condition in the forward and inverse functions. 33089 } else { 33090 this.radius_p = 1.0; 33091 this.radius_p2 = 1.0; 33092 this.radius_p_inv2 = 1.0; 33093 33094 this.shape = 'sphere'; // Use as a condition in the forward and inverse functions. 33095 } 33096 33097 if (!this.title) { 33098 this.title = "Geostationary Satellite View"; 33099 } 33100 } 33101 33102 function forward$30(p) { 33103 var lon = p.x; 33104 var lat = p.y; 33105 var tmp, v_x, v_y, v_z; 33106 lon = lon - this.long0; 33107 33108 if (this.shape === 'ellipse') { 33109 lat = Math.atan(this.radius_p2 * Math.tan(lat)); 33110 var r = this.radius_p / hypot(this.radius_p * Math.cos(lat), Math.sin(lat)); 33111 33112 v_x = r * Math.cos(lon) * Math.cos(lat); 33113 v_y = r * Math.sin(lon) * Math.cos(lat); 33114 v_z = r * Math.sin(lat); 33115 33116 if (((this.radius_g - v_x) * v_x - v_y * v_y - v_z * v_z * this.radius_p_inv2) < 0.0) { 33117 p.x = Number.NaN; 33118 p.y = Number.NaN; 33119 return p; 33120 } 33121 33122 tmp = this.radius_g - v_x; 33123 if (this.flip_axis) { 33124 p.x = this.radius_g_1 * Math.atan(v_y / hypot(v_z, tmp)); 33125 p.y = this.radius_g_1 * Math.atan(v_z / tmp); 33126 } else { 33127 p.x = this.radius_g_1 * Math.atan(v_y / tmp); 33128 p.y = this.radius_g_1 * Math.atan(v_z / hypot(v_y, tmp)); 33129 } 33130 } else if (this.shape === 'sphere') { 33131 tmp = Math.cos(lat); 33132 v_x = Math.cos(lon) * tmp; 33133 v_y = Math.sin(lon) * tmp; 33134 v_z = Math.sin(lat); 33135 tmp = this.radius_g - v_x; 33136 33137 if (this.flip_axis) { 33138 p.x = this.radius_g_1 * Math.atan(v_y / hypot(v_z, tmp)); 33139 p.y = this.radius_g_1 * Math.atan(v_z / tmp); 33140 } else { 33141 p.x = this.radius_g_1 * Math.atan(v_y / tmp); 33142 p.y = this.radius_g_1 * Math.atan(v_z / hypot(v_y, tmp)); 33143 } 33144 } 33145 p.x = p.x * this.a; 33146 p.y = p.y * this.a; 33147 return p; 33148 } 33149 33150 function inverse$30(p) { 33151 var v_x = -1.0; 33152 var v_y = 0.0; 33153 var v_z = 0.0; 33154 var a, b, det, k; 33155 33156 p.x = p.x / this.a; 33157 p.y = p.y / this.a; 33158 33159 if (this.shape === 'ellipse') { 33160 if (this.flip_axis) { 33161 v_z = Math.tan(p.y / this.radius_g_1); 33162 v_y = Math.tan(p.x / this.radius_g_1) * hypot(1.0, v_z); 33163 } else { 33164 v_y = Math.tan(p.x / this.radius_g_1); 33165 v_z = Math.tan(p.y / this.radius_g_1) * hypot(1.0, v_y); 33166 } 33167 33168 var v_zp = v_z / this.radius_p; 33169 a = v_y * v_y + v_zp * v_zp + v_x * v_x; 33170 b = 2 * this.radius_g * v_x; 33171 det = (b * b) - 4 * a * this.C; 33172 33173 if (det < 0.0) { 33174 p.x = Number.NaN; 33175 p.y = Number.NaN; 33176 return p; 33177 } 33178 33179 k = (-b - Math.sqrt(det)) / (2.0 * a); 33180 v_x = this.radius_g + k * v_x; 33181 v_y *= k; 33182 v_z *= k; 33183 33184 p.x = Math.atan2(v_y, v_x); 33185 p.y = Math.atan(v_z * Math.cos(p.x) / v_x); 33186 p.y = Math.atan(this.radius_p_inv2 * Math.tan(p.y)); 33187 } else if (this.shape === 'sphere') { 33188 if (this.flip_axis) { 33189 v_z = Math.tan(p.y / this.radius_g_1); 33190 v_y = Math.tan(p.x / this.radius_g_1) * Math.sqrt(1.0 + v_z * v_z); 33191 } else { 33192 v_y = Math.tan(p.x / this.radius_g_1); 33193 v_z = Math.tan(p.y / this.radius_g_1) * Math.sqrt(1.0 + v_y * v_y); 33194 } 33195 33196 a = v_y * v_y + v_z * v_z + v_x * v_x; 33197 b = 2 * this.radius_g * v_x; 33198 det = (b * b) - 4 * a * this.C; 33199 if (det < 0.0) { 33200 p.x = Number.NaN; 33201 p.y = Number.NaN; 33202 return p; 33203 } 33204 33205 k = (-b - Math.sqrt(det)) / (2.0 * a); 33206 v_x = this.radius_g + k * v_x; 33207 v_y *= k; 33208 v_z *= k; 33209 33210 p.x = Math.atan2(v_y, v_x); 33211 p.y = Math.atan(v_z * Math.cos(p.x) / v_x); 33212 } 33213 p.x = p.x + this.long0; 33214 return p; 33215 } 33216 33217 var names$32 = ["Geostationary Satellite View", "Geostationary_Satellite", "geos"]; 33218 var geos = { 33219 init: init$31, 33220 forward: forward$30, 33221 inverse: inverse$30, 33222 names: names$32, 33223 }; 33224 33225 /** 33226 * Copyright 2018 Bernie Jenny, Monash University, Melbourne, Australia. 33227 * 33228 * Licensed under the Apache License, Version 2.0 (the "License");
33229 * you may not use this file except in compliance with the License. 33230 * You may obtain a copy of the License at 33231 * 33232 * http://www.apache.org/licenses/LICENSE-2.0 33233 * 33234 * Unless required by applicable law or agreed to in writing, software 33235 * distributed under the License is distributed on an "AS IS" BASIS, 33236 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 33237 * See the License for the specific language governing permissions and 33238 * limitations under the License. 33239 * 33240 * Equal Earth is a projection inspired by the Robinson projection, but unlike 33241 * the Robinson projection retains the relative size of areas. The projection 33242 * was designed in 2018 by Bojan Savric, Tom Patterson and Bernhard Jenny. 33243 * 33244 * Publication: 33245 * Bojan Savric, Tom Patterson & Bernhard Jenny (2018). The Equal Earth map 33246 * projection, International Journal of Geographical Information Science, 33247 * DOI: 10.1080/13658816.2018.1504949 33248 * 33249 * Code released August 2018 33250 * Ported to JavaScript and adapted for mapshaper-proj by Matthew Bloch August 2018 33251 * Modified for proj4js by Andreas Hocevar by Andreas Hocevar March 2024 33252 */ 33253 33254 var A1 = 1.340264; 33255 var A2 = -0.081106; 33256 var A3 = 0.000893; 33257 var A4 = 0.003796; 33258 var M = Math.sqrt(3) / 2.0; 33259 33260 function init$32() { 33261 this.es = 0; 33262 this.long0 = this.long0 !== undefined ? this.long0 : 0; 33263 } 33264 33265 function forward$31(p) { 33266 var lam = adjust_lon(p.x - this.long0); 33267 var phi = p.y; 33268 var paramLat = Math.asin(M * Math.sin(phi)), 33269 paramLatSq = paramLat * paramLat, 33270 paramLatPow6 = paramLatSq * paramLatSq * paramLatSq; 33271 p.x = lam * Math.cos(paramLat) / 33272 (M * (A1 + 3 * A2 * paramLatSq + paramLatPow6 * (7 * A3 + 9 * A4 * paramLatSq))); 33273 p.y = paramLat * (A1 + A2 * paramLatSq + paramLatPow6 * (A3 + A4 * paramLatSq)); 33274 33275 p.x = this.a * p.x + this.x0; 33276 p.y = this.a * p.y + this.y0; 33277 return p; 33278 } 33279 33280 function inverse$31(p) { 33281 p.x = (p.x - this.x0) / this.a; 33282 p.y = (p.y - this.y0) / this.a; 33283 33284 var EPS = 1e-9, 33285 NITER = 12, 33286 paramLat = p.y, 33287 paramLatSq, paramLatPow6, fy, fpy, dlat, i; 33288 33289 for (i = 0; i < NITER; ++i) { 33290 paramLatSq = paramLat * paramLat; 33291 paramLatPow6 = paramLatSq * paramLatSq * paramLatSq; 33292 fy = paramLat * (A1 + A2 * paramLatSq + paramLatPow6 * (A3 + A4 * paramLatSq)) - p.y; 33293 fpy = A1 + 3 * A2 * paramLatSq + paramLatPow6 * (7 * A3 + 9 * A4 * paramLatSq); 33294 paramLat -= dlat = fy / fpy; 33295 if (Math.abs(dlat) < EPS) { 33296 break; 33297 } 33298 } 33299 paramLatSq = paramLat * paramLat; 33300 paramLatPow6 = paramLatSq * paramLatSq * paramLatSq; 33301 p.x = M * p.x * (A1 + 3 * A2 * paramLatSq + paramLatPow6 * (7 * A3 + 9 * A4 * paramLatSq)) / 33302 Math.cos(paramLat); 33303 p.y = Math.asin(Math.sin(paramLat) / M); 33304 33305 p.x = adjust_lon(p.x + this.long0); 33306 return p; 33307 } 33308 33309 var names$33 = ["eqearth", "Equal Earth", "Equal_Earth"]; 33310 var eqearth = { 33311 init: init$32, 33312 forward: forward$31, 33313 inverse: inverse$31, 33314 names: names$33 33315 }; 33316 33317 var includedProjections = function(proj4){ 33318 proj4.Proj.projections.add(tmerc); 33319 proj4.Proj.projections.add(etmerc); 33320 proj4.Proj.projections.add(utm); 33321 proj4.Proj.projections.add(sterea); 33322 proj4.Proj.projections.add(stere); 33323 proj4.Proj.projections.add(somerc); 33324 proj4.Proj.projections.add(omerc); 33325 proj4.Proj.projections.add(lcc); 33326 proj4.Proj.projections.add(krovak); 33327 proj4.Proj.projections.add(cass); 33328 proj4.Proj.projections.add(laea); 33329 proj4.Proj.projections.add(aea); 33330 proj4.Proj.projections.add(gnom); 33331 proj4.Proj.projections.add(cea); 33332 proj4.Proj.projections.add(eqc); 33333 proj4.Proj.projections.add(poly); 33334 proj4.Proj.projections.add(nzmg); 33335 proj4.Proj.projections.add(mill); 33336 proj4.Proj.projections.add(sinu); 33337 proj4.Proj.projections.add(moll); 33338 proj4.Proj.projections.add(eqdc); 33339 proj4.Proj.projections.add(vandg); 33340 proj4.Proj.projections.add(aeqd); 33341 proj4.Proj.projections.add(ortho); 33342 proj4.Proj.projections.add(qsc); 33343 proj4.Proj.projections.add(robin); 33344 proj4.Proj.projections.add(geocent);
33345 proj4.Proj.projections.add(tpers); 33346 proj4.Proj.projections.add(geos); 33347 proj4.Proj.projections.add(eqearth); 33348 }; 33349 33350 proj4$1.defaultDatum = 'WGS84'; //default datum 33351 proj4$1.Proj = Projection; 33352 proj4$1.WGS84 = new proj4$1.Proj('WGS84'); 33353 proj4$1.Point = Point; 33354 proj4$1.toPoint = toPoint; 33355 proj4$1.defs = defs; 33356 proj4$1.nadgrid = nadgrid; 33357 proj4$1.transform = transform; 33358 proj4$1.mgrs = mgrs; 33359 proj4$1.version = '2.11.0'; 33360 includedProjections(proj4$1); 33361 33362 return proj4$1; 33363 33364}))); 33365 33366},{}],139:[function(require,module,exports){ 33367'use strict'; 33368 33369var GetIntrinsic = require('get-intrinsic'); 33370var $concat = GetIntrinsic('%Array.prototype.concat%'); 33371 33372var callBind = require('call-bind'); 33373 33374var callBound = require('call-bind/callBound'); 33375var $slice = callBound('Array.prototype.slice'); 33376 33377var hasSymbols = require('has-symbols/shams')(); 33378var isConcatSpreadable = hasSymbols && Symbol.isConcatSpreadable; 33379 33380/** @type {never[]} */ var empty = []; 33381var $concatApply = isConcatSpreadable ? callBind.apply($concat, empty) : null; 33382 33383// eslint-disable-next-line no-extra-parens 33384var isArray = isConcatSpreadable ? /** @type {(value: unknown) => value is unknown[]} */ (require('isarray')) : null; 33385 33386/** @type {import('.')} */ 33387module.exports = isConcatSpreadable 33388 // eslint-disable-next-line no-unused-vars 33389 ? function safeArrayConcat(item) { 33390 for (var i = 0; i < arguments.length; i += 1) { 33391 /** @type {typeof item} */ var arg = arguments[i]; 33392 // @ts-expect-error ts(2538) see https://github.com/microsoft/TypeScript/issues/9998#issuecomment-1890787975; works if `const` 33393 if (arg && typeof arg === 'object' && typeof arg[isConcatSpreadable] === 'boolean') { 33394 // @ts-expect-error ts(7015) TS doesn't yet support Symbol indexing 33395 if (!empty[isConcatSpreadable]) { 33396 // @ts-expect-error ts(7015) TS doesn't yet support Symbol indexing 33397 empty[isConcatSpreadable] = true; 33398 } 33399 // @ts-expect-error ts(2721) ts(18047) not sure why TS can't figure out this can't be null 33400 var arr = isArray(arg) ? $slice(arg) : [arg]; 33401 // @ts-expect-error ts(7015) TS can't handle expandos on an array 33402 arr[isConcatSpreadable] = true; // shadow the property. TODO: use [[Define]] 33403 arguments[i] = arr; 33404 } 33405 } 33406 // @ts-expect-error ts(2345) https://github.com/microsoft/TypeScript/issues/57164 TS doesn't understand that apply can take an arguments object 33407 return $concatApply(arguments); 33408 } 33409 : callBind($concat, empty); 33410 33411},{"call-bind":14,"call-bind/callBound":13,"get-intrinsic":101,"has-symbols/shams":106,"isarray":140}],140:[function(require,module,exports){ 33412var toString = {}.toString; 33413 33414module.exports = Array.isArray || function (arr) { 33415 return toString.call(arr) == '[object Array]'; 33416}; 33417 33418},{}],141:[function(require,module,exports){ 33419'use strict'; 33420 33421var callBound = require('call-bind/callBound'); 33422var isRegex = require('is-regex'); 33423 33424var $exec = callBound('RegExp.prototype.exec'); 33425var $TypeError = require('es-errors/type'); 33426 33427module.exports = function regexTester(regex) { 33428 if (!isRegex(regex)) { 33429 throw new $TypeError('`regex` must be a RegExp'); 33430 } 33431 return function test(s) { 33432 return $exec(regex, s) !== null; 33433 }; 33434}; 33435 33436},{"call-bind/callBound":13,"es-errors/type":77,"is-regex":117}],142:[function(require,module,exports){ 33437'use strict'; 33438 33439var GetIntrinsic = require('get-intrinsic'); 33440var define = require('define-data-property'); 33441var hasDescriptors = require('has-property-descriptors')(); 33442var gOPD = require('gopd'); 33443 33444var $TypeError = require('es-errors/type'); 33445var $floor = GetIntrinsic('%Math.floor%'); 33446 33447/** @type {import('.')} */ 33448module.exports = function setFunctionLength(fn, length) { 33449 if (typeof fn !== 'function') { 33450 throw new $TypeError('`fn` is not a function'); 33451 } 33452 if (typeof length !== 'number' || length < 0 || length > 0xFFFFFFFF || $floor(length) !== length) { 33453 throw new $TypeError('`length` must be a positive 32-bit integer'); 33454 } 33455 33456 var loose = arguments.length > 2 && !!arguments[2]; 33457 33458 var functionLengthIsConfigurable = true; 33459 var functionLengthIsWritable = true; 33460 if ('length' in fn && gOPD) { 33461 var desc = gOPD(fn, 'length'); 33462 if (desc && !desc.configurable) { 33463 functionLengthIsConfigurable = false;
33464 } 33465 if (desc && !desc.writable) { 33466 functionLengthIsWritable = false; 33467 } 33468 } 33469 33470 if (functionLengthIsConfigurable || functionLengthIsWritable || !loose) { 33471 if (hasDescriptors) { 33472 define(/** @type {Parameters<define>[0]} */ (fn), 'length', length, true, true); 33473 } else { 33474 define(/** @type {Parameters<define>[0]} */ (fn), 'length', length); 33475 } 33476 } 33477 return fn; 33478}; 33479 33480},{"define-data-property":15,"es-errors/type":77,"get-intrinsic":101,"gopd":102,"has-property-descriptors":103}],143:[function(require,module,exports){ 33481'use strict'; 33482 33483var define = require('define-properties'); 33484var ToInteger = require('es-abstract/2019/ToInteger'); 33485var ToObject = require('es-abstract/2019/ToObject'); 33486var ToString = require('es-abstract/2019/ToString'); 33487var callBind = require('es-abstract/helpers/callBind'); 33488 33489var atShim = function at(pos) { 33490 var O = ToObject(this); 33491 var S = ToString(O); 33492 var position = ToInteger(pos); 33493 var size = S.length; 33494 if (position < 0 || position >= size) { 33495 return ''; 33496 } 33497 // Get the first code unit and code unit value 33498 var cuFirst = S.charCodeAt(position); 33499 var cuSecond; 33500 var nextIndex = position + 1; 33501 var len = 1; 33502 // Check if itâs the start of a surrogate pair. 33503 var isHighSurrogate = cuFirst >= 0xD800 && cuFirst <= 0xDBFF; 33504 if (isHighSurrogate && size > nextIndex /* there is a next code unit */) { 33505 cuSecond = S.charCodeAt(nextIndex); 33506 if (cuSecond >= 0xDC00 && cuSecond <= 0xDFFF) { // low surrogate 33507 len = 2; 33508 } 33509 } 33510 return S.slice(position, position + len); 33511}; 33512 33513var boundAt = callBind(atShim); 33514define(boundAt, { 33515 method: atShim, 33516 shim: function shimStringPrototypeAt() { 33517 define(String.prototype, { at: atShim }); 33518 return String.prototype.at; 33519 } 33520}); 33521 33522module.exports = boundAt; 33523 33524},{"define-properties":16,"es-abstract/2019/ToInteger":19,"es-abstract/2019/ToObject":21,"es-abstract/2019/ToString":23,"es-abstract/helpers/callBind":61}],144:[function(require,module,exports){ 33525'use strict'; 33526 33527var ToLength = require('es-abstract/2024/ToLength'); 33528var ToString = require('es-abstract/2024/ToString'); 33529var RequireObjectCoercible = require('es-object-atoms/RequireObjectCoercible'); 33530var callBound = require('call-bind/callBound'); 33531 33532var $slice = callBound('String.prototype.slice'); 33533 33534module.exports = function padEnd(maxLength) { 33535 var O = RequireObjectCoercible(this); 33536 var S = ToString(O); 33537 var stringLength = ToLength(S.length); 33538 var fillString; 33539 if (arguments.length > 1) { 33540 fillString = arguments[1]; 33541 } 33542 var filler = typeof fillString === 'undefined' ? '' : ToString(fillString); 33543 if (filler === '') { 33544 filler = ' '; 33545 } 33546 var intMaxLength = ToLength(maxLength); 33547 if (intMaxLength <= stringLength) { 33548 return S; 33549 } 33550 var fillLen = intMaxLength - stringLength; 33551 while (filler.length < fillLen) { 33552 var fLen = filler.length; 33553 var remainingCodeUnits = fillLen - fLen; 33554 filler += fLen > remainingCodeUnits ? $slice(filler, 0, remainingCodeUnits) : filler; 33555 } 33556 33557 var truncatedStringFiller = filler.length > fillLen ? $slice(filler, 0, fillLen) : filler; 33558 return S + truncatedStringFiller; 33559}; 33560 33561},{"call-bind/callBound":13,"es-abstract/2024/ToLength":44,"es-abstract/2024/ToString":48,"es-object-atoms/RequireObjectCoercible":79}],145:[function(require,module,exports){ 33562'use strict'; 33563 33564var define = require('define-properties'); 33565var RequireObjectCoercible = require('es-object-atoms/RequireObjectCoercible'); 33566var callBind = require('call-bind'); 33567 33568var implementation = require('./implementation'); 33569var getPolyfill = require('./polyfill'); 33570var shim = require('./shim'); 33571 33572var bound = callBind.apply(getPolyfill()); 33573 33574var boundPadEnd = function padEnd(str, maxLength) { 33575 RequireObjectCoercible(str); 33576 var args = arguments.length > 2 ? [maxLength, arguments[2]] : [maxLength]; 33577 return bound(str, args); 33578}; 33579 33580define(boundPadEnd, { 33581 getPolyfill: getPolyfill, 33582 implementation: implementation, 33583 shim: shim 33584}); 33585 33586module.exports = boundPadEnd; 33587 33588},{"./implementation":144,"./polyfill":146,"./shim":147,"call-bind":14,"define-properties":16,"es-object-atoms/RequireObjectCoercible":79}],146:[function(require,module,exports){ 33589'use strict'; 33590 33591var implementation = require('./implementation'); 33592 33593module.exports = function getPolyfill() { 33594 return typeof String.prototype.padEnd === 'function' ? String.prototype.padEnd : implementation; 33595}; 33596 33597},{"./implementation":144}],147:[function(require,module,exports){ 33598'use strict'; 33599 33600var getPolyfill = require('./polyfill'); 33601var define = require('define-properties'); 33602 33603module.exports = function shimPadEnd() { 33604 var polyfill = getPolyfill(); 33605 define(String.prototype, { padEnd: polyfill }, { 33606 padEnd: function testPadEnd() { 33607 return String.prototype.padEnd !== polyfill; 33608 } 33609 }); 33610 return polyfill; 33611}; 33612 33613},{"./polyfill":146,"define-properties":16}],148:[function(require,module,exports){ 33614'use strict'; 33615 33616var ToLength = require('es-abstract/2024/ToLength'); 33617var ToString = require('es-abstract/2024/ToString'); 33618var RequireObjectCoercible = require('es-object-atoms/RequireObjectCoercible'); 33619 33620var callBound = require('call-bind/callBound'); 33621var $slice = callBound('String.prototype.slice'); 33622 33623module.exports = function padStart(maxLength) { 33624 var O = RequireObjectCoercible(this); 33625 var S = ToString(O); 33626 var stringLength = ToLength(S.length); 33627 var fillString; 33628 if (arguments.length > 1) { 33629 fillString = arguments[1]; 33630 } 33631 var filler = typeof fillString === 'undefined' ? '' : ToString(fillStr
33631ing); 33632 if (filler === '') { 33633 filler = ' '; 33634 } 33635 var intMaxLength = ToLength(maxLength); 33636 if (intMaxLength <= stringLength) { 33637 return S; 33638 } 33639 var fillLen = intMaxLength - stringLength; 33640 while (filler.length < fillLen) { 33641 var fLen = filler.length; 33642 var remainingCodeUnits = fillLen - fLen; 33643 filler += fLen > remainingCodeUnits ? $slice(filler, 0, remainingCodeUnits) : filler; 33644 } 33645 33646 var truncatedStringFiller = filler.length > fillLen ? $slice(filler, 0, fillLen) : filler; 33647 return truncatedStringFiller + S; 33648}; 33649 33650},{"call-bind/callBound":13,"es-abstract/2024/ToLength":44,"es-abstract/2024/ToString":48,"es-object-atoms/RequireObjectCoercible":79}],149:[function(require,module,exports){ 33651'use strict'; 33652 33653var define = require('define-properties'); 33654var RequireObjectCoercible = require('es-object-atoms/RequireObjectCoercible'); 33655var callBind = require('call-bind'); 33656 33657var implementation = require('./implementation'); 33658var getPolyfill = require('./polyfill'); 33659var shim = require('./shim'); 33660 33661var bound = callBind.apply(getPolyfill()); 33662 33663var boundPadStart = function padStart(str, maxLength) { 33664 RequireObjectCoercible(str); 33665 var args = arguments.length > 2 ? [maxLength, arguments[2]] : [maxLength]; 33666 return bound(str, args); 33667}; 33668 33669define(boundPadStart, { 33670 getPolyfill: getPolyfill, 33671 implementation: implementation, 33672 shim: shim 33673}); 33674 33675module.exports = boundPadStart; 33676 33677},{"./implementation":148,"./polyfill":150,"./shim":151,"call-bind":14,"define-properties":16,"es-object-atoms/RequireObjectCoercible":79}],150:[function(require,module,exports){ 33678'use strict'; 33679 33680var implementation = require('./implementation'); 33681 33682module.exports = function getPolyfill() { 33683 return typeof String.prototype.padStart === 'function' ? String.prototype.padStart : implementation; 33684}; 33685 33686},{"./implementation":148}],151:[function(require,module,exports){ 33687'use strict'; 33688 33689var getPolyfill = require('./polyfill'); 33690var define = require('define-properties'); 33691 33692module.exports = function shimPadStart() { 33693 var polyfill = getPolyfill(); 33694 define(String.prototype, { padStart: polyfill }, { 33695 padStart: function testPadStart() { 33696 return String.prototype.padStart !== polyfill; 33697 } 33698 }); 33699 return polyfill; 33700}; 33701 33702},{"./polyfill":150,"define-properties":16}],152:[function(require,module,exports){ 33703'use strict'; 33704 33705var RequireObjectCoercible = require('es-object-atoms/RequireObjectCoercible'); 33706var ToString = require('es-abstract/2024/ToString'); 33707var callBound = require('call-bind/callBound'); 33708var $replace = callBound('String.prototype.replace'); 33709 33710var mvsIsWS = (/^\s$/).test('\u180E'); 33711/* eslint-disable no-control-regex */ 33712var leftWhitespace = mvsIsWS 33713 ? /^[\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF]+/ 33714 : /^[\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF]+/; 33715var rightWhitespace = mvsIsWS 33716 ? /[\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF]+$/ 33717 : /[\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF]+$/; 33718/* eslint-enable no-control-regex */ 33719 33720module.exports = function trim() { 33721 var S = ToString(RequireObjectCoercible(this)); 33722 return $replace($replace(S, leftWhitespace, ''), rightWhitespace, ''); 33723}; 33724 33725},{"call-bind/callBound":13,"es-abstract/2024/ToString":48,"es-object-atoms/RequireObjectCoercible":79}],153:[function(require,module,exports){ 33726'use strict'; 33727 33728var callBind = require('call-bind'); 33729var define = require('define-properties'); 33730var RequireObjectCoercible = require('es-object-atoms/RequireObjectCoercible'); 33731 33732var implementation = require('./implementation'); 33733var getPolyfill = require('./polyfill'); 33734var shim = require('./shim'); 33735 33736var bound = callBind(getPolyfill()); 33737var boundMethod = function trim(receiver) { 33738 RequireObjectCoercible(receiver); 33739 return bound(receiver); 33740}; 33741 33742define(boundMethod, { 33743 getPolyfill: getPolyfill, 33744 implementation: implementation, 33745 shim: shim 33746}); 33747 33748module.exports = boundMethod; 33749 33750},{"./implementation":152,"./polyfill":154,"./shim":155,"call-bind":14,"define-properties":16,"es-object-atoms/RequireObjectCoercible":79}],154:[function(require,module,exports){ 33751'use strict'; 33752 33753var implementation = require('./implementation'); 33754 33755var zeroWidthSpace = '\u200b'; 33756var mongolianVowelSeparator = '\u180E'; 33757 33758module.exports = function getPolyfill() { 33759 if ( 33760 String.prototype.trim 33761 && zeroWidthSpace.trim() === zeroWidthSpace 33762 && mongolianVowelSeparator.trim() === mongolianVowelSeparator 33763 && ('_' + mongolianVowelSeparator).trim() === ('_' + mongolianVowelSeparator)
33764 && (mongolianVowelSeparator + '_').trim() === (mongolianVowelSeparator + '_') 33765 ) { 33766 return String.prototype.trim; 33767 } 33768 return implementation; 33769}; 33770 33771},{"./implementation":152}],155:[function(require,module,exports){ 33772'use strict'; 33773 33774var define = require('define-properties'); 33775var getPolyfill = require('./polyfill'); 33776 33777module.exports = function shimStringTrim() { 33778 var polyfill = getPolyfill(); 33779 define(String.prototype, { trim: polyfill }, { 33780 trim: function testTrim() { 33781 return String.prototype.trim !== polyfill; 33782 } 33783 }); 33784 return polyfill; 33785}; 33786 33787},{"./polyfill":154,"define-properties":16}],156:[function(require,module,exports){ 33788'use strict'; 33789 33790var callBound = require('call-bind/callBound'); 33791var $replace = callBound('String.prototype.replace'); 33792 33793var mvsIsWS = (/^\s$/).test('\u180E'); 33794/* eslint-disable no-control-regex */ 33795var endWhitespace = mvsIsWS 33796 ? /[\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF]+$/ 33797 : /[\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF]+$/; 33798/* eslint-enable no-control-regex */ 33799 33800module.exports = function trimEnd() { 33801 return $replace(this, endWhitespace, ''); 33802}; 33803 33804},{"call-bind/callBound":13}],157:[function(require,module,exports){ 33805'use strict'; 33806 33807module.exports = require('string.prototype.trimstart/implementation'); 33808 33809},{"string.prototype.trimstart/implementation":165}],158:[function(require,module,exports){ 33810'use strict'; 33811 33812var callBind = require('call-bind'); 33813var define = require('define-properties'); 33814 33815var implementation = require('./implementation'); 33816var getPolyfill = require('./polyfill'); 33817var shim = require('./shim'); 33818 33819var bound = callBind(getPolyfill()); 33820 33821define(bound, { 33822 getPolyfill: getPolyfill, 33823 implementation: implementation, 33824 shim: shim 33825}); 33826 33827module.exports = bound; 33828 33829},{"./implementation":157,"./polyfill":159,"./shim":160,"call-bind":14,"define-properties":16}],159:[function(require,module,exports){ 33830'use strict'; 33831 33832var implementation = require('./implementation'); 33833 33834module.exports = function getPolyfill() { 33835 if (!String.prototype.trimLeft) { 33836 return implementation; 33837 } 33838 var zeroWidthSpace = '\u200b'; 33839 if (zeroWidthSpace.trimLeft() !== zeroWidthSpace) { 33840 return implementation; 33841 } 33842 return String.prototype.trimLeft; 33843}; 33844 33845},{"./implementation":157}],160:[function(require,module,exports){ 33846'use strict'; 33847 33848var define = require('define-properties'); 33849var getPolyfill = require('./polyfill'); 33850 33851module.exports = function shimTrimLeft() { 33852 var polyfill = getPolyfill(); 33853 define( 33854 String.prototype, 33855 { trimLeft: polyfill }, 33856 { trimLeft: function () { return String.prototype.trimLeft !== polyfill; } } 33857 ); 33858 return polyfill; 33859}; 33860 33861},{"./polyfill":159,"define-properties":16}],161:[function(require,module,exports){ 33862'use strict'; 33863 33864module.exports = require('string.prototype.trimend/implementation'); 33865 33866},{"string.prototype.trimend/implementation":156}],162:[function(require,module,exports){ 33867arguments[4][158][0].apply(exports,arguments) 33868},{"./implementation":161,"./polyfill":163,"./shim":164,"call-bind":14,"define-properties":16,"dup":158}],163:[function(require,module,exports){ 33869'use strict'; 33870 33871var implementation = require('./implementation'); 33872 33873module.exports = function getPolyfill() { 33874 if (!String.prototype.trimRight) { 33875 return implementation; 33876 } 33877 var zeroWidthSpace = '\u200b'; 33878 if (zeroWidthSpace.trimRight() !== zeroWidthSpace) { 33879 return implementation; 33880 } 33881 return String.prototype.trimRight; 33882}; 33883 33884},{"./implementation":161}],164:[function(require,module,exports){ 33885'use strict'; 33886 33887var define = require('define-properties'); 33888var getPolyfill = require('./polyfill'); 33889 33890module.exports = function shimTrimRight() { 33891 var polyfill = getPolyfill(); 33892 define( 33893 String.prototype, 33894 { trimRight: polyfill }, 33895 { trimRight: function () { return String.prototype.trimRight !== polyfill; } } 33896 ); 33897 return polyfill; 33898}; 33899 33900},{"./polyfill":163,"define-properties":16}],165:[function(require,module,exports){ 33901'use strict'; 33902 33903var callBound = require('call-bind/callBound'); 33904var $replace = callBound('String.prototype.replace'); 33905 33906var mvsIsWS = (/^\s$/).test('\u180E'); 33907/* eslint-disable no-control-regex */ 33908var startWhitespace = mvsIsWS 33909 ? /^[\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF]+/ 33910 : /^[\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF]+/; 33911/* eslint-enable no-control-regex */ 33912 33913module.exports = function trimStart() { 33914 return $replace(this, startWhitespace, ''); 33915}; 33916 33917},{"call-bind/callBound":13}],166:[function(require,module,exports){ 33918const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 33919const csvParser = require('../../includes/csvParser'); 33920 33921module.exports = function (Highcharts, appPath) { 33922 const elementId = 'biodiesel-renewdiesel-other-consumption'; 33923 var units = ''; 33924 33925 if ($('#' + elementId).length > 0) { 33926 Highcharts.chart(elementId, { 33927 chart: { 33928 type: 'column', 33929 spacingBottom: 30, 33930 events: { 33931 load: creditsSizeAndPosition, 33932 redraw: creditsSizeAndPosition 33933 } 33934 }, 33935 credits: { 33936 enabled: true, 33937 href: null, 33938 style: { 33939 cursor: 'normal' 33940 } 33941 }, 33942 data: { 33943 csvURL: appPath + '/biofuels/charts/' + elementId + '.csv', 33944 startRow: 5, 33945 firstRowAsNames: true, 33946 beforeParse: function (csv) { 33947 var parsedCSV = csvParser(csv); 33948 33949 units = parsedCSV[1][0]; 33950 this.chart.title.update({ text: parsedCSV[0][0] }); 33951 this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } }); 33952 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 33953 this.chart.update( 33954 { 33955 accessibility: { 33956 description: parsedCSV[4][0], 33957 }, 33958 exporting: { 33959 menuItemDefinitions: 33960 { 33961 label: { 33962 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 33963 } 33964 }, 33965 buttons: { 33966 contextButton: { 33967 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 33968 } 33969 } 33970 } 33971 } 33972 ); 33973 return csv; 33974 } 33975 }, 33976 colors: [Highcharts.eiaColors.lightBlue, Highcharts.eiaColors.green, Highcharts.eiaColors.darkGrey], 33977 xAxis: { 33978 labels: { 33979 format: "{value}" 33980 }, 33981 tickInterval: 1, 33982 type: 'dateTime', 33983 }, 33984 yAxis: { 33985 reversedStacks:false, 33986 labels: { 33987 format: "{value:.0f}" 33988 }, 33989 }, 33990 plotOptions: { 33991 column: { 33992 stacking: 'normal', 33993 dataLabels: { 33994 enabled: false 33995 } 33996 } 33997 }, 33998 tooltip: { 33999 useHTML: true, 34000 shared: true, 34001 formatter: function () { 34002 let html = "<b>" + this.points[0].key + "</b><br/>"; 34003 this.points.filter(function (value) { 34004 html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25CF\u2009\u2009' + '</span><b>' + value.series.name + ': </b><span>' + value.y.toFixed(2) + ' ' + units + '</span><br/>'; 34005 }); 34006 return html; 34007 } 34008 }, 34009 responsive: { 34010 rules: [{ 34011 condition: { 34012 maxWidth: 450 34013 }, 34014 chartOptions: { 34015 chart: { 34016 height: 400 34017 }, 34018 legend: { 34019 itemStyle: { 34020 textOverflow: 'none', 34021 whiteSpace: 'break-word', 34022 }, 34023 itemWidth: 125 34024 } 34025 } 34026 }, 34027 { 34028 condition: { 34029 minWidth: 451 34030 }, 34031 34032 chartOptions: { 34033 chart: { 34034 height: '65%' 34035 } 34036 } 34037 }] 34038 } 34039 }); 34040 } 34041}; 34042 34043},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],167:[function(require,module,exports){ 34044const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 34045const csvParser = require('../../includes/csvParser'); 34046 34047module.exports = function (Highcharts, appPath) { 34048 const elementId = 'biodiesel-renewdiesel-other-production'; 34049 var units = ''; 34050 34051 if ($('#' + elementId).length > 0) { 34052 Highcharts.chart(elementId, { 34053 chart: { 34054 type: 'column', 34055 spacingBottom: 30, 34056 events: { 34057 load: creditsSizeAndPosition, 34058 redraw: creditsSizeAndPosition 34059 } 34060 }, 34061 credits: { 34062 enabled: true, 34063 href: null, 34064 style: { 34065 cursor: 'normal' 34066 } 34067 }, 34068 data: { 34069 csvURL: appPath + '/biofuels/charts/' + elementId + '.csv', 34070 startRow: 5, 34071 firstRowAsNames: true, 34072 beforeParse: function (csv) { 34073 var parsedCSV = csvParser(csv); 34074 34075 units = parsedCSV[1][0]; 34076 this.chart.title.update({ text: parsedCSV[0][0] }); 34077 this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } }); 34078 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 34079 this.chart.update( 34080 { 34081 accessibility: { 34082 description: parsedCSV[4][0], 34083 }, 34084 exporting: { 34085 menuItemDefinitions: 34086 { 34087 label: { 34088 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 34089 } 34090 }, 34091 buttons: { 34092 contextButton: { 34093 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 34094 } 34095 } 34096 } 34097 } 34098 ); 34099 return csv; 34100 } 34101 }, 34102 colors: [Highcharts.eiaColors.lightBlue, Highcharts.eiaColors.green, Highcharts.eiaColors.darkGrey], 34103 xAxis: { 34104 labels: { 34105 format: "{value}" 34106 }, 34107 tickInterval: 1, 34108 type: 'dateTime', 34109 }, 34110 yAxis: { 34111 reversedStacks:false, 34112 labels: { 34113 format: "{value:.0f}" 34114 }, 34115 }, 34116 plotOptions: { 34117 column: { 34118 stacking: 'normal', 34119 dataLabels: { 34120 enabled: false 34121 } 34122 } 34123 }, 34124 tooltip: { 34125 useHTML: true, 34126 shared: true, 34127 formatter: function () { 34128 let html = "<b>" + this.points[0].key + "</b><br/>"; 34129 this.points.filter(function (value) { 34130 html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25CF\u2009\u2009' + '</span><b>' + value.series.name + ': </b><span>' + value.y.toFixed(2) + ' ' + units + '</span><br/>'; 34131 }); 34132 return html; 34133 } 34134 }, 34135 responsive: { 34136 rules: [{ 34137 condition: { 34138 maxWidth: 450 34139 }, 34140 chartOptions: { 34141 chart: { 34142 height: 400 34143 }, 34144 legend: { 34145 itemStyle: { 34146 textOverflow: 'none', 34147 whiteSpace: 'break-word', 34148 }, 34149 itemWidth: 125 34150 } 34151 } 34152 }, 34153 { 34154 condition: { 34155 minWidth: 451 34156 }, 34157 34158 chartOptions: { 34159 chart: { 34160 height: '65%' 34161 } 34162 } 34163 }] 34164 } 34165 }); 34166 } 34167}; 34168 34169},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],168:[function(require,module,exports){ 34170const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 34171const csvParser = require('../../includes/csvParser'); 34172 34173module.exports = function (Highcharts, appPath) { 34174 const elementId = 'biofuels-consumption-major-type'; 34175 var units = ''; 34176 34177 if ($('#' + elementId).length > 0) { 34178 Highcharts.chart(elementId, { 34179 chart: { 34180 type: 'column', 34181 spacingBottom: 30, 34182 events: { 34183 load: creditsSizeAndPosition, 34184 redraw: creditsSizeAndPosition 34185 } 34186 }, 34187 credits: { 34188 enabled: true, 34189 href: null, 34190 style: { 34191 cursor: 'normal' 34192 } 34193 }, 34194 data: { 34195 csvURL: appPath + '/biofuels/charts/' + elementId + '.csv', 34196 startRow: 5, 34197 firstRowAsNames: true, 34198 beforeParse: function (csv) { 34199 var parsedCSV = csvParser(csv); 34200 34201 units = parsedCSV[1][0]; 34202 this.chart.title.update({ text: parsedCSV[0][0] }); 34203 this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } }); 34204 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 34205 this.chart.update( 34206 { 34207 accessibility: { 34208 description: parsedCSV[4][0], 34209 }, 34210 exporting: { 34211 menuItemDefinitions: 34212 { 34213 label: { 34214 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 34215 } 34216 }, 34217 buttons: { 34218 contextButton: { 34219 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 34220 } 34221 } 34222 } 34223 } 34224 ); 34225 return csv; 34226 } 34227 }, 34228 colors: [Highcharts.eiaColors.yellow, Highcharts.eiaColors.lightBlue, Highcharts.eiaColors.green, Highcharts.eiaColors.darkGrey], 34229 xAxis: { 34230 labels: { 34231 format: "{value}" 34232 }, 34233 tickInterval: 1, 34234 type: 'dateTime', 34235 }, 34236 yAxis: { 34237 reversedStacks:false, 34238 labels: { 34239 format: "{value:.0f}" 34240 }, 34241 }, 34242 plotOptions: { 34243 column: { 34244
34244 stacking: 'normal', 34245 dataLabels: { 34246 enabled: false 34247 } 34248 } 34249 }, 34250 tooltip: { 34251 useHTML: true, 34252 shared: true, 34253 formatter: function () { 34254 let html = "<b>" + this.points[0].key + "</b><br/>"; 34255 this.points.filter(function (value) { 34256 html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25CF\u2009\u2009' + '</span><b>' + value.series.name + ': </b><span>' + value.y.toFixed(2) + ' ' + units + '</span><br/>'; 34257 }); 34258 return html; 34259 } 34260 }, 34261 responsive: { 34262 rules: [{ 34263 condition: { 34264 maxWidth: 450 34265 }, 34266 chartOptions: { 34267 chart: { 34268 height: 400 34269 }, 34270 legend: { 34271 itemStyle: { 34272 textOverflow: 'none', 34273 whiteSpace: 'break-word', 34274 }, 34275 itemWidth: 125 34276 } 34277 } 34278 }, 34279 { 34280 condition: { 34281 minWidth: 451 34282 }, 34283 34284 chartOptions: { 34285 chart: { 34286 height: '65%' 34287 } 34288 } 34289 }] 34290 } 34291 }); 34292 } 34293}; 34294 34295},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],169:[function(require,module,exports){ 34296const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 34297const csvParser = require('../../includes/csvParser'); 34298 34299module.exports = function (Highcharts, appPath) { 34300 const elementId = 'biofuels-production-major-type'; 34301 var units = ''; 34302 34303 if ($('#' + elementId).length > 0) { 34304 Highcharts.chart(elementId, { 34305 chart: { 34306 type: 'column', 34307 spacingBottom: 30, 34308 events: { 34309 load: creditsSizeAndPosition, 34310 redraw: creditsSizeAndPosition 34311 } 34312 }, 34313 credits: { 34314 enabled: true, 34315 href: null, 34316 style: { 34317 cursor: 'normal' 34318 } 34319 }, 34320 data: { 34321 csvURL: appPath + '/biofuels/charts/' + elementId + '.csv', 34322 startRow: 5, 34323 firstRowAsNames: true, 34324 beforeParse: function (csv) { 34325 var parsedCSV = csvParser(csv); 34326 34327 units = parsedCSV[1][0]; 34328 this.chart.title.update({ text: parsedCSV[0][0] }); 34329 this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } }); 34330 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 34331 this.chart.update( 34332 { 34333 accessibility: { 34334 description: parsedCSV[4][0], 34335 }, 34336 exporting: { 34337 menuItemDefinitions: 34338 { 34339 label: { 34340 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 34341 } 34342 }, 34343 buttons: { 34344 contextButton: { 34345 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 34346 } 34347 } 34348 } 34349 } 34350 ); 34351 return csv; 34352 } 34353 }, 34354 colors: [Highcharts.eiaColors.yellow, Highcharts.eiaColors.lightBlue, Highcharts.eiaColors.green, Highcharts.eiaColors.darkGrey], 34355 xAxis: { 34356 labels: { 34357 format: "{value}" 34358 }, 34359 tickInterval: 1, 34360 type: 'dateTime', 34361 }, 34362 yAxis: { 34363 reversedStacks:false, 34364 labels: { 34365 format: "{value:.0f}" 34366 }, 34367 }, 34368 plotOptions: { 34369 column: { 34370 stacking: 'normal', 34371 dataLabels: { 34372 enabled: false 34373 } 34374 } 34375 }, 34376 tooltip: { 34377 useHTML: true, 34378 shared: true, 34379 formatter: function () { 34380 let html = "<b>" + this.points[0].key + "</b><br/>"; 34381 this.points.filter(function (value) { 34382 html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25CF\u2009\u2009' + '</span><b>' + value.series.name + ': </b><span>' + value.y.toFixed(2) + ' ' + units + '</span><br/>'; 34383 }); 34384 return html; 34385 } 34386 }, 34387 responsive: { 34388 rules: [{ 34389 condition: { 34390 maxWidth: 450 34391 }, 34392 chartOptions: { 34393 chart: { 34394 height: 400 34395 }, 34396 legend: { 34397 itemStyle: { 34398 textOverflow: 'none', 34399 whiteSpace: 'break-word', 34400 }, 34401 itemWidth: 125 34402 } 34403 } 34404 }, 34405 { 34406 condition: { 34407 minWidth: 451 34408 }, 34409 34410 chartOptions: { 34411 chart: { 34412 height: '65%' 34413 } 34414 } 34415 }] 34416 } 34417 }); 34418 } 34419}; 34420 34421},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],170:[function(require,module,exports){ 34422const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 34423const csvParser = require('../../includes/csvParser'); 34424 34425module.exports = function (Highcharts, appPath) { 34426 const elementId = 'biofuels-trade-by-type'; 34427 var units = ''; 34428 34429 if ($('#' + elementId).length > 0) { 34430 Highcharts.chart(elementId, { 34431 chart: { 34432 type: 'column', 34433 spacingBottom: 30, 34434 events: { 34435 load: creditsSizeAndPosition, 34436 redraw: creditsSizeAndPosition 34437 } 34438 }, 34439 credits: { 34440 enabled: true, 34441 href: null, 34442 style: { 34443 cursor: 'normal' 34444 } 34445 }, 34446 data: { 34447 csvURL: appPath + '/biofuels/charts/' + elementId + '.csv', 34448 startRow: 5, 34449 firstRowAsNames: true, 34450 parsed: function (columns) { 34451 for (let i = 0; i < columns.length; i++) { 34452 34453 if(columns[i][0] === 'ethanol exports' || columns[i][0] === 'biodiesel exports'){ 34454 for (let j = 1; j < columns[i].length; j++) { 34455 if(columns[i][j]){ 34456 columns[i][j] *= -1; 34457 } 34458 } 34459 } 34460 }; 34461 }, 34462 beforeParse: function (csv) { 34463 var parsedCSV = csvParser(csv); 34464 34465 units = parsedCSV[1][0]; 34466 this.chart.title.update({ text: parsedCSV[0][0] }); 34467 this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } }); 34468 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 34469 this.chart.update( 34470 { 34471 accessibility: { 34472 description: parsedCSV[4][0], 34473 }, 34474 exporting: { 34475 menuItemDefinitions: 34476 { 34477 label: { 34478 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 34479 } 34480 }, 34481 buttons: { 34482 contextButton: { 34483 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 34484 } 34485 } 34486 } 34487 } 34488 ); 34489 return csv; 34490 } 34491 }, 34492 colors: [Highcharts.eiaColors.yellow, Highcharts.eiaColors.darkYellow, Highcharts.eiaColors.lightBlue, Highcharts.eiaColors.blue, Highcharts.eiaColors.green, Highcharts.eiaColors.darkGrey], 34493 xAxis: { 34494 labels: { 34495 format: "{value}" 34496 }, 34497 tickInterval: 1, 34498 type: 'dateTime', 34499 }, 34500 yAxis: { 34501 reversedStacks:false, 34502 maxPadding: 0.01, 34503 labels: { 34504 format: "{value:.0f}" 34505 }, 34506 }, 34507 plotOptions: { 34508 column: { 34509 stacking: 'normal', 34510 dataLabels: { 34511 enabled: false 34512 } 34513 } 34514 }, 34515 tooltip: { 34516 useHTML: true, 34517 shared: true, 34518 formatter: function () { 34519 let html = "<b>" + this.points[0].key + "</b><br/>"; 34520 this.points.filter(function (value) { 34521 html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25CF\u2009\u2009' + '</span><b>' + value.series.name + ': </b><span>' + value.y.toFixed(2) + ' ' + units + '</span><br/>'; 34522 }); 34523 return html; 34524 } 34525 }, 34526 responsive: { 34527 rules: [{ 34528 condition: { 34529 maxWidth: 450 34530 }, 34531 chartOptions: { 34532 chart: { 34533 height: 400 34534 }, 34535 legend: { 34536 itemStyle: { 34537 textOverflow: 'none', 34538 whiteSpace: 'break-word', 34539 }, 34540 itemWidth: 125 34541 } 34542 } 34543 }, 34544 { 34545 condition: { 34546 minWidth: 451 34547 }, 34548 34549 chartOptions: { 34550 chart: { 34551 height: '65%' 34552 } 34553 } 34554 }] 34555 } 34556 }); 34557 } 34558}; 34559 34560},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],171:[function(require,module,exports){ 34561const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 34562const csvParser = require('../../includes/csvParser'); 34563 34564module.exports = function (Highcharts, appPath) { 34565 const elementId = 'ethanol-supply-production-states'; 34566 var units = ''; 34567 34568 if ($('#' + elementId).length > 0) { 34569 Highcharts.chart(elementId, { 34570 chart: { 34571 type: 'area', 34572 spacingBottom: 30, 34573 events: { 34574 load: creditsSizeAndPosition, 34575 redraw: creditsSizeAndPosition 34576 } 34577 }, 34578 credits: { 34579 enabled: true, 34580 href: null, 34581 style: { 34582 cursor: 'normal' 34583 } 34584 }, 34585 title: { 34586 text: '' 34587 }, 34588 data: { 34589 csvURL: appPath + '/biofuels/charts/' + elementId + '.csv', 34590 startRow: 5, 34591 firstRowAsNames: true, 34592 beforeParse: function (csv) { 34593 var parsedCSV = csvParser(csv); 34594 this.chart.title.update({ text: parsedCSV[0][0] }); 34595 units = parsedCSV[1][0]; 34596 this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } }); 34597 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 34598 this.chart.update( 34599 { 34600 accessibility: { 34601 description: parsedCSV[4][0], 34602 }, 34603 exporting: { 34604 menuItemDefinitions: 34605 { 34606 label: { 34607 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 34608 } 34609 }, 34610 buttons: { 34611 contextButton: { 34612 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 34613 } 34614 } 34615 } 34616 } 34617 ); 34618 return csv; 34619 } 34620 34621 }, 34622 xAxis: { 34623 labels: { 34624 format: "{value}", 34625 }, 34626 tickInterval: 5, 34627 startOnTick: true, 34628 minPadding: 0, 34629 maxPadding: 0 34630 }, 34631 yAxis: { 34632 labels: { 34633 format: "{value:,.0f}" 34634 }, 34635 maxPadding: 0, 34636 reversedStacks: false 34637 }, 34638 plotOptions: { 34639 area: { 34640 stacking: 'normal', 34641 } 34642 }, 34643 tooltip: { 34644 useHTML: true, 34645 shared: true, 34646 formatter: function () { 34647 var html = '<b>' + this.x + '</b><br/>'; 34648 this.points.filter(function (value) { 34649 html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25CF\u2009\u2009' + '</span><b>' + value.series.name + ':</b> ' + value.y.toFixed(2) + ' ' + units + '<br/>'; 34650 }); 34651 return html; 34652 } 34653 }, 34654 responsive: { 34655 rules: [{ 34656 condition: { 34657 maxWidth: 450 34658 }, 34659 chartOptions: { 34660 chart: { 34661 height: 500 34662 } 34663 } 34664 }, 34665 { 34666 condition: { 34667 minWidth: 451 34668 }, 34669 34670 chartOptions: { 34671 chart: { 34672 height: '65%' 34673 } 34674 } 34675 }] 34676 } 34677 }); 34678 } 34679}; 34680 34681},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],172:[function(require,module,exports){ 34682const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 34683const csvParser = require('../../includes/csvParser'); 34684 34685module.exports = function (Highcharts, appPath) { 34686 const elementId = 'feedstock-inputs-biodiesel-production'; 34687 34688 if ($('#' + elementId).length > 0) { 34689 Highcharts.chart(elementId, { 34690 chart: { 34691 type: 'pie', 34692 spacingBottom: 30, 34693 events: { 34694 load: creditsSizeAndPosition, 34695 redraw: creditsSizeAndPosition 34696 } 34697 }, 34698 credits: { 34699 enabled: true, 34700 href: null, 34701 style: { 34702 cursor: 'normal' 34703 } 34704 }, 34705 title: { 34706 text: '', 34707 margin: 15 34708 }, 34709 data: { 34710 csvURL: appPath + '/biofuels/charts/' + elementId + '.csv', 34711 startRow: 4, 34712 firstRowAsNames: true, 34713 34714 beforeParse: function (csv) { 34715 var parsedCSV = csvParser(csv); 34716 this.chart.title.update({ text: parsedCSV[0][0] }); 34717 this.chart.subtitle.update({ text: '<span style="color:#888;font-weight:bold;font-size:12px;fill:#888;">' + parsedCSV[1][0] + '</span>' }); 34718 34719 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0]}); 34720 this.chart.update( 34721 { 34722 accessibility: { 34723 description: parsedCSV[4][0], 34724 }, 34725 exp
34725orting: { 34726 menuItemDefinitions: 34727 { 34728 label: { 34729 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 34730 } 34731 }, 34732 buttons: { 34733 contextButton: { 34734 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 34735 } 34736 } 34737 } 34738 } 34739 ); 34740 return csv; 34741 } 34742 }, 34743 colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.green, Highcharts.eiaColors.yellow, Highcharts.eiaColors.red], 34744 subtitle: { 34745 text: '', 34746 useHTML: true, 34747 }, 34748 plotOptions: { 34749 pie: { 34750 startAngle: 0, 34751 dataLabels: { 34752 enabled: true, 34753 format: "<strong>{point.name}</strong><br/> {point.percentage:.0f}%", 34754 distance: 10, 34755 color: Highcharts.eiaColors.darkGrey, 34756 style: { 34757 "fontSize": "12px" 34758 } 34759 } 34760 } 34761 }, 34762 tooltip: { 34763 useHTML: true, 34764 formatter: function () { 34765 return "<span><b>" + this.key + "</b><br/>" + Math.round(this.percentage) + " %</span>"; 34766 } 34767 }, 34768 responsive: { 34769 rules: [{ 34770 condition: { 34771 maxWidth: 450 34772 }, 34773 34774 chartOptions: { 34775 chart: { 34776 height: 425 34777 }, 34778 plotOptions: { 34779 pie: { 34780 size: '80%', 34781 dataLabels: { 34782 enabled: false 34783 }, 34784 showInLegend: true 34785 } 34786 }, 34787 legend: { 34788 enabled: true, 34789 itemStyle: { 34790 lineHeight: 13 34791 } 34792 } 34793 } 34794 }, 34795 { 34796 condition: { 34797 minWidth: 451 34798 }, 34799 34800 chartOptions: { 34801 chart: { 34802 height: '65%' 34803 }, 34804 title: { 34805 margin: 15 34806 }, 34807 plotOptions: { 34808 pie: { 34809 size: '65%', 34810 dataLabels: { 34811 enabled: true 34812 }, 34813 showInLegend: false 34814 } 34815 }, 34816 legend: { 34817 enabled: false 34818 } 34819 } 34820 }] 34821 } 34822 }); 34823 } 34824}; 34825 34826},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],173:[function(require,module,exports){ 34827const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 34828const csvParser = require('../../includes/csvParser'); 34829 34830module.exports = function (Highcharts, appPath) { 34831 const elementId = 'feedstocks-for-biofuels-production'; 34832 34833 if ($('#' + elementId).length > 0) { 34834 Highcharts.chart(elementId, { 34835 chart: { 34836 type: 'pie', 34837 spacingBottom: 30, 34838 events: { 34839 load: creditsSizeAndPosition, 34840 redraw: creditsSizeAndPosition 34841 } 34842 }, 34843 credits: { 34844 enabled: true, 34845 href: null, 34846 style: { 34847 cursor: 'normal' 34848 } 34849 }, 34850 title: { 34851 text: '', 34852 margin: 0 34853 }, 34854 data: { 34855 csvURL: appPath + '/biofuels/charts/' + elementId + '.csv', 34856 startRow: 5, 34857 firstRowAsNames: false, 34858 34859 beforeParse: function (csv) { 34860 var parsedCSV = csvParser(csv); 34861 this.chart.title.update({ text: parsedCSV[0][0] }); 34862 this.chart.subtitle.update({ text: '<span style="color:#888;font-weight:bold;font-size:12px;fill:#888;">' + parsedCSV[1][0] + '</span>' }); 34863 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 34864 this.chart.update( 34865 { 34866 accessibility: { 34867 description: parsedCSV[4][0], 34868 }, 34869 exporting: { 34870 menuItemDefinitions: 34871 { 34872 label: { 34873 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 34874 } 34875 }, 34876 buttons: { 34877 contextButton: { 34878 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 34879 } 34880 } 34881 } 34882 } 34883 ); 34884 return csv; 34885 } 34886 }, 34887 colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.green, Highcharts.eiaColors.yellow, Highcharts.eiaColors.red], 34888 subtitle: { 34889 text: '', 34890 useHTML: true, 34891 }, 34892 plotOptions: { 34893 pie: { 34894 startAngle: 0, 34895 dataLabels: { 34896 enabled: true, 34897 format: "<strong>{point.name}</strong><br/> {point.percentage:.0f}%", 34898 distance: 10, 34899 color: Highcharts.eiaColors.darkGrey, 34900 style: { 34901 "fontSize": "12px" 34902 } 34903 } 34904 } 34905 }, 34906 tooltip: { 34907 useHTML: true, 34908 formatter: function () { 34909 return "<span><b>" + this.key + "</b><br/>" + Math.round(this.percentage) + " %</span>"; 34910 } 34911 }, 34912 responsive: { 34913 rules: [{ 34914 condition: { 34915 maxWidth: 450 34916 }, 34917 34918 chartOptions: { 34919 chart: { 34920 height: 440 34921 }, 34922 plotOptions: { 34923 pie: { 34924 size: '80%', 34925 dataLabels: { 34926 enabled: false 34927 }, 34928 showInLegend: true 34929 } 34930 }, 34931 legend: { 34932 enabled: true, 34933 itemStyle: { 34934 lineHeight: 13 34935 } 34936 } 34937 } 34938 }, 34939 { 34940 condition: { 34941 minWidth: 451 34942 }, 34943 34944 chartOptions: { 34945 chart: { 34946 height: '65%' 34947 }, 34948 plotOptions: { 34949 pie: { 34950 size: '65%', 34951 dataLabels: { 34952 enabled: true 34953 }, 34954 showInLegend: false 34955 } 34956 }, 34957 legend: { 34958 enabled: false 34959 } 34960 } 34961 }] 34962 } 34963 }); 34964 } 34965}; 34966 34967},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],174:[function(require,module,exports){ 34968const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 34969const csvParser = require('../../includes/csvParser'); 34970 34971module.exports = function (Highcharts, appPath) { 34972 const elementId = 'fuel-ethanol-motor-gasoline'; 34973 34974 if ($('#' + elementId).length > 0) { 34975 Highcharts.chart(elementId, { 34976 chart: { 34977 type: 'line', 34978 spacingBottom: 25, 34979 events: { 34980 load: creditsSizeAndPosition, 34981 redraw: creditsSizeAndPosition 34982 } 34983 }, 34984 credits: { 34985 enabled: true, 34986 href: null, 34987 style: { 34988 cursor: 'normal' 34989 } 34990 }, 34991 data: { 34992 csvURL: appPath + '/biofuels/charts/' + elementId + '.csv', 34993 startRow: 6, 34994 firstRowAsNames: true, 34995 complete: function (options) { 34996 if (options.series.length > 0) { 34997 options.series[0].yAxis = 0; 34998 options.series[1].yAxis = 1; 34999 } 35000 }, 35001 beforeParse: function (csv) { 35002 var parsedCSV = csvParser(csv); 35003 this.chart.title.update({ text: parsedCSV[0][0] }); 35004 this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } }); 35005 this.chart.yAxis[1].update({ title: { text: parsedCSV[2][0] } }); 35006 this.chart.credits.update({ text: parsedCSV[3][0] + '<br>' + parsedCSV[4][0] }); 35007 this.chart.update( 35008 { 35009 accessibility: { 35010 description: parsedCSV[5][0], 35011 }, 35012 exporting: { 35013 menuItemDefinitions: 35014 { 35015 label: { 35016 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 35017 } 35018 }, 35019 buttons: { 35020 contextButton: { 35021 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 35022 } 35023 } 35024 } 35025 } 35026 ); 35027 return csv; 35028 } 35029 35030 }, 35031 xAxis: { 35032 labels: { 35033 format: "{value}" 35034 }, 35035 startOnTick: false, 35036 tickInterval: 5, 35037 minPadding: 0, 35038 maxPadding: 0 35039 }, 35040 yAxis: [ 35041 { 35042 maxPadding: 0, 35043 tickInterval: 1,
35044 alignTicks: false, 35045 labels: { 35046 format: "{value}", 35047 style: { "color": Highcharts.eiaColors.blue } 35048 }, 35049 title: { 35050 style: { "color": Highcharts.eiaColors.blue } 35051 } 35052 }, 35053 { 35054 tickInterval: 2, 35055 maxPadding: 0, 35056 alignTicks: false, 35057 gridLineColor: 'none', 35058 opposite: true, 35059 labels: { 35060 format: "{value:.0f}%", 35061 style: { "color": Highcharts.eiaColors.brown } 35062 }, 35063 title: { 35064 style: { "color": Highcharts.eiaColors.brown } 35065 } 35066 } 35067 ], 35068 tooltip: { 35069 useHTML: true, 35070 shared: true, 35071 formatter: function () { 35072 var html = '<b>' + this.x + '</b><br/>'; 35073 this.points.filter(function (value) { 35074 html += '<span style="color:' + value.series.color + '">' + '\u25AC\u2009\u2009' + '</span><b>'; 35075 if (value.series.name.charAt(0) === 'c') { // starts with c for consumption, the first series 35076 html += value.series.name + ':</b> ' + value.y.toFixed(2) + ' billion gallons<br/>'; 35077 } else { 35078 html += value.series.name + ":</b> " + value.y.toFixed(1) + value.series.name.split(' ')[0] + "<br/>"; 35079 } 35080 }); 35081 return html; 35082 } 35083 }, 35084 responsive: { 35085 rules: [{ 35086 condition: { 35087 maxWidth: 400 35088 }, 35089 chartOptions: { 35090 chart: { 35091 height: 450 35092 }, 35093 xAxis: [ 35094 { 35095 labels: { 35096 rotation: -45 35097 }, 35098 tickInterval: 10, 35099 startOnTick: true, 35100 } 35101 ], 35102 yAxis: [ 35103 { 35104 title: { 35105 align: 'middle', 35106 style:{ 35107 fontSize:'10px', 35108 wordwrap: 'break-word', 35109 width:'150px' 35110 }, 35111 rotation: 90 35112 } 35113 }, 35114 { 35115 title: { 35116 align: 'middle', 35117 style:{ 35118 fontSize:'10px', 35119 wordwrap: 'break-word', 35120 width:'150px' 35121 }, 35122 rotation: 90 35123 } 35124 } 35125 ] 35126 } 35127 }, 35128 { 35129 condition: { 35130 minWidth: 451 35131 }, 35132 35133 chartOptions: { 35134 chart: { 35135 height: '65%' 35136 }, 35137 yAxis: [ 35138 { 35139 title: { 35140 style:{ 35141 width:'300px' 35142 } 35143 } 35144 }, 35145 { 35146 title: { 35147 style:{ 35148 width:'300px' 35149 } 35150 } 35151 } 35152 ] 35153 } 35154 }] 35155 } 35156 }); 35157 } 35158}; 35159 35160},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],175:[function(require,module,exports){ 35161const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 35162const csvParser = require('../../includes/csvParser'); 35163 35164module.exports = function (Highcharts, appPath) { 35165 const elementId = 'us-biodiesel-consumption'; 35166 var units = ''; 35167 35168 if ($('#' + elementId).length > 0) { 35169 Highcharts.chart(elementId, { 35170 chart: { 35171 type: 'column', 35172 spacingBottom: 30, 35173 events: { 35174 load: creditsSizeAndPosition, 35175 redraw: creditsSizeAndPosition 35176 } 35177 }, 35178 credits: { 35179 enabled: true, 35180 href: null, 35181 style: { 35182 cursor: 'normal' 35183 } 35184 }, 35185 data: { 35186 csvURL: appPath + '/biofuels/charts/' + elementId + '.csv', 35187 startRow: 5, 35188 firstRowAsNames: true, 35189 beforeParse: function (csv) { 35190 var parsedCSV = csvParser(csv); 35191 this.chart.title.update({ text: parsedCSV[0][0] }); 35192 this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } }); 35193 units = parsedCSV[1][0]; 35194 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 35195 this.chart.update( 35196 { 35197 accessibility: { 35198 description: parsedCSV[4][0], 35199 }, 35200 exporting: { 35201 menuItemDefinitions: 35202 { 35203 label: { 35204 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 35205 } 35206 }, 35207 buttons: { 35208 contextButton: { 35209 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 35210 } 35211 } 35212 } 35213 } 35214 ); 35215 return csv; 35216 } 35217 }, 35218 legend: { 35219 35220 }, 35221 xAxis: { 35222 labels: { 35223 format: "{value}" 35224 }, 35225 tickInterval: 1 35226 }, 35227 yAxis: { 35228 labels: { 35229 format: "{value:.2f}" 35230 }, 35231 tickInterval: .25 35232 }, 35233 plotOptions: { 35234 column: { 35235 dataLabels: { 35236 enabled: false 35237 } 35238 } 35239 }, 35240 tooltip: { 35241 useHTML: true, 35242 formatter: function () { 35243 return '<span style="color:' + this.series.color + '">' + '\u25CF\u2004\u2009' + '</span><b>' + this.series.name + '</b><br>' + this.x + '<br/>' + this.y.toFixed(2) + ' ' + units + '</span>'; 35244 } 35245 }, 35246 responsive: { 35247 rules: [{ 35248 condition: { 35249 maxWidth: 450 35250 }, 35251 chartOptions: { 35252 chart: { 35253 height: 400 35254 } 35255 } 35256 }, 35257 { 35258 condition: { 35259 minWidth: 451 35260 }, 35261 35262 chartOptions: { 35263 chart: { 35264 height: '65%' 35265 } 35266 } 35267 }] 35268 } 35269 }); 35270 } 35271}; 35272 35273},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],176:[function(require,module,exports){ 35274const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 35275const csvParser = require('../../includes/csvParser'); 35276 35277module.exports = function (Highcharts, appPath) { 35278 const elementId = 'management-of-msw-us'; 35279 35280 if ($('#' + elementId).length > 0) { 35281 Highcharts.chart(elementId, { 35282 chart: { 35283 type: 'pie', 35284 spacingBottom: 30, 35285 events: { 35286 load: creditsSizeAndPosition, 35287 redraw: creditsSizeAndPosition 35288 } 35289 }, 35290 credits: { 35291 enabled: true, 35292 href: null, 35293 style: { 35294 cursor: 'normal' 35295 } 35296 }, 35297 title: { 35298 text: '', 35299 margin: 5 35300 }, 35301 data: { 35302 csvURL: appPath + '/biomass/charts/' + elementId + '.csv', 35303 startRow: 4, 35304 firstRowAsNames: true, 35305 35306 beforeParse: function (csv) { 35307 var parsedCSV = csvParser(csv); 35308 this.chart.title.update({ text: parsedCSV[0][0] }); 35309 this.chart.subtitle.update({ text: '<span style="color:#888;font-weight:bold;font-size:12px;fill:#888;">' + parsedCSV[1][0] + '</span>' }); 35310 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 35311 this.chart.update( 35312 { 35313 accessibility: { 35314 description: parsedCSV[4][0], 35315 }, 35316 exporting: { 35317 menuItemDefinitions: 35318 { 35319 label: { 35320 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 35321 } 35322 }, 35323 buttons: { 35324 contextButton: { 35325 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 35326 } 35327 } 35328 } 35329 } 35330 ); 35331 return csv; 35332 } 35333 }, 35334 colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.green, Highcharts.eiaColors.yellow, Highcharts.eiaColors.darkGreen], 35335 subtitle: { 35336 text: '', 35337 useHTML: true, 35338 }, 35339 plotOptions: { 35340 pie: { 35341 startAngle: -190, 35342 dataLabels: { 35343 enabled: true, 35344 format: "<strong>{point.name}</strong><br/>{point.percentage:.1f}%", 35345 distance: 10, 35346 color: Highcharts.eiaColors.darkGrey 35347 } 35348 } 35349 }, 35350 tooltip: { 35351 useHTML: true, 35352 formatter: function () { 35353 return "<span><b>" + this.key + "</b><br/>" + Math.round(this.percentage * 100) / 100 + "%</span>"; 35354 } 35355 }, 35356 responsive: { 35357 rules: [{ 35358 condition: { 35359 maxWidth: 450 35360 }, 35361 35362 chartOptions: { 35363 chart: { 35364 height: 425 35365 }, 35366 plotOptions: { 35367 pie: { 35368 size: '80%', 35369 dataLabels: { 35370 enabled: false 35371 }, 35372 showInLegend: true 35373 } 35374 }, 35375 legend: { 35376 enabled: true, 35377 itemStyle: { 35378 lineHeight: 13 35379 } 35380 } 35381 } 35382 }, 35383 { 35384 condition: { 35385 minWidth: 451 35386 }, 35387 35388 chartOptions: { 35389 chart: { 35390 height: '65%' 35391 }, 35392 plotOptions: { 35393 pie: { 35394 size: '65%', 35395 dataLabels: { 35396 enabled: true 35397 }, 35398 showInLegend: false 35399 } 35400 }, 35401 legend: { 35402 enabled: false 35403 } 35404 } 35405 }] 35406 } 35407 }); 35408 } 35409}; 35410 35411},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],177:[function(require,module,exports){ 35412const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 35413const csvParser = require('../../includes/csvParser'); 35414 35415module.exports = function (Highcharts, appPath) { 35416 const elementId = 'percent-waste-burned'; 35417 if ($('#' + elementId).length > 0) { 35418 Highcharts.chart(elementId, { 35419 chart: { 35420 type: 'column', 35421 spacingBottom: 30, 35422 events: { 35423 load: creditsSizeAndPosition, 35424 redraw: creditsSizeAndPosition 35425 } 35426 }, 35427 credits: { 35428 enabled: true, 35429 href: null, 35430 style: { 35431 cursor: 'normal' 35432 } 35433 }, 35434 data: { 35435 csvURL: appPath + '/biomass/charts/' + elementId + '.csv', 35436 startRow: 5, 35437 firstRowAsNames: false, 35438 beforeParse: function (csv) { 35439 var parsedCSV = csvParser(csv); 35440 this.chart.title.update({ text: parsedCSV[0][0] }); 35441 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 35442 this.chart.update( 35443 { 35444 accessibility: { 35445 description: parsedCSV[4][0], 35446 }, 35447 exporting: { 35448 menuItemDefinitions: 35449 { 35450 label: { 35451 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 35452 } 35453 }, 35454 buttons: { 35455 contextButton: { 35456 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 35457 } 35458 } 35459 } 35460 } 35461 ); 35462 return csv; 35463 } 35464 }, 35465 colors: [Highcharts.eiaColors.blue], 35466 xAxis: { 35467 labels: { 35468 enabled: true, 35469 rotation: -45 35470 } 35471 }, 35472 plotOptions: { 35473 column: { 35474 grouping: false, 35475 dataLabels: { 35476 enabled: true, 35477 crop: false, 35478 overflow: 'none', 35479 formatter: function () { 35480 return Highcharts.numberFormat(this.y, 0) + '%'; 35481 }, 35482 style: { 35483 color: Highcharts.eiaColors.darkGrey 35484 } 35485 } 35486 } 35487 }, 35488 yAxis: { 35489 tickInterval: 10, 35490 labels: { 35491 format: "{value:.0f}%" 35492 }, 35493 title: { 35494 enabled: fal
35494se 35495 } 35496 }, 35497 tooltip: { 35498 useHTML: true, 35499 formatter: function () { 35500 return '<b>' + this.key + '</b><br/>' + this.y.toFixed(0) + '%'; 35501 } 35502 }, 35503 legend: { 35504 enabled: false 35505 }, 35506 responsive: { 35507 rules: [{ 35508 condition: { 35509 maxWidth: 450 35510 }, 35511 chartOptions: { 35512 chart: { 35513 height: 450 35514 } 35515 } 35516 }, 35517 { 35518 condition: { 35519 minWidth: 451 35520 }, 35521 35522 chartOptions: { 35523 chart: { 35524 height: '65%' 35525 } 35526 } 35527 }] 35528 } 35529 }); 35530 } 35531}; 35532},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],178:[function(require,module,exports){ 35533const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 35534const csvParser = require('../../includes/csvParser'); 35535 35536module.exports = function (Highcharts, appPath) { 35537 const elementId = 'total-msw-generation-by-type-of-waste'; 35538 35539 if ($('#' + elementId).length > 0) { 35540 Highcharts.chart(elementId, { 35541 chart: { 35542 type: 'pie', 35543 spacingBottom: 30, 35544 events: { 35545 load: creditsSizeAndPosition, 35546 redraw: creditsSizeAndPosition 35547 } 35548 }, 35549 credits: { 35550 enabled: true, 35551 href: null, 35552 style: { 35553 cursor: 'normal' 35554 } 35555 }, 35556 title: { 35557 text: '', 35558 margin: 5 35559 }, 35560 data: { 35561 csvURL: appPath + '/biomass/charts/' + elementId + '.csv', 35562 startRow: 4, 35563 firstRowAsNames: true, 35564 35565 beforeParse: function (csv) { 35566 var parsedCSV = csvParser(csv); 35567 this.chart.title.update({ text: parsedCSV[0][0] }); 35568 this.chart.subtitle.update({ text: '<span style="color:#888;font-weight:bold;font-size:12px;fill:#888;">' + parsedCSV[1][0] + '</span>' }); 35569 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 35570 this.chart.update( 35571 { 35572 accessibility: { 35573 description: parsedCSV[4][0], 35574 }, 35575 exporting: { 35576 menuItemDefinitions: 35577 { 35578 label: { 35579 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 35580 } 35581 }, 35582 buttons: { 35583 contextButton: { 35584 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 35585 } 35586 } 35587 } 35588 } 35589 ); 35590 return csv; 35591 } 35592 }, 35593 colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.green, Highcharts.eiaColors.yellow, Highcharts.eiaColors.red, Highcharts.eiaColors.darkBrown, Highcharts.eiaColors.darkBlue, Highcharts.eiaColors.lightBlue, Highcharts.eiaColors.darkGreen], 35594 subtitle: { 35595 text: '', 35596 useHTML: true, 35597 }, 35598 plotOptions: { 35599 pie: { 35600 startAngle: -120, 35601 dataLabels: { 35602 enabled: true, 35603 format: "<strong>{point.name}</strong><br/> {point.percentage:.1f}%", 35604 distance: 10, 35605 color: Highcharts.eiaColors.darkGrey 35606 } 35607 } 35608 }, 35609 tooltip: { 35610 useHTML: true, 35611 formatter: function () { 35612 return "<span><b>" + this.key + "</b><br/>" + Math.round(this.percentage * 100) / 100 + "%</span>"; 35613 } 35614 }, 35615 responsive: { 35616 rules: [{ 35617 condition: { 35618 maxWidth: 450 35619 }, 35620 35621 chartOptions: { 35622 chart: { 35623 height: 525 35624 }, 35625 plotOptions: { 35626 pie: { 35627 size: '80%', 35628 dataLabels: { 35629 enabled: false 35630 }, 35631 showInLegend: true 35632 } 35633 }, 35634 legend: { 35635 enabled: true, 35636 itemStyle: { 35637 textOverflow: 'none', 35638 lineHeight: 13 35639 } 35640 } 35641 } 35642 }, 35643 { 35644 condition: { 35645 minWidth: 451 35646 }, 35647 35648 chartOptions: { 35649 chart: { 35650 height: '65%' 35651 }, 35652 plotOptions: { 35653 pie: { 35654 size: '65%', 35655 dataLabels: { 35656 enabled: true 35657 }, 35658 showInLegend: false 35659 } 35660 }, 35661 legend: { 35662 enabled: false 35663 } 35664 } 35665 }] 35666 } 35667 }); 35668 } 35669}; 35670 35671},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],179:[function(require,module,exports){ 35672const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 35673const csvParser = require('../../includes/csvParser'); 35674 35675module.exports = function (Highcharts, appPath) { 35676 const elementId = 'annual-prices-delivered-end-use-sectors'; 35677 var min, max; 35678 var units = ''; 35679 35680 if ($('#' + elementId).length > 0) { 35681 Highcharts.chart(elementId, { 35682 chart: { 35683 type: 'line', 35684 spacingBottom: 30, 35685 events: { 35686 load: creditsSizeAndPosition, 35687 redraw: creditsSizeAndPosition 35688 } 35689 }, 35690 credits: { 35691 enabled: true, 35692 href: null, 35693 style: { 35694 cursor: 'normal' 35695 } 35696 }, 35697 data: { 35698 csvURL: appPath + '/coal/charts/' + elementId + '.csv', 35699 startRow: 5, 35700 firstRowAsNames: true, 35701 beforeParse: function (csv) { 35702 var parsedCSV = csvParser(csv); 35703 this.chart.title.update({ text: parsedCSV[0][0] }); 35704 this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } }); 35705 units = parsedCSV[1][0]; 35706 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 35707 this.chart.update( 35708 { 35709 accessibility: { 35710 description: parsedCSV[4][0], 35711 }, 35712 exporting: { 35713 menuItemDefinitions: 35714 { 35715 label: { 35716 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 35717 } 35718 }, 35719 buttons: { 35720 contextButton: { 35721 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 35722 } 35723 } 35724 } 35725 } 35726 ); 35727 return csv; 35728 }, 35729 parsed: function () { 35730 if (this.columns.length > 0) { 35731 if (this.columns.length > 0) { 35732 min = Math.min.apply(null, this.columns[0]); 35733 max = Math.max.apply(null, this.columns[0]); 35734 } 35735 } 35736 } 35737 }, 35738 colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.green, Highcharts.eiaColors.yellow], 35739 xAxis: { 35740 labels: { 35741 format: "{value}", 35742 }, 35743 min: min, 35744 max: max, 35745 tickInterval: 1, 35746 }, 35747 yAxis: { 35748 tickInterval: 20, 35749 maxPadding: 0.01, 35750 labels: { 35751 format: "${value:.2f}" 35752 } 35753 }, 35754 tooltip: { 35755 shared: true, 35756 useHTML: true, 35757 formatter: function () { 35758 var html = '<b>' + this.x + '</b><br/>'; 35759 this.points.filter(function (value) { 35760 html += '<span style="color:' + value.series.color + '">' + '\u25AC\u2009\u2009' + '</span><b>' + value.series.name + ':</b> $' + value.y.toFixed(2).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",") + ' ' + units + '<br/>'; 35761 }); 35762 return html; 35763 } 35764 }, 35765 responsive: { 35766 rules: [{ 35767 condition: { 35768 maxWidth: 450 35769 }, 35770 chartOptions: { 35771 chart: { 35772 height: 400 35773 } 35774 } 35775 }, 35776 { 35777 condition: { 35778 minWidth: 451 35779 }, 35780 35781 chartOptions: { 35782 chart: { 35783 height: '65%' 35784 } 35785 } 35786 }] 35787 } 35788 }); 35789 } 35790}; 35791 35792},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],180:[function(require,module,exports){ 35793const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 35794const csvParser = require('../../includes/csvParser'); 35795 35796module.exports = function (Highcharts, appPath) { 35797 const elementId = 'coal-consumption-by-major-end-users'; 35798 var units = ''; 35799 35800 if ($('#' + elementId).length > 0) { 35801 Highcharts.chart(elementId, { 35802 chart: { 35803 type: 'area', 35804 spacingBottom: 30, 35805 events: { 35806 load: creditsSizeAndPosition, 35807 redraw: creditsSizeAndPosition 35808 } 35809 }, 35810 credits: { 35811 enabled: true, 35812 href: null, 35813 style: { 35814 cursor: 'normal' 35815 } 35816 }, 35817 data: { 35818 csvURL: appPath + '/coal/charts/' + elementId + '.csv', 35819 startRow: 5, 35820 firstRowAsNames: true, 35821 35822 beforeParse: function (csv) { 35823 var parsedCSV = csvParser(csv); 35824 this.chart.title.update({ text: parsedCSV[0][0] }); 35825 this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } }); 35826 units = parsedCSV[1][0]; 35827 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 35828 this.chart.update( 35829 { 35830 accessibility: { 35831 description: parsedCSV[4][0], 35832 }, 35833 exporting: { 35834 menuItemDefinitions: 35835 { 35836 label: { 35837 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 35838 } 35839 }, 35840 buttons: { 35841 contextButton: { 35842 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 35843 } 35844 } 35845 } 35846 } 35847 ); 35848 return csv; 35849 } 35850 }, 35851 colors: [Highcharts.eiaColors.brown, Highcharts.eiaColors.green, Highcharts.eiaColors.blue,Highcharts.eiaColors.darkGrey, Highcharts.eiaColors.yellow], 35852 legend: { 35853 reversed: true 35854 }, 35855 xAxis: { 35856 labels: { 35857 format: "{value}", 35858 type: 'category', 35859 }, 35860 tickInterval: 10, 35861 startOnTick: true, 35862 minPadding: 0, 35863 maxPadding: 0 35864 }, 35865 yAxis: { 35866 tickInterval: 200, 35867 labels: { 35868 format: "{value:,.0f}" 35869 }, 35870 reversedStacks: false 35871 }, 35872 plotOptions: { 35873 area: { 35874 stacking: 'normal', 35875 } 35876 }, 35877 tooltip: { 35878 useHTML: true, 35879 shared: true, 35880 formatter: function () { 35881 var html = '<b>' + this.x + '</b><br/>'; 35882 this.points.filter(function (value) { 35883 html += '<span style="color:' + value.series.color + '">' + '\u25CF\u2009\u2009' + '</span><b>' + value.series.name + ':</b> ' + value.y.toFixed(2).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",") + ' ' + units + '<br/>'; 35884 }); 35885 return html; 35886 } 35887 }, 35888 responsive: { 35889 rules: [{ 35890 condition: { 35891 maxWidth: 450 35892 }, 35893 chartOptions: { 35894 chart: { 35895 height: 450 35896 } 35897 } 35898 }, 35899 { 35900 condition: { 35901 minWidth: 451 35902 }, 35903 35904 chartOptions: { 35905 chart: { 35906 height: '65%' 35907 } 35908 } 35909 }] 35910 } 35911 }); 35912 } 35913}; 35914 35915},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],181:[function(require,module,exports){ 35916const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 35917const csvParser = require('../../includes/csvParser'); 35918 35919module.exports = function (Highcharts, appPath) { 35920 const elementId = 'coal-imports-exports'; 35921 var units = ''; 35922 if ($('#' + elementId).length > 0) { 35923 Highcharts.chart(elementId, { 35924 chart: { 35925 type: 'line', 35926 spacingBottom: 30, 35927 events: { 35928 load: creditsSizeAndPosition, 35929 redraw: creditsSizeAndPosition 35930 } 35931 }, 35932 credits: { 35933 enabled: true, 35934 href: null, 35935 style: { 35936 cursor: 'normal' 35937 } 35938 }, 35939 data: { 35940 csvURL: appPath + '/coal/charts/' + elementId + '.csv', 35941 startRow: 5, 35942 firstRowAsNames: true, 35943 beforeParse: function (csv) { 35944 var parsedCSV = csvParser(csv); 35945 this.chart.title.update({ text: parsedCSV[0][0] }); 35946 units = parsedCSV[1][0]; 35947 this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } }); 35948 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 35949 this.chart.update( 35950 { 35951 accessibility: { 35952 description: parsedCSV[4][0], 35953 }, 35954 exporting: { 35955 menuItemDefinitions: 35956 { 35957 label: { 35958 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 35959 } 35960 }, 35961 buttons: { 35962 contextButton: { 35963 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 35964 } 35965 } 35966 } 35967
35967 } 35968 ); 35969 return csv; 35970 } 35971 }, 35972 xAxis: { 35973 labels: { 35974 format: "{value}", 35975 }, 35976 tickInterval: 6, 35977 }, 35978 yAxis: { 35979 tickInterval: 25, 35980 maxPadding: 0, 35981 labels: { 35982 format: "{value}" 35983 } 35984 }, 35985 tooltip: { 35986 useHTML: true, 35987 shared: true, 35988 formatter: function () { 35989 var html = '<b>' + this.x + '</b><br/>'; 35990 this.points.filter(function (value) { 35991 html += '<span style="color:' + value.series.color + '">' + '\u25AC\u2009\u2009' + '</span><b>' + value.series.name + ':</b> ' + value.y.toFixed(2) + ' ' + units + '<br/>'; 35992 }); 35993 return html; 35994 } 35995 }, 35996 responsive: { 35997 rules: [{ 35998 condition: { 35999 maxWidth: 450 36000 }, 36001 chartOptions: { 36002 chart: { 36003 height: 400 36004 } 36005 } 36006 }, 36007 { 36008 condition: { 36009 minWidth: 451 36010 }, 36011 36012 chartOptions: { 36013 chart: { 36014 height: '65%' 36015 } 36016 } 36017 }] 36018 } 36019 }); 36020 } 36021}; 36022 36023},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],182:[function(require,module,exports){ 36024const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 36025const csvParser = require('../../includes/csvParser'); 36026 36027module.exports = function (Highcharts, appPath) { 36028 const elementId = 'coal-production-consumption-net-exports'; 36029 var units = ''; 36030 if ($('#' + elementId).length > 0) { 36031 Highcharts.chart(elementId, { 36032 chart: { 36033 type: 'line', 36034 spacingBottom: 30, 36035 events: { 36036 load: creditsSizeAndPosition, 36037 redraw: creditsSizeAndPosition 36038 } 36039 }, 36040 credits: { 36041 enabled: true, 36042 href: null, 36043 style: { 36044 cursor: 'normal' 36045 } 36046 }, 36047 data: { 36048 csvURL: appPath + '/coal/charts/' + elementId + '.csv', 36049 startRow: 5, 36050 firstRowAsNames: true, 36051 beforeParse: function (csv) { 36052 var parsedCSV = csvParser(csv); 36053 this.chart.title.update({ text: parsedCSV[0][0] }); 36054 units = parsedCSV[1][0]; 36055 this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } }); 36056 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 36057 this.chart.update( 36058 { 36059 accessibility: { 36060 description: parsedCSV[4][0], 36061 }, 36062 exporting: { 36063 menuItemDefinitions: 36064 { 36065 label: { 36066 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 36067 } 36068 }, 36069 buttons: { 36070 contextButton: { 36071 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 36072 } 36073 } 36074 } 36075 } 36076 ); 36077 return csv; 36078 } 36079 }, 36080 xAxis: { 36081 labels: { 36082 format: "{value}", 36083 }, 36084 tickInterval: 6, 36085 }, 36086 yAxis: { 36087 tickInterval: 200, 36088 maxPadding: 0.01, 36089 labels: { 36090 format: "{value:,.0f}" 36091 } 36092 }, 36093 tooltip: { 36094 useHTML: true, 36095 shared: true, 36096 formatter: function () { 36097 var html = '<b>' + this.x + '</b><br/>'; 36098 this.points.filter(function (value) { 36099 html += '<span style="color:' + value.series.color + '">' + '\u25AC\u2009\u2009' + '</span><b>' + value.series.name + ':</b> ' + value.y.toFixed(2).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",") + ' ' + units + '<br/>'; 36100 }); 36101 return html; 36102 } 36103 }, 36104 responsive: { 36105 rules: [{ 36106 condition: { 36107 maxWidth: 450 36108 }, 36109 chartOptions: { 36110 chart: { 36111 height: 400 36112 } 36113 } 36114 }, 36115 { 36116 condition: { 36117 minWidth: 451 36118 }, 36119 36120 chartOptions: { 36121 chart: { 36122 height: '65%' 36123 } 36124 } 36125 }] 36126 } 36127 }); 36128 } 36129}; 36130 36131},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],183:[function(require,module,exports){ 36132const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 36133const csvParser = require('../../includes/csvParser'); 36134 36135module.exports = function (Highcharts, appPath) { 36136 const elementId = 'reserves-by-type-mining-method'; 36137 var units = ''; 36138 36139 if ($('#' + elementId).length > 0) { 36140 Highcharts.chart(elementId, { 36141 chart: { 36142 type: 'column', 36143 spacingBottom: 30, 36144 events: { 36145 load: creditsSizeAndPosition, 36146 redraw: creditsSizeAndPosition 36147 } 36148 }, 36149 credits: { 36150 enabled: true, 36151 href: null, 36152 style: { 36153 cursor: 'normal' 36154 } 36155 }, 36156 data: { 36157 csvURL: appPath + '/coal/charts/' + elementId + '.csv', 36158 startRow: 5, 36159 firstRowAsNames: true, 36160 36161 beforeParse: function (csv) { 36162 var parsedCSV = csvParser(csv); 36163 this.chart.title.update({ text: parsedCSV[0][0] }); 36164 this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } }); 36165 units = parsedCSV[1][0]; 36166 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 36167 this.chart.update( 36168 { 36169 accessibility: { 36170 description: parsedCSV[4][0], 36171 }, 36172 exporting: { 36173 menuItemDefinitions: 36174 { 36175 label: { 36176 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 36177 } 36178 }, 36179 buttons: { 36180 contextButton: { 36181 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 36182 } 36183 } 36184 } 36185 } 36186 ); 36187 return csv; 36188 } 36189 }, 36190 tooltip: { 36191 useHTML: true, 36192 shared: true, 36193 formatter: function () { 36194 let html = "<b>" + this.points[0].key + "</b><br/>"; 36195 this.points.filter(function (value) { 36196 html += '<span style="color:' + value.series.color + '">' + '\u25CF\u2004\u2009' + '</span><b>' + value.series.name + ': </b><span>' + value.y.toFixed(2) + ' ' + units + '</span><br/>'; 36197 }); 36198 return html; 36199 } 36200 }, 36201 colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown], 36202 xAxis: { 36203 labels: { 36204 format: "{value}", 36205 type: 'category', 36206 }, 36207 tickInterval: 1, 36208 }, 36209 yAxis: { 36210 tickInterval: 50, 36211 labels: { 36212 format: "{value}" 36213 }, 36214 reversedStacks: false 36215 }, 36216 plotOptions: { 36217 column: { 36218 stacking: 'normal' 36219 } 36220 }, 36221 responsive: { 36222 rules: [{ 36223 condition: { 36224 maxWidth: 450 36225 }, 36226 chartOptions: { 36227 chart: { 36228 height: 400 36229 } 36230 } 36231 }, 36232 { 36233 condition: { 36234 minWidth: 451 36235 }, 36236 36237 chartOptions: { 36238 chart: { 36239 height: '65%' 36240 } 36241 } 36242 }] 36243 } 36244 }); 36245 } 36246}; 36247 36248},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],184:[function(require,module,exports){ 36249const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 36250const csvParser = require('../../includes/csvParser'); 36251 36252 36253module.exports = function (Highcharts, map, appPath) { 36254 36255 const elementId = 'top-coal-states'; 36256 36257 // Our own options definition as two different series, will populate the data in the complete callback. 36258 var seriesOptions = [ 36259 { 36260 id: "rank1", 36261 type: "map", 36262 allAreas: false, 36263 keys: ["postal-code"], 36264 joinBy: ['hc-a2', 'code'], 36265 data: [], 36266 borderWidth: .5, 36267 borderColor : "#cccccc", 36268 states: { 36269 hover: { 36270 brightness: 0, 36271 borderWidth: 1, 36272 borderColor: Highcharts.eiaColors.darkGrey 36273 } 36274 }, 36275 color: '#ffffff', 36276 dataLabels: { 36277 enabled: true, 36278 formatter: function () { 36279 if (this.point.nameCode) { 36280 if (this.point.code === "VT" || this.point.code === "NH" || this.point.code === "MA" || this.point.code === "RI" || this.point.code === "CT" || this.point.code === "NJ" || this.point.code === "DE" || this.point.code === "MD" || this.point.code === "DC") { 36281 return this.point.code + " " + this.point.nameCode; 36282 } 36283 else { 36284 return this.point.code + "<br/>" + this.point.nameCode; 36285 } 36286 } 36287 else { 36288 return this.point.properties['hc-a2']; 36289 } 36290 } 36291 }, 36292 tooltip: { 36293 valueSuffix: '' 36294 } 36295 } 36296 ]; 36297 36298 if ($('#' + elementId).length > 0) { 36299 Highcharts.mapChart(elementId, { 36300 chart: { 36301 map: map, 36302 spacingBottom: 25, 36303 events: { 36304 load: creditsSizeAndPosition, 36305 redraw: creditsSizeAndPosition 36306 } 36307 }, 36308 credits: { 36309 enabled: false, 36310 href: null, 36311 style: { 36312 cursor: 'normal' 36313 } 36314 }, 36315 caption: { 36316 verticalAlign: 'bottom', 36317 useHTML: true, 36318 margin: 0, 36319 style: { 36320 color: '#888', 36321 fontSize: '11px' 36322 }, 36323 x: 32, 36324 y: 33 36325 }, 36326 tooltip: { 36327 enabled: true, 36328 useHTML: true, 36329 formatter: function () { 36330 var html = (this.point.name && this.point.nameCode) ? '<b>' + this.point.name + '</b><br/>' + this.point.nameCode : ''; 36331 if (html !== '') 36332 return html 36333 } 36334 }, 36335 data: { 36336 csvURL: appPath + '/coal/charts/' + elementId + '.csv', 36337 startRow: 4, 36338 firstRowAsNames: false, 36339 complete: function (options) { 36340 var point; 36341 var i; 36342 36343 for (i = 0; i < options.series[0].data.length; i++) { 36344 36345 point = options.series[0].data[i]; 36346 var pointValueString = Highcharts.numberFormat(point.value, 0); 36347 36348 if (pointValueString) { 36349 seriesOptions[0].data.push({ 36350 code: point.name, 36351 nameCode: "<span>#" + pointValueString + "</span>", 36352 value: point.value 36353 });
36354 } 36355 else { 36356 seriesOptions[0].data.push({ 36357 code: point.name, 36358 value: null 36359 }); 36360 } 36361 36362 } 36363 36364 // replace series options parsed by Highcharts with our own options definition 36365 options.series = seriesOptions; 36366 36367 }, 36368 beforeParse: function (csv) { 36369 36370 var parsedCSV = csvParser(csv); 36371 this.chart.title.update({ text: parsedCSV[0][0] }); 36372 36373 36374 this.chart.update( 36375 { 36376 caption: { 36377 text: parsedCSV[1][0] + '<br/>' + parsedCSV[2][0] 36378 }, 36379 accessibility: { 36380 description: parsedCSV[3][0] 36381 }, 36382 exporting: { 36383 allowHTML: true, 36384 menuItemDefinitions: 36385 { 36386 label: { 36387 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 36388 } 36389 }, 36390 buttons: { 36391 contextButton: { 36392 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 36393 } 36394 } 36395 } 36396 } 36397 ); 36398 return csv; 36399 } 36400 }, 36401 colorAxis: { 36402 dataClasses: [{
36403 color: '#FFFFFF', 36404 to: 0 36405 },{ 36406 color: Highcharts.eiaColors.blue, 36407 from: 0, 36408 to: 1.0 36409 }, { 36410 color: Highcharts.eiaColors.brown, 36411 from: 1.001, 36412 to: 2.0 36413 }, { 36414 color: Highcharts.eiaColors.green, 36415 from: 2.001, 36416 to: 3.0 36417 }, { 36418 color: Highcharts.eiaColors.yellow, 36419 from: 3.001, 36420 to: 4.0 36421 }, { 36422 color: Highcharts.eiaColors.red, 36423 from: 4.001, 36424 to: 5.0 36425 }, { 36426 color: Highcharts.eiaColors.lightGreen, 36427 from: 5.001, 36428 to: 6.0 36429 }, { 36430 color: Highcharts.eiaColors.darkGreen, 36431 from: 6.001, 36432 to: 7.0 36433 }] 36434 }, 36435 legend: { 36436 enabled: false 36437 }, 36438 plotOptions: { 36439 map: { 36440 dataLabels: { 36441 style: { 36442 fontSize: '6.8px' 36443 } 36444 }, 36445 nullColor: '#FFFFFF' 36446 } 36447 }, 36448 responsive: { 36449 rules: [{ 36450 condition: { 36451 maxWidth: 321 36452 }, 36453 36454 chartOptions: { 36455 chart: { 36456 height: 380 36457 }, 36458 title: { 36459 margin: 20 36460 }, 36461 plotOptions: { 36462 map: { 36463 dataLabels: { 36464 style: { 36465 fontSize: '7px', 36466 lineHeight: 7 36467 } 36468 } 36469 } 36470 } 36471 } 36472 }, 36473 { 36474 condition: { 36475 minWidth: 322, 36476 maxWidth: 400 36477 }, 36478 36479 chartOptions: { 36480 chart: { 36481 height: 370 36482 }, 36483 title: { 36484 margin: 5 36485 }, 36486 plotOptions: { 36487 map: { 36488 dataLabels: { 36489 style: { 36490 fontSize: '8px', 36491 lineHeight: 8 36492 } 36493 } 36494 } 36495 } 36496 } 36497 }, 36498 { 36499 condition: { 36500 minWidth: 401, 36501 maxWidth: 450 36502 }, 36503 36504 chartOptions: { 36505 chart: { 36506 height: 400 36507 }, 36508 title: { 36509 margin: 5 36510 }, 36511 plotOptions: { 36512 map: { 36513 dataLabels: { 36514 style: { 36515 fontSize: '8px', 36516 lineHeight: 8 36517 } 36518 } 36519 } 36520 } 36521 } 36522 }, 36523 { 36524 condition: { 36525 minWidth: 451, 36526 maxWidth: 667 36527 }, 36528 36529 chartOptions: { 36530 chart: { 36531 height: '65%' 36532 }, 36533 title: { 36534 margin: 15 36535 }, 36536 plotOptions: { 36537 map: { 36538 dataLabels: { 36539 style: { 36540 fontSize: '10px', 36541 lineHeight: 10 36542 } 36543 } 36544 } 36545 } 36546 } 36547 }, 36548 { 36549 condition: { 36550 minWidth: 668 36551 }, 36552 36553 chartOptions: { 36554 chart: { 36555 height: '65%' 36556 }, 36557 title: { 36558 margin: 15 36559 }, 36560 plotOptions: { 36561 map: { 36562 dataLabels: { 36563 style: { 36564 fontSize: '16px' 36565 } 36566 } 36567 } 36568 } 36569 } 36570 }] 36571 } 36572 }); 36573 } 36574}; 36575 36576},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],185:[function(require,module,exports){ 36577const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 36578const csvParser = require('../../includes/csvParser'); 36579 36580module.exports = function (Highcharts, appPath) { 36581 const elementId = 'crude-retail-prices'; 36582 var units = ''; 36583 36584 if ($('#' + elementId).length > 0) { 36585 Highcharts.chart(elementId, { 36586 chart: { 36587 type: 'line', 36588 spacingBottom: 25, 36589 events: { 36590 load: creditsSizeAndPosition, 36591 redraw: creditsSizeAndPosition 36592 } 36593 }, 36594 credits: { 36595 enabled: true, 36596 href: null, 36597 style: { 36598 cursor: 'normal' 36599 } 36600 }, 36601 data: { 36602 csvURL: appPath + '/diesel-fuel/charts/' + elementId + '.csv', 36603 startRow: 5, 36604 firstRowAsNames: true, 36605 beforeParse: function (csv) { 36606 var parsedCSV = csvParser(csv); 36607 this.chart.title.update({ text: parsedCSV[0][0] }); 36608 units = parsedCSV[1][0]; 36609 this.chart.yAxis[0].update({ title: { text: units } }); 36610 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 36611 this.chart.update( 36612 { 36613 accessibility: { 36614 description: parsedCSV[4][0], 36615 }, 36616 exporting: { 36617 menuItemDefinitions: 36618 { 36619 label: { 36620 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 36621 } 36622 }, 36623 buttons: { 36624 contextButton: { 36625 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 36626 } 36627 } 36628 } 36629 } 36630 ); 36631 return csv; 36632 } 36633 }, 36634 xAxis: { 36635 type: 'category', 36636 startOnTick: true, 36637 endOnTick: false, 36638 tickInterval: 24, 36639 tickWidth: 1, 36640 labels: { 36641 autoRotation: [-45] 36642 } 36643 }, 36644 yAxis: { 36645 allowDecimals: true, 36646 labels: { 36647 format: "${value:.2f}" 36648 } 36649 }, 36650 tooltip: { 36651 shared: true, 36652 formatter: function () { 36653 var toolTip = '<b>'+this.points[0].key+'</b><br/>'; 36654 toolTip += '<span style="font-size: 16px; color:' + this.points[0].series.color + '">' + '\u25AC\u2009\u2009' + '</span>'; 36655 toolTip += '<b>'+this.points[0].series.name+':</b> $'+this.points[0].y.toFixed(2)+' '+units+'<br/>'; 36656 toolTip += '<span style="font-size: 16px; color:' + this.points[1].series.color + '">' + '\u25AC\u2009\u2009' + '</span>'; 36657 toolTip += '<b>'+this.points[1].series.name+':</b> $'+this.points[1].y.toFixed(2)+' '+units+'<br/>'; 36658 return toolTip; 36659 } 36660 }, 36661 responsive: { 36662 rules: [{ 36663 condition: { 36664 maxWidth: 450 36665 }, 36666 chartOptions: { 36667 chart: { 36668 height: 450 36669 }, 36670 xAxis: { 36671 labels: { 36672 autoRotation: [-45] 36673 } 36674 } 36675 } 36676 }, 36677 { 36678 condition: { 36679 minWidth: 451 36680 }, 36681 36682 chartOptions: { 36683 chart: { 36684 height: '65%' 36685 }, 36686 xAxis: { 36687 labels: { 36688 autoRotation: [0] 36689 } 36690 } 36691 } 36692 }] 36693 } 36694 }); 36695 } 36696}; 36697 36698},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],186:[function(require,module,exports){ 36699const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 36700const csvParser = require('../../includes/csvParser'); 36701 36702module.exports = function (Highcharts, appPath) { 36703 const elementId = 'commercial-sector-electricity-consumption-by-major-end-uses'; 36704 36705 if ($('#' + elementId).length > 0) { 36706 Highcharts.chart(elementId, { 36707 chart: { 36708 type: 'pie', 36709 spacingBottom: 25, 36710 events: { 36711 load: creditsSizeAndPosition, 36712 redraw: creditsSizeAndPosition 36713 } 36714 }, 36715 credits: { 36716 enabled: true, 36717 href: null, 36718 style: { 36719 cursor: 'normal' 36720 } 36721 }, 36722 title: { 36723 text: '', 36724 margin: 5 36725 }, 36726 data: { 36727 csvURL: appPath + '/electricity/charts/' + elementId + '.csv', 36728 startRow: 4, 36729 firstRowAsNames: false, 36730 36731 beforeParse: function (csv) { 36732 var parsedCSV = csvParser(csv); 36733 this.chart.title.update({ text: parsedCSV[0][0] }); 36734 this.chart.credits.update({ text: parsedCSV[1][0] + '<br>' + parsedCSV[2][0] }); 36735 36736 this.chart.update( 36737 { 36738 accessibility: { 36739 description: parsedCSV[3][0], 36740 }, 36741 exporting: { 36742 menuItemDefinitions: 36743 { 36744 label: { 36745 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 36746 } 36747 }, 36748 buttons: { 36749 contextButton: { 36750 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 36751 } 36752 } 36753 } 36754 } 36755 ); 36756 return csv; 36757 } 36758 }, 36759 colors: [Highcharts.eiaColors.yellow, Highcharts.eiaColors.darkBrown, Highcharts.eiaColors.darkBlue, Highcharts.eiaColors.red, Highcharts.eiaColors.brown, Highcharts.eiaColors.lightGreen, Highcharts.eiaColors.blue], 36760 series: [ 36761 {} 36762 ], 36763 subtitle: { 36764 text: '', 36765 useHTML: true, 36766 }, 36767 plotOptions: { 36768 pie: { 36769 startAngle: 0, 36770 dataLabels: { 36771 enabled: true, 36772 format: "<strong>{point.name}</strong><br/> {point.percentage:.1f}%", 36773 distance: 10, 36774 color: Highcharts.eiaColors.darkGrey, 36775 style: { 36776 "fontSize": "12px" 36777 } 36778 } 36779 } 36780 }, 36781 tooltip: { 36782 useHTML: true, 36783 formatter: function () { 36784 return "<span><b>" + this.key + "</b><br/>" + this.percentage.toFixed(1) + " %</span>"; 36785 } 36786 }, 36787 responsive: { 36788 rules: [{ 36789 condition: { 36790 maxWidth: 450 36791 }, 36792 36793 chartOptions: { 36794 chart: { 36795 height: 508 36796 }, 36797 plotOptions: { 36798 pie: { 36799 size: '80%', 36800 dataLabels: { 36801 enabled: false 36802 }, 36803 showInLegend: true 36804 } 36805 }, 36806 legend: { 36807 enabled: true 36808 } 36809 } 36810 }, 36811 { 36812 condition: { 36813 minWidth: 451 36814 }, 36815 36816 chartOptions: { 36817 chart: { 36818 height: '65%' 36819 }, 36820 plotOptions: { 36821 pie: { 36822 size: '65%', 36823 dataLabels: { 36824 enabled: true 36825 }, 36826 showInLegend: false 36827 } 36828 }, 36829 legend: { 36830 enabled: false 36831 } 36832 } 36833 }] 36834 } 36835 }); 36836 } 36837}; 36838 36839},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],187:[function(require,module,exports){ 36840const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 36841const csvParser = require('../../includes/csvParser'); 36842 36843module.exports = function (Highcharts, appPath) { 36844 const elementId = 'electric-storage-bess-capacity'; 36845 let units = ''; 36846 if ($('#' + elementId).length > 0) { 36847 Highcharts.chart(elementId, { 36848 chart: { 36849 type: 'line', 36850 spacingBottom: 25, 36851 events: { 36852 load: creditsSizeAndPosition, 36853 redraw: creditsSizeAndPosition 36854 } 36855 }, 36856 credits: { 36857 enabled: true, 36858 href: null, 36859 style: { 36860 cursor: 'normal' 36861 } 36862 }, 36863 data: { 36864 csvURL: appPath + '/electricity/charts/' + elementId + '.csv', 36865 startRow: 6, 36866 firstRowAsNames: true, 36867 complete: function (options) { 36868 if (options.series.length > 0) { 36869 options.series[0].yAxis = 0; 36870 options.series[1].yAxis = 1; 36871 } 36872 }, 36873 beforeParse: function (csv) { 36874 var parsedCSV = csvParser(csv); 36875 units = parsedCSV[1][0] + ',' + parsedCSV[2][0]; 36876 this.chart.title.update({ text: parsedCSV[0][0] }); 36877 this.chart.yAxis[0].update({ title: { text: units.split(',')[0] } }); 36878 this.chart.yAxis[1].update({ title: { text: units.split(',')[1] } }); 36879 this.chart.credits.update({ text: parsedCSV[3][0] + '<br>' + parsedCSV[4][0] }); 36880 this.chart.update( 36881 { 36882 accessibility: { 36883 description: parsedCSV[5][0], 36884 }, 36885 exporting: { 36886 menuItemDefinitions: 36887 { 36888 label: { 36889 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 36890 } 36891 }, 36892 buttons: { 36893 contextButton: { 36894 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 36895 } 36896 } 36897 } 36898 } 36899 ); 36900 return csv; 36901 } 36902 36903 }, 36904 colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown], 36905 xAxis: { 36906 type: 'datetime', 36907 tickWidth: 1, 36908 labels: { 36909 formatter: function() { 36910 return this.value; 36911 } 36912 } 36913 }, 36914 yAxis: [ 36915 { 36916 maxPadding: 0,
36917 alignTicks: false, 36918 labels: { 36919 format: "{value:.0f}", 36920 style: { "color": Highcharts.eiaColors.blue } 36921 }, 36922 title: { 36923 style: { "color": Highcharts.eiaColors.blue } 36924 } 36925 }, 36926 { 36927 36928 gridLineColor: 'none', 36929 opposite: true, 36930 maxPadding: 0, 36931 alignTicks: false, 36932 labels: { 36933 format: "{value:.0f}", 36934 style: { "color": Highcharts.eiaColors.brown } 36935 }, 36936 title: { 36937 style: { "color": Highcharts.eiaColors.brown } 36938 } 36939 } 36940 ], 36941 tooltip: { 36942 useHTML: true, 36943 shared: true, 36944 formatter: function () { 36945 var html = '<b>' + this.points[0].point.name + '</b><br/>'; 36946 this.points.filter(function (value) { 36947 html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25AC\u2009\u2009' + '</span><b>' + value.series.name.split(' (')[0] + ':</b> ' + Highcharts.numberFormat(value.y, 0) + ' ' + value.series.name.split(' (')[1].slice(0, -1) + '<br/>'; 36948 }); 36949 return html; 36950 } 36951 }, 36952 responsive: { 36953 rules: [{ 36954 condition: { 36955 maxWidth: 450 36956 }, 36957 chartOptions: { 36958 chart: { 36959 height: 500 36960 }, 36961 xAxis: { 36962 labels: { 36963 autoRotation: [-45], 36964 rotation: -45 36965 } 36966 }, 36967 yAxis: [ 36968 { 36969 title: { 36970 style: { 36971 'fontSize': '11px' 36972 }, 36973 align: 'middle', 36974 margin: 8 36975 } 36976 }, 36977 { 36978 title: { 36979 style: { 36980 'fontSize': '11px' 36981 }, 36982 align: 'middle', 36983 margin: 12, 36984 rotation: 270 36985 } 36986 } 36987 ] 36988 } 36989 }, 36990 { 36991 condition: { 36992 minWidth: 451 36993 }, 36994 36995 chartOptions: { 36996 chart: { 36997 height: '65%' 36998 } 36999 } 37000 }] 37001 } 37002 }); 37003 } 37004}; 37005 37006},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],188:[function(require,module,exports){ 37007const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 37008const csvParser = require('../../includes/csvParser'); 37009 37010module.exports = function (Highcharts, appPath) { 37011 const elementId = 'electric-storage-psh-gen'; 37012 var units = ''; 37013 37014 if ($('#' + elementId).length > 0) { 37015 Highcharts.chart(elementId, { 37016 chart: { 37017 type: 'area', 37018 spacingBottom: 30, 37019 events: { 37020 load: creditsSizeAndPosition, 37021 redraw: creditsSizeAndPosition 37022 } 37023 }, 37024 credits: { 37025 enabled: true, 37026 href: null, 37027 style: { 37028 cursor: 'normal' 37029 } 37030 }, 37031 data: { 37032 csvURL: appPath + '/electricity/charts/' + elementId + '.csv', 37033 startRow: 5, 37034 firstRowAsNames: true, 37035 switchRowsAndColumns: true, 37036 37037 beforeParse: function (csv) { 37038 var parsedCSV = csvParser(csv); 37039 this.chart.title.update({ text: parsedCSV[0][0] }); 37040 this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } }); 37041 units = parsedCSV[1][0]; 37042 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 37043 this.chart.update( 37044 { 37045 accessibility: { 37046 description: parsedCSV[4][0], 37047 }, 37048 exporting: { 37049 menuItemDefinitions: 37050 { 37051 label: { 37052 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 37053 } 37054 }, 37055 buttons: { 37056 contextButton: { 37057 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 37058 } 37059 } 37060 } 37061 } 37062 ); 37063 return csv; 37064 } 37065 }, 37066 legend: { 37067 reversed: true 37068 }, 37069 xAxis: { 37070 labels: { 37071 format: "{value}", 37072 type: 'datetime', 37073 } 37074 }, 37075 yAxis: { 37076 labels: { 37077 format: "{value:,.0f}" 37078 }, 37079 reversedStacks: false 37080 }, 37081 plotOptions: { 37082 area: { 37083 stacking: 'normal', 37084 } 37085 }, 37086 tooltip: { 37087 useHTML: true, 37088 shared: true, 37089 formatter: function () { 37090 var html = ''; 37091 this.points.filter(function (value) { 37092 const yValue = value.y.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); // format with comma separator for thousands place 37093 html += '<span style="color:' + value.series.color + '">' + '\u25CF\u2009\u2009' + '</span><b>' + value.series.name + ':</b> ' + yValue + ' ' + units + '<br/>'; 37094 }); 37095 return html; 37096 } 37097 }, 37098 responsive: { 37099 rules: [{ 37100 condition: { 37101 maxWidth: 450 37102 }, 37103 chartOptions: { 37104 chart: { 37105 height: 400 37106 }, 37107 xAxis: { 37108 startOnTick: false 37109 } 37110 } 37111 }, 37112 { 37113 condition: { 37114 minWidth: 451 37115 }, 37116 37117 chartOptions: { 37118 chart: { 37119 height: '65%' 37120 } 37121 } 37122 }] 37123 } 37124 }); 37125 } 37126}; 37127 37128},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],189:[function(require,module,exports){ 37129const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 37130const csvParser = require('../../includes/csvParser'); 37131 37132module.exports = function (Highcharts, appPath) { 37133 const elementId = 'generating-capacity-major-source'; 37134 let units = ''; 37135 if ($('#' + elementId).length > 0) { 37136 Highcharts.chart(elementId, { 37137 chart: { 37138 type: 'column', 37139 spacingBottom: 30, 37140 events: { 37141 load: creditsSizeAndPosition, 37142 redraw: creditsSizeAndPosition 37143 } 37144 }, 37145 credits: { 37146 enabled: true, 37147 href: null, 37148 style: { 37149 cursor: 'normal' 37150 } 37151 }, 37152 data: { 37153 csvURL: appPath + '/electricity/charts/' + elementId + '.csv', 37154 startRow: 5, 37155 firstRowAsNames: true, 37156 37157 beforeParse: function (csv) { 37158 var parsedCSV = csvParser(csv); 37159 units = parsedCSV[1][0]; 37160 this.chart.title.update({ text: parsedCSV[0][0] }); 37161 this.chart.yAxis[0].update({ title: { text: units } }); 37162 this.chart.xAxis[0].update({ categories: parsedCSV[5] }); 37163 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 37164 this.chart.update( 37165 { 37166 accessibility: { 37167 description: parsedCSV[4][0], 37168 }, 37169 exporting: { 37170 menuItemDefinitions: 37171 { 37172 label: { 37173 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 37174 } 37175 }, 37176 buttons: { 37177 contextButton: { 37178 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 37179 } 37180 } 37181 } 37182 } 37183 ); 37184 return csv; 37185 } 37186 }, 37187 colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.darkBrown, Highcharts.eiaColors.green, Highcharts.eiaColors.darkBlue, Highcharts.eiaColors.red, Highcharts.eiaColors.brown], 37188 xAxis: { 37189 labels: { 37190 enabled: true, 37191 useHTML: true 37192 } 37193 }, 37194 plotOptions: { 37195 column: { 37196 grouping: false 37197 }, 37198 colorByPoint: true 37199 }, 37200 yAxis: { 37201 tickInterval: 100, 37202 labels: { 37203 format: '{value}' 37204 } 37205 }, 37206 tooltip: { 37207 useHTML: true, 37208 formatter: function () { 37209 return '<b>' + this.key + '</b><br/>' + this.y.toFixed(2) + ' ' + units; 37210 } 37211 }, 37212 legend: { 37213 enabled: false 37214 }, 37215 responsive: { 37216 rules: [{ 37217 condition: { 37218 maxWidth: 450 37219 }, 37220 chartOptions: { 37221 chart: { 37222 height: 450 37223 }, 37224 xAxis: { 37225 labels: { 37226 rotation: -45 37227 } 37228 } 37229 } 37230 }, 37231 { 37232 condition: { 37233 minWidth: 451 37234 }, 37235 37236 chartOptions: { 37237 chart: { 37238 height: '65%' 37239 }, 37240 xAxis: { 37241 labels: { 37242 rotation: 0 37243 } 37244 } 37245 } 37246 }] 37247 } 37248 }); 37249 } 37250}; 37251 37252},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],190:[function(require,module,exports){ 37253const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 37254const csvParser = require('../../includes/csvParser'); 37255 37256module.exports = function (Highcharts, appPath) { 37257 const elementId = 'generation-capacity-by-type'; 37258 37259 if ($('#' + elementId).length > 0) { 37260 Highcharts.chart(elementId, { 37261 chart: { 37262 type: 'column', 37263 spacingBottom: 30, 37264 events: { 37265 load: creditsSizeAndPosition, 37266 redraw: creditsSizeAndPosition 37267 } 37268 }, 37269 credits: { 37270 enabled: true, 37271 href: null, 37272 style: { 37273 cursor: 'normal' 37274 } 37275 }, 37276 data: { 37277 csvURL: appPath + '/electricity/charts/generation-capacity-by-type.csv', 37278 startRow: 5, 37279 firstRowAsNames: true, 37280 37281 beforeParse: function (csv) { 37282 var parsedCSV = csvParser(csv); 37283 this.chart.title.update({ text: parsedCSV[0][0] }); 37284 this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } }); 37285 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 37286 this.chart.update( 37287 { 37288 accessibility: { 37289 description: parsedCSV[4][0], 37290 }, 37291 exporting: { 37292 menuItemDefinitions: 37293 { 37294 label: { 37295 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 37296 } 37297 }, 37298 buttons: { 37299 contextButton: { 37300 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 37301 } 37302 } 37303 } 37304 } 37305 ); 37306 return csv; 37307 } 37308 }, 37309 colors: [Highcharts.eiaColors.lightBlue,Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.orange, Highcharts.eiaColors.green, Highcharts.eiaColors.yellow], 37310 legend: { 37311 reversed: true 37312 }, 37313 xAxis: { 37314 labels: { 37315 format: "{value}" 37316 }, 37317 type: 'category' 37318 }, 37319 yAxis: { 37320 tickInterval: 50, 37321 labels: { 37322 format: "{value}" 37323 }, 37324 reversedStacks: false 37325 }, 37326 plotOptions: { 37327 column: { 37328 stacking: 'normal', 37329 dataLabels: { 37330 enabled: false 37331 } 37332 } 37333 }, 37334 tooltip: { 37335 shared: true, 37336 useHTML: true, 37337 formatter: function () { 37338 let html = "<b>" + this.points[0].key + "</b><br/>"; 37339 this.points.filter(function (value) { 37340 html += '<span style="color:' + value.series.color + '">' + '\u25CF\u2009\u2009' + '</span><b>' + value.series.name + ': </b><span>' + value.y.toFixed(1) + ' million kilowatts</span><br/>'; 37341 }); 37342 return html; 37343 } 37344 }, 37345 responsive: { 37346 rules: [{ 37347 condition: { 37348 maxWidth: 450 37349 }, 37350 chartOptions: { 37351 chart: { 37352 height: 450 37353 } 37354 } 37355 }, 37356 { 37357 condition: { 37358 minWidth: 451 37359 }, 37360 37361 chartOptions: { 37362 chart: { 37363 height: '65%' 37364 } 37365 } 37366 }] 37367 } 37368 }); 37369 } 37370}; 37371 37372},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],191:[function(require,module,exports){ 37373const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 37374const csvParser = require('../../includes/csvParser'); 37375 37376module.exports = function (Highcharts, appPath) { 37377 const elementId = 'generation-capacity-major'; 37378 37379 if ($('#' + elementId).length > 0) { 37380 Highcharts.chart(elementId, { 37381 chart: { 37382 type: 'column', 37383 spacingBottom: 30, 37384 events: { 37385 load: creditsSizeAndPosition, 37386 redraw: creditsSizeAndPosition 37387 } 37388 }, 37389 credits: { 37390 enabled: true, 37391 href: null, 37392 style: { 37393 cursor: 'normal' 37394 } 37395 }, 37396 data: { 37397 csvURL: appPath + '/electricity/charts/generation-capacity-major.csv', 37398 startRow: 5, 37399
37399 firstRowAsNames: true, 37400 37401 beforeParse: function (csv) { 37402 var parsedCSV = csvParser(csv); 37403 this.chart.title.update({ text: parsedCSV[0][0] }); 37404 this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } }); 37405 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 37406 this.chart.update( 37407 { 37408 accessibility: { 37409 description: parsedCSV[4][0], 37410 }, 37411 exporting: { 37412 menuItemDefinitions: 37413 { 37414 label: { 37415 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 37416 } 37417 }, 37418 buttons: { 37419 contextButton: { 37420 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 37421 } 37422 } 37423 } 37424 } 37425 ); 37426 return csv; 37427 } 37428 }, 37429 colors: [Highcharts.eiaColors.darkBrown, Highcharts.eiaColors.blue, Highcharts.eiaColors.green, Highcharts.eiaColors.red, Highcharts.eiaColors.brown], 37430 legend: { 37431 reversed: true 37432 }, 37433 xAxis: { 37434 labels: { 37435 format: "{value}" 37436 }, 37437 type: 'category' 37438 }, 37439 yAxis: { 37440 tickInterval: 200, 37441 labels: { 37442 format: "{value:,.0f}" 37443 }, 37444 reversedStacks: false 37445 }, 37446 plotOptions: { 37447 column: { 37448 stacking: 'normal', 37449 dataLabels: { 37450 enabled: false 37451 } 37452 } 37453 }, 37454 tooltip: { 37455 shared: true, 37456 useHTML: true, 37457 formatter: function () { 37458 let html = "<b>" + this.points[0].key + "</b><br/>"; 37459 this.points.filter(function (value) { 37460 html += '<span font-size: 16px; style="color:' + value.series.color + '">' + '\u25CF\u2009\u2009' + '</span><b>' + value.series.name + ': </b><span>' + value.y.toString() + ' million kilowatts</span><br/>'; 37461 }); 37462 return html; 37463 } 37464 }, 37465 responsive: { 37466 rules: [{ 37467 condition: { 37468 maxWidth: 450 37469 }, 37470 chartOptions: { 37471 chart: { 37472 height: 450 37473 } 37474 } 37475 }, 37476 { 37477 condition: { 37478 minWidth: 451 37479 }, 37480 37481 chartOptions: { 37482 chart: { 37483 height: '65%' 37484 } 37485 } 37486 }] 37487 } 37488 }); 37489 } 37490} 37491 37492},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],192:[function(require,module,exports){ 37493const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 37494const csvParser = require('../../includes/csvParser'); 37495 37496module.exports = function (Highcharts, appPath) { 37497 const elementId = 'generation-major-source'; 37498 var units = ''; 37499 37500 if ($('#' + elementId).length > 0) { 37501 Highcharts.chart(elementId, { 37502 chart: { 37503 type: 'area', 37504 spacingBottom: 30, 37505 events: { 37506 load: creditsSizeAndPosition, 37507 redraw: creditsSizeAndPosition 37508 } 37509 }, 37510 credits: { 37511 enabled: true, 37512 href: null, 37513 style: { 37514 cursor: 'normal' 37515 } 37516 }, 37517 data: { 37518 csvURL: appPath + '/electricity/charts/' + elementId + '.csv', 37519 startRow: 5, 37520 firstRowAsNames: true, 37521 37522 beforeParse: function (csv) { 37523 var parsedCSV = csvParser(csv); 37524 this.chart.title.update({ text: parsedCSV[0][0] }); 37525 this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } }); 37526 units = parsedCSV[1][0]; 37527 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 37528 this.chart.update( 37529 { 37530 accessibility: { 37531 description: parsedCSV[4][0], 37532 }, 37533 exporting: { 37534 menuItemDefinitions: 37535 { 37536 label: { 37537 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 37538 } 37539 }, 37540 buttons: { 37541 contextButton: { 37542 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 37543 } 37544 } 37545 } 37546 } 37547 ); 37548 return csv; 37549 } 37550 }, 37551 colors: [Highcharts.eiaColors.darkBrown, Highcharts.eiaColors.blue, Highcharts.eiaColors.red, Highcharts.eiaColors.green, Highcharts.eiaColors.brown], 37552 legend: { 37553 reversed: true 37554 }, 37555 xAxis: { 37556 labels: { 37557 format: "{value}", 37558 type: 'category', 37559 }, 37560 startOnTick: true, 37561 minPadding: 0, 37562 maxPadding: 0 37563 }, 37564 yAxis: { 37565 tickInterval: 500, 37566 labels: { 37567 format: "{value:,.0f}" 37568 }, 37569 reversedStacks: false 37570 }, 37571 plotOptions: { 37572 area: { 37573 stacking: 'normal', 37574 } 37575 }, 37576 tooltip: { 37577 useHTML: true, 37578 shared: true, 37579 formatter: function () { 37580 var html = '<b>' + this.x + '</b><br/>'; 37581 this.points.filter(function (value) { 37582 const yValue = value.y.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); // format with comma separator for thousands place 37583 html += '<span style="color:' + value.series.color + '">' + '\u25CF\u2009\u2009' + '</span><b>' + value.series.name + ':</b> ' + yValue + ' ' + units + '<br/>'; 37584 }); 37585 return html; 37586 } 37587 }, 37588 responsive: { 37589 rules: [{ 37590 condition: { 37591 maxWidth: 450 37592 }, 37593 chartOptions: { 37594 chart: { 37595 height: 450 37596 }, 37597 xAxis: { 37598 startOnTick: false 37599 } 37600 } 37601 }, 37602 { 37603 condition: { 37604 minWidth: 451 37605 }, 37606 37607 chartOptions: { 37608 chart: { 37609 height: '65%' 37610 } 37611 } 37612 }] 37613 } 37614 }); 37615 } 37616}; 37617 37618},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],193:[function(require,module,exports){ 37619const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 37620const csvParser = require('../../includes/csvParser'); 37621 37622module.exports = function (Highcharts, appPath) { 37623 const elementId = 'generation-renewable-sources'; 37624 var units = ''; 37625 37626 if ($('#' + elementId).length > 0) { 37627 Highcharts.chart(elementId, { 37628 chart: { 37629 type: 'area', 37630 spacingBottom: 30, 37631 events: { 37632 load: creditsSizeAndPosition, 37633 redraw: creditsSizeAndPosition 37634 } 37635 }, 37636 credits: { 37637 enabled: true, 37638 href: null, 37639 style: { 37640 cursor: 'normal' 37641 } 37642 }, 37643 data: { 37644 csvURL: appPath + '/electricity/charts/' + elementId + '.csv', 37645 startRow: 5, 37646 firstRowAsNames: true, 37647 37648 beforeParse: function (csv) { 37649 var parsedCSV = csvParser(csv); 37650 this.chart.title.update({ text: parsedCSV[0][0] }); 37651 this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } }); 37652 units = parsedCSV[1][0]; 37653 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 37654 this.chart.update( 37655 { 37656 accessibility: { 37657 description: parsedCSV[4][0], 37658 }, 37659 exporting: { 37660 menuItemDefinitions: 37661 { 37662 label: { 37663 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 37664 } 37665 }, 37666 buttons: { 37667 contextButton: { 37668 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 37669 } 37670 } 37671 } 37672 } 37673 ); 37674 return csv; 37675 } 37676 }, 37677 colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.orange, Highcharts.eiaColors.green, Highcharts.eiaColors.yellow], 37678 legend: { 37679 reversed: true 37680 }, 37681 xAxis: { 37682 labels: { 37683 format: "{value}", 37684 type: 'category', 37685 }, 37686 startOnTick: true, 37687 minPadding: 0, 37688 maxPadding: 0 37689 }, 37690 yAxis: { 37691 tickInterval: 100, 37692 labels: { 37693 format: "{value}" 37694 }, 37695 reversedStacks: false 37696 }, 37697 plotOptions: { 37698 area: { 37699 stacking: 'normal', 37700 } 37701 }, 37702 tooltip: { 37703 useHTML: true, 37704 shared: true, 37705 formatter: function () { 37706 var html = '<b>' + this.x + '</b><br/>'; 37707 this.points.filter(function (value) { 37708 html += '<span style="color:' + value.series.color + '">' + '\u25CF\u2009\u2009' + '</span><b>' + value.series.name + ':</b> ' + value.y.toFixed(2) + ' ' + units + '<br/>'; 37709 }); 37710 return html; 37711 } 37712 }, 37713 responsive: { 37714 rules: [{ 37715 condition: { 37716 maxWidth: 450 37717 }, 37718 chartOptions: { 37719 chart: { 37720 height: 435 37721 }, 37722 xAxis: { 37723 startOnTick: false 37724 }, 37725 yAxis: { 37726 tickInterval: 100 37727 } 37728 } 37729 }, 37730 { 37731 condition: { 37732 minWidth: 451 37733 }, 37734 37735 chartOptions: { 37736 chart: { 37737 height: '65%' 37738 }, 37739 yAxis: { 37740 tickInterval: 50 37741 } 37742 } 37743 }] 37744 } 37745 }); 37746 } 37747}; 37748 37749},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],194:[function(require,module,exports){ 37750const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 37751const csvParser = require('../../includes/csvParser'); 37752 37753module.exports = function (Highcharts, appPath) { 37754 const elementId = 'major-components-average-price-of-electricity'; 37755 37756 if ($('#' + elementId).length > 0) { 37757 Highcharts.chart(elementId, { 37758 chart: { 37759 type: 'pie', 37760 spacingBottom: 25, 37761 events: { 37762 load: creditsSizeAndPosition, 37763 redraw: creditsSizeAndPosition 37764 } 37765 }, 37766 credits: { 37767 enabled: true, 37768 href: null, 37769 style: { 37770 cursor: 'normal' 37771 } 37772 }, 37773 title: { 37774 text: '', 37775 margin: 5 37776 }, 37777 data: { 37778 csvURL: appPath + '/electricity/charts/' + elementId + '.csv', 37779 startRow: 3, 37780 firstRowAsNames: false, 37781 37782 beforeParse: function (csv) { 37783 var parsedCSV = csvParser(csv); 37784 this.chart.title.update({ text: parsedCSV[0][0] }); 37785 this.chart.credits.update({ text: parsedCSV[1][0] }); 37786 this.chart.update( 37787 { 37788 accessibility: { 37789 description: parsedCSV[2][0], 37790 }, 37791 exporting: { 37792 menuItemDefinitions: 37793 { 37794 label: { 37795 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 37796 } 37797 }, 37798 buttons: { 37799 contextButton: { 37800 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 37801 } 37802 } 37803 } 37804 } 37805 ); 37806 return csv; 37807 } 37808 }, 37809 colors: [Highcharts.eiaColors.green, Highcharts.eiaColors.brown, Highcharts.eiaColors.blue], 37810 subtitle: { 37811 text: '', 37812 useHTML: true, 37813 }, 37814 plotOptions: { 37815 pie: { 37816 dataLabels: { 37817 enabled: true, 37818 format: "<strong>{point.name}</strong><br/> {point.percentage:.1f}%", 37819 distance: 10, 37820 color: Highcharts.eiaColors.darkGrey, 37821 style: { 37822 "fontSize": "12px" 37823 } 37824 } 37825 } 37826 }, 37827 tooltip: { 37828 useHTML: true, 37829 formatter: function () { 37830 return "<span><b>" + this.key + "</b><br/>" + this.percentage.toFixed(1) + " %</span>"; 37831 } 37832 }, 37833 responsive: { 37834 rules: [{ 37835 condition: { 37836 maxWidth: 450 37837 }, 37838 37839 chartOptions: { 37840 chart: { 37841 height: 410 37842 }, 37843 plotOptions: { 37844 pie: { 37845 size: null, 37846 dataLabels: { 37847 enabled: false 37848 }, 37849 showInLegend: true 37850 } 37851 }, 37852 legend: { 37853 enabled: true 37854 } 37855 } 37856 }, 37857 { 37858 condition: { 37859 minWidth: 451 37860 }, 37861 37862 chartOptions: { 37863 chart: { 37864 height: '65%' 37865 }, 37866 plotOptions: { 37867 pie: { 37868 size: '65%', 37869 dataLabels: { 37870 enabled: true 37871 }, 37872 showInLegend: false 37873 } 37874 }, 37875 legend: { 37876 enabled: false 37877 } 37878 } 37879 }] 37880 } 37881 }); 37882 } 37883}; 37884 37885},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],195:[function(require,module,exports){ 37886const creditsSizeAndPosition = require('../../includes/creditsS
37886izeAndPosition'); 37887const csvParser = require('../../includes/csvParser'); 37888 37889module.exports = function (Highcharts, appPath) { 37890 const elementId = 'manufacturing-electricity-consumption-by-major-end-uses'; 37891 37892 if ($('#' + elementId).length > 0) { 37893 Highcharts.chart(elementId, { 37894 chart: { 37895 type: 'pie', 37896 spacingbottom: 25, 37897 events: { 37898 load: creditsSizeAndPosition, 37899 redraw: creditsSizeAndPosition 37900 } 37901 }, 37902 credits: { 37903 enabled: true, 37904 href: null, 37905 style: { 37906 cursor: 'normal' 37907 } 37908 }, 37909 title: { 37910 text: '', 37911 margin: 5 37912 }, 37913 data: { 37914 csvURL: appPath + '/electricity/charts/' + elementId + '.csv', 37915 startRow: 3, 37916 firstRowAsNames: false, 37917 37918 beforeParse: function (csv) { 37919 var parsedCSV = csvParser(csv); 37920 this.chart.title.update({ text: parsedCSV[0][0] }); 37921 this.chart.credits.update({ text: parsedCSV[1][0] }); 37922 37923 this.chart.update( 37924 { 37925 accessibility: { 37926 description: parsedCSV[2][0], 37927 }, 37928 exporting: { 37929 menuItemDefinitions: 37930 { 37931 label: { 37932 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 37933 } 37934 }, 37935 buttons: { 37936 contextButton: { 37937 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 37938 } 37939 } 37940 } 37941 } 37942 ); 37943 return csv; 37944 } 37945 }, 37946 colors: [Highcharts.eiaColors.red, Highcharts.eiaColors.brown, Highcharts.eiaColors.darkBrown, Highcharts.eiaColors.yellow, Highcharts.eiaColors.blue, Highcharts.eiaColors.green, Highcharts.eiaColors.darkBlue], 37947 subtitle: { 37948 text: '', 37949 useHTML: true, 37950 }, 37951 plotOptions: { 37952 pie: { 37953 dataLabels: { 37954 enabled: true, 37955 format: "<strong>{point.name}</strong><br/> {point.percentage:.1f}%", 37956 distance: 10, 37957 color: Highcharts.eiaColors.darkGrey, 37958 style: { 37959 "fontSize": "12px" 37960 } 37961 } 37962 } 37963 }, 37964 tooltip: { 37965 useHTML: true, 37966 formatter: function () { 37967 return "<span><b>" + this.key + "</b><br/>" + this.percentage.toFixed(1) + " %</span>"; 37968 } 37969 }, 37970 series: [ 37971 { 37972 37973 } 37974 ], 37975 responsive: { 37976 rules: [{ 37977 condition: { 37978 maxWidth: 450 37979 }, 37980 37981 chartOptions: { 37982 chart: { 37983 height: 425 37984 }, 37985 plotOptions: { 37986 pie: { 37987 size: '80%', 37988 dataLabels: { 37989 enabled: false 37990 }, 37991 showInLegend: true 37992 } 37993 }, 37994 legend: { 37995 enabled: true 37996 } 37997 } 37998 }, 37999 { 38000 condition: { 38001 minWidth: 451 38002 }, 38003 38004 chartOptions: { 38005 chart: { 38006 height: '65%' 38007 }, 38008 plotOptions: { 38009 pie: { 38010 size: '65%', 38011 dataLabels: { 38012 enabled: true 38013 }, 38014 showInLegend: false 38015 } 38016 }, 38017 legend: { 38018 enabled: false 38019 } 38020 } 38021 }] 38022 } 38023 }); 38024 } 38025}; 38026 38027},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],196:[function(require,module,exports){ 38028const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 38029const csvParser = require('../../includes/csvParser'); 38030 38031module.exports = function (Highcharts, appPath) { 38032 const elementId = 'residential-sector-electricity-consumption-by-major-end-uses'; 38033 38034 if ($('#' + elementId).length > 0) { 38035 Highcharts.chart(elementId, { 38036 chart: { 38037 type: 'pie', 38038 events: { 38039 load: creditsSizeAndPosition, 38040 redraw: creditsSizeAndPosition 38041 } 38042 }, 38043 credits: { 38044 enabled: true, 38045 href: null, 38046 style: { 38047 cursor: 'normal' 38048 } 38049 }, 38050 title: { 38051 text: '', 38052 margin: 5 38053 }, 38054 data: { 38055 csvURL: appPath + '/electricity/charts/' + elementId + '.csv', 38056 startRow: 4, 38057 firstRowAsNames: false, 38058 38059 beforeParse: function (csv) { 38060 var parsedCSV = csvParser(csv); 38061 this.chart.title.update({ text: parsedCSV[0][0] }); 38062 this.chart.credits.update({ text: parsedCSV[1][0] + '<br>' + parsedCSV[2][0] }); 38063 38064 this.chart.update( 38065 { 38066 accessibility: { 38067 description: parsedCSV[3][0], 38068 }, 38069 exporting: { 38070 menuItemDefinitions: 38071 { 38072 label: { 38073 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 38074 } 38075 }, 38076 buttons: { 38077 contextButton: { 38078 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 38079 } 38080 } 38081 } 38082 } 38083 ); 38084 return csv; 38085 } 38086 }, 38087 colors: [Highcharts.eiaColors.red, Highcharts.eiaColors.darkBlue, Highcharts.eiaColors.yellow, Highcharts.eiaColors.lightGreen, Highcharts.eiaColors.darkGreen, Highcharts.eiaColors.brown, Highcharts.eiaColors.blue, Highcharts.eiaColors.green], 38088 subtitle: { 38089 text: '', 38090 useHTML: true, 38091 }, 38092 plotOptions: { 38093 pie: { 38094 dataLabels: { 38095 enabled: true, 38096 format: "<strong>{point.name}</strong><br/> {point.percentage:.1f}%", 38097 distance: 10, 38098 color: Highcharts.eiaColors.darkGrey, 38099 style: { 38100 "fontSize": "12px" 38101 } 38102 } 38103 } 38104 }, 38105 tooltip: { 38106 useHTML: true, 38107 formatter: function () { 38108 return "<span><b>" + this.key + "</b><br/>" + this.percentage.toFixed(1) + " %</span>"; 38109 } 38110 }, 38111 series: [ 38112 {} 38113 ], 38114 responsive: { 38115 rules: [{ 38116 condition: { 38117 maxWidth: 450 38118 }, 38119 38120 chartOptions: { 38121 chart: { 38122 height: 500 38123 }, 38124 plotOptions: { 38125 pie: { 38126 size: '80%', 38127 dataLabels: { 38128 enabled: false 38129 }, 38130 showInLegend: true 38131 } 38132 }, 38133 legend: { 38134 enabled: true 38135 } 38136 } 38137 }, 38138 { 38139 condition: { 38140 minWidth: 451 38141 }, 38142 38143 chartOptions: { 38144 chart: { 38145 height: '65%' 38146 }, 38147 plotOptions: { 38148 pie: { 38149 size: '65%', 38150 dataLabels: { 38151 enabled: true 38152 }, 38153 showInLegend: false 38154 } 38155 }, 38156 legend: { 38157 enabled: false 38158 } 38159 } 38160 }] 38161 } 38162 }); 38163 } 38164}; 38165 38166},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],197:[function(require,module,exports){ 38167const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 38168const csvParser = require('../../includes/csvParser'); 38169 38170module.exports = function (Highcharts, appPath) { 38171 const elementId = 'retail-major-sectors'; 38172 var units = ''; 38173 38174 if ($('#' + elementId).length > 0) { 38175 Highcharts.chart(elementId, { 38176 chart: { 38177 type: 'area', 38178 spacingBottom: 30, 38179 events: { 38180 load: creditsSizeAndPosition, 38181 redraw: creditsSizeAndPosition 38182 } 38183 }, 38184 credits: { 38185 enabled: true, 38186 href: null, 38187 style: { 38188 cursor: 'normal' 38189 } 38190 }, 38191 data: { 38192 csvURL: appPath + '/electricity/charts/' + elementId + '.csv', 38193 startRow: 5, 38194 firstRowAsNames: true, 38195 38196 beforeParse: function (csv) { 38197 var parsedCSV = csvParser(csv); 38198 this.chart.title.update({ text: parsedCSV[0][0] }); 38199 this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } }); 38200 units = parsedCSV[1][0]; 38201 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 38202 this.chart.update( 38203 { 38204 accessibility: { 38205 description: parsedCSV[4][0], 38206 }, 38207 exporting: { 38208 menuItemDefinitions: 38209 { 38210 label: { 38211 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 38212 } 38213 }, 38214 buttons: { 38215 contextButton: { 38216 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 38217 } 38218 } 38219 } 38220 } 38221 ); 38222 return csv; 38223 } 38224 }, 38225 colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.green, Highcharts.eiaColors.yellow, Highcharts.eiaColors.red], 38226 xAxis: { 38227 labels: { 38228 format: "{value}", 38229 type: 'category', 38230 }, 38231 startOnTick: true, 38232 minPadding: 0, 38233 maxPadding: 0 38234 }, 38235 yAxis: { 38236 tickInterval: 0.5, 38237 maxPadding: 0, 38238 labels: { 38239 format: "{value:.1f}" 38240 }, 38241 reversedStacks: false 38242 }, 38243 legend: { 38244 reversed: true 38245 }, 38246 plotOptions: { 38247 area: { 38248 stacking: 'normal' 38249 } 38250 }, 38251 tooltip: { 38252 useHTML: true, 38253 shared: true, 38254 formatter: function () { 38255 var html = '<b>' + this.x + '</b><br/>'; 38256 this.points.filter(function (value) { 38257 html += '<span style="color:' + value.series.color + '">' + '\u25CF\u2009\u2009' + '</span><b>' + value.series.name + ':</b> ' + value.y.toFixed(1) + ' ' + units + '<br/>'; 38258 }); 38259 return html; 38260 } 38261 }, 38262 responsive: { 38263 rules: [{ 38264 condition: { 38265 maxWidth: 450 38266 }, 38267 chartOptions: { 38268 chart: { 38269 height: 500 38270 } 38271 } 38272 }, 38273 { 38274 condition: { 38275 minWidth: 451 38276 }, 38277 38278 chartOptions: { 38279 chart: { 38280 height: '65%' 38281 } 38282 } 38283 }] 38284 } 38285 }); 38286 } 38287}; 38288 38289},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],198:[function(require,module,exports){ 38290const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 38291const csvParser = require('../../includes/csvParser'); 38292 38293module.exports = function (Highcharts, appPath) { 38294 const elementId = 'retail-sales-major'; 38295 let units = ''; 38296 if ($('#' + elementId).length > 0) { 38297 Highcharts.chart(elementId, { 38298 chart: { 38299 type: 'column', 38300 spacingBottom: 30, 38301 events: { 38302 load: creditsSizeAndPosition, 38303 redraw: creditsSizeAndPosition 38304 } 38305 }, 38306 credits: { 38307 enabled: true, 38308 href: null, 38309 style: { 38310 cursor: 'normal' 38311 } 38312 }, 38313 data: { 38314 csvURL: appPath + '/electricity/charts/' + elementId + '.csv', 38315 startRow: 5, 38316 firstRowAsNames: true, 38317 38318 beforeParse: function (csv) { 38319 var parsedCSV = csvParser(csv); 38320 units = parsedCSV[1][0]; 38321 this.chart.title.update({ text: parsedCSV[0][0] }); 38322 this.chart.yAxis[0].update({ title: { text: units } }); 38323 this.chart.xAxis[0].update({ categories: parsedCSV[5] }); 38324 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 38325 this.chart.update( 38326 { 38327 accessibility: { 38328 description: parsedCSV[4][0], 38329 }, 38330 exporting: { 38331 menuItemDefinitions: 38332 { 38333 label: { 38334 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 38335 } 38336 }, 38337 buttons: { 38338 contextButton: { 38339 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 38340 } 38341 } 38342 } 38343 } 38344 ); 38345 return csv; 38346 } 38347 }, 38348 xAxis: { 38349 labels: { 38350 enabled: true 38351 } 38352 }, 38353 plotOptions: { 38354 column: { 38355 grouping: false 38356 }, 38357 colorByPoint: true 38358 }, 38359 yAxis: { 38360 tickInterval: 300, 38361 labels: { 38362 format: '{value:,.0f}' 38363 } 38364 }, 38365 tooltip: { 38366 useHTML: true, 38367 formatter: function () { 38368 const value = this.y.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); // format with comma separator for thousands place 38369 return '<b>' + this.key + '</b><br/>' + value + ' ' + units; 38370 } 38371 }, 38372 legend: { 38373 enabled: false 38374 }, 38375 responsive: { 38376 rules: [{ 38377 condition: { 38378 maxWidth: 450 38379 }, 38380 chartOptions: { 38381 chart: { 38382 height: 365 38383 } 38384 } 38385 }, 38386 { 38387 cond
38387ition: { 38388 maxWidth: 667 38389 }, 38390 38391 chartOptions: { 38392 chart: { 38393 height: 325 38394 } 38395 } 38396 }, 38397 { 38398 condition: { 38399 minWidth: 668 38400 }, 38401 38402 chartOptions: { 38403 chart: { 38404 height: '65%' 38405 } 38406 } 38407 }] 38408 } 38409 }); 38410 } 38411}; 38412 38413},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],199:[function(require,module,exports){ 38414const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 38415const csvParser = require('../../includes/csvParser'); 38416 38417module.exports = function (Highcharts, appPath) { 38418 const elementId = 'carbon-dioxide-emissions-by-major-fuel-type'; 38419 var firstSeries = []; 38420 var secondSeries = []; 38421 38422 (function (Highcharts) { 38423 Highcharts.seriesTypes.pie.prototype.setTitle = function (titleOption) { 38424 var chart = this.chart, 38425 center = this.center || (this.yAxis && this.yAxis.center), 38426 labelBox, 38427 box, 38428 format; 38429 38430 if (center && titleOption) { 38431 box = { 38432 x: chart.plotLeft + center[0] - 0.5 * center[2], 38433 y: chart.plotTop + center[1] - 0.5 * center[2], 38434 width: center[2], 38435 height: center[2] 38436 }; 38437 38438 format = titleOption.text || titleOption.format; 38439 format = Highcharts.format(format, this); 38440 38441 if (this.title) { 38442 this.title.attr({ 38443 text: format 38444 }); 38445 38446 } else { 38447 this.title = this.chart.renderer.label(format) 38448 .css(titleOption.style) 38449 .add() 38450 } 38451 labelBox = this.title.getBBox(); 38452 titleOption.width = labelBox.width; 38453 titleOption.height = labelBox.height; 38454 this.title.align(titleOption, null, box); 38455 } 38456 }; 38457 38458 Highcharts.wrap(Highcharts.seriesTypes.pie.prototype, 'render', function (proceed) { 38459 proceed.call(this); 38460 this.setTitle(this.options.title); 38461 }); 38462 38463 }(Highcharts)); 38464 38465 if ($('#' + elementId).length > 0) { 38466 38467 Highcharts.chart(elementId, { 38468 chart: { 38469 events: { 38470 load: creditsSizeAndPosition, 38471 redraw: creditsSizeAndPosition 38472 }, 38473 spacingBottom: 20 38474 }, 38475 title: { 38476 text: '' 38477 }, 38478 credits: { 38479 enabled: true, 38480 href: null, 38481 style: { 38482 cursor: 'normal' 38483 } 38484 }, 38485 data: { 38486 csvURL: appPath + '/energy-and-the-environment/charts/' + elementId + '.csv', 38487 startRow: 5, 38488 firstRowAsNames: true, 38489 complete: function (options) { 38490 options.series[0].data = firstSeries; 38491 var newSeries = JSON.stringify(options.series[0]); 38492 newSeries = JSON.parse(newSeries); 38493 newSeries.data = secondSeries; 38494 options.series.push(newSeries); 38495 var point = ''; 38496 var i; 38497 38498 for (i = 0; i < options.series[0].data.length; i++) { 38499 point = { name: options.series[0].data[i][0], y: options.series[0].data[i][1] } 38500 options.series[0].data[i] = point; 38501 switch (i) { 38502 case 0: 38503 point.color = Highcharts.eiaColors.green; 38504 break; 38505 case 1: 38506 point.color = Highcharts.eiaColors.yellow; 38507 break; 38508 case 2: 38509 point.color = Highcharts.eiaColors.blue; 38510 break; 38511 case 3: 38512 point.color = Highcharts.eiaColors.brown; 38513 break; 38514 } 38515 } 38516 38517 for (i = 0; i < options.series[1].data.length; i++) { 38518 point = { name: options.series[1].data[i][0], y: options.series[1].data[i][1] } 38519 options.series[1].data[i] = point; 38520 switch (i) { 38521 case 0: 38522 point.color = Highcharts.eiaColors.brown; 38523 break; 38524 case 1: 38525 point.color = Highcharts.eiaColors.green; 38526 break; 38527 case 2: 38528 point.color = Highcharts.eiaColors.blue; 38529 break; 38530 } 38531 } 38532 38533 }, 38534 beforeParse: function (csv) { 38535 var parsedCSV = csvParser(csv); 38536 //this.chart.title.update({ text : parsedCSV[0][0]+';'+parsedCSV[1][0] }); 38537 this.chart.credits.update({ text: parsedCSV[4][0] + '<br>' + parsedCSV[5][0] + '<br>' + parsedCSV[6][0] }); 38538 38539 this.chart.series[0].update( 38540 { 38541 name: parsedCSV[0][0], 38542 custom: parsedCSV[2][0] 38543 } 38544 ); 38545 this.chart.series[1].update( 38546 { 38547 name: parsedCSV[1][0], 38548 custom: parsedCSV[3][0] 38549 } 38550 ); 38551 38552 var i = 0; 38553 for (i = 8; i < parsedCSV.length; i++) { 38554 if (parsedCSV[i][0] === '') { 38555 break; 38556 } 38557 firstSeries.push([parsedCSV[i][0], parseFloat(parsedCSV[i][1])]); 38558 } 38559 for (i = 13; i < parsedCSV.length; i++) { 38560 if (parsedCSV[i][0] === '') { 38561 break; 38562 } 38563 secondSeries.push([parsedCSV[i][0], parseFloat(parsedCSV[i][1])]); 38564 } 38565 38566 this.chart.update( 38567 { 38568 accessibility: { 38569 description: parsedCSV[7][0], 38570 }, 38571 exporting: { 38572 menuItemDefinitions: 38573 { 38574 label: { 38575 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 38576 } 38577 }, 38578 buttons: { 38579 contextButton: { 38580 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 38581 } 38582 } 38583 } 38584 } 38585 ); 38586 return csv; 38587 } 38588 }, 38589 subtitle: { 38590 text: '', 38591 useHTML: true, 38592 }, 38593 responsive: { 38594 rules: [ 38595 { 38596 condition: { 38597 maxWidth: 450 38598 }, 38599 chartOptions: { 38600 chart:{ 38601 height:575 38602 }, 38603 series:[ 38604 { 38605 size: '40%', 38606 dataLabels:{ 38607 enabled:false 38608 }, 38609 showInLegend:true, 38610 title: { 38611 align: 'left', 38612 style: { 38613 width: "240px" 38614 }, 38615 y: -70, 38616 x: -70 38617 }, 38618 center: ['50%', '29%'] 38619 }, 38620 { 38621 size: '40%', 38622 dataLabels:{ 38623 enabled:false 38624 }, 38625 title: { 38626 align: 'left', 38627 style: { 38628 width: "270px" 38629 }, 38630 y: -70, 38631 x: -70 38632 }, 38633 center: ['50%', '87%'] 38634 } 38635 ] 38636 } 38637 }, 38638 { 38639 condition: { 38640 minWidth: 451, 38641 maxWidth: 667 38642 }, 38643 chartOptions: { 38644 chart:{ 38645 height:330 38646 }, 38647 series:[ 38648 { 38649 size: '50%', 38650 dataLabels:{ 38651 enabled:true 38652 }, 38653 showInLegend: false, 38654 title: { 38655 style: { 38656 width: "275px" 38657 }, 38658 y: -100, 38659 x: 40 38660 }, 38661 center: ['22%', '60%'] 38662 }, 38663 { 38664 size: '50%', 38665 dataLabels:{ 38666 enabled:true 38667 }, 38668 title: { 38669 style: { 38670 width: "275px" 38671 }, 38672 x: 0, 38673 y: -100 38674 }, 38675 center: ['75%', '60%'] 38676 } 38677 ] 38678 } 38679 }, 38680 { 38681 condition: { 38682 minWidth: 668, 38683 maxWidth: 690 38684 }, 38685 chartOptions: { 38686 chart:{ 38687 height: 315 38688 }, 38689 series:[ 38690 { 38691 size: '50%', 38692 dataLabels:{ 38693 enabled:true 38694 }, 38695 showInLegend: false, 38696 title: { 38697 style: { 38698 width: "315px" 38699 }, 38700 y: -100, 38701 x: 40 38702 }, 38703 center: ['25%', '65%'] 38704 }, 38705 { 38706 size: '50%', 38707 dataLabels:{ 38708 enabled:true 38709 }, 38710 title: { 38711 style: { 38712 width: "315px" 38713 }, 38714 x: 0, 38715 y: -100 38716 }, 38717 center: ['75%', '65%'] 38718 } 38719 ] 38720 } 38721 }, 38722 { 38723 condition: { 38724 minWidth: 691 38725 }, 38726 chartOptions: { 38727 chart:{ 38728 height: '60%' 38729 }, 38730 series:[ 38731 { 38732 size: '50%', 38733 dataLabels:{ 38734 enabled:true 38735 }, 38736 showInLegend: false, 38737 title: { 38738 style: { 38739 width: "325px" 38740 }, 38741 y: -100, 38742 x: 0 38743 }, 38744 center: ['25%', '50%'] 38745 }, 38746 { 38747 size: '50%', 38748 dataLabels:{ 38749 enabled:true 38750 }, 38751 title: { 38752 style: { 38753 width: "325px" 38754 }, 38755 x: 0, 38756 y: -100 38757 }, 38758 center: ['75%', '50%'] 38759 } 38760 ] 38761 } 38762 } 38763 ] 38764 }, 38765 series: [ 38766 { 38767 data: [], 38768 type: 'pie', 38769 name: '', 38770 custom: '', 38771 id: 'pie1', 38772 softThreshold: false, 38773 title: { 38774 align: 'right', 38775 format: '<b>{name}</b><br><span style="font-size: 1px;">\xA0</span><br><span style="font-size: 12px; font-weight: bold; color: #888;">{options.custom}</span>',
38776 verticalAlign: 'top', 38777 style: { 38778 wordwrap: 'break-word', 38779 "fontSize": "16px", 38780 color: Highcharts.eiaColors.darkGrey 38781 } 38782 }, 38783 subtitle: { 38784 format: 'test', 38785 } 38786 }, 38787 { 38788 data: [], 38789 type: 'pie', 38790 name: '', 38791 custom: '', 38792 id: 'pie2', 38793 title: { 38794 align: 'center', 38795 format: '<b>{name}</b><br><span style="font-size: 1px;">\xA0</span><br><span style="font-size: 12px; font-weight: bold; color: #888;">{options.custom}</span>', 38796 verticalAlign: 'top', 38797 style: { 38798 wordwrap: 'break-word', 38799 "fontSize": "16px", 38800 color: Highcharts.eiaColors.darkGrey 38801 } 38802 } 38803 } 38804 ], 38805 plotOptions: { 38806 pie: { 38807 dataLabels: { 38808 enabled: true, 38809 format: "<strong>{point.name}</strong><br> {point.percentage:.0f}%", 38810 distance: 10, 38811 color: Highcharts.eiaColors.darkGrey, 38812 style: { 38813 "fontSize": "12px" 38814 } 38815 }, 38816 point: { 38817 events: { 38818 legendItemClick: function () { 38819 return false; 38820 } 38821 } 38822 } 38823 } 38824 }, 38825 tooltip: { 38826 useHTML: true, 38827 formatter: function () { 38828 return "<span><b>" + this.key + "</b><br/>" + Math.round(this.percentage) + " %</span>"; 38829 } 38830 } 38831 }); 38832 } 38833}; 38834 38835},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],200:[function(require,module,exports){ 38836const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 38837const csvParser = require('../../includes/csvParser'); 38838 38839module.exports = function (Highcharts, appPath) { 38840 const elementId = 'carbon-dioxide-end-use'; 38841 let units = ''; 38842 if ($('#' + elementId).length > 0) { 38843 Highcharts.chart(elementId, { 38844 chart: { 38845 type: 'column', 38846 spacingBottom: 25, 38847 events: { 38848 load: creditsSizeAndPosition, 38849 redraw: creditsSizeAndPosition 38850 } 38851 }, 38852 credits: { 38853 enabled: true, 38854 href: null, 38855 style: { 38856 cursor: 'normal' 38857 } 38858 }, 38859 data: { 38860 csvURL: appPath + '/energy-and-the-environment/charts/' + elementId + '.csv', 38861 startRow: 5, 38862 firstRowAsNames: true, 38863 38864 beforeParse: function (csv) { 38865 var parsedCSV = csvParser(csv); 38866 units = parsedCSV[1][0]; 38867 this.chart.title.update({ text: parsedCSV[0][0] }); 38868 this.chart.yAxis[0].update({ title: { text: units } }); 38869 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 38870 this.chart.update( 38871 { 38872 accessibility: { 38873 description: parsedCSV[4][0], 38874 }, 38875 exporting: { 38876 menuItemDefinitions: 38877 { 38878 label: { 38879 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 38880 } 38881 }, 38882 buttons: { 38883 contextButton: { 38884 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 38885 } 38886 } 38887 } 38888 } 38889 ); 38890 return csv; 38891 } 38892 }, 38893 colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown], 38894 xAxis: { 38895 labels: { 38896 format: "{value}", 38897 }, 38898 tickMarkPlacement: "between", 38899 tickWidth: 1 38900 }, 38901 yAxis: { 38902 maxPadding: 0, 38903 tickInterval: 500, 38904 labels: { 38905 format: "{value}" 38906 }, 38907 reversedStacks: false 38908 }, 38909 plotOptions: { 38910 column: { 38911 stacking: 'normal', 38912 dataLabels: { 38913 enabled: true, 38914 format: "{point.y:,.0f}", 38915 style: { 38916 color: Highcharts.eiaColors.darkGrey, 38917 "textOutline": "none", 38918 "fontWeight": 800 38919 }, 38920 y: -6 38921 } 38922 } 38923 }, 38924 tooltip: { 38925 useHTML: true, 38926 shared: true, 38927 formatter: function () { 38928 var html = '<b>' + this.points[0].key + '</b><br/>'; 38929 this.points.filter(function (value) { 38930 html += '<span style="color:' + value.series.color + '">' + '\u25CF\u2009\u2009' + '</span><b>' + value.series.name + ':</b> ' + value.y.toFixed(0).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",") + ' ' + units + '<br/>'; 38931 }); 38932 return html; 38933 } 38934 }, 38935 responsive: { 38936 rules: [{ 38937 condition: { 38938 maxWidth: 400 38939 }, 38940 chartOptions: { 38941 chart: { 38942 height: 600 38943 }, 38944 plotOptions: { 38945 column: { 38946 dataLabels: { 38947 style: { 38948 "fontWeight": 800, 38949 "fontSize": "9px" 38950 }, 38951 y: -5, 38952 crop: false, 38953 overflow: "allow" 38954 } 38955 } 38956 }, 38957 legend: { 38958 itemStyle: { 38959 "textOverflow": '', 38960 width: '50%', 38961 lineHeight: 13 38962 } 38963 } 38964 } 38965 }, 38966 { 38967 condition: { 38968 minWidth: 451 38969 }, 38970 38971 chartOptions: { 38972 chart: { 38973 height: '65%' 38974 } 38975 } 38976 }] 38977 } 38978 }); 38979 } 38980}; 38981 38982},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],201:[function(require,module,exports){ 38983const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 38984const csvParser = require('../../includes/csvParser'); 38985 38986module.exports = function (Highcharts, appPath) { 38987 const elementId = 'energy-end-use-sector'; 38988 let units = ''; 38989 if ($('#' + elementId).length > 0) { 38990 Highcharts.chart(elementId, { 38991 chart: { 38992 type: 'column', 38993 spacingBottom: 25, 38994 events: { 38995 load: creditsSizeAndPosition, 38996 redraw: creditsSizeAndPosition 38997 } 38998 }, 38999 credits: { 39000 enabled: true, 39001 href: null, 39002 style: { 39003 cursor: 'normal' 39004 } 39005 }, 39006 data: { 39007 csvURL: appPath + '/energy-and-the-environment/ch
39007arts/' + elementId + '.csv', 39008 startRow: 5, 39009 firstRowAsNames: true, 39010 39011 beforeParse: function (csv) { 39012 var parsedCSV = csvParser(csv); 39013 units = parsedCSV[1][0]; 39014 this.chart.title.update({ text: parsedCSV[0][0] }); 39015 this.chart.yAxis[0].update({ title: { text: units } }); 39016 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 39017 this.chart.update( 39018 { 39019 accessibility: { 39020 description: parsedCSV[4][0], 39021 }, 39022 exporting: { 39023 menuItemDefinitions: 39024 { 39025 label: { 39026 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 39027 } 39028 }, 39029 buttons: { 39030 contextButton: { 39031 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 39032 } 39033 } 39034 } 39035 } 39036 ); 39037 return csv; 39038 } 39039 }, 39040 colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.yellow], 39041 xAxis: { 39042 labels: { 39043 format: "{value}", 39044 }, 39045 tickMarkPlacement: "between", 39046 tickWidth: 1 39047 }, 39048 yAxis: { 39049 maxPadding: 0, 39050 tickInterval: 5, 39051 labels: { 39052 format: "{value}" 39053 }, 39054 reversedStacks: false 39055 }, 39056 plotOptions: { 39057 column: { 39058 stacking: 'normal', 39059 dataLabels: { 39060 enabled: true, 39061 format: "{point.y:.1f}", 39062 style: { 39063 color: Highcharts.eiaColors.darkGrey, 39064 "textOutline": "none", 39065 "fontWeight": 800 39066 }, 39067 y: -3 39068 } 39069 } 39070 }, 39071 tooltip: { 39072 useHTML: true, 39073 shared: true, 39074 formatter: function () { 39075 var html = '<b>' + this.points[0].key + '</b><br/>'; 39076 this.points.filter(function (value) { 39077 html += '<span font-size: 16px; style="color:' + value.series.color + '">' + '\u25CF\u2009\u2009' + '</span><b>' + value.series.name + ':</b> ' + value.y.toFixed(0).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",") + ' ' + units + '<br/>'; 39078 }); 39079 return html; 39080 } 39081 }, 39082 responsive: { 39083 rules: [{ 39084 condition: { 39085 maxWidth: 400 39086 }, 39087 chartOptions: { 39088 chart: { 39089 height: 550 39090 }, 39091 plotOptions: { 39092 column: { 39093 dataLabels: { 39094 style: { 39095 "fontWeight": 800, 39096 "fontSize": "9px" 39097 }, 39098 y: -6, 39099 crop: false, 39100 overflow: "allow" 39101 } 39102 } 39103 } 39104 } 39105 }, 39106 { 39107 condition: { 39108 minWidth: 451 39109 }, 39110 39111 chartOptions: { 39112 chart: { 39113 height: '65%' 39114 } 39115 } 39116 }] 39117 } 39118 }); 39119 } 39120}; 39121 39122},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],202:[function(require,module,exports){ 39123const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 39124const csvParser = require('../../includes/csvParser'); 39125 39126module.exports = function (Highcharts, appPath) { 39127 const elementId = 'greenhouse-gas-emissions-by-gas'; 39128 39129 if ($('#' + elementId).length > 0) { 39130 Highcharts.chart(elementId, { 39131 chart: { 39132 type: 'pie', 39133 spacingBottom: 25, 39134 events: { 39135 load: creditsSizeAndPosition, 39136 redraw: creditsSizeAndPosition 39137 } 39138 }, 39139 title: { 39140 text: '', 39141 margin: 15 39142 }, 39143 credits: { 39144 enabled: true, 39145 href: null, 39146 style: { 39147 cursor: 'normal' 39148 } 39149 }, 39150 data: { 39151 csvURL: appPath + '/energy-and-the-environment/ch
39151arts/' + elementId + '.csv', 39152 startRow: 5, 39153 firstRowAsNames: false, 39154 39155 beforeParse: function (csv) { 39156 var parsedCSV = csvParser(csv); 39157 this.chart.title.update({ text: parsedCSV[0][0] }); 39158 this.chart.subtitle.update({ text: '<span style="color:#888;font-weight:bold;font-size:12px;fill:#888;">' + parsedCSV[1][0] + '</span>' }); 39159 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 39160 this.chart.update( 39161 { 39162 accessibility: { 39163 description: parsedCSV[4][0], 39164 }, 39165 exporting: { 39166 menuItemDefinitions: 39167 { 39168 label: { 39169 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 39170 } 39171 }, 39172 buttons: { 39173 contextButton: { 39174 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 39175 } 39176 } 39177 } 39178 } 39179 ); 39180 return csv; 39181 } 39182 }, 39183 colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.yellow, Highcharts.eiaColors.red, Highcharts.eiaColors.darkBrown], 39184 subtitle: { 39185 text: '', 39186 useHTML: true, 39187 }, 39188 plotOptions: { 39189 pie: { 39190 startAngle: 90, 39191 dataLabels: { 39192 enabled: true, 39193 format: "<strong>{point.name}</strong> {point.percentage:.1f}%", 39194 distance: 10, 39195 color: Highcharts.eiaColors.darkGrey, 39196 style: { 39197 "fontSize": "12px" 39198 } 39199 } 39200 } 39201 }, 39202 tooltip: { 39203 useHTML: true, 39204 formatter: function () { 39205 return "<span><b>" + this.key + "</b><br/>" + Highcharts.numberFormat(this.percentage, 1) + " %</span>"; 39206 } 39207 }, 39208 responsive: { 39209 rules: [{ 39210 condition: { 39211 maxWidth: 450 39212 }, 39213 39214 chartOptions: { 39215 chart: { 39216 height: 410 39217 }, 39218 plotOptions: { 39219 pie: { 39220 size: null, 39221 dataLabels: { 39222 enabled: false 39223 }, 39224 showInLegend: true 39225 } 39226 }, 39227 legend: { 39228 enabled: true 39229 } 39230 } 39231 }, 39232 { 39233 condition: { 39234 minWidth: 451 39235 }, 39236 39237 chartOptions: { 39238 chart: { 39239 height: '65%' 39240 }, 39241 plotOptions: { 39242 pie: { 39243 size: '65%', 39244 dataLabels: { 39245 enabled: true 39246 }, 39247 showInLegend: false 39248 } 39249 }, 39250 legend: { 39251 enabled: false 39252 } 39253 } 39254 }] 39255 } 39256 }); 39257 } 39258}; 39259 39260},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],203:[function(require,module,exports){ 39261const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 39262const csvParser = require('../../includes/csvParser'); 39263 39264module.exports = function (Highcharts, appPath) { 39265 const elementId = 'major-fuel-energy-sources'; 39266 var firstSeries = []; 39267 var secondSeries = []; 39268 39269 (function (Highcharts) { 39270 Highcharts.seriesTypes.pie.prototype.setTitle = function (titleOption) { 39271 var chart = this.chart, 39272 center = this.center || (this.yAxis && this.yAxis.center), 39273 labelBox, 39274 box, 39275 format; 39276 39277 if (center && titleOption) { 39278 box = { 39279 x: chart.plotLeft + center[0] - 0.5 * center[2], 39280 y: chart.plotTop + center[1] - 0.5 * center[2], 39281 width: center[2], 39282 height: center[2] 39283 }; 39284 39285 format = titleOption.text || titleOption.format; 39286 format = Highcharts.format(format, this); 39287 39288 if (this.title) { 39289 this.title.attr({ 39290 text: format 39291 }); 39292 39293 } else { 39294 this.title = this.chart.renderer.label(format) 39295 .css(titleOption.style) 39296 .add() 39297 } 39298 labelBox = this.title.getBBox(); 39299 titleOption.width = labelBox.width; 39300 titleOption.height = labelBox.height; 39301 this.title.align(titleOption, null, box); 39302 } 39303 }; 39304 39305 Highcharts.wrap(Highcharts.seriesTypes.pie.prototype, 'render', function (proceed) { 39306 proceed.call(this); 39307 this.setTitle(this.options.title); 39308 }); 39309 39310 }
39310(Highcharts)); 39311 39312 if ($('#' + elementId).length > 0) { 39313 39314 Highcharts.chart(elementId, { 39315 chart: { 39316 spacingBottom: 25, 39317 events: { 39318 load: creditsSizeAndPosition, 39319 redraw: creditsSizeAndPosition 39320 } 39321 }, 39322 title: { 39323 text: '' 39324 }, 39325 credits: { 39326 enabled: true, 39327 href: null, 39328 style: { 39329 cursor: 'normal' 39330 } 39331 }, 39332 data: { 39333 csvURL: appPath + '/energy-and-the-environment/charts/' + elementId + '.csv', 39334 startRow: 4, 39335 firstRowAsNames: true, 39336 complete: function (options) { 39337 options.series[0].data = firstSeries; 39338 var newSeries = JSON.stringify(options.series[0]); 39339 newSeries = JSON.parse(newSeries); 39340 newSeries.data = secondSeries; 39341 options.series.push(newSeries); 39342 var point = ''; 39343 var i; 39344 39345 for (i = 0; i < options.series[0].data.length; i++) { 39346 point = { name: options.series[0].data[i][0], y: options.series[0].data[i][1] } 39347 options.series[0].data[i] = point; 39348 switch (i) { 39349 case 0: 39350 point.color = Highcharts.eiaColors.blue; 39351 break; 39352 case 1: 39353 point.color = Highcharts.eiaColors.brown; 39354 break; 39355 case 2: 39356 point.color = Highcharts.eiaColors.green; 39357 break; 39358 case 3: 39359 point.color = Highcharts.eiaColors.yellow; 39360 break; 39361 } 39362 } 39363 39364 for (i = 0; i < options.series[1].data.length; i++) { 39365 point = { name: options.series[1].data[i][0], y: options.series[1].data[i][1] } 39366 options.series[1].data[i] = point; 39367 switch (i) { 39368 case 0: 39369 point.color = Highcharts.eiaColors.brown; 39370 break; 39371 case 1: 39372 point.color = Highcharts.eiaColors.green; 39373 break; 39374 case 2: 39375 point.color = Highcharts.eiaColors.blue; 39376 break; 39377 39378 } 39379 } 39380 39381 }, 39382 beforeParse: function (csv) { 39383 var parsedCSV = csvParser(csv); 39384 this.chart.credits.update({ text: parsedCSV[4][0] + '<br>' + parsedCSV[5][0] }); 39385 39386 this.chart.series[0].update( 39387 { 39388 name: parsedCSV[0][0], 39389 custom: parsedCSV[2][0] 39390 } 39391 ); 39392 // 39393 this.chart.series[1].update( 39394 { 39395 name: parsedCSV[1][0], 39396 custom: parsedCSV[3][0] 39397 } 39398 ); 39399 39400 var i; 39401 for (i = 7; i < parsedCSV.length; i++) { 39402 if (parsedCSV[i][0] === '') { 39403 break; 39404 } 39405 firstSeries.push([parsedCSV[i][0], parseFloat(parsedCSV[i][1])]); 39406 } 39407 for (i = 12; i < parsedCSV.length; i++) { 39408 if (parsedCSV[i][0] === '') { 39409 break; 39410 } 39411 secondSeries.push([parsedCSV[i][0], parseFloat(parsedCSV[i][1])]); 39412 } 39413 39414 this.chart.update( 39415 { 39416 accessibility: { 39417 description: parsedCSV[6][0], 39418 }, 39419 exporting: { 39420 menuItemDefinitions: 39421 { 39422 label: { 39423 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 39424 } 39425 }, 39426 buttons: { 39427 contextButton: { 39428 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 39429 } 39430 } 39431 } 39432 } 39433 ); 39434 return csv; 39435 } 39436 }, 39437 subtitle: { 39438 text: '', 39439 useHTML: true, 39440 }, 39441 responsive: { 39442 rules: [ 39443 { 39444 condition: { 39445 maxWidth: 450 39446 }, 39447 chartOptions: { 39448 chart:{ 39449 height:575 39450 }, 39451 series:[ 39452 { 39453 size: '40%', 39454 dataLabels:{ 39455 enabled:false 39456 }, 39457 showInLegend:true, 39458 title: { 39459 align: 'left', 39460 style: { 39461 width: "240px" 39462 }, 39463 y: -70, 39464 x: -70 39465 }, 39466 center: ['50%', '29%'] 39467 }, 39468 { 39469 size: '40%', 39470 dataLabels:{ 39471 enabled:false 39472 }, 39473 title: { 39474 align: 'left', 39475 style: { 39476 width: "270px" 39477 }, 39478 y: -70, 39479 x: -70 39480 }, 39481 center: ['50%', '87%'] 39482 } 39483 ] 39484 } 39485 }, 39486 { 39487 condition: { 39488 minWidth: 451, 39489 maxWidth: 667 39490 }, 39491 chartOptions: { 39492 chart:{ 39493 height:350 39494 }, 39495 series:[ 39496 { 39497 size: '50%', 39498 dataLabels:{ 39499 enabled:true 39500 }, 39501 showInLegend: false, 39502 title: { 39503 style: { 39504 width: "275px" 39505 }, 39506 y: -90, 39507 x: 40 39508 }, 39509 center: ['22%', '60%'] 39510 }, 39511 { 39512 size: '50%', 39513 dataLabels:{ 39514 enabled:true 39515 }, 39516 title: { 39517 style: { 39518 width: "275px" 39519 }, 39520 x: 0, 39521 y: -90 39522 }, 39523 center: ['75%', '60%'] 39524 } 39525 ] 39526 } 39527 }, 39528 { 39529 condition: { 39530 minWidth: 668, 39531 maxWidth: 690 39532 }, 39533 chartOptions: { 39534 chart:{ 39535 height:350 39536 }, 39537 series:[ 39538 { 39539 size: '50%', 39540 dataLabels:{ 39541 enabled:true 39542 }, 39543 showInLegend: false, 39544 title: { 39545 style: { 39546 width: "275px" 39547 }, 39548 y: -95, 39549 x: 20 39550 }, 39551 center: ['22%', '60%'] 39552 }, 39553 { 39554 size: '50%', 39555 dataLabels:{ 39556 enabled:true 39557 }, 39558 title: { 39559 style: { 39560 width: "275px" 39561 }, 39562 x: 0, 39563 y: -95 39564 }, 39565 center: ['75%', '60%'] 39566 } 39567 ] 39568 } 39569 }, 39570 { 39571 condition: { 39572 minWidth: 691 39573 }, 39574 chartOptions: { 39575 chart:{ 39576 height: '60%' 39577 }, 39578 series:[ 39579 { 39580 size: '50%', 39581 dataLabels:{ 39582 enabled:true 39583 }, 39584 showInLegend: false, 39585 title: { 39586 style: { 39587 width: "340px" 39588 }, 39589 y: -100, 39590 x: 10 39591 }, 39592 center: ['25%', '55%'] 39593 }, 39594 { 39595 size: '50%', 39596 dataLabels:{ 39597 enabled:true 39598 }, 39599 title: { 39600 style: { 39601 width: "340px" 39602 }, 39603 x: -10, 39604 y: -100 39605 }, 39606 center: ['75%', '55%'] 39607 } 39608 ] 39609 } 39610 } 39611 ] 39612 }, 39613 series: [ 39614 { 39615 data: [], 39616 type: 'pie', 39617 name: '', 39618 custom: '', 39619 id: 'pie1', 39620 softThreshold: false, 39621 title: { 39622 align: 'right', 39623 format: '<b>{name}</b><br><span style="font-size: 1px;">\xA0</span><br><span style="font-size: 12px; font-weight: bold; color: #888;">{options.custom}</span>',
39624 verticalAlign: 'top', 39625 style: { 39626 wordwrap: 'break-word', 39627 "fontSize": "16px", 39628 color: Highcharts.eiaColors.darkGrey 39629 } 39630 } 39631 }, 39632 { 39633 data: [], 39634 type: 'pie', 39635 name: '', 39636 custom: '', 39637 id: 'pie2', 39638 title: { 39639 align: 'center', 39640 format: '<b>{name}</b><br><span style="font-size: 1px;">\xA0</span><br><span style="font-size: 12px; font-weight: bold; color: #888;">{options.custom}</span>', 39641 verticalAlign: 'top', 39642 style: { 39643 wordwrap: 'break-word', 39644 "fontSize": "16px", 39645 color: Highcharts.eiaColors.darkGrey 39646 } 39647 } 39648 } 39649 ], 39650 plotOptions: { 39651 pie: { 39652 dataLabels: { 39653 enabled: true, 39654 format: "<strong>{point.name}</strong><br>{point.percentage:.0f}%", 39655 distance: 10, 39656 color: Highcharts.eiaColors.darkGrey, 39657 style: { 39658 "fontSize": "12px" 39659 } 39660 }, 39661 point: { 39662 events: { 39663 legendItemClick: function () { 39664 return false; 39665 } 39666 } 39667 } 39668 } 39669 }, 39670 tooltip: { 39671 useHTML: true, 39672 formatter: function () { 39673 return "<span><b>" + this.key + "</b><br/>" + Math.round(this.percentage) + " %</span>"; 39674 } 39675 } 39676 }); 39677 } 39678}; 39679 39680},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],204:[function(require,module,exports){ 39681const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 39682const csvParser = require('../../includes/csvParser'); 39683 39684module.exports = function (Highcharts, appPath) { 39685 const elementId = 'world-carbon-dioxide-emissions'; 39686 39687 if ($('#' + elementId).length > 0) { 39688 Highcharts.chart(elementId, { 39689 chart: { 39690 type: 'scatter', 39691 spacingBottom: 30, 39692 events: { 39693 load: creditsSizeAndPosition, 39694 redraw: creditsSizeAndPosition 39695 } 39696 }, 39697 credits: { 39698 enabled: true, 39699 href: null, 39700 style: { 39701 cursor: 'normal' 39702 } 39703 }, 39704 data: { 39705 csvURL: appPath + '/energy-and-the-environment/charts/' + elementId + '.csv', 39706 startRow: 5, 39707 firstRowAsNames: true, 39708 complete: function (options) { 39709 if (options.series.length > 0) { 39710 options.series[0].yAxis = 0; 39711 options.series[1].yAxis = 1; 39712 } 39713 }, 39714 beforeParse: function (csv) { 39715 var parsedCSV = csvParser(csv); 39716 this.chart.title.update({ text: parsedCSV[0][0] }); 39717 this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } }); 39718 this.chart.yAxis[1].update({ title: { text: parsedCSV[1][1] } }); 39719 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 39720 this.chart.update( 39721 { 39722 accessibility: { 39723 description: parsedCSV[4][0], 39724 }, 39725 exporting: { 39726 menuItemDefinitions: 39727 { 39728 label: { 39729 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 39730 } 39731 }, 39732 buttons: { 39733 contextButton: { 39734 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 39735 } 39736 } 39737 } 39738 } 39739 ); 39740 return csv; 39741 } 39742 39743 }, 39744 colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown], 39745 xAxis: { 39746 labels: { 39747 format: "{value}", 39748 }, 39749 tickInterval: 50, 39750 startOnTick: true, 39751 minPadding: 0, 39752 maxPadding: 0 39753 }, 39754 yAxis: [ 39755 { 39756 labels: { 39757 format: "{value}", 39758 style: { "color": Highcharts.eiaColors.blue } 39759 }, 39760 title: { 39761 style: { "color": Highcharts.eiaColors.blue } 39762 } 39763 }, 39764 { 39765 opposite: true, 39766 labels: { 39767 format: "{value}", 39768 style: { "color": Highcharts.eiaColors.brown } 39769 }, 39770 title: { 39771 style: { "color": Highcharts.eiaColors.brown } 39772 } 39773 } 39774 ], 39775 tooltip: { 39776 useHTML: true, 39777 shared: true, 39778 formatter: function () { 39779 const name = this.series.name; 39780 const units = name.split(' ')[1] === 'emissions' ? 'billion metric tons' : 'parts per million'; 39781 const yValue = name.split(' ')[1] === 'emissions' ? this.y : this.y.toFixed(2); 39782 return '<span><b>' + this.x + '</b><br/><span style="font-size: 18px;color:' + this.color + '">' + '\u2022' + '</span><b> ' + this.series.name.split(' ')[0] + '</b><br/>' + yValue + ' ' + units + '</span>'; 39783 } 39784 }, 39785 responsive: { 39786 rules: [{ 39787 condition: { 39788 maxWidth: 400 39789 }, 39790 chartOptions: { 39791 chart: { 39792 height: 400 39793 } 39794 } 39795 }, 39796 { 39797 condition: { 39798 minWidth: 451 39799 }, 39800 39801 chartOptions: { 39802 chart: { 39803 height: '65%' 39804 } 39805 } 39806 }] 39807 } 39808 }); 39809 } 39810}; 39811 39812},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],205:[function(require,module,exports){ 39813const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 39814const csvParser = require('../../includes/csvParser'); 39815 39816module.exports = function (Highcharts, appPath) { 39817 const elementId = 'annual-regular-grade-gasoline-prices'; 39818 var units = ''; 39819 39820 if ($('#' + elementId).length > 0) { 39821 Highcharts.chart(elementId, { 39822 chart: { 39823 type: 'line', 39824 spacingBottom: 30, 39825 events: { 39826 load: creditsSizeAndPosition, 39827 redraw: creditsSizeAndPosition 39828 } 39829 }, 39830 credits: { 39831 enabled: true, 39832 href: null, 39833 style: { 39834 cursor: 'normal' 39835 } 39836 }, 39837 data: { 39838 csvURL: appPath + '/gasoline/charts/' + elementId + '.csv', 39839 startRow: 5, 39840 firstRowAsNames: true, 39841 39842 beforeParse: function (csv) { 39843 var parsedCSV = csvParser(csv); 39844 this.chart.title.update({ text: parsedCSV[0][0] }); 39845 units = parsedCSV[1][0]; 39846 this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } }); 39847 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 39848 this.chart.update( 39849 { 39850 accessibility: { 39851 description: parsedCSV[4][0], 39852 }, 39853 exporting: { 39854 menuItemDefinitions: 39855 { 39856 label: { 39857 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 39858 } 39859 }, 39860 buttons: { 39861 contextButton: { 39862 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 39863 } 39864 } 39865 } 39866 } 39867 ); 39868 return csv; 39869 }, 39870 }, 39871 colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown], 39872 xAxis: { 39873 labels: { 39874 format: "{value}", 39875 rotation: -50 39876 }, 39877 tickInterval: 2, 39878 }, 39879 yAxis: { 39880 min: 0, 39881 tickInterval: .50, 39882 labels: { 39883 format: "${value:.2f}" 39884 } 39885 }, 39886 tooltip: { 39887 useHTML: true, 39888 shared: true, 39889 formatter: function () { 39890 var html = '<b>' + this.x + '</b><br/>'; 39891 this.points.filter(function (value) { 39892 html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25AC\u2009\u2009' + '</span><b>' + value.series.name + ':</b> $' + value.y.toFixed(2).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",") + ' ' + units + '<br/>'; 39893 }); 39894 return html; 39895 } 39896 }, 39897 responsive: { 39898 rules: [{ 39899 condition: { 39900 maxWidth: 450 39901 }, 39902 chartOptions: { 39903 chart: { 39904 height: 500 39905 } 39906 } 39907 }, 39908 { 39909 condition: { 39910 minWidth: 451 39911 }, 39912 39913 chartOptions: { 39914 chart: { 39915 height: '75%' 39916 } 39917 } 39918 }] 39919 } 39920 }); 39921 } 39922}; 39923 39924},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],206:[function(require,module,exports){ 39925const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 39926const csvParser = require('../../includes/csvParser'); 39927 39928module.exports = function (Highcharts, appPath) { 39929 const elementId = 'average-monthly-prices'; 39930 var units = ''; 39931 39932 if ($('#' + elementId).length > 0) { 39933 Highcharts.chart(elementId, { 39934 chart: { 39935 type: 'line', 39936 spacingBottom: 30, 39937 events: { 39938 load: creditsSizeAndPosition, 39939 redraw: creditsSizeAndPosition 39940 } 39941 }, 39942 credits: { 39943 enabled: true, 39944 href: null, 39945 style: { 39946 cursor: 'normal' 39947 } 39948 }, 39949 data: { 39950 csvURL: appPath + '/gasoline/charts/' + elementId + '.csv', 39951 startRow: 5, 39952 firstRowAsNames: true, 39953 beforeParse: function (csv) { 39954 var parsedCSV = csvParser(csv); 39955 this.chart.title.update({ text: parsedCSV[0][0] }); 39956 units = parsedCSV[1][0]; 39957 this.chart.yAxis[0].update({ title: { text: units } }); 39958 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 39959 this.chart.update( 39960 { 39961 accessibility: { 39962 description: parsedCSV[4][0], 39963 }, 39964 exporting: { 39965 menuItemDefinitions: 39966 { 39967 label: { 39968 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 39969 } 39970 }, 39971 buttons: { 39972 contextButton: { 39973 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 39974 } 39975 } 39976 } 39977 } 39978 ); 39979 return csv; 39980 } 39981 }, 39982 colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown], 39983 xAxis: { 39984 type: 'category', 39985 startOnTick: true, 39986 endOnTick: false, 39987 tickInterval: 12, 39988 tickWidth: 1, 39989 labels: { 39990 rotation: -45 39991 } 39992 }, 39993 yAxis: { 39994 allowDecimals: true, 39995 min: 0, 39996 maxPadding: 0.01, 39997 tickInterval: 0.25, 39998 labels: { 39999 format: "${value:.2f}" 40000 } 40001 }, 40002 tooltip: { 40003 shared: true, 40004 formatter: function () { 40005 var toolTip = '<b>'+this.points[0].key+'</b><br/>'; 40006 toolTip += '<span style="font-size: 16px; color:' + this.points[0].series.color + '">' + '\u25AC\u2009\u2009' + '</span>'; 40007 toolTip += '<b>'+this.points[0].series.name+':</b> $'+this.points[0].y.toFixed(2)+' '+units+'<br/>'; 40008 toolTip += '<span style="font-size: 16px; color:' + this.points[1].series.color + '">' + '\u25AC\u2009\u2009' + '</span>'; 40009 toolTip += '<b>'+this.points[1].series.name+':</b> $'+this.points[1].y.toFixed(2)+' '+units+'<br/>'; 40010 return toolTip; 40011 } 40012 }, 40013 responsive: { 40014 rules: [{ 40015 condition: { 40016 maxWidth: 450 40017 }, 40018 chartOptions: { 40019 chart: { 40020 height: 500 40021 } 40022 } 40023 }, 40024 { 40025 condition: { 40026 minWidth: 451 40027 }, 40028 40029 chartOptions: { 40030 chart: { 40031 height: '65%' 40032 } 40033 } 40034 }] 40035 } 40036 }); 40037 } 40038}; 40039 40040},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],207:[function(require,module,exports){ 40041const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 40042const csvParser = require('../../includes/csvParser'); 40043 40044module.exports = function (Highcharts, appPath) { 40045 const elementId = 'regular-grade-gasoline-demand-retail-price'; 40046 var units = []; 40047 40048 if ($('#' + elementId).length > 0) { 40049 Highcharts.chart(elementId, { 40050 chart: { 40051 spacingBottom: 30, 40052 events: { 40053 load: creditsSizeAndPosition, 40054 redraw: creditsSizeAndPosition 40055 } 40056 }, 40057 credits: { 40058 enabled: false, 40059 href: null, 40060 style: { 40061 cursor: 'normal' 40062 } 40063 }, 40064 caption: { 40065 verticalAlign: 'bottom', 40066 useHTML: true, 40067 margin: 0, 40068 style: { 40069 color: '#888', 40070 fontSize: '11px' 40071 }, 40072 x: 32, 40073 y: 39 40074 }, 40075 data: { 40076 csvURL: appPath + '/gasoline/charts/' + elementId + '.csv', 40077 startRow: 5, 40078 firstRowAsNa
40078mes: true, 40079 complete: function (options) { 40080 if (options.series.length > 0) { 40081 options.series[0].type = "column"; 40082 options.series[0].yAxis = 0; 40083 options.series[1].type = "line"; 40084 options.series[1].yAxis = 1; 40085 } 40086 }, 40087 beforeParse: function (csv) { 40088 var parsedCSV = csvParser(csv); 40089 this.chart.title.update({ text: parsedCSV[0][0] }); 40090 units.push(parsedCSV[1][0], parsedCSV[1][1]); 40091 40092 this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } }); 40093 this.chart.yAxis[1].update({ title: { text: parsedCSV[1][1] } }); 40094 this.chart.caption.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 40095 this.chart.update( 40096 { 40097 accessibility: { 40098 description: parsedCSV[4][0], 40099 }, 40100 exporting: { 40101 menuItemDefinitions: 40102 { 40103 label: { 40104 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 40105 } 40106 }, 40107 buttons: { 40108 contextButton: { 40109 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 40110 } 40111 } 40112 } 40113 } 40114 ); 40115 return csv; 40116 } 40117 }, 40118 xAxis: { 40119 labels: { 40120 format: '{value}' 40121 } 40122 }, 40123 yAxis: [ 40124 { 40125 tickInterval: 25, 40126 softMax: 450, 40127 alignTicks: false, 40128 maxPadding: 0.05, 40129 labels: { 40130 format: "{value}", 40131 step: 2 40132 } 40133 }, 40134 { 40135 tickInterval: .25, 40136 softMax: 4.50, 40137 linkTo: 0, 40138 alignTicks: false, 40139 labels: { 40140 format: "${value:.2f}", 40141 step: 2 40142 }, 40143 opposite: true 40144 } 40145 ], 40146 tooltip: { 40147 shared: true, 40148 useHTML: true, 40149 formatter: function () { 40150 var html = '<b>' + this.points[0].key + '</b><br/>'; 40151 this.points.filter(function (value) { 40152 var symbol = ''; 40153 var unit = ''; 40154 if (value.series.name === 'demand') { 40155 symbol = '\u25CF\u2004\u2009'; 40156 unit = units[0]; 40157 html += '<span style="font-size: 16px;color:' + value.series.color + '">' + symbol + '</span><b>' + value.series.name + ':</b> ' + value.y.toFixed(2) + ' ' + unit + '<br/>'; 40158 } 40159 else { 40160 symbol = '\u25AC\u2009\u2009'; 40161 unit = units[1]; 40162 html += '<span style="font-size: 16px;color:' + value.series.color + '">' + symbol + '</span><b>' + value.series.name + ':</b> $' + value.y.toFixed(2) + ' ' + unit + '<br/>'; 40163 } 40164 }); 40165 return html; 40166 } 40167 }, 40168 responsive: { 40169 rules: [{ 40170 condition: { 40171 maxWidth: 450 40172 }, 40173 chartOptions: { 40174 chart: { 40175 height: 500 40176 } 40177 } 40178 }, 40179 { 40180 condition: { 40181 minWidth: 451 40182 }, 40183 40184 chartOptions: { 40185 chart: { 40186 height: '65%' 40187 } 40188 } 40189 }] 40190 } 40191 }); 40192 } 40193}; 40194 40195},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],208:[function(require,module,exports){ 40196const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 40197const csvParser = require('../../includes/csvParser'); 40198 40199module.exports = function (Highcharts, appPath) { 40200 const elementId = 'us-gasoline-stocks'; 40201 var units = ''; 40202 40203 if ($('#' + elementId).length > 0) { 40204 Highcharts.chart(elementId, { 40205 chart: { 40206 type: 'arearange', 40207 spacingBottom: 30, 40208 events: { 40209 load: creditsSizeAndPosition, 40210 redraw: creditsSizeAndPosition 40211 } 40212 }, 40213 credits: { 40214 enabled: true, 40215 href: null, 40216 style: { 40217 cursor: 'normal' 40218 } 40219 }, 40220 data: { 40221 csvURL: appPath + '/gasoline/charts/' + elementId + '.csv', 40222 startRow: 5, 40223 firstRowAsNames: true, 40224 parsed : function(columns) { 40225 console.log(columns); 40226 }, 40227 beforeParse: function (csv) { 40228 var parsedCSV = csvParser(csv); 40229 this.chart.title.update({ text: parsedCSV[0][0] }); 40230 units = parsedCSV[1][0]; 40231 this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } }); 40232 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 40233 this.chart.yAxis[0].update({ softMin: 170 }); 40234 40235 var headerRow = parsedCSV[this.chart.data.options.startRow]; 40236 var nameSplit = headerRow[2].split(' '); 40237 this.chart.series[1].update({name : nameSplit[0] + ' ' + nameSplit[1]}); 40238 40239 this.chart.update( 40240 { 40241 accessibility: { 40242 description: parsedCSV[4][0], 40243 }, 40244 exporting: { 40245 menuItemDefinitions: 40246 { 40247 label: { 40248 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 40249 } 40250 }, 40251 buttons: { 40252 contextButton: { 40253 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 40254 } 40255 } 40256 } 40257 } 40258 ); 40259 return csv; 40260 } 40261 }, 40262 xAxis: { 40263 type: 'datetime', 40264 dateTimeLabelFormats: { 40265 month: '%b-%Y' 40266 }, 40267 startOnTick: true, 40268 endOnTick: false, 40269 tickPositioner: function () { 40270 var ticks = [], 40271 minDate, 40272 maxDate, 40273 tickDate; 40274 40275 ticks.info = this.tickPositions.info; 40276 40277 if (this.dataMin !== null && this.dataMax !== null) { 40278 minDate = new Date(this.dataMin);
40279 maxDate = new Date(this.dataMax); 40280 40281 for ( 40282 tickDate = new Date(Date.UTC(minDate.getUTCFullYear(), minDate.getUTCMonth())); 40283 tickDate < maxDate; 40284 tickDate = new Date(Date.UTC(tickDate.getUTCFullYear(), tickDate.getUTCMonth() + 3))) { 40285 ticks.push(tickDate.valueOf()); 40286 } 40287 } 40288 40289 return ticks; 40290 } 40291 }, 40292 series: [ 40293 { 40294 type: 'line', 40295 name: '', 40296 data: [], 40297 color: Highcharts.eiaColors.blue, 40298 zIndex: 1 40299 }, 40300 { 40301 data: [], 40302 name: '', 40303 lineWidth: 0, 40304 color: Highcharts.eiaColors.lightGrey, 40305 zIndex: 0 40306 } 40307 ], 40308 yAxis: { 40309 tickInterval: 30, 40310 labels: { 40311 format: "{value}" 40312 } 40313 }, 40314 tooltip: { 40315 shared: true, 40316 formatter: function () { 40317 return this.points.reduce(function (s, point) { 40318 var pointValue, pointChar; 40319 if (point.point.low) { 40320 pointValue = point.point.low.toFixed(2) + ' - ' + point.point.high.toFixed(2); 40321 pointChar = ' \u25CF\u2004\u2009'; 40322 } 40323 else { 40324 pointValue = point.y.toFixed(2); 40325 pointChar = '\u25AC\u2009\u2009'; 40326 } 40327 return s + '<br/><span style="font-size: 16px; color:' + point.series.color + '">' + pointChar + '</span><b>' + point.series.name + ':</b> ' + 40328 pointValue + ' ' + units; 40329 }, '<b>' + Highcharts.dateFormat('%b-%d-%Y', this.x) + '</b>'); 40330 } 40331 }, 40332 responsive: { 40333 rules: [{ 40334 condition: { 40335 maxWidth: 450 40336 }, 40337 chartOptions: { 40338 chart: { 40339 height: 500 40340 }, 40341 xAxis: { 40342 labels: { 40343 rotation: -45 40344 } 40345 } 40346 } 40347 }, 40348 { 40349 condition: { 40350 minWidth: 451 40351 }, 40352 40353 chartOptions: { 40354 chart: { 40355 height: '65%' 40356 } 40357 } 40358 }] 40359 } 40360 }); 40361 } 40362}; 40363 40364},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],209:[function(require,module,exports){ 40365const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 40366const csvParser = require('../../includes/csvParser'); 40367 40368 40369module.exports = function (Highcharts, map, appPath) { 40370 40371 const elementId = 'geothermal-electricity-generation'; 40372 let mapData = Highcharts.geojson(map); 40373 40374 // Our own options definition as two different series, will populate the data in the complete callback 40375 var seriesOptions = [ 40376 { 40377 id: "rank1", 40378 type: "map", 40379 allAreas: false, 40380 keys: ["postal-code"], 40381 joinBy: ['hc-a2', 'code'], 40382 data: [], 40383 mapData: mapData, 40384 borderWidth: 0.5, 40385 borderColor : "#cccccc", 40386 states: { 40387 hover: { 40388 brightness: 0, 40389 borderWidth: 1, 40390 borderColor: Highcharts.eiaColors.darkGrey 40391 } 40392 }, 40393 color: '#ffffff', 40394 dataLabels: { 40395 enabled: true, 40396 formatter: function () { 40397 if (this.point.nameCode) { 40398 if (this.point.code === "VT" || this.point.code === "NH" || this.point.code === "MA" || this.point.code === "RI" || this.point.code === "CT" || this.point.code === "NJ" || this.point.code === "DE" || this.point.code === "MD" || this.point.code === "DC") { 40399 return this.point.code + " " + this.point.nameCode; 40400 } 40401 else { 40402 return this.point.code + "<br/>" + this.point.nameCode; 40403 } 40404 } 40405 else { 40406 return this.point.properties['hc-a2']; 40407 } 40408 } 40409 }, 40410 tooltip: { 40411 valueSuffix: '' 40412 } 40413 } 40414 ]; 40415 40416 if ($('#' + elementId).length > 0) { 40417 Highcharts.mapChart(elementId, { 40418 chart: { 40419 map: map, 40420 spacingBottom: 25, 40421 events: { 40422 load: creditsSizeAndPosition, 40423 redraw: creditsSizeAndPosition 40424 } 40425 }, 40426 credits: { 40427 enabled: false, 40428 href: null, 40429 style: { 40430 cursor: 'normal' 40431 } 40432 }, 40433 caption: { 40434 verticalAlign: 'bottom', 40435 useHTML: true, 40436 margin: 0, 40437 style: { 40438 color: '#888', 40439 fontSize: '11px' 40440 }, 40441 x: 32, 40442 y: 33 40443 }, 40444 tooltip: { 40445 enabled: true, 40446 useHTML: true, 40447 formatter: function () { 40448 var html = (this.point.name && this.point.nameCode) ? '<b>' + this.point.name + '</b><br/>' + this.point.nameCode : ''; 40449 if (html !== '') 40450 return html 40451 } 40452 }, 40453 data: { 40454 csvURL: appPath + '/geothermal/charts/' + elementId + '.csv', 40455 startRow: 4, 40456 firstRowAsNames: false, 40457 complete: function (options) { 40458 var point; 40459 var i; 40460 40461 for (i = 0; i < options.series[0].data.length; i++) { 40462 40463 point = options.series[0].data[i]; 40464 var pointValueString = Highcharts.numberFormat(point.value, 0); 40465 40466 if (pointValueString) { 40467 seriesOptions[0].data.push({ 40468 code: point.name, 40469 nameCode: "<span>#" + pointValueString + "</span>", 40470 value: point.value 40471 });
40472 } 40473 else { 40474 seriesOptions[0].data.push({ 40475 code: point.name, 40476 value: null 40477 }); 40478 } 40479 40480 } 40481 40482 // replace series options parsed by Highcharts with our own options definition 40483 options.series = seriesOptions; 40484 40485 }, 40486 beforeParse: function (csv) { 40487 40488 var parsedCSV = csvParser(csv); 40489 this.chart.title.update({ text: parsedCSV[0][0] }); 40490 40491 40492 this.chart.update( 40493 { 40494 caption: { 40495 text: parsedCSV[1][0] + '<br/>' + parsedCSV[2][0] 40496 }, 40497 accessibility: { 40498 description: parsedCSV[3][0] 40499 }, 40500 exporting: { 40501 allowHTML: true, 40502 menuItemDefinitions: 40503 { 40504 label: { 40505 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 40506 } 40507 }, 40508 buttons: { 40509 contextButton: { 40510 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 40511 } 40512 } 40513 } 40514 } 40515 ); 40516 return csv; 40517 } 40518 }, 40519 colorAxis: { 40520 dataClasses: [{
40521 color: '#FFFFFF', 40522 to: 0 40523 },{ 40524 color: Highcharts.eiaColors.blue, 40525 from: 0, 40526 to: 1.0 40527 }, { 40528 color: Highcharts.eiaColors.brown, 40529 from: 1.001, 40530 to: 2.0 40531 }, { 40532 color: Highcharts.eiaColors.red, 40533 from: 2.001, 40534 to: 3.0 40535 }, { 40536 color: Highcharts.eiaColors.yellow, 40537 from: 3.001, 40538 to: 4.0 40539 }, { 40540 color: Highcharts.eiaColors.yellow, 40541 from: 4.001, 40542 to: 5.0 40543 }, { 40544 color: Highcharts.eiaColors.lightGreen, 40545 from: 5.001, 40546 to: 6.0 40547 }, { 40548 color: Highcharts.eiaColors.darkGreen, 40549 from: 6.001, 40550 to: 7.0 40551 }] 40552 }, 40553 legend: { 40554 enabled: false 40555 }, 40556 plotOptions: { 40557 map: { 40558 dataLabels: { 40559 style: { 40560 fontSize: '6.8px' 40561 } 40562 }, 40563 nullColor: '#FFFFFF' 40564 } 40565 }, 40566 responsive: { 40567 rules: [{ 40568 condition: { 40569 maxWidth: 321 40570 }, 40571 40572 chartOptions: { 40573 chart: { 40574 height: 380 40575 }, 40576 title: { 40577 margin: 20 40578 }, 40579 plotOptions: { 40580 map: { 40581 dataLabels: { 40582 style: { 40583 fontSize: '7px', 40584 lineHeight: 7 40585 } 40586 } 40587 } 40588 } 40589 } 40590 }, 40591 { 40592 condition: { 40593 minWidth: 322, 40594 maxWidth: 400 40595 }, 40596 40597 chartOptions: { 40598 chart: { 40599 height: 370 40600 }, 40601 title: { 40602 margin: 5 40603 }, 40604 plotOptions: { 40605 map: { 40606 dataLabels: { 40607 style: { 40608 fontSize: '8px', 40609 lineHeight: 8 40610 } 40611 } 40612 } 40613 } 40614 } 40615 }, 40616 { 40617 condition: { 40618 minWidth: 401, 40619 maxWidth: 450 40620 }, 40621 40622 chartOptions: { 40623 chart: { 40624 height: 400 40625 }, 40626 title: { 40627 margin: 5 40628 }, 40629 plotOptions: { 40630 map: { 40631 dataLabels: { 40632 style: { 40633 fontSize: '8px', 40634 lineHeight: 8 40635 } 40636 } 40637 } 40638 } 40639 } 40640 }, 40641 { 40642 condition: { 40643 minWidth: 451, 40644 maxWidth: 667 40645 }, 40646 40647 chartOptions: { 40648 chart: { 40649 height: '65%' 40650 }, 40651 title: { 40652 margin: 15 40653 }, 40654 plotOptions: { 40655 map: { 40656 dataLabels: { 40657 style: { 40658 fontSize: '10px', 40659 lineHeight: 10 40660 } 40661 } 40662 } 40663 } 40664 } 40665 }, 40666 { 40667 condition: { 40668 minWidth: 668 40669 }, 40670 40671 chartOptions: { 40672 chart: { 40673 height: '65%' 40674 }, 40675 title: { 40676 margin: 15 40677 }, 40678 plotOptions: { 40679 map: { 40680 dataLabels: { 40681 style: { 40682 fontSize: '16px' 40683 } 40684 } 40685 } 40686 } 40687 } 40688 }] 40689 } 40690 }); 40691 } 40692}; 40693 40694},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],210:[function(require,module,exports){ 40695const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 40696const csvParser = require('../../includes/csvParser'); 40697 40698module.exports = function (Highcharts, appPath) { 40699 const elementId = 'average-monthly-heating-crude'; 40700 var units = ''; 40701 40702 if ($('#' + elementId).length > 0) { 40703 Highcharts.chart(elementId, { 40704 chart: { 40705 type: 'line', 40706 events: { 40707 load: creditsSizeAndPosition, 40708 redraw: creditsSizeAndPosition 40709 } 40710 }, 40711 credits: { 40712 enabled: true, 40713 href: null, 40714 style: { 40715 cursor: 'normal' 40716 } 40717 }, 40718 data: {
40719 csvURL: appPath + '/heating-oil/charts/' + elementId + '.csv', 40720 startRow: 5, 40721 firstRowAsNames: true, 40722 beforeParse: function (csv) { 40723 var parsedCSV = csvParser(csv); 40724 this.chart.title.update({ text: parsedCSV[0][0] }); 40725 units = parsedCSV[1][0]; 40726 this.chart.yAxis[0].update({ title: { text: units } }); 40727 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 40728 this.chart.update( 40729 { 40730 accessibility: { 40731 description: parsedCSV[4][0], 40732 }, 40733 exporting: { 40734 menuItemDefinitions: 40735 { 40736 label: { 40737 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 40738 } 40739 }, 40740 buttons: { 40741 contextButton: { 40742 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 40743 } 40744 } 40745 } 40746 } 40747 ); 40748 return csv; 40749 } 40750 }, 40751 xAxis: { 40752 type: 'category', 40753 tickInterval: 24, // every 2 years 40754 labels: { 40755 enabled: true, 40756 rotation: -45, 40757 useHTML:true, 40758 format: '{value}' 40759 }, 40760 startOnTick:true, 40761 tickWidth:1 40762 }, 40763 yAxis: { 40764 allowDecimals: true, 40765 tickInterval: 0.5, 40766 maxPadding: 0.01, 40767 labels: { 40768 format: "{value:.2f}" 40769 } 40770 }, 40771 tooltip: { 40772 shared: true, 40773 formatter: function () { 40774 var toolTip = '<b>'+this.points[0].key+'</b><br>'; 40775 toolTip += '<span style="font-size: 16px;color:' + this.points[0].color + '">' + '\u25AC\u2009\u2009'+ '</span><b>'+this.points[0].series.name+': </b>$'+this.points[0].y.toFixed(2)+' '+units+'<br/>'; 40776 toolTip += '<span style="font-size: 16px;color:' + this.points[1].color + '">' + '\u25AC\u2009\u2009'+ '</span><b>'+this.points[1].series.name+': </b>$'+this.points[1].y.toFixed(2)+' '+units; 40777 return toolTip; 40778 } 40779 }, 40780 responsive: { 40781 rules: [{ 40782 condition: { 40783 maxWidth: 450 40784 }, 40785 chartOptions: { 40786 chart: { 40787 height: 475 40788 } 40789 } 40790 }, 40791 { 40792 condition: { 40793 minWidth: 451 40794 }, 40795 40796 chartOptions: { 40797 chart: { 40798 height: '65%' 40799 } 40800 } 40801 }] 40802 } 40803 }); 40804 } 40805}; 40806 40807},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],211:[function(require,module,exports){ 40808const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 40809const csvParser = require('../../includes/csvParser'); 40810 40811module.exports = function (Highcharts, appPath) { 40812 const elementId = 'heating-oil-sales-by-census'; 40813 40814 if ($('#' + elementId).length > 0) { 40815 Highcharts.chart(elementId, { 40816 chart: { 40817 type: 'pie', 40818 spacingBottom: 25, 40819 events: { 40820 load: creditsSizeAndPosition, 40821 redraw: creditsSizeAndPosition 40822 } 40823 }, 40824 title: { 40825 text: '', 40826 margin: 15 40827 }, 40828 credits: { 40829 enabled: true, 40830 href: null, 40831 style: { 40832 cursor: 'normal' 40833 } 40834 }, 40835 data: {
40836 csvURL: appPath + '/heating-oil/charts/' + elementId + '.csv', 40837 startRow: 5, 40838 firstRowAsNames: false, 40839 40840 beforeParse: function (csv) { 40841 var parsedCSV = csvParser(csv); 40842 this.chart.title.update({ text: parsedCSV[0][0] }); 40843 this.chart.subtitle.update({ text: '<span style="color:#888;font-weight:bold;font-size:12px;fill:#888;">' + parsedCSV[1][0] + '</span>' }); 40844 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 40845 this.chart.update( 40846 { 40847 accessibility: { 40848 description: parsedCSV[4][0], 40849 }, 40850 exporting: { 40851 menuItemDefinitions: 40852 { 40853 label: { 40854 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 40855 } 40856 }, 40857 buttons: { 40858 contextButton: { 40859 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 40860 } 40861 } 40862 } 40863 } 40864 ); 40865 return csv; 40866 } 40867 }, 40868 colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.green, Highcharts.eiaColors.yellow], 40869 subtitle: { 40870 text: '', 40871 useHTML: true, 40872 }, 40873 plotOptions: { 40874 pie: { 40875 startAngle: 140, 40876 dataLabels: { 40877 enabled: true, 40878 formatter: function () { 40879 return '<strong>' + this.key + ' ' + Highcharts.numberFormat((this.y*100), 0) + '%</strong>'; 40880 }, 40881 distance: 10, 40882 color: Highcharts.eiaColors.darkGrey, 40883 style: { 40884 "fontSize": "12px" 40885 } 40886 } 40887 } 40888 }, 40889 tooltip: { 40890 useHTML: true, 40891 formatter: function () { 40892 return "<span><b>" + this.key + "</b><br/>" + Highcharts.numberFormat((this.y*100), 0) + " %</span>"; 40893 } 40894 }, 40895 responsive: { 40896 rules: [{ 40897 condition: { 40898 maxWidth: 450 40899 }, 40900 40901 chartOptions: { 40902 chart: { 40903 height: 525 40904 }, 40905 title: { 40906 margin: 5 40907 }, 40908 plotOptions: { 40909 pie: { 40910 size: null, 40911 dataLabels: { 40912 enabled: false 40913 }, 40914 showInLegend: true 40915 } 40916 }, 40917 legend: { 40918 enabled: true, 40919 itemStyle: { 40920 textOverflow: 'none', 40921 lineHeight: 13 40922 } 40923 } 40924 } 40925 }, 40926 { 40927 condition: { 40928 minWidth: 451 40929 }, 40930 40931 chartOptions: { 40932 chart: { 40933 height: '65%' 40934 }, 40935 plotOptions: { 40936 pie: { 40937 size: '65%', 40938 dataLabels: { 40939 enabled: true 40940 }, 40941 showInLegend: false 40942 } 40943 }, 40944 legend: { 40945 enabled: false 40946 } 40947 } 40948 }] 40949 } 40950 }); 40951 } 40952}; 40953 40954},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],212:[function(require,module,exports){ 40955const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 40956const csvParser = require('../../includes/csvParser'); 40957 40958module.exports = function (Highcharts, appPath) { 40959 const elementId = 'major-price-components'; 40960 40961 if ($('#' + elementId).length > 0) { 40962 Highcharts.chart(elementId, { 40963 chart: { 40964 type: 'column', 40965 spacingBottom: 30, 40966 events: { 40967 load: creditsSizeAndPosition, 40968 redraw: creditsSizeAndPosition 40969 } 40970 }, 40971 credits: { 40972 enabled: true, 40973 href: null, 40974 style: { 40975 cursor: 'normal' 40976 } 40977 }, 40978 data: {
40979 csvURL: appPath + '/heating-oil/charts/' + elementId + '.csv', 40980 startRow: 5, 40981 firstRowAsNames: true, 40982 40983 beforeParse: function (csv) { 40984 var parsedCSV = csvParser(csv); 40985 this.chart.title.update({ text: parsedCSV[0][0] }); 40986 this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } }); 40987 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 40988 this.chart.update( 40989 { 40990 accessibility: { 40991 description: parsedCSV[4][0], 40992 }, 40993 exporting: { 40994 menuItemDefinitions: 40995 { 40996 label: { 40997 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 40998 } 40999 }, 41000 buttons: { 41001 contextButton: { 41002 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 41003 } 41004 } 41005 } 41006 } 41007 ); 41008 return csv; 41009 } 41010 }, 41011 colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.green], 41012 xAxis: { 41013 labels: { 41014 format: "{value}", 41015 autoRotation: [-45] 41016 }, 41017 tickWidth: 0 41018 }, 41019 yAxis: { 41020 tickInterval: 0.5, 41021 labels: { 41022 format: "{value:.2f}" 41023 }, 41024 reversedStacks: false 41025 }, 41026 plotOptions: { 41027 column: { 41028 stacking: 'normal', 41029 dataLabels: { 41030 enabled: false 41031 } 41032 } 41033 }, 41034 tooltip: { 41035 shared: true, 41036 useHTML: true, 41037 formatter: function () { 41038 let html = "<b>" + this.points[0].key + "</b><br/>"; 41039 this.points.filter(function (value) { 41040 html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25CF\u2009\u2009' + '</span><b>' + value.series.name + ': </b><span>$' + value.y + ' / gallon</span><br/>'; 41041 }); 41042 return html; 41043 } 41044 }, 41045 responsive: { 41046 rules: [{ 41047 condition: { 41048 maxWidth: 450 41049 }, 41050 chartOptions: { 41051 chart: { 41052 height: 475 41053 } 41054 } 41055 }, 41056 { 41057 condition: { 41058 minWidth: 451 41059 }, 41060 41061 chartOptions: { 41062 chart: { 41063 height: '65%' 41064 } 41065 } 41066 }] 41067 } 41068 }); 41069 } 41070}; 41071 41072},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],213:[function(require,module,exports){ 41073const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 41074const csvParser = require('../../includes/csvParser'); 41075 41076 41077module.exports = function (Highcharts, map, appPath) { 41078 const elementId = 'use-of-heating-oil'; 41079 let mapData = Highcharts.geojson(map, 'map'); 41080 41081 // Our own options definition as two different series, will populate the data in the complete callback 41082 var seriesOptions = [ 41083 { 41084 id: "rank1", 41085 type: "map", 41086 keys: ["postal-code"], 41087 joinBy: ['hc-a2', 'code'], 41088 data: [], 41089 mapData: mapData, 41090 states: { 41091 hover: { 41092 color: '#a4edba' 41093 } 41094 }, 41095 dataLabels: { 41096 enabled: true, 41097 formatter: function () { 41098 if (this.point.nameCode) { 41099 if (this.point.code === "VT" || this.point.code === "NH" || this.point.code === "MA" || this.point.code === "RI" || this.point.code === "CT" || this.point.code === "NJ" || this.point.code === "DE" || this.point.code === "MD" || this.point.code === "DC") { 41100 return this.point.code + " " + this.point.nameCode; 41101 } 41102 else { 41103 return this.point.code + "<br/>" + this.point.nameCode; 41104 } 41105 } 41106 41107 return this.point.code 41108 }, 41109 style: { 41110 fontSize: '10px' 41111 } 41112 }, 41113 tooltip: { 41114 valueSuffix: '' 41115 }, 41116 showInLegend: false 41117 }, 41118 { 41119 type: 'mapline', 41120 data: Highcharts.geojson(map, 'mapline'), 41121 color: 'silver', 41122 nullColor : 'silver', 41123 lineWidth : 1, 41124 showInLegend: false, 41125 enableMouseTracking: false, 41126 states : { 41127 inactive : { 41128 enabled : false 41129 } 41130 } 41131 } 41132 ]; 41133 41134 if ($('#' + elementId).length > 0) { 41135 Highcharts.mapChart(elementId, { 41136 chart: { 41137 map: map, 41138 spacingBottom: 25, 41139 events: { 41140 load: creditsSizeAndPosition, 41141 redraw: creditsSizeAndPosition 41142 } 41143 }, 41144 mapView : { 41145 insetOptions : { 41146 borderWidth : 1, 41147 borderColor : 'silver' 41148 } 41149 }, 41150 credits: { 41151 enabled: false, 41152 href: null, 41153 style: { 41154 cursor: 'normal' 41155 } 41156 }, 41157 caption: { 41158 verticalAlign: 'bottom', 41159 useHTML: true, 41160 margin: 0, 41161 style: { 41162 color: '#888', 41163 fontSize: '11px' 41164 }, 41165 x: 32, 41166 y: 33 41167 }, 41168 tooltip: { 41169 enabled: true, 41170 useHTML: true, 41171 formatter: function () { 41172 if (this.point.nameCode) { 41173 return '<b>' + this.point.name + '</b><br/>' + this.point.nameCode; 41174 } 41175 else { 41176 return false; 41177 } 41178 }, 41179 style: { 41180 textAlign: 'center' 41181 } 41182 }, 41183 legend: { 41184 enabled: false 41185 }, 41186 data: {
41187 csvURL: appPath + '/heating-oil/charts/' + elementId + '.csv', 41188 startRow: 4, 41189 firstRowAsNames: false, 41190 complete: function (options) { 41191 var point; 41192 41193 for (var i = 0; i < options.series[0].data.length; i++) { 41194 point = options.series[0].data[i]; 41195 41196 if (point.value) { 41197 switch (point.value) { 41198 case 1: 41199 seriesOptions[0].data.push({ 41200 code: point.name, 41201 color: Highcharts.eiaColors.blue, 41202 nameCode: "<span>#" + point.value + "</span>" 41203 }); 41204 break; 41205 case 2: 41206 seriesOptions[0].data.push({ 41207 code: point.name, 41208 color: Highcharts.eiaColors.brown, 41209 nameCode: "<span>#" + point.value + "</span>" 41210 }); 41211 break; 41212 case 3: 41213 seriesOptions[0].data.push({ 41214 code: point.name, 41215 color: Highcharts.eiaColors.green, 41216 nameCode: "<span>#" + point.value + "</span>" 41217 }); 41218 break; 41219 case 4: 41220 seriesOptions[0].data.push({ 41221 code: point.name, 41222 color: Highcharts.eiaColors.yellow, 41223 nameCode: "<span>#" + point.value + "</span>" 41224 }); 41225 break; 41226 default: 41227 seriesOptions[0].data.push({ 41228 code: point.name, 41229 color: Highcharts.eiaColors.red, 41230 nameCode: "<span>#" + point.value + "</span>" 41231 }); 41232 } 41233 } 41234 } 41235 // replace series options parsed by Highcharts with our own options definition 41236 options.series = seriesOptions; 41237 }, 41238 beforeParse: function (csv) { 41239 var parsedCSV = csvParser(csv); 41240 this.chart.title.update({ text: parsedCSV[0][0] }); 41241 this.chart.caption.update({ text: parsedCSV[1][0] + '<br/>' + parsedCSV[2][0] }); 41242 41243 this.chart.update( 41244 { 41245 accessibility: { 41246 description: parsedCSV[3][0] 41247 }, 41248 exporting: { 41249 allowHTML: true, 41250 menuItemDefinitions: 41251 { 41252 label: { 41253 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 41254 } 41255 }, 41256 buttons: { 41257 contextButton: { 41258 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 41259 } 41260 } 41261 } 41262 } 41263 ); 41264 return csv; 41265 } 41266 }, 41267 responsive: { 41268 rules: [{ 41269 condition: { 41270 maxWidth: 321 41271 }, 41272 41273 chartOptions: { 41274 chart: { 41275 height: 330 41276 }, 41277 title: { 41278 margin: 5 41279 } 41280 } 41281 }, 41282 { 41283 condition: { 41284 minWidth: 322, 41285 maxWidth: 400 41286 }, 41287 41288 chartOptions: { 41289 chart: { 41290 height: 350 41291 }, 41292 title: { 41293 margin: 5 41294 } 41295 } 41296 }, 41297 { 41298 condition: { 41299 minWidth: 401, 41300 maxWidth: 450 41301 }, 41302 41303 chartOptions: { 41304 chart: { 41305 height: 380 41306 }, 41307 title: { 41308 margin: 5 41309 } 41310 } 41311 }, 41312 { 41313 condition: { 41314 minWidth: 451 41315 }, 41316 41317 chartOptions: { 41318 chart: { 41319 height: '65%' 41320 }, 41321 title: { 41322 margin: 15 41323 } 41324 } 41325 }] 41326 } 41327 }); 41328 } 41329}; 41330 41331},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],214:[function(require,module,exports){ 41332const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 41333const csvParser = require('../../includes/csvParser'); 41334 41335module.exports = function (Highcharts, appPath) { 41336 const elementId = 'consumption-by-end-use-sector'; 41337 var units = ''; 41338 41339 if ($('#' + elementId).length > 0) { 41340 Highcharts.chart(elementId, { 41341 chart: { 41342 type: 'column', 41343 spacingBottom: 25, 41344 events: { 41345 load: creditsSizeAndPosition, 41346 redraw: creditsSizeAndPosition 41347 } 41348 }, 41349 credits: { 41350 enabled: true, 41351 href: null, 41352 style: { 41353 cursor: 'normal' 41354 } 41355 }, 41356 data: {
41357 csvURL: appPath + '/hydrocarbon-gas-liquids/charts/consumption-by-end-use-sector.csv', 41358 startRow: 5, 41359 firstRowAsNames: true, 41360 41361 beforeParse: function (csv) { 41362 var parsedCSV = csvParser(csv); 41363 this.chart.title.update({ text: parsedCSV[0][0] }); 41364 this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } }); 41365 units = parsedCSV[1][0]; 41366 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 41367 this.chart.update( 41368 { 41369 accessibility: { 41370 description: parsedCSV[4][0], 41371 }, 41372 exporting: { 41373 menuItemDefinitions: 41374 { 41375 label: { 41376 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 41377 } 41378 }, 41379 buttons: { 41380 contextButton: { 41381 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 41382 } 41383 } 41384 } 41385 } 41386 ); 41387 return csv; 41388 } 41389 }, 41390 colors: [Highcharts.eiaColors.brown, Highcharts.eiaColors.blue, Highcharts.eiaColors.green], 41391 xAxis: { 41392 labels: { 41393 format: "{value}" 41394 } 41395 }, 41396 yAxis: { 41397 tickInterval: 0.25, 41398 labels: { 41399 format: "{value:.2f}" 41400 }, 41401 reversedStacks: false 41402 }, 41403 tooltip: { 41404 useHTML: true, 41405 shared: true, 41406 formatter: function () { 41407 let html = "<b>" + this.points[0].key + "</b><br/>"; 41408 this.points.filter(function (value) { 41409 html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25CF\u2009\u2009' + '</span><b>' + value.series.name + ': </b><span>' + value.y.toFixed(2) + ' ' + units + '</span><br/>'; 41410 }); 41411 return html; 41412 } 41413 }, 41414 plotOptions: { 41415 column: { 41416 stacking: 'nomral', 41417 dataLabels: { 41418 enabled: false 41419 } 41420 } 41421 }, 41422 responsive: { 41423 rules: [{ 41424 condition: { 41425 maxWidth: 450 41426 }, 41427 chartOptions: { 41428 chart: { 41429 height: 410 41430 } 41431 } 41432 }, 41433 { 41434 condition: { 41435 minWidth: 451 41436 }, 41437 41438 chartOptions: { 41439 chart: { 41440 height: '65%' 41441 } 41442 } 41443 }] 41444 } 41445 }); 41446 } 41447}; 41448 41449},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],215:[function(require,module,exports){ 41450const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 41451const csvParser = require('../../includes/csvParser'); 41452 41453module.exports = function (Highcharts, appPath) { 41454 const elementId = 'consumption-by-type'; 41455 var units = ''; 41456 41457 if ($('#' + elementId).length > 0) { 41458 Highcharts.chart(elementId, { 41459 chart: { 41460 type: 'column', 41461 spacingBottom: 30, 41462 events: { 41463 load: creditsSizeAndPosition, 41464 redraw: creditsSizeAndPosition 41465 } 41466 }, 41467 credits: { 41468 enabled: true, 41469 href: null, 41470 style: { 41471 cursor: 'normal' 41472 } 41473 }, 41474 data: {
41475 csvURL: appPath + '/hydrocarbon-gas-liquids/charts/consumption-by-type.csv', 41476 startRow: 5, 41477 firstRowAsNames: true, 41478 beforeParse: function (csv) { 41479 var parsedCSV = csvParser(csv); 41480 units = parsedCSV[1][0]; 41481 this.chart.title.update({ text: parsedCSV[0][0] }); 41482 this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } }); 41483 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 41484 this.chart.update( 41485 { 41486 accessibility: { 41487 description: parsedCSV[4][0], 41488 }, 41489 exporting: { 41490 menuItemDefinitions: 41491 { 41492 label: { 41493 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 41494 } 41495 }, 41496 buttons: { 41497 contextButton: { 41498 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 41499 } 41500 } 41501 } 41502 } 41503 ); 41504 return csv; 41505 } 41506 }, 41507 colors: [Highcharts.eiaColors.brown, Highcharts.eiaColors.blue, Highcharts.eiaColors.darkBlue, Highcharts.eiaColors.yellow, Highcharts.eiaColors.green, Highcharts.eiaColors.red], 41508 xAxis: { 41509 labels: { 41510 format: "{value}" 41511 } 41512 }, 41513 yAxis: { 41514 reversedStacks:false, 41515 tickInterval: 0.5, 41516 labels: { 41517 format: "{value:.2f}" 41518 } 41519 }, 41520 plotOptions: { 41521 column: { 41522 stacking: 'normal', 41523 dataLabels: { 41524 enabled: false 41525 } 41526 } 41527 }, 41528 tooltip: { 41529 shared: true, 41530 useHTML: true, 41531 formatter: function () { 41532 let html = "<b>" + this.points[0].key + "</b><br/>"; 41533 this.points.filter(function (value) { 41534 html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25CF\u2009\u2009' + '</span><b>' + value.series.name + ': </b><span>' + value.y.toFixed(2) + ' ' + units + '</span><br/>'; 41535 }); 41536 return html; 41537 } 41538 }, 41539 responsive: { 41540 rules: [{ 41541 condition: { 41542 maxWidth: 450 41543 }, 41544 chartOptions: { 41545 chart: { 41546 height: 450 41547 } 41548 } 41549 }, 41550 { 41551 condition: { 41552 minWidth: 451 41553 }, 41554 41555 chartOptions: { 41556 chart: { 41557 height: '65%' 41558 } 41559 } 41560 }] 41561 } 41562 }); 41563 } 41564}; 41565 41566},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],216:[function(require,module,exports){ 41567const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 41568const csvParser = require('../../includes/csvParser'); 41569 41570module.exports = function (Highcharts, appPath) { 41571 const elementId = 'exports-by-type'; 41572 var units = ''; 41573 41574 if ($('#' + elementId).length > 0) { 41575 Highcharts.chart(elementId, { 41576 chart: { 41577 type: 'column', 41578 spacingBottom: 25, 41579 events: { 41580 load: creditsSizeAndPosition, 41581 redraw: creditsSizeAndPosition 41582 } 41583 }, 41584 credits: { 41585 enabled: true, 41586 href: null, 41587 style: { 41588 cursor: 'normal' 41589 } 41590 }, 41591 data: {
41592 csvURL: appPath + '/hydrocarbon-gas-liquids/charts/' + elementId + '.csv', 41593 startRow: 5, 41594 firstRowAsNames: true, 41595 41596 beforeParse: function (csv) { 41597 var parsedCSV = csvParser(csv); 41598 this.chart.title.update({ text: parsedCSV[0][0] }); 41599 this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } }); 41600 units = parsedCSV[1][0]; 41601 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 41602 this.chart.update( 41603 { 41604 accessibility: { 41605 description: parsedCSV[4][0], 41606 }, 41607 exporting: { 41608 menuItemDefinitions: 41609 { 41610 label: { 41611 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 41612 } 41613 }, 41614 buttons: { 41615 contextButton: { 41616 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 41617 } 41618 } 41619 } 41620 } 41621 ); 41622 return csv; 41623 } 41624 }, 41625 colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.green,Highcharts.eiaColors.brown, Highcharts.eiaColors.red], 41626 xAxis: { 41627 labels: { 41628 format: "{value}" 41629 } 41630 }, 41631 yAxis: { 41632 tickInterval: 0.25, 41633 labels: { 41634 format: "{value:.2f}" 41635 }, 41636 reversedStacks: false 41637 }, 41638 plotOptions: { 41639 column: { 41640 stacking: 'normal', 41641 dataLabels: { 41642 enabled: false 41643 } 41644 } 41645 }, 41646 tooltip: { 41647 shared: true, 41648 useHTML: true, 41649 formatter: function () { 41650 let html = "<b>" + this.points[0].key + "</b><br/>"; 41651 this.points.filter(function (value) { 41652 html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25CF\u2009\u2009' + '</span><b>' + value.series.name + ': </b><span>' + value.y.toFixed(2) + ' ' + units + '</span><br/>'; 41653 }); 41654 return html; 41655 } 41656 }, 41657 responsive: { 41658 rules: [{ 41659 condition: { 41660 maxWidth: 450 41661 }, 41662 chartOptions: { 41663 chart: { 41664 height: 400 41665 } 41666 } 41667 }, 41668 { 41669 condition: { 41670 minWidth: 451 41671 }, 41672 41673 chartOptions: { 41674 chart: { 41675 height: '65%' 41676 } 41677 } 41678 }] 41679 } 41680 }); 41681 } 41682}; 41683 41684},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],217:[function(require,module,exports){ 41685const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 41686const csvParser = require('../../includes/csvParser'); 41687 41688module.exports = function (Highcharts, appPath) { 41689 const elementId = 'production-by-source'; 41690 var units = ''; 41691 41692 if ($('#' + elementId).length > 0) { 41693 Highcharts.chart(elementId, { 41694 chart: { 41695 type: 'column', 41696 spacingBottom: 30, 41697 events: { 41698 load: creditsSizeAndPosition, 41699 redraw: creditsSizeAndPosition 41700 } 41701 }, 41702 credits: { 41703 enabled: true, 41704 href: null, 41705 style: { 41706 cursor: 'normal' 41707 } 41708 }, 41709 data: {
41710 csvURL: appPath + '/hydrocarbon-gas-liquids/charts/' + elementId + '.csv', 41711 startRow: 5, 41712 firstRowAsNames: true, 41713 beforeParse: function (csv) { 41714 var parsedCSV = csvParser(csv); 41715 41716 units = parsedCSV[1][0]; 41717 this.chart.title.update({ text: parsedCSV[0][0] }); 41718 this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } }); 41719 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 41720 this.chart.update( 41721 { 41722 accessibility: { 41723 description: parsedCSV[4][0], 41724 }, 41725 exporting: { 41726 menuItemDefinitions: 41727 { 41728 label: { 41729 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 41730 } 41731 }, 41732 buttons: { 41733 contextButton: { 41734 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 41735 } 41736 } 41737 } 41738 } 41739 ); 41740 return csv; 41741 } 41742 }, 41743 colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown], 41744 xAxis: { 41745 labels: { 41746 format: "{value}" 41747 }, 41748 tickInterval: 1, 41749 type: 'dateTime', 41750 }, 41751 yAxis: { 41752 reversedStacks:false, 41753 labels: { 41754 format: "{value:.1f}" 41755 }, 41756 tickInterval: .5 41757 }, 41758 plotOptions: { 41759 column: { 41760 stacking: 'normal', 41761 dataLabels: { 41762 enabled: false 41763 } 41764 } 41765 }, 41766 tooltip: { 41767 useHTML: true, 41768 shared: true, 41769 formatter: function () { 41770 let html = "<b>" + this.points[0].key + "</b><br/>"; 41771 this.points.filter(function (value) { 41772 html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25CF\u2009\u2009' + '</span><b>' + value.series.name + ': </b><span>' + value.y.toFixed(2) + ' ' + units + '</span><br/>'; 41773 }); 41774 return html; 41775 } 41776 }, 41777 responsive: { 41778 rules: [{ 41779 condition: { 41780 maxWidth: 450 41781 }, 41782 chartOptions: { 41783 chart: { 41784 height: 400 41785 }, 41786 legend: { 41787 itemStyle: { 41788 textOverflow: 'none', 41789 whiteSpace: 'break-word', 41790 }, 41791 itemWidth: 125 41792 } 41793 } 41794 }, 41795 { 41796 condition: { 41797 minWidth: 451 41798 }, 41799 41800 chartOptions: { 41801 chart: { 41802 height: '65%' 41803 } 41804 } 41805 }] 41806 } 41807 }); 41808 } 41809}; 41810 41811},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],218:[function(require,module,exports){ 41812const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 41813const csvParser = require('../../includes/csvParser'); 41814 41815module.exports = function (Highcharts, appPath) { 41816 const elementId = 'production-by-type'; 41817 var units = ""; 41818 41819 if ($('#' + elementId).length > 0) { 41820 Highcharts.chart(elementId, { 41821 chart: { 41822 type: 'column', 41823 spacingBottom: 25, 41824 events: { 41825 load: creditsSizeAndPosition, 41826 redraw: creditsSizeAndPosition 41827 } 41828 }, 41829 credits: { 41830 enabled: true, 41831 href: null, 41832 style: { 41833 cursor: 'normal' 41834 } 41835 }, 41836 data: {
41837 csvURL: appPath + '/hydrocarbon-gas-liquids/charts/' + elementId + '.csv', 41838 startRow: 5, 41839 firstRowAsNames: true, 41840 41841 beforeParse: function (csv) { 41842 var parsedCSV = csvParser(csv); 41843 41844 this.chart.title.update({ text: parsedCSV[0][0] }); 41845 units = ' ' + parsedCSV[1][0]; 41846 this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } }); 41847 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 41848 this.chart.update( 41849 { 41850 accessibility: { 41851 description: parsedCSV[4][0], 41852 }, 41853 exporting: { 41854 menuItemDefinitions: 41855 { 41856 label: { 41857 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 41858 } 41859 }, 41860 buttons: { 41861 contextButton: { 41862 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 41863 } 41864 } 41865 } 41866 } 41867 ); 41868 return csv; 41869 } 41870 }, 41871 colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown,Highcharts.eiaColors.red, Highcharts.eiaColors.yellow, Highcharts.eiaColors.green, Highcharts.eiaColors.darkGrey], 41872 xAxis: { 41873 labels: { 41874 format: "{value}" 41875 } 41876 }, 41877 yAxis: { 41878 labels: { 41879 format: "{value:.1f}" 41880 }, 41881 tickInterval: .5, 41882 reversedStacks: false 41883 }, 41884 plotOptions: { 41885 column: { 41886 stacking: 'normal', 41887 dataLabels: { 41888 enabled: false 41889 } 41890 } 41891 }, 41892 tooltip: { 41893 useHTML: true, 41894 shared: true, 41895 formatter: function () { 41896 let html = "<b>" + this.points[0].key + "</b><br/>"; 41897 this.points.filter(function (value) { 41898 html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25CF\u2009\u2009' + '</span><b>' + value.series.name + ': </b><span>' + value.y.toFixed(2) + units + '</span><br/>'; 41899 }); 41900 return html; 41901 } 41902 }, 41903 responsive: { 41904 rules: [{ 41905 condition: { 41906 maxWidth: 450 41907 }, 41908 chartOptions: { 41909 chart: { 41910 height: 394 41911 } 41912 } 41913 }, 41914 { 41915 condition: { 41916 minWidth: 451 41917 }, 41918 41919 chartOptions: { 41920 chart: { 41921 height: '65%' 41922 } 41923 } 41924 }] 41925 } 41926 }); 41927 } 41928}; 41929 41930},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],219:[function(require,module,exports){ 41931const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 41932const csvParser = require('../../includes/csvParser'); 41933 41934module.exports = function (Highcharts, appPath) { 41935 const elementId = 'production-from-petroleum-refining'; 41936 var units = ''; 41937 41938 if ($('#' + elementId).length > 0) { 41939 Highcharts.chart(elementId, { 41940 chart: { 41941 type: 'column', 41942 spacingBottom: 25, 41943 events: { 41944 load: creditsSizeAndPosition, 41945 redraw: creditsSizeAndPosition 41946 } 41947 }, 41948 credits: { 41949 enabled: true, 41950 href: null, 41951 style: { 41952 cursor: 'normal' 41953 } 41954 }, 41955 data: {
41956 csvURL: appPath + '/hydrocarbon-gas-liquids/charts/' + elementId + '.csv', 41957 startRow: 5, 41958 firstRowAsNames: true, 41959 beforeParse: function (csv) { 41960 var parsedCSV = csvParser(csv); 41961 this.chart.title.update({ text: parsedCSV[0][0] }); 41962 this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } }); 41963 units = parsedCSV[1][0]; 41964 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 41965 this.chart.update( 41966 { 41967 accessibility: { 41968 description: parsedCSV[4][0], 41969 }, 41970 exporting: { 41971 menuItemDefinitions: 41972 { 41973 label: { 41974 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 41975 } 41976 }, 41977 buttons: { 41978 contextButton: { 41979 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 41980 } 41981 } 41982 } 41983 } 41984 ); 41985 return csv; 41986 } 41987 }, 41988 colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.darkGrey, Highcharts.eiaColors.brown], 41989 xAxis: { 41990 labels: { 41991 format: "{value}" 41992 } 41993 }, 41994 yAxis: { 41995 tickInterval: 0.1, 41996 reversedStacks: false 41997 }, 41998 plotOptions: { 41999 column: { 42000 stacking: 'normal', 42001 dataLabels: { 42002 enabled: false 42003 } 42004 } 42005 }, 42006 tooltip: { 42007 useHTML: true, 42008 shared: true, 42009 formatter: function () { 42010 let html = "<b>" + this.points[0].key + "</b><br/>"; 42011 this.points.filter(function (value) { 42012 html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25CF\u2009\u2009' + '</span><b>' + value.series.name + ': </b><span>' + value.y.toFixed(2) + ' ' + units + '</span><br/>'; 42013 }); 42014 return html; 42015 } 42016 }, 42017 responsive: { 42018 rules: [{ 42019 condition: { 42020 maxWidth: 450 42021 }, 42022 chartOptions: { 42023 chart: { 42024 height: 400 42025 } 42026 } 42027 }, 42028 { 42029 condition: { 42030 minWidth: 451 42031 }, 42032 42033 chartOptions: { 42034 chart: { 42035 height: '65%' 42036 } 42037 } 42038 }] 42039 } 42040 }); 42041 } 42042}; 42043 42044},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],220:[function(require,module,exports){ 42045const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 42046const csvParser = require('../../includes/csvParser'); 42047 42048module.exports = function (Highcharts, appPath) { 42049 const elementId = 'production-natural-gas-processing'; 42050 var units = ''; 42051 42052 if ($('#' + elementId).length > 0) { 42053 Highcharts.chart(elementId, { 42054 chart: { 42055 type: 'column', 42056 spacingBottom: 25, 42057 events: { 42058 load: creditsSizeAndPosition, 42059 redraw: creditsSizeAndPosition 42060 } 42061 }, 42062 credits: { 42063 enabled: true, 42064 href: null, 42065 style: { 42066 cursor: 'normal' 42067 } 42068 }, 42069 data: {
42070 csvURL: appPath + '/hydrocarbon-gas-liquids/charts/' + elementId + '.csv', 42071 startRow: 5, 42072 firstRowAsNames: true, 42073 42074 beforeParse: function (csv) { 42075 var parsedCSV = csvParser(csv); 42076 this.chart.title.update({ text: parsedCSV[0][0] }); 42077 this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } }); 42078 units = parsedCSV[1][0]; 42079 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 42080 this.chart.update( 42081 { 42082 accessibility: { 42083 description: parsedCSV[4][0], 42084 }, 42085 exporting: { 42086 menuItemDefinitions: 42087 { 42088 label: { 42089 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 42090 } 42091 }, 42092 buttons: { 42093 contextButton: { 42094 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 42095 } 42096 } 42097 } 42098 } 42099 ); 42100 return csv; 42101 } 42102 }, 42103 colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.red, Highcharts.eiaColors.yellow, Highcharts.eiaColors.green], 42104 xAxis: { 42105 labels: { 42106 format: "{value}" 42107 } 42108 }, 42109 yAxis: { 42110 tickInterval: 0.5, 42111 labels: { 42112 format: "{value:.2f}" 42113 }, 42114 reversedStacks: false 42115 }, 42116 plotOptions: { 42117 column: { 42118 stacking: 'normal', 42119 dataLabels: { 42120 enabled: false 42121 } 42122 } 42123 }, 42124 tooltip: { 42125 useHTML: true, 42126 shared: true, 42127 formatter: function () { 42128 let html = "<b>" + this.points[0].key + "</b><br/>"; 42129 this.points.filter(function (value) { 42130 html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25CF\u2009\u2009' + '</span><b>' + value.series.name + ': </b><span>' + value.y.toFixed(2) + ' ' + units + '</span><br/>'; 42131 }); 42132 return html; 42133 } 42134 }, 42135 responsive: { 42136 rules: [{ 42137 condition: { 42138 maxWidth: 450 42139 }, 42140 chartOptions: { 42141 chart: { 42142 height: 400 42143 } 42144 } 42145 }, 42146 { 42147 condition: { 42148 minWidth: 451 42149 }, 42150 42151 chartOptions: { 42152 chart: { 42153 height: '65%' 42154 } 42155 } 42156 }] 42157 } 42158 }); 42159 } 42160}; 42161 42162},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],221:[function(require,module,exports){ 42163const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 42164const csvParser = require('../../includes/csvParser'); 42165 42166module.exports = function (Highcharts, appPath) { 42167 const elementId = 'propane-by-regionofentry'; 42168 var units = ''; 42169 42170 if ($('#' + elementId).length > 0) { 42171 Highcharts.chart(elementId, { 42172 chart: { 42173 type: 'column', 42174 spacingBottom: 30, 42175 events: { 42176 load: creditsSizeAndPosition, 42177 redraw: creditsSizeAndPosition 42178 } 42179 }, 42180 credits: { 42181 enabled: true, 42182 href: null, 42183 style: { 42184 cursor: 'normal' 42185 } 42186 }, 42187 data: {
42188 csvURL: appPath + '/hydrocarbon-gas-liquids/charts/' + elementId + '.csv', 42189 startRow: 5, 42190 firstRowAsNames: true, 42191 42192 beforeParse: function (csv) { 42193 var parsedCSV = csvParser(csv); 42194 this.chart.title.update({ text: parsedCSV[0][0] }); 42195 this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } }); 42196 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 42197 units = parsedCSV[1][0]; 42198 this.chart.update( 42199 { 42200 accessibility: { 42201 description: parsedCSV[4][0], 42202 }, 42203 exporting: { 42204 menuItemDefinitions: 42205 { 42206 label: { 42207 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 42208 } 42209 }, 42210 buttons: { 42211 contextButton: { 42212 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 42213 } 42214 } 42215 } 42216 } 42217 ); 42218 return csv; 42219 } 42220 }, 42221 colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.green, Highcharts.eiaColors.yellow], 42222 xAxis: { 42223 labels: { 42224 format: "{value}" 42225 }, 42226 tickWidth: 1, 42227 tickmarkPlacement: 'on' 42228 }, 42229 yAxis: { 42230 tickInterval: 20, 42231 type: 'category', 42232 labels: { 42233 format: "{value}" 42234 }, 42235 reversedStacks:false 42236 }, 42237 plotOptions: { 42238 column: { 42239 stacking: 'normal', 42240 } 42241 }, 42242 tooltip: { 42243 useHTML: true, 42244 shared: true, 42245 formatter: function () { 42246 let html = "<b>" + this.points[0].key + "</b><br/>"; 42247 this.points.filter(function (value) { 42248 html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25CF\u2009\u2009' + '</span><b>' + value.series.name + ': </b><span>' + value.y.toFixed(2) + ' ' + units + '</span><br/>'; 42249 }); 42250 return html; 42251 } 42252 }, 42253 responsive: { 42254 rules: [{ 42255 condition: { 42256 maxWidth: 450 42257 }, 42258 chartOptions: { 42259 chart: { 42260 height: 400 42261 } 42262 } 42263 }, 42264 { 42265 condition: { 42266 minWidth: 451 42267 }, 42268 42269 chartOptions: { 42270 chart: { 42271 height: '65%' 42272 } 42273 } 42274 }] 42275 } 42276 }); 42277 } 42278}; 42279 42280},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],222:[function(require,module,exports){ 42281const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 42282const csvParser = require('../../includes/csvParser'); 42283 42284module.exports = function (Highcharts, appPath) { 42285 const elementId = 'propane-consumption-by-end-use-sector'; 42286 var units = ''; 42287 42288 if ($('#' + elementId).length > 0) { 42289 Highcharts.chart(elementId, { 42290 chart: { 42291 type: 'column', 42292 spacingBottom: 25, 42293 events: { 42294 load: creditsSizeAndPosition, 42295 redraw: creditsSizeAndPosition 42296 } 42297 }, 42298 credits: { 42299 enabled: true, 42300 href: null, 42301 style: { 42302 cursor: 'normal' 42303 } 42304 }, 42305 data: {
42306 csvURL: appPath + '/hydrocarbon-gas-liquids/charts/' + elementId + '.csv', 42307 startRow: 5, 42308 firstRowAsNames: true, 42309 42310 beforeParse: function (csv) { 42311 var parsedCSV = csvParser(csv); 42312 this.chart.title.update({ text: parsedCSV[0] }); 42313 this.chart.yAxis[0].update({ title: { text: parsedCSV[1] } }); 42314 this.chart.credits.update({ text: parsedCSV[2] + '<br>' + parsedCSV[3] }); 42315 units = parsedCSV[1]; 42316 this.chart.update( 42317 { 42318 accessibility: { 42319 description: parsedCSV[4][0], 42320 }, 42321 exporting: { 42322 menuItemDefinitions: 42323 { 42324 label: { 42325 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 42326 } 42327 }, 42328 buttons: { 42329 contextButton: { 42330 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 42331 } 42332 } 42333 } 42334 } 42335 ); 42336 return csv; 42337 } 42338 }, 42339 colors: [Highcharts.eiaColors.brown, Highcharts.eiaColors.blue, Highcharts.eiaColors.green], 42340 xAxis: { 42341 labels: { 42342 format: "{value}" 42343 }, 42344 tickWidth: 1, 42345 tickmarkPlacement: 'on' 42346 }, 42347 yAxis: { 42348 labels: { 42349 format: "{value:.1f}" 42350 }, 42351 tickInterval: .1, 42352 reversedStacks: false 42353 }, 42354 plotOptions: { 42355 column: { 42356 stacking: 'normal', 42357 dataLabels: { 42358 enabled: false 42359 } 42360 } 42361 }, 42362 tooltip: { 42363 useHTML: true, 42364 shared: true, 42365 formatter: function () { 42366 let html = "<b>" + this.points[0].key + "</b><br/>"; 42367 this.points.filter(function (value) { 42368 html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25CF\u2009\u2009' + '</span><b>' + value.series.name + ': </b><span>' + value.y.toFixed(2) + ' ' + units + '</span><br/>'; 42369 }); 42370 return html; 42371 } 42372 }, 42373 responsive: { 42374 rules: [{ 42375 condition: { 42376 maxWidth: 450 42377 }, 42378 chartOptions: { 42379 chart: { 42380 height: 400 42381 } 42382 } 42383 }, 42384 { 42385 condition: { 42386 minWidth: 451 42387 }, 42388 42389 chartOptions: { 42390 chart: { 42391 height: '65%' 42392 } 42393 } 42394 }] 42395 } 42396 }); 42397 } 42398}; 42399 42400},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],223:[function(require,module,exports){ 42401const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 42402const csvParser = require('../../includes/csvParser'); 42403 42404module.exports = function (Highcharts, appPath) { 42405 const elementId = 'propane-prices-by-region'; 42406 var units = ''; 42407 42408 if ($('#' + elementId).length > 0) { 42409 Highcharts.chart(elementId, { 42410 chart: { 42411 type: 'line', 42412 spacingBottom: 30, 42413 events: { 42414 load: creditsSizeAndPosition, 42415 redraw: creditsSizeAndPosition 42416 } 42417 }, 42418 credits: { 42419 enabled: true, 42420 href: null, 42421 style: { 42422 cursor: 'normal' 42423 } 42424 }, 42425 data: {
42426 csvURL: appPath + '/hydrocarbon-gas-liquids/charts/' + elementId + '.csv', 42427 startRow: 5, 42428 firstRowAsNames: true, 42429 42430 beforeParse: function (csv) { 42431 var parsedCSV = csvParser(csv); 42432 this.chart.title.update({ text: parsedCSV[0][0] }); 42433 this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } }); 42434 units = parsedCSV[1][0]; 42435 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 42436 this.chart.update( 42437 { 42438 accessibility: { 42439 description: parsedCSV[4][0], 42440 }, 42441 exporting: { 42442 menuItemDefinitions: 42443 { 42444 label: { 42445 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 42446 } 42447 }, 42448 buttons: { 42449 contextButton: { 42450 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 42451 } 42452 } 42453 } 42454 } 42455 ); 42456 return csv; 42457 } 42458 }, 42459 colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.green, Highcharts.eiaColors.yellow], 42460 xAxis: { 42461 min: .5, 42462 tickWidth: 1, 42463 tickmarkPlacement: 'on' 42464 }, 42465 yAxis: { 42466 labels: { 42467 format: '${value:.2f}' 42468 }, 42469 tickInterval: 0.5, 42470 }, 42471 tooltip: { 42472 useHTML: true, 42473 shared: true, 42474 formatter: function () { 42475 let html = "<b>" + this.points[0].key + "</b><br/>"; 42476 this.points.filter(function (value) { 42477 html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25AC\u2009\u2009' + '</span><b>' + value.series.name + ': </b><span>$' + value.y.toFixed(2) + ' ' + units + '</span><br/>'; 42478 }); 42479 return html; 42480 } 42481 }, 42482 responsive: { 42483 rules: [{ 42484 condition: { 42485 maxWidth: 450 42486 }, 42487 chartOptions: { 42488 chart: { 42489 height: 400 42490 } 42491 } 42492 }, 42493 { 42494 condition: { 42495 minWidth: 451 42496 }, 42497 42498 chartOptions: { 42499 chart: { 42500 height: '65%' 42501 } 42502 } 42503 }] 42504 } 42505 }); 42506 } 42507}; 42508 42509},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],224:[function(require,module,exports){ 42510const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 42511const csvParser = require('../../includes/csvParser'); 42512 42513module.exports = function (Highcharts, appPath) { 42514 const elementId = 'propane-prices'; 42515 const monthNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; 42516 var tickPositions = []; 42517 var units = ''; 42518 42519 if ($('#' + elementId).length > 0) { 42520 Highcharts.chart(elementId, { 42521 chart: { 42522 type: 'line', 42523 spacingBottom: 25, 42524 events: { 42525 load: creditsSizeAndPosition, 42526 redraw: creditsSizeAndPosition 42527 } 42528 }, 42529 credits: { 42530 enabled: true, 42531 href: null, 42532 style: { 42533 cursor: 'normal' 42534 } 42535 }, 42536 data: {
42537 csvURL: appPath + '/hydrocarbon-gas-liquids/charts/' + elementId + '.csv', 42538 startRow: 5, 42539 firstRowAsNames: true, 42540 complete: function (options) { 42541 }, 42542 beforeParse: function (csv) { 42543 var parsedCSV = csvParser(csv); 42544 this.chart.title.update({ text: parsedCSV[0][0] }); 42545 this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } }); 42546 units = parsedCSV[1][0]; 42547 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 42548 this.chart.update( 42549 { 42550 accessibility: { 42551 description: parsedCSV[4][0], 42552 }, 42553 exporting: { 42554 menuItemDefinitions: 42555 { 42556 label: { 42557 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 42558 } 42559 }, 42560 buttons: { 42561 contextButton: { 42562 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 42563 } 42564 } 42565 } 42566 } 42567 ); 42568 return csv; 42569 }, 42570 parseDate: function (date) { 42571 const dateArray = date.split('-'); 42572 const year = parseInt('20' + (dateArray[0].length === 1 ? '0' + dateArray[0] : dateArray[0]));
42573 const month = monthNames.indexOf(dateArray[1]); 42574 return Date.UTC(year, month, 1, 0, 0, 0); 42575 }, 42576 parsed: function () { 42577 for (var i = 1; i < this.columns[0].length; i++) { 42578 const year = new Date(this.columns[0][i]).getUTCFullYear(); 42579 const month = new Date(this.columns[0][i]).getUTCMonth(); 42580 if (month === 3 || month === 9) 42581 tickPositions.push(Date.UTC(year, month, 1, 0, 0, 0)); 42582 } 42583 } 42584 }, 42585 xAxis: { 42586 tickPositions: tickPositions, 42587 tickInterval: 24 * 3600 * 1000 * 180, 42588 type: 'datetime', 42589 labels: { 42590 enabled: true, 42591 useHTML: true, 42592 rotation: -45, 42593 formatter: function () { 42594 const date = new Date(this.value);
42595 const month = monthNames[date.getUTCMonth()]; 42596 const year = date.getUTCFullYear(); 42597 return month + "-" + year; 42598 } 42599 } 42600 }, 42601 yAxis: { 42602 tickInterval: .5, 42603 labels: { 42604 format: "${value:.2f}" 42605 } 42606 }, 42607 plotOptions: { 42608 line: { 42609 } 42610 }, 42611 tooltip: { 42612 shared: true, 42613 useHTML: true, 42614 formatter: function () { 42615 const m = monthNames[new Date(this.points[0].x).getUTCMonth()]; 42616 const y = new Date(this.points[0].x).getUTCFullYear(); 42617 var html = "<b>" + m + "-" + y + "</b><br/>"; 42618 this.points.filter(function (value) { 42619 html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25AC\u2009\u2009' + '</span><b>' + value.series.name + ': </b><span>$' + value.y.toFixed(2) + ' ' + units + '</span><br/>'; 42620 }); 42621 return html; 42622 } 42623 }, 42624 responsive: { 42625 rules: [{ 42626 condition: { 42627 maxWidth: 450 42628 }, 42629 chartOptions: { 42630 chart: { 42631 height: 400 42632 } 42633 } 42634 }, 42635 { 42636 condition: { 42637 minWidth: 451 42638 }, 42639 42640 chartOptions: { 42641 chart: { 42642 height: '65%' 42643 } 42644 } 42645 }] 42646 } 42647 }); 42648 } 42649}; 42650 42651},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],225:[function(require,module,exports){ 42652const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 42653const csvParser = require('../../includes/csvParser'); 42654 42655module.exports = function (Highcharts, appPath) { 42656 const elementId = 'propane-production-by-source'; 42657 var units = ''; 42658 42659 if ($('#' + elementId).length > 0) { 42660 Highcharts.chart(elementId, { 42661 chart: { 42662 type: 'column', 42663 spacingBottom: 30, 42664 events: { 42665 load: creditsSizeAndPosition, 42666 redraw: creditsSizeAndPosition 42667 } 42668 }, 42669 credits: { 42670 enabled: true, 42671 href: null, 42672 style: { 42673 cursor: 'normal' 42674 } 42675 }, 42676 data: { 42677 csvURL: appPath + '/hydrocarbon-gas-liquids/charts/' + elementId + '.csv', 42678 startRow: 5, 42679 firstRowAsNames: true, 42680 beforeParse: function (csv) { 42681 var parsedCSV = csvParser(csv); 42682 units = parsedCSV[1][0]; 42683 this.chart.title.update({ text: parsedCSV[0][0] }); 42684 this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } }); 42685 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 42686 this.chart.update( 42687 { 42688 accessibility: { 42689 description: parsedCSV[4][0], 42690 }, 42691 exporting: { 42692 menuItemDefinitions: 42693 { 42694 label: { 42695 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 42696 } 42697 }, 42698 buttons: { 42699 contextButton: { 42700 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 42701 } 42702 } 42703 } 42704 } 42705 ); 42706 return csv; 42707 } 42708 }, 42709 colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.red], 42710 xAxis: { 42711 labels: { 42712 format: "{value}" 42713 } 42714 }, 42715 yAxis: { 42716 reversedStacks:false, 42717 labels: { 42718 format: "{value:.2f}" 42719 }, 42720 tickInterval: .20 42721 }, 42722 plotOptions: { 42723 column: { 42724 stacking: 'normal' 42725 } 42726 }, 42727 tooltip: { 42728 useHTML: true, 42729 shared: true, 42730 formatter: function () { 42731 let html = "<b>" + this.points[0].key + "</b><br/>"; 42732 this.points.filter(function (value) { 42733 html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25CF\u2009\u2009' + '</span><b>' + value.series.name + ': </b><span>' + value.y.toFixed(2) + ' ' + units + '</span><br/>'; 42734 }); 42735 return html; 42736 } 42737 }, 42738 responsive: { 42739 rules: [{ 42740 condition: { 42741 maxWidth: 450 42742 }, 42743 chartOptions: { 42744 chart: { 42745 height: 380 42746 } 42747 } 42748 }, 42749 { 42750 condition: { 42751 minWidth: 451 42752 }, 42753 42754 chartOptions: { 42755 chart: { 42756 height: '65%' 42757 } 42758 } 42759 }] 42760 } 42761 }); 42762 } 42763}; 42764 42765},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],226:[function(require,module,exports){ 42766const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 42767const csvParser = require('../../includes/csvParser'); 42768 42769module.exports = function (Highcharts, appPath) { 42770 const elementId = 'residential-propane-consumption-by-census-region'; 42771 var units = ''; 42772 42773 if ($('#' + elementId).length > 0) { 42774 Highcharts.chart(elementId, { 42775 chart: { 42776 type: 'pie', 42777 spacingBottom: 25, 42778 events: { 42779 load: creditsSizeAndPosition, 42780 redraw: creditsSizeAndPosition 42781 } 42782 }, 42783 title: { 42784 text: '', 42785 margin: 5 42786 }, 42787 credits: { 42788 enabled: true, 42789 href: null, 42790 style: { 42791 cursor: 'normal' 42792 } 42793 }, 42794 data: {
42795 csvURL: appPath + '/hydrocarbon-gas-liquids/charts/' + elementId + '.csv', 42796 startRow: 5, 42797 firstRowAsNames: false, 42798 42799 beforeParse: function (csv) { 42800 var parsedCSV = csvParser(csv); 42801 this.chart.title.update({ text: parsedCSV[0][0] }); 42802 this.chart.subtitle.update({ text: '<span style="color:#888;font-weight:bold;font-size:12px;fill:#888;">' + parsedCSV[1][0] + '</span>' }); 42803 units = ' ' + parsedCSV[1][0].split(' ')[3] + ' ' + parsedCSV[1][0].split(' ')[4]; 42804 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 42805 this.chart.update( 42806 { 42807 accessibility: { 42808 description: parsedCSV[4][0], 42809 }, 42810 exporting: { 42811 menuItemDefinitions: 42812 { 42813 label: { 42814 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 42815 } 42816 }, 42817 buttons: { 42818 contextButton: { 42819 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 42820 } 42821 } 42822 } 42823 } 42824 ); 42825 return csv; 42826 } 42827 }, 42828 colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.green, Highcharts.eiaColors.yellow], 42829 plotOptions: { 42830 pie: { 42831 startAngle: 70, 42832 dataLabels: { 42833 enabled: true, 42834 format: "<strong>{point.name}</strong><br/>{point.percentage:.0f}%", 42835 distance: 30, 42836 color: Highcharts.eiaColors.darkGrey, 42837 style: { 42838 "fontSize": "12px" 42839 } 42840 }, 42841 label: { 42842 onArea: true 42843 } 42844 } 42845 }, 42846 tooltip: { 42847 useHTML: true, 42848 formatter: function () { 42849 const calculation = (parseFloat(this.y) / 1000).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); 42850 return "<span><b>" + this.key + "</b><br/>" + Math.round(this.percentage) + "%<br/>" + parseFloat(calculation).toFixed(2) + units + "</span>"; 42851 } 42852 }, 42853 responsive: { 42854 rules: [{ 42855 condition: { 42856 maxWidth: 450 42857 }, 42858 42859 chartOptions: { 42860 chart: { 42861 height: 425 42862 }, 42863 plotOptions: { 42864 pie: { 42865 size: '80%', 42866 dataLabels: { 42867 enabled: false 42868 }, 42869 showInLegend: true 42870 } 42871 }, 42872 legend: { 42873 enabled: true 42874 } 42875 } 42876 }, 42877 { 42878 condition: { 42879 minWidth: 451 42880 }, 42881 42882 chartOptions: { 42883 chart: { 42884 height: '65%' 42885 }, 42886 plotOptions: { 42887 pie: { 42888 size: '65%', 42889 dataLabels: { 42890 enabled: true 42891 }, 42892 showInLegend: false 42893 } 42894 }, 42895 legend: { 42896 enabled: false 42897 } 42898 } 42899 }] 42900 } 42901 }); 42902 } 42903}; 42904 42905},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],227:[function(require,module,exports){ 42906const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 42907const csvParser = require('../../includes/csvParser'); 42908 42909module.exports = function (Highcharts, appPath) { 42910 const elementId = 'residential-propane-consumption-by-end-use'; 42911 var units = ''; 42912 42913 if ($('#' + elementId).length > 0) { 42914 42915 Highcharts.chart(elementId, { 42916 chart: { 42917 type: 'pie', 42918 spacingBottom: 30, 42919 events: { 42920 load: creditsSizeAndPosition, 42921 redraw: creditsSizeAndPosition 42922 } 42923 }, 42924 title: { 42925 text: '', 42926 margin: 15 42927 }, 42928 credits: { 42929 enabled: true, 42930 href: null, 42931 style: { 42932 cursor: 'normal' 42933 } 42934 }, 42935 data: {
42936 csvURL: appPath + '/hydrocarbon-gas-liquids/charts/' + elementId + '.csv', 42937 startRow: 5, 42938 firstRowAsNames: false, 42939 42940 beforeParse: function (csv) { 42941 var parsedCSV = csvParser(csv); 42942 this.chart.title.update({ text: parsedCSV[0][0] }); 42943 this.chart.subtitle.update({ text: '<span style="color:#888;font-weight:bold;font-size:12px;fill:#888;">' + parsedCSV[1][0] + '</span>' }); 42944 units = ' ' + parsedCSV[1][0].split(' ')[3] + ' ' + parsedCSV[1][0].split(' ')[4]; 42945 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 42946 this.chart.update( 42947 { 42948 accessibility: { 42949 description: parsedCSV[4][0], 42950 }, 42951 exporting: { 42952 menuItemDefinitions: 42953 { 42954 label: { 42955 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 42956 } 42957 }, 42958 buttons: { 42959 contextButton: { 42960 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 42961 } 42962 } 42963 } 42964 } 42965 ); 42966 return csv; 42967 } 42968 }, 42969 colors: [Highcharts.eiaColors.green, Highcharts.eiaColors.brown, Highcharts.eiaColors.blue], 42970 plotOptions: { 42971 pie: { 42972 startAngle: 80, 42973 dataLabels: { 42974 enabled: true, 42975 format: "<strong>{point.name}</strong><br/>{point.percentage:.0f}%", 42976 color: Highcharts.eiaColors.darkGrey, 42977 distance: 30, 42978 style: { 42979 "fontSize": "12px" 42980 } 42981 } 42982 } 42983 }, 42984 tooltip: { 42985 useHTML: true, 42986 formatter: function () { 42987 const calculation = (parseFloat(this.y) / 1000).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); 42988 return "<span><b>" + this.key + "</b><br/>" + Math.round(this.percentage) + "%<br/>" + parseFloat(calculation).toFixed(2) + units + "</span>"; 42989 } 42990 }, 42991 responsive: { 42992 rules: [{ 42993 condition: { 42994 maxWidth: 450 42995 }, 42996 42997 chartOptions: { 42998 chart: { 42999 height: 425 43000 }, 43001 plotOptions: { 43002 pie: { 43003 size: '80%', 43004 dataLabels: { 43005 enabled: false 43006 }, 43007 showInLegend: true 43008 } 43009 }, 43010 legend: { 43011 enabled: true 43012 } 43013 } 43014 }, 43015 { 43016 condition: { 43017 minWidth: 451 43018 }, 43019 43020 chartOptions: { 43021 chart: { 43022 height: '65%' 43023 }, 43024 plotOptions: { 43025 pie: { 43026 size: '65%', 43027 dataLabels: { 43028 enabled: true 43029 }, 43030 showInLegend: false 43031 } 43032 }, 43033 legend: { 43034 enabled: false 43035 } 43036 } 43037 }] 43038 } 43039 }); 43040 } 43041}; 43042 43043},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],228:[function(require,module,exports){ 43044const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 43045const csvParser = require('../../includes/csvParser'); 43046 43047module.exports = function (Highcharts, appPath) { 43048 const elementId = 'spot-prices'; 43049 const monthNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; 43050 43051 if ($('#' + elementId).length > 0) { 43052 Highcharts.chart(elementId, { 43053 chart: { 43054 type: 'line', 43055 spacingBottom: 25, 43056 events: { 43057 load: creditsSizeAndPosition, 43058 redraw: creditsSizeAndPosition 43059 } 43060 }, 43061 credits: { 43062 enabled: true, 43063 href: null, 43064 style: { 43065 cursor: 'normal' 43066 } 43067 }, 43068 data: {
43069 csvURL: appPath + '/hydrocarbon-gas-liquids/charts/' + elementId + '.csv', 43070 startRow: 5, 43071 firstRowAsNames: true, 43072 43073 beforeParse: function (csv) { 43074 var parsedCSV = csvParser(csv); 43075 this.chart.title.update({ text: parsedCSV[0][0] }); 43076 this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } }); 43077 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 43078 this.chart.update( 43079 { 43080 accessibility: { 43081 description: parsedCSV[4][0], 43082 }, 43083 exporting: { 43084 menuItemDefinitions: 43085 { 43086 label: { 43087 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 43088 } 43089 }, 43090 buttons: { 43091 contextButton: { 43092 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 43093 } 43094 } 43095 } 43096 } 43097 ); 43098 return csv; 43099 }, 43100 parseDate: function (date) { 43101 const dateArray = date.split('-'), 43102 year = parseInt('20' + dateArray[1]), 43103 month = monthNames.indexOf(dateArray[0]); 43104 return Date.UTC(year, month, 1, 0, 0, 0); 43105 } 43106 }, 43107 colors: [Highcharts.eiaColors.darkGrey, Highcharts.eiaColors.red, Highcharts.eiaColors.yellow, Highcharts.eiaColors.green, Highcharts.eiaColors.blue, Highcharts.eiaColors.grey, Highcharts.eiaColors.brown], 43108 xAxis: { 43109 type: 'datetime', 43110 tickInterval: 1000 * 60 * 60 * 24 * 365, 43111 dateTimeLabelFormats: { 43112 year: '%b-%y' 43113 }, 43114 labels: { 43115 enabled: true, 43116 rotation: -45 43117 } 43118 }, 43119 yAxis: { 43120 labels: { 43121 format: "${value}" 43122 }, 43123 title: { 43124 style: { 43125 width: '300px' 43126 } 43127 }, 43128 tickInterval: 5 43129 }, 43130 tooltip: { 43131 shared: true, 43132 useHTML: true, 43133 formatter: function () { 43134 const m = monthNames[new Date(this.points[0].x).getUTCMonth()]; 43135 const y = new Date(this.points[0].x).getUTCFullYear(); 43136 var html = "<b>" + m + "-" + y + "</b><br/>"; 43137 this.points.filter(function (value) { 43138 html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25AC\u2009\u2009' + '</span><b>' + value.series.name + ': </b><span>$' + value.y.toFixed(2) + '</span><br/>'; 43139 }); 43140 return html; 43141 } 43142 }, 43143 responsive: { 43144 rules: [{ 43145 condition: { 43146 maxWidth: 450 43147 }, 43148 chartOptions: { 43149 chart: { 43150 height: 550 43151 } 43152 } 43153 }, 43154 { 43155 condition: { 43156 minWidth: 451 43157 }, 43158 43159 chartOptions: { 43160 chart: { 43161 height: '65%' 43162 } 43163 } 43164 }] 43165 } 43166 }); 43167 } 43168}; 43169 43170},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],229:[function(require,module,exports){ 43171const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 43172const csvParser = require('../../includes/csvParser'); 43173 43174module.exports = function (Highcharts, appPath) { 43175 const elementId = 'supply-disposition'; 43176 var units = ''; 43177 43178 if ($('#' + elementId).length > 0) { 43179 Highcharts.chart(elementId, { 43180 chart: { 43181 type: 'line', 43182 spacingBottom: 30, 43183 events: { 43184 load: creditsSizeAndPosition, 43185 redraw: creditsSizeAndPosition 43186 } 43187 }, 43188 credits: { 43189 enabled: true, 43190 href: null, 43191 style: { 43192 cursor: 'normal' 43193 } 43194 }, 43195 data: {
43196 csvURL: appPath + '/hydrocarbon-gas-liquids/charts/' + elementId + '.csv', 43197 startRow: 5, 43198 firstRowAsNames: true, 43199 beforeParse: function (csv) { 43200 var parsedCSV = csvParser(csv); 43201 this.chart.title.update({ text: parsedCSV[0][0] }); 43202 units = parsedCSV[1][0]; 43203 this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } }); 43204 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 43205 this.chart.update( 43206 { 43207 accessibility: { 43208 description: parsedCSV[4][0], 43209 }, 43210 exporting: { 43211 menuItemDefinitions: 43212 { 43213 label: { 43214 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 43215 } 43216 }, 43217 buttons: { 43218 contextButton: { 43219 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 43220 } 43221 } 43222 } 43223 } 43224 ); 43225 return csv; 43226 } 43227 }, 43228 colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.green, Highcharts.eiaColors.yellow], 43229 xAxis: { 43230 labels: { 43231 format: "{value}" 43232 } 43233 }, 43234 yAxis: { 43235 labels: { 43236 format: "{value:.1f}" 43237 }, 43238 tickInterval: .5, 43239 maxPadding: 0 43240 }, 43241 tooltip: { 43242 useHTML: true, 43243 shared: true, 43244 formatter: function () { 43245 let html = "<b>" + this.points[0].key + "</b><br/>"; 43246 this.points.filter(function (value) { 43247 html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25AC\u2009\u2009' + '</span><b>' + value.series.name + ': </b><span>' + value.y.toFixed(2) + ' ' + units + '</span><br/>'; 43248 }); 43249 return html; 43250 } 43251 }, 43252 responsive: { 43253 rules: [{ 43254 condition: { 43255 maxWidth: 450 43256 }, 43257 chartOptions: { 43258 chart: { 43259 height: 400 43260 } 43261 } 43262 }, 43263 { 43264 condition: { 43265 minWidth: 451 43266 }, 43267 43268 chartOptions: { 43269 chart: { 43270 height: '65%' 43271 } 43272 } 43273 }] 43274 } 43275 }); 43276 } 43277}; 43278 43279},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],230:[function(require,module,exports){ 43280const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 43281const csvParser = require('../../includes/csvParser'); 43282 43283module.exports = function (Highcharts, appPath) { 43284 const elementId = 'generation-share-generation'; 43285 43286 if ($('#' + elementId).length > 0) { 43287 Highcharts.chart(elementId, { 43288 chart: { 43289 type: 'line', 43290 spacingBottom: 25, 43291 events: { 43292 load: creditsSizeAndPosition, 43293 redraw: creditsSizeAndPosition 43294 } 43295 }, 43296 credits: { 43297 enabled: true, 43298 href: null, 43299 style: { 43300 cursor: 'normal' 43301 } 43302 }, 43303 data: { 43304 csvURL: appPath + '/hydropower/charts/' + elementId + '.csv', 43305 startRow: 6, 43306 firstRowAsNames: true, 43307 complete: function (options) { 43308 if (options.series.length > 0) { 43309 options.series[0].yAxis = 0; 43310 options.series[1].yAxis = 1; 43311 } 43312 }, 43313 beforeParse: function (csv) { 43314 var parsedCSV = csvParser(csv); 43315 this.chart.title.update({ text: parsedCSV[0][0] }); 43316 this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } }); 43317 this.chart.yAxis[1].update({ title: { text: parsedCSV[2][0] } }); 43318 this.chart.credits.update({ text: parsedCSV[3][0] + '<br>' + parsedCSV[4][0] }); 43319 this.chart.update( 43320 { 43321 accessibility: { 43322 description: parsedCSV[5][0], 43323 }, 43324 exporting: { 43325 menuItemDefinitions: 43326 { 43327 label: { 43328 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 43329 } 43330 }, 43331 buttons: { 43332 contextButton: { 43333 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 43334 } 43335 } 43336 } 43337 } 43338 ); 43339 return csv; 43340 } 43341 }, 43342 colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown], 43343 xAxis: { 43344 labels: { 43345 format: "{value}", 43346 }, 43347 showLastLabel: true, 43348 startOnTick: true, 43349 min: 1950, 43350 maxPadding: 0, 43351 tickInterval: 5 43352 }, 43353 yAxis: [ 43354 { 43355 alignTicks: false, 43356 maxPadding: 0, 43357 tickInterval: 40, 43358 labels: { 43359 format: "{value}", 43360 style: { "color": Highcharts.eiaColors.blue } 43361 }, 43362 title: { 43363 style: { "color": Highcharts.eiaColors.blue } 43364 } 43365 }, 43366 { 43367 alignTicks: false, 43368 maxPadding: 0, 43369 opposite: true, 43370 labels: { 43371 format: "{value}%", 43372 style: { "color": Highcharts.eiaColors.brown } 43373 }, 43374 title: { 43375 style: { "color": Highcharts.eiaColors.brown } 43376 }, 43377 gridLineColor: 'none' 43378 } 43379 ], 43380 tooltip: { 43381 useHTML: true, 43382 shared: true, 43383 formatter: function () { 43384 var html = '<b>' + this.x + '</b><br/>'; 43385 this.points.filter(function (value) { 43386 html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25AC\u2009\u2009' + '</span><b>' + value.series.name + ':</b> ' + value.y 43387 if (value.series.name === "generation") { 43388 html += ' ' + value.series.yAxis.axisTitle.textStr + '<br/>'; 43389 } else { 43390 html += '%<br/>
43390'; 43391 } 43392 }); 43393 return html; 43394 } 43395 }, 43396 responsive: { 43397 rules: [{ 43398 condition: { 43399 maxWidth: 450 43400 }, 43401 chartOptions: { 43402 chart: { 43403 height: 450 43404 }, 43405 xAxis: { 43406 labels: { 43407 rotation: -45, 43408 style: { 43409 textOverflow: 'none' 43410 } 43411 } 43412 } 43413 } 43414 }, 43415 { 43416 condition: { 43417 minWidth: 451 43418 }, 43419 43420 chartOptions: { 43421 chart: { 43422 height: '65%' 43423 } 43424 } 43425 }] 43426 } 43427 }); 43428 } 43429}; 43430 43431},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],231:[function(require,module,exports){ 43432const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 43433const csvParser = require('../../includes/csvParser'); 43434 43435 43436module.exports = function (Highcharts, map, appPath) { 43437 43438 const elementId = 'hydro-generation-by-state'; 43439 let units = ''; 43440 let mapData = Highcharts.geojson(map, 'map'); 43441 43442 // Our own options definition as two different series, will populate the data in the complete callback 43443 var seriesOptions = [ 43444 { 43445 id: "rank1", 43446 type: "map", 43447 allAreas: false, 43448 keys: ["postal-code"], 43449 joinBy: ['hc-a2', 'code'], 43450 data: [], 43451 mapData: mapData, 43452 borderWidth: 0.5, 43453 states: { 43454 hover: { 43455 brightness: 0, 43456 borderWidth: 1, 43457 borderColor: Highcharts.eiaColors.darkGrey 43458 } 43459 }, 43460 color: '#ffffff', 43461 dataLabels: { 43462 enabled: true, 43463 formatter: function () { 43464 if (this.point.properties) { 43465 return this.point.properties['hc-a2']; 43466 } 43467 return this.point.options.ucName; 43468 } 43469 }, 43470 tooltip: { 43471 valueSuffix: '' 43472 } 43473 }, 43474 { 43475 type: 'mapline', 43476 mapData: Highcharts.geojson(map, 'mapline'), 43477 color: 'silver', 43478 nullColor : 'silver', 43479 lineWidth : 1, 43480 showInLegend: false, 43481 enableMouseTracking: false, 43482 states : { 43483 inactive : { 43484 enabled : false 43485 } 43486 } 43487 } 43488 ]; 43489 43490 if ($('#' + elementId).length > 0) { 43491 Highcharts.mapChart(elementId, { 43492 chart: { 43493 map: map, 43494 spacingBottom: 25, 43495 events: { 43496 load: creditsSizeAndPosition, 43497 redraw: creditsSizeAndPosition 43498 } 43499 }, 43500 mapView : { 43501 insetOptions : { 43502 borderWidth : 1, 43503 borderColor : 'silver' 43504 } 43505 }, 43506 credits: { 43507 enabled: false, 43508 href: null, 43509 style: { 43510 cursor: 'normal' 43511 } 43512 }, 43513 caption: { 43514 verticalAlign: 'bottom', 43515 useHTML: true, 43516 margin: 0, 43517 style: { 43518 color: '#888', 43519 fontSize: '11px' 43520 }, 43521 x: 32, 43522 y: 33 43523 }, 43524 tooltip: { 43525 enabled: true, 43526 useHTML: true, 43527 formatter: function () { 43528 var html = (this.point.name && this.point.nameCode) ? '<b>' + this.point.name + '</b><br/>' + this.point.nameCode : ''; 43529 if (html !== '') 43530 return html 43531 } 43532 }, 43533 data: { 43534 csvURL: appPath + '/hydropower/charts/' + elementId + '.csv', 43535 startRow: 5, 43536 firstRowAsNames: false, 43537 complete: function (options) { 43538 var point; 43539 var i; 43540 43541 for (i = 0; i < options.series[0].data.length; i++) { 43542 43543 point = options.series[0].data[i]; 43544 var pointValueString = Highcharts.numberFormat(point.value, 0, '', ',') + ' ' + units; 43545 43546 if (pointValueString) { 43547 seriesOptions[0].data.push({ 43548 code: point.name, 43549 nameCode: "<span>" + pointValueString + "</span>", 43550 value: point.value 43551 });
43552 } 43553 43554 } 43555 43556 // replace series options parsed by Highcharts with our own options definition 43557 options.series = seriesOptions; 43558 43559 }, 43560 beforeParse: function (csv) { 43561 43562 var parsedCSV = csvParser(csv); 43563 units = parsedCSV[1][0]; 43564 this.chart.title.update({ text: parsedCSV[0][0] }); 43565 this.chart.caption.update({ text: parsedCSV[2][0] + '<br/>' + parsedCSV[3][0] }); 43566 43567 43568 this.chart.update( 43569 { 43570 legend: { 43571 title: { 43572 text: parsedCSV[1][0] 43573 } 43574 }, 43575 accessibility: { 43576 description: parsedCSV[4][0] 43577 }, 43578 exporting: { 43579 allowHTML: true, 43580 menuItemDefinitions: 43581 { 43582 label: { 43583 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 43584 } 43585 }, 43586 buttons: { 43587 contextButton: { 43588 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 43589 } 43590 } 43591 } 43592 } 43593 ); 43594 return csv; 43595 } 43596 }, 43597 colorAxis: { 43598 dataClasses: [{
43599 color: '#FFFFFF', 43600 from: 0, 43601 to: 0, 43602 name: '= 0' 43603 }, { 43604 color: '#E5F5FB', 43605 from: 1, 43606 to: 1000, 43607 name: '1 - 1,000' 43608 }, { 43609 color: Highcharts.eiaColors.extraLightBlue, 43610 from: 1001, 43611 to: 5000, 43612 name: '1,000 - 5,000' 43613 }, { 43614 color: Highcharts.eiaColors.lightBlue, 43615 from: 5001, 43616 to: 10000, 43617 name: '5,000 - 10,000' 43618 }, { 43619 color: Highcharts.eiaColors.blue, 43620 from: 10001, 43621 to: 30000, 43622 name: '10,000 - 30,000' 43623 }, { 43624 color: Highcharts.eiaColors.darkBlue, 43625 from: 30001, 43626 name: '> 30,000' 43627 }] 43628 }, 43629 legend: { 43630 align: 'center', 43631 backgroundColor: 'white', 43632 borderColor: 'white', 43633 layout: 'horizontal', 43634 symbolPadding: 10, 43635 symbolRadius: 0, 43636 valueDecimals: 2, 43637 labelFormatter: function () { 43638 if (this.from === 0) { 43639 $(this.legendItem.symbol.element).attr({ 43640 strokeWidth: 1, 43641 stroke: '#e7e7e7', 43642 width: 11.5, 43643 height: 11.5, 43644 x: 2.5 43645 }); 43646 } 43647 return this.name; 43648 } 43649 }, 43650 plotOptions: { 43651 map: { 43652 dataLabels: { 43653 style: { 43654 fontSize: '6.8px' 43655 } 43656 } 43657 } 43658 }, 43659 responsive: { 43660 rules: [{ 43661 condition: { 43662 maxWidth: 321 43663 }, 43664 43665 chartOptions: { 43666 chart: { 43667 height: 380 43668 }, 43669 title: { 43670 margin: 20 43671 }, 43672 plotOptions: { 43673 map: { 43674 dataLabels: { 43675 style: { 43676 fontSize: '7px', 43677 lineHeight: 7 43678 } 43679 } 43680 } 43681 } 43682 } 43683 }, 43684 { 43685 condition: { 43686 minWidth: 322, 43687 maxWidth: 400 43688 }, 43689 43690 chartOptions: { 43691 chart: { 43692 height: 370 43693 }, 43694 title: { 43695 margin: 5 43696 }, 43697 plotOptions: { 43698 map: { 43699 dataLabels: { 43700 style: { 43701 fontSize: '8px', 43702 lineHeight: 8 43703 } 43704 } 43705 } 43706 } 43707 } 43708 }, 43709 { 43710 condition: { 43711 minWidth: 401, 43712 maxWidth: 450 43713 }, 43714 43715 chartOptions: { 43716 chart: { 43717 height: '65%' 43718 }, 43719 title: { 43720 margin: 5 43721 }, 43722 plotOptions: { 43723 map: { 43724 dataLabels: { 43725 style: { 43726 fontSize: '8px', 43727 lineHeight: 8 43728 } 43729 } 43730 } 43731 } 43732 } 43733 }, 43734 { 43735 condition: { 43736 minWidth: 451 43737 }, 43738 43739 chartOptions: { 43740 chart: { 43741 height: '65%' 43742 }, 43743 title: { 43744 margin: 15 43745 }, 43746 plotOptions: { 43747 map: { 43748 dataLabels: { 43749 style: { 43750 fontSize: '12px' 43751 } 43752 } 43753 } 43754 } 43755 } 43756 }] 43757 } 43758 }); 43759 } 43760}; 43761 43762},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],232:[function(require,module,exports){ 43763const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 43764const csvParser = require('../../includes/csvParser'); 43765 43766 43767module.exports = function (Highcharts, map, appPath) { 43768 const elementId = 'top-hydropower-states'; 43769 let mapData = Highcharts.geojson(map); 43770 43771 // Our own options definition as two different series, will populate the data in the complete callback 43772 var seriesOptions = [ 43773 { 43774 id: "rank1", 43775 type: "map", 43776 keys: ["postal-code"], 43777 joinBy: ['hc-a2', 'code'], 43778 data: [], 43779 mapData: mapData, 43780 states: { 43781 hover: { 43782 color: '#a4edba' 43783 } 43784 }, 43785 dataLabels: { 43786 enabled: true, 43787 formatter: function () { 43788 if (this.point.nameCode) { 43789 if (this.point.code === "VT" || this.point.code === "NH" || this.point.code === "MA" || this.point.code === "RI" || this.point.code === "CT" || this.point.code === "NJ" || this.point.code === "DE" || this.point.code === "MD" || this.point.code === "DC") { 43790 return this.point.code + " " + this.point.nameCode; 43791 } 43792 else { 43793 return this.point.code + "<br/>" + this.point.nameCode; 43794 } 43795 } 43796 return this.point.code 43797 }, 43798 style: { 43799 fontSize: '10px' 43800 } 43801 }, 43802 tooltip: { 43803 valueSuffix: '' 43804 }, 43805 showInLegend: false 43806 } 43807 ]; 43808 43809 if ($('#' + elementId).length > 0) { 43810 Highcharts.mapChart(elementId, { 43811 chart: { 43812 map: map, 43813 spacingBottom: 30, 43814 events: { 43815 load: creditsSizeAndPosition, 43816 redraw: creditsSizeAndPosition 43817 } 43818 }, 43819 credits: { 43820 enabled: false, 43821 href: null, 43822 style: { 43823 cursor: 'normal' 43824 } 43825 }, 43826 caption: { 43827 verticalAlign: 'bottom', 43828 useHTML: true, 43829 margin: 0, 43830 style: { 43831 color: '#888', 43832 fontSize: '11px' 43833 }, 43834 x: 32, 43835 y: 33 43836 }, 43837 tooltip: { 43838 enabled: true, 43839 useHTML: true, 43840 formatter: function () { 43841 if (this.point.nameCode) { 43842 return '<b>' + this.point.name + '</b><br/>' + this.point.nameCode; 43843 } 43844 else { 43845 return false; 43846 } 43847 }, 43848 style: { 43849 textAlign: 'center' 43850 } 43851 }, 43852 legend: { 43853 enabled: false 43854 }, 43855 data: {
43856 csvURL: appPath + '/hydropower/charts/' + elementId + '.csv', 43857 startRow: 4, 43858 complete: function (options) { 43859 var point; 43860 for (var i = 0; i < options.series[0].data.length; i++) { 43861 point = options.series[0].data[i]; 43862 43863 if (point.value) { 43864 switch (point.value) { 43865 case 1: 43866 seriesOptions[0].data.push({ 43867 code: point.name, 43868 color: Highcharts.eiaColors.red, 43869 nameCode: "<span>#" + point.value + "</span>" 43870 }); 43871 break; 43872 case 2: 43873 seriesOptions[0].data.push({ 43874 code: point.name, 43875 color: Highcharts.eiaColors.yellow, 43876 nameCode: "<span>#" + point.value + "</span>" 43877 }); 43878 break; 43879 case 3: 43880 seriesOptions[0].data.push({ 43881 code: point.name, 43882 color: Highcharts.eiaColors.green, 43883 nameCode: "<span>#" + point.value + "</span>" 43884 }); 43885 break; 43886 case 4: 43887 seriesOptions[0].data.push({ 43888 code: point.name, 43889 color: Highcharts.eiaColors.blue, 43890 nameCode: "<span>#" + point.value + "</span>" 43891 }); 43892 break; 43893 case 5: 43894 seriesOptions[0].data.push({ 43895 code: point.name, 43896 color: Highcharts.eiaColors.brown, 43897 nameCode: "<span>#" + point.value + "</span>" 43898 }); 43899 break; 43900 default: 43901 seriesOptions[0].data.push({ 43902 code: point.name, 43903 color: "none", 43904 nameCode: "<span>#" + point.value + "</span>" 43905 }); 43906 } 43907 } 43908 } 43909 // replace series options parsed by Highcharts with our own options definition 43910 options.series = seriesOptions; 43911 }, 43912 beforeParse: function (csv) { 43913 var parsedCSV = csvParser(csv); 43914 this.chart.title.update({ text: parsedCSV[0][0] }); 43915 this.chart.caption.update({ text: parsedCSV[1][0] + '<br/>' + parsedCSV[2][0] }); 43916 43917 this.chart.update( 43918 { 43919 accessibility: { 43920 description: parsedCSV[3][0] 43921 }, 43922 exporting: { 43923 allowHTML: true, 43924 menuItemDefinitions: 43925 { 43926 label: { 43927 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 43928 } 43929 }, 43930 buttons: { 43931 contextButton: { 43932 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 43933 } 43934 } 43935 } 43936 } 43937 ); 43938 return csv; 43939 } 43940 }, 43941 responsive: { 43942 rules: [{ 43943 condition: { 43944 maxWidth: 321 43945 }, 43946 43947 chartOptions: { 43948 chart: { 43949 height: 330 43950 }, 43951 title: { 43952 margin: 5 43953 } 43954 } 43955 }, 43956 { 43957 condition: { 43958 minWidth: 322, 43959 maxWidth: 400 43960 }, 43961 43962 chartOptions: { 43963 chart: { 43964 height: 350 43965 }, 43966 title: { 43967 margin: 5 43968 } 43969 } 43970 }, 43971 { 43972 condition: { 43973 minWidth: 401, 43974 maxWidth: 450 43975 }, 43976 43977 chartOptions: { 43978 chart: { 43979 height: 380 43980 }, 43981 title: { 43982 margin: 5 43983 } 43984 } 43985 }, 43986 { 43987 condition: { 43988 minWidth: 451 43989 }, 43990 43991 chartOptions: { 43992 chart: { 43993 height: '65%' 43994 }, 43995 title: { 43996 margin: 15 43997 } 43998 } 43999 }] 44000 } 44001 44002 }); 44003 44004 } 44005}; 44006 44007},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],233:[function(require,module,exports){ 44008require('es6-shim'); 44009require('es7-shim'); 44010//Used for IE to export svg to png 44011require('blueimp-canvas-to-blob'); 44012 44013window.proj4 = require('proj4'); 44014const Highcharts = require('highcharts'); 44015window.Highcharts = Highcharts;
44016require('highcharts/modules/data')(Highcharts); 44017require('highcharts/modules/exporting')(Highcharts); 44018require('highcharts/modules/map')(Highcharts); 44019require('highcharts/modules/accessibility')(Highcharts); 44020require('eia-highcharts-modules/eia-theme')(Highcharts); 44021require('highcharts/highcharts-more')(Highcharts); 44022 44023 44024const usAllTopo = require('@highcharts/map-collection/countries/us/us-all.topo.json'); 44025const usSmallTopo = require('@highcharts/map-collection/countries/us/custom/us-small.topo.json'); 44026const usSmallWithOffshoreGeo = require("eia-highcharts-modules/maps/us-small-with-offshore.geo.json"); 44027 44028const ENERGY_CALCULATOR = require('./energy_calculator'); 44029// #coalCalculator is unique to the calculator page, so the ENERGY_CACLULATOR functionality will only work there 44030if (document.getElementById('coalCalculator') !== null) ENERGY_CALCULATOR(); 44031 44032// Use UTC Dates with highcharts to avoid locality issues with dates 44033Highcharts.setOptions({ 44034 global: { 44035 useUTC: true 44036 }, 44037 time: { 44038 useUTC: true 44039 }, 44040 lang: { 44041 thousandsSep: ',' 44042 } 44043}); 44044 44045// Make this case insensitive by lower casing everything 44046const href = window.location.href.toLowerCase(); 44047const baseHref = $('base').attr('href').toLowerCase(); 44048 44049const appPath = window.location.href.substring(0, href.lastIndexOf(baseHref) + baseHref.length); 44050 44051const exportSVG = require('./svgExport'); 44052 44053//Engery and the environment 44054const greenhouse_gas_emissions_by_gas = require('../energy-and-the-environment/charts/greenhouse-gas-emissions-by-gas'); 44055greenhouse_gas_emissions_by_gas(Highcharts, appPath); 44056 44057const carbon_dioxide_emissions_by_major_fuel_type = require('../energy-and-the-environment/charts/carbon-dioxide-emissions-by-major-fuel-type'); 44058carbon_dioxide_emissions_by_major_fuel_type(Highcharts, appPath); 44059 44060const major_fuel_energy_sources = require('../energy-and-the-environment/charts/major-fuel-energy-sources'); 44061major_fuel_energy_sources(Highcharts, appPath); 44062 44063const ENERGY_END_USE_SECTOR = require('../energy-and-the-environment/charts/energy-end-use-sector'); 44064ENERGY_END_USE_SECTOR(Highcharts, appPath); 44065 44066const CARBON_DIOXIDE_END_USE = require('../energy-and-the-environment/charts/carbon-dioxide-end-use'); 44067CARBON_DIOXIDE_END_USE(Highcharts, appPath); 44068 44069const WORLD_CARBON_DIOXIDE_EMISSIONS = require('../energy-and-the-environment/charts/world-carbon-dioxide-emissions'); 44070WORLD_CARBON_DIOXIDE_EMISSIONS(Highcharts, appPath); 44071 44072 44073//Biomass 44074const total_msw_generation_by_type_of_waste = require('../biomass/charts/total-msw-generation-by-type-of-waste'); 44075total_msw_generation_by_type_of_waste(Highcharts, appPath); 44076 44077const management_of_msw_us = require('../biomass/charts/management-of-msw-us'); 44078management_of_msw_us(Highcharts, appPath); 44079 44080const PERCENT_WASTE_BURNED = require('../biomass/charts/percent-waste-burned'); 44081PERCENT_WASTE_BURNED(Highcharts, appPath); 44082 44083//Biofuels: Ethanol and Biodiesel 44084const biofuels_trade_by_type = require('../biofuels/charts/biofuels-trade-by-type'); 44085biofuels_trade_by_type(Highcharts, appPath); 44086 44087const biofuels_consumption_major_type = require('../biofuels/charts/biofuels-consumption-major-type'); 44088biofuels_consumption_major_type(Highcharts, appPath); 44089 44090const biofuels_production_major_type = require('../biofuels/charts/biofuels-production-major-type'); 44091biofuels_production_major_type(Highcharts, appPath); 44092 44093const biodiesel_renewdiesel_other_consumption = require('../biofuels/charts/biodiesel-renewdiesel-other-consumption'); 44094biodiesel_renewdiesel_other_consumption(Highcharts, appPath); 44095 44096const biodiesel_renewdiesel_other_production = require('../biofuels/charts/biodiesel-renewdiesel-other-production'); 44097biodiesel_renewdiesel_other_production(Highcharts, appPath); 44098 44099const us_biodiesel_consumption = require('../biofuels/charts/us-biodiesel-consumption'); 44100us_biodiesel_consumption(Highcharts, appPath); 44101 44102const feedstock_inputs_biodiesel_production = require('../biofuels/charts/feedstock-inputs-biodiesel-production'); 44103feedstock_inputs_biodiesel_production(Highcharts, appPath); 44104 44105const feedstocks_for_biofuels_production = require('../biofuels/charts/feedstocks-for-biofuels-production'); 44106feedstocks_for_biofuels_production(Highcharts, appPath); 44107 44108const FUEL_ETHANOL_MOTOR_GASOLINE = require('../biofuels/charts/fuel-ethanol-motor-gasoline'); 44109FUEL_ETHANOL_MOTOR_GASOLINE(Highcharts, appPath); 44110 44111const ethanol_supply_production_states = require('../biofuels/charts/ethanol-supply-production-states'); 44112ethanol_supply_production_states(Highcharts, appPath); 44113 44114 44115//Diesel-fuels 44116const CRUDE_RETAIL_PRICES = require('../diesel-fuel/charts/crude-retail-prices'); 44117CRUDE_RETAIL_PRICES(Highcharts, appPath); 44118 44119 44120// HGL 44121const PRODUCTION_BY_SOURCE = require('../hydrocarbon-gas-liquids/charts/production-by-source'); 44122PRODUCTION_BY_SOURCE(Highcharts, appPath); 44123 44124const CONSUMPTION_BY_TYPE = require('../hydrocarbon-gas-liquids/charts/consumption-by-type'); 44125CONSUMPTION_BY_TYPE(Highcharts, appPath); 44126 44127const productionByType = require('../hydrocarbon-gas-liquids/charts/production-by-type'); 44128productionByType(Highcharts, appPath); 44129 44130const supplyDisposition = require('../hydrocarbon-gas-liquids/charts/supply-disposition'); 44131supplyDisposition(Highcharts, appPath); 44132
44133const spotPrices = require('../hydrocarbon-gas-liquids/charts/spot-prices.js'); 44134spotPrices(Highcharts, appPath); 44135 44136const CONSUMPTION_BY_END_USE_SECTOR = require('../hydrocarbon-gas-liquids/charts/consumption-by-end-use-sector'); 44137CONSUMPTION_BY_END_USE_SECTOR(Highcharts, appPath); 44138 44139const PRODUCTION_NATURAL_GAS_PROCESSING = require('../hydrocarbon-gas-liquids/charts/production-natural-gas-processing'); 44140PRODUCTION_NATURAL_GAS_PROCESSING(Highcharts, appPath); 44141 44142const EXPORTS_BY_TYPE = require('../hydrocarbon-gas-liquids/charts/exports-by-type'); 44143EXPORTS_BY_TYPE(Highcharts, appPath); 44144 44145const PRODUCTION_FROM_PETROLEUM_REFINING = require('../hydrocarbon-gas-liquids/charts/production-from-petroleum-refining'); 44146PRODUCTION_FROM_PETROLEUM_REFINING(Highcharts, appPath); 44147 44148const propane_production_by_source = require('../hydrocarbon-gas-liquids/charts/propane-production-by-source'); 44149propane_production_by_source(Highcharts, appPath); 44150 44151const propane_by_regionofentry = require('../hydrocarbon-gas-liquids/charts/propane-by-regionofentry'); 44152propane_by_regionofentry(Highcharts, appPath); 44153 44154const propane_consumption_by_end_use_sector = require('../hydrocarbon-gas-liquids/charts/propane-consumption-by-end-use-sector'); 44155propane_consumption_by_end_use_sector(Highcharts, appPath); 44156 44157const residential_propane_consumption_by_census_region = require('../hydrocarbon-gas-liquids/charts/residential-propane-consumption-by-census-region'); 44158residential_propane_consumption_by_census_region(Highcharts, appPath); 44159 44160const PROPANE_PRICES_BY_REGION = require('../hydrocarbon-gas-liquids/charts/propane-prices-by-region'); 44161PROPANE_PRICES_BY_REGION(Highcharts, appPath); 44162 44163const residential_propane_consumption_by_end_use = require('../hydrocarbon-gas-liquids/charts/residential-propane-consumption-by-end-use'); 44164residential_propane_consumption_by_end_use(Highcharts, appPath); 44165 44166const propane_prices = require('../hydrocarbon-gas-liquids/charts/propane-prices'); 44167propane_prices(Highcharts, appPath); 44168 44169//Oil and Petroleum Products 44170const TOP_OIL_COUNTRIES = require('../oil-and-petroleum-products/charts/top-oil-countries'); 44171TOP_OIL_COUNTRIES(Highcharts, appPath); 44172 44173const PETROLEUM_IMPORTS = require('../oil-and-petroleum-products/charts/petroleum-imports'); 44174PETROLEUM_IMPORTS(Highcharts, appPath); 44175 44176const PETROLEUM_CONSUMPTION = require('../oil-and-petroleum-products/charts/petroleum-consumption'); 44177PETROLEUM_CONSUMPTION(Highcharts, appPath); 44178 44179const REFINER_AQUISITION_COST = require('../oil-and-petroleum-products/charts/refiner-acquisition-cost'); 44180REFINER_AQUISITION_COST(Highcharts, appPath); 44181 44182const top_crude_oil_producing_states = require('../oil-and-petroleum-products/charts/top-crude-oil-producing-states'); 44183top_crude_oil_producing_states(Highcharts, usAllTopo, appPath); 44184 44185const REFINER_BLENDER_NET_PRODUCTION = require('../oil-and-petroleum-products/charts/refiner-blender-net-production'); 44186REFINER_BLENDER_NET_PRODUCTION(Highcharts, appPath); 44187 44188const net_imports_petroleum_shares_consumption = require('../oil-and-petroleum-products/charts/net-imports-petroleum-shares-consumption'); 44189net_imports_petroleum_shares_consumption(Highcharts, appPath); 44190 44191const refiner_blender_netinput_by_type_share_total = require('../oil-and-petroleum-products/charts/refiner-blender-netinput-by-type-share-total'); 44192refiner_blender_netinput_by_type_share_total(Highcharts, appPath); 44193 44194const crude_oil_production = require("../oil-and-petroleum-products/charts/crude-oil-production"); 44195crude_oil_production(Highcharts, usSmallWithOffshoreGeo, appPath); 44196 44197const net_petroleum_imports_by_type = require("../oil-and-petroleum-products/charts/net-petroleum-imports-by-type"); 44198net_petroleum_imports_by_type(Highcharts, appPath); 44199 44200//Gasoline 44201const annual_regular_grade_gasoline_prices = require("../gasoline/charts/annual-regular-grade-gasoline-prices"); 44202annual_regular_grade_gasoline_prices(Highcharts, appPath); 44203 44204const AVERAGE_MONTHLY_PRICES = require("../gasoline/charts/average-monthly-prices"); 44205AVERAGE_MONTHLY_PRICES(Highcharts, appPath); 44206 44207const regular_grade_gasoline_demand_retail_price = require("../gasoline/charts/regular-grade-gasoline-demand-retail-price"); 44208regular_grade_gasoline_demand_retail_price(Highcharts, appPath); 44209 44210const us_gasoline_stocks = require("../gasoline/charts/us-gasoline-stocks"); 44211us_gasoline_stocks(Highcharts, appPath); 44212 44213//Heating oil 44214const heating_oil_sales_by_census = require("../heating-oil/charts/heating-oil-sales-by-census"); 44215heating_oil_sales_by_census(Highcharts, appPath); 44216 44217const MAJOR_PRICE_COMPONENTS = require('../heating-oil/charts/major-price-components'); 44218MAJOR_PRICE_COMPONENTS(Highcharts, appPath); 44219 44220const AVERAGE_MONTHLY_HEATING_CRUDE = require('../heating-oil/charts/average-monthly-heating-crude'); 44221AVERAGE_MONTHLY_HEATING_CRUDE(Highcharts, appPath); 44222 44223const use_of_heating_oil = require('../heating-oil/charts/use-of-heating-oil'); 44224use_of_heating_oil(Highcharts, usSmallTopo, appPath); 44225 44226//coal 44227const annual_prices_delivered_end_use_sectors = require("../coal/charts/annual-prices-delivered-end-use-sectors"); 44228annual_prices_delivered_end_use_sectors(Highcharts, appPath); 44229 44230const reserves_by_type_mining_method = require("../coal/charts/reserves-by-type-mining-method"); 44231reserves_by_type_mining_method(Highcharts, appPath); 44232 44233const coal_consumption_by_major_end_users = require("../coal/charts/coal-consumption-by-major-end-users"); 44234coal_consumption_by_major_end_users(Highcharts, appPath); 44235
44236const coal_imports_exports = require("../coal/charts/coal-imports-exports"); 44237coal_imports_exports(Highcharts, appPath); 44238 44239const coal_production_consumption_net_exports = require("../coal/charts/coal-production-consumption-net-exports"); 44240coal_production_consumption_net_exports(Highcharts, appPath); 44241 44242const TOP_COAL_STATES = require("../coal/charts/top-coal-states"); 44243TOP_COAL_STATES(Highcharts, usAllTopo, appPath); 44244 44245//Natural Gas 44246const average_wellhead_citygate_residential_prices = require("../natural-gas/charts/average-wellhead-citygate-residential-prices"); 44247average_wellhead_citygate_residential_prices(Highcharts, appPath); 44248 44249const customer_choice_program = require("../natural-gas/charts/customer-choice-program"); 44250customer_choice_program(Highcharts, appPath); 44251 44252const nat_gas_consumption_by_sector = require("../natural-gas/charts/nat-gas-consumption-by-sector"); 44253nat_gas_consumption_by_sector(Highcharts, appPath); 44254 44255const total_natgas_proved_reserves = require("../natural-gas/charts/total-natgas-proved-reserves"); 44256total_natgas_proved_reserves(Highcharts, appPath); 44257 44258const lng_imports_exports = require("../natural-gas/charts/lng-imports-exports"); 44259lng_imports_exports(Highcharts, appPath); 44260 44261const ng_consumption_dryprod_netimports = require("../natural-gas/charts/ng-consumption-dryprod-netimports"); 44262ng_consumption_dryprod_netimports(Highcharts, appPath); 44263 44264const natgas_imports_exports_netimports = require("../natural-gas/charts/natgas-imports-exports-netimports"); 44265natgas_imports_exports_netimports(Highcharts, appPath); 44266 44267const MONTHLY_SHALE_PRODUCTION = require("../natural-gas/charts/monthly-shale-production"); 44268MONTHLY_SHALE_PRODUCTION(Highcharts, appPath); 44269 44270const comsumption_by_sector_area_chart = require("../natural-gas/charts/comsumption-by-sector-area-chart"); 44271comsumption_by_sector_area_chart(Highcharts, appPath); 44272 44273const MONTHLY_DRY_CITYGATE = require("../natural-gas/charts/monthly-dry-citygate"); 44274MONTHLY_DRY_CITYGATE(Highcharts, appPath); 44275 44276const top_nat_gas_producing_states = require("../natural-gas/charts/top-nat-gas-producing-states"); 44277top_nat_gas_producing_states(Highcharts, usSmallWithOffshoreGeo, appPath); 44278 44279const average_annual_residential_natgas_prices_by_state = require("../natural-gas/charts/average-annual-residential-natgas-prices-by-state"); 44280average_annual_residential_natgas_prices_by_state(Highcharts, usSmallTopo, appPath); 44281 44282const natgas_proved_reserves_by_statearea = require("../natural-gas/charts/natgas-proved-reserves-by-statearea"); 44283natgas_proved_reserves_by_statearea(Highcharts, usSmallWithOffshoreGeo, appPath); 44284 44285const dry_natgas_production_by_source_refcase = require('../natural-gas/charts/dry-natgas-production-by-source-refcase'); 44286dry_natgas_production_by_source_refcase(Highcharts, appPath); 44287 44288//solar 44289const utility_scale_generation = require("../solar/charts/utility-scale-generation"); 44290utility_scale_generation(Highcharts, usSmallTopo, appPath); 44291 44292const small_scale_photovoltaic_generation = require("../solar/charts/small-scale-photovoltaic-generation"); 44293small_scale_photovoltaic_generation(Highcharts, usSmallTopo, appPath); 44294 44295//Renewable Resource renewable-energy-consumption-major-sources 44296const renewable_energy_consumption_major_sources = require("../renewable-sources/charts/renewable-energy-consumption-major-sources"); 44297renewable_energy_consumption_major_sources(Highcharts, appPath); 44298 44299const PORTFOLIO_STANDARDS_AND_GOALS = require("../renewable-sources/charts/portfolio-standards-and-goals"); 44300PORTFOLIO_STANDARDS_AND_GOALS(Highcharts, usSmallTopo, appPath); 44301 44302//Use of energy 44303const motor_gasoline_consumption_trans_light_fuel = require("../use-of-energy/charts/motor-gasoline-consumption-trans-light-fuel"); 44304motor_gasoline_consumption_trans_light_fuel(Highcharts, appPath); 44305 44306const transportation_energy_source_fuels = require("../use-of-energy/charts/transportation-energy-source-fuels"); 44307transportation_energy_source_fuels(Highcharts, appPath); 44308 44309const us_energy_used_for_transportation = require("../use-of-energy/charts/us-energy-used-for-transportation"); 44310us_energy_used_for_transportation(Highcharts, appPath); 44311 44312const total_energy_consumption_by_end_use_sector = require("../use-of-energy/charts/total-energy-consumption-by-end-use-sector"); 44313total_energy_consumption_by_end_use_sector(Highcharts, appPath); 44314 44315const industrial_sector_energy_use_by_source = require("../use-of-energy/charts/industrial-sector-energy-use-by-source"); 44316industrial_sector_energy_use_by_source(Highcharts, appPath); 44317 44318const industrial_sector_energy_consumption_by_type_industry = require("../use-of-energy/charts/industrial-sector-energy-consumption-by-type-industry"); 44319industrial_sector_energy_consumption_by_type_industry(Highcharts, appPath); 44320 44321const CONSUMPTION_BY_SOURCE = require("../use-of-energy/charts/residential-energy-consumption-by-source"); 44322CONSUMPTION_BY_SOURCE(Highcharts, appPath); 44323 44324const TRANSPORTATION_BY_TYPE = require("../use-of-energy/charts/transportation-by-type"); 44325TRANSPORTATION_BY_TYPE(Highcharts, appPath); 44326 44327const AIR_CONDITIONING_YEAR_CONSTRUCTED = require("../use-of-energy/charts/air-conditioning-year-constructed"); 44328AIR_CONDITIONING_YEAR_CONSTRUCTED(Highcharts, appPath); 44329 44330const us_average_by_census_region_selected_years = require("../use-of-energy/charts/us-average-by-census-region-selected-years"); 44331us_average_by_census_region_selected_years(Highcharts, appPath); 44332 44333const us_households_total_by_census_region = require("../use-of-energy/charts/us-households-total-by-census-region"); 44334us_households_total_by_census_region(Highcharts, appPath); 44335 44336const CONSUMPTION_HOME_CENSUS_REGION = require("../use-of-energy/charts/consumption-home-census-region"); 44337CONSUMPTION_HOME_CENSUS_REGION(Highcharts, appPath); 44338 44339const end_use_consumption_by_housing_type = require("../use-of-energy/charts/end-use-consumption-by-housing-type"); 44340end_use_consumption_by_housing_type(Highcharts, appPath); 44341 44342const residential_site_electricity_consumption_by_enduse = require("../use-of-energy/charts/residential-site-electricity-consumption-by-enduse"); 44343residential_site_electricity_consumption_by_enduse(Highcharts, appPath); 44344 44345const percentage_of_homes_with_refrigerators_freezers = require("../use-of-energy/charts/percentage-of-homes-with-refrigerators-freezers"); 44346percentage_of_homes_with_refrigerators_freezers(Highcharts, appPath); 44347 44348const energy_consumption_by_end_use_sectors = require("../use-of-energy/charts/energy-consumption-by-end-use-sectors"); 44349energy_consumption_by_end_use_sectors(Highcharts, appPath); 44350 44351const energy_consumption_by_end_use_sectors_column = require("../use-of-energy/charts/total-energy-consumption-by-end-use-sector-column"); 44352energy_consumption_by_end_use_sectors_column(Highcharts, appPath); 44353 44354const total_fuel_consumption_in_manufacturing = require("../use-of-energy/charts/total-fuel-consumption-in-manufacturing"); 44355total_fuel_consumption_in_manufacturing(Highcharts, appPath); 44356 44357const consumption_of_electricity_has_generally_declined = require("../use-of-energy/charts/consumption-of-electricity-has-generally-declined"); 44358consumption_of_electricity_has_generally_declined(Highcharts, appPath); 44359 44360const commercial_buildings_by_major_end_uses = require("../use-of-energy/charts/commercial-buildings-by-major-end-uses"); 44361commercial_buildings_by_major_end_uses(Highcharts, appPath); 44362 44363const major_energy_sources_used_in_commercial_buildings = require("../use-of-energy/charts/major-energy-sources-used-in-commercial-buildings"); 44364major_energy_sources_used_in_commercial_buildings(Highcharts, appPath); 44365 44366const energy_use_by_type_commercial_building = require("../use-of-energy/charts/energy-use-by-type-commercial-building"); 44367energy_use_by_type_commercial_building(Highcharts, appPath); 44368 44369const electricity_use_commercial_buildings_by_major_enduse = require("../use-of-energy/charts/electricity-use-commercial-buildings-by-major-enduse"); 44370electricity_use_commercial_buildings_by_major_enduse(Highcharts, appPath); 44371 44372const commercial_buildings_number = require("../use-of-energy/charts/commercial-buildings-number"); 44373commercial_buildings_number(Highcharts, appPath); 44374 44375const commercial_buildings_floorspace = require("../use-of-energy/charts/commercial-buildings-floorspace"); 44376commercial_buildings_floorspace(Highcharts, appPath); 44377 44378const commercial_buildings_fuel_use = require("../use-of-energy/charts/commercial-buildings-fuel-use"); 44379commercial_buildings_fuel_use(Highcharts, appPath); 44380 44381const commercial_buildings_electricity_natgas_use = require("../use-of-energy/charts/commercial-buildings-electricity-natgas-use"); 44382commercial_buildings_electricity_natgas_use(Highcharts, appPath); 44383 44384const commercial_buildings_energy_end_use_type = require("../use-of-energy/charts/commercial-buildings-energy-end-use-type"); 44385commercial_buildings_energy_end_use_type(Highcharts, appPath); 44386 44387const commercial_buildings_energy_use_type = require("../use-of-energy/charts/commercial-buildings-energy-use-type"); 44388commercial_buildings_energy_use_type(Highcharts, appPath); 44389 44390const commercial_buildings_electricity_end_uses = require("../use-of-energy/charts/commercial-buildings-electricity-end-uses"); 44391commercial_buildings_electricity_end_uses(Highcharts, appPath); 44392 44393const commercial_buildings_census_region_energy_use_type = require("../use-of-energy/charts/commercial-buildings-census-region-energy-use-type"); 44394commercial_buildings_census_region_energy_use_type(Highcharts, appPath); 44395 44396const commercial_building_floorspace_by_census_region = require("../use-of-energy/charts/commercial-building-floorspace-by-census-region"); 44397commercial_building_floorspace_by_census_region(Highcharts, appPath); 44398 44399const commercial_bldgs_intensity_trend = require("../use-of-energy/charts/commercial-bldgs-intensity-trend"); 44400commercial_bldgs_intensity_trend(Highcharts, appPath); 44401 44402const commercial_buildings_types_intensity = require("../use-of-energy/charts/commercial-buildings-types-intensity"); 44403commercial_buildings_types_intensity(Highcharts, appPath); 44404 44405const energy_consumption_commercial_buildings_by_census_region = require("../use-of-energy/charts/energy-consumption-commercial-buildings-by-census-region"); 44406energy_consumption_commercial_buildings_by_census_region(Highcharts, appPath); 44407 44408const energy_indicators_ratio = require("../use-of-energy/charts/energy-indicators-ratio"); 44409energy_indicators_ratio(Highcharts, appPath); 44410 44411const energy_indicators_index = require("../use-of-energy/charts/energy-indicators-index"); 44412energy_indicators_index(Highcharts, appPath); 44413 44414const energy_indicators_absolute = require("../use-of-energy/charts/energy-indicators-absolute"); 44415energy_indicators_absolute(Highcharts, appPath); 44416 44417const ev_cars_projections = require("../use-of-energy/charts/ev-cars-projections"); 44418ev_cars_projections(Highcharts, appPath); 44419 44420// US Energy Facts 44421const state_energy_data_system_map = require('../us-energy-facts/charts/state-energy-data-system-map'); 44422state_energy_data_system_map(Highcharts, usSmallTopo, appPath); 44423 44424const state_energy_profile_map = require('../us-energy-facts/charts/state-energy-profile-map'); 44425state_energy_profile_map(Highcharts, usSmallTopo, appPath); 44426 44427const ENERGY_PRODUCTION_BY_MAJOR_SOURCES = require("../us-energy-facts/charts/primary-energy-production-by-major-sources"); 44428ENERGY_PRODUCTION_BY_MAJOR_SOURCES(Highcharts, appPath); 44429 44430const energy_net_imports_by_major_sources_totals = require("../us-energy-facts/charts/energy-net-imports-by-major-sources-totals"); 44431energy_net_imports_by_major_sources_totals(Highcharts, appPath); 44432 44433const import_exports_primary_energy_overview = require("../us-energy-facts/charts/import-exports-primary-energy-overview"); 44434import_exports_primary_energy_overview(Highcharts, appPath); 44435 44436const primary_consumption_by_major_source = require("../us-energy-facts/charts/primary-consumption-by-major-source"); 44437primary_consumption_by_major_source(Highcharts, appPath); 44438 44439const primary_energy_production_by_major_source = require("../us-energy-facts/charts/primary-energy-production-by-major-source-history"); 44440primary_energy_production_by_major_source(Highcharts, appPath); 44441 44442// Electricity 44443const GENERATION_CAPACITY_BY_TYPE = require("../electricity/charts/generation-capacity-by-type"); 44444GENERATION_CAPACITY_BY_TYPE(Highcharts, appPath); 44445 44446const RETAIL_SALES_MAJOR = require("../electricity/charts/retail-sales-major"); 44447RETAIL_SALES_MAJOR(Highcharts, appPath); 44448 44449const GENERATION_CAPACITY_MAJOR = require("../electricity/charts/generation-capacity-major"); 44450GENERATION_CAPACITY_MAJOR(Highcharts, appPath); 44451 44452const GENERATING_CAPACITY_MAJOR_SOURCE = require("../electricity/charts/generating-capacity-major-source"); 44453GENERATING_CAPACITY_MAJOR_SOURCE(Highcharts, appPath); 44454 44455const GENERATION_RENEWABLE_SOURCES = require("../electricity/charts/generation-renewable-sources"); 44456GENERATION_RENEWABLE_SOURCES(Highcharts, appPath); 44457 44458const GENERATION_MAJOR_SOURCE = require("../electricity/charts/generation-major-source"); 44459GENERATION_MAJOR_SOURCE(Highcharts, appPath); 44460 44461const electric_storage_psh_gen = require("../electricity/charts/electric-storage-psh-gen"); 44462electric_storage_psh_gen(Highcharts, appPath); 44463 44464const electric_storage_bess_capacity = require("../electricity/charts/electric-storage-bess-capacity"); 44465electric_storage_bess_capacity(Highcharts, appPath); 44466 44467const residential_sector_electricity_consumption_by_major_end_uses = require("../electricity/charts/residential-sector-electricity-consumption-by-major-end-uses"); 44468residential_sector_electricity_consumption_by_major_end_uses(Highcharts, appPath); 44469 44470const RETAIL_MAJOR_SECTORS = require("../electricity/charts/retail-major-sectors"); 44471RETAIL_MAJOR_SECTORS(Highcharts, appPath); 44472 44473const commercial_sector_electricity_consumption_by_major_end_uses = require("../electricity/charts/commercial-sector-electricity-consumption-by-major-end-uses"); 44474commercial_sector_electricity_consumption_by_major_end_uses(Highcharts, appPath); 44475 44476const manufacturing_electricity_consumption_by_major_end_uses = require("../electricity/charts/manufacturing-electricity-consumption-by-major-end-uses"); 44477manufacturing_electricity_consumption_by_major_end_uses(Highcharts, appPath); 44478 44479const major_components_average_price_of_electricity = require("../electricity/charts/major-components-average-price-of-electricity"); 44480major_components_average_price_of_electricity(Highcharts, appPath); 44481 44482 44483// Nuclear 44484const GENERATION_CAPACITY_GENERATION = require("../nuclear/charts/generation-capacity-generation"); 44485GENERATION_CAPACITY_GENERATION(Highcharts, appPath); 44486 44487const sources_of_uranium = require("../nuclear/charts/sources-of-uranium"); 44488sources_of_uranium(Highcharts, appPath); 44489 44490const available_generating_capacity_annual_basis = require("../nuclear/charts/available-generating-capacity-annual-basis"); 44491available_generating_capacity_annual_basis(Highcharts, appPath); 44492 44493// Wind 44494const GENERATION_SHARE_TOTAL = require("../wind/charts/generation-share-total"); 44495GENERATION_SHARE_TOTAL(Highcharts, appPath); 44496 44497const TOP_WIND_STATES = require("../wind/charts/top-wind-states"); 44498TOP_WIND_STATES(Highcharts, usAllTopo, appPath); 44499 44500const utility_scale_wind_generation = require("../wind/charts/utility-scale-wind-generation"); 44501utility_scale_wind_generation(Highcharts, usSmallTopo, appPath); 44502 44503// Hydropower
44504const GENERATION_SHARE_GENERATION = require("../hydropower/charts/generation-share-generation"); 44505GENERATION_SHARE_GENERATION(Highcharts, appPath); 44506 44507const TOP_HYDROPOWER_STATES = require("../hydropower/charts/top-hydropower-states"); 44508TOP_HYDROPOWER_STATES(Highcharts, usAllTopo, appPath); 44509 44510const hydro_generation_by_state = require("../hydropower/charts/hydro-generation-by-state"); 44511hydro_generation_by_state(Highcharts, usSmallTopo, appPath); 44512 44513//Geothermal 44514const GEOTHERMAL_ELECTRICITY_GENERATION = require("../geothermal/charts/geothermal-electricity-generation"); 44515GEOTHERMAL_ELECTRICITY_GENERATION(Highcharts, usAllTopo, appPath); 44516 44517 44518 44519// Toggles class on the clicked main menu item 44520$('.tray-item').click(function () { 44521 $(this).toggleClass("active"); 44522 $('#d-' + this.id).toggleClass("active"); 44523 $('.tray-display:not(#d-' + this.id + ')').removeClass("active"); 44524 $('.tray-item:not(#' + this.id + ')').removeClass("active"); 44525}); 44526$('.menu-controls button').click(function () { 44527 $(this).parents('.active').removeClass("active"); 44528 $('.tray-item').removeClass("active"); 44529}); 44530 44531 44532},{"../biofuels/charts/biodiesel-renewdiesel-other-consumption":166,"../biofuels/charts/biodiesel-renewdiesel-other-production":167,"../biofuels/charts/biofuels-consumption-major-type":168,"../biofuels/charts/biofuels-production-major-type":169,"../biofuels/charts/biofuels-trade-by-type":170,"../biofuels/charts/ethanol-supply-production-states":171,"../biofuels/charts/feedstock-inputs-biodiesel-production":172,"../biofuels/charts/feedstocks-for-biofuels-production":173,"../biofuels/charts/fuel-ethanol-motor-gasoline":174,"../biofuels/charts/us-biodiesel-consumption":175,"../biomass/charts/management-of-msw-us":176,"../biomass/charts/percent-waste-burned":177,"../biomass/charts/total-msw-generation-by-type-of-waste":178,"../coal/charts/annual-prices-delivered-end-use-sectors":179,"../coal/charts/coal-consumption-by-major-end-users":180,"../coal/charts/coal-imports-exports":181,"../coal/charts/coal-production-consumption-net-exports":182,"../coal/charts/reserves-by-type-mining-method":183,"../coal/charts/top-coal-states":184,"../diesel-fuel/charts/crude-retail-prices":185,"../electricity/charts/commercial-sector-electricity-consumption-by-major-end-uses":186,"../electricity/charts/electric-storage-bess-capacity":187,"../electricity/charts/electric-storage-psh-gen":188,"../electricity/charts/generating-capacity-major-source":189,"../electricity/charts/generation-capacity-by-type":190,"../electricity/charts/generation-capacity-major":191,"../electricity/charts/generation-major-source":192,"../electricity/charts/generation-renewable-sources":193,"../electricity/charts/major-components-average-price-of-electricity":194,"../electricity/charts/manufacturing-electricity-consumption-by-major-end-uses":195,"../electricity/charts/residential-sector-electricity-consumption-by-major-end-uses":196,"../electricity/charts/retail-major-sectors":197,"../electricity/charts/retail-sales-major":198,"../energy-and-the-environment/charts/carbon-dioxide-emissions-by-major-fuel-type":199,"../energy-and-the-environment/charts/carbon-dioxide-end-use":200,"../energy-and-the-environment/charts/energy-end-use-sector":201,"../energy-and-the-environment/charts/greenhouse-gas-emissions-by-gas":202,"../energy-and-the-environment/charts/major-fuel-energy-sources":203,"../energy-and-the-environment/charts/world-carbon-dioxide-emissions":204,"../gasoline/charts/annual-regular-grade-gasoline-prices":205,"../gasoline/charts/average-monthly-prices":206,"../gasoline/charts/regular-grade-gasoline-demand-retail-price":207,"../gasoline/charts/us-gasoline-stocks":208,"../geothermal/charts/geothermal-electricity-generation":209,"../heating-oil/charts/average-monthly-heating-crude":210,"../heating-oil/charts/heating-oil-sales-by-census":211,"../heating-oil/charts/major-price-components":212,"../heating-oil/charts/use-of-heating-oil":213,"../hydrocarbon-gas-liquids/charts/consumption-by-end-use-sector":214,"../hydrocarbon-gas-liquids/charts/consumption-by-type":215,"../hydrocarbon-gas-liquids/charts/exports-by-type":216,"../hydrocarbon-gas-liquids/charts/production-by-source":217,"../hydrocarbon-gas-liquids/charts/production-by-type":218,"../hydrocarbon-gas-liquids/charts/production-from-petroleum-refining":219,"../hydrocarbon-gas-liquids/charts/production-natural-gas-processing":220,"../hydrocarbon-gas-liquids/charts/propane-by-regionofentry":221,"../hydrocarbon-gas-liquids/charts/propane-consumption-by-end-use-sector":222,"../hydrocarbon-gas-liquids/charts/propane-prices":224,"../hydrocarbon-gas-liquids/charts/propane-prices-by-region":223,"../hydrocarbon-gas-liquids/charts/propane-production-by-source":225,"../hydrocarbon-gas-liquids/charts/residential-propane-consumption-by-census-region":226,"../hydrocarbon-gas-liquids/charts/residential-propane-consumption-by-end-use":227,"../hydrocarbon-gas-liquids/charts/spot-prices.js":228,"../hydrocarbon-gas-liquids/charts/supply-disposition":229,"../hydropower/charts/generation-share-generation":230,"../hydropower/charts/hydro-generation-by-state":231,"../hydropower/charts/top-hydropower-states":232,"../natural-gas/charts/average-annual-residential-natgas-prices-by-state":239,"../natural-gas/charts/average-wellhead-citygate-residential-prices":240,"../natural-gas/charts/comsumption-by-sector-area-chart":241,"../natural-gas/charts/customer-choice-program":242,"../natural-gas/charts/dry-natgas-production-by-source-refcase":243,"../natural-gas/charts/lng-imports-exports":244,"../natural-gas/charts/monthly-dry-citygate":245,"../natural-gas/charts/monthly-shale-production":246,"../natural-gas/charts/nat-gas-consumption-by-sector":247,"../natural-gas/charts/natgas-imports-exports-netimports":248,"../natural-gas/charts/natgas-proved-reserves-by-statearea":249,"../natural-gas/charts/ng-consumption-dryprod-netimports":250,"../natural-gas/charts/top-nat-gas-producing-states":251,"../natural-gas/charts/total-natgas-proved-reserves":252,"../nuclear/charts/available-generating-capacity-annual-basis":253,"../nuclear/charts/generation-capacity-generation":254,"../nuclear/charts/sources-of-uranium":255,"../oil-and-petroleum-products/charts/crude-oil-production":256,"../oil-and-petroleum-products/charts/net-imports-petroleum-shares-consumption":257,"../oil-and-petroleum-products/charts/net-petroleum-imports-by-type":258,"../oil-and-petroleum-products/charts/petroleum-consumption":259,"../oil-and-petroleum-products/charts/petroleum-imports":260,"../oil-and-petroleum-products/charts/refiner-acquisition-cost":261,"../oil-and-petroleum-products/charts/refiner-blender-net-production":262,"../oil-and-petroleum-products/charts/refiner-blender-netinput-by-type-share-total":263,"../oil-and-petroleum-products/charts/top-crude-oil-producing-states":264,"../oil-and-petroleum-products/charts/top-oil-countries":265,"../renewable-sources/charts/portfolio-standards-and-goals":266,"../renewable-sources/charts/renewable-energy-consumption-major-sources":267,"../solar/charts/small-scale-photovoltaic-generation":268,"../solar/charts/utility-scale-generation":269,"../us-energy-facts/charts/energy-net-imports-by-major-sources-totals":270,"../us-energy-facts/charts/import-exports-primary-energy-overview":271,"../us-energy-facts/charts/primary-consumption-by-major-source":272,"../us-energy-facts/charts/primary-energy-production-by-major-source-history":273,"../us-energy-facts/charts/primary-energy-production-by-major-sources":274,"../us-energy-facts/charts/state-energy-data-system-map":275,"../us-energy-facts/charts/state-energy-profile-map":276,"../use-of-energy/charts/air-conditioning-year-constructed":277,"../use-of-energy/charts/commercial-bldgs-intensity-trend":278,"../use-of-energy/charts/commercial-building-floorspace-by-census-region":279,"../use-of-energy/charts/commercial-buildings-by-major-end-uses":280,"../use-of-energy/charts/commercial-buildings-census-region-energy-use-type":281,"../use-of-energy/charts/commercial-buildings-electricity-end-uses":282,"../use-of-energy/charts/commercial-buildings-electricity-natgas-use":283,"../use-of-energy/charts/commercial-buildings-energy-end-use-type":284,"../use-of-energy/charts/commercial-buildings-energy-use-type":285,"../use-of-energy/charts/commercial-buildings-floorspace":286,"../use-of-energy/charts/commercial-buildings-fuel-use":287,"../use-of-energy/charts/commercial-buildings-number":288,"../use-of-energy/charts/commercial-buildings-types-intensity":289,"../use-of-energy/charts/consumption-home-census-region":290,"../use-of-energy/charts/consumption-of-electricity-has-generally-declined":291,"../use-of-energy/charts/electricity-use-commercial-buildings-by-major-enduse":292,"../use-of-energy/charts/end-use-consumption-by-housing-type":293,"../use-of-energy/charts/energy-consumption-by-end-use-sectors":294,"../use-of-energy/charts/energy-consumption-commercial-buildings-by-census-region":295,"../use-of-energy/charts/energy-indicators-absolute":296,"../use-of-energy/charts/energy-indicators-index":297,"../use-of-energy/charts/energy-indicators-ratio":298,"../use-of-energy/charts/energy-use-by-type-commercial-building":299,"../use-of-energy/charts/ev-cars-projections":300,"../use-of-energy/charts/industrial-sector-energy-consumption-by-type-industry":301,"../use-of-energy/charts/industrial-sector-energy-use-by-source":302,"../use-of-energy/charts/major-energy-sources-used-in-commercial-buildings":303,"../use-of-energy/charts/motor-gasoline-consumption-trans-light-fuel":304,"../use-of-energy/charts/percentage-of-homes-with-refrigerators-freezers":305,"../use-of-energy/charts/residential-energy-consumption-by-source":306,"../use-of-energy/charts/residential-site-electricity-consumption-by-enduse":307,"../use-of-energy/charts/total-energy-consumption-by-end-use-sector":309,"../use-of-energy/charts/total-energy-consumption-by-end-use-sector-column":308,"../use-of-energy/charts/total-fuel-consumption-in-manufacturing":310,"../use-of-energy/charts/transportation-by-type":311,"../use-of-energy/charts/transportation-energy-source-fuels":312,"../use-of-energy/charts/us-average-by-census-region-selected-years":313,"../use-of-energy/charts/us-energy-used-for-transportation":314,"../use-of-energy/charts/us-households-total-by-census-region":315,"../wind/charts/generation-share-total":316,"../wind/charts/top-wind-states":317,"../wind/charts/utility-scale-wind-generation":318,"./energy_calculator":237,"./svgExport":238,"@highcharts/map-collection/countries/us/custom/us-small.topo.json":1,"@highcharts/map-collection/countries/us/us-all.topo.json":2,"blueimp-canvas-to-blob":11,"eia-highcharts-modules/eia-theme":17,"eia-highcharts-modules/maps/us-small-with-offshore.geo.json":18,"es6-shim":85,"es7-shim":97,"highcharts":110,"highcharts/highcharts-more":109,"highcharts/modules/accessibility":111,"highcharts/modules/data":112,"highcharts/modules/exporting":113,"highcharts/modules/map":114,"proj4":138}],234:[function(require,module,exports){ 44533const numeral = require('numeral'); 44534 44535exports.convertForm = function(form) {
44536 let firstValue = 0; 44537 let initialPosition = 0; 44538 let noEntries = true; 44539 // select all child elements of formSection 44540 const formChildren = form.target.children; 44541 44542 for (let i = 1; i < 5; i++) { 44543 // Find first non-blank entry; if multiple entries, clearForm and return false 44544 if ( 44545 formChildren[i].firstElementChild.value !== null && 44546 formChildren[i].firstElementChild.value.length !== 0 && 44547 noEntries 44548 ) { 44549 initialPosition = i; 44550 firstValue = 44551 formChildren[i].firstElementChild.value / 44552 determineFactor(i, formChildren); 44553 noEntries = false; 44554 } else if (formChildren[i].firstElementChild.value.length !== 0) { 44555 clearForm(form); 44556 return false; 44557 } 44558 } 44559 44560 if (firstValue === 0) { 44561 clearForm(form); 44562 return false; 44563 } 44564 44565 for (let j = 1; j < 5; j++) { 44566 if (j === initialPosition) { 44567 formChildren[j].firstElementChild.value = formatNumber( 44568 formChildren[j].firstElementChild.value 44569 ); 44570 } else { 44571 formChildren[j].firstElementChild.value = calculateValue( 44572 firstValue, 44573 determineFactor(j, formChildren) 44574 ); 44575 } 44576 } 44577 return true; 44578}; 44579 44580const calculateValue = (exports.calculateValue = function(firstValue, factor) { 44581 const valueToFormat = '' + firstValue * factor; 44582 return formatNumber(valueToFormat); 44583}); 44584 44585function formatNumber(valueToFormat) { 44586 // sceintific notation if >= 10 digits, regular digits with commas + decimal places otherwise 44587 return valueToFormat.length > 20 || +valueToFormat < 0.001 44588 ? numeral(valueToFormat).format('0,0e+0') 44589 : numeral(valueToFormat).format('0,0.[000]'); 44590} 44591 44592function determineFactor(position, formChildren) { 44593 // 1st inputs always / by 1, all other factors are value of hidden lastChild input tag 44594 return position === 1 ? 1 : formChildren[position].lastElementChild.value; 44595} 44596 44597const clearForm = (exports.clearForm = function(form) { 44598 // select all child elements of formSection 44599 const formChildren = isFormSelector(form) 44600 ? form.target.children 44601 : form.target.parentElement.parentElement.children; 44602 44603 //set all first inputs in that section to empty string 44604 for (let i = 1; i < 5; i++) { 44605 formChildren[i].firstElementChild.value = ''; 44606 } 44607 return true; 44608}); 44609 44610function isFormSelector(event) { 44611 return event.target.matches 44612 ? event.target.matches('form') 44613 : event.target.msMatchesSelector('form'); 44614} 44615 44616},{"numeral":120}],235:[function(require,module,exports){ 44617module.exports = function setCreditSizeAndPosition() { 44618 44619 if($('.highcharts-credits', this.container).get(0) !== undefined) { 44620 44621 var creditsElem = $('.highcharts-credits', this.container).get(0); 44622 var initialCreditsBoxHeight = creditsElem.getBBox().height; 44623 this.lastCreditsBoxHeight = 44624 this.lastCreditsBoxHeight === undefined 44625 ? initialCreditsBoxHeight 44626 : this.lastCreditsBoxHeight; 44627 var initialBottomSpacing = this.spacing[2]; 44628 44629 // Container width - spacingLeft - spacingRight 44630 var desiredWidth = 44631 $(this.container).width() - 44632 this.spacing[1] - 44633 this.spacing[3] - 44634 this.credits.alignOptions.x + 44635 'px'; 44636 44637 // check to avoid infinite loop and error resulting from exceeding the maximum call stack 44638 if (desiredWidth !== this.credits.styles.width) { 44639 this.update({ 44640 credits: { 44641 style: { 44642 width: desiredWidth 44643 } 44644 } 44645 }); 44646 // prevent credits cutoff on small screens 44647 if ($(this.container).width() < 400) { 44648 this.update({ 44649 credits: { 44650 style: { 44651 'font-size': '9.7px' 44652 } 44653 } 44654 }); 44655 } 44656 } 44657 44658 // the old element is destroyed and a new element is created by the previous update, get it again 44659 creditsElem = $('.highcharts-credits', this.container).get(0); 44660 44661 var heightChange = this.lastCreditsBoxHeight - creditsElem.getBBox().height; 44662 this.lastCreditsBoxHeight = creditsElem.getBBox().height; 44663 44664 // check to avoid infinite loop and error resulting from exceeding the maximum call stack 44665 if (heightChange) { 44666 this.update({ 44667 credits: { 44668 position: {
44669 y: this.credits.alignOptions.y + heightChange 44670 } 44671 }, 44672 chart: { 44673 spacingBottom: initialBottomSpacing - heightChange 44674 } 44675 }); 44676 } 44677 } 44678 else if($('.highcharts-caption', this.container).get(0) !== undefined) { 44679 44680 var captionElem = $('.highcharts-caption', this.container).get(0); 44681 var chartID = $(this.container).get(0).id; 44682 44683 // Container width - spacingLeft - spacingRight 44684 var desiredWidth = 44685 $(this.container).width() - 44686 this.spacing[1] - 44687 this.spacing[3] - 44688 this.caption.alignOptions.x + 44689 'px'; 44690 44691 44692 // check to avoid infinite loop and error resulting from exceeding the maximum call stack 44693 if (desiredWidth !== $(this.container).width()) { 44694 $('#' + chartID + ' .highcharts-caption').css('width', desiredWidth); 44695 } 44696 } 44697}; 44698},{}],236:[function(require,module,exports){ 44699module.exports = function (csv) { 44700 var output = []; 44701 44702 function parseField(remainingText) { 44703 var ret = { 44704 remainingText: "", 44705 field: "", 44706 endOfLine: false 44707 }, 44708 fieldParsed = false, 44709 i = 0, 44710 startsWithQuote = remainingText[0] === "\""; 44711 44712 if (startsWithQuote) { 44713 i++; 44714 } 44715 44716 while (!fieldParsed && i < remainingText.length) { 44717 if (remainingText[i] === "\"" && !startsWithQuote) { 44718 // Invalid format 44719 throw 'Invalid format. Fields not surrounded by double-quotes cannot contain double-quotes'; 44720 } 44721 else if (startsWithQuote && remainingText[i] === "\"") { 44722 if (i === (remainingText.length - 1) || remainingText[i + 1] === "\n" || (remainingText[i + 1] === "\r" && remainingText[i + 2] === "\n")) { 44723 // end of row or file 44724 ret.endOfLine = true; 44725 fieldParsed = true; 44726 if ((remainingText[i + 1] === "\r" && remainingText[i + 2] === "\n")) { 44727 i++; 44728 } 44729 i++; 44730 } 44731 else if (remainingText[i + 1] === "\"") { 44732 // Handle escaped double-quotes 44733 ret.field += "\""; 44734 i++; 44735 } 44736 else if (remainingText[i + 1] === ",") { 44737 // end of field 44738 fieldParsed = true; 44739 i++; 44740 } 44741 else { 44742 // Invalid format 44743 throw 'Invalid format. Unescaped double-quote detected.'; 44744 } 44745 } 44746 else if (!startsWithQuote && remainingText[i] === ",") { 44747 // end of field, not enclosed by quotes 44748 fieldParsed = true; 44749 } 44750 else if (!startsWithQuote && (remainingText[i] === "\n" || (remainingText[i] === "\r" && remainingText[i + 1] === "\n"))) { 44751 // end of row, not enclosed by quotes 44752 ret.endOfLine = true; 44753 if ((remainingText[i] === "\r" && remainingText[i + 1] === "\n")) { 44754 i++; 44755 } 44756 fieldParsed = true; 44757 } 44758 else { 44759 // nothing special 44760 ret.field += remainingText[i]; 44761 } 44762 44763 i++; 44764 } 44765 ret.remainingText = remainingText.substr(i); 44766 return ret; 44767 } 44768 44769 var remainingCSV = csv, parsedField; 44770 44771 output.push([]); 44772 44773 while (remainingCSV.length > 0) { 44774 parsedField = parseField(remainingCSV); 44775 44776 output[output.length - 1].push(parsedField.field); 44777 44778 if (parsedField.endOfLine) { 44779 output.push([]); 44780 } 44781 remainingCSV = parsedField.remainingText; 44782 } 44783 44784 return output; 44785}; 44786},{}],237:[function(require,module,exports){ 44787const calculatorMethods = require('./calculatorMethods') 44788 44789module.exports = function () { 44790 // select an element unique to this page 44791 const foodCalculator = document.getElementById('foodCalculator'); 44792 44793 // select document + window 44794 const calculatorDoc = foodCalculator.ownerDocument; 44795 44796 calculatorDoc.addEventListener('click', function (event) { 44797 let matches; 44798 if (event.target.matches) { 44799 matches = event.target.matches('input[type=text]') || event.target.matches('button[type=reset]'); 44800 } else { 44801 matches = event.target.msMatchesSelector('input[type=text]') || event.target.msMatchesSelector('button[type=reset]'); // IE Support 44802 } 44803 44804 if (matches) { 44805 calculatorMethods.clearForm(event); 44806 } 44807 44808 }, false); 44809 44810 calculatorDoc.addEventListener('submit', function (event) { 44811 let matches; 44812 if (event.target.matches) { 44813 matches = event.target.matches('form'); 44814 } else { 44815 matches = event.target.msMatchesSelector('form'); // IE Support 44816 } 44817 44818 if (matches) { 44819 event.preventDefault() 44820 calculatorMethods.convertForm(event); 44821 } 44822 }, false); 44823} 44824 44825},{"./calculatorMethods":234}],238:[function(require,module,exports){ 44826function triggerDownload(imgURI) { 44827 var a = document.createElement('a'); 44828 a.download = 'image.png'; // filename 44829 a.target = '_blank'; 44830 a.href = imgURI; 44831 44832 // trigger download button 44833 // (set `bubbles` to false here. 44834 // or just `a.click()` if you don't care about bubbling) 44835 a.dispatchEvent(new MouseEvent('click', { 44836 view: window, 44837 bubbles: false, 44838 cancelable: true 44839 })); 44840} 44841var svgImages = document.querySelectorAll('.svg-image-download'); 44842 44843if(svgImages.length > 0) {
44844 svgImages.forEach((exportButton) => { 44845 exportButton.addEventListener('click', function () { 44846 var svgNode = document.querySelector('#'+exportButton.nextElementSibling.id); 44847 var svgString = (new XMLSerializer()).serializeToString(svgNode); 44848 var svgBlob = new Blob([svgString], { 44849 type: 'image/svg+xml;charset=utf-8' 44850 }); 44851 44852 var DOMURL = window.URL || window.webkitURL || window; 44853 var url = DOMURL.createObjectURL(svgBlob); 44854 44855 var image = new Image(); 44856 image.width = svgNode.width.baseVal.value; 44857 image.height = svgNode.height.baseVal.value; 44858 image.src = url; 44859 image.onload = function () { 44860 // get the size of the svg image 44861 var { width, height } = svgNode.getBBox(); 44862 width = width*3; 44863 height = height*3; 44864 // create a canvas and set its size 44865 var canvas = document.createElement('canvas'); 44866 canvas.setAttribute('width', width); 44867 canvas.setAttribute('height', height); 44868 44869 var ctx = canvas.getContext('2d'); 44870 ctx.drawImage(image, 0, 0, width, height); 44871 DOMURL.revokeObjectURL(url); 44872 44873 var imgURI = canvas 44874 .toDataURL('image/png'); 44875 triggerDownload(imgURI); 44876 }; 44877 }); 44878 }); 44879} 44880 44881 44882 44883},{}],239:[function(require,module,exports){ 44884const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 44885const csvParser = require('../../includes/csvParser'); 44886 44887 44888module.exports = function (Highcharts, map, appPath) { 44889 44890 const elementId = 'average-annual-residential-natgas-prices-by-state'; 44891 //let mapData = Highcharts.geojson(map); 44892 44893 // Our own options definition as two different series, will populate the data in the complete callback 44894 var seriesOptions = [ 44895 { 44896 id: "rank1", 44897 type: "map", 44898 mapData : Highcharts.geojson(map, 'map'), 44899 allAreas: false, 44900 keys: ["postal-code"], 44901 joinBy: ['hc-a2', 'code'], 44902 data: [], 44903 borderWidth: 0.5, 44904 states: { 44905 hover: { 44906 brightness: 0, 44907 borderWidth: 1, 44908 borderColor: Highcharts.eiaColors.darkGrey 44909 } 44910 }, 44911 dataLabels: { 44912 enabled: true, 44913 formatter: function () { 44914 if (this.point.properties) { 44915 return this.point.properties['hc-a2']; 44916 } 44917 return this.point.options.ucName; 44918 }, 44919 style: { 44920 fontSize: '10px' 44921 } 44922 }, 44923 tooltip: { 44924 valueSuffix: '' 44925 } 44926 }, 44927 { 44928 type: 'mapline', 44929 mapData : Highcharts.geojson(map, 'mapline'), 44930 colorAxis : false, 44931 color: 'silver', 44932 nullColor : 'silver', 44933 lineWidth: 1, 44934 showInLegend: false, 44935 enableMouseTracking: false, 44936 states : { 44937 inactive : { 44938 enabled : false 44939 } 44940 } 44941 } 44942 ]; 44943 44944 if ($('#' + elementId).length > 0) { 44945 Highcharts.mapChart(elementId, { 44946 chart: { 44947 map: map, 44948 spacingBottom: 25, 44949 events: { 44950 load: creditsSizeAndPosition, 44951 redraw: creditsSizeAndPosition 44952 } 44953 }, 44954 mapView : { 44955 insetOptions : { 44956 borderWidth : 1, 44957 borderColor : 'silver' 44958 } 44959 }, 44960 credits: { 44961 enabled: false, 44962 href: null, 44963 style: { 44964 cursor: 'normal' 44965 } 44966 }, 44967 caption: { 44968 verticalAlign: 'bottom', 44969 useHTML: true, 44970 margin: 0, 44971 style: { 44972 color: '#888', 44973 fontSize: '11px' 44974 }, 44975 x: 32, 44976 y: 33 44977 }, 44978 tooltip: { 44979 enabled: true, 44980 useHTML: true, 44981 formatter: function () { 44982 var html = (this.point.name && this.point.nameCode) ? '<b>' + this.point.name + '</b><br/>' + this.point.nameCode : ''; 44983 if (html !== '') 44984 return html 44985 } 44986 }, 44987 data: { 44988 csvURL: appPath + '/natural-gas/charts/' + elementId + '.csv', 44989 startRow: 5, 44990 firstRowAsNames: false, 44991 complete: function (options) { 44992 var point; 44993 var i; 44994 44995 for (i = 0; i < options.series[0].data.length; i++) { 44996 44997 point = options.series[0].data[i]; 44998 var pointValueString = '$' + Highcharts.numberFormat(point.value, 2); 44999 45000 if (pointValueString) { 45001 seriesOptions[0].data.push({ 45002 code: point.name, 45003 nameCode: "<span>" + pointValueString + "</span>", 45004 value: Highcharts.numberFormat(point.value, 2) 45005 });
45006 } 45007 45008 } 45009 45010 // replace series options parsed by Highcharts with our own options definition 45011 options.series = seriesOptions; 45012 45013 }, 45014 beforeParse: function (csv) { 45015 45016 var parsedCSV = csvParser(csv); 45017 this.chart.title.update({ text: parsedCSV[0][0] }); 45018 this.chart.subtitle.update({ text: '<span style="color:#888;font-weight:bold;font-size:12px;fill:#888;">' + parsedCSV[1][0] + '</span><br/>' }); 45019 this.chart.caption.update({ text: parsedCSV[2][0] + '<br/>' + parsedCSV[3][0] }); 45020 45021 45022 this.chart.update( 45023 { 45024 accessibility: { 45025 description: parsedCSV[4][0] 45026 }, 45027 exporting: { 45028 allowHTML: true, 45029 menuItemDefinitions: 45030 { 45031 label: { 45032 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 45033 } 45034 }, 45035 buttons: { 45036 contextButton: { 45037 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 45038 } 45039 } 45040 } 45041 } 45042 ); 45043 return csv; 45044 } 45045 }, 45046 colorAxis: { 45047 dataClasses: [{ 45048 color: Highcharts.eiaColors.blue, 45049 from: 7.00, 45050 to: 8.99 45051 }, { 45052 color: '#66C0E7', 45053 from: 9.00, 45054 to: 10.99 45055 }, { 45056 color: '#CCEAF7', 45057 from: 11.00, 45058 to: 12.99 45059 }, {
45060 color: '#FFF4CC', 45061 from: 13.00, 45062 to: 14.99 45063 }, { 45064 color: '#FFDD67', 45065 from: 15.00 45066 }] 45067 }, 45068 legend: { 45069 align: 'center', 45070 backgroundColor: 'white', 45071 borderColor: 'white', 45072 layout: 'horizontal', 45073 symbolPadding: 10, 45074 symbolRadius: 0, 45075 valueDecimals: 2, 45076 labelFormatter: function () { 45077 45078 if (this.to === undefined) { 45079 45080 return '> $' + Highcharts.numberFormat(this.from, 2); 45081 } 45082 else { 45083 return '$' + Highcharts.numberFormat(this.from, 2) + ' - $' + Highcharts.numberFormat(this.to, 2); 45084 } 45085 } 45086 }, 45087 responsive: { 45088 rules: [{ 45089 condition: { 45090 maxWidth: 321 45091 }, 45092 45093 chartOptions: { 45094 chart: { 45095 height: 330 45096 }, 45097 title: { 45098 margin: 5 45099 } 45100 } 45101 }, 45102 { 45103 condition: { 45104 minWidth: 322, 45105 maxWidth: 400 45106 }, 45107 45108 chartOptions: { 45109 chart: { 45110 height: 350 45111 }, 45112 title: { 45113 margin: 5 45114 } 45115 } 45116 }, 45117 { 45118 condition: { 45119 minWidth: 401, 45120 maxWidth: 450 45121 }, 45122 45123 chartOptions: { 45124 chart: { 45125 height: 380 45126 }, 45127 title: { 45128 margin: 5 45129 } 45130 } 45131 }, 45132 { 45133 condition: { 45134 minWidth: 451 45135 }, 45136 45137 chartOptions: { 45138 chart: { 45139 height: '65%' 45140 }, 45141 title: { 45142 margin: 15 45143 } 45144 } 45145 }] 45146 } 45147 }); 45148 } 45149}; 45150 45151},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],240:[function(require,module,exports){ 45152const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 45153const csvParser = require('../../includes/csvParser'); 45154 45155module.exports = function (Highcharts, appPath) { 45156 const elementId = 'average-wellhead-citygate-residential-prices'; 45157 var units = ''; 45158 45159 if ($('#' + elementId).length > 0) { 45160 Highcharts.chart(elementId, { 45161 chart: { 45162 type: 'line', 45163 spacingBottom: 25, 45164 events: { 45165 load: creditsSizeAndPosition, 45166 redraw: creditsSizeAndPosition 45167 } 45168 }, 45169 credits: { 45170 enabled: true, 45171 href: null, 45172 style: { 45173 cursor: 'normal' 45174 } 45175 }, 45176 data: { 45177 csvURL: appPath + '/natural-gas/charts/' + elementId + '.csv', 45178 startRow: 5, 45179 firstRowAsNames: true, 45180 beforeParse: function (csv) { 45181 var parsedCSV = csvParser(csv); 45182 this.chart.title.update({ text: parsedCSV[0][0] }); 45183 units = parsedCSV[1][0]; 45184 this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } }); 45185 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 45186 this.chart.update( 45187 { 45188 accessibility: { 45189 description: parsedCSV[4][0], 45190 }, 45191 exporting: { 45192 menuItemDefinitions: 45193 { 45194 label: { 45195 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 45196 } 45197 }, 45198 buttons: { 45199 contextButton: { 45200 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 45201 } 45202 } 45203 } 45204 } 45205 ); 45206 return csv; 45207 } 45208 }, 45209 xAxis: { 45210 labels: { 45211 format: "{value}", 45212 }, 45213 tickInterval: 5, 45214 startOnTick: true, 45215 minPadding: 0, 45216 maxPadding: 0 45217 }, 45218 yAxis: { 45219 tickInterval: 2, 45220 labels: { 45221 format: "${value:.2f}" 45222 } 45223 }, 45224 tooltip: { 45225 useHTML: true, 45226 shared: true, 45227 formatter: function () { 45228 var html = '<b>' + this.x + '</b><br/>'; 45229 this.points.filter(function (value) { 45230 html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25AC\u2009\u2009' + '</span><b>' + value.series.name + ':</b> $' + Highcharts.numberFormat(value.y, 2) + ' ' + units + '<br/>'; 45231 }); 45232 return html; 45233 } 45234 }, 45235 responsive: { 45236 rules: [{ 45237 condition: { 45238 maxWidth: 450 45239 }, 45240 chartOptions: { 45241 chart: { 45242 height: 410 45243 } 45244 } 45245 }, 45246 { 45247 condition: { 45248 minWidth: 451 45249 }, 45250 45251 chartOptions: { 45252 chart: { 45253 height: '65%' 45254 } 45255 } 45256 }] 45257 } 45258 }); 45259 } 45260}; 45261 45262},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],241:[function(require,module,exports){ 45263const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 45264const csvParser = require('../../includes/csvParser'); 45265 45266module.exports = function (Highcharts, appPath) { 45267 const elementId = 'comsumption-by-sector-area-chart'; 45268 var units = ''; 45269 45270 if ($('#' + elementId).length > 0) { 45271 Highcharts.chart(elementId, { 45272 chart: { 45273 type: 'area', 45274 spacingBottom: 30, 45275 events: { 45276 load: creditsSizeAndPosition, 45277 redraw: creditsSizeAndPosition 45278 } 45279 }, 45280 credits: { 45281 enabled: true, 45282 href: null, 45283 style: { 45284 cursor: 'normal' 45285 } 45286 }, 45287 data: { 45288 csvURL: appPath + '/natural-gas/charts/' + elementId + '.csv', 45289 startRow: 5, 45290 firstRowAsNames: true, 45291 beforeParse: function (csv) { 45292 var parsedCSV = csvParser(csv); 45293 this.chart.title.update({ text: parsedCSV[0][0] }); 45294 units = parsedCSV[1][0]; 45295 this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } }); 45296 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 45297 this.chart.update( 45298 { 45299 accessibility: { 45300 description: parsedCSV[4][0], 45301 }, 45302 exporting: { 45303 menuItemDefinitions: 45304 { 45305 label: { 45306 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 45307 } 45308 }, 45309 buttons: { 45310 contextButton: { 45311 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 45312 } 45313 } 45314 } 45315 } 45316 ); 45317 return csv; 45318 } 45319 }, 45320 colors: [Highcharts.eiaColors.green, Highcharts.eiaColors.yellow, Highcharts.eiaColors.brown, Highcharts.eiaColors.blue, Highcharts.eiaColors.red], 45321 xAxis: { 45322 labels: { 45323 format: "{value}", 45324 }, 45325 tickInterval: 5, 45326 startOnTick: true, 45327 minPadding: 0, 45328 maxPadding: 0 45329 }, 45330 yAxis: { 45331 reversedStacks: false, 45332 tickInterval: 5, 45333 labels: { 45334 format: "{value}" 45335 } 45336 }, 45337 plotOptions: { 45338 series: { 45339 stacking: 'normal' 45340 } 45341 }, 45342 legend: { 45343 reversed: false 45344 }, 45345 tooltip: { 45346 useHTML: true, 45347 shared: true, 45348 formatter: function () { 45349 var html = '<b>' + this.x + '</b><br/>'; 45350 this.points.filter(function (value) { 45351 html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25CF\u2009\u2009' + '</span><b>' + value.series.name + ':</b> ' + Highcharts.numberFormat(value.y, 2) + ' ' + units + '<br/>'; 45352 }); 45353 return html; 45354 } 45355 }, 45356 responsive: { 45357 rules: [{ 45358 condition: { 45359 maxWidth: 450 45360 }, 45361 chartOptions: { 45362 chart: { 45363 height: 410 45364 } 45365 } 45366 }, 45367 { 45368 condition: { 45369 minWidth: 451 45370 }, 45371 45372 chartOptions: { 45373 chart: { 45374 height: '65%' 45375 } 45376 } 45377 }] 45378 } 45379 }); 45380 } 45381}; 45382 45383},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],242:[function(require,module,exports){ 45384const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 45385const csvParser = require('../../includes/csvParser'); 45386 45387module.exports = function (Highcharts, appPath) { 45388 const elementId = 'customer-choice-program'; 45389 var percentage = [], values = []; 45390 var units1 = '', units2 = ''; 45391 45392 if ($('#' + elementId).length > 0) { 45393 Highcharts.chart(elementId, { 45394 chart: { 45395 spacingBottom: 30, 45396 events: { 45397 load: creditsSizeAndPosition, 45398 redraw: creditsSizeAndPosition 45399 } 45400 }, 45401 credits: { 45402 enabled: false, 45403 href: null, 45404 style: { 45405 cursor: 'normal' 45406 } 45407 }, 45408 caption: { 45409 verticalAlign: 'bottom', 45410 useHTML: true, 45411 margin: 0, 45412 style: { 45413 color: '#888', 45414 fontSize: '11px' 45415 }, 45416 x: 32, 45417 y: 39 45418 }, 45419 title: { 45420 margin: 25 45421 }, 45422 data: { 45423 csvURL: appPath + '/natural-gas/charts/' + elementId + '.csv', 45424 startRow: 5, 45425 firstRowAsNames: true, 45426 complete: function (options) { 45427 if (options.series.length > 0) { 45428 options.series[0].type = "column"; 45429 options.series[0].yAxis = 0; 45430 options.series[1].type = "line"; 45431 options.series[1].yAxis = 1; 45432 for (var i = 0; i < options.series.length; i++) { 45433 if (options.series[i].data[0][1] === null) { 45434 options.series[i].showInLegend = false; 45435 } 45436 } 45437 } 45438 }, 45439 beforeParse: function (csv) { 45440 var parsedCSV = csvParser(csv); 45441 units1 = parsedCSV[1][1]; 45442 units2 = parsedCSV[1][2]; 45443 this.chart.title.update({ text: parsedCSV[0][0] }); 45444 this.chart.yAxis[0].update({ title: { text: units1 } }); 45445 this.chart.yAxis[1].update({ title: { text: units2 } }); 45446 this.chart.caption.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 45447 for (var i = 6; i < parsedCSV.length - 1; i++) { 45448 values.push(Number(parsedCSV[i][1])); 45449 percentage.push(parsedCSV[i][2]); 45450 } 45451 45452 this.chart.update( 45453 { 45454 accessibility: { 45455 description: parsedCSV[4][0], 45456 }, 45457 exporting: { 45458 allowHTML: true, 45459 menuItemDefinitions: 45460 { 45461 label: { 45462 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 45463 } 45464 }, 45465 buttons: { 45466 contextButton: { 45467 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 45468 } 45469 } 45470 } 45471 } 45472 ); 45473 return csv; 45474 } 45475 }, 45476 xAxis: { 45477 labels: { 45478 format: "{value}", 45479 autoRotation: [0, -45] 45480 }, 45481 tickInterval: 1, 45482 type: 'dateTime', 45483 minPadding: 0, 45484 maxPadding: 0 45485 }, 45486 yAxis: [{ 45487 maxPadding: 0, 45488 alignTicks: false, 45489 tickInterval: 0.5, 45490 labels: { 45491 format: "{value:.1f}" 45492 } 45493 }, { 45494 gridLineColor: 'none', 45495 opposite: true, 45496 maxPadding: 0, 45497 alignTicks: false, 45498 tickInterval: 5, 45499 labels: { 45500 format: "{value}%" 45501 } 45502 }], 45503 tooltip: { 45504 useHTML: true, 45505 shared: true, 45506 formatter: function () { 45507 var html = '<b>' + this.x + '</b><br/>'; 45508 this.points.filter(function (value) { 45509 const legendItem = value.colorIndex === 1 ? '\u25AC\u2009\u2009' : ' \u25CF\u2004\u2009'; 45510 const sum = value.colorIndex === 1 ? Highcharts.numberFormat(value.y, 0) + '%' : Highcharts.numberFormat(value.y, 2); 45511 html += '<span style="font-size: 16px;color:' + value.series.color + '">' + legendItem + '</span><b>' + value.series.name + ':</b> ' + sum + ' ' + units1 + '<br/>'; 45512 }); 45513 return html; 45514 } 45515 }, 45516 responsive: { 45517 rules: [{ 45518 condition: { 45519 maxWidth: 450 45520 }, 45521 chartOptions: { 45522 chart: { 45523 height: 500 45524 }, 45525 title: { 45526 margin: 35 45527 } 45528 } 45529 }, 45530 { 45531 condition: { 45532 minWidth: 451, 45533 maxWidth: 666 45534 }, 45535 45536 chartOptions: { 45537 chart: { 45538 height: '65%' 45539 }, 45540 title: { 45541 margin: 30 45542 } 45543 } 45544 }, 45545 { 45546 condition: { 45547 minWidth: 667, 45548 maxWidth: 667 45549 }, 45550 45551 chartOptions: { 45552 chart: { 45553 height: '65%' 45554 }, 45555 title: { 45556 margin: 30 45557 } 45558 } 45559 }, 45560 { 45561 condition: { 45562 minWidth: 668 45563 }, 45564 45565 chartOptions: { 45566 chart: { 45567 height: '65%' 45568 }, 45569 title: { 45570 margin: 35 45571 } 45572 } 45573 }] 45574 } 45575 }); 45576 } 45577}; 45578 45579},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],243:[function(require,module,exports){ 45580const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 45581const csvParser = require('../../includes/csvParser'
45581); 45582 45583module.exports = function (Highcharts, appPath) { 45584 const elementId = 'dry-natgas-production-by-source-refcase'; 45585 var units = ''; 45586 var projectionLine; 45587 45588 if ($('#' + elementId).length > 0) { 45589 Highcharts.chart(elementId, { 45590 chart: { 45591 type: 'area', 45592 spacingBottom: 30, 45593 events: { 45594 load: creditsSizeAndPosition, 45595 redraw: creditsSizeAndPosition 45596 } 45597 }, 45598 credits: { 45599 enabled: true, 45600 href: null, 45601 style: { 45602 cursor: 'normal' 45603 } 45604 }, 45605 data: { 45606 csvURL: appPath + '/natural-gas/charts/' + elementId + '.csv', 45607 startRow: 6, 45608 firstRowAsNames: true, 45609 45610 beforeParse: function (csv) { 45611 var parsedCSV = csvParser(csv); 45612 this.chart.title.update({ text: parsedCSV[0][0] }); 45613 this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } }); 45614 units = parsedCSV[1][0]; 45615 projectionLine = parsedCSV[4][1]; 45616 this.chart.xAxis[0].update( 45617 { 45618 plotLines: [ 45619 { 45620 id: 'Divider', 45621 color: Highcharts.eiaColors.lightGrey, 45622 value: projectionLine, 45623 width: 1, 45624 label: { 45625 text: projectionLine, 45626 rotation: 360, 45627 x: -15, 45628 y: -5, 45629 style: { 45630 color: Highcharts.eiaColors.darkGrey 45631 } 45632 }, 45633 zIndex: 8 45634 } 45635 ], 45636 plotBands: [ 45637 { 45638 id: 'History', 45639 from: parsedCSV[4][0], 45640 to: projectionLine, 45641 color: '#ffffff', 45642 label: { 45643 text: 'history', 45644 align: 'center', 45645 y: -5, 45646 style: { 45647 color: Highcharts.eiaColors.darkGrey 45648 } 45649 } 45650 }, 45651 { 45652 id: 'Projections', 45653 from: projectionLine, 45654 to: parsedCSV[4][2], 45655 color: '#ffffff', 45656 label: { 45657 text: 'projections', 45658 align: 'center', 45659 y: -5, 45660 style: { 45661 color: Highcharts.eiaColors.darkGrey 45662 } 45663 } 45664 } 45665 ] 45666 } 45667 ); 45668 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 45669 this.chart.update( 45670 { 45671 accessibility: { 45672 description: parsedCSV[5][0], 45673 }, 45674 exporting: { 45675 menuItemDefinitions: 45676 { 45677 label: { 45678 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 45679 } 45680 }, 45681 buttons: { 45682 contextButton: { 45683 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 45684 } 45685 } 45686 } 45687 } 45688 ); 45689 return csv; 45690 } 45691 }, 45692 colors: [Highcharts.eiaColors.green, Highcharts.eiaColors.brown, Highcharts.eiaColors.red, Highcharts.eiaColors.blue, Highcharts.eiaColors.darkBrown, Highcharts.eiaColors.yellow], 45693 xAxis: { 45694 labels: { 45695 format: "{value}", 45696 type: 'datetime' 45697 }, 45698 tickInterval: 5, 45699 startOnTick: true, 45700 minPadding: 0, 45701 maxPadding: 0 45702 }, 45703 yAxis: { 45704 tickInterval: 10, 45705 labels: { 45706 format: "{value:,.0f}" 45707 }, 45708 title: { 45709 reserveSpace: false,
45710 align: 'high', 45711 rotation: 0, 45712 textAlign: 'left', 45713 offset: 0, 45714 y: -20 45715 } 45716 }, 45717 plotOptions: { 45718 area: { 45719 stacking: 'normal', 45720 } 45721 }, 45722 tooltip: { 45723 useHTML: true, 45724 shared: true, 45725 formatter: function () { 45726 var html = '<b>' + this.x + '</b><br/>'; 45727 this.points.filter(function (value) { 45728 html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25CF\u2009\u2009' + '</span><b>' + value.series.name + ':</b> ' + Highcharts.numberFormat(value.y, 2) + ' ' + units + '<br/>'; 45729 }); 45730 return html; 45731 } 45732 }, 45733 responsive: { 45734 rules: [{ 45735 condition: { 45736 maxWidth: 450 45737 }, 45738 chartOptions: { 45739 chart: { 45740 height: 500 45741 }, 45742 xAxis: { 45743 labels: { 45744 rotate: -45 45745 } 45746 } 45747 } 45748 },{ 45749 condition: { 45750 minWidth: 451 45751 }, 45752 chartOptions: { 45753 chart: { 45754 height: '65%' 45755 }, 45756 xAxis: { 45757 labels: { 45758 rotate: 0 45759 } 45760 } 45761 } 45762 }] 45763 } 45764 }); 45765 } 45766}; 45767 45768},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],244:[function(require,module,exports){ 45769const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 45770const csvParser = require('../../includes/csvParser'); 45771 45772module.exports = function (Highcharts, appPath) { 45773 const elementId = 'lng-imports-exports'; 45774 var units = ''; 45775 45776 if ($('#' + elementId).length > 0) { 45777 Highcharts.chart(elementId, { 45778 chart: { 45779 type: 'line', 45780 spacingBottom: 30, 45781 events: { 45782 load: creditsSizeAndPosition, 45783 redraw: creditsSizeAndPosition 45784 } 45785 }, 45786 credits: { 45787 enabled: true, 45788 href: null, 45789 style: { 45790 cursor: 'normal' 45791 } 45792 }, 45793 data: { 45794 csvURL: appPath + '/natural-gas/charts/' + elementId + '.csv', 45795 startRow: 5, 45796 firstRowAsNames: true, 45797 beforeParse: function (csv) { 45798 var parsedCSV = csvParser(csv); 45799 this.chart.title.update({ text: parsedCSV[0][0] }); 45800 units = parsedCSV[1][0]; 45801 this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } }); 45802 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 45803 this.chart.update( 45804 { 45805 accessibility: { 45806 description: parsedCSV[4][0], 45807 }, 45808 exporting: { 45809 menuItemDefinitions: 45810 { 45811 label: { 45812 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 45813 } 45814 }, 45815 buttons: { 45816 contextButton: { 45817 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 45818 } 45819 } 45820 } 45821 } 45822 ); 45823 return csv; 45824 } 45825 }, 45826 xAxis: { 45827 labels: { 45828 format: "{value}", 45829 }, 45830 tickInterval: 5, 45831 startOnTick: true, 45832 minPadding: 0, 45833 maxPadding: 0 45834 }, 45835 yAxis: { 45836 tickInterval: 100, 45837 labels: { 45838 format: "{value:,.0f}" 45839 }, 45840 maxPadding: 0 45841 }, 45842 tooltip: { 45843 useHTML: true, 45844 shared: true, 45845 formatter: function () { 45846 var html = '<b>' + this.x + '</b><br/>'; 45847 this.points.filter(function (value) { 45848 html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25AC\u2009\u2009' + '</span><b>' + value.series.name + ':</b> ' + Highcharts.numberFormat(value.y, 2) + ' ' + units + '<br/>'; 45849 }); 45850 return html; 45851 } 45852 }, 45853 responsive: { 45854 rules: [{ 45855 condition: { 45856 maxWidth: 450 45857 }, 45858 chartOptions: { 45859 chart: { 45860 height: 400 45861 } 45862 } 45863 }, 45864 { 45865 condition: { 45866 minWidth: 451 45867 }, 45868 45869 chartOptions: { 45870 chart: { 45871 height: '65%' 45872 } 45873 } 45874 }] 45875 } 45876 }); 45877 } 45878}; 45879 45880},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],245:[function(require,module,exports){ 45881const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 45882const csvParser = require('../../includes/csvParser'); 45883 45884module.exports = function (Highcharts, appPath) { 45885 const elementId = 'monthly-dry-citygate'; 45886 let units = ''; 45887 if ($('#' + elementId).length > 0) { 45888 Highcharts.chart(elementId, { 45889 chart: { 45890 type: 'line', 45891 spacingBottom: 25, 45892 events: { 45893 load: creditsSizeAndPosition, 45894 redraw: creditsSizeAndPosition 45895 } 45896 }, 45897 credits: { 45898 enabled: true, 45899 href: null, 45900 style: { 45901 cursor: 'normal' 45902 } 45903 }, 45904 data: { 45905 csvURL: appPath + '/natural-gas/charts/' + elementId + '.csv', 45906 startRow: 6, 45907 firstRowAsNames: true, 45908 complete: function (options) { 45909 if (options.series.length > 0) { 45910 options.series[0].yAxis = 0; 45911 options.series[1].yAxis = 1; 45912 } 45913 }, 45914 beforeParse: function (csv) { 45915 var parsedCSV = csvParser(csv); 45916 units = parsedCSV[1][0] + ',' + parsedCSV[2][0]; 45917 this.chart.title.update({ text: parsedCSV[0][0] }); 45918 this.chart.yAxis[0].update({ title: { text: units.split(',')[0] } }); 45919 this.chart.yAxis[1].update({ title: { text: units.split(',')[1] + ',' + units.split(',')[2] } }); 45920 this.chart.credits.update({ text: parsedCSV[3][0] + '<br>' + parsedCSV[4][0] }); 45921 this.chart.update( 45922 { 45923 accessibility: { 45924 description: parsedCSV[5][0], 45925 }, 45926 exporting: { 45927 menuItemDefinitions: 45928 { 45929 label: { 45930 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 45931 } 45932 }, 45933 buttons: { 45934 contextButton: { 45935 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 45936 } 45937 } 45938 } 45939 } 45940 ); 45941 return csv; 45942 } 45943 45944 }, 45945 colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown], 45946 xAxis: { 45947 type: 'category', 45948 startOnTick: true, 45949 endOnTick: false, 45950 tickInterval: 24, 45951 tickWidth: 1, 45952 labels: { 45953 formatter: function() { 45954 return this.value.substring(4); 45955 } 45956 } 45957 }, 45958 yAxis: [ 45959 { 45960 maxPadding: 0,
45961 alignTicks: false, 45962 tickInterval: 0.5, 45963 labels: { 45964 format: "{value:.3f}", 45965 style: { "color": Highcharts.eiaColors.blue } 45966 }, 45967 title: { 45968 style: { "color": Highcharts.eiaColors.blue } 45969 } 45970 }, 45971 { 45972 45973 gridLineColor: 'none', 45974 opposite: true, 45975 maxPadding: 0, 45976 alignTicks: false, 45977 tickInterval: 1.0, 45978 labels: { 45979 format: "${value:.2f}", 45980 style: { "color": Highcharts.eiaColors.brown } 45981 }, 45982 title: { 45983 style: { "color": Highcharts.eiaColors.brown } 45984 } 45985 } 45986 ], 45987 tooltip: { 45988 useHTML: true, 45989 shared: true, 45990 formatter: function () { 45991 var html = '<b>' + this.points[0].point.name + '</b><br/>'; 45992 this.points.filter(function (value) { 45993 html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25AC\u2009\u2009' + '</span><b>' + value.series.name + ':</b> '; 45994 if (value.series.name.charAt(0) === 'd') { // starts with d for 'dry production', the first series 45995 // extracts units from y[0] title 45996 html += Highcharts.numberFormat(value.y, 3) + ' ' + units.split(',')[0].substring(13) + '<br/>'; 45997 } else { 45998 // extracts units from y[0] title 45999 html += "$" + Highcharts.numberFormat(value.y, 2) + ' ' + (units.split(',')[1] + ',' + units.split(',')[2]).substring(16) + '<br/>'; 46000 } 46001 }); 46002 return html; 46003 } 46004 }, 46005 responsive: { 46006 rules: [{ 46007 condition: { 46008 maxWidth: 450 46009 }, 46010 chartOptions: { 46011 chart: { 46012 height: 500 46013 }, 46014 xAxis: { 46015 labels: { 46016 autoRotation: [-45], 46017 rotation: -45 46018 } 46019 }, 46020 yAxis: [ 46021 { 46022 title: { 46023 style: { 46024 'fontSize': '11px' 46025 }, 46026 align: 'middle', 46027 margin: 8 46028 } 46029 }, 46030 { 46031 title: { 46032 style: { 46033 'fontSize': '11px' 46034 }, 46035 align: 'middle', 46036 margin: 12, 46037 rotation: 270 46038 } 46039 } 46040 ] 46041 } 46042 }, 46043 { 46044 condition: { 46045 minWidth: 451 46046 }, 46047 46048 chartOptions: { 46049 chart: { 46050 height: '65%' 46051 } 46052 } 46053 }] 46054 } 46055 }); 46056 } 46057}; 46058 46059},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],246:[function(require,module,exports){ 46060const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 46061const csvParser = require('../../includes/csvParser'); 46062 46063module.exports = function (Highcharts, appPath) { 46064 const elementId = 'monthly-shale-production'; 46065 const monthNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; 46066 var units = ''; 46067 46068 if ($('#' + elementId).length > 0) { 46069 Highcharts.chart(elementId, { 46070 chart: { 46071 type: 'area', 46072 spacingBottom: 30, 46073 events: { 46074 load: creditsSizeAndPosition, 46075 redraw: creditsSizeAndPosition 46076 } 46077 }, 46078 credits: { 46079 enabled: true, 46080 href: null, 46081 style: { 46082 cursor: 'normal' 46083 } 46084 }, 46085 data: { 46086 csvURL: appPath + '/natural-gas/charts/' + elementId + '.csv', 46087 startRow: 5, 46088 firstRowAsNames: true, 46089 complete: function (options) { 46090 if (options.series.length > 0) { 46091 options.series[11].color = Highcharts.eiaColors.lightGrey; 46092 options.series[10].color = Highcharts.eiaColors.red; 46093 options.series[9].color = Highcharts.eiaColors.lightBrown; 46094 options.series[8].color = Highcharts.eiaColors.lightGreen; 46095 options.series[7].color = Highcharts.eiaColors.lightYellow; 46096 options.series[6].color = Highcharts.eiaColors.lightRed; 46097 options.series[5].color = Highcharts.eiaColors.brown; 46098 options.series[4].color = Highcharts.eiaColors.blue; 46099 options.series[3].color = Highcharts.eiaColors.darkBlue; 46100 options.series[2].color = Highcharts.eiaColors.orange; 46101 options.series[1].color = Highcharts.eiaColors.yellow;
46102 options.series[0].color = Highcharts.eiaColors.green; 46103 } 46104 }, 46105 beforeParse: function (csv) { 46106 var parsedCSV = csvParser(csv); 46107 this.chart.title.update({ text: parsedCSV[0][0] }); 46108 this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } }); 46109 units = parsedCSV[1][0]; 46110 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 46111 this.chart.update( 46112 { 46113 accessibility: { 46114 description: parsedCSV[4][0], 46115 }, 46116 exporting: { 46117 menuItemDefinitions: 46118 { 46119 label: { 46120 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 46121 } 46122 }, 46123 buttons: { 46124 contextButton: { 46125 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 46126 } 46127 } 46128 } 46129 } 46130 ); 46131 return csv; 46132 } 46133 }, 46134 xAxis: { 46135 type: 'datetime', 46136 labels: { 46137 enabled: true, 46138 useHTML: true, 46139 step: 2, 46140 formatter: function () { 46141 const date = new Date(this.value); 46142 return date.getUTCFullYear(); 46143 } 46144 }, 46145 // using simply startOnTick + min/maxPadding to get chart to start at 0 did not work, even in conjunction with tickInterval, 46146 // so I'm using tickPositioner to place the labels properly 46147 tickPositioner: function () { 46148 const dateMin = this.dataMin; 46149 const dateMax = this.dataMax; 46150 const positions = []; 46151 for (let position = dateMin; position <= dateMax; position += 1000 * 60 * 60 * 24 * 365 * 1.01) { // increment in 1 year periods 46152 // slightly >1 to get the intervals perfect (365.25 days in year on avg) 46153 positions.push(position); 46154 } 46155 return positions; 46156 }, 46157 // startOnTick: true, 46158 minPadding: 0, 46159 maxPadding: 0 46160 }, 46161 yAxis: { 46162 tickInterval: 5, 46163 maxPadding: 0, 46164 labels: { 46165 format: "{value}" 46166 } 46167 }, 46168 plotOptions: { 46169 area: { 46170 stacking: 'normal', 46171 } 46172 }, 46173 tooltip: { 46174 useHTML: true, 46175 shared: true, 46176 formatter: function () { 46177 const date = new Date(this.x); 46178 var html = '<b>' + monthNames[date.getUTCMonth()] + '-' + date.getUTCFullYear() + '</b><br/>'; 46179 this.points.filter(function (value) { 46180 html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25CF\u2009\u2009' + '</span><b>' + value.series.name + ':</b> ' + Highcharts.numberFormat(value.y, 2) + ' ' + units + '<br/>'; 46181 }); 46182 return html; 46183 } 46184 }, 46185 legend: { 46186 reversed: true 46187 }, 46188 responsive: { 46189 rules: [{ 46190 condition: { 46191 maxWidth: 450 46192 }, 46193 chartOptions: { 46194 chart: { 46195 height: 550 46196 }, 46197 yAxis: { 46198 tickInterval: 10 46199 } 46200 } 46201 },{ 46202 condition: { 46203 minWidth: 451 46204 }, 46205 chartOptions: { 46206 chart: { 46207 height: '65%' 46208 } 46209 } 46210 }] 46211 } 46212 }); 46213 } 46214}; 46215 46216},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],247:[function(require,module,exports){ 46217const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 46218const csvParser = require('../../includes/csvParser'); 46219 46220module.exports = function (Highcharts, appPath) { 46221 const elementId = 'nat-gas-consumption-by-sector'; 46222 var units = ''; 46223 46224 if ($('#' + elementId).length > 0) { 46225 Highcharts.chart(elementId, { 46226 chart: { 46227 type: 'pie', 46228 spacingBottom: 30, 46229 events: { 46230 load: creditsSizeAndPosition, 46231 redraw: creditsSizeAndPosition 46232 }, 46233 renderTo: { 46234 id: elementId 46235 } 46236 }, 46237 credits: { 46238 enabled: true, 46239 href: null, 46240 style: { 46241 cursor: 'normal' 46242 } 46243 }, 46244 title: { 46245 text: '', 46246 margin: 5 46247 }, 46248 data: { 46249 csvURL: appPath + '/natural-gas/charts/' + elementId + '.csv', 46250 startRow: 5, 46251 firstRowAsNames: false, 46252 beforeParse: function (csv) { 46253 var parsedCSV = csvParser(csv); 46254 this.chart.title.update({ text: parsedCSV[0][0] }); 46255 this.chart.subtitle.update({ text: '<span style="color:#888;font-weight:bold;font-size:12px;fill:#888;">' + parsedCSV[1][0] + '</span>' }); 46256 units = ' ' + parsedCSV[1][0].split(' ')[3] + ' ' + parsedCSV[1][0].split(' ')[4] + ' ' + parsedCSV[1][0].split(' ')[5]; 46257 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 46258 this.chart.update( 46259 { 46260 accessibility: { 46261 description: parsedCSV[4][0], 46262 }, 46263 exporting: { 46264 menuItemDefinitions: 46265 { 46266 label: { 46267 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 46268 } 46269 }, 46270 buttons: { 46271 contextButton: { 46272 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 46273 } 46274 } 46275 } 46276 } 46277 ); 46278 return csv; 46279 } 46280 }, 46281 colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.green, Highcharts.eiaColors.yellow, Highcharts.eiaColors.red], 46282 subtitle: { 46283 text: '', 46284 useHTML: true, 46285 }, 46286 plotOptions: { 46287 pie: { 46288 startAngle: 0, 46289 dataLabels: { 46290 enabled: true, 46291 format: "<strong>{point.name}</strong><br>{point.percentage:.0f}%", 46292 distance: 10, 46293 color: Highcharts.eiaColors.darkGrey, 46294 style: { 46295 "fontSize": "12px" 46296 } 46297 } 46298 } 46299 }, 46300 tooltip: { 46301 useHTML: true, 46302 formatter: function () { 46303 return "<span><b>" + this.key + "</b><br/>" + Highcharts.numberFormat(this.percentage, 0) + "%</span><br/>" + Highcharts.numberFormat(this.y, 2) + units; 46304 } 46305 }, 46306 responsive: { 46307 rules: [{ 46308 condition: { 46309 maxWidth: 450 46310 }, 46311 46312 chartOptions: { 46313 chart: { 46314 height: 410 46315 }, 46316 plotOptions: { 46317 pie: { 46318 size: '90%', 46319 dataLabels: { 46320 enabled: false 46321 }, 46322 showInLegend: true 46323 } 46324 }, 46325 legend: { 46326 enabled: true 46327 } 46328 } 46329 }, 46330 { 46331 condition: { 46332 minWidth: 451 46333 }, 46334 46335 chartOptions: { 46336 chart: { 46337 height: '65%' 46338 }, 46339 plotOptions: { 46340 pie: { 46341 size: '75%', 46342 dataLabels: { 46343 enabled: true 46344 }, 46345 showInLegend: false 46346 } 46347 }, 46348 legend: { 46349 enabled: false 46350 } 46351 } 46352 }] 46353 } 46354 }); 46355 } 46356}; 46357 46358},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],248:[function(require,module,exports){ 46359const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 46360const csvParser = require('../../includes/csvParser'); 46361 46362module.exports = function (Highcharts, appPath) { 46363 const elementId = 'natgas-imports-exports-netimports'; 46364 var units = ''; 46365 46366 if ($('#' + elementId).length > 0) { 46367 Highcharts.chart(elementId, { 46368 chart: { 46369 type: 'line', 46370 spacingBottom: 30, 46371 events: { 46372 load: creditsSizeAndPosition, 46373 redraw: creditsSizeAndPosition 46374 } 46375 }, 46376 credits: { 46377 enabled: true, 46378 href: null, 46379 style: { 46380 cursor: 'normal' 46381 } 46382 }, 46383 data: { 46384 csvURL: appPath + '/natural-gas/charts/' + elementId + '.csv', 46385 startRow: 5, 46386 firstRowAsNames: true, 46387 beforeParse: function (csv) { 46388 var parsedCSV = csvParser(csv); 46389 this.chart.title.update({ text: parsedCSV[0][0] }); 46390 units = parsedCSV[1][0]; 46391 this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } }); 46392 this.chart.credits.update({ text: parsedCSV[2][0] + '<br/>' + parsedCSV[3][0] }); 46393 this.chart.update( 46394 { 46395 accessibility: { 46396 description: parsedCSV[4][0], 46397 }, 46398 exporting: { 46399 menuItemDefinitions: 46400 { 46401 label: { 46402 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 46403 } 46404 }, 46405 buttons: { 46406 contextButton: { 46407 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 46408 } 46409 } 46410 } 46411 } 46412 ); 46413 return csv; 46414 } 46415 }, 46416 xAxis: { 46417 labels: { 46418 format: "{value}", 46419 }, 46420 tickInterval: 5, 46421 startOnTick: true, 46422 minPadding: 0, 46423 maxPadding: 0 46424 }, 46425 yAxis: { 46426 tickInterval: .5, 46427 labels: { 46428 format: "{value:.1f}" 46429 }, 46430 maxPadding: 0, 46431 minPadding: 0 46432 }, 46433 tooltip: { 46434 useHTML: true, 46435 shared: true, 46436 formatter: function () { 46437 var html = '<b>' + this.x + '</b><br/>'; 46438 this.points.filter(function (value) { 46439 html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25AC\u2009\u2009' + '</span><b>' + value.series.name + ':</b> ' + Highcharts.numberFormat(value.y, 2) + ' ' + units + '<br/>'; 46440 }); 46441 return html; 46442 } 46443 }, 46444 responsive: { 46445 rules: [{ 46446 condition: { 46447 maxWidth: 450 46448 }, 46449 chartOptions: { 46450 chart: { 46451 height: 400 46452 } 46453 } 46454 }, 46455 { 46456 condition: { 46457 minWidth: 451 46458 }, 46459 46460 chartOptions: { 46461 chart: { 46462 height: '65%' 46463 } 46464 } 46465 }] 46466 } 46467 }); 46468 } 46469}; 46470 46471},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],249:[function(require,module,exports){ 46472const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 46473const csvParser = require('../../includes/csvParser'); 46474 46475 46476module.exports = function (Highcharts, map, appPath) { 46477 46478 const elementId = 'natgas-proved-reserves-by-statearea'; 46479 let note =''; 46480 46481 let mapData = Highcharts.geojson(map, 'map'); 46482 46483 // Our own options definition as two different series, will populate the data in the complete callback 46484 var seriesOptions = [ 46485 { 46486 id: "rank1", 46487 type: "map", 46488 allAreas: false, 46489 keys: ["postal-code"], 46490 joinBy: ['hc-a2', 'code'], 46491 data: [], 46492 mapData: mapData, 46493 borderWidth: 0.5, 46494 borderColor: '#ffffff', 46495 states: { 46496 hover: { 46497 brightness: 0, 46498 borderWidth: 1, 46499 borderColor: Highcharts.eiaColors.yellow 46500 } 46501 }, 46502 dataLabels: { 46503 enabled: true, 46504 useHTML: true, 46505 allowOverlap : true, 46506 formatter: function () { 46507 var labelData; 46508 if (this.point.properties) { 46509 var regionLabel = this.point.properties['hc-a2'], 46510 value = ''; 46511 46512 if(this.point.properties['hc-a2'] === 'GOA') { 46513 regionLabel = 'Gulf of America<br/>Federal Offshore'; 46514 46515 } else if(this.point.properties['hc-a2'] === 'PAC') { 46516 regionLabel = 'Pacific<br/>Federal<br/>Offshore'; 46517 } 46518 46519 if (this.point.value === 0.01) { 46520 regionLabel += '*' 46521 } 46522 else if(this.point.value !== 0) { 46523 value = Highcharts.numberFormat(this.point.value); 46524 } 46525 46526 labelData = '<span>' + regionLabel + '</span><br/><span>' + value + '</span>' 46527 } 46528 return labelData; 46529 }, 46530 style: { 46531 fontSize: '9px' 46532 } 46533 } 46534 }, 46535 { 46536 mapData: Highcharts.geojson(map, 'mapline'), 46537 type: 'mapline', 46538 lineWidth: 1, 46539 color: 'silver', 46540 nullColor: 'silver', 46541 showInLegend: false, 46542 enableMouseTracking: false, 46543 states : { 46544 inactive : { 46545 enabled : false 46546 } 46547 } 46548 } 46549 ]; 46550 46551 if ($('#' + elementId).length > 0) { 46552 Highcharts.mapChart(elementId, { 46553 chart: { 46554 map: map, 46555 spacingBottom: 25, 46556 events: { 46557 load: creditsSizeAndPosition, 46558 redraw: creditsSizeAndPosition 46559 } 46560 }, 46561 mapView : { 46562 insetOptions : { 46563 borderWidth : 1, 46564
46564 borderColor : 'silver' 46565 } 46566 }, 46567 credits: { 46568 enabled: false, 46569 href: null, 46570 style: { 46571 cursor: 'normal' 46572 } 46573 }, 46574 caption: { 46575 verticalAlign: 'bottom', 46576 useHTML: true, 46577 margin: 0, 46578 style: { 46579 color: '#888', 46580 fontSize: '11px' 46581 }, 46582 x: 32, 46583 y: 33 46584 }, 46585 tooltip: { 46586 enabled: true, 46587 useHTML: true, 46588 formatter: function () { 46589 var tipTool; 46590 if (this.point.value === 0.01) { 46591 tipTool = '<b>' + this.key + '</b><br/><span>' + note + '</span>'; 46592 } 46593 else if (this.point.value === 0) { 46594 tipTool = '<b>' + this.key + '</b><br/><span></span>'; 46595 } 46596 else { 46597 tipTool = '<b>' + this.key + '</b><br/><span>' + Highcharts.numberFormat(this.point.value) + '</span>' 46598 } 46599 46600 return tipTool 46601 } 46602 }, 46603 data: { 46604 csvURL: appPath + '/natural-gas/charts/' + elementId + '.csv', 46605 startRow: 10, 46606 complete: function (options) { 46607 var point; 46608 var i; 46609 var datum; 46610 46611 for (i = 0; i < options.series[0].data.length; i++) { 46612 datum = options.series[0].data[i]; 46613 46614 point = { 46615 code: datum.name, 46616 value: datum.value 46617 }; 46618 46619 if(datum.name == 'WV'){ 46620 point.dataLabels = { 46621 y : 5, 46622 x : -5 46623 }; 46624 } 46625 else if(datum.name = 'MS') { 46626 point.dataLabels = { 46627 y : -3 46628 }; 46629 } 46630 46631 seriesOptions[0].data.push(point); 46632 46633 } 46634 46635 // replace series options parsed by Highcharts with our own options definition 46636 options.series = seriesOptions; 46637 46638 }, 46639 beforeParse: function (csv) { 46640 46641 var parsedCSV = csvParser(csv); 46642 this.chart.title.update({ text: parsedCSV[0][0] }); 46643 note = parsedCSV[2][0]; 46644 this.chart.subtitle.update({ text: '<span style="color:#888;font-weight:bold;font-size:12px;fill:#888;">' + parsedCSV[1][0] + '</span><br/>' }); 46645 this.chart.caption.update({ text: parsedCSV[2][0] + '<br/>' + parsedCSV[3][0] }); 46646 46647 this.chart.update( 46648 { 46649 accessibility: { 46650 description: parsedCSV[4][0] 46651 }, 46652 exporting: { 46653 allowHTML: true, 46654 menuItemDefinitions: 46655 { 46656 label: { 46657 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 46658 } 46659 }, 46660 buttons: { 46661 contextButton: { 46662 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 46663 } 46664 } 46665 } 46666 } 46667 ); 46668 return csv; 46669 } 46670 }, 46671 colorAxis: { 46672 dataClasses: [{ 46673 color: Highcharts.eiaColors.extraLightGrey, 46674 to: 0 46675 }, { 46676 color: Highcharts.eiaColors.extraLightBlue, 46677 from: 0.01, 46678 to: 1000 46679 }, { 46680 color: Highcharts.eiaColors.lightBlue, 46681 from: 1000.01, 46682 to: 5000 46683 }, { 46684 color: Highcharts.eiaColors.blue, 46685 from: 5000.01, 46686 to: 20000 46687 }, { 46688 color: Highcharts.eiaColors.darkBlue, 46689 from: 20000.01 46690 }] 46691 }, 46692 legend: { 46693 align: 'center', 46694 backgroundColor: 'white', 46695 borderColor: 'white', 46696 layout: 'horizontal', 46697 symbolPadding: 10, 46698 symbolRadius: 0, 46699 valueDecimals: 0, 46700 labelFormatter: function () { 46701 46702 if (this.from === undefined) { 46703 return this.to; 46704 } 46705 46706 else if (this.to === undefined) { 46707 46708 if (this.chart.colorAxis[0].dataMax !== undefined) { 46709 return '> ' + this.from.toFixed(0) + ' to ' + this.chart.colorAxis[0].dataMax; 46710 } 46711 46712 return '> ' + this.from.toFixed(0); 46713 } 46714 else { 46715 return '> ' + this.from.toFixed(0) + ' to ' + this.to; 46716 } 46717 } 46718 }, 46719 responsive: { 46720 rules: [{ 46721 condition: { 46722 maxWidth: 321 46723 }, 46724 46725 chartOptions: { 46726 chart: { 46727 height: 330 46728 }, 46729 title: { 46730 margin: 15 46731 } 46732 } 46733 }, 46734 { 46735 condition: { 46736 minWidth: 322, 46737 maxWidth: 400 46738 }, 46739 46740 chartOptions: { 46741 chart: { 46742 height: 350 46743 }, 46744 title: { 46745 margin: 15 46746 } 46747 } 46748 }, 46749 { 46750 condition: { 46751 minWidth: 401, 46752 maxWidth: 450 46753 }, 46754 46755 chartOptions: { 46756 chart: { 46757 height: 400 46758 }, 46759 title: { 46760 margin: 15 46761 } 46762 } 46763 }, 46764 { 46765 condition: { 46766 minWidth: 451 46767 }, 46768 46769 chartOptions: { 46770 chart: { 46771 height: '65%' 46772 }, 46773 title: { 46774 margin: 15 46775 } 46776 } 46777 }] 46778 } 46779 }); 46780 } 46781}; 46782 46783},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],250:[function(require,module,exports){ 46784const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 46785const csvParser = require('../../includes/csvParser'); 46786 46787module.exports = function (Highcharts, appPath) { 46788 const elementId = 'ng-consumption-dryprod-netimports'; 46789 var units = ''; 46790 46791 if ($('#' + elementId).length > 0) { 46792 Highcharts.chart(elementId, { 46793 chart: { 46794 type: 'line', 46795 spacingBottom: 25, 46796 events: { 46797 load: creditsSizeAndPosition, 46798 redraw: creditsSizeAndPosition 46799 } 46800 }, 46801 credits: { 46802 enabled: true, 46803 href: null, 46804 style: { 46805 cursor: 'normal' 46806 } 46807 }, 46808 data: { 46809 csvURL: appPath + '/natural-gas/charts/' + elementId + '.csv', 46810 startRow: 5, 46811 firstRowAsNames: true, 46812 beforeParse: function (csv) { 46813 var parsedCSV = csvParser(csv); 46814 this.chart.title.update({ text: parsedCSV[0][0] }); 46815 units = parsedCSV[1][0]; 46816 this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } }); 46817 this.chart.credits.update({ text: parsedCSV[2][0] + '<br/>' + parsedCSV[3][0] }); 46818 this.chart.update( 46819 { 46820 accessibility: { 46821 description: parsedCSV[4][0], 46822 }, 46823 exporting: { 46824 menuItemDefinitions: 46825 { 46826 label: { 46827 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 46828 } 46829 }, 46830 buttons: { 46831 contextButton: { 46832 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 46833 } 46834 } 46835 } 46836 } 46837 ); 46838 return csv; 46839 } 46840 }, 46841 xAxis: { 46842 labels: { 46843 format: "{value}", 46844 }, 46845 tickInterval: 5, 46846 startOnTick: true, 46847 minPadding: 0, 46848 maxPadding: 0 46849 }, 46850 yAxis: { 46851 tickInterval: 5, 46852 labels: { 46853 format: "{value}" 46854 }, 46855 plotLines: [{ 46856 color: Highcharts.eiaColors.darkGrey, 46857 width: 1, 46858 value: 0, 46859 zIndex: 3 46860 }], 46861 startOnTick: false, 46862 endOnTick: false 46863 }, 46864 tooltip: { 46865 useHTML: true, 46866 shared: true, 46867 formatter: function () { 46868 var html = '<b>' + this.x + '</b><br/>'; 46869 this.points.filter(function (value) { 46870 html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25AC\u2009\u2009' + '</span><b>' + value.series.name + ':</b> ' + Highcharts.numberFormat(value.y, 2) + ' ' + units + '<br/>'; 46871 }); 46872 return html; 46873 } 46874 }, 46875 responsive: { 46876 rules: [{ 46877 condition: { 46878 maxWidth: 450 46879 }, 46880 chartOptions: { 46881 chart: { 46882 height: 400 46883 } 46884 } 46885 }, 46886 { 46887 condition: { 46888 minWidth: 451 46889 }, 46890 46891 chartOptions: { 46892 chart: { 46893 height: '65%' 46894 } 46895 } 46896 }] 46897 } 46898 }); 46899 } 46900}; 46901 46902},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],251:[function(require,module,exports){ 46903const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 46904const csvParser = require('../../includes/csvParser'); 46905 46906 46907 46908module.exports = function (Highcharts, map, appPath) { 46909 const elementId = 'top-nat-gas-producing-states'; 46910 let note = ''; 46911 46912 46913 let mapData = Highcharts.geojson(map, 'map'); 46914 46915 // Our own options definition as two different series, will populate the data in the complete callback 46916 var seriesOptions = [ 46917 { 46918 id: "rank1", 46919 mapData : mapData, 46920 type: "map", 46921 allAreas: false, 46922 keys: ["postal-code"], 46923 joinBy: ['hc-a2', 'code'], 46924 data: [], 46925 borderWidth: 0.5, 46926 borderColor: '#ffffff', 46927 states: { 46928 hover: { 46929 brightness: 0, 46930 borderWidth: 1, 46931 borderColor: Highcharts.eiaColors.blue 46932 } 46933 }, 46934 dataLabels: { 46935 enabled: true,
46936 useHTML: false, 46937 formatter: function () { 46938 var labelData; 46939 if (this.point.properties) { 46940 var regionLabel = this.point.properties['hc-a2']; 46941 46942 if (this.point.properties['hc-a2'] === 'GOA') { 46943 regionLabel = 'Gulf of America<br/>Federal Offshore'; 46944 46945 } else if (this.point.properties['hc-a2'] === 'PAC') { 46946 regionLabel = 'Pacific<br/>Federal<br/>Offshore'; 46947 } 46948 46949 labelData = '<span>' + regionLabel + '</span>' 46950 } 46951 return labelData; 46952 }, 46953 style: { 46954 fontSize: '10px' 46955 } 46956 } 46957 }, 46958 { 46959 type: 'mapline', 46960 mapData: Highcharts.geojson(map, 'mapline'), 46961 colorAxis : false, 46962 lineWidth : 1, 46963 color: 'silver', 46964 nullColor : 'silver', 46965 showInLegend: false, 46966 enableMouseTracking: false, 46967 states : { 46968 inactive : { 46969 enabled : false 46970 } 46971 } 46972 } 46973 ]; 46974 46975 if ($('#' + elementId).length > 0) { 46976 let options = { 46977 chart: { 46978 map: map, 46979 spacingBottom: 25, 46980 events: { 46981 load: creditsSizeAndPosition, 46982 redraw: creditsSizeAndPosition 46983 } 46984 }, 46985 mapView : { 46986 insetOptions : { 46987 borderWidth : 1, 46988 borderColor : 'silver' 46989 } 46990 }, 46991 credits: { 46992 enabled: false, 46993 href: null, 46994 style: { 46995 cursor: 'normal' 46996 } 46997 }, 46998 caption: { 46999 verticalAlign: 'bottom', 47000 useHTML: true, 47001 margin: 0, 47002 style: { 47003 color: '#888', 47004 fontSize: '11px' 47005 }, 47006 x: 32, 47007 y: 33 47008 }, 47009 tooltip: { 47010 enabled: true, 47011 useHTML: true, 47012 formatter: function () { 47013 var tipTool; 47014 if (this.point.value === 0) { 47015 tipTool = '<b>' + this.key + '</b><br/><span></span>'; 47016 } 47017 else { 47018 tipTool = '<b>' + this.key + '</b><br/><span>' + Highcharts.numberFormat(this.point.value) + '</span>' 47019 } 47020 47021 return tipTool 47022 } 47023 }, 47024 data: { 47025 csvURL: appPath + '/natural-gas/charts/' + elementId + '.csv', 47026 startRow: 5, 47027 firstRowAsNames: false, 47028 complete: function (options) { 47029 var point; 47030 var i; 47031 47032 for (i = 0; i < options.series[0].data.length; i++) { 47033 point = options.series[0].data[i]; 47034 47035 seriesOptions[0].data.push({ 47036 code: point.name, 47037 value: point.value 47038 }); 47039 47040 } 47041 47042 // replace series options parsed by Highcharts with our own options definition 47043 options.series = seriesOptions; 47044 47045 }, 47046 beforeParse: function (csv) { 47047 47048 var parsedCSV = csvParser(csv); 47049 this.chart.title.update({ text: parsedCSV[0][0] }); 47050 note = parsedCSV[2][0]; 47051 this.chart.subtitle.update({ text: '<span style="color:#888;font-weight:bold;font-size:12px;fill:#888;">' + parsedCSV[1][0] + '</span><br/>' }); 47052 this.chart.caption.update({ text: parsedCSV[2][0] + '<br/>' + parsedCSV[3][0] }); 47053 47054 this.chart.update( 47055 { 47056 accessibility: { 47057 description: parsedCSV[4][0] 47058 }, 47059 exporting: { 47060 allowHTML: true, 47061 menuItemDefinitions: 47062 { 47063 label: { 47064 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 47065 } 47066 }, 47067 buttons: { 47068 contextButton: { 47069 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 47070 } 47071 } 47072 } 47073 } 47074 ); 47075 return csv; 47076 } 47077 }, 47078 colorAxis: [{ 47079 dataClasses: [{ 47080 color: Highcharts.eiaColors.extraLightGrey, 47081 to: 0 47082 }, { 47083 color: '#e6f5fb', 47084 from: 0.0001, 47085 to: 100 47086 }, { 47087 color: '#bfe5f5', 47088 from: 100.01, 47089 to: 1000 47090 }, { 47091 color: '#73c5e9', 47092 from: 1000.01, 47093 to: 2000 47094 }, { 47095 color: '#0096d7', 47096 from: 2000.01, 47097 to: 3000 47098 }, { 47099 color: '#006997', 47100 from: 3000.01, 47101 to: 5000 47102 }, { 47103 color: '#00354b', 47104 from: 5000.01, 47105 to: 10000 47106 }] 47107 }], 47108 legend: { 47109 align: 'center', 47110 backgroundColor: 'white', 47111 borderColor: 'white', 47112 layout: 'horizontal', 47113 itemDistance: 20, 47114 symbolPadding: 4, 47115 symbolRadius: 0, 47116 valueDecimals: 0, 47117 labelFormatter: function () { 47118 47119 if (this.from === undefined) { 47120 return '= ' + this.to; 47121 } 47122 /*else if (this.to === 100) { 47123 return '< ' + this.to; 47124 } 47125 else if (this.to === undefined) { 47126 return '> ' + this.from.toFixed(0); 47127 }*/ 47128 else { 47129 return this.from.toFixed(0) + ' - ' + this.to; 47130 } 47131 } 47132 }, 47133 responsive: { 47134 rules: [{ 47135 condition: { 47136 maxWidth: 321 47137 }, 47138 47139 chartOptions: { 47140 chart: { 47141 height: 330 47142 }, 47143 title: { 47144 margin: 5 47145 }, 47146 plotOptions: { 47147 map: { 47148 dataLabels: { 47149 style: { 47150 fontSize: '7px', 47151 lineHeight: 7 47152 } 47153 } 47154 } 47155 } 47156 } 47157 }, 47158 { 47159 condition: { 47160 minWidth: 322, 47161 maxWidth: 400 47162 }, 47163 47164 chartOptions: { 47165 chart: { 47166 height: 350 47167 }, 47168 title: { 47169 margin: 5 47170 }, 47171 plotOptions: { 47172 map: { 47173 dataLabels: { 47174 style: { 47175 fontSize: '8px', 47176 lineHeight: 8 47177 } 47178 } 47179 } 47180 } 47181 } 47182 }, 47183 { 47184 condition: { 47185 minWidth: 401, 47186 maxWidth: 450 47187 }, 47188 47189 chartOptions: { 47190 chart: { 47191 height: 380 47192 }, 47193 title: { 47194 margin: 5 47195 }, 47196 plotOptions: { 47197 map: { 47198 dataLabels: { 47199 style: { 47200 fontSize: '8px', 47201 lineHeight: 8 47202 } 47203 } 47204 } 47205 } 47206 } 47207 }, 47208 { 47209 condition: { 47210 minWidth: 451 47211 }, 47212 47213 chartOptions: { 47214 chart: { 47215 height: '65%' 47216 }, 47217 title: { 47218 margin: 15 47219 }, 47220 plotOptions: { 47221 map: { 47222 dataLabels: { 47223 style: { 47224 fontSize: '9px', 47225 lineHeight: 9 47226 } 47227 } 47228 } 47229 } 47230 } 47231 }] 47232 } 47233 }; 47234 Highcharts.mapChart(elementId, options); 47235 } 47236}; 47237 47238},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],252:[function(require,module,exports){ 47239const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 47240const csvParser = require('../../includes/csvParser'); 47241 47242module.exports = function (Highcharts, appPath) { 47243 const elementId = 'total-natgas-proved-reserves'; 47244 var units = ''; 47245 47246 if ($('#' + elementId).length > 0) { 47247 Highcharts.chart(elementId, { 47248 chart: { 47249 type: 'line', 47250 spacingBottom: 30, 47251 events: { 47252 load: creditsSizeAndPosition, 47253 redraw: creditsSizeAndPosition 47254 } 47255 }, 47256 credits: { 47257 enabled: true, 47258 href: null, 47259 style: { 47260 cursor: 'normal' 47261 } 47262 }, 47263 data: { 47264 csvURL: appPath + '/natural-gas/charts/' + elementId + '.csv', 47265 startRow: 5, 47266 firstRowAsNames: true, 47267 beforeParse: function (csv) { 47268 var parsedCSV = csvParser(csv); 47269 this.chart.title.update({ text: parsedCSV[0][0] }); 47270 units = parsedCSV[1][0] + ' ' + parsedCSV[1][1] 47271 this.chart.yAxis[0].update({title:{ text: parsedCSV[1][0] }}); 47272 //this.chart.yAxis[0].update({ title: { text: '' } }); 47273 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 47274 this.chart.update( 47275 { 47276 accessibility: { 47277 description: parsedCSV[4][0], 47278 }, 47279 exporting: { 47280 menuItemDefinitions: 47281 { 47282 label: { 47283 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 47284 } 47285 }, 47286 buttons: { 47287 contextButton: { 47288 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 47289 } 47290 } 47291 } 47292 } 47293 ); 47294 return csv; 47295 }, 47296 }, 47297 colors: [Highcharts.eiaColors.brown, Highcharts.eiaColors.green, Highcharts.eiaColors.blue, Highcharts.eiaColors.red], 47298 xAxis: { 47299 labels: { 47300 format: "{value}", 47301 }, 47302 type: 'dateTime', 47303 tickInterval: 5, 47304 startOnTick: true, 47305 minPadding: 0, 47306 maxPadding: 0 47307 }, 47308 yAxis: { 47309 tickInterval: 50, 47310 labels: { 47311 format: "{value}" 47312 } 47313 }, 47314 tooltip: { 47315 useHTML: true, 47316 shared: true, 47317 formatter: function () { 47318 var html = '<b>' + this.x + '</b><br/>'; 47319 this.points.filter(function (value) { 47320 html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25AC\u2009\u2009' + '</span><b>' + value.series.name + ':</b> ' + Highcharts.numberFormat(value.y, 2) + ' ' + units + '<br/>'; 47321 }); 47322 return html; 47323 } 47324 }, 47325 responsive: { 47326 rules: [{ 47327 condition: { 47328 maxWidth: 450 47329 }, 47330 chartOptions: { 47331 chart: { 47332 height: 450 47333 } 47334 } 47335 }, 47336 { 47337 condition: { 47338 minWidth: 451 47339 }, 47340 47341 chartOptions: { 47342 chart: { 47343 height: '65%' 47344 } 47345 } 47346 }] 47347 } 47348 }); 47349 } 47350}; 47351 47352},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],253:[function(require,module,exports){ 47353const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 47354const csvParser = require('../../includes/csvParser'); 47355 47356module.exports = function (Highcharts, appPath) { 47357 const elementId = 'available-generating-capacity-annual-basis'; 47358 var firstSeries = []; 47359 var secondSeries = []; 47360
47361 (function (Highcharts) { 47362 Highcharts.seriesTypes.pie.prototype.setTitle = function (titleOption) { 47363 var chart = this.chart, 47364 center = this.center || (this.yAxis && this.yAxis.center), 47365 labelBox, 47366 box, 47367 format; 47368 47369 if (center && titleOption) { 47370 box = { 47371 x: chart.plotLeft + center[0] - 0.5 * center[2], 47372 y: chart.plotTop + center[1] - 0.5 * center[2], 47373 width: center[2], 47374 height: center[2] 47375 }; 47376 47377 format = titleOption.text || titleOption.format; 47378 format = Highcharts.format(format, this); 47379 47380 if (this.title) { 47381 this.title.attr({ 47382 text: format 47383 }); 47384 47385 } else { 47386 this.title = this.chart.renderer.label(format) 47387 .css(titleOption.style) 47388 .add() 47389 } 47390 labelBox = this.title.getBBox(); 47391 titleOption.width = labelBox.width; 47392 titleOption.height = labelBox.height; 47393 this.title.align(titleOption, null, box); 47394 } 47395 }; 47396 47397 Highcharts.wrap(Highcharts.seriesTypes.pie.prototype, 'render', function (proceed) { 47398 proceed.call(this); 47399 this.setTitle(this.options.title); 47400 }); 47401 47402 }(Highcharts)); 47403 47404 if ($('#' + elementId).length > 0) { 47405 47406 var chart = Highcharts.chart(elementId, { 47407 chart: { 47408 spacingBottom: 25, 47409 events: { 47410 load: creditsSizeAndPosition, 47411 redraw: creditsSizeAndPosition 47412 } 47413 }, 47414 credits: { 47415 enabled: true, 47416 href: null, 47417 style: { 47418 cursor: 'normal' 47419 } 47420 }, 47421 title: { 47422 text: '' 47423 }, 47424 data: { 47425 csvURL: appPath + '/nuclear/charts/' + elementId + '.csv', 47426 startRow: 7, 47427 firstRowAsNames: false, 47428 complete: function (options) { 47429 options.series[0].data = firstSeries; 47430 var newSeries = JSON.stringify(options.series[0]); 47431 newSeries = JSON.parse(newSeries); 47432 newSeries.data = secondSeries; 47433 options.series.push(newSeries); 47434 }, 47435 beforeParse: function (csv) { 47436 var parsedCSV = csvParser(csv); 47437 this.chart.title.update({ text: parsedCSV[0][0] }); 47438 this.chart.credits.update({ text: parsedCSV[1][0] + '<br>' + parsedCSV[2][0] }); 47439 47440 this.chart.series[0].update( 47441 { 47442 name: '<b>' + parsedCSV[4][0] + '</b><br/>' + parsedCSV[5][0] 47443 } 47444 ); 47445 47446 this.chart.series[1].update( 47447 { 47448 name: '<b>' + parsedCSV[14][0] + '</b><br/>' + parsedCSV[15][0] 47449 } 47450 ); 47451 47452 var i = 0; 47453 for (i = 7; i < parsedCSV.length - 1; i++) { 47454 if (parsedCSV[i][0] === '') { 47455 break; 47456 } 47457 firstSeries.push([parsedCSV[i][0], parseFloat(parsedCSV[i][1])]); 47458 } 47459 for (i = 17; i < parsedCSV.length - 1; i++) { 47460 if (parsedCSV[i][0] === '') { 47461 break; 47462 } 47463 secondSeries.push([parsedCSV[i][0], parseFloat(parsedCSV[i][1])]); 47464 } 47465 47466 this.chart.update( 47467 { 47468 accessibility: { 47469 description: parsedCSV[3][0], 47470 }, 47471 exporting: { 47472 menuItemDefinitions: 47473 { 47474 label: { 47475 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 47476 } 47477 }, 47478 buttons: { 47479 contextButton: { 47480 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 47481 } 47482 } 47483 } 47484 } 47485 ); 47486 return csv; 47487 } 47488 }, 47489 colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.green, Highcharts.eiaColors.red, Highcharts.eiaColors.yellow], 47490 subtitle: { 47491 text: '', 47492 useHTML: true, 47493 }, 47494 series: [ 47495 { 47496 data: [], 47497 type: 'pie', 47498 name: '', 47499 id: 'pie1', 47500 size: '40%', 47501 center: ['25%', '50%'], 47502 startAngle: 15, 47503 title: { 47504 align: 'left', 47505 format: '<b>{name}</b>',
47506 verticalAlign: 'top', 47507 x:0, 47508 y: -60, 47509 style: { 47510 color: Highcharts.eiaColors.darkGrey 47511 } 47512 } 47513 }, 47514 { 47515 data: [], 47516 type: 'pie', 47517 name: '', 47518 id: 'pie2', 47519 size: '40%', 47520 center: ['77%', '50%'], 47521 title: { 47522 align: 'right', 47523 format: '<b>{name}</b>', 47524 verticalAlign: 'top', 47525 x:0, 47526 y: -60, 47527 style: { 47528 color: Highcharts.eiaColors.darkGrey 47529 } 47530 } 47531 } 47532 ], 47533 plotOptions: { 47534 pie: { 47535 dataLabels: { 47536 enabled: true, 47537 format: "<strong>{point.name}</strong><br> {point.percentage:.0f}%", 47538 distance: 10, 47539 color: Highcharts.eiaColors.darkGrey, 47540 style: { 47541 "fontSize": "12px" 47542 } 47543 }, 47544 point: { 47545 events: { 47546 legendItemClick: function () { 47547 for (var i = 0; i < chart.series.length; i++) { 47548 if (chart.series[i].points[this.index].visible == true) { 47549 chart.series[i].points[this.index].setVisible(false, false); 47550 } else { 47551 chart.series[i].points[this.index].setVisible(true, false); 47552 } 47553 } 47554 chart.redraw(); 47555 return false; //needed to stop the normal click from interferring 47556 } 47557 } 47558 } 47559 } 47560 }, 47561 tooltip: { 47562 useHTML: true, 47563 formatter: function () { 47564 return "<span><b>" + this.key + "</b><br/>" + Math.round(this.percentage) + " %</span>"; 47565 } 47566 }, 47567 responsive: { 47568 rules: [ 47569 { 47570 condition: { 47571 maxWidth: 450 47572 }, 47573 chartOptions: { 47574 chart:{ 47575 height:600, 47576 }, 47577 series:[ 47578 { 47579 dataLabels:{ 47580 enabled:false 47581 }, 47582 showInLegend:true, 47583 title: { 47584 style: { 47585 "fontSize": "12px", 47586 wordwrap: 'break-word', 47587 width: "200px" 47588 }, 47589 y: -37, 47590 x: -46 47591 }, 47592 center: ['50%', '18%'] 47593 }, 47594 { 47595 dataLabels:{ 47596 enabled:false 47597 }, 47598 title: { 47599 style: { 47600 "fontSize": "12px", 47601 wordwrap: 'break-word', 47602 width: "200px" 47603 }, 47604 y: -37, 47605 x: 20 47606 }, 47607 center: ['50%', '83%'] 47608 } 47609 ] 47610 } 47611 }, 47612 { 47613 condition: { 47614 minWidth: 451, 47615 maxWidth: 667 47616 }, 47617 chartOptions: { 47618 chart:{ 47619 height: 375 47620 }, 47621 title:{ 47622 margin: 0, 47623 spacingBottom: 0 47624 }, 47625 series:[ 47626 { 47627 dataLabels:{ 47628 enabled:true, 47629 distance: 20 47630 }, 47631 showInLegend: false, 47632 title: { 47633 style: { 47634 "fontSize": "12px", 47635 }, 47636 x: -20, 47637 y: -70 47638 }, 47639 center: ['21%', '60%'], 47640 size: '50%' 47641 }, 47642 { 47643 dataLabels:{ 47644 enabled:true 47645 }, 47646 title: { 47647 style: { 47648 "fontSize": "12px", 47649 }, 47650 x: 20, 47651 y: -70 47652 }, 47653 center: ['76%', '60%'], 47654 size: '50%' 47655 } 47656 ] 47657 } 47658 }, 47659 { 47660 condition: { 47661 minWidth: 668 47662 }, 47663 chartOptions: { 47664 chart:{ 47665 height:'55%', 47666 }, 47667 series:[ 47668 { 47669 dataLabels:{ 47670 enabled:true, 47671 distance: 20 47672 }, 47673 showInLegend: false, 47674 title: { 47675 style: { 47676 "fontSize": "12px", 47677 }, 47678 x: -20, 47679 y: -70 47680 }, 47681 center: ['22%', '50%'], 47682 size: '65%' 47683 }, 47684 { 47685 dataLabels:{ 47686 enabled:true 47687 }, 47688 title: { 47689 style: { 47690 "fontSize": "12px", 47691 }, 47692 x: -20, 47693 y: -70 47694 }, 47695 center: ['76%', '50%'], 47696 size: '65%' 47697 } 47698 ] 47699 } 47700 } 47701 ] 47702 } 47703 }); 47704 } 47705}; 47706 47707},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],254:[function(require,module,exports){ 47708const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 47709const csvParser = require('../../includes/csvParser'); 47710 47711module.exports = function (Highcharts, appPath) { 47712 const elementId = 'generation-capacity-generation'; 47713 47714 if ($('#' + elementId).length > 0) { 47715 Highcharts.chart(elementId, { 47716 chart: { 47717 type: 'line', 47718 spacingBottom: 25, 47719 events: { 47720 load: creditsSizeAndPosition, 47721 redraw: creditsSizeAndPosition 47722 } 47723 }, 47724 credits: { 47725 enabled: true, 47726 href: null, 47727 style: { 47728 cursor: 'normal' 47729 } 47730 }, 47731 data: { 47732 csvURL: appPath + '/nuclear/charts/' + elementId + '.csv', 47733 startRow: 6, 47734 firstRowAsNames: true, 47735 complete: function (options) { 47736 if (options.series.length > 0) { 47737 options.series[0].yAxis = 0; 47738 options.series[1].yAxis = 1; 47739 } 47740 }, 47741 beforeParse: function (csv) { 47742 var parsedCSV = csvParser(csv); 47743 this.chart.title.update({ text: parsedCSV[0][0] }); 47744 this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } }); 47745 this.chart.yAxis[1].update({ title: { text: parsedCSV[2][0] } }); 47746 this.chart.credits.update({ text: parsedCSV[3][0] + '<br>' + parsedCSV[4][0] }); 47747 this.chart.update( 47748 { 47749 accessibility: { 47750 description: parsedCSV[5][0], 47751 }, 47752 exporting: { 47753 menuItemDefinitions: 47754 { 47755 label: { 47756 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 47757 } 47758 }, 47759 buttons: { 47760 contextButton: { 47761 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 47762 } 47763 } 47764 } 47765 } 47766 ); 47767 return csv; 47768 } 47769 47770 }, 47771 colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown], 47772 xAxis: { 47773 labels: { 47774 format: "{value}", 47775 }, 47776 showLastLabel: true, 47777 startOnTick: true, 47778 tickPositioner: function () {
47779 const dateMin = this.dataMin; 47780 const dateMax = this.dataMax; 47781 const positions = []; 47782 for (let position = dateMin; position <= dateMax; position += 10) { // increment in 10 year periods 47783 positions.push(position); 47784 } 47785 return positions; 47786 } 47787 }, 47788 yAxis: [ 47789 { 47790 maxPadding: 0, 47791 alignTicks: false, 47792 labels: { 47793 format: "{value}", 47794 style: { "color": Highcharts.eiaColors.blue } 47795 }, 47796 title: { 47797 style: { "color": Highcharts.eiaColors.blue } 47798 } 47799 }, 47800 { 47801 tickInterval: 100000, 47802 maxPadding: 0, 47803 alignTicks: false, 47804 gridLineColor: 'none', 47805 opposite: true, 47806 labels: { 47807 format: "{value:,.0f}", 47808 style: { "color": Highcharts.eiaColors.brown } 47809 }, 47810 title: { 47811 style: { "color": Highcharts.eiaColors.brown } 47812 } 47813 } 47814 ], 47815 tooltip: { 47816 useHTML: true, 47817 shared: true, 47818 formatter: function () { 47819 var html = '<b>' + this.x + '</b><br/>'; 47820 this.points.filter(function (value) { 47821 const units = value.series.yAxis.axisTitle.textStr.substr(value.series.yAxis.axisTitle.textStr.indexOf(" ") + 1); // store units (text after first space) 47822 html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25AC\u2009\u2009' + '</span><b>' + value.series.name + ':</b> ' + Highcharts.numberFormat(value.y) + ' ' + units + '<br/>'; 47823 }); 47824 return html; 47825 } 47826 }, 47827 responsive: { 47828 rules: [{ 47829 condition: { 47830 maxWidth: 320 47831 }, 47832 chartOptions: { 47833 chart: { 47834 height: 500 47835 }, 47836 yAxis: [ 47837 { 47838 title: { 47839 style: { 47840 'fontSize': '11px' 47841 } 47842 } 47843 }, 47844 { 47845 title: { 47846 style: { 47847 'fontSize': '11px' 47848 } 47849 } 47850 } 47851 ] 47852 } 47853 }, 47854 { 47855 condition: { 47856 minWidth: 321, 47857 maxWidth: 450 47858 }, 47859 chartOptions: { 47860 chart: { 47861 height: 500 47862 } 47863 } 47864 }, 47865 { 47866 condition: { 47867 minWidth: 451 47868 }, 47869 47870 chartOptions: { 47871 chart: { 47872 height: '65%' 47873 } 47874 } 47875 }] 47876 } 47877 }); 47878 } 47879}; 47880 47881},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],255:[function(require,module,exports){ 47882const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 47883const csvParser = require('../../includes/csvParser'); 47884 47885module.exports = function (Highcharts, appPath) { 47886 const elementId = 'sources-of-uranium'; 47887 var units = ''; 47888 47889 if ($('#' + elementId).length > 0) { 47890 Highcharts.chart(elementId, { 47891 chart: { 47892 type: 'line', 47893 spacingBottom: 30, 47894 events: { 47895 load: creditsSizeAndPosition, 47896 redraw: creditsSizeAndPosition 47897 } 47898 }, 47899 credits: { 47900 enabled: true, 47901 href: null, 47902 style: { 47903 cursor: 'normal' 47904 } 47905 }, 47906 data: { 47907 csvURL: appPath + '/nuclear/charts/' + elementId + '.csv', 47908 startRow: 5, 47909 firstRowAsNames: true, 47910 beforeParse: function (csv) { 47911 var parsedCSV = csvParser(csv); 47912 this.chart.title.update({ text: parsedCSV[0][0] }); 47913 units = parsedCSV[1][0]; 47914 this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } }); 47915 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 47916 this.chart.update( 47917 { 47918 accessibility: { 47919 description: parsedCSV[4][0], 47920 }, 47921 exporting: { 47922 menuItemDefinitions: 47923 { 47924 label: { 47925 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 47926 } 47927 }, 47928 buttons: { 47929 contextButton: { 47930 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 47931 } 47932 } 47933 } 47934 } 47935 ); 47936 return csv; 47937 } 47938 }, 47939 xAxis: { 47940 labels: { 47941 format: "{value}" 47942 }, 47943 tickInterval: 10 47944 }, 47945 yAxis: { 47946 tickInterval: 10, 47947 labels: { 47948 format: "{value}" 47949 } 47950 }, 47951 tooltip: { 47952 useHTML: true, 47953 shared: true, 47954 formatter: function () { 47955 var html = '<b>' + this.x + '</b><br/>'; 47956 this.points.filter(function (value) { 47957 html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25AC\u2009\u2009' + '</span><b>' + value.series.name + ':</b> ' + Highcharts.numberFormat(value.y, 2) + ' ' + units + '<br/>'; 47958 }); 47959 return html; 47960 } 47961 }, 47962 responsive: { 47963 rules: [{ 47964 condition: { 47965 maxWidth: 450 47966 }, 47967 chartOptions: { 47968 chart: { 47969 height: 450 47970 } 47971 } 47972 }, 47973 { 47974 condition: { 47975 minWidth: 451 47976 }, 47977 47978 chartOptions: { 47979 chart: { 47980 height: '65%' 47981 } 47982 } 47983 }] 47984 } 47985 }); 47986 } 47987}; 47988 47989},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],256:[function(require,module,exports){ 47990const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 47991const csvParser = require('../../includes/csvParser'); 47992 47993 47994module.exports = function (Highcharts, map, appPath) { 47995 47996 const elementId = 'crude-oil-production'; 47997 let note =''; 47998 let mapData = Highcharts.geojson(map, 'map'); 47999 48000 // Our own options definition as two different series, will populate the data in the complete callback 48001 var seriesOptions = [ 48002 { 48003 id: "rank1", 48004 type: "map", 48005 mapData : mapData, 48006 allAreas: false, 48007 keys: ["postal-code"], 48008 joinBy: ['hc-a2', 'code'], 48009 data: [], 48010 mapData: mapData, 48011 borderWidth: 0.5, 48012 borderColor: '#ffffff', 48013 states: { 48014 hover: { 48015 brightness: 0, 48016 borderWidth: 1, 48017 borderColor: Highcharts.eiaColors.blue 48018 } 48019 }, 48020 dataLabels: { 48021 enabled: true,
48022 useHTML: false, 48023 formatter: function () { 48024 var labelData; 48025 if (this.point.properties) { 48026 var regionLabel = this.point.properties['hc-a2']; 48027 48028 if(this.point.properties['hc-a2'] === 'GOA') { 48029 regionLabel = 'Gulf of America<br/>Federal Offshore'; 48030 48031 } else if(this.point.properties['hc-a2'] === 'PAC') { 48032 regionLabel = 'Pacific<br/>Federal<br/>Offshore'; 48033 } 48034 48035 labelData = '<span>' + regionLabel + '</span>' 48036 } 48037 return labelData; 48038 } 48039 } 48040 }, 48041 { 48042 data: Highcharts.geojson(map, 'mapline'), 48043 type: 'mapline', 48044 borderWidth: 0.5, 48045 nullColor : 'silver', 48046 color: 'silver', 48047 lineWidth : 1, 48048 showInLegend: false, 48049 enableMouseTracking: false, 48050 states : { 48051 inactive : { 48052 enabled : false 48053 } 48054 } 48055 } 48056 ]; 48057 48058 if ($('#' + elementId).length > 0) { 48059 Highcharts.mapChart(elementId, { 48060 chart: { 48061 map: map, 48062 spacingBottom: 25, 48063 events: { 48064 load: creditsSizeAndPosition, 48065 redraw: creditsSizeAndPosition 48066 } 48067 }, 48068 mapView : { 48069 insetOptions : { 48070 borderWidth : 1, 48071 borderColor : 'silver' 48072 } 48073 }, 48074 credits: { 48075 enabled: false, 48076 href: null, 48077 style: { 48078 cursor: 'normal' 48079 } 48080 }, 48081 caption: { 48082 verticalAlign: 'bottom', 48083 useHTML: true, 48084 margin: 0, 48085 style: { 48086 color: '#888', 48087 fontSize: '11px' 48088 }, 48089 x: 32, 48090 y: 33 48091 }, 48092 tooltip: { 48093 enabled: true, 48094 useHTML: true, 48095 formatter: function () { 48096 var tipTool; 48097 if (this.point.value === 0) { 48098 tipTool = '<b>' + this.key + '</b><br/><span></span>'; 48099 } 48100 else { 48101 tipTool = '<b>' + this.key + '</b><br/><span>' + Highcharts.numberFormat(this.point.value) + '</span>' 48102 } 48103 48104 return tipTool 48105 } 48106 }, 48107 data: { 48108 csvURL: appPath + '/oil-and-petroleum-products/charts/' + elementId + '.csv', 48109 startRow: 5, 48110 firstRowAsNames: false, 48111 complete: function (options) { 48112 var point; 48113 var i; 48114 48115 for (i = 0; i < options.series[0].data.length; i++) { 48116 point = options.series[0].data[i]; 48117 48118 seriesOptions[0].data.push({ 48119 code: point.name, 48120 value: point.value 48121 }); 48122 48123 } 48124 48125 // replace series options parsed by Highcharts with our own options definition 48126 options.series = seriesOptions; 48127 48128 }, 48129 beforeParse: function (csv) { 48130 48131 var parsedCSV = csvParser(csv); 48132 this.chart.title.update({ text: parsedCSV[0][0] }); 48133 note = parsedCSV[2][0]; 48134 this.chart.subtitle.update({ text: '<span style="color:#888;font-weight:bold;font-size:12px;fill:#888;">' + parsedCSV[1][0] + '</span><br/>' }); 48135 this.chart.caption.update({ text: parsedCSV[2][0] + '<br/>' + parsedCSV[3][0] }); 48136 48137 this.chart.update( 48138 { 48139 accessibility: { 48140 description: parsedCSV[4][0] 48141 }, 48142 exporting: { 48143 allowHTML: true, 48144 menuItemDefinitions: 48145 { 48146 label: { 48147 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 48148 } 48149 }, 48150 buttons: { 48151 contextButton: { 48152 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 48153 } 48154 } 48155 } 48156 } 48157 ); 48158 return csv; 48159 } 48160 }, 48161 colorAxis: { 48162 dataClasses: [{ 48163 color: Highcharts.eiaColors.extraLightGrey, 48164 to: 0 48165 }, { 48166 color: '#F8F0E8', 48167 from: 0.01, 48168 to: 1000 48169 }, { 48170 color: Highcharts.eiaColors.extraLightBrown, 48171 from: 1000.01, 48172 to: 10000 48173 }, { 48174 color: Highcharts.eiaColors.lightBrown, 48175 from: 10000.01, 48176 to: 100000 48177 }, { 48178 color: Highcharts.eiaColors.brown, 48179 from: 100000.01, 48180 to: 500000 48181 }, { 48182 color: Highcharts.eiaColors.darkBrown, 48183 from: 500000.01 48184 }] 48185 }, 48186 legend: { 48187 align: 'center', 48188 backgroundColor: 'white', 48189 borderColor: 'white', 48190 layout: 'horizontal', 48191 itemDistance: 20, 48192 symbolPadding: 4, 48193 symbolRadius: 0, 48194 valueDecimals: 0, 48195 labelFormatter: function () { 48196 48197 if (this.from === undefined) { 48198 return '= ' + Highcharts.numberFormat(this.to, 0, '.', ','); 48199 } 48200 else if (this.from === 0.01) { 48201 return '< ' + Highcharts.numberFormat(this.to, 0, '.', ','); 48202 } 48203 else if (this.to === undefined) { 48204 return '> ' + Highcharts.numberFormat(this.from, 0, '.', ','); 48205 } 48206 else { 48207 return Highcharts.numberFormat(this.from, 0, '.', ',') + ' - ' + Highcharts.numberFormat(this.to, 0, '.', ','); 48208 } 48209 } 48210 }, 48211 responsive: { 48212 rules: [{ 48213 condition: { 48214 maxWidth: 321 48215 }, 48216 48217 chartOptions: { 48218 chart: { 48219 height: 330 48220 }, 48221 title: { 48222 margin: 5 48223 }, 48224 plotOptions: { 48225 map: { 48226 dataLabels: { 48227 style: { 48228 fontSize: '7px', 48229 lineHeight: 7 48230 } 48231 } 48232 } 48233 } 48234 } 48235 }, 48236 { 48237 condition: { 48238 minWidth: 322, 48239 maxWidth: 400 48240 }, 48241 48242 chartOptions: { 48243 chart: { 48244 height: 350 48245 }, 48246 title: { 48247 margin: 5 48248 }, 48249 plotOptions: { 48250 map: { 48251 dataLabels: { 48252 style: { 48253 fontSize: '8px', 48254 lineHeight: 8 48255 } 48256 } 48257 } 48258 } 48259 } 48260 }, 48261 { 48262 condition: { 48263 minWidth: 401, 48264 maxWidth: 450 48265 }, 48266 48267 chartOptions: { 48268 chart: { 48269 height: 380 48270 }, 48271 title: { 48272 margin: 5 48273 }, 48274 plotOptions: { 48275 map: { 48276 dataLabels: { 48277 style: { 48278 fontSize: '8px', 48279 lineHeight: 8 48280 } 48281 } 48282 } 48283 } 48284 } 48285 }, 48286 { 48287 condition: { 48288 minWidth: 451 48289 }, 48290 48291 chartOptions: { 48292 chart: { 48293 height: '65%' 48294 }, 48295 title: { 48296 margin: 15 48297 }, 48298 plotOptions: { 48299 map: { 48300 dataLabels: { 48301 style: { 48302 fontSize: '9px', 48303 lineHeight: 9 48304 } 48305 } 48306 } 48307 } 48308 } 48309 }] 48310 } 48311 }); 48312 } 48313}; 48314 48315},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],257:[function(require,module,exports){ 48316const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 48317const csvParser = require('../../includes/csvParser'); 48318 48319module.exports = function (Highcharts, appPath) { 48320 const elementId = 'net-imports-petroleum-shares-consumption'; 48321 48322 if ($('#' + elementId).length > 0) { 48323 48324 Highcharts.chart(elementId, { 48325 chart: { 48326 type: 'pie', 48327 spacingBottom: 25, 48328 events: { 48329 load: creditsSizeAndPosition, 48330 redraw: creditsSizeAndPosition 48331 } 48332 }, 48333 credits: { 48334 enabled: true, 48335 href: null, 48336 style: { 48337 cursor: 'normal' 48338 } 48339 }, 48340 title: { 48341 text: '', 48342 margin: 10 48343 }, 48344 data: { 48345 csvURL: appPath + '/oil-and-petroleum-products/charts/' + elementId + '.csv', 48346 startRow: 4, 48347 firstRowAsNames: false, 48348 complete: function (options) { 48349 }, 48350 beforeParse: function (csv) { 48351 var parsedCSV = csvParser(csv); 48352 this.chart.title.update({ text: parsedCSV[0][0] }); 48353 this.chart.credits.update({ text: parsedCSV[1][0] + '<br>' + parsedCSV[2][0] }); 48354 this.chart.update( 48355 { 48356 accessibility: { 48357 description: parsedCSV[3][0], 48358 }, 48359 exporting: { 48360 menuItemDefinitions: 48361 { 48362 label: { 48363 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 48364 } 48365 }, 48366 buttons: { 48367 contextButton: { 48368 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 48369 } 48370 } 48371 } 48372 } 48373 ); 48374 return csv; 48375 } 48376 }, 48377 subtitle: { 48378 text: '', 48379 useHTML: true, 48380 }, 48381 plotOptions: { 48382 pie: { 48383 dataLabels: { 48384 enabled: true, 48385 format: "<strong>{point.name}</strong> {point.percentage:.0f}%", 48386 distance: 10, 48387 color: Highcharts.eiaColors.darkGrey, 48388 style: { 48389 "fontSize": "12px" 48390 } 48391 } 48392 } 48393 }, 48394 tooltip: { 48395 useHTML: true, 48396 formatter: function () { 48397 return "<span><b>" + this.key + "</b><br/>" + Math.round(this.percentage) + " %</span>"; 48398 } 48399 }, 48400 responsive: { 48401 rules: [{ 48402 condition: { 48403 maxWidth: 450 48404 }, 48405 48406 chartOptions: { 48407 chart: { 48408 height: 410 48409 }, 48410 plotOptions: { 48411 pie: { 48412 size: null, 48413 dataLabels: { 48414 enabled: false 48415 }, 48416 showInLegend: true 48417 } 48418 }, 48419 legend: { 48420 enabled: true 48421 } 48422 } 48423 }, 48424 { 48425 condition: { 48426 minWidth: 451 48427 }, 48428 48429 chartOptions: { 48430 chart: { 48431 height: '65%' 48432 }, 48433 plotOptions: { 48434 pie: { 48435 size: '65%', 48436 dataLabels: { 48437 enabled: true 48438 }, 48439 showInLegend: false 48440 } 48441 }, 48442 legend: { 48443 enabled: false 48444 } 48445 } 48446 }] 48447 } 48448 }); 48449 } 48450}; 48451 48452},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],258:[function(require,module,exports){ 48453const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 48454const csvParser = require('../../includes/csvParser'); 48455 48456module.exports = function (Highcharts, appPath) { 48457 const elementId = 'net-petroleum-imports-by-type'; 48458 var units = ''; 48459 48460 if ($('#' + elementId).length > 0) { 48461 Highcharts.chart(elementId, { 48462 chart: { 48463 type: 'column', 48464 spacingBottom: 30, 48465 events: { 48466 load: creditsSizeAndPosition, 48467 redraw: creditsSizeAndPosition 48468 } 48469 }, 48470 credits: { 48471 enabled: true, 48472 href: null, 48473 style: { 48474 cursor: 'normal' 48475 } 48476 }, 48477 data: { 48478 csvURL: appPath + '/oil-and-petroleum-products/charts/' + elementId + '.csv', 48479 startRow: 5, 48480 firstRowAsNames: true, 48481 48482 beforeParse: function (csv) { 48483 var parsedCSV = csvParser(csv); 48484 this.chart.title.update({ text: parsedCSV[0][0] }); 48485 this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } }); 48486 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 48487 units = parsedCSV[1][0]; 48488 this.chart.update( 48489 { 48490 accessibility: { 48491 description: parsedCSV[4][0], 48492 }, 48493 exporting: { 48494 menuItemDefinitions: 48495 { 48496 label: { 48497 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 48498 } 48499 }, 48500 buttons: { 48501 contextButton: { 48502 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 48503 } 48504 } 48505 } 48506 } 48507 ); 48508 return csv; 48509 } 48510 }, 48511 colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.orange, Highcharts.eiaColors.lightGrey], 48512 xAxis: { 48513 labels: { 48514 format: "{value}" 48515 }, 48516 type: 'category', 48517 tickWidth: 1, 48518 tickInterval: 10 48519 }, 48520 yAxis: { 48521 tickInterval: 5, 48522 labels: { 48523 format: "{value:,.0f}" 48524 }, 48525 reversedStacks: false 48526 }, 48527 plotOptions: { 48528 column: { 48529 stacking: 'normal', 48530 dataLabels: { 48531 enabled: false 48532 } 48533 } 48534 }, 48535 tooltip: { 48536 shared: true, 48537 useHTML: true, 48538 formatter: function () { 48539 let html = "<b>" + this.points[0].key + "</b><br/>"; 48540 this.points.filter(function (value) { 48541 html += '<span font-size: 16px; style="color:' + value.series.color + '">' + '\u25CF\u2009\u2009' + '</span><b>' + value.series.name + ': </b><span>' + value.y.toString() + ' ' + units + '</span><br/>'; 48542 }); 48543 return html; 48544 } 48545 }, 48546 responsive: { 48547 rules: [{ 48548 condition: { 48549 maxWidth: 450 48550 }, 48551 chartOptions: { 48552 chart: { 48553 height: 450 48554 } 48555 } 48556 }, 48557 { 48558 condition: { 48559 minWidth: 45
485591 48560 }, 48561 48562 chartOptions: { 48563 chart: { 48564 height: '65%' 48565 } 48566 } 48567 }] 48568 } 48569 }); 48570 } 48571} 48572 48573},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],259:[function(require,module,exports){ 48574const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 48575const csvParser = require('../../includes/csvParser'); 48576 48577module.exports = function (Highcharts, appPath) { 48578 const elementId = 'petroleum-consumption'; 48579 var units = ''; 48580 48581 if ($('#' + elementId).length > 0) { 48582 Highcharts.chart(elementId, { 48583 chart: { 48584 type: 'line', 48585 spacingBottom: 25, 48586 events: { 48587 load: creditsSizeAndPosition, 48588 redraw: creditsSizeAndPosition 48589 } 48590 }, 48591 credits: { 48592 enabled: true, 48593 href: null, 48594 style: { 48595 cursor: 'normal' 48596 } 48597 }, 48598 data: { 48599 csvURL: appPath + '/oil-and-petroleum-products/charts/' + elementId + '.csv', 48600 startRow: 5, 48601 firstRowAsNames: true, 48602 beforeParse: function (csv) { 48603 var parsedCSV = csvParser(csv); 48604 this.chart.title.update({ text: parsedCSV[0][0] }); 48605 this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } }); 48606 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 48607 units = parsedCSV[1][0]; 48608 this.chart.update( 48609 { 48610 accessibility: { 48611 description: parsedCSV[4][0], 48612 }, 48613 exporting: { 48614 menuItemDefinitions: 48615 { 48616 label: { 48617 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 48618 } 48619 }, 48620 buttons: { 48621 contextButton: { 48622 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 48623 } 48624 } 48625 } 48626 } 48627 ); 48628 return csv; 48629 } 48630 }, 48631 colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.green, Highcharts.eiaColors.yellow, Highcharts.eiaColors.red], 48632 xAxis: { 48633 tickInterval: 5, 48634 labels: { 48635 format: "{value}" 48636 }, 48637 startOnTick: true, 48638 minPadding: 0, 48639 maxPadding: 0 48640 }, 48641 yAxis: { 48642 tickInterval: 2, 48643 maxPadding: 0, 48644 labels: { 48645 format: "{value}" 48646 } 48647 }, 48648 tooltip: { 48649 shared: true, 48650 useHTML: true, 48651 formatter: function () { 48652 var html = '<b>' + this.x + '</b><br/>'; 48653 this.points.filter(function (value) { 48654 html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25AC\u2009\u2009' + '</span><b>' + value.series.name + ':</b> ' + value.y.toFixed(2).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",") + ' ' + units + '<br/>'; 48655 }); 48656 return html; 48657 } 48658 }, 48659 responsive: { 48660 rules: [{ 48661 condition: { 48662 maxWidth: 450 48663 }, 48664 48665 chartOptions: { 48666 chart: { 48667 height: 450 48668 } 48669 } 48670 }, 48671 { 48672 condition: { 48673 minWidth: 451 48674 }, 48675 48676 chartOptions: { 48677 chart: { 48678 height: '65%' 48679 } 48680 } 48681 }] 48682 } 48683 }); 48684 } 48685}; 48686 48687},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],260:[function(require,module,exports){ 48688const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 48689const csvParser = require('../../includes/csvParser'); 48690 48691module.exports = function (Highcharts, appPath) { 48692 const elementId = 'petroleum-imports'; 48693 var units = ''; 48694 48695 if ($('#' + elementId).length > 0) { 48696 Highcharts.chart(elementId, { 48697 chart: { 48698 type: 'line', 48699 spacingBottom: 25, 48700 events: { 48701 load: creditsSizeAndPosition, 48702 redraw: creditsSizeAndPosition 48703 } 48704 }, 48705 credits: { 48706 enabled: true, 48707 href: null, 48708 style: { 48709 cursor: 'normal' 48710 } 48711 }, 48712 data: { 48713 csvURL: appPath + '/oil-and-petroleum-products/charts/' + elementId + '.csv', 48714 startRow: 5, 48715 firstRowAsNames: true, 48716 beforeParse: function (csv) { 48717 var parsedCSV = csvParser(csv); 48718 this.chart.title.update({ text: parsedCSV[0][0] }); 48719 this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } }); 48720 units = parsedCSV[1][0]; 48721 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 48722 this.chart.update( 48723 { 48724 accessibility: { 48725 description: parsedCSV[4][0], 48726 }, 48727 exporting: { 48728 menuItemDefinitions: 48729 { 48730 label: { 48731 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 48732 } 48733 }, 48734 buttons: { 48735 contextButton: { 48736 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 48737 } 48738 } 48739 } 48740 } 48741 ); 48742 return csv; 48743 } 48744 }, 48745 colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.green, Highcharts.eiaColors.yellow], 48746 xAxis: { 48747 tickInterval: 5, 48748 labels: { 48749 format: "{value}" 48750 }, 48751 startOnTick: true, 48752 minPadding: 0, 48753 maxPadding: 0 48754 }, 48755 yAxis: { 48756 tickInterval: 1, 48757 maxPadding: 0, 48758 labels: { 48759 format: "{value:.1f}" 48760 } 48761 }, 48762 tooltip: { 48763 shared: true, 48764 useHTML: true, 48765 formatter: function () { 48766 var html = '<b>' + this.x + '</b><br/>'; 48767 this.points.filter(function (value) { 48768 html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25AC\u2009\u2009' + '</span><b>' + value.series.name + ':</b> ' + value.y.toFixed(2).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",") + ' ' + units + '<br/>'; 48769 }); 48770 return html; 48771 } 48772 }, 48773 responsive: { 48774 rules: [{ 48775 condition: { 48776 maxWidth: 450 48777 }, 48778 48779 chartOptions: { 48780 chart: { 48781 height: 450 48782 } 48783 } 48784 }, 48785 { 48786 condition: { 48787 minWidth: 451 48788 }, 48789 48790 chartOptions: { 48791 chart: { 48792 height: '65%' 48793 } 48794 } 48795 }] 48796 } 48797 }); 48798 } 48799}; 48800 48801},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],261:[function(require,module,exports){ 48802const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 48803const csvParser = require('../../includes/csvParser'); 48804 48805module.exports = function (Highcharts, appPath) { 48806 const elementId = 'refiner-acquisition-cost'; 48807 let units = ''; 48808 48809 if ($('#' + elementId).length > 0) { 48810 Highcharts.chart(elementId, { 48811 chart: { 48812 type: 'line', 48813 spacingBottom: 30, 48814 events: { 48815 load: creditsSizeAndPosition, 48816 redraw: creditsSizeAndPosition 48817 } 48818 }, 48819 credits: { 48820 enabled: true, 48821 href: null, 48822 style: { 48823 cursor: 'normal' 48824 } 48825 }, 48826 data: { 48827 csvURL: appPath + '/oil-and-petroleum-products/charts/' + elementId + '.csv', 48828 startRow: 5, 48829 firstRowAsNames: true, 48830 48831 beforeParse: function (csv) { 48832 var parsedCSV = csvParser(csv); 48833 units = parsedCSV[1][0]; 48834 this.chart.title.update({ text: parsedCSV[0][0] }); 48835 this.chart.yAxis[0].update({ title: { text: units } }); 48836 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 48837 this.chart.update( 48838 { 48839 accessibility: { 48840 description: parsedCSV[4][0], 48841 }, 48842 exporting: { 48843 menuItemDefinitions: 48844 { 48845 label: { 48846 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 48847 } 48848 }, 48849 buttons: { 48850 contextButton: { 48851 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 48852 } 48853 } 48854 } 48855 } 48856 ); 48857 return csv; 48858 } 48859 }, 48860 colors: [Highcharts.eiaColors.blue], 48861 xAxis: { 48862 type: 'category', 48863 startOnTick: true, 48864 endOnTick: false, 48865 tickInterval: 60, 48866 tickWidth: 1, 48867 labels: { 48868 formatter: function() { 48869 return this.value.substring(4); 48870 } 48871 } 48872 }, 48873 yAxis: { 48874 labels: { 48875 format: "{value}" 48876 }, 48877 tickInterval: 10, 48878 maxPadding:0 48879 }, 48880 tooltip: { 48881 formatter:function () { 48882 var pointValue; 48883 pointValue = this.y.toFixed(2); 48884 48885 return '<b>' + this.point.name + '</b>' + '<br/>' + 48886 pointValue + ' ' + units.substring(12); 48887 } 48888 }, 48889 legend: { 48890 enabled: false 48891 }, 48892 responsive: { 48893 rules: [{ 48894 condition: { 48895 maxWidth: 450 48896 }, 48897 chartOptions: { 48898 chart: { 48899 height: 400 48900 }, 48901 xAxis: { 48902 labels: { 48903 rotation: -45 48904 } 48905 } 48906 } 48907 }, 48908 { 48909 condition: { 48910 minWidth: 451 48911 }, 48912 48913 chartOptions: { 48914 chart: { 48915 height: '65%' 48916 } 48917 } 48918 }] 48919 } 48920 }); 48921 } 48922}; 48923 48924},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],262:[function(require,module,exports){ 48925const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 48926const csvParser = require('../../includes/csvParser'); 48927 48928module.exports = function (Highcharts, appPath) { 48929 const elementId = 'refiner-blender-net-production'; 48930 let units = ''; 48931 if ($('#' + elementId).length > 0) { 48932 Highcharts.chart(elementId, { 48933 chart: { 48934 type: 'bar', 48935 spacingBottom: 25, 48936 events: { 48937 load: creditsSizeAndPosition, 48938 redraw: creditsSizeAndPosition 48939 } 48940 }, 48941 credits: { 48942 enabled: true, 48943 href: null, 48944 style: { 48945 cursor: 'normal' 48946 } 48947 }, 48948 data: { 48949 csvURL: appPath + '/oil-and-petroleum-products/charts/' + elementId + '.csv', 48950 startRow: 5, 48951 firstRowAsNames: true, 48952 beforeParse: function (csv) { 48953 var parsedCSV = csvParser(csv); 48954 units = parsedCSV[1][0]; 48955 this.chart.title.update({ text: parsedCSV[0][0] }); 48956 this.chart.xAxis[0].update({ title: { text: units } }); 48957 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 48958 this.chart.update( 48959 { 48960 accessibility: { 48961 description: parsedCSV[4][0], 48962 }, 48963 exporting: { 48964 menuItemDefinitions: 48965 { 48966 label: { 48967 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 48968 } 48969 }, 48970 buttons: { 48971 contextButton: { 48972 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 48973 } 48974 } 48975 } 48976 } 48977 ); 48978 return csv; 48979 } 48980 }, 48981 xAxis: { 48982 title: {
48983 align: 'high', 48984 offset: 0, 48985 rotation: 0, 48986 y: -20 48987 }, 48988 labels: { 48989 rotation: 0, 48990 style: { 48991 lineHeight: '12px', 48992 textAlign: 'center' 48993 } 48994 } 48995 48996 }, 48997 plotOptions: { 48998 series: { 48999 dataLabels: { 49000 enabled: true, 49001 format: '{point.y}%', 49002 }, 49003 grouping: false, 49004 colorByPoint: true, 49005 colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.green, Highcharts.eiaColors.yellow, Highcharts.eiaColors.red, Highcharts.eiaColors.darkBrown, Highcharts.eiaColors.darkBlue, Highcharts.eiaColors.lightBlue, Highcharts.eiaColors.lightGreen, Highcharts.eiaColors.grey, Highcharts.eiaColors.darkGrey] 49006 } 49007 }, 49008 yAxis: { 49009 labels: { 49010 enabled: false 49011 }, 49012 gridLineColor: "none", 49013 title: { 49014 text: null 49015 } 49016 }, 49017 tooltip: { 49018 formatter: function () { 49019 return '<b>' + this.key + '</b><br/>' + this.y + '%'; 49020 } 49021 }, 49022 legend: { 49023 enabled: false 49024 }, 49025 responsive: { 49026 rules: [{ 49027 condition: { 49028 maxWidth: 450 49029 }, 49030 chartOptions: { 49031 chart: { 49032 height: 500 49033 } 49034 } 49035 }, 49036 { 49037 condition: { 49038 minWidth: 451 49039 }, 49040 49041 chartOptions: { 49042 chart: { 49043 height: '65%' 49044 } 49045 } 49046 }] 49047 } 49048 }); 49049 } 49050}; 49051 49052},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],263:[function(require,module,exports){ 49053const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 49054const csvParser = require('../../includes/csvParser'); 49055 49056module.exports = function (Highcharts, appPath) { 49057 const elementId = 'refiner-blender-netinput-by-type-share-total'; 49058 var units = []; 49059 49060 if ($('#' + elementId).length > 0) { 49061 49062 Highcharts.chart(elementId, { 49063 chart: { 49064 type: 'pie', 49065 spacingBottom: 25, 49066 events: { 49067 load: creditsSizeAndPosition, 49068 redraw: creditsSizeAndPosition 49069 } 49070 }, 49071 credits: { 49072 enabled: true, 49073 href: null, 49074 style: { 49075 cursor: 'normal' 49076 } 49077 }, 49078 title: { 49079 text: '' 49080 }, 49081 data: { 49082 csvURL: appPath + '/oil-and-petroleum-products/charts/' + elementId + '.csv', 49083 startRow: 5, 49084 firstRowAsNames: true, 49085 beforeParse: function (csv) { 49086 var parsedCSV = csvParser(csv); 49087 this.chart.title.update({ text: parsedCSV[0][0] }); 49088 this.chart.subtitle.update({ text: '<span style="color:#888;font-weight:bold;font-size:12px;fill:#888;">' + parsedCSV[1][0] + '</span>' }); 49089 units.push(parsedCSV[5][0]); 49090 units.push(parsedCSV[5][1]); 49091 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 49092 this.chart.update( 49093 { 49094 accessibility: { 49095 description: parsedCSV[4][0], 49096 }, 49097 exporting: { 49098 menuItemDefinitions: 49099 { 49100 label: { 49101 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 49102 } 49103 }, 49104 buttons: { 49105 contextButton: { 49106 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 49107 } 49108 } 49109 } 49110 } 49111 ); 49112 return csv; 49113 } 49114 }, 49115 colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.red, Highcharts.eiaColors.green, Highcharts.eiaColors.yellow], 49116 subtitle: { 49117 text: '', 49118 useHTML: true, 49119 }, 49120 plotOptions: { 49121 pie: { 49122 dataLabels: { 49123 enabled: true, 49124 format: "<strong>{point.name}</strong> {point.percentage:.0f}%", 49125 distance: 10, 49126 color: Highcharts.eiaColors.darkGrey, 49127 style: { 49128 "fontSize": "12px" 49129 } 49130 } 49131 } 49132 }, 49133 tooltip: { 49134 useHTML: true, 49135 formatter: function () { 49136 return "<span><b>" + this.key + "</b><br/>" + Math.round(this.percentage) + "%</span> " + units[1] + "<br/>" + this.y.toFixed(2) + ' ' + units[0]; 49137 } 49138 }, 49139 responsive: { 49140 rules: [{ 49141 condition: { 49142 maxWidth: 450 49143 }, 49144 49145 chartOptions: { 49146 chart: { 49147 height: 410 49148 }, 49149 plotOptions: { 49150 pie: { 49151 size: null, 49152 dataLabels: { 49153 enabled: false 49154 }, 49155 showInLegend: true 49156 } 49157 }, 49158 legend: { 49159 enabled: true 49160 } 49161 } 49162 }, 49163 { 49164 condition: { 49165 minWidth: 451 49166 }, 49167 49168 chartOptions: { 49169 chart: { 49170 height: '65%' 49171 }, 49172 plotOptions: { 49173 pie: { 49174 size: '65%', 49175 dataLabels: { 49176 enabled: true 49177 }, 49178 showInLegend: false 49179 } 49180 }, 49181 legend: { 49182 enabled: false 49183 } 49184 } 49185 }] 49186 } 49187 }); 49188 } 49189}; 49190 49191},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],264:[function(require,module,exports){ 49192const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 49193const csvParser = require('../../includes/csvParser'); 49194 49195 49196module.exports = function (Highcharts, map, appPath) { 49197 const elementId = 'top-crude-oil-producing-states'; 49198 let mapData = Highcharts.geojson(map, 'map'); 49199 49200 // Our own options definition as two different series, will populate the data in the complete callback 49201 var seriesOptions = [ 49202 { 49203 id: "rank1", 49204 type: "map", 49205 mapData : mapData, 49206 allAreas: true, 49207 keys: ["postal-code"], 49208 joinBy: ['hc-a2', 'code'], 49209 data: [], 49210 states: { 49211 hover: { 49212 color: '#a4edba' 49213 } 49214 }, 49215 dataLabels: { 49216 enabled: true, 49217 formatter: function () { 49218 if (this.point.nameCode) { 49219 if (this.point.code === "VT" || this.point.code === "NH" || this.point.code === "MA" || this.point.code === "RI" || this.point.code === "CT" || this.point.code === "NJ" || this.point.code === "DE" || this.point.code === "MD" || this.point.code === "DC") { 49220 return this.point.code + " " + this.point.nameCode; 49221 } 49222 else { 49223 return this.point.code + "<br/>" + this.point.nameCode; 49224 } 49225 } 49226 return this.point.code 49227 }, 49228 style: { 49229 fontSize: '10px' 49230 } 49231 }, 49232 tooltip: { 49233 valueSuffix: '' 49234 }, 49235 nullColor : "white", 49236 showInLegend: false 49237 }, 49238 { 49239 type: 'mapline', 49240 data: Highcharts.geojson(map, 'mapline'), 49241 color: 'silver', 49242 nullColor : 'silver', 49243 lineWidth : 1, 49244 showInLegend: false, 49245 enableMouseTracking: false, 49246 states : { 49247 inactive : { 49248 enabled : false 49249 } 49250 } 49251 } 49252 ]; 49253 49254 if ($('#' + elementId).length > 0) { 49255 Highcharts.mapChart(elementId, { 49256 chart: { 49257 map: map, 49258 spacingBottom: 30, 49259 events: { 49260 load: creditsSizeAndPosition, 49261 redraw: creditsSizeAndPosition 49262 } 49263 }, 49264 mapView : { 49265 insetOptions : { 49266 borderWidth : 1, 49267 borderColor : 'silver' 49268 } 49269 }, 49270 credits: { 49271 enabled: false, 49272 href: null, 49273 style: { 49274 cursor: 'normal' 49275 } 49276 }, 49277 caption: { 49278 verticalAlign: 'bottom', 49279 useHTML: true, 49280 style: { 49281 color: '#888', 49282 fontSize: '11px' 49283 }, 49284 x: 32, 49285 y: 33 49286 }, 49287 tooltip: { 49288 enabled: true, 49289 useHTML: true, 49290 formatter: function () { 49291 if (this.point.nameCode) { 49292 return '<b>' + this.point.name + '</b><br/>' + this.point.nameCode; 49293 } 49294 else { 49295 return false; 49296 } 49297 }, 49298 style: { 49299 textAlign: 'center' 49300 } 49301 }, 49302 legend: { 49303 enabled: false 49304 }, 49305 data: { 49306 csvURL: appPath + '/oil-and-petroleum-products/charts/' + elementId + '.csv', 49307 startRow: 4, 49308 firstRowAsNames: false, 49309 complete: function (options) { 49310 var point; 49311 49312 for (var i = 0; i < options.series[0].data.length; i++) { 49313 point = options.series[0].data[i]; 49314 49315 if (point.value) { 49316 switch (point.value) { 49317 case 1: 49318 seriesOptions[0].data.push({ 49319 code: point.name, 49320 color: Highcharts.eiaColors.blue, 49321 nameCode: "<span>#" + point.value + "</span>" 49322 }); 49323 break; 49324 case 2: 49325 seriesOptions[0].data.push({ 49326 code: point.name, 49327 color: Highcharts.eiaColors.brown, 49328 nameCode: "<span>#" + point.value + "</span>" 49329 }); 49330 break; 49331 case 3: 49332 seriesOptions[0].data.push({ 49333 code: point.name, 49334 color: Highcharts.eiaColors.green, 49335 nameCode: "<span>#" + point.value + "</span>" 49336 }); 49337 break; 49338 case 4: 49339 seriesOptions[0].data.push({ 49340 code: point.name, 49341 color: Highcharts.eiaColors.yellow, 49342 nameCode: "<span>#" + point.value + "</span>" 49343 }); 49344 break; 49345 default: 49346 seriesOptions[0].data.push({ 49347 code: point.name, 49348 color: Highcharts.eiaColors.red, 49349 nameCode: "<span>#" + point.value + "</span>" 49350 }); 49351 } 49352 } 49353 } 49354 // replace series options parsed by Highcharts with our own options definition 49355 options.series = seriesOptions; 49356 }, 49357 beforeParse: function (csv) { 49358 var parsedCSV = csvParser(csv); 49359 this.chart.title.update({ text: parsedCSV[0][0] }); 49360 this.chart.caption.update({ text: parsedCSV[1][0] + '<br/>' + parsedCSV[2][0] }); 49361 49362 this.chart.update( 49363 { 49364 accessibility: { 49365 description: parsedCSV[3][0] 49366 }, 49367 exporting: { 49368 allowHTML: true, 49369 menuItemDefinitions: 49370 { 49371 label: { 49372 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 49373 } 49374 }, 49375 buttons: { 49376 contextButton: { 49377 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 49378 } 49379 } 49380 } 49381 } 49382 ); 49383 return csv; 49384 } 49385 }, 49386 responsive: { 49387 rules: [{ 49388 condition: { 49389 maxWidth: 321 49390 }, 49391 49392 chartOptions: { 49393 chart: { 49394 height: 330 49395 }, 49396 title: { 49397 margin: 5 49398 } 49399 } 49400 }, 49401 { 49402 condition: { 49403 minWidth: 322, 49404 maxWidth: 400 49405 }, 49406 49407 chartOptions: { 49408 chart: { 49409 height: 350 49410 }, 49411 title: { 49412 margin: 5 49413 } 49414 } 49415 }, 49416 { 49417 condition: { 49418 minWidth: 401, 49419 maxWidth: 450 49420 }, 49421 49422 chartOptions: { 49423 chart: { 49424 height: 380 49425 }, 49426 title: { 49427 margin: 5 49428 } 49429 } 49430 }, 49431 { 49432 condition: { 49433 minWidth: 451 49434 }, 49435 49436 chartOptions: { 49437 chart: { 49438 height: '65%' 49439 }, 49440 title: { 49441 margin: 15 49442 } 49443 } 49444 }] 49445 } 49446 49447 }); 49448 49449 } 49450}; 49451 49452},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],265:[function(require,module,exports){ 49453const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 49454const csvParser = require('../../includes/csvParser'); 49455 49456module.exports = function (Highcharts, appPath) { 49457 const elementId = 'top-oil-countries'; 49458 var units = ''; 49459 49460 if ($('#' + elementId).length > 0) { 49461 Highcharts.chart(elementId, { 49462 chart: { 49463 type: 'line', 49464 spacingBottom: 25, 49465 events: { 49466 load: creditsSizeAndPosition, 49467 redraw: creditsSizeAndPosition 49468 } 49469 }, 49470 credits: { 49471 enabled: true, 49472 href: null, 49473 style: { 49474 cursor: 'normal' 49475 } 49476 }, 49477 data: { 49478 csvURL: appPath + '/oil-and-petroleum-products/charts/' + elementId + '.csv', 49479 startRow: 5, 49480 firstRowAsNames: true, 49481 49482 beforeParse: function (csv) { 49483 var parsedCSV = csvParser(csv); 49484 this.chart.title.update({ text: parsedCSV[0][0] }); 49485 this.chart.yAxis[0].update({ title: { text: parsedCSV[
494851][0] } }); 49486 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 49487 units = parsedCSV[1][0]; 49488 this.chart.update( 49489 { 49490 accessibility: { 49491 description: parsedCSV[4][0], 49492 }, 49493 exporting: { 49494 menuItemDefinitions: 49495 { 49496 label: { 49497 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 49498 } 49499 }, 49500 buttons: { 49501 contextButton: { 49502 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 49503 } 49504 } 49505 } 49506 } 49507 ); 49508 return csv; 49509 } 49510 }, 49511 colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.green, Highcharts.eiaColors.yellow, Highcharts.eiaColors.red, Highcharts.eiaColors.lightBrown], 49512 xAxis: { 49513 labels: { 49514 format: "{value}" 49515 }, 49516 startOnTick: true, 49517 minPadding: 0, 49518 maxPadding: 0 49519 }, 49520 yAxis: { 49521 tickInterval: 1, 49522 labels: { 49523 format: "{value}" 49524 } 49525 }, 49526 tooltip: { 49527 shared: true, 49528 useHTML: true, 49529 formatter: function () { 49530 var html = '<b>' + this.x + '</b><br/>'; 49531 this.points.filter(function (value) { 49532 html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25AC\u2009\u2009' + '</span><b>' + value.series.name + ':</b> ' + value.y.toFixed(2).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",") + ' ' + units + '<br/>'; 49533 }); 49534 return html; 49535 } 49536 }, 49537 responsive: { 49538 rules: [{ 49539 condition: { 49540 maxWidth: 450 49541 }, 49542 49543 chartOptions: { 49544 chart: { 49545 height: 450 49546 } 49547 } 49548 }, 49549 { 49550 condition: { 49551 minWidth: 451 49552 }, 49553 49554 chartOptions: { 49555 chart: { 49556 height: '65%' 49557 } 49558 } 49559 }] 49560 } 49561 }); 49562 } 49563}; 49564 49565},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],266:[function(require,module,exports){ 49566const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 49567const csvParser = require('../../includes/csvParser'); 49568 49569 49570module.exports = function (Highcharts, map, appPath) { 49571 const elementId = 'portfolio-standards-and-goals'; 49572 const mapData = Highcharts.geojson(map, 'map'); 49573 49574 // Our own options definition as two different series, will populate the data in the complete callback 49575 var seriesOptions = [ 49576 { 49577 id: "standards", 49578 type: "map", 49579 color: Highcharts.eiaColors.blue, 49580 allAreas: false, 49581 keys: ["postal-code"], 49582 joinBy: ['hc-a2', 'code'], 49583 data: [], 49584 mapData: mapData, 49585 borderWidth: 0.5, 49586 states: { 49587 hover: { 49588 color: Highcharts.eiaColors.green 49589 } 49590 }, 49591 dataLabels: { 49592 enabled: true, 49593 formatter: function () { 49594 if (this.point.properties) { 49595 return this.point.properties['hc-a2']; 49596 } 49597 return this.point.options.code; 49598 }, 49599 style: { 49600 fontSize: '10px' 49601 } 49602 }, 49603 tooltip: { 49604 valueSuffix: '' 49605 } 49606 }, 49607 { 49608 id: "goals", 49609 type: "map", 49610 color: Highcharts.eiaColors.yellow, 49611 allAreas: false, 49612 keys: ["postal-code"], 49613 joinBy: ['hc-a2', 'code'], 49614 data: [], 49615 mapData: mapData, 49616 borderWidth: 0.5, 49617 states: { 49618 hover: { 49619 color: Highcharts.eiaColors.green 49620 } 49621 }, 49622 dataLabels: { 49623 enabled: true, 49624 formatter: function () { 49625 if (this.point.properties) { 49626 return this.point.properties['hc-a2']; 49627 } 49628 return this.point.options.code; 49629 }, 49630 style: { 49631 fontSize: '10px' 49632 } 49633 }, 49634 tooltip: { 49635 valueSuffix: '' 49636 } 49637 }, 49638 { 49639 id: "neither", 49640 showInLegend: false, 49641 type: "map", 49642 color: "#FFF", 49643 allAreas: false, 49644 keys: ["postal-code"], 49645 joinBy: ['hc-a2', 'code'], 49646 data: [], 49647 mapData: mapData, 49648 borderWidth: 0.5, 49649 states: { 49650 hover: { 49651 color: Highcharts.eiaColors.green 49652 } 49653 }, 49654 dataLabels: { 49655 enabled: true, 49656 formatter: function () { 49657 if (this.point.properties) { 49658 return this.point.properties['hc-a2']; 49659 } 49660 return this.point.options.code; 49661 }, 49662 style: { 49663 fontSize: '10px' 49664 } 49665 }, 49666 tooltip: { 49667 valueSuffix: '' 49668 } 49669 }, 49670 { 49671 type: 'mapline', 49672 data: Highcharts.geojson(map, 'mapline'), 49673 color: 'silver', 49674 nullColor : 'silver', 49675 lineWidth : 1, 49676 showInLegend: false, 49677 enableMouseTracking: false, 49678 states : { 49679 inactive : { 49680 enabled : false 49681 } 49682 } 49683 } 49684 ]; 49685 49686 if ($('#' + elementId).length > 0) { 49687 Highcharts.mapChart(elementId, { 49688 chart: { 49689 map: map, 49690 spacingBottom: 30, 49691 events: { 49692 load: creditsSizeAndPosition, 49693 redraw: creditsSizeAndPosition 49694 } 49695 }, 49696 mapView : { 49697 insetOptions : { 49698 borderWidth : 1, 49699 borderColor : 'silver' 49700 } 49701 }, 49702 credits: { 49703 enabled: false, 49704 href: null, 49705 style: { 49706 cursor: 'normal' 49707 } 49708 }, 49709 caption: { 49710 verticalAlign: 'bottom', 49711 useHTML: true, 49712 margin: 0, 49713 style: { 49714 color: '#888', 49715 fontSize: '11px' 49716 }, 49717 x: 32, 49718 y: 33 49719 }, 49720 tooltip: { 49721 enabled: true, 49722 useHTML: true, 49723 formatter: function () { 49724 if (this.point.series.name.charAt(0) === 'H') { // belongs to either the "Has" ... goals or standards series 49725 const symbol = this.point.series.legendItem.symbol.element.outerHTML 49726 .replace(/rx="[^"]*"/, '') 49727 .replace(/ry="[^"]*"/, '') 49728 .replace(/data-z-index="[^"]*"/, ''); 49729 49730 return "<b>" + this.point.name + "</b></br><svg width=\'20\' height=\'15\'>" + symbol + "</svg>" + this.point.series.name; 49731 } 49732 else { 49733 return '<b>' + this.point.name + '</b></br>Does not have renewable portfolio standandards or goals'; 49734 } 49735 }, 49736 style: { 49737 textAlign: 'left' 49738 } 49739 }, 49740 plotOptions: { 49741 map: { 49742 events: { 49743 legendItemClick: function (event) { 49744 event.preventDefault(); 49745 49746 return false; 49747 } 49748 }, 49749 dataLabels: { 49750 enabled: true, 49751 allowOverlap: true, 49752 format: '{point.code}', 49753 style: { 49754 fontSize: '10px' 49755 } 49756 } 49757 } 49758 }, 49759 legend: { 49760 enabled: true 49761 }, 49762 responsive: { 49763 rules: [{ 49764 condition: { 49765 maxWidth: 321 49766 }, 49767 49768 chartOptions: { 49769 chart: { 49770 height: 330 49771 }, 49772 title: { 49773 margin: 10 49774 } 49775 } 49776 }, 49777 { 49778 condition: { 49779 minWidth: 322, 49780 maxWidth: 400 49781 }, 49782 49783 chartOptions: { 49784 chart: { 49785 height: 350 49786 }, 49787 title: { 49788 margin: 10 49789 } 49790 } 49791 }, 49792 { 49793 condition: { 49794 minWidth: 401, 49795 maxWidth: 450 49796 }, 49797 49798 chartOptions: { 49799 chart: { 49800 height: 380 49801 }, 49802 title: { 49803 margin: 10 49804 } 49805 } 49806 }, 49807 { 49808 condition: { 49809 minWidth: 451 49810 }, 49811 49812 chartOptions: { 49813 chart: { 49814 height: '65%' 49815 }, 49816 title: { 49817 margin: 15 49818 } 49819 } 49820 }] 49821 }, 49822 data: { 49823 csvURL: appPath + '/renewable-sources/charts/' + elementId + '.csv', 49824 startRow: 4, 49825 firstRowAsNames: false, 49826 complete: function (options) { 49827 var point; 49828 for (var i = 0; i < options.series[0].data.length; i++) { 49829 point = options.series[0].data[i]; 49830 if (point.value === 'standards') { 49831 seriesOptions[0].data.push({ 49832 code: point.name 49833 }); 49834 } 49835 else if (point.value === 'goals') { 49836 seriesOptions[1].data.push({ 49837 code: point.name 49838 }); 49839 } 49840 else { 49841 seriesOptions[2].data.push({ 49842 code: point.name 49843 }); 49844 } 49845 } 49846 49847 // replace series options parsed by Highcharts with our own options definition 49848 options.series = seriesOptions; 49849 49850 }, 49851 beforeParse: function (csv) { 49852 var parsedCSV = csvParser(csv); 49853 this.chart.title.update({ text: parsedCSV[0][0] }); 49854 this.chart.caption.update({ text: parsedCSV[1][0] }); 49855 seriesOptions[0].name = parsedCSV[2][0]; 49856 seriesOptions[1].name = parsedCSV[2][1]; 49857 49858 this.chart.update( 49859 { 49860 accessibility: { 49861 description: parsedCSV[3][0] 49862 }, 49863 exporting: { 49864 allowHTML: true, 49865 menuItemDefinitions: 49866 { 49867 label: { 49868 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 49869 } 49870 }, 49871 buttons: { 49872 contextButton: { 49873 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 49874 } 49875 } 49876 } 49877 } 49878 ); 49879 return csv; 49880 } 49881 } 49882 }); 49883 } 49884} 49885 49886},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],267:[function(require,module,exports){ 49887const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 49888const csvParser = require('../../includes/csvParser'); 49889 49890module.exports = function (Highcharts, appPath) {
49891 const elementId = 'renewable-energy-consumption-major-sources'; 49892 49893 if ($('#' + elementId).length > 0) { 49894 Highcharts.chart(elementId, { 49895 chart: { 49896 type: 'column', 49897 spacingBottom: 25, 49898 events: { 49899 load: creditsSizeAndPosition, 49900 redraw: creditsSizeAndPosition 49901 } 49902 }, 49903 credits: { 49904 enabled: true, 49905 href: null, 49906 style: { 49907 cursor: 'normal' 49908 } 49909 }, 49910 data: { 49911 csvURL: appPath + '/renewable-sources/charts/' + elementId + '.csv', 49912 startRow: 5, 49913 firstRowAsNames: true, 49914 beforeParse: function (csv) { 49915 var parsedCSV = csvParser(csv); 49916 this.chart.title.update({ text: parsedCSV[0][0] }); 49917 this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } }); 49918 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 49919 this.chart.update( 49920 { 49921 accessibility: { 49922 description: parsedCSV[3][0], 49923 }, 49924 exporting: { 49925 menuItemDefinitions: 49926 { 49927 label: { 49928 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 49929 } 49930 }, 49931 buttons: { 49932 contextButton: { 49933 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 49934 } 49935 } 49936 } 49937 } 49938 ); 49939 return csv; 49940 } 49941 }, 49942 colors: [Highcharts.eiaColors.purple, Highcharts.eiaColors.lightGrey, Highcharts.eiaColors.red, Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.lightBlue, Highcharts.eiaColors.green], 49943 xAxis: { 49944 labels: { 49945 format: "{value}", 49946 }, 49947 type: 'category', 49948 tickWidth: 0 49949 }, 49950 yAxis: { 49951 max: 100, 49952 tickInterval: 10, 49953 labels: { 49954 format: "{value}%" 49955 }, 49956 reversedStacks: false 49957 }, 49958 plotOptions: { 49959 column: { 49960 stacking: 'normal' 49961 } 49962 }, 49963 tooltip: { 49964 formatter: function () { 49965 return '<b>' + this.series.name + '</b><br/>' + '<b>year:</b> ' + this.key + '<br/><b>percentage:</b> ' + this.y.toFixed(2) + '%'; 49966 } 49967 }, 49968 responsive: { 49969 rules: [{ 49970 condition: { 49971 maxWidth: 450 49972 }, 49973 chartOptions: { 49974 chart: { 49975 height: 450 49976 }, 49977 title: { 49978 margin: 15 49979 } 49980 } 49981 }, 49982 { 49983 condition: { 49984 minWidth: 451 49985 }, 49986 49987 chartOptions: { 49988 chart: { 49989 height: '65%' 49990 }, 49991 title: { 49992 margin: 20 49993 } 49994 } 49995 }] 49996 } 49997 }); 49998 } 49999}; 50000 50001},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],268:[function(require,module,exports){ 50002const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 50003const csvParser = require('../../includes/csvParser'); 50004 50005 50006module.exports = function (Highcharts, map, appPath) { 50007 50008 const elementId = 'small-scale-photovoltaic-generation'; 50009 let units = ''; 50010 let mapData = Highcharts.geojson(map, 'map'); 50011 50012 // Our own options definition as two different series, will populate the data in the complete callback 50013 var seriesOptions = [ 50014 { 50015 id: "rank1", 50016 type: "map", 50017 mapData : mapData, 50018 allAreas: false, 50019 keys: ["postal-code"], 50020 joinBy: ['hc-a2', 'code'], 50021 data: [], 50022 mapData: mapData, 50023 borderWidth: 0.5, 50024 states: { 50025 hover: { 50026 brightness: 0, 50027 borderWidth: 1, 50028 borderColor: Highcharts.eiaColors.darkGrey 50029 } 50030 }, 50031 50032 dataLabels: { 50033 enabled: true, 50034 formatter: function () { 50035 if (this.point.properties) { 50036 return this.point.properties['hc-a2']; 50037 } 50038 return this.point.options.ucName; 50039 } 50040 }, 50041 tooltip: { 50042 valueSuffix: '' 50043 } 50044 }, 50045 { 50046 type: 'mapline', 50047 data: Highcharts.geojson(map, 'mapline'), 50048 color: 'silver', 50049 nullColor : 'silver', 50050 lineWidth : 1, 50051 showInLegend: false, 50052 enableMouseTracking: false, 50053 states : { 50054 inactive : { 50055 enabled : false 50056 } 50057 } 50058 } 50059 ]; 50060 50061 if ($('#' + elementId).length > 0) { 50062 Highcharts.mapChart(elementId, { 50063 chart: { 50064 map: map, 50065 spacingBottom: 25, 50066 events: { 50067 load: creditsSizeAndPosition, 50068 redraw: creditsSizeAndPosition 50069 } 50070 }, 50071 mapView : { 50072 insetOptions : { 50073 borderWidth : 1, 50074 borderColor : 'silver' 50075 } 50076 }, 50077 credits: { 50078 enabled: false, 50079 href: null, 50080 style: { 50081 cursor: 'normal' 50082 } 50083 }, 50084 caption: { 50085 verticalAlign: 'bottom', 50086 useHTML: true, 50087 margin: 0, 50088 style: { 50089 color: '#888', 50090 fontSize: '11px' 50091 }, 50092 x: 32, 50093 y: 33 50094 }, 50095 tooltip: { 50096 enabled: true, 50097 useHTML: true, 50098 formatter: function () { 50099 var html = (this.point.name && this.point.nameCode) ? '<b>' + this.point.name + '</b><br/>' + this.point.nameCode : ''; 50100 if (html !== '') 50101 return html 50102 } 50103 }, 50104 data: { 50105 csvURL: appPath + '/solar/charts/' + elementId + '.csv', 50106 startRow: 5, 50107 firstRowAsNames: false, 50108 complete: function (options) { 50109 var point; 50110 var i; 50111 50112 for (i = 0; i < options.series[0].data.length; i++) { 50113 50114 point = options.series[0].data[i]; 50115 var pointValueString = Highcharts.numberFormat(point.value, 4) + ' ' + units; 50116 50117 if (pointValueString) { 50118 seriesOptions[0].data.push({ 50119 code: point.name, 50120 nameCode: "<span>" + pointValueString + "</span>", 50121 value: point.value 50122 });
50123 } 50124 50125 } 50126 50127 // replace series options parsed by Highcharts with our own options definition 50128 options.series = seriesOptions; 50129 50130 }, 50131 beforeParse: function (csv) { 50132 50133 var parsedCSV = csvParser(csv); 50134 units = parsedCSV[1][0]; 50135 this.chart.title.update({ text: parsedCSV[0][0] }); 50136 this.chart.legend.update({title: { text: parsedCSV[1][0] }}); 50137 this.chart.caption.update({ text: parsedCSV[2][0] + '<br/>' + parsedCSV[3][0] }); 50138 50139 50140 this.chart.update( 50141 { 50142 legend: { 50143 title: { 50144 text: parsedCSV[1][0] 50145 }, 50146 }, 50147 accessibility: { 50148 description: parsedCSV[4][0] 50149 }, 50150 exporting: { 50151 allowHTML: true, 50152 menuItemDefinitions: 50153 { 50154 label: { 50155 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 50156 } 50157 }, 50158 buttons: { 50159 contextButton: { 50160 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 50161 } 50162 } 50163 } 50164 } 50165 ); 50166 return csv; 50167 } 50168 }, 50169 colorAxis: { 50170 dataClasses: [{
50171 color: '#FFF4CC', 50172 to: 0.1 50173 }, { 50174 color: '#FFDD67', 50175 from: 0.1, 50176 to: 1.0 50177 }, { 50178 color: Highcharts.eiaColors.yellow, 50179 from: 1.0, 50180 to: 2.0 50181 }, { 50182 color: '#EFA26D', 50183 from: 2.0, 50184 to: 10 50185 }, { 50186 color: '#E4640B', 50187 from: 10 50188 }] 50189 }, 50190 legend: { 50191 align: 'center', 50192 backgroundColor: 'white', 50193 borderColor: 'white', 50194 layout: 'horizontal', 50195 symbolPadding: 10, 50196 symbolRadius: 0, 50197 valueDecimals: 2, 50198 labelFormatter: function () { 50199 50200 if (this.to === 0.1) { 50201 50202 return '< 0.1'; 50203 } 50204 else if (this.from >= 10) { 50205 return ' > ' + Highcharts.numberFormat(this.from, 1); 50206 } 50207 else { 50208 return Highcharts.numberFormat(this.from, 1) + ' - ' + Highcharts.numberFormat((this.to - 0.1), 1); 50209 } 50210 } 50211 }, 50212 plotOptions: { 50213 map: { 50214 dataLabels: { 50215 style: { 50216 fontSize: '6.8px' 50217 } 50218 } 50219 } 50220 }, 50221 responsive: { 50222 rules: [{ 50223 condition: { 50224 maxWidth: 321 50225 }, 50226 50227 chartOptions: { 50228 chart: { 50229 height: 380 50230 }, 50231 title: { 50232 margin: 5 50233 }, 50234 plotOptions: { 50235 map: { 50236 dataLabels: { 50237 style: { 50238 fontSize: '7px', 50239 lineHeight: 7 50240 } 50241 } 50242 } 50243 } 50244 } 50245 }, 50246 { 50247 condition: { 50248 minWidth: 322, 50249 maxWidth: 400 50250 }, 50251 50252 chartOptions: { 50253 chart: { 50254 height: 370 50255 }, 50256 title: { 50257 margin: 5 50258 }, 50259 plotOptions: { 50260 map: { 50261 dataLabels: { 50262 style: { 50263 fontSize: '8px', 50264 lineHeight: 8 50265 } 50266 } 50267 } 50268 } 50269 } 50270 }, 50271 { 50272 condition: { 50273 minWidth: 401, 50274 maxWidth: 450 50275 }, 50276 50277 chartOptions: { 50278 chart: { 50279 height: 400 50280 }, 50281 title: { 50282 margin: 5 50283 }, 50284 plotOptions: { 50285 map: { 50286 dataLabels: { 50287 style: { 50288 fontSize: '8px', 50289 lineHeight: 8 50290 } 50291 } 50292 } 50293 } 50294 } 50295 }, 50296 { 50297 condition: { 50298 minWidth: 451 50299 }, 50300 50301 chartOptions: { 50302 chart: { 50303 height: '65%' 50304 }, 50305 title: { 50306 margin: 15 50307 }, 50308 plotOptions: { 50309 map: { 50310 dataLabels: { 50311 style: { 50312 fontSize: '16px' 50313 } 50314 } 50315 } 50316 } 50317 } 50318 }] 50319 } 50320 }); 50321 } 50322}; 50323 50324},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],269:[function(require,module,exports){ 50325const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 50326const csvParser = require('../../includes/csvParser'); 50327 50328 50329module.exports = function (Highcharts, map, appPath) { 50330 50331 const elementId = 'utility-scale-generation'; 50332 let units = ''; 50333 let mapData = Highcharts.geojson(map, 'map'); 50334 50335 // Our own options definition as two different series, will populate the data in the complete callback 50336 var seriesOptions = [ 50337 { 50338 id: "rank1", 50339 type: "map", 50340 mapData : mapData, 50341 allAreas: false, 50342 keys: ["postal-code"], 50343 joinBy: ['hc-a2', 'code'], 50344 data: [], 50345 mapData: mapData, 50346 borderWidth: 0.5, 50347 states: { 50348 hover: { 50349 brightness: 0, 50350 borderWidth: 1, 50351 borderColor: Highcharts.eiaColors.darkGrey 50352 } 50353 }, 50354 color: '#ffffff', 50355 dataLabels: { 50356 enabled: true, 50357 formatter: function () { 50358 if (this.point.properties) { 50359 return this.point.properties['hc-a2']; 50360 } 50361 return this.point.options.ucName; 50362 } 50363 }, 50364 tooltip: { 50365 valueSuffix: '' 50366 } 50367 }, 50368 { 50369 type: 'mapline', 50370 data: Highcharts.geojson(map, 'mapline'), 50371 color: 'silver', 50372 nullColor : 'silver', 50373 lineWidth : 1, 50374 showInLegend: false, 50375 enableMouseTracking: false, 50376 states : { 50377 inactive : { 50378 enabled : false 50379 } 50380 } 50381 } 50382 ]; 50383 50384 if ($('#' + elementId).length > 0) { 50385 Highcharts.mapChart(elementId, { 50386 chart: { 50387 map: map, 50388 spacingBottom: 25, 50389 events: { 50390 load: creditsSizeAndPosition, 50391 redraw: creditsSizeAndPosition 50392 } 50393 }, 50394 mapView : { 50395 insetOptions : { 50396 borderWidth : 1, 50397 borderColor : 'silver' 50398 } 50399 }, 50400 credits: { 50401 enabled: false, 50402 href: null, 50403 style: { 50404 cursor: 'normal' 50405 } 50406 }, 50407 caption: { 50408 verticalAlign: 'bottom', 50409 useHTML: true, 50410 margin: 0, 50411 style: { 50412 color: '#888', 50413 fontSize: '11px' 50414 }, 50415 x: 32, 50416 y: 33 50417 }, 50418 tooltip: { 50419 enabled: true, 50420 useHTML: true, 50421 formatter: function () { 50422 var html = (this.point.name && this.point.nameCode) ? '<b>' + this.point.name + '</b><br/>' + this.point.nameCode : ''; 50423 if (html !== '') 50424 return html 50425 } 50426 }, 50427 data: { 50428 csvURL: appPath + '/solar/charts/' + elementId + '.csv', 50429 startRow: 5, 50430 firstRowAsNames: false, 50431 complete: function (options) { 50432 var point; 50433 var i; 50434 50435 for (i = 0; i < options.series[0].data.length; i++) { 50436 50437 point = options.series[0].data[i]; 50438 var pointValueString = Highcharts.numberFormat(point.value, 4) + ' ' + units; 50439 50440 if (pointValueString) { 50441 seriesOptions[0].data.push({ 50442 code: point.name, 50443 nameCode: "<span>" + pointValueString + "</span>", 50444 value: point.value 50445 });
50446 } 50447 50448 } 50449 50450 // replace series options parsed by Highcharts with our own options definition 50451 options.series = seriesOptions; 50452 50453 }, 50454 beforeParse: function (csv) { 50455 50456 var parsedCSV = csvParser(csv); 50457 units = parsedCSV[1][0]; 50458 this.chart.title.update({ text: parsedCSV[0][0] }); 50459 this.chart.legend.update({title: { text: parsedCSV[1][0] }}); 50460 this.chart.caption.update({ text: parsedCSV[2][0] + '<br/>' + parsedCSV[3][0] }); 50461 50462 50463 this.chart.update( 50464 { 50465 legend: { 50466 title: { 50467 text: parsedCSV[1][0] 50468 }, 50469 }, 50470 accessibility: { 50471 description: parsedCSV[4][0] 50472 }, 50473 exporting: { 50474 allowHTML: true, 50475 menuItemDefinitions: 50476 { 50477 label: { 50478 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 50479 } 50480 }, 50481 buttons: { 50482 contextButton: { 50483 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 50484 } 50485 } 50486 } 50487 } 50488 ); 50489 return csv; 50490 } 50491 }, 50492 colorAxis: { 50493 dataClasses: [{
50494 color: '#FFFFFF', 50495 from: 0, 50496 to: 0 50497 },{ 50498 color: '#FFF4CC', 50499 from: 0.0001, 50500 to: 0.1 50501 }, { 50502 color: '#FFDD67', 50503 from: 0.1, 50504 to: 1.0 50505 }, { 50506 color: Highcharts.eiaColors.yellow, 50507 from: 1.0, 50508 to: 5.0 50509 }, { 50510 color: '#EFA26D', 50511 from: 5.0, 50512 to: 10.0 50513 }, { 50514 color: '#E4640B', 50515 from: 10, 50516 to: 50 50517 }] 50518 }, 50519 legend: { 50520 align: 'center', 50521 backgroundColor: 'white', 50522 borderColor: 'white', 50523 layout: 'horizontal', 50524 symbolPadding: 10, 50525 symbolRadius: 0, 50526 valueDecimals: 2, 50527 labelFormatter: function () { 50528 if (this.from === 0) { 50529 $(this.legendItem.symbol.element).attr({ 50530 strokeWidth: 1, 50531 stroke: '#e7e7e7', 50532 width: 11.5, 50533 height: 11.5, 50534 x: 2.5 50535 }); 50536 return '= 0'; 50537 } 50538 else if (this.from === 0.0001) { 50539 50540 return '< 0.1'; 50541 } 50542 else if (this.from === 10) { 50543 return Highcharts.numberFormat(this.from, 1) + ' - ' + Highcharts.numberFormat(this.to, 1); 50544 } 50545 else { 50546 return Highcharts.numberFormat(this.from, 1) + ' - ' + Highcharts.numberFormat((this.to - 0.1), 1); 50547 } 50548 } 50549 }, 50550 plotOptions: { 50551 map: { 50552 dataLabels: { 50553 style: { 50554 fontSize: '6.8px' 50555 } 50556 } 50557 } 50558 }, 50559 responsive: { 50560 rules: [{ 50561 condition: { 50562 maxWidth: 321 50563 }, 50564 50565 chartOptions: { 50566 chart: { 50567 height: 380 50568 }, 50569 title: { 50570 margin: 20 50571 }, 50572 plotOptions: { 50573 map: { 50574 dataLabels: { 50575 style: { 50576 fontSize: '7px', 50577 lineHeight: 7 50578 } 50579 } 50580 } 50581 } 50582 } 50583 }, 50584 { 50585 condition: { 50586 minWidth: 322, 50587 maxWidth: 400 50588 }, 50589 50590 chartOptions: { 50591 chart: { 50592 height: 370 50593 }, 50594 title: { 50595 margin: 5 50596 }, 50597 plotOptions: { 50598 map: { 50599 dataLabels: { 50600 style: { 50601 fontSize: '8px', 50602 lineHeight: 8 50603 } 50604 } 50605 } 50606 } 50607 } 50608 }, 50609 { 50610 condition: { 50611 minWidth: 401, 50612 maxWidth: 450 50613 }, 50614 50615 chartOptions: { 50616 chart: { 50617 height: 400 50618 }, 50619 title: { 50620 margin: 5 50621 }, 50622 plotOptions: { 50623 map: { 50624 dataLabels: { 50625 style: { 50626 fontSize: '8px', 50627 lineHeight: 8 50628 } 50629 } 50630 } 50631 } 50632 } 50633 }, 50634 { 50635 condition: { 50636 minWidth: 451 50637 }, 50638 50639 chartOptions: { 50640 chart: { 50641 height: '65%' 50642 }, 50643 title: { 50644 margin: 15 50645 }, 50646 plotOptions: { 50647 map: { 50648 dataLabels: { 50649 style: { 50650 fontSize: '16px' 50651 } 50652 } 50653 } 50654 } 50655 } 50656 }] 50657 } 50658 }); 50659 } 50660}; 50661 50662},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],270:[function(require,module,exports){ 50663const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 50664const csvParser = require('../../includes/csvParser'); 50665 50666module.exports = function (Highcharts, appPath) { 50667 const elementId = 'energy-net-imports-by-major-sources-totals'; 50668 var units = ''; 50669 50670 if ($('#' + elementId).length > 0) { 50671 Highcharts.chart(elementId, { 50672 chart: { 50673 type: 'line', 50674 spacingBottom: 25, 50675 events: { 50676 load: creditsSizeAndPosition, 50677 redraw: creditsSizeAndPosition 50678 } 50679 }, 50680 credits: { 50681 enabled: true, 50682 href: null, 50683 style: { 50684 cursor: 'normal' 50685 } 50686 }, 50687 data: { 50688 csvURL: appPath + '/us-energy-facts/charts/' + elementId + '.csv', 50689 startRow: 5, 50690 firstRowAsNames: true, 50691 beforeParse: function (csv) { 50692 var parsedCSV = csvParser(csv); 50693 this.chart.title.update({ text: parsedCSV[0][0] }); 50694 this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } }); 50695 units = parsedCSV[1][0]; 50696 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 50697 this.chart.update( 50698 { 50699 accessibility: { 50700 description: parsedCSV[4][0], 50701 }, 50702 exporting: { 50703 menuItemDefinitions: 50704 { 50705 label: { 50706 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 50707 } 50708 }, 50709 buttons: { 50710 contextButton: { 50711 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 50712 } 50713 } 50714 } 50715 } 50716 ); 50717 return csv; 50718 } 50719 }, 50720 xAxis: { 50721 labels: { 50722 format: "{value}" 50723 }, 50724 tickInterval: 5, 50725 }, 50726 colors: [Highcharts.eiaColors.brown, Highcharts.eiaColors.red, Highcharts.eiaColors.blue, Highcharts.eiaColors.darkGrey, Highcharts.eiaColors.yellow], 50727 yAxis: { 50728 labels: { 50729 format: "{value}" 50730 }, 50731 min: -10, 50732 tickInterval: 5 50733 }, 50734 plotOptions: { 50735 line: { 50736 } 50737 }, 50738 tooltip: { 50739 shared: true, 50740 useHTML: true, 50741 formatter: function () { 50742 var html = '<b>' + this.x + '</b><br/>'; 50743 this.points.filter(function (value) { 50744 html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25AC\u2009\u2009' + '</span><b>' + value.series.name + ':</b> ' + value.y.toFixed(2).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",") + ' ' + units + '<br/>'; 50745 }); 50746 return html; 50747 } 50748 }, 50749 responsive: { 50750 rules: [{ 50751 condition: { 50752 maxWidth: 450 50753 }, 50754 chartOptions: { 50755 chart: { 50756 height: 450 50757 } 50758 } 50759 }, 50760 { 50761 condition: { 50762 minWidth: 451 50763 }, 50764 50765 chartOptions: { 50766 chart: { 50767 height: '65%' 50768 } 50769 } 50770 }] 50771 } 50772 }); 50773 } 50774}; 50775 50776},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],271:[function(require,module,exports){ 50777const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 50778const csvParser = require('../../includes/csvParser'); 50779 50780module.exports = function (Highcharts, appPath) { 50781 const elementId = 'import-exports-primary-energy-overview'; 50782 var units = ''; 50783 50784 if ($('#' + elementId).length > 0) { 50785 Highcharts.chart(elementId, { 50786 chart: { 50787 type: 'line', 50788 spacingBottom: 25, 50789 events: { 50790 load: creditsSizeAndPosition, 50791 redraw: creditsSizeAndPosition 50792 } 50793 }, 50794 credits: { 50795 enabled: true, 50796 href: null, 50797 style: { 50798 cursor: 'normal' 50799 } 50800 }, 50801 data: { 50802 csvURL: appPath + '/us-energy-facts/charts/' + elementId + '.csv', 50803 startRow: 5, 50804 firstRowAsNames: true, 50805 beforeParse: function (csv) { 50806 var parsedCSV = csvParser(csv); 50807 this.chart.title.update({ text: parsedCSV[0][0] }); 50808 this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } }); 50809 units = parsedCSV[1][0]; 50810 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 50811 this.chart.update( 50812 { 50813 accessibility: { 50814 description: parsedCSV[4][0], 50815 }, 50816 exporting: { 50817 menuItemDefinitions: 50818 { 50819 label: { 50820 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 50821 } 50822 }, 50823 buttons: { 50824 contextButton: { 50825 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 50826 } 50827 } 50828 } 50829 } 50830 ); 50831 return csv; 50832 } 50833 }, 50834 colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.green, Highcharts.eiaColors.red, Highcharts.eiaColors.yellow], 50835 xAxis: { 50836 labels: { 50837 format: "{value}" 50838 }, 50839 tickInterval: 6, 50840 }, 50841 yAxis: { 50842 labels: { 50843 format: "{value}" 50844 }, 50845 max: 105, 50846 min: 0, 50847 tickInterval: 15 50848 }, 50849 plotOptions: { 50850 line: { 50851 } 50852 }, 50853 tooltip: { 50854 shared: true, 50855 useHTML: true, 50856 formatter: function () { 50857 var html = '<b>' + this.x + '</b><br/>'; 50858 this.points.filter(function (value) { 50859 html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25AC\u2009\u2009' + '</span><b>' + value.series.name + ':</b> ' + value.y.toFixed(2).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",") + ' ' + units + '<br/>'; 50860 }); 50861 return html; 50862 } 50863 }, 50864 responsive: { 50865 rules: [{ 50866 condition: { 50867 maxWidth: 450 50868 }, 50869 chartOptions: { 50870 chart: { 50871 height: 450 50872 } 50873 } 50874 }, 50875 { 50876 condition: { 50877 minWidth: 451 50878 }, 50879 50880 chartOptions: { 50881 chart: { 50882 height: '65%' 50883 } 50884 } 50885 }] 50886 } 50887 }); 50888 } 50889}; 50890 50891},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],272:[function(require,module,exports){ 50892const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 50893const csvParser = require('../../includes/csvParser'); 50894 50895module.exports = function (Highcharts, appPath) { 50896 const elementId = 'primary-consumption-by-major-source'; 50897 var units = ''; 50898 50899 if ($('#' + elementId).length > 0) { 50900 Highcharts.chart(elementId, { 50901 chart: { 50902 type: 'area', 50903 spacingBottom: 25, 50904 events: { 50905 load: creditsSizeAndPosition, 50906 redraw: creditsSizeAndPosition 50907 } 50908 }, 50909 credits: { 50910 enabled: true, 50911 href: null, 50912 style: { 50913 cursor: 'normal' 50914 } 50915 }, 50916 title: { 50917 text: '' 50918 }, 50919 data: { 50920 csvURL: appPath + '/us-energy-facts/charts/' + elementId + '.csv', 50921 startRow: 5, 50922 firstRowAsNames: true, 50923 beforeParse: function (csv) { 50924 var parsedCSV = csvParser(csv); 50925 this.chart.title.update({ text: parsedCSV[0][0] }); 50926 units = parsedCSV[1][0]; 50927 this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } }); 50928 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 50929 this.chart.update( 50930 { 50931 accessibility: { 50932 description: parsedCSV[4][0], 50933 }, 50934 exporting: { 50935 menuItemDefinitions: 50936 { 50937 label: { 50938 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 50939 } 50940 }, 50941 buttons: { 50942 contextButton: { 50943 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 50944 } 50945 } 50946 } 50947 } 50948 ); 50949 return csv; 50950 } 50951 50952 }, 50953 colors: [Highcharts.eiaColors.darkBlue, Highcharts.eiaColors.blue, Highcharts.eiaColors.red, Highcharts.eiaColors.brown, Highcharts.eiaColors.green], 50954 xAxis: { 50955 labels: { 50956 format: "{value}", 50957 }, 50958 tickInterval: 5 50959 }, 50960 yAxis: { 50961 labels: { 50962 format: "{value:,.0f}" 50963 }, 50964 tickInterval: 10, 50965 reversedStacks:false, 50966 maxPadding: 0 50967 }, 50968 legend: { 50969 reversed: true 50970 }, 50971 plotOptions: { 50972 area: { 50973 stacking: 'normal' 50974 } 50975 }, 50976 tooltip: { 50977 useHTML: true, 50978 shared: true, 50979 formatter: function () { 50980 var html = '<b>' + this.x + '</b><br/>'; 50981 this.points.filter(function (value) { 50982 html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25CF\u2009\u2009' + '</span><b>' + value.series.name + ':</b> ' + value.y.toFixed(2) + ' ' + units + '<br/>'; 50983 }); 50984 return html; 50985 } 50986 }, 50987 responsive: { 50988 rules: [{ 50989 condition: { 50990 maxWidth: 450 50991 }, 50992 chartOptions: { 50993 chart: { 50994 height: 450 50995 } 50996 } 50997 }, 50998 { 50999 condition: { 51000 minWidth: 451 51001 }, 51002 51003
51003 chartOptions: { 51004 chart: { 51005 height: '65%' 51006 } 51007 } 51008 }] 51009 } 51010 }); 51011 } 51012}; 51013 51014},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],273:[function(require,module,exports){ 51015const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 51016const csvParser = require('../../includes/csvParser'); 51017 51018module.exports = function (Highcharts, appPath) { 51019 const elementId = 'primary-energy-production-by-major-source-history'; 51020 var units = ''; 51021 51022 if ($('#' + elementId).length > 0) { 51023 Highcharts.chart(elementId, { 51024 chart: { 51025 type: 'area', 51026 spacingBottom: 25, 51027 events: { 51028 load: creditsSizeAndPosition, 51029 redraw: creditsSizeAndPosition 51030 } 51031 }, 51032 credits: { 51033 enabled: true, 51034 href: null, 51035 style: { 51036 cursor: 'normal' 51037 } 51038 }, 51039 title: { 51040 text: '' 51041 }, 51042 data: { 51043 csvURL: appPath + '/us-energy-facts/charts/' + elementId + '.csv', 51044 startRow: 5, 51045 firstRowAsNames: true, 51046 beforeParse: function (csv) { 51047 var parsedCSV = csvParser(csv); 51048 this.chart.title.update({ text: parsedCSV[0][0] }); 51049 units = parsedCSV[1][0]; 51050 this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } }); 51051 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 51052 this.chart.update( 51053 { 51054 accessibility: { 51055 description: parsedCSV[4][0], 51056 }, 51057 exporting: { 51058 menuItemDefinitions: 51059 { 51060 label: { 51061 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 51062 } 51063 }, 51064 buttons: { 51065 contextButton: { 51066 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 51067 } 51068 } 51069 } 51070 } 51071 ); 51072 return csv; 51073 } 51074 51075 }, 51076 colors: [Highcharts.eiaColors.darkBlue, Highcharts.eiaColors.blue, Highcharts.eiaColors.red,Highcharts.eiaColors.lightRed, Highcharts.eiaColors.brown, Highcharts.eiaColors.green], 51077 xAxis: { 51078 labels: { 51079 format: "{value}", 51080 }, 51081 tickInterval: 5 51082 }, 51083 yAxis: { 51084 labels: { 51085 format: "{value:,.0f}" 51086 }, 51087 tickInterval: 10, 51088 reversedStacks:false, 51089 maxPadding: 0 51090 }, 51091 legend: { 51092 reversed: true 51093 }, 51094 plotOptions: { 51095 area: { 51096 stacking: 'normal' 51097 } 51098 }, 51099 tooltip: { 51100 useHTML: true, 51101 shared: true, 51102 formatter: function () { 51103 var html = '<b>' + this.x + '</b><br/>'; 51104 this.points.filter(function (value) { 51105 html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25CF\u2009\u2009' + '</span><b>' + value.series.name + ':</b> ' + value.y.toFixed(2) + ' ' + units + '<br/>'; 51106 }); 51107 return html; 51108 } 51109 }, 51110 responsive: { 51111 rules: [{ 51112 condition: { 51113 maxWidth: 450 51114 }, 51115 chartOptions: { 51116 chart: { 51117 height: 450 51118 } 51119 } 51120 }, 51121 { 51122 condition: { 51123 minWidth: 451 51124 }, 51125 51126 chartOptions: { 51127 chart: { 51128 height: '65%' 51129 } 51130 } 51131 }] 51132 } 51133 }); 51134 } 51135}; 51136 51137},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],274:[function(require,module,exports){ 51138const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 51139const csvParser = require('../../includes/csvParser'); 51140 51141module.exports = function (Highcharts, appPath) { 51142 const elementId = 'primary-energy-production-by-major-sources'; 51143 let units = ''; 51144 if ($('#' + elementId).length > 0) { 51145 Highcharts.chart(elementId, { 51146 chart: { 51147 type: 'column', 51148 spacingBottom: 25, 51149 events: { 51150 load: creditsSizeAndPosition, 51151 redraw: creditsSizeAndPosition 51152 } 51153 }, 51154 credits: { 51155 enabled: true, 51156 href: null, 51157 style: { 51158 cursor: 'normal' 51159 } 51160 }, 51161 data: { 51162 csvURL: appPath + '/us-energy-facts/charts/' + elementId + '.csv', 51163 startRow: 5, 51164 firstRowAsNames: false, 51165 51166 beforeParse: function (csv) { 51167 var parsedCSV = csvParser(csv); 51168 units = parsedCSV[1][0]; 51169 this.chart.title.update({ text: parsedCSV[0][0] }); 51170 this.chart.yAxis[0].update({ title: { text: units } }); 51171 /*this.chart.xAxis[0].update({ categories: parsedCSV[5] });*/ 51172 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 51173 this.chart.update( 51174 { 51175 accessibility: { 51176 description: parsedCSV[4][0], 51177 }, 51178 exporting: { 51179 menuItemDefinitions: 51180 { 51181 label: { 51182 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 51183 } 51184 }, 51185 buttons: { 51186 contextButton: { 51187 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 51188 } 51189 } 51190 } 51191 } 51192 ); 51193 return csv; 51194 } 51195 }, 51196 colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.red, Highcharts.eiaColors.darkBlue, Highcharts.eiaColors.brown, Highcharts.eiaColors.lightOrange, Highcharts.eiaColors.green, Highcharts.eiaColors.purple, Highcharts.eiaColors.lightBlue, Highcharts.eiaColors.yellow], 51197 xAxis: { 51198 labels: { 51199 enabled: true 51200 } 51201 }, 51202 plotOptions: { 51203 column: { 51204 dataLabels: { 51205 enabled: true, 51206 format: '{point.y:.1f}', 51207 }, 51208 grouping: false, 51209 colorByPoint: true 51210 } 51211 }, 51212 yAxis: { 51213 tickInterval: 5, 51214 labels: { 51215 format: '{value}' 51216 } 51217 }, 51218 tooltip: { 51219 formatter: function () { 51220 return '<b>' + this.key + '</b><br/>' + this.y.toFixed(1) + ' ' + units; 51221 } 51222 }, 51223 legend: { 51224 enabled: false 51225 }, 51226 responsive: { 51227 rules: [{ 51228 condition: { 51229 maxWidth: 450 51230 }, 51231 chartOptions: { 51232 chart: { 51233 height: 450 51234 } 51235 } 51236 }, 51237 { 51238 condition: { 51239 minWidth: 451 51240 }, 51241 51242 chartOptions: { 51243 chart: { 51244 height: '65%' 51245 } 51246 } 51247 }] 51248 } 51249 }); 51250 } 51251}; 51252 51253},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],275:[function(require,module,exports){ 51254 51255module.exports = function (Highcharts, map) { 51256 51257 const elementId = 'state-energy-data-system-map'; 51258 let mapData = Highcharts.geojson(map, 'map'); 51259 51260 if ($('#' + elementId).length > 0) { 51261 Highcharts.mapChart(elementId, { 51262 chart: { 51263 map: map, 51264 spacingBottom: 40 51265 }, 51266 mapView : { 51267 insetOptions : { 51268 borderWidth : 1, 51269 borderColor : 'silver' 51270 } 51271 }, 51272 credits: { 51273 enabled: true, 51274 href: null, 51275 text: 'Data source: U.S. Energy Information Administration', 51276 style: { 51277 cursor: 'normal' 51278 } 51279 }, 51280 title:{ 51281 text:'Click a state for data from the State Energy Data System', 51282 margin: 15 51283 }, 51284 accessibility: { 51285 description: 'An interactive map providing links to state data from the State Energy Data System', 51286 }, 51287 tooltip: { 51288 enabled: true, 51289 useHTML: true, 51290 formatter: function () { 51291 return '<b/>'+this.point.name + '</b>'; 51292 } 51293 }, 51294 exporting:{ 51295 enabled: false 51296 }, 51297 series:[ 51298 { 51299 id: "states", 51300 type: "map", 51301 mapData : mapData, 51302 allAreas: false, 51303 keys: ["postal-code"], 51304 nullColor: Highcharts.eiaColors.blue, 51305 color: Highcharts.eiaColors.blue, 51306 joinBy: ['hc-a2', 'code'], 51307 data: mapData, 51308 cursor: 'pointer', 51309 borderWidth: 0.5, 51310 states: { 51311 hover: { 51312 brightness: 0, 51313 color: Highcharts.eiaColors.green 51314 } 51315 }, 51316 dataLabels: { 51317 enabled: true, 51318 formatter: function () { 51319 if (this.point.properties) { 51320 return this.point.properties['hc-a2']; 51321 } 51322 return this.point.options.ucName; 51323 }, 51324 style: { 51325 fontSize: '10px' 51326 } 51327 }, 51328 events:{ 51329 click: function(e){
51330 var abr = e.point.properties['postal-code']; 51331 window.location = "/state/seds/seds-data-complete.php?sid="+abr; 51332 } 51333 } 51334 }, 51335 { 51336 type: 'mapline', 51337 data: Highcharts.geojson(map, 'mapline'), 51338 color: 'silver', 51339 nullColor : 'silver', 51340 lineWidth : 1, 51341 showInLegend: false, 51342 enableMouseTracking: false, 51343 states : { 51344 inactive : { 51345 enabled : false 51346 } 51347 } 51348 } 51349 ], 51350 legend:{ 51351 enabled:false 51352 }, 51353 responsive: { 51354 rules: [{ 51355 condition: { 51356 maxWidth: 450 51357 }, 51358 51359 chartOptions: { 51360 chart: { 51361 height: 300 51362 }, 51363 mapNavigation:{ 51364 enabled: false, 51365 enableTouchZoom: true 51366 } 51367 } 51368 }, 51369 { 51370 condition: { 51371 minWidth: 451 51372 }, 51373 51374 chartOptions: { 51375 chart: { 51376 height: '65%' 51377 }, 51378 mapNavigation:{ 51379 enabled: true 51380 } 51381 } 51382 }] 51383 } 51384 }); 51385 } 51386}; 51387 51388},{}],276:[function(require,module,exports){ 51389 51390module.exports = function (Highcharts, map) { 51391 51392 const elementId = 'state-energy-profile-map'; 51393 let mapData = Highcharts.geojson(map, 'map'); 51394 51395 if ($('#' + elementId).length > 0) { 51396 Highcharts.mapChart(elementId, { 51397 chart: { 51398 map: map, 51399 spacingBottom: 40 51400 }, 51401 mapView : { 51402 insetOptions : { 51403 borderWidth : 1, 51404 borderColor : 'silver' 51405 } 51406 }, 51407 credits: { 51408 enabled: true, 51409 href: null, 51410 text: 'Data source: U.S. Energy Information Administration', 51411 style: { 51412 cursor: 'normal' 51413 } 51414 }, 51415 title:{ 51416 text:'Click a state for its energy profile', 51417 margin: 15 51418 }, 51419 accessibility: { 51420 description: 'An interactive map providing links to state energy profiles', 51421 }, 51422 tooltip: { 51423 enabled: true, 51424 useHTML: true, 51425 formatter: function () { 51426 return '<b/>'+this.point.name + '</b>'; 51427 } 51428 }, 51429 exporting:{ 51430 enabled: false 51431 }, 51432 series:[ 51433 { 51434 id: "states", 51435 type: "map", 51436 mapData : mapData, 51437 allAreas: false, 51438 keys: ["postal-code"], 51439 nullColor : Highcharts.eiaColors.green, 51440 color: Highcharts.eiaColors.green, 51441 joinBy: ['hc-a2', 'code'], 51442 data: mapData, 51443 cursor: 'pointer', 51444 borderWidth: 0.5, 51445 states: { 51446 hover: { 51447 brightness: 0, 51448 color: Highcharts.eiaColors.blue 51449 } 51450 }, 51451 dataLabels: { 51452 enabled: true, 51453 formatter: function () { 51454 if (this.point.properties) { 51455 return this.point.properties['hc-a2']; 51456 } 51457 return this.point.options.ucName; 51458 }, 51459 style: { 51460 fontSize: '10px' 51461 } 51462 }, 51463 events:{ 51464 click: function(e){ 51465 var abr = e.point.properties['postal-code']; 51466 window.location = "/states/"+abr+"/"; 51467 } 51468 } 51469 }, 51470 { 51471 type: 'mapline', 51472 data: Highcharts.geojson(map, 'mapline'), 51473 color: 'silver', 51474 nullColor : 'silver', 51475 lineWidth : 1, 51476 showInLegend: false, 51477 enableMouseTracking: false, 51478 states : { 51479 inactive : { 51480 enabled : false 51481 } 51482 } 51483 } 51484 ], 51485 legend:{ 51486 enabled:false 51487 }, 51488 responsive: { 51489 rules: [{ 51490 condition: { 51491 maxWidth: 450 51492 }, 51493 51494 chartOptions: { 51495 chart: { 51496 height: 300 51497 }, 51498 mapNavigation:{ 51499 enabled: false, 51500 enableTouchZoom: true 51501 } 51502 } 51503 }, 51504 { 51505 condition: { 51506 minWidth: 451 51507 }, 51508 51509 chartOptions: { 51510 chart: { 51511 height: '65%' 51512 }, 51513 mapNavigation:{ 51514 enabled: true 51515 } 51516 } 51517 }] 51518 } 51519 }); 51520 } 51521}; 51522 51523},{}],277:[function(require,module,exports){ 51524const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 51525const csvParser = require('../../includes/csvParser'); 51526 51527module.exports = function (Highcharts, appPath) { 51528 const elementId = 'air-conditioning-year-constructed'; 51529 if ($('#' + elementId).length > 0) { 51530 Highcharts.chart(elementId, { 51531 chart: { 51532 type: 'column', 51533 spacingBottom: 30, 51534 events: { 51535 load: creditsSizeAndPosition, 51536 redraw: creditsSizeAndPosition 51537 } 51538 }, 51539 credits: { 51540 enabled: true, 51541 href: null, 51542 style: { 51543 cursor: 'normal' 51544 } 51545 }, 51546 title: { 51547 margin: 15 51548 }, 51549 data: { 51550 csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv', 51551 startRow: 3, 51552 firstRowAsNames: true, 51553 beforeParse: function (csv) { 51554 var parsedCSV = csvParser(csv); 51555 this.chart.title.update({ text: parsedCSV[0][0] }); 51556 this.chart.credits.update({ text: parsedCSV[1][0] }); 51557 this.chart.yAxis[0].update({ title: { text: null } }); 51558 this.chart.update( 51559 { 51560 accessibility: { 51561 description: parsedCSV[2][0], 51562 }, 51563 exporting: { 51564 menuItemDefinitions: 51565 { 51566 label: { 51567 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 51568 } 51569 }, 51570 buttons: { 51571 contextButton: { 51572 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 51573 } 51574 } 51575 } 51576 } 51577 ); 51578 return csv; 51579 } 51580 }, 51581 colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.green, Highcharts.eiaColors.yellow], 51582 xAxis: { 51583 labels: { 51584 enabled: true 51585 } 51586 }, 51587 yAxis: { 51588 tickInterval: 10, 51589 labels: { 51590 format: '{value}%' 51591 } 51592 }, 51593 tooltip: { 51594 formatter: function () { 51595 return '<b>' + this.key + '</b><br/><b>' + this.series.name + ':</b> ' + this.y.toFixed(0) + '%'; 51596 } 51597 }, 51598 legend: { 51599 enabled: true 51600 }, 51601 responsive: { 51602 rules: [{ 51603 condition: { 51604 maxWidth: 450 51605 }, 51606 chartOptions: { 51607 chart: { 51608 height: 450 51609 } 51610 } 51611 }, 51612 { 51613 condition: { 51614 minWidth: 451 51615 }, 51616 51617 chartOptions: { 51618 chart: { 51619 height: '65%' 51620 } 51621 } 51622 }] 51623 } 51624 }); 51625 } 51626}; 51627 51628},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],278:[function(require,module,exports){ 51629const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 51630const csvParser = require('../../includes/csvParser'); 51631 51632module.exports = function (Highcharts, appPath) { 51633 const elementId = 'commercial-bldgs-intensity-trend'; 51634 var units = ''; 51635 51636 if ($('#' + elementId).length > 0) { 51637 Highcharts.chart(elementId, { 51638 chart: { 51639 type: 'line', 51640 spacingBottom: 30, 51641 events: { 51642 load: creditsSizeAndPosition, 51643 redraw: creditsSizeAndPosition 51644 } 51645 }, 51646 credits: { 51647 enabled: true, 51648 href: null, 51649 style: { 51650 cursor: 'normal' 51651 } 51652 }, 51653 data: { 51654 csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv', 51655 startRow: 5, 51656 firstRowAsNames: true, 51657 beforeParse: function (csv) { 51658 var parsedCSV = csvParser(csv); 51659 this.chart.title.update({ text: parsedCSV[0][0] }); 51660 units = parsedCSV[1][0]; 51661 this.chart.subtitle.update({ text: '<span style="color:#888;font-weight:bold;font-size:12px;fill:#888;">' + parsedCSV[1][0] + '</span>' }); 51662 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 51663 this.chart.update( 51664 { 51665 accessibility: { 51666 description: parsedCSV[4][0], 51667 }, 51668 exporting: { 51669 menuItemDefinitions: 51670 { 51671 label: { 51672 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 51673 } 51674 }, 51675 buttons: { 51676 contextButton: { 51677 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 51678 } 51679 } 51680 } 51681 } 51682 ); 51683 return csv; 51684 } 51685 }, 51686 colors: [Highcharts.eiaColors.green, Highcharts.eiaColors.blue, Highcharts.eiaColors.brown], 51687 xAxis: { 51688 type: "category", 51689 labels: { 51690 format: "{value}" 51691 } 51692 }, 51693 yAxis: { 51694 title: { 51695 enabled: false 51696 }, 51697 labels: { 51698 format: "{value:.0f}" 51699 }, 51700 tickInterval: 20 51701 }, 51702 plotOptions: { 51703 line: { 51704 marker: { 51705 enabled: true, 51706 radius: 5 51707 } 51708 } 51709 }, 51710 tooltip: { 51711 useHTML: true, 51712 shared: true, 51713 formatter: function () { 51714 let html = "<b>" + this.points[0].key + "</b><br/>"; 51715 this.points.filter(function (value) { 51716 html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25AC\u2009\u2009' + '</span><b>' + value.series.name + ': </b><span>' + value.y.toFixed(2) + ' ' + units + '</span><br/>'; 51717 }); 51718 return html; 51719 } 51720 }, 51721 responsive: { 51722 rules: [{ 51723 condition: { 51724 maxWidth: 450 51725 }, 51726 chartOptions: { 51727 chart: { 51728 height: 500 51729 } 51730 } 51731 }, 51732 { 51733 condition: { 51734 minWidth: 451 51735 }, 51736 51737 chartOptions: { 51738 chart: { 51739 height: '65%' 51740 } 51741 } 51742 }] 51743 } 51744 }); 51745 } 51746}; 51747 51748},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],279:[function(require,module,exports){ 51749const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 51750const csvParser = require('../../includes/csvParser'); 51751 51752module.exports = function (Highcharts, appPath) { 51753 const elementId = 'commercial-building-floorspace-by-census-region'; 51754 var units; 51755 51756 if ($('#' + elementId).length > 0) { 51757 Highcharts.chart(elementId, { 51758 chart: { 51759 type: 'bar', 51760 spacingBottom: 25, 51761 events: { 51762 load: creditsSizeAndPosition, 51763 redraw: creditsSizeAndPosition 51764 } 51765 }, 51766 credits: { 51767 enabled: true, 51768 href: null, 51769 style: { 51770 cursor: 'normal' 51771 } 51772 }, 51773 title: { 51774 margin: 15 51775 }, 51776 data: { 51777 csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv', 51778 startRow: 4, 51779 firstRowAsNames: false, 51780 complete: function (options) { 51781 options.series[0].data.reverse(); 51782 }, 51783 beforeParse: function (csv) { 51784 var parsedCSV = csvParser(csv); 51785 this.chart.title.update({ text: parsedCSV[0][0] }); 51786 this.chart.credits.update({ text: parsedCSV[2][0] }); 51787 units = parsedCSV[1][0]; 51788 this.chart.subtitle.update({ 51789 text: parsedCSV[1][0], 51790 style: { 51791 color: "#888", 51792 fontWeight: "bold", 51793 fontSize: "12px" 51794 } 51795 }); 51796 this.chart.update( 51797 { 51798 accessibility: { 51799 description: parsedCSV[3][0], 51800 }, 51801 exporting: { 51802 menuItemDefinitions: 51803 { 51804 label: { 51805 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 51806 } 51807 }, 51808 buttons: { 51809 contextButton: { 51810 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 51811 } 51812 } 51813 } 51814 } 51815 ); 51816 return csv; 51817 } 51818 }, 51819 yAxis: { 51820 tickInterval: 10, 51821 labels: { 51822 format: '{value:,.1f}', 51823 }, 51824 title: { 51825 text: '' 51826 } 51827 }, 51828 tooltip: { 51829 useHTML: true, 51830 formatter: function () { 51831 return '<b>' + this.key + '</b>: ' + this.y + ' ' + units; 51832 } 51833 }, 51834 legend: { 51835 enabled: false 51836 }, 51837 plotOptions: { 51838 bar
51838: { 51839 dataLabels: { 51840 enabled: true, 51841 style: { 51842 color: Highcharts.eiaColors.darkGrey 51843 } 51844 } 51845 } 51846 }, 51847 responsive: { 51848 rules: [{ 51849 condition: { 51850 maxWidth: 450 51851 }, 51852 chartOptions: { 51853 chart: { 51854 height: 450 51855 } 51856 } 51857 }, 51858 { 51859 condition: { 51860 minWidth: 451 51861 }, 51862 51863 chartOptions: { 51864 chart: { 51865 height: '65%' 51866 } 51867 } 51868 }] 51869 } 51870 }); 51871 } 51872}; 51873 51874},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],280:[function(require,module,exports){ 51875const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 51876const csvParser = require('../../includes/csvParser'); 51877 51878module.exports = function (Highcharts, appPath) { 51879 const elementId = 'commercial-buildings-by-major-end-uses'; 51880 var units; 51881 51882 if ($('#' + elementId).length > 0) { 51883 Highcharts.chart(elementId, { 51884 chart: { 51885 events: { 51886 load: creditsSizeAndPosition, 51887 redraw: creditsSizeAndPosition 51888 }, 51889 type: 'column', 51890 spacingBottom: 30 51891 }, 51892 credits: { 51893 enabled: true, 51894 href: null, 51895 style: { 51896 cursor: 'normal' 51897 } 51898 }, 51899 data: { 51900 csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv', 51901 startRow: 4, 51902 firstRowAsNames: false, 51903 51904 beforeParse: function (csv) { 51905 var parsedCSV = csvParser(csv); 51906 this.chart.title.update({ text: parsedCSV[0][0] }); 51907 this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } }); 51908 units = parsedCSV[1][0]; 51909 this.chart.credits.update({ text: parsedCSV[2][0] }); 51910 this.chart.update( 51911 { 51912 accessibility: { 51913 description: parsedCSV[3][0], 51914 }, 51915 exporting: { 51916 menuItemDefinitions: 51917 { 51918 label: { 51919 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 51920 } 51921 }, 51922 buttons: { 51923 contextButton: { 51924 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 51925 } 51926 } 51927 } 51928 } 51929 ); 51930 return csv; 51931 } 51932 }, 51933 colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.green, Highcharts.eiaColors.yellow, Highcharts.eiaColors.red, Highcharts.eiaColors.darkBrown, Highcharts.eiaColors.darkBlue, Highcharts.eiaColors.grey, Highcharts.eiaColors.extraLightBlue], 51934 xAxis: { 51935 labels: { 51936 enabled: true 51937 } 51938 }, 51939 yAxis: [{ 51940 tickInterval: 200, 51941 labels: { 51942 format: '{value:,.0f}' 51943 } 51944 }], 51945 tooltip: { 51946 formatter: function () { 51947 var format = '<b>' + this.key + '</b>: ' + Highcharts.numberFormat(this.y) + ' ' + units; 51948 return format; 51949 } 51950 }, 51951 legend: { 51952 enabled: false 51953 }, 51954 plotOptions: { 51955 column: { 51956 dataLabels: { 51957 enabled: true, 51958 crop: false, 51959 overflow: 'allow', 51960 formatter: function () { 51961 var sum = 0; 51962 for (var i = 0; i < this.series.processedYData.length; i++) { 51963 if (this.series.processedYData[i]) { 51964 sum += parseInt(this.series.processedYData[i]); 51965 } 51966 } 51967 return ((this.y * 100) / sum).toFixed(0) + '%'; 51968 }, 51969 style: { 51970 color: Highcharts.eiaColors.darkGrey 51971 } 51972 } 51973 } 51974 } 51975 }); 51976 } 51977}; 51978 51979},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],281:[function(require,module,exports){ 51980const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 51981const csvParser = require('../../includes/csvParser'); 51982 51983module.exports = function (Highcharts, appPath) { 51984 const elementId = 'commercial-buildings-census-region-energy-use-type'; 51985 var units; 51986 51987 if ($('#' + elementId).length > 0) { 51988 Highcharts.chart(elementId, { 51989 chart: { 51990 spacingBottom: 25, 51991 events: { 51992 load: creditsSizeAndPosition, 51993 redraw: creditsSizeAndPosition 51994 }, 51995 type: 'bar' 51996 }, 51997 credits: { 51998 enabled: true, 51999 href: null, 52000 style: { 52001 cursor: 'normal' 52002 } 52003 }, 52004 data: { 52005 csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv', 52006 startRow: 5, 52007 firstRowAsNames: true, 52008 beforeParse: function (csv) { 52009 var parsedCSV = csvParser(csv); 52010 this.chart.title.update({ text: parsedCSV[0][0] }); 52011 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 52012 this.chart.subtitle.update({ text: '<span style="color:#888;font-weight:bold;font-size:12px;fill:#888;">' + parsedCSV[1][0] + '</span>' }); 52013 units = parsedCSV[1][0]; 52014 this.chart.update( 52015 { 52016 accessibility: { 52017 description: parsedCSV[4][0], 52018 }, 52019 exporting: { 52020 menuItemDefinitions: 52021 { 52022 label: { 52023 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 52024 } 52025 }, 52026 buttons: { 52027 contextButton: { 52028 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 52029 } 52030 } 52031 } 52032 } 52033 ); 52034 return csv; 52035 } 52036 }, 52037 xAxis: { 52038 labels: { 52039 enabled: true, 52040 format: '{value}' 52041 }, 52042 reversed: false, 52043 type: 'category' 52044 }, 52045 yAxis: [{ 52046 title: { 52047 enabled: false 52048 }, 52049 labels: { 52050 format: '{value:,.0f}' 52051 }, 52052 reversedStacks: false 52053 52054 }], 52055 tooltip: { 52056 useHTML: true, 52057 shared: true, 52058 formatter: function () { 52059 var format = '<b>' + this.points[0].key + '</b><br/>'; 52060 for (var i = 0; i < this.points.length; i++) { 52061 format += '<span style="font-size: 16px;color:' + this.points[i].color + '">\u25CF\u2009\u2009</span><b>' + this.points[i].series.name + ':</b> <span>' + Highcharts.numberFormat(this.points[i].y) + ' ' + units + '</span><br/>'; 52062 } 52063 return format; 52064 } 52065 }, 52066 legend: { 52067 enabled: true, 52068 }, 52069 plotOptions: { 52070 bar: { 52071 stacking: 'normal' 52072 } 52073 }, 52074 responsive: { 52075 rules: [{ 52076 condition: { 52077 maxWidth: 450 52078 }, 52079 chartOptions: { 52080 chart: { 52081 height: 500 52082 }, 52083 plotOptions: { 52084 column: { 52085 dataLabels: { 52086 enabled: false 52087 } 52088 } 52089 } 52090 } 52091 }, 52092 { 52093 condition: { 52094 minWidth: 451 52095 }, 52096 52097 chartOptions: { 52098 chart: { 52099 height: '65%' 52100 } 52101 } 52102 }] 52103 } 52104 }); 52105 } 52106}; 52107 52108},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],282:[function(require,module,exports){ 52109const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 52110const csvParser = require('../../includes/csvParser'); 52111 52112module.exports = function (Highcharts, appPath) { 52113 const elementId = 'commercial-buildings-electricity-end-uses'; 52114 var units; 52115 52116 if ($('#' + elementId).length > 0) { 52117 Highcharts.chart(elementId, { 52118 chart: { 52119 spacingBottom: 25, 52120 events: { 52121 load: creditsSizeAndPosition, 52122 redraw: creditsSizeAndPosition 52123 }, 52124 type: 'bar' 52125 }, 52126 credits: { 52127 enabled: true, 52128 href: null, 52129 style: { 52130 cursor: 'normal' 52131 } 52132 }, 52133 data: { 52134 csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv', 52135 startRow: 5, 52136 firstRowAsNames: true, 52137 beforeParse: function (csv) { 52138 var parsedCSV = csvParser(csv); 52139 this.chart.title.update({ text: parsedCSV[0][0] }); 52140 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 52141 this.chart.subtitle.update({ text: '<span style="color:#888;font-weight:bold;font-size:12px;fill:#888;">' + parsedCSV[1][0] + '</span>' }); 52142 units = parsedCSV[1][0]; 52143 this.chart.update( 52144 { 52145 accessibility: { 52146 description: parsedCSV[4][0], 52147 }, 52148 exporting: { 52149 menuItemDefinitions: 52150 { 52151 label: { 52152 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 52153 } 52154 }, 52155 buttons: { 52156 contextButton: { 52157 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 52158 } 52159 } 52160 } 52161 } 52162 ); 52163 return csv; 52164 } 52165 }, 52166 /*colors: [Highcharts.eiaColors.yellow, Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.red],*/ 52167 xAxis: { 52168 labels: { 52169 enabled: true, 52170 format: '{value}' 52171 }, 52172 reversed: true, 52173 type: 'category' 52174 }, 52175 yAxis: [{ 52176 title: { 52177 enabled: false 52178 }, 52179 labels: { 52180 format: '{value:,.0f}' 52181 } 52182 52183 }], 52184 tooltip: { 52185 useHTML: true, 52186 shared: true, 52187 formatter: function () { 52188 var format = '<b>' + this.points[0].key + '</b><br/>'; 52189 for (var i = 0; i < this.points.length; i++) { 52190 format += '<span style="font-size: 16px;color:' + this.points[i].color + '">\u25CF\u2009\u2009</span><b>' + this.points[i].series.name + ':</b> <span>' + Highcharts.numberFormat(this.points[i].y) + ' ' + units + ')\</span><br/>'; 52191 } 52192 return format; 52193 } 52194 }, 52195 legend: { 52196 enabled: true, 52197 }, 52198 series: [{ 52199 dataSorting: { 52200 enabled: true, 52201 matchByName: true, 52202 sortKey: 'this.points[i].total' 52203 } 52204 }], 52205 plotOptions: { 52206 bar: { 52207 stacking: 'normal' 52208 } 52209 }, 52210 responsive: { 52211 rules: [{ 52212 condition: { 52213 maxWidth: 450 52214 }, 52215 chartOptions: { 52216 chart: { 52217 height: 600 52218 }, 52219 plotOptions: { 52220 column: { 52221 dataLabels: { 52222 enabled: false 52223 } 52224 } 52225 } 52226 } 52227 },{ 52228 condition: { 52229 minWidth:451, 52230 maxWidth: 668 52231 }, 52232 chartOptions: { 52233 chart: { 52234 height: 550 52235 }, 52236 plotOptions: { 52237 column: { 52238 dataLabels: { 52239 enabled: false 52240 } 52241 } 52242 } 52243 } 52244 }, 52245 { 52246 condition: { 52247 minWidth: 669 52248 }, 52249 52250 chartOptions: { 52251 chart: { 52252 height: '65%' 52253 } 52254 } 52255 }] 52256 } 52257 }); 52258 } 52259}; 52260 52261},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],283:[function(require,module,exports){ 52262const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 52263const csvParser = require('../../includes/csvParser'); 52264 52265module.exports = function (Highcharts, appPath) { 52266 const elementId = 'commercial-buildings-electricity-natgas-use'; 52267 var units = ''; 52268 52269 if ($('#' + elementId).length > 0) { 52270 Highcharts.chart(elementId, { 52271 chart: { 52272 type: 'bar', 52273 spacingBottom: 35, 52274 events: { 52275 load: creditsSizeAndPosition, 52276 redraw: creditsSizeAndPosition 52277 } 52278 }, 52279 credits: { 52280 enabled: true, 52281 href: null, 52282 style: { 52283 cursor: 'normal' 52284 } 52285 }, 52286 title: { 52287 text: '', 52288 margin: 15 52289 }, 52290 data: { 52291 csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv', 52292 startRow: 5, 52293 firstRowAsNames: true, 52294 52295 beforeParse: function
52295 (csv) { 52296 var parsedCSV = csvParser(csv); 52297 this.chart.title.update({ useHTML: true, text: parsedCSV[0][0] }); 52298 this.chart.subtitle.update({ text: '<span style="color:#888;font-weight:bold;font-size:12px;fill:#888;">' + parsedCSV[1][0] + '</span>' }); 52299 units = parsedCSV[1][0]; 52300 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 52301 this.chart.update( 52302 { 52303 accessibility: { 52304 description: parsedCSV[4][0], 52305 }, 52306 exporting: { 52307 menuItemDefinitions: 52308 { 52309 label: { 52310 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 52311 } 52312 }, 52313 buttons: { 52314 contextButton: { 52315 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 52316 } 52317 } 52318 } 52319 } 52320 ); 52321 return csv; 52322 } 52323 52324 }, 52325 colors: [Highcharts.eiaColors.brown, Highcharts.eiaColors.blue], 52326 yAxis: { 52327 title: { 52328 enabled: false 52329 }, 52330 labels: { 52331 format: '{value:,.0f}', 52332 align: 'right', 52333 } 52334 }, 52335 xAxis: { 52336 reversed: false, 52337 labels: { 52338 style: { 52339 textOverflow: 'none', 52340 lineHeight: '12px' 52341 } 52342 } 52343 }, 52344 series: [{ 52345 dataSorting: { 52346 enabled: false, 52347 matchByName: true, 52348 sortKey: 'this.points[i].total' 52349 } 52350 }], 52351 tooltip: { 52352 useHTML: true, 52353 formatter: function () { 52354 return "<span><b>" + this.key + "</b><br/> " + Highcharts.numberFormat(this.y, 0) + "</span> " + units; 52355 } 52356 }, 52357 responsive: { 52358 rules: [{ 52359 condition: { 52360 maxWidth: 450 52361 }, 52362 52363 chartOptions: { 52364 chart: { 52365 height: 700 52366 } 52367 } 52368 }, 52369 { 52370 condition: { 52371 minWidth: 451, 52372 maxWidth: 667 52373 }, 52374 52375 chartOptions: { 52376 chart: { 52377 height: '80%' 52378 } 52379 } 52380 }, 52381 { 52382 condition: { 52383 minWidth: 668 52384 }, 52385 52386 chartOptions: { 52387 chart: { 52388 height: '65%' 52389 } 52390 } 52391 }] 52392 } 52393 }); 52394 } 52395}; 52396 52397},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],284:[function(require,module,exports){ 52398const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 52399const csvParser = require('../../includes/csvParser'); 52400 52401module.exports = function (Highcharts, appPath) { 52402 const elementId = 'commercial-buildings-energy-end-use-type'; 52403 var units; 52404 52405 if ($('#' + elementId).length > 0) { 52406 Highcharts.chart(elementId, { 52407 chart: { 52408 spacingBottom: 25, 52409 events: { 52410 load: creditsSizeAndPosition, 52411 redraw: creditsSizeAndPosition 52412 }, 52413 type: 'bar' 52414 }, 52415 credits: { 52416 enabled: true, 52417 href: null, 52418 style: { 52419 cursor: 'normal' 52420 } 52421 }, 52422 data: { 52423 csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv', 52424 startRow: 5, 52425 firstRowAsNames: true, 52426 beforeParse: function (csv) { 52427 var parsedCSV = csvParser(csv); 52428 this.chart.title.update({ text: parsedCSV[0][0] }); 52429 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 52430 this.chart.subtitle.update({ text: '<span style="color:#888;font-weight:bold;font-size:12px;fill:#888;">' + parsedCSV[1][0] + '</span>' }); 52431 units = parsedCSV[1][0]; 52432 this.chart.update( 52433 { 52434 accessibility: { 52435 description: parsedCSV[4][0], 52436 }, 52437 exporting: { 52438 menuItemDefinitions: 52439 { 52440 label: { 52441 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 52442 } 52443 }, 52444 buttons: { 52445 contextButton: { 52446 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 52447 } 52448 } 52449 } 52450 } 52451 ); 52452 return csv; 52453 } 52454 }, 52455 /*colors: [Highcharts.eiaColors.yellow, Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.red],*/ 52456 xAxis: { 52457 labels: { 52458 enabled: true, 52459 format: '{value}' 52460 }, 52461 reversed: true, 52462 type: 'category' 52463 }, 52464 yAxis: [{ 52465 title: { 52466 enabled: false 52467 }, 52468 labels: { 52469 format: '{value:,.0f}' 52470 } 52471 52472 }], 52473 tooltip: { 52474 useHTML: true, 52475 shared: true, 52476 formatter: function () { 52477 var format = '<b>' + this.points[0].key + '</b><br/>'; 52478 for (var i = 0; i < this.points.length; i++) { 52479 format += '<span style="font-size: 16px;color:' + this.points[i].color + '">\u25CF\u2009\u2009</span><b>' + this.points[i].series.name + ':</b> <span>' + Highcharts.numberFormat(this.points[i].y) + ' ' + units + ')\</span><br/>'; 52480 } 52481 return format; 52482 } 52483 }, 52484 legend: { 52485 enabled: true, 52486 }, 52487 series: [{ 52488 dataSorting: { 52489 enabled: true, 52490 matchByName: true, 52491 sortKey: 'this.points[i].total' 52492 } 52493 }], 52494 plotOptions: { 52495 bar: { 52496 stacking: 'normal' 52497 } 52498 }, 52499 responsive: { 52500 rules: [{ 52501 condition: { 52502 maxWidth: 450 52503 }, 52504 chartOptions: { 52505 chart: { 52506 height: 600 52507 }, 52508 plotOptions: { 52509 column: { 52510 dataLabels: { 52511 enabled: false 52512 } 52513 } 52514 } 52515 } 52516 },{ 52517 condition: { 52518 minWidth:451, 52519 maxWidth: 668 52520 }, 52521 chartOptions: { 52522 chart: { 52523 height: 550 52524 }, 52525 plotOptions: { 52526 column: { 52527 dataLabels: { 52528 enabled: false 52529 } 52530 } 52531 } 52532 } 52533 }, 52534 { 52535 condition: { 52536 minWidth: 669 52537 }, 52538 52539 chartOptions: { 52540 chart: { 52541 height: '65%' 52542 } 52543 } 52544 }] 52545 } 52546 }); 52547 } 52548}; 52549 52550},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],285:[function(require,module,exports){ 52551const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 52552const csvParser = require('../../includes/csvParser'); 52553 52554module.exports = function (Highcharts, appPath) { 52555 const elementId = 'commercial-buildings-energy-use-type'; 52556 var units; 52557 52558 if ($('#' + elementId).length > 0) { 52559 Highcharts.chart(elementId, { 52560 chart: { 52561 spacingBottom: 25, 52562 events: { 52563 load: creditsSizeAndPosition, 52564 redraw: creditsSizeAndPosition 52565 }, 52566 type: 'bar' 52567 }, 52568 credits: { 52569 enabled: true, 52570 href: null, 52571 style: { 52572 cursor: 'normal' 52573 } 52574 }, 52575 data: { 52576 csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv', 52577 startRow: 5, 52578 firstRowAsNames: true, 52579 beforeParse: function (csv) { 52580 var parsedCSV = csvParser(csv); 52581 this.chart.title.update({ text: parsedCSV[0][0] }); 52582 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 52583 this.chart.subtitle.update({ text: '<span style="color:#888;font-weight:bold;font-size:12px;fill:#888;">' + parsedCSV[1][0] + '</span>' }); 52584 units = parsedCSV[1][0]; 52585 this.chart.update( 52586 { 52587 accessibility: { 52588 description: parsedCSV[4][0], 52589 }, 52590 exporting: { 52591 menuItemDefinitions: 52592 { 52593 label: { 52594 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 52595 } 52596 }, 52597 buttons: { 52598 contextButton: { 52599 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 52600 } 52601 } 52602 } 52603 } 52604 ); 52605 return csv; 52606 } 52607 }, 52608 colors: [Highcharts.eiaColors.yellow, Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.red], 52609 xAxis: { 52610 labels: { 52611 enabled: true, 52612 format: '{value}' 52613 }, 52614 reversed: true, 52615 type: 'category' 52616 }, 52617 yAxis: [{ 52618 title: { 52619 enabled: false 52620 }, 52621 labels: { 52622 format: '{value:,.0f}' 52623 } 52624 52625 }], 52626 tooltip: { 52627 useHTML: true, 52628 shared: true, 52629 formatter: function () { 52630 var format = '<b>' + this.points[0].key + '</b><br/>'; 52631 for (var i = 0; i < this.points.length; i++) { 52632 format += '<span style="font-size: 16px;color:' + this.points[i].color + '">\u25CF\u2009\u2009</span><b>' + this.points[i].series.name + ':</b> <span>' + Highcharts.numberFormat(this.points[i].y) + ' ' + units + ')\</span><br/>'; 52633 } 52634 return format; 52635 } 52636 }, 52637 legend: { 52638 enabled: true, 52639 }, 52640 plotOptions: { 52641 bar: { 52642 stacking: 'normal' 52643 } 52644 }, 52645 series: [{ 52646 dataSorting: { 52647 enabled: true, 52648 } 52649 }], 52650 responsive: { 52651 rules: [{ 52652 condition: { 52653 maxWidth: 450 52654 }, 52655 chartOptions: { 52656 chart: { 52657 height: 600 52658 }, 52659 plotOptions: { 52660 column: { 52661 dataLabels: { 52662 enabled: false 52663 } 52664 } 52665 } 52666 } 52667 },{ 52668 condition: { 52669 minWidth:451, 52670 maxWidth: 668 52671 }, 52672 chartOptions: { 52673 chart: { 52674 height: 550 52675 }, 52676 plotOptions: { 52677 column: { 52678 dataLabels: { 52679 enabled: false 52680 } 52681 } 52682 } 52683 } 52684 }, 52685 { 52686 condition: { 52687 minWidth: 669 52688 }, 52689 52690 chartOptions: { 52691 chart: { 52692 height: '65%' 52693 } 52694 } 52695 }] 52696 } 52697 }); 52698 } 52699}; 52700 52701},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],286:[function(require,module,exports){ 52702const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 52703const csvParser = require('../../includes/csvParser'); 52704 52705module.exports = function (Highcharts, appPath) { 52706 const elementId = 'commercial-buildings-floorspace'; 52707 var units = ''; 52708 52709 if ($('#' + elementId).length > 0) { 52710 Highcharts.chart(elementId, { 52711 chart: { 52712 type: 'bar', 52713 spacingBottom: 35, 52714 events: { 52715 load: creditsSizeAndPosition, 52716 redraw: creditsSizeAndPosition 52717 } 52718 }, 52719 credits: { 52720 enabled: true, 52721 href: null, 52722 style: { 52723 cursor: 'normal' 52724 } 52725 }, 52726 title: { 52727 text: '', 52728 margin: 15 52729 }, 52730 data: { 52731 csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv', 52732 startRow: 5, 52733 firstRowAsNames: true, 52734 52735 beforeParse: function (csv) { 52736 var parsedCSV = csvParser(csv); 52737 this.chart.title.update({ useHTML: true, text: parsedCSV[0][0] }); 52738 this.chart.subtitle.update({ text: '<span style="color:#888;font-weight:bold;font-size:12px;fill:#888;">' + parsedCSV[1][0] + '</span>' }); 52739 units = parsedCSV[1][0]; 52740 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 52741 this.chart.update( 52742 { 52743 accessibility: { 52744 description: parsedCSV[4][0], 52745 }, 52746 exporting: { 52747 menuItemDefinitions: 52748 { 52749 label: { 52750 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 52751 } 52752 }, 52753 buttons: { 52754 contextButton: { 52755 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 52756 } 52757 } 52758 } 52759 } 52760 ); 52761 return csv; 52762 } 52763 52764 }, 52765 yAxis: { 52766 title:
52766 { 52767 enabled: false 52768 }, 52769 labels: { 52770 format: '{value:,.0f}', 52771 align: 'right', 52772 } 52773 }, 52774 xAxis: { 52775 reversed: true, 52776 labels: { 52777 style: { 52778 textOverflow: 'none', 52779 lineHeight: '12px' 52780 } 52781 } 52782 }, 52783 series: [{ 52784 dataSorting: { 52785 enabled: true, 52786 } 52787 }], 52788 legend: { 52789 enabled: false 52790 }, 52791 tooltip: { 52792 useHTML: true, 52793 formatter: function () { 52794 return "<span><b>" + this.key + "</b><br/> " + Highcharts.numberFormat(this.y, 0) + "</span> " + units; 52795 } 52796 }, 52797 responsive: { 52798 rules: [{ 52799 condition: { 52800 maxWidth: 450 52801 }, 52802 52803 chartOptions: { 52804 chart: { 52805 height: 700 52806 } 52807 } 52808 }, 52809 { 52810 condition: { 52811 minWidth: 451 52812 }, 52813 52814 chartOptions: { 52815 chart: { 52816 height: '65%' 52817 } 52818 } 52819 }] 52820 } 52821 }); 52822 } 52823}; 52824 52825},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],287:[function(require,module,exports){ 52826const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 52827const csvParser = require('../../includes/csvParser'); 52828 52829module.exports = function (Highcharts, appPath) { 52830 const elementId = 'commercial-buildings-fuel-use'; 52831 52832 if ($('#' + elementId).length > 0) { 52833 Highcharts.chart(elementId, { 52834 chart: { 52835 type: 'pie', 52836 spacingBottom: 25, 52837 events: { 52838 load: creditsSizeAndPosition, 52839 redraw: creditsSizeAndPosition 52840 } 52841 }, 52842 credits: { 52843 enabled: true, 52844 href: null, 52845 style: { 52846 cursor: 'normal' 52847 } 52848 }, 52849 title: { 52850 text: '' 52851 }, 52852 subtitle: { 52853 useHTML: true, 52854 floating: true, 52855 align: "center", 52856 verticalAlign: 'middle', 52857 y: 40 52858 }, 52859 data: { 52860 csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv', 52861 startRow: 7, 52862 firstRowAsNames: false, 52863 beforeParse: function (csv) { 52864 var parsedCSV = csvParser(csv); 52865 var middleLabel = '<span style="font-weight: bold; font-size: 18px">' + parsedCSV[1][0] + '</span><br><span style="font-weight:bold">' + parsedCSV[1][1] + '</span><br><span style="">' + parsedCSV[2][0] + '</span>'; 52866 this.chart.title.update({ useHTML: true, text: '<span>' + parsedCSV[0][0] + '</span><br><span style="color:#888;font-weight:bold;font-size:12px;">' + parsedCSV[0][1] + '</span>'}); 52867 this.chart.subtitle.update({ text: middleLabel }); 52868 this.chart.credits.update({ text: parsedCSV[3][0] + '<br>' + parsedCSV[4][0] }); 52869 this.chart.update( 52870 { 52871 accessibility: { 52872 description: parsedCSV[5][0], 52873 }, 52874 exporting: { 52875 menuItemDefinitions: 52876 { 52877 label: { 52878 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 52879 } 52880 }, 52881 buttons: { 52882 contextButton: { 52883 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 52884 } 52885 } 52886 } 52887 } 52888 ); 52889 return csv; 52890 } 52891 52892 }, 52893 plotOptions: { 52894 pie: { 52895 dataLabels: { 52896 useHTML: true, 52897 enabled: true, 52898 format: "<strong>{point.name}</strong><br/>{point.percentage:.0f}%", 52899 //distance: 10, 52900 y: -8, 52901 color: Highcharts.eiaColors.darkGrey, 52902 style: { 52903 "fontSize": "12px" 52904 } 52905 }, 52906 innerSize: '70%' 52907 } 52908 }, 52909 tooltip: { 52910 useHTML: true, 52911 formatter: function () { 52912 return "<span><b>" + this.key + "</b><br/> " + Math.round(this.percentage) + " %</span>"; 52913 } 52914 }, 52915 responsive: { 52916 rules: [{ 52917 condition: { 52918 maxWidth: 450 52919 }, 52920 52921 chartOptions: { 52922 chart: { 52923 height: 510 52924 }, 52925 title: { 52926 margin: 10 52927 }, 52928 subtitle: { 52929 y: 0 52930 }, 52931 plotOptions: { 52932 pie: { 52933 size: '100%', 52934 dataLabels: { 52935 enabled: false 52936 }, 52937 showInLegend: true 52938 } 52939 }, 52940 legend: { 52941 enabled: true 52942 } 52943 } 52944 }, 52945 { 52946 condition: { 52947 minWidth: 451 52948 }, 52949 52950 chartOptions: { 52951 chart: { 52952 height: '75%' 52953 }, 52954 title: { 52955 margin: 5 52956 }, 52957 subtitle: { 52958 y: 40 52959 }, 52960 plotOptions: { 52961 pie: { 52962 size: '70%', 52963 dataLabels: { 52964 enabled: true 52965 }, 52966 showInLegend: false 52967 } 52968 }, 52969 legend: { 52970 enabled: false 52971 } 52972 } 52973 }] 52974 } 52975 }); 52976 } 52977}; 52978 52979},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],288:[function(require,module,exports){ 52980const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 52981const csvParser = require('../../includes/csvParser'); 52982 52983module.exports = function (Highcharts, appPath) { 52984 const elementId = 'commercial-buildings-number'; 52985 var units = ''; 52986 52987 if ($('#' + elementId).length > 0) { 52988 Highcharts.chart(elementId, { 52989 chart: { 52990 type: 'bar', 52991 spacingBottom: 35, 52992 events: { 52993 load: creditsSizeAndPosition, 52994 redraw: creditsSizeAndPosition 52995 } 52996 }, 52997 credits: { 52998 enabled: true, 52999 href: null, 53000 style: { 53001 cursor: 'normal' 53002 } 53003 }, 53004 title: { 53005 text: '', 53006 margin: 15 53007 }, 53008 data: { 53009 csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv', 53010 startRow: 5, 53011 firstRowAsNames: true, 53012 53013 beforeParse: function (csv) { 53014 var parsedCSV = csvParser(csv); 53015 this.chart.title.update({ useHTML: true, text: parsedCSV[0][0] }); 53016 this.chart.subtitle.update({ text: '<span style="color:#888;font-weight:bold;font-size:12px;fill:#888;">' + parsedCSV[1][0] + '</span>' }); 53017 units = parsedCSV[1][0]; 53018 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 53019 this.chart.update( 53020 { 53021 accessibility: { 53022 description: parsedCSV[4][0], 53023 }, 53024 exporting: { 53025 menuItemDefinitions: 53026 { 53027 label: { 53028 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 53029 } 53030 }, 53031 buttons: { 53032 contextButton: { 53033 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 53034 } 53035 } 53036 } 53037 } 53038 ); 53039 return csv; 53040 } 53041 53042 }, 53043 yAxis: { 53044 title: { 53045 enabled: false 53046 }, 53047 labels: { 53048 format: '{value:,.0f}',
53049 align: 'right', 53050 } 53051 }, 53052 xAxis: { 53053 reversed: true, 53054 labels: { 53055 style: { 53056 textOverflow: 'none', 53057 lineHeight: '12px' 53058 } 53059 } 53060 }, 53061 series: [{ 53062 dataSorting: { 53063 enabled: true, 53064 } 53065 }], 53066 legend: { 53067 enabled: false 53068 }, 53069 tooltip: { 53070 useHTML: true, 53071 formatter: function () { 53072 return "<span><b>" + this.key + "</b><br/> " + Highcharts.numberFormat(this.y, 0) + "</span> " + units; 53073 } 53074 }, 53075 responsive: { 53076 rules: [{ 53077 condition: { 53078 maxWidth: 450 53079 }, 53080 53081 chartOptions: { 53082 chart: { 53083 height: 700 53084 } 53085 } 53086 }, 53087 { 53088 condition: { 53089 minWidth: 451 53090 }, 53091 53092 chartOptions: { 53093 chart: { 53094 height: '65%' 53095 } 53096 } 53097 }] 53098 } 53099 }); 53100 } 53101}; 53102 53103},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],289:[function(require,module,exports){ 53104const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 53105const csvParser = require('../../includes/csvParser'); 53106 53107module.exports = function (Highcharts, appPath) { 53108 const elementId = 'commercial-buildings-types-intensity'; 53109 var units = ''; 53110 53111 if ($('#' + elementId).length > 0) { 53112 Highcharts.chart(elementId, { 53113 chart: { 53114 type: 'bar', 53115 spacingBottom: 35, 53116 events: { 53117 load: creditsSizeAndPosition, 53118 redraw: creditsSizeAndPosition 53119 } 53120 }, 53121 credits: { 53122 enabled: true, 53123 href: null, 53124 style: { 53125 cursor: 'normal' 53126 } 53127 }, 53128 title: { 53129 text: '', 53130 margin: 15 53131 }, 53132 data: { 53133 csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv', 53134 startRow: 5, 53135 firstRowAsNames: true, 53136 53137 beforeParse: function (csv) { 53138 var parsedCSV = csvParser(csv); 53139 this.chart.title.update({ useHTML: true, text: parsedCSV[0][0] }); 53140 this.chart.subtitle.update({ text: '<span style="color:#888;font-weight:bold;font-size:12px;fill:#888;">' + parsedCSV[1][0] + '</span>' }); 53141 units = parsedCSV[1][0]; 53142 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 53143 this.chart.update( 53144 { 53145 accessibility: { 53146 description: parsedCSV[4][0], 53147 }, 53148 exporting: { 53149 menuItemDefinitions: 53150 { 53151 label: { 53152 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 53153 } 53154 }, 53155 buttons: { 53156 contextButton: { 53157 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 53158 } 53159 } 53160 } 53161 } 53162 ); 53163 return csv; 53164 } 53165 53166 }, 53167 yAxis: { 53168 title: { 53169 enabled: false 53170 }, 53171 labels: { 53172 format: '{value:.0f}', 53173 align: 'right', 53174 } 53175 }, 53176 xAxis: { 53177 reversed: false, 53178 labels: { 53179 style: { 53180 textOverflow: 'none', 53181 lineHeight: '12px' 53182 } 53183 } 53184 }, 53185 series: [{ 53186 dataSorting: { 53187 enabled: false, 53188 } 53189 }], 53190 legend: { 53191 enabled: true, 53192 reversed: true 53193 }, 53194 tooltip: { 53195 useHTML: true, 53196 formatter: function () { 53197 return "<span><b>" + this.key + "</b><br/> " + Highcharts.numberFormat(this.y, 0) + "</span> " + units; 53198 } 53199 }, 53200 responsive: { 53201 rules: [{ 53202 condition: { 53203 maxWidth: 450 53204 }, 53205 chartOptions: { 53206 chart: { 53207 height: 600 53208 }, 53209 plotOptions: { 53210 column: { 53211 dataLabels: { 53212 enabled: false 53213 } 53214 } 53215 } 53216 } 53217 },{ 53218 condition: { 53219 minWidth:451, 53220 maxWidth: 668 53221 }, 53222 chartOptions: { 53223 chart: { 53224 height: 600 53225 }, 53226 plotOptions: { 53227 column: { 53228 dataLabels: { 53229 enabled: false 53230 } 53231 } 53232 } 53233 } 53234 }, 53235 { 53236 condition: { 53237 minWidth: 669 53238 }, 53239 53240 chartOptions: { 53241 chart: { 53242 height: '65%' 53243 } 53244 } 53245 }] 53246 } 53247 }); 53248 } 53249}; 53250 53251},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],290:[function(require,module,exports){ 53252const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 53253const csvParser = require('../../includes/csvParser'); 53254 53255module.exports = function (Highcharts, appPath) { 53256 const elementId = 'consumption-home-census-region'; 53257 let units = ''; 53258 if ($('#' + elementId).length > 0) { 53259 Highcharts.chart(elementId, { 53260 chart: { 53261 type: 'column', 53262 spacingBottom: 25, 53263 events: { 53264 load: creditsSizeAndPosition, 53265 redraw: creditsSizeAndPosition 53266 } 53267 }, 53268 credits: { 53269 enabled: true, 53270 href: null, 53271 style: { 53272 cursor: 'normal' 53273 } 53274 }, 53275 data: { 53276 csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv', 53277 startRow: 4, 53278 firstRowAsNames: true, 53279 beforeParse: function (csv) { 53280 var parsedCSV = csvParser(csv); 53281 units = parsedCSV[1][0]; 53282 this.chart.title.update({ text: parsedCSV[0][0] }); 53283 this.chart.yAxis[0].update({ title: { text: units } }); 53284 this.chart.credits.update({ text: parsedCSV[2][0] }); 53285 this.chart.update( 53286 { 53287 accessibility: { 53288 description: parsedCSV[3][0], 53289 }, 53290 exporting: { 53291 menuItemDefinitions: 53292 { 53293 label: { 53294 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 53295 } 53296 }, 53297 buttons: { 53298 contextButton: { 53299 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 53300 } 53301 } 53302 } 53303 } 53304 ); 53305 return csv; 53306 } 53307 }, 53308 colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.green, Highcharts.eiaColors.yellow], 53309 xAxis: { 53310 labels: { 53311 enabled: true 53312 } 53313 }, 53314 yAxis: { 53315 maxPadding: 0, 53316 tickInterval: 2000, 53317 labels: { 53318 format: '{value:,.0f}' 53319 } 53320 }, 53321 tooltip: { 53322 formatter: function () { 53323 const value = this.y.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); // format with comma separator for thousands place 53324 return '<b>' + this.key + '</b><br/><b>' + this.series.name + ':</b> ' + value + ' ' + units; 53325 } 53326 }, 53327 legend: { 53328 enabled: true 53329 }, 53330 responsive: { 53331 rules: [{ 53332 condition: { 53333 maxWidth: 450 53334 }, 53335 chartOptions: { 53336 chart: { 53337 height: 450 53338 } 53339 } 53340 }, 53341 { 53342 condition: { 53343 minWidth: 451 53344 }, 53345 53346 chartOptions: { 53347 chart: { 53348 height: '65%' 53349 } 53350 } 53351 }] 53352 } 53353 }); 53354 } 53355}; 53356 53357},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],291:[function(require,module,exports){ 53358const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 53359const csvParser = require('../../includes/csvParser'); 53360 53361module.exports = function (Highcharts, appPath) { 53362 const elementId = 'consumption-of-electricity-has-generally-declined'; 53363 let units = ''; 53364 if ($('#' + elementId).length > 0) { 53365 Highcharts.chart(elementId, { 53366 chart: { 53367 type: 'column', 53368 spacingBottom: 30, 53369 events: { 53370 load: creditsSizeAndPosition, 53371 redraw: creditsSizeAndPosition 53372 } 53373 }, 53374 credits: { 53375 enabled: true, 53376 href: null, 53377 style: { 53378 cursor: 'normal' 53379 } 53380 }, 53381 data: { 53382 csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv', 53383 startRow: 4, 53384 firstRowAsNames: true, 53385 beforeParse: function (csv) { 53386 var parsedCSV = csvParser(csv); 53387 units = parsedCSV[1][0]; 53388 this.chart.title.update({ text: parsedCSV[0][0] }); 53389 this.chart.yAxis[0].update({ title: { text: units } }); 53390 this.chart.credits.update({ text: parsedCSV[2][0] }); 53391 this.chart.update( 53392 { 53393 accessibility: { 53394 description: parsedCSV[3][0], 53395 }, 53396 exporting: { 53397 menuItemDefinitions: 53398 { 53399 label: { 53400 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 53401 } 53402 }, 53403 buttons: { 53404 contextButton: { 53405 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 53406 } 53407 } 53408 } 53409 } 53410 ); 53411 return csv; 53412 } 53413 }, 53414 xAxis: { 53415 labels: { 53416 enabled: true 53417 }, 53418 type: 'category', 53419 startOnTick: true, 53420 endOnTick: false 53421 }, 53422 yAxis: { 53423 tickInterval: 200000, 53424 labels: { 53425 format: '{value:,.0f}' 53426 } 53427 }, 53428 tooltip: { 53429 formatter: function () { 53430 return '<b>' + this.key + '</b><br/><b>' + this.series.name + ':</b> ' + Highcharts.numberFormat(this.y) + ' ' + units; 53431 } 53432 }, 53433 plotOptions: { 53434 column: { 53435 pointPadding: 0.2, 53436 dataLabels: { 53437 enabled: true, 53438 crop: false, 53439 overflow: 'none', 53440 formatter: function () { 53441 return Highcharts.numberFormat(this.y); 53442 }, 53443 style: { 53444 color: Highcharts.eiaColors.darkGrey 53445 } 53446 } 53447 } 53448 }, 53449 responsive: { 53450 rules: [{ 53451 condition: { 53452 maxWidth: 450 53453 }, 53454 chartOptions: { 53455 chart: { 53456 height: 410 53457 }, 53458 plotOptions: { 53459 column: { 53460 dataLabels: { 53461 enabled: false 53462 } 53463 } 53464 } 53465 } 53466 }, 53467 { 53468 condition: { 53469 minWidth: 451 53470 }, 53471 53472 chartOptions: { 53473 chart: { 53474 height: '65%' 53475 }, 53476 plotOptions: { 53477 column: { 53478 size: '65%', 53479 dataLabels: { 53480 enabled: true 53481 } 53482 } 53483 } 53484 } 53485 }] 53486 } 53487 }); 53488 } 53489}; 53490 53491},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],292:[function(require,module,exports){ 53492const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 53493const csvParser = require('../../includes/csvParser'); 53494 53495module.exports = function (Highcharts, appPath) { 53496 const elementId = 'electricity-use-commercial-buildings-by-major-enduse'; 53497 var units; 53498 53499 if ($('#' + elementId).length > 0) { 53500 Highcharts.chart(elementId, { 53501 chart: { 53502 events: { 53503 load: creditsSizeAndPosition, 53504 redraw: creditsSizeAndPosition 53505 }, 53506 type: 'column', 53507 spacingBottom: 25 53508 }, 53509 credits: { 53510 enabled: true, 53511 href: null, 53512 style: { 53513 cursor: 'normal' 53514 } 53515 }, 53516 data: { 53517 csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv', 53518 startRow: 5, 53519 firstRowAsNames: false, 53520 beforeParse: function (csv) { 53521 var parsedCSV = csvParser(csv); 53522 this.chart.title.update({ text: parsedCSV[0][0] }); 53523 this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } }); 53524 units = parsedCSV[1][0]; 53525 this.chart.credits.update({ text: parsedCSV[2][0] + '<br/>' + parsedCSV[3][0] }); 53526 this.chart.update( 53527 { 53528 accessibility: { 53529 description: parsedCSV[4][0], 53530 }, 53531 exporting: { 53532 menuItemDefinitions: 53533 { 53534 label: { 53535 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 53536
53536 } 53537 }, 53538 buttons: { 53539 contextButton: { 53540 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 53541 } 53542 } 53543 } 53544 } 53545 ); 53546 return csv; 53547 } 53548 }, 53549 colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.green, Highcharts.eiaColors.yellow, Highcharts.eiaColors.red, Highcharts.eiaColors.darkBrown, Highcharts.eiaColors.darkBlue, Highcharts.eiaColors.grey, Highcharts.eiaColors.extraLightBlue, Highcharts.eiaColors.extraLightGreen], 53550 xAxis: { 53551 labels: { 53552 enabled: true, 53553 x:-15 53554 } 53555 }, 53556 yAxis: [{ 53557 tickInterval: 50, 53558 labels: { 53559 format: '{value:,.0f}' 53560 } 53561 }], 53562 tooltip: { 53563 formatter: function () { 53564 var unitsSplit = units.split(' '); 53565 unitsSplit.splice(0, 3); 53566 return '<b>' + this.key + '</b>: ' + this.y + ' ' + unitsSplit.join(' '); 53567 } 53568 }, 53569 legend: { 53570 enabled: false 53571 }, 53572 plotOptions: { 53573 column: { 53574 dataLabels: { 53575 enabled: true, 53576 crop: false, 53577 overflow: 'allow', 53578 formatter: function () { 53579 var sum = 0; 53580 for (var i = 0; i < this.series.processedYData.length; i++) { 53581 if (this.series.processedYData[i]) { 53582 sum += parseInt(this.series.processedYData[i]); 53583 } 53584 } 53585 return ((this.y * 100) / sum).toFixed(0) + '%'; 53586 }, 53587 style: { 53588 color: Highcharts.eiaColors.darkGrey 53589 } 53590 }, 53591 colorByPoint: true 53592 } 53593 }, 53594 responsive: { 53595 rules: [{ 53596 condition: { 53597 maxWidth: 450 53598 }, 53599 53600 chartOptions: { 53601 chart: { 53602 height: 510 53603 }, 53604 xAxis: { 53605 labels: { 53606 x: 0 53607 } 53608 } 53609 } 53610 }, 53611 { 53612 condition: { 53613 minWidth: 451 53614 }, 53615 chartOptions: { 53616 chart: { 53617 height: '65%' 53618 } 53619 } 53620 }] 53621 } 53622 }); 53623 } 53624}; 53625 53626},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],293:[function(require,module,exports){ 53627const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 53628const csvParser = require('../../includes/csvParser'); 53629 53630module.exports = function (Highcharts, appPath) { 53631 const elementId = 'end-use-consumption-by-housing-type'; 53632 var units = ''; 53633 53634 if ($('#' + elementId).length > 0) { 53635 Highcharts.chart(elementId, { 53636 chart: { 53637 type: 'bar', 53638 spacingBottom: 25, 53639 events: { 53640 load: creditsSizeAndPosition, 53641 redraw: creditsSizeAndPosition 53642 } 53643 }, 53644 credits: { 53645 enabled: true, 53646 href: null, 53647 style: { 53648 cursor: 'normal' 53649 } 53650 }, 53651 title: { 53652 margin: 15 53653 }, 53654 data: { 53655 csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv', 53656 startRow: 5, 53657 firstRowAsNames: true, 53658 beforeParse: function (csv) { 53659 var parsedCSV = csvParser(csv); 53660 this.chart.title.update({ text: parsedCSV[0][0] }); 53661 this.chart.credits.update({ text: parsedCSV[2][0] + '<br/>' + parsedCSV[3][0] }); 53662 this.chart.yAxis[0].update({ title: { text: '' } }); 53663 units = parsedCSV[1][0]; 53664 this.chart.update( 53665 { 53666 accessibility: { 53667 description: parsedCSV[4][0], 53668 }, 53669 exporting: { 53670 menuItemDefinitions: 53671 { 53672 label: { 53673 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 53674 } 53675 }, 53676 buttons: { 53677 contextButton: { 53678 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 53679 } 53680 } 53681 } 53682 } 53683 ); 53684 return csv; 53685 } 53686 }, 53687 colors: [Highcharts.eiaColors.darkBlue, Highcharts.eiaColors.lightBlue, Highcharts.eiaColors.red, Highcharts.eiaColors.lightRed, Highcharts.eiaColors.extraLightRed, Highcharts.eiaColors.brown], 53688 plotOptions: { 53689 series: { 53690 stacking: 'normal', 53691 dataLabels: { 53692 enabled: true, 53693 format: '{point.y:.0f}%' 53694 } 53695 } 53696 }, 53697 xAxis: { 53698 labels: { 53699 format: '{value}' 53700 } 53701 }, 53702 yAxis: { 53703 labels: { 53704 format: '{value}%' 53705 }, 53706 max: 100, 53707 min: 0, 53708 tickInterval: 20, 53709 reversedStacks: false 53710 }, 53711 tooltip: { 53712 useHTML: true, 53713 formatter: function () { 53714 return '<b>' + this.key + '</b><br/>' + this.series.name + '<br/>' + Highcharts.numberFormat(this.y, 0) + '% ' + units; 53715 } 53716 }, 53717 responsive: { 53718 rules: [{ 53719 condition: { 53720 maxWidth: 450 53721 }, 53722 53723 chartOptions: { 53724 chart: { 53725 height: 550 53726 } 53727 } 53728 }, 53729 { 53730 condition: { 53731 minWidth: 451 53732 }, 53733 53734 chartOptions: { 53735 chart: { 53736 height: '65%' 53737 } 53738 } 53739 }] 53740 } 53741 }); 53742 } 53743}; 53744 53745},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],294:[function(require,module,exports){ 53746const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 53747const csvParser = require('../../includes/csvParser'); 53748 53749module.exports = function (Highcharts, appPath) { 53750 const elementId = 'energy-consumption-by-end-use-sectors'; 53751 53752 if ($('#' + elementId).length > 0) { 53753 Highcharts.chart(elementId, { 53754 chart: { 53755 type: 'pie', 53756 spacingBottom: 25, 53757 events: { 53758 load: creditsSizeAndPosition, 53759 redraw: creditsSizeAndPosition 53760 } 53761 }, 53762 credits: { 53763 enabled: true, 53764 href: null, 53765 style: { 53766 cursor: 'normal' 53767 } 53768 }, 53769 title: { 53770 text: '' 53771 }, 53772 data: { 53773 csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv', 53774 startRow: 5, 53775 firstRowAsNames: false, 53776 beforeParse: function (csv) { 53777 var parsedCSV = csvParser(csv); 53778 this.chart.title.update({ useHTML: true, text: parsedCSV[0][0] }); 53779 this.chart.subtitle.update({ text: parsedCSV[1][0] }); 53780 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 53781 this.chart.update( 53782 { 53783 accessibility: { 53784 description: parsedCSV[4][0], 53785 }, 53786 exporting: { 53787 menuItemDefinitions: 53788 { 53789 label: { 53790 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 53791 } 53792 }, 53793 buttons: { 53794 contextButton: { 53795 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 53796 } 53797 } 53798 } 53799 } 53800 ); 53801 return csv; 53802 } 53803 53804 }, 53805 colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.green, Highcharts.eiaColors.yellow], 53806 plotOptions: { 53807 pie: { 53808 dataLabels: { 53809 useHTML: true, 53810 enabled: true, 53811 format: "<strong>{point.name}</strong><br/>{point.percentage:.0f}%", 53812 distance: 10, 53813 color: Highcharts.eiaColors.darkGrey, 53814 style: { 53815 "fontSize": "12px" 53816 } 53817 } 53818 } 53819 }, 53820 tooltip: { 53821 useHTML: true, 53822 formatter: function () { 53823 return "<span><b>" + this.key + "</b><br/> " + Math.round(this.percentage) + " %</span>"; 53824 } 53825 }, 53826 responsive: { 53827 rules: [{ 53828 condition: { 53829 maxWidth: 450 53830 }, 53831 53832 chartOptions: { 53833 chart: { 53834 height: 410 53835 }, 53836 title: { 53837 margin: 10 53838 }, 53839 plotOptions: { 53840 pie: { 53841 size: null, 53842 dataLabels: { 53843 enabled: false 53844 }, 53845 showInLegend: true 53846 } 53847 }, 53848 legend: { 53849 enabled: true 53850 } 53851 } 53852 }, 53853 { 53854 condition: { 53855 minWidth: 451 53856 }, 53857 53858 chartOptions: { 53859 chart: { 53860 height: '65%' 53861 }, 53862 title: { 53863 margin: 5 53864 }, 53865 plotOptions: { 53866 pie: { 53867 size: '75%', 53868 dataLabels: { 53869 enabled: true 53870 }, 53871 showInLegend: false 53872 } 53873 }, 53874 legend: { 53875 enabled: false 53876 } 53877 } 53878 }] 53879 } 53880 }); 53881 } 53882}; 53883 53884},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],295:[function(require,module,exports){ 53885const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 53886const csvParser = require('../../includes/csvParser'); 53887 53888module.exports = function (Highcharts, appPath) { 53889 const elementId = 'energy-consumption-commercial-buildings-by-census-region'; 53890 var units; 53891 53892 if ($('#' + elementId).length > 0) { 53893 Highcharts.chart(elementId, { 53894 chart: { 53895 type: 'bar', 53896 spacingBottom: 25, 53897 events: { 53898 load: creditsSizeAndPosition, 53899 redraw: creditsSizeAndPosition 53900 } 53901 }, 53902 credits: { 53903 enabled: true, 53904 href: null, 53905 style: { 53906 cursor: 'normal' 53907 } 53908 }, 53909 title: { 53910 margin: 15 53911 }, 53912 data: { 53913 csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv', 53914 startRow: 4, 53915 firstRowAsNames: false, 53916 complete: function (options) { 53917 options.series[0].data.reverse(); 53918 }, 53919 beforeParse: function (csv) { 53920 var parsedCSV = csvParser(csv); 53921 this.chart.title.update({ text: parsedCSV[0][0] }); 53922 this.chart.credits.update({ text: parsedCSV[2][0] }); 53923 units = parsedCSV[1][0]; 53924 this.chart.subtitle.update({ 53925 text: parsedCSV[1][0], 53926 style: { 53927 color: "#888", 53928 fontWeight: "bold", 53929 fontSize: "12px" 53930 } 53931 }); 53932 this.chart.update( 53933 { 53934 accessibility: { 53935 description: parsedCSV[3][0], 53936 }, 53937 exporting: { 53938 menuItemDefinitions: 53939 { 53940 label: { 53941 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 53942 } 53943 }, 53944 buttons: { 53945 contextButton: { 53946 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 53947 } 53948 } 53949 } 53950 } 53951 ); 53952 return csv; 53953 } 53954 }, 53955 yAxis: { 53956 tickInterval: 500, 53957 labels: { 53958 format: '{value:,.0f}', 53959 }, 53960 title: { 53961 text: '' 53962 } 53963 }, 53964 tooltip: { 53965 useHTML: true, 53966 formatter: function () { 53967 return '<b>' + this.key + '</b>: ' + Highcharts.numberFormat(this.y) + ' ' + units; 53968 } 53969 }, 53970 legend: { 53971 enabled: false 53972 }, 53973 plotOptions: { 53974 bar: { 53975 dataLabels: { 53976 enabled: true, 53977 crop: false, 53978 overflow: "allow", 53979 formatter: function () { 53980 return Highcharts.numberFormat(this.y); 53981 }, 53982 style: { 53983 color: Highcharts.eiaColors.darkGrey 53984 } 53985 } 53986 } 53987 }, 53988 responsive: { 53989 rules: [{ 53990 condition: { 53991 maxWidth: 450 53992 }, 53993 chartOptions: { 53994 chart: { 53995 height: 450 53996 } 53997 } 53998 }, 53999 { 54000 condition: { 54001 minWidth: 451 54002 }, 54003 54004 chartOptions: { 54005 chart: { 54006 height: '65%' 54007 } 54008 } 54009 }] 54010 } 54011 }); 54012 } 54013}; 54014 54015},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],296:[function(require,module,exports){ 54016const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 54017const csvParser = require('../../includes/csvParser'); 54018 54019module.exports = function (Highcharts, appPath) { 54020 const elementId = 'energy-indicators-absolute'; 54021 var units = ''; 54022 54023 if ($('#' + elementId).length > 0) { 54024 Highcharts.chart(elementId, { 54025 chart: { 54026 type: 'line', 54027 spacingBottom: 30, 54028 events: { 54029 load: creditsSizeAndPosition, 54030 redraw: creditsSizeAndPosition 54031 } 54032 }, 54033 credits: { 54034 enabled: true, 54035 href: null, 54036 style: { 54037 cursor: 'normal' 54038 } 54039 }, 54040 data: { 54041 csvURL: appPath +
54041'/use-of-energy/charts/' + elementId + '.csv', 54042 startRow: 5, 54043 firstRowAsNames: true, 54044 beforeParse: function (csv) { 54045 var parsedCSV = csvParser(csv); 54046 this.chart.title.update({ text: parsedCSV[0][0] }); 54047 units = parsedCSV[1][0]; 54048 this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } }); 54049 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 54050 this.chart.update( 54051 { 54052 accessibility: { 54053 description: parsedCSV[4][0], 54054 }, 54055 exporting: { 54056 menuItemDefinitions: 54057 { 54058 label: { 54059 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 54060 } 54061 }, 54062 buttons: { 54063 contextButton: { 54064 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 54065 } 54066 } 54067 } 54068 } 54069 ); 54070 return csv; 54071 } 54072 }, 54073 xAxis: { 54074 type: "category", 54075 labels: { 54076 format: "{value}" 54077 } 54078 }, 54079 yAxis: { 54080 labels: { 54081 format: "{value:.1f}" 54082 } 54083 }, 54084 plotOptions: { 54085 line: { 54086 marker: { 54087 enabled: true, 54088 radius: 5 54089 } 54090 } 54091 }, 54092 tooltip: { 54093 useHTML: true, 54094 shared: true, 54095 formatter: function () { 54096 let html = "<b>" + this.points[0].key + "</b><br/>"; 54097 this.points.filter(function (value) { 54098 html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25AC\u2009\u2009' + '</span><b>' + value.series.name + ': </b><span>' + value.y.toFixed(2) + ' ' + units + '</span><br/>'; 54099 }); 54100 return html; 54101 } 54102 }, 54103 responsive: { 54104 rules: [{ 54105 condition: { 54106 maxWidth: 450 54107 }, 54108 chartOptions: { 54109 chart: { 54110 height: 500 54111 } 54112 } 54113 }, 54114 { 54115 condition: { 54116 minWidth: 451 54117 }, 54118 54119 chartOptions: { 54120 chart: { 54121 height: '65%' 54122 } 54123 } 54124 }] 54125 } 54126 }); 54127 } 54128}; 54129 54130},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],297:[function(require,module,exports){ 54131const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 54132const csvParser = require('../../includes/csvParser'); 54133 54134module.exports = function (Highcharts, appPath) { 54135 const elementId = 'energy-indicators-index'; 54136 var units = ''; 54137 54138 if ($('#' + elementId).length > 0) { 54139 Highcharts.chart(elementId, { 54140 chart: { 54141 type: 'line', 54142 spacingBottom: 30, 54143 events: { 54144 load: creditsSizeAndPosition, 54145 redraw: creditsSizeAndPosition 54146 } 54147 }, 54148 credits: { 54149 enabled: true, 54150 href: null, 54151 style: { 54152 cursor: 'normal' 54153 } 54154 }, 54155 data: { 54156 csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv', 54157 startRow: 5, 54158 firstRowAsNames: true, 54159 beforeParse: function (csv) { 54160 var parsedCSV = csvParser(csv); 54161 this.chart.title.update({ text: parsedCSV[0][0] }); 54162 units = parsedCSV[1][0]; 54163 this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } }); 54164 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 54165 this.chart.update( 54166 { 54167 accessibility: { 54168 description: parsedCSV[4][0], 54169 }, 54170 exporting: { 54171 menuItemDefinitions: 54172 { 54173 label: { 54174 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 54175 } 54176 }, 54177 buttons: { 54178 contextButton: { 54179 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 54180 } 54181 } 54182 } 54183 } 54184 ); 54185 return csv; 54186 } 54187 }, 54188 xAxis: { 54189 type: "category", 54190 labels: { 54191 format: "{value}" 54192 } 54193 }, 54194 yAxis: { 54195 labels: { 54196 format: "{value:.1f}" 54197 }, 54198 maxPadding: 0 54199 }, 54200 plotOptions: { 54201 line: { 54202 marker: { 54203 enabled: true, 54204 radius: 5 54205 } 54206 } 54207 }, 54208 tooltip: { 54209 useHTML: true, 54210 shared: true, 54211 formatter: function () { 54212 let html = "<b>" + this.points[0].key + "</b><br/>"; 54213 this.points.filter(function (value) { 54214 html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25AC\u2009\u2009' + '</span><b>' + value.series.name + ': </b><span>' + value.y.toFixed(2) + ' ' + units + '</span><br/>'; 54215 }); 54216 return html; 54217 } 54218 }, 54219 responsive: { 54220 rules: [{ 54221 condition: { 54222 maxWidth: 450 54223 }, 54224 chartOptions: { 54225 chart: { 54226 height: 550 54227 } 54228 } 54229 }, 54230 { 54231 condition: { 54232 minWidth: 451, 54233 maxWidth: 668 54234 }, 54235 54236 chartOptions: { 54237 chart: { 54238 height: '70%' 54239 } 54240 } 54241 }, 54242 { 54243 condition: { 54244 minWidth: 669 54245 }, 54246 54247 chartOptions: { 54248 chart: { 54249 height: '65%' 54250 } 54251 } 54252 }] 54253 } 54254 }); 54255 } 54256}; 54257 54258},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],298:[function(require,module,exports){ 54259const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 54260const csvParser = require('../../includes/csvParser'); 54261 54262module.exports = function (Highcharts, appPath) { 54263 const elementId = 'energy-indicators-ratio'; 54264 var units = ''; 54265 54266 if ($('#' + elementId).length > 0) { 54267 Highcharts.chart(elementId, { 54268 chart: { 54269 type: 'line', 54270 spacingBottom: 30, 54271 events: { 54272 load: creditsSizeAndPosition, 54273 redraw: creditsSizeAndPosition 54274 } 54275 }, 54276 credits: { 54277 enabled: true, 54278 href: null, 54279 style: { 54280 cursor: 'normal' 54281 } 54282 }, 54283 data: { 54284 csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv', 54285 startRow: 5, 54286 firstRowAsNames: true, 54287 beforeParse: function (csv) { 54288 var parsedCSV = csvParser(csv); 54289 this.chart.title.update({ text: parsedCSV[0][0] }); 54290 units = parsedCSV[1][0]; 54291 this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } }); 54292 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 54293 this.chart.update( 54294 { 54295 accessibility: { 54296 description: parsedCSV[4][0], 54297 }, 54298 exporting: { 54299 menuItemDefinitions: 54300 { 54301 label: { 54302 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 54303 } 54304 }, 54305 buttons: { 54306 contextButton: { 54307 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 54308 } 54309 } 54310 } 54311 } 54312 ); 54313 return csv; 54314 } 54315 }, 54316 xAxis: { 54317 type: "category", 54318 labels: { 54319 format: "{value}" 54320 } 54321 }, 54322 yAxis: { 54323 labels: { 54324 format: "{value:.1f}" 54325 } 54326 }, 54327 plotOptions: { 54328 line: { 54329 marker: { 54330 enabled: true, 54331 radius: 5 54332 } 54333 } 54334 }, 54335 tooltip: { 54336 useHTML: true, 54337 shared: true, 54338 formatter: function () { 54339 let html = "<b>" + this.points[0].key + "</b><br/>"; 54340 this.points.filter(function (value) { 54341 html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25AC\u2009\u2009' + '</span><b>' + value.series.name + ': </b><span>' + value.y.toFixed(2) + ' ' + units + '</span><br/>'; 54342 }); 54343 return html; 54344 } 54345 }, 54346 responsive: { 54347 rules: [{ 54348 condition: { 54349 maxWidth: 450 54350 }, 54351 chartOptions: { 54352 chart: { 54353 height: 650 54354 } 54355 } 54356 }, 54357 { 54358 condition: { 54359 minWidth: 451, 54360 maxWidth: 690 54361 }, 54362 54363 chartOptions: { 54364 chart: { 54365 height: '80%' 54366 } 54367 } 54368 }, 54369 { 54370 condition: { 54371 minWidth: 691 54372 }, 54373 54374 chartOptions: { 54375 chart: { 54376 height: '65%' 54377 } 54378 } 54379 }] 54380 } 54381 }); 54382 } 54383}; 54384 54385},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],299:[function(require,module,exports){ 54386const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 54387const csvParser = require('../../includes/csvParser'); 54388 54389module.exports = function (Highcharts, appPath) { 54390 const elementId = 'energy-use-by-type-commercial-building'; 54391 var units; 54392 54393 if ($('#' + elementId).length > 0) { 54394 Highcharts.chart(elementId, { 54395 chart: { 54396 type: 'bar', 54397 spacingBottom: 25, 54398 events: { 54399 load: creditsSizeAndPosition, 54400 redraw: creditsSizeAndPosition 54401 } 54402 }, 54403 credits: { 54404 enabled: true, 54405 href: null, 54406 style: { 54407 cursor: 'normal' 54408 } 54409 }, 54410 title: { 54411 margin: 15 54412 }, 54413 data: { 54414 csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv', 54415 startRow: 4, 54416 firstRowAsNames: false, 54417 complete: function (options) { 54418 options.series[0].data.reverse(); 54419 }, 54420 beforeParse: function (csv) { 54421 var parsedCSV = csvParser(csv); 54422 this.chart.title.update({ text: parsedCSV[0][0] }); 54423 this.chart.credits.update({ text: parsedCSV[2][0] }); 54424 units = parsedCSV[1][0]; 54425 this.chart.subtitle.update({ 54426 text: parsedCSV[1][0], 54427 style: { 54428 color: "#888", 54429 fontWeight: "bold", 54430 fontSize: "12px", 54431 fill: "#888" 54432 } 54433 }); 54434 this.chart.update( 54435 { 54436 accessibility: { 54437 description: parsedCSV[3][0], 54438 }, 54439 exporting: { 54440 menuItemDefinitions: 54441 { 54442 label: { 54443 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 54444 } 54445 }, 54446 buttons: { 54447 contextButton: { 54448 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 54449 } 54450 } 54451 } 54452 } 54453 ); 54454 return csv; 54455 } 54456 }, 54457 yAxis: { 54458 tickInterval: 200, 54459 labels: { 54460 format: '{value:,.0f}', 54461 }, 54462 title: { 54463 text: '' 54464 } 54465 }, 54466 tooltip: { 54467 useHTML: true, 54468 formatter: function () { 54469 var unitsSplit = units.split(' '); 54470 unitsSplit.splice(0, 3); 54471 return '<b>' + this.key + '</b>: ' + Highcharts.numberFormat(this.y) + ' ' + unitsSplit.join(' '); 54472 } 54473 }, 54474 legend: { 54475 enabled: false 54476 }, 54477 responsive: { 54478 rules: [{ 54479 condition: { 54480 maxWidth: 450 54481 }, 54482 chartOptions: { 54483 chart: { 54484 height: 450 54485 } 54486 } 54487 }, 54488 { 54489 condition: { 54490 minWidth: 451 54491 }, 54492 54493 chartOptions: { 54494 chart: { 54495 height: '65%' 54496 } 54497 } 54498 }] 54499 } 54500 }); 54501 } 54502}; 54503 54504},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],300:[function(require,module,exports){ 54505const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 54506const csvParser = require('../../includes/csvParser'); 54507 54508module.exports = function (Highcharts, appPath) { 54509 const elementId = 'ev-cars-projections'; 54510 var units = ''; 54511 54512 if ($('#' + elementId).length > 0) { 54513 Highcharts.chart(elementId, { 54514 chart: { 54515 type: 'line', 54516 spacingBottom: 30, 54517 events: { 54518 load: creditsSizeAndPosition, 54519 redraw: creditsSizeAndPosition 54520 } 54521 }, 54522 credits: { 54523 enabled: true, 54524 href: null, 54525 style: { 54526 cursor: 'normal' 54527 } 54528 }, 54529 data: { 54530
54530 csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv', 54531 startRow: 5, 54532 firstRowAsNames: true, 54533 beforeParse: function (csv) { 54534 var parsedCSV = csvParser(csv); 54535 this.chart.title.update({ text: parsedCSV[0][0] }); 54536 units = parsedCSV[1][0]; 54537 this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } }); 54538 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 54539 this.chart.update( 54540 { 54541 accessibility: { 54542 description: parsedCSV[4][0], 54543 }, 54544 exporting: { 54545 menuItemDefinitions: 54546 { 54547 label: { 54548 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 54549 } 54550 }, 54551 buttons: { 54552 contextButton: { 54553 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 54554 } 54555 } 54556 } 54557 } 54558 ); 54559 return csv; 54560 } 54561 }, 54562 xAxis: { 54563 type: "category", 54564 labels: { 54565 format: "{value}" 54566 } 54567 }, 54568 yAxis: { 54569 labels: { 54570 format: "{value:.2f}%" 54571 } 54572 }, 54573 tooltip: { 54574 useHTML: true, 54575 shared: true, 54576 formatter: function () { 54577 let html = "<b>" + this.points[0].key + "</b><br/>"; 54578 this.points.filter(function (value) { 54579 html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25AC\u2009\u2009' + '</span><b>' + value.series.name + ': </b><span>' + Highcharts.numberFormat(value.y,2) + '% ' + '</span><br/>'; 54580 }); 54581 return html; 54582 } 54583 }, 54584 responsive: { 54585 rules: [{ 54586 condition: { 54587 maxWidth: 450 54588 }, 54589 chartOptions: { 54590 chart: { 54591 height: 500 54592 } 54593 } 54594 }, 54595 { 54596 condition: { 54597 minWidth: 451 54598 }, 54599 54600 chartOptions: { 54601 chart: { 54602 height: '65%' 54603 } 54604 } 54605 }] 54606 } 54607 }); 54608 } 54609}; 54610 54611},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],301:[function(require,module,exports){ 54612const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 54613const csvParser = require('../../includes/csvParser'); 54614 54615module.exports = function (Highcharts, appPath) { 54616 const elementId = 'industrial-sector-energy-consumption-by-type-industry'; 54617 54618 if ($('#' + elementId).length > 0) { 54619 Highcharts.chart(elementId, { 54620 chart: { 54621 type: 'pie', 54622 spacingBottom: 25, 54623 events: { 54624 load: creditsSizeAndPosition, 54625 redraw: creditsSizeAndPosition 54626 } 54627 }, 54628 credits: { 54629 enabled: true, 54630 href: null, 54631 style: { 54632 cursor: 'normal' 54633 } 54634 }, 54635 title: { 54636 text: '', 54637 margin: 5 54638 }, 54639 data: { 54640 csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv', 54641 startRow: 5, 54642 firstRowAsNames: false, 54643 complete: function (options) { 54644 var point, i; 54645 54646 for (i = 0; i < options.series[0].data.length; i++) { 54647 point = { name: options.series[0].data[i][0], y: options.series[0].data[i][1] } 54648 options.series[0].data[i] = point; 54649 if (point.name === "chemicals") { 54650 point.color = Highcharts.eiaColors.blue; 54651 point.dataLabels = { distance: -30 }; 54652 } 54653 else if (point.name === "petroleum and coal products") { 54654 point.color = Highcharts.eiaColors.brown; 54655 } 54656 else if (point.name === "paper") { 54657 point.color = Highcharts.eiaColors.green; 54658 point.dataLabels = { distance: -30 }; 54659 } 54660 else if (point.name === "primary metals") { 54661 point.color = Highcharts.eiaColors.red; 54662 } 54663 else if (point.name === "food") { 54664 point.color = Highcharts.eiaColors.darkBrown; 54665 } 54666 else if (point.name === "non-metallic minerals") { 54667 point.color = Highcharts.eiaColors.yellow; 54668 point.dataLabels = { distance: -30 }; 54669 } 54670 else if (point.name === "all other") { 54671 point.color = Highcharts.eiaColors.darkBlue; 54672 } 54673 else { 54674 point.color = Highcharts.eiaColors.darkGreen; 54675 } 54676 } 54677 }, 54678 beforeParse: function (csv) { 54679 var parsedCSV = csvParser(csv); 54680 this.chart.title.update({ text: parsedCSV[0][0] }); 54681 this.chart.subtitle.update({ text: parsedCSV[1][0] }) 54682 this.chart.credits.update({ text: parsedCSV[2][0] + '<br/>' + parsedCSV[3][0] }); 54683 this.chart.update( 54684 { 54685 accessibility: { 54686 description: parsedCSV[4][0], 54687 }, 54688 exporting: { 54689 menuItemDefinitions: 54690 { 54691 label: { 54692 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 54693 } 54694 }, 54695 buttons: { 54696 contextButton: { 54697 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 54698 } 54699 } 54700 } 54701 } 54702 ); 54703 return csv; 54704 } 54705 }, 54706 plotOptions: { 54707 pie: { 54708 startAngle: -5, 54709 dataLabels: { 54710 enabled: true, 54711 format: "<strong>{point.name}</strong><br/> {point.percentage:.0f}%", 54712 distance: 10, 54713 color: "contrast", 54714 style: { 54715 "fontSize": "12px" 54716 } 54717 } 54718 } 54719 }, 54720 tooltip: { 54721 useHTML: true, 54722 formatter: function () { 54723 return "<span><b>" + this.key + "</b><br/>" + Math.round(this.percentage) + " %</span>"; 54724 } 54725 }, 54726 responsive: { 54727 rules: [{ 54728 condition: { 54729 maxWidth: 450 54730 }, 54731 54732 chartOptions: { 54733 chart: { 54734 height: 520 54735 }, 54736 plotOptions: { 54737 pie: { 54738 size: null, 54739 dataLabels: { 54740 enabled: false 54741 }, 54742 showInLegend: true 54743 } 54744 }, 54745 legend: { 54746 enabled: true 54747 } 54748 } 54749 }, 54750 { 54751 condition: { 54752 minWidth: 451 54753 }, 54754 54755 chartOptions: { 54756 chart: { 54757 height: '65%' 54758 }, 54759 plotOptions: { 54760 pie: { 54761 size: '75%', 54762 dataLabels: { 54763 enabled: true 54764 }, 54765 showInLegend: false 54766 } 54767 }, 54768 legend: { 54769 enabled: false 54770 } 54771 } 54772 }] 54773 } 54774 }); 54775 } 54776}; 54777 54778},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],302:[function(require,module,exports){ 54779const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 54780const csvParser = require('../../includes/csvParser'); 54781 54782module.exports = function (Highcharts, appPath) { 54783 const elementId = 'industrial-sector-energy-use-by-source'; 54784 var units = ''; 54785 54786 if ($('#' + elementId).length > 0) { 54787 Highcharts.chart(elementId, { 54788 chart: { 54789 type: 'area', 54790 spacingBottom: 30, 54791 events: { 54792 load: creditsSizeAndPosition, 54793 redraw: creditsSizeAndPosition 54794 } 54795 }, 54796 credits: { 54797 enabled: true, 54798 href: null, 54799 style: { 54800 cursor: 'normal' 54801 } 54802 }, 54803 title: { 54804 text: '' 54805 }, 54806 data: { 54807 csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv', 54808 startRow: 5, 54809 firstRowAsNames: true, 54810 beforeParse: function (csv) { 54811 var parsedCSV = csvParser(csv); 54812 this.chart.title.update({ text: parsedCSV[0][0] }); 54813 units = parsedCSV[1][0]; 54814 this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } }); 54815 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 54816 this.chart.update( 54817 { 54818 accessibility: { 54819 description: parsedCSV[4][0], 54820 }, 54821 exporting: { 54822 menuItemDefinitions: 54823 { 54824 label: { 54825 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 54826 } 54827 }, 54828 buttons: { 54829 contextButton: { 54830 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 54831 } 54832 } 54833 } 54834 } 54835 ); 54836 return csv; 54837 } 54838 54839 }, 54840 colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.green, Highcharts.eiaColors.yellow, Highcharts.eiaColors.red], 54841 xAxis: { 54842 labels: { 54843 format: "{value}", 54844 }, 54845 tickInterval: 10, 54846 startOnTick: true, 54847 minPadding: 0, 54848 maxPadding: 0 54849 }, 54850 legend: { 54851 reversed: true 54852 }, 54853 yAxis: { 54854 labels: { 54855 format: "{value:,.0f}" 54856 }, 54857 tickInterval: 5, 54858 reversedStacks: false 54859 }, 54860 plotOptions: { 54861 area: { 54862 stacking: 'normal', 54863 } 54864 }, 54865 tooltip: { 54866 useHTML: true, 54867 shared: true, 54868 formatter: function () { 54869 var html = '<b>' + this.x + '</b><br/>'; 54870 this.points.filter(function (value) { 54871 html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25CF\u2009\u2009' + '</span><b>' + value.series.name + ':</b> ' + value.y.toFixed(2) + ' ' + units + '<br/>'; 54872 }); 54873 return html; 54874 } 54875 }, 54876 responsive: { 54877 rules: [{ 54878 condition: { 54879 maxWidth: 450 54880 }, 54881 chartOptions: { 54882 chart: { 54883 height: 450 54884 } 54885 } 54886 }, 54887 { 54888 condition: { 54889 minWidth: 451 54890 }, 54891 54892 chartOptions: { 54893 chart: { 54894 height: '65%' 54895 } 54896 } 54897 }] 54898 } 54899 }); 54900 } 54901}; 54902 54903},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],303:[function(require,module,exports){ 54904const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 54905const csvParser = require('../../includes/csvParser'); 54906 54907module.exports = function (Highcharts, appPath) { 54908 const elementId = 'major-energy-sources-used-in-commercial-buildings'; 54909 var categories = []; 54910 54911 if ($('#' + elementId).length > 0) { 54912 Highcharts.chart(elementId, { 54913 chart: { 54914 type: 'bar', 54915 spacingBottom: 30, 54916 events: { 54917 load: creditsSizeAndPosition, 54918 redraw: creditsSizeAndPosition 54919 } 54920 }, 54921 credits: { 54922 enabled: true, 54923 href: null, 54924 style: { 54925 cursor: 'normal' 54926 } 54927 }, 54928 title: { 54929 margin: 5 54930 }, 54931 data: { 54932 csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv', 54933 startRow: 3, 54934 firstRowAsNames: false, 54935 beforeParse: function (csv) { 54936 var parsedCSV = csvParser(csv); 54937 this.chart.title.update({ text: parsedCSV[0][0] }); 54938 this.chart.credits.update({ text: parsedCSV[1][0] }); 54939 for (var i = 3; i < parsedCSV.length - 1; i++) { 54940 categories.push(parsedCSV[i][0] + " (" + parsedCSV[i][1] * 100 + "%)"); 54941 } 54942 this.chart.update( 54943 { 54944 accessibility: { 54945 description: parsedCSV[2][0], 54946 }, 54947 exporting: { 54948 menuItemDefinitions: 54949 { 54950 label: { 54951 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 54952 } 54953 }, 54954 buttons: { 54955 contextButton: { 54956 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 54957 } 54958 } 54959
54959 } 54960 } 54961 ); 54962 return csv; 54963 } 54964 }, 54965 colors: [Highcharts.eiaColors.yellow, Highcharts.eiaColors.blue, Highcharts.eiaColors.green, Highcharts.eiaColors.grey], 54966 xAxis: { 54967 categories: categories, 54968 labels: { 54969 enabled: false 54970 } 54971 }, 54972 yAxis: { 54973 tickWidth: 0, 54974 labels: { 54975 enabled: false 54976 }, 54977 title: { 54978 enabled: false 54979 }, 54980 gridLineWidth: 0 // no vertical gridlines 54981 }, 54982 plotOptions: { 54983 bar: { 54984 grouping: false, 54985 colorByPoint: true, 54986 dataLabels: { 54987 enabled: true, 54988 inside: true, 54989 align: "left", 54990 verticalAlign: "top", 54991 y: -20, 54992 style: { 54993 "textOutline": "none", 54994 "fontWeight": "bold" 54995 }, 54996 crop: false, 54997 overflow: "allow", 54998 formatter: function () { 54999 // converts to a percentage of the whole 55000 return '<span style="color: ' + this.point.color + '">' + this.point.category + '</span>'; 55001 } 55002 } 55003 } 55004 }, 55005 tooltip: { 55006 useHTML: true, 55007 formatter: function () { 55008 return this.x; 55009 } 55010 }, 55011 legend: { 55012 enabled: false 55013 }, 55014 responsive: { 55015 rules: [{ 55016 condition: { 55017 maxWidth: 400 55018 }, 55019 chartOptions: { 55020 chart: { 55021 height: 350 55022 } 55023 } 55024 }, 55025 { 55026 condition: { 55027 minWidth: 451 55028 }, 55029 55030 chartOptions: { 55031 chart: { 55032 height: '50%' 55033 } 55034 } 55035 }, 55036 { 55037 condition: { 55038 minWidth: 668 55039 }, 55040 55041 chartOptions: { 55042 chart: { 55043 height: '65%' 55044 } 55045 } 55046 }] 55047 } 55048 }); 55049 } 55050}; 55051 55052},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],304:[function(require,module,exports){ 55053const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 55054const csvParser = require('../../includes/csvParser'); 55055 55056module.exports = function (Highcharts, appPath) { 55057 const elementId = 'motor-gasoline-consumption-trans-light-fuel'; 55058 var units = ''; 55059 55060 if ($('#' + elementId).length > 0) { 55061 Highcharts.chart(elementId, { 55062 chart: { 55063 type: 'line', 55064 spacingBottom: 25, 55065 events: { 55066 load: creditsSizeAndPosition, 55067 redraw: creditsSizeAndPosition 55068 } 55069 }, 55070 credits: { 55071 enabled: true, 55072 href: null, 55073 style: { 55074 cursor: 'normal' 55075 } 55076 }, 55077 data: { 55078 csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv', 55079 startRow: 5, 55080 firstRowAsNames: true, 55081 complete: function (options) { 55082 if (options.series.length > 0) { 55083 options.series[0].yAxis = 0; 55084 options.series[1].yAxis = 1; 55085 } 55086 }, 55087 beforeParse: function (csv) { 55088 var parsedCSV = csvParser(csv); 55089 units = parsedCSV[1][0] + "," + parsedCSV[1][1]; 55090 this.chart.title.update({ text: parsedCSV[0][0] }); 55091 this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } }); 55092 this.chart.yAxis[1].update({ title: { text: parsedCSV[1][1] } }); 55093 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 55094 this.chart.update( 55095 { 55096 accessibility: { 55097 description: parsedCSV[4][0], 55098 }, 55099 exporting: { 55100 menuItemDefinitions: 55101 { 55102 label: { 55103 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 55104 } 55105 }, 55106 buttons: { 55107 contextButton: { 55108 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 55109 } 55110 } 55111 } 55112 } 55113 ); 55114 return csv; 55115 } 55116 55117 }, 55118 colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown], 55119 xAxis: { 55120 labels: { 55121 format: "{value}", 55122 }, 55123 tickInterval: 5, 55124 startOnTick: true, 55125 minPadding: 0, 55126 maxPadding: 0 55127 }, 55128 yAxis: [ 55129 { 55130 min: 0, 55131 tickInterval: 50, 55132 labels: { 55133 format: "{value}", 55134 style: { "color": Highcharts.eiaColors.blue } 55135 }, 55136 title: { 55137 style: { "color": Highcharts.eiaColors.blue } 55138 } 55139 }, 55140 { 55141 min: 0, 55142 tickInterval: 5, 55143 opposite: true, 55144 labels: { 55145 format: "{value}", 55146 style: { "color": Highcharts.eiaColors.brown } 55147 }, 55148 title: { 55149 style: { "color": Highcharts.eiaColors.brown } 55150 } 55151 } 55152 ], 55153 tooltip: { 55154 useHTML: true, 55155 shared: true, 55156 formatter: function () { 55157 var index = 0; 55158 if (this.points[0].series.name === "light-duty vehicle fuel economy") { 55159 index = 1; 55160 } 55161 const yItem = this.y.toFixed(2) + " " + units.split(',')[index]; 55162 return '<span>' + this.x + '<br/><span style="font-size: 16px;color:' + this.points[0].color + '">' + '\u25AC\u2009\u2009' + '</span><b>' + this.points[0].series.name + '</b><br/>' + yItem + '</span><br/><span style="font-size: 16px;color:' + this.points[1].color + '">' + '\u25AC\u2009\u2009' + '</span><b>' + this.points[1].series.name + '</b><br/>' + yItem + '</span>'; 55163 } 55164 }, 55165 responsive: { 55166 rules: [{ 55167 condition: { 55168 maxWidth: 450 55169 }, 55170 chartOptions: { 55171 chart: { 55172 height: 450 55173 } 55174 } 55175 }, 55176 { 55177 condition: { 55178 minWidth: 451 55179 }, 55180 55181 chartOptions: { 55182 chart: { 55183 height: '65%' 55184 } 55185 } 55186 }] 55187 } 55188 }); 55189 } 55190}; 55191 55192},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],305:[function(require,module,exports){ 55193const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 55194const csvParser = require('../../includes/csvParser'); 55195 55196module.exports = function (Highcharts, appPath) { 55197 const elementId = 'percentage-of-homes-with-refrigerators-freezers'; 55198 55199 if ($('#' + elementId).length > 0) { 55200 Highcharts.chart(elementId, { 55201 chart: { 55202 spacingBottom: 30, 55203 events: { 55204 load: creditsSizeAndPosition, 55205 redraw: creditsSizeAndPosition 55206 } 55207 }, 55208 credits: { 55209 enabled: true, 55210 href: null, 55211 style: { 55212 cursor: 'normal' 55213 } 55214 }, 55215 data: { 55216 csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv', 55217 startRow: 3, 55218 firstRowAsNames: true, 55219 complete: function (options) { 55220 var point = {}; 55221 if (options.series.length > 0) { 55222 for (var i = 0; i < options.series[0].data.length; i++) { 55223 point = { name: options.series[0].data[i][0], y: options.series[0].data[i][1] }; 55224 options.series[0].data[i] = point; 55225 switch (i) { 55226 case 0: 55227 options.series[0].data[i] = {}; 55228 break; 55229 case 1: 55230 point.color = Highcharts.eiaColors.green; 55231 break; 55232 case 2: 55233 point.color = Highcharts.eiaColors.green; 55234 break; 55235 case 3: 55236 point.color = Highcharts.eiaColors.green; 55237 break; 55238 case 4: 55239 options.series[0].data[i] = {}; 55240 break; 55241 case 6: 55242 point.color = Highcharts.eiaColors.blue; 55243 break; 55244 case 7: 55245 point.color = Highcharts.eiaColors.blue; 55246 break; 55247 case 8: 55248 point.color = Highcharts.eiaColors.blue; 55249 break; 55250 } 55251 } 55252 } 55253 }, 55254 beforeParse: function (csv) { 55255 var parsedCSV = csvParser(csv); 55256 this.chart.title.update({ text: parsedCSV[0][0] }); 55257 this.chart.credits.update({ text: parsedCSV[1][0] }); 55258 this.chart.yAxis[0].update({ title: { text: parsedCSV[2][0], style: { color: Highcharts.eiaColors.green } } }); 55259 this.chart.yAxis[1].update({ title: { text: parsedCSV[2][1], style: { color: Highcharts.eiaColors.blue } } }); 55260 this.chart.update( 55261 { 55262 accessibility: { 55263 description: parsedCSV[3][0], 55264 }, 55265 exporting: { 55266 menuItemDefinitions: 55267 { 55268 label: { 55269 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 55270 } 55271 }, 55272 buttons: { 55273 contextButton: { 55274 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 55275 } 55276 } 55277 } 55278 } 55279 ); 55280 return csv; 55281 } 55282 }, 55283 xAxis: { 55284 labels: { 55285 enabled: true 55286 } 55287 }, 55288 yAxis: [{ 55289 tickInterval: 10, 55290 min: 0, 55291 max: 100, 55292 color: Highcharts.eiaColors.blue, 55293 labels: { 55294 format: '{value}%', 55295 style: 55296 { 55297 color: Highcharts.eiaColors.green 55298 } 55299 } 55300 }, 55301 { 55302 tickInterval: 10, 55303 min: 0, 55304 max: 100, 55305 opposite: true, 55306 labels: { 55307 format: '${value}', 55308 style: 55309 { 55310 color: Highcharts.eiaColors.blue 55311 } 55312 } 55313 }], 55314 tooltip: { 55315 formatter: function () { 55316 var format = '<b>' + this.key + '</b>:'; 55317 this.color === Highcharts.eiaColors.blue ? format += '$' + this.y.toFixed(0) : format += this.y.toFixed(0) + '%'; 55318 return format; 55319 } 55320 }, 55321 series: [ 55322 { 55323 type: 'column', 55324 name: 'chart1', 55325 id: 'chart1', 55326 data: [] 55327 }, 55328 { 55329 type: 'column', 55330 name: 'chart2', 55331 id: 'chart2', 55332 data: [] 55333 } 55334 ], 55335 legend: { 55336 enabled: false 55337 }, 55338 responsive: { 55339 rules: [{ 55340 condition: { 55341 maxWidth: 450 55342 }, 55343 chartOptions: { 55344 chart: { 55345 height: 450 55346 } 55347 } 55348 }, 55349 { 55350 condition: { 55351 minWidth: 451 55352 }, 55353 55354 chartOptions: { 55355 chart: { 55356 height: '65%' 55357 } 55358 } 55359 }] 55360 } 55361 }); 55362 } 55363}; 55364 55365},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],306:[function(require,module,exports){ 55366const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 55367const csvParser = require('../../includes/csvParser'); 55368 55369module.exports = function (Highcharts, appPath) { 55370 const elementId = 'residential-energy-consumption-by-source'; 55371 var units = ''; 55372 55373 if ($('#' + elementId).length > 0) { 55374 Highcharts.chart(elementId, { 55375 chart: { 55376 type: 'area', 55377 events: { 55378 load: creditsSizeAndPosition, 55379 redraw: creditsSizeAndPosition 55380 } 55381 }, 55382 credits: { 55383 enabled: true, 55384 href: null, 55385 style: { 55386 cursor: 'normal' 55387 } 55388 }, 55389 data: { 55390 csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv', 55391 startRow: 5, 55392 firstRowAsNames: true, 55393 complete: function (options) { 55394 if (options.series.length > 0) { 55395 options.series[4].color = Highcharts.eiaColors.yellow; 55396 options.series[3].color = Highcharts.eiaColors.green; 55397 options.series[2].color = Highcharts.eiaColors.red; 55398 options.series[1].color = Highcharts.eiaColors.blue;
55399 options.series[0].color = Highcharts.eiaColors.darkBlue; 55400 options.series.reverse(); 55401 } 55402 }, 55403 beforeParse: function (csv) { 55404 var parsedCSV = csvParser(csv); 55405 this.chart.title.update({ text: parsedCSV[0][0] }); 55406 this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } }); 55407 units = parsedCSV[1][0]; 55408 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 55409 this.chart.update( 55410 { 55411 accessibility: { 55412 description: parsedCSV[4][0], 55413 }, 55414 exporting: { 55415 menuItemDefinitions: 55416 { 55417 label: { 55418 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 55419 } 55420 }, 55421 buttons: { 55422 contextButton: { 55423 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 55424 } 55425 } 55426 } 55427 } 55428 ); 55429 return csv; 55430 } 55431 }, 55432 xAxis: { 55433 labels: { 55434 format: "{value}", 55435 type: 'category', 55436 }, 55437 tickInterval: 5, 55438 startOnTick: true, 55439 minPadding: 0, 55440 maxPadding: 0 55441 }, 55442 yAxis: { 55443 tickInterval: 2, 55444 max: 12, 55445 labels: { 55446 format: "{value:,.0f}" 55447 } 55448 }, 55449 plotOptions: { 55450 area: { 55451 stacking: 'normal', 55452 } 55453 }, 55454 tooltip: { 55455 useHTML: true, 55456 shared: true, 55457 formatter: function () { 55458 var html = '<b>' + this.x + '</b><br/>'; 55459 this.points.filter(function (value) { 55460 html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25CF\u2009\u2009' + '</span><b>' + value.series.name + ':</b> ' + value.y.toFixed(2) + ' ' + units + '<br/>'; 55461 }); 55462 return html; 55463 } 55464 }, 55465 legend: { 55466 reversed: true 55467 }, 55468 responsive: { 55469 rules: [{ 55470 condition: { 55471 maxWidth: 450 55472 }, 55473 chartOptions: { 55474 chart: { 55475 height: 500 55476 } 55477 } 55478 }, 55479 { 55480 condition: { 55481 minWidth: 451 55482 }, 55483 55484 chartOptions: { 55485 chart: { 55486 height: '65%' 55487 } 55488 } 55489 }] 55490 } 55491 }); 55492 } 55493}; 55494 55495},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],307:[function(require,module,exports){ 55496const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 55497const csvParser = require('../../includes/csvParser'); 55498 55499module.exports = function (Highcharts, appPath) { 55500 const elementId = 'residential-site-electricity-consumption-by-enduse'; 55501 var units = ''; 55502 55503 if ($('#' + elementId).length > 0) { 55504 Highcharts.chart(elementId, { 55505 chart: { 55506 type: 'bar', 55507 spacingBottom: 35, 55508 events: { 55509 load: creditsSizeAndPosition, 55510 redraw: creditsSizeAndPosition 55511 } 55512 }, 55513 credits: { 55514 enabled: true, 55515 href: null, 55516 style: { 55517 cursor: 'normal' 55518 } 55519 }, 55520 title: { 55521 text: '', 55522 margin: 15 55523 }, 55524 data: { 55525 csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv', 55526 startRow: 4, 55527 firstRowAsNames: false, 55528 55529 beforeParse: function (csv) { 55530 var parsedCSV = csvParser(csv); 55531 this.chart.title.update({ useHTML: true, text: parsedCSV[0][0] }); 55532 this.chart.subtitle.update({ text: '<span style="color:#888;font-weight:bold;font-size:12px;fill:#888;">' + parsedCSV[1][0] + '</span>' }); 55533 units = parsedCSV[1][0]; 55534 this.chart.credits.update({ text: parsedCSV[2][0] }); 55535 this.chart.update( 55536 { 55537 accessibility: { 55538 description: parsedCSV[3][0], 55539 }, 55540 exporting: { 55541 menuItemDefinitions: 55542 { 55543 label: { 55544 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 55545 } 55546 }, 55547 buttons: { 55548 contextButton: { 55549 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 55550 } 55551 } 55552 } 55553 } 55554 ); 55555 return csv; 55556 } 55557 55558 }, 55559 yAxis: { 55560 title: { 55561 enabled: false 55562 }, 55563 labels: { 55564 format: '{value:.1f}%',
55565 align: 'right', 55566 } 55567 }, 55568 xAxis: { 55569 labels: { 55570 style: { 55571 textOverflow: 'none', 55572 lineHeight: '12px' 55573 } 55574 } 55575 }, 55576 legend: { 55577 enabled: false 55578 }, 55579 tooltip: { 55580 useHTML: true, 55581 formatter: function () { 55582 return "<span><b>" + this.key + "</b><br/> " + Highcharts.numberFormat(this.y, 1) + "%</span> " + units; 55583 } 55584 }, 55585 responsive: { 55586 rules: [{ 55587 condition: { 55588 maxWidth: 450 55589 }, 55590 55591 chartOptions: { 55592 chart: { 55593 height: 700 55594 } 55595 } 55596 }, 55597 { 55598 condition: { 55599 minWidth: 451 55600 }, 55601 55602 chartOptions: { 55603 chart: { 55604 height: '65%' 55605 } 55606 } 55607 }] 55608 } 55609 }); 55610 } 55611}; 55612 55613},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],308:[function(require,module,exports){ 55614const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 55615const csvParser = require('../../includes/csvParser'); 55616 55617module.exports = function (Highcharts, appPath) { 55618 const elementId = 'total-energy-consumption-by-end-use-sector-column'; 55619 var units; 55620 55621 if ($('#' + elementId).length > 0) { 55622 Highcharts.chart(elementId, { 55623 chart: { 55624 spacingBottom: 25, 55625 events: { 55626 load: creditsSizeAndPosition, 55627 redraw: creditsSizeAndPosition 55628 }, 55629 type: 'column' 55630 }, 55631 credits: { 55632 enabled: true, 55633 href: null, 55634 style: { 55635 cursor: 'normal' 55636 } 55637 }, 55638 data: { 55639 csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv', 55640 startRow: 5, 55641 firstRowAsNames: true, 55642 beforeParse: function (csv) { 55643 var parsedCSV = csvParser(csv); 55644 this.chart.title.update({ text: parsedCSV[0][0] }); 55645 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 55646 this.chart.yAxis[0].update({ title: { text: "<span>" + parsedCSV[1][0] + "</span>" } }); 55647 units = parsedCSV[1][0]; 55648 this.chart.update( 55649 { 55650 accessibility: { 55651 description: parsedCSV[4][0], 55652 }, 55653 exporting: { 55654 menuItemDefinitions: 55655 { 55656 label: { 55657 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 55658 } 55659 }, 55660 buttons: { 55661 contextButton: { 55662 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 55663 } 55664 } 55665 } 55666 } 55667 ); 55668 return csv; 55669 } 55670 }, 55671 xAxis: { 55672 labels: { 55673 enabled: true, 55674 format: '{value}' 55675 }, 55676 type: 'category' 55677 }, 55678 yAxis: [{ 55679 //tickInterval: 2000, 55680 //max: 20000, 55681 labels: { 55682 format: '{value:,.0f}' 55683 } 55684 }], 55685 tooltip: { 55686 useHTML: true, 55687 shared: true, 55688 formatter: function () { 55689 var format = '<b>' + this.points[0].key + '</b><br/>'; 55690 for (var i = 0; i < this.points.length; i++) { 55691 format += '<span style="font-size: 16px;color:' + this.points[i].color + '">\u25CF\u2009\u2009</span><b>' + this.points[i].series.name + ':</b> <span>' + Highcharts.numberFormat(this.points[i].y, 2) + ' ' + units + '</span><br/>'; 55692 } 55693 return format; 55694 } 55695 }, 55696 colors: [Highcharts.eiaColors.green, Highcharts.eiaColors.brown, Highcharts.eiaColors.blue], 55697 legend: { 55698 enabled: true, 55699 reversed: true 55700 }, 55701 plotOptions: { 55702 column: { 55703 stacking: 'normal', 55704 dataLabels: { 55705 enabled: true, 55706 useHTML: true, 55707 style: { 55708 color: 'contrast' 55709 }, 55710 formatter: function () { 55711 var seriesLabel = Highcharts.numberFormat(this.y, 0); 55712 if (seriesLabel <= 1) { 55713 seriesLabel = ' '; 55714 } 55715 return '<span>' + seriesLabel + '<span>'; 55716 } 55717 } 55718 } 55719 }, 55720 responsive: { 55721 rules: [{ 55722 condition: { 55723 maxWidth: 450 55724 }, 55725 chartOptions: { 55726 chart: { 55727 height: 500 55728 }, 55729 plotOptions: { 55730 column: { 55731 dataLabels: { 55732 enabled: false 55733 } 55734 } 55735 } 55736 } 55737 }, 55738 { 55739 condition: { 55740 minWidth: 451 55741 }, 55742 55743 chartOptions: { 55744 chart: { 55745 height: '65%' 55746 } 55747 } 55748 }] 55749 } 55750 }); 55751 } 55752}; 55753 55754},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],309:[function(require,module,exports){ 55755const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 55756const csvParser = require('../../includes/csvParser'); 55757 55758module.exports = function (Highcharts, appPath) { 55759 const elementId = 'total-energy-consumption-by-end-use-sector'; 55760 var units = ''; 55761 55762 if ($('#' + elementId).length > 0) { 55763 Highcharts.chart(elementId, { 55764 chart: { 55765 type: 'area', 55766 spacingBottom: 30, 55767 events: { 55768 load: creditsSizeAndPosition, 55769 redraw: creditsSizeAndPosition 55770 } 55771 }, 55772 credits: { 55773 enabled: true, 55774 href: null, 55775 style: { 55776 cursor: 'normal' 55777 } 55778 }, 55779 title: { 55780 text: '' 55781 }, 55782 data: { 55783 csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv', 55784 startRow: 5, 55785 firstRowAsNames: true, 55786 beforeParse: function (csv) { 55787 var parsedCSV = csvParser(csv); 55788 this.chart.title.update({ text: parsedCSV[0][0] }); 55789 units = parsedCSV[1][0]; 55790 this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } }); 55791 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 55792 this.chart.update( 55793 { 55794 accessibility: { 55795 description: parsedCSV[4][0], 55796 }, 55797 exporting: { 55798 menuItemDefinitions: 55799 { 55800 label: { 55801 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 55802 } 55803 }, 55804 buttons: { 55805 contextButton: { 55806 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 55807 } 55808 } 55809 } 55810 } 55811 ); 55812 return csv; 55813 } 55814 55815 }, 55816 colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.green, Highcharts.eiaColors.yellow], 55817 xAxis: { 55818 labels: { 55819 format: "{value}", 55820 }, 55821 tickInterval: 5, 55822 startOnTick: true, 55823 minPadding: 0, 55824 maxPadding: 0 55825 }, 55826 yAxis: { 55827 labels: { 55828 format: "{value:,.0f}" 55829 }, 55830 max: 100, 55831 tickInterval: 10, 55832 reversedStacks: false 55833 }, 55834 plotOptions: { 55835 area: { 55836 stacking: 'normal', 55837 } 55838 }, 55839 tooltip: { 55840 useHTML: true, 55841 shared: true, 55842 formatter: function () { 55843 var html = '<b>' + this.x + '</b><br/>'; 55844 this.points.filter(function (value) { 55845 html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25CF\u2009\u2009' + '</span><b>' + value.series.name + ':</b> ' + value.y.toFixed(2) + ' ' + units + '<br/>'; 55846 }); 55847 return html; 55848 } 55849 }, 55850 responsive: { 55851 rules: [{ 55852 condition: { 55853 maxWidth: 450 55854 }, 55855 chartOptions: { 55856 chart: { 55857 height: 500 55858 } 55859 } 55860 }, 55861 { 55862 condition: { 55863 minWidth: 451 55864 }, 55865 55866 chartOptions: { 55867 chart: { 55868 height: '65%' 55869 } 55870 } 55871 }] 55872 } 55873 }); 55874 } 55875}; 55876 55877},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],310:[function(require,module,exports){ 55878const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 55879const csvParser = require('../../includes/csvParser'); 55880 55881module.exports = function (Highcharts, appPath) { 55882 const elementId = 'total-fuel-consumption-in-manufacturing'; 55883 var units; 55884 55885 if ($('#' + elementId).length > 0) { 55886 Highcharts.chart(elementId, { 55887 chart: { 55888 spacingBottom: 25, 55889 events: { 55890 load: creditsSizeAndPosition, 55891 redraw: creditsSizeAndPosition 55892 }, 55893 type: 'column' 55894 }, 55895 credits: { 55896 enabled: true, 55897 href: null, 55898 style: { 55899 cursor: 'normal' 55900 } 55901 }, 55902 data: { 55903 csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv', 55904 startRow: 5, 55905 firstRowAsNames: true, 55906 beforeParse: function (csv) { 55907 var parsedCSV = csvParser(csv); 55908 this.chart.title.update({ text: parsedCSV[0][0] }); 55909 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 55910 this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } }); 55911 units = parsedCSV[1][0]; 55912 this.chart.update( 55913 { 55914 accessibility: { 55915 description: parsedCSV[4][0], 55916 }, 55917 exporting: { 55918 menuItemDefinitions: 55919 { 55920 label: { 55921 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 55922 } 55923 }, 55924 buttons: { 55925 contextButton: { 55926 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 55927 } 55928 } 55929 } 55930 } 55931 ); 55932 return csv; 55933 } 55934 }, 55935 colors: [Highcharts.eiaColors.lightBlue, Highcharts.eiaColors.darkBrown, Highcharts.eiaColors.red, Highcharts.eiaColors.yellow, Highcharts.eiaColors.green, Highcharts.eiaColors.brown, Highcharts.eiaColors.blue], 55936 xAxis: { 55937 labels: { 55938 enabled: true, 55939 format: '{value}' 55940 }, 55941 type: 'category' 55942 }, 55943 yAxis: [{ 55944 tickInterval: 2000, 55945 labels: { 55946 format: '{value:,.0f}' 55947 } 55948 }], 55949 tooltip: { 55950 useHTML: true, 55951 shared: true, 55952 formatter: function () { 55953 var format = '<b>' + this.points[0].key + '</b><br/>'; 55954 for (var i = 0; i < this.points.length; i++) { 55955 format += '<span style="font-size: 16px;color:' + this.points[i].color + '">\u25CF\u2009\u2009</span><b>' + this.points[i].series.name + ':</b> <span>' + Highcharts.numberFormat(this.points[i].y) + ' ' + units + ' (' + this.points[i].percentage.toFixed(1) + '%)</span><br/>'; 55956 } 55957 return format; 55958 } 55959 }, 55960 legend: { 55961 enabled: true, 55962 }, 55963 plotOptions: { 55964 column: { 55965 stacking: 'normal', 55966 dataLabels: { 55967 enabled: true, 55968 style: { 55969 color: 'contrast', 55970 textOutline: 'none' 55971 }, 55972 formatter: function () { 55973 return '<span>' + Highcharts.numberFormat(this.point.percentage, 1) + '%<span>'; 55974 } 55975 } 55976 } 55977 }, 55978 responsive: { 55979 rules: [{ 55980 condition: { 55981 maxWidth: 450 55982 }, 55983 chartOptions: { 55984 chart: { 55985 height: 500 55986 }, 55987 plotOptions: { 55988 column: { 55989 dataLabels: { 55990 enabled: false 55991 } 55992 } 55993 } 55994 } 55995 }, 55996 { 55997 condition: { 55998 minWidth: 451 55999 }, 56000 56001 chartOptions: { 56002 chart: { 56003 height: '65%' 56004 } 56005 } 56006 }] 56007 } 56008 }); 56009 } 56010}; 56011 56012},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],311:[function(require,module,exports){ 56013const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 56014const csvParser = require('../../includes/csvParser'); 56015 56016module.exports = function (Highcharts, appPath) { 56017 const elementId = 'transportation-by-type'; 56018 var categories = []; 56019 56020 if ($('#' + elementId).length > 0) { 56021 Highcharts.chart(elementId, { 56022 chart: { 56023 type: 'bar', 56024 spacingBottom: 40, 56025 events: { 56026 load: creditsSizeAndPosition, 56027
56027 redraw: creditsSizeAndPosition 56028 } 56029 }, 56030 credits: { 56031 enabled: true, 56032 href: null, 56033 style: { 56034 cursor: 'normal' 56035 } 56036 }, 56037 title: { 56038 margin: 15 56039 }, 56040 data: { 56041 csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv', 56042 startRow: 4, 56043 firstRowAsNames: false, 56044 beforeParse: function (csv) { 56045 var parsedCSV = csvParser(csv); 56046 this.chart.title.update({ text: parsedCSV[0][0] }); 56047 this.chart.credits.update({ text: parsedCSV[1][0] + '<br>' + parsedCSV[2][0]}); 56048 this.chart.update( 56049 { 56050 accessibility: { 56051 description: parsedCSV[3][0], 56052 }, 56053 exporting: { 56054 menuItemDefinitions: 56055 { 56056 label: { 56057 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 56058 } 56059 }, 56060 buttons: { 56061 contextButton: { 56062 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 56063 } 56064 } 56065 } 56066 } 56067 ); 56068 return csv; 56069 } 56070 }, 56071 colors: [Highcharts.eiaColors.darkPurple, Highcharts.eiaColors.lightBlue, Highcharts.eiaColors.lightGreen, Highcharts.eiaColors.darkBrown, Highcharts.eiaColors.lightPurple, Highcharts.eiaColors.blue, Highcharts.eiaColors.darkGreen, Highcharts.eiaColors.brown, Highcharts.eiaColors.lightBrown], 56072 xAxis: { 56073 categories: categories, 56074 labels: { 56075 enabled: false 56076 } 56077 }, 56078 yAxis: { 56079 tickWidth: 0, 56080 labels: { 56081 enabled: false 56082 }, 56083 title: { 56084 enabled: false 56085 }, 56086 gridLineColor: "none" // no vertical gridlines 56087 }, 56088 plotOptions: { 56089 bar: { 56090 grouping: false, 56091 pointPadding: 0, 56092 groupPadding: 0, 56093 colorByPoint: true, 56094 dataLabels: { 56095 enabled: true, 56096 inside: true, 56097 align: "left", 56098 verticalAlign: "top", 56099 style: { 56100 "textOutline": "none", 56101 "fontWeight": "bold" 56102 }, 56103 crop: false, 56104 overflow: "allow", 56105 formatter: function () { 56106 // converts to a percentage of the whole 56107 return this.y >= 1 ? '<span style="color: ' + this.point.color + '">' + this.point.name + ' ' + Highcharts.numberFormat(this.point.y, 0) + '%</span>' :'<span style="color: ' + this.point.color + '">' + this.point.name + ' <1%</span>' ; 56108 } 56109 } 56110 } 56111 }, 56112 tooltip: { 56113 useHTML: true, 56114 formatter: function () { 56115 return this.y >= 1 ? '<b>' + this.key + '</b><br/>' + Highcharts.numberFormat(this.y, 0) + '%' : '<b>' + this.key + '</b><br/><1%'; 56116 } 56117 }, 56118 legend: { 56119 enabled: false 56120 }, 56121 responsive: { 56122 rules: [{ 56123 condition: { 56124 maxWidth: 450 56125 }, 56126 56127 chartOptions: { 56128 chart: { 56129 height: 540 56130 }, 56131 plotOptions: { 56132 bar: { 56133 dataLabels: { 56134 y: -21, 56135 style: { 56136 "fontSize": "14px" 56137 } 56138 } 56139 }, 56140 series: { 56141 pointWidth: 18 56142 } 56143 } 56144 } 56145 }, 56146 { 56147 condition: { 56148 minWidth: 451 56149 }, 56150 chartOptions: { 56151 chart: { 56152 height: '70%' 56153 }, 56154 plotOptions: { 56155 bar: { 56156 dataLabels: { 56157 y: -21, 56158 style: { 56159 "fontSize": "14px" 56160 } 56161 } 56162 }, 56163 series: { 56164 pointWidth: 18 56165 } 56166 } 56167 } 56168 }] 56169 } 56170 }); 56171 } 56172}; 56173 56174},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],312:[function(require,module,exports){ 56175const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 56176const csvParser = require('../../includes/csvParser'); 56177 56178module.exports = function (Highcharts, appPath) { 56179 const elementId = 'transportation-energy-source-fuels'; 56180 56181 if ($('#' + elementId).length > 0) { 56182 Highcharts.chart(elementId, { 56183 chart: { 56184 type: 'pie', 56185 spacingBottom: 25, 56186 events: { 56187 load: creditsSizeAndPosition, 56188 redraw: creditsSizeAndPosition 56189 } 56190 }, 56191 credits: { 56192 enabled: false, 56193 href: null, 56194 style: { 56195 cursor: 'normal' 56196 } 56197 }, 56198 caption: { 56199 verticalAlign: 'bottom', 56200 useHTML: true, 56201 style: { 56202 color: '#888', 56203 fontSize: '11px' 56204 }, 56205 x: 32, 56206 y: 33 56207 }, 56208 title: { 56209 text: '', 56210 margin: 5 56211 }, 56212 data: { 56213 csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv', 56214 startRow: 7, 56215 firstRowAsNames: false, 56216 complete: function (options) { 56217 var point, i; 56218 56219 for (i = 0; i < options.series[0].data.length; i++) { 56220 point = { name: options.series[0].data[i][0], y: options.series[0].data[i][1] }; 56221 options.series[0].data[i] = point; 56222 } 56223 }, 56224 beforeParse: function (csv) { 56225 var parsedCSV = csvParser(csv); 56226 this.chart.title.update({ useHTML: true, text: parsedCSV[0][0] }); 56227 this.chart.caption.update({ text: parsedCSV[1][0] + '<br>' + parsedCSV[2][0] + '<br>' + parsedCSV[3][0] + '<br>' + parsedCSV[4][0] + '<br>' + parsedCSV[5][0] }); 56228 this.chart.update( 56229 { 56230 accessibility: { 56231 description: parsedCSV[6][0], 56232 }, 56233 exporting: { 56234 menuItemDefinitions: 56235 { 56236 label: { 56237 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 56238 } 56239 }, 56240 buttons: { 56241 contextButton: { 56242 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 56243 } 56244 } 56245 } 56246 } 56247 ); 56248 return csv; 56249 } 56250 56251 }, 56252 colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.green, Highcharts.eiaColors.yellow, Highcharts.eiaColors.red, Highcharts.eiaColors.darkBrown], 56253 plotOptions: { 56254 pie: { 56255 size: '85%', 56256 startAngle: 0, 56257 dataLabels: { 56258 enabled: true, 56259 useHTML: true, 56260 format: "<strong>{point.name}</strong><br/>{point.percentage:.0f}%", 56261 distance: 30, 56262 color: Highcharts.eiaColors.darkGrey, 56263 style: { 56264 "fontSize": "12px" 56265 } 56266 } 56267 } 56268 }, 56269 tooltip: { 56270 useHTML: true, 56271 formatter: function () { 56272 return "<span><b>" + this.key + "</b><br/> " + Math.round(this.percentage) + "%</span>"; 56273 } 56274 }, 56275 responsive: { 56276 rules: [{ 56277 condition: { 56278 maxWidth: 450 56279 }, 56280 56281 chartOptions: { 56282 chart: { 56283 height: 540 56284 }, 56285 plotOptions: { 56286 pie: { 56287 size: null, 56288 dataLabels: { 56289 enabled: false 56290 }, 56291 showInLegend: true 56292 } 56293 }, 56294 legend: { 56295 enabled: true, 56296 useHTML: true 56297 } 56298 } 56299 }, 56300 { 56301 condition: { 56302 minWidth: 451 56303 }, 56304 56305 chartOptions: { 56306 chart: { 56307 height: '75%' 56308 }, 56309 plotOptions: { 56310 pie: { 56311 size: '65%', 56312 dataLabels: { 56313 enabled: true 56314 }, 56315 showInLegend: false 56316 } 56317 }, 56318 legend: { 56319 enabled: false 56320 } 56321 } 56322 }] 56323 } 56324 }); 56325 } 56326}; 56327 56328},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],313:[function(require,module,exports){ 56329const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 56330const csvParser = require('../../includes/csvParser'); 56331 56332module.exports = function (Highcharts, appPath) { 56333 const elementId = 'us-average-by-census-region-selected-years'; 56334 var units = ''; 56335 56336 if ($('#' + elementId).length > 0) { 56337 Highcharts.chart(elementId, { 56338 chart: { 56339 type: 'column', 56340 spacingBottom: 30, 56341 events: { 56342 load: creditsSizeAndPosition, 56343 redraw: creditsSizeAndPosition 56344 } 56345 }, 56346 credits: { 56347 enabled: true, 56348 href: null, 56349 style: { 56350 cursor: 'normal' 56351 } 56352 }, 56353 data: { 56354 csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv', 56355 startRow: 5, 56356 firstRowAsNames: true, 56357 beforeParse: function (csv) { 56358 var parsedCSV = csvParser(csv); 56359 this.chart.title.update({ text: parsedCSV[0][0] }); 56360 units = parsedCSV[1][0]; 56361 this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } }); 56362 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 56363 this.chart.update( 56364 { 56365 accessibility: { 56366 description: parsedCSV[4][0], 56367 }, 56368 exporting: { 56369 menuItemDefinitions: 56370 { 56371 label: { 56372 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 56373 } 56374 }, 56375 buttons: { 56376 contextButton: { 56377 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 56378 } 56379 } 56380 } 56381 } 56382 ); 56383 return csv; 56384 } 56385 }, 56386 colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.green, Highcharts.eiaColors.yellow], 56387 xAxis: { 56388 labels: { 56389 enabled: true 56390 } 56391 }, 56392 yAxis: { 56393 tickInterval: 10, 56394 labels: { 56395 format: '{value}' 56396 } 56397 }, 56398 tooltip: { 56399 formatter: function () { 56400 return '<b>' + this.key + '</b><br/><b>' + this.series.name + ': </b>' + this.y.toFixed(0) + ' ' + units; 56401 } 56402 }, 56403 legend: { 56404 enabled: true 56405 }, 56406 responsive: { 56407 rules: [{ 56408 condition: { 56409 maxWidth: 450 56410 }, 56411 chartOptions: { 56412 chart: { 56413 height: 500 56414 } 56415 } 56416 }, 56417 { 56418 condition: { 56419 minWidth: 451 56420 }, 56421 56422 chartOptions: { 56423 chart: { 56424 height: '65%' 56425 } 56426 } 56427 }] 56428 } 56429 }); 56430 } 56431}; 56432 56433},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],314:[function(require,module,exports){ 56434const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 56435const csvParser = require('../../includes/csvParser'); 56436 56437module.exports = function (Highcharts, appPath) { 56438 const elementId = 'us-energy-used-for-transportation'; 56439 56440 if ($('#' + elementId).length > 0) { 56441 Highcharts.chart(elementId, { 56442 chart: { 56443 type: 'pie', 56444 spacingBottom: 25, 56445 events: { 56446 load: creditsSizeAndPosition, 56447 redraw: creditsSizeAndPosition 56448 } 56449 }, 56450 credits: { 56451 enabled: true, 56452 href: null, 56453 style: { 56454 cursor: 'normal' 56455 } 56456 }, 56457 title: { 56458 text: '', 56459 margin: 5 56460 }, 56461 data: { 56462 csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv', 56463 startRow: 3, 56464 firstRowAsNames: false, 56465 beforeParse: function (csv) { 56466 var parsedCSV = csvParser(csv); 56467 this.chart.title.update({ text: parsedCSV[0][0] }); 56468 this.chart.credits.update({ text: parsedCSV[1][0] }); 56469 this.chart.update( 56470 { 56471 accessibility: { 56472 description: parsedCSV[2][0], 56473 }, 56474 exporting: { 56475 menuItemDefinitions: 56476 { 56477 label: { 56478 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 56479 } 56480 }, 56481 buttons: { 56482 contextButton: { 56483 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 56484 } 56485 } 56486 } 56487 } 56488 ); 56489 return csv; 56490 } 56491 }, 56492 colors: [Highcharts.eiaColors.brown, Highcharts.eiaColors.blue], 56493 plotOptions: { 56494
56494 pie: { 56495 startAngle: -100, 56496 dataLabels: { 56497 enabled: true, 56498 format: "<strong>{point.name}</strong><br/> {point.percentage:.0f}%", 56499 distance: 10, 56500 color: "contrast", 56501 style: { 56502 "fontSize": "12px" 56503 } 56504 } 56505 } 56506 }, 56507 tooltip: { 56508 useHTML: true, 56509 formatter: function () { 56510 return "<span><b>" + this.key + "</b><br/>" + Math.round(this.percentage) + " %</span>"; 56511 } 56512 }, 56513 responsive: { 56514 rules: [{ 56515 condition: { 56516 maxWidth: 450 56517 }, 56518 56519 chartOptions: { 56520 chart: { 56521 height: 410 56522 }, 56523 plotOptions: { 56524 pie: { 56525 size: null, 56526 dataLabels: { 56527 enabled: false 56528 }, 56529 showInLegend: true 56530 } 56531 }, 56532 legend: { 56533 enabled: true 56534 } 56535 } 56536 }, 56537 { 56538 condition: { 56539 minWidth: 451 56540 }, 56541 56542 chartOptions: { 56543 chart: { 56544 height: '65%' 56545 }, 56546 plotOptions: { 56547 pie: { 56548 size: '75%', 56549 dataLabels: { 56550 enabled: true 56551 }, 56552 showInLegend: false 56553 } 56554 }, 56555 legend: { 56556 enabled: false 56557 } 56558 } 56559 }] 56560 } 56561 }); 56562 } 56563}; 56564 56565},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],315:[function(require,module,exports){ 56566const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 56567const csvParser = require('../../includes/csvParser'); 56568 56569module.exports = function (Highcharts, appPath) { 56570 const elementId = 'us-households-total-by-census-region'; 56571 var units = ''; 56572 56573 if ($('#' + elementId).length > 0) { 56574 Highcharts.chart(elementId, { 56575 chart: { 56576 type: 'column', 56577 spacingBottom: 25, 56578 events: { 56579 load: creditsSizeAndPosition, 56580 redraw: creditsSizeAndPosition 56581 } 56582 }, 56583 credits: { 56584 enabled: true, 56585 href: null, 56586 style: { 56587 cursor: 'normal' 56588 } 56589 }, 56590 data: { 56591 csvURL: appPath + '/use-of-energy/charts/' + elementId + '.csv', 56592 startRow: 5, 56593 firstRowAsNames: true, 56594 56595 beforeParse: function (csv) { 56596 var parsedCSV = csvParser(csv); 56597 this.chart.title.update({ text: parsedCSV[0][0] }); 56598 units = parsedCSV[1][0]; 56599 this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } }); 56600 this.chart.credits.update({ text: parsedCSV[2][0] + '<br>' + parsedCSV[3][0] }); 56601 56602 this.chart.update( 56603 { 56604 accessibility: { 56605 description: parsedCSV[4][0], 56606 }, 56607 exporting: { 56608 menuItemDefinitions: 56609 { 56610 label: { 56611 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 56612 } 56613 }, 56614 buttons: { 56615 contextButton: { 56616 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 56617 } 56618 } 56619 } 56620 } 56621 ); 56622 return csv; 56623 } 56624 }, 56625 colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown, Highcharts.eiaColors.green, Highcharts.eiaColors.yellow], 56626 xAxis: { 56627 labels: { 56628 enabled: true 56629 } 56630 }, 56631 yAxis: { 56632 tickInterval: 20, 56633 maxPadding: 0.01, 56634 labels: { 56635 format: '{value}' 56636 } 56637 }, 56638 tooltip: { 56639 formatter: function () { 56640 return '<b>' + this.key + '</b><br/><b>' + this.series.name + ': </b>' + this.y.toFixed(0) + ' ' + units; 56641 } 56642 }, 56643 legend: { 56644 enabled: true 56645 }, 56646 responsive: { 56647 rules: [{ 56648 condition: { 56649 maxWidth: 450 56650 }, 56651 chartOptions: { 56652 chart: { 56653 height: 450 56654 } 56655 } 56656 }, 56657 { 56658 condition: { 56659 minWidth: 451 56660 }, 56661 56662 chartOptions: { 56663 chart: { 56664 height: '65%' 56665 } 56666 } 56667 }] 56668 } 56669 }); 56670 } 56671}; 56672 56673},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],316:[function(require,module,exports){ 56674const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 56675const csvParser = require('../../includes/csvParser'); 56676 56677module.exports = function (Highcharts, appPath) { 56678 const elementId = 'generation-share-total'; 56679 56680 if ($('#' + elementId).length > 0) { 56681 Highcharts.chart(elementId, { 56682 chart: { 56683 type: 'line', 56684 spacingBottom: 25, 56685 events: { 56686 load: creditsSizeAndPosition, 56687 redraw: creditsSizeAndPosition 56688 } 56689 }, 56690 credits: { 56691 enabled: true, 56692 href: null, 56693 style: { 56694 cursor: 'normal' 56695 } 56696 }, 56697 data: { 56698 csvURL: appPath + '/wind/charts/' + elementId + '.csv', 56699 startRow: 6, 56700 firstRowAsNames: true, 56701 complete: function (options) { 56702 if (options.series.length > 0) { 56703 options.series[0].yAxis = 0; 56704 options.series[1].yAxis = 1; 56705 } 56706 }, 56707 beforeParse: function (csv) { 56708 var parsedCSV = csvParser(csv); 56709 this.chart.title.update({ text: parsedCSV[0][0] }); 56710 this.chart.yAxis[0].update({ title: { text: parsedCSV[1][0] } }); 56711 this.chart.yAxis[1].update({ title: { text: parsedCSV[2][0] } }); 56712 this.chart.credits.update({ text: parsedCSV[3][0] + '<br>' + parsedCSV[4][0] }); 56713 this.chart.update( 56714 { 56715 accessibility: { 56716 description: parsedCSV[5][0], 56717 }, 56718 exporting: { 56719 menuItemDefinitions: 56720 { 56721 label: { 56722 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 56723 } 56724 }, 56725 buttons: { 56726 contextButton: { 56727 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 56728 } 56729 } 56730 } 56731 } 56732 ); 56733 return csv; 56734 } 56735 }, 56736 colors: [Highcharts.eiaColors.blue, Highcharts.eiaColors.brown], 56737 xAxis: { 56738 labels: { 56739 format: "{value}", 56740 distance: 10 56741 }, 56742 showLastLabel: true, 56743 startOnTick: true, 56744 tickPositioner: function () {
56745 const dateMin = this.dataMin; 56746 const dateMax = this.dataMax; 56747 const positions = []; 56748 for (let position = dateMin; position <= dateMax; position += 4) { // increment in 10 year periods 56749 positions.push(position); 56750 } 56751 return positions; 56752 } 56753 }, 56754 yAxis: [ 56755 { 56756 labels: { 56757 format: "{value}", 56758 style: { "color": Highcharts.eiaColors.blue } 56759 }, 56760 title: { 56761 style: { "color": Highcharts.eiaColors.blue } 56762 }, 56763 /*maxPadding: 0,*/ 56764 tickInterval: 50, 56765 alignTicks: false 56766 }, 56767 { 56768 opposite: true, 56769 labels: { 56770 format: "{value:.0f}%", 56771 style: { "color": Highcharts.eiaColors.brown } 56772 }, 56773 title: { 56774 style: { "color": Highcharts.eiaColors.brown } 56775 }, 56776 tickInterval: 0.5, 56777 /*maxPadding: 0,*/ 56778 alignTicks: false, 56779 gridLineColor: 'none' 56780 } 56781 ], 56782 tooltip: { 56783 useHTML: true, 56784 shared: true, 56785 formatter: function () { 56786 var html = '<b>' + this.x + '</b><br/>'; 56787 this.points.filter(function (value) { 56788 html += '<span style="font-size: 16px;color:' + value.series.color + '">' + '\u25AC\u2009\u2009' + '</span><b>' + value.series.name + ':</b> ' + value.y 56789 if (value.series.name === "generation") { 56790 html += ' ' + value.series.yAxis.axisTitle.textStr + '<br/>'; 56791 } else { 56792 html += '%<br/>'; 56793 } 56794 }); 56795 return html; 56796 } 56797 }, 56798 responsive: { 56799 rules: [{ 56800 condition: { 56801 maxWidth: 450 56802 }, 56803 chartOptions: { 56804 chart: { 56805 height: 400 56806 }, 56807 yAxis: [ 56808 { 56809 tickInterval: 50 56810 }, 56811 { 56812 tickInterval: 1 56813 } 56814 ] 56815 } 56816 }, 56817 { 56818 condition: { 56819 minWidth: 451 56820 }, 56821 56822 chartOptions: { 56823 chart: { 56824 height: '65%' 56825 }, 56826 yAxis: [ 56827 { 56828 tickInterval: 50 56829 }, 56830 { 56831 tickInterval: 0.5 56832 } 56833 ] 56834 } 56835 }] 56836 } 56837 }); 56838 } 56839}; 56840 56841},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],317:[function(require,module,exports){ 56842const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 56843const csvParser = require('../../includes/csvParser'); 56844 56845 56846module.exports = function (Highcharts, map, appPath) { 56847 const elementId = 'top-wind-states'; 56848 let mapData = Highcharts.geojson(map, 'map'); 56849 56850 // Our own options definition as two different series, will populate the data in the complete callback 56851 var seriesOptions = [ 56852 { 56853 id: "rank1", 56854 type: "map", 56855 allAreas: true, 56856 keys: ["postal-code"], 56857 joinBy: ['hc-a2', 'code'], 56858 data: [], 56859 mapData: mapData, 56860 states: { 56861 hover: { 56862 color: '#a4edba' 56863 } 56864 }, 56865 dataLabels: { 56866 enabled: true, 56867 formatter: function () { 56868 if (this.point.nameCode) { 56869 if (this.point.code === "VT" || this.point.code === "NH" || this.point.code === "MA" || this.point.code === "RI" || this.point.code === "CT" || this.point.code === "NJ" || this.point.code === "DE" || this.point.code === "MD" || this.point.code === "DC") { 56870 return this.point.code + " " + this.point.nameCode; 56871 } 56872 else { 56873 return this.point.code + "<br/>" + this.point.nameCode; 56874 } 56875 } 56876 return this.point.code 56877 }, 56878 style: { 56879 fontSize: '10px' 56880 } 56881 }, 56882 tooltip: { 56883 valueSuffix: '' 56884 }, 56885 showInLegend: false 56886 } 56887 ]; 56888 56889 if ($('#' + elementId).length > 0) { 56890 Highcharts.mapChart(elementId, { 56891 chart: { 56892 map: map, 56893 spacingBottom: 25, 56894 events: { 56895 load: creditsSizeAndPosition, 56896 redraw: creditsSizeAndPosition 56897 } 56898 }, 56899 credits: { 56900 enabled: false, 56901 href: null, 56902 style: { 56903 cursor: 'normal' 56904 } 56905 }, 56906 caption: { 56907 verticalAlign: 'bottom', 56908 useHTML: true, 56909 style: { 56910 color: '#888', 56911 fontSize: '11px' 56912 }, 56913 x: 32, 56914 y: 33 56915 }, 56916 tooltip: { 56917 enabled: true, 56918 useHTML: true, 56919 formatter: function () { 56920 if (this.point.nameCode) { 56921 return '<b>' + this.point.name + '</b><br/>' + this.point.nameCode; 56922 } 56923 else { 56924 return false; 56925 } 56926 }, 56927 style: { 56928 textAlign: 'center' 56929 } 56930 }, 56931 legend: { 56932 enabled: false 56933 }, 56934 data: { 56935 csvURL: appPath + '/wind/charts/' + elementId + '.csv', 56936 startRow: 4, 56937 firstRowAsNames: false, 56938 complete: function (options) { 56939 var point; 56940 for (var i = 0; i < options.series[0].data.length; i++) { 56941 point = options.series[0].data[i]; 56942 56943 if (point.value) { 56944 switch (point.value) { 56945 case 1: 56946 seriesOptions[0].data.push({ 56947 code: point.name, 56948 color: Highcharts.eiaColors.red, 56949 nameCode: "<span>#" + point.value + "</span>" 56950 }); 56951 break; 56952 case 2: 56953 seriesOptions[0].data.push({ 56954 code: point.name, 56955 color: Highcharts.eiaColors.blue, 56956 nameCode: "<span>#" + point.value + "</span>" 56957 }); 56958 break; 56959 case 3: 56960 seriesOptions[0].data.push({ 56961 code: point.name, 56962 color: Highcharts.eiaColors.yellow, 56963 nameCode: "<span>#" + point.value + "</span>" 56964 }); 56965 break; 56966 case 4: 56967 seriesOptions[0].data.push({ 56968 code: point.name, 56969 color: Highcharts.eiaColors.brown, 56970 nameCode: "<span>#" + point.value + "</span>" 56971 }); 56972 break; 56973 case 5: 56974 seriesOptions[0].data.push({ 56975 code: point.name, 56976 color: Highcharts.eiaColors.green, 56977 nameCode: "<span>#" + point.value + "</span>" 56978 }); 56979 break; 56980 default: 56981 seriesOptions[0].data.push({ 56982 code: point.name, 56983 color: "none", 56984 nameCode: "<span>#" + point.value + "</span>" 56985 }); 56986 } 56987 } 56988 } 56989 // replace series options parsed by Highcharts with our own options definition 56990 options.series = seriesOptions; 56991 }, 56992 beforeParse: function (csv) { 56993 var parsedCSV = csvParser(csv); 56994 this.chart.title.update({ text: parsedCSV[0][0] }); 56995 this.chart.caption.update({ text: parsedCSV[1][0] + '<br/>' + parsedCSV[2][0] }); 56996 56997 this.chart.update( 56998 { 56999 accessibility: { 57000 description: parsedCSV[3][0], 57001 }, 57002 exporting: { 57003 allowHTML: true, 57004 menuItemDefinitions: 57005 { 57006 label: { 57007 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 57008 } 57009 }, 57010 buttons: { 57011 contextButton: { 57012 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 57013 } 57014 } 57015 } 57016 } 57017 ); 57018 return csv; 57019 } 57020 }, 57021 responsive: { 57022 rules: [{ 57023 condition: { 57024 maxWidth: 321 57025 }, 57026 57027 chartOptions: { 57028 chart: { 57029 height: 330 57030 }, 57031 title: { 57032 margin: 5 57033 } 57034 } 57035 }, 57036 { 57037 condition: { 57038 minWidth: 322, 57039 maxWidth: 400 57040 }, 57041 57042 chartOptions: { 57043 chart: { 57044 height: 350 57045 }, 57046 title: { 57047 margin: 5 57048 } 57049 } 57050 }, 57051 { 57052 condition: { 57053 minWidth: 401, 57054 maxWidth: 450 57055 }, 57056 57057 chartOptions: { 57058 chart: { 57059 height: 380 57060 }, 57061 title: { 57062 margin: 5 57063 } 57064 } 57065 }, 57066 { 57067 condition: { 57068 minWidth: 451 57069 }, 57070 57071 chartOptions: { 57072 chart: { 57073 height: '65%' 57074 }, 57075 title: { 57076 margin: 15 57077 } 57078 } 57079 }] 57080 } 57081 57082 }); 57083 57084 } 57085}; 57086 57087},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}],318:[function(require,module,exports){ 57088const creditsSizeAndPosition = require('../../includes/creditsSizeAndPosition'); 57089const csvParser = require('../../includes/csvParser'); 57090 57091 57092module.exports = function (Highcharts, map, appPath) { 57093 57094 const elementId = 'utility-scale-wind-generation'; 57095 let units = ''; 57096 let mapData = Highcharts.geojson(map, 'map'); 57097 57098 // Our own options definition as two different series, will populate the data in the complete callback 57099 var seriesOptions = [ 57100 { 57101 id: "rank1", 57102 type: "map", 57103 mapData : mapData, 57104 allAreas: false, 57105 keys: ["postal-code"], 57106 joinBy: ['hc-a2', 'code'], 57107 data: [], 57108 mapData: mapData, 57109 borderWidth: 0.5, 57110 states: { 57111 hover: { 57112 brightness: 0, 57113 borderWidth: 1, 57114 borderColor: Highcharts.eiaColors.darkGrey 57115 } 57116 }, 57117 color: '#ffffff', 57118 dataLabels: { 57119 enabled: true, 57120 formatter: function () { 57121 if (this.point.properties) { 57122 return this.point.properties['hc-a2']; 57123 } 57124 return this.point.options.ucName; 57125 } 57126 }, 57127 tooltip: { 57128 valueSuffix: '' 57129 } 57130 }, 57131 { 57132 type: 'mapline', 57133 data: Highcharts.geojson(map, 'mapline'), 57134 color: 'silver', 57135 nullColor : 'silver', 57136 lineWidth : 1, 57137 showInLegend: false, 57138 enableMouseTracking: false, 57139 states : { 57140 inactive : { 57141 enabled : false 57142 } 57143 } 57144 } 57145 ]; 57146 57147 if ($('#' + elementId).length > 0) { 57148 Highcharts.mapChart(elementId, { 57149 chart: { 57150 map: map, 57151 spacingBottom: 25, 57152 events: { 57153 load: creditsSizeAndPosition, 57154 redraw: creditsSizeAndPosition 57155 } 57156 }, 57157 mapView : { 57158 insetOptions : { 57159 borderWidth : 1, 57160 borderColor : 'silver' 57161 } 57162 }, 57163 credits: { 57164 enabled: false, 57165 href: null, 57166 style: { 57167 cursor: 'normal' 57168 } 57169 }, 57170 caption: { 57171 verticalAlign: 'bottom', 57172 useHTML: true, 57173 margin: 0, 57174 style: { 57175 color: '#888', 57176 fontSize: '11px' 57177 }, 57178 x: 32, 57179 y: 33 57180 }, 57181 tooltip: { 57182 enabled: true, 57183 useHTML: true, 57184 formatter: function () { 57185 var html = (this.point.name && this.point.nameCode) ? '<b>' + this.point.name + '</b><br/>' + this.point.nameCode : ''; 57186 if (html !== '') 57187 return html 57188 } 57189 }, 57190 data: { 57191 csvURL: appPath + '/wind/charts/' + elementId + '.csv', 57192 startRow: 5, 57193 firstRowAsNames: false, 57194 complete: function (options) { 57195 var point; 57196 var i; 57197 57198 for (i = 0; i < options.series[0].data.length; i++) { 57199 57200 point = options.series[0].data[i]; 57201 var pointValueString = Highcharts.numberFormat(point.value, 3) + ' ' + units; 57202 57203 if (pointValueString) { 57204 seriesOptions[0].data.push({ 57205 code: point.name, 57206 nameCode: "<span>" + pointValueString + "</span>", 57207 value: point.value 57208 });
57209 } 57210 57211 } 57212 57213 // replace series options parsed by Highcharts with our own options definition 57214 options.series = seriesOptions; 57215 57216 }, 57217 beforeParse: function (csv) { 57218 57219 var parsedCSV = csvParser(csv); 57220 units = parsedCSV[1][0]; 57221 this.chart.title.update({ text: parsedCSV[0][0] }); 57222 57223 57224 this.chart.update( 57225 { 57226 caption: { 57227 text: parsedCSV[2][0] + '<br/>' + parsedCSV[3][0] 57228 }, 57229 legend: { 57230 title: { 57231 text: parsedCSV[1][0] 57232 } 57233 }, 57234 accessibility: { 57235 description: parsedCSV[4][0] 57236 }, 57237 exporting: { 57238 allowHTML: true, 57239 menuItemDefinitions: 57240 { 57241 label: { 57242 text: '<a style="text-decoration:none; color: inherit;" href="' + this.chart.liveDataURL + '">Download data</a>' 57243 } 57244 }, 57245 buttons: { 57246 contextButton: { 57247 menuItems: ['printChart', 'separator', 'downloadPNG', 'downloadPDF', 'label'] 57248 } 57249 } 57250 } 57251 } 57252 ); 57253 return csv; 57254 } 57255 }, 57256 colorAxis: { 57257 dataClasses: [{
57258 color: '#FFFFFF', 57259 from: 0, 57260 to: 0 57261 },{ 57262 color: '#EFF5EB', 57263 from: 0.001, 57264 to: 1.0 57265 }, { 57266 color: Highcharts.eiaColors.extraLightGreen, 57267 from: 1.001, 57268 to: 5.0 57269 }, { 57270 color: Highcharts.eiaColors.lightGreen, 57271 from: 5.001, 57272 to: 10.0 57273 }, { 57274 color: Highcharts.eiaColors.green, 57275 from: 10.001, 57276 to: 20.0 57277 }, { 57278 color: Highcharts.eiaColors.darkGreen, 57279 from: 20.001, 57280 to: 30.0 57281 }, { 57282 color: '#213512', 57283 from: 30.001 57284 }] 57285 }, 57286 legend: { 57287 align: 'center', 57288 backgroundColor: 'white', 57289 borderColor: 'white', 57290 layout: 'horizontal', 57291 symbolPadding: 10, 57292 symbolRadius: 0, 57293 valueDecimals: 2, 57294 labelFormatter: function () { 57295 if (this.from === 0) { 57296 $(this.legendItem.symbol.element).attr({ 57297 strokeWidth: 1, 57298 stroke: '#e7e7e7', 57299 width: 11.5, 57300 height: 11.5, 57301 x: 2.5 57302 }); 57303 return '= 0'; 57304 } 57305 else if (this.from === 30.001) { 57306 return ' > ' + Highcharts.numberFormat((this.from - 0.001), 2); 57307 } 57308 else { 57309 return Highcharts.numberFormat(this.from, 2) + ' - ' + Highcharts.numberFormat(this.to, 2); 57310 } 57311 } 57312 }, 57313 plotOptions: { 57314 map: { 57315 dataLabels: { 57316 style: { 57317 fontSize: '6.8px' 57318 } 57319 } 57320 } 57321 }, 57322 responsive: { 57323 rules: [{ 57324 condition: { 57325 maxWidth: 321 57326 }, 57327 57328 chartOptions: { 57329 chart: { 57330 height: 380 57331 }, 57332 title: { 57333 margin: 20 57334 }, 57335 plotOptions: { 57336 map: { 57337 dataLabels: { 57338 style: { 57339 fontSize: '7px', 57340 lineHeight: 7 57341 } 57342 } 57343 } 57344 } 57345 } 57346 }, 57347 { 57348 condition: { 57349 minWidth: 322, 57350 maxWidth: 400 57351 }, 57352 57353 chartOptions: { 57354 chart: { 57355 height: 370 57356 }, 57357 title: { 57358 margin: 5 57359 }, 57360 plotOptions: { 57361 map: { 57362 dataLabels: { 57363 style: { 57364 fontSize: '8px', 57365 lineHeight: 8 57366 } 57367 } 57368 } 57369 } 57370 } 57371 }, 57372 { 57373 condition: { 57374 minWidth: 401, 57375 maxWidth: 450 57376 }, 57377 57378 chartOptions: { 57379 chart: { 57380 height: 400 57381 }, 57382 title: { 57383 margin: 5 57384 }, 57385 plotOptions: { 57386 map: { 57387 dataLabels: { 57388 style: { 57389 fontSize: '8px', 57390 lineHeight: 8 57391 } 57392 } 57393 } 57394 } 57395 } 57396 }, 57397 { 57398 condition: { 57399 minWidth: 451 57400 }, 57401 57402 chartOptions: { 57403 chart: { 57404 height: '65%' 57405 }, 57406 title: { 57407 margin: 15 57408 }, 57409 plotOptions: { 57410 map: { 57411 dataLabels: { 57412 style: { 57413 fontSize: '16px' 57414 } 57415 } 57416 } 57417 } 57418 } 57419 }] 57420 } 57421 }); 57422 } 57423}; 57424 57425},{"../../includes/creditsSizeAndPosition":235,"../../includes/csvParser":236}]},{},[233]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.