{"version":3,"sources":["webpack:///./node_modules/d3-time/src/utcMinute.js","webpack:///./node_modules/d3-selection/src/index.js","webpack:///./node_modules/d3-format/src/precisionPrefix.js","webpack:///./node_modules/d3-format/src/precisionRound.js","webpack:///./node_modules/d3-format/src/precisionFixed.js","webpack:///./node_modules/d3-dispatch/src/index.js","webpack:///./node_modules/d3-interpolate/src/basis.js","webpack:///./node_modules/d3-interpolate/src/color.js","webpack:///./node_modules/d3-interpolate/src/rgb.js","webpack:///./node_modules/d3-interpolate/src/basisClosed.js","webpack:///./node_modules/d3-selection/src/mouse.js","webpack:///./node_modules/d3-selection/src/namespaces.js","webpack:///./node_modules/d3-interpolate/src/number.js","webpack:///./node_modules/d3-selection/src/selection/sparse.js","webpack:///./node_modules/d3-selection/src/selection/enter.js","webpack:///./node_modules/d3-selection/src/selection/data.js","webpack:///./node_modules/d3-selection/src/selection/sort.js","webpack:///./node_modules/d3-selection/src/selection/call.js","webpack:///./node_modules/d3-selection/src/selection/attr.js","webpack:///./node_modules/d3-selection/src/selection/property.js","webpack:///./node_modules/d3-selection/src/selection/classed.js","webpack:///./node_modules/d3-selection/src/selection/text.js","webpack:///./node_modules/d3-selection/src/selection/html.js","webpack:///./node_modules/d3-selection/src/selection/raise.js","webpack:///./node_modules/d3-selection/src/selection/lower.js","webpack:///./node_modules/d3-selection/src/selection/insert.js","webpack:///./node_modules/d3-selection/src/selection/remove.js","webpack:///./node_modules/d3-selection/src/selection/clone.js","webpack:///./node_modules/d3-selection/src/selection/dispatch.js","webpack:///./node_modules/d3-selection/src/selection/index.js","webpack:///./node_modules/d3-selection/src/selection/select.js","webpack:///./node_modules/d3-selection/src/selection/selectAll.js","webpack:///./node_modules/d3-selection/src/selection/filter.js","webpack:///./node_modules/d3-selection/src/constant.js","webpack:///./node_modules/d3-selection/src/selection/exit.js","webpack:///./node_modules/d3-selection/src/selection/join.js","webpack:///./node_modules/d3-selection/src/selection/merge.js","webpack:///./node_modules/d3-selection/src/selection/order.js","webpack:///./node_modules/d3-selection/src/selection/nodes.js","webpack:///./node_modules/d3-selection/src/selection/node.js","webpack:///./node_modules/d3-selection/src/selection/size.js","webpack:///./node_modules/d3-selection/src/selection/empty.js","webpack:///./node_modules/d3-selection/src/selection/each.js","webpack:///./node_modules/d3-selection/src/selection/append.js","webpack:///./node_modules/d3-selection/src/selection/datum.js","webpack:///./node_modules/d3-interpolate/src/numberArray.js","webpack:///./node_modules/d3-interpolate/src/array.js","webpack:///./node_modules/d3-interpolate/src/date.js","webpack:///./node_modules/d3-interpolate/src/object.js","webpack:///./node_modules/d3-interpolate/src/value.js","webpack:///./node_modules/d3-selection/src/point.js","webpack:///./node_modules/d3-time/src/utcHour.js","webpack:///./node_modules/d3-selection/src/select.js","webpack:///./node_modules/d3-selection/src/selection/on.js","webpack:///./node_modules/d3-format/src/formatSpecifier.js","webpack:///./node_modules/d3-selection/src/matcher.js","webpack:///./node_modules/d3-format/src/formatPrefixAuto.js","webpack:///./node_modules/d3-format/src/defaultLocale.js","webpack:///./node_modules/d3-format/src/formatRounded.js","webpack:///./node_modules/d3-format/src/formatTypes.js","webpack:///./node_modules/d3-format/src/identity.js","webpack:///./node_modules/d3-format/src/locale.js","webpack:///./node_modules/d3-format/src/formatGroup.js","webpack:///./node_modules/d3-format/src/formatNumerals.js","webpack:///./node_modules/d3-format/src/formatTrim.js","webpack:///./node_modules/d3-color/src/define.js","webpack:///./node_modules/d3-color/src/color.js","webpack:///./node_modules/d3-time/src/duration.js","webpack:///./node_modules/d3-time/src/millisecond.js","webpack:///./node_modules/d3-time/src/interval.js","webpack:///./node_modules/d3-time/src/utcWeek.js","webpack:///./node_modules/d3-time/src/minute.js","webpack:///./node_modules/d3-selection/src/selection/style.js","webpack:///./node_modules/d3-selection/src/selectorAll.js","webpack:///./node_modules/d3-axis/src/array.js","webpack:///./node_modules/d3-axis/src/identity.js","webpack:///./node_modules/d3-axis/src/axis.js","webpack:///./node_modules/d3-selection/src/sourceEvent.js","webpack:///./node_modules/d3-time-format/src/locale.js","webpack:///./node_modules/d3-time-format/src/defaultLocale.js","webpack:///./node_modules/d3-selection/src/creator.js","webpack:///./node_modules/d3-time/src/utcMonth.js","webpack:///./node_modules/d3/dist/package.js","webpack:///./node_modules/d3-drag/src/noevent.js","webpack:///./node_modules/d3-drag/src/nodrag.js","webpack:///./node_modules/d3-brush/src/brush.js","webpack:///./node_modules/d3-chord/src/math.js","webpack:///./node_modules/d3-chord/src/array.js","webpack:///./node_modules/d3-chord/src/chord.js","webpack:///./node_modules/d3-path/src/path.js","webpack:///./node_modules/d3-contour/src/array.js","webpack:///./node_modules/d3-contour/src/density.js","webpack:///./node_modules/d3-drag/src/constant.js","webpack:///./node_modules/d3-drag/src/event.js","webpack:///./node_modules/d3-drag/src/drag.js","webpack:///./node_modules/d3-quadtree/src/add.js","webpack:///./node_modules/d3-quadtree/src/cover.js","webpack:///./node_modules/d3-quadtree/src/quad.js","webpack:///./node_modules/d3-quadtree/src/x.js","webpack:///./node_modules/d3-quadtree/src/y.js","webpack:///./node_modules/d3-quadtree/src/quadtree.js","webpack:///./node_modules/d3-quadtree/src/data.js","webpack:///./node_modules/d3-quadtree/src/extent.js","webpack:///./node_modules/d3-quadtree/src/find.js","webpack:///./node_modules/d3-quadtree/src/remove.js","webpack:///./node_modules/d3-quadtree/src/root.js","webpack:///./node_modules/d3-quadtree/src/size.js","webpack:///./node_modules/d3-quadtree/src/visit.js","webpack:///./node_modules/d3-quadtree/src/visitAfter.js","webpack:///./node_modules/d3-force/src/simulation.js","webpack:///./node_modules/d3-geo/src/identity.js","webpack:///./node_modules/d3-geo/src/stream.js","webpack:///./node_modules/d3-geo/src/adder.js","webpack:///./node_modules/d3-geo/src/math.js","webpack:///./node_modules/d3-geo/src/noop.js","webpack:///./node_modules/d3-geo/src/path/area.js","webpack:///./node_modules/d3-geo/src/path/bounds.js","webpack:///./node_modules/d3-geo/src/path/centroid.js","webpack:///./node_modules/d3-geo/src/path/context.js","webpack:///./node_modules/d3-geo/src/path/measure.js","webpack:///./node_modules/d3-geo/src/path/string.js","webpack:///./node_modules/d3-geo/src/path/index.js","webpack:///./node_modules/d3-geo/src/clip/buffer.js","webpack:///./node_modules/d3-geo/src/pointEqual.js","webpack:///./node_modules/d3-geo/src/clip/rejoin.js","webpack:///./node_modules/d3-geo/src/cartesian.js","webpack:///./node_modules/d3-geo/src/polygonContains.js","webpack:///./node_modules/d3-geo/src/clip/index.js","webpack:///./node_modules/d3-geo/src/clip/antimeridian.js","webpack:///./node_modules/d3-geo/src/constant.js","webpack:///./node_modules/d3-geo/src/compose.js","webpack:///./node_modules/d3-geo/src/rotation.js","webpack:///./node_modules/d3-geo/src/circle.js","webpack:///./node_modules/d3-geo/src/clip/circle.js","webpack:///./node_modules/d3-geo/src/clip/rectangle.js","webpack:///./node_modules/d3-geo/src/clip/line.js","webpack:///./node_modules/d3-geo/src/transform.js","webpack:///./node_modules/d3-geo/src/projection/fit.js","webpack:///./node_modules/d3-geo/src/projection/resample.js","webpack:///./node_modules/d3-geo/src/projection/index.js","webpack:///./node_modules/d3-geo/src/projection/conicEqualArea.js","webpack:///./node_modules/d3-geo/src/projection/cylindricalEqualArea.js","webpack:///./node_modules/d3-geo/src/projection/conic.js","webpack:///./node_modules/d3-geo/src/projection/albersUsa.js","webpack:///./node_modules/d3-geo/src/projection/albers.js","webpack:///./node_modules/d3-random/src/defaultSource.js","webpack:///./node_modules/d3-random/src/normal.js","webpack:///./node_modules/d3-random/src/uniform.js","webpack:///./node_modules/d3-random/src/irwinHall.js","webpack:///./node_modules/d3-random/src/logNormal.js","webpack:///./node_modules/d3-random/src/bates.js","webpack:///./node_modules/d3-random/src/exponential.js","webpack:///./node_modules/d3-voronoi/src/RedBlackTree.js","webpack:///./node_modules/d3-voronoi/src/Edge.js","webpack:///./node_modules/d3-voronoi/src/Cell.js","webpack:///./node_modules/d3-voronoi/src/Circle.js","webpack:///./node_modules/d3-voronoi/src/Beach.js","webpack:///./node_modules/d3-voronoi/src/Diagram.js","webpack:///./node_modules/d3-interpolate/src/zoom.js","webpack:///./node_modules/d3-zoom/src/transform.js","webpack:///./node_modules/d3-interpolate/src/round.js","webpack:///./node_modules/intersection-observer/intersection-observer.js","webpack:///./node_modules/d3-time/src/second.js","webpack:///./node_modules/d3-selection/src/touch.js","webpack:///./node_modules/d3-selection/src/selector.js","webpack:///./node_modules/d3-selection/src/namespace.js","webpack:///./node_modules/d3-time/src/utcDay.js","webpack:///./node_modules/d3-collection/src/map.js","webpack:///./node_modules/d3-collection/src/set.js","webpack:///./node_modules/d3-time/src/utcYear.js","webpack:///./node_modules/d3-time/src/day.js","webpack:///./node_modules/d3-timer/src/timer.js","webpack:///./node_modules/d3-interpolate/src/string.js","webpack:///./node_modules/d3-time/src/month.js","webpack:///./node_modules/d3-time/src/year.js","webpack:///./node_modules/d3-selection/src/window.js","webpack:///./node_modules/d3-format/src/exponent.js","webpack:///./node_modules/d3-format/src/formatDecimal.js","webpack:///./node_modules/d3-time/src/hour.js","webpack:///./node_modules/d3-timer/src/timeout.js","webpack:///./node_modules/d3-transition/src/transition/schedule.js","webpack:///./node_modules/d3-transition/src/interrupt.js","webpack:///./node_modules/d3-interpolate/src/transform/parse.js","webpack:///./node_modules/d3-interpolate/src/transform/decompose.js","webpack:///./node_modules/d3-interpolate/src/transform/index.js","webpack:///./node_modules/d3-transition/src/transition/tween.js","webpack:///./node_modules/d3-transition/src/transition/interpolate.js","webpack:///./node_modules/d3-transition/src/transition/attr.js","webpack:///./node_modules/d3-transition/src/transition/attrTween.js","webpack:///./node_modules/d3-transition/src/transition/delay.js","webpack:///./node_modules/d3-transition/src/transition/duration.js","webpack:///./node_modules/d3-transition/src/transition/ease.js","webpack:///./node_modules/d3-transition/src/transition/on.js","webpack:///./node_modules/d3-transition/src/transition/remove.js","webpack:///./node_modules/d3-transition/src/transition/selection.js","webpack:///./node_modules/d3-transition/src/transition/style.js","webpack:///./node_modules/d3-transition/src/transition/styleTween.js","webpack:///./node_modules/d3-transition/src/transition/textTween.js","webpack:///./node_modules/d3-transition/src/transition/index.js","webpack:///./node_modules/d3-transition/src/transition/select.js","webpack:///./node_modules/d3-transition/src/transition/selectAll.js","webpack:///./node_modules/d3-transition/src/transition/filter.js","webpack:///./node_modules/d3-transition/src/transition/merge.js","webpack:///./node_modules/d3-transition/src/transition/transition.js","webpack:///./node_modules/d3-transition/src/transition/text.js","webpack:///./node_modules/d3-transition/src/transition/end.js","webpack:///./node_modules/d3-transition/src/selection/transition.js","webpack:///./node_modules/d3-ease/src/cubic.js","webpack:///./node_modules/d3-transition/src/selection/index.js","webpack:///./node_modules/d3-transition/src/selection/interrupt.js","webpack:///./node_modules/d3-time/src/week.js","webpack:///./node_modules/d3-array/src/ascending.js","webpack:///./node_modules/d3-array/src/bisector.js","webpack:///./node_modules/d3-array/src/bisect.js","webpack:///./node_modules/d3-array/src/cross.js","webpack:///./node_modules/d3-array/src/number.js","webpack:///./node_modules/d3-array/src/extent.js","webpack:///./node_modules/d3-array/src/array.js","webpack:///./node_modules/d3-array/src/range.js","webpack:///./node_modules/d3-array/src/ticks.js","webpack:///./node_modules/d3-array/src/threshold/sturges.js","webpack:///./node_modules/d3-array/src/quantile.js","webpack:///./node_modules/d3-array/src/max.js","webpack:///./node_modules/d3-array/src/merge.js","webpack:///./node_modules/d3-array/src/sum.js","webpack:///./node_modules/d3-dispatch/src/dispatch.js","webpack:///./node_modules/d3-interpolate/src/constant.js","webpack:///./node_modules/d3-scale/src/init.js","webpack:///./node_modules/d3-scale/src/array.js","webpack:///./node_modules/d3-scale/src/number.js","webpack:///./node_modules/d3-scale/src/continuous.js","webpack:///./node_modules/d3-scale/src/constant.js","webpack:///./node_modules/d3-scale/src/linear.js","webpack:///./node_modules/d3-scale/src/tickFormat.js"],"names":["utcMinute","interval","date","setUTCSeconds","step","setTime","durationMinute","start","end","getUTCMinutes","range","value","Math","max","min","floor","exponent","abs","basis","t1","v0","v1","v2","v3","t2","t3","linear","a","d","t","gamma","y","nogamma","b","pow","exponential","constant","isNaN","rgbGamma","color","rgb","r","colorRgb","g","opacity","rgbSpline","spline","colors","i","n","length","Array","values","node","event","sourceEvent","changedTouches","point","xhtml","svg","xlink","xml","xmlns","update","EnterNode","parent","datum","this","ownerDocument","namespaceURI","_next","_parent","__data__","prototype","constructor","appendChild","child","insertBefore","next","querySelector","selector","querySelectorAll","bindIndex","group","enter","exit","data","groupLength","dataLength","bindKey","key","keyValue","nodeByKeyValue","keyValues","call","ascending","NaN","attrRemove","name","removeAttribute","attrRemoveNS","fullname","removeAttributeNS","space","local","attrConstant","setAttribute","attrConstantNS","setAttributeNS","attrFunction","v","apply","arguments","attrFunctionNS","propertyRemove","propertyConstant","propertyFunction","classArray","string","trim","split","classList","ClassList","_node","_names","getAttribute","classedAdd","names","list","add","classedRemove","remove","classedTrue","classedFalse","classedFunction","indexOf","push","join","splice","contains","textRemove","textContent","textConstant","textFunction","htmlRemove","innerHTML","htmlConstant","htmlFunction","raise","nextSibling","parentNode","lower","previousSibling","firstChild","constantNull","removeChild","selection_cloneShallow","clone","cloneNode","selection_cloneDeep","dispatchEvent","type","params","window","defaultView","CustomEvent","document","createEvent","initEvent","bubbles","cancelable","detail","dispatchConstant","dispatchFunction","root","Selection","groups","parents","_groups","_parents","selection","documentElement","select","m","subgroups","j","subnode","subgroup","selectAll","selectorAll","filter","match","matcher","size","each","x","bind","enterGroup","updateGroup","previous","i0","i1","_enter","_exit","map","sparse","onenter","onupdate","onexit","append","merge","order","groups0","groups1","m0","m1","merges","group0","group1","compareDocumentPosition","sort","compare","compareNode","sortgroups","sortgroup","callback","nodes","empty","attr","namespace","getAttributeNS","style","selection_style","property","classed","text","html","create","creator","insert","before","deep","on","selection_on","dispatch","c","slice","isNumberArray","ArrayBuffer","isView","DataView","genericArray","nb","na","Date","k","number","numberArray","isArray","valueOf","toString","object","ownerSVGElement","createSVGPoint","clientX","clientY","matrixTransform","getScreenCTM","inverse","rect","getBoundingClientRect","left","clientLeft","top","clientTop","utcHour","setUTCMinutes","durationHour","getUTCHours","filterEvents","mouseenter","mouseleave","filterContextListener","listener","index","contextListener","related","relatedTarget","event1","event0","parseTypenames","typenames","onRemove","typename","__on","o","removeEventListener","capture","onAdd","wrap","hasOwnProperty","addEventListener","customEvent","that","args","re","formatSpecifier","specifier","exec","Error","FormatSpecifier","fill","align","sign","symbol","zero","width","comma","precision","undefined","matches","prefixExponent","locale","format","formatPrefix","p","formatDecimalParts","coefficient","toFixed","round","formatDecimal","toExponential","toPrecision","formatRounded","toUpperCase","prefixes","grouping","thousands","identity","Number","substring","reverse","currencyPrefix","currency","currencySuffix","decimal","numerals","replace","formatNumerals","String","percent","minus","nan","newFormat","formatTypes","prefix","test","toLowerCase","suffix","formatType","maybeSuffix","valuePrefix","valueSuffix","valueNegative","s","out","formatTrim","charCodeAt","Infinity","padding","f","e","formatLocale","factory","extend","definition","Object","Color","reI","reN","reP","reHex","reRgbInteger","RegExp","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","named","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","color_formatHex","formatHex","color_formatRgb","formatRgb","l","parseInt","rgbn","Rgb","rgba","hsla","rgbConvert","rgb_formatHex","hex","rgb_formatRgb","h","Hsl","hslConvert","hsl2rgb","m2","define","copy","channels","assign","displayable","formatHsl","brighter","darker","durationSecond","durationDay","durationWeek","millisecond","every","isFinite","t0","newInterval","floori","offseti","count","field","ceil","d0","d1","offset","stop","utcWeekday","setUTCDate","getUTCDate","getUTCDay","setUTCHours","utcSunday","utcMonday","utcTuesday","utcWednesday","utcThursday","utcFriday","utcSaturday","minute","getMilliseconds","getSeconds","getMinutes","styleRemove","removeProperty","styleConstant","priority","setProperty","styleFunction","styleValue","getPropertyValue","getComputedStyle","translateX","translateY","scale","center","bandwidth","entering","__axis","axis","orient","tickArguments","tickValues","tickFormat","tickSizeInner","tickSizeOuter","tickPadding","transform","context","ticks","domain","spacing","range0","range1","position","path","tick","tickExit","tickEnter","line","transition","_","tickSize","axisBottom","axisLeft","source","current","localDate","H","M","S","L","setFullYear","utcDate","UTC","setUTCFullYear","newDate","timeFormat","utcFormat","pads","numberRe","percentRe","requoteRe","pad","requote","formatRe","formatLookup","parseWeekdayNumberSunday","w","parseWeekdayNumberMonday","u","parseWeekNumberSunday","U","parseWeekNumberISO","V","parseWeekNumberMonday","W","parseFullYear","parseYear","parseZone","Z","parseQuarter","q","parseMonthNumber","parseDayOfMonth","parseDayOfYear","parseHour24","parseMinutes","parseSeconds","parseMilliseconds","parseMicroseconds","parseLiteralPercent","parseUnixTimestamp","Q","parseUnixTimestampSeconds","formatDayOfMonth","getDate","formatHour24","getHours","formatHour12","formatDayOfYear","timeDay","timeYear","formatMilliseconds","formatMicroseconds","formatMonthNumber","getMonth","formatMinutes","formatSeconds","formatWeekdayNumberMonday","day","getDay","formatWeekNumberSunday","timeSunday","dISO","timeThursday","formatWeekNumberISO","formatWeekdayNumberSunday","formatWeekNumberMonday","timeMonday","formatYear","getFullYear","formatYearISO","formatFullYear","formatFullYearISO","formatZone","z","getTimezoneOffset","formatUTCDayOfMonth","formatUTCHour24","formatUTCHour12","formatUTCDayOfYear","utcDay","utcYear","formatUTCMilliseconds","getUTCMilliseconds","formatUTCMicroseconds","formatUTCMonthNumber","getUTCMonth","formatUTCMinutes","formatUTCSeconds","getUTCSeconds","formatUTCWeekdayNumberMonday","dow","formatUTCWeekNumberSunday","UTCdISO","formatUTCWeekNumberISO","formatUTCWeekdayNumberSunday","formatUTCWeekNumberMonday","formatUTCYear","getUTCFullYear","formatUTCYearISO","formatUTCFullYear","formatUTCFullYearISO","formatUTCZone","formatLiteralPercent","formatUnixTimestamp","formatUnixTimestampSeconds","locale_dateTime","dateTime","locale_date","locale_time","time","locale_periods","periods","locale_weekdays","days","locale_shortWeekdays","shortDays","locale_months","months","locale_shortMonths","shortMonths","periodRe","periodLookup","weekdayRe","weekdayLookup","shortWeekdayRe","shortWeekdayLookup","monthRe","monthLookup","shortMonthRe","shortMonthLookup","formats","utcFormats","parses","parseSpecifier","charAt","newParse","week","parse","X","utcParse","creatorInherit","uri","createElement","createElementNS","creatorFixed","utcMonth","setUTCMonth","nopropagation","stopImmediatePropagation","preventDefault","view","noevent","__noselect","MozUserSelect","yesdrag","noclick","setTimeout","number1","number2","cos","sin","PI","pi","tau","tauEpsilon","Path","_x0","_y0","_x1","_y1","moveTo","closePath","lineTo","quadraticCurveTo","x1","y1","bezierCurveTo","x2","y2","arcTo","x0","y0","x21","y21","x01","y01","l01_2","x20","y20","l21_2","l20_2","l21","sqrt","l01","acos","t01","t21","arc","a0","a1","ccw","dx","dy","cw","da","DragEvent","target","subject","id","active","identifier","defaultFilter","ctrlKey","button","defaultContainer","defaultSubject","defaultTouchable","navigator","maxTouchPoints","mousedownx","mousedowny","mousemoving","touchending","container","touchable","gestures","listeners","clickDistance2","drag","mousedowned","touchstarted","touchmoved","touchended","gesture","beforestart","mouse","mousemoved","mouseupped","nodrag","touches","touch","clearTimeout","sublisteners","p0","clickDistance","tree","xm","ym","xp","yp","right","bottom","_root","leaf","_x","_y","defaultX","defaultY","quadtree","Quadtree","addAll","leaf_copy","treeProto","pop","cover","xz","yz","visit","extent","find","radius","x3","y3","quads","Quad","d2","retainer","removeAll","visitAfter","streamGeometry","geometry","stream","streamGeometryType","streamObjectType","Feature","FeatureCollection","features","Sphere","sphere","Point","coordinates","MultiPoint","LineString","streamLine","MultiLineString","Polygon","streamPolygon","MultiPolygon","GeometryCollection","geometries","closed","coordinate","lineStart","lineEnd","polygonStart","polygonEnd","Adder","reset","temp","adder","bv","av","halfPi","quarterPi","degrees","radians","atan","atan2","exp","log","asin","noop","x00","y00","areaSum","areaRingSum","areaStream","areaRingStart","areaRingEnd","result","area","areaPointFirst","areaPoint","boundsStream","bounds","X0","Y0","Z0","X1","Y1","Z1","X2","Y2","Z2","centroidStream","centroidPoint","centroidLineStart","centroidLineEnd","centroidRingStart","centroidRingEnd","centroid","centroidPointFirstLine","centroidPointLine","centroidPointFirstRing","centroidPointRing","PathContext","_context","_radius","pointRadius","_line","_point","lengthRing","lengthSum","lengthStream","lengthPointFirst","lengthPoint","PathString","_string","circle","_circle","projection","projectionStream","contextStream","pathArea","measure","pathMeasure","pathBounds","pathCentroid","lines","rejoin","concat","shift","Intersection","points","other","entry","segments","compareIntersection","startInside","interpolate","clip","forEach","segment","p1","pointEqual","link","isSubject","array","spherical","cartesian","lambda","phi","cosPhi","cartesianDot","cartesianCross","cartesianAddInPlace","cartesianScale","vector","cartesianNormalizeInPlace","sum","longitude","pointVisible","clipLine","sink","polygon","ring","ringBuffer","clipBuffer","ringSink","polygonStarted","pointRing","ringStart","ringEnd","sinPhi","normal","angle","winding","point0","lambda0","phi0","sinPhi0","cosPhi0","lambda1","sinPhi1","cosPhi1","point1","phi1","delta","absDelta","antimeridian","intersection","phiArc","polygonContains","clipRejoin","pointLine","clean","ringSegments","validSegment","sign0","sign1","sinLambda0Lambda1","clipAntimeridianIntersect","from","to","direction","compose","invert","rotationIdentity","rotateRadians","deltaLambda","deltaPhi","deltaGamma","rotationLambda","rotationPhiGamma","forwardRotationLambda","rotation","cosDeltaPhi","sinDeltaPhi","cosDeltaGamma","sinDeltaGamma","circleStream","cosRadius","sinRadius","circleRadius","cr","smallRadius","notHemisphere","visible","intersect","two","n1","n2","n2n2","n1n2","determinant","c1","c2","n1xn2","A","uu","polar","q1","code","c0","v00","point2","clipRectangle","corner","comparePoint","ca","cb","x__","y__","v__","x_","y_","v_","first","activeStream","bufferStream","clipStream","linePoint","b0","b1","polygonInside","cleanInside","ax","ay","transformer","methods","TransformStream","fit","fitBounds","clipExtent","translate","geoStream","fitExtent","fitSize","fitWidth","fitHeight","height","cosMinDistance","project","delta2","resampleLineTo","depth","phi2","lambda2","dx2","dy2","dz","lambda00","a00","b00","c00","resampleStream","ringPoint","resample","resampleNone","transformRadians","scaleTranslate","sx","sy","scaleTranslateRotate","alpha","cosAlpha","sinAlpha","ai","bi","ci","fi","projectionMutator","projectAt","rotate","projectResample","projectTransform","projectRotateTransform","cache","cacheStream","theta","preclip","clipAntimeridian","postclip","recenter","transformRotate","clipAngle","clipCircle","reflectX","reflectY","conicEqualAreaRaw","sy0","forward","cylindricalEqualAreaRaw","r0","r0y","parallels","lower48Point","alaskaPoint","hawaiiPoint","lower48","conicEqualArea","alaska","hawaii","pointStream","albersUsa","streams","random","sourceRandomUniform","randomUniform","defaultSource","sourceRandomNormal","randomNormal","mu","sigma","sourceRandomLogNormal","randomLogNormal","sourceRandomIrwinHall","randomIrwinHall","sourceRandomBates","randomBates","irwinHall","sourceRandomExponential","randomExponential","RedBlackTree","RedBlackNode","C","R","P","N","RedBlackRotateLeft","RedBlackRotateRight","RedBlackFirst","after","grandpa","uncle","sibling","createEdge","edge","edges","setEdgeEnd","cells","halfedges","createBorderEdge","vertex","clipEdge","connectEdge","fm","fb","lx","ly","rx","ry","fx","fy","cellHalfedgeAngle","cell","site","va","vb","cellHalfedgeStart","cellHalfedgeEnd","firstCircle","circlePool","Circle","cy","attachCircle","lArc","rArc","lSite","cSite","rSite","bx","by","cx","epsilon2","ha","hc","circles","detachCircle","beachPool","Beach","createBeach","beach","detachBeach","beaches","removeBeach","disappearing","epsilon","unshift","iArc","nArcs","addBeach","dxl","dxr","directrix","leftBreakPoint","rightBreakPoint","createCell","newArc","hb","rfocx","rfocy","pby2","lfocx","lfocy","plby2","hl","aby2","lexicographic","Diagram","sites","sortCellHalfedges","clipEdges","iCell","iHalfedge","nHalfedges","startX","startY","endX","endY","nCells","dc","v01","v11","v10","clipCells","polygons","triangles","s0","e1","s1","links","_found","vx","vy","SQRT2","Transform","applyX","applyY","location","invertX","invertY","rescaleX","rescaleY","IntersectionObserverEntry","defineProperty","get","intersectionRatio","registry","IntersectionObserver","THROTTLE_TIMEOUT","POLL_INTERVAL","USE_MUTATION_OBSERVER","observe","_observationTargets","some","item","element","nodeType","_registerInstance","_monitorIntersections","_checkForIntersections","unobserve","_unmonitorIntersections","_unregisterInstance","disconnect","takeRecords","records","_queuedEntries","_initThresholds","opt_threshold","threshold","_parseRootMargin","opt_rootMargin","margins","margin","parts","parseFloat","unit","_monitoringIntersections","_monitoringInterval","setInterval","addEvent","_domObserver","MutationObserver","attributes","childList","characterData","subtree","clearInterval","removeEvent","rootIsInDom","_rootIsInDom","rootRect","_getRootRect","targetRect","rootContainsTarget","_rootContainsTarget","oldEntry","intersectionRect","_computeTargetAndRootIntersection","newEntry","performance","now","boundingClientRect","rootBounds","_hasCrossedThreshold","isIntersecting","_callback","display","rect1","rect2","getParentNode","atRoot","parentRect","parentComputedStyle","body","overflow","clientWidth","clientHeight","_expandRectByRootMargin","_rootMarginValues","newRect","oldRatio","newRatio","thresholds","containsDeep","targetArea","intersectionArea","opt_options","fn","timeout","timer","options","rootMargin","opt_useCapture","attachEvent","detatchEvent","el","err","host","second","none","namespaces","Map","set","has","clear","keys","entries","Set","proto","setHours","setDate","taskHead","taskTail","frame","clockLast","clockNow","clockSkew","clock","setFrame","requestAnimationFrame","clearNow","Timer","_call","_time","delay","restart","wake","timerFlush","sleep","nap","poke","TypeError","reA","reB","am","bm","bs","lastIndex","one","month","setMonth","year","toLocaleString","hour","elapsed","emptyOn","emptyTween","timing","schedules","__transition","self","tween","state","duration","ease","init","schedule","cssNode","cssRoot","cssView","svgNode","skewX","scaleX","scaleY","interpolateTransform","pxComma","pxParen","degParen","xa","ya","xb","yb","interpolateTransformCss","decompose","interpolateTransformSvg","baseVal","consolidate","matrix","tweenRemove","tween0","tween1","tweenFunction","tweenValue","_id","interpolateNumber","interpolateRgb","interpolateString","value1","string00","interpolate0","string1","string0","string10","attrInterpolate","attrInterpolateNS","attrTweenNS","_value","attrTween","delayFunction","delayConstant","durationFunction","durationConstant","easeConstant","onFunction","on0","on1","sit","styleInterpolate","styleTween","textInterpolate","textTween","Transition","_name","newId","selection_prototype","children","inherit","id0","id1","styleNull","listener0","styleMaybeRemove","Promise","resolve","reject","cancel","interrupt","defaultTiming","weekday","sunday","monday","tuesday","wednesday","thursday","friday","saturday","lo","hi","mid","ascendingBisect","bisector","bisectRight","valueof","e10","e5","e2","tickIncrement","power","LN10","error","tickStep","step0","step1","LN2","value0","arrays","merged","Dispatch","types","T","initRange","normalize","clamper","bimap","r1","polymap","bisect","clamp","unknown","untransform","piecewise","output","input","interpolateValue","rescale","rangeRound","interpolateRound","continuous","linearish","precisionPrefix","precisionRound","precisionFixed","nice"],"mappings":"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","file":"1.85e8596caa.mjs","sourcesContent":["import interval from \"./interval.js\";\nimport {durationMinute} from \"./duration.js\";\n\nvar utcMinute = interval(function(date) {\n  date.setUTCSeconds(0, 0);\n}, function(date, step) {\n  date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n  return (end - start) / durationMinute;\n}, function(date) {\n  return date.getUTCMinutes();\n});\n\nexport default utcMinute;\nexport var utcMinutes = utcMinute.range;\n","export {default as create} from \"./create\";\nexport {default as creator} from \"./creator\";\nexport {default as local} from \"./local\";\nexport {default as matcher} from \"./matcher\";\nexport {default as mouse} from \"./mouse\";\nexport {default as namespace} from \"./namespace\";\nexport {default as namespaces} from \"./namespaces\";\nexport {default as clientPoint} from \"./point\";\nexport {default as select} from \"./select\";\nexport {default as selectAll} from \"./selectAll\";\nexport {default as selection} from \"./selection/index\";\nexport {default as selector} from \"./selector\";\nexport {default as selectorAll} from \"./selectorAll\";\nexport {styleValue as style} from \"./selection/style\";\nexport {default as touch} from \"./touch\";\nexport {default as touches} from \"./touches\";\nexport {default as window} from \"./window\";\nexport {event, customEvent} from \"./selection/on\";\n","import exponent from \"./exponent.js\";\n\nexport default function(step, value) {\n  return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, max) {\n  step = Math.abs(step), max = Math.abs(max) - step;\n  return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step) {\n  return Math.max(0, -exponent(Math.abs(step)));\n}\n","export {default as dispatch} from \"./dispatch.js\";\n","export function basis(t1, v0, v1, v2, v3) {\n  var t2 = t1 * t1, t3 = t2 * t1;\n  return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n      + (4 - 6 * t2 + 3 * t3) * v1\n      + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n      + t3 * v3) / 6;\n}\n\nexport default function(values) {\n  var n = values.length - 1;\n  return function(t) {\n    var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n        v1 = values[i],\n        v2 = values[i + 1],\n        v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n        v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n    return basis((t - i / n) * n, v0, v1, v2, v3);\n  };\n}\n","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n  return function(t) {\n    return a + t * d;\n  };\n}\n\nfunction exponential(a, b, y) {\n  return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n    return Math.pow(a + t * b, y);\n  };\n}\n\nexport function hue(a, b) {\n  var d = b - a;\n  return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n  return (y = +y) === 1 ? nogamma : function(a, b) {\n    return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n  };\n}\n\nexport default function nogamma(a, b) {\n  var d = b - a;\n  return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n  var color = gamma(y);\n\n  function rgb(start, end) {\n    var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n        g = color(start.g, end.g),\n        b = color(start.b, end.b),\n        opacity = nogamma(start.opacity, end.opacity);\n    return function(t) {\n      start.r = r(t);\n      start.g = g(t);\n      start.b = b(t);\n      start.opacity = opacity(t);\n      return start + \"\";\n    };\n  }\n\n  rgb.gamma = rgbGamma;\n\n  return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n  return function(colors) {\n    var n = colors.length,\n        r = new Array(n),\n        g = new Array(n),\n        b = new Array(n),\n        i, color;\n    for (i = 0; i < n; ++i) {\n      color = colorRgb(colors[i]);\n      r[i] = color.r || 0;\n      g[i] = color.g || 0;\n      b[i] = color.b || 0;\n    }\n    r = spline(r);\n    g = spline(g);\n    b = spline(b);\n    color.opacity = 1;\n    return function(t) {\n      color.r = r(t);\n      color.g = g(t);\n      color.b = b(t);\n      return color + \"\";\n    };\n  };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","import {basis} from \"./basis.js\";\n\nexport default function(values) {\n  var n = values.length;\n  return function(t) {\n    var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n        v0 = values[(i + n - 1) % n],\n        v1 = values[i % n],\n        v2 = values[(i + 1) % n],\n        v3 = values[(i + 2) % n];\n    return basis((t - i / n) * n, v0, v1, v2, v3);\n  };\n}\n","import sourceEvent from \"./sourceEvent\";\nimport point from \"./point\";\n\nexport default function(node) {\n  var event = sourceEvent();\n  if (event.changedTouches) event = event.changedTouches[0];\n  return point(node, event);\n}\n","export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n  svg: \"http://www.w3.org/2000/svg\",\n  xhtml: xhtml,\n  xlink: \"http://www.w3.org/1999/xlink\",\n  xml: \"http://www.w3.org/XML/1998/namespace\",\n  xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n","export default function(a, b) {\n  return a = +a, b = +b, function(t) {\n    return a * (1 - t) + b * t;\n  };\n}\n","export default function(update) {\n  return new Array(update.length);\n}\n","import sparse from \"./sparse\";\nimport {Selection} from \"./index\";\n\nexport default function() {\n  return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n  this.ownerDocument = parent.ownerDocument;\n  this.namespaceURI = parent.namespaceURI;\n  this._next = null;\n  this._parent = parent;\n  this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n  constructor: EnterNode,\n  appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n  insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n  querySelector: function(selector) { return this._parent.querySelector(selector); },\n  querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n","import {Selection} from \"./index\";\nimport {EnterNode} from \"./enter\";\nimport constant from \"../constant\";\n\nvar keyPrefix = \"$\"; // Protect against keys like “__proto__”.\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n  var i = 0,\n      node,\n      groupLength = group.length,\n      dataLength = data.length;\n\n  // Put any non-null nodes that fit into update.\n  // Put any null nodes into enter.\n  // Put any remaining data into enter.\n  for (; i < dataLength; ++i) {\n    if (node = group[i]) {\n      node.__data__ = data[i];\n      update[i] = node;\n    } else {\n      enter[i] = new EnterNode(parent, data[i]);\n    }\n  }\n\n  // Put any non-null nodes that don’t fit into exit.\n  for (; i < groupLength; ++i) {\n    if (node = group[i]) {\n      exit[i] = node;\n    }\n  }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n  var i,\n      node,\n      nodeByKeyValue = {},\n      groupLength = group.length,\n      dataLength = data.length,\n      keyValues = new Array(groupLength),\n      keyValue;\n\n  // Compute the key for each node.\n  // If multiple nodes have the same key, the duplicates are added to exit.\n  for (i = 0; i < groupLength; ++i) {\n    if (node = group[i]) {\n      keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group);\n      if (keyValue in nodeByKeyValue) {\n        exit[i] = node;\n      } else {\n        nodeByKeyValue[keyValue] = node;\n      }\n    }\n  }\n\n  // Compute the key for each datum.\n  // If there a node associated with this key, join and add it to update.\n  // If there is not (or the key is a duplicate), add it to enter.\n  for (i = 0; i < dataLength; ++i) {\n    keyValue = keyPrefix + key.call(parent, data[i], i, data);\n    if (node = nodeByKeyValue[keyValue]) {\n      update[i] = node;\n      node.__data__ = data[i];\n      nodeByKeyValue[keyValue] = null;\n    } else {\n      enter[i] = new EnterNode(parent, data[i]);\n    }\n  }\n\n  // Add any remaining nodes that were not bound to data to exit.\n  for (i = 0; i < groupLength; ++i) {\n    if ((node = group[i]) && (nodeByKeyValue[keyValues[i]] === node)) {\n      exit[i] = node;\n    }\n  }\n}\n\nexport default function(value, key) {\n  if (!value) {\n    data = new Array(this.size()), j = -1;\n    this.each(function(d) { data[++j] = d; });\n    return data;\n  }\n\n  var bind = key ? bindKey : bindIndex,\n      parents = this._parents,\n      groups = this._groups;\n\n  if (typeof value !== \"function\") value = constant(value);\n\n  for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n    var parent = parents[j],\n        group = groups[j],\n        groupLength = group.length,\n        data = value.call(parent, parent && parent.__data__, j, parents),\n        dataLength = data.length,\n        enterGroup = enter[j] = new Array(dataLength),\n        updateGroup = update[j] = new Array(dataLength),\n        exitGroup = exit[j] = new Array(groupLength);\n\n    bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n    // Now connect the enter nodes to their following update node, such that\n    // appendChild can insert the materialized enter node before this node,\n    // rather than at the end of the parent node.\n    for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n      if (previous = enterGroup[i0]) {\n        if (i0 >= i1) i1 = i0 + 1;\n        while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n        previous._next = next || null;\n      }\n    }\n  }\n\n  update = new Selection(update, parents);\n  update._enter = enter;\n  update._exit = exit;\n  return update;\n}\n","import {Selection} from \"./index\";\n\nexport default function(compare) {\n  if (!compare) compare = ascending;\n\n  function compareNode(a, b) {\n    return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n  }\n\n  for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        sortgroup[i] = node;\n      }\n    }\n    sortgroup.sort(compareNode);\n  }\n\n  return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n  return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export default function() {\n  var callback = arguments[0];\n  arguments[0] = this;\n  callback.apply(null, arguments);\n  return this;\n}\n","import namespace from \"../namespace\";\n\nfunction attrRemove(name) {\n  return function() {\n    this.removeAttribute(name);\n  };\n}\n\nfunction attrRemoveNS(fullname) {\n  return function() {\n    this.removeAttributeNS(fullname.space, fullname.local);\n  };\n}\n\nfunction attrConstant(name, value) {\n  return function() {\n    this.setAttribute(name, value);\n  };\n}\n\nfunction attrConstantNS(fullname, value) {\n  return function() {\n    this.setAttributeNS(fullname.space, fullname.local, value);\n  };\n}\n\nfunction attrFunction(name, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) this.removeAttribute(name);\n    else this.setAttribute(name, v);\n  };\n}\n\nfunction attrFunctionNS(fullname, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n    else this.setAttributeNS(fullname.space, fullname.local, v);\n  };\n}\n\nexport default function(name, value) {\n  var fullname = namespace(name);\n\n  if (arguments.length < 2) {\n    var node = this.node();\n    return fullname.local\n        ? node.getAttributeNS(fullname.space, fullname.local)\n        : node.getAttribute(fullname);\n  }\n\n  return this.each((value == null\n      ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n      ? (fullname.local ? attrFunctionNS : attrFunction)\n      : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n","function propertyRemove(name) {\n  return function() {\n    delete this[name];\n  };\n}\n\nfunction propertyConstant(name, value) {\n  return function() {\n    this[name] = value;\n  };\n}\n\nfunction propertyFunction(name, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) delete this[name];\n    else this[name] = v;\n  };\n}\n\nexport default function(name, value) {\n  return arguments.length > 1\n      ? this.each((value == null\n          ? propertyRemove : typeof value === \"function\"\n          ? propertyFunction\n          : propertyConstant)(name, value))\n      : this.node()[name];\n}\n","function classArray(string) {\n  return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n  return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n  this._node = node;\n  this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n  add: function(name) {\n    var i = this._names.indexOf(name);\n    if (i < 0) {\n      this._names.push(name);\n      this._node.setAttribute(\"class\", this._names.join(\" \"));\n    }\n  },\n  remove: function(name) {\n    var i = this._names.indexOf(name);\n    if (i >= 0) {\n      this._names.splice(i, 1);\n      this._node.setAttribute(\"class\", this._names.join(\" \"));\n    }\n  },\n  contains: function(name) {\n    return this._names.indexOf(name) >= 0;\n  }\n};\n\nfunction classedAdd(node, names) {\n  var list = classList(node), i = -1, n = names.length;\n  while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n  var list = classList(node), i = -1, n = names.length;\n  while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n  return function() {\n    classedAdd(this, names);\n  };\n}\n\nfunction classedFalse(names) {\n  return function() {\n    classedRemove(this, names);\n  };\n}\n\nfunction classedFunction(names, value) {\n  return function() {\n    (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n  };\n}\n\nexport default function(name, value) {\n  var names = classArray(name + \"\");\n\n  if (arguments.length < 2) {\n    var list = classList(this.node()), i = -1, n = names.length;\n    while (++i < n) if (!list.contains(names[i])) return false;\n    return true;\n  }\n\n  return this.each((typeof value === \"function\"\n      ? classedFunction : value\n      ? classedTrue\n      : classedFalse)(names, value));\n}\n","function textRemove() {\n  this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n  return function() {\n    this.textContent = value;\n  };\n}\n\nfunction textFunction(value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    this.textContent = v == null ? \"\" : v;\n  };\n}\n\nexport default function(value) {\n  return arguments.length\n      ? this.each(value == null\n          ? textRemove : (typeof value === \"function\"\n          ? textFunction\n          : textConstant)(value))\n      : this.node().textContent;\n}\n","function htmlRemove() {\n  this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n  return function() {\n    this.innerHTML = value;\n  };\n}\n\nfunction htmlFunction(value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    this.innerHTML = v == null ? \"\" : v;\n  };\n}\n\nexport default function(value) {\n  return arguments.length\n      ? this.each(value == null\n          ? htmlRemove : (typeof value === \"function\"\n          ? htmlFunction\n          : htmlConstant)(value))\n      : this.node().innerHTML;\n}\n","function raise() {\n  if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n  return this.each(raise);\n}\n","function lower() {\n  if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n  return this.each(lower);\n}\n","import creator from \"../creator\";\nimport selector from \"../selector\";\n\nfunction constantNull() {\n  return null;\n}\n\nexport default function(name, before) {\n  var create = typeof name === \"function\" ? name : creator(name),\n      select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n  return this.select(function() {\n    return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n  });\n}\n","function remove() {\n  var parent = this.parentNode;\n  if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n  return this.each(remove);\n}\n","function selection_cloneShallow() {\n  var clone = this.cloneNode(false), parent = this.parentNode;\n  return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nfunction selection_cloneDeep() {\n  var clone = this.cloneNode(true), parent = this.parentNode;\n  return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nexport default function(deep) {\n  return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n","import defaultView from \"../window\";\n\nfunction dispatchEvent(node, type, params) {\n  var window = defaultView(node),\n      event = window.CustomEvent;\n\n  if (typeof event === \"function\") {\n    event = new event(type, params);\n  } else {\n    event = window.document.createEvent(\"Event\");\n    if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n    else event.initEvent(type, false, false);\n  }\n\n  node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n  return function() {\n    return dispatchEvent(this, type, params);\n  };\n}\n\nfunction dispatchFunction(type, params) {\n  return function() {\n    return dispatchEvent(this, type, params.apply(this, arguments));\n  };\n}\n\nexport default function(type, params) {\n  return this.each((typeof params === \"function\"\n      ? dispatchFunction\n      : dispatchConstant)(type, params));\n}\n","import selection_select from \"./select\";\nimport selection_selectAll from \"./selectAll\";\nimport selection_filter from \"./filter\";\nimport selection_data from \"./data\";\nimport selection_enter from \"./enter\";\nimport selection_exit from \"./exit\";\nimport selection_join from \"./join\";\nimport selection_merge from \"./merge\";\nimport selection_order from \"./order\";\nimport selection_sort from \"./sort\";\nimport selection_call from \"./call\";\nimport selection_nodes from \"./nodes\";\nimport selection_node from \"./node\";\nimport selection_size from \"./size\";\nimport selection_empty from \"./empty\";\nimport selection_each from \"./each\";\nimport selection_attr from \"./attr\";\nimport selection_style from \"./style\";\nimport selection_property from \"./property\";\nimport selection_classed from \"./classed\";\nimport selection_text from \"./text\";\nimport selection_html from \"./html\";\nimport selection_raise from \"./raise\";\nimport selection_lower from \"./lower\";\nimport selection_append from \"./append\";\nimport selection_insert from \"./insert\";\nimport selection_remove from \"./remove\";\nimport selection_clone from \"./clone\";\nimport selection_datum from \"./datum\";\nimport selection_on from \"./on\";\nimport selection_dispatch from \"./dispatch\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n  this._groups = groups;\n  this._parents = parents;\n}\n\nfunction selection() {\n  return new Selection([[document.documentElement]], root);\n}\n\nSelection.prototype = selection.prototype = {\n  constructor: Selection,\n  select: selection_select,\n  selectAll: selection_selectAll,\n  filter: selection_filter,\n  data: selection_data,\n  enter: selection_enter,\n  exit: selection_exit,\n  join: selection_join,\n  merge: selection_merge,\n  order: selection_order,\n  sort: selection_sort,\n  call: selection_call,\n  nodes: selection_nodes,\n  node: selection_node,\n  size: selection_size,\n  empty: selection_empty,\n  each: selection_each,\n  attr: selection_attr,\n  style: selection_style,\n  property: selection_property,\n  classed: selection_classed,\n  text: selection_text,\n  html: selection_html,\n  raise: selection_raise,\n  lower: selection_lower,\n  append: selection_append,\n  insert: selection_insert,\n  remove: selection_remove,\n  clone: selection_clone,\n  datum: selection_datum,\n  on: selection_on,\n  dispatch: selection_dispatch\n};\n\nexport default selection;\n","import {Selection} from \"./index\";\nimport selector from \"../selector\";\n\nexport default function(select) {\n  if (typeof select !== \"function\") select = selector(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n      if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n        if (\"__data__\" in node) subnode.__data__ = node.__data__;\n        subgroup[i] = subnode;\n      }\n    }\n  }\n\n  return new Selection(subgroups, this._parents);\n}\n","import {Selection} from \"./index\";\nimport selectorAll from \"../selectorAll\";\n\nexport default function(select) {\n  if (typeof select !== \"function\") select = selectorAll(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        subgroups.push(select.call(node, node.__data__, i, group));\n        parents.push(node);\n      }\n    }\n  }\n\n  return new Selection(subgroups, parents);\n}\n","import {Selection} from \"./index\";\nimport matcher from \"../matcher\";\n\nexport default function(match) {\n  if (typeof match !== \"function\") match = matcher(match);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n      if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n        subgroup.push(node);\n      }\n    }\n  }\n\n  return new Selection(subgroups, this._parents);\n}\n","export default function(x) {\n  return function() {\n    return x;\n  };\n}\n","import sparse from \"./sparse\";\nimport {Selection} from \"./index\";\n\nexport default function() {\n  return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n","export default function(onenter, onupdate, onexit) {\n  var enter = this.enter(), update = this, exit = this.exit();\n  enter = typeof onenter === \"function\" ? onenter(enter) : enter.append(onenter + \"\");\n  if (onupdate != null) update = onupdate(update);\n  if (onexit == null) exit.remove(); else onexit(exit);\n  return enter && update ? enter.merge(update).order() : update;\n}\n","import {Selection} from \"./index\";\n\nexport default function(selection) {\n\n  for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n    for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n      if (node = group0[i] || group1[i]) {\n        merge[i] = node;\n      }\n    }\n  }\n\n  for (; j < m0; ++j) {\n    merges[j] = groups0[j];\n  }\n\n  return new Selection(merges, this._parents);\n}\n","export default function() {\n\n  for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n    for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n      if (node = group[i]) {\n        if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n        next = node;\n      }\n    }\n  }\n\n  return this;\n}\n","export default function() {\n  var nodes = new Array(this.size()), i = -1;\n  this.each(function() { nodes[++i] = this; });\n  return nodes;\n}\n","export default function() {\n\n  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n    for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n      var node = group[i];\n      if (node) return node;\n    }\n  }\n\n  return null;\n}\n","export default function() {\n  var size = 0;\n  this.each(function() { ++size; });\n  return size;\n}\n","export default function() {\n  return !this.node();\n}\n","export default function(callback) {\n\n  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n    for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n      if (node = group[i]) callback.call(node, node.__data__, i, group);\n    }\n  }\n\n  return this;\n}\n","import creator from \"../creator\";\n\nexport default function(name) {\n  var create = typeof name === \"function\" ? name : creator(name);\n  return this.select(function() {\n    return this.appendChild(create.apply(this, arguments));\n  });\n}\n","export default function(value) {\n  return arguments.length\n      ? this.property(\"__data__\", value)\n      : this.node().__data__;\n}\n","export default function(a, b) {\n  if (!b) b = [];\n  var n = a ? Math.min(b.length, a.length) : 0,\n      c = b.slice(),\n      i;\n  return function(t) {\n    for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n    return c;\n  };\n}\n\nexport function isNumberArray(x) {\n  return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n","import value from \"./value.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n  return (isNumberArray(b) ? numberArray : genericArray)(a, b);\n}\n\nexport function genericArray(a, b) {\n  var nb = b ? b.length : 0,\n      na = a ? Math.min(nb, a.length) : 0,\n      x = new Array(na),\n      c = new Array(nb),\n      i;\n\n  for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n  for (; i < nb; ++i) c[i] = b[i];\n\n  return function(t) {\n    for (i = 0; i < na; ++i) c[i] = x[i](t);\n    return c;\n  };\n}\n","export default function(a, b) {\n  var d = new Date;\n  return a = +a, b = +b, function(t) {\n    return d.setTime(a * (1 - t) + b * t), d;\n  };\n}\n","import value from \"./value.js\";\n\nexport default function(a, b) {\n  var i = {},\n      c = {},\n      k;\n\n  if (a === null || typeof a !== \"object\") a = {};\n  if (b === null || typeof b !== \"object\") b = {};\n\n  for (k in b) {\n    if (k in a) {\n      i[k] = value(a[k], b[k]);\n    } else {\n      c[k] = b[k];\n    }\n  }\n\n  return function(t) {\n    for (k in i) c[k] = i[k](t);\n    return c;\n  };\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb.js\";\nimport {genericArray} from \"./array.js\";\nimport date from \"./date.js\";\nimport number from \"./number.js\";\nimport object from \"./object.js\";\nimport string from \"./string.js\";\nimport constant from \"./constant.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n  var t = typeof b, c;\n  return b == null || t === \"boolean\" ? constant(b)\n      : (t === \"number\" ? number\n      : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n      : b instanceof color ? rgb\n      : b instanceof Date ? date\n      : isNumberArray(b) ? numberArray\n      : Array.isArray(b) ? genericArray\n      : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n      : number)(a, b);\n}\n","export default function(node, event) {\n  var svg = node.ownerSVGElement || node;\n\n  if (svg.createSVGPoint) {\n    var point = svg.createSVGPoint();\n    point.x = event.clientX, point.y = event.clientY;\n    point = point.matrixTransform(node.getScreenCTM().inverse());\n    return [point.x, point.y];\n  }\n\n  var rect = node.getBoundingClientRect();\n  return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n}\n","import interval from \"./interval.js\";\nimport {durationHour} from \"./duration.js\";\n\nvar utcHour = interval(function(date) {\n  date.setUTCMinutes(0, 0, 0);\n}, function(date, step) {\n  date.setTime(+date + step * durationHour);\n}, function(start, end) {\n  return (end - start) / durationHour;\n}, function(date) {\n  return date.getUTCHours();\n});\n\nexport default utcHour;\nexport var utcHours = utcHour.range;\n","import {Selection, root} from \"./selection/index\";\n\nexport default function(selector) {\n  return typeof selector === \"string\"\n      ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n      : new Selection([[selector]], root);\n}\n","var filterEvents = {};\n\nexport var event = null;\n\nif (typeof document !== \"undefined\") {\n  var element = document.documentElement;\n  if (!(\"onmouseenter\" in element)) {\n    filterEvents = {mouseenter: \"mouseover\", mouseleave: \"mouseout\"};\n  }\n}\n\nfunction filterContextListener(listener, index, group) {\n  listener = contextListener(listener, index, group);\n  return function(event) {\n    var related = event.relatedTarget;\n    if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) {\n      listener.call(this, event);\n    }\n  };\n}\n\nfunction contextListener(listener, index, group) {\n  return function(event1) {\n    var event0 = event; // Events can be reentrant (e.g., focus).\n    event = event1;\n    try {\n      listener.call(this, this.__data__, index, group);\n    } finally {\n      event = event0;\n    }\n  };\n}\n\nfunction parseTypenames(typenames) {\n  return typenames.trim().split(/^|\\s+/).map(function(t) {\n    var name = \"\", i = t.indexOf(\".\");\n    if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n    return {type: t, name: name};\n  });\n}\n\nfunction onRemove(typename) {\n  return function() {\n    var on = this.__on;\n    if (!on) return;\n    for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n      if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n        this.removeEventListener(o.type, o.listener, o.capture);\n      } else {\n        on[++i] = o;\n      }\n    }\n    if (++i) on.length = i;\n    else delete this.__on;\n  };\n}\n\nfunction onAdd(typename, value, capture) {\n  var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener;\n  return function(d, i, group) {\n    var on = this.__on, o, listener = wrap(value, i, group);\n    if (on) for (var j = 0, m = on.length; j < m; ++j) {\n      if ((o = on[j]).type === typename.type && o.name === typename.name) {\n        this.removeEventListener(o.type, o.listener, o.capture);\n        this.addEventListener(o.type, o.listener = listener, o.capture = capture);\n        o.value = value;\n        return;\n      }\n    }\n    this.addEventListener(typename.type, listener, capture);\n    o = {type: typename.type, name: typename.name, value: value, listener: listener, capture: capture};\n    if (!on) this.__on = [o];\n    else on.push(o);\n  };\n}\n\nexport default function(typename, value, capture) {\n  var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n  if (arguments.length < 2) {\n    var on = this.node().__on;\n    if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n      for (i = 0, o = on[j]; i < n; ++i) {\n        if ((t = typenames[i]).type === o.type && t.name === o.name) {\n          return o.value;\n        }\n      }\n    }\n    return;\n  }\n\n  on = value ? onAdd : onRemove;\n  if (capture == null) capture = false;\n  for (i = 0; i < n; ++i) this.each(on(typenames[i], value, capture));\n  return this;\n}\n\nexport function customEvent(event1, listener, that, args) {\n  var event0 = event;\n  event1.sourceEvent = event;\n  event = event1;\n  try {\n    return listener.apply(that, args);\n  } finally {\n    event = event0;\n  }\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n  if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n  var match;\n  return new FormatSpecifier({\n    fill: match[1],\n    align: match[2],\n    sign: match[3],\n    symbol: match[4],\n    zero: match[5],\n    width: match[6],\n    comma: match[7],\n    precision: match[8] && match[8].slice(1),\n    trim: match[9],\n    type: match[10]\n  });\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nexport function FormatSpecifier(specifier) {\n  this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n  this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n  this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n  this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n  this.zero = !!specifier.zero;\n  this.width = specifier.width === undefined ? undefined : +specifier.width;\n  this.comma = !!specifier.comma;\n  this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n  this.trim = !!specifier.trim;\n  this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n  return this.fill\n      + this.align\n      + this.sign\n      + this.symbol\n      + (this.zero ? \"0\" : \"\")\n      + (this.width === undefined ? \"\" : Math.max(1, this.width | 0))\n      + (this.comma ? \",\" : \"\")\n      + (this.precision === undefined ? \"\" : \".\" + Math.max(0, this.precision | 0))\n      + (this.trim ? \"~\" : \"\")\n      + this.type;\n};\n","export default function(selector) {\n  return function() {\n    return this.matches(selector);\n  };\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n  var d = formatDecimalParts(x, p);\n  if (!d) return x + \"\";\n  var coefficient = d[0],\n      exponent = d[1],\n      i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n      n = coefficient.length;\n  return i === n ? coefficient\n      : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n      : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n      : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimalParts(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n  decimal: \".\",\n  thousands: \",\",\n  grouping: [3],\n  currency: [\"$\", \"\"],\n  minus: \"-\"\n});\n\nexport default function defaultLocale(definition) {\n  locale = formatLocale(definition);\n  format = locale.format;\n  formatPrefix = locale.formatPrefix;\n  return locale;\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x, p) {\n  var d = formatDecimalParts(x, p);\n  if (!d) return x + \"\";\n  var coefficient = d[0],\n      exponent = d[1];\n  return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n      : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n      : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n","import formatDecimal from \"./formatDecimal.js\";\nimport formatPrefixAuto from \"./formatPrefixAuto.js\";\nimport formatRounded from \"./formatRounded.js\";\n\nexport default {\n  \"%\": function(x, p) { return (x * 100).toFixed(p); },\n  \"b\": function(x) { return Math.round(x).toString(2); },\n  \"c\": function(x) { return x + \"\"; },\n  \"d\": formatDecimal,\n  \"e\": function(x, p) { return x.toExponential(p); },\n  \"f\": function(x, p) { return x.toFixed(p); },\n  \"g\": function(x, p) { return x.toPrecision(p); },\n  \"o\": function(x) { return Math.round(x).toString(8); },\n  \"p\": function(x, p) { return formatRounded(x * 100, p); },\n  \"r\": formatRounded,\n  \"s\": formatPrefixAuto,\n  \"X\": function(x) { return Math.round(x).toString(16).toUpperCase(); },\n  \"x\": function(x) { return Math.round(x).toString(16); }\n};\n","export default function(x) {\n  return x;\n}\n","import exponent from \"./exponent.js\";\nimport formatGroup from \"./formatGroup.js\";\nimport formatNumerals from \"./formatNumerals.js\";\nimport formatSpecifier from \"./formatSpecifier.js\";\nimport formatTrim from \"./formatTrim.js\";\nimport formatTypes from \"./formatTypes.js\";\nimport {prefixExponent} from \"./formatPrefixAuto.js\";\nimport identity from \"./identity.js\";\n\nvar map = Array.prototype.map,\n    prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n  var group = locale.grouping === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\n      currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n      currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n      decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n      numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),\n      percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n      minus = locale.minus === undefined ? \"-\" : locale.minus + \"\",\n      nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\n\n  function newFormat(specifier) {\n    specifier = formatSpecifier(specifier);\n\n    var fill = specifier.fill,\n        align = specifier.align,\n        sign = specifier.sign,\n        symbol = specifier.symbol,\n        zero = specifier.zero,\n        width = specifier.width,\n        comma = specifier.comma,\n        precision = specifier.precision,\n        trim = specifier.trim,\n        type = specifier.type;\n\n    // The \"n\" type is an alias for \",g\".\n    if (type === \"n\") comma = true, type = \"g\";\n\n    // The \"\" type, and any invalid type, is an alias for \".12~g\".\n    else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = \"g\";\n\n    // If zero fill is specified, padding goes after sign and before digits.\n    if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n    // Compute the prefix and suffix.\n    // For SI-prefix, the suffix is lazily computed.\n    var prefix = symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n        suffix = symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\";\n\n    // What format function should we use?\n    // Is this an integer type?\n    // Can this type generate exponential notation?\n    var formatType = formatTypes[type],\n        maybeSuffix = /[defgprs%]/.test(type);\n\n    // Set the default precision if not specified,\n    // or clamp the specified precision to the supported range.\n    // For significant precision, it must be in [1, 21].\n    // For fixed precision, it must be in [0, 20].\n    precision = precision === undefined ? 6\n        : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n        : Math.max(0, Math.min(20, precision));\n\n    function format(value) {\n      var valuePrefix = prefix,\n          valueSuffix = suffix,\n          i, n, c;\n\n      if (type === \"c\") {\n        valueSuffix = formatType(value) + valueSuffix;\n        value = \"\";\n      } else {\n        value = +value;\n\n        // Determine the sign. -0 is not less than 0, but 1 / -0 is!\n        var valueNegative = value < 0 || 1 / value < 0;\n\n        // Perform the initial formatting.\n        value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n        // Trim insignificant zeros.\n        if (trim) value = formatTrim(value);\n\n        // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.\n        if (valueNegative && +value === 0 && sign !== \"+\") valueNegative = false;\n\n        // Compute the prefix and suffix.\n        valuePrefix = (valueNegative ? (sign === \"(\" ? sign : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n        valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n        // Break the formatted value into the integer “value” part that can be\n        // grouped, and fractional or exponential “suffix” part that is not.\n        if (maybeSuffix) {\n          i = -1, n = value.length;\n          while (++i < n) {\n            if (c = value.charCodeAt(i), 48 > c || c > 57) {\n              valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n              value = value.slice(0, i);\n              break;\n            }\n          }\n        }\n      }\n\n      // If the fill character is not \"0\", grouping is applied before padding.\n      if (comma && !zero) value = group(value, Infinity);\n\n      // Compute the padding.\n      var length = valuePrefix.length + value.length + valueSuffix.length,\n          padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n      // If the fill character is \"0\", grouping is applied after padding.\n      if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n      // Reconstruct the final output based on the desired alignment.\n      switch (align) {\n        case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n        case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n        case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n        default: value = padding + valuePrefix + value + valueSuffix; break;\n      }\n\n      return numerals(value);\n    }\n\n    format.toString = function() {\n      return specifier + \"\";\n    };\n\n    return format;\n  }\n\n  function formatPrefix(specifier, value) {\n    var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n        e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n        k = Math.pow(10, -e),\n        prefix = prefixes[8 + e / 3];\n    return function(value) {\n      return f(k * value) + prefix;\n    };\n  }\n\n  return {\n    format: newFormat,\n    formatPrefix: formatPrefix\n  };\n}\n","export default function(grouping, thousands) {\n  return function(value, width) {\n    var i = value.length,\n        t = [],\n        j = 0,\n        g = grouping[0],\n        length = 0;\n\n    while (i > 0 && g > 0) {\n      if (length + g + 1 > width) g = Math.max(1, width - length);\n      t.push(value.substring(i -= g, i + g));\n      if ((length += g + 1) > width) break;\n      g = grouping[j = (j + 1) % grouping.length];\n    }\n\n    return t.reverse().join(thousands);\n  };\n}\n","export default function(numerals) {\n  return function(value) {\n    return value.replace(/[0-9]/g, function(i) {\n      return numerals[+i];\n    });\n  };\n}\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n  out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n    switch (s[i]) {\n      case \".\": i0 = i1 = i; break;\n      case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n      default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\n    }\n  }\n  return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","export default function(constructor, factory, prototype) {\n  constructor.prototype = factory.prototype = prototype;\n  prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n  var prototype = Object.create(parent.prototype);\n  for (var key in definition) prototype[key] = definition[key];\n  return prototype;\n}\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n    reN = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n    reP = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n    reHex = /^#([0-9a-f]{3,8})$/,\n    reRgbInteger = new RegExp(\"^rgb\\\\(\" + [reI, reI, reI] + \"\\\\)$\"),\n    reRgbPercent = new RegExp(\"^rgb\\\\(\" + [reP, reP, reP] + \"\\\\)$\"),\n    reRgbaInteger = new RegExp(\"^rgba\\\\(\" + [reI, reI, reI, reN] + \"\\\\)$\"),\n    reRgbaPercent = new RegExp(\"^rgba\\\\(\" + [reP, reP, reP, reN] + \"\\\\)$\"),\n    reHslPercent = new RegExp(\"^hsl\\\\(\" + [reN, reP, reP] + \"\\\\)$\"),\n    reHslaPercent = new RegExp(\"^hsla\\\\(\" + [reN, reP, reP, reN] + \"\\\\)$\");\n\nvar named = {\n  aliceblue: 0xf0f8ff,\n  antiquewhite: 0xfaebd7,\n  aqua: 0x00ffff,\n  aquamarine: 0x7fffd4,\n  azure: 0xf0ffff,\n  beige: 0xf5f5dc,\n  bisque: 0xffe4c4,\n  black: 0x000000,\n  blanchedalmond: 0xffebcd,\n  blue: 0x0000ff,\n  blueviolet: 0x8a2be2,\n  brown: 0xa52a2a,\n  burlywood: 0xdeb887,\n  cadetblue: 0x5f9ea0,\n  chartreuse: 0x7fff00,\n  chocolate: 0xd2691e,\n  coral: 0xff7f50,\n  cornflowerblue: 0x6495ed,\n  cornsilk: 0xfff8dc,\n  crimson: 0xdc143c,\n  cyan: 0x00ffff,\n  darkblue: 0x00008b,\n  darkcyan: 0x008b8b,\n  darkgoldenrod: 0xb8860b,\n  darkgray: 0xa9a9a9,\n  darkgreen: 0x006400,\n  darkgrey: 0xa9a9a9,\n  darkkhaki: 0xbdb76b,\n  darkmagenta: 0x8b008b,\n  darkolivegreen: 0x556b2f,\n  darkorange: 0xff8c00,\n  darkorchid: 0x9932cc,\n  darkred: 0x8b0000,\n  darksalmon: 0xe9967a,\n  darkseagreen: 0x8fbc8f,\n  darkslateblue: 0x483d8b,\n  darkslategray: 0x2f4f4f,\n  darkslategrey: 0x2f4f4f,\n  darkturquoise: 0x00ced1,\n  darkviolet: 0x9400d3,\n  deeppink: 0xff1493,\n  deepskyblue: 0x00bfff,\n  dimgray: 0x696969,\n  dimgrey: 0x696969,\n  dodgerblue: 0x1e90ff,\n  firebrick: 0xb22222,\n  floralwhite: 0xfffaf0,\n  forestgreen: 0x228b22,\n  fuchsia: 0xff00ff,\n  gainsboro: 0xdcdcdc,\n  ghostwhite: 0xf8f8ff,\n  gold: 0xffd700,\n  goldenrod: 0xdaa520,\n  gray: 0x808080,\n  green: 0x008000,\n  greenyellow: 0xadff2f,\n  grey: 0x808080,\n  honeydew: 0xf0fff0,\n  hotpink: 0xff69b4,\n  indianred: 0xcd5c5c,\n  indigo: 0x4b0082,\n  ivory: 0xfffff0,\n  khaki: 0xf0e68c,\n  lavender: 0xe6e6fa,\n  lavenderblush: 0xfff0f5,\n  lawngreen: 0x7cfc00,\n  lemonchiffon: 0xfffacd,\n  lightblue: 0xadd8e6,\n  lightcoral: 0xf08080,\n  lightcyan: 0xe0ffff,\n  lightgoldenrodyellow: 0xfafad2,\n  lightgray: 0xd3d3d3,\n  lightgreen: 0x90ee90,\n  lightgrey: 0xd3d3d3,\n  lightpink: 0xffb6c1,\n  lightsalmon: 0xffa07a,\n  lightseagreen: 0x20b2aa,\n  lightskyblue: 0x87cefa,\n  lightslategray: 0x778899,\n  lightslategrey: 0x778899,\n  lightsteelblue: 0xb0c4de,\n  lightyellow: 0xffffe0,\n  lime: 0x00ff00,\n  limegreen: 0x32cd32,\n  linen: 0xfaf0e6,\n  magenta: 0xff00ff,\n  maroon: 0x800000,\n  mediumaquamarine: 0x66cdaa,\n  mediumblue: 0x0000cd,\n  mediumorchid: 0xba55d3,\n  mediumpurple: 0x9370db,\n  mediumseagreen: 0x3cb371,\n  mediumslateblue: 0x7b68ee,\n  mediumspringgreen: 0x00fa9a,\n  mediumturquoise: 0x48d1cc,\n  mediumvioletred: 0xc71585,\n  midnightblue: 0x191970,\n  mintcream: 0xf5fffa,\n  mistyrose: 0xffe4e1,\n  moccasin: 0xffe4b5,\n  navajowhite: 0xffdead,\n  navy: 0x000080,\n  oldlace: 0xfdf5e6,\n  olive: 0x808000,\n  olivedrab: 0x6b8e23,\n  orange: 0xffa500,\n  orangered: 0xff4500,\n  orchid: 0xda70d6,\n  palegoldenrod: 0xeee8aa,\n  palegreen: 0x98fb98,\n  paleturquoise: 0xafeeee,\n  palevioletred: 0xdb7093,\n  papayawhip: 0xffefd5,\n  peachpuff: 0xffdab9,\n  peru: 0xcd853f,\n  pink: 0xffc0cb,\n  plum: 0xdda0dd,\n  powderblue: 0xb0e0e6,\n  purple: 0x800080,\n  rebeccapurple: 0x663399,\n  red: 0xff0000,\n  rosybrown: 0xbc8f8f,\n  royalblue: 0x4169e1,\n  saddlebrown: 0x8b4513,\n  salmon: 0xfa8072,\n  sandybrown: 0xf4a460,\n  seagreen: 0x2e8b57,\n  seashell: 0xfff5ee,\n  sienna: 0xa0522d,\n  silver: 0xc0c0c0,\n  skyblue: 0x87ceeb,\n  slateblue: 0x6a5acd,\n  slategray: 0x708090,\n  slategrey: 0x708090,\n  snow: 0xfffafa,\n  springgreen: 0x00ff7f,\n  steelblue: 0x4682b4,\n  tan: 0xd2b48c,\n  teal: 0x008080,\n  thistle: 0xd8bfd8,\n  tomato: 0xff6347,\n  turquoise: 0x40e0d0,\n  violet: 0xee82ee,\n  wheat: 0xf5deb3,\n  white: 0xffffff,\n  whitesmoke: 0xf5f5f5,\n  yellow: 0xffff00,\n  yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n  copy: function(channels) {\n    return Object.assign(new this.constructor, this, channels);\n  },\n  displayable: function() {\n    return this.rgb().displayable();\n  },\n  hex: color_formatHex, // Deprecated! Use color.formatHex.\n  formatHex: color_formatHex,\n  formatHsl: color_formatHsl,\n  formatRgb: color_formatRgb,\n  toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n  return this.rgb().formatHex();\n}\n\nfunction color_formatHsl() {\n  return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n  return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n  var m, l;\n  format = (format + \"\").trim().toLowerCase();\n  return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n      : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n      : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n      : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n      : null) // invalid hex\n      : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n      : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n      : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n      : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n      : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n      : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n      : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n      : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n      : null;\n}\n\nfunction rgbn(n) {\n  return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n  if (a <= 0) r = g = b = NaN;\n  return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n  if (!(o instanceof Color)) o = color(o);\n  if (!o) return new Rgb;\n  o = o.rgb();\n  return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n  return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n  this.r = +r;\n  this.g = +g;\n  this.b = +b;\n  this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n  brighter: function(k) {\n    k = k == null ? brighter : Math.pow(brighter, k);\n    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n  },\n  darker: function(k) {\n    k = k == null ? darker : Math.pow(darker, k);\n    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n  },\n  rgb: function() {\n    return this;\n  },\n  displayable: function() {\n    return (-0.5 <= this.r && this.r < 255.5)\n        && (-0.5 <= this.g && this.g < 255.5)\n        && (-0.5 <= this.b && this.b < 255.5)\n        && (0 <= this.opacity && this.opacity <= 1);\n  },\n  hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n  formatHex: rgb_formatHex,\n  formatRgb: rgb_formatRgb,\n  toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n  return \"#\" + hex(this.r) + hex(this.g) + hex(this.b);\n}\n\nfunction rgb_formatRgb() {\n  var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n  return (a === 1 ? \"rgb(\" : \"rgba(\")\n      + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + \", \"\n      + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + \", \"\n      + Math.max(0, Math.min(255, Math.round(this.b) || 0))\n      + (a === 1 ? \")\" : \", \" + a + \")\");\n}\n\nfunction hex(value) {\n  value = Math.max(0, Math.min(255, Math.round(value) || 0));\n  return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n  if (a <= 0) h = s = l = NaN;\n  else if (l <= 0 || l >= 1) h = s = NaN;\n  else if (s <= 0) h = NaN;\n  return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n  if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n  if (!(o instanceof Color)) o = color(o);\n  if (!o) return new Hsl;\n  if (o instanceof Hsl) return o;\n  o = o.rgb();\n  var r = o.r / 255,\n      g = o.g / 255,\n      b = o.b / 255,\n      min = Math.min(r, g, b),\n      max = Math.max(r, g, b),\n      h = NaN,\n      s = max - min,\n      l = (max + min) / 2;\n  if (s) {\n    if (r === max) h = (g - b) / s + (g < b) * 6;\n    else if (g === max) h = (b - r) / s + 2;\n    else h = (r - g) / s + 4;\n    s /= l < 0.5 ? max + min : 2 - max - min;\n    h *= 60;\n  } else {\n    s = l > 0 && l < 1 ? 0 : h;\n  }\n  return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n  return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n  this.h = +h;\n  this.s = +s;\n  this.l = +l;\n  this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n  brighter: function(k) {\n    k = k == null ? brighter : Math.pow(brighter, k);\n    return new Hsl(this.h, this.s, this.l * k, this.opacity);\n  },\n  darker: function(k) {\n    k = k == null ? darker : Math.pow(darker, k);\n    return new Hsl(this.h, this.s, this.l * k, this.opacity);\n  },\n  rgb: function() {\n    var h = this.h % 360 + (this.h < 0) * 360,\n        s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n        l = this.l,\n        m2 = l + (l < 0.5 ? l : 1 - l) * s,\n        m1 = 2 * l - m2;\n    return new Rgb(\n      hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n      hsl2rgb(h, m1, m2),\n      hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n      this.opacity\n    );\n  },\n  displayable: function() {\n    return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n        && (0 <= this.l && this.l <= 1)\n        && (0 <= this.opacity && this.opacity <= 1);\n  },\n  formatHsl: function() {\n    var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n    return (a === 1 ? \"hsl(\" : \"hsla(\")\n        + (this.h || 0) + \", \"\n        + (this.s || 0) * 100 + \"%, \"\n        + (this.l || 0) * 100 + \"%\"\n        + (a === 1 ? \")\" : \", \" + a + \")\");\n  }\n}));\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n  return (h < 60 ? m1 + (m2 - m1) * h / 60\n      : h < 180 ? m2\n      : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n      : m1) * 255;\n}\n","export var durationSecond = 1e3;\nexport var durationMinute = 6e4;\nexport var durationHour = 36e5;\nexport var durationDay = 864e5;\nexport var durationWeek = 6048e5;\n","import interval from \"./interval.js\";\n\nvar millisecond = interval(function() {\n  // noop\n}, function(date, step) {\n  date.setTime(+date + step);\n}, function(start, end) {\n  return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = function(k) {\n  k = Math.floor(k);\n  if (!isFinite(k) || !(k > 0)) return null;\n  if (!(k > 1)) return millisecond;\n  return interval(function(date) {\n    date.setTime(Math.floor(date / k) * k);\n  }, function(date, step) {\n    date.setTime(+date + step * k);\n  }, function(start, end) {\n    return (end - start) / k;\n  });\n};\n\nexport default millisecond;\nexport var milliseconds = millisecond.range;\n","var t0 = new Date,\n    t1 = new Date;\n\nexport default function newInterval(floori, offseti, count, field) {\n\n  function interval(date) {\n    return floori(date = arguments.length === 0 ? new Date : new Date(+date)), date;\n  }\n\n  interval.floor = function(date) {\n    return floori(date = new Date(+date)), date;\n  };\n\n  interval.ceil = function(date) {\n    return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n  };\n\n  interval.round = function(date) {\n    var d0 = interval(date),\n        d1 = interval.ceil(date);\n    return date - d0 < d1 - date ? d0 : d1;\n  };\n\n  interval.offset = function(date, step) {\n    return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n  };\n\n  interval.range = function(start, stop, step) {\n    var range = [], previous;\n    start = interval.ceil(start);\n    step = step == null ? 1 : Math.floor(step);\n    if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n    do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n    while (previous < start && start < stop);\n    return range;\n  };\n\n  interval.filter = function(test) {\n    return newInterval(function(date) {\n      if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n    }, function(date, step) {\n      if (date >= date) {\n        if (step < 0) while (++step <= 0) {\n          while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n        } else while (--step >= 0) {\n          while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n        }\n      }\n    });\n  };\n\n  if (count) {\n    interval.count = function(start, end) {\n      t0.setTime(+start), t1.setTime(+end);\n      floori(t0), floori(t1);\n      return Math.floor(count(t0, t1));\n    };\n\n    interval.every = function(step) {\n      step = Math.floor(step);\n      return !isFinite(step) || !(step > 0) ? null\n          : !(step > 1) ? interval\n          : interval.filter(field\n              ? function(d) { return field(d) % step === 0; }\n              : function(d) { return interval.count(0, d) % step === 0; });\n    };\n  }\n\n  return interval;\n}\n","import interval from \"./interval.js\";\nimport {durationWeek} from \"./duration.js\";\n\nfunction utcWeekday(i) {\n  return interval(function(date) {\n    date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n    date.setUTCHours(0, 0, 0, 0);\n  }, function(date, step) {\n    date.setUTCDate(date.getUTCDate() + step * 7);\n  }, function(start, end) {\n    return (end - start) / durationWeek;\n  });\n}\n\nexport var utcSunday = utcWeekday(0);\nexport var utcMonday = utcWeekday(1);\nexport var utcTuesday = utcWeekday(2);\nexport var utcWednesday = utcWeekday(3);\nexport var utcThursday = utcWeekday(4);\nexport var utcFriday = utcWeekday(5);\nexport var utcSaturday = utcWeekday(6);\n\nexport var utcSundays = utcSunday.range;\nexport var utcMondays = utcMonday.range;\nexport var utcTuesdays = utcTuesday.range;\nexport var utcWednesdays = utcWednesday.range;\nexport var utcThursdays = utcThursday.range;\nexport var utcFridays = utcFriday.range;\nexport var utcSaturdays = utcSaturday.range;\n","import interval from \"./interval.js\";\nimport {durationMinute, durationSecond} from \"./duration.js\";\n\nvar minute = interval(function(date) {\n  date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);\n}, function(date, step) {\n  date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n  return (end - start) / durationMinute;\n}, function(date) {\n  return date.getMinutes();\n});\n\nexport default minute;\nexport var minutes = minute.range;\n","import defaultView from \"../window\";\n\nfunction styleRemove(name) {\n  return function() {\n    this.style.removeProperty(name);\n  };\n}\n\nfunction styleConstant(name, value, priority) {\n  return function() {\n    this.style.setProperty(name, value, priority);\n  };\n}\n\nfunction styleFunction(name, value, priority) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) this.style.removeProperty(name);\n    else this.style.setProperty(name, v, priority);\n  };\n}\n\nexport default function(name, value, priority) {\n  return arguments.length > 1\n      ? this.each((value == null\n            ? styleRemove : typeof value === \"function\"\n            ? styleFunction\n            : styleConstant)(name, value, priority == null ? \"\" : priority))\n      : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n  return node.style.getPropertyValue(name)\n      || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n","function empty() {\n  return [];\n}\n\nexport default function(selector) {\n  return selector == null ? empty : function() {\n    return this.querySelectorAll(selector);\n  };\n}\n","export var slice = Array.prototype.slice;\n","export default function(x) {\n  return x;\n}\n","import {slice} from \"./array\";\nimport identity from \"./identity\";\n\nvar top = 1,\n    right = 2,\n    bottom = 3,\n    left = 4,\n    epsilon = 1e-6;\n\nfunction translateX(x) {\n  return \"translate(\" + (x + 0.5) + \",0)\";\n}\n\nfunction translateY(y) {\n  return \"translate(0,\" + (y + 0.5) + \")\";\n}\n\nfunction number(scale) {\n  return function(d) {\n    return +scale(d);\n  };\n}\n\nfunction center(scale) {\n  var offset = Math.max(0, scale.bandwidth() - 1) / 2; // Adjust for 0.5px offset.\n  if (scale.round()) offset = Math.round(offset);\n  return function(d) {\n    return +scale(d) + offset;\n  };\n}\n\nfunction entering() {\n  return !this.__axis;\n}\n\nfunction axis(orient, scale) {\n  var tickArguments = [],\n      tickValues = null,\n      tickFormat = null,\n      tickSizeInner = 6,\n      tickSizeOuter = 6,\n      tickPadding = 3,\n      k = orient === top || orient === left ? -1 : 1,\n      x = orient === left || orient === right ? \"x\" : \"y\",\n      transform = orient === top || orient === bottom ? translateX : translateY;\n\n  function axis(context) {\n    var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,\n        format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity) : tickFormat,\n        spacing = Math.max(tickSizeInner, 0) + tickPadding,\n        range = scale.range(),\n        range0 = +range[0] + 0.5,\n        range1 = +range[range.length - 1] + 0.5,\n        position = (scale.bandwidth ? center : number)(scale.copy()),\n        selection = context.selection ? context.selection() : context,\n        path = selection.selectAll(\".domain\").data([null]),\n        tick = selection.selectAll(\".tick\").data(values, scale).order(),\n        tickExit = tick.exit(),\n        tickEnter = tick.enter().append(\"g\").attr(\"class\", \"tick\"),\n        line = tick.select(\"line\"),\n        text = tick.select(\"text\");\n\n    path = path.merge(path.enter().insert(\"path\", \".tick\")\n        .attr(\"class\", \"domain\")\n        .attr(\"stroke\", \"currentColor\"));\n\n    tick = tick.merge(tickEnter);\n\n    line = line.merge(tickEnter.append(\"line\")\n        .attr(\"stroke\", \"currentColor\")\n        .attr(x + \"2\", k * tickSizeInner));\n\n    text = text.merge(tickEnter.append(\"text\")\n        .attr(\"fill\", \"currentColor\")\n        .attr(x, k * spacing)\n        .attr(\"dy\", orient === top ? \"0em\" : orient === bottom ? \"0.71em\" : \"0.32em\"));\n\n    if (context !== selection) {\n      path = path.transition(context);\n      tick = tick.transition(context);\n      line = line.transition(context);\n      text = text.transition(context);\n\n      tickExit = tickExit.transition(context)\n          .attr(\"opacity\", epsilon)\n          .attr(\"transform\", function(d) { return isFinite(d = position(d)) ? transform(d) : this.getAttribute(\"transform\"); });\n\n      tickEnter\n          .attr(\"opacity\", epsilon)\n          .attr(\"transform\", function(d) { var p = this.parentNode.__axis; return transform(p && isFinite(p = p(d)) ? p : position(d)); });\n    }\n\n    tickExit.remove();\n\n    path\n        .attr(\"d\", orient === left || orient == right\n            ? (tickSizeOuter ? \"M\" + k * tickSizeOuter + \",\" + range0 + \"H0.5V\" + range1 + \"H\" + k * tickSizeOuter : \"M0.5,\" + range0 + \"V\" + range1)\n            : (tickSizeOuter ? \"M\" + range0 + \",\" + k * tickSizeOuter + \"V0.5H\" + range1 + \"V\" + k * tickSizeOuter : \"M\" + range0 + \",0.5H\" + range1));\n\n    tick\n        .attr(\"opacity\", 1)\n        .attr(\"transform\", function(d) { return transform(position(d)); });\n\n    line\n        .attr(x + \"2\", k * tickSizeInner);\n\n    text\n        .attr(x, k * spacing)\n        .text(format);\n\n    selection.filter(entering)\n        .attr(\"fill\", \"none\")\n        .attr(\"font-size\", 10)\n        .attr(\"font-family\", \"sans-serif\")\n        .attr(\"text-anchor\", orient === right ? \"start\" : orient === left ? \"end\" : \"middle\");\n\n    selection\n        .each(function() { this.__axis = position; });\n  }\n\n  axis.scale = function(_) {\n    return arguments.length ? (scale = _, axis) : scale;\n  };\n\n  axis.ticks = function() {\n    return tickArguments = slice.call(arguments), axis;\n  };\n\n  axis.tickArguments = function(_) {\n    return arguments.length ? (tickArguments = _ == null ? [] : slice.call(_), axis) : tickArguments.slice();\n  };\n\n  axis.tickValues = function(_) {\n    return arguments.length ? (tickValues = _ == null ? null : slice.call(_), axis) : tickValues && tickValues.slice();\n  };\n\n  axis.tickFormat = function(_) {\n    return arguments.length ? (tickFormat = _, axis) : tickFormat;\n  };\n\n  axis.tickSize = function(_) {\n    return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;\n  };\n\n  axis.tickSizeInner = function(_) {\n    return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;\n  };\n\n  axis.tickSizeOuter = function(_) {\n    return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;\n  };\n\n  axis.tickPadding = function(_) {\n    return arguments.length ? (tickPadding = +_, axis) : tickPadding;\n  };\n\n  return axis;\n}\n\nexport function axisTop(scale) {\n  return axis(top, scale);\n}\n\nexport function axisRight(scale) {\n  return axis(right, scale);\n}\n\nexport function axisBottom(scale) {\n  return axis(bottom, scale);\n}\n\nexport function axisLeft(scale) {\n  return axis(left, scale);\n}\n","import {event} from \"./selection/on\";\n\nexport default function() {\n  var current = event, source;\n  while (source = current.sourceEvent) current = source;\n  return current;\n}\n","import {\n  timeDay,\n  timeSunday,\n  timeMonday,\n  timeThursday,\n  timeYear,\n  utcDay,\n  utcSunday,\n  utcMonday,\n  utcThursday,\n  utcYear\n} from \"d3-time\";\n\nfunction localDate(d) {\n  if (0 <= d.y && d.y < 100) {\n    var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n    date.setFullYear(d.y);\n    return date;\n  }\n  return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n}\n\nfunction utcDate(d) {\n  if (0 <= d.y && d.y < 100) {\n    var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n    date.setUTCFullYear(d.y);\n    return date;\n  }\n  return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n}\n\nfunction newDate(y, m, d) {\n  return {y: y, m: m, d: d, H: 0, M: 0, S: 0, L: 0};\n}\n\nexport default function formatLocale(locale) {\n  var locale_dateTime = locale.dateTime,\n      locale_date = locale.date,\n      locale_time = locale.time,\n      locale_periods = locale.periods,\n      locale_weekdays = locale.days,\n      locale_shortWeekdays = locale.shortDays,\n      locale_months = locale.months,\n      locale_shortMonths = locale.shortMonths;\n\n  var periodRe = formatRe(locale_periods),\n      periodLookup = formatLookup(locale_periods),\n      weekdayRe = formatRe(locale_weekdays),\n      weekdayLookup = formatLookup(locale_weekdays),\n      shortWeekdayRe = formatRe(locale_shortWeekdays),\n      shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n      monthRe = formatRe(locale_months),\n      monthLookup = formatLookup(locale_months),\n      shortMonthRe = formatRe(locale_shortMonths),\n      shortMonthLookup = formatLookup(locale_shortMonths);\n\n  var formats = {\n    \"a\": formatShortWeekday,\n    \"A\": formatWeekday,\n    \"b\": formatShortMonth,\n    \"B\": formatMonth,\n    \"c\": null,\n    \"d\": formatDayOfMonth,\n    \"e\": formatDayOfMonth,\n    \"f\": formatMicroseconds,\n    \"g\": formatYearISO,\n    \"G\": formatFullYearISO,\n    \"H\": formatHour24,\n    \"I\": formatHour12,\n    \"j\": formatDayOfYear,\n    \"L\": formatMilliseconds,\n    \"m\": formatMonthNumber,\n    \"M\": formatMinutes,\n    \"p\": formatPeriod,\n    \"q\": formatQuarter,\n    \"Q\": formatUnixTimestamp,\n    \"s\": formatUnixTimestampSeconds,\n    \"S\": formatSeconds,\n    \"u\": formatWeekdayNumberMonday,\n    \"U\": formatWeekNumberSunday,\n    \"V\": formatWeekNumberISO,\n    \"w\": formatWeekdayNumberSunday,\n    \"W\": formatWeekNumberMonday,\n    \"x\": null,\n    \"X\": null,\n    \"y\": formatYear,\n    \"Y\": formatFullYear,\n    \"Z\": formatZone,\n    \"%\": formatLiteralPercent\n  };\n\n  var utcFormats = {\n    \"a\": formatUTCShortWeekday,\n    \"A\": formatUTCWeekday,\n    \"b\": formatUTCShortMonth,\n    \"B\": formatUTCMonth,\n    \"c\": null,\n    \"d\": formatUTCDayOfMonth,\n    \"e\": formatUTCDayOfMonth,\n    \"f\": formatUTCMicroseconds,\n    \"g\": formatUTCYearISO,\n    \"G\": formatUTCFullYearISO,\n    \"H\": formatUTCHour24,\n    \"I\": formatUTCHour12,\n    \"j\": formatUTCDayOfYear,\n    \"L\": formatUTCMilliseconds,\n    \"m\": formatUTCMonthNumber,\n    \"M\": formatUTCMinutes,\n    \"p\": formatUTCPeriod,\n    \"q\": formatUTCQuarter,\n    \"Q\": formatUnixTimestamp,\n    \"s\": formatUnixTimestampSeconds,\n    \"S\": formatUTCSeconds,\n    \"u\": formatUTCWeekdayNumberMonday,\n    \"U\": formatUTCWeekNumberSunday,\n    \"V\": formatUTCWeekNumberISO,\n    \"w\": formatUTCWeekdayNumberSunday,\n    \"W\": formatUTCWeekNumberMonday,\n    \"x\": null,\n    \"X\": null,\n    \"y\": formatUTCYear,\n    \"Y\": formatUTCFullYear,\n    \"Z\": formatUTCZone,\n    \"%\": formatLiteralPercent\n  };\n\n  var parses = {\n    \"a\": parseShortWeekday,\n    \"A\": parseWeekday,\n    \"b\": parseShortMonth,\n    \"B\": parseMonth,\n    \"c\": parseLocaleDateTime,\n    \"d\": parseDayOfMonth,\n    \"e\": parseDayOfMonth,\n    \"f\": parseMicroseconds,\n    \"g\": parseYear,\n    \"G\": parseFullYear,\n    \"H\": parseHour24,\n    \"I\": parseHour24,\n    \"j\": parseDayOfYear,\n    \"L\": parseMilliseconds,\n    \"m\": parseMonthNumber,\n    \"M\": parseMinutes,\n    \"p\": parsePeriod,\n    \"q\": parseQuarter,\n    \"Q\": parseUnixTimestamp,\n    \"s\": parseUnixTimestampSeconds,\n    \"S\": parseSeconds,\n    \"u\": parseWeekdayNumberMonday,\n    \"U\": parseWeekNumberSunday,\n    \"V\": parseWeekNumberISO,\n    \"w\": parseWeekdayNumberSunday,\n    \"W\": parseWeekNumberMonday,\n    \"x\": parseLocaleDate,\n    \"X\": parseLocaleTime,\n    \"y\": parseYear,\n    \"Y\": parseFullYear,\n    \"Z\": parseZone,\n    \"%\": parseLiteralPercent\n  };\n\n  // These recursive directive definitions must be deferred.\n  formats.x = newFormat(locale_date, formats);\n  formats.X = newFormat(locale_time, formats);\n  formats.c = newFormat(locale_dateTime, formats);\n  utcFormats.x = newFormat(locale_date, utcFormats);\n  utcFormats.X = newFormat(locale_time, utcFormats);\n  utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n  function newFormat(specifier, formats) {\n    return function(date) {\n      var string = [],\n          i = -1,\n          j = 0,\n          n = specifier.length,\n          c,\n          pad,\n          format;\n\n      if (!(date instanceof Date)) date = new Date(+date);\n\n      while (++i < n) {\n        if (specifier.charCodeAt(i) === 37) {\n          string.push(specifier.slice(j, i));\n          if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n          else pad = c === \"e\" ? \" \" : \"0\";\n          if (format = formats[c]) c = format(date, pad);\n          string.push(c);\n          j = i + 1;\n        }\n      }\n\n      string.push(specifier.slice(j, i));\n      return string.join(\"\");\n    };\n  }\n\n  function newParse(specifier, Z) {\n    return function(string) {\n      var d = newDate(1900, undefined, 1),\n          i = parseSpecifier(d, specifier, string += \"\", 0),\n          week, day;\n      if (i != string.length) return null;\n\n      // If a UNIX timestamp is specified, return it.\n      if (\"Q\" in d) return new Date(d.Q);\n      if (\"s\" in d) return new Date(d.s * 1000 + (\"L\" in d ? d.L : 0));\n\n      // If this is utcParse, never use the local timezone.\n      if (Z && !(\"Z\" in d)) d.Z = 0;\n\n      // The am-pm flag is 0 for AM, and 1 for PM.\n      if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n      // If the month was not specified, inherit from the quarter.\n      if (d.m === undefined) d.m = \"q\" in d ? d.q : 0;\n\n      // Convert day-of-week and week-of-year to day-of-year.\n      if (\"V\" in d) {\n        if (d.V < 1 || d.V > 53) return null;\n        if (!(\"w\" in d)) d.w = 1;\n        if (\"Z\" in d) {\n          week = utcDate(newDate(d.y, 0, 1)), day = week.getUTCDay();\n          week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);\n          week = utcDay.offset(week, (d.V - 1) * 7);\n          d.y = week.getUTCFullYear();\n          d.m = week.getUTCMonth();\n          d.d = week.getUTCDate() + (d.w + 6) % 7;\n        } else {\n          week = localDate(newDate(d.y, 0, 1)), day = week.getDay();\n          week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week);\n          week = timeDay.offset(week, (d.V - 1) * 7);\n          d.y = week.getFullYear();\n          d.m = week.getMonth();\n          d.d = week.getDate() + (d.w + 6) % 7;\n        }\n      } else if (\"W\" in d || \"U\" in d) {\n        if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n        day = \"Z\" in d ? utcDate(newDate(d.y, 0, 1)).getUTCDay() : localDate(newDate(d.y, 0, 1)).getDay();\n        d.m = 0;\n        d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n      }\n\n      // If a time zone is specified, all fields are interpreted as UTC and then\n      // offset according to the specified time zone.\n      if (\"Z\" in d) {\n        d.H += d.Z / 100 | 0;\n        d.M += d.Z % 100;\n        return utcDate(d);\n      }\n\n      // Otherwise, all fields are in local time.\n      return localDate(d);\n    };\n  }\n\n  function parseSpecifier(d, specifier, string, j) {\n    var i = 0,\n        n = specifier.length,\n        m = string.length,\n        c,\n        parse;\n\n    while (i < n) {\n      if (j >= m) return -1;\n      c = specifier.charCodeAt(i++);\n      if (c === 37) {\n        c = specifier.charAt(i++);\n        parse = parses[c in pads ? specifier.charAt(i++) : c];\n        if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n      } else if (c != string.charCodeAt(j++)) {\n        return -1;\n      }\n    }\n\n    return j;\n  }\n\n  function parsePeriod(d, string, i) {\n    var n = periodRe.exec(string.slice(i));\n    return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n  }\n\n  function parseShortWeekday(d, string, i) {\n    var n = shortWeekdayRe.exec(string.slice(i));\n    return n ? (d.w = shortWeekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n  }\n\n  function parseWeekday(d, string, i) {\n    var n = weekdayRe.exec(string.slice(i));\n    return n ? (d.w = weekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n  }\n\n  function parseShortMonth(d, string, i) {\n    var n = shortMonthRe.exec(string.slice(i));\n    return n ? (d.m = shortMonthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n  }\n\n  function parseMonth(d, string, i) {\n    var n = monthRe.exec(string.slice(i));\n    return n ? (d.m = monthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n  }\n\n  function parseLocaleDateTime(d, string, i) {\n    return parseSpecifier(d, locale_dateTime, string, i);\n  }\n\n  function parseLocaleDate(d, string, i) {\n    return parseSpecifier(d, locale_date, string, i);\n  }\n\n  function parseLocaleTime(d, string, i) {\n    return parseSpecifier(d, locale_time, string, i);\n  }\n\n  function formatShortWeekday(d) {\n    return locale_shortWeekdays[d.getDay()];\n  }\n\n  function formatWeekday(d) {\n    return locale_weekdays[d.getDay()];\n  }\n\n  function formatShortMonth(d) {\n    return locale_shortMonths[d.getMonth()];\n  }\n\n  function formatMonth(d) {\n    return locale_months[d.getMonth()];\n  }\n\n  function formatPeriod(d) {\n    return locale_periods[+(d.getHours() >= 12)];\n  }\n\n  function formatQuarter(d) {\n    return 1 + ~~(d.getMonth() / 3);\n  }\n\n  function formatUTCShortWeekday(d) {\n    return locale_shortWeekdays[d.getUTCDay()];\n  }\n\n  function formatUTCWeekday(d) {\n    return locale_weekdays[d.getUTCDay()];\n  }\n\n  function formatUTCShortMonth(d) {\n    return locale_shortMonths[d.getUTCMonth()];\n  }\n\n  function formatUTCMonth(d) {\n    return locale_months[d.getUTCMonth()];\n  }\n\n  function formatUTCPeriod(d) {\n    return locale_periods[+(d.getUTCHours() >= 12)];\n  }\n\n  function formatUTCQuarter(d) {\n    return 1 + ~~(d.getUTCMonth() / 3);\n  }\n\n  return {\n    format: function(specifier) {\n      var f = newFormat(specifier += \"\", formats);\n      f.toString = function() { return specifier; };\n      return f;\n    },\n    parse: function(specifier) {\n      var p = newParse(specifier += \"\", false);\n      p.toString = function() { return specifier; };\n      return p;\n    },\n    utcFormat: function(specifier) {\n      var f = newFormat(specifier += \"\", utcFormats);\n      f.toString = function() { return specifier; };\n      return f;\n    },\n    utcParse: function(specifier) {\n      var p = newParse(specifier += \"\", true);\n      p.toString = function() { return specifier; };\n      return p;\n    }\n  };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n    numberRe = /^\\s*\\d+/, // note: ignores next directive\n    percentRe = /^%/,\n    requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction pad(value, fill, width) {\n  var sign = value < 0 ? \"-\" : \"\",\n      string = (sign ? -value : value) + \"\",\n      length = string.length;\n  return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n}\n\nfunction requote(s) {\n  return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n  return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n  var map = {}, i = -1, n = names.length;\n  while (++i < n) map[names[i].toLowerCase()] = i;\n  return map;\n}\n\nfunction parseWeekdayNumberSunday(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 1));\n  return n ? (d.w = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekdayNumberMonday(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 1));\n  return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseFullYear(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 4));\n  return n ? (d.y = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseYear(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n}\n\nfunction parseZone(d, string, i) {\n  var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n  return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction parseQuarter(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 1));\n  return n ? (d.q = n[0] * 3 - 3, i + n[0].length) : -1;\n}\n\nfunction parseMonthNumber(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n}\n\nfunction parseDayOfMonth(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseDayOfYear(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 3));\n  return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseHour24(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.H = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMinutes(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.M = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseSeconds(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.S = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMilliseconds(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 3));\n  return n ? (d.L = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMicroseconds(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 6));\n  return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n  var n = percentRe.exec(string.slice(i, i + 1));\n  return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n  var n = numberRe.exec(string.slice(i));\n  return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n  var n = numberRe.exec(string.slice(i));\n  return n ? (d.s = +n[0], i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n  return pad(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n  return pad(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n  return pad(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n  return pad(1 + timeDay.count(timeYear(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n  return pad(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n  return formatMilliseconds(d, p) + \"000\";\n}\n\nfunction formatMonthNumber(d, p) {\n  return pad(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n  return pad(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n  return pad(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n  var day = d.getDay();\n  return day === 0 ? 7 : day;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n  return pad(timeSunday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction dISO(d) {\n  var day = d.getDay();\n  return (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n}\n\nfunction formatWeekNumberISO(d, p) {\n  d = dISO(d);\n  return pad(timeThursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n  return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n  return pad(timeMonday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction formatYear(d, p) {\n  return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatYearISO(d, p) {\n  d = dISO(d);\n  return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n  return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatFullYearISO(d, p) {\n  var day = d.getDay();\n  d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n  return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatZone(d) {\n  var z = d.getTimezoneOffset();\n  return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n      + pad(z / 60 | 0, \"0\", 2)\n      + pad(z % 60, \"0\", 2);\n}\n\nfunction formatUTCDayOfMonth(d, p) {\n  return pad(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n  return pad(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n  return pad(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n  return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n  return pad(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n  return formatUTCMilliseconds(d, p) + \"000\";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n  return pad(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n  return pad(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n  return pad(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n  var dow = d.getUTCDay();\n  return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n  return pad(utcSunday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction UTCdISO(d) {\n  var day = d.getUTCDay();\n  return (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n  d = UTCdISO(d);\n  return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n  return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n  return pad(utcMonday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n  return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCYearISO(d, p) {\n  d = UTCdISO(d);\n  return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n  return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCFullYearISO(d, p) {\n  var day = d.getUTCDay();\n  d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n  return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n  return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n  return \"%\";\n}\n\nfunction formatUnixTimestamp(d) {\n  return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n  return Math.floor(+d / 1000);\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var timeFormat;\nexport var timeParse;\nexport var utcFormat;\nexport var utcParse;\n\ndefaultLocale({\n  dateTime: \"%x, %X\",\n  date: \"%-m/%-d/%Y\",\n  time: \"%-I:%M:%S %p\",\n  periods: [\"AM\", \"PM\"],\n  days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n  shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n  months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n  shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n});\n\nexport default function defaultLocale(definition) {\n  locale = formatLocale(definition);\n  timeFormat = locale.format;\n  timeParse = locale.parse;\n  utcFormat = locale.utcFormat;\n  utcParse = locale.utcParse;\n  return locale;\n}\n","import namespace from \"./namespace\";\nimport {xhtml} from \"./namespaces\";\n\nfunction creatorInherit(name) {\n  return function() {\n    var document = this.ownerDocument,\n        uri = this.namespaceURI;\n    return uri === xhtml && document.documentElement.namespaceURI === xhtml\n        ? document.createElement(name)\n        : document.createElementNS(uri, name);\n  };\n}\n\nfunction creatorFixed(fullname) {\n  return function() {\n    return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n  };\n}\n\nexport default function(name) {\n  var fullname = namespace(name);\n  return (fullname.local\n      ? creatorFixed\n      : creatorInherit)(fullname);\n}\n","import interval from \"./interval.js\";\n\nvar utcMonth = interval(function(date) {\n  date.setUTCDate(1);\n  date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n  date.setUTCMonth(date.getUTCMonth() + step);\n}, function(start, end) {\n  return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n}, function(date) {\n  return date.getUTCMonth();\n});\n\nexport default utcMonth;\nexport var utcMonths = utcMonth.range;\n","export var name = \"d3\";\nexport var version = \"5.16.0\";\nexport var description = \"Data-Driven Documents\";\nexport var keywords = [\"dom\",\"visualization\",\"svg\",\"animation\",\"canvas\"];\nexport var homepage = \"https://d3js.org\";\nexport var license = \"BSD-3-Clause\";\nexport var author = {\"name\":\"Mike Bostock\",\"url\":\"https://bost.ocks.org/mike\"};\nexport var main = \"dist/d3.node.js\";\nexport var unpkg = \"dist/d3.min.js\";\nexport var jsdelivr = \"dist/d3.min.js\";\nexport var module = \"index.js\";\nexport var repository = {\"type\":\"git\",\"url\":\"https://github.com/d3/d3.git\"};\nexport var files = [\"dist/**/*.js\",\"index.js\"];\nexport var scripts = {\"pretest\":\"rimraf dist && mkdir dist && json2module package.json > dist/package.js && rollup -c\",\"test\":\"tape 'test/**/*-test.js'\",\"prepublishOnly\":\"yarn test\",\"postpublish\":\"git push && git push --tags && cd ../d3.github.com && git pull && cp ../d3/dist/d3.js d3.v5.js && cp ../d3/dist/d3.min.js d3.v5.min.js && git add d3.v5.js d3.v5.min.js && git commit -m \\\"d3 ${npm_package_version}\\\" && git push && cd - && cd ../d3-bower && git pull && cp ../d3/LICENSE ../d3/README.md ../d3/dist/d3.js ../d3/dist/d3.min.js . && git add -- LICENSE README.md d3.js d3.min.js && git commit -m \\\"${npm_package_version}\\\" && git tag -am \\\"${npm_package_version}\\\" v${npm_package_version} && git push && git push --tags && cd - && zip -j dist/d3.zip -- LICENSE README.md API.md CHANGES.md dist/d3.js dist/d3.min.js\"};\nexport var devDependencies = {\"json2module\":\"0.0\",\"rimraf\":\"2\",\"rollup\":\"1\",\"rollup-plugin-ascii\":\"0.0\",\"rollup-plugin-node-resolve\":\"3\",\"rollup-plugin-terser\":\"5\",\"tape\":\"4\"};\nexport var dependencies = {\"d3-array\":\"1\",\"d3-axis\":\"1\",\"d3-brush\":\"1\",\"d3-chord\":\"1\",\"d3-collection\":\"1\",\"d3-color\":\"1\",\"d3-contour\":\"1\",\"d3-dispatch\":\"1\",\"d3-drag\":\"1\",\"d3-dsv\":\"1\",\"d3-ease\":\"1\",\"d3-fetch\":\"1\",\"d3-force\":\"1\",\"d3-format\":\"1\",\"d3-geo\":\"1\",\"d3-hierarchy\":\"1\",\"d3-interpolate\":\"1\",\"d3-path\":\"1\",\"d3-polygon\":\"1\",\"d3-quadtree\":\"1\",\"d3-random\":\"1\",\"d3-scale\":\"2\",\"d3-scale-chromatic\":\"1\",\"d3-selection\":\"1\",\"d3-shape\":\"1\",\"d3-time\":\"1\",\"d3-time-format\":\"2\",\"d3-timer\":\"1\",\"d3-transition\":\"1\",\"d3-voronoi\":\"1\",\"d3-zoom\":\"1\"};\n","import {event} from \"d3-selection\";\n\nexport function nopropagation() {\n  event.stopImmediatePropagation();\n}\n\nexport default function() {\n  event.preventDefault();\n  event.stopImmediatePropagation();\n}\n","import {select} from \"d3-selection\";\nimport noevent from \"./noevent.js\";\n\nexport default function(view) {\n  var root = view.document.documentElement,\n      selection = select(view).on(\"dragstart.drag\", noevent, true);\n  if (\"onselectstart\" in root) {\n    selection.on(\"selectstart.drag\", noevent, true);\n  } else {\n    root.__noselect = root.style.MozUserSelect;\n    root.style.MozUserSelect = \"none\";\n  }\n}\n\nexport function yesdrag(view, noclick) {\n  var root = view.document.documentElement,\n      selection = select(view).on(\"dragstart.drag\", null);\n  if (noclick) {\n    selection.on(\"click.drag\", noevent, true);\n    setTimeout(function() { selection.on(\"click.drag\", null); }, 0);\n  }\n  if (\"onselectstart\" in root) {\n    selection.on(\"selectstart.drag\", null);\n  } else {\n    root.style.MozUserSelect = root.__noselect;\n    delete root.__noselect;\n  }\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {dragDisable, dragEnable} from \"d3-drag\";\nimport {interpolate} from \"d3-interpolate\";\nimport {customEvent, event, touch, mouse, select} from \"d3-selection\";\nimport {interrupt} from \"d3-transition\";\nimport constant from \"./constant.js\";\nimport BrushEvent from \"./event.js\";\nimport noevent, {nopropagation} from \"./noevent.js\";\n\nvar MODE_DRAG = {name: \"drag\"},\n    MODE_SPACE = {name: \"space\"},\n    MODE_HANDLE = {name: \"handle\"},\n    MODE_CENTER = {name: \"center\"};\n\nfunction number1(e) {\n  return [+e[0], +e[1]];\n}\n\nfunction number2(e) {\n  return [number1(e[0]), number1(e[1])];\n}\n\nfunction toucher(identifier) {\n  return function(target) {\n    return touch(target, event.touches, identifier);\n  };\n}\n\nvar X = {\n  name: \"x\",\n  handles: [\"w\", \"e\"].map(type),\n  input: function(x, e) { return x == null ? null : [[+x[0], e[0][1]], [+x[1], e[1][1]]]; },\n  output: function(xy) { return xy && [xy[0][0], xy[1][0]]; }\n};\n\nvar Y = {\n  name: \"y\",\n  handles: [\"n\", \"s\"].map(type),\n  input: function(y, e) { return y == null ? null : [[e[0][0], +y[0]], [e[1][0], +y[1]]]; },\n  output: function(xy) { return xy && [xy[0][1], xy[1][1]]; }\n};\n\nvar XY = {\n  name: \"xy\",\n  handles: [\"n\", \"w\", \"e\", \"s\", \"nw\", \"ne\", \"sw\", \"se\"].map(type),\n  input: function(xy) { return xy == null ? null : number2(xy); },\n  output: function(xy) { return xy; }\n};\n\nvar cursors = {\n  overlay: \"crosshair\",\n  selection: \"move\",\n  n: \"ns-resize\",\n  e: \"ew-resize\",\n  s: \"ns-resize\",\n  w: \"ew-resize\",\n  nw: \"nwse-resize\",\n  ne: \"nesw-resize\",\n  se: \"nwse-resize\",\n  sw: \"nesw-resize\"\n};\n\nvar flipX = {\n  e: \"w\",\n  w: \"e\",\n  nw: \"ne\",\n  ne: \"nw\",\n  se: \"sw\",\n  sw: \"se\"\n};\n\nvar flipY = {\n  n: \"s\",\n  s: \"n\",\n  nw: \"sw\",\n  ne: \"se\",\n  se: \"ne\",\n  sw: \"nw\"\n};\n\nvar signsX = {\n  overlay: +1,\n  selection: +1,\n  n: null,\n  e: +1,\n  s: null,\n  w: -1,\n  nw: -1,\n  ne: +1,\n  se: +1,\n  sw: -1\n};\n\nvar signsY = {\n  overlay: +1,\n  selection: +1,\n  n: -1,\n  e: null,\n  s: +1,\n  w: null,\n  nw: -1,\n  ne: -1,\n  se: +1,\n  sw: +1\n};\n\nfunction type(t) {\n  return {type: t};\n}\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter() {\n  return !event.ctrlKey && !event.button;\n}\n\nfunction defaultExtent() {\n  var svg = this.ownerSVGElement || this;\n  if (svg.hasAttribute(\"viewBox\")) {\n    svg = svg.viewBox.baseVal;\n    return [[svg.x, svg.y], [svg.x + svg.width, svg.y + svg.height]];\n  }\n  return [[0, 0], [svg.width.baseVal.value, svg.height.baseVal.value]];\n}\n\nfunction defaultTouchable() {\n  return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\n// Like d3.local, but with the name “__brush” rather than auto-generated.\nfunction local(node) {\n  while (!node.__brush) if (!(node = node.parentNode)) return;\n  return node.__brush;\n}\n\nfunction empty(extent) {\n  return extent[0][0] === extent[1][0]\n      || extent[0][1] === extent[1][1];\n}\n\nexport function brushSelection(node) {\n  var state = node.__brush;\n  return state ? state.dim.output(state.selection) : null;\n}\n\nexport function brushX() {\n  return brush(X);\n}\n\nexport function brushY() {\n  return brush(Y);\n}\n\nexport default function() {\n  return brush(XY);\n}\n\nfunction brush(dim) {\n  var extent = defaultExtent,\n      filter = defaultFilter,\n      touchable = defaultTouchable,\n      keys = true,\n      listeners = dispatch(\"start\", \"brush\", \"end\"),\n      handleSize = 6,\n      touchending;\n\n  function brush(group) {\n    var overlay = group\n        .property(\"__brush\", initialize)\n      .selectAll(\".overlay\")\n      .data([type(\"overlay\")]);\n\n    overlay.enter().append(\"rect\")\n        .attr(\"class\", \"overlay\")\n        .attr(\"pointer-events\", \"all\")\n        .attr(\"cursor\", cursors.overlay)\n      .merge(overlay)\n        .each(function() {\n          var extent = local(this).extent;\n          select(this)\n              .attr(\"x\", extent[0][0])\n              .attr(\"y\", extent[0][1])\n              .attr(\"width\", extent[1][0] - extent[0][0])\n              .attr(\"height\", extent[1][1] - extent[0][1]);\n        });\n\n    group.selectAll(\".selection\")\n      .data([type(\"selection\")])\n      .enter().append(\"rect\")\n        .attr(\"class\", \"selection\")\n        .attr(\"cursor\", cursors.selection)\n        .attr(\"fill\", \"#777\")\n        .attr(\"fill-opacity\", 0.3)\n        .attr(\"stroke\", \"#fff\")\n        .attr(\"shape-rendering\", \"crispEdges\");\n\n    var handle = group.selectAll(\".handle\")\n      .data(dim.handles, function(d) { return d.type; });\n\n    handle.exit().remove();\n\n    handle.enter().append(\"rect\")\n        .attr(\"class\", function(d) { return \"handle handle--\" + d.type; })\n        .attr(\"cursor\", function(d) { return cursors[d.type]; });\n\n    group\n        .each(redraw)\n        .attr(\"fill\", \"none\")\n        .attr(\"pointer-events\", \"all\")\n        .on(\"mousedown.brush\", started)\n      .filter(touchable)\n        .on(\"touchstart.brush\", started)\n        .on(\"touchmove.brush\", touchmoved)\n        .on(\"touchend.brush touchcancel.brush\", touchended)\n        .style(\"touch-action\", \"none\")\n        .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n  }\n\n  brush.move = function(group, selection) {\n    if (group.selection) {\n      group\n          .on(\"start.brush\", function() { emitter(this, arguments).beforestart().start(); })\n          .on(\"interrupt.brush end.brush\", function() { emitter(this, arguments).end(); })\n          .tween(\"brush\", function() {\n            var that = this,\n                state = that.__brush,\n                emit = emitter(that, arguments),\n                selection0 = state.selection,\n                selection1 = dim.input(typeof selection === \"function\" ? selection.apply(this, arguments) : selection, state.extent),\n                i = interpolate(selection0, selection1);\n\n            function tween(t) {\n              state.selection = t === 1 && selection1 === null ? null : i(t);\n              redraw.call(that);\n              emit.brush();\n            }\n\n            return selection0 !== null && selection1 !== null ? tween : tween(1);\n          });\n    } else {\n      group\n          .each(function() {\n            var that = this,\n                args = arguments,\n                state = that.__brush,\n                selection1 = dim.input(typeof selection === \"function\" ? selection.apply(that, args) : selection, state.extent),\n                emit = emitter(that, args).beforestart();\n\n            interrupt(that);\n            state.selection = selection1 === null ? null : selection1;\n            redraw.call(that);\n            emit.start().brush().end();\n          });\n    }\n  };\n\n  brush.clear = function(group) {\n    brush.move(group, null);\n  };\n\n  function redraw() {\n    var group = select(this),\n        selection = local(this).selection;\n\n    if (selection) {\n      group.selectAll(\".selection\")\n          .style(\"display\", null)\n          .attr(\"x\", selection[0][0])\n          .attr(\"y\", selection[0][1])\n          .attr(\"width\", selection[1][0] - selection[0][0])\n          .attr(\"height\", selection[1][1] - selection[0][1]);\n\n      group.selectAll(\".handle\")\n          .style(\"display\", null)\n          .attr(\"x\", function(d) { return d.type[d.type.length - 1] === \"e\" ? selection[1][0] - handleSize / 2 : selection[0][0] - handleSize / 2; })\n          .attr(\"y\", function(d) { return d.type[0] === \"s\" ? selection[1][1] - handleSize / 2 : selection[0][1] - handleSize / 2; })\n          .attr(\"width\", function(d) { return d.type === \"n\" || d.type === \"s\" ? selection[1][0] - selection[0][0] + handleSize : handleSize; })\n          .attr(\"height\", function(d) { return d.type === \"e\" || d.type === \"w\" ? selection[1][1] - selection[0][1] + handleSize : handleSize; });\n    }\n\n    else {\n      group.selectAll(\".selection,.handle\")\n          .style(\"display\", \"none\")\n          .attr(\"x\", null)\n          .attr(\"y\", null)\n          .attr(\"width\", null)\n          .attr(\"height\", null);\n    }\n  }\n\n  function emitter(that, args, clean) {\n    var emit = that.__brush.emitter;\n    return emit && (!clean || !emit.clean) ? emit : new Emitter(that, args, clean);\n  }\n\n  function Emitter(that, args, clean) {\n    this.that = that;\n    this.args = args;\n    this.state = that.__brush;\n    this.active = 0;\n    this.clean = clean;\n  }\n\n  Emitter.prototype = {\n    beforestart: function() {\n      if (++this.active === 1) this.state.emitter = this, this.starting = true;\n      return this;\n    },\n    start: function() {\n      if (this.starting) this.starting = false, this.emit(\"start\");\n      else this.emit(\"brush\");\n      return this;\n    },\n    brush: function() {\n      this.emit(\"brush\");\n      return this;\n    },\n    end: function() {\n      if (--this.active === 0) delete this.state.emitter, this.emit(\"end\");\n      return this;\n    },\n    emit: function(type) {\n      customEvent(new BrushEvent(brush, type, dim.output(this.state.selection)), listeners.apply, listeners, [type, this.that, this.args]);\n    }\n  };\n\n  function started() {\n    if (touchending && !event.touches) return;\n    if (!filter.apply(this, arguments)) return;\n\n    var that = this,\n        type = event.target.__data__.type,\n        mode = (keys && event.metaKey ? type = \"overlay\" : type) === \"selection\" ? MODE_DRAG : (keys && event.altKey ? MODE_CENTER : MODE_HANDLE),\n        signX = dim === Y ? null : signsX[type],\n        signY = dim === X ? null : signsY[type],\n        state = local(that),\n        extent = state.extent,\n        selection = state.selection,\n        W = extent[0][0], w0, w1,\n        N = extent[0][1], n0, n1,\n        E = extent[1][0], e0, e1,\n        S = extent[1][1], s0, s1,\n        dx = 0,\n        dy = 0,\n        moving,\n        shifting = signX && signY && keys && event.shiftKey,\n        lockX,\n        lockY,\n        pointer = event.touches ? toucher(event.changedTouches[0].identifier) : mouse,\n        point0 = pointer(that),\n        point = point0,\n        emit = emitter(that, arguments, true).beforestart();\n\n    if (type === \"overlay\") {\n      if (selection) moving = true;\n      state.selection = selection = [\n        [w0 = dim === Y ? W : point0[0], n0 = dim === X ? N : point0[1]],\n        [e0 = dim === Y ? E : w0, s0 = dim === X ? S : n0]\n      ];\n    } else {\n      w0 = selection[0][0];\n      n0 = selection[0][1];\n      e0 = selection[1][0];\n      s0 = selection[1][1];\n    }\n\n    w1 = w0;\n    n1 = n0;\n    e1 = e0;\n    s1 = s0;\n\n    var group = select(that)\n        .attr(\"pointer-events\", \"none\");\n\n    var overlay = group.selectAll(\".overlay\")\n        .attr(\"cursor\", cursors[type]);\n\n    if (event.touches) {\n      emit.moved = moved;\n      emit.ended = ended;\n    } else {\n      var view = select(event.view)\n          .on(\"mousemove.brush\", moved, true)\n          .on(\"mouseup.brush\", ended, true);\n      if (keys) view\n          .on(\"keydown.brush\", keydowned, true)\n          .on(\"keyup.brush\", keyupped, true)\n\n      dragDisable(event.view);\n    }\n\n    nopropagation();\n    interrupt(that);\n    redraw.call(that);\n    emit.start();\n\n    function moved() {\n      var point1 = pointer(that);\n      if (shifting && !lockX && !lockY) {\n        if (Math.abs(point1[0] - point[0]) > Math.abs(point1[1] - point[1])) lockY = true;\n        else lockX = true;\n      }\n      point = point1;\n      moving = true;\n      noevent();\n      move();\n    }\n\n    function move() {\n      var t;\n\n      dx = point[0] - point0[0];\n      dy = point[1] - point0[1];\n\n      switch (mode) {\n        case MODE_SPACE:\n        case MODE_DRAG: {\n          if (signX) dx = Math.max(W - w0, Math.min(E - e0, dx)), w1 = w0 + dx, e1 = e0 + dx;\n          if (signY) dy = Math.max(N - n0, Math.min(S - s0, dy)), n1 = n0 + dy, s1 = s0 + dy;\n          break;\n        }\n        case MODE_HANDLE: {\n          if (signX < 0) dx = Math.max(W - w0, Math.min(E - w0, dx)), w1 = w0 + dx, e1 = e0;\n          else if (signX > 0) dx = Math.max(W - e0, Math.min(E - e0, dx)), w1 = w0, e1 = e0 + dx;\n          if (signY < 0) dy = Math.max(N - n0, Math.min(S - n0, dy)), n1 = n0 + dy, s1 = s0;\n          else if (signY > 0) dy = Math.max(N - s0, Math.min(S - s0, dy)), n1 = n0, s1 = s0 + dy;\n          break;\n        }\n        case MODE_CENTER: {\n          if (signX) w1 = Math.max(W, Math.min(E, w0 - dx * signX)), e1 = Math.max(W, Math.min(E, e0 + dx * signX));\n          if (signY) n1 = Math.max(N, Math.min(S, n0 - dy * signY)), s1 = Math.max(N, Math.min(S, s0 + dy * signY));\n          break;\n        }\n      }\n\n      if (e1 < w1) {\n        signX *= -1;\n        t = w0, w0 = e0, e0 = t;\n        t = w1, w1 = e1, e1 = t;\n        if (type in flipX) overlay.attr(\"cursor\", cursors[type = flipX[type]]);\n      }\n\n      if (s1 < n1) {\n        signY *= -1;\n        t = n0, n0 = s0, s0 = t;\n        t = n1, n1 = s1, s1 = t;\n        if (type in flipY) overlay.attr(\"cursor\", cursors[type = flipY[type]]);\n      }\n\n      if (state.selection) selection = state.selection; // May be set by brush.move!\n      if (lockX) w1 = selection[0][0], e1 = selection[1][0];\n      if (lockY) n1 = selection[0][1], s1 = selection[1][1];\n\n      if (selection[0][0] !== w1\n          || selection[0][1] !== n1\n          || selection[1][0] !== e1\n          || selection[1][1] !== s1) {\n        state.selection = [[w1, n1], [e1, s1]];\n        redraw.call(that);\n        emit.brush();\n      }\n    }\n\n    function ended() {\n      nopropagation();\n      if (event.touches) {\n        if (event.touches.length) return;\n        if (touchending) clearTimeout(touchending);\n        touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n      } else {\n        dragEnable(event.view, moving);\n        view.on(\"keydown.brush keyup.brush mousemove.brush mouseup.brush\", null);\n      }\n      group.attr(\"pointer-events\", \"all\");\n      overlay.attr(\"cursor\", cursors.overlay);\n      if (state.selection) selection = state.selection; // May be set by brush.move (on start)!\n      if (empty(selection)) state.selection = null, redraw.call(that);\n      emit.end();\n    }\n\n    function keydowned() {\n      switch (event.keyCode) {\n        case 16: { // SHIFT\n          shifting = signX && signY;\n          break;\n        }\n        case 18: { // ALT\n          if (mode === MODE_HANDLE) {\n            if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;\n            if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;\n            mode = MODE_CENTER;\n            move();\n          }\n          break;\n        }\n        case 32: { // SPACE; takes priority over ALT\n          if (mode === MODE_HANDLE || mode === MODE_CENTER) {\n            if (signX < 0) e0 = e1 - dx; else if (signX > 0) w0 = w1 - dx;\n            if (signY < 0) s0 = s1 - dy; else if (signY > 0) n0 = n1 - dy;\n            mode = MODE_SPACE;\n            overlay.attr(\"cursor\", cursors.selection);\n            move();\n          }\n          break;\n        }\n        default: return;\n      }\n      noevent();\n    }\n\n    function keyupped() {\n      switch (event.keyCode) {\n        case 16: { // SHIFT\n          if (shifting) {\n            lockX = lockY = shifting = false;\n            move();\n          }\n          break;\n        }\n        case 18: { // ALT\n          if (mode === MODE_CENTER) {\n            if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;\n            if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;\n            mode = MODE_HANDLE;\n            move();\n          }\n          break;\n        }\n        case 32: { // SPACE\n          if (mode === MODE_SPACE) {\n            if (event.altKey) {\n              if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;\n              if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;\n              mode = MODE_CENTER;\n            } else {\n              if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;\n              if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;\n              mode = MODE_HANDLE;\n            }\n            overlay.attr(\"cursor\", cursors[type]);\n            move();\n          }\n          break;\n        }\n        default: return;\n      }\n      noevent();\n    }\n  }\n\n  function touchmoved() {\n    emitter(this, arguments).moved();\n  }\n\n  function touchended() {\n    emitter(this, arguments).ended();\n  }\n\n  function initialize() {\n    var state = this.__brush || {selection: null};\n    state.extent = number2(extent.apply(this, arguments));\n    state.dim = dim;\n    return state;\n  }\n\n  brush.extent = function(_) {\n    return arguments.length ? (extent = typeof _ === \"function\" ? _ : constant(number2(_)), brush) : extent;\n  };\n\n  brush.filter = function(_) {\n    return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), brush) : filter;\n  };\n\n  brush.touchable = function(_) {\n    return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), brush) : touchable;\n  };\n\n  brush.handleSize = function(_) {\n    return arguments.length ? (handleSize = +_, brush) : handleSize;\n  };\n\n  brush.keyModifiers = function(_) {\n    return arguments.length ? (keys = !!_, brush) : keys;\n  };\n\n  brush.on = function() {\n    var value = listeners.on.apply(listeners, arguments);\n    return value === listeners ? brush : value;\n  };\n\n  return brush;\n}\n","export var cos = Math.cos;\nexport var sin = Math.sin;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var tau = pi * 2;\nexport var max = Math.max;\n","export var slice = Array.prototype.slice;\n","import {range} from \"d3-array\";\nimport {max, tau} from \"./math\";\n\nfunction compareValue(compare) {\n  return function(a, b) {\n    return compare(\n      a.source.value + a.target.value,\n      b.source.value + b.target.value\n    );\n  };\n}\n\nexport default function() {\n  var padAngle = 0,\n      sortGroups = null,\n      sortSubgroups = null,\n      sortChords = null;\n\n  function chord(matrix) {\n    var n = matrix.length,\n        groupSums = [],\n        groupIndex = range(n),\n        subgroupIndex = [],\n        chords = [],\n        groups = chords.groups = new Array(n),\n        subgroups = new Array(n * n),\n        k,\n        x,\n        x0,\n        dx,\n        i,\n        j;\n\n    // Compute the sum.\n    k = 0, i = -1; while (++i < n) {\n      x = 0, j = -1; while (++j < n) {\n        x += matrix[i][j];\n      }\n      groupSums.push(x);\n      subgroupIndex.push(range(n));\n      k += x;\n    }\n\n    // Sort groups…\n    if (sortGroups) groupIndex.sort(function(a, b) {\n      return sortGroups(groupSums[a], groupSums[b]);\n    });\n\n    // Sort subgroups…\n    if (sortSubgroups) subgroupIndex.forEach(function(d, i) {\n      d.sort(function(a, b) {\n        return sortSubgroups(matrix[i][a], matrix[i][b]);\n      });\n    });\n\n    // Convert the sum to scaling factor for [0, 2pi].\n    // TODO Allow start and end angle to be specified?\n    // TODO Allow padding to be specified as percentage?\n    k = max(0, tau - padAngle * n) / k;\n    dx = k ? padAngle : tau / n;\n\n    // Compute the start and end angle for each group and subgroup.\n    // Note: Opera has a bug reordering object literal properties!\n    x = 0, i = -1; while (++i < n) {\n      x0 = x, j = -1; while (++j < n) {\n        var di = groupIndex[i],\n            dj = subgroupIndex[di][j],\n            v = matrix[di][dj],\n            a0 = x,\n            a1 = x += v * k;\n        subgroups[dj * n + di] = {\n          index: di,\n          subindex: dj,\n          startAngle: a0,\n          endAngle: a1,\n          value: v\n        };\n      }\n      groups[di] = {\n        index: di,\n        startAngle: x0,\n        endAngle: x,\n        value: groupSums[di]\n      };\n      x += dx;\n    }\n\n    // Generate chords for each (non-empty) subgroup-subgroup link.\n    i = -1; while (++i < n) {\n      j = i - 1; while (++j < n) {\n        var source = subgroups[j * n + i],\n            target = subgroups[i * n + j];\n        if (source.value || target.value) {\n          chords.push(source.value < target.value\n              ? {source: target, target: source}\n              : {source: source, target: target});\n        }\n      }\n    }\n\n    return sortChords ? chords.sort(sortChords) : chords;\n  }\n\n  chord.padAngle = function(_) {\n    return arguments.length ? (padAngle = max(0, _), chord) : padAngle;\n  };\n\n  chord.sortGroups = function(_) {\n    return arguments.length ? (sortGroups = _, chord) : sortGroups;\n  };\n\n  chord.sortSubgroups = function(_) {\n    return arguments.length ? (sortSubgroups = _, chord) : sortSubgroups;\n  };\n\n  chord.sortChords = function(_) {\n    return arguments.length ? (_ == null ? sortChords = null : (sortChords = compareValue(_))._ = _, chord) : sortChords && sortChords._;\n  };\n\n  return chord;\n}\n","var pi = Math.PI,\n    tau = 2 * pi,\n    epsilon = 1e-6,\n    tauEpsilon = tau - epsilon;\n\nfunction Path() {\n  this._x0 = this._y0 = // start of current subpath\n  this._x1 = this._y1 = null; // end of current subpath\n  this._ = \"\";\n}\n\nfunction path() {\n  return new Path;\n}\n\nPath.prototype = path.prototype = {\n  constructor: Path,\n  moveTo: function(x, y) {\n    this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y);\n  },\n  closePath: function() {\n    if (this._x1 !== null) {\n      this._x1 = this._x0, this._y1 = this._y0;\n      this._ += \"Z\";\n    }\n  },\n  lineTo: function(x, y) {\n    this._ += \"L\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n  },\n  quadraticCurveTo: function(x1, y1, x, y) {\n    this._ += \"Q\" + (+x1) + \",\" + (+y1) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n  },\n  bezierCurveTo: function(x1, y1, x2, y2, x, y) {\n    this._ += \"C\" + (+x1) + \",\" + (+y1) + \",\" + (+x2) + \",\" + (+y2) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n  },\n  arcTo: function(x1, y1, x2, y2, r) {\n    x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n    var x0 = this._x1,\n        y0 = this._y1,\n        x21 = x2 - x1,\n        y21 = y2 - y1,\n        x01 = x0 - x1,\n        y01 = y0 - y1,\n        l01_2 = x01 * x01 + y01 * y01;\n\n    // Is the radius negative? Error.\n    if (r < 0) throw new Error(\"negative radius: \" + r);\n\n    // Is this path empty? Move to (x1,y1).\n    if (this._x1 === null) {\n      this._ += \"M\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n    }\n\n    // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n    else if (!(l01_2 > epsilon));\n\n    // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n    // Equivalently, is (x1,y1) coincident with (x2,y2)?\n    // Or, is the radius zero? Line to (x1,y1).\n    else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n      this._ += \"L\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n    }\n\n    // Otherwise, draw an arc!\n    else {\n      var x20 = x2 - x0,\n          y20 = y2 - y0,\n          l21_2 = x21 * x21 + y21 * y21,\n          l20_2 = x20 * x20 + y20 * y20,\n          l21 = Math.sqrt(l21_2),\n          l01 = Math.sqrt(l01_2),\n          l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n          t01 = l / l01,\n          t21 = l / l21;\n\n      // If the start tangent is not coincident with (x0,y0), line to.\n      if (Math.abs(t01 - 1) > epsilon) {\n        this._ += \"L\" + (x1 + t01 * x01) + \",\" + (y1 + t01 * y01);\n      }\n\n      this._ += \"A\" + r + \",\" + r + \",0,0,\" + (+(y01 * x20 > x01 * y20)) + \",\" + (this._x1 = x1 + t21 * x21) + \",\" + (this._y1 = y1 + t21 * y21);\n    }\n  },\n  arc: function(x, y, r, a0, a1, ccw) {\n    x = +x, y = +y, r = +r, ccw = !!ccw;\n    var dx = r * Math.cos(a0),\n        dy = r * Math.sin(a0),\n        x0 = x + dx,\n        y0 = y + dy,\n        cw = 1 ^ ccw,\n        da = ccw ? a0 - a1 : a1 - a0;\n\n    // Is the radius negative? Error.\n    if (r < 0) throw new Error(\"negative radius: \" + r);\n\n    // Is this path empty? Move to (x0,y0).\n    if (this._x1 === null) {\n      this._ += \"M\" + x0 + \",\" + y0;\n    }\n\n    // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n    else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n      this._ += \"L\" + x0 + \",\" + y0;\n    }\n\n    // Is this arc empty? We’re done.\n    if (!r) return;\n\n    // Does the angle go the wrong way? Flip the direction.\n    if (da < 0) da = da % tau + tau;\n\n    // Is this a complete circle? Draw two arcs to complete the circle.\n    if (da > tauEpsilon) {\n      this._ += \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (x - dx) + \",\" + (y - dy) + \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (this._x1 = x0) + \",\" + (this._y1 = y0);\n    }\n\n    // Is this arc non-empty? Draw an arc!\n    else if (da > epsilon) {\n      this._ += \"A\" + r + \",\" + r + \",0,\" + (+(da >= pi)) + \",\" + cw + \",\" + (this._x1 = x + r * Math.cos(a1)) + \",\" + (this._y1 = y + r * Math.sin(a1));\n    }\n  },\n  rect: function(x, y, w, h) {\n    this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y) + \"h\" + (+w) + \"v\" + (+h) + \"h\" + (-w) + \"Z\";\n  },\n  toString: function() {\n    return this._;\n  }\n};\n\nexport default path;\n","var array = Array.prototype;\n\nexport var slice = array.slice;\n","import {max, range, tickStep} from \"d3-array\";\nimport {slice} from \"./array\";\nimport {blurX, blurY} from \"./blur\";\nimport constant from \"./constant\";\nimport contours from \"./contours\";\n\nfunction defaultX(d) {\n  return d[0];\n}\n\nfunction defaultY(d) {\n  return d[1];\n}\n\nfunction defaultWeight() {\n  return 1;\n}\n\nexport default function() {\n  var x = defaultX,\n      y = defaultY,\n      weight = defaultWeight,\n      dx = 960,\n      dy = 500,\n      r = 20, // blur radius\n      k = 2, // log2(grid cell size)\n      o = r * 3, // grid offset, to pad for blur\n      n = (dx + o * 2) >> k, // grid width\n      m = (dy + o * 2) >> k, // grid height\n      threshold = constant(20);\n\n  function density(data) {\n    var values0 = new Float32Array(n * m),\n        values1 = new Float32Array(n * m);\n\n    data.forEach(function(d, i, data) {\n      var xi = (+x(d, i, data) + o) >> k,\n          yi = (+y(d, i, data) + o) >> k,\n          wi = +weight(d, i, data);\n      if (xi >= 0 && xi < n && yi >= 0 && yi < m) {\n        values0[xi + yi * n] += wi;\n      }\n    });\n\n    // TODO Optimize.\n    blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k);\n    blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k);\n    blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k);\n    blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k);\n    blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k);\n    blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k);\n\n    var tz = threshold(values0);\n\n    // Convert number of thresholds into uniform thresholds.\n    if (!Array.isArray(tz)) {\n      var stop = max(values0);\n      tz = tickStep(0, stop, tz);\n      tz = range(0, Math.floor(stop / tz) * tz, tz);\n      tz.shift();\n    }\n\n    return contours()\n        .thresholds(tz)\n        .size([n, m])\n      (values0)\n        .map(transform);\n  }\n\n  function transform(geometry) {\n    geometry.value *= Math.pow(2, -2 * k); // Density in points per square pixel.\n    geometry.coordinates.forEach(transformPolygon);\n    return geometry;\n  }\n\n  function transformPolygon(coordinates) {\n    coordinates.forEach(transformRing);\n  }\n\n  function transformRing(coordinates) {\n    coordinates.forEach(transformPoint);\n  }\n\n  // TODO Optimize.\n  function transformPoint(coordinates) {\n    coordinates[0] = coordinates[0] * Math.pow(2, k) - o;\n    coordinates[1] = coordinates[1] * Math.pow(2, k) - o;\n  }\n\n  function resize() {\n    o = r * 3;\n    n = (dx + o * 2) >> k;\n    m = (dy + o * 2) >> k;\n    return density;\n  }\n\n  density.x = function(_) {\n    return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), density) : x;\n  };\n\n  density.y = function(_) {\n    return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), density) : y;\n  };\n\n  density.weight = function(_) {\n    return arguments.length ? (weight = typeof _ === \"function\" ? _ : constant(+_), density) : weight;\n  };\n\n  density.size = function(_) {\n    if (!arguments.length) return [dx, dy];\n    var _0 = Math.ceil(_[0]), _1 = Math.ceil(_[1]);\n    if (!(_0 >= 0) && !(_0 >= 0)) throw new Error(\"invalid size\");\n    return dx = _0, dy = _1, resize();\n  };\n\n  density.cellSize = function(_) {\n    if (!arguments.length) return 1 << k;\n    if (!((_ = +_) >= 1)) throw new Error(\"invalid cell size\");\n    return k = Math.floor(Math.log(_) / Math.LN2), resize();\n  };\n\n  density.thresholds = function(_) {\n    return arguments.length ? (threshold = typeof _ === \"function\" ? _ : Array.isArray(_) ? constant(slice.call(_)) : constant(_), density) : threshold;\n  };\n\n  density.bandwidth = function(_) {\n    if (!arguments.length) return Math.sqrt(r * (r + 1));\n    if (!((_ = +_) >= 0)) throw new Error(\"invalid bandwidth\");\n    return r = Math.round((Math.sqrt(4 * _ * _ + 1) - 1) / 2), resize();\n  };\n\n  return density;\n}\n","export default function(x) {\n  return function() {\n    return x;\n  };\n}\n","export default function DragEvent(target, type, subject, id, active, x, y, dx, dy, dispatch) {\n  this.target = target;\n  this.type = type;\n  this.subject = subject;\n  this.identifier = id;\n  this.active = active;\n  this.x = x;\n  this.y = y;\n  this.dx = dx;\n  this.dy = dy;\n  this._ = dispatch;\n}\n\nDragEvent.prototype.on = function() {\n  var value = this._.on.apply(this._, arguments);\n  return value === this._ ? this : value;\n};\n","import {dispatch} from \"d3-dispatch\";\nimport {event, customEvent, select, mouse, touch} from \"d3-selection\";\nimport nodrag, {yesdrag} from \"./nodrag.js\";\nimport noevent, {nopropagation} from \"./noevent.js\";\nimport constant from \"./constant.js\";\nimport DragEvent from \"./event.js\";\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter() {\n  return !event.ctrlKey && !event.button;\n}\n\nfunction defaultContainer() {\n  return this.parentNode;\n}\n\nfunction defaultSubject(d) {\n  return d == null ? {x: event.x, y: event.y} : d;\n}\n\nfunction defaultTouchable() {\n  return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\nexport default function() {\n  var filter = defaultFilter,\n      container = defaultContainer,\n      subject = defaultSubject,\n      touchable = defaultTouchable,\n      gestures = {},\n      listeners = dispatch(\"start\", \"drag\", \"end\"),\n      active = 0,\n      mousedownx,\n      mousedowny,\n      mousemoving,\n      touchending,\n      clickDistance2 = 0;\n\n  function drag(selection) {\n    selection\n        .on(\"mousedown.drag\", mousedowned)\n      .filter(touchable)\n        .on(\"touchstart.drag\", touchstarted)\n        .on(\"touchmove.drag\", touchmoved)\n        .on(\"touchend.drag touchcancel.drag\", touchended)\n        .style(\"touch-action\", \"none\")\n        .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n  }\n\n  function mousedowned() {\n    if (touchending || !filter.apply(this, arguments)) return;\n    var gesture = beforestart(\"mouse\", container.apply(this, arguments), mouse, this, arguments);\n    if (!gesture) return;\n    select(event.view).on(\"mousemove.drag\", mousemoved, true).on(\"mouseup.drag\", mouseupped, true);\n    nodrag(event.view);\n    nopropagation();\n    mousemoving = false;\n    mousedownx = event.clientX;\n    mousedowny = event.clientY;\n    gesture(\"start\");\n  }\n\n  function mousemoved() {\n    noevent();\n    if (!mousemoving) {\n      var dx = event.clientX - mousedownx, dy = event.clientY - mousedowny;\n      mousemoving = dx * dx + dy * dy > clickDistance2;\n    }\n    gestures.mouse(\"drag\");\n  }\n\n  function mouseupped() {\n    select(event.view).on(\"mousemove.drag mouseup.drag\", null);\n    yesdrag(event.view, mousemoving);\n    noevent();\n    gestures.mouse(\"end\");\n  }\n\n  function touchstarted() {\n    if (!filter.apply(this, arguments)) return;\n    var touches = event.changedTouches,\n        c = container.apply(this, arguments),\n        n = touches.length, i, gesture;\n\n    for (i = 0; i < n; ++i) {\n      if (gesture = beforestart(touches[i].identifier, c, touch, this, arguments)) {\n        nopropagation();\n        gesture(\"start\");\n      }\n    }\n  }\n\n  function touchmoved() {\n    var touches = event.changedTouches,\n        n = touches.length, i, gesture;\n\n    for (i = 0; i < n; ++i) {\n      if (gesture = gestures[touches[i].identifier]) {\n        noevent();\n        gesture(\"drag\");\n      }\n    }\n  }\n\n  function touchended() {\n    var touches = event.changedTouches,\n        n = touches.length, i, gesture;\n\n    if (touchending) clearTimeout(touchending);\n    touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n    for (i = 0; i < n; ++i) {\n      if (gesture = gestures[touches[i].identifier]) {\n        nopropagation();\n        gesture(\"end\");\n      }\n    }\n  }\n\n  function beforestart(id, container, point, that, args) {\n    var p = point(container, id), s, dx, dy,\n        sublisteners = listeners.copy();\n\n    if (!customEvent(new DragEvent(drag, \"beforestart\", s, id, active, p[0], p[1], 0, 0, sublisteners), function() {\n      if ((event.subject = s = subject.apply(that, args)) == null) return false;\n      dx = s.x - p[0] || 0;\n      dy = s.y - p[1] || 0;\n      return true;\n    })) return;\n\n    return function gesture(type) {\n      var p0 = p, n;\n      switch (type) {\n        case \"start\": gestures[id] = gesture, n = active++; break;\n        case \"end\": delete gestures[id], --active; // nobreak\n        case \"drag\": p = point(container, id), n = active; break;\n      }\n      customEvent(new DragEvent(drag, type, s, id, n, p[0] + dx, p[1] + dy, p[0] - p0[0], p[1] - p0[1], sublisteners), sublisteners.apply, sublisteners, [type, that, args]);\n    };\n  }\n\n  drag.filter = function(_) {\n    return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), drag) : filter;\n  };\n\n  drag.container = function(_) {\n    return arguments.length ? (container = typeof _ === \"function\" ? _ : constant(_), drag) : container;\n  };\n\n  drag.subject = function(_) {\n    return arguments.length ? (subject = typeof _ === \"function\" ? _ : constant(_), drag) : subject;\n  };\n\n  drag.touchable = function(_) {\n    return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), drag) : touchable;\n  };\n\n  drag.on = function() {\n    var value = listeners.on.apply(listeners, arguments);\n    return value === listeners ? drag : value;\n  };\n\n  drag.clickDistance = function(_) {\n    return arguments.length ? (clickDistance2 = (_ = +_) * _, drag) : Math.sqrt(clickDistance2);\n  };\n\n  return drag;\n}\n","export default function(d) {\n  var x = +this._x.call(null, d),\n      y = +this._y.call(null, d);\n  return add(this.cover(x, y), x, y, d);\n}\n\nfunction add(tree, x, y, d) {\n  if (isNaN(x) || isNaN(y)) return tree; // ignore invalid points\n\n  var parent,\n      node = tree._root,\n      leaf = {data: d},\n      x0 = tree._x0,\n      y0 = tree._y0,\n      x1 = tree._x1,\n      y1 = tree._y1,\n      xm,\n      ym,\n      xp,\n      yp,\n      right,\n      bottom,\n      i,\n      j;\n\n  // If the tree is empty, initialize the root as a leaf.\n  if (!node) return tree._root = leaf, tree;\n\n  // Find the existing leaf for the new point, or add it.\n  while (node.length) {\n    if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n    if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n    if (parent = node, !(node = node[i = bottom << 1 | right])) return parent[i] = leaf, tree;\n  }\n\n  // Is the new point is exactly coincident with the existing point?\n  xp = +tree._x.call(null, node.data);\n  yp = +tree._y.call(null, node.data);\n  if (x === xp && y === yp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree;\n\n  // Otherwise, split the leaf node until the old and new point are separated.\n  do {\n    parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4);\n    if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n    if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n  } while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | (xp >= xm)));\n  return parent[j] = node, parent[i] = leaf, tree;\n}\n\nexport function addAll(data) {\n  var d, i, n = data.length,\n      x,\n      y,\n      xz = new Array(n),\n      yz = new Array(n),\n      x0 = Infinity,\n      y0 = Infinity,\n      x1 = -Infinity,\n      y1 = -Infinity;\n\n  // Compute the points and their extent.\n  for (i = 0; i < n; ++i) {\n    if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) continue;\n    xz[i] = x;\n    yz[i] = y;\n    if (x < x0) x0 = x;\n    if (x > x1) x1 = x;\n    if (y < y0) y0 = y;\n    if (y > y1) y1 = y;\n  }\n\n  // If there were no (valid) points, abort.\n  if (x0 > x1 || y0 > y1) return this;\n\n  // Expand the tree to cover the new points.\n  this.cover(x0, y0).cover(x1, y1);\n\n  // Add the new points.\n  for (i = 0; i < n; ++i) {\n    add(this, xz[i], yz[i], data[i]);\n  }\n\n  return this;\n}\n","export default function(x, y) {\n  if (isNaN(x = +x) || isNaN(y = +y)) return this; // ignore invalid points\n\n  var x0 = this._x0,\n      y0 = this._y0,\n      x1 = this._x1,\n      y1 = this._y1;\n\n  // If the quadtree has no extent, initialize them.\n  // Integer extent are necessary so that if we later double the extent,\n  // the existing quadrant boundaries don’t change due to floating point error!\n  if (isNaN(x0)) {\n    x1 = (x0 = Math.floor(x)) + 1;\n    y1 = (y0 = Math.floor(y)) + 1;\n  }\n\n  // Otherwise, double repeatedly to cover.\n  else {\n    var z = x1 - x0,\n        node = this._root,\n        parent,\n        i;\n\n    while (x0 > x || x >= x1 || y0 > y || y >= y1) {\n      i = (y < y0) << 1 | (x < x0);\n      parent = new Array(4), parent[i] = node, node = parent, z *= 2;\n      switch (i) {\n        case 0: x1 = x0 + z, y1 = y0 + z; break;\n        case 1: x0 = x1 - z, y1 = y0 + z; break;\n        case 2: x1 = x0 + z, y0 = y1 - z; break;\n        case 3: x0 = x1 - z, y0 = y1 - z; break;\n      }\n    }\n\n    if (this._root && this._root.length) this._root = node;\n  }\n\n  this._x0 = x0;\n  this._y0 = y0;\n  this._x1 = x1;\n  this._y1 = y1;\n  return this;\n}\n","export default function(node, x0, y0, x1, y1) {\n  this.node = node;\n  this.x0 = x0;\n  this.y0 = y0;\n  this.x1 = x1;\n  this.y1 = y1;\n}\n","export function defaultX(d) {\n  return d[0];\n}\n\nexport default function(_) {\n  return arguments.length ? (this._x = _, this) : this._x;\n}\n","export function defaultY(d) {\n  return d[1];\n}\n\nexport default function(_) {\n  return arguments.length ? (this._y = _, this) : this._y;\n}\n","import tree_add, {addAll as tree_addAll} from \"./add.js\";\nimport tree_cover from \"./cover.js\";\nimport tree_data from \"./data.js\";\nimport tree_extent from \"./extent.js\";\nimport tree_find from \"./find.js\";\nimport tree_remove, {removeAll as tree_removeAll} from \"./remove.js\";\nimport tree_root from \"./root.js\";\nimport tree_size from \"./size.js\";\nimport tree_visit from \"./visit.js\";\nimport tree_visitAfter from \"./visitAfter.js\";\nimport tree_x, {defaultX} from \"./x.js\";\nimport tree_y, {defaultY} from \"./y.js\";\n\nexport default function quadtree(nodes, x, y) {\n  var tree = new Quadtree(x == null ? defaultX : x, y == null ? defaultY : y, NaN, NaN, NaN, NaN);\n  return nodes == null ? tree : tree.addAll(nodes);\n}\n\nfunction Quadtree(x, y, x0, y0, x1, y1) {\n  this._x = x;\n  this._y = y;\n  this._x0 = x0;\n  this._y0 = y0;\n  this._x1 = x1;\n  this._y1 = y1;\n  this._root = undefined;\n}\n\nfunction leaf_copy(leaf) {\n  var copy = {data: leaf.data}, next = copy;\n  while (leaf = leaf.next) next = next.next = {data: leaf.data};\n  return copy;\n}\n\nvar treeProto = quadtree.prototype = Quadtree.prototype;\n\ntreeProto.copy = function() {\n  var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1),\n      node = this._root,\n      nodes,\n      child;\n\n  if (!node) return copy;\n\n  if (!node.length) return copy._root = leaf_copy(node), copy;\n\n  nodes = [{source: node, target: copy._root = new Array(4)}];\n  while (node = nodes.pop()) {\n    for (var i = 0; i < 4; ++i) {\n      if (child = node.source[i]) {\n        if (child.length) nodes.push({source: child, target: node.target[i] = new Array(4)});\n        else node.target[i] = leaf_copy(child);\n      }\n    }\n  }\n\n  return copy;\n};\n\ntreeProto.add = tree_add;\ntreeProto.addAll = tree_addAll;\ntreeProto.cover = tree_cover;\ntreeProto.data = tree_data;\ntreeProto.extent = tree_extent;\ntreeProto.find = tree_find;\ntreeProto.remove = tree_remove;\ntreeProto.removeAll = tree_removeAll;\ntreeProto.root = tree_root;\ntreeProto.size = tree_size;\ntreeProto.visit = tree_visit;\ntreeProto.visitAfter = tree_visitAfter;\ntreeProto.x = tree_x;\ntreeProto.y = tree_y;\n","export default function() {\n  var data = [];\n  this.visit(function(node) {\n    if (!node.length) do data.push(node.data); while (node = node.next)\n  });\n  return data;\n}\n","export default function(_) {\n  return arguments.length\n      ? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1])\n      : isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]];\n}\n","import Quad from \"./quad.js\";\n\nexport default function(x, y, radius) {\n  var data,\n      x0 = this._x0,\n      y0 = this._y0,\n      x1,\n      y1,\n      x2,\n      y2,\n      x3 = this._x1,\n      y3 = this._y1,\n      quads = [],\n      node = this._root,\n      q,\n      i;\n\n  if (node) quads.push(new Quad(node, x0, y0, x3, y3));\n  if (radius == null) radius = Infinity;\n  else {\n    x0 = x - radius, y0 = y - radius;\n    x3 = x + radius, y3 = y + radius;\n    radius *= radius;\n  }\n\n  while (q = quads.pop()) {\n\n    // Stop searching if this quadrant can’t contain a closer node.\n    if (!(node = q.node)\n        || (x1 = q.x0) > x3\n        || (y1 = q.y0) > y3\n        || (x2 = q.x1) < x0\n        || (y2 = q.y1) < y0) continue;\n\n    // Bisect the current quadrant.\n    if (node.length) {\n      var xm = (x1 + x2) / 2,\n          ym = (y1 + y2) / 2;\n\n      quads.push(\n        new Quad(node[3], xm, ym, x2, y2),\n        new Quad(node[2], x1, ym, xm, y2),\n        new Quad(node[1], xm, y1, x2, ym),\n        new Quad(node[0], x1, y1, xm, ym)\n      );\n\n      // Visit the closest quadrant first.\n      if (i = (y >= ym) << 1 | (x >= xm)) {\n        q = quads[quads.length - 1];\n        quads[quads.length - 1] = quads[quads.length - 1 - i];\n        quads[quads.length - 1 - i] = q;\n      }\n    }\n\n    // Visit this point. (Visiting coincident points isn’t necessary!)\n    else {\n      var dx = x - +this._x.call(null, node.data),\n          dy = y - +this._y.call(null, node.data),\n          d2 = dx * dx + dy * dy;\n      if (d2 < radius) {\n        var d = Math.sqrt(radius = d2);\n        x0 = x - d, y0 = y - d;\n        x3 = x + d, y3 = y + d;\n        data = node.data;\n      }\n    }\n  }\n\n  return data;\n}\n","export default function(d) {\n  if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) return this; // ignore invalid points\n\n  var parent,\n      node = this._root,\n      retainer,\n      previous,\n      next,\n      x0 = this._x0,\n      y0 = this._y0,\n      x1 = this._x1,\n      y1 = this._y1,\n      x,\n      y,\n      xm,\n      ym,\n      right,\n      bottom,\n      i,\n      j;\n\n  // If the tree is empty, initialize the root as a leaf.\n  if (!node) return this;\n\n  // Find the leaf node for the point.\n  // While descending, also retain the deepest parent with a non-removed sibling.\n  if (node.length) while (true) {\n    if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n    if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n    if (!(parent = node, node = node[i = bottom << 1 | right])) return this;\n    if (!node.length) break;\n    if (parent[(i + 1) & 3] || parent[(i + 2) & 3] || parent[(i + 3) & 3]) retainer = parent, j = i;\n  }\n\n  // Find the point to remove.\n  while (node.data !== d) if (!(previous = node, node = node.next)) return this;\n  if (next = node.next) delete node.next;\n\n  // If there are multiple coincident points, remove just the point.\n  if (previous) return (next ? previous.next = next : delete previous.next), this;\n\n  // If this is the root point, remove it.\n  if (!parent) return this._root = next, this;\n\n  // Remove this leaf.\n  next ? parent[i] = next : delete parent[i];\n\n  // If the parent now contains exactly one leaf, collapse superfluous parents.\n  if ((node = parent[0] || parent[1] || parent[2] || parent[3])\n      && node === (parent[3] || parent[2] || parent[1] || parent[0])\n      && !node.length) {\n    if (retainer) retainer[j] = node;\n    else this._root = node;\n  }\n\n  return this;\n}\n\nexport function removeAll(data) {\n  for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]);\n  return this;\n}\n","export default function() {\n  return this._root;\n}\n","export default function() {\n  var size = 0;\n  this.visit(function(node) {\n    if (!node.length) do ++size; while (node = node.next)\n  });\n  return size;\n}\n","import Quad from \"./quad.js\";\n\nexport default function(callback) {\n  var quads = [], q, node = this._root, child, x0, y0, x1, y1;\n  if (node) quads.push(new Quad(node, this._x0, this._y0, this._x1, this._y1));\n  while (q = quads.pop()) {\n    if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) {\n      var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n      if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n      if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n      if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n      if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n    }\n  }\n  return this;\n}\n","import Quad from \"./quad.js\";\n\nexport default function(callback) {\n  var quads = [], next = [], q;\n  if (this._root) quads.push(new Quad(this._root, this._x0, this._y0, this._x1, this._y1));\n  while (q = quads.pop()) {\n    var node = q.node;\n    if (node.length) {\n      var child, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n      if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n      if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n      if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n      if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n    }\n    next.push(q);\n  }\n  while (q = next.pop()) {\n    callback(q.node, q.x0, q.y0, q.x1, q.y1);\n  }\n  return this;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {map} from \"d3-collection\";\nimport {timer} from \"d3-timer\";\n\nexport function x(d) {\n  return d.x;\n}\n\nexport function y(d) {\n  return d.y;\n}\n\nvar initialRadius = 10,\n    initialAngle = Math.PI * (3 - Math.sqrt(5));\n\nexport default function(nodes) {\n  var simulation,\n      alpha = 1,\n      alphaMin = 0.001,\n      alphaDecay = 1 - Math.pow(alphaMin, 1 / 300),\n      alphaTarget = 0,\n      velocityDecay = 0.6,\n      forces = map(),\n      stepper = timer(step),\n      event = dispatch(\"tick\", \"end\");\n\n  if (nodes == null) nodes = [];\n\n  function step() {\n    tick();\n    event.call(\"tick\", simulation);\n    if (alpha < alphaMin) {\n      stepper.stop();\n      event.call(\"end\", simulation);\n    }\n  }\n\n  function tick(iterations) {\n    var i, n = nodes.length, node;\n\n    if (iterations === undefined) iterations = 1;\n\n    for (var k = 0; k < iterations; ++k) {\n      alpha += (alphaTarget - alpha) * alphaDecay;\n\n      forces.each(function (force) {\n        force(alpha);\n      });\n\n      for (i = 0; i < n; ++i) {\n        node = nodes[i];\n        if (node.fx == null) node.x += node.vx *= velocityDecay;\n        else node.x = node.fx, node.vx = 0;\n        if (node.fy == null) node.y += node.vy *= velocityDecay;\n        else node.y = node.fy, node.vy = 0;\n      }\n    }\n\n    return simulation;\n  }\n\n  function initializeNodes() {\n    for (var i = 0, n = nodes.length, node; i < n; ++i) {\n      node = nodes[i], node.index = i;\n      if (node.fx != null) node.x = node.fx;\n      if (node.fy != null) node.y = node.fy;\n      if (isNaN(node.x) || isNaN(node.y)) {\n        var radius = initialRadius * Math.sqrt(i), angle = i * initialAngle;\n        node.x = radius * Math.cos(angle);\n        node.y = radius * Math.sin(angle);\n      }\n      if (isNaN(node.vx) || isNaN(node.vy)) {\n        node.vx = node.vy = 0;\n      }\n    }\n  }\n\n  function initializeForce(force) {\n    if (force.initialize) force.initialize(nodes);\n    return force;\n  }\n\n  initializeNodes();\n\n  return simulation = {\n    tick: tick,\n\n    restart: function() {\n      return stepper.restart(step), simulation;\n    },\n\n    stop: function() {\n      return stepper.stop(), simulation;\n    },\n\n    nodes: function(_) {\n      return arguments.length ? (nodes = _, initializeNodes(), forces.each(initializeForce), simulation) : nodes;\n    },\n\n    alpha: function(_) {\n      return arguments.length ? (alpha = +_, simulation) : alpha;\n    },\n\n    alphaMin: function(_) {\n      return arguments.length ? (alphaMin = +_, simulation) : alphaMin;\n    },\n\n    alphaDecay: function(_) {\n      return arguments.length ? (alphaDecay = +_, simulation) : +alphaDecay;\n    },\n\n    alphaTarget: function(_) {\n      return arguments.length ? (alphaTarget = +_, simulation) : alphaTarget;\n    },\n\n    velocityDecay: function(_) {\n      return arguments.length ? (velocityDecay = 1 - _, simulation) : 1 - velocityDecay;\n    },\n\n    force: function(name, _) {\n      return arguments.length > 1 ? ((_ == null ? forces.remove(name) : forces.set(name, initializeForce(_))), simulation) : forces.get(name);\n    },\n\n    find: function(x, y, radius) {\n      var i = 0,\n          n = nodes.length,\n          dx,\n          dy,\n          d2,\n          node,\n          closest;\n\n      if (radius == null) radius = Infinity;\n      else radius *= radius;\n\n      for (i = 0; i < n; ++i) {\n        node = nodes[i];\n        dx = x - node.x;\n        dy = y - node.y;\n        d2 = dx * dx + dy * dy;\n        if (d2 < radius) closest = node, radius = d2;\n      }\n\n      return closest;\n    },\n\n    on: function(name, _) {\n      return arguments.length > 1 ? (event.on(name, _), simulation) : event.on(name);\n    }\n  };\n}\n","export default function(x) {\n  return x;\n}\n","function streamGeometry(geometry, stream) {\n  if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) {\n    streamGeometryType[geometry.type](geometry, stream);\n  }\n}\n\nvar streamObjectType = {\n  Feature: function(object, stream) {\n    streamGeometry(object.geometry, stream);\n  },\n  FeatureCollection: function(object, stream) {\n    var features = object.features, i = -1, n = features.length;\n    while (++i < n) streamGeometry(features[i].geometry, stream);\n  }\n};\n\nvar streamGeometryType = {\n  Sphere: function(object, stream) {\n    stream.sphere();\n  },\n  Point: function(object, stream) {\n    object = object.coordinates;\n    stream.point(object[0], object[1], object[2]);\n  },\n  MultiPoint: function(object, stream) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]);\n  },\n  LineString: function(object, stream) {\n    streamLine(object.coordinates, stream, 0);\n  },\n  MultiLineString: function(object, stream) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) streamLine(coordinates[i], stream, 0);\n  },\n  Polygon: function(object, stream) {\n    streamPolygon(object.coordinates, stream);\n  },\n  MultiPolygon: function(object, stream) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) streamPolygon(coordinates[i], stream);\n  },\n  GeometryCollection: function(object, stream) {\n    var geometries = object.geometries, i = -1, n = geometries.length;\n    while (++i < n) streamGeometry(geometries[i], stream);\n  }\n};\n\nfunction streamLine(coordinates, stream, closed) {\n  var i = -1, n = coordinates.length - closed, coordinate;\n  stream.lineStart();\n  while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]);\n  stream.lineEnd();\n}\n\nfunction streamPolygon(coordinates, stream) {\n  var i = -1, n = coordinates.length;\n  stream.polygonStart();\n  while (++i < n) streamLine(coordinates[i], stream, 1);\n  stream.polygonEnd();\n}\n\nexport default function(object, stream) {\n  if (object && streamObjectType.hasOwnProperty(object.type)) {\n    streamObjectType[object.type](object, stream);\n  } else {\n    streamGeometry(object, stream);\n  }\n}\n","// Adds floating point numbers with twice the normal precision.\n// Reference: J. R. Shewchuk, Adaptive Precision Floating-Point Arithmetic and\n// Fast Robust Geometric Predicates, Discrete & Computational Geometry 18(3)\n// 305–363 (1997).\n// Code adapted from GeographicLib by Charles F. F. Karney,\n// http://geographiclib.sourceforge.net/\n\nexport default function() {\n  return new Adder;\n}\n\nfunction Adder() {\n  this.reset();\n}\n\nAdder.prototype = {\n  constructor: Adder,\n  reset: function() {\n    this.s = // rounded value\n    this.t = 0; // exact error\n  },\n  add: function(y) {\n    add(temp, y, this.t);\n    add(this, temp.s, this.s);\n    if (this.s) this.t += temp.t;\n    else this.s = temp.t;\n  },\n  valueOf: function() {\n    return this.s;\n  }\n};\n\nvar temp = new Adder;\n\nfunction add(adder, a, b) {\n  var x = adder.s = a + b,\n      bv = x - a,\n      av = x - bv;\n  adder.t = (a - av) + (b - bv);\n}\n","export var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var quarterPi = pi / 4;\nexport var tau = pi * 2;\n\nexport var degrees = 180 / pi;\nexport var radians = pi / 180;\n\nexport var abs = Math.abs;\nexport var atan = Math.atan;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var ceil = Math.ceil;\nexport var exp = Math.exp;\nexport var floor = Math.floor;\nexport var log = Math.log;\nexport var pow = Math.pow;\nexport var sin = Math.sin;\nexport var sign = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };\nexport var sqrt = Math.sqrt;\nexport var tan = Math.tan;\n\nexport function acos(x) {\n  return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n  return x > 1 ? halfPi : x < -1 ? -halfPi : Math.asin(x);\n}\n\nexport function haversin(x) {\n  return (x = sin(x / 2)) * x;\n}\n","export default function noop() {}\n","import adder from \"../adder.js\";\nimport {abs} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nvar areaSum = adder(),\n    areaRingSum = adder(),\n    x00,\n    y00,\n    x0,\n    y0;\n\nvar areaStream = {\n  point: noop,\n  lineStart: noop,\n  lineEnd: noop,\n  polygonStart: function() {\n    areaStream.lineStart = areaRingStart;\n    areaStream.lineEnd = areaRingEnd;\n  },\n  polygonEnd: function() {\n    areaStream.lineStart = areaStream.lineEnd = areaStream.point = noop;\n    areaSum.add(abs(areaRingSum));\n    areaRingSum.reset();\n  },\n  result: function() {\n    var area = areaSum / 2;\n    areaSum.reset();\n    return area;\n  }\n};\n\nfunction areaRingStart() {\n  areaStream.point = areaPointFirst;\n}\n\nfunction areaPointFirst(x, y) {\n  areaStream.point = areaPoint;\n  x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction areaPoint(x, y) {\n  areaRingSum.add(y0 * x - x0 * y);\n  x0 = x, y0 = y;\n}\n\nfunction areaRingEnd() {\n  areaPoint(x00, y00);\n}\n\nexport default areaStream;\n","import noop from \"../noop.js\";\n\nvar x0 = Infinity,\n    y0 = x0,\n    x1 = -x0,\n    y1 = x1;\n\nvar boundsStream = {\n  point: boundsPoint,\n  lineStart: noop,\n  lineEnd: noop,\n  polygonStart: noop,\n  polygonEnd: noop,\n  result: function() {\n    var bounds = [[x0, y0], [x1, y1]];\n    x1 = y1 = -(y0 = x0 = Infinity);\n    return bounds;\n  }\n};\n\nfunction boundsPoint(x, y) {\n  if (x < x0) x0 = x;\n  if (x > x1) x1 = x;\n  if (y < y0) y0 = y;\n  if (y > y1) y1 = y;\n}\n\nexport default boundsStream;\n","import {sqrt} from \"../math.js\";\n\n// TODO Enforce positive area for exterior, negative area for interior?\n\nvar X0 = 0,\n    Y0 = 0,\n    Z0 = 0,\n    X1 = 0,\n    Y1 = 0,\n    Z1 = 0,\n    X2 = 0,\n    Y2 = 0,\n    Z2 = 0,\n    x00,\n    y00,\n    x0,\n    y0;\n\nvar centroidStream = {\n  point: centroidPoint,\n  lineStart: centroidLineStart,\n  lineEnd: centroidLineEnd,\n  polygonStart: function() {\n    centroidStream.lineStart = centroidRingStart;\n    centroidStream.lineEnd = centroidRingEnd;\n  },\n  polygonEnd: function() {\n    centroidStream.point = centroidPoint;\n    centroidStream.lineStart = centroidLineStart;\n    centroidStream.lineEnd = centroidLineEnd;\n  },\n  result: function() {\n    var centroid = Z2 ? [X2 / Z2, Y2 / Z2]\n        : Z1 ? [X1 / Z1, Y1 / Z1]\n        : Z0 ? [X0 / Z0, Y0 / Z0]\n        : [NaN, NaN];\n    X0 = Y0 = Z0 =\n    X1 = Y1 = Z1 =\n    X2 = Y2 = Z2 = 0;\n    return centroid;\n  }\n};\n\nfunction centroidPoint(x, y) {\n  X0 += x;\n  Y0 += y;\n  ++Z0;\n}\n\nfunction centroidLineStart() {\n  centroidStream.point = centroidPointFirstLine;\n}\n\nfunction centroidPointFirstLine(x, y) {\n  centroidStream.point = centroidPointLine;\n  centroidPoint(x0 = x, y0 = y);\n}\n\nfunction centroidPointLine(x, y) {\n  var dx = x - x0, dy = y - y0, z = sqrt(dx * dx + dy * dy);\n  X1 += z * (x0 + x) / 2;\n  Y1 += z * (y0 + y) / 2;\n  Z1 += z;\n  centroidPoint(x0 = x, y0 = y);\n}\n\nfunction centroidLineEnd() {\n  centroidStream.point = centroidPoint;\n}\n\nfunction centroidRingStart() {\n  centroidStream.point = centroidPointFirstRing;\n}\n\nfunction centroidRingEnd() {\n  centroidPointRing(x00, y00);\n}\n\nfunction centroidPointFirstRing(x, y) {\n  centroidStream.point = centroidPointRing;\n  centroidPoint(x00 = x0 = x, y00 = y0 = y);\n}\n\nfunction centroidPointRing(x, y) {\n  var dx = x - x0,\n      dy = y - y0,\n      z = sqrt(dx * dx + dy * dy);\n\n  X1 += z * (x0 + x) / 2;\n  Y1 += z * (y0 + y) / 2;\n  Z1 += z;\n\n  z = y0 * x - x0 * y;\n  X2 += z * (x0 + x);\n  Y2 += z * (y0 + y);\n  Z2 += z * 3;\n  centroidPoint(x0 = x, y0 = y);\n}\n\nexport default centroidStream;\n","import {tau} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nexport default function PathContext(context) {\n  this._context = context;\n}\n\nPathContext.prototype = {\n  _radius: 4.5,\n  pointRadius: function(_) {\n    return this._radius = _, this;\n  },\n  polygonStart: function() {\n    this._line = 0;\n  },\n  polygonEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line === 0) this._context.closePath();\n    this._point = NaN;\n  },\n  point: function(x, y) {\n    switch (this._point) {\n      case 0: {\n        this._context.moveTo(x, y);\n        this._point = 1;\n        break;\n      }\n      case 1: {\n        this._context.lineTo(x, y);\n        break;\n      }\n      default: {\n        this._context.moveTo(x + this._radius, y);\n        this._context.arc(x, y, this._radius, 0, tau);\n        break;\n      }\n    }\n  },\n  result: noop\n};\n","import adder from \"../adder.js\";\nimport {sqrt} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nvar lengthSum = adder(),\n    lengthRing,\n    x00,\n    y00,\n    x0,\n    y0;\n\nvar lengthStream = {\n  point: noop,\n  lineStart: function() {\n    lengthStream.point = lengthPointFirst;\n  },\n  lineEnd: function() {\n    if (lengthRing) lengthPoint(x00, y00);\n    lengthStream.point = noop;\n  },\n  polygonStart: function() {\n    lengthRing = true;\n  },\n  polygonEnd: function() {\n    lengthRing = null;\n  },\n  result: function() {\n    var length = +lengthSum;\n    lengthSum.reset();\n    return length;\n  }\n};\n\nfunction lengthPointFirst(x, y) {\n  lengthStream.point = lengthPoint;\n  x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction lengthPoint(x, y) {\n  x0 -= x, y0 -= y;\n  lengthSum.add(sqrt(x0 * x0 + y0 * y0));\n  x0 = x, y0 = y;\n}\n\nexport default lengthStream;\n","export default function PathString() {\n  this._string = [];\n}\n\nPathString.prototype = {\n  _radius: 4.5,\n  _circle: circle(4.5),\n  pointRadius: function(_) {\n    if ((_ = +_) !== this._radius) this._radius = _, this._circle = null;\n    return this;\n  },\n  polygonStart: function() {\n    this._line = 0;\n  },\n  polygonEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line === 0) this._string.push(\"Z\");\n    this._point = NaN;\n  },\n  point: function(x, y) {\n    switch (this._point) {\n      case 0: {\n        this._string.push(\"M\", x, \",\", y);\n        this._point = 1;\n        break;\n      }\n      case 1: {\n        this._string.push(\"L\", x, \",\", y);\n        break;\n      }\n      default: {\n        if (this._circle == null) this._circle = circle(this._radius);\n        this._string.push(\"M\", x, \",\", y, this._circle);\n        break;\n      }\n    }\n  },\n  result: function() {\n    if (this._string.length) {\n      var result = this._string.join(\"\");\n      this._string = [];\n      return result;\n    } else {\n      return null;\n    }\n  }\n};\n\nfunction circle(radius) {\n  return \"m0,\" + radius\n      + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + -2 * radius\n      + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + 2 * radius\n      + \"z\";\n}\n","import identity from \"../identity.js\";\nimport stream from \"../stream.js\";\nimport pathArea from \"./area.js\";\nimport pathBounds from \"./bounds.js\";\nimport pathCentroid from \"./centroid.js\";\nimport PathContext from \"./context.js\";\nimport pathMeasure from \"./measure.js\";\nimport PathString from \"./string.js\";\n\nexport default function(projection, context) {\n  var pointRadius = 4.5,\n      projectionStream,\n      contextStream;\n\n  function path(object) {\n    if (object) {\n      if (typeof pointRadius === \"function\") contextStream.pointRadius(+pointRadius.apply(this, arguments));\n      stream(object, projectionStream(contextStream));\n    }\n    return contextStream.result();\n  }\n\n  path.area = function(object) {\n    stream(object, projectionStream(pathArea));\n    return pathArea.result();\n  };\n\n  path.measure = function(object) {\n    stream(object, projectionStream(pathMeasure));\n    return pathMeasure.result();\n  };\n\n  path.bounds = function(object) {\n    stream(object, projectionStream(pathBounds));\n    return pathBounds.result();\n  };\n\n  path.centroid = function(object) {\n    stream(object, projectionStream(pathCentroid));\n    return pathCentroid.result();\n  };\n\n  path.projection = function(_) {\n    return arguments.length ? (projectionStream = _ == null ? (projection = null, identity) : (projection = _).stream, path) : projection;\n  };\n\n  path.context = function(_) {\n    if (!arguments.length) return context;\n    contextStream = _ == null ? (context = null, new PathString) : new PathContext(context = _);\n    if (typeof pointRadius !== \"function\") contextStream.pointRadius(pointRadius);\n    return path;\n  };\n\n  path.pointRadius = function(_) {\n    if (!arguments.length) return pointRadius;\n    pointRadius = typeof _ === \"function\" ? _ : (contextStream.pointRadius(+_), +_);\n    return path;\n  };\n\n  return path.projection(projection).context(context);\n}\n","import noop from \"../noop.js\";\n\nexport default function() {\n  var lines = [],\n      line;\n  return {\n    point: function(x, y, m) {\n      line.push([x, y, m]);\n    },\n    lineStart: function() {\n      lines.push(line = []);\n    },\n    lineEnd: noop,\n    rejoin: function() {\n      if (lines.length > 1) lines.push(lines.pop().concat(lines.shift()));\n    },\n    result: function() {\n      var result = lines;\n      lines = [];\n      line = null;\n      return result;\n    }\n  };\n}\n","import {abs, epsilon} from \"./math.js\";\n\nexport default function(a, b) {\n  return abs(a[0] - b[0]) < epsilon && abs(a[1] - b[1]) < epsilon;\n}\n","import pointEqual from \"../pointEqual.js\";\nimport {epsilon} from \"../math.js\";\n\nfunction Intersection(point, points, other, entry) {\n  this.x = point;\n  this.z = points;\n  this.o = other; // another intersection\n  this.e = entry; // is an entry?\n  this.v = false; // visited\n  this.n = this.p = null; // next & previous\n}\n\n// A generalized polygon clipping algorithm: given a polygon that has been cut\n// into its visible line segments, and rejoins the segments by interpolating\n// along the clip edge.\nexport default function(segments, compareIntersection, startInside, interpolate, stream) {\n  var subject = [],\n      clip = [],\n      i,\n      n;\n\n  segments.forEach(function(segment) {\n    if ((n = segment.length - 1) <= 0) return;\n    var n, p0 = segment[0], p1 = segment[n], x;\n\n    if (pointEqual(p0, p1)) {\n      if (!p0[2] && !p1[2]) {\n        stream.lineStart();\n        for (i = 0; i < n; ++i) stream.point((p0 = segment[i])[0], p0[1]);\n        stream.lineEnd();\n        return;\n      }\n      // handle degenerate cases by moving the point\n      p1[0] += 2 * epsilon;\n    }\n\n    subject.push(x = new Intersection(p0, segment, null, true));\n    clip.push(x.o = new Intersection(p0, null, x, false));\n    subject.push(x = new Intersection(p1, segment, null, false));\n    clip.push(x.o = new Intersection(p1, null, x, true));\n  });\n\n  if (!subject.length) return;\n\n  clip.sort(compareIntersection);\n  link(subject);\n  link(clip);\n\n  for (i = 0, n = clip.length; i < n; ++i) {\n    clip[i].e = startInside = !startInside;\n  }\n\n  var start = subject[0],\n      points,\n      point;\n\n  while (1) {\n    // Find first unvisited intersection.\n    var current = start,\n        isSubject = true;\n    while (current.v) if ((current = current.n) === start) return;\n    points = current.z;\n    stream.lineStart();\n    do {\n      current.v = current.o.v = true;\n      if (current.e) {\n        if (isSubject) {\n          for (i = 0, n = points.length; i < n; ++i) stream.point((point = points[i])[0], point[1]);\n        } else {\n          interpolate(current.x, current.n.x, 1, stream);\n        }\n        current = current.n;\n      } else {\n        if (isSubject) {\n          points = current.p.z;\n          for (i = points.length - 1; i >= 0; --i) stream.point((point = points[i])[0], point[1]);\n        } else {\n          interpolate(current.x, current.p.x, -1, stream);\n        }\n        current = current.p;\n      }\n      current = current.o;\n      points = current.z;\n      isSubject = !isSubject;\n    } while (!current.v);\n    stream.lineEnd();\n  }\n}\n\nfunction link(array) {\n  if (!(n = array.length)) return;\n  var n,\n      i = 0,\n      a = array[0],\n      b;\n  while (++i < n) {\n    a.n = b = array[i];\n    b.p = a;\n    a = b;\n  }\n  a.n = b = array[0];\n  b.p = a;\n}\n","import {asin, atan2, cos, sin, sqrt} from \"./math.js\";\n\nexport function spherical(cartesian) {\n  return [atan2(cartesian[1], cartesian[0]), asin(cartesian[2])];\n}\n\nexport function cartesian(spherical) {\n  var lambda = spherical[0], phi = spherical[1], cosPhi = cos(phi);\n  return [cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi)];\n}\n\nexport function cartesianDot(a, b) {\n  return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\n\nexport function cartesianCross(a, b) {\n  return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n}\n\n// TODO return a\nexport function cartesianAddInPlace(a, b) {\n  a[0] += b[0], a[1] += b[1], a[2] += b[2];\n}\n\nexport function cartesianScale(vector, k) {\n  return [vector[0] * k, vector[1] * k, vector[2] * k];\n}\n\n// TODO return d\nexport function cartesianNormalizeInPlace(d) {\n  var l = sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);\n  d[0] /= l, d[1] /= l, d[2] /= l;\n}\n","import adder from \"./adder.js\";\nimport {cartesian, cartesianCross, cartesianNormalizeInPlace} from \"./cartesian.js\";\nimport {abs, asin, atan2, cos, epsilon, halfPi, pi, quarterPi, sign, sin, tau} from \"./math.js\";\n\nvar sum = adder();\n\nfunction longitude(point) {\n  if (abs(point[0]) <= pi)\n    return point[0];\n  else\n    return sign(point[0]) * ((abs(point[0]) + pi) % tau - pi);\n}\n\nexport default function(polygon, point) {\n  var lambda = longitude(point),\n      phi = point[1],\n      sinPhi = sin(phi),\n      normal = [sin(lambda), -cos(lambda), 0],\n      angle = 0,\n      winding = 0;\n\n  sum.reset();\n\n  if (sinPhi === 1) phi = halfPi + epsilon;\n  else if (sinPhi === -1) phi = -halfPi - epsilon;\n\n  for (var i = 0, n = polygon.length; i < n; ++i) {\n    if (!(m = (ring = polygon[i]).length)) continue;\n    var ring,\n        m,\n        point0 = ring[m - 1],\n        lambda0 = longitude(point0),\n        phi0 = point0[1] / 2 + quarterPi,\n        sinPhi0 = sin(phi0),\n        cosPhi0 = cos(phi0);\n\n    for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) {\n      var point1 = ring[j],\n          lambda1 = longitude(point1),\n          phi1 = point1[1] / 2 + quarterPi,\n          sinPhi1 = sin(phi1),\n          cosPhi1 = cos(phi1),\n          delta = lambda1 - lambda0,\n          sign = delta >= 0 ? 1 : -1,\n          absDelta = sign * delta,\n          antimeridian = absDelta > pi,\n          k = sinPhi0 * sinPhi1;\n\n      sum.add(atan2(k * sign * sin(absDelta), cosPhi0 * cosPhi1 + k * cos(absDelta)));\n      angle += antimeridian ? delta + sign * tau : delta;\n\n      // Are the longitudes either side of the point’s meridian (lambda),\n      // and are the latitudes smaller than the parallel (phi)?\n      if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) {\n        var arc = cartesianCross(cartesian(point0), cartesian(point1));\n        cartesianNormalizeInPlace(arc);\n        var intersection = cartesianCross(normal, arc);\n        cartesianNormalizeInPlace(intersection);\n        var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin(intersection[2]);\n        if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) {\n          winding += antimeridian ^ delta >= 0 ? 1 : -1;\n        }\n      }\n    }\n  }\n\n  // First, determine whether the South pole is inside or outside:\n  //\n  // It is inside if:\n  // * the polygon winds around it in a clockwise direction.\n  // * the polygon does not (cumulatively) wind around it, but has a negative\n  //   (counter-clockwise) area.\n  //\n  // Second, count the (signed) number of times a segment crosses a lambda\n  // from the point to the South pole.  If it is zero, then the point is the\n  // same side as the South pole.\n\n  return (angle < -epsilon || angle < epsilon && sum < -epsilon) ^ (winding & 1);\n}\n","import clipBuffer from \"./buffer.js\";\nimport clipRejoin from \"./rejoin.js\";\nimport {epsilon, halfPi} from \"../math.js\";\nimport polygonContains from \"../polygonContains.js\";\nimport {merge} from \"d3-array\";\n\nexport default function(pointVisible, clipLine, interpolate, start) {\n  return function(sink) {\n    var line = clipLine(sink),\n        ringBuffer = clipBuffer(),\n        ringSink = clipLine(ringBuffer),\n        polygonStarted = false,\n        polygon,\n        segments,\n        ring;\n\n    var clip = {\n      point: point,\n      lineStart: lineStart,\n      lineEnd: lineEnd,\n      polygonStart: function() {\n        clip.point = pointRing;\n        clip.lineStart = ringStart;\n        clip.lineEnd = ringEnd;\n        segments = [];\n        polygon = [];\n      },\n      polygonEnd: function() {\n        clip.point = point;\n        clip.lineStart = lineStart;\n        clip.lineEnd = lineEnd;\n        segments = merge(segments);\n        var startInside = polygonContains(polygon, start);\n        if (segments.length) {\n          if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n          clipRejoin(segments, compareIntersection, startInside, interpolate, sink);\n        } else if (startInside) {\n          if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n          sink.lineStart();\n          interpolate(null, null, 1, sink);\n          sink.lineEnd();\n        }\n        if (polygonStarted) sink.polygonEnd(), polygonStarted = false;\n        segments = polygon = null;\n      },\n      sphere: function() {\n        sink.polygonStart();\n        sink.lineStart();\n        interpolate(null, null, 1, sink);\n        sink.lineEnd();\n        sink.polygonEnd();\n      }\n    };\n\n    function point(lambda, phi) {\n      if (pointVisible(lambda, phi)) sink.point(lambda, phi);\n    }\n\n    function pointLine(lambda, phi) {\n      line.point(lambda, phi);\n    }\n\n    function lineStart() {\n      clip.point = pointLine;\n      line.lineStart();\n    }\n\n    function lineEnd() {\n      clip.point = point;\n      line.lineEnd();\n    }\n\n    function pointRing(lambda, phi) {\n      ring.push([lambda, phi]);\n      ringSink.point(lambda, phi);\n    }\n\n    function ringStart() {\n      ringSink.lineStart();\n      ring = [];\n    }\n\n    function ringEnd() {\n      pointRing(ring[0][0], ring[0][1]);\n      ringSink.lineEnd();\n\n      var clean = ringSink.clean(),\n          ringSegments = ringBuffer.result(),\n          i, n = ringSegments.length, m,\n          segment,\n          point;\n\n      ring.pop();\n      polygon.push(ring);\n      ring = null;\n\n      if (!n) return;\n\n      // No intersections.\n      if (clean & 1) {\n        segment = ringSegments[0];\n        if ((m = segment.length - 1) > 0) {\n          if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n          sink.lineStart();\n          for (i = 0; i < m; ++i) sink.point((point = segment[i])[0], point[1]);\n          sink.lineEnd();\n        }\n        return;\n      }\n\n      // Rejoin connected segments.\n      // TODO reuse ringBuffer.rejoin()?\n      if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));\n\n      segments.push(ringSegments.filter(validSegment));\n    }\n\n    return clip;\n  };\n}\n\nfunction validSegment(segment) {\n  return segment.length > 1;\n}\n\n// Intersections are sorted along the clip edge. For both antimeridian cutting\n// and circle clipping, the same comparison is used.\nfunction compareIntersection(a, b) {\n  return ((a = a.x)[0] < 0 ? a[1] - halfPi - epsilon : halfPi - a[1])\n       - ((b = b.x)[0] < 0 ? b[1] - halfPi - epsilon : halfPi - b[1]);\n}\n","import clip from \"./index.js\";\nimport {abs, atan, cos, epsilon, halfPi, pi, sin} from \"../math.js\";\n\nexport default clip(\n  function() { return true; },\n  clipAntimeridianLine,\n  clipAntimeridianInterpolate,\n  [-pi, -halfPi]\n);\n\n// Takes a line and cuts into visible segments. Return values: 0 - there were\n// intersections or the line was empty; 1 - no intersections; 2 - there were\n// intersections, and the first and last segments should be rejoined.\nfunction clipAntimeridianLine(stream) {\n  var lambda0 = NaN,\n      phi0 = NaN,\n      sign0 = NaN,\n      clean; // no intersections\n\n  return {\n    lineStart: function() {\n      stream.lineStart();\n      clean = 1;\n    },\n    point: function(lambda1, phi1) {\n      var sign1 = lambda1 > 0 ? pi : -pi,\n          delta = abs(lambda1 - lambda0);\n      if (abs(delta - pi) < epsilon) { // line crosses a pole\n        stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? halfPi : -halfPi);\n        stream.point(sign0, phi0);\n        stream.lineEnd();\n        stream.lineStart();\n        stream.point(sign1, phi0);\n        stream.point(lambda1, phi0);\n        clean = 0;\n      } else if (sign0 !== sign1 && delta >= pi) { // line crosses antimeridian\n        if (abs(lambda0 - sign0) < epsilon) lambda0 -= sign0 * epsilon; // handle degeneracies\n        if (abs(lambda1 - sign1) < epsilon) lambda1 -= sign1 * epsilon;\n        phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1);\n        stream.point(sign0, phi0);\n        stream.lineEnd();\n        stream.lineStart();\n        stream.point(sign1, phi0);\n        clean = 0;\n      }\n      stream.point(lambda0 = lambda1, phi0 = phi1);\n      sign0 = sign1;\n    },\n    lineEnd: function() {\n      stream.lineEnd();\n      lambda0 = phi0 = NaN;\n    },\n    clean: function() {\n      return 2 - clean; // if intersections, rejoin first and last segments\n    }\n  };\n}\n\nfunction clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) {\n  var cosPhi0,\n      cosPhi1,\n      sinLambda0Lambda1 = sin(lambda0 - lambda1);\n  return abs(sinLambda0Lambda1) > epsilon\n      ? atan((sin(phi0) * (cosPhi1 = cos(phi1)) * sin(lambda1)\n          - sin(phi1) * (cosPhi0 = cos(phi0)) * sin(lambda0))\n          / (cosPhi0 * cosPhi1 * sinLambda0Lambda1))\n      : (phi0 + phi1) / 2;\n}\n\nfunction clipAntimeridianInterpolate(from, to, direction, stream) {\n  var phi;\n  if (from == null) {\n    phi = direction * halfPi;\n    stream.point(-pi, phi);\n    stream.point(0, phi);\n    stream.point(pi, phi);\n    stream.point(pi, 0);\n    stream.point(pi, -phi);\n    stream.point(0, -phi);\n    stream.point(-pi, -phi);\n    stream.point(-pi, 0);\n    stream.point(-pi, phi);\n  } else if (abs(from[0] - to[0]) > epsilon) {\n    var lambda = from[0] < to[0] ? pi : -pi;\n    phi = direction * lambda / 2;\n    stream.point(-lambda, phi);\n    stream.point(0, phi);\n    stream.point(lambda, phi);\n  } else {\n    stream.point(to[0], to[1]);\n  }\n}\n","export default function(x) {\n  return function() {\n    return x;\n  };\n}\n","export default function(a, b) {\n\n  function compose(x, y) {\n    return x = a(x, y), b(x[0], x[1]);\n  }\n\n  if (a.invert && b.invert) compose.invert = function(x, y) {\n    return x = b.invert(x, y), x && a.invert(x[0], x[1]);\n  };\n\n  return compose;\n}\n","import compose from \"./compose.js\";\nimport {abs, asin, atan2, cos, degrees, pi, radians, sin, tau} from \"./math.js\";\n\nfunction rotationIdentity(lambda, phi) {\n  return [abs(lambda) > pi ? lambda + Math.round(-lambda / tau) * tau : lambda, phi];\n}\n\nrotationIdentity.invert = rotationIdentity;\n\nexport function rotateRadians(deltaLambda, deltaPhi, deltaGamma) {\n  return (deltaLambda %= tau) ? (deltaPhi || deltaGamma ? compose(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma))\n    : rotationLambda(deltaLambda))\n    : (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma)\n    : rotationIdentity);\n}\n\nfunction forwardRotationLambda(deltaLambda) {\n  return function(lambda, phi) {\n    return lambda += deltaLambda, [lambda > pi ? lambda - tau : lambda < -pi ? lambda + tau : lambda, phi];\n  };\n}\n\nfunction rotationLambda(deltaLambda) {\n  var rotation = forwardRotationLambda(deltaLambda);\n  rotation.invert = forwardRotationLambda(-deltaLambda);\n  return rotation;\n}\n\nfunction rotationPhiGamma(deltaPhi, deltaGamma) {\n  var cosDeltaPhi = cos(deltaPhi),\n      sinDeltaPhi = sin(deltaPhi),\n      cosDeltaGamma = cos(deltaGamma),\n      sinDeltaGamma = sin(deltaGamma);\n\n  function rotation(lambda, phi) {\n    var cosPhi = cos(phi),\n        x = cos(lambda) * cosPhi,\n        y = sin(lambda) * cosPhi,\n        z = sin(phi),\n        k = z * cosDeltaPhi + x * sinDeltaPhi;\n    return [\n      atan2(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi),\n      asin(k * cosDeltaGamma + y * sinDeltaGamma)\n    ];\n  }\n\n  rotation.invert = function(lambda, phi) {\n    var cosPhi = cos(phi),\n        x = cos(lambda) * cosPhi,\n        y = sin(lambda) * cosPhi,\n        z = sin(phi),\n        k = z * cosDeltaGamma - y * sinDeltaGamma;\n    return [\n      atan2(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi),\n      asin(k * cosDeltaPhi - x * sinDeltaPhi)\n    ];\n  };\n\n  return rotation;\n}\n\nexport default function(rotate) {\n  rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0);\n\n  function forward(coordinates) {\n    coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians);\n    return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n  }\n\n  forward.invert = function(coordinates) {\n    coordinates = rotate.invert(coordinates[0] * radians, coordinates[1] * radians);\n    return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n  };\n\n  return forward;\n}\n","import {cartesian, cartesianNormalizeInPlace, spherical} from \"./cartesian.js\";\nimport constant from \"./constant.js\";\nimport {acos, cos, degrees, epsilon, radians, sin, tau} from \"./math.js\";\nimport {rotateRadians} from \"./rotation.js\";\n\n// Generates a circle centered at [0°, 0°], with a given radius and precision.\nexport function circleStream(stream, radius, delta, direction, t0, t1) {\n  if (!delta) return;\n  var cosRadius = cos(radius),\n      sinRadius = sin(radius),\n      step = direction * delta;\n  if (t0 == null) {\n    t0 = radius + direction * tau;\n    t1 = radius - step / 2;\n  } else {\n    t0 = circleRadius(cosRadius, t0);\n    t1 = circleRadius(cosRadius, t1);\n    if (direction > 0 ? t0 < t1 : t0 > t1) t0 += direction * tau;\n  }\n  for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) {\n    point = spherical([cosRadius, -sinRadius * cos(t), -sinRadius * sin(t)]);\n    stream.point(point[0], point[1]);\n  }\n}\n\n// Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0].\nfunction circleRadius(cosRadius, point) {\n  point = cartesian(point), point[0] -= cosRadius;\n  cartesianNormalizeInPlace(point);\n  var radius = acos(-point[1]);\n  return ((-point[2] < 0 ? -radius : radius) + tau - epsilon) % tau;\n}\n\nexport default function() {\n  var center = constant([0, 0]),\n      radius = constant(90),\n      precision = constant(6),\n      ring,\n      rotate,\n      stream = {point: point};\n\n  function point(x, y) {\n    ring.push(x = rotate(x, y));\n    x[0] *= degrees, x[1] *= degrees;\n  }\n\n  function circle() {\n    var c = center.apply(this, arguments),\n        r = radius.apply(this, arguments) * radians,\n        p = precision.apply(this, arguments) * radians;\n    ring = [];\n    rotate = rotateRadians(-c[0] * radians, -c[1] * radians, 0).invert;\n    circleStream(stream, r, p, 1);\n    c = {type: \"Polygon\", coordinates: [ring]};\n    ring = rotate = null;\n    return c;\n  }\n\n  circle.center = function(_) {\n    return arguments.length ? (center = typeof _ === \"function\" ? _ : constant([+_[0], +_[1]]), circle) : center;\n  };\n\n  circle.radius = function(_) {\n    return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), circle) : radius;\n  };\n\n  circle.precision = function(_) {\n    return arguments.length ? (precision = typeof _ === \"function\" ? _ : constant(+_), circle) : precision;\n  };\n\n  return circle;\n}\n","import {cartesian, cartesianAddInPlace, cartesianCross, cartesianDot, cartesianScale, spherical} from \"../cartesian.js\";\nimport {circleStream} from \"../circle.js\";\nimport {abs, cos, epsilon, pi, radians, sqrt} from \"../math.js\";\nimport pointEqual from \"../pointEqual.js\";\nimport clip from \"./index.js\";\n\nexport default function(radius) {\n  var cr = cos(radius),\n      delta = 6 * radians,\n      smallRadius = cr > 0,\n      notHemisphere = abs(cr) > epsilon; // TODO optimise for this common case\n\n  function interpolate(from, to, direction, stream) {\n    circleStream(stream, radius, delta, direction, from, to);\n  }\n\n  function visible(lambda, phi) {\n    return cos(lambda) * cos(phi) > cr;\n  }\n\n  // Takes a line and cuts into visible segments. Return values used for polygon\n  // clipping: 0 - there were intersections or the line was empty; 1 - no\n  // intersections 2 - there were intersections, and the first and last segments\n  // should be rejoined.\n  function clipLine(stream) {\n    var point0, // previous point\n        c0, // code for previous point\n        v0, // visibility of previous point\n        v00, // visibility of first point\n        clean; // no intersections\n    return {\n      lineStart: function() {\n        v00 = v0 = false;\n        clean = 1;\n      },\n      point: function(lambda, phi) {\n        var point1 = [lambda, phi],\n            point2,\n            v = visible(lambda, phi),\n            c = smallRadius\n              ? v ? 0 : code(lambda, phi)\n              : v ? code(lambda + (lambda < 0 ? pi : -pi), phi) : 0;\n        if (!point0 && (v00 = v0 = v)) stream.lineStart();\n        if (v !== v0) {\n          point2 = intersect(point0, point1);\n          if (!point2 || pointEqual(point0, point2) || pointEqual(point1, point2))\n            point1[2] = 1;\n        }\n        if (v !== v0) {\n          clean = 0;\n          if (v) {\n            // outside going in\n            stream.lineStart();\n            point2 = intersect(point1, point0);\n            stream.point(point2[0], point2[1]);\n          } else {\n            // inside going out\n            point2 = intersect(point0, point1);\n            stream.point(point2[0], point2[1], 2);\n            stream.lineEnd();\n          }\n          point0 = point2;\n        } else if (notHemisphere && point0 && smallRadius ^ v) {\n          var t;\n          // If the codes for two points are different, or are both zero,\n          // and there this segment intersects with the small circle.\n          if (!(c & c0) && (t = intersect(point1, point0, true))) {\n            clean = 0;\n            if (smallRadius) {\n              stream.lineStart();\n              stream.point(t[0][0], t[0][1]);\n              stream.point(t[1][0], t[1][1]);\n              stream.lineEnd();\n            } else {\n              stream.point(t[1][0], t[1][1]);\n              stream.lineEnd();\n              stream.lineStart();\n              stream.point(t[0][0], t[0][1], 3);\n            }\n          }\n        }\n        if (v && (!point0 || !pointEqual(point0, point1))) {\n          stream.point(point1[0], point1[1]);\n        }\n        point0 = point1, v0 = v, c0 = c;\n      },\n      lineEnd: function() {\n        if (v0) stream.lineEnd();\n        point0 = null;\n      },\n      // Rejoin first and last segments if there were intersections and the first\n      // and last points were visible.\n      clean: function() {\n        return clean | ((v00 && v0) << 1);\n      }\n    };\n  }\n\n  // Intersects the great circle between a and b with the clip circle.\n  function intersect(a, b, two) {\n    var pa = cartesian(a),\n        pb = cartesian(b);\n\n    // We have two planes, n1.p = d1 and n2.p = d2.\n    // Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 ⨯ n2).\n    var n1 = [1, 0, 0], // normal\n        n2 = cartesianCross(pa, pb),\n        n2n2 = cartesianDot(n2, n2),\n        n1n2 = n2[0], // cartesianDot(n1, n2),\n        determinant = n2n2 - n1n2 * n1n2;\n\n    // Two polar points.\n    if (!determinant) return !two && a;\n\n    var c1 =  cr * n2n2 / determinant,\n        c2 = -cr * n1n2 / determinant,\n        n1xn2 = cartesianCross(n1, n2),\n        A = cartesianScale(n1, c1),\n        B = cartesianScale(n2, c2);\n    cartesianAddInPlace(A, B);\n\n    // Solve |p(t)|^2 = 1.\n    var u = n1xn2,\n        w = cartesianDot(A, u),\n        uu = cartesianDot(u, u),\n        t2 = w * w - uu * (cartesianDot(A, A) - 1);\n\n    if (t2 < 0) return;\n\n    var t = sqrt(t2),\n        q = cartesianScale(u, (-w - t) / uu);\n    cartesianAddInPlace(q, A);\n    q = spherical(q);\n\n    if (!two) return q;\n\n    // Two intersection points.\n    var lambda0 = a[0],\n        lambda1 = b[0],\n        phi0 = a[1],\n        phi1 = b[1],\n        z;\n\n    if (lambda1 < lambda0) z = lambda0, lambda0 = lambda1, lambda1 = z;\n\n    var delta = lambda1 - lambda0,\n        polar = abs(delta - pi) < epsilon,\n        meridian = polar || delta < epsilon;\n\n    if (!polar && phi1 < phi0) z = phi0, phi0 = phi1, phi1 = z;\n\n    // Check that the first point is between a and b.\n    if (meridian\n        ? polar\n          ? phi0 + phi1 > 0 ^ q[1] < (abs(q[0] - lambda0) < epsilon ? phi0 : phi1)\n          : phi0 <= q[1] && q[1] <= phi1\n        : delta > pi ^ (lambda0 <= q[0] && q[0] <= lambda1)) {\n      var q1 = cartesianScale(u, (-w + t) / uu);\n      cartesianAddInPlace(q1, A);\n      return [q, spherical(q1)];\n    }\n  }\n\n  // Generates a 4-bit vector representing the location of a point relative to\n  // the small circle's bounding box.\n  function code(lambda, phi) {\n    var r = smallRadius ? radius : pi - radius,\n        code = 0;\n    if (lambda < -r) code |= 1; // left\n    else if (lambda > r) code |= 2; // right\n    if (phi < -r) code |= 4; // below\n    else if (phi > r) code |= 8; // above\n    return code;\n  }\n\n  return clip(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-pi, radius - pi]);\n}\n","import {abs, epsilon} from \"../math.js\";\nimport clipBuffer from \"./buffer.js\";\nimport clipLine from \"./line.js\";\nimport clipRejoin from \"./rejoin.js\";\nimport {merge} from \"d3-array\";\n\nvar clipMax = 1e9, clipMin = -clipMax;\n\n// TODO Use d3-polygon’s polygonContains here for the ring check?\n// TODO Eliminate duplicate buffering in clipBuffer and polygon.push?\n\nexport default function clipRectangle(x0, y0, x1, y1) {\n\n  function visible(x, y) {\n    return x0 <= x && x <= x1 && y0 <= y && y <= y1;\n  }\n\n  function interpolate(from, to, direction, stream) {\n    var a = 0, a1 = 0;\n    if (from == null\n        || (a = corner(from, direction)) !== (a1 = corner(to, direction))\n        || comparePoint(from, to) < 0 ^ direction > 0) {\n      do stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0);\n      while ((a = (a + direction + 4) % 4) !== a1);\n    } else {\n      stream.point(to[0], to[1]);\n    }\n  }\n\n  function corner(p, direction) {\n    return abs(p[0] - x0) < epsilon ? direction > 0 ? 0 : 3\n        : abs(p[0] - x1) < epsilon ? direction > 0 ? 2 : 1\n        : abs(p[1] - y0) < epsilon ? direction > 0 ? 1 : 0\n        : direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon\n  }\n\n  function compareIntersection(a, b) {\n    return comparePoint(a.x, b.x);\n  }\n\n  function comparePoint(a, b) {\n    var ca = corner(a, 1),\n        cb = corner(b, 1);\n    return ca !== cb ? ca - cb\n        : ca === 0 ? b[1] - a[1]\n        : ca === 1 ? a[0] - b[0]\n        : ca === 2 ? a[1] - b[1]\n        : b[0] - a[0];\n  }\n\n  return function(stream) {\n    var activeStream = stream,\n        bufferStream = clipBuffer(),\n        segments,\n        polygon,\n        ring,\n        x__, y__, v__, // first point\n        x_, y_, v_, // previous point\n        first,\n        clean;\n\n    var clipStream = {\n      point: point,\n      lineStart: lineStart,\n      lineEnd: lineEnd,\n      polygonStart: polygonStart,\n      polygonEnd: polygonEnd\n    };\n\n    function point(x, y) {\n      if (visible(x, y)) activeStream.point(x, y);\n    }\n\n    function polygonInside() {\n      var winding = 0;\n\n      for (var i = 0, n = polygon.length; i < n; ++i) {\n        for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) {\n          a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1];\n          if (a1 <= y1) { if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) ++winding; }\n          else { if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) --winding; }\n        }\n      }\n\n      return winding;\n    }\n\n    // Buffer geometry within a polygon and then clip it en masse.\n    function polygonStart() {\n      activeStream = bufferStream, segments = [], polygon = [], clean = true;\n    }\n\n    function polygonEnd() {\n      var startInside = polygonInside(),\n          cleanInside = clean && startInside,\n          visible = (segments = merge(segments)).length;\n      if (cleanInside || visible) {\n        stream.polygonStart();\n        if (cleanInside) {\n          stream.lineStart();\n          interpolate(null, null, 1, stream);\n          stream.lineEnd();\n        }\n        if (visible) {\n          clipRejoin(segments, compareIntersection, startInside, interpolate, stream);\n        }\n        stream.polygonEnd();\n      }\n      activeStream = stream, segments = polygon = ring = null;\n    }\n\n    function lineStart() {\n      clipStream.point = linePoint;\n      if (polygon) polygon.push(ring = []);\n      first = true;\n      v_ = false;\n      x_ = y_ = NaN;\n    }\n\n    // TODO rather than special-case polygons, simply handle them separately.\n    // Ideally, coincident intersection points should be jittered to avoid\n    // clipping issues.\n    function lineEnd() {\n      if (segments) {\n        linePoint(x__, y__);\n        if (v__ && v_) bufferStream.rejoin();\n        segments.push(bufferStream.result());\n      }\n      clipStream.point = point;\n      if (v_) activeStream.lineEnd();\n    }\n\n    function linePoint(x, y) {\n      var v = visible(x, y);\n      if (polygon) ring.push([x, y]);\n      if (first) {\n        x__ = x, y__ = y, v__ = v;\n        first = false;\n        if (v) {\n          activeStream.lineStart();\n          activeStream.point(x, y);\n        }\n      } else {\n        if (v && v_) activeStream.point(x, y);\n        else {\n          var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))],\n              b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))];\n          if (clipLine(a, b, x0, y0, x1, y1)) {\n            if (!v_) {\n              activeStream.lineStart();\n              activeStream.point(a[0], a[1]);\n            }\n            activeStream.point(b[0], b[1]);\n            if (!v) activeStream.lineEnd();\n            clean = false;\n          } else if (v) {\n            activeStream.lineStart();\n            activeStream.point(x, y);\n            clean = false;\n          }\n        }\n      }\n      x_ = x, y_ = y, v_ = v;\n    }\n\n    return clipStream;\n  };\n}\n","export default function(a, b, x0, y0, x1, y1) {\n  var ax = a[0],\n      ay = a[1],\n      bx = b[0],\n      by = b[1],\n      t0 = 0,\n      t1 = 1,\n      dx = bx - ax,\n      dy = by - ay,\n      r;\n\n  r = x0 - ax;\n  if (!dx && r > 0) return;\n  r /= dx;\n  if (dx < 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  } else if (dx > 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  }\n\n  r = x1 - ax;\n  if (!dx && r < 0) return;\n  r /= dx;\n  if (dx < 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  } else if (dx > 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  }\n\n  r = y0 - ay;\n  if (!dy && r > 0) return;\n  r /= dy;\n  if (dy < 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  } else if (dy > 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  }\n\n  r = y1 - ay;\n  if (!dy && r < 0) return;\n  r /= dy;\n  if (dy < 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  } else if (dy > 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  }\n\n  if (t0 > 0) a[0] = ax + t0 * dx, a[1] = ay + t0 * dy;\n  if (t1 < 1) b[0] = ax + t1 * dx, b[1] = ay + t1 * dy;\n  return true;\n}\n","export default function(methods) {\n  return {\n    stream: transformer(methods)\n  };\n}\n\nexport function transformer(methods) {\n  return function(stream) {\n    var s = new TransformStream;\n    for (var key in methods) s[key] = methods[key];\n    s.stream = stream;\n    return s;\n  };\n}\n\nfunction TransformStream() {}\n\nTransformStream.prototype = {\n  constructor: TransformStream,\n  point: function(x, y) { this.stream.point(x, y); },\n  sphere: function() { this.stream.sphere(); },\n  lineStart: function() { this.stream.lineStart(); },\n  lineEnd: function() { this.stream.lineEnd(); },\n  polygonStart: function() { this.stream.polygonStart(); },\n  polygonEnd: function() { this.stream.polygonEnd(); }\n};\n","import {default as geoStream} from \"../stream.js\";\nimport boundsStream from \"../path/bounds.js\";\n\nfunction fit(projection, fitBounds, object) {\n  var clip = projection.clipExtent && projection.clipExtent();\n  projection.scale(150).translate([0, 0]);\n  if (clip != null) projection.clipExtent(null);\n  geoStream(object, projection.stream(boundsStream));\n  fitBounds(boundsStream.result());\n  if (clip != null) projection.clipExtent(clip);\n  return projection;\n}\n\nexport function fitExtent(projection, extent, object) {\n  return fit(projection, function(b) {\n    var w = extent[1][0] - extent[0][0],\n        h = extent[1][1] - extent[0][1],\n        k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])),\n        x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2,\n        y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2;\n    projection.scale(150 * k).translate([x, y]);\n  }, object);\n}\n\nexport function fitSize(projection, size, object) {\n  return fitExtent(projection, [[0, 0], size], object);\n}\n\nexport function fitWidth(projection, width, object) {\n  return fit(projection, function(b) {\n    var w = +width,\n        k = w / (b[1][0] - b[0][0]),\n        x = (w - k * (b[1][0] + b[0][0])) / 2,\n        y = -k * b[0][1];\n    projection.scale(150 * k).translate([x, y]);\n  }, object);\n}\n\nexport function fitHeight(projection, height, object) {\n  return fit(projection, function(b) {\n    var h = +height,\n        k = h / (b[1][1] - b[0][1]),\n        x = -k * b[0][0],\n        y = (h - k * (b[1][1] + b[0][1])) / 2;\n    projection.scale(150 * k).translate([x, y]);\n  }, object);\n}\n","import {cartesian} from \"../cartesian.js\";\nimport {abs, asin, atan2, cos, epsilon, radians, sqrt} from \"../math.js\";\nimport {transformer} from \"../transform.js\";\n\nvar maxDepth = 16, // maximum depth of subdivision\n    cosMinDistance = cos(30 * radians); // cos(minimum angular distance)\n\nexport default function(project, delta2) {\n  return +delta2 ? resample(project, delta2) : resampleNone(project);\n}\n\nfunction resampleNone(project) {\n  return transformer({\n    point: function(x, y) {\n      x = project(x, y);\n      this.stream.point(x[0], x[1]);\n    }\n  });\n}\n\nfunction resample(project, delta2) {\n\n  function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) {\n    var dx = x1 - x0,\n        dy = y1 - y0,\n        d2 = dx * dx + dy * dy;\n    if (d2 > 4 * delta2 && depth--) {\n      var a = a0 + a1,\n          b = b0 + b1,\n          c = c0 + c1,\n          m = sqrt(a * a + b * b + c * c),\n          phi2 = asin(c /= m),\n          lambda2 = abs(abs(c) - 1) < epsilon || abs(lambda0 - lambda1) < epsilon ? (lambda0 + lambda1) / 2 : atan2(b, a),\n          p = project(lambda2, phi2),\n          x2 = p[0],\n          y2 = p[1],\n          dx2 = x2 - x0,\n          dy2 = y2 - y0,\n          dz = dy * dx2 - dx * dy2;\n      if (dz * dz / d2 > delta2 // perpendicular projected distance\n          || abs((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end\n          || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance\n        resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream);\n        stream.point(x2, y2);\n        resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream);\n      }\n    }\n  }\n  return function(stream) {\n    var lambda00, x00, y00, a00, b00, c00, // first point\n        lambda0, x0, y0, a0, b0, c0; // previous point\n\n    var resampleStream = {\n      point: point,\n      lineStart: lineStart,\n      lineEnd: lineEnd,\n      polygonStart: function() { stream.polygonStart(); resampleStream.lineStart = ringStart; },\n      polygonEnd: function() { stream.polygonEnd(); resampleStream.lineStart = lineStart; }\n    };\n\n    function point(x, y) {\n      x = project(x, y);\n      stream.point(x[0], x[1]);\n    }\n\n    function lineStart() {\n      x0 = NaN;\n      resampleStream.point = linePoint;\n      stream.lineStart();\n    }\n\n    function linePoint(lambda, phi) {\n      var c = cartesian([lambda, phi]), p = project(lambda, phi);\n      resampleLineTo(x0, y0, lambda0, a0, b0, c0, x0 = p[0], y0 = p[1], lambda0 = lambda, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);\n      stream.point(x0, y0);\n    }\n\n    function lineEnd() {\n      resampleStream.point = point;\n      stream.lineEnd();\n    }\n\n    function ringStart() {\n      lineStart();\n      resampleStream.point = ringPoint;\n      resampleStream.lineEnd = ringEnd;\n    }\n\n    function ringPoint(lambda, phi) {\n      linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;\n      resampleStream.point = linePoint;\n    }\n\n    function ringEnd() {\n      resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream);\n      resampleStream.lineEnd = lineEnd;\n      lineEnd();\n    }\n\n    return resampleStream;\n  };\n}\n","import clipAntimeridian from \"../clip/antimeridian.js\";\nimport clipCircle from \"../clip/circle.js\";\nimport clipRectangle from \"../clip/rectangle.js\";\nimport compose from \"../compose.js\";\nimport identity from \"../identity.js\";\nimport {cos, degrees, radians, sin, sqrt} from \"../math.js\";\nimport {rotateRadians} from \"../rotation.js\";\nimport {transformer} from \"../transform.js\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit.js\";\nimport resample from \"./resample.js\";\n\nvar transformRadians = transformer({\n  point: function(x, y) {\n    this.stream.point(x * radians, y * radians);\n  }\n});\n\nfunction transformRotate(rotate) {\n  return transformer({\n    point: function(x, y) {\n      var r = rotate(x, y);\n      return this.stream.point(r[0], r[1]);\n    }\n  });\n}\n\nfunction scaleTranslate(k, dx, dy, sx, sy) {\n  function transform(x, y) {\n    x *= sx; y *= sy;\n    return [dx + k * x, dy - k * y];\n  }\n  transform.invert = function(x, y) {\n    return [(x - dx) / k * sx, (dy - y) / k * sy];\n  };\n  return transform;\n}\n\nfunction scaleTranslateRotate(k, dx, dy, sx, sy, alpha) {\n  var cosAlpha = cos(alpha),\n      sinAlpha = sin(alpha),\n      a = cosAlpha * k,\n      b = sinAlpha * k,\n      ai = cosAlpha / k,\n      bi = sinAlpha / k,\n      ci = (sinAlpha * dy - cosAlpha * dx) / k,\n      fi = (sinAlpha * dx + cosAlpha * dy) / k;\n  function transform(x, y) {\n    x *= sx; y *= sy;\n    return [a * x - b * y + dx, dy - b * x - a * y];\n  }\n  transform.invert = function(x, y) {\n    return [sx * (ai * x - bi * y + ci), sy * (fi - bi * x - ai * y)];\n  };\n  return transform;\n}\n\nexport default function projection(project) {\n  return projectionMutator(function() { return project; })();\n}\n\nexport function projectionMutator(projectAt) {\n  var project,\n      k = 150, // scale\n      x = 480, y = 250, // translate\n      lambda = 0, phi = 0, // center\n      deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, // pre-rotate\n      alpha = 0, // post-rotate angle\n      sx = 1, // reflectX\n      sy = 1, // reflectX\n      theta = null, preclip = clipAntimeridian, // pre-clip angle\n      x0 = null, y0, x1, y1, postclip = identity, // post-clip extent\n      delta2 = 0.5, // precision\n      projectResample,\n      projectTransform,\n      projectRotateTransform,\n      cache,\n      cacheStream;\n\n  function projection(point) {\n    return projectRotateTransform(point[0] * radians, point[1] * radians);\n  }\n\n  function invert(point) {\n    point = projectRotateTransform.invert(point[0], point[1]);\n    return point && [point[0] * degrees, point[1] * degrees];\n  }\n\n  projection.stream = function(stream) {\n    return cache && cacheStream === stream ? cache : cache = transformRadians(transformRotate(rotate)(preclip(projectResample(postclip(cacheStream = stream)))));\n  };\n\n  projection.preclip = function(_) {\n    return arguments.length ? (preclip = _, theta = undefined, reset()) : preclip;\n  };\n\n  projection.postclip = function(_) {\n    return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;\n  };\n\n  projection.clipAngle = function(_) {\n    return arguments.length ? (preclip = +_ ? clipCircle(theta = _ * radians) : (theta = null, clipAntimeridian), reset()) : theta * degrees;\n  };\n\n  projection.clipExtent = function(_) {\n    return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n  };\n\n  projection.scale = function(_) {\n    return arguments.length ? (k = +_, recenter()) : k;\n  };\n\n  projection.translate = function(_) {\n    return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y];\n  };\n\n  projection.center = function(_) {\n    return arguments.length ? (lambda = _[0] % 360 * radians, phi = _[1] % 360 * radians, recenter()) : [lambda * degrees, phi * degrees];\n  };\n\n  projection.rotate = function(_) {\n    return arguments.length ? (deltaLambda = _[0] % 360 * radians, deltaPhi = _[1] % 360 * radians, deltaGamma = _.length > 2 ? _[2] % 360 * radians : 0, recenter()) : [deltaLambda * degrees, deltaPhi * degrees, deltaGamma * degrees];\n  };\n\n  projection.angle = function(_) {\n    return arguments.length ? (alpha = _ % 360 * radians, recenter()) : alpha * degrees;\n  };\n\n  projection.reflectX = function(_) {\n    return arguments.length ? (sx = _ ? -1 : 1, recenter()) : sx < 0;\n  };\n\n  projection.reflectY = function(_) {\n    return arguments.length ? (sy = _ ? -1 : 1, recenter()) : sy < 0;\n  };\n\n  projection.precision = function(_) {\n    return arguments.length ? (projectResample = resample(projectTransform, delta2 = _ * _), reset()) : sqrt(delta2);\n  };\n\n  projection.fitExtent = function(extent, object) {\n    return fitExtent(projection, extent, object);\n  };\n\n  projection.fitSize = function(size, object) {\n    return fitSize(projection, size, object);\n  };\n\n  projection.fitWidth = function(width, object) {\n    return fitWidth(projection, width, object);\n  };\n\n  projection.fitHeight = function(height, object) {\n    return fitHeight(projection, height, object);\n  };\n\n  function recenter() {\n    var center = scaleTranslateRotate(k, 0, 0, sx, sy, alpha).apply(null, project(lambda, phi)),\n        transform = (alpha ? scaleTranslateRotate : scaleTranslate)(k, x - center[0], y - center[1], sx, sy, alpha);\n    rotate = rotateRadians(deltaLambda, deltaPhi, deltaGamma);\n    projectTransform = compose(project, transform);\n    projectRotateTransform = compose(rotate, projectTransform);\n    projectResample = resample(projectTransform, delta2);\n    return reset();\n  }\n\n  function reset() {\n    cache = cacheStream = null;\n    return projection;\n  }\n\n  return function() {\n    project = projectAt.apply(this, arguments);\n    projection.invert = project.invert && invert;\n    return recenter();\n  };\n}\n","import {abs, asin, atan2, cos, epsilon, pi, sign, sin, sqrt} from \"../math.js\";\nimport {conicProjection} from \"./conic.js\";\nimport {cylindricalEqualAreaRaw} from \"./cylindricalEqualArea.js\";\n\nexport function conicEqualAreaRaw(y0, y1) {\n  var sy0 = sin(y0), n = (sy0 + sin(y1)) / 2;\n\n  // Are the parallels symmetrical around the Equator?\n  if (abs(n) < epsilon) return cylindricalEqualAreaRaw(y0);\n\n  var c = 1 + sy0 * (2 * n - sy0), r0 = sqrt(c) / n;\n\n  function project(x, y) {\n    var r = sqrt(c - 2 * n * sin(y)) / n;\n    return [r * sin(x *= n), r0 - r * cos(x)];\n  }\n\n  project.invert = function(x, y) {\n    var r0y = r0 - y,\n        l = atan2(x, abs(r0y)) * sign(r0y);\n    if (r0y * n < 0)\n      l -= pi * sign(x) * sign(r0y);\n    return [l / n, asin((c - (x * x + r0y * r0y) * n * n) / (2 * n))];\n  };\n\n  return project;\n}\n\nexport default function() {\n  return conicProjection(conicEqualAreaRaw)\n      .scale(155.424)\n      .center([0, 33.6442]);\n}\n","import {asin, cos, sin} from \"../math.js\";\n\nexport function cylindricalEqualAreaRaw(phi0) {\n  var cosPhi0 = cos(phi0);\n\n  function forward(lambda, phi) {\n    return [lambda * cosPhi0, sin(phi) / cosPhi0];\n  }\n\n  forward.invert = function(x, y) {\n    return [x / cosPhi0, asin(y * cosPhi0)];\n  };\n\n  return forward;\n}\n","import {degrees, pi, radians} from \"../math.js\";\nimport {projectionMutator} from \"./index.js\";\n\nexport function conicProjection(projectAt) {\n  var phi0 = 0,\n      phi1 = pi / 3,\n      m = projectionMutator(projectAt),\n      p = m(phi0, phi1);\n\n  p.parallels = function(_) {\n    return arguments.length ? m(phi0 = _[0] * radians, phi1 = _[1] * radians) : [phi0 * degrees, phi1 * degrees];\n  };\n\n  return p;\n}\n","import {epsilon} from \"../math.js\";\nimport albers from \"./albers.js\";\nimport conicEqualArea from \"./conicEqualArea.js\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit.js\";\n\n// The projections must have mutually exclusive clip regions on the sphere,\n// as this will avoid emitting interleaving lines and polygons.\nfunction multiplex(streams) {\n  var n = streams.length;\n  return {\n    point: function(x, y) { var i = -1; while (++i < n) streams[i].point(x, y); },\n    sphere: function() { var i = -1; while (++i < n) streams[i].sphere(); },\n    lineStart: function() { var i = -1; while (++i < n) streams[i].lineStart(); },\n    lineEnd: function() { var i = -1; while (++i < n) streams[i].lineEnd(); },\n    polygonStart: function() { var i = -1; while (++i < n) streams[i].polygonStart(); },\n    polygonEnd: function() { var i = -1; while (++i < n) streams[i].polygonEnd(); }\n  };\n}\n\n// A composite projection for the United States, configured by default for\n// 960×500. The projection also works quite well at 960×600 if you change the\n// scale to 1285 and adjust the translate accordingly. The set of standard\n// parallels for each region comes from USGS, which is published here:\n// http://egsc.usgs.gov/isb/pubs/MapProjections/projections.html#albers\nexport default function() {\n  var cache,\n      cacheStream,\n      lower48 = albers(), lower48Point,\n      alaska = conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]), alaskaPoint, // EPSG:3338\n      hawaii = conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]), hawaiiPoint, // ESRI:102007\n      point, pointStream = {point: function(x, y) { point = [x, y]; }};\n\n  function albersUsa(coordinates) {\n    var x = coordinates[0], y = coordinates[1];\n    return point = null,\n        (lower48Point.point(x, y), point)\n        || (alaskaPoint.point(x, y), point)\n        || (hawaiiPoint.point(x, y), point);\n  }\n\n  albersUsa.invert = function(coordinates) {\n    var k = lower48.scale(),\n        t = lower48.translate(),\n        x = (coordinates[0] - t[0]) / k,\n        y = (coordinates[1] - t[1]) / k;\n    return (y >= 0.120 && y < 0.234 && x >= -0.425 && x < -0.214 ? alaska\n        : y >= 0.166 && y < 0.234 && x >= -0.214 && x < -0.115 ? hawaii\n        : lower48).invert(coordinates);\n  };\n\n  albersUsa.stream = function(stream) {\n    return cache && cacheStream === stream ? cache : cache = multiplex([lower48.stream(cacheStream = stream), alaska.stream(stream), hawaii.stream(stream)]);\n  };\n\n  albersUsa.precision = function(_) {\n    if (!arguments.length) return lower48.precision();\n    lower48.precision(_), alaska.precision(_), hawaii.precision(_);\n    return reset();\n  };\n\n  albersUsa.scale = function(_) {\n    if (!arguments.length) return lower48.scale();\n    lower48.scale(_), alaska.scale(_ * 0.35), hawaii.scale(_);\n    return albersUsa.translate(lower48.translate());\n  };\n\n  albersUsa.translate = function(_) {\n    if (!arguments.length) return lower48.translate();\n    var k = lower48.scale(), x = +_[0], y = +_[1];\n\n    lower48Point = lower48\n        .translate(_)\n        .clipExtent([[x - 0.455 * k, y - 0.238 * k], [x + 0.455 * k, y + 0.238 * k]])\n        .stream(pointStream);\n\n    alaskaPoint = alaska\n        .translate([x - 0.307 * k, y + 0.201 * k])\n        .clipExtent([[x - 0.425 * k + epsilon, y + 0.120 * k + epsilon], [x - 0.214 * k - epsilon, y + 0.234 * k - epsilon]])\n        .stream(pointStream);\n\n    hawaiiPoint = hawaii\n        .translate([x - 0.205 * k, y + 0.212 * k])\n        .clipExtent([[x - 0.214 * k + epsilon, y + 0.166 * k + epsilon], [x - 0.115 * k - epsilon, y + 0.234 * k - epsilon]])\n        .stream(pointStream);\n\n    return reset();\n  };\n\n  albersUsa.fitExtent = function(extent, object) {\n    return fitExtent(albersUsa, extent, object);\n  };\n\n  albersUsa.fitSize = function(size, object) {\n    return fitSize(albersUsa, size, object);\n  };\n\n  albersUsa.fitWidth = function(width, object) {\n    return fitWidth(albersUsa, width, object);\n  };\n\n  albersUsa.fitHeight = function(height, object) {\n    return fitHeight(albersUsa, height, object);\n  };\n\n  function reset() {\n    cache = cacheStream = null;\n    return albersUsa;\n  }\n\n  return albersUsa.scale(1070);\n}\n","import conicEqualArea from \"./conicEqualArea.js\";\n\nexport default function() {\n  return conicEqualArea()\n      .parallels([29.5, 45.5])\n      .scale(1070)\n      .translate([480, 250])\n      .rotate([96, 0])\n      .center([-0.6, 38.7]);\n}\n","export default function() {\n  return Math.random();\n}\n","import defaultSource from \"./defaultSource\";\n\nexport default (function sourceRandomNormal(source) {\n  function randomNormal(mu, sigma) {\n    var x, r;\n    mu = mu == null ? 0 : +mu;\n    sigma = sigma == null ? 1 : +sigma;\n    return function() {\n      var y;\n\n      // If available, use the second previously-generated uniform random.\n      if (x != null) y = x, x = null;\n\n      // Otherwise, generate a new x and y.\n      else do {\n        x = source() * 2 - 1;\n        y = source() * 2 - 1;\n        r = x * x + y * y;\n      } while (!r || r > 1);\n\n      return mu + sigma * y * Math.sqrt(-2 * Math.log(r) / r);\n    };\n  }\n\n  randomNormal.source = sourceRandomNormal;\n\n  return randomNormal;\n})(defaultSource);\n","import defaultSource from \"./defaultSource\";\n\nexport default (function sourceRandomUniform(source) {\n  function randomUniform(min, max) {\n    min = min == null ? 0 : +min;\n    max = max == null ? 1 : +max;\n    if (arguments.length === 1) max = min, min = 0;\n    else max -= min;\n    return function() {\n      return source() * max + min;\n    };\n  }\n\n  randomUniform.source = sourceRandomUniform;\n\n  return randomUniform;\n})(defaultSource);\n","import defaultSource from \"./defaultSource\";\n\nexport default (function sourceRandomIrwinHall(source) {\n  function randomIrwinHall(n) {\n    return function() {\n      for (var sum = 0, i = 0; i < n; ++i) sum += source();\n      return sum;\n    };\n  }\n\n  randomIrwinHall.source = sourceRandomIrwinHall;\n\n  return randomIrwinHall;\n})(defaultSource);\n","import defaultSource from \"./defaultSource\";\nimport normal from \"./normal\";\n\nexport default (function sourceRandomLogNormal(source) {\n  function randomLogNormal() {\n    var randomNormal = normal.source(source).apply(this, arguments);\n    return function() {\n      return Math.exp(randomNormal());\n    };\n  }\n\n  randomLogNormal.source = sourceRandomLogNormal;\n\n  return randomLogNormal;\n})(defaultSource);\n","import defaultSource from \"./defaultSource\";\nimport irwinHall from \"./irwinHall\";\n\nexport default (function sourceRandomBates(source) {\n  function randomBates(n) {\n    var randomIrwinHall = irwinHall.source(source)(n);\n    return function() {\n      return randomIrwinHall() / n;\n    };\n  }\n\n  randomBates.source = sourceRandomBates;\n\n  return randomBates;\n})(defaultSource);\n","import defaultSource from \"./defaultSource\";\n\nexport default (function sourceRandomExponential(source) {\n  function randomExponential(lambda) {\n    return function() {\n      return -Math.log(1 - source()) / lambda;\n    };\n  }\n\n  randomExponential.source = sourceRandomExponential;\n\n  return randomExponential;\n})(defaultSource);\n","function RedBlackTree() {\n  this._ = null; // root node\n}\n\nexport function RedBlackNode(node) {\n  node.U = // parent node\n  node.C = // color - true for red, false for black\n  node.L = // left node\n  node.R = // right node\n  node.P = // previous node\n  node.N = null; // next node\n}\n\nRedBlackTree.prototype = {\n  constructor: RedBlackTree,\n\n  insert: function(after, node) {\n    var parent, grandpa, uncle;\n\n    if (after) {\n      node.P = after;\n      node.N = after.N;\n      if (after.N) after.N.P = node;\n      after.N = node;\n      if (after.R) {\n        after = after.R;\n        while (after.L) after = after.L;\n        after.L = node;\n      } else {\n        after.R = node;\n      }\n      parent = after;\n    } else if (this._) {\n      after = RedBlackFirst(this._);\n      node.P = null;\n      node.N = after;\n      after.P = after.L = node;\n      parent = after;\n    } else {\n      node.P = node.N = null;\n      this._ = node;\n      parent = null;\n    }\n    node.L = node.R = null;\n    node.U = parent;\n    node.C = true;\n\n    after = node;\n    while (parent && parent.C) {\n      grandpa = parent.U;\n      if (parent === grandpa.L) {\n        uncle = grandpa.R;\n        if (uncle && uncle.C) {\n          parent.C = uncle.C = false;\n          grandpa.C = true;\n          after = grandpa;\n        } else {\n          if (after === parent.R) {\n            RedBlackRotateLeft(this, parent);\n            after = parent;\n            parent = after.U;\n          }\n          parent.C = false;\n          grandpa.C = true;\n          RedBlackRotateRight(this, grandpa);\n        }\n      } else {\n        uncle = grandpa.L;\n        if (uncle && uncle.C) {\n          parent.C = uncle.C = false;\n          grandpa.C = true;\n          after = grandpa;\n        } else {\n          if (after === parent.L) {\n            RedBlackRotateRight(this, parent);\n            after = parent;\n            parent = after.U;\n          }\n          parent.C = false;\n          grandpa.C = true;\n          RedBlackRotateLeft(this, grandpa);\n        }\n      }\n      parent = after.U;\n    }\n    this._.C = false;\n  },\n\n  remove: function(node) {\n    if (node.N) node.N.P = node.P;\n    if (node.P) node.P.N = node.N;\n    node.N = node.P = null;\n\n    var parent = node.U,\n        sibling,\n        left = node.L,\n        right = node.R,\n        next,\n        red;\n\n    if (!left) next = right;\n    else if (!right) next = left;\n    else next = RedBlackFirst(right);\n\n    if (parent) {\n      if (parent.L === node) parent.L = next;\n      else parent.R = next;\n    } else {\n      this._ = next;\n    }\n\n    if (left && right) {\n      red = next.C;\n      next.C = node.C;\n      next.L = left;\n      left.U = next;\n      if (next !== right) {\n        parent = next.U;\n        next.U = node.U;\n        node = next.R;\n        parent.L = node;\n        next.R = right;\n        right.U = next;\n      } else {\n        next.U = parent;\n        parent = next;\n        node = next.R;\n      }\n    } else {\n      red = node.C;\n      node = next;\n    }\n\n    if (node) node.U = parent;\n    if (red) return;\n    if (node && node.C) { node.C = false; return; }\n\n    do {\n      if (node === this._) break;\n      if (node === parent.L) {\n        sibling = parent.R;\n        if (sibling.C) {\n          sibling.C = false;\n          parent.C = true;\n          RedBlackRotateLeft(this, parent);\n          sibling = parent.R;\n        }\n        if ((sibling.L && sibling.L.C)\n            || (sibling.R && sibling.R.C)) {\n          if (!sibling.R || !sibling.R.C) {\n            sibling.L.C = false;\n            sibling.C = true;\n            RedBlackRotateRight(this, sibling);\n            sibling = parent.R;\n          }\n          sibling.C = parent.C;\n          parent.C = sibling.R.C = false;\n          RedBlackRotateLeft(this, parent);\n          node = this._;\n          break;\n        }\n      } else {\n        sibling = parent.L;\n        if (sibling.C) {\n          sibling.C = false;\n          parent.C = true;\n          RedBlackRotateRight(this, parent);\n          sibling = parent.L;\n        }\n        if ((sibling.L && sibling.L.C)\n          || (sibling.R && sibling.R.C)) {\n          if (!sibling.L || !sibling.L.C) {\n            sibling.R.C = false;\n            sibling.C = true;\n            RedBlackRotateLeft(this, sibling);\n            sibling = parent.L;\n          }\n          sibling.C = parent.C;\n          parent.C = sibling.L.C = false;\n          RedBlackRotateRight(this, parent);\n          node = this._;\n          break;\n        }\n      }\n      sibling.C = true;\n      node = parent;\n      parent = parent.U;\n    } while (!node.C);\n\n    if (node) node.C = false;\n  }\n};\n\nfunction RedBlackRotateLeft(tree, node) {\n  var p = node,\n      q = node.R,\n      parent = p.U;\n\n  if (parent) {\n    if (parent.L === p) parent.L = q;\n    else parent.R = q;\n  } else {\n    tree._ = q;\n  }\n\n  q.U = parent;\n  p.U = q;\n  p.R = q.L;\n  if (p.R) p.R.U = p;\n  q.L = p;\n}\n\nfunction RedBlackRotateRight(tree, node) {\n  var p = node,\n      q = node.L,\n      parent = p.U;\n\n  if (parent) {\n    if (parent.L === p) parent.L = q;\n    else parent.R = q;\n  } else {\n    tree._ = q;\n  }\n\n  q.U = parent;\n  p.U = q;\n  p.L = q.R;\n  if (p.L) p.L.U = p;\n  q.R = p;\n}\n\nfunction RedBlackFirst(node) {\n  while (node.L) node = node.L;\n  return node;\n}\n\nexport default RedBlackTree;\n","import {cells, edges, epsilon} from \"./Diagram\";\n\nexport function createEdge(left, right, v0, v1) {\n  var edge = [null, null],\n      index = edges.push(edge) - 1;\n  edge.left = left;\n  edge.right = right;\n  if (v0) setEdgeEnd(edge, left, right, v0);\n  if (v1) setEdgeEnd(edge, right, left, v1);\n  cells[left.index].halfedges.push(index);\n  cells[right.index].halfedges.push(index);\n  return edge;\n}\n\nexport function createBorderEdge(left, v0, v1) {\n  var edge = [v0, v1];\n  edge.left = left;\n  return edge;\n}\n\nexport function setEdgeEnd(edge, left, right, vertex) {\n  if (!edge[0] && !edge[1]) {\n    edge[0] = vertex;\n    edge.left = left;\n    edge.right = right;\n  } else if (edge.left === right) {\n    edge[1] = vertex;\n  } else {\n    edge[0] = vertex;\n  }\n}\n\n// Liang–Barsky line clipping.\nfunction clipEdge(edge, x0, y0, x1, y1) {\n  var a = edge[0],\n      b = edge[1],\n      ax = a[0],\n      ay = a[1],\n      bx = b[0],\n      by = b[1],\n      t0 = 0,\n      t1 = 1,\n      dx = bx - ax,\n      dy = by - ay,\n      r;\n\n  r = x0 - ax;\n  if (!dx && r > 0) return;\n  r /= dx;\n  if (dx < 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  } else if (dx > 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  }\n\n  r = x1 - ax;\n  if (!dx && r < 0) return;\n  r /= dx;\n  if (dx < 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  } else if (dx > 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  }\n\n  r = y0 - ay;\n  if (!dy && r > 0) return;\n  r /= dy;\n  if (dy < 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  } else if (dy > 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  }\n\n  r = y1 - ay;\n  if (!dy && r < 0) return;\n  r /= dy;\n  if (dy < 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  } else if (dy > 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  }\n\n  if (!(t0 > 0) && !(t1 < 1)) return true; // TODO Better check?\n\n  if (t0 > 0) edge[0] = [ax + t0 * dx, ay + t0 * dy];\n  if (t1 < 1) edge[1] = [ax + t1 * dx, ay + t1 * dy];\n  return true;\n}\n\nfunction connectEdge(edge, x0, y0, x1, y1) {\n  var v1 = edge[1];\n  if (v1) return true;\n\n  var v0 = edge[0],\n      left = edge.left,\n      right = edge.right,\n      lx = left[0],\n      ly = left[1],\n      rx = right[0],\n      ry = right[1],\n      fx = (lx + rx) / 2,\n      fy = (ly + ry) / 2,\n      fm,\n      fb;\n\n  if (ry === ly) {\n    if (fx < x0 || fx >= x1) return;\n    if (lx > rx) {\n      if (!v0) v0 = [fx, y0];\n      else if (v0[1] >= y1) return;\n      v1 = [fx, y1];\n    } else {\n      if (!v0) v0 = [fx, y1];\n      else if (v0[1] < y0) return;\n      v1 = [fx, y0];\n    }\n  } else {\n    fm = (lx - rx) / (ry - ly);\n    fb = fy - fm * fx;\n    if (fm < -1 || fm > 1) {\n      if (lx > rx) {\n        if (!v0) v0 = [(y0 - fb) / fm, y0];\n        else if (v0[1] >= y1) return;\n        v1 = [(y1 - fb) / fm, y1];\n      } else {\n        if (!v0) v0 = [(y1 - fb) / fm, y1];\n        else if (v0[1] < y0) return;\n        v1 = [(y0 - fb) / fm, y0];\n      }\n    } else {\n      if (ly < ry) {\n        if (!v0) v0 = [x0, fm * x0 + fb];\n        else if (v0[0] >= x1) return;\n        v1 = [x1, fm * x1 + fb];\n      } else {\n        if (!v0) v0 = [x1, fm * x1 + fb];\n        else if (v0[0] < x0) return;\n        v1 = [x0, fm * x0 + fb];\n      }\n    }\n  }\n\n  edge[0] = v0;\n  edge[1] = v1;\n  return true;\n}\n\nexport function clipEdges(x0, y0, x1, y1) {\n  var i = edges.length,\n      edge;\n\n  while (i--) {\n    if (!connectEdge(edge = edges[i], x0, y0, x1, y1)\n        || !clipEdge(edge, x0, y0, x1, y1)\n        || !(Math.abs(edge[0][0] - edge[1][0]) > epsilon\n            || Math.abs(edge[0][1] - edge[1][1]) > epsilon)) {\n      delete edges[i];\n    }\n  }\n}\n","import {createBorderEdge} from \"./Edge\";\nimport {cells, edges, epsilon} from \"./Diagram\";\n\nexport function createCell(site) {\n  return cells[site.index] = {\n    site: site,\n    halfedges: []\n  };\n}\n\nfunction cellHalfedgeAngle(cell, edge) {\n  var site = cell.site,\n      va = edge.left,\n      vb = edge.right;\n  if (site === vb) vb = va, va = site;\n  if (vb) return Math.atan2(vb[1] - va[1], vb[0] - va[0]);\n  if (site === va) va = edge[1], vb = edge[0];\n  else va = edge[0], vb = edge[1];\n  return Math.atan2(va[0] - vb[0], vb[1] - va[1]);\n}\n\nexport function cellHalfedgeStart(cell, edge) {\n  return edge[+(edge.left !== cell.site)];\n}\n\nexport function cellHalfedgeEnd(cell, edge) {\n  return edge[+(edge.left === cell.site)];\n}\n\nexport function sortCellHalfedges() {\n  for (var i = 0, n = cells.length, cell, halfedges, j, m; i < n; ++i) {\n    if ((cell = cells[i]) && (m = (halfedges = cell.halfedges).length)) {\n      var index = new Array(m),\n          array = new Array(m);\n      for (j = 0; j < m; ++j) index[j] = j, array[j] = cellHalfedgeAngle(cell, edges[halfedges[j]]);\n      index.sort(function(i, j) { return array[j] - array[i]; });\n      for (j = 0; j < m; ++j) array[j] = halfedges[index[j]];\n      for (j = 0; j < m; ++j) halfedges[j] = array[j];\n    }\n  }\n}\n\nexport function clipCells(x0, y0, x1, y1) {\n  var nCells = cells.length,\n      iCell,\n      cell,\n      site,\n      iHalfedge,\n      halfedges,\n      nHalfedges,\n      start,\n      startX,\n      startY,\n      end,\n      endX,\n      endY,\n      cover = true;\n\n  for (iCell = 0; iCell < nCells; ++iCell) {\n    if (cell = cells[iCell]) {\n      site = cell.site;\n      halfedges = cell.halfedges;\n      iHalfedge = halfedges.length;\n\n      // Remove any dangling clipped edges.\n      while (iHalfedge--) {\n        if (!edges[halfedges[iHalfedge]]) {\n          halfedges.splice(iHalfedge, 1);\n        }\n      }\n\n      // Insert any border edges as necessary.\n      iHalfedge = 0, nHalfedges = halfedges.length;\n      while (iHalfedge < nHalfedges) {\n        end = cellHalfedgeEnd(cell, edges[halfedges[iHalfedge]]), endX = end[0], endY = end[1];\n        start = cellHalfedgeStart(cell, edges[halfedges[++iHalfedge % nHalfedges]]), startX = start[0], startY = start[1];\n        if (Math.abs(endX - startX) > epsilon || Math.abs(endY - startY) > epsilon) {\n          halfedges.splice(iHalfedge, 0, edges.push(createBorderEdge(site, end,\n              Math.abs(endX - x0) < epsilon && y1 - endY > epsilon ? [x0, Math.abs(startX - x0) < epsilon ? startY : y1]\n              : Math.abs(endY - y1) < epsilon && x1 - endX > epsilon ? [Math.abs(startY - y1) < epsilon ? startX : x1, y1]\n              : Math.abs(endX - x1) < epsilon && endY - y0 > epsilon ? [x1, Math.abs(startX - x1) < epsilon ? startY : y0]\n              : Math.abs(endY - y0) < epsilon && endX - x0 > epsilon ? [Math.abs(startY - y0) < epsilon ? startX : x0, y0]\n              : null)) - 1);\n          ++nHalfedges;\n        }\n      }\n\n      if (nHalfedges) cover = false;\n    }\n  }\n\n  // If there weren’t any edges, have the closest site cover the extent.\n  // It doesn’t matter which corner of the extent we measure!\n  if (cover) {\n    var dx, dy, d2, dc = Infinity;\n\n    for (iCell = 0, cover = null; iCell < nCells; ++iCell) {\n      if (cell = cells[iCell]) {\n        site = cell.site;\n        dx = site[0] - x0;\n        dy = site[1] - y0;\n        d2 = dx * dx + dy * dy;\n        if (d2 < dc) dc = d2, cover = cell;\n      }\n    }\n\n    if (cover) {\n      var v00 = [x0, y0], v01 = [x0, y1], v11 = [x1, y1], v10 = [x1, y0];\n      cover.halfedges.push(\n        edges.push(createBorderEdge(site = cover.site, v00, v01)) - 1,\n        edges.push(createBorderEdge(site, v01, v11)) - 1,\n        edges.push(createBorderEdge(site, v11, v10)) - 1,\n        edges.push(createBorderEdge(site, v10, v00)) - 1\n      );\n    }\n  }\n\n  // Lastly delete any cells with no edges; these were entirely clipped.\n  for (iCell = 0; iCell < nCells; ++iCell) {\n    if (cell = cells[iCell]) {\n      if (!cell.halfedges.length) {\n        delete cells[iCell];\n      }\n    }\n  }\n}\n","import {RedBlackNode} from \"./RedBlackTree\";\nimport {circles, epsilon2} from \"./Diagram\";\n\nvar circlePool = [];\n\nexport var firstCircle;\n\nfunction Circle() {\n  RedBlackNode(this);\n  this.x =\n  this.y =\n  this.arc =\n  this.site =\n  this.cy = null;\n}\n\nexport function attachCircle(arc) {\n  var lArc = arc.P,\n      rArc = arc.N;\n\n  if (!lArc || !rArc) return;\n\n  var lSite = lArc.site,\n      cSite = arc.site,\n      rSite = rArc.site;\n\n  if (lSite === rSite) return;\n\n  var bx = cSite[0],\n      by = cSite[1],\n      ax = lSite[0] - bx,\n      ay = lSite[1] - by,\n      cx = rSite[0] - bx,\n      cy = rSite[1] - by;\n\n  var d = 2 * (ax * cy - ay * cx);\n  if (d >= -epsilon2) return;\n\n  var ha = ax * ax + ay * ay,\n      hc = cx * cx + cy * cy,\n      x = (cy * ha - ay * hc) / d,\n      y = (ax * hc - cx * ha) / d;\n\n  var circle = circlePool.pop() || new Circle;\n  circle.arc = arc;\n  circle.site = cSite;\n  circle.x = x + bx;\n  circle.y = (circle.cy = y + by) + Math.sqrt(x * x + y * y); // y bottom\n\n  arc.circle = circle;\n\n  var before = null,\n      node = circles._;\n\n  while (node) {\n    if (circle.y < node.y || (circle.y === node.y && circle.x <= node.x)) {\n      if (node.L) node = node.L;\n      else { before = node.P; break; }\n    } else {\n      if (node.R) node = node.R;\n      else { before = node; break; }\n    }\n  }\n\n  circles.insert(before, circle);\n  if (!before) firstCircle = circle;\n}\n\nexport function detachCircle(arc) {\n  var circle = arc.circle;\n  if (circle) {\n    if (!circle.P) firstCircle = circle.N;\n    circles.remove(circle);\n    circlePool.push(circle);\n    RedBlackNode(circle);\n    arc.circle = null;\n  }\n}\n","import {RedBlackNode} from \"./RedBlackTree\";\nimport {createCell} from \"./Cell\";\nimport {attachCircle, detachCircle} from \"./Circle\";\nimport {createEdge, setEdgeEnd} from \"./Edge\";\nimport {beaches, epsilon} from \"./Diagram\";\n\nvar beachPool = [];\n\nfunction Beach() {\n  RedBlackNode(this);\n  this.edge =\n  this.site =\n  this.circle = null;\n}\n\nfunction createBeach(site) {\n  var beach = beachPool.pop() || new Beach;\n  beach.site = site;\n  return beach;\n}\n\nfunction detachBeach(beach) {\n  detachCircle(beach);\n  beaches.remove(beach);\n  beachPool.push(beach);\n  RedBlackNode(beach);\n}\n\nexport function removeBeach(beach) {\n  var circle = beach.circle,\n      x = circle.x,\n      y = circle.cy,\n      vertex = [x, y],\n      previous = beach.P,\n      next = beach.N,\n      disappearing = [beach];\n\n  detachBeach(beach);\n\n  var lArc = previous;\n  while (lArc.circle\n      && Math.abs(x - lArc.circle.x) < epsilon\n      && Math.abs(y - lArc.circle.cy) < epsilon) {\n    previous = lArc.P;\n    disappearing.unshift(lArc);\n    detachBeach(lArc);\n    lArc = previous;\n  }\n\n  disappearing.unshift(lArc);\n  detachCircle(lArc);\n\n  var rArc = next;\n  while (rArc.circle\n      && Math.abs(x - rArc.circle.x) < epsilon\n      && Math.abs(y - rArc.circle.cy) < epsilon) {\n    next = rArc.N;\n    disappearing.push(rArc);\n    detachBeach(rArc);\n    rArc = next;\n  }\n\n  disappearing.push(rArc);\n  detachCircle(rArc);\n\n  var nArcs = disappearing.length,\n      iArc;\n  for (iArc = 1; iArc < nArcs; ++iArc) {\n    rArc = disappearing[iArc];\n    lArc = disappearing[iArc - 1];\n    setEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex);\n  }\n\n  lArc = disappearing[0];\n  rArc = disappearing[nArcs - 1];\n  rArc.edge = createEdge(lArc.site, rArc.site, null, vertex);\n\n  attachCircle(lArc);\n  attachCircle(rArc);\n}\n\nexport function addBeach(site) {\n  var x = site[0],\n      directrix = site[1],\n      lArc,\n      rArc,\n      dxl,\n      dxr,\n      node = beaches._;\n\n  while (node) {\n    dxl = leftBreakPoint(node, directrix) - x;\n    if (dxl > epsilon) node = node.L; else {\n      dxr = x - rightBreakPoint(node, directrix);\n      if (dxr > epsilon) {\n        if (!node.R) {\n          lArc = node;\n          break;\n        }\n        node = node.R;\n      } else {\n        if (dxl > -epsilon) {\n          lArc = node.P;\n          rArc = node;\n        } else if (dxr > -epsilon) {\n          lArc = node;\n          rArc = node.N;\n        } else {\n          lArc = rArc = node;\n        }\n        break;\n      }\n    }\n  }\n\n  createCell(site);\n  var newArc = createBeach(site);\n  beaches.insert(lArc, newArc);\n\n  if (!lArc && !rArc) return;\n\n  if (lArc === rArc) {\n    detachCircle(lArc);\n    rArc = createBeach(lArc.site);\n    beaches.insert(newArc, rArc);\n    newArc.edge = rArc.edge = createEdge(lArc.site, newArc.site);\n    attachCircle(lArc);\n    attachCircle(rArc);\n    return;\n  }\n\n  if (!rArc) { // && lArc\n    newArc.edge = createEdge(lArc.site, newArc.site);\n    return;\n  }\n\n  // else lArc !== rArc\n  detachCircle(lArc);\n  detachCircle(rArc);\n\n  var lSite = lArc.site,\n      ax = lSite[0],\n      ay = lSite[1],\n      bx = site[0] - ax,\n      by = site[1] - ay,\n      rSite = rArc.site,\n      cx = rSite[0] - ax,\n      cy = rSite[1] - ay,\n      d = 2 * (bx * cy - by * cx),\n      hb = bx * bx + by * by,\n      hc = cx * cx + cy * cy,\n      vertex = [(cy * hb - by * hc) / d + ax, (bx * hc - cx * hb) / d + ay];\n\n  setEdgeEnd(rArc.edge, lSite, rSite, vertex);\n  newArc.edge = createEdge(lSite, site, null, vertex);\n  rArc.edge = createEdge(site, rSite, null, vertex);\n  attachCircle(lArc);\n  attachCircle(rArc);\n}\n\nfunction leftBreakPoint(arc, directrix) {\n  var site = arc.site,\n      rfocx = site[0],\n      rfocy = site[1],\n      pby2 = rfocy - directrix;\n\n  if (!pby2) return rfocx;\n\n  var lArc = arc.P;\n  if (!lArc) return -Infinity;\n\n  site = lArc.site;\n  var lfocx = site[0],\n      lfocy = site[1],\n      plby2 = lfocy - directrix;\n\n  if (!plby2) return lfocx;\n\n  var hl = lfocx - rfocx,\n      aby2 = 1 / pby2 - 1 / plby2,\n      b = hl / plby2;\n\n  if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx;\n\n  return (rfocx + lfocx) / 2;\n}\n\nfunction rightBreakPoint(arc, directrix) {\n  var rArc = arc.N;\n  if (rArc) return leftBreakPoint(rArc, directrix);\n  var site = arc.site;\n  return site[1] === directrix ? site[0] : Infinity;\n}\n","import {addBeach, removeBeach} from \"./Beach\";\nimport {sortCellHalfedges, cellHalfedgeStart, clipCells} from \"./Cell\";\nimport {firstCircle} from \"./Circle\";\nimport {clipEdges} from \"./Edge\";\nimport RedBlackTree from \"./RedBlackTree\";\n\nexport var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var beaches;\nexport var cells;\nexport var circles;\nexport var edges;\n\nfunction triangleArea(a, b, c) {\n  return (a[0] - c[0]) * (b[1] - a[1]) - (a[0] - b[0]) * (c[1] - a[1]);\n}\n\nfunction lexicographic(a, b) {\n  return b[1] - a[1]\n      || b[0] - a[0];\n}\n\nexport default function Diagram(sites, extent) {\n  var site = sites.sort(lexicographic).pop(),\n      x,\n      y,\n      circle;\n\n  edges = [];\n  cells = new Array(sites.length);\n  beaches = new RedBlackTree;\n  circles = new RedBlackTree;\n\n  while (true) {\n    circle = firstCircle;\n    if (site && (!circle || site[1] < circle.y || (site[1] === circle.y && site[0] < circle.x))) {\n      if (site[0] !== x || site[1] !== y) {\n        addBeach(site);\n        x = site[0], y = site[1];\n      }\n      site = sites.pop();\n    } else if (circle) {\n      removeBeach(circle.arc);\n    } else {\n      break;\n    }\n  }\n\n  sortCellHalfedges();\n\n  if (extent) {\n    var x0 = +extent[0][0],\n        y0 = +extent[0][1],\n        x1 = +extent[1][0],\n        y1 = +extent[1][1];\n    clipEdges(x0, y0, x1, y1);\n    clipCells(x0, y0, x1, y1);\n  }\n\n  this.edges = edges;\n  this.cells = cells;\n\n  beaches =\n  circles =\n  edges =\n  cells = null;\n}\n\nDiagram.prototype = {\n  constructor: Diagram,\n\n  polygons: function() {\n    var edges = this.edges;\n\n    return this.cells.map(function(cell) {\n      var polygon = cell.halfedges.map(function(i) { return cellHalfedgeStart(cell, edges[i]); });\n      polygon.data = cell.site.data;\n      return polygon;\n    });\n  },\n\n  triangles: function() {\n    var triangles = [],\n        edges = this.edges;\n\n    this.cells.forEach(function(cell, i) {\n      if (!(m = (halfedges = cell.halfedges).length)) return;\n      var site = cell.site,\n          halfedges,\n          j = -1,\n          m,\n          s0,\n          e1 = edges[halfedges[m - 1]],\n          s1 = e1.left === site ? e1.right : e1.left;\n\n      while (++j < m) {\n        s0 = s1;\n        e1 = edges[halfedges[j]];\n        s1 = e1.left === site ? e1.right : e1.left;\n        if (s0 && s1 && i < s0.index && i < s1.index && triangleArea(site, s0, s1) < 0) {\n          triangles.push([site.data, s0.data, s1.data]);\n        }\n      }\n    });\n\n    return triangles;\n  },\n\n  links: function() {\n    return this.edges.filter(function(edge) {\n      return edge.right;\n    }).map(function(edge) {\n      return {\n        source: edge.left.data,\n        target: edge.right.data\n      };\n    });\n  },\n\n  find: function(x, y, radius) {\n    var that = this, i0, i1 = that._found || 0, n = that.cells.length, cell;\n\n    // Use the previously-found cell, or start with an arbitrary one.\n    while (!(cell = that.cells[i1])) if (++i1 >= n) return null;\n    var dx = x - cell.site[0], dy = y - cell.site[1], d2 = dx * dx + dy * dy;\n\n    // Traverse the half-edges to find a closer cell, if any.\n    do {\n      cell = that.cells[i0 = i1], i1 = null;\n      cell.halfedges.forEach(function(e) {\n        var edge = that.edges[e], v = edge.left;\n        if ((v === cell.site || !v) && !(v = edge.right)) return;\n        var vx = x - v[0], vy = y - v[1], v2 = vx * vx + vy * vy;\n        if (v2 < d2) d2 = v2, i1 = v.index;\n      });\n    } while (i1 !== null);\n\n    that._found = i0;\n\n    return radius == null || d2 <= radius * radius ? cell.site : null;\n  }\n}\n","var rho = Math.SQRT2,\n    rho2 = 2,\n    rho4 = 4,\n    epsilon2 = 1e-12;\n\nfunction cosh(x) {\n  return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n  return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n  return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\n// p0 = [ux0, uy0, w0]\n// p1 = [ux1, uy1, w1]\nexport default function(p0, p1) {\n  var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n      ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n      dx = ux1 - ux0,\n      dy = uy1 - uy0,\n      d2 = dx * dx + dy * dy,\n      i,\n      S;\n\n  // Special case for u0 ≅ u1.\n  if (d2 < epsilon2) {\n    S = Math.log(w1 / w0) / rho;\n    i = function(t) {\n      return [\n        ux0 + t * dx,\n        uy0 + t * dy,\n        w0 * Math.exp(rho * t * S)\n      ];\n    }\n  }\n\n  // General case.\n  else {\n    var d1 = Math.sqrt(d2),\n        b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n        b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n        r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n        r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n    S = (r1 - r0) / rho;\n    i = function(t) {\n      var s = t * S,\n          coshr0 = cosh(r0),\n          u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n      return [\n        ux0 + u * dx,\n        uy0 + u * dy,\n        w0 * coshr0 / cosh(rho * s + r0)\n      ];\n    }\n  }\n\n  i.duration = S * 1000;\n\n  return i;\n}\n","export function Transform(k, x, y) {\n  this.k = k;\n  this.x = x;\n  this.y = y;\n}\n\nTransform.prototype = {\n  constructor: Transform,\n  scale: function(k) {\n    return k === 1 ? this : new Transform(this.k * k, this.x, this.y);\n  },\n  translate: function(x, y) {\n    return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y);\n  },\n  apply: function(point) {\n    return [point[0] * this.k + this.x, point[1] * this.k + this.y];\n  },\n  applyX: function(x) {\n    return x * this.k + this.x;\n  },\n  applyY: function(y) {\n    return y * this.k + this.y;\n  },\n  invert: function(location) {\n    return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];\n  },\n  invertX: function(x) {\n    return (x - this.x) / this.k;\n  },\n  invertY: function(y) {\n    return (y - this.y) / this.k;\n  },\n  rescaleX: function(x) {\n    return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x));\n  },\n  rescaleY: function(y) {\n    return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y));\n  },\n  toString: function() {\n    return \"translate(\" + this.x + \",\" + this.y + \") scale(\" + this.k + \")\";\n  }\n};\n\nexport var identity = new Transform(1, 0, 0);\n\ntransform.prototype = Transform.prototype;\n\nexport default function transform(node) {\n  while (!node.__zoom) if (!(node = node.parentNode)) return identity;\n  return node.__zoom;\n}\n","export default function(a, b) {\n  return a = +a, b = +b, function(t) {\n    return Math.round(a * (1 - t) + b * t);\n  };\n}\n","/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE.\n *\n *  https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n *\n */\n\n(function(window, document) {\n'use strict';\n\n\n// Exits early if all IntersectionObserver and IntersectionObserverEntry\n// features are natively supported.\nif ('IntersectionObserver' in window &&\n    'IntersectionObserverEntry' in window &&\n    'intersectionRatio' in window.IntersectionObserverEntry.prototype) {\n\n  // Minimal polyfill for Edge 15's lack of `isIntersecting`\n  // See: https://github.com/w3c/IntersectionObserver/issues/211\n  if (!('isIntersecting' in window.IntersectionObserverEntry.prototype)) {\n    Object.defineProperty(window.IntersectionObserverEntry.prototype,\n      'isIntersecting', {\n      get: function () {\n        return this.intersectionRatio > 0;\n      }\n    });\n  }\n  return;\n}\n\n\n/**\n * An IntersectionObserver registry. This registry exists to hold a strong\n * reference to IntersectionObserver instances currently observing a target\n * element. Without this registry, instances without another reference may be\n * garbage collected.\n */\nvar registry = [];\n\n\n/**\n * Creates the global IntersectionObserverEntry constructor.\n * https://w3c.github.io/IntersectionObserver/#intersection-observer-entry\n * @param {Object} entry A dictionary of instance properties.\n * @constructor\n */\nfunction IntersectionObserverEntry(entry) {\n  this.time = entry.time;\n  this.target = entry.target;\n  this.rootBounds = entry.rootBounds;\n  this.boundingClientRect = entry.boundingClientRect;\n  this.intersectionRect = entry.intersectionRect || getEmptyRect();\n  this.isIntersecting = !!entry.intersectionRect;\n\n  // Calculates the intersection ratio.\n  var targetRect = this.boundingClientRect;\n  var targetArea = targetRect.width * targetRect.height;\n  var intersectionRect = this.intersectionRect;\n  var intersectionArea = intersectionRect.width * intersectionRect.height;\n\n  // Sets intersection ratio.\n  if (targetArea) {\n    // Round the intersection ratio to avoid floating point math issues:\n    // https://github.com/w3c/IntersectionObserver/issues/324\n    this.intersectionRatio = Number((intersectionArea / targetArea).toFixed(4));\n  } else {\n    // If area is zero and is intersecting, sets to 1, otherwise to 0\n    this.intersectionRatio = this.isIntersecting ? 1 : 0;\n  }\n}\n\n\n/**\n * Creates the global IntersectionObserver constructor.\n * https://w3c.github.io/IntersectionObserver/#intersection-observer-interface\n * @param {Function} callback The function to be invoked after intersection\n *     changes have queued. The function is not invoked if the queue has\n *     been emptied by calling the `takeRecords` method.\n * @param {Object=} opt_options Optional configuration options.\n * @constructor\n */\nfunction IntersectionObserver(callback, opt_options) {\n\n  var options = opt_options || {};\n\n  if (typeof callback != 'function') {\n    throw new Error('callback must be a function');\n  }\n\n  if (options.root && options.root.nodeType != 1) {\n    throw new Error('root must be an Element');\n  }\n\n  // Binds and throttles `this._checkForIntersections`.\n  this._checkForIntersections = throttle(\n      this._checkForIntersections.bind(this), this.THROTTLE_TIMEOUT);\n\n  // Private properties.\n  this._callback = callback;\n  this._observationTargets = [];\n  this._queuedEntries = [];\n  this._rootMarginValues = this._parseRootMargin(options.rootMargin);\n\n  // Public properties.\n  this.thresholds = this._initThresholds(options.threshold);\n  this.root = options.root || null;\n  this.rootMargin = this._rootMarginValues.map(function(margin) {\n    return margin.value + margin.unit;\n  }).join(' ');\n}\n\n\n/**\n * The minimum interval within which the document will be checked for\n * intersection changes.\n */\nIntersectionObserver.prototype.THROTTLE_TIMEOUT = 100;\n\n\n/**\n * The frequency in which the polyfill polls for intersection changes.\n * this can be updated on a per instance basis and must be set prior to\n * calling `observe` on the first target.\n */\nIntersectionObserver.prototype.POLL_INTERVAL = null;\n\n/**\n * Use a mutation observer on the root element\n * to detect intersection changes.\n */\nIntersectionObserver.prototype.USE_MUTATION_OBSERVER = true;\n\n\n/**\n * Starts observing a target element for intersection changes based on\n * the thresholds values.\n * @param {Element} target The DOM element to observe.\n */\nIntersectionObserver.prototype.observe = function(target) {\n  var isTargetAlreadyObserved = this._observationTargets.some(function(item) {\n    return item.element == target;\n  });\n\n  if (isTargetAlreadyObserved) {\n    return;\n  }\n\n  if (!(target && target.nodeType == 1)) {\n    throw new Error('target must be an Element');\n  }\n\n  this._registerInstance();\n  this._observationTargets.push({element: target, entry: null});\n  this._monitorIntersections();\n  this._checkForIntersections();\n};\n\n\n/**\n * Stops observing a target element for intersection changes.\n * @param {Element} target The DOM element to observe.\n */\nIntersectionObserver.prototype.unobserve = function(target) {\n  this._observationTargets =\n      this._observationTargets.filter(function(item) {\n\n    return item.element != target;\n  });\n  if (!this._observationTargets.length) {\n    this._unmonitorIntersections();\n    this._unregisterInstance();\n  }\n};\n\n\n/**\n * Stops observing all target elements for intersection changes.\n */\nIntersectionObserver.prototype.disconnect = function() {\n  this._observationTargets = [];\n  this._unmonitorIntersections();\n  this._unregisterInstance();\n};\n\n\n/**\n * Returns any queue entries that have not yet been reported to the\n * callback and clears the queue. This can be used in conjunction with the\n * callback to obtain the absolute most up-to-date intersection information.\n * @return {Array} The currently queued entries.\n */\nIntersectionObserver.prototype.takeRecords = function() {\n  var records = this._queuedEntries.slice();\n  this._queuedEntries = [];\n  return records;\n};\n\n\n/**\n * Accepts the threshold value from the user configuration object and\n * returns a sorted array of unique threshold values. If a value is not\n * between 0 and 1 and error is thrown.\n * @private\n * @param {Array|number=} opt_threshold An optional threshold value or\n *     a list of threshold values, defaulting to [0].\n * @return {Array} A sorted list of unique and valid threshold values.\n */\nIntersectionObserver.prototype._initThresholds = function(opt_threshold) {\n  var threshold = opt_threshold || [0];\n  if (!Array.isArray(threshold)) threshold = [threshold];\n\n  return threshold.sort().filter(function(t, i, a) {\n    if (typeof t != 'number' || isNaN(t) || t < 0 || t > 1) {\n      throw new Error('threshold must be a number between 0 and 1 inclusively');\n    }\n    return t !== a[i - 1];\n  });\n};\n\n\n/**\n * Accepts the rootMargin value from the user configuration object\n * and returns an array of the four margin values as an object containing\n * the value and unit properties. If any of the values are not properly\n * formatted or use a unit other than px or %, and error is thrown.\n * @private\n * @param {string=} opt_rootMargin An optional rootMargin value,\n *     defaulting to '0px'.\n * @return {Array<Object>} An array of margin objects with the keys\n *     value and unit.\n */\nIntersectionObserver.prototype._parseRootMargin = function(opt_rootMargin) {\n  var marginString = opt_rootMargin || '0px';\n  var margins = marginString.split(/\\s+/).map(function(margin) {\n    var parts = /^(-?\\d*\\.?\\d+)(px|%)$/.exec(margin);\n    if (!parts) {\n      throw new Error('rootMargin must be specified in pixels or percent');\n    }\n    return {value: parseFloat(parts[1]), unit: parts[2]};\n  });\n\n  // Handles shorthand.\n  margins[1] = margins[1] || margins[0];\n  margins[2] = margins[2] || margins[0];\n  margins[3] = margins[3] || margins[1];\n\n  return margins;\n};\n\n\n/**\n * Starts polling for intersection changes if the polling is not already\n * happening, and if the page's visibility state is visible.\n * @private\n */\nIntersectionObserver.prototype._monitorIntersections = function() {\n  if (!this._monitoringIntersections) {\n    this._monitoringIntersections = true;\n\n    // If a poll interval is set, use polling instead of listening to\n    // resize and scroll events or DOM mutations.\n    if (this.POLL_INTERVAL) {\n      this._monitoringInterval = setInterval(\n          this._checkForIntersections, this.POLL_INTERVAL);\n    }\n    else {\n      addEvent(window, 'resize', this._checkForIntersections, true);\n      addEvent(document, 'scroll', this._checkForIntersections, true);\n\n      if (this.USE_MUTATION_OBSERVER && 'MutationObserver' in window) {\n        this._domObserver = new MutationObserver(this._checkForIntersections);\n        this._domObserver.observe(document, {\n          attributes: true,\n          childList: true,\n          characterData: true,\n          subtree: true\n        });\n      }\n    }\n  }\n};\n\n\n/**\n * Stops polling for intersection changes.\n * @private\n */\nIntersectionObserver.prototype._unmonitorIntersections = function() {\n  if (this._monitoringIntersections) {\n    this._monitoringIntersections = false;\n\n    clearInterval(this._monitoringInterval);\n    this._monitoringInterval = null;\n\n    removeEvent(window, 'resize', this._checkForIntersections, true);\n    removeEvent(document, 'scroll', this._checkForIntersections, true);\n\n    if (this._domObserver) {\n      this._domObserver.disconnect();\n      this._domObserver = null;\n    }\n  }\n};\n\n\n/**\n * Scans each observation target for intersection changes and adds them\n * to the internal entries queue. If new entries are found, it\n * schedules the callback to be invoked.\n * @private\n */\nIntersectionObserver.prototype._checkForIntersections = function() {\n  var rootIsInDom = this._rootIsInDom();\n  var rootRect = rootIsInDom ? this._getRootRect() : getEmptyRect();\n\n  this._observationTargets.forEach(function(item) {\n    var target = item.element;\n    var targetRect = getBoundingClientRect(target);\n    var rootContainsTarget = this._rootContainsTarget(target);\n    var oldEntry = item.entry;\n    var intersectionRect = rootIsInDom && rootContainsTarget &&\n        this._computeTargetAndRootIntersection(target, rootRect);\n\n    var newEntry = item.entry = new IntersectionObserverEntry({\n      time: now(),\n      target: target,\n      boundingClientRect: targetRect,\n      rootBounds: rootRect,\n      intersectionRect: intersectionRect\n    });\n\n    if (!oldEntry) {\n      this._queuedEntries.push(newEntry);\n    } else if (rootIsInDom && rootContainsTarget) {\n      // If the new entry intersection ratio has crossed any of the\n      // thresholds, add a new entry.\n      if (this._hasCrossedThreshold(oldEntry, newEntry)) {\n        this._queuedEntries.push(newEntry);\n      }\n    } else {\n      // If the root is not in the DOM or target is not contained within\n      // root but the previous entry for this target had an intersection,\n      // add a new record indicating removal.\n      if (oldEntry && oldEntry.isIntersecting) {\n        this._queuedEntries.push(newEntry);\n      }\n    }\n  }, this);\n\n  if (this._queuedEntries.length) {\n    this._callback(this.takeRecords(), this);\n  }\n};\n\n\n/**\n * Accepts a target and root rect computes the intersection between then\n * following the algorithm in the spec.\n * TODO(philipwalton): at this time clip-path is not considered.\n * https://w3c.github.io/IntersectionObserver/#calculate-intersection-rect-algo\n * @param {Element} target The target DOM element\n * @param {Object} rootRect The bounding rect of the root after being\n *     expanded by the rootMargin value.\n * @return {?Object} The final intersection rect object or undefined if no\n *     intersection is found.\n * @private\n */\nIntersectionObserver.prototype._computeTargetAndRootIntersection =\n    function(target, rootRect) {\n\n  // If the element isn't displayed, an intersection can't happen.\n  if (window.getComputedStyle(target).display == 'none') return;\n\n  var targetRect = getBoundingClientRect(target);\n  var intersectionRect = targetRect;\n  var parent = getParentNode(target);\n  var atRoot = false;\n\n  while (!atRoot) {\n    var parentRect = null;\n    var parentComputedStyle = parent.nodeType == 1 ?\n        window.getComputedStyle(parent) : {};\n\n    // If the parent isn't displayed, an intersection can't happen.\n    if (parentComputedStyle.display == 'none') return;\n\n    if (parent == this.root || parent == document) {\n      atRoot = true;\n      parentRect = rootRect;\n    } else {\n      // If the element has a non-visible overflow, and it's not the <body>\n      // or <html> element, update the intersection rect.\n      // Note: <body> and <html> cannot be clipped to a rect that's not also\n      // the document rect, so no need to compute a new intersection.\n      if (parent != document.body &&\n          parent != document.documentElement &&\n          parentComputedStyle.overflow != 'visible') {\n        parentRect = getBoundingClientRect(parent);\n      }\n    }\n\n    // If either of the above conditionals set a new parentRect,\n    // calculate new intersection data.\n    if (parentRect) {\n      intersectionRect = computeRectIntersection(parentRect, intersectionRect);\n\n      if (!intersectionRect) break;\n    }\n    parent = getParentNode(parent);\n  }\n  return intersectionRect;\n};\n\n\n/**\n * Returns the root rect after being expanded by the rootMargin value.\n * @return {Object} The expanded root rect.\n * @private\n */\nIntersectionObserver.prototype._getRootRect = function() {\n  var rootRect;\n  if (this.root) {\n    rootRect = getBoundingClientRect(this.root);\n  } else {\n    // Use <html>/<body> instead of window since scroll bars affect size.\n    var html = document.documentElement;\n    var body = document.body;\n    rootRect = {\n      top: 0,\n      left: 0,\n      right: html.clientWidth || body.clientWidth,\n      width: html.clientWidth || body.clientWidth,\n      bottom: html.clientHeight || body.clientHeight,\n      height: html.clientHeight || body.clientHeight\n    };\n  }\n  return this._expandRectByRootMargin(rootRect);\n};\n\n\n/**\n * Accepts a rect and expands it by the rootMargin value.\n * @param {Object} rect The rect object to expand.\n * @return {Object} The expanded rect.\n * @private\n */\nIntersectionObserver.prototype._expandRectByRootMargin = function(rect) {\n  var margins = this._rootMarginValues.map(function(margin, i) {\n    return margin.unit == 'px' ? margin.value :\n        margin.value * (i % 2 ? rect.width : rect.height) / 100;\n  });\n  var newRect = {\n    top: rect.top - margins[0],\n    right: rect.right + margins[1],\n    bottom: rect.bottom + margins[2],\n    left: rect.left - margins[3]\n  };\n  newRect.width = newRect.right - newRect.left;\n  newRect.height = newRect.bottom - newRect.top;\n\n  return newRect;\n};\n\n\n/**\n * Accepts an old and new entry and returns true if at least one of the\n * threshold values has been crossed.\n * @param {?IntersectionObserverEntry} oldEntry The previous entry for a\n *    particular target element or null if no previous entry exists.\n * @param {IntersectionObserverEntry} newEntry The current entry for a\n *    particular target element.\n * @return {boolean} Returns true if a any threshold has been crossed.\n * @private\n */\nIntersectionObserver.prototype._hasCrossedThreshold =\n    function(oldEntry, newEntry) {\n\n  // To make comparing easier, an entry that has a ratio of 0\n  // but does not actually intersect is given a value of -1\n  var oldRatio = oldEntry && oldEntry.isIntersecting ?\n      oldEntry.intersectionRatio || 0 : -1;\n  var newRatio = newEntry.isIntersecting ?\n      newEntry.intersectionRatio || 0 : -1;\n\n  // Ignore unchanged ratios\n  if (oldRatio === newRatio) return;\n\n  for (var i = 0; i < this.thresholds.length; i++) {\n    var threshold = this.thresholds[i];\n\n    // Return true if an entry matches a threshold or if the new ratio\n    // and the old ratio are on the opposite sides of a threshold.\n    if (threshold == oldRatio || threshold == newRatio ||\n        threshold < oldRatio !== threshold < newRatio) {\n      return true;\n    }\n  }\n};\n\n\n/**\n * Returns whether or not the root element is an element and is in the DOM.\n * @return {boolean} True if the root element is an element and is in the DOM.\n * @private\n */\nIntersectionObserver.prototype._rootIsInDom = function() {\n  return !this.root || containsDeep(document, this.root);\n};\n\n\n/**\n * Returns whether or not the target element is a child of root.\n * @param {Element} target The target element to check.\n * @return {boolean} True if the target element is a child of root.\n * @private\n */\nIntersectionObserver.prototype._rootContainsTarget = function(target) {\n  return containsDeep(this.root || document, target);\n};\n\n\n/**\n * Adds the instance to the global IntersectionObserver registry if it isn't\n * already present.\n * @private\n */\nIntersectionObserver.prototype._registerInstance = function() {\n  if (registry.indexOf(this) < 0) {\n    registry.push(this);\n  }\n};\n\n\n/**\n * Removes the instance from the global IntersectionObserver registry.\n * @private\n */\nIntersectionObserver.prototype._unregisterInstance = function() {\n  var index = registry.indexOf(this);\n  if (index != -1) registry.splice(index, 1);\n};\n\n\n/**\n * Returns the result of the performance.now() method or null in browsers\n * that don't support the API.\n * @return {number} The elapsed time since the page was requested.\n */\nfunction now() {\n  return window.performance && performance.now && performance.now();\n}\n\n\n/**\n * Throttles a function and delays its execution, so it's only called at most\n * once within a given time period.\n * @param {Function} fn The function to throttle.\n * @param {number} timeout The amount of time that must pass before the\n *     function can be called again.\n * @return {Function} The throttled function.\n */\nfunction throttle(fn, timeout) {\n  var timer = null;\n  return function () {\n    if (!timer) {\n      timer = setTimeout(function() {\n        fn();\n        timer = null;\n      }, timeout);\n    }\n  };\n}\n\n\n/**\n * Adds an event handler to a DOM node ensuring cross-browser compatibility.\n * @param {Node} node The DOM node to add the event handler to.\n * @param {string} event The event name.\n * @param {Function} fn The event handler to add.\n * @param {boolean} opt_useCapture Optionally adds the even to the capture\n *     phase. Note: this only works in modern browsers.\n */\nfunction addEvent(node, event, fn, opt_useCapture) {\n  if (typeof node.addEventListener == 'function') {\n    node.addEventListener(event, fn, opt_useCapture || false);\n  }\n  else if (typeof node.attachEvent == 'function') {\n    node.attachEvent('on' + event, fn);\n  }\n}\n\n\n/**\n * Removes a previously added event handler from a DOM node.\n * @param {Node} node The DOM node to remove the event handler from.\n * @param {string} event The event name.\n * @param {Function} fn The event handler to remove.\n * @param {boolean} opt_useCapture If the event handler was added with this\n *     flag set to true, it should be set to true here in order to remove it.\n */\nfunction removeEvent(node, event, fn, opt_useCapture) {\n  if (typeof node.removeEventListener == 'function') {\n    node.removeEventListener(event, fn, opt_useCapture || false);\n  }\n  else if (typeof node.detatchEvent == 'function') {\n    node.detatchEvent('on' + event, fn);\n  }\n}\n\n\n/**\n * Returns the intersection between two rect objects.\n * @param {Object} rect1 The first rect.\n * @param {Object} rect2 The second rect.\n * @return {?Object} The intersection rect or undefined if no intersection\n *     is found.\n */\nfunction computeRectIntersection(rect1, rect2) {\n  var top = Math.max(rect1.top, rect2.top);\n  var bottom = Math.min(rect1.bottom, rect2.bottom);\n  var left = Math.max(rect1.left, rect2.left);\n  var right = Math.min(rect1.right, rect2.right);\n  var width = right - left;\n  var height = bottom - top;\n\n  return (width >= 0 && height >= 0) && {\n    top: top,\n    bottom: bottom,\n    left: left,\n    right: right,\n    width: width,\n    height: height\n  };\n}\n\n\n/**\n * Shims the native getBoundingClientRect for compatibility with older IE.\n * @param {Element} el The element whose bounding rect to get.\n * @return {Object} The (possibly shimmed) rect of the element.\n */\nfunction getBoundingClientRect(el) {\n  var rect;\n\n  try {\n    rect = el.getBoundingClientRect();\n  } catch (err) {\n    // Ignore Windows 7 IE11 \"Unspecified error\"\n    // https://github.com/w3c/IntersectionObserver/pull/205\n  }\n\n  if (!rect) return getEmptyRect();\n\n  // Older IE\n  if (!(rect.width && rect.height)) {\n    rect = {\n      top: rect.top,\n      right: rect.right,\n      bottom: rect.bottom,\n      left: rect.left,\n      width: rect.right - rect.left,\n      height: rect.bottom - rect.top\n    };\n  }\n  return rect;\n}\n\n\n/**\n * Returns an empty rect object. An empty rect is returned when an element\n * is not in the DOM.\n * @return {Object} The empty rect.\n */\nfunction getEmptyRect() {\n  return {\n    top: 0,\n    bottom: 0,\n    left: 0,\n    right: 0,\n    width: 0,\n    height: 0\n  };\n}\n\n/**\n * Checks to see if a parent element contains a child element (including inside\n * shadow DOM).\n * @param {Node} parent The parent element.\n * @param {Node} child The child element.\n * @return {boolean} True if the parent node contains the child node.\n */\nfunction containsDeep(parent, child) {\n  var node = child;\n  while (node) {\n    if (node == parent) return true;\n\n    node = getParentNode(node);\n  }\n  return false;\n}\n\n\n/**\n * Gets the parent node of an element or its host element if the parent node\n * is a shadow root.\n * @param {Node} node The node whose parent to get.\n * @return {Node|null} The parent node or null if no parent exists.\n */\nfunction getParentNode(node) {\n  var parent = node.parentNode;\n\n  if (parent && parent.nodeType == 11 && parent.host) {\n    // If the parent is a shadow root, return the host element.\n    return parent.host;\n  }\n  return parent;\n}\n\n\n// Exposes the constructors globally.\nwindow.IntersectionObserver = IntersectionObserver;\nwindow.IntersectionObserverEntry = IntersectionObserverEntry;\n\n}(window, document));\n","import interval from \"./interval.js\";\nimport {durationSecond} from \"./duration.js\";\n\nvar second = interval(function(date) {\n  date.setTime(date - date.getMilliseconds());\n}, function(date, step) {\n  date.setTime(+date + step * durationSecond);\n}, function(start, end) {\n  return (end - start) / durationSecond;\n}, function(date) {\n  return date.getUTCSeconds();\n});\n\nexport default second;\nexport var seconds = second.range;\n","import sourceEvent from \"./sourceEvent\";\nimport point from \"./point\";\n\nexport default function(node, touches, identifier) {\n  if (arguments.length < 3) identifier = touches, touches = sourceEvent().changedTouches;\n\n  for (var i = 0, n = touches ? touches.length : 0, touch; i < n; ++i) {\n    if ((touch = touches[i]).identifier === identifier) {\n      return point(node, touch);\n    }\n  }\n\n  return null;\n}\n","function none() {}\n\nexport default function(selector) {\n  return selector == null ? none : function() {\n    return this.querySelector(selector);\n  };\n}\n","import namespaces from \"./namespaces\";\n\nexport default function(name) {\n  var prefix = name += \"\", i = prefix.indexOf(\":\");\n  if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n  return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name;\n}\n","import interval from \"./interval.js\";\nimport {durationDay} from \"./duration.js\";\n\nvar utcDay = interval(function(date) {\n  date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n  date.setUTCDate(date.getUTCDate() + step);\n}, function(start, end) {\n  return (end - start) / durationDay;\n}, function(date) {\n  return date.getUTCDate() - 1;\n});\n\nexport default utcDay;\nexport var utcDays = utcDay.range;\n","export var prefix = \"$\";\n\nfunction Map() {}\n\nMap.prototype = map.prototype = {\n  constructor: Map,\n  has: function(key) {\n    return (prefix + key) in this;\n  },\n  get: function(key) {\n    return this[prefix + key];\n  },\n  set: function(key, value) {\n    this[prefix + key] = value;\n    return this;\n  },\n  remove: function(key) {\n    var property = prefix + key;\n    return property in this && delete this[property];\n  },\n  clear: function() {\n    for (var property in this) if (property[0] === prefix) delete this[property];\n  },\n  keys: function() {\n    var keys = [];\n    for (var property in this) if (property[0] === prefix) keys.push(property.slice(1));\n    return keys;\n  },\n  values: function() {\n    var values = [];\n    for (var property in this) if (property[0] === prefix) values.push(this[property]);\n    return values;\n  },\n  entries: function() {\n    var entries = [];\n    for (var property in this) if (property[0] === prefix) entries.push({key: property.slice(1), value: this[property]});\n    return entries;\n  },\n  size: function() {\n    var size = 0;\n    for (var property in this) if (property[0] === prefix) ++size;\n    return size;\n  },\n  empty: function() {\n    for (var property in this) if (property[0] === prefix) return false;\n    return true;\n  },\n  each: function(f) {\n    for (var property in this) if (property[0] === prefix) f(this[property], property.slice(1), this);\n  }\n};\n\nfunction map(object, f) {\n  var map = new Map;\n\n  // Copy constructor.\n  if (object instanceof Map) object.each(function(value, key) { map.set(key, value); });\n\n  // Index array by numeric index or specified key function.\n  else if (Array.isArray(object)) {\n    var i = -1,\n        n = object.length,\n        o;\n\n    if (f == null) while (++i < n) map.set(i, object[i]);\n    else while (++i < n) map.set(f(o = object[i], i, object), o);\n  }\n\n  // Convert object to map.\n  else if (object) for (var key in object) map.set(key, object[key]);\n\n  return map;\n}\n\nexport default map;\n","import {default as map, prefix} from \"./map\";\n\nfunction Set() {}\n\nvar proto = map.prototype;\n\nSet.prototype = set.prototype = {\n  constructor: Set,\n  has: proto.has,\n  add: function(value) {\n    value += \"\";\n    this[prefix + value] = value;\n    return this;\n  },\n  remove: proto.remove,\n  clear: proto.clear,\n  values: proto.keys,\n  size: proto.size,\n  empty: proto.empty,\n  each: proto.each\n};\n\nfunction set(object, f) {\n  var set = new Set;\n\n  // Copy constructor.\n  if (object instanceof Set) object.each(function(value) { set.add(value); });\n\n  // Otherwise, assume it’s an array.\n  else if (object) {\n    var i = -1, n = object.length;\n    if (f == null) while (++i < n) set.add(object[i]);\n    else while (++i < n) set.add(f(object[i], i, object));\n  }\n\n  return set;\n}\n\nexport default set;\n","import interval from \"./interval.js\";\n\nvar utcYear = interval(function(date) {\n  date.setUTCMonth(0, 1);\n  date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n  date.setUTCFullYear(date.getUTCFullYear() + step);\n}, function(start, end) {\n  return end.getUTCFullYear() - start.getUTCFullYear();\n}, function(date) {\n  return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = function(k) {\n  return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n    date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n    date.setUTCMonth(0, 1);\n    date.setUTCHours(0, 0, 0, 0);\n  }, function(date, step) {\n    date.setUTCFullYear(date.getUTCFullYear() + step * k);\n  });\n};\n\nexport default utcYear;\nexport var utcYears = utcYear.range;\n","import interval from \"./interval.js\";\nimport {durationDay, durationMinute} from \"./duration.js\";\n\nvar day = interval(function(date) {\n  date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n  date.setDate(date.getDate() + step);\n}, function(start, end) {\n  return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay;\n}, function(date) {\n  return date.getDate() - 1;\n});\n\nexport default day;\nexport var days = day.range;\n","var frame = 0, // is an animation frame pending?\n    timeout = 0, // is a timeout pending?\n    interval = 0, // are any timers active?\n    pokeDelay = 1000, // how frequently we check for clock skew\n    taskHead,\n    taskTail,\n    clockLast = 0,\n    clockNow = 0,\n    clockSkew = 0,\n    clock = typeof performance === \"object\" && performance.now ? performance : Date,\n    setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n  return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n  clockNow = 0;\n}\n\nexport function Timer() {\n  this._call =\n  this._time =\n  this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n  constructor: Timer,\n  restart: function(callback, delay, time) {\n    if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n    time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n    if (!this._next && taskTail !== this) {\n      if (taskTail) taskTail._next = this;\n      else taskHead = this;\n      taskTail = this;\n    }\n    this._call = callback;\n    this._time = time;\n    sleep();\n  },\n  stop: function() {\n    if (this._call) {\n      this._call = null;\n      this._time = Infinity;\n      sleep();\n    }\n  }\n};\n\nexport function timer(callback, delay, time) {\n  var t = new Timer;\n  t.restart(callback, delay, time);\n  return t;\n}\n\nexport function timerFlush() {\n  now(); // Get the current time, if not already set.\n  ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n  var t = taskHead, e;\n  while (t) {\n    if ((e = clockNow - t._time) >= 0) t._call.call(null, e);\n    t = t._next;\n  }\n  --frame;\n}\n\nfunction wake() {\n  clockNow = (clockLast = clock.now()) + clockSkew;\n  frame = timeout = 0;\n  try {\n    timerFlush();\n  } finally {\n    frame = 0;\n    nap();\n    clockNow = 0;\n  }\n}\n\nfunction poke() {\n  var now = clock.now(), delay = now - clockLast;\n  if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n  var t0, t1 = taskHead, t2, time = Infinity;\n  while (t1) {\n    if (t1._call) {\n      if (time > t1._time) time = t1._time;\n      t0 = t1, t1 = t1._next;\n    } else {\n      t2 = t1._next, t1._next = null;\n      t1 = t0 ? t0._next = t2 : taskHead = t2;\n    }\n  }\n  taskTail = t0;\n  sleep(time);\n}\n\nfunction sleep(time) {\n  if (frame) return; // Soonest alarm already set, or will be.\n  if (timeout) timeout = clearTimeout(timeout);\n  var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n  if (delay > 24) {\n    if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n    if (interval) interval = clearInterval(interval);\n  } else {\n    if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n    frame = 1, setFrame(wake);\n  }\n}\n","import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n    reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n  return function() {\n    return b;\n  };\n}\n\nfunction one(b) {\n  return function(t) {\n    return b(t) + \"\";\n  };\n}\n\nexport default function(a, b) {\n  var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n      am, // current match in a\n      bm, // current match in b\n      bs, // string preceding current number in b, if any\n      i = -1, // index in s\n      s = [], // string constants and placeholders\n      q = []; // number interpolators\n\n  // Coerce inputs to strings.\n  a = a + \"\", b = b + \"\";\n\n  // Interpolate pairs of numbers in a & b.\n  while ((am = reA.exec(a))\n      && (bm = reB.exec(b))) {\n    if ((bs = bm.index) > bi) { // a string precedes the next number in b\n      bs = b.slice(bi, bs);\n      if (s[i]) s[i] += bs; // coalesce with previous string\n      else s[++i] = bs;\n    }\n    if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n      if (s[i]) s[i] += bm; // coalesce with previous string\n      else s[++i] = bm;\n    } else { // interpolate non-matching numbers\n      s[++i] = null;\n      q.push({i: i, x: number(am, bm)});\n    }\n    bi = reB.lastIndex;\n  }\n\n  // Add remains of b.\n  if (bi < b.length) {\n    bs = b.slice(bi);\n    if (s[i]) s[i] += bs; // coalesce with previous string\n    else s[++i] = bs;\n  }\n\n  // Special optimization for only a single match.\n  // Otherwise, interpolate each of the numbers and rejoin the string.\n  return s.length < 2 ? (q[0]\n      ? one(q[0].x)\n      : zero(b))\n      : (b = q.length, function(t) {\n          for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n          return s.join(\"\");\n        });\n}\n","import interval from \"./interval.js\";\n\nvar month = interval(function(date) {\n  date.setDate(1);\n  date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n  date.setMonth(date.getMonth() + step);\n}, function(start, end) {\n  return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n}, function(date) {\n  return date.getMonth();\n});\n\nexport default month;\nexport var months = month.range;\n","import interval from \"./interval.js\";\n\nvar year = interval(function(date) {\n  date.setMonth(0, 1);\n  date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n  date.setFullYear(date.getFullYear() + step);\n}, function(start, end) {\n  return end.getFullYear() - start.getFullYear();\n}, function(date) {\n  return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\nyear.every = function(k) {\n  return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n    date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n    date.setMonth(0, 1);\n    date.setHours(0, 0, 0, 0);\n  }, function(date, step) {\n    date.setFullYear(date.getFullYear() + step * k);\n  });\n};\n\nexport default year;\nexport var years = year.range;\n","export default function(node) {\n  return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n      || (node.document && node) // node is a Window\n      || node.defaultView; // node is a Document\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x) {\n  return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;\n}\n","export default function(x) {\n  return Math.abs(x = Math.round(x)) >= 1e21\n      ? x.toLocaleString(\"en\").replace(/,/g, \"\")\n      : x.toString(10);\n}\n\n// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimalParts(1.23) returns [\"123\", 0].\nexport function formatDecimalParts(x, p) {\n  if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n  var i, coefficient = x.slice(0, i);\n\n  // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n  // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n  return [\n    coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n    +x.slice(i + 1)\n  ];\n}\n","import interval from \"./interval.js\";\nimport {durationHour, durationMinute, durationSecond} from \"./duration.js\";\n\nvar hour = interval(function(date) {\n  date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);\n}, function(date, step) {\n  date.setTime(+date + step * durationHour);\n}, function(start, end) {\n  return (end - start) / durationHour;\n}, function(date) {\n  return date.getHours();\n});\n\nexport default hour;\nexport var hours = hour.range;\n","import {Timer} from \"./timer.js\";\n\nexport default function(callback, delay, time) {\n  var t = new Timer;\n  delay = delay == null ? 0 : +delay;\n  t.restart(function(elapsed) {\n    t.stop();\n    callback(elapsed + delay);\n  }, delay, time);\n  return t;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer, timeout} from \"d3-timer\";\n\nvar emptyOn = dispatch(\"start\", \"end\", \"cancel\", \"interrupt\");\nvar emptyTween = [];\n\nexport var CREATED = 0;\nexport var SCHEDULED = 1;\nexport var STARTING = 2;\nexport var STARTED = 3;\nexport var RUNNING = 4;\nexport var ENDING = 5;\nexport var ENDED = 6;\n\nexport default function(node, name, id, index, group, timing) {\n  var schedules = node.__transition;\n  if (!schedules) node.__transition = {};\n  else if (id in schedules) return;\n  create(node, id, {\n    name: name,\n    index: index, // For context during callback.\n    group: group, // For context during callback.\n    on: emptyOn,\n    tween: emptyTween,\n    time: timing.time,\n    delay: timing.delay,\n    duration: timing.duration,\n    ease: timing.ease,\n    timer: null,\n    state: CREATED\n  });\n}\n\nexport function init(node, id) {\n  var schedule = get(node, id);\n  if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n  return schedule;\n}\n\nexport function set(node, id) {\n  var schedule = get(node, id);\n  if (schedule.state > STARTED) throw new Error(\"too late; already running\");\n  return schedule;\n}\n\nexport function get(node, id) {\n  var schedule = node.__transition;\n  if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n  return schedule;\n}\n\nfunction create(node, id, self) {\n  var schedules = node.__transition,\n      tween;\n\n  // Initialize the self timer when the transition is created.\n  // Note the actual delay is not known until the first callback!\n  schedules[id] = self;\n  self.timer = timer(schedule, 0, self.time);\n\n  function schedule(elapsed) {\n    self.state = SCHEDULED;\n    self.timer.restart(start, self.delay, self.time);\n\n    // If the elapsed delay is less than our first sleep, start immediately.\n    if (self.delay <= elapsed) start(elapsed - self.delay);\n  }\n\n  function start(elapsed) {\n    var i, j, n, o;\n\n    // If the state is not SCHEDULED, then we previously errored on start.\n    if (self.state !== SCHEDULED) return stop();\n\n    for (i in schedules) {\n      o = schedules[i];\n      if (o.name !== self.name) continue;\n\n      // While this element already has a starting transition during this frame,\n      // defer starting an interrupting transition until that transition has a\n      // chance to tick (and possibly end); see d3/d3-transition#54!\n      if (o.state === STARTED) return timeout(start);\n\n      // Interrupt the active transition, if any.\n      if (o.state === RUNNING) {\n        o.state = ENDED;\n        o.timer.stop();\n        o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n        delete schedules[i];\n      }\n\n      // Cancel any pre-empted transitions.\n      else if (+i < id) {\n        o.state = ENDED;\n        o.timer.stop();\n        o.on.call(\"cancel\", node, node.__data__, o.index, o.group);\n        delete schedules[i];\n      }\n    }\n\n    // Defer the first tick to end of the current frame; see d3/d3#1576.\n    // Note the transition may be canceled after start and before the first tick!\n    // Note this must be scheduled before the start event; see d3/d3-transition#16!\n    // Assuming this is successful, subsequent callbacks go straight to tick.\n    timeout(function() {\n      if (self.state === STARTED) {\n        self.state = RUNNING;\n        self.timer.restart(tick, self.delay, self.time);\n        tick(elapsed);\n      }\n    });\n\n    // Dispatch the start event.\n    // Note this must be done before the tween are initialized.\n    self.state = STARTING;\n    self.on.call(\"start\", node, node.__data__, self.index, self.group);\n    if (self.state !== STARTING) return; // interrupted\n    self.state = STARTED;\n\n    // Initialize the tween, deleting null tween.\n    tween = new Array(n = self.tween.length);\n    for (i = 0, j = -1; i < n; ++i) {\n      if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n        tween[++j] = o;\n      }\n    }\n    tween.length = j + 1;\n  }\n\n  function tick(elapsed) {\n    var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n        i = -1,\n        n = tween.length;\n\n    while (++i < n) {\n      tween[i].call(node, t);\n    }\n\n    // Dispatch the end event.\n    if (self.state === ENDING) {\n      self.on.call(\"end\", node, node.__data__, self.index, self.group);\n      stop();\n    }\n  }\n\n  function stop() {\n    self.state = ENDED;\n    self.timer.stop();\n    delete schedules[id];\n    for (var i in schedules) return; // eslint-disable-line no-unused-vars\n    delete node.__transition;\n  }\n}\n","import {STARTING, ENDING, ENDED} from \"./transition/schedule.js\";\n\nexport default function(node, name) {\n  var schedules = node.__transition,\n      schedule,\n      active,\n      empty = true,\n      i;\n\n  if (!schedules) return;\n\n  name = name == null ? null : name + \"\";\n\n  for (i in schedules) {\n    if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n    active = schedule.state > STARTING && schedule.state < ENDING;\n    schedule.state = ENDED;\n    schedule.timer.stop();\n    schedule.on.call(active ? \"interrupt\" : \"cancel\", node, node.__data__, schedule.index, schedule.group);\n    delete schedules[i];\n  }\n\n  if (empty) delete node.__transition;\n}\n","import decompose, {identity} from \"./decompose.js\";\n\nvar cssNode,\n    cssRoot,\n    cssView,\n    svgNode;\n\nexport function parseCss(value) {\n  if (value === \"none\") return identity;\n  if (!cssNode) cssNode = document.createElement(\"DIV\"), cssRoot = document.documentElement, cssView = document.defaultView;\n  cssNode.style.transform = value;\n  value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue(\"transform\");\n  cssRoot.removeChild(cssNode);\n  value = value.slice(7, -1).split(\",\");\n  return decompose(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]);\n}\n\nexport function parseSvg(value) {\n  if (value == null) return identity;\n  if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n  svgNode.setAttribute(\"transform\", value);\n  if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n  value = value.matrix;\n  return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n  translateX: 0,\n  translateY: 0,\n  rotate: 0,\n  skewX: 0,\n  scaleX: 1,\n  scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n  var scaleX, scaleY, skewX;\n  if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n  if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n  if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n  if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n  return {\n    translateX: e,\n    translateY: f,\n    rotate: Math.atan2(b, a) * degrees,\n    skewX: Math.atan(skewX) * degrees,\n    scaleX: scaleX,\n    scaleY: scaleY\n  };\n}\n","import number from \"../number.js\";\nimport {parseCss, parseSvg} from \"./parse.js\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n  function pop(s) {\n    return s.length ? s.pop() + \" \" : \"\";\n  }\n\n  function translate(xa, ya, xb, yb, s, q) {\n    if (xa !== xb || ya !== yb) {\n      var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n      q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n    } else if (xb || yb) {\n      s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n    }\n  }\n\n  function rotate(a, b, s, q) {\n    if (a !== b) {\n      if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n      q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n    } else if (b) {\n      s.push(pop(s) + \"rotate(\" + b + degParen);\n    }\n  }\n\n  function skewX(a, b, s, q) {\n    if (a !== b) {\n      q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n    } else if (b) {\n      s.push(pop(s) + \"skewX(\" + b + degParen);\n    }\n  }\n\n  function scale(xa, ya, xb, yb, s, q) {\n    if (xa !== xb || ya !== yb) {\n      var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n      q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n    } else if (xb !== 1 || yb !== 1) {\n      s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n    }\n  }\n\n  return function(a, b) {\n    var s = [], // string constants and placeholders\n        q = []; // number interpolators\n    a = parse(a), b = parse(b);\n    translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n    rotate(a.rotate, b.rotate, s, q);\n    skewX(a.skewX, b.skewX, s, q);\n    scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n    a = b = null; // gc\n    return function(t) {\n      var i = -1, n = q.length, o;\n      while (++i < n) s[(o = q[i]).i] = o.x(t);\n      return s.join(\"\");\n    };\n  };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","import {get, set} from \"./schedule.js\";\n\nfunction tweenRemove(id, name) {\n  var tween0, tween1;\n  return function() {\n    var schedule = set(this, id),\n        tween = schedule.tween;\n\n    // If this node shared tween with the previous node,\n    // just assign the updated shared tween and we’re done!\n    // Otherwise, copy-on-write.\n    if (tween !== tween0) {\n      tween1 = tween0 = tween;\n      for (var i = 0, n = tween1.length; i < n; ++i) {\n        if (tween1[i].name === name) {\n          tween1 = tween1.slice();\n          tween1.splice(i, 1);\n          break;\n        }\n      }\n    }\n\n    schedule.tween = tween1;\n  };\n}\n\nfunction tweenFunction(id, name, value) {\n  var tween0, tween1;\n  if (typeof value !== \"function\") throw new Error;\n  return function() {\n    var schedule = set(this, id),\n        tween = schedule.tween;\n\n    // If this node shared tween with the previous node,\n    // just assign the updated shared tween and we’re done!\n    // Otherwise, copy-on-write.\n    if (tween !== tween0) {\n      tween1 = (tween0 = tween).slice();\n      for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n        if (tween1[i].name === name) {\n          tween1[i] = t;\n          break;\n        }\n      }\n      if (i === n) tween1.push(t);\n    }\n\n    schedule.tween = tween1;\n  };\n}\n\nexport default function(name, value) {\n  var id = this._id;\n\n  name += \"\";\n\n  if (arguments.length < 2) {\n    var tween = get(this.node(), id).tween;\n    for (var i = 0, n = tween.length, t; i < n; ++i) {\n      if ((t = tween[i]).name === name) {\n        return t.value;\n      }\n    }\n    return null;\n  }\n\n  return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nexport function tweenValue(transition, name, value) {\n  var id = transition._id;\n\n  transition.each(function() {\n    var schedule = set(this, id);\n    (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n  });\n\n  return function(node) {\n    return get(node, id).value[name];\n  };\n}\n","import {color} from \"d3-color\";\nimport {interpolateNumber, interpolateRgb, interpolateString} from \"d3-interpolate\";\n\nexport default function(a, b) {\n  var c;\n  return (typeof b === \"number\" ? interpolateNumber\n      : b instanceof color ? interpolateRgb\n      : (c = color(b)) ? (b = c, interpolateRgb)\n      : interpolateString)(a, b);\n}\n","import {interpolateTransformSvg as interpolateTransform} from \"d3-interpolate\";\nimport {namespace} from \"d3-selection\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction attrRemove(name) {\n  return function() {\n    this.removeAttribute(name);\n  };\n}\n\nfunction attrRemoveNS(fullname) {\n  return function() {\n    this.removeAttributeNS(fullname.space, fullname.local);\n  };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n  var string00,\n      string1 = value1 + \"\",\n      interpolate0;\n  return function() {\n    var string0 = this.getAttribute(name);\n    return string0 === string1 ? null\n        : string0 === string00 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, value1);\n  };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n  var string00,\n      string1 = value1 + \"\",\n      interpolate0;\n  return function() {\n    var string0 = this.getAttributeNS(fullname.space, fullname.local);\n    return string0 === string1 ? null\n        : string0 === string00 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, value1);\n  };\n}\n\nfunction attrFunction(name, interpolate, value) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0, value1 = value(this), string1;\n    if (value1 == null) return void this.removeAttribute(name);\n    string0 = this.getAttribute(name);\n    string1 = value1 + \"\";\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n  };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0, value1 = value(this), string1;\n    if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n    string0 = this.getAttributeNS(fullname.space, fullname.local);\n    string1 = value1 + \"\";\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n  };\n}\n\nexport default function(name, value) {\n  var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform : interpolate;\n  return this.attrTween(name, typeof value === \"function\"\n      ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n      : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n      : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value));\n}\n","import {namespace} from \"d3-selection\";\n\nfunction attrInterpolate(name, i) {\n  return function(t) {\n    this.setAttribute(name, i.call(this, t));\n  };\n}\n\nfunction attrInterpolateNS(fullname, i) {\n  return function(t) {\n    this.setAttributeNS(fullname.space, fullname.local, i.call(this, t));\n  };\n}\n\nfunction attrTweenNS(fullname, value) {\n  var t0, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);\n    return t0;\n  }\n  tween._value = value;\n  return tween;\n}\n\nfunction attrTween(name, value) {\n  var t0, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);\n    return t0;\n  }\n  tween._value = value;\n  return tween;\n}\n\nexport default function(name, value) {\n  var key = \"attr.\" + name;\n  if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n  if (value == null) return this.tween(key, null);\n  if (typeof value !== \"function\") throw new Error;\n  var fullname = namespace(name);\n  return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n","import {get, init} from \"./schedule.js\";\n\nfunction delayFunction(id, value) {\n  return function() {\n    init(this, id).delay = +value.apply(this, arguments);\n  };\n}\n\nfunction delayConstant(id, value) {\n  return value = +value, function() {\n    init(this, id).delay = value;\n  };\n}\n\nexport default function(value) {\n  var id = this._id;\n\n  return arguments.length\n      ? this.each((typeof value === \"function\"\n          ? delayFunction\n          : delayConstant)(id, value))\n      : get(this.node(), id).delay;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction durationFunction(id, value) {\n  return function() {\n    set(this, id).duration = +value.apply(this, arguments);\n  };\n}\n\nfunction durationConstant(id, value) {\n  return value = +value, function() {\n    set(this, id).duration = value;\n  };\n}\n\nexport default function(value) {\n  var id = this._id;\n\n  return arguments.length\n      ? this.each((typeof value === \"function\"\n          ? durationFunction\n          : durationConstant)(id, value))\n      : get(this.node(), id).duration;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction easeConstant(id, value) {\n  if (typeof value !== \"function\") throw new Error;\n  return function() {\n    set(this, id).ease = value;\n  };\n}\n\nexport default function(value) {\n  var id = this._id;\n\n  return arguments.length\n      ? this.each(easeConstant(id, value))\n      : get(this.node(), id).ease;\n}\n","import {get, set, init} from \"./schedule.js\";\n\nfunction start(name) {\n  return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n    var i = t.indexOf(\".\");\n    if (i >= 0) t = t.slice(0, i);\n    return !t || t === \"start\";\n  });\n}\n\nfunction onFunction(id, name, listener) {\n  var on0, on1, sit = start(name) ? init : set;\n  return function() {\n    var schedule = sit(this, id),\n        on = schedule.on;\n\n    // If this node shared a dispatch with the previous node,\n    // just assign the updated shared dispatch and we’re done!\n    // Otherwise, copy-on-write.\n    if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n    schedule.on = on1;\n  };\n}\n\nexport default function(name, listener) {\n  var id = this._id;\n\n  return arguments.length < 2\n      ? get(this.node(), id).on.on(name)\n      : this.each(onFunction(id, name, listener));\n}\n","function removeFunction(id) {\n  return function() {\n    var parent = this.parentNode;\n    for (var i in this.__transition) if (+i !== id) return;\n    if (parent) parent.removeChild(this);\n  };\n}\n\nexport default function() {\n  return this.on(\"end.remove\", removeFunction(this._id));\n}\n","import {selection} from \"d3-selection\";\n\nvar Selection = selection.prototype.constructor;\n\nexport default function() {\n  return new Selection(this._groups, this._parents);\n}\n","import {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {set} from \"./schedule.js\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction styleNull(name, interpolate) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0 = style(this, name),\n        string1 = (this.style.removeProperty(name), style(this, name));\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, string10 = string1);\n  };\n}\n\nfunction styleRemove(name) {\n  return function() {\n    this.style.removeProperty(name);\n  };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n  var string00,\n      string1 = value1 + \"\",\n      interpolate0;\n  return function() {\n    var string0 = style(this, name);\n    return string0 === string1 ? null\n        : string0 === string00 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, value1);\n  };\n}\n\nfunction styleFunction(name, interpolate, value) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0 = style(this, name),\n        value1 = value(this),\n        string1 = value1 + \"\";\n    if (value1 == null) string1 = value1 = (this.style.removeProperty(name), style(this, name));\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n  };\n}\n\nfunction styleMaybeRemove(id, name) {\n  var on0, on1, listener0, key = \"style.\" + name, event = \"end.\" + key, remove;\n  return function() {\n    var schedule = set(this, id),\n        on = schedule.on,\n        listener = schedule.value[key] == null ? remove || (remove = styleRemove(name)) : undefined;\n\n    // If this node shared a dispatch with the previous node,\n    // just assign the updated shared dispatch and we’re done!\n    // Otherwise, copy-on-write.\n    if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);\n\n    schedule.on = on1;\n  };\n}\n\nexport default function(name, value, priority) {\n  var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n  return value == null ? this\n      .styleTween(name, styleNull(name, i))\n      .on(\"end.style.\" + name, styleRemove(name))\n    : typeof value === \"function\" ? this\n      .styleTween(name, styleFunction(name, i, tweenValue(this, \"style.\" + name, value)))\n      .each(styleMaybeRemove(this._id, name))\n    : this\n      .styleTween(name, styleConstant(name, i, value), priority)\n      .on(\"end.style.\" + name, null);\n}\n","function styleInterpolate(name, i, priority) {\n  return function(t) {\n    this.style.setProperty(name, i.call(this, t), priority);\n  };\n}\n\nfunction styleTween(name, value, priority) {\n  var t, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);\n    return t;\n  }\n  tween._value = value;\n  return tween;\n}\n\nexport default function(name, value, priority) {\n  var key = \"style.\" + (name += \"\");\n  if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n  if (value == null) return this.tween(key, null);\n  if (typeof value !== \"function\") throw new Error;\n  return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n","function textInterpolate(i) {\n  return function(t) {\n    this.textContent = i.call(this, t);\n  };\n}\n\nfunction textTween(value) {\n  var t0, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t0 = (i0 = i) && textInterpolate(i);\n    return t0;\n  }\n  tween._value = value;\n  return tween;\n}\n\nexport default function(value) {\n  var key = \"text\";\n  if (arguments.length < 1) return (key = this.tween(key)) && key._value;\n  if (value == null) return this.tween(key, null);\n  if (typeof value !== \"function\") throw new Error;\n  return this.tween(key, textTween(value));\n}\n","import {selection} from \"d3-selection\";\nimport transition_attr from \"./attr.js\";\nimport transition_attrTween from \"./attrTween.js\";\nimport transition_delay from \"./delay.js\";\nimport transition_duration from \"./duration.js\";\nimport transition_ease from \"./ease.js\";\nimport transition_filter from \"./filter.js\";\nimport transition_merge from \"./merge.js\";\nimport transition_on from \"./on.js\";\nimport transition_remove from \"./remove.js\";\nimport transition_select from \"./select.js\";\nimport transition_selectAll from \"./selectAll.js\";\nimport transition_selection from \"./selection.js\";\nimport transition_style from \"./style.js\";\nimport transition_styleTween from \"./styleTween.js\";\nimport transition_text from \"./text.js\";\nimport transition_textTween from \"./textTween.js\";\nimport transition_transition from \"./transition.js\";\nimport transition_tween from \"./tween.js\";\nimport transition_end from \"./end.js\";\n\nvar id = 0;\n\nexport function Transition(groups, parents, name, id) {\n  this._groups = groups;\n  this._parents = parents;\n  this._name = name;\n  this._id = id;\n}\n\nexport default function transition(name) {\n  return selection().transition(name);\n}\n\nexport function newId() {\n  return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n  constructor: Transition,\n  select: transition_select,\n  selectAll: transition_selectAll,\n  filter: transition_filter,\n  merge: transition_merge,\n  selection: transition_selection,\n  transition: transition_transition,\n  call: selection_prototype.call,\n  nodes: selection_prototype.nodes,\n  node: selection_prototype.node,\n  size: selection_prototype.size,\n  empty: selection_prototype.empty,\n  each: selection_prototype.each,\n  on: transition_on,\n  attr: transition_attr,\n  attrTween: transition_attrTween,\n  style: transition_style,\n  styleTween: transition_styleTween,\n  text: transition_text,\n  textTween: transition_textTween,\n  remove: transition_remove,\n  tween: transition_tween,\n  delay: transition_delay,\n  duration: transition_duration,\n  ease: transition_ease,\n  end: transition_end\n};\n","import {selector} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n  var name = this._name,\n      id = this._id;\n\n  if (typeof select !== \"function\") select = selector(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n      if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n        if (\"__data__\" in node) subnode.__data__ = node.__data__;\n        subgroup[i] = subnode;\n        schedule(subgroup[i], name, id, i, subgroup, get(node, id));\n      }\n    }\n  }\n\n  return new Transition(subgroups, this._parents, name, id);\n}\n","import {selectorAll} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n  var name = this._name,\n      id = this._id;\n\n  if (typeof select !== \"function\") select = selectorAll(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\n          if (child = children[k]) {\n            schedule(child, name, id, k, children, inherit);\n          }\n        }\n        subgroups.push(children);\n        parents.push(node);\n      }\n    }\n  }\n\n  return new Transition(subgroups, parents, name, id);\n}\n","import {matcher} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\n\nexport default function(match) {\n  if (typeof match !== \"function\") match = matcher(match);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n      if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n        subgroup.push(node);\n      }\n    }\n  }\n\n  return new Transition(subgroups, this._parents, this._name, this._id);\n}\n","import {Transition} from \"./index.js\";\n\nexport default function(transition) {\n  if (transition._id !== this._id) throw new Error;\n\n  for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n    for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n      if (node = group0[i] || group1[i]) {\n        merge[i] = node;\n      }\n    }\n  }\n\n  for (; j < m0; ++j) {\n    merges[j] = groups0[j];\n  }\n\n  return new Transition(merges, this._parents, this._name, this._id);\n}\n","import {Transition, newId} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function() {\n  var name = this._name,\n      id0 = this._id,\n      id1 = newId();\n\n  for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        var inherit = get(node, id0);\n        schedule(node, name, id1, i, group, {\n          time: inherit.time + inherit.delay + inherit.duration,\n          delay: 0,\n          duration: inherit.duration,\n          ease: inherit.ease\n        });\n      }\n    }\n  }\n\n  return new Transition(groups, this._parents, name, id1);\n}\n","import {tweenValue} from \"./tween.js\";\n\nfunction textConstant(value) {\n  return function() {\n    this.textContent = value;\n  };\n}\n\nfunction textFunction(value) {\n  return function() {\n    var value1 = value(this);\n    this.textContent = value1 == null ? \"\" : value1;\n  };\n}\n\nexport default function(value) {\n  return this.tween(\"text\", typeof value === \"function\"\n      ? textFunction(tweenValue(this, \"text\", value))\n      : textConstant(value == null ? \"\" : value + \"\"));\n}\n","import {set} from \"./schedule.js\";\n\nexport default function() {\n  var on0, on1, that = this, id = that._id, size = that.size();\n  return new Promise(function(resolve, reject) {\n    var cancel = {value: reject},\n        end = {value: function() { if (--size === 0) resolve(); }};\n\n    that.each(function() {\n      var schedule = set(this, id),\n          on = schedule.on;\n\n      // If this node shared a dispatch with the previous node,\n      // just assign the updated shared dispatch and we’re done!\n      // Otherwise, copy-on-write.\n      if (on !== on0) {\n        on1 = (on0 = on).copy();\n        on1._.cancel.push(cancel);\n        on1._.interrupt.push(cancel);\n        on1._.end.push(end);\n      }\n\n      schedule.on = on1;\n    });\n  });\n}\n","import {Transition, newId} from \"../transition/index.js\";\nimport schedule from \"../transition/schedule.js\";\nimport {easeCubicInOut} from \"d3-ease\";\nimport {now} from \"d3-timer\";\n\nvar defaultTiming = {\n  time: null, // Set on use.\n  delay: 0,\n  duration: 250,\n  ease: easeCubicInOut\n};\n\nfunction inherit(node, id) {\n  var timing;\n  while (!(timing = node.__transition) || !(timing = timing[id])) {\n    if (!(node = node.parentNode)) {\n      return defaultTiming.time = now(), defaultTiming;\n    }\n  }\n  return timing;\n}\n\nexport default function(name) {\n  var id,\n      timing;\n\n  if (name instanceof Transition) {\n    id = name._id, name = name._name;\n  } else {\n    id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n  }\n\n  for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        schedule(node, name, id, i, group, timing || inherit(node, id));\n      }\n    }\n  }\n\n  return new Transition(groups, this._parents, name, id);\n}\n","export function cubicIn(t) {\n  return t * t * t;\n}\n\nexport function cubicOut(t) {\n  return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n  return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n","import {selection} from \"d3-selection\";\nimport selection_interrupt from \"./interrupt.js\";\nimport selection_transition from \"./transition.js\";\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n","import interrupt from \"../interrupt.js\";\n\nexport default function(name) {\n  return this.each(function() {\n    interrupt(this, name);\n  });\n}\n","import interval from \"./interval.js\";\nimport {durationMinute, durationWeek} from \"./duration.js\";\n\nfunction weekday(i) {\n  return interval(function(date) {\n    date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n    date.setHours(0, 0, 0, 0);\n  }, function(date, step) {\n    date.setDate(date.getDate() + step * 7);\n  }, function(start, end) {\n    return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n  });\n}\n\nexport var sunday = weekday(0);\nexport var monday = weekday(1);\nexport var tuesday = weekday(2);\nexport var wednesday = weekday(3);\nexport var thursday = weekday(4);\nexport var friday = weekday(5);\nexport var saturday = weekday(6);\n\nexport var sundays = sunday.range;\nexport var mondays = monday.range;\nexport var tuesdays = tuesday.range;\nexport var wednesdays = wednesday.range;\nexport var thursdays = thursday.range;\nexport var fridays = friday.range;\nexport var saturdays = saturday.range;\n","export default function(a, b) {\n  return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending\";\n\nexport default function(compare) {\n  if (compare.length === 1) compare = ascendingComparator(compare);\n  return {\n    left: function(a, x, lo, hi) {\n      if (lo == null) lo = 0;\n      if (hi == null) hi = a.length;\n      while (lo < hi) {\n        var mid = lo + hi >>> 1;\n        if (compare(a[mid], x) < 0) lo = mid + 1;\n        else hi = mid;\n      }\n      return lo;\n    },\n    right: function(a, x, lo, hi) {\n      if (lo == null) lo = 0;\n      if (hi == null) hi = a.length;\n      while (lo < hi) {\n        var mid = lo + hi >>> 1;\n        if (compare(a[mid], x) > 0) hi = mid;\n        else lo = mid + 1;\n      }\n      return lo;\n    }\n  };\n}\n\nfunction ascendingComparator(f) {\n  return function(d, x) {\n    return ascending(f(d), x);\n  };\n}\n","import ascending from \"./ascending\";\nimport bisector from \"./bisector\";\n\nvar ascendingBisect = bisector(ascending);\nexport var bisectRight = ascendingBisect.right;\nexport var bisectLeft = ascendingBisect.left;\nexport default bisectRight;\n","import {pair} from \"./pairs\";\n\nexport default function(values0, values1, reduce) {\n  var n0 = values0.length,\n      n1 = values1.length,\n      values = new Array(n0 * n1),\n      i0,\n      i1,\n      i,\n      value0;\n\n  if (reduce == null) reduce = pair;\n\n  for (i0 = i = 0; i0 < n0; ++i0) {\n    for (value0 = values0[i0], i1 = 0; i1 < n1; ++i1, ++i) {\n      values[i] = reduce(value0, values1[i1]);\n    }\n  }\n\n  return values;\n}\n","export default function(x) {\n  return x === null ? NaN : +x;\n}\n","export default function(values, valueof) {\n  var n = values.length,\n      i = -1,\n      value,\n      min,\n      max;\n\n  if (valueof == null) {\n    while (++i < n) { // Find the first comparable value.\n      if ((value = values[i]) != null && value >= value) {\n        min = max = value;\n        while (++i < n) { // Compare the remaining values.\n          if ((value = values[i]) != null) {\n            if (min > value) min = value;\n            if (max < value) max = value;\n          }\n        }\n      }\n    }\n  }\n\n  else {\n    while (++i < n) { // Find the first comparable value.\n      if ((value = valueof(values[i], i, values)) != null && value >= value) {\n        min = max = value;\n        while (++i < n) { // Compare the remaining values.\n          if ((value = valueof(values[i], i, values)) != null) {\n            if (min > value) min = value;\n            if (max < value) max = value;\n          }\n        }\n      }\n    }\n  }\n\n  return [min, max];\n}\n","var array = Array.prototype;\n\nexport var slice = array.slice;\nexport var map = array.map;\n","export default function(start, stop, step) {\n  start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n  var i = -1,\n      n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n      range = new Array(n);\n\n  while (++i < n) {\n    range[i] = start + i * step;\n  }\n\n  return range;\n}\n","var e10 = Math.sqrt(50),\n    e5 = Math.sqrt(10),\n    e2 = Math.sqrt(2);\n\nexport default function(start, stop, count) {\n  var reverse,\n      i = -1,\n      n,\n      ticks,\n      step;\n\n  stop = +stop, start = +start, count = +count;\n  if (start === stop && count > 0) return [start];\n  if (reverse = stop < start) n = start, start = stop, stop = n;\n  if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n  if (step > 0) {\n    start = Math.ceil(start / step);\n    stop = Math.floor(stop / step);\n    ticks = new Array(n = Math.ceil(stop - start + 1));\n    while (++i < n) ticks[i] = (start + i) * step;\n  } else {\n    start = Math.floor(start * step);\n    stop = Math.ceil(stop * step);\n    ticks = new Array(n = Math.ceil(start - stop + 1));\n    while (++i < n) ticks[i] = (start - i) / step;\n  }\n\n  if (reverse) ticks.reverse();\n\n  return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n  var step = (stop - start) / Math.max(0, count),\n      power = Math.floor(Math.log(step) / Math.LN10),\n      error = step / Math.pow(10, power);\n  return power >= 0\n      ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n      : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\n\nexport function tickStep(start, stop, count) {\n  var step0 = Math.abs(stop - start) / Math.max(0, count),\n      step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n      error = step0 / step1;\n  if (error >= e10) step1 *= 10;\n  else if (error >= e5) step1 *= 5;\n  else if (error >= e2) step1 *= 2;\n  return stop < start ? -step1 : step1;\n}\n","export default function(values) {\n  return Math.ceil(Math.log(values.length) / Math.LN2) + 1;\n}\n","import number from \"./number\";\n\nexport default function(values, p, valueof) {\n  if (valueof == null) valueof = number;\n  if (!(n = values.length)) return;\n  if ((p = +p) <= 0 || n < 2) return +valueof(values[0], 0, values);\n  if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n  var n,\n      i = (n - 1) * p,\n      i0 = Math.floor(i),\n      value0 = +valueof(values[i0], i0, values),\n      value1 = +valueof(values[i0 + 1], i0 + 1, values);\n  return value0 + (value1 - value0) * (i - i0);\n}\n","export default function(values, valueof) {\n  var n = values.length,\n      i = -1,\n      value,\n      max;\n\n  if (valueof == null) {\n    while (++i < n) { // Find the first comparable value.\n      if ((value = values[i]) != null && value >= value) {\n        max = value;\n        while (++i < n) { // Compare the remaining values.\n          if ((value = values[i]) != null && value > max) {\n            max = value;\n          }\n        }\n      }\n    }\n  }\n\n  else {\n    while (++i < n) { // Find the first comparable value.\n      if ((value = valueof(values[i], i, values)) != null && value >= value) {\n        max = value;\n        while (++i < n) { // Compare the remaining values.\n          if ((value = valueof(values[i], i, values)) != null && value > max) {\n            max = value;\n          }\n        }\n      }\n    }\n  }\n\n  return max;\n}\n","export default function(arrays) {\n  var n = arrays.length,\n      m,\n      i = -1,\n      j = 0,\n      merged,\n      array;\n\n  while (++i < n) j += arrays[i].length;\n  merged = new Array(j);\n\n  while (--n >= 0) {\n    array = arrays[n];\n    m = array.length;\n    while (--m >= 0) {\n      merged[--j] = array[m];\n    }\n  }\n\n  return merged;\n}\n","export default function(values, valueof) {\n  var n = values.length,\n      i = -1,\n      value,\n      sum = 0;\n\n  if (valueof == null) {\n    while (++i < n) {\n      if (value = +values[i]) sum += value; // Note: zero and null are equivalent.\n    }\n  }\n\n  else {\n    while (++i < n) {\n      if (value = +valueof(values[i], i, values)) sum += value;\n    }\n  }\n\n  return sum;\n}\n","var noop = {value: function() {}};\n\nfunction dispatch() {\n  for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n    if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n    _[t] = [];\n  }\n  return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n  this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n  return typenames.trim().split(/^|\\s+/).map(function(t) {\n    var name = \"\", i = t.indexOf(\".\");\n    if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n    if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n    return {type: t, name: name};\n  });\n}\n\nDispatch.prototype = dispatch.prototype = {\n  constructor: Dispatch,\n  on: function(typename, callback) {\n    var _ = this._,\n        T = parseTypenames(typename + \"\", _),\n        t,\n        i = -1,\n        n = T.length;\n\n    // If no callback was specified, return the callback of the given type and name.\n    if (arguments.length < 2) {\n      while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n      return;\n    }\n\n    // If a type was specified, set the callback for the given type and name.\n    // Otherwise, if a null callback was specified, remove callbacks of the given name.\n    if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n    while (++i < n) {\n      if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n      else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n    }\n\n    return this;\n  },\n  copy: function() {\n    var copy = {}, _ = this._;\n    for (var t in _) copy[t] = _[t].slice();\n    return new Dispatch(copy);\n  },\n  call: function(type, that) {\n    if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n    if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n    for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n  },\n  apply: function(type, that, args) {\n    if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n    for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n  }\n};\n\nfunction get(type, name) {\n  for (var i = 0, n = type.length, c; i < n; ++i) {\n    if ((c = type[i]).name === name) {\n      return c.value;\n    }\n  }\n}\n\nfunction set(type, name, callback) {\n  for (var i = 0, n = type.length; i < n; ++i) {\n    if (type[i].name === name) {\n      type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n      break;\n    }\n  }\n  if (callback != null) type.push({name: name, value: callback});\n  return type;\n}\n\nexport default dispatch;\n","export default function(x) {\n  return function() {\n    return x;\n  };\n}\n","export function initRange(domain, range) {\n  switch (arguments.length) {\n    case 0: break;\n    case 1: this.range(domain); break;\n    default: this.range(range).domain(domain); break;\n  }\n  return this;\n}\n\nexport function initInterpolator(domain, interpolator) {\n  switch (arguments.length) {\n    case 0: break;\n    case 1: this.interpolator(domain); break;\n    default: this.interpolator(interpolator).domain(domain); break;\n  }\n  return this;\n}\n","var array = Array.prototype;\n\nexport var map = array.map;\nexport var slice = array.slice;\n","export default function(x) {\n  return +x;\n}\n","import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateNumber, interpolateRound} from \"d3-interpolate\";\nimport {map, slice} from \"./array\";\nimport constant from \"./constant\";\nimport number from \"./number\";\n\nvar unit = [0, 1];\n\nexport function identity(x) {\n  return x;\n}\n\nfunction normalize(a, b) {\n  return (b -= (a = +a))\n      ? function(x) { return (x - a) / b; }\n      : constant(isNaN(b) ? NaN : 0.5);\n}\n\nfunction clamper(domain) {\n  var a = domain[0], b = domain[domain.length - 1], t;\n  if (a > b) t = a, a = b, b = t;\n  return function(x) { return Math.max(a, Math.min(b, x)); };\n}\n\n// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\nfunction bimap(domain, range, interpolate) {\n  var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n  if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);\n  else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);\n  return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, interpolate) {\n  var j = Math.min(domain.length, range.length) - 1,\n      d = new Array(j),\n      r = new Array(j),\n      i = -1;\n\n  // Reverse descending domains.\n  if (domain[j] < domain[0]) {\n    domain = domain.slice().reverse();\n    range = range.slice().reverse();\n  }\n\n  while (++i < j) {\n    d[i] = normalize(domain[i], domain[i + 1]);\n    r[i] = interpolate(range[i], range[i + 1]);\n  }\n\n  return function(x) {\n    var i = bisect(domain, x, 1, j) - 1;\n    return r[i](d[i](x));\n  };\n}\n\nexport function copy(source, target) {\n  return target\n      .domain(source.domain())\n      .range(source.range())\n      .interpolate(source.interpolate())\n      .clamp(source.clamp())\n      .unknown(source.unknown());\n}\n\nexport function transformer() {\n  var domain = unit,\n      range = unit,\n      interpolate = interpolateValue,\n      transform,\n      untransform,\n      unknown,\n      clamp = identity,\n      piecewise,\n      output,\n      input;\n\n  function rescale() {\n    piecewise = Math.min(domain.length, range.length) > 2 ? polymap : bimap;\n    output = input = null;\n    return scale;\n  }\n\n  function scale(x) {\n    return isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));\n  }\n\n  scale.invert = function(y) {\n    return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y)));\n  };\n\n  scale.domain = function(_) {\n    return arguments.length ? (domain = map.call(_, number), clamp === identity || (clamp = clamper(domain)), rescale()) : domain.slice();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = slice.call(_), rescale()) : range.slice();\n  };\n\n  scale.rangeRound = function(_) {\n    return range = slice.call(_), interpolate = interpolateRound, rescale();\n  };\n\n  scale.clamp = function(_) {\n    return arguments.length ? (clamp = _ ? clamper(domain) : identity, scale) : clamp !== identity;\n  };\n\n  scale.interpolate = function(_) {\n    return arguments.length ? (interpolate = _, rescale()) : interpolate;\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  return function(t, u) {\n    transform = t, untransform = u;\n    return rescale();\n  };\n}\n\nexport default function continuous(transform, untransform) {\n  return transformer()(transform, untransform);\n}\n","export default function(x) {\n  return function() {\n    return x;\n  };\n}\n","import {ticks, tickIncrement} from \"d3-array\";\nimport continuous, {copy, identity} from \"./continuous\";\nimport {initRange} from \"./init\";\nimport tickFormat from \"./tickFormat\";\n\nexport function linearish(scale) {\n  var domain = scale.domain;\n\n  scale.ticks = function(count) {\n    var d = domain();\n    return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n  };\n\n  scale.tickFormat = function(count, specifier) {\n    var d = domain();\n    return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);\n  };\n\n  scale.nice = function(count) {\n    if (count == null) count = 10;\n\n    var d = domain(),\n        i0 = 0,\n        i1 = d.length - 1,\n        start = d[i0],\n        stop = d[i1],\n        step;\n\n    if (stop < start) {\n      step = start, start = stop, stop = step;\n      step = i0, i0 = i1, i1 = step;\n    }\n\n    step = tickIncrement(start, stop, count);\n\n    if (step > 0) {\n      start = Math.floor(start / step) * step;\n      stop = Math.ceil(stop / step) * step;\n      step = tickIncrement(start, stop, count);\n    } else if (step < 0) {\n      start = Math.ceil(start * step) / step;\n      stop = Math.floor(stop * step) / step;\n      step = tickIncrement(start, stop, count);\n    }\n\n    if (step > 0) {\n      d[i0] = Math.floor(start / step) * step;\n      d[i1] = Math.ceil(stop / step) * step;\n      domain(d);\n    } else if (step < 0) {\n      d[i0] = Math.ceil(start * step) / step;\n      d[i1] = Math.floor(stop * step) / step;\n      domain(d);\n    }\n\n    return scale;\n  };\n\n  return scale;\n}\n\nexport default function linear() {\n  var scale = continuous(identity, identity);\n\n  scale.copy = function() {\n    return copy(scale, linear());\n  };\n\n  initRange.apply(scale, arguments);\n\n  return linearish(scale);\n}\n","import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function(start, stop, count, specifier) {\n  var step = tickStep(start, stop, count),\n      precision;\n  specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n  switch (specifier.type) {\n    case \"s\": {\n      var value = Math.max(Math.abs(start), Math.abs(stop));\n      if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n      return formatPrefix(specifier, value);\n    }\n    case \"\":\n    case \"e\":\n    case \"g\":\n    case \"p\":\n    case \"r\": {\n      if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n      break;\n    }\n    case \"f\":\n    case \"%\": {\n      if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n      break;\n    }\n  }\n  return format(specifier);\n}\n"],"sourceRoot":""}