Skip to content

Instantly share code, notes, and snippets.

@bimannie
Created May 17, 2017 09:45
Show Gist options
  • Save bimannie/c538ea8d9eecfcd46fe5df4d6953100b to your computer and use it in GitHub Desktop.
Save bimannie/c538ea8d9eecfcd46fe5df4d6953100b to your computer and use it in GitHub Desktop.
contour-hack
license: mit
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
typeof define === 'function' && define.amd ? define(['exports'], factory) :
(factory((global.d3 = global.d3 || {})));
}(this, (function (exports) { 'use strict';
var version = "4.7.3";
var ascending = function(a, b) {
return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
};
var bisector = function(compare) {
if (compare.length === 1) compare = ascendingComparator(compare);
return {
left: function(a, x, lo, hi) {
if (lo == null) lo = 0;
if (hi == null) hi = a.length;
while (lo < hi) {
var mid = lo + hi >>> 1;
if (compare(a[mid], x) < 0) lo = mid + 1;
else hi = mid;
}
return lo;
},
right: function(a, x, lo, hi) {
if (lo == null) lo = 0;
if (hi == null) hi = a.length;
while (lo < hi) {
var mid = lo + hi >>> 1;
if (compare(a[mid], x) > 0) hi = mid;
else lo = mid + 1;
}
return lo;
}
};
};
function ascendingComparator(f) {
return function(d, x) {
return ascending(f(d), x);
};
}
var ascendingBisect = bisector(ascending);
var bisectRight = ascendingBisect.right;
var bisectLeft = ascendingBisect.left;
var pairs = function(array, f) {
if (f == null) f = pair;
var i = 0, n = array.length - 1, p = array[0], pairs = new Array(n < 0 ? 0 : n);
while (i < n) pairs[i] = f(p, p = array[++i]);
return pairs;
};
function pair(a, b) {
return [a, b];
}
var cross = function(a, b, f) {
var na = a.length, nb = b.length, c = new Array(na * nb), ia, ib, ic, va;
if (f == null) f = pair;
for (ia = ic = 0; ia < na; ++ia) for (va = a[ia], ib = 0; ib < nb; ++ib, ++ic) c[ic] = f(va, b[ib]);
return c;
};
var descending = function(a, b) {
return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;
};
var number = function(x) {
return x === null ? NaN : +x;
};
var variance = function(array, f) {
var n = array.length,
m = 0,
a,
d,
s = 0,
i = -1,
j = 0;
if (f == null) {
while (++i < n) {
if (!isNaN(a = number(array[i]))) {
d = a - m;
m += d / ++j;
s += d * (a - m);
}
}
}
else {
while (++i < n) {
if (!isNaN(a = number(f(array[i], i, array)))) {
d = a - m;
m += d / ++j;
s += d * (a - m);
}
}
}
if (j > 1) return s / (j - 1);
};
var deviation = function(array, f) {
var v = variance(array, f);
return v ? Math.sqrt(v) : v;
};
var extent = function(array, f) {
var i = -1,
n = array.length,
a,
b,
c;
if (f == null) {
while (++i < n) if ((b = array[i]) != null && b >= b) { a = c = b; break; }
while (++i < n) if ((b = array[i]) != null) {
if (a > b) a = b;
if (c < b) c = b;
}
}
else {
while (++i < n) if ((b = f(array[i], i, array)) != null && b >= b) { a = c = b; break; }
while (++i < n) if ((b = f(array[i], i, array)) != null) {
if (a > b) a = b;
if (c < b) c = b;
}
}
return [a, c];
};
var array = Array.prototype;
var slice = array.slice;
var map = array.map;
var constant = function(x) {
return function() {
return x;
};
};
var identity = function(x) {
return x;
};
var range = function(start, stop, step) {
start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;
var i = -1,
n = Math.max(0, Math.ceil((stop - start) / step)) | 0,
range = new Array(n);
while (++i < n) {
range[i] = start + i * step;
}
return range;
};
var e10 = Math.sqrt(50);
var e5 = Math.sqrt(10);
var e2 = Math.sqrt(2);
var ticks = function(start, stop, count) {
var step = tickStep(start, stop, count);
return range(
Math.ceil(start / step) * step,
Math.floor(stop / step) * step + step / 2, // inclusive
step
);
};
function tickStep(start, stop, count) {
var step0 = Math.abs(stop - start) / Math.max(0, count),
step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),
error = step0 / step1;
if (error >= e10) step1 *= 10;
else if (error >= e5) step1 *= 5;
else if (error >= e2) step1 *= 2;
return stop < start ? -step1 : step1;
}
var thresholdSturges = function(values) {
return Math.ceil(Math.log(values.length) / Math.LN2) + 1;
};
var histogram = function() {
var value = identity,
domain = extent,
threshold = thresholdSturges;
function histogram(data) {
var i,
n = data.length,
x,
values = new Array(n);
for (i = 0; i < n; ++i) {
values[i] = value(data[i], i, data);
}
var xz = domain(values),
x0 = xz[0],
x1 = xz[1],
tz = threshold(values, x0, x1);
// Convert number of thresholds into uniform thresholds.
if (!Array.isArray(tz)) tz = ticks(x0, x1, tz);
// Remove any thresholds outside the domain.
var m = tz.length;
while (tz[0] <= x0) tz.shift(), --m;
while (tz[m - 1] >= x1) tz.pop(), --m;
var bins = new Array(m + 1),
bin;
// Initialize bins.
for (i = 0; i <= m; ++i) {
bin = bins[i] = [];
bin.x0 = i > 0 ? tz[i - 1] : x0;
bin.x1 = i < m ? tz[i] : x1;
}
// Assign data to bins by value, ignoring any outside the domain.
for (i = 0; i < n; ++i) {
x = values[i];
if (x0 <= x && x <= x1) {
bins[bisectRight(tz, x, 0, m)].push(data[i]);
}
}
return bins;
}
histogram.value = function(_) {
return arguments.length ? (value = typeof _ === "function" ? _ : constant(_), histogram) : value;
};
histogram.domain = function(_) {
return arguments.length ? (domain = typeof _ === "function" ? _ : constant([_[0], _[1]]), histogram) : domain;
};
histogram.thresholds = function(_) {
return arguments.length ? (threshold = typeof _ === "function" ? _ : Array.isArray(_) ? constant(slice.call(_)) : constant(_), histogram) : threshold;
};
return histogram;
};
var threshold = function(array, p, f) {
if (f == null) f = number;
if (!(n = array.length)) return;
if ((p = +p) <= 0 || n < 2) return +f(array[0], 0, array);
if (p >= 1) return +f(array[n - 1], n - 1, array);
var n,
h = (n - 1) * p,
i = Math.floor(h),
a = +f(array[i], i, array),
b = +f(array[i + 1], i + 1, array);
return a + (b - a) * (h - i);
};
var freedmanDiaconis = function(values, min, max) {
values = map.call(values, number).sort(ascending);
return Math.ceil((max - min) / (2 * (threshold(values, 0.75) - threshold(values, 0.25)) * Math.pow(values.length, -1 / 3)));
};
var scott = function(values, min, max) {
return Math.ceil((max - min) / (3.5 * deviation(values) * Math.pow(values.length, -1 / 3)));
};
var max = function(array, f) {
var i = -1,
n = array.length,
a,
b;
if (f == null) {
while (++i < n) if ((b = array[i]) != null && b >= b) { a = b; break; }
while (++i < n) if ((b = array[i]) != null && b > a) a = b;
}
else {
while (++i < n) if ((b = f(array[i], i, array)) != null && b >= b) { a = b; break; }
while (++i < n) if ((b = f(array[i], i, array)) != null && b > a) a = b;
}
return a;
};
var mean = function(array, f) {
var s = 0,
n = array.length,
a,
i = -1,
j = n;
if (f == null) {
while (++i < n) if (!isNaN(a = number(array[i]))) s += a; else --j;
}
else {
while (++i < n) if (!isNaN(a = number(f(array[i], i, array)))) s += a; else --j;
}
if (j) return s / j;
};
var median = function(array, f) {
var numbers = [],
n = array.length,
a,
i = -1;
if (f == null) {
while (++i < n) if (!isNaN(a = number(array[i]))) numbers.push(a);
}
else {
while (++i < n) if (!isNaN(a = number(f(array[i], i, array)))) numbers.push(a);
}
return threshold(numbers.sort(ascending), 0.5);
};
var merge = function(arrays) {
var n = arrays.length,
m,
i = -1,
j = 0,
merged,
array;
while (++i < n) j += arrays[i].length;
merged = new Array(j);
while (--n >= 0) {
array = arrays[n];
m = array.length;
while (--m >= 0) {
merged[--j] = array[m];
}
}
return merged;
};
var min = function(array, f) {
var i = -1,
n = array.length,
a,
b;
if (f == null) {
while (++i < n) if ((b = array[i]) != null && b >= b) { a = b; break; }
while (++i < n) if ((b = array[i]) != null && a > b) a = b;
}
else {
while (++i < n) if ((b = f(array[i], i, array)) != null && b >= b) { a = b; break; }
while (++i < n) if ((b = f(array[i], i, array)) != null && a > b) a = b;
}
return a;
};
var permute = function(array, indexes) {
var i = indexes.length, permutes = new Array(i);
while (i--) permutes[i] = array[indexes[i]];
return permutes;
};
var scan = function(array, compare) {
if (!(n = array.length)) return;
var i = 0,
n,
j = 0,
xi,
xj = array[j];
if (!compare) compare = ascending;
while (++i < n) if (compare(xi = array[i], xj) < 0 || compare(xj, xj) !== 0) xj = xi, j = i;
if (compare(xj, xj) === 0) return j;
};
var shuffle = function(array, i0, i1) {
var m = (i1 == null ? array.length : i1) - (i0 = i0 == null ? 0 : +i0),
t,
i;
while (m) {
i = Math.random() * m-- | 0;
t = array[m + i0];
array[m + i0] = array[i + i0];
array[i + i0] = t;
}
return array;
};
var sum = function(array, f) {
var s = 0,
n = array.length,
a,
i = -1;
if (f == null) {
while (++i < n) if (a = +array[i]) s += a; // Note: zero and null are equivalent.
}
else {
while (++i < n) if (a = +f(array[i], i, array)) s += a;
}
return s;
};
var transpose = function(matrix) {
if (!(n = matrix.length)) return [];
for (var i = -1, m = min(matrix, length), transpose = new Array(m); ++i < m;) {
for (var j = -1, n, row = transpose[i] = new Array(n); ++j < n;) {
row[j] = matrix[j][i];
}
}
return transpose;
};
function length(d) {
return d.length;
}
var zip = function() {
return transpose(arguments);
};
var slice$1 = Array.prototype.slice;
var identity$1 = function(x) {
return x;
};
var top = 1;
var right = 2;
var bottom = 3;
var left = 4;
var epsilon = 1e-6;
function translateX(x) {
return "translate(" + x + ",0)";
}
function translateY(y) {
return "translate(0," + y + ")";
}
function center(scale) {
var offset = scale.bandwidth() / 2;
if (scale.round()) offset = Math.round(offset);
return function(d) {
return scale(d) + offset;
};
}
function entering() {
return !this.__axis;
}
function axis(orient, scale) {
var tickArguments = [],
tickValues = null,
tickFormat = null,
tickSizeInner = 6,
tickSizeOuter = 6,
tickPadding = 3,
k = orient === top || orient === left ? -1 : 1,
x, y = orient === left || orient === right ? (x = "x", "y") : (x = "y", "x"),
transform = orient === top || orient === bottom ? translateX : translateY;
function axis(context) {
var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,
format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity$1) : tickFormat,
spacing = Math.max(tickSizeInner, 0) + tickPadding,
range = scale.range(),
range0 = range[0] + 0.5,
range1 = range[range.length - 1] + 0.5,
position = (scale.bandwidth ? center : identity$1)(scale.copy()),
selection = context.selection ? context.selection() : context,
path = selection.selectAll(".domain").data([null]),
tick = selection.selectAll(".tick").data(values, scale).order(),
tickExit = tick.exit(),
tickEnter = tick.enter().append("g").attr("class", "tick"),
line = tick.select("line"),
text = tick.select("text");
path = path.merge(path.enter().insert("path", ".tick")
.attr("class", "domain")
.attr("stroke", "#000"));
tick = tick.merge(tickEnter);
line = line.merge(tickEnter.append("line")
.attr("stroke", "#000")
.attr(x + "2", k * tickSizeInner)
.attr(y + "1", 0.5)
.attr(y + "2", 0.5));
text = text.merge(tickEnter.append("text")
.attr("fill", "#000")
.attr(x, k * spacing)
.attr(y, 0.5)
.attr("dy", orient === top ? "0em" : orient === bottom ? "0.71em" : "0.32em"));
if (context !== selection) {
path = path.transition(context);
tick = tick.transition(context);
line = line.transition(context);
text = text.transition(context);
tickExit = tickExit.transition(context)
.attr("opacity", epsilon)
.attr("transform", function(d) { return isFinite(d = position(d)) ? transform(d) : this.getAttribute("transform"); });
tickEnter
.attr("opacity", epsilon)
.attr("transform", function(d) { var p = this.parentNode.__axis; return transform(p && isFinite(p = p(d)) ? p : position(d)); });
}
tickExit.remove();
path
.attr("d", orient === left || orient == right
? "M" + k * tickSizeOuter + "," + range0 + "H0.5V" + range1 + "H" + k * tickSizeOuter
: "M" + range0 + "," + k * tickSizeOuter + "V0.5H" + range1 + "V" + k * tickSizeOuter);
tick
.attr("opacity", 1)
.attr("transform", function(d) { return transform(position(d)); });
line
.attr(x + "2", k * tickSizeInner);
text
.attr(x, k * spacing)
.text(format);
selection.filter(entering)
.attr("fill", "none")
.attr("font-size", 10)
.attr("font-family", "sans-serif")
.attr("text-anchor", orient === right ? "start" : orient === left ? "end" : "middle");
selection
.each(function() { this.__axis = position; });
}
axis.scale = function(_) {
return arguments.length ? (scale = _, axis) : scale;
};
axis.ticks = function() {
return tickArguments = slice$1.call(arguments), axis;
};
axis.tickArguments = function(_) {
return arguments.length ? (tickArguments = _ == null ? [] : slice$1.call(_), axis) : tickArguments.slice();
};
axis.tickValues = function(_) {
return arguments.length ? (tickValues = _ == null ? null : slice$1.call(_), axis) : tickValues && tickValues.slice();
};
axis.tickFormat = function(_) {
return arguments.length ? (tickFormat = _, axis) : tickFormat;
};
axis.tickSize = function(_) {
return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;
};
axis.tickSizeInner = function(_) {
return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;
};
axis.tickSizeOuter = function(_) {
return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;
};
axis.tickPadding = function(_) {
return arguments.length ? (tickPadding = +_, axis) : tickPadding;
};
return axis;
}
function axisTop(scale) {
return axis(top, scale);
}
function axisRight(scale) {
return axis(right, scale);
}
function axisBottom(scale) {
return axis(bottom, scale);
}
function axisLeft(scale) {
return axis(left, scale);
}
var noop = {value: function() {}};
function dispatch() {
for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {
if (!(t = arguments[i] + "") || (t in _)) throw new Error("illegal type: " + t);
_[t] = [];
}
return new Dispatch(_);
}
function Dispatch(_) {
this._ = _;
}
function parseTypenames(typenames, types) {
return typenames.trim().split(/^|\s+/).map(function(t) {
var name = "", i = t.indexOf(".");
if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);
if (t && !types.hasOwnProperty(t)) throw new Error("unknown type: " + t);
return {type: t, name: name};
});
}
Dispatch.prototype = dispatch.prototype = {
constructor: Dispatch,
on: function(typename, callback) {
var _ = this._,
T = parseTypenames(typename + "", _),
t,
i = -1,
n = T.length;
// If no callback was specified, return the callback of the given type and name.
if (arguments.length < 2) {
while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;
return;
}
// If a type was specified, set the callback for the given type and name.
// Otherwise, if a null callback was specified, remove callbacks of the given name.
if (callback != null && typeof callback !== "function") throw new Error("invalid callback: " + callback);
while (++i < n) {
if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);
else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);
}
return this;
},
copy: function() {
var copy = {}, _ = this._;
for (var t in _) copy[t] = _[t].slice();
return new Dispatch(copy);
},
call: function(type, that) {
if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];
if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type);
for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);
},
apply: function(type, that, args) {
if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type);
for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);
}
};
function get(type, name) {
for (var i = 0, n = type.length, c; i < n; ++i) {
if ((c = type[i]).name === name) {
return c.value;
}
}
}
function set(type, name, callback) {
for (var i = 0, n = type.length; i < n; ++i) {
if (type[i].name === name) {
type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));
break;
}
}
if (callback != null) type.push({name: name, value: callback});
return type;
}
var xhtml = "http://www.w3.org/1999/xhtml";
var namespaces = {
svg: "http://www.w3.org/2000/svg",
xhtml: xhtml,
xlink: "http://www.w3.org/1999/xlink",
xml: "http://www.w3.org/XML/1998/namespace",
xmlns: "http://www.w3.org/2000/xmlns/"
};
var namespace = function(name) {
var prefix = name += "", i = prefix.indexOf(":");
if (i >= 0 && (prefix = name.slice(0, i)) !== "xmlns") name = name.slice(i + 1);
return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name;
};
function creatorInherit(name) {
return function() {
var document = this.ownerDocument,
uri = this.namespaceURI;
return uri === xhtml && document.documentElement.namespaceURI === xhtml
? document.createElement(name)
: document.createElementNS(uri, name);
};
}
function creatorFixed(fullname) {
return function() {
return this.ownerDocument.createElementNS(fullname.space, fullname.local);
};
}
var creator = function(name) {
var fullname = namespace(name);
return (fullname.local
? creatorFixed
: creatorInherit)(fullname);
};
var nextId = 0;
function local$1() {
return new Local;
}
function Local() {
this._ = "@" + (++nextId).toString(36);
}
Local.prototype = local$1.prototype = {
constructor: Local,
get: function(node) {
var id = this._;
while (!(id in node)) if (!(node = node.parentNode)) return;
return node[id];
},
set: function(node, value) {
return node[this._] = value;
},
remove: function(node) {
return this._ in node && delete node[this._];
},
toString: function() {
return this._;
}
};
var matcher = function(selector) {
return function() {
return this.matches(selector);
};
};
if (typeof document !== "undefined") {
var element = document.documentElement;
if (!element.matches) {
var vendorMatches = element.webkitMatchesSelector
|| element.msMatchesSelector
|| element.mozMatchesSelector
|| element.oMatchesSelector;
matcher = function(selector) {
return function() {
return vendorMatches.call(this, selector);
};
};
}
}
var matcher$1 = matcher;
var filterEvents = {};
exports.event = null;
if (typeof document !== "undefined") {
var element$1 = document.documentElement;
if (!("onmouseenter" in element$1)) {
filterEvents = {mouseenter: "mouseover", mouseleave: "mouseout"};
}
}
function filterContextListener(listener, index, group) {
listener = contextListener(listener, index, group);
return function(event) {
var related = event.relatedTarget;
if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) {
listener.call(this, event);
}
};
}
function contextListener(listener, index, group) {
return function(event1) {
var event0 = exports.event; // Events can be reentrant (e.g., focus).
exports.event = event1;
try {
listener.call(this, this.__data__, index, group);
} finally {
exports.event = event0;
}
};
}
function parseTypenames$1(typenames) {
return typenames.trim().split(/^|\s+/).map(function(t) {
var name = "", i = t.indexOf(".");
if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);
return {type: t, name: name};
});
}
function onRemove(typename) {
return function() {
var on = this.__on;
if (!on) return;
for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {
if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {
this.removeEventListener(o.type, o.listener, o.capture);
} else {
on[++i] = o;
}
}
if (++i) on.length = i;
else delete this.__on;
};
}
function onAdd(typename, value, capture) {
var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener;
return function(d, i, group) {
var on = this.__on, o, listener = wrap(value, i, group);
if (on) for (var j = 0, m = on.length; j < m; ++j) {
if ((o = on[j]).type === typename.type && o.name === typename.name) {
this.removeEventListener(o.type, o.listener, o.capture);
this.addEventListener(o.type, o.listener = listener, o.capture = capture);
o.value = value;
return;
}
}
this.addEventListener(typename.type, listener, capture);
o = {type: typename.type, name: typename.name, value: value, listener: listener, capture: capture};
if (!on) this.__on = [o];
else on.push(o);
};
}
var selection_on = function(typename, value, capture) {
var typenames = parseTypenames$1(typename + ""), i, n = typenames.length, t;
if (arguments.length < 2) {
var on = this.node().__on;
if (on) for (var j = 0, m = on.length, o; j < m; ++j) {
for (i = 0, o = on[j]; i < n; ++i) {
if ((t = typenames[i]).type === o.type && t.name === o.name) {
return o.value;
}
}
}
return;
}
on = value ? onAdd : onRemove;
if (capture == null) capture = false;
for (i = 0; i < n; ++i) this.each(on(typenames[i], value, capture));
return this;
};
function customEvent(event1, listener, that, args) {
var event0 = exports.event;
event1.sourceEvent = exports.event;
exports.event = event1;
try {
return listener.apply(that, args);
} finally {
exports.event = event0;
}
}
var sourceEvent = function() {
var current = exports.event, source;
while (source = current.sourceEvent) current = source;
return current;
};
var point = function(node, event) {
var svg = node.ownerSVGElement || node;
if (svg.createSVGPoint) {
var point = svg.createSVGPoint();
point.x = event.clientX, point.y = event.clientY;
point = point.matrixTransform(node.getScreenCTM().inverse());
return [point.x, point.y];
}
var rect = node.getBoundingClientRect();
return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];
};
var mouse = function(node) {
var event = sourceEvent();
if (event.changedTouches) event = event.changedTouches[0];
return point(node, event);
};
function none() {}
var selector = function(selector) {
return selector == null ? none : function() {
return this.querySelector(selector);
};
};
var selection_select = function(select) {
if (typeof select !== "function") select = selector(select);
for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {
for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {
if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {
if ("__data__" in node) subnode.__data__ = node.__data__;
subgroup[i] = subnode;
}
}
}
return new Selection(subgroups, this._parents);
};
function empty$1() {
return [];
}
var selectorAll = function(selector) {
return selector == null ? empty$1 : function() {
return this.querySelectorAll(selector);
};
};
var selection_selectAll = function(select) {
if (typeof select !== "function") select = selectorAll(select);
for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {
for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {
if (node = group[i]) {
subgroups.push(select.call(node, node.__data__, i, group));
parents.push(node);
}
}
}
return new Selection(subgroups, parents);
};
var selection_filter = function(match) {
if (typeof match !== "function") match = matcher$1(match);
for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {
for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {
if ((node = group[i]) && match.call(node, node.__data__, i, group)) {
subgroup.push(node);
}
}
}
return new Selection(subgroups, this._parents);
};
var sparse = function(update) {
return new Array(update.length);
};
var selection_enter = function() {
return new Selection(this._enter || this._groups.map(sparse), this._parents);
};
function EnterNode(parent, datum) {
this.ownerDocument = parent.ownerDocument;
this.namespaceURI = parent.namespaceURI;
this._next = null;
this._parent = parent;
this.__data__ = datum;
}
EnterNode.prototype = {
constructor: EnterNode,
appendChild: function(child) { return this._parent.insertBefore(child, this._next); },
insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },
querySelector: function(selector) { return this._parent.querySelector(selector); },
querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }
};
var constant$1 = function(x) {
return function() {
return x;
};
};
var keyPrefix = "$"; // Protect against keys like “__proto__”.
function bindIndex(parent, group, enter, update, exit, data) {
var i = 0,
node,
groupLength = group.length,
dataLength = data.length;
// Put any non-null nodes that fit into update.
// Put any null nodes into enter.
// Put any remaining data into enter.
for (; i < dataLength; ++i) {
if (node = group[i]) {
node.__data__ = data[i];
update[i] = node;
} else {
enter[i] = new EnterNode(parent, data[i]);
}
}
// Put any non-null nodes that don’t fit into exit.
for (; i < groupLength; ++i) {
if (node = group[i]) {
exit[i] = node;
}
}
}
function bindKey(parent, group, enter, update, exit, data, key) {
var i,
node,
nodeByKeyValue = {},
groupLength = group.length,
dataLength = data.length,
keyValues = new Array(groupLength),
keyValue;
// Compute the key for each node.
// If multiple nodes have the same key, the duplicates are added to exit.
for (i = 0; i < groupLength; ++i) {
if (node = group[i]) {
keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group);
if (keyValue in nodeByKeyValue) {
exit[i] = node;
} else {
nodeByKeyValue[keyValue] = node;
}
}
}
// Compute the key for each datum.
// If there a node associated with this key, join and add it to update.
// If there is not (or the key is a duplicate), add it to enter.
for (i = 0; i < dataLength; ++i) {
keyValue = keyPrefix + key.call(parent, data[i], i, data);
if (node = nodeByKeyValue[keyValue]) {
update[i] = node;
node.__data__ = data[i];
nodeByKeyValue[keyValue] = null;
} else {
enter[i] = new EnterNode(parent, data[i]);
}
}
// Add any remaining nodes that were not bound to data to exit.
for (i = 0; i < groupLength; ++i) {
if ((node = group[i]) && (nodeByKeyValue[keyValues[i]] === node)) {
exit[i] = node;
}
}
}
var selection_data = function(value, key) {
if (!value) {
data = new Array(this.size()), j = -1;
this.each(function(d) { data[++j] = d; });
return data;
}
var bind = key ? bindKey : bindIndex,
parents = this._parents,
groups = this._groups;
if (typeof value !== "function") value = constant$1(value);
for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {
var parent = parents[j],
group = groups[j],
groupLength = group.length,
data = value.call(parent, parent && parent.__data__, j, parents),
dataLength = data.length,
enterGroup = enter[j] = new Array(dataLength),
updateGroup = update[j] = new Array(dataLength),
exitGroup = exit[j] = new Array(groupLength);
bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);
// Now connect the enter nodes to their following update node, such that
// appendChild can insert the materialized enter node before this node,
// rather than at the end of the parent node.
for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {
if (previous = enterGroup[i0]) {
if (i0 >= i1) i1 = i0 + 1;
while (!(next = updateGroup[i1]) && ++i1 < dataLength);
previous._next = next || null;
}
}
}
update = new Selection(update, parents);
update._enter = enter;
update._exit = exit;
return update;
};
var selection_exit = function() {
return new Selection(this._exit || this._groups.map(sparse), this._parents);
};
var selection_merge = function(selection) {
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) {
for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {
if (node = group0[i] || group1[i]) {
merge[i] = node;
}
}
}
for (; j < m0; ++j) {
merges[j] = groups0[j];
}
return new Selection(merges, this._parents);
};
var selection_order = function() {
for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {
for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {
if (node = group[i]) {
if (next && next !== node.nextSibling) next.parentNode.insertBefore(node, next);
next = node;
}
}
}
return this;
};
var selection_sort = function(compare) {
if (!compare) compare = ascending$1;
function compareNode(a, b) {
return a && b ? compare(a.__data__, b.__data__) : !a - !b;
}
for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {
for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {
if (node = group[i]) {
sortgroup[i] = node;
}
}
sortgroup.sort(compareNode);
}
return new Selection(sortgroups, this._parents).order();
};
function ascending$1(a, b) {
return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
}
var selection_call = function() {
var callback = arguments[0];
arguments[0] = this;
callback.apply(null, arguments);
return this;
};
var selection_nodes = function() {
var nodes = new Array(this.size()), i = -1;
this.each(function() { nodes[++i] = this; });
return nodes;
};
var selection_node = function() {
for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {
for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {
var node = group[i];
if (node) return node;
}
}
return null;
};
var selection_size = function() {
var size = 0;
this.each(function() { ++size; });
return size;
};
var selection_empty = function() {
return !this.node();
};
var selection_each = function(callback) {
for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {
for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {
if (node = group[i]) callback.call(node, node.__data__, i, group);
}
}
return this;
};
function attrRemove(name) {
return function() {
this.removeAttribute(name);
};
}
function attrRemoveNS(fullname) {
return function() {
this.removeAttributeNS(fullname.space, fullname.local);
};
}
function attrConstant(name, value) {
return function() {
this.setAttribute(name, value);
};
}
function attrConstantNS(fullname, value) {
return function() {
this.setAttributeNS(fullname.space, fullname.local, value);
};
}
function attrFunction(name, value) {
return function() {
var v = value.apply(this, arguments);
if (v == null) this.removeAttribute(name);
else this.setAttribute(name, v);
};
}
function attrFunctionNS(fullname, value) {
return function() {
var v = value.apply(this, arguments);
if (v == null) this.removeAttributeNS(fullname.space, fullname.local);
else this.setAttributeNS(fullname.space, fullname.local, v);
};
}
var selection_attr = function(name, value) {
var fullname = namespace(name);
if (arguments.length < 2) {
var node = this.node();
return fullname.local
? node.getAttributeNS(fullname.space, fullname.local)
: node.getAttribute(fullname);
}
return this.each((value == null
? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === "function"
? (fullname.local ? attrFunctionNS : attrFunction)
: (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));
};
var window$1 = function(node) {
return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node
|| (node.document && node) // node is a Window
|| node.defaultView; // node is a Document
};
function styleRemove(name) {
return function() {
this.style.removeProperty(name);
};
}
function styleConstant(name, value, priority) {
return function() {
this.style.setProperty(name, value, priority);
};
}
function styleFunction(name, value, priority) {
return function() {
var v = value.apply(this, arguments);
if (v == null) this.style.removeProperty(name);
else this.style.setProperty(name, v, priority);
};
}
var selection_style = function(name, value, priority) {
var node;
return arguments.length > 1
? this.each((value == null
? styleRemove : typeof value === "function"
? styleFunction
: styleConstant)(name, value, priority == null ? "" : priority))
: window$1(node = this.node())
.getComputedStyle(node, null)
.getPropertyValue(name);
};
function propertyRemove(name) {
return function() {
delete this[name];
};
}
function propertyConstant(name, value) {
return function() {
this[name] = value;
};
}
function propertyFunction(name, value) {
return function() {
var v = value.apply(this, arguments);
if (v == null) delete this[name];
else this[name] = v;
};
}
var selection_property = function(name, value) {
return arguments.length > 1
? this.each((value == null
? propertyRemove : typeof value === "function"
? propertyFunction
: propertyConstant)(name, value))
: this.node()[name];
};
function classArray(string) {
return string.trim().split(/^|\s+/);
}
function classList(node) {
return node.classList || new ClassList(node);
}
function ClassList(node) {
this._node = node;
this._names = classArray(node.getAttribute("class") || "");
}
ClassList.prototype = {
add: function(name) {
var i = this._names.indexOf(name);
if (i < 0) {
this._names.push(name);
this._node.setAttribute("class", this._names.join(" "));
}
},
remove: function(name) {
var i = this._names.indexOf(name);
if (i >= 0) {
this._names.splice(i, 1);
this._node.setAttribute("class", this._names.join(" "));
}
},
contains: function(name) {
return this._names.indexOf(name) >= 0;
}
};
function classedAdd(node, names) {
var list = classList(node), i = -1, n = names.length;
while (++i < n) list.add(names[i]);
}
function classedRemove(node, names) {
var list = classList(node), i = -1, n = names.length;
while (++i < n) list.remove(names[i]);
}
function classedTrue(names) {
return function() {
classedAdd(this, names);
};
}
function classedFalse(names) {
return function() {
classedRemove(this, names);
};
}
function classedFunction(names, value) {
return function() {
(value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);
};
}
var selection_classed = function(name, value) {
var names = classArray(name + "");
if (arguments.length < 2) {
var list = classList(this.node()), i = -1, n = names.length;
while (++i < n) if (!list.contains(names[i])) return false;
return true;
}
return this.each((typeof value === "function"
? classedFunction : value
? classedTrue
: classedFalse)(names, value));
};
function textRemove() {
this.textContent = "";
}
function textConstant(value) {
return function() {
this.textContent = value;
};
}
function textFunction(value) {
return function() {
var v = value.apply(this, arguments);
this.textContent = v == null ? "" : v;
};
}
var selection_text = function(value) {
return arguments.length
? this.each(value == null
? textRemove : (typeof value === "function"
? textFunction
: textConstant)(value))
: this.node().textContent;
};
function htmlRemove() {
this.innerHTML = "";
}
function htmlConstant(value) {
return function() {
this.innerHTML = value;
};
}
function htmlFunction(value) {
return function() {
var v = value.apply(this, arguments);
this.innerHTML = v == null ? "" : v;
};
}
var selection_html = function(value) {
return arguments.length
? this.each(value == null
? htmlRemove : (typeof value === "function"
? htmlFunction
: htmlConstant)(value))
: this.node().innerHTML;
};
function raise() {
if (this.nextSibling) this.parentNode.appendChild(this);
}
var selection_raise = function() {
return this.each(raise);
};
function lower() {
if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);
}
var selection_lower = function() {
return this.each(lower);
};
var selection_append = function(name) {
var create = typeof name === "function" ? name : creator(name);
return this.select(function() {
return this.appendChild(create.apply(this, arguments));
});
};
function constantNull() {
return null;
}
var selection_insert = function(name, before) {
var create = typeof name === "function" ? name : creator(name),
select = before == null ? constantNull : typeof before === "function" ? before : selector(before);
return this.select(function() {
return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);
});
};
function remove() {
var parent = this.parentNode;
if (parent) parent.removeChild(this);
}
var selection_remove = function() {
return this.each(remove);
};
var selection_datum = function(value) {
return arguments.length
? this.property("__data__", value)
: this.node().__data__;
};
function dispatchEvent(node, type, params) {
var window = window$1(node),
event = window.CustomEvent;
if (event) {
event = new event(type, params);
} else {
event = window.document.createEvent("Event");
if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;
else event.initEvent(type, false, false);
}
node.dispatchEvent(event);
}
function dispatchConstant(type, params) {
return function() {
return dispatchEvent(this, type, params);
};
}
function dispatchFunction(type, params) {
return function() {
return dispatchEvent(this, type, params.apply(this, arguments));
};
}
var selection_dispatch = function(type, params) {
return this.each((typeof params === "function"
? dispatchFunction
: dispatchConstant)(type, params));
};
var root = [null];
function Selection(groups, parents) {
this._groups = groups;
this._parents = parents;
}
function selection() {
return new Selection([[document.documentElement]], root);
}
Selection.prototype = selection.prototype = {
constructor: Selection,
select: selection_select,
selectAll: selection_selectAll,
filter: selection_filter,
data: selection_data,
enter: selection_enter,
exit: selection_exit,
merge: selection_merge,
order: selection_order,
sort: selection_sort,
call: selection_call,
nodes: selection_nodes,
node: selection_node,
size: selection_size,
empty: selection_empty,
each: selection_each,
attr: selection_attr,
style: selection_style,
property: selection_property,
classed: selection_classed,
text: selection_text,
html: selection_html,
raise: selection_raise,
lower: selection_lower,
append: selection_append,
insert: selection_insert,
remove: selection_remove,
datum: selection_datum,
on: selection_on,
dispatch: selection_dispatch
};
var select = function(selector) {
return typeof selector === "string"
? new Selection([[document.querySelector(selector)]], [document.documentElement])
: new Selection([[selector]], root);
};
var selectAll = function(selector) {
return typeof selector === "string"
? new Selection([document.querySelectorAll(selector)], [document.documentElement])
: new Selection([selector == null ? [] : selector], root);
};
var touch = function(node, touches, identifier) {
if (arguments.length < 3) identifier = touches, touches = sourceEvent().changedTouches;
for (var i = 0, n = touches ? touches.length : 0, touch; i < n; ++i) {
if ((touch = touches[i]).identifier === identifier) {
return point(node, touch);
}
}
return null;
};
var touches = function(node, touches) {
if (touches == null) touches = sourceEvent().touches;
for (var i = 0, n = touches ? touches.length : 0, points = new Array(n); i < n; ++i) {
points[i] = point(node, touches[i]);
}
return points;
};
function nopropagation() {
exports.event.stopImmediatePropagation();
}
var noevent = function() {
exports.event.preventDefault();
exports.event.stopImmediatePropagation();
};
var dragDisable = function(view) {
var root = view.document.documentElement,
selection$$1 = select(view).on("dragstart.drag", noevent, true);
if ("onselectstart" in root) {
selection$$1.on("selectstart.drag", noevent, true);
} else {
root.__noselect = root.style.MozUserSelect;
root.style.MozUserSelect = "none";
}
};
function yesdrag(view, noclick) {
var root = view.document.documentElement,
selection$$1 = select(view).on("dragstart.drag", null);
if (noclick) {
selection$$1.on("click.drag", noevent, true);
setTimeout(function() { selection$$1.on("click.drag", null); }, 0);
}
if ("onselectstart" in root) {
selection$$1.on("selectstart.drag", null);
} else {
root.style.MozUserSelect = root.__noselect;
delete root.__noselect;
}
}
var constant$2 = function(x) {
return function() {
return x;
};
};
function DragEvent(target, type, subject, id, active, x, y, dx, dy, dispatch) {
this.target = target;
this.type = type;
this.subject = subject;
this.identifier = id;
this.active = active;
this.x = x;
this.y = y;
this.dx = dx;
this.dy = dy;
this._ = dispatch;
}
DragEvent.prototype.on = function() {
var value = this._.on.apply(this._, arguments);
return value === this._ ? this : value;
};
// Ignore right-click, since that should open the context menu.
function defaultFilter$1() {
return !exports.event.button;
}
function defaultContainer() {
return this.parentNode;
}
function defaultSubject(d) {
return d == null ? {x: exports.event.x, y: exports.event.y} : d;
}
var drag = function() {
var filter = defaultFilter$1,
container = defaultContainer,
subject = defaultSubject,
gestures = {},
listeners = dispatch("start", "drag", "end"),
active = 0,
mousemoving,
touchending;
function drag(selection$$1) {
selection$$1
.on("mousedown.drag", mousedowned)
.on("touchstart.drag", touchstarted)
.on("touchmove.drag", touchmoved)
.on("touchend.drag touchcancel.drag", touchended)
.style("-webkit-tap-highlight-color", "rgba(0,0,0,0)");
}
function mousedowned() {
if (touchending || !filter.apply(this, arguments)) return;
var gesture = beforestart("mouse", container.apply(this, arguments), mouse, this, arguments);
if (!gesture) return;
select(exports.event.view).on("mousemove.drag", mousemoved, true).on("mouseup.drag", mouseupped, true);
dragDisable(exports.event.view);
nopropagation();
mousemoving = false;
gesture("start");
}
function mousemoved() {
noevent();
mousemoving = true;
gestures.mouse("drag");
}
function mouseupped() {
select(exports.event.view).on("mousemove.drag mouseup.drag", null);
yesdrag(exports.event.view, mousemoving);
noevent();
gestures.mouse("end");
}
function touchstarted() {
if (!filter.apply(this, arguments)) return;
var touches$$1 = exports.event.changedTouches,
c = container.apply(this, arguments),
n = touches$$1.length, i, gesture;
for (i = 0; i < n; ++i) {
if (gesture = beforestart(touches$$1[i].identifier, c, touch, this, arguments)) {
nopropagation();
gesture("start");
}
}
}
function touchmoved() {
var touches$$1 = exports.event.changedTouches,
n = touches$$1.length, i, gesture;
for (i = 0; i < n; ++i) {
if (gesture = gestures[touches$$1[i].identifier]) {
noevent();
gesture("drag");
}
}
}
function touchended() {
var touches$$1 = exports.event.changedTouches,
n = touches$$1.length, i, gesture;
if (touchending) clearTimeout(touchending);
touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!
for (i = 0; i < n; ++i) {
if (gesture = gestures[touches$$1[i].identifier]) {
nopropagation();
gesture("end");
}
}
}
function beforestart(id, container, point, that, args) {
var p = point(container, id), s, dx, dy,
sublisteners = listeners.copy();
if (!customEvent(new DragEvent(drag, "beforestart", s, id, active, p[0], p[1], 0, 0, sublisteners), function() {
if ((exports.event.subject = s = subject.apply(that, args)) == null) return false;
dx = s.x - p[0] || 0;
dy = s.y - p[1] || 0;
return true;
})) return;
return function gesture(type) {
var p0 = p, n;
switch (type) {
case "start": gestures[id] = gesture, n = active++; break;
case "end": delete gestures[id], --active; // nobreak
case "drag": p = point(container, id), n = active; break;
}
customEvent(new DragEvent(drag, type, s, id, n, p[0] + dx, p[1] + dy, p[0] - p0[0], p[1] - p0[1], sublisteners), sublisteners.apply, sublisteners, [type, that, args]);
};
}
drag.filter = function(_) {
return arguments.length ? (filter = typeof _ === "function" ? _ : constant$2(!!_), drag) : filter;
};
drag.container = function(_) {
return arguments.length ? (container = typeof _ === "function" ? _ : constant$2(_), drag) : container;
};
drag.subject = function(_) {
return arguments.length ? (subject = typeof _ === "function" ? _ : constant$2(_), drag) : subject;
};
drag.on = function() {
var value = listeners.on.apply(listeners, arguments);
return value === listeners ? drag : value;
};
return drag;
};
var define = function(constructor, factory, prototype) {
constructor.prototype = factory.prototype = prototype;
prototype.constructor = constructor;
};
function extend(parent, definition) {
var prototype = Object.create(parent.prototype);
for (var key in definition) prototype[key] = definition[key];
return prototype;
}
function Color() {}
var darker = 0.7;
var brighter = 1 / darker;
var reI = "\\s*([+-]?\\d+)\\s*";
var reN = "\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*";
var reP = "\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*";
var reHex3 = /^#([0-9a-f]{3})$/;
var reHex6 = /^#([0-9a-f]{6})$/;
var reRgbInteger = new RegExp("^rgb\\(" + [reI, reI, reI] + "\\)$");
var reRgbPercent = new RegExp("^rgb\\(" + [reP, reP, reP] + "\\)$");
var reRgbaInteger = new RegExp("^rgba\\(" + [reI, reI, reI, reN] + "\\)$");
var reRgbaPercent = new RegExp("^rgba\\(" + [reP, reP, reP, reN] + "\\)$");
var reHslPercent = new RegExp("^hsl\\(" + [reN, reP, reP] + "\\)$");
var reHslaPercent = new RegExp("^hsla\\(" + [reN, reP, reP, reN] + "\\)$");
var named = {
aliceblue: 0xf0f8ff,
antiquewhite: 0xfaebd7,
aqua: 0x00ffff,
aquamarine: 0x7fffd4,
azure: 0xf0ffff,
beige: 0xf5f5dc,
bisque: 0xffe4c4,
black: 0x000000,
blanchedalmond: 0xffebcd,
blue: 0x0000ff,
blueviolet: 0x8a2be2,
brown: 0xa52a2a,
burlywood: 0xdeb887,
cadetblue: 0x5f9ea0,
chartreuse: 0x7fff00,
chocolate: 0xd2691e,
coral: 0xff7f50,
cornflowerblue: 0x6495ed,
cornsilk: 0xfff8dc,
crimson: 0xdc143c,
cyan: 0x00ffff,
darkblue: 0x00008b,
darkcyan: 0x008b8b,
darkgoldenrod: 0xb8860b,
darkgray: 0xa9a9a9,
darkgreen: 0x006400,
darkgrey: 0xa9a9a9,
darkkhaki: 0xbdb76b,
darkmagenta: 0x8b008b,
darkolivegreen: 0x556b2f,
darkorange: 0xff8c00,
darkorchid: 0x9932cc,
darkred: 0x8b0000,
darksalmon: 0xe9967a,
darkseagreen: 0x8fbc8f,
darkslateblue: 0x483d8b,
darkslategray: 0x2f4f4f,
darkslategrey: 0x2f4f4f,
darkturquoise: 0x00ced1,
darkviolet: 0x9400d3,
deeppink: 0xff1493,
deepskyblue: 0x00bfff,
dimgray: 0x696969,
dimgrey: 0x696969,
dodgerblue: 0x1e90ff,
firebrick: 0xb22222,
floralwhite: 0xfffaf0,
forestgreen: 0x228b22,
fuchsia: 0xff00ff,
gainsboro: 0xdcdcdc,
ghostwhite: 0xf8f8ff,
gold: 0xffd700,
goldenrod: 0xdaa520,
gray: 0x808080,
green: 0x008000,
greenyellow: 0xadff2f,
grey: 0x808080,
honeydew: 0xf0fff0,
hotpink: 0xff69b4,
indianred: 0xcd5c5c,
indigo: 0x4b0082,
ivory: 0xfffff0,
khaki: 0xf0e68c,
lavender: 0xe6e6fa,
lavenderblush: 0xfff0f5,
lawngreen: 0x7cfc00,
lemonchiffon: 0xfffacd,
lightblue: 0xadd8e6,
lightcoral: 0xf08080,
lightcyan: 0xe0ffff,
lightgoldenrodyellow: 0xfafad2,
lightgray: 0xd3d3d3,
lightgreen: 0x90ee90,
lightgrey: 0xd3d3d3,
lightpink: 0xffb6c1,
lightsalmon: 0xffa07a,
lightseagreen: 0x20b2aa,
lightskyblue: 0x87cefa,
lightslategray: 0x778899,
lightslategrey: 0x778899,
lightsteelblue: 0xb0c4de,
lightyellow: 0xffffe0,
lime: 0x00ff00,
limegreen: 0x32cd32,
linen: 0xfaf0e6,
magenta: 0xff00ff,
maroon: 0x800000,
mediumaquamarine: 0x66cdaa,
mediumblue: 0x0000cd,
mediumorchid: 0xba55d3,
mediumpurple: 0x9370db,
mediumseagreen: 0x3cb371,
mediumslateblue: 0x7b68ee,
mediumspringgreen: 0x00fa9a,
mediumturquoise: 0x48d1cc,
mediumvioletred: 0xc71585,
midnightblue: 0x191970,
mintcream: 0xf5fffa,
mistyrose: 0xffe4e1,
moccasin: 0xffe4b5,
navajowhite: 0xffdead,
navy: 0x000080,
oldlace: 0xfdf5e6,
olive: 0x808000,
olivedrab: 0x6b8e23,
orange: 0xffa500,
orangered: 0xff4500,
orchid: 0xda70d6,
palegoldenrod: 0xeee8aa,
palegreen: 0x98fb98,
paleturquoise: 0xafeeee,
palevioletred: 0xdb7093,
papayawhip: 0xffefd5,
peachpuff: 0xffdab9,
peru: 0xcd853f,
pink: 0xffc0cb,
plum: 0xdda0dd,
powderblue: 0xb0e0e6,
purple: 0x800080,
rebeccapurple: 0x663399,
red: 0xff0000,
rosybrown: 0xbc8f8f,
royalblue: 0x4169e1,
saddlebrown: 0x8b4513,
salmon: 0xfa8072,
sandybrown: 0xf4a460,
seagreen: 0x2e8b57,
seashell: 0xfff5ee,
sienna: 0xa0522d,
silver: 0xc0c0c0,
skyblue: 0x87ceeb,
slateblue: 0x6a5acd,
slategray: 0x708090,
slategrey: 0x708090,
snow: 0xfffafa,
springgreen: 0x00ff7f,
steelblue: 0x4682b4,
tan: 0xd2b48c,
teal: 0x008080,
thistle: 0xd8bfd8,
tomato: 0xff6347,
turquoise: 0x40e0d0,
violet: 0xee82ee,
wheat: 0xf5deb3,
white: 0xffffff,
whitesmoke: 0xf5f5f5,
yellow: 0xffff00,
yellowgreen: 0x9acd32
};
define(Color, color, {
displayable: function() {
return this.rgb().displayable();
},
toString: function() {
return this.rgb() + "";
}
});
function color(format) {
var m;
format = (format + "").trim().toLowerCase();
return (m = reHex3.exec(format)) ? (m = parseInt(m[1], 16), new Rgb((m >> 8 & 0xf) | (m >> 4 & 0x0f0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1)) // #f00
: (m = reHex6.exec(format)) ? rgbn(parseInt(m[1], 16)) // #ff0000
: (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)
: (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)
: (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)
: (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)
: (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)
: (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)
: named.hasOwnProperty(format) ? rgbn(named[format])
: format === "transparent" ? new Rgb(NaN, NaN, NaN, 0)
: null;
}
function rgbn(n) {
return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);
}
function rgba(r, g, b, a) {
if (a <= 0) r = g = b = NaN;
return new Rgb(r, g, b, a);
}
function rgbConvert(o) {
if (!(o instanceof Color)) o = color(o);
if (!o) return new Rgb;
o = o.rgb();
return new Rgb(o.r, o.g, o.b, o.opacity);
}
function rgb(r, g, b, opacity) {
return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);
}
function Rgb(r, g, b, opacity) {
this.r = +r;
this.g = +g;
this.b = +b;
this.opacity = +opacity;
}
define(Rgb, rgb, extend(Color, {
brighter: function(k) {
k = k == null ? brighter : Math.pow(brighter, k);
return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);
},
darker: function(k) {
k = k == null ? darker : Math.pow(darker, k);
return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);
},
rgb: function() {
return this;
},
displayable: function() {
return (0 <= this.r && this.r <= 255)
&& (0 <= this.g && this.g <= 255)
&& (0 <= this.b && this.b <= 255)
&& (0 <= this.opacity && this.opacity <= 1);
},
toString: function() {
var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));
return (a === 1 ? "rgb(" : "rgba(")
+ Math.max(0, Math.min(255, Math.round(this.r) || 0)) + ", "
+ Math.max(0, Math.min(255, Math.round(this.g) || 0)) + ", "
+ Math.max(0, Math.min(255, Math.round(this.b) || 0))
+ (a === 1 ? ")" : ", " + a + ")");
}
}));
function hsla(h, s, l, a) {
if (a <= 0) h = s = l = NaN;
else if (l <= 0 || l >= 1) h = s = NaN;
else if (s <= 0) h = NaN;
return new Hsl(h, s, l, a);
}
function hslConvert(o) {
if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);
if (!(o instanceof Color)) o = color(o);
if (!o) return new Hsl;
if (o instanceof Hsl) return o;
o = o.rgb();
var r = o.r / 255,
g = o.g / 255,
b = o.b / 255,
min = Math.min(r, g, b),
max = Math.max(r, g, b),
h = NaN,
s = max - min,
l = (max + min) / 2;
if (s) {
if (r === max) h = (g - b) / s + (g < b) * 6;
else if (g === max) h = (b - r) / s + 2;
else h = (r - g) / s + 4;
s /= l < 0.5 ? max + min : 2 - max - min;
h *= 60;
} else {
s = l > 0 && l < 1 ? 0 : h;
}
return new Hsl(h, s, l, o.opacity);
}
function hsl(h, s, l, opacity) {
return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);
}
function Hsl(h, s, l, opacity) {
this.h = +h;
this.s = +s;
this.l = +l;
this.opacity = +opacity;
}
define(Hsl, hsl, extend(Color, {
brighter: function(k) {
k = k == null ? brighter : Math.pow(brighter, k);
return new Hsl(this.h, this.s, this.l * k, this.opacity);
},
darker: function(k) {
k = k == null ? darker : Math.pow(darker, k);
return new Hsl(this.h, this.s, this.l * k, this.opacity);
},
rgb: function() {
var h = this.h % 360 + (this.h < 0) * 360,
s = isNaN(h) || isNaN(this.s) ? 0 : this.s,
l = this.l,
m2 = l + (l < 0.5 ? l : 1 - l) * s,
m1 = 2 * l - m2;
return new Rgb(
hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),
hsl2rgb(h, m1, m2),
hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),
this.opacity
);
},
displayable: function() {
return (0 <= this.s && this.s <= 1 || isNaN(this.s))
&& (0 <= this.l && this.l <= 1)
&& (0 <= this.opacity && this.opacity <= 1);
}
}));
/* From FvD 13.37, CSS Color Module Level 3 */
function hsl2rgb(h, m1, m2) {
return (h < 60 ? m1 + (m2 - m1) * h / 60
: h < 180 ? m2
: h < 240 ? m1 + (m2 - m1) * (240 - h) / 60
: m1) * 255;
}
var deg2rad = Math.PI / 180;
var rad2deg = 180 / Math.PI;
var Kn = 18;
var Xn = 0.950470;
var Yn = 1;
var Zn = 1.088830;
var t0 = 4 / 29;
var t1 = 6 / 29;
var t2 = 3 * t1 * t1;
var t3 = t1 * t1 * t1;
function labConvert(o) {
if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);
if (o instanceof Hcl) {
var h = o.h * deg2rad;
return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);
}
if (!(o instanceof Rgb)) o = rgbConvert(o);
var b = rgb2xyz(o.r),
a = rgb2xyz(o.g),
l = rgb2xyz(o.b),
x = xyz2lab((0.4124564 * b + 0.3575761 * a + 0.1804375 * l) / Xn),
y = xyz2lab((0.2126729 * b + 0.7151522 * a + 0.0721750 * l) / Yn),
z = xyz2lab((0.0193339 * b + 0.1191920 * a + 0.9503041 * l) / Zn);
return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);
}
function lab(l, a, b, opacity) {
return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);
}
function Lab(l, a, b, opacity) {
this.l = +l;
this.a = +a;
this.b = +b;
this.opacity = +opacity;
}
define(Lab, lab, extend(Color, {
brighter: function(k) {
return new Lab(this.l + Kn * (k == null ? 1 : k), this.a, this.b, this.opacity);
},
darker: function(k) {
return new Lab(this.l - Kn * (k == null ? 1 : k), this.a, this.b, this.opacity);
},
rgb: function() {
var y = (this.l + 16) / 116,
x = isNaN(this.a) ? y : y + this.a / 500,
z = isNaN(this.b) ? y : y - this.b / 200;
y = Yn * lab2xyz(y);
x = Xn * lab2xyz(x);
z = Zn * lab2xyz(z);
return new Rgb(
xyz2rgb( 3.2404542 * x - 1.5371385 * y - 0.4985314 * z), // D65 -> sRGB
xyz2rgb(-0.9692660 * x + 1.8760108 * y + 0.0415560 * z),
xyz2rgb( 0.0556434 * x - 0.2040259 * y + 1.0572252 * z),
this.opacity
);
}
}));
function xyz2lab(t) {
return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;
}
function lab2xyz(t) {
return t > t1 ? t * t * t : t2 * (t - t0);
}
function xyz2rgb(x) {
return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);
}
function rgb2xyz(x) {
return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);
}
function hclConvert(o) {
if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);
if (!(o instanceof Lab)) o = labConvert(o);
var h = Math.atan2(o.b, o.a) * rad2deg;
return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);
}
function hcl(h, c, l, opacity) {
return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);
}
function Hcl(h, c, l, opacity) {
this.h = +h;
this.c = +c;
this.l = +l;
this.opacity = +opacity;
}
define(Hcl, hcl, extend(Color, {
brighter: function(k) {
return new Hcl(this.h, this.c, this.l + Kn * (k == null ? 1 : k), this.opacity);
},
darker: function(k) {
return new Hcl(this.h, this.c, this.l - Kn * (k == null ? 1 : k), this.opacity);
},
rgb: function() {
return labConvert(this).rgb();
}
}));
var A = -0.14861;
var B = +1.78277;
var C = -0.29227;
var D = -0.90649;
var E = +1.97294;
var ED = E * D;
var EB = E * B;
var BC_DA = B * C - D * A;
function cubehelixConvert(o) {
if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);
if (!(o instanceof Rgb)) o = rgbConvert(o);
var r = o.r / 255,
g = o.g / 255,
b = o.b / 255,
l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),
bl = b - l,
k = (E * (g - l) - C * bl) / D,
s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1
h = s ? Math.atan2(k, bl) * rad2deg - 120 : NaN;
return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);
}
function cubehelix(h, s, l, opacity) {
return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);
}
function Cubehelix(h, s, l, opacity) {
this.h = +h;
this.s = +s;
this.l = +l;
this.opacity = +opacity;
}
define(Cubehelix, cubehelix, extend(Color, {
brighter: function(k) {
k = k == null ? brighter : Math.pow(brighter, k);
return new Cubehelix(this.h, this.s, this.l * k, this.opacity);
},
darker: function(k) {
k = k == null ? darker : Math.pow(darker, k);
return new Cubehelix(this.h, this.s, this.l * k, this.opacity);
},
rgb: function() {
var h = isNaN(this.h) ? 0 : (this.h + 120) * deg2rad,
l = +this.l,
a = isNaN(this.s) ? 0 : this.s * l * (1 - l),
cosh = Math.cos(h),
sinh = Math.sin(h);
return new Rgb(
255 * (l + a * (A * cosh + B * sinh)),
255 * (l + a * (C * cosh + D * sinh)),
255 * (l + a * (E * cosh)),
this.opacity
);
}
}));
function basis(t1, v0, v1, v2, v3) {
var t2 = t1 * t1, t3 = t2 * t1;
return ((1 - 3 * t1 + 3 * t2 - t3) * v0
+ (4 - 6 * t2 + 3 * t3) * v1
+ (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2
+ t3 * v3) / 6;
}
var basis$1 = function(values) {
var n = values.length - 1;
return function(t) {
var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),
v1 = values[i],
v2 = values[i + 1],
v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,
v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;
return basis((t - i / n) * n, v0, v1, v2, v3);
};
};
var basisClosed = function(values) {
var n = values.length;
return function(t) {
var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),
v0 = values[(i + n - 1) % n],
v1 = values[i % n],
v2 = values[(i + 1) % n],
v3 = values[(i + 2) % n];
return basis((t - i / n) * n, v0, v1, v2, v3);
};
};
var constant$3 = function(x) {
return function() {
return x;
};
};
function linear(a, d) {
return function(t) {
return a + t * d;
};
}
function exponential(a, b, y) {
return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {
return Math.pow(a + t * b, y);
};
}
function hue(a, b) {
var d = b - a;
return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant$3(isNaN(a) ? b : a);
}
function gamma(y) {
return (y = +y) === 1 ? nogamma : function(a, b) {
return b - a ? exponential(a, b, y) : constant$3(isNaN(a) ? b : a);
};
}
function nogamma(a, b) {
var d = b - a;
return d ? linear(a, d) : constant$3(isNaN(a) ? b : a);
}
var interpolateRgb = ((function rgbGamma(y) {
var color$$1 = gamma(y);
function rgb$$1(start, end) {
var r = color$$1((start = rgb(start)).r, (end = rgb(end)).r),
g = color$$1(start.g, end.g),
b = color$$1(start.b, end.b),
opacity = nogamma(start.opacity, end.opacity);
return function(t) {
start.r = r(t);
start.g = g(t);
start.b = b(t);
start.opacity = opacity(t);
return start + "";
};
}
rgb$$1.gamma = rgbGamma;
return rgb$$1;
}))(1);
function rgbSpline(spline) {
return function(colors) {
var n = colors.length,
r = new Array(n),
g = new Array(n),
b = new Array(n),
i, color$$1;
for (i = 0; i < n; ++i) {
color$$1 = rgb(colors[i]);
r[i] = color$$1.r || 0;
g[i] = color$$1.g || 0;
b[i] = color$$1.b || 0;
}
r = spline(r);
g = spline(g);
b = spline(b);
color$$1.opacity = 1;
return function(t) {
color$$1.r = r(t);
color$$1.g = g(t);
color$$1.b = b(t);
return color$$1 + "";
};
};
}
var rgbBasis = rgbSpline(basis$1);
var rgbBasisClosed = rgbSpline(basisClosed);
var array$1 = function(a, b) {
var nb = b ? b.length : 0,
na = a ? Math.min(nb, a.length) : 0,
x = new Array(nb),
c = new Array(nb),
i;
for (i = 0; i < na; ++i) x[i] = interpolateValue(a[i], b[i]);
for (; i < nb; ++i) c[i] = b[i];
return function(t) {
for (i = 0; i < na; ++i) c[i] = x[i](t);
return c;
};
};
var date = function(a, b) {
var d = new Date;
return a = +a, b -= a, function(t) {
return d.setTime(a + b * t), d;
};
};
var reinterpolate = function(a, b) {
return a = +a, b -= a, function(t) {
return a + b * t;
};
};
var object = function(a, b) {
var i = {},
c = {},
k;
if (a === null || typeof a !== "object") a = {};
if (b === null || typeof b !== "object") b = {};
for (k in b) {
if (k in a) {
i[k] = interpolateValue(a[k], b[k]);
} else {
c[k] = b[k];
}
}
return function(t) {
for (k in i) c[k] = i[k](t);
return c;
};
};
var reA = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g;
var reB = new RegExp(reA.source, "g");
function zero(b) {
return function() {
return b;
};
}
function one(b) {
return function(t) {
return b(t) + "";
};
}
var interpolateString = function(a, b) {
var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b
am, // current match in a
bm, // current match in b
bs, // string preceding current number in b, if any
i = -1, // index in s
s = [], // string constants and placeholders
q = []; // number interpolators
// Coerce inputs to strings.
a = a + "", b = b + "";
// Interpolate pairs of numbers in a & b.
while ((am = reA.exec(a))
&& (bm = reB.exec(b))) {
if ((bs = bm.index) > bi) { // a string precedes the next number in b
bs = b.slice(bi, bs);
if (s[i]) s[i] += bs; // coalesce with previous string
else s[++i] = bs;
}
if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match
if (s[i]) s[i] += bm; // coalesce with previous string
else s[++i] = bm;
} else { // interpolate non-matching numbers
s[++i] = null;
q.push({i: i, x: reinterpolate(am, bm)});
}
bi = reB.lastIndex;
}
// Add remains of b.
if (bi < b.length) {
bs = b.slice(bi);
if (s[i]) s[i] += bs; // coalesce with previous string
else s[++i] = bs;
}
// Special optimization for only a single match.
// Otherwise, interpolate each of the numbers and rejoin the string.
return s.length < 2 ? (q[0]
? one(q[0].x)
: zero(b))
: (b = q.length, function(t) {
for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);
return s.join("");
});
};
var interpolateValue = function(a, b) {
var t = typeof b, c;
return b == null || t === "boolean" ? constant$3(b)
: (t === "number" ? reinterpolate
: t === "string" ? ((c = color(b)) ? (b = c, interpolateRgb) : interpolateString)
: b instanceof color ? interpolateRgb
: b instanceof Date ? date
: Array.isArray(b) ? array$1
: isNaN(b) ? object
: reinterpolate)(a, b);
};
var interpolateRound = function(a, b) {
return a = +a, b -= a, function(t) {
return Math.round(a + b * t);
};
};
var degrees = 180 / Math.PI;
var identity$2 = {
translateX: 0,
translateY: 0,
rotate: 0,
skewX: 0,
scaleX: 1,
scaleY: 1
};
var decompose = function(a, b, c, d, e, f) {
var scaleX, scaleY, skewX;
if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;
if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;
if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;
if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;
return {
translateX: e,
translateY: f,
rotate: Math.atan2(b, a) * degrees,
skewX: Math.atan(skewX) * degrees,
scaleX: scaleX,
scaleY: scaleY
};
};
var cssNode;
var cssRoot;
var cssView;
var svgNode;
function parseCss(value) {
if (value === "none") return identity$2;
if (!cssNode) cssNode = document.createElement("DIV"), cssRoot = document.documentElement, cssView = document.defaultView;
cssNode.style.transform = value;
value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue("transform");
cssRoot.removeChild(cssNode);
value = value.slice(7, -1).split(",");
return decompose(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]);
}
function parseSvg(value) {
if (value == null) return identity$2;
if (!svgNode) svgNode = document.createElementNS("http://www.w3.org/2000/svg", "g");
svgNode.setAttribute("transform", value);
if (!(value = svgNode.transform.baseVal.consolidate())) return identity$2;
value = value.matrix;
return decompose(value.a, value.b, value.c, value.d, value.e, value.f);
}
function interpolateTransform(parse, pxComma, pxParen, degParen) {
function pop(s) {
return s.length ? s.pop() + " " : "";
}
function translate(xa, ya, xb, yb, s, q) {
if (xa !== xb || ya !== yb) {
var i = s.push("translate(", null, pxComma, null, pxParen);
q.push({i: i - 4, x: reinterpolate(xa, xb)}, {i: i - 2, x: reinterpolate(ya, yb)});
} else if (xb || yb) {
s.push("translate(" + xb + pxComma + yb + pxParen);
}
}
function rotate(a, b, s, q) {
if (a !== b) {
if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path
q.push({i: s.push(pop(s) + "rotate(", null, degParen) - 2, x: reinterpolate(a, b)});
} else if (b) {
s.push(pop(s) + "rotate(" + b + degParen);
}
}
function skewX(a, b, s, q) {
if (a !== b) {
q.push({i: s.push(pop(s) + "skewX(", null, degParen) - 2, x: reinterpolate(a, b)});
} else if (b) {
s.push(pop(s) + "skewX(" + b + degParen);
}
}
function scale(xa, ya, xb, yb, s, q) {
if (xa !== xb || ya !== yb) {
var i = s.push(pop(s) + "scale(", null, ",", null, ")");
q.push({i: i - 4, x: reinterpolate(xa, xb)}, {i: i - 2, x: reinterpolate(ya, yb)});
} else if (xb !== 1 || yb !== 1) {
s.push(pop(s) + "scale(" + xb + "," + yb + ")");
}
}
return function(a, b) {
var s = [], // string constants and placeholders
q = []; // number interpolators
a = parse(a), b = parse(b);
translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);
rotate(a.rotate, b.rotate, s, q);
skewX(a.skewX, b.skewX, s, q);
scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);
a = b = null; // gc
return function(t) {
var i = -1, n = q.length, o;
while (++i < n) s[(o = q[i]).i] = o.x(t);
return s.join("");
};
};
}
var interpolateTransformCss = interpolateTransform(parseCss, "px, ", "px)", "deg)");
var interpolateTransformSvg = interpolateTransform(parseSvg, ", ", ")", ")");
var rho = Math.SQRT2;
var rho2 = 2;
var rho4 = 4;
var epsilon2 = 1e-12;
function cosh(x) {
return ((x = Math.exp(x)) + 1 / x) / 2;
}
function sinh(x) {
return ((x = Math.exp(x)) - 1 / x) / 2;
}
function tanh(x) {
return ((x = Math.exp(2 * x)) - 1) / (x + 1);
}
// p0 = [ux0, uy0, w0]
// p1 = [ux1, uy1, w1]
var interpolateZoom = function(p0, p1) {
var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],
ux1 = p1[0], uy1 = p1[1], w1 = p1[2],
dx = ux1 - ux0,
dy = uy1 - uy0,
d2 = dx * dx + dy * dy,
i,
S;
// Special case for u0 ≅ u1.
if (d2 < epsilon2) {
S = Math.log(w1 / w0) / rho;
i = function(t) {
return [
ux0 + t * dx,
uy0 + t * dy,
w0 * Math.exp(rho * t * S)
];
};
}
// General case.
else {
var d1 = Math.sqrt(d2),
b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),
b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),
r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),
r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);
S = (r1 - r0) / rho;
i = function(t) {
var s = t * S,
coshr0 = cosh(r0),
u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));
return [
ux0 + u * dx,
uy0 + u * dy,
w0 * coshr0 / cosh(rho * s + r0)
];
};
}
i.duration = S * 1000;
return i;
};
function hsl$1(hue$$1) {
return function(start, end) {
var h = hue$$1((start = hsl(start)).h, (end = hsl(end)).h),
s = nogamma(start.s, end.s),
l = nogamma(start.l, end.l),
opacity = nogamma(start.opacity, end.opacity);
return function(t) {
start.h = h(t);
start.s = s(t);
start.l = l(t);
start.opacity = opacity(t);
return start + "";
};
}
}
var hsl$2 = hsl$1(hue);
var hslLong = hsl$1(nogamma);
function lab$1(start, end) {
var l = nogamma((start = lab(start)).l, (end = lab(end)).l),
a = nogamma(start.a, end.a),
b = nogamma(start.b, end.b),
opacity = nogamma(start.opacity, end.opacity);
return function(t) {
start.l = l(t);
start.a = a(t);
start.b = b(t);
start.opacity = opacity(t);
return start + "";
};
}
function hcl$1(hue$$1) {
return function(start, end) {
var h = hue$$1((start = hcl(start)).h, (end = hcl(end)).h),
c = nogamma(start.c, end.c),
l = nogamma(start.l, end.l),
opacity = nogamma(start.opacity, end.opacity);
return function(t) {
start.h = h(t);
start.c = c(t);
start.l = l(t);
start.opacity = opacity(t);
return start + "";
};
}
}
var hcl$2 = hcl$1(hue);
var hclLong = hcl$1(nogamma);
function cubehelix$1(hue$$1) {
return (function cubehelixGamma(y) {
y = +y;
function cubehelix$$1(start, end) {
var h = hue$$1((start = cubehelix(start)).h, (end = cubehelix(end)).h),
s = nogamma(start.s, end.s),
l = nogamma(start.l, end.l),
opacity = nogamma(start.opacity, end.opacity);
return function(t) {
start.h = h(t);
start.s = s(t);
start.l = l(Math.pow(t, y));
start.opacity = opacity(t);
return start + "";
};
}
cubehelix$$1.gamma = cubehelixGamma;
return cubehelix$$1;
})(1);
}
var cubehelix$2 = cubehelix$1(hue);
var cubehelixLong = cubehelix$1(nogamma);
var quantize = function(interpolator, n) {
var samples = new Array(n);
for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1));
return samples;
};
var frame = 0;
var timeout = 0;
var interval = 0;
var pokeDelay = 1000;
var taskHead;
var taskTail;
var clockLast = 0;
var clockNow = 0;
var clockSkew = 0;
var clock = typeof performance === "object" && performance.now ? performance : Date;
var setFrame = typeof requestAnimationFrame === "function" ? requestAnimationFrame : function(f) { setTimeout(f, 17); };
function now() {
return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);
}
function clearNow() {
clockNow = 0;
}
function Timer() {
this._call =
this._time =
this._next = null;
}
Timer.prototype = timer.prototype = {
constructor: Timer,
restart: function(callback, delay, time) {
if (typeof callback !== "function") throw new TypeError("callback is not a function");
time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);
if (!this._next && taskTail !== this) {
if (taskTail) taskTail._next = this;
else taskHead = this;
taskTail = this;
}
this._call = callback;
this._time = time;
sleep();
},
stop: function() {
if (this._call) {
this._call = null;
this._time = Infinity;
sleep();
}
}
};
function timer(callback, delay, time) {
var t = new Timer;
t.restart(callback, delay, time);
return t;
}
function timerFlush() {
now(); // Get the current time, if not already set.
++frame; // Pretend we’ve set an alarm, if we haven’t already.
var t = taskHead, e;
while (t) {
if ((e = clockNow - t._time) >= 0) t._call.call(null, e);
t = t._next;
}
--frame;
}
function wake() {
clockNow = (clockLast = clock.now()) + clockSkew;
frame = timeout = 0;
try {
timerFlush();
} finally {
frame = 0;
nap();
clockNow = 0;
}
}
function poke() {
var now = clock.now(), delay = now - clockLast;
if (delay > pokeDelay) clockSkew -= delay, clockLast = now;
}
function nap() {
var t0, t1 = taskHead, t2, time = Infinity;
while (t1) {
if (t1._call) {
if (time > t1._time) time = t1._time;
t0 = t1, t1 = t1._next;
} else {
t2 = t1._next, t1._next = null;
t1 = t0 ? t0._next = t2 : taskHead = t2;
}
}
taskTail = t0;
sleep(time);
}
function sleep(time) {
if (frame) return; // Soonest alarm already set, or will be.
if (timeout) timeout = clearTimeout(timeout);
var delay = time - clockNow;
if (delay > 24) {
if (time < Infinity) timeout = setTimeout(wake, delay);
if (interval) interval = clearInterval(interval);
} else {
if (!interval) clockLast = clockNow, interval = setInterval(poke, pokeDelay);
frame = 1, setFrame(wake);
}
}
var timeout$1 = function(callback, delay, time) {
var t = new Timer;
delay = delay == null ? 0 : +delay;
t.restart(function(elapsed) {
t.stop();
callback(elapsed + delay);
}, delay, time);
return t;
};
var interval$1 = function(callback, delay, time) {
var t = new Timer, total = delay;
if (delay == null) return t.restart(callback, delay, time), t;
delay = +delay, time = time == null ? now() : +time;
t.restart(function tick(elapsed) {
elapsed += total;
t.restart(tick, total += delay, time);
callback(elapsed);
}, delay, time);
return t;
};
var emptyOn = dispatch("start", "end", "interrupt");
var emptyTween = [];
var CREATED = 0;
var SCHEDULED = 1;
var STARTING = 2;
var STARTED = 3;
var RUNNING = 4;
var ENDING = 5;
var ENDED = 6;
var schedule = function(node, name, id, index, group, timing) {
var schedules = node.__transition;
if (!schedules) node.__transition = {};
else if (id in schedules) return;
create(node, id, {
name: name,
index: index, // For context during callback.
group: group, // For context during callback.
on: emptyOn,
tween: emptyTween,
time: timing.time,
delay: timing.delay,
duration: timing.duration,
ease: timing.ease,
timer: null,
state: CREATED
});
};
function init(node, id) {
var schedule = node.__transition;
if (!schedule || !(schedule = schedule[id]) || schedule.state > CREATED) throw new Error("too late");
return schedule;
}
function set$1(node, id) {
var schedule = node.__transition;
if (!schedule || !(schedule = schedule[id]) || schedule.state > STARTING) throw new Error("too late");
return schedule;
}
function get$1(node, id) {
var schedule = node.__transition;
if (!schedule || !(schedule = schedule[id])) throw new Error("too late");
return schedule;
}
function create(node, id, self) {
var schedules = node.__transition,
tween;
// Initialize the self timer when the transition is created.
// Note the actual delay is not known until the first callback!
schedules[id] = self;
self.timer = timer(schedule, 0, self.time);
function schedule(elapsed) {
self.state = SCHEDULED;
self.timer.restart(start, self.delay, self.time);
// If the elapsed delay is less than our first sleep, start immediately.
if (self.delay <= elapsed) start(elapsed - self.delay);
}
function start(elapsed) {
var i, j, n, o;
// If the state is not SCHEDULED, then we previously errored on start.
if (self.state !== SCHEDULED) return stop();
for (i in schedules) {
o = schedules[i];
if (o.name !== self.name) continue;
// While this element already has a starting transition during this frame,
// defer starting an interrupting transition until that transition has a
// chance to tick (and possibly end); see d3/d3-transition#54!
if (o.state === STARTED) return timeout$1(start);
// Interrupt the active transition, if any.
// Dispatch the interrupt event.
if (o.state === RUNNING) {
o.state = ENDED;
o.timer.stop();
o.on.call("interrupt", node, node.__data__, o.index, o.group);
delete schedules[i];
}
// Cancel any pre-empted transitions. No interrupt event is dispatched
// because the cancelled transitions never started. Note that this also
// removes this transition from the pending list!
else if (+i < id) {
o.state = ENDED;
o.timer.stop();
delete schedules[i];
}
}
// Defer the first tick to end of the current frame; see d3/d3#1576.
// Note the transition may be canceled after start and before the first tick!
// Note this must be scheduled before the start event; see d3/d3-transition#16!
// Assuming this is successful, subsequent callbacks go straight to tick.
timeout$1(function() {
if (self.state === STARTED) {
self.state = RUNNING;
self.timer.restart(tick, self.delay, self.time);
tick(elapsed);
}
});
// Dispatch the start event.
// Note this must be done before the tween are initialized.
self.state = STARTING;
self.on.call("start", node, node.__data__, self.index, self.group);
if (self.state !== STARTING) return; // interrupted
self.state = STARTED;
// Initialize the tween, deleting null tween.
tween = new Array(n = self.tween.length);
for (i = 0, j = -1; i < n; ++i) {
if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {
tween[++j] = o;
}
}
tween.length = j + 1;
}
function tick(elapsed) {
var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),
i = -1,
n = tween.length;
while (++i < n) {
tween[i].call(null, t);
}
// Dispatch the end event.
if (self.state === ENDING) {
self.on.call("end", node, node.__data__, self.index, self.group);
stop();
}
}
function stop() {
self.state = ENDED;
self.timer.stop();
delete schedules[id];
for (var i in schedules) return; // eslint-disable-line no-unused-vars
delete node.__transition;
}
}
var interrupt = function(node, name) {
var schedules = node.__transition,
schedule,
active,
empty = true,
i;
if (!schedules) return;
name = name == null ? null : name + "";
for (i in schedules) {
if ((schedule = schedules[i]).name !== name) { empty = false; continue; }
active = schedule.state > STARTING && schedule.state < ENDING;
schedule.state = ENDED;
schedule.timer.stop();
if (active) schedule.on.call("interrupt", node, node.__data__, schedule.index, schedule.group);
delete schedules[i];
}
if (empty) delete node.__transition;
};
var selection_interrupt = function(name) {
return this.each(function() {
interrupt(this, name);
});
};
function tweenRemove(id, name) {
var tween0, tween1;
return function() {
var schedule = set$1(this, id),
tween = schedule.tween;
// If this node shared tween with the previous node,
// just assign the updated shared tween and we’re done!
// Otherwise, copy-on-write.
if (tween !== tween0) {
tween1 = tween0 = tween;
for (var i = 0, n = tween1.length; i < n; ++i) {
if (tween1[i].name === name) {
tween1 = tween1.slice();
tween1.splice(i, 1);
break;
}
}
}
schedule.tween = tween1;
};
}
function tweenFunction(id, name, value) {
var tween0, tween1;
if (typeof value !== "function") throw new Error;
return function() {
var schedule = set$1(this, id),
tween = schedule.tween;
// If this node shared tween with the previous node,
// just assign the updated shared tween and we’re done!
// Otherwise, copy-on-write.
if (tween !== tween0) {
tween1 = (tween0 = tween).slice();
for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {
if (tween1[i].name === name) {
tween1[i] = t;
break;
}
}
if (i === n) tween1.push(t);
}
schedule.tween = tween1;
};
}
var transition_tween = function(name, value) {
var id = this._id;
name += "";
if (arguments.length < 2) {
var tween = get$1(this.node(), id).tween;
for (var i = 0, n = tween.length, t; i < n; ++i) {
if ((t = tween[i]).name === name) {
return t.value;
}
}
return null;
}
return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));
};
function tweenValue(transition, name, value) {
var id = transition._id;
transition.each(function() {
var schedule = set$1(this, id);
(schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);
});
return function(node) {
return get$1(node, id).value[name];
};
}
var interpolate$$1 = function(a, b) {
var c;
return (typeof b === "number" ? reinterpolate
: b instanceof color ? interpolateRgb
: (c = color(b)) ? (b = c, interpolateRgb)
: interpolateString)(a, b);
};
function attrRemove$1(name) {
return function() {
this.removeAttribute(name);
};
}
function attrRemoveNS$1(fullname) {
return function() {
this.removeAttributeNS(fullname.space, fullname.local);
};
}
function attrConstant$1(name, interpolate$$1, value1) {
var value00,
interpolate0;
return function() {
var value0 = this.getAttribute(name);
return value0 === value1 ? null
: value0 === value00 ? interpolate0
: interpolate0 = interpolate$$1(value00 = value0, value1);
};
}
function attrConstantNS$1(fullname, interpolate$$1, value1) {
var value00,
interpolate0;
return function() {
var value0 = this.getAttributeNS(fullname.space, fullname.local);
return value0 === value1 ? null
: value0 === value00 ? interpolate0
: interpolate0 = interpolate$$1(value00 = value0, value1);
};
}
function attrFunction$1(name, interpolate$$1, value) {
var value00,
value10,
interpolate0;
return function() {
var value0, value1 = value(this);
if (value1 == null) return void this.removeAttribute(name);
value0 = this.getAttribute(name);
return value0 === value1 ? null
: value0 === value00 && value1 === value10 ? interpolate0
: interpolate0 = interpolate$$1(value00 = value0, value10 = value1);
};
}
function attrFunctionNS$1(fullname, interpolate$$1, value) {
var value00,
value10,
interpolate0;
return function() {
var value0, value1 = value(this);
if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);
value0 = this.getAttributeNS(fullname.space, fullname.local);
return value0 === value1 ? null
: value0 === value00 && value1 === value10 ? interpolate0
: interpolate0 = interpolate$$1(value00 = value0, value10 = value1);
};
}
var transition_attr = function(name, value) {
var fullname = namespace(name), i = fullname === "transform" ? interpolateTransformSvg : interpolate$$1;
return this.attrTween(name, typeof value === "function"
? (fullname.local ? attrFunctionNS$1 : attrFunction$1)(fullname, i, tweenValue(this, "attr." + name, value))
: value == null ? (fullname.local ? attrRemoveNS$1 : attrRemove$1)(fullname)
: (fullname.local ? attrConstantNS$1 : attrConstant$1)(fullname, i, value + ""));
};
function attrTweenNS(fullname, value) {
function tween() {
var node = this, i = value.apply(node, arguments);
return i && function(t) {
node.setAttributeNS(fullname.space, fullname.local, i(t));
};
}
tween._value = value;
return tween;
}
function attrTween(name, value) {
function tween() {
var node = this, i = value.apply(node, arguments);
return i && function(t) {
node.setAttribute(name, i(t));
};
}
tween._value = value;
return tween;
}
var transition_attrTween = function(name, value) {
var key = "attr." + name;
if (arguments.length < 2) return (key = this.tween(key)) && key._value;
if (value == null) return this.tween(key, null);
if (typeof value !== "function") throw new Error;
var fullname = namespace(name);
return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));
};
function delayFunction(id, value) {
return function() {
init(this, id).delay = +value.apply(this, arguments);
};
}
function delayConstant(id, value) {
return value = +value, function() {
init(this, id).delay = value;
};
}
var transition_delay = function(value) {
var id = this._id;
return arguments.length
? this.each((typeof value === "function"
? delayFunction
: delayConstant)(id, value))
: get$1(this.node(), id).delay;
};
function durationFunction(id, value) {
return function() {
set$1(this, id).duration = +value.apply(this, arguments);
};
}
function durationConstant(id, value) {
return value = +value, function() {
set$1(this, id).duration = value;
};
}
var transition_duration = function(value) {
var id = this._id;
return arguments.length
? this.each((typeof value === "function"
? durationFunction
: durationConstant)(id, value))
: get$1(this.node(), id).duration;
};
function easeConstant(id, value) {
if (typeof value !== "function") throw new Error;
return function() {
set$1(this, id).ease = value;
};
}
var transition_ease = function(value) {
var id = this._id;
return arguments.length
? this.each(easeConstant(id, value))
: get$1(this.node(), id).ease;
};
var transition_filter = function(match) {
if (typeof match !== "function") match = matcher$1(match);
for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {
for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {
if ((node = group[i]) && match.call(node, node.__data__, i, group)) {
subgroup.push(node);
}
}
}
return new Transition(subgroups, this._parents, this._name, this._id);
};
var transition_merge = function(transition) {
if (transition._id !== this._id) throw new Error;
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) {
for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {
if (node = group0[i] || group1[i]) {
merge[i] = node;
}
}
}
for (; j < m0; ++j) {
merges[j] = groups0[j];
}
return new Transition(merges, this._parents, this._name, this._id);
};
function start(name) {
return (name + "").trim().split(/^|\s+/).every(function(t) {
var i = t.indexOf(".");
if (i >= 0) t = t.slice(0, i);
return !t || t === "start";
});
}
function onFunction(id, name, listener) {
var on0, on1, sit = start(name) ? init : set$1;
return function() {
var schedule = sit(this, id),
on = schedule.on;
// If this node shared a dispatch with the previous node,
// just assign the updated shared dispatch and we’re done!
// Otherwise, copy-on-write.
if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);
schedule.on = on1;
};
}
var transition_on = function(name, listener) {
var id = this._id;
return arguments.length < 2
? get$1(this.node(), id).on.on(name)
: this.each(onFunction(id, name, listener));
};
function removeFunction(id) {
return function() {
var parent = this.parentNode;
for (var i in this.__transition) if (+i !== id) return;
if (parent) parent.removeChild(this);
};
}
var transition_remove = function() {
return this.on("end.remove", removeFunction(this._id));
};
var transition_select = function(select$$1) {
var name = this._name,
id = this._id;
if (typeof select$$1 !== "function") select$$1 = selector(select$$1);
for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {
for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {
if ((node = group[i]) && (subnode = select$$1.call(node, node.__data__, i, group))) {
if ("__data__" in node) subnode.__data__ = node.__data__;
subgroup[i] = subnode;
schedule(subgroup[i], name, id, i, subgroup, get$1(node, id));
}
}
}
return new Transition(subgroups, this._parents, name, id);
};
var transition_selectAll = function(select$$1) {
var name = this._name,
id = this._id;
if (typeof select$$1 !== "function") select$$1 = selectorAll(select$$1);
for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {
for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {
if (node = group[i]) {
for (var children = select$$1.call(node, node.__data__, i, group), child, inherit = get$1(node, id), k = 0, l = children.length; k < l; ++k) {
if (child = children[k]) {
schedule(child, name, id, k, children, inherit);
}
}
subgroups.push(children);
parents.push(node);
}
}
}
return new Transition(subgroups, parents, name, id);
};
var Selection$1 = selection.prototype.constructor;
var transition_selection = function() {
return new Selection$1(this._groups, this._parents);
};
function styleRemove$1(name, interpolate$$2) {
var value00,
value10,
interpolate0;
return function() {
var style = window$1(this).getComputedStyle(this, null),
value0 = style.getPropertyValue(name),
value1 = (this.style.removeProperty(name), style.getPropertyValue(name));
return value0 === value1 ? null
: value0 === value00 && value1 === value10 ? interpolate0
: interpolate0 = interpolate$$2(value00 = value0, value10 = value1);
};
}
function styleRemoveEnd(name) {
return function() {
this.style.removeProperty(name);
};
}
function styleConstant$1(name, interpolate$$2, value1) {
var value00,
interpolate0;
return function() {
var value0 = window$1(this).getComputedStyle(this, null).getPropertyValue(name);
return value0 === value1 ? null
: value0 === value00 ? interpolate0
: interpolate0 = interpolate$$2(value00 = value0, value1);
};
}
function styleFunction$1(name, interpolate$$2, value) {
var value00,
value10,
interpolate0;
return function() {
var style = window$1(this).getComputedStyle(this, null),
value0 = style.getPropertyValue(name),
value1 = value(this);
if (value1 == null) value1 = (this.style.removeProperty(name), style.getPropertyValue(name));
return value0 === value1 ? null
: value0 === value00 && value1 === value10 ? interpolate0
: interpolate0 = interpolate$$2(value00 = value0, value10 = value1);
};
}
var transition_style = function(name, value, priority) {
var i = (name += "") === "transform" ? interpolateTransformCss : interpolate$$1;
return value == null ? this
.styleTween(name, styleRemove$1(name, i))
.on("end.style." + name, styleRemoveEnd(name))
: this.styleTween(name, typeof value === "function"
? styleFunction$1(name, i, tweenValue(this, "style." + name, value))
: styleConstant$1(name, i, value + ""), priority);
};
function styleTween(name, value, priority) {
function tween() {
var node = this, i = value.apply(node, arguments);
return i && function(t) {
node.style.setProperty(name, i(t), priority);
};
}
tween._value = value;
return tween;
}
var transition_styleTween = function(name, value, priority) {
var key = "style." + (name += "");
if (arguments.length < 2) return (key = this.tween(key)) && key._value;
if (value == null) return this.tween(key, null);
if (typeof value !== "function") throw new Error;
return this.tween(key, styleTween(name, value, priority == null ? "" : priority));
};
function textConstant$1(value) {
return function() {
this.textContent = value;
};
}
function textFunction$1(value) {
return function() {
var value1 = value(this);
this.textContent = value1 == null ? "" : value1;
};
}
var transition_text = function(value) {
return this.tween("text", typeof value === "function"
? textFunction$1(tweenValue(this, "text", value))
: textConstant$1(value == null ? "" : value + ""));
};
var transition_transition = function() {
var name = this._name,
id0 = this._id,
id1 = newId();
for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {
for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {
if (node = group[i]) {
var inherit = get$1(node, id0);
schedule(node, name, id1, i, group, {
time: inherit.time + inherit.delay + inherit.duration,
delay: 0,
duration: inherit.duration,
ease: inherit.ease
});
}
}
}
return new Transition(groups, this._parents, name, id1);
};
var id = 0;
function Transition(groups, parents, name, id) {
this._groups = groups;
this._parents = parents;
this._name = name;
this._id = id;
}
function transition(name) {
return selection().transition(name);
}
function newId() {
return ++id;
}
var selection_prototype = selection.prototype;
Transition.prototype = transition.prototype = {
constructor: Transition,
select: transition_select,
selectAll: transition_selectAll,
filter: transition_filter,
merge: transition_merge,
selection: transition_selection,
transition: transition_transition,
call: selection_prototype.call,
nodes: selection_prototype.nodes,
node: selection_prototype.node,
size: selection_prototype.size,
empty: selection_prototype.empty,
each: selection_prototype.each,
on: transition_on,
attr: transition_attr,
attrTween: transition_attrTween,
style: transition_style,
styleTween: transition_styleTween,
text: transition_text,
remove: transition_remove,
tween: transition_tween,
delay: transition_delay,
duration: transition_duration,
ease: transition_ease
};
function linear$1(t) {
return +t;
}
function quadIn(t) {
return t * t;
}
function quadOut(t) {
return t * (2 - t);
}
function quadInOut(t) {
return ((t *= 2) <= 1 ? t * t : --t * (2 - t) + 1) / 2;
}
function cubicIn(t) {
return t * t * t;
}
function cubicOut(t) {
return --t * t * t + 1;
}
function cubicInOut(t) {
return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;
}
var exponent = 3;
var polyIn = (function custom(e) {
e = +e;
function polyIn(t) {
return Math.pow(t, e);
}
polyIn.exponent = custom;
return polyIn;
})(exponent);
var polyOut = (function custom(e) {
e = +e;
function polyOut(t) {
return 1 - Math.pow(1 - t, e);
}
polyOut.exponent = custom;
return polyOut;
})(exponent);
var polyInOut = (function custom(e) {
e = +e;
function polyInOut(t) {
return ((t *= 2) <= 1 ? Math.pow(t, e) : 2 - Math.pow(2 - t, e)) / 2;
}
polyInOut.exponent = custom;
return polyInOut;
})(exponent);
var pi = Math.PI;
var halfPi = pi / 2;
function sinIn(t) {
return 1 - Math.cos(t * halfPi);
}
function sinOut(t) {
return Math.sin(t * halfPi);
}
function sinInOut(t) {
return (1 - Math.cos(pi * t)) / 2;
}
function expIn(t) {
return Math.pow(2, 10 * t - 10);
}
function expOut(t) {
return 1 - Math.pow(2, -10 * t);
}
function expInOut(t) {
return ((t *= 2) <= 1 ? Math.pow(2, 10 * t - 10) : 2 - Math.pow(2, 10 - 10 * t)) / 2;
}
function circleIn(t) {
return 1 - Math.sqrt(1 - t * t);
}
function circleOut(t) {
return Math.sqrt(1 - --t * t);
}
function circleInOut(t) {
return ((t *= 2) <= 1 ? 1 - Math.sqrt(1 - t * t) : Math.sqrt(1 - (t -= 2) * t) + 1) / 2;
}
var b1 = 4 / 11;
var b2 = 6 / 11;
var b3 = 8 / 11;
var b4 = 3 / 4;
var b5 = 9 / 11;
var b6 = 10 / 11;
var b7 = 15 / 16;
var b8 = 21 / 22;
var b9 = 63 / 64;
var b0 = 1 / b1 / b1;
function bounceIn(t) {
return 1 - bounceOut(1 - t);
}
function bounceOut(t) {
return (t = +t) < b1 ? b0 * t * t : t < b3 ? b0 * (t -= b2) * t + b4 : t < b6 ? b0 * (t -= b5) * t + b7 : b0 * (t -= b8) * t + b9;
}
function bounceInOut(t) {
return ((t *= 2) <= 1 ? 1 - bounceOut(1 - t) : bounceOut(t - 1) + 1) / 2;
}
var overshoot = 1.70158;
var backIn = (function custom(s) {
s = +s;
function backIn(t) {
return t * t * ((s + 1) * t - s);
}
backIn.overshoot = custom;
return backIn;
})(overshoot);
var backOut = (function custom(s) {
s = +s;
function backOut(t) {
return --t * t * ((s + 1) * t + s) + 1;
}
backOut.overshoot = custom;
return backOut;
})(overshoot);
var backInOut = (function custom(s) {
s = +s;
function backInOut(t) {
return ((t *= 2) < 1 ? t * t * ((s + 1) * t - s) : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2;
}
backInOut.overshoot = custom;
return backInOut;
})(overshoot);
var tau = 2 * Math.PI;
var amplitude = 1;
var period = 0.3;
var elasticIn = (function custom(a, p) {
var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);
function elasticIn(t) {
return a * Math.pow(2, 10 * --t) * Math.sin((s - t) / p);
}
elasticIn.amplitude = function(a) { return custom(a, p * tau); };
elasticIn.period = function(p) { return custom(a, p); };
return elasticIn;
})(amplitude, period);
var elasticOut = (function custom(a, p) {
var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);
function elasticOut(t) {
return 1 - a * Math.pow(2, -10 * (t = +t)) * Math.sin((t + s) / p);
}
elasticOut.amplitude = function(a) { return custom(a, p * tau); };
elasticOut.period = function(p) { return custom(a, p); };
return elasticOut;
})(amplitude, period);
var elasticInOut = (function custom(a, p) {
var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);
function elasticInOut(t) {
return ((t = t * 2 - 1) < 0
? a * Math.pow(2, 10 * t) * Math.sin((s - t) / p)
: 2 - a * Math.pow(2, -10 * t) * Math.sin((s + t) / p)) / 2;
}
elasticInOut.amplitude = function(a) { return custom(a, p * tau); };
elasticInOut.period = function(p) { return custom(a, p); };
return elasticInOut;
})(amplitude, period);
var defaultTiming = {
time: null, // Set on use.
delay: 0,
duration: 250,
ease: cubicInOut
};
function inherit(node, id) {
var timing;
while (!(timing = node.__transition) || !(timing = timing[id])) {
if (!(node = node.parentNode)) {
return defaultTiming.time = now(), defaultTiming;
}
}
return timing;
}
var selection_transition = function(name) {
var id,
timing;
if (name instanceof Transition) {
id = name._id, name = name._name;
} else {
id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + "";
}
for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {
for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {
if (node = group[i]) {
schedule(node, name, id, i, group, timing || inherit(node, id));
}
}
}
return new Transition(groups, this._parents, name, id);
};
selection.prototype.interrupt = selection_interrupt;
selection.prototype.transition = selection_transition;
var root$1 = [null];
var active = function(node, name) {
var schedules = node.__transition,
schedule,
i;
if (schedules) {
name = name == null ? null : name + "";
for (i in schedules) {
if ((schedule = schedules[i]).state > SCHEDULED && schedule.name === name) {
return new Transition([[node]], root$1, name, +i);
}
}
}
return null;
};
var constant$4 = function(x) {
return function() {
return x;
};
};
var BrushEvent = function(target, type, selection) {
this.target = target;
this.type = type;
this.selection = selection;
};
function nopropagation$1() {
exports.event.stopImmediatePropagation();
}
var noevent$1 = function() {
exports.event.preventDefault();
exports.event.stopImmediatePropagation();
};
var MODE_DRAG = {name: "drag"};
var MODE_SPACE = {name: "space"};
var MODE_HANDLE = {name: "handle"};
var MODE_CENTER = {name: "center"};
var X = {
name: "x",
handles: ["e", "w"].map(type),
input: function(x, e) { return x && [[x[0], e[0][1]], [x[1], e[1][1]]]; },
output: function(xy) { return xy && [xy[0][0], xy[1][0]]; }
};
var Y = {
name: "y",
handles: ["n", "s"].map(type),
input: function(y, e) { return y && [[e[0][0], y[0]], [e[1][0], y[1]]]; },
output: function(xy) { return xy && [xy[0][1], xy[1][1]]; }
};
var XY = {
name: "xy",
handles: ["n", "e", "s", "w", "nw", "ne", "se", "sw"].map(type),
input: function(xy) { return xy; },
output: function(xy) { return xy; }
};
var cursors = {
overlay: "crosshair",
selection: "move",
n: "ns-resize",
e: "ew-resize",
s: "ns-resize",
w: "ew-resize",
nw: "nwse-resize",
ne: "nesw-resize",
se: "nwse-resize",
sw: "nesw-resize"
};
var flipX = {
e: "w",
w: "e",
nw: "ne",
ne: "nw",
se: "sw",
sw: "se"
};
var flipY = {
n: "s",
s: "n",
nw: "sw",
ne: "se",
se: "ne",
sw: "nw"
};
var signsX = {
overlay: +1,
selection: +1,
n: null,
e: +1,
s: null,
w: -1,
nw: -1,
ne: +1,
se: +1,
sw: -1
};
var signsY = {
overlay: +1,
selection: +1,
n: -1,
e: null,
s: +1,
w: null,
nw: -1,
ne: -1,
se: +1,
sw: +1
};
function type(t) {
return {type: t};
}
// Ignore right-click, since that should open the context menu.
function defaultFilter() {
return !exports.event.button;
}
function defaultExtent() {
var svg = this.ownerSVGElement || this;
return [[0, 0], [svg.width.baseVal.value, svg.height.baseVal.value]];
}
// Like d3.local, but with the name “__brush” rather than auto-generated.
function local$$1(node) {
while (!node.__brush) if (!(node = node.parentNode)) return;
return node.__brush;
}
function empty(extent) {
return extent[0][0] === extent[1][0]
|| extent[0][1] === extent[1][1];
}
function brushSelection(node) {
var state = node.__brush;
return state ? state.dim.output(state.selection) : null;
}
function brushX() {
return brush$1(X);
}
function brushY() {
return brush$1(Y);
}
var brush = function() {
return brush$1(XY);
};
function brush$1(dim) {
var extent = defaultExtent,
filter = defaultFilter,
listeners = dispatch(brush, "start", "brush", "end"),
handleSize = 6,
touchending;
function brush(group) {
var overlay = group
.property("__brush", initialize)
.selectAll(".overlay")
.data([type("overlay")]);
overlay.enter().append("rect")
.attr("class", "overlay")
.attr("pointer-events", "all")
.attr("cursor", cursors.overlay)
.merge(overlay)
.each(function() {
var extent = local$$1(this).extent;
select(this)
.attr("x", extent[0][0])
.attr("y", extent[0][1])
.attr("width", extent[1][0] - extent[0][0])
.attr("height", extent[1][1] - extent[0][1]);
});
group.selectAll(".selection")
.data([type("selection")])
.enter().append("rect")
.attr("class", "selection")
.attr("cursor", cursors.selection)
.attr("fill", "#777")
.attr("fill-opacity", 0.3)
.attr("stroke", "#fff")
.attr("shape-rendering", "crispEdges");
var handle = group.selectAll(".handle")
.data(dim.handles, function(d) { return d.type; });
handle.exit().remove();
handle.enter().append("rect")
.attr("class", function(d) { return "handle handle--" + d.type; })
.attr("cursor", function(d) { return cursors[d.type]; });
group
.each(redraw)
.attr("fill", "none")
.attr("pointer-events", "all")
.style("-webkit-tap-highlight-color", "rgba(0,0,0,0)")
.on("mousedown.brush touchstart.brush", started);
}
brush.move = function(group, selection$$1) {
if (group.selection) {
group
.on("start.brush", function() { emitter(this, arguments).beforestart().start(); })
.on("interrupt.brush end.brush", function() { emitter(this, arguments).end(); })
.tween("brush", function() {
var that = this,
state = that.__brush,
emit = emitter(that, arguments),
selection0 = state.selection,
selection1 = dim.input(typeof selection$$1 === "function" ? selection$$1.apply(this, arguments) : selection$$1, state.extent),
i = interpolateValue(selection0, selection1);
function tween(t) {
state.selection = t === 1 && empty(selection1) ? null : i(t);
redraw.call(that);
emit.brush();
}
return selection0 && selection1 ? tween : tween(1);
});
} else {
group
.each(function() {
var that = this,
args = arguments,
state = that.__brush,
selection1 = dim.input(typeof selection$$1 === "function" ? selection$$1.apply(that, args) : selection$$1, state.extent),
emit = emitter(that, args).beforestart();
interrupt(that);
state.selection = selection1 == null || empty(selection1) ? null : selection1;
redraw.call(that);
emit.start().brush().end();
});
}
};
function redraw() {
var group = select(this),
selection$$1 = local$$1(this).selection;
if (selection$$1) {
group.selectAll(".selection")
.style("display", null)
.attr("x", selection$$1[0][0])
.attr("y", selection$$1[0][1])
.attr("width", selection$$1[1][0] - selection$$1[0][0])
.attr("height", selection$$1[1][1] - selection$$1[0][1]);
group.selectAll(".handle")
.style("display", null)
.attr("x", function(d) { return d.type[d.type.length - 1] === "e" ? selection$$1[1][0] - handleSize / 2 : selection$$1[0][0] - handleSize / 2; })
.attr("y", function(d) { return d.type[0] === "s" ? selection$$1[1][1] - handleSize / 2 : selection$$1[0][1] - handleSize / 2; })
.attr("width", function(d) { return d.type === "n" || d.type === "s" ? selection$$1[1][0] - selection$$1[0][0] + handleSize : handleSize; })
.attr("height", function(d) { return d.type === "e" || d.type === "w" ? selection$$1[1][1] - selection$$1[0][1] + handleSize : handleSize; });
}
else {
group.selectAll(".selection,.handle")
.style("display", "none")
.attr("x", null)
.attr("y", null)
.attr("width", null)
.attr("height", null);
}
}
function emitter(that, args) {
return that.__brush.emitter || new Emitter(that, args);
}
function Emitter(that, args) {
this.that = that;
this.args = args;
this.state = that.__brush;
this.active = 0;
}
Emitter.prototype = {
beforestart: function() {
if (++this.active === 1) this.state.emitter = this, this.starting = true;
return this;
},
start: function() {
if (this.starting) this.starting = false, this.emit("start");
return this;
},
brush: function() {
this.emit("brush");
return this;
},
end: function() {
if (--this.active === 0) delete this.state.emitter, this.emit("end");
return this;
},
emit: function(type) {
customEvent(new BrushEvent(brush, type, dim.output(this.state.selection)), listeners.apply, listeners, [type, this.that, this.args]);
}
};
function started() {
if (exports.event.touches) { if (exports.event.changedTouches.length < exports.event.touches.length) return noevent$1(); }
else if (touchending) return;
if (!filter.apply(this, arguments)) return;
var that = this,
type = exports.event.target.__data__.type,
mode = (exports.event.metaKey ? type = "overlay" : type) === "selection" ? MODE_DRAG : (exports.event.altKey ? MODE_CENTER : MODE_HANDLE),
signX = dim === Y ? null : signsX[type],
signY = dim === X ? null : signsY[type],
state = local$$1(that),
extent = state.extent,
selection$$1 = state.selection,
W = extent[0][0], w0, w1,
N = extent[0][1], n0, n1,
E = extent[1][0], e0, e1,
S = extent[1][1], s0, s1,
dx,
dy,
moving,
shifting = signX && signY && exports.event.shiftKey,
lockX,
lockY,
point0 = mouse(that),
point = point0,
emit = emitter(that, arguments).beforestart();
if (type === "overlay") {
state.selection = selection$$1 = [
[w0 = dim === Y ? W : point0[0], n0 = dim === X ? N : point0[1]],
[e0 = dim === Y ? E : w0, s0 = dim === X ? S : n0]
];
} else {
w0 = selection$$1[0][0];
n0 = selection$$1[0][1];
e0 = selection$$1[1][0];
s0 = selection$$1[1][1];
}
w1 = w0;
n1 = n0;
e1 = e0;
s1 = s0;
var group = select(that)
.attr("pointer-events", "none");
var overlay = group.selectAll(".overlay")
.attr("cursor", cursors[type]);
if (exports.event.touches) {
group
.on("touchmove.brush", moved, true)
.on("touchend.brush touchcancel.brush", ended, true);
} else {
var view = select(exports.event.view)
.on("keydown.brush", keydowned, true)
.on("keyup.brush", keyupped, true)
.on("mousemove.brush", moved, true)
.on("mouseup.brush", ended, true);
dragDisable(exports.event.view);
}
nopropagation$1();
interrupt(that);
redraw.call(that);
emit.start();
function moved() {
var point1 = mouse(that);
if (shifting && !lockX && !lockY) {
if (Math.abs(point1[0] - point[0]) > Math.abs(point1[1] - point[1])) lockY = true;
else lockX = true;
}
point = point1;
moving = true;
noevent$1();
move();
}
function move() {
var t;
dx = point[0] - point0[0];
dy = point[1] - point0[1];
switch (mode) {
case MODE_SPACE:
case MODE_DRAG: {
if (signX) dx = Math.max(W - w0, Math.min(E - e0, dx)), w1 = w0 + dx, e1 = e0 + dx;
if (signY) dy = Math.max(N - n0, Math.min(S - s0, dy)), n1 = n0 + dy, s1 = s0 + dy;
break;
}
case MODE_HANDLE: {
if (signX < 0) dx = Math.max(W - w0, Math.min(E - w0, dx)), w1 = w0 + dx, e1 = e0;
else if (signX > 0) dx = Math.max(W - e0, Math.min(E - e0, dx)), w1 = w0, e1 = e0 + dx;
if (signY < 0) dy = Math.max(N - n0, Math.min(S - n0, dy)), n1 = n0 + dy, s1 = s0;
else if (signY > 0) dy = Math.max(N - s0, Math.min(S - s0, dy)), n1 = n0, s1 = s0 + dy;
break;
}
case MODE_CENTER: {
if (signX) w1 = Math.max(W, Math.min(E, w0 - dx * signX)), e1 = Math.max(W, Math.min(E, e0 + dx * signX));
if (signY) n1 = Math.max(N, Math.min(S, n0 - dy * signY)), s1 = Math.max(N, Math.min(S, s0 + dy * signY));
break;
}
}
if (e1 < w1) {
signX *= -1;
t = w0, w0 = e0, e0 = t;
t = w1, w1 = e1, e1 = t;
if (type in flipX) overlay.attr("cursor", cursors[type = flipX[type]]);
}
if (s1 < n1) {
signY *= -1;
t = n0, n0 = s0, s0 = t;
t = n1, n1 = s1, s1 = t;
if (type in flipY) overlay.attr("cursor", cursors[type = flipY[type]]);
}
if (state.selection) selection$$1 = state.selection; // May be set by brush.move!
if (lockX) w1 = selection$$1[0][0], e1 = selection$$1[1][0];
if (lockY) n1 = selection$$1[0][1], s1 = selection$$1[1][1];
if (selection$$1[0][0] !== w1
|| selection$$1[0][1] !== n1
|| selection$$1[1][0] !== e1
|| selection$$1[1][1] !== s1) {
state.selection = [[w1, n1], [e1, s1]];
redraw.call(that);
emit.brush();
}
}
function ended() {
nopropagation$1();
if (exports.event.touches) {
if (exports.event.touches.length) return;
if (touchending) clearTimeout(touchending);
touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!
group.on("touchmove.brush touchend.brush touchcancel.brush", null);
} else {
yesdrag(exports.event.view, moving);
view.on("keydown.brush keyup.brush mousemove.brush mouseup.brush", null);
}
group.attr("pointer-events", "all");
overlay.attr("cursor", cursors.overlay);
if (state.selection) selection$$1 = state.selection; // May be set by brush.move (on start)!
if (empty(selection$$1)) state.selection = null, redraw.call(that);
emit.end();
}
function keydowned() {
switch (exports.event.keyCode) {
case 16: { // SHIFT
shifting = signX && signY;
break;
}
case 18: { // ALT
if (mode === MODE_HANDLE) {
if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;
if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;
mode = MODE_CENTER;
move();
}
break;
}
case 32: { // SPACE; takes priority over ALT
if (mode === MODE_HANDLE || mode === MODE_CENTER) {
if (signX < 0) e0 = e1 - dx; else if (signX > 0) w0 = w1 - dx;
if (signY < 0) s0 = s1 - dy; else if (signY > 0) n0 = n1 - dy;
mode = MODE_SPACE;
overlay.attr("cursor", cursors.selection);
move();
}
break;
}
default: return;
}
noevent$1();
}
function keyupped() {
switch (exports.event.keyCode) {
case 16: { // SHIFT
if (shifting) {
lockX = lockY = shifting = false;
move();
}
break;
}
case 18: { // ALT
if (mode === MODE_CENTER) {
if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;
if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;
mode = MODE_HANDLE;
move();
}
break;
}
case 32: { // SPACE
if (mode === MODE_SPACE) {
if (exports.event.altKey) {
if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;
if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;
mode = MODE_CENTER;
} else {
if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;
if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;
mode = MODE_HANDLE;
}
overlay.attr("cursor", cursors[type]);
move();
}
break;
}
default: return;
}
noevent$1();
}
}
function initialize() {
var state = this.__brush || {selection: null};
state.extent = extent.apply(this, arguments);
state.dim = dim;
return state;
}
brush.extent = function(_) {
return arguments.length ? (extent = typeof _ === "function" ? _ : constant$4([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), brush) : extent;
};
brush.filter = function(_) {
return arguments.length ? (filter = typeof _ === "function" ? _ : constant$4(!!_), brush) : filter;
};
brush.handleSize = function(_) {
return arguments.length ? (handleSize = +_, brush) : handleSize;
};
brush.on = function() {
var value = listeners.on.apply(listeners, arguments);
return value === listeners ? brush : value;
};
return brush;
}
var cos = Math.cos;
var sin = Math.sin;
var pi$1 = Math.PI;
var halfPi$1 = pi$1 / 2;
var tau$1 = pi$1 * 2;
var max$1 = Math.max;
function compareValue(compare) {
return function(a, b) {
return compare(
a.source.value + a.target.value,
b.source.value + b.target.value
);
};
}
var chord = function() {
var padAngle = 0,
sortGroups = null,
sortSubgroups = null,
sortChords = null;
function chord(matrix) {
var n = matrix.length,
groupSums = [],
groupIndex = range(n),
subgroupIndex = [],
chords = [],
groups = chords.groups = new Array(n),
subgroups = new Array(n * n),
k,
x,
x0,
dx,
i,
j;
// Compute the sum.
k = 0, i = -1; while (++i < n) {
x = 0, j = -1; while (++j < n) {
x += matrix[i][j];
}
groupSums.push(x);
subgroupIndex.push(range(n));
k += x;
}
// Sort groups…
if (sortGroups) groupIndex.sort(function(a, b) {
return sortGroups(groupSums[a], groupSums[b]);
});
// Sort subgroups…
if (sortSubgroups) subgroupIndex.forEach(function(d, i) {
d.sort(function(a, b) {
return sortSubgroups(matrix[i][a], matrix[i][b]);
});
});
// Convert the sum to scaling factor for [0, 2pi].
// TODO Allow start and end angle to be specified?
// TODO Allow padding to be specified as percentage?
k = max$1(0, tau$1 - padAngle * n) / k;
dx = k ? padAngle : tau$1 / n;
// Compute the start and end angle for each group and subgroup.
// Note: Opera has a bug reordering object literal properties!
x = 0, i = -1; while (++i < n) {
x0 = x, j = -1; while (++j < n) {
var di = groupIndex[i],
dj = subgroupIndex[di][j],
v = matrix[di][dj],
a0 = x,
a1 = x += v * k;
subgroups[dj * n + di] = {
index: di,
subindex: dj,
startAngle: a0,
endAngle: a1,
value: v
};
}
groups[di] = {
index: di,
startAngle: x0,
endAngle: x,
value: groupSums[di]
};
x += dx;
}
// Generate chords for each (non-empty) subgroup-subgroup link.
i = -1; while (++i < n) {
j = i - 1; while (++j < n) {
var source = subgroups[j * n + i],
target = subgroups[i * n + j];
if (source.value || target.value) {
chords.push(source.value < target.value
? {source: target, target: source}
: {source: source, target: target});
}
}
}
return sortChords ? chords.sort(sortChords) : chords;
}
chord.padAngle = function(_) {
return arguments.length ? (padAngle = max$1(0, _), chord) : padAngle;
};
chord.sortGroups = function(_) {
return arguments.length ? (sortGroups = _, chord) : sortGroups;
};
chord.sortSubgroups = function(_) {
return arguments.length ? (sortSubgroups = _, chord) : sortSubgroups;
};
chord.sortChords = function(_) {
return arguments.length ? (_ == null ? sortChords = null : (sortChords = compareValue(_))._ = _, chord) : sortChords && sortChords._;
};
return chord;
};
var slice$2 = Array.prototype.slice;
var constant$5 = function(x) {
return function() {
return x;
};
};
var pi$2 = Math.PI;
var tau$2 = 2 * pi$2;
var epsilon$1 = 1e-6;
var tauEpsilon = tau$2 - epsilon$1;
function Path() {
this._x0 = this._y0 = // start of current subpath
this._x1 = this._y1 = null; // end of current subpath
this._ = "";
}
function path() {
return new Path;
}
Path.prototype = path.prototype = {
constructor: Path,
moveTo: function(x, y) {
this._ += "M" + (this._x0 = this._x1 = +x) + "," + (this._y0 = this._y1 = +y);
},
closePath: function() {
if (this._x1 !== null) {
this._x1 = this._x0, this._y1 = this._y0;
this._ += "Z";
}
},
lineTo: function(x, y) {
this._ += "L" + (this._x1 = +x) + "," + (this._y1 = +y);
},
quadraticCurveTo: function(x1, y1, x, y) {
this._ += "Q" + (+x1) + "," + (+y1) + "," + (this._x1 = +x) + "," + (this._y1 = +y);
},
bezierCurveTo: function(x1, y1, x2, y2, x, y) {
this._ += "C" + (+x1) + "," + (+y1) + "," + (+x2) + "," + (+y2) + "," + (this._x1 = +x) + "," + (this._y1 = +y);
},
arcTo: function(x1, y1, x2, y2, r) {
x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;
var x0 = this._x1,
y0 = this._y1,
x21 = x2 - x1,
y21 = y2 - y1,
x01 = x0 - x1,
y01 = y0 - y1,
l01_2 = x01 * x01 + y01 * y01;
// Is the radius negative? Error.
if (r < 0) throw new Error("negative radius: " + r);
// Is this path empty? Move to (x1,y1).
if (this._x1 === null) {
this._ += "M" + (this._x1 = x1) + "," + (this._y1 = y1);
}
// Or, is (x1,y1) coincident with (x0,y0)? Do nothing.
else if (!(l01_2 > epsilon$1)) {}
// Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?
// Equivalently, is (x1,y1) coincident with (x2,y2)?
// Or, is the radius zero? Line to (x1,y1).
else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon$1) || !r) {
this._ += "L" + (this._x1 = x1) + "," + (this._y1 = y1);
}
// Otherwise, draw an arc!
else {
var x20 = x2 - x0,
y20 = y2 - y0,
l21_2 = x21 * x21 + y21 * y21,
l20_2 = x20 * x20 + y20 * y20,
l21 = Math.sqrt(l21_2),
l01 = Math.sqrt(l01_2),
l = r * Math.tan((pi$2 - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),
t01 = l / l01,
t21 = l / l21;
// If the start tangent is not coincident with (x0,y0), line to.
if (Math.abs(t01 - 1) > epsilon$1) {
this._ += "L" + (x1 + t01 * x01) + "," + (y1 + t01 * y01);
}
this._ += "A" + r + "," + r + ",0,0," + (+(y01 * x20 > x01 * y20)) + "," + (this._x1 = x1 + t21 * x21) + "," + (this._y1 = y1 + t21 * y21);
}
},
arc: function(x, y, r, a0, a1, ccw) {
x = +x, y = +y, r = +r;
var dx = r * Math.cos(a0),
dy = r * Math.sin(a0),
x0 = x + dx,
y0 = y + dy,
cw = 1 ^ ccw,
da = ccw ? a0 - a1 : a1 - a0;
// Is the radius negative? Error.
if (r < 0) throw new Error("negative radius: " + r);
// Is this path empty? Move to (x0,y0).
if (this._x1 === null) {
this._ += "M" + x0 + "," + y0;
}
// Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).
else if (Math.abs(this._x1 - x0) > epsilon$1 || Math.abs(this._y1 - y0) > epsilon$1) {
this._ += "L" + x0 + "," + y0;
}
// Is this arc empty? We’re done.
if (!r) return;
// Does the angle go the wrong way? Flip the direction.
if (da < 0) da = da % tau$2 + tau$2;
// Is this a complete circle? Draw two arcs to complete the circle.
if (da > tauEpsilon) {
this._ += "A" + r + "," + r + ",0,1," + cw + "," + (x - dx) + "," + (y - dy) + "A" + r + "," + r + ",0,1," + cw + "," + (this._x1 = x0) + "," + (this._y1 = y0);
}
// Is this arc non-empty? Draw an arc!
else if (da > epsilon$1) {
this._ += "A" + r + "," + r + ",0," + (+(da >= pi$2)) + "," + cw + "," + (this._x1 = x + r * Math.cos(a1)) + "," + (this._y1 = y + r * Math.sin(a1));
}
},
rect: function(x, y, w, h) {
this._ += "M" + (this._x0 = this._x1 = +x) + "," + (this._y0 = this._y1 = +y) + "h" + (+w) + "v" + (+h) + "h" + (-w) + "Z";
},
toString: function() {
return this._;
}
};
function defaultSource(d) {
return d.source;
}
function defaultTarget(d) {
return d.target;
}
function defaultRadius(d) {
return d.radius;
}
function defaultStartAngle(d) {
return d.startAngle;
}
function defaultEndAngle(d) {
return d.endAngle;
}
var ribbon = function() {
var source = defaultSource,
target = defaultTarget,
radius = defaultRadius,
startAngle = defaultStartAngle,
endAngle = defaultEndAngle,
context = null;
function ribbon() {
var buffer,
argv = slice$2.call(arguments),
s = source.apply(this, argv),
t = target.apply(this, argv),
sr = +radius.apply(this, (argv[0] = s, argv)),
sa0 = startAngle.apply(this, argv) - halfPi$1,
sa1 = endAngle.apply(this, argv) - halfPi$1,
sx0 = sr * cos(sa0),
sy0 = sr * sin(sa0),
tr = +radius.apply(this, (argv[0] = t, argv)),
ta0 = startAngle.apply(this, argv) - halfPi$1,
ta1 = endAngle.apply(this, argv) - halfPi$1;
if (!context) context = buffer = path();
context.moveTo(sx0, sy0);
context.arc(0, 0, sr, sa0, sa1);
if (sa0 !== ta0 || sa1 !== ta1) { // TODO sr !== tr?
context.quadraticCurveTo(0, 0, tr * cos(ta0), tr * sin(ta0));
context.arc(0, 0, tr, ta0, ta1);
}
context.quadraticCurveTo(0, 0, sx0, sy0);
context.closePath();
if (buffer) return context = null, buffer + "" || null;
}
ribbon.radius = function(_) {
return arguments.length ? (radius = typeof _ === "function" ? _ : constant$5(+_), ribbon) : radius;
};
ribbon.startAngle = function(_) {
return arguments.length ? (startAngle = typeof _ === "function" ? _ : constant$5(+_), ribbon) : startAngle;
};
ribbon.endAngle = function(_) {
return arguments.length ? (endAngle = typeof _ === "function" ? _ : constant$5(+_), ribbon) : endAngle;
};
ribbon.source = function(_) {
return arguments.length ? (source = _, ribbon) : source;
};
ribbon.target = function(_) {
return arguments.length ? (target = _, ribbon) : target;
};
ribbon.context = function(_) {
return arguments.length ? ((context = _ == null ? null : _), ribbon) : context;
};
return ribbon;
};
var prefix = "$";
function Map() {}
Map.prototype = map$1.prototype = {
constructor: Map,
has: function(key) {
return (prefix + key) in this;
},
get: function(key) {
return this[prefix + key];
},
set: function(key, value) {
this[prefix + key] = value;
return this;
},
remove: function(key) {
var property = prefix + key;
return property in this && delete this[property];
},
clear: function() {
for (var property in this) if (property[0] === prefix) delete this[property];
},
keys: function() {
var keys = [];
for (var property in this) if (property[0] === prefix) keys.push(property.slice(1));
return keys;
},
values: function() {
var values = [];
for (var property in this) if (property[0] === prefix) values.push(this[property]);
return values;
},
entries: function() {
var entries = [];
for (var property in this) if (property[0] === prefix) entries.push({key: property.slice(1), value: this[property]});
return entries;
},
size: function() {
var size = 0;
for (var property in this) if (property[0] === prefix) ++size;
return size;
},
empty: function() {
for (var property in this) if (property[0] === prefix) return false;
return true;
},
each: function(f) {
for (var property in this) if (property[0] === prefix) f(this[property], property.slice(1), this);
}
};
function map$1(object, f) {
var map = new Map;
// Copy constructor.
if (object instanceof Map) object.each(function(value, key) { map.set(key, value); });
// Index array by numeric index or specified key function.
else if (Array.isArray(object)) {
var i = -1,
n = object.length,
o;
if (f == null) while (++i < n) map.set(i, object[i]);
else while (++i < n) map.set(f(o = object[i], i, object), o);
}
// Convert object to map.
else if (object) for (var key in object) map.set(key, object[key]);
return map;
}
var nest = function() {
var keys = [],
sortKeys = [],
sortValues,
rollup,
nest;
function apply(array, depth, createResult, setResult) {
if (depth >= keys.length) return rollup != null
? rollup(array) : (sortValues != null
? array.sort(sortValues)
: array);
var i = -1,
n = array.length,
key = keys[depth++],
keyValue,
value,
valuesByKey = map$1(),
values,
result = createResult();
while (++i < n) {
if (values = valuesByKey.get(keyValue = key(value = array[i]) + "")) {
values.push(value);
} else {
valuesByKey.set(keyValue, [value]);
}
}
valuesByKey.each(function(values, key) {
setResult(result, key, apply(values, depth, createResult, setResult));
});
return result;
}
function entries(map, depth) {
if (++depth > keys.length) return map;
var array, sortKey = sortKeys[depth - 1];
if (rollup != null && depth >= keys.length) array = map.entries();
else array = [], map.each(function(v, k) { array.push({key: k, values: entries(v, depth)}); });
return sortKey != null ? array.sort(function(a, b) { return sortKey(a.key, b.key); }) : array;
}
return nest = {
object: function(array) { return apply(array, 0, createObject, setObject); },
map: function(array) { return apply(array, 0, createMap, setMap); },
entries: function(array) { return entries(apply(array, 0, createMap, setMap), 0); },
key: function(d) { keys.push(d); return nest; },
sortKeys: function(order) { sortKeys[keys.length - 1] = order; return nest; },
sortValues: function(order) { sortValues = order; return nest; },
rollup: function(f) { rollup = f; return nest; }
};
};
function createObject() {
return {};
}
function setObject(object, key, value) {
object[key] = value;
}
function createMap() {
return map$1();
}
function setMap(map, key, value) {
map.set(key, value);
}
function Set() {}
var proto = map$1.prototype;
Set.prototype = set$2.prototype = {
constructor: Set,
has: proto.has,
add: function(value) {
value += "";
this[prefix + value] = value;
return this;
},
remove: proto.remove,
clear: proto.clear,
values: proto.keys,
size: proto.size,
empty: proto.empty,
each: proto.each
};
function set$2(object, f) {
var set = new Set;
// Copy constructor.
if (object instanceof Set) object.each(function(value) { set.add(value); });
// Otherwise, assume it’s an array.
else if (object) {
var i = -1, n = object.length;
if (f == null) while (++i < n) set.add(object[i]);
else while (++i < n) set.add(f(object[i], i, object));
}
return set;
}
var d3keys = function(map) {
var keys = [];
for (var key in map) keys.push(key);
return keys;
};
var values = function(map) {
var values = [];
for (var key in map) values.push(map[key]);
return values;
};
var entries = function(map) {
var entries = [];
for (var key in map) entries.push({key: key, value: map[key]});
return entries;
};
function objectConverter(columns) {
return new Function("d", "return {" + columns.map(function(name, i) {
return JSON.stringify(name) + ": d[" + i + "]";
}).join(",") + "}");
}
function customConverter(columns, f) {
var object = objectConverter(columns);
return function(row, i) {
return f(object(row), i, columns);
};
}
// Compute unique columns in order of discovery.
function inferColumns(rows) {
var columnSet = Object.create(null),
columns = [];
rows.forEach(function(row) {
for (var column in row) {
if (!(column in columnSet)) {
columns.push(columnSet[column] = column);
}
}
});
return columns;
}
var dsv = function(delimiter) {
var reFormat = new RegExp("[\"" + delimiter + "\n\r]"),
delimiterCode = delimiter.charCodeAt(0);
function parse(text, f) {
var convert, columns, rows = parseRows(text, function(row, i) {
if (convert) return convert(row, i - 1);
columns = row, convert = f ? customConverter(row, f) : objectConverter(row);
});
rows.columns = columns;
return rows;
}
function parseRows(text, f) {
var EOL = {}, // sentinel value for end-of-line
EOF = {}, // sentinel value for end-of-file
rows = [], // output rows
N = text.length,
I = 0, // current character index
n = 0, // the current line number
t, // the current token
eol; // is the current token followed by EOL?
function token() {
if (I >= N) return EOF; // special case: end of file
if (eol) return eol = false, EOL; // special case: end of line
// special case: quotes
var j = I, c;
if (text.charCodeAt(j) === 34) {
var i = j;
while (i++ < N) {
if (text.charCodeAt(i) === 34) {
if (text.charCodeAt(i + 1) !== 34) break;
++i;
}
}
I = i + 2;
c = text.charCodeAt(i + 1);
if (c === 13) {
eol = true;
if (text.charCodeAt(i + 2) === 10) ++I;
} else if (c === 10) {
eol = true;
}
return text.slice(j + 1, i).replace(/""/g, "\"");
}
// common case: find next delimiter or newline
while (I < N) {
var k = 1;
c = text.charCodeAt(I++);
if (c === 10) eol = true; // \n
else if (c === 13) { eol = true; if (text.charCodeAt(I) === 10) ++I, ++k; } // \r|\r\n
else if (c !== delimiterCode) continue;
return text.slice(j, I - k);
}
// special case: last token before EOF
return text.slice(j);
}
while ((t = token()) !== EOF) {
var a = [];
while (t !== EOL && t !== EOF) {
a.push(t);
t = token();
}
if (f && (a = f(a, n++)) == null) continue;
rows.push(a);
}
return rows;
}
function format(rows, columns) {
if (columns == null) columns = inferColumns(rows);
return [columns.map(formatValue).join(delimiter)].concat(rows.map(function(row) {
return columns.map(function(column) {
return formatValue(row[column]);
}).join(delimiter);
})).join("\n");
}
function formatRows(rows) {
return rows.map(formatRow).join("\n");
}
function formatRow(row) {
return row.map(formatValue).join(delimiter);
}
function formatValue(text) {
return text == null ? ""
: reFormat.test(text += "") ? "\"" + text.replace(/\"/g, "\"\"") + "\""
: text;
}
return {
parse: parse,
parseRows: parseRows,
format: format,
formatRows: formatRows
};
};
var csv = dsv(",");
var csvParse = csv.parse;
var csvParseRows = csv.parseRows;
var csvFormat = csv.format;
var csvFormatRows = csv.formatRows;
var tsv = dsv("\t");
var tsvParse = tsv.parse;
var tsvParseRows = tsv.parseRows;
var tsvFormat = tsv.format;
var tsvFormatRows = tsv.formatRows;
var center$1 = function(x, y) {
var nodes;
if (x == null) x = 0;
if (y == null) y = 0;
function force() {
var i,
n = nodes.length,
node,
sx = 0,
sy = 0;
for (i = 0; i < n; ++i) {
node = nodes[i], sx += node.x, sy += node.y;
}
for (sx = sx / n - x, sy = sy / n - y, i = 0; i < n; ++i) {
node = nodes[i], node.x -= sx, node.y -= sy;
}
}
force.initialize = function(_) {
nodes = _;
};
force.x = function(_) {
return arguments.length ? (x = +_, force) : x;
};
force.y = function(_) {
return arguments.length ? (y = +_, force) : y;
};
return force;
};
var constant$6 = function(x) {
return function() {
return x;
};
};
var jiggle = function() {
return (Math.random() - 0.5) * 1e-6;
};
var tree_add = function(d) {
var x = +this._x.call(null, d),
y = +this._y.call(null, d);
return add(this.cover(x, y), x, y, d);
};
function add(tree, x, y, d) {
if (isNaN(x) || isNaN(y)) return tree; // ignore invalid points
var parent,
node = tree._root,
leaf = {data: d},
x0 = tree._x0,
y0 = tree._y0,
x1 = tree._x1,
y1 = tree._y1,
xm,
ym,
xp,
yp,
right,
bottom,
i,
j;
// If the tree is empty, initialize the root as a leaf.
if (!node) return tree._root = leaf, tree;
// Find the existing leaf for the new point, or add it.
while (node.length) {
if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;
if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;
if (parent = node, !(node = node[i = bottom << 1 | right])) return parent[i] = leaf, tree;
}
// Is the new point is exactly coincident with the existing point?
xp = +tree._x.call(null, node.data);
yp = +tree._y.call(null, node.data);
if (x === xp && y === yp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree;
// Otherwise, split the leaf node until the old and new point are separated.
do {
parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4);
if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;
if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;
} while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | (xp >= xm)));
return parent[j] = node, parent[i] = leaf, tree;
}
function addAll(data) {
var d, i, n = data.length,
x,
y,
xz = new Array(n),
yz = new Array(n),
x0 = Infinity,
y0 = Infinity,
x1 = -Infinity,
y1 = -Infinity;
// Compute the points and their extent.
for (i = 0; i < n; ++i) {
if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) continue;
xz[i] = x;
yz[i] = y;
if (x < x0) x0 = x;
if (x > x1) x1 = x;
if (y < y0) y0 = y;
if (y > y1) y1 = y;
}
// If there were no (valid) points, inherit the existing extent.
if (x1 < x0) x0 = this._x0, x1 = this._x1;
if (y1 < y0) y0 = this._y0, y1 = this._y1;
// Expand the tree to cover the new points.
this.cover(x0, y0).cover(x1, y1);
// Add the new points.
for (i = 0; i < n; ++i) {
add(this, xz[i], yz[i], data[i]);
}
return this;
}
var tree_cover = function(x, y) {
if (isNaN(x = +x) || isNaN(y = +y)) return this; // ignore invalid points
var x0 = this._x0,
y0 = this._y0,
x1 = this._x1,
y1 = this._y1;
// If the quadtree has no extent, initialize them.
// Integer extent are necessary so that if we later double the extent,
// the existing quadrant boundaries don’t change due to floating point error!
if (isNaN(x0)) {
x1 = (x0 = Math.floor(x)) + 1;
y1 = (y0 = Math.floor(y)) + 1;
}
// Otherwise, double repeatedly to cover.
else if (x0 > x || x > x1 || y0 > y || y > y1) {
var z = x1 - x0,
node = this._root,
parent,
i;
switch (i = (y < (y0 + y1) / 2) << 1 | (x < (x0 + x1) / 2)) {
case 0: {
do parent = new Array(4), parent[i] = node, node = parent;
while (z *= 2, x1 = x0 + z, y1 = y0 + z, x > x1 || y > y1);
break;
}
case 1: {
do parent = new Array(4), parent[i] = node, node = parent;
while (z *= 2, x0 = x1 - z, y1 = y0 + z, x0 > x || y > y1);
break;
}
case 2: {
do parent = new Array(4), parent[i] = node, node = parent;
while (z *= 2, x1 = x0 + z, y0 = y1 - z, x > x1 || y0 > y);
break;
}
case 3: {
do parent = new Array(4), parent[i] = node, node = parent;
while (z *= 2, x0 = x1 - z, y0 = y1 - z, x0 > x || y0 > y);
break;
}
}
if (this._root && this._root.length) this._root = node;
}
// If the quadtree covers the point already, just return.
else return this;
this._x0 = x0;
this._y0 = y0;
this._x1 = x1;
this._y1 = y1;
return this;
};
var tree_data = function() {
var data = [];
this.visit(function(node) {
if (!node.length) do data.push(node.data); while (node = node.next)
});
return data;
};
var tree_extent = function(_) {
return arguments.length
? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1])
: isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]];
};
var Quad = function(node, x0, y0, x1, y1) {
this.node = node;
this.x0 = x0;
this.y0 = y0;
this.x1 = x1;
this.y1 = y1;
};
var tree_find = function(x, y, radius) {
var data,
x0 = this._x0,
y0 = this._y0,
x1,
y1,
x2,
y2,
x3 = this._x1,
y3 = this._y1,
quads = [],
node = this._root,
q,
i;
if (node) quads.push(new Quad(node, x0, y0, x3, y3));
if (radius == null) radius = Infinity;
else {
x0 = x - radius, y0 = y - radius;
x3 = x + radius, y3 = y + radius;
radius *= radius;
}
while (q = quads.pop()) {
// Stop searching if this quadrant can’t contain a closer node.
if (!(node = q.node)
|| (x1 = q.x0) > x3
|| (y1 = q.y0) > y3
|| (x2 = q.x1) < x0
|| (y2 = q.y1) < y0) continue;
// Bisect the current quadrant.
if (node.length) {
var xm = (x1 + x2) / 2,
ym = (y1 + y2) / 2;
quads.push(
new Quad(node[3], xm, ym, x2, y2),
new Quad(node[2], x1, ym, xm, y2),
new Quad(node[1], xm, y1, x2, ym),
new Quad(node[0], x1, y1, xm, ym)
);
// Visit the closest quadrant first.
if (i = (y >= ym) << 1 | (x >= xm)) {
q = quads[quads.length - 1];
quads[quads.length - 1] = quads[quads.length - 1 - i];
quads[quads.length - 1 - i] = q;
}
}
// Visit this point. (Visiting coincident points isn’t necessary!)
else {
var dx = x - +this._x.call(null, node.data),
dy = y - +this._y.call(null, node.data),
d2 = dx * dx + dy * dy;
if (d2 < radius) {
var d = Math.sqrt(radius = d2);
x0 = x - d, y0 = y - d;
x3 = x + d, y3 = y + d;
data = node.data;
}
}
}
return data;
};
var tree_remove = function(d) {
if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) return this; // ignore invalid points
var parent,
node = this._root,
retainer,
previous,
next,
x0 = this._x0,
y0 = this._y0,
x1 = this._x1,
y1 = this._y1,
x,
y,
xm,
ym,
right,
bottom,
i,
j;
// If the tree is empty, initialize the root as a leaf.
if (!node) return this;
// Find the leaf node for the point.
// While descending, also retain the deepest parent with a non-removed sibling.
if (node.length) while (true) {
if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;
if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;
if (!(parent = node, node = node[i = bottom << 1 | right])) return this;
if (!node.length) break;
if (parent[(i + 1) & 3] || parent[(i + 2) & 3] || parent[(i + 3) & 3]) retainer = parent, j = i;
}
// Find the point to remove.
while (node.data !== d) if (!(previous = node, node = node.next)) return this;
if (next = node.next) delete node.next;
// If there are multiple coincident points, remove just the point.
if (previous) return (next ? previous.next = next : delete previous.next), this;
// If this is the root point, remove it.
if (!parent) return this._root = next, this;
// Remove this leaf.
next ? parent[i] = next : delete parent[i];
// If the parent now contains exactly one leaf, collapse superfluous parents.
if ((node = parent[0] || parent[1] || parent[2] || parent[3])
&& node === (parent[3] || parent[2] || parent[1] || parent[0])
&& !node.length) {
if (retainer) retainer[j] = node;
else this._root = node;
}
return this;
};
function removeAll(data) {
for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]);
return this;
}
var tree_root = function() {
return this._root;
};
var tree_size = function() {
var size = 0;
this.visit(function(node) {
if (!node.length) do ++size; while (node = node.next)
});
return size;
};
var tree_visit = function(callback) {
var quads = [], q, node = this._root, child, x0, y0, x1, y1;
if (node) quads.push(new Quad(node, this._x0, this._y0, this._x1, this._y1));
while (q = quads.pop()) {
if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) {
var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;
if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));
if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));
if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));
if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));
}
}
return this;
};
var tree_visitAfter = function(callback) {
var quads = [], next = [], q;
if (this._root) quads.push(new Quad(this._root, this._x0, this._y0, this._x1, this._y1));
while (q = quads.pop()) {
var node = q.node;
if (node.length) {
var child, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;
if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));
if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));
if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));
if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));
}
next.push(q);
}
while (q = next.pop()) {
callback(q.node, q.x0, q.y0, q.x1, q.y1);
}
return this;
};
function defaultX(d) {
return d[0];
}
var tree_x = function(_) {
return arguments.length ? (this._x = _, this) : this._x;
};
function defaultY(d) {
return d[1];
}
var tree_y = function(_) {
return arguments.length ? (this._y = _, this) : this._y;
};
function quadtree(nodes, x, y) {
var tree = new Quadtree(x == null ? defaultX : x, y == null ? defaultY : y, NaN, NaN, NaN, NaN);
return nodes == null ? tree : tree.addAll(nodes);
}
function Quadtree(x, y, x0, y0, x1, y1) {
this._x = x;
this._y = y;
this._x0 = x0;
this._y0 = y0;
this._x1 = x1;
this._y1 = y1;
this._root = undefined;
}
function leaf_copy(leaf) {
var copy = {data: leaf.data}, next = copy;
while (leaf = leaf.next) next = next.next = {data: leaf.data};
return copy;
}
var treeProto = quadtree.prototype = Quadtree.prototype;
treeProto.copy = function() {
var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1),
node = this._root,
nodes,
child;
if (!node) return copy;
if (!node.length) return copy._root = leaf_copy(node), copy;
nodes = [{source: node, target: copy._root = new Array(4)}];
while (node = nodes.pop()) {
for (var i = 0; i < 4; ++i) {
if (child = node.source[i]) {
if (child.length) nodes.push({source: child, target: node.target[i] = new Array(4)});
else node.target[i] = leaf_copy(child);
}
}
}
return copy;
};
treeProto.add = tree_add;
treeProto.addAll = addAll;
treeProto.cover = tree_cover;
treeProto.data = tree_data;
treeProto.extent = tree_extent;
treeProto.find = tree_find;
treeProto.remove = tree_remove;
treeProto.removeAll = removeAll;
treeProto.root = tree_root;
treeProto.size = tree_size;
treeProto.visit = tree_visit;
treeProto.visitAfter = tree_visitAfter;
treeProto.x = tree_x;
treeProto.y = tree_y;
function x(d) {
return d.x + d.vx;
}
function y(d) {
return d.y + d.vy;
}
var collide = function(radius) {
var nodes,
radii,
strength = 1,
iterations = 1;
if (typeof radius !== "function") radius = constant$6(radius == null ? 1 : +radius);
function force() {
var i, n = nodes.length,
tree,
node,
xi,
yi,
ri,
ri2;
for (var k = 0; k < iterations; ++k) {
tree = quadtree(nodes, x, y).visitAfter(prepare);
for (i = 0; i < n; ++i) {
node = nodes[i];
ri = radii[node.index], ri2 = ri * ri;
xi = node.x + node.vx;
yi = node.y + node.vy;
tree.visit(apply);
}
}
function apply(quad, x0, y0, x1, y1) {
var data = quad.data, rj = quad.r, r = ri + rj;
if (data) {
if (data.index > node.index) {
var x = xi - data.x - data.vx,
y = yi - data.y - data.vy,
l = x * x + y * y;
if (l < r * r) {
if (x === 0) x = jiggle(), l += x * x;
if (y === 0) y = jiggle(), l += y * y;
l = (r - (l = Math.sqrt(l))) / l * strength;
node.vx += (x *= l) * (r = (rj *= rj) / (ri2 + rj));
node.vy += (y *= l) * r;
data.vx -= x * (r = 1 - r);
data.vy -= y * r;
}
}
return;
}
return x0 > xi + r || x1 < xi - r || y0 > yi + r || y1 < yi - r;
}
}
function prepare(quad) {
if (quad.data) return quad.r = radii[quad.data.index];
for (var i = quad.r = 0; i < 4; ++i) {
if (quad[i] && quad[i].r > quad.r) {
quad.r = quad[i].r;
}
}
}
function initialize() {
if (!nodes) return;
var i, n = nodes.length, node;
radii = new Array(n);
for (i = 0; i < n; ++i) node = nodes[i], radii[node.index] = +radius(node, i, nodes);
}
force.initialize = function(_) {
nodes = _;
initialize();
};
force.iterations = function(_) {
return arguments.length ? (iterations = +_, force) : iterations;
};
force.strength = function(_) {
return arguments.length ? (strength = +_, force) : strength;
};
force.radius = function(_) {
return arguments.length ? (radius = typeof _ === "function" ? _ : constant$6(+_), initialize(), force) : radius;
};
return force;
};
function index(d) {
return d.index;
}
function find(nodeById, nodeId) {
var node = nodeById.get(nodeId);
if (!node) throw new Error("missing: " + nodeId);
return node;
}
var link = function(links) {
var id = index,
strength = defaultStrength,
strengths,
distance = constant$6(30),
distances,
nodes,
count,
bias,
iterations = 1;
if (links == null) links = [];
function defaultStrength(link) {
return 1 / Math.min(count[link.source.index], count[link.target.index]);
}
function force(alpha) {
for (var k = 0, n = links.length; k < iterations; ++k) {
for (var i = 0, link, source, target, x, y, l, b; i < n; ++i) {
link = links[i], source = link.source, target = link.target;
x = target.x + target.vx - source.x - source.vx || jiggle();
y = target.y + target.vy - source.y - source.vy || jiggle();
l = Math.sqrt(x * x + y * y);
l = (l - distances[i]) / l * alpha * strengths[i];
x *= l, y *= l;
target.vx -= x * (b = bias[i]);
target.vy -= y * b;
source.vx += x * (b = 1 - b);
source.vy += y * b;
}
}
}
function initialize() {
if (!nodes) return;
var i,
n = nodes.length,
m = links.length,
nodeById = map$1(nodes, id),
link;
for (i = 0, count = new Array(n); i < m; ++i) {
link = links[i], link.index = i;
if (typeof link.source !== "object") link.source = find(nodeById, link.source);
if (typeof link.target !== "object") link.target = find(nodeById, link.target);
count[link.source.index] = (count[link.source.index] || 0) + 1;
count[link.target.index] = (count[link.target.index] || 0) + 1;
}
for (i = 0, bias = new Array(m); i < m; ++i) {
link = links[i], bias[i] = count[link.source.index] / (count[link.source.index] + count[link.target.index]);
}
strengths = new Array(m), initializeStrength();
distances = new Array(m), initializeDistance();
}
function initializeStrength() {
if (!nodes) return;
for (var i = 0, n = links.length; i < n; ++i) {
strengths[i] = +strength(links[i], i, links);
}
}
function initializeDistance() {
if (!nodes) return;
for (var i = 0, n = links.length; i < n; ++i) {
distances[i] = +distance(links[i], i, links);
}
}
force.initialize = function(_) {
nodes = _;
initialize();
};
force.links = function(_) {
return arguments.length ? (links = _, initialize(), force) : links;
};
force.id = function(_) {
return arguments.length ? (id = _, force) : id;
};
force.iterations = function(_) {
return arguments.length ? (iterations = +_, force) : iterations;
};
force.strength = function(_) {
return arguments.length ? (strength = typeof _ === "function" ? _ : constant$6(+_), initializeStrength(), force) : strength;
};
force.distance = function(_) {
return arguments.length ? (distance = typeof _ === "function" ? _ : constant$6(+_), initializeDistance(), force) : distance;
};
return force;
};
function x$1(d) {
return d.x;
}
function y$1(d) {
return d.y;
}
var initialRadius = 10;
var initialAngle = Math.PI * (3 - Math.sqrt(5));
var simulation = function(nodes) {
var simulation,
alpha = 1,
alphaMin = 0.001,
alphaDecay = 1 - Math.pow(alphaMin, 1 / 300),
alphaTarget = 0,
velocityDecay = 0.6,
forces = map$1(),
stepper = timer(step),
event = dispatch("tick", "end");
if (nodes == null) nodes = [];
function step() {
tick();
event.call("tick", simulation);
if (alpha < alphaMin) {
stepper.stop();
event.call("end", simulation);
}
}
function tick() {
var i, n = nodes.length, node;
alpha += (alphaTarget - alpha) * alphaDecay;
forces.each(function(force) {
force(alpha);
});
for (i = 0; i < n; ++i) {
node = nodes[i];
if (node.fx == null) node.x += node.vx *= velocityDecay;
else node.x = node.fx, node.vx = 0;
if (node.fy == null) node.y += node.vy *= velocityDecay;
else node.y = node.fy, node.vy = 0;
}
}
function initializeNodes() {
for (var i = 0, n = nodes.length, node; i < n; ++i) {
node = nodes[i], node.index = i;
if (isNaN(node.x) || isNaN(node.y)) {
var radius = initialRadius * Math.sqrt(i), angle = i * initialAngle;
node.x = radius * Math.cos(angle);
node.y = radius * Math.sin(angle);
}
if (isNaN(node.vx) || isNaN(node.vy)) {
node.vx = node.vy = 0;
}
}
}
function initializeForce(force) {
if (force.initialize) force.initialize(nodes);
return force;
}
initializeNodes();
return simulation = {
tick: tick,
restart: function() {
return stepper.restart(step), simulation;
},
stop: function() {
return stepper.stop(), simulation;
},
nodes: function(_) {
return arguments.length ? (nodes = _, initializeNodes(), forces.each(initializeForce), simulation) : nodes;
},
alpha: function(_) {
return arguments.length ? (alpha = +_, simulation) : alpha;
},
alphaMin: function(_) {
return arguments.length ? (alphaMin = +_, simulation) : alphaMin;
},
alphaDecay: function(_) {
return arguments.length ? (alphaDecay = +_, simulation) : +alphaDecay;
},
alphaTarget: function(_) {
return arguments.length ? (alphaTarget = +_, simulation) : alphaTarget;
},
velocityDecay: function(_) {
return arguments.length ? (velocityDecay = 1 - _, simulation) : 1 - velocityDecay;
},
force: function(name, _) {
return arguments.length > 1 ? ((_ == null ? forces.remove(name) : forces.set(name, initializeForce(_))), simulation) : forces.get(name);
},
find: function(x, y, radius) {
var i = 0,
n = nodes.length,
dx,
dy,
d2,
node,
closest;
if (radius == null) radius = Infinity;
else radius *= radius;
for (i = 0; i < n; ++i) {
node = nodes[i];
dx = x - node.x;
dy = y - node.y;
d2 = dx * dx + dy * dy;
if (d2 < radius) closest = node, radius = d2;
}
return closest;
},
on: function(name, _) {
return arguments.length > 1 ? (event.on(name, _), simulation) : event.on(name);
}
};
};
var manyBody = function() {
var nodes,
node,
alpha,
strength = constant$6(-30),
strengths,
distanceMin2 = 1,
distanceMax2 = Infinity,
theta2 = 0.81;
function force(_) {
var i, n = nodes.length, tree = quadtree(nodes, x$1, y$1).visitAfter(accumulate);
for (alpha = _, i = 0; i < n; ++i) node = nodes[i], tree.visit(apply);
}
function initialize() {
if (!nodes) return;
var i, n = nodes.length, node;
strengths = new Array(n);
for (i = 0; i < n; ++i) node = nodes[i], strengths[node.index] = +strength(node, i, nodes);
}
function accumulate(quad) {
var strength = 0, q, c, x$$1, y$$1, i;
// For internal nodes, accumulate forces from child quadrants.
if (quad.length) {
for (x$$1 = y$$1 = i = 0; i < 4; ++i) {
if ((q = quad[i]) && (c = q.value)) {
strength += c, x$$1 += c * q.x, y$$1 += c * q.y;
}
}
quad.x = x$$1 / strength;
quad.y = y$$1 / strength;
}
// For leaf nodes, accumulate forces from coincident quadrants.
else {
q = quad;
q.x = q.data.x;
q.y = q.data.y;
do strength += strengths[q.data.index];
while (q = q.next);
}
quad.value = strength;
}
function apply(quad, x1, _, x2) {
if (!quad.value) return true;
var x$$1 = quad.x - node.x,
y$$1 = quad.y - node.y,
w = x2 - x1,
l = x$$1 * x$$1 + y$$1 * y$$1;
// Apply the Barnes-Hut approximation if possible.
// Limit forces for very close nodes; randomize direction if coincident.
if (w * w / theta2 < l) {
if (l < distanceMax2) {
if (x$$1 === 0) x$$1 = jiggle(), l += x$$1 * x$$1;
if (y$$1 === 0) y$$1 = jiggle(), l += y$$1 * y$$1;
if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);
node.vx += x$$1 * quad.value * alpha / l;
node.vy += y$$1 * quad.value * alpha / l;
}
return true;
}
// Otherwise, process points directly.
else if (quad.length || l >= distanceMax2) return;
// Limit forces for very close nodes; randomize direction if coincident.
if (quad.data !== node || quad.next) {
if (x$$1 === 0) x$$1 = jiggle(), l += x$$1 * x$$1;
if (y$$1 === 0) y$$1 = jiggle(), l += y$$1 * y$$1;
if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);
}
do if (quad.data !== node) {
w = strengths[quad.data.index] * alpha / l;
node.vx += x$$1 * w;
node.vy += y$$1 * w;
} while (quad = quad.next);
}
force.initialize = function(_) {
nodes = _;
initialize();
};
force.strength = function(_) {
return arguments.length ? (strength = typeof _ === "function" ? _ : constant$6(+_), initialize(), force) : strength;
};
force.distanceMin = function(_) {
return arguments.length ? (distanceMin2 = _ * _, force) : Math.sqrt(distanceMin2);
};
force.distanceMax = function(_) {
return arguments.length ? (distanceMax2 = _ * _, force) : Math.sqrt(distanceMax2);
};
force.theta = function(_) {
return arguments.length ? (theta2 = _ * _, force) : Math.sqrt(theta2);
};
return force;
};
var x$2 = function(x) {
var strength = constant$6(0.1),
nodes,
strengths,
xz;
if (typeof x !== "function") x = constant$6(x == null ? 0 : +x);
function force(alpha) {
for (var i = 0, n = nodes.length, node; i < n; ++i) {
node = nodes[i], node.vx += (xz[i] - node.x) * strengths[i] * alpha;
}
}
function initialize() {
if (!nodes) return;
var i, n = nodes.length;
strengths = new Array(n);
xz = new Array(n);
for (i = 0; i < n; ++i) {
strengths[i] = isNaN(xz[i] = +x(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);
}
}
force.initialize = function(_) {
nodes = _;
initialize();
};
force.strength = function(_) {
return arguments.length ? (strength = typeof _ === "function" ? _ : constant$6(+_), initialize(), force) : strength;
};
force.x = function(_) {
return arguments.length ? (x = typeof _ === "function" ? _ : constant$6(+_), initialize(), force) : x;
};
return force;
};
var y$2 = function(y) {
var strength = constant$6(0.1),
nodes,
strengths,
yz;
if (typeof y !== "function") y = constant$6(y == null ? 0 : +y);
function force(alpha) {
for (var i = 0, n = nodes.length, node; i < n; ++i) {
node = nodes[i], node.vy += (yz[i] - node.y) * strengths[i] * alpha;
}
}
function initialize() {
if (!nodes) return;
var i, n = nodes.length;
strengths = new Array(n);
yz = new Array(n);
for (i = 0; i < n; ++i) {
strengths[i] = isNaN(yz[i] = +y(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);
}
}
force.initialize = function(_) {
nodes = _;
initialize();
};
force.strength = function(_) {
return arguments.length ? (strength = typeof _ === "function" ? _ : constant$6(+_), initialize(), force) : strength;
};
force.y = function(_) {
return arguments.length ? (y = typeof _ === "function" ? _ : constant$6(+_), initialize(), force) : y;
};
return force;
};
// Computes the decimal coefficient and exponent of the specified number x with
// significant digits p, where x is positive and p is in [1, 21] or undefined.
// For example, formatDecimal(1.23) returns ["123", 0].
var formatDecimal = function(x, p) {
if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf("e")) < 0) return null; // NaN, ±Infinity
var i, coefficient = x.slice(0, i);
// The string returned by toExponential either has the form \d\.\d+e[-+]\d+
// (e.g., 1.2e+3) or the form \de[-+]\d+ (e.g., 1e+3).
return [
coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,
+x.slice(i + 1)
];
};
var exponent$1 = function(x) {
return x = formatDecimal(Math.abs(x)), x ? x[1] : NaN;
};
var formatGroup = function(grouping, thousands) {
return function(value, width) {
var i = value.length,
t = [],
j = 0,
g = grouping[0],
length = 0;
while (i > 0 && g > 0) {
if (length + g + 1 > width) g = Math.max(1, width - length);
t.push(value.substring(i -= g, i + g));
if ((length += g + 1) > width) break;
g = grouping[j = (j + 1) % grouping.length];
}
return t.reverse().join(thousands);
};
};
var formatNumerals = function(numerals) {
return function(value) {
return value.replace(/[0-9]/g, function(i) {
return numerals[+i];
});
};
};
var formatDefault = function(x, p) {
x = x.toPrecision(p);
out: for (var n = x.length, i = 1, i0 = -1, i1; i < n; ++i) {
switch (x[i]) {
case ".": i0 = i1 = i; break;
case "0": if (i0 === 0) i0 = i; i1 = i; break;
case "e": break out;
default: if (i0 > 0) i0 = 0; break;
}
}
return i0 > 0 ? x.slice(0, i0) + x.slice(i1 + 1) : x;
};
var prefixExponent;
var formatPrefixAuto = function(x, p) {
var d = formatDecimal(x, p);
if (!d) return x + "";
var coefficient = d[0],
exponent = d[1],
i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,
n = coefficient.length;
return i === n ? coefficient
: i > n ? coefficient + new Array(i - n + 1).join("0")
: i > 0 ? coefficient.slice(0, i) + "." + coefficient.slice(i)
: "0." + new Array(1 - i).join("0") + formatDecimal(x, Math.max(0, p + i - 1))[0]; // less than 1y!
};
var formatRounded = function(x, p) {
var d = formatDecimal(x, p);
if (!d) return x + "";
var coefficient = d[0],
exponent = d[1];
return exponent < 0 ? "0." + new Array(-exponent).join("0") + coefficient
: coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + "." + coefficient.slice(exponent + 1)
: coefficient + new Array(exponent - coefficient.length + 2).join("0");
};
var formatTypes = {
"": formatDefault,
"%": function(x, p) { return (x * 100).toFixed(p); },
"b": function(x) { return Math.round(x).toString(2); },
"c": function(x) { return x + ""; },
"d": function(x) { return Math.round(x).toString(10); },
"e": function(x, p) { return x.toExponential(p); },
"f": function(x, p) { return x.toFixed(p); },
"g": function(x, p) { return x.toPrecision(p); },
"o": function(x) { return Math.round(x).toString(8); },
"p": function(x, p) { return formatRounded(x * 100, p); },
"r": formatRounded,
"s": formatPrefixAuto,
"X": function(x) { return Math.round(x).toString(16).toUpperCase(); },
"x": function(x) { return Math.round(x).toString(16); }
};
// [[fill]align][sign][symbol][0][width][,][.precision][type]
var re = /^(?:(.)?([<>=^]))?([+\-\( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?([a-z%])?$/i;
function formatSpecifier(specifier) {
return new FormatSpecifier(specifier);
}
formatSpecifier.prototype = FormatSpecifier.prototype; // instanceof
function FormatSpecifier(specifier) {
if (!(match = re.exec(specifier))) throw new Error("invalid format: " + specifier);
var match,
fill = match[1] || " ",
align = match[2] || ">",
sign = match[3] || "-",
symbol = match[4] || "",
zero = !!match[5],
width = match[6] && +match[6],
comma = !!match[7],
precision = match[8] && +match[8].slice(1),
type = match[9] || "";
// The "n" type is an alias for ",g".
if (type === "n") comma = true, type = "g";
// Map invalid types to the default format.
else if (!formatTypes[type]) type = "";
// If zero fill is specified, padding goes after sign and before digits.
if (zero || (fill === "0" && align === "=")) zero = true, fill = "0", align = "=";
this.fill = fill;
this.align = align;
this.sign = sign;
this.symbol = symbol;
this.zero = zero;
this.width = width;
this.comma = comma;
this.precision = precision;
this.type = type;
}
FormatSpecifier.prototype.toString = function() {
return this.fill
+ this.align
+ this.sign
+ this.symbol
+ (this.zero ? "0" : "")
+ (this.width == null ? "" : Math.max(1, this.width | 0))
+ (this.comma ? "," : "")
+ (this.precision == null ? "" : "." + Math.max(0, this.precision | 0))
+ this.type;
};
var identity$3 = function(x) {
return x;
};
var prefixes = ["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];
var formatLocale = function(locale) {
var group = locale.grouping && locale.thousands ? formatGroup(locale.grouping, locale.thousands) : identity$3,
currency = locale.currency,
decimal = locale.decimal,
numerals = locale.numerals ? formatNumerals(locale.numerals) : identity$3;
function newFormat(specifier) {
specifier = formatSpecifier(specifier);
var fill = specifier.fill,
align = specifier.align,
sign = specifier.sign,
symbol = specifier.symbol,
zero = specifier.zero,
width = specifier.width,
comma = specifier.comma,
precision = specifier.precision,
type = specifier.type;
// Compute the prefix and suffix.
// For SI-prefix, the suffix is lazily computed.
var prefix = symbol === "$" ? currency[0] : symbol === "#" && /[boxX]/.test(type) ? "0" + type.toLowerCase() : "",
suffix = symbol === "$" ? currency[1] : /[%p]/.test(type) ? "%" : "";
// What format function should we use?
// Is this an integer type?
// Can this type generate exponential notation?
var formatType = formatTypes[type],
maybeSuffix = !type || /[defgprs%]/.test(type);
// Set the default precision if not specified,
// or clamp the specified precision to the supported range.
// For significant precision, it must be in [1, 21].
// For fixed precision, it must be in [0, 20].
precision = precision == null ? (type ? 6 : 12)
: /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))
: Math.max(0, Math.min(20, precision));
function format(value) {
var valuePrefix = prefix,
valueSuffix = suffix,
i, n, c;
if (type === "c") {
valueSuffix = formatType(value) + valueSuffix;
value = "";
} else {
value = +value;
// Perform the initial formatting.
var valueNegative = value < 0;
value = formatType(Math.abs(value), precision);
// If a negative value rounds to zero during formatting, treat as positive.
if (valueNegative && +value === 0) valueNegative = false;
// Compute the prefix and suffix.
valuePrefix = (valueNegative ? (sign === "(" ? sign : "-") : sign === "-" || sign === "(" ? "" : sign) + valuePrefix;
valueSuffix = valueSuffix + (type === "s" ? prefixes[8 + prefixExponent / 3] : "") + (valueNegative && sign === "(" ? ")" : "");
// Break the formatted value into the integer “value” part that can be
// grouped, and fractional or exponential “suffix” part that is not.
if (maybeSuffix) {
i = -1, n = value.length;
while (++i < n) {
if (c = value.charCodeAt(i), 48 > c || c > 57) {
valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;
value = value.slice(0, i);
break;
}
}
}
}
// If the fill character is not "0", grouping is applied before padding.
if (comma && !zero) value = group(value, Infinity);
// Compute the padding.
var length = valuePrefix.length + value.length + valueSuffix.length,
padding = length < width ? new Array(width - length + 1).join(fill) : "";
// If the fill character is "0", grouping is applied after padding.
if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = "";
// Reconstruct the final output based on the desired alignment.
switch (align) {
case "<": value = valuePrefix + value + valueSuffix + padding; break;
case "=": value = valuePrefix + padding + value + valueSuffix; break;
case "^": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;
default: value = padding + valuePrefix + value + valueSuffix; break;
}
return numerals(value);
}
format.toString = function() {
return specifier + "";
};
return format;
}
function formatPrefix(specifier, value) {
var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = "f", specifier)),
e = Math.max(-8, Math.min(8, Math.floor(exponent$1(value) / 3))) * 3,
k = Math.pow(10, -e),
prefix = prefixes[8 + e / 3];
return function(value) {
return f(k * value) + prefix;
};
}
return {
format: newFormat,
formatPrefix: formatPrefix
};
};
var locale$1;
defaultLocale({
decimal: ".",
thousands: ",",
grouping: [3],
currency: ["$", ""]
});
function defaultLocale(definition) {
locale$1 = formatLocale(definition);
exports.format = locale$1.format;
exports.formatPrefix = locale$1.formatPrefix;
return locale$1;
}
var precisionFixed = function(step) {
return Math.max(0, -exponent$1(Math.abs(step)));
};
var precisionPrefix = function(step, value) {
return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent$1(value) / 3))) * 3 - exponent$1(Math.abs(step)));
};
var precisionRound = function(step, max) {
step = Math.abs(step), max = Math.abs(max) - step;
return Math.max(0, exponent$1(max) - exponent$1(step)) + 1;
};
// Adds floating point numbers with twice the normal precision.
// Reference: J. R. Shewchuk, Adaptive Precision Floating-Point Arithmetic and
// Fast Robust Geometric Predicates, Discrete & Computational Geometry 18(3)
// 305–363 (1997).
// Code adapted from GeographicLib by Charles F. F. Karney,
// http://geographiclib.sourceforge.net/
var adder = function() {
return new Adder;
};
function Adder() {
this.reset();
}
Adder.prototype = {
constructor: Adder,
reset: function() {
this.s = // rounded value
this.t = 0; // exact error
},
add: function(y) {
add$1(temp, y, this.t);
add$1(this, temp.s, this.s);
if (this.s) this.t += temp.t;
else this.s = temp.t;
},
valueOf: function() {
return this.s;
}
};
var temp = new Adder;
function add$1(adder, a, b) {
var x = adder.s = a + b,
bv = x - a,
av = x - bv;
adder.t = (a - av) + (b - bv);
}
var epsilon$2 = 1e-6;
var epsilon2$1 = 1e-12;
var pi$3 = Math.PI;
var halfPi$2 = pi$3 / 2;
var quarterPi = pi$3 / 4;
var tau$3 = pi$3 * 2;
var degrees$1 = 180 / pi$3;
var radians = pi$3 / 180;
var abs = Math.abs;
var atan = Math.atan;
var atan2 = Math.atan2;
var cos$1 = Math.cos;
var ceil = Math.ceil;
var exp = Math.exp;
var log = Math.log;
var pow = Math.pow;
var sin$1 = Math.sin;
var sign = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };
var sqrt = Math.sqrt;
var tan = Math.tan;
function acos(x) {
return x > 1 ? 0 : x < -1 ? pi$3 : Math.acos(x);
}
function asin(x) {
return x > 1 ? halfPi$2 : x < -1 ? -halfPi$2 : Math.asin(x);
}
function haversin(x) {
return (x = sin$1(x / 2)) * x;
}
function noop$1() {}
function streamGeometry(geometry, stream) {
if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) {
streamGeometryType[geometry.type](geometry, stream);
}
}
var streamObjectType = {
Feature: function(object, stream) {
streamGeometry(object.geometry, stream);
},
FeatureCollection: function(object, stream) {
var features = object.features, i = -1, n = features.length;
while (++i < n) streamGeometry(features[i].geometry, stream);
}
};
var streamGeometryType = {
Sphere: function(object, stream) {
stream.sphere();
},
Point: function(object, stream) {
object = object.coordinates;
stream.point(object[0], object[1], object[2]);
},
MultiPoint: function(object, stream) {
var coordinates = object.coordinates, i = -1, n = coordinates.length;
while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]);
},
LineString: function(object, stream) {
streamLine(object.coordinates, stream, 0);
},
MultiLineString: function(object, stream) {
var coordinates = object.coordinates, i = -1, n = coordinates.length;
while (++i < n) streamLine(coordinates[i], stream, 0);
},
Polygon: function(object, stream) {
streamPolygon(object.coordinates, stream);
},
MultiPolygon: function(object, stream) {
var coordinates = object.coordinates, i = -1, n = coordinates.length;
while (++i < n) streamPolygon(coordinates[i], stream);
},
GeometryCollection: function(object, stream) {
var geometries = object.geometries, i = -1, n = geometries.length;
while (++i < n) streamGeometry(geometries[i], stream);
}
};
function streamLine(coordinates, stream, closed) {
var i = -1, n = coordinates.length - closed, coordinate;
stream.lineStart();
while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]);
stream.lineEnd();
}
function streamPolygon(coordinates, stream) {
var i = -1, n = coordinates.length;
stream.polygonStart();
while (++i < n) streamLine(coordinates[i], stream, 1);
stream.polygonEnd();
}
var geoStream = function(object, stream) {
if (object && streamObjectType.hasOwnProperty(object.type)) {
streamObjectType[object.type](object, stream);
} else {
streamGeometry(object, stream);
}
};
var areaRingSum = adder();
var areaSum = adder();
var lambda00;
var phi00;
var lambda0;
var cosPhi0;
var sinPhi0;
var areaStream = {
point: noop$1,
lineStart: noop$1,
lineEnd: noop$1,
polygonStart: function() {
areaRingSum.reset();
areaStream.lineStart = areaRingStart;
areaStream.lineEnd = areaRingEnd;
},
polygonEnd: function() {
var areaRing = +areaRingSum;
areaSum.add(areaRing < 0 ? tau$3 + areaRing : areaRing);
this.lineStart = this.lineEnd = this.point = noop$1;
},
sphere: function() {
areaSum.add(tau$3);
}
};
function areaRingStart() {
areaStream.point = areaPointFirst;
}
function areaRingEnd() {
areaPoint(lambda00, phi00);
}
function areaPointFirst(lambda, phi) {
areaStream.point = areaPoint;
lambda00 = lambda, phi00 = phi;
lambda *= radians, phi *= radians;
lambda0 = lambda, cosPhi0 = cos$1(phi = phi / 2 + quarterPi), sinPhi0 = sin$1(phi);
}
function areaPoint(lambda, phi) {
lambda *= radians, phi *= radians;
phi = phi / 2 + quarterPi; // half the angular distance from south pole
// Spherical excess E for a spherical triangle with vertices: south pole,
// previous point, current point. Uses a formula derived from Cagnoli’s
// theorem. See Todhunter, Spherical Trig. (1871), Sec. 103, Eq. (2).
var dLambda = lambda - lambda0,
sdLambda = dLambda >= 0 ? 1 : -1,
adLambda = sdLambda * dLambda,
cosPhi = cos$1(phi),
sinPhi = sin$1(phi),
k = sinPhi0 * sinPhi,
u = cosPhi0 * cosPhi + k * cos$1(adLambda),
v = k * sdLambda * sin$1(adLambda);
areaRingSum.add(atan2(v, u));
// Advance the previous points.
lambda0 = lambda, cosPhi0 = cosPhi, sinPhi0 = sinPhi;
}
var area = function(object) {
areaSum.reset();
geoStream(object, areaStream);
return areaSum * 2;
};
function spherical(cartesian) {
return [atan2(cartesian[1], cartesian[0]), asin(cartesian[2])];
}
function cartesian(spherical) {
var lambda = spherical[0], phi = spherical[1], cosPhi = cos$1(phi);
return [cosPhi * cos$1(lambda), cosPhi * sin$1(lambda), sin$1(phi)];
}
function cartesianDot(a, b) {
return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
}
function cartesianCross(a, b) {
return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];
}
// TODO return a
function cartesianAddInPlace(a, b) {
a[0] += b[0], a[1] += b[1], a[2] += b[2];
}
function cartesianScale(vector, k) {
return [vector[0] * k, vector[1] * k, vector[2] * k];
}
// TODO return d
function cartesianNormalizeInPlace(d) {
var l = sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);
d[0] /= l, d[1] /= l, d[2] /= l;
}
var lambda0$1;
var phi0;
var lambda1;
var phi1;
var lambda2;
var lambda00$1;
var phi00$1;
var p0;
var deltaSum = adder();
var ranges;
var range$1;
var boundsStream = {
point: boundsPoint,
lineStart: boundsLineStart,
lineEnd: boundsLineEnd,
polygonStart: function() {
boundsStream.point = boundsRingPoint;
boundsStream.lineStart = boundsRingStart;
boundsStream.lineEnd = boundsRingEnd;
deltaSum.reset();
areaStream.polygonStart();
},
polygonEnd: function() {
areaStream.polygonEnd();
boundsStream.point = boundsPoint;
boundsStream.lineStart = boundsLineStart;
boundsStream.lineEnd = boundsLineEnd;
if (areaRingSum < 0) lambda0$1 = -(lambda1 = 180), phi0 = -(phi1 = 90);
else if (deltaSum > epsilon$2) phi1 = 90;
else if (deltaSum < -epsilon$2) phi0 = -90;
range$1[0] = lambda0$1, range$1[1] = lambda1;
}
};
function boundsPoint(lambda, phi) {
ranges.push(range$1 = [lambda0$1 = lambda, lambda1 = lambda]);
if (phi < phi0) phi0 = phi;
if (phi > phi1) phi1 = phi;
}
function linePoint(lambda, phi) {
var p = cartesian([lambda * radians, phi * radians]);
if (p0) {
var normal = cartesianCross(p0, p),
equatorial = [normal[1], -normal[0], 0],
inflection = cartesianCross(equatorial, normal);
cartesianNormalizeInPlace(inflection);
inflection = spherical(inflection);
var delta = lambda - lambda2,
sign$$1 = delta > 0 ? 1 : -1,
lambdai = inflection[0] * degrees$1 * sign$$1,
phii,
antimeridian = abs(delta) > 180;
if (antimeridian ^ (sign$$1 * lambda2 < lambdai && lambdai < sign$$1 * lambda)) {
phii = inflection[1] * degrees$1;
if (phii > phi1) phi1 = phii;
} else if (lambdai = (lambdai + 360) % 360 - 180, antimeridian ^ (sign$$1 * lambda2 < lambdai && lambdai < sign$$1 * lambda)) {
phii = -inflection[1] * degrees$1;
if (phii < phi0) phi0 = phii;
} else {
if (phi < phi0) phi0 = phi;
if (phi > phi1) phi1 = phi;
}
if (antimeridian) {
if (lambda < lambda2) {
if (angle(lambda0$1, lambda) > angle(lambda0$1, lambda1)) lambda1 = lambda;
} else {
if (angle(lambda, lambda1) > angle(lambda0$1, lambda1)) lambda0$1 = lambda;
}
} else {
if (lambda1 >= lambda0$1) {
if (lambda < lambda0$1) lambda0$1 = lambda;
if (lambda > lambda1) lambda1 = lambda;
} else {
if (lambda > lambda2) {
if (angle(lambda0$1, lambda) > angle(lambda0$1, lambda1)) lambda1 = lambda;
} else {
if (angle(lambda, lambda1) > angle(lambda0$1, lambda1)) lambda0$1 = lambda;
}
}
}
} else {
ranges.push(range$1 = [lambda0$1 = lambda, lambda1 = lambda]);
}
if (phi < phi0) phi0 = phi;
if (phi > phi1) phi1 = phi;
p0 = p, lambda2 = lambda;
}
function boundsLineStart() {
boundsStream.point = linePoint;
}
function boundsLineEnd() {
range$1[0] = lambda0$1, range$1[1] = lambda1;
boundsStream.point = boundsPoint;
p0 = null;
}
function boundsRingPoint(lambda, phi) {
if (p0) {
var delta = lambda - lambda2;
deltaSum.add(abs(delta) > 180 ? delta + (delta > 0 ? 360 : -360) : delta);
} else {
lambda00$1 = lambda, phi00$1 = phi;
}
areaStream.point(lambda, phi);
linePoint(lambda, phi);
}
function boundsRingStart() {
areaStream.lineStart();
}
function boundsRingEnd() {
boundsRingPoint(lambda00$1, phi00$1);
areaStream.lineEnd();
if (abs(deltaSum) > epsilon$2) lambda0$1 = -(lambda1 = 180);
range$1[0] = lambda0$1, range$1[1] = lambda1;
p0 = null;
}
// Finds the left-right distance between two longitudes.
// This is almost the same as (lambda1 - lambda0 + 360°) % 360°, except that we want
// the distance between ±180° to be 360°.
function angle(lambda0, lambda1) {
return (lambda1 -= lambda0) < 0 ? lambda1 + 360 : lambda1;
}
function rangeCompare(a, b) {
return a[0] - b[0];
}
function rangeContains(range, x) {
return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x;
}
var bounds = function(feature) {
var i, n, a, b, merged, deltaMax, delta;
phi1 = lambda1 = -(lambda0$1 = phi0 = Infinity);
ranges = [];
geoStream(feature, boundsStream);
// First, sort ranges by their minimum longitudes.
if (n = ranges.length) {
ranges.sort(rangeCompare);
// Then, merge any ranges that overlap.
for (i = 1, a = ranges[0], merged = [a]; i < n; ++i) {
b = ranges[i];
if (rangeContains(a, b[0]) || rangeContains(a, b[1])) {
if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1];
if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0];
} else {
merged.push(a = b);
}
}
// Finally, find the largest gap between the merged ranges.
// The final bounding box will be the inverse of this gap.
for (deltaMax = -Infinity, n = merged.length - 1, i = 0, a = merged[n]; i <= n; a = b, ++i) {
b = merged[i];
if ((delta = angle(a[1], b[0])) > deltaMax) deltaMax = delta, lambda0$1 = b[0], lambda1 = a[1];
}
}
ranges = range$1 = null;
return lambda0$1 === Infinity || phi0 === Infinity
? [[NaN, NaN], [NaN, NaN]]
: [[lambda0$1, phi0], [lambda1, phi1]];
};
var W0;
var W1;
var X0;
var Y0;
var Z0;
var X1;
var Y1;
var Z1;
var X2;
var Y2;
var Z2;
var lambda00$2;
var phi00$2;
var x0;
var y0;
var z0; // previous point
var centroidStream = {
sphere: noop$1,
point: centroidPoint,
lineStart: centroidLineStart,
lineEnd: centroidLineEnd,
polygonStart: function() {
centroidStream.lineStart = centroidRingStart;
centroidStream.lineEnd = centroidRingEnd;
},
polygonEnd: function() {
centroidStream.lineStart = centroidLineStart;
centroidStream.lineEnd = centroidLineEnd;
}
};
// Arithmetic mean of Cartesian vectors.
function centroidPoint(lambda, phi) {
lambda *= radians, phi *= radians;
var cosPhi = cos$1(phi);
centroidPointCartesian(cosPhi * cos$1(lambda), cosPhi * sin$1(lambda), sin$1(phi));
}
function centroidPointCartesian(x, y, z) {
++W0;
X0 += (x - X0) / W0;
Y0 += (y - Y0) / W0;
Z0 += (z - Z0) / W0;
}
function centroidLineStart() {
centroidStream.point = centroidLinePointFirst;
}
function centroidLinePointFirst(lambda, phi) {
lambda *= radians, phi *= radians;
var cosPhi = cos$1(phi);
x0 = cosPhi * cos$1(lambda);
y0 = cosPhi * sin$1(lambda);
z0 = sin$1(phi);
centroidStream.point = centroidLinePoint;
centroidPointCartesian(x0, y0, z0);
}
function centroidLinePoint(lambda, phi) {
lambda *= radians, phi *= radians;
var cosPhi = cos$1(phi),
x = cosPhi * cos$1(lambda),
y = cosPhi * sin$1(lambda),
z = sin$1(phi),
w = atan2(sqrt((w = y0 * z - z0 * y) * w + (w = z0 * x - x0 * z) * w + (w = x0 * y - y0 * x) * w), x0 * x + y0 * y + z0 * z);
W1 += w;
X1 += w * (x0 + (x0 = x));
Y1 += w * (y0 + (y0 = y));
Z1 += w * (z0 + (z0 = z));
centroidPointCartesian(x0, y0, z0);
}
function centroidLineEnd() {
centroidStream.point = centroidPoint;
}
// See J. E. Brock, The Inertia Tensor for a Spherical Triangle,
// J. Applied Mechanics 42, 239 (1975).
function centroidRingStart() {
centroidStream.point = centroidRingPointFirst;
}
function centroidRingEnd() {
centroidRingPoint(lambda00$2, phi00$2);
centroidStream.point = centroidPoint;
}
function centroidRingPointFirst(lambda, phi) {
lambda00$2 = lambda, phi00$2 = phi;
lambda *= radians, phi *= radians;
centroidStream.point = centroidRingPoint;
var cosPhi = cos$1(phi);
x0 = cosPhi * cos$1(lambda);
y0 = cosPhi * sin$1(lambda);
z0 = sin$1(phi);
centroidPointCartesian(x0, y0, z0);
}
function centroidRingPoint(lambda, phi) {
lambda *= radians, phi *= radians;
var cosPhi = cos$1(phi),
x = cosPhi * cos$1(lambda),
y = cosPhi * sin$1(lambda),
z = sin$1(phi),
cx = y0 * z - z0 * y,
cy = z0 * x - x0 * z,
cz = x0 * y - y0 * x,
m = sqrt(cx * cx + cy * cy + cz * cz),
w = asin(m), // line weight = angle
v = m && -w / m; // area weight multiplier
X2 += v * cx;
Y2 += v * cy;
Z2 += v * cz;
W1 += w;
X1 += w * (x0 + (x0 = x));
Y1 += w * (y0 + (y0 = y));
Z1 += w * (z0 + (z0 = z));
centroidPointCartesian(x0, y0, z0);
}
var centroid = function(object) {
W0 = W1 =
X0 = Y0 = Z0 =
X1 = Y1 = Z1 =
X2 = Y2 = Z2 = 0;
geoStream(object, centroidStream);
var x = X2,
y = Y2,
z = Z2,
m = x * x + y * y + z * z;
// If the area-weighted ccentroid is undefined, fall back to length-weighted ccentroid.
if (m < epsilon2$1) {
x = X1, y = Y1, z = Z1;
// If the feature has zero length, fall back to arithmetic mean of point vectors.
if (W1 < epsilon$2) x = X0, y = Y0, z = Z0;
m = x * x + y * y + z * z;
// If the feature still has an undefined ccentroid, then return.
if (m < epsilon2$1) return [NaN, NaN];
}
return [atan2(y, x) * degrees$1, asin(z / sqrt(m)) * degrees$1];
};
var constant$7 = function(x) {
return function() {
return x;
};
};
var compose = function(a, b) {
function compose(x, y) {
return x = a(x, y), b(x[0], x[1]);
}
if (a.invert && b.invert) compose.invert = function(x, y) {
return x = b.invert(x, y), x && a.invert(x[0], x[1]);
};
return compose;
};
function rotationIdentity(lambda, phi) {
return [lambda > pi$3 ? lambda - tau$3 : lambda < -pi$3 ? lambda + tau$3 : lambda, phi];
}
rotationIdentity.invert = rotationIdentity;
function rotateRadians(deltaLambda, deltaPhi, deltaGamma) {
return (deltaLambda %= tau$3) ? (deltaPhi || deltaGamma ? compose(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma))
: rotationLambda(deltaLambda))
: (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma)
: rotationIdentity);
}
function forwardRotationLambda(deltaLambda) {
return function(lambda, phi) {
return lambda += deltaLambda, [lambda > pi$3 ? lambda - tau$3 : lambda < -pi$3 ? lambda + tau$3 : lambda, phi];
};
}
function rotationLambda(deltaLambda) {
var rotation = forwardRotationLambda(deltaLambda);
rotation.invert = forwardRotationLambda(-deltaLambda);
return rotation;
}
function rotationPhiGamma(deltaPhi, deltaGamma) {
var cosDeltaPhi = cos$1(deltaPhi),
sinDeltaPhi = sin$1(deltaPhi),
cosDeltaGamma = cos$1(deltaGamma),
sinDeltaGamma = sin$1(deltaGamma);
function rotation(lambda, phi) {
var cosPhi = cos$1(phi),
x = cos$1(lambda) * cosPhi,
y = sin$1(lambda) * cosPhi,
z = sin$1(phi),
k = z * cosDeltaPhi + x * sinDeltaPhi;
return [
atan2(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi),
asin(k * cosDeltaGamma + y * sinDeltaGamma)
];
}
rotation.invert = function(lambda, phi) {
var cosPhi = cos$1(phi),
x = cos$1(lambda) * cosPhi,
y = sin$1(lambda) * cosPhi,
z = sin$1(phi),
k = z * cosDeltaGamma - y * sinDeltaGamma;
return [
atan2(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi),
asin(k * cosDeltaPhi - x * sinDeltaPhi)
];
};
return rotation;
}
var rotation = function(rotate) {
rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0);
function forward(coordinates) {
coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians);
return coordinates[0] *= degrees$1, coordinates[1] *= degrees$1, coordinates;
}
forward.invert = function(coordinates) {
coordinates = rotate.invert(coordinates[0] * radians, coordinates[1] * radians);
return coordinates[0] *= degrees$1, coordinates[1] *= degrees$1, coordinates;
};
return forward;
};
// Generates a circle centered at [0°, 0°], with a given radius and precision.
function circleStream(stream, radius, delta, direction, t0, t1) {
if (!delta) return;
var cosRadius = cos$1(radius),
sinRadius = sin$1(radius),
step = direction * delta;
if (t0 == null) {
t0 = radius + direction * tau$3;
t1 = radius - step / 2;
} else {
t0 = circleRadius(cosRadius, t0);
t1 = circleRadius(cosRadius, t1);
if (direction > 0 ? t0 < t1 : t0 > t1) t0 += direction * tau$3;
}
for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) {
point = spherical([cosRadius, -sinRadius * cos$1(t), -sinRadius * sin$1(t)]);
stream.point(point[0], point[1]);
}
}
// Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0].
function circleRadius(cosRadius, point) {
point = cartesian(point), point[0] -= cosRadius;
cartesianNormalizeInPlace(point);
var radius = acos(-point[1]);
return ((-point[2] < 0 ? -radius : radius) + tau$3 - epsilon$2) % tau$3;
}
var geoCircle = function() {
var center = constant$7([0, 0]),
radius = constant$7(90),
precision = constant$7(6),
ring,
rotate,
stream = {point: point};
function point(x, y) {
ring.push(x = rotate(x, y));
x[0] *= degrees$1, x[1] *= degrees$1;
}
function circle() {
var c = center.apply(this, arguments),
r = radius.apply(this, arguments) * radians,
p = precision.apply(this, arguments) * radians;
ring = [];
rotate = rotateRadians(-c[0] * radians, -c[1] * radians, 0).invert;
circleStream(stream, r, p, 1);
c = {type: "Polygon", coordinates: [ring]};
ring = rotate = null;
return c;
}
circle.center = function(_) {
return arguments.length ? (center = typeof _ === "function" ? _ : constant$7([+_[0], +_[1]]), circle) : center;
};
circle.radius = function(_) {
return arguments.length ? (radius = typeof _ === "function" ? _ : constant$7(+_), circle) : radius;
};
circle.precision = function(_) {
return arguments.length ? (precision = typeof _ === "function" ? _ : constant$7(+_), circle) : precision;
};
return circle;
};
var clipBuffer = function() {
var lines = [],
line;
return {
point: function(x, y) {
line.push([x, y]);
},
lineStart: function() {
lines.push(line = []);
},
lineEnd: noop$1,
rejoin: function() {
if (lines.length > 1) lines.push(lines.pop().concat(lines.shift()));
},
result: function() {
var result = lines;
lines = [];
line = null;
return result;
}
};
};
var clipLine = function(a, b, x0, y0, x1, y1) {
var ax = a[0],
ay = a[1],
bx = b[0],
by = b[1],
t0 = 0,
t1 = 1,
dx = bx - ax,
dy = by - ay,
r;
r = x0 - ax;
if (!dx && r > 0) return;
r /= dx;
if (dx < 0) {
if (r < t0) return;
if (r < t1) t1 = r;
} else if (dx > 0) {
if (r > t1) return;
if (r > t0) t0 = r;
}
r = x1 - ax;
if (!dx && r < 0) return;
r /= dx;
if (dx < 0) {
if (r > t1) return;
if (r > t0) t0 = r;
} else if (dx > 0) {
if (r < t0) return;
if (r < t1) t1 = r;
}
r = y0 - ay;
if (!dy && r > 0) return;
r /= dy;
if (dy < 0) {
if (r < t0) return;
if (r < t1) t1 = r;
} else if (dy > 0) {
if (r > t1) return;
if (r > t0) t0 = r;
}
r = y1 - ay;
if (!dy && r < 0) return;
r /= dy;
if (dy < 0) {
if (r > t1) return;
if (r > t0) t0 = r;
} else if (dy > 0) {
if (r < t0) return;
if (r < t1) t1 = r;
}
if (t0 > 0) a[0] = ax + t0 * dx, a[1] = ay + t0 * dy;
if (t1 < 1) b[0] = ax + t1 * dx, b[1] = ay + t1 * dy;
return true;
};
var pointEqual = function(a, b) {
return abs(a[0] - b[0]) < epsilon$2 && abs(a[1] - b[1]) < epsilon$2;
};
function Intersection(point, points, other, entry) {
this.x = point;
this.z = points;
this.o = other; // another intersection
this.e = entry; // is an entry?
this.v = false; // visited
this.n = this.p = null; // next & previous
}
// A generalized polygon clipping algorithm: given a polygon that has been cut
// into its visible line segments, and rejoins the segments by interpolating
// along the clip edge.
var clipPolygon = function(segments, compareIntersection, startInside, interpolate, stream) {
var subject = [],
clip = [],
i,
n;
segments.forEach(function(segment) {
if ((n = segment.length - 1) <= 0) return;
var n, p0 = segment[0], p1 = segment[n], x;
// If the first and last points of a segment are coincident, then treat as a
// closed ring. TODO if all rings are closed, then the winding order of the
// exterior ring should be checked.
if (pointEqual(p0, p1)) {
stream.lineStart();
for (i = 0; i < n; ++i) stream.point((p0 = segment[i])[0], p0[1]);
stream.lineEnd();
return;
}
subject.push(x = new Intersection(p0, segment, null, true));
clip.push(x.o = new Intersection(p0, null, x, false));
subject.push(x = new Intersection(p1, segment, null, false));
clip.push(x.o = new Intersection(p1, null, x, true));
});
if (!subject.length) return;
clip.sort(compareIntersection);
link$1(subject);
link$1(clip);
for (i = 0, n = clip.length; i < n; ++i) {
clip[i].e = startInside = !startInside;
}
var start = subject[0],
points,
point;
while (1) {
// Find first unvisited intersection.
var current = start,
isSubject = true;
while (current.v) if ((current = current.n) === start) return;
points = current.z;
stream.lineStart();
do {
current.v = current.o.v = true;
if (current.e) {
if (isSubject) {
for (i = 0, n = points.length; i < n; ++i) stream.point((point = points[i])[0], point[1]);
} else {
interpolate(current.x, current.n.x, 1, stream);
}
current = current.n;
} else {
if (isSubject) {
points = current.p.z;
for (i = points.length - 1; i >= 0; --i) stream.point((point = points[i])[0], point[1]);
} else {
interpolate(current.x, current.p.x, -1, stream);
}
current = current.p;
}
current = current.o;
points = current.z;
isSubject = !isSubject;
} while (!current.v);
stream.lineEnd();
}
};
function link$1(array) {
if (!(n = array.length)) return;
var n,
i = 0,
a = array[0],
b;
while (++i < n) {
a.n = b = array[i];
b.p = a;
a = b;
}
a.n = b = array[0];
b.p = a;
}
var clipMax = 1e9;
var clipMin = -clipMax;
// TODO Use d3-polygon’s polygonContains here for the ring check?
// TODO Eliminate duplicate buffering in clipBuffer and polygon.push?
function clipExtent(x0, y0, x1, y1) {
function visible(x, y) {
return x0 <= x && x <= x1 && y0 <= y && y <= y1;
}
function interpolate(from, to, direction, stream) {
var a = 0, a1 = 0;
if (from == null
|| (a = corner(from, direction)) !== (a1 = corner(to, direction))
|| comparePoint(from, to) < 0 ^ direction > 0) {
do stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0);
while ((a = (a + direction + 4) % 4) !== a1);
} else {
stream.point(to[0], to[1]);
}
}
function corner(p, direction) {
return abs(p[0] - x0) < epsilon$2 ? direction > 0 ? 0 : 3
: abs(p[0] - x1) < epsilon$2 ? direction > 0 ? 2 : 1
: abs(p[1] - y0) < epsilon$2 ? direction > 0 ? 1 : 0
: direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon
}
function compareIntersection(a, b) {
return comparePoint(a.x, b.x);
}
function comparePoint(a, b) {
var ca = corner(a, 1),
cb = corner(b, 1);
return ca !== cb ? ca - cb
: ca === 0 ? b[1] - a[1]
: ca === 1 ? a[0] - b[0]
: ca === 2 ? a[1] - b[1]
: b[0] - a[0];
}
return function(stream) {
var activeStream = stream,
bufferStream = clipBuffer(),
segments,
polygon,
ring,
x__, y__, v__, // first point
x_, y_, v_, // previous point
first,
clean;
var clipStream = {
point: point,
lineStart: lineStart,
lineEnd: lineEnd,
polygonStart: polygonStart,
polygonEnd: polygonEnd
};
function point(x, y) {
if (visible(x, y)) activeStream.point(x, y);
}
function polygonInside() {
var winding = 0;
for (var i = 0, n = polygon.length; i < n; ++i) {
for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) {
a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1];
if (a1 <= y1) { if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) ++winding; }
else { if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) --winding; }
}
}
return winding;
}
// Buffer geometry within a polygon and then clip it en masse.
function polygonStart() {
activeStream = bufferStream, segments = [], polygon = [], clean = true;
}
function polygonEnd() {
var startInside = polygonInside(),
cleanInside = clean && startInside,
visible = (segments = merge(segments)).length;
if (cleanInside || visible) {
stream.polygonStart();
if (cleanInside) {
stream.lineStart();
interpolate(null, null, 1, stream);
stream.lineEnd();
}
if (visible) {
clipPolygon(segments, compareIntersection, startInside, interpolate, stream);
}
stream.polygonEnd();
}
activeStream = stream, segments = polygon = ring = null;
}
function lineStart() {
clipStream.point = linePoint;
if (polygon) polygon.push(ring = []);
first = true;
v_ = false;
x_ = y_ = NaN;
}
// TODO rather than special-case polygons, simply handle them separately.
// Ideally, coincident intersection points should be jittered to avoid
// clipping issues.
function lineEnd() {
if (segments) {
linePoint(x__, y__);
if (v__ && v_) bufferStream.rejoin();
segments.push(bufferStream.result());
}
clipStream.point = point;
if (v_) activeStream.lineEnd();
}
function linePoint(x, y) {
var v = visible(x, y);
if (polygon) ring.push([x, y]);
if (first) {
x__ = x, y__ = y, v__ = v;
first = false;
if (v) {
activeStream.lineStart();
activeStream.point(x, y);
}
} else {
if (v && v_) activeStream.point(x, y);
else {
var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))],
b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))];
if (clipLine(a, b, x0, y0, x1, y1)) {
if (!v_) {
activeStream.lineStart();
activeStream.point(a[0], a[1]);
}
activeStream.point(b[0], b[1]);
if (!v) activeStream.lineEnd();
clean = false;
} else if (v) {
activeStream.lineStart();
activeStream.point(x, y);
clean = false;
}
}
}
x_ = x, y_ = y, v_ = v;
}
return clipStream;
};
}
var extent$1 = function() {
var x0 = 0,
y0 = 0,
x1 = 960,
y1 = 500,
cache,
cacheStream,
clip;
return clip = {
stream: function(stream) {
return cache && cacheStream === stream ? cache : cache = clipExtent(x0, y0, x1, y1)(cacheStream = stream);
},
extent: function(_) {
return arguments.length ? (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1], cache = cacheStream = null, clip) : [[x0, y0], [x1, y1]];
}
};
};
var sum$1 = adder();
var polygonContains = function(polygon, point) {
var lambda = point[0],
phi = point[1],
normal = [sin$1(lambda), -cos$1(lambda), 0],
angle = 0,
winding = 0;
sum$1.reset();
for (var i = 0, n = polygon.length; i < n; ++i) {
if (!(m = (ring = polygon[i]).length)) continue;
var ring,
m,
point0 = ring[m - 1],
lambda0 = point0[0],
phi0 = point0[1] / 2 + quarterPi,
sinPhi0 = sin$1(phi0),
cosPhi0 = cos$1(phi0);
for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) {
var point1 = ring[j],
lambda1 = point1[0],
phi1 = point1[1] / 2 + quarterPi,
sinPhi1 = sin$1(phi1),
cosPhi1 = cos$1(phi1),
delta = lambda1 - lambda0,
sign$$1 = delta >= 0 ? 1 : -1,
absDelta = sign$$1 * delta,
antimeridian = absDelta > pi$3,
k = sinPhi0 * sinPhi1;
sum$1.add(atan2(k * sign$$1 * sin$1(absDelta), cosPhi0 * cosPhi1 + k * cos$1(absDelta)));
angle += antimeridian ? delta + sign$$1 * tau$3 : delta;
// Are the longitudes either side of the point’s meridian (lambda),
// and are the latitudes smaller than the parallel (phi)?
if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) {
var arc = cartesianCross(cartesian(point0), cartesian(point1));
cartesianNormalizeInPlace(arc);
var intersection = cartesianCross(normal, arc);
cartesianNormalizeInPlace(intersection);
var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin(intersection[2]);
if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) {
winding += antimeridian ^ delta >= 0 ? 1 : -1;
}
}
}
}
// First, determine whether the South pole is inside or outside:
//
// It is inside if:
// * the polygon winds around it in a clockwise direction.
// * the polygon does not (cumulatively) wind around it, but has a negative
// (counter-clockwise) area.
//
// Second, count the (signed) number of times a segment crosses a lambda
// from the point to the South pole. If it is zero, then the point is the
// same side as the South pole.
return (angle < -epsilon$2 || angle < epsilon$2 && sum$1 < -epsilon$2) ^ (winding & 1);
};
var lengthSum = adder();
var lambda0$2;
var sinPhi0$1;
var cosPhi0$1;
var lengthStream = {
sphere: noop$1,
point: noop$1,
lineStart: lengthLineStart,
lineEnd: noop$1,
polygonStart: noop$1,
polygonEnd: noop$1
};
function lengthLineStart() {
lengthStream.point = lengthPointFirst;
lengthStream.lineEnd = lengthLineEnd;
}
function lengthLineEnd() {
lengthStream.point = lengthStream.lineEnd = noop$1;
}
function lengthPointFirst(lambda, phi) {
lambda *= radians, phi *= radians;
lambda0$2 = lambda, sinPhi0$1 = sin$1(phi), cosPhi0$1 = cos$1(phi);
lengthStream.point = lengthPoint;
}
function lengthPoint(lambda, phi) {
lambda *= radians, phi *= radians;
var sinPhi = sin$1(phi),
cosPhi = cos$1(phi),
delta = abs(lambda - lambda0$2),
cosDelta = cos$1(delta),
sinDelta = sin$1(delta),
x = cosPhi * sinDelta,
y = cosPhi0$1 * sinPhi - sinPhi0$1 * cosPhi * cosDelta,
z = sinPhi0$1 * sinPhi + cosPhi0$1 * cosPhi * cosDelta;
lengthSum.add(atan2(sqrt(x * x + y * y), z));
lambda0$2 = lambda, sinPhi0$1 = sinPhi, cosPhi0$1 = cosPhi;
}
var length$1 = function(object) {
lengthSum.reset();
geoStream(object, lengthStream);
return +lengthSum;
};
var coordinates = [null, null];
var object$1 = {type: "LineString", coordinates: coordinates};
var distance = function(a, b) {
coordinates[0] = a;
coordinates[1] = b;
return length$1(object$1);
};
var containsObjectType = {
Feature: function(object, point) {
return containsGeometry(object.geometry, point);
},
FeatureCollection: function(object, point) {
var features = object.features, i = -1, n = features.length;
while (++i < n) if (containsGeometry(features[i].geometry, point)) return true;
return false;
}
};
var containsGeometryType = {
Sphere: function() {
return true;
},
Point: function(object, point) {
return containsPoint(object.coordinates, point);
},
MultiPoint: function(object, point) {
var coordinates = object.coordinates, i = -1, n = coordinates.length;
while (++i < n) if (containsPoint(coordinates[i], point)) return true;
return false;
},
LineString: function(object, point) {
return containsLine(object.coordinates, point);
},
MultiLineString: function(object, point) {
var coordinates = object.coordinates, i = -1, n = coordinates.length;
while (++i < n) if (containsLine(coordinates[i], point)) return true;
return false;
},
Polygon: function(object, point) {
return containsPolygon(object.coordinates, point);
},
MultiPolygon: function(object, point) {
var coordinates = object.coordinates, i = -1, n = coordinates.length;
while (++i < n) if (containsPolygon(coordinates[i], point)) return true;
return false;
},
GeometryCollection: function(object, point) {
var geometries = object.geometries, i = -1, n = geometries.length;
while (++i < n) if (containsGeometry(geometries[i], point)) return true;
return false;
}
};
function containsGeometry(geometry, point) {
return geometry && containsGeometryType.hasOwnProperty(geometry.type)
? containsGeometryType[geometry.type](geometry, point)
: false;
}
function containsPoint(coordinates, point) {
return distance(coordinates, point) === 0;
}
function containsLine(coordinates, point) {
var ab = distance(coordinates[0], coordinates[1]),
ao = distance(coordinates[0], point),
ob = distance(point, coordinates[1]);
return ao + ob <= ab + epsilon$2;
}
function containsPolygon(coordinates, point) {
return !!polygonContains(coordinates.map(ringRadians), pointRadians(point));
}
function ringRadians(ring) {
return ring = ring.map(pointRadians), ring.pop(), ring;
}
function pointRadians(point) {
return [point[0] * radians, point[1] * radians];
}
var contains = function(object, point) {
return (object && containsObjectType.hasOwnProperty(object.type)
? containsObjectType[object.type]
: containsGeometry)(object, point);
};
function graticuleX(y0, y1, dy) {
var y = range(y0, y1 - epsilon$2, dy).concat(y1);
return function(x) { return y.map(function(y) { return [x, y]; }); };
}
function graticuleY(x0, x1, dx) {
var x = range(x0, x1 - epsilon$2, dx).concat(x1);
return function(y) { return x.map(function(x) { return [x, y]; }); };
}
function graticule() {
var x1, x0, X1, X0,
y1, y0, Y1, Y0,
dx = 10, dy = dx, DX = 90, DY = 360,
x, y, X, Y,
precision = 2.5;
function graticule() {
return {type: "MultiLineString", coordinates: lines()};
}
function lines() {
return range(ceil(X0 / DX) * DX, X1, DX).map(X)
.concat(range(ceil(Y0 / DY) * DY, Y1, DY).map(Y))
.concat(range(ceil(x0 / dx) * dx, x1, dx).filter(function(x) { return abs(x % DX) > epsilon$2; }).map(x))
.concat(range(ceil(y0 / dy) * dy, y1, dy).filter(function(y) { return abs(y % DY) > epsilon$2; }).map(y));
}
graticule.lines = function() {
return lines().map(function(coordinates) { return {type: "LineString", coordinates: coordinates}; });
};
graticule.outline = function() {
return {
type: "Polygon",
coordinates: [
X(X0).concat(
Y(Y1).slice(1),
X(X1).reverse().slice(1),
Y(Y0).reverse().slice(1))
]
};
};
graticule.extent = function(_) {
if (!arguments.length) return graticule.extentMinor();
return graticule.extentMajor(_).extentMinor(_);
};
graticule.extentMajor = function(_) {
if (!arguments.length) return [[X0, Y0], [X1, Y1]];
X0 = +_[0][0], X1 = +_[1][0];
Y0 = +_[0][1], Y1 = +_[1][1];
if (X0 > X1) _ = X0, X0 = X1, X1 = _;
if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _;
return graticule.precision(precision);
};
graticule.extentMinor = function(_) {
if (!arguments.length) return [[x0, y0], [x1, y1]];
x0 = +_[0][0], x1 = +_[1][0];
y0 = +_[0][1], y1 = +_[1][1];
if (x0 > x1) _ = x0, x0 = x1, x1 = _;
if (y0 > y1) _ = y0, y0 = y1, y1 = _;
return graticule.precision(precision);
};
graticule.step = function(_) {
if (!arguments.length) return graticule.stepMinor();
return graticule.stepMajor(_).stepMinor(_);
};
graticule.stepMajor = function(_) {
if (!arguments.length) return [DX, DY];
DX = +_[0], DY = +_[1];
return graticule;
};
graticule.stepMinor = function(_) {
if (!arguments.length) return [dx, dy];
dx = +_[0], dy = +_[1];
return graticule;
};
graticule.precision = function(_) {
if (!arguments.length) return precision;
precision = +_;
x = graticuleX(y0, y1, 90);
y = graticuleY(x0, x1, precision);
X = graticuleX(Y0, Y1, 90);
Y = graticuleY(X0, X1, precision);
return graticule;
};
return graticule
.extentMajor([[-180, -90 + epsilon$2], [180, 90 - epsilon$2]])
.extentMinor([[-180, -80 - epsilon$2], [180, 80 + epsilon$2]]);
}
function graticule10() {
return graticule()();
}
var interpolate$1 = function(a, b) {
var x0 = a[0] * radians,
y0 = a[1] * radians,
x1 = b[0] * radians,
y1 = b[1] * radians,
cy0 = cos$1(y0),
sy0 = sin$1(y0),
cy1 = cos$1(y1),
sy1 = sin$1(y1),
kx0 = cy0 * cos$1(x0),
ky0 = cy0 * sin$1(x0),
kx1 = cy1 * cos$1(x1),
ky1 = cy1 * sin$1(x1),
d = 2 * asin(sqrt(haversin(y1 - y0) + cy0 * cy1 * haversin(x1 - x0))),
k = sin$1(d);
var interpolate = d ? function(t) {
var B = sin$1(t *= d) / k,
A = sin$1(d - t) / k,
x = A * kx0 + B * kx1,
y = A * ky0 + B * ky1,
z = A * sy0 + B * sy1;
return [
atan2(y, x) * degrees$1,
atan2(z, sqrt(x * x + y * y)) * degrees$1
];
} : function() {
return [x0 * degrees$1, y0 * degrees$1];
};
interpolate.distance = d;
return interpolate;
};
var identity$4 = function(x) {
return x;
};
var areaSum$1 = adder();
var areaRingSum$1 = adder();
var x00;
var y00;
var x0$1;
var y0$1;
var areaStream$1 = {
point: noop$1,
lineStart: noop$1,
lineEnd: noop$1,
polygonStart: function() {
areaStream$1.lineStart = areaRingStart$1;
areaStream$1.lineEnd = areaRingEnd$1;
},
polygonEnd: function() {
areaStream$1.lineStart = areaStream$1.lineEnd = areaStream$1.point = noop$1;
areaSum$1.add(abs(areaRingSum$1));
areaRingSum$1.reset();
},
result: function() {
var area = areaSum$1 / 2;
areaSum$1.reset();
return area;
}
};
function areaRingStart$1() {
areaStream$1.point = areaPointFirst$1;
}
function areaPointFirst$1(x, y) {
areaStream$1.point = areaPoint$1;
x00 = x0$1 = x, y00 = y0$1 = y;
}
function areaPoint$1(x, y) {
areaRingSum$1.add(y0$1 * x - x0$1 * y);
x0$1 = x, y0$1 = y;
}
function areaRingEnd$1() {
areaPoint$1(x00, y00);
}
var x0$2 = Infinity;
var y0$2 = x0$2;
var x1 = -x0$2;
var y1 = x1;
var boundsStream$1 = {
point: boundsPoint$1,
lineStart: noop$1,
lineEnd: noop$1,
polygonStart: noop$1,
polygonEnd: noop$1,
result: function() {
var bounds = [[x0$2, y0$2], [x1, y1]];
x1 = y1 = -(y0$2 = x0$2 = Infinity);
return bounds;
}
};
function boundsPoint$1(x, y) {
if (x < x0$2) x0$2 = x;
if (x > x1) x1 = x;
if (y < y0$2) y0$2 = y;
if (y > y1) y1 = y;
}
// TODO Enforce positive area for exterior, negative area for interior?
var X0$1 = 0;
var Y0$1 = 0;
var Z0$1 = 0;
var X1$1 = 0;
var Y1$1 = 0;
var Z1$1 = 0;
var X2$1 = 0;
var Y2$1 = 0;
var Z2$1 = 0;
var x00$1;
var y00$1;
var x0$3;
var y0$3;
var centroidStream$1 = {
point: centroidPoint$1,
lineStart: centroidLineStart$1,
lineEnd: centroidLineEnd$1,
polygonStart: function() {
centroidStream$1.lineStart = centroidRingStart$1;
centroidStream$1.lineEnd = centroidRingEnd$1;
},
polygonEnd: function() {
centroidStream$1.point = centroidPoint$1;
centroidStream$1.lineStart = centroidLineStart$1;
centroidStream$1.lineEnd = centroidLineEnd$1;
},
result: function() {
var centroid = Z2$1 ? [X2$1 / Z2$1, Y2$1 / Z2$1]
: Z1$1 ? [X1$1 / Z1$1, Y1$1 / Z1$1]
: Z0$1 ? [X0$1 / Z0$1, Y0$1 / Z0$1]
: [NaN, NaN];
X0$1 = Y0$1 = Z0$1 =
X1$1 = Y1$1 = Z1$1 =
X2$1 = Y2$1 = Z2$1 = 0;
return centroid;
}
};
function centroidPoint$1(x, y) {
X0$1 += x;
Y0$1 += y;
++Z0$1;
}
function centroidLineStart$1() {
centroidStream$1.point = centroidPointFirstLine;
}
function centroidPointFirstLine(x, y) {
centroidStream$1.point = centroidPointLine;
centroidPoint$1(x0$3 = x, y0$3 = y);
}
function centroidPointLine(x, y) {
var dx = x - x0$3, dy = y - y0$3, z = sqrt(dx * dx + dy * dy);
X1$1 += z * (x0$3 + x) / 2;
Y1$1 += z * (y0$3 + y) / 2;
Z1$1 += z;
centroidPoint$1(x0$3 = x, y0$3 = y);
}
function centroidLineEnd$1() {
centroidStream$1.point = centroidPoint$1;
}
function centroidRingStart$1() {
centroidStream$1.point = centroidPointFirstRing;
}
function centroidRingEnd$1() {
centroidPointRing(x00$1, y00$1);
}
function centroidPointFirstRing(x, y) {
centroidStream$1.point = centroidPointRing;
centroidPoint$1(x00$1 = x0$3 = x, y00$1 = y0$3 = y);
}
function centroidPointRing(x, y) {
var dx = x - x0$3,
dy = y - y0$3,
z = sqrt(dx * dx + dy * dy);
X1$1 += z * (x0$3 + x) / 2;
Y1$1 += z * (y0$3 + y) / 2;
Z1$1 += z;
z = y0$3 * x - x0$3 * y;
X2$1 += z * (x0$3 + x);
Y2$1 += z * (y0$3 + y);
Z2$1 += z * 3;
centroidPoint$1(x0$3 = x, y0$3 = y);
}
function PathContext(context) {
this._context = context;
}
PathContext.prototype = {
_radius: 4.5,
pointRadius: function(_) {
return this._radius = _, this;
},
polygonStart: function() {
this._line = 0;
},
polygonEnd: function() {
this._line = NaN;
},
lineStart: function() {
this._point = 0;
},
lineEnd: function() {
if (this._line === 0) this._context.closePath();
this._point = NaN;
},
point: function(x, y) {
switch (this._point) {
case 0: {
this._context.moveTo(x, y);
this._point = 1;
break;
}
case 1: {
this._context.lineTo(x, y);
break;
}
default: {
this._context.moveTo(x + this._radius, y);
this._context.arc(x, y, this._radius, 0, tau$3);
break;
}
}
},
result: noop$1
};
var lengthSum$1 = adder();
var lengthRing;
var x00$2;
var y00$2;
var x0$4;
var y0$4;
var lengthStream$1 = {
point: noop$1,
lineStart: function() {
lengthStream$1.point = lengthPointFirst$1;
},
lineEnd: function() {
if (lengthRing) lengthPoint$1(x00$2, y00$2);
lengthStream$1.point = noop$1;
},
polygonStart: function() {
lengthRing = true;
},
polygonEnd: function() {
lengthRing = null;
},
result: function() {
var length = +lengthSum$1;
lengthSum$1.reset();
return length;
}
};
function lengthPointFirst$1(x, y) {
lengthStream$1.point = lengthPoint$1;
x00$2 = x0$4 = x, y00$2 = y0$4 = y;
}
function lengthPoint$1(x, y) {
x0$4 -= x, y0$4 -= y;
lengthSum$1.add(sqrt(x0$4 * x0$4 + y0$4 * y0$4));
x0$4 = x, y0$4 = y;
}
function PathString() {
this._string = [];
}
PathString.prototype = {
_circle: circle(4.5),
pointRadius: function(_) {
return this._circle = circle(_), this;
},
polygonStart: function() {
this._line = 0;
},
polygonEnd: function() {
this._line = NaN;
},
lineStart: function() {
this._point = 0;
},
lineEnd: function() {
if (this._line === 0) this._string.push("Z");
this._point = NaN;
},
point: function(x, y) {
switch (this._point) {
case 0: {
this._string.push("M", x, ",", y);
this._point = 1;
break;
}
case 1: {
this._string.push("L", x, ",", y);
break;
}
default: {
this._string.push("M", x, ",", y, this._circle);
break;
}
}
},
result: function() {
if (this._string.length) {
var result = this._string.join("");
this._string = [];
return result;
}
}
};
function circle(radius) {
return "m0," + radius
+ "a" + radius + "," + radius + " 0 1,1 0," + -2 * radius
+ "a" + radius + "," + radius + " 0 1,1 0," + 2 * radius
+ "z";
}
var index$1 = function(projection, context) {
var pointRadius = 4.5,
projectionStream,
contextStream;
function path(object) {
if (object) {
if (typeof pointRadius === "function") contextStream.pointRadius(+pointRadius.apply(this, arguments));
geoStream(object, projectionStream(contextStream));
}
return contextStream.result();
}
path.area = function(object) {
geoStream(object, projectionStream(areaStream$1));
return areaStream$1.result();
};
path.measure = function(object) {
geoStream(object, projectionStream(lengthStream$1));
return lengthStream$1.result();
};
path.bounds = function(object) {
geoStream(object, projectionStream(boundsStream$1));
return boundsStream$1.result();
};
path.centroid = function(object) {
geoStream(object, projectionStream(centroidStream$1));
return centroidStream$1.result();
};
path.projection = function(_) {
return arguments.length ? (projectionStream = _ == null ? (projection = null, identity$4) : (projection = _).stream, path) : projection;
};
path.context = function(_) {
if (!arguments.length) return context;
contextStream = _ == null ? (context = null, new PathString) : new PathContext(context = _);
if (typeof pointRadius !== "function") contextStream.pointRadius(pointRadius);
return path;
};
path.pointRadius = function(_) {
if (!arguments.length) return pointRadius;
pointRadius = typeof _ === "function" ? _ : (contextStream.pointRadius(+_), +_);
return path;
};
return path.projection(projection).context(context);
};
var clip = function(pointVisible, clipLine, interpolate, start) {
return function(rotate, sink) {
var line = clipLine(sink),
rotatedStart = rotate.invert(start[0], start[1]),
ringBuffer = clipBuffer(),
ringSink = clipLine(ringBuffer),
polygonStarted = false,
polygon,
segments,
ring;
var clip = {
point: point,
lineStart: lineStart,
lineEnd: lineEnd,
polygonStart: function() {
clip.point = pointRing;
clip.lineStart = ringStart;
clip.lineEnd = ringEnd;
segments = [];
polygon = [];
},
polygonEnd: function() {
clip.point = point;
clip.lineStart = lineStart;
clip.lineEnd = lineEnd;
segments = merge(segments);
var startInside = polygonContains(polygon, rotatedStart);
if (segments.length) {
if (!polygonStarted) sink.polygonStart(), polygonStarted = true;
clipPolygon(segments, compareIntersection, startInside, interpolate, sink);
} else if (startInside) {
if (!polygonStarted) sink.polygonStart(), polygonStarted = true;
sink.lineStart();
interpolate(null, null, 1, sink);
sink.lineEnd();
}
if (polygonStarted) sink.polygonEnd(), polygonStarted = false;
segments = polygon = null;
},
sphere: function() {
sink.polygonStart();
sink.lineStart();
interpolate(null, null, 1, sink);
sink.lineEnd();
sink.polygonEnd();
}
};
function point(lambda, phi) {
var point = rotate(lambda, phi);
if (pointVisible(lambda = point[0], phi = point[1])) sink.point(lambda, phi);
}
function pointLine(lambda, phi) {
var point = rotate(lambda, phi);
line.point(point[0], point[1]);
}
function lineStart() {
clip.point = pointLine;
line.lineStart();
}
function lineEnd() {
clip.point = point;
line.lineEnd();
}
function pointRing(lambda, phi) {
ring.push([lambda, phi]);
var point = rotate(lambda, phi);
ringSink.point(point[0], point[1]);
}
function ringStart() {
ringSink.lineStart();
ring = [];
}
function ringEnd() {
pointRing(ring[0][0], ring[0][1]);
ringSink.lineEnd();
var clean = ringSink.clean(),
ringSegments = ringBuffer.result(),
i, n = ringSegments.length, m,
segment,
point;
ring.pop();
polygon.push(ring);
ring = null;
if (!n) return;
// No intersections.
if (clean & 1) {
segment = ringSegments[0];
if ((m = segment.length - 1) > 0) {
if (!polygonStarted) sink.polygonStart(), polygonStarted = true;
sink.lineStart();
for (i = 0; i < m; ++i) sink.point((point = segment[i])[0], point[1]);
sink.lineEnd();
}
return;
}
// Rejoin connected segments.
// TODO reuse ringBuffer.rejoin()?
if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));
segments.push(ringSegments.filter(validSegment));
}
return clip;
};
};
function validSegment(segment) {
return segment.length > 1;
}
// Intersections are sorted along the clip edge. For both antimeridian cutting
// and circle clipping, the same comparison is used.
function compareIntersection(a, b) {
return ((a = a.x)[0] < 0 ? a[1] - halfPi$2 - epsilon$2 : halfPi$2 - a[1])
- ((b = b.x)[0] < 0 ? b[1] - halfPi$2 - epsilon$2 : halfPi$2 - b[1]);
}
var clipAntimeridian = clip(
function() { return true; },
clipAntimeridianLine,
clipAntimeridianInterpolate,
[-pi$3, -halfPi$2]
);
// Takes a line and cuts into visible segments. Return values: 0 - there were
// intersections or the line was empty; 1 - no intersections; 2 - there were
// intersections, and the first and last segments should be rejoined.
function clipAntimeridianLine(stream) {
var lambda0 = NaN,
phi0 = NaN,
sign0 = NaN,
clean; // no intersections
return {
lineStart: function() {
stream.lineStart();
clean = 1;
},
point: function(lambda1, phi1) {
var sign1 = lambda1 > 0 ? pi$3 : -pi$3,
delta = abs(lambda1 - lambda0);
if (abs(delta - pi$3) < epsilon$2) { // line crosses a pole
stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? halfPi$2 : -halfPi$2);
stream.point(sign0, phi0);
stream.lineEnd();
stream.lineStart();
stream.point(sign1, phi0);
stream.point(lambda1, phi0);
clean = 0;
} else if (sign0 !== sign1 && delta >= pi$3) { // line crosses antimeridian
if (abs(lambda0 - sign0) < epsilon$2) lambda0 -= sign0 * epsilon$2; // handle degeneracies
if (abs(lambda1 - sign1) < epsilon$2) lambda1 -= sign1 * epsilon$2;
phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1);
stream.point(sign0, phi0);
stream.lineEnd();
stream.lineStart();
stream.point(sign1, phi0);
clean = 0;
}
stream.point(lambda0 = lambda1, phi0 = phi1);
sign0 = sign1;
},
lineEnd: function() {
stream.lineEnd();
lambda0 = phi0 = NaN;
},
clean: function() {
return 2 - clean; // if intersections, rejoin first and last segments
}
};
}
function clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) {
var cosPhi0,
cosPhi1,
sinLambda0Lambda1 = sin$1(lambda0 - lambda1);
return abs(sinLambda0Lambda1) > epsilon$2
? atan((sin$1(phi0) * (cosPhi1 = cos$1(phi1)) * sin$1(lambda1)
- sin$1(phi1) * (cosPhi0 = cos$1(phi0)) * sin$1(lambda0))
/ (cosPhi0 * cosPhi1 * sinLambda0Lambda1))
: (phi0 + phi1) / 2;
}
function clipAntimeridianInterpolate(from, to, direction, stream) {
var phi;
if (from == null) {
phi = direction * halfPi$2;
stream.point(-pi$3, phi);
stream.point(0, phi);
stream.point(pi$3, phi);
stream.point(pi$3, 0);
stream.point(pi$3, -phi);
stream.point(0, -phi);
stream.point(-pi$3, -phi);
stream.point(-pi$3, 0);
stream.point(-pi$3, phi);
} else if (abs(from[0] - to[0]) > epsilon$2) {
var lambda = from[0] < to[0] ? pi$3 : -pi$3;
phi = direction * lambda / 2;
stream.point(-lambda, phi);
stream.point(0, phi);
stream.point(lambda, phi);
} else {
stream.point(to[0], to[1]);
}
}
var clipCircle = function(radius, delta) {
var cr = cos$1(radius),
smallRadius = cr > 0,
notHemisphere = abs(cr) > epsilon$2; // TODO optimise for this common case
function interpolate(from, to, direction, stream) {
circleStream(stream, radius, delta, direction, from, to);
}
function visible(lambda, phi) {
return cos$1(lambda) * cos$1(phi) > cr;
}
// Takes a line and cuts into visible segments. Return values used for polygon
// clipping: 0 - there were intersections or the line was empty; 1 - no
// intersections 2 - there were intersections, and the first and last segments
// should be rejoined.
function clipLine(stream) {
var point0, // previous point
c0, // code for previous point
v0, // visibility of previous point
v00, // visibility of first point
clean; // no intersections
return {
lineStart: function() {
v00 = v0 = false;
clean = 1;
},
point: function(lambda, phi) {
var point1 = [lambda, phi],
point2,
v = visible(lambda, phi),
c = smallRadius
? v ? 0 : code(lambda, phi)
: v ? code(lambda + (lambda < 0 ? pi$3 : -pi$3), phi) : 0;
if (!point0 && (v00 = v0 = v)) stream.lineStart();
// Handle degeneracies.
// TODO ignore if not clipping polygons.
if (v !== v0) {
point2 = intersect(point0, point1);
if (pointEqual(point0, point2) || pointEqual(point1, point2)) {
point1[0] += epsilon$2;
point1[1] += epsilon$2;
v = visible(point1[0], point1[1]);
}
}
if (v !== v0) {
clean = 0;
if (v) {
// outside going in
stream.lineStart();
point2 = intersect(point1, point0);
stream.point(point2[0], point2[1]);
} else {
// inside going out
point2 = intersect(point0, point1);
stream.point(point2[0], point2[1]);
stream.lineEnd();
}
point0 = point2;
} else if (notHemisphere && point0 && smallRadius ^ v) {
var t;
// If the codes for two points are different, or are both zero,
// and there this segment intersects with the small circle.
if (!(c & c0) && (t = intersect(point1, point0, true))) {
clean = 0;
if (smallRadius) {
stream.lineStart();
stream.point(t[0][0], t[0][1]);
stream.point(t[1][0], t[1][1]);
stream.lineEnd();
} else {
stream.point(t[1][0], t[1][1]);
stream.lineEnd();
stream.lineStart();
stream.point(t[0][0], t[0][1]);
}
}
}
if (v && (!point0 || !pointEqual(point0, point1))) {
stream.point(point1[0], point1[1]);
}
point0 = point1, v0 = v, c0 = c;
},
lineEnd: function() {
if (v0) stream.lineEnd();
point0 = null;
},
// Rejoin first and last segments if there were intersections and the first
// and last points were visible.
clean: function() {
return clean | ((v00 && v0) << 1);
}
};
}
// Intersects the great circle between a and b with the clip circle.
function intersect(a, b, two) {
var pa = cartesian(a),
pb = cartesian(b);
// We have two planes, n1.p = d1 and n2.p = d2.
// Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 ⨯ n2).
var n1 = [1, 0, 0], // normal
n2 = cartesianCross(pa, pb),
n2n2 = cartesianDot(n2, n2),
n1n2 = n2[0], // cartesianDot(n1, n2),
determinant = n2n2 - n1n2 * n1n2;
// Two polar points.
if (!determinant) return !two && a;
var c1 = cr * n2n2 / determinant,
c2 = -cr * n1n2 / determinant,
n1xn2 = cartesianCross(n1, n2),
A = cartesianScale(n1, c1),
B = cartesianScale(n2, c2);
cartesianAddInPlace(A, B);
// Solve |p(t)|^2 = 1.
var u = n1xn2,
w = cartesianDot(A, u),
uu = cartesianDot(u, u),
t2 = w * w - uu * (cartesianDot(A, A) - 1);
if (t2 < 0) return;
var t = sqrt(t2),
q = cartesianScale(u, (-w - t) / uu);
cartesianAddInPlace(q, A);
q = spherical(q);
if (!two) return q;
// Two intersection points.
var lambda0 = a[0],
lambda1 = b[0],
phi0 = a[1],
phi1 = b[1],
z;
if (lambda1 < lambda0) z = lambda0, lambda0 = lambda1, lambda1 = z;
var delta = lambda1 - lambda0,
polar = abs(delta - pi$3) < epsilon$2,
meridian = polar || delta < epsilon$2;
if (!polar && phi1 < phi0) z = phi0, phi0 = phi1, phi1 = z;
// Check that the first point is between a and b.
if (meridian
? polar
? phi0 + phi1 > 0 ^ q[1] < (abs(q[0] - lambda0) < epsilon$2 ? phi0 : phi1)
: phi0 <= q[1] && q[1] <= phi1
: delta > pi$3 ^ (lambda0 <= q[0] && q[0] <= lambda1)) {
var q1 = cartesianScale(u, (-w + t) / uu);
cartesianAddInPlace(q1, A);
return [q, spherical(q1)];
}
}
// Generates a 4-bit vector representing the location of a point relative to
// the small circle's bounding box.
function code(lambda, phi) {
var r = smallRadius ? radius : pi$3 - radius,
code = 0;
if (lambda < -r) code |= 1; // left
else if (lambda > r) code |= 2; // right
if (phi < -r) code |= 4; // below
else if (phi > r) code |= 8; // above
return code;
}
return clip(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-pi$3, radius - pi$3]);
};
var transform = function(methods) {
return {
stream: transformer(methods)
};
};
function transformer(methods) {
return function(stream) {
var s = new TransformStream;
for (var key in methods) s[key] = methods[key];
s.stream = stream;
return s;
};
}
function TransformStream() {}
TransformStream.prototype = {
constructor: TransformStream,
point: function(x, y) { this.stream.point(x, y); },
sphere: function() { this.stream.sphere(); },
lineStart: function() { this.stream.lineStart(); },
lineEnd: function() { this.stream.lineEnd(); },
polygonStart: function() { this.stream.polygonStart(); },
polygonEnd: function() { this.stream.polygonEnd(); }
};
function fitExtent(projection, extent, object) {
var w = extent[1][0] - extent[0][0],
h = extent[1][1] - extent[0][1],
clip = projection.clipExtent && projection.clipExtent();
projection
.scale(150)
.translate([0, 0]);
if (clip != null) projection.clipExtent(null);
geoStream(object, projection.stream(boundsStream$1));
var b = boundsStream$1.result(),
k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])),
x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2,
y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2;
if (clip != null) projection.clipExtent(clip);
return projection
.scale(k * 150)
.translate([x, y]);
}
function fitSize(projection, size, object) {
return fitExtent(projection, [[0, 0], size], object);
}
var maxDepth = 16;
var cosMinDistance = cos$1(30 * radians); // cos(minimum angular distance)
var resample = function(project, delta2) {
return +delta2 ? resample$1(project, delta2) : resampleNone(project);
};
function resampleNone(project) {
return transformer({
point: function(x, y) {
x = project(x, y);
this.stream.point(x[0], x[1]);
}
});
}
function resample$1(project, delta2) {
function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) {
var dx = x1 - x0,
dy = y1 - y0,
d2 = dx * dx + dy * dy;
if (d2 > 4 * delta2 && depth--) {
var a = a0 + a1,
b = b0 + b1,
c = c0 + c1,
m = sqrt(a * a + b * b + c * c),
phi2 = asin(c /= m),
lambda2 = abs(abs(c) - 1) < epsilon$2 || abs(lambda0 - lambda1) < epsilon$2 ? (lambda0 + lambda1) / 2 : atan2(b, a),
p = project(lambda2, phi2),
x2 = p[0],
y2 = p[1],
dx2 = x2 - x0,
dy2 = y2 - y0,
dz = dy * dx2 - dx * dy2;
if (dz * dz / d2 > delta2 // perpendicular projected distance
|| abs((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end
|| a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance
resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream);
stream.point(x2, y2);
resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream);
}
}
}
return function(stream) {
var lambda00, x00, y00, a00, b00, c00, // first point
lambda0, x0, y0, a0, b0, c0; // previous point
var resampleStream = {
point: point,
lineStart: lineStart,
lineEnd: lineEnd,
polygonStart: function() { stream.polygonStart(); resampleStream.lineStart = ringStart; },
polygonEnd: function() { stream.polygonEnd(); resampleStream.lineStart = lineStart; }
};
function point(x, y) {
x = project(x, y);
stream.point(x[0], x[1]);
}
function lineStart() {
x0 = NaN;
resampleStream.point = linePoint;
stream.lineStart();
}
function linePoint(lambda, phi) {
var c = cartesian([lambda, phi]), p = project(lambda, phi);
resampleLineTo(x0, y0, lambda0, a0, b0, c0, x0 = p[0], y0 = p[1], lambda0 = lambda, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);
stream.point(x0, y0);
}
function lineEnd() {
resampleStream.point = point;
stream.lineEnd();
}
function ringStart() {
lineStart();
resampleStream.point = ringPoint;
resampleStream.lineEnd = ringEnd;
}
function ringPoint(lambda, phi) {
linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;
resampleStream.point = linePoint;
}
function ringEnd() {
resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream);
resampleStream.lineEnd = lineEnd;
lineEnd();
}
return resampleStream;
};
}
var transformRadians = transformer({
point: function(x, y) {
this.stream.point(x * radians, y * radians);
}
});
function projection(project) {
return projectionMutator(function() { return project; })();
}
function projectionMutator(projectAt) {
var project,
k = 150, // scale
x = 480, y = 250, // translate
dx, dy, lambda = 0, phi = 0, // center
deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, projectRotate, // rotate
theta = null, preclip = clipAntimeridian, // clip angle
x0 = null, y0, x1, y1, postclip = identity$4, // clip extent
delta2 = 0.5, projectResample = resample(projectTransform, delta2), // precision
cache,
cacheStream;
function projection(point) {
point = projectRotate(point[0] * radians, point[1] * radians);
return [point[0] * k + dx, dy - point[1] * k];
}
function invert(point) {
point = projectRotate.invert((point[0] - dx) / k, (dy - point[1]) / k);
return point && [point[0] * degrees$1, point[1] * degrees$1];
}
function projectTransform(x, y) {
return x = project(x, y), [x[0] * k + dx, dy - x[1] * k];
}
projection.stream = function(stream) {
return cache && cacheStream === stream ? cache : cache = transformRadians(preclip(rotate, projectResample(postclip(cacheStream = stream))));
};
projection.clipAngle = function(_) {
return arguments.length ? (preclip = +_ ? clipCircle(theta = _ * radians, 6 * radians) : (theta = null, clipAntimeridian), reset()) : theta * degrees$1;
};
projection.clipExtent = function(_) {
return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity$4) : clipExtent(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];
};
projection.scale = function(_) {
return arguments.length ? (k = +_, recenter()) : k;
};
projection.translate = function(_) {
return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y];
};
projection.center = function(_) {
return arguments.length ? (lambda = _[0] % 360 * radians, phi = _[1] % 360 * radians, recenter()) : [lambda * degrees$1, phi * degrees$1];
};
projection.rotate = function(_) {
return arguments.length ? (deltaLambda = _[0] % 360 * radians, deltaPhi = _[1] % 360 * radians, deltaGamma = _.length > 2 ? _[2] % 360 * radians : 0, recenter()) : [deltaLambda * degrees$1, deltaPhi * degrees$1, deltaGamma * degrees$1];
};
projection.precision = function(_) {
return arguments.length ? (projectResample = resample(projectTransform, delta2 = _ * _), reset()) : sqrt(delta2);
};
projection.fitExtent = function(extent, object) {
return fitExtent(projection, extent, object);
};
projection.fitSize = function(size, object) {
return fitSize(projection, size, object);
};
function recenter() {
projectRotate = compose(rotate = rotateRadians(deltaLambda, deltaPhi, deltaGamma), project);
var center = project(lambda, phi);
dx = x - center[0] * k;
dy = y + center[1] * k;
return reset();
}
function reset() {
cache = cacheStream = null;
return projection;
}
return function() {
project = projectAt.apply(this, arguments);
projection.invert = project.invert && invert;
return recenter();
};
}
function conicProjection(projectAt) {
var phi0 = 0,
phi1 = pi$3 / 3,
m = projectionMutator(projectAt),
p = m(phi0, phi1);
p.parallels = function(_) {
return arguments.length ? m(phi0 = _[0] * radians, phi1 = _[1] * radians) : [phi0 * degrees$1, phi1 * degrees$1];
};
return p;
}
function cylindricalEqualAreaRaw(phi0) {
var cosPhi0 = cos$1(phi0);
function forward(lambda, phi) {
return [lambda * cosPhi0, sin$1(phi) / cosPhi0];
}
forward.invert = function(x, y) {
return [x / cosPhi0, asin(y * cosPhi0)];
};
return forward;
}
function conicEqualAreaRaw(y0, y1) {
var sy0 = sin$1(y0), n = (sy0 + sin$1(y1)) / 2;
// Are the parallels symmetrical around the Equator?
if (abs(n) < epsilon$2) return cylindricalEqualAreaRaw(y0);
var c = 1 + sy0 * (2 * n - sy0), r0 = sqrt(c) / n;
function project(x, y) {
var r = sqrt(c - 2 * n * sin$1(y)) / n;
return [r * sin$1(x *= n), r0 - r * cos$1(x)];
}
project.invert = function(x, y) {
var r0y = r0 - y;
return [atan2(x, abs(r0y)) / n * sign(r0y), asin((c - (x * x + r0y * r0y) * n * n) / (2 * n))];
};
return project;
}
var conicEqualArea = function() {
return conicProjection(conicEqualAreaRaw)
.scale(155.424)
.center([0, 33.6442]);
};
var albers = function() {
return conicEqualArea()
.parallels([29.5, 45.5])
.scale(1070)
.translate([480, 250])
.rotate([96, 0])
.center([-0.6, 38.7]);
};
// The projections must have mutually exclusive clip regions on the sphere,
// as this will avoid emitting interleaving lines and polygons.
function multiplex(streams) {
var n = streams.length;
return {
point: function(x, y) { var i = -1; while (++i < n) streams[i].point(x, y); },
sphere: function() { var i = -1; while (++i < n) streams[i].sphere(); },
lineStart: function() { var i = -1; while (++i < n) streams[i].lineStart(); },
lineEnd: function() { var i = -1; while (++i < n) streams[i].lineEnd(); },
polygonStart: function() { var i = -1; while (++i < n) streams[i].polygonStart(); },
polygonEnd: function() { var i = -1; while (++i < n) streams[i].polygonEnd(); }
};
}
// A composite projection for the United States, configured by default for
// 960×500. The projection also works quite well at 960×600 if you change the
// scale to 1285 and adjust the translate accordingly. The set of standard
// parallels for each region comes from USGS, which is published here:
// http://egsc.usgs.gov/isb/pubs/MapProjections/projections.html#albers
var albersUsa = function() {
var cache,
cacheStream,
lower48 = albers(), lower48Point,
alaska = conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]), alaskaPoint, // EPSG:3338
hawaii = conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]), hawaiiPoint, // ESRI:102007
point, pointStream = {point: function(x, y) { point = [x, y]; }};
function albersUsa(coordinates) {
var x = coordinates[0], y = coordinates[1];
return point = null,
(lower48Point.point(x, y), point)
|| (alaskaPoint.point(x, y), point)
|| (hawaiiPoint.point(x, y), point);
}
albersUsa.invert = function(coordinates) {
var k = lower48.scale(),
t = lower48.translate(),
x = (coordinates[0] - t[0]) / k,
y = (coordinates[1] - t[1]) / k;
return (y >= 0.120 && y < 0.234 && x >= -0.425 && x < -0.214 ? alaska
: y >= 0.166 && y < 0.234 && x >= -0.214 && x < -0.115 ? hawaii
: lower48).invert(coordinates);
};
albersUsa.stream = function(stream) {
return cache && cacheStream === stream ? cache : cache = multiplex([lower48.stream(cacheStream = stream), alaska.stream(stream), hawaii.stream(stream)]);
};
albersUsa.precision = function(_) {
if (!arguments.length) return lower48.precision();
lower48.precision(_), alaska.precision(_), hawaii.precision(_);
return reset();
};
albersUsa.scale = function(_) {
if (!arguments.length) return lower48.scale();
lower48.scale(_), alaska.scale(_ * 0.35), hawaii.scale(_);
return albersUsa.translate(lower48.translate());
};
albersUsa.translate = function(_) {
if (!arguments.length) return lower48.translate();
var k = lower48.scale(), x = +_[0], y = +_[1];
lower48Point = lower48
.translate(_)
.clipExtent([[x - 0.455 * k, y - 0.238 * k], [x + 0.455 * k, y + 0.238 * k]])
.stream(pointStream);
alaskaPoint = alaska
.translate([x - 0.307 * k, y + 0.201 * k])
.clipExtent([[x - 0.425 * k + epsilon$2, y + 0.120 * k + epsilon$2], [x - 0.214 * k - epsilon$2, y + 0.234 * k - epsilon$2]])
.stream(pointStream);
hawaiiPoint = hawaii
.translate([x - 0.205 * k, y + 0.212 * k])
.clipExtent([[x - 0.214 * k + epsilon$2, y + 0.166 * k + epsilon$2], [x - 0.115 * k - epsilon$2, y + 0.234 * k - epsilon$2]])
.stream(pointStream);
return reset();
};
albersUsa.fitExtent = function(extent, object) {
return fitExtent(albersUsa, extent, object);
};
albersUsa.fitSize = function(size, object) {
return fitSize(albersUsa, size, object);
};
function reset() {
cache = cacheStream = null;
return albersUsa;
}
return albersUsa.scale(1070);
};
function azimuthalRaw(scale) {
return function(x, y) {
var cx = cos$1(x),
cy = cos$1(y),
k = scale(cx * cy);
return [
k * cy * sin$1(x),
k * sin$1(y)
];
}
}
function azimuthalInvert(angle) {
return function(x, y) {
var z = sqrt(x * x + y * y),
c = angle(z),
sc = sin$1(c),
cc = cos$1(c);
return [
atan2(x * sc, z * cc),
asin(z && y * sc / z)
];
}
}
var azimuthalEqualAreaRaw = azimuthalRaw(function(cxcy) {
return sqrt(2 / (1 + cxcy));
});
azimuthalEqualAreaRaw.invert = azimuthalInvert(function(z) {
return 2 * asin(z / 2);
});
var azimuthalEqualArea = function() {
return projection(azimuthalEqualAreaRaw)
.scale(124.75)
.clipAngle(180 - 1e-3);
};
var azimuthalEquidistantRaw = azimuthalRaw(function(c) {
return (c = acos(c)) && c / sin$1(c);
});
azimuthalEquidistantRaw.invert = azimuthalInvert(function(z) {
return z;
});
var azimuthalEquidistant = function() {
return projection(azimuthalEquidistantRaw)
.scale(79.4188)
.clipAngle(180 - 1e-3);
};
function mercatorRaw(lambda, phi) {
return [lambda, log(tan((halfPi$2 + phi) / 2))];
}
mercatorRaw.invert = function(x, y) {
return [x, 2 * atan(exp(y)) - halfPi$2];
};
var mercator = function() {
return mercatorProjection(mercatorRaw)
.scale(961 / tau$3);
};
function mercatorProjection(project) {
var m = projection(project),
center = m.center,
scale = m.scale,
translate = m.translate,
clipExtent = m.clipExtent,
x0 = null, y0, x1, y1; // clip extent
m.scale = function(_) {
return arguments.length ? (scale(_), reclip()) : scale();
};
m.translate = function(_) {
return arguments.length ? (translate(_), reclip()) : translate();
};
m.center = function(_) {
return arguments.length ? (center(_), reclip()) : center();
};
m.clipExtent = function(_) {
return arguments.length ? ((_ == null ? x0 = y0 = x1 = y1 = null : (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1])), reclip()) : x0 == null ? null : [[x0, y0], [x1, y1]];
};
function reclip() {
var k = pi$3 * scale(),
t = m(rotation(m.rotate()).invert([0, 0]));
return clipExtent(x0 == null
? [[t[0] - k, t[1] - k], [t[0] + k, t[1] + k]] : project === mercatorRaw
? [[Math.max(t[0] - k, x0), y0], [Math.min(t[0] + k, x1), y1]]
: [[x0, Math.max(t[1] - k, y0)], [x1, Math.min(t[1] + k, y1)]]);
}
return reclip();
}
function tany(y) {
return tan((halfPi$2 + y) / 2);
}
function conicConformalRaw(y0, y1) {
var cy0 = cos$1(y0),
n = y0 === y1 ? sin$1(y0) : log(cy0 / cos$1(y1)) / log(tany(y1) / tany(y0)),
f = cy0 * pow(tany(y0), n) / n;
if (!n) return mercatorRaw;
function project(x, y) {
if (f > 0) { if (y < -halfPi$2 + epsilon$2) y = -halfPi$2 + epsilon$2; }
else { if (y > halfPi$2 - epsilon$2) y = halfPi$2 - epsilon$2; }
var r = f / pow(tany(y), n);
return [r * sin$1(n * x), f - r * cos$1(n * x)];
}
project.invert = function(x, y) {
var fy = f - y, r = sign(n) * sqrt(x * x + fy * fy);
return [atan2(x, abs(fy)) / n * sign(fy), 2 * atan(pow(f / r, 1 / n)) - halfPi$2];
};
return project;
}
var conicConformal = function() {
return conicProjection(conicConformalRaw)
.scale(109.5)
.parallels([30, 30]);
};
function equirectangularRaw(lambda, phi) {
return [lambda, phi];
}
equirectangularRaw.invert = equirectangularRaw;
var geoEquirectangular = function() {
return projection(equirectangularRaw)
.scale(152.63);
};
function conicEquidistantRaw(y0, y1) {
var cy0 = cos$1(y0),
n = y0 === y1 ? sin$1(y0) : (cy0 - cos$1(y1)) / (y1 - y0),
g = cy0 / n + y0;
if (abs(n) < epsilon$2) return equirectangularRaw;
function project(x, y) {
var gy = g - y, nx = n * x;
return [gy * sin$1(nx), g - gy * cos$1(nx)];
}
project.invert = function(x, y) {
var gy = g - y;
return [atan2(x, abs(gy)) / n * sign(gy), g - sign(n) * sqrt(x * x + gy * gy)];
};
return project;
}
var conicEquidistant = function() {
return conicProjection(conicEquidistantRaw)
.scale(131.154)
.center([0, 13.9389]);
};
function gnomonicRaw(x, y) {
var cy = cos$1(y), k = cos$1(x) * cy;
return [cy * sin$1(x) / k, sin$1(y) / k];
}
gnomonicRaw.invert = azimuthalInvert(atan);
var gnomonic = function() {
return projection(gnomonicRaw)
.scale(144.049)
.clipAngle(60);
};
function scaleTranslate(kx, ky, tx, ty) {
return kx === 1 && ky === 1 && tx === 0 && ty === 0 ? identity$4 : transformer({
point: function(x, y) {
this.stream.point(x * kx + tx, y * ky + ty);
}
});
}
var identity$5 = function() {
var k = 1, tx = 0, ty = 0, sx = 1, sy = 1, transform = identity$4, // scale, translate and reflect
x0 = null, y0, x1, y1, clip = identity$4, // clip extent
cache,
cacheStream,
projection;
function reset() {
cache = cacheStream = null;
return projection;
}
return projection = {
stream: function(stream) {
return cache && cacheStream === stream ? cache : cache = transform(clip(cacheStream = stream));
},
clipExtent: function(_) {
return arguments.length ? (clip = _ == null ? (x0 = y0 = x1 = y1 = null, identity$4) : clipExtent(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];
},
scale: function(_) {
return arguments.length ? (transform = scaleTranslate((k = +_) * sx, k * sy, tx, ty), reset()) : k;
},
translate: function(_) {
return arguments.length ? (transform = scaleTranslate(k * sx, k * sy, tx = +_[0], ty = +_[1]), reset()) : [tx, ty];
},
reflectX: function(_) {
return arguments.length ? (transform = scaleTranslate(k * (sx = _ ? -1 : 1), k * sy, tx, ty), reset()) : sx < 0;
},
reflectY: function(_) {
return arguments.length ? (transform = scaleTranslate(k * sx, k * (sy = _ ? -1 : 1), tx, ty), reset()) : sy < 0;
},
fitExtent: function(extent, object) {
return fitExtent(projection, extent, object);
},
fitSize: function(size, object) {
return fitSize(projection, size, object);
}
};
};
function orthographicRaw(x, y) {
return [cos$1(y) * sin$1(x), sin$1(y)];
}
orthographicRaw.invert = azimuthalInvert(asin);
var geoOrthographic = function() {
return projection(orthographicRaw)
.scale(249.5)
.clipAngle(90 + epsilon$2);
};
function stereographicRaw(x, y) {
var cy = cos$1(y), k = 1 + cos$1(x) * cy;
return [cy * sin$1(x) / k, sin$1(y) / k];
}
stereographicRaw.invert = azimuthalInvert(function(z) {
return 2 * atan(z);
});
var stereographic = function() {
return projection(stereographicRaw)
.scale(250)
.clipAngle(142);
};
function transverseMercatorRaw(lambda, phi) {
return [log(tan((halfPi$2 + phi) / 2)), -lambda];
}
transverseMercatorRaw.invert = function(x, y) {
return [-y, 2 * atan(exp(x)) - halfPi$2];
};
var transverseMercator = function() {
var m = mercatorProjection(transverseMercatorRaw),
center = m.center,
rotate = m.rotate;
m.center = function(_) {
return arguments.length ? center([-_[1], _[0]]) : (_ = center(), [_[1], -_[0]]);
};
m.rotate = function(_) {
return arguments.length ? rotate([_[0], _[1], _.length > 2 ? _[2] + 90 : 90]) : (_ = rotate(), [_[0], _[1], _[2] - 90]);
};
return rotate([0, 0, 90])
.scale(159.155);
};
function defaultSeparation(a, b) {
return a.parent === b.parent ? 1 : 2;
}
function meanX(children) {
return children.reduce(meanXReduce, 0) / children.length;
}
function meanXReduce(x, c) {
return x + c.x;
}
function maxY(children) {
return 1 + children.reduce(maxYReduce, 0);
}
function maxYReduce(y, c) {
return Math.max(y, c.y);
}
function leafLeft(node) {
var children;
while (children = node.children) node = children[0];
return node;
}
function leafRight(node) {
var children;
while (children = node.children) node = children[children.length - 1];
return node;
}
var cluster = function() {
var separation = defaultSeparation,
dx = 1,
dy = 1,
nodeSize = false;
function cluster(root) {
var previousNode,
x = 0;
// First walk, computing the initial x & y values.
root.eachAfter(function(node) {
var children = node.children;
if (children) {
node.x = meanX(children);
node.y = maxY(children);
} else {
node.x = previousNode ? x += separation(node, previousNode) : 0;
node.y = 0;
previousNode = node;
}
});
var left = leafLeft(root),
right = leafRight(root),
x0 = left.x - separation(left, right) / 2,
x1 = right.x + separation(right, left) / 2;
// Second walk, normalizing x & y to the desired size.
return root.eachAfter(nodeSize ? function(node) {
node.x = (node.x - root.x) * dx;
node.y = (root.y - node.y) * dy;
} : function(node) {
node.x = (node.x - x0) / (x1 - x0) * dx;
node.y = (1 - (root.y ? node.y / root.y : 1)) * dy;
});
}
cluster.separation = function(x) {
return arguments.length ? (separation = x, cluster) : separation;
};
cluster.size = function(x) {
return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? null : [dx, dy]);
};
cluster.nodeSize = function(x) {
return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? [dx, dy] : null);
};
return cluster;
};
function count(node) {
var sum = 0,
children = node.children,
i = children && children.length;
if (!i) sum = 1;
else while (--i >= 0) sum += children[i].value;
node.value = sum;
}
var node_count = function() {
return this.eachAfter(count);
};
var node_each = function(callback) {
var node = this, current, next = [node], children, i, n;
do {
current = next.reverse(), next = [];
while (node = current.pop()) {
callback(node), children = node.children;
if (children) for (i = 0, n = children.length; i < n; ++i) {
next.push(children[i]);
}
}
} while (next.length);
return this;
};
var node_eachBefore = function(callback) {
var node = this, nodes = [node], children, i;
while (node = nodes.pop()) {
callback(node), children = node.children;
if (children) for (i = children.length - 1; i >= 0; --i) {
nodes.push(children[i]);
}
}
return this;
};
var node_eachAfter = function(callback) {
var node = this, nodes = [node], next = [], children, i, n;
while (node = nodes.pop()) {
next.push(node), children = node.children;
if (children) for (i = 0, n = children.length; i < n; ++i) {
nodes.push(children[i]);
}
}
while (node = next.pop()) {
callback(node);
}
return this;
};
var node_sum = function(value) {
return this.eachAfter(function(node) {
var sum = +value(node.data) || 0,
children = node.children,
i = children && children.length;
while (--i >= 0) sum += children[i].value;
node.value = sum;
});
};
var node_sort = function(compare) {
return this.eachBefore(function(node) {
if (node.children) {
node.children.sort(compare);
}
});
};
var node_path = function(end) {
var start = this,
ancestor = leastCommonAncestor(start, end),
nodes = [start];
while (start !== ancestor) {
start = start.parent;
nodes.push(start);
}
var k = nodes.length;
while (end !== ancestor) {
nodes.splice(k, 0, end);
end = end.parent;
}
return nodes;
};
function leastCommonAncestor(a, b) {
if (a === b) return a;
var aNodes = a.ancestors(),
bNodes = b.ancestors(),
c = null;
a = aNodes.pop();
b = bNodes.pop();
while (a === b) {
c = a;
a = aNodes.pop();
b = bNodes.pop();
}
return c;
}
var node_ancestors = function() {
var node = this, nodes = [node];
while (node = node.parent) {
nodes.push(node);
}
return nodes;
};
var node_descendants = function() {
var nodes = [];
this.each(function(node) {
nodes.push(node);
});
return nodes;
};
var node_leaves = function() {
var leaves = [];
this.eachBefore(function(node) {
if (!node.children) {
leaves.push(node);
}
});
return leaves;
};
var node_links = function() {
var root = this, links = [];
root.each(function(node) {
if (node !== root) { // Don’t include the root’s parent, if any.
links.push({source: node.parent, target: node});
}
});
return links;
};
function hierarchy(data, children) {
var root = new Node(data),
valued = +data.value && (root.value = data.value),
node,
nodes = [root],
child,
childs,
i,
n;
if (children == null) children = defaultChildren;
while (node = nodes.pop()) {
if (valued) node.value = +node.data.value;
if ((childs = children(node.data)) && (n = childs.length)) {
node.children = new Array(n);
for (i = n - 1; i >= 0; --i) {
nodes.push(child = node.children[i] = new Node(childs[i]));
child.parent = node;
child.depth = node.depth + 1;
}
}
}
return root.eachBefore(computeHeight);
}
function node_copy() {
return hierarchy(this).eachBefore(copyData);
}
function defaultChildren(d) {
return d.children;
}
function copyData(node) {
node.data = node.data.data;
}
function computeHeight(node) {
var height = 0;
do node.height = height;
while ((node = node.parent) && (node.height < ++height));
}
function Node(data) {
this.data = data;
this.depth =
this.height = 0;
this.parent = null;
}
Node.prototype = hierarchy.prototype = {
constructor: Node,
count: node_count,
each: node_each,
eachAfter: node_eachAfter,
eachBefore: node_eachBefore,
sum: node_sum,
sort: node_sort,
path: node_path,
ancestors: node_ancestors,
descendants: node_descendants,
leaves: node_leaves,
links: node_links,
copy: node_copy
};
function Node$2(value) {
this._ = value;
this.next = null;
}
var shuffle$1 = function(array) {
var i,
n = (array = array.slice()).length,
head = null,
node = head;
while (n) {
var next = new Node$2(array[n - 1]);
if (node) node = node.next = next;
else node = head = next;
array[i] = array[--n];
}
return {
head: head,
tail: node
};
};
var enclose = function(circles) {
return encloseN(shuffle$1(circles), []);
};
function encloses(a, b) {
var dx = b.x - a.x,
dy = b.y - a.y,
dr = a.r - b.r;
return dr * dr + 1e-6 > dx * dx + dy * dy;
}
// Returns the smallest circle that contains circles L and intersects circles B.
function encloseN(L, B) {
var circle,
l0 = null,
l1 = L.head,
l2,
p1;
switch (B.length) {
case 1: circle = enclose1(B[0]); break;
case 2: circle = enclose2(B[0], B[1]); break;
case 3: circle = enclose3(B[0], B[1], B[2]); break;
}
while (l1) {
p1 = l1._, l2 = l1.next;
if (!circle || !encloses(circle, p1)) {
// Temporarily truncate L before l1.
if (l0) L.tail = l0, l0.next = null;
else L.head = L.tail = null;
B.push(p1);
circle = encloseN(L, B); // Note: reorders L!
B.pop();
// Move l1 to the front of L and reconnect the truncated list L.
if (L.head) l1.next = L.head, L.head = l1;
else l1.next = null, L.head = L.tail = l1;
l0 = L.tail, l0.next = l2;
} else {
l0 = l1;
}
l1 = l2;
}
L.tail = l0;
return circle;
}
function enclose1(a) {
return {
x: a.x,
y: a.y,
r: a.r
};
}
function enclose2(a, b) {
var x1 = a.x, y1 = a.y, r1 = a.r,
x2 = b.x, y2 = b.y, r2 = b.r,
x21 = x2 - x1, y21 = y2 - y1, r21 = r2 - r1,
l = Math.sqrt(x21 * x21 + y21 * y21);
return {
x: (x1 + x2 + x21 / l * r21) / 2,
y: (y1 + y2 + y21 / l * r21) / 2,
r: (l + r1 + r2) / 2
};
}
function enclose3(a, b, c) {
var x1 = a.x, y1 = a.y, r1 = a.r,
x2 = b.x, y2 = b.y, r2 = b.r,
x3 = c.x, y3 = c.y, r3 = c.r,
a2 = 2 * (x1 - x2),
b2 = 2 * (y1 - y2),
c2 = 2 * (r2 - r1),
d2 = x1 * x1 + y1 * y1 - r1 * r1 - x2 * x2 - y2 * y2 + r2 * r2,
a3 = 2 * (x1 - x3),
b3 = 2 * (y1 - y3),
c3 = 2 * (r3 - r1),
d3 = x1 * x1 + y1 * y1 - r1 * r1 - x3 * x3 - y3 * y3 + r3 * r3,
ab = a3 * b2 - a2 * b3,
xa = (b2 * d3 - b3 * d2) / ab - x1,
xb = (b3 * c2 - b2 * c3) / ab,
ya = (a3 * d2 - a2 * d3) / ab - y1,
yb = (a2 * c3 - a3 * c2) / ab,
A = xb * xb + yb * yb - 1,
B = 2 * (xa * xb + ya * yb + r1),
C = xa * xa + ya * ya - r1 * r1,
r = (-B - Math.sqrt(B * B - 4 * A * C)) / (2 * A);
return {
x: xa + xb * r + x1,
y: ya + yb * r + y1,
r: r
};
}
function place(a, b, c) {
var ax = a.x,
ay = a.y,
da = b.r + c.r,
db = a.r + c.r,
dx = b.x - ax,
dy = b.y - ay,
dc = dx * dx + dy * dy;
if (dc) {
var x = 0.5 + ((db *= db) - (da *= da)) / (2 * dc),
y = Math.sqrt(Math.max(0, 2 * da * (db + dc) - (db -= dc) * db - da * da)) / (2 * dc);
c.x = ax + x * dx + y * dy;
c.y = ay + x * dy - y * dx;
} else {
c.x = ax + db;
c.y = ay;
}
}
function intersects(a, b) {
var dx = b.x - a.x,
dy = b.y - a.y,
dr = a.r + b.r;
return dr * dr - 1e-6 > dx * dx + dy * dy;
}
function distance2(node, x, y) {
var a = node._,
b = node.next._,
ab = a.r + b.r,
dx = (a.x * b.r + b.x * a.r) / ab - x,
dy = (a.y * b.r + b.y * a.r) / ab - y;
return dx * dx + dy * dy;
}
function Node$1(circle) {
this._ = circle;
this.next = null;
this.previous = null;
}
function packEnclose(circles) {
if (!(n = circles.length)) return 0;
var a, b, c, n;
// Place the first circle.
a = circles[0], a.x = 0, a.y = 0;
if (!(n > 1)) return a.r;
// Place the second circle.
b = circles[1], a.x = -b.r, b.x = a.r, b.y = 0;
if (!(n > 2)) return a.r + b.r;
// Place the third circle.
place(b, a, c = circles[2]);
// Initialize the weighted centroid.
var aa = a.r * a.r,
ba = b.r * b.r,
ca = c.r * c.r,
oa = aa + ba + ca,
ox = aa * a.x + ba * b.x + ca * c.x,
oy = aa * a.y + ba * b.y + ca * c.y,
cx, cy, i, j, k, sj, sk;
// Initialize the front-chain using the first three circles a, b and c.
a = new Node$1(a), b = new Node$1(b), c = new Node$1(c);
a.next = c.previous = b;
b.next = a.previous = c;
c.next = b.previous = a;
// Attempt to place each remaining circle…
pack: for (i = 3; i < n; ++i) {
place(a._, b._, c = circles[i]), c = new Node$1(c);
// Find the closest intersecting circle on the front-chain, if any.
// “Closeness” is determined by linear distance along the front-chain.
// “Ahead” or “behind” is likewise determined by linear distance.
j = b.next, k = a.previous, sj = b._.r, sk = a._.r;
do {
if (sj <= sk) {
if (intersects(j._, c._)) {
b = j, a.next = b, b.previous = a, --i;
continue pack;
}
sj += j._.r, j = j.next;
} else {
if (intersects(k._, c._)) {
a = k, a.next = b, b.previous = a, --i;
continue pack;
}
sk += k._.r, k = k.previous;
}
} while (j !== k.next);
// Success! Insert the new circle c between a and b.
c.previous = a, c.next = b, a.next = b.previous = b = c;
// Update the weighted centroid.
oa += ca = c._.r * c._.r;
ox += ca * c._.x;
oy += ca * c._.y;
// Compute the new closest circle pair to the centroid.
aa = distance2(a, cx = ox / oa, cy = oy / oa);
while ((c = c.next) !== b) {
if ((ca = distance2(c, cx, cy)) < aa) {
a = c, aa = ca;
}
}
b = a.next;
}
// Compute the enclosing circle of the front chain.
a = [b._], c = b; while ((c = c.next) !== b) a.push(c._); c = enclose(a);
// Translate the circles to put the enclosing circle around the origin.
for (i = 0; i < n; ++i) a = circles[i], a.x -= c.x, a.y -= c.y;
return c.r;
}
var siblings = function(circles) {
packEnclose(circles);
return circles;
};
function optional(f) {
return f == null ? null : required(f);
}
function required(f) {
if (typeof f !== "function") throw new Error;
return f;
}
function constantZero() {
return 0;
}
var constant$8 = function(x) {
return function() {
return x;
};
};
function defaultRadius$1(d) {
return Math.sqrt(d.value);
}
var index$2 = function() {
var radius = null,
dx = 1,
dy = 1,
padding = constantZero;
function pack(root) {
root.x = dx / 2, root.y = dy / 2;
if (radius) {
root.eachBefore(radiusLeaf(radius))
.eachAfter(packChildren(padding, 0.5))
.eachBefore(translateChild(1));
} else {
root.eachBefore(radiusLeaf(defaultRadius$1))
.eachAfter(packChildren(constantZero, 1))
.eachAfter(packChildren(padding, root.r / Math.min(dx, dy)))
.eachBefore(translateChild(Math.min(dx, dy) / (2 * root.r)));
}
return root;
}
pack.radius = function(x) {
return arguments.length ? (radius = optional(x), pack) : radius;
};
pack.size = function(x) {
return arguments.length ? (dx = +x[0], dy = +x[1], pack) : [dx, dy];
};
pack.padding = function(x) {
return arguments.length ? (padding = typeof x === "function" ? x : constant$8(+x), pack) : padding;
};
return pack;
};
function radiusLeaf(radius) {
return function(node) {
if (!node.children) {
node.r = Math.max(0, +radius(node) || 0);
}
};
}
function packChildren(padding, k) {
return function(node) {
if (children = node.children) {
var children,
i,
n = children.length,
r = padding(node) * k || 0,
e;
if (r) for (i = 0; i < n; ++i) children[i].r += r;
e = packEnclose(children);
if (r) for (i = 0; i < n; ++i) children[i].r -= r;
node.r = e + r;
}
};
}
function translateChild(k) {
return function(node) {
var parent = node.parent;
node.r *= k;
if (parent) {
node.x = parent.x + k * node.x;
node.y = parent.y + k * node.y;
}
};
}
var roundNode = function(node) {
node.x0 = Math.round(node.x0);
node.y0 = Math.round(node.y0);
node.x1 = Math.round(node.x1);
node.y1 = Math.round(node.y1);
};
var treemapDice = function(parent, x0, y0, x1, y1) {
var nodes = parent.children,
node,
i = -1,
n = nodes.length,
k = parent.value && (x1 - x0) / parent.value;
while (++i < n) {
node = nodes[i], node.y0 = y0, node.y1 = y1;
node.x0 = x0, node.x1 = x0 += node.value * k;
}
};
var partition = function() {
var dx = 1,
dy = 1,
padding = 0,
round = false;
function partition(root) {
var n = root.height + 1;
root.x0 =
root.y0 = padding;
root.x1 = dx;
root.y1 = dy / n;
root.eachBefore(positionNode(dy, n));
if (round) root.eachBefore(roundNode);
return root;
}
function positionNode(dy, n) {
return function(node) {
if (node.children) {
treemapDice(node, node.x0, dy * (node.depth + 1) / n, node.x1, dy * (node.depth + 2) / n);
}
var x0 = node.x0,
y0 = node.y0,
x1 = node.x1 - padding,
y1 = node.y1 - padding;
if (x1 < x0) x0 = x1 = (x0 + x1) / 2;
if (y1 < y0) y0 = y1 = (y0 + y1) / 2;
node.x0 = x0;
node.y0 = y0;
node.x1 = x1;
node.y1 = y1;
};
}
partition.round = function(x) {
return arguments.length ? (round = !!x, partition) : round;
};
partition.size = function(x) {
return arguments.length ? (dx = +x[0], dy = +x[1], partition) : [dx, dy];
};
partition.padding = function(x) {
return arguments.length ? (padding = +x, partition) : padding;
};
return partition;
};
var keyPrefix$1 = "$";
var preroot = {depth: -1};
var ambiguous = {};
function defaultId(d) {
return d.id;
}
function defaultParentId(d) {
return d.parentId;
}
var stratify = function() {
var id = defaultId,
parentId = defaultParentId;
function stratify(data) {
var d,
i,
n = data.length,
root,
parent,
node,
nodes = new Array(n),
nodeId,
nodeKey,
nodeByKey = {};
for (i = 0; i < n; ++i) {
d = data[i], node = nodes[i] = new Node(d);
if ((nodeId = id(d, i, data)) != null && (nodeId += "")) {
nodeKey = keyPrefix$1 + (node.id = nodeId);
nodeByKey[nodeKey] = nodeKey in nodeByKey ? ambiguous : node;
}
}
for (i = 0; i < n; ++i) {
node = nodes[i], nodeId = parentId(data[i], i, data);
if (nodeId == null || !(nodeId += "")) {
if (root) throw new Error("multiple roots");
root = node;
} else {
parent = nodeByKey[keyPrefix$1 + nodeId];
if (!parent) throw new Error("missing: " + nodeId);
if (parent === ambiguous) throw new Error("ambiguous: " + nodeId);
if (parent.children) parent.children.push(node);
else parent.children = [node];
node.parent = parent;
}
}
if (!root) throw new Error("no root");
root.parent = preroot;
root.eachBefore(function(node) { node.depth = node.parent.depth + 1; --n; }).eachBefore(computeHeight);
root.parent = null;
if (n > 0) throw new Error("cycle");
return root;
}
stratify.id = function(x) {
return arguments.length ? (id = required(x), stratify) : id;
};
stratify.parentId = function(x) {
return arguments.length ? (parentId = required(x), stratify) : parentId;
};
return stratify;
};
function defaultSeparation$1(a, b) {
return a.parent === b.parent ? 1 : 2;
}
// function radialSeparation(a, b) {
// return (a.parent === b.parent ? 1 : 2) / a.depth;
// }
// This function is used to traverse the left contour of a subtree (or
// subforest). It returns the successor of v on this contour. This successor is
// either given by the leftmost child of v or by the thread of v. The function
// returns null if and only if v is on the highest level of its subtree.
function nextLeft(v) {
var children = v.children;
return children ? children[0] : v.t;
}
// This function works analogously to nextLeft.
function nextRight(v) {
var children = v.children;
return children ? children[children.length - 1] : v.t;
}
// Shifts the current subtree rooted at w+. This is done by increasing
// prelim(w+) and mod(w+) by shift.
function moveSubtree(wm, wp, shift) {
var change = shift / (wp.i - wm.i);
wp.c -= change;
wp.s += shift;
wm.c += change;
wp.z += shift;
wp.m += shift;
}
// All other shifts, applied to the smaller subtrees between w- and w+, are
// performed by this function. To prepare the shifts, we have to adjust
// change(w+), shift(w+), and change(w-).
function executeShifts(v) {
var shift = 0,
change = 0,
children = v.children,
i = children.length,
w;
while (--i >= 0) {
w = children[i];
w.z += shift;
w.m += shift;
shift += w.s + (change += w.c);
}
}
// If vi-’s ancestor is a sibling of v, returns vi-’s ancestor. Otherwise,
// returns the specified (default) ancestor.
function nextAncestor(vim, v, ancestor) {
return vim.a.parent === v.parent ? vim.a : ancestor;
}
function TreeNode(node, i) {
this._ = node;
this.parent = null;
this.children = null;
this.A = null; // default ancestor
this.a = this; // ancestor
this.z = 0; // prelim
this.m = 0; // mod
this.c = 0; // change
this.s = 0; // shift
this.t = null; // thread
this.i = i; // number
}
TreeNode.prototype = Object.create(Node.prototype);
function treeRoot(root) {
var tree = new TreeNode(root, 0),
node,
nodes = [tree],
child,
children,
i,
n;
while (node = nodes.pop()) {
if (children = node._.children) {
node.children = new Array(n = children.length);
for (i = n - 1; i >= 0; --i) {
nodes.push(child = node.children[i] = new TreeNode(children[i], i));
child.parent = node;
}
}
}
(tree.parent = new TreeNode(null, 0)).children = [tree];
return tree;
}
// Node-link tree diagram using the Reingold-Tilford "tidy" algorithm
var tree = function() {
var separation = defaultSeparation$1,
dx = 1,
dy = 1,
nodeSize = null;
function tree(root) {
var t = treeRoot(root);
// Compute the layout using Buchheim et al.’s algorithm.
t.eachAfter(firstWalk), t.parent.m = -t.z;
t.eachBefore(secondWalk);
// If a fixed node size is specified, scale x and y.
if (nodeSize) root.eachBefore(sizeNode);
// If a fixed tree size is specified, scale x and y based on the extent.
// Compute the left-most, right-most, and depth-most nodes for extents.
else {
var left = root,
right = root,
bottom = root;
root.eachBefore(function(node) {
if (node.x < left.x) left = node;
if (node.x > right.x) right = node;
if (node.depth > bottom.depth) bottom = node;
});
var s = left === right ? 1 : separation(left, right) / 2,
tx = s - left.x,
kx = dx / (right.x + s + tx),
ky = dy / (bottom.depth || 1);
root.eachBefore(function(node) {
node.x = (node.x + tx) * kx;
node.y = node.depth * ky;
});
}
return root;
}
// Computes a preliminary x-coordinate for v. Before that, FIRST WALK is
// applied recursively to the children of v, as well as the function
// APPORTION. After spacing out the children by calling EXECUTE SHIFTS, the
// node v is placed to the midpoint of its outermost children.
function firstWalk(v) {
var children = v.children,
siblings = v.parent.children,
w = v.i ? siblings[v.i - 1] : null;
if (children) {
executeShifts(v);
var midpoint = (children[0].z + children[children.length - 1].z) / 2;
if (w) {
v.z = w.z + separation(v._, w._);
v.m = v.z - midpoint;
} else {
v.z = midpoint;
}
} else if (w) {
v.z = w.z + separation(v._, w._);
}
v.parent.A = apportion(v, w, v.parent.A || siblings[0]);
}
// Computes all real x-coordinates by summing up the modifiers recursively.
function secondWalk(v) {
v._.x = v.z + v.parent.m;
v.m += v.parent.m;
}
// The core of the algorithm. Here, a new subtree is combined with the
// previous subtrees. Threads are used to traverse the inside and outside
// contours of the left and right subtree up to the highest common level. The
// vertices used for the traversals are vi+, vi-, vo-, and vo+, where the
// superscript o means outside and i means inside, the subscript - means left
// subtree and + means right subtree. For summing up the modifiers along the
// contour, we use respective variables si+, si-, so-, and so+. Whenever two
// nodes of the inside contours conflict, we compute the left one of the
// greatest uncommon ancestors using the function ANCESTOR and call MOVE
// SUBTREE to shift the subtree and prepare the shifts of smaller subtrees.
// Finally, we add a new thread (if necessary).
function apportion(v, w, ancestor) {
if (w) {
var vip = v,
vop = v,
vim = w,
vom = vip.parent.children[0],
sip = vip.m,
sop = vop.m,
sim = vim.m,
som = vom.m,
shift;
while (vim = nextRight(vim), vip = nextLeft(vip), vim && vip) {
vom = nextLeft(vom);
vop = nextRight(vop);
vop.a = v;
shift = vim.z + sim - vip.z - sip + separation(vim._, vip._);
if (shift > 0) {
moveSubtree(nextAncestor(vim, v, ancestor), v, shift);
sip += shift;
sop += shift;
}
sim += vim.m;
sip += vip.m;
som += vom.m;
sop += vop.m;
}
if (vim && !nextRight(vop)) {
vop.t = vim;
vop.m += sim - sop;
}
if (vip && !nextLeft(vom)) {
vom.t = vip;
vom.m += sip - som;
ancestor = v;
}
}
return ancestor;
}
function sizeNode(node) {
node.x *= dx;
node.y = node.depth * dy;
}
tree.separation = function(x) {
return arguments.length ? (separation = x, tree) : separation;
};
tree.size = function(x) {
return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], tree) : (nodeSize ? null : [dx, dy]);
};
tree.nodeSize = function(x) {
return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], tree) : (nodeSize ? [dx, dy] : null);
};
return tree;
};
var treemapSlice = function(parent, x0, y0, x1, y1) {
var nodes = parent.children,
node,
i = -1,
n = nodes.length,
k = parent.value && (y1 - y0) / parent.value;
while (++i < n) {
node = nodes[i], node.x0 = x0, node.x1 = x1;
node.y0 = y0, node.y1 = y0 += node.value * k;
}
};
var phi = (1 + Math.sqrt(5)) / 2;
function squarifyRatio(ratio, parent, x0, y0, x1, y1) {
var rows = [],
nodes = parent.children,
row,
nodeValue,
i0 = 0,
i1 = 0,
n = nodes.length,
dx, dy,
value = parent.value,
sumValue,
minValue,
maxValue,
newRatio,
minRatio,
alpha,
beta;
while (i0 < n) {
dx = x1 - x0, dy = y1 - y0;
// Find the next non-empty node.
do sumValue = nodes[i1++].value; while (!sumValue && i1 < n);
minValue = maxValue = sumValue;
alpha = Math.max(dy / dx, dx / dy) / (value * ratio);
beta = sumValue * sumValue * alpha;
minRatio = Math.max(maxValue / beta, beta / minValue);
// Keep adding nodes while the aspect ratio maintains or improves.
for (; i1 < n; ++i1) {
sumValue += nodeValue = nodes[i1].value;
if (nodeValue < minValue) minValue = nodeValue;
if (nodeValue > maxValue) maxValue = nodeValue;
beta = sumValue * sumValue * alpha;
newRatio = Math.max(maxValue / beta, beta / minValue);
if (newRatio > minRatio) { sumValue -= nodeValue; break; }
minRatio = newRatio;
}
// Position and record the row orientation.
rows.push(row = {value: sumValue, dice: dx < dy, children: nodes.slice(i0, i1)});
if (row.dice) treemapDice(row, x0, y0, x1, value ? y0 += dy * sumValue / value : y1);
else treemapSlice(row, x0, y0, value ? x0 += dx * sumValue / value : x1, y1);
value -= sumValue, i0 = i1;
}
return rows;
}
var squarify = ((function custom(ratio) {
function squarify(parent, x0, y0, x1, y1) {
squarifyRatio(ratio, parent, x0, y0, x1, y1);
}
squarify.ratio = function(x) {
return custom((x = +x) > 1 ? x : 1);
};
return squarify;
}))(phi);
var index$3 = function() {
var tile = squarify,
round = false,
dx = 1,
dy = 1,
paddingStack = [0],
paddingInner = constantZero,
paddingTop = constantZero,
paddingRight = constantZero,
paddingBottom = constantZero,
paddingLeft = constantZero;
function treemap(root) {
root.x0 =
root.y0 = 0;
root.x1 = dx;
root.y1 = dy;
root.eachBefore(positionNode);
paddingStack = [0];
if (round) root.eachBefore(roundNode);
return root;
}
function positionNode(node) {
var p = paddingStack[node.depth],
x0 = node.x0 + p,
y0 = node.y0 + p,
x1 = node.x1 - p,
y1 = node.y1 - p;
if (x1 < x0) x0 = x1 = (x0 + x1) / 2;
if (y1 < y0) y0 = y1 = (y0 + y1) / 2;
node.x0 = x0;
node.y0 = y0;
node.x1 = x1;
node.y1 = y1;
if (node.children) {
p = paddingStack[node.depth + 1] = paddingInner(node) / 2;
x0 += paddingLeft(node) - p;
y0 += paddingTop(node) - p;
x1 -= paddingRight(node) - p;
y1 -= paddingBottom(node) - p;
if (x1 < x0) x0 = x1 = (x0 + x1) / 2;
if (y1 < y0) y0 = y1 = (y0 + y1) / 2;
tile(node, x0, y0, x1, y1);
}
}
treemap.round = function(x) {
return arguments.length ? (round = !!x, treemap) : round;
};
treemap.size = function(x) {
return arguments.length ? (dx = +x[0], dy = +x[1], treemap) : [dx, dy];
};
treemap.tile = function(x) {
return arguments.length ? (tile = required(x), treemap) : tile;
};
treemap.padding = function(x) {
return arguments.length ? treemap.paddingInner(x).paddingOuter(x) : treemap.paddingInner();
};
treemap.paddingInner = function(x) {
return arguments.length ? (paddingInner = typeof x === "function" ? x : constant$8(+x), treemap) : paddingInner;
};
treemap.paddingOuter = function(x) {
return arguments.length ? treemap.paddingTop(x).paddingRight(x).paddingBottom(x).paddingLeft(x) : treemap.paddingTop();
};
treemap.paddingTop = function(x) {
return arguments.length ? (paddingTop = typeof x === "function" ? x : constant$8(+x), treemap) : paddingTop;
};
treemap.paddingRight = function(x) {
return arguments.length ? (paddingRight = typeof x === "function" ? x : constant$8(+x), treemap) : paddingRight;
};
treemap.paddingBottom = function(x) {
return arguments.length ? (paddingBottom = typeof x === "function" ? x : constant$8(+x), treemap) : paddingBottom;
};
treemap.paddingLeft = function(x) {
return arguments.length ? (paddingLeft = typeof x === "function" ? x : constant$8(+x), treemap) : paddingLeft;
};
return treemap;
};
var binary = function(parent, x0, y0, x1, y1) {
var nodes = parent.children,
i, n = nodes.length,
sum, sums = new Array(n + 1);
for (sums[0] = sum = i = 0; i < n; ++i) {
sums[i + 1] = sum += nodes[i].value;
}
partition(0, n, parent.value, x0, y0, x1, y1);
function partition(i, j, value, x0, y0, x1, y1) {
if (i >= j - 1) {
var node = nodes[i];
node.x0 = x0, node.y0 = y0;
node.x1 = x1, node.y1 = y1;
return;
}
var valueOffset = sums[i],
valueTarget = (value / 2) + valueOffset,
k = i + 1,
hi = j - 1;
while (k < hi) {
var mid = k + hi >>> 1;
if (sums[mid] < valueTarget) k = mid + 1;
else hi = mid;
}
if ((valueTarget - sums[k - 1]) < (sums[k] - valueTarget) && i + 1 < k) --k;
var valueLeft = sums[k] - valueOffset,
valueRight = value - valueLeft;
if ((x1 - x0) > (y1 - y0)) {
var xk = (x0 * valueRight + x1 * valueLeft) / value;
partition(i, k, valueLeft, x0, y0, xk, y1);
partition(k, j, valueRight, xk, y0, x1, y1);
} else {
var yk = (y0 * valueRight + y1 * valueLeft) / value;
partition(i, k, valueLeft, x0, y0, x1, yk);
partition(k, j, valueRight, x0, yk, x1, y1);
}
}
};
var sliceDice = function(parent, x0, y0, x1, y1) {
(parent.depth & 1 ? treemapSlice : treemapDice)(parent, x0, y0, x1, y1);
};
var resquarify = ((function custom(ratio) {
function resquarify(parent, x0, y0, x1, y1) {
if ((rows = parent._squarify) && (rows.ratio === ratio)) {
var rows,
row,
nodes,
i,
j = -1,
n,
m = rows.length,
value = parent.value;
while (++j < m) {
row = rows[j], nodes = row.children;
for (i = row.value = 0, n = nodes.length; i < n; ++i) row.value += nodes[i].value;
if (row.dice) treemapDice(row, x0, y0, x1, y0 += (y1 - y0) * row.value / value);
else treemapSlice(row, x0, y0, x0 += (x1 - x0) * row.value / value, y1);
value -= row.value;
}
} else {
parent._squarify = rows = squarifyRatio(ratio, parent, x0, y0, x1, y1);
rows.ratio = ratio;
}
}
resquarify.ratio = function(x) {
return custom((x = +x) > 1 ? x : 1);
};
return resquarify;
}))(phi);
var area$1 = function(polygon) {
var i = -1,
n = polygon.length,
a,
b = polygon[n - 1],
area = 0;
while (++i < n) {
a = b;
b = polygon[i];
area += a[1] * b[0] - a[0] * b[1];
}
return area / 2;
};
var centroid$1 = function(polygon) {
var i = -1,
n = polygon.length,
x = 0,
y = 0,
a,
b = polygon[n - 1],
c,
k = 0;
while (++i < n) {
a = b;
b = polygon[i];
k += c = a[0] * b[1] - b[0] * a[1];
x += (a[0] + b[0]) * c;
y += (a[1] + b[1]) * c;
}
return k *= 3, [x / k, y / k];
};
// Returns the 2D cross product of AB and AC vectors, i.e., the z-component of
// the 3D cross product in a quadrant I Cartesian coordinate system (+x is
// right, +y is up). Returns a positive value if ABC is counter-clockwise,
// negative if clockwise, and zero if the points are collinear.
var cross$1 = function(a, b, c) {
return (b[0] - a[0]) * (c[1] - a[1]) - (b[1] - a[1]) * (c[0] - a[0]);
};
function lexicographicOrder(a, b) {
return a[0] - b[0] || a[1] - b[1];
}
// Computes the upper convex hull per the monotone chain algorithm.
// Assumes points.length >= 3, is sorted by x, unique in y.
// Returns an array of indices into points in left-to-right order.
function computeUpperHullIndexes(points) {
var n = points.length,
indexes = [0, 1],
size = 2;
for (var i = 2; i < n; ++i) {
while (size > 1 && cross$1(points[indexes[size - 2]], points[indexes[size - 1]], points[i]) <= 0) --size;
indexes[size++] = i;
}
return indexes.slice(0, size); // remove popped points
}
var hull = function(points) {
if ((n = points.length) < 3) return null;
var i,
n,
sortedPoints = new Array(n),
flippedPoints = new Array(n);
for (i = 0; i < n; ++i) sortedPoints[i] = [+points[i][0], +points[i][1], i];
sortedPoints.sort(lexicographicOrder);
for (i = 0; i < n; ++i) flippedPoints[i] = [sortedPoints[i][0], -sortedPoints[i][1]];
var upperIndexes = computeUpperHullIndexes(sortedPoints),
lowerIndexes = computeUpperHullIndexes(flippedPoints);
// Construct the hull polygon, removing possible duplicate endpoints.
var skipLeft = lowerIndexes[0] === upperIndexes[0],
skipRight = lowerIndexes[lowerIndexes.length - 1] === upperIndexes[upperIndexes.length - 1],
hull = [];
// Add upper hull in right-to-l order.
// Then add lower hull in left-to-right order.
for (i = upperIndexes.length - 1; i >= 0; --i) hull.push(points[sortedPoints[upperIndexes[i]][2]]);
for (i = +skipLeft; i < lowerIndexes.length - skipRight; ++i) hull.push(points[sortedPoints[lowerIndexes[i]][2]]);
return hull;
};
var contains$1 = function(polygon, point) {
var n = polygon.length,
p = polygon[n - 1],
x = point[0], y = point[1],
x0 = p[0], y0 = p[1],
x1, y1,
inside = false;
for (var i = 0; i < n; ++i) {
p = polygon[i], x1 = p[0], y1 = p[1];
if (((y1 > y) !== (y0 > y)) && (x < (x0 - x1) * (y - y1) / (y0 - y1) + x1)) inside = !inside;
x0 = x1, y0 = y1;
}
return inside;
};
var length$2 = function(polygon) {
var i = -1,
n = polygon.length,
b = polygon[n - 1],
xa,
ya,
xb = b[0],
yb = b[1],
perimeter = 0;
while (++i < n) {
xa = xb;
ya = yb;
b = polygon[i];
xb = b[0];
yb = b[1];
xa -= xb;
ya -= yb;
perimeter += Math.sqrt(xa * xa + ya * ya);
}
return perimeter;
};
var slice$3 = [].slice;
var noabort = {};
function Queue(size) {
if (!(size >= 1)) throw new Error;
this._size = size;
this._call =
this._error = null;
this._tasks = [];
this._data = [];
this._waiting =
this._active =
this._ended =
this._start = 0; // inside a synchronous task callback?
}
Queue.prototype = queue.prototype = {
constructor: Queue,
defer: function(callback) {
if (typeof callback !== "function" || this._call) throw new Error;
if (this._error != null) return this;
var t = slice$3.call(arguments, 1);
t.push(callback);
++this._waiting, this._tasks.push(t);
poke$1(this);
return this;
},
abort: function() {
if (this._error == null) abort(this, new Error("abort"));
return this;
},
await: function(callback) {
if (typeof callback !== "function" || this._call) throw new Error;
this._call = function(error, results) { callback.apply(null, [error].concat(results)); };
maybeNotify(this);
return this;
},
awaitAll: function(callback) {
if (typeof callback !== "function" || this._call) throw new Error;
this._call = callback;
maybeNotify(this);
return this;
}
};
function poke$1(q) {
if (!q._start) {
try { start$1(q); } // let the current task complete
catch (e) {
if (q._tasks[q._ended + q._active - 1]) abort(q, e); // task errored synchronously
else if (!q._data) throw e; // await callback errored synchronously
}
}
}
function start$1(q) {
while (q._start = q._waiting && q._active < q._size) {
var i = q._ended + q._active,
t = q._tasks[i],
j = t.length - 1,
c = t[j];
t[j] = end(q, i);
--q._waiting, ++q._active;
t = c.apply(null, t);
if (!q._tasks[i]) continue; // task finished synchronously
q._tasks[i] = t || noabort;
}
}
function end(q, i) {
return function(e, r) {
if (!q._tasks[i]) return; // ignore multiple callbacks
--q._active, ++q._ended;
q._tasks[i] = null;
if (q._error != null) return; // ignore secondary errors
if (e != null) {
abort(q, e);
} else {
q._data[i] = r;
if (q._waiting) poke$1(q);
else maybeNotify(q);
}
};
}
function abort(q, e) {
var i = q._tasks.length, t;
q._error = e; // ignore active callbacks
q._data = undefined; // allow gc
q._waiting = NaN; // prevent starting
while (--i >= 0) {
if (t = q._tasks[i]) {
q._tasks[i] = null;
if (t.abort) {
try { t.abort(); }
catch (e) { /* ignore */ }
}
}
}
q._active = NaN; // allow notification
maybeNotify(q);
}
function maybeNotify(q) {
if (!q._active && q._call) {
var d = q._data;
q._data = undefined; // allow gc
q._call(q._error, d);
}
}
function queue(concurrency) {
return new Queue(arguments.length ? +concurrency : Infinity);
}
var uniform = function(min, max) {
min = min == null ? 0 : +min;
max = max == null ? 1 : +max;
if (arguments.length === 1) max = min, min = 0;
else max -= min;
return function() {
return Math.random() * max + min;
};
};
var normal = function(mu, sigma) {
var x, r;
mu = mu == null ? 0 : +mu;
sigma = sigma == null ? 1 : +sigma;
return function() {
var y;
// If available, use the second previously-generated uniform random.
if (x != null) y = x, x = null;
// Otherwise, generate a new x and y.
else do {
x = Math.random() * 2 - 1;
y = Math.random() * 2 - 1;
r = x * x + y * y;
} while (!r || r > 1);
return mu + sigma * y * Math.sqrt(-2 * Math.log(r) / r);
};
};
var logNormal = function() {
var randomNormal = normal.apply(this, arguments);
return function() {
return Math.exp(randomNormal());
};
};
var irwinHall = function(n) {
return function() {
for (var sum = 0, i = 0; i < n; ++i) sum += Math.random();
return sum;
};
};
var bates = function(n) {
var randomIrwinHall = irwinHall(n);
return function() {
return randomIrwinHall() / n;
};
};
var exponential$1 = function(lambda) {
return function() {
return -Math.log(1 - Math.random()) / lambda;
};
};
var request = function(url, callback) {
var request,
event = dispatch("beforesend", "progress", "load", "error"),
mimeType,
headers = map$1(),
xhr = new XMLHttpRequest,
user = null,
password = null,
response,
responseType,
timeout = 0;
// If IE does not support CORS, use XDomainRequest.
if (typeof XDomainRequest !== "undefined"
&& !("withCredentials" in xhr)
&& /^(http(s)?:)?\/\//.test(url)) xhr = new XDomainRequest;
"onload" in xhr
? xhr.onload = xhr.onerror = xhr.ontimeout = respond
: xhr.onreadystatechange = function(o) { xhr.readyState > 3 && respond(o); };
function respond(o) {
var status = xhr.status, result;
if (!status && hasResponse(xhr)
|| status >= 200 && status < 300
|| status === 304) {
if (response) {
try {
result = response.call(request, xhr);
} catch (e) {
event.call("error", request, e);
return;
}
} else {
result = xhr;
}
event.call("load", request, result);
} else {
event.call("error", request, o);
}
}
xhr.onprogress = function(e) {
event.call("progress", request, e);
};
request = {
header: function(name, value) {
name = (name + "").toLowerCase();
if (arguments.length < 2) return headers.get(name);
if (value == null) headers.remove(name);
else headers.set(name, value + "");
return request;
},
// If mimeType is non-null and no Accept header is set, a default is used.
mimeType: function(value) {
if (!arguments.length) return mimeType;
mimeType = value == null ? null : value + "";
return request;
},
// Specifies what type the response value should take;
// for instance, arraybuffer, blob, document, or text.
responseType: function(value) {
if (!arguments.length) return responseType;
responseType = value;
return request;
},
timeout: function(value) {
if (!arguments.length) return timeout;
timeout = +value;
return request;
},
user: function(value) {
return arguments.length < 1 ? user : (user = value == null ? null : value + "", request);
},
password: function(value) {
return arguments.length < 1 ? password : (password = value == null ? null : value + "", request);
},
// Specify how to convert the response content to a specific type;
// changes the callback value on "load" events.
response: function(value) {
response = value;
return request;
},
// Alias for send("GET", …).
get: function(data, callback) {
return request.send("GET", data, callback);
},
// Alias for send("POST", …).
post: function(data, callback) {
return request.send("POST", data, callback);
},
// If callback is non-null, it will be used for error and load events.
send: function(method, data, callback) {
xhr.open(method, url, true, user, password);
if (mimeType != null && !headers.has("accept")) headers.set("accept", mimeType + ",*/*");
if (xhr.setRequestHeader) headers.each(function(value, name) { xhr.setRequestHeader(name, value); });
if (mimeType != null && xhr.overrideMimeType) xhr.overrideMimeType(mimeType);
if (responseType != null) xhr.responseType = responseType;
if (timeout > 0) xhr.timeout = timeout;
if (callback == null && typeof data === "function") callback = data, data = null;
if (callback != null && callback.length === 1) callback = fixCallback(callback);
if (callback != null) request.on("error", callback).on("load", function(xhr) { callback(null, xhr); });
event.call("beforesend", request, xhr);
xhr.send(data == null ? null : data);
return request;
},
abort: function() {
xhr.abort();
return request;
},
on: function() {
var value = event.on.apply(event, arguments);
return value === event ? request : value;
}
};
if (callback != null) {
if (typeof callback !== "function") throw new Error("invalid callback: " + callback);
return request.get(callback);
}
return request;
};
function fixCallback(callback) {
return function(error, xhr) {
callback(error == null ? xhr : null);
};
}
function hasResponse(xhr) {
var type = xhr.responseType;
return type && type !== "text"
? xhr.response // null on error
: xhr.responseText; // "" on error
}
var type$1 = function(defaultMimeType, response) {
return function(url, callback) {
var r = request(url).mimeType(defaultMimeType).response(response);
if (callback != null) {
if (typeof callback !== "function") throw new Error("invalid callback: " + callback);
return r.get(callback);
}
return r;
};
};
var html = type$1("text/html", function(xhr) {
return document.createRange().createContextualFragment(xhr.responseText);
});
var json = type$1("application/json", function(xhr) {
return JSON.parse(xhr.responseText);
});
var text = type$1("text/plain", function(xhr) {
return xhr.responseText;
});
var xml = type$1("application/xml", function(xhr) {
var xml = xhr.responseXML;
if (!xml) throw new Error("parse error");
return xml;
});
var dsv$1 = function(defaultMimeType, parse) {
return function(url, row, callback) {
if (arguments.length < 3) callback = row, row = null;
var r = request(url).mimeType(defaultMimeType);
r.row = function(_) { return arguments.length ? r.response(responseOf(parse, row = _)) : row; };
r.row(row);
return callback ? r.get(callback) : r;
};
};
function responseOf(parse, row) {
return function(request$$1) {
return parse(request$$1.responseText, row);
};
}
var csv$1 = dsv$1("text/csv", csvParse);
var tsv$1 = dsv$1("text/tab-separated-values", tsvParse);
var array$2 = Array.prototype;
var map$3 = array$2.map;
var slice$4 = array$2.slice;
var implicit = {name: "implicit"};
function ordinal(range) {
var index = map$1(),
domain = [],
unknown = implicit;
range = range == null ? [] : slice$4.call(range);
function scale(d) {
var key = d + "", i = index.get(key);
if (!i) {
if (unknown !== implicit) return unknown;
index.set(key, i = domain.push(d));
}
return range[(i - 1) % range.length];
}
scale.domain = function(_) {
if (!arguments.length) return domain.slice();
domain = [], index = map$1();
var i = -1, n = _.length, d, key;
while (++i < n) if (!index.has(key = (d = _[i]) + "")) index.set(key, domain.push(d));
return scale;
};
scale.range = function(_) {
return arguments.length ? (range = slice$4.call(_), scale) : range.slice();
};
scale.unknown = function(_) {
return arguments.length ? (unknown = _, scale) : unknown;
};
scale.copy = function() {
return ordinal()
.domain(domain)
.range(range)
.unknown(unknown);
};
return scale;
}
function band() {
var scale = ordinal().unknown(undefined),
domain = scale.domain,
ordinalRange = scale.range,
range$$1 = [0, 1],
step,
bandwidth,
round = false,
paddingInner = 0,
paddingOuter = 0,
align = 0.5;
delete scale.unknown;
function rescale() {
var n = domain().length,
reverse = range$$1[1] < range$$1[0],
start = range$$1[reverse - 0],
stop = range$$1[1 - reverse];
step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);
if (round) step = Math.floor(step);
start += (stop - start - step * (n - paddingInner)) * align;
bandwidth = step * (1 - paddingInner);
if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);
var values = range(n).map(function(i) { return start + step * i; });
return ordinalRange(reverse ? values.reverse() : values);
}
scale.domain = function(_) {
return arguments.length ? (domain(_), rescale()) : domain();
};
scale.range = function(_) {
return arguments.length ? (range$$1 = [+_[0], +_[1]], rescale()) : range$$1.slice();
};
scale.rangeRound = function(_) {
return range$$1 = [+_[0], +_[1]], round = true, rescale();
};
scale.bandwidth = function() {
return bandwidth;
};
scale.step = function() {
return step;
};
scale.round = function(_) {
return arguments.length ? (round = !!_, rescale()) : round;
};
scale.padding = function(_) {
return arguments.length ? (paddingInner = paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;
};
scale.paddingInner = function(_) {
return arguments.length ? (paddingInner = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;
};
scale.paddingOuter = function(_) {
return arguments.length ? (paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingOuter;
};
scale.align = function(_) {
return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;
};
scale.copy = function() {
return band()
.domain(domain())
.range(range$$1)
.round(round)
.paddingInner(paddingInner)
.paddingOuter(paddingOuter)
.align(align);
};
return rescale();
}
function pointish(scale) {
var copy = scale.copy;
scale.padding = scale.paddingOuter;
delete scale.paddingInner;
delete scale.paddingOuter;
scale.copy = function() {
return pointish(copy());
};
return scale;
}
function point$1() {
return pointish(band().paddingInner(1));
}
var constant$9 = function(x) {
return function() {
return x;
};
};
var number$1 = function(x) {
return +x;
};
var unit = [0, 1];
function deinterpolateLinear(a, b) {
return (b -= (a = +a))
? function(x) { return (x - a) / b; }
: constant$9(b);
}
function deinterpolateClamp(deinterpolate) {
return function(a, b) {
var d = deinterpolate(a = +a, b = +b);
return function(x) { return x <= a ? 0 : x >= b ? 1 : d(x); };
};
}
function reinterpolateClamp(reinterpolate) {
return function(a, b) {
var r = reinterpolate(a = +a, b = +b);
return function(t) { return t <= 0 ? a : t >= 1 ? b : r(t); };
};
}
function bimap(domain, range$$1, deinterpolate, reinterpolate) {
var d0 = domain[0], d1 = domain[1], r0 = range$$1[0], r1 = range$$1[1];
if (d1 < d0) d0 = deinterpolate(d1, d0), r0 = reinterpolate(r1, r0);
else d0 = deinterpolate(d0, d1), r0 = reinterpolate(r0, r1);
return function(x) { return r0(d0(x)); };
}
function polymap(domain, range$$1, deinterpolate, reinterpolate) {
var j = Math.min(domain.length, range$$1.length) - 1,
d = new Array(j),
r = new Array(j),
i = -1;
// Reverse descending domains.
if (domain[j] < domain[0]) {
domain = domain.slice().reverse();
range$$1 = range$$1.slice().reverse();
}
while (++i < j) {
d[i] = deinterpolate(domain[i], domain[i + 1]);
r[i] = reinterpolate(range$$1[i], range$$1[i + 1]);
}
return function(x) {
var i = bisectRight(domain, x, 1, j) - 1;
return r[i](d[i](x));
};
}
function copy(source, target) {
return target
.domain(source.domain())
.range(source.range())
.interpolate(source.interpolate())
.clamp(source.clamp());
}
// deinterpolate(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].
// reinterpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding domain value x in [a,b].
function continuous(deinterpolate, reinterpolate) {
var domain = unit,
range$$1 = unit,
interpolate$$1 = interpolateValue,
clamp = false,
piecewise,
output,
input;
function rescale() {
piecewise = Math.min(domain.length, range$$1.length) > 2 ? polymap : bimap;
output = input = null;
return scale;
}
function scale(x) {
return (output || (output = piecewise(domain, range$$1, clamp ? deinterpolateClamp(deinterpolate) : deinterpolate, interpolate$$1)))(+x);
}
scale.invert = function(y) {
return (input || (input = piecewise(range$$1, domain, deinterpolateLinear, clamp ? reinterpolateClamp(reinterpolate) : reinterpolate)))(+y);
};
scale.domain = function(_) {
return arguments.length ? (domain = map$3.call(_, number$1), rescale()) : domain.slice();
};
scale.range = function(_) {
return arguments.length ? (range$$1 = slice$4.call(_), rescale()) : range$$1.slice();
};
scale.rangeRound = function(_) {
return range$$1 = slice$4.call(_), interpolate$$1 = interpolateRound, rescale();
};
scale.clamp = function(_) {
return arguments.length ? (clamp = !!_, rescale()) : clamp;
};
scale.interpolate = function(_) {
return arguments.length ? (interpolate$$1 = _, rescale()) : interpolate$$1;
};
return rescale();
}
var tickFormat = function(domain, count, specifier) {
var start = domain[0],
stop = domain[domain.length - 1],
step = tickStep(start, stop, count == null ? 10 : count),
precision;
specifier = formatSpecifier(specifier == null ? ",f" : specifier);
switch (specifier.type) {
case "s": {
var value = Math.max(Math.abs(start), Math.abs(stop));
if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;
return exports.formatPrefix(specifier, value);
}
case "":
case "e":
case "g":
case "p":
case "r": {
if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === "e");
break;
}
case "f":
case "%": {
if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === "%") * 2;
break;
}
}
return exports.format(specifier);
};
function linearish(scale) {
var domain = scale.domain;
scale.ticks = function(count) {
var d = domain();
return ticks(d[0], d[d.length - 1], count == null ? 10 : count);
};
scale.tickFormat = function(count, specifier) {
return tickFormat(domain(), count, specifier);
};
scale.nice = function(count) {
var d = domain(),
i = d.length - 1,
n = count == null ? 10 : count,
start = d[0],
stop = d[i],
step = tickStep(start, stop, n);
if (step) {
step = tickStep(Math.floor(start / step) * step, Math.ceil(stop / step) * step, n);
d[0] = Math.floor(start / step) * step;
d[i] = Math.ceil(stop / step) * step;
domain(d);
}
return scale;
};
return scale;
}
function linear$2() {
var scale = continuous(deinterpolateLinear, reinterpolate);
scale.copy = function() {
return copy(scale, linear$2());
};
return linearish(scale);
}
function identity$6() {
var domain = [0, 1];
function scale(x) {
return +x;
}
scale.invert = scale;
scale.domain = scale.range = function(_) {
return arguments.length ? (domain = map$3.call(_, number$1), scale) : domain.slice();
};
scale.copy = function() {
return identity$6().domain(domain);
};
return linearish(scale);
}
var nice = function(domain, interval) {
domain = domain.slice();
var i0 = 0,
i1 = domain.length - 1,
x0 = domain[i0],
x1 = domain[i1],
t;
if (x1 < x0) {
t = i0, i0 = i1, i1 = t;
t = x0, x0 = x1, x1 = t;
}
domain[i0] = interval.floor(x0);
domain[i1] = interval.ceil(x1);
return domain;
};
function deinterpolate(a, b) {
return (b = Math.log(b / a))
? function(x) { return Math.log(x / a) / b; }
: constant$9(b);
}
function reinterpolate$1(a, b) {
return a < 0
? function(t) { return -Math.pow(-b, t) * Math.pow(-a, 1 - t); }
: function(t) { return Math.pow(b, t) * Math.pow(a, 1 - t); };
}
function pow10(x) {
return isFinite(x) ? +("1e" + x) : x < 0 ? 0 : x;
}
function powp(base) {
return base === 10 ? pow10
: base === Math.E ? Math.exp
: function(x) { return Math.pow(base, x); };
}
function logp(base) {
return base === Math.E ? Math.log
: base === 10 && Math.log10
|| base === 2 && Math.log2
|| (base = Math.log(base), function(x) { return Math.log(x) / base; });
}
function reflect(f) {
return function(x) {
return -f(-x);
};
}
function log$1() {
var scale = continuous(deinterpolate, reinterpolate$1).domain([1, 10]),
domain = scale.domain,
base = 10,
logs = logp(10),
pows = powp(10);
function rescale() {
logs = logp(base), pows = powp(base);
if (domain()[0] < 0) logs = reflect(logs), pows = reflect(pows);
return scale;
}
scale.base = function(_) {
return arguments.length ? (base = +_, rescale()) : base;
};
scale.domain = function(_) {
return arguments.length ? (domain(_), rescale()) : domain();
};
scale.ticks = function(count) {
var d = domain(),
u = d[0],
v = d[d.length - 1],
r;
if (r = v < u) i = u, u = v, v = i;
var i = logs(u),
j = logs(v),
p,
k,
t,
n = count == null ? 10 : +count,
z = [];
if (!(base % 1) && j - i < n) {
i = Math.round(i) - 1, j = Math.round(j) + 1;
if (u > 0) for (; i < j; ++i) {
for (k = 1, p = pows(i); k < base; ++k) {
t = p * k;
if (t < u) continue;
if (t > v) break;
z.push(t);
}
} else for (; i < j; ++i) {
for (k = base - 1, p = pows(i); k >= 1; --k) {
t = p * k;
if (t < u) continue;
if (t > v) break;
z.push(t);
}
}
} else {
z = ticks(i, j, Math.min(j - i, n)).map(pows);
}
return r ? z.reverse() : z;
};
scale.tickFormat = function(count, specifier) {
if (specifier == null) specifier = base === 10 ? ".0e" : ",";
if (typeof specifier !== "function") specifier = exports.format(specifier);
if (count === Infinity) return specifier;
if (count == null) count = 10;
var k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?
return function(d) {
var i = d / pows(Math.round(logs(d)));
if (i * base < base - 0.5) i *= base;
return i <= k ? specifier(d) : "";
};
};
scale.nice = function() {
return domain(nice(domain(), {
floor: function(x) { return pows(Math.floor(logs(x))); },
ceil: function(x) { return pows(Math.ceil(logs(x))); }
}));
};
scale.copy = function() {
return copy(scale, log$1().base(base));
};
return scale;
}
function raise$1(x, exponent) {
return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);
}
function pow$1() {
var exponent = 1,
scale = continuous(deinterpolate, reinterpolate),
domain = scale.domain;
function deinterpolate(a, b) {
return (b = raise$1(b, exponent) - (a = raise$1(a, exponent)))
? function(x) { return (raise$1(x, exponent) - a) / b; }
: constant$9(b);
}
function reinterpolate(a, b) {
b = raise$1(b, exponent) - (a = raise$1(a, exponent));
return function(t) { return raise$1(a + b * t, 1 / exponent); };
}
scale.exponent = function(_) {
return arguments.length ? (exponent = +_, domain(domain())) : exponent;
};
scale.copy = function() {
return copy(scale, pow$1().exponent(exponent));
};
return linearish(scale);
}
function sqrt$1() {
return pow$1().exponent(0.5);
}
function quantile$$1() {
var domain = [],
range$$1 = [],
thresholds = [];
function rescale() {
var i = 0, n = Math.max(1, range$$1.length);
thresholds = new Array(n - 1);
while (++i < n) thresholds[i - 1] = threshold(domain, i / n);
return scale;
}
function scale(x) {
if (!isNaN(x = +x)) return range$$1[bisectRight(thresholds, x)];
}
scale.invertExtent = function(y) {
var i = range$$1.indexOf(y);
return i < 0 ? [NaN, NaN] : [
i > 0 ? thresholds[i - 1] : domain[0],
i < thresholds.length ? thresholds[i] : domain[domain.length - 1]
];
};
scale.domain = function(_) {
if (!arguments.length) return domain.slice();
domain = [];
for (var i = 0, n = _.length, d; i < n; ++i) if (d = _[i], d != null && !isNaN(d = +d)) domain.push(d);
domain.sort(ascending);
return rescale();
};
scale.range = function(_) {
return arguments.length ? (range$$1 = slice$4.call(_), rescale()) : range$$1.slice();
};
scale.quantiles = function() {
return thresholds.slice();
};
scale.copy = function() {
return quantile$$1()
.domain(domain)
.range(range$$1);
};
return scale;
}
function quantize$1() {
var x0 = 0,
x1 = 1,
n = 1,
domain = [0.5],
range$$1 = [0, 1];
function scale(x) {
if (x <= x) return range$$1[bisectRight(domain, x, 0, n)];
}
function rescale() {
var i = -1;
domain = new Array(n);
while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);
return scale;
}
scale.domain = function(_) {
return arguments.length ? (x0 = +_[0], x1 = +_[1], rescale()) : [x0, x1];
};
scale.range = function(_) {
return arguments.length ? (n = (range$$1 = slice$4.call(_)).length - 1, rescale()) : range$$1.slice();
};
scale.invertExtent = function(y) {
var i = range$$1.indexOf(y);
return i < 0 ? [NaN, NaN]
: i < 1 ? [x0, domain[0]]
: i >= n ? [domain[n - 1], x1]
: [domain[i - 1], domain[i]];
};
scale.copy = function() {
return quantize$1()
.domain([x0, x1])
.range(range$$1);
};
return linearish(scale);
}
function threshold$1() {
var domain = [0.5],
range$$1 = [0, 1],
n = 1;
function scale(x) {
if (x <= x) return range$$1[bisectRight(domain, x, 0, n)];
}
scale.domain = function(_) {
return arguments.length ? (domain = slice$4.call(_), n = Math.min(domain.length, range$$1.length - 1), scale) : domain.slice();
};
scale.range = function(_) {
return arguments.length ? (range$$1 = slice$4.call(_), n = Math.min(domain.length, range$$1.length - 1), scale) : range$$1.slice();
};
scale.invertExtent = function(y) {
var i = range$$1.indexOf(y);
return [domain[i - 1], domain[i]];
};
scale.copy = function() {
return threshold$1()
.domain(domain)
.range(range$$1);
};
return scale;
}
var t0$1 = new Date;
var t1$1 = new Date;
function newInterval(floori, offseti, count, field) {
function interval(date) {
return floori(date = new Date(+date)), date;
}
interval.floor = interval;
interval.ceil = function(date) {
return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;
};
interval.round = function(date) {
var d0 = interval(date),
d1 = interval.ceil(date);
return date - d0 < d1 - date ? d0 : d1;
};
interval.offset = function(date, step) {
return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;
};
interval.range = function(start, stop, step) {
var range = [];
start = interval.ceil(start);
step = step == null ? 1 : Math.floor(step);
if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date
do range.push(new Date(+start)); while (offseti(start, step), floori(start), start < stop)
return range;
};
interval.filter = function(test) {
return newInterval(function(date) {
if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);
}, function(date, step) {
if (date >= date) while (--step >= 0) while (offseti(date, 1), !test(date)) {} // eslint-disable-line no-empty
});
};
if (count) {
interval.count = function(start, end) {
t0$1.setTime(+start), t1$1.setTime(+end);
floori(t0$1), floori(t1$1);
return Math.floor(count(t0$1, t1$1));
};
interval.every = function(step) {
step = Math.floor(step);
return !isFinite(step) || !(step > 0) ? null
: !(step > 1) ? interval
: interval.filter(field
? function(d) { return field(d) % step === 0; }
: function(d) { return interval.count(0, d) % step === 0; });
};
}
return interval;
}
var millisecond = newInterval(function() {
// noop
}, function(date, step) {
date.setTime(+date + step);
}, function(start, end) {
return end - start;
});
// An optimized implementation for this simple case.
millisecond.every = function(k) {
k = Math.floor(k);
if (!isFinite(k) || !(k > 0)) return null;
if (!(k > 1)) return millisecond;
return newInterval(function(date) {
date.setTime(Math.floor(date / k) * k);
}, function(date, step) {
date.setTime(+date + step * k);
}, function(start, end) {
return (end - start) / k;
});
};
var milliseconds = millisecond.range;
var durationSecond$1 = 1e3;
var durationMinute$1 = 6e4;
var durationHour$1 = 36e5;
var durationDay$1 = 864e5;
var durationWeek$1 = 6048e5;
var second = newInterval(function(date) {
date.setTime(Math.floor(date / durationSecond$1) * durationSecond$1);
}, function(date, step) {
date.setTime(+date + step * durationSecond$1);
}, function(start, end) {
return (end - start) / durationSecond$1;
}, function(date) {
return date.getUTCSeconds();
});
var seconds = second.range;
var minute = newInterval(function(date) {
date.setTime(Math.floor(date / durationMinute$1) * durationMinute$1);
}, function(date, step) {
date.setTime(+date + step * durationMinute$1);
}, function(start, end) {
return (end - start) / durationMinute$1;
}, function(date) {
return date.getMinutes();
});
var minutes = minute.range;
var hour = newInterval(function(date) {
var offset = date.getTimezoneOffset() * durationMinute$1 % durationHour$1;
if (offset < 0) offset += durationHour$1;
date.setTime(Math.floor((+date - offset) / durationHour$1) * durationHour$1 + offset);
}, function(date, step) {
date.setTime(+date + step * durationHour$1);
}, function(start, end) {
return (end - start) / durationHour$1;
}, function(date) {
return date.getHours();
});
var hours = hour.range;
var day = newInterval(function(date) {
date.setHours(0, 0, 0, 0);
}, function(date, step) {
date.setDate(date.getDate() + step);
}, function(start, end) {
return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute$1) / durationDay$1;
}, function(date) {
return date.getDate() - 1;
});
var days = day.range;
function weekday(i) {
return newInterval(function(date) {
date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);
date.setHours(0, 0, 0, 0);
}, function(date, step) {
date.setDate(date.getDate() + step * 7);
}, function(start, end) {
return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute$1) / durationWeek$1;
});
}
var sunday = weekday(0);
var monday = weekday(1);
var tuesday = weekday(2);
var wednesday = weekday(3);
var thursday = weekday(4);
var friday = weekday(5);
var saturday = weekday(6);
var sundays = sunday.range;
var mondays = monday.range;
var tuesdays = tuesday.range;
var wednesdays = wednesday.range;
var thursdays = thursday.range;
var fridays = friday.range;
var saturdays = saturday.range;
var month = newInterval(function(date) {
date.setDate(1);
date.setHours(0, 0, 0, 0);
}, function(date, step) {
date.setMonth(date.getMonth() + step);
}, function(start, end) {
return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;
}, function(date) {
return date.getMonth();
});
var months = month.range;
var year = newInterval(function(date) {
date.setMonth(0, 1);
date.setHours(0, 0, 0, 0);
}, function(date, step) {
date.setFullYear(date.getFullYear() + step);
}, function(start, end) {
return end.getFullYear() - start.getFullYear();
}, function(date) {
return date.getFullYear();
});
// An optimized implementation for this simple case.
year.every = function(k) {
return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function(date) {
date.setFullYear(Math.floor(date.getFullYear() / k) * k);
date.setMonth(0, 1);
date.setHours(0, 0, 0, 0);
}, function(date, step) {
date.setFullYear(date.getFullYear() + step * k);
});
};
var years = year.range;
var utcMinute = newInterval(function(date) {
date.setUTCSeconds(0, 0);
}, function(date, step) {
date.setTime(+date + step * durationMinute$1);
}, function(start, end) {
return (end - start) / durationMinute$1;
}, function(date) {
return date.getUTCMinutes();
});
var utcMinutes = utcMinute.range;
var utcHour = newInterval(function(date) {
date.setUTCMinutes(0, 0, 0);
}, function(date, step) {
date.setTime(+date + step * durationHour$1);
}, function(start, end) {
return (end - start) / durationHour$1;
}, function(date) {
return date.getUTCHours();
});
var utcHours = utcHour.range;
var utcDay = newInterval(function(date) {
date.setUTCHours(0, 0, 0, 0);
}, function(date, step) {
date.setUTCDate(date.getUTCDate() + step);
}, function(start, end) {
return (end - start) / durationDay$1;
}, function(date) {
return date.getUTCDate() - 1;
});
var utcDays = utcDay.range;
function utcWeekday(i) {
return newInterval(function(date) {
date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);
date.setUTCHours(0, 0, 0, 0);
}, function(date, step) {
date.setUTCDate(date.getUTCDate() + step * 7);
}, function(start, end) {
return (end - start) / durationWeek$1;
});
}
var utcSunday = utcWeekday(0);
var utcMonday = utcWeekday(1);
var utcTuesday = utcWeekday(2);
var utcWednesday = utcWeekday(3);
var utcThursday = utcWeekday(4);
var utcFriday = utcWeekday(5);
var utcSaturday = utcWeekday(6);
var utcSundays = utcSunday.range;
var utcMondays = utcMonday.range;
var utcTuesdays = utcTuesday.range;
var utcWednesdays = utcWednesday.range;
var utcThursdays = utcThursday.range;
var utcFridays = utcFriday.range;
var utcSaturdays = utcSaturday.range;
var utcMonth = newInterval(function(date) {
date.setUTCDate(1);
date.setUTCHours(0, 0, 0, 0);
}, function(date, step) {
date.setUTCMonth(date.getUTCMonth() + step);
}, function(start, end) {
return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;
}, function(date) {
return date.getUTCMonth();
});
var utcMonths = utcMonth.range;
var utcYear = newInterval(function(date) {
date.setUTCMonth(0, 1);
date.setUTCHours(0, 0, 0, 0);
}, function(date, step) {
date.setUTCFullYear(date.getUTCFullYear() + step);
}, function(start, end) {
return end.getUTCFullYear() - start.getUTCFullYear();
}, function(date) {
return date.getUTCFullYear();
});
// An optimized implementation for this simple case.
utcYear.every = function(k) {
return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function(date) {
date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);
date.setUTCMonth(0, 1);
date.setUTCHours(0, 0, 0, 0);
}, function(date, step) {
date.setUTCFullYear(date.getUTCFullYear() + step * k);
});
};
var utcYears = utcYear.range;
function localDate(d) {
if (0 <= d.y && d.y < 100) {
var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);
date.setFullYear(d.y);
return date;
}
return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);
}
function utcDate(d) {
if (0 <= d.y && d.y < 100) {
var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));
date.setUTCFullYear(d.y);
return date;
}
return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));
}
function newYear(y) {
return {y: y, m: 0, d: 1, H: 0, M: 0, S: 0, L: 0};
}
function formatLocale$1(locale) {
var locale_dateTime = locale.dateTime,
locale_date = locale.date,
locale_time = locale.time,
locale_periods = locale.periods,
locale_weekdays = locale.days,
locale_shortWeekdays = locale.shortDays,
locale_months = locale.months,
locale_shortMonths = locale.shortMonths;
var periodRe = formatRe(locale_periods),
periodLookup = formatLookup(locale_periods),
weekdayRe = formatRe(locale_weekdays),
weekdayLookup = formatLookup(locale_weekdays),
shortWeekdayRe = formatRe(locale_shortWeekdays),
shortWeekdayLookup = formatLookup(locale_shortWeekdays),
monthRe = formatRe(locale_months),
monthLookup = formatLookup(locale_months),
shortMonthRe = formatRe(locale_shortMonths),
shortMonthLookup = formatLookup(locale_shortMonths);
var formats = {
"a": formatShortWeekday,
"A": formatWeekday,
"b": formatShortMonth,
"B": formatMonth,
"c": null,
"d": formatDayOfMonth,
"e": formatDayOfMonth,
"H": formatHour24,
"I": formatHour12,
"j": formatDayOfYear,
"L": formatMilliseconds,
"m": formatMonthNumber,
"M": formatMinutes,
"p": formatPeriod,
"S": formatSeconds,
"U": formatWeekNumberSunday,
"w": formatWeekdayNumber,
"W": formatWeekNumberMonday,
"x": null,
"X": null,
"y": formatYear,
"Y": formatFullYear,
"Z": formatZone,
"%": formatLiteralPercent
};
var utcFormats = {
"a": formatUTCShortWeekday,
"A": formatUTCWeekday,
"b": formatUTCShortMonth,
"B": formatUTCMonth,
"c": null,
"d": formatUTCDayOfMonth,
"e": formatUTCDayOfMonth,
"H": formatUTCHour24,
"I": formatUTCHour12,
"j": formatUTCDayOfYear,
"L": formatUTCMilliseconds,
"m": formatUTCMonthNumber,
"M": formatUTCMinutes,
"p": formatUTCPeriod,
"S": formatUTCSeconds,
"U": formatUTCWeekNumberSunday,
"w": formatUTCWeekdayNumber,
"W": formatUTCWeekNumberMonday,
"x": null,
"X": null,
"y": formatUTCYear,
"Y": formatUTCFullYear,
"Z": formatUTCZone,
"%": formatLiteralPercent
};
var parses = {
"a": parseShortWeekday,
"A": parseWeekday,
"b": parseShortMonth,
"B": parseMonth,
"c": parseLocaleDateTime,
"d": parseDayOfMonth,
"e": parseDayOfMonth,
"H": parseHour24,
"I": parseHour24,
"j": parseDayOfYear,
"L": parseMilliseconds,
"m": parseMonthNumber,
"M": parseMinutes,
"p": parsePeriod,
"S": parseSeconds,
"U": parseWeekNumberSunday,
"w": parseWeekdayNumber,
"W": parseWeekNumberMonday,
"x": parseLocaleDate,
"X": parseLocaleTime,
"y": parseYear,
"Y": parseFullYear,
"Z": parseZone,
"%": parseLiteralPercent
};
// These recursive directive definitions must be deferred.
formats.x = newFormat(locale_date, formats);
formats.X = newFormat(locale_time, formats);
formats.c = newFormat(locale_dateTime, formats);
utcFormats.x = newFormat(locale_date, utcFormats);
utcFormats.X = newFormat(locale_time, utcFormats);
utcFormats.c = newFormat(locale_dateTime, utcFormats);
function newFormat(specifier, formats) {
return function(date) {
var string = [],
i = -1,
j = 0,
n = specifier.length,
c,
pad,
format;
if (!(date instanceof Date)) date = new Date(+date);
while (++i < n) {
if (specifier.charCodeAt(i) === 37) {
string.push(specifier.slice(j, i));
if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);
else pad = c === "e" ? " " : "0";
if (format = formats[c]) c = format(date, pad);
string.push(c);
j = i + 1;
}
}
string.push(specifier.slice(j, i));
return string.join("");
};
}
function newParse(specifier, newDate) {
return function(string) {
var d = newYear(1900),
i = parseSpecifier(d, specifier, string += "", 0);
if (i != string.length) return null;
// The am-pm flag is 0 for AM, and 1 for PM.
if ("p" in d) d.H = d.H % 12 + d.p * 12;
// Convert day-of-week and week-of-year to day-of-year.
if ("W" in d || "U" in d) {
if (!("w" in d)) d.w = "W" in d ? 1 : 0;
var day$$1 = "Z" in d ? utcDate(newYear(d.y)).getUTCDay() : newDate(newYear(d.y)).getDay();
d.m = 0;
d.d = "W" in d ? (d.w + 6) % 7 + d.W * 7 - (day$$1 + 5) % 7 : d.w + d.U * 7 - (day$$1 + 6) % 7;
}
// If a time zone is specified, all fields are interpreted as UTC and then
// offset according to the specified time zone.
if ("Z" in d) {
d.H += d.Z / 100 | 0;
d.M += d.Z % 100;
return utcDate(d);
}
// Otherwise, all fields are in local time.
return newDate(d);
};
}
function parseSpecifier(d, specifier, string, j) {
var i = 0,
n = specifier.length,
m = string.length,
c,
parse;
while (i < n) {
if (j >= m) return -1;
c = specifier.charCodeAt(i++);
if (c === 37) {
c = specifier.charAt(i++);
parse = parses[c in pads ? specifier.charAt(i++) : c];
if (!parse || ((j = parse(d, string, j)) < 0)) return -1;
} else if (c != string.charCodeAt(j++)) {
return -1;
}
}
return j;
}
function parsePeriod(d, string, i) {
var n = periodRe.exec(string.slice(i));
return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1;
}
function parseShortWeekday(d, string, i) {
var n = shortWeekdayRe.exec(string.slice(i));
return n ? (d.w = shortWeekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;
}
function parseWeekday(d, string, i) {
var n = weekdayRe.exec(string.slice(i));
return n ? (d.w = weekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;
}
function parseShortMonth(d, string, i) {
var n = shortMonthRe.exec(string.slice(i));
return n ? (d.m = shortMonthLookup[n[0].toLowerCase()], i + n[0].length) : -1;
}
function parseMonth(d, string, i) {
var n = monthRe.exec(string.slice(i));
return n ? (d.m = monthLookup[n[0].toLowerCase()], i + n[0].length) : -1;
}
function parseLocaleDateTime(d, string, i) {
return parseSpecifier(d, locale_dateTime, string, i);
}
function parseLocaleDate(d, string, i) {
return parseSpecifier(d, locale_date, string, i);
}
function parseLocaleTime(d, string, i) {
return parseSpecifier(d, locale_time, string, i);
}
function formatShortWeekday(d) {
return locale_shortWeekdays[d.getDay()];
}
function formatWeekday(d) {
return locale_weekdays[d.getDay()];
}
function formatShortMonth(d) {
return locale_shortMonths[d.getMonth()];
}
function formatMonth(d) {
return locale_months[d.getMonth()];
}
function formatPeriod(d) {
return locale_periods[+(d.getHours() >= 12)];
}
function formatUTCShortWeekday(d) {
return locale_shortWeekdays[d.getUTCDay()];
}
function formatUTCWeekday(d) {
return locale_weekdays[d.getUTCDay()];
}
function formatUTCShortMonth(d) {
return locale_shortMonths[d.getUTCMonth()];
}
function formatUTCMonth(d) {
return locale_months[d.getUTCMonth()];
}
function formatUTCPeriod(d) {
return locale_periods[+(d.getUTCHours() >= 12)];
}
return {
format: function(specifier) {
var f = newFormat(specifier += "", formats);
f.toString = function() { return specifier; };
return f;
},
parse: function(specifier) {
var p = newParse(specifier += "", localDate);
p.toString = function() { return specifier; };
return p;
},
utcFormat: function(specifier) {
var f = newFormat(specifier += "", utcFormats);
f.toString = function() { return specifier; };
return f;
},
utcParse: function(specifier) {
var p = newParse(specifier, utcDate);
p.toString = function() { return specifier; };
return p;
}
};
}
var pads = {"-": "", "_": " ", "0": "0"};
var numberRe = /^\s*\d+/;
var percentRe = /^%/;
var requoteRe = /[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g;
function pad(value, fill, width) {
var sign = value < 0 ? "-" : "",
string = (sign ? -value : value) + "",
length = string.length;
return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);
}
function requote(s) {
return s.replace(requoteRe, "\\$&");
}
function formatRe(names) {
return new RegExp("^(?:" + names.map(requote).join("|") + ")", "i");
}
function formatLookup(names) {
var map = {}, i = -1, n = names.length;
while (++i < n) map[names[i].toLowerCase()] = i;
return map;
}
function parseWeekdayNumber(d, string, i) {
var n = numberRe.exec(string.slice(i, i + 1));
return n ? (d.w = +n[0], i + n[0].length) : -1;
}
function parseWeekNumberSunday(d, string, i) {
var n = numberRe.exec(string.slice(i));
return n ? (d.U = +n[0], i + n[0].length) : -1;
}
function parseWeekNumberMonday(d, string, i) {
var n = numberRe.exec(string.slice(i));
return n ? (d.W = +n[0], i + n[0].length) : -1;
}
function parseFullYear(d, string, i) {
var n = numberRe.exec(string.slice(i, i + 4));
return n ? (d.y = +n[0], i + n[0].length) : -1;
}
function parseYear(d, string, i) {
var n = numberRe.exec(string.slice(i, i + 2));
return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;
}
function parseZone(d, string, i) {
var n = /^(Z)|([+-]\d\d)(?:\:?(\d\d))?/.exec(string.slice(i, i + 6));
return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || "00")), i + n[0].length) : -1;
}
function parseMonthNumber(d, string, i) {
var n = numberRe.exec(string.slice(i, i + 2));
return n ? (d.m = n[0] - 1, i + n[0].length) : -1;
}
function parseDayOfMonth(d, string, i) {
var n = numberRe.exec(string.slice(i, i + 2));
return n ? (d.d = +n[0], i + n[0].length) : -1;
}
function parseDayOfYear(d, string, i) {
var n = numberRe.exec(string.slice(i, i + 3));
return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;
}
function parseHour24(d, string, i) {
var n = numberRe.exec(string.slice(i, i + 2));
return n ? (d.H = +n[0], i + n[0].length) : -1;
}
function parseMinutes(d, string, i) {
var n = numberRe.exec(string.slice(i, i + 2));
return n ? (d.M = +n[0], i + n[0].length) : -1;
}
function parseSeconds(d, string, i) {
var n = numberRe.exec(string.slice(i, i + 2));
return n ? (d.S = +n[0], i + n[0].length) : -1;
}
function parseMilliseconds(d, string, i) {
var n = numberRe.exec(string.slice(i, i + 3));
return n ? (d.L = +n[0], i + n[0].length) : -1;
}
function parseLiteralPercent(d, string, i) {
var n = percentRe.exec(string.slice(i, i + 1));
return n ? i + n[0].length : -1;
}
function formatDayOfMonth(d, p) {
return pad(d.getDate(), p, 2);
}
function formatHour24(d, p) {
return pad(d.getHours(), p, 2);
}
function formatHour12(d, p) {
return pad(d.getHours() % 12 || 12, p, 2);
}
function formatDayOfYear(d, p) {
return pad(1 + day.count(year(d), d), p, 3);
}
function formatMilliseconds(d, p) {
return pad(d.getMilliseconds(), p, 3);
}
function formatMonthNumber(d, p) {
return pad(d.getMonth() + 1, p, 2);
}
function formatMinutes(d, p) {
return pad(d.getMinutes(), p, 2);
}
function formatSeconds(d, p) {
return pad(d.getSeconds(), p, 2);
}
function formatWeekNumberSunday(d, p) {
return pad(sunday.count(year(d), d), p, 2);
}
function formatWeekdayNumber(d) {
return d.getDay();
}
function formatWeekNumberMonday(d, p) {
return pad(monday.count(year(d), d), p, 2);
}
function formatYear(d, p) {
return pad(d.getFullYear() % 100, p, 2);
}
function formatFullYear(d, p) {
return pad(d.getFullYear() % 10000, p, 4);
}
function formatZone(d) {
var z = d.getTimezoneOffset();
return (z > 0 ? "-" : (z *= -1, "+"))
+ pad(z / 60 | 0, "0", 2)
+ pad(z % 60, "0", 2);
}
function formatUTCDayOfMonth(d, p) {
return pad(d.getUTCDate(), p, 2);
}
function formatUTCHour24(d, p) {
return pad(d.getUTCHours(), p, 2);
}
function formatUTCHour12(d, p) {
return pad(d.getUTCHours() % 12 || 12, p, 2);
}
function formatUTCDayOfYear(d, p) {
return pad(1 + utcDay.count(utcYear(d), d), p, 3);
}
function formatUTCMilliseconds(d, p) {
return pad(d.getUTCMilliseconds(), p, 3);
}
function formatUTCMonthNumber(d, p) {
return pad(d.getUTCMonth() + 1, p, 2);
}
function formatUTCMinutes(d, p) {
return pad(d.getUTCMinutes(), p, 2);
}
function formatUTCSeconds(d, p) {
return pad(d.getUTCSeconds(), p, 2);
}
function formatUTCWeekNumberSunday(d, p) {
return pad(utcSunday.count(utcYear(d), d), p, 2);
}
function formatUTCWeekdayNumber(d) {
return d.getUTCDay();
}
function formatUTCWeekNumberMonday(d, p) {
return pad(utcMonday.count(utcYear(d), d), p, 2);
}
function formatUTCYear(d, p) {
return pad(d.getUTCFullYear() % 100, p, 2);
}
function formatUTCFullYear(d, p) {
return pad(d.getUTCFullYear() % 10000, p, 4);
}
function formatUTCZone() {
return "+0000";
}
function formatLiteralPercent() {
return "%";
}
var locale$2;
defaultLocale$1({
dateTime: "%x, %X",
date: "%-m/%-d/%Y",
time: "%-I:%M:%S %p",
periods: ["AM", "PM"],
days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
shortDays: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
shortMonths: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
});
function defaultLocale$1(definition) {
locale$2 = formatLocale$1(definition);
exports.timeFormat = locale$2.format;
exports.timeParse = locale$2.parse;
exports.utcFormat = locale$2.utcFormat;
exports.utcParse = locale$2.utcParse;
return locale$2;
}
var isoSpecifier = "%Y-%m-%dT%H:%M:%S.%LZ";
function formatIsoNative(date) {
return date.toISOString();
}
var formatIso = Date.prototype.toISOString
? formatIsoNative
: exports.utcFormat(isoSpecifier);
function parseIsoNative(string) {
var date = new Date(string);
return isNaN(date) ? null : date;
}
var parseIso = +new Date("2000-01-01T00:00:00.000Z")
? parseIsoNative
: exports.utcParse(isoSpecifier);
var durationSecond = 1000;
var durationMinute = durationSecond * 60;
var durationHour = durationMinute * 60;
var durationDay = durationHour * 24;
var durationWeek = durationDay * 7;
var durationMonth = durationDay * 30;
var durationYear = durationDay * 365;
function date$1(t) {
return new Date(t);
}
function number$2(t) {
return t instanceof Date ? +t : +new Date(+t);
}
function calendar(year$$1, month$$1, week, day$$1, hour$$1, minute$$1, second$$1, millisecond$$1, format) {
var scale = continuous(deinterpolateLinear, reinterpolate),
invert = scale.invert,
domain = scale.domain;
var formatMillisecond = format(".%L"),
formatSecond = format(":%S"),
formatMinute = format("%I:%M"),
formatHour = format("%I %p"),
formatDay = format("%a %d"),
formatWeek = format("%b %d"),
formatMonth = format("%B"),
formatYear = format("%Y");
var tickIntervals = [
[second$$1, 1, durationSecond],
[second$$1, 5, 5 * durationSecond],
[second$$1, 15, 15 * durationSecond],
[second$$1, 30, 30 * durationSecond],
[minute$$1, 1, durationMinute],
[minute$$1, 5, 5 * durationMinute],
[minute$$1, 15, 15 * durationMinute],
[minute$$1, 30, 30 * durationMinute],
[ hour$$1, 1, durationHour ],
[ hour$$1, 3, 3 * durationHour ],
[ hour$$1, 6, 6 * durationHour ],
[ hour$$1, 12, 12 * durationHour ],
[ day$$1, 1, durationDay ],
[ day$$1, 2, 2 * durationDay ],
[ week, 1, durationWeek ],
[ month$$1, 1, durationMonth ],
[ month$$1, 3, 3 * durationMonth ],
[ year$$1, 1, durationYear ]
];
function tickFormat(date) {
return (second$$1(date) < date ? formatMillisecond
: minute$$1(date) < date ? formatSecond
: hour$$1(date) < date ? formatMinute
: day$$1(date) < date ? formatHour
: month$$1(date) < date ? (week(date) < date ? formatDay : formatWeek)
: year$$1(date) < date ? formatMonth
: formatYear)(date);
}
function tickInterval(interval, start, stop, step) {
if (interval == null) interval = 10;
// If a desired tick count is specified, pick a reasonable tick interval
// based on the extent of the domain and a rough estimate of tick size.
// Otherwise, assume interval is already a time interval and use it.
if (typeof interval === "number") {
var target = Math.abs(stop - start) / interval,
i = bisector(function(i) { return i[2]; }).right(tickIntervals, target);
if (i === tickIntervals.length) {
step = tickStep(start / durationYear, stop / durationYear, interval);
interval = year$$1;
} else if (i) {
i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];
step = i[1];
interval = i[0];
} else {
step = tickStep(start, stop, interval);
interval = millisecond$$1;
}
}
return step == null ? interval : interval.every(step);
}
scale.invert = function(y) {
return new Date(invert(y));
};
scale.domain = function(_) {
return arguments.length ? domain(map$3.call(_, number$2)) : domain().map(date$1);
};
scale.ticks = function(interval, step) {
var d = domain(),
t0 = d[0],
t1 = d[d.length - 1],
r = t1 < t0,
t;
if (r) t = t0, t0 = t1, t1 = t;
t = tickInterval(interval, t0, t1, step);
t = t ? t.range(t0, t1 + 1) : []; // inclusive stop
return r ? t.reverse() : t;
};
scale.tickFormat = function(count, specifier) {
return specifier == null ? tickFormat : format(specifier);
};
scale.nice = function(interval, step) {
var d = domain();
return (interval = tickInterval(interval, d[0], d[d.length - 1], step))
? domain(nice(d, interval))
: scale;
};
scale.copy = function() {
return copy(scale, calendar(year$$1, month$$1, week, day$$1, hour$$1, minute$$1, second$$1, millisecond$$1, format));
};
return scale;
}
var time = function() {
return calendar(year, month, sunday, day, hour, minute, second, millisecond, exports.timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]);
};
var utcTime = function() {
return calendar(utcYear, utcMonth, utcSunday, utcDay, utcHour, utcMinute, second, millisecond, exports.utcFormat).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]);
};
var colors = function(s) {
return s.match(/.{6}/g).map(function(x) {
return "#" + x;
});
};
var category10 = colors("1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf");
var category20b = colors("393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6");
var category20c = colors("3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9");
var category20 = colors("1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5");
var cubehelix$3 = cubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));
var warm = cubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));
var cool = cubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));
var rainbow = cubehelix();
var rainbow$1 = function(t) {
if (t < 0 || t > 1) t -= Math.floor(t);
var ts = Math.abs(t - 0.5);
rainbow.h = 360 * t - 100;
rainbow.s = 1.5 - 1.5 * ts;
rainbow.l = 0.8 - 0.9 * ts;
return rainbow + "";
};
function ramp(range) {
var n = range.length;
return function(t) {
return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];
};
}
var viridis = ramp(colors("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725"));
var magma = ramp(colors("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf"));
var inferno = ramp(colors("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4"));
var plasma = ramp(colors("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921"));
function sequential(interpolator) {
var x0 = 0,
x1 = 1,
clamp = false;
function scale(x) {
var t = (x - x0) / (x1 - x0);
return interpolator(clamp ? Math.max(0, Math.min(1, t)) : t);
}
scale.domain = function(_) {
return arguments.length ? (x0 = +_[0], x1 = +_[1], scale) : [x0, x1];
};
scale.clamp = function(_) {
return arguments.length ? (clamp = !!_, scale) : clamp;
};
scale.interpolator = function(_) {
return arguments.length ? (interpolator = _, scale) : interpolator;
};
scale.copy = function() {
return sequential(interpolator).domain([x0, x1]).clamp(clamp);
};
return linearish(scale);
}
var constant$10 = function(x) {
return function constant() {
return x;
};
};
var abs$1 = Math.abs;
var atan2$1 = Math.atan2;
var cos$2 = Math.cos;
var max$2 = Math.max;
var min$1 = Math.min;
var sin$2 = Math.sin;
var sqrt$2 = Math.sqrt;
var epsilon$3 = 1e-12;
var pi$4 = Math.PI;
var halfPi$3 = pi$4 / 2;
var tau$4 = 2 * pi$4;
function acos$1(x) {
return x > 1 ? 0 : x < -1 ? pi$4 : Math.acos(x);
}
function asin$1(x) {
return x >= 1 ? halfPi$3 : x <= -1 ? -halfPi$3 : Math.asin(x);
}
function arcInnerRadius(d) {
return d.innerRadius;
}
function arcOuterRadius(d) {
return d.outerRadius;
}
function arcStartAngle(d) {
return d.startAngle;
}
function arcEndAngle(d) {
return d.endAngle;
}
function arcPadAngle(d) {
return d && d.padAngle; // Note: optional!
}
function intersect(x0, y0, x1, y1, x2, y2, x3, y3) {
var x10 = x1 - x0, y10 = y1 - y0,
x32 = x3 - x2, y32 = y3 - y2,
t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / (y32 * x10 - x32 * y10);
return [x0 + t * x10, y0 + t * y10];
}
// Compute perpendicular offset line of length rc.
// http://mathworld.wolfram.com/Circle-LineIntersection.html
function cornerTangents(x0, y0, x1, y1, r1, rc, cw) {
var x01 = x0 - x1,
y01 = y0 - y1,
lo = (cw ? rc : -rc) / sqrt$2(x01 * x01 + y01 * y01),
ox = lo * y01,
oy = -lo * x01,
x11 = x0 + ox,
y11 = y0 + oy,
x10 = x1 + ox,
y10 = y1 + oy,
x00 = (x11 + x10) / 2,
y00 = (y11 + y10) / 2,
dx = x10 - x11,
dy = y10 - y11,
d2 = dx * dx + dy * dy,
r = r1 - rc,
D = x11 * y10 - x10 * y11,
d = (dy < 0 ? -1 : 1) * sqrt$2(max$2(0, r * r * d2 - D * D)),
cx0 = (D * dy - dx * d) / d2,
cy0 = (-D * dx - dy * d) / d2,
cx1 = (D * dy + dx * d) / d2,
cy1 = (-D * dx + dy * d) / d2,
dx0 = cx0 - x00,
dy0 = cy0 - y00,
dx1 = cx1 - x00,
dy1 = cy1 - y00;
// Pick the closer of the two intersection points.
// TODO Is there a faster way to determine which intersection to use?
if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;
return {
cx: cx0,
cy: cy0,
x01: -ox,
y01: -oy,
x11: cx0 * (r1 / r - 1),
y11: cy0 * (r1 / r - 1)
};
}
var arc = function() {
var innerRadius = arcInnerRadius,
outerRadius = arcOuterRadius,
cornerRadius = constant$10(0),
padRadius = null,
startAngle = arcStartAngle,
endAngle = arcEndAngle,
padAngle = arcPadAngle,
context = null;
function arc() {
var buffer,
r,
r0 = +innerRadius.apply(this, arguments),
r1 = +outerRadius.apply(this, arguments),
a0 = startAngle.apply(this, arguments) - halfPi$3,
a1 = endAngle.apply(this, arguments) - halfPi$3,
da = abs$1(a1 - a0),
cw = a1 > a0;
if (!context) context = buffer = path();
// Ensure that the outer radius is always larger than the inner radius.
if (r1 < r0) r = r1, r1 = r0, r0 = r;
// Is it a point?
if (!(r1 > epsilon$3)) context.moveTo(0, 0);
// Or is it a circle or annulus?
else if (da > tau$4 - epsilon$3) {
context.moveTo(r1 * cos$2(a0), r1 * sin$2(a0));
context.arc(0, 0, r1, a0, a1, !cw);
if (r0 > epsilon$3) {
context.moveTo(r0 * cos$2(a1), r0 * sin$2(a1));
context.arc(0, 0, r0, a1, a0, cw);
}
}
// Or is it a circular or annular sector?
else {
var a01 = a0,
a11 = a1,
a00 = a0,
a10 = a1,
da0 = da,
da1 = da,
ap = padAngle.apply(this, arguments) / 2,
rp = (ap > epsilon$3) && (padRadius ? +padRadius.apply(this, arguments) : sqrt$2(r0 * r0 + r1 * r1)),
rc = min$1(abs$1(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),
rc0 = rc,
rc1 = rc,
t0,
t1;
// Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.
if (rp > epsilon$3) {
var p0 = asin$1(rp / r0 * sin$2(ap)),
p1 = asin$1(rp / r1 * sin$2(ap));
if ((da0 -= p0 * 2) > epsilon$3) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;
else da0 = 0, a00 = a10 = (a0 + a1) / 2;
if ((da1 -= p1 * 2) > epsilon$3) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;
else da1 = 0, a01 = a11 = (a0 + a1) / 2;
}
var x01 = r1 * cos$2(a01),
y01 = r1 * sin$2(a01),
x10 = r0 * cos$2(a10),
y10 = r0 * sin$2(a10);
// Apply rounded corners?
if (rc > epsilon$3) {
var x11 = r1 * cos$2(a11),
y11 = r1 * sin$2(a11),
x00 = r0 * cos$2(a00),
y00 = r0 * sin$2(a00);
// Restrict the corner radius according to the sector angle.
if (da < pi$4) {
var oc = da0 > epsilon$3 ? intersect(x01, y01, x00, y00, x11, y11, x10, y10) : [x10, y10],
ax = x01 - oc[0],
ay = y01 - oc[1],
bx = x11 - oc[0],
by = y11 - oc[1],
kc = 1 / sin$2(acos$1((ax * bx + ay * by) / (sqrt$2(ax * ax + ay * ay) * sqrt$2(bx * bx + by * by))) / 2),
lc = sqrt$2(oc[0] * oc[0] + oc[1] * oc[1]);
rc0 = min$1(rc, (r0 - lc) / (kc - 1));
rc1 = min$1(rc, (r1 - lc) / (kc + 1));
}
}
// Is the sector collapsed to a line?
if (!(da1 > epsilon$3)) context.moveTo(x01, y01);
// Does the sector’s outer ring have rounded corners?
else if (rc1 > epsilon$3) {
t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);
t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);
context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);
// Have the corners merged?
if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2$1(t0.y01, t0.x01), atan2$1(t1.y01, t1.x01), !cw);
// Otherwise, draw the two corners and the ring.
else {
context.arc(t0.cx, t0.cy, rc1, atan2$1(t0.y01, t0.x01), atan2$1(t0.y11, t0.x11), !cw);
context.arc(0, 0, r1, atan2$1(t0.cy + t0.y11, t0.cx + t0.x11), atan2$1(t1.cy + t1.y11, t1.cx + t1.x11), !cw);
context.arc(t1.cx, t1.cy, rc1, atan2$1(t1.y11, t1.x11), atan2$1(t1.y01, t1.x01), !cw);
}
}
// Or is the outer ring just a circular arc?
else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);
// Is there no inner ring, and it’s a circular sector?
// Or perhaps it’s an annular sector collapsed due to padding?
if (!(r0 > epsilon$3) || !(da0 > epsilon$3)) context.lineTo(x10, y10);
// Does the sector’s inner ring (or point) have rounded corners?
else if (rc0 > epsilon$3) {
t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);
t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);
context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);
// Have the corners merged?
if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2$1(t0.y01, t0.x01), atan2$1(t1.y01, t1.x01), !cw);
// Otherwise, draw the two corners and the ring.
else {
context.arc(t0.cx, t0.cy, rc0, atan2$1(t0.y01, t0.x01), atan2$1(t0.y11, t0.x11), !cw);
context.arc(0, 0, r0, atan2$1(t0.cy + t0.y11, t0.cx + t0.x11), atan2$1(t1.cy + t1.y11, t1.cx + t1.x11), cw);
context.arc(t1.cx, t1.cy, rc0, atan2$1(t1.y11, t1.x11), atan2$1(t1.y01, t1.x01), !cw);
}
}
// Or is the inner ring just a circular arc?
else context.arc(0, 0, r0, a10, a00, cw);
}
context.closePath();
if (buffer) return context = null, buffer + "" || null;
}
arc.centroid = function() {
var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,
a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi$4 / 2;
return [cos$2(a) * r, sin$2(a) * r];
};
arc.innerRadius = function(_) {
return arguments.length ? (innerRadius = typeof _ === "function" ? _ : constant$10(+_), arc) : innerRadius;
};
arc.outerRadius = function(_) {
return arguments.length ? (outerRadius = typeof _ === "function" ? _ : constant$10(+_), arc) : outerRadius;
};
arc.cornerRadius = function(_) {
return arguments.length ? (cornerRadius = typeof _ === "function" ? _ : constant$10(+_), arc) : cornerRadius;
};
arc.padRadius = function(_) {
return arguments.length ? (padRadius = _ == null ? null : typeof _ === "function" ? _ : constant$10(+_), arc) : padRadius;
};
arc.startAngle = function(_) {
return arguments.length ? (startAngle = typeof _ === "function" ? _ : constant$10(+_), arc) : startAngle;
};
arc.endAngle = function(_) {
return arguments.length ? (endAngle = typeof _ === "function" ? _ : constant$10(+_), arc) : endAngle;
};
arc.padAngle = function(_) {
return arguments.length ? (padAngle = typeof _ === "function" ? _ : constant$10(+_), arc) : padAngle;
};
arc.context = function(_) {
return arguments.length ? ((context = _ == null ? null : _), arc) : context;
};
return arc;
};
function Linear(context) {
this._context = context;
}
Linear.prototype = {
areaStart: function() {
this._line = 0;
},
areaEnd: function() {
this._line = NaN;
},
lineStart: function() {
this._point = 0;
},
lineEnd: function() {
if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
this._line = 1 - this._line;
},
point: function(x, y) {
x = +x, y = +y;
switch (this._point) {
case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
case 1: this._point = 2; // proceed
default: this._context.lineTo(x, y); break;
}
}
};
var curveLinear = function(context) {
return new Linear(context);
};
function x$3(p) {
return p[0];
}
function y$3(p) {
return p[1];
}
var line = function() {
var x$$1 = x$3,
y$$1 = y$3,
defined = constant$10(true),
context = null,
curve = curveLinear,
output = null;
function line(data) {
var i,
n = data.length,
d,
defined0 = false,
buffer;
if (context == null) output = curve(buffer = path());
for (i = 0; i <= n; ++i) {
if (!(i < n && defined(d = data[i], i, data)) === defined0) {
if (defined0 = !defined0) output.lineStart();
else output.lineEnd();
}
if (defined0) output.point(+x$$1(d, i, data), +y$$1(d, i, data));
}
if (buffer) return output = null, buffer + "" || null;
}
line.x = function(_) {
return arguments.length ? (x$$1 = typeof _ === "function" ? _ : constant$10(+_), line) : x$$1;
};
line.y = function(_) {
return arguments.length ? (y$$1 = typeof _ === "function" ? _ : constant$10(+_), line) : y$$1;
};
line.defined = function(_) {
return arguments.length ? (defined = typeof _ === "function" ? _ : constant$10(!!_), line) : defined;
};
line.curve = function(_) {
return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;
};
line.context = function(_) {
return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;
};
return line;
};
var area$2 = function() {
var x0 = x$3,
x1 = null,
y0 = constant$10(0),
y1 = y$3,
defined = constant$10(true),
context = null,
curve = curveLinear,
output = null;
function area(data) {
var i,
j,
k,
n = data.length,
d,
defined0 = false,
buffer,
x0z = new Array(n),
y0z = new Array(n);
if (context == null) output = curve(buffer = path());
for (i = 0; i <= n; ++i) {
if (!(i < n && defined(d = data[i], i, data)) === defined0) {
if (defined0 = !defined0) {
j = i;
output.areaStart();
output.lineStart();
} else {
output.lineEnd();
output.lineStart();
for (k = i - 1; k >= j; --k) {
output.point(x0z[k], y0z[k]);
}
output.lineEnd();
output.areaEnd();
}
}
if (defined0) {
x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);
output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);
}
}
if (buffer) return output = null, buffer + "" || null;
}
function arealine() {
return line().defined(defined).curve(curve).context(context);
}
area.x = function(_) {
return arguments.length ? (x0 = typeof _ === "function" ? _ : constant$10(+_), x1 = null, area) : x0;
};
area.x0 = function(_) {
return arguments.length ? (x0 = typeof _ === "function" ? _ : constant$10(+_), area) : x0;
};
area.x1 = function(_) {
return arguments.length ? (x1 = _ == null ? null : typeof _ === "function" ? _ : constant$10(+_), area) : x1;
};
area.y = function(_) {
return arguments.length ? (y0 = typeof _ === "function" ? _ : constant$10(+_), y1 = null, area) : y0;
};
area.y0 = function(_) {
return arguments.length ? (y0 = typeof _ === "function" ? _ : constant$10(+_), area) : y0;
};
area.y1 = function(_) {
return arguments.length ? (y1 = _ == null ? null : typeof _ === "function" ? _ : constant$10(+_), area) : y1;
};
area.lineX0 =
area.lineY0 = function() {
return arealine().x(x0).y(y0);
};
area.lineY1 = function() {
return arealine().x(x0).y(y1);
};
area.lineX1 = function() {
return arealine().x(x1).y(y0);
};
area.defined = function(_) {
return arguments.length ? (defined = typeof _ === "function" ? _ : constant$10(!!_), area) : defined;
};
area.curve = function(_) {
return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;
};
area.context = function(_) {
return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;
};
return area;
};
var descending$1 = function(a, b) {
return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;
};
var identity$7 = function(d) {
return d;
};
var pie = function() {
var value = identity$7,
sortValues = descending$1,
sort = null,
startAngle = constant$10(0),
endAngle = constant$10(tau$4),
padAngle = constant$10(0);
function pie(data) {
var i,
n = data.length,
j,
k,
sum = 0,
index = new Array(n),
arcs = new Array(n),
a0 = +startAngle.apply(this, arguments),
da = Math.min(tau$4, Math.max(-tau$4, endAngle.apply(this, arguments) - a0)),
a1,
p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),
pa = p * (da < 0 ? -1 : 1),
v;
for (i = 0; i < n; ++i) {
if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {
sum += v;
}
}
// Optionally sort the arcs by previously-computed values or by data.
if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); });
else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); });
// Compute the arcs! They are stored in the original data's order.
for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {
j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {
data: data[j],
index: i,
value: v,
startAngle: a0,
endAngle: a1,
padAngle: p
};
}
return arcs;
}
pie.value = function(_) {
return arguments.length ? (value = typeof _ === "function" ? _ : constant$10(+_), pie) : value;
};
pie.sortValues = function(_) {
return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;
};
pie.sort = function(_) {
return arguments.length ? (sort = _, sortValues = null, pie) : sort;
};
pie.startAngle = function(_) {
return arguments.length ? (startAngle = typeof _ === "function" ? _ : constant$10(+_), pie) : startAngle;
};
pie.endAngle = function(_) {
return arguments.length ? (endAngle = typeof _ === "function" ? _ : constant$10(+_), pie) : endAngle;
};
pie.padAngle = function(_) {
return arguments.length ? (padAngle = typeof _ === "function" ? _ : constant$10(+_), pie) : padAngle;
};
return pie;
};
var curveRadialLinear = curveRadial(curveLinear);
function Radial(curve) {
this._curve = curve;
}
Radial.prototype = {
areaStart: function() {
this._curve.areaStart();
},
areaEnd: function() {
this._curve.areaEnd();
},
lineStart: function() {
this._curve.lineStart();
},
lineEnd: function() {
this._curve.lineEnd();
},
point: function(a, r) {
this._curve.point(r * Math.sin(a), r * -Math.cos(a));
}
};
function curveRadial(curve) {
function radial(context) {
return new Radial(curve(context));
}
radial._curve = curve;
return radial;
}
function radialLine(l) {
var c = l.curve;
l.angle = l.x, delete l.x;
l.radius = l.y, delete l.y;
l.curve = function(_) {
return arguments.length ? c(curveRadial(_)) : c()._curve;
};
return l;
}
var radialLine$1 = function() {
return radialLine(line().curve(curveRadialLinear));
};
var radialArea = function() {
var a = area$2().curve(curveRadialLinear),
c = a.curve,
x0 = a.lineX0,
x1 = a.lineX1,
y0 = a.lineY0,
y1 = a.lineY1;
a.angle = a.x, delete a.x;
a.startAngle = a.x0, delete a.x0;
a.endAngle = a.x1, delete a.x1;
a.radius = a.y, delete a.y;
a.innerRadius = a.y0, delete a.y0;
a.outerRadius = a.y1, delete a.y1;
a.lineStartAngle = function() { return radialLine(x0()); }, delete a.lineX0;
a.lineEndAngle = function() { return radialLine(x1()); }, delete a.lineX1;
a.lineInnerRadius = function() { return radialLine(y0()); }, delete a.lineY0;
a.lineOuterRadius = function() { return radialLine(y1()); }, delete a.lineY1;
a.curve = function(_) {
return arguments.length ? c(curveRadial(_)) : c()._curve;
};
return a;
};
var circle$1 = {
draw: function(context, size) {
var r = Math.sqrt(size / pi$4);
context.moveTo(r, 0);
context.arc(0, 0, r, 0, tau$4);
}
};
var cross$2 = {
draw: function(context, size) {
var r = Math.sqrt(size / 5) / 2;
context.moveTo(-3 * r, -r);
context.lineTo(-r, -r);
context.lineTo(-r, -3 * r);
context.lineTo(r, -3 * r);
context.lineTo(r, -r);
context.lineTo(3 * r, -r);
context.lineTo(3 * r, r);
context.lineTo(r, r);
context.lineTo(r, 3 * r);
context.lineTo(-r, 3 * r);
context.lineTo(-r, r);
context.lineTo(-3 * r, r);
context.closePath();
}
};
var tan30 = Math.sqrt(1 / 3);
var tan30_2 = tan30 * 2;
var diamond = {
draw: function(context, size) {
var y = Math.sqrt(size / tan30_2),
x = y * tan30;
context.moveTo(0, -y);
context.lineTo(x, 0);
context.lineTo(0, y);
context.lineTo(-x, 0);
context.closePath();
}
};
var ka = 0.89081309152928522810;
var kr = Math.sin(pi$4 / 10) / Math.sin(7 * pi$4 / 10);
var kx = Math.sin(tau$4 / 10) * kr;
var ky = -Math.cos(tau$4 / 10) * kr;
var star = {
draw: function(context, size) {
var r = Math.sqrt(size * ka),
x = kx * r,
y = ky * r;
context.moveTo(0, -r);
context.lineTo(x, y);
for (var i = 1; i < 5; ++i) {
var a = tau$4 * i / 5,
c = Math.cos(a),
s = Math.sin(a);
context.lineTo(s * r, -c * r);
context.lineTo(c * x - s * y, s * x + c * y);
}
context.closePath();
}
};
var square = {
draw: function(context, size) {
var w = Math.sqrt(size),
x = -w / 2;
context.rect(x, x, w, w);
}
};
var sqrt3 = Math.sqrt(3);
var triangle = {
draw: function(context, size) {
var y = -Math.sqrt(size / (sqrt3 * 3));
context.moveTo(0, y * 2);
context.lineTo(-sqrt3 * y, -y);
context.lineTo(sqrt3 * y, -y);
context.closePath();
}
};
var c = -0.5;
var s = Math.sqrt(3) / 2;
var k = 1 / Math.sqrt(12);
var a = (k / 2 + 1) * 3;
var wye = {
draw: function(context, size) {
var r = Math.sqrt(size / a),
x0 = r / 2,
y0 = r * k,
x1 = x0,
y1 = r * k + r,
x2 = -x1,
y2 = y1;
context.moveTo(x0, y0);
context.lineTo(x1, y1);
context.lineTo(x2, y2);
context.lineTo(c * x0 - s * y0, s * x0 + c * y0);
context.lineTo(c * x1 - s * y1, s * x1 + c * y1);
context.lineTo(c * x2 - s * y2, s * x2 + c * y2);
context.lineTo(c * x0 + s * y0, c * y0 - s * x0);
context.lineTo(c * x1 + s * y1, c * y1 - s * x1);
context.lineTo(c * x2 + s * y2, c * y2 - s * x2);
context.closePath();
}
};
var symbols = [
circle$1,
cross$2,
diamond,
square,
star,
triangle,
wye
];
var symbol = function() {
var type = constant$10(circle$1),
size = constant$10(64),
context = null;
function symbol() {
var buffer;
if (!context) context = buffer = path();
type.apply(this, arguments).draw(context, +size.apply(this, arguments));
if (buffer) return context = null, buffer + "" || null;
}
symbol.type = function(_) {
return arguments.length ? (type = typeof _ === "function" ? _ : constant$10(_), symbol) : type;
};
symbol.size = function(_) {
return arguments.length ? (size = typeof _ === "function" ? _ : constant$10(+_), symbol) : size;
};
symbol.context = function(_) {
return arguments.length ? (context = _ == null ? null : _, symbol) : context;
};
return symbol;
};
var noop$2 = function() {};
function point$2(that, x, y) {
that._context.bezierCurveTo(
(2 * that._x0 + that._x1) / 3,
(2 * that._y0 + that._y1) / 3,
(that._x0 + 2 * that._x1) / 3,
(that._y0 + 2 * that._y1) / 3,
(that._x0 + 4 * that._x1 + x) / 6,
(that._y0 + 4 * that._y1 + y) / 6
);
}
function Basis(context) {
this._context = context;
}
Basis.prototype = {
areaStart: function() {
this._line = 0;
},
areaEnd: function() {
this._line = NaN;
},
lineStart: function() {
this._x0 = this._x1 =
this._y0 = this._y1 = NaN;
this._point = 0;
},
lineEnd: function() {
switch (this._point) {
case 3: point$2(this, this._x1, this._y1); // proceed
case 2: this._context.lineTo(this._x1, this._y1); break;
}
if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
this._line = 1 - this._line;
},
point: function(x, y) {
x = +x, y = +y;
switch (this._point) {
case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
case 1: this._point = 2; break;
case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // proceed
default: point$2(this, x, y); break;
}
this._x0 = this._x1, this._x1 = x;
this._y0 = this._y1, this._y1 = y;
}
};
var basis$2 = function(context) {
return new Basis(context);
};
function BasisClosed(context) {
this._context = context;
}
BasisClosed.prototype = {
areaStart: noop$2,
areaEnd: noop$2,
lineStart: function() {
this._x0 = this._x1 = this._x2 = this._x3 = this._x4 =
this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;
this._point = 0;
},
lineEnd: function() {
switch (this._point) {
case 1: {
this._context.moveTo(this._x2, this._y2);
this._context.closePath();
break;
}
case 2: {
this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);
this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);
this._context.closePath();
break;
}
case 3: {
this.point(this._x2, this._y2);
this.point(this._x3, this._y3);
this.point(this._x4, this._y4);
break;
}
}
},
point: function(x, y) {
x = +x, y = +y;
switch (this._point) {
case 0: this._point = 1; this._x2 = x, this._y2 = y; break;
case 1: this._point = 2; this._x3 = x, this._y3 = y; break;
case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break;
default: point$2(this, x, y); break;
}
this._x0 = this._x1, this._x1 = x;
this._y0 = this._y1, this._y1 = y;
}
};
var basisClosed$1 = function(context) {
return new BasisClosed(context);
};
function BasisOpen(context) {
this._context = context;
}
BasisOpen.prototype = {
areaStart: function() {
this._line = 0;
},
areaEnd: function() {
this._line = NaN;
},
lineStart: function() {
this._x0 = this._x1 =
this._y0 = this._y1 = NaN;
this._point = 0;
},
lineEnd: function() {
if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();
this._line = 1 - this._line;
},
point: function(x, y) {
x = +x, y = +y;
switch (this._point) {
case 0: this._point = 1; break;
case 1: this._point = 2; break;
case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break;
case 3: this._point = 4; // proceed
default: point$2(this, x, y); break;
}
this._x0 = this._x1, this._x1 = x;
this._y0 = this._y1, this._y1 = y;
}
};
var basisOpen = function(context) {
return new BasisOpen(context);
};
function Bundle(context, beta) {
this._basis = new Basis(context);
this._beta = beta;
}
Bundle.prototype = {
lineStart: function() {
this._x = [];
this._y = [];
this._basis.lineStart();
},
lineEnd: function() {
var x = this._x,
y = this._y,
j = x.length - 1;
if (j > 0) {
var x0 = x[0],
y0 = y[0],
dx = x[j] - x0,
dy = y[j] - y0,
i = -1,
t;
while (++i <= j) {
t = i / j;
this._basis.point(
this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),
this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)
);
}
}
this._x = this._y = null;
this._basis.lineEnd();
},
point: function(x, y) {
this._x.push(+x);
this._y.push(+y);
}
};
var bundle = ((function custom(beta) {
function bundle(context) {
return beta === 1 ? new Basis(context) : new Bundle(context, beta);
}
bundle.beta = function(beta) {
return custom(+beta);
};
return bundle;
}))(0.85);
function point$3(that, x, y) {
that._context.bezierCurveTo(
that._x1 + that._k * (that._x2 - that._x0),
that._y1 + that._k * (that._y2 - that._y0),
that._x2 + that._k * (that._x1 - x),
that._y2 + that._k * (that._y1 - y),
that._x2,
that._y2
);
}
function Cardinal(context, tension) {
this._context = context;
this._k = (1 - tension) / 6;
}
Cardinal.prototype = {
areaStart: function() {
this._line = 0;
},
areaEnd: function() {
this._line = NaN;
},
lineStart: function() {
this._x0 = this._x1 = this._x2 =
this._y0 = this._y1 = this._y2 = NaN;
this._point = 0;
},
lineEnd: function() {
switch (this._point) {
case 2: this._context.lineTo(this._x2, this._y2); break;
case 3: point$3(this, this._x1, this._y1); break;
}
if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
this._line = 1 - this._line;
},
point: function(x, y) {
x = +x, y = +y;
switch (this._point) {
case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
case 1: this._point = 2; this._x1 = x, this._y1 = y; break;
case 2: this._point = 3; // proceed
default: point$3(this, x, y); break;
}
this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
}
};
var cardinal = ((function custom(tension) {
function cardinal(context) {
return new Cardinal(context, tension);
}
cardinal.tension = function(tension) {
return custom(+tension);
};
return cardinal;
}))(0);
function CardinalClosed(context, tension) {
this._context = context;
this._k = (1 - tension) / 6;
}
CardinalClosed.prototype = {
areaStart: noop$2,
areaEnd: noop$2,
lineStart: function() {
this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =
this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;
this._point = 0;
},
lineEnd: function() {
switch (this._point) {
case 1: {
this._context.moveTo(this._x3, this._y3);
this._context.closePath();
break;
}
case 2: {
this._context.lineTo(this._x3, this._y3);
this._context.closePath();
break;
}
case 3: {
this.point(this._x3, this._y3);
this.point(this._x4, this._y4);
this.point(this._x5, this._y5);
break;
}
}
},
point: function(x, y) {
x = +x, y = +y;
switch (this._point) {
case 0: this._point = 1; this._x3 = x, this._y3 = y; break;
case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;
case 2: this._point = 3; this._x5 = x, this._y5 = y; break;
default: point$3(this, x, y); break;
}
this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
}
};
var cardinalClosed = ((function custom(tension) {
function cardinal(context) {
return new CardinalClosed(context, tension);
}
cardinal.tension = function(tension) {
return custom(+tension);
};
return cardinal;
}))(0);
function CardinalOpen(context, tension) {
this._context = context;
this._k = (1 - tension) / 6;
}
CardinalOpen.prototype = {
areaStart: function() {
this._line = 0;
},
areaEnd: function() {
this._line = NaN;
},
lineStart: function() {
this._x0 = this._x1 = this._x2 =
this._y0 = this._y1 = this._y2 = NaN;
this._point = 0;
},
lineEnd: function() {
if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();
this._line = 1 - this._line;
},
point: function(x, y) {
x = +x, y = +y;
switch (this._point) {
case 0: this._point = 1; break;
case 1: this._point = 2; break;
case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;
case 3: this._point = 4; // proceed
default: point$3(this, x, y); break;
}
this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
}
};
var cardinalOpen = ((function custom(tension) {
function cardinal(context) {
return new CardinalOpen(context, tension);
}
cardinal.tension = function(tension) {
return custom(+tension);
};
return cardinal;
}))(0);
function point$4(that, x, y) {
var x1 = that._x1,
y1 = that._y1,
x2 = that._x2,
y2 = that._y2;
if (that._l01_a > epsilon$3) {
var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,
n = 3 * that._l01_a * (that._l01_a + that._l12_a);
x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;
y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;
}
if (that._l23_a > epsilon$3) {
var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,
m = 3 * that._l23_a * (that._l23_a + that._l12_a);
x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;
y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;
}
that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);
}
function CatmullRom(context, alpha) {
this._context = context;
this._alpha = alpha;
}
CatmullRom.prototype = {
areaStart: function() {
this._line = 0;
},
areaEnd: function() {
this._line = NaN;
},
lineStart: function() {
this._x0 = this._x1 = this._x2 =
this._y0 = this._y1 = this._y2 = NaN;
this._l01_a = this._l12_a = this._l23_a =
this._l01_2a = this._l12_2a = this._l23_2a =
this._point = 0;
},
lineEnd: function() {
switch (this._point) {
case 2: this._context.lineTo(this._x2, this._y2); break;
case 3: this.point(this._x2, this._y2); break;
}
if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
this._line = 1 - this._line;
},
point: function(x, y) {
x = +x, y = +y;
if (this._point) {
var x23 = this._x2 - x,
y23 = this._y2 - y;
this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));
}
switch (this._point) {
case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
case 1: this._point = 2; break;
case 2: this._point = 3; // proceed
default: point$4(this, x, y); break;
}
this._l01_a = this._l12_a, this._l12_a = this._l23_a;
this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;
this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
}
};
var catmullRom = ((function custom(alpha) {
function catmullRom(context) {
return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);
}
catmullRom.alpha = function(alpha) {
return custom(+alpha);
};
return catmullRom;
}))(0.5);
function CatmullRomClosed(context, alpha) {
this._context = context;
this._alpha = alpha;
}
CatmullRomClosed.prototype = {
areaStart: noop$2,
areaEnd: noop$2,
lineStart: function() {
this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =
this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;
this._l01_a = this._l12_a = this._l23_a =
this._l01_2a = this._l12_2a = this._l23_2a =
this._point = 0;
},
lineEnd: function() {
switch (this._point) {
case 1: {
this._context.moveTo(this._x3, this._y3);
this._context.closePath();
break;
}
case 2: {
this._context.lineTo(this._x3, this._y3);
this._context.closePath();
break;
}
case 3: {
this.point(this._x3, this._y3);
this.point(this._x4, this._y4);
this.point(this._x5, this._y5);
break;
}
}
},
point: function(x, y) {
x = +x, y = +y;
if (this._point) {
var x23 = this._x2 - x,
y23 = this._y2 - y;
this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));
}
switch (this._point) {
case 0: this._point = 1; this._x3 = x, this._y3 = y; break;
case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;
case 2: this._point = 3; this._x5 = x, this._y5 = y; break;
default: point$4(this, x, y); break;
}
this._l01_a = this._l12_a, this._l12_a = this._l23_a;
this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;
this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
}
};
var catmullRomClosed = ((function custom(alpha) {
function catmullRom(context) {
return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0);
}
catmullRom.alpha = function(alpha) {
return custom(+alpha);
};
return catmullRom;
}))(0.5);
function CatmullRomOpen(context, alpha) {
this._context = context;
this._alpha = alpha;
}
CatmullRomOpen.prototype = {
areaStart: function() {
this._line = 0;
},
areaEnd: function() {
this._line = NaN;
},
lineStart: function() {
this._x0 = this._x1 = this._x2 =
this._y0 = this._y1 = this._y2 = NaN;
this._l01_a = this._l12_a = this._l23_a =
this._l01_2a = this._l12_2a = this._l23_2a =
this._point = 0;
},
lineEnd: function() {
if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();
this._line = 1 - this._line;
},
point: function(x, y) {
x = +x, y = +y;
if (this._point) {
var x23 = this._x2 - x,
y23 = this._y2 - y;
this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));
}
switch (this._point) {
case 0: this._point = 1; break;
case 1: this._point = 2; break;
case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;
case 3: this._point = 4; // proceed
default: point$4(this, x, y); break;
}
this._l01_a = this._l12_a, this._l12_a = this._l23_a;
this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;
this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
}
};
var catmullRomOpen = ((function custom(alpha) {
function catmullRom(context) {
return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0);
}
catmullRom.alpha = function(alpha) {
return custom(+alpha);
};
return catmullRom;
}))(0.5);
function LinearClosed(context) {
this._context = context;
}
LinearClosed.prototype = {
areaStart: noop$2,
areaEnd: noop$2,
lineStart: function() {
this._point = 0;
},
lineEnd: function() {
if (this._point) this._context.closePath();
},
point: function(x, y) {
x = +x, y = +y;
if (this._point) this._context.lineTo(x, y);
else this._point = 1, this._context.moveTo(x, y);
}
};
var linearClosed = function(context) {
return new LinearClosed(context);
};
function sign$1(x) {
return x < 0 ? -1 : 1;
}
// Calculate the slopes of the tangents (Hermite-type interpolation) based on
// the following paper: Steffen, M. 1990. A Simple Method for Monotonic
// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.
// NOV(II), P. 443, 1990.
function slope3(that, x2, y2) {
var h0 = that._x1 - that._x0,
h1 = x2 - that._x1,
s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),
s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),
p = (s0 * h1 + s1 * h0) / (h0 + h1);
return (sign$1(s0) + sign$1(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;
}
// Calculate a one-sided slope.
function slope2(that, t) {
var h = that._x1 - that._x0;
return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;
}
// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations
// "you can express cubic Hermite interpolation in terms of cubic Bézier curves
// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1".
function point$5(that, t0, t1) {
var x0 = that._x0,
y0 = that._y0,
x1 = that._x1,
y1 = that._y1,
dx = (x1 - x0) / 3;
that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);
}
function MonotoneX(context) {
this._context = context;
}
MonotoneX.prototype = {
areaStart: function() {
this._line = 0;
},
areaEnd: function() {
this._line = NaN;
},
lineStart: function() {
this._x0 = this._x1 =
this._y0 = this._y1 =
this._t0 = NaN;
this._point = 0;
},
lineEnd: function() {
switch (this._point) {
case 2: this._context.lineTo(this._x1, this._y1); break;
case 3: point$5(this, this._t0, slope2(this, this._t0)); break;
}
if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
this._line = 1 - this._line;
},
point: function(x, y) {
var t1 = NaN;
x = +x, y = +y;
if (x === this._x1 && y === this._y1) return; // Ignore coincident points.
switch (this._point) {
case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
case 1: this._point = 2; break;
case 2: this._point = 3; point$5(this, slope2(this, t1 = slope3(this, x, y)), t1); break;
default: point$5(this, this._t0, t1 = slope3(this, x, y)); break;
}
this._x0 = this._x1, this._x1 = x;
this._y0 = this._y1, this._y1 = y;
this._t0 = t1;
}
};
function MonotoneY(context) {
this._context = new ReflectContext(context);
}
(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {
MonotoneX.prototype.point.call(this, y, x);
};
function ReflectContext(context) {
this._context = context;
}
ReflectContext.prototype = {
moveTo: function(x, y) { this._context.moveTo(y, x); },
closePath: function() { this._context.closePath(); },
lineTo: function(x, y) { this._context.lineTo(y, x); },
bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }
};
function monotoneX(context) {
return new MonotoneX(context);
}
function monotoneY(context) {
return new MonotoneY(context);
}
function Natural(context) {
this._context = context;
}
Natural.prototype = {
areaStart: function() {
this._line = 0;
},
areaEnd: function() {
this._line = NaN;
},
lineStart: function() {
this._x = [];
this._y = [];
},
lineEnd: function() {
var x = this._x,
y = this._y,
n = x.length;
if (n) {
this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);
if (n === 2) {
this._context.lineTo(x[1], y[1]);
} else {
var px = controlPoints(x),
py = controlPoints(y);
for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {
this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);
}
}
}
if (this._line || (this._line !== 0 && n === 1)) this._context.closePath();
this._line = 1 - this._line;
this._x = this._y = null;
},
point: function(x, y) {
this._x.push(+x);
this._y.push(+y);
}
};
// See https://www.particleincell.com/2012/bezier-splines/ for derivation.
function controlPoints(x) {
var i,
n = x.length - 1,
m,
a = new Array(n),
b = new Array(n),
r = new Array(n);
a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];
for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1];
a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];
for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1];
a[n - 1] = r[n - 1] / b[n - 1];
for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i];
b[n - 1] = (x[n] + a[n - 1]) / 2;
for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1];
return [a, b];
}
var natural = function(context) {
return new Natural(context);
};
function Step(context, t) {
this._context = context;
this._t = t;
}
Step.prototype = {
areaStart: function() {
this._line = 0;
},
areaEnd: function() {
this._line = NaN;
},
lineStart: function() {
this._x = this._y = NaN;
this._point = 0;
},
lineEnd: function() {
if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);
if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;
},
point: function(x, y) {
x = +x, y = +y;
switch (this._point) {
case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
case 1: this._point = 2; // proceed
default: {
if (this._t <= 0) {
this._context.lineTo(this._x, y);
this._context.lineTo(x, y);
} else {
var x1 = this._x * (1 - this._t) + x * this._t;
this._context.lineTo(x1, this._y);
this._context.lineTo(x1, y);
}
break;
}
}
this._x = x, this._y = y;
}
};
var step = function(context) {
return new Step(context, 0.5);
};
function stepBefore(context) {
return new Step(context, 0);
}
function stepAfter(context) {
return new Step(context, 1);
}
var slice$5 = Array.prototype.slice;
var none$1 = function(series, order) {
if (!((n = series.length) > 1)) return;
for (var i = 1, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) {
s0 = s1, s1 = series[order[i]];
for (var j = 0; j < m; ++j) {
s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1];
}
}
};
var none$2 = function(series) {
var n = series.length, o = new Array(n);
while (--n >= 0) o[n] = n;
return o;
};
function stackValue(d, key) {
return d[key];
}
var stack = function() {
var keys = constant$10([]),
order = none$2,
offset = none$1,
value = stackValue;
function stack(data) {
var kz = keys.apply(this, arguments),
i,
m = data.length,
n = kz.length,
sz = new Array(n),
oz;
for (i = 0; i < n; ++i) {
for (var ki = kz[i], si = sz[i] = new Array(m), j = 0, sij; j < m; ++j) {
si[j] = sij = [0, +value(data[j], ki, j, data)];
sij.data = data[j];
}
si.key = ki;
}
for (i = 0, oz = order(sz); i < n; ++i) {
sz[oz[i]].index = i;
}
offset(sz, oz);
return sz;
}
stack.keys = function(_) {
return arguments.length ? (keys = typeof _ === "function" ? _ : constant$10(slice$5.call(_)), stack) : keys;
};
stack.value = function(_) {
return arguments.length ? (value = typeof _ === "function" ? _ : constant$10(+_), stack) : value;
};
stack.order = function(_) {
return arguments.length ? (order = _ == null ? none$2 : typeof _ === "function" ? _ : constant$10(slice$5.call(_)), stack) : order;
};
stack.offset = function(_) {
return arguments.length ? (offset = _ == null ? none$1 : _, stack) : offset;
};
return stack;
};
var expand = function(series, order) {
if (!((n = series.length) > 0)) return;
for (var i, n, j = 0, m = series[0].length, y; j < m; ++j) {
for (y = i = 0; i < n; ++i) y += series[i][j][1] || 0;
if (y) for (i = 0; i < n; ++i) series[i][j][1] /= y;
}
none$1(series, order);
};
var silhouette = function(series, order) {
if (!((n = series.length) > 0)) return;
for (var j = 0, s0 = series[order[0]], n, m = s0.length; j < m; ++j) {
for (var i = 0, y = 0; i < n; ++i) y += series[i][j][1] || 0;
s0[j][1] += s0[j][0] = -y / 2;
}
none$1(series, order);
};
var wiggle = function(series, order) {
if (!((n = series.length) > 0) || !((m = (s0 = series[order[0]]).length) > 0)) return;
for (var y = 0, j = 1, s0, m, n; j < m; ++j) {
for (var i = 0, s1 = 0, s2 = 0; i < n; ++i) {
var si = series[order[i]],
sij0 = si[j][1] || 0,
sij1 = si[j - 1][1] || 0,
s3 = (sij0 - sij1) / 2;
for (var k = 0; k < i; ++k) {
var sk = series[order[k]],
skj0 = sk[j][1] || 0,
skj1 = sk[j - 1][1] || 0;
s3 += skj0 - skj1;
}
s1 += sij0, s2 += s3 * sij0;
}
s0[j - 1][1] += s0[j - 1][0] = y;
if (s1) y -= s2 / s1;
}
s0[j - 1][1] += s0[j - 1][0] = y;
none$1(series, order);
};
var ascending$2 = function(series) {
var sums = series.map(sum$2);
return none$2(series).sort(function(a, b) { return sums[a] - sums[b]; });
};
function sum$2(series) {
var s = 0, i = -1, n = series.length, v;
while (++i < n) if (v = +series[i][1]) s += v;
return s;
}
var descending$2 = function(series) {
return ascending$2(series).reverse();
};
var insideOut = function(series) {
var n = series.length,
i,
j,
sums = series.map(sum$2),
order = none$2(series).sort(function(a, b) { return sums[b] - sums[a]; }),
top = 0,
bottom = 0,
tops = [],
bottoms = [];
for (i = 0; i < n; ++i) {
j = order[i];
if (top < bottom) {
top += sums[j];
tops.push(j);
} else {
bottom += sums[j];
bottoms.push(j);
}
}
return bottoms.reverse().concat(tops);
};
var reverse = function(series) {
return none$2(series).reverse();
};
var constant$11 = function(x) {
return function() {
return x;
};
};
function x$4(d) {
return d[0];
}
function y$4(d) {
return d[1];
}
function RedBlackTree() {
this._ = null; // root node
}
function RedBlackNode(node) {
node.U = // parent node
node.C = // color - true for red, false for black
node.L = // left node
node.R = // right node
node.P = // previous node
node.N = null; // next node
}
RedBlackTree.prototype = {
constructor: RedBlackTree,
insert: function(after, node) {
var parent, grandpa, uncle;
if (after) {
node.P = after;
node.N = after.N;
if (after.N) after.N.P = node;
after.N = node;
if (after.R) {
after = after.R;
while (after.L) after = after.L;
after.L = node;
} else {
after.R = node;
}
parent = after;
} else if (this._) {
after = RedBlackFirst(this._);
node.P = null;
node.N = after;
after.P = after.L = node;
parent = after;
} else {
node.P = node.N = null;
this._ = node;
parent = null;
}
node.L = node.R = null;
node.U = parent;
node.C = true;
after = node;
while (parent && parent.C) {
grandpa = parent.U;
if (parent === grandpa.L) {
uncle = grandpa.R;
if (uncle && uncle.C) {
parent.C = uncle.C = false;
grandpa.C = true;
after = grandpa;
} else {
if (after === parent.R) {
RedBlackRotateLeft(this, parent);
after = parent;
parent = after.U;
}
parent.C = false;
grandpa.C = true;
RedBlackRotateRight(this, grandpa);
}
} else {
uncle = grandpa.L;
if (uncle && uncle.C) {
parent.C = uncle.C = false;
grandpa.C = true;
after = grandpa;
} else {
if (after === parent.L) {
RedBlackRotateRight(this, parent);
after = parent;
parent = after.U;
}
parent.C = false;
grandpa.C = true;
RedBlackRotateLeft(this, grandpa);
}
}
parent = after.U;
}
this._.C = false;
},
remove: function(node) {
if (node.N) node.N.P = node.P;
if (node.P) node.P.N = node.N;
node.N = node.P = null;
var parent = node.U,
sibling,
left = node.L,
right = node.R,
next,
red;
if (!left) next = right;
else if (!right) next = left;
else next = RedBlackFirst(right);
if (parent) {
if (parent.L === node) parent.L = next;
else parent.R = next;
} else {
this._ = next;
}
if (left && right) {
red = next.C;
next.C = node.C;
next.L = left;
left.U = next;
if (next !== right) {
parent = next.U;
next.U = node.U;
node = next.R;
parent.L = node;
next.R = right;
right.U = next;
} else {
next.U = parent;
parent = next;
node = next.R;
}
} else {
red = node.C;
node = next;
}
if (node) node.U = parent;
if (red) return;
if (node && node.C) { node.C = false; return; }
do {
if (node === this._) break;
if (node === parent.L) {
sibling = parent.R;
if (sibling.C) {
sibling.C = false;
parent.C = true;
RedBlackRotateLeft(this, parent);
sibling = parent.R;
}
if ((sibling.L && sibling.L.C)
|| (sibling.R && sibling.R.C)) {
if (!sibling.R || !sibling.R.C) {
sibling.L.C = false;
sibling.C = true;
RedBlackRotateRight(this, sibling);
sibling = parent.R;
}
sibling.C = parent.C;
parent.C = sibling.R.C = false;
RedBlackRotateLeft(this, parent);
node = this._;
break;
}
} else {
sibling = parent.L;
if (sibling.C) {
sibling.C = false;
parent.C = true;
RedBlackRotateRight(this, parent);
sibling = parent.L;
}
if ((sibling.L && sibling.L.C)
|| (sibling.R && sibling.R.C)) {
if (!sibling.L || !sibling.L.C) {
sibling.R.C = false;
sibling.C = true;
RedBlackRotateLeft(this, sibling);
sibling = parent.L;
}
sibling.C = parent.C;
parent.C = sibling.L.C = false;
RedBlackRotateRight(this, parent);
node = this._;
break;
}
}
sibling.C = true;
node = parent;
parent = parent.U;
} while (!node.C);
if (node) node.C = false;
}
};
function RedBlackRotateLeft(tree, node) {
var p = node,
q = node.R,
parent = p.U;
if (parent) {
if (parent.L === p) parent.L = q;
else parent.R = q;
} else {
tree._ = q;
}
q.U = parent;
p.U = q;
p.R = q.L;
if (p.R) p.R.U = p;
q.L = p;
}
function RedBlackRotateRight(tree, node) {
var p = node,
q = node.L,
parent = p.U;
if (parent) {
if (parent.L === p) parent.L = q;
else parent.R = q;
} else {
tree._ = q;
}
q.U = parent;
p.U = q;
p.L = q.R;
if (p.L) p.L.U = p;
q.R = p;
}
function RedBlackFirst(node) {
while (node.L) node = node.L;
return node;
}
function createEdge(left, right, v0, v1) {
var edge = [null, null],
index = edges.push(edge) - 1;
edge.left = left;
edge.right = right;
if (v0) setEdgeEnd(edge, left, right, v0);
if (v1) setEdgeEnd(edge, right, left, v1);
cells[left.index].halfedges.push(index);
cells[right.index].halfedges.push(index);
return edge;
}
function createBorderEdge(left, v0, v1) {
var edge = [v0, v1];
edge.left = left;
return edge;
}
function setEdgeEnd(edge, left, right, vertex) {
if (!edge[0] && !edge[1]) {
edge[0] = vertex;
edge.left = left;
edge.right = right;
} else if (edge.left === right) {
edge[1] = vertex;
} else {
edge[0] = vertex;
}
}
// Liang–Barsky line clipping.
function clipEdge(edge, x0, y0, x1, y1) {
var a = edge[0],
b = edge[1],
ax = a[0],
ay = a[1],
bx = b[0],
by = b[1],
t0 = 0,
t1 = 1,
dx = bx - ax,
dy = by - ay,
r;
r = x0 - ax;
if (!dx && r > 0) return;
r /= dx;
if (dx < 0) {
if (r < t0) return;
if (r < t1) t1 = r;
} else if (dx > 0) {
if (r > t1) return;
if (r > t0) t0 = r;
}
r = x1 - ax;
if (!dx && r < 0) return;
r /= dx;
if (dx < 0) {
if (r > t1) return;
if (r > t0) t0 = r;
} else if (dx > 0) {
if (r < t0) return;
if (r < t1) t1 = r;
}
r = y0 - ay;
if (!dy && r > 0) return;
r /= dy;
if (dy < 0) {
if (r < t0) return;
if (r < t1) t1 = r;
} else if (dy > 0) {
if (r > t1) return;
if (r > t0) t0 = r;
}
r = y1 - ay;
if (!dy && r < 0) return;
r /= dy;
if (dy < 0) {
if (r > t1) return;
if (r > t0) t0 = r;
} else if (dy > 0) {
if (r < t0) return;
if (r < t1) t1 = r;
}
if (!(t0 > 0) && !(t1 < 1)) return true; // TODO Better check?
if (t0 > 0) edge[0] = [ax + t0 * dx, ay + t0 * dy];
if (t1 < 1) edge[1] = [ax + t1 * dx, ay + t1 * dy];
return true;
}
function connectEdge(edge, x0, y0, x1, y1) {
var v1 = edge[1];
if (v1) return true;
var v0 = edge[0],
left = edge.left,
right = edge.right,
lx = left[0],
ly = left[1],
rx = right[0],
ry = right[1],
fx = (lx + rx) / 2,
fy = (ly + ry) / 2,
fm,
fb;
if (ry === ly) {
if (fx < x0 || fx >= x1) return;
if (lx > rx) {
if (!v0) v0 = [fx, y0];
else if (v0[1] >= y1) return;
v1 = [fx, y1];
} else {
if (!v0) v0 = [fx, y1];
else if (v0[1] < y0) return;
v1 = [fx, y0];
}
} else {
fm = (lx - rx) / (ry - ly);
fb = fy - fm * fx;
if (fm < -1 || fm > 1) {
if (lx > rx) {
if (!v0) v0 = [(y0 - fb) / fm, y0];
else if (v0[1] >= y1) return;
v1 = [(y1 - fb) / fm, y1];
} else {
if (!v0) v0 = [(y1 - fb) / fm, y1];
else if (v0[1] < y0) return;
v1 = [(y0 - fb) / fm, y0];
}
} else {
if (ly < ry) {
if (!v0) v0 = [x0, fm * x0 + fb];
else if (v0[0] >= x1) return;
v1 = [x1, fm * x1 + fb];
} else {
if (!v0) v0 = [x1, fm * x1 + fb];
else if (v0[0] < x0) return;
v1 = [x0, fm * x0 + fb];
}
}
}
edge[0] = v0;
edge[1] = v1;
return true;
}
function clipEdges(x0, y0, x1, y1) {
var i = edges.length,
edge;
while (i--) {
if (!connectEdge(edge = edges[i], x0, y0, x1, y1)
|| !clipEdge(edge, x0, y0, x1, y1)
|| !(Math.abs(edge[0][0] - edge[1][0]) > epsilon$4
|| Math.abs(edge[0][1] - edge[1][1]) > epsilon$4)) {
delete edges[i];
}
}
}
function createCell(site) {
return cells[site.index] = {
site: site,
halfedges: []
};
}
function cellHalfedgeAngle(cell, edge) {
var site = cell.site,
va = edge.left,
vb = edge.right;
if (site === vb) vb = va, va = site;
if (vb) return Math.atan2(vb[1] - va[1], vb[0] - va[0]);
if (site === va) va = edge[1], vb = edge[0];
else va = edge[0], vb = edge[1];
return Math.atan2(va[0] - vb[0], vb[1] - va[1]);
}
function cellHalfedgeStart(cell, edge) {
return edge[+(edge.left !== cell.site)];
}
function cellHalfedgeEnd(cell, edge) {
return edge[+(edge.left === cell.site)];
}
function sortCellHalfedges() {
for (var i = 0, n = cells.length, cell, halfedges, j, m; i < n; ++i) {
if ((cell = cells[i]) && (m = (halfedges = cell.halfedges).length)) {
var index = new Array(m),
array = new Array(m);
for (j = 0; j < m; ++j) index[j] = j, array[j] = cellHalfedgeAngle(cell, edges[halfedges[j]]);
index.sort(function(i, j) { return array[j] - array[i]; });
for (j = 0; j < m; ++j) array[j] = halfedges[index[j]];
for (j = 0; j < m; ++j) halfedges[j] = array[j];
}
}
}
function clipCells(x0, y0, x1, y1) {
var nCells = cells.length,
iCell,
cell,
site,
iHalfedge,
halfedges,
nHalfedges,
start,
startX,
startY,
end,
endX,
endY,
cover = true;
for (iCell = 0; iCell < nCells; ++iCell) {
if (cell = cells[iCell]) {
site = cell.site;
halfedges = cell.halfedges;
iHalfedge = halfedges.length;
// Remove any dangling clipped edges.
while (iHalfedge--) {
if (!edges[halfedges[iHalfedge]]) {
halfedges.splice(iHalfedge, 1);
}
}
// Insert any border edges as necessary.
iHalfedge = 0, nHalfedges = halfedges.length;
while (iHalfedge < nHalfedges) {
end = cellHalfedgeEnd(cell, edges[halfedges[iHalfedge]]), endX = end[0], endY = end[1];
start = cellHalfedgeStart(cell, edges[halfedges[++iHalfedge % nHalfedges]]), startX = start[0], startY = start[1];
if (Math.abs(endX - startX) > epsilon$4 || Math.abs(endY - startY) > epsilon$4) {
halfedges.splice(iHalfedge, 0, edges.push(createBorderEdge(site, end,
Math.abs(endX - x0) < epsilon$4 && y1 - endY > epsilon$4 ? [x0, Math.abs(startX - x0) < epsilon$4 ? startY : y1]
: Math.abs(endY - y1) < epsilon$4 && x1 - endX > epsilon$4 ? [Math.abs(startY - y1) < epsilon$4 ? startX : x1, y1]
: Math.abs(endX - x1) < epsilon$4 && endY - y0 > epsilon$4 ? [x1, Math.abs(startX - x1) < epsilon$4 ? startY : y0]
: Math.abs(endY - y0) < epsilon$4 && endX - x0 > epsilon$4 ? [Math.abs(startY - y0) < epsilon$4 ? startX : x0, y0]
: null)) - 1);
++nHalfedges;
}
}
if (nHalfedges) cover = false;
}
}
// If there weren’t any edges, have the closest site cover the extent.
// It doesn’t matter which corner of the extent we measure!
if (cover) {
var dx, dy, d2, dc = Infinity;
for (iCell = 0, cover = null; iCell < nCells; ++iCell) {
if (cell = cells[iCell]) {
site = cell.site;
dx = site[0] - x0;
dy = site[1] - y0;
d2 = dx * dx + dy * dy;
if (d2 < dc) dc = d2, cover = cell;
}
}
if (cover) {
var v00 = [x0, y0], v01 = [x0, y1], v11 = [x1, y1], v10 = [x1, y0];
cover.halfedges.push(
edges.push(createBorderEdge(site = cover.site, v00, v01)) - 1,
edges.push(createBorderEdge(site, v01, v11)) - 1,
edges.push(createBorderEdge(site, v11, v10)) - 1,
edges.push(createBorderEdge(site, v10, v00)) - 1
);
}
}
// Lastly delete any cells with no edges; these were entirely clipped.
for (iCell = 0; iCell < nCells; ++iCell) {
if (cell = cells[iCell]) {
if (!cell.halfedges.length) {
delete cells[iCell];
}
}
}
}
var circlePool = [];
var firstCircle;
function Circle() {
RedBlackNode(this);
this.x =
this.y =
this.arc =
this.site =
this.cy = null;
}
function attachCircle(arc) {
var lArc = arc.P,
rArc = arc.N;
if (!lArc || !rArc) return;
var lSite = lArc.site,
cSite = arc.site,
rSite = rArc.site;
if (lSite === rSite) return;
var bx = cSite[0],
by = cSite[1],
ax = lSite[0] - bx,
ay = lSite[1] - by,
cx = rSite[0] - bx,
cy = rSite[1] - by;
var d = 2 * (ax * cy - ay * cx);
if (d >= -epsilon2$2) return;
var ha = ax * ax + ay * ay,
hc = cx * cx + cy * cy,
x = (cy * ha - ay * hc) / d,
y = (ax * hc - cx * ha) / d;
var circle = circlePool.pop() || new Circle;
circle.arc = arc;
circle.site = cSite;
circle.x = x + bx;
circle.y = (circle.cy = y + by) + Math.sqrt(x * x + y * y); // y bottom
arc.circle = circle;
var before = null,
node = circles._;
while (node) {
if (circle.y < node.y || (circle.y === node.y && circle.x <= node.x)) {
if (node.L) node = node.L;
else { before = node.P; break; }
} else {
if (node.R) node = node.R;
else { before = node; break; }
}
}
circles.insert(before, circle);
if (!before) firstCircle = circle;
}
function detachCircle(arc) {
var circle = arc.circle;
if (circle) {
if (!circle.P) firstCircle = circle.N;
circles.remove(circle);
circlePool.push(circle);
RedBlackNode(circle);
arc.circle = null;
}
}
var beachPool = [];
function Beach() {
RedBlackNode(this);
this.edge =
this.site =
this.circle = null;
}
function createBeach(site) {
var beach = beachPool.pop() || new Beach;
beach.site = site;
return beach;
}
function detachBeach(beach) {
detachCircle(beach);
beaches.remove(beach);
beachPool.push(beach);
RedBlackNode(beach);
}
function removeBeach(beach) {
var circle = beach.circle,
x = circle.x,
y = circle.cy,
vertex = [x, y],
previous = beach.P,
next = beach.N,
disappearing = [beach];
detachBeach(beach);
var lArc = previous;
while (lArc.circle
&& Math.abs(x - lArc.circle.x) < epsilon$4
&& Math.abs(y - lArc.circle.cy) < epsilon$4) {
previous = lArc.P;
disappearing.unshift(lArc);
detachBeach(lArc);
lArc = previous;
}
disappearing.unshift(lArc);
detachCircle(lArc);
var rArc = next;
while (rArc.circle
&& Math.abs(x - rArc.circle.x) < epsilon$4
&& Math.abs(y - rArc.circle.cy) < epsilon$4) {
next = rArc.N;
disappearing.push(rArc);
detachBeach(rArc);
rArc = next;
}
disappearing.push(rArc);
detachCircle(rArc);
var nArcs = disappearing.length,
iArc;
for (iArc = 1; iArc < nArcs; ++iArc) {
rArc = disappearing[iArc];
lArc = disappearing[iArc - 1];
setEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex);
}
lArc = disappearing[0];
rArc = disappearing[nArcs - 1];
rArc.edge = createEdge(lArc.site, rArc.site, null, vertex);
attachCircle(lArc);
attachCircle(rArc);
}
function addBeach(site) {
var x = site[0],
directrix = site[1],
lArc,
rArc,
dxl,
dxr,
node = beaches._;
while (node) {
dxl = leftBreakPoint(node, directrix) - x;
if (dxl > epsilon$4) node = node.L; else {
dxr = x - rightBreakPoint(node, directrix);
if (dxr > epsilon$4) {
if (!node.R) {
lArc = node;
break;
}
node = node.R;
} else {
if (dxl > -epsilon$4) {
lArc = node.P;
rArc = node;
} else if (dxr > -epsilon$4) {
lArc = node;
rArc = node.N;
} else {
lArc = rArc = node;
}
break;
}
}
}
createCell(site);
var newArc = createBeach(site);
beaches.insert(lArc, newArc);
if (!lArc && !rArc) return;
if (lArc === rArc) {
detachCircle(lArc);
rArc = createBeach(lArc.site);
beaches.insert(newArc, rArc);
newArc.edge = rArc.edge = createEdge(lArc.site, newArc.site);
attachCircle(lArc);
attachCircle(rArc);
return;
}
if (!rArc) { // && lArc
newArc.edge = createEdge(lArc.site, newArc.site);
return;
}
// else lArc !== rArc
detachCircle(lArc);
detachCircle(rArc);
var lSite = lArc.site,
ax = lSite[0],
ay = lSite[1],
bx = site[0] - ax,
by = site[1] - ay,
rSite = rArc.site,
cx = rSite[0] - ax,
cy = rSite[1] - ay,
d = 2 * (bx * cy - by * cx),
hb = bx * bx + by * by,
hc = cx * cx + cy * cy,
vertex = [(cy * hb - by * hc) / d + ax, (bx * hc - cx * hb) / d + ay];
setEdgeEnd(rArc.edge, lSite, rSite, vertex);
newArc.edge = createEdge(lSite, site, null, vertex);
rArc.edge = createEdge(site, rSite, null, vertex);
attachCircle(lArc);
attachCircle(rArc);
}
function leftBreakPoint(arc, directrix) {
var site = arc.site,
rfocx = site[0],
rfocy = site[1],
pby2 = rfocy - directrix;
if (!pby2) return rfocx;
var lArc = arc.P;
if (!lArc) return -Infinity;
site = lArc.site;
var lfocx = site[0],
lfocy = site[1],
plby2 = lfocy - directrix;
if (!plby2) return lfocx;
var hl = lfocx - rfocx,
aby2 = 1 / pby2 - 1 / plby2,
b = hl / plby2;
if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx;
return (rfocx + lfocx) / 2;
}
function rightBreakPoint(arc, directrix) {
var rArc = arc.N;
if (rArc) return leftBreakPoint(rArc, directrix);
var site = arc.site;
return site[1] === directrix ? site[0] : Infinity;
}
var epsilon$4 = 1e-6;
var epsilon2$2 = 1e-12;
var beaches;
var cells;
var circles;
var edges;
function triangleArea(a, b, c) {
return (a[0] - c[0]) * (b[1] - a[1]) - (a[0] - b[0]) * (c[1] - a[1]);
}
function lexicographic(a, b) {
return b[1] - a[1]
|| b[0] - a[0];
}
function Diagram(sites, extent) {
var site = sites.sort(lexicographic).pop(),
x,
y,
circle;
edges = [];
cells = new Array(sites.length);
beaches = new RedBlackTree;
circles = new RedBlackTree;
while (true) {
circle = firstCircle;
if (site && (!circle || site[1] < circle.y || (site[1] === circle.y && site[0] < circle.x))) {
if (site[0] !== x || site[1] !== y) {
addBeach(site);
x = site[0], y = site[1];
}
site = sites.pop();
} else if (circle) {
removeBeach(circle.arc);
} else {
break;
}
}
sortCellHalfedges();
if (extent) {
var x0 = +extent[0][0],
y0 = +extent[0][1],
x1 = +extent[1][0],
y1 = +extent[1][1];
clipEdges(x0, y0, x1, y1);
clipCells(x0, y0, x1, y1);
}
this.edges = edges;
this.cells = cells;
beaches =
circles =
edges =
cells = null;
}
Diagram.prototype = {
constructor: Diagram,
polygons: function() {
var edges = this.edges;
return this.cells.map(function(cell) {
var polygon = cell.halfedges.map(function(i) { return cellHalfedgeStart(cell, edges[i]); });
polygon.data = cell.site.data;
return polygon;
});
},
triangles: function() {
var triangles = [],
edges = this.edges;
this.cells.forEach(function(cell, i) {
if (!(m = (halfedges = cell.halfedges).length)) return;
var site = cell.site,
halfedges,
j = -1,
m,
s0,
e1 = edges[halfedges[m - 1]],
s1 = e1.left === site ? e1.right : e1.left;
while (++j < m) {
s0 = s1;
e1 = edges[halfedges[j]];
s1 = e1.left === site ? e1.right : e1.left;
if (s0 && s1 && i < s0.index && i < s1.index && triangleArea(site, s0, s1) < 0) {
triangles.push([site.data, s0.data, s1.data]);
}
}
});
return triangles;
},
links: function() {
return this.edges.filter(function(edge) {
return edge.right;
}).map(function(edge) {
return {
source: edge.left.data,
target: edge.right.data
};
});
},
find: function(x, y, radius) {
var that = this, i0, i1 = that._found || 0, n = that.cells.length, cell;
// Use the previously-found cell, or start with an arbitrary one.
while (!(cell = that.cells[i1])) if (++i1 >= n) return null;
var dx = x - cell.site[0], dy = y - cell.site[1], d2 = dx * dx + dy * dy;
// Traverse the half-edges to find a closer cell, if any.
do {
cell = that.cells[i0 = i1], i1 = null;
cell.halfedges.forEach(function(e) {
var edge = that.edges[e], v = edge.left;
if ((v === cell.site || !v) && !(v = edge.right)) return;
var vx = x - v[0], vy = y - v[1], v2 = vx * vx + vy * vy;
if (v2 < d2) d2 = v2, i1 = v.index;
});
} while (i1 !== null);
that._found = i0;
return radius == null || d2 <= radius * radius ? cell.site : null;
}
};
var voronoi = function() {
var x$$1 = x$4,
y$$1 = y$4,
extent = null;
function voronoi(data) {
return new Diagram(data.map(function(d, i) {
var s = [Math.round(x$$1(d, i, data) / epsilon$4) * epsilon$4, Math.round(y$$1(d, i, data) / epsilon$4) * epsilon$4];
s.index = i;
s.data = d;
return s;
}), extent);
}
voronoi.polygons = function(data) {
return voronoi(data).polygons();
};
voronoi.links = function(data) {
return voronoi(data).links();
};
voronoi.triangles = function(data) {
return voronoi(data).triangles();
};
voronoi.x = function(_) {
return arguments.length ? (x$$1 = typeof _ === "function" ? _ : constant$11(+_), voronoi) : x$$1;
};
voronoi.y = function(_) {
return arguments.length ? (y$$1 = typeof _ === "function" ? _ : constant$11(+_), voronoi) : y$$1;
};
voronoi.extent = function(_) {
return arguments.length ? (extent = _ == null ? null : [[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]], voronoi) : extent && [[extent[0][0], extent[0][1]], [extent[1][0], extent[1][1]]];
};
voronoi.size = function(_) {
return arguments.length ? (extent = _ == null ? null : [[0, 0], [+_[0], +_[1]]], voronoi) : extent && [extent[1][0] - extent[0][0], extent[1][1] - extent[0][1]];
};
return voronoi;
};
var constant$12 = function(x) {
return function() {
return x;
};
};
function ZoomEvent(target, type, transform) {
this.target = target;
this.type = type;
this.transform = transform;
}
function Transform(k, x, y) {
this.k = k;
this.x = x;
this.y = y;
}
Transform.prototype = {
constructor: Transform,
scale: function(k) {
return k === 1 ? this : new Transform(this.k * k, this.x, this.y);
},
translate: function(x, y) {
return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y);
},
apply: function(point) {
return [point[0] * this.k + this.x, point[1] * this.k + this.y];
},
applyX: function(x) {
return x * this.k + this.x;
},
applyY: function(y) {
return y * this.k + this.y;
},
invert: function(location) {
return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];
},
invertX: function(x) {
return (x - this.x) / this.k;
},
invertY: function(y) {
return (y - this.y) / this.k;
},
rescaleX: function(x) {
return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x));
},
rescaleY: function(y) {
return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y));
},
toString: function() {
return "translate(" + this.x + "," + this.y + ") scale(" + this.k + ")";
}
};
var identity$8 = new Transform(1, 0, 0);
transform$1.prototype = Transform.prototype;
function transform$1(node) {
return node.__zoom || identity$8;
}
function nopropagation$2() {
exports.event.stopImmediatePropagation();
}
var noevent$2 = function() {
exports.event.preventDefault();
exports.event.stopImmediatePropagation();
};
// Ignore right-click, since that should open the context menu.
function defaultFilter$2() {
return !exports.event.button;
}
function defaultExtent$1() {
var e = this, w, h;
if (e instanceof SVGElement) {
e = e.ownerSVGElement || e;
w = e.width.baseVal.value;
h = e.height.baseVal.value;
} else {
w = e.clientWidth;
h = e.clientHeight;
}
return [[0, 0], [w, h]];
}
function defaultTransform() {
return this.__zoom || identity$8;
}
var zoom = function() {
var filter = defaultFilter$2,
extent = defaultExtent$1,
k0 = 0,
k1 = Infinity,
x0 = -k1,
x1 = k1,
y0 = x0,
y1 = x1,
duration = 250,
interpolate$$1 = interpolateZoom,
gestures = [],
listeners = dispatch("start", "zoom", "end"),
touchstarting,
touchending,
touchDelay = 500,
wheelDelay = 150;
function zoom(selection$$1) {
selection$$1
.on("wheel.zoom", wheeled)
.on("mousedown.zoom", mousedowned)
.on("dblclick.zoom", dblclicked)
.on("touchstart.zoom", touchstarted)
.on("touchmove.zoom", touchmoved)
.on("touchend.zoom touchcancel.zoom", touchended)
.style("-webkit-tap-highlight-color", "rgba(0,0,0,0)")
.property("__zoom", defaultTransform);
}
zoom.transform = function(collection, transform) {
var selection$$1 = collection.selection ? collection.selection() : collection;
selection$$1.property("__zoom", defaultTransform);
if (collection !== selection$$1) {
schedule(collection, transform);
} else {
selection$$1.interrupt().each(function() {
gesture(this, arguments)
.start()
.zoom(null, typeof transform === "function" ? transform.apply(this, arguments) : transform)
.end();
});
}
};
zoom.scaleBy = function(selection$$1, k) {
zoom.scaleTo(selection$$1, function() {
var k0 = this.__zoom.k,
k1 = typeof k === "function" ? k.apply(this, arguments) : k;
return k0 * k1;
});
};
zoom.scaleTo = function(selection$$1, k) {
zoom.transform(selection$$1, function() {
var e = extent.apply(this, arguments),
t0 = this.__zoom,
p0 = centroid(e),
p1 = t0.invert(p0),
k1 = typeof k === "function" ? k.apply(this, arguments) : k;
return constrain(translate(scale(t0, k1), p0, p1), e);
});
};
zoom.translateBy = function(selection$$1, x, y) {
zoom.transform(selection$$1, function() {
return constrain(this.__zoom.translate(
typeof x === "function" ? x.apply(this, arguments) : x,
typeof y === "function" ? y.apply(this, arguments) : y
), extent.apply(this, arguments));
});
};
function scale(transform, k) {
k = Math.max(k0, Math.min(k1, k));
return k === transform.k ? transform : new Transform(k, transform.x, transform.y);
}
function translate(transform, p0, p1) {
var x = p0[0] - p1[0] * transform.k, y = p0[1] - p1[1] * transform.k;
return x === transform.x && y === transform.y ? transform : new Transform(transform.k, x, y);
}
function constrain(transform, extent) {
var dx0 = transform.invertX(extent[0][0]) - x0,
dx1 = transform.invertX(extent[1][0]) - x1,
dy0 = transform.invertY(extent[0][1]) - y0,
dy1 = transform.invertY(extent[1][1]) - y1;
return transform.translate(
dx1 > dx0 ? (dx0 + dx1) / 2 : Math.min(0, dx0) || Math.max(0, dx1),
dy1 > dy0 ? (dy0 + dy1) / 2 : Math.min(0, dy0) || Math.max(0, dy1)
);
}
function centroid(extent) {
return [(+extent[0][0] + +extent[1][0]) / 2, (+extent[0][1] + +extent[1][1]) / 2];
}
function schedule(transition$$1, transform, center) {
transition$$1
.on("start.zoom", function() { gesture(this, arguments).start(); })
.on("interrupt.zoom end.zoom", function() { gesture(this, arguments).end(); })
.tween("zoom", function() {
var that = this,
args = arguments,
g = gesture(that, args),
e = extent.apply(that, args),
p = center || centroid(e),
w = Math.max(e[1][0] - e[0][0], e[1][1] - e[0][1]),
a = that.__zoom,
b = typeof transform === "function" ? transform.apply(that, args) : transform,
i = interpolate$$1(a.invert(p).concat(w / a.k), b.invert(p).concat(w / b.k));
return function(t) {
if (t === 1) t = b; // Avoid rounding error on end.
else { var l = i(t), k = w / l[2]; t = new Transform(k, p[0] - l[0] * k, p[1] - l[1] * k); }
g.zoom(null, t);
};
});
}
function gesture(that, args) {
for (var i = 0, n = gestures.length, g; i < n; ++i) {
if ((g = gestures[i]).that === that) {
return g;
}
}
return new Gesture(that, args);
}
function Gesture(that, args) {
this.that = that;
this.args = args;
this.index = -1;
this.active = 0;
this.extent = extent.apply(that, args);
}
Gesture.prototype = {
start: function() {
if (++this.active === 1) {
this.index = gestures.push(this) - 1;
this.emit("start");
}
return this;
},
zoom: function(key, transform) {
if (this.mouse && key !== "mouse") this.mouse[1] = transform.invert(this.mouse[0]);
if (this.touch0 && key !== "touch") this.touch0[1] = transform.invert(this.touch0[0]);
if (this.touch1 && key !== "touch") this.touch1[1] = transform.invert(this.touch1[0]);
this.that.__zoom = transform;
this.emit("zoom");
return this;
},
end: function() {
if (--this.active === 0) {
gestures.splice(this.index, 1);
this.index = -1;
this.emit("end");
}
return this;
},
emit: function(type) {
customEvent(new ZoomEvent(zoom, type, this.that.__zoom), listeners.apply, listeners, [type, this.that, this.args]);
}
};
function wheeled() {
if (!filter.apply(this, arguments)) return;
var g = gesture(this, arguments),
t = this.__zoom,
k = Math.max(k0, Math.min(k1, t.k * Math.pow(2, -exports.event.deltaY * (exports.event.deltaMode ? 120 : 1) / 500))),
p = mouse(this);
// If the mouse is in the same location as before, reuse it.
// If there were recent wheel events, reset the wheel idle timeout.
if (g.wheel) {
if (g.mouse[0][0] !== p[0] || g.mouse[0][1] !== p[1]) {
g.mouse[1] = t.invert(g.mouse[0] = p);
}
clearTimeout(g.wheel);
}
// If this wheel event won’t trigger a transform change, ignore it.
else if (t.k === k) return;
// Otherwise, capture the mouse point and location at the start.
else {
g.mouse = [p, t.invert(p)];
interrupt(this);
g.start();
}
noevent$2();
g.wheel = setTimeout(wheelidled, wheelDelay);
g.zoom("mouse", constrain(translate(scale(t, k), g.mouse[0], g.mouse[1]), g.extent));
function wheelidled() {
g.wheel = null;
g.end();
}
}
function mousedowned() {
if (touchending || !filter.apply(this, arguments)) return;
var g = gesture(this, arguments),
v = select(exports.event.view).on("mousemove.zoom", mousemoved, true).on("mouseup.zoom", mouseupped, true),
p = mouse(this);
dragDisable(exports.event.view);
nopropagation$2();
g.mouse = [p, this.__zoom.invert(p)];
interrupt(this);
g.start();
function mousemoved() {
noevent$2();
g.moved = true;
g.zoom("mouse", constrain(translate(g.that.__zoom, g.mouse[0] = mouse(g.that), g.mouse[1]), g.extent));
}
function mouseupped() {
v.on("mousemove.zoom mouseup.zoom", null);
yesdrag(exports.event.view, g.moved);
noevent$2();
g.end();
}
}
function dblclicked() {
if (!filter.apply(this, arguments)) return;
var t0 = this.__zoom,
p0 = mouse(this),
p1 = t0.invert(p0),
k1 = t0.k * (exports.event.shiftKey ? 0.5 : 2),
t1 = constrain(translate(scale(t0, k1), p0, p1), extent.apply(this, arguments));
noevent$2();
if (duration > 0) select(this).transition().duration(duration).call(schedule, t1, p0);
else select(this).call(zoom.transform, t1);
}
function touchstarted() {
if (!filter.apply(this, arguments)) return;
var g = gesture(this, arguments),
touches$$1 = exports.event.changedTouches,
started,
n = touches$$1.length, i, t, p;
nopropagation$2();
for (i = 0; i < n; ++i) {
t = touches$$1[i], p = touch(this, touches$$1, t.identifier);
p = [p, this.__zoom.invert(p), t.identifier];
if (!g.touch0) g.touch0 = p, started = true;
else if (!g.touch1) g.touch1 = p;
}
// If this is a dbltap, reroute to the (optional) dblclick.zoom handler.
if (touchstarting) {
touchstarting = clearTimeout(touchstarting);
if (!g.touch1) {
g.end();
p = select(this).on("dblclick.zoom");
if (p) p.apply(this, arguments);
return;
}
}
if (started) {
touchstarting = setTimeout(function() { touchstarting = null; }, touchDelay);
interrupt(this);
g.start();
}
}
function touchmoved() {
var g = gesture(this, arguments),
touches$$1 = exports.event.changedTouches,
n = touches$$1.length, i, t, p, l;
noevent$2();
if (touchstarting) touchstarting = clearTimeout(touchstarting);
for (i = 0; i < n; ++i) {
t = touches$$1[i], p = touch(this, touches$$1, t.identifier);
if (g.touch0 && g.touch0[2] === t.identifier) g.touch0[0] = p;
else if (g.touch1 && g.touch1[2] === t.identifier) g.touch1[0] = p;
}
t = g.that.__zoom;
if (g.touch1) {
var p0 = g.touch0[0], l0 = g.touch0[1],
p1 = g.touch1[0], l1 = g.touch1[1],
dp = (dp = p1[0] - p0[0]) * dp + (dp = p1[1] - p0[1]) * dp,
dl = (dl = l1[0] - l0[0]) * dl + (dl = l1[1] - l0[1]) * dl;
t = scale(t, Math.sqrt(dp / dl));
p = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2];
l = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2];
}
else if (g.touch0) p = g.touch0[0], l = g.touch0[1];
else return;
g.zoom("touch", constrain(translate(t, p, l), g.extent));
}
function touchended() {
var g = gesture(this, arguments),
touches$$1 = exports.event.changedTouches,
n = touches$$1.length, i, t;
nopropagation$2();
if (touchending) clearTimeout(touchending);
touchending = setTimeout(function() { touchending = null; }, touchDelay);
for (i = 0; i < n; ++i) {
t = touches$$1[i];
if (g.touch0 && g.touch0[2] === t.identifier) delete g.touch0;
else if (g.touch1 && g.touch1[2] === t.identifier) delete g.touch1;
}
if (g.touch1 && !g.touch0) g.touch0 = g.touch1, delete g.touch1;
if (!g.touch0) g.end();
}
zoom.filter = function(_) {
return arguments.length ? (filter = typeof _ === "function" ? _ : constant$12(!!_), zoom) : filter;
};
zoom.extent = function(_) {
return arguments.length ? (extent = typeof _ === "function" ? _ : constant$12([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), zoom) : extent;
};
zoom.scaleExtent = function(_) {
return arguments.length ? (k0 = +_[0], k1 = +_[1], zoom) : [k0, k1];
};
zoom.translateExtent = function(_) {
return arguments.length ? (x0 = +_[0][0], x1 = +_[1][0], y0 = +_[0][1], y1 = +_[1][1], zoom) : [[x0, y0], [x1, y1]];
};
zoom.duration = function(_) {
return arguments.length ? (duration = +_, zoom) : duration;
};
zoom.interpolate = function(_) {
return arguments.length ? (interpolate$$1 = _, zoom) : interpolate$$1;
};
zoom.on = function() {
var value = listeners.on.apply(listeners, arguments);
return value === listeners ? zoom : value;
};
return zoom;
};
var array$3 = Array.prototype;
var slice$6 = array$3.slice;
var ascending$3 = function(a, b) {
return a - b;
};
var area$3 = function(ring) {
var i = 0, n = ring.length, area = ring[n - 1][1] * ring[0][0] - ring[n - 1][0] * ring[0][1];
while (++i < n) area += ring[i - 1][1] * ring[i][0] - ring[i - 1][0] * ring[i][1];
return area;
};
var constant$13 = function(x) {
return function() {
return x;
};
};
var contains$2 = function(ring, hole) {
var i = -1, n = hole.length, c;
while (++i < n) if (c = ringContains(ring, hole[i])) return c;
return 0;
};
function ringContains(ring, point) {
var x = point[0], y = point[1], contains = -1;
for (var i = 0, n = ring.length, j = n - 1; i < n; j = i++) {
var pi = ring[i], xi = pi[0], yi = pi[1], pj = ring[j], xj = pj[0], yj = pj[1];
if (segmentContains(pi, pj, point)) return 0;
if (((yi > y) !== (yj > y)) && ((x < (xj - xi) * (y - yi) / (yj - yi) + xi))) contains = -contains;
}
return contains;
}
function segmentContains(a, b, c) {
var i; return collinear(a, b, c) && within(a[i = +(a[0] === b[0])], c[i], b[i]);
}
function collinear(a, b, c) {
return (b[0] - a[0]) * (c[1] - a[1]) === (c[0] - a[0]) * (b[1] - a[1]);
}
function within(p, q, r) {
return p <= q && q <= r || r <= q && q <= p;
}
var noop$3 = function() {};
var cases = [
[],
[[[1,1.5],[0.5,1]]],
[[[1.5,1],[1,1.5]]],
[[[1.5,1],[0.5,1]]],
[[[1,0.5],[1.5,1]]],
[[[1,0.5],[0.5,1]],[[1,1.5],[1.5,1]]],
[[[1,0.5],[1,1.5]]],
[[[1,0.5],[0.5,1]]],
[[[0.5,1],[1,0.5]]],
[[[1,1.5],[1,0.5]]],
[[[0.5,1],[1,1.5]],[[1.5,1],[1,0.5]]],
[[[1.5,1],[1,0.5]]],
[[[0.5,1],[1.5,1]]],
[[[1,1.5],[1.5,1]]],
[[[0.5,1],[1,1.5]]],
[]
];
var contours = function() {
var dx = 1,
dy = 1,
threshold = thresholdSturges,
smooth = smoothLinear;
function contours(values) {
var tz = threshold(values);
// Convert number of thresholds into uniform thresholds.
if (!Array.isArray(tz)) {
var domain = extent(values), start = domain[0], stop = domain[1];
tz = tickStep(start, stop, tz);
tz = range(Math.floor(start / tz) * tz, Math.floor(stop / tz) * tz, tz);
} else {
tz = tz.slice().sort(ascending$3);
}
// Accumulate, smooth contour rings, assign holes to exterior rings.
// Based on https://github.com/mbostock/shapefile/blob/v0.6.2/shp/polygon.js
var layers = tz.map(function(value) {
var polygons = [],
holes = [];
isorings(values, value, function(ring) {
smooth(ring, values, value);
if (area$3(ring) > 0) polygons.push([ring]);
else holes.push(ring);
});
holes.forEach(function(hole) {
for (var i = 0, n = polygons.length, polygon; i < n; ++i) {
if (contains$2((polygon = polygons[i])[0], hole)) {
polygon.push(hole);
return;
}
}
});
return polygons;
});
return layers.map(function(polygons, i) {
return {
type: "MultiPolygon",
value: tz[i],
coordinates: polygons
};
});
}
// Marching squares with isolines stitched into rings.
// Based on https://github.com/topojson/topojson-client/blob/v3.0.0/src/stitch.js
function isorings(values, value, callback) {
var fragmentByStart = new Array,
fragmentByEnd = new Array,
x, y, t0, t1, t2, t3;
// Special case for the first row (y = -1, t2 = t3 = 0).
x = y = -1;
t1 = values[0] >= value;
cases[t1 << 1].forEach(stitch);
while (++x < dx - 1) {
t0 = t1, t1 = values[x + 1] >= value;
cases[t0 | t1 << 1].forEach(stitch);
}
cases[t1 << 0].forEach(stitch);
// General case for the intermediate rows.
while (++y < dy - 1) {
x = -1;
t1 = values[y * dx + dx] >= value;
t2 = values[y * dx] >= value;
cases[t1 << 1 | t2 << 2].forEach(stitch);
while (++x < dx - 1) {
t0 = t1, t1 = values[y * dx + dx + x + 1] >= value;
t3 = t2, t2 = values[y * dx + x + 1] >= value;
cases[t0 | t1 << 1 | t2 << 2 | t3 << 3].forEach(stitch);
}
cases[t1 | t2 << 3].forEach(stitch);
}
// Special case for the last row (y = dy - 1, t0 = t1 = 0).
x = -1;
t2 = values[y * dx] >= value;
cases[t2 << 2].forEach(stitch);
while (++x < dx - 1) {
t3 = t2, t2 = values[y * dx + x + 1] >= value;
cases[t2 << 2 | t3 << 3].forEach(stitch);
}
cases[t2 << 3].forEach(stitch);
function stitch(line) {
var start = [line[0][0] + x, line[0][1] + y],
end = [line[1][0] + x, line[1][1] + y],
startIndex = index(start),
endIndex = index(end),
f, g;
if (f = fragmentByEnd[startIndex]) {
if (g = fragmentByStart[endIndex]) {
delete fragmentByEnd[f.end];
delete fragmentByStart[g.start];
if (f === g) {
f.ring.push(end);
callback(f.ring);
} else {
fragmentByStart[f.start] = fragmentByEnd[g.end] = {start: f.start, end: g.end, ring: f.ring.concat(g.ring)};
}
} else {
delete fragmentByEnd[f.end];
f.ring.push(end);
fragmentByEnd[f.end = endIndex] = f;
}
} else if (f = fragmentByStart[endIndex]) {
if (g = fragmentByEnd[startIndex]) {
delete fragmentByStart[f.start];
delete fragmentByEnd[g.end];
if (f === g) {
f.ring.push(end);
callback(f.ring);
} else {
fragmentByStart[g.start] = fragmentByEnd[f.end] = {start: g.start, end: f.end, ring: g.ring.concat(f.ring)};
}
} else {
delete fragmentByStart[f.start];
f.ring.unshift(start);
fragmentByStart[f.start = startIndex] = f;
}
} else {
fragmentByStart[startIndex] = fragmentByEnd[endIndex] = {start: startIndex, end: endIndex, ring: [start, end]};
}
}
}
function index(point) {
return point[0] * 2 + point[1] * (dx + 1) * 4;
}
function smoothLinear(ring, values, value) {
ring.forEach(function(point) {
var x = point[0],
y = point[1],
xt = x | 0,
yt = y | 0,
v0,
v1 = values[yt * dx + xt];
if (x > 0 && x < dx && xt === x) {
v0 = values[yt * dx + xt - 1];
point[0] = x + (value - v0) / (v1 - v0) - 0.5;
}
if (y > 0 && y < dy && yt === y) {
v0 = values[(yt - 1) * dx + xt];
point[1] = y + (value - v0) / (v1 - v0) - 0.5;
}
});
}
contours.size = function(_) {
if (!arguments.length) return [dx, dy];
var _0 = Math.ceil(_[0]), _1 = Math.ceil(_[1]);
if (!(_0 > 0) || !(_1 > 0)) throw new Error("invalid size");
return dx = _0, dy = _1, contours;
};
contours.thresholds = function(_) {
return arguments.length ? (threshold = typeof _ === "function" ? _ : Array.isArray(_) ? constant$13(slice$6.call(_)) : constant$13(_), contours) : threshold;
};
contours.smooth = function(_) {
return arguments.length ? (smooth = _ ? smoothLinear : noop$3, contours) : smooth === smoothLinear;
};
return contours;
};
// TODO Optimize edge cases.
// TODO Optimize index calculation.
// TODO Optimize arguments.
function blurX(source, target, r) {
var n = source.width,
m = source.height,
w = (r << 1) + 1;
for (var j = 0; j < m; ++j) {
for (var i = 0, sr = 0; i < n + r; ++i) {
if (i < n) {
sr += source.data[i + j * n];
}
if (i >= r) {
if (i >= w) {
sr -= source.data[i - w + j * n];
}
target.data[i - r + j * n] = sr / Math.min(i + 1, n - 1 + w - i, w);
}
}
}
}
// TODO Optimize edge cases.
// TODO Optimize index calculation.
// TODO Optimize arguments.
function blurY(source, target, r) {
var n = source.width,
m = source.height,
w = (r << 1) + 1;
for (var i = 0; i < n; ++i) {
for (var j = 0, sr = 0; j < m + r; ++j) {
if (j < m) {
sr += source.data[i + j * n];
}
if (j >= r) {
if (j >= w) {
sr -= source.data[i + (j - w) * n];
}
target.data[i + (j - r) * n] = sr / Math.min(j + 1, m - 1 + w - j, w);
}
}
}
}
function defaultX$1(d) {
return d[0];
}
function defaultY$1(d) {
return d[1];
}
var density = function() {
var x = defaultX$1,
y = defaultY$1,
dx = 960,
dy = 500,
r = 20, // blur radius
k = 2, // log2(grid cell size)
o = r * 3, // grid offset, to pad for blur
n = (dx + o * 2) >> k, // grid width
m = (dy + o * 2) >> k, // grid height
threshold = constant$13(20);
function density(data) {
var values0 = new Float32Array(n * m),
values1 = new Float32Array(n * m);
data.forEach(function(d, i, data) {
var xi = (x(d, i, data) + o) >> k,
yi = (y(d, i, data) + o) >> k;
if (xi >= 0 && xi < n && yi >= 0 && yi < m) {
++values0[xi + yi * n];
}
});
// TODO Optimize.
blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k);
blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k);
blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k);
blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k);
blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k);
blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k);
var tz = threshold(values0);
// Convert number of thresholds into uniform thresholds.
if (!Array.isArray(tz)) {
var stop = max(values0);
tz = tickStep(0, stop, tz);
tz = range(0, Math.floor(stop / tz) * tz, tz);
tz.shift();
}
return contours()
.thresholds(tz)
.size([n, m])
(values0)
.map(transform);
}
function transform(geometry) {
geometry.value *= Math.pow(2, -2 * k); // Density in points per square pixel.
geometry.coordinates.forEach(transformPolygon);
return geometry;
}
function transformPolygon(coordinates) {
coordinates.forEach(transformRing);
}
function transformRing(coordinates) {
coordinates.forEach(transformPoint);
}
// TODO Optimize.
function transformPoint(coordinates) {
coordinates[0] = coordinates[0] * Math.pow(2, k) - o;
coordinates[1] = coordinates[1] * Math.pow(2, k) - o;
}
function resize() {
o = r * 3;
n = (dx + o * 2) >> k;
m = (dy + o * 2) >> k;
return density;
}
density.x = function(_) {
return arguments.length ? (x = typeof _ === "function" ? _ : constant$13(+_), density) : x;
};
density.y = function(_) {
return arguments.length ? (y = typeof _ === "function" ? _ : constant$13(+_), density) : y;
};
density.size = function(_) {
if (!arguments.length) return [dx, dy];
var _0 = Math.ceil(_[0]), _1 = Math.ceil(_[1]);
if (!(_0 >= 0) && !(_0 >= 0)) throw new Error("invalid size");
return dx = _0, dy = _1, resize();
};
density.cellSize = function(_) {
if (!arguments.length) return 1 << k;
if (!((_ = +_) >= 1)) throw new Error("invalid cell size");
return k = Math.floor(Math.log(_) / Math.LN2), resize();
};
density.thresholds = function(_) {
return arguments.length ? (threshold = typeof _ === "function" ? _ : Array.isArray(_) ? constant$13(slice$6.call(_)) : constant$13(_), density) : threshold;
};
density.bandwidth = function(_) {
if (!arguments.length) return Math.sqrt(r * (r + 1));
if (!((_ = +_) >= 0)) throw new Error("invalid bandwidth");
return r = Math.round((Math.sqrt(4 * _ * _ + 1) - 1) / 2), resize();
};
return density;
};
var translateSelection = function(xy) {
return this.attr('transform', function(d,i) {
return 'translate('+[typeof xy == 'function' ? xy.call(this, d,i) : xy]+')';
});
};
var parseAttributes = function(name) {
if (typeof name === "string") {
var attr = {},
parts = name.split(/([\.#])/g), p;
name = parts.shift();
while ((p = parts.shift())) {
if (p == '.') attr['class'] = attr['class'] ? attr['class'] + ' ' + parts.shift() : parts.shift();
else if (p == '#') attr.id = parts.shift();
}
return {tag: name, attr: attr};
}
return name;
};
var append = function(name) {
var n = parseAttributes(name), s;
name = creator(n.tag);
s = this.select(function() {
return this.appendChild(name.apply(this, arguments));
});
//attrs not provided by default in v4
for (var key in n.attr) { s.attr(key, n.attr[key]); }
return s;
};
function constantNull$1() {
return null;
}
var insert = function(name, before) {
var n = parseAttributes(name),
create = creator(n.tag),
select$$1 = before == null ? constantNull$1 : typeof before === "function" ? before : selector(before);
var s = this.select(function() {
return this.insertBefore(create.apply(this, arguments), select$$1.apply(this, arguments) || null);
});
//attrs not provided by default in v4
for (var key in n.attr) { s.attr(key, n.attr[key]); }
return s;
};
var parent = function() {
var parents = [];
return this.filter(function() {
if (parents.indexOf(this.parentNode) > -1) return false;
parents.push(this.parentNode);
return true;
}).select(function() {
return this.parentNode;
});
};
var selectAppend = function(name) {
var select$$1 = selector(name),
n = parseAttributes(name), s;
name = creator(n.tag);
s = this.select(function() {
return select$$1.apply(this, arguments) ||
this.appendChild(name.apply(this, arguments));
});
//attrs not provided by default in v4
for (var key in n.attr) { s.attr(key, n.attr[key]); }
return s;
};
var tspans = function(lines, lh) {
return this.selectAll('tspan')
.data(function(d) {
return (typeof(lines) == 'function' ? lines(d) : lines)
.map(function(l) {
return { line: l, parent: d };
});
})
.enter()
.append('tspan')
.text(function(d) { return d.line; })
.attr('x', 0)
.attr('dy', function(d, i) { return i ? (typeof(lh) == 'function' ? lh(d.parent, d.line, i) : lh) || 15 : 0; });
};
var appendMany = function(data, name){
return this.selectAll(null).data(data).enter().append(name);
};
var at = function(name, value) {
if (typeof(name) == 'object'){
for (var key in name){
this.attr(key.replace(/([a-z\d])([A-Z])/g, '$1-$2').toLowerCase(), name[key]);
}
return this;
} else{
return arguments.length == 1 ? this.attr(name) : this.attr(name, value);
}
};
function f(){
var functions = arguments;
//convert all string arguments into field accessors
var i = 0, l = functions.length;
while (i < l) {
if (typeof(functions[i]) === 'string' || typeof(functions[i]) === 'number'){
functions[i] = (function(str){ return function(d){ return d[str]; }; })(functions[i]);
}
i++;
}
//return composition of functions
return function(d) {
var i=0, l = functions.length;
while (i++ < l) d = functions[i-1].call(this, d);
return d;
};
}
f.not = function(d){ return !d; };
f.run = function(d){ return d(); };
f.objToFn = function(obj, defaultVal){
if (arguments.length == 1) defaultVal = undefined;
return function(str){
return typeof(obj[str]) !== undefined ? obj[str] : defaultVal;
};
};
var st = function(name, value) {
if (typeof(name) == 'object'){
for (var key in name){
addStyle(this, key, name[key]);
}
return this;
} else {
return arguments.length == 1 ? this.style(name) : addStyle(this, name, value);
}
function addStyle(sel, style, value){
style = style.replace(/([a-z\d])([A-Z])/g, '$1-$2').toLowerCase();
var pxStyles = 'top left bottom right padding-top padding-left padding-bottom padding-right border-top b-width border-left-width border-botto-width m border-right-width margin-top margin-left margin-bottom margin-right font-size width height stroke-width line-height margin padding border max-width min-width';
if (~pxStyles.indexOf(style) ){
sel.style(style, typeof value == 'function' ? f(value, addPx) : addPx(value));
} else{
sel.style(style, value);
}
return sel;
}
function addPx(d){ return d.match ? d : d + 'px'; }
};
// while this might not be reprentative for all fonts, it is
// still better than assuming every character has the same width
// (set monospace=true if you want to bypass this)
var CHAR_W = {
A:7,a:7,B:8,b:7,C:8,c:6,D:9,d:7,E:7,e:7,F:7,f:4,G:9,g:7,H:9,h:7,I:3,i:3,J:5,j:3,K:8,k:6,L:7,l:3,M:11,
m:11,N:9,n:7,O:9,o:7,P:8,p:7,Q:9,q:7,R:8,r:4,S:8,s:6,T:7,t:4,U:9,u:7,V:7,v:6,W:11,w:9,X:7,x:6,Y:7,y:6,Z:7,z:5,
'.':2,',':2,':':2,';':2
};
var wordwrap = function(line, maxCharactersPerLine, minCharactersPerLine, monospace) {
var l, lines = [], w = [], words = [], w1, maxChars, minChars, maxLineW, minLineW;
w1 = line.split(' ');
w1.forEach(function(s, i) {
var w2 = s.split('-');
if (w2.length > 1) {
w2.forEach(function(t, j) {
w.push(t + (j < w2.length - 1 ? '-' : ''));
});
} else {
w.push(s + (i < w1.length - 1 ? ' ' : ''));
}
});
maxChars = maxCharactersPerLine || 40;
minChars = minCharactersPerLine || Math.max(3, Math.min(maxChars * 0.5, 0.75 * w.map(word_len).sort(num_asc)[Math.round(w.length / 2)]));
maxLineW = maxChars * CHAR_W.a;
minLineW = minChars * CHAR_W.a;
l = 0;
w.forEach(function(d) {
var ww = sum(d.split('').map(char_w));
if (l + ww > maxLineW && l > minLineW) {
lines.push(words.join(''));
words.length = 0;
l = 0;
}
l += ww;
return words.push(d);
});
if (words.length) {
lines.push(words.join(''));
}
return lines.filter(function(d) {
return d !== '';
});
function char_w(c) { return !monospace && CHAR_W[c] || CHAR_W.a; }
function word_len(d) { return d.length; }
function num_asc(a, b) { return a - b; }
};
var ascendingKey = function(key) {
return typeof key == 'function' ? function (a, b) {
return key(a) < key(b) ? -1 : key(a) > key(b) ? 1 : key(a) >= key(b) ? 0 : NaN;
} : function (a, b) {
return a[key] < b[key] ? -1 : a[key] > b[key] ? 1 : a[key] >= b[key] ? 0 : NaN;
};
};
var descendingKey = function(key) {
return typeof key == 'function' ? function (a, b) {
return key(b) < key(a) ? -1 : key(b) > key(a) ? 1 : key(b) >= key(a) ? 0 : NaN;
} : function (a, b) {
return b[key] < a[key] ? -1 : b[key] > a[key] ? 1 : b[key] >= a[key] ? 0 : NaN;
};
};
var conventions = function(c){
c = c || {};
c.margin = c.margin || {top: 20, right: 20, bottom: 20, left: 20}
;['top', 'right', 'bottom', 'left'].forEach(function(d){
if (!c.margin[d] && c.margin[d] != 0) c.margin[d] = 20 ;
});
c.width = c.width || c.totalWidth - c.margin.left - c.margin.right || 900;
c.height = c.height || c.totalHeight - c.margin.top - c.margin.bottom || 460;
c.totalWidth = c.width + c.margin.left + c.margin.right;
c.totalHeight = c.height + c.margin.top + c.margin.bottom;
c.parentSel = c.parentSel || select('body');
c.rootsvg = c.parentSel.append('svg');
c.svg = c.rootsvg
.attr('width', c.totalWidth)
.attr('height', c.totalHeight)
.append('g')
.attr('transform', 'translate(' + c.margin.left + ',' + c.margin.top + ')');
c.x = c.x || linear$2().range([0, c.width]);
c.y = c.y || linear$2().range([c.height, 0]);
c.xAxis = c.xAxis || axisBottom().scale(c.x);
c.yAxis = c.yAxis || axisLeft().scale(c.y);
c.drawAxis = function(){
c.svg.append('g')
.attr('class', 'x axis')
.attr('transform', 'translate(0,' + c.height + ')')
.call(c.xAxis);
c.svg.append('g')
.attr('class', 'y axis')
.call(c.yAxis);
};
return c;
};
var attachTooltip = function(sel, tooltipSel, fieldFns){
if (!sel.size()) return;
tooltipSel = tooltipSel || select('.tooltip');
sel
.on('mouseover.attachTooltip', ttDisplay)
.on('mousemove.attachTooltip', ttMove)
.on('mouseout.attachTooltip', ttHide)
.on('click.attachTooltip', function(d){ console.log(d); });
var d = sel.datum();
fieldFns = fieldFns || d3keys(d)
.filter(function(str){
return (typeof d[str] != 'object') && (d[str] != 'array');
})
.map(function(str){
return function(d){ return str + ': <b>' + d[str] + '</b>'; };
});
function ttDisplay(d){
tooltipSel
.classed('tooltip-hidden', false)
.html('')
.appendMany(fieldFns, 'div')
.html(function(fn){ return fn(d); });
select(this).classed('tooltipped', true);
}
function ttMove(d){
var tt = tooltipSel;
if (!tt.size()) return;
var e = exports.event,
x = e.clientX,
y = e.clientY,
n = tt.node(),
nBB = n.getBoundingClientRect(),
doctop = (window.scrollY)? window.scrollY : (document.documentElement && document.documentElement.scrollTop)? document.documentElement.scrollTop : document.body.scrollTop,
topPos = y+doctop-nBB.height-18;
tt.style('top', (topPos < 0 ? 18 + y : topPos)+'px');
tt.style('left', Math.min(Math.max(20, (x-nBB.width/2)), window.innerWidth - nBB.width - 20)+'px');
}
function ttHide(d){
tooltipSel.classed('tooltip-hidden', true);
selectAll('.tooltipped').classed('tooltipped', false);
}
};
var loadData = function(){
var q = queue();
var args = [].slice.call(arguments);
var files = args.slice(0, args.length - 1);
var cb = args[args.length - 1];
files.forEach(function(d){
var type = d.split('.').reverse()[0];
var loadFn = {csv: csv$1, tsv: tsv$1, json: json}[type];
if (!loadFn) return cb(new Error('Invalid type', d));
q.defer(loadFn, d) ;
});
q.awaitAll(cb);
};
var nestBy = function(array, key){
return nest().key(key).entries(array).map(function(d){
d.values.key = d.key;
return d.values;
});
};
var round = function(n, p) {
return p ? Math.round(n * (p = Math.pow(10, p))) / p : Math.round(n);
};
// Clips the specified subject polygon to the specified clip polygon;
// requires the clip polygon to be counterclockwise and convex.
// https://en.wikipedia.org/wiki/Sutherland–Hodgman_algorithm
var polygonClip = function(clip, subject) {
var input,
closed = polygonClosed(subject),
i = -1,
n = clip.length - polygonClosed(clip),
j,
m,
a = clip[n - 1],
b,
c,
d;
while (++i < n) {
input = subject.slice();
subject.length = 0;
b = clip[i];
c = input[(m = input.length - closed) - 1];
j = -1;
while (++j < m) {
d = input[j];
if (polygonInside(d, a, b)) {
if (!polygonInside(c, a, b)) {
subject.push(polygonIntersect(c, d, a, b));
}
subject.push(d);
} else if (polygonInside(c, a, b)) {
subject.push(polygonIntersect(c, d, a, b));
}
c = d;
}
if (closed) subject.push(subject[0]);
a = b;
}
return subject;
};
function polygonInside(p, a, b) {
return (b[0] - a[0]) * (p[1] - a[1]) < (b[1] - a[1]) * (p[0] - a[0]);
}
// Intersect two infinite lines cd and ab.
function polygonIntersect(c, d, a, b) {
var x1 = c[0], x3 = a[0], x21 = d[0] - x1, x43 = b[0] - x3,
y1 = c[1], y3 = a[1], y21 = d[1] - y1, y43 = b[1] - y3,
ua = (x43 * (y1 - y3) - y43 * (x1 - x3)) / (y43 * x21 - x43 * y21);
return [x1 + ua * x21, y1 + ua * y21];
}
// Returns true if the polygon is closed.
function polygonClosed(coordinates) {
var a = coordinates[0],
b = coordinates[coordinates.length - 1];
return !(a[0] - b[0] || a[1] - b[1]);
}
selection.prototype.translate = translateSelection;
transition.prototype.translate = translateSelection;
selection.prototype.append = append;
selection.prototype.insert = insert;
selection.prototype.parent = parent;
selection.prototype.selectAppend = selectAppend;
selection.prototype.tspans = tspans;
selection.prototype.appendMany = appendMany;
selection.prototype.at = at;
selection.prototype.st = st;
transition.prototype.at = at;
transition.prototype.st = st;
selection.prototype.prop = selection.prototype.property;
var abs$2 = Math.abs;
var atan$1 = Math.atan;
var atan2$2 = Math.atan2;
var cos$3 = Math.cos;
var floor$1 = Math.floor;
var max$3 = Math.max;
var min$2 = Math.min;
var sin$3 = Math.sin;
var epsilon$5 = 1e-6;
var epsilon2$3 = 1e-12;
var pi$5 = Math.PI;
var halfPi$4 = pi$5 / 2;
var degrees$2 = 180 / pi$5;
var radians$1 = pi$5 / 180;
function asin$2(x) {
return x > 1 ? halfPi$4 : x < -1 ? -halfPi$4 : Math.asin(x);
}
function acos$2(x) {
return x > 1 ? 0 : x < -1 ? pi$5 : Math.acos(x);
}
function sqrt$3(x) {
return x > 0 ? Math.sqrt(x) : 0;
}
var ginzburgPolyconicRaw = function(a, b, c, d, e, f, g, h) {
if (arguments.length < 8) h = 0;
function forward(lambda, phi) {
if (!phi) return [a * lambda / pi$5, 0];
var phi2 = phi * phi,
xB = a + phi2 * (b + phi2 * (c + phi2 * d)),
yB = phi * (e - 1 + phi2 * (f - h + phi2 * g)),
m = (xB * xB + yB * yB) / (2 * yB),
alpha = lambda * asin$2(xB / m) / pi$5;
return [m * sin$3(alpha), phi * (1 + phi2 * h) + m * (1 - cos$3(alpha))];
}
forward.invert = function(x, y) {
var lambda = pi$5 * x / a,
phi = y,
deltaLambda, deltaPhi, i = 50;
do {
var phi2 = phi * phi,
xB = a + phi2 * (b + phi2 * (c + phi2 * d)),
yB = phi * (e - 1 + phi2 * (f - h + phi2 * g)),
p = xB * xB + yB * yB,
q = 2 * yB,
m = p / q,
m2 = m * m,
dAlphadLambda = asin$2(xB / m) / pi$5,
alpha = lambda * dAlphadLambda,
xB2 = xB * xB,
dxBdPhi = (2 * b + phi2 * (4 * c + phi2 * 6 * d)) * phi,
dyBdPhi = e + phi2 * (3 * f + phi2 * 5 * g),
dpdPhi = 2 * (xB * dxBdPhi + yB * (dyBdPhi - 1)),
dqdPhi = 2 * (dyBdPhi - 1),
dmdPhi = (dpdPhi * q - p * dqdPhi) / (q * q),
cosAlpha = cos$3(alpha),
sinAlpha = sin$3(alpha),
mcosAlpha = m * cosAlpha,
msinAlpha = m * sinAlpha,
dAlphadPhi = ((lambda / pi$5) * (1 / sqrt$3(1 - xB2 / m2)) * (dxBdPhi * m - xB * dmdPhi)) / m2,
fx = msinAlpha - x,
fy = phi * (1 + phi2 * h) + m - mcosAlpha - y,
deltaxDeltaPhi = dmdPhi * sinAlpha + mcosAlpha * dAlphadPhi,
deltaxDeltaLambda = mcosAlpha * dAlphadLambda,
deltayDeltaPhi = 1 + dmdPhi - (dmdPhi * cosAlpha - msinAlpha * dAlphadPhi),
deltayDeltaLambda = msinAlpha * dAlphadLambda,
denominator = deltaxDeltaPhi * deltayDeltaLambda - deltayDeltaPhi * deltaxDeltaLambda;
if (!denominator) break;
lambda -= deltaLambda = (fy * deltaxDeltaPhi - fx * deltayDeltaPhi) / denominator;
phi -= deltaPhi = (fx * deltayDeltaLambda - fy * deltaxDeltaLambda) / denominator;
} while ((abs$2(deltaLambda) > epsilon$5 || abs$2(deltaPhi) > epsilon$5) && --i > 0);
return [lambda, phi];
};
return forward;
};
var ginzburg4Raw = ginzburgPolyconicRaw(2.8284, -1.6988, 0.75432, -0.18071, 1.76003, -0.38914, 0.042555);
var ginzburg5Raw = ginzburgPolyconicRaw(2.583819, -0.835827, 0.170354, -0.038094, 1.543313, -0.411435,0.082742);
var ginzburg6Raw = ginzburgPolyconicRaw(5 / 6 * pi$5, -0.62636, -0.0344, 0, 1.3493, -0.05524, 0, 0.045);
var ginzburg9Raw = ginzburgPolyconicRaw(2.6516, -0.76534, 0.19123, -0.047094, 1.36289, -0.13965,0.031762);
// Returns [sn, cn, dn](u + iv|m).
// Returns [sn, cn, dn, ph](u|m).
// Calculate F(phi+iPsi|m).
// See Abramowitz and Stegun, 17.4.11.
// Calculate F(phi|m) where m = k² = sin²α.
// See Abramowitz and Stegun, 17.6.7.
function interpolateLine(coordinates, m) {
var i = -1,
n = coordinates.length,
p0 = coordinates[0],
p1,
dx,
dy,
resampled = [];
while (++i < n) {
p1 = coordinates[i];
dx = (p1[0] - p0[0]) / m;
dy = (p1[1] - p0[1]) / m;
for (var j = 0; j < m; ++j) resampled.push([p0[0] + j * dx, p0[1] + j * dy]);
p0 = p1;
}
resampled.push(p1);
return resampled;
}
function naturalEarthRaw(lambda, phi) {
var phi2 = phi * phi, phi4 = phi2 * phi2;
return [
lambda * (0.8707 - 0.131979 * phi2 + phi4 * (-0.013791 + phi4 * (0.003971 * phi2 - 0.001529 * phi4))),
phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4)))
];
}
naturalEarthRaw.invert = function(x, y) {
var phi = y, i = 25, delta;
do {
var phi2 = phi * phi, phi4 = phi2 * phi2;
phi -= delta = (phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4))) - y) /
(1.007226 + phi2 * (0.015085 * 3 + phi4 * (-0.044475 * 7 + 0.028874 * 9 * phi2 - 0.005916 * 11 * phi4)));
} while (abs$2(delta) > epsilon$5 && --i > 0);
return [
x / (0.8707 + (phi2 = phi * phi) * (-0.131979 + phi2 * (-0.013791 + phi2 * phi2 * phi2 * (0.003971 - 0.001529 * phi2)))),
phi
];
};
var naturalEarth = function() {
return projection(naturalEarthRaw)
.scale(175.295);
};
// Note: 6-element arrays are used to denote the 3x3 affine transform matrix:
// [a, b, c,
// d, e, f,
// 0, 0, 1] - this redundant row is left out.
// Transform matrix for [a0, a1] -> [b0, b1].
// Inverts a transform matrix.
// Multiplies two 3x2 matrices.
// Creates a polyhedral projection.
// * root: a spanning tree of polygon faces. Nodes are automatically
// augmented with a transform matrix.
// * face: a function that returns the appropriate node for a given {lambda, phi}
// point (radians).
// * r: rotation angle for final polyhedral net. Defaults to -pi / 6 (for
// butterflies).
function outline(stream, node, parent) {
var point,
edges = node.edges,
n = edges.length,
edge,
multiPoint = {type: "MultiPoint", coordinates: node.face},
notPoles = node.face.filter(function(d) { return abs$2(d[1]) !== 90; }),
b = bounds({type: "MultiPoint", coordinates: notPoles}),
inside = false,
j = -1,
dx = b[1][0] - b[0][0];
// TODO
var c = dx === 180 || dx === 360
? [(b[0][0] + b[1][0]) / 2, (b[0][1] + b[1][1]) / 2]
: centroid(multiPoint);
// First find the shared edge…
if (parent) while (++j < n) {
if (edges[j] === parent) break;
}
++j;
for (var i = 0; i < n; ++i) {
edge = edges[(i + j) % n];
if (Array.isArray(edge)) {
if (!inside) {
stream.point((point = interpolate$1(edge[0], c)(epsilon$5))[0], point[1]);
inside = true;
}
stream.point((point = interpolate$1(edge[1], c)(epsilon$5))[0], point[1]);
} else {
inside = false;
if (edge !== parent) outline(stream, edge, node);
}
}
}
// TODO generate on-the-fly to avoid external modification.
var octahedron = [
[0, 90],
[-90, 0], [0, 0], [90, 0], [180, 0],
[0, -90]
];
[
[0, 2, 1],
[0, 3, 2],
[5, 1, 2],
[5, 2, 3],
[0, 1, 4],
[0, 4, 3],
[5, 4, 1],
[5, 3, 4]
].map(function(face) {
return face.map(function(i) {
return octahedron[i];
});
});
var points = [];
var lines = [];
var K = [
[0.9986, -0.062],
[1.0000, 0.0000],
[0.9986, 0.0620],
[0.9954, 0.1240],
[0.9900, 0.1860],
[0.9822, 0.2480],
[0.9730, 0.3100],
[0.9600, 0.3720],
[0.9427, 0.4340],
[0.9216, 0.4958],
[0.8962, 0.5571],
[0.8679, 0.6176],
[0.8350, 0.6769],
[0.7986, 0.7346],
[0.7597, 0.7903],
[0.7186, 0.8435],
[0.6732, 0.8936],
[0.6213, 0.9394],
[0.5722, 0.9761],
[0.5322, 1.0000]
];
K.forEach(function(d) {
d[1] *= 1.0144;
});
function satelliteVerticalRaw(P) {
function forward(lambda, phi) {
var cosPhi = cos$3(phi),
k = (P - 1) / (P - cosPhi * cos$3(lambda));
return [
k * cosPhi * sin$3(lambda),
k * sin$3(phi)
];
}
forward.invert = function(x, y) {
var rho2 = x * x + y * y,
rho = sqrt$3(rho2),
sinc = (P - sqrt$3(1 - rho2 * (P + 1) / (P - 1))) / ((P - 1) / rho + rho / (P - 1));
return [
atan2$2(x * sinc, rho * sqrt$3(1 - sinc * sinc)),
rho ? asin$2(y * sinc / rho) : 0
];
};
return forward;
}
function satelliteRaw(P, omega) {
var vertical = satelliteVerticalRaw(P);
if (!omega) return vertical;
var cosOmega = cos$3(omega),
sinOmega = sin$3(omega);
function forward(lambda, phi) {
var coordinates = vertical(lambda, phi),
y = coordinates[1],
A = y * sinOmega / (P - 1) + cosOmega;
return [
coordinates[0] * cosOmega / A,
y / A
];
}
forward.invert = function(x, y) {
var k = (P - 1) / (P - 1 - y * sinOmega);
return vertical.invert(k * x, k * y * cosOmega);
};
return forward;
}
var satellite = function() {
var distance = 2,
omega = 0,
m = projectionMutator(satelliteRaw),
p = m(distance, omega);
// As a multiple of radius.
p.distance = function(_) {
if (!arguments.length) return distance;
return m(distance = +_, omega);
};
p.tilt = function(_) {
if (!arguments.length) return omega * degrees$2;
return m(distance, omega = _ * radians$1);
};
return p
.scale(432.147)
.clipAngle(acos$2(1 / distance) * degrees$2 - 1e-6);
};
var epsilon$6 = 1e-4;
var epsilonInverse = 1e4;
var x0$5 = -180;
var x0e = x0$5 + epsilon$6;
var x1$1 = 180;
var x1e = x1$1 - epsilon$6;
var y0$5 = -90;
var y0e = y0$5 + epsilon$6;
var y1$1 = 90;
var y1e = y1$1 - epsilon$6;
function quantize$3(x) {
return Math.floor(x * epsilonInverse) / epsilonInverse;
}
function normalizePoint(y) {
return y === y0$5 || y === y1$1
? [0, y] // pole
: [x0$5, quantize$3(y)]; // antimeridian
}
function clampPoint(p) {
if (p[0] <= x0e) p[0] = x0$5;
else if (p[0] >= x1e) p[0] = x1$1;
if (p[1] <= y0e) p[1] = y0$5;
else if (p[1] >= y1e) p[1] = y1$1;
}
function clampPoints(points) {
points.forEach(clampPoint);
}
// For each ring, detect where it crosses the antimeridian or pole.
function extractFragments(polygon, fragments) {
for (var j = 0, m = polygon.length; j < m; ++j) {
var ring = polygon[j];
ring.polygon = polygon;
// By default, assume that this ring doesn’t need any stitching.
fragments.push(ring);
for (var i = 0, n = ring.length; i < n; ++i) {
var point = ring[i],
x = point[0],
y = point[1];
// If this is an antimeridian or polar point…
if (x <= x0e || x >= x1e || y <= y0e || y >= y1e) {
clampPoint(point);
// Advance through any antimeridian or polar points…
for (var k = i + 1; k < n; ++k) {
var pointk = ring[k],
xk = pointk[0],
yk = pointk[1];
if (xk > x0e && xk < x1e && yk > y0e && yk < y1e) break;
}
// If this was just a single antimeridian or polar point,
// we don’t need to cut this ring into a fragment;
// we can just leave it as-is.
if (k === i + 1) continue;
// Otherwise, if this is not the first point in the ring,
// cut the current fragment so that it ends at the current point.
// The current point is also normalized for later joining.
if (i) {
var fragmentBefore = ring.slice(0, i + 1);
fragmentBefore.polygon = polygon;
fragmentBefore[fragmentBefore.length - 1] = normalizePoint(y);
fragments[fragments.length - 1] = fragmentBefore;
}
// If the ring started with an antimeridian fragment,
// we can ignore that fragment entirely.
else fragments.pop();
// If the remainder of the ring is an antimeridian fragment,
// move on to the next ring.
if (k >= n) break;
// Otherwise, add the remaining ring fragment and continue.
fragments.push(ring = ring.slice(k - 1));
ring[0] = normalizePoint(ring[0][1]);
ring.polygon = polygon;
i = -1;
n = ring.length;
}
}
}
polygon.length = 0;
}
// Now stitch the fragments back together into rings.
// TODO remove empty polygons.
function stitchFragments(fragments) {
var i, n = fragments.length;
// To connect the fragments start-to-end, create a simple index by end.
var fragmentByStart = {},
fragmentByEnd = {},
fragment,
start,
startFragment,
end,
endFragment;
// For each fragment…
for (i = 0; i < n; ++i) {
fragment = fragments[i];
start = fragment[0];
end = fragment[fragment.length - 1];
// If this fragment is closed, add it as a standalone ring.
if (start[0] === end[0] && start[1] === end[1]) {
fragment.polygon.push(fragment);
fragments[i] = null;
continue;
}
fragment.index = i;
fragmentByStart[start] = fragmentByEnd[end] = fragment;
}
// For each open fragment…
for (i = 0; i < n; ++i) {
fragment = fragments[i];
if (fragment) {
start = fragment[0];
end = fragment[fragment.length - 1];
startFragment = fragmentByEnd[start];
endFragment = fragmentByStart[end];
delete fragmentByStart[start];
delete fragmentByEnd[end];
// If this fragment is closed, add it as a standalone ring.
if (start[0] === end[0] && start[1] === end[1]) {
fragment.polygon.push(fragment);
continue;
}
if (startFragment) {
delete fragmentByEnd[start];
delete fragmentByStart[startFragment[0]];
startFragment.pop(); // drop the shared coordinate
fragments[startFragment.index] = null;
fragment = startFragment.concat(fragment);
fragment.polygon = startFragment.polygon;
if (startFragment === endFragment) {
// Connect both ends to this single fragment to create a ring.
fragment.polygon.push(fragment);
} else {
fragment.index = n++;
fragments.push(fragmentByStart[fragment[0]] = fragmentByEnd[fragment[fragment.length - 1]] = fragment);
}
} else if (endFragment) {
delete fragmentByStart[end];
delete fragmentByEnd[endFragment[endFragment.length - 1]];
fragment.pop(); // drop the shared coordinate
fragment = fragment.concat(endFragment);
fragment.polygon = endFragment.polygon;
fragment.index = n++;
fragments[endFragment.index] = null;
fragments.push(fragmentByStart[fragment[0]] = fragmentByEnd[fragment[fragment.length - 1]] = fragment);
} else {
fragment.push(fragment[0]); // close ring
fragment.polygon.push(fragment);
}
}
}
}
function stitchGeometry(o) {
if (!o) return;
var fragments, i, n;
switch (o.type) {
case "GeometryCollection": {
o.geometries.forEach(stitchGeometry);
return;
}
case "Point": {
clampPoint(o.coordinates);
break;
}
case "MultiPoint":
case "LineString": {
clampPoints(o.coordinates);
break;
}
case "MultiLineString": {
o.coordinates.forEach(clampPoints);
break;
}
case "Polygon": {
extractFragments(o.coordinates, fragments = []);
break;
}
case "MultiPolygon": {
fragments = [], i = -1, n = o.coordinates.length;
while (++i < n) extractFragments(o.coordinates[i], fragments);
break;
}
default: return;
}
stitchFragments(fragments);
}
// Compute the origin as the midpoint of the two reference points.
// Rotate one of the reference points by the origin.
// Apply the spherical law of sines to compute gamma rotation.
// TODO clip to ellipse
// export * from "graph-scroll"
exports.geoNaturalEarth = naturalEarth;
exports.geoSatellite = satellite;
exports.version = version;
exports.bisect = bisectRight;
exports.bisectRight = bisectRight;
exports.bisectLeft = bisectLeft;
exports.ascending = ascending;
exports.bisector = bisector;
exports.cross = cross;
exports.descending = descending;
exports.deviation = deviation;
exports.extent = extent;
exports.histogram = histogram;
exports.thresholdFreedmanDiaconis = freedmanDiaconis;
exports.thresholdScott = scott;
exports.thresholdSturges = thresholdSturges;
exports.max = max;
exports.mean = mean;
exports.median = median;
exports.merge = merge;
exports.min = min;
exports.pairs = pairs;
exports.permute = permute;
exports.quantile = threshold;
exports.range = range;
exports.scan = scan;
exports.shuffle = shuffle;
exports.sum = sum;
exports.ticks = ticks;
exports.tickStep = tickStep;
exports.transpose = transpose;
exports.variance = variance;
exports.zip = zip;
exports.axisTop = axisTop;
exports.axisRight = axisRight;
exports.axisBottom = axisBottom;
exports.axisLeft = axisLeft;
exports.brush = brush;
exports.brushX = brushX;
exports.brushY = brushY;
exports.brushSelection = brushSelection;
exports.chord = chord;
exports.ribbon = ribbon;
exports.nest = nest;
exports.set = set$2;
exports.map = map$1;
exports.keys = d3keys;
exports.values = values;
exports.entries = entries;
exports.color = color;
exports.rgb = rgb;
exports.hsl = hsl;
exports.lab = lab;
exports.hcl = hcl;
exports.cubehelix = cubehelix;
exports.dispatch = dispatch;
exports.drag = drag;
exports.dragDisable = dragDisable;
exports.dragEnable = yesdrag;
exports.dsvFormat = dsv;
exports.csvParse = csvParse;
exports.csvParseRows = csvParseRows;
exports.csvFormat = csvFormat;
exports.csvFormatRows = csvFormatRows;
exports.tsvParse = tsvParse;
exports.tsvParseRows = tsvParseRows;
exports.tsvFormat = tsvFormat;
exports.tsvFormatRows = tsvFormatRows;
exports.easeLinear = linear$1;
exports.easeQuad = quadInOut;
exports.easeQuadIn = quadIn;
exports.easeQuadOut = quadOut;
exports.easeQuadInOut = quadInOut;
exports.easeCubic = cubicInOut;
exports.easeCubicIn = cubicIn;
exports.easeCubicOut = cubicOut;
exports.easeCubicInOut = cubicInOut;
exports.easePoly = polyInOut;
exports.easePolyIn = polyIn;
exports.easePolyOut = polyOut;
exports.easePolyInOut = polyInOut;
exports.easeSin = sinInOut;
exports.easeSinIn = sinIn;
exports.easeSinOut = sinOut;
exports.easeSinInOut = sinInOut;
exports.easeExp = expInOut;
exports.easeExpIn = expIn;
exports.easeExpOut = expOut;
exports.easeExpInOut = expInOut;
exports.easeCircle = circleInOut;
exports.easeCircleIn = circleIn;
exports.easeCircleOut = circleOut;
exports.easeCircleInOut = circleInOut;
exports.easeBounce = bounceOut;
exports.easeBounceIn = bounceIn;
exports.easeBounceOut = bounceOut;
exports.easeBounceInOut = bounceInOut;
exports.easeBack = backInOut;
exports.easeBackIn = backIn;
exports.easeBackOut = backOut;
exports.easeBackInOut = backInOut;
exports.easeElastic = elasticOut;
exports.easeElasticIn = elasticIn;
exports.easeElasticOut = elasticOut;
exports.easeElasticInOut = elasticInOut;
exports.forceCenter = center$1;
exports.forceCollide = collide;
exports.forceLink = link;
exports.forceManyBody = manyBody;
exports.forceSimulation = simulation;
exports.forceX = x$2;
exports.forceY = y$2;
exports.formatDefaultLocale = defaultLocale;
exports.formatLocale = formatLocale;
exports.formatSpecifier = formatSpecifier;
exports.precisionFixed = precisionFixed;
exports.precisionPrefix = precisionPrefix;
exports.precisionRound = precisionRound;
exports.geoArea = area;
exports.geoBounds = bounds;
exports.geoCentroid = centroid;
exports.geoCircle = geoCircle;
exports.geoClipExtent = extent$1;
exports.geoContains = contains;
exports.geoDistance = distance;
exports.geoGraticule = graticule;
exports.geoGraticule10 = graticule10;
exports.geoInterpolate = interpolate$1;
exports.geoLength = length$1;
exports.geoPath = index$1;
exports.geoAlbers = albers;
exports.geoAlbersUsa = albersUsa;
exports.geoAzimuthalEqualArea = azimuthalEqualArea;
exports.geoAzimuthalEqualAreaRaw = azimuthalEqualAreaRaw;
exports.geoAzimuthalEquidistant = azimuthalEquidistant;
exports.geoAzimuthalEquidistantRaw = azimuthalEquidistantRaw;
exports.geoConicConformal = conicConformal;
exports.geoConicConformalRaw = conicConformalRaw;
exports.geoConicEqualArea = conicEqualArea;
exports.geoConicEqualAreaRaw = conicEqualAreaRaw;
exports.geoConicEquidistant = conicEquidistant;
exports.geoConicEquidistantRaw = conicEquidistantRaw;
exports.geoEquirectangular = geoEquirectangular;
exports.geoEquirectangularRaw = equirectangularRaw;
exports.geoGnomonic = gnomonic;
exports.geoGnomonicRaw = gnomonicRaw;
exports.geoIdentity = identity$5;
exports.geoProjection = projection;
exports.geoProjectionMutator = projectionMutator;
exports.geoMercator = mercator;
exports.geoMercatorRaw = mercatorRaw;
exports.geoOrthographic = geoOrthographic;
exports.geoOrthographicRaw = orthographicRaw;
exports.geoStereographic = stereographic;
exports.geoStereographicRaw = stereographicRaw;
exports.geoTransverseMercator = transverseMercator;
exports.geoTransverseMercatorRaw = transverseMercatorRaw;
exports.geoRotation = rotation;
exports.geoStream = geoStream;
exports.geoTransform = transform;
exports.cluster = cluster;
exports.hierarchy = hierarchy;
exports.pack = index$2;
exports.packSiblings = siblings;
exports.packEnclose = enclose;
exports.partition = partition;
exports.stratify = stratify;
exports.tree = tree;
exports.treemap = index$3;
exports.treemapBinary = binary;
exports.treemapDice = treemapDice;
exports.treemapSlice = treemapSlice;
exports.treemapSliceDice = sliceDice;
exports.treemapSquarify = squarify;
exports.treemapResquarify = resquarify;
exports.interpolate = interpolateValue;
exports.interpolateArray = array$1;
exports.interpolateBasis = basis$1;
exports.interpolateBasisClosed = basisClosed;
exports.interpolateDate = date;
exports.interpolateNumber = reinterpolate;
exports.interpolateObject = object;
exports.interpolateRound = interpolateRound;
exports.interpolateString = interpolateString;
exports.interpolateTransformCss = interpolateTransformCss;
exports.interpolateTransformSvg = interpolateTransformSvg;
exports.interpolateZoom = interpolateZoom;
exports.interpolateRgb = interpolateRgb;
exports.interpolateRgbBasis = rgbBasis;
exports.interpolateRgbBasisClosed = rgbBasisClosed;
exports.interpolateHsl = hsl$2;
exports.interpolateHslLong = hslLong;
exports.interpolateLab = lab$1;
exports.interpolateHcl = hcl$2;
exports.interpolateHclLong = hclLong;
exports.interpolateCubehelix = cubehelix$2;
exports.interpolateCubehelixLong = cubehelixLong;
exports.quantize = quantize;
exports.path = path;
exports.polygonArea = area$1;
exports.polygonCentroid = centroid$1;
exports.polygonHull = hull;
exports.polygonContains = contains$1;
exports.polygonLength = length$2;
exports.quadtree = quadtree;
exports.queue = queue;
exports.randomUniform = uniform;
exports.randomNormal = normal;
exports.randomLogNormal = logNormal;
exports.randomBates = bates;
exports.randomIrwinHall = irwinHall;
exports.randomExponential = exponential$1;
exports.request = request;
exports.html = html;
exports.json = json;
exports.text = text;
exports.xml = xml;
exports.csv = csv$1;
exports.tsv = tsv$1;
exports.scaleBand = band;
exports.scalePoint = point$1;
exports.scaleIdentity = identity$6;
exports.scaleLinear = linear$2;
exports.scaleLog = log$1;
exports.scaleOrdinal = ordinal;
exports.scaleImplicit = implicit;
exports.scalePow = pow$1;
exports.scaleSqrt = sqrt$1;
exports.scaleQuantile = quantile$$1;
exports.scaleQuantize = quantize$1;
exports.scaleThreshold = threshold$1;
exports.scaleTime = time;
exports.scaleUtc = utcTime;
exports.schemeCategory10 = category10;
exports.schemeCategory20b = category20b;
exports.schemeCategory20c = category20c;
exports.schemeCategory20 = category20;
exports.interpolateCubehelixDefault = cubehelix$3;
exports.interpolateRainbow = rainbow$1;
exports.interpolateWarm = warm;
exports.interpolateCool = cool;
exports.interpolateViridis = viridis;
exports.interpolateMagma = magma;
exports.interpolateInferno = inferno;
exports.interpolatePlasma = plasma;
exports.scaleSequential = sequential;
exports.creator = creator;
exports.local = local$1;
exports.matcher = matcher$1;
exports.mouse = mouse;
exports.namespace = namespace;
exports.namespaces = namespaces;
exports.select = select;
exports.selectAll = selectAll;
exports.selection = selection;
exports.selector = selector;
exports.selectorAll = selectorAll;
exports.touch = touch;
exports.touches = touches;
exports.window = window$1;
exports.customEvent = customEvent;
exports.arc = arc;
exports.area = area$2;
exports.line = line;
exports.pie = pie;
exports.radialArea = radialArea;
exports.radialLine = radialLine$1;
exports.symbol = symbol;
exports.symbols = symbols;
exports.symbolCircle = circle$1;
exports.symbolCross = cross$2;
exports.symbolDiamond = diamond;
exports.symbolSquare = square;
exports.symbolStar = star;
exports.symbolTriangle = triangle;
exports.symbolWye = wye;
exports.curveBasisClosed = basisClosed$1;
exports.curveBasisOpen = basisOpen;
exports.curveBasis = basis$2;
exports.curveBundle = bundle;
exports.curveCardinalClosed = cardinalClosed;
exports.curveCardinalOpen = cardinalOpen;
exports.curveCardinal = cardinal;
exports.curveCatmullRomClosed = catmullRomClosed;
exports.curveCatmullRomOpen = catmullRomOpen;
exports.curveCatmullRom = catmullRom;
exports.curveLinearClosed = linearClosed;
exports.curveLinear = curveLinear;
exports.curveMonotoneX = monotoneX;
exports.curveMonotoneY = monotoneY;
exports.curveNatural = natural;
exports.curveStep = step;
exports.curveStepAfter = stepAfter;
exports.curveStepBefore = stepBefore;
exports.stack = stack;
exports.stackOffsetExpand = expand;
exports.stackOffsetNone = none$1;
exports.stackOffsetSilhouette = silhouette;
exports.stackOffsetWiggle = wiggle;
exports.stackOrderAscending = ascending$2;
exports.stackOrderDescending = descending$2;
exports.stackOrderInsideOut = insideOut;
exports.stackOrderNone = none$2;
exports.stackOrderReverse = reverse;
exports.timeInterval = newInterval;
exports.timeMillisecond = millisecond;
exports.timeMilliseconds = milliseconds;
exports.utcMillisecond = millisecond;
exports.utcMilliseconds = milliseconds;
exports.timeSecond = second;
exports.timeSeconds = seconds;
exports.utcSecond = second;
exports.utcSeconds = seconds;
exports.timeMinute = minute;
exports.timeMinutes = minutes;
exports.timeHour = hour;
exports.timeHours = hours;
exports.timeDay = day;
exports.timeDays = days;
exports.timeWeek = sunday;
exports.timeWeeks = sundays;
exports.timeSunday = sunday;
exports.timeSundays = sundays;
exports.timeMonday = monday;
exports.timeMondays = mondays;
exports.timeTuesday = tuesday;
exports.timeTuesdays = tuesdays;
exports.timeWednesday = wednesday;
exports.timeWednesdays = wednesdays;
exports.timeThursday = thursday;
exports.timeThursdays = thursdays;
exports.timeFriday = friday;
exports.timeFridays = fridays;
exports.timeSaturday = saturday;
exports.timeSaturdays = saturdays;
exports.timeMonth = month;
exports.timeMonths = months;
exports.timeYear = year;
exports.timeYears = years;
exports.utcMinute = utcMinute;
exports.utcMinutes = utcMinutes;
exports.utcHour = utcHour;
exports.utcHours = utcHours;
exports.utcDay = utcDay;
exports.utcDays = utcDays;
exports.utcWeek = utcSunday;
exports.utcWeeks = utcSundays;
exports.utcSunday = utcSunday;
exports.utcSundays = utcSundays;
exports.utcMonday = utcMonday;
exports.utcMondays = utcMondays;
exports.utcTuesday = utcTuesday;
exports.utcTuesdays = utcTuesdays;
exports.utcWednesday = utcWednesday;
exports.utcWednesdays = utcWednesdays;
exports.utcThursday = utcThursday;
exports.utcThursdays = utcThursdays;
exports.utcFriday = utcFriday;
exports.utcFridays = utcFridays;
exports.utcSaturday = utcSaturday;
exports.utcSaturdays = utcSaturdays;
exports.utcMonth = utcMonth;
exports.utcMonths = utcMonths;
exports.utcYear = utcYear;
exports.utcYears = utcYears;
exports.timeFormatDefaultLocale = defaultLocale$1;
exports.timeFormatLocale = formatLocale$1;
exports.isoFormat = formatIso;
exports.isoParse = parseIso;
exports.now = now;
exports.timer = timer;
exports.timerFlush = timerFlush;
exports.timeout = timeout$1;
exports.interval = interval$1;
exports.transition = transition;
exports.active = active;
exports.interrupt = interrupt;
exports.voronoi = voronoi;
exports.zoom = zoom;
exports.zoomTransform = transform$1;
exports.zoomIdentity = identity$8;
exports.contours = contours;
exports.contourDensity = density;
exports.wordwrap = wordwrap;
exports.parseAttributes = parseAttributes;
exports.f = f;
exports.ascendingKey = ascendingKey;
exports.descendingKey = descendingKey;
exports.conventions = conventions;
exports.attachTooltip = attachTooltip;
exports.loadData = loadData;
exports.nestBy = nestBy;
exports.round = round;
exports.polygonClip = polygonClip;
Object.defineProperty(exports, '__esModule', { value: true });
})));
<!DOCTYPE html>
<meta charset='utf-8'>
<link rel="stylesheet" type="text/css" href="style.css">
<body>
<div class='g-cyber-map'></div>
</body>
<script src='d3v4.js'></script>
<script src='topojson.js'></script>
<script src='script.js'></script>
�PNG

IHDR��T�bY IDATx��y|U�������=w�<�0��E�,�֊������J2`�^[Ƚ �8tx��V�G��jU&eR�C !srs�������a�!���z�z�e�}�>�랳�Z�ĉ�=`���t]�Mff����e*�0J^^����C}}}����N�>�� EQ�p��#�LKK�G�����!hmm�/��"h�Z͔�K]]�W��Q��� �xm��]�������ߟPWWۺuk��(��8���~A�+���� b�6m�v��"������� ˲���~;�q@�)���G�,,,�{�gN��²��d�&� ��a8����ޛ�p8����o�-�B! �FӴ[���'#�RB4�X3MS&I2bF�B8&��!A0�6�4��Ѭi�A�ө���e�$�:EQ�(�[B5�I�j�Ng���O`ɒ%�<��)11q��� <ϫ�#��p�$I I��1�677�u]�a����!A�����1�p8ƨ�����j�*�$����ƹ�����_h���@8���N�z�������|�a3 ?�m��Ĺ�\�p���4-7))I���N�(
DQ�`0��q�n��2!11��i��� �A}}}���Y�iA}��3��go��R�r��$I#�4� ��� �B}�i�ݺ�B��p��l�PrVVV����1~�xbԨQ|o� ����;::�,��EEEo��-�����/7�|����lu���H��.Bh�i����X,7(�"ʲ�I��2MSC�A�v�����z{q.?Po'ΥbŊ ���0Ms ta� <�(��q� :B��$)�iڛ4M�dȐ!hʔ)�3.~�����EQ�h��>H�����Zv�]w%w�kmm����HFF�-99�l�]]]���=f���5MK#‰1�n�Z��F�����h233a���߲����o߾�駟��t:S8��F�a�� �8�hѢ�'�)))�?|���M����vuu��ݻc---FJJ� �����j��I��EEEǖ.]*�1�4�q<�O���(�E1�j�~�ŮMNNn �BI���6��V������wAA�᳽���5c����t�P��W�m ��?~�٬�x��� ndY�g���� ����sڃ�8��>�,��������g'ΕIii�0��} ��� ����<zРA\jj��b�!�@(�p8 Ѯ�.��˲�A�$�AE� ��)�–.:K�.�o�50!d1M�g�Xn�u��a�$IjӦM��y~�|>�|>�b��999����;�8 �`>�䓐��Y\\��������ޓ����ٳg'��a@kk+���(����0ƈ#��
������~��#XM�$ �����E�@����0�;���vu_��tZ/ơ{�˟��{OyyyEQ�0�z�0]�2j�(e��ќ�b9�5 �UU�$I������hUU)I��;�Ӓ����y�@6m��e��H$��by�4͎y����v�G�$����c�,7��(jI�gΜ)���}�VKK lݺ5hF�0�B��(��+�h]�S9�S- �b1 |��G7�Y��liiy[�~����$���$I�͛7wvuu V�U��Ȑ����eE"�1IIIbZZ���Ʀ��@RR�� �Hl6�7�BUU�СCP]]"I��0�;w�r.?�ˍe˖�bƯx��n���9W=����1�4�����X,6!�s� "�|AAA��m��|(--�2M3�j�.��yyy�������Ƿ����C��~�?$IC�1�4?Se?�8p�9s��t���%K~���P�iZ���d3==�a��AQ�v;8�i��M=/Lӄ;vt���o~�g�m{.���K4M+x��I�����������_~�eLU�/X��G�W�~^�B�4� T�$�a�t]�Pe���e�f�$�+�=%�7�zۀ8qz����������4 �lmmU �@� �������F=����,3��К��i"�4I����������b�������4h�)I;v 0� �2�B!�D"m����,�?��y���i�BH趧��� ��wYYYB����Å��&8z�(��`P���_����p��=�&Lp���}c�>�֭[�" knnv<x�)S���#��a�̙���'O� �`�ڄ���9A��)� ���ѣ� Geee���>{�?T4Ms9�[��ݛ����fdd��IW-_~�%TUUm�iڏ�KQ��a�u �p�����|o���q�|W�/_����8<n�84d��t����뫪��TUu�,�o:�N��zY�j�*�4�-�,�0`@`����W��{&TU�Ñ�����m��$??QII�k������l�����}�~k��(���|`Y��� ���s� ^�u} @yyy�a)�s����������:�0 �e����6QE6��A�W�Z��ܹs�vIo@��F<窥��<I���E��?�y���
 �c�Ǜ����h����u=�b�D�������4MPUL��0T��/�B!�b�RU��,�kA�FF��a4I��!T[XX���tr4M_O�t�… �Og_II� ����)"�D���=��r������������v;kP����P(���t�V�\�*�0�����:d��� �2X,����q����4M�4 b�h��x����c���P���Z��۳A�+�����+�5k�0G�}�e��aÆ%_{���_�� �B�}��`MM�﫪�/��>Qe$B�6M3X\\|��m��|p�\�A��ӟ��q�l�[ttt@0]�����7˲<6??_�Ħ^����:u��\�%(�,Ccc#TUU��b�M��槤����:ג��d��}��T�� � ��i<σ��D4�I���$� IR%MөEݦ�j:B��e��X,����kN^��r�#b�i�x���i�p�$� ���D���K8���6��[{c�q.<q8� ��\��9��JQT�a6�4�4M��$��dff�:::,�7eY�BH�(*bF!��0 ^ӴMN�S?ݵ��˗�l�t]O �LHH�555%_�4M�c|@U���eo�r������20�aEQ��!())I%I��4i�~�㸩��q��@,cF_�eC�� �i�c�1��w����|���
˲ͪ�7 Á2)�UU�QdYv�(��gr�d\.�#� Zu�-��zۖ��ݻwK���cL�$ �0RSSe��&tuuE�^�pa<�<�UCyyy�<��#=�-���t�޽�N��:MӪ����^b/�/_��O�>O�|���S��\ tvvF6n�hJ�D�4�UQ�E��cEQX]�y��rHӴk�/� K�,ID���ٱhѢM_���<?�4M�����ﺾ��v��0 ;��m���� e{�˃�犥���V����رcm �˲��,0 ����h4
G������X,��NZ,YUU��pĎ=������`p��R�JJJ����ɑ$���9Y��b�t:��2
�N��JMM�x�o�8�\�"����4=X��d�q� ���`0��  c̘��"��UU��t:[z����v�뺮��$��%�Ow�JKKmc���0t�7�
��r�7lذ�M��v��q�D]]l޼Y�SV�U�$��u]�8�EQ�h4�,,,���vƉs!p���By���4�}��IUUUΛ7�^0���t L�|��iv֬Y�=��\�:tH����AU������8n���9� �B1I�^-UߕŋO`f�����b�����<�h�ֿ/�qΎ�犥��l:�q���g?�Y��z��v�Z���d^�n�o0���b�Z��Q��z���󽧙3�a��b�����l��0�㘦i��L�0,,�z(�z��'�\PVV���]w�AQ��b�� _�%���Agg'�b1 t]���z����������s��03`�i��Eɚ�� ��B 0)??_:�B4�4�q������2� d�$Ͳ� EQv�QK��!�c���v�����ʕ+_5j�Ccƌ�vW*�i~+�1�����N���]UU�!L�+wƹ�(++�1��ׯ_��oN�)���:����M>�o� <�`�%���H�>`�0 !%�/�8����� �0ҏ�r&L0njsvʕ�9�(BSS�����^﫦i�D����m$I�H$�ib�ew*�6 ��!aa�2���0�#0ƃ�_�:�0���A"�B .�8[�֬YC���=a����u�SQ���� ���+to�c��������,{i��U��4�1AӴ� �jI��"�6^�.q./�p�+��5�e��!�n7n�0jԨ�Z�0 �x<��za�Ν!�4��[
_:!�F���g���qFFKQP�X ���>��Ͽ������ki��}��ɖ����ki=��V�B���S$b��(充��JJJ���n�={vڙD@ZZZ���?��� IRAQQ��n��',��F���yyyrff��n���f���N8|�p���I�iz7A���Ch��SRR����A�0 �z���а� ���C�f���@kk����a,�Z,�~���a�=�?�� ��~_�TTT|9cƌqYYY�m�e ��������u��(J�8eggSiiiLJJ
���� |>�7
��`P�����m��Ĺ��Z���u�-��n!I�C)�CHJJ���48�9v�X��O?]�6VTTl4 #���P,�Kaa�K!|!�QRR2%%%����p8t�a�UU����rG0 �v⡮  ���ȫ��]�n�F��Dz,�:.�9��<?PQ������w��wuuA,UUA�4��섶��v�0�x��&$$�}��I�u�[(�SQZUU��(C�e���H(������o����v8Sn��fkGG���G���1M�Y�m�$���$)@�a��X,�����͋{羉���n��_NN�5%%���lݽ����f�gdd�<g��R��� �ǹbp:����ďY�6~�x����ΖP(MMM��ܬuuu骪r!�4M�j�F��� ]י���B�`˲�{�Y�x��{����%%%�<��%–��&J��D"J�uoFFF�����o�Eq��O>9�ĵ�n�oB�k].�x�㞳�����o�������֯_?���eee��?̞�� �ði�&�(�_D���w?�V�^�l������>C� ����~=�����͛#�a����p�$��?��p8 99X���u��(�]�6�i��p8����q*���]�V�4�_qqq�)���X�lY��H��
�~�y뭷�H$��V+NLL�TU�@ ˲L�B�$MD�0���a�k�&&I��j�!������d(�0�BLBB�i�ZmA��㉪�ʫ��H��RU����xmoٹ|�r��ѣS;::���vc�k�…�.�5***^s8�f̘��}�����?�P��@��f�e�l����D611���O9c >�����Z�4Mx��:C��,��4[B��6� Z����JI��6�ɓ'�s�����������*(����Q���4-bF�i��]PP��yܪ�����:��D�e�R�v\�$��b ˲\?��Iێ8�q8�AYYYM��[�ֻ��^��~�c����<455E�^/A��bQ��ӭ999�����f���%�a�@���$���X�9��ʊ����r�~E�tiJJJ( ~ v:�jyy���Ǐ���Q�m۶A]]�� "�,�
6u��ҥK��:4���=��z�3 �K��(��o�̙���of҆B!x��w[�͛ק����� 7�p��������$TWW�,�`�Z��yhhh���i���������˗/_n���5kV�Ɋ���ڵˣ��C���f�r��Ӹ'֯_����/�Œ����`�X���v9���,[I��4M� �芢��y�>g^��`����Ey���E< �=z6l؀B��1��3�X��0ƺ�(����Hk��dJJJ&�4�ε�^�8jԨo���B!��F�������� �N'����YU�>�a��W-4I��=���H��G���3ϔ�˺n��ѓ>����f��r��w�~�`Q�0 0��ζ����B!���h4
�(����e�E�q��q����9v�X�����q�Ɲu ��Ç��>� ��[,��<���u�sJ\.��4M� !t����@QQ��Bg6Ĺ��;�q.k��ʦ�4�{�$G�?�1lذ����:�B!ذaC�$I]�ada<x01l�0�Dg�'> �N�����{��������̉'ڬV+���@eee�(��Q����e�o�ŭ���;v� �B:��o��,[�l�i�U�g�fRSSaϞ= I��G�>���$�o��?���v;,�'w�u��n����+G�}�@?���1�������5^y�ZӴ=C��?nܸ�7�|3�Dnefތ3����DTU�>��������<CQ�$�eYV����$m>�/�FiEQ,4M�q���?��+���K/��۷�o���x;�S��*466¡C�@�C��~��Y333aÆ �,˫ èX�hQgo�'��`ժU�T�5y�䴞�o|����������g{�<X�j��'NOKK����(�iH�I�  Bkkkk]]�����'�_�ti˲��s�~��}���������� I��UU}c,!���t��w����}�ĉ���3��si�nMw�����|��4��0L����dY~�����Ų����:�4m�i2 �p�ƍ�D@Q�D"�)ᔪ���(�a<I���j��4M��b�!��c�(�r�e� �04�a�s���syw��\��\�D��v�l�����'����'jkk�;v��q,�~���df����M�:��<=eY�ƃ����PUU����8��M�0�[�o�
��� ���k֬!�9r#M���iZ��Ζg̘q�S�h4
k֬�E��,�ө��n�{�A��Î;B�$���SN�ҼbŊUU��>�(y�����?��Z�RA~Ͳ�����d67m�ԥ����������edd��"�1���z���O�t]/LJJ�ko�i|JJJ�Y���q?�3gN��ܚ�B���7����1�-,���>��'N�S�m��Ĺ����0�a��g��HJJ�֘��ߝMMM�O��~�Y�r�I�&�<x�i��رC�������.]�4�a���,g ����'���t��k`=XB`�X� F����(��� E�K����:BQ�k1�iYYY�'����\�ǹ��ݻ��٣%$$���Wu]��b�C�X�ⷚ�=g�X�)S����pr��'�ӷ�~?���ñc�TY�1Ƹ�$�,�04�e��H$���6���DQ|�4�w���k/�^�\X�Հ8WEEE�^xA��lTO��=QYY)���l��b�0`@bkk������L��˻`���Y,�X,}=σ>�/���cE��e�HO����\iiiVccc�w�}�ͻ�+�'����@GGTVV��ϟ��dɒ����ݪ��u��i �|�������N�����d�a�?��ç�Ϊ��AU�䜜���]w]��v�mo��oݓ�@��A� ��8p�E�������������0̆Q�F ��k�$I�u�~?pV���벾o�v�m��;v,���6�(�X` �ǹ�())�p8�e�Z鼼<����߿������^s�%Iگ��3��uuw(--��a��M��3f��D����߹lٲ��u�?�������<������H?~=hll�q}}}�����q�fI�~��ى׭[�D��4��!�?��]�@��#F���o��ՑA�1M�.�kEQ������y���t:W����jw߾}���a`�V+dff¡C�D�0Ԭ��̙3gv�*80�
����pv4���/�,^�b�[���{�\�s�����^/��c�(�KΧau���1*++{�a��[o�u��j�ݎE(�]�3�K IDATv�UU��������@Q��q*�0�G?��F!�A4�A���5��Ksss�СChڴi֞���q[}}��-Z��l�+//���?<x0ttt���ۃ�@�gY6b�f@����ϟ��r���8�x��q������������S��v��0q���Ǝ{Z;"�D"��J�>�/��n�u�Ǫ�>%��5M�����|�%5�(//o6lX����X,}��_U�N�4����c�����|��������M$I>q��Ɋ��_�gVV�m6�� �^��S�v������#���y���x)�s:��qsH���G}��M��}�Qg0�H�����;�Ӛ�������]�Ph*˲[�������$I0dȐ�>��;G���b1E�4R���$����:vĈ��������2k�������� /�c�С�UWW#��ߏ�b��]�$��8�&�� ��$I���$i�x7A5v���(>A��1#��?��C��D+�MMMp�`J$�������y9�6c���$yD��#������r�-��׽�pII�� �&O��8��$�eYظqc!��SO=Up)����n��?�V띪�VJ��� �> �>]��8����dVVV��F�i�����xB^��PU��(�A;dY^QXXx�{Nyyy��i�!��P� �`�2 �:t�:mڴ� +_���#<xpϓO>9�l�\��4MoLMM ��~�$IO��Z�q �-ˋ�aXȻ��[��o��v���~�ښ+V���e�Xt��Ԕ���1c�\V5V555�={B���K9r$��z���jjj6���������k��6�����4�>���#Iҝ�����7�tS^NN���M�UdY���&عs�� v�ȑ�5�\�����ԞC�Q�HD�$ixOb9q�>���2�Ouu˗/_�i2M��AL��[n�e�������G�I�􇢢��/�]�/�@Q����o��F��ꉢ��N�0������(jiVV�q�7ftgq����G}�y��h4ʓ$��1Πi1 ������S��O�`�a˖-���V����&N�x����/���\z���??*��>UUW|,p�\�'N��hܸq����Z[[��q�>}�8���A����� mmm�4C~���5�\��]]]���&L��!Ӆ���|>x�^o$a�Ѩ�q�!I�^��Q\\�;��%K�d�$�d��AQ�f��FQ�x5�N��JMM}o���ӷm���1�����Ku�K�;�N���5�\Cx�^�(�l,#8�k�u�^��U���^*{Η���,]�S(�J6 �gYvBh��j�}���6lWWW'566z5MKE�VӴW �4�� ��EEEo��^��/_�EQQ?#��4�}EEEG{�v�G�$���y���`���%$&&B��sm8_a�֭�O=���s��t:-4MZ�hѾ��V�^����IJ�n�-Q�$�Z��G566–-[v̝;�G�c������H$�GUU�@BɆa���$.����z�͛7{����P���i�VTU=@Ė���C�mgO,Y�d I�v�$�����4g���r%Z,������o����̯d0�PYY)=zT�4��Ӳ,�4Mw̛7/���l(EQ��ӧ�2`��oH�F"ظq��`0��y��{kq.,���.EQ � ��<�I�~F�k��u8���p��b�o�f�,˯�$�ق b�m����_^���;e„ ܉�mUU�;v�kkk- �̛7������8`���F�yN*ĵ��������|�$?��[,�� ��0�A�F�_�ȉD"�$I�p8�.���G}���m۶kkk�A�QU��Y�f1�����WG���~?��UU�!d����������U��b��� G�QjkkM� �ɲ\F���4���0�T��z��T��b�N��I躮�<�D"9$I��[�� �-�����)//O"Ir���_�)I�ܹS^�`�%�q�~#*++�O>��&��"�UӴ�+E��Xō,�ޣ��$�ad��i�a���d-)))-++ ��{�.ڱcGPUU^V��耆����u��� �p�ir!c̙�i︴����\�/��_QQ�3##c"I�QEQD��U����B��(�H�$�eYEQ�������d��ͽ���cػw�T]]�!��IU��N��;���n��j����n��L" ����9=�.(//_֧O�ǦN�j�~ ��Я_?���n�l�
�ZBB��n��v��;iooǢ(R4M�e����&y.,]���n�s$IR�h��eY���eY��,��At<��#�وq\ɴ��E��}�$�pBBò,�]W�����|��{��%%%�� �͜9��}H�������������/m~�����l��~;nܸ�^�PSS�P�&55����.F�u�ӟ�T`Y��0���B}}}�����3,�n��b/����r�Y�b�b�$.�r:��*�� ��D�1x<]��w�|���/��/^�c�XV�4=n�̙}OU�|*��׿�E��p���� 6n�ĉ�u`Z[[��(8�6{^��l۶M�c�^{m��Ç�ۥ]%�b1hll����h{{;1c� #33��EH.SZZZ���)(�2��M�X,�p8 !!N�q��:D"��ڪ���ȱX�eY�\i���R�q������[XX��Ku��?��X�ti�0fc� �0��(-��*�����egg�YYYg�"w*L���޼y�/��a�4MaaRe
�lkk��������%A"A$�k� ૴�ө��yEE�_�����x<۟x≇{��bŊ� �q�\Ob�)�$Y�0H�����i�BH&�i�<Xi�������/�l��Ζ��6���
 c�n x�����{��l����XN���gϞ�|��̚��駟.+**Zx�1���� ��F��8x�`$ ʃ 2�L�rvM~�����Apb-؅@Qغu+(� �B�,��,��ۇjn��)��] Ì%�:`�eܸq��۷Onll �w�}�߇��믿�$���4M��m�D� �������iL���l�rI��Y��UU ��?���/��N�-���6�4fY6OQ�B����=��y������������۶mۑ��7f̘1|,�H$'��v#�2��~غu�(�bM~~��K��K���A`u]�De@������0��J�\����Q�\\\��|mp�\e�]w݂ӵ�;�0`߾}��;w�-**��ʕ+���>˅�Q���+UUUyBi?�p��z����BCCl۶M��l�?��c�D'�W^���N��`�� MCC�����0v�X!d�8X������rx�+�p������3�D�X,���c��q�5Mh��3 #�4�4��}�����3ϔ\�>�����R����F��kY���Q���OB0�c�)�8q�eĈ�7�|3���X��r��?i�6c�� <�lٲ��r���?�qF4�#MӬ��V���0��b�͖ԭ�+I�b1����d�ْ������� y{��޽{�t)���1u�…=�C���庿_�~+o���3�yɲ �������?�iǗ��M��j��梢��+V�p
��DZZ���u��u`SRR��~?�<�u���� Š���a��ӓ�, ���v��Uoe��c���ك �S��I�`�ڵ�(���n��E�EZPP�vA.r����KILL�Yvv6���  z}>_�4�����(˲���
�� ���]�mb�os_eD�_�>���i�ӧ�� ���moo�A�DQL�1�����?���+�322n8p  ������z���\��o��)Xkk+�m_���JyϞ=$A[t]�]aa�V��:B�,,,l�۹�����LII���mmm�h4�$�q��7�b1���gCII��cǎ}uҤI�4�/������=��Ss�n��ɓ'�n�ȑ%B��z!�)N���{O���{����V�zYE��A���Ng.��G(�j�(ʫiZ���A��s��1�����4M/�TU�]�`�{x�ʕ��������Ç[��:�1��ւi�`�X��y�X, l߾=T[[K�$Y'��+!D�bFM�;�EF��vO��������qHA�e�aAt��CQ�i��0�DBBB+M�����đ#G~�t���{ �?���㑂�g�=�֭[�� ,p�\��/$I���2H��I��G���3�,=��K�.X�=x����^���p��8x��8�j�&���vtt��駟���c��� 1Ƌ `�-�� /�� ��C���:b���(�g�}>r��(��$�%s��U��V��5���VUu<BȴX,Mӂ�,+�I�>��&a��a�뺾���݆a���d�?M�cX�}���+X�d�L�������ӧ_�������."I��P(������+E���9999/O�0!�j�~�J���;v������+0�v�$�b�o�������4 *++C���v�a�WU��+I�����:���U�X�㞊�b�`�I�1CӴAQTʬY�O�'0M�Z��޽���}�P�aY�S�$I��!�Ǐ�TWW��6Y����������d͚5���w���8��?LHH�4M3#�c�a�AA�B~����5 c/�(jGO�.�������6l���qN���v�j���rQ������ٳ���>N�8ߝ�bta]�#�?���0������0Ʒ �0J��$�����{E�c��$�$�1��:�ϟ�-//����E<ϛǙ�X$q͛7oٲe�Vedd<4r��QAQ0  㫯�H$EQQU��e��et]�I�TBA���H�Ԧi�.��^UU�:�N�Rܫ��˗��!�rrr�O�>�����choo���N�F��iZ!jjj��$��s�������������y~�,�c�������7>�o�$�H$2{ҤI�aA�O�> �2lݺRSS!++ �V+X��SF����b_|��Y�����_4h���O?�UU��$��X��c���CF�͛� �����PUUnii9�D6"�������_z�Y,˾6a„$���y�eTU��"������~������3*�J�o���QEQ� !�����7O�1F+V�x�_�~E�]w]jmm��s�N�$�?=��O�Z�� ��)�=�1�ό��A��ƍ��k�:h����,��7o޵�뗖��)((h9���W�.�8q�o���o��655�(���:�ܹ3����s��,_�ܭ���� ��n;�:����W_UI�<�iZ*B�6���S
��`�ʕ�4 c0�0�iӦ��a�x<���Qt]�ՓO>���vONNN���wߝp���W2UUUҗ_~I���pAA�[�*s%ι�r�dYv9EQ:B�sQ���[e�e�$IEQ��,�p���M����Arr�׵ro��!�r'A�E��t]�GQ����)++��y~B(]Ӵc���x�3�B�dɒL����;777���ogTUY�A�$�$ ���Bccc���� �4F��r��g��ŵ�k���pw�i�ӓ��`ƌ�g�=|�p�����O=�ԏV�Z�XBB�o��������EW������������ Ųl���''$$p���ttt@KKKD�
��pļ^�C�$�u]�>}z��(�kkkc�p� �J��w����� �������_O�9����.�e�^/x�^�����`�'I2H�d#EQG���g��p.�g�s��,Y��-��Z�|��_��N'ò�3h��s����I�&%])� ɶm�:���DUUO��rsss��1��� �3''�off&dff~�������Åj:����DQ��[�Bw�,;;�Guc��ϖ��x<�@ @�'ъ1>��*��r��x+�1�EE��y��(�72��2e�Y��Eb�Ȳ ������}~��#˲+333O��y �fffBFFƷ� �_�֯_�<w��o弮\��%M��Z�Ѽ����c��'�ݼy3444<SXX�������� �(`Yn��6kZZ�7֬������Տ=��S�c�Z'�B�?��Ϟn�+V�؜��8q���=��_����ѣ�$I,XpN'�n�{>EQ7<���S�^��K���G}��줎�=�8��S�>_
V�^=G�e7EQ;$I�d���-����/�=iҤ��۷7M�U4M���*yϞ= �0����E�mS�SSZZz��bYg�ZU���gggKw�q�e%H��:/;�`0�� 8�Z�Vk���3�㸭�h���i���sϵ^J�V�\�|�=��ZZZ����Ѧ���  :ݼSij���5QQ�CN�3
P^^^L���ٳg�;�S΋F�P]]���G�$ V�u}$ـ1^��u��t�X��#��~{BZZ�)�z����‡�eQQ�;+V�XCQԝ�CJII������5K�ԗeY%777������������8q✆��? ��q��c����D"X�~}s ��4]#���п-�.��+��n����ʦ ���D�0 8z�h��� �������… �}��O��8����uV�ա(JTQ�}y!���� ��l���b}1Ɣi�4B�HJJj!!777�_�~$
x%��za�޽���vQ���ښ�������X�4���?����`0������ �\���e�8�#�>[TT���ŋ�&&&~��$���g�&����$I���!����DQ�@A� ���ȳ�l~Y��D���B�,�=����Z�Ҁ��� �B!F�4�e�O4M{��3��5���Osrr���,6##N~Aٻw/�ڵk�… �/^��/�0���ON�<�=�b�� �����u���� 8v��-�ݻWVeHqqq�I�$���e^RR����=�)���^g �IQQ�Ƴ�Y����iii����8��$$$8�����
���/���������4 ���i�ň��Wj������_�2e�/|��d��,Cgg'����:;;e������_�t�8���J����m�$i��(���m���{�a��F��g������h�����zZeY~���h����ʕ+����;��8{{{�_Ӵ�p8<s�� =�w��S9�[��>��ӷ�4c����t����Y%��c����`0��8�h4ZND_�e�M�0aɈ#���G�uPWW'��թ�a�UU-g�����Ҋ+^�4��!C�ȧ{o�F��v�Z�aE�� B�Bh��i�v=Azrr����D�0�S5�_�~ڍ7ޘs6�Ɖ�����@[[ 6 �7�'�bw�:;;;��&M�8������Oʜ/~�������4����e޼yK�w��v��nw��y�C=D8pv��٬���������}.���o�ٜ��>{��t�ˡ���Jw4Q��CQ���AN�W�MY���?����k��!�ݾ����"�A� 777;���b�,� 4�$�B���6�m���<��V��b����!�����I��~b�J��5!4
!� �O'�TZZjC噦9���{X�dF���%&&Z[[[%UU$I*,**���r���[,�z�S�o߾]���ۆ�w뭷<QY���G����������ϜN'e�ۻrss��������5UU���:8v�X����3MsZAA�γ��`��ʕ+_�e�0�WXXx��vOKHHx��8nj3�����D୷�Ry�ߪ(J��i�u��н���l�Z�6 �I��$IcgϞ�]N�����PB��|�h 0��0�16��&�⟋����m;����VA����u�-�7nT���l6��7�l;]�J���@S���ޙ�GQe�����{:;I���EV�,n� � �0�ø��q��$u��U��Va�wԙQGQ�E�  ���{w�[UuU׽�?B0@ d����<Pu��SyBU�{���">##C�0��DQ��������^E�ODW� ����:A�m��_jj�+P�������DC IDAT�`����0]��ϐ$�_PP�8lذ ��۷;B�ˬV�z��O<Ϗ�eYx����WHHHV�>}b��飥i���`߾}?!���,;�W�^���n��EEE��c�h�J����]LQ�c��ȑ#������!++ 233=,�~ZQQa �z��C""".�K��v8t萳��L�D�Vϛ0a�on�PA�v#??dY����?�d���� .�3g�73� {���_{j4��=z��>��X��c�����Y�(���������/_���h|lʔ)j��U��Ɂ .TVTT�i�v�\��o����%K��$IL�d�d$"B@�]�<-Y��622R��鄒����h)��V��x�С�3g�;�N�,˿�<���͟w�}���d�=�&�Is��^�$3MӇ-Zt�b��������N�����4W7����R��̬6lXX�Z�#G�yyy�BCC�G����k�O��\�9�� ʽ^�^����V���R���˗�1Ưʲ�b(�r�|�������.]:�����i���￟�޽�u멯���x��3g�x����lMT��HKK{!�C``��1�~?E�$1y�d��pKe��
�1TWW����F,˂�����ϟ�+++Ӱ,{� ���=@D�,˹����l�l�ZFJJ�H�^��$I4�������wH��СC���r���hH�\#�f�9�%��������f����HDCv�ٳg�N��n���������W�ճ1ƃ �CCC�����V��Sr_}��c슊�2 2D��j/SWWw�@B���_YRRB�s�=�>}���#���� >���-���CFF�����̙3_���ߑey�ԩSMWfH�_}�U)��BCC�<���Uf���B�����=x�`����o�.�<E�պ~�a�ի�U狋�a߾}N��3c\�����F l 6�� �;S�N�h�>�
�>�>��D��qQ��'I��k�RRR�I��CD��],��(���x��(jGC_����!*�*!4�h4J]�t1DDD�������S����l����D�5�(@�5�͵�/� IrA]���-�ryrr�A��6T�Rm�h4�Z�}�'"���;������r�g�Faaa 0�tw�!���sٸqc� '$$��0�j��dY��iӦ^+�����/��ϛ7�Ž&, i2���������4��[���r���toI�4^�e
!�P�RY_|�ś�����.\�M"���ӳg�v3s�����S���?DDDD������n�;|>�644��0a� G`:���8z��K��2�Z}������$I;I��<��>�o��>�n�V�b�Z=aĈ}~ )�c�8������2���F�0�VQ?HLL���uV�ub�.]>mP8F��鄲�28|��@�dTBB����V�^���z��у�۷�����+q:�W��\Y����V]�RZ+`UZZ
;w�<�������-44tɔ)S�*����o�555�'�xB���
�?555��7� �P�����j�f���/���5 ��;�8{�,RSUUe�3g��֮u#�]���x<%ӦM �V4K��D�e8w�TWW�JKKy����.P�Ez�����D�F1((�
2�L&`.\��+((DQ��WWW?>p������h�K>##���ϗ�N��`0�p�6y<��<�0rmm-O�d�,�"���(��� � �8p��ᘥ��?��cƛ�z��q���9s� n8�f͚�����G�e��� ��'����fΜ����Z,U``�1c� h����ɓp���S� <�V�?�� *I����祗^�oVY�e@����`ǎ[�Ν;��&m!�V��x�]wM:thG,�!�|>X�~� c� !��>��,������ŽܧO�q��o���\���v �����_��1V���.]�|����w������rȓ$�O %2�/���tGB�A�����n��7É'eee)3f�X�pl͚5��Ǐ�X��}ܱc��y�ӵ�.~� ����?�#"a����l͵�r��Vk�F�Q��lQx��yظqc��㹧A��#X�ti�3�<r;�*� ��"��L�n7|���Q�GEEm?~� ���Vmu�mAA\��¿��/c�3�8�W�^�>�`��UTT��������Q�T/�5*�w�ޭ���[�����n��v�, �V��{w�x���'0A�s��N�eM�1�ĪU�2Ǐ?�-w�B��"�����������O<��3�-�P�p8�iӦRI�Z�hQ^gۣ��|���/�L&��ѣ��B�V�y�fgii�Kf�y��l6� ݺu[3a�݅ য়~:����-Z��+Ǧ���N�<92 ���������7o��U�V� ì:t茸��;>�@AA��ؾ}{mYY�� .\��kZ�c�I��� ��z�{����… /c��i�ڵ4M�\.�?��$�h�����l}X��I��h(��p]]���O+X��1���\.##cK]]�����y#F�������R(��=z�ټ!��<t����-U������|(///���~�l6�五��'H�|��R���o��f���l6�p�J�yDD���G�l�]]���bώ;T,�~��O�� Q�T�_���m�ƻ��-((�aÆ�h4��l���prss��ѣ��g���ٶ(t V�5�`0��������t�F`���O?uq��J�����ȉ��R?��#�ӧOCIII��n_)I��,�|>_ ˲�%O�6���(�o�^�=}�4������+�|�pl�ҥ�ӧO�����l222�S�N�?�薌��l�Zg�'���İa-/�s:���7�TI����d�2|�pcxx8���/κ�:I��
< .lqMaS���Q*�*c�'&&f,_����|� bY�}�w��C���4:����n��
ˉ'�ӧOEFFF�3�L#�eDQ�J�l}���}��qUUUx�_C��ޤ�����a���&�$W ��G���X���4�CK���I�@������eee+��Ջ6���������4�z��'�ng��}�������̜9s\gۢ��X,cPPО����G}�3^n���!''Dž1f k0�d2AHȍn�_������n��\�Toޔ��y���IS�N 8r�HmAA���H�Z]���� bj,Jx�����?~�2 �4M�ѣG����2سgO�… {Z,��`XL�3�����~��*((���ݻk�nwLC�渦l�Z��'�{�9��������g�ܥK��a�+ٵk�����_� Y�l���1,�>�P'B����_�`���c�,Y��i:����$�e9z�������R��q8W�`� ���yw�ޭL��Ï3&��$Ip��9���r �����R�J��RRR��h4 F�1�W�^� pC󔔔��ÇK��������>�dY��ߙ�8oVV�W555�ڪ<cժU���8���{��|��n1
����v��%$$�tԺ��4 KH���f6����<+V��� �j��y��,ˮ��-a��"u:���{,�5Z�2�w�v���I�������t�� ��t:]\PPP�^��Nz�����9������������n��㒓�����CT*�Kk�R��8. ���[�M�v�8Z��m�j+++]�"���DQ�$�-˲6P�866v��w�}G�c:��������47�Y�j�fqWDD�=""�p��w�[�+�1�P�&�1��㏮������ljLjj�� F�T����z�^
�w��M ���]��<��c�R������<�@dEE0 QQQ������$Ip��S�deeqԐ$��,�?��꽢(v ��x<Z�1�(j3�qONN>��6�Y�f�^�0h� ctt� �SSS۷oϜ3g���˗��������fݱc�����<˲�8��j6��v�\��ŋ#3�~��[��7??bcc��㾶����g��rrr0MӇ�n����/�:ʦ5k����v6t�P_@@���ѣu>��H�7zU���$����|f�ҥ�T���$��$��/��J5�a� O=�T��ӧk
h��9�k���uu?�#��^��O>yם$�v�aϞ=5���Z�N�����O*��n�$�b��i�ځ�a��`����� è�Z-8�y�����a*��[Q�}dY�R����/�+++��t�V��}����<_4x�໇ �ٷ��8�����Q'˲I��CYY��n�S*��{���Ô�g��dÆ N���6o޼�M�o���lƘ%�w$I�=zt|\\\��EQ����ל;w.�e�}� |n6�/ՅX���j��5��?\�ӉQQQڈ�6<<�zA���CUU�%�#Y�]����޽{���
�4� ��ݻ�4M���� M}\8ؾ}{������a�-Z�h��b�i��bFNLL,iO;W�^�����?�{��7�����[�:+**4Z��O�f��`Ŋ�&L�Ք�����$������ӧ� .l�����X�����G���4��$''�;{��6�^?Z���L��j3dY�8n�F������˗� {w�ĉ��>���þ}��uuu�$IB�aMӘ�yإK�(
0�PPP ����]�v ������}��7n,���i$I��#�o,�* �ؘ1czt�֭ݼ_�1dee�$I��P!!!гg��Z���WVVž={�}>�=M=����c�� �z�a���e6��/Y�DG�����A�!��h�����Z���Nc�G�����)++�q���ӯ<w�S�j��&���z�� ,�|����ѯ���AQQ�����d4hے�b������r���tz���d��݂ <����c��ׯ�����QQQ\�~�����J�VA��|��G>���B����իW�Z����8q�D���-W�T?`�_ 7�;w.!�TRRRf[�o���!�0B(�)����� �JQ���>�l�N��ضm�����4��{��7�5�X,ƀ����>���ձcDŽ��lI��(�_&$$�y��w=RRR�5͑�#Gvi��v[SVV�O��x<?��4��*�F���ٳ���lS0�rRRҦδ�j�vgY��}�ݧ�����<��������`����$ �~�СC�}�� FAk~odY��{�����U$If���,�؎�u[�bŊ��1���,^�n]���� �cA�q˲/���x�=��ƍӵ�c���a���UUUӒ�����:���V�3F��.�)((((�YYY�/���7����d/�m���B�Ȳ,�1��r�fh4F��%a��i���r�(I��4M��t=e���Zرc�Y��w���eb�/`��{��yd���rS�,[��xI����`NQoVPh����e˖
Qe��!@Ӵc\(��,������<��#�<�Ñ#G����i��?$Ir˕R-eٲeA>�o��h��FC�<�%I���|_h4��$uaY����
 1�,{�Q�?~rssOΜ9����V�Z��V�M����<rss�?����x�?X,�b����mK�/_^<mڴ�͵�j/"+�(�g�}������$Y
eǕZ,�C j����!-��[BGT*�cƌܣG(..�a�����ݻ�������6��`����0`��� j���M�6���˟MJJ������i||���m���aݺu� ,hR��j�>)¦+�)))� á�S�v��g�����6o�,Ȳi6�k9�V�ի�j�sgIJJj��k����Z��� /��d�,�p��q���wQ���_��ZCW�Xq,::�����-I����
Y((�VEA���(¡C���,���p�����̘1��'N��������ִ&�裏�w�\[����c�6ԿVVV��n�^z��Zm���ܾ}{aYY�9I���|>[�"��(�`�ɴc��8n�… �l��`�Z����~����(��R����`׮]� Y��_���}䭷�*��o�՚�X��0�t�]w ��{ڥ���ݻ�s���0��_����+W��9hР����vk�o�>����m�T[�l�FE��dzm�����…1���<8q�ĎW^yeB�sk֬�
�ZXXhbY�K���{��ٰI���G��/ӦM# Ý�����p�q��P���0 �, ����iP��6l��y~�o��m���ڵk�ߟ��z{����~��K�t���� !�W����IOOwL�0!022DQ���j�x<��,�T*P�ՠR� ??JKK+��� :��R��?���� J�7OII l߾]B�����yZZ�����^�e������B��-X�`���HMM�ᩧ�
��\^^���Ap��q����R� 00�Ji677jkk!77��,ˣ��sV�u 8�����d�b�X��&L�z�С���Hv�С�����n��믫�N�`� ��l�r+�j�*V��Q� ��˲�=00���c�������CFF���������G[���Y�~=���7�d2�:t�Сqqq�a��x`���e>����j�W�XQثW��}��iwU�o���]YY�L����U�rƎۧK�.p��y��ʲWVV�T�B�a����OH� "Ir�3ض��Sh�M�1��r8%С���۷o���?M�ec��� ��i�t:cii�� ��gϞ�-@ �7��b�j���nݺ�ϐ!CTp��I��嚑�����k�Z�F�{� <J�4��|� �d� A�BzY��j��Z�_$I��J�*�j�;�t�2��T�N
�i����...Αe����~���G�N�:T�iY�g׮]�s��MONN���1�֘��� ,�A�t:AŢ���#uuuO���3����=��h�Je��|�_x�C[���>}�9�E�^�h�m2�M����Q�~���ɓ'!��nݺ͟<yr���;vL8s�W��f���=�kK�/_nj��\�r�}��7266��3I���r��3g|����|>��ke6�HMM���뗆��� <X��h
��^3w��YW���M����F�,����vضm�y�כ=�f� `�ʕYF�1��(t��������n���Z(((�sEɣG�Vԋ�Q��� d�,�vA��q T�#t?h�Û�.��������BvvvCJ�����n�8f��놱7��X,�Z�����Ɖ�xA���III�o�����_��1��+~x�����i��ny�pH�&� rrr<555U� ��?�2��6c��^�_��s�]��Cnn.0 4MC���`��������.\8� |-RSS��0b�9���k�KIIy,99ys���˗�o߾}�>|x�lT!�`Æ ����Z���$����h��[�V����g'N�hj���u�d��*��C�e�^}�U�]lG/^�pTTԗ�=�Xhk7IA���L������t1 s��?��}��}X�j��M&���=�X��K�Aii)���g�̙sו����������L���պ�:����F�|��a�,�/!�
I� �e��0̞�{N�Dz;�;$�4�r��柙� �r��~
4Eu[AA�y***���@����b�v�Y�Г |�~�����M�R�x��Af��h[��̚��ӧ����^�
���녌� Wyy�a��\A��i�����L�F�F#ʲ�S���h���a�u�v)u !�:�UTT�h4�$Ia��ѡ=�P�,�p��98p���1NLLt���V�M�4� ����9�q�����ͅ#G�l�3gN�G��.]��G��~�� kɲ G������3g΄�_q�b���Ec2((����ݮ�P|�� p�����K���i�N��JHHpt�ٷ4+V��O�d�SO=�QBNǏ�333O%$$�����j `Y�C�������N���#G�ث���$<χ����njcjiƌ���v��v ��p���T��5�� IDAT�J$ @�4�'�< 7� �nC���a���˲o�I1��f�d&C�׳^�w�(���įY����3g&���5�A �p�Z�
���#����S�_�;�]�v����E�,[B��y��ٚ����(Mӽ�n���vW���G <�����￯�y�-�bbbb�7 ׭Y�橏>�h}TT�[��PE�$�%�b��X��b�����?��� |d׮]���1e�}S5�n��n�Z�1>��z�2 ��뮫I����1&���t:]��d�Fu�6np�̝;��v~dY��e���\��'O��V����������P]] �����H�<�����z�Nm�t�a�Z'I�������t������ON�:Uu1=�ME>�p������p��E���l6�N��2dHl�>M�1w8F�Ǝ���P�C:��0�����x�!X��"��a �VkA��Z� ��20����TPP�.����l۶mq�D�׮]��p!�eygHH��G��a����[,WK�JMM��V�}c���|P�G����� .&&&��ihh��<�~+|���qƿ�����:zk׮e8�+��{�Ν;W'B��嚔��lo���ԩ!��7�\w�%K���O�>/9\SS� �|#���������?ehn�Ν;����E��`0t%�O�>���J����r����̚5��f��P,�Z��:����6,����b�ƍ�n�{�y��"���b�V��`�ci��k0B���r��obb�ζ�V�f�X���{��dY� <8��p@aa!�������t=�1�:u
�?��� >LJJr6:O������8n���Ç_U������>ç@����.W�.�(�l4�S �A��_:f�OT"�
��]��֮];��v��������/k�5)))�1 �s�����x<���S�1����74..:J(CA������� AAAPVVYYY��d�̙[;WZZ�CEM��|�$''� ���2��C���+�� -r�>���Yuuu}=�����1&V�^}:<<�{�������������cǎ9233I��?�$ɓ:�n�(������A�;ؼy��y�� �;� ��6N�R�sƌQm-��p8��r����<����ĝm���m�ʕ+_�i:A�$�$I��3��M���:8r�� ��M�P[�d�bcc�2d�V
�?<_ � ���(��U!!��\U�$��E��$I�,cp���aL{����p�1M*��;��W�վ��#�<bR�\��:'O��_~���h4�B(�㸿�h[�Ƭ_��*++�%***T��Di4(++��v���͛Ԓ9l6[_�1>'¾k9�K�,ѽ�����[��,˾���i�;y���+#���ɓ'�srrV%$$Xm6[$A�֭�﫫�K�ٹHMMݻw�����Y<|���%�2��4��^8�Vs+ܞ�l�,�~1nܸ���շ%�~���q�{f�yQS�SSSGw�����'*Q_�K����^_Ng5��V�j���0�A��<��A��&+((� ����}���\ll,<xp�����,Cii)tZC5����V���ư���.����u�[�m۶�VVV�H���+�����l�����=z��` 222<���EQ�].�ۍǥ��ݣV��%"w�����S{��+..N]^^.����/_�O�/���q�J�z��iײe�F6��ۘ�����3�%K��lذ!oԨQ|xx��`0˲��jaĈ� $�\�R�;w�2x955uM�7�r���j��|>�1��R�F�$Î n�to��eŊo�Ƥ��/(44��֭�����NR�T���ř�GQTN]]]�(�m��Y��Gπ^_�C��/�2p:�եn$ ��� z�h����x(�k
�[�n��<�6B�(�a�����;Ŗ��j����>�/�S"����4M�nذa���+
�errr�ĉu�,o�={�s��ΪU��<?T�՞�8Ζ����+�,^�x@@@���'�l�R ��̙�[�bE�СC��ׯ�e� ���8���S�"BBB�={�T��M�*y�?1k֬�4-]��J�Y��1 � ����O׭[7����s�� i��F����2'$$d�3�<�&a9����/��,X��͢�
�cb͚5�<���۷�sԨQ��lӦM��'&&�r�q���O#F�x0..��LS��q���ɴH���z�`����2�W�F��'�j4� XU
&S����T�\NA��@]W������ݻ'22rlYYه<������o����?�����^�III��iii��4=7>>�w�޽�n�
�y�N'lݺ�)��I�l�-�h���~�#<�ˉ��bsc4�Ή'6l� Su�… }iiiqz�^�����������_y~�ԩ�����V+�$���o��}-,X�I���>���y�&�����S������ӧ�-��N� ���$BT[�|����Zm��ZW��X�dIO�egϘ1Còl�������Ñ}=�@��mv�}`\\���c�� $Y�e�&�D�n;����FSn���H0.��gY7HR80 4-�(z@q����gΜ��������r1!"<<�?r�Ȁ��2����+� ���N�:uO^^�3f����˗�$I2>::�C����B���.���Z�X0�C�����U�V����ڿ}�.��a}]Z�����V9r���ɓ�Z�0���;b��R���h^ܲe�b��4��W_�-Z��v��srr�7׎�Z����s�=������:��"�ؐ�����X���V�1���{�i�1Hrrr��ի9Y�y?��ٳ\ff�9s��O��p��%22�cY��ʆΟ?_��x��������|c4_��g�B(����1�WV���n )��o�0y��z{�N����J%�$��a I�J���|)(������m۶���܅ZGQ�'&&�����N�<��]:��g�}V��ڜ������l6 �t:'�߿?7$$D�ӵ�|��������<���l>��\�x{f��V�R�{��qK:��$��3g���o��?���M
7�֭[벲��.Z�H=gΜq~[�믿���G�_����������ݷo_�$I/^<��]Kk�_�pa �(�C�9���n��?�f���W_U�<y�t�E��@�eCff��9s�<�6*�>h4��aÆuj@׮]�t:��-��|�ȀP���4�{�ĭ�ģ��@P�Ụ���MNN�MLL,�>}�����ݬY��x��g����k�MQ��ɓ���Y,As7m�T�� 5i���w^�p�y�� ������f3`��:t(****�Vyfff����>Q9��/�4-y<�¢�������:@�, �ϟw��~�駟6u��
�'6lpJ��ڂ ��l[��q�>��qQ�N�2�z�L�0!0;;��'N������E�h��&%&&�J�����*�nƖ���rE9r�_�������gDA@@�ر�cǎ��*bAA���t~�Q�*ܺ��"I���#&� h�~�z����T�TQ��Gہ1���t��?pIl��ߍ�]���L��-�n�"��g�:n0�n���*�w�=5�|Q`0\�VNY�/�P#@Q]��p����9n�X���\<w��ի��|#���i�����voJLL,i<����ldd��$�vQo������l��E�>jnLG�?���fh4�-Ro���,���)�x<+Bυ����ݻw@�^� 7776,,��؝;wz/\���`���8�V�����X6x�`��aÔ�&���'�xA����t��mi)ǽ3iҤ�J���o߾�}��Y�jkka۶m��������b���?�^�z��Ç1 S#�V�������u��œ&M
h�ڜ����/R��*h4���v{Bppp��@I�]RSS�URRRQsc- Z�lY��Ç{�9��+--���H(++�t���m����$I �2 T ;@�K� �H�������Nm)�� �!5 �|�KDD�$  Z ��$�UU�$U�P��sc��0��e�j]��˚��Dΐ�g�����~B� ��"((B-z�̚5k��f3lٲe'�q�eY^����U�X��\�$u�(������wi��a����� P��>|�2�Z��֟�j}V��M�����霫�h� ��cǎՇ�t�xkII �߿?_���g/EQ�7q�D���iYY�ٳ����Ѳ,����t�݃�ju�t:244T7n\Pg�*�|��G"�8zѢE�kx�ɤ��Zǎ���*�G�Μ9�������G_f���l6׶�A�Ț5k� ���g�}�D����أG��fee�"��mHWPX�bE�����:3���������������������Z�W�\����!*�J�2�Y��n7�<y�Y\\L��Z��N����p� ,I��#G���]�h�4��^� #��+\y�w�K�T�Z���Y�A��@���JU S$Y1�.�� ��z��)n�g B���6��0�� �t�T��� p���$�$������q��XФ�2x���MW���.W���=c�;(j��IA� ��|��_T&$$���uɒ%:�7�x��p�j��(����É�^ס>s� @TTz���h4~����0�M�v��9%66�}��r�B�����f�%K�|�z�G�b߾}�����qIBB��|���,�> F��`mm->|�9r��#�~��]TT���z'���FGG/�4iҥ׃����r I�j5�9s�[^^�/˲]���ㅍ��ww�\ݼ^����ǾI�&v�<pW��j����و�h�"o�[� 6������f�m��^��S�N���*���� ��k�5+V���۷o�ٳg_�^miOg2s������Mܸq��0�B�!�rB�|��f�Yq~.A��/���ᠠ ����Tib2�`�ȑj�}���-[V�r��_����s�N�X,j�J���P��ay�G�*++������v�]�v�� �T��q?���›o�yz���T��{JJJ�{�.=x����C'L� �z��p� ͻ7�����Nh �ف (�@�Q{Y��iTAD�,�A�c��{Eu����c�����(���h:(� �j�`\�H�D�p�!�c��s��Iƪ��1I2@��(�i��$��"���G*� _�$���E��� �u�G~(���u�B�փ�m�������f���X����d�~�h�WA�-ٵkW������;� ��յk��={���ܩS���(p8;w���$����{���{>|؅��ꫯ����j��***�<`�5BHݒ@S�9�E��t�:�ۭڱc��h4��!�S[[���o�}�k׮5��Ŭ(��Z��E����V64FEp�\PQQ����Tq�x�aJ��~u�Ͼ���;VS]] ��j�0�1��x>��J�o�$���a^�>5D�H�e?��|��B�!Ir@~~�x���I����� ���� .�JJJ����5��J��o��{��x�_f6��;ۖA������r[����n�_RRҢ /^<@��}3a„.���p�ĉvynt&��uuu?@&��Z�6!k6�wt�m
�s��yrŊ���ꉝm @}}��c����� �on����ppժU�u�ޔ$Ɂ1����~B�I�����(Z,�b�\RHip~�Vkw�V��q\��h�K�4W[�Q�*j5��� 0L�ҭ}>�|����M���M7 $E�@QP���*B$ �IR�e�R@�����߯A�Y����H���-Y�ƧA�:�T��T^ ���� >�i/P�*�EIb ɫӆ�B�1�"���7˚�e[�9@�h�@H�n�$5p\ �A�R�jqԕ$I �A I'.�."��t�p�wm�H��&SХ{t���aD��KA᷆�傒� ����e��|>DDe[�o4�EGG��h.ogv��i8p����F�$��������NHH�#@zzz6M���`��&�
��V�l�a�Z�ցIII��eK���Z�ց�`�Z}b����m��l�)!2�fs~JJJ?�a~y�47�.t%���p��i����y���4�P I� ���CTUU��S�j�Ng���{�=k2/^<�����z}<�q���Q�&M
i��V�5)//���y�k���hg��Z,�1 `o�^��G�զ��Bff� ,�ݒ�K�,�<��S���@6o�\��h&���lK�nu�-[�1 �����9>>�U}�9����Ԗ ���?Ă Ѝ���a�Z�RSS��P���)��K�DRU��zWS��רT��5jT7�a ::8nV]6���f^����`�� ��@��� 0���T* EB��Wc��(��cQ�8D�, �p�߯����.�3��ҌQ�$���ܠR��e᪔�$ ��'! D �b$����$h���1�8
x>X6X��?e���� j�``�k��@�f@�t�& ��H��������y!t�_C�v�Dx��CA�v���� �����i�(
h���c ���PRR*�
L&ӥ�)I���8ؼys �x���!M�4������:44T?hР&�ܰa�!�����c��n������i�ر^�+��t�ƍ/K���l����e ��A4�bpctJ�jjjj���������L>z�������t�MJJ���z����0jA0x ��+I��w��-`�ҥo#��=z4��5�
�ǎs;v,9))img���}��(�V�;n�8mTTT����_�z���� ^k��bQ���|3h�ȑ �].lذ��p���PP�֬Y�F��
�C=��l��;wz
�q��i����̞�;w����_0��[{�+� ��ݻ�0 a�BCC!008�A����v���yE�s�=A<_ ��Ֆ_5�(b�x^�1��u�~x�߃V{����.�y�j��<�Ra��DQ�����z��띶�Z��(o д��� �"^�������M�k% �(
�q ��nP��"��׻����B�T^`Y/�$n$~�1�L�߯���@��_Vc�1��ˀ�*���#��x��5�5(L�z}c�-�_#�>�a�T#�$C/e 5�H�$ cE<��!<��e���uun ���/�"Ӏ ~�X�j�����ݠ���Ͳ�nEdY�C��JKK+�^����,I�z�$i�j�U^���j��z��oMM�c�e9��i!D_ @RA8.\�0���M�R�ʲ��h�'L�<9.idffBXX�yyyPTT$i4��gϞݬ�rS�X�bA�=����6Y���7��VWW?c6�w7KII�crr�7�3������h�ړ�>�lDqq1�������ĉL��; �\. I���@���g�}��z}ƬY��6>�dɒ0�+Bh���?��o^���@�Vk�Z���_�~w :4��qǁV�iB�
7Ʌ ��ѣ^{��im�s՞����b�� /�����c���������x!B�e6��u帆z�e˖�GDD�8~���+�lڴ����tlrrrN[۩�p������N�zƌ�mɗ��'N���8��$b�V��7nܸ�k�W[�ѣG���L2**��?��'Zs��j��h�7Nץ˯I& u�!@]�n֋]!T ����������E n���E5�j\��@V^��"A���
T�����IV˺/Fb�|c �� �Z�`Y�%GX���/(*HRsӫ`�����s�2�������a`�W��� IDATzǜ�[�*�e�n  :��Yg~?� P��d�Y�7��D�( HR�B I����b0V_r~1&� 4�1 ���z��`- �㸋���0�V_���ݴ�~?�$�U��}���χA���׃���w�}W^VV�����w�5�j�����ճf�Z�x��p�7�|��j��$�hѢ&��K�.M�뮻,ݻwWǎ�&�TUUu��i5�0��$��<�c�'''_� ^�� �>y��qAAMg�x<ذaC����hѢsK�.͈���VTT���?��Ֆ��R:�NMM���dZ�r� *�� �@5�0�v��]���ޱc�c�ȑAyyy���R���S��{�<`��f����,(..����.�;w����&==�>mڴ C#mI��a8{�,WQQ�衇:E�D��A��^#I��eY��.�,?i6��w�m͑����`0���®?��8p@�����$���ݛ!��ܹs?̟?z�����j�2 ���� >|x���7n<_UU5�v��V�3�Z��`I�a�~�np��Nv�70$$䋧�?{oUy��_�}��g� �{@AA�j�V� Z�������� T A[ӧBPT��V[��S�� mE\JUT(FvKHB��Ϝ���1Y�dc �_/^��3�|�d2s���\�\3��}�}�]m���SU��%K�� ${� ���W_}\i�������>0Ax`��K����˗皦9��}�����@��0����|8����*�)E��T]���w\����e!~�.��&@H%<� �b*x�Ng����l�F�70��: �q3lȲ���@4�eeA��强N`Y�9��R���:`:k���Q�S��&˪),��(��A:?'�g���@o��6��L3A�@� A�5_7ì[��,�%X��S@�J�L
I�C�R��r8WOD�0� �O�&��D"�?��O�� �R����b����G)�:������}����@࡛n��X�j����־�bŊ'g̘��Ə��>����`��_��[JKK'���꺎 �t]�/%�K�.�bFy�i�%%%�eY���([!�555������Ͻ�� <Æ��y�i^xᅦx<��4͏(�G%IZ���
���1���o.�ܵ�^뫮�Fmm��w��F�ߟu����@ ϝ;7p2�W���h�i���bÆ ��w���=��sF�/�/_�]}��⩘ήi�oߎɓ����a���{mcc�ل�in���4o�;w�������WQQ�7�x�������&M
JJJn���y7�|����5k�{<��D"l����&2333w��Q{�]w��t��婧��AӴU3g��deeA:&�h�&��C����뮻�?�bŊa�m��7�)O��C$��4 ��y�U�y���F�7������,˲� 6�gS��I��Ȳ�mhW�:��·�9���B�����@�����`�����Wߚa�6p�+)���l<% ɪ��9
#�BdB��2��N�d�� 8�4����&8�b�,o2�L��(�1f�3Z�$����MA< b��mu8F0�!!�]OoN$lF=<�z�b��S�ܦI�H[ 8�8ц $'t� w�4�7d��D$Y�$��o"�� � dy'D1��}S}�E����y�4i>�0����6qw�M7��V�s"�Y�fӥ�^:#''��"c ���o�������\�馛�S�e^[ZZ:����3 �x��^4f̘Ne�G���(//����V����PJ�����S9�����;�s�i��>RRR2���<��r@�=�i�m�
BHT���_/�W8?���� Muuuם��lٲ ����W����<�+�-���K��Ra���ޑ#Gv��9�u��5F"�q .��y�4i����b���ݑ���ݷo��h�"����#F�Xv�%��Zrm۶M���D��rO�wsII�l��9_���ӧOeF�'���߰m����y׬Y�C]��2e
�>��'�cϞ=ذa�/������HY�_5Ms��(U�(�����䵿������з��`���M}��A�\8�&��K��Ƕ#�^Cf�� P�8$�d�cT�~S���^� �y��e*�����.�y�j�]�(���FI�+˵p8)K� �@ S�R؆H�b���t� ��#���3U,��4v��'��]��p8����N�)���yt� �,��) ��8)ǂⲛ˫$�p����u7<��� ����� �u�q��_0p\ (�@i#�P�E�D�!�.א>[1�,N�3B�4�زe 6o������nK��d�.]:IQ�����Ι3����_=v�����T�uF �V�Z��̙3��5��������o��m���D"�����xn��b��nY��EEE����HII�䌌��fΜ9���!��_��:�,q���].���k��;�4'�������,Y�����7<����?��� 0������F���˻�ϟ�/v��|SRR2/33��h���=A��h�ٙ3g�1c�d�{�޿���ht�$I�->��c�C=�;��F"����ŋ�������/��;nj�����q���8���CYVqq�G��5jm�eQW0�HIII`ɒ% -ۖ-[6��߬ژ����՚ƐH��L�UiTu����� .����jdf&C�u��v��٩��1�fׅ�1-����3���&Ѩ�D"'��4�v��A#P#e����� �fA���m�)S@��I�hT�a ���#���iMp��!�F������~@2-���6��m� h����1؄(2XP_?>_�O��Q�(��(�BC!I :Y�0�`�6c0 ��0������b^�0#!��q���� ���`��5��DsY�H��h���=�/���x����y睟˩�eee�*���СC�Y�f�X��������x| ���]�/,,|�d�vF�𔖖���| �O�>yȐ!N8t����9p�/I���p���$}�0��g�uV���8��`�֭� ��b���B�y�w��q���O?�4&�25j��k׮�m窪��q�`Ye�u2?S��b�p8�3Y�92����������x�|q�4��X,��\�D�2{����6ѕ��婨�8���������
�$5�^�zkqq�׊���S����o�����b���H$~ޒf����?�q̘1��5�p8���=������—��к�V+����ݻ�����#�W��WYY���Ჲ�/^�w��V�b8�T�$D��������t�>_R�j >_R�Z:����@��3-�0)��QO@)`S�s�� ���l,�1t��8ƛ� V�K�,�i�|σ�� ��e�����Pjm�y��������BC�>_�ގ9�������;�h��v4���̠،@��| <��lHGm�yhCw����j45�p���zu�MŮA��֬.c @�ag�.W�VX��:h��������Xl78�Y����S���G��>L��0�i��tN�uS�4]�Æ u]���c9^8�{��+��<O�&�Bp���ٽ{���]�Gnݺ������9���8#��>���mߝ���O�2ś���֯_��ѣU��=e����(^�����Yg�>|8����uuu�m[��O>��;�����Q�mjjjx��w]�m[<�o4h�97n��b�}C� ��_ AB�W�Z�SUu�t�����u�[*4M�o4�f��$����G�/6���{�<�H�y�~Y���g̘1�����h��yG`����G��8e�;�.]Z�t:�3s�L׆ �...���������W�^��G��:uj��h�^��k]�߷oߒq��9���#���"�Y��:u꘡C�⯽�&�+(X~�ܹ�J M���1��U�YV�>��"�[��sZ}/[�����~�U��:� ��q�!OG%x>���K�ߖ�6q0�)�� �Y��6�j5#P�16�M\zU�x�gِm�{#| � ����тD-t�$����$��c��-����[h8 @)�p:�p:㝎۴W����|��A��ષ�F�s �E��8�O� �e"�� ��n��=�px8\.�T M�u�eY��*��H���SY�w@�*��\��{u��H����{Cs�r���BJ��a�@(���N��4i��޽{�c+,,�o�r��<_�o߾{[��J)Ǝm+�ۿ����x����^�r�t]�g�ԩ��ѣI����Zlذ!ZQQA !��Z�bœ�\s�3
�^h��b[���nj�=K�,�M^��r�w6>��#��s�9#�y�b����������q�<O��cLs��A�nJ���4ͬ��k����h4\�r�C���I)��Ƿ�) � =�_Lӄ��Wc��z�dru�4�1M��؏M�ܰs�α���Jv���B�s�N�����{��^�4�i��G����z�+�pY�I�B�DB��;���+V��8qb�AZ]�}�v�Ɩ�k������A����S=���̣(J`Ĉ\�+ȲYָ�#?��ҩ<o+(�&��i`,�SaY
���cIR5T������ Um��<�a�a��r�`Y�m�@Q 0�?�0��o"DAv1x���<ǜ��Q3/砎�P|m�b"�)�#�<�+]�Vs�+ ��҅޳l�x�¨�PB6��`QM��\�$W�W��hWF���h�"����?|�=Ȑ��.Ÿ@�͆���1& 0܀,25���o� �� ��P�`� � kY$꒤N�X�G1�m?IJ��@$�}Oxo0�0�U�ȨEo;y� #�}D"��?�� :��|9����>��w�}���;�!�moll<!�9{���o�ۏq�5�i��?�����4O��;��C�8z�hRSS������������h"�(+**�ݱ�w��z�7�hlll2 ��3}�Po(--�Zvv�TQ!��&۶�cҤI�&UTT~�a��raĈ�e��f|>�̙3�R
��-7;q���>���>̜Ng�+����'�$�7x���w�G,��ѣGE�ج��%͗����?R\\�Xnn�{&L�_uǎ{t]��t�v,���3)��^q�ؾ};c+��ܜH$&������|���1��(!�EEE{[�5/�]����n��_<=���B�ۆ2 P/]uU���Š���� x��EP (J>x�k"��؋���3p\ed��9��� ��3��k�� [�eƺI����%����=�٬C���Yh�&��k���ܞ��A.��Rk�*m'�����k���4�:�dt�H�$؈V �
�ڏdF���8��� �l�C����q�2�k 40# p�A�����p��D�(٠4؜���e�a�^o�j����>�:k��R�q"q@Q(x�����A���ݟ� t]�e�yE�^��&k�6���(w�Tp�k��+�\E�֩�9M��ضm�n�I��=�x���f�:!;WJ)���:NQ�]�x|�m�Y�d� W�����e˖�/��]����w�9ҟ����{.�w��
�4���껶m�w�=�l��87�|�M˗/|ѢE����O�z�- @D�<�0DUUC�`P��2I�"��&͙NFF��χ��?���ӷnݺ��=�؏n���S�\VVVe���Sy�.[��J�۝�ޣ�L�wމj�v[aa���%͗����h4zvOB�?�|����'�ۧ���d�(������͛�z�1r�H|��?Y�fͬ���k�������������u���㪫���.�m�6�4���5&�h���? Yuz̲�D��@��dG���P�'��s��;��; -V:���6$Im�'�j[��R8�v��
�Z���aX0�����t��� fw-�c��#6d���h#���G�n�ܼ����;�;�! �$��H��Y��Q�*B;q �P���� �"�A l�� �K�a��Ly�!&�F�A� Ng�D68�j��¶mD��Eff�-a(���8���\� �f�O8<OG��>�H��{F�/X��/ 3��m1G��:D�ǵ�%{�����Pm�(�D���楳�iz���PU�;�����ަ������'t�χ+��r�޽{�=p���-[��%K��>�c�r�裏�S�ig�u�wԨQH$����3�<�i�6��{��ԗ�}��/
_�����i�o'��8��� O���?�1��>�h{VV����ii>�\w�u������VRRrv�,�ɢ�����1�b���ͩ��z��̘1���Dc�4M�,��E�4iN6����t]��qܑ7�|3���/w����W_ ���EEES=~*!�\6bĈS�L�Ї�(
2����NEq2�@YY�A�cֱ�3���hhh�ap8ؾ};]�hQ�,9֭[����P�ϔ��=���0n���A<�Ñ��n��9ӌ��R�i��D${n�h[�ev=I����ڈ�,� �*+#u?��`{��Z��xH{�^Y2�;f R#�7��`+A�`�(D�c��&b�����A:`wx BU�Jb{�J��OUhG(�2� ��G� Q7W��#dC�r��x<O`Y,e 4c �ȓ��hk} ��U��ǙR@�����7�'P�����������h��E�p�$u^Ȑ� #�DB@<���=��>�N$+
]Q�*DQLi�d�f���I؄�.�O����ѣ�8����d�DVmڴ��k��������t:QSS,((�iӦO���1��{��=�IS�|���m_�q�TQ��D�MQ:����~TTT���"��Q�UU�ۅ��]�}IY�b�3^��j˲����� ���,�q#%I2���*'��سgF�����|n��� ?���nI��l��-�z2��r������GTTT�.\�r �ʕ+w\u�Uy~����VN�H���?��b�����+�;�4_֭[�>|�����/8p�<hP��P(��_=�iZ�������e˖e�������:������W^٧i�U����-[��r��Uj��0��ႂ��s�9'�n�����?��b� Y�t���]v�7���펿����s����6ƀH� 23{7�"`Y�!�}.�Ǡ(� I&�Q�~C,́�� �v�~����(����=�jՂ�Q�)wG�i�@���/�uv8|��r�� W�D�pt<g�㡜m�N��u����l�J�� v��*xk tS��v^B�
���<aR�©�% ��@0�e�#�
\�{; �
���$~���z}�����&����P��WC����k�vW�n�Œ���8�:������1 ���H c��dX�X�p\58N�U�l[nݟ�G��8�ےҜ8o��V��ݻo.**z��c9�]��� /��ʼ��:ο���Dyy���,�K��u��E��9�㝰^�l� �ϷD���&M��eM�X�@5 �0��p8��EEE[N��_T}��o�\�G����'�|2!IRB�4�Q��C�aܸqRff&�~�m�?�A�}� c ;v���mۂ���k�v_aa�O�eee�/^|ﱏ���^%I��^zi��~P�N"��n݊C����n����I��`���Sx�����C� q���v��Q����!dP�����U�V�A����~����SO=��u�^M�V���/���8k֬�@ ��{�.�H|z�^2x�`h��^x��?��I�A+))���7�x�� $�(5�~�����i������7�`]g��}�x����`rr��J΃��R�P g�����"eb�-R��M
m4�;�����vv�﫪��\b�Ÿ�"C9�r;�k�"� ����>�C�h��a���`[�v����ӂ��ƀ���h�&P�s��Q�)t�"�x|�W�i"��-�����@�$��GwhUt}��4�џ�j2t<� ��Xk%A"a��p�z��i �B�� IDATX>\���^��`ɿy���I��v���q ��#�\��:�4�/��˱m۶��z���w,'��+W*�i�n���2ɮ���o��c����OF\�]]ZZz���xL��q�>��3���"aY�����D"q_�}���СCuuu��|o�B�I^x��o�>�4M:u�T<���̙3���K!�Ǐ����}uuu�}��=�z��,M��6MS�8n,j������s��ſ<v[II�HEQ����1jΜ9^�7��gn�\p^y�Ieee�.^����S�/%%%�b�9AX�i���{�=�܎� �����8t�Х�=�[����w��]iݺu�N���,X� �裏�쥗^Z3w�܁����I��
�ܹs��`0���3�v�ލh4�M��o˖-3���o�>#g���M]�x� ��Y��ʎ>��������_0 ��V ���p$��`����2���w }�` 4�p6A��SlOJ7��Z#�[8>S�4���9VX� 8����֌�ep���"|_>�`2�0P0�f2B�Y��Ik�o{�h�dYZ�S������\I�f����e�:��F�>oJ�eU!�P ˩߯�$� z'�)%p�x$렪����_@�e˖�w�q�F���wީ��������گ}�k��?KAnn.���W�^}�w����ի����b�$I�c����~�ᕌ��A�������tѢEה��~�!Q��y���eCU�ٔ�x p�>Ʋ����:MӦ��?����D^^�<~�IY�H�9"++ YYY8�������m��x<�$ɬ��t<���1Jiu4���?�����W\\�˲�UY��y���9�34U�� I�8����U�V-g�������q��|R\\L�~�zI��{�����ZjƲ����Gyd孷��$�^���q���L%~[P���Y�&���o�;��r�-��V466�1˲v�t:3�N�W����ڸq�(A������c ,�cII�Z]]=�EEE)g��\hll�8'G{��!�Cۮ����^�]w���l��Y�:�ɲ8�-�iE;
EF����=ұ"�3���B�S�t�l�� �>d^��@@����6!
���چI��u��L⩅twp*�e'��9�|���8���w!�۶�v�K/�P(Y:��v��Iz;'Δ�v�,�p�r�d�4ܣW* ��!��(����e ��t}q�g� �;���ǿ�~�����$I7�b���������D),,�룏>z��ݻ�5z�h��g�������>����}��?:����K�.-��|���bS<OBUս+V���qܵǽTYY�2c����h=��� �ˎi�_���߮�������%K�z��2�n��׿�5��<o޼�3M?2m�4��i�:m�Îdmݺ�׌�����i��幦i^/��u]�>z��Q�Fe 8��~��={vFmm�,�4�F�y��[���F0�*
_����|����O�7nVAA�"�26oތ#F(�@ ������?��D"��؃j�`Й�����J-##�*((�0�iԨQ��|�I�N�58��rUU�<�iN2 �w�y���RJ�!�i��WTT�,Y��]�k�YII�4� !>�XeQQ��-������ ;�� B��&���5�xůe1��O����&O�6 �l0cIQ�^�u�9� ��.��'$
/߱ٲ��%â�#�o o��ŐrY��P%&�U���p��zgh����=�f0h>?���;��>�i��Nhh��m3�H�  ���s������:�नW[�W˲�&e�&8�m�3�r�Wל
�3�p� t} D���m}���A}� ��O�1{�eY��c�����y:,��|�u���>��|��\��8���G�Wn�������,����q����� ·z衯3��-X���_(�F?����A����R=�ۊ�ܿ`��]/u�9n
?+++�TUU5mɒ%/�aߊD" � v��_|�>A�|��x<���n"��K%~���9�����g :Tj��v�)�9$;�� S��9G�����P���>�D��ؾ�I������e�J�7N�� O�����/ߺu�[o�uDII�<B�(Ƙ����rrr:�Z�u�Y8z���W�^��asOG?p$��>�h����1cƸ+**��b��|>ߟu]��4M�9<����Ǐ���ٓ�v�_EqIwVlk׮��������|ف@@���f<�IJ)?�ɒ��糖M�v$�R�1Pz��x���<���K9����`Y ���e% IA�\m����BQ�%ж �cj�Z��}�����,���qF��py6�]b�`BX2��;+�N�2��u���
U �L�ٌ`Q�8b�*�1�x� i�3m�"H ��7�Ɲk� �l� ���c9u�cL}LB�,�)�Z��NjǓ@]] 8n�qe��BQނ�]���bYT�S0��A)�U0M?L��Ɔ��rZ��"�q&L��ݿ�Sk֬�d�i�ݲ,����q(
���u��q�_}׿ԟn���k׬Y�i��N�8���<I��;v��8��p� _����ҥ�,�Q�?|��Ji��p���O��I�tMqq1�x<�;S/^\�5[��z�2d��3f���4_\v�����{���۶�Ef͚�����8MMMM���NJi�@Z�I�ʕ+��8��x�UB� �ؾ1cƜ�tv���u��9 �EEE���s��=�R:@�KB.���55� ��ݻW�\9�T�
Y��iI�5c� L�<9c���+V�<�' H�d����|;���?T�-�a���b��˗-[6��i��9�@����7.�+��\<�=AӪ�������и��ن%�^��)��lohh����R�h� �6a�q0�Ac��88�A�A��&c��8l��c�C= v#�Ǿ׸�"C�(tc�?���u+ Q�1�Y �<C�G���.� ���h�(�4�,�*���#6���۔)�f�%�p�����7M��� z���y�1�|�0&'*���������f��Ω�d�Yi���r{�J�4������4�����7'M���~�T�H4�0��{ �N��k���in@$2� iۦ>��z���?��ѣ����p@UU��ꫛ!Cl�v�v�m�����<�0�H���(�����T�e�������r����~��W=����&�{�M�֧�v�<� �@�m�a�ȑ;�8���-:��4����o�u}�5k–e��4mIaa�;-�����i�y�$͗۶�k�.5����>EEE[�x�?��g &L�p:�;�>|�6m�D�Q]���i�A��p�?�Ҥ���,O��{�O����g۶���l��v�YUUU�W_}UE�� ������b��z衽�@`Dff�b-)�� A�'
b�����8�������i�guuu3��� �2����@,Î;�ݶm�3�,{EQ2{��L�χO?������ZQ�O����Ȳ|�a�%Ib#G������Ç�p�D��έ�����[?.y�qjY��y|iL�bhl����Ii���B#EN'���H�x#rr������hs�p��c6G~G�h��0��k����Ǡ�&S�U)�F��@�bJtWh���s�H�ͱy
�2�"}� ѝ���f�&����J 3M�q �v*����4sp���,��;�>�x>�#k� ����O)�m���<��N�Ua�
c�>�M*�M0�2�� p�4��.�y�+~ ���N�iz&'���~L�<Y���O5x��V�^=�;�l���U>���C� ��i���펗��t��ߺ�[: BB�Ͻ^o���vwU=������?���c��=��^��[�B��� ,x�d����������'�`i��ڵk��<y��1c���,�_���1�!# �ⵃ ��iӦ��i������rC)EVV�QUUu6�.m�b��쌌NI��=�1lٲ�q߾}|,#��H �O�8�=z�h�<� 6`Ϟ=�˗/2��y&����|C!������v��aX������t�O,�������7��ht+8�_�x�7�@&o"�M�]ZZ���6kϚ5k�X,v !$���p��(W��8���!s:��:u*,˚1f����x[nV'N�� &dWUUe�X�bwVV�Ђ�a��P��@�� |��:t�cG������)Tu �ގ�O�fC׃��ZF��5�L�@�Ð�Z���7M�&����zlF�^f�m�y�c��WNϙS�oA�8�V��IqYh��PT=�3�&�p�;��v�����MNt� ����Q��`ʕ-K!RJQ�ql;����:`�o�8,��dF2���Ym}���m��ڲZ��'���QNE0����>��������Ix�?9E�}y�6m��w�ޯ9r�y�E]��C��?��4M����]}��2.��"l޼y�C=T�����]
��'<��C1ƞ]�t��޺��jn���X��錌� F�1���Ǐ������������W ��X|�gTM��)**�$'o����,˚�q�F���n��㙒$ �נӜq������ß-Y�䩮�Y�n�X__�J���� �u�Vf�6'I�9g�WNNN�;��.�ȣ(�7����A)�JJJ.(**���bNsf�lٲ+���Ho��9��KL)�Զm��E�$�M���v����kZ ��5k�h4�5J�۶��#�o�4�f���.�h�/����(ͣ�� �=
�� �o��;}�t@'UK)ŠA�0w��Q� ���3˲�����+��3�'�`Y�p�;&�����)�a���4 0��' � ��j���e�.~���[Se[M�� �nJ�[���8@:�S
����)'LK���k����m�v��L �| z��uqp5�� 0�)\�դ��l�:�{��D1��,τ��G�B����c �F��m�΅$���BΆall]���܈D$x�}��,�x\��ew�u2�,�)Ͱ��
���>�˵��a8�Ord_>�͛� �HDp�#�<r����X�5aF)����� �����o|���7 ����OKKK'2�B�G�u��ҥKϹ�{����c�…?\�f���`��s�9��L�(��7o�`Ji����Zp��N�m�'�mh�}�Q��C�b���"~����Z���(�Hcc��+�����!]�/<�X �h�{������o=v�}���\�/��+������2|>_�*��0c� �|��Alܸ�A_9���9��]]]�ܰaC�+_�����>�׋P(4���+V�p�<�IE�2�� ��EqE��mC�lX�ˊcȐ����d��� ���N�<�Ї��*��7J�%��:�y<
&T6O�� ���t݋x|<8nx~ A�W�/ f���q������p8:����zdg�ձ� J��pD���f�$����k�ů&H�SvO SF�3
1���p�XP�9)�����਱ ��q �@����9܂�_i��a�)[�Tkw���1�@�J�rȄ�"3�3]��Sd�['B.ޡlP38���3!<��S�#I
�4�1H��'��z 3�w"��.�u`��I`�;譿� ���B�%؄�ahj��o�m��Mˆ$���T�a���8u}����1�k�,EOp�'��+���"�r��W_}���]���tÓ�����|��.ݴi�ƕ+W���w����gee�������[O?������gD���o��Gɖ$銂��n[>u]Gff�x�7w�}��O��.�~b�ƍ��ٳ��F3%I�9���W^y������?����i�ȑ�0�\����رc�X���ѣG���o�aبQ��4hйS�L�j������oΜ9�}>ߵcǎ�B�����^��TVV��������k����|Nx��7�����j�ԩ牢8��6J)v��Y}�<��oƁ���$i�%�\2nҤI�g�}�bY���S���x��,���s`, ϛ7k����ȿ����x�n����=7���^vٿW%��yA�A�E\.=��hҦ�@�48�ฏ��ۈFAǀ���g�:� �Q ���6���p�r��x<��p�>_]�� ���p�T�|�~Ѷ���9��K���b��B� �v�s�D�Av��f9�@AY�,/%�ⳑpPDl��A�8hE���B ep�Z���/�)7���C�:
m�m#���4�!�Sh"E�́ %�-xV�����5��Q��c�� ��|F2��qWu�r ���x��vPJ �
��P�d_��zNV46���KV,�6C$�5�\����9�jB���VJPʁb1�й�����0������tt)Oƀx�\(��Sr|H$�CQ������H�`���4I�|[A)��!�_�#�I�Zm������|�8q�RWW�_WWwGmm����g����'*����Ϙ1c�o�y�4��%����ߦL�r�aC���R^X}}=^{���uuu�����7�Ї]�C��p8Z(*���~֩�nɒ%O ��O�����c��Ӥ���A"�ȋ�� �����޽{?�x<?=v?Q�2dȗftW�ڵ ۷o���o�%O��1Fl۾b�ĉ��WWW�4K�,�kٶp�˜��O=zn�����xvvx^<�E9�G�$%o9�"�f��?s�:s��?���o�Yu���w�26l�#�\�ڵ>�Q��BQ� >
�-��@�ph����\ ]o���S@�e 봽/3zL��P�η%��@i�u|�, �}YY��&�2���F���E��#^����>L����C��e�p)J�C!'t=��s�X��ݯ�2���4�>ۀ�, �q<&$��4��<�bf�X\^�a�ܓ,8 ,�Gp�LH�����P���9ݤ@>�(2D"�$��B�8)���*��ka5*�z�� �ņ��) hh�!��PhژV� ����r]���@�&C�:���@�!���,45����$44�BUG�ґ�x��>N6�߇��4�u8�mS(�eU��@ ��TCUSWe�A�}�`Jsҹ��%J�s��^��/��P^{��>����U�Θ���n��������?N��ھ}���n*,,�u���"-���0�oll�QQQQqW��u�]wm߾�����6q�ĞM�|�7o��t:4��s"��%7�p���i��uuu�א�"�H�������#͙����s׮]���+��q8ږ-[�Ĝc�3ƶ���eY ��7����?I�8I�B��b�;ffV�չ�.]:)7���]�$�����C0;��:��0�'O�F�R
J3Z�
p�3���
U!�'�jZ GG�`]��H��nguC��ѴW@�v�-���C�c@���!]_�a�1�� �6�;��x\�i�#��|�gp���h�ܙFirZ5ϱS2 �0�FQ��y�m&%�ss����o�I�c�d �d#��y�l �����s�²f��j���*��o�0����P8�.��Yp:���' .�����lY ������zX%)�x���px���r��˅,!#����d��; �;���g��|J��2@�XZ&O����x��Ӝ6x���_.���$��UUU�� 6̫i� �]gn��[�m۶����б�]x������T¦p?�x���/~������JL�,z��j~����M�Ӝ|<��������… kS�����!C�|�PQ���8Ҝ9���]Jٟ��3>77���(���r������� MG���~^����?����6����iӦyc��]t=�v�͏�*�ۈFMTU�^�*��ϯ}LQB)��}� �T5���M��UU}���AfvȚI��h�w9���$u����0�4ӬD �&�u� �)i�o��@Ā�6�b�Y�; �:��>�o_�\���:���N�E������v+hlL��\ �sm4��)D��ĕ�!� IDATmA<�Fl����C�R�.Z�@e�2�H��l ���Z����MD�N��8
MM����^��v_�x�&$b�픒N%���>��}���8�_G(4���9�@ ��cɡk��Z�$��3�p�
�L6.��s�+��h�z�|>(�`p(�A�x6%��"��I�����a���cu]�Z^^�ز}����ḹ���w�u�]�7o^�aÆ�c���+�D"���q���� ^��E���>��ҟ&i:м�g���[��֭s���[P\\L�����k�^YPP0|̘��̿ �ٳ���v��߱�9s`��1b��|�S#۶m�P^^ޤ��/�D#�����P\\,gdd��4͟�;�N�6MIz�v�0�:�,7v��Y�!IM�(�س��=�*Β���O�� B�h^o��$$n����b9����H$΂,�U�$I�'��H�8~�� �x��VK$A�|L�48�mm����de�۞�0>���<�Q�F��i�d��2�T�Pȏ�6�.���1�K�E�FF��H��A� JX�~bƒ��#` ` ��fN��x;��poyb� s A"J����H���y9� 1ӆ[��5{��(a� �ۂ������euuB���> #��,��-������G����̶ X�X� B���=����=<�CQ~���������ײ, 0 ���LN��tT�5'�ZIc��XV}��S l{@��c���LP:^o�,SO�ˇiJ��\�H �nh�h8�_�f ��g��㣪������gά��ŰD�"�(�T��ŵu�t���v�Z@I�����i�j���^mk+.��"X-� � �o!@�,�Ϝ�|�LB&����y><�3g�������y�߯w~��@�Sù�[��x�v�ڭ���g„ R ��I��-Y�dլY����1��w�=g����5k��:iҤVS�� A���5\|��������fY��?�]������7i�$߻ᄏ ��  >y���?E��9眓3��UƲ,��qPJ��#�L&��8n{4���.g,���,]���}��0�(�سgO���6��������y�:�D��amɒ%���^[[�
�B�Oii�ZX�L��m?�t�v��Q0 @)�u�n�1~�3s�����c������o �HR���$E�z����*�:�����?�QԆ�����5�� BU� ��'�i/�T��W��q(���&��
[�o$ ��>�<�[Up�<Ӄ�A&�m���iVU ӧ]J<�W�TʀכF.|�,�A� 'E�Xc�9+> �`$������(�@�PK���k)|�y��Rx6��C@@ۙP��O���� Pf��(b1WI�������a|^oϒ�dy(Dqps�i
Ӵ�"��e{5�Ȳ>x�w#�� ��&��[6��i����`���AE�e��N��Od�����<2�Rx<[;��h�ζ ��S\z ˲@)�|ǎE"�o_}�Ձ��R���O\�hѣ>�o�-��r|}�z���+�����ϦM�~<r�H455�4��5F�W�������]����B���p�),,�t��Ƀ׬Ys�e�]�=�c;Y|�� �`������&����2���)(**:g���?��qrF�\��̘1ctee�/�H)���Y$�pf͚�XUUպ���u�����ey�'�|r��f�� �gY��f���3 �4�"/��ܘR��)X�����Sm5D\�`����m�� .X6���T�^o׌�Y���x����؏IZø�\Хk��3����Ző,K0�R�R8N�~~���|�9�����d��5͆�{�5j��
ѵ9[�{�������陀f ��b�֯h
fƭi��V��"�.�i���F�u���=��5,��4�B���( h����!p����H`��E`X� ���F��u{nl,� ��XD"A�� h���rd�E����B������i~��j8N�F��] ��������!�M�0˲��k��B �}M�J���b�]����et]���|Yuu��˗/���ӧ�?^�ey�� ���S=�ù��[�x�� ������7�w��x:����8���p�SYYy�e�]6���Lq甭��|������O�4)8dȐS=���ax��UBH�R�4��y�歮���,
������{�^<���t�=���x쳺�t������ض=ٶm �U7.�:Q�}�����H&�QXرT�R ���!�\6m�'7��hI:��=��t�,�Srgd۳���9��,�T���-R��U��{��Hs�*�Z謆ҶM�A(�&���
k[ϛI2 �Y�-� ���Ā�Ns��R��V� ^
c'��tσ�C�.e(n�M^��dϙH�AȠvQ�É�c(*����w�d= ���t ���D��e8��t]��l���.H�(��ef���(�,�0 �.!C�8�E9���i5���v��髂�G`��Ϸ9�+t."��P��e���8֭[�mڴi�]w�5Ȗ�������G>�e�J��|��{g+�'�%K��<��F��Ҝ9sz%����)�-Z(�D۶_��P��d2����N�81���Y�.��,�+��|8��o��I���~��_onپhѢA�������W�>��D"1�3�0���t�җ.�������۶��!��iRX�nY��JY���B((@���`��QƟ�|�-�'o�q��W����N�� �(�]�1�뀦�B����������^l��W!z���ם�DQQk�)�:���� 0��G��� M'X���a� �׷�-�ɚ7ٔ@>Έ��Ɂ<�%m":���W&��0F@�$p�]9��®���6�eXۖ�Ӏub�e)�����TF���3Og����������v�i�G���q�&�a0 /,���E�z>&���D�k��x�bYTu$i9$�����R��L���� 7Xs��|��Lf��ٳU [^3t�Ї�L�����z�X�b�3��ڑv䷿����m�s�̙�����>��3��������fM�<�߸q㨃n߿�eY{dY�����m�P�T��4��"~5M�o�I�R{5M������ƫ ,��qܗ7�t����?�t]���_��fѢE:���/�۷�{��Io�l*#ߵ��y#F$���!�W^9���i�8q��|p��>��N����� �C����!�p�D�����x�]�=�,����X�A�X���)����9HR�&éTyy ��F
�`['7]'(H�S'p��8����Ԋe�F���`Z�˭�Ԭ1� C�8��k(J1��)
�r� �"�u�!�0������\�q��PP�m�L��q �r���gϲ�:�J�${nJ[� q�q��+�&���H��fv,+�qxض�-��4���R�lD��.�;r9}�8>�h�@D"k,[�e�k���a�7�A�_��x<,��?`Ȑ!O���<��zQQ&N�X�dɒ�g͚u�)�,X��t:=s�ܹu�޻k���Ӕŋo�:u�9%%%��b8p�v��?x�eٔ(�o��+�M��q�L\�v�� Q�D��Аr'
���x��u=g�u�7�Lz È3 �x<<x0�A}}=R�t]�(���l[�uCEEŊï�hѢA�$}����O=�TRU�)�N�}�|uY�d�'����g�6�0 S������{[�c8�0���1�p�7�;\}�^4H 9P�͋:��6E��M�Ӭ{8N����\3�L�˖�n!�� ����-]jc��>��8@:]������L�YG;�?Af��qr�\
��� j�^�p���Fcu� � E9z�6�@"�QLh����.� ���Y]�e�����4u���l� ���� �q28�5��]A�q@$2��Cp�
��(-f]ٞ���Y�A$�I<��s�w�}wa˶'�|��@ ���_<�eۮ]��k֬Y3s��i�f�m,]������0̧3f̘�[��z���@<όO?���@ 0���`Ĉ1bD�{�9����߆aLjhh���Ẹt�m�x���������Xl�0���2���q>߷o_ ��v�K�aJ����//�,�����L�o�� !D�;w�\�S��/��o�6^~��Z;E�#��'�]��TVV~;
ܿ�J�~��7VWW_K)m�B����� ��`̦�>�H<����e/�8��A�$�aY���I&�Ł�yBH�Eo �MaY�!˽#~@Q��oG:��2�ރG�߲tH�z�6��ۯ�;��
rׄ-���1��eY�.F B�@ ���-�+��^�ȊS4�23 �:`Y�8��m�A,�(��w�5�vd����"�����R � �%�z�����>�x~�F|�ⴘu���3�χK.����^6s��[��o��xIQ����� <X�8n�e�޼�[N�fư,�X,vUo��]�9�y�G��u}ƀ��_�Z��z���� ʋ��ʇ �;v�[\�rZb�����d�����s��hѢ���b���Qa���� �XVQQ��.]*Θ1C���z���N�zQ����e����{��/���b1��O?����XЛ���������P(��X�#.\8�Rz�ܹs۹WVWW���ZW��ظJru��l�%��E�$H$��
 +^c����z�u���8��#�u/aT� ��}ѩ8O$"����.���������* ��'�V�V���V-�����E=<�`����D��� ��5��R
)!Y��l
s�m��b��L;�-�p��D��փe[�x�R�[��l��0x���z!^�b��g2 2�"�b>D1��J&���g��r�svqq9=����矯����[��?���������`��Y�k�.���{5�f�*�y��@8���p���u�+�Os�,Y���ѣ�=zt�u��a���O��,�k�L�R��{�W_}���~m:޸�<��ӉD"1a޼y�:ۧ���Q�L�4ibII 6oެ�ٳ�A���^
��]���t�ҿ�7n����=��d�J� �"^{����i�A)����eY��q�K8�{rΜ9�{�~]\����*4}�ں`�=i߾��o�q��s�n��LP��Sm&�BM!�mb���>_Q�#r��m�(�,���T�x�czt|W��"�x��/tx-��3d2<���6A��,����l�i���>�I��Ir��6��R�#>�f��?t�/����V6��@dp\�)�iR��n����VJ�8��6A��i{�As]��@;��f��`�bHR�*�Ŋ 3 �/��˙�����&��s��I@ee�������k�iM�vuuuX�r�dzgϾ�ԍ��q�i̲e�x۶�j���_|�����:���qUU�����<ZPPp�u�]�F�]:��fǶmPJ[�hN�$�R�z��J����'����躮���Oٿ�Dz,_F)��x&3 �ٶmg2��UTT�w˱�=��{���g� 0�qb���Μ9�[Ǻ����^(Z���?� �0 �_��7oNȲ�$BpĈ�u��%A��m���l�o�ť����=/L�����$L3D��|��L=?�[�~��L�"PKY�K��#�<HR�V��!���ܪ�pt]D&s |���yb�& c1�=G���>_���tڂ�l�(���G���u ����!��sy>�$�yK��@) ��Ѷ- AJ�\�� J���>���r�L��M3`Y��z�:Dr�����BU}`�<��Ux�6E*U
I�,�+�I\\\N����iӦ9��孮�=�Ц���jDQQQ�������"��U�qޙ3g�5�r̽�[|ӜVw_ee�sk׮}��� >��p�5�6o�<u���?�y�#˲.H��P�T��4�R���ogXv7��V�O��f�ض�!�e��m��a���� �y]2�X�v��e˖�m��UU�.I���t�7��\зo_���0
�����H$PWW7a�ҥߞ1c�5p�m�M^�`��555�[�~�TM��+���X׭��(��kcǎ�4�Q\t�E>|������ACCDQLD"��]}?]\�Eeee>�>�g=l�X���I�u�Ĉ 4�7
f !v͘����,Klm1dY����d�0͛������)�dk_���8�Ql�aeY@a#�9�i/r�?�D*�"��������w|>�DC
J�?vL���~<�����?.#�X��-� d?7�,�q�Bӂд���4&�N���B)`��i�0M �� x�(�a�7
M �4�B�/˺SI�3�����v��)�V����O>��OW^y�G�4�b1�����-d�v�>DO1n� �����`��믿�?��0 55���Ͽx���[�(�����0f̉M_s9s0�(T�(�Z0 �i� �q �v�_Y�](ϋp�tz"<�k��k�l��_�����i��4�%I�WU���)++�80�q��+�4�����Y}�X�|9[[[��~��;k�� ��Җe��8Nb�С�N�>=G��˱����(Iҝ,��B�z<V0L��u+�k7B�n����H�Y�_P�|ע��C��"8 �F�"ȦզR ( Q��W��
�d�C�n:�=Z-˂�/F P�n��}�[���Bb?y� �qi;�d�1�^I��)�ڗEpPDz��͂G�E�-� ���(�R"�R����3�b����=`�(8.
�%��ۦIa�:(��8l�!��7BXp����q�5�kY�>��^
ǹ�0�ל�]\\N ��T�a�Ϟ=;d�T��������8O<�D�R:�{��z��3w�� ���|�}��7�g�Y3thS���|�~��qc�p8l���U颢UH� e��O��FU�!E~~���n�����L��R��aeCG�m DB��Ga�q�������f�� I��]Dz,<��6�0?�8���:�C� �ל����Ν;�F�����;�3jԨ�,�ݞY:�J&�����<۷o���p��7K�.����3l�0���E(j.#(�j�HϷ
��@aYmu�4�n:4S�h;�q�i+ִ |>ۦ��ς ���Q�"i��e��0M ��E��)�������d#�͒rE�4��z`�,�~���&E�� ,C��c��'H���6Rp� ��D�U��.c����bz�\��p��d@����ܚ���K �G��T�~�m�q�� ]���
�=A������r��²��ö��qe`��y������C��PZ�q�!%�1`Y�����x7n���~`!L�>�~��.}��'���'?���c�߿�bM�p\|������?����C��5 E�4�)�:(,<����J��zd�� 7\�LR�@��C��RH�~�2�� � ��P0 m�I�,�q�@U��0�cP�R�x���?�d�u�����+VD=χ�,?7q��P��\��`�ƍ��idԨQRmm-֭[�m�ә3g^F� At�%K���8� 6�Ga��Ç3/��b��(7ϟ?��.=���}�N�3�����d]�A)C
�m `Y��-c}�eB����9�Վm3`٬1M�e� H�K��w�aX�v
�ا���UT:��\�`���Eض �;�a;��-HwxM��dĜ�|
G��~�#�w��,p� F �e0H'�8���t"�;o;��00%�D ���z:�;��LS�y���S�C쀪��OWJ�'B���+6 `4,˂�8����f���Â�(� dX���㶻qq9^������f�9���iO¶�Bӊ!�W�Ԍ��{��q�v&�s�̩�Å�<�̗�F�p�Сo�+(���3� ������q�"���w[����g����~��I�0�A�i���9����T�NEY�#��Dt݁iF���$90 ��*���>X+g=no� IDAT� 8�4���E�@���ߟˢH�oA4���+Wn��M�2E8p`�(���Ê+ℐ�aY�z˲�ڶ}k�nO��o��~��}��K/=��eYGL��R)����{lۮ�u��x<����\\��ҥK_��˛ZVV� 4`K���@�v!J#�L!����m��,�V�:;�M���i���
IR)�� Q$hj��G�����S�=��6H���:��LF ��Y��N��zw�k�ӂm� <|)��#�0,#�@od �(�‘ lp���x�9�y�"��h3gd5�P@���c?�R)�b(J�[R%�8�^�|�.���r������s�LF�w@���1544`Ŋ����o�z����7`���UU�y뭷^t�t�q#�gku]Wy~O� QQ����KR���J��2~1�X��V�
�a$�q� �m ����3��`�RJ`;�� x�KM@*���Phb1���!��U#j�)�馛d������Ř<yr࣏>���zi"�8�q���UUU]���Be���z4MY��*�B���B���C<Gccc<�L�ӦMk KSJ���/'��h�v�(���A���P��1�|�)..�q׮]߫������{�y�����\V��@�a�r��*B�!t�&��2m�M]�B�)�5�
%���0�;���M�fSl?�)~�e=�,�3��(2�������u��ǘH�q��dÆ�[l
��� �0�l �8`�!��)�q���+����`�O"���� I�n^��g }��2�Ÿ���ɧ��<��o�i�C����q�b1��|,���
L�:u��ŋ��뮻n:�:ɸO�3J���8�@��}T�\xa}��d6�b;��'{�.�J)2����G2�����Ϸ<Oa@r�@�9:����mb���H�x�F��z ��$��}8x0hn�J����� gw���q(++C�>}꺎�^{mӽ�޻���ZQQ��c�=���>hY�z�e78�C��޽�����4ͤ���{�ޟ>��3��^ڸqct����d2�D�>}�4h�9����@ p~SS�1ݦ]\:��@���?x��盦oP��o߈�q�c��k 90�1�ţaY6�UX�6�8
X���B|`]w��N�m�
��C�?��u�a<D1w:���C4:�@-���ς݇ ��B;@�IZ�dI6��������s��s<-B�8���| d��^�fd2�q���˩&�S��٬�#�]�"�Q�� �|� iC�E�g�Vy�W5M���ѣ�~���_�4��w�uW� �$�
�3������Dd@��ַ[ov
�)8��s9��z��>�i^�~�$�S*��z!�l���`;Lvr �c)ؖ�5��y�c,� ���9tϞPt̘]�<�UU���@ �O?��i>��� ��\8n�������(�?����RaaṫV�J455-�߿�˲>���WJKKŢ�"���;[f̘qGw����w�}���<�ƞRՃ�����XVG���H �`�!�x��N�XAZ��&�i��4�[� dͤL3�t�n� �����"A"���`��W�χD��PEIu���,��Ȃ�O�ib��!��;E��d�������2T�O@�v9����n��,X�_���s����!l�B���CQ 2,��4M8��'M�]\\�L&���|�hs"�m
Ӵ`1HR����� t� o���� ��WU��t�}����|����~�����׿���㪪�FWTTDOȠN"�>C`Yv#�0�v?;�϶�v��rZ`��  ,��$��M�� ��Վ� 4� ��F�j��!1�$�HP0��A�D� 8��0�4�a���+jj
(�moн�[�X,�8Ύ���Q �d��ޝG����A۶���� �����p�������-����Ik���ٳg�ZUU���������3����_~�N�Rv�&\\��~0��'���o}��Œ�^���@��`Y
���E����D���(l/*\E��M�&"�?x����h�8��DGoKC)��8��ԈeY�`�rM��x<�Ǔ;�a���z��g��) I:�GˑM�+�a�d�P�Qs���q�CR-Z��>�_�^{�҇��4A)��Oo?���a�L�����4�/|��i+�q��m�6lݺ�6���a����KJJҶm��������N�6�Ժ���|Eq��"�a�,�R�����t0�H�0�AڜIR
�m�����={����c�����~��SS�N�/..��OX�|�r���t��eY�����j�J���[r�F�r:�����J��#����7¶u� �h]#07�(4���J��r�@�@*�Am���ѭ����F6��7U-�m��
�L&�ض���x�eF����Yyy����W�堪�\8�� �!�'N�\�n�e��`�c �l�,kۜ9sv����D�Q[��7n����7+**~߭�pq������H�I(����C4:�� �er���A@˚�\*��qB�/$�y��<Ms ��:�l_�U`�:���B���v��yd2#t.�9��� ��E���^Q�A�}�F��C�$�C*2�Q�K,�Ez���A L�Vw�3`h;Q�8E����H��*H3ŴIR����1w���7����|��k��V����gY��n;�DO�>�=�����G<O)���l����n������_�x�������0aBG�~���0 HҖv��Fu���U�R5дH��u;��ln�tbp���~����G����d뺎իW71 㩭�]��6���+��.\8i����L$��'�~�$A��Oh\N-�e�a6��z�,�a4BDwdk~��N`ldᳬ�z��`!��F:D
�c"��Gp��T��T�T�W�0 ]�Z���w� ����][WW�ԣ�>�d2�,˚,�&����э7�|��3��vۂ?k�<b�`�<���ݻG̛7���G�������~��+U��L�� |�)� �χHd���:VBQ�]��L*�t d9+~�Q�TԺ���c�*�2�/�0پ�`�[���"����ܿwo���0�R����<�!�<��H��c�A.� ���$% �f��,�����xe������z��'[O�(�u�W�Ɋ%Y,���e�c��+_����sO#� �� �2����L���
`�����i<�'��uwI$���8�i�WT���#_///_��o]�߯���N�p���c�k��kh�pi�E�<k��ՐH��4�����8U�PvB�XPPP���c�MWTT�Z�x��[�n��k׮<�㊲���}��W�_�j��: ns�3�iӦ}z�W�E,��X,
�!�4 J��S����O!�E�z�.'�8�y�R�&�Zt' 5��M���%��:���J 4��(���t��4�
��`��`�)��i�r���C]]]Y,�F�M���X�e���o���v�u�]�`�����Ӌ>���Q'L�<y�ʕ+�8�7����z+�jժ�+I..���O��[I��
�7��>^)DQD*�i���f�1LV�6�i�&�x�<������d��Y����`���ίM���������y�|���><�z� Bt� �I:�ɝI'�b1 ��v��6n<$�� �4 �s`Y<o���\s��G�Z�j�U�>��w���O�����!�
�b r�)��b8�}���.��ٱ+V�ȩre��g&L�p;�f:<aM�@��B�;�32M@U@�=^�.���zk��o/�X�j՗�����.�Ǚ}�y�u�3���˱�, ��*<���m�L~��s0B(t���0�s!'&I#�H`�޽�X�r�{����7�|��s��AD]��Z�jU�)<���~���,�2eʟ�z�ԉ�F n�4��\p��z����1����Es}A�� �������Bi,���a��ɦܱ:Ĭ�Q�a8�~�u�Hf� ��l�RB,P
0�J�5��A�$�p� ��[�b͚5}-��w�0JV�^� �0~�hѢ��em;v,�v�ڦݻw����o��v�R���˩�����s�-� (��b���'�(^��F�8�v�'��x�(Yh�ΦA3L1D1+�b�"��,�l�Vd�쐗��t�����дǑL^��������mEEEP:+^=� �R�T�,x�O��r?���D�&B�d�ΟMLa ��P�|D"����_��9�����t���Ʋ,%�X��\~�+��Vw?���ڵ#g�Z7����o�p�*@U�AQrG��<��\W8p _ߴ�`��~4��]=�a��`����շ��K+�i6�?g �E���NK �h�O)@ȉ������9�����Ϟ={PUU�|EQ�?㩪���q��$��n��s��^���1�p��z��9rd;�]�e��l���[�w9=q�d�`R��a�1"��������&;L� ���8��r&[gfx/��X`]վ�a�СC��b������>�$�S[[����v"�P�����~n�޽�oߞ&���,�_���L&�o���?fT���t���+���-�<,k��F(J=$Ɂ Pr�áp ��a�} IA�<�mS��c �?�v�3��]8j��\7�<b1
����ק��8�WšW_}u��8�w��"��i�彐3:²ϗ �� �_��5��K��˗���t�(̟?����ʑ���[��� b�{]��o~�� z�'����sTU��ŕ����������!��L�C�P�܉v� A(�r��\��U`l�\���V�d�ܹ�Z!E�F�U�󫻸��¶?��K۶ ������|~ �ĕ��۷/8o޼��sLEE�� ,���5��������˲<�4��h4zMo��h��4���U����}�&._ g;X6ݜ:���[%`�[nX�����0������S0Vu`� ��Ph*)��qLpB�v`J)H�l.�H@UUl۶M߱c������b�(���+
E��A�0hРh�Iʦn޼k׮m4 �v���{}7 uq9C�կ~�����
��WU� �H��L�� �1@� J�p
J��A
��e�TU��] ���cf���vt�B�e������[d�7o������B��dYƻᆱ����}��=޷�>߿ ف�����C�J��l���}S����;Z�ڰaMw��|��@С�x���66��P�� k�����W~���=���g��i*�4�D0�y���dS�����>�&�7�(�������_YYY&���������ee'������
����]F�a���]v:��z�2;�oߞV����<��EQ�{��7Ϝ9���GUUU���=��?g͚u��E�~�]�Ӟ�
�Ӕ� �cܸq��u9*��m�N)�e����􈎛,�v����N����9�������`�ʕv^^��T*�ek���ӄ��X����8L�2��J�L��زe ���j���>EQ�N��/͟?_�ڻ��rz��Y����"���[EdY�mg#��Ӓ���g��M@iV��� ���u-*�]��z����4�3��J�G�X�~��سgϋ�v�w�W).�ݚ4�a �?A"�0��ܥe���0J����3�e����ˎ��M7=��p8|�رɗF�z�R�g7aY,���e��.� � �祥��/ ��t��P��`&�C� �X,E9�D���R�rW��y��iӦy}>DQ� n��ť�ɶ�k���0<���ڑ��(J�sM�F�������&|��';���Y�=6��l:t��s�9犅 j�m_UQQ�vwϳl�2�0�78���J���^'�\�H\|����3�^zi�^�|��m��eu"�ه%Q(h$[O� ��yvv�c�[b ��Q�2��0 J��MB5M�,˯���ϟ?���p� //�%I�*'O�h�4[����F�m�6m߾}�T*ePJ�n� �����7���4¶�>���eYx�c`#��A����Ҽ�D��;hZ�>�8�`�J^8n4t}�Qk��IJ8z�-��PQQ}�'�[�~��i�v ��֬Y�o�1ԭ�tA`�?E&s<��}<��l�bQBd�h^�k��9ͭ�L��i�(!dﱮ�S.�����w��7���l�����W_x���/!C!�̝;�����W~��U� ���H�žǜ �����bױ�������,{aQQ�VTT��i���K������+PU <��z~$���L�Y�aP��'��}��iZ�;k�ܹs���G���x�����_~��%K��}֬Y?��y��� eee���խ�3gη{2���}��TVV^���7rРA�z(.�9�&�:�
Ֆ�d��NY��e�As;�.cI2�=�C �²BDP��;w��7n�QJ?���;�#��x@��|��?���ز,����ߟ�F���i5�x�YB�Ss�έ�7���4�RZ��z5^ +�a: Àm;0M���J (�p��@�Re9���"��c�܌���r?��O>X�p������˗���b�����a�%����&���;�(�b #�x<�6@ð���X��� �~��y�����!,�B���������KlΛ7��UW��[Z����<�*!I����][�����c�WYY9^��8��"��� 6xƎ�^��� !p�b[[� A2��ޗ3s% @��[S�R���2ƃ�������o����?�� �P��n�!�aÆ�˖-;/�TVTT<ӕs�{��TWW����?��q/��xΥ�Y�hQ����~��q��\�N:���!I[����J5����M,�M"�uk�n��������=& �y�I�\njo���E�F"��m����,k�� �Þ���ӧOo����?��QU�ٖem�8n�ܹs�������t�����#F<��o~S<�޽GMͫz$����Yy#G�ł��Q�����믗����w:AZ�lٞk��f���д&0L�Qலy������W^��ž}/|�ᗗ��w�}>3S��1dHmI(T'Җf�mU� C�&~m���q� C��{���,��O|�f�`:-��={v�=�x��R�a>4h_RR�=묳 �'�����#[�����x�Nl���6�m�D"Q�߮f�4)2�[�(�{}l�H+V��������ӧw!07��շ�w�y�ƍ'@*�š5k��7 㗚��5r�Hr<�8Ѹ�ӌ|�zԨQ�+~]ra�6T�KP��4��ǣ�a 0 @iv Q�;P%��u��8P#,dҵgQ�c��d�u��c�L$E���1��� iY8<?���P(�����ۉ�W^y%.I�f̘��y�kl��B�K���N��زeK棏��̚u߷�������<th4�3!\Z�(�\SUU�͊����/���d2�,IǎwM���˗�=��]s͢�{L8v�a �Þ!C��^{���NH���*�,{�U��8�6Vs�8����������V�Xq@�U�s��� ���z�C�~u��g�hA��ťkd3x:nE�L�"�(a`�2����<��Tj <�sN����롪�[�+L���������q�^�ӦMS���JW�^�tcc��СC;���Î�����{�Wn����r������
�:u�kN���4��O��}�� �R�� �M������0`��”�!���y
Sa`5�����R �
Qʦ?�B�ǘ��c�۷_���.���;�tZ�r�W� �B���郺�:��������_����;��r⨮���ԩS�5u�Tu�ʕ��R� &0��N�'W\q��1cƜ�̞�>�,��k�Y�X��;��jժUu���E��7n:�,�ZE�t��E��W�k�L� IDATkS?���� V�X�����|�M�7�xx���Wp�WXX��.-���7pW8t�g^u���zoT]�w�1����=/��w�A�G����e������,iN��A���8|�R��<��~kԨQ�����QͰV�\���_�3 c|II��pq����n��c,����� B��� </$I!�eX:��<b�',�����#����_��\��������y�/�z< >\;v,;bĈB7������������w�u�D�@�F<����������;��WӌCןB0���k�F�q_��t��a�#[j4}�#?Ֆr����� �����)�C�a�0��Y���E<�R�����X���B���P(��D��T�_��W{��=pq9�PJ��ŋ%���r�YgM#�H�e�o۶-�R��<��,K@�^��0v���gBKEQ���8��dr�$I��4�I��+��YZPP��7����͏?�X�D"֐!C�����$�k���d�|�� �����9s�;������ر�#_�DFCQ~�e�~�zu�֭;9�;���p-Z�?}����m��!C
G����k�m��d��P�k�������_w�}}ze@=���2Ԩ��K.���P�aP�j9e ��$�{�ƻᄏK��G}tʹi�&�s ���z��@(U[���@?��@�|��ə� �\ҩ���0M�t�?���9��8:+W�4v���o��� .,���{.Y�d���^:y����<&�����ޙ�WQ���3��ݓ��}GvP�D�� ~��Z��RZ�,Iri��~% `DP[���Z�.�*�(��&;�����g���qIHȾ@"���?2s�g�{g�s��|��ߎ,Y��ˈ���.�s�=��ɓ'�գG{g��k!�U0�ga�7x>1����ќ�H� Q%yE!�I#�:?w�t�A@S�hN�4�P&���p�f����+��%m�{Ŋ#�x≆ {ƈ�����q�<�]Ӵ�w�u��v�@4�-Z���J���$ (//�UUU�N��MLLt��'N�u�ޝ<z���={��M��: �Z�_������MӴ/���i�c������#����gϞ�֭[��$]�u�?�)���g��0*�i&4�@8<v�}���]�v����{!--���YYY��4]*¯�C3f�p��>k�Ų ��i���(3M���x�_;–���{�o�u��HQj�̹���by E�^0���Ƕ$�177�f�ñ~�ԩ���X�Y��a@Q|��-��`Y$ �$]�·H�8�t�D�A�E��0u�aUU�i9��ך��|
\�9m�EQp��i���=z�7�����+������7��i^�����'H��!��牉�KgΜ���j�ߏ�7�?����ߑ��.�SO=�Ԉ#~���Bt=Q̃���F ���u^]��
aUG��
�C�ih-7D�8J޵��k�ٮ��{��ի��?���vX��a�١m-�i��7߬,//������?�����x���4M�)��Dzz�������5�O}�ĉ��� �To2W}/�������� '++k� o̚5��t:[|� �id�i8���I).vK��% �z��߂����z��9.�?Æ�,))�v�[Cm��w�}���ٳ�333w6w�i�DNN�\���<y�X��н{���rY�iL��t|-����TA�ނŲ<O@�(� �(**ħ��u H�rNH��$�P�~��TP�@��`(�v�\o�:塲rl�����رc���J�?P�jܸq�~����~�������k,X�իW�499�Y�4����ۚ{֟8q"|��1�gϞ���K��мy�����^bp'���54%%eìY�:n��@��P��M�$�B
8����;��`qq'�H�*��~.ImP���]�:�N#���k����%F��Nvvv޵�^��k��lSj��|�׿�uf����ǘ5Cnn�/H���w��V�>��9.��ӧOOj��/��B>x��k�gŊI,�~ԫW��S�LiWD�$�$W�J��ԡ��F����~�H`ŊI��Rr�_��v��}AQ��0 �|���P(4a���-N5y���7��)P5��?�aϋQo��Ht/U� �����i}A�@Ӄ/��[�K�$� ^��ZM3!I~p\x^I��<)Zc<Z C] 7XV��)PU�b�jm�����/��_�*(--����9���3�b��V���F�Q~�ԩB� ���_�je��E^^ކ���0~���j�+++a���-�߿_ܹs�g���`PfffnG����N&;;{Z�����y睱x�54�G��(��������"\���bW�T}ǀ+1j����H�<��M�q&>����ӧ�~��\�]��+W��iz�m�ݖ��Ԥ?x�E|�������^��hk?/���j��� �em'N�X����?�粲�&'$$���oLMHhX$X�4���[E~�XfffUK�\�j�"��3gϞ�fٶ�1�`�K8��%��(
Ƈ���g�]f��^�7a������j��h���%Tf�n��@ ������>zukm���zdȐ!k�L�r��GRՓ����b)à�.����e�:6��N�2F{ ���e�A�!����ZC�i�
�*`�
t=@AX@� H��G�M���@2��VE1�0D�����F���UU[�l�<z�荿�����>���'H��#���r�:o�����.���iӦ��}��prr�:r�Hz���gUU�=`���5�\�h��a�&^{���p8<*==���l�(ھ��C�X,�ƍs~cԠi$鯍:���Y·�q��� $�85t�=T=�5�9�1�7΄}����T�5�j��gOʟ;��b���,^�8_����u�)5��$�9����>�^/���9m�4���������x>///�iӦ�*++샦i��G?Je�h���-�VZ�`�S�`��W^yE:s�L[͇�>UUSZ�VD2%����y�K���-?z�_���E�P%$���j}���J�'�$ ���r˘U�V�ZlP����׏SU�N�‘#G`�MW
��D��$�E\\ 8���J��V
V�[�w��1ڋ$�ϯ� ȈD*��'�t�A�B�4�4x�l��p� ��P����#`�CK!�:Xp:��|�B ?7}�Q�Ae�����PȉPȉ��Q�����<8�l����͛󋊊� �8zṴ�4�#�_�x<_j�v��ɓ�(�������>��� ^�d �ȑ�y��}�Q��ٳ�i:�r�J:҆�"&��ɨ�z]��o��H��p8.�����)8��h� �k|�� o$�2 I�iN�[71��4�0F�˗���\�K��i�i�b[��z�ڪU��8y��͂ ���z������eN�2�g���Lx���M�6my��>�D"$�q�� lx�GV7��\a�a�/F�}�����o}���z7��)�N�X�l�����9��k[;βe�R)����f�_��* ��4�u�ɲ엏=��/M�$��zr͐�������� 7��l�U��"X�ڹ�� �0% g�SJ�������ۍiӦ�z���.\�pTK�`��v�������4M?s�� 7�|����:t�p\���j����]_�X��� Q,A�� ���
��)��g@Q���4m�D�Y,����Dz�ba��:����|Ƈ,� ɛ`� 0���0�s}P�����oQRR�6---�ݝ�������r�UW�`Y��o��F0222>0 77wvII�RUU��z;����Ɩ��D�^/�iZ��K��EUUPԮ��E�i6�����Ζ�*
�@�GII*��A���`�d�W/�˅�Ĉq�q8?�H��`>�쳠�(�1 �M{��$i��먬�D0�oc�~�� ݺu���Ǐ7�םw��c�ĉ�O�4�����IJ�ﲲ�&75�… '�޽��M�6���~�a@��A[JݫW�������c͚5���بQ���1cư{��1k֬>��vۈI�&]뭷�ٳ��g�y�g�yf]vv����Km�۵�D$X,��Z�:�����v�p �|�A6��b�qݭ[7�s�=����v���4��ڵ �(�;���=��}��jQ��eA4���oK\����gt]��� 6�EQAQ�5ί�@b��:ί��)�$������[�",����}p�^�Y�r]��8�nI�4X�˲�pr���,˗��Ɯ9s� Nٻwo\rr����z������,X0FU�1���9�@l�S�i��+*��ٶ��(�AX,'paz���0�3p8IK� A��5����d�A$�Iƃa8�\&�ž}W�?�|�����[;�~b��>�(
��Q9�H���?C4M{�ϟ����2222�{�;u]�WU�/M��7oޤU�V}w��ٔɓ';C�.\��ӧ�h�����u���ݡVUu��bi��#���{�!�� 2��Un����!b]zz��������"I�'N����W��� 5559..�A�Պ�?�|��e�&a�x<_��~�����]R'�Fӂp:v�HL���@�j�C� Y~ ��4M�b�8o���/��ↇ~xVsv<����V�Z5CӴ��E"��>����w�y���� ��4A4�����=#��a�& I�HH�Υ��b$'�_� �RP+I�AL�I:A@�H�VBo�MǙHL,@Y�t�`�*��,M����K��ӧ�����E��v��nݺ�qEQ2W�\�2M�\�n��]����� �ZBL�Y�j�k�^{�̡C�^�o�s(����\�4V��0LD"���5z�$��ӰZÍ��u~� ���H��*�%˶PE�#XV���Qۋ�gC��P��3V�\�ܵ�^��ȑ���WQQN�:%�<yR�y~KK�����zY���5���G}���yVV֯�v�� �f�13g�Lm�����G}�u��@ �>33��F�O�۷�3f�h�慮�D^B\\�(��4�<yҡ�8_H��i�VAP�={�9����Խ{�S�Nu���{����\.�RZZz( �A���ŋ�̦����aH��z����,�w���9�&���VU�vNg���j��\��5��j bU�m�6����k-Z�"1���챵K)egg�ef˽��kX�����UiNt�B�>�������E��i����G8��v  {NH8��܊] ��2���H�C>>άi���6��Ug�ZmP��+��}��_����������F#{.&˖-��� ��8���,^��w{SD.1����͝���ٳ�W,�{�,�`Y�U��W
�X��8���&���:]3ٹU5`�p8��8���4�������~���'�ǎ�);|xL��s��Wӊ�
#77w�СC�v��׻.�ǎ�|���EyY���.]�������b���y��ɽ������ު�D"#������:�^o`ժU�&$$d�p� ��Rv���q�� ߑ#G��$M�x<k���ξ-%%�w�uW|k��4 4Mc�����`�fa�G�/�^�����r�hjX��HE��`J���2�:��8�:q�{� ��|���������JKKq���`III0�88������\.�����,Ki0t[��OeY�6n�8{��g�p�]��U�G\\���$ �(��z������ ��Kݸq�����YK�.m6L277�!���k����?���'n����.�%�J\R �@(�"��[���ekb\:�ὰXւ��p�nw$ ��#�Z�a��R�,ݼ�ThPc X�Q'X��@�`�
�� ���z��vO�{��q�vp�s������}m�…�]�Z@^^�~��կ���0EQ���j��]^*=�IX,��o���+��p���v��D��F�_E���:���b�l� ��ݻ@((�Qr����Ç��^��6�W��r������K:�?{�,���IKK��}ggg�s��o���o�����q�*�ݻw1����z�X�`��/����;�,�իWʤI�� �Ɣ�$%%����*׶m�6�Z��̂ �U�'��޽{����vz`߾}ؽ{w�b�<�����H��4�&"�r��#cT��h8s&N�裄kY�/^��r��]�eU�
'O�(��:л�8���;$�*)) IIIvvQQ^^~����Y�w��aTVV�ݳgO���G$�1����ʰ,'@U����f� I�a�q�gΜ�w���[srr^�(�'�x�dcכ�9��v�S\\��g�}v�aU�H�ѫ����rv~�$IPԍP�=`٦C�E�s~�GDC��$@���g]����ДR�8�`g5��3�F�(@TU�y7,�0|�J|����%%R�m�k�X�^���z���!�c4M���Ǿ}ۂ~��`�t�Fh���2e�P^^>�f�a�޽W����:##㏝iWs��N��_|gڴiWY����qeaLs_��6�0��%�X��u�R
�;�dߢ�b��OK��,���a�ҥ KLLjq�C����ɗt���_�i����wff�g�y���p έ��9R8t�Э^���z�J3]���C��&;;�����f̘�T��V���3��:uj�,�)���jzzz�;��ɓ'�=��?�ƍ}ݻw�ǎ����|a�{�^�+EE#�4ztɏF#�w�����lZUU�-��fР�:���f�����[� �vrkc�ZQ���0 $���[5 �gE$bmQ�4&�4cƌ�͛7g���Ʈw�\=G���;p����EA���AD�(�}�a�>���l�[d9 ��Y�#���6 �&��0�egE!��Z�k k�p��:�G9$)�@� d���}��I? `�Y�f����>:>�U0u��J(�a�10�IPT�������z[��vqHv:���������_�����}<��k�l[���K̊+���9�ḬSj.9�+b�VM+A�`�5�}$�$�M�К��e���� ����5� ��,��JB������nCcĸ��u�ORҥ����>�4IKKks���E�o��fG�~�R`Ϟ=�u���q~kc����/???��t"!!p�СȾ}��
��m޼�Cĸ{��b��������_�zu��Ç�n\����#��`�cǎ�#������5����F֭�����:!A A�=5��H�j��x�����w0�^Q�6��]`UM�,G�_S 9E"����HKKk�����]yy9z����T0mن�ò,"�� �o����UU�4qq��������κ.ר>+A�j���Ӕ ���G���P)x>�P��0����#���Z!�B�e��v��&8(�����+� ��x<���i
�lܸ��fͪ������-[����������󻳉�p\b�x≓���u�����"؍p�[��UUcʂ�@Q�b��/
������t���M��m���q8^� ���-��7^F������-;�뾚� �4��Í
5��̙1����{G�#��JNN������'8|�p���b[zz�[M������ﲳ���u�����~�?NU�i�ݺuA?nk�����rԗ_~��~x����a`���r �uff�����Hd�|E�F&%%�;v|v�T�bC� ��(,\��[QQ1b��ſnL�`��՜,�B\\�r#M;�����.��qY��_��`A �F�)�d%8��s���?z�(DQ|���8|��^x�شiәP��Ȣ��kD�g���P(�lB�M��s���uKg����ӌ�GPg�d�ڢ�$�:"���X����7��7lۿ���ʕ+� 0����G�����o�a�qݺua �R�`p+L� ��-p�Y��g����'=��x<]±dY��,�ⅶO�:�~�UW=��3����Lk��� ������ȴZ���|��'0�"��*�B�
;��.��������M������6�G��P#C_ E,K�b)�$u��L�A�$t����4��͇�����]M��Lj�izɐ!C.�.�(�ػw,�` IDAT�y�����y��˯]�vM�^�����z����˗��@���e à�>��]�����z�Ҽy�fJ�4��O?��$5��k�5K�,����o5Msf��9s��$-:t���{����q��O?����ۤ>��y��zPq�t(J�X�0���zc�m/< "��;�3 WG �IPT�z��T�w�N}UUU�fb.\� ��c%Ib*++�/ o�R��&��x$�Y΄,g���v����'�<���d�zt^hQ� XT�P.����+A�߀,G]��?�����ϒ%K�k�s:ÿ���k��+++��Vmڴ��Ν;�7,e�>�裓�ׯ/*..�i���_���l�t]�$�0�ڡC#���ɺ�=��d�����^��z�J&L���������n�a[S��N`Ԩ��A#��q�x���q
n�P�S�[�Fx%`�&$�������Up�?��Q|��m���a���hm۠(
�Vw�GT�4m��4~�a�{�=������� ��2�����!C� �߿�P��ȑ#����sc�^��i�KE�0 +Ag�,Yr�-c�<����k�C��Z\�d�EQ�y��I̚5+�{��/=���x�7(�x<_���\�����]EEEoo۶Mn����x�=Z���Z���yyy˲����hݺa�(6��+�&�dTV� ��.��Dw�o�a�}�;�(+sB�HE� E���{���4GՍC�i�-
��'�h��TG \��ea���� ��D���P��Ɓ$]���k�^�4a�m{&0 D?=zOn���¼QP�D �y�����k����effz,X��ܹs�����X0��y��M��y�۽��]?��8h�@YYYëc��o�����ѣ�_S'N���KoU�ľї�e˖�&$�YC� �A?���>��Q��Z���:����0�^E-���l6�*������j/�����B�m�_�BY:t�f���QL1+*�0,�裇WΜ�l�J�1b\�o<xp�un/ �y�Ѧ�<��c����諯�zc����:�a��(�$IX�n]ő#Gv6{a �$�'N�x�����]�px����|x-^�8���<�СC� �/++éS��x<��M�CQT.EQ�,�UU-�,���SPQ17��j0**n�,g�a2�r�ҥ��j���us� p:{A��AU�AQ��4��j��Ȭi&(�~^uqq1B�M�-��{�^�����KɊq9�`��$��Q�� ,50E����?�x��T�B8�jl�r�� ���O<=��}��E6o�\���233O\�.##�s�������p��=�#�sE�%�7޹aü?����L$9]YYY��� �v�IMs�/1A ��� �p��˕���R�\g@��!:�P(���0������� ��|n���V�ÛDӜ�0��!a�� @Qd�a9��f_�+��r��s������ˏ�rs{��髟��Lj�}������%�G���t���G���^���M��x<�/\�������x�����[�N"b~(�.33����Y����W��� �6o�dY�h|||�+�?��端�ڱo߾z�����`Y65''照�~�յk�6��[UU�@Ӵ�4M;�q܂��@��5�=����18�w���uU�� �E$R�F��� Dx����0LD"�!\XC��' ��׆a4]��s�.�Kx��W+#�Hk.���A�4 �� ��AQ�3�D�� cB�#�̻o���\��҇_z�=�իW?>dɒ% V���_���U6���Fʲ�$##�@S�:T�w0X�� !�
��1a�ߓg�xq�����:�/:����ʁh��(V ڋ3g�Ӵ�Lgw!1���x>��t����R`��HH���~~�������
m�D�;UUa����>#,;�K�3QT���(������|D�{w��T�t/C��z����x�͍㲀a7�0e��ŗ42$11���i�D���G�O�d��{��M�Z˪U�^LHH��ٳ��رc���� ���k4��6iii3���[�-�#�"x�'y���$��Q�̪U�^��z��k,Z�(���#�� &���hm׮���4���~�r�f�d�� ���� ��4����Y�`�&�;w���z�(^4��1.<?��4m�(ZAQ(*�i�^�l���G96�w��pff�n��s��v����C��<H_��c�5[hΜ9���� �='8 �r����=L� �~|e�`c���]�����&Y�TuX�w�Z�b�حV�Q����9��p��7�V�f�z�*��G�(����"�6�}��u4]ԁ��<<�vzZI����0��4]���̊�}�'�4����4��"�1b\�,]��HU�Y������������S�y��iii���hZZZ�ش���W���zY����� C� ����$I��z�-�^�b�u������p��-[�}��aݺu�7�x#���ߢo߾���{o˲��(�i��+;;�Q�$������~�q\7p�B�r��FA�M� �0ϩ�FÝC!'�˧@Q2a�Om����xX,�k�jM�bW�9�q�a�&t]��iP�êv0 ]�$ h� �f��)�BQ:�5�^&��E��p۠Wش���
^��A:##c���?9"33swK������2�b��{0@\�i�^��u h�8�<%���5�3wi�8� !>�8�jDi��\��jv~ݹ �2e�:�',��y4]E��
�da���d_�����qT�u���`���?�+�q #�#�i �De�H8���o�E���PU8.Z��$ ��RQ�
x!�����]�����g��ϗ,Y��%3:F�ˀ�����nݚp����{�#G������.X�����fժU���XA�tΪU����_������&�� ʲ<�f���UUUO������5MK�8.���!���s����ЫW/����ܿѡC�J\.W�q���
p���F�[���C��> 55�
�`��:�o��4 �]�Y>�Hd # �CQ���W��j�mϞ=!��/�� �a����#�.7w�qIV�$} I���0���G�aR�66j sd�c�, I���TPTd�g����*��.Uђ A§w�������f*��;��e� 䦥�����FHKK7lxbǰa�n�:�gjj@���~����h�����k}�����z����$I�N���VQ4��>*N�v���﹧��j��O|�e�w����۽���*P���;��&I D8l˲`�"�"Ę�UXW{P�h��z�Z�a��]����5C��!I��YX,�C�Y���G�4%0�Q��(�K�6 �;zt�=_}5��ԩό��fLjqY0x�`���cƌi� ��߿?XXX���'�tٰ����i���kx��������UU�/11q�СCo��X��VXX��(�Rqqqт ��g��͛7WN�8�YA>�y��I�&���k�Æ �����EQ�i���9sf����#�b��?�8������WƏ������رc�G��vC�I�`'8n x~X���h��$I�Ǐ���͛[��s�7�v:�S�w��j�c�h)�a �����NA���>p��P�?
�����ƃa�8C�$D�v{!�a�E�E����` �� �:�E�����v�u����w�ԇ�W_���Mrss{L�6m�M7��۲eKqS�U��������7/LL<�q�Jh��$I���`���:h�E e�&UP׍�f)��lٲ%І?O��z��رRQ�>��(V�e a�U�j��j�a�߿��O?U.�]M��������w��C�{� @� TT$�bIB툣H����� D���1 ��4(xq���*T5GI���u�肢� ����*)M#��������lB�J`�T�e�s����>��~�
F����Zl�>F�6���=�f����O~rQ��?�ӧO�������� ��
��I<��S��Ç[���R�ͦM��
o�������֬Ys_RR��iӦ�V�4b۶m�px���˲+E�as��˗/W~��3Wj� �D"x���D�0�"�Tk�iegg�ػw��o����ic�+M������=��BUM���a��W=o ��8oA�T��1X�:��\�|�tt�5TA�9h�cZ���jľT~������s�G�r��J���)�Ν��` EQ�4�fff�j��իWs�px2�������?z�S7�^���5��\�qi��K�v\�` ������n�k\�I��������f�Z>�R���7D'����<����f;��L$%���\EuIFWx-���rop �c7��"����j�_��r�aD"W�0�o�t�㫪��q��p\�͜Gz������ˀ�p\
d9���0
9�Ç��H��szw��1b|��u=>...��V�`n��]}?~���/���?�8�O���=dgg?�0�PUU�����KCm�0W�^�޵k�8���Ç�cǎ�����`0H�Q�6=����z�v����q�����g����pzzzz��j�ɮ��Z�gu]�s��X,<��Ž;�*,<A���W+/����7������t���AQ���E��� !y��� ��u�\*��c C@�"�U���5�p �?K�I�`�Ew���:� 8�u0I�0$a]����?�`������bZ���H����?�|���ž�a�5k>��o~�S� �{9'&�I�C�׮]�iB��e����I1���z�� ��z<��Zu-����.��O�$}����F���T�_r�I�v�����.�<y�����333?m��� ���L�$
'�h��kB���$x�{M»�*!�G8�V+ ����
~�tX,?���� �ND8� v{�!_�0 E����������j� UU|)p[*�h��(���8����1b���F�|>ۆ ����- ����+EQ,��w�a�Z���7
��>c/^<��6�]���;wn�R�^�7���_I��'�m4MߴhѢ��i˗/�� ���� 0�ޫW/��o�������r����_ x�������M��X���Og�<y���x��7�l#I}���8p�I�ˬ(J��f���ʐ���뮻κu��9^jM?��V<x�7�q�ӧO����a]:�X���׏q��g�Z�q����{_zz�[�]+����Ǐ>|��05�����_�7� �%�
ӌ���: ����=�8�Z��s[��tr��
ǹ�T�j5��;j`���Ľ��"\ �"г�NjѢ�������"�@�ڋa(X��YƎ�����w�}wOnn�>�[2�ܹsU_n�'~��&р���&��*b�ܿ�x.�б�q��7ߜ��ifW�~�O���w޹u\�Ǡ,�дR�|4� @^}�����6��Xt'��z{<��� {�^��`���Y��$�� ����&�0 ӧ]�]I*�$m����@Q�Q�4 @�8D"��Ӻ��sk1� "���rn��$Y�-[�|���n�%4-F�˖��� �4�gdd�����k�V�[��sO���)
��*t]���Dyy9�~?4M�(�'N�������-6egg�P&4M�i�� �b�l���$y ��p7�[�n����6��<x�e۶m$R��r��L��\�ī����~��4͏���f;v̛���tcv<���x����b���I�%��� �͛�lY����Ų@����m6�sϞ=AEQ�iM��e�FZ�ֿ��z�a�[ ���ݛw:����;wV=z�MJJ� ��ӧ��¯��
 ���ƩS��_��<s��x����.�������}5���]�ߦ=x�yXQ����9����H��²� � �e��v��gΜK���aD"��:��E1�8�u�����r��E��a�jHQ�j�l'�(& � ������5��:������4�a�xqW���"
����AӢ��lv����mۈP0��UU_{����Z2���=p�g���[G���4�J'��!�n����o�ˤ�@ ��ξ��8����;0lXA�#��j� $�p Ngݔ�/����'�<���i+1��X�|����0�5�?h� � ��`��OSS�섢 M��lC�E����IAD�=�tOp�����F�4�B��պ��^I���7��,6op��?}2�#�E&''g��a�r���z����믿.gI�A�E��a��$m�؝���E ���i�WY,�kt]�Ͳ�F��}�ر�|>RSSѭ[��2!����ꫯ
�u�fMMMu��� $IB�4T���ެ`ґ#G�}�vQ���K�.mVp!''���'„�v��BNNΰ���k֬yC�壪�����|���=��3���9EQ7�q����Sjο��K���SH�L�y~!�k��^{c����’$��y�=z��o ��/ :��I�&uYX�$�Vk���.��I�E�)�PRz�Ӓd!L�.�W�^���81%�I$�-8���p P����\`�*+���8?�E�� �����$I����l�$�j5�9�P���;��Ǜ��Q�'i�,��u�#���Xl�����G��g{<��������8��A��������}MC�(�0��:t�ý�g��u|FF��5�7Gvv��>x��,!#��ݾ�s�ݴ���/���i�̙���H��"�w�M?u�U�7블�'B��(!�*t��^�K�(&���p:ٱ��4$I�i�0�3D����B�ر�?��ͻ��m��J 77W}��i���q��򪪪��,?��1�����,��aÆ,��98X�V�4�dd����J��$ 6l��_������.Ȋ+�$I���E�ҳ��~1dȐ��C�&Y,�ܹS>u�/---����˗�'b�=����𕕕a۶m�`0ؿ��rVV�x�0����=<�@�^� ��j} Ӳ)_0�M��e�^�s w��x����4�����`��H I`�D�u�D 0��Z�����~�# Ih� ,�@��:只�c�lYI$�$����i�� ��@=�74yr���7���å���z+u~��u�
�L������㌌���;^m6lX���S��-�
���@0��u I08pG����v�-��k'�\�l�0y�a4����PQ,�R+��a��~Y��,K��� ����47F'��<A��:V�(X,#kT�Y�����ňq��p8ny��WC�|�IPӴ�]�pᨶ8�yyy��Oz�[�n�̙3'~���qcƌA���������lZK{���B��rs~�e�O�u�F���)x<��+**�y��N���;:�sI��}͒%K����۽iӦ�_|�E�o�x���?�pEE�]�������o{F�$���<O�R�����/���v�+�ĸ�0��uKM3��b�װ,�i��P��M�Z<�i֌k�@�S5�6����M�J������:[3�aPؽ��TUe �X�"�ŝ6� o�NR���u���6k�O�Pp�}��R���rrrF R4d����+�:�ւ�_4����ܶ�w_b"X�Dff����?^���fæ���Gw��]�( Ũ���z��l{ �������8Ȳܭ���J���d[||�����pWі>�-[�K��}��ȁ�3f��Uij����c׮]�srrfddd��Yv\ ������oT{�ᇷ���z�ڂ_��3g�`@vv��$I7M����� !����"����ݛ:��H����1b\BH�' �|�/A0��M����IJ���:Z���igj"* #R�E��mi��l���gh��+��0Ϲ���CU��ǎ����iM{�-���,���u��T me7�L����EQG E�"77w���:VQQ�s� ^��w�ʓ9.R��iꠚ c�r�׿��!Q���^o���� m� IDAT��N�ĉ!�w���[.�B7����Gee2��N-Aqq���9�lu�sH�V��9�����alذ���Ș���Ĉq���[�n?���k�w�y���P^���wذaq}��q뺎������ٳ{mڴ�՜��;��}1�z�<��i>����ϲe�F.]��ۦ�Y�p��6�_��M233���z�jq����q���_�n����VU�[Wu~�$IF
��/DQ���X�o��Ì�$��5��q|�8����^��I���Eז���A�'j�TU �:��!��0LA>j�#~dh:�2p�@]�Q�l����!��3��k��-D��~�P Vڬ��(**R��?�Z�gee%Z��W4M;�i�N�4�����`,b���(��Ng�������`��L�eY����Ndʔ��Z^>Jv���H��e ����L�͖���� B$�x��FE�^`��2?F'�q��rUU+���bu)bĸ��,��1c�p�?��z?����@��n�i�����8����( ��Mrrr�,�~9u��ݺu�� �$1h� ���� �.���ŭ��������yyyRRRR877���bٮ�:`݂ ���1���o��lY�re<��(=77�������m<O��O?]\TT����eR��@DMՄ� Pվ��Kƈ�V8�C 0V�W5���@�G}g�0��\��k���= ����f��%����$X�Vx�A@�I��H��7,��q:"� 8Ή7߼f)�f=�!I�����x(J/��G] M3[�+c�X��r�-�%%%bee�O��������ի��{ _;�}��ݮ��I�A�n�j��j1����� ��S?��9��̙3��{Ǵ���r���p:��0��C� �(}����9I0�
����ձ]�={���`�UM�~����a�1b�h����Q<�;���III��n�i��_���iRJJ�#11�/**�;��o�9����j����ǗO�0�GWs~�9�K��E(z0?�p8�<� ��t�MTii� �����h�SO=uբE��u�x��Z,��M��WUU�4�O?�4x���z�Ւ$������:�Q��0LPT�s]7A�|m��o�<&@Qv�e��K��!��QUU �5��zX����r�ך�u�ќ� ��/�p(�S�q�G�a�I�+{�� ((�)���Jn�O5`���Q`�����FQT�z�TU����=UA�:]'ǃaa�R(/�[,"��S2��+++kf�>},)))HII��3�(P\�{��Zm��m�� �4)HR��0"���yp�����������{7��zt21����?3�-���E�D\�.k("|� X���$}0 ��21�>~�>��v�" ��}zzz�R�1b��pX��k�ȑ��ǒ��1c� ��x�8`ԨQ��h���z\J[[���OF"��ζ�1�.]Z�Wտ�Y�&��/�� ���g��ã*����~���!aI�"�DDE**"�K[�����&�LP�i�L�� �����ZKq� �
"e_�B��=�Ϝ��G $B�$p>�ť9s�{��ɹ��<�� @���4M�h��y�ާbcc�DQDUUv��Q]UU���Y�V7�{� amVh�������GL̮ �i:��.���)2õ�l��7qq������"�@Ukosh�
���_�MAu����Vm���uk�Έ�M~� Β�&�-$4��UPAQ��jH$$$l�� K��M @���˧�xb8���$ �� �l��2&�gٿ?�/�������.���3gN�6lX���{���8��hZ,%�C�2�>}��&cbbPV���H��o�\1q���5M���#o���v��t:���Hxk p��卉��Uó$���g~&����hZWc��*�i�&ω'I�����ɯ����� �h���EQ� pI�5�O��PU�V���������Cю������+y��3g�歷�2���ܤ(Jy8~9;;��J�_��������a`���d�����yS]O��}�e�C$�U��cs�C6\#��I��z�Q\;rʣ����9����ۛO�E�5�Y&�6Ӵ�Hֵ0j
g�h逦��d���~�O�����{p����S�NԄ���� ��$$ɬ��ش-[�2233KjkdE.t|NN�h��>����E���ڢy���(bӦM�UUUA����q��|�3cbT��N$X,x<~8A������nW�X��?�l����������������6��8��(���/��5���t9��Es�U��I��Z����"6[��'XUU�a�=n$���g�}V _�:u�h�b0\��ϟ��СCz� pG
��|��P(�D�u��K�`��M�G����:��L�uD"hZ�hZ���˲�l1CT����FI���~V�O���
���վ�(:$�� ��[�r
GM�chY�,<�4}ɒ_$��Z؜������?thP;��OZr���g���1l�0�W�^fM����DYYY��lVB�����/x���i��G�>|��ӟ&$T�����O롐]��?n����/�h�����(��������\\|k�k��E�+��Pm��>���P�u>�R��q�Ax<�ڵ+TYY9'++�H~ �(q���,�]WS� EEEEq�������2i����_��~���|�3 ��#6�oQU��$� ���娮>�,۸Pq8�Vk}bLQ�a�.f �CUkЖρ$����4@� (��0�_,-��F�,�?3;�5��SUU�h����jA����I�RE���� �,7n\2I�X�rea(��С�����@�~�qt����/���i�_m�oh;�7�0ϟ��^o��w�>CӘ��_M�A��4��f׮]�+W����^YY�����f�c2�U���s���-}���K[��렪���������Z�����v�R���������\^��؝дw ֯�v"6v}���8�ꗩ8TWw���CQ.�(TE!����#l�C:��:�-l%���?�TM�v1gΜމ����i:�z�ꯋ���9|��G&���4Mw7��Sn��F�����<��ӱ���;�o;q�QW����;����?Z掠���j����G]Z޽��MN��$�@_�͵k�5 ����5 �:B�I0��6H�Ş={��n���̙3��v,õ*77�� ���� :42x�����r���o�����'H�\3u��_E;��d����z뭏���im��%�2d�-�lE��$I��?@v�w���I��i�`�� ��H��;�8���e�E�|e4�B ����@bΪ�qYYY�����<wE�6�bӐ.\� ���C322����ʲ�2����L�r����g������n���v��|��ba���������n���a�<K���1��oi�8���.�=�7#��<�t�n/8/ �XHR?gn�$ ��`2Y��C�^� �;����c��훧L�2<ڱ ת�������]w�u� p�,!)..�w�}�$�dY���W^9�:�9s�D~��_q�ʿ��=HR t}!��ҋ�|-�}-�2T�6[�zQ�Z�6���O�4fM󃢪a2�
h��Bɯ�6HN��W�\�L�8��5�-0o�d�����1c����7�<=lذ.�����ڰa����� I�򓓓W�w�}��[���ٳ�KEQ�IQ�2UU;�����%k�6�-�z�'c
tWQѻ���~�l�������gYfA��+����ܹ3�{��F�k0DOnn� ���}��^�f�_�ѣy�ӠA�^����q����\.\.�v�ǶW,���O���Ξ=�#7�ENN�ȴ�4�����`h,M{
��ym��i:$IG(�!����"
� ���s?�~� �� ����1 �J��k�� �(��AA�٬�j��e{ ���Dh����2���__ ��C ���FB�|�O�g�\.�e�dE�֪���w�����K����8|���C����>j�(� /i��WTT�����СC�$I9YYY+��`׆�ՙ��%�5�����x�ܽ���>�]� ��/_Q �=��g�tǧ(
V�\��x<K�N�:)�� ת���a��'�|2!ڱtصkW1�����ѣGEMMM�$IJ$�{ff�¶�������b�JQԍݻwOPz��I�E�Ph����K[^�-�����1�w�z��v(�UG�$�j���Q`U���U�d����`Y� t�*U�R��ͱM���j4��G �� �`�������p������ b�������a]I" n�`E�>��4��*8����a��;�+33�����J���v��zTӴ㊢�F�}Gjj*����V��W0�eBB��@ @M�6-� .0���2���ر1U={���$�� ���c��� �=+X�g��p���� �7�?wT�ׯ/?q�D0���t��v<õ��^뛒���C=d,�<����jTWW������ѣ�����Aħ������k|��G�|>�ƌc���`Lm*--�֭[�ӧO?�������M�z뭷��3fh��ݣ��p� �N������ZY֡��`�/x�,�@���g@�;0$�2$�Hr)��R�d�vU�!�:d� ]��E�t4��oК8�N�� p(D��
 �F{�XJP��H}�㮝��]}���v.���'��w6���Z�G~��d�$�}�v�ݻ��iӦ-�={vW�a��^z���wPF����K�l�K�&�$ A�os��!�ѶPh8l�����KUU|��g�P(���i�^�O� �΄aA�ю�#:����b��bA�=�難�����跋-�ͳ�>�YkοhѢ���7n\��ƺt�aÆ1�W�~:''�EQ�fffh��iS4M{��w������.X�����`/����L��z�dj� ��֠ Àa�A����ϯ� Ƞ(E��c��1P���T�f��t��$�t�ꐏ{B���o#e�Q�zp��[N������\��/999�Y,���ɢ("30k֬�W:�h2�wpk�f�g�9`2��y4Jt�^8. U_#+`��wS�; EQ�lٲ#���N�>�#�5��㸻z��i�����RRR0h� �}�ݱ�,�m�9rrr�s7�bU�1r���� �� ?,Z����~�� �����׺wp����Ș��h]�`�jI���Q��7�#6����s��=�H$Ԣ�Y���v4�TWߋ��t T�v1��8v;�p8�u�g)��3�u��$!���܌�G����n@x޼y��}�d2�2dH�Do��@�51�f�wp,���z�\v{Y�?PQ���|7�aꛕ�"࿌��������=3f���X C����{SRR� tն:��L&Ĺ��^N���R��(jH�=Z4�zv�����%%%�k�.JX�v�Ad^^�U������&�F���岸\������ͽ711QiXA�#�4 �H��� ]��0=@QVP�B� �(PU S��,련
\�G�dRQU��
uS�/�������*E�Ϸ<� �P?�K��2�ծB�;��d�! Y%�H�>ơ�)=��/��K����p8�[XX�IZZ����c2���$�c{ �����|>3T��,�`Y��xuժ^����O�5�)�lO &��_uD˗/�F"��ю�`0ԣi��Ç7��.ða��-[���K9N��������7�|I�����?))��p8��^4M�o���0L��(�UU]���y�������t�,
��r�Y�399�ڵk�����9�B3t�v��!C��.%����*�?�b� �v�AԎLնwq@�@�c }���PG�O֍�j@Q� � ���&��8���!��H�B�wa2�.�%I�J��/0E1��$� ^�̍�� 2�*RED�J�iv<�m� n���N�K���8��us���x�ĉ�w���Y�ﺒ��(����4m�S�_KN�a0�k�6n��?u>o��a�?����=�&�9�m�!�E����x���X C���� ��A����lhVzz��b�ܶhѢ�H$B2 s< n�u}uvv������Z�hѢ⊊
GBB�o�l6��w�mw8jׯUUU ���TZZ��y��(�����PU���_>u�X��e�۷zw߾�.��UuU%o��yv��W������j����Mo��f�(��E��i��;�Ò��Ԫ�ۃ,ˈD�qq�P;H�x����؉H����0��6��`hDU�i������[��:����GxiZ���G���8���ʪMz�t4�l�}�t��"����2I"�``JR����g�ccc7�>�$�-[��YSSc>q�D� ��u��X(� ,_>�lԨ#�g�������[�裳�7gΜ�7�t�=7�t�1����o����y饗��X C����v�}�SO=ed�m �  "���� �N������(��9��&k̛7��}�ݗ���bJJJp��_ii)X��x����� E=9v�Iwzzu�����
MSZi�)$��9%%HZ�
QYyٵ�W$޶�i~D"o�fky�VQ�!˿�#����x�!.�� ��J�v{�yI���@)8. ]��?��
鐤`2��;WV���1�U1IR Hr!�4�ᓈ��@QI*FL��6�"�S2h
��^Q9�\�F x�����k��x
T/&�������-o�<-77w"M�w�<_��s�e��5���
���Ǐ[��VۧK�z���OM�Z�lUQQ1�H~;�@ ���
���  I�Tll������q�*rJJ
n��x�ߏ�;w��x��in��'N����������)>���NNNFrr��ߕ����3n��8�E���eb�����꺾L��L�v��i�z�����_Iҡ("H��1hX'��"�E�W�q�D�C'�\=��)�T���$Q���Fd/�ecPY�]��BQ�3�T�P��q�b4��&5i��)ђJ���EVQEu�~F?����{�0�&M�//�����Z`ٕ�NG�q�� uL&�O�t�)&S$I�0�3q�DUU��'O��/@E�b�7���(((��m���x��7�H~�a
�k֬ l۶ �ŭ��"I$I��2�������s��I���C۳Z�����lO>�d� �gϞ�$���Ľ��;;����ٱ ==w�}w<�ȭ�h$��e�uXm&>�uW�m�`^o4�(�0h�0�2��hZ���""���! 硨�u��I����ٺ�$��U%���^�׌�(����$��B]���A4�u��=4�����i {����t��א�Y=�=��k�1� ��m۶����c�ĉa]��{R ��a����矗�A���}{��I�8�;<8@�$ɴ����������PXX���pܸy���Ǐ�Z,���eYFII z����5���K ��$��92i�������3�Xׯ_�dɒ%d�3fL��kw�בV� �j2h�c���4 ��<_cx '!����R�$�>�fsw�a@�$�ˇ$��e�����>(�E�@Q$(��,�ฦ�8���M3��u���(
X���4Y&�q:hZ�j"�{jn����` �$P]t�5�sW��M�򴮯l��wn�������IF� P5�iP�J�4A����t��k��i �� ���Ƴ�u]I�� e���ۘ����/�`޼y�YYY����vY�|�?&L��7&&��-[jAX[^^~�СC��=��u��`�h��/555�a\3n��v�(�v�Bw�W������}%�r�cN����;q�f_ep\I]���t�$t��B��o�?u�u�����nݺ��=Tx3�>�6����� ��MY�(@����4��׭��\�r,K�����A�PU@��7��A�$�1H`�k���� <o��I0�oG������}i S>��s��c��͍m�& �t�orC#��9ԿE� IDAT��x���6�m���4܏ ��UUU��g�����]�v��/���裏|���?O|��7���RȲ�/�����?>�(�EL&�x��Gy$�j�ޝ���~�yg̘q^� N�s[0��ʕ+˿����[�.�>}z��ɓݽ{�ѣG�6'I�0���m�� Cۘ;wnހ�*��+��/���ڲ�Bᰠ�ݛ�83 ��7WQ*�04I
��������-�pW�Y�f-{�Ѽ[׮�5�gf]��G�M64���]0i0\�� �>��i@D��>w�H�络9����z���E�|���B��Nz�CCX�O�,v���cgI do��ӐtgW#h:����@�(�憢���8���f$����霻o߾�oذAjU?��c)��d�…�?�/@��ώ=zU�PU�W���o �ر�����g|>�pUU�;v�7�}�ݚ�K�n����"�r��ի�5M��D8cݺu�$I[233 .�����|>�c�N�z`ڴiO��.I���j����ߟ�r�L��� C����I�8�C� 1�^c&�hoѾ��hǏ'��p�����M�6y�n���A�Ju��ݺA}�A�p:��5��=e�x ϼysZY;l04� “�L&3"��'��H!� �����4���{�v���EQ�^��k}i:�0s�5L/�>���*���O�5Ǫ��j��0�Xx{0���A6�f�Kiu��fS3;����W��Ҧ�u�]��e��ݻ�8Mӑp8<\Q� ;{�1��f���:�����!Q�����%����[����,,,�R�i��,�NE����������^�����رcc�s����ފ������ۥ���`��y��<��C]���m�2�Ƿ�0��]�A�Y�cbY�� u���/_^v�u�% :�J��b^�Lj�Y �$��\���
�i,�ʺE���[�4�ܐ���}��ݙUU�a�=��,Nf04%9�� A�-T(I!H�)�Lд^7������dj<�GQt���Һ"v^�2��ֶf�Dt��^� kx<UHJ:]�s�^q���H�����Yo~���tÒJ_A�LJ��Z�Z��D����XRRr�����Ajj*X���6m�u�(��an�\��q��1|��G�^�7���/�QǏ�VPP�UU{����=�\V8~� O[�7eʔ�N�8�|�Ν�s_KKKci�6�� Q���������v�}�Y�����0�B[v/��$R+W�=�~�ب��,�EQ8��D�荒ֳk�$%t�Z���+Nk�h�ә�{��kIe0\*�O�$MF0X[��eM`���tx��PU��cFMM����_��o����� P��K9xށP��x�����Z?b� �>@Pn>���_�p�H~۞�w2�$�zÆ >HLLD��ݯ���{,66VeYv/M��mذ��u����(زeK䣏>�����0 ���r.�.�Kr:�������K/���C9u��7+++ۖ�zP��I���
4M_�� �+��5�g-X��/999����?�y��n�0a„��m���0�{ x���*�۽|\���r� ��E,��v{˦S_i4�E��G�8$��ѣ����׭�sl�ޗߺ����5tfs?�!�M.9�� ��Zca6w˦�������iM&�@Ӏ,W�:�4׭�eY�H�Y�<O!��L{q��� ���>[bU ��K[�\E��lu��f p'����EQ�O:HOO�Ap��avڴi7��Լ_ZZ���-�9�>� �cǎ׃��ЩS������\.�r�Z�l6ߜ��̟�]UU�$Y�r��ϛ�p��n��K�,Y`ES���� �u}"�;�;Gnn��px�ĉ�bcc�T��N�n�~�c�E�.y�u@�t��|�T��sHH�u˲l޼����G�5M+�D"Q{ 1LD"]�~<��#�G9lX�y-Ϛ2e�x��رcW.P��q\o�����"I4]���p���$I���!����n���|,B�Ɖ��b��ӣn?.F}���;�� :<<ݢ�\�X٢fZZ�h���̛7O Irx�~�]�t��n����t�q�\ZNN��K�.]��_��S�r�\��SYY�y�̙�F;��r��C�Ȧz���BU�\.WӍ� C�rss3,�K�e�؜��8�a޲�l�}��� /!i��F�c�nw �!f��5���m„ F�kh�bI I�CUO@Q� L��~ ��` �`̘���~��cǎ�{׮]wddd�y<��i��
G˲��GAU?�Kl�8�>��b ��D���~�� {�7�^|��&�\I��gӦMw���]��D �� �A$�2��?�ˊM���ً��OA��}���I��wp<��㉅��xT�j������zK7�>���A�� h`o�Qs�[�����A5��j�� �^��p|��$͚5�(T׆��N"//�f���+�bY�э\yy�-:�svv�&������|EE�|D�_|q���x�ԩS;M� ǽګW�&��%%%� �������eee��8n��(�fffn�y�k��������g� �ó�@��_~�����e�ܹ�h�.IKK�����~� �'�&�, A���2�D��`6�� hXOc�ر��l���|Ϟ=�H$EQ~��?��t��� \��0��S�I�A\\
������ t�! ��Os�����g2�^\�~������( ����q�X~ Ms#x�������ݾ��K�6EY!ˍ�F�|,jjί�c��P^�X�0����e�������#�� �f�@��� �cT9���X��9����iF���:fC;�y�瞃III��p8~���ή��uG���eyu~~~] ����j��!CN=z�'�>oZnG�v�Z�����t:��X.�}�݇���;����kwd6��{�n}ժUoF#6��33f̆3fl�x�XӴ�~�z�j���+��� ̞=�zA>���{��1��ݻ��Q�h:?I�,����+++y�ޗ�N����׏5�F���F��1M���4(�0L��v,K����8))!>&橤o�������_l����������E�e2%%Ř1h�:� @�4X�f0Tu�2B��C� �i�P�;@�-�'MQ�*�L���4��" �����y3�^Mk ���
�J Y;�KS:X^o�`���Ǟ��C�����9��u����c��a~�~�� &$6,PAy�.<ϯ<�UUO'$$H�h+���������t~�XZ# ���`��X�5����О1 W�3f�UV��g�����p[C� ��x�=bbb�/@�5�[�n����wڴi����7���t:�������� @�zI]~R��дL<�ԉ�^�d�[���t:N�>��3f��޽��͛7w����$I��y��/��5���\,����� ƒ_�a8�dTT�B>�J���@0���n4؜�@�l�v�a�9Q�+m]��P�H�;�H$��۷����E�4�V+�v���5k֚�����]��-��Z�n�WşF;��"���Ǐ7� �f�)���kϘ �����
5�=//Ϫ���}��i� ׈���|��},X������Z�|y�3` ��BuuDQ�$�P�ڂ:��C5�|%w��e�}��{/]�|/���������ϯ:ۆ�9�$���+V�����<�bܿ�,�eAQ�!jYk;�!�(����
Uǁ �;����S�����g�6�i�tTWwC8\;]Z�����_d��\b��Kb$���̙3�{���+W�ܿa�_yyy�����&��y�q555�oݺu��5�KQXX�a������XZ+++kO0d%�����x#6�M�&8иa0\Q���MӞ�3gN��۝Ng!������(��˲0�Iz ��d�|�Fu�hx��Bg@U�#.n�������y��M�<��Ç�z͚5׭[�dq�Ç��>+Y�n�G%%%7WTT<��g��5��4���(>�P��5�Ma�hMw���$�����,+�tTW��㩏�ajG�E�7B��Ur�Y��#��H�L�8P<l�%hh1c p'��w�V�^��aä����� ѳgO��<�(Jב#G�+V����1�֭���-�������x��-�x<8v�X�ʕ+�/ڱ\�q��)�p���={���XYY��'O������� ��Y^^^��2��;�HlX��`�<O���zߚ5k�6ܾjժ-�G���|ϸ�8���� I�`& �<?� ��AQ���meee}o��fO~~�� �/??��U��1B߽{w�֭[9I����_�f��رc߇��g̘�o��֛����;�%bDrr����pEH�Q�]�Vk Z�ƚ�D�B��M -��,����Z��~٪
ȲM �a"��Kw����A< I�btx� ���(fD�I_���׬Y�iqp�Kb�wBӧO�7s���ӧO��ٳ�n-��j5������?k֬�ӧO�f͚��� ���Ƽ�� y%%%�5�C��ѣ� ���`hcs�Νk6�7?������72Ck�����q�Ԧ^���|b�ڵ��bFFk��ǵt��S��)�� ����w�~櫯���ԩSO=��scgΜy���px��C�:E-C�"�2���P���%���٢��������v�h:t(t����ւ$�/$�:��"�"�a�Ǘ�j��<Gm���k�*�Dt� 2�H�D0����sSs�� m�H�;�ɓ'?�k׮o � 66�4��9sF'&&��"��"I��u}��,�i�~�j����J[VV���f0Za��ů���>���O��fs��1\#z��A����q�k.�K�86m�xO��ѥK���{����5�\.�o�� ��K/�Θ1#������wdgg����������v������D�����9ɲ�@`'�UX��f+�^ZO�A���>|�!�[�� I���� 8� ���n����P�c�X�!&Ə��bD��@QH�>��g�@d k ���j��^aF����)6l���NA�� ~���9�e��=:��#����T�,��v�S����8�u��5�M_^^���D+&��j�i�cÆ �O� W��n��n�Z���צO�����gJ�*++)Y�7@LL���o�����{�e˖]tv֤I��w̟?�������f�g6�e۶mb(tU<�6DQ8|��,��a��@ӭK|�iqq��(��zW��ہPh7B�����7�W-Q�����V�-��������β�C� ր�AU!��4��N��c$�����,2�L%�P�,�����TWW3 �ܻwo��@���@Q�*��Yt�;�I�&ɲ,OX�jU��m��}��(����p����}&!!���t^�m��KJJBzz�� 49���,_��RUզ^�p��ӓ�f�yyy�$IƦ��Z�^�o'N�xIo 77���d�]bb"'��>�9s挢��/�.]�����K��݋�{����p���$I�ŪV:�H�
�&l��6I|�e��"6v%l���-�΄��'��޺}DQG P �(DL�g[ �*������������y�� ���i`� H�v���M��4��ڊ�D�J�$9��ߠ��(A'�v�{���d���Ʉ����ٳg�5k֬�G��0�����kqq��ǏoY��v�r�J����8�
I�'���iؿ?����s�E ��c�۟6l�%�q�]7�x�i���oXp�k.�K���{������C=��S��� �O�����`�EQ��|ɥ�c���]�f�{�I��o߾����{�M�4I~����������?![�֘C����|��l�OLL��, �͆��X,h���"���R�<� �u������6� ݺuáC�@D���*��z�P(�Q&LH����k��$˻`�]�q;��>7��D4ȲW�]:���5(J$��{Aӵkz B���u�L2��0����5�$ )$ȓC���롈��O����r�.��XW�����8n|�������dM���6m�/�n�sݺu���;��[��{��,˹�����K[ ���h�~��A��7��ϙ3�7�0��>}zV{�h0tf.�����V�5ڡ�a4M���W�Ν�z�\羞���f���8z���{���/ɠA�|��������M�z�r����,++�Öo6��������q�=Ah��dggWx���999ó��7���<p����Axx��H�tW�ٜ b���cǎ�Y,��@?]����DQ�-...�8��aR��
5�t]/Eq��� 6�����<�֩�%p�.��׫흭�"d� A��Ţ�)XE@��P�
K�V �
�g^�� (��4P����S� ��ˎ؟3�y_'p��c�Ǹ��~����_~�X� F���>%%%��)))��C�������N�{���w���uOJJj� ��u�VRӴ�ю�-�\.iΜ9�˲,fee7��0�4M�����2++����`��8�h��"��G����[�ݻw��&�Xu]'�ϟ$��c6�ѣG�ԩSf�x<A�-�jʻ���1=z���֭[��'N����㲳�7����<��=��ͽ_���O�>=�e���&M�l�4�&�.������;t�z�� �™���R,{����h�u@�TU���@Q(J�a�7>&RA����k"N���jG|)JM�^p��s��Ok8[Tz�4�������fd�v~�]:� z*�m�pm2�wrǽ��?ThZ��
M�@���(���޽{�>}����`fyff�?ڱ���^z�����ٳgw0~���&���B;�f0tz� �w���G���@�$ $͟?��s_#B�(*x��ɚ����뮸!C��EEE�����u}�Ŏq�ݿv8O��߿Q!�n�!��� V��������NgMvv�g3g�l.�� ���ey����ݺu�Z��#�x����4^ohz?Xv�&�18E��/GL�6[<��������O~U�@��B�^���;)��)�; wQ�)`�� I�Gh�$��X���������W��wb���L��~6an�� -g$��ܳ�>�IUUU�_|j J���s��iv����?��cǎ}�s�Ψ�28t���H$����a�p~~~�a������Y,Z��IIIS ��X �v�a�g�zm�ԩ�˲���o�m�HjGp� 7�LOm��(]g�0�􌌌���֭RRRR/^�𕈳����7̜9����B��(?����4 I��&�RU :���R�L:�8�e��T�pXC0X��� ם�{��j���� ����*�*
,�
���^%�ާ#����+7���F�������eee�7{S�u��m�4�&x�F�v��� W�����cǎ-
�#h)))����F��՚5k��:f͚5� >�[ll�@��ʶw̒$�~`233�o�kw�}�]���o��Y�Y�z�'ю�`���n�������h�� ���x{zz��U�V����>����9Rٹs�޽{s�Ś�v�]�vM*//z���w�}����宻�5~���G��:a„�|���G�ٿG�M�G����t�ȑ[o����k׮=����?�n�����i�{��!I����I�~�,��S���^t_]DQE0X��$�v]�*�{X*T�4 4���4A4�C �F���F@>A��4|R��YYY���� �s��o~.����7%�s?�/��i���v��o����>y�ȑ\UUV�XQ4}��� ���o|����fs{� (,,�ƍ��:u�]�z�f޼yE$IӦM��X ����r�V���_��_F�+C��lٲ�>�o�K/��d�ٳgw�y~��O>f���E+W��6�L8p`,M������y �����yV�Xq���J�D"�j��t֬Y��!����ۻz��y�$I��#GZ��s\ Z$R Ms�fk]�,M�
Gl����d9 �����AU��h�E�� IDAT��˛M )$������]/[_|��`S�����U�W||OY ���I���3����K��2�`]EfΜ9mɒ%\aa��{��e�۷�c޼yY3f�hv�q0|�СC�ܮ���b(��=������ю�`� l6ۛ��,C��D�$Ij�0ۙ�/�$���<�3���8=�P� �54'L�н����9u�ԋ���S4M�:�x�Uc��2eJF^^�/t]��3w�y������X�b����e7�㼠�ڑ�3ep��͏����4�����p8��,�Q�*pHR��z/+����\�~�D��fwD�8�`v�u��u�X�z�������ɓ�aÆ�ǃ���0�\h�ӹd����6�0_���b�4���{vn������iU�f�:�'�Cg���gUU������`� 2�0)�O��۶m;���U.!!#F����>�`���Ov8G�;���̿fee�PRR��?�`��D8.v���
M�����"��@`
|��<NU� 6Z�P8�!.��Q AP�M~e�� 5?-+$�DX$�\x�鼕�{m�{a����`u�0Y���nh!�i�թ&w۵k�/�t��eY�٦M���q��RT�LK��_��z���v�MD���5���f�x���w�y�p$�a2�b�^�t�����`���2��/�4\�z��S^^�"�G/�EQ)((x��nk��:�����Ā�8˂ �<u��_�w S�N���?��jǎ��}��D`L��-��D]�v�h1���0 &@z�����Ph.L&O�����e���$ ��l.��$_���L� �@�a?��!
���U|�hؒΟ*�[)���E/������h�� ��k� ��U��>~���1555�N�֋ퟟ�`�ȑw���>-Y�s�***PTT��r��\񋵡ٳg�����<���]w�ϒ����֭��[o����Ȱ :��۷o��f�!==����{�l6?<~��+V�(�v�Cg���������n�2thqqq8z��}Ĉ����ovfϚ5k� &������wnG����VVVv1b��z����}�/��2����Ν;�UWW+�pX��/�#G��������=N�aÆ�m۔>}��4MC�4�� �v4- ��� ���-�ABu�*ϊ�B�[ �m��j����@��W�j@�( [wZ���:8JG8B�N�A��.��@A���2�S�=����5j��ۓ��(�j�,ಲ���7�(hC��"X�:��~у>ؓa�]��&V�\�),,��W^9|E/Ԇ�~��I6�-�gϞi}��AII �n�Z-�"��X,��?��NF�u�����S]]=�k׮L�8�u� �kTNN���}���X�g� 4Mç�~Z �I�&5۫�7�H�(�藿��1��ƍ�
VΜ9�q}���s�������������k�;g�ƍ�Ç������@�y�g�,�q i˲ Ey VkQ�6���� d=�`KQ��_�!S��3EZ��ȨN����-&� p��-��`JM�k��5��A�� ���R�Zo���o����BЃ�scr�Ng��/� ��μy�
&L��/>��~����`0x���,��j#�/��b�,���;�H;w�(--]��x2���+�|��=6�-u�����]����&�W�.:~�x�պ7�����kފ�Щ,[��=}������_�p �ۿŦM��_|�ŧ��g�…����߿m��vv�ׯ����4eʔ��󺯿�zw�ټ��m$I���������kjn0���e�&�_�>������?�4M$I2>!!a�#�<�ag䜛�:��"!���~� �ix�� p(D���=,# �?@!|c�p��m�������l�Y ՟�;�C��޴Ne+w�����v!"����2k+v�=���:�H�,��ӧ����?���a�$x��\.W%��,ˮ����-&� �#��pX�Zw�{�'DQ�qÆ �,Y�ɓ'�$Jo�`�N�<Y0jԨT#�5t6 H�e�����뒒��].�t�>��<Э[�h��!9m�����`|֬Y'.\X1dȐ���q����P��yy�.]�q��Ŵc�WL�i�����#FXA���8}�4��p��tn;���ŋח��<�����/�v�]}m3Mh:t�~�CUy����HM��� �XN��)�o����jM�͊}�P�������,py-� FhC4MG�c�KJJ���������A�o�ƍ�@ p� /��������� ����R�L�2b���7r�رgw��1y�ҥ��v킢�Qq��c�Z� 2��w��~޼y_���;,�3{��e���^,��%vc�1v�5&�3�d��hD$�Rf�+3 ����f7=�����Ɔ���Q�&(}��s�������y�<�̼���j2̹�}���u�x]YRR�t???i�>}�
��&C��,��H$����A�|���dgg�@ ���ϋ �dɒ�G�ɥ��k ]�r9�p8��6� �l�bb�n7��o�nݿ�e�ƍ�����.��7SWW�k~~~��b� �7�?�p����N"��p0�e�r�@�(Pr��RC�ĝ�qb:�]���}#����'��!_������tQ���0ۉ���`�������Ø1c���a�[>E��DUUUf�e�=��KJJ�a�K��CQ��0L���ވ���=zD5�77**�3A>��3A�)��@��447�]�h_�Z�jsvv���ѣ����[QPP8e�:<<\ڻwo� �}||Jccc��T�K8���)��y�����Յ����s:�;rrr� :� �u-EEE������Jo�ݏ������d =����'N��$yW�O2�͖-[�����X,o���O0 3X$}RYYy���P=�q��hn�wW��nX�~�����CU����e{@}��ل`�c�H�E�C�� 8�~�Ӊ!(J�J���ŵw,��@��r��?���a����������;��bcc����=���O�y7h4�_322J ���Ƹ\&p��(���)*��  � ��ÃKKK�I�~��+W��d�x��&�D"E����H$���r(..��������� A�[օ�t�����}�v{�%�W�XQ�m0fq�����?888R$ADD̝;7ðE3�,Y�\jj��ڇ\�����swT����τǻ�(�ʞ�n�xw�x@YXX����=�$����}��z�;x�`�����8bccC�ș9s怆>jjj��pH1 3������7˲@�4�, �A��3H�0@Q���z��˗a�����v�N�����!b�N���%s�$Y��(��t��E �p8� �����1�XB�/���� ����ؚ��d����_#�\z����b
8��ˏ8��� ÀN��V�eW'^!��%<�HLL����wp޼ya�9��ip:�@$��b��1�vs`���=~��L~LLL��m\�~�2���&L�J$P(������e˖�o�������fz�����ϙ;wn���q8PUU��ٗH��}}}���Ϟ�}�?�� �L6�d2N�s�N���} �w/HNN6����>}z��?��ֶmۊ�����=�����DR�ꫯvݒ����_~)-))����v�v��~���=z�uߢ�� �o�nW(�L&S@XXؗO<񄲥s��n��
`�<ห@E�aW�>I�߿�0b`������ ��������,8~��?t:ݗm��h4�+�c��������ݠP�pK+$��
T�r����˥�>�h�4�V���y����=�ܡc2Y�����Ç�|>o�ڗ;�x��̻A(&:�U�/�X�$׀B�e��/����U��ϗ� �����{�ߒ�h|
ð��� ҈�n�R�'*jjj����!z��m�X���_�sss!77�V+H$�ٳ'L�6��@ �QXX�NLL���s���cuuu9 �L�_޽j����e���"��=y<^W'�ɂ|��z�����7��ѣ� w?8�<X,��u�� **jȞ={�ܳgO��K�`ӦM������#_{����f��bٜ���d%�� v{.��_ˮ��
����{d�2�Q�Q

�P�JIP(������i`��n�������b��=sh��"���gϞ;�w(�nۍ2Y��(�a��Ѵ�;|�����ǯo(�P��KK���bΟ�z�O~�|�����A�MoMU?�a�b��ʢ[�5G,&a�X'SWW�p[bm�D"yy���-zb�k�.Saa���w����8������L:v�؞�Ǐ�غu�%��Zr�F�-<x������&%%Qz������ĤGGG?w��b��:ۢE�(�Z����7}�ƍ�$���5�� @��_y�CgΜ�t���N�ʻ*++�̙3��/Z�No�Ӑe˖=����h���ƪ��y���S�j������jm�;I�`���ՃX�~~�A&+�����r�04��Hή#���ˮ����u���ALBBBP{��h4_�L�s�խji�)"��[�#�D��꺁�&�ٗ>r�W��S��hj��{{�2 �������� ��i��+W� S*��}�Q�����i$��6�3,�I@��(jRKZ��<y�YVV��ҥK?�t �y���EEEM���z�a�;�t��z�!�1c��/����b��9��ꫯ��lq���6o���I���h�ŝ�v��'N�8p�������������V�>�Z����4F�V���juj�z����d�q!!!7~f\.��?�?A��d23ĝ8�~��RG%�݅@Q��r]���v�$wӹʁ��4]��kڿ?i6�����+�;WTTԘM�6�uu���M�P�D����w��������e4��]�V����9��vǫ5�|k�{_�����֭c[W����@*uA[�� ��0n����u�җ,Y�� ���%,�b���q4M��ӧ111M���Hz�^�T*+Ǎ'7��P]] �0 �T
J��n7�:u�B$ɌF�Z���k�*�B�,����/HLLT"�@7�ә�P�I�n�q�E��Ar'��>8���D"� ����z= }�������/Cg�$���V�����}`�ҥ��M(��a����0y��@������߆?��n
\�JP(j����,[@Q��A&�/��TR`��XV ��w[�� .@aaa�N��ڪ �.ݼysq�=={��"""�DQ7�`��6
��{p�T�ի��V��W���h4F��"�����#J�̝{��ĉڅ=d��!��:Ž� �k1A�����999o |�6��j8A۾�b@x�@|�>355U�T�����}�W�^Nh�7Cee%`����k�R��eY:33�"�af��Z,�C�< �J�3 #c��n��p�$y�>�W*�g������ղ5k֬#I��J�O�\��*���d2��^�zEQ_�(��V��޼V��0>��ݭ
@��������q�j�*�k��v�~?���� :� DgQ*�:�j�D��
Y5�j������m��B!�PHM_�@*�O���r0���`a�
cq��ܹ�V,����4EQ����k�U6�Z�0���byy�4���V"&�t�u>0�� �����fS�_}�+^�Ѭjn���7��>x�堠jE��������?���K�����9w�{���:������������y^�a].Wwh�Z�k�Fc �Ǐ��r�?����v����vٲe�r�P(\�0��D"q��� ���\��j���p����e{�(
��ً
^r�\�0����x�F,/���!��b*�
A�K��A�3�/�����}�Ѯ�d���4}���v��
�uLKW�Y�5 �_ipItcp@$�I}9��08��A"����uuup��+M�I,˞��t�Z|�V�j���gk֬9����=zx= �˧���jk��$�8�˅q4M���c CM�?����0 c�� H��4�'�w7~0bcck���<x�E{�
�5?� �a�!00� ��%/�H��ٳg��J����Eݕ��Z횸�8ٕ+W�KKK!22F� ��=_�8b���O?� �~�ᇾތ��k+����a���{8��A�㸏�hՒ�Z��뺺��W�^��мB�R��
o��^uuȷ���Ʋ p:� ��ߑ�rM�$�ݎ�� p�6Z��nw�Sc����Kb����j�J�F�QG&�7s:�O�9s��r�:�t͒H��D�
��:�X����JN 4Y,�Zm������&���?�˧@v�8�ɓ�/tV����'��^z�������a��̙3�.I����v�큱ۭW��i������������S���֬Ys��|㡇j�)�q���'�h4k�r��@���pW5W�EQdذa}/_�|*555'%%eC'���y�N�3q��̙3M�����p1� S[:�b�|q��)sG�� ���PRRb�X�jժaގ�=�Z���%�~�v�9@�R�n͕�����ŀ � �������v7��%�2Y��a��3���kWPP�K�.�� ��f(�.�"��3O�$ �@,�r����@Qkj<A"���
[^^�bv�c"�u>��"&&f�Z�Ʋ��wfgg7y��qp8���� ��u�i�H$��4�3111=))itS�%%%�MLL|�h4�P*�� 6lȀ�[r޳gςX,��MA{Ibb�त$����z��e�<x��۫~~~�p�B�̙3�3�U�Vuɞ}<^c�nwʉ'Z�����,�H$K�F㔖�W�՛��ʰ������ �o�~��ѣ[����]�b�]���ҿ�k`YH� �[�].8�BC�@���\����� ��U �]�;��V�*�5�pԷM
��v6����$I���kk+�F�ZZZ��/���%�[S��4��X+V�ȧ(
q8���v������[v⫊��v����F�z�����a+�\�LV��^�N' ��D���].�L&0��p��+� /.^��'���OB��YAB�R��J��Dz��l64M�i��W^y�٥ϥ��p��U��ϯ��퓖/_~�E�zXZZZ4���n��$�S(��T�Շ�f͚8�R���dRI���h�r8�����c�E�q��b�B���P^^B�8��>}�����]�O�~O��&$%%ɥR�Y� b��$��e3u:�/����JZZZ�3�<,vj�ϣ(��_~���a�g/^�l�۴�������{�G����.\����5K�.��v,�d4��z�G������.�\~��ں:�5;u�?H$A7�_UU�B �Am�dP*�_��]�xё���itttT��s֬Y�و# <�E��;��f�_�5��7��Ըu��}��#F�X,���:8|�p��bI^�xqjg���^����n�,K(M�/R�����K���{�wƛ�� ��ר�+W����d���O1t�PQcmh��3 D�� 7�}����� ��8ޫ�������Y�M
��h��>d�� *�\דq�� �/_��}[�����î�g��q|[ll��EyXjjj����[cƌ!jkk�b���b�***:�q�ߖ/_~K�H�^����N�i��Q�F)O�>]�a!�Hb�p��m�0a/G_~��EQ���˫�v�&��aR�t6�a�-Z4����k�7n�X À�(`Μ9c�������t��ט����O=�T��^����V��f�V�]�����ԂY�f������:LVVdgg���j��'%$$�̚U�Z)�;Z��4$Y*�_��8�b1A``� �٬�q�]R]��ž��55A�\p�1���p�ر3QQQC�sm����E���ꫯ��>Kg��l��/��������㐴��O���R�v�� �GGG�ۍ� IDAT/��P���"�.���r�e������\iXXXUUUվe˖=���:�
4�Q���U�^ߛ$��sss�(��=z%AAA7��8r�8p�"���G
O�2M�E��`(�����M>���������������d����W�^�K�.�.]��+�/���2VTT���=!����3g�H�R����C�����zC�JLL��w���E}� �\*��gFF��I8g6��Κ5���͛˝N� Ô���A�曛�KJJ�D�V�-,�ٳgk�J�@"��m6����ו`V�v�{x;��~�逽{�&~��>o����M��iz��;�?��s^���Zv�����b�@aaa9��[�����Ǘ)��s���aYP�W ���4���$�W̲`X��w�����0׎Gn��٥K��<x�b���ӄ'��zWJJ���ŋ���׶�rE&���O>���fc#""D ,��� � �/��������?�̒n�}D"� `'NTL�8�;\RR����� ���$�^o����`0�)..�)�H^�:u�nݺ�2V$����;
3H$-�(��a��&��ڡC�j\.W�G'm%�NWϯ[�.����c�Ri�������v��6v�F�9o��Ҏ��OMM���/�D���|��h~���K�H~��p<�p8�WTT� ����(곶]!��1��ml
�w�!f̘A|��7K7j4�s��]�bE�� �ضmۦ�3g�5K ���`�֭�8�˿�i׊+�WG�i�hqqq�����$�d*����0������@цW���9p�H^��uG��몫���?����Ǝo�yI�G/^�h�ׯ���c��T*��#G"YYY����])��8N%h`ݽB��P8�����Q�Z���Ѝ7~�cǎڧ�z
T*���1��5Y\�ә�f I�@�V7��3,Y�D `0f�t�m�����Z��jm��m�V�y����0 Ä�T�dKT�}졇R�߿4Y���_ߗ���s����N���zɮ��ѣ5v��oZ����c�h$I�={���TI$}�l~�7@�����v# ���hZ�f�fY�n�����/_� ���&�e[�j���t�m}���f���dmj�ѡF� 'O�\�����Z��z;���8N���c�ͯA������?Ey]΂ ���8Ŷmێ�޽�m6w�N f����x���_���u.[�L���[vK�ǻ���I�z��!_��wo �@0d�ʕݛ��իW+JJJ:#�6c�=��q�ލ�s����{���\>jk��x� pp8�zx� (� nw�_����z�Ѵ0 �a8@�����N�*ٿ�a�${���U{�<��m�5�'�W�\��pn�p�B�H$:�z��f��V��m2����ݺ�\�R����{fddl�Rhw >�ْ%K����.���+�l�bq:�m��*���!�w
�ꈈ��� ��ݻw��8>�%c�n��YYY]��ѣG]�|���ᄏ�k׮�uuuǵZ��ގ���$Y[UU(��D�2����~FEn��+��p4�D��T�(��q #���E��ԩSp���K�.�|��.��0))�����P4^��ȑ#�ݻw{��+A��3τI$�SF��Yj�v���v;0 E�����`������A�a��c�����.:�.=666����������233�˗/I���I*++��v��v<�u�`b�^�W����f�z������h4�v{��cǼ���8())�}���7m�T�����X,VUU�/,,�y��W[���+�N���=|�qp�p8�W�PxK�+��*p:_�b�� �u M�x��,[�h�P(������ �5�>EQ@�t%�a'Ϟ�^k]� `����� C��i c��ř`��(* XV�V�(++�aY�o��~0�#�Z�������y���`�X,��6mZw�J-]�XQQ555зo_�d���Ǐ�0 �zlB��)0 �۷o_~�3���/�n�;�ԩS+|��� ���n�Z�v��:�-4Mo�wn^���ׂ��e��Vk)�^M(��u6����@] >>� ҔJ9�l`�ZA$�Aԯ�s���t*�e �7��p H�$`������е �a�`���|��ʪ#bqii���Ǐ����  ��faE���_G��ꫣiii����dx#��R(ldϞ�?�1�B�~!��[ӵ�Kx��<fѢE|x�X�n�NAFN�4I���ϟw;v��e�S�7y�d�O�>�n��e��L&����׵w.�׹$�А������:A��`���r��V��k׮�j��"�QT��t��͛�N�.���+t:ݾU�V��$y}���S�b����G�q!0L/�Z�@.�_%'��@ n7��y}�4
��<�� @�^@(�\v۶^����N��Z�6�������d����o߾����#v��m�N� ������yb���^������]��֯_�wѢE�v��+W�u��~WZJ|�p�FK$�[n����?��݂O�yfɒ%�W�\�}׮]�%I���?5b���������իW�*++/]����gdd|�q��}��ms���?�;��&�ibb���e�8�W:�|ǻ �I�`6��u4MSA I2�a��4́�� �x��@Q�?�P�K�)8w��Lh6`�e��� �s��j���F����`f�t�nРA��_W(�BM� ����PH��� ,�"P(�Z�N��D� ��bq�����������t��x�������x9�0��zH�a���B~~������n�aXw�H�x��N4u�T����_HKKˏ���j �۽��;W��]6j���ouu�}�Π�-�Ey+������)������ �OCBB��@PPP ?��������������?���mJ����m���5ǡ4MKG�%())�+--��C&���r�_���eB�, ���JJJ 77��t:ߊ������~�X�re�ۖ��x��~����Ǐ���
�n�a��h4�~'��������y�� \Yڡ�;'O��ߊ+�k~��'%%�j����r�-"�eY�X� ����~�+I��Ba��v|�$v{/�H��ݻ��++e�*>~�������R�a�)�d���M"��^�x�؆Ʀ����0|����A�}�]m]]�������/ ??��[�ٻ�TT�7oݒ�$�;>�u:��0EQ�J��k˦����˨Q�����O�Ը�P,��X�IJ,�(z����?�M&�|�$����;���b4�B�pilll��c���F㌠���͝;���s<޽�ĉ��Ǐg
��˖-365v��զ �v��C�����g �X��+��ԓ�%�ݻ�/S�N�k�}�� ��9 �M�\u��v +�D4 , �0�4,��/�=��������ξ&O�81 �E����0!,,�ٳgw����|�M��b��骼�uIIIӟ>�7�†�\$�l>��#y�s~�P � 0��[�n�O�Ǐ�ީ��9��M�6U8�N{uu�p�^�|���Tbb�B�0�l6��o�?RRR2Y�=�|��Ş�;##c���� ���<^��u�Vsyy��qelll�}׮]���~�����4 ���P\\l�Z��V���e˖��COzX�f���'� o�}�u7H$߃PX��(��"�!Eq@Q��k�޽����ydg]��\��[���/7����v�0 <Z8���|����111!v�6���8f���(Ms@Q��T�!7wT��!���vlw� ��[�d�����run�A੧�
�;wn�����N=�]F����lٲ!|�{�8�T*ݿ~�z���ܸq#����Ã>�0����'�f�R>��c$���G��q8�?���⨭�������o�>�}aa�"��2�O~[�$ɤ�g�6گY.�$ Ng��^ �RH�2�H���/�H���w/�����8�醿Jp$Yf�V`Y=oI����Z/tHLA@hh��h4���Qy��^��������F�q�W�K�E�xw��غu�����+;��4�$ɷQ��n��9srr��z���*�<�ݦ[�n��{L&Ө�kמA$9::����h���V�R�4��'_yyyp�ԩ�V���0�ץK�����#�f�u�NUWW����74F"� $�.TW���2`�U�݀aw.�d���711��Fs��/��0 �u���'z��}��,k����@&; ��n�ﰉ�HTE@���l� J�,��4b���������ۨ�R��ȑ�K��[Q�-W(*p�0##GV�� o����O�yw�+V���oeff6zW��H$)�q]�"�w�����������ٝ����"������9s���}���vGEW�@�SU�-�����}���i2������'���r�^���_�#����
�@"X,󡶶X�
p�Xp�9p8�ZAL�8��9�{�����ʺ㻞�v����Dr=���P��P���n����� Ì1�]fy�Z�.�>=]�� =zt�R�� 22g`zz��h4�����'� �`�]c�…_���}����aK����Ga��3��������^���F)��y<�=M�T��?.�(*�h4�n~�$ɝ����UX\\ À�d��������)���o2ߋ�/_^� ȥ�W�6;�q�D �O��-��E��ӹ8�]��Ƃ��@Q�G�}���0Nj��o�Ʋ,��6]��\�0L��շo_�u���3dȐ�k�i0L v����_Z��|��_=���7�z���
������;v��5lذ�/=y��ʕ+u�C*�ˁ <�E�… PQQ��lٲ�=>9��kԣ�>�]$� �v(<�W��� /..�3a„�?�����)Sl4M?տq[�<r�HYnn�cǎ)/]�ttٲeC����1��}jҤIWQ����(��a � ����zi�����)~����:,�.�G ��dӺu��=Pt����� � �h�w��B���0���_�����?�ș>�o e�?����||�9c�\�8 T* �vKc'O��ʔ'N�<�7A��<y�v��o�y�O�yw�F�Uuu�@��1���d�ɓ'�lݺ5���l��?[�ҥK�պˣ��x�fQ�cYYY�����M�R��Y� 8�O?�t,�N�;DQԱ���V�UPP�7o6]�t��W^yez]]]hLL�� �>��h~-..���յ{.�T
(�v�*� E�=U׋a��p����(
�q�)* D"���.Ӣ��lbjf�� Ng�qc���w-;q�guM��ٻ�O��Q�����3r�|"���ps��fw�ﮤ���Pp��X�MOO�DQ�D�B�x��CCCCA I��}�v�c�=�w�pK����z���h5N��1d2Yw��g7�w�S(0a„��>�lgBBB����
���q\����v8p����v;�f���Z��}��pD�t�\��Ky�e��eee�|||�5�H$6 ]�mCRRR>�G�~����n�Z�>j0޾}��Y�f�H�z�V�p��A&��R�T Q}c������Է�(J5r�6Z�re��ל��#����; ���_9uu8}�S\,��������PTA������j���ؽ��V��gDGG�}���UV��Off���?������DZiӦ����u���[�>�jjj@,g-X��_��u2�a���ߏO~y�� 2����?�8^��W�\����VTT�Zqq�X�$�X,cbbf\O~y�$�MEEE�~��� =z�@0 �艸:� �p���v}x�t�\��TS^^����P[+�w��5yr���{��cH2p<�=�m��*
����M�V�_�bΜ���m{�\.^�0���?�R��j��� ��\8p�\"�$ ���6���댎���b�
!�a��f��J�i�u:�-�G$��|+�;.��W�~0b��A��X�j�f���ў={�$I�x�������w�>���o+�Z���}����˗vd�+�^/����Q��\��&��ᦶ�d2�,�v�=� ÈY����z��s���s���0 �{��:� �p�_+Y9���!�`��0a�\*�F��zI�����z������&������q�[u��������� ?}���^�z��J�G�m��'��{Zlll�F�9�t:q�\���-�r��'�q�w`x��޻�<^W��h�k��x<�M� &?~�__�����G���+�-[�?����?��w��!cLL�XA_�A�W����痕��~�����`������j����{.�͆ ��O��A� ��\j��s��T�q�D#�n��n�p�$��sr��*wQ��.*wh���G��Q]���;f�qi�ڼӧ.;�,��V,�N������ ™��7���8��U�V�2����ד��{y+vo�@�� ˖-�������o�^��cN�8�EEE�ud\�ѽ{w��իM���ͯ_�����8�����x<o0`���+\"�,X�|��ʕ+�:Itt����z+�3c�D�GFF� ���t���:�atYYY�����,�����˞���`V��x�+��`HӴA  ��p��@A��������zl����m�z�>~��w�Ν밧䵵���f�4?��=K<��w�-[�L�@�����ž��;`/�0�Q�|����nj�^�R���㏟�����O�y����z���� G�)k�x�\^�����.��zt͚5�ǎ3o�<_�Ht8))I�nݺ�wx;F���.]:'333���˯���b���"���������?�z�G�����������z7;;;���hQAA� K�,��8�V+V�Ȧi��+W�4?�ǎs�$��[ ��z�$�X����aGQ������� �"���bŊr�V�W�՞���{����_���6��]������q\��'��������?��l�j�����o��*�;���]&��8�J�!I�4l�0x��e ì����ފ��� 0��r������zX.� �v�<>>�E�rg1��|||��7nDHH������ ~W��V���a����� ���K�+��^&�i��;���Ç],��-e<�=����W�r�'��|���Z�fM��� �j���j�4ͯ��,**�o۷o')�j�񅅅��>�pXGD�P(���n��������t:?�t�ҍ�Μ9SJQTjcǼ���1555s���{��6J��R�@(�ztRz뭷v���&^�1%%%������e����:�������oKJJ>ٳgO5EQ~"���6Pw1|̻�P5g߾}%M��oBOX�R���k�n �vƌ�D"���_����wFEE=�a��n������@ x�`0�`0&x;n���z=5���O9}����K�x<o8u�ommm���5  �����?Ǐ�мy��A$˲M> �5�����w�n]�f`�X�Vw���:�.��t�R�T<5���\/�h�٠��Z��j��:F�V�!�geeytO�X,��(��9;�q�@ (S*�cV�^]�r���F�j�ƍ�o����rMS��ַ�~[SYY���S��>>>$˲2o��Y��w�Y�bEvUU���}�]ecc���O ��1�*t�q�F,11�����FuFFƱ1c�L�3g�_pp0�<y�t��S�x㍹�_XX��&��ݻw����qÆ [�KZZZ6�q�7�����V�q\jyy94���ǻ�L�>]���Z{���F�611񟉉��fddl �իW���x≇z��v����j��W�k���������%%M���a��(��d5D���.Z��m��� �A�W�^ �v�丨��o/_�|���3�$�f3;v�EӴ�#�SBB U�V5،��� IDATkA�b�����J��y�����$/??�%�+V�'''��������������@)� �;�*�o~�w��h4�V�Z�����y����{):�N����bg����p:�O����Q>>>�0 ���CP�_��z���g2��MNN�
�u
��``�hРA>�&N���>���bxFFF �����<E ��4m.++S���z;��w�}������������[r�^������\�fMO�e]2���ׯ_?ǡ���ܳgOeϞ=o9�a ��!q�q:���:ujg���[U%922�}�̙ ���B�9PXX�<x�����BQ��-=��p�������5�?^�����a׮]��N�?�ju�(L!v�,��z��t�b�
�0s�L�M�6Y�v;�jժ�E
����#G����r�$I��b�o����wߢ(�JQT �����;v���dJ�)�OJJJz�~��2�L��/_fǍRi�m� G�]�����F������� �ӧOPRR�B�Z�e[�3�(���8��8��a��w�y��`����D�L��l����^���W\\\�^��ܿ��!C��8p���c��m̘1����7�5�7�g0�K�R�q5��cE�Q�8c� B$EQ �n�=�`��P(���f�qHg�V�Wi4�S)))��b�B��נ(�]~�mG�J�!>>>�D��4��N��G�}V Tv��펛;-�o߾ʒ�����ѓZ}p1 �|||0�$-�!���R���?^c6������~��L��� �q�����P(l555/�t�?;�*��O�y������?�\.��oT�TEQ�������궗nl� 6����.1b��q@Q�F�b�� k2���0�a&$&&R����#,C��iaU* Q͙4i١ۏ3 �0 ��DI ���% ����� �s����>888�d2m�_^G���.��f͚S2�̿G�����ٳg����ϫ>��#�o��3@JJJr@@� cƌ �������Y*�
Əߦ"7�������}�R��yMB����eÇ���H��w7��F�
�M�0A�0 �8qB���>m�����n���Μ9VPP�>����i����B�0 �B!l߾����?#::��'��St:����t�$�7�z�{���`��(J��W_U#��e�9�gϖlذ�� ��o�������c}��y��v���&����[iii��3&�����A��A���q��z��p�mܸq>���@�Ʒ�Z,�i�DQT����9:t��=z|8bĈ�c� ~zҤ�}F����������? �̛�IIII�֭����is�� Z�p�rԨQ�UUU�v��_���K�X��
�e[�˜�k����ٳg�����o�zꩠ����222.''';� �֬Y�`���0k�,����7��� 6� *++�h�����r�ĉ��8}������+���jki����̄��l
�+Z;� ��j}�ʕ+���[�m۶S�ϟot|fff��}���ܹs��n�p��.���[����HV(^
�XCct:]9I�����H���&˲hii)���� �@ 8���*�q�RXX�A�����&&&�}��'����0�UUU8��p��њ��z���#G���彬��z���~�1J"��Jxo�t:��_��lٲ~k׮-�8N�ܱ���q�Dp#�w8@��PHBxx�x�����!��ψ�bW�޽��9�600"###.\����0Y �ZRRR� ȁ�_=��z:��HFF��_���'�x����x�{�#�<��iZ��(�^ע=���I�����tw��^lllMzz����^�ӧO������lp��q�$ɥ:�.��b�J�N����aÆ C].W�������r �ڏ��[�.-''��y���rS�b��0��o�=��qw��?�X�P(f�?޼lٲA����]�[��0F*� �8Nl�X8 ��� �y����ݻw��nL,���`�\���O�y�-��W�?��������V��?��^av„ J�2��s���V�TBQtzxxx���9r�j�ۣ�}����5�D���Y`2 �[ÇGK^z�ul���æO�>������Ç�u��m�D"�'�q�eee �z�-}[����"**�[��g��V�?0�W�q�&�uuu6Ar<:�}���&&;;���Ϯ��,+�aF�N�����NOOO����v�L8���Ą��]��Yw��uuu 
<q��`0�l6����"��t�����h��ͤI�����V���nwhh��'N��qܪe˖ ~�w�R5~������w�R��֥K�F���|E�n�ñoϞ=�� �iӦE�]��Ew�����lIHH�l4����&�\��zT"�L lq�b�X����N�sGYYY�[�dS@&{ ��n��(����JuG]�0 �G}T6{�l� &L~��� �u����oZ��:�K/���t:����5ގ�ǻW ��Bo�q/
�r�����͊�����8�@��Q���Y�fo���D������r��Je��g7�����V�d2Yw����Z��y�A�R��r�\�Nע��Z�vo]]]����A��r����������۷�Ǔ AA|-�JW�����[���w�+++�FGGω���[qq����� ��x?,,L>iҤ��76��h|~Æ ��y�Y���U*վ����k׮]��q>>>�J��k�ѣG�����OHHIJ�������a ni��ݻCpp0<���2��y�=q�xm��jw �����%ZS�x���X���\��k�V[�a���r5:���
�N�$�eY.,,�<y�����N � �8nBpp0����J��z��T�ѨmϜ(�
0 ���=77�o��r������w�?j�KMM�1 `XQQQ�V��_k�eY���_�5j�R$���t�kkk�X�B >>�Arذa8���kl� 0�w��,��Ʈ���>�|��e��~cLpp0�$9#99yÆ ��zFFƓ�V�rEDD|<iҤ�����aРA� ,�?��3}��Ó>�����~����#cǎ�1{���
q5AƕJ�ڞ={~>u�T�&)**r�,�oo���?�L������ǻ�TTT�����j�Yގ�^�q���Νk0޳gϕC��8n�M/��J��=z�����<g4��P�f�ƍ�L&˻^�dʔ)�.V(�III��:/�0��-����_y���߬V�#��7��Q�###�.))) ����j��$��ر�
A�}z��}�����A����,���8L�8Q����Ó���� 0�w�^��8��� �5k 6��R���>�`��իkCCC7��� ��ӧ�8��fff�>y��+۶m����/�0a�022r��ի�RSS�|�A�Q��"##���ѣU'N�2s����:x� � ��^/�v,���H$�XUU�?���<���� ���8�E"�����w�\���4_�reyll옸��+��R�?"##E3f̐�(�}[��M
df����{&�;Vܭ[7��V'��qG(
Gaa!�����3,�+�������0�"
�� �+vDc�{bb6�dM�F�(3���da�J�f5�Mv��hL4Q���5VP��יaz�s�/ �
(}�����s�|�ϣ�s�9�St2&&f�H$��.��٦M������-...��tӗ,YB����֯__��j'���G$$$ ~����:t�?F�����?����� �J����/4F�g$%%9��������ɢX...��Ç��O��<���O�<ٕF�Ap��I�F� 
�߬^���S�~<s�L%��a�z�����y���T*�ڠA�V8��'�?�G�m|��QPP��Q�f�k�r�e����m� �>bbbj1 S�յ�� �(--�V[b�u���O>�(����߯x����b�^��y���l��b�ok�ܹs����W;!��X�V7&�i|�@���� #����D�s5W�^=�V��v�Lf�aX��������c׭[Wі��V�~�֭����ӿ�⋿%%%9����!�3l�00`��#89��a/m5�j��?颎=�9r䞢��7***���Z�ѣG����j*��upp>�4ڣ�Ow���9rD�V�g��Ǖ2�;�1jԨ��ի� ���|||���KD����p������Q*����S�L�5
:t(�F� 8p`��ɓMOOoV�i�Y�f1�Lf���*Ɔ ���ٳ���azz�-[g����̚5�JAA����̜�}YY�=�Z-���|�D��)Sd���������ǎ{�ĉ]�HYzzzMHH���߿����a��t`2�@�P��ꕖ��kk�~���~\�j������8q�x�ر����}�����7���������&L`����*�j`�~��G��|r��F��KJJ��������}�`i�X,�����WVV��֭[������ٙ��W.^�X^߮��._�� 22�M(^��L6�F������
^�h�s�=Fyzzv��t0ooo:t(�~3�B���-Z���r/��r/GD��R����G/u�(��:�ɔ��b;H�}����555������իW&���u���^���=���l6{j��|A�_�r�ˏ?�h4�͏?www� Ƶ�ߘ��nsz��m�6mذA߻wof߾}� puu����9v�X���{�{�|>�����h� ϱz������I����B��ztt����l���Gc`WWW �MJJ���{ �]�V��d2S�a���0:�:\�r�g�x<x�wxt:��\.�:#~�$��X,��W�6]VA�f9z�(VYY)�u��"**j��l�Nc� �0��� l6���7����!
�y��������b��˹�]�D"����]����w�r�B�R�BCC�� G�Ӂ�f׉��.9V�� �0�j�;v,��_�&���ˢ�h� O�)'�-,��ݽ:�… 9T*5��9��/<<|ڭ[���,`� H���ՁN�����ݵu��$""���k"��� ړG4�
r�R�� �X�vm�N�����Y `0���]��v���2c2�c�Z-#;;{��ӧKSSS��>\�o߾�K�-�&� �L&����3��� v�C`i!�Ht/**j@uuu��Ç��������nݺ�g�FFF�ߙ3g�ue;;; e���|e�,H�g0V;v�z�ܹ���!�<w��Q�Ƶ�΁< ��
�Z��s___�r��$�� bu*gg��%%%�*�
����l6`0�l��e��p�����j�~WSS3Y�P��X��c�P�/�ɴ�ڵkO�7��p��A��e� ��M�w�.]>A:�^��ZVVb0~xv�Γ�fs�����Ν�ԙ�^&z�ގJ����H�
���b1��͛��߿�n��Ů:! A����
�D�om�y������op��`pI�t�&g�����03��0�7�x�o�ҥ�ӧO�lܸq��jM�Z�<�P�a��!>>~<��w�Z��_���Xlg0��F<..��3�pǣF�|�4����+�z���7o����S +[�//4� ��~��"�@����qqqW�J�Ͳ��O�X,���+�Z���<==�lݺ������b�U$m���qۻw�R�P��&A ;;[�T*w�:Ґ�j=i04,q`�X�����nݺnS�[�Vo�{�n-�B�ɓ'3ƍ7���鸻���w��1������٠��4�͛%ɬ��!�5f��'� ^o�3�N7?����0 �3�ƍ�i4������׺4F�N�T*�]�x��j}�T�Z�����j��@����SP�Ov��pHH���o�=@.�[�b1��y���h4����/����Z[gi ��J�JKK����߿W�\�;w�@QQ���!]��j���<�@ ���Y�� �ќ��k�
��`�E&[
���u��������Ǟ?>��7��P(;���{�:c[lܸ��`0���}�ҥKY�����������>��x��=�C,�k�Z�R��񭗗888 ��d###�]���Ao]#H'`�ك�T��B��_9� @��
�����t�� ��Ā˭oX,�A��a����0���16��KMMEG� N(*V�^�r�…�iii/� ��?��s�Ω�����_�����_~)���8{���s/^L�z�꧗.]J=s�L���ǻ�H�())6�}��9�� �Œ��*ꓳ�7oބ�g�VEFFζa4�P*�s���WƮ��\�x����㕔����k#&�yvƌ�
�L&̚5��l6'��bދ�~��b�3�!qqq��^3�L1�N�z�J߾}= F��M���k_#Ү6n��!I�v���t�G�_��ppx��h$A�{���N��YL&�ݻ7�l6�T�U������k�R��
�03`t:����. ð̸��t[gF^}2��-
���˗�4/_H� ����ˊ����A� ƙ-;��dឞ��Ξ=۹��"]������������.Y��+��oF�8��W�^N�.]��8���ի����HJJ >\���V����MEEE;ccc_���L&{�����ٳg��VYY G�����_Z��_D"ѝ���]�vʹZ��|}}� ĴZ����?熇�h��x�0�t��۷ߝ3g�?���~� ��t:��z`0;8a�Q�հg�r��XMM ܽ{W��� ���n���R�T(--��*��V�ue\\��Ύ���b1���(��׿�l�����^������s�\=I�{�/_��%}$%%���>((��Q9��c׮] ��—�D" �R�#�z�?�b���y�B.������Z��T*��
�:v��F��8q"���B��6�$$Ib[�n�9f̘��y��㲲2(//�߹sGc2��EGG�[�뤤$G�$��t��={�t��ϗ����������H��5���A����-;��v �ٽO.�~�=|�����s��y� ��o�%|||������ȁ�d��o�����d�T*���k��E�Z�-�����Y���C�^��%I2�j��ׯ_ߪ��7n�-[���`0^�A������v�,&&�s[gA��M�6mrppXV[[˷�����GxT��E�E��d��?Ι3�ɥ��V����~�af{e��6mr�q����uܸq��k�����v�Z�N��V �cF�G�-[�0,����N �V\�B�A:�����w|�DO76{'�h-����[� ���dvP—�^�����j2����H{���S����U5D�f�H$�����/]���ŭ���P]]��Z{II����g0ooo���3���\]]�o߾O����C��ϯ���� QDD���9>=z��aÆ�GwH7���`Ϟ=u�W�n��i+�T�Q@@��ɓ's�޽���ٳ�L&��j��S$I�FEE�>��\�utt�]�pa��KMMU+�� � �]�����R>|��3����|n���
�Ν;�---�X �3�/t0�t*���T*�٬G��b��ˀ�t:���q�V�͛7����f�x�+L$�KHHصkWihh(��ϯɶ������]��h*�T�-�ш�t���e ��A`w��Y@�R-��999}rrrT���/^,W�T �x�������s�8����W;lذ��G�TǏ���� l��^H�����  ����7(�ʩ|>>|����L&�a�ڵM��7��|� �M]��=y��0��]lذaHyy��&���ƍnnnnTj�e*Ξ=[YXXȴZ�T&�����%� �@"� �r����F-��oy���
&S"���H�j���Ӟ?���h�X�v�}[�A^Mb�����p���q�ĉ��\��k999�+W��pU���E"�����b�B�l��b�� �\�P��Qϐ��X9�|>����������f��f3�9sF����~�` �}=|�N�:u)22r��� ��֭[�;~������v�]���>}�tt���d IDATt�����H$�2dǘ1c��D�ȑ#
�[��Z[s��D2��f��R����@�q�^\wj���������*;#̓f��Ar�\��pZs����:@�z~~~ ��gff��m۶�U�V��:����V�.�H�8p`#��p1b�ӕ+W��f�N�ɔWڊ>�w��96<<���V��^���[�… ����� //����<��`��t��f�XG�_�>�q����wt,����[���cm����×���ܙ>}z���[��{������۶m��jժ��B��i��x�2h�$y
�7�|,��Gq8�}}���9�YE ���gϞ����;v�{�F�x�v&��p?H���������΀�� p�b��$�U��Z�a�;wi���vW�^UY,�����������΄��D"�A8(��ƞ={�m�V�o�Ht�-}���u��@,�$I�������
���l6�֬Y��l[�D�~~~������M&���R yeee�+++gm�龢����ر����Ӄ\>|x����o��0�j��pE+�˥`���� Kh4��kז���zAxz{{3�;�8}����dV�L&��`� ��5GsX��a8�;���qp�3��3�0�t
�RiggG3�{@E��7z��~�6���׾o߾��O?�߾}��O>�Dc�LȫK �����R� 9�E�<<<��V��>|x������q�P�n���
rrrnDFF~h�,�r��!����!!!>>>O]�r�0`��֭[O����<{�ڵkKNN�.++����h�;���0 î�&�L&[���!S*�����|>?�%���T*`��%NNN��,YB���[�@�P���� ~�ƙ*򒋋�;��di��@��.� �$��"tgÇ�\.׬V��:����b1S�ќ��hҒ�����ݳ�YȈ������U�:e %�4�Z��u����'O6��:f��3fL޾}{�T*���u>��������jǕqqqw[�M ��`0���x��ڱcǃ��z�ws�[,��?��� (**Jn����P(�9<<����ގ��� $������e#`��F�Aɺ �H� ��/�4����r������������`�T�Z�%y��ٳGA��H[�@�'��bKDDDPQQ��G�U<{��� �̙3���\ONN>y���߿x�޽Ϝ9S�X�
����$��#Z�/,,,\�P,j�����1���k����_�n.**����nu[��4F�N@�RO̝;��b9�����7o9��D�F�X,�N��c2��J��uy�ܹ��`0���H$�PWW�zFFFI�yRyEdddԘL�τB�U[gA��DEE}YYY)����?{����-[f���-صkWғ�bcc�JJJnVW7^�I�V��V� �Lz���ח��>�L(�J�:::� 2���~p�Nw묺�#H�J�q#F�����-�vvc� b��Χ�{�F� �����~jgE}�yxxؓ$9��9�ef^�jՌ���7�?�R�~�����<��ݻwO[YY�Sdd�f[gA�z��?))i���EFFn�y�fU]]��0y�d^�~�>JII���3�XL'I��`h�ǁ$�U�o �T�fbb�����J.�{f�С�gϞ��J�M�2e�3�͎���#�;gw���A�ry��>�N�/y��?��h�(���j��սA�� uu>P]= L&�X�d����=z����,[�@���X,~�M�$I7�e�e�s�� ��\�2��Y�IT*����)bӦM7��\�վ����n�>�㋿����G��u:]��K�J���;j�(��x�7n���Gj���1}���:nܸ�� �,]��~ԨQ�־l�P(п����KU�.!!a��3�#H�H$ﺹ�����K�<y�0OO�mh4��Kǣ�J�*5h�(�����3�H󸹹��b񏏏o�V�nH�t��xv�΁t���,�իWOEGGO�uyV\\�񒒒8��"z�s��p�M�)���`�'�R�@"� X�f̓����N��[ZZ�TM �`�̙�T*�AG=K=���������x<^����իלgg�meӦMz���[bbb����#H;�Ÿ�����s��fΜ�ֻ����h4���@�ӁFCEY�"00���r�T�A� ø4�a�H� I:��u���?�p��� HSD"�n�@�듟}��g�f�9"--�ڥK�]��d2!44����t��be�ܹS@�P&j�����3333��Avpp�T*]���R�k�~���J5 C�����+�b�Z۽�VشiS�F[d�X�����W#H;0`����-?�i���� �&�T�*%"� X��Z�Ҥk�����ٳ�����������΃ ��ˊ+���榤���k�M�^��&L�<b�; ���h����"##������?VWUU=n�a�X+ښM*�.vppHMLL�߲e C,����?
h�)H����r�^�����n���ĭV�5�l6�TTTD�C���Zh� �H,ە��_���qi�e/H��8�-ƒ��?߱cǍ�� !��NO�߿?���Ŝ={�"++k�ʕ+{?;�� �����B�X����n����� 8�3s�LPH���[��R�p���?n޼Y�h�h4N��̶d�q�� ����+L��k\\\rRRR��t�`������0�3g��J͒�d�ڻ���$QBB’�����{s���t:�h6�1�$� 6��, ��E�v$�5����999%�X-�t��ppp`�`�X����3!��&99ym�޽ivvh pWr��!Umm�022r��� Hkmذ��F��b2���bŊ�T*����YM�P�M���p��>����Lܲe�5�$�� �nܸqII�kuuu���̚���p�5���9���8���:�����z�j<�J�;;;�����h�|�r�����oذ!d�ڵ�k'����8���l�N �l�͓RSS�eee�����{RkG�P��|����3YXX�/�1�0�mO��� 0���D�nrr�)�ٯ_?[���*++�qqqh�� � ��0�ٌ���*8����[��ȫ�d2�tuu��h�K$� "����B��h|��=z��$�c�X�Ow͚5
?������D���/d2��VF�ۣG�z�Çg2ĩ�}6 �B�E��`������7������Ǻ��KLLܘ���M*����dA���T�X�ԛ�����G�X\\L����m�1 �����\ZZ�d�����$I��' ��O�F����L&󆟟��LJ���t:ZykK|�f�g/Y�䶭� ��*11������@�U^}.\(���[񍭳 H{��/��5j� *�����b�n�ƍ�F���A�^x�R��}��)�{{��aaa����$�%%%���8�H��䊏�������t���6���nݺUI�����޽{�*++ߪ?�.))I�a�P{{�����s(**� ���
����I���P(�P(#�J}@�ӭ���������]XXت��_&�M���?�uڴivǏ/�A111���'�~�hi#:��0|�p~P:��ep��qMYY�V�P����\ε���y�ĉh��dffV����"""��/�e�X�bAbbb ��b�X`�X�(,,�9hР�X���0c� �� ~ I�T*�U(~�a)�JNJD����b2���l����%%%p��ɻF��] Ü��������)))��������A�V�J�*�
<�T*���x��j���@��tt�J5�q`2�����Z�fM��_��ZH�ӭ ,��$I�[{����0����j��P�n��AQQ�����餤��ֿ���m�X��
�Ո�bg''�����'5�&..N�y�f���J�\C�p��UCIIɏ���h��t9A�Y�z��}�F��~YY�+A@�R_x���,^������Ӫ���$&&n��hF�P���/I��
E�Z@����5� ���~t���f�9����r���<���t�Tj!����6�}�b��rrr|����|>����C��l����~��=''�<� J�?nWUU�O
�� �v)�͠0��HLL�e4��D�l��I� ͢�^QQ�<y�\��'3��LgggFee� ~���b-1��$Ib��M��Z��ƪ�"���­[�.GGGG�: �t�g�<��b�������o~\�x����7���8\.�_��%����֬Y�ݹs�{��L��dA��VSSc����ƮI������u�����Čk���g��(�� 
��6���d��E����2��X]]�'����pz�t:]cm%�L�D6=��)h���b1N�P�X,>�4`�L�aXH�>}l�[+--�'N�qss�WWW�6�͔���
�����͛O�$io0�b�'..�"HG����;bbb���b����tN(��i�Z8q�"66���yA����O��f�oΚ5k���C���h4p���{{��ښA�RU�d��۝�j�Q�P(��f��t �V�ٜ����n� ��-[$I�0�<׬Y�v������~~~r�|��b�nݺ[��w��I{rO�-�u��+A,[(�OgZBB�4[��J����?���ێ����edd(,KDiii���g�e��ӧO�5j�7!!!�S�L���1�X��d�^��A�� 6�uqqy劖 ��w�^��d
�u����sIII��������ɴ磏>:���&‘N�[��OsY,�r�z&����u
�2�q{�ɤoN n���n�Z�z�� �V��q��N��...�P��jgggo�G3�)))y��(11����x�V�h3��ye�t���l�&��h�_�v#
�v��F�,M�9u��l63���?�X,�C�� ���z�����χ˗/��t�JJ��vvvt�^R�4�B�܈��˵�c H��J��L&�شi�<l�i�_���h4.�DU�΂ ��iJJJ��߫W��/++�q�=��B����.n/$I�R���R��n�R�c����h4�?s��0R�t2 ��h�4��u��������$A���z�Bxx�/� ��3����$%%vww:a�w�yyy���������A�M&�z�X\W߇\.��h[i4ZZxx��4�«Y� ��v��������6��aÆ���f�9�y�o�vG�$|��Wdpp0v���V�u�%K�܆�r***���㿐$<e��?� �ӧO�UUU�jkk� ��zݺu6x�III�G�=�������7�YYY룣��l�A:�T*�a��[
��'�m߾�`����8��9=�� �w��\�$���&T����_|���ߞ>}���ãCgA<X�R�.GFF�{�Z|||//�3s���}�ȑ
�B���U���ڵ�c�^f6��>>>�8�s+++�V��N�ղh4�{DDċV��\.�b�5�5�T��f��M�R x<�<___����y�&���BQQс�����o�ƍ�@YYY����w67gs�%��+�`0,�y��A����W"��uww��������e���K�.�Y,V��juh�"��h��G��h�����x�����I�x ,p<xp�;�u��-R�txg? �t�ټ!77Wk�H˙L&�z�* ~��������5������Wnii� ��h��GQ���w���na2�{ڒG�T�I��:t�VWW��Z)33ӨT*�(�E�]����>�7����ݼ���K$�E2�l,ȦO�>d֬Y~S�L���z�R�L���eV���� ~���~�j����|
��e0f7:� �I�&��l��i�&�'��8��0�L�J$�F;h%4F^�֭;"
���u�HtP��ԢcDl���������^O���4-\���q�٣�V+dee�avvvI���Z���)
�3�y�޸q���oڴ))!!aP�=�t�����&���+W�(l�i� .�-K�/D�W��b9�f� f�y�ƍ9��������3��'Ov q$����b1[&�EJ��fW45��&��of�y� :��ӽ{����殉������F����`'�G?k(
���ߕ�bm�r�?̙3��������ƍPYYyðd�ћN�����0�%y��������رcǿ^�V(~UWW���r����Cm���N�9�4���?���d������h4a"��ޓ�$��.�n�AZA*�N�ӧ�w���=l����}��.??_;r�H7�G[9�������@�Z�6�����r�{��E�:u�Ks��h4���m(,,4�'�|����(ҩ�R�T�� ,��: �<
��;��bŊP[gA[ٶm[���=//o�@ ���󤤤�y������'��o�UY,�k֬�n޼����ǐ��B+��-�h���Q��;����i��l��������i/�O�m۶���z����o�H��Z���ۧf�ه�����3s����]��oƪT��H��d2��*++W�����%$$|����w�^ϴX,�cbb�϶��dcY,���\����d1����y���;��l6����KV�X��L_&��X������$� �ź������t���r�J�ʢ�����g[�#H+�� �B�n��3� 0�=s��ǃ_���P�J�]�rEWVVfT�TV:�n5j���/����;��t�R{&��(��Gt�C � 0��+���1�f��Ά#G��P(��΂ ����<x����/��d��ƍ��իW/��j�[rrr���o��S�ҧO�Τ��;Zҏ�h<��j��� �Fggg* {Q[:�^�T>=^g2��b�`Ϟ=������b[?����˭�&''�u:�w x<G����q��ɝu��mW(�5�t�N���I,3�Tj����&��>�@ H_�L�Y�j�(
��չ?����/�N�K��-�J}�l��ѣG��4io�̙n .t�߿��͛/���f��f���b1��յx����.�El� �j�����b���
c�Hff���ݻ+�F�b�ذq�FΚ5k�J�&����ׯ�w'Nl�6yydee�/_�|�j��ݖ�=ҕ%$$������ɓ{���#V�RSS+U*ՏL&�M�$�S�L����(���yqY�?�������<�x��f/�n�Ç+***�W�^�����d�O� ���#=��������bbb=>��T*�C�PI�,ے[.�/�Z��P��쵝;w����6���ޢ�����ʵZ-����w��J�����i�VZ,�988�R�5f�y�… �=}E�P��S�j�Je��`X&��X,n�m/�� �0u�T/
������f3����|>`z�dk
 ����VJ��\YYi���[4iҤ>l6�o�'O�zƌ�ǎ;��/@?~�� yyyqX,��y��
!++�� ��֬Yc������x0jԨ�={�td��ͺ�0����T*�NG'�A� C?n�8�cǎ=��d�9!!!=222
���ԩS�)S�}||�Lf���`���r��Ҿj���3�� 2���=��S�T��;;;��hܠ���iii���'==��ĉ%'N�h�K�'N�NOO���k���۾�� eqq񎚚L��r��겍F#��ח�R��BCC �?��$Ü9s�����߿��ɓ�t:�A�, �������p��� ��ܦk4���̙3j„ ������ѣ��IF��� �o����l�o6���c����"]Ϸ�~���h���3���e���p���q�F�F���N�[U*���>��T.��$�Ϊ��R���c�e���������o��: �?$I¹s�*�޽{ �񈗡�#��쒓��,�΢E��Z����o�1P(bٲe�}��iT*�b�P�&�J�{xx���`���K�.���۶m�2dHHS��[��￯�j�}�Z��y��H��ѣG?u����獥���Æ ����u���K+++{Hl�� IDAT6����6l��G�#�B!���H����
��Mݳm۶7 �W4퐽����ڛL&�ѣ�x<HOOW߈���X��ݻ'���O�4ɻ59��������
�B��h~����@`i� 6b�[�p!�%��_]]�߿_=p�@�ȑ#,!R*�PPPT*
Jt:�� GGGK�=JJJ���V�GEEm��# �s����w �_.�����գׯ__h�,��da~~~�BCC[|.oqq�:##��h4��r��F�1(::Z����u�ر��z=\�v�����o?{obbb2���9::R\\\���J.�k7~�x��i�~3��| I�+322����n���Oj�͖-[���̭?���ѣ�eee�-��L�e˖1m ۳gOΪU�Z|��\.� �H$:\��D"����3A ;;;�^�Ws�\�F�q�`0� �X�x�U*��2�S���v� ����4����*���8�bŊ�ϝ���|���[��1ׯ_�_�z'�]�A�h�ԩ���:*((�k�,H�b0�����ӧ���X1�Lpww777� 0�a����>}����ܠO�>��� �J�=~���>�� A�t�ĉ� &�/,,�޿��%`2� ;;�f͚5��: ��JN�8qu�ĉqsss~v���x<Ɲ;w�:�n$���(&M�t���vAII a2��JOOo�"#44���ի�1z�蜚���UUU��������R�:�YYY�K�.�����f��@�PXMe�}�����rUcK�աa��
r�q��`:''�T�T�)J���벾}�rm+**2�1�BzzzIs�<d2��iӦ� 8p<�N�?y�俦��mOJJr��h|>���o��������5d�I����????����eG�I��/==]�U��c6��׷�o8���; 6�~ڴi�Y�f]|뭷��Z˥���m���T���f�� RRR�����F�d������I�􍋋+�uy�T*>��#F��&6�����5���k"##�i�,�IMM��N�>������QpII dff����kb��-�[T�Y&�-c2�;X,�1����l6��N*�g�٩
��j�z/]�����R���{��$I� �/��ӦM_;88�m6��gΜ���r!77N�>���b�3f�2x4�z�С111���/�H溸�|�p�B;�[�nAVV����ߖ��V�u����N����r�A�6 ]\\&2Ľ������z�_��Kƿ��2$, ������ h4���gϞ�P�Tظq�\;je%: AZ��/��~���c��iWWWx�����׾��+�y��BiNN�媪�%�����j�������:K�,!V�^햑��W[۠�p�>|h�j������/�@ ���h�����fxLL�:�Px�l6�i2�z8p���ٽ�ϟ7�ݻ�pttT�X��<��իW/���xW��e*
x�*���x�8~�����������aJ$�f)�����Ժ��|�p��d2����J�Bᱨ�(O�Ht;<<|�R�(ެ��}�̙�����jjj��X�f�y���TVVBZZZ���^��������fΜ�a�_4F�VIIIY���6+ �c�,ȫ�F������’���f�<򤨨��U��ѝ�T*�X,�l�A^u��ۻw�����Օ�d2��m���v�b����ccc�֬Y�U�T�3g����{��������Y*��H��$���0R$�3���V��꽫V��Q�վ��~�����Մ <�L������cU*մӧOof�Xv�W���T����è��w�������"��^|��m8s�L��dz���vaVVV�/����A{���<h� -$�H�����}�����*!!!\ww��_|��l[gA�z�Y�Z��ݻw^���/_V��z4�� m�|�޽�����Z�RPPP��h�vt�gQ(������5k�p��������%t�ʕ�:f�B��VUU:���P(|��?��p]]]fa�1���;����-))��s�k ..���������f�L
�����][�j�қ7o�
E�@ ��ccc7��Ԅ�ݻ�\�р�б�B`i! �BQ�T�M�O�ޟ���G&�}h�,R/66�� ������$I[��V�ܹA7m�A��������.]z�h���݉B���\O���N���^��g� �����`0(���ď7[��I��ΐ��S�k�.����k)�P�L6���0 #�B�gk׮�{��5k�<P�TC8p�����w�ޭ=s挪#�h� -�f���늴��ٳ�{��%߾}��7n�m�<�v���$IfVTT�:J�Q\\ �/_����Y�+Y�r�򜜜��>}��~9pcjkk�
E�d��aX��4R(��������B�dq�5>�����p��E*���o�X�i4��Ś���e�ڵ�����?��c� �ܺu�~�As��e��آI��j���ҍDFF��ܹ3���:;;�:�1c�Cvv����￶e˖�Z-���zj4�;8���~��t&�V��… ��ϟ���Y�������?�:�tE���|��7�����E�zP� O�U(h�ء��͞���$IBuu��H$:Sm����R��8��6 ��L&U��2p_g��͵v��r8ܤ�������8��ӧO��F3��BR���h������;/\��k�СqcƌY3v��w���o��b��4��Ba�Z�.|�𡭣t %%%
��z��-i�>�`�B�Xz�����h�Z��j-l���*>>�A�<==�`0��+HMM}jt/
?5�͞t:�n4)^^^j����m����Yٳ��:�ܹs���ڴD ��B�
�j�����4�>iW��� ���#G¤I��v�:�=�������QU��P(@�V�E"�[gA��L$��j��gΜ1<x����N�<Yu��}�V���L�Wjx���%��r��]8v�X A�%K�϶�D�t:]����������`l�E�牏��rG*�69����aEtt�؋/��{�n�������
T*�T�Ra���Q�.����f�B[�@�' �qב$ /^�;w��:R�����7 ��H$l�A����Ȱ��������Ǐϭ��:y���*Ǖ�9�����p��ϕ��o��� o�]ll섚��o�F㤘��N���"�<<<`bs����u<h� Z��7"Hw����uĈ�m��ھ��[��d�W���Ҿ�n�zR��O`0ʱc�2����l������ߪ����Y,V��`"
�m� A� �X����_N�������8��2���F�q��`�T���{ҤI�f=:�X,�rrr��r�ڵ(�@��9�mڴ�q�ƽ���D3��
={���v�ZMvv�K� �Z1��:��9���l6�<y2��w�uB���af�0�B�ѢlA��X\'���f�l��ك�ϟ�=u�ԡ�G�^�t�R/WW׍�������W6n��yN?�L&ؙٻ
.���b�Xoݺ��0���g6����7���E�AZaɒ%Dttt����<Xf2�l ��,�][�@��Ī���;{i���_w�0l�^��g2�N�:�t7;v�X����r���������� 8��o����{�9,Z�(��be���FO�qvv�1���6m��d���~�WI��\]] ��Ӗ�v������9'-�F�6�������2�,Y҇N��:��h4HMM����Ee��رcǝ� �h4[G������R�V����*�t�����,딳��yȐ!.NNN�b�m���YW\\�;�a4
�������T*�<��9�d��ӧO��������;I�j��v�T�1�cF�r�@���%��<��B���V�gK�'���OO��^��mID`ir�<���\~�����΂t=����J���@ P�: �����i���?�����0(;;Ο?/��f�,ҝlذa�a���xȼy��Lf�m����d2�N���J�����j5!!!vO�$4 ���
�������������l6�ÇuZ�vjw������F�PLB�P�T�D��q����Hrr��������x-���I���؉'j�M�f�0l���;�&A�Uiii�B�(LOO�i�,H�3m�4W.�;�O�>|[g��Ν;�����8q�:|A:����ˎ?^1iҤ��T*�U���ٕ}<��ぇ���� ����T��C*���� #??�d4o���S5����P(����F�R���,�q<��ѣ��j���^}��qMK�����0O�R�ַo�Ƨ훀�#H;1�L�nݺ���!� *�ah�bqqq���i������e����^��&��: �tW��t~~�?.\��v��ћiii�w��թT�_���PPPEEE�V��է��'p�\�N��M�Ru:]��b�-�H�u䳴�D"q��d�6nܸ#))i}k����;1d���h�۞����k����������t���Ϸ��F7r#�rqqqw7oޜY\\��兪�"��`�V+#6c4n޼)�4i������$�^�΁ ݝH$J�������(�0��x<^��b�e2�zX�V��j�a2���� ����?�� 8�:u*����3'''�o߾�+W����������;��Z��`�b�X�l6[g0���b�X,����D2���{]�r�(
?m�|r���,+|�ԩ�[�n�ܢ>�*ig���gϞ������Q�.⧟~RUUU�.���: �}�d2�G}�~7t���)//_"�Vy�lڴ�;66����d2Y��^���8�G�������`��z�O���d
�8�h������[�n��$�:�3��`H�������_�~��O~WJJ�W<�jyy�I''����0���r9�l6;�_�����$����$&&��?�/��H$��] ����m�G�PƑ$�
��H��0 #[��aÆ�8�����n�X,n��o�^��ozS(8s挡���ٻwo%�N��j�ĉ����w��Q�����3��&��\H �r�( "�HQ+jE���U� !A�� ڵ��H,�֣"J�BDP@�! ! $侓��3�;;���b $!��ټ��G�����Z}���|��Or�_d������Fs��'���Y��vy�^��_����z\[�D�y��iӦ%�5J�(A���Ξ=�޲e˞; B�k֭[7M�T����Ah����kjj�J%3d���v���������9s��d2�裏,6��=p���Y�f��#Gګ��L:�nLTT�L��z����K�Z�+�Ͷ?..n .��n�Z�CCC׿�� ؼy�R��Rx�W{<� �'%%�[�n�]k׮=����IHH����+�$�'½f͚�,6&&F���feYv�\.��t:� I2� N&��$�H��v����k���X���rCCC-*�����(�y>���<�a� �`5j���{Y;8����ܸm۶^�x�c�vi[v��WWW2�,�w�D���t�4ݥ*P'�t:p:���΁꺵kמ��W�9++kDrr�������p����f�ov�����VI��n���v���V�#MMM766zx��R��3fL؞={8�ɓ'k><����̤I��M�6-����PPP0
##�����-�>����8�yΜ9��}���R�4<333N�PT�d��d; "I����I;w�jkk_����*
�T*��q�nĈf�e����2�D�,..v@���v�0o������۽� x�F��_�y��C�m�7o^�'��B>���y��!Cޜ?�P��������L~~���S��Ν;���Ʋ�~8^��͠}a���M�j<�����6� �P�Ѹ ===�h4�ddd<�R�6@+˲aO?��F�P@aa!\�r��8�U&��.��Ȋ+�~���(��gHHH�D"!F�e�ٔ������+,�*�yK���0�L��$gdd<�R�>|��C�~����Aqqq��l��v����k����vlܸ�3f,�h}6��Hnn�fΜ�p���bGA�� �}�v�`0���HTyyy�=���EE�tV� G�i�����W^�5��Q����6�Hkk�.�B1��i�a��nw��h�����'����������0��`MKK[F�$)���N��ݩ��:�+++k�\._.�H?��S�4MCAA����d�������ؒ%K��}Ǿ�y���ӧ�iiia����N�BBB`ԨQX#�+5�WO?�t��YP�t��AG}}�r�΂������cǎ}}����y�#uuu����Ɗ�!$�?��ϣ_~�����������}<��)�:�jժ��Jۛ7o�'EQΘ1C;t�P(..v?~��0LI���Ʋ�y�JOO� �p� �i@+��;�R�4\��� ���[�V:��!!x*Ꚗ�{{{����E�@�⺺:���C*����B@G�off��
�scƌ����X���o�|���v��7�|� &<4r���3g���ϟ�h͚5������h4f~�Ǐ���d2)�B>IJ����BV��wq:��w�^�s�=t��P�d4���v���婾$I��L&٭�F�U4M����}CQQс�����a���S6m�Tr�{ׯ_?��v_�����JJJ�c�����`��Y��� .Pb�@�KAAA#�0�b�@�Z�$�ԩS�@�GH��{�W��j����(�΃
L&��m0R���?,�|�r�޽{���n��m۶���D��>\VXX�:x�`���Ǐ���?�W�@�0B>d2��J�FYY�S�,�w8}�4����2��k%&&����������C�͛7���f�� ���h\k�Z���8��l�2�ͮW*�����Z
�(//OZ�r�Be $� B~������o~#�Hp�=�X~~>}���s---sL&/v�������1c2�N��#�>t��Q���(�h4n; B(��[�n�ڵk����o;w�._��055u�#�����k��!P�p�}����˗/���/
TN��tEE�X||�\�RujC�ꊾX�nܸQ[SSӢ������9������ �!�e�ĉ�f͚g�΂��Pu��x��={���t�;BuUFFF�L&3$%%srrx����d�W�\��X�x�Ϙ2e���i����,���^o߶m���0aB��yP`9v옃��s t+$IF2 #v�`�r�� T��!�:c۶mR��qJ"�(�j��$IUZZ�%�T�t �P6lXDz�)))'��O�R�����˗/n����,[�,�̙3�.];���փ`�;F�f�ۡ����h���Y���#
� v�`G�dӀ��΁B��r�Nz�ޱ�g�u����2 �����r�v8�h�ں{�'N���ܰa�>==���;w�唔����EM���A��/FȏX�}�����ȑ#EA�Z����� f�aa�Ŏ�'���M���
<Ϗ���;FГH$�MMM3�k�����f�܁!�%*�j��j}�ȑ#3@J�����Զ�^ސ���>h� ���TZZ�G��i���6���?G�d�^��ظqc*M�oR����V�Z�y�ٴZ��L����/a��I���a�,K�V�9 ��?#q���51 �Q�u�B�X�;G��H$<���gNNΫ� �f��_�P�l�2,}���'����[�V?���6� ��r���I�&٤Ri�T*��S�* �PrG�y���V�u�֭.�����x���<����
�;--���L�^�~�/���:t(��ߟP(j,��5k�8M&ӌ={�\Y�d�`�����TX�����I�v�h9�� .�0��]��F�,�������d� &v��Dz,�P����ӟ0`�������� �Q��
���ڟ`��ŋc+**�R��f�%�?^~��A�w�E"���y����R���A�V����!<<JJJV�u:t�6�L�����.�� IDAT&L��}�n��j5�k��3����<�v��a��Y��@���ןx��C��2 EEE����N�L�ʎ;�GGG�z��'q�g����6L ]~�wʆ �O��=�~B�a�֭����|������6m�r�ĉ0g�ygf<�;���Nz����FUUU�^����f2�L�������L&���>�0B"HHHx������J�䳯������ʊ?�������%K����(��_�~�\.�?��cZ�'���V�u��ւ ����`���0bĈߦ����W���-77���S�>s�}���T�V�X�� )�nYYY1Z�v��ѣ�s�eq,����֖~��������bgA��t:i���իWo; B��V��7n\I�3s���J���/�ɤp�\�^]#�P(T
�b���B��T*�1t��ٳ��v��Ç����f��^[�|9�ݶA�;444���]��ABH,����Y�����;
򓦦&(..>f0��E�B^^ކ3fL4h��Q��e����>L&Sl^^�F�ќ���+""�R�_��
&�)��p �i�G�۽{wsee����I˗/��vڒ�d�����hTZ�Tb���\.��j�v���]���6�m޶m���� �. b�L&��n�@�V�H�l���ݓ��=$44�����/X�`��ѣ���,�ޑ����U����iӦĴ���[]�P(l����!!!��'�q@��@Q����{Æ �,X�n]EQ?�~�3@}}=N�FHd:�\.;�A��TWW� �΂ЭP&��m}���
�x<����9�  �<���7���V���ap��#�϶mۤmmm�
Š���g^��?�9�駟��Tŝ;wR555��={�� �yH*�H��v�Y��O�����3�m�$�x�Ju��4 �#$&�$�� v�?4M��;B�����DDDD��pܦ�� ��$��5�H�T
n7���P_g2�d<�o=z�iذa?_�`A�ҥKu�;--m���477�:u�#G��B���8@����i���<r;��d2ύ~�#��I������ ��d�N�<Y)v�{6�M��|�w5D�_�����~;��ό34�������n;'''\��'�x�á���PW[[V�����)E����h4�s�� �0��`̘1C�����O�ޓ��+�J�&L蹏���V8t�PkBB’�~��6��?bĈN��dX#$6�Ͷ����� ���v���@'���V�Z��_��@��hp��A��k2�H��ԣ3Fx��H$RA� �����$9
z�o�P���ʚ�R�=�䓚�f���Khll,̘1���^�7�e��<�X,y_���9s�h:��,��
,NHHs[ ]�$I��s�����S!���d21+V��o߾�b�A���|xFF�X�s t+2�,1..N�}ҹs�E%�t���믿Mėw�yg�;����j�r9~N!�����^��'$I�R����d7��a��˵l�…O>|�1c2T*ի&L���@.�����������7+�q��jժ���������t&x���{�v�(; BIOO�-����b�i�A�t]O��~��~j����1c4cǎ��(��k�n7 :Ν;�� � �z*B(0�͘1c�N�<��E�رca�ر$@�~�B�GG ��B�/���:���G��۞%'��R��m~#8�Pq8>���'N0bgA��YA� �)j�:Z�}�q���L'''�����߫T*+�|�ɱ'N��J�@�7��w����O>��*x�^%��ɤ���9>s��Qs�̑���E=A�R���>+�h4�222�n�����'F�� �F(��L&�oذ�t�ʕ_O�2e�Q�Ď�zPDDh4�!b�@�fT*կF���E��{��i�~��ŧ Ć �T�We2�N��L�?~�6Y<}������3g�(��ڝ�B�K�P�y���w�ltTL�/�k׮s�ӟ�x�W�u� �B������8�PZ�z�i����Ǐ�p߾}�b�A=G�V���.v�:����̠A��bb|v
���C��N��1��x���nܸQ ���{�$ɢ�Ç?2mڴ�Ο?`g� sz<cuuu��ի�v5B(�)�V��Y�stD�T�… � 0��M�6������6x��g����a�PKLL\������]�*/\� v��㸯�΁PG�^����ۚ����ܹs溺�}����zoZZڝ� \޶m[�C=4�׿��zڴi� �R;C�U�$�Y�jՌ�f@�����oܸ�L&[6a„�-������ �;w�O�R���۷�w�5999�u�����MKK�idd$�T�|� ��_|񃖖�YgΜykǎlAA�v�񌽕�f����}b�@�#��B&����ї����ŋ�V�\�dw�'b֨Q�"��A��qI�jAz�(��86nܨ�����ݟ?:t�s�ν������j5b�� `�����3Ϩ�n����l���233��8�].��]�B�xm�̙��j�#� ���6��333_<{�l�ɓ'�͛� 6L}˛Q@���'�A�u���D�\���u������ٳ�������FHHH\xx8�lw����ϯfF[� �DGā���Qiii�R��2>>���Ŏ�eR����}�ѕ͛7W;��^��Y�P�OJJ�յ�nٲ��EF޲����D�����m۶����p��ٚ�v�D���pH�Ri��9�I��
����m�X,PVVF A�LHHH�n[���ӤR��nw��������_&�����B�ٹs��ʕ+��?L�4 ���+�v�����a���b���\?��ϣ�Vk���~;����٤���^{ͺu���j��s��������^jٲeK����w���6��v��[$�]����f(`����f3�ٳ��_��W�ٳg�r�&�\����/�L&����■)�<�åK��BBB^��vB�jii9��_�� ��62!���L�:U�h�-,, &M�$��d?���V�_=z��ζ�#��bIII7n��������^�8���T*3�̓�L�<u`txx8���N�:�5�,����eO�����X||<u;�~H����T*q`�^jݺu�BCC�
P�<�H�N�9Yω���9s� ��ɩdfEQ
��qqq��2� `�z���D�;�3����_����^��D�t:U,�֋����`1��,�9�=����5��կ%%%��d� Ühoo��y�ד��V�\��D[!��(jI��kL��UÆ S�t:�ɓ'��<O 6L��% ��� �t��²��gv�������u��ѣMj��i�Ʉ;좀Eą��fF���믿f�\���U�z�����!.��|677� m˖-é��^���}b�Nxx8,\�P�hѢ.�X#4�F�~�D����>�joo�5���rAii��^���Y������f�<��nW[[���O_z��h_"��H$������<��L!q�d2�ĉŎ�+`�PILL�$%%��ٳ��08�H���@�T�U�u�J�z��o�m;Go��<�l6ؿ�������:۷3�nw���a_]]���x���B���o�~��k4�o@�� $�J]W7A@�ợ���,�^x�WTT�|�2N��cǎ�>��c�����~֮]['��\���6����l6[ ������_��Y�fM���;J��0BA��iOKK��1�5
p&v�:+11�'N8x�E�/������*���ܕ��h�u<��j��n�_ZZjs�\I= !�'�ׯ�������Ďҫ`�P�c��,v t �\<χ����a_qq��1z��{�Z�\���r�ʿ���R��p8�����־� @qqqHJJ�g=� !�[�֭����y�����`�P�z��Ν;���y��� �H��_ԫ8�δ����ӴN��/,˾d0r��/EQ�m6��;�^�rd2�z:B�w���u6l�����ҥKqfY7`�PJNN>��|��f;
�a��ٳ�+W�\$v��"%%������5�}��S��kjj6��w����y��4d�Uw�r�����us>�ɄT �I���C��ӧ���������D"��8q�{�1���M� �|C*�^loo�;���� �9(v�����$�<yr�СCq�� ����ŋ[W�^m��\�t:����qTVV��z�Ǿ�u#&�IV��o�����_�"�ۘL&�N���\.577���t�V���߿�|ذab����F(Hy<�p<dzgy<�z�{�&�� ��  "A"�A ���c������zw�;/B=A�חnܸ�����5��._�ls)����<yr�GU/^��d�/2uD�V��t���e`��urrr����q�&M�?~|����L&v���0BA� A� ��eY�*��J+@"� �@����y<���@�w�J5(���Nv:�5z�G�Q�Ų�uuu,�l���Duu������yyyo�7.�;��UTTTz<�,����~�b���J�o��/B�(##�i�R���x��8�",,�����;Ǎ���A�ů`�P�b�,�q����[���KP(������ �o��P4��[ 6�i�ɞ����={Z�v��~�����inn~
��$� :4��ŋ����G�F���wݺuw���-�4i����Z,hoo� ���e2�T������L&s�k��� ������$--mfhhhFDD��ɓ'�����X,̀���b��p,���q���������a�v�ZwA�""�Z�^S��� ��?h�(��b��|
6�m��h�ݟQ�f0�6555UW�x�"##�A���O�Ri1b����[WW����aaa�fΜ�ӈ��oM&~�D�999�cbb>�;w�= .����ƌ�f���׏�� � �����f�����}��S<�*DD������n\.8f�ٚ�e����� N',��bX�bA�=�a�M��|�e٥_}�n-2�L+�J'���m۶ 4v�ȑݺ�����v�w�p,�J�/�?��$�������zA�-[��m̘1I�/���;R��0BAL"�8 �˛��I,kA�����Ѵ x�T�
 ����f��ln����2�b�����p�8SSS ������r����(�� :�r�<�e2�H�ݾ����%ɮ�3���v������`Ŋ;,_��}C}^vvvtnn����L� �̘1� �� �0L̍v%F?�v�������,� M �dWGx�P���(d2/0L=�\2P�TЯ�3$--mNJJ�߿ �|��vo���3hРh���J4M��G_��0}��n�_UUE�4��#���/�\���
d����q7����G�T����;�}wtQ���F=G�
b$IrW��A7��X�緀Z����nD)DF6_S�ޜB���7TT���E�D��着�:u��%��Y�L&���PgVV���!!..N���O�:�0���L���y~HH��
E���>��� <X#����X�����l=��t�,�����[oM{i�����ȈP 1��?=s挍�qy�����y�ʗ}�L& I��wG�tYAAH�ҭ= !���7�7m�4� �ϟ/U����
��1�5���h�s�RѝjC����qJa��YӍF㆞ʈP 1�L<A�~��/�z�@�OG�M&��ze.W��)--m�x<�z8B���'DEE�=y�d�ҥK��
;�1,�
b��M� �L�;��F��y<�J;���T��ҏw�¾
s:5<�q���P@�z�j�����A$I2^��矹2������}<σ��q�j�+��:��[���ub�@���� ����r'M��R� �yH��G?Ap���+)��t�4�_|1��&L�g�d`=^�6I�w����kS�|�!�8�����q�k���1���[d;���=z������9*�����zK}� �����zt:� p�7�a�P����W��Y7AO$ AP� �pt�����)S޻������> �P� =o��&uw-j0�X,r�D���U�$9���t����2'M�;|� !@�occc��΁n �#�RSSs
�W���#Ia��_�B���S<��3g�.�2�}��#"�h��S����t����|��A˲1]����J���>�E&��\.O�6m��� �0BA*###L&����-o��b��@"��B`������,� =�ܬ�>�D�4�""px��a�?6� T*�_�<�z��L֥{jjj@�R�\�lY׷�G��֭[�=���ђ��B�+!���@?�s:�����������ǖ,Y;W�h��;wR��� �d��YEdd$��Ѕ��9� � �;f��l>��P�����($$d�N��_�8� ��Q%<�qbG hJe��������ڪ���CWa�Ѝ-Y���v��mm���U�w�Y���������#uuu��l����׻?55�������'666L���F(�)���E�/4�>p8~�lQ���F��u�3!���QSS��3o{���:x��\� ,III9�~%�g������… .���#!ԗى����1���FEEE�w �kh���{���#���+v�����+**��<닃��b�'N0o��������\���?��>fp������[]g6��b������ȅP_$B��fk;�<\�P#����rv���+�M��ւ����`0䋝�ހ$I���H��;��|�����������S�Vbb�������͛W�d�1#F��V��k555p�…&��8��޸b�
��!�:VVV2g��s�N�� ��z�
-BNϹ1�� G�i饗� v�z ���Q*�}��mii���Wf�9�`0�'v�_|q�M��\�t��w�u��R�>u��f���4�>�C��d2�@D��l���X#�H�4�q�1X�vl߾}�E�;B���drggg{�|�hll�}��U%&&N;��V�Z� �۶mKq��8�� �������e[�l�?AbfOUU� X�A�� ��� ����F��, �l6*)) w
C��(��omm)v��y�;V��x;��,[�, ��΁P_C���j�z���}�����ɓ'G�� �Z����P_$�7�.]j;G��Ri��9ꍼ^���~I��P($2�l��YB��d2)x�W9 EQ�cǎ�⷗�� &�J �-w
���^/���x�s �i4��l6[�?`�7o^����;B(�����K��$I:4��aÆ� uN�F(�1 �$IR)v�@�q���r�s ���f�F� �c�PչCwB}˲�:��9s� ���;�F(�I�R�F��q����Ā 3���p�B]d4?ooo��4-v��X,@Q�Wb�@��P�t:9�L&v�EX#�x�nܸq��tVgW)�J�;B�˲��f;�O�].ׇb�@�����bg@]�ߊ
n�����C2��H�L���dR���^�� A;�0 X�V��h�R�,��C��7MMM b�@]�0BA� �2��ȤR���!&�)��2"�ӬV�ӧOSb�𕺺: I�P���DQ�U�P�g`��� &��W�;V'v�@6f�%l;B���drQ�]RR�;�/��׳.���s ��}aaa�b�@]�0BA����C������J��V�W�^{�ĉS���N���4��Z��x��!�$ H�Ҡ|̰F(�Y���(v�z����{�9�L��TUU��j�~�嗋�΂
L�����|���;
�,�
b!!!"""Ď�JKK]$I~Ͳ,�� t��8` �]�[ZZ����_|q��YB��yު�e�IDAT��(\ܛ`�P���ȸG���ׯ��QRuu��ĉ�~�����d2�A���L�Jaa�U������r�޽�����bgA6����y����*v�X#� ��---��Ďp\.|����U����`�������\�޹$.??�>w�������bgA�.�kwcc��1P`�P���O�۷�Y���ĉ��g��9
F�doUU��W���
��� �; B�Wi!I,�z���PKII�TWW��8��*�����v�����Y
F ������W����/�\��Q�� �z�B�\nֻ`�P�S�T��aS��RSS� �;B�J.������U�g���+�\.I���e���� ����.X#Ķn��J\\\�V�;�������w�u}���M n���� �`���d&I��b�����f���lOLL�; B�י3lذ�C���� ��x2dH��9�v��i��nOmhh�����A8*v&��A�^�t�;Gg>|��0�R�s �z�$5<�;�,�
bǝ���b�]kk+EĿ%��a�Ɣ���3!̬V뺂���?����N�є��#bgA�N2�L����F(����}UUU�c��|w �T*��R�d4M�;B��d212�����"��t��88x�'!!��� �z'� �����΁� `��ذa��ݗg�Z�����$�L��t��U`4�;B}�0/�����ёݻw7���ab�@�^A�kooW���'��n�#� ��%K�xy�?t��e��������p8֮\���,�R(��΄P_a0��^���|Z�,�b�o�ε��L_�vm��yB��^���z�<M��\�����p��Y8|������u���k?~��壏>j<z�h�;Ľ$b@����ɪ���gĈ}j�~��
���mF�q+��5k;B}M{{{Baa��ǏW��������>�����)&��Wl҅
l�����;�J��Qn��y�x�"�?�*��O8�N'˲��$�*A� �{iii�����|�駣X�� �r�3�9��[^]]���>4M;B}��dbrrr8��aaabǁ��~�gf��d��΂������AD�t:Qs�\.P�T��3�qPUU���֢��P�B���N[�r�M�����-==����{�M��u:]ۄ bi�������}� �������_�XKK�QQQb�����ƴ��1)))�΂P_�V���X,O�]�ڵ����N��!�Sh�^:eʔ� D���vÉ'l�����c`DD����]NQ��$����7���AW�4�WL&�D������ =r��N������}��� �F�p8{._��+
��~��'H�Z}[픗��������f�-��e�w�q���� �A�D򳈈�ϲkll���"GCC�����������������$I��^���v�7�L�^o������JKK6jԨx���>@R���]%�H��~�-9���Zt���v����r!��fݺu�j���s�R����d0������A�IMM�C�B=&==��~��͉���K �@ee%����9������^����W��������R�t�ȑ#;u}UU�/\�Pܹ���>@.�KnwD՗8���
4}��j4�^����rH$]�:i�Z ���A\�P'�$튏�e�Iaa!]TTT���<Y��B�M�P<>|�p�|�r8֏?��#— �l3�_���k�<��eYP(n~�SYYY�ѣG�H���l]�0B}I��n��%�� H$A�,��F�V��Q< x����� ��t�M ���U����K������c�6m:r�…�q���m���l��g������_�j�o��/B�oQ�T����}��v�����<99Y���:`0Noڴiݞ={~�hѢa�x]PP@�={��D"�x��H?��4��$@�����VSS�*v��9�!4th�% �@�I ��.�[��x:զ��]�v�+V������[Z�j�/.\�`�8�g}���@CC8�N8x���O?�+//�_�PO3�L!6lغu�֒x`�?�w|���6����yG7A�@QT��j����7����Ο?_K�tNxx�<$$��);G��
�3��� �'q� ��{ ��>�#IB�,XV������Tz��?���:��p�#B��v_nll���{<pWG���!::$��}mijj���<z�h� ^���4Mo���o���@!��t_6l�� �;^ii)(
hnn����V�a�r���1���Q�Fi���-���H$ᕕ�.��}��h}I�ʕ+����#UUU2���ҧN�"H��Oll�-ˑE����M`�P@�䂮|����@&����U*�-5��:���%�+�i�---�p8蔔������~������]G��u��!{yy�L*�ZBBB�!!!��Vf�Z熅��F������q\#EQJ��'%%�~x+�>���i�fu}��q��;�8)�zF�4�>8y�o�(����a>A%mmm�s:�H�T���v-[�����N灆��� �C�]���x�$�\��3�l6^�dI@�X#�'�<��v�$x<� �7�u���R1���c_[��~y||����^�\�(��6���i����en�P׬^�z|ZZ��۳g�ӳg�V_�f�������J�ө���l�������_�~B{{{Xrr�����Yǎ�)���� !�O����J��x���1 ,���n���@�4�9s�β��k��up�����ɞI�;�����x��O?u477'���� `ӦM�;wn�޽{] .T�d`���Z���q.
B�����7o����{.W ��� ���c���‰Zϝ��l�(f I�NG��$�U��$�H$��Dx��Y(**:���0���!ts۶m�����r�<y֬Yӆ
�v���4����a�R�t�K/�p� ��Uyyy�4h�+��s�����Z���~˲���tz�Fc�?3�JNNN�}��7��ѣW�Z��K�dgg��j����PuMM������zRA�_��B���2��Ŏ�Ri ��1 �7���$�3gVD)��]��>AD,{��e�����d������n����p�W�T����uG�uH$�7V��vB7�l�2|����ߜ>}Z�r�~���|��K�1Bu�ʕ+��e˖_�9s&zذaJ�Jv�"""�b�@UU}��9�����^��ݮ�j�9G�Mnmm�b�
 ==]O�B�N����>I���8n��Yo�j�BQ��$�#�lٲ������8�l�@Dĉ�^WTk۷O��d21iii3SRR�HOO�J��� ��P���!�B999Y<�?#���\��0L�q@Ķ���W���+�֭xu*�� �CBB^�(��p8�W�ZuGNNN�E��;�X�Vؽ{wSRRR ������###?}���E;?�#�qP(�����D��:�����?�B!������KMMm�����d2I�j���ji��"44��avL�:�'r�<��;�@Y�0 ������W����#��r� �f�
�� $�.p:����ax�y��׼^8N����Ĺ222&�!�B�C}��MOO���r�T*/�J9�n�?*�H~z�ԩ�3g�Ty<�c~�w���z���F(ȑ$y����M�v?�Tˁ�ց����ͅ�ֹ`�>�s�0��Mp ���C!���233h��S#F������'80��tJ###w������i��Ć����U�q����`!�^視�8�c�EQ@Q�P<� A�puF�~��� <�!�BH$z��>77�����j�XN��rRRR�w/�t�����w����oY�Ǔ���K��9�#�T*U1�0b���_�  8p`�믿~*---B�X!�B�Z�j��f[������_gY���������ꊤ��?]��9��1U�R��=��CaC��&��_; B!�P_w���k��r^��֋y�|`�X,���5,�
biii3CBBt���bG�C��B1R�!�B��A �)~���� ���[)�Zf4�n�:�7^"����SJKKY�����9B!�Џeee=1`��V+�$��˗��� BA*##cbHH�'?�p?�������V�$�!v�B!�c^��Puu�h���8qd2�n� :\��#�)��� I���dbG�'O�dh���^����!�B�XJJJEQ�|��0���
PSS555�k�.kee��U�V=}�{q� ���/����}SZZ:ԨQ�z,���III/��!�BuL*�~a�Z'FEE�$�Ε� ���S�X�B!L�>]��u���PZZZ���*�y�JC+�HʝNg�^�?~���F(��������+G��k#��PSSǵ��!�B�����_���z�ԩE�-�1 � @ll� �onn�/����j�5`��_�<{��V���?�����p|�0L��`(�n>,�
b����<��Fg��W�\�������Ƌ ��!�B�ZBB������{�~+�� F�P ���{�GEE��傣G�ַ������s^{������CD���_�p�>y�������_�n����!�i6l�?~|´i�:�N�o� ��E9�q���|u=������Mӯ �}"EE!�B= ;;[-�HΏ?>�$I��ٳ����^�?x��M�6��V����!���%<�[y�?����˞ʁ0B}@VV�����J.��JJJ\%%%L\\���t*�^omCCC���R�d�"��{����}��*v^�B!�s6lؐ)�H4 �_���������aY6���B��[^}���� `�������L�0a�w�)�(p[[|��g�Y��� # ��x�o�����1�!�B���k���R�'Y3f�P��8""fϞs�ĉ�^|�E�hAB!��h����k֬q��w��!�i �PN�3$6Ê�� �i��b�@!�B��e˖����b�כ��{6n��Ҏ;��T,��t:ݶGy�-v���r���O�΁B!���f����vǓ$��:s}zz�T�F����l_�n]\Od��>��tΔ���s����N���; B!��/�Ѹ�e�y��ɍ����(���z��Kk׮�� X#��$i�x<b�� `ܸq�r�|��YB!����]��xg�]�f���uKK���7�B� I��v�o��={����a�Ǐ���s�!C��ŋǭ_������~ �B!�D�q�F-�eY�]�L�~RR��Fץ��=�u��F���iO��0B}�D"����$�URRf�����f��ɓ/�9�5iҤP�� A�ɓ'���D�T�G�B!������t�͘1c��˗����233��v�ߓH$�
���e� #G�t���6gff�����=� `���ݾ��������|�נA��رcO�Y�F +322����{�e�x�\^�p8�b0v�:B!�
,A<74&&bbb��'����k���bbbBF���i��á��T���x�'�_��DA�ŦM��-Z�hRxx8|��� �$�<;v옥��09%%e�O:@!�B�N^^�ѻ�{v||�-�ݱc���tF�L&[Of�M��#�I����|��������>���eY����h4���B!�P�D�'<<��ם={�R�{=]�`�P�AQ�Ƙ��P�a.�,�7�a����_�� �L&� 33sZZZڝ�� !�B�E}SSs�ӌZ[[�EEE-˳�Ȁ0B}I�ԤI�@&���,[-�J� ���/�F ,���*rss�����bcc����/�E!�B(�m۶Mj���cǎ����R��������0�d2q�ȁ0B}�T*-�����JL&��xB�^��W�EEE�.Z�(��v�"<<\:q��0�B����B!�P�r:��iӦux.g[[?~�eŊ��e,��#�A@*�ޛ��9��v�������h������q�Rcc�����AQ��W�!�B����|�\����6� Μ9C��f��|�d `��� �A��A����������p8|ҟR��|0B�ј<�O***��r��)>� !�B4��N����`ֶ�6��O*
�D���t�d�k�9�����rEQAYYYS�nwdHH��:����9�۫����g!�B��&�i��a�y�I����O��\��Ee<����ȁ��o�~~���8�������٭&��9���Y�΃�E� �AH��p0A�t|w��$�.��A��m�VC0"? ��D��U䛭���m������Q�S�>���95y��� ��i��۶=�iZ����9۶�jkk�Ԫ�u]q��E-�H��R�[ s�T�\.�CRʯ<��K��<�uh�������ә������ەg;�#Ξ=�K�K���D:u���b��!�HL�E?0�SCCC�`0�ݽ{w�V���LNN���V���,���T*�̙3+���5����hBl�I8��� ��mۭMMMG]�}�u��0>�u��J�d___c]����Ο?_u]����Cb��4�J)DŽ�i��<�w]�K�a��ժ��R�$���D �dYVIY0�
�|̶�V]����qCE��RLLL�l6����r�X,�,�/��jp�1M���l�"U����qFM�|WU&�
0�Cǎ��u�))����rggg`��ׯ_�Ba�4�!kT�0�3�dr�a�E"���iU��*r�YZYYɩ�j��]׿ܹs�����l0�VӴ��ju�R���" ��@>r���lOOOk0B�gϞ�bQ����������/( [�� �h$��}�j5�8Ν���y^C�P�hTI~ss����͛7��ݝ�d2%��"| �˲t!�g�v)�ˡP�-���b��:���D*�Z,�JG��㚦�|��5���*0>v������pr�֭m���٬��r ���M ����x ��OY�����Xػw��Zw��������D"�S�����+ЀO���?�gFFF�FFF�n߾�w��B�P��y�Z����˲��䇃�����|�q��qD.��֪���œR�|��?�|ƶ����7Rʫ��ݻ�y^ۦM�����n�4�? 7n�W�\9������p��$�g2���;֕����=���)�l4}�0 �].\(OMM��߿� ���C`�'N|���RJ-�׫̾|��3>>���Ç�������pP���:��Z���M_�X;uuu�6nܸ��͛���͉H$�$wjjJ�r�~�eY� �_^^~1�L~����"���|Ҳ��Z�����Y��B�IEND�B`�
console.clear()
// load data
d3.loadData('world-50m.json', 'wannacry-trimmed.tsv', function(err, res){
world = res[0]
points = res[1]
var sel = d3.select(".g-cyber-map").html('').st({position: 'relative'})
var width = sel.node().offsetWidth,
height = width/960*500;
var land = topojson.feature(world, world.objects.land),
countries = topojson.mesh(world, world.objects.countries, (a, b) => a !== b )
var proj = d3.geoNaturalEarth().fitSize([width, height], land)
var path = d3.geoPath().projection(proj);
proj.scale(proj.scale()*1.25)
var svg = sel.append("svg").at({width, height})
svg.append("path.land").at({d: path(land)})
svg.append('clipPath#clip')
.append('path')
.at({d: path(land)})
var color = d3.scaleLog()
.domain([0.00390625, .125/2, 1.5])
.range(['rgb(228, 228, 177)', 'yellow', 'red'])
points.forEach(d => d.pos = proj([d.lng, d.lat]))
contour = d3.contourDensity()
.x(d => d.pos[0])
.y(d => d.pos[1])
.bandwidth(7)
.thresholds([.25, .5, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512])
.cellSize(7)
var layerSel = svg.append('g')
.attr('clip-path', 'url(#clip)')
.appendMany(contour(points), 'path.contour')
.at({d: d3.geoPath(), fill: d => color(d.value)})
if (window.drawtimer) drawtimer.stop()
drawtimer = d3.timer(contourLoop)
function contourLoop(t){
var index = (t*2) % points.length
activePoints = points.slice(index, index + Math.min(index/2, 5000))
layerSel.data(contour(activePoints)).at({d: d3.geoPath()})
}
})
svg{
overflow: visible;
}
.land{
fill: #eee;
stroke: #888;
}
svg path.contour{
stroke: #444;
stroke-opacity: .1;
/*fill: rgba(255, 0, 0, .2);*/
}
body{
font-family: monospace;
margin: 0px;
}
canvas{
position: absolute;
top: 0px;
left: 0px;
pointer-events: none;
}
// https://github.com/topojson/topojson-client Version 1.8.0. Copyright 2016 Mike Bostock.
!function(n,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t(n.topojson=n.topojson||{})}(this,function(n){"use strict";function t(n){if(!n)return h;var t,r,e=n.scale[0],o=n.scale[1],i=n.translate[0],u=n.translate[1];return function(n,f){f||(t=r=0),n[0]=(t+=n[0])*e+i,n[1]=(r+=n[1])*o+u}}function r(n){if(!n)return h;var t,r,e=n.scale[0],o=n.scale[1],i=n.translate[0],u=n.translate[1];return function(n,f){f||(t=r=0);var c=Math.round((n[0]-i)/e),a=Math.round((n[1]-u)/o);n[0]=c-t,n[1]=a-r,t=c,r=a}}function e(n,t){for(var r,e=n.length,o=e-t;o<--e;)r=n[o],n[o++]=n[e],n[e]=r}function o(n,t){for(var r=0,e=n.length;r<e;){var o=r+e>>>1;n[o]<t?r=o+1:e=o}return r}function i(n,t){var r={type:"Feature",id:t.id,properties:t.properties||{},geometry:u(n,t)};return null==t.id&&delete r.id,r}function u(n,r){function o(n,t){t.length&&t.pop();for(var r,o=l[n<0?~n:n],i=0,u=o.length;i<u;++i)t.push(r=o[i].slice()),s(r,i);n<0&&e(t,u)}function i(n){return n=n.slice(),s(n,0),n}function u(n){for(var t=[],r=0,e=n.length;r<e;++r)o(n[r],t);return t.length<2&&t.push(t[0].slice()),t}function f(n){for(var t=u(n);t.length<4;)t.push(t[0].slice());return t}function c(n){return n.map(f)}function a(n){var t=n.type;return"GeometryCollection"===t?{type:t,geometries:n.geometries.map(a)}:t in h?{type:t,coordinates:h[t](n)}:null}var s=t(n.transform),l=n.arcs,h={Point:function(n){return i(n.coordinates)},MultiPoint:function(n){return n.coordinates.map(i)},LineString:function(n){return u(n.arcs)},MultiLineString:function(n){return n.arcs.map(u)},Polygon:function(n){return c(n.arcs)},MultiPolygon:function(n){return n.arcs.map(c)}};return a(r)}function f(n,t,r){function e(n){var t=n<0?~n:n;(a[t]||(a[t]=[])).push({i:n,g:c})}function o(n){n.forEach(e)}function i(n){n.forEach(o)}function u(n){"GeometryCollection"===n.type?n.geometries.forEach(u):n.type in s&&(c=n,s[n.type](n.arcs))}var f=[];if(arguments.length>1){var c,a=[],s={LineString:o,MultiLineString:i,Polygon:i,MultiPolygon:function(n){n.forEach(i)}};u(t),a.forEach(arguments.length<3?function(n){f.push(n[0].i)}:function(n){r(n[0].g,n[n.length-1].g)&&f.push(n[0].i)})}else for(var l=0,h=n.arcs.length;l<h;++l)f.push(l);return{type:"MultiLineString",arcs:v(n,f)}}function c(n){var t=n[0],r=n[1],e=n[2];return Math.abs((t[0]-e[0])*(r[1]-t[1])-(t[0]-r[0])*(e[1]-t[1]))}function a(n){for(var t,r=-1,e=n.length,o=n[e-1],i=0;++r<e;)t=o,o=n[r],i+=t[0]*o[1]-t[1]*o[0];return i/2}function s(n,t){function r(n){n.forEach(function(t){t.forEach(function(t){(o[t=t<0?~t:t]||(o[t]=[])).push(n)})}),i.push(n)}function e(t){return Math.abs(a(u(n,{type:"Polygon",arcs:[t]}).coordinates[0]))}var o={},i=[],f=[];return t.forEach(function(n){"Polygon"===n.type?r(n.arcs):"MultiPolygon"===n.type&&n.arcs.forEach(r)}),i.forEach(function(n){if(!n._){var t=[],r=[n];for(n._=1,f.push(t);n=r.pop();)t.push(n),n.forEach(function(n){n.forEach(function(n){o[n<0?~n:n].forEach(function(n){n._||(n._=1,r.push(n))})})})}}),i.forEach(function(n){delete n._}),{type:"MultiPolygon",arcs:f.map(function(t){var r,i=[];if(t.forEach(function(n){n.forEach(function(n){n.forEach(function(n){o[n<0?~n:n].length<2&&i.push(n)})})}),i=v(n,i),(r=i.length)>1)for(var u,f,c=1,a=e(i[0]);c<r;++c)(u=e(i[c]))>a&&(f=i[0],i[0]=i[c],i[c]=f,a=u);return i})}}function l(n,t){return n[1][2]-t[1][2]}var h=function(){},p=function(n,t){return"GeometryCollection"===t.type?{type:"FeatureCollection",features:t.geometries.map(function(t){return i(n,t)})}:i(n,t)},v=function(n,t){function r(t){var r,e=n.arcs[t<0?~t:t],o=e[0];return n.transform?(r=[0,0],e.forEach(function(n){r[0]+=n[0],r[1]+=n[1]})):r=e[e.length-1],t<0?[r,o]:[o,r]}function e(n,t){for(var r in n){var e=n[r];delete t[e.start],delete e.start,delete e.end,e.forEach(function(n){o[n<0?~n:n]=1}),f.push(e)}}var o={},i={},u={},f=[],c=-1;return t.forEach(function(r,e){var o,i=n.arcs[r<0?~r:r];i.length<3&&!i[1][0]&&!i[1][1]&&(o=t[++c],t[c]=r,t[e]=o)}),t.forEach(function(n){var t,e,o=r(n),f=o[0],c=o[1];if(t=u[f])if(delete u[t.end],t.push(n),t.end=c,e=i[c]){delete i[e.start];var a=e===t?t:t.concat(e);i[a.start=t.start]=u[a.end=e.end]=a}else i[t.start]=u[t.end]=t;else if(t=i[c])if(delete i[t.start],t.unshift(n),t.start=f,e=u[f]){delete u[e.end];var s=e===t?t:e.concat(t);i[s.start=e.start]=u[s.end=t.end]=s}else i[t.start]=u[t.end]=t;else t=[n],i[t.start=f]=u[t.end=c]=t}),e(u,i),e(i,u),t.forEach(function(n){o[n<0?~n:n]||f.push([n])}),f},g=function(n){return u(n,f.apply(this,arguments))},d=function(n){return u(n,s.apply(this,arguments))},y=function(n){function t(n,t){n.forEach(function(n){n<0&&(n=~n);var r=i[n];r?r.push(t):i[n]=[t]})}function r(n,r){n.forEach(function(n){t(n,r)})}function e(n,t){"GeometryCollection"===n.type?n.geometries.forEach(function(n){e(n,t)}):n.type in f&&f[n.type](n.arcs,t)}var i={},u=n.map(function(){return[]}),f={LineString:t,MultiLineString:r,Polygon:r,MultiPolygon:function(n,t){n.forEach(function(n){r(n,t)})}};n.forEach(e);for(var c in i)for(var a=i[c],s=a.length,l=0;l<s;++l)for(var h=l+1;h<s;++h){var p,v=a[l],g=a[h];(p=u[v])[c=o(p,g)]!==g&&p.splice(c,0,g),(p=u[g])[c=o(p,v)]!==v&&p.splice(c,0,v)}return u},m=function(){function n(n,t){for(;t>0;){var r=(t+1>>1)-1,o=e[r];if(l(n,o)>=0)break;e[o._=t]=o,e[n._=t=r]=n}}function t(n,t){for(;;){var r=t+1<<1,i=r-1,u=t,f=e[u];if(i<o&&l(e[i],f)<0&&(f=e[u=i]),r<o&&l(e[r],f)<0&&(f=e[u=r]),u===t)break;e[f._=t]=f,e[n._=t=u]=n}}var r={},e=[],o=0;return r.push=function(t){return n(e[t._=o]=t,o++),o},r.pop=function(){if(!(o<=0)){var n,r=e[0];return--o>0&&(n=e[o],t(e[n._=0]=n,0)),r}},r.remove=function(r){var i,u=r._;if(e[u]===r)return u!==--o&&(i=e[o],(l(i,r)<0?n:t)(e[i._=u]=i,u)),u},r},E=function(n,e){function o(n){f.remove(n),n[1][2]=e(n),f.push(n)}var i=t(n.transform),u=r(n.transform),f=m();return null==e&&(e=c),n.arcs.forEach(function(n){var t,r,c,a,s=[],l=0;for(r=0,c=n.length;r<c;++r)a=n[r],i(n[r]=[a[0],a[1],1/0],r);for(r=1,c=n.length-1;r<c;++r)t=n.slice(r-1,r+2),t[1][2]=e(t),s.push(t),f.push(t);for(r=0,c=s.length;r<c;++r)t=s[r],t.previous=s[r-1],t.next=s[r+1];for(;t=f.pop();){var h=t.previous,p=t.next;t[1][2]<l?t[1][2]=l:l=t[1][2],h&&(h.next=p,h[2]=t[2],o(h)),p&&(p.previous=h,p[0]=t[0],o(p))}n.forEach(u)}),n};n.mesh=g,n.meshArcs=f,n.merge=d,n.mergeArcs=s,n.feature=p,n.neighbors=y,n.presimplify=E,Object.defineProperty(n,"__esModule",{value:!0})});
We can't make this file beautiful and searchable because it's too large.
lat lng time
40.7 -74.0 0
51.3 0.5 23
52.2 0.1 208
45.9 -119.7 309
35.7 139.7 344
45.9 -119.7 954
48.5 34.6 1001
43.6 -79.4 1003
46.6 20.7 1004
24.1 120.7 1005
34.0 -118.4 1006
55.7 37.6 1006
35.6 139.8 1006
23.5 121.0 1007
32.1 118.8 1007
57.8 40.9 1007
55.7 37.6 1007
50.4 30.5 1009
55.7 37.6 1009
43.6 -79.7 1010
21.1 -86.9 1010
25.8 -80.4 1010
22.8 108.3 1010
32.8 -79.9 1010
23.5 121.0 1010
39.1 -94.6 1011
57.8 40.9 1011
23.5 121.0 1011
23.5 121.0 1011
23.0 120.2 1011
23.5 121.0 1012
56.0 24.0 1012
17.4 78.5 1012
50.6 36.6 1012
34.7 113.5 1012
23.5 121.0 1012
50.7 3.2 1013
48.9 2.3 1013
51.7 55.4 1013
55.8 37.6 1013
17.4 78.5 1014
30.7 104.1 1015
23.5 121.0 1015
48.7 2.3 1015
57.0 24.1 1015
23.5 121.0 1015
51.7 6.2 1015
23.5 121.0 1016
30.7 104.1 1016
41.9 -87.7 1016
34.3 108.9 1016
25.0 121.5 1017
50.3 127.5 1017
50.6 36.6 1017
55.1 36.6 1017
40.2 44.5 1017
57.8 40.9 1017
55.7 37.6 1017
34.0 -118.4 1017
41.0 29.0 1018
23.5 121.0 1018
55.7 37.6 1018
50.6 36.6 1019
-43.0 147.3 1019
25.3 55.3 1019
23.5 121.0 1020
50.4 30.5 1020
50.6 36.6 1020
25.1 121.7 1020
39.9 115.3 1020
56.9 35.9 1020
22.6 120.4 1021
24.1 120.7 1021
25.0 121.3 1021
48.5 35.0 1021
49.8 30.1 1022
23.0 120.2 1022
55.8 37.6 1022
34.8 113.7 1022
21.0 105.9 1022
1.0 32.0 1022
47.2 27.6 1022
53.5 49.3 1022
30.3 -97.7 1022
23.0 120.2 1023
55.7 37.6 1023
23.5 121.0 1023
50.4 30.5 1024
55.8 37.6 1024
50.6 36.6 1024
23.0 120.2 1024
56.3 114.9 1024
48.0 37.8 1024
38.0 23.7 1024
16.3 -61.6 1025
43.7 -79.5 1025
37.5 127.0 1025
51.2 58.3 1025
51.8 55.1 1025
50.6 36.6 1025
34.1 -118.3 1025
57.8 40.9 1025
25.0 121.5 1025
23.5 121.0 1025
23.1 113.3 1026
23.5 121.0 1026
45.9 -119.7 1026
55.7 37.6 1026
48.9 2.3 1026
37.5 127.0 1026
53.1 36.2 1026
24.8 121.0 1027
55.2 61.4 1027
51.8 55.1 1028
51.7 55.4 1028
53.7 91.4 1028
48.9 2.3 1028
55.7 37.6 1028
45.0 41.1 1028
34.7 113.5 1028
-22.8 -43.2 1028
33.4 112.4 1029
50.4 30.5 1029
51.3 9.5 1029
39.1 117.2 1029
51.7 55.4 1030
50.6 36.6 1030
51.7 55.4 1030
54.2 37.6 1030
23.5 121.0 1030
40.5 -74.2 1030
23.5 121.0 1030
34.7 113.5 1030
30.3 120.2 1030
51.2 58.3 1031
23.5 121.0 1031
28.6 77.2 1031
36.8 127.0 1032
34.8 113.7 1032
37.8 128.9 1032
53.0 36.1 1032
26.1 119.3 1032
55.7 37.6 1032
23.5 121.0 1032
24.9 118.6 1032
51.2 58.3 1033
51.7 55.4 1033
23.0 120.2 1033
34.8 113.7 1033
47.4 40.1 1033
55.8 37.6 1033
42.7 23.3 1034
51.7 55.4 1034
37.8 -97.8 1034
25.3 55.3 1034
35.0 138.4 1034
51.7 39.2 1034
37.5 127.0 1034
53.0 36.1 1034
50.6 36.6 1035
50.5 30.5 1035
34.8 113.7 1035
37.8 -97.8 1035
41.8 123.4 1035
25.0 121.5 1035
55.7 37.6 1035
24.1 120.5 1036
53.5 49.6 1036
23.5 121.0 1036
51.2 58.3 1036
51.7 55.4 1036
29.5 -98.4 1036
45.9 -119.7 1036
-33.9 151.1 1036
26.6 106.7 1036
23.5 121.0 1036
33.1 -96.8 1036
30.3 120.2 1037
37.5 127.0 1037
55.0 82.9 1037
51.2 58.3 1037
51.7 55.4 1037
41.3 -104.7 1037
30.3 120.2 1037
26.1 119.3 1038
51.7 55.4 1038
34.7 113.5 1038
54.6 39.7 1038
24.1 120.7 1039
37.7 112.5 1039
34.8 113.7 1039
25.0 121.5 1039
31.0 121.4 1039
23.5 121.0 1040
50.6 36.6 1040
50.4 30.5 1040
31.9 117.3 1040
55.7 37.6 1040
42.7 23.3 1040
53.0 36.1 1040
50.4 30.5 1040
51.7 55.4 1041
25.0 121.5 1041
51.2 38.5 1041
31.5 34.8 1041
53.8 87.1 1041
54.2 37.6 1041
23.5 121.0 1041
46.8 29.5 1042
50.6 36.6 1042
51.8 55.1 1042
22.8 108.3 1042
51.3 37.8 1042
23.0 120.2 1042
20.0 77.0 1042
-23.4 -46.9 1042
45.0 39.0 1042
34.7 113.5 1042
23.5 121.0 1042
55.5 38.4 1042
35.7 51.4 1042
48.9 2.3 1043
58.1 52.7 1043
25.0 121.5 1043
25.0 121.5 1043
50.1 14.5 1043
1.3 103.9 1043
26.6 106.7 1043
51.5 -0.1 1043
23.5 121.0 1044
51.4 57.6 1044
51.2 58.3 1044
55.2 61.4 1044
53.1 36.2 1044
43.9 125.3 1044
51.8 55.1 1045
30.7 104.1 1045
52.8 52.3 1045
22.8 108.3 1045
55.8 37.6 1045
22.6 120.4 1045
36.7 117.0 1045
23.1 113.3 1045
53.0 36.1 1045
55.3 38.7 1045
53.1 36.2 1046
35.3 139.4 1046
50.6 36.6 1046
51.7 55.4 1046
23.5 121.0 1046
52.8 52.3 1046
23.5 121.0 1046
23.5 121.0 1046
36.7 117.0 1046
36.7 117.0 1046
41.0 64.0 1046
26.6 106.7 1046
-33.5 143.2 1047
40.9 29.2 1047
49.8 73.1 1047
34.7 113.5 1047
55.8 37.6 1047
13.8 100.5 1047
23.5 121.0 1048
44.7 37.8 1048
51.9 33.5 1048
51.3 37.8 1048
45.5 -73.6 1048
53.1 36.2 1048
28.6 115.9 1049
51.7 55.4 1049
52.8 52.3 1049
55.0 73.4 1049
56.9 60.6 1049
13.8 100.5 1049
16.2 120.8 1049
11.0 77.0 1049
-22.9 -43.2 1049
51.2 58.3 1050
-34.6 -58.4 1050
28.6 77.2 1050
59.3 18.1 1050
25.0 121.5 1050
55.0 73.4 1051
34.7 113.5 1051
51.7 55.4 1051
56.4 44.1 1051
47.5 19.1 1051
56.2 47.3 1051
-26.1 28.2 1051
13.8 100.5 1051
50.4 30.5 1052
50.4 30.5 1052
37.8 -97.8 1052
35.7 139.7 1052
55.7 37.6 1052
33.0 -96.5 1052
50.4 80.3 1052
39.9 116.4 1052
51.7 55.4 1053
52.8 52.3 1053
51.5 -0.1 1053
55.7 37.6 1053
34.8 113.7 1053
51.8 55.1 1053
39.1 -94.6 1053
34.1 -118.3 1053
35.6 139.8 1053
51.9 36.3 1053
55.8 37.6 1053
39.9 116.4 1053
56.9 35.9 1053
19.4 -99.1 1053
54.8 56.0 1053
51.7 36.2 1053
45.3 -73.9 1053
45.5 -73.6 1053
55.0 73.4 1054
-25.7 28.2 1054
23.5 121.0 1054
48.5 35.0 1054
51.7 36.2 1054
51.5 -0.1 1054
45.5 -73.6 1054
37.5 127.0 1054
34.8 113.7 1055
51.2 58.3 1055
62.0 129.7 1055
34.0 74.9 1055
23.1 113.3 1055
44.0 43.1 1055
37.5 127.0 1055
51.3 9.5 1055
37.8 128.9 1055
38.7 -90.3 1055
-22.8 -43.2 1055
43.9 125.3 1055
24.1 120.7 1055
34.4 132.5 1056
51.2 58.3 1056
53.7 91.4 1056
45.8 126.7 1056
52.8 52.3 1056
16.2 120.8 1056
30.3 120.2 1056
37.5 127.0 1056
50.4 30.5 1057
30.0 70.0 1057
55.7 37.6 1057
41.8 -87.7 1057
51.7 55.4 1058
55.0 73.4 1058
51.8 55.1 1058
50.4 30.5 1058
56.4 37.5 1058
34.7 135.5 1058
25.0 121.5 1058
45.5 -73.6 1058
51.5 31.3 1058
47.4 25.8 1059
17.4 78.5 1059
13.8 100.5 1059
25.0 121.5 1059
36.7 117.0 1059
15.9 -96.3 1059
17.4 78.5 1059
45.5 -73.6 1059
50.4 30.5 1060
51.7 55.4 1060
51.3 58.2 1060
52.6 39.6 1060
57.8 40.9 1060
-22.9 -43.2 1060
39.1 114.9 1060
56.9 60.6 1060
50.4 30.5 1060
51.3 37.8 1060
45.3 -73.9 1060
55.1 73.1 1061
51.7 55.4 1061
55.9 37.7 1061
37.8 -97.8 1061
37.5 121.4 1061
52.5 -1.9 1061
55.7 37.6 1061
22.3 114.2 1061
22.6 120.3 1061
55.0 50.1 1062
30.3 120.2 1062
56.0 92.9 1062
50.4 30.5 1062
25.0 121.3 1062
37.8 -97.8 1062
23.1 113.3 1062
55.7 37.6 1062
55.7 37.6 1062
23.0 120.2 1063
53.0 36.1 1063
34.7 113.5 1063
32.1 118.8 1063
50.0 36.3 1063
55.7 37.6 1063
47.5 42.2 1063
55.7 37.6 1063
56.2 47.3 1064
52.8 52.3 1064
55.7 84.9 1064
51.7 39.2 1064
55.2 61.4 1065
51.7 55.4 1065
24.1 120.7 1065
51.2 38.5 1065
43.1 12.1 1066
-22.8 -43.4 1066
46.0 25.0 1066
38.3 141.0 1066
30.7 104.1 1066
38.7 -9.1 1066
25.0 121.5 1066
51.5 -0.2 1066
51.7 39.2 1066
48.0 37.8 1067
34.8 113.7 1067
55.0 73.4 1067
24.8 121.0 1067
50.0 36.3 1067
52.2 21.0 1068
30.7 104.1 1068
51.7 36.2 1068
23.5 121.0 1068
47.9 35.3 1068
26.6 106.7 1068
51.7 55.4 1069
25.0 121.5 1069
55.8 37.6 1069
55.7 37.6 1069
51.2 58.3 1070
23.1 113.3 1070
24.1 120.7 1070
23.5 121.0 1070
56.9 35.9 1070
36.7 117.0 1070
22.5 114.1 1070
32.1 118.8 1070
23.5 121.0 1070
49.8 6.2 1070
23.5 121.0 1071
40.6 122.5 1071
55.0 73.4 1071
17.4 78.5 1071
32.1 34.8 1071
50.6 36.6 1071
51.7 39.2 1071
23.5 121.0 1071
51.7 55.4 1072
51.7 39.2 1072
48.0 68.0 1072
52.2 21.0 1072
53.0 36.1 1072
23.1 113.3 1072
51.7 36.2 1072
22.3 114.2 1072
53.0 36.1 1072
39.9 116.4 1072
22.6 120.4 1072
32.1 118.8 1072
23.1 113.3 1073
53.5 49.3 1073
55.7 37.6 1073
50.5 30.5 1073
53.1 36.2 1073
-26.1 28.1 1073
57.8 40.9 1073
34.8 113.7 1073
51.5 46.0 1073
52.4 4.9 1073
23.5 121.0 1073
23.5 121.0 1073
23.5 121.0 1073
43.2 -79.7 1073
23.5 121.0 1073
51.7 55.4 1074
25.0 121.5 1074
37.5 121.4 1074
48.6 45.7 1074
24.1 120.5 1074
23.5 121.0 1074
55.7 37.6 1074
37.5 127.0 1074
49.1 -122.8 1074
37.5 127.0 1074
53.2 50.1 1074
11.2 78.2 1074
45.3 -73.9 1074
23.1 113.3 1074
37.8 128.9 1074
40.5 -74.2 1075
59.9 30.3 1075
17.4 78.5 1075
50.0 36.3 1075
35.7 51.4 1075
23.5 121.0 1075
56.7 37.2 1075
36.7 117.0 1076
34.8 113.7 1076
23.5 121.0 1076
55.8 37.6 1076
24.8 121.0 1076
39.9 116.4 1076
48.9 2.3 1076
51.3 37.8 1076
50.6 36.6 1076
32.1 118.8 1076
30.7 104.1 1077
36.1 -86.9 1077
13.8 100.5 1077
55.8 37.6 1077
50.6 36.6 1077
50.0 36.3 1077
41.0 29.0 1077
53.2 -4.1 1077
23.5 121.0 1078
52.8 52.3 1078
-6.2 -38.9 1078
52.2 21.0 1078
-53.8 -67.7 1078
51.7 36.2 1078
22.8 108.3 1078
36.7 117.0 1078
23.1 113.3 1078
55.7 37.6 1079
23.5 121.0 1079
59.9 30.3 1079
13.8 100.5 1079
34.9 137.0 1079
51.8 55.1 1080
51.7 39.2 1080
23.5 121.0 1080
50.3 127.5 1080
45.5 -73.6 1080
14.6 121.1 1080
55.0 50.1 1080
55.7 37.6 1080
51.9 0.9 1080
33.0 -96.7 1080
54.0 86.7 1080
55.2 61.4 1081
22.6 120.3 1081
52.8 52.3 1081
52.8 52.3 1081
23.5 121.0 1081
55.7 37.6 1081
18.5 73.9 1081
45.5 -73.6 1081
39.9 116.4 1081
23.5 121.0 1081
37.5 127.0 1081
-17.4 -66.1 1082
51.7 55.4 1082
50.4 30.5 1082
23.5 121.0 1082
55.8 37.6 1082
45.5 -73.6 1082
54.6 39.7 1082
22.3 114.2 1082
51.2 58.3 1083
44.2 42.1 1083
-0.2 -78.5 1083
51.2 58.3 1083
51.2 58.3 1083
22.5 114.1 1083
55.0 73.4 1083
55.7 37.6 1083
25.0 121.5 1083
50.6 36.6 1083
55.2 61.4 1083
53.0 36.1 1084
52.2 21.0 1084
48.7 38.1 1084
50.4 30.5 1084
53.7 91.4 1084
48.9 2.3 1084
37.5 127.0 1084
47.2 39.7 1084
37.5 127.0 1084
45.1 7.7 1084
24.1 120.7 1084
55.7 37.6 1084
42.5 14.2 1084
32.1 118.8 1084
52.2 21.0 1084
23.5 121.0 1085
51.3 58.2 1085
57.8 40.9 1085
17.4 78.5 1085
31.0 121.4 1085
23.1 113.3 1085
23.1 113.3 1085
51.7 39.2 1085
55.7 37.6 1085
53.1 49.9 1085
52.2 21.0 1086
51.7 55.4 1086
13.8 100.5 1086
57.8 40.9 1086
56.9 60.6 1086
14.4 121.3 1086
45.5 -73.6 1086
53.7 52.4 1087
51.8 55.1 1087
51.5 -0.1 1087
51.2 58.6 1087
53.1 36.2 1087
50.6 36.6 1087
45.5 -73.6 1087
55.0 36.5 1088
51.2 58.3 1088
47.1 37.5 1088
28.2 113.1 1088
50.6 26.2 1088
34.3 108.9 1088
36.7 117.0 1088
55.0 60.1 1088
52.0 47.8 1088
23.5 121.0 1088
52.2 21.0 1088
37.5 127.0 1088
39.9 116.4 1088
55.7 37.6 1088
51.5 -0.1 1088
47.5 19.1 1088
23.5 121.0 1089
50.6 36.6 1089
34.8 113.7 1089
50.4 30.5 1089
55.3 38.7 1089
22.8 108.3 1089
17.4 78.5 1089
43.1 141.3 1089
52.8 52.3 1090
46.5 30.7 1090
53.5 49.3 1090
45.8 126.7 1090
23.5 121.0 1090
50.6 36.6 1090
48.0 37.8 1090
45.7 27.2 1090
35.6 139.8 1090
55.7 37.6 1090
55.7 84.9 1090
25.0 121.5 1090
50.9 4.4 1091
51.7 55.4 1091
23.5 121.0 1091
24.1 120.7 1091
23.1 113.3 1091
44.8 -93.0 1091
52.3 104.3 1092
51.7 55.4 1092
50.6 36.6 1092
52.2 21.0 1092
35.6 140.1 1092
49.8 24.0 1092
55.7 37.6 1093
26.6 106.7 1093
25.0 121.5 1093
51.7 36.2 1093
24.1 120.7 1093
56.2 47.3 1093
55.8 37.6 1093
24.1 120.5 1094
47.9 35.3 1094
30.7 104.1 1094
52.2 21.0 1094
55.8 39.0 1094
31.9 117.3 1094
16.3 80.5 1094
23.1 113.3 1094
23.5 121.0 1094
53.0 36.1 1094
53.0 36.1 1094
53.1 91.4 1095
34.8 113.7 1095
47.5 41.8 1095
53.1 36.2 1095
17.4 78.5 1095
12.2 -86.3 1095
53.5 49.3 1095
50.6 36.6 1095
48.9 2.3 1095
40.5 -74.2 1095
56.1 40.4 1095
49.6 34.5 1096
52.2 21.0 1096
51.7 55.4 1096
55.8 37.6 1096
52.2 21.0 1096
37.5 127.0 1096
30.7 104.1 1096
34.7 113.5 1096
22.8 108.3 1096
37.5 127.0 1096
24.1 120.7 1096
45.5 -73.6 1096
51.8 55.1 1097
50.4 30.5 1097
53.1 46.6 1097
48.9 2.3 1097
31.0 121.4 1097
1.3 103.9 1097
51.5 -0.1 1098
52.2 21.0 1098
36.6 101.8 1098
49.6 34.5 1098
45.5 -73.6 1098
55.0 82.9 1098
35.9 139.6 1098
52.3 104.3 1098
34.7 113.5 1098
47.2 39.7 1098
50.6 36.6 1098
40.5 -74.2 1098
48.7 44.5 1098
36.7 117.0 1098
48.3 16.3 1098
50.0 36.3 1098
39.1 117.2 1099
49.8 30.1 1099
9.9 -84.1 1099
43.4 -79.7 1099
47.4 19.1 1099
23.5 121.0 1099
49.8 30.1 1099
36.7 117.0 1099
32.1 118.8 1099
53.4 83.8 1099
51.3 37.8 1099
41.0 29.0 1099
52.2 21.0 1099
54.6 39.7 1099
23.5 121.0 1099
23.5 121.0 1099
40.6 9.0 1099
36.7 117.0 1100
51.8 55.1 1100
24.1 120.7 1100
35.7 139.7 1100
53.0 36.1 1100
57.7 12.0 1101
51.8 11.6 1101
52.8 52.3 1101
34.8 113.7 1101
23.5 121.0 1101
51.7 55.4 1101
51.7 55.4 1101
56.6 47.9 1101
47.2 39.7 1101
30.3 120.2 1101
13.8 100.5 1101
32.1 118.8 1101
30.3 120.2 1101
31.0 121.4 1101
32.1 118.8 1101
31.0 121.4 1101
51.5 -0.1 1101
23.1 113.3 1102
-23.5 -46.2 1102
23.5 121.0 1102
14.6 121.0 1102
51.8 55.1 1102
25.7 -100.4 1102
29.5 -98.4 1102
23.5 121.0 1102
51.7 55.4 1102
30.3 120.2 1102
25.0 121.5 1103
37.8 -97.8 1103
51.7 39.2 1103
55.7 37.6 1103
51.7 39.2 1103
23.5 121.0 1103
52.2 21.0 1103
53.2 50.1 1103
51.5 46.1 1103
51.5 46.1 1103
36.7 117.0 1103
22.6 120.4 1103
58.0 56.3 1104
-40.6 -73.1 1104
22.3 114.2 1104
51.7 39.2 1104
52.2 21.0 1104
54.6 39.7 1104
9.9 -84.1 1104
53.3 -3.8 1104
37.5 127.0 1104
51.7 36.2 1104
55.7 37.6 1104
25.0 121.5 1104
51.7 39.2 1104
30.3 120.2 1105
45.0 39.0 1105
48.2 16.4 1105
37.5 127.0 1105
45.8 126.7 1105
51.2 58.3 1105
34.8 113.7 1105
33.8 132.8 1105
55.7 37.6 1105
44.4 26.1 1105
32.1 118.8 1105
36.7 117.0 1105
50.6 36.6 1105
47.2 39.7 1105
43.6 39.7 1105
21.0 105.9 1105
31.0 121.4 1105
52.8 52.3 1106
51.2 58.3 1106
25.0 121.5 1106
36.7 117.0 1106
50.4 30.5 1106
24.1 120.7 1106
28.2 113.1 1106
59.3 18.1 1106
26.6 106.7 1106
22.8 108.3 1106
51.5 -0.2 1107
55.7 37.6 1107
55.7 37.6 1107
40.4 -3.7 1107
36.7 117.0 1107
44.0 43.1 1107
-18.9 -48.3 1108
39.9 116.4 1108
55.7 37.6 1108
51.7 55.4 1109
53.5 49.1 1109
37.5 127.0 1109
51.5 46.0 1109
39.9 116.4 1109
23.1 113.3 1109
23.1 113.3 1109
47.6 -122.3 1109
45.5 -73.6 1109
48.5 32.3 1110
55.7 37.6 1110
25.0 121.5 1110
51.7 55.4 1110
53.5 49.3 1110
45.5 -73.6 1110
55.7 37.6 1110
25.0 121.3 1110
34.7 113.5 1110
10.5 -66.8 1110
45.5 -73.6 1110
45.5 -73.6 1110
48.9 2.3 1111
30.7 104.1 1111
48.7 44.5 1111
56.2 47.3 1111
24.1 120.7 1111
56.6 84.8 1111
22.3 114.2 1111
45.0 39.0 1111
48.0 37.8 1111
25.0 121.5 1112
50.6 36.6 1112
34.0 -117.8 1112
56.9 35.9 1112
23.5 121.0 1112
61.3 73.4 1112
36.7 117.0 1112
45.5 -73.6 1112
23.5 121.0 1112
29.0 111.7 1113
23.1 113.3 1113
50.6 36.6 1113
56.1 47.3 1113
56.9 60.6 1113
50.0 36.3 1113
19.3 76.1 1113
43.9 125.3 1113
55.7 38.0 1113
31.0 121.4 1114
34.9 117.6 1114
45.8 126.7 1114
35.2 115.4 1114
51.7 36.2 1114
22.8 108.3 1114
51.7 36.2 1114
48.0 68.0 1114
6.9 79.9 1114
34.8 135.4 1114
25.0 121.5 1114
25.0 121.5 1114
48.0 37.8 1114
17.4 78.5 1114
41.8 123.4 1114
51.7 55.4 1115
-38.0 -57.5 1115
56.1 47.5 1115
45.3 -73.9 1115
48.5 35.0 1115
25.0 121.5 1115
51.7 36.2 1115
50.7 3.2 1116
45.5 -73.6 1116
48.5 35.0 1116
30.3 120.2 1116
36.7 117.0 1116
43.9 125.3 1116
55.8 37.6 1116
47.6 -122.3 1116
33.8 -84.3 1117
37.5 127.0 1117
47.4 40.1 1117
50.6 36.6 1117
50.4 30.5 1117
23.5 121.0 1117
28.2 113.1 1117
34.7 113.5 1117
17.4 78.5 1117
53.4 83.8 1117
45.5 -73.6 1118
52.8 52.3 1118
23.5 121.0 1118
37.8 -97.8 1118
44.4 26.1 1118
56.9 60.6 1118
45.1 16.3 1118
24.5 118.1 1118
56.4 41.3 1118
50.4 30.5 1118
53.2 50.1 1118
51.7 39.2 1118
53.1 36.2 1118
30.7 104.1 1119
30.7 104.1 1119
51.8 55.1 1119
51.7 55.4 1119
37.5 127.0 1119
22.4 114.0 1119
56.0 37.2 1119
55.7 37.6 1119
4.6 -74.1 1119
55.7 37.6 1119
48.5 35.0 1119
45.5 -73.6 1119
45.5 -73.6 1119
37.5 127.0 1119
57.2 65.5 1120
51.7 55.4 1120
25.0 121.5 1120
37.5 127.0 1120
22.3 114.2 1120
57.0 41.0 1120
51.8 55.1 1121
36.7 117.0 1121
39.1 -77.1 1121
53.2 50.1 1121
55.7 37.6 1121
53.5 87.3 1121
23.0 113.7 1121
47.4 19.1 1121
41.1 -8.6 1121
32.8 -117.0 1121
39.9 116.4 1121
53.0 36.1 1121
51.7 55.4 1122
38.6 -90.2 1122
55.8 37.6 1122
51.3 37.8 1122
36.7 117.0 1122
36.7 117.0 1122
56.9 35.9 1122
36.7 117.0 1122
22.6 120.3 1122
37.8 -97.8 1122
53.0 36.1 1122
37.5 127.0 1122
55.7 37.6 1122
52.3 104.3 1122
30.0 120.6 1123
51.7 55.4 1123
46.5 30.7 1123
13.8 100.5 1123
59.9 30.3 1123
36.7 117.0 1123
47.6 -122.3 1123
51.7 55.4 1124
48.5 35.0 1124
35.2 115.4 1124
10.0 8.0 1124
30.7 104.1 1124
51.7 36.2 1124
29.0 -111.7 1124
23.5 121.0 1124
48.7 44.5 1124
51.7 39.2 1124
34.7 -86.6 1124
34.8 113.7 1124
53.0 36.1 1124
60.9 76.6 1125
51.8 55.1 1125
51.8 55.1 1125
25.0 121.5 1125
25.0 121.5 1125
35.6 139.7 1125
51.5 46.1 1125
23.5 121.0 1125
22.5 114.1 1125
37.5 127.0 1125
37.5 127.0 1125
10.8 106.6 1125
51.7 39.2 1125
39.9 116.4 1125
53.0 36.1 1125
53.5 49.3 1126
50.4 30.5 1126
51.7 55.4 1126
51.2 58.3 1126
51.5 -0.1 1126
24.5 118.1 1126
30.6 114.3 1126
51.5 46.0 1126
51.7 36.2 1126
36.7 117.0 1126
41.1 -73.5 1126
19.4 -99.1 1126
17.0 81.8 1126
23.5 121.0 1127
23.5 121.0 1127
23.5 121.0 1127
35.7 51.4 1127
55.7 37.6 1127
1.4 103.8 1127
37.5 127.0 1128
45.5 -73.6 1128
12.5 -70.0 1128
55.7 37.6 1128
52.8 52.3 1128
50.4 30.5 1128
49.8 30.1 1128
47.1 8.2 1128
51.5 81.3 1128
50.6 36.6 1128
39.1 -94.6 1128
51.3 9.5 1128
43.9 125.3 1128
53.1 36.2 1128
31.0 121.4 1128
55.7 37.6 1129
25.0 121.5 1129
40.8 -74.1 1129
37.4 -122.0 1129
37.5 127.0 1129
34.7 113.5 1129
23.1 113.3 1129
51.7 36.2 1129
59.9 30.3 1129
46.1 -73.9 1130
57.2 65.5 1130
45.3 -73.9 1130
32.1 118.8 1130
56.4 37.5 1130
37.5 127.0 1130
52.0 47.8 1130
53.2 50.1 1130
32.1 118.8 1130
37.5 127.0 1130
55.7 37.6 1130
25.0 121.5 1130
23.5 121.0 1130
36.7 117.0 1131
23.5 121.0 1131
41.8 123.4 1131
23.5 121.0 1131
51.1 13.8 1131
56.9 35.9 1131
4.6 -74.1 1131
56.3 114.9 1131
50.3 28.7 1132
53.9 27.6 1132
49.8 24.0 1132
30.7 104.1 1132
41.8 123.4 1132
40.0 45.0 1132
45.8 126.7 1132
32.1 118.8 1132
-26.9 26.7 1132
20.0 77.0 1132
40.5 -74.2 1132
37.5 127.0 1133
30.1 121.1 1133
32.1 118.8 1133
50.0 36.3 1133
24.1 120.7 1133
39.9 116.4 1133
55.4 43.8 1133
22.5 114.1 1133
25.0 121.5 1133
22.5 114.1 1133
56.7 37.2 1133
45.5 -73.6 1133
31.0 121.4 1133
51.7 55.4 1133
45.5 -73.6 1134
51.8 55.1 1134
20.2 85.8 1134
23.1 113.3 1134
25.0 121.5 1134
23.5 121.0 1134
10.4 123.9 1134
34.8 113.7 1134
55.7 37.6 1134
23.1 113.3 1134
51.7 36.2 1134
23.5 121.0 1134
33.7 -84.4 1134
34.8 113.7 1134
23.5 121.0 1134
26.6 106.7 1134
31.0 121.4 1134
23.7 90.4 1135
50.6 36.6 1135
39.9 116.4 1135
25.0 121.5 1135
37.5 127.0 1135
53.2 50.1 1135
34.8 113.7 1135
51.7 36.2 1135
23.5 121.0 1135
48.0 37.8 1135
35.1 137.2 1135
60.6 16.8 1136
54.6 53.7 1136
23.1 113.3 1136
23.5 121.0 1136
51.7 36.2 1136
55.7 37.6 1136
36.7 117.0 1136
50.6 36.6 1136
23.5 121.0 1136
53.2 50.1 1136
17.4 78.5 1136
53.1 36.2 1136
31.5 119.5 1137
23.1 113.3 1137
31.0 121.4 1137
32.0 -5.0 1137
55.7 37.6 1137
34.8 113.7 1137
41.4 -75.4 1137
51.5 46.0 1137
54.3 48.4 1137
32.1 118.8 1137
47.6 -122.3 1137
45.5 -73.6 1137
53.1 36.2 1137
25.0 121.5 1138
47.5 42.2 1138
45.5 -73.6 1138
-23.5 -46.2 1138
25.0 121.5 1138
30.3 120.2 1138
23.1 113.3 1138
45.5 -73.6 1138
51.7 55.4 1139
51.2 58.3 1139
51.7 55.4 1139
23.5 121.0 1139
31.0 121.4 1139
25.8 -80.2 1139
53.5 49.3 1139
22.8 108.3 1139
45.0 39.0 1139
53.5 49.3 1139
24.9 118.6 1139
22.3 113.6 1139
23.5 121.0 1139
53.1 49.9 1140
22.4 114.0 1140
28.2 113.1 1140
51.5 46.0 1140
22.6 120.4 1140
23.1 113.3 1140
43.9 125.3 1140
36.7 117.0 1141
25.0 121.5 1141
36.7 117.0 1141
50.6 36.6 1141
51.7 35.7 1141
52.5 -93.0 1141
28.6 111.8 1141
35.7 139.8 1141
51.7 39.2 1141
50.4 30.5 1142
37.5 127.0 1142
55.8 49.1 1142
51.7 36.2 1142
47.1 21.9 1142
-12.3 -66.2 1142
41.0 64.0 1142
51.7 39.2 1142
24.0 120.9 1143
28.2 113.1 1143
50.6 36.6 1143
51.7 55.4 1143
45.8 126.7 1143
56.2 101.6 1143
53.1 36.2 1143
39.9 116.4 1143
23.5 121.0 1143
28.2 113.1 1143
23.5 121.0 1143
25.0 121.5 1143
55.3 61.4 1143
47.6 -122.3 1143
45.5 -73.6 1143
46.7 38.3 1144
44.7 10.9 1144
51.3 9.5 1144
54.0 38.5 1144
30.6 114.3 1144
36.7 117.0 1144
34.7 113.5 1144
-33.5 -70.7 1144
50.4 30.5 1144
51.7 39.2 1144
55.2 61.4 1144
55.2 61.4 1144
24.1 120.7 1144
34.7 -86.6 1144
51.8 55.1 1145
55.7 37.6 1145
51.3 9.5 1145
52.6 39.6 1145
45.5 -73.6 1145
23.5 121.0 1145
55.7 37.6 1145
37.5 127.0 1145
23.5 121.0 1145
51.2 -0.6 1145
31.0 121.4 1145
36.6 127.5 1145
23.1 113.3 1145
53.1 36.2 1145
55.4 43.8 1145
56.1 47.3 1146
52.8 52.3 1146
23.1 113.3 1146
51.7 39.2 1146
23.1 113.3 1146
51.1 17.0 1146
36.7 117.0 1147
55.0 73.4 1147
37.5 127.0 1147
36.6 127.5 1147
55.8 37.6 1147
23.5 121.0 1147
55.7 37.6 1147
25.0 121.5 1148
39.0 -77.5 1148
39.9 116.4 1148
45.5 -73.6 1148
50.0 36.3 1148
53.2 50.1 1148
23.1 113.3 1148
23.5 121.0 1148
45.3 -73.9 1148
-34.6 -58.4 1148
51.7 55.4 1149
51.7 36.2 1149
23.1 113.3 1149
56.0 92.9 1149
-34.6 -58.4 1149
47.2 39.7 1149
51.2 58.3 1150
45.8 126.7 1150
52.8 52.3 1150
25.0 121.5 1150
22.3 114.2 1150
55.7 38.0 1150
56.2 47.3 1150
30.7 104.1 1150
24.1 120.5 1150
45.5 -73.6 1150
23.1 113.3 1150
51.5 46.0 1150
53.2 50.1 1150
55.2 59.7 1150
55.0 60.1 1150
55.7 37.6 1150
55.7 37.6 1150
55.2 59.7 1150
48.9 2.3 1151
53.2 50.1 1151
37.5 127.0 1151
42.4 -71.0 1151
22.8 108.3 1151
23.1 113.3 1151
55.8 37.6 1151
46.8 75.0 1151
51.5 46.1 1151
37.5 127.0 1151
48.2 16.4 1152
24.1 120.7 1152
35.6 139.7 1152
49.8 30.1 1152
56.7 36.8 1152
32.1 118.8 1152
30.7 104.1 1152
37.8 -97.8 1152
39.1 117.2 1152
50.4 30.5 1152
48.9 2.3 1152
37.5 127.0 1152
31.0 121.4 1152
55.3 61.4 1152
25.0 121.5 1153
23.1 113.3 1153
57.0 61.5 1153
36.7 117.0 1153
39.9 116.4 1153
55.2 61.4 1153
37.5 127.0 1153
50.0 36.3 1153
53.1 36.2 1153
1.3 103.9 1153
37.5 127.0 1153
55.2 61.4 1153
55.2 61.4 1153
51.2 58.3 1154
54.6 39.7 1154
10.7 123.0 1154
51.5 46.0 1154
31.9 117.3 1154
25.3 55.3 1154
55.2 61.4 1154
55.2 61.4 1154
-12.3 -66.2 1154
47.6 -122.3 1154
31.0 121.4 1154
54.8 61.3 1154
32.1 118.8 1154
55.2 61.4 1154
36.7 117.0 1155
40.0 -86.9 1155
23.5 121.0 1155
56.2 47.3 1155
23.5 121.0 1155
23.5 121.0 1155
13.8 100.5 1155
40.7 -74.2 1155
55.2 61.4 1155
56.3 44.0 1155
39.9 116.4 1155
25.0 121.5 1155
25.0 102.7 1155
55.3 61.4 1155
55.7 37.6 1155
31.0 121.4 1156
30.7 104.1 1156
57.0 41.0 1156
25.0 121.5 1156
11.0 77.0 1156
14.7 121.0 1156
45.5 -73.6 1156
24.1 120.7 1156
45.5 -73.6 1156
55.8 37.6 1156
55.2 61.4 1156
45.3 131.0 1157
55.0 82.9 1157
23.1 113.3 1157
36.7 117.0 1157
23.5 121.0 1157
17.4 78.5 1157
53.1 36.2 1157
45.5 -73.6 1157
14.6 121.0 1157
35.6 139.8 1158
55.7 37.6 1158
51.7 36.2 1158
55.2 61.4 1158
55.2 61.4 1158
51.2 58.3 1158
50.6 36.6 1158
48.7 38.1 1159
36.6 101.8 1159
44.5 34.2 1159
22.3 114.2 1159
36.7 117.0 1159
51.8 55.1 1159
40.7 109.8 1159
31.9 117.3 1159
50.6 36.6 1159
55.2 59.7 1159
55.2 61.4 1159
55.7 38.0 1159
55.2 61.4 1159
55.2 59.7 1159
55.2 61.4 1159
55.7 37.6 1160
23.5 121.0 1160
36.7 117.0 1160
22.6 120.3 1160
32.1 118.8 1160
22.5 114.1 1160
55.2 61.4 1160
55.7 37.6 1161
46.7 10.5 1161
59.9 30.3 1161
52.7 58.7 1161
1.3 103.9 1161
44.9 23.9 1162
51.5 -0.1 1162
50.5 30.5 1162
45.5 -73.6 1162
-34.1 150.8 1162
46.3 48.0 1162
31.0 121.4 1162
40.5 -74.2 1162
56.9 60.6 1162
55.0 73.4 1162
31.9 117.3 1162
51.5 46.0 1162
50.9 16.5 1162
55.2 61.4 1162
45.5 -73.6 1162
45.5 -73.6 1163
56.3 44.0 1163
36.7 117.0 1163
55.7 37.6 1163
56.9 35.9 1163
14.3 121.6 1163
51.5 46.0 1163
55.3 61.4 1163
32.8 -96.8 1163
30.3 120.2 1163
51.2 38.5 1163
37.8 -97.8 1163
55.7 37.6 1164
30.3 120.2 1164
36.7 117.0 1164
51.7 55.4 1164
55.8 37.6 1164
23.5 121.0 1164
45.8 126.7 1164
35.9 139.6 1164
23.5 121.0 1164
23.5 121.0 1164
22.5 114.1 1164
50.4 30.5 1164
23.5 121.0 1164
7.0 81.0 1165
51.8 55.1 1165
55.0 82.9 1165
41.0 75.0 1165
25.0 121.5 1165
51.7 36.2 1165
50.5 30.5 1165
55.8 37.6 1165
45.5 -73.6 1165
55.7 37.6 1165
31.0 121.4 1165
31.0 121.4 1165
35.6 139.8 1165
23.1 113.3 1165
51.5 -0.1 1166
51.7 55.4 1166
30.7 104.1 1166
23.5 121.0 1166
32.1 118.8 1166
-12.1 -77.1 1166
48.9 2.3 1166
-0.7 -75.3 1166
47.2 39.7 1166
37.5 121.4 1166
39.9 116.4 1166
55.2 61.4 1166
51.7 39.2 1167
37.8 -97.8 1167
54.2 37.6 1167
63.8 20.3 1167
36.7 117.0 1167
53.5 49.3 1167
23.5 121.0 1167
42.7 26.3 1167
53.2 50.1 1167
51.7 36.2 1167
28.2 113.1 1167
50.6 36.6 1167
23.5 121.0 1167
47.9 35.3 1168
49.8 30.1 1168
-6.8 39.3 1168
28.2 113.1 1168
23.1 120.2 1168
53.1 36.2 1168
50.4 30.5 1168
32.1 118.8 1168
32.1 118.8 1169
53.8 87.1 1169
47.1 8.2 1169
36.7 117.0 1169
50.5 30.5 1169
55.0 60.1 1169
46.3 48.0 1169
23.1 113.3 1169
47.1 37.5 1169
51.7 36.2 1169
40.7 -74.2 1169
50.4 30.5 1169
53.5 49.6 1170
55.2 61.4 1170
30.7 104.1 1170
48.5 35.0 1170
51.3 58.2 1170
30.3 120.2 1170
-23.5 -46.6 1170
58.5 31.3 1170
31.0 121.4 1170
55.3 61.4 1170
51.7 55.4 1171
51.7 39.2 1171
36.7 117.0 1171
23.1 113.3 1171
51.5 -0.2 1171
45.5 -73.6 1171
55.8 37.6 1171
23.1 113.3 1171
55.7 37.6 1171
30.3 120.2 1171
50.7 3.2 1171
54.2 37.6 1171
54.2 37.6 1171
37.8 -97.8 1171
39.1 117.2 1171
55.2 61.4 1171
50.6 36.6 1171
55.2 61.4 1171
53.2 48.5 1171
25.0 121.3 1172
51.8 55.1 1172
56.1 47.3 1172
51.7 55.4 1172
51.3 58.2 1172
30.3 -97.7 1172
24.8 121.0 1172
55.2 61.4 1172
22.5 114.1 1172
53.0 36.1 1172
55.2 61.4 1172
56.4 44.1 1172
50.6 36.6 1172
51.2 4.4 1172
47.5 19.1 1172
40.5 -74.2 1172
55.9 37.7 1172
51.7 36.2 1173
23.1 113.3 1173
36.7 117.0 1173
52.0 -0.7 1173
55.7 37.6 1173
46.3 48.0 1173
-19.8 -43.9 1173
30.3 120.2 1173
50.6 36.6 1173
55.8 37.6 1173
55.2 61.4 1173
51.3 58.2 1174
-37.8 145.0 1174
50.4 30.5 1174
37.5 127.0 1174
46.5 30.7 1174
51.5 -0.1 1174
55.8 37.6 1174
34.1 -118.3 1174
51.7 36.2 1174
37.5 127.0 1174
53.1 36.2 1174
-22.8 -43.2 1174
51.5 -0.1 1174
46.3 20.2 1174
45.5 -73.6 1174
39.9 115.3 1174
50.4 30.5 1175
23.5 121.0 1175
30.8 120.8 1175
51.5 -0.2 1175
-23.5 -46.6 1175
39.9 116.4 1175
53.2 50.1 1175
35.6 139.7 1175
52.4 4.9 1175
23.1 113.3 1175
9.3 122.9 1175
55.2 61.4 1175
55.2 61.4 1175
55.2 61.4 1175
36.7 117.0 1176
48.9 24.7 1176
34.8 113.7 1176
50.5 30.5 1176
51.2 58.3 1176
23.1 113.3 1176
24.9 67.1 1176
55.8 38.4 1176
51.7 36.2 1176
55.7 37.6 1176
34.8 137.9 1176
50.0 36.3 1176
32.8 -96.8 1176
37.5 121.4 1177
52.8 52.3 1177
36.7 117.0 1177
45.5 -73.6 1177
29.0 -95.5 1177
28.6 77.2 1177
50.4 30.5 1177
55.2 61.4 1177
51.5 -0.1 1177
44.9 33.8 1177
50.4 30.5 1177
54.2 45.2 1178
30.7 104.1 1178
51.8 55.1 1178
34.8 113.7 1178
50.6 8.7 1178
25.0 121.5 1178
55.2 61.4 1178
45.5 -73.6 1178
25.0 121.5 1178
55.2 61.4 1178
55.2 59.7 1178
45.3 -73.9 1178
45.3 -73.9 1179
49.6 25.6 1179
28.2 113.1 1179
51.2 58.3 1179
34.1 -118.3 1179
23.5 121.0 1179
53.0 36.1 1179
53.1 36.2 1179
23.1 113.3 1179
4.6 -74.1 1179
34.8 113.7 1179
55.2 61.4 1179
55.3 61.4 1179
51.8 55.1 1180
55.7 37.6 1180
34.8 113.7 1180
51.9 36.3 1180
56.9 60.6 1180
27.4 -82.5 1180
35.2 115.4 1180
23.1 113.3 1180
22.5 114.1 1180
41.0 29.0 1180
53.5 49.3 1180
55.2 61.4 1180
30.3 120.2 1180
55.8 37.6 1180
54.6 39.7 1181
51.8 55.1 1181
23.7 90.4 1181
34.1 -118.3 1181
53.2 50.1 1181
-18.9 -48.3 1181
23.5 121.0 1181
32.1 118.8 1181
51.7 39.2 1181
55.2 59.7 1181
23.5 121.0 1181
34.8 113.7 1182
54.6 39.7 1182
45.5 -73.6 1182
57.8 40.9 1182
59.2 11.4 1182
49.8 30.1 1182
51.7 36.2 1182
44.9 40.6 1182
53.0 -1.2 1182
31.9 117.3 1182
39.9 116.4 1182
55.3 61.4 1182
54.2 45.2 1182
37.5 127.0 1183
55.0 36.5 1183
45.5 -73.6 1183
33.4 -111.9 1183
53.9 27.6 1183
48.9 2.3 1183
22.5 114.1 1183
51.7 36.2 1183
45.5 -73.6 1183
55.9 37.4 1183
50.4 80.3 1183
55.8 37.6 1183
55.7 12.6 1184
36.7 117.0 1184
52.2 21.0 1184
40.3 -111.7 1184
49.8 24.0 1184
50.1 8.7 1184
37.5 121.4 1184
39.1 117.2 1184
31.0 121.4 1184
51.3 58.2 1185
51.7 55.4 1185
51.8 55.1 1185
48.9 2.3 1185
-34.6 -58.4 1185
55.0 82.9 1185
55.7 37.6 1185
55.8 37.6 1185
23.7 90.4 1186
30.3 120.2 1186
31.0 121.4 1186
56.0 43.1 1186
23.5 121.0 1186
40.5 -74.2 1186
52.7 58.7 1186
23.1 113.3 1186
55.7 12.6 1186
51.7 39.2 1186
35.6 140.1 1186
40.5 -74.2 1186
55.2 59.7 1186
55.5 47.5 1187
54.6 53.7 1187
48.9 2.3 1187
50.4 30.5 1187
30.7 104.1 1187
24.7 46.7 1187
23.5 121.0 1187
30.3 120.2 1187
55.8 37.6 1187
24.1 120.7 1187
53.5 49.3 1187
36.7 117.0 1187
32.1 118.8 1187
30.7 104.1 1188
14.6 121.0 1188
23.0 120.2 1188
53.0 36.1 1188
37.5 127.0 1188
23.1 113.3 1188
25.0 121.5 1188
55.2 61.4 1188
23.5 121.0 1188
23.5 121.0 1189
53.5 49.6 1189
51.8 55.1 1189
21.5 39.2 1189
36.7 117.0 1189
39.1 117.2 1189
51.1 17.0 1189
45.5 -73.6 1189
55.2 61.4 1189
45.5 -73.6 1190
55.7 37.6 1190
35.2 115.4 1190
23.1 113.3 1190
34.1 -118.3 1190
30.3 120.2 1190
39.9 116.4 1190
26.2 91.7 1190
50.4 30.5 1190
55.3 61.4 1190
51.7 39.2 1190
55.2 61.4 1190
50.0 36.3 1190
23.5 121.0 1190
53.2 45.0 1191
45.5 -73.6 1191
51.2 58.3 1191
50.6 36.6 1191
56.1 47.3 1191
41.4 -8.3 1191
39.0 -77.5 1191
-34.1 150.8 1191
51.8 55.1 1191
37.6 -77.6 1191
49.6 34.5 1192
52.8 52.3 1192
55.2 61.4 1192
54.9 43.3 1192
30.7 104.1 1192
56.9 60.6 1192
56.9 53.2 1192
23.1 113.3 1192
55.2 61.4 1192
34.8 113.7 1192
43.9 125.3 1192
51.5 -0.1 1192
51.2 58.3 1193
23.5 121.0 1193
37.5 127.0 1193
23.1 113.3 1193
23.1 113.3 1193
56.9 60.6 1193
48.9 2.3 1193
40.4 -80.6 1193
30.3 120.2 1193
24.1 120.7 1193
42.4 -71.1 1193
32.1 118.8 1193
36.7 117.0 1194
36.7 117.0 1194
23.1 113.3 1194
39.9 116.4 1194
53.0 36.1 1194
54.3 48.4 1194
24.9 118.6 1194
55.2 61.4 1194
55.2 61.4 1194
48.5 35.0 1194
55.2 61.4 1194
55.2 61.4 1194
55.2 61.4 1194
51.2 58.3 1195
51.2 58.3 1195
36.7 117.0 1195
45.5 -73.6 1195
55.7 37.6 1195
52.5 103.9 1195
41.0 29.0 1195
46.3 48.0 1195
35.2 115.4 1195
13.0 77.6 1195
23.1 113.3 1195
55.2 61.4 1195
36.7 117.0 1196
36.7 117.0 1196
54.6 39.7 1196
47.1 8.2 1196
30.3 120.2 1196
51.3 9.5 1196
45.3 -73.9 1196
55.2 61.4 1196
51.2 58.3 1197
56.0 92.9 1197
41.2 -73.2 1197
51.7 35.7 1197
43.5 43.6 1197
45.5 -73.6 1197
36.7 117.0 1197
23.5 121.0 1197
25.0 121.3 1197
32.1 118.8 1197
45.5 -73.6 1197
45.5 -73.6 1197
36.6 128.7 1197
45.5 -73.6 1198
53.8 91.3 1198
55.0 73.4 1198
42.0 43.5 1198
46.8 29.5 1198
25.0 121.5 1198
24.0 120.9 1198
48.9 2.3 1198
8.5 124.6 1198
55.7 37.6 1198
51.5 46.0 1198
23.5 121.0 1198
1.3 103.9 1198
39.9 116.4 1198
45.3 -73.9 1198
23.1 114.4 1198
31.0 121.4 1198
55.2 61.4 1198
55.7 37.6 1198
26.1 119.3 1199
48.0 37.9 1199
36.7 117.0 1199
51.8 55.1 1199
59.9 30.3 1199
43.9 -79.0 1199
39.9 116.4 1199
51.5 46.0 1199
39.9 116.4 1199
55.2 61.4 1199
37.5 121.4 1200
23.5 121.0 1200
59.9 30.3 1200
30.7 104.1 1200
51.5 -0.2 1200
53.4 59.0 1200
44.9 -93.3 1200
50.6 36.6 1200
50.4 30.5 1200
49.8 30.1 1200
53.1 36.2 1200
58.0 56.3 1200
40.5 -74.2 1200
39.9 116.4 1200
23.5 121.0 1200
55.2 61.4 1200
25.0 121.5 1200
37.5 127.0 1200
50.3 28.7 1201
23.5 121.0 1201
56.3 93.5 1201
50.6 36.6 1201
55.3 61.4 1201
55.2 61.4 1201
55.2 61.4 1201
30.7 104.1 1202
51.7 55.4 1202
26.1 119.3 1202
-26.2 28.1 1202
20.0 77.0 1202
47.5 19.1 1202
30.3 120.2 1202
59.6 30.1 1202
51.7 36.2 1202
34.1 -118.2 1202
55.3 61.4 1202
55.2 61.4 1202
51.3 9.5 1202
45.5 -73.6 1203
36.7 117.0 1203
39.6 -76.2 1203
55.7 37.6 1203
35.9 139.6 1203
23.1 113.3 1203
55.5 65.3 1203
24.1 120.7 1203
30.7 104.1 1203
30.6 114.3 1203
55.2 61.4 1203
55.3 61.4 1203
47.5 19.1 1203
23.5 121.0 1203
25.0 121.5 1203
51.8 55.1 1203
29.4 48.0 1203
32.1 118.8 1203
23.1 113.3 1204
23.1 113.3 1204
51.3 9.5 1204
23.5 121.0 1204
31.9 117.3 1204
24.6 120.8 1204
55.2 61.4 1204
22.8 108.3 1204
51.7 39.2 1204
53.5 48.9 1204
56.1 40.4 1205
51.2 58.3 1205
31.0 121.4 1205
34.3 108.9 1205
43.5 43.6 1205
52.8 55.8 1205
50.6 36.6 1205
26.1 119.3 1205
51.3 37.8 1205
32.9 -117.2 1205
25.0 121.5 1205
55.2 61.4 1205
55.3 61.4 1205
4.6 -74.1 1205
-17.3 -42.8 1205
36.7 117.0 1206
28.5 119.9 1206
22.6 120.4 1206
53.2 48.5 1206
42.7 -84.6 1206
52.7 58.7 1206
53.2 50.1 1206
23.1 113.3 1206
45.0 39.0 1206
45.5 -73.6 1206
22.5 114.1 1206
53.6 10.0 1206
50.4 83.5 1206
45.5 -73.6 1207
45.5 131.9 1207
23.0 120.2 1207
39.9 116.4 1207
41.9 -87.6 1207
50.4 80.3 1207
45.5 -73.6 1208
25.0 121.5 1208
48.9 2.3 1208
46.3 48.0 1208
24.5 118.1 1208
51.5 46.1 1208
50.6 36.6 1208
50.6 36.6 1208
55.2 61.4 1208
55.2 61.4 1208
30.3 120.2 1208
25.0 121.5 1208
55.2 61.4 1208
29.9 121.5 1209
36.7 117.0 1209
23.5 121.0 1209
30.7 104.1 1209
46.0 25.0 1209
25.0 121.3 1209
14.4 100.6 1209
49.8 30.1 1209
54.3 48.4 1209
22.2 114.3 1209
32.1 118.8 1209
32.1 118.8 1209
32.8 -96.8 1210
54.8 56.0 1210
39.0 -77.5 1210
51.2 58.3 1210
22.3 114.2 1210
46.0 25.0 1210
30.7 104.1 1210
36.7 117.0 1210
19.4 -99.1 1210
10.4 123.9 1210
39.9 116.4 1210
37.5 127.0 1210
23.5 121.0 1210
23.1 113.3 1210
25.0 121.5 1210
55.8 37.6 1210
40.4 -3.7 1210
49.6 25.6 1210
55.2 59.7 1210
25.0 121.5 1210
50.0 36.3 1210
30.3 120.2 1210
55.2 61.4 1210
36.7 117.0 1211
49.4 32.1 1211
51.5 -0.1 1211
48.3 38.1 1211
54.9 43.3 1211
47.2 39.7 1211
22.8 121.2 1211
41.2 -73.2 1211
41.0 64.0 1211
45.5 -73.6 1211
51.2 58.3 1212
51.8 55.1 1212
23.1 113.3 1212
36.7 117.0 1212
-36.8 -73.0 1212
22.8 108.3 1212
23.7 90.4 1212
23.5 121.0 1212
45.5 -73.6 1212
45.0 39.0 1212
45.5 -73.6 1212
32.1 118.8 1212
55.2 61.4 1212
43.2 -123.4 1213
37.5 127.0 1213
38.1 46.3 1213
34.1 -118.3 1213
-6.2 106.8 1213
55.7 37.6 1213
45.0 39.0 1213
54.3 48.4 1213
54.3 48.4 1213
54.9 61.4 1213
22.8 108.3 1213
45.5 -73.6 1214
25.0 121.5 1214
23.1 113.3 1214
45.1 7.7 1214
30.4 -90.9 1214
54.3 48.4 1214
39.9 116.4 1214
32.1 118.8 1214
55.3 61.4 1214
55.7 37.6 1215
13.8 100.5 1215
30.2 121.2 1215
-18.4 -49.2 1215
51.2 58.3 1215
25.0 121.5 1215
51.5 -0.2 1215
55.2 61.4 1215
55.2 61.4 1215
54.8 32.0 1215
23.5 121.0 1215
37.5 127.0 1216
51.3 37.8 1216
56.1 47.3 1216
50.0 36.3 1216
23.1 113.3 1216
51.7 55.4 1216
30.7 104.1 1216
48.7 44.5 1216
23.5 121.0 1216
20.0 110.3 1216
50.6 36.6 1216
55.7 37.6 1216
23.5 121.0 1216
45.5 -73.6 1216
53.1 46.6 1217
48.0 37.8 1217
48.9 2.3 1217
41.8 -91.6 1217
55.3 86.1 1217
55.8 37.6 1217
25.0 121.3 1217
23.5 121.0 1217
45.5 -73.6 1217
53.2 50.1 1218
51.7 36.2 1218
51.2 58.3 1218
51.8 107.6 1218
48.9 2.3 1218
58.0 56.3 1218
39.1 117.2 1218
48.9 2.3 1218
1.3 103.9 1218
37.5 127.0 1218
51.7 39.2 1218
55.2 61.4 1218
53.2 50.1 1218
29.4 48.0 1218
50.4 30.5 1218
45.5 -73.6 1218
41.2 -73.2 1218
39.9 116.4 1218
49.8 24.0 1219
30.7 104.1 1219
45.9 -119.7 1219
25.0 121.5 1219
55.0 60.1 1219
51.8 107.6 1219
50.4 30.5 1219
36.1 -95.3 1219
31.9 117.3 1219
55.3 61.4 1219
22.5 114.1 1220
55.0 50.1 1220
47.9 16.2 1220
36.7 117.0 1220
30.3 120.2 1220
24.1 120.7 1220
53.5 49.6 1220
41.1 -74.0 1220
54.3 48.4 1220
22.6 120.4 1220
22.3 114.2 1220
37.5 127.0 1220
51.7 36.2 1220
-0.2 -78.5 1221
51.7 55.4 1221
51.7 55.4 1221
49.4 32.1 1221
53.1 36.2 1221
55.8 37.6 1221
30.3 120.2 1221
55.0 60.1 1221
51.5 -0.1 1221
55.2 59.7 1221
49.6 34.5 1222
45.5 -73.6 1222
54.6 39.7 1222
58.1 52.7 1222
53.5 49.6 1222
23.5 121.0 1222
50.6 36.6 1222
52.7 6.2 1222
55.2 61.4 1222
53.9 86.7 1222
55.2 61.4 1222
24.9 118.6 1222
54.3 48.4 1222
48.5 35.0 1223
34.1 -118.3 1223
37.8 -97.8 1223
36.7 117.0 1223
45.5 -73.6 1223
28.6 77.2 1223
53.4 83.8 1223
45.5 -73.6 1223
36.1 103.8 1223
45.5 -73.6 1223
23.5 121.0 1223
55.9 37.7 1223
53.6 56.0 1223
20.0 77.0 1224
23.5 121.0 1224
28.2 113.1 1224
53.7 91.4 1224
22.3 114.2 1224
53.1 36.2 1224
55.7 37.6 1224
55.3 61.4 1224
39.9 116.4 1224
50.6 36.6 1224
23.5 121.0 1225
49.4 32.1 1225
32.1 118.8 1225
49.6 25.6 1225
49.8 30.1 1225
59.6 33.5 1225
23.0 120.2 1225
23.1 113.3 1225
23.5 121.0 1225
23.0 120.2 1225
55.2 61.4 1225
51.7 55.4 1226
49.6 34.5 1226
23.5 121.0 1226
35.4 139.6 1226
51.5 46.0 1226
-34.5 -58.7 1226
49.4 32.1 1226
54.3 48.4 1226
39.9 116.4 1226
55.2 59.7 1226
52.5 103.9 1226
55.2 61.4 1226
48.9 2.3 1226
4.6 -74.1 1226
55.2 61.4 1226
56.3 44.0 1227
25.0 121.5 1227
40.5 -74.2 1227
23.5 121.0 1227
55.7 37.6 1227
25.0 121.3 1227
51.9 33.5 1227
55.2 61.4 1227
55.2 61.4 1227
50.6 36.6 1227
55.3 86.1 1227
14.6 121.0 1227
50.6 36.6 1227
31.0 121.4 1227
36.7 117.0 1228
57.6 39.9 1228
51.8 55.1 1228
25.0 121.5 1228
34.0 -117.9 1228
23.1 113.3 1228
22.3 114.2 1228
55.2 61.4 1228
55.7 37.6 1228
51.7 36.2 1228
56.1 47.3 1229
30.7 104.1 1229
55.8 -4.3 1229
23.5 121.0 1229
50.6 -111.9 1229
47.9 106.9 1229
37.5 127.0 1229
22.8 108.3 1229
39.9 116.4 1229
55.2 59.7 1229
56.2 47.3 1229
55.2 61.4 1229
47.3 19.2 1230
35.6 139.8 1230
59.6 33.5 1230
46.3 48.0 1230
38.0 -122.0 1230
30.7 104.1 1230
44.0 43.1 1230
51.9 36.3 1230
39.1 117.2 1230
54.3 48.4 1230
55.7 37.6 1230
56.3 44.0 1230
31.0 121.4 1230
55.2 61.4 1230
23.5 121.0 1231
31.0 121.4 1231
54.6 39.7 1231
36.7 117.0 1231
24.1 120.7 1231
55.7 37.6 1231
23.5 121.0 1232
45.5 -73.6 1232
55.7 37.6 1232
41.9 12.5 1232
52.7 58.7 1232
35.4 136.7 1232
43.7 -79.5 1232
50.6 36.6 1232
23.5 121.0 1232
4.6 -74.1 1232
1.3 103.9 1232
50.4 30.5 1232
25.3 55.3 1232
55.2 61.4 1232
56.0 37.9 1232
31.0 121.4 1232
55.2 61.4 1232
55.7 37.6 1233
45.9 -119.7 1233
48.9 2.3 1233
31.0 121.4 1233
7.1 125.6 1233
30.3 120.2 1233
55.7 37.6 1233
22.6 120.4 1233
-12.3 -66.2 1233
21.5 39.2 1233
56.9 35.9 1233
23.5 121.0 1233
23.5 121.0 1233
51.5 -0.2 1234
23.5 121.0 1234
63.8 20.3 1234
50.6 36.6 1234
25.0 121.5 1234
24.9 118.6 1234
51.7 39.2 1234
56.3 44.0 1234
55.4 43.8 1235
55.8 -4.3 1235
45.5 -73.6 1235
53.0 36.1 1235
50.4 30.5 1235
23.5 121.0 1235
23.1 113.3 1235
45.5 -73.6 1235
47.2 39.7 1235
48.9 2.3 1235
59.4 56.8 1235
25.0 121.5 1235
51.9 36.3 1235
55.2 61.4 1235
59.4 28.2 1235
40.7 109.8 1235
45.3 -73.9 1235
36.7 117.0 1236
36.1 140.1 1236
23.5 121.0 1236
53.2 50.1 1236
51.2 58.3 1236
37.5 127.0 1236
58.3 59.8 1236
54.5 37.1 1236
46.3 48.0 1236
54.3 49.6 1236
23.5 121.0 1236
49.4 32.1 1236
54.3 48.4 1236
34.7 113.5 1236
54.3 48.4 1236
30.1 121.1 1237
51.5 -0.5 1237
37.5 127.0 1237
36.7 117.0 1237
51.8 55.1 1237
46.3 48.0 1237
45.0 39.0 1237
53.0 36.1 1237
35.4 139.6 1237
20.0 110.3 1237
25.0 121.5 1237
49.6 34.5 1238
28.2 113.1 1238
57.0 25.0 1238
36.7 117.0 1238
34.0 -117.9 1238
53.0 36.1 1238
41.0 20.0 1238
14.6 121.1 1238
54.3 48.4 1238
25.0 121.5 1238
31.0 121.4 1238
-22.8 -43.2 1238
55.2 61.4 1238
23.0 120.2 1238
55.2 61.4 1238
55.7 37.6 1238
57.0 24.1 1239
50.6 36.6 1239
50.5 30.5 1239
23.1 113.3 1239
25.0 121.5 1239
14.2 121.5 1239
22.6 88.4 1239
23.5 121.0 1239
45.5 -73.6 1239
41.5 -81.5 1239
-27.2 -48.5 1239
55.2 61.4 1239
32.1 118.8 1239
55.2 61.4 1239
34.8 113.7 1239
48.5 32.3 1240
57.2 65.5 1240
53.5 49.3 1240
30.8 120.8 1240
32.1 118.8 1240
52.8 52.3 1240
46.3 48.0 1240
23.5 121.0 1240
23.5 121.0 1240
25.0 121.3 1240
55.7 37.6 1240
42.8 -106.4 1240
14.6 121.0 1240
55.3 61.4 1240
55.2 61.4 1240
45.3 -73.9 1240
36.1 103.8 1241
36.7 117.0 1241
53.0 36.1 1241
33.5 -84.2 1241
36.7 117.0 1241
55.2 59.7 1241
-34.6 -58.4 1241
22.6 110.2 1241
30.3 120.2 1242
44.5 34.2 1242
54.6 39.7 1242
49.8 24.0 1242
37.5 127.0 1242
41.0 64.0 1242
-12.3 -66.2 1242
1.3 103.9 1242
30.3 120.2 1242
41.7 44.8 1243
30.3 -97.7 1243
36.7 117.0 1243
36.7 117.0 1243
-18.9 -48.3 1243
48.9 2.3 1243
25.0 121.5 1243
25.0 121.5 1243
60.2 60.0 1243
55.4 43.8 1243
14.6 121.0 1243
55.7 37.6 1243
23.5 121.0 1244
34.7 113.5 1244
51.7 39.2 1244
41.0 75.0 1244
40.4 -80.0 1244
48.0 37.8 1244
55.2 61.4 1244
50.4 30.5 1244
45.5 -73.6 1244
54.3 48.4 1244
36.1 103.8 1244
50.6 36.6 1245
51.3 58.2 1245
57.8 40.9 1245
50.4 30.5 1245
20.2 85.8 1245
45.5 -73.6 1246
30.3 120.2 1246
50.6 36.6 1246
26.1 119.3 1246
54.6 39.7 1246
-25.4 -49.3 1246
45.5 -73.6 1246
30.1 31.3 1246
34.8 113.7 1246
48.9 2.3 1246
52.2 48.0 1246
34.8 113.7 1246
25.0 121.5 1246
45.0 34.1 1246
28.2 113.1 1247
55.8 -4.3 1247
23.1 113.3 1247
23.5 121.0 1247
55.0 73.4 1247
53.3 34.4 1247
34.0 -117.9 1247
-22.8 -43.2 1247
37.5 127.0 1247
37.5 127.0 1247
23.5 121.0 1247
54.7 20.5 1247
55.7 37.9 1247
54.3 48.4 1247
17.4 78.5 1247
17.4 78.5 1247
25.0 121.5 1247
31.0 121.4 1247
31.0 121.4 1247
55.2 61.4 1247
50.6 36.6 1248
56.2 47.3 1248
30.7 104.1 1248
23.5 121.0 1248
50.6 36.6 1248
-34.4 -58.6 1248
34.1 -118.3 1248
52.4 4.9 1248
35.6 139.8 1248
34.1 -118.3 1248
50.0 36.3 1248
55.2 61.4 1248
-25.4 -49.3 1248
42.0 -87.7 1248
54.3 48.4 1248
34.8 113.7 1248
32.1 118.8 1249
51.7 36.2 1249
35.2 115.4 1249
29.9 121.5 1249
55.8 37.6 1249
23.5 121.0 1249
51.7 39.2 1249
40.4 -3.7 1249
39.9 116.4 1249
45.0 41.1 1249
45.5 -73.6 1249
55.2 61.4 1249
56.0 37.2 1249
36.7 117.0 1250
51.7 55.4 1250
17.4 78.5 1250
49.8 18.3 1250
23.5 121.0 1250
51.6 46.1 1250
55.0 82.9 1250
54.6 53.7 1250
45.5 9.2 1250
50.4 30.5 1251
23.5 121.0 1251
46.3 48.0 1251
34.4 -118.4 1251
55.7 37.6 1251
23.1 113.3 1251
55.7 37.6 1251
48.9 2.3 1251
50.9 4.4 1251
51.6 40.1 1251
55.2 59.7 1251
54.8 61.3 1251
41.3 -104.7 1251
31.0 121.4 1252
30.3 120.2 1252
51.7 55.4 1252
28.2 113.1 1252
-26.2 28.1 1252
58.0 56.3 1252
23.5 121.0 1252
22.6 120.4 1252
50.4 30.5 1252
45.5 -73.6 1252
34.7 135.8 1252
54.3 48.4 1252
31.0 121.4 1252
55.2 61.4 1252
55.8 -4.3 1253
39.9 116.4 1253
47.2 39.7 1253
25.0 121.5 1253
23.1 113.3 1253
55.7 37.6 1253
19.0 72.8 1253
45.5 -73.6 1253
56.2 47.3 1253
52.3 77.0 1253
56.1 47.5 1254
55.0 73.4 1254
51.7 36.2 1254
48.9 2.3 1254
50.6 36.6 1254
51.7 55.4 1254
56.3 93.5 1254
30.7 104.1 1254
48.9 2.3 1254
42.9 -78.8 1254
23.1 113.3 1254
54.3 48.4 1254
30.3 120.2 1254
55.2 61.4 1254
35.6 139.7 1255
56.2 47.3 1255
33.7 -84.4 1255
48.5 32.3 1255
54.8 56.0 1255
29.0 -111.7 1255
23.1 113.3 1255
55.2 59.7 1255
23.5 121.0 1255
51.2 58.3 1256
50.6 36.6 1256
55.0 73.4 1256
53.0 36.1 1256
34.8 113.7 1256
51.8 55.1 1256
10.5 -66.9 1256
55.4 43.8 1256
55.0 82.9 1256
33.4 -112.0 1256
55.2 61.4 1256
30.3 120.2 1256
43.0 44.7 1256
25.0 121.5 1256
50.4 30.5 1256
50.1 8.7 1257
53.0 36.1 1257
29.0 -111.7 1257
50.7 3.2 1257
56.0 37.2 1257
50.5 30.5 1257
55.3 61.4 1257
56.0 24.0 1258
51.7 55.4 1258
52.4 5.0 1258
41.0 75.0 1258
47.2 39.7 1258
52.4 4.9 1258
45.0 41.1 1258
55.7 37.6 1258
32.1 118.8 1258
32.1 118.8 1258
45.0 42.0 1258
22.3 114.2 1258
53.6 9.9 1258
55.2 61.4 1258
31.0 121.4 1258
39.9 116.4 1259
49.0 31.4 1259
51.7 55.4 1259
46.3 -96.7 1259
55.7 37.6 1259
55.7 37.6 1259
56.9 35.9 1259
55.7 37.6 1259
22.6 88.4 1259
55.4 43.8 1259
55.3 61.4 1259
56.3 44.0 1259
55.2 61.4 1259
31.0 121.4 1259
55.2 61.4 1259
30.3 120.2 1259
55.7 37.6 1259
21.2 79.1 1259
56.0 37.2 1259
41.7 123.2 1259
54.6 39.7 1260
36.7 117.0 1260
53.0 36.1 1260
53.1 45.4 1260
52.8 52.3 1260
34.0 -117.9 1260
34.7 113.5 1260
51.7 39.2 1260
23.5 121.0 1260
23.5 121.0 1260
32.1 118.8 1260
23.5 121.0 1260
56.2 47.3 1260
55.2 61.4 1260
51.7 39.2 1260
45.5 -73.6 1260
45.0 34.1 1260
22.3 114.2 1260
51.7 36.2 1260
14.6 121.0 1261
42.0 -87.7 1261
24.9 118.6 1261
49.6 34.5 1261
55.7 37.6 1261
55.2 61.4 1261
53.4 83.8 1261
53.1 36.2 1262
51.7 36.2 1262
29.9 121.5 1262
25.0 121.5 1262
14.9 121.0 1262
50.5 30.5 1262
56.9 60.6 1262
48.9 2.3 1262
49.8 30.1 1262
55.2 11.8 1262
55.2 61.4 1262
32.1 118.8 1262
51.7 55.4 1263
-22.8 -47.2 1263
29.9 121.5 1263
55.9 37.8 1263
50.6 36.6 1263
34.8 -95.6 1263
25.0 121.5 1263
49.8 30.1 1263
55.3 61.4 1263
-7.8 -35.7 1263
55.2 61.4 1263
55.2 61.4 1263
24.1 120.7 1263
55.3 61.4 1263
51.8 55.1 1264
53.0 36.1 1264
52.8 52.3 1264
31.0 121.4 1264
51.7 55.4 1264
55.7 37.6 1264
25.0 121.5 1264
20.2 85.8 1264
50.9 4.4 1264
39.0 -77.5 1264
51.5 46.1 1264
31.9 117.3 1264
51.9 36.3 1264
30.3 120.2 1264
35.7 51.4 1264
46.3 48.0 1264
19.4 -99.1 1264
54.3 48.4 1264
23.1 114.4 1264
51.8 55.1 1265
48.1 39.9 1265
57.9 60.0 1265
43.1 12.1 1265
57.1 24.3 1265
30.0 70.0 1265
37.5 127.0 1265
-34.1 150.8 1265
24.1 120.7 1265
26.6 106.7 1265
50.9 34.8 1265
22.3 114.2 1265
65.0 77.7 1265
23.5 121.0 1265
22.5 114.1 1266
45.3 -73.9 1266
52.8 52.3 1266
19.7 -101.1 1266
59.3 18.1 1266
24.1 120.7 1266
23.5 121.0 1266
14.6 121.1 1266
37.5 41.0 1266
50.4 30.5 1266
39.9 116.4 1266
22.6 120.4 1266
40.2 44.5 1266
55.2 61.4 1266
31.8 120.0 1266
55.2 61.4 1266
-6.2 106.8 1266
55.2 61.4 1266
51.7 39.2 1266
34.0 -117.9 1266
53.0 36.1 1267
48.9 24.7 1267
51.6 -0.2 1267
55.7 37.6 1267
50.6 36.6 1267
20.0 77.0 1267
22.3 114.2 1267
32.1 118.8 1267
55.2 61.4 1267
31.0 121.4 1267
56.4 41.3 1267
52.8 104.8 1267
45.5 -73.6 1267
47.8 35.2 1267
-12.3 -66.2 1267
55.2 61.4 1267
48.0 37.8 1268
39.9 116.4 1268
23.5 121.0 1268
53.5 49.3 1268
32.1 118.8 1268
51.7 39.2 1268
-34.6 -58.5 1268
37.5 -122.2 1268
49.2 -122.9 1268
55.7 37.6 1268
55.2 61.4 1268
34.0 -118.3 1268
51.5 -0.1 1269
29.8 -95.4 1269
55.7 37.6 1269
53.0 36.1 1269
48.9 2.3 1269
25.0 121.5 1269
23.5 121.0 1269
41.0 29.0 1269
39.1 117.2 1269
23.5 121.0 1269
55.3 61.4 1269
55.2 61.4 1269
55.2 61.4 1269
53.5 49.3 1270
25.0 121.5 1270
-28.5 -49.0 1270
55.8 37.6 1270
23.5 121.0 1270
51.8 55.1 1270
57.8 40.9 1270
30.3 120.2 1270
55.7 37.6 1270
32.1 118.8 1270
46.3 48.0 1270
24.1 120.7 1270
50.4 30.5 1270
55.2 61.4 1270
23.5 121.0 1270
54.3 48.4 1270
32.1 118.8 1270
37.5 -122.4 1271
31.0 121.4 1271
37.8 -97.8 1271
51.5 46.0 1271
57.8 40.9 1271
-37.8 144.9 1271
39.9 116.4 1271
50.4 30.5 1271
24.1 120.7 1271
23.1 113.3 1271
36.6 128.7 1271
49.7 6.6 1271
31.0 121.4 1271
42.7 23.3 1271
54.3 48.4 1271
32.1 118.8 1271
32.1 118.8 1271
55.2 61.4 1271
37.8 128.9 1271
22.3 114.2 1272
23.0 120.2 1272
51.2 58.3 1272
30.7 104.1 1272
30.3 120.2 1272
25.0 121.5 1272
43.5 43.6 1272
45.5 -73.6 1272
31.9 34.8 1272
45.5 -73.6 1272
43.9 125.3 1272
-36.7 -73.1 1272
20.6 -87.1 1272
45.7 9.7 1272
55.2 61.4 1272
32.1 118.8 1272
56.9 60.6 1272
32.1 118.8 1272
55.9 48.3 1273
23.5 121.0 1273
34.1 -118.3 1273
55.7 37.6 1273
37.7 -84.6 1273
23.5 121.0 1273
40.0 45.0 1273
55.2 61.4 1273
32.1 118.8 1273
55.2 61.4 1273
55.8 37.6 1273
23.0 120.2 1273
55.0 60.4 1273
55.3 61.4 1273
37.8 -97.8 1274
51.7 36.2 1274
51.5 -0.2 1274
51.5 -0.2 1274
55.2 61.4 1274
53.1 36.2 1274
51.5 -0.1 1274
54.3 48.4 1274
50.4 30.5 1274
23.1 113.3 1274
55.7 37.6 1274
-12.3 -66.2 1274
24.1 120.7 1274
32.1 118.8 1274
35.0 136.9 1275
36.7 117.0 1275
43.6 -79.4 1275
51.7 39.2 1275
31.9 34.8 1275
48.9 2.3 1275
55.7 37.6 1275
51.5 -0.1 1275
23.5 121.0 1275
49.4 32.1 1275
45.5 -73.6 1276
23.7 90.4 1276
50.4 30.5 1276
51.8 55.1 1276
51.2 58.3 1276
30.3 120.2 1276
59.9 30.3 1276
33.4 -112.0 1276
55.2 61.4 1276
55.2 61.4 1276
45.3 -73.9 1276
54.3 48.4 1276
45.5 -73.6 1276
56.4 37.5 1277
53.5 49.3 1277
51.7 55.4 1277
57.8 40.9 1277
55.7 37.6 1277
54.3 48.4 1277
13.8 100.5 1277
40.7 109.8 1277
37.5 127.0 1277
44.6 33.5 1277
36.7 117.0 1277
55.0 50.1 1277
24.1 120.7 1277
32.1 118.8 1277
56.9 60.6 1277
31.0 121.4 1277
23.5 121.0 1277
51.7 36.2 1277
55.7 37.6 1278
53.0 36.1 1278
48.9 2.3 1278
55.8 37.6 1278
55.7 37.6 1278
49.4 32.1 1278
49.3 -123.1 1278
22.6 120.4 1278
48.5 35.0 1278
23.5 121.0 1278
55.2 61.4 1278
32.1 118.8 1278
45.5 -73.6 1278
45.5 -73.6 1278
53.5 49.3 1278
55.7 84.9 1278
55.2 61.4 1278
59.4 13.5 1279
52.8 52.3 1279
51.7 55.4 1279
31.0 121.4 1279
57.8 40.9 1279
58.6 49.7 1279
54.6 39.7 1279
55.2 61.4 1279
54.6 39.7 1279
55.2 61.4 1279
38.7 -77.2 1280
19.7 -101.1 1280
25.0 121.5 1280
59.4 13.5 1280
56.9 60.6 1280
22.3 114.2 1280
51.7 55.4 1281
-6.2 106.8 1281
36.7 117.0 1281
42.7 23.3 1281
37.5 127.0 1281
23.5 121.0 1281
39.8 -105.0 1281
34.1 -118.3 1281
50.4 30.5 1281
50.4 30.5 1281
55.3 61.4 1281
54.3 48.4 1281
54.6 39.7 1281
55.0 73.4 1282
56.5 85.0 1282
14.6 121.0 1282
52.4 4.9 1282
54.9 43.3 1282
46.3 48.0 1282
39.9 116.4 1282
30.7 104.1 1282
50.4 30.5 1282
23.5 121.0 1282
55.3 61.4 1282
54.3 48.4 1282
36.6 128.7 1282
32.1 118.8 1282
40.2 44.5 1282
50.4 30.5 1282
48.9 2.3 1283
54.7 25.3 1283
20.2 85.8 1283
25.0 121.5 1283
25.0 121.5 1283
37.8 -97.8 1283
50.4 30.5 1283
28.2 113.1 1283
30.3 120.2 1283
41.1 14.8 1283
50.4 30.5 1283
48.9 2.3 1284
23.5 121.0 1284
52.4 4.9 1284
45.5 -73.6 1284
50.4 30.5 1284
-16.5 -68.1 1284
30.3 120.2 1284
51.5 -0.1 1284
51.5 46.0 1284
55.2 61.4 1284
56.1 47.3 1284
24.1 120.7 1284
50.4 80.3 1284
13.8 100.5 1285
53.2 45.0 1285
52.2 21.0 1285
36.7 117.0 1285
55.3 61.4 1285
55.2 61.4 1285
51.2 58.3 1286
58.1 52.7 1286
56.2 47.3 1286
23.7 90.4 1286
51.3 9.5 1286
56.3 44.0 1286
55.7 37.6 1286
59.4 13.5 1286
55.2 61.4 1286
55.8 37.6 1286
46.1 -73.9 1287
37.5 121.4 1287
51.7 55.4 1287
23.5 121.0 1287
23.5 121.0 1287
23.0 120.2 1287
54.2 45.2 1287
39.9 116.4 1287
52.2 48.0 1287
48.7 44.5 1287
54.6 39.7 1287
55.3 61.4 1287
49.2 31.9 1288
24.1 120.7 1288
34.8 113.7 1288
25.0 121.5 1288
50.4 30.5 1288
55.2 61.4 1288
56.8 56.4 1288
50.4 30.5 1288
56.8 53.2 1288
14.6 121.0 1288
50.4 30.5 1288
55.2 61.4 1288
25.0 121.5 1289
52.8 52.3 1289
57.8 40.9 1289
39.9 116.4 1289
55.5 65.3 1289
37.3 -121.9 1289
22.5 114.1 1289
23.5 121.0 1289
54.3 48.4 1289
19.7 -101.1 1290
23.5 121.0 1290
48.5 35.0 1290
-25.7 28.2 1290
48.5 35.0 1290
38.7 -77.2 1290
23.1 113.3 1290
50.5 30.5 1290
23.1 113.3 1290
45.5 -73.6 1290
55.2 61.4 1290
55.2 61.4 1290
40.0 45.0 1290
55.2 61.4 1290
36.0 139.6 1291
51.2 58.3 1291
47.3 39.9 1291
53.8 38.1 1291
37.5 127.0 1291
23.5 121.0 1291
46.7 32.6 1291
51.5 -0.1 1291
56.9 35.9 1291
43.3 13.0 1291
40.5 47.5 1291
45.5 -73.6 1292
48.9 2.3 1292
32.1 118.8 1292
28.5 77.0 1292
22.8 108.3 1292
53.2 50.1 1292
56.9 35.9 1292
52.0 47.8 1292
-20.5 -47.4 1292
51.7 39.2 1292
36.7 117.0 1293
22.5 114.1 1293
37.8 -97.8 1293
23.1 113.3 1293
51.3 9.5 1293
29.0 -111.7 1293
41.0 75.0 1293
31.9 117.3 1293
48.5 32.3 1293
23.5 121.0 1293
50.3 28.7 1293
31.5 34.8 1293
45.5 -73.6 1293
-20.8 -47.6 1294
55.7 37.6 1294
23.1 113.3 1294
51.8 107.6 1294
46.3 48.0 1294
35.1 136.7 1294
45.0 41.1 1294
25.0 121.5 1294
24.9 118.6 1294
23.1 113.3 1294
42.0 -87.7 1294
52.6 19.7 1294
45.5 -73.6 1294
23.1 113.3 1294
49.4 32.1 1294
55.7 37.6 1294
49.4 27.0 1294
54.8 83.1 1294
37.5 126.7 1294
39.9 116.4 1294
34.0 -117.9 1294
45.5 -73.6 1294
55.2 61.4 1294
37.5 127.0 1294
46.5 30.7 1295
55.7 37.6 1295
40.4 -3.7 1295
50.4 30.5 1295
51.3 37.8 1295
53.8 87.1 1295
43.2 -77.7 1295
55.2 61.4 1295
55.2 61.4 1295
56.9 60.6 1295
55.2 61.4 1295
25.0 121.5 1296
40.7 109.8 1296
54.7 25.3 1296
51.7 55.4 1296
-0.2 -78.5 1296
22.3 114.2 1296
39.9 116.4 1296
36.6 128.7 1296
-22.9 -43.2 1296
51.7 36.2 1296
25.0 121.5 1296
38.5 106.3 1296
25.1 121.4 1296
25.0 121.5 1296
45.3 -73.9 1296
40.5 -74.2 1296
51.7 55.4 1297
48.9 36.3 1297
55.7 37.6 1297
53.4 59.0 1297
-22.8 -43.2 1297
57.8 40.9 1297
54.2 37.6 1297
-33.4 -70.7 1297
58.5 31.3 1297
30.3 120.2 1297
23.5 121.0 1297
23.0 120.2 1297
34.7 -86.6 1297
55.2 61.4 1297
40.2 44.5 1297
25.0 121.5 1298
30.3 120.2 1298
53.1 36.2 1298
36.7 117.0 1298
55.7 37.6 1298
23.5 121.0 1298
17.4 78.5 1298
32.0 -5.0 1298
23.1 113.3 1298
20.0 77.0 1298
55.4 43.8 1298
24.5 118.1 1298
56.9 53.2 1298
23.5 121.0 1298
42.0 21.4 1298
55.7 37.6 1298
45.5 -73.6 1298
41.0 64.0 1298
34.8 113.7 1299
50.0 36.3 1299
48.9 2.3 1299
25.0 121.5 1299
23.5 121.0 1299
55.9 26.5 1299
25.0 121.5 1299
50.5 30.5 1299
52.8 52.3 1299
56.1 47.5 1299
23.5 121.0 1299
23.5 121.0 1299
50.6 36.6 1299
55.2 61.4 1299
45.5 -73.6 1299
55.2 61.4 1299
22.6 120.4 1299
30.3 120.2 1299
54.3 48.4 1299
51.7 36.2 1300
50.9 34.8 1300
28.2 113.1 1300
20.0 77.0 1300
51.3 58.2 1300
30.3 120.2 1300
55.2 61.4 1300
55.3 61.4 1300
55.2 59.7 1300
43.1 12.1 1300
31.0 121.4 1300
24.9 118.6 1300
51.5 -0.1 1301
55.8 37.6 1301
48.6 39.3 1301
53.1 36.2 1301
33.6 -112.1 1301
55.2 61.4 1301
52.2 21.0 1301
45.5 -73.6 1301
23.0 113.1 1301
25.0 121.5 1301
23.1 113.3 1301
55.9 37.8 1301
30.9 -89.9 1301
52.8 52.3 1302
51.7 36.2 1302
25.1 121.7 1302
34.8 113.7 1302
29.0 -111.7 1302
55.7 37.6 1302
35.6 139.7 1302
45.5 -73.6 1302
43.1 12.1 1302
54.3 48.4 1302
55.3 61.4 1302
45.5 -73.6 1302
55.2 61.4 1302
54.3 48.4 1302
49.4 32.1 1302
55.3 61.4 1302
32.1 118.8 1302
31.0 121.4 1303
45.5 -73.6 1303
46.0 25.0 1303
40.5 -74.2 1303
50.4 30.5 1303
50.6 36.6 1303
45.5 -73.6 1303
45.5 -73.6 1303
55.7 37.6 1303
36.1 103.8 1303
55.2 61.4 1303
-26.2 28.1 1303
55.2 61.4 1304
34.1 -118.2 1304
30.3 120.2 1304
29.0 -111.7 1304
46.3 48.0 1304
23.5 121.0 1304
45.5 -73.6 1304
19.4 -99.1 1304
56.0 37.9 1304
24.6 120.8 1304
22.3 114.2 1304
39.9 116.4 1305
53.6 56.0 1305
23.1 113.3 1305
36.7 117.0 1305
22.6 120.4 1305
49.4 32.1 1305
50.5 30.5 1305
30.3 120.2 1305
22.3 114.2 1305
48.3 38.1 1305
56.7 36.8 1305
36.1 103.8 1305
49.7 29.7 1305
23.5 121.0 1305
53.5 -113.5 1305
32.1 118.8 1305
56.2 47.3 1305
55.2 61.4 1305
55.2 61.4 1305
47.5 19.0 1305
31.0 121.4 1305
53.7 91.7 1305
55.2 61.4 1305
45.5 -73.6 1305
39.9 116.4 1305
45.6 8.6 1305
55.2 59.7 1305
36.7 117.0 1306
55.0 73.4 1306
57.0 25.0 1306
43.7 -79.4 1306
44.5 34.2 1306
22.0 96.1 1306
51.7 36.2 1306
51.7 36.2 1306
49.8 30.1 1306
23.5 121.0 1306
55.8 37.6 1306
28.6 115.9 1306
41.8 123.4 1306
55.2 61.4 1306
55.7 37.6 1306
22.3 114.2 1306
39.9 116.4 1306
28.2 113.1 1307
51.8 55.1 1307
32.1 118.8 1307
49.6 34.5 1307
26.1 119.3 1307
37.5 -122.4 1307
51.7 36.2 1307
23.5 121.0 1307
39.9 116.4 1307
25.0 121.5 1307
48.0 37.9 1307
31.0 121.4 1307
55.2 61.4 1307
55.3 61.4 1307
23.1 113.3 1308
52.8 52.3 1308
30.3 120.2 1308
48.5 32.3 1308
49.4 32.1 1308
46.3 48.0 1308
25.0 121.5 1308
-33.9 18.7 1308
55.7 37.6 1308
57.4 41.3 1308
31.9 117.3 1308
51.5 46.0 1308
23.1 113.3 1308
45.5 -73.6 1308
37.5 126.7 1308
46.3 48.0 1309
23.1 113.3 1309
39.9 116.4 1309
52.4 4.9 1309
37.5 127.0 1309
23.5 121.0 1309
51.5 46.0 1309
25.8 -80.2 1309
23.1 113.3 1309
55.2 61.4 1309
30.3 120.2 1309
57.8 40.9 1310
36.7 117.0 1310
23.5 121.0 1310
23.1 113.3 1310
41.8 123.4 1310
22.3 114.2 1310
51.7 55.4 1310
45.5 -73.6 1310
18.5 -69.9 1310
51.7 55.4 1310
39.5 116.7 1310
22.3 114.2 1310
39.9 116.4 1310
26.6 106.7 1310
30.7 104.1 1310
57.8 40.9 1310
23.5 121.0 1310
50.4 30.5 1310
51.1 128.4 1310
37.8 128.9 1310
45.5 -73.6 1310
45.5 -73.6 1310
39.9 116.4 1310
55.2 61.4 1310
55.3 61.4 1310
30.3 120.2 1310
32.1 118.8 1310
22.3 114.2 1310
56.7 37.2 1310
55.2 61.4 1310
55.2 61.4 1310
55.8 60.7 1310
23.5 121.0 1310
51.7 55.4 1311
53.2 50.1 1311
51.7 55.4 1311
46.5 30.7 1311
55.2 61.4 1311
49.8 30.1 1311
51.3 37.8 1311
25.0 121.5 1311
23.1 113.3 1311
46.4 34.2 1311
45.5 -73.6 1311
55.3 61.4 1311
55.2 61.4 1311
55.2 61.4 1311
52.3 21.0 1311
55.7 37.6 1311
23.5 121.0 1312
44.6 27.4 1312
57.0 24.1 1312
55.0 73.4 1312
51.2 58.3 1312
34.3 108.9 1312
50.4 30.5 1312
23.1 113.3 1312
46.6 -97.6 1312
45.9 -119.7 1312
53.1 49.9 1312
37.5 127.0 1312
45.5 -73.6 1312
30.3 120.2 1312
45.5 -73.6 1312
53.2 50.1 1312
32.1 118.8 1312
39.9 115.3 1312
48.9 2.3 1313
31.0 121.4 1313
54.7 25.3 1313
31.0 121.4 1313
24.1 120.7 1313
45.0 39.0 1313
22.6 120.4 1313
54.2 37.6 1313
23.5 121.0 1313
50.1 8.7 1313
25.0 121.5 1313
55.2 59.7 1313
15.0 30.0 1313
54.0 86.7 1313
37.5 127.0 1313
37.5 127.0 1313
49.4 32.1 1314
23.5 121.0 1314
31.0 121.4 1314
51.3 9.5 1314
49.8 30.1 1314
24.1 120.7 1314
25.0 121.5 1314
32.1 118.8 1314
30.3 120.2 1314
55.2 61.4 1314
23.5 121.0 1315
58.5 31.3 1315
55.2 59.7 1315
51.2 58.3 1315
23.1 113.3 1316
39.9 116.4 1316
31.0 121.4 1316
36.7 117.0 1316
14.2 121.5 1316
50.6 36.6 1316
45.5 -73.6 1316
55.2 61.4 1316
32.1 118.8 1316
55.2 61.4 1316
32.1 118.8 1316
23.5 121.0 1316
37.5 121.4 1317
24.8 121.0 1317
48.9 2.3 1317
49.4 32.1 1317
22.9 120.3 1317
50.4 30.5 1317
30.3 120.2 1317
55.8 37.6 1317
43.3 76.9 1317
55.2 61.4 1317
55.3 61.4 1317
55.2 61.4 1317
49.9 14.3 1317
30.3 120.2 1318
23.5 121.0 1318
51.5 -0.1 1318
13.8 100.5 1318
22.6 120.3 1318
-27.5 153.0 1318
55.2 59.7 1318
56.3 44.0 1318
-26.2 28.1 1318
55.0 60.4 1318
31.0 121.4 1319
25.0 121.5 1319
52.8 52.3 1319
52.3 104.3 1319
25.0 121.5 1319
45.3 -73.9 1319
48.9 2.3 1319
23.1 113.3 1319
54.3 48.4 1319
28.7 77.2 1319
23.1 113.3 1319
55.2 61.4 1319
34.7 113.5 1319
25.0 121.5 1319
55.2 61.4 1319
51.5 -0.1 1319
48.2 16.4 1319
55.9 26.5 1320
36.7 117.0 1320
19.7 -101.1 1320
37.5 127.0 1320
45.5 -73.6 1320
34.7 113.5 1320
36.7 117.0 1320
51.7 55.4 1320
41.0 29.0 1320
60.2 60.0 1320
48.5 35.0 1320
22.3 114.2 1320
65.9 57.5 1320
19.7 -101.1 1321
50.7 3.2 1321
31.0 121.4 1321
34.7 135.5 1321
39.9 116.4 1321
51.7 55.4 1321
30.3 120.2 1321
51.7 55.4 1321
-34.1 150.8 1321
-33.5 -70.7 1321
55.8 37.6 1321
22.8 108.3 1321
43.5 43.6 1321
54.3 48.4 1321
55.8 37.6 1321
30.3 120.2 1322
53.9 27.6 1322
51.7 55.4 1322
37.9 139.0 1322
45.5 -73.6 1322
25.0 121.5 1322
29.0 -111.7 1322
51.7 36.2 1322
42.7 26.3 1322
48.0 68.0 1322
40.5 -74.3 1322
25.0 121.5 1322
55.2 61.4 1322
53.0 36.1 1322
40.7 109.8 1322
48.0 37.8 1322
31.0 121.4 1322
23.5 121.0 1323
45.5 -73.6 1323
23.7 90.4 1323
25.0 121.5 1323
59.3 18.1 1323
59.9 30.3 1323
22.5 114.1 1323
45.3 -73.9 1323
59.9 30.3 1323
59.9 30.3 1323
33.4 -111.7 1323
23.5 121.0 1323
22.3 114.2 1323
39.9 116.4 1323
55.2 61.4 1323
20.6 -100.4 1323
50.4 30.5 1323
25.0 121.5 1323
53.0 36.1 1323
48.9 36.3 1323
56.8 53.2 1323
23.5 121.0 1324
39.9 116.4 1324
53.5 49.3 1324
23.1 113.3 1324
55.7 37.6 1324
50.6 36.6 1324
58.6 49.7 1324
25.0 121.5 1324
23.0 120.2 1324
55.9 37.7 1324
55.2 61.4 1324
45.5 -73.6 1324
54.9 37.4 1324
55.2 61.4 1324
41.8 123.4 1325
30.3 120.2 1325
30.7 104.1 1325
51.3 9.5 1325
37.5 -122.4 1325
-1.3 36.8 1325
32.1 118.8 1325
41.8 123.4 1325
35.4 139.6 1325
55.2 61.4 1325
50.6 36.6 1325
36.6 128.7 1325
23.5 121.0 1326
50.4 30.5 1326
32.1 118.8 1326
30.4 -97.8 1326
51.3 9.5 1326
25.0 121.5 1326
53.2 50.1 1326
53.4 10.6 1326
50.4 30.5 1326
50.0 36.3 1326
55.3 61.4 1326
55.2 61.4 1326
51.7 55.4 1326
23.5 121.0 1327
32.8 -83.6 1327
23.5 121.0 1327
32.1 118.8 1327
37.5 127.0 1327
28.6 115.9 1327
-26.2 28.1 1327
22.5 114.1 1327
55.0 82.9 1327
45.5 -73.6 1327
41.2 -96.0 1327
55.3 61.4 1327
25.0 121.5 1328
48.9 24.7 1328
57.2 65.5 1328
50.5 30.5 1328
48.1 37.9 1328
22.5 114.1 1328
17.3 76.8 1328
55.2 61.4 1328
32.1 118.8 1328
34.7 135.5 1328
45.8 126.7 1328
58.1 57.8 1328
23.1 113.3 1328
49.6 34.5 1329
32.1 118.8 1329
36.0 139.8 1329
24.1 120.7 1329
25.0 102.7 1329
23.5 121.0 1329
36.2 140.5 1329
23.5 121.0 1329
23.5 121.0 1329
55.2 61.4 1329
48.5 35.0 1329
55.0 60.1 1329
37.5 127.0 1329
55.3 61.4 1329
53.0 36.1 1329
55.2 61.4 1329
25.0 102.7 1329
50.6 36.6 1330
23.5 121.0 1330
34.8 113.7 1330
51.5 -0.2 1330
53.3 34.4 1330
18.0 -76.8 1330
55.0 82.9 1330
55.7 37.6 1330
32.1 118.8 1330
53.0 36.1 1330
25.0 102.7 1330
30.3 120.2 1330
48.9 2.3 1330
1.3 103.9 1330
55.7 37.9 1330
49.6 34.5 1330
23.1 113.3 1331
48.6 39.3 1331
50.3 28.7 1331
23.5 121.0 1331
33.0 -97.7 1331
58.0 56.3 1331
24.9 118.6 1331
28.4 -82.5 1331
51.5 46.0 1331
22.3 114.2 1331
55.2 61.4 1331
23.5 121.0 1332
59.4 13.5 1332
53.2 50.1 1332
28.6 115.9 1332
23.5 121.0 1332
37.5 127.0 1332
55.2 61.4 1332
45.5 -73.6 1332
31.0 121.4 1332
39.9 116.4 1332
55.2 61.4 1332
50.4 30.5 1332
30.1 121.1 1333
34.1 -118.3 1333
34.9 117.6 1333
22.3 114.2 1333
23.0 120.2 1333
52.0 47.8 1333
39.9 116.4 1333
31.2 30.0 1333
58.6 49.7 1333
31.0 121.4 1333
45.0 39.0 1333
51.2 58.3 1333
50.6 36.6 1333
55.3 61.4 1333
23.5 121.0 1333
36.1 103.8 1333
50.6 36.6 1334
45.3 -73.9 1334
40.7 -74.0 1334
37.5 121.4 1334
55.7 37.6 1334
46.7 32.6 1334
44.5 34.2 1334
51.7 36.2 1334
45.7 -77.2 1334
23.5 121.0 1334
45.5 -73.6 1334
25.0 121.5 1334
55.0 82.9 1334
55.2 61.4 1334
25.0 121.5 1334
24.1 120.5 1334
51.7 55.4 1334
55.2 61.4 1334
45.5 -73.6 1334
35.0 -82.0 1334
57.8 40.9 1335
36.7 117.0 1335
44.2 42.1 1335
50.0 36.1 1335
25.0 121.5 1335
39.8 -105.0 1335
56.8 53.2 1335
30.1 31.3 1335
35.7 51.4 1335
40.6 -74.0 1335
45.5 -73.6 1335
24.1 120.7 1335
30.3 120.2 1335
48.0 37.9 1335
19.2 73.1 1335
48.5 135.1 1335
25.3 55.3 1335
55.2 61.4 1335
43.5 43.6 1335
47.6 -122.3 1335
55.8 37.6 1335
51.8 55.1 1335
39.9 116.4 1336
50.6 36.6 1336
51.5 -0.1 1336
32.1 118.8 1336
55.7 37.6 1336
30.3 120.2 1336
4.6 -74.1 1336
23.5 121.0 1336
40.0 45.0 1336
54.3 48.4 1336
19.6 -99.2 1336
22.5 114.1 1336
50.4 30.5 1336
37.5 127.0 1336
32.1 118.8 1336
24.1 120.7 1336
32.1 118.8 1336
30.3 120.2 1336
55.2 61.4 1336
35.2 115.4 1337
55.3 38.7 1337
48.9 2.3 1337
29.3 47.7 1337
23.5 121.0 1337
32.1 118.8 1337
46.0 25.0 1337
23.5 121.0 1337
23.5 121.0 1337
25.0 121.5 1337
41.0 75.0 1337
23.5 121.0 1337
55.2 61.4 1337
55.2 61.4 1337
50.6 36.6 1337
23.5 121.0 1338
45.0 39.0 1338
50.6 36.6 1338
36.7 117.0 1338
25.0 121.5 1338
53.6 56.0 1338
51.9 36.3 1338
25.1 121.4 1338
24.5 118.1 1338
55.8 37.6 1338
56.8 53.2 1338
50.6 36.6 1338
50.4 30.5 1338
51.7 55.4 1338
55.1 59.5 1338
30.3 120.2 1339
23.5 121.0 1339
29.3 48.1 1339
54.8 56.0 1339
50.5 30.5 1339
40.5 -74.2 1339
40.7 109.8 1339
54.3 48.4 1339
51.5 46.1 1339
55.8 37.6 1339
25.0 121.5 1339
39.9 116.4 1339
45.5 -73.6 1339
47.6 -122.3 1339
56.1 47.5 1340
32.1 118.8 1340
51.7 36.2 1340
25.0 121.5 1340
23.5 121.0 1340
33.8 -117.8 1340
54.6 52.8 1340
25.0 121.5 1340
23.5 121.0 1340
31.0 121.4 1340
56.4 37.5 1340
55.2 61.4 1340
23.5 121.0 1341
37.5 127.0 1341
51.7 36.2 1341
46.3 48.0 1341
51.5 -0.1 1341
-1.4 -48.4 1341
25.0 121.5 1341
55.0 50.1 1341
31.9 117.3 1341
54.9 52.3 1341
28.4 -81.4 1341
8.5 124.6 1341
59.4 13.5 1341
32.1 118.8 1341
32.1 118.8 1341
30.3 120.2 1341
51.7 55.4 1341
44.1 39.1 1341
23.5 121.0 1341
48.9 2.3 1341
55.3 61.4 1341
32.1 118.8 1342
29.3 48.1 1342
68.9 33.7 1342
43.8 -79.3 1342
22.6 120.4 1342
30.7 104.1 1342
23.5 121.0 1342
50.8 -0.6 1342
23.1 113.3 1342
55.2 61.4 1342
55.2 61.4 1342
22.3 114.2 1342
51.5 -0.1 1343
50.6 36.6 1343
32.1 118.8 1343
55.7 37.6 1343
23.5 121.0 1343
-31.9 115.8 1343
50.6 36.6 1343
51.7 55.4 1343
50.4 30.5 1343
30.3 120.2 1343
39.9 116.4 1343
48.9 24.7 1343
55.2 61.4 1343
25.0 121.5 1344
23.5 121.0 1344
55.7 37.6 1344
29.3 48.1 1344
47.2 39.7 1344
23.5 121.0 1344
39.0 -77.5 1344
20.0 77.0 1344
54.7 20.5 1344
50.4 30.5 1344
34.2 -119.2 1344
30.3 120.2 1344
43.1 12.1 1344
55.0 82.9 1344
49.4 32.1 1344
30.3 120.2 1344
31.0 121.4 1344
23.1 113.3 1345
56.1 40.4 1345
36.6 128.7 1345
53.2 50.1 1345
55.7 37.6 1345
-33.5 -70.7 1345
51.7 36.2 1345
45.5 -73.6 1345
54.6 52.8 1345
23.5 121.0 1345
22.6 120.4 1345
45.5 -73.6 1345
54.3 48.4 1345
34.1 -118.3 1345
32.1 118.8 1345
30.3 120.2 1345
34.8 113.7 1346
57.8 40.9 1346
22.6 120.3 1346
39.9 -75.1 1346
30.7 104.1 1346
45.8 126.7 1346
53.0 49.7 1346
37.5 127.0 1346
55.0 50.1 1346
45.3 -73.9 1346
52.3 21.0 1346
56.5 53.8 1347
17.4 78.5 1347
20.2 85.8 1347
41.0 64.0 1347
35.5 139.5 1347
22.8 108.3 1347
55.0 50.1 1347
45.5 -73.6 1347
23.1 113.3 1347
48.9 36.3 1347
55.3 61.4 1347
55.1 59.5 1347
55.0 60.4 1347
32.1 118.8 1347
40.6 -74.5 1348
35.2 115.4 1348
55.7 37.6 1348
48.1 37.9 1348
55.2 59.7 1348
25.0 121.5 1348
47.1 21.9 1348
48.0 68.0 1348
45.5 -73.6 1348
39.9 116.4 1348
35.6 139.7 1349
37.5 127.0 1349
30.3 120.2 1349
28.6 115.9 1349
55.7 37.6 1349
23.5 121.0 1349
48.9 2.3 1349
28.5 77.0 1349
30.3 120.2 1349
51.7 55.4 1349
36.1 103.8 1349
-6.3 106.8 1349
36.1 103.8 1349
53.5 49.3 1350
23.5 121.0 1350
41.0 29.0 1350
48.9 2.3 1350
49.8 30.1 1350
55.0 50.1 1350
33.9 118.3 1350
55.3 61.4 1350
51.7 39.2 1350
50.3 28.7 1351
-22.8 -43.2 1351
23.5 121.0 1351
42.4 -83.1 1351
22.5 114.1 1351
46.0 25.0 1351
10.8 106.6 1351
39.9 116.4 1351
34.0 -117.9 1351
31.0 121.4 1351
19.4 -99.1 1351
23.5 121.0 1351
51.7 55.4 1351
39.9 116.4 1352
54.2 45.2 1352
23.0 120.2 1352
30.3 120.2 1352
47.2 39.7 1352
23.1 113.3 1352
51.7 55.4 1352
55.5 65.3 1352
34.1 -118.3 1352
39.9 -105.2 1353
17.4 78.5 1353
57.0 25.0 1353
41.6 -81.4 1353
48.9 2.3 1353
33.7 -84.8 1353
55.8 37.6 1353
25.0 121.5 1353
50.4 30.5 1353
32.1 118.8 1354
32.1 118.8 1354
55.0 60.1 1354
45.5 -73.6 1354
32.1 118.8 1354
24.6 120.8 1354
56.0 43.1 1354
50.1 14.4 1354
32.1 118.8 1354
13.8 100.5 1354
49.6 34.5 1354
46.3 48.0 1354
46.3 48.0 1354
45.5 -73.6 1354
25.0 121.5 1354
50.6 36.6 1354
50.5 30.5 1354
25.0 121.5 1354
49.4 32.1 1354
51.3 58.2 1354
13.8 100.5 1354
34.1 -118.3 1354
41.3 69.3 1355
23.1 113.3 1355
23.1 113.3 1355
24.7 46.7 1355
36.7 117.0 1355
45.5 -73.6 1355
34.8 113.7 1355
55.7 37.6 1355
41.8 123.4 1355
55.2 59.7 1355
55.8 37.6 1355
32.5 -117.0 1355
51.3 9.5 1355
36.7 117.0 1356
53.5 49.3 1356
55.7 37.9 1356
30.7 104.1 1356
55.3 38.7 1356
48.7 44.5 1356
55.2 61.4 1356
25.3 55.3 1356
30.3 120.2 1356
32.1 118.8 1357
32.1 118.8 1357
55.2 61.4 1357
55.3 61.4 1357
55.7 37.6 1357
54.3 48.4 1357
55.7 37.6 1357
55.7 37.6 1358
35.2 115.4 1358
37.5 127.0 1358
51.7 36.2 1358
48.5 35.0 1358
41.0 29.0 1358
30.3 120.2 1358
11.0 77.0 1358
22.8 108.3 1358
55.3 61.4 1358
26.6 106.7 1358
25.0 121.5 1358
25.0 121.5 1359
23.5 121.0 1359
32.1 118.8 1359
59.6 33.5 1359
24.1 120.7 1359
50.4 30.5 1359
40.0 45.0 1359
23.5 121.0 1359
24.1 120.7 1359
32.8 -117.2 1359
55.2 61.4 1359
31.0 121.4 1359
-12.3 -66.2 1359
51.7 36.2 1360
23.5 121.0 1360
50.1 14.5 1360
13.1 80.3 1360
22.2 113.6 1360
39.9 116.4 1360
23.5 121.0 1360
55.2 61.4 1360
54.3 48.4 1360
56.3 44.0 1361
54.5 36.3 1361
39.9 116.4 1361
55.4 43.8 1361
51.7 36.2 1361
51.7 39.2 1361
54.6 52.8 1361
53.0 36.1 1361
45.5 -73.6 1361
55.7 37.6 1361
55.2 59.7 1361
51.3 9.5 1361
55.2 61.4 1361
34.0 -118.3 1361
19.7 -101.1 1362
32.1 118.8 1362
34.0 -117.9 1362
55.3 61.4 1362
53.0 36.1 1362
23.5 121.0 1362
58.6 49.7 1362
45.5 -73.6 1362
48.9 36.3 1362
56.9 53.2 1362
30.3 120.2 1362
34.8 113.7 1362
51.7 55.4 1362
52.8 52.3 1362
51.2 58.3 1362
48.9 36.3 1363
36.7 117.0 1363
46.1 12.7 1363
45.5 -73.6 1363
34.0 -118.5 1363
41.4 -81.9 1363
31.8 35.2 1363
34.8 113.7 1363
54.4 53.3 1363
30.3 120.2 1363
24.1 120.7 1363
51.2 58.3 1363
23.0 120.2 1363
21.0 72.9 1363
23.5 121.0 1364
57.0 23.8 1364
45.5 -73.6 1364
30.7 104.1 1364
56.9 60.6 1364
57.4 41.3 1364
45.5 -73.6 1364
50.4 30.5 1364
55.3 52.1 1364
57.0 41.0 1364
40.0 45.0 1364
55.2 61.4 1364
52.3 -0.9 1364
42.3 -83.7 1364
34.0 -117.9 1364
48.2 16.4 1364
54.8 56.0 1365
33.7 -84.4 1365
51.8 107.6 1365
50.8 4.4 1365
22.3 114.2 1365
55.7 37.6 1365
55.8 49.1 1365
58.6 49.7 1365
51.2 58.3 1365
22.5 114.1 1365
23.5 121.0 1365
56.2 101.6 1366
23.5 121.0 1366
30.3 120.2 1366
31.0 121.4 1366
56.9 53.2 1366
41.0 75.0 1366
55.3 61.4 1366
54.6 52.5 1366
52.8 52.3 1366
55.2 61.4 1366
31.0 121.4 1366
25.3 55.3 1366
45.0 39.0 1366
30.3 120.2 1366
48.0 37.8 1367
32.1 118.8 1367
23.5 121.0 1367
48.9 2.3 1367
55.0 82.9 1367
37.5 127.0 1367
52.8 52.3 1367
23.1 113.3 1367
49.6 34.5 1368
53.5 49.3 1368
1.3 103.9 1368
26.1 119.3 1368
32.1 118.8 1368
54.2 37.6 1368
58.3 57.8 1368
54.8 83.1 1368
34.8 113.7 1368
51.8 55.1 1368
32.1 118.8 1368
55.2 61.4 1368
36.1 103.8 1368
19.4 -99.1 1368
55.7 37.6 1368
52.2 21.0 1368
29.3 47.7 1369
50.4 30.5 1369
32.1 118.8 1369
23.5 121.0 1369
35.2 115.4 1369
56.9 53.2 1369
49.8 30.1 1369
17.4 78.5 1369
28.2 113.1 1369
48.0 68.0 1369
37.5 127.0 1369
20.0 110.3 1369
40.7 -74.2 1369
50.4 30.5 1369
40.4 -3.7 1369
31.0 121.4 1369
22.6 120.4 1370
26.6 106.7 1370
32.1 118.8 1370
36.7 117.0 1370
50.6 36.6 1370
36.7 117.0 1370
55.5 47.5 1370
46.3 48.0 1370
34.1 -118.4 1370
54.9 52.3 1370
25.0 121.5 1370
49.8 30.1 1370
47.7 -122.3 1370
24.8 121.0 1370
55.2 61.4 1370
55.2 61.4 1370
31.0 121.4 1371
34.8 113.7 1371
55.9 26.5 1371
45.5 -73.6 1371
23.5 121.0 1371
51.2 4.4 1371
25.0 121.5 1371
16.3 80.5 1371
40.7 109.8 1371
55.3 61.4 1371
30.3 120.2 1371
55.9 37.5 1371
43.9 125.3 1371
30.3 120.2 1371
48.9 24.7 1372
50.7 3.2 1372
30.0 31.2 1372
45.5 -73.6 1372
30.7 104.1 1372
51.5 46.0 1372
55.8 37.6 1372
48.0 37.9 1372
6.3 -75.6 1372
37.8 -97.8 1372
55.7 37.6 1372
52.4 4.9 1372
55.7 37.6 1372
32.1 118.8 1373
51.7 36.2 1373
56.9 53.2 1373
32.1 118.8 1373
32.1 118.8 1373
39.9 116.4 1373
34.8 113.7 1373
53.0 36.1 1373
54.6 52.5 1373
25.0 121.5 1373
34.1 -118.3 1373
45.5 9.2 1373
56.1 47.3 1373
39.9 116.4 1373
49.9 28.6 1374
23.0 120.2 1374
58.1 52.7 1374
32.1 118.8 1374
25.0 121.5 1374
32.1 118.8 1374
56.3 44.0 1374
13.8 100.5 1374
55.8 37.6 1374
54.3 48.4 1374
55.0 50.1 1374
55.7 37.6 1374
37.5 127.0 1374
23.0 120.2 1374
21.0 105.9 1374
54.3 48.4 1374
35.9 140.0 1374
25.0 102.7 1374
55.2 61.4 1374
23.5 121.0 1374
28.5 -81.4 1374
30.3 120.2 1375
25.0 121.5 1375
57.0 24.1 1375
48.5 35.0 1375
40.6 -74.5 1375
49.4 32.1 1375
48.9 2.3 1375
53.2 50.1 1375
4.6 -74.1 1375
24.1 120.7 1375
34.8 113.7 1375
55.2 61.4 1375
55.0 60.1 1375
54.3 48.4 1375
48.9 2.3 1375
32.1 118.8 1376
30.1 121.1 1376
50.4 30.5 1376
-29.0 24.0 1376
23.5 121.0 1376
47.0 32.0 1376
48.9 2.3 1376
57.0 41.0 1376
52.4 4.9 1376
45.5 -73.6 1376
36.6 128.7 1376
55.2 61.4 1376
34.7 113.5 1376
37.5 127.0 1376
56.3 44.0 1376
24.9 118.6 1376
42.0 43.5 1376
55.2 61.4 1376
23.1 113.3 1377
22.8 108.3 1377
48.9 2.3 1377
53.0 36.1 1377
22.3 114.2 1377
55.7 37.6 1377
25.0 121.5 1377
23.5 121.0 1377
22.3 114.2 1377
55.2 59.7 1377
23.5 121.0 1377
55.0 73.4 1377
57.0 25.0 1378
32.1 118.8 1378
39.9 116.4 1378
49.8 24.0 1378
29.4 48.0 1378
47.6 -122.3 1378
55.2 59.7 1378
23.5 121.0 1378
40.7 -74.0 1378
55.0 73.4 1378
40.1 -75.4 1379
53.8 38.1 1379
31.5 74.4 1379
22.3 114.2 1379
-12.1 -77.1 1379
45.3 -73.9 1379
45.3 -73.9 1379
55.1 73.1 1379
58.0 56.3 1379
39.9 116.4 1379
22.3 114.0 1379
56.9 53.2 1379
22.6 120.4 1380
32.1 118.8 1380
34.8 113.7 1380
40.5 -74.2 1380
32.1 118.8 1380
34.8 113.7 1380
32.1 118.8 1380
49.6 34.5 1380
23.1 113.3 1380
32.1 118.8 1380
34.8 113.7 1380
23.5 121.0 1380
31.9 117.3 1380
23.1 113.3 1380
50.4 30.5 1380
51.7 55.4 1380
54.6 39.7 1380
32.1 118.8 1380
22.3 114.2 1380
17.4 78.5 1380
56.9 53.2 1381
25.0 121.5 1381
45.9 -119.7 1381
23.5 121.0 1381
53.0 36.1 1381
34.8 113.7 1381
51.7 55.4 1381
26.6 106.7 1381
50.5 30.5 1381
32.1 118.8 1381
33.8 -118.2 1381
55.3 61.4 1381
23.5 121.0 1382
32.1 118.8 1382
19.7 -101.1 1382
32.1 118.8 1382
30.3 120.2 1382
30.3 120.2 1382
45.5 -73.6 1382
59.9 10.7 1383
-34.1 150.8 1383
50.4 30.5 1383
32.1 118.8 1383
51.3 37.8 1384
34.8 113.7 1384
51.7 55.4 1384
24.5 54.4 1384
22.5 114.1 1384
41.8 123.4 1384
39.9 116.4 1384
53.7 -2.3 1384
35.6 139.8 1384
50.4 30.5 1384
56.8 61.3 1384
55.7 37.6 1384
55.2 59.7 1384
50.4 30.5 1384
50.6 36.6 1384
55.2 61.4 1384
32.1 118.8 1385
57.8 40.9 1385
32.1 118.8 1385
46.7 32.6 1385
56.9 53.2 1385
55.9 37.4 1385
57.1 24.3 1385
24.1 120.7 1385
48.0 37.8 1385
30.6 114.3 1385
24.9 118.6 1385
56.1 40.4 1385
22.3 114.2 1385
50.6 36.6 1385
23.1 113.3 1385
39.6 -75.6 1385
48.8 41.0 1386
37.5 -122.4 1386
23.1 113.3 1386
48.9 2.3 1386
46.3 48.0 1386
55.1 61.6 1386
53.0 36.1 1386
54.6 39.7 1386
26.1 119.3 1386
55.7 37.6 1386
47.6 -122.3 1386
54.4 53.3 1386
23.5 121.0 1386
30.3 120.2 1386
51.8 55.1 1386
30.3 120.2 1386
55.7 37.6 1386
49.6 25.6 1386
22.3 114.2 1386
51.7 55.4 1386
54.3 48.4 1386
51.7 55.4 1386
23.1 113.3 1387
28.0 120.7 1387
34.8 113.7 1387
56.9 53.2 1387
23.5 121.0 1387
55.8 37.6 1387
22.6 120.4 1387
39.9 116.4 1387
30.6 114.3 1387
25.0 121.5 1387
55.0 50.1 1387
58.0 56.3 1387
31.0 121.4 1387
50.4 30.5 1387
54.3 48.4 1387
32.1 118.8 1387
30.3 120.2 1388
30.7 104.1 1388
49.6 34.5 1388
45.5 -73.6 1388
48.9 2.3 1388
34.1 -118.3 1388
51.7 36.2 1388
40.0 -75.3 1388
40.5 -74.2 1388
23.1 113.3 1388
52.4 4.9 1388
50.4 30.5 1388
34.1 -118.3 1388
51.7 55.4 1388
-6.3 106.5 1388
31.0 121.4 1388
22.6 120.4 1388
48.7 38.1 1388
22.3 114.2 1388
56.1 40.4 1389
56.9 53.2 1389
34.7 113.5 1389
45.5 -73.6 1389
23.5 121.0 1389
23.5 121.0 1389
22.6 120.4 1389
35.3 139.7 1389
37.5 127.0 1389
31.2 30.0 1389
36.7 117.0 1389
48.5 35.0 1389
-22.8 -43.2 1389
50.4 30.5 1389
45.1 7.7 1389
23.1 113.3 1389
42.7 23.3 1389
32.1 118.8 1389
26.2 127.8 1390
50.1 8.8 1390
54.8 56.0 1390
45.0 39.0 1390
39.9 116.4 1390
39.9 32.8 1390
53.0 36.1 1390
51.4 -0.2 1390
58.4 58.3 1390
61.3 73.4 1390
55.2 61.4 1390
42.0 43.5 1390
-37.9 145.1 1390
39.0 -77.5 1390
36.1 103.8 1390
55.2 61.4 1390
40.5 -74.2 1391
23.1 113.3 1391
48.9 24.7 1391
52.4 4.9 1391
48.7 30.2 1391
23.0 120.2 1391
34.8 113.7 1391
53.0 36.1 1391
-34.9 -56.2 1391
32.1 118.8 1391
25.0 121.5 1391
54.6 52.5 1391
55.2 59.7 1391
55.7 37.6 1391
50.6 15.3 1392
57.1 24.2 1392
30.3 120.2 1392
23.5 121.0 1392
30.6 114.3 1392
62.4 17.3 1392
22.8 108.3 1392
47.9 35.3 1392
31.0 121.4 1392
49.8 73.1 1392
42.3 -71.8 1393
39.9 116.4 1393
55.7 37.6 1393
55.4 43.8 1393
53.0 36.1 1393
20.0 110.3 1393
28.6 115.9 1393
55.2 61.4 1393
55.3 61.4 1393
32.1 118.8 1393
52.3 104.3 1394
23.1 113.3 1394
24.1 120.7 1394
50.6 36.6 1394
24.1 120.7 1394
25.0 121.5 1394
55.7 37.6 1394
55.3 61.4 1394
55.0 73.4 1394
32.1 118.8 1394
32.1 118.8 1394
52.0 -2.9 1395
45.5 -73.6 1395
52.2 21.0 1395
55.4 37.5 1395
50.6 36.6 1395
24.1 120.7 1395
48.9 2.3 1395
55.0 50.1 1395
39.9 116.4 1395
-12.3 -66.2 1395
47.2 39.7 1395
61.3 73.4 1395
17.4 78.5 1395
59.9 30.3 1395
55.2 61.4 1395
24.9 118.6 1395
55.2 59.7 1395
22.3 114.0 1395
24.0 54.0 1396
47.4 18.9 1396
16.2 120.8 1396
24.8 121.0 1396
35.2 115.4 1396
57.8 40.9 1396
30.3 120.2 1396
51.7 36.2 1396
46.3 48.0 1396
22.3 114.2 1396
22.3 114.2 1396
51.2 58.6 1396
30.3 120.2 1396
31.0 121.4 1396
39.9 116.4 1396
51.2 58.3 1396
26.6 106.7 1396
23.5 121.0 1396
55.2 61.4 1396
38.7 -77.2 1397
23.5 121.0 1397
45.5 -73.6 1397
50.0 36.3 1397
47.2 39.7 1397
50.4 30.5 1397
24.1 120.7 1397
23.5 121.0 1397
36.7 117.0 1397
31.0 121.4 1397
55.2 61.4 1397
22.5 114.1 1398
23.0 113.1 1398
56.9 53.2 1398
25.3 110.3 1398
55.3 61.4 1398
35.8 -83.6 1398
30.7 104.1 1398
53.2 48.5 1398
24.1 120.7 1398
53.8 87.1 1398
46.8 29.5 1398
30.3 120.2 1398
56.6 47.9 1398
55.3 61.4 1398
55.3 61.4 1398
55.3 61.4 1398
51.2 58.3 1398
51.5 -0.1 1399
45.5 -74.1 1399
23.0 120.2 1399
51.3 37.8 1399
30.3 120.2 1399
24.6 120.8 1399
55.0 50.1 1399
56.6 84.8 1399
51.7 55.4 1399
50.6 36.6 1399
30.3 120.2 1399
55.2 61.4 1399
54.9 61.4 1399
45.2 26.8 1399
55.2 61.4 1399
51.7 55.4 1399
33.6 131.2 1399
31.0 121.4 1400
39.9 116.4 1400
39.9 116.4 1400
56.2 47.3 1400
55.7 37.6 1400
34.8 113.7 1400
55.8 37.6 1400
53.8 87.1 1400
34.7 113.5 1400
54.3 48.4 1400
50.4 30.5 1400
51.9 47.9 1400
51.3 58.2 1400
45.5 -73.6 1400
48.9 2.3 1401
30.3 120.2 1401
23.1 113.3 1401
34.2 117.2 1401
26.1 119.3 1401
51.5 -0.1 1401
45.5 -73.6 1401
55.0 73.4 1401
40.4 -3.7 1401
30.3 120.2 1401
25.0 121.5 1401
32.1 118.8 1401
55.3 61.4 1401
51.7 7.9 1401
56.8 53.2 1402
37.5 127.0 1402
32.1 118.8 1402
40.3 -83.1 1402
36.6 128.7 1402
30.3 120.2 1402
43.9 125.3 1402
24.1 120.7 1402
55.2 61.4 1402
30.3 120.2 1402
23.5 121.0 1402
23.1 113.3 1402
28.2 113.1 1403
57.8 40.9 1403
31.0 121.4 1403
56.5 85.0 1403
51.7 36.2 1403
22.6 120.4 1403
23.1 113.3 1403
23.1 113.3 1403
32.1 118.8 1403
49.8 30.1 1403
20.0 110.3 1403
40.5 -74.2 1403
48.3 25.9 1403
55.2 59.7 1403
43.9 125.3 1403
23.5 121.0 1404
56.1 47.3 1404
23.1 113.3 1404
55.7 37.6 1404
28.6 115.9 1404
39.9 116.4 1404
55.6 51.8 1404
17.4 78.5 1404
24.1 120.7 1404
32.1 118.8 1404
25.0 102.7 1404
51.5 -0.1 1405
34.3 108.9 1405
51.5 -0.1 1405
30.3 120.2 1405
55.2 61.4 1405
57.1 24.3 1405
14.6 121.1 1405
30.6 114.3 1405
17.4 78.5 1405
32.1 118.8 1405
20.0 110.3 1405
61.3 73.4 1405
36.7 117.0 1405
30.3 120.2 1405
53.5 48.9 1405
24.1 120.7 1405
30.3 120.2 1405
25.0 102.7 1405
55.2 61.4 1405
40.0 45.0 1405
45.5 -73.6 1405
45.5 -73.6 1405
30.1 -93.3 1405
37.5 -122.4 1406
35.6 139.7 1406
50.0 26.6 1406
50.4 30.5 1406
23.5 121.0 1406
61.3 73.4 1406
36.6 136.6 1406
24.9 118.6 1406
24.1 120.7 1406
55.3 86.1 1406
32.1 118.8 1406
55.7 37.6 1406
22.3 114.2 1407
22.6 120.4 1407
18.5 -69.9 1407
69.0 33.1 1407
25.0 121.3 1407
23.1 113.3 1407
36.6 101.8 1407
45.3 -73.9 1407
45.6 11.5 1407
34.8 113.7 1407
51.3 37.8 1407
36.9 30.7 1407
25.0 121.5 1407
21.0 105.9 1407
51.7 55.4 1407
23.1 113.3 1407
40.0 45.0 1407
55.2 61.4 1407
55.2 61.4 1407
29.0 -111.7 1407
54.8 56.0 1408
23.5 121.0 1408
50.4 30.5 1408
25.0 121.5 1408
30.7 104.1 1408
18.5 73.9 1408
51.8 107.4 1408
52.2 20.8 1408
51.7 39.2 1408
45.5 -73.6 1408
23.5 121.0 1408
54.2 37.6 1408
52.8 52.3 1408
49.4 32.1 1409
32.9 -117.2 1409
24.9 118.6 1409
19.4 -99.1 1409
25.0 121.3 1409
45.0 41.1 1409
45.7 28.4 1409
52.6 39.6 1409
17.4 78.5 1409
30.3 120.2 1409
25.0 121.5 1409
22.8 108.3 1410
53.2 50.1 1410
55.0 50.1 1410
48.5 35.0 1410
32.1 118.8 1410
55.9 52.3 1410
36.1 103.8 1410
53.2 50.1 1410
23.5 121.0 1410
56.8 60.5 1410
57.0 54.0 1410
53.2 50.1 1410
23.0 120.2 1411
45.8 126.7 1411
55.1 61.6 1411
48.9 2.3 1411
50.6 36.6 1411
45.0 39.0 1411
36.7 117.0 1411
55.2 61.4 1411
45.0 34.1 1411
55.2 59.7 1411
58.0 56.3 1411
-12.3 -66.2 1411
25.0 121.5 1412
31.0 121.4 1412
55.7 37.6 1412
50.4 30.5 1412
53.5 49.3 1412
55.7 37.6 1412
48.9 2.3 1412
55.7 37.6 1412
57.6 39.9 1412
36.7 117.0 1412
25.0 121.5 1412
25.0 121.5 1412
34.8 113.7 1412
23.5 121.0 1412
55.2 61.4 1412
32.1 118.8 1412
30.3 120.2 1412
54.4 61.3 1412
51.9 36.3 1413
51.1 133.0 1413
54.6 39.7 1413
-22.8 -43.2 1413
51.7 39.2 1413
55.8 37.6 1414
53.2 45.0 1414
55.7 37.6 1414
23.1 113.3 1414
54.8 32.0 1414
32.1 118.8 1414
41.3 -104.7 1414
22.3 113.9 1414
23.5 121.0 1414
23.5 121.0 1414
42.4 -71.1 1415
55.1 37.5 1415
52.2 20.8 1415
58.6 49.7 1415
54.6 52.5 1415
40.7 -74.2 1415
26.6 106.7 1415
52.8 52.3 1415
53.1 36.2 1415
55.2 61.4 1415
56.9 53.2 1415
45.5 -73.6 1415
17.4 78.5 1415
18.5 -72.3 1415
45.5 -73.6 1416
32.1 118.8 1416
32.1 118.8 1416
54.5 36.3 1416
50.9 34.8 1416
48.5 135.1 1416
48.9 2.3 1416
45.5 -73.6 1416
39.9 116.4 1416
23.5 121.0 1416
23.1 113.3 1416
55.7 37.6 1416
30.3 120.2 1416
23.5 121.0 1416
23.5 121.0 1416
55.4 43.8 1417
25.0 121.5 1417
32.1 118.8 1417
14.6 121.1 1417
55.7 37.6 1417
56.4 61.9 1417
22.3 114.2 1417
34.0 -117.9 1417
37.5 127.0 1417
50.4 30.5 1417
62.0 129.7 1417
28.6 115.9 1417
45.5 -73.6 1417
50.1 14.4 1418
32.1 118.8 1418
53.1 36.2 1418
56.1 47.3 1418
25.0 121.5 1418
34.7 135.2 1418
25.0 121.5 1418
22.6 120.4 1418
21.2 79.7 1418
32.1 118.8 1418
10.5 -66.6 1418
25.0 121.5 1418
25.0 121.5 1418
49.6 34.5 1418
30.3 120.2 1418
22.6 120.4 1418
41.3 -81.3 1418
56.8 53.2 1419
23.1 113.3 1419
25.0 121.5 1419
23.1 113.3 1419
30.7 104.1 1419
19.0 72.8 1419
55.8 49.1 1419
40.6 -74.0 1419
39.9 116.4 1419
30.3 120.2 1419
32.1 118.8 1419
25.0 121.5 1419
19.7 -101.1 1420
32.1 118.8 1420
50.4 30.5 1420
55.2 59.7 1420
51.7 36.2 1420
56.2 47.3 1420
45.3 -73.9 1420
48.9 2.3 1420
30.0 31.2 1420
51.9 47.9 1420
24.1 120.7 1420
25.0 121.5 1420
50.4 36.9 1420
33.6 46.4 1420
48.3 25.9 1420
31.7 34.6 1420
30.3 120.2 1420
55.2 61.4 1420
29.0 -111.7 1420
39.9 116.4 1420
55.3 61.4 1420
51.8 55.1 1420
48.7 44.5 1421
50.4 30.5 1421
22.8 108.3 1421
39.9 116.4 1421
55.7 37.6 1421
29.4 48.0 1421
55.7 84.9 1421
37.5 127.0 1421
54.6 52.5 1421
55.2 61.4 1421
55.2 61.4 1421
36.1 103.8 1421
55.2 61.4 1421
51.7 55.4 1421
30.7 104.1 1422
-6.8 39.3 1422
45.0 39.0 1422
-22.9 -45.5 1422
23.5 121.0 1422
47.0 28.9 1422
23.1 113.3 1422
55.0 50.1 1422
23.0 120.2 1422
34.8 113.7 1422
47.1 21.9 1422
23.7 92.7 1422
51.7 55.4 1422
40.9 -8.6 1422
23.5 121.0 1422
32.1 118.8 1422
24.9 67.1 1423
23.0 120.2 1423
23.1 113.3 1423
45.5 -73.6 1423
23.5 121.0 1423
55.4 43.8 1423
23.5 121.0 1423
41.0 75.0 1423
45.5 -73.6 1423
28.6 115.9 1423
45.0 -93.2 1423
23.5 121.0 1423
55.2 61.4 1423
45.5 -73.6 1423
50.4 30.5 1424
55.4 43.8 1424
30.7 104.1 1424
57.8 40.9 1424
53.2 48.5 1424
22.5 114.1 1424
53.7 91.4 1424
36.7 117.0 1424
50.4 30.5 1424
55.9 37.2 1424
45.5 -122.6 1424
-33.5 -70.7 1424
55.2 61.4 1424
30.7 104.1 1424
55.5 37.7 1424
55.3 61.4 1424
56.9 35.9 1424
36.7 117.0 1424
31.0 121.4 1425
52.5 103.9 1425
10.3 123.9 1425
50.6 36.6 1425
25.0 121.5 1425
31.2 30.0 1425
25.0 121.5 1425
40.7 -74.2 1425
51.7 55.4 1425
11.0 -74.8 1425
34.0 -117.9 1425
48.9 24.7 1426
23.1 113.3 1426
48.5 35.0 1426
50.6 36.6 1426
54.2 37.6 1426
56.3 44.0 1426
34.1 -118.3 1426
23.5 121.0 1426
50.4 30.5 1426
36.7 117.0 1426
55.2 61.4 1426
48.5 35.0 1426
42.7 23.3 1426
17.4 78.5 1426
34.8 113.7 1426
37.5 127.0 1427
50.0 36.3 1427
54.2 45.2 1427
23.5 121.0 1427
35.7 51.3 1427
36.6 128.7 1427
61.3 73.4 1427
34.2 131.5 1427
25.0 121.5 1427
48.7 44.5 1427
50.4 30.5 1427
25.7 -100.3 1427
24.1 120.7 1427
55.2 61.4 1427
23.1 113.3 1427
55.3 61.4 1428
45.5 -73.6 1428
48.9 2.3 1428
23.5 121.0 1428
32.1 118.8 1428
51.7 35.7 1428
29.0 -111.7 1428
29.9 121.5 1428
37.5 127.0 1428
29.9 121.5 1428
55.4 43.8 1428
42.0 -91.6 1428
41.1 -81.5 1428
55.2 61.4 1428
55.2 61.4 1428
51.8 55.1 1428
55.2 61.4 1428
51.8 55.1 1428
50.4 30.5 1428
22.5 114.1 1429
32.1 118.8 1429
54.9 37.3 1429
23.1 113.3 1429
24.9 118.6 1429
55.8 49.1 1429
51.5 6.7 1429
55.2 59.7 1429
46.5 30.7 1429
55.2 59.7 1429
56.9 53.2 1429
39.9 116.4 1429
60.9 76.6 1430
37.5 127.0 1430
56.9 60.6 1430
55.7 37.6 1430
46.3 48.0 1430
6.9 79.8 1430
23.5 121.0 1430
22.5 114.1 1430
48.5 32.3 1430
55.2 61.4 1430
22.3 114.2 1430
23.5 121.0 1430
54.2 83.4 1430
41.0 64.0 1430
56.0 24.0 1431
30.3 120.2 1431
26.1 119.3 1431
45.5 -73.6 1431
53.5 49.3 1431
48.9 2.3 1431
23.5 121.0 1431
21.0 105.9 1431
59.9 30.2 1431
42.2 24.6 1431
55.2 61.4 1431
-22.8 -43.2 1431
42.4 -92.4 1431
47.6 19.1 1432
28.5 77.0 1432
-25.7 28.2 1432
39.9 116.4 1432
43.3 17.8 1432
53.6 10.0 1432
23.5 121.0 1432
58.6 49.7 1432
23.5 121.0 1432
17.4 78.5 1432
55.5 65.3 1432
23.5 121.0 1432
48.9 2.3 1432
51.7 55.4 1432
53.2 48.5 1432
50.4 30.5 1432
22.6 120.4 1432
48.6 39.3 1432
55.2 61.4 1432
48.5 35.0 1432
32.1 118.8 1433
55.7 37.6 1433
53.1 36.2 1433
56.7 37.2 1433
51.7 36.2 1433
54.3 48.4 1433
22.5 114.1 1433
56.3 44.0 1433
53.0 36.1 1433
51.5 -0.1 1433
41.0 29.0 1433
23.5 121.0 1433
51.7 55.4 1433
55.2 61.4 1433
55.3 61.4 1433
34.1 -118.3 1433
30.3 120.2 1433
23.5 121.0 1434
54.2 37.6 1434
23.1 113.3 1434
56.3 44.0 1434
14.6 121.1 1434
55.2 61.4 1434
28.6 115.9 1434
55.8 37.6 1434
55.6 51.8 1434
55.2 61.4 1434
55.1 61.6 1434
25.0 121.5 1434
54.3 48.4 1435
23.5 121.0 1435
4.6 -74.1 1435
45.5 -73.6 1435
54.7 25.3 1435
40.4 -3.7 1435
25.0 121.5 1435
50.4 30.5 1435
51.7 39.2 1435
-34.6 -58.4 1435
45.5 -73.6 1435
55.0 82.9 1435
55.9 48.3 1435
55.2 61.4 1435
55.8 49.2 1436
53.9 27.6 1436
30.3 120.2 1436
57.0 41.0 1436
51.3 37.8 1436
29.9 121.5 1436
-22.8 -43.2 1436
51.3 37.8 1436
45.5 -73.6 1436
44.6 33.5 1436
48.9 2.3 1436
32.1 118.8 1436
54.6 52.5 1436
24.1 120.7 1436
30.3 120.2 1436
48.5 35.0 1436
45.5 -73.6 1436
48.9 2.3 1436
30.3 120.2 1436
46.6 142.8 1436
36.7 117.0 1436
43.6 51.2 1436
32.1 118.8 1437
53.2 50.1 1437
29.6 106.6 1437
35.6 139.8 1437
46.3 48.0 1437
35.6 139.7 1437
45.5 9.2 1437
50.6 36.6 1437
54.6 52.5 1437
34.1 -118.3 1437
34.0 -117.9 1437
53.5 48.9 1437
52.3 21.0 1437
23.5 121.0 1437
59.3 18.1 1438
23.5 121.0 1438
30.3 120.2 1438
54.2 37.6 1438
22.6 120.4 1438
-26.2 28.1 1438
30.7 104.1 1438
22.6 120.3 1438
43.1 12.1 1438
32.8 -97.8 1438
55.7 37.6 1438
23.0 120.2 1438
58.0 56.3 1438
44.5 -73.2 1438
56.8 53.2 1438
22.8 108.3 1439
23.5 121.0 1439
32.1 118.8 1439
50.0 36.3 1439
50.4 30.5 1439
53.0 36.1 1439
23.5 121.0 1439
50.4 30.5 1439
20.5 85.8 1439
24.1 120.7 1439
39.9 116.4 1439
46.3 48.0 1439
39.9 116.4 1439
55.0 50.1 1439
25.0 121.5 1439
55.2 61.4 1439
55.2 61.4 1439
25.3 55.3 1439
52.3 104.3 1439
30.3 120.2 1439
38.7 -77.2 1440
50.0 36.3 1440
34.8 113.7 1440
48.9 2.3 1440
23.1 113.3 1440
37.8 128.9 1440
29.9 121.5 1440
55.0 50.1 1440
23.1 113.3 1440
-5.5 -47.5 1440
45.5 -73.6 1440
23.5 121.0 1440
30.3 120.2 1440
45.5 -73.6 1440
55.2 59.7 1440
23.5 121.0 1440
55.0 73.4 1440
23.7 120.5 1440
55.2 61.4 1440
32.1 118.8 1441
23.1 113.3 1441
55.7 37.3 1441
46.5 30.7 1441
48.9 2.3 1441
24.1 120.7 1441
47.0 28.8 1441
49.8 73.1 1441
37.8 -97.8 1441
45.5 -73.6 1441
55.2 61.4 1441
48.0 68.0 1441
30.3 120.2 1441
55.3 61.4 1441
23.5 121.0 1441
39.9 116.4 1442
25.0 121.5 1442
34.8 113.7 1442
30.3 120.2 1442
28.2 113.1 1442
48.0 37.9 1442
-33.3 -66.3 1442
59.4 56.8 1442
41.9 -87.7 1442
48.9 2.3 1442
55.2 59.7 1442
30.3 120.2 1442
38.8 -90.7 1442
23.5 121.0 1442
55.2 59.7 1442
55.2 61.4 1443
54.9 61.4 1443
39.9 116.4 1443
22.3 114.2 1443
22.3 114.2 1443
55.8 49.1 1443
54.9 43.3 1443
50.5 30.5 1443
50.6 36.6 1443
55.0 73.4 1443
55.2 61.4 1443
40.0 45.0 1443
51.2 58.3 1443
55.4 43.8 1443
56.3 22.3 1444
48.5 35.0 1444
50.0 36.3 1444
31.0 121.4 1444
50.6 36.6 1444
48.0 37.8 1444
39.1 117.2 1444
40.5 -74.2 1444
56.8 53.2 1444
56.1 47.5 1444
11.0 77.0 1444
49.8 30.1 1444
25.0 121.5 1444
25.0 121.5 1444
45.5 -73.6 1444
56.6 47.9 1445
55.2 59.7 1445
22.3 114.2 1445
22.6 120.4 1445
23.5 121.0 1445
52.4 4.9 1445
57.0 41.0 1445
25.0 121.5 1445
55.3 52.1 1445
41.0 75.0 1445
17.4 78.5 1445
55.0 60.4 1445
34.1 -118.3 1445
45.5 -73.6 1445
48.7 37.6 1445
50.4 30.5 1445
55.2 59.7 1445
36.8 -114.1 1446
45.5 -73.6 1446
59.6 33.5 1446
39.9 116.4 1446
51.2 38.5 1446
55.8 37.6 1446
45.5 -73.6 1446
54.9 52.3 1446
47.6 -122.3 1446
36.7 117.0 1446
48.5 35.0 1446
30.3 120.2 1446
40.6 -77.9 1446
56.9 53.2 1447
51.7 36.2 1447
57.8 40.9 1447
45.8 126.7 1447
45.5 -73.6 1447
25.0 121.5 1447
7.1 -73.1 1447
39.9 116.4 1447
-34.1 150.8 1447
45.5 -73.6 1447
52.2 20.8 1447
48.9 2.3 1447
52.8 52.3 1447
33.7 73.1 1447
51.8 55.1 1447
-8.0 -34.8 1447
50.4 30.5 1447
40.5 -74.2 1447
55.2 61.4 1447
24.1 120.7 1448
45.5 -73.6 1448
23.5 121.0 1448
57.8 40.9 1448
55.8 49.2 1448
50.6 36.6 1448
55.2 61.4 1448
23.5 121.0 1448
53.5 49.3 1448
35.7 139.7 1448
55.2 61.4 1448
48.9 2.3 1448
44.4 26.1 1448
50.6 36.6 1448
23.5 87.3 1448
55.0 82.9 1448
49.8 30.1 1448
50.6 36.6 1448
25.0 121.5 1448
56.9 53.2 1449
32.1 118.8 1449
-8.2 113.7 1449
55.2 61.4 1449
13.8 100.5 1449
55.4 37.5 1449
24.6 120.8 1449
49.4 32.1 1450
58.1 52.7 1450
24.1 120.7 1450
30.3 120.2 1450
28.7 77.4 1450
55.6 51.8 1450
24.9 118.6 1450
30.3 120.2 1450
48.5 35.0 1450
55.2 59.7 1450
55.2 59.7 1450
45.8 126.7 1451
30.3 120.2 1451
14.6 121.0 1451
37.8 -97.8 1451
55.2 61.4 1451
55.7 37.6 1451
30.3 120.2 1451
55.0 50.1 1451
32.1 118.8 1451
46.6 14.3 1451
45.3 28.0 1451
45.0 34.1 1451
34.9 117.6 1451
51.5 46.0 1452
57.3 25.3 1452
29.9 121.5 1452
32.1 118.8 1452
22.3 114.2 1452
57.0 25.0 1452
47.2 39.7 1452
50.0 36.3 1452
25.4 55.4 1452
29.4 48.0 1452
29.4 48.0 1452
40.5 -74.2 1452
55.2 61.4 1452
55.0 60.1 1452
45.5 -73.6 1452
56.9 53.2 1452
45.8 126.7 1453
37.5 127.0 1453
54.3 48.4 1453
53.0 28.0 1453
30.7 104.1 1453
34.1 -118.3 1453
56.9 60.6 1453
4.6 -74.1 1453
39.2 -94.5 1453
13.1 80.3 1453
55.2 61.4 1453
55.7 37.6 1453
36.7 117.0 1453
41.8 123.4 1453
23.5 121.0 1453
36.7 117.0 1453
51.8 55.1 1453
23.5 121.0 1453
9.8 -63.2 1453
54.6 53.7 1454
22.3 114.2 1454
53.7 87.8 1454
25.0 121.5 1454
25.0 121.5 1454
55.3 61.4 1454
53.0 36.1 1454
20.0 77.0 1454
55.7 37.6 1454
51.5 -0.1 1454
56.9 60.6 1454
61.3 73.4 1454
55.4 43.8 1454
45.5 -73.6 1454
41.8 123.4 1454
61.3 73.4 1454
48.3 25.9 1454
25.0 121.5 1454
50.4 30.5 1454
55.0 73.4 1454
55.2 61.4 1454
56.9 53.2 1454
50.9 34.8 1455
56.4 44.1 1455
31.0 121.4 1455
50.4 30.5 1455
50.4 30.5 1455
50.4 30.5 1455
46.5 30.7 1455
50.6 36.6 1455
50.4 30.5 1455
31.5 74.3 1455
50.6 7.0 1455
48.7 44.5 1455
36.6 128.7 1455
25.0 121.5 1455
51.3 37.8 1455
55.7 37.6 1455
39.9 116.4 1455
-4.6 55.7 1455
47.0 28.8 1455
53.2 50.1 1455
50.4 30.5 1455
25.0 102.7 1455
39.1 117.2 1455
55.2 61.4 1455
36.1 103.8 1455
30.3 120.2 1456
51.5 81.3 1456
23.5 121.0 1456
36.8 -114.1 1456
23.5 121.0 1456
54.7 25.3 1456
45.5 -73.6 1456
32.1 118.8 1456
37.5 127.0 1456
53.3 34.4 1456
56.8 53.2 1456
55.0 60.1 1456
54.3 48.4 1456
23.5 121.0 1456
56.2 47.3 1456
31.8 120.0 1457
32.1 118.8 1457
23.5 121.0 1457
-19.7 -50.2 1457
50.4 30.5 1457
25.0 121.5 1457
56.9 53.2 1457
24.1 120.7 1457
38.0 23.7 1457
-34.9 -56.2 1457
52.4 4.9 1457
61.3 73.4 1457
29.9 121.5 1457
6.3 -75.6 1457
23.5 121.0 1457
34.0 -117.9 1457
22.3 114.2 1457
23.5 121.0 1457
37.4 -121.9 1457
22.3 114.2 1457
23.5 121.0 1457
39.5 -74.5 1458
32.1 118.8 1458
49.8 30.1 1458
54.4 18.7 1458
30.1 31.3 1458
23.5 121.0 1458
21.2 79.7 1458
55.8 37.6 1458
56.0 92.9 1458
36.7 117.0 1458
22.3 114.2 1458
32.1 118.8 1458
55.7 37.6 1458
48.5 35.0 1458
36.7 117.0 1458
48.5 35.0 1459
37.5 127.0 1459
48.9 2.3 1459
30.3 120.2 1459
37.5 127.0 1459
53.5 -2.1 1459
24.9 118.6 1459
25.0 121.5 1459
49.8 30.1 1459
54.7 25.3 1459
54.3 48.4 1459
22.8 108.3 1459
51.7 55.4 1459
55.0 73.4 1459
55.2 61.4 1459
23.1 113.3 1460
30.7 104.1 1460
23.5 121.0 1460
30.3 120.2 1460
22.8 108.3 1460
22.8 108.3 1460
56.5 43.6 1460
55.9 37.4 1460
30.3 120.2 1460
24.1 120.7 1460
45.5 -73.6 1460
28.6 115.9 1460
55.0 73.4 1460
48.5 35.0 1460
56.9 53.2 1460
39.9 116.4 1461
32.1 118.8 1461
-22.8 -43.2 1461
30.7 104.1 1461
37.5 127.0 1461
42.9 -78.9 1461
45.8 126.7 1461
53.0 36.1 1461
25.0 121.5 1461
60.2 60.0 1461
37.5 127.0 1461
55.0 73.4 1461
51.7 36.2 1461
53.2 50.1 1461
34.0 -117.9 1461
55.2 61.4 1461
48.6 45.7 1461
56.8 53.2 1461
55.7 37.6 1462
60.2 24.9 1462
54.9 52.3 1462
55.7 37.6 1462
45.5 -73.6 1462
-22.5 -43.5 1462
30.9 120.1 1462
30.1 31.3 1462
56.9 53.2 1462
45.5 -73.6 1462
39.1 117.2 1462
25.0 102.7 1462
35.6 139.8 1463
50.6 36.6 1463
50.9 128.5 1463
32.1 118.8 1463
35.6 139.8 1463
46.8 29.5 1463
34.0 -118.3 1463
54.8 56.0 1463
50.9 4.4 1463
23.5 121.0 1463
55.7 37.6 1463
36.7 117.0 1463
48.9 2.3 1463
56.9 53.2 1463
32.1 118.8 1464
32.1 118.8 1464
23.1 113.3 1464
24.1 120.7 1464
45.5 -73.6 1464
56.5 53.8 1464
56.2 47.3 1464
34.1 -118.3 1464
32.1 118.8 1464
39.9 116.4 1464
55.2 61.4 1464
39.9 116.4 1464
29.4 48.0 1464
55.0 50.1 1464
51.7 55.4 1464
35.6 139.8 1464
2.5 112.5 1464
54.8 32.0 1464
56.8 53.2 1464
55.2 61.4 1464
35.6 139.8 1465
23.5 121.0 1465
55.9 37.7 1465
53.2 48.5 1465
55.0 73.4 1465
43.8 87.6 1465
22.3 114.2 1465
55.2 61.4 1465
36.7 117.0 1465
55.0 73.4 1465
36.1 103.8 1465
40.2 44.5 1465
56.9 53.2 1465
23.5 121.0 1465
55.0 73.4 1465
17.4 78.5 1465
35.6 139.8 1466
25.0 121.5 1466
50.0 36.3 1466
53.1 36.2 1466
35.6 139.7 1466
51.7 39.2 1466
22.3 114.2 1466
55.2 61.4 1466
34.8 113.7 1466
36.6 128.7 1467
34.8 113.7 1467
51.2 0.1 1467
33.7 -84.4 1467
4.6 -74.1 1467
39.9 116.4 1467
55.3 61.4 1467
13.7 -89.2 1467
30.3 120.2 1467
30.0 31.2 1467
30.3 120.2 1467
23.5 121.0 1467
24.9 118.6 1467
26.6 106.7 1467
51.8 55.1 1467
55.2 61.4 1467
55.2 61.4 1467
55.3 61.4 1467
42.0 43.5 1467
20.0 77.0 1468
23.5 121.0 1468
10.5 -66.9 1468
58.6 49.7 1468
-29.0 24.0 1468
55.6 42.0 1468
23.0 120.2 1468
23.5 121.0 1468
-22.3 -42.5 1468
50.0 36.3 1468
45.3 -73.9 1468
54.9 37.4 1468
56.9 60.6 1468
36.1 103.8 1468
54.8 56.0 1468
51.5 46.0 1469
56.8 53.2 1469
51.7 36.2 1469
45.5 -73.6 1469
34.8 113.7 1469
45.3 -73.9 1469
39.9 116.4 1469
30.3 120.2 1469
55.2 59.7 1469
55.3 38.7 1470
48.9 2.3 1470
30.3 120.2 1470
53.0 36.1 1470
23.5 121.0 1470
55.2 61.4 1470
29.4 48.0 1470
36.7 117.0 1470
56.0 24.0 1470
30.3 120.2 1470
45.0 41.1 1470
49.4 32.1 1470
23.5 121.0 1470
45.5 -73.6 1470
53.2 50.1 1470
57.2 65.5 1470
34.1 -118.3 1470
61.3 73.4 1470
48.9 2.3 1471
55.2 61.4 1471
25.0 121.3 1471
55.2 61.4 1471
50.6 36.6 1471
35.6 139.7 1471
30.3 120.2 1471
22.9 120.3 1471
40.7 -74.2 1471
35.7 51.3 1471
45.5 -73.6 1471
52.8 52.3 1471
25.0 121.5 1471
40.0 45.0 1471
51.2 58.3 1471
30.3 120.2 1471
23.1 113.3 1472
37.5 127.0 1472
29.3 48.1 1472
30.3 120.2 1472
51.3 37.8 1472
25.0 121.3 1472
55.7 37.6 1472
47.6 -122.3 1472
29.9 121.5 1472
42.9 71.4 1472
54.3 48.4 1472
34.1 -118.3 1472
23.5 121.0 1473
57.4 41.2 1473
30.3 120.2 1473
49.9 10.9 1473
55.2 61.4 1473
-22.0 -42.4 1473
25.0 121.5 1473
23.5 121.0 1473
45.5 -73.6 1473
61.3 73.4 1473
54.8 32.0 1473
55.2 61.4 1473
49.8 24.0 1473
55.2 61.4 1473
55.2 61.4 1473
54.3 48.4 1473
39.1 117.2 1473
29.3 48.1 1474
23.3 121.3 1474
54.3 48.4 1474
56.2 47.3 1474
49.4 32.1 1474
40.7 109.8 1474
43.6 -79.8 1474
55.7 37.6 1474
52.7 41.4 1474
13.8 100.5 1474
54.7 20.5 1474
50.5 30.5 1474
55.2 59.7 1474
25.0 102.7 1474
48.9 2.3 1475
25.4 55.4 1475
25.0 121.5 1475
45.5 -73.6 1475
30.3 120.2 1475
-25.3 -57.6 1475
52.3 21.0 1475
39.1 117.2 1475
55.2 61.4 1475
56.7 37.2 1475
17.4 78.5 1475
-12.3 -66.2 1475
53.0 36.1 1475
34.0 -117.9 1475
50.4 30.5 1476
48.9 2.3 1476
9.2 7.2 1476
23.5 121.0 1476
44.7 10.6 1476
48.9 2.2 1476
56.1 40.4 1476
55.7 37.6 1476
34.1 -118.3 1476
24.1 120.7 1476
55.8 37.6 1476
50.0 36.3 1476
50.6 36.6 1476
53.5 49.3 1476
51.7 55.4 1476
55.2 61.4 1476
34.8 113.7 1477
32.1 118.8 1477
37.5 -122.4 1477
34.8 113.7 1477
38.7 -77.2 1477
30.3 120.2 1477
50.5 30.5 1477
39.9 116.4 1477
47.5 42.2 1477
30.3 120.2 1477
30.3 120.2 1477
45.9 4.7 1477
31.9 117.3 1477
45.3 -73.9 1477
56.9 53.2 1477
19.0 72.8 1477
55.2 61.4 1477
30.3 120.2 1478
60.9 76.6 1478
54.3 48.4 1478
13.0 77.6 1478
23.5 121.0 1478
34.7 135.6 1478
23.5 121.0 1478
54.3 48.4 1478
55.2 61.4 1478
35.6 139.8 1478
51.8 55.1 1478
30.3 120.2 1478
30.3 120.2 1478
55.2 61.4 1478
56.9 60.6 1479
53.3 39.1 1479
16.2 120.8 1479
-6.8 39.3 1479
23.5 121.0 1479
51.3 37.8 1479
55.3 61.4 1479
55.3 61.4 1479
50.0 36.3 1479
55.2 61.4 1479
30.3 120.2 1479
55.2 61.4 1479
36.1 103.8 1479
25.0 121.5 1479
36.7 117.0 1479
35.6 139.8 1479
51.8 55.1 1479
55.0 73.4 1479
45.5 -73.6 1479
29.7 -95.4 1479
55.0 73.4 1479
29.3 48.1 1480
23.5 121.0 1480
35.7 140.0 1480
23.5 121.0 1480
23.5 121.0 1480
-25.4 -49.3 1480
35.4 139.6 1480
47.2 39.7 1480
55.2 61.4 1480
36.6 128.7 1480
55.3 61.4 1480
37.3 -121.9 1480
30.3 120.2 1480
23.0 120.2 1480
35.2 115.4 1480
39.1 117.2 1480
43.9 125.3 1480
45.5 -73.6 1480
52.8 52.3 1480
45.0 34.1 1480
-34.6 -58.4 1480
17.4 78.5 1480
10.7 123.0 1481
37.5 -122.4 1481
55.0 59.0 1481
48.5 35.0 1481
29.3 48.1 1481
23.5 121.0 1481
45.5 -73.6 1481
52.4 30.8 1481
37.8 128.9 1481
48.9 2.3 1481
37.5 127.0 1481
45.0 23.8 1481
52.0 113.6 1481
50.9 4.4 1481
48.9 2.3 1481
47.5 35.6 1481
30.3 120.2 1481
56.5 85.0 1481
55.0 82.9 1481
39.1 117.2 1481
30.3 120.2 1482
59.9 30.3 1482
51.8 107.4 1482
51.7 36.2 1482
53.0 36.1 1482
55.2 61.4 1482
10.8 106.6 1482
55.6 51.8 1482
38.0 23.7 1482
36.7 117.0 1482
36.8 -119.8 1482
35.7 51.4 1482
45.5 -73.6 1482
30.7 104.1 1482
57.2 65.5 1482
34.1 -118.3 1482
26.3 -81.8 1482
23.1 113.3 1483
25.3 55.3 1483
37.5 127.0 1483
46.3 48.0 1483
52.3 104.3 1483
40.5 -74.2 1483
55.3 52.0 1483
-34.6 -58.4 1483
55.2 61.4 1483
55.2 61.4 1483
49.6 34.5 1483
50.3 28.7 1483
55.3 61.4 1483
55.3 61.4 1483
22.5 114.1 1483
29.9 121.5 1484
55.7 37.6 1484
53.4 83.8 1484
22.5 114.1 1484
51.7 36.2 1484
23.5 121.0 1484
3.4 -76.5 1484
25.0 121.5 1484
56.7 66.3 1484
34.7 113.5 1484
41.0 75.0 1484
55.0 50.1 1484
54.3 48.4 1484
55.7 37.6 1484
51.2 58.3 1484
19.0 72.8 1484
54.8 32.0 1484
-34.1 150.8 1485
38.3 26.8 1485
50.5 30.5 1485
30.3 120.2 1485
53.5 48.9 1485
37.5 -122.4 1485
39.3 -76.7 1485
55.2 61.4 1485
56.0 37.9 1485
55.7 37.6 1485
51.5 46.1 1485
24.9 118.6 1485
33.7 -112.0 1485
36.1 103.8 1485
42.0 24.9 1485
48.9 36.3 1485
24.0 120.6 1485
53.2 50.1 1485
22.3 114.2 1486
33.8 35.8 1486
45.3 -73.9 1486
50.6 36.6 1486
53.0 36.1 1486
55.0 60.4 1486
47.2 39.7 1486
36.2 -86.8 1486
25.0 121.5 1486
50.6 26.2 1486
51.5 -0.1 1486
23.5 121.0 1486
48.9 2.3 1486
23.5 121.0 1486
37.3 -121.9 1486
23.5 121.0 1486
30.3 120.2 1486
55.2 61.4 1486
23.5 121.0 1486
52.3 21.0 1486
23.7 90.4 1486
56.9 35.9 1486
23.5 121.0 1487
-22.8 -43.2 1487
31.8 120.0 1487
55.2 61.4 1487
41.9 -88.3 1487
61.3 73.4 1487
39.9 116.4 1487
23.0 120.2 1487
32.1 118.8 1487
55.3 52.1 1487
-12.0 -77.0 1487
40.0 45.0 1487
30.3 120.2 1487
52.4 4.9 1488
25.0 121.5 1488
25.0 121.5 1488
4.6 -74.1 1488
24.0 121.6 1488
47.2 39.7 1488
24.5 118.1 1488
52.5 103.9 1488
45.5 -73.6 1488
-34.1 150.8 1489
56.1 47.5 1489
-34.1 150.8 1489
51.1 93.6 1489
22.3 114.2 1489
55.2 61.4 1489
22.6 120.4 1489
55.8 49.1 1489
50.4 30.5 1489
29.9 121.5 1489
55.0 50.1 1489
39.9 116.4 1489
48.5 35.0 1489
55.2 61.4 1489
24.1 120.7 1489
23.5 121.0 1490
50.0 36.3 1490
45.5 -73.6 1490
30.3 120.2 1490
32.1 118.8 1490
48.9 2.3 1490
23.1 113.3 1490
55.2 61.4 1490
55.7 84.9 1490
56.3 44.0 1490
51.3 9.5 1490
50.4 36.9 1490
24.9 118.6 1490
13.1 80.3 1490
24.9 118.6 1490
62.0 129.7 1490
45.5 -73.6 1490
37.5 -122.4 1490
23.5 121.0 1490
39.9 116.4 1490
45.5 -73.6 1490
41.0 75.0 1490
55.2 61.4 1490
39.9 116.4 1490
34.1 -118.3 1490
55.0 73.4 1490
34.7 113.5 1490
45.5 -73.6 1490
32.1 118.8 1490
31.0 121.4 1491
22.8 108.3 1491
45.0 39.0 1491
32.1 118.8 1491
51.3 37.8 1491
55.2 61.4 1491
56.2 47.3 1491
36.7 117.0 1491
25.0 121.5 1491
55.8 37.6 1491
48.0 37.9 1491
33.9 118.3 1491
25.0 121.5 1491
40.5 -74.2 1491
50.6 36.6 1491
39.9 116.4 1491
10.5 -66.9 1491
53.8 87.1 1491
55.2 61.4 1491
56.9 60.6 1492
55.0 59.0 1492
22.5 114.1 1492
48.3 38.1 1492
52.4 4.9 1492
33.7 -84.4 1492
55.9 26.5 1492
32.1 118.8 1492
57.8 28.3 1492
55.6 13.0 1492
55.2 61.4 1492
55.2 61.4 1492
55.2 61.4 1492
23.5 121.0 1492
45.5 -73.6 1492
51.2 58.6 1492
30.3 120.2 1492
40.6 -75.4 1493
55.8 49.1 1493
56.8 53.2 1493
30.7 104.1 1493
22.8 108.3 1493
32.1 118.8 1493
51.6 46.1 1493
55.7 37.6 1493
55.3 61.4 1493
55.3 61.4 1493
51.7 55.4 1493
39.9 116.4 1493
55.7 37.6 1494
55.8 -4.3 1494
31.0 121.4 1494
55.2 61.4 1494
44.7 37.8 1494
39.9 116.4 1494
23.1 113.3 1494
40.4 -3.7 1494
56.2 101.6 1494
50.0 36.3 1494
39.9 116.4 1494
23.5 121.0 1494
36.7 117.0 1494
59.3 18.1 1494
48.9 2.3 1494
50.4 30.5 1494
25.0 121.5 1495
25.0 121.5 1495
32.8 -80.1 1495
55.2 59.7 1495
55.2 61.4 1495
16.3 102.6 1495
28.6 115.9 1495
35.6 139.7 1495
52.3 21.0 1495
51.8 55.1 1495
23.5 121.0 1495
30.3 120.2 1495
31.0 121.4 1495
48.9 2.3 1495
55.3 61.4 1495
49.1 33.4 1495
51.5 -0.1 1496
23.1 113.3 1496
48.5 32.3 1496
48.5 35.0 1496
57.2 65.5 1496
56.9 53.2 1496
39.9 116.4 1496
55.3 61.4 1496
55.2 61.4 1496
56.9 60.6 1497
45.5 -73.6 1497
31.0 121.4 1497
51.7 39.2 1497
55.2 61.4 1497
55.3 61.4 1497
48.3 1.3 1497
23.5 121.0 1497
25.7 -100.3 1497
55.7 37.6 1497
30.3 120.2 1497
25.0 121.5 1497
40.7 109.8 1497
48.5 32.3 1497
48.5 32.3 1497
23.1 113.3 1497
23.5 121.0 1498
-22.9 -43.2 1498
54.4 61.3 1498
47.0 28.9 1498
55.2 61.4 1498
55.2 61.4 1498
51.3 9.5 1498
11.0 77.0 1498
49.6 34.5 1498
36.7 -78.4 1498
53.2 50.1 1498
45.5 -73.6 1498
51.7 36.2 1498
46.1 -73.9 1498
48.5 32.3 1498
55.2 61.4 1498
55.4 43.8 1498
51.2 58.3 1498
40.0 45.0 1498
55.7 37.6 1499
32.1 118.8 1499
23.0 120.2 1499
45.5 -73.6 1499
55.2 61.4 1499
54.6 39.7 1499
23.5 121.0 1499
48.9 2.3 1499
46.0 25.0 1499
34.1 -118.3 1499
55.7 37.6 1499
45.5 -73.6 1499
17.3 78.5 1499
22.5 114.1 1499
48.5 32.3 1499
36.7 117.0 1499
55.2 61.4 1499
55.7 37.6 1500
30.1 121.1 1500
22.8 108.3 1500
23.5 121.0 1500
37.8 128.9 1500
48.3 40.3 1500
44.7 37.8 1500
47.2 38.9 1500
54.6 52.8 1500
61.3 73.4 1500
34.8 113.7 1500
49.4 27.0 1500
56.4 37.5 1500
55.0 73.4 1500
39.9 116.4 1500
55.2 59.7 1500
36.1 103.8 1500
56.1 40.4 1501
48.9 2.3 1501
36.0 -115.2 1501
54.2 45.2 1501
48.9 2.3 1501
23.1 113.3 1501
24.9 67.1 1501
34.0 -118.3 1501
35.0 135.8 1501
55.7 37.6 1501
52.0 47.8 1501
51.7 55.4 1501
4.8 -75.7 1501
51.7 55.4 1501
23.5 121.0 1501
37.5 -122.4 1502
49.0 33.6 1502
55.8 37.6 1502
48.9 2.3 1502
23.1 113.3 1502
23.5 121.0 1502
47.7 -122.3 1502
31.0 121.4 1502
40.7 -74.2 1502
55.2 61.4 1502
40.0 45.0 1502
51.7 55.4 1502
45.5 -73.6 1502
30.7 104.1 1502
-22.8 -43.3 1502
36.7 117.0 1502
52.8 52.3 1502
36.6 128.7 1503
48.9 2.3 1503
53.7 87.8 1503
45.5 -73.6 1503
48.5 35.0 1503
41.1 29.0 1503
55.2 61.4 1503
30.7 104.1 1503
48.9 2.3 1503
39.7 -105.1 1503
23.5 121.0 1503
55.8 37.6 1503
50.4 30.5 1503
-6.6 106.8 1503
51.7 36.2 1503
40.2 44.5 1503
52.8 52.3 1503
52.8 52.3 1503
55.7 37.6 1503
23.1 113.3 1504
45.0 39.0 1504
55.2 59.7 1504
55.7 37.6 1504
61.3 73.4 1504
51.5 -0.1 1504
24.1 120.7 1504
48.9 2.3 1504
46.0 25.0 1504
19.4 -99.1 1504
30.6 114.3 1504
36.7 117.0 1504
55.7 37.6 1504
39.9 116.4 1505
51.8 55.1 1505
22.8 108.3 1505
45.5 -73.6 1505
23.6 120.3 1505
30.3 120.2 1505
46.0 25.0 1505
43.3 76.9 1505
17.4 78.5 1505
55.2 61.4 1505
22.6 120.3 1505
37.5 -122.4 1505
22.3 114.2 1505
47.5 19.1 1505
56.3 114.9 1505
23.1 113.3 1505
36.7 117.0 1505
50.4 30.5 1505
55.2 59.7 1505
53.2 50.1 1505
31.0 121.4 1506
45.5 -73.6 1506
25.0 121.5 1506
47.2 39.7 1506
25.0 121.5 1506
22.3 114.2 1506
53.7 52.4 1506
-34.6 -58.4 1506
37.5 127.0 1506
30.3 120.2 1506
35.6 139.8 1506
55.0 60.4 1506
50.6 36.6 1506
30.3 120.2 1506
42.0 43.5 1507
55.2 61.4 1507
55.2 61.4 1507
45.0 39.0 1507
30.3 120.2 1507
28.6 115.9 1507
34.1 -118.3 1507
55.7 37.6 1507
4.6 -74.1 1507
51.7 36.2 1507
45.0 34.1 1507
49.4 32.1 1507
48.5 32.3 1507
25.0 121.5 1507
55.0 73.4 1507
48.5 32.3 1507
55.2 61.4 1507
37.5 127.0 1508
32.1 118.8 1508
37.5 -122.4 1508
53.2 50.7 1508
23.1 113.3 1508
54.3 48.4 1508
53.0 36.1 1508
54.3 48.4 1508
23.5 121.0 1508
30.3 120.2 1508
23.1 113.3 1508
55.0 50.1 1508
-30.4 30.7 1508
46.3 48.0 1508
44.9 37.3 1508
22.3 114.2 1508
55.2 61.4 1508
51.2 53.0 1508
55.2 61.4 1508
55.2 61.4 1508
39.9 116.4 1508
55.2 61.4 1508
26.6 106.7 1508
39.1 -94.6 1508
55.2 61.4 1508
53.1 36.2 1509
39.1 -94.6 1509
50.6 36.6 1509
23.5 121.0 1509
53.2 50.1 1509
23.5 121.0 1509
31.8 35.2 1509
37.5 127.0 1509
24.9 118.6 1509
30.3 120.2 1509
37.5 127.0 1509
57.8 40.9 1510
24.8 121.0 1510
43.1 131.6 1510
30.3 120.2 1510
22.5 114.1 1510
32.1 118.8 1510
31.8 120.0 1510
60.2 60.0 1510
23.5 121.0 1510
50.4 30.5 1510
52.3 21.0 1510
55.6 109.3 1510
25.0 121.5 1510
53.7 91.7 1510
55.2 61.4 1510
-12.3 -66.2 1510
30.3 120.2 1511
32.1 118.8 1511
37.5 127.0 1511
55.2 61.4 1511
55.3 61.4 1511
14.6 121.0 1511
51.2 58.3 1511
22.6 120.4 1511
51.3 58.2 1511
30.3 120.2 1511
50.1 8.7 1511
51.7 55.4 1511
34.1 -118.3 1511
45.0 34.1 1511
55.2 61.4 1512
51.7 39.2 1512
50.4 30.5 1512
50.1 8.7 1512
41.0 29.0 1512
56.1 40.4 1512
-33.5 143.2 1512
32.1 118.8 1512
36.7 117.0 1512
29.3 47.7 1512
24.1 120.7 1512
40.6 -74.5 1512
23.5 121.0 1512
45.5 -73.6 1512
45.8 126.7 1513
55.0 59.0 1513
45.3 -73.9 1513
25.0 121.5 1513
25.0 121.5 1513
25.0 121.5 1513
50.6 36.6 1513
55.0 50.1 1513
32.1 118.8 1513
45.5 -73.6 1514
30.3 120.2 1514
22.8 108.3 1514
51.5 -0.1 1514
48.5 35.0 1514
39.9 116.4 1514
61.3 73.4 1514
46.3 48.0 1514
45.5 -73.6 1514
58.9 60.8 1514
48.3 25.9 1514
55.2 61.4 1514
45.5 -73.6 1514
45.5 -73.6 1514
55.2 61.4 1514
53.7 91.7 1514
55.8 49.2 1515
32.1 118.8 1515
50.0 36.3 1515
55.2 61.4 1515
37.3 -121.9 1515
54.2 45.2 1515
21.0 105.9 1515
13.8 100.5 1515
35.7 51.3 1515
55.2 61.4 1515
45.5 -73.6 1515
51.3 58.2 1515
48.5 32.3 1515
48.9 24.7 1516
38.7 -77.2 1516
32.1 118.8 1516
57.8 40.9 1516
53.0 36.1 1516
55.3 52.1 1516
54.3 48.4 1516
55.2 61.4 1516
23.5 121.0 1516
48.5 32.3 1516
45.5 -73.6 1517
23.1 113.3 1517
25.0 121.5 1517
45.8 126.7 1517
55.1 36.6 1517
55.2 61.4 1517
25.0 121.5 1517
44.8 20.5 1517
30.6 114.3 1517
55.7 37.6 1517
55.7 37.6 1517
1.3 103.9 1517
32.1 118.8 1517
36.7 117.0 1517
45.3 -73.9 1517
55.3 61.4 1517
54.3 48.4 1518
51.7 36.2 1518
39.5 116.7 1518
48.9 36.3 1518
23.5 121.0 1518
28.2 113.1 1518
48.5 35.0 1518
50.6 26.2 1518
55.8 49.2 1518
54.8 56.0 1518
39.9 116.4 1518
55.2 61.4 1518
51.5 81.3 1518
51.5 -0.5 1518
21.0 105.9 1518
32.1 118.8 1518
55.2 61.4 1518
45.3 -73.9 1518
56.1 40.4 1518
45.5 -73.6 1518
23.5 121.0 1518
53.0 36.1 1518
23.5 121.0 1518
38.7 -77.2 1519
30.3 120.2 1519
17.4 78.5 1519
24.1 120.7 1519
36.6 127.5 1519
31.0 121.4 1519
55.2 59.7 1519
55.3 61.4 1519
49.4 32.1 1519
37.8 -97.8 1519
55.3 61.4 1519
48.5 35.0 1519
56.1 40.4 1519
55.7 37.6 1519
50.6 36.6 1519
51.2 58.3 1519
25.0 102.7 1519
25.0 121.3 1519
60.0 10.8 1519
53.1 49.9 1520
55.3 61.4 1520
36.1 103.8 1520
55.7 37.6 1520
39.9 116.4 1520
37.5 127.0 1520
53.4 83.8 1520
31.9 117.3 1520
55.6 51.8 1520
50.4 30.5 1520
49.4 27.0 1520
17.4 78.5 1520
48.5 32.3 1520
23.5 121.0 1520
45.5 -73.6 1520
55.3 61.4 1520
45.3 -73.9 1521
13.7 -89.2 1521
43.6 1.6 1521
30.1 31.3 1521
30.3 120.2 1521
41.7 44.8 1521
31.0 121.4 1521
55.2 61.4 1521
17.4 78.5 1521
29.1 119.6 1521
25.0 121.5 1521
50.3 127.5 1521
39.9 116.4 1521
23.5 121.0 1521
44.5 34.2 1521
39.9 116.4 1521
54.4 86.2 1521
55.7 37.6 1521
48.5 32.3 1521
30.3 120.2 1521
45.5 -73.6 1522
30.3 120.2 1522
55.7 37.6 1522
39.5 116.7 1522
35.7 51.4 1522
45.5 -73.6 1522
41.3 -104.7 1522
17.5 78.5 1522
41.2 -73.7 1522
17.4 78.5 1522
40.9 -74.0 1522
48.9 2.3 1523
22.6 120.4 1523
52.3 104.3 1523
51.7 39.2 1523
31.0 121.4 1523
30.3 120.2 1523
50.4 30.5 1523
19.4 -99.1 1523
36.7 117.0 1523
50.6 36.6 1523
51.2 58.3 1523
51.8 55.1 1523
48.6 45.7 1523
25.0 121.5 1523
44.5 34.2 1523
-26.2 28.1 1523
23.1 113.3 1524
56.9 53.2 1524
55.7 37.6 1524
23.0 120.2 1524
41.0 29.0 1524
30.3 120.2 1524
50.6 36.6 1524
50.4 30.5 1524
50.6 26.2 1524
41.3 -104.7 1524
55.0 50.1 1524
51.2 58.3 1524
48.5 32.3 1524
52.8 52.3 1524
30.3 120.2 1524
55.7 37.6 1524
39.2 -8.8 1524
53.7 91.7 1524
45.5 -73.6 1524
43.9 125.3 1524
25.0 121.3 1524
50.6 26.2 1525
55.8 37.6 1525
58.6 49.7 1525
53.1 46.6 1525
57.0 25.0 1525
30.3 120.2 1525
32.1 118.8 1525
31.8 120.0 1525
55.2 61.4 1525
55.0 50.1 1525
46.8 29.5 1525
23.5 121.0 1525
-23.5 -46.6 1525
50.4 30.5 1525
24.1 120.7 1525
56.1 94.6 1525
53.7 91.4 1525
28.6 115.9 1525
61.3 73.4 1525
31.9 117.3 1525
28.6 115.9 1525
23.5 121.0 1525
37.5 127.0 1525
56.9 53.2 1525
30.3 120.2 1525
48.6 39.3 1526
45.3 -73.9 1526
23.5 121.0 1526
55.7 37.6 1526
55.7 37.6 1526
35.3 139.5 1526
29.9 121.5 1526
23.5 121.0 1526
46.0 15.9 1526
50.4 30.5 1526
55.0 60.1 1526
45.5 -73.6 1526
42.0 43.5 1526
59.4 13.5 1526
55.2 61.4 1526
55.0 60.4 1526
43.2 -77.7 1526
45.5 -73.6 1526
25.0 121.5 1526
38.7 -77.2 1527
23.1 113.3 1527
30.3 120.2 1527
37.7 -121.9 1527
23.1 113.3 1527
23.5 121.0 1527
38.9 -76.8 1527
23.7 90.4 1527
37.3 -121.9 1527
32.1 118.8 1527
13.8 100.5 1527
50.5 30.5 1527
39.9 116.4 1527
51.5 46.1 1527
41.0 75.0 1527
-22.8 -43.2 1527
61.3 73.4 1527
51.8 55.1 1527
53.1 49.9 1527
25.0 121.5 1527
28.6 115.9 1527
23.5 121.0 1527
48.9 2.3 1527
23.5 121.0 1528
45.8 126.7 1528
55.0 60.1 1528
38.7 -9.1 1528
56.1 40.4 1528
23.5 121.0 1528
31.0 121.4 1528
37.5 127.0 1528
10.5 -66.9 1528
30.7 104.1 1528
32.1 118.8 1528
37.5 127.0 1528
26.2 91.7 1528
48.9 2.3 1528
50.0 36.3 1528
49.8 30.1 1528
22.3 114.2 1528
39.9 115.3 1528
55.0 50.1 1528
48.5 32.3 1528
53.0 36.1 1528
41.0 29.0 1528
33.6 -85.1 1529
45.5 -73.6 1529
32.1 118.8 1529
55.2 61.4 1529
55.7 37.6 1529
54.2 45.2 1529
23.5 121.0 1529
36.9 30.7 1529
13.8 100.5 1529
-33.0 -71.5 1529
55.2 59.7 1529
24.1 120.7 1529
54.2 37.6 1529
45.5 -73.6 1529
23.5 121.0 1529
39.9 116.4 1529
-20.5 -47.4 1529
10.8 106.6 1530
30.3 120.2 1530
52.5 103.8 1530
23.5 121.0 1530
38.9 -77.0 1530
48.0 37.8 1530
25.0 121.5 1530
23.5 121.0 1530
51.5 -0.1 1530
55.7 37.6 1530
45.2 7.8 1530
39.9 116.4 1530
50.6 36.6 1530
55.2 61.4 1530
23.5 121.0 1530
31.0 121.4 1530
24.5 117.7 1530
48.5 32.3 1530
45.5 -73.6 1531
43.1 131.6 1531
22.5 114.1 1531
55.7 37.6 1531
31.0 121.4 1531
45.5 -73.6 1531
41.7 44.8 1531
55.7 37.6 1531
45.5 -73.6 1531
14.6 121.0 1531
24.1 120.7 1531
49.5 24.0 1531
17.4 78.5 1531
55.2 61.4 1531
48.5 32.3 1531
51.5 -0.1 1531
51.7 39.2 1531
40.7 -73.7 1531
45.5 -73.6 1531
39.9 116.4 1531
29.3 48.1 1532
23.5 121.0 1532
22.6 120.3 1532
48.0 37.8 1532
23.5 121.0 1532
32.1 118.8 1532
25.0 121.5 1532
34.3 108.9 1532
25.1 121.7 1532
30.3 120.2 1532
32.1 118.8 1532
55.3 61.4 1532
22.3 114.2 1532
55.2 61.4 1532
-23.6 -46.9 1532
56.4 41.3 1532
50.7 3.2 1532
38.7 -9.1 1532
54.6 39.7 1533
43.2 -77.7 1533
45.5 -73.6 1533
55.2 34.3 1533
-6.2 106.8 1533
56.0 37.2 1533
55.7 37.6 1533
23.5 121.0 1533
34.3 108.9 1533
23.1 113.3 1533
55.2 61.4 1533
55.0 50.1 1533
22.6 120.4 1533
35.6 139.7 1533
30.3 120.2 1533
50.6 36.6 1533
19.4 -99.1 1533
48.0 68.0 1533
36.7 117.0 1533
45.5 -73.6 1533
39.9 116.4 1534
22.8 108.3 1534
55.3 61.4 1534
55.2 61.4 1534
23.5 121.0 1534
20.0 77.0 1534
53.2 48.5 1534
55.7 37.6 1534
32.1 118.8 1534
44.8 10.5 1534
34.8 113.7 1534
35.2 115.4 1534
48.5 35.0 1534
51.5 31.3 1534
-22.8 -43.2 1534
28.6 115.9 1534
55.3 61.4 1534
48.5 32.3 1534
56.8 53.2 1534
48.5 32.3 1534
19.5 72.8 1534
36.7 117.0 1534
30.3 120.2 1534
35.6 139.8 1534
48.5 32.3 1534
51.5 -0.1 1535
56.7 60.8 1535
51.3 9.5 1535
19.7 -101.1 1535
50.4 30.5 1535
54.3 48.4 1535
24.1 120.7 1535
55.5 47.5 1535
51.3 37.8 1535
23.5 121.0 1535
37.4 -121.9 1535
36.6 128.7 1535
45.5 -73.6 1535
47.9 35.3 1535
55.2 61.4 1535
53.5 49.3 1536
48.7 9.0 1536
34.8 113.7 1536
52.3 104.3 1536
37.5 127.0 1536
51.7 39.2 1536
37.7 -25.7 1536
23.5 121.0 1536
56.9 53.2 1536
45.5 9.2 1536
55.2 61.4 1536
21.0 105.9 1536
50.4 30.5 1536
55.2 61.4 1536
47.2 39.7 1536
53.3 -6.3 1536
51.5 46.0 1536
56.0 37.2 1536
31.0 121.4 1536
53.1 45.4 1536
43.9 125.3 1536
49.2 -123.0 1536
37.5 121.4 1536
30.7 104.1 1536
45.5 -73.6 1536
48.5 32.3 1536
48.5 32.3 1536
25.0 121.5 1537
-36.8 -73.0 1537
41.0 29.0 1537
52.4 4.9 1537
30.7 104.1 1537
38.7 -77.2 1537
44.5 34.2 1537
55.2 61.4 1537
56.0 37.2 1537
54.2 45.2 1537
30.3 120.2 1537
50.3 28.7 1537
51.5 46.0 1537
56.0 37.2 1537
55.0 50.1 1537
34.8 113.7 1537
54.6 39.7 1537
19.4 -99.1 1537
37.5 127.0 1537
55.2 59.7 1537
55.2 61.4 1537
52.3 21.0 1537
48.9 2.3 1537
54.8 61.3 1537
55.2 61.4 1537
51.5 46.0 1538
50.6 36.6 1538
25.8 -80.2 1538
55.2 61.4 1538
50.4 30.5 1538
22.3 114.2 1538
56.2 47.3 1538
34.0 -118.3 1538
28.2 113.1 1538
58.6 49.7 1538
58.6 49.7 1538
22.8 108.3 1538
52.3 21.0 1538
48.5 32.3 1538
55.2 61.4 1538
20.5 85.8 1538
55.2 59.7 1538
50.4 30.5 1538
45.5 -73.6 1538
45.5 -73.6 1538
45.5 -73.6 1538
54.4 86.2 1538
45.5 -73.6 1538
55.2 61.4 1539
-34.6 -58.4 1539
55.7 37.6 1539
55.0 50.1 1539
45.5 -73.6 1539
23.5 121.0 1539
-19.0 -49.5 1539
53.1 36.2 1539
30.3 120.2 1539
51.7 55.4 1539
55.2 61.4 1539
23.5 121.0 1539
55.2 61.4 1539
34.1 -118.3 1539
45.5 -73.6 1540
-40.6 -73.1 1540
53.5 49.6 1540
-36.8 -73.0 1540
54.2 37.6 1540
23.5 121.0 1540
55.2 61.4 1540
45.5 -73.6 1540
61.3 73.4 1540
47.5 42.2 1540
55.2 61.4 1540
45.5 -73.6 1540
50.0 36.3 1540
55.2 61.4 1540
39.9 116.4 1540
55.2 61.4 1540
40.3 44.6 1540
23.0 120.2 1540
30.3 120.2 1540
57.6 39.9 1540
25.0 102.7 1540
51.2 58.3 1540
50.6 36.6 1540
55.2 61.4 1540
45.5 -73.6 1541
35.7 51.4 1541
47.2 39.7 1541
23.5 121.0 1541
19.4 -99.1 1541
14.6 121.0 1541
34.1 -118.3 1541
35.8 -79.6 1541
40.4 -3.7 1541
32.1 118.8 1542
22.6 120.4 1542
14.6 121.1 1542
53.5 49.6 1542
30.6 114.3 1542
-22.8 -43.2 1542
55.8 49.1 1542
58.6 49.7 1542
37.5 127.0 1542
23.5 121.0 1542
34.0 -118.3 1542
17.4 78.5 1542
56.5 85.0 1542
48.9 36.3 1542
55.2 61.4 1542
51.3 58.2 1542
45.5 -73.6 1542
30.3 120.2 1542
24.8 121.0 1543
51.0 4.5 1543
56.9 53.2 1543
54.8 56.0 1543
48.9 2.3 1543
59.9 30.3 1543
16.5 107.6 1543
37.3 -121.9 1543
55.2 61.4 1543
55.3 61.4 1543
30.1 31.3 1543
57.0 41.0 1543
48.5 32.3 1543
45.5 -73.6 1543
23.5 121.0 1543
45.5 -73.6 1543
53.0 36.1 1543
57.2 65.5 1543
36.7 117.0 1543
19.4 -99.1 1543
55.2 61.4 1543
55.0 36.5 1544
22.8 108.3 1544
55.7 37.6 1544
55.9 26.5 1544
30.3 120.2 1544
56.4 38.7 1544
56.1 40.4 1544
55.2 61.4 1544
55.2 61.4 1544
37.3 -121.9 1544
54.9 82.8 1544
37.5 127.0 1544
48.9 2.3 1544
36.7 117.0 1544
32.1 118.8 1545
48.9 2.3 1545
55.2 61.4 1545
53.3 34.4 1545
55.0 60.4 1545
34.8 113.7 1545
51.7 36.2 1545
37.5 126.7 1545
22.3 114.2 1545
47.9 35.3 1545
43.1 12.1 1545
22.8 108.3 1546
51.5 46.0 1546
48.5 32.3 1546
30.3 120.2 1546
50.0 36.3 1546
55.9 48.3 1546
40.0 -75.3 1546
37.5 127.0 1546
23.1 113.3 1546
55.1 73.1 1546
56.9 53.2 1546
52.0 113.5 1547
32.1 118.8 1547
50.0 36.3 1547
23.5 121.0 1547
33.4 -111.9 1547
36.1 139.4 1547
55.2 61.4 1547
45.5 -73.6 1547
35.2 115.4 1547
30.3 120.2 1548
23.5 121.0 1548
-33.5 143.2 1548
45.5 -73.6 1548
57.4 61.4 1548
56.8 61.3 1548
22.3 114.2 1548
55.7 37.6 1548
25.0 121.5 1548
39.9 116.4 1548
55.0 82.9 1548
50.5 30.5 1548
55.3 52.1 1548
23.5 121.0 1548
55.7 37.6 1548
22.6 120.4 1548
52.3 104.3 1548
37.4 -121.9 1548
40.0 -75.1 1548
45.3 -73.9 1548
17.4 78.5 1548
48.5 32.3 1548
55.0 73.4 1548
30.3 120.2 1548
59.4 13.5 1548
35.1 -106.7 1549
37.8 -97.8 1549
22.8 108.3 1549
30.3 120.2 1549
-1.0 100.4 1549
37.5 127.0 1549
23.1 113.3 1549
23.1 113.3 1549
56.9 53.2 1549
25.0 121.5 1549
55.2 61.4 1549
23.5 121.0 1549
45.5 -73.6 1550
50.4 30.5 1550
44.2 42.1 1550
39.1 117.2 1550
23.5 121.0 1550
-40.6 -73.1 1550
55.2 61.4 1550
35.8 139.5 1550
55.2 61.4 1550
55.2 61.4 1550
-12.3 -66.2 1550
52.4 4.9 1550
37.5 127.0 1550
47.5 -122.3 1550
48.5 32.3 1550
51.2 58.3 1550
51.5 46.0 1551
17.5 78.5 1551
22.8 108.3 1551
32.1 118.8 1551
17.4 78.5 1551
43.9 125.3 1551
54.3 48.4 1551
25.0 121.5 1551
50.4 30.5 1551
50.4 30.5 1551
55.0 82.9 1551
30.3 120.2 1551
61.3 73.4 1551
61.3 73.4 1551
51.5 46.0 1551
56.8 53.2 1551
48.9 2.3 1551
55.2 61.4 1551
36.7 117.0 1551
-40.6 -73.1 1552
45.5 -73.6 1552
44.3 26.1 1552
55.0 60.1 1552
30.3 120.2 1552
45.5 -73.6 1552
55.2 61.4 1552
23.5 121.0 1552
24.1 120.7 1552
50.5 30.5 1552
50.0 36.3 1552
48.9 2.3 1552
56.9 60.6 1552
23.5 121.0 1552
30.9 120.1 1552
23.5 121.0 1552
45.5 -73.6 1552
30.3 120.2 1552
50.6 36.6 1552
45.5 -73.6 1553
45.5 -73.6 1553
45.5 -73.6 1553
35.6 140.1 1553
10.4 123.9 1553
48.0 68.0 1553
23.5 121.0 1553
25.0 121.5 1553
24.8 121.0 1553
39.1 -94.6 1553
45.3 -73.9 1553
25.0 121.5 1553
61.3 73.4 1553
30.3 120.2 1553
37.5 126.7 1553
54.6 39.7 1553
23.5 121.0 1553
50.5 30.5 1553
25.0 121.5 1554
14.6 121.0 1554
26.6 106.7 1554
34.8 113.7 1554
55.0 50.1 1554
17.4 78.5 1554
25.0 121.5 1554
51.5 46.0 1554
29.9 121.5 1554
-8.6 -35.1 1554
58.6 49.7 1554
37.5 -122.0 1554
56.8 53.2 1554
36.7 117.0 1554
45.5 -73.6 1554
37.8 -97.8 1554
30.7 -112.4 1554
50.4 30.5 1554
30.3 120.2 1555
30.3 120.2 1555
29.9 121.5 1555
36.6 101.8 1555
45.5 -73.6 1555
48.9 2.3 1555
56.8 53.2 1555
-38.7 -72.6 1555
53.5 49.3 1555
-23.5 -46.6 1555
53.7 87.8 1555
25.0 121.3 1555
54.8 32.0 1555
48.5 35.0 1555
22.6 88.4 1555
50.9 12.0 1555
23.5 121.0 1555
41.0 75.0 1555
46.3 48.0 1555
52.2 20.8 1555
51.7 55.4 1555
55.2 61.4 1555
30.3 120.2 1555
26.6 106.7 1555
23.5 121.0 1556
56.9 53.2 1556
56.2 47.3 1556
55.3 42.2 1556
56.1 40.4 1556
32.1 118.8 1556
56.9 60.6 1556
55.2 61.4 1556
-33.5 -70.7 1556
37.5 127.0 1556
50.4 30.5 1556
55.7 37.6 1556
48.0 37.8 1556
50.0 36.3 1556
55.2 61.4 1556
48.5 32.3 1556
39.9 116.4 1556
23.5 121.0 1556
58.6 49.9 1557
30.3 120.2 1557
43.8 87.6 1557
53.9 27.6 1557
57.8 40.9 1557
50.4 30.5 1557
55.7 37.6 1557
55.2 61.4 1557
29.0 -111.7 1557
30.3 120.2 1557
55.2 61.4 1557
45.3 -73.9 1557
55.9 48.3 1557
51.5 46.0 1557
-34.6 -58.4 1557
55.8 49.2 1557
47.2 39.7 1557
55.8 37.6 1557
30.3 120.2 1557
32.1 118.8 1557
45.5 -73.6 1557
14.4 80.0 1557
48.9 2.3 1557
30.3 120.2 1557
34.8 113.7 1557
23.5 121.0 1557
39.1 117.2 1558
37.5 -122.4 1558
55.1 37.5 1558
30.1 31.2 1558
-3.3 -41.4 1558
55.7 37.6 1558
48.5 32.3 1558
23.5 121.0 1558
23.5 121.0 1558
48.9 24.7 1558
25.0 121.5 1558
50.0 36.3 1558
31.0 121.4 1558
48.9 2.3 1559
24.9 67.1 1559
45.5 -73.6 1559
31.0 121.4 1559
-23.5 -46.6 1559
45.5 -73.6 1559
48.9 2.3 1559
32.1 118.8 1559
22.8 108.3 1559
55.2 61.4 1559
55.7 37.6 1559
55.2 61.4 1559
51.3 9.5 1559
33.6 46.4 1559
53.2 50.1 1559
55.7 37.6 1559
-32.0 115.9 1559
53.1 36.2 1559
36.7 117.0 1559
61.3 73.4 1559
53.2 50.1 1560
26.1 119.3 1560
56.9 60.6 1560
23.5 121.0 1560
46.3 48.0 1560
22.3 114.2 1560
25.0 121.5 1560
36.6 128.7 1560
26.6 106.7 1560
55.8 37.6 1560
41.0 75.0 1560
47.6 -122.3 1560
25.0 121.5 1560
45.5 -73.6 1560
25.0 121.5 1560
37.5 127.0 1560
48.5 35.0 1560
50.1 19.9 1560
23.5 121.0 1560
39.9 116.4 1560
37.5 127.0 1561
55.2 61.4 1561
40.0 45.0 1561
25.0 121.5 1561
53.2 50.1 1561
48.9 2.3 1561
30.3 120.2 1561
14.6 121.0 1561
58.5 50.0 1561
48.5 32.3 1561
48.5 32.3 1561
34.8 113.7 1561
50.5 30.5 1562
23.1 113.3 1562
4.6 -74.1 1562
45.5 -73.6 1562
25.0 121.5 1562
36.7 117.0 1562
23.5 121.0 1562
48.5 32.3 1562
51.8 55.1 1562
48.3 25.9 1562
48.9 2.3 1562
36.1 103.8 1562
24.1 120.7 1562
39.9 116.4 1562
48.5 35.0 1562
30.3 120.2 1562
-40.6 -73.1 1563
54.3 48.4 1563
50.6 36.6 1563
45.5 -73.6 1563
-29.0 24.0 1563
23.5 121.0 1563
54.3 48.4 1563
30.3 120.2 1563
50.4 30.5 1563
56.4 38.7 1563
40.5 -74.2 1563
56.8 53.2 1563
50.8 25.3 1563
43.3 76.9 1563
45.5 -73.6 1563
55.0 73.4 1563
55.2 61.4 1563
55.2 61.4 1563
45.5 -73.6 1563
25.0 121.5 1564
45.5 -73.6 1564
55.8 37.6 1564
48.5 35.0 1564
45.5 -73.6 1564
54.3 48.4 1564
23.5 121.0 1564
52.4 4.9 1564
23.5 121.0 1564
24.8 121.0 1564
52.9 -1.5 1564
48.5 35.0 1564
56.0 92.9 1564
55.8 39.0 1564
45.5 -73.6 1564
30.3 120.2 1564
23.5 121.0 1564
40.7 -74.2 1564
41.0 20.0 1564
23.5 121.0 1564
43.8 41.9 1564
53.8 -2.7 1565
55.8 49.2 1565
31.0 121.4 1565
42.0 43.5 1565
36.6 101.8 1565
39.1 117.2 1565
29.9 121.5 1565
34.8 113.7 1565
48.9 2.3 1565
61.6 23.9 1565
17.4 78.5 1565
23.5 121.0 1565
23.5 121.0 1565
35.7 51.4 1565
17.4 78.5 1565
37.5 126.7 1565
51.2 58.3 1565
25.0 121.5 1565
55.2 61.4 1565
31.0 121.4 1565
25.0 121.5 1565
37.5 -122.4 1566
53.5 49.3 1566
48.9 2.3 1566
45.0 41.1 1566
8.0 -2.0 1566
41.8 123.4 1566
28.6 115.9 1566
22.5 114.1 1566
34.8 113.7 1566
23.5 121.0 1566
45.5 -73.6 1566
55.2 61.4 1566
53.1 36.2 1566
48.5 32.3 1566
46.8 29.5 1566
30.3 120.2 1567
50.4 30.5 1567
23.1 113.3 1567
57.0 24.1 1567
45.5 -73.6 1567
53.0 36.1 1567
23.5 121.0 1567
51.5 -0.1 1567
50.3 28.7 1567
48.8 2.3 1567
23.5 121.0 1567
56.4 37.5 1567
25.0 102.7 1567
51.7 55.4 1567
32.1 118.8 1567
48.5 35.0 1568
45.0 39.0 1568
48.5 35.0 1568
41.0 -74.2 1568
50.1 14.4 1568
32.1 118.8 1568
52.0 8.5 1568
55.3 61.4 1568
29.9 121.5 1568
55.2 61.4 1568
53.3 34.4 1568
50.9 4.4 1568
36.8 3.1 1568
55.8 49.1 1568
34.8 113.7 1568
56.1 47.3 1568
45.5 -73.6 1568
23.5 121.0 1569
25.8 -80.2 1569
45.5 -73.6 1569
23.5 121.0 1569
30.3 120.2 1569
19.7 -101.1 1569
30.3 120.2 1569
53.5 49.3 1569
30.3 120.2 1569
54.3 48.4 1569
23.1 113.3 1569
23.5 121.0 1569
23.1 113.3 1569
48.7 44.5 1569
30.9 120.1 1569
40.5 -74.2 1569
41.0 64.0 1569
55.2 61.4 1569
55.7 37.6 1569
22.3 114.2 1569
45.5 -73.6 1569
51.8 55.1 1569
51.8 55.1 1569
23.5 121.0 1570
23.5 121.0 1570
55.9 37.8 1570
45.5 -73.6 1570
51.7 36.2 1570
32.1 118.8 1570
32.1 118.8 1570
30.6 114.3 1570
-22.9 -47.1 1570
25.0 121.5 1570
56.9 60.6 1570
39.9 116.4 1570
22.3 114.2 1570
28.6 77.3 1570
51.2 58.3 1570
60.0 30.7 1570
53.1 36.2 1570
45.5 -73.6 1571
48.9 2.3 1571
22.4 -100.3 1571
29.9 121.5 1571
30.7 104.1 1571
51.7 39.2 1571
51.7 39.2 1571
34.1 -118.3 1571
55.0 82.9 1571
34.7 113.5 1571
37.5 -122.4 1571
48.7 44.5 1571
40.4 -3.7 1571
55.3 61.4 1571
55.2 61.4 1571
55.8 60.7 1571
45.5 -73.6 1571
23.7 90.4 1571
50.6 36.6 1571
31.8 120.0 1572
51.7 39.2 1572
59.9 30.3 1572
45.5 -73.6 1572
32.1 118.8 1572
51.7 55.4 1572
29.9 121.5 1572
23.5 121.0 1572
43.8 -79.8 1572
49.4 1.1 1572
51.7 39.2 1572
56.0 92.9 1572
43.2 -77.7 1572
22.6 120.4 1572
55.1 73.1 1572
14.6 121.1 1573
45.5 -73.6 1573
37.3 -121.9 1573
45.5 -73.6 1573
30.1 31.3 1573
57.3 60.1 1573
23.5 121.0 1573
34.0 -117.9 1573
48.5 32.3 1573
32.8 -96.8 1573
51.5 -0.2 1573
45.3 -73.9 1574
23.5 121.0 1574
30.3 120.2 1574
25.0 121.5 1574
50.4 30.5 1574
-36.8 -73.0 1574
64.5 76.6 1574
22.6 120.4 1574
43.3 76.9 1574
50.4 30.5 1574
45.5 -73.6 1574
40.5 -74.2 1574
46.3 48.0 1574
34.0 -118.3 1574
56.9 59.9 1574
34.8 113.7 1574
57.2 65.5 1574
59.6 33.5 1574
50.4 30.5 1574
55.2 61.4 1574
55.2 61.4 1574
9.2 76.6 1575
30.3 120.2 1575
51.6 40.1 1575
55.2 61.4 1575
55.2 61.4 1575
55.2 61.4 1575
53.0 36.1 1575
45.5 -73.6 1575
55.2 61.4 1575
9.0 -80.0 1575
58.0 56.3 1575
39.9 116.4 1575
39.9 116.4 1576
45.5 -73.6 1576
55.2 61.4 1576
33.9 -118.3 1576
55.8 37.6 1576
4.6 -74.1 1576
55.7 37.6 1576
55.2 61.4 1576
55.7 37.6 1576
50.5 30.5 1576
25.0 121.5 1576
48.5 32.3 1576
51.2 58.3 1576
36.7 117.0 1576
48.9 2.3 1576
45.5 -73.6 1576
25.0 102.7 1576
55.7 37.6 1577
55.7 37.6 1577
37.5 127.0 1577
44.5 34.2 1577
48.9 2.3 1577
55.7 38.0 1577
52.4 -1.5 1577
55.2 61.4 1577
49.8 24.0 1577
48.9 2.3 1577
50.6 36.6 1577
48.5 35.0 1577
30.3 120.2 1577
37.5 127.0 1577
55.7 37.6 1577
56.2 47.3 1577
46.3 48.0 1577
51.5 46.0 1577
43.1 131.6 1578
55.7 37.6 1578
45.5 -73.6 1578
56.2 101.6 1578
48.7 44.5 1578
50.6 36.6 1578
53.9 27.6 1578
20.2 85.8 1578
23.1 113.3 1578
54.6 52.5 1578
48.9 2.3 1578
22.6 120.3 1578
62.0 129.7 1578
55.2 61.4 1578
40.5 -74.2 1578
51.7 55.4 1578
55.2 61.4 1578
39.7 -82.9 1578
23.5 121.0 1578
25.0 121.5 1579
55.8 49.2 1579
39.9 116.4 1579
23.1 113.3 1579
55.7 37.6 1579
32.1 118.8 1579
39.1 -94.6 1579
17.4 78.5 1579
55.7 37.6 1579
34.9 137.1 1579
47.2 39.7 1579
37.3 -121.9 1579
36.7 117.0 1579
34.0 -118.3 1579
28.6 115.9 1579
50.6 36.6 1579
31.8 120.0 1579
50.4 36.9 1579
55.9 94.8 1579
32.1 118.8 1579
29.9 121.5 1579
55.2 61.4 1579
45.5 -73.6 1579
45.5 -73.6 1579
45.3 -73.9 1579
52.4 4.9 1580
48.9 2.3 1580
13.0 77.6 1580
55.7 37.6 1580
55.4 43.8 1580
22.8 108.3 1580
-33.3 -66.3 1580
55.2 61.4 1580
23.5 121.0 1580
24.1 120.5 1580
39.9 116.4 1580
22.5 114.1 1580
45.5 -73.6 1580
17.3 76.8 1580
39.9 116.4 1580
50.4 30.5 1580
30.0 31.2 1580
45.5 -73.6 1580
48.9 2.3 1581
55.2 124.7 1581
35.6 139.8 1581
23.5 121.0 1581
55.2 61.4 1581
20.0 77.0 1581
34.8 113.7 1581
32.1 118.8 1581
37.5 127.0 1581
55.7 37.6 1581
45.5 -73.6 1581
30.3 120.2 1581
36.7 117.0 1581
55.2 61.4 1581
45.5 9.2 1581
23.5 121.0 1581
55.7 37.6 1581
39.9 116.4 1581
56.8 53.2 1581
30.3 120.2 1582
56.9 53.2 1582
45.5 -73.6 1582
23.1 113.3 1582
55.3 61.4 1582
25.0 121.5 1582
31.0 121.4 1582
48.5 35.0 1582
24.1 120.5 1582
55.2 61.4 1582
30.0 31.2 1582
36.7 117.0 1582
47.6 -122.3 1582
37.5 127.0 1582
26.6 106.7 1582
51.2 58.6 1582
30.3 120.2 1582
48.5 32.3 1582
54.4 61.3 1582
23.5 121.0 1582
56.9 53.2 1583
55.3 61.4 1583
25.0 121.5 1583
35.6 -87.0 1583
43.9 -79.3 1583
32.1 118.8 1583
29.1 119.6 1583
37.5 127.0 1583
31.5 119.5 1583
54.6 39.7 1583
54.4 86.3 1583
51.2 58.3 1583
45.5 -73.6 1583
51.2 58.3 1583
50.0 36.3 1583
45.5 -73.6 1584
30.3 120.2 1584
55.8 37.6 1584
55.7 37.6 1584
55.0 82.9 1584
47.2 39.7 1584
30.3 120.2 1584
55.7 37.6 1584
49.6 34.5 1584
25.0 121.5 1584
39.9 116.4 1584
13.1 80.2 1584
34.8 113.7 1584
-23.5 -46.6 1584
34.8 113.7 1584
52.8 52.3 1584
50.6 36.6 1584
39.1 117.2 1584
55.2 61.4 1584
40.4 -3.7 1584
45.5 -73.6 1584
30.3 120.2 1585
39.9 116.4 1585
53.7 -2.3 1585
39.9 116.4 1585
54.1 44.9 1585
55.3 61.4 1585
23.1 113.3 1585
31.0 121.4 1585
55.2 61.4 1585
47.0 28.8 1585
45.5 -73.6 1585
34.0 -117.9 1585
54.3 48.4 1585
51.7 55.4 1585
55.0 82.9 1585
37.5 -122.4 1585
30.3 120.2 1585
25.0 121.5 1585
37.7 120.3 1585
39.9 116.4 1585
51.7 55.4 1585
55.0 60.4 1585
55.0 82.9 1585
50.3 28.7 1585
58.6 49.7 1585
43.2 23.6 1585
39.0 -77.5 1586
25.0 121.3 1586
32.1 118.8 1586
30.3 120.2 1586
53.2 50.1 1586
54.3 48.4 1586
41.9 -87.8 1586
23.5 121.0 1586
56.4 38.7 1586
53.1 46.6 1586
23.5 121.0 1586
48.0 37.9 1586
50.9 4.4 1586
51.2 58.3 1586
38.7 -77.2 1586
45.5 -73.6 1586
59.9 30.3 1586
55.0 60.1 1587
-36.8 -73.0 1587
-33.9 151.2 1587
23.1 113.3 1587
48.6 39.3 1587
57.0 54.0 1587
50.4 30.5 1587
55.2 61.4 1587
56.3 44.0 1587
55.2 59.7 1587
26.9 75.8 1587
14.6 121.0 1587
23.0 120.2 1587
25.0 121.5 1587
55.0 50.1 1587
45.5 -73.6 1587
23.5 121.0 1587
23.1 113.3 1587
39.9 116.4 1587
48.5 35.0 1587
52.8 52.3 1587
51.7 36.2 1587
55.2 61.4 1587
23.5 121.0 1587
58.6 49.9 1588
23.1 113.3 1588
55.3 61.4 1588
55.9 37.8 1588
14.6 121.0 1588
45.5 -73.6 1588
55.7 37.6 1588
48.9 2.3 1588
30.3 120.2 1588
30.3 120.2 1588
19.4 -99.1 1588
-12.3 -66.2 1588
35.5 48.9 1588
55.7 37.6 1588
-34.9 -57.9 1588
56.2 47.3 1588
55.2 61.4 1588
22.3 114.2 1588
56.4 60.2 1588
50.0 36.3 1588
55.2 61.4 1588
51.3 9.5 1588
56.9 53.2 1589
22.8 108.3 1589
53.2 50.1 1589
17.4 78.5 1589
23.5 121.0 1589
54.2 -4.6 1589
48.9 2.3 1589
55.2 61.4 1589
22.6 120.4 1589
55.2 61.4 1589
50.4 30.5 1589
51.5 -0.1 1589
54.8 11.9 1589
55.3 61.4 1589
43.9 -79.3 1589
45.8 16.0 1589
32.1 118.8 1589
25.0 121.5 1589
41.6 -72.5 1589
55.0 50.1 1589
57.3 60.1 1589
56.8 53.2 1589
38.7 -77.2 1589
-18.6 -46.5 1589
48.9 2.3 1589
34.8 113.7 1590
48.9 2.4 1590
56.3 44.0 1590
56.8 53.2 1590
37.5 127.0 1590
48.9 2.3 1590
48.9 2.3 1590
29.9 121.5 1590
55.2 61.4 1590
32.1 118.8 1590
54.2 37.6 1590
46.5 30.7 1590
56.1 47.3 1590
55.0 50.1 1590
36.6 128.7 1590
50.0 36.3 1590
53.8 87.1 1590
55.2 61.4 1590
48.5 32.3 1590
55.2 61.4 1590
50.3 28.7 1590
25.0 121.5 1590
56.8 53.2 1590
34.1 -118.3 1590
55.8 39.0 1591
37.5 126.7 1591
55.9 37.8 1591
23.1 113.3 1591
55.8 49.2 1591
45.5 -73.6 1591
48.0 37.8 1591
36.1 120.4 1591
30.7 104.1 1591
30.7 104.1 1591
55.8 37.6 1591
38.7 -77.2 1591
33.9 35.5 1591
49.6 25.6 1591
55.0 73.4 1591
53.0 36.1 1591
24.1 120.7 1592
45.5 -73.6 1592
45.3 -73.9 1592
55.7 37.6 1592
24.1 120.7 1592
55.7 37.6 1592
55.2 61.4 1592
34.1 -118.3 1592
23.5 121.0 1592
45.0 39.0 1592
51.7 55.4 1592
34.8 113.7 1592
42.0 43.5 1592
25.0 102.7 1592
61.3 73.4 1593
23.5 121.0 1593
28.5 77.0 1593
40.7 109.8 1593
45.5 -73.6 1593
45.5 -73.6 1593
31.9 117.3 1593
24.1 120.7 1593
23.5 121.0 1593
48.5 32.3 1593
51.7 39.2 1593
37.8 128.9 1593
36.7 117.0 1593
28.2 113.1 1593
25.0 121.5 1593
44.7 37.8 1594
45.3 37.4 1594
55.7 37.6 1594
30.3 120.2 1594
53.0 28.0 1594
55.7 37.6 1594
26.6 106.7 1594
39.9 116.4 1594
48.9 2.3 1594
37.5 127.0 1594
25.0 121.5 1594
51.8 55.1 1594
32.1 118.8 1594
23.5 121.0 1594
50.0 36.3 1594
40.5 -74.2 1594
51.2 58.3 1594
24.1 120.7 1594
25.0 102.7 1594
36.1 103.8 1594
55.2 59.7 1595
49.7 32.0 1595
32.1 118.8 1595
30.3 120.2 1595
23.1 113.3 1595
23.5 121.0 1595
61.3 73.4 1595
45.5 -73.6 1595
34.1 -118.4 1595
51.7 36.2 1595
19.0 72.8 1595
56.2 43.5 1595
55.2 61.4 1595
54.8 61.3 1595
23.7 90.4 1595
55.2 61.4 1595
23.5 121.0 1596
45.5 -73.6 1596
-25.9 25.6 1596
44.7 37.8 1596
37.3 114.7 1596
55.8 37.6 1596
55.7 37.6 1596
37.5 127.0 1596
23.0 113.1 1596
30.3 120.2 1596
25.0 102.7 1596
37.5 -122.4 1596
4.9 114.9 1596
51.5 46.0 1596
30.3 120.2 1596
37.5 -122.4 1596
55.3 86.1 1596
55.6 40.7 1596
51.5 -0.1 1596
48.5 32.3 1596
50.6 36.6 1596
45.0 34.1 1596
51.7 36.2 1596
39.9 116.4 1597
55.8 49.1 1597
56.9 60.6 1597
48.9 2.3 1597
40.7 -74.2 1597
55.2 61.4 1597
23.5 121.0 1597
30.0 31.2 1597
59.4 28.6 1597
40.4 -3.7 1597
52.2 20.8 1597
62.4 17.3 1597
35.2 115.4 1597
35.5 139.7 1597
55.8 60.7 1597
45.5 -73.6 1598
38.7 -77.2 1598
55.7 37.9 1598
31.5 34.8 1598
23.5 121.0 1598
45.5 -73.6 1598
30.3 120.2 1598
45.5 -73.6 1598
39.9 116.4 1598
29.9 121.5 1598
48.9 2.3 1598
45.5 -73.6 1598
50.4 30.5 1598
37.8 -97.8 1598
48.6 39.3 1599
45.5 -73.6 1599
48.5 35.0 1599
41.3 69.3 1599
50.3 28.7 1599
55.4 42.5 1599
55.2 61.4 1599
50.4 30.5 1599
30.3 120.2 1599
34.8 113.7 1599
37.5 -122.4 1599
32.8 -97.8 1599
55.7 37.6 1599
23.5 121.0 1599
45.9 -119.7 1599
55.0 60.1 1599
24.1 120.7 1599
36.7 117.0 1599
55.2 61.4 1599
47.9 35.3 1600
31.0 121.4 1600
23.1 113.3 1600
29.4 48.0 1600
54.6 39.7 1600
57.0 61.5 1600
57.0 61.5 1600
35.6 140.1 1600
55.7 37.6 1600
47.1 8.2 1600
55.2 61.4 1600
42.7 23.3 1600
48.5 35.0 1600
30.3 120.2 1600
43.5 1.4 1600
38.8 -77.1 1600
56.9 53.2 1601
45.5 -73.6 1601
31.0 121.4 1601
55.8 49.2 1601
-36.8 -73.0 1601
30.3 120.2 1601
36.1 103.8 1601
41.7 44.8 1601
24.1 120.5 1601
45.5 -73.6 1601
47.0 28.9 1601
23.5 121.0 1601
23.0 120.2 1601
22.8 121.2 1601
30.3 120.2 1601
25.0 121.5 1601
23.5 121.0 1601
52.5 13.4 1601
52.0 47.8 1601
55.8 49.1 1601
50.6 36.6 1601
45.5 -73.6 1601
13.0 77.6 1601
55.2 61.4 1602
56.4 38.7 1602
34.8 113.7 1602
48.9 2.3 1602
51.8 107.6 1602
53.7 91.4 1602
30.3 120.2 1602
24.1 120.7 1602
22.5 114.1 1602
45.5 -73.6 1602
52.8 52.3 1602
45.5 -73.6 1603
24.1 120.7 1603
39.9 116.4 1603
30.3 120.2 1603
25.0 121.5 1603
50.6 36.6 1603
45.5 -73.6 1603
55.2 61.4 1603
54.8 38.9 1604
45.5 -73.6 1604
48.9 2.3 1604
45.5 -73.6 1604
30.7 104.1 1604
52.2 21.0 1604
55.3 61.4 1604
23.1 113.3 1604
34.3 108.9 1604
30.3 120.2 1604
47.5 19.1 1604
53.1 49.9 1604
37.5 127.0 1604
55.7 37.6 1604
42.7 23.3 1604
55.2 61.4 1604
30.3 120.2 1604
55.0 73.4 1604
55.0 60.1 1604
23.5 121.0 1604
44.5 34.2 1605
37.5 127.0 1605
49.6 34.5 1605
30.3 120.2 1605
48.9 2.3 1605
48.2 16.4 1605
23.5 121.0 1605
59.9 30.3 1605
58.3 48.3 1605
30.3 120.2 1605
39.1 -94.6 1605
44.5 -84.6 1605
40.7 -74.2 1605
56.9 53.2 1605
51.7 55.4 1605
25.0 121.5 1605
36.6 101.8 1606
-33.7 151.3 1606
50.6 36.6 1606
41.8 123.4 1606
50.4 30.5 1606
40.7 109.8 1606
49.6 34.5 1606
47.6 -122.3 1606
17.4 78.5 1606
50.6 36.6 1606
15.0 120.6 1606
54.9 54.7 1606
30.3 120.2 1606
49.7 36.9 1607
55.3 61.4 1607
24.8 121.0 1607
24.1 120.7 1607
23.5 121.0 1607
55.2 59.7 1607
53.9 27.6 1607
45.5 -73.6 1607
55.2 61.4 1607
30.3 120.2 1607
58.1 52.7 1607
37.5 -122.4 1607
42.0 43.5 1607
13.7 100.5 1607
36.6 101.8 1607
25.0 121.5 1607
53.1 46.6 1607
36.7 117.0 1607
51.5 -0.1 1607
-40.3 -73.1 1608
36.6 101.8 1608
56.1 47.3 1608
48.9 2.3 1608
35.6 139.8 1608
48.9 2.4 1608
45.5 -73.6 1608
-40.6 -73.1 1608
45.0 39.0 1608
55.2 61.4 1608
49.6 34.5 1608
55.3 61.4 1608
32.1 118.8 1608
41.2 -112.0 1608
51.7 55.4 1608
25.0 102.7 1608
22.6 120.4 1608
58.4 49.1 1608
55.2 61.4 1608
48.5 35.0 1609
48.9 2.3 1609
47.2 38.9 1609
23.1 113.3 1609
38.7 -77.2 1609
23.5 121.0 1609
53.9 27.6 1609
55.7 37.6 1609
55.0 50.1 1609
30.3 120.2 1609
13.8 100.5 1609
17.4 78.5 1609
51.5 46.0 1609
56.0 24.0 1610
51.7 36.2 1610
53.0 36.1 1610
53.0 36.1 1610
30.3 120.2 1610
47.2 39.7 1610
53.2 50.1 1610
57.0 41.0 1610
23.5 121.0 1610
49.8 24.0 1610
55.2 61.4 1610
37.5 127.0 1610
51.7 39.2 1610
48.5 35.0 1610
36.1 103.8 1610
55.2 61.4 1610
30.3 120.2 1611
24.1 120.7 1611
30.3 120.2 1611
39.9 116.4 1611
36.6 101.8 1611
40.5 -74.2 1611
20.0 77.0 1611
53.7 91.7 1611
25.0 121.5 1611
47.5 42.2 1612
22.8 108.3 1612
30.3 120.2 1612
41.8 123.4 1612
10.3 123.9 1612
48.9 2.3 1612
30.3 120.2 1612
59.5 34.7 1612
48.5 35.0 1612
56.9 60.6 1612
22.6 120.4 1612
35.2 115.4 1612
23.5 121.0 1612
34.0 -117.9 1612
55.8 38.4 1612
53.5 49.3 1612
45.8 16.0 1612
55.2 61.4 1612
40.8 -73.8 1612
55.0 73.4 1612
22.8 108.3 1612
17.4 78.5 1612
55.2 61.4 1612
45.5 -73.6 1613
59.2 39.9 1613
36.6 101.8 1613
26.6 106.7 1613
35.6 139.8 1613
50.6 36.6 1613
34.8 113.7 1613
34.1 -118.3 1613
-33.4 -71.1 1613
37.5 127.0 1613
55.6 37.9 1613
51.5 46.1 1613
49.8 30.1 1613
40.5 -74.2 1613
51.7 55.4 1613
55.2 61.4 1613
55.2 61.4 1613
40.0 45.0 1613
39.1 117.2 1613
56.3 44.0 1614
36.6 101.8 1614
30.3 120.2 1614
53.0 36.1 1614
30.3 120.2 1614
-36.8 -73.0 1614
13.1 80.3 1614
55.2 61.4 1614
36.8 3.1 1614
48.5 35.0 1614
51.7 39.2 1614
51.7 39.2 1614
53.0 36.1 1614
32.1 118.8 1614
55.2 59.7 1614
16.2 120.8 1614
51.7 36.2 1614
32.1 118.8 1614
48.9 2.3 1614
24.1 120.7 1614
39.9 116.4 1614
45.5 -73.6 1614
58.5 48.9 1614
39.1 117.2 1615
26.1 119.3 1615
22.7 88.3 1615
54.2 -4.6 1615
47.5 42.2 1615
50.5 30.5 1615
43.8 87.6 1615
47.5 19.1 1615
38.9 -77.1 1615
48.9 2.3 1615
55.2 61.4 1615
55.0 60.1 1615
53.0 36.1 1615
23.5 121.0 1615
53.9 27.6 1615
25.0 121.5 1615
14.6 121.0 1615
43.4 13.3 1615
56.1 40.4 1615
40.5 -74.2 1615
55.2 61.4 1615
55.2 61.4 1615
22.6 120.4 1615
17.4 78.5 1615
22.3 114.2 1615
48.5 32.3 1615
23.5 121.0 1616
22.8 108.3 1616
53.1 36.2 1616
45.5 -73.6 1616
55.4 43.8 1616
29.3 120.1 1616
44.9 38.0 1616
45.6 -73.5 1616
56.3 44.0 1616
35.7 139.7 1616
55.2 61.4 1616
50.4 30.5 1616
51.5 46.0 1616
36.6 101.8 1616
23.5 121.0 1616
55.7 37.6 1616
36.7 117.0 1616
55.3 61.4 1616
48.5 32.3 1616
55.2 61.4 1616
45.9 -119.7 1616
23.1 113.3 1617
37.3 -121.9 1617
55.0 82.9 1617
23.5 121.0 1617
54.3 48.4 1617
55.0 60.1 1617
55.2 61.4 1617
30.3 120.2 1617
55.2 61.4 1617
38.7 -77.2 1617
22.6 120.4 1617
41.0 75.0 1617
48.5 32.3 1617
55.7 37.6 1617
45.5 -73.6 1617
45.5 -73.6 1618
45.5 -73.6 1618
31.0 121.4 1618
38.6 -90.2 1618
29.1 119.6 1618
50.4 30.5 1618
45.3 -73.9 1618
48.0 37.8 1618
48.6 39.3 1618
48.9 2.3 1618
55.2 61.4 1618
48.5 32.3 1618
50.0 36.3 1618
55.2 61.4 1618
30.3 120.2 1619
48.6 39.3 1619
32.1 118.8 1619
32.1 118.8 1619
53.0 36.1 1619
40.7 -74.2 1619
35.6 139.7 1619
30.3 120.2 1619
22.6 120.4 1619
-22.8 -43.2 1619
30.3 120.2 1619
49.4 32.1 1619
45.5 -73.6 1619
30.3 120.2 1620
43.3 21.9 1620
55.2 61.4 1620
55.8 49.2 1620
55.0 60.1 1620
29.9 121.5 1620
30.7 104.1 1620
50.4 30.5 1620
4.6 -74.1 1620
35.0 138.4 1620
55.2 61.4 1620
56.1 47.5 1620
37.5 -122.4 1620
23.5 121.0 1620
30.3 120.2 1620
47.6 -122.3 1620
4.8 -75.7 1620
26.1 119.3 1620
45.5 -73.6 1621
32.1 118.8 1621
14.6 121.1 1621
55.7 37.6 1621
36.7 117.0 1621
54.4 46.1 1621
25.0 121.5 1621
22.5 114.1 1621
51.8 55.1 1621
55.7 37.6 1621
30.3 120.2 1621
17.5 78.5 1621
50.6 36.6 1621
45.5 -73.6 1621
23.5 121.0 1621
55.2 61.4 1621
23.1 113.3 1622
36.6 101.8 1622
30.3 120.2 1622
57.0 24.3 1622
53.4 83.8 1622
41.5 -81.6 1622
53.9 27.6 1622
55.2 61.4 1622
51.5 31.3 1622
23.5 121.0 1622
13.8 100.5 1622
56.1 47.3 1622
54.0 -1.1 1622
30.3 120.2 1622
55.3 52.1 1622
37.5 127.0 1622
55.6 109.3 1622
39.9 116.4 1622
48.9 2.3 1622
40.0 45.0 1622
40.5 -74.2 1622
40.5 -74.2 1622
39.9 116.4 1622
46.3 48.0 1623
56.2 44.2 1623
-40.6 -73.1 1623
30.3 120.2 1623
31.0 121.4 1623
53.5 49.3 1623
46.3 48.0 1623
48.0 37.8 1623
30.3 120.2 1623
39.9 116.4 1623
51.9 47.9 1623
36.0 -81.6 1623
23.5 121.0 1623
48.0 37.8 1623
55.2 61.4 1623
30.3 120.2 1623
55.2 61.4 1623
59.6 33.5 1623
55.2 61.4 1623
55.0 82.9 1623
54.6 39.7 1623
55.2 61.4 1623
51.7 55.4 1623
53.2 50.1 1624
54.3 48.4 1624
45.5 -73.6 1624
30.3 120.2 1624
55.8 49.1 1624
31.0 121.4 1624
50.6 36.6 1624
47.5 19.1 1624
36.6 101.8 1624
32.8 -96.8 1624
55.3 61.4 1624
54.3 48.4 1624
61.0 69.0 1624
25.0 121.5 1624
34.8 113.7 1624
55.2 61.4 1624
45.5 -73.6 1625
22.6 120.4 1625
41.3 69.3 1625
37.5 127.0 1625
45.5 -73.6 1625
45.3 -73.9 1625
50.4 30.5 1625
50.7 3.2 1625
23.0 120.2 1625
51.7 36.2 1625
53.9 27.6 1625
55.2 61.4 1625
37.8 128.9 1625
28.6 77.2 1625
-4.3 15.3 1625
23.1 113.3 1625
49.8 24.0 1625
51.5 -0.1 1625
54.6 39.7 1625
54.4 61.3 1625
55.2 61.4 1625
48.5 35.0 1625
53.7 91.7 1625
30.7 104.1 1625
23.5 121.0 1625
25.0 121.5 1625
55.2 61.4 1625
51.7 39.2 1625
55.2 61.4 1625
36.7 117.0 1625
55.7 37.6 1626
45.5 -73.6 1626
55.7 37.6 1626
49.5 8.4 1626
23.0 72.6 1626
53.2 50.1 1626
53.0 36.1 1626
55.0 82.9 1626
55.7 37.6 1626
54.9 52.3 1626
20.5 85.8 1626
31.0 121.4 1626
22.5 114.1 1626
23.7 90.4 1626
23.5 121.0 1627
45.3 -73.9 1627
19.4 -99.1 1627
50.3 28.7 1627
49.8 30.1 1627
22.7 120.5 1627
25.0 121.5 1627
54.9 43.3 1627
23.1 113.3 1627
42.0 43.5 1627
36.7 117.0 1627
45.5 -73.6 1627
44.5 34.2 1628
53.9 27.6 1628
13.8 100.5 1628
24.9 67.1 1628
45.5 -73.6 1628
22.4 114.1 1628
51.5 46.1 1628
25.0 121.5 1628
53.2 45.0 1628
47.2 39.7 1628
45.8 16.0 1628
23.5 121.0 1628
25.0 121.5 1628
55.2 61.4 1628
27.4 95.6 1628
23.5 121.0 1628
25.0 121.5 1628
24.1 120.7 1628
55.2 61.4 1628
20.0 77.0 1629
45.5 -73.6 1629
45.5 -73.6 1629
56.2 43.5 1629
30.3 120.2 1629
22.8 108.3 1629
26.6 106.7 1629
55.2 61.4 1629
56.3 44.0 1629
34.7 113.5 1629
55.0 50.1 1629
52.6 36.3 1629
39.9 116.4 1629
40.5 -74.2 1629
52.3 21.0 1629
48.9 2.3 1629
55.7 37.6 1629
45.5 -73.6 1629
55.2 61.4 1629
57.8 40.9 1629
55.2 61.4 1629
55.2 61.4 1629
12.2 -86.3 1629
36.7 117.0 1629
23.5 121.0 1630
32.1 118.8 1630
55.0 60.1 1630
47.8 27.9 1630
45.5 -73.6 1630
23.1 113.3 1630
55.0 50.1 1630
1.0 -79.7 1630
55.8 37.6 1630
60.0 10.8 1630
53.2 50.1 1630
34.8 113.7 1630
36.6 101.8 1630
13.7 100.5 1630
48.5 32.3 1630
55.2 59.7 1630
55.3 61.4 1630
40.0 45.0 1630
53.4 59.0 1630
31.0 121.4 1631
56.1 40.4 1631
50.8 14.9 1631
30.3 120.2 1631
30.1 31.3 1631
54.4 53.3 1631
45.5 -73.6 1631
55.2 61.4 1631
24.1 120.7 1631
30.9 120.1 1631
45.5 -73.6 1631
47.7 -122.4 1631
51.7 55.4 1631
43.6 27.8 1631
45.5 -73.6 1631
52.8 52.3 1631
55.2 61.4 1631
51.7 36.2 1631
45.5 -73.6 1631
55.2 61.4 1631
34.1 -118.3 1631
55.8 49.2 1632
36.6 101.8 1632
23.1 113.3 1632
37.5 -122.2 1632
29.6 -98.6 1632
61.3 73.4 1632
37.8 128.9 1632
25.0 121.5 1632
54.6 39.7 1632
55.2 61.4 1632
57.8 40.9 1632
54.6 39.7 1632
55.2 61.4 1632
30.1 31.3 1633
58.4 45.5 1633
23.5 121.0 1633
30.3 120.2 1633
53.0 36.1 1633
36.2 140.5 1633
30.3 120.2 1633
25.0 121.5 1633
48.9 2.3 1633
37.5 127.0 1633
44.5 34.2 1633
48.9 2.3 1633
53.2 50.1 1633
23.5 121.0 1633
40.0 45.0 1633
16.3 80.5 1633
55.7 84.9 1633
55.2 61.4 1633
30.3 120.2 1633
45.5 -73.6 1633
43.0 -87.9 1633
23.5 121.0 1633
23.1 113.3 1633
53.4 83.8 1634
45.5 -73.6 1634
48.9 2.3 1634
50.4 30.5 1634
55.2 61.4 1634
31.0 121.4 1634
32.1 118.8 1634
32.1 118.8 1634
47.6 -122.3 1634
37.5 -122.4 1634
36.6 101.8 1634
57.0 25.0 1634
50.4 30.5 1634
55.2 61.4 1634
25.0 121.5 1634
48.5 32.3 1634
48.8 41.0 1634
40.5 -74.2 1634
23.5 121.0 1635
60.5 15.4 1635
55.2 61.4 1635
47.8 35.2 1635
55.2 59.7 1635
55.2 61.4 1635
47.5 19.1 1635
55.2 59.7 1635
49.1 33.4 1635
34.8 113.7 1635
34.1 -118.3 1635
37.8 -97.8 1635
50.0 36.3 1635
26.1 119.3 1635
49.4 32.1 1635
53.0 36.1 1635
24.1 120.7 1635
55.2 61.4 1636
64.6 39.8 1636
45.5 -73.6 1636
42.7 23.3 1636
36.6 128.7 1636
32.1 118.8 1636
26.1 119.3 1636
55.1 52.7 1636
33.4 -111.9 1636
51.7 55.4 1636
40.5 -74.2 1636
55.2 59.7 1636
69.3 88.2 1636
55.2 61.4 1636
17.4 78.5 1636
51.5 -0.1 1636
55.2 61.4 1636
23.1 113.3 1637
56.9 53.2 1637
53.2 50.1 1637
10.3 123.9 1637
30.3 120.2 1637
17.4 78.5 1637
55.0 60.1 1637
55.2 61.4 1637
40.7 109.8 1637
57.0 61.5 1637
24.1 120.5 1637
34.3 108.9 1637
48.0 68.0 1637
30.3 120.2 1637
23.5 121.0 1637
51.8 107.6 1637
54.2 37.6 1637
55.3 86.1 1637
22.6 120.4 1637
55.3 61.4 1637
34.8 113.7 1637
41.0 29.0 1637
53.0 36.1 1637
53.1 36.2 1637
65.9 57.5 1637
50.6 36.6 1638
17.4 78.5 1638
31.0 121.4 1638
23.5 121.0 1638
24.1 120.7 1638
48.9 2.3 1638
29.1 119.6 1638
48.9 2.3 1638
30.1 31.3 1638
45.8 16.0 1638
24.9 118.6 1638
29.9 121.5 1638
51.7 55.4 1638
24.1 120.7 1638
55.5 37.8 1639
39.1 117.2 1639
44.0 43.1 1639
32.1 118.8 1639
43.0 47.5 1639
31.6 -8.0 1639
36.7 117.0 1639
55.2 61.4 1639
30.3 120.2 1639
30.7 104.1 1639
36.7 117.0 1639
37.8 128.9 1639
55.2 61.4 1639
30.3 120.2 1639
41.8 123.4 1639
47.0 28.8 1639
55.3 61.4 1639
48.5 32.3 1639
48.9 2.3 1639
55.7 37.6 1639
45.5 -73.6 1639
55.2 61.4 1639
55.3 61.4 1639
24.1 120.7 1640
26.1 119.3 1640
49.6 34.5 1640
36.6 128.7 1640
30.7 104.1 1640
23.5 121.0 1640
30.3 120.2 1640
51.8 55.1 1640
23.5 121.0 1640
57.8 40.9 1640
39.9 116.4 1640
39.9 116.4 1640
51.8 55.1 1640
46.5 41.5
View raw

(Sorry about that, but we can’t show files that are this big right now.)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment