{"version":3,"sources":["webpack:///./node_modules/d3-selection/src/selectAll.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-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-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/defaultLocale.js","webpack:///./node_modules/d3-color/src/define.js","webpack:///./node_modules/d3-color/src/color.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-selection/src/creator.js","webpack:///./node_modules/d3/dist/package.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-chord/src/ribbon.js","webpack:///./node_modules/d3-contour/src/array.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/node_modules/d3-geo/src/identity.js","webpack:///./node_modules/d3/node_modules/d3-geo/src/stream.js","webpack:///./node_modules/d3/node_modules/d3-geo/src/adder.js","webpack:///./node_modules/d3/node_modules/d3-geo/src/math.js","webpack:///./node_modules/d3/node_modules/d3-geo/src/noop.js","webpack:///./node_modules/d3/node_modules/d3-geo/src/path/area.js","webpack:///./node_modules/d3/node_modules/d3-geo/src/path/bounds.js","webpack:///./node_modules/d3/node_modules/d3-geo/src/path/centroid.js","webpack:///./node_modules/d3/node_modules/d3-geo/src/path/context.js","webpack:///./node_modules/d3/node_modules/d3-geo/src/path/measure.js","webpack:///./node_modules/d3/node_modules/d3-geo/src/path/string.js","webpack:///./node_modules/d3/node_modules/d3-geo/src/path/index.js","webpack:///./node_modules/d3/node_modules/d3-geo/src/clip/rejoin.js","webpack:///./node_modules/d3/node_modules/d3-geo/src/pointEqual.js","webpack:///./node_modules/d3/node_modules/d3-geo/src/clip/rectangle.js","webpack:///./node_modules/d3/node_modules/d3-geo/src/clip/buffer.js","webpack:///./node_modules/d3/node_modules/d3-geo/src/clip/line.js","webpack:///./node_modules/d3/node_modules/d3-geo/src/transform.js","webpack:///./node_modules/d3/node_modules/d3-geo/src/projection/fit.js","webpack:///./node_modules/d3/node_modules/d3-geo/src/projection/identity.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-shape/src/constant.js","webpack:///./node_modules/d3-shape/src/math.js","webpack:///./node_modules/d3-shape/src/arc.js","webpack:///./node_modules/d3-shape/src/curve/linear.js","webpack:///./node_modules/d3-shape/src/point.js","webpack:///./node_modules/d3-shape/src/line.js","webpack:///./node_modules/d3-shape/src/descending.js","webpack:///./node_modules/d3-shape/src/identity.js","webpack:///./node_modules/d3-shape/src/pie.js","webpack:///./node_modules/d3-shape/src/curve/basis.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-selection/src/touch.js","webpack:///./node_modules/d3-selection/src/selector.js","webpack:///./node_modules/d3-selection/src/namespace.js","webpack:///./node_modules/d3-collection/src/map.js","webpack:///./node_modules/d3-collection/src/set.js","webpack:///./node_modules/d3-collection/src/entries.js","webpack:///./node_modules/d3-timer/src/timer.js","webpack:///./node_modules/d3-interpolate/src/string.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-format/src/index.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-format/src/formatPrefixAuto.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-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/min.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/ordinal.js","webpack:///./node_modules/d3-scale/src/band.js","webpack:///./node_modules/d3-interpolate/src/round.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","webpack:///./node_modules/d3-scale/src/pow.js","webpack:///./node_modules/d3-time/src/interval.js","webpack:///./node_modules/d3-time/src/year.js","webpack:///./node_modules/d3-time/src/month.js","webpack:///./node_modules/d3-time/src/week.js","webpack:///./node_modules/d3-time/src/duration.js","webpack:///./node_modules/d3-time/src/day.js","webpack:///./node_modules/d3-time/src/hour.js","webpack:///./node_modules/d3-time/src/minute.js","webpack:///./node_modules/d3-time/src/second.js","webpack:///./node_modules/d3-time/src/millisecond.js","webpack:///./node_modules/d3-time/src/utcWeek.js","webpack:///./node_modules/d3-time/src/utcDay.js","webpack:///./node_modules/d3-time/src/utcYear.js","webpack:///./node_modules/d3-time-format/src/locale.js","webpack:///./node_modules/d3-time-format/src/defaultLocale.js","webpack:///./node_modules/d3-scale/src/time.js","webpack:///./node_modules/d3-time/src/utcMonth.js","webpack:///./node_modules/d3-time/src/utcHour.js","webpack:///./node_modules/d3-time/src/utcMinute.js"],"names":["selector","Selection","document","querySelectorAll","documentElement","root","step","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","start","end","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","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","createEvent","initEvent","bubbles","cancelable","detail","dispatchConstant","dispatchFunction","groups","parents","_groups","_parents","selection","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","setTime","k","number","date","numberArray","isArray","valueOf","toString","object","ownerSVGElement","createSVGPoint","clientX","clientY","matrixTransform","getScreenCTM","inverse","rect","getBoundingClientRect","left","clientLeft","top","clientTop","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","locale","format","formatPrefix","definition","decimal","thousands","grouping","currency","minus","formatLocale","factory","extend","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","toLowerCase","parseInt","rgbn","Rgb","rgba","hsla","rgbConvert","rgb_formatHex","hex","rgb_formatRgb","round","h","s","Hsl","hslConvert","hsl2rgb","m2","define","copy","channels","assign","displayable","formatHsl","brighter","darker","styleRemove","removeProperty","styleConstant","priority","setProperty","styleFunction","styleValue","getPropertyValue","getComputedStyle","translateX","translateY","scale","center","offset","bandwidth","entering","__axis","axis","orient","tickArguments","tickValues","tickFormat","tickSizeInner","tickSizeOuter","tickPadding","transform","context","ticks","domain","identity","spacing","range","range0","range1","position","path","tick","tickExit","tickEnter","line","transition","isFinite","p","_","tickSize","axisBottom","axisLeft","source","current","creatorInherit","uri","createElement","createElementNS","creatorFixed","number1","e","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","w","tree","xm","ym","xp","yp","right","bottom","_root","leaf","_x","_y","defaultX","defaultY","quadtree","Quadtree","addAll","leaf_copy","treeProto","target","pop","cover","xz","yz","Infinity","z","visit","extent","find","radius","q","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","degrees","radians","atan","atan2","ceil","exp","log","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","Intersection","points","other","entry","segments","compareIntersection","startInside","interpolate","subject","clip","forEach","segment","p0","p1","link","isSubject","array","clipRectangle","visible","from","to","direction","corner","comparePoint","ca","cb","polygon","ring","x__","y__","v__","x_","y_","v_","first","clean","lines","activeStream","bufferStream","rejoin","concat","shift","clipStream","linePoint","winding","b0","b1","polygonInside","cleanInside","clipRejoin","ax","ay","t0","clipLine","transformer","methods","TransformStream","fit","fitBounds","clipExtent","translate","geoStream","fitExtent","sa","cache","cacheStream","tx","ty","sx","sy","alpha","kx","ky","postclip","invert","angle","reflectX","reflectY","fitSize","fitWidth","fitHeight","height","random","sourceRandomUniform","randomUniform","defaultSource","sourceRandomNormal","randomNormal","mu","sigma","sourceRandomLogNormal","randomLogNormal","normal","sourceRandomIrwinHall","randomIrwinHall","sum","sourceRandomBates","randomBates","irwinHall","sourceRandomExponential","randomExponential","lambda","halfPi","asin","arcInnerRadius","innerRadius","arcOuterRadius","outerRadius","arcStartAngle","startAngle","arcEndAngle","endAngle","arcPadAngle","padAngle","intersect","x10","y10","x32","y32","cornerTangents","r1","rc","lo","ox","oy","x11","y11","D","cx0","cy0","cx1","cy1","dx0","dy0","dx1","dy1","cx","cy","cornerRadius","padRadius","buffer","r0","a01","a11","a00","a10","da0","da1","ap","rp","rc0","rc1","oc","bx","by","kc","lc","Linear","areaStart","areaEnd","pointX","pointY","defined","curve","curveLinear","output","defined0","sortValues","descending","pie","arcs","pa","Basis","RedBlackTree","RedBlackNode","U","C","L","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","attachCircle","lArc","rArc","lSite","cSite","rSite","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","v00","v01","v11","v10","clipCells","polygons","triangles","s0","e1","s1","links","_found","vx","vy","SQRT2","Transform","applyX","applyY","location","invertX","invertY","rescaleX","rescaleY","touches","identifier","touch","none","prefix","namespaces","Map","f","set","has","get","clear","keys","entries","Set","proto","taskHead","taskTail","frame","timeout","interval","clockLast","clockNow","clockSkew","clock","performance","now","setFrame","requestAnimationFrame","setTimeout","clearNow","Timer","_call","_time","timer","delay","time","restart","wake","timerFlush","sleep","nap","poke","clearTimeout","clearInterval","setInterval","TypeError","stop","reA","reB","am","bm","bs","bi","lastIndex","one","formatDecimalParts","toExponential","coefficient","toLocaleString","replace","elapsed","emptyOn","emptyTween","id","timing","schedules","__transition","self","tween","state","duration","ease","init","schedule","cssNode","cssRoot","cssView","svgNode","active","rotate","skewX","scaleX","scaleY","interpolateTransform","parse","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","every","styleInterpolate","styleTween","textInterpolate","textTween","Transition","_name","newId","selection_prototype","children","inherit","id0","id1","styleNull","listener0","styleMaybeRemove","Promise","resolve","reject","cancel","interrupt","defaultTiming","prefixExponent","toFixed","formatDecimal","toPrecision","formatRounded","toUpperCase","prefixes","Number","substring","reverse","currencyPrefix","currencySuffix","numerals","formatNumerals","String","percent","nan","newFormat","formatTypes","test","suffix","formatType","maybeSuffix","valuePrefix","valueSuffix","valueNegative","out","formatTrim","charCodeAt","padding","hi","mid","ascendingBisect","bisector","bisectRight","valueof","e10","e5","e2","count","tickIncrement","power","LN10","error","tickStep","step0","step1","LN2","value0","arrays","merged","Dispatch","types","T","initRange","implicit","ordinal","unknown","band","ordinalRange","paddingInner","paddingOuter","rescale","sequence","rangeRound","unit","normalize","clamper","bimap","d0","d1","polymap","bisect","clamp","untransform","piecewise","input","interpolateValue","interpolateRound","u","continuous","linearish","precisionPrefix","precisionRound","precisionFixed","nice","transformPow","transformSqrt","transformSquare","powish","newInterval","floori","offseti","field","year","setMonth","setHours","setFullYear","getFullYear","month","setDate","getMonth","weekday","getDate","getDay","getTimezoneOffset","sunday","monday","tuesday","wednesday","thursday","friday","saturday","day","hour","getMilliseconds","getSeconds","getMinutes","getHours","minute","second","getUTCSeconds","millisecond","utcWeekday","setUTCDate","getUTCDate","getUTCDay","setUTCHours","utcSunday","utcMonday","utcTuesday","utcWednesday","utcThursday","utcFriday","utcSaturday","utcDay","utcYear","setUTCMonth","setUTCFullYear","getUTCFullYear","localDate","H","M","S","utcDate","UTC","newDate","pads","numberRe","percentRe","requoteRe","pad","requote","formatRe","formatLookup","parseWeekdayNumberSunday","parseWeekdayNumberMonday","parseWeekNumberSunday","parseWeekNumberISO","V","parseWeekNumberMonday","W","parseFullYear","parseYear","parseZone","Z","parseQuarter","parseMonthNumber","parseDayOfMonth","parseDayOfYear","parseHour24","parseMinutes","parseSeconds","parseMilliseconds","parseMicroseconds","parseLiteralPercent","parseUnixTimestamp","Q","parseUnixTimestampSeconds","formatDayOfMonth","formatHour24","formatHour12","formatDayOfYear","timeDay","timeYear","formatMilliseconds","formatMicroseconds","formatMonthNumber","formatMinutes","formatSeconds","formatWeekdayNumberMonday","formatWeekNumberSunday","timeSunday","dISO","timeThursday","formatWeekNumberISO","formatWeekdayNumberSunday","formatWeekNumberMonday","timeMonday","formatYear","formatYearISO","formatFullYear","formatFullYearISO","formatZone","formatUTCDayOfMonth","formatUTCHour24","getUTCHours","formatUTCHour12","formatUTCDayOfYear","formatUTCMilliseconds","getUTCMilliseconds","formatUTCMicroseconds","formatUTCMonthNumber","getUTCMonth","formatUTCMinutes","getUTCMinutes","formatUTCSeconds","formatUTCWeekdayNumberMonday","dow","formatUTCWeekNumberSunday","UTCdISO","formatUTCWeekNumberISO","formatUTCWeekdayNumberSunday","formatUTCWeekNumberMonday","formatUTCYear","formatUTCYearISO","formatUTCFullYear","formatUTCFullYearISO","formatUTCZone","formatLiteralPercent","formatUnixTimestamp","formatUnixTimestampSeconds","locale_dateTime","dateTime","locale_date","locale_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","X","utcFormat","utcParse","utcMonth","utcHour","setUTCMinutes","utcMinute","setUTCSeconds"],"mappings":"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","file":"1.df33faebed.mjs","sourcesContent":["import {Selection, root} from \"./selection/index\";\n\nexport default function(selector) {\n  return typeof selector === \"string\"\n      ? new Selection([document.querySelectorAll(selector)], [document.documentElement])\n      : new Selection([selector == null ? [] : selector], root);\n}\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 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 {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 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","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","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 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","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 {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","import {slice} from \"./array\";\nimport constant from \"./constant\";\nimport {cos, halfPi, sin} from \"./math\";\nimport {path} from \"d3-path\";\n\nfunction defaultSource(d) {\n  return d.source;\n}\n\nfunction defaultTarget(d) {\n  return d.target;\n}\n\nfunction defaultRadius(d) {\n  return d.radius;\n}\n\nfunction defaultStartAngle(d) {\n  return d.startAngle;\n}\n\nfunction defaultEndAngle(d) {\n  return d.endAngle;\n}\n\nexport default function() {\n  var source = defaultSource,\n      target = defaultTarget,\n      radius = defaultRadius,\n      startAngle = defaultStartAngle,\n      endAngle = defaultEndAngle,\n      context = null;\n\n  function ribbon() {\n    var buffer,\n        argv = slice.call(arguments),\n        s = source.apply(this, argv),\n        t = target.apply(this, argv),\n        sr = +radius.apply(this, (argv[0] = s, argv)),\n        sa0 = startAngle.apply(this, argv) - halfPi,\n        sa1 = endAngle.apply(this, argv) - halfPi,\n        sx0 = sr * cos(sa0),\n        sy0 = sr * sin(sa0),\n        tr = +radius.apply(this, (argv[0] = t, argv)),\n        ta0 = startAngle.apply(this, argv) - halfPi,\n        ta1 = endAngle.apply(this, argv) - halfPi;\n\n    if (!context) context = buffer = path();\n\n    context.moveTo(sx0, sy0);\n    context.arc(0, 0, sr, sa0, sa1);\n    if (sa0 !== ta0 || sa1 !== ta1) { // TODO sr !== tr?\n      context.quadraticCurveTo(0, 0, tr * cos(ta0), tr * sin(ta0));\n      context.arc(0, 0, tr, ta0, ta1);\n    }\n    context.quadraticCurveTo(0, 0, sx0, sy0);\n    context.closePath();\n\n    if (buffer) return context = null, buffer + \"\" || null;\n  }\n\n  ribbon.radius = function(_) {\n    return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), ribbon) : radius;\n  };\n\n  ribbon.startAngle = function(_) {\n    return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), ribbon) : startAngle;\n  };\n\n  ribbon.endAngle = function(_) {\n    return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), ribbon) : endAngle;\n  };\n\n  ribbon.source = function(_) {\n    return arguments.length ? (source = _, ribbon) : source;\n  };\n\n  ribbon.target = function(_) {\n    return arguments.length ? (target = _, ribbon) : target;\n  };\n\n  ribbon.context = function(_) {\n    return arguments.length ? ((context = _ == null ? null : _), ribbon) : context;\n  };\n\n  return ribbon;\n}\n","var array = Array.prototype;\n\nexport var slice = array.slice;\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 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 {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 {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","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","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 clipRectangle from \"../clip/rectangle.js\";\nimport identity from \"../identity.js\";\nimport {transformer} from \"../transform.js\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit.js\";\nimport {cos, degrees, radians, sin} from \"../math.js\";\n\nexport default function() {\n  var k = 1, tx = 0, ty = 0, sx = 1, sy = 1, // scale, translate and reflect\n      alpha = 0, ca, sa, // angle\n      x0 = null, y0, x1, y1, // clip extent\n      kx = 1, ky = 1,\n      transform = transformer({\n        point: function(x, y) {\n          var p = projection([x, y])\n          this.stream.point(p[0], p[1]);\n        }\n      }),\n      postclip = identity,\n      cache,\n      cacheStream;\n\n  function reset() {\n    kx = k * sx;\n    ky = k * sy;\n    cache = cacheStream = null;\n    return projection;\n  }\n\n  function projection (p) {\n    var x = p[0] * kx, y = p[1] * ky;\n    if (alpha) {\n      var t = y * ca - x * sa;\n      x = x * ca + y * sa;\n      y = t;\n    }    \n    return [x + tx, y + ty];\n  }\n  projection.invert = function(p) {\n    var x = p[0] - tx, y = p[1] - ty;\n    if (alpha) {\n      var t = y * ca + x * sa;\n      x = x * ca - y * sa;\n      y = t;\n    }\n    return [x / kx, y / ky];\n  };\n  projection.stream = function(stream) {\n    return cache && cacheStream === stream ? cache : cache = transform(postclip(cacheStream = stream));\n  };\n  projection.postclip = function(_) {\n    return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;\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  projection.scale = function(_) {\n    return arguments.length ? (k = +_, reset()) : k;\n  };\n  projection.translate = function(_) {\n    return arguments.length ? (tx = +_[0], ty = +_[1], reset()) : [tx, ty];\n  }\n  projection.angle = function(_) {\n    return arguments.length ? (alpha = _ % 360 * radians, sa = sin(alpha), ca = cos(alpha), reset()) : alpha * degrees;\n  };\n  projection.reflectX = function(_) {\n    return arguments.length ? (sx = _ ? -1 : 1, reset()) : sx < 0;\n  };\n  projection.reflectY = function(_) {\n    return arguments.length ? (sy = _ ? -1 : 1, reset()) : sy < 0;\n  };\n  projection.fitExtent = function(extent, object) {\n    return fitExtent(projection, extent, object);\n  };\n  projection.fitSize = function(size, object) {\n    return fitSize(projection, size, object);\n  };\n  projection.fitWidth = function(width, object) {\n    return fitWidth(projection, width, object);\n  };\n  projection.fitHeight = function(height, object) {\n    return fitHeight(projection, height, object);\n  };\n\n  return projection;\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","export default function(x) {\n  return function constant() {\n    return x;\n  };\n}\n","export var abs = Math.abs;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var max = Math.max;\nexport var min = Math.min;\nexport var sin = Math.sin;\nexport var sqrt = Math.sqrt;\n\nexport var epsilon = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var tau = 2 * pi;\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","import {path} from \"d3-path\";\nimport constant from \"./constant.js\";\nimport {abs, acos, asin, atan2, cos, epsilon, halfPi, max, min, pi, sin, sqrt, tau} from \"./math.js\";\n\nfunction arcInnerRadius(d) {\n  return d.innerRadius;\n}\n\nfunction arcOuterRadius(d) {\n  return d.outerRadius;\n}\n\nfunction arcStartAngle(d) {\n  return d.startAngle;\n}\n\nfunction arcEndAngle(d) {\n  return d.endAngle;\n}\n\nfunction arcPadAngle(d) {\n  return d && d.padAngle; // Note: optional!\n}\n\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n  var x10 = x1 - x0, y10 = y1 - y0,\n      x32 = x3 - x2, y32 = y3 - y2,\n      t = y32 * x10 - x32 * y10;\n  if (t * t < epsilon) return;\n  t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;\n  return [x0 + t * x10, y0 + t * y10];\n}\n\n// Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\nfunction cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n  var x01 = x0 - x1,\n      y01 = y0 - y1,\n      lo = (cw ? rc : -rc) / sqrt(x01 * x01 + y01 * y01),\n      ox = lo * y01,\n      oy = -lo * x01,\n      x11 = x0 + ox,\n      y11 = y0 + oy,\n      x10 = x1 + ox,\n      y10 = y1 + oy,\n      x00 = (x11 + x10) / 2,\n      y00 = (y11 + y10) / 2,\n      dx = x10 - x11,\n      dy = y10 - y11,\n      d2 = dx * dx + dy * dy,\n      r = r1 - rc,\n      D = x11 * y10 - x10 * y11,\n      d = (dy < 0 ? -1 : 1) * sqrt(max(0, r * r * d2 - D * D)),\n      cx0 = (D * dy - dx * d) / d2,\n      cy0 = (-D * dx - dy * d) / d2,\n      cx1 = (D * dy + dx * d) / d2,\n      cy1 = (-D * dx + dy * d) / d2,\n      dx0 = cx0 - x00,\n      dy0 = cy0 - y00,\n      dx1 = cx1 - x00,\n      dy1 = cy1 - y00;\n\n  // Pick the closer of the two intersection points.\n  // TODO Is there a faster way to determine which intersection to use?\n  if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n\n  return {\n    cx: cx0,\n    cy: cy0,\n    x01: -ox,\n    y01: -oy,\n    x11: cx0 * (r1 / r - 1),\n    y11: cy0 * (r1 / r - 1)\n  };\n}\n\nexport default function() {\n  var innerRadius = arcInnerRadius,\n      outerRadius = arcOuterRadius,\n      cornerRadius = constant(0),\n      padRadius = null,\n      startAngle = arcStartAngle,\n      endAngle = arcEndAngle,\n      padAngle = arcPadAngle,\n      context = null;\n\n  function arc() {\n    var buffer,\n        r,\n        r0 = +innerRadius.apply(this, arguments),\n        r1 = +outerRadius.apply(this, arguments),\n        a0 = startAngle.apply(this, arguments) - halfPi,\n        a1 = endAngle.apply(this, arguments) - halfPi,\n        da = abs(a1 - a0),\n        cw = a1 > a0;\n\n    if (!context) context = buffer = path();\n\n    // Ensure that the outer radius is always larger than the inner radius.\n    if (r1 < r0) r = r1, r1 = r0, r0 = r;\n\n    // Is it a point?\n    if (!(r1 > epsilon)) context.moveTo(0, 0);\n\n    // Or is it a circle or annulus?\n    else if (da > tau - epsilon) {\n      context.moveTo(r1 * cos(a0), r1 * sin(a0));\n      context.arc(0, 0, r1, a0, a1, !cw);\n      if (r0 > epsilon) {\n        context.moveTo(r0 * cos(a1), r0 * sin(a1));\n        context.arc(0, 0, r0, a1, a0, cw);\n      }\n    }\n\n    // Or is it a circular or annular sector?\n    else {\n      var a01 = a0,\n          a11 = a1,\n          a00 = a0,\n          a10 = a1,\n          da0 = da,\n          da1 = da,\n          ap = padAngle.apply(this, arguments) / 2,\n          rp = (ap > epsilon) && (padRadius ? +padRadius.apply(this, arguments) : sqrt(r0 * r0 + r1 * r1)),\n          rc = min(abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n          rc0 = rc,\n          rc1 = rc,\n          t0,\n          t1;\n\n      // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.\n      if (rp > epsilon) {\n        var p0 = asin(rp / r0 * sin(ap)),\n            p1 = asin(rp / r1 * sin(ap));\n        if ((da0 -= p0 * 2) > epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\n        else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n        if ((da1 -= p1 * 2) > epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\n        else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n      }\n\n      var x01 = r1 * cos(a01),\n          y01 = r1 * sin(a01),\n          x10 = r0 * cos(a10),\n          y10 = r0 * sin(a10);\n\n      // Apply rounded corners?\n      if (rc > epsilon) {\n        var x11 = r1 * cos(a11),\n            y11 = r1 * sin(a11),\n            x00 = r0 * cos(a00),\n            y00 = r0 * sin(a00),\n            oc;\n\n        // Restrict the corner radius according to the sector angle.\n        if (da < pi && (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10))) {\n          var ax = x01 - oc[0],\n              ay = y01 - oc[1],\n              bx = x11 - oc[0],\n              by = y11 - oc[1],\n              kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2),\n              lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n          rc0 = min(rc, (r0 - lc) / (kc - 1));\n          rc1 = min(rc, (r1 - lc) / (kc + 1));\n        }\n      }\n\n      // Is the sector collapsed to a line?\n      if (!(da1 > epsilon)) context.moveTo(x01, y01);\n\n      // Does the sector’s outer ring have rounded corners?\n      else if (rc1 > epsilon) {\n        t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n        t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n\n        context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n        // Have the corners merged?\n        if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n        // Otherwise, draw the two corners and the ring.\n        else {\n          context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n          context.arc(0, 0, r1, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n          context.arc(t1.cx, t1.cy, rc1, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n        }\n      }\n\n      // Or is the outer ring just a circular arc?\n      else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\n\n      // Is there no inner ring, and it’s a circular sector?\n      // Or perhaps it’s an annular sector collapsed due to padding?\n      if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10);\n\n      // Does the sector’s inner ring (or point) have rounded corners?\n      else if (rc0 > epsilon) {\n        t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n        t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n\n        context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n        // Have the corners merged?\n        if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n        // Otherwise, draw the two corners and the ring.\n        else {\n          context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n          context.arc(0, 0, r0, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n          context.arc(t1.cx, t1.cy, rc0, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n        }\n      }\n\n      // Or is the inner ring just a circular arc?\n      else context.arc(0, 0, r0, a10, a00, cw);\n    }\n\n    context.closePath();\n\n    if (buffer) return context = null, buffer + \"\" || null;\n  }\n\n  arc.centroid = function() {\n    var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n        a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2;\n    return [cos(a) * r, sin(a) * r];\n  };\n\n  arc.innerRadius = function(_) {\n    return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : innerRadius;\n  };\n\n  arc.outerRadius = function(_) {\n    return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : outerRadius;\n  };\n\n  arc.cornerRadius = function(_) {\n    return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : cornerRadius;\n  };\n\n  arc.padRadius = function(_) {\n    return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), arc) : padRadius;\n  };\n\n  arc.startAngle = function(_) {\n    return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : startAngle;\n  };\n\n  arc.endAngle = function(_) {\n    return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : endAngle;\n  };\n\n  arc.padAngle = function(_) {\n    return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : padAngle;\n  };\n\n  arc.context = function(_) {\n    return arguments.length ? ((context = _ == null ? null : _), arc) : context;\n  };\n\n  return arc;\n}\n","function Linear(context) {\n  this._context = context;\n}\n\nLinear.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; // proceed\n      default: this._context.lineTo(x, y); break;\n    }\n  }\n};\n\nexport default function(context) {\n  return new Linear(context);\n}\n","export function x(p) {\n  return p[0];\n}\n\nexport function y(p) {\n  return p[1];\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function() {\n  var x = pointX,\n      y = pointY,\n      defined = constant(true),\n      context = null,\n      curve = curveLinear,\n      output = null;\n\n  function line(data) {\n    var i,\n        n = data.length,\n        d,\n        defined0 = false,\n        buffer;\n\n    if (context == null) output = curve(buffer = path());\n\n    for (i = 0; i <= n; ++i) {\n      if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n        if (defined0 = !defined0) output.lineStart();\n        else output.lineEnd();\n      }\n      if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n    }\n\n    if (buffer) return output = null, buffer + \"\" || null;\n  }\n\n  line.x = function(_) {\n    return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n  };\n\n  line.y = function(_) {\n    return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n  };\n\n  line.defined = function(_) {\n    return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n  };\n\n  line.curve = function(_) {\n    return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n  };\n\n  line.context = function(_) {\n    return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n  };\n\n  return line;\n}\n","export default function(a, b) {\n  return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n}\n","export default function(d) {\n  return d;\n}\n","import constant from \"./constant.js\";\nimport descending from \"./descending.js\";\nimport identity from \"./identity.js\";\nimport {tau} from \"./math.js\";\n\nexport default function() {\n  var value = identity,\n      sortValues = descending,\n      sort = null,\n      startAngle = constant(0),\n      endAngle = constant(tau),\n      padAngle = constant(0);\n\n  function pie(data) {\n    var i,\n        n = data.length,\n        j,\n        k,\n        sum = 0,\n        index = new Array(n),\n        arcs = new Array(n),\n        a0 = +startAngle.apply(this, arguments),\n        da = Math.min(tau, Math.max(-tau, endAngle.apply(this, arguments) - a0)),\n        a1,\n        p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),\n        pa = p * (da < 0 ? -1 : 1),\n        v;\n\n    for (i = 0; i < n; ++i) {\n      if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {\n        sum += v;\n      }\n    }\n\n    // Optionally sort the arcs by previously-computed values or by data.\n    if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); });\n    else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); });\n\n    // Compute the arcs! They are stored in the original data's order.\n    for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {\n      j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {\n        data: data[j],\n        index: i,\n        value: v,\n        startAngle: a0,\n        endAngle: a1,\n        padAngle: p\n      };\n    }\n\n    return arcs;\n  }\n\n  pie.value = function(_) {\n    return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), pie) : value;\n  };\n\n  pie.sortValues = function(_) {\n    return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;\n  };\n\n  pie.sort = function(_) {\n    return arguments.length ? (sort = _, sortValues = null, pie) : sort;\n  };\n\n  pie.startAngle = function(_) {\n    return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : startAngle;\n  };\n\n  pie.endAngle = function(_) {\n    return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : endAngle;\n  };\n\n  pie.padAngle = function(_) {\n    return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : padAngle;\n  };\n\n  return pie;\n}\n","export function point(that, x, y) {\n  that._context.bezierCurveTo(\n    (2 * that._x0 + that._x1) / 3,\n    (2 * that._y0 + that._y1) / 3,\n    (that._x0 + 2 * that._x1) / 3,\n    (that._y0 + 2 * that._y1) / 3,\n    (that._x0 + 4 * that._x1 + x) / 6,\n    (that._y0 + 4 * that._y1 + y) / 6\n  );\n}\n\nexport function Basis(context) {\n  this._context = context;\n}\n\nBasis.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 =\n    this._y0 = this._y1 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 3: point(this, this._x1, this._y1); // proceed\n      case 2: this._context.lineTo(this._x1, this._y1); break;\n    }\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; break;\n      case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // proceed\n      default: point(this, x, y); break;\n    }\n    this._x0 = this._x1, this._x1 = x;\n    this._y0 = this._y1, this._y1 = y;\n  }\n};\n\nexport default function(context) {\n  return new Basis(context);\n}\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","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","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","export default function(map) {\n  var entries = [];\n  for (var key in map) entries.push({key: key, value: map[key]});\n  return entries;\n}\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","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","export {default as formatDefaultLocale, format, formatPrefix} from \"./defaultLocale.js\";\nexport {default as formatLocale} from \"./locale.js\";\nexport {default as formatSpecifier, FormatSpecifier} from \"./formatSpecifier.js\";\nexport {default as precisionFixed} from \"./precisionFixed.js\";\nexport {default as precisionPrefix} from \"./precisionPrefix.js\";\nexport {default as precisionRound} from \"./precisionRound.js\";\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 {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 {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(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      min;\n\n  if (valueof == null) {\n    while (++i < n) { // Find the first comparable value.\n      if ((value = values[i]) != null && value >= value) {\n        min = value;\n        while (++i < n) { // Compare the remaining values.\n          if ((value = values[i]) != null && min > value) {\n            min = 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 = value;\n        while (++i < n) { // Compare the remaining values.\n          if ((value = valueof(values[i], i, values)) != null && min > value) {\n            min = value;\n          }\n        }\n      }\n    }\n  }\n\n  return min;\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","import {map} from \"d3-collection\";\nimport {slice} from \"./array\";\nimport {initRange} from \"./init\";\n\nexport var implicit = {name: \"implicit\"};\n\nexport default function ordinal() {\n  var index = map(),\n      domain = [],\n      range = [],\n      unknown = implicit;\n\n  function scale(d) {\n    var key = d + \"\", i = index.get(key);\n    if (!i) {\n      if (unknown !== implicit) return unknown;\n      index.set(key, i = domain.push(d));\n    }\n    return range[(i - 1) % range.length];\n  }\n\n  scale.domain = function(_) {\n    if (!arguments.length) return domain.slice();\n    domain = [], index = map();\n    var i = -1, n = _.length, d, key;\n    while (++i < n) if (!index.has(key = (d = _[i]) + \"\")) index.set(key, domain.push(d));\n    return scale;\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = slice.call(_), scale) : range.slice();\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  scale.copy = function() {\n    return ordinal(domain, range).unknown(unknown);\n  };\n\n  initRange.apply(scale, arguments);\n\n  return scale;\n}\n","import {range as sequence} from \"d3-array\";\nimport {initRange} from \"./init\";\nimport ordinal from \"./ordinal\";\n\nexport default function band() {\n  var scale = ordinal().unknown(undefined),\n      domain = scale.domain,\n      ordinalRange = scale.range,\n      range = [0, 1],\n      step,\n      bandwidth,\n      round = false,\n      paddingInner = 0,\n      paddingOuter = 0,\n      align = 0.5;\n\n  delete scale.unknown;\n\n  function rescale() {\n    var n = domain().length,\n        reverse = range[1] < range[0],\n        start = range[reverse - 0],\n        stop = range[1 - reverse];\n    step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);\n    if (round) step = Math.floor(step);\n    start += (stop - start - step * (n - paddingInner)) * align;\n    bandwidth = step * (1 - paddingInner);\n    if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);\n    var values = sequence(n).map(function(i) { return start + step * i; });\n    return ordinalRange(reverse ? values.reverse() : values);\n  }\n\n  scale.domain = function(_) {\n    return arguments.length ? (domain(_), rescale()) : domain();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = [+_[0], +_[1]], rescale()) : range.slice();\n  };\n\n  scale.rangeRound = function(_) {\n    return range = [+_[0], +_[1]], round = true, rescale();\n  };\n\n  scale.bandwidth = function() {\n    return bandwidth;\n  };\n\n  scale.step = function() {\n    return step;\n  };\n\n  scale.round = function(_) {\n    return arguments.length ? (round = !!_, rescale()) : round;\n  };\n\n  scale.padding = function(_) {\n    return arguments.length ? (paddingInner = Math.min(1, paddingOuter = +_), rescale()) : paddingInner;\n  };\n\n  scale.paddingInner = function(_) {\n    return arguments.length ? (paddingInner = Math.min(1, _), rescale()) : paddingInner;\n  };\n\n  scale.paddingOuter = function(_) {\n    return arguments.length ? (paddingOuter = +_, rescale()) : paddingOuter;\n  };\n\n  scale.align = function(_) {\n    return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;\n  };\n\n  scale.copy = function() {\n    return band(domain(), range)\n        .round(round)\n        .paddingInner(paddingInner)\n        .paddingOuter(paddingOuter)\n        .align(align);\n  };\n\n  return initRange.apply(rescale(), arguments);\n}\n\nfunction pointish(scale) {\n  var copy = scale.copy;\n\n  scale.padding = scale.paddingOuter;\n  delete scale.paddingInner;\n  delete scale.paddingOuter;\n\n  scale.copy = function() {\n    return pointish(copy());\n  };\n\n  return scale;\n}\n\nexport function point() {\n  return pointish(band.apply(null, arguments).paddingInner(1));\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","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","import {linearish} from \"./linear\";\nimport {copy, identity, transformer} from \"./continuous\";\nimport {initRange} from \"./init\";\n\nfunction transformPow(exponent) {\n  return function(x) {\n    return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n  };\n}\n\nfunction transformSqrt(x) {\n  return x < 0 ? -Math.sqrt(-x) : Math.sqrt(x);\n}\n\nfunction transformSquare(x) {\n  return x < 0 ? -x * x : x * x;\n}\n\nexport function powish(transform) {\n  var scale = transform(identity, identity),\n      exponent = 1;\n\n  function rescale() {\n    return exponent === 1 ? transform(identity, identity)\n        : exponent === 0.5 ? transform(transformSqrt, transformSquare)\n        : transform(transformPow(exponent), transformPow(1 / exponent));\n  }\n\n  scale.exponent = function(_) {\n    return arguments.length ? (exponent = +_, rescale()) : exponent;\n  };\n\n  return linearish(scale);\n}\n\nexport default function pow() {\n  var scale = powish(transformer());\n\n  scale.copy = function() {\n    return copy(scale, pow()).exponent(scale.exponent());\n  };\n\n  initRange.apply(scale, arguments);\n\n  return scale;\n}\n\nexport function sqrt() {\n  return pow.apply(null, arguments).exponent(0.5);\n}\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\";\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","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\";\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 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\";\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","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 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 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 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","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 {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","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 {\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 {bisector, tickStep} from \"d3-array\";\nimport {timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond} from \"d3-time\";\nimport {timeFormat} from \"d3-time-format\";\nimport {map} from \"./array\";\nimport continuous, {copy, identity} from \"./continuous\";\nimport {initRange} from \"./init\";\nimport nice from \"./nice\";\n\nvar durationSecond = 1000,\n    durationMinute = durationSecond * 60,\n    durationHour = durationMinute * 60,\n    durationDay = durationHour * 24,\n    durationWeek = durationDay * 7,\n    durationMonth = durationDay * 30,\n    durationYear = durationDay * 365;\n\nfunction date(t) {\n  return new Date(t);\n}\n\nfunction number(t) {\n  return t instanceof Date ? +t : +new Date(+t);\n}\n\nexport function calendar(year, month, week, day, hour, minute, second, millisecond, format) {\n  var scale = continuous(identity, identity),\n      invert = scale.invert,\n      domain = scale.domain;\n\n  var formatMillisecond = format(\".%L\"),\n      formatSecond = format(\":%S\"),\n      formatMinute = format(\"%I:%M\"),\n      formatHour = format(\"%I %p\"),\n      formatDay = format(\"%a %d\"),\n      formatWeek = format(\"%b %d\"),\n      formatMonth = format(\"%B\"),\n      formatYear = format(\"%Y\");\n\n  var tickIntervals = [\n    [second,  1,      durationSecond],\n    [second,  5,  5 * durationSecond],\n    [second, 15, 15 * durationSecond],\n    [second, 30, 30 * durationSecond],\n    [minute,  1,      durationMinute],\n    [minute,  5,  5 * durationMinute],\n    [minute, 15, 15 * durationMinute],\n    [minute, 30, 30 * durationMinute],\n    [  hour,  1,      durationHour  ],\n    [  hour,  3,  3 * durationHour  ],\n    [  hour,  6,  6 * durationHour  ],\n    [  hour, 12, 12 * durationHour  ],\n    [   day,  1,      durationDay   ],\n    [   day,  2,  2 * durationDay   ],\n    [  week,  1,      durationWeek  ],\n    [ month,  1,      durationMonth ],\n    [ month,  3,  3 * durationMonth ],\n    [  year,  1,      durationYear  ]\n  ];\n\n  function tickFormat(date) {\n    return (second(date) < date ? formatMillisecond\n        : minute(date) < date ? formatSecond\n        : hour(date) < date ? formatMinute\n        : day(date) < date ? formatHour\n        : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n        : year(date) < date ? formatMonth\n        : formatYear)(date);\n  }\n\n  function tickInterval(interval, start, stop, step) {\n    if (interval == null) interval = 10;\n\n    // If a desired tick count is specified, pick a reasonable tick interval\n    // based on the extent of the domain and a rough estimate of tick size.\n    // Otherwise, assume interval is already a time interval and use it.\n    if (typeof interval === \"number\") {\n      var target = Math.abs(stop - start) / interval,\n          i = bisector(function(i) { return i[2]; }).right(tickIntervals, target);\n      if (i === tickIntervals.length) {\n        step = tickStep(start / durationYear, stop / durationYear, interval);\n        interval = year;\n      } else if (i) {\n        i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n        step = i[1];\n        interval = i[0];\n      } else {\n        step = Math.max(tickStep(start, stop, interval), 1);\n        interval = millisecond;\n      }\n    }\n\n    return step == null ? interval : interval.every(step);\n  }\n\n  scale.invert = function(y) {\n    return new Date(invert(y));\n  };\n\n  scale.domain = function(_) {\n    return arguments.length ? domain(map.call(_, number)) : domain().map(date);\n  };\n\n  scale.ticks = function(interval, step) {\n    var d = domain(),\n        t0 = d[0],\n        t1 = d[d.length - 1],\n        r = t1 < t0,\n        t;\n    if (r) t = t0, t0 = t1, t1 = t;\n    t = tickInterval(interval, t0, t1, step);\n    t = t ? t.range(t0, t1 + 1) : []; // inclusive stop\n    return r ? t.reverse() : t;\n  };\n\n  scale.tickFormat = function(count, specifier) {\n    return specifier == null ? tickFormat : format(specifier);\n  };\n\n  scale.nice = function(interval, step) {\n    var d = domain();\n    return (interval = tickInterval(interval, d[0], d[d.length - 1], step))\n        ? domain(nice(d, interval))\n        : scale;\n  };\n\n  scale.copy = function() {\n    return copy(scale, calendar(year, month, week, day, hour, minute, second, millisecond, format));\n  };\n\n  return scale;\n}\n\nexport default function() {\n  return initRange.apply(calendar(timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]), arguments);\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","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 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"],"sourceRoot":""}