From: dsc Date: Wed, 22 Feb 2012 23:19:23 +0000 (-0800) Subject: Adds d3.js -- http://mbostock.github.com/d3 X-Git-Url: http://git.less.ly:3516/?a=commitdiff_plain;h=5217badbaf360702d2877c6cd8a1dcb33f363ffc;p=kraken-ui.git Adds d3.js -- http://mbostock.github.com/d3 --- diff --git a/static/vendor/d3 b/static/vendor/d3 new file mode 120000 index 0000000..a92620b --- /dev/null +++ b/static/vendor/d3 @@ -0,0 +1 @@ +d3-2.7.5 \ No newline at end of file diff --git a/static/vendor/d3-2.7.5/.gitignore b/static/vendor/d3-2.7.5/.gitignore new file mode 100644 index 0000000..8cc5a84 --- /dev/null +++ b/static/vendor/d3-2.7.5/.gitignore @@ -0,0 +1,3 @@ +_site +node_modules +.DS_Store diff --git a/static/vendor/d3-2.7.5/.gitmodules b/static/vendor/d3-2.7.5/.gitmodules new file mode 100644 index 0000000..e69de29 diff --git a/static/vendor/d3-2.7.5/.npmignore b/static/vendor/d3-2.7.5/.npmignore new file mode 100644 index 0000000..146266d --- /dev/null +++ b/static/vendor/d3-2.7.5/.npmignore @@ -0,0 +1,4 @@ +examples/ +test/ +lib/ +.DS_Store diff --git a/static/vendor/d3-2.7.5/LICENSE b/static/vendor/d3-2.7.5/LICENSE new file mode 100644 index 0000000..f154b09 --- /dev/null +++ b/static/vendor/d3-2.7.5/LICENSE @@ -0,0 +1,26 @@ +Copyright (c) 2010, Michael Bostock +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +* The name Michael Bostock may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL MICHAEL BOSTOCK BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/static/vendor/d3-2.7.5/Makefile b/static/vendor/d3-2.7.5/Makefile new file mode 100644 index 0000000..0667874 --- /dev/null +++ b/static/vendor/d3-2.7.5/Makefile @@ -0,0 +1,273 @@ +# See the README for installation instructions. + +NODE_PATH ?= ./node_modules +JS_COMPILER = $(NODE_PATH)/uglify-js/bin/uglifyjs +JS_TESTER = $(NODE_PATH)/vows/bin/vows + +JS_FILES = \ + d3.js \ + d3.chart.js \ + d3.layout.js \ + d3.csv.js \ + d3.geo.js \ + d3.geom.js \ + d3.time.js + +all: \ + $(JS_FILES) \ + $(JS_FILES:.js=.min.js) \ + package.json + +# Modify this rule to build your own custom release. +# Run `make d3.custom.min.js` to produce the minified version. + +d3.custom.js: \ + d3.js \ + d3.layout.js \ + d3.csv.js \ + d3.geo.js \ + d3.geom.js \ + d3.time.js + +.INTERMEDIATE d3.js: \ + src/start.js \ + d3.core.js \ + d3.scale.js \ + d3.svg.js \ + d3.behavior.js \ + src/end.js + +d3.core.js: \ + src/compat/date.js \ + src/compat/style.js \ + src/core/core.js \ + src/core/array.js \ + src/core/this.js \ + src/core/functor.js \ + src/core/rebind.js \ + src/core/ascending.js \ + src/core/descending.js \ + src/core/mean.js \ + src/core/median.js \ + src/core/min.js \ + src/core/max.js \ + src/core/extent.js \ + src/core/random.js \ + src/core/number.js \ + src/core/sum.js \ + src/core/quantile.js \ + src/core/transpose.js \ + src/core/zip.js \ + src/core/bisect.js \ + src/core/first.js \ + src/core/last.js \ + src/core/nest.js \ + src/core/keys.js \ + src/core/values.js \ + src/core/entries.js \ + src/core/permute.js \ + src/core/merge.js \ + src/core/split.js \ + src/core/collapse.js \ + src/core/range.js \ + src/core/requote.js \ + src/core/round.js \ + src/core/xhr.js \ + src/core/text.js \ + src/core/json.js \ + src/core/html.js \ + src/core/xml.js \ + src/core/ns.js \ + src/core/dispatch.js \ + src/core/format.js \ + src/core/formatPrefix.js \ + src/core/ease.js \ + src/core/event.js \ + src/core/interpolate.js \ + src/core/uninterpolate.js \ + src/core/rgb.js \ + src/core/hsl.js \ + src/core/selection.js \ + src/core/selection-select.js \ + src/core/selection-selectAll.js \ + src/core/selection-attr.js \ + src/core/selection-classed.js \ + src/core/selection-style.js \ + src/core/selection-property.js \ + src/core/selection-text.js \ + src/core/selection-html.js \ + src/core/selection-append.js \ + src/core/selection-insert.js \ + src/core/selection-remove.js \ + src/core/selection-data.js \ + src/core/selection-filter.js \ + src/core/selection-map.js \ + src/core/selection-order.js \ + src/core/selection-sort.js \ + src/core/selection-on.js \ + src/core/selection-each.js \ + src/core/selection-call.js \ + src/core/selection-empty.js \ + src/core/selection-node.js \ + src/core/selection-transition.js \ + src/core/selection-root.js \ + src/core/selection-enter.js \ + src/core/selection-enter-select.js \ + src/core/transition.js \ + src/core/transition-select.js \ + src/core/transition-selectAll.js \ + src/core/transition-attr.js \ + src/core/transition-style.js \ + src/core/transition-text.js \ + src/core/transition-remove.js \ + src/core/transition-delay.js \ + src/core/transition-duration.js \ + src/core/transition-each.js \ + src/core/transition-transition.js \ + src/core/timer.js \ + src/core/transform.js \ + src/core/noop.js + +d3.scale.js: \ + src/scale/scale.js \ + src/scale/nice.js \ + src/scale/linear.js \ + src/scale/bilinear.js \ + src/scale/polylinear.js \ + src/scale/log.js \ + src/scale/pow.js \ + src/scale/sqrt.js \ + src/scale/ordinal.js \ + src/scale/category.js \ + src/scale/quantile.js \ + src/scale/quantize.js + +d3.svg.js: \ + src/svg/svg.js \ + src/svg/arc.js \ + src/svg/line.js \ + src/svg/line-radial.js \ + src/svg/area.js \ + src/svg/area-radial.js \ + src/svg/chord.js \ + src/svg/diagonal.js \ + src/svg/diagonal-radial.js \ + src/svg/mouse.js \ + src/svg/touches.js \ + src/svg/symbol.js \ + src/svg/axis.js \ + src/svg/brush.js + +d3.behavior.js: \ + src/behavior/behavior.js \ + src/behavior/drag.js \ + src/behavior/zoom.js + +d3.chart.js: \ + src/start.js \ + src/chart/chart.js \ + src/chart/box.js \ + src/chart/bullet.js \ + src/chart/horizon.js \ + src/chart/qq.js \ + src/end.js + +d3.layout.js: \ + src/start.js \ + src/layout/layout.js \ + src/layout/bundle.js \ + src/layout/chord.js \ + src/layout/force.js \ + src/layout/partition.js \ + src/layout/pie.js \ + src/layout/stack.js \ + src/layout/histogram.js \ + src/layout/hierarchy.js \ + src/layout/pack.js \ + src/layout/cluster.js \ + src/layout/tree.js \ + src/layout/treemap.js \ + src/end.js + +d3.geo.js: \ + src/start.js \ + src/geo/geo.js \ + src/geo/azimuthal.js \ + src/geo/albers.js \ + src/geo/bonne.js \ + src/geo/equirectangular.js \ + src/geo/mercator.js \ + src/geo/type.js \ + src/geo/path.js \ + src/geo/bounds.js \ + src/geo/circle.js \ + src/geo/greatArc.js \ + src/geo/greatCircle.js \ + src/end.js + +d3.csv.js: \ + src/start.js \ + src/csv/csv.js \ + src/csv/parse.js \ + src/csv/format.js \ + src/end.js + +d3.time.js: \ + src/start.js \ + src/time/time.js \ + src/time/format.js \ + src/time/format-utc.js \ + src/time/format-iso.js \ + src/time/range.js \ + src/time/second.js \ + src/time/seconds.js \ + src/time/minute.js \ + src/time/minutes.js \ + src/time/hour.js \ + src/time/hours.js \ + src/time/day.js \ + src/time/days.js \ + src/time/week.js \ + src/time/weeks.js \ + src/time/month.js \ + src/time/months.js \ + src/time/year.js \ + src/time/years.js \ + src/time/scale.js \ + src/time/scale-utc.js \ + src/end.js + +d3.geom.js: \ + src/start.js \ + src/geom/geom.js \ + src/geom/contour.js \ + src/geom/hull.js \ + src/geom/polygon.js \ + src/geom/voronoi.js \ + src/geom/delaunay.js \ + src/geom/quadtree.js \ + src/end.js + +test: all + @$(JS_TESTER) + +%.min.js: %.js Makefile + @rm -f $@ + $(JS_COMPILER) < $< > $@ + +d3.%: Makefile + @rm -f $@ + cat $(filter %.js,$^) > $@ + @chmod a-w $@ + +install: + mkdir -p node_modules + npm install + +package.json: d3.js src/package.js + @rm -f $@ + node src/package.js > $@ + @chmod a-w $@ + +clean: + rm -f d3*.js diff --git a/static/vendor/d3-2.7.5/README.md b/static/vendor/d3-2.7.5/README.md new file mode 100644 index 0000000..94cd51a --- /dev/null +++ b/static/vendor/d3-2.7.5/README.md @@ -0,0 +1,51 @@ +# D3 + +**D3** is a small, free JavaScript library for manipulating HTML documents +based on data. D3 can help you quickly visualize your data as HTML or SVG, +handle interactivity, and incorporate smooth transitions and staged animations +into your pages. You can use D3 as a visualization framework (like Protovis), +or you can use it to build dynamic pages (like jQuery). + +### Browser Support + +D3 should work on any browser, with minimal requirements such as JavaScript +and the [W3C DOM](http://www.w3.org/DOM/) API. By default D3 requires the +[Selectors API](http://www.w3.org/TR/selectors-api/) Level 1, but you can +preload [Sizzle](http://sizzlejs.com/) for compatibility with older browsers. +Some of the included D3 examples use additional browser features, such as +[SVG](http://www.w3.org/TR/SVG/) and [CSS3 +Transitions](http://www.w3.org/TR/css3-transitions/). These features are not +required to use D3, but are useful for visualization! D3 is not a +compatibility layer. The examples should work on Firefox, Chrome (Chromium), +Safari (WebKit), Opera and IE9. + +Note: Chrome has strict permissions for reading files out of the local file +system. Some examples use AJAX which works differently via HTTP instead of local +files. For the best experience, load the D3 examples from your own machine via +HTTP. Any static file web server will work; for example you can run Python's +built-in server: + + python -m SimpleHTTPServer 8888 + +Once this is running, go to: + +### Development Setup + +This repository should work out of the box if you just want to create new +visualizations using D3. On the other hand, if you want to extend D3 with new +features, fix bugs, or run tests, you'll need to install a few more things. + +D3's test framework uses [Vows](http://vowsjs.org), which depends on +[Node.js](http://nodejs.org/) and [NPM](http://npmjs.org/). If you are +developing on Mac OS X, an easy way to install Node and NPM is using +[Homebrew](http://mxcl.github.com/homebrew/): + + brew install node + brew install npm + +Next, from the root directory of this repository, install D3's dependencies: + + make install + +You can see the list of dependencies in package.json. NPM will install the +packages in the node_modules directory. diff --git a/static/vendor/d3-2.7.5/d3.chart.js b/static/vendor/d3-2.7.5/d3.chart.js new file mode 100644 index 0000000..281d007 --- /dev/null +++ b/static/vendor/d3-2.7.5/d3.chart.js @@ -0,0 +1,984 @@ +(function(){d3.chart = {}; +// Inspired by http://informationandvisualization.de/blog/box-plot +d3.chart.box = function() { + var width = 1, + height = 1, + duration = 0, + domain = null, + value = Number, + whiskers = d3_chart_boxWhiskers, + quartiles = d3_chart_boxQuartiles, + tickFormat = null; + + // For each small multiple… + function box(g) { + g.each(function(d, i) { + d = d.map(value).sort(d3.ascending); + var g = d3.select(this), + n = d.length, + min = d[0], + max = d[n - 1]; + + // Compute quartiles. Must return exactly 3 elements. + var quartileData = d.quartiles = quartiles(d); + + // Compute whiskers. Must return exactly 2 elements, or null. + var whiskerIndices = whiskers && whiskers.call(this, d, i), + whiskerData = whiskerIndices && whiskerIndices.map(function(i) { return d[i]; }); + + // Compute outliers. If no whiskers are specified, all data are "outliers". + // We compute the outliers as indices, so that we can join across transitions! + var outlierIndices = whiskerIndices + ? d3.range(0, whiskerIndices[0]).concat(d3.range(whiskerIndices[1] + 1, n)) + : d3.range(n); + + // Compute the new x-scale. + var x1 = d3.scale.linear() + .domain(domain && domain.call(this, d, i) || [min, max]) + .range([height, 0]); + + // Retrieve the old x-scale, if this is an update. + var x0 = this.__chart__ || d3.scale.linear() + .domain([0, Infinity]) + .range(x1.range()); + + // Stash the new scale. + this.__chart__ = x1; + + // Note: the box, median, and box tick elements are fixed in number, + // so we only have to handle enter and update. In contrast, the outliers + // and other elements are variable, so we need to exit them! Variable + // elements also fade in and out. + + // Update center line: the vertical line spanning the whiskers. + var center = g.selectAll("line.center") + .data(whiskerData ? [whiskerData] : []); + + center.enter().insert("svg:line", "rect") + .attr("class", "center") + .attr("x1", width / 2) + .attr("y1", function(d) { return x0(d[0]); }) + .attr("x2", width / 2) + .attr("y2", function(d) { return x0(d[1]); }) + .style("opacity", 1e-6) + .transition() + .duration(duration) + .style("opacity", 1) + .attr("y1", function(d) { return x1(d[0]); }) + .attr("y2", function(d) { return x1(d[1]); }); + + center.transition() + .duration(duration) + .style("opacity", 1) + .attr("y1", function(d) { return x1(d[0]); }) + .attr("y2", function(d) { return x1(d[1]); }); + + center.exit().transition() + .duration(duration) + .style("opacity", 1e-6) + .attr("y1", function(d) { return x1(d[0]); }) + .attr("y2", function(d) { return x1(d[1]); }) + .remove(); + + // Update innerquartile box. + var box = g.selectAll("rect.box") + .data([quartileData]); + + box.enter().append("svg:rect") + .attr("class", "box") + .attr("x", 0) + .attr("y", function(d) { return x0(d[2]); }) + .attr("width", width) + .attr("height", function(d) { return x0(d[0]) - x0(d[2]); }) + .transition() + .duration(duration) + .attr("y", function(d) { return x1(d[2]); }) + .attr("height", function(d) { return x1(d[0]) - x1(d[2]); }); + + box.transition() + .duration(duration) + .attr("y", function(d) { return x1(d[2]); }) + .attr("height", function(d) { return x1(d[0]) - x1(d[2]); }); + + // Update median line. + var medianLine = g.selectAll("line.median") + .data([quartileData[1]]); + + medianLine.enter().append("svg:line") + .attr("class", "median") + .attr("x1", 0) + .attr("y1", x0) + .attr("x2", width) + .attr("y2", x0) + .transition() + .duration(duration) + .attr("y1", x1) + .attr("y2", x1); + + medianLine.transition() + .duration(duration) + .attr("y1", x1) + .attr("y2", x1); + + // Update whiskers. + var whisker = g.selectAll("line.whisker") + .data(whiskerData || []); + + whisker.enter().insert("svg:line", "circle, text") + .attr("class", "whisker") + .attr("x1", 0) + .attr("y1", x0) + .attr("x2", width) + .attr("y2", x0) + .style("opacity", 1e-6) + .transition() + .duration(duration) + .attr("y1", x1) + .attr("y2", x1) + .style("opacity", 1); + + whisker.transition() + .duration(duration) + .attr("y1", x1) + .attr("y2", x1) + .style("opacity", 1); + + whisker.exit().transition() + .duration(duration) + .attr("y1", x1) + .attr("y2", x1) + .style("opacity", 1e-6) + .remove(); + + // Update outliers. + var outlier = g.selectAll("circle.outlier") + .data(outlierIndices, Number); + + outlier.enter().insert("svg:circle", "text") + .attr("class", "outlier") + .attr("r", 5) + .attr("cx", width / 2) + .attr("cy", function(i) { return x0(d[i]); }) + .style("opacity", 1e-6) + .transition() + .duration(duration) + .attr("cy", function(i) { return x1(d[i]); }) + .style("opacity", 1); + + outlier.transition() + .duration(duration) + .attr("cy", function(i) { return x1(d[i]); }) + .style("opacity", 1); + + outlier.exit().transition() + .duration(duration) + .attr("cy", function(i) { return x1(d[i]); }) + .style("opacity", 1e-6) + .remove(); + + // Compute the tick format. + var format = tickFormat || x1.tickFormat(8); + + // Update box ticks. + var boxTick = g.selectAll("text.box") + .data(quartileData); + + boxTick.enter().append("svg:text") + .attr("class", "box") + .attr("dy", ".3em") + .attr("dx", function(d, i) { return i & 1 ? 6 : -6 }) + .attr("x", function(d, i) { return i & 1 ? width : 0 }) + .attr("y", x0) + .attr("text-anchor", function(d, i) { return i & 1 ? "start" : "end"; }) + .text(format) + .transition() + .duration(duration) + .attr("y", x1); + + boxTick.transition() + .duration(duration) + .text(format) + .attr("y", x1); + + // Update whisker ticks. These are handled separately from the box + // ticks because they may or may not exist, and we want don't want + // to join box ticks pre-transition with whisker ticks post-. + var whiskerTick = g.selectAll("text.whisker") + .data(whiskerData || []); + + whiskerTick.enter().append("svg:text") + .attr("class", "whisker") + .attr("dy", ".3em") + .attr("dx", 6) + .attr("x", width) + .attr("y", x0) + .text(format) + .style("opacity", 1e-6) + .transition() + .duration(duration) + .attr("y", x1) + .style("opacity", 1); + + whiskerTick.transition() + .duration(duration) + .text(format) + .attr("y", x1) + .style("opacity", 1); + + whiskerTick.exit().transition() + .duration(duration) + .attr("y", x1) + .style("opacity", 1e-6) + .remove(); + }); + d3.timer.flush(); + } + + box.width = function(x) { + if (!arguments.length) return width; + width = x; + return box; + }; + + box.height = function(x) { + if (!arguments.length) return height; + height = x; + return box; + }; + + box.tickFormat = function(x) { + if (!arguments.length) return tickFormat; + tickFormat = x; + return box; + }; + + box.duration = function(x) { + if (!arguments.length) return duration; + duration = x; + return box; + }; + + box.domain = function(x) { + if (!arguments.length) return domain; + domain = x == null ? x : d3.functor(x); + return box; + }; + + box.value = function(x) { + if (!arguments.length) return value; + value = x; + return box; + }; + + box.whiskers = function(x) { + if (!arguments.length) return whiskers; + whiskers = x; + return box; + }; + + box.quartiles = function(x) { + if (!arguments.length) return quartiles; + quartiles = x; + return box; + }; + + return box; +}; + +function d3_chart_boxWhiskers(d) { + return [0, d.length - 1]; +} + +function d3_chart_boxQuartiles(d) { + return [ + d3.quantile(d, .25), + d3.quantile(d, .5), + d3.quantile(d, .75) + ]; +} +// Chart design based on the recommendations of Stephen Few. Implementation +// based on the work of Clint Ivy, Jamie Love, and Jason Davies. +// http://projects.instantcognition.com/protovis/bulletchart/ +d3.chart.bullet = function() { + var orient = "left", // TODO top & bottom + reverse = false, + duration = 0, + ranges = d3_chart_bulletRanges, + markers = d3_chart_bulletMarkers, + measures = d3_chart_bulletMeasures, + width = 380, + height = 30, + tickFormat = null; + + // For each small multiple… + function bullet(g) { + g.each(function(d, i) { + var rangez = ranges.call(this, d, i).slice().sort(d3.descending), + markerz = markers.call(this, d, i).slice().sort(d3.descending), + measurez = measures.call(this, d, i).slice().sort(d3.descending), + g = d3.select(this); + + // Compute the new x-scale. + var x1 = d3.scale.linear() + .domain([0, Math.max(rangez[0], markerz[0], measurez[0])]) + .range(reverse ? [width, 0] : [0, width]); + + // Retrieve the old x-scale, if this is an update. + var x0 = this.__chart__ || d3.scale.linear() + .domain([0, Infinity]) + .range(x1.range()); + + // Stash the new scale. + this.__chart__ = x1; + + // Derive width-scales from the x-scales. + var w0 = d3_chart_bulletWidth(x0), + w1 = d3_chart_bulletWidth(x1); + + // Update the range rects. + var range = g.selectAll("rect.range") + .data(rangez); + + range.enter().append("svg:rect") + .attr("class", function(d, i) { return "range s" + i; }) + .attr("width", w0) + .attr("height", height) + .attr("x", reverse ? x0 : 0) + .transition() + .duration(duration) + .attr("width", w1) + .attr("x", reverse ? x1 : 0); + + range.transition() + .duration(duration) + .attr("x", reverse ? x1 : 0) + .attr("width", w1) + .attr("height", height); + + // Update the measure rects. + var measure = g.selectAll("rect.measure") + .data(measurez); + + measure.enter().append("svg:rect") + .attr("class", function(d, i) { return "measure s" + i; }) + .attr("width", w0) + .attr("height", height / 3) + .attr("x", reverse ? x0 : 0) + .attr("y", height / 3) + .transition() + .duration(duration) + .attr("width", w1) + .attr("x", reverse ? x1 : 0); + + measure.transition() + .duration(duration) + .attr("width", w1) + .attr("height", height / 3) + .attr("x", reverse ? x1 : 0) + .attr("y", height / 3); + + // Update the marker lines. + var marker = g.selectAll("line.marker") + .data(markerz); + + marker.enter().append("svg:line") + .attr("class", "marker") + .attr("x1", x0) + .attr("x2", x0) + .attr("y1", height / 6) + .attr("y2", height * 5 / 6) + .transition() + .duration(duration) + .attr("x1", x1) + .attr("x2", x1); + + marker.transition() + .duration(duration) + .attr("x1", x1) + .attr("x2", x1) + .attr("y1", height / 6) + .attr("y2", height * 5 / 6); + + // Compute the tick format. + var format = tickFormat || x1.tickFormat(8); + + // Update the tick groups. + var tick = g.selectAll("g.tick") + .data(x1.ticks(8), function(d) { + return this.textContent || format(d); + }); + + // Initialize the ticks with the old scale, x0. + var tickEnter = tick.enter().append("svg:g") + .attr("class", "tick") + .attr("transform", d3_chart_bulletTranslate(x0)) + .style("opacity", 1e-6); + + tickEnter.append("svg:line") + .attr("y1", height) + .attr("y2", height * 7 / 6); + + tickEnter.append("svg:text") + .attr("text-anchor", "middle") + .attr("dy", "1em") + .attr("y", height * 7 / 6) + .text(format); + + // Transition the entering ticks to the new scale, x1. + tickEnter.transition() + .duration(duration) + .attr("transform", d3_chart_bulletTranslate(x1)) + .style("opacity", 1); + + // Transition the updating ticks to the new scale, x1. + var tickUpdate = tick.transition() + .duration(duration) + .attr("transform", d3_chart_bulletTranslate(x1)) + .style("opacity", 1); + + tickUpdate.select("line") + .attr("y1", height) + .attr("y2", height * 7 / 6); + + tickUpdate.select("text") + .attr("y", height * 7 / 6); + + // Transition the exiting ticks to the new scale, x1. + tick.exit().transition() + .duration(duration) + .attr("transform", d3_chart_bulletTranslate(x1)) + .style("opacity", 1e-6) + .remove(); + }); + d3.timer.flush(); + } + + // left, right, top, bottom + bullet.orient = function(x) { + if (!arguments.length) return orient; + orient = x; + reverse = orient == "right" || orient == "bottom"; + return bullet; + }; + + // ranges (bad, satisfactory, good) + bullet.ranges = function(x) { + if (!arguments.length) return ranges; + ranges = x; + return bullet; + }; + + // markers (previous, goal) + bullet.markers = function(x) { + if (!arguments.length) return markers; + markers = x; + return bullet; + }; + + // measures (actual, forecast) + bullet.measures = function(x) { + if (!arguments.length) return measures; + measures = x; + return bullet; + }; + + bullet.width = function(x) { + if (!arguments.length) return width; + width = x; + return bullet; + }; + + bullet.height = function(x) { + if (!arguments.length) return height; + height = x; + return bullet; + }; + + bullet.tickFormat = function(x) { + if (!arguments.length) return tickFormat; + tickFormat = x; + return bullet; + }; + + bullet.duration = function(x) { + if (!arguments.length) return duration; + duration = x; + return bullet; + }; + + return bullet; +}; + +function d3_chart_bulletRanges(d) { + return d.ranges; +} + +function d3_chart_bulletMarkers(d) { + return d.markers; +} + +function d3_chart_bulletMeasures(d) { + return d.measures; +} + +function d3_chart_bulletTranslate(x) { + return function(d) { + return "translate(" + x(d) + ",0)"; + }; +} + +function d3_chart_bulletWidth(x) { + var x0 = x(0); + return function(d) { + return Math.abs(x(d) - x0); + }; +} +// Implements a horizon layout, which is a variation of a single-series +// area chart where the area is folded into multiple bands. Color is used to +// encode band, allowing the size of the chart to be reduced significantly +// without impeding readability. This layout algorithm is based on the work of +// J. Heer, N. Kong and M. Agrawala in "Sizing the Horizon: The Effects of Chart +// Size and Layering on the Graphical Perception of Time Series Visualizations", +// CHI 2009. http://hci.stanford.edu/publications/2009/heer-horizon-chi09.pdf +d3.chart.horizon = function() { + var bands = 1, // between 1 and 5, typically + mode = "offset", // or mirror + interpolate = "linear", // or basis, monotone, step-before, etc. + x = d3_chart_horizonX, + y = d3_chart_horizonY, + w = 960, + h = 40, + duration = 0; + + var color = d3.scale.linear() + .domain([-1, 0, 1]) + .range(["#d62728", "#fff", "#1f77b4"]); + + // For each small multiple… + function horizon(g) { + g.each(function(d, i) { + var g = d3.select(this), + n = 2 * bands + 1, + xMin = Infinity, + xMax = -Infinity, + yMax = -Infinity, + x0, // old x-scale + y0, // old y-scale + id; // unique id for paths + + // Compute x- and y-values along with extents. + var data = d.map(function(d, i) { + var xv = x.call(this, d, i), + yv = y.call(this, d, i); + if (xv < xMin) xMin = xv; + if (xv > xMax) xMax = xv; + if (-yv > yMax) yMax = -yv; + if (yv > yMax) yMax = yv; + return [xv, yv]; + }); + + // Compute the new x- and y-scales. + var x1 = d3.scale.linear().domain([xMin, xMax]).range([0, w]), + y1 = d3.scale.linear().domain([0, yMax]).range([0, h * bands]); + + // Retrieve the old scales, if this is an update. + if (this.__chart__) { + x0 = this.__chart__.x; + y0 = this.__chart__.y; + id = this.__chart__.id; + } else { + x0 = d3.scale.linear().domain([0, Infinity]).range(x1.range()); + y0 = d3.scale.linear().domain([0, Infinity]).range(y1.range()); + id = ++d3_chart_horizonId; + } + + // We'll use a defs to store the area path and the clip path. + var defs = g.selectAll("defs") + .data([data]); + + var defsEnter = defs.enter().append("svg:defs"); + + // The clip path is a simple rect. + defsEnter.append("svg:clipPath") + .attr("id", "d3_chart_horizon_clip" + id) + .append("svg:rect") + .attr("width", w) + .attr("height", h); + + defs.select("rect").transition() + .duration(duration) + .attr("width", w) + .attr("height", h); + + // The area path is rendered with our resuable d3.svg.area. + defsEnter.append("svg:path") + .attr("id", "d3_chart_horizon_path" + id) + .attr("d", d3_chart_horizonArea + .interpolate(interpolate) + .x(function(d) { return x0(d[0]); }) + .y0(h * bands) + .y1(function(d) { return h * bands - y0(d[1]); })) + .transition() + .duration(duration) + .attr("d", d3_chart_horizonArea + .x(function(d) { return x1(d[0]); }) + .y1(function(d) { return h * bands - y1(d[1]); })); + + defs.select("path").transition() + .duration(duration) + .attr("d", d3_chart_horizonArea); + + // We'll use a container to clip all horizon layers at once. + g.selectAll("g") + .data([null]) + .enter().append("svg:g") + .attr("clip-path", "url(#d3_chart_horizon_clip" + id + ")"); + + // Define the transform function based on the mode. + var transform = mode == "offset" + ? function(d) { return "translate(0," + (d + (d < 0) - bands) * h + ")"; } + : function(d) { return (d < 0 ? "scale(1,-1)" : "") + "translate(0," + (d - bands) * h + ")"; }; + + // Instantiate each copy of the path with different transforms. + var u = g.select("g").selectAll("use") + .data(d3.range(-1, -bands - 1, -1).concat(d3.range(1, bands + 1)), Number); + + // TODO don't fudge the enter transition + u.enter().append("svg:use") + .attr("xlink:href", "#d3_chart_horizon_path" + id) + .attr("transform", function(d) { return transform(d + (d > 0 ? 1 : -1)); }) + .style("fill", color) + .transition() + .duration(duration) + .attr("transform", transform); + + u.transition() + .duration(duration) + .attr("transform", transform) + .style("fill", color); + + u.exit().transition() + .duration(duration) + .attr("transform", transform) + .remove(); + + // Stash the new scales. + this.__chart__ = {x: x1, y: y1, id: id}; + }); + d3.timer.flush(); + } + + horizon.duration = function(x) { + if (!arguments.length) return duration; + duration = +x; + return horizon; + }; + + horizon.bands = function(x) { + if (!arguments.length) return bands; + bands = +x; + color.domain([-bands, 0, bands]); + return horizon; + }; + + horizon.mode = function(x) { + if (!arguments.length) return mode; + mode = x + ""; + return horizon; + }; + + horizon.colors = function(x) { + if (!arguments.length) return color.range(); + color.range(x); + return horizon; + }; + + horizon.interpolate = function(x) { + if (!arguments.length) return interpolate; + interpolate = x + ""; + return horizon; + }; + + horizon.x = function(z) { + if (!arguments.length) return x; + x = z; + return horizon; + }; + + horizon.y = function(z) { + if (!arguments.length) return y; + y = z; + return horizon; + }; + + horizon.width = function(x) { + if (!arguments.length) return w; + w = +x; + return horizon; + }; + + horizon.height = function(x) { + if (!arguments.length) return h; + h = +x; + return horizon; + }; + + return horizon; +}; + +var d3_chart_horizonArea = d3.svg.area(), + d3_chart_horizonId = 0; + +function d3_chart_horizonX(d) { + return d[0]; +} + +function d3_chart_horizonY(d) { + return d[1]; +} +// Based on http://vis.stanford.edu/protovis/ex/qqplot.html +d3.chart.qq = function() { + var width = 1, + height = 1, + duration = 0, + domain = null, + tickFormat = null, + n = 100, + x = d3_chart_qqX, + y = d3_chart_qqY; + + // For each small multiple… + function qq(g) { + g.each(function(d, i) { + var g = d3.select(this), + qx = d3_chart_qqQuantiles(n, x.call(this, d, i)), + qy = d3_chart_qqQuantiles(n, y.call(this, d, i)), + xd = domain && domain.call(this, d, i) || [d3.min(qx), d3.max(qx)], // new x-domain + yd = domain && domain.call(this, d, i) || [d3.min(qy), d3.max(qy)], // new y-domain + x0, // old x-scale + y0; // old y-scale + + // Compute the new x-scale. + var x1 = d3.scale.linear() + .domain(xd) + .range([0, width]); + + // Compute the new y-scale. + var y1 = d3.scale.linear() + .domain(yd) + .range([height, 0]); + + // Retrieve the old scales, if this is an update. + if (this.__chart__) { + x0 = this.__chart__.x; + y0 = this.__chart__.y; + } else { + x0 = d3.scale.linear().domain([0, Infinity]).range(x1.range()); + y0 = d3.scale.linear().domain([0, Infinity]).range(y1.range()); + } + + // Stash the new scales. + this.__chart__ = {x: x1, y: y1}; + + // Update diagonal line. + var diagonal = g.selectAll("line.diagonal") + .data([null]); + + diagonal.enter().append("svg:line") + .attr("class", "diagonal") + .attr("x1", x1(yd[0])) + .attr("y1", y1(xd[0])) + .attr("x2", x1(yd[1])) + .attr("y2", y1(xd[1])); + + diagonal.transition() + .duration(duration) + .attr("x1", x1(yd[0])) + .attr("y1", y1(xd[0])) + .attr("x2", x1(yd[1])) + .attr("y2", y1(xd[1])); + + // Update quantile plots. + var circle = g.selectAll("circle") + .data(d3.range(n).map(function(i) { + return {x: qx[i], y: qy[i]}; + })); + + circle.enter().append("svg:circle") + .attr("class", "quantile") + .attr("r", 4.5) + .attr("cx", function(d) { return x0(d.x); }) + .attr("cy", function(d) { return y0(d.y); }) + .style("opacity", 1e-6) + .transition() + .duration(duration) + .attr("cx", function(d) { return x1(d.x); }) + .attr("cy", function(d) { return y1(d.y); }) + .style("opacity", 1); + + circle.transition() + .duration(duration) + .attr("cx", function(d) { return x1(d.x); }) + .attr("cy", function(d) { return y1(d.y); }) + .style("opacity", 1); + + circle.exit().transition() + .duration(duration) + .attr("cx", function(d) { return x1(d.x); }) + .attr("cy", function(d) { return y1(d.y); }) + .style("opacity", 1e-6) + .remove(); + + var xformat = tickFormat || x1.tickFormat(4), + yformat = tickFormat || y1.tickFormat(4), + tx = function(d) { return "translate(" + x1(d) + "," + height + ")"; }, + ty = function(d) { return "translate(0," + y1(d) + ")"; }; + + // Update x-ticks. + var xtick = g.selectAll("g.x.tick") + .data(x1.ticks(4), function(d) { + return this.textContent || xformat(d); + }); + + var xtickEnter = xtick.enter().append("svg:g") + .attr("class", "x tick") + .attr("transform", function(d) { return "translate(" + x0(d) + "," + height + ")"; }) + .style("opacity", 1e-6); + + xtickEnter.append("svg:line") + .attr("y1", 0) + .attr("y2", -6); + + xtickEnter.append("svg:text") + .attr("text-anchor", "middle") + .attr("dy", "1em") + .text(xformat); + + // Transition the entering ticks to the new scale, x1. + xtickEnter.transition() + .duration(duration) + .attr("transform", tx) + .style("opacity", 1); + + // Transition the updating ticks to the new scale, x1. + xtick.transition() + .duration(duration) + .attr("transform", tx) + .style("opacity", 1); + + // Transition the exiting ticks to the new scale, x1. + xtick.exit().transition() + .duration(duration) + .attr("transform", tx) + .style("opacity", 1e-6) + .remove(); + + // Update ticks. + var ytick = g.selectAll("g.y.tick") + .data(y1.ticks(4), function(d) { + return this.textContent || yformat(d); + }); + + var ytickEnter = ytick.enter().append("svg:g") + .attr("class", "y tick") + .attr("transform", function(d) { return "translate(0," + y0(d) + ")"; }) + .style("opacity", 1e-6); + + ytickEnter.append("svg:line") + .attr("x1", 0) + .attr("x2", 6); + + ytickEnter.append("svg:text") + .attr("text-anchor", "end") + .attr("dx", "-.5em") + .attr("dy", ".3em") + .text(yformat); + + // Transition the entering ticks to the new scale, y1. + ytickEnter.transition() + .duration(duration) + .attr("transform", ty) + .style("opacity", 1); + + // Transition the updating ticks to the new scale, y1. + ytick.transition() + .duration(duration) + .attr("transform", ty) + .style("opacity", 1); + + // Transition the exiting ticks to the new scale, y1. + ytick.exit().transition() + .duration(duration) + .attr("transform", ty) + .style("opacity", 1e-6) + .remove(); + }); + } + + qq.width = function(x) { + if (!arguments.length) return width; + width = x; + return qq; + }; + + qq.height = function(x) { + if (!arguments.length) return height; + height = x; + return qq; + }; + + qq.duration = function(x) { + if (!arguments.length) return duration; + duration = x; + return qq; + }; + + qq.domain = function(x) { + if (!arguments.length) return domain; + domain = x == null ? x : d3.functor(x); + return qq; + }; + + qq.count = function(z) { + if (!arguments.length) return n; + n = z; + return qq; + }; + + qq.x = function(z) { + if (!arguments.length) return x; + x = z; + return qq; + }; + + qq.y = function(z) { + if (!arguments.length) return y; + y = z; + return qq; + }; + + qq.tickFormat = function(x) { + if (!arguments.length) return tickFormat; + tickFormat = x; + return qq; + }; + + return qq; +}; + +function d3_chart_qqQuantiles(n, values) { + var m = values.length - 1; + values = values.slice().sort(d3.ascending); + return d3.range(n).map(function(i) { + return values[~~(i * m / n)]; + }); +} + +function d3_chart_qqX(d) { + return d.x; +} + +function d3_chart_qqY(d) { + return d.y; +} +})(); diff --git a/static/vendor/d3-2.7.5/d3.chart.min.js b/static/vendor/d3-2.7.5/d3.chart.min.js new file mode 100644 index 0000000..464690d --- /dev/null +++ b/static/vendor/d3-2.7.5/d3.chart.min.js @@ -0,0 +1 @@ +(function(){function a(a){return[0,a.length-1]}function b(a){return[d3.quantile(a,.25),d3.quantile(a,.5),d3.quantile(a,.75)]}function c(a){return a.ranges}function d(a){return a.markers}function e(a){return a.measures}function f(a){return function(b){return"translate("+a(b)+",0)"}}function g(a){var b=a(0);return function(c){return Math.abs(a(c)-b)}}function j(a){return a[0]}function k(a){return a[1]}function l(a,b){var c=b.length-1;return b=b.slice().sort(d3.ascending),d3.range(a).map(function(d){return b[~~(d*c/a)]})}function m(a){return a.x}function n(a){return a.y}d3.chart={},d3.chart.box=function(){function k(a){a.each(function(a,b){a=a.map(g).sort(d3.ascending);var k=d3.select(this),l=a.length,m=a[0],n=a[l-1],o=a.quartiles=i(a),p=h&&h.call(this,a,b),q=p&&p.map(function(b){return a[b]}),r=p?d3.range(0,p[0]).concat(d3.range(p[1]+1,l)):d3.range(l),s=d3.scale.linear().domain(f&&f.call(this,a,b)||[m,n]).range([d,0]),t=this.__chart__||d3.scale.linear().domain([0,Infinity]).range(s.range());this.__chart__=s;var u=k.selectAll("line.center").data(q?[q]:[]);u.enter().insert("svg:line","rect").attr("class","center").attr("x1",c/2).attr("y1",function(a){return t(a[0])}).attr("x2",c/2).attr("y2",function(a){return t(a[1])}).style("opacity",1e-6).transition().duration(e).style("opacity",1).attr("y1",function(a){return s(a[0])}).attr("y2",function(a){return s(a[1])}),u.transition().duration(e).style("opacity",1).attr("y1",function(a){return s(a[0])}).attr("y2",function(a){return s(a[1])}),u.exit().transition().duration(e).style("opacity",1e-6).attr("y1",function(a){return s(a[0])}).attr("y2",function(a){return s(a[1])}).remove();var v=k.selectAll("rect.box").data([o]);v.enter().append("svg:rect").attr("class","box").attr("x",0).attr("y",function(a){return t(a[2])}).attr("width",c).attr("height",function(a){return t(a[0])-t(a[2])}).transition().duration(e).attr("y",function(a){return s(a[2])}).attr("height",function(a){return s(a[0])-s(a[2])}),v.transition().duration(e).attr("y",function(a){return s(a[2])}).attr("height",function(a){return s(a[0])-s(a[2])});var w=k.selectAll("line.median").data([o[1]]);w.enter().append("svg:line").attr("class","median").attr("x1",0).attr("y1",t).attr("x2",c).attr("y2",t).transition().duration(e).attr("y1",s).attr("y2",s),w.transition().duration(e).attr("y1",s).attr("y2",s);var x=k.selectAll("line.whisker").data(q||[]);x.enter().insert("svg:line","circle, text").attr("class","whisker").attr("x1",0).attr("y1",t).attr("x2",c).attr("y2",t).style("opacity",1e-6).transition().duration(e).attr("y1",s).attr("y2",s).style("opacity",1),x.transition().duration(e).attr("y1",s).attr("y2",s).style("opacity",1),x.exit().transition().duration(e).attr("y1",s).attr("y2",s).style("opacity",1e-6).remove();var y=k.selectAll("circle.outlier").data(r,Number);y.enter().insert("svg:circle","text").attr("class","outlier").attr("r",5).attr("cx",c/2).attr("cy",function(b){return t(a[b])}).style("opacity",1e-6).transition().duration(e).attr("cy",function(b){return s(a[b])}).style("opacity",1),y.transition().duration(e).attr("cy",function(b){return s(a[b])}).style("opacity",1),y.exit().transition().duration(e).attr("cy",function(b){return s(a[b])}).style("opacity",1e-6).remove();var z=j||s.tickFormat(8),A=k.selectAll("text.box").data(o);A.enter().append("svg:text").attr("class","box").attr("dy",".3em").attr("dx",function(a,b){return b&1?6:-6}).attr("x",function(a,b){return b&1?c:0}).attr("y",t).attr("text-anchor",function(a,b){return b&1?"start":"end"}).text(z).transition().duration(e).attr("y",s),A.transition().duration(e).text(z).attr("y",s);var B=k.selectAll("text.whisker").data(q||[]);B.enter().append("svg:text").attr("class","whisker").attr("dy",".3em").attr("dx",6).attr("x",c).attr("y",t).text(z).style("opacity",1e-6).transition().duration(e).attr("y",s).style("opacity",1),B.transition().duration(e).text(z).attr("y",s).style("opacity",1),B.exit().transition().duration(e).attr("y",s).style("opacity",1e-6).remove()}),d3.timer.flush()}var c=1,d=1,e=0,f=null,g=Number,h=a,i=b,j=null;return k.width=function(a){return arguments.length?(c=a,k):c},k.height=function(a){return arguments.length?(d=a,k):d},k.tickFormat=function(a){return arguments.length?(j=a,k):j},k.duration=function(a){return arguments.length?(e=a,k):e},k.domain=function(a){return arguments.length?(f=a==null?a:d3.functor(a),k):f},k.value=function(a){return arguments.length?(g=a,k):g},k.whiskers=function(a){return arguments.length?(h=a,k):h},k.quartiles=function(a){return arguments.length?(i=a,k):i},k},d3.chart.bullet=function(){function o(a){a.each(function(a,c){var d=i.call(this,a,c).slice().sort(d3.descending),e=j.call(this,a,c).slice().sort(d3.descending),o=k.call(this,a,c).slice().sort(d3.descending),p=d3.select(this),q=d3.scale.linear().domain([0,Math.max(d[0],e[0],o[0])]).range(b?[l,0]:[0,l]),r=this.__chart__||d3.scale.linear().domain([0,Infinity]).range(q.range());this.__chart__=q;var s=g(r),t=g(q),u=p.selectAll("rect.range").data(d);u.enter().append("svg:rect").attr("class",function(a,b){return"range s"+b}).attr("width",s).attr("height",m).attr("x",b?r:0).transition().duration(h).attr("width",t).attr("x",b?q:0),u.transition().duration(h).attr("x",b?q:0).attr("width",t).attr("height",m);var v=p.selectAll("rect.measure").data(o);v.enter().append("svg:rect").attr("class",function(a,b){return"measure s"+b}).attr("width",s).attr("height",m/3).attr("x",b?r:0).attr("y",m/3).transition().duration(h).attr("width",t).attr("x",b?q:0),v.transition().duration(h).attr("width",t).attr("height",m/3).attr("x",b?q:0).attr("y",m/3);var w=p.selectAll("line.marker").data(e);w.enter().append("svg:line").attr("class","marker").attr("x1",r).attr("x2",r).attr("y1",m/6).attr("y2",m*5/6).transition().duration(h).attr("x1",q).attr("x2",q),w.transition().duration(h).attr("x1",q).attr("x2",q).attr("y1",m/6).attr("y2",m*5/6);var x=n||q.tickFormat(8),y=p.selectAll("g.tick").data(q.ticks(8),function(a){return this.textContent||x(a)}),z=y.enter().append("svg:g").attr("class","tick").attr("transform",f(r)).style("opacity",1e-6);z.append("svg:line").attr("y1",m).attr("y2",m*7/6),z.append("svg:text").attr("text-anchor","middle").attr("dy","1em").attr("y",m*7/6).text(x),z.transition().duration(h).attr("transform",f(q)).style("opacity",1);var A=y.transition().duration(h).attr("transform",f(q)).style("opacity",1);A.select("line").attr("y1",m).attr("y2",m*7/6),A.select("text").attr("y",m*7/6),y.exit().transition().duration(h).attr("transform",f(q)).style("opacity",1e-6).remove()}),d3.timer.flush()}var a="left",b=!1,h=0,i=c,j=d,k=e,l=380,m=30,n=null;return o.orient=function(c){return arguments.length?(a=c,b=a=="right"||a=="bottom",o):a},o.ranges=function(a){return arguments.length?(i=a,o):i},o.markers=function(a){return arguments.length?(j=a,o):j},o.measures=function(a){return arguments.length?(k=a,o):k},o.width=function(a){return arguments.length?(l=a,o):l},o.height=function(a){return arguments.length?(m=a,o):m},o.tickFormat=function(a){return arguments.length?(n=a,o):n},o.duration=function(a){return arguments.length?(h=a,o):h},o},d3.chart.horizon=function(){function n(j){j.each(function(j,k){var n=d3.select(this),o=2*a+1,p=Infinity,q=-Infinity,r=-Infinity,s,t,u,v=j.map(function(a,b){var c=d.call(this,a,b),f=e.call(this,a,b);return cq&&(q=c),-f>r&&(r=-f),f>r&&(r=f),[c,f]}),z=d3.scale.linear().domain([p,q]).range([0,f]),A=d3.scale.linear().domain([0,r]).range([0,g*a]);this.__chart__?(s=this.__chart__.x,t=this.__chart__.y,u=this.__chart__.id):(s=d3.scale.linear().domain([0,Infinity]).range(z.range()),t=d3.scale.linear().domain([0,Infinity]).range(A.range()),u=++i);var B=n.selectAll("defs").data([v]),C=B.enter().append("svg:defs");C.append("svg:clipPath").attr("id","d3_chart_horizon_clip"+u).append("svg:rect").attr("width",f).attr("height",g),B.select("rect").transition().duration(l).attr("width",f).attr("height",g),C.append("svg:path").attr("id","d3_chart_horizon_path"+u).attr("d",h.interpolate(c).x(function(a){return s(a[0])}).y0(g*a).y1(function(b){return g*a-t(b[1])})).transition().duration(l).attr("d",h.x(function(a){return z(a[0])}).y1(function(b){return g*a-A(b[1])})),B.select("path").transition().duration(l).attr("d",h),n.selectAll("g").data([null]).enter().append("svg:g").attr("clip-path","url(#d3_chart_horizon_clip"+u+")");var D=b=="offset"?function(b){return"translate(0,"+(b+(b<0)-a)*g+")"}:function(b){return(b<0?"scale(1,-1)":"")+"translate(0,"+(b-a)*g+")"},E=n.select("g").selectAll("use").data(d3.range(-1,-a-1,-1).concat(d3.range(1,a+1)),Number);E.enter().append("svg:use").attr("xlink:href","#d3_chart_horizon_path"+u).attr("transform",function(a){return D(a+(a>0?1:-1))}).style("fill",m).transition().duration(l).attr("transform",D),E.transition().duration(l).attr("transform",D).style("fill",m),E.exit().transition().duration(l).attr("transform",D).remove(),this.__chart__={x:z,y:A,id:u}}),d3.timer.flush()}var a=1,b="offset",c="linear",d=j,e=k,f=960,g=40,l=0,m=d3.scale.linear().domain([-1,0,1]).range(["#d62728","#fff","#1f77b4"]);return n.duration=function(a){return arguments.length?(l=+a,n):l},n.bands=function(b){return arguments.length?(a=+b,m.domain([-a,0,a]),n):a},n.mode=function(a){return arguments.length?(b=a+"",n):b},n.colors=function(a){return arguments.length?(m.range(a),n):m.range()},n.interpolate=function(a){return arguments.length?(c=a+"",n):c},n.x=function(a){return arguments.length?(d=a,n):d},n.y=function(a){return arguments.length?(e=a,n):e},n.width=function(a){return arguments.length?(f=+a,n):f},n.height=function(a){return arguments.length?(g=+a,n):g},n};var h=d3.svg.area(),i=0;d3.chart.qq=function(){function i(i){i.each(function(i,j){var k=d3.select(this),m=l(f,g.call(this,i,j)),n=l(f,h.call(this,i,j)),o=d&&d.call(this,i,j)||[d3.min(m),d3.max(m)],p=d&&d.call(this,i,j)||[d3.min(n),d3.max(n)],q,r,s=d3.scale.linear().domain(o).range([0,a]),t=d3.scale.linear().domain(p).range([b,0]);this.__chart__?(q=this.__chart__.x,r=this.__chart__.y):(q=d3.scale.linear().domain([0,Infinity]).range(s.range()),r=d3.scale.linear().domain([0,Infinity]).range(t.range())),this.__chart__={x:s,y:t};var u=k.selectAll("line.diagonal").data([null]);u.enter().append("svg:line").attr("class","diagonal").attr("x1",s(p[0])).attr("y1",t(o[0])).attr("x2",s(p[1])).attr("y2",t(o[1])),u.transition().duration(c).attr("x1",s(p[0])).attr("y1",t(o[0])).attr("x2",s(p[1])).attr("y2",t(o[1]));var v=k.selectAll("circle").data(d3.range(f).map(function(a){return{x:m[a],y:n[a]}}));v.enter().append("svg:circle").attr("class","quantile").attr("r",4.5).attr("cx",function(a){return q(a.x)}).attr("cy",function(a){return r(a.y)}).style("opacity",1e-6).transition().duration(c).attr("cx",function(a){return s(a.x)}).attr("cy",function(a){return t(a.y)}).style("opacity",1),v.transition().duration(c).attr("cx",function(a){return s(a.x)}).attr("cy",function(a){return t(a.y)}).style("opacity",1),v.exit().transition().duration(c).attr("cx",function(a){return s(a.x)}).attr("cy",function(a){return t(a.y)}).style("opacity",1e-6).remove();var w=e||s.tickFormat(4),z=e||t.tickFormat(4),A=function(a){return"translate("+s(a)+","+b+")"},B=function(a){return"translate(0,"+t(a)+")"},C=k.selectAll("g.x.tick").data(s.ticks(4),function(a){return this.textContent||w(a)}),D=C.enter().append("svg:g").attr("class","x tick").attr("transform",function(a){return"translate("+q(a)+","+b+")"}).style("opacity",1e-6);D.append("svg:line").attr("y1",0).attr("y2",-6),D.append("svg:text").attr("text-anchor","middle").attr("dy","1em").text(w),D.transition().duration(c).attr("transform",A).style("opacity",1),C.transition().duration(c).attr("transform",A).style("opacity",1),C.exit().transition().duration(c).attr("transform",A).style("opacity",1e-6).remove();var E=k.selectAll("g.y.tick").data(t.ticks(4),function(a){return this.textContent||z(a)}),F=E.enter().append("svg:g").attr("class","y tick").attr("transform",function(a){return"translate(0,"+r(a)+")"}).style("opacity",1e-6);F.append("svg:line").attr("x1",0).attr("x2",6),F.append("svg:text").attr("text-anchor","end").attr("dx","-.5em").attr("dy",".3em").text(z),F.transition().duration(c).attr("transform",B).style("opacity",1),E.transition().duration(c).attr("transform",B).style("opacity",1),E.exit().transition().duration(c).attr("transform",B).style("opacity",1e-6).remove()})}var a=1,b=1,c=0,d=null,e=null,f=100,g=m,h=n;return i.width=function(b){return arguments.length?(a=b,i):a},i.height=function(a){return arguments.length?(b=a,i):b},i.duration=function(a){return arguments.length?(c=a,i):c},i.domain=function(a){return arguments.length?(d=a==null?a:d3.functor(a),i):d},i.count=function(a){return arguments.length?(f=a,i):f},i.x=function(a){return arguments.length?(g=a,i):g},i.y=function(a){return arguments.length?(h=a,i):h},i.tickFormat=function(a){return arguments.length?(e=a,i):e},i}})(); \ No newline at end of file diff --git a/static/vendor/d3-2.7.5/d3.csv.js b/static/vendor/d3-2.7.5/d3.csv.js new file mode 100644 index 0000000..7565b83 --- /dev/null +++ b/static/vendor/d3-2.7.5/d3.csv.js @@ -0,0 +1,92 @@ +(function(){d3.csv = function(url, callback) { + d3.text(url, "text/csv", function(text) { + callback(text && d3.csv.parse(text)); + }); +}; +d3.csv.parse = function(text) { + var header; + return d3.csv.parseRows(text, function(row, i) { + if (i) { + var o = {}, j = -1, m = header.length; + while (++j < m) o[header[j]] = row[j]; + return o; + } else { + header = row; + return null; + } + }); +}; + +d3.csv.parseRows = function(text, f) { + var EOL = {}, // sentinel value for end-of-line + EOF = {}, // sentinel value for end-of-file + rows = [], // output rows + re = /\r\n|[,\r\n]/g, // field separator regex + n = 0, // the current line number + t, // the current token + eol; // is the current token followed by EOL? + + re.lastIndex = 0; // work-around bug in FF 3.6 + + /** @private Returns the next token. */ + function token() { + if (re.lastIndex >= text.length) return EOF; // special case: end of file + if (eol) { eol = false; return EOL; } // special case: end of line + + // special case: quotes + var j = re.lastIndex; + if (text.charCodeAt(j) === 34) { + var i = j; + while (i++ < text.length) { + if (text.charCodeAt(i) === 34) { + if (text.charCodeAt(i + 1) !== 34) break; + i++; + } + } + re.lastIndex = i + 2; + var c = text.charCodeAt(i + 1); + if (c === 13) { + eol = true; + if (text.charCodeAt(i + 2) === 10) re.lastIndex++; + } else if (c === 10) { + eol = true; + } + return text.substring(j + 1, i).replace(/""/g, "\""); + } + + // common case + var m = re.exec(text); + if (m) { + eol = m[0].charCodeAt(0) !== 44; + return text.substring(j, m.index); + } + re.lastIndex = text.length; + return text.substring(j); + } + + while ((t = token()) !== EOF) { + var a = []; + while ((t !== EOL) && (t !== EOF)) { + a.push(t); + t = token(); + } + if (f && !(a = f(a, n++))) continue; + rows.push(a); + } + + return rows; +}; +d3.csv.format = function(rows) { + return rows.map(d3_csv_formatRow).join("\n"); +}; + +function d3_csv_formatRow(row) { + return row.map(d3_csv_formatValue).join(","); +} + +function d3_csv_formatValue(text) { + return /[",\n]/.test(text) + ? "\"" + text.replace(/\"/g, "\"\"") + "\"" + : text; +} +})(); diff --git a/static/vendor/d3-2.7.5/d3.csv.min.js b/static/vendor/d3-2.7.5/d3.csv.min.js new file mode 100644 index 0000000..3a384ea --- /dev/null +++ b/static/vendor/d3-2.7.5/d3.csv.min.js @@ -0,0 +1 @@ +(function(){function a(a){return a.map(b).join(",")}function b(a){return/[",\n]/.test(a)?'"'+a.replace(/\"/g,'""')+'"':a}d3.csv=function(a,b){d3.text(a,"text/csv",function(a){b(a&&d3.csv.parse(a))})},d3.csv.parse=function(a){var b;return d3.csv.parseRows(a,function(a,c){if(c){var d={},e=-1,f=b.length;while(++e=a.length)return d;if(i)return i=!1,c;var b=f.lastIndex;if(a.charCodeAt(b)===34){var e=b;while(e++ 50 ? alaska + : lon < -140 ? hawaii + : lat < 21 ? puertoRico + : lower48)(coordinates); + } + + albersUsa.scale = function(x) { + if (!arguments.length) return lower48.scale(); + lower48.scale(x); + alaska.scale(x * .6); + hawaii.scale(x); + puertoRico.scale(x * 1.5); + return albersUsa.translate(lower48.translate()); + }; + + albersUsa.translate = function(x) { + if (!arguments.length) return lower48.translate(); + var dz = lower48.scale() / 1000, + dx = x[0], + dy = x[1]; + lower48.translate(x); + alaska.translate([dx - 400 * dz, dy + 170 * dz]); + hawaii.translate([dx - 190 * dz, dy + 200 * dz]); + puertoRico.translate([dx + 580 * dz, dy + 430 * dz]); + return albersUsa; + }; + + return albersUsa.scale(lower48.scale()); +}; +d3.geo.bonne = function() { + var scale = 200, + translate = [480, 250], + x0, // origin longitude in radians + y0, // origin latitude in radians + y1, // parallel latitude in radians + c1; // cot(y1) + + function bonne(coordinates) { + var x = coordinates[0] * d3_geo_radians - x0, + y = coordinates[1] * d3_geo_radians - y0; + if (y1) { + var p = c1 + y1 - y, E = x * Math.cos(y) / p; + x = p * Math.sin(E); + y = p * Math.cos(E) - c1; + } else { + x *= Math.cos(y); + y *= -1; + } + return [ + scale * x + translate[0], + scale * y + translate[1] + ]; + } + + bonne.invert = function(coordinates) { + var x = (coordinates[0] - translate[0]) / scale, + y = (coordinates[1] - translate[1]) / scale; + if (y1) { + var c = c1 + y, p = Math.sqrt(x * x + c * c); + y = c1 + y1 - p; + x = x0 + p * Math.atan2(x, c) / Math.cos(y); + } else { + y *= -1; + x /= Math.cos(y); + } + return [ + x / d3_geo_radians, + y / d3_geo_radians + ]; + }; + + // 90° for Werner, 0° for Sinusoidal + bonne.parallel = function(x) { + if (!arguments.length) return y1 / d3_geo_radians; + c1 = 1 / Math.tan(y1 = x * d3_geo_radians); + return bonne; + }; + + bonne.origin = function(x) { + if (!arguments.length) return [x0 / d3_geo_radians, y0 / d3_geo_radians]; + x0 = x[0] * d3_geo_radians; + y0 = x[1] * d3_geo_radians; + return bonne; + }; + + bonne.scale = function(x) { + if (!arguments.length) return scale; + scale = +x; + return bonne; + }; + + bonne.translate = function(x) { + if (!arguments.length) return translate; + translate = [+x[0], +x[1]]; + return bonne; + }; + + return bonne.origin([0, 0]).parallel(45); +}; +d3.geo.equirectangular = function() { + var scale = 500, + translate = [480, 250]; + + function equirectangular(coordinates) { + var x = coordinates[0] / 360, + y = -coordinates[1] / 360; + return [ + scale * x + translate[0], + scale * y + translate[1] + ]; + } + + equirectangular.invert = function(coordinates) { + var x = (coordinates[0] - translate[0]) / scale, + y = (coordinates[1] - translate[1]) / scale; + return [ + 360 * x, + -360 * y + ]; + }; + + equirectangular.scale = function(x) { + if (!arguments.length) return scale; + scale = +x; + return equirectangular; + }; + + equirectangular.translate = function(x) { + if (!arguments.length) return translate; + translate = [+x[0], +x[1]]; + return equirectangular; + }; + + return equirectangular; +}; +d3.geo.mercator = function() { + var scale = 500, + translate = [480, 250]; + + function mercator(coordinates) { + var x = coordinates[0] / 360, + y = -(Math.log(Math.tan(Math.PI / 4 + coordinates[1] * d3_geo_radians / 2)) / d3_geo_radians) / 360; + return [ + scale * x + translate[0], + scale * Math.max(-.5, Math.min(.5, y)) + translate[1] + ]; + } + + mercator.invert = function(coordinates) { + var x = (coordinates[0] - translate[0]) / scale, + y = (coordinates[1] - translate[1]) / scale; + return [ + 360 * x, + 2 * Math.atan(Math.exp(-360 * y * d3_geo_radians)) / d3_geo_radians - 90 + ]; + }; + + mercator.scale = function(x) { + if (!arguments.length) return scale; + scale = +x; + return mercator; + }; + + mercator.translate = function(x) { + if (!arguments.length) return translate; + translate = [+x[0], +x[1]]; + return mercator; + }; + + return mercator; +}; +function d3_geo_type(types, defaultValue) { + return function(object) { + return object && object.type in types ? types[object.type](object) : defaultValue; + }; +} +/** + * Returns a function that, given a GeoJSON object (e.g., a feature), returns + * the corresponding SVG path. The function can be customized by overriding the + * projection. Point features are mapped to circles with a default radius of + * 4.5px; the radius can be specified either as a constant or a function that + * is evaluated per object. + */ +d3.geo.path = function() { + var pointRadius = 4.5, + pointCircle = d3_path_circle(pointRadius), + projection = d3.geo.albersUsa(); + + function path(d, i) { + if (typeof pointRadius === "function") { + pointCircle = d3_path_circle(pointRadius.apply(this, arguments)); + } + return pathType(d) || null; + } + + function project(coordinates) { + return projection(coordinates).join(","); + } + + var pathType = d3_geo_type({ + + FeatureCollection: function(o) { + var path = [], + features = o.features, + i = -1, // features.index + n = features.length; + while (++i < n) path.push(pathType(features[i].geometry)); + return path.join(""); + }, + + Feature: function(o) { + return pathType(o.geometry); + }, + + Point: function(o) { + return "M" + project(o.coordinates) + pointCircle; + }, + + MultiPoint: function(o) { + var path = [], + coordinates = o.coordinates, + i = -1, // coordinates.index + n = coordinates.length; + while (++i < n) path.push("M", project(coordinates[i]), pointCircle); + return path.join(""); + }, + + LineString: function(o) { + var path = ["M"], + coordinates = o.coordinates, + i = -1, // coordinates.index + n = coordinates.length; + while (++i < n) path.push(project(coordinates[i]), "L"); + path.pop(); + return path.join(""); + }, + + MultiLineString: function(o) { + var path = [], + coordinates = o.coordinates, + i = -1, // coordinates.index + n = coordinates.length, + subcoordinates, // coordinates[i] + j, // subcoordinates.index + m; // subcoordinates.length + while (++i < n) { + subcoordinates = coordinates[i]; + j = -1; + m = subcoordinates.length; + path.push("M"); + while (++j < m) path.push(project(subcoordinates[j]), "L"); + path.pop(); + } + return path.join(""); + }, + + Polygon: function(o) { + var path = [], + coordinates = o.coordinates, + i = -1, // coordinates.index + n = coordinates.length, + subcoordinates, // coordinates[i] + j, // subcoordinates.index + m; // subcoordinates.length + while (++i < n) { + subcoordinates = coordinates[i]; + j = -1; + if ((m = subcoordinates.length - 1) > 0) { + path.push("M"); + while (++j < m) path.push(project(subcoordinates[j]), "L"); + path[path.length - 1] = "Z"; + } + } + return path.join(""); + }, + + MultiPolygon: function(o) { + var path = [], + coordinates = o.coordinates, + i = -1, // coordinates index + n = coordinates.length, + subcoordinates, // coordinates[i] + j, // subcoordinates index + m, // subcoordinates.length + subsubcoordinates, // subcoordinates[j] + k, // subsubcoordinates index + p; // subsubcoordinates.length + while (++i < n) { + subcoordinates = coordinates[i]; + j = -1; + m = subcoordinates.length; + while (++j < m) { + subsubcoordinates = subcoordinates[j]; + k = -1; + if ((p = subsubcoordinates.length - 1) > 0) { + path.push("M"); + while (++k < p) path.push(project(subsubcoordinates[k]), "L"); + path[path.length - 1] = "Z"; + } + } + } + return path.join(""); + }, + + GeometryCollection: function(o) { + var path = [], + geometries = o.geometries, + i = -1, // geometries index + n = geometries.length; + while (++i < n) path.push(pathType(geometries[i])); + return path.join(""); + } + + }); + + var areaType = path.area = d3_geo_type({ + + FeatureCollection: function(o) { + var area = 0, + features = o.features, + i = -1, // features.index + n = features.length; + while (++i < n) area += areaType(features[i]); + return area; + }, + + Feature: function(o) { + return areaType(o.geometry); + }, + + Polygon: function(o) { + return polygonArea(o.coordinates); + }, + + MultiPolygon: function(o) { + var sum = 0, + coordinates = o.coordinates, + i = -1, // coordinates index + n = coordinates.length; + while (++i < n) sum += polygonArea(coordinates[i]); + return sum; + }, + + GeometryCollection: function(o) { + var sum = 0, + geometries = o.geometries, + i = -1, // geometries index + n = geometries.length; + while (++i < n) sum += areaType(geometries[i]); + return sum; + } + + }, 0); + + function polygonArea(coordinates) { + var sum = area(coordinates[0]), // exterior ring + i = 0, // coordinates.index + n = coordinates.length; + while (++i < n) sum -= area(coordinates[i]); // holes + return sum; + } + + function polygonCentroid(coordinates) { + var polygon = d3.geom.polygon(coordinates[0].map(projection)), // exterior ring + area = polygon.area(), + centroid = polygon.centroid(area < 0 ? (area *= -1, 1) : -1), + x = centroid[0], + y = centroid[1], + z = area, + i = 0, // coordinates index + n = coordinates.length; + while (++i < n) { + polygon = d3.geom.polygon(coordinates[i].map(projection)); // holes + area = polygon.area(); + centroid = polygon.centroid(area < 0 ? (area *= -1, 1) : -1); + x -= centroid[0]; + y -= centroid[1]; + z -= area; + } + return [x, y, 6 * z]; // weighted centroid + } + + var centroidType = path.centroid = d3_geo_type({ + + // TODO FeatureCollection + // TODO Point + // TODO MultiPoint + // TODO LineString + // TODO MultiLineString + // TODO GeometryCollection + + Feature: function(o) { + return centroidType(o.geometry); + }, + + Polygon: function(o) { + var centroid = polygonCentroid(o.coordinates); + return [centroid[0] / centroid[2], centroid[1] / centroid[2]]; + }, + + MultiPolygon: function(o) { + var area = 0, + coordinates = o.coordinates, + centroid, + x = 0, + y = 0, + z = 0, + i = -1, // coordinates index + n = coordinates.length; + while (++i < n) { + centroid = polygonCentroid(coordinates[i]); + x += centroid[0]; + y += centroid[1]; + z += centroid[2]; + } + return [x / z, y / z]; + } + + }); + + function area(coordinates) { + return Math.abs(d3.geom.polygon(coordinates.map(projection)).area()); + } + + path.projection = function(x) { + projection = x; + return path; + }; + + path.pointRadius = function(x) { + if (typeof x === "function") pointRadius = x; + else { + pointRadius = +x; + pointCircle = d3_path_circle(pointRadius); + } + return path; + }; + + return path; +}; + +function d3_path_circle(radius) { + return "m0," + radius + + "a" + radius + "," + radius + " 0 1,1 0," + (-2 * radius) + + "a" + radius + "," + radius + " 0 1,1 0," + (+2 * radius) + + "z"; +} +/** + * Given a GeoJSON object, returns the corresponding bounding box. The bounding + * box is represented by a two-dimensional array: [[left, bottom], [right, + * top]], where left is the minimum longitude, bottom is the minimum latitude, + * right is maximum longitude, and top is the maximum latitude. + */ +d3.geo.bounds = function(feature) { + var left = Infinity, + bottom = Infinity, + right = -Infinity, + top = -Infinity; + d3_geo_bounds(feature, function(x, y) { + if (x < left) left = x; + if (x > right) right = x; + if (y < bottom) bottom = y; + if (y > top) top = y; + }); + return [[left, bottom], [right, top]]; +}; + +function d3_geo_bounds(o, f) { + if (o.type in d3_geo_boundsTypes) d3_geo_boundsTypes[o.type](o, f); +} + +var d3_geo_boundsTypes = { + Feature: d3_geo_boundsFeature, + FeatureCollection: d3_geo_boundsFeatureCollection, + GeometryCollection: d3_geo_boundsGeometryCollection, + LineString: d3_geo_boundsLineString, + MultiLineString: d3_geo_boundsMultiLineString, + MultiPoint: d3_geo_boundsLineString, + MultiPolygon: d3_geo_boundsMultiPolygon, + Point: d3_geo_boundsPoint, + Polygon: d3_geo_boundsPolygon +}; + +function d3_geo_boundsFeature(o, f) { + d3_geo_bounds(o.geometry, f); +} + +function d3_geo_boundsFeatureCollection(o, f) { + for (var a = o.features, i = 0, n = a.length; i < n; i++) { + d3_geo_bounds(a[i].geometry, f); + } +} + +function d3_geo_boundsGeometryCollection(o, f) { + for (var a = o.geometries, i = 0, n = a.length; i < n; i++) { + d3_geo_bounds(a[i], f); + } +} + +function d3_geo_boundsLineString(o, f) { + for (var a = o.coordinates, i = 0, n = a.length; i < n; i++) { + f.apply(null, a[i]); + } +} + +function d3_geo_boundsMultiLineString(o, f) { + for (var a = o.coordinates, i = 0, n = a.length; i < n; i++) { + for (var b = a[i], j = 0, m = b.length; j < m; j++) { + f.apply(null, b[j]); + } + } +} + +function d3_geo_boundsMultiPolygon(o, f) { + for (var a = o.coordinates, i = 0, n = a.length; i < n; i++) { + for (var b = a[i][0], j = 0, m = b.length; j < m; j++) { + f.apply(null, b[j]); + } + } +} + +function d3_geo_boundsPoint(o, f) { + f.apply(null, o.coordinates); +} + +function d3_geo_boundsPolygon(o, f) { + for (var a = o.coordinates[0], i = 0, n = a.length; i < n; i++) { + f.apply(null, a[i]); + } +} +// TODO breakAtDateLine? + +d3.geo.circle = function() { + var origin = [0, 0], + degrees = 90 - 1e-2, + radians = degrees * d3_geo_radians, + arc = d3.geo.greatArc().target(Object); + + function circle() { + // TODO render a circle as a Polygon + } + + function visible(point) { + return arc.distance(point) < radians; + } + + circle.clip = function(d) { + arc.source(typeof origin === "function" ? origin.apply(this, arguments) : origin); + return clipType(d); + }; + + var clipType = d3_geo_type({ + + FeatureCollection: function(o) { + var features = o.features.map(clipType).filter(Object); + return features && (o = Object.create(o), o.features = features, o); + }, + + Feature: function(o) { + var geometry = clipType(o.geometry); + return geometry && (o = Object.create(o), o.geometry = geometry, o); + }, + + Point: function(o) { + return visible(o.coordinates) && o; + }, + + MultiPoint: function(o) { + var coordinates = o.coordinates.filter(visible); + return coordinates.length && { + type: o.type, + coordinates: coordinates + }; + }, + + LineString: function(o) { + var coordinates = clip(o.coordinates); + return coordinates.length && (o = Object.create(o), o.coordinates = coordinates, o); + }, + + MultiLineString: function(o) { + var coordinates = o.coordinates.map(clip).filter(function(d) { return d.length; }); + return coordinates.length && (o = Object.create(o), o.coordinates = coordinates, o); + }, + + Polygon: function(o) { + var coordinates = o.coordinates.map(clip); + return coordinates[0].length && (o = Object.create(o), o.coordinates = coordinates, o); + }, + + MultiPolygon: function(o) { + var coordinates = o.coordinates.map(function(d) { return d.map(clip); }).filter(function(d) { return d[0].length; }); + return coordinates.length && (o = Object.create(o), o.coordinates = coordinates, o); + }, + + GeometryCollection: function(o) { + var geometries = o.geometries.map(clipType).filter(Object); + return geometries.length && (o = Object.create(o), o.geometries = geometries, o); + } + + }); + + function clip(coordinates) { + var i = -1, + n = coordinates.length, + clipped = [], + p0, + p1, + p2, + d0, + d1; + + while (++i < n) { + d1 = arc.distance(p2 = coordinates[i]); + if (d1 < radians) { + if (p1) clipped.push(d3_geo_greatArcInterpolate(p1, p2)((d0 - radians) / (d0 - d1))); + clipped.push(p2); + p0 = p1 = null; + } else { + p1 = p2; + if (!p0 && clipped.length) { + clipped.push(d3_geo_greatArcInterpolate(clipped[clipped.length - 1], p1)((radians - d0) / (d1 - d0))); + p0 = p1; + } + } + d0 = d1; + } + + if (p1 && clipped.length) { + d1 = arc.distance(p2 = clipped[0]); + clipped.push(d3_geo_greatArcInterpolate(p1, p2)((d0 - radians) / (d0 - d1))); + } + + return resample(clipped); + } + + // Resample coordinates, creating great arcs between each. + function resample(coordinates) { + var i = 0, + n = coordinates.length, + j, + m, + resampled = n ? [coordinates[0]] : coordinates, + resamples, + origin = arc.source(); + + while (++i < n) { + resamples = arc.source(coordinates[i - 1])(coordinates[i]).coordinates; + for (j = 0, m = resamples.length; ++j < m;) resampled.push(resamples[j]); + } + + arc.source(origin); + return resampled; + } + + circle.origin = function(x) { + if (!arguments.length) return origin; + origin = x; + return circle; + }; + + circle.angle = function(x) { + if (!arguments.length) return degrees; + radians = (degrees = +x) * d3_geo_radians; + return circle; + }; + + // Precision is specified in degrees. + circle.precision = function(x) { + if (!arguments.length) return arc.precision(); + arc.precision(x); + return circle; + }; + + return circle; +} +d3.geo.greatArc = function() { + var source = d3_geo_greatArcSource, + target = d3_geo_greatArcTarget, + precision = 6 * d3_geo_radians; + + function greatArc() { + var a = typeof source === "function" ? source.apply(this, arguments) : source, + b = typeof target === "function" ? target.apply(this, arguments) : target, + i = d3_geo_greatArcInterpolate(a, b), + dt = precision / i.d, + t = 0, + coordinates = [a]; + while ((t += dt) < 1) coordinates.push(i(t)); + coordinates.push(b); + return { + type: "LineString", + coordinates: coordinates + }; + } + + // Length returned in radians; multiply by radius for distance. + greatArc.distance = function() { + var a = typeof source === "function" ? source.apply(this, arguments) : source, + b = typeof target === "function" ? target.apply(this, arguments) : target; + return d3_geo_greatArcInterpolate(a, b).d; + }; + + greatArc.source = function(x) { + if (!arguments.length) return source; + source = x; + return greatArc; + }; + + greatArc.target = function(x) { + if (!arguments.length) return target; + target = x; + return greatArc; + }; + + // Precision is specified in degrees. + greatArc.precision = function(x) { + if (!arguments.length) return precision / d3_geo_radians; + precision = x * d3_geo_radians; + return greatArc; + }; + + return greatArc; +}; + +function d3_geo_greatArcSource(d) { + return d.source; +} + +function d3_geo_greatArcTarget(d) { + return d.target; +} + +function d3_geo_greatArcInterpolate(a, b) { + var x0 = a[0] * d3_geo_radians, cx0 = Math.cos(x0), sx0 = Math.sin(x0), + y0 = a[1] * d3_geo_radians, cy0 = Math.cos(y0), sy0 = Math.sin(y0), + x1 = b[0] * d3_geo_radians, cx1 = Math.cos(x1), sx1 = Math.sin(x1), + y1 = b[1] * d3_geo_radians, cy1 = Math.cos(y1), sy1 = Math.sin(y1), + d = interpolate.d = Math.acos(Math.max(-1, Math.min(1, sy0 * sy1 + cy0 * cy1 * Math.cos(x1 - x0)))), + sd = Math.sin(d); + + // From http://williams.best.vwh.net/avform.htm#Intermediate + function interpolate(t) { + var A = Math.sin(d - (t *= d)) / sd, + B = Math.sin(t) / sd, + x = A * cy0 * cx0 + B * cy1 * cx1, + y = A * cy0 * sx0 + B * cy1 * sx1, + z = A * sy0 + B * sy1; + return [ + Math.atan2(y, x) / d3_geo_radians, + Math.atan2(z, Math.sqrt(x * x + y * y)) / d3_geo_radians + ]; + } + + return interpolate; +} +d3.geo.greatCircle = d3.geo.circle; +})(); diff --git a/static/vendor/d3-2.7.5/d3.geo.min.js b/static/vendor/d3-2.7.5/d3.geo.min.js new file mode 100644 index 0000000..a4fcd24 --- /dev/null +++ b/static/vendor/d3-2.7.5/d3.geo.min.js @@ -0,0 +1 @@ +(function(){function b(a,b){return function(c){return c&&c.type in a?a[c.type](c):b}}function c(a){return"m0,"+a+"a"+a+","+a+" 0 1,1 0,"+ -2*a+"a"+a+","+a+" 0 1,1 0,"+2*a+"z"}function d(a,b){a.type in e&&e[a.type](a,b)}function f(a,b){d(a.geometry,b)}function g(a,b){for(var c=a.features,e=0,f=c.length;e50?b:f<-140?c:g<21?d:a)(e)}var a=d3.geo.albers(),b=d3.geo.albers().origin([-160,60]).parallels([55,65]),c=d3.geo.albers().origin([-160,20]).parallels([8,18]),d=d3.geo.albers().origin([-60,10]).parallels([8,18]);return e.scale=function(f){return arguments.length?(a.scale(f),b.scale(f*.6),c.scale(f),d.scale(f*1.5),e.translate(a.translate())):a.scale()},e.translate=function(f){if(!arguments.length)return a.translate();var g=a.scale()/1e3,h=f[0],i=f[1];return a.translate(f),b.translate([h-400*g,i+170*g]),c.translate([h-190*g,i+200*g]),d.translate([h+580*g,i+430*g]),e},e.scale(a.scale())},d3.geo.bonne=function(){function h(h){var i=h[0]*a-d,j=h[1]*a-e;if(f){var k=g+f-j,l=i*Math.cos(j)/k;i=k*Math.sin(l),j=k*Math.cos(l)-g}else i*=Math.cos(j),j*=-1;return[b*i+c[0],b*j+c[1]]}var b=200,c=[480,250],d,e,f,g;return h.invert=function(e){var h=(e[0]-c[0])/b,i=(e[1]-c[1])/b;if(f){var j=g+i,k=Math.sqrt(h*h+j*j);i=g+f-k,h=d+k*Math.atan2(h,j)/Math.cos(i)}else i*=-1,h/=Math.cos(i);return[h/a,i/a]},h.parallel=function(b){return arguments.length?(g=1/Math.tan(f=b*a),h):f/a},h.origin=function(b){return arguments.length?(d=b[0]*a,e=b[1]*a,h):[d/a,e/a]},h.scale=function(a){return arguments.length?(b=+a,h):b},h.translate=function(a){return arguments.length?(c=[+a[0],+a[1]],h):c},h.origin([0,0]).parallel(45)},d3.geo.equirectangular=function(){function c(c){var d=c[0]/360,e=-c[1]/360;return[a*d+b[0],a*e+b[1]]}var a=500,b=[480,250];return c.invert=function(c){var d=(c[0]-b[0])/a,e=(c[1]-b[1])/a;return[360*d,-360*e]},c.scale=function(b){return arguments.length?(a=+b,c):a},c.translate=function(a){return arguments.length?(b=[+a[0],+a[1]],c):b},c},d3.geo.mercator=function(){function d(d){var e=d[0]/360,f=-(Math.log(Math.tan(Math.PI/4+d[1]*a/2))/a)/360;return[b*e+c[0],b*Math.max(-0.5,Math.min(.5,f))+c[1]]}var b=500,c=[480,250];return d.invert=function(d){var e=(d[0]-c[0])/b,f=(d[1]-c[1])/b;return[360*e,2*Math.atan(Math.exp(-360*f*a))/a-90]},d.scale=function(a){return arguments.length?(b=+a,d):b},d.translate=function(a){return arguments.length?(c=[+a[0],+a[1]],d):c},d},d3.geo.path=function(){function f(b,e){return typeof a=="function"&&(d=c(a.apply(this,arguments))),h(b)||null}function g(a){return e(a).join(",")}function j(a){var b=m(a[0]),c=0,d=a.length;while(++c0){b.push("M");while(++h0){b.push("M");while(++ke&&(e=a),df&&(f=d)}),[[b,c],[e,f]]};var e={Feature:f,FeatureCollection:g,GeometryCollection:h,LineString:i,MultiLineString:j,MultiPoint:i,MultiPolygon:k,Point:l,Polygon:m};d3.geo.circle=function(){function g(){}function h(a){return f.distance(a)marching + * squares algorithm. Returns the contour polygon as an array of points. + * + * @param grid a two-input function(x, y) that returns true for values + * inside the contour and false for values outside the contour. + * @param start an optional starting point [x, y] on the grid. + * @returns polygon [[x1, y1], [x2, y2], …] + */ +d3.geom.contour = function(grid, start) { + var s = start || d3_geom_contourStart(grid), // starting point + c = [], // contour polygon + x = s[0], // current x position + y = s[1], // current y position + dx = 0, // next x direction + dy = 0, // next y direction + pdx = NaN, // previous x direction + pdy = NaN, // previous y direction + i = 0; + + do { + // determine marching squares index + i = 0; + if (grid(x-1, y-1)) i += 1; + if (grid(x, y-1)) i += 2; + if (grid(x-1, y )) i += 4; + if (grid(x, y )) i += 8; + + // determine next direction + if (i === 6) { + dx = pdy === -1 ? -1 : 1; + dy = 0; + } else if (i === 9) { + dx = 0; + dy = pdx === 1 ? -1 : 1; + } else { + dx = d3_geom_contourDx[i]; + dy = d3_geom_contourDy[i]; + } + + // update contour polygon + if (dx != pdx && dy != pdy) { + c.push([x, y]); + pdx = dx; + pdy = dy; + } + + x += dx; + y += dy; + } while (s[0] != x || s[1] != y); + + return c; +}; + +// lookup tables for marching directions +var d3_geom_contourDx = [1, 0, 1, 1,-1, 0,-1, 1,0, 0,0,0,-1, 0,-1,NaN], + d3_geom_contourDy = [0,-1, 0, 0, 0,-1, 0, 0,1,-1,1,1, 0,-1, 0,NaN]; + +function d3_geom_contourStart(grid) { + var x = 0, + y = 0; + + // search for a starting point; begin at origin + // and proceed along outward-expanding diagonals + while (true) { + if (grid(x,y)) { + return [x,y]; + } + if (x === 0) { + x = y + 1; + y = 0; + } else { + x = x - 1; + y = y + 1; + } + } +} +/** + * Computes the 2D convex hull of a set of points using Graham's scanning + * algorithm. The algorithm has been implemented as described in Cormen, + * Leiserson, and Rivest's Introduction to Algorithms. The running time of + * this algorithm is O(n log n), where n is the number of input points. + * + * @param vertices [[x1, y1], [x2, y2], …] + * @returns polygon [[x1, y1], [x2, y2], …] + */ +d3.geom.hull = function(vertices) { + if (vertices.length < 3) return []; + + var len = vertices.length, + plen = len - 1, + points = [], + stack = [], + i, j, h = 0, x1, y1, x2, y2, u, v, a, sp; + + // find the starting ref point: leftmost point with the minimum y coord + for (i=1; i= (x2*x2 + y2*y2)) { + points[i].index = -1; + } else { + points[u].index = -1; + a = points[i].angle; + u = i; + v = j; + } + } else { + a = points[i].angle; + u = i; + v = j; + } + } + + // initialize the stack + stack.push(h); + for (i=0, j=0; i<2; ++j) { + if (points[j].index !== -1) { + stack.push(points[j].index); + i++; + } + } + sp = stack.length; + + // do graham's scan + for (; j 0; +} +// Note: requires coordinates to be counterclockwise and convex! +d3.geom.polygon = function(coordinates) { + + coordinates.area = function() { + var i = 0, + n = coordinates.length, + a = coordinates[n - 1][0] * coordinates[0][1], + b = coordinates[n - 1][1] * coordinates[0][0]; + while (++i < n) { + a += coordinates[i - 1][0] * coordinates[i][1]; + b += coordinates[i - 1][1] * coordinates[i][0]; + } + return (b - a) * .5; + }; + + coordinates.centroid = function(k) { + var i = -1, + n = coordinates.length, + x = 0, + y = 0, + a, + b = coordinates[n - 1], + c; + if (!arguments.length) k = -1 / (6 * coordinates.area()); + while (++i < n) { + a = b; + b = coordinates[i]; + c = a[0] * b[1] - b[0] * a[1]; + x += (a[0] + b[0]) * c; + y += (a[1] + b[1]) * c; + } + return [x * k, y * k]; + }; + + // The Sutherland-Hodgman clipping algorithm. + coordinates.clip = function(subject) { + var input, + i = -1, + n = coordinates.length, + j, + m, + a = coordinates[n - 1], + b, + c, + d; + while (++i < n) { + input = subject.slice(); + subject.length = 0; + b = coordinates[i]; + c = input[(m = input.length) - 1]; + j = -1; + while (++j < m) { + d = input[j]; + if (d3_geom_polygonInside(d, a, b)) { + if (!d3_geom_polygonInside(c, a, b)) { + subject.push(d3_geom_polygonIntersect(c, d, a, b)); + } + subject.push(d); + } else if (d3_geom_polygonInside(c, a, b)) { + subject.push(d3_geom_polygonIntersect(c, d, a, b)); + } + c = d; + } + a = b; + } + return subject; + }; + + return coordinates; +}; + +function d3_geom_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 d3_geom_polygonIntersect(c, d, a, b) { + var x1 = c[0], x2 = d[0], x3 = a[0], x4 = b[0], + y1 = c[1], y2 = d[1], y3 = a[1], y4 = b[1], + x13 = x1 - x3, + x21 = x2 - x1, + x43 = x4 - x3, + y13 = y1 - y3, + y21 = y2 - y1, + y43 = y4 - y3, + ua = (x43 * y13 - y43 * x13) / (y43 * x21 - x43 * y21); + return [x1 + ua * x21, y1 + ua * y21]; +} +// Adapted from Nicolas Garcia Belmonte's JIT implementation: +// http://blog.thejit.org/2010/02/12/voronoi-tessellation/ +// http://blog.thejit.org/assets/voronoijs/voronoi.js +// See lib/jit/LICENSE for details. + +// Notes: +// +// This implementation does not clip the returned polygons, so if you want to +// clip them to a particular shape you will need to do that either in SVG or by +// post-processing with d3.geom.polygon's clip method. +// +// If any vertices are coincident or have NaN positions, the behavior of this +// method is undefined. Most likely invalid polygons will be returned. You +// should filter invalid points, and consolidate coincident points, before +// computing the tessellation. + +/** + * @param vertices [[x1, y1], [x2, y2], …] + * @returns polygons [[[x1, y1], [x2, y2], …], …] + */ +d3.geom.voronoi = function(vertices) { + var polygons = vertices.map(function() { return []; }); + + d3_voronoi_tessellate(vertices, function(e) { + var s1, + s2, + x1, + x2, + y1, + y2; + if (e.a === 1 && e.b >= 0) { + s1 = e.ep.r; + s2 = e.ep.l; + } else { + s1 = e.ep.l; + s2 = e.ep.r; + } + if (e.a === 1) { + y1 = s1 ? s1.y : -1e6; + x1 = e.c - e.b * y1; + y2 = s2 ? s2.y : 1e6; + x2 = e.c - e.b * y2; + } else { + x1 = s1 ? s1.x : -1e6; + y1 = e.c - e.a * x1; + x2 = s2 ? s2.x : 1e6; + y2 = e.c - e.a * x2; + } + var v1 = [x1, y1], + v2 = [x2, y2]; + polygons[e.region.l.index].push(v1, v2); + polygons[e.region.r.index].push(v1, v2); + }); + + // Reconnect the polygon segments into counterclockwise loops. + return polygons.map(function(polygon, i) { + var cx = vertices[i][0], + cy = vertices[i][1]; + polygon.forEach(function(v) { + v.angle = Math.atan2(v[0] - cx, v[1] - cy); + }); + return polygon.sort(function(a, b) { + return a.angle - b.angle; + }).filter(function(d, i) { + return !i || (d.angle - polygon[i - 1].angle > 1e-10); + }); + }); +}; + +var d3_voronoi_opposite = {"l": "r", "r": "l"}; + +function d3_voronoi_tessellate(vertices, callback) { + + var Sites = { + list: vertices + .map(function(v, i) { + return { + index: i, + x: v[0], + y: v[1] + }; + }) + .sort(function(a, b) { + return a.y < b.y ? -1 + : a.y > b.y ? 1 + : a.x < b.x ? -1 + : a.x > b.x ? 1 + : 0; + }), + bottomSite: null + }; + + var EdgeList = { + list: [], + leftEnd: null, + rightEnd: null, + + init: function() { + EdgeList.leftEnd = EdgeList.createHalfEdge(null, "l"); + EdgeList.rightEnd = EdgeList.createHalfEdge(null, "l"); + EdgeList.leftEnd.r = EdgeList.rightEnd; + EdgeList.rightEnd.l = EdgeList.leftEnd; + EdgeList.list.unshift(EdgeList.leftEnd, EdgeList.rightEnd); + }, + + createHalfEdge: function(edge, side) { + return { + edge: edge, + side: side, + vertex: null, + "l": null, + "r": null + }; + }, + + insert: function(lb, he) { + he.l = lb; + he.r = lb.r; + lb.r.l = he; + lb.r = he; + }, + + leftBound: function(p) { + var he = EdgeList.leftEnd; + do { + he = he.r; + } while (he != EdgeList.rightEnd && Geom.rightOf(he, p)); + he = he.l; + return he; + }, + + del: function(he) { + he.l.r = he.r; + he.r.l = he.l; + he.edge = null; + }, + + right: function(he) { + return he.r; + }, + + left: function(he) { + return he.l; + }, + + leftRegion: function(he) { + return he.edge == null + ? Sites.bottomSite + : he.edge.region[he.side]; + }, + + rightRegion: function(he) { + return he.edge == null + ? Sites.bottomSite + : he.edge.region[d3_voronoi_opposite[he.side]]; + } + }; + + var Geom = { + + bisect: function(s1, s2) { + var newEdge = { + region: {"l": s1, "r": s2}, + ep: {"l": null, "r": null} + }; + + var dx = s2.x - s1.x, + dy = s2.y - s1.y, + adx = dx > 0 ? dx : -dx, + ady = dy > 0 ? dy : -dy; + + newEdge.c = s1.x * dx + s1.y * dy + + (dx * dx + dy * dy) * .5; + + if (adx > ady) { + newEdge.a = 1; + newEdge.b = dy / dx; + newEdge.c /= dx; + } else { + newEdge.b = 1; + newEdge.a = dx / dy; + newEdge.c /= dy; + } + + return newEdge; + }, + + intersect: function(el1, el2) { + var e1 = el1.edge, + e2 = el2.edge; + if (!e1 || !e2 || (e1.region.r == e2.region.r)) { + return null; + } + var d = (e1.a * e2.b) - (e1.b * e2.a); + if (Math.abs(d) < 1e-10) { + return null; + } + var xint = (e1.c * e2.b - e2.c * e1.b) / d, + yint = (e2.c * e1.a - e1.c * e2.a) / d, + e1r = e1.region.r, + e2r = e2.region.r, + el, + e; + if ((e1r.y < e2r.y) || + (e1r.y == e2r.y && e1r.x < e2r.x)) { + el = el1; + e = e1; + } else { + el = el2; + e = e2; + } + var rightOfSite = (xint >= e.region.r.x); + if ((rightOfSite && (el.side === "l")) || + (!rightOfSite && (el.side === "r"))) { + return null; + } + return { + x: xint, + y: yint + }; + }, + + rightOf: function(he, p) { + var e = he.edge, + topsite = e.region.r, + rightOfSite = (p.x > topsite.x); + + if (rightOfSite && (he.side === "l")) { + return 1; + } + if (!rightOfSite && (he.side === "r")) { + return 0; + } + if (e.a === 1) { + var dyp = p.y - topsite.y, + dxp = p.x - topsite.x, + fast = 0, + above = 0; + + if ((!rightOfSite && (e.b < 0)) || + (rightOfSite && (e.b >= 0))) { + above = fast = (dyp >= e.b * dxp); + } else { + above = ((p.x + p.y * e.b) > e.c); + if (e.b < 0) { + above = !above; + } + if (!above) { + fast = 1; + } + } + if (!fast) { + var dxs = topsite.x - e.region.l.x; + above = (e.b * (dxp * dxp - dyp * dyp)) < + (dxs * dyp * (1 + 2 * dxp / dxs + e.b * e.b)); + + if (e.b < 0) { + above = !above; + } + } + } else /* e.b == 1 */ { + var yl = e.c - e.a * p.x, + t1 = p.y - yl, + t2 = p.x - topsite.x, + t3 = yl - topsite.y; + + above = (t1 * t1) > (t2 * t2 + t3 * t3); + } + return he.side === "l" ? above : !above; + }, + + endPoint: function(edge, side, site) { + edge.ep[side] = site; + if (!edge.ep[d3_voronoi_opposite[side]]) return; + callback(edge); + }, + + distance: function(s, t) { + var dx = s.x - t.x, + dy = s.y - t.y; + return Math.sqrt(dx * dx + dy * dy); + } + }; + + var EventQueue = { + list: [], + + insert: function(he, site, offset) { + he.vertex = site; + he.ystar = site.y + offset; + for (var i=0, list=EventQueue.list, l=list.length; i next.ystar || + (he.ystar == next.ystar && + site.x > next.vertex.x)) { + continue; + } else { + break; + } + } + list.splice(i, 0, he); + }, + + del: function(he) { + for (var i=0, ls=EventQueue.list, l=ls.length; i top.y) { + temp = bot; + bot = top; + top = temp; + pm = "r"; + } + e = Geom.bisect(bot, top); + bisector = EdgeList.createHalfEdge(e, pm); + EdgeList.insert(llbnd, bisector); + Geom.endPoint(e, d3_voronoi_opposite[pm], v); + p = Geom.intersect(llbnd, bisector); + if (p) { + EventQueue.del(llbnd); + EventQueue.insert(llbnd, p, Geom.distance(p, bot)); + } + p = Geom.intersect(bisector, rrbnd); + if (p) { + EventQueue.insert(bisector, p, Geom.distance(p, bot)); + } + } else { + break; + } + }//end while + + for (lbnd = EdgeList.right(EdgeList.leftEnd); + lbnd != EdgeList.rightEnd; + lbnd = EdgeList.right(lbnd)) { + callback(lbnd.edge); + } +} +/** +* @param vertices [[x1, y1], [x2, y2], …] +* @returns triangles [[[x1, y1], [x2, y2], [x3, y3]], …] + */ +d3.geom.delaunay = function(vertices) { + var edges = vertices.map(function() { return []; }), + triangles = []; + + // Use the Voronoi tessellation to determine Delaunay edges. + d3_voronoi_tessellate(vertices, function(e) { + edges[e.region.l.index].push(vertices[e.region.r.index]); + }); + + // Reconnect the edges into counterclockwise triangles. + edges.forEach(function(edge, i) { + var v = vertices[i], + cx = v[0], + cy = v[1]; + edge.forEach(function(v) { + v.angle = Math.atan2(v[0] - cx, v[1] - cy); + }); + edge.sort(function(a, b) { + return a.angle - b.angle; + }); + for (var j = 0, m = edge.length - 1; j < m; j++) { + triangles.push([v, edge[j], edge[j + 1]]); + } + }); + + return triangles; +}; +// Constructs a new quadtree for the specified array of points. A quadtree is a +// two-dimensional recursive spatial subdivision. This implementation uses +// square partitions, dividing each square into four equally-sized squares. Each +// point exists in a unique node; if multiple points are in the same position, +// some points may be stored on internal nodes rather than leaf nodes. Quadtrees +// can be used to accelerate various spatial operations, such as the Barnes-Hut +// approximation for computing n-body forces, or collision detection. +d3.geom.quadtree = function(points, x1, y1, x2, y2) { + var p, + i = -1, + n = points.length; + + // Type conversion for deprecated API. + if (n && isNaN(points[0].x)) points = points.map(d3_geom_quadtreePoint); + + // Allow bounds to be specified explicitly. + if (arguments.length < 5) { + if (arguments.length === 3) { + y2 = x2 = y1; + y1 = x1; + } else { + x1 = y1 = Infinity; + x2 = y2 = -Infinity; + + // Compute bounds. + while (++i < n) { + p = points[i]; + if (p.x < x1) x1 = p.x; + if (p.y < y1) y1 = p.y; + if (p.x > x2) x2 = p.x; + if (p.y > y2) y2 = p.y; + } + + // Squarify the bounds. + var dx = x2 - x1, + dy = y2 - y1; + if (dx > dy) y2 = y1 + dx; + else x2 = x1 + dy; + } + } + + // Recursively inserts the specified point p at the node n or one of its + // descendants. The bounds are defined by [x1, x2] and [y1, y2]. + function insert(n, p, x1, y1, x2, y2) { + if (isNaN(p.x) || isNaN(p.y)) return; // ignore invalid points + if (n.leaf) { + var v = n.point; + if (v) { + // If the point at this leaf node is at the same position as the new + // point we are adding, we leave the point associated with the + // internal node while adding the new point to a child node. This + // avoids infinite recursion. + if ((Math.abs(v.x - p.x) + Math.abs(v.y - p.y)) < .01) { + insertChild(n, p, x1, y1, x2, y2); + } else { + n.point = null; + insertChild(n, v, x1, y1, x2, y2); + insertChild(n, p, x1, y1, x2, y2); + } + } else { + n.point = p; + } + } else { + insertChild(n, p, x1, y1, x2, y2); + } + } + + // Recursively inserts the specified point p into a descendant of node n. The + // bounds are defined by [x1, x2] and [y1, y2]. + function insertChild(n, p, x1, y1, x2, y2) { + // Compute the split point, and the quadrant in which to insert p. + var sx = (x1 + x2) * .5, + sy = (y1 + y2) * .5, + right = p.x >= sx, + bottom = p.y >= sy, + i = (bottom << 1) + right; + + // Recursively insert into the child node. + n.leaf = false; + n = n.nodes[i] || (n.nodes[i] = d3_geom_quadtreeNode()); + + // Update the bounds as we recurse. + if (right) x1 = sx; else x2 = sx; + if (bottom) y1 = sy; else y2 = sy; + insert(n, p, x1, y1, x2, y2); + } + + // Create the root node. + var root = d3_geom_quadtreeNode(); + + root.add = function(p) { + insert(root, p, x1, y1, x2, y2); + }; + + root.visit = function(f) { + d3_geom_quadtreeVisit(f, root, x1, y1, x2, y2); + }; + + // Insert all points. + points.forEach(root.add); + return root; +}; + +function d3_geom_quadtreeNode() { + return { + leaf: true, + nodes: [], + point: null + }; +} + +function d3_geom_quadtreeVisit(f, node, x1, y1, x2, y2) { + if (!f(node, x1, y1, x2, y2)) { + var sx = (x1 + x2) * .5, + sy = (y1 + y2) * .5, + children = node.nodes; + if (children[0]) d3_geom_quadtreeVisit(f, children[0], x1, y1, sx, sy); + if (children[1]) d3_geom_quadtreeVisit(f, children[1], sx, y1, x2, sy); + if (children[2]) d3_geom_quadtreeVisit(f, children[2], x1, sy, sx, y2); + if (children[3]) d3_geom_quadtreeVisit(f, children[3], sx, sy, x2, y2); + } +} + +function d3_geom_quadtreePoint(p) { + return { + x: p[0], + y: p[1] + }; +} +})(); diff --git a/static/vendor/d3-2.7.5/d3.geom.min.js b/static/vendor/d3-2.7.5/d3.geom.min.js new file mode 100644 index 0000000..fdd1a15 --- /dev/null +++ b/static/vendor/d3-2.7.5/d3.geom.min.js @@ -0,0 +1 @@ +(function(){function c(a){var b=0,c=0;for(;;){if(a(b,c))return[b,c];b===0?(b=c+1,c=0):(b-=1,c+=1)}}function d(a,b,c,d){var e,f,g,h,i,j,k;return e=d[a],f=e[0],g=e[1],e=d[b],h=e[0],i=e[1],e=d[c],j=e[0],k=e[1],(k-g)*(h-f)-(i-g)*(j-f)>0}function e(a,b,c){return(c[0]-b[0])*(a[1]-b[1])<(c[1]-b[1])*(a[0]-b[0])}function f(a,b,c,d){var e=a[0],f=b[0],g=c[0],h=d[0],i=a[1],j=b[1],k=c[1],l=d[1],m=e-g,n=f-e,o=h-g,p=i-k,q=j-i,r=l-k,s=(o*p-r*m)/(r*n-o*q);return[e+s*n,i+s*q]}function h(a,b){var c={list:a.map(function(a,b){return{index:b,x:a[0],y:a[1]}}).sort(function(a,b){return a.yb.y?1:a.xb.x?1:0}),bottomSite:null},d={list:[],leftEnd:null,rightEnd:null,init:function(){d.leftEnd=d.createHalfEdge(null,"l"),d.rightEnd=d.createHalfEdge(null,"l"),d.leftEnd.r=d.rightEnd,d.rightEnd.l=d.leftEnd,d.list.unshift(d.leftEnd,d.rightEnd)},createHalfEdge:function(a,b){return{edge:a,side:b,vertex:null,l:null,r:null}},insert:function(a,b){b.l=a,b.r=a.r,a.r.l=b,a.r=b},leftBound:function(a){var b=d.leftEnd;do b=b.r;while(b!=d.rightEnd&&e.rightOf(b,a));return b=b.l,b},del:function(a){a.l.r=a.r,a.r.l=a.l,a.edge=null},right:function(a){return a.r},left:function(a){return a.l},leftRegion:function(a){return a.edge==null?c.bottomSite:a.edge.region[a.side]},rightRegion:function(a){return a.edge==null?c.bottomSite:a.edge.region[g[a.side]]}},e={bisect:function(a,b){var c={region:{l:a,r:b},ep:{l:null,r:null}},d=b.x-a.x,e=b.y-a.y,f=d>0?d:-d,g=e>0?e:-e;return c.c=a.x*d+a.y*e+(d*d+e*e)*.5,f>g?(c.a=1,c.b=e/d,c.c/=d):(c.b=1,c.a=d/e,c.c/=e),c},intersect:function(a,b){var c=a.edge,d=b.edge;if(!c||!d||c.region.r==d.region.r)return null;var e=c.a*d.b-c.b*d.a;if(Math.abs(e)<1e-10)return null;var f=(c.c*d.b-d.c*c.b)/e,g=(d.c*c.a-c.c*d.a)/e,h=c.region.r,i=d.region.r,j,k;h.y=k.region.r.x;return l&&j.side==="l"||!l&&j.side==="r"?null:{x:f,y:g}},rightOf:function(a,b){var c=a.edge,d=c.region.r,e=b.x>d.x;if(e&&a.side==="l")return 1;if(!e&&a.side==="r")return 0;if(c.a===1){var f=b.y-d.y,g=b.x-d.x,h=0,i=0;!e&&c.b<0||e&&c.b>=0?i=h=f>=c.b*g:(i=b.x+b.y*c.b>c.c,c.b<0&&(i=!i),i||(h=1));if(!h){var j=d.x-c.region.l.x;i=c.b*(g*g-f*f)m*m+n*n}return a.side==="l"?i:!i},endPoint:function(a,c,d){a.ep[c]=d;if(!a.ep[g[c]])return;b(a)},distance:function(a,b){var c=a.x-b.x,d=a.y-b.y;return Math.sqrt(c*c+d*d)}},f={list:[],insert:function(a,b,c){a.vertex=b,a.ystar=b.y+c;for(var d=0,e=f.list,g=e.length;dh.ystar||a.ystar==h.ystar&&b.x>h.vertex.x)continue;break}e.splice(d,0,a)},del:function(a){for(var b=0,c=f.list,d=c.length;bp.y&&(q=o,o=p,p=q,u="r"),t=e.bisect(o,p),n=d.createHalfEdge(t,u),d.insert(l,n),e.endPoint(t,g[u],s),r=e.intersect(l,n),r&&(f.del(l),f.insert(l,r,e.distance(r,o))),r=e.intersect(n,m),r&&f.insert(n,r,e.distance(r,o));else break}for(j=d.right(d.leftEnd);j!=d.rightEnd;j=d.right(j))b(j.edge)}function i(){return{leaf:!0,nodes:[],point:null}}function j(a,b,c,d,e,f){if(!a(b,c,d,e,f)){var g=(c+e)*.5,h=(d+f)*.5,i=b.nodes;i[0]&&j(a,i[0],c,d,g,h),i[1]&&j(a,i[1],g,d,e,h),i[2]&&j(a,i[2],c,h,g,f),i[3]&&j(a,i[3],g,h,e,f)}}function k(a){return{x:a[0],y:a[1]}}d3.geom={},d3.geom.contour=function(d,e){var f=e||c(d),g=[],h=f[0],i=f[1],j=0,k=0,l=NaN,m=NaN,n=0;do n=0,d(h-1,i-1)&&(n+=1),d(h,i-1)&&(n+=2),d(h-1,i)&&(n+=4),d(h,i)&&(n+=8),n===6?(j=m===-1?-1:1,k=0):n===9?(j=0,k=l===1?-1:1):(j=a[n],k=b[n]),j!=l&&k!=m&&(g.push([h,i]),l=j,m=k),h+=j,i+=k;while(f[0]!=h||f[1]!=i);return g};var a=[1,0,1,1,-1,0,-1,1,0,0,0,0,-1,0,-1,NaN],b=[0,-1,0,0,0,-1,0,0,1,-1,1,1,0,-1,0,NaN];d3.geom.hull=function(a){if(a.length<3)return[];var b=a.length,c=b-1,e=[],f=[],g,h,i=0,j,k,l,m,n,o,p,q;for(g=1;g=l*l+m*m?e[g].index=-1:(e[n].index=-1,p=e[g].angle,n=g,o=h)):(p=e[g].angle,n=g,o=h);f.push(i);for(g=0,h=0;g<2;++h)e[h].index!==-1&&(f.push(e[h].index),g++);q=f.length;for(;h=0?(c=a.ep.r,d=a.ep.l):(c=a.ep.l,d=a.ep.r),a.a===1?(g=c?c.y:-1e6,e=a.c-a.b*g,h=d?d.y:1e6,f=a.c-a.b*h):(e=c?c.x:-1e6,g=a.c-a.a*e,f=d?d.x:1e6,h=a.c-a.a*f);var i=[e,g],j=[f,h];b[a.region.l.index].push(i,j),b[a.region.r.index].push(i,j)}),b.map(function(b,c){var d=a[c][0],e=a[c][1];return b.forEach(function(a){a.angle=Math.atan2(a[0]-d,a[1]-e)}),b.sort(function(a,b){return a.angle-b.angle}).filter(function(a,c){return!c||a.angle-b[c-1].angle>1e-10})})};var g={l:"r",r:"l"};d3.geom.delaunay=function(a){var b=a.map(function(){return[]}),c=[];return h(a,function(c){b[c.region.l.index].push(a[c.region.r.index])}),b.forEach(function(b,d){var e=a[d],f=e[0],g=e[1];b.forEach(function(a){a.angle=Math.atan2(a[0]-f,a[1]-g)}),b.sort(function(a,b){return a.angle-b.angle});for(var h=0,i=b.length-1;h=g,k=b.y>=h,l=(k<<1)+j;a.leaf=!1,a=a.nodes[l]||(a.nodes[l]=i()),j?c=g:e=g,k?d=h:f=h,n(a,b,c,d,e,f)}var f,g=-1,h=a.length;h&&isNaN(a[0].x)&&(a=a.map(k));if(arguments.length<5)if(arguments.length===3)e=d=c,c=b;else{b=c=Infinity,d=e=-Infinity;while(++gd&&(d=f.x),f.y>e&&(e=f.y);var l=d-b,m=e-c;l>m?e=c+l:d=b+m}var p=i();return p.add=function(a){n(p,a,b,c,d,e)},p.visit=function(a){j(a,p,b,c,d,e)},a.forEach(p.add),p}})(); \ No newline at end of file diff --git a/static/vendor/d3-2.7.5/d3.js b/static/vendor/d3-2.7.5/d3.js new file mode 100644 index 0000000..65b951e --- /dev/null +++ b/static/vendor/d3-2.7.5/d3.js @@ -0,0 +1,4765 @@ +(function(){if (!Date.now) Date.now = function() { + return +new Date; +}; +try { + document.createElement("div").style.setProperty("opacity", 0, ""); +} catch (error) { + var d3_style_prototype = CSSStyleDeclaration.prototype, + d3_style_setProperty = d3_style_prototype.setProperty; + d3_style_prototype.setProperty = function(name, value, priority) { + d3_style_setProperty.call(this, name, value + "", priority); + }; +} +d3 = {version: "2.7.5"}; // semver +var d3_array = d3_arraySlice; // conversion for NodeLists + +function d3_arrayCopy(pseudoarray) { + var i = -1, n = pseudoarray.length, array = []; + while (++i < n) array.push(pseudoarray[i]); + return array; +} + +function d3_arraySlice(pseudoarray) { + return Array.prototype.slice.call(pseudoarray); +} + +try { + d3_array(document.documentElement.childNodes)[0].nodeType; +} catch(e) { + d3_array = d3_arrayCopy; +} + +var d3_arraySubclass = [].__proto__? + +// Until ECMAScript supports array subclassing, prototype injection works well. +function(array, prototype) { + array.__proto__ = prototype; +}: + +// And if your browser doesn't support __proto__, we'll use direct extension. +function(array, prototype) { + for (var property in prototype) array[property] = prototype[property]; +}; +function d3_this() { + return this; +} +d3.functor = function(v) { + return typeof v === "function" ? v : function() { return v; }; +}; +// Copies a variable number of methods from source to target. +d3.rebind = function(target, source) { + var i = 1, n = arguments.length, method; + while (++i < n) target[method = arguments[i]] = d3_rebind(target, source, source[method]); + return target; +}; + +// Method is assumed to be a standard D3 getter-setter: +// If passed with no arguments, gets the value. +// If passed with arguments, sets the value and returns the target. +function d3_rebind(target, source, method) { + return function() { + var value = method.apply(source, arguments); + return arguments.length ? target : value; + }; +} +d3.ascending = function(a, b) { + return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN; +}; +d3.descending = function(a, b) { + return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN; +}; +d3.mean = function(array, f) { + var n = array.length, + a, + m = 0, + i = -1, + j = 0; + if (arguments.length === 1) { + while (++i < n) if (d3_number(a = array[i])) m += (a - m) / ++j; + } else { + while (++i < n) if (d3_number(a = f.call(array, array[i], i))) m += (a - m) / ++j; + } + return j ? m : undefined; +}; +d3.median = function(array, f) { + if (arguments.length > 1) array = array.map(f); + array = array.filter(d3_number); + return array.length ? d3.quantile(array.sort(d3.ascending), .5) : undefined; +}; +d3.min = function(array, f) { + var i = -1, + n = array.length, + a, + b; + if (arguments.length === 1) { + while (++i < n && ((a = array[i]) == null || a != a)) a = undefined; + while (++i < n) if ((b = array[i]) != null && a > b) a = b; + } else { + while (++i < n && ((a = f.call(array, array[i], i)) == null || a != a)) a = undefined; + while (++i < n) if ((b = f.call(array, array[i], i)) != null && a > b) a = b; + } + return a; +}; +d3.max = function(array, f) { + var i = -1, + n = array.length, + a, + b; + if (arguments.length === 1) { + while (++i < n && ((a = array[i]) == null || a != a)) a = undefined; + while (++i < n) if ((b = array[i]) != null && b > a) a = b; + } else { + while (++i < n && ((a = f.call(array, array[i], i)) == null || a != a)) a = undefined; + while (++i < n) if ((b = f.call(array, array[i], i)) != null && b > a) a = b; + } + return a; +}; +d3.extent = function(array, f) { + var i = -1, + n = array.length, + a, + b, + c; + if (arguments.length === 1) { + while (++i < n && ((a = c = array[i]) == null || a != a)) a = c = undefined; + while (++i < n) if ((b = array[i]) != null) { + if (a > b) a = b; + if (c < b) c = b; + } + } else { + while (++i < n && ((a = c = f.call(array, array[i], i)) == null || a != a)) a = undefined; + while (++i < n) if ((b = f.call(array, array[i], i)) != null) { + if (a > b) a = b; + if (c < b) c = b; + } + } + return [a, c]; +}; +d3.random = { + normal: function(mean, deviation) { + if (arguments.length < 2) deviation = 1; + if (arguments.length < 1) mean = 0; + return function() { + var x, y, r; + do { + x = Math.random() * 2 - 1; + y = Math.random() * 2 - 1; + r = x * x + y * y; + } while (!r || r > 1); + return mean + deviation * x * Math.sqrt(-2 * Math.log(r) / r); + }; + } +}; +function d3_number(x) { + return x != null && !isNaN(x); +} +d3.sum = function(array, f) { + var s = 0, + n = array.length, + a, + i = -1; + + if (arguments.length === 1) { + while (++i < n) if (!isNaN(a = +array[i])) s += a; + } else { + while (++i < n) if (!isNaN(a = +f.call(array, array[i], i))) s += a; + } + + return s; +}; +// R-7 per +d3.quantile = function(values, p) { + var H = (values.length - 1) * p + 1, + h = Math.floor(H), + v = values[h - 1], + e = H - h; + return e ? v + e * (values[h] - v) : v; +}; +d3.transpose = function(matrix) { + return d3.zip.apply(d3, matrix); +}; +d3.zip = function() { + if (!(n = arguments.length)) return []; + for (var i = -1, m = d3.min(arguments, d3_zipLength), zips = new Array(m); ++i < m;) { + for (var j = -1, n, zip = zips[i] = new Array(n); ++j < n;) { + zip[j] = arguments[j][i]; + } + } + return zips; +}; + +function d3_zipLength(d) { + return d.length; +} +// Locate the insertion point for x in a to maintain sorted order. The +// arguments lo and hi may be used to specify a subset of the array which should +// be considered; by default the entire array is used. If x is already present +// in a, the insertion point will be before (to the left of) any existing +// entries. The return value is suitable for use as the first argument to +// `array.splice` assuming that a is already sorted. +// +// The returned insertion point i partitions the array a into two halves so that +// all v < x for v in a[lo:i] for the left side and all v >= x for v in a[i:hi] +// for the right side. +d3.bisectLeft = function(a, x, lo, hi) { + if (arguments.length < 3) lo = 0; + if (arguments.length < 4) hi = a.length; + while (lo < hi) { + var mid = (lo + hi) >> 1; + if (a[mid] < x) lo = mid + 1; + else hi = mid; + } + return lo; +}; + +// Similar to bisectLeft, but returns an insertion point which comes after (to +// the right of) any existing entries of x in a. +// +// The returned insertion point i partitions the array into two halves so that +// all v <= x for v in a[lo:i] for the left side and all v > x for v in a[i:hi] +// for the right side. +d3.bisect = +d3.bisectRight = function(a, x, lo, hi) { + if (arguments.length < 3) lo = 0; + if (arguments.length < 4) hi = a.length; + while (lo < hi) { + var mid = (lo + hi) >> 1; + if (x < a[mid]) hi = mid; + else lo = mid + 1; + } + return lo; +}; +d3.first = function(array, f) { + var i = 0, + n = array.length, + a = array[0], + b; + if (arguments.length === 1) f = d3.ascending; + while (++i < n) { + if (f.call(array, a, b = array[i]) > 0) { + a = b; + } + } + return a; +}; +d3.last = function(array, f) { + var i = 0, + n = array.length, + a = array[0], + b; + if (arguments.length === 1) f = d3.ascending; + while (++i < n) { + if (f.call(array, a, b = array[i]) <= 0) { + a = b; + } + } + return a; +}; +d3.nest = function() { + var nest = {}, + keys = [], + sortKeys = [], + sortValues, + rollup; + + function map(array, depth) { + if (depth >= keys.length) return rollup + ? rollup.call(nest, array) : (sortValues + ? array.sort(sortValues) + : array); + + var i = -1, + n = array.length, + key = keys[depth++], + keyValue, + object, + o = {}; + + while (++i < n) { + if ((keyValue = key(object = array[i])) in o) { + o[keyValue].push(object); + } else { + o[keyValue] = [object]; + } + } + + for (keyValue in o) { + o[keyValue] = map(o[keyValue], depth); + } + + return o; + } + + function entries(map, depth) { + if (depth >= keys.length) return map; + + var a = [], + sortKey = sortKeys[depth++], + key; + + for (key in map) { + a.push({key: key, values: entries(map[key], depth)}); + } + + if (sortKey) a.sort(function(a, b) { + return sortKey(a.key, b.key); + }); + + return a; + } + + nest.map = function(array) { + return map(array, 0); + }; + + nest.entries = function(array) { + return entries(map(array, 0), 0); + }; + + nest.key = function(d) { + keys.push(d); + return nest; + }; + + // Specifies the order for the most-recently specified key. + // Note: only applies to entries. Map keys are unordered! + nest.sortKeys = function(order) { + sortKeys[keys.length - 1] = order; + return nest; + }; + + // Specifies the order for leaf values. + // Applies to both maps and entries array. + nest.sortValues = function(order) { + sortValues = order; + return nest; + }; + + nest.rollup = function(f) { + rollup = f; + return nest; + }; + + return nest; +}; +d3.keys = function(map) { + var keys = []; + for (var key in map) keys.push(key); + return keys; +}; +d3.values = function(map) { + var values = []; + for (var key in map) values.push(map[key]); + return values; +}; +d3.entries = function(map) { + var entries = []; + for (var key in map) entries.push({key: key, value: map[key]}); + return entries; +}; +d3.permute = function(array, indexes) { + var permutes = [], + i = -1, + n = indexes.length; + while (++i < n) permutes[i] = array[indexes[i]]; + return permutes; +}; +d3.merge = function(arrays) { + return Array.prototype.concat.apply([], arrays); +}; +d3.split = function(array, f) { + var arrays = [], + values = [], + value, + i = -1, + n = array.length; + if (arguments.length < 2) f = d3_splitter; + while (++i < n) { + if (f.call(values, value = array[i], i)) { + values = []; + } else { + if (!values.length) arrays.push(values); + values.push(value); + } + } + return arrays; +}; + +function d3_splitter(d) { + return d == null; +} +function d3_collapse(s) { + return s.replace(/(^\s+)|(\s+$)/g, "").replace(/\s+/g, " "); +} +d3.range = function(start, stop, step) { + if (arguments.length < 3) { + step = 1; + if (arguments.length < 2) { + stop = start; + start = 0; + } + } + if ((stop - start) / step === Infinity) throw new Error("infinite range"); + var range = [], + k = d3_range_integerScale(Math.abs(step)), + i = -1, + j; + start *= k, stop *= k, step *= k; + if (step < 0) while ((j = start + step * ++i) > stop) range.push(j / k); + else while ((j = start + step * ++i) < stop) range.push(j / k); + return range; +}; + +function d3_range_integerScale(x) { + var k = 1; + while (x * k % 1) k *= 10; + return k; +} +d3.requote = function(s) { + return s.replace(d3_requote_re, "\\$&"); +}; + +var d3_requote_re = /[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g; +d3.round = function(x, n) { + return n + ? Math.round(x * (n = Math.pow(10, n))) / n + : Math.round(x); +}; +d3.xhr = function(url, mime, callback) { + var req = new XMLHttpRequest; + if (arguments.length < 3) callback = mime, mime = null; + else if (mime && req.overrideMimeType) req.overrideMimeType(mime); + req.open("GET", url, true); + if (mime) req.setRequestHeader("Accept", mime); + req.onreadystatechange = function() { + if (req.readyState === 4) callback(req.status < 300 ? req : null); + }; + req.send(null); +}; +d3.text = function(url, mime, callback) { + function ready(req) { + callback(req && req.responseText); + } + if (arguments.length < 3) { + callback = mime; + mime = null; + } + d3.xhr(url, mime, ready); +}; +d3.json = function(url, callback) { + d3.text(url, "application/json", function(text) { + callback(text ? JSON.parse(text) : null); + }); +}; +d3.html = function(url, callback) { + d3.text(url, "text/html", function(text) { + if (text != null) { // Treat empty string as valid HTML. + var range = document.createRange(); + range.selectNode(document.body); + text = range.createContextualFragment(text); + } + callback(text); + }); +}; +d3.xml = function(url, mime, callback) { + function ready(req) { + callback(req && req.responseXML); + } + if (arguments.length < 3) { + callback = mime; + mime = null; + } + d3.xhr(url, mime, ready); +}; +var d3_nsPrefix = { + svg: "http://www.w3.org/2000/svg", + xhtml: "http://www.w3.org/1999/xhtml", + xlink: "http://www.w3.org/1999/xlink", + xml: "http://www.w3.org/XML/1998/namespace", + xmlns: "http://www.w3.org/2000/xmlns/" +}; + +d3.ns = { + prefix: d3_nsPrefix, + qualify: function(name) { + var i = name.indexOf(":"); + return i < 0 ? (name in d3_nsPrefix + ? {space: d3_nsPrefix[name], local: name} : name) + : {space: d3_nsPrefix[name.substring(0, i)], local: name.substring(i + 1)}; + } +}; +d3.dispatch = function() { + var dispatch = new d3_dispatch(), + i = -1, + n = arguments.length; + while (++i < n) dispatch[arguments[i]] = d3_dispatch_event(dispatch); + return dispatch; +}; + +function d3_dispatch() {} + +d3_dispatch.prototype.on = function(type, listener) { + var i = type.indexOf("."), + name = ""; + + // Extract optional namespace, e.g., "click.foo" + if (i > 0) { + name = type.substring(i + 1); + type = type.substring(0, i); + } + + return arguments.length < 2 + ? this[type].on(name) + : this[type].on(name, listener); +}; + +function d3_dispatch_event(dispatch) { + var listeners = [], + listenerByName = {}; + + function event() { + var z = listeners, // defensive reference + i = -1, + n = z.length, + l; + while (++i < n) if (l = z[i].on) l.apply(this, arguments); + return dispatch; + } + + event.on = function(name, listener) { + var l, i; + + // return the current listener, if any + if (arguments.length < 2) return (l = listenerByName[name]) && l.on; + + // remove the old listener, if any (with copy-on-write) + if (l = listenerByName[name]) { + l.on = null; + listeners = listeners.slice(0, i = listeners.indexOf(l)).concat(listeners.slice(i + 1)); + delete listenerByName[name]; + } + + // add the new listener, if any + if (listener) { + listeners.push(listenerByName[name] = {on: listener}); + } + + return dispatch; + }; + + return event; +} +// TODO align +d3.format = function(specifier) { + var match = d3_format_re.exec(specifier), + fill = match[1] || " ", + sign = match[3] || "", + zfill = match[5], + width = +match[6], + comma = match[7], + precision = match[8], + type = match[9], + scale = 1, + suffix = "", + integer = false; + + if (precision) precision = +precision.substring(1); + + if (zfill) { + fill = "0"; // TODO align = "="; + if (comma) width -= Math.floor((width - 1) / 4); + } + + switch (type) { + case "n": comma = true; type = "g"; break; + case "%": scale = 100; suffix = "%"; type = "f"; break; + case "p": scale = 100; suffix = "%"; type = "r"; break; + case "d": integer = true; precision = 0; break; + case "s": scale = -1; type = "r"; break; + } + + // If no precision is specified for r, fallback to general notation. + if (type == "r" && !precision) type = "g"; + + type = d3_format_types[type] || d3_format_typeDefault; + + return function(value) { + + // Return the empty string for floats formatted as ints. + if (integer && (value % 1)) return ""; + + // Convert negative to positive, and record the sign prefix. + var negative = (value < 0) && (value = -value) ? "\u2212" : sign; + + // Apply the scale, computing it from the value's exponent for si format. + if (scale < 0) { + var prefix = d3.formatPrefix(value, precision); + value *= prefix.scale; + suffix = prefix.symbol; + } else { + value *= scale; + } + + // Convert to the desired precision. + value = type(value, precision); + + // If the fill character is 0, the sign and group is applied after the fill. + if (zfill) { + var length = value.length + negative.length; + if (length < width) value = new Array(width - length + 1).join(fill) + value; + if (comma) value = d3_format_group(value); + value = negative + value; + } + + // Otherwise (e.g., space-filling), the sign and group is applied before. + else { + if (comma) value = d3_format_group(value); + value = negative + value; + var length = value.length; + if (length < width) value = new Array(width - length + 1).join(fill) + value; + } + + return value + suffix; + }; +}; + +// [[fill]align][sign][#][0][width][,][.precision][type] +var d3_format_re = /(?:([^{])?([<>=^]))?([+\- ])?(#)?(0)?([0-9]+)?(,)?(\.[0-9]+)?([a-zA-Z%])?/; + +var d3_format_types = { + g: function(x, p) { return x.toPrecision(p); }, + e: function(x, p) { return x.toExponential(p); }, + f: function(x, p) { return x.toFixed(p); }, + r: function(x, p) { return d3.round(x, p = d3_format_precision(x, p)).toFixed(Math.max(0, Math.min(20, p))); } +}; + +function d3_format_precision(x, p) { + return p - (x ? 1 + Math.floor(Math.log(x + Math.pow(10, 1 + Math.floor(Math.log(x) / Math.LN10) - p)) / Math.LN10) : 1); +} + +function d3_format_typeDefault(x) { + return x + ""; +} + +// Apply comma grouping for thousands. +function d3_format_group(value) { + var i = value.lastIndexOf("."), + f = i >= 0 ? value.substring(i) : (i = value.length, ""), + t = []; + while (i > 0) t.push(value.substring(i -= 3, i + 3)); + return t.reverse().join(",") + f; +} +var d3_formatPrefixes = ["y","z","a","f","p","n","μ","m","","k","M","G","T","P","E","Z","Y"].map(d3_formatPrefix); + +d3.formatPrefix = function(value, precision) { + var i = 0; + if (value) { + if (value < 0) value *= -1; + if (precision) value = d3.round(value, d3_format_precision(value, precision)); + i = 1 + Math.floor(1e-12 + Math.log(value) / Math.LN10); + i = Math.max(-24, Math.min(24, Math.floor((i <= 0 ? i + 1 : i - 1) / 3) * 3)); + } + return d3_formatPrefixes[8 + i / 3]; +}; + +function d3_formatPrefix(d, i) { + return { + scale: Math.pow(10, (8 - i) * 3), + symbol: d + }; +} + +/* + * TERMS OF USE - EASING EQUATIONS + * + * Open source under the BSD License. + * + * Copyright 2001 Robert Penner + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * - Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * - Neither the name of the author nor the names of contributors may be used to + * endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +var d3_ease_quad = d3_ease_poly(2), + d3_ease_cubic = d3_ease_poly(3); + +var d3_ease = { + linear: function() { return d3_ease_linear; }, + poly: d3_ease_poly, + quad: function() { return d3_ease_quad; }, + cubic: function() { return d3_ease_cubic; }, + sin: function() { return d3_ease_sin; }, + exp: function() { return d3_ease_exp; }, + circle: function() { return d3_ease_circle; }, + elastic: d3_ease_elastic, + back: d3_ease_back, + bounce: function() { return d3_ease_bounce; } +}; + +var d3_ease_mode = { + "in": function(f) { return f; }, + "out": d3_ease_reverse, + "in-out": d3_ease_reflect, + "out-in": function(f) { return d3_ease_reflect(d3_ease_reverse(f)); } +}; + +d3.ease = function(name) { + var i = name.indexOf("-"), + t = i >= 0 ? name.substring(0, i) : name, + m = i >= 0 ? name.substring(i + 1) : "in"; + return d3_ease_clamp(d3_ease_mode[m](d3_ease[t].apply(null, Array.prototype.slice.call(arguments, 1)))); +}; + +function d3_ease_clamp(f) { + return function(t) { + return t <= 0 ? 0 : t >= 1 ? 1 : f(t); + }; +} + +function d3_ease_reverse(f) { + return function(t) { + return 1 - f(1 - t); + }; +} + +function d3_ease_reflect(f) { + return function(t) { + return .5 * (t < .5 ? f(2 * t) : (2 - f(2 - 2 * t))); + }; +} + +function d3_ease_linear(t) { + return t; +} + +function d3_ease_poly(e) { + return function(t) { + return Math.pow(t, e); + } +} + +function d3_ease_sin(t) { + return 1 - Math.cos(t * Math.PI / 2); +} + +function d3_ease_exp(t) { + return Math.pow(2, 10 * (t - 1)); +} + +function d3_ease_circle(t) { + return 1 - Math.sqrt(1 - t * t); +} + +function d3_ease_elastic(a, p) { + var s; + if (arguments.length < 2) p = 0.45; + if (arguments.length < 1) { a = 1; s = p / 4; } + else s = p / (2 * Math.PI) * Math.asin(1 / a); + return function(t) { + return 1 + a * Math.pow(2, 10 * -t) * Math.sin((t - s) * 2 * Math.PI / p); + }; +} + +function d3_ease_back(s) { + if (!s) s = 1.70158; + return function(t) { + return t * t * ((s + 1) * t - s); + }; +} + +function d3_ease_bounce(t) { + return t < 1 / 2.75 ? 7.5625 * t * t + : t < 2 / 2.75 ? 7.5625 * (t -= 1.5 / 2.75) * t + .75 + : t < 2.5 / 2.75 ? 7.5625 * (t -= 2.25 / 2.75) * t + .9375 + : 7.5625 * (t -= 2.625 / 2.75) * t + .984375; +} +d3.event = null; + +function d3_eventCancel() { + d3.event.stopPropagation(); + d3.event.preventDefault(); +} +d3.interpolate = function(a, b) { + var i = d3.interpolators.length, f; + while (--i >= 0 && !(f = d3.interpolators[i](a, b))); + return f; +}; + +d3.interpolateNumber = function(a, b) { + b -= a; + return function(t) { return a + b * t; }; +}; + +d3.interpolateRound = function(a, b) { + b -= a; + return function(t) { return Math.round(a + b * t); }; +}; + +d3.interpolateString = function(a, b) { + var m, // current match + i, // current index + j, // current index (for coallescing) + s0 = 0, // start index of current string prefix + s1 = 0, // end index of current string prefix + s = [], // string constants and placeholders + q = [], // number interpolators + n, // q.length + o; + + // Reset our regular expression! + d3_interpolate_number.lastIndex = 0; + + // Find all numbers in b. + for (i = 0; m = d3_interpolate_number.exec(b); ++i) { + if (m.index) s.push(b.substring(s0, s1 = m.index)); + q.push({i: s.length, x: m[0]}); + s.push(null); + s0 = d3_interpolate_number.lastIndex; + } + if (s0 < b.length) s.push(b.substring(s0)); + + // Find all numbers in a. + for (i = 0, n = q.length; (m = d3_interpolate_number.exec(a)) && i < n; ++i) { + o = q[i]; + if (o.x == m[0]) { // The numbers match, so coallesce. + if (o.i) { + if (s[o.i + 1] == null) { // This match is followed by another number. + s[o.i - 1] += o.x; + s.splice(o.i, 1); + for (j = i + 1; j < n; ++j) q[j].i--; + } else { // This match is followed by a string, so coallesce twice. + s[o.i - 1] += o.x + s[o.i + 1]; + s.splice(o.i, 2); + for (j = i + 1; j < n; ++j) q[j].i -= 2; + } + } else { + if (s[o.i + 1] == null) { // This match is followed by another number. + s[o.i] = o.x; + } else { // This match is followed by a string, so coallesce twice. + s[o.i] = o.x + s[o.i + 1]; + s.splice(o.i + 1, 1); + for (j = i + 1; j < n; ++j) q[j].i--; + } + } + q.splice(i, 1); + n--; + i--; + } else { + o.x = d3.interpolateNumber(parseFloat(m[0]), parseFloat(o.x)); + } + } + + // Remove any numbers in b not found in a. + while (i < n) { + o = q.pop(); + if (s[o.i + 1] == null) { // This match is followed by another number. + s[o.i] = o.x; + } else { // This match is followed by a string, so coallesce twice. + s[o.i] = o.x + s[o.i + 1]; + s.splice(o.i + 1, 1); + } + n--; + } + + // Special optimization for only a single match. + if (s.length === 1) { + return s[0] == null ? q[0].x : function() { return b; }; + } + + // Otherwise, interpolate each of the numbers and rejoin the string. + return function(t) { + for (i = 0; i < n; ++i) s[(o = q[i]).i] = o.x(t); + return s.join(""); + }; +}; + +d3.interpolateTransform = function(a, b) { + var s = [], // string constants and placeholders + q = [], // number interpolators + n, + A = d3.transform(a), + B = d3.transform(b), + ta = A.translate, + tb = B.translate, + ra = A.rotate, + rb = B.rotate, + wa = A.skew, + wb = B.skew, + ka = A.scale, + kb = B.scale; + + if (ta[0] != tb[0] || ta[1] != tb[1]) { + s.push("translate(", null, ",", null, ")"); + q.push({i: 1, x: d3.interpolateNumber(ta[0], tb[0])}, {i: 3, x: d3.interpolateNumber(ta[1], tb[1])}); + } else if (tb[0] || tb[1]) { + s.push("translate(" + tb + ")"); + } else { + s.push(""); + } + + if (ra != rb) { + q.push({i: s.push(s.pop() + "rotate(", null, ")") - 2, x: d3.interpolateNumber(ra, rb)}); + } else if (rb) { + s.push(s.pop() + "rotate(" + rb + ")"); + } + + if (wa != wb) { + q.push({i: s.push(s.pop() + "skewX(", null, ")") - 2, x: d3.interpolateNumber(wa, wb)}); + } else if (wb) { + s.push(s.pop() + "skewX(" + wb + ")"); + } + + if (ka[0] != kb[0] || ka[1] != kb[1]) { + n = s.push(s.pop() + "scale(", null, ",", null, ")"); + q.push({i: n - 4, x: d3.interpolateNumber(ka[0], kb[0])}, {i: n - 2, x: d3.interpolateNumber(ka[1], kb[1])}); + } else if (kb[0] != 1 || kb[1] != 1) { + s.push(s.pop() + "scale(" + kb + ")"); + } + + n = q.length; + return function(t) { + var i = -1, o; + while (++i < n) s[(o = q[i]).i] = o.x(t); + return s.join(""); + }; +}; + +d3.interpolateRgb = function(a, b) { + a = d3.rgb(a); + b = d3.rgb(b); + var ar = a.r, + ag = a.g, + ab = a.b, + br = b.r - ar, + bg = b.g - ag, + bb = b.b - ab; + return function(t) { + return "#" + + d3_rgb_hex(Math.round(ar + br * t)) + + d3_rgb_hex(Math.round(ag + bg * t)) + + d3_rgb_hex(Math.round(ab + bb * t)); + }; +}; + +// interpolates HSL space, but outputs RGB string (for compatibility) +d3.interpolateHsl = function(a, b) { + a = d3.hsl(a); + b = d3.hsl(b); + var h0 = a.h, + s0 = a.s, + l0 = a.l, + h1 = b.h - h0, + s1 = b.s - s0, + l1 = b.l - l0; + return function(t) { + return d3_hsl_rgb(h0 + h1 * t, s0 + s1 * t, l0 + l1 * t).toString(); + }; +}; + +d3.interpolateArray = function(a, b) { + var x = [], + c = [], + na = a.length, + nb = b.length, + n0 = Math.min(a.length, b.length), + i; + for (i = 0; i < n0; ++i) x.push(d3.interpolate(a[i], b[i])); + for (; i < na; ++i) c[i] = a[i]; + for (; i < nb; ++i) c[i] = b[i]; + return function(t) { + for (i = 0; i < n0; ++i) c[i] = x[i](t); + return c; + }; +}; + +d3.interpolateObject = function(a, b) { + var i = {}, + c = {}, + k; + for (k in a) { + if (k in b) { + i[k] = d3_interpolateByName(k)(a[k], b[k]); + } else { + c[k] = a[k]; + } + } + for (k in b) { + if (!(k in a)) { + c[k] = b[k]; + } + } + return function(t) { + for (k in i) c[k] = i[k](t); + return c; + }; +} + +var d3_interpolate_number = /[-+]?(?:\d*\.?\d+)(?:[eE][-+]?\d+)?/g; + +function d3_interpolateByName(n) { + return n == "transform" + ? d3.interpolateTransform + : d3.interpolate; +} + +d3.interpolators = [ + d3.interpolateObject, + function(a, b) { return (b instanceof Array) && d3.interpolateArray(a, b); }, + function(a, b) { return (typeof a === "string" || typeof b === "string") && d3.interpolateString(a + "", b + ""); }, + function(a, b) { return (typeof b === "string" ? b in d3_rgb_names || /^(#|rgb\(|hsl\()/.test(b) : b instanceof d3_Rgb || b instanceof d3_Hsl) && d3.interpolateRgb(a, b); }, + function(a, b) { return !isNaN(a = +a) && !isNaN(b = +b) && d3.interpolateNumber(a, b); } +]; +function d3_uninterpolateNumber(a, b) { + b = b - (a = +a) ? 1 / (b - a) : 0; + return function(x) { return (x - a) * b; }; +} + +function d3_uninterpolateClamp(a, b) { + b = b - (a = +a) ? 1 / (b - a) : 0; + return function(x) { return Math.max(0, Math.min(1, (x - a) * b)); }; +} +d3.rgb = function(r, g, b) { + return arguments.length === 1 + ? (r instanceof d3_Rgb ? d3_rgb(r.r, r.g, r.b) + : d3_rgb_parse("" + r, d3_rgb, d3_hsl_rgb)) + : d3_rgb(~~r, ~~g, ~~b); +}; + +function d3_rgb(r, g, b) { + return new d3_Rgb(r, g, b); +} + +function d3_Rgb(r, g, b) { + this.r = r; + this.g = g; + this.b = b; +} + +d3_Rgb.prototype.brighter = function(k) { + k = Math.pow(0.7, arguments.length ? k : 1); + var r = this.r, + g = this.g, + b = this.b, + i = 30; + if (!r && !g && !b) return d3_rgb(i, i, i); + if (r && r < i) r = i; + if (g && g < i) g = i; + if (b && b < i) b = i; + return d3_rgb( + Math.min(255, Math.floor(r / k)), + Math.min(255, Math.floor(g / k)), + Math.min(255, Math.floor(b / k))); +}; + +d3_Rgb.prototype.darker = function(k) { + k = Math.pow(0.7, arguments.length ? k : 1); + return d3_rgb( + Math.floor(k * this.r), + Math.floor(k * this.g), + Math.floor(k * this.b)); +}; + +d3_Rgb.prototype.hsl = function() { + return d3_rgb_hsl(this.r, this.g, this.b); +}; + +d3_Rgb.prototype.toString = function() { + return "#" + d3_rgb_hex(this.r) + d3_rgb_hex(this.g) + d3_rgb_hex(this.b); +}; + +function d3_rgb_hex(v) { + return v < 0x10 + ? "0" + Math.max(0, v).toString(16) + : Math.min(255, v).toString(16); +} + +function d3_rgb_parse(format, rgb, hsl) { + var r = 0, // red channel; int in [0, 255] + g = 0, // green channel; int in [0, 255] + b = 0, // blue channel; int in [0, 255] + m1, // CSS color specification match + m2, // CSS color specification type (e.g., rgb) + name; + + /* Handle hsl, rgb. */ + m1 = /([a-z]+)\((.*)\)/i.exec(format); + if (m1) { + m2 = m1[2].split(","); + switch (m1[1]) { + case "hsl": { + return hsl( + parseFloat(m2[0]), // degrees + parseFloat(m2[1]) / 100, // percentage + parseFloat(m2[2]) / 100 // percentage + ); + } + case "rgb": { + return rgb( + d3_rgb_parseNumber(m2[0]), + d3_rgb_parseNumber(m2[1]), + d3_rgb_parseNumber(m2[2]) + ); + } + } + } + + /* Named colors. */ + if (name = d3_rgb_names[format]) return rgb(name.r, name.g, name.b); + + /* Hexadecimal colors: #rgb and #rrggbb. */ + if (format != null && format.charAt(0) === "#") { + if (format.length === 4) { + r = format.charAt(1); r += r; + g = format.charAt(2); g += g; + b = format.charAt(3); b += b; + } else if (format.length === 7) { + r = format.substring(1, 3); + g = format.substring(3, 5); + b = format.substring(5, 7); + } + r = parseInt(r, 16); + g = parseInt(g, 16); + b = parseInt(b, 16); + } + + return rgb(r, g, b); +} + +function d3_rgb_hsl(r, g, b) { + var min = Math.min(r /= 255, g /= 255, b /= 255), + max = Math.max(r, g, b), + d = max - min, + h, + s, + l = (max + min) / 2; + if (d) { + s = l < .5 ? d / (max + min) : d / (2 - max - min); + if (r == max) h = (g - b) / d + (g < b ? 6 : 0); + else if (g == max) h = (b - r) / d + 2; + else h = (r - g) / d + 4; + h *= 60; + } else { + s = h = 0; + } + return d3_hsl(h, s, l); +} + +function d3_rgb_parseNumber(c) { // either integer or percentage + var f = parseFloat(c); + return c.charAt(c.length - 1) === "%" ? Math.round(f * 2.55) : f; +} + +var d3_rgb_names = { + aliceblue: "#f0f8ff", + antiquewhite: "#faebd7", + aqua: "#00ffff", + aquamarine: "#7fffd4", + azure: "#f0ffff", + beige: "#f5f5dc", + bisque: "#ffe4c4", + black: "#000000", + blanchedalmond: "#ffebcd", + blue: "#0000ff", + blueviolet: "#8a2be2", + brown: "#a52a2a", + burlywood: "#deb887", + cadetblue: "#5f9ea0", + chartreuse: "#7fff00", + chocolate: "#d2691e", + coral: "#ff7f50", + cornflowerblue: "#6495ed", + cornsilk: "#fff8dc", + crimson: "#dc143c", + cyan: "#00ffff", + darkblue: "#00008b", + darkcyan: "#008b8b", + darkgoldenrod: "#b8860b", + darkgray: "#a9a9a9", + darkgreen: "#006400", + darkgrey: "#a9a9a9", + darkkhaki: "#bdb76b", + darkmagenta: "#8b008b", + darkolivegreen: "#556b2f", + darkorange: "#ff8c00", + darkorchid: "#9932cc", + darkred: "#8b0000", + darksalmon: "#e9967a", + darkseagreen: "#8fbc8f", + darkslateblue: "#483d8b", + darkslategray: "#2f4f4f", + darkslategrey: "#2f4f4f", + darkturquoise: "#00ced1", + darkviolet: "#9400d3", + deeppink: "#ff1493", + deepskyblue: "#00bfff", + dimgray: "#696969", + dimgrey: "#696969", + dodgerblue: "#1e90ff", + firebrick: "#b22222", + floralwhite: "#fffaf0", + forestgreen: "#228b22", + fuchsia: "#ff00ff", + gainsboro: "#dcdcdc", + ghostwhite: "#f8f8ff", + gold: "#ffd700", + goldenrod: "#daa520", + gray: "#808080", + green: "#008000", + greenyellow: "#adff2f", + grey: "#808080", + honeydew: "#f0fff0", + hotpink: "#ff69b4", + indianred: "#cd5c5c", + indigo: "#4b0082", + ivory: "#fffff0", + khaki: "#f0e68c", + lavender: "#e6e6fa", + lavenderblush: "#fff0f5", + lawngreen: "#7cfc00", + lemonchiffon: "#fffacd", + lightblue: "#add8e6", + lightcoral: "#f08080", + lightcyan: "#e0ffff", + lightgoldenrodyellow: "#fafad2", + lightgray: "#d3d3d3", + lightgreen: "#90ee90", + lightgrey: "#d3d3d3", + lightpink: "#ffb6c1", + lightsalmon: "#ffa07a", + lightseagreen: "#20b2aa", + lightskyblue: "#87cefa", + lightslategray: "#778899", + lightslategrey: "#778899", + lightsteelblue: "#b0c4de", + lightyellow: "#ffffe0", + lime: "#00ff00", + limegreen: "#32cd32", + linen: "#faf0e6", + magenta: "#ff00ff", + maroon: "#800000", + mediumaquamarine: "#66cdaa", + mediumblue: "#0000cd", + mediumorchid: "#ba55d3", + mediumpurple: "#9370db", + mediumseagreen: "#3cb371", + mediumslateblue: "#7b68ee", + mediumspringgreen: "#00fa9a", + mediumturquoise: "#48d1cc", + mediumvioletred: "#c71585", + midnightblue: "#191970", + mintcream: "#f5fffa", + mistyrose: "#ffe4e1", + moccasin: "#ffe4b5", + navajowhite: "#ffdead", + navy: "#000080", + oldlace: "#fdf5e6", + olive: "#808000", + olivedrab: "#6b8e23", + orange: "#ffa500", + orangered: "#ff4500", + orchid: "#da70d6", + palegoldenrod: "#eee8aa", + palegreen: "#98fb98", + paleturquoise: "#afeeee", + palevioletred: "#db7093", + papayawhip: "#ffefd5", + peachpuff: "#ffdab9", + peru: "#cd853f", + pink: "#ffc0cb", + plum: "#dda0dd", + powderblue: "#b0e0e6", + purple: "#800080", + red: "#ff0000", + rosybrown: "#bc8f8f", + royalblue: "#4169e1", + saddlebrown: "#8b4513", + salmon: "#fa8072", + sandybrown: "#f4a460", + seagreen: "#2e8b57", + seashell: "#fff5ee", + sienna: "#a0522d", + silver: "#c0c0c0", + skyblue: "#87ceeb", + slateblue: "#6a5acd", + slategray: "#708090", + slategrey: "#708090", + snow: "#fffafa", + springgreen: "#00ff7f", + steelblue: "#4682b4", + tan: "#d2b48c", + teal: "#008080", + thistle: "#d8bfd8", + tomato: "#ff6347", + turquoise: "#40e0d0", + violet: "#ee82ee", + wheat: "#f5deb3", + white: "#ffffff", + whitesmoke: "#f5f5f5", + yellow: "#ffff00", + yellowgreen: "#9acd32" +}; + +for (var d3_rgb_name in d3_rgb_names) { + d3_rgb_names[d3_rgb_name] = d3_rgb_parse( + d3_rgb_names[d3_rgb_name], + d3_rgb, + d3_hsl_rgb); +} +d3.hsl = function(h, s, l) { + return arguments.length === 1 + ? (h instanceof d3_Hsl ? d3_hsl(h.h, h.s, h.l) + : d3_rgb_parse("" + h, d3_rgb_hsl, d3_hsl)) + : d3_hsl(+h, +s, +l); +}; + +function d3_hsl(h, s, l) { + return new d3_Hsl(h, s, l); +} + +function d3_Hsl(h, s, l) { + this.h = h; + this.s = s; + this.l = l; +} + +d3_Hsl.prototype.brighter = function(k) { + k = Math.pow(0.7, arguments.length ? k : 1); + return d3_hsl(this.h, this.s, this.l / k); +}; + +d3_Hsl.prototype.darker = function(k) { + k = Math.pow(0.7, arguments.length ? k : 1); + return d3_hsl(this.h, this.s, k * this.l); +}; + +d3_Hsl.prototype.rgb = function() { + return d3_hsl_rgb(this.h, this.s, this.l); +}; + +d3_Hsl.prototype.toString = function() { + return this.rgb().toString(); +}; + +function d3_hsl_rgb(h, s, l) { + var m1, + m2; + + /* Some simple corrections for h, s and l. */ + h = h % 360; if (h < 0) h += 360; + s = s < 0 ? 0 : s > 1 ? 1 : s; + l = l < 0 ? 0 : l > 1 ? 1 : l; + + /* From FvD 13.37, CSS Color Module Level 3 */ + m2 = l <= .5 ? l * (1 + s) : l + s - l * s; + m1 = 2 * l - m2; + + function v(h) { + if (h > 360) h -= 360; + else if (h < 0) h += 360; + if (h < 60) return m1 + (m2 - m1) * h / 60; + if (h < 180) return m2; + if (h < 240) return m1 + (m2 - m1) * (240 - h) / 60; + return m1; + } + + function vv(h) { + return Math.round(v(h) * 255); + } + + return d3_rgb(vv(h + 120), vv(h), vv(h - 120)); +} +function d3_selection(groups) { + d3_arraySubclass(groups, d3_selectionPrototype); + return groups; +} + +var d3_select = function(s, n) { return n.querySelector(s); }, + d3_selectAll = function(s, n) { return n.querySelectorAll(s); }, + d3_selectRoot = document.documentElement, + d3_selectMatcher = d3_selectRoot.matchesSelector || d3_selectRoot.webkitMatchesSelector || d3_selectRoot.mozMatchesSelector || d3_selectRoot.msMatchesSelector || d3_selectRoot.oMatchesSelector, + d3_selectMatches = function(n, s) { return d3_selectMatcher.call(n, s); }; + +// Prefer Sizzle, if available. +if (typeof Sizzle === "function") { + d3_select = function(s, n) { return Sizzle(s, n)[0]; }; + d3_selectAll = function(s, n) { return Sizzle.uniqueSort(Sizzle(s, n)); }; + d3_selectMatches = Sizzle.matchesSelector; +} + +var d3_selectionPrototype = []; + +d3.selection = function() { + return d3_selectionRoot; +}; + +d3.selection.prototype = d3_selectionPrototype; +d3_selectionPrototype.select = function(selector) { + var subgroups = [], + subgroup, + subnode, + group, + node; + + if (typeof selector !== "function") selector = d3_selection_selector(selector); + + for (var j = -1, m = this.length; ++j < m;) { + subgroups.push(subgroup = []); + subgroup.parentNode = (group = this[j]).parentNode; + for (var i = -1, n = group.length; ++i < n;) { + if (node = group[i]) { + subgroup.push(subnode = selector.call(node, node.__data__, i)); + if (subnode && "__data__" in node) subnode.__data__ = node.__data__; + } else { + subgroup.push(null); + } + } + } + + return d3_selection(subgroups); +}; + +function d3_selection_selector(selector) { + return function() { + return d3_select(selector, this); + }; +} +d3_selectionPrototype.selectAll = function(selector) { + var subgroups = [], + subgroup, + node; + + if (typeof selector !== "function") selector = d3_selection_selectorAll(selector); + + for (var j = -1, m = this.length; ++j < m;) { + for (var group = this[j], i = -1, n = group.length; ++i < n;) { + if (node = group[i]) { + subgroups.push(subgroup = d3_array(selector.call(node, node.__data__, i))); + subgroup.parentNode = node; + } + } + } + + return d3_selection(subgroups); +}; + +function d3_selection_selectorAll(selector) { + return function() { + return d3_selectAll(selector, this); + }; +} +d3_selectionPrototype.attr = function(name, value) { + name = d3.ns.qualify(name); + + // If no value is specified, return the first value. + if (arguments.length < 2) { + var node = this.node(); + return name.local + ? node.getAttributeNS(name.space, name.local) + : node.getAttribute(name); + } + + function attrNull() { + this.removeAttribute(name); + } + + function attrNullNS() { + this.removeAttributeNS(name.space, name.local); + } + + function attrConstant() { + this.setAttribute(name, value); + } + + function attrConstantNS() { + this.setAttributeNS(name.space, name.local, value); + } + + function attrFunction() { + var x = value.apply(this, arguments); + if (x == null) this.removeAttribute(name); + else this.setAttribute(name, x); + } + + function attrFunctionNS() { + var x = value.apply(this, arguments); + if (x == null) this.removeAttributeNS(name.space, name.local); + else this.setAttributeNS(name.space, name.local, x); + } + + return this.each(value == null + ? (name.local ? attrNullNS : attrNull) : (typeof value === "function" + ? (name.local ? attrFunctionNS : attrFunction) + : (name.local ? attrConstantNS : attrConstant))); +}; +d3_selectionPrototype.classed = function(name, value) { + var names = name.split(d3_selection_classedWhitespace), + n = names.length, + i = -1; + if (arguments.length > 1) { + while (++i < n) d3_selection_classed.call(this, names[i], value); + return this; + } else { + while (++i < n) if (!d3_selection_classed.call(this, names[i])) return false; + return true; + } +}; + +var d3_selection_classedWhitespace = /\s+/g; + +function d3_selection_classed(name, value) { + var re = new RegExp("(^|\\s+)" + d3.requote(name) + "(\\s+|$)", "g"); + + // If no value is specified, return the first value. + if (arguments.length < 2) { + var node = this.node(); + if (c = node.classList) return c.contains(name); + var c = node.className; + re.lastIndex = 0; + return re.test(c.baseVal != null ? c.baseVal : c); + } + + function classedAdd() { + if (c = this.classList) return c.add(name); + var c = this.className, + cb = c.baseVal != null, + cv = cb ? c.baseVal : c; + re.lastIndex = 0; + if (!re.test(cv)) { + cv = d3_collapse(cv + " " + name); + if (cb) c.baseVal = cv; + else this.className = cv; + } + } + + function classedRemove() { + if (c = this.classList) return c.remove(name); + var c = this.className, + cb = c.baseVal != null, + cv = cb ? c.baseVal : c; + cv = d3_collapse(cv.replace(re, " ")); + if (cb) c.baseVal = cv; + else this.className = cv; + } + + function classedFunction() { + (value.apply(this, arguments) + ? classedAdd + : classedRemove).call(this); + } + + return this.each(typeof value === "function" + ? classedFunction : value + ? classedAdd + : classedRemove); +} +d3_selectionPrototype.style = function(name, value, priority) { + if (arguments.length < 3) priority = ""; + + // If no value is specified, return the first value. + if (arguments.length < 2) return window + .getComputedStyle(this.node(), null) + .getPropertyValue(name); + + function styleNull() { + this.style.removeProperty(name); + } + + function styleConstant() { + this.style.setProperty(name, value, priority); + } + + function styleFunction() { + var x = value.apply(this, arguments); + if (x == null) this.style.removeProperty(name); + else this.style.setProperty(name, x, priority); + } + + return this.each(value == null + ? styleNull : (typeof value === "function" + ? styleFunction : styleConstant)); +}; +d3_selectionPrototype.property = function(name, value) { + + // If no value is specified, return the first value. + if (arguments.length < 2) return this.node()[name]; + + function propertyNull() { + delete this[name]; + } + + function propertyConstant() { + this[name] = value; + } + + function propertyFunction() { + var x = value.apply(this, arguments); + if (x == null) delete this[name]; + else this[name] = x; + } + + return this.each(value == null + ? propertyNull : (typeof value === "function" + ? propertyFunction : propertyConstant)); +}; +d3_selectionPrototype.text = function(value) { + return arguments.length < 1 + ? this.node().textContent : this.each(typeof value === "function" + ? function() { var v = value.apply(this, arguments); this.textContent = v == null ? "" : v; } : value == null + ? function() { this.textContent = ""; } + : function() { this.textContent = value; }); +}; +d3_selectionPrototype.html = function(value) { + return arguments.length < 1 + ? this.node().innerHTML : this.each(typeof value === "function" + ? function() { var v = value.apply(this, arguments); this.innerHTML = v == null ? "" : v; } : value == null + ? function() { this.innerHTML = ""; } + : function() { this.innerHTML = value; }); +}; +// TODO append(node)? +// TODO append(function)? +d3_selectionPrototype.append = function(name) { + name = d3.ns.qualify(name); + + function append() { + return this.appendChild(document.createElementNS(this.namespaceURI, name)); + } + + function appendNS() { + return this.appendChild(document.createElementNS(name.space, name.local)); + } + + return this.select(name.local ? appendNS : append); +}; +// TODO insert(node, function)? +// TODO insert(function, string)? +// TODO insert(function, function)? +d3_selectionPrototype.insert = function(name, before) { + name = d3.ns.qualify(name); + + function insert() { + return this.insertBefore( + document.createElementNS(this.namespaceURI, name), + d3_select(before, this)); + } + + function insertNS() { + return this.insertBefore( + document.createElementNS(name.space, name.local), + d3_select(before, this)); + } + + return this.select(name.local ? insertNS : insert); +}; +// TODO remove(selector)? +// TODO remove(node)? +// TODO remove(function)? +d3_selectionPrototype.remove = function() { + return this.each(function() { + var parent = this.parentNode; + if (parent) parent.removeChild(this); + }); +}; +// TODO data(null) for clearing data? +d3_selectionPrototype.data = function(data, join) { + var enter = [], + update = [], + exit = []; + + function bind(group, groupData) { + var i, + n = group.length, + m = groupData.length, + n0 = Math.min(n, m), + n1 = Math.max(n, m), + updateNodes = [], + enterNodes = [], + exitNodes = [], + node, + nodeData; + + if (join) { + var nodeByKey = {}, + keys = [], + key, + j = groupData.length; + + for (i = -1; ++i < n;) { + key = join.call(node = group[i], node.__data__, i); + if (key in nodeByKey) { + exitNodes[j++] = node; // duplicate key + } else { + nodeByKey[key] = node; + } + keys.push(key); + } + + for (i = -1; ++i < m;) { + node = nodeByKey[key = join.call(groupData, nodeData = groupData[i], i)]; + if (node) { + node.__data__ = nodeData; + updateNodes[i] = node; + enterNodes[i] = exitNodes[i] = null; + } else { + enterNodes[i] = d3_selection_dataNode(nodeData); + updateNodes[i] = exitNodes[i] = null; + } + delete nodeByKey[key]; + } + + for (i = -1; ++i < n;) { + if (keys[i] in nodeByKey) { + exitNodes[i] = group[i]; + } + } + } else { + for (i = -1; ++i < n0;) { + node = group[i]; + nodeData = groupData[i]; + if (node) { + node.__data__ = nodeData; + updateNodes[i] = node; + enterNodes[i] = exitNodes[i] = null; + } else { + enterNodes[i] = d3_selection_dataNode(nodeData); + updateNodes[i] = exitNodes[i] = null; + } + } + for (; i < m; ++i) { + enterNodes[i] = d3_selection_dataNode(groupData[i]); + updateNodes[i] = exitNodes[i] = null; + } + for (; i < n1; ++i) { + exitNodes[i] = group[i]; + enterNodes[i] = updateNodes[i] = null; + } + } + + enterNodes.update + = updateNodes; + + enterNodes.parentNode + = updateNodes.parentNode + = exitNodes.parentNode + = group.parentNode; + + enter.push(enterNodes); + update.push(updateNodes); + exit.push(exitNodes); + } + + var i = -1, + n = this.length, + group; + if (typeof data === "function") { + while (++i < n) { + bind(group = this[i], data.call(group, group.parentNode.__data__, i)); + } + } else { + while (++i < n) { + bind(group = this[i], data); + } + } + + var selection = d3_selection(update); + selection.enter = function() { return d3_selection_enter(enter); }; + selection.exit = function() { return d3_selection(exit); }; + return selection; +}; + +function d3_selection_dataNode(data) { + return {__data__: data}; +} +d3_selectionPrototype.filter = function(filter) { + var subgroups = [], + subgroup, + group, + node; + + if (typeof filter !== "function") filter = d3_selection_filter(filter); + + for (var j = 0, m = this.length; j < m; j++) { + subgroups.push(subgroup = []); + subgroup.parentNode = (group = this[j]).parentNode; + for (var i = 0, n = group.length; i < n; i++) { + if ((node = group[i]) && filter.call(node, node.__data__, i)) { + subgroup.push(node); + } + } + } + + return d3_selection(subgroups); +}; + +function d3_selection_filter(selector) { + return function() { + return d3_selectMatches(this, selector); + }; +} +d3_selectionPrototype.map = function(map) { + return this.each(function() { + this.__data__ = map.apply(this, arguments); + }); +}; +d3_selectionPrototype.order = function() { + for (var j = -1, m = this.length; ++j < m;) { + for (var group = this[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; +}; +d3_selectionPrototype.sort = function(comparator) { + comparator = d3_selection_sortComparator.apply(this, arguments); + for (var j = -1, m = this.length; ++j < m;) this[j].sort(comparator); + return this.order(); +}; + +function d3_selection_sortComparator(comparator) { + if (!arguments.length) comparator = d3.ascending; + return function(a, b) { + return comparator(a && a.__data__, b && b.__data__); + }; +} +// type can be namespaced, e.g., "click.foo" +// listener can be null for removal +d3_selectionPrototype.on = function(type, listener, capture) { + if (arguments.length < 3) capture = false; + + // parse the type specifier + var name = "__on" + type, i = type.indexOf("."); + if (i > 0) type = type.substring(0, i); + + // if called with only one argument, return the current listener + if (arguments.length < 2) return (i = this.node()[name]) && i._; + + // remove the old event listener, and add the new event listener + return this.each(function(d, i) { + var node = this; + + if (node[name]) node.removeEventListener(type, node[name], capture); + if (listener) node.addEventListener(type, node[name] = l, capture); + + // wrapped event listener that preserves i + function l(e) { + var o = d3.event; // Events can be reentrant (e.g., focus). + d3.event = e; + try { + listener.call(node, node.__data__, i); + } finally { + d3.event = o; + } + } + + // stash the unwrapped listener for retrieval + l._ = listener; + }); +}; +d3_selectionPrototype.each = function(callback) { + for (var j = -1, m = this.length; ++j < m;) { + for (var group = this[j], i = -1, n = group.length; ++i < n;) { + var node = group[i]; + if (node) callback.call(node, node.__data__, i, j); + } + } + return this; +}; +// +// Note: assigning to the arguments array simultaneously changes the value of +// the corresponding argument! +// +// TODO The `this` argument probably shouldn't be the first argument to the +// callback, anyway, since it's redundant. However, that will require a major +// version bump due to backwards compatibility, so I'm not changing it right +// away. +// +d3_selectionPrototype.call = function(callback) { + callback.apply(this, (arguments[0] = this, arguments)); + return this; +}; +d3_selectionPrototype.empty = function() { + return !this.node(); +}; +d3_selectionPrototype.node = function(callback) { + for (var j = 0, m = this.length; j < m; j++) { + for (var group = this[j], i = 0, n = group.length; i < n; i++) { + var node = group[i]; + if (node) return node; + } + } + return null; +}; +d3_selectionPrototype.transition = function() { + var subgroups = [], + subgroup, + node; + + for (var j = -1, m = this.length; ++j < m;) { + subgroups.push(subgroup = []); + for (var group = this[j], i = -1, n = group.length; ++i < n;) { + subgroup.push((node = group[i]) ? {node: node, delay: 0, duration: 250} : null); + } + } + + return d3_transition(subgroups, d3_transitionInheritId || ++d3_transitionId, Date.now()); +}; +var d3_selectionRoot = d3_selection([[document]]); + +d3_selectionRoot[0].parentNode = d3_selectRoot; + +// TODO fast singleton implementation! +// TODO select(function) +d3.select = function(selector) { + return typeof selector === "string" + ? d3_selectionRoot.select(selector) + : d3_selection([[selector]]); // assume node +}; + +// TODO selectAll(function) +d3.selectAll = function(selector) { + return typeof selector === "string" + ? d3_selectionRoot.selectAll(selector) + : d3_selection([d3_array(selector)]); // assume node[] +}; +function d3_selection_enter(selection) { + d3_arraySubclass(selection, d3_selection_enterPrototype); + return selection; +} + +var d3_selection_enterPrototype = []; + +d3_selection_enterPrototype.append = d3_selectionPrototype.append; +d3_selection_enterPrototype.insert = d3_selectionPrototype.insert; +d3_selection_enterPrototype.empty = d3_selectionPrototype.empty; +d3_selection_enterPrototype.node = d3_selectionPrototype.node; +d3_selection_enterPrototype.select = function(selector) { + var subgroups = [], + subgroup, + subnode, + upgroup, + group, + node; + + for (var j = -1, m = this.length; ++j < m;) { + upgroup = (group = this[j]).update; + subgroups.push(subgroup = []); + subgroup.parentNode = group.parentNode; + for (var i = -1, n = group.length; ++i < n;) { + if (node = group[i]) { + subgroup.push(upgroup[i] = subnode = selector.call(group.parentNode, node.__data__, i)); + subnode.__data__ = node.__data__; + } else { + subgroup.push(null); + } + } + } + + return d3_selection(subgroups); +}; +function d3_transition(groups, id, time) { + d3_arraySubclass(groups, d3_transitionPrototype); + + var tweens = {}, + event = d3.dispatch("start", "end"), + ease = d3_transitionEase; + + groups.id = id; + + groups.time = time; + + groups.tween = function(name, tween) { + if (arguments.length < 2) return tweens[name]; + if (tween == null) delete tweens[name]; + else tweens[name] = tween; + return groups; + }; + + groups.ease = function(value) { + if (!arguments.length) return ease; + ease = typeof value === "function" ? value : d3.ease.apply(d3, arguments); + return groups; + }; + + groups.each = function(type, listener) { + if (arguments.length < 2) return d3_transition_each.call(groups, type); + event.on(type, listener); + return groups; + }; + + d3.timer(function(elapsed) { + groups.each(function(d, i, j) { + var tweened = [], + node = this, + delay = groups[j][i].delay, + duration = groups[j][i].duration, + lock = node.__transition__ || (node.__transition__ = {active: 0, count: 0}); + + ++lock.count; + + delay <= elapsed ? start(elapsed) : d3.timer(start, delay, time); + + function start(elapsed) { + if (lock.active > id) return stop(); + lock.active = id; + + for (var tween in tweens) { + if (tween = tweens[tween].call(node, d, i)) { + tweened.push(tween); + } + } + + event.start.call(node, d, i); + if (!tick(elapsed)) d3.timer(tick, 0, time); + return 1; + } + + function tick(elapsed) { + if (lock.active !== id) return stop(); + + var t = (elapsed - delay) / duration, + e = ease(t), + n = tweened.length; + + while (n > 0) { + tweened[--n].call(node, e); + } + + if (t >= 1) { + stop(); + d3_transitionInheritId = id; + event.end.call(node, d, i); + d3_transitionInheritId = 0; + return 1; + } + } + + function stop() { + if (!--lock.count) delete node.__transition__; + return 1; + } + }); + return 1; + }, 0, time); + + return groups; +} + +var d3_transitionRemove = {}; + +function d3_transitionNull(d, i, a) { + return a != "" && d3_transitionRemove; +} + +function d3_transitionTween(name, b) { + var interpolate = d3_interpolateByName(name); + + function transitionFunction(d, i, a) { + var v = b.call(this, d, i); + return v == null + ? a != "" && d3_transitionRemove + : a != v && interpolate(a, v); + } + + function transitionString(d, i, a) { + return a != b && interpolate(a, b); + } + + return typeof b === "function" ? transitionFunction + : b == null ? d3_transitionNull + : (b += "", transitionString); +} + +var d3_transitionPrototype = [], + d3_transitionId = 0, + d3_transitionInheritId = 0, + d3_transitionEase = d3.ease("cubic-in-out"); + +d3_transitionPrototype.call = d3_selectionPrototype.call; + +d3.transition = function() { + return d3_selectionRoot.transition(); +}; + +d3.transition.prototype = d3_transitionPrototype; +d3_transitionPrototype.select = function(selector) { + var subgroups = [], + subgroup, + subnode, + node; + + if (typeof selector !== "function") selector = d3_selection_selector(selector); + + for (var j = -1, m = this.length; ++j < m;) { + subgroups.push(subgroup = []); + for (var group = this[j], i = -1, n = group.length; ++i < n;) { + if ((node = group[i]) && (subnode = selector.call(node.node, node.node.__data__, i))) { + if ("__data__" in node.node) subnode.__data__ = node.node.__data__; + subgroup.push({node: subnode, delay: node.delay, duration: node.duration}); + } else { + subgroup.push(null); + } + } + } + + return d3_transition(subgroups, this.id, this.time).ease(this.ease()); +}; +d3_transitionPrototype.selectAll = function(selector) { + var subgroups = [], + subgroup, + subnodes, + node; + + if (typeof selector !== "function") selector = d3_selection_selectorAll(selector); + + for (var j = -1, m = this.length; ++j < m;) { + for (var group = this[j], i = -1, n = group.length; ++i < n;) { + if (node = group[i]) { + subnodes = selector.call(node.node, node.node.__data__, i); + subgroups.push(subgroup = []); + for (var k = -1, o = subnodes.length; ++k < o;) { + subgroup.push({node: subnodes[k], delay: node.delay, duration: node.duration}); + } + } + } + } + + return d3_transition(subgroups, this.id, this.time).ease(this.ease()); +}; +d3_transitionPrototype.attr = function(name, value) { + return this.attrTween(name, d3_transitionTween(name, value)); +}; + +d3_transitionPrototype.attrTween = function(nameNS, tween) { + var name = d3.ns.qualify(nameNS); + + function attrTween(d, i) { + var f = tween.call(this, d, i, this.getAttribute(name)); + return f === d3_transitionRemove + ? (this.removeAttribute(name), null) + : f && function(t) { this.setAttribute(name, f(t)); }; + } + + function attrTweenNS(d, i) { + var f = tween.call(this, d, i, this.getAttributeNS(name.space, name.local)); + return f === d3_transitionRemove + ? (this.removeAttributeNS(name.space, name.local), null) + : f && function(t) { this.setAttributeNS(name.space, name.local, f(t)); }; + } + + return this.tween("attr." + nameNS, name.local ? attrTweenNS : attrTween); +}; +d3_transitionPrototype.style = function(name, value, priority) { + if (arguments.length < 3) priority = ""; + return this.styleTween(name, d3_transitionTween(name, value), priority); +}; + +d3_transitionPrototype.styleTween = function(name, tween, priority) { + if (arguments.length < 3) priority = ""; + return this.tween("style." + name, function(d, i) { + var f = tween.call(this, d, i, window.getComputedStyle(this, null).getPropertyValue(name)); + return f === d3_transitionRemove + ? (this.style.removeProperty(name), null) + : f && function(t) { this.style.setProperty(name, f(t), priority); }; + }); +}; +d3_transitionPrototype.text = function(value) { + return this.tween("text", function(d, i) { + this.textContent = typeof value === "function" + ? value.call(this, d, i) + : value; + }); +}; +d3_transitionPrototype.remove = function() { + return this.each("end.transition", function() { + var p; + if (!this.__transition__ && (p = this.parentNode)) p.removeChild(this); + }); +}; +d3_transitionPrototype.delay = function(value) { + var groups = this; + return groups.each(typeof value === "function" + ? function(d, i, j) { groups[j][i].delay = +value.apply(this, arguments); } + : (value = +value, function(d, i, j) { groups[j][i].delay = value; })); +}; +d3_transitionPrototype.duration = function(value) { + var groups = this; + return groups.each(typeof value === "function" + ? function(d, i, j) { groups[j][i].duration = +value.apply(this, arguments); } + : (value = +value, function(d, i, j) { groups[j][i].duration = value; })); +}; +function d3_transition_each(callback) { + for (var j = 0, m = this.length; j < m; j++) { + for (var group = this[j], i = 0, n = group.length; i < n; i++) { + var node = group[i]; + if (node) callback.call(node = node.node, node.__data__, i, j); + } + } + return this; +} +d3_transitionPrototype.transition = function() { + return this.select(d3_this); +}; +var d3_timer_queue = null, + d3_timer_interval, // is an interval (or frame) active? + d3_timer_timeout; // is a timeout active? + +// The timer will continue to fire until callback returns true. +d3.timer = function(callback, delay, then) { + var found = false, + t0, + t1 = d3_timer_queue; + + if (arguments.length < 3) { + if (arguments.length < 2) delay = 0; + else if (!isFinite(delay)) return; + then = Date.now(); + } + + // See if the callback's already in the queue. + while (t1) { + if (t1.callback === callback) { + t1.then = then; + t1.delay = delay; + found = true; + break; + } + t0 = t1; + t1 = t1.next; + } + + // Otherwise, add the callback to the queue. + if (!found) d3_timer_queue = { + callback: callback, + then: then, + delay: delay, + next: d3_timer_queue + }; + + // Start animatin'! + if (!d3_timer_interval) { + d3_timer_timeout = clearTimeout(d3_timer_timeout); + d3_timer_interval = 1; + d3_timer_frame(d3_timer_step); + } +} + +function d3_timer_step() { + var elapsed, + now = Date.now(), + t1 = d3_timer_queue; + + while (t1) { + elapsed = now - t1.then; + if (elapsed >= t1.delay) t1.flush = t1.callback(elapsed); + t1 = t1.next; + } + + var delay = d3_timer_flush() - now; + if (delay > 24) { + if (isFinite(delay)) { + clearTimeout(d3_timer_timeout); + d3_timer_timeout = setTimeout(d3_timer_step, delay); + } + d3_timer_interval = 0; + } else { + d3_timer_interval = 1; + d3_timer_frame(d3_timer_step); + } +} + +d3.timer.flush = function() { + var elapsed, + now = Date.now(), + t1 = d3_timer_queue; + + while (t1) { + elapsed = now - t1.then; + if (!t1.delay) t1.flush = t1.callback(elapsed); + t1 = t1.next; + } + + d3_timer_flush(); +}; + +// Flush after callbacks, to avoid concurrent queue modification. +function d3_timer_flush() { + var t0 = null, + t1 = d3_timer_queue, + then = Infinity; + while (t1) { + if (t1.flush) { + t1 = t0 ? t0.next = t1.next : d3_timer_queue = t1.next; + } else { + then = Math.min(then, t1.then + t1.delay); + t1 = (t0 = t1).next; + } + } + return then; +} + +var d3_timer_frame = window.requestAnimationFrame + || window.webkitRequestAnimationFrame + || window.mozRequestAnimationFrame + || window.oRequestAnimationFrame + || window.msRequestAnimationFrame + || function(callback) { setTimeout(callback, 17); }; +d3.transform = function(string) { + var g = document.createElementNS(d3.ns.prefix.svg, "g"), + identity = {a: 1, b: 0, c: 0, d: 1, e: 0, f: 0}; + return (d3.transform = function(string) { + g.setAttribute("transform", string); + var t = g.transform.baseVal.consolidate(); + return new d3_transform(t ? t.matrix : identity); + })(string); +}; + +// Compute x-scale and normalize the first row. +// Compute shear and make second row orthogonal to first. +// Compute y-scale and normalize the second row. +// Finally, compute the rotation. +function d3_transform(m) { + var r0 = [m.a, m.b], + r1 = [m.c, m.d], + kx = d3_transformNormalize(r0), + kz = d3_transformDot(r0, r1), + ky = d3_transformNormalize(d3_transformCombine(r1, r0, -kz)) || 0; + if (r0[0] * r1[1] < r1[0] * r0[1]) { + r0[0] *= -1; + r0[1] *= -1; + kx *= -1; + kz *= -1; + } + this.rotate = (kx ? Math.atan2(r0[1], r0[0]) : Math.atan2(-r1[0], r1[1])) * d3_transformDegrees; + this.translate = [m.e, m.f]; + this.scale = [kx, ky]; + this.skew = ky ? Math.atan2(kz, ky) * d3_transformDegrees : 0; +}; + +d3_transform.prototype.toString = function() { + return "translate(" + this.translate + + ")rotate(" + this.rotate + + ")skewX(" + this.skew + + ")scale(" + this.scale + + ")"; +}; + +function d3_transformDot(a, b) { + return a[0] * b[0] + a[1] * b[1]; +} + +function d3_transformNormalize(a) { + var k = Math.sqrt(d3_transformDot(a, a)); + if (k) { + a[0] /= k; + a[1] /= k; + } + return k; +} + +function d3_transformCombine(a, b, k) { + a[0] += k * b[0]; + a[1] += k * b[1]; + return a; +} + +var d3_transformDegrees = 180 / Math.PI; +function d3_noop() {} +d3.scale = {}; + +function d3_scaleExtent(domain) { + var start = domain[0], stop = domain[domain.length - 1]; + return start < stop ? [start, stop] : [stop, start]; +} + +function d3_scaleRange(scale) { + return scale.rangeExtent ? scale.rangeExtent() : d3_scaleExtent(scale.range()); +} +function d3_scale_nice(domain, nice) { + var i0 = 0, + i1 = domain.length - 1, + x0 = domain[i0], + x1 = domain[i1], + dx; + + if (x1 < x0) { + dx = i0; i0 = i1; i1 = dx; + dx = x0; x0 = x1; x1 = dx; + } + + if (dx = x1 - x0) { + nice = nice(dx); + domain[i0] = nice.floor(x0); + domain[i1] = nice.ceil(x1); + } + + return domain; +} + +function d3_scale_niceDefault() { + return Math; +} +d3.scale.linear = function() { + return d3_scale_linear([0, 1], [0, 1], d3.interpolate, false); +}; + +function d3_scale_linear(domain, range, interpolate, clamp) { + var output, + input; + + function rescale() { + var linear = Math.min(domain.length, range.length) > 2 ? d3_scale_polylinear : d3_scale_bilinear, + uninterpolate = clamp ? d3_uninterpolateClamp : d3_uninterpolateNumber; + output = linear(domain, range, uninterpolate, interpolate); + input = linear(range, domain, uninterpolate, d3.interpolate); + return scale; + } + + function scale(x) { + return output(x); + } + + // Note: requires range is coercible to number! + scale.invert = function(y) { + return input(y); + }; + + scale.domain = function(x) { + if (!arguments.length) return domain; + domain = x.map(Number); + return rescale(); + }; + + scale.range = function(x) { + if (!arguments.length) return range; + range = x; + return rescale(); + }; + + scale.rangeRound = function(x) { + return scale.range(x).interpolate(d3.interpolateRound); + }; + + scale.clamp = function(x) { + if (!arguments.length) return clamp; + clamp = x; + return rescale(); + }; + + scale.interpolate = function(x) { + if (!arguments.length) return interpolate; + interpolate = x; + return rescale(); + }; + + scale.ticks = function(m) { + return d3_scale_linearTicks(domain, m); + }; + + scale.tickFormat = function(m) { + return d3_scale_linearTickFormat(domain, m); + }; + + scale.nice = function() { + d3_scale_nice(domain, d3_scale_linearNice); + return rescale(); + }; + + scale.copy = function() { + return d3_scale_linear(domain, range, interpolate, clamp); + }; + + return rescale(); +} + +function d3_scale_linearRebind(scale, linear) { + return d3.rebind(scale, linear, "range", "rangeRound", "interpolate", "clamp"); +} + +function d3_scale_linearNice(dx) { + dx = Math.pow(10, Math.round(Math.log(dx) / Math.LN10) - 1); + return { + floor: function(x) { return Math.floor(x / dx) * dx; }, + ceil: function(x) { return Math.ceil(x / dx) * dx; } + }; +} + +function d3_scale_linearTickRange(domain, m) { + var extent = d3_scaleExtent(domain), + span = extent[1] - extent[0], + step = Math.pow(10, Math.floor(Math.log(span / m) / Math.LN10)), + err = m / span * step; + + // Filter ticks to get closer to the desired count. + if (err <= .15) step *= 10; + else if (err <= .35) step *= 5; + else if (err <= .75) step *= 2; + + // Round start and stop values to step interval. + extent[0] = Math.ceil(extent[0] / step) * step; + extent[1] = Math.floor(extent[1] / step) * step + step * .5; // inclusive + extent[2] = step; + return extent; +} + +function d3_scale_linearTicks(domain, m) { + return d3.range.apply(d3, d3_scale_linearTickRange(domain, m)); +} + +function d3_scale_linearTickFormat(domain, m) { + return d3.format(",." + Math.max(0, -Math.floor(Math.log(d3_scale_linearTickRange(domain, m)[2]) / Math.LN10 + .01)) + "f"); +} +function d3_scale_bilinear(domain, range, uninterpolate, interpolate) { + var u = uninterpolate(domain[0], domain[1]), + i = interpolate(range[0], range[1]); + return function(x) { + return i(u(x)); + }; +} +function d3_scale_polylinear(domain, range, uninterpolate, interpolate) { + var u = [], + i = [], + j = 0, + k = Math.min(domain.length, range.length) - 1; + + // Handle descending domains. + if (domain[k] < domain[0]) { + domain = domain.slice().reverse(); + range = range.slice().reverse(); + } + + while (++j <= k) { + u.push(uninterpolate(domain[j - 1], domain[j])); + i.push(interpolate(range[j - 1], range[j])); + } + + return function(x) { + var j = d3.bisect(domain, x, 1, k) - 1; + return i[j](u[j](x)); + }; +} +d3.scale.log = function() { + return d3_scale_log(d3.scale.linear(), d3_scale_logp); +}; + +function d3_scale_log(linear, log) { + var pow = log.pow; + + function scale(x) { + return linear(log(x)); + } + + scale.invert = function(x) { + return pow(linear.invert(x)); + }; + + scale.domain = function(x) { + if (!arguments.length) return linear.domain().map(pow); + log = x[0] < 0 ? d3_scale_logn : d3_scale_logp; + pow = log.pow; + linear.domain(x.map(log)); + return scale; + }; + + scale.nice = function() { + linear.domain(d3_scale_nice(linear.domain(), d3_scale_niceDefault)); + return scale; + }; + + scale.ticks = function() { + var extent = d3_scaleExtent(linear.domain()), + ticks = []; + if (extent.every(isFinite)) { + var i = Math.floor(extent[0]), + j = Math.ceil(extent[1]), + u = pow(extent[0]), + v = pow(extent[1]); + if (log === d3_scale_logn) { + ticks.push(pow(i)); + for (; i++ < j;) for (var k = 9; k > 0; k--) ticks.push(pow(i) * k); + } else { + for (; i < j; i++) for (var k = 1; k < 10; k++) ticks.push(pow(i) * k); + ticks.push(pow(i)); + } + for (i = 0; ticks[i] < u; i++) {} // strip small values + for (j = ticks.length; ticks[j - 1] > v; j--) {} // strip big values + ticks = ticks.slice(i, j); + } + return ticks; + }; + + scale.tickFormat = function(n, format) { + if (arguments.length < 2) format = d3_scale_logFormat; + if (arguments.length < 1) return format; + var k = n / scale.ticks().length, + f = log === d3_scale_logn ? (e = -1e-12, Math.floor) : (e = 1e-12, Math.ceil), + e; + return function(d) { + return d / pow(f(log(d) + e)) < k ? format(d) : ""; + }; + }; + + scale.copy = function() { + return d3_scale_log(linear.copy(), log); + }; + + return d3_scale_linearRebind(scale, linear); +} + +var d3_scale_logFormat = d3.format(".0e"); + +function d3_scale_logp(x) { + return Math.log(x < 0 ? 0 : x) / Math.LN10; +} + +function d3_scale_logn(x) { + return -Math.log(x > 0 ? 0 : -x) / Math.LN10; +} + +d3_scale_logp.pow = function(x) { + return Math.pow(10, x); +}; + +d3_scale_logn.pow = function(x) { + return -Math.pow(10, -x); +}; +d3.scale.pow = function() { + return d3_scale_pow(d3.scale.linear(), 1); +}; + +function d3_scale_pow(linear, exponent) { + var powp = d3_scale_powPow(exponent), + powb = d3_scale_powPow(1 / exponent); + + function scale(x) { + return linear(powp(x)); + } + + scale.invert = function(x) { + return powb(linear.invert(x)); + }; + + scale.domain = function(x) { + if (!arguments.length) return linear.domain().map(powb); + linear.domain(x.map(powp)); + return scale; + }; + + scale.ticks = function(m) { + return d3_scale_linearTicks(scale.domain(), m); + }; + + scale.tickFormat = function(m) { + return d3_scale_linearTickFormat(scale.domain(), m); + }; + + scale.nice = function() { + return scale.domain(d3_scale_nice(scale.domain(), d3_scale_linearNice)); + }; + + scale.exponent = function(x) { + if (!arguments.length) return exponent; + var domain = scale.domain(); + powp = d3_scale_powPow(exponent = x); + powb = d3_scale_powPow(1 / exponent); + return scale.domain(domain); + }; + + scale.copy = function() { + return d3_scale_pow(linear.copy(), exponent); + }; + + return d3_scale_linearRebind(scale, linear); +} + +function d3_scale_powPow(e) { + return function(x) { + return x < 0 ? -Math.pow(-x, e) : Math.pow(x, e); + }; +} +d3.scale.sqrt = function() { + return d3.scale.pow().exponent(.5); +}; +d3.scale.ordinal = function() { + return d3_scale_ordinal([], {t: "range", x: []}); +}; + +function d3_scale_ordinal(domain, ranger) { + var index, + range, + rangeBand; + + function scale(x) { + return range[((index[x] || (index[x] = domain.push(x))) - 1) % range.length]; + } + + function steps(start, step) { + return d3.range(domain.length).map(function(i) { return start + step * i; }); + } + + scale.domain = function(x) { + if (!arguments.length) return domain; + domain = []; + index = {}; + var i = -1, n = x.length, xi; + while (++i < n) if (!index[xi = x[i]]) index[xi] = domain.push(xi); + return scale[ranger.t](ranger.x, ranger.p); + }; + + scale.range = function(x) { + if (!arguments.length) return range; + range = x; + rangeBand = 0; + ranger = {t: "range", x: x}; + return scale; + }; + + scale.rangePoints = function(x, padding) { + if (arguments.length < 2) padding = 0; + var start = x[0], + stop = x[1], + step = (stop - start) / (domain.length - 1 + padding); + range = steps(domain.length < 2 ? (start + stop) / 2 : start + step * padding / 2, step); + rangeBand = 0; + ranger = {t: "rangePoints", x: x, p: padding}; + return scale; + }; + + scale.rangeBands = function(x, padding) { + if (arguments.length < 2) padding = 0; + var start = x[0], + stop = x[1], + step = (stop - start) / (domain.length + padding); + range = steps(start + step * padding, step); + rangeBand = step * (1 - padding); + ranger = {t: "rangeBands", x: x, p: padding}; + return scale; + }; + + scale.rangeRoundBands = function(x, padding) { + if (arguments.length < 2) padding = 0; + var start = x[0], + stop = x[1], + step = Math.floor((stop - start) / (domain.length + padding)); + range = steps(start + Math.round((stop - start - (domain.length - padding) * step) / 2), step); + rangeBand = Math.round(step * (1 - padding)); + ranger = {t: "rangeRoundBands", x: x, p: padding}; + return scale; + }; + + scale.rangeBand = function() { + return rangeBand; + }; + + scale.rangeExtent = function() { + return ranger.t === "range" ? d3_scaleExtent(ranger.x) : ranger.x; + }; + + scale.copy = function() { + return d3_scale_ordinal(domain, ranger); + }; + + return scale.domain(domain); +} +/* + * This product includes color specifications and designs developed by Cynthia + * Brewer (http://colorbrewer.org/). See lib/colorbrewer for more information. + */ + +d3.scale.category10 = function() { + return d3.scale.ordinal().range(d3_category10); +}; + +d3.scale.category20 = function() { + return d3.scale.ordinal().range(d3_category20); +}; + +d3.scale.category20b = function() { + return d3.scale.ordinal().range(d3_category20b); +}; + +d3.scale.category20c = function() { + return d3.scale.ordinal().range(d3_category20c); +}; + +var d3_category10 = [ + "#1f77b4", "#ff7f0e", "#2ca02c", "#d62728", "#9467bd", + "#8c564b", "#e377c2", "#7f7f7f", "#bcbd22", "#17becf" +]; + +var d3_category20 = [ + "#1f77b4", "#aec7e8", + "#ff7f0e", "#ffbb78", + "#2ca02c", "#98df8a", + "#d62728", "#ff9896", + "#9467bd", "#c5b0d5", + "#8c564b", "#c49c94", + "#e377c2", "#f7b6d2", + "#7f7f7f", "#c7c7c7", + "#bcbd22", "#dbdb8d", + "#17becf", "#9edae5" +]; + +var d3_category20b = [ + "#393b79", "#5254a3", "#6b6ecf", "#9c9ede", + "#637939", "#8ca252", "#b5cf6b", "#cedb9c", + "#8c6d31", "#bd9e39", "#e7ba52", "#e7cb94", + "#843c39", "#ad494a", "#d6616b", "#e7969c", + "#7b4173", "#a55194", "#ce6dbd", "#de9ed6" +]; + +var d3_category20c = [ + "#3182bd", "#6baed6", "#9ecae1", "#c6dbef", + "#e6550d", "#fd8d3c", "#fdae6b", "#fdd0a2", + "#31a354", "#74c476", "#a1d99b", "#c7e9c0", + "#756bb1", "#9e9ac8", "#bcbddc", "#dadaeb", + "#636363", "#969696", "#bdbdbd", "#d9d9d9" +]; +d3.scale.quantile = function() { + return d3_scale_quantile([], []); +}; + +function d3_scale_quantile(domain, range) { + var thresholds; + + function rescale() { + var k = 0, + n = domain.length, + q = range.length; + thresholds = []; + while (++k < q) thresholds[k - 1] = d3.quantile(domain, k / q); + return scale; + } + + function scale(x) { + if (isNaN(x = +x)) return NaN; + return range[d3.bisect(thresholds, x)]; + } + + scale.domain = function(x) { + if (!arguments.length) return domain; + domain = x.filter(function(d) { return !isNaN(d); }).sort(d3.ascending); + return rescale(); + }; + + scale.range = function(x) { + if (!arguments.length) return range; + range = x; + return rescale(); + }; + + scale.quantiles = function() { + return thresholds; + }; + + scale.copy = function() { + return d3_scale_quantile(domain, range); // copy on write! + }; + + return rescale(); +} +d3.scale.quantize = function() { + return d3_scale_quantize(0, 1, [0, 1]); +}; + +function d3_scale_quantize(x0, x1, range) { + var kx, i; + + function scale(x) { + return range[Math.max(0, Math.min(i, Math.floor(kx * (x - x0))))]; + } + + function rescale() { + kx = range.length / (x1 - x0); + i = range.length - 1; + return scale; + } + + scale.domain = function(x) { + if (!arguments.length) return [x0, x1]; + x0 = +x[0]; + x1 = +x[x.length - 1]; + return rescale(); + }; + + scale.range = function(x) { + if (!arguments.length) return range; + range = x; + return rescale(); + }; + + scale.copy = function() { + return d3_scale_quantize(x0, x1, range); // copy on write + }; + + return rescale(); +} +d3.svg = {}; +d3.svg.arc = function() { + var innerRadius = d3_svg_arcInnerRadius, + outerRadius = d3_svg_arcOuterRadius, + startAngle = d3_svg_arcStartAngle, + endAngle = d3_svg_arcEndAngle; + + function arc() { + var r0 = innerRadius.apply(this, arguments), + r1 = outerRadius.apply(this, arguments), + a0 = startAngle.apply(this, arguments) + d3_svg_arcOffset, + a1 = endAngle.apply(this, arguments) + d3_svg_arcOffset, + da = (a1 < a0 && (da = a0, a0 = a1, a1 = da), a1 - a0), + df = da < Math.PI ? "0" : "1", + c0 = Math.cos(a0), + s0 = Math.sin(a0), + c1 = Math.cos(a1), + s1 = Math.sin(a1); + return da >= d3_svg_arcMax + ? (r0 + ? "M0," + r1 + + "A" + r1 + "," + r1 + " 0 1,1 0," + (-r1) + + "A" + r1 + "," + r1 + " 0 1,1 0," + r1 + + "M0," + r0 + + "A" + r0 + "," + r0 + " 0 1,0 0," + (-r0) + + "A" + r0 + "," + r0 + " 0 1,0 0," + r0 + + "Z" + : "M0," + r1 + + "A" + r1 + "," + r1 + " 0 1,1 0," + (-r1) + + "A" + r1 + "," + r1 + " 0 1,1 0," + r1 + + "Z") + : (r0 + ? "M" + r1 * c0 + "," + r1 * s0 + + "A" + r1 + "," + r1 + " 0 " + df + ",1 " + r1 * c1 + "," + r1 * s1 + + "L" + r0 * c1 + "," + r0 * s1 + + "A" + r0 + "," + r0 + " 0 " + df + ",0 " + r0 * c0 + "," + r0 * s0 + + "Z" + : "M" + r1 * c0 + "," + r1 * s0 + + "A" + r1 + "," + r1 + " 0 " + df + ",1 " + r1 * c1 + "," + r1 * s1 + + "L0,0" + + "Z"); + } + + arc.innerRadius = function(v) { + if (!arguments.length) return innerRadius; + innerRadius = d3.functor(v); + return arc; + }; + + arc.outerRadius = function(v) { + if (!arguments.length) return outerRadius; + outerRadius = d3.functor(v); + return arc; + }; + + arc.startAngle = function(v) { + if (!arguments.length) return startAngle; + startAngle = d3.functor(v); + return arc; + }; + + arc.endAngle = function(v) { + if (!arguments.length) return endAngle; + endAngle = d3.functor(v); + return arc; + }; + + arc.centroid = function() { + var r = (innerRadius.apply(this, arguments) + + outerRadius.apply(this, arguments)) / 2, + a = (startAngle.apply(this, arguments) + + endAngle.apply(this, arguments)) / 2 + d3_svg_arcOffset; + return [Math.cos(a) * r, Math.sin(a) * r]; + }; + + return arc; +}; + +var d3_svg_arcOffset = -Math.PI / 2, + d3_svg_arcMax = 2 * Math.PI - 1e-6; + +function d3_svg_arcInnerRadius(d) { + return d.innerRadius; +} + +function d3_svg_arcOuterRadius(d) { + return d.outerRadius; +} + +function d3_svg_arcStartAngle(d) { + return d.startAngle; +} + +function d3_svg_arcEndAngle(d) { + return d.endAngle; +} +function d3_svg_line(projection) { + var x = d3_svg_lineX, + y = d3_svg_lineY, + interpolate = "linear", + interpolator = d3_svg_lineInterpolators[interpolate], + tension = .7; + + function line(d) { + return d.length < 1 ? null : "M" + interpolator(projection(d3_svg_linePoints(this, d, x, y)), tension); + } + + line.x = function(v) { + if (!arguments.length) return x; + x = v; + return line; + }; + + line.y = function(v) { + if (!arguments.length) return y; + y = v; + return line; + }; + + line.interpolate = function(v) { + if (!arguments.length) return interpolate; + interpolator = d3_svg_lineInterpolators[interpolate = v]; + return line; + }; + + line.tension = function(v) { + if (!arguments.length) return tension; + tension = v; + return line; + }; + + return line; +} + +d3.svg.line = function() { + return d3_svg_line(Object); +}; + +// Converts the specified array of data into an array of points +// (x-y tuples), by evaluating the specified `x` and `y` functions on each +// data point. The `this` context of the evaluated functions is the specified +// "self" object; each function is passed the current datum and index. +function d3_svg_linePoints(self, d, x, y) { + var points = [], + i = -1, + n = d.length, + fx = typeof x === "function", + fy = typeof y === "function", + value; + if (fx && fy) { + while (++i < n) points.push([ + x.call(self, value = d[i], i), + y.call(self, value, i) + ]); + } else if (fx) { + while (++i < n) points.push([x.call(self, d[i], i), y]); + } else if (fy) { + while (++i < n) points.push([x, y.call(self, d[i], i)]); + } else { + while (++i < n) points.push([x, y]); + } + return points; +} + +// The default `x` property, which references d[0]. +function d3_svg_lineX(d) { + return d[0]; +} + +// The default `y` property, which references d[1]. +function d3_svg_lineY(d) { + return d[1]; +} + +// The various interpolators supported by the `line` class. +var d3_svg_lineInterpolators = { + "linear": d3_svg_lineLinear, + "step-before": d3_svg_lineStepBefore, + "step-after": d3_svg_lineStepAfter, + "basis": d3_svg_lineBasis, + "basis-open": d3_svg_lineBasisOpen, + "basis-closed": d3_svg_lineBasisClosed, + "bundle": d3_svg_lineBundle, + "cardinal": d3_svg_lineCardinal, + "cardinal-open": d3_svg_lineCardinalOpen, + "cardinal-closed": d3_svg_lineCardinalClosed, + "monotone": d3_svg_lineMonotone +}; + +// Linear interpolation; generates "L" commands. +function d3_svg_lineLinear(points) { + var i = 0, + n = points.length, + p = points[0], + path = [p[0], ",", p[1]]; + while (++i < n) path.push("L", (p = points[i])[0], ",", p[1]); + return path.join(""); +} + +// Step interpolation; generates "H" and "V" commands. +function d3_svg_lineStepBefore(points) { + var i = 0, + n = points.length, + p = points[0], + path = [p[0], ",", p[1]]; + while (++i < n) path.push("V", (p = points[i])[1], "H", p[0]); + return path.join(""); +} + +// Step interpolation; generates "H" and "V" commands. +function d3_svg_lineStepAfter(points) { + var i = 0, + n = points.length, + p = points[0], + path = [p[0], ",", p[1]]; + while (++i < n) path.push("H", (p = points[i])[0], "V", p[1]); + return path.join(""); +} + +// Open cardinal spline interpolation; generates "C" commands. +function d3_svg_lineCardinalOpen(points, tension) { + return points.length < 4 + ? d3_svg_lineLinear(points) + : points[1] + d3_svg_lineHermite(points.slice(1, points.length - 1), + d3_svg_lineCardinalTangents(points, tension)); +} + +// Closed cardinal spline interpolation; generates "C" commands. +function d3_svg_lineCardinalClosed(points, tension) { + return points.length < 3 + ? d3_svg_lineLinear(points) + : points[0] + d3_svg_lineHermite((points.push(points[0]), points), + d3_svg_lineCardinalTangents([points[points.length - 2]] + .concat(points, [points[1]]), tension)); +} + +// Cardinal spline interpolation; generates "C" commands. +function d3_svg_lineCardinal(points, tension, closed) { + return points.length < 3 + ? d3_svg_lineLinear(points) + : points[0] + d3_svg_lineHermite(points, + d3_svg_lineCardinalTangents(points, tension)); +} + +// Hermite spline construction; generates "C" commands. +function d3_svg_lineHermite(points, tangents) { + if (tangents.length < 1 + || (points.length != tangents.length + && points.length != tangents.length + 2)) { + return d3_svg_lineLinear(points); + } + + var quad = points.length != tangents.length, + path = "", + p0 = points[0], + p = points[1], + t0 = tangents[0], + t = t0, + pi = 1; + + if (quad) { + path += "Q" + (p[0] - t0[0] * 2 / 3) + "," + (p[1] - t0[1] * 2 / 3) + + "," + p[0] + "," + p[1]; + p0 = points[1]; + pi = 2; + } + + if (tangents.length > 1) { + t = tangents[1]; + p = points[pi]; + pi++; + path += "C" + (p0[0] + t0[0]) + "," + (p0[1] + t0[1]) + + "," + (p[0] - t[0]) + "," + (p[1] - t[1]) + + "," + p[0] + "," + p[1]; + for (var i = 2; i < tangents.length; i++, pi++) { + p = points[pi]; + t = tangents[i]; + path += "S" + (p[0] - t[0]) + "," + (p[1] - t[1]) + + "," + p[0] + "," + p[1]; + } + } + + if (quad) { + var lp = points[pi]; + path += "Q" + (p[0] + t[0] * 2 / 3) + "," + (p[1] + t[1] * 2 / 3) + + "," + lp[0] + "," + lp[1]; + } + + return path; +} + +// Generates tangents for a cardinal spline. +function d3_svg_lineCardinalTangents(points, tension) { + var tangents = [], + a = (1 - tension) / 2, + p0, + p1 = points[0], + p2 = points[1], + i = 1, + n = points.length; + while (++i < n) { + p0 = p1; + p1 = p2; + p2 = points[i]; + tangents.push([a * (p2[0] - p0[0]), a * (p2[1] - p0[1])]); + } + return tangents; +} + +// B-spline interpolation; generates "C" commands. +function d3_svg_lineBasis(points) { + if (points.length < 3) return d3_svg_lineLinear(points); + var i = 1, + n = points.length, + pi = points[0], + x0 = pi[0], + y0 = pi[1], + px = [x0, x0, x0, (pi = points[1])[0]], + py = [y0, y0, y0, pi[1]], + path = [x0, ",", y0]; + d3_svg_lineBasisBezier(path, px, py); + while (++i < n) { + pi = points[i]; + px.shift(); px.push(pi[0]); + py.shift(); py.push(pi[1]); + d3_svg_lineBasisBezier(path, px, py); + } + i = -1; + while (++i < 2) { + px.shift(); px.push(pi[0]); + py.shift(); py.push(pi[1]); + d3_svg_lineBasisBezier(path, px, py); + } + return path.join(""); +} + +// Open B-spline interpolation; generates "C" commands. +function d3_svg_lineBasisOpen(points) { + if (points.length < 4) return d3_svg_lineLinear(points); + var path = [], + i = -1, + n = points.length, + pi, + px = [0], + py = [0]; + while (++i < 3) { + pi = points[i]; + px.push(pi[0]); + py.push(pi[1]); + } + path.push(d3_svg_lineDot4(d3_svg_lineBasisBezier3, px) + + "," + d3_svg_lineDot4(d3_svg_lineBasisBezier3, py)); + --i; while (++i < n) { + pi = points[i]; + px.shift(); px.push(pi[0]); + py.shift(); py.push(pi[1]); + d3_svg_lineBasisBezier(path, px, py); + } + return path.join(""); +} + +// Closed B-spline interpolation; generates "C" commands. +function d3_svg_lineBasisClosed(points) { + var path, + i = -1, + n = points.length, + m = n + 4, + pi, + px = [], + py = []; + while (++i < 4) { + pi = points[i % n]; + px.push(pi[0]); + py.push(pi[1]); + } + path = [ + d3_svg_lineDot4(d3_svg_lineBasisBezier3, px), ",", + d3_svg_lineDot4(d3_svg_lineBasisBezier3, py) + ]; + --i; while (++i < m) { + pi = points[i % n]; + px.shift(); px.push(pi[0]); + py.shift(); py.push(pi[1]); + d3_svg_lineBasisBezier(path, px, py); + } + return path.join(""); +} + +function d3_svg_lineBundle(points, tension) { + var n = points.length - 1, + x0 = points[0][0], + y0 = points[0][1], + dx = points[n][0] - x0, + dy = points[n][1] - y0, + i = -1, + p, + t; + while (++i <= n) { + p = points[i]; + t = i / n; + p[0] = tension * p[0] + (1 - tension) * (x0 + t * dx); + p[1] = tension * p[1] + (1 - tension) * (y0 + t * dy); + } + return d3_svg_lineBasis(points); +} + +// Returns the dot product of the given four-element vectors. +function d3_svg_lineDot4(a, b) { + return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3]; +} + +// Matrix to transform basis (b-spline) control points to bezier +// control points. Derived from FvD 11.2.8. +var d3_svg_lineBasisBezier1 = [0, 2/3, 1/3, 0], + d3_svg_lineBasisBezier2 = [0, 1/3, 2/3, 0], + d3_svg_lineBasisBezier3 = [0, 1/6, 2/3, 1/6]; + +// Pushes a "C" Bézier curve onto the specified path array, given the +// two specified four-element arrays which define the control points. +function d3_svg_lineBasisBezier(path, x, y) { + path.push( + "C", d3_svg_lineDot4(d3_svg_lineBasisBezier1, x), + ",", d3_svg_lineDot4(d3_svg_lineBasisBezier1, y), + ",", d3_svg_lineDot4(d3_svg_lineBasisBezier2, x), + ",", d3_svg_lineDot4(d3_svg_lineBasisBezier2, y), + ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, x), + ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, y)); +} + +// Computes the slope from points p0 to p1. +function d3_svg_lineSlope(p0, p1) { + return (p1[1] - p0[1]) / (p1[0] - p0[0]); +} + +// Compute three-point differences for the given points. +// http://en.wikipedia.org/wiki/Cubic_Hermite_spline#Finite_difference +function d3_svg_lineFiniteDifferences(points) { + var i = 0, + j = points.length - 1, + m = [], + p0 = points[0], + p1 = points[1], + d = m[0] = d3_svg_lineSlope(p0, p1); + while (++i < j) { + m[i] = d + (d = d3_svg_lineSlope(p0 = p1, p1 = points[i + 1])); + } + m[i] = d; + return m; +} + +// Interpolates the given points using Fritsch-Carlson Monotone cubic Hermite +// interpolation. Returns an array of tangent vectors. For details, see +// http://en.wikipedia.org/wiki/Monotone_cubic_interpolation +function d3_svg_lineMonotoneTangents(points) { + var tangents = [], + d, + a, + b, + s, + m = d3_svg_lineFiniteDifferences(points), + i = -1, + j = points.length - 1; + + // The first two steps are done by computing finite-differences: + // 1. Compute the slopes of the secant lines between successive points. + // 2. Initialize the tangents at every point as the average of the secants. + + // Then, for each segment… + while (++i < j) { + d = d3_svg_lineSlope(points[i], points[i + 1]); + + // 3. If two successive yk = y{k + 1} are equal (i.e., d is zero), then set + // mk = m{k + 1} = 0 as the spline connecting these points must be flat to + // preserve monotonicity. Ignore step 4 and 5 for those k. + + if (Math.abs(d) < 1e-6) { + m[i] = m[i + 1] = 0; + } else { + // 4. Let ak = mk / dk and bk = m{k + 1} / dk. + a = m[i] / d; + b = m[i + 1] / d; + + // 5. Prevent overshoot and ensure monotonicity by restricting the + // magnitude of vector to a circle of radius 3. + s = a * a + b * b; + if (s > 9) { + s = d * 3 / Math.sqrt(s); + m[i] = s * a; + m[i + 1] = s * b; + } + } + } + + // Compute the normalized tangent vector from the slopes. Note that if x is + // not monotonic, it's possible that the slope will be infinite, so we protect + // against NaN by setting the coordinate to zero. + i = -1; while (++i <= j) { + s = (points[Math.min(j, i + 1)][0] - points[Math.max(0, i - 1)][0]) + / (6 * (1 + m[i] * m[i])); + tangents.push([s || 0, m[i] * s || 0]); + } + + return tangents; +} + +function d3_svg_lineMonotone(points) { + return points.length < 3 + ? d3_svg_lineLinear(points) + : points[0] + + d3_svg_lineHermite(points, d3_svg_lineMonotoneTangents(points)); +} +d3.svg.line.radial = function() { + var line = d3_svg_line(d3_svg_lineRadial); + line.radius = line.x, delete line.x; + line.angle = line.y, delete line.y; + return line; +}; + +function d3_svg_lineRadial(points) { + var point, + i = -1, + n = points.length, + r, + a; + while (++i < n) { + point = points[i]; + r = point[0]; + a = point[1] + d3_svg_arcOffset; + point[0] = r * Math.cos(a); + point[1] = r * Math.sin(a); + } + return points; +} +function d3_svg_area(projection) { + var x0 = d3_svg_lineX, + x1 = d3_svg_lineX, + y0 = 0, + y1 = d3_svg_lineY, + interpolate, + i0, + i1, + tension = .7; + + function area(d) { + if (d.length < 1) return null; + var points0 = d3_svg_linePoints(this, d, x0, y0), + points1 = d3_svg_linePoints(this, d, x0 === x1 ? d3_svg_areaX(points0) : x1, y0 === y1 ? d3_svg_areaY(points0) : y1); + return "M" + i0(projection(points1), tension) + + "L" + i1(projection(points0.reverse()), tension) + + "Z"; + } + + area.x = function(x) { + if (!arguments.length) return x1; + x0 = x1 = x; + return area; + }; + + area.x0 = function(x) { + if (!arguments.length) return x0; + x0 = x; + return area; + }; + + area.x1 = function(x) { + if (!arguments.length) return x1; + x1 = x; + return area; + }; + + area.y = function(y) { + if (!arguments.length) return y1; + y0 = y1 = y; + return area; + }; + + area.y0 = function(y) { + if (!arguments.length) return y0; + y0 = y; + return area; + }; + + area.y1 = function(y) { + if (!arguments.length) return y1; + y1 = y; + return area; + }; + + area.interpolate = function(x) { + if (!arguments.length) return interpolate; + i0 = d3_svg_lineInterpolators[interpolate = x]; + i1 = i0.reverse || i0; + return area; + }; + + area.tension = function(x) { + if (!arguments.length) return tension; + tension = x; + return area; + }; + + return area.interpolate("linear"); +} + +d3_svg_lineStepBefore.reverse = d3_svg_lineStepAfter; +d3_svg_lineStepAfter.reverse = d3_svg_lineStepBefore; + +d3.svg.area = function() { + return d3_svg_area(Object); +}; + +function d3_svg_areaX(points) { + return function(d, i) { + return points[i][0]; + }; +} + +function d3_svg_areaY(points) { + return function(d, i) { + return points[i][1]; + }; +} +d3.svg.area.radial = function() { + var area = d3_svg_area(d3_svg_lineRadial); + area.radius = area.x, delete area.x; + area.innerRadius = area.x0, delete area.x0; + area.outerRadius = area.x1, delete area.x1; + area.angle = area.y, delete area.y; + area.startAngle = area.y0, delete area.y0; + area.endAngle = area.y1, delete area.y1; + return area; +}; +d3.svg.chord = function() { + var source = d3_svg_chordSource, + target = d3_svg_chordTarget, + radius = d3_svg_chordRadius, + startAngle = d3_svg_arcStartAngle, + endAngle = d3_svg_arcEndAngle; + + // TODO Allow control point to be customized. + + function chord(d, i) { + var s = subgroup(this, source, d, i), + t = subgroup(this, target, d, i); + return "M" + s.p0 + + arc(s.r, s.p1, s.a1 - s.a0) + (equals(s, t) + ? curve(s.r, s.p1, s.r, s.p0) + : curve(s.r, s.p1, t.r, t.p0) + + arc(t.r, t.p1, t.a1 - t.a0) + + curve(t.r, t.p1, s.r, s.p0)) + + "Z"; + } + + function subgroup(self, f, d, i) { + var subgroup = f.call(self, d, i), + r = radius.call(self, subgroup, i), + a0 = startAngle.call(self, subgroup, i) + d3_svg_arcOffset, + a1 = endAngle.call(self, subgroup, i) + d3_svg_arcOffset; + return { + r: r, + a0: a0, + a1: a1, + p0: [r * Math.cos(a0), r * Math.sin(a0)], + p1: [r * Math.cos(a1), r * Math.sin(a1)] + }; + } + + function equals(a, b) { + return a.a0 == b.a0 && a.a1 == b.a1; + } + + function arc(r, p, a) { + return "A" + r + "," + r + " 0 " + +(a > Math.PI) + ",1 " + p; + } + + function curve(r0, p0, r1, p1) { + return "Q 0,0 " + p1; + } + + chord.radius = function(v) { + if (!arguments.length) return radius; + radius = d3.functor(v); + return chord; + }; + + chord.source = function(v) { + if (!arguments.length) return source; + source = d3.functor(v); + return chord; + }; + + chord.target = function(v) { + if (!arguments.length) return target; + target = d3.functor(v); + return chord; + }; + + chord.startAngle = function(v) { + if (!arguments.length) return startAngle; + startAngle = d3.functor(v); + return chord; + }; + + chord.endAngle = function(v) { + if (!arguments.length) return endAngle; + endAngle = d3.functor(v); + return chord; + }; + + return chord; +}; + +function d3_svg_chordSource(d) { + return d.source; +} + +function d3_svg_chordTarget(d) { + return d.target; +} + +function d3_svg_chordRadius(d) { + return d.radius; +} + +function d3_svg_chordStartAngle(d) { + return d.startAngle; +} + +function d3_svg_chordEndAngle(d) { + return d.endAngle; +} +d3.svg.diagonal = function() { + var source = d3_svg_chordSource, + target = d3_svg_chordTarget, + projection = d3_svg_diagonalProjection; + + function diagonal(d, i) { + var p0 = source.call(this, d, i), + p3 = target.call(this, d, i), + m = (p0.y + p3.y) / 2, + p = [p0, {x: p0.x, y: m}, {x: p3.x, y: m}, p3]; + p = p.map(projection); + return "M" + p[0] + "C" + p[1] + " " + p[2] + " " + p[3]; + } + + diagonal.source = function(x) { + if (!arguments.length) return source; + source = d3.functor(x); + return diagonal; + }; + + diagonal.target = function(x) { + if (!arguments.length) return target; + target = d3.functor(x); + return diagonal; + }; + + diagonal.projection = function(x) { + if (!arguments.length) return projection; + projection = x; + return diagonal; + }; + + return diagonal; +}; + +function d3_svg_diagonalProjection(d) { + return [d.x, d.y]; +} +d3.svg.diagonal.radial = function() { + var diagonal = d3.svg.diagonal(), + projection = d3_svg_diagonalProjection, + projection_ = diagonal.projection; + + diagonal.projection = function(x) { + return arguments.length + ? projection_(d3_svg_diagonalRadialProjection(projection = x)) + : projection; + }; + + return diagonal; +}; + +function d3_svg_diagonalRadialProjection(projection) { + return function() { + var d = projection.apply(this, arguments), + r = d[0], + a = d[1] + d3_svg_arcOffset; + return [r * Math.cos(a), r * Math.sin(a)]; + }; +} +d3.svg.mouse = function(container) { + return d3_svg_mousePoint(container, d3.event); +}; + +// https://bugs.webkit.org/show_bug.cgi?id=44083 +var d3_mouse_bug44083 = /WebKit/.test(navigator.userAgent) ? -1 : 0; + +function d3_svg_mousePoint(container, e) { + var point = (container.ownerSVGElement || container).createSVGPoint(); + if ((d3_mouse_bug44083 < 0) && (window.scrollX || window.scrollY)) { + var svg = d3.select(document.body) + .append("svg") + .style("position", "absolute") + .style("top", 0) + .style("left", 0); + var ctm = svg[0][0].getScreenCTM(); + d3_mouse_bug44083 = !(ctm.f || ctm.e); + svg.remove(); + } + if (d3_mouse_bug44083) { + point.x = e.pageX; + point.y = e.pageY; + } else { + point.x = e.clientX; + point.y = e.clientY; + } + point = point.matrixTransform(container.getScreenCTM().inverse()); + return [point.x, point.y]; +}; +d3.svg.touches = function(container, touches) { + if (arguments.length < 2) touches = d3.event.touches; + + return touches ? d3_array(touches).map(function(touch) { + var point = d3_svg_mousePoint(container, touch); + point.identifier = touch.identifier; + return point; + }) : []; +}; +d3.svg.symbol = function() { + var type = d3_svg_symbolType, + size = d3_svg_symbolSize; + + function symbol(d, i) { + return (d3_svg_symbols[type.call(this, d, i)] + || d3_svg_symbols.circle) + (size.call(this, d, i)); + } + + symbol.type = function(x) { + if (!arguments.length) return type; + type = d3.functor(x); + return symbol; + }; + + // size of symbol in square pixels + symbol.size = function(x) { + if (!arguments.length) return size; + size = d3.functor(x); + return symbol; + }; + + return symbol; +}; + +function d3_svg_symbolSize() { + return 64; +} + +function d3_svg_symbolType() { + return "circle"; +} + +// TODO cross-diagonal? +var d3_svg_symbols = { + "circle": function(size) { + var r = Math.sqrt(size / Math.PI); + return "M0," + r + + "A" + r + "," + r + " 0 1,1 0," + (-r) + + "A" + r + "," + r + " 0 1,1 0," + r + + "Z"; + }, + "cross": function(size) { + var r = Math.sqrt(size / 5) / 2; + return "M" + -3 * r + "," + -r + + "H" + -r + + "V" + -3 * r + + "H" + r + + "V" + -r + + "H" + 3 * r + + "V" + r + + "H" + r + + "V" + 3 * r + + "H" + -r + + "V" + r + + "H" + -3 * r + + "Z"; + }, + "diamond": function(size) { + var ry = Math.sqrt(size / (2 * d3_svg_symbolTan30)), + rx = ry * d3_svg_symbolTan30; + return "M0," + -ry + + "L" + rx + ",0" + + " 0," + ry + + " " + -rx + ",0" + + "Z"; + }, + "square": function(size) { + var r = Math.sqrt(size) / 2; + return "M" + -r + "," + -r + + "L" + r + "," + -r + + " " + r + "," + r + + " " + -r + "," + r + + "Z"; + }, + "triangle-down": function(size) { + var rx = Math.sqrt(size / d3_svg_symbolSqrt3), + ry = rx * d3_svg_symbolSqrt3 / 2; + return "M0," + ry + + "L" + rx +"," + -ry + + " " + -rx + "," + -ry + + "Z"; + }, + "triangle-up": function(size) { + var rx = Math.sqrt(size / d3_svg_symbolSqrt3), + ry = rx * d3_svg_symbolSqrt3 / 2; + return "M0," + -ry + + "L" + rx +"," + ry + + " " + -rx + "," + ry + + "Z"; + } +}; + +d3.svg.symbolTypes = d3.keys(d3_svg_symbols); + +var d3_svg_symbolSqrt3 = Math.sqrt(3), + d3_svg_symbolTan30 = Math.tan(30 * Math.PI / 180); +d3.svg.axis = function() { + var scale = d3.scale.linear(), + orient = "bottom", + tickMajorSize = 6, + tickMinorSize = 6, + tickEndSize = 6, + tickPadding = 3, + tickArguments_ = [10], + tickFormat_, + tickSubdivide = 0; + + function axis(selection) { + selection.each(function(d, i, j) { + var g = d3.select(this); + + // If selection is a transition, create subtransitions. + var transition = selection.delay ? function(o) { + var id = d3_transitionInheritId; + try { + d3_transitionInheritId = selection.id; + return o.transition() + .delay(selection[j][i].delay) + .duration(selection[j][i].duration) + .ease(selection.ease()); + } finally { + d3_transitionInheritId = id; + } + } : Object; + + // Ticks, or domain values for ordinal scales. + var ticks = scale.ticks ? scale.ticks.apply(scale, tickArguments_) : scale.domain(), + tickFormat = tickFormat_ == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments_) : String) : tickFormat_; + + // Minor ticks. + var subticks = d3_svg_axisSubdivide(scale, ticks, tickSubdivide), + subtick = g.selectAll(".minor").data(subticks, String), + subtickEnter = subtick.enter().insert("line", "g").attr("class", "tick minor").style("opacity", 1e-6), + subtickExit = transition(subtick.exit()).style("opacity", 1e-6).remove(), + subtickUpdate = transition(subtick).style("opacity", 1); + + // Major ticks. + var tick = g.selectAll("g").data(ticks, String), + tickEnter = tick.enter().insert("g", "path").style("opacity", 1e-6), + tickExit = transition(tick.exit()).style("opacity", 1e-6).remove(), + tickUpdate = transition(tick).style("opacity", 1), + tickTransform; + + // Domain. + var range = d3_scaleRange(scale), + path = g.selectAll(".domain").data([0]), + pathEnter = path.enter().append("path").attr("class", "domain"), + pathUpdate = transition(path); + + // Stash a snapshot of the new scale, and retrieve the old snapshot. + var scale1 = scale.copy(), + scale0 = this.__chart__ || scale1; + this.__chart__ = scale1; + + tickEnter.append("line").attr("class", "tick"); + tickEnter.append("text"); + tickUpdate.select("text").text(tickFormat); + + switch (orient) { + case "bottom": { + tickTransform = d3_svg_axisX; + subtickEnter.attr("y2", tickMinorSize); + subtickUpdate.attr("x2", 0).attr("y2", tickMinorSize); + tickEnter.select("line").attr("y2", tickMajorSize); + tickEnter.select("text").attr("y", Math.max(tickMajorSize, 0) + tickPadding); + tickUpdate.select("line").attr("x2", 0).attr("y2", tickMajorSize); + tickUpdate.select("text").attr("x", 0).attr("y", Math.max(tickMajorSize, 0) + tickPadding).attr("dy", ".71em").attr("text-anchor", "middle"); + pathUpdate.attr("d", "M" + range[0] + "," + tickEndSize + "V0H" + range[1] + "V" + tickEndSize); + break; + } + case "top": { + tickTransform = d3_svg_axisX; + subtickEnter.attr("y2", -tickMinorSize); + subtickUpdate.attr("x2", 0).attr("y2", -tickMinorSize); + tickEnter.select("line").attr("y2", -tickMajorSize); + tickEnter.select("text").attr("y", -(Math.max(tickMajorSize, 0) + tickPadding)); + tickUpdate.select("line").attr("x2", 0).attr("y2", -tickMajorSize); + tickUpdate.select("text").attr("x", 0).attr("y", -(Math.max(tickMajorSize, 0) + tickPadding)).attr("dy", "0em").attr("text-anchor", "middle"); + pathUpdate.attr("d", "M" + range[0] + "," + -tickEndSize + "V0H" + range[1] + "V" + -tickEndSize); + break; + } + case "left": { + tickTransform = d3_svg_axisY; + subtickEnter.attr("x2", -tickMinorSize); + subtickUpdate.attr("x2", -tickMinorSize).attr("y2", 0); + tickEnter.select("line").attr("x2", -tickMajorSize); + tickEnter.select("text").attr("x", -(Math.max(tickMajorSize, 0) + tickPadding)); + tickUpdate.select("line").attr("x2", -tickMajorSize).attr("y2", 0); + tickUpdate.select("text").attr("x", -(Math.max(tickMajorSize, 0) + tickPadding)).attr("y", 0).attr("dy", ".32em").attr("text-anchor", "end"); + pathUpdate.attr("d", "M" + -tickEndSize + "," + range[0] + "H0V" + range[1] + "H" + -tickEndSize); + break; + } + case "right": { + tickTransform = d3_svg_axisY; + subtickEnter.attr("x2", tickMinorSize); + subtickUpdate.attr("x2", tickMinorSize).attr("y2", 0); + tickEnter.select("line").attr("x2", tickMajorSize); + tickEnter.select("text").attr("x", Math.max(tickMajorSize, 0) + tickPadding); + tickUpdate.select("line").attr("x2", tickMajorSize).attr("y2", 0); + tickUpdate.select("text").attr("x", Math.max(tickMajorSize, 0) + tickPadding).attr("y", 0).attr("dy", ".32em").attr("text-anchor", "start"); + pathUpdate.attr("d", "M" + tickEndSize + "," + range[0] + "H0V" + range[1] + "H" + tickEndSize); + break; + } + } + + // For quantitative scales: + // - enter new ticks from the old scale + // - exit old ticks to the new scale + if (scale.ticks) { + tickEnter.call(tickTransform, scale0); + tickUpdate.call(tickTransform, scale1); + tickExit.call(tickTransform, scale1); + subtickEnter.call(tickTransform, scale0); + subtickUpdate.call(tickTransform, scale1); + subtickExit.call(tickTransform, scale1); + } + + // For ordinal scales: + // - any entering ticks are undefined in the old scale + // - any exiting ticks are undefined in the new scale + // Therefore, we only need to transition updating ticks. + else { + var dx = scale1.rangeBand() / 2, x = function(d) { return scale1(d) + dx; }; + tickEnter.call(tickTransform, x); + tickUpdate.call(tickTransform, x); + } + }); + } + + axis.scale = function(x) { + if (!arguments.length) return scale; + scale = x; + return axis; + }; + + axis.orient = function(x) { + if (!arguments.length) return orient; + orient = x; + return axis; + }; + + axis.ticks = function() { + if (!arguments.length) return tickArguments_; + tickArguments_ = arguments; + return axis; + }; + + axis.tickFormat = function(x) { + if (!arguments.length) return tickFormat_; + tickFormat_ = x; + return axis; + }; + + axis.tickSize = function(x, y, z) { + if (!arguments.length) return tickMajorSize; + var n = arguments.length - 1; + tickMajorSize = +x; + tickMinorSize = n > 1 ? +y : tickMajorSize; + tickEndSize = n > 0 ? +arguments[n] : tickMajorSize; + return axis; + }; + + axis.tickPadding = function(x) { + if (!arguments.length) return tickPadding; + tickPadding = +x; + return axis; + }; + + axis.tickSubdivide = function(x) { + if (!arguments.length) return tickSubdivide; + tickSubdivide = +x; + return axis; + }; + + return axis; +}; + +function d3_svg_axisX(selection, x) { + selection.attr("transform", function(d) { return "translate(" + x(d) + ",0)"; }); +} + +function d3_svg_axisY(selection, y) { + selection.attr("transform", function(d) { return "translate(0," + y(d) + ")"; }); +} + +function d3_svg_axisSubdivide(scale, ticks, m) { + subticks = []; + if (m && ticks.length > 1) { + var extent = d3_scaleExtent(scale.domain()), + subticks, + i = -1, + n = ticks.length, + d = (ticks[1] - ticks[0]) / ++m, + j, + v; + while (++i < n) { + for (j = m; --j > 0;) { + if ((v = +ticks[i] - j * d) >= extent[0]) { + subticks.push(v); + } + } + } + for (--i, j = 0; ++j < m && (v = +ticks[i] + j * d) < extent[1];) { + subticks.push(v); + } + } + return subticks; +} +d3.svg.brush = function() { + var event = d3.dispatch("brushstart", "brush", "brushend"), + x, // x-scale, optional + y, // y-scale, optional + extent = [[0, 0], [0, 0]]; // [x0, y0], [x1, y1] + + function brush(g) { + var resizes = x && y ? ["n", "e", "s", "w", "nw", "ne", "se", "sw"] + : x ? ["e", "w"] + : y ? ["n", "s"] + : []; + + g.each(function() { + var g = d3.select(this).on("mousedown.brush", down), + bg = g.selectAll(".background").data([0]), + fg = g.selectAll(".extent").data([0]), + tz = g.selectAll(".resize").data(resizes, String), + e; + + // An invisible, mouseable area for starting a new brush. + bg.enter().append("rect") + .attr("class", "background") + .style("visibility", "hidden") + .style("pointer-events", "all") + .style("cursor", "crosshair"); + + // The visible brush extent; style this as you like! + fg.enter().append("rect") + .attr("class", "extent") + .style("cursor", "move"); + + // More invisible rects for resizing the extent. + tz.enter().append("rect") + .attr("class", function(d) { return "resize " + d; }) + .attr("width", 6) + .attr("height", 6) + .style("visibility", "hidden") + .style("cursor", function(d) { return d3_svg_brushCursor[d]; }); + + // Update the resizers. + tz.style("pointer-events", brush.empty() ? "none" : "all"); + + // Remove any superfluous resizers. + tz.exit().remove(); + + // Initialize the background to fill the defined range. + // If the range isn't defined, you can post-process. + if (x) { + e = d3_scaleRange(x); + bg.attr("x", e[0]).attr("width", e[1] - e[0]); + d3_svg_brushRedrawX(g, extent); + } + if (y) { + e = d3_scaleRange(y); + bg.attr("y", e[0]).attr("height", e[1] - e[0]); + d3_svg_brushRedrawY(g, extent); + } + }); + } + + function down() { + var target = d3.select(d3.event.target); + + // Store some global state for the duration of the brush gesture. + d3_svg_brush = brush; + d3_svg_brushTarget = this; + d3_svg_brushExtent = extent; + d3_svg_brushOffset = d3.svg.mouse(d3_svg_brushTarget); + + // If the extent was clicked on, drag rather than brush; + // store the offset between the mouse and extent origin instead. + if (d3_svg_brushDrag = target.classed("extent")) { + d3_svg_brushOffset[0] = extent[0][0] - d3_svg_brushOffset[0]; + d3_svg_brushOffset[1] = extent[0][1] - d3_svg_brushOffset[1]; + } + + // If a resizer was clicked on, record which side is to be resized. + // Also, set the offset to the opposite side. + else if (target.classed("resize")) { + d3_svg_brushResize = d3.event.target.__data__; + d3_svg_brushOffset[0] = extent[+/w$/.test(d3_svg_brushResize)][0]; + d3_svg_brushOffset[1] = extent[+/^n/.test(d3_svg_brushResize)][1]; + } + + // If the ALT key is down when starting a brush, the center is at the mouse. + else if (d3.event.altKey) { + d3_svg_brushCenter = d3_svg_brushOffset.slice(); + } + + // Restrict which dimensions are resized. + d3_svg_brushX = !/^(n|s)$/.test(d3_svg_brushResize) && x; + d3_svg_brushY = !/^(e|w)$/.test(d3_svg_brushResize) && y; + + // Notify listeners. + d3_svg_brushDispatch = dispatcher(this, arguments); + d3_svg_brushDispatch("brushstart"); + d3_svg_brushMove(); + d3_eventCancel(); + } + + function dispatcher(that, argumentz) { + return function(type) { + var e = d3.event; + try { + d3.event = {type: type, target: brush}; + event[type].apply(that, argumentz); + } finally { + d3.event = e; + } + }; + } + + brush.x = function(z) { + if (!arguments.length) return x; + x = z; + return brush; + }; + + brush.y = function(z) { + if (!arguments.length) return y; + y = z; + return brush; + }; + + brush.extent = function(z) { + var x0, x1, y0, y1, t; + + // Invert the pixel extent to data-space. + if (!arguments.length) { + if (x) { + x0 = extent[0][0], x1 = extent[1][0]; + if (x.invert) x0 = x.invert(x0), x1 = x.invert(x1); + if (x1 < x0) t = x0, x0 = x1, x1 = t; + } + if (y) { + y0 = extent[0][1], y1 = extent[1][1]; + if (y.invert) y0 = y.invert(y0), y1 = y.invert(y1); + if (y1 < y0) t = y0, y0 = y1, y1 = t; + } + return x && y ? [[x0, y0], [x1, y1]] : x ? [x0, x1] : y && [y0, y1]; + } + + // Scale the data-space extent to pixels. + if (x) { + x0 = z[0], x1 = z[1]; + if (y) x0 = x0[0], x1 = x1[0]; + if (x.invert) x0 = x(x0), x1 = x(x1); + if (x1 < x0) t = x0, x0 = x1, x1 = t; + extent[0][0] = x0, extent[1][0] = x1; + } + if (y) { + y0 = z[0], y1 = z[1]; + if (x) y0 = y0[1], y1 = y1[1]; + if (y.invert) y0 = y(y0), y1 = y(y1); + if (y1 < y0) t = y0, y0 = y1, y1 = t; + extent[0][1] = y0, extent[1][1] = y1; + } + + return brush; + }; + + brush.clear = function() { + extent[0][0] = + extent[0][1] = + extent[1][0] = + extent[1][1] = 0; + return brush; + }; + + brush.empty = function() { + return (x && extent[0][0] === extent[1][0]) + || (y && extent[0][1] === extent[1][1]); + }; + + d3.select(window) + .on("mousemove.brush", d3_svg_brushMove) + .on("mouseup.brush", d3_svg_brushUp) + .on("keydown.brush", d3_svg_brushKeydown) + .on("keyup.brush", d3_svg_brushKeyup); + + return d3.rebind(brush, event, "on"); +}; + +var d3_svg_brush, + d3_svg_brushDispatch, + d3_svg_brushTarget, + d3_svg_brushX, + d3_svg_brushY, + d3_svg_brushExtent, + d3_svg_brushDrag, + d3_svg_brushResize, + d3_svg_brushCenter, + d3_svg_brushOffset; + +function d3_svg_brushRedrawX(g, extent) { + g.select(".extent").attr("x", extent[0][0]); + g.selectAll(".n,.s,.w,.nw,.sw").attr("x", extent[0][0] - 2); + g.selectAll(".e,.ne,.se").attr("x", extent[1][0] - 3); + g.selectAll(".extent,.n,.s").attr("width", extent[1][0] - extent[0][0]); +} + +function d3_svg_brushRedrawY(g, extent) { + g.select(".extent").attr("y", extent[0][1]); + g.selectAll(".n,.e,.w,.nw,.ne").attr("y", extent[0][1] - 3); + g.selectAll(".s,.se,.sw").attr("y", extent[1][1] - 4); + g.selectAll(".extent,.e,.w").attr("height", extent[1][1] - extent[0][1]); +} + +function d3_svg_brushKeydown() { + if (d3.event.keyCode == 32 && d3_svg_brushTarget && !d3_svg_brushDrag) { + d3_svg_brushCenter = null; + d3_svg_brushOffset[0] -= d3_svg_brushExtent[1][0]; + d3_svg_brushOffset[1] -= d3_svg_brushExtent[1][1]; + d3_svg_brushDrag = 2; + d3_eventCancel(); + } +} + +function d3_svg_brushKeyup() { + if (d3.event.keyCode == 32 && d3_svg_brushDrag == 2) { + d3_svg_brushOffset[0] += d3_svg_brushExtent[1][0]; + d3_svg_brushOffset[1] += d3_svg_brushExtent[1][1]; + d3_svg_brushDrag = 0; + d3_eventCancel(); + } +} + +function d3_svg_brushMove() { + if (d3_svg_brushOffset) { + var mouse = d3.svg.mouse(d3_svg_brushTarget), + g = d3.select(d3_svg_brushTarget); + + if (!d3_svg_brushDrag) { + + // If needed, determine the center from the current extent. + if (d3.event.altKey) { + if (!d3_svg_brushCenter) { + d3_svg_brushCenter = [ + (d3_svg_brushExtent[0][0] + d3_svg_brushExtent[1][0]) / 2, + (d3_svg_brushExtent[0][1] + d3_svg_brushExtent[1][1]) / 2 + ]; + } + + // Update the offset, for when the ALT key is released. + d3_svg_brushOffset[0] = d3_svg_brushExtent[+(mouse[0] < d3_svg_brushCenter[0])][0]; + d3_svg_brushOffset[1] = d3_svg_brushExtent[+(mouse[1] < d3_svg_brushCenter[1])][1]; + } + + // When the ALT key is released, we clear the center. + else d3_svg_brushCenter = null; + } + + // Update the brush extent for each dimension. + if (d3_svg_brushX) { + d3_svg_brushMove1(mouse, d3_svg_brushX, 0); + d3_svg_brushRedrawX(g, d3_svg_brushExtent); + } + if (d3_svg_brushY) { + d3_svg_brushMove1(mouse, d3_svg_brushY, 1); + d3_svg_brushRedrawY(g, d3_svg_brushExtent); + } + + // Notify listeners. + d3_svg_brushDispatch("brush"); + } +} + +function d3_svg_brushMove1(mouse, scale, i) { + var range = d3_scaleRange(scale), + r0 = range[0], + r1 = range[1], + offset = d3_svg_brushOffset[i], + size = d3_svg_brushExtent[1][i] - d3_svg_brushExtent[0][i], + min, + max; + + // When dragging, reduce the range by the extent size and offset. + if (d3_svg_brushDrag) { + r0 -= offset; + r1 -= size + offset; + } + + // Clamp the mouse so that the extent fits within the range extent. + min = Math.max(r0, Math.min(r1, mouse[i])); + + // Compute the new extent bounds. + if (d3_svg_brushDrag) { + max = (min += offset) + size; + } else { + + // If the ALT key is pressed, then preserve the center of the extent. + if (d3_svg_brushCenter) offset = Math.max(r0, Math.min(r1, 2 * d3_svg_brushCenter[i] - min)); + + // Compute the min and max of the offset and mouse. + if (offset < min) { + max = min; + min = offset; + } else { + max = offset; + } + } + + // Update the stored bounds. + d3_svg_brushExtent[0][i] = min; + d3_svg_brushExtent[1][i] = max; +} + +function d3_svg_brushUp() { + if (d3_svg_brushOffset) { + d3_svg_brushMove(); + d3.select(d3_svg_brushTarget).selectAll(".resize").style("pointer-events", d3_svg_brush.empty() ? "none" : "all"); + d3_svg_brushDispatch("brushend"); + d3_svg_brush = + d3_svg_brushDispatch = + d3_svg_brushTarget = + d3_svg_brushX = + d3_svg_brushY = + d3_svg_brushExtent = + d3_svg_brushDrag = + d3_svg_brushResize = + d3_svg_brushCenter = + d3_svg_brushOffset = null; + d3_eventCancel(); + } +} + +var d3_svg_brushCursor = { + n: "ns-resize", + e: "ew-resize", + s: "ns-resize", + w: "ew-resize", + nw: "nwse-resize", + ne: "nesw-resize", + se: "nwse-resize", + sw: "nesw-resize" +}; +d3.behavior = {}; +// TODO Track touch points by identifier. + +d3.behavior.drag = function() { + var event = d3.dispatch("drag", "dragstart", "dragend"), + origin = null; + + function drag() { + this + .on("mousedown.drag", mousedown) + .on("touchstart.drag", mousedown); + + d3.select(window) + .on("mousemove.drag", d3_behavior_dragMove) + .on("touchmove.drag", d3_behavior_dragMove) + .on("mouseup.drag", d3_behavior_dragUp, true) + .on("touchend.drag", d3_behavior_dragUp, true) + .on("click.drag", d3_behavior_dragClick, true); + } + + // snapshot the local context for subsequent dispatch + function start() { + d3_behavior_dragEvent = event; + d3_behavior_dragEventTarget = d3.event.target; + d3_behavior_dragTarget = this; + d3_behavior_dragArguments = arguments; + d3_behavior_dragOrigin = d3_behavior_dragPoint(); + if (origin) { + d3_behavior_dragOffset = origin.apply(d3_behavior_dragTarget, d3_behavior_dragArguments); + d3_behavior_dragOffset = [d3_behavior_dragOffset.x - d3_behavior_dragOrigin[0], d3_behavior_dragOffset.y - d3_behavior_dragOrigin[1]]; + } else { + d3_behavior_dragOffset = [0, 0]; + } + d3_behavior_dragMoved = 0; + } + + function mousedown() { + start.apply(this, arguments); + d3_behavior_dragDispatch("dragstart"); + } + + drag.origin = function(x) { + if (!arguments.length) return origin; + origin = x; + return drag; + }; + + return d3.rebind(drag, event, "on"); +}; + +var d3_behavior_dragEvent, + d3_behavior_dragEventTarget, + d3_behavior_dragTarget, + d3_behavior_dragArguments, + d3_behavior_dragOffset, + d3_behavior_dragOrigin, + d3_behavior_dragMoved; + +function d3_behavior_dragDispatch(type) { + var p = d3_behavior_dragPoint(), + o = d3.event, + e = d3.event = {type: type}; + + if (p) { + e.x = p[0] + d3_behavior_dragOffset[0]; + e.y = p[1] + d3_behavior_dragOffset[1]; + e.dx = p[0] - d3_behavior_dragOrigin[0]; + e.dy = p[1] - d3_behavior_dragOrigin[1]; + d3_behavior_dragMoved |= e.dx | e.dy; + d3_behavior_dragOrigin = p; + } + + try { + d3_behavior_dragEvent[type].apply(d3_behavior_dragTarget, d3_behavior_dragArguments); + } finally { + d3.event = o; + } + + o.stopPropagation(); + o.preventDefault(); +} + +function d3_behavior_dragPoint() { + var p = d3_behavior_dragTarget.parentNode, + t = d3.event.changedTouches; + return p && (t + ? d3.svg.touches(p, t)[0] + : d3.svg.mouse(p)); +} + +function d3_behavior_dragMove() { + if (!d3_behavior_dragTarget) return; + var parent = d3_behavior_dragTarget.parentNode; + + // O NOES! The drag element was removed from the DOM. + if (!parent) return d3_behavior_dragUp(); + + d3_behavior_dragDispatch("drag"); + d3_eventCancel(); +} + +function d3_behavior_dragUp() { + if (!d3_behavior_dragTarget) return; + d3_behavior_dragDispatch("dragend"); + + // If the node was moved, prevent the mouseup from propagating. + // Also prevent the subsequent click from propagating (e.g., for anchors). + if (d3_behavior_dragMoved) { + d3_eventCancel(); + d3_behavior_dragMoved = d3.event.target === d3_behavior_dragEventTarget; + } + + d3_behavior_dragEvent = + d3_behavior_dragEventTarget = + d3_behavior_dragTarget = + d3_behavior_dragArguments = + d3_behavior_dragOffset = + d3_behavior_dragOrigin = null; +} + +function d3_behavior_dragClick() { + if (d3_behavior_dragMoved) { + d3_eventCancel(); + d3_behavior_dragMoved = 0; + } +} +// TODO unbind zoom behavior? +d3.behavior.zoom = function() { + var xyz = [0, 0, 0], + event = d3.dispatch("zoom"), + extent = d3_behavior_zoomInfiniteExtent; + + function zoom() { + this + .on("mousedown.zoom", mousedown) + .on("mousewheel.zoom", mousewheel) + .on("DOMMouseScroll.zoom", mousewheel) + .on("dblclick.zoom", dblclick) + .on("touchstart.zoom", touchstart); + + d3.select(window) + .on("mousemove.zoom", d3_behavior_zoomMousemove) + .on("mouseup.zoom", d3_behavior_zoomMouseup) + .on("touchmove.zoom", d3_behavior_zoomTouchmove) + .on("touchend.zoom", d3_behavior_zoomTouchup) + .on("click.zoom", d3_behavior_zoomClick, true); + } + + // snapshot the local context for subsequent dispatch + function start() { + d3_behavior_zoomXyz = xyz; + d3_behavior_zoomExtent = extent; + d3_behavior_zoomDispatch = event.zoom; + d3_behavior_zoomEventTarget = d3.event.target; + d3_behavior_zoomTarget = this; + d3_behavior_zoomArguments = arguments; + } + + function mousedown() { + start.apply(this, arguments); + d3_behavior_zoomPanning = d3_behavior_zoomLocation(d3.svg.mouse(d3_behavior_zoomTarget)); + d3_behavior_zoomMoved = 0; + d3.event.preventDefault(); + window.focus(); + } + + // store starting mouse location + function mousewheel() { + start.apply(this, arguments); + if (!d3_behavior_zoomZooming) d3_behavior_zoomZooming = d3_behavior_zoomLocation(d3.svg.mouse(d3_behavior_zoomTarget)); + d3_behavior_zoomTo(d3_behavior_zoomDelta() + xyz[2], d3.svg.mouse(d3_behavior_zoomTarget), d3_behavior_zoomZooming); + } + + function dblclick() { + start.apply(this, arguments); + var mouse = d3.svg.mouse(d3_behavior_zoomTarget); + d3_behavior_zoomTo(d3.event.shiftKey ? Math.ceil(xyz[2] - 1) : Math.floor(xyz[2] + 1), mouse, d3_behavior_zoomLocation(mouse)); + } + + // doubletap detection + function touchstart() { + start.apply(this, arguments); + var touches = d3_behavior_zoomTouchup(), + touch, + now = Date.now(); + if ((touches.length === 1) && (now - d3_behavior_zoomLast < 300)) { + d3_behavior_zoomTo(1 + Math.floor(xyz[2]), touch = touches[0], d3_behavior_zoomLocations[touch.identifier]); + } + d3_behavior_zoomLast = now; + } + + zoom.extent = function(x) { + if (!arguments.length) return extent; + extent = x == null ? d3_behavior_zoomInfiniteExtent : x; + return zoom; + }; + + return d3.rebind(zoom, event, "on"); +}; + +var d3_behavior_zoomDiv, + d3_behavior_zoomPanning, + d3_behavior_zoomZooming, + d3_behavior_zoomLocations = {}, // identifier -> location + d3_behavior_zoomLast = 0, + d3_behavior_zoomXyz, + d3_behavior_zoomExtent, + d3_behavior_zoomDispatch, + d3_behavior_zoomEventTarget, + d3_behavior_zoomTarget, + d3_behavior_zoomArguments, + d3_behavior_zoomMoved; + +function d3_behavior_zoomLocation(point) { + return [ + point[0] - d3_behavior_zoomXyz[0], + point[1] - d3_behavior_zoomXyz[1], + d3_behavior_zoomXyz[2] + ]; +} + +// detect the pixels that would be scrolled by this wheel event +function d3_behavior_zoomDelta() { + + // mousewheel events are totally broken! + // https://bugs.webkit.org/show_bug.cgi?id=40441 + // not only that, but Chrome and Safari differ in re. to acceleration! + if (!d3_behavior_zoomDiv) { + d3_behavior_zoomDiv = d3.select("body").append("div") + .style("visibility", "hidden") + .style("top", 0) + .style("height", 0) + .style("width", 0) + .style("overflow-y", "scroll") + .append("div") + .style("height", "2000px") + .node().parentNode; + } + + var e = d3.event, delta; + try { + d3_behavior_zoomDiv.scrollTop = 1000; + d3_behavior_zoomDiv.dispatchEvent(e); + delta = 1000 - d3_behavior_zoomDiv.scrollTop; + } catch (error) { + delta = e.wheelDelta || (-e.detail * 5); + } + + return delta * .005; +} + +// Note: Since we don't rotate, it's possible for the touches to become +// slightly detached from their original positions. Thus, we recompute the +// touch points on touchend as well as touchstart! +function d3_behavior_zoomTouchup() { + var touches = d3.svg.touches(d3_behavior_zoomTarget), + i = -1, + n = touches.length, + touch; + while (++i < n) d3_behavior_zoomLocations[(touch = touches[i]).identifier] = d3_behavior_zoomLocation(touch); + return touches; +} + +function d3_behavior_zoomTouchmove() { + var touches = d3.svg.touches(d3_behavior_zoomTarget); + switch (touches.length) { + + // single-touch pan + case 1: { + var touch = touches[0]; + d3_behavior_zoomTo(d3_behavior_zoomXyz[2], touch, d3_behavior_zoomLocations[touch.identifier]); + break; + } + + // double-touch pan + zoom + case 2: { + var p0 = touches[0], + p1 = touches[1], + p2 = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2], + l0 = d3_behavior_zoomLocations[p0.identifier], + l1 = d3_behavior_zoomLocations[p1.identifier], + l2 = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2, l0[2]]; + d3_behavior_zoomTo(Math.log(d3.event.scale) / Math.LN2 + l0[2], p2, l2); + break; + } + } +} + +function d3_behavior_zoomMousemove() { + d3_behavior_zoomZooming = null; + if (d3_behavior_zoomPanning) { + d3_behavior_zoomMoved = 1; + d3_behavior_zoomTo(d3_behavior_zoomXyz[2], d3.svg.mouse(d3_behavior_zoomTarget), d3_behavior_zoomPanning); + } +} + +function d3_behavior_zoomMouseup() { + if (d3_behavior_zoomPanning) { + if (d3_behavior_zoomMoved) { + d3_eventCancel(); + d3_behavior_zoomMoved = d3_behavior_zoomEventTarget === d3.event.target; + } + + d3_behavior_zoomXyz = + d3_behavior_zoomExtent = + d3_behavior_zoomDispatch = + d3_behavior_zoomEventTarget = + d3_behavior_zoomTarget = + d3_behavior_zoomArguments = + d3_behavior_zoomPanning = null; + } +} + +function d3_behavior_zoomClick() { + if (d3_behavior_zoomMoved) { + d3_eventCancel(); + d3_behavior_zoomMoved = 0; + } +} + +function d3_behavior_zoomTo(z, x0, x1) { + z = d3_behavior_zoomExtentClamp(z, 2); + var j = Math.pow(2, d3_behavior_zoomXyz[2]), + k = Math.pow(2, z), + K = Math.pow(2, (d3_behavior_zoomXyz[2] = z) - x1[2]), + x_ = d3_behavior_zoomXyz[0], + y_ = d3_behavior_zoomXyz[1], + x = d3_behavior_zoomXyz[0] = d3_behavior_zoomExtentClamp((x0[0] - x1[0] * K), 0, k), + y = d3_behavior_zoomXyz[1] = d3_behavior_zoomExtentClamp((x0[1] - x1[1] * K), 1, k), + o = d3.event; // Events can be reentrant (e.g., focus). + + d3.event = { + scale: k, + translate: [x, y], + transform: function(sx, sy) { + if (sx) transform(sx, x_, x); + if (sy) transform(sy, y_, y); + } + }; + + function transform(scale, a, b) { + scale.domain(scale.range().map(function(v) { return scale.invert(((v - b) * j) / k + a); })); + } + + try { + d3_behavior_zoomDispatch.apply(d3_behavior_zoomTarget, d3_behavior_zoomArguments); + } finally { + d3.event = o; + } + + o.preventDefault(); +} + +var d3_behavior_zoomInfiniteExtent = [ + [-Infinity, Infinity], + [-Infinity, Infinity], + [-Infinity, Infinity] +]; + +function d3_behavior_zoomExtentClamp(x, i, k) { + var range = d3_behavior_zoomExtent[i], + r0 = range[0], + r1 = range[1]; + return arguments.length === 3 + ? Math.max(r1 * (r1 === Infinity ? -Infinity : 1 / k - 1), + Math.min(r0 === -Infinity ? Infinity : r0, x / k)) * k + : Math.max(r0, Math.min(r1, x)); +} +})(); diff --git a/static/vendor/d3-2.7.5/d3.layout.js b/static/vendor/d3-2.7.5/d3.layout.js new file mode 100644 index 0000000..16f690f --- /dev/null +++ b/static/vendor/d3-2.7.5/d3.layout.js @@ -0,0 +1,1882 @@ +(function(){d3.layout = {}; +// Implements hierarchical edge bundling using Holten's algorithm. For each +// input link, a path is computed that travels through the tree, up the parent +// hierarchy to the least common ancestor, and then back down to the destination +// node. Each path is simply an array of nodes. +d3.layout.bundle = function() { + return function(links) { + var paths = [], + i = -1, + n = links.length; + while (++i < n) paths.push(d3_layout_bundlePath(links[i])); + return paths; + }; +}; + +function d3_layout_bundlePath(link) { + var start = link.source, + end = link.target, + lca = d3_layout_bundleLeastCommonAncestor(start, end), + points = [start]; + while (start !== lca) { + start = start.parent; + points.push(start); + } + var k = points.length; + while (end !== lca) { + points.splice(k, 0, end); + end = end.parent; + } + return points; +} + +function d3_layout_bundleAncestors(node) { + var ancestors = [], + parent = node.parent; + while (parent != null) { + ancestors.push(node); + node = parent; + parent = parent.parent; + } + ancestors.push(node); + return ancestors; +} + +function d3_layout_bundleLeastCommonAncestor(a, b) { + if (a === b) return a; + var aNodes = d3_layout_bundleAncestors(a), + bNodes = d3_layout_bundleAncestors(b), + aNode = aNodes.pop(), + bNode = bNodes.pop(), + sharedNode = null; + while (aNode === bNode) { + sharedNode = aNode; + aNode = aNodes.pop(); + bNode = bNodes.pop(); + } + return sharedNode; +} +d3.layout.chord = function() { + var chord = {}, + chords, + groups, + matrix, + n, + padding = 0, + sortGroups, + sortSubgroups, + sortChords; + + function relayout() { + var subgroups = {}, + groupSums = [], + groupIndex = d3.range(n), + subgroupIndex = [], + k, + x, + x0, + i, + j; + + chords = []; + groups = []; + + // 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(d3.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 = (2 * Math.PI - padding * n) / k; + + // 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[di + "-" + dj] = { + index: di, + subindex: dj, + startAngle: a0, + endAngle: a1, + value: v + }; + } + groups.push({ + index: di, + startAngle: x0, + endAngle: x, + value: (x - x0) / k + }); + x += padding; + } + + // Generate chords for each (non-empty) subgroup-subgroup link. + i = -1; while (++i < n) { + j = i - 1; while (++j < n) { + var source = subgroups[i + "-" + j], + target = subgroups[j + "-" + i]; + if (source.value || target.value) { + chords.push(source.value < target.value + ? {source: target, target: source} + : {source: source, target: target}); + } + } + } + + if (sortChords) resort(); + } + + function resort() { + chords.sort(function(a, b) { + return sortChords( + (a.source.value + a.target.value) / 2, + (b.source.value + b.target.value) / 2); + }); + } + + chord.matrix = function(x) { + if (!arguments.length) return matrix; + n = (matrix = x) && matrix.length; + chords = groups = null; + return chord; + }; + + chord.padding = function(x) { + if (!arguments.length) return padding; + padding = x; + chords = groups = null; + return chord; + }; + + chord.sortGroups = function(x) { + if (!arguments.length) return sortGroups; + sortGroups = x; + chords = groups = null; + return chord; + }; + + chord.sortSubgroups = function(x) { + if (!arguments.length) return sortSubgroups; + sortSubgroups = x; + chords = null; + return chord; + }; + + chord.sortChords = function(x) { + if (!arguments.length) return sortChords; + sortChords = x; + if (chords) resort(); + return chord; + }; + + chord.chords = function() { + if (!chords) relayout(); + return chords; + }; + + chord.groups = function() { + if (!groups) relayout(); + return groups; + }; + + return chord; +}; +// A rudimentary force layout using Gauss-Seidel. +d3.layout.force = function() { + var force = {}, + event = d3.dispatch("tick"), + size = [1, 1], + drag, + alpha, + friction = .9, + linkDistance = d3_layout_forceLinkDistance, + linkStrength = d3_layout_forceLinkStrength, + charge = -30, + gravity = .1, + theta = .8, + interval, + nodes = [], + links = [], + distances, + strengths, + charges; + + function repulse(node) { + return function(quad, x1, y1, x2, y2) { + if (quad.point !== node) { + var dx = quad.cx - node.x, + dy = quad.cy - node.y, + dn = 1 / Math.sqrt(dx * dx + dy * dy); + + /* Barnes-Hut criterion. */ + if ((x2 - x1) * dn < theta) { + var k = quad.charge * dn * dn; + node.px -= dx * k; + node.py -= dy * k; + return true; + } + + if (quad.point && isFinite(dn)) { + var k = quad.pointCharge * dn * dn; + node.px -= dx * k; + node.py -= dy * k; + } + } + return !quad.charge; + }; + } + + function tick() { + // simulated annealing, basically + if ((alpha *= .99) < .005) return true; + + var n = nodes.length, + m = links.length, + q, + i, // current index + o, // current object + s, // current source + t, // current target + l, // current distance + k, // current force + x, // x-distance + y; // y-distance + + // gauss-seidel relaxation for links + for (i = 0; i < m; ++i) { + o = links[i]; + s = o.source; + t = o.target; + x = t.x - s.x; + y = t.y - s.y; + if (l = (x * x + y * y)) { + l = alpha * strengths[i] * ((l = Math.sqrt(l)) - distances[i]) / l; + x *= l; + y *= l; + t.x -= x * (k = s.weight / (t.weight + s.weight)); + t.y -= y * k; + s.x += x * (k = 1 - k); + s.y += y * k; + } + } + + // apply gravity forces + if (k = alpha * gravity) { + x = size[0] / 2; + y = size[1] / 2; + i = -1; if (k) while (++i < n) { + o = nodes[i]; + o.x += (x - o.x) * k; + o.y += (y - o.y) * k; + } + } + + // compute quadtree center of mass and apply charge forces + if (charge) { + d3_layout_forceAccumulate(q = d3.geom.quadtree(nodes), alpha, charges); + i = -1; while (++i < n) { + if (!(o = nodes[i]).fixed) { + q.visit(repulse(o)); + } + } + } + + // position verlet integration + i = -1; while (++i < n) { + o = nodes[i]; + if (o.fixed) { + o.x = o.px; + o.y = o.py; + } else { + o.x -= (o.px - (o.px = o.x)) * friction; + o.y -= (o.py - (o.py = o.y)) * friction; + } + } + + event.tick({type: "tick", alpha: alpha}); + } + + force.nodes = function(x) { + if (!arguments.length) return nodes; + nodes = x; + return force; + }; + + force.links = function(x) { + if (!arguments.length) return links; + links = x; + return force; + }; + + force.size = function(x) { + if (!arguments.length) return size; + size = x; + return force; + }; + + force.linkDistance = function(x) { + if (!arguments.length) return linkDistance; + linkDistance = d3.functor(x); + return force; + }; + + // For backwards-compatibility. + force.distance = force.linkDistance; + + force.linkStrength = function(x) { + if (!arguments.length) return linkStrength; + linkStrength = d3.functor(x); + return force; + }; + + force.friction = function(x) { + if (!arguments.length) return friction; + friction = x; + return force; + }; + + force.charge = function(x) { + if (!arguments.length) return charge; + charge = typeof x === "function" ? x : +x; + return force; + }; + + force.gravity = function(x) { + if (!arguments.length) return gravity; + gravity = x; + return force; + }; + + force.theta = function(x) { + if (!arguments.length) return theta; + theta = x; + return force; + }; + + force.start = function() { + var i, + j, + n = nodes.length, + m = links.length, + w = size[0], + h = size[1], + neighbors, + o; + + for (i = 0; i < n; ++i) { + (o = nodes[i]).index = i; + o.weight = 0; + } + + distances = []; + strengths = []; + for (i = 0; i < m; ++i) { + o = links[i]; + if (typeof o.source == "number") o.source = nodes[o.source]; + if (typeof o.target == "number") o.target = nodes[o.target]; + distances[i] = linkDistance.call(this, o, i); + strengths[i] = linkStrength.call(this, o, i); + ++o.source.weight; + ++o.target.weight; + } + + for (i = 0; i < n; ++i) { + o = nodes[i]; + if (isNaN(o.x)) o.x = position("x", w); + if (isNaN(o.y)) o.y = position("y", h); + if (isNaN(o.px)) o.px = o.x; + if (isNaN(o.py)) o.py = o.y; + } + + charges = []; + if (typeof charge === "function") { + for (i = 0; i < n; ++i) { + charges[i] = +charge.call(this, nodes[i], i); + } + } else { + for (i = 0; i < n; ++i) { + charges[i] = charge; + } + } + + // initialize node position based on first neighbor + function position(dimension, size) { + var neighbors = neighbor(i), + j = -1, + m = neighbors.length, + x; + while (++j < m) if (!isNaN(x = neighbors[j][dimension])) return x; + return Math.random() * size; + } + + // initialize neighbors lazily + function neighbor() { + if (!neighbors) { + neighbors = []; + for (j = 0; j < n; ++j) { + neighbors[j] = []; + } + for (j = 0; j < m; ++j) { + var o = links[j]; + neighbors[o.source.index].push(o.target); + neighbors[o.target.index].push(o.source); + } + } + return neighbors[i]; + } + + return force.resume(); + }; + + force.resume = function() { + alpha = .1; + d3.timer(tick); + return force; + }; + + force.stop = function() { + alpha = 0; + return force; + }; + + // use `node.call(force.drag)` to make nodes draggable + force.drag = function() { + if (!drag) drag = d3.behavior.drag() + .origin(Object) + .on("dragstart", dragstart) + .on("drag", d3_layout_forceDrag) + .on("dragend", d3_layout_forceDragEnd); + + this.on("mouseover.force", d3_layout_forceDragOver) + .on("mouseout.force", d3_layout_forceDragOut) + .call(drag); + }; + + function dragstart(d) { + d3_layout_forceDragOver(d3_layout_forceDragNode = d); + d3_layout_forceDragForce = force; + } + + return d3.rebind(force, event, "on"); +}; + +var d3_layout_forceDragForce, + d3_layout_forceDragNode; + +function d3_layout_forceDragOver(d) { + d.fixed |= 2; +} + +function d3_layout_forceDragOut(d) { + if (d !== d3_layout_forceDragNode) d.fixed &= 1; +} + +function d3_layout_forceDragEnd() { + d3_layout_forceDrag(); + d3_layout_forceDragNode.fixed &= 1; + d3_layout_forceDragForce = d3_layout_forceDragNode = null; +} + +function d3_layout_forceDrag() { + d3_layout_forceDragNode.px = d3.event.x; + d3_layout_forceDragNode.py = d3.event.y; + d3_layout_forceDragForce.resume(); // restart annealing +} + +function d3_layout_forceAccumulate(quad, alpha, charges) { + var cx = 0, + cy = 0; + quad.charge = 0; + if (!quad.leaf) { + var nodes = quad.nodes, + n = nodes.length, + i = -1, + c; + while (++i < n) { + c = nodes[i]; + if (c == null) continue; + d3_layout_forceAccumulate(c, alpha, charges); + quad.charge += c.charge; + cx += c.charge * c.cx; + cy += c.charge * c.cy; + } + } + if (quad.point) { + // jitter internal nodes that are coincident + if (!quad.leaf) { + quad.point.x += Math.random() - .5; + quad.point.y += Math.random() - .5; + } + var k = alpha * charges[quad.point.index]; + quad.charge += quad.pointCharge = k; + cx += k * quad.point.x; + cy += k * quad.point.y; + } + quad.cx = cx / quad.charge; + quad.cy = cy / quad.charge; +} + +function d3_layout_forceLinkDistance(link) { + return 20; +} + +function d3_layout_forceLinkStrength(link) { + return 1; +} +d3.layout.partition = function() { + var hierarchy = d3.layout.hierarchy(), + size = [1, 1]; // width, height + + function position(node, x, dx, dy) { + var children = node.children; + node.x = x; + node.y = node.depth * dy; + node.dx = dx; + node.dy = dy; + if (children && (n = children.length)) { + var i = -1, + n, + c, + d; + dx = node.value ? dx / node.value : 0; + while (++i < n) { + position(c = children[i], x, d = c.value * dx, dy); + x += d; + } + } + } + + function depth(node) { + var children = node.children, + d = 0; + if (children && (n = children.length)) { + var i = -1, + n; + while (++i < n) d = Math.max(d, depth(children[i])); + } + return 1 + d; + } + + function partition(d, i) { + var nodes = hierarchy.call(this, d, i); + position(nodes[0], 0, size[0], size[1] / depth(nodes[0])); + return nodes; + } + + partition.size = function(x) { + if (!arguments.length) return size; + size = x; + return partition; + }; + + return d3_layout_hierarchyRebind(partition, hierarchy); +}; +d3.layout.pie = function() { + var value = Number, + sort = d3_layout_pieSortByValue, + startAngle = 0, + endAngle = 2 * Math.PI; + + function pie(data, i) { + + // Compute the numeric values for each data element. + var values = data.map(function(d, i) { return +value.call(pie, d, i); }); + + // Compute the start angle. + var a = +(typeof startAngle === "function" + ? startAngle.apply(this, arguments) + : startAngle); + + // Compute the angular scale factor: from value to radians. + var k = ((typeof endAngle === "function" + ? endAngle.apply(this, arguments) + : endAngle) - startAngle) + / d3.sum(values); + + // Optionally sort the data. + var index = d3.range(data.length); + if (sort != null) index.sort(sort === d3_layout_pieSortByValue + ? function(i, j) { return values[j] - values[i]; } + : function(i, j) { return sort(data[i], data[j]); }); + + // Compute the arcs! + // They are stored in the original data's order. + var arcs = []; + index.forEach(function(i) { + arcs[i] = { + data: data[i], + value: d = values[i], + startAngle: a, + endAngle: a += d * k + }; + }); + return arcs; + } + + /** + * Specifies the value function *x*, which returns a nonnegative numeric value + * for each datum. The default value function is `Number`. The value function + * is passed two arguments: the current datum and the current index. + */ + pie.value = function(x) { + if (!arguments.length) return value; + value = x; + return pie; + }; + + /** + * Specifies a sort comparison operator *x*. The comparator is passed two data + * elements from the data array, a and b; it returns a negative value if a is + * less than b, a positive value if a is greater than b, and zero if a equals + * b. + */ + pie.sort = function(x) { + if (!arguments.length) return sort; + sort = x; + return pie; + }; + + /** + * Specifies the overall start angle of the pie chart. Defaults to 0. The + * start angle can be specified either as a constant or as a function; in the + * case of a function, it is evaluated once per array (as opposed to per + * element). + */ + pie.startAngle = function(x) { + if (!arguments.length) return startAngle; + startAngle = x; + return pie; + }; + + /** + * Specifies the overall end angle of the pie chart. Defaults to 2π. The + * end angle can be specified either as a constant or as a function; in the + * case of a function, it is evaluated once per array (as opposed to per + * element). + */ + pie.endAngle = function(x) { + if (!arguments.length) return endAngle; + endAngle = x; + return pie; + }; + + return pie; +}; + +var d3_layout_pieSortByValue = {}; +// data is two-dimensional array of x,y; we populate y0 +d3.layout.stack = function() { + var values = Object, + order = d3_layout_stackOrders["default"], + offset = d3_layout_stackOffsets["zero"], + out = d3_layout_stackOut, + x = d3_layout_stackX, + y = d3_layout_stackY; + + function stack(data, index) { + + // Convert series to canonical two-dimensional representation. + var series = data.map(function(d, i) { + return values.call(stack, d, i); + }); + + // Convert each series to canonical [[x,y]] representation. + var points = series.map(function(d, i) { + return d.map(function(v, i) { + return [x.call(stack, v, i), y.call(stack, v, i)]; + }); + }); + + // Compute the order of series, and permute them. + var orders = order.call(stack, points, index); + series = d3.permute(series, orders); + points = d3.permute(points, orders); + + // Compute the baseline… + var offsets = offset.call(stack, points, index); + + // And propagate it to other series. + var n = series.length, + m = series[0].length, + i, + j, + o; + for (j = 0; j < m; ++j) { + out.call(stack, series[0][j], o = offsets[j], points[0][j][1]); + for (i = 1; i < n; ++i) { + out.call(stack, series[i][j], o += points[i - 1][j][1], points[i][j][1]); + } + } + + return data; + } + + stack.values = function(x) { + if (!arguments.length) return values; + values = x; + return stack; + }; + + stack.order = function(x) { + if (!arguments.length) return order; + order = typeof x === "function" ? x : d3_layout_stackOrders[x]; + return stack; + }; + + stack.offset = function(x) { + if (!arguments.length) return offset; + offset = typeof x === "function" ? x : d3_layout_stackOffsets[x]; + return stack; + }; + + stack.x = function(z) { + if (!arguments.length) return x; + x = z; + return stack; + }; + + stack.y = function(z) { + if (!arguments.length) return y; + y = z; + return stack; + }; + + stack.out = function(z) { + if (!arguments.length) return out; + out = z; + return stack; + }; + + return stack; +} + +function d3_layout_stackX(d) { + return d.x; +} + +function d3_layout_stackY(d) { + return d.y; +} + +function d3_layout_stackOut(d, y0, y) { + d.y0 = y0; + d.y = y; +} + +var d3_layout_stackOrders = { + + "inside-out": function(data) { + var n = data.length, + i, + j, + max = data.map(d3_layout_stackMaxIndex), + sums = data.map(d3_layout_stackReduceSum), + index = d3.range(n).sort(function(a, b) { return max[a] - max[b]; }), + top = 0, + bottom = 0, + tops = [], + bottoms = []; + for (i = 0; i < n; ++i) { + j = index[i]; + if (top < bottom) { + top += sums[j]; + tops.push(j); + } else { + bottom += sums[j]; + bottoms.push(j); + } + } + return bottoms.reverse().concat(tops); + }, + + "reverse": function(data) { + return d3.range(data.length).reverse(); + }, + + "default": function(data) { + return d3.range(data.length); + } + +}; + +var d3_layout_stackOffsets = { + + "silhouette": function(data) { + var n = data.length, + m = data[0].length, + sums = [], + max = 0, + i, + j, + o, + y0 = []; + for (j = 0; j < m; ++j) { + for (i = 0, o = 0; i < n; i++) o += data[i][j][1]; + if (o > max) max = o; + sums.push(o); + } + for (j = 0; j < m; ++j) { + y0[j] = (max - sums[j]) / 2; + } + return y0; + }, + + "wiggle": function(data) { + var n = data.length, + x = data[0], + m = x.length, + max = 0, + i, + j, + k, + s1, + s2, + s3, + dx, + o, + o0, + y0 = []; + y0[0] = o = o0 = 0; + for (j = 1; j < m; ++j) { + for (i = 0, s1 = 0; i < n; ++i) s1 += data[i][j][1]; + for (i = 0, s2 = 0, dx = x[j][0] - x[j - 1][0]; i < n; ++i) { + for (k = 0, s3 = (data[i][j][1] - data[i][j - 1][1]) / (2 * dx); k < i; ++k) { + s3 += (data[k][j][1] - data[k][j - 1][1]) / dx; + } + s2 += s3 * data[i][j][1]; + } + y0[j] = o -= s1 ? s2 / s1 * dx : 0; + if (o < o0) o0 = o; + } + for (j = 0; j < m; ++j) y0[j] -= o0; + return y0; + }, + + "expand": function(data) { + var n = data.length, + m = data[0].length, + k = 1 / n, + i, + j, + o, + y0 = []; + for (j = 0; j < m; ++j) { + for (i = 0, o = 0; i < n; i++) o += data[i][j][1]; + if (o) for (i = 0; i < n; i++) data[i][j][1] /= o; + else for (i = 0; i < n; i++) data[i][j][1] = k; + } + for (j = 0; j < m; ++j) y0[j] = 0; + return y0; + }, + + "zero": function(data) { + var j = -1, + m = data[0].length, + y0 = []; + while (++j < m) y0[j] = 0; + return y0; + } + +}; + +function d3_layout_stackMaxIndex(array) { + var i = 1, + j = 0, + v = array[0][1], + k, + n = array.length; + for (; i < n; ++i) { + if ((k = array[i][1]) > v) { + j = i; + v = k; + } + } + return j; +} + +function d3_layout_stackReduceSum(d) { + return d.reduce(d3_layout_stackSum, 0); +} + +function d3_layout_stackSum(p, d) { + return p + d[1]; +} +d3.layout.histogram = function() { + var frequency = true, + valuer = Number, + ranger = d3_layout_histogramRange, + binner = d3_layout_histogramBinSturges; + + function histogram(data, i) { + var bins = [], + values = data.map(valuer, this), + range = ranger.call(this, values, i), + thresholds = binner.call(this, range, values, i), + bin, + i = -1, + n = values.length, + m = thresholds.length - 1, + k = frequency ? 1 : 1 / n, + x; + + // Initialize the bins. + while (++i < m) { + bin = bins[i] = []; + bin.dx = thresholds[i + 1] - (bin.x = thresholds[i]); + bin.y = 0; + } + + // Fill the bins, ignoring values outside the range. + i = -1; while(++i < n) { + x = values[i]; + if ((x >= range[0]) && (x <= range[1])) { + bin = bins[d3.bisect(thresholds, x, 1, m) - 1]; + bin.y += k; + bin.push(data[i]); + } + } + + return bins; + } + + // Specifies how to extract a value from the associated data. The default + // value function is `Number`, which is equivalent to the identity function. + histogram.value = function(x) { + if (!arguments.length) return valuer; + valuer = x; + return histogram; + }; + + // Specifies the range of the histogram. Values outside the specified range + // will be ignored. The argument `x` may be specified either as a two-element + // array representing the minimum and maximum value of the range, or as a + // function that returns the range given the array of values and the current + // index `i`. The default range is the extent (minimum and maximum) of the + // values. + histogram.range = function(x) { + if (!arguments.length) return ranger; + ranger = d3.functor(x); + return histogram; + }; + + // Specifies how to bin values in the histogram. The argument `x` may be + // specified as a number, in which case the range of values will be split + // uniformly into the given number of bins. Or, `x` may be an array of + // threshold values, defining the bins; the specified array must contain the + // rightmost (upper) value, thus specifying n + 1 values for n bins. Or, `x` + // may be a function which is evaluated, being passed the range, the array of + // values, and the current index `i`, returning an array of thresholds. The + // default bin function will divide the values into uniform bins using + // Sturges' formula. + histogram.bins = function(x) { + if (!arguments.length) return binner; + binner = typeof x === "number" + ? function(range) { return d3_layout_histogramBinFixed(range, x); } + : d3.functor(x); + return histogram; + }; + + // Specifies whether the histogram's `y` value is a count (frequency) or a + // probability (density). The default value is true. + histogram.frequency = function(x) { + if (!arguments.length) return frequency; + frequency = !!x; + return histogram; + }; + + return histogram; +}; + +function d3_layout_histogramBinSturges(range, values) { + return d3_layout_histogramBinFixed(range, Math.ceil(Math.log(values.length) / Math.LN2 + 1)); +} + +function d3_layout_histogramBinFixed(range, n) { + var x = -1, + b = +range[0], + m = (range[1] - b) / n, + f = []; + while (++x <= n) f[x] = m * x + b; + return f; +} + +function d3_layout_histogramRange(values) { + return [d3.min(values), d3.max(values)]; +} +d3.layout.hierarchy = function() { + var sort = d3_layout_hierarchySort, + children = d3_layout_hierarchyChildren, + value = d3_layout_hierarchyValue; + + // Recursively compute the node depth and value. + // Also converts the data representation into a standard hierarchy structure. + function recurse(data, depth, nodes) { + var childs = children.call(hierarchy, data, depth), + node = d3_layout_hierarchyInline ? data : {data: data}; + node.depth = depth; + nodes.push(node); + if (childs && (n = childs.length)) { + var i = -1, + n, + c = node.children = [], + v = 0, + j = depth + 1; + while (++i < n) { + d = recurse(childs[i], j, nodes); + d.parent = node; + c.push(d); + v += d.value; + } + if (sort) c.sort(sort); + if (value) node.value = v; + } else if (value) { + node.value = +value.call(hierarchy, data, depth) || 0; + } + return node; + } + + // Recursively re-evaluates the node value. + function revalue(node, depth) { + var children = node.children, + v = 0; + if (children && (n = children.length)) { + var i = -1, + n, + j = depth + 1; + while (++i < n) v += revalue(children[i], j); + } else if (value) { + v = +value.call(hierarchy, d3_layout_hierarchyInline ? node : node.data, depth) || 0; + } + if (value) node.value = v; + return v; + } + + function hierarchy(d) { + var nodes = []; + recurse(d, 0, nodes); + return nodes; + } + + hierarchy.sort = function(x) { + if (!arguments.length) return sort; + sort = x; + return hierarchy; + }; + + hierarchy.children = function(x) { + if (!arguments.length) return children; + children = x; + return hierarchy; + }; + + hierarchy.value = function(x) { + if (!arguments.length) return value; + value = x; + return hierarchy; + }; + + // Re-evaluates the `value` property for the specified hierarchy. + hierarchy.revalue = function(root) { + revalue(root, 0); + return root; + }; + + return hierarchy; +}; + +// A method assignment helper for hierarchy subclasses. +function d3_layout_hierarchyRebind(object, hierarchy) { + d3.rebind(object, hierarchy, "sort", "children", "value"); + + // Add an alias for links, for convenience. + object.links = d3_layout_hierarchyLinks; + + // If the new API is used, enabling inlining. + object.nodes = function(d) { + d3_layout_hierarchyInline = true; + return (object.nodes = object)(d); + }; + + return object; +} + +function d3_layout_hierarchyChildren(d) { + return d.children; +} + +function d3_layout_hierarchyValue(d) { + return d.value; +} + +function d3_layout_hierarchySort(a, b) { + return b.value - a.value; +} + +// Returns an array source+target objects for the specified nodes. +function d3_layout_hierarchyLinks(nodes) { + return d3.merge(nodes.map(function(parent) { + return (parent.children || []).map(function(child) { + return {source: parent, target: child}; + }); + })); +} + +// For backwards-compatibility, don't enable inlining by default. +var d3_layout_hierarchyInline = false; +d3.layout.pack = function() { + var hierarchy = d3.layout.hierarchy().sort(d3_layout_packSort), + size = [1, 1]; + + function pack(d, i) { + var nodes = hierarchy.call(this, d, i), + root = nodes[0]; + + // Recursively compute the layout. + root.x = 0; + root.y = 0; + d3_layout_packTree(root); + + // Scale the layout to fit the requested size. + var w = size[0], + h = size[1], + k = 1 / Math.max(2 * root.r / w, 2 * root.r / h); + d3_layout_packTransform(root, w / 2, h / 2, k); + + return nodes; + } + + pack.size = function(x) { + if (!arguments.length) return size; + size = x; + return pack; + }; + + return d3_layout_hierarchyRebind(pack, hierarchy); +}; + +function d3_layout_packSort(a, b) { + return a.value - b.value; +} + +function d3_layout_packInsert(a, b) { + var c = a._pack_next; + a._pack_next = b; + b._pack_prev = a; + b._pack_next = c; + c._pack_prev = b; +} + +function d3_layout_packSplice(a, b) { + a._pack_next = b; + b._pack_prev = a; +} + +function d3_layout_packIntersects(a, b) { + var dx = b.x - a.x, + dy = b.y - a.y, + dr = a.r + b.r; + return dr * dr - dx * dx - dy * dy > .001; // within epsilon +} + +function d3_layout_packCircle(nodes) { + var xMin = Infinity, + xMax = -Infinity, + yMin = Infinity, + yMax = -Infinity, + n = nodes.length, + a, b, c, j, k; + + function bound(node) { + xMin = Math.min(node.x - node.r, xMin); + xMax = Math.max(node.x + node.r, xMax); + yMin = Math.min(node.y - node.r, yMin); + yMax = Math.max(node.y + node.r, yMax); + } + + // Create node links. + nodes.forEach(d3_layout_packLink); + + // Create first node. + a = nodes[0]; + a.x = -a.r; + a.y = 0; + bound(a); + + // Create second node. + if (n > 1) { + b = nodes[1]; + b.x = b.r; + b.y = 0; + bound(b); + + // Create third node and build chain. + if (n > 2) { + c = nodes[2]; + d3_layout_packPlace(a, b, c); + bound(c); + d3_layout_packInsert(a, c); + a._pack_prev = c; + d3_layout_packInsert(c, b); + b = a._pack_next; + + // Now iterate through the rest. + for (var i = 3; i < n; i++) { + d3_layout_packPlace(a, b, c = nodes[i]); + + // Search for the closest intersection. + var isect = 0, s1 = 1, s2 = 1; + for (j = b._pack_next; j !== b; j = j._pack_next, s1++) { + if (d3_layout_packIntersects(j, c)) { + isect = 1; + break; + } + } + if (isect == 1) { + for (k = a._pack_prev; k !== j._pack_prev; k = k._pack_prev, s2++) { + if (d3_layout_packIntersects(k, c)) { + break; + } + } + } + + // Update node chain. + if (isect) { + if (s1 < s2 || (s1 == s2 && b.r < a.r)) d3_layout_packSplice(a, b = j); + else d3_layout_packSplice(a = k, b); + i--; + } else { + d3_layout_packInsert(a, c); + b = c; + bound(c); + } + } + } + } + + // Re-center the circles and return the encompassing radius. + var cx = (xMin + xMax) / 2, + cy = (yMin + yMax) / 2, + cr = 0; + for (var i = 0; i < n; i++) { + var node = nodes[i]; + node.x -= cx; + node.y -= cy; + cr = Math.max(cr, node.r + Math.sqrt(node.x * node.x + node.y * node.y)); + } + + // Remove node links. + nodes.forEach(d3_layout_packUnlink); + + return cr; +} + +function d3_layout_packLink(node) { + node._pack_next = node._pack_prev = node; +} + +function d3_layout_packUnlink(node) { + delete node._pack_next; + delete node._pack_prev; +} + +function d3_layout_packTree(node) { + var children = node.children; + if (children && children.length) { + children.forEach(d3_layout_packTree); + node.r = d3_layout_packCircle(children); + } else { + node.r = Math.sqrt(node.value); + } +} + +function d3_layout_packTransform(node, x, y, k) { + var children = node.children; + node.x = (x += k * node.x); + node.y = (y += k * node.y); + node.r *= k; + if (children) { + var i = -1, n = children.length; + while (++i < n) d3_layout_packTransform(children[i], x, y, k); + } +} + +function d3_layout_packPlace(a, b, c) { + var db = a.r + c.r, + dx = b.x - a.x, + dy = b.y - a.y; + if (db && (dx || dy)) { + var da = b.r + c.r, + dc = Math.sqrt(dx * dx + dy * dy), + cos = Math.max(-1, Math.min(1, (db * db + dc * dc - da * da) / (2 * db * dc))), + theta = Math.acos(cos), + x = cos * (db /= dc), + y = Math.sin(theta) * db; + c.x = a.x + x * dx + y * dy; + c.y = a.y + x * dy - y * dx; + } else { + c.x = a.x + db; + c.y = a.y; + } +} +// Implements a hierarchical layout using the cluster (or dendrogram) +// algorithm. +d3.layout.cluster = function() { + var hierarchy = d3.layout.hierarchy().sort(null).value(null), + separation = d3_layout_treeSeparation, + size = [1, 1]; // width, height + + function cluster(d, i) { + var nodes = hierarchy.call(this, d, i), + root = nodes[0], + previousNode, + x = 0, + kx, + ky; + + // First walk, computing the initial x & y values. + d3_layout_treeVisitAfter(root, function(node) { + var children = node.children; + if (children && children.length) { + node.x = d3_layout_clusterX(children); + node.y = d3_layout_clusterY(children); + } else { + node.x = previousNode ? x += separation(node, previousNode) : 0; + node.y = 0; + previousNode = node; + } + }); + + // Compute the left-most, right-most, and depth-most nodes for extents. + var left = d3_layout_clusterLeft(root), + right = d3_layout_clusterRight(root), + x0 = left.x - separation(left, right) / 2, + x1 = right.x + separation(right, left) / 2; + + // Second walk, normalizing x & y to the desired size. + d3_layout_treeVisitAfter(root, function(node) { + node.x = (node.x - x0) / (x1 - x0) * size[0]; + node.y = (1 - (root.y ? node.y / root.y : 1)) * size[1]; + }); + + return nodes; + } + + cluster.separation = function(x) { + if (!arguments.length) return separation; + separation = x; + return cluster; + }; + + cluster.size = function(x) { + if (!arguments.length) return size; + size = x; + return cluster; + }; + + return d3_layout_hierarchyRebind(cluster, hierarchy); +}; + +function d3_layout_clusterY(children) { + return 1 + d3.max(children, function(child) { + return child.y; + }); +} + +function d3_layout_clusterX(children) { + return children.reduce(function(x, child) { + return x + child.x; + }, 0) / children.length; +} + +function d3_layout_clusterLeft(node) { + var children = node.children; + return children && children.length ? d3_layout_clusterLeft(children[0]) : node; +} + +function d3_layout_clusterRight(node) { + var children = node.children, n; + return children && (n = children.length) ? d3_layout_clusterRight(children[n - 1]) : node; +} +// Node-link tree diagram using the Reingold-Tilford "tidy" algorithm +d3.layout.tree = function() { + var hierarchy = d3.layout.hierarchy().sort(null).value(null), + separation = d3_layout_treeSeparation, + size = [1, 1]; // width, height + + function tree(d, i) { + var nodes = hierarchy.call(this, d, i), + root = nodes[0]; + + function firstWalk(node, previousSibling) { + var children = node.children, + layout = node._tree; + if (children && (n = children.length)) { + var n, + firstChild = children[0], + previousChild, + ancestor = firstChild, + child, + i = -1; + while (++i < n) { + child = children[i]; + firstWalk(child, previousChild); + ancestor = apportion(child, previousChild, ancestor); + previousChild = child; + } + d3_layout_treeShift(node); + var midpoint = .5 * (firstChild._tree.prelim + child._tree.prelim); + if (previousSibling) { + layout.prelim = previousSibling._tree.prelim + separation(node, previousSibling); + layout.mod = layout.prelim - midpoint; + } else { + layout.prelim = midpoint; + } + } else { + if (previousSibling) { + layout.prelim = previousSibling._tree.prelim + separation(node, previousSibling); + } + } + } + + function secondWalk(node, x) { + node.x = node._tree.prelim + x; + var children = node.children; + if (children && (n = children.length)) { + var i = -1, + n; + x += node._tree.mod; + while (++i < n) { + secondWalk(children[i], x); + } + } + } + + function apportion(node, previousSibling, ancestor) { + if (previousSibling) { + var vip = node, + vop = node, + vim = previousSibling, + vom = node.parent.children[0], + sip = vip._tree.mod, + sop = vop._tree.mod, + sim = vim._tree.mod, + som = vom._tree.mod, + shift; + while (vim = d3_layout_treeRight(vim), vip = d3_layout_treeLeft(vip), vim && vip) { + vom = d3_layout_treeLeft(vom); + vop = d3_layout_treeRight(vop); + vop._tree.ancestor = node; + shift = vim._tree.prelim + sim - vip._tree.prelim - sip + separation(vim, vip); + if (shift > 0) { + d3_layout_treeMove(d3_layout_treeAncestor(vim, node, ancestor), node, shift); + sip += shift; + sop += shift; + } + sim += vim._tree.mod; + sip += vip._tree.mod; + som += vom._tree.mod; + sop += vop._tree.mod; + } + if (vim && !d3_layout_treeRight(vop)) { + vop._tree.thread = vim; + vop._tree.mod += sim - sop; + } + if (vip && !d3_layout_treeLeft(vom)) { + vom._tree.thread = vip; + vom._tree.mod += sip - som; + ancestor = node; + } + } + return ancestor; + } + + // Initialize temporary layout variables. + d3_layout_treeVisitAfter(root, function(node, previousSibling) { + node._tree = { + ancestor: node, + prelim: 0, + mod: 0, + change: 0, + shift: 0, + number: previousSibling ? previousSibling._tree.number + 1 : 0 + }; + }); + + // Compute the layout using Buchheim et al.'s algorithm. + firstWalk(root); + secondWalk(root, -root._tree.prelim); + + // Compute the left-most, right-most, and depth-most nodes for extents. + var left = d3_layout_treeSearch(root, d3_layout_treeLeftmost), + right = d3_layout_treeSearch(root, d3_layout_treeRightmost), + deep = d3_layout_treeSearch(root, d3_layout_treeDeepest), + x0 = left.x - separation(left, right) / 2, + x1 = right.x + separation(right, left) / 2, + y1 = deep.depth || 1; + + // Clear temporary layout variables; transform x and y. + d3_layout_treeVisitAfter(root, function(node) { + node.x = (node.x - x0) / (x1 - x0) * size[0]; + node.y = node.depth / y1 * size[1]; + delete node._tree; + }); + + return nodes; + } + + tree.separation = function(x) { + if (!arguments.length) return separation; + separation = x; + return tree; + }; + + tree.size = function(x) { + if (!arguments.length) return size; + size = x; + return tree; + }; + + return d3_layout_hierarchyRebind(tree, hierarchy); +}; + +function d3_layout_treeSeparation(a, b) { + return a.parent == b.parent ? 1 : 2; +} + +// function d3_layout_treeSeparationRadial(a, b) { +// return (a.parent == b.parent ? 1 : 2) / a.depth; +// } + +function d3_layout_treeLeft(node) { + var children = node.children; + return children && children.length ? children[0] : node._tree.thread; +} + +function d3_layout_treeRight(node) { + var children = node.children, + n; + return children && (n = children.length) ? children[n - 1] : node._tree.thread; +} + +function d3_layout_treeSearch(node, compare) { + var children = node.children; + if (children && (n = children.length)) { + var child, + n, + i = -1; + while (++i < n) { + if (compare(child = d3_layout_treeSearch(children[i], compare), node) > 0) { + node = child; + } + } + } + return node; +} + +function d3_layout_treeRightmost(a, b) { + return a.x - b.x; +} + +function d3_layout_treeLeftmost(a, b) { + return b.x - a.x; +} + +function d3_layout_treeDeepest(a, b) { + return a.depth - b.depth; +} + +function d3_layout_treeVisitAfter(node, callback) { + function visit(node, previousSibling) { + var children = node.children; + if (children && (n = children.length)) { + var child, + previousChild = null, + i = -1, + n; + while (++i < n) { + child = children[i]; + visit(child, previousChild); + previousChild = child; + } + } + callback(node, previousSibling); + } + visit(node, null); +} + +function d3_layout_treeShift(node) { + var shift = 0, + change = 0, + children = node.children, + i = children.length, + child; + while (--i >= 0) { + child = children[i]._tree; + child.prelim += shift; + child.mod += shift; + shift += child.shift + (change += child.change); + } +} + +function d3_layout_treeMove(ancestor, node, shift) { + ancestor = ancestor._tree; + node = node._tree; + var change = shift / (node.number - ancestor.number); + ancestor.change += change; + node.change -= change; + node.shift += shift; + node.prelim += shift; + node.mod += shift; +} + +function d3_layout_treeAncestor(vim, node, ancestor) { + return vim._tree.ancestor.parent == node.parent + ? vim._tree.ancestor + : ancestor; +} +// Squarified Treemaps by Mark Bruls, Kees Huizing, and Jarke J. van Wijk +// Modified to support a target aspect ratio by Jeff Heer +d3.layout.treemap = function() { + var hierarchy = d3.layout.hierarchy(), + round = Math.round, + size = [1, 1], // width, height + padding = null, + pad = d3_layout_treemapPadNull, + sticky = false, + stickies, + ratio = 0.5 * (1 + Math.sqrt(5)); // golden ratio + + // Compute the area for each child based on value & scale. + function scale(children, k) { + var i = -1, + n = children.length, + child, + area; + while (++i < n) { + area = (child = children[i]).value * (k < 0 ? 0 : k); + child.area = isNaN(area) || area <= 0 ? 0 : area; + } + } + + // Recursively arranges the specified node's children into squarified rows. + function squarify(node) { + var children = node.children; + if (children && children.length) { + var rect = pad(node), + row = [], + remaining = children.slice(), // copy-on-write + child, + best = Infinity, // the best row score so far + score, // the current row score + u = Math.min(rect.dx, rect.dy), // initial orientation + n; + scale(remaining, rect.dx * rect.dy / node.value); + row.area = 0; + while ((n = remaining.length) > 0) { + row.push(child = remaining[n - 1]); + row.area += child.area; + if ((score = worst(row, u)) <= best) { // continue with this orientation + remaining.pop(); + best = score; + } else { // abort, and try a different orientation + row.area -= row.pop().area; + position(row, u, rect, false); + u = Math.min(rect.dx, rect.dy); + row.length = row.area = 0; + best = Infinity; + } + } + if (row.length) { + position(row, u, rect, true); + row.length = row.area = 0; + } + children.forEach(squarify); + } + } + + // Recursively resizes the specified node's children into existing rows. + // Preserves the existing layout! + function stickify(node) { + var children = node.children; + if (children && children.length) { + var rect = pad(node), + remaining = children.slice(), // copy-on-write + child, + row = []; + scale(remaining, rect.dx * rect.dy / node.value); + row.area = 0; + while (child = remaining.pop()) { + row.push(child); + row.area += child.area; + if (child.z != null) { + position(row, child.z ? rect.dx : rect.dy, rect, !remaining.length); + row.length = row.area = 0; + } + } + children.forEach(stickify); + } + } + + // Computes the score for the specified row, as the worst aspect ratio. + function worst(row, u) { + var s = row.area, + r, + rmax = 0, + rmin = Infinity, + i = -1, + n = row.length; + while (++i < n) { + if (!(r = row[i].area)) continue; + if (r < rmin) rmin = r; + if (r > rmax) rmax = r; + } + s *= s; + u *= u; + return s + ? Math.max((u * rmax * ratio) / s, s / (u * rmin * ratio)) + : Infinity; + } + + // Positions the specified row of nodes. Modifies `rect`. + function position(row, u, rect, flush) { + var i = -1, + n = row.length, + x = rect.x, + y = rect.y, + v = u ? round(row.area / u) : 0, + o; + if (u == rect.dx) { // horizontal subdivision + if (flush || v > rect.dy) v = rect.dy; // over+underflow + while (++i < n) { + o = row[i]; + o.x = x; + o.y = y; + o.dy = v; + x += o.dx = Math.min(rect.x + rect.dx - x, v ? round(o.area / v) : 0); + } + o.z = true; + o.dx += rect.x + rect.dx - x; // rounding error + rect.y += v; + rect.dy -= v; + } else { // vertical subdivision + if (flush || v > rect.dx) v = rect.dx; // over+underflow + while (++i < n) { + o = row[i]; + o.x = x; + o.y = y; + o.dx = v; + y += o.dy = Math.min(rect.y + rect.dy - y, v ? round(o.area / v) : 0); + } + o.z = false; + o.dy += rect.y + rect.dy - y; // rounding error + rect.x += v; + rect.dx -= v; + } + } + + function treemap(d) { + var nodes = stickies || hierarchy(d), + root = nodes[0]; + root.x = 0; + root.y = 0; + root.dx = size[0]; + root.dy = size[1]; + if (stickies) hierarchy.revalue(root); + scale([root], root.dx * root.dy / root.value); + (stickies ? stickify : squarify)(root); + if (sticky) stickies = nodes; + return nodes; + } + + treemap.size = function(x) { + if (!arguments.length) return size; + size = x; + return treemap; + }; + + treemap.padding = function(x) { + if (!arguments.length) return padding; + + function padFunction(node) { + var p = x.call(treemap, node, node.depth); + return p == null + ? d3_layout_treemapPadNull(node) + : d3_layout_treemapPad(node, typeof p === "number" ? [p, p, p, p] : p); + } + + function padConstant(node) { + return d3_layout_treemapPad(node, x); + } + + var type; + pad = (padding = x) == null ? d3_layout_treemapPadNull + : (type = typeof x) === "function" ? padFunction + : type === "number" ? (x = [x, x, x, x], padConstant) + : padConstant; + return treemap; + }; + + treemap.round = function(x) { + if (!arguments.length) return round != Number; + round = x ? Math.round : Number; + return treemap; + }; + + treemap.sticky = function(x) { + if (!arguments.length) return sticky; + sticky = x; + stickies = null; + return treemap; + }; + + treemap.ratio = function(x) { + if (!arguments.length) return ratio; + ratio = x; + return treemap; + }; + + return d3_layout_hierarchyRebind(treemap, hierarchy); +}; + +function d3_layout_treemapPadNull(node) { + return {x: node.x, y: node.y, dx: node.dx, dy: node.dy}; +} + +function d3_layout_treemapPad(node, padding) { + var x = node.x + padding[3], + y = node.y + padding[0], + dx = node.dx - padding[1] - padding[3], + dy = node.dy - padding[0] - padding[2]; + if (dx < 0) { x += dx / 2; dx = 0; } + if (dy < 0) { y += dy / 2; dy = 0; } + return {x: x, y: y, dx: dx, dy: dy}; +} +})(); diff --git a/static/vendor/d3-2.7.5/d3.layout.min.js b/static/vendor/d3-2.7.5/d3.layout.min.js new file mode 100644 index 0000000..63d4b89 --- /dev/null +++ b/static/vendor/d3-2.7.5/d3.layout.min.js @@ -0,0 +1 @@ +(function(){function a(a){var b=a.source,d=a.target,e=c(b,d),f=[b];while(b!==e)b=b.parent,f.push(b);var g=f.length;while(d!==e)f.splice(g,0,d),d=d.parent;return f}function b(a){var b=[],c=a.parent;while(c!=null)b.push(a),a=c,c=c.parent;return b.push(a),b}function c(a,c){if(a===c)return a;var d=b(a),e=b(c),f=d.pop(),g=e.pop(),h=null;while(f===g)h=f,f=d.pop(),g=e.pop();return h}function g(a){a.fixed|=2}function h(a){a!==f&&(a.fixed&=1)}function i(){j(),f.fixed&=1,e=f=null}function j(){f.px=d3.event.x,f.py=d3.event.y,e.resume()}function k(a,b,c){var d=0,e=0;a.charge=0;if(!a.leaf){var f=a.nodes,g=f.length,h=-1,i;while(++hd&&(c=b,d=e);return c}function u(a){return a.reduce(v,0)}function v(a,b){return a+b[1]}function w(a,b){return x(a,Math.ceil(Math.log(b.length)/Math.LN2+1))}function x(a,b){var c=-1,d=+a[0],e=(a[1]-d)/b,f=[];while(++c<=b)f[c]=e*c+d;return f}function y(a){return[d3.min(a),d3.max(a)]}function z(a,b){return d3.rebind(a,b,"sort","children","value"),a.links=D,a.nodes=function(b){return E=!0,(a.nodes=a)(b)},a}function A(a){return a.children}function B(a){return a.value}function C(a,b){return b.value-a.value}function D(a){return d3.merge(a.map(function(a){return(a.children||[]).map(function(b){return{source:a,target:b}})}))}function F(a,b){return a.value-b.value}function G(a,b){var c=a._pack_next;a._pack_next=b,b._pack_prev=a,b._pack_next=c,c._pack_prev=b}function H(a,b){a._pack_next=b,b._pack_prev=a}function I(a,b){var c=b.x-a.x,d=b.y-a.y,e=a.r+b.r;return e*e-c*c-d*d>.001}function J(a){function l(a){b=Math.min(a.x-a.r,b),c=Math.max(a.x+a.r,c),d=Math.min(a.y-a.r,d),e=Math.max(a.y+a.r,e)}var b=Infinity,c=-Infinity,d=Infinity,e=-Infinity,f=a.length,g,h,i,j,k;a.forEach(K),g=a[0],g.x=-g.r,g.y=0,l(g);if(f>1){h=a[1],h.x=h.r,h.y=0,l(h);if(f>2){i=a[2],O(g,h,i),l(i),G(g,i),g._pack_prev=i,G(i,h),h=g._pack_next;for(var m=3;m0&&(a=d)}return a}function X(a,b){return a.x-b.x}function Y(a,b){return b.x-a.x}function Z(a,b){return a.depth-b.depth}function $(a,b){function c(a,d){var e=a.children;if(e&&(i=e.length)){var f,g=null,h=-1,i;while(++h=0)f=d[e]._tree,f.prelim+=b,f.mod+=b,b+=f.shift+(c+=f.change)}function ba(a,b,c){a=a._tree,b=b._tree;var d=c/(b.number-a.number);a.change+=d,b.change-=d,b.shift+=c,b.prelim+=c,b.mod+=c}function bb(a,b,c){return a._tree.ancestor.parent==b.parent?a._tree.ancestor:c}function bc(a){return{x:a.x,y:a.y,dx:a.dx,dy:a.dy}}function bd(a,b){var c=a.x+b[3],d=a.y+b[0],e=a.dx-b[1]-b[3],f=a.dy-b[0]-b[2];return e<0&&(c+=e/2,e=0),f<0&&(d+=f/2,f=0),{x:c,y:d,dx:e,dy:f}}d3.layout={},d3.layout.bundle=function(){return function(b){var c=[],d=-1,e=b.length;while(++de&&(e=h),d.push(h)}for(g=0;g=i[0]&&o<=i[1]&&(k=g[d3.bisect(j,o,1,m)-1],k.y+=n,k.push(e[f]));return g}var a=!0,b=Number,c=y,d=w;return e.value=function(a){return arguments.length?(b=a,e):b},e.range=function(a){return arguments.length?(c=d3.functor(a),e):c},e.bins=function(a){return arguments.length?(d=typeof a=="number"?function(b){return x(b,a)}:d3.functor(a),e):d},e.frequency=function(b){return arguments.length?(a=!!b,e):a},e},d3.layout.hierarchy=function(){function e(f,h,i){var j=b.call(g,f,h),k=E?f:{data:f};k.depth=h,i.push(k);if(j&&(m=j.length)){var l=-1,m,n=k.children=[],o=0,p=h+1;while(++l0&&(ba(bb(g,a,d),a,m),i+=m,j+=m),k+=g._tree.mod,i+=e._tree.mod,l+=h._tree.mod,j+=f._tree.mod;g&&!V(f)&&(f._tree.thread=g,f._tree.mod+=k-j),e&&!U(h)&&(h._tree.thread=e,h._tree.mod+=i-l,d=a)}return d}var f=a.call(this,d,e),g=f[0];$(g,function(a,b){a._tree={ancestor:a,prelim:0,mod:0,change:0,shift:0,number:b?b._tree.number+1:0}}),h(g),i(g,-g._tree.prelim);var k=W(g,Y),l=W(g,X),m=W(g,Z),n=k.x-b(k,l)/2,o=l.x+b(l,k)/2,p=m.depth||1;return $(g,function(a){a.x=(a.x-n)/(o-n)*c[0],a.y=a.depth/p*c[1],delete a._tree}),f}var a=d3.layout.hierarchy().sort(null).value(null),b=T,c=[1,1];return d.separation=function(a){return arguments.length?(b=a,d):b},d.size=function(a){return arguments.length?(c=a,d):c},z(d,a)},d3.layout.treemap=function(){function i(a,b){var c=-1,d=a.length,e,f;while(++c0)d.push(g=f[o-1]),d.area+=g.area,(k=l(d,n))<=h?(f.pop(),h=k):(d.area-=d.pop().area,m(d,n,c,!1),n=Math.min(c.dx,c.dy),d.length=d.area=0,h=Infinity);d.length&&(m(d,n,c,!0),d.length=d.area=0),b.forEach(j)}}function k(a){var b=a.children;if(b&&b.length){var c=e(a),d=b.slice(),f,g=[];i(d,c.dx*c.dy/a.value),g.area=0;while(f=d.pop())g.push(f),g.area+=f.area,f.z!=null&&(m(g,f.z?c.dx:c.dy,c,!d.length),g.length=g.area=0);b.forEach(k)}}function l(a,b){var c=a.area,d,e=0,f=Infinity,g=-1,i=a.length;while(++ge&&(e=d)}return c*=c,b*=b,c?Math.max(b*e*h/c,c/(b*f*h)):Infinity}function m(a,c,d,e){var f=-1,g=a.length,h=d.x,i=d.y,j=c?b(a.area/c):0,k;if(c==d.dx){if(e||j>d.dy)j=d.dy;while(++fd.dx)j=d.dx;while(++f=0?a.substring(b):(b=a.length,""),d=[];while(b>0)d.push(a.substring(b-=3,b+3));return d.reverse().join(",")+c}function z(a,b){return{scale:Math.pow(10,(8-b)*3),symbol:a}}function E(a){return function(b){return b<=0?0:b>=1?1:a(b)}}function F(a){return function(b){return 1-a(1-b)}}function G(a){return function(b){return.5*(b<.5?a(2*b):2-a(2-2*b))}}function H(a){return a}function I(a){return function(b){return Math.pow(b,a)}}function J(a){return 1-Math.cos(a*Math.PI/2)}function K(a){return Math.pow(2,10*(a-1))}function L(a){return 1-Math.sqrt(1-a*a)}function M(a,b){var c;return arguments.length<2&&(b=.45),arguments.length<1?(a=1,c=b/4):c=b/(2*Math.PI)*Math.asin(1/a),function(d){return 1+a*Math.pow(2,10*-d)*Math.sin((d-c)*2*Math.PI/b)}}function N(a){return a||(a=1.70158),function(b){return b*b*((a+1)*b-a)}}function O(a){return a<1/2.75?7.5625*a*a:a<2/2.75?7.5625*(a-=1.5/2.75)*a+.75:a<2.5/2.75?7.5625*(a-=2.25/2.75)*a+.9375:7.5625*(a-=2.625/2.75)*a+.984375}function P(){d3.event.stopPropagation(),d3.event.preventDefault()}function R(a){return a=="transform"?d3.interpolateTransform:d3.interpolate}function S(a,b){return b=b-(a=+a)?1/(b-a):0,function(c){return(c-a)*b}}function T(a,b){return b=b-(a=+a)?1/(b-a):0,function(c){return Math.max(0,Math.min(1,(c-a)*b))}}function U(a,b,c){return new V(a,b,c)}function V(a,b,c){this.r=a,this.g=b,this.b=c}function W(a){return a<16?"0"+Math.max(0,a).toString(16):Math.min(255,a).toString(16)}function X(a,b,c){var d=0,e=0,f=0,g,h,i;g=/([a-z]+)\((.*)\)/i.exec(a);if(g){h=g[2].split(",");switch(g[1]){case"hsl":return c(parseFloat(h[0]),parseFloat(h[1])/100,parseFloat(h[2])/100);case"rgb":return b(Z(h[0]),Z(h[1]),Z(h[2]))}}return(i=$[a])?b(i.r,i.g,i.b):(a!=null&&a.charAt(0)==="#"&&(a.length===4?(d=a.charAt(1),d+=d,e=a.charAt(2),e+=e,f=a.charAt(3),f+=f):a.length===7&&(d=a.substring(1,3),e=a.substring(3,5),f=a.substring(5,7)),d=parseInt(d,16),e=parseInt(e,16),f=parseInt(f,16)),b(d,e,f))}function Y(a,b,c){var d=Math.min(a/=255,b/=255,c/=255),e=Math.max(a,b,c),f=e-d,g,h,i=(e+d)/2;return f?(h=i<.5?f/(e+d):f/(2-e-d),a==e?g=(b-c)/f+(b360?a-=360:a<0&&(a+=360),a<60?d+(e-d)*a/60:a<180?e:a<240?d+(e-d)*(240-a)/60:d}function g(a){return Math.round(f(a)*255)}var d,e;return a%=360,a<0&&(a+=360),b=b<0?0:b>1?1:b,c=c<0?0:c>1?1:c,e=c<=.5?c*(1+b):c+b-c*b,d=2*c-e,U(g(a+120),g(a),g(a-120))}function bd(a){return h(a,bj),a}function bk(a){return function(){return be(a,this)}}function bl(a){return function(){return bf(a,this)}}function bn(a,b){function f(){if(b=this.classList)return b.add(a);var b=this.className,d=b.baseVal!=null,e=d?b.baseVal:b;c.lastIndex=0,c.test(e)||(e=n(e+" "+a),d?b.baseVal=e:this.className=e)}function g(){if(b=this.classList)return b.remove(a);var b=this.className,d=b.baseVal!=null,e=d?b.baseVal:b;e=n(e.replace(c," ")),d?b.baseVal=e:this.className=e}function h(){(b.apply(this,arguments)?f:g).call(this)}var c=new RegExp("(^|\\s+)"+d3.requote(a)+"(\\s+|$)","g");if(arguments.length<2){var d=this.node();if(e=d.classList)return e.contains(a);var e=d.className;return c.lastIndex=0,c.test(e.baseVal!=null?e.baseVal:e)}return this.each(typeof b=="function"?h:b?f:g)}function bo(a){return{__data__:a}}function bp(a){return function(){return bi(this,a)}}function bq(a){return arguments.length||(a=d3.ascending),function(b,c){return a(b&&b.__data__,c&&c.__data__)}}function bs(a){return h(a,bt),a}function bu(a,b,c){h(a,by);var d={},e=d3.dispatch("start","end"),f=bB;return a.id=b,a.time=c,a.tween=function(b,c){return arguments.length<2?d[b]:(c==null?delete d[b]:d[b]=c,a)},a.ease=function(b){return arguments.length?(f=typeof b=="function"?b:d3.ease.apply(d3,arguments),a):f},a.each=function(b,c){return arguments.length<2?bC.call(a,b):(e.on(b,c),a)},d3.timer(function(g){return a.each(function(h,i,j){function p(a){if(o.active>b)return r();o.active=b;for(var f in d)(f=d[f].call(l,h,i))&&k.push(f);return e.start.call(l,h,i),q(a)||d3.timer(q,0,c),1}function q(a){if(o.active!==b)return r();var c=(a-m)/n,d=f(c),g=k.length;while(g>0)k[--g].call(l,d);if(c>=1)return r(),bA=b,e.end.call(l,h,i),bA=0,1}function r(){return--o.count||delete l.__transition__,1}var k=[],l=this,m=a[j][i].delay,n=a[j][i].duration,o=l.__transition__||(l.__transition__={active:0,count:0});++o.count,m<=g?p(g):d3.timer(p,m,c)}),1},0,c),a}function bw(a,b,c){return c!=""&&bv}function bx(a,b){function d(a,d,e){var f=b.call(this,a,d);return f==null?e!=""&&bv:e!=f&&c(e,f)}function e(a,d,e){return e!=b&&c(e,b)}var c=R(a);return typeof b=="function"?d:b==null?bw:(b+="",e)}function bC(a){for(var b=0,c=this.length;b=c.delay&&(c.flush=c.callback(a)),c=c.next;var d=bH()-b;d>24?(isFinite(d)&&(clearTimeout(bF),bF=setTimeout(bG,d)),bE=0):(bE=1,bI(bG))}function bH(){var a=null,b=bD,c=Infinity;while(b)b.flush?b=a?a.next=b.next:bD=b.next:(c=Math.min(c,b.then+b.delay),b=(a=b).next);return c}function bJ(a){var b=[a.a,a.b],c=[a.c,a.d],d=bL(b),e=bK(b,c),f=bL(bM(c,b,-e))||0;b[0]*c[1]2?b$:bZ,i=d?T:S;return e=g(a,b,i,c),f=g(b,a,i,d3.interpolate),h}function h(a){return e(a)}var e,f;return h.invert=function(a){return f(a)},h.domain=function(b){return arguments.length?(a=b.map(Number),g()):a},h.range=function(a){return arguments.length?(b=a,g()):b},h.rangeRound=function(a){return h.range(a).interpolate(d3.interpolateRound)},h.clamp=function(a){return arguments.length?(d=a,g()):d},h.interpolate=function(a){return arguments.length?(c=a,g()):c},h.ticks=function(b){return bX(a,b)},h.tickFormat=function(b){return bY(a,b)},h.nice=function(){return bR(a,bV),g()},h.copy=function(){return bT(a,b,c,d)},g()}function bU(a,b){return d3.rebind(a,b,"range","rangeRound","interpolate","clamp")}function bV(a){return a=Math.pow(10,Math.round(Math.log(a)/Math.LN10)-1),{floor:function(b){return Math.floor(b/a)*a},ceil:function(b){return Math.ceil(b/a)*a}}}function bW(a,b){var c=bP(a),d=c[1]-c[0],e=Math.pow(10,Math.floor(Math.log(d/b)/Math.LN10)),f=b/d*e;return f<=.15?e*=10:f<=.35?e*=5:f<=.75&&(e*=2),c[0]=Math.ceil(c[0]/e)*e,c[1]=Math.floor(c[1]/e)*e+e*.5,c[2]=e,c}function bX(a,b){return d3.range.apply(d3,bW(a,b))}function bY(a,b){return d3.format(",."+Math.max(0,-Math.floor(Math.log(bW(a,b)[2])/Math.LN10+.01))+"f")}function bZ(a,b,c,d){var e=c(a[0],a[1]),f=d(b[0],b[1]);return function(a){return f(e(a))}}function b$(a,b,c,d){var e=[],f=[],g=0,h=Math.min(a.length,b.length)-1;a[h]0;j--)e.push(c(f)*j)}else{for(;fi;g--);e=e.slice(f,g)}return e},d.tickFormat=function(a,e){arguments.length<2&&(e=ca);if(arguments.length<1)return e;var f=a/d.ticks().length,g=b===cc?(h=-1e-12,Math.floor):(h=1e-12,Math.ceil),h;return function(a){return a/c(g(b(a)+h))0?0:-a)/Math.LN10}function cd(a,b){function e(b){return a(c(b))}var c=ce(b),d=ce(1/b);return e.invert=function(b){return d(a.invert(b))},e.domain=function(b){return arguments.length?(a.domain(b.map(c)),e):a.domain().map(d)},e.ticks=function(a){return bX(e.domain(),a)},e.tickFormat=function(a){return bY(e.domain(),a)},e.nice=function(){return e.domain(bR(e.domain(),bV))},e.exponent=function(a){if(!arguments.length)return b;var f=e.domain();return c=ce(b=a),d=ce(1/b),e.domain(f)},e.copy=function(){return cd(a.copy(),b)},bU(e,a)}function ce(a){return function(b){return b<0?-Math.pow(-b,a):Math.pow(b,a)}}function cf(a,b){function f(b){return d[((c[b]||(c[b]=a.push(b)))-1)%d.length]}function g(b,c){return d3.range(a.length).map(function(a){return b+c*a})}var c,d,e;return f.domain=function(d){if(!arguments.length)return a;a=[],c={};var e=-1,g=d.length,h;while(++e1){h=b[1],f=a[i],i++,d+="C"+(e[0]+g[0])+","+(e[1]+g[1])+","+(f[0]-h[0])+","+(f[1]-h[1])+","+f[0]+","+f[1];for(var j=2;j9&&(f=c*3/Math.sqrt(f),g[h]=f*d,g[h+1]=f*e));h=-1;while(++h<=i)f=(a[Math.min(i,h+1)][0]-a[Math.max(0,h-1)][0])/(6*(1+g[h]*g[h])),b.push([f||0,g[h]*f||0]);return b}function cR(a){return a.length<3?cx(a):a[0]+cD(a,cQ(a))}function cS(a){var b,c=-1,d=a.length,e,f;while(++c1){var d=bP(a.domain()),e,f=-1,g=b.length,h=(b[1]-b[0])/++c,i,j;while(++f0;)(j=+b[f]-i*h)>=d[0]&&e.push(j);for(--f,i=0;++ib?1:a>=b?0:NaN},d3.descending=function(a,b){return ba?1:b>=a?0:NaN},d3.mean=function(a,b){var c=a.length,d,e=0,f=-1,g=0;if(arguments.length===1)while(++f1&&(a=a.map(b)),a=a.filter(k),a.length?d3.quantile(a.sort(d3.ascending),.5):undefined},d3.min=function(a,b){var c=-1,d=a.length,e,f;if(arguments.length===1){while(++cf&&(e=f)}else{while(++cf&&(e=f)}return e},d3.max=function(a,b){var c=-1,d=a.length,e,f;if(arguments.length===1){while(++ce&&(e=f)}else{while(++ce&&(e=f)}return e},d3.extent=function(a,b){var c=-1,d=a.length,e,f,g;if(arguments.length===1){while(++cf&&(e=f),gf&&(e=f),g1);return a+b*c*Math.sqrt(-2*Math.log(e)/e)}}},d3.sum=function(a,b){var c=0,d=a.length,e,f=-1;if(arguments.length===1)while(++f>1;a[e]>1;b0&&(e=f);return e},d3.last=function(a,b){var c=0,d=a.length,e=a[0],f;arguments.length===1&&(b=d3.ascending);while(++c=b.length)return e?e.call(a,c):d?c.sort(d):c;var h=-1,i=c.length,j=b[g++],k,l,m={};while(++h=b.length)return a;var e=[],f=c[d++],h;for(h in a)e.push({key:h,values:g(a[h],d)});return f&&e.sort(function(a,b){return f(a.key,b.key)}),e}var a={},b=[],c=[],d,e;return a.map=function(a){return f(a,0)},a.entries=function(a){return g(f(a,0),0)},a.key=function(c){return b.push(c),a},a.sortKeys=function(d){return c[b.length-1]=d,a},a.sortValues=function(b){return d=b,a},a.rollup=function(b){return e=b,a},a},d3.keys=function(a){var b=[];for(var c in a)b.push(c);return b},d3.values=function(a){var b=[];for(var c in a)b.push(a[c]);return b},d3.entries=function(a){var b=[];for(var c in a)b.push({key:c,value:a[c]});return b},d3.permute=function(a,b){var c=[],d=-1,e=b.length;while(++db)d.push(g/e);else while((g=a+c*++f)0&&(d=a.substring(c+1),a=a.substring(0,c)),arguments.length<2?this[a].on(d):this[a].on(d,b)},d3.format=function(a){var b=t.exec(a),c=b[1]||" ",d=b[3]||"",e=b[5],f=+b[6],g=b[7],h=b[8],i=b[9],j=1,k="",l=!1;h&&(h=+h.substring(1)),e&&(c="0",g&&(f-=Math.floor((f-1)/4)));switch(i){case"n":g=!0,i="g";break;case"%":j=100,k="%",i="f";break;case"p":j=100,k="%",i="r";break;case"d":l=!0,h=0;break;case"s":j=-1,i="r"}return i=="r"&&!h&&(i="g"),i=u[i]||w,function(a){if(l&&a%1)return"";var b=a<0&&(a=-a)?"−":d;if(j<0){var m=d3.formatPrefix(a,h);a*=m.scale,k=m.symbol}else a*=j;a=i(a,h);if(e){var n=a.length+b.length;n=^]))?([+\- ])?(#)?(0)?([0-9]+)?(,)?(\.[0-9]+)?([a-zA-Z%])?/,u={g:function(a,b){return a.toPrecision(b)},e:function(a,b){return a.toExponential(b)},f:function(a,b){return a.toFixed(b)},r:function(a,b){return d3.round(a,b=v(a,b)).toFixed(Math.max(0,Math.min(20,b)))}},y=["y","z","a","f","p","n","μ","m","","k","M","G","T","P","E","Z","Y"].map(z);d3.formatPrefix=function(a,b){var c=0;return a&&(a<0&&(a*=-1),b&&(a=d3.round(a,v(a,b))),c=1+Math.floor(1e-12+Math.log(a)/Math.LN10),c=Math.max(-24,Math.min(24,Math.floor((c<=0?c+1:c-1)/3)*3))),y[8+c/3]};var A=I(2),B=I(3),C={linear:function(){return H},poly:I,quad:function(){return A},cubic:function(){return B},sin:function(){return J},exp:function(){return K},circle:function(){return L},elastic:M,back:N,bounce:function(){return O}},D={"in":function(a){return a},out:F,"in-out":G,"out-in":function(a){return G(F(a))}};d3.ease=function(a){var b=a.indexOf("-"),c=b>=0?a.substring(0,b):a,d=b>=0?a.substring(b+1):"in";return E(D[d](C[c].apply(null,Array.prototype.slice.call(arguments,1))))},d3.event=null,d3.interpolate=function(a,b){var c=d3.interpolators.length,d;while(--c>=0&&!(d=d3.interpolators[c](a,b)));return d},d3.interpolateNumber=function(a,b){return b-=a,function(c){return a+b*c}},d3.interpolateRound=function(a,b){return b-=a,function(c){return Math.round(a+b*c)}},d3.interpolateString=function(a,b){var c,d,e,f=0,g=0,h=[],i=[],j,k;Q.lastIndex=0;for(d=0;c=Q.exec(b);++d)c.index&&h.push(b.substring(f,g=c.index)),i.push({i:h.length,x:c[0]}),h.push(null),f=Q.lastIndex;f1){while(++e=0;)if(f=c[d])e&&e!==f.nextSibling&&e.parentNode.insertBefore(f,e),e=f;return this},bj.sort=function(a){a=bq.apply(this,arguments);for(var b=-1,c=this.length;++b0&&(a=a.substring(0,e)),arguments.length<2?(e=this.node()[d])&&e._:this.each(function(e,f){function h(a){var c=d3.event;d3.event=a;try{b.call(g,g.__data__,f)}finally{d3.event=c}}var g=this;g[d]&&g.removeEventListener(a,g[d],c),b&&g.addEventListener(a,g[d]=h,c),h._=b})},bj.each=function(a){for(var b=-1,c=this.length;++b=cn?e?"M0,"+f+"A"+f+","+f+" 0 1,1 0,"+ -f+"A"+f+","+f+" 0 1,1 0,"+f+"M0,"+e+"A"+e+","+e+" 0 1,0 0,"+ -e+"A"+e+","+e+" 0 1,0 0,"+e+"Z":"M0,"+f+"A"+f+","+f+" 0 1,1 0,"+ -f+"A"+f+","+f+" 0 1,1 0,"+f+"Z":e?"M"+f*k+","+f*l+"A"+f+","+f+" 0 "+j+",1 "+f*m+","+f*n+"L"+e*m+","+e*n+"A"+e+","+e+" 0 "+j+",0 "+e*k+","+e*l+"Z":"M"+f*k+","+f*l+"A"+f+","+f+" 0 "+j+",1 "+f*m+","+f*n+"L0,0"+"Z"}var a=co,b=cp,c=cq,d=cr;return e.innerRadius=function(b){return arguments.length?(a=d3.functor(b),e):a},e.outerRadius=function(a){return arguments.length?(b=d3.functor(a),e):b},e.startAngle=function(a){return arguments.length?(c=d3.functor(a),e):c},e.endAngle=function(a){return arguments.length?(d=d3.functor(a),e):d},e.centroid=function(){var e=(a.apply(this,arguments)+b.apply(this,arguments))/2,f=(c.apply(this,arguments)+d.apply(this,arguments))/2+cm;return[Math.cos(f)*e,Math.sin(f)*e]},e};var cm=-Math.PI/2,cn=2*Math.PI-1e-6;d3.svg.line=function(){return cs(Object)};var cw={linear:cx,"step-before":cy,"step-after":cz,basis:cF,"basis-open":cG,"basis-closed":cH,bundle:cI,cardinal:cC,"cardinal-open":cA,"cardinal-closed":cB,monotone:cR},cK=[0,2/3,1/3,0],cL=[0,1/3,2/3,0],cM=[0,1/6,2/3,1/6];d3.svg.line.radial=function(){var a=cs(cS);return a.radius=a.x,delete a.x,a.angle=a.y,delete a.y,a},cy.reverse=cz,cz.reverse=cy,d3.svg.area=function(){return cT(Object)},d3.svg.area.radial=function(){var a=cT(cS);return a.radius=a.x,delete a.x,a.innerRadius=a.x0,delete a.x0,a.outerRadius=a.x1,delete a.x1,a.angle=a.y,delete a.y,a.startAngle=a.y0,delete a.y0,a.endAngle=a.y1,delete a.y1,a},d3.svg.chord=function(){function f(c,d){var e=g(this,a,c,d),f=g(this,b,c,d);return"M"+e.p0+i(e.r,e.p1,e.a1-e.a0)+(h(e,f)?j(e.r,e.p1,e.r,e.p0):j(e.r,e.p1,f.r,f.p0)+i(f.r,f.p1,f.a1-f.a0)+j(f.r,f.p1,e.r,e.p0))+"Z"}function g(a,b,f,g){var h=b.call(a,f,g),i=c.call(a,h,g),j=d.call(a,h,g)+cm,k=e.call(a,h,g)+cm;return{r:i,a0:j,a1:k,p0:[i*Math.cos(j),i*Math.sin(j)],p1:[i*Math.cos(k),i*Math.sin(k)]}}function h(a,b){return a.a0==b.a0&&a.a1==b.a1}function i(a,b,c){return"A"+a+","+a+" 0 "+ +(c>Math.PI)+",1 "+b}function j(a,b,c,d){return"Q 0,0 "+d}var a=cW,b=cX,c=cY,d=cq,e=cr;return f.radius=function(a){return arguments.length?(c=d3.functor(a),f):c},f.source=function(b){return arguments.length?(a=d3.functor(b),f):a},f.target=function(a){return arguments.length?(b=d3.functor(a),f):b},f.startAngle=function(a){return arguments.length?(d=d3.functor(a),f):d},f.endAngle=function(a){return arguments.length?(e=d3.functor(a),f):e},f},d3.svg.diagonal=function(){function d(d,e){var f=a.call(this,d,e),g=b.call(this,d,e),h=(f.y+g.y)/2,i=[f,{x:f.x,y:h},{x:g.x,y:h},g];return i=i.map(c),"M"+i[0]+"C"+i[1]+" "+i[2]+" "+i[3]}var a=cW,b=cX,c=c_;return d.source=function(b){return arguments.length?(a=d3.functor(b),d):a},d.target=function(a){return arguments.length?(b=d3.functor(a),d):b},d.projection=function(a){return arguments.length?(c=a,d):c},d},d3.svg.diagonal.radial=function(){var a=d3.svg.diagonal(),b=c_,c=a.projection;return a.projection=function(a){return arguments.length?c(da(b=a)):b},a},d3.svg.mouse=function(a){return dc(a,d3.event)};var db=/WebKit/.test(navigator.userAgent)?-1:0;d3.svg.touches=function(a,b){return arguments.length<2&&(b=d3.event.touches),b?d(b).map(function(b){var c=dc(a,b);return c.identifier=b.identifier,c}):[]},d3.svg.symbol=function(){function c(c,d){return(df[a.call(this,c,d)]||df.circle)(b.call(this,c,d))}var a=de,b=dd;return c.type=function(b){return arguments.length?(a=d3.functor(b),c):a},c.size=function(a){return arguments.length?(b=d3.functor(a),c):b},c};var df={circle:function(a){var b=Math.sqrt(a/Math.PI);return"M0,"+b+"A"+b+","+b+" 0 1,1 0,"+ -b+"A"+b+","+b+" 0 1,1 0,"+b+"Z"},cross:function(a){var b=Math.sqrt(a/5)/2;return"M"+ -3*b+","+ -b+"H"+ -b+"V"+ -3*b+"H"+b+"V"+ -b+"H"+3*b+"V"+b+"H"+b+"V"+3*b+"H"+ -b+"V"+b+"H"+ -3*b+"Z"},diamond:function(a){var b=Math.sqrt(a/(2*dh)),c=b*dh;return"M0,"+ -b+"L"+c+",0"+" 0,"+b+" "+ -c+",0"+"Z"},square:function(a){var b=Math.sqrt(a)/2;return"M"+ -b+","+ -b+"L"+b+","+ -b+" "+b+","+b+" "+ -b+","+b+"Z"},"triangle-down":function(a){var b=Math.sqrt(a/dg),c=b*dg/2;return"M0,"+c+"L"+b+","+ -c+" "+ -b+","+ -c+"Z"},"triangle-up":function(a){var b=Math.sqrt(a/dg),c=b*dg/2;return"M0,"+ -c+"L"+b+","+c+" "+ -b+","+c+"Z"}};d3.svg.symbolTypes=d3.keys(df);var dg=Math.sqrt(3),dh=Math.tan(30*Math.PI/180);d3.svg.axis=function(){function j(j){j.each(function(k,l,m){var n=d3.select(this),o=j.delay?function(a){var b=bA;try{return bA=j.id,a.transition().delay(j[m][l].delay).duration(j[m][l].duration).ease(j.ease())}finally{bA=b}}:Object,p=a.ticks?a.ticks.apply(a,g):a.domain(),q=h==null?a.tickFormat?a.tickFormat.apply(a,g):String:h,r=dk(a,p,i),s=n.selectAll(".minor").data(r,String),t=s.enter().insert("line","g").attr("class","tick minor").style("opacity",1e-6),u=o(s.exit()).style("opacity",1e-6).remove(),v=o(s).style("opacity",1),w=n.selectAll("g").data(p,String),x=w.enter().insert("g","path").style("opacity",1e-6),y=o(w.exit()).style("opacity",1e-6).remove(),z=o(w).style("opacity",1),A,B=bQ(a),C=n.selectAll(".domain").data([0]),D=C.enter().append("path").attr("class","domain"),E=o(C),F=a.copy(),G=this.__chart__||F;this.__chart__=F,x.append("line").attr("class","tick"),x.append("text"),z.select("text").text(q);switch(b){case"bottom":A=di,t.attr("y2",d),v.attr("x2",0).attr("y2",d),x.select("line").attr("y2",c),x.select("text").attr("y",Math.max(c,0)+f),z.select("line").attr("x2",0).attr("y2",c),z.select("text").attr("x",0).attr("y",Math.max(c,0)+f).attr("dy",".71em").attr("text-anchor","middle"),E.attr("d","M"+B[0]+","+e+"V0H"+B[1]+"V"+e);break;case"top":A=di,t.attr("y2",-d),v.attr("x2",0).attr("y2",-d),x.select("line").attr("y2",-c),x.select("text").attr("y",-(Math.max(c,0)+f)),z.select("line").attr("x2",0).attr("y2",-c),z.select("text").attr("x",0).attr("y",-(Math.max(c,0)+f)).attr("dy","0em").attr("text-anchor","middle"),E.attr("d","M"+B[0]+","+ -e+"V0H"+B[1]+"V"+ -e);break;case"left":A=dj,t.attr("x2",-d),v.attr("x2",-d).attr("y2",0),x.select("line").attr("x2",-c),x.select("text").attr("x",-(Math.max(c,0)+f)),z.select("line").attr("x2",-c).attr("y2",0),z.select("text").attr("x",-(Math.max(c,0)+f)).attr("y",0).attr("dy",".32em").attr("text-anchor","end"),E.attr("d","M"+ -e+","+B[0]+"H0V"+B[1]+"H"+ -e);break;case"right":A=dj,t.attr("x2",d),v.attr("x2",d).attr("y2",0),x.select("line").attr("x2",c),x.select("text").attr("x",Math.max(c,0)+f),z.select("line").attr("x2",c).attr("y2",0),z.select("text").attr("x",Math.max(c,0)+f).attr("y",0).attr("dy",".32em").attr("text-anchor","start"),E.attr("d","M"+e+","+B[0]+"H0V"+B[1]+"H"+e)}if(a.ticks)x.call(A,G),z.call(A,F),y.call(A,F),t.call(A,G),v.call(A,F),u.call(A,F);else{var H=F.rangeBand()/2,I=function(a){return F(a)+H};x.call(A,I),z.call(A,I)}})}var a=d3.scale.linear(),b="bottom",c=6,d=6,e=6,f=3,g=[10],h,i=0;return j.scale=function(b){return arguments.length?(a=b,j):a},j.orient=function(a){return arguments.length?(b=a,j):b},j.ticks=function(){return arguments.length?(g=arguments,j):g},j.tickFormat=function(a){return arguments.length?(h=a,j):h},j.tickSize=function(a,b,f){if(!arguments.length)return c;var g=arguments.length-1;return c=+a,d=g>1?+b:c,e=g>0?+arguments[g]:c,j},j.tickPadding=function(a){return arguments.length?(f=+a,j):f},j.tickSubdivide=function(a){return arguments.length?(i=+a,j):i},j},d3.svg.brush=function(){function e(a){var g=b&&c?["n","e","s","w","nw","ne","se","sw"]:b?["e","w"]:c?["n","s"]:[];a.each(function(){var a=d3.select(this).on("mousedown.brush",f),h=a.selectAll(".background").data([0]),i=a.selectAll(".extent").data([0]),j=a.selectAll(".resize").data(g,String),k;h.enter().append("rect").attr("class","background").style("visibility","hidden").style("pointer-events","all").style("cursor","crosshair"),i.enter().append("rect").attr("class","extent").style("cursor","move"),j.enter().append("rect").attr("class",function(a){return"resize "+a}).attr("width",6).attr("height",6).style("visibility","hidden").style("cursor",function(a){return dD[a]}),j.style("pointer-events",e.empty()?"none":"all"),j.exit().remove(),b&&(k=bQ(b),h.attr("x",k[0]).attr("width",k[1]-k[0]),dw(a,d)),c&&(k=bQ(c),h.attr("y",k[0]).attr("height",k[1]-k[0]),dx(a,d))})}function f(){var a=d3.select(d3.event.target);dl=e,dn=this,dr=d,dv=d3.svg.mouse(dn),(ds=a.classed("extent"))?(dv[0]=d[0][0]-dv[0],dv[1]=d[0][1]-dv[1]):a.classed("resize")?(dt=d3.event.target.__data__,dv[0]=d[+/w$/.test(dt)][0],dv[1]=d[+/^n/.test(dt)][1]):d3.event.altKey&&(du=dv.slice()),dp=!/^(n|s)$/.test(dt)&&b,dq=!/^(e|w)$/.test(dt)&&c,dm=g(this,arguments),dm("brushstart"),dA(),P()}function g(b,c){return function(d){var f=d3.event;try{d3.event={type:d,target:e},a[d].apply(b,c)}finally{d3.event=f}}}var a=d3.dispatch("brushstart","brush","brushend"),b,c,d=[[0,0],[0,0]];return e.x=function(a){return arguments.length?(b=a,e):b},e.y=function(a){return arguments.length?(c=a,e):c},e.extent=function(a){var f,g,h,i,j;return arguments.length?(b&&(f=a[0],g=a[1],c&&(f=f[0],g=g[0]),b.invert&&(f=b(f),g=b(g)),g= m) return -1; + c = template.charCodeAt(i++); + if (c == 37) { + p = d3_time_parsers[template.charAt(i++)]; + if (!p || ((j = p(date, string, j)) < 0)) return -1; + } else if (c != string.charCodeAt(j++)) { + return -1; + } + } + return j; +} + +var d3_time_zfill2 = d3.format("02d"), + d3_time_zfill3 = d3.format("03d"), + d3_time_zfill4 = d3.format("04d"), + d3_time_sfill2 = d3.format("2d"); + +var d3_time_formats = { + a: function(d) { return d3_time_weekdays[d.getDay()].substring(0, 3); }, + A: function(d) { return d3_time_weekdays[d.getDay()]; }, + b: function(d) { return d3_time_months[d.getMonth()].substring(0, 3); }, + B: function(d) { return d3_time_months[d.getMonth()]; }, + c: d3.time.format("%a %b %e %H:%M:%S %Y"), + d: function(d) { return d3_time_zfill2(d.getDate()); }, + e: function(d) { return d3_time_sfill2(d.getDate()); }, + H: function(d) { return d3_time_zfill2(d.getHours()); }, + I: function(d) { return d3_time_zfill2(d.getHours() % 12 || 12); }, + j: d3_time_dayOfYear, + L: function(d) { return d3_time_zfill3(d.getMilliseconds()); }, + m: function(d) { return d3_time_zfill2(d.getMonth() + 1); }, + M: function(d) { return d3_time_zfill2(d.getMinutes()); }, + p: function(d) { return d.getHours() >= 12 ? "PM" : "AM"; }, + S: function(d) { return d3_time_zfill2(d.getSeconds()); }, + U: d3_time_weekNumberSunday, + w: function(d) { return d.getDay(); }, + W: d3_time_weekNumberMonday, + x: d3.time.format("%m/%d/%y"), + X: d3.time.format("%H:%M:%S"), + y: function(d) { return d3_time_zfill2(d.getFullYear() % 100); }, + Y: function(d) { return d3_time_zfill4(d.getFullYear() % 10000); }, + Z: d3_time_zone, + "%": function(d) { return "%"; } +}; + +var d3_time_parsers = { + a: d3_time_parseWeekdayAbbrev, + A: d3_time_parseWeekday, + b: d3_time_parseMonthAbbrev, + B: d3_time_parseMonth, + c: d3_time_parseLocaleFull, + d: d3_time_parseDay, + e: d3_time_parseDay, + H: d3_time_parseHour24, + I: d3_time_parseHour12, + // j: function(d, s, i) { /*TODO day of year [001,366] */ return i; }, + L: d3_time_parseMilliseconds, + m: d3_time_parseMonthNumber, + M: d3_time_parseMinutes, + p: d3_time_parseAmPm, + S: d3_time_parseSeconds, + // U: function(d, s, i) { /*TODO week number (sunday) [00,53] */ return i; }, + // w: function(d, s, i) { /*TODO weekday [0,6] */ return i; }, + // W: function(d, s, i) { /*TODO week number (monday) [00,53] */ return i; }, + x: d3_time_parseLocaleDate, + X: d3_time_parseLocaleTime, + y: d3_time_parseYear, + Y: d3_time_parseFullYear + // , + // Z: function(d, s, i) { /*TODO time zone */ return i; }, + // "%": function(d, s, i) { /*TODO literal % */ return i; } +}; + +// Note: weekday is validated, but does not set the date. +function d3_time_parseWeekdayAbbrev(date, string, i) { + return string.substring(i, i += 3).toLowerCase() in d3_time_weekdayAbbrevLookup ? i : -1; +} + +var d3_time_weekdayAbbrevLookup = { + sun: 3, + mon: 3, + tue: 3, + wed: 3, + thu: 3, + fri: 3, + sat: 3 +}; + +// Note: weekday is validated, but does not set the date. +function d3_time_parseWeekday(date, string, i) { + d3_time_weekdayRe.lastIndex = 0; + var n = d3_time_weekdayRe.exec(string.substring(i, i + 10)); + return n ? i += n[0].length : -1; +} + +var d3_time_weekdayRe = /^(?:Sunday|Monday|Tuesday|Wednesday|Thursday|Friday|Saturday)/ig; + +var d3_time_weekdays = [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" +]; + +function d3_time_parseMonthAbbrev(date, string, i) { + var n = d3_time_monthAbbrevLookup[string.substring(i, i += 3).toLowerCase()]; + return n == null ? -1 : (date.setMonth(n), i); +} + +var d3_time_monthAbbrevLookup = { + jan: 0, + feb: 1, + mar: 2, + apr: 3, + may: 4, + jun: 5, + jul: 6, + aug: 7, + sep: 8, + oct: 9, + nov: 10, + dec: 11 +}; + +function d3_time_parseMonth(date, string, i) { + d3_time_monthRe.lastIndex = 0; + var n = d3_time_monthRe.exec(string.substring(i, i + 12)); + return n ? (date.setMonth(d3_time_monthLookup[n[0].toLowerCase()]), i += n[0].length) : -1; +} + +var d3_time_monthRe = /^(?:January|February|March|April|May|June|July|August|September|October|November|December)/ig; + +var d3_time_monthLookup = { + january: 0, + february: 1, + march: 2, + april: 3, + may: 4, + june: 5, + july: 6, + august: 7, + september: 8, + october: 9, + november: 10, + december: 11 +}; + +var d3_time_months = [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" +]; + +function d3_time_parseLocaleFull(date, string, i) { + return d3_time_parse(date, d3_time_formats.c.toString(), string, i); +} + +function d3_time_parseLocaleDate(date, string, i) { + return d3_time_parse(date, d3_time_formats.x.toString(), string, i); +} + +function d3_time_parseLocaleTime(date, string, i) { + return d3_time_parse(date, d3_time_formats.X.toString(), string, i); +} + +function d3_time_parseFullYear(date, string, i) { + d3_time_numberRe.lastIndex = 0; + var n = d3_time_numberRe.exec(string.substring(i, i + 4)); + return n ? (date.setFullYear(n[0]), i += n[0].length) : -1; +} + +function d3_time_parseYear(date, string, i) { + d3_time_numberRe.lastIndex = 0; + var n = d3_time_numberRe.exec(string.substring(i, i + 2)); + return n ? (date.setFullYear(d3_time_century() + +n[0]), i += n[0].length) : -1; +} + +function d3_time_century() { + return ~~(new Date().getFullYear() / 1000) * 1000; +} + +function d3_time_parseMonthNumber(date, string, i) { + d3_time_numberRe.lastIndex = 0; + var n = d3_time_numberRe.exec(string.substring(i, i + 2)); + return n ? (date.setMonth(n[0] - 1), i += n[0].length) : -1; +} + +function d3_time_parseDay(date, string, i) { + d3_time_numberRe.lastIndex = 0; + var n = d3_time_numberRe.exec(string.substring(i, i + 2)); + return n ? (date.setDate(+n[0]), i += n[0].length) : -1; +} + +// Note: we don't validate that the hour is in the range [0,23]. +function d3_time_parseHour24(date, string, i) { + d3_time_numberRe.lastIndex = 0; + var n = d3_time_numberRe.exec(string.substring(i, i + 2)); + return n ? (date.setHours(+n[0]), i += n[0].length) : -1; +} + +// Note: we don't validate that the hour is in the range [1,12]. +function d3_time_parseHour12(date, string, i) { + date.hour12 = true; + return d3_time_parseHour24(date, string, i); +} + +function d3_time_parseMinutes(date, string, i) { + d3_time_numberRe.lastIndex = 0; + var n = d3_time_numberRe.exec(string.substring(i, i + 2)); + return n ? (date.setMinutes(+n[0]), i += n[0].length) : -1; +} + +function d3_time_parseSeconds(date, string, i) { + d3_time_numberRe.lastIndex = 0; + var n = d3_time_numberRe.exec(string.substring(i, i + 2)); + return n ? (date.setSeconds(+n[0]), i += n[0].length) : -1; +} + +function d3_time_parseMilliseconds(date, string, i) { + d3_time_numberRe.lastIndex = 0; + var n = d3_time_numberRe.exec(string.substring(i, i + 3)); + return n ? (date.setMilliseconds(+n[0]), i += n[0].length) : -1; +} + +// Note: we don't look at the next directive. +var d3_time_numberRe = /\s*\d+/; + +function d3_time_parseAmPm(date, string, i) { + var n = d3_time_amPmLookup[string.substring(i, i += 2).toLowerCase()]; + return n == null ? -1 : (date.hour12pm = n, i); +} + +var d3_time_amPmLookup = { + am: 0, + pm: 1 +}; + +function d3_time_year(d) { + return new d3_time(d.getFullYear(), 0, 1); +} + +function d3_time_daysElapsed(d0, d1) { + return ~~((d1 - d0) / 864e5 - (d1.getTimezoneOffset() - d0.getTimezoneOffset()) / 1440); +} + +function d3_time_dayOfYear(d) { + return d3_time_zfill3(1 + d3_time_daysElapsed(d3_time_year(d), d)); +} + +function d3_time_weekNumberSunday(d) { + var d0 = d3_time_year(d); + return d3_time_zfill2(~~((d3_time_daysElapsed(d0, d) + d0.getDay()) / 7)); +} + +function d3_time_weekNumberMonday(d) { + var d0 = d3_time_year(d); + return d3_time_zfill2(~~((d3_time_daysElapsed(d0, d) + (d0.getDay() + 6) % 7) / 7)); +} + +// TODO table of time zone offset names? +function d3_time_zone(d) { + var z = d.getTimezoneOffset(), + zs = z > 0 ? "-" : "+", + zh = ~~(Math.abs(z) / 60), + zm = Math.abs(z) % 60; + return zs + d3_time_zfill2(zh) + d3_time_zfill2(zm); +} +d3.time.format.utc = function(template) { + var local = d3.time.format(template); + + function format(date) { + try { + d3_time = d3_time_format_utc; + var utc = new d3_time(); + utc._ = date; + return local(utc); + } finally { + d3_time = Date; + } + } + + format.parse = function(string) { + try { + d3_time = d3_time_format_utc; + var date = local.parse(string); + return date && date._; + } finally { + d3_time = Date; + } + }; + + format.toString = local.toString; + + return format; +}; + +function d3_time_format_utc() { + this._ = new Date(Date.UTC.apply(this, arguments)); +} + +d3_time_format_utc.prototype = { + getDate: function() { return this._.getUTCDate(); }, + getDay: function() { return this._.getUTCDay(); }, + getFullYear: function() { return this._.getUTCFullYear(); }, + getHours: function() { return this._.getUTCHours(); }, + getMilliseconds: function() { return this._.getUTCMilliseconds(); }, + getMinutes: function() { return this._.getUTCMinutes(); }, + getMonth: function() { return this._.getUTCMonth(); }, + getSeconds: function() { return this._.getUTCSeconds(); }, + getTimezoneOffset: function() { return 0; }, + valueOf: function() { return this._.getTime(); }, + setDate: function(x) { this._.setUTCDate(x); }, + setDay: function(x) { this._.setUTCDay(x); }, + setFullYear: function(x) { this._.setUTCFullYear(x); }, + setHours: function(x) { this._.setUTCHours(x); }, + setMilliseconds: function(x) { this._.setUTCMilliseconds(x); }, + setMinutes: function(x) { this._.setUTCMinutes(x); }, + setMonth: function(x) { this._.setUTCMonth(x); }, + setSeconds: function(x) { this._.setUTCSeconds(x); } +}; +var d3_time_formatIso = d3.time.format.utc("%Y-%m-%dT%H:%M:%S.%LZ"); + +d3.time.format.iso = Date.prototype.toISOString ? d3_time_formatIsoNative : d3_time_formatIso; + +function d3_time_formatIsoNative(date) { + return date.toISOString(); +} + +d3_time_formatIsoNative.parse = function(string) { + return new Date(string); +}; + +d3_time_formatIsoNative.toString = d3_time_formatIso.toString; +function d3_time_range(floor, step, number) { + return function(t0, t1, dt) { + var time = floor(t0), times = []; + if (time < t0) step(time); + if (dt > 1) { + while (time < t1) { + var date = new Date(+time); + if (!(number(date) % dt)) times.push(date); + step(time); + } + } else { + while (time < t1) times.push(new Date(+time)), step(time); + } + return times; + }; +} +d3.time.second = function(date) { + return new Date(~~(date / 1e3) * 1e3); +}; + +d3.time.second.utc = d3.time.second; +d3.time.seconds = d3_time_range(d3.time.second, function(date) { + date.setTime(date.getTime() + 1e3); +}, function(date) { + return date.getSeconds(); +}); + +d3.time.seconds.utc = d3.time.seconds; +d3.time.minute = function(date) { + return new Date(~~(date / 6e4) * 6e4); +}; + +d3.time.minute.utc = d3.time.minute;d3.time.minutes = d3_time_range(d3.time.minute, d3_time_minutesStep, function(date) { + return date.getMinutes(); +}); + +d3.time.minutes.utc = d3_time_range(d3.time.minute, d3_time_minutesStep, function(date) { + return date.getUTCMinutes(); +}); + +function d3_time_minutesStep(date) { + date.setTime(date.getTime() + 6e4); // assumes no leap seconds +} +d3.time.hour = function(date) { + var offset = date.getTimezoneOffset() / 60; + return new Date((~~(date / 36e5 - offset) + offset) * 36e5); +}; + +d3.time.hour.utc = function(date) { + return new Date(~~(date / 36e5) * 36e5); +}; +d3.time.hours = d3_time_range(d3.time.hour, d3_time_hoursStep, function(date) { + return date.getHours(); +}); + +d3.time.hours.utc = d3_time_range(d3.time.hour.utc, d3_time_hoursStep, function(date) { + return date.getUTCHours(); +}); + +function d3_time_hoursStep(date) { + date.setTime(date.getTime() + 36e5); +} +d3.time.day = function(date) { + return new Date(date.getFullYear(), date.getMonth(), date.getDate()); +}; + +d3.time.day.utc = function(date) { + return new Date(~~(date / 864e5) * 864e5); +}; +d3.time.days = d3_time_range(d3.time.day, function(date) { + date.setDate(date.getDate() + 1); +}, function(date) { + return date.getDate() - 1; +}); + +d3.time.days.utc = d3_time_range(d3.time.day.utc, function(date) { + date.setUTCDate(date.getUTCDate() + 1); +}, function(date) { + return date.getUTCDate() - 1; +}); +d3.time.week = function(date) { + (date = d3.time.day(date)).setDate(date.getDate() - date.getDay()); + return date; +}; + +d3.time.week.utc = function(date) { + (date = d3.time.day.utc(date)).setUTCDate(date.getUTCDate() - date.getUTCDay()); + return date; +}; +d3.time.weeks = d3_time_range(d3.time.week, function(date) { + date.setDate(date.getDate() + 7); +}, function(date) { + return ~~((date - new Date(date.getFullYear(), 0, 1)) / 6048e5); +}); + +d3.time.weeks.utc = d3_time_range(d3.time.week.utc, function(date) { + date.setUTCDate(date.getUTCDate() + 7); +}, function(date) { + return ~~((date - Date.UTC(date.getUTCFullYear(), 0, 1)) / 6048e5); +}); +d3.time.month = function(date) { + return new Date(date.getFullYear(), date.getMonth(), 1); +}; + +d3.time.month.utc = function(date) { + return new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), 1)); +}; +d3.time.months = d3_time_range(d3.time.month, function(date) { + date.setMonth(date.getMonth() + 1); +}, function(date) { + return date.getMonth(); +}); + +d3.time.months.utc = d3_time_range(d3.time.month.utc, function(date) { + date.setUTCMonth(date.getUTCMonth() + 1); +}, function(date) { + return date.getUTCMonth(); +}); +d3.time.year = function(date) { + return new Date(date.getFullYear(), 0, 1); +}; + +d3.time.year.utc = function(date) { + return new Date(Date.UTC(date.getUTCFullYear(), 0, 1)); +}; +d3.time.years = d3_time_range(d3.time.year, function(date) { + date.setFullYear(date.getFullYear() + 1); +}, function(date) { + return date.getFullYear(); +}); + +d3.time.years.utc = d3_time_range(d3.time.year.utc, function(date) { + date.setUTCFullYear(date.getUTCFullYear() + 1); +}, function(date) { + return date.getUTCFullYear(); +}); +// TODO nice +function d3_time_scale(linear, methods, format) { + + function scale(x) { + return linear(x); + } + + scale.invert = function(x) { + return d3_time_scaleDate(linear.invert(x)); + }; + + scale.domain = function(x) { + if (!arguments.length) return linear.domain().map(d3_time_scaleDate); + linear.domain(x); + return scale; + }; + + scale.ticks = function(m, k) { + var extent = d3_time_scaleExtent(scale.domain()); + if (typeof m !== "function") { + var span = extent[1] - extent[0], + target = span / m, + i = d3.bisect(d3_time_scaleSteps, target); + if (i == d3_time_scaleSteps.length) return methods.year(extent, m); + if (!i) return linear.ticks(m).map(d3_time_scaleDate); + if (Math.log(target / d3_time_scaleSteps[i - 1]) < Math.log(d3_time_scaleSteps[i] / target)) --i; + m = methods[i]; + k = m[1]; + m = m[0]; + } + return m(extent[0], new Date(+extent[1] + 1), k); // inclusive upper bound + }; + + scale.tickFormat = function() { + return format; + }; + + scale.copy = function() { + return d3_time_scale(linear.copy(), methods, format); + }; + + // TOOD expose d3_scale_linear_rebind? + return d3.rebind(scale, linear, "range", "rangeRound", "interpolate", "clamp"); +} + +// TODO expose d3_scaleExtent? +function d3_time_scaleExtent(domain) { + var start = domain[0], stop = domain[domain.length - 1]; + return start < stop ? [start, stop] : [stop, start]; +} + +function d3_time_scaleDate(t) { + return new Date(t); +} + +function d3_time_scaleFormat(formats) { + return function(date) { + var i = formats.length - 1, f = formats[i]; + while (!f[1](date)) f = formats[--i]; + return f[0](date); + }; +} + +function d3_time_scaleSetYear(y) { + var d = new Date(y, 0, 1); + d.setFullYear(y); // Y2K fail + return d; +} + +function d3_time_scaleGetYear(d) { + var y = d.getFullYear(), + d0 = d3_time_scaleSetYear(y), + d1 = d3_time_scaleSetYear(y + 1); + return y + (d - d0) / (d1 - d0); +} + +var d3_time_scaleSteps = [ + 1e3, // 1-second + 5e3, // 5-second + 15e3, // 15-second + 3e4, // 30-second + 6e4, // 1-minute + 3e5, // 5-minute + 9e5, // 15-minute + 18e5, // 30-minute + 36e5, // 1-hour + 108e5, // 3-hour + 216e5, // 6-hour + 432e5, // 12-hour + 864e5, // 1-day + 1728e5, // 2-day + 6048e5, // 1-week + 2592e6, // 1-month + 7776e6, // 3-month + 31536e6 // 1-year +]; + +var d3_time_scaleLocalMethods = [ + [d3.time.seconds, 1], + [d3.time.seconds, 5], + [d3.time.seconds, 15], + [d3.time.seconds, 30], + [d3.time.minutes, 1], + [d3.time.minutes, 5], + [d3.time.minutes, 15], + [d3.time.minutes, 30], + [d3.time.hours, 1], + [d3.time.hours, 3], + [d3.time.hours, 6], + [d3.time.hours, 12], + [d3.time.days, 1], + [d3.time.days, 2], + [d3.time.weeks, 1], + [d3.time.months, 1], + [d3.time.months, 3], + [d3.time.years, 1] +]; + +var d3_time_scaleLocalFormats = [ + [d3.time.format("%Y"), function(d) { return true; }], + [d3.time.format("%B"), function(d) { return d.getMonth(); }], + [d3.time.format("%b %d"), function(d) { return d.getDate() != 1; }], + [d3.time.format("%a %d"), function(d) { return d.getDay() && d.getDate() != 1; }], + [d3.time.format("%I %p"), function(d) { return d.getHours(); }], + [d3.time.format("%I:%M"), function(d) { return d.getMinutes(); }], + [d3.time.format(":%S"), function(d) { return d.getSeconds(); }], + [d3.time.format(".%L"), function(d) { return d.getMilliseconds(); }] +]; + +var d3_time_scaleLinear = d3.scale.linear(), + d3_time_scaleLocalFormat = d3_time_scaleFormat(d3_time_scaleLocalFormats); + +d3_time_scaleLocalMethods.year = function(extent, m) { + return d3_time_scaleLinear.domain(extent.map(d3_time_scaleGetYear)).ticks(m).map(d3_time_scaleSetYear); +}; + +d3.time.scale = function() { + return d3_time_scale(d3.scale.linear(), d3_time_scaleLocalMethods, d3_time_scaleLocalFormat); +}; +var d3_time_scaleUTCMethods = [ + [d3.time.seconds.utc, 1], + [d3.time.seconds.utc, 5], + [d3.time.seconds.utc, 15], + [d3.time.seconds.utc, 30], + [d3.time.minutes.utc, 1], + [d3.time.minutes.utc, 5], + [d3.time.minutes.utc, 15], + [d3.time.minutes.utc, 30], + [d3.time.hours.utc, 1], + [d3.time.hours.utc, 3], + [d3.time.hours.utc, 6], + [d3.time.hours.utc, 12], + [d3.time.days.utc, 1], + [d3.time.days.utc, 2], + [d3.time.weeks.utc, 1], + [d3.time.months.utc, 1], + [d3.time.months.utc, 3], + [d3.time.years.utc, 1] +]; + +var d3_time_scaleUTCFormats = [ + [d3.time.format.utc("%Y"), function(d) { return true; }], + [d3.time.format.utc("%B"), function(d) { return d.getUTCMonth(); }], + [d3.time.format.utc("%b %d"), function(d) { return d.getUTCDate() != 1; }], + [d3.time.format.utc("%a %d"), function(d) { return d.getUTCDay() && d.getUTCDate() != 1; }], + [d3.time.format.utc("%I %p"), function(d) { return d.getUTCHours(); }], + [d3.time.format.utc("%I:%M"), function(d) { return d.getUTCMinutes(); }], + [d3.time.format.utc(":%S"), function(d) { return d.getUTCSeconds(); }], + [d3.time.format.utc(".%L"), function(d) { return d.getUTCMilliseconds(); }] +]; + +var d3_time_scaleUTCFormat = d3_time_scaleFormat(d3_time_scaleUTCFormats); + +function d3_time_scaleUTCSetYear(y) { + var d = new Date(Date.UTC(y, 0, 1)); + d.setUTCFullYear(y); // Y2K fail + return d; +} + +function d3_time_scaleUTCGetYear(d) { + var y = d.getUTCFullYear(), + d0 = d3_time_scaleUTCSetYear(y), + d1 = d3_time_scaleUTCSetYear(y + 1); + return y + (d - d0) / (d1 - d0); +} + +d3_time_scaleUTCMethods.year = function(extent, m) { + return d3_time_scaleLinear.domain(extent.map(d3_time_scaleUTCGetYear)).ticks(m).map(d3_time_scaleUTCSetYear); +}; + +d3.time.scale.utc = function() { + return d3_time_scale(d3.scale.linear(), d3_time_scaleUTCMethods, d3_time_scaleUTCFormat); +}; +})(); diff --git a/static/vendor/d3-2.7.5/d3.time.min.js b/static/vendor/d3-2.7.5/d3.time.min.js new file mode 100644 index 0000000..c51ad6d --- /dev/null +++ b/static/vendor/d3-2.7.5/d3.time.min.js @@ -0,0 +1 @@ +(function(){function b(a,b,c,d){var e,f,g=0,i=b.length,j=c.length;while(g=j)return-1;e=b.charCodeAt(g++);if(e==37){f=h[b.charAt(g++)];if(!f||(d=f(a,c,d))<0)return-1}else if(e!=c.charCodeAt(d++))return-1}return d}function i(a,b,c){return b.substring(c,c+=3).toLowerCase()in j?c:-1}function k(a,b,c){l.lastIndex=0;var d=l.exec(b.substring(c,c+10));return d?c+=d[0].length:-1}function n(a,b,c){var d=o[b.substring(c,c+=3).toLowerCase()];return d==null?-1:(a.setMonth(d),c)}function p(a,b,c){q.lastIndex=0;var d=q.exec(b.substring(c,c+12));return d?(a.setMonth(r[d[0].toLowerCase()]),c+=d[0].length):-1}function t(a,c,d){return b(a,g.c.toString(),c,d)}function u(a,c,d){return b(a,g.x.toString(),c,d)}function v(a,c,d){return b(a,g.X.toString(),c,d)}function w(a,b,c){G.lastIndex=0;var d=G.exec(b.substring(c,c+4));return d?(a.setFullYear(d[0]),c+=d[0].length):-1}function x(a,b,c){G.lastIndex=0;var d=G.exec(b.substring(c,c+2));return d?(a.setFullYear(y()+ +d[0]),c+=d[0].length):-1}function y(){return~~((new Date).getFullYear()/1e3)*1e3}function z(a,b,c){G.lastIndex=0;var d=G.exec(b.substring(c,c+2));return d?(a.setMonth(d[0]-1),c+=d[0].length):-1}function A(a,b,c){G.lastIndex=0;var d=G.exec(b.substring(c,c+2));return d?(a.setDate(+d[0]),c+=d[0].length):-1}function B(a,b,c){G.lastIndex=0;var d=G.exec(b.substring(c,c+2));return d?(a.setHours(+d[0]),c+=d[0].length):-1}function C(a,b,c){return a.hour12=!0,B(a,b,c)}function D(a,b,c){G.lastIndex=0;var d=G.exec(b.substring(c,c+2));return d?(a.setMinutes(+d[0]),c+=d[0].length):-1}function E(a,b,c){G.lastIndex=0;var d=G.exec(b.substring(c,c+2));return d?(a.setSeconds(+d[0]),c+=d[0].length):-1}function F(a,b,c){G.lastIndex=0;var d=G.exec(b.substring(c,c+3));return d?(a.setMilliseconds(+d[0]),c+=d[0].length):-1}function H(a,b,c){var d=I[b.substring(c,c+=2).toLowerCase()];return d==null?-1:(a.hour12pm=d,c)}function J(b){return new a(b.getFullYear(),0,1)}function K(a,b){return~~((b-a)/864e5-(b.getTimezoneOffset()-a.getTimezoneOffset())/1440)}function L(a){return d(1+K(J(a),a))}function M(a){var b=J(a);return c(~~((K(b,a)+b.getDay())/7))}function N(a){var b=J(a);return c(~~((K(b,a)+(b.getDay()+6)%7)/7))}function O(a){var b=a.getTimezoneOffset(),d=b>0?"-":"+",e=~~(Math.abs(b)/60),f=Math.abs(b)%60;return d+c(e)+c(f)}function P(){this._=new Date(Date.UTC.apply(this,arguments))}function R(a){return a.toISOString()}function S(a,b,c){return function(d,e,f){var g=a(d),h=[];g1)while(g=12?"PM":"AM"},S:function(a){return c(a.getSeconds())},U:M,w:function(a){return a.getDay()},W:N,x:d3.time.format("%m/%d/%y"),X:d3.time.format("%H:%M:%S"),y:function(a){return c(a.getFullYear()%100)},Y:function(a){return e(a.getFullYear()%1e4)},Z:O,"%":function(a){return"%"}},h={a:i,A:k,b:n,B:p,c:t,d:A,e:A,H:B,I:C,L:F,m:z,M:D,p:H,S:E,x:u,X:v,y:x,Y:w},j={sun:3,mon:3,tue:3,wed:3,thu:3,fri:3,sat:3},l=/^(?:Sunday|Monday|Tuesday|Wednesday|Thursday|Friday|Saturday)/ig,m=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],o={jan:0,feb:1,mar:2,apr:3,may:4,jun:5,jul:6,aug:7,sep:8,oct:9,nov:10,dec:11},q=/^(?:January|February|March|April|May|June|July|August|September|October|November|December)/ig,r={january:0,february:1,march:2,april:3,may:4,june:5,july:6,august:7,september:8,october:9,november:10,december:11},s=["January","February","March","April","May","June","July","August","September","October","November","December"],G=/\s*\d+/,I={am:0,pm:1};d3.time.format.utc=function(b){function d(b){try{a=P;var d=new a;return d._=b,c(d)}finally{a=Date}}var c=d3.time.format(b);return d.parse=function(b){try{a=P;var d=c.parse(b);return d&&d._}finally{a=Date}},d.toString=c.toString,d},P.prototype={getDate:function(){return this._.getUTCDate()},getDay:function(){return this._.getUTCDay()},getFullYear:function(){return this._.getUTCFullYear()},getHours:function(){return this._.getUTCHours()},getMilliseconds:function(){return this._.getUTCMilliseconds()},getMinutes:function(){return this._.getUTCMinutes()},getMonth:function(){return this._.getUTCMonth()},getSeconds:function(){return this._.getUTCSeconds()},getTimezoneOffset:function(){return 0},valueOf:function(){return this._.getTime()},setDate:function(a){this._.setUTCDate(a)},setDay:function(a){this._.setUTCDay(a)},setFullYear:function(a){this._.setUTCFullYear(a)},setHours:function(a){this._.setUTCHours(a)},setMilliseconds:function(a){this._.setUTCMilliseconds(a)},setMinutes:function(a){this._.setUTCMinutes(a)},setMonth:function(a){this._.setUTCMonth(a)},setSeconds:function(a){this._.setUTCSeconds(a)}};var Q=d3.time.format.utc("%Y-%m-%dT%H:%M:%S.%LZ");d3.time.format.iso=Date.prototype.toISOString?R:Q,R.parse=function(a){return new Date(a)},R.toString=Q.toString,d3.time.second=function(a){return new Date(~~(a/1e3)*1e3)},d3.time.second.utc=d3.time.second,d3.time.seconds=S(d3.time.second,function(a){a.setTime(a.getTime()+1e3)},function(a){return a.getSeconds()}),d3.time.seconds.utc=d3.time.seconds,d3.time.minute=function(a){return new Date(~~(a/6e4)*6e4)},d3.time.minute.utc=d3.time.minute,d3.time.minutes=S(d3.time.minute,T,function(a){return a.getMinutes()}),d3.time.minutes.utc=S(d3.time.minute,T,function(a){return a.getUTCMinutes()}),d3.time.hour=function(a){var b=a.getTimezoneOffset()/60;return new Date((~~(a/36e5-b)+b)*36e5)},d3.time.hour.utc=function(a){return new Date(~~(a/36e5)*36e5)},d3.time.hours=S(d3.time.hour,U,function(a){return a.getHours()}),d3.time.hours.utc=S(d3.time.hour.utc,U,function(a){return a.getUTCHours()}),d3.time.day=function(a){return new Date(a.getFullYear(),a.getMonth(),a.getDate())},d3.time.day.utc=function(a){return new Date(~~(a/864e5)*864e5)},d3.time.days=S(d3.time.day,function(a){a.setDate(a.getDate()+1)},function(a){return a.getDate()-1}),d3.time.days.utc=S(d3.time.day.utc,function(a){a.setUTCDate(a.getUTCDate()+1)},function(a){return a.getUTCDate()-1}),d3.time.week=function(a){return(a=d3.time.day(a)).setDate(a.getDate()-a.getDay()),a},d3.time.week.utc=function(a){return(a=d3.time.day.utc(a)).setUTCDate(a.getUTCDate()-a.getUTCDay()),a},d3.time.weeks=S(d3.time.week,function(a){a.setDate(a.getDate()+7)},function(a){return~~((a-new Date(a.getFullYear(),0,1))/6048e5)}),d3.time.weeks.utc=S(d3.time.week.utc,function(a){a.setUTCDate(a.getUTCDate()+7)},function(a){return~~((a-Date.UTC(a.getUTCFullYear(),0,1))/6048e5)}),d3.time.month=function(a){return new Date(a.getFullYear(),a.getMonth(),1)},d3.time.month.utc=function(a){return new Date(Date.UTC(a.getUTCFullYear(),a.getUTCMonth(),1))},d3.time.months=S(d3.time.month,function(a){a.setMonth(a.getMonth()+1)},function(a){return a.getMonth()}),d3.time.months.utc=S(d3.time.month.utc,function(a){a.setUTCMonth(a.getUTCMonth()+1)},function(a){return a.getUTCMonth()}),d3.time.year=function(a){return new Date(a.getFullYear(),0,1)},d3.time.year.utc=function(a){return new Date(Date.UTC(a.getUTCFullYear(),0,1))},d3.time.years=S(d3.time.year,function(a){a.setFullYear(a.getFullYear()+1)},function(a){return a.getFullYear()}),d3.time.years.utc=S(d3.time.year.utc,function(a){a.setUTCFullYear(a.getUTCFullYear()+1)},function(a){return a.getUTCFullYear()});var _=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6],ba=[[d3.time.seconds,1],[d3.time.seconds,5],[d3.time.seconds,15],[d3.time.seconds,30],[d3.time.minutes,1],[d3.time.minutes,5],[d3.time.minutes,15],[d3.time.minutes,30],[d3.time.hours,1],[d3.time.hours,3],[d3.time.hours,6],[d3.time.hours,12],[d3.time.days,1],[d3.time.days,2],[d3.time.weeks,1],[d3.time.months,1],[d3.time.months,3],[d3.time.years,1]],bb=[[d3.time.format("%Y"),function(a){return!0}],[d3.time.format("%B"),function(a){return a.getMonth()}],[d3.time.format("%b %d"),function(a){return a.getDate()!=1}],[d3.time.format("%a %d"),function(a){return a.getDay()&&a.getDate()!=1}],[d3.time.format("%I %p"),function(a){return a.getHours()}],[d3.time.format("%I:%M"),function(a){return a.getMinutes()}],[d3.time.format(":%S"),function(a){return a.getSeconds()}],[d3.time.format(".%L"),function(a){return a.getMilliseconds()}]],bc=d3.scale.linear(),bd=Y(bb);ba.year=function(a,b){return bc.domain(a.map($)).ticks(b).map(Z)},d3.time.scale=function(){return V(d3.scale.linear(),ba,bd)};var be=[[d3.time.seconds.utc,1],[d3.time.seconds.utc,5],[d3.time.seconds.utc,15],[d3.time.seconds.utc,30],[d3.time.minutes.utc,1],[d3.time.minutes.utc,5],[d3.time.minutes.utc,15],[d3.time.minutes.utc,30],[d3.time.hours.utc,1],[d3.time.hours.utc,3],[d3.time.hours.utc,6],[d3.time.hours.utc,12],[d3.time.days.utc,1],[d3.time.days.utc,2],[d3.time.weeks.utc,1],[d3.time.months.utc,1],[d3.time.months.utc,3],[d3.time.years.utc,1]],bf=[[d3.time.format.utc("%Y"),function(a){return!0}],[d3.time.format.utc("%B"),function(a){return a.getUTCMonth()}],[d3.time.format.utc("%b %d"),function(a){return a.getUTCDate()!=1}],[d3.time.format.utc("%a %d"),function(a){return a.getUTCDay()&&a.getUTCDate()!=1}],[d3.time.format.utc("%I %p"),function(a){return a.getUTCHours()}],[d3.time.format.utc("%I:%M"),function(a){return a.getUTCMinutes()}],[d3.time.format.utc(":%S"),function(a){return a.getUTCSeconds()}],[d3.time.format.utc(".%L"),function(a){return a.getUTCMilliseconds()}]],bg=Y(bf);be.year=function(a,b){return bc.domain(a.map(bi)).ticks(b).map(bh)},d3.time.scale.utc=function(){return V(d3.scale.linear(),be,bg)}})(); \ No newline at end of file diff --git a/static/vendor/d3-2.7.5/examples/albers/albers.html b/static/vendor/d3-2.7.5/examples/albers/albers.html new file mode 100644 index 0000000..545d5ef --- /dev/null +++ b/static/vendor/d3-2.7.5/examples/albers/albers.html @@ -0,0 +1,168 @@ + + + + + Albers Projection + + + + + + + +

Albers Projection

+

+

origin.longitude: -98
+
origin.latitude: 38

+

parallels: 29.5,45.5

+

scale: 1000

+

translate.x: 480
+
translate.y: 250
+ + + diff --git a/static/vendor/d3-2.7.5/examples/area/area-radial.html b/static/vendor/d3-2.7.5/examples/area/area-radial.html new file mode 100644 index 0000000..90df9a2 --- /dev/null +++ b/static/vendor/d3-2.7.5/examples/area/area-radial.html @@ -0,0 +1,48 @@ + + + + Area Chart (Radial) + + + + + + + diff --git a/static/vendor/d3-2.7.5/examples/area/area.html b/static/vendor/d3-2.7.5/examples/area/area.html new file mode 100644 index 0000000..944584e --- /dev/null +++ b/static/vendor/d3-2.7.5/examples/area/area.html @@ -0,0 +1,113 @@ + + + + Area Chart + + + + + + + diff --git a/static/vendor/d3-2.7.5/examples/axis/axis-alternating.html b/static/vendor/d3-2.7.5/examples/axis/axis-alternating.html new file mode 100644 index 0000000..73d09b1 --- /dev/null +++ b/static/vendor/d3-2.7.5/examples/axis/axis-alternating.html @@ -0,0 +1,50 @@ + + + + + + + + + + diff --git a/static/vendor/d3-2.7.5/examples/axis/axis-ggplot2.html b/static/vendor/d3-2.7.5/examples/axis/axis-ggplot2.html new file mode 100644 index 0000000..9a1f6a1 --- /dev/null +++ b/static/vendor/d3-2.7.5/examples/axis/axis-ggplot2.html @@ -0,0 +1,68 @@ + + + + + + + + + + diff --git a/static/vendor/d3-2.7.5/examples/axis/axis-multiples.html b/static/vendor/d3-2.7.5/examples/axis/axis-multiples.html new file mode 100644 index 0000000..2549b23 --- /dev/null +++ b/static/vendor/d3-2.7.5/examples/axis/axis-multiples.html @@ -0,0 +1,117 @@ + + + + + + + + + + + + diff --git a/static/vendor/d3-2.7.5/examples/axis/axis-orientations.html b/static/vendor/d3-2.7.5/examples/axis/axis-orientations.html new file mode 100644 index 0000000..f10eb88 --- /dev/null +++ b/static/vendor/d3-2.7.5/examples/axis/axis-orientations.html @@ -0,0 +1,63 @@ + + + + + + + + + + + diff --git a/static/vendor/d3-2.7.5/examples/axis/axis-transition.html b/static/vendor/d3-2.7.5/examples/axis/axis-transition.html new file mode 100644 index 0000000..e88ada3 --- /dev/null +++ b/static/vendor/d3-2.7.5/examples/axis/axis-transition.html @@ -0,0 +1,153 @@ + + + + + + + + + + + + diff --git a/static/vendor/d3-2.7.5/examples/azimuthal/azimuthal.css b/static/vendor/d3-2.7.5/examples/azimuthal/azimuthal.css new file mode 100644 index 0000000..f3da8df --- /dev/null +++ b/static/vendor/d3-2.7.5/examples/azimuthal/azimuthal.css @@ -0,0 +1,21 @@ +@import url("../../lib/jquery-ui/jquery-ui.css"); + +body, .ui-widget { + font: 14px Helvetica Neue; +} + +svg { + width: 960px; + height: 500px; + border: solid 1px #ccc; + background: #eee; +} + +path { + fill: #ccc; + stroke: #fff; +} + +div { + width: 960px; +} diff --git a/static/vendor/d3-2.7.5/examples/azimuthal/azimuthal.html b/static/vendor/d3-2.7.5/examples/azimuthal/azimuthal.html new file mode 100644 index 0000000..95c5632 --- /dev/null +++ b/static/vendor/d3-2.7.5/examples/azimuthal/azimuthal.html @@ -0,0 +1,99 @@ + + + + + Azimuthal Projection + + + + + + + +

Azimuthal Projection

+

+ +

origin.longitude: 0
+
origin.latitude: 0

+

scale: 240

+

translate.x: 480
+
translate.y: 250
+ + + diff --git a/static/vendor/d3-2.7.5/examples/azimuthal/azimuthal.js b/static/vendor/d3-2.7.5/examples/azimuthal/azimuthal.js new file mode 100644 index 0000000..36969f9 --- /dev/null +++ b/static/vendor/d3-2.7.5/examples/azimuthal/azimuthal.js @@ -0,0 +1,29 @@ +var xy = d3.geo.azimuthal().scale(240).mode("stereographic"), + circle = d3.geo.greatCircle(), + path = d3.geo.path().projection(xy), + svg = d3.select("body").append("svg"); + +d3.json("../data/world-countries.json", function(collection) { + svg.selectAll("path") + .data(collection.features) + .enter().append("path") + .attr("d", function(d) { return path(circle.clip(d)); }) + .append("title") + .text(function(d) { return d.properties.name; }); +}); + +function refresh(duration) { + var p = svg.selectAll("path"); + if (duration) p = p.transition().duration(duration); + p.attr("d", function(d) { return path(circle.clip(d)); }); + d3.select("#lon span") + .text(xy.origin()[0]); + d3.select("#lat span") + .text(xy.origin()[1]); + d3.select("#scale span") + .text(xy.scale()); + d3.select("#translate-x span") + .text(xy.translate()[0]); + d3.select("#translate-y span") + .text(xy.translate()[1]); +} diff --git a/static/vendor/d3-2.7.5/examples/bar/bar-hierarchy.html b/static/vendor/d3-2.7.5/examples/bar/bar-hierarchy.html new file mode 100644 index 0000000..f31621f --- /dev/null +++ b/static/vendor/d3-2.7.5/examples/bar/bar-hierarchy.html @@ -0,0 +1,223 @@ + + + + Hierarchical Bar Chart + + + + + + + + diff --git a/static/vendor/d3-2.7.5/examples/bar/bar.html b/static/vendor/d3-2.7.5/examples/bar/bar.html new file mode 100644 index 0000000..9f1e2bc --- /dev/null +++ b/static/vendor/d3-2.7.5/examples/bar/bar.html @@ -0,0 +1,101 @@ + + + + Bar Chart + + + + + + + + diff --git a/static/vendor/d3-2.7.5/examples/bar/sample-data.csv b/static/vendor/d3-2.7.5/examples/bar/sample-data.csv new file mode 100644 index 0000000..bff541f --- /dev/null +++ b/static/vendor/d3-2.7.5/examples/bar/sample-data.csv @@ -0,0 +1,53 @@ +name,value +AL,4708708 +AK,698473 +AZ,6595778 +AR,2889450 +CA,36961664 +CO,5024748 +CT,3518288 +DE,885122 +DC,599657 +FL,18537969 +GA,9829211 +HI,1295178 +ID,1545801 +IL,12910409 +IN,6423113 +IA,3007856 +KS,2818747 +KY,4314113 +LA,4492076 +ME,1318301 +MD,5699478 +MA,6593587 +MI,9969727 +MN,5266214 +MS,2951996 +MO,5987580 +MT,974989 +NE,1796619 +NV,2643085 +NH,1324575 +NJ,8707739 +NM,2009671 +NY,19541453 +NC,9380884 +ND,646844 +OH,11542645 +OK,3687050 +OR,3825657 +PA,12604767 +RI,1053209 +SC,4561242 +SD,812383 +TN,6296254 +TX,24782302 +UT,2784572 +VT,621760 +VA,7882590 +WA,6664195 +WV,1819777 +WI,5654774 +WY,544270 +PR,3967288 diff --git a/static/vendor/d3-2.7.5/examples/bonne/bonne.html b/static/vendor/d3-2.7.5/examples/bonne/bonne.html new file mode 100644 index 0000000..43ad7ff --- /dev/null +++ b/static/vendor/d3-2.7.5/examples/bonne/bonne.html @@ -0,0 +1,159 @@ + + + + + Bonne Projection + + + + + + + +

Bonne Projection

+

+

origin.longitude: 0
+
origin.latitude: 0

+

parallel: 45

+

scale: 200

+

translate.x: 480
+
translate.y: 250
+ + + diff --git a/static/vendor/d3-2.7.5/examples/box/box.css b/static/vendor/d3-2.7.5/examples/box/box.css new file mode 100644 index 0000000..0dd6f33 --- /dev/null +++ b/static/vendor/d3-2.7.5/examples/box/box.css @@ -0,0 +1,4 @@ +.box { font: 10px sans-serif; } +.box line, .box rect, .box circle { stroke: #000; stroke-width: 1.5px; fill: #fff; } +.box .center { stroke-dasharray: 3 3; } +.box .outlier { stroke: #ccc; fill: none; } diff --git a/static/vendor/d3-2.7.5/examples/box/box.html b/static/vendor/d3-2.7.5/examples/box/box.html new file mode 100644 index 0000000..b1d1d5c --- /dev/null +++ b/static/vendor/d3-2.7.5/examples/box/box.html @@ -0,0 +1,19 @@ + + + + Box Plot Charts + + + + + + + +
+

+

+ + + diff --git a/static/vendor/d3-2.7.5/examples/box/box.js b/static/vendor/d3-2.7.5/examples/box/box.js new file mode 100644 index 0000000..8a673ee --- /dev/null +++ b/static/vendor/d3-2.7.5/examples/box/box.js @@ -0,0 +1,68 @@ +var w = 120, + h = 500, + m = [10, 50, 20, 50], // top right bottom left + min = Infinity, + max = -Infinity; + +var chart = d3.chart.box() + .whiskers(iqr(1.5)) + .width(w - m[1] - m[3]) + .height(h - m[0] - m[2]); + +d3.csv("../data/morley.csv", function(csv) { + var data = []; + + csv.forEach(function(x) { + var e = ~~x.Expt - 1, + r = ~~x.Run - 1, + s = ~~x.Speed, + d = data[e]; + if (!d) d = data[e] = [s]; + else d.push(s); + if (s > max) max = s; + if (s < min) min = s; + }); + + chart.domain([min, max]); + + var vis = d3.select("#chart").selectAll("svg") + .data(data) + .enter().append("svg") + .attr("class", "box") + .attr("width", w) + .attr("height", h) + .append("g") + .attr("transform", "translate(" + m[3] + "," + m[0] + ")") + .call(chart); + + chart.duration(1000); + window.transition = function() { + vis.map(randomize).call(chart); + }; +}); + +function randomize(d) { + if (!d.randomizer) d.randomizer = randomizer(d); + return d.map(d.randomizer); +} + +function randomizer(d) { + var k = d3.max(d) * .02; + return function(d) { + return Math.max(min, Math.min(max, d + k * (Math.random() - .5))); + }; +} + +// Returns a function to compute the interquartile range. +function iqr(k) { + return function(d, i) { + var q1 = d.quartiles[0], + q3 = d.quartiles[2], + iqr = (q3 - q1) * k, + i = -1, + j = d.length; + while (d[++i] < q1 - iqr); + while (d[--j] > q3 + iqr); + return [i, j]; + }; +} diff --git a/static/vendor/d3-2.7.5/examples/brush/brush-ordinal.html b/static/vendor/d3-2.7.5/examples/brush/brush-ordinal.html new file mode 100644 index 0000000..d5d73ae --- /dev/null +++ b/static/vendor/d3-2.7.5/examples/brush/brush-ordinal.html @@ -0,0 +1,92 @@ + + + + + Brush + + + + + + + diff --git a/static/vendor/d3-2.7.5/examples/brush/brush-x.html b/static/vendor/d3-2.7.5/examples/brush/brush-x.html new file mode 100644 index 0000000..a771330 --- /dev/null +++ b/static/vendor/d3-2.7.5/examples/brush/brush-x.html @@ -0,0 +1,92 @@ + + + + + Brush + + + + + + + diff --git a/static/vendor/d3-2.7.5/examples/brush/brush-y.html b/static/vendor/d3-2.7.5/examples/brush/brush-y.html new file mode 100644 index 0000000..e780ad6 --- /dev/null +++ b/static/vendor/d3-2.7.5/examples/brush/brush-y.html @@ -0,0 +1,91 @@ + + + + + Brush + + + + + + + diff --git a/static/vendor/d3-2.7.5/examples/brush/brush.html b/static/vendor/d3-2.7.5/examples/brush/brush.html new file mode 100644 index 0000000..e8be3d0 --- /dev/null +++ b/static/vendor/d3-2.7.5/examples/brush/brush.html @@ -0,0 +1,98 @@ + + + + + Brush + + + + + + + diff --git a/static/vendor/d3-2.7.5/examples/bubble/bubble.css b/static/vendor/d3-2.7.5/examples/bubble/bubble.css new file mode 100644 index 0000000..d667292 --- /dev/null +++ b/static/vendor/d3-2.7.5/examples/bubble/bubble.css @@ -0,0 +1,8 @@ +circle { + stroke: #fff; + stroke-width: 1.5px; +} + +text { + font: 10px sans-serif; +} diff --git a/static/vendor/d3-2.7.5/examples/bubble/bubble.html b/static/vendor/d3-2.7.5/examples/bubble/bubble.html new file mode 100644 index 0000000..2bb73e9 --- /dev/null +++ b/static/vendor/d3-2.7.5/examples/bubble/bubble.html @@ -0,0 +1,14 @@ + + + + + Bubble Chart + + + + + +
+ + + diff --git a/static/vendor/d3-2.7.5/examples/bubble/bubble.js b/static/vendor/d3-2.7.5/examples/bubble/bubble.js new file mode 100644 index 0000000..5dbff4c --- /dev/null +++ b/static/vendor/d3-2.7.5/examples/bubble/bubble.js @@ -0,0 +1,46 @@ +var r = 960, + format = d3.format(",d"), + fill = d3.scale.category20c(); + +var bubble = d3.layout.pack() + .sort(null) + .size([r, r]); + +var vis = d3.select("#chart").append("svg") + .attr("width", r) + .attr("height", r) + .attr("class", "bubble"); + +d3.json("../data/flare.json", function(json) { + var node = vis.selectAll("g.node") + .data(bubble.nodes(classes(json)) + .filter(function(d) { return !d.children; })) + .enter().append("g") + .attr("class", "node") + .attr("transform", function(d) { return "translate(" + d.x + "," + d.y + ")"; }); + + node.append("title") + .text(function(d) { return d.className + ": " + format(d.value); }); + + node.append("circle") + .attr("r", function(d) { return d.r; }) + .style("fill", function(d) { return fill(d.packageName); }); + + node.append("text") + .attr("text-anchor", "middle") + .attr("dy", ".3em") + .text(function(d) { return d.className.substring(0, d.r / 3); }); +}); + +// Returns a flattened hierarchy containing all leaf nodes under the root. +function classes(root) { + var classes = []; + + function recurse(name, node) { + if (node.children) node.children.forEach(function(child) { recurse(node.name, child); }); + else classes.push({packageName: name, className: node.name, value: node.size}); + } + + recurse(null, root); + return {children: classes}; +} diff --git a/static/vendor/d3-2.7.5/examples/bullet/bullet.css b/static/vendor/d3-2.7.5/examples/bullet/bullet.css new file mode 100644 index 0000000..50002b2 --- /dev/null +++ b/static/vendor/d3-2.7.5/examples/bullet/bullet.css @@ -0,0 +1,10 @@ +.bullet { font: 10px sans-serif; } +.bullet .marker { stroke: #000; stroke-width: 2px; } +.bullet .tick line { stroke: #666; stroke-width: .5px; } +.bullet .range.s0 { fill: #eee; } +.bullet .range.s1 { fill: #ddd; } +.bullet .range.s2 { fill: #ccc; } +.bullet .measure.s0 { fill: lightsteelblue; } +.bullet .measure.s1 { fill: steelblue; } +.bullet .title { font-size: 14px; font-weight: bold; } +.bullet .subtitle { fill: #999; } diff --git a/static/vendor/d3-2.7.5/examples/bullet/bullet.html b/static/vendor/d3-2.7.5/examples/bullet/bullet.html new file mode 100644 index 0000000..563b548 --- /dev/null +++ b/static/vendor/d3-2.7.5/examples/bullet/bullet.html @@ -0,0 +1,18 @@ + + + + Bullet Charts + + + + + + +
+

+

+ + + diff --git a/static/vendor/d3-2.7.5/examples/bullet/bullet.js b/static/vendor/d3-2.7.5/examples/bullet/bullet.js new file mode 100644 index 0000000..213e981 --- /dev/null +++ b/static/vendor/d3-2.7.5/examples/bullet/bullet.js @@ -0,0 +1,53 @@ +var w = 960, + h = 50, + m = [5, 40, 20, 120]; // top right bottom left + +var chart = d3.chart.bullet() + .width(w - m[1] - m[3]) + .height(h - m[0] - m[2]); + +d3.json("bullets.json", function(data) { + + var vis = d3.select("#chart").selectAll("svg") + .data(data) + .enter().append("svg") + .attr("class", "bullet") + .attr("width", w) + .attr("height", h) + .append("g") + .attr("transform", "translate(" + m[3] + "," + m[0] + ")") + .call(chart); + + var title = vis.append("g") + .attr("text-anchor", "end") + .attr("transform", "translate(-6," + (h - m[0] - m[2]) / 2 + ")"); + + title.append("text") + .attr("class", "title") + .text(function(d) { return d.title; }); + + title.append("text") + .attr("class", "subtitle") + .attr("dy", "1em") + .text(function(d) { return d.subtitle; }); + + chart.duration(1000); + window.transition = function() { + vis.map(randomize).call(chart); + }; +}); + +function randomize(d) { + if (!d.randomizer) d.randomizer = randomizer(d); + d.ranges = d.ranges.map(d.randomizer); + d.markers = d.markers.map(d.randomizer); + d.measures = d.measures.map(d.randomizer); + return d; +} + +function randomizer(d) { + var k = d3.max(d.ranges) * .2; + return function(d) { + return Math.max(0, d + k * (Math.random() - .5)); + }; +} diff --git a/static/vendor/d3-2.7.5/examples/bullet/bullets.json b/static/vendor/d3-2.7.5/examples/bullet/bullets.json new file mode 100644 index 0000000..97cb1c1 --- /dev/null +++ b/static/vendor/d3-2.7.5/examples/bullet/bullets.json @@ -0,0 +1,7 @@ +[ + {"title":"Revenue","subtitle":"US$, in thousands","ranges":[150,225,300],"measures":[220,270],"markers":[250]}, + {"title":"Profit","subtitle":"%","ranges":[20,25,30],"measures":[21,23],"markers":[26]}, + {"title":"Order Size","subtitle":"US$, average","ranges":[350,500,600],"measures":[100,320],"markers":[550]}, + {"title":"New Customers","subtitle":"count","ranges":[1400,2000,2500],"measures":[1000,1650],"markers":[2100]}, + {"title":"Satisfaction","subtitle":"out of 5","ranges":[3.5,4.25,5],"measures":[3.2,4.7],"markers":[4.4]} +] diff --git a/static/vendor/d3-2.7.5/examples/bundle/bundle-radial.css b/static/vendor/d3-2.7.5/examples/bundle/bundle-radial.css new file mode 100644 index 0000000..a14751c --- /dev/null +++ b/static/vendor/d3-2.7.5/examples/bundle/bundle-radial.css @@ -0,0 +1,9 @@ +.node { + font: 10px sans-serif; +} + +.link { + stroke: steelblue; + stroke-opacity: .4; + fill: none; +} diff --git a/static/vendor/d3-2.7.5/examples/bundle/bundle-radial.html b/static/vendor/d3-2.7.5/examples/bundle/bundle-radial.html new file mode 100644 index 0000000..e4fcfa1 --- /dev/null +++ b/static/vendor/d3-2.7.5/examples/bundle/bundle-radial.html @@ -0,0 +1,15 @@ + + + + + Hierarchical Edge Bundling (Radial Tree) + + + + + + +
+ + + diff --git a/static/vendor/d3-2.7.5/examples/bundle/bundle-radial.js b/static/vendor/d3-2.7.5/examples/bundle/bundle-radial.js new file mode 100644 index 0000000..9021f12 --- /dev/null +++ b/static/vendor/d3-2.7.5/examples/bundle/bundle-radial.js @@ -0,0 +1,50 @@ +var r = 960 / 2, + splines = []; + +var cluster = d3.layout.cluster() + .size([360, r - 120]) + .sort(null) + .value(function(d) { return d.size; }); + +var bundle = d3.layout.bundle(); + +var line = d3.svg.line.radial() + .interpolate("bundle") + .tension(.85) + .radius(function(d) { return d.y; }) + .angle(function(d) { return d.x / 180 * Math.PI; }); + +var vis = d3.select("#chart").append("svg") + .attr("width", r * 2) + .attr("height", r * 2) + .append("g") + .attr("transform", "translate(" + r + "," + r + ")"); + +d3.json("../data/flare-imports.json", function(classes) { + var nodes = cluster.nodes(packages.root(classes)), + links = packages.imports(nodes); + + vis.selectAll("path.link") + .data(splines = bundle(links)) + .enter().append("path") + .attr("class", "link") + .attr("d", line); + + vis.selectAll("g.node") + .data(nodes.filter(function(n) { return !n.children; })) + .enter().append("g") + .attr("class", "node") + .attr("transform", function(d) { return "rotate(" + (d.x - 90) + ")translate(" + d.y + ")"; }) + .append("text") + .attr("dx", function(d) { return d.x < 180 ? 8 : -8; }) + .attr("dy", ".31em") + .attr("text-anchor", function(d) { return d.x < 180 ? "start" : "end"; }) + .attr("transform", function(d) { return d.x < 180 ? null : "rotate(180)"; }) + .text(function(d) { return d.key; }); +}); + +d3.select(window).on("mousemove", function() { + vis.selectAll("path.link") + .data(splines) + .attr("d", line.tension(Math.min(1, d3.event.clientX / 960))); +}); diff --git a/static/vendor/d3-2.7.5/examples/bundle/bundle-treemap.css b/static/vendor/d3-2.7.5/examples/bundle/bundle-treemap.css new file mode 100644 index 0000000..62d9b41 --- /dev/null +++ b/static/vendor/d3-2.7.5/examples/bundle/bundle-treemap.css @@ -0,0 +1,14 @@ +.cell { + border: solid 1px white; + font: 10px sans-serif; + line-height: 12px; + overflow: hidden; + position: absolute; + text-indent: 2px; +} + +.link { + stroke: #000; + stroke-opacity: .5; + fill: none; +} diff --git a/static/vendor/d3-2.7.5/examples/bundle/bundle-treemap.html b/static/vendor/d3-2.7.5/examples/bundle/bundle-treemap.html new file mode 100644 index 0000000..9753b03 --- /dev/null +++ b/static/vendor/d3-2.7.5/examples/bundle/bundle-treemap.html @@ -0,0 +1,16 @@ + + + + + Hierarchical Edge Bundling (Treemap) + + + + + + + +
+ + + diff --git a/static/vendor/d3-2.7.5/examples/bundle/bundle-treemap.js b/static/vendor/d3-2.7.5/examples/bundle/bundle-treemap.js new file mode 100644 index 0000000..969f293 --- /dev/null +++ b/static/vendor/d3-2.7.5/examples/bundle/bundle-treemap.js @@ -0,0 +1,53 @@ +var w = 960, + h = 500, + fill = d3.scale.ordinal().range(colorbrewer.Greys[9].slice(1, 4)), + stroke = d3.scale.linear().domain([0, 1e4]).range(["brown", "steelblue"]); + +var treemap = d3.layout.treemap() + .size([w, h]) + .value(function(d) { return d.size; }); + +var bundle = d3.layout.bundle(); + +var div = d3.select("#chart").append("div") + .style("position", "relative") + .style("width", w + "px") + .style("height", h + "px"); + +var line = d3.svg.line() + .interpolate("bundle") + .tension(.85) + .x(function(d) { return d.x + d.dx / 2; }) + .y(function(d) { return d.y + d.dy / 2; }); + +d3.json("../data/flare-imports.json", function(classes) { + var nodes = treemap.nodes(packages.root(classes)), + links = packages.imports(nodes); + + div.selectAll("div") + .data(nodes) + .enter().append("div") + .attr("class", "cell") + .style("background", function(d) { return d.children ? fill(d.key) : null; }) + .call(cell) + .text(function(d) { return d.children ? null : d.key; }); + + div.append("svg") + .attr("width", w) + .attr("height", h) + .style("position", "absolute") + .selectAll("path.link") + .data(bundle(links)) + .enter().append("path") + .style("stroke", function(d) { return stroke(d[0].value); }) + .attr("class", "link") + .attr("d", line); +}); + +function cell() { + this + .style("left", function(d) { return d.x + "px"; }) + .style("top", function(d) { return d.y + "px"; }) + .style("width", function(d) { return d.dx - 1 + "px"; }) + .style("height", function(d) { return d.dy - 1 + "px"; }); +} diff --git a/static/vendor/d3-2.7.5/examples/bundle/packages.js b/static/vendor/d3-2.7.5/examples/bundle/packages.js new file mode 100644 index 0000000..4bf5c8a --- /dev/null +++ b/static/vendor/d3-2.7.5/examples/bundle/packages.js @@ -0,0 +1,49 @@ +(function() { + packages = { + + // Lazily construct the package hierarchy from class names. + root: function(classes) { + var map = {}; + + function find(name, data) { + var node = map[name], i; + if (!node) { + node = map[name] = data || {name: name, children: []}; + if (name.length) { + node.parent = find(name.substring(0, i = name.lastIndexOf("."))); + node.parent.children.push(node); + node.key = name.substring(i + 1); + } + } + return node; + } + + classes.forEach(function(d) { + find(d.name, d); + }); + + return map[""]; + }, + + // Return a list of imports for the given array of nodes. + imports: function(nodes) { + var map = {}, + imports = []; + + // Compute a map from name to node. + nodes.forEach(function(d) { + map[d.name] = d; + }); + + // For each import, construct a link from the source to target node. + nodes.forEach(function(d) { + if (d.imports) d.imports.forEach(function(i) { + imports.push({source: map[d.name], target: map[i]}); + }); + }); + + return imports; + } + + }; +})(); diff --git a/static/vendor/d3-2.7.5/examples/button.css b/static/vendor/d3-2.7.5/examples/button.css new file mode 100644 index 0000000..b7c7ada --- /dev/null +++ b/static/vendor/d3-2.7.5/examples/button.css @@ -0,0 +1,35 @@ +button { + font: 14px Helvetica Neue; + background-color: #222; + background-image: -moz-linear-gradient(top, rgba(255,255,255,.25), rgba(255,255,255,.11)); + background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, rgba(255,255,255,.25)),color-stop(1, rgba(255,255,255,.11))); + background-image: -webkit-linear-gradient(rgba(255,255,255,.25), rgba(255,255,255,.11)); + color: #fff; + text-rendering: optimizeLegibility; + text-shadow: 0 -1px 1px #222; + padding: 6px 10px 6px 10px; + border: 0; + border-radius: 0; + border-bottom: 1px solid #222; + margin: 0; + -moz-box-shadow: 0 1px 3px #999; + -webkit-box-shadow: 0 1px 3px #999; +} + +button.first { + border-top-left-radius: 5px; + border-bottom-left-radius: 5px; +} + +button.last { + border-top-right-radius: 5px; + border-bottom-right-radius: 5px; +} + +button.active { + background-color: rgb(65,102,133); +} + +button:hover { + background-color: steelblue; +} diff --git a/static/vendor/d3-2.7.5/examples/calendar/calendar.css b/static/vendor/d3-2.7.5/examples/calendar/calendar.css new file mode 100644 index 0000000..13557dc --- /dev/null +++ b/static/vendor/d3-2.7.5/examples/calendar/calendar.css @@ -0,0 +1,15 @@ +#chart { + font: 10px sans-serif; + shape-rendering: crispEdges; +} + +.day { + fill: #fff; + stroke: #ccc; +} + +.month { + fill: none; + stroke: #000; + stroke-width: 2px; +} diff --git a/static/vendor/d3-2.7.5/examples/calendar/dji-area.html b/static/vendor/d3-2.7.5/examples/calendar/dji-area.html new file mode 100644 index 0000000..22c00f1 --- /dev/null +++ b/static/vendor/d3-2.7.5/examples/calendar/dji-area.html @@ -0,0 +1,120 @@ + + + + DJI + + + + + + + + + diff --git a/static/vendor/d3-2.7.5/examples/calendar/dji.csv b/static/vendor/d3-2.7.5/examples/calendar/dji.csv new file mode 100644 index 0000000..b441a78 --- /dev/null +++ b/static/vendor/d3-2.7.5/examples/calendar/dji.csv @@ -0,0 +1,5233 @@ +Date,Open,High,Low,Close,Volume,Adj Close +2010-10-01,10789.72,10907.41,10759.14,10829.68,4298910000,10829.68 +2010-09-30,10835.96,10960.99,10732.27,10788.05,4284160000,10788.05 +2010-09-29,10857.98,10901.96,10759.75,10835.28,3990280000,10835.28 +2010-09-28,10809.85,10905.44,10714.03,10858.14,4025840000,10858.14 +2010-09-27,10860.03,10902.52,10776.44,10812.04,3587860000,10812.04 +2010-09-24,10664.39,10897.83,10664.39,10860.26,4123950000,10860.26 +2010-09-23,10738.48,10779.65,10610.12,10662.42,3847850000,10662.42 +2010-09-22,10761.11,10829.75,10682.40,10739.31,3911070000,10739.31 +2010-09-21,10753.39,10844.89,10674.83,10761.03,4175660000,10761.03 +2010-09-20,10608.08,10783.51,10594.38,10753.62,3364080000,10753.62 +2010-09-17,10595.44,10689.29,10529.67,10607.85,4086140000,10607.85 +2010-09-16,10571.75,10624.58,10499.43,10594.83,3364080000,10594.83 +2010-09-15,10526.42,10609.21,10453.15,10572.73,3369840000,10572.73 +2010-09-14,10544.81,10622.69,10460.34,10526.49,4521050000,10526.49 +2010-09-13,10458.60,10605.73,10458.45,10544.13,4521050000,10544.13 +2010-09-10,10415.01,10502.80,10376.34,10462.77,3061160000,10462.77 +2010-09-09,10388.22,10515.86,10359.23,10415.24,3387770000,10415.24 +2010-09-08,10338.57,10460.50,10318.93,10387.01,3224640000,10387.01 +2010-09-07,10446.80,10448.99,10304.44,10340.69,3107380000,10340.69 +2010-09-03,10321.92,10484.71,10321.92,10447.93,3534500000,10447.93 +2010-09-02,10270.08,10350.98,10211.80,10320.10,3704210000,10320.10 +2010-09-01,10016.01,10305.87,10016.01,10269.47,4396880000,10269.47 +2010-08-31,10006.42,10101.53,9915.73,10014.72,4038770000,10014.72 +2010-08-30,10145.58,10170.10,10005.56,10009.73,2917990000,10009.73 +2010-08-27,9982.40,10176.30,9925.11,10150.65,4102460000,10150.65 +2010-08-26,10059.83,10138.12,9959.17,9985.81,3646710000,9985.81 +2010-08-25,10040.15,10104.18,9925.34,10060.06,4360190000,10060.06 +2010-08-24,10170.86,10170.86,9975.86,10040.45,4436330000,10040.45 +2010-08-23,10215.51,10328.88,10146.18,10174.41,3210950000,10174.41 +2010-08-20,10270.98,10276.13,10131.88,10213.62,3761570000,10213.62 +2010-08-19,10411.15,10412.29,10202.34,10271.21,4290540000,10271.21 +2010-08-18,10398.59,10486.38,10308.83,10415.54,3724260000,10415.54 +2010-08-17,10297.55,10501.67,10297.55,10405.85,3968210000,10405.85 +2010-08-16,10303.07,10354.39,10193.26,10302.01,3142450000,10302.01 +2010-08-13,10320.33,10381.86,10254.18,10303.15,3328890000,10303.15 +2010-08-12,10361.58,10388.37,10222.85,10319.95,4521050000,10319.95 +2010-08-11,10631.82,10631.82,10339.63,10378.83,4511860000,10378.83 +2010-08-10,10696.63,10717.21,10522.63,10644.25,3979360000,10644.25 +2010-08-09,10654.62,10755.66,10618.26,10698.75,3191630000,10698.75 +2010-08-06,10668.55,10688.08,10491.37,10653.56,3857890000,10653.56 +2010-08-05,10679.67,10712.37,10571.60,10674.98,3685560000,10674.98 +2010-08-04,10630.20,10738.48,10583.10,10680.43,4057850000,10680.43 +2010-08-03,10673.92,10714.19,10564.18,10636.38,4071820000,10636.38 +2010-08-02,10468.82,10715.21,10468.82,10674.38,4144180000,10674.38 +2010-07-30,10465.19,10528.84,10327.37,10465.94,4006450000,10465.94 +2010-07-29,10498.94,10609.74,10383.45,10467.16,4612420000,10467.16 +2010-07-28,10537.01,10586.36,10445.17,10497.88,4002390000,10497.88 +2010-07-27,10525.28,10632.52,10460.65,10537.69,4725690000,10537.69 +2010-07-26,10424.17,10545.94,10391.02,10525.43,4009650000,10525.43 +2010-07-23,10321.16,10465.19,10237.84,10424.62,4524570000,10424.62 +2010-07-22,10121.81,10391.78,10121.81,10322.30,4826900000,10322.30 +2010-07-21,10226.02,10310.04,10053.85,10120.53,4747180000,10120.53 +2010-07-20,10151.48,10248.20,9973.17,10229.96,4713280000,10229.96 +2010-07-19,10098.12,10213.09,10051.28,10154.43,4089500000,10154.43 +2010-07-16,10356.20,10356.20,10071.63,10097.90,5297350000,10097.90 +2010-07-15,10367.10,10409.49,10216.04,10359.31,4552470000,10359.31 +2010-07-14,10370.96,10423.03,10265.16,10366.72,4521050000,10366.72 +2010-07-13,10217.55,10436.20,10217.55,10363.02,4640460000,10363.02 +2010-07-12,10199.24,10260.62,10121.13,10216.27,3426990000,10216.27 +2010-07-09,10137.93,10226.48,10079.05,10198.03,3506570000,10198.03 +2010-07-08,10019.26,10175.02,9987.02,10138.99,4548460000,10138.99 +2010-07-07,9736.85,10029.93,9716.38,10018.28,4931220000,10018.28 +2010-07-06,9689.21,9880.76,9648.26,9743.62,4691240000,9743.62 +2010-07-02,9732.23,9798.19,9603.80,9686.48,3968500000,9686.48 +2010-07-01,9773.27,9834.71,9596.04,9732.53,6435770000,9732.53 +2010-06-30,9868.34,9951.47,9741.07,9774.02,5067080000,9774.02 +2010-06-29,10135.72,10135.72,9786.45,9870.30,6136700000,9870.30 +2010-06-28,10143.05,10246.82,10070.12,10138.52,3896410000,10138.52 +2010-06-25,10153.48,10261.10,10039.97,10143.81,5128840000,10143.81 +2010-06-24,10297.08,10314.31,10112.60,10152.80,4814830000,10152.80 +2010-06-23,10293.30,10393.89,10195.81,10298.44,4526150000,10298.44 +2010-06-22,10441.95,10524.78,10276.14,10293.52,4514380000,10293.52 +2010-06-21,10452.46,10627.19,10387.54,10442.41,4514360000,10442.41 +2010-06-18,10435.00,10513.75,10379.60,10450.64,4555360000,10450.64 +2010-06-17,10409.98,10479.74,10293.49,10434.17,4557760000,10434.17 +2010-06-16,10404.24,10456.39,10289.37,10409.46,5002600000,10409.46 +2010-06-15,10192.40,10416.11,10192.40,10404.77,4644490000,10404.77 +2010-06-14,10211.83,10354.97,10175.02,10190.89,4425830000,10190.89 +2010-06-11,10166.78,10235.10,10038.31,10211.07,4059280000,10211.07 +2010-06-10,9901.67,10206.61,9901.67,10172.53,5144780000,10172.53 +2010-06-09,9941.57,10093.33,9859.04,9899.25,5983200000,9899.25 +2010-06-08,9812.94,9971.57,9726.33,9939.98,6192750000,9939.98 +2010-06-07,9931.75,10025.84,9798.73,9816.49,5467560000,9816.49 +2010-06-04,10249.61,10249.61,9881.11,9931.97,6180580000,9931.97 +2010-06-03,10250.67,10348.84,10158.92,10255.28,4995970000,10255.28 +2010-06-02,10025.61,10256.57,10007.09,10249.54,5026360000,10249.54 +2010-06-01,10133.94,10249.27,9976.56,10024.02,5271480000,10024.02 +2010-05-28,10258.00,10293.45,10078.66,10136.63,4871210000,10136.63 +2010-05-27,9971.73,10279.01,9971.73,10258.99,5698460000,10258.99 +2010-05-26,10045.11,10211.60,9937.79,9974.45,4521050000,9974.45 +2010-05-25,10061.43,10061.43,9756.11,10043.75,7329580000,10043.75 +2010-05-24,10193.46,10235.63,10028.78,10066.57,5224040000,10066.57 +2010-05-21,10063.93,10225.88,9860.93,10193.39,5452130000,10193.39 +2010-05-20,10440.21,10440.21,10042.46,10068.01,8328569600,10068.01 +2010-05-19,10505.70,10558.56,10306.22,10444.37,6765800000,10444.37 +2010-05-18,10625.45,10760.05,10463.15,10510.95,6170840000,10510.95 +2010-05-17,10616.98,10707.30,10424.72,10625.83,5922920000,10625.83 +2010-05-14,10780.68,10780.68,10509.89,10620.16,6126400000,10620.16 +2010-05-13,10896.61,10952.84,10752.72,10782.95,4870640000,10782.95 +2010-05-12,10742.15,10941.88,10725.81,10896.91,5225460000,10896.91 +2010-05-11,10780.00,10888.30,10653.71,10748.26,5842550000,10748.26 +2010-05-10,10386.18,10880.14,10386.18,10785.14,6893700000,10785.14 +2010-05-07,10519.42,10622.27,10221.50,10380.43,9472910400,10380.43 +2010-05-06,10862.22,10925.86,9787.17,10520.32,10617809600,10520.32 +2010-05-05,10918.40,10984.05,10754.30,10868.12,6795940000,10868.12 +2010-05-04,11149.48,11149.48,10843.71,10926.77,6594720000,10926.77 +2010-05-03,11009.60,11203.37,11004.15,11151.83,4938050000,11151.83 +2010-04-30,11168.23,11235.94,10984.35,11008.61,6048260000,11008.61 +2010-04-29,11045.64,11232.54,11045.64,11167.32,6059410000,11167.32 +2010-04-28,10988.87,11115.63,10938.48,11045.27,6342310000,11045.27 +2010-04-27,11203.67,11260.88,10962.81,10991.99,7454540000,10991.99 +2010-04-26,11205.11,11308.95,11150.01,11205.03,5647760000,11205.03 +2010-04-23,11132.18,11247.20,11058.87,11204.28,5326060000,11204.28 +2010-04-22,11119.78,11175.33,10975.66,11134.29,6035780000,11134.29 +2010-04-21,11116.91,11217.35,11018.59,11124.92,5724310000,11124.92 +2010-04-20,11093.11,11190.22,11045.80,11117.06,5316590000,11117.06 +2010-04-19,11018.36,11116.76,10940.60,11092.05,6597740000,11092.05 +2010-04-16,11143.66,11186.82,10947.55,11018.66,8108470400,11018.66 +2010-04-15,11122.96,11189.61,11051.31,11144.57,5995330000,11144.57 +2010-04-14,11020.70,11147.14,11004.61,11123.11,5760040000,11123.11 +2010-04-13,11006.72,11072.70,10925.86,11019.42,5403580000,11019.42 +2010-04-12,10996.75,11066.96,10957.22,11005.97,4607090000,11005.97 +2010-04-09,10926.92,11032.12,10894.19,10997.35,4511570000,10997.35 +2010-04-08,10896.99,10969.92,10810.15,10927.07,4726970000,10927.07 +2010-04-07,10961.95,11000.22,10835.77,10897.52,5101430000,10897.52 +2010-04-06,10972.49,11017.76,10893.89,10969.99,4086180000,10969.99 +2010-04-05,10927.45,11026.75,10880.36,10973.55,3881620000,10973.55 +2010-04-01,10857.31,10983.14,10851.57,10927.07,4006870000,10927.07 +2010-03-31,10907.34,10933.19,10802.22,10856.63,4484340000,10856.63 +2010-03-30,10895.02,10968.56,10837.21,10907.42,4085000000,10907.42 +2010-03-29,10849.23,10954.43,10827.91,10895.86,4375580000,10895.86 +2010-03-26,10841.29,10934.85,10801.84,10850.36,4708420000,10850.36 +2010-03-25,10837.51,10985.26,10818.77,10841.21,5668900000,10841.21 +2010-03-24,10887.62,10925.48,10788.77,10836.15,4705750000,10836.15 +2010-03-23,10787.18,10906.06,10752.41,10888.83,4411640000,10888.83 +2010-03-22,10741.00,10836.68,10672.23,10785.89,4261680000,10785.89 +2010-03-19,10780.00,10869.55,10665.35,10741.98,5212410000,10741.98 +2010-03-18,10733.44,10821.49,10686.89,10779.17,4234510000,10779.17 +2010-03-17,10686.36,10787.86,10658.10,10733.67,4963200000,10733.67 +2010-03-16,10642.53,10717.42,10594.16,10685.98,4369770000,10685.98 +2010-03-15,10623.41,10680.32,10540.65,10642.15,4164110000,10642.15 +2010-03-12,10611.77,10690.90,10561.66,10624.69,4928160000,10624.69 +2010-03-11,10560.98,10626.73,10489.87,10611.84,4669060000,10611.84 +2010-03-10,10560.13,10639.05,10502.64,10567.33,5469120000,10567.33 +2010-03-09,10552.24,10637.46,10493.49,10564.38,5185570000,10564.38 +2010-03-08,10563.78,10632.48,10500.90,10552.52,3774680000,10552.52 +2010-03-05,10445.13,10587.13,10445.13,10566.20,4133000000,10566.20 +2010-03-04,10396.53,10484.05,10363.88,10444.14,3945010000,10444.14 +2010-03-03,10406.28,10496.22,10359.58,10396.76,3951320000,10396.76 +2010-03-02,10404.16,10493.80,10359.80,10405.98,4134680000,10405.98 +2010-03-01,10326.10,10444.60,10320.05,10403.79,3847640000,10403.79 +2010-02-26,10321.41,10391.24,10250.45,10325.26,3945190000,10325.26 +2010-02-25,10366.60,10366.60,10155.75,10321.03,4521130000,10321.03 +2010-02-24,10284.00,10416.94,10271.61,10374.16,4168360000,10374.16 +2010-02-23,10383.16,10430.16,10239.34,10282.41,4521050000,10282.41 +2010-02-22,10402.43,10468.55,10333.05,10383.38,3814440000,10383.38 +2010-02-19,10387.77,10459.18,10316.50,10402.35,3944280000,10402.35 +2010-02-18,10309.39,10416.79,10255.58,10392.90,3878620000,10392.90 +2010-02-17,10261.48,10366.83,10223.16,10309.24,4259230000,10309.24 +2010-02-16,10100.81,10292.62,10100.81,10268.81,4080770000,10268.81 +2010-02-12,10137.23,10140.18,9962.13,10099.14,4160680000,10099.14 +2010-02-11,10037.85,10184.85,9963.19,10144.19,4400870000,10144.19 +2010-02-10,10055.46,10120.15,9946.26,10038.38,4251450000,10038.38 +2010-02-09,9910.28,10154.24,9910.28,10058.64,5114260000,10058.64 +2010-02-08,10005.43,10059.24,9882.85,9908.39,4089820000,9908.39 +2010-02-05,10003.69,10078.89,9822.84,10012.23,6438900000,10012.23 +2010-02-04,10273.12,10273.12,9984.35,10002.18,5859690000,10002.18 +2010-02-03,10291.73,10356.86,10192.03,10270.55,4285450000,10270.55 +2010-02-02,10186.13,10333.35,10138.75,10296.85,4749540000,10296.85 +2010-02-01,10068.99,10227.24,10068.99,10185.53,4077610000,10185.53 +2010-01-29,10122.04,10272.29,10014.35,10067.33,5412850000,10067.33 +2010-01-28,10236.92,10310.68,10023.80,10120.46,5452400000,10120.46 +2010-01-27,10194.29,10294.13,10060.98,10236.16,5319120000,10236.16 +2010-01-26,10195.35,10323.00,10102.17,10194.29,4731910000,10194.29 +2010-01-25,10175.10,10316.65,10135.95,10196.86,4481390000,10196.86 +2010-01-22,10389.58,10450.04,10133.15,10172.98,6208650000,10172.98 +2010-01-21,10603.91,10651.14,10334.18,10389.88,6874289600,10389.88 +2010-01-20,10719.69,10719.69,10492.36,10603.15,4810560000,10603.15 +2010-01-19,10608.37,10763.45,10555.47,10725.43,4724830000,10725.43 +2010-01-15,10706.99,10736.54,10529.09,10609.65,4758730000,10609.65 +2010-01-14,10680.16,10767.15,10619.02,10710.55,3915200000,10710.55 +2010-01-13,10628.09,10747.12,10569.07,10680.77,4170360000,10680.77 +2010-01-12,10662.86,10701.48,10523.35,10627.26,4716160000,10627.26 +2010-01-11,10620.31,10739.87,10538.91,10663.99,4255780000,10663.99 +2010-01-08,10606.40,10653.11,10509.74,10618.19,4389590000,10618.19 +2010-01-07,10571.11,10655.60,10471.73,10606.86,5270680000,10606.86 +2010-01-06,10564.72,10655.22,10488.28,10573.68,4972660000,10573.68 +2010-01-05,10584.56,10647.14,10468.86,10572.02,2491020000,10572.02 +2010-01-04,10430.69,10641.62,10430.69,10583.96,3991400000,10583.96 +2009-12-31,10548.51,10578.74,10420.56,10428.05,2076990000,10428.05 +2009-12-30,10544.36,10583.28,10470.75,10548.51,2277300000,10548.51 +2009-12-29,10547.83,10605.65,10518.59,10545.41,2491020000,10545.41 +2009-12-28,10517.91,10585.02,10477.25,10547.08,2716400000,10547.08 +2009-12-24,10467.12,10541.26,10450.95,10520.10,1267710000,10520.10 +2009-12-23,10464.32,10520.93,10409.00,10466.44,3166870000,10466.44 +2009-12-22,10414.67,10511.56,10399.33,10464.93,3641130000,10464.93 +2009-12-21,10330.10,10489.41,10330.10,10414.14,3977340000,10414.14 +2009-12-18,10309.39,10412.55,10237.75,10328.89,6325890000,10328.89 +2009-12-17,10439.99,10439.99,10279.39,10308.26,7615070400,10308.26 +2009-12-16,10449.81,10552.75,10401.90,10441.12,4829820000,10441.12 +2009-12-15,10499.31,10542.09,10380.96,10452.00,5045100000,10452.00 +2009-12-14,10471.28,10566.88,10431.60,10501.05,4548490000,10501.05 +2009-12-11,10403.41,10516.47,10385.42,10471.50,3791090000,10471.50 +2009-12-10,10336.00,10479.06,10332.14,10405.83,3996490000,10405.83 +2009-12-09,10282.85,10377.11,10207.29,10337.05,4115410000,10337.05 +2009-12-08,10385.42,10385.42,10216.44,10285.97,4748030000,10285.97 +2009-12-07,10386.86,10478.23,10321.11,10390.11,4103360000,10390.11 +2009-12-04,10368.57,10549.04,10285.44,10388.90,5781140000,10388.90 +2009-12-03,10455.63,10533.55,10338.49,10366.15,4810030000,10366.15 +2009-12-02,10470.44,10537.63,10386.03,10452.68,3941340000,10452.68 +2009-12-01,10343.82,10537.03,10343.82,10471.58,4249310000,10471.58 +2009-11-30,10309.77,10394.34,10238.05,10344.84,3895520000,10344.84 +2009-11-27,10452.23,10452.23,10179.33,10309.92,2362910000,10309.92 +2009-11-25,10432.96,10513.60,10385.65,10464.40,3036350000,10464.40 +2009-11-24,10451.25,10488.66,10335.62,10433.71,3700820000,10433.71 +2009-11-23,10320.13,10524.40,10320.13,10450.95,3827920000,10450.95 +2009-11-20,10327.91,10377.41,10237.60,10318.16,3751230000,10318.16 +2009-11-19,10425.33,10425.33,10226.41,10332.44,4178030000,10332.44 +2009-11-18,10426.27,10471.28,10330.33,10426.31,4293340000,10426.31 +2009-11-17,10404.77,10465.76,10318.69,10437.42,3824070000,10437.42 +2009-11-16,10267.53,10465.83,10267.53,10406.96,4565850000,10406.96 +2009-11-13,10197.85,10332.29,10162.93,10270.47,3792610000,10270.47 +2009-11-12,10289.82,10341.21,10157.64,10197.47,4160250000,10197.47 +2009-11-11,10247.42,10357.38,10217.19,10291.26,4286700000,10291.26 +2009-11-10,10223.01,10300.33,10148.12,10246.97,4394770000,10246.97 +2009-11-09,10020.62,10248.93,10020.62,10226.94,4460030000,10226.94 +2009-11-06,10001.35,10077.08,9898.49,10023.42,4277130000,10023.42 +2009-11-05,9807.80,10043.75,9807.80,10005.96,4848350000,10005.96 +2009-11-04,9767.30,9962.35,9745.76,9802.14,5635510000,9802.14 +2009-11-03,9787.47,9844.84,9649.78,9771.91,5487500000,9771.91 +2009-11-02,9712.13,9883.68,9647.06,9789.44,6202640000,9789.44 +2009-10-30,9961.52,9980.19,9664.89,9712.73,6512420000,9712.73 +2009-10-29,9762.91,9996.67,9762.91,9962.58,5595040000,9962.58 +2009-10-28,9881.11,9940.89,9723.31,9762.69,6600350000,9762.69 +2009-10-27,9868.34,9994.55,9802.36,9882.17,5337380000,9882.17 +2009-10-26,9972.33,10107.99,9817.55,9867.96,6363380000,9867.96 +2009-10-23,10099.90,10138.59,9908.70,9972.18,4767460000,9972.18 +2009-10-22,9946.18,10133.08,9879.07,10081.31,5192410000,10081.31 +2009-10-21,10038.84,10157.94,9909.83,9949.36,5616290000,9949.36 +2009-10-20,10092.42,10157.26,9952.98,10041.48,5396930000,10041.48 +2009-10-19,9996.67,10146.61,9967.49,10092.19,4619240000,10092.19 +2009-10-16,10061.36,10072.62,9884.51,9995.91,4894740000,9995.91 +2009-10-15,10014.88,10087.43,9916.93,10062.94,5369780000,10062.94 +2009-10-14,9873.55,10064.98,9873.55,10015.86,5406420000,10015.86 +2009-10-13,9883.98,9935.53,9780.90,9871.06,4320480000,9871.06 +2009-10-12,9865.24,9978.07,9814.45,9885.80,3710430000,9885.80 +2009-10-09,9786.04,9890.41,9731.32,9864.94,3763780000,9864.94 +2009-10-08,9728.22,9872.50,9709.78,9786.87,4988400000,9786.87 +2009-10-07,9725.69,9782.56,9634.96,9725.58,4238220000,9725.58 +2009-10-06,9601.26,9793.37,9601.26,9731.25,5029840000,9731.25 +2009-10-05,9488.73,9640.33,9449.81,9599.75,4313310000,9599.75 +2009-10-02,9507.62,9571.71,9378.77,9487.67,5583240000,9487.67 +2009-10-01,9711.60,9714.70,9482.98,9509.28,5791450000,9509.28 +2009-09-30,9741.83,9817.17,9583.04,9712.28,5998860000,9712.28 +2009-09-29,9789.74,9861.99,9705.10,9742.20,4949900000,9742.20 +2009-09-28,9663.23,9861.39,9658.09,9789.36,3726950000,9789.36 +2009-09-25,9706.68,9781.73,9605.19,9665.19,4507090000,9665.19 +2009-09-24,9749.99,9836.82,9637.53,9707.44,5505610000,9707.44 +2009-09-23,9830.63,9937.72,9724.90,9748.55,5531930000,9748.55 +2009-09-22,9779.61,9890.71,9742.96,9829.87,5246600000,9829.87 +2009-09-21,9818.61,9846.12,9688.40,9778.86,4615280000,9778.86 +2009-09-18,9784.75,9898.57,9751.27,9820.20,5607970000,9820.20 +2009-09-17,9789.82,9896.38,9706.23,9783.92,6668110000,9783.92 +2009-09-16,9683.71,9837.05,9648.95,9791.71,6793529600,9791.71 +2009-09-15,9626.42,9745.91,9553.80,9683.41,6185620000,9683.41 +2009-09-14,9598.08,9662.10,9492.96,9626.80,4979610000,9626.80 +2009-09-11,9625.44,9698.67,9532.11,9605.41,4922600000,9605.41 +2009-09-10,9546.54,9666.55,9479.20,9627.48,5191380000,9627.48 +2009-09-09,9496.59,9604.43,9435.45,9547.22,5202550000,9547.22 +2009-09-08,9440.13,9564.45,9402.80,9497.34,5235160000,9497.34 +2009-09-04,9345.36,9465.37,9302.28,9441.27,4097370000,9441.27 +2009-09-03,9282.03,9350.27,9252.93,9344.61,4624280000,9344.61 +2009-09-02,9306.21,9378.77,9223.08,9280.67,5842730000,9280.67 +2009-09-01,9492.32,9573.67,9275.15,9310.60,6862360000,9310.60 +2009-08-31,9542.91,9552.97,9389.27,9496.28,5004560000,9496.28 +2009-08-28,9582.74,9666.71,9476.63,9544.20,5785780000,9544.20 +2009-08-27,9541.63,9629.98,9440.43,9580.63,5785880000,9580.63 +2009-08-26,9538.61,9613.65,9446.71,9543.52,5080060000,9543.52 +2009-08-25,9509.21,9646.53,9485.70,9539.29,5768740000,9539.29 +2009-08-24,9506.18,9625.89,9442.17,9509.28,6302450000,9509.28 +2009-08-21,9347.86,9549.19,9347.86,9505.96,5885550000,9505.96 +2009-08-20,9278.55,9385.72,9237.52,9350.05,4893160000,9350.05 +2009-08-19,9208.68,9333.34,9099.14,9279.16,4257000000,9279.16 +2009-08-18,9134.36,9262.08,9124.08,9217.94,4198970000,9217.94 +2009-08-17,9313.85,9313.85,9078.28,9135.34,4854970000,9135.34 +2009-08-14,9398.04,9425.17,9214.47,9321.40,4940750000,9321.40 +2009-08-13,9362.29,9448.97,9269.26,9398.19,5250660000,9398.19 +2009-08-12,9236.06,9442.47,9199.80,9361.61,5498170000,9361.61 +2009-08-11,9334.33,9351.86,9180.23,9241.45,5773160000,9241.45 +2009-08-10,9368.41,9420.56,9249.99,9337.95,5406080000,9337.95 +2009-08-07,9258.45,9466.89,9258.45,9370.07,6827089600,9370.07 +2009-08-06,9277.19,9378.01,9168.44,9256.26,6753380000,9256.26 +2009-08-05,9315.36,9374.38,9173.20,9280.97,7242120000,9280.97 +2009-08-04,9285.05,9370.30,9207.21,9320.19,5713700000,9320.19 +2009-08-03,9173.65,9342.11,9162.09,9286.56,5603440000,9286.56 +2009-07-31,9154.61,9264.65,9081.30,9171.61,5139070000,9171.61 +2009-07-30,9072.84,9298.13,9072.84,9154.46,6035180000,9154.46 +2009-07-29,9092.34,9141.23,8967.26,9070.72,5178770000,9070.72 +2009-07-28,9106.92,9154.76,8980.03,9096.72,5490350000,9096.72 +2009-07-27,9093.09,9154.23,8996.58,9108.51,4631290000,9108.51 +2009-07-24,9066.11,9144.48,8955.77,9093.24,4458300000,9093.24 +2009-07-23,8882.31,9143.05,8837.95,9069.29,5761650000,9069.29 +2009-07-22,8912.39,8993.48,8802.13,8881.26,4634100000,8881.26 +2009-07-21,8848.15,8991.07,8780.82,8915.94,5309300000,8915.94 +2009-07-20,8746.05,8884.43,8717.26,8848.15,4853150000,8848.15 +2009-07-17,8711.89,8797.97,8638.81,8743.94,5141380000,8743.94 +2009-07-16,8612.66,8750.28,8543.97,8711.82,4898640000,8711.82 +2009-07-15,8363.95,8643.04,8363.95,8616.21,5238830000,8616.21 +2009-07-14,8331.37,8407.48,8255.27,8359.49,4149030000,8359.49 +2009-07-13,8146.82,8348.08,8106.16,8331.68,4499440000,8331.68 +2009-07-10,8182.49,8216.65,8057.57,8146.52,3912080000,8146.52 +2009-07-09,8179.01,8273.48,8117.27,8183.17,4347170000,8183.17 +2009-07-08,8157.02,8259.05,8057.94,8178.41,5721780000,8178.41 +2009-07-07,8324.95,8355.48,8138.51,8163.60,4673300000,8163.60 +2009-07-06,8279.30,8364.02,8156.49,8324.87,4712580000,8324.87 +2009-07-02,8503.00,8503.00,8260.41,8280.74,3931000000,8280.74 +2009-07-01,8447.53,8610.32,8447.00,8504.06,3919400000,8504.06 +2009-06-30,8528.93,8584.17,8369.99,8447.00,4627570000,8447.00 +2009-06-29,8440.13,8569.59,8406.57,8529.38,4211760000,8529.38 +2009-06-26,8468.54,8509.73,8364.17,8438.39,6076660000,8438.39 +2009-06-25,8299.25,8512.60,8236.07,8472.40,4911240000,8472.40 +2009-06-24,8323.51,8456.83,8246.20,8299.86,4636720000,8299.86 +2009-06-23,8340.44,8413.22,8239.17,8322.91,5071020000,8322.91 +2009-06-22,8538.52,8538.52,8306.66,8339.01,4903940000,8339.01 +2009-06-19,8556.96,8665.26,8476.02,8539.73,5713390000,8539.73 +2009-06-18,8496.73,8634.28,8438.61,8555.60,4684010000,8555.60 +2009-06-17,8504.36,8602.99,8421.46,8497.18,5523650000,8497.18 +2009-06-16,8612.44,8688.69,8483.58,8504.67,4951200000,8504.67 +2009-06-15,8798.50,8798.50,8540.87,8612.13,4697880000,8612.13 +2009-06-12,8770.01,8850.95,8671.61,8799.26,4528120000,8799.26 +2009-06-11,8736.23,8911.11,8697.99,8770.92,5500840000,8770.92 +2009-06-10,8763.66,8871.36,8625.21,8739.02,5379420000,8739.02 +2009-06-09,8764.83,8854.80,8688.99,8763.06,4439950000,8763.06 +2009-06-08,8759.35,8832.13,8593.84,8764.49,4483430000,8764.49 +2009-06-05,8751.75,8900.48,8673.41,8763.13,5277910000,8763.13 +2009-06-04,8665.72,8802.59,8609.17,8750.24,5352890000,8750.24 +2009-06-03,8740.07,8750.83,8556.90,8675.24,5323770000,8675.24 +2009-06-02,8721.60,8832.16,8635.25,8740.87,5987340000,8740.87 +2009-06-01,8501.53,8797.58,8501.53,8721.44,6370440000,8721.44 +2009-05-29,8404.04,8541.27,8323.91,8500.33,6050420000,8500.33 +2009-05-28,8300.50,8463.70,8221.65,8403.80,5738980000,8403.80 +2009-05-27,8473.65,8534.66,8280.82,8300.02,5698800000,8300.02 +2009-05-26,8275.33,8523.59,8194.33,8473.49,5667050000,8473.49 +2009-05-22,8292.21,8415.75,8218.86,8277.32,5155320000,8277.32 +2009-05-21,8416.07,8416.07,8185.25,8292.13,6019840000,8292.13 +2009-05-20,8471.82,8645.85,8376.40,8422.04,8205060000,8422.04 +2009-05-19,8502.48,8594.16,8402.61,8474.85,6616270000,8474.85 +2009-05-18,8270.15,8534.66,8270.15,8504.08,5702150000,8504.08 +2009-05-15,8326.22,8422.28,8206.67,8268.64,5439720000,8268.64 +2009-05-14,8285.92,8427.93,8218.94,8331.32,6134870000,8331.32 +2009-05-13,8461.80,8461.80,8208.74,8284.89,7091820000,8284.89 +2009-05-12,8419.17,8574.88,8306.47,8469.11,6871750400,8469.11 +2009-05-11,8569.23,8569.23,8347.41,8418.77,6150600000,8418.77 +2009-05-08,8410.73,8657.96,8388.11,8574.65,8163280000,8574.65 +2009-05-07,8513.56,8651.51,8296.04,8409.85,9120100000,8409.85 +2009-05-06,8403.48,8608.26,8350.12,8512.28,8555040000,8512.28 +2009-05-05,8425.55,8520.80,8321.37,8410.65,6882860000,8410.65 +2009-05-04,8213.60,8488.87,8213.60,8426.74,7038840000,8426.74 +2009-05-01,8167.41,8278.28,8047.54,8212.41,5312170000,8212.41 +2009-04-30,8188.51,8383.81,8083.62,8168.12,6862540000,8168.12 +2009-04-29,8018.31,8278.12,8018.31,8185.73,6101620000,8185.73 +2009-04-28,8023.56,8136.74,7898.75,8016.95,6328000000,8016.95 +2009-04-27,8073.82,8152.27,7920.42,8025.00,5613460000,8025.00 +2009-04-24,7957.45,8182.30,7905.60,8076.29,7114440000,8076.29 +2009-04-23,7886.81,8015.36,7762.80,7957.06,6563100000,7957.06 +2009-04-22,7964.78,8111.02,7802.46,7886.57,7327860000,7886.57 +2009-04-21,7841.73,8027.54,7699.79,7969.56,7436489600,7969.56 +2009-04-20,8128.94,8128.94,7801.58,7841.73,6973960000,7841.73 +2009-04-17,8125.43,8251.20,8024.92,8131.33,7352009600,8131.33 +2009-04-16,8029.14,8201.81,7933.08,8125.43,6598670000,8125.43 +2009-04-15,7914.92,8069.92,7808.19,8029.62,6241100000,8029.62 +2009-04-14,8057.41,8076.05,7840.53,7920.18,7569840000,7920.18 +2009-04-13,8082.02,8146.86,7888.96,8057.81,6434890000,8057.81 +2009-04-09,7839.89,8150.44,7839.89,8083.38,7600710400,8083.38 +2009-04-08,7788.68,7925.36,7715.09,7837.11,5938460000,7837.11 +2009-04-07,7968.92,7968.92,7733.56,7789.56,5155580000,7789.56 +2009-04-06,8016.16,8037.42,7830.66,7975.85,6210000000,7975.85 +2009-04-03,7980.63,8090.71,7850.33,8017.59,5855640000,8017.59 +2009-04-02,7763.99,8129.33,7763.99,7978.08,7542809600,7978.08 +2009-04-01,7606.13,7804.77,7450.74,7761.60,6034140000,7761.60 +2009-03-31,7523.77,7744.24,7502.98,7608.92,6089100000,7608.92 +2009-03-30,7773.31,7773.31,7406.85,7522.02,5912660000,7522.02 +2009-03-27,7922.57,7922.57,7695.97,7776.18,5600210000,7776.18 +2009-03-26,7752.36,7969.00,7709.19,7924.56,6992960000,7924.56 +2009-03-25,7659.81,7897.48,7539.54,7749.81,7687180000,7749.81 +2009-03-24,7773.47,7837.11,7585.98,7660.21,6767980000,7660.21 +2009-03-23,7279.25,7789.24,7279.25,7775.86,7715769600,7775.86 +2009-03-20,7402.31,7524.81,7215.77,7278.38,7643720000,7278.38 +2009-03-19,7489.68,7624.45,7325.13,7400.80,9033870400,7400.80 +2009-03-18,7395.70,7592.03,7218.24,7486.58,9098449600,7486.58 +2009-03-17,7218.00,7407.41,7129.60,7395.70,6156800000,7395.70 +2009-03-16,7225.33,7428.75,7171.41,7216.97,7883540000,7216.97 +2009-03-13,7219.20,7241.98,7106.34,7223.98,6787089600,7223.98 +2009-03-12,6932.39,7198.25,6840.79,7170.06,7326630400,7170.06 +2009-03-11,6923.13,7078.22,6804.55,6930.40,7287809600,6930.40 +2009-03-10,6547.01,6951.50,6547.01,6926.49,8618329600,6926.49 +2009-03-09,6625.74,6758.44,6440.08,6547.05,7277320000,6547.05 +2009-03-06,6595.16,6776.44,6443.27,6626.94,7331830400,6626.94 +2009-03-05,6874.01,6874.01,6531.28,6594.44,7507249600,6594.44 +2009-03-04,6726.50,7012.19,6715.11,6875.84,7673620000,6875.84 +2009-03-03,6764.81,6922.59,6661.74,6726.02,7583230400,6726.02 +2009-03-02,7056.48,7056.48,6736.69,6763.29,7868289600,6763.29 +2009-02-27,7180.97,7244.61,6952.06,7062.93,8926480000,7062.93 +2009-02-26,7269.06,7451.13,7135.25,7182.08,7599969600,7182.08 +2009-02-25,7349.58,7442.13,7123.94,7270.89,7483640000,7270.89 +2009-02-24,7115.34,7396.34,7077.35,7350.94,7234489600,7350.94 +2009-02-23,7365.99,7477.10,7092.64,7114.78,6509300000,7114.78 +2009-02-20,7461.49,7500.44,7226.29,7365.67,8210590400,7365.67 +2009-02-19,7555.23,7679.01,7420.63,7465.95,5746940000,7465.95 +2009-02-18,7546.35,7661.56,7451.37,7555.63,5740710000,7555.63 +2009-02-17,7845.63,7845.63,7502.59,7552.60,5907820000,7552.60 +2009-02-13,7933.00,8005.96,7811.38,7850.41,5296650000,7850.41 +2009-02-12,7931.97,7956.02,7662.04,7932.76,6476460000,7932.76 +2009-02-11,7887.05,8042.36,7820.14,7939.53,5926460000,7939.53 +2009-02-10,8269.36,8293.17,7835.83,7888.88,6770169600,7888.88 +2009-02-09,8281.38,8376.56,8137.70,8270.87,5574370000,8270.87 +2009-02-06,8056.38,8360.07,8044.03,8280.59,6484100000,8280.59 +2009-02-05,7954.83,8138.65,7811.70,8063.07,6624030000,8063.07 +2009-02-04,8070.32,8197.04,7899.79,7956.66,6420450000,7956.66 +2009-02-03,7936.99,8157.13,7855.19,8078.36,5886310000,8078.36 +2009-02-02,8000.62,8053.43,7796.17,7936.83,5673270000,7936.83 +2009-01-30,8149.01,8243.95,7924.88,8000.86,5350580000,8000.86 +2009-01-29,8373.06,8373.06,8092.14,8149.01,5067060000,8149.01 +2009-01-28,8175.93,8446.33,8175.93,8375.45,6199180000,8375.45 +2009-01-27,8117.39,8264.10,8042.60,8174.73,5353260000,8174.73 +2009-01-26,8078.04,8278.12,7971.15,8116.03,6039940000,8116.03 +2009-01-23,8108.79,8187.88,7856.86,8077.56,5832160000,8077.56 +2009-01-22,8224.43,8239.33,7925.75,8122.80,5843830000,8122.80 +2009-01-21,7949.17,8286.40,7890.63,8228.10,6467830000,8228.10 +2009-01-20,8279.63,8309.02,7920.66,7949.09,6375230000,7949.09 +2009-01-16,8215.67,8424.59,8086.01,8281.22,6786040000,8281.22 +2009-01-15,8196.24,8326.06,7949.65,8212.49,7807350400,8212.49 +2009-01-14,8446.01,8446.01,8097.95,8200.14,5407880000,8200.14 +2009-01-13,8474.61,8584.68,8325.59,8448.56,5567460000,8448.56 +2009-01-12,8599.26,8653.97,8391.85,8473.97,4725050000,8473.97 +2009-01-09,8738.80,8800.45,8541.75,8599.18,4716500000,8599.18 +2009-01-08,8769.94,8807.14,8593.52,8742.46,4991550000,8742.46 +2009-01-07,8996.94,8996.94,8690.45,8769.70,4704940000,8769.70 +2009-01-06,8954.57,9175.19,8868.07,9015.10,5392620000,9015.10 +2009-01-05,9027.13,9093.47,8841.70,8952.89,5413910000,8952.89 +2009-01-02,8772.25,9080.57,8725.10,9034.69,4048270000,9034.69 +2008-12-31,8666.48,8862.65,8634.06,8776.39,4172940000,8776.39 +2008-12-30,8487.51,8700.89,8463.70,8668.39,3627800000,8668.39 +2008-12-29,8515.87,8575.60,8349.24,8483.93,3323430000,8483.93 +2008-12-26,8468.71,8581.58,8434.94,8515.55,1880050000,8515.55 +2008-12-24,8428.17,8498.26,8417.02,8468.48,1546550000,8468.48 +2008-12-23,8518.65,8647.60,8376.80,8419.49,4051970000,8419.49 +2008-12-22,8573.37,8672.06,8351.79,8519.69,4869850000,8519.69 +2008-12-19,8606.50,8823.78,8499.06,8579.11,6705310000,8579.11 +2008-12-18,8823.94,8946.36,8516.02,8604.99,5675000000,8604.99 +2008-12-17,8921.91,9001.96,8701.13,8824.34,5907380000,8824.34 +2008-12-16,8565.65,8985.63,8534.03,8924.14,6009780000,8924.14 +2008-12-15,8628.81,8738.40,8431.04,8564.53,4982390000,8564.53 +2008-12-12,8563.10,8705.43,8272.22,8629.68,5959590000,8629.68 +2008-12-11,8750.13,8861.86,8480.18,8565.09,5513840000,8565.09 +2008-12-10,8693.00,8942.46,8589.86,8761.42,5942130000,8761.42 +2008-12-09,8934.10,8978.14,8591.69,8691.33,5693110000,8691.33 +2008-12-08,8637.65,9151.61,8637.65,8934.18,6553600000,8934.18 +2008-12-05,8376.08,8722.47,8084.25,8635.42,6165370000,8635.42 +2008-12-04,8587.07,8705.98,8222.84,8376.24,5860390000,8376.24 +2008-12-03,8409.14,8654.77,8170.19,8591.69,6221880000,8591.69 +2008-12-02,8153.75,8490.62,8072.47,8419.09,6170100000,8419.09 +2008-12-01,8826.89,8826.89,8123.04,8149.09,6052010000,8149.09 +2008-11-28,8690.24,8840.33,8687.05,8829.04,2740860000,8829.04 +2008-11-26,8464.49,8760.46,8250.80,8726.61,5793260000,8726.61 +2008-11-25,8445.14,8682.09,8244.43,8479.47,6952700000,8479.47 +2008-11-24,8048.09,8624.27,8023.32,8443.39,7879440000,8443.39 +2008-11-21,7552.37,8121.45,7392.27,8046.42,9495900000,8046.42 +2008-11-20,7995.53,8224.35,7464.51,7552.29,9093740000,7552.29 +2008-11-19,8420.69,8534.34,7967.33,7997.28,6548600000,7997.28 +2008-11-18,8273.34,8540.08,8075.81,8424.75,6679470000,8424.75 +2008-11-17,8494.84,8596.31,8197.12,8273.58,4927490000,8273.58 +2008-11-14,8822.19,8980.93,8421.08,8497.31,5881030000,8497.31 +2008-11-13,8281.14,8898.41,7947.74,8835.25,7849120000,8835.25 +2008-11-12,8684.52,8684.52,8235.66,8282.66,5764180000,8282.66 +2008-11-11,8864.32,8892.20,8499.62,8693.96,4998340000,8693.96 +2008-11-10,8946.60,9212.94,8735.61,8870.54,4572000000,8870.54 +2008-11-07,8696.03,9032.54,8661.22,8943.81,4931640000,8943.81 +2008-11-06,9134.01,9216.37,8607.14,8695.79,6102230000,8695.79 +2008-11-05,9616.60,9628.15,9086.06,9139.27,5426640000,9139.27 +2008-11-04,9323.89,9711.46,9323.89,9625.28,5531290000,9625.28 +2008-11-03,9326.04,9488.92,9175.03,9319.83,4492280000,9319.83 +2008-10-31,9179.09,9498.48,9014.78,9325.01,6394350000,9325.01 +2008-10-30,9004.66,9380.36,8916.81,9180.69,6175830000,9180.69 +2008-10-29,9062.33,9405.05,8800.61,8990.96,7077800000,8990.96 +2008-10-28,8178.72,9112.51,8153.79,9065.12,7096950400,9065.12 +2008-10-27,8375.92,8639.64,8085.37,8175.77,5558050000,8175.77 +2008-10-24,8683.21,8683.21,8088.63,8378.95,6550050000,8378.95 +2008-10-23,8519.77,8864.48,8200.06,8691.25,7189900000,8691.25 +2008-10-22,9027.84,9027.84,8324.07,8519.21,6147980000,8519.21 +2008-10-21,9179.11,9293.07,9017.30,9045.21,5121830000,9045.21 +2008-10-20,8852.30,9305.89,8799.49,9265.43,5175640000,9265.43 +2008-10-17,8975.35,9304.38,8640.83,8852.22,6581780000,8852.22 +2008-10-16,8577.04,9073.64,8176.17,8979.26,7984500000,8979.26 +2008-10-15,9301.91,9301.91,8516.50,8577.91,6542330000,8577.91 +2008-10-14,9388.97,9924.28,9050.06,9310.99,8161990400,9310.99 +2008-10-13,8462.42,9501.91,8462.42,9387.61,7263369600,9387.61 +2008-10-10,8568.67,8989.13,7773.71,8451.19,11456230400,8451.19 +2008-10-09,9261.69,9522.77,8523.27,8579.19,8285670400,8579.19 +2008-10-08,9437.23,9778.04,9042.97,9258.10,8716329600,9258.10 +2008-10-07,9955.42,10205.04,9391.67,9447.11,7069209600,9447.11 +2008-10-06,10322.52,10322.52,9503.10,9955.50,7956020000,9955.50 +2008-10-03,10483.96,10844.69,10261.75,10325.38,6716120000,10325.38 +2008-10-02,10825.54,10843.10,10368.08,10482.85,6285640000,10482.85 +2008-10-01,10847.40,11022.06,10495.99,10831.07,5782130000,10831.07 +2008-09-30,10371.58,10922.03,10371.58,10850.66,6065000000,10850.66 +2008-09-29,11139.62,11139.62,10266.76,10365.45,7305060000,10365.45 +2008-09-26,11019.04,11218.48,10781.37,11143.13,5383610000,11143.13 +2008-09-25,10827.17,11206.05,10799.77,11022.06,5877640000,11022.06 +2008-09-24,10850.02,11041.02,10696.38,10825.17,4820360000,10825.17 +2008-09-23,11015.69,11214.65,10763.77,10854.17,5185730000,10854.17 +2008-09-22,11394.42,11450.81,10956.43,11015.69,5368130000,11015.69 +2008-09-19,11027.51,11415.48,11027.51,11388.44,9387169600,11388.44 +2008-09-18,10609.01,11149.07,10403.75,11019.69,10082689600,11019.69 +2008-09-17,11056.58,11068.87,10521.81,10609.66,9431870400,10609.66 +2008-09-16,10905.62,11193.12,10604.70,11059.02,9459830400,11059.02 +2008-09-15,11416.37,11416.37,10849.85,10917.51,8279510400,10917.51 +2008-09-12,11429.32,11532.72,11191.08,11421.99,6273260000,11421.99 +2008-09-11,11264.44,11461.15,11018.72,11433.71,6869249600,11433.71 +2008-09-10,11233.91,11453.50,11135.64,11268.92,6543440000,11268.92 +2008-09-09,11514.73,11623.50,11209.81,11230.73,7380630400,11230.73 +2008-09-08,11224.87,11656.64,11224.87,11510.74,7351340000,11510.74 +2008-09-05,11185.63,11301.73,10998.77,11220.96,5017080000,11220.96 +2008-09-04,11532.48,11532.48,11130.26,11188.23,5212500000,11188.23 +2008-09-03,11506.01,11629.69,11328.84,11532.88,5056980000,11532.88 +2008-09-02,11545.63,11831.29,11444.79,11516.92,4783560000,11516.92 +2008-08-29,11713.23,11730.49,11508.78,11543.55,3288120000,11543.55 +2008-08-28,11499.87,11756.46,11493.72,11715.18,3854280000,11715.18 +2008-08-27,11412.46,11575.14,11349.69,11502.51,3499610000,11502.51 +2008-08-26,11383.56,11483.62,11284.47,11412.87,3587570000,11412.87 +2008-08-25,11626.19,11626.19,11336.82,11386.25,3420600000,11386.25 +2008-08-22,11426.79,11684.00,11426.79,11628.06,3741070000,11628.06 +2008-08-21,11415.23,11501.29,11263.63,11430.21,4032590000,11430.21 +2008-08-20,11345.94,11511.06,11240.18,11417.43,4555030000,11417.43 +2008-08-19,11478.09,11501.45,11260.53,11348.55,4159760000,11348.55 +2008-08-18,11659.65,11744.49,11410.18,11479.39,3829290000,11479.39 +2008-08-15,11611.21,11776.41,11540.05,11659.90,4041820000,11659.90 +2008-08-14,11532.07,11744.33,11399.84,11615.93,4064000000,11615.93 +2008-08-13,11632.81,11689.05,11377.37,11532.96,4787600000,11532.96 +2008-08-12,11781.70,11830.39,11541.43,11642.47,4711290000,11642.47 +2008-08-11,11729.67,11933.55,11580.19,11782.35,5067310000,11782.35 +2008-08-08,11432.09,11808.49,11344.23,11734.32,4966810000,11734.32 +2008-08-07,11655.42,11680.50,11355.63,11431.43,5319380000,11431.43 +2008-08-06,11603.64,11745.71,11454.64,11656.07,4873420000,11656.07 +2008-08-05,11286.02,11652.24,11286.02,11615.77,1219310000,11615.77 +2008-08-04,11326.32,11449.67,11144.59,11284.15,4562280000,11284.15 +2008-08-01,11379.89,11512.61,11205.41,11326.32,4684870000,11326.32 +2008-07-31,11577.99,11631.16,11317.69,11378.02,5346050000,11378.02 +2008-07-30,11397.56,11681.47,11328.68,11583.69,5631330000,11583.69 +2008-07-29,11133.44,11444.05,11086.13,11397.56,5414240000,11397.56 +2008-07-28,11369.47,11439.25,11094.76,11131.08,4282960000,11131.08 +2008-07-25,11341.14,11540.78,11252.47,11370.69,4672560000,11370.69 +2008-07-24,11630.34,11714.21,11288.79,11349.28,6127980000,11349.28 +2008-07-23,11603.39,11820.21,11410.02,11632.38,6705830000,11632.38 +2008-07-22,11457.90,11692.79,11273.32,11602.50,6180230000,11602.50 +2008-07-21,11495.02,11663.40,11339.02,11467.34,4630640000,11467.34 +2008-07-18,11436.56,11599.57,11290.50,11496.57,5653280000,11496.57 +2008-07-17,11238.39,11538.50,11118.46,11446.66,7365209600,11446.66 +2008-07-16,10961.89,11308.41,10831.61,11239.28,6738630400,11239.28 +2008-07-15,11050.80,11201.67,10731.96,10962.54,7363640000,10962.54 +2008-07-14,11103.64,11299.70,10972.63,11055.19,5434860000,11055.19 +2008-07-11,11226.17,11292.04,10908.64,11100.54,6742200000,11100.54 +2008-07-10,11148.01,11351.24,11006.01,11229.02,5840430000,11229.02 +2008-07-09,11381.93,11505.12,11115.61,11147.44,5181000000,11147.44 +2008-07-08,11225.03,11459.52,11101.19,11384.21,6034110000,11384.21 +2008-07-07,11289.19,11477.52,11094.44,11231.96,5265420000,11231.96 +2008-07-03,11297.33,11336.49,11158.02,11288.53,3247590000,11288.53 +2008-07-02,11382.34,11510.41,11180.58,11215.51,5276090000,11215.51 +2008-07-01,11344.64,11465.79,11106.65,11382.26,5846290000,11382.26 +2008-06-30,11345.70,11504.55,11226.34,11350.01,5032330000,11350.01 +2008-06-27,11452.85,11556.33,11248.48,11346.51,6208260000,11346.51 +2008-06-26,11808.57,11808.57,11431.92,11453.42,5231280000,11453.42 +2008-06-25,11805.31,12008.70,11683.75,11811.83,4825640000,11811.83 +2008-06-24,11842.36,11962.37,11668.53,11807.43,4705050000,11807.43 +2008-06-23,11843.83,11986.96,11731.06,11842.36,4186370000,11842.36 +2008-06-20,12062.19,12078.23,11785.04,11842.69,5324900000,11842.69 +2008-06-19,12022.54,12188.31,11881.03,12063.09,4811670000,12063.09 +2008-06-18,12158.68,12212.33,11947.07,12029.06,4573570000,12029.06 +2008-06-17,12269.65,12378.67,12114.14,12160.30,3801960000,12160.30 +2008-06-16,12306.86,12381.44,12139.79,12269.08,3706940000,12269.08 +2008-06-13,12144.59,12376.72,12096.23,12307.35,4080420000,12307.35 +2008-06-12,12089.63,12337.72,12041.43,12141.58,4734240000,12141.58 +2008-06-11,12286.34,12317.20,12029.46,12083.77,4779980000,12083.77 +2008-06-10,12277.71,12425.98,12116.58,12289.76,4635070000,12289.76 +2008-06-09,12210.13,12406.36,12102.50,12280.32,4404570000,12280.32 +2008-06-06,12602.74,12602.74,12180.50,12209.81,4771660000,12209.81 +2008-06-05,12388.81,12652.81,12358.07,12604.45,4350790000,12604.45 +2008-06-04,12391.86,12540.37,12283.74,12390.48,4338640000,12390.48 +2008-06-03,12503.20,12620.98,12317.61,12402.85,4396380000,12402.85 +2008-06-02,12637.67,12645.40,12385.76,12503.82,3714320000,12503.82 +2008-05-30,12647.36,12750.84,12555.60,12638.32,3845630000,12638.32 +2008-05-29,12593.87,12760.21,12493.47,12646.22,3894440000,12646.22 +2008-05-28,12542.90,12693.77,12437.38,12594.03,3927240000,12594.03 +2008-05-27,12479.63,12626.84,12397.56,12548.35,3588860000,12548.35 +2008-05-23,12620.90,12637.43,12420.20,12479.63,3516380000,12479.63 +2008-05-22,12597.69,12743.68,12515.78,12625.62,3955960000,12625.62 +2008-05-21,12824.94,12926.71,12550.39,12601.19,4517990000,12601.19 +2008-05-20,13026.04,13026.04,12742.29,12828.68,3854320000,12828.68 +2008-05-19,12985.41,13170.97,12899.19,13028.16,3683970000,13028.16 +2008-05-16,12992.74,13069.52,12860.60,12986.80,3842590000,12986.80 +2008-05-15,12891.29,13028.16,12798.39,12992.66,3836480000,12992.66 +2008-05-14,12825.12,13037.44,12806.21,12898.38,3979370000,12898.38 +2008-05-13,12872.08,12957.65,12716.16,12832.18,4018590000,12832.18 +2008-05-12,12768.38,12903.33,12746.36,12876.05,3370630000,12876.05 +2008-05-09,12860.68,12871.75,12648.09,12745.88,3518620000,12745.88 +2008-05-08,12814.84,12965.95,12727.56,12866.78,3827550000,12866.78 +2008-05-07,13010.82,13097.77,12756.14,12814.35,4075860000,12814.35 +2008-05-06,12968.89,13071.07,12817.53,13020.83,3924100000,13020.83 +2008-05-05,13056.57,13105.75,12896.50,12969.54,3410090000,12969.54 +2008-05-02,13012.53,13191.49,12931.35,13058.20,3953030000,13058.20 +2008-05-01,12818.34,13079.94,12721.94,13010.00,4448780000,13010.00 +2008-04-30,12831.45,13052.91,12746.45,12820.13,4508890000,12820.13 +2008-04-29,12870.37,12970.27,12737.82,12831.94,3815320000,12831.94 +2008-04-28,12890.76,13015.62,12791.55,12871.75,3607000000,12871.75 +2008-04-25,12848.38,12987.29,12703.70,12891.86,3891150000,12891.86 +2008-04-24,12764.68,12979.88,12651.51,12848.95,4461660000,12848.95 +2008-04-23,12721.45,12883.80,12627.00,12763.22,4103610000,12763.22 +2008-04-22,12825.02,12870.86,12604.53,12720.23,3821900000,12720.23 +2008-04-21,12850.91,12902.69,12666.08,12825.02,3420570000,12825.02 +2008-04-18,12626.76,12965.47,12626.76,12849.36,4222380000,12849.36 +2008-04-17,12617.40,12725.93,12472.71,12620.49,3713880000,12620.49 +2008-04-16,12371.51,12670.56,12371.51,12619.27,4260370000,12619.27 +2008-04-15,12303.60,12459.36,12223.97,12362.47,3581230000,12362.47 +2008-04-14,12324.77,12430.86,12208.42,12302.06,3565020000,12302.06 +2008-04-11,12579.78,12579.78,12280.89,12325.42,3723790000,12325.42 +2008-04-10,12526.78,12705.90,12447.96,12581.98,3686150000,12581.98 +2008-04-09,12574.65,12686.93,12416.53,12527.26,3556670000,12527.26 +2008-04-08,12602.66,12664.38,12440.55,12576.44,3602500000,12576.44 +2008-04-07,12612.59,12786.83,12550.22,12612.43,3747780000,12612.43 +2008-04-04,12626.35,12738.30,12489.40,12609.42,3703100000,12609.42 +2008-04-03,12604.69,12734.97,12455.04,12626.03,3920100000,12626.03 +2008-04-02,12651.67,12790.28,12488.22,12608.92,4320440000,12608.92 +2008-04-01,12266.64,12693.93,12266.64,12654.36,4745120000,12654.36 +2008-03-31,12215.92,12384.84,12095.18,12262.89,4188990000,12262.89 +2008-03-28,12303.92,12441.67,12164.22,12216.40,3686980000,12216.40 +2008-03-27,12421.88,12528.13,12264.76,12302.46,4037930000,12302.46 +2008-03-26,12531.79,12531.79,12309.62,12422.86,4055670000,12422.86 +2008-03-25,12547.34,12639.82,12397.62,12532.60,4145120000,12532.60 +2008-03-24,12361.97,12687.61,12346.17,12548.64,4499000000,12548.64 +2008-03-20,12102.43,12434.34,12024.68,12361.32,6145220000,12361.32 +2008-03-19,12391.52,12525.19,12077.27,12099.66,5358550000,12099.66 +2008-03-18,11975.92,12411.63,11975.92,12392.66,5335630000,12392.66 +2008-03-17,11946.45,12119.69,11650.44,11972.25,5683010000,11972.25 +2008-03-14,12146.39,12249.86,11781.43,11951.09,5153780000,11951.09 +2008-03-13,12096.49,12242.29,11832.88,12145.74,5073360000,12145.74 +2008-03-12,12148.61,12360.58,12037.79,12110.24,4414280000,12110.24 +2008-03-11,11741.33,12205.98,11741.33,12156.81,5109080000,12156.81 +2008-03-10,11893.04,11993.75,11691.47,11740.15,4261240000,11740.15 +2008-03-07,12039.09,12131.33,11778.66,11893.69,4565410000,11893.69 +2008-03-06,12254.59,12267.86,12010.03,12040.39,4323460000,12040.39 +2008-03-05,12204.93,12392.74,12105.36,12254.99,4277710000,12254.99 +2008-03-04,12259.14,12291.22,11991.06,12213.80,4757180000,12213.80 +2008-03-03,12264.36,12344.71,12101.29,12258.90,4117570000,12258.90 +2008-02-29,12579.58,12579.58,12210.30,12266.39,4426730000,12266.39 +2008-02-28,12689.28,12713.99,12463.32,12582.18,3938580000,12582.18 +2008-02-27,12683.54,12815.59,12527.64,12694.28,3904700000,12694.28 +2008-02-26,12569.48,12771.14,12449.08,12684.92,4096060000,12684.92 +2008-02-25,12380.77,12612.47,12292.03,12570.22,3866350000,12570.22 +2008-02-22,12281.09,12429.05,12116.92,12381.02,3572660000,12381.02 +2008-02-21,12426.85,12545.79,12225.36,12284.30,3696660000,12284.30 +2008-02-20,12333.31,12489.29,12159.42,12427.26,3870520000,12427.26 +2008-02-19,12349.59,12571.11,12276.81,12337.22,3613550000,12337.22 +2008-02-15,12376.66,12441.20,12216.68,12348.21,3583300000,12348.21 +2008-02-14,12551.51,12611.26,12332.03,12376.98,3644760000,12376.98 +2008-02-13,12368.12,12627.76,12354.22,12552.24,3856420000,12552.24 +2008-02-12,12241.56,12524.12,12207.90,12373.41,4044640000,12373.41 +2008-02-11,12181.89,12332.76,12006.79,12240.01,3593140000,12240.01 +2008-02-08,12248.47,12330.97,12058.01,12182.13,3768490000,12182.13 +2008-02-07,12196.20,12366.99,12045.00,12247.00,4589160000,12247.00 +2008-02-06,12257.25,12436.33,12142.14,12200.10,4008120000,12200.10 +2008-02-05,12631.85,12631.85,12234.97,12265.13,4315740000,12265.13 +2008-02-04,12743.11,12810.34,12557.61,12635.16,3495780000,12635.16 +2008-02-01,12638.17,12841.88,12510.05,12743.19,4650770000,12743.19 +2008-01-31,12438.28,12734.74,12197.09,12650.36,4970290000,12650.36 +2008-01-30,12480.14,12715.96,12311.55,12442.83,4742760000,12442.83 +2008-01-29,12385.19,12604.92,12262.29,12480.30,4232960000,12480.30 +2008-01-28,12205.71,12423.81,12061.42,12383.89,4100930000,12383.89 +2008-01-25,12391.70,12590.69,12103.61,12207.17,4882250000,12207.17 +2008-01-24,12272.69,12522.82,12114.83,12378.61,5735300000,12378.61 +2008-01-23,11969.08,12339.10,11530.12,12270.17,3241680000,12270.17 +2008-01-22,12092.72,12167.42,11508.74,11971.19,6544690000,11971.19 +2008-01-18,12159.94,12441.85,11953.71,12099.30,6004840000,12099.30 +2008-01-17,12467.05,12597.85,12089.38,12159.21,5303130000,12159.21 +2008-01-16,12476.81,12699.05,12294.48,12466.16,5440620000,12466.16 +2008-01-15,12777.50,12777.50,12425.92,12501.11,4601640000,12501.11 +2008-01-14,12613.78,12866.10,12596.95,12778.15,3682090000,12778.15 +2008-01-11,12850.74,12863.34,12495.91,12606.30,4495840000,12606.30 +2008-01-10,12733.11,12931.29,12632.15,12853.09,5170490000,12853.09 +2008-01-09,12590.21,12814.97,12431.53,12735.31,5351030000,12735.31 +2008-01-08,12820.90,12998.11,12511.03,12589.07,4705390000,12589.07 +2008-01-07,12801.15,12984.95,12640.44,12827.49,4221260000,12827.49 +2008-01-04,13046.56,13049.65,12740.51,12800.18,4166000000,12800.18 +2008-01-03,13044.12,13197.43,12968.44,13056.72,3429500000,13056.72 +2008-01-02,13261.82,13338.23,12969.42,13043.96,3452650000,13043.96 +2007-12-31,13364.16,13423.91,13197.35,13264.82,2440880000,13264.82 +2007-12-28,13361.23,13494.30,13272.14,13365.87,2420510000,13365.87 +2007-12-27,13549.17,13551.53,13325.71,13359.61,2365770000,13359.61 +2007-12-26,13547.95,13614.53,13440.16,13551.69,2010500000,13551.69 +2007-12-24,13487.12,13562.72,13451.35,13550.04,2200000,13550.04 +2007-12-21,13241.66,13518.20,13241.66,13450.65,4508590000,13450.65 +2007-12-20,13206.46,13354.00,13112.98,13245.64,3526890000,13245.64 +2007-12-19,13231.98,13368.79,13097.77,13207.27,3401300000,13207.27 +2007-12-18,13168.66,13346.84,13059.32,13232.47,3723690000,13232.47 +2007-12-17,13339.20,13378.38,13111.92,13167.20,3569030000,13167.20 +2007-12-14,13515.11,13557.54,13284.66,13339.85,3401050000,13339.85 +2007-12-13,13473.98,13586.73,13281.00,13517.96,3635170000,13517.96 +2007-12-12,13434.80,13778.98,13299.61,13473.90,4482120000,13473.90 +2007-12-11,13726.87,13850.92,13374.89,13432.77,4080180000,13432.77 +2007-12-10,13623.55,13807.02,13582.50,13727.03,2911760000,13727.03 +2007-12-07,13618.27,13744.02,13514.22,13625.58,3177710000,13625.58 +2007-12-06,13445.85,13652.49,13362.37,13619.89,3568570000,13619.89 +2007-12-05,13244.01,13513.00,13244.01,13444.96,3663660000,13444.96 +2007-12-04,13311.24,13395.21,13139.56,13248.73,3343620000,13248.73 +2007-12-03,13368.22,13490.24,13207.60,13314.57,3323250000,13314.57 +2007-11-30,13314.25,13570.31,13225.32,13371.72,4422200000,13371.72 +2007-11-29,13287.91,13399.03,13150.21,13311.73,3524730000,13311.73 +2007-11-28,12958.04,13353.51,12958.04,13289.45,4508020000,13289.45 +2007-11-27,12744.78,13040.38,12711.98,12958.44,4320720000,12958.44 +2007-11-26,12979.99,13104.44,12707.26,12743.44,3706470000,12743.44 +2007-11-23,12889.45,12981.56,12796.29,12980.88,1612720000,12980.88 +2007-11-21,13006.65,13055.59,12725.39,12799.04,4076230000,12799.04 +2007-11-20,12955.92,13179.23,12800.74,13010.14,4875150000,13010.14 +2007-11-19,13176.30,13195.48,12871.14,12958.44,4119650000,12958.44 +2007-11-16,13109.48,13293.44,12987.22,13176.79,4168870000,13176.79 +2007-11-15,13230.68,13333.59,13007.95,13110.05,3941010000,13110.05 +2007-11-14,13305.47,13465.20,13159.88,13231.01,4031470000,13231.01 +2007-11-13,12975.11,13357.57,12975.11,13307.09,4141310000,13307.09 +2007-11-12,13039.16,13238.73,12910.40,12987.55,4192520000,12987.55 +2007-11-09,13261.17,13321.81,12920.65,13042.74,4587050000,13042.74 +2007-11-08,13299.70,13463.66,13001.93,13266.29,5439720000,13266.29 +2007-11-07,13646.72,13646.72,13269.46,13300.02,4353160000,13300.02 +2007-11-06,13542.34,13716.55,13460.73,13660.94,3879160000,13660.94 +2007-11-05,13592.58,13666.15,13393.67,13543.40,3819330000,13543.40 +2007-11-02,13569.90,13708.58,13381.64,13595.10,4285990000,13595.10 +2007-11-01,13924.16,13924.16,13522.75,13567.87,4241470000,13567.87 +2007-10-31,13792.06,13990.65,13711.59,13930.01,3953070000,13930.01 +2007-10-30,13869.04,13930.91,13719.80,13792.47,3212520000,13792.47 +2007-10-29,13807.35,13966.18,13748.33,13870.26,3124480000,13870.26 +2007-10-26,13675.66,13885.95,13622.01,13806.70,3612120000,13806.70 +2007-10-25,13677.85,13819.78,13471.87,13671.92,4183960000,13671.92 +2007-10-24,13675.58,13751.50,13423.74,13675.25,4003300000,13675.25 +2007-10-23,13568.93,13754.91,13494.95,13676.23,3309120000,13676.23 +2007-10-22,13521.62,13636.80,13337.90,13566.97,3471830000,13566.97 +2007-10-19,13888.47,13888.47,13478.94,13522.02,4160970000,13522.02 +2007-10-18,13887.90,13984.39,13746.22,13888.96,3203210000,13888.96 +2007-10-17,13920.66,14075.84,13738.66,13892.54,3638070000,13892.54 +2007-10-16,13986.34,14061.37,13810.68,13912.94,3234560000,13912.94 +2007-10-15,14092.43,14157.38,13877.82,13984.80,3139290000,13984.80 +2007-10-12,14016.34,14168.51,13949.85,14093.08,2788690000,14093.08 +2007-10-11,14079.10,14279.96,13917.82,14015.12,3911260000,14015.12 +2007-10-10,14165.02,14225.66,13963.26,14078.69,3044760000,14078.69 +2007-10-09,14043.73,14198.83,13980.90,14164.53,2932040000,14164.53 +2007-10-08,14065.36,14134.05,13747.41,14043.73,2040650000,14043.73 +2007-10-05,13969.07,14169.49,13965.05,14066.01,2919030000,14066.01 +2007-10-04,13967.89,14074.54,13894.98,13974.31,2690430000,13974.31 +2007-10-03,14038.86,14090.48,13883.43,13968.05,3065320000,13968.05 +2007-10-02,14087.14,14166.16,13951.72,14047.31,3101910000,14047.31 +2007-10-01,13895.71,14147.30,13869.86,14087.55,3281990000,14087.55 +2007-09-28,13912.94,13994.64,13802.96,13895.63,2925350000,13895.63 +2007-09-27,13879.53,13991.63,13811.17,13912.94,2872180000,13912.94 +2007-09-26,13779.30,13962.61,13741.26,13878.15,3237390000,13878.15 +2007-09-25,13757.84,13847.10,13629.16,13778.65,3187770000,13778.65 +2007-09-24,13821.57,13930.74,13702.89,13759.06,3131310000,13759.06 +2007-09-21,13768.33,13948.95,13740.61,13820.19,3679460000,13820.19 +2007-09-20,13813.52,13893.02,13680.21,13766.70,2957700000,13766.70 +2007-09-19,13740.61,13936.68,13689.80,13815.56,3846750000,13815.56 +2007-09-18,13403.18,13772.15,13379.68,13739.39,3708940000,13739.39 +2007-09-17,13441.95,13514.71,13306.69,13403.42,2598390000,13403.42 +2007-09-14,13421.39,13507.55,13273.68,13442.52,2641740000,13442.52 +2007-09-13,13292.38,13519.91,13292.38,13424.88,2877080000,13424.88 +2007-09-12,13298.31,13408.62,13195.40,13291.65,2885720000,13291.65 +2007-09-11,13129.40,13369.77,13124.68,13308.39,3015330000,13308.39 +2007-09-10,13116.39,13280.67,12992.02,13127.85,2835720000,13127.85 +2007-09-07,13360.74,13360.74,13059.16,13113.38,3191080000,13113.38 +2007-09-06,13306.44,13464.79,13217.11,13363.35,2459590000,13363.35 +2007-09-05,13442.85,13442.85,13203.86,13305.47,2991600000,13305.47 +2007-09-04,13358.39,13521.86,13248.57,13448.86,2766600000,13448.86 +2007-08-31,13240.84,13472.35,13240.84,13357.74,2731610000,13357.74 +2007-08-30,13287.91,13355.46,13126.39,13238.73,2582960000,13238.73 +2007-08-29,13043.07,13336.93,13020.63,13289.29,2824070000,13289.29 +2007-08-28,13318.43,13319.61,13024.29,13041.85,3078090000,13041.85 +2007-08-27,13377.16,13438.46,13248.32,13322.13,2406180000,13322.13 +2007-08-24,13231.78,13402.20,13174.27,13378.87,2541400000,13378.87 +2007-08-23,13237.27,13358.22,13127.69,13235.88,3084390000,13235.88 +2007-08-22,13088.26,13304.33,13075.34,13236.13,3309120000,13236.13 +2007-08-21,13120.05,13228.57,12975.68,13090.86,3012150000,13090.86 +2007-08-20,13078.51,13245.80,12938.77,13121.35,3321340000,13121.35 +2007-08-17,12848.05,13289.70,12847.24,13079.08,3570040000,13079.08 +2007-08-16,12859.52,12996.73,12455.92,12845.78,6509300000,12845.78 +2007-08-15,13021.93,13184.51,12800.83,12861.47,4290930000,12861.47 +2007-08-14,13235.72,13309.04,12974.30,13028.92,3814630000,13028.92 +2007-08-13,13238.24,13440.08,13163.54,13236.53,3696280000,13236.53 +2007-08-10,13270.59,13386.43,12958.04,13239.54,5345780000,13239.54 +2007-08-09,13652.33,13675.66,13196.05,13270.68,5889600000,13270.68 +2007-08-08,13497.23,13769.63,13386.92,13657.86,5499560000,13657.86 +2007-08-07,13467.72,13635.09,13282.38,13504.30,4909390000,13504.30 +2007-08-06,13183.13,13501.86,13077.05,13468.78,5067200000,13468.78 +2007-08-03,13462.25,13539.50,13156.79,13181.91,4272110000,13181.91 +2007-08-02,13357.82,13547.47,13272.79,13463.33,4368850000,13463.33 +2007-08-01,13211.09,13431.06,13041.77,13362.37,5256780000,13362.37 +2007-07-31,13360.66,13579.41,13182.15,13211.99,4524520000,13211.99 +2007-07-30,13266.21,13445.12,13143.87,13358.31,4128780000,13358.31 +2007-07-27,13472.68,13589.17,13228.57,13265.47,4784650000,13265.47 +2007-07-26,13783.12,13793.61,13307.74,13473.57,4472550000,13473.57 +2007-07-25,13718.25,13919.77,13607.70,13785.07,4283200000,13785.07 +2007-07-24,13940.90,13967.65,13661.51,13716.95,4115830000,13716.95 +2007-07-23,13851.73,14039.59,13819.54,13943.42,3102700000,13943.42 +2007-07-20,14000.73,14039.67,13745.65,13851.08,3745780000,13851.08 +2007-07-19,13918.79,14121.04,13860.18,14000.41,3251450000,14000.41 +2007-07-18,13955.05,14020.89,13768.73,13918.22,3609220000,13918.22 +2007-07-17,13951.96,14095.60,13880.67,13971.55,3007140000,13971.55 +2007-07-16,13907.09,14053.57,13834.33,13950.98,2704110000,13950.98 +2007-07-13,13859.86,13982.93,13784.83,13907.25,2801120000,13907.25 +2007-07-12,13579.33,13889.45,13579.33,13861.73,3489600000,13861.73 +2007-07-11,13500.40,13638.75,13435.45,13577.87,3082920000,13577.87 +2007-07-10,13648.59,13685.90,13463.57,13501.70,3244280000,13501.70 +2007-07-09,13612.66,13739.06,13563.89,13649.97,2715330000,13649.97 +2007-07-06,13559.01,13670.46,13501.54,13611.68,2441520000,13611.68 +2007-07-05,13576.24,13637.78,13459.84,13565.84,2622950000,13565.84 +2007-07-03,13556.87,13592.07,13531.83,13577.30,1560790000,13577.30 +2007-07-02,13409.60,13586.97,13406.59,13535.43,2648990000,13535.43 +2007-06-29,13422.61,13556.16,13291.32,13408.62,3165410000,13408.62 +2007-06-28,13427.48,13537.47,13342.05,13422.28,3006710000,13422.28 +2007-06-27,13336.93,13455.36,13205.08,13427.73,3398150000,13427.73 +2007-06-26,13352.37,13491.70,13272.79,13337.66,3398530000,13337.66 +2007-06-25,13360.09,13519.34,13273.68,13352.05,3287250000,13352.05 +2007-06-22,13545.03,13564.13,13323.51,13360.26,4284320000,13360.26 +2007-06-21,13486.66,13596.56,13368.79,13545.84,3161110000,13545.84 +2007-06-20,13636.56,13735.08,13469.43,13489.42,3286900000,13489.42 +2007-06-19,13611.68,13705.41,13527.14,13635.42,2873590000,13635.42 +2007-06-18,13639.00,13720.29,13560.15,13612.98,2480240000,13612.98 +2007-06-15,13556.65,13741.18,13556.65,13639.48,3406030000,13639.48 +2007-06-14,13482.43,13622.66,13444.07,13553.73,2813630000,13553.73 +2007-06-13,13287.62,13502.76,13287.62,13482.35,3077930000,13482.35 +2007-06-12,13424.39,13474.12,13264.05,13295.01,3056200000,13295.01 +2007-06-11,13423.74,13519.88,13335.16,13424.96,2525280000,13424.96 +2007-06-08,13267.14,13445.19,13207.73,13424.39,2993460000,13424.39 +2007-06-07,13463.48,13517.85,13236.34,13266.73,3538470000,13266.73 +2007-06-06,13590.66,13606.75,13403.10,13465.67,2964190000,13465.67 +2007-06-05,13673.19,13689.40,13523.70,13595.46,2939450000,13595.46 +2007-06-04,13667.21,13723.37,13575.14,13676.32,2738930000,13676.32 +2007-06-01,13628.69,13756.69,13562.54,13668.11,2927020000,13668.11 +2007-05-31,13633.00,13718.82,13564.49,13627.64,3335530000,13627.64 +2007-05-30,13517.89,13650.64,13403.26,13633.08,2980210000,13633.08 +2007-05-29,13507.28,13603.26,13428.86,13521.34,2571790000,13521.34 +2007-05-25,13441.94,13571.48,13410.00,13507.28,2316250000,13507.28 +2007-05-24,13522.60,13645.52,13391.56,13441.13,3365530000,13441.13 +2007-05-23,13540.84,13648.69,13476.72,13525.65,3084260000,13525.65 +2007-05-22,13544.99,13632.03,13466.57,13539.95,2860500000,13539.95 +2007-05-21,13556.53,13636.98,13473.31,13542.88,3465360000,13542.88 +2007-05-18,13476.40,13611.95,13454.46,13556.53,2959050000,13556.53 +2007-05-17,13486.96,13558.24,13384.89,13476.72,2868640000,13476.72 +2007-05-16,13374.13,13526.54,13325.49,13487.53,2915350000,13487.53 +2007-05-15,13346.05,13518.33,13302.65,13383.84,3071020000,13383.84 +2007-05-14,13325.81,13432.84,13265.02,13346.78,2776130000,13346.78 +2007-05-11,13212.20,13373.35,13192.62,13326.22,2720780000,13326.22 +2007-05-10,13359.05,13376.20,13161.08,13215.13,3031240000,13215.13 +2007-05-09,13300.62,13410.17,13229.92,13362.87,2935550000,13362.87 +2007-05-08,13309.40,13359.05,13192.45,13309.07,2795720000,13309.07 +2007-05-07,13264.13,13385.06,13218.87,13312.97,2545090000,13312.97 +2007-05-04,13243.08,13340.60,13176.61,13264.62,2761930000,13264.62 +2007-05-03,13206.65,13306.55,13131.42,13241.38,3007970000,13241.38 +2007-05-02,13133.94,13291.60,13105.34,13211.88,3189800000,13211.88 +2007-05-01,13062.75,13188.96,12993.02,13136.14,3400350000,13136.14 +2007-04-30,13120.21,13226.99,13003.91,13062.91,3093420000,13062.91 +2007-04-27,13104.04,13195.05,13002.37,13120.94,2732810000,13120.94 +2007-04-26,13088.84,13197.49,13016.43,13105.50,3211800000,13105.50 +2007-04-25,12951.42,13142.31,12929.80,13089.89,3252590000,13089.89 +2007-04-24,12919.64,13033.66,12845.12,12953.94,3119750000,12953.94 +2007-04-23,12961.49,13029.59,12867.96,12919.40,2575020000,12919.40 +2007-04-20,12811.15,13035.77,12811.15,12961.98,3329940000,12961.98 +2007-04-19,12799.77,12889.17,12677.47,12808.63,2913610000,12808.63 +2007-04-18,12771.08,12871.21,12691.20,12803.84,2971330000,12803.84 +2007-04-17,12719.56,12837.40,12669.50,12773.04,2920570000,12773.04 +2007-04-16,12611.64,12770.60,12596.36,12720.46,2870140000,12720.46 +2007-04-13,12551.91,12654.47,12504.04,12612.13,2690020000,12612.13 +2007-04-12,12483.64,12580.92,12407.50,12552.96,2770570000,12552.96 +2007-04-11,12573.12,12618.63,12432.53,12484.62,2950190000,12484.62 +2007-04-10,12568.49,12641.87,12496.48,12573.85,2510110000,12573.85 +2007-04-09,12562.64,12641.22,12505.83,12569.14,2349410000,12569.14 +2007-04-05,12505.73,12573.02,12501.25,12560.83,2357230000,12560.83 +2007-04-04,12511.36,12591.81,12444.55,12530.05,2616320000,12530.05 +2007-04-03,12431.28,12534.49,12378.94,12510.93,2921760000,12510.93 +2007-04-02,12354.52,12450.81,12284.54,12382.30,2875880000,12382.30 +2007-03-30,12348.91,12442.40,12237.87,12354.35,2903960000,12354.35 +2007-03-29,12301.48,12424.77,12251.89,12348.75,2854710000,12348.75 +2007-03-28,12396.49,12415.56,12234.50,12300.36,3000440000,12300.36 +2007-03-27,12468.59,12484.54,12336.89,12397.29,2673040000,12397.29 +2007-03-26,12480.37,12526.27,12339.53,12469.07,2754660000,12469.07 +2007-03-23,12460.50,12550.07,12396.89,12481.01,2619020000,12481.01 +2007-03-22,12446.72,12524.03,12364.21,12461.14,3129970000,12461.14 +2007-03-21,12288.98,12489.02,12220.49,12447.52,3184770000,12447.52 +2007-03-20,12226.81,12324.31,12172.66,12288.10,2795940000,12288.10 +2007-03-19,12110.41,12273.52,12110.41,12226.17,2777180000,12226.17 +2007-03-16,12160.16,12226.01,12053.05,12110.41,3393640000,12110.41 +2007-03-15,12133.16,12228.42,12060.10,12159.68,2821900000,12159.68 +2007-03-14,12074.52,12187.88,11926.79,12133.40,3758350000,12133.40 +2007-03-13,12307.49,12319.66,12049.85,12075.96,3485570000,12075.96 +2007-03-12,12275.68,12385.44,12205.58,12318.62,2664000000,12318.62 +2007-03-09,12262.06,12379.51,12200.62,12276.32,2623050000,12276.32 +2007-03-08,12193.33,12355.47,12183.79,12260.70,3014850000,12260.70 +2007-03-07,12204.46,12315.18,12122.11,12192.45,3141350000,12192.45 +2007-03-06,12051.17,12252.61,12051.17,12207.59,3358160000,12207.59 +2007-03-05,12111.61,12220.16,11973.58,12050.41,3480520000,12050.41 +2007-03-02,12233.78,12293.15,12064.91,12114.10,3312260000,12114.10 +2007-03-01,12265.59,12338.89,11996.17,12234.34,3874910000,12234.34 +2007-02-28,12214.92,12396.81,12122.03,12268.63,3925250000,12268.63 +2007-02-27,12628.90,12628.90,12078.85,12216.24,4065230000,12216.24 +2007-02-26,12647.88,12746.34,12562.72,12632.26,2822170000,12632.26 +2007-02-23,12679.89,12726.79,12578.51,12647.48,2579950000,12647.48 +2007-02-22,12735.77,12792.97,12621.93,12686.02,1950770000,12686.02 +2007-02-21,12782.87,12813.88,12662.79,12738.41,2606980000,12738.41 +2007-02-20,12766.85,12845.76,12675.04,12786.64,2337860000,12786.64 +2007-02-16,12764.13,12829.42,12685.86,12767.57,2399450000,12767.57 +2007-02-15,12741.70,12828.38,12681.85,12765.01,2490920000,12765.01 +2007-02-14,12651.29,12793.29,12623.21,12741.86,2699290000,12741.86 +2007-02-13,12549.19,12702.36,12549.19,12654.85,2652150000,12654.85 +2007-02-12,12595.90,12605.11,12536.77,12552.55,2395680000,12552.55 +2007-02-09,12638.03,12725.59,12518.58,12580.83,2951810000,12580.83 +2007-02-08,12639.16,12666.88,12576.59,12637.63,2816180000,12637.63 +2007-02-07,12656.86,12748.99,12589.56,12666.87,2618820000,12666.87 +2007-02-06,12661.66,12738.41,12586.44,12666.31,2608710000,12666.31 +2007-02-05,12641.08,12681.06,12630.50,12661.74,2439430000,12661.74 +2007-02-02,12673.84,12740.65,12582.99,12653.49,2569450000,12653.49 +2007-02-01,12617.20,12741.30,12563.85,12673.68,2914890000,12673.68 +2007-01-31,12520.03,12685.54,12461.30,12621.69,2976690000,12621.69 +2007-01-30,12484.70,12538.06,12463.07,12523.31,2706250000,12523.31 +2007-01-29,12487.10,12599.74,12422.93,12490.78,2730480000,12490.78 +2007-01-26,12503.28,12582.67,12391.44,12487.02,2626620000,12487.02 +2007-01-25,12621.77,12670.48,12461.54,12502.56,2994330000,12502.56 +2007-01-24,12534.37,12659.42,12489.98,12621.77,2783180000,12621.77 +2007-01-23,12467.96,12553.44,12467.96,12533.80,2975070000,12533.80 +2007-01-22,12566.33,12619.04,12389.68,12477.16,2540120000,12477.16 +2007-01-19,12567.93,12649.89,12462.50,12565.53,2777480000,12565.53 +2007-01-18,12575.06,12674.16,12487.90,12567.93,2822430000,12567.93 +2007-01-17,12563.53,12613.28,12550.95,12577.15,2690270000,12577.15 +2007-01-16,12555.84,12638.27,12489.90,12582.59,2599530000,12582.59 +2007-01-12,12514.66,12616.08,12432.30,12556.08,2686480000,12556.08 +2007-01-11,12442.96,12586.12,12413.72,12514.98,2857870000,12514.98 +2007-01-10,12417.00,12487.18,12313.01,12442.16,2764660000,12442.16 +2007-01-09,12424.77,12516.66,12337.85,12416.60,3038380000,12416.60 +2007-01-08,12393.93,12445.37,12337.53,12423.49,2763340000,12423.49 +2007-01-05,12480.05,12504.40,12326.79,12398.01,2919400000,12398.01 +2007-01-04,12467.32,12510.26,12405.47,12480.69,3004460000,12480.69 +2007-01-03,12459.54,12630.34,12373.82,12474.52,3429160000,12474.52 +2006-12-29,12500.48,12560.16,12423.81,12463.15,1678200000,12463.15 +2006-12-28,12510.57,12566.17,12440.23,12501.52,1508570000,12501.52 +2006-12-27,12463.46,12518.34,12407.62,12510.57,1667370000,12510.57 +2006-12-26,12341.94,12439.19,12301.40,12407.63,1310310000,12407.63 +2006-12-22,12407.87,12417.96,12341.77,12343.21,1647590000,12343.21 +2006-12-21,12461.62,12526.59,12369.97,12421.25,2322410000,12421.25 +2006-12-20,12471.32,12549.35,12393.45,12463.87,2387630000,12463.87 +2006-12-19,12439.51,12517.78,12348.50,12471.32,2717060000,12471.32 +2006-12-18,12446.24,12545.74,12372.30,12441.27,2568140000,12441.27 +2006-12-15,12417.96,12536.37,12377.35,12445.52,3229580000,12445.52 +2006-12-14,12317.50,12472.76,12271.44,12416.76,2729700000,12416.76 +2006-12-13,12312.71,12411.55,12263.19,12317.50,2552260000,12317.50 +2006-12-12,12328.24,12396.01,12222.65,12315.58,2738170000,12315.58 +2006-12-11,12306.21,12399.54,12245.32,12328.48,2289900000,12328.48 +2006-12-08,12256.21,12332.16,12243.31,12307.48,2440460000,12307.48 +2006-12-07,12310.13,12396.33,12233.06,12278.41,2743150000,12278.41 +2006-12-06,12328.72,12390.88,12239.95,12309.25,2725280000,12309.25 +2006-12-05,12283.69,12398.57,12218.24,12331.60,2755700000,12331.60 +2006-12-04,12195.57,12349.87,12149.27,12283.85,2766320000,12283.85 +2006-12-01,12220.97,12289.30,12070.52,12194.13,2800980000,12194.13 +2006-11-30,12226.73,12317.10,12118.42,12221.93,4006230000,12221.93 +2006-11-29,12134.40,12283.05,12119.70,12226.73,2790970000,12226.73 +2006-11-28,12095.27,12148.78,12073.40,12136.44,2639750000,12136.44 +2006-11-27,12279.13,12303.32,12079.01,12121.71,2711210000,12121.71 +2006-11-24,12321.71,12340.89,12219.28,12280.17,832550000,12280.17 +2006-11-22,12321.91,12403.54,12238.43,12326.95,2237710000,12326.95 +2006-11-21,12312.13,12409.31,12233.94,12321.59,2597940000,12321.59 +2006-11-20,12340.71,12400.10,12257.34,12316.54,2546710000,12316.54 +2006-11-17,12293.49,12342.55,12278.20,12342.55,2726100000,12342.55 +2006-11-16,12250.05,12375.37,12204.00,12305.82,2835730000,12305.82 +2006-11-15,12214.37,12326.07,12156.37,12251.71,2831130000,12251.71 +2006-11-14,12132.44,12261.15,12051.68,12218.01,3027480000,12218.01 +2006-11-13,12084.89,12164.22,12084.89,12131.88,2386340000,12131.88 +2006-11-10,12102.74,12173.08,12074.01,12108.43,2290200000,12108.43 +2006-11-09,12174.70,12236.10,12039.59,12103.30,3012050000,12103.30 +2006-11-08,12147.38,12233.54,12051.60,12176.54,2814820000,12176.54 +2006-11-07,12104.75,12239.94,12065.20,12156.77,2636390000,12156.77 +2006-11-06,11985.16,12146.45,11973.23,12105.55,2533550000,12105.55 +2006-11-03,12018.30,12095.30,11928.97,11986.04,2419730000,11986.04 +2006-11-02,12023.98,12070.25,11938.89,12018.54,2646180000,12018.54 +2006-11-01,12080.25,12160.70,11972.99,12031.02,2821160000,12031.02 +2006-10-31,12086.18,12160.46,11986.84,12080.73,2803030000,12080.73 +2006-10-30,12074.01,12117.07,12050.23,12086.49,2770440000,12086.49 +2006-10-27,12164.78,12202.72,12024.78,12090.26,2458450000,12090.26 +2006-10-26,12134.84,12236.10,12037.99,12163.66,2793350000,12163.66 +2006-10-25,12127.24,12212.16,12017.66,12134.68,2953540000,12134.68 +2006-10-24,12116.51,12204.80,12028.14,12127.88,2876890000,12127.88 +2006-10-23,12001.33,12177.35,11940.41,12116.91,2480430000,12116.91 +2006-10-20,12013.01,12087.38,11881.34,12002.37,2526410000,12002.37 +2006-10-19,11988.92,12082.33,11911.44,12011.73,2619830000,12011.73 +2006-10-18,11947.62,12108.91,11900.79,11992.68,2658840000,11992.68 +2006-10-17,11977.40,12024.54,11849.16,11950.02,2519620000,11950.02 +2006-10-16,11957.70,11996.92,11945.70,11980.59,2305920000,11980.59 +2006-10-13,11947.22,12009.97,11862.29,11960.51,2482920000,11960.51 +2006-10-12,11896.63,11959.14,11852.12,11947.70,2514350000,11947.70 +2006-10-11,11865.49,11907.60,11762.72,11852.13,2521000000,11852.13 +2006-10-10,11857.73,11930.33,11778.09,11867.17,2376140000,11867.17 +2006-10-09,11849.56,11923.53,11759.36,11857.81,1935170000,11857.81 +2006-10-06,11865.49,11921.04,11743.35,11850.21,2523000000,11850.21 +2006-10-05,11832.51,11869.33,11821.55,11866.69,2817240000,11866.69 +2006-10-04,11722.94,11879.18,11654.02,11850.61,3019880000,11850.61 +2006-10-03,11670.11,11794.41,11608.23,11727.34,2682690000,11727.34 +2006-10-02,11678.99,11773.60,11608.79,11670.35,2154480000,11670.35 +2006-09-29,11718.05,11782.49,11642.17,11679.07,2273430000,11679.07 +2006-09-28,11689.40,11775.36,11625.92,11718.45,2397820000,11718.45 +2006-09-27,11670.19,11775.60,11595.75,11689.24,2749190000,11689.24 +2006-09-26,11575.73,11723.74,11517.54,11669.39,2673350000,11669.39 +2006-09-25,11536.67,11616.23,11486.00,11575.81,2710240000,11575.81 +2006-09-22,11532.91,11588.62,11423.57,11508.10,2162880000,11508.10 +2006-09-21,11611.67,11677.39,11471.76,11533.23,2627440000,11533.23 +2006-09-20,11542.28,11680.19,11514.50,11613.19,2543070000,11613.19 +2006-09-19,11554.60,11605.67,11450.30,11540.91,2390850000,11540.91 +2006-09-18,11538.35,11588.22,11528.43,11555.00,2325080000,11555.00 +2006-09-15,11528.75,11661.38,11504.57,11560.77,3198030000,11560.77 +2006-09-14,11508.82,11548.84,11495.77,11527.39,2351220000,11527.39 +2006-09-13,11487.69,11605.59,11423.73,11543.32,2597220000,11543.32 +2006-09-12,11412.52,11512.74,11396.83,11498.09,2791580000,11498.09 +2006-09-11,11389.87,11468.88,11295.90,11396.84,2506430000,11396.84 +2006-09-08,11332.24,11448.30,11295.18,11392.11,2132890000,11392.11 +2006-09-07,11405.16,11443.66,11273.89,11331.44,2325850000,11331.44 +2006-09-06,11421.33,11469.27,11395.15,11406.20,2329870000,11406.20 +2006-09-05,11461.83,11533.87,11385.95,11469.28,2114480000,11469.28 +2006-09-01,11427.41,11476.40,11381.14,11464.15,1800520000,11464.15 +2006-08-31,11383.47,11451.03,11326.80,11381.15,1974540000,11381.15 +2006-08-30,11365.98,11452.95,11309.99,11382.91,2060690000,11382.91 +2006-08-29,11352.65,11432.38,11255.88,11369.94,2093720000,11369.94 +2006-08-28,11285.33,11411.24,11240.91,11352.01,1834920000,11352.01 +2006-08-25,11301.22,11350.09,11218.66,11284.05,1667580000,11284.05 +2006-08-24,11297.82,11386.59,11232.83,11304.46,1930320000,11304.46 +2006-08-23,11337.12,11394.75,11238.67,11297.90,1893670000,11297.90 +2006-08-22,11344.41,11426.13,11279.25,11339.84,1908740000,11339.84 +2006-08-21,11353.29,11381.46,11322.31,11345.04,1759240000,11345.04 +2006-08-18,11333.76,11437.66,11273.49,11381.47,2033910000,11381.47 +2006-08-17,11321.19,11372.34,11298.54,11334.96,2458340000,11334.96 +2006-08-16,11224.91,11373.78,11207.85,11327.12,2554570000,11327.12 +2006-08-15,11098.03,11271.25,11098.03,11230.26,2334100000,11230.26 +2006-08-14,11089.07,11242.83,11049.68,11097.87,2118020000,11097.87 +2006-08-11,11103.55,11121.40,11042.88,11088.02,2004540000,11088.02 +2006-08-10,11073.14,11176.47,10998.06,11124.37,2402190000,11124.37 +2006-08-09,11168.47,11296.22,11044.64,11076.18,2555180000,11076.18 +2006-08-08,11218.18,11319.51,11117.80,11173.59,2457840000,11173.59 +2006-08-07,11239.47,11294.14,11143.02,11219.38,2045660000,11219.38 +2006-08-04,11244.59,11367.94,11165.11,11240.35,2530970000,11240.35 +2006-08-03,11195.28,11304.78,11101.55,11242.59,2728440000,11242.59 +2006-08-02,11167.91,11228.98,11124.52,11199.92,2610750000,11199.92 +2006-08-01,11184.80,11210.65,11035.92,11125.73,2527690000,11125.73 +2006-07-31,11218.90,11265.80,11115.24,11185.68,2461300000,11185.68 +2006-07-28,11102.11,11282.05,11102.11,11219.70,2480420000,11219.70 +2006-07-27,11104.19,11245.47,11040.80,11100.43,2776710000,11100.43 +2006-07-26,11102.91,11208.09,10987.41,11102.51,2667710000,11102.51 +2006-07-25,11037.59,11133.73,11000.05,11103.71,2563930000,11103.71 +2006-07-24,10868.70,11096.35,10868.70,11051.05,2312720000,11051.05 +2006-07-21,10937.94,10995.73,10778.58,10868.38,2704090000,10868.38 +2006-07-20,11007.26,11098.75,10884.47,10928.10,2345580000,10928.10 +2006-07-19,10854.22,11038.16,10796.74,11011.42,2701980000,11011.42 +2006-07-18,10745.84,10867.02,10658.35,10799.23,2481750000,10799.23 +2006-07-17,10739.35,10858.22,10668.35,10747.36,2146410000,10747.36 +2006-07-14,10846.53,10892.64,10664.43,10739.35,2467120000,10739.35 +2006-07-13,11012.62,11015.19,10790.82,10846.29,2545760000,10846.29 +2006-07-12,11133.97,11181.12,10973.37,11013.18,2250450000,11013.18 +2006-07-11,11102.59,11186.32,10987.33,11134.77,2310850000,11134.77 +2006-07-10,11130.53,11174.47,11090.10,11103.55,1854590000,11103.55 +2006-07-07,11224.18,11227.62,11040.32,11090.67,1988150000,11090.67 +2006-07-06,11147.12,11301.58,11117.16,11225.30,2009160000,11225.30 +2006-07-05,11225.06,11239.47,11083.94,11151.82,2165070000,11151.82 +2006-07-03,11149.34,11277.09,11146.06,11228.02,1114470000,11228.02 +2006-06-30,11190.80,11288.86,11100.11,11150.22,3049560000,11150.22 +2006-06-29,10974.36,11225.06,10974.36,11190.80,2621250000,11190.80 +2006-06-28,10925.30,11026.07,10869.02,10973.56,2085490000,10973.56 +2006-06-27,11048.24,11064.09,10920.73,10924.74,2203130000,10924.74 +2006-06-26,10990.29,11089.07,10937.06,11045.28,1878580000,11045.28 +2006-06-23,11019.19,11098.67,10932.82,10989.09,2017270000,10989.09 +2006-06-22,11077.78,11127.73,10954.83,11019.11,2148180000,11019.11 +2006-06-21,10975.24,11165.91,10952.43,11079.46,2361230000,11079.46 +2006-06-20,10942.03,11066.73,10895.28,10974.84,2232950000,10974.84 +2006-06-19,11014.87,11098.99,10886.63,10942.11,2517200000,10942.11 +2006-06-16,11009.10,11045.04,10984.29,11014.54,2783390000,11014.54 +2006-06-15,10817.48,11049.85,10788.34,11015.19,2775480000,11015.19 +2006-06-14,10713.10,10816.99,10699.25,10816.91,2667990000,10816.91 +2006-06-13,10783.14,10893.04,10653.23,10706.14,3215770000,10706.14 +2006-06-12,10892.00,10969.32,10767.61,10792.58,2247010000,10792.58 +2006-06-09,10939.14,11015.67,10842.89,10891.92,2214000000,10891.92 +2006-06-08,10929.70,11032.15,10726.15,10938.82,3543790000,10938.82 +2006-06-07,11002.06,11107.48,10897.76,10930.90,2644170000,10930.90 +2006-06-06,11048.24,11140.45,10890.24,11002.14,2697650000,11002.14 +2006-06-05,11247.55,11259.96,11025.75,11048.72,2313470000,11048.72 +2006-06-02,11260.52,11329.28,11158.06,11247.87,2295540000,11247.87 +2006-06-01,11169.03,11290.86,11115.40,11260.28,2360160000,11260.28 +2006-05-31,11091.15,11225.78,11050.40,11168.31,2692160000,11168.31 +2006-05-30,11277.25,11277.25,11071.70,11094.43,2176190000,11094.43 +2006-05-26,11211.69,11329.36,11177.43,11278.61,1814020000,11278.61 +2006-05-25,11114.96,11258.12,11089.55,11211.05,2372730000,11211.05 +2006-05-24,11100.11,11241.15,10980.29,11117.32,2999030000,11117.32 +2006-05-23,11126.29,11254.68,11068.49,11098.35,2605250000,11098.35 +2006-05-22,11092.90,11175.03,11040.16,11125.32,2773010000,11125.32 +2006-05-19,11124.37,11254.60,11009.98,11144.06,2982300000,11144.06 +2006-05-18,11206.17,11301.26,11096.35,11128.29,2537490000,11128.29 +2006-05-17,11410.13,11412.28,11139.17,11205.61,2830200000,11205.61 +2006-05-16,11428.21,11520.42,11334.64,11419.89,2386210000,11419.89 +2006-05-15,11380.43,11485.61,11273.65,11428.77,2505660000,11428.77 +2006-05-12,11500.01,11551.40,11336.96,11380.99,2567970000,11380.99 +2006-05-11,11639.29,11660.58,11449.74,11500.73,2531520000,11500.73 +2006-05-10,11630.48,11709.09,11545.64,11642.65,2268550000,11642.65 +2006-05-09,11584.62,11684.28,11535.71,11639.77,2157290000,11639.77 +2006-05-08,11576.37,11665.14,11504.09,11584.54,2151300000,11584.54 +2006-05-05,11440.62,11616.16,11440.62,11577.74,2294760000,11577.74 +2006-05-04,11401.80,11512.18,11366.82,11438.86,2431450000,11438.86 +2006-05-03,11414.69,11472.96,11308.55,11400.28,2395230000,11400.28 +2006-05-02,11372.74,11427.43,11343.28,11416.44,2403470000,11416.44 +2006-05-01,11367.78,11476.96,11304.30,11343.29,2437040000,11343.29 +2006-04-28,11358.33,11462.95,11278.13,11367.14,2419920000,11367.14 +2006-04-27,11349.53,11465.75,11220.74,11382.51,2772010000,11382.51 +2006-04-26,11283.25,11428.77,11256.12,11354.49,2502690000,11354.49 +2006-04-25,11336.56,11401.32,11213.05,11283.25,2366380000,11283.25 +2006-04-24,11346.81,11420.05,11246.35,11336.32,2117330000,11336.32 +2006-04-21,11343.45,11468.16,11272.61,11347.45,2392630000,11347.45 +2006-04-20,11278.53,11429.25,11221.30,11342.89,2512920000,11342.89 +2006-04-19,11265.40,11379.79,11181.84,11278.77,2447310000,11278.77 +2006-04-18,11074.58,11302.30,11064.01,11268.77,2595440000,11268.77 +2006-04-17,11137.33,11203.13,11017.43,11073.78,1794650000,11073.78 +2006-04-13,11130.13,11210.73,11053.29,11137.65,1891940000,11137.65 +2006-04-12,11089.47,11194.00,11052.17,11129.97,1938100000,11129.97 +2006-04-11,11141.33,11220.98,11017.99,11089.63,2232880000,11089.63 +2006-04-10,11119.88,11211.37,11083.06,11141.33,1898320000,11141.33 +2006-04-07,11228.10,11268.92,11108.75,11120.04,2082470000,11120.04 +2006-04-06,11233.01,11294.30,11137.57,11216.50,2281680000,11216.50 +2006-04-05,11203.21,11290.30,11141.82,11239.55,2420020000,11239.55 +2006-04-04,11142.54,11269.17,11094.03,11203.85,2147660000,11203.85 +2006-04-03,11113.00,11287.02,11101.07,11144.94,2494080000,11144.94 +2006-03-31,11151.34,11229.47,11069.78,11109.32,2236710000,11109.32 +2006-03-30,11195.36,11259.08,11118.12,11150.70,2294560000,11150.70 +2006-03-29,11154.94,11283.97,11117.48,11215.70,2143540000,11215.70 +2006-03-28,11250.11,11312.31,11132.05,11154.54,2148580000,11154.54 +2006-03-27,11280.13,11314.96,11194.07,11250.11,2029700000,11250.11 +2006-03-24,11270.61,11353.21,11197.21,11279.97,2326070000,11279.97 +2006-03-23,11317.35,11363.46,11207.85,11270.29,1980940000,11270.29 +2006-03-22,11234.51,11358.01,11200.22,11317.43,2039810000,11317.43 +2006-03-21,11275.89,11364.34,11188.56,11235.47,2147370000,11235.47 +2006-03-20,11278.93,11350.73,11208.33,11274.53,1976830000,11274.53 +2006-03-17,11294.94,11294.94,11253.23,11279.65,2549620000,11279.65 +2006-03-16,11210.97,11324.80,11176.07,11253.24,2292180000,11253.24 +2006-03-15,11149.76,11258.28,11097.23,11209.77,2293000000,11209.77 +2006-03-14,11076.02,11190.96,11030.23,11151.34,2165270000,11151.34 +2006-03-13,11067.61,11157.82,11019.75,11076.02,2070330000,11076.02 +2006-03-10,10972.92,11125.41,10948.43,11076.34,2123450000,11076.34 +2006-03-09,11005.66,11093.39,10923.86,10972.28,2140110000,10972.28 +2006-03-08,10977.08,11065.61,10885.99,11005.74,2442870000,11005.74 +2006-03-07,10957.31,11032.31,10885.35,10980.69,2268050000,10980.69 +2006-03-06,11022.47,11084.66,10899.76,10958.59,2280190000,10958.59 +2006-03-03,11024.23,11125.01,10942.99,11021.59,2152950000,11021.59 +2006-03-02,11052.57,11090.91,10951.71,11025.51,2494590000,11025.51 +2006-03-01,10993.25,11115.80,10960.60,11053.53,2308320000,11053.53 +2006-02-28,11096.75,11115.24,10947.07,10993.41,2370860000,10993.41 +2006-02-27,11062.81,11180.48,11038.72,11097.55,1975320000,11097.55 +2006-02-24,11068.33,11085.38,11010.46,11061.85,1933010000,11061.85 +2006-02-23,11133.52,11167.83,11017.27,11069.22,2144210000,11069.22 +2006-02-22,11086.98,11159.02,11064.25,11137.17,2222380000,11137.17 +2006-02-21,11115.48,11182.68,11011.18,11069.06,2104320000,11069.06 +2006-02-17,11119.56,11178.80,11035.44,11115.32,2128260000,11115.32 +2006-02-16,11059.05,11154.14,10997.66,11120.68,2251490000,11120.68 +2006-02-15,11025.67,11115.56,10940.18,11058.97,2317590000,11058.97 +2006-02-14,10890.72,11071.54,10873.62,11028.39,2437940000,11028.39 +2006-02-13,10915.21,10982.93,10824.60,10892.32,1850080000,10892.32 +2006-02-10,10883.51,10972.76,10787.62,10919.05,2290050000,10919.05 +2006-02-09,10859.42,11003.50,10800.91,10883.35,2441920000,10883.35 +2006-02-08,10742.16,10897.44,10712.30,10858.62,2456860000,10858.62 +2006-02-07,10796.42,10874.79,10691.97,10749.76,2366370000,10749.76 +2006-02-06,10793.30,10868.62,10725.91,10798.27,2132360000,10798.27 +2006-02-03,10849.57,10905.28,10725.35,10793.62,2282210000,10793.62 +2006-02-02,10950.11,10987.73,10800.35,10851.98,2565300000,10851.98 +2006-02-01,10862.14,11001.82,10815.39,10953.95,2589410000,10953.95 +2006-01-31,10900.40,10970.28,10807.55,10864.86,2708310000,10864.86 +2006-01-30,10913.13,10930.34,10887.67,10899.92,2282730000,10899.92 +2006-01-27,10815.32,10988.29,10766.01,10907.21,2623620000,10907.21 +2006-01-26,10768.17,10827.96,10709.73,10809.47,2856780000,10809.47 +2006-01-25,10713.26,10832.93,10615.20,10709.74,2617060000,10709.74 +2006-01-24,10690.21,10804.75,10624.49,10712.22,2608720000,10712.22 +2006-01-23,10668.75,10783.70,10607.36,10688.77,2256070000,10688.77 +2006-01-20,10880.71,10890.08,10637.21,10667.39,2845810000,10667.39 +2006-01-19,10855.18,10965.00,10796.66,10880.71,2444020000,10880.71 +2006-01-18,10890.08,10934.90,10778.33,10854.86,2233200000,10854.86 +2006-01-17,10957.55,10977.01,10841.17,10896.32,2179970000,10896.32 +2006-01-13,10961.48,11033.04,10888.88,10959.87,2206510000,10959.87 +2006-01-12,11043.12,11070.10,10918.09,10962.36,2318350000,10962.36 +2006-01-11,11011.66,11099.15,10939.86,11043.44,2406130000,11043.44 +2006-01-10,11010.46,11054.49,10902.96,11011.58,2373080000,11011.58 +2006-01-09,10959.47,11053.93,10906.33,11011.90,2301490000,11011.90 +2006-01-06,10875.45,11005.98,10846.21,10959.31,2446560000,10959.31 +2006-01-05,10880.39,10951.39,10797.55,10882.15,2433340000,10882.15 +2006-01-04,10843.97,10946.27,10772.89,10880.15,2515330000,10880.15 +2006-01-03,10718.30,10888.40,10650.18,10847.41,2554570000,10847.41 +2005-12-30,10783.86,10801.87,10675.64,10717.50,1443500000,10717.50 +2005-12-29,10795.70,10870.71,10747.76,10784.82,1382540000,10784.82 +2005-12-28,10778.25,10858.07,10750.40,10796.26,1422360000,10796.26 +2005-12-27,10883.75,10956.99,10754.16,10777.77,1540470000,10777.77 +2005-12-23,10901.68,10904.40,10869.98,10883.27,1285810000,10883.27 +2005-12-22,10831.56,10928.34,10785.93,10889.44,1888500000,10889.44 +2005-12-21,10805.63,10933.70,10776.01,10833.73,2065170000,10833.73 +2005-12-20,10836.93,10905.28,10754.56,10805.55,1996690000,10805.55 +2005-12-19,10875.51,10970.04,10781.70,10836.53,2208810000,10836.53 +2005-12-16,10881.67,10978.21,10830.84,10875.59,2584190000,10875.59 +2005-12-15,10883.43,10985.01,10803.55,10881.67,2180590000,10881.67 +2005-12-14,10821.32,10953.07,10786.34,10883.51,2145520000,10883.51 +2005-12-13,10765.69,10902.64,10694.29,10823.72,2390020000,10823.72 +2005-12-12,10778.66,10857.02,10707.18,10767.77,1876550000,10767.77 +2005-12-09,10751.76,10845.33,10694.05,10778.58,1896290000,10778.58 +2005-12-08,10808.43,10871.11,10705.17,10755.12,2178300000,10755.12 +2005-12-07,10856.86,10916.89,10737.27,10810.91,2093830000,10810.91 +2005-12-06,10835.41,10956.13,10809.15,10856.86,2110740000,10856.86 +2005-12-05,10876.95,10923.37,10766.57,10835.01,2325840000,10835.01 +2005-12-02,10912.01,10952.83,10818.36,10877.51,2125580000,10877.51 +2005-12-01,10806.03,10969.97,10806.03,10912.57,2614830000,10912.57 +2005-11-30,10883.91,10959.80,10789.38,10805.87,2374690000,10805.87 +2005-11-29,10888.48,10994.85,10850.29,10888.16,2268340000,10888.16 +2005-11-28,10932.74,10992.39,10839.37,10890.72,2016900000,10890.72 +2005-11-25,10915.13,10997.50,10883.55,10931.62,724940000,10931.62 +2005-11-23,10865.90,10950.59,10855.42,10916.09,1985400000,10916.09 +2005-11-22,10815.96,10907.77,10729.99,10871.43,2291420000,10871.43 +2005-11-21,10766.33,10871.11,10708.86,10820.28,2117350000,10820.28 +2005-11-18,10719.34,10865.58,10663.79,10766.33,2453290000,10766.33 +2005-11-17,10677.00,10778.50,10619.61,10720.22,2298040000,10720.22 +2005-11-16,10697.81,10710.78,10653.14,10674.76,2121580000,10674.76 +2005-11-15,10697.01,10783.62,10610.08,10686.44,2359370000,10686.44 +2005-11-14,10686.60,10756.88,10618.89,10697.17,1899780000,10697.17 +2005-11-11,10641.30,10725.99,10595.89,10686.04,1773140000,10686.04 +2005-11-10,10550.61,10655.22,10519.71,10640.10,2378460000,10640.10 +2005-11-09,10539.24,10637.78,10466.24,10546.21,2214460000,10546.21 +2005-11-08,10574.18,10606.80,10478.49,10539.72,1965050000,10539.72 +2005-11-07,10531.24,10632.34,10488.74,10586.23,1987580000,10586.23 +2005-11-04,10523.23,10593.51,10441.59,10530.76,2050510000,10530.76 +2005-11-03,10470.49,10613.84,10421.98,10522.59,2716630000,10522.59 +2005-11-02,10406.29,10527.32,10347.70,10472.73,2648090000,10472.73 +2005-11-01,10437.51,10510.03,10352.42,10406.77,2457850000,10406.77 +2005-10-31,10403.17,10539.16,10372.67,10440.07,2567470000,10440.07 +2005-10-28,10231.15,10433.51,10213.14,10402.77,2379400000,10402.77 +2005-10-27,10334.81,10348.66,10229.95,10229.95,2395370000,10229.95 +2005-10-26,10377.39,10474.18,10283.10,10344.98,2467750000,10344.98 +2005-10-25,10383.88,10457.52,10282.78,10377.87,2312470000,10377.87 +2005-10-24,10219.15,10411.57,10219.15,10385.00,2197790000,10385.00 +2005-10-21,10282.22,10354.02,10161.60,10215.22,2470920000,10215.22 +2005-10-20,10411.73,10483.21,10230.27,10281.10,2617250000,10281.10 +2005-10-19,10277.18,10444.15,10173.52,10414.13,2703590000,10414.13 +2005-10-18,10349.14,10412.85,10233.47,10285.26,2197010000,10285.26 +2005-10-17,10287.42,10419.58,10213.06,10348.10,2054570000,10348.10 +2005-10-14,10216.59,10327.21,10165.12,10287.34,2188940000,10287.34 +2005-10-13,10216.91,10309.20,10098.18,10216.59,2351150000,10216.59 +2005-10-12,10247.40,10308.23,10186.17,10216.90,2491280000,10216.90 +2005-10-11,10239.16,10361.15,10195.13,10253.17,2299040000,10253.17 +2005-10-10,10292.95,10378.19,10184.09,10238.76,2195990000,10238.76 +2005-10-07,10287.42,10387.48,10221.47,10292.31,2126080000,10292.31 +2005-10-06,10317.36,10425.98,10200.81,10287.10,2792030000,10287.10 +2005-10-05,10434.81,10477.21,10299.27,10317.36,2546780000,10317.36 +2005-10-04,10534.36,10618.41,10409.89,10441.11,2341420000,10441.11 +2005-10-03,10569.50,10637.00,10486.17,10535.48,2097490000,10535.48 +2005-09-30,10540.51,10569.81,10526.34,10568.70,2097520000,10568.70 +2005-09-29,10472.61,10583.43,10389.01,10552.78,2176120000,10552.78 +2005-09-28,10456.61,10560.02,10390.05,10473.08,2106980000,10473.08 +2005-09-27,10444.58,10534.31,10376.83,10456.21,1976270000,10456.21 +2005-09-26,10420.22,10544.98,10381.53,10443.63,2022220000,10443.63 +2005-09-23,10421.81,10494.42,10328.59,10419.59,1973020000,10419.59 +2005-09-22,10376.20,10489.64,10303.51,10422.05,2424720000,10422.05 +2005-09-21,10484.23,10512.02,10335.28,10378.03,2548150000,10378.03 +2005-09-20,10558.19,10642.26,10453.98,10481.52,2319250000,10481.52 +2005-09-19,10641.87,10656.75,10497.29,10557.63,2076540000,10557.63 +2005-09-16,10560.50,10696.24,10539.64,10641.94,3152470000,10641.94 +2005-09-15,10545.85,10627.85,10488.05,10558.75,2079340000,10558.75 +2005-09-14,10545.85,10627.85,10488.05,10558.75,1986750000,10558.75 +2005-09-13,10673.71,10701.57,10561.61,10597.44,2082360000,10597.44 +2005-09-12,10678.41,10743.77,10618.13,10682.94,1938050000,10682.94 +2005-09-09,10594.10,10727.53,10573.47,10678.56,1992560000,10678.56 +2005-09-08,10633.11,10670.60,10530.01,10595.93,1955380000,10595.93 +2005-09-07,10588.68,10667.10,10534.23,10633.50,2067700000,10633.50 +2005-09-06,10447.69,10621.96,10447.69,10589.24,1932090000,10589.24 +2005-09-02,10460.67,10536.14,10400.88,10447.37,1640160000,10447.37 +2005-09-01,10481.44,10557.47,10382.09,10459.63,2229860000,10459.63 +2005-08-31,10415.84,10484.55,10357.65,10481.60,2365510000,10481.60 +2005-08-30,10461.54,10476.83,10329.15,10412.82,1916470000,10412.82 +2005-08-29,10396.90,10508.35,10321.42,10463.05,1599450000,10463.05 +2005-08-26,10450.95,10480.01,10355.02,10397.29,1541090000,10397.29 +2005-08-25,10434.39,10506.60,10391.71,10450.63,1571110000,10450.63 +2005-08-24,10519.34,10584.30,10407.56,10434.87,1930800000,10434.87 +2005-08-23,10571.01,10604.29,10475.63,10519.58,1678620000,10519.58 +2005-08-22,10559.78,10669.81,10509.07,10569.89,1621330000,10569.89 +2005-08-19,10552.70,10656.59,10503.90,10559.23,1558790000,10559.23 +2005-08-18,10531.12,10592.34,10517.67,10554.92,1808170000,10554.92 +2005-08-17,10505.60,10625.86,10472.45,10550.71,1859150000,10550.71 +2005-08-16,10631.59,10650.14,10489.24,10513.45,1820410000,10513.45 +2005-08-15,10599.19,10687.72,10532.48,10634.38,1562880000,10634.38 +2005-08-12,10682.70,10688.68,10549.19,10600.30,1709300000,10600.30 +2005-08-11,10591.83,10721.56,10549.43,10685.89,1941560000,10685.89 +2005-08-10,10606.52,10746.87,10553.81,10594.41,2172320000,10594.41 +2005-08-09,10537.65,10662.80,10537.01,10615.67,1897520000,10615.67 +2005-08-08,10557.24,10635.65,10497.45,10536.93,1804140000,10536.93 +2005-08-05,10610.34,10643.46,10512.49,10558.03,1930280000,10558.03 +2005-08-04,10696.80,10709.77,10568.70,10610.10,1981220000,10610.10 +2005-08-03,10681.51,10735.17,10600.02,10697.59,1999980000,10697.59 +2005-08-02,10623.79,10729.60,10600.62,10683.74,2043120000,10683.74 +2005-08-01,10641.78,10713.51,10578.97,10623.15,1716870000,10623.15 +2005-07-29,10705.16,10754.60,10608.27,10640.91,1789600000,10640.91 +2005-07-28,10633.50,10745.68,10603.49,10705.55,2001680000,10705.55 +2005-07-27,10579.45,10689.31,10530.50,10637.09,1945800000,10637.09 +2005-07-26,10597.60,10667.90,10535.58,10579.77,1934180000,10579.77 +2005-07-25,10651.66,10709.69,10565.12,10596.48,1717580000,10596.48 +2005-07-22,10624.19,10702.21,10552.54,10651.18,1766990000,10651.18 +2005-07-21,10690.03,10735.33,10567.98,10627.77,2129840000,10627.77 +2005-07-20,10629.52,10726.81,10535.10,10689.15,2063340000,10689.15 +2005-07-19,10576.90,10718.69,10573.00,10646.56,2041280000,10646.56 +2005-07-18,10640.19,10681.99,10533.59,10574.99,1582100000,10574.99 +2005-07-15,10629.44,10698.07,10559.46,10640.83,1716400000,10640.83 +2005-07-14,10559.86,10696.96,10559.86,10628.88,2048710000,10628.88 +2005-07-13,10513.36,10596.98,10481.36,10557.39,1812500000,10557.39 +2005-07-12,10519.49,10583.02,10444.46,10513.89,1932010000,10513.89 +2005-07-11,10449.60,10570.67,10425.97,10519.72,1846300000,10519.72 +2005-07-08,10302.90,10486.50,10279.65,10449.14,1900810000,10449.14 +2005-07-07,10269.76,10337.84,10142.24,10302.29,1952440000,10302.29 +2005-07-06,10366.52,10413.23,10242.21,10270.68,1883470000,10270.68 +2005-07-05,10292.62,10388.91,10282.64,10371.80,1805820000,10371.80 +2005-07-01,10273.59,10380.78,10239.91,10303.44,1593820000,10303.44 +2005-06-30,10374.18,10458.19,10253.49,10274.97,2109490000,10274.97 +2005-06-29,10405.94,10472.46,10332.52,10374.48,1769280000,10374.48 +2005-06-28,10291.01,10434.18,10285.86,10405.63,1772410000,10405.63 +2005-06-27,10298.07,10377.55,10229.40,10290.78,1738620000,10290.78 +2005-06-24,10422.28,10452.82,10266.30,10297.83,2418800000,10297.83 +2005-06-23,10587.09,10617.39,10401.49,10421.44,2029920000,10421.44 +2005-06-22,10599.36,10676.24,10543.28,10587.93,1823250000,10587.93 +2005-06-21,10608.88,10670.56,10545.89,10599.67,1720700000,10599.67 +2005-06-20,10621.54,10656.66,10539.21,10609.10,1714530000,10609.10 +2005-06-17,10580.41,10710.38,10561.00,10623.07,2407370000,10623.07 +2005-06-16,10566.76,10632.20,10501.92,10578.65,1776040000,10578.65 +2005-06-15,10548.65,10628.67,10471.69,10566.37,1840440000,10566.37 +2005-06-14,10521.95,10617.01,10473.92,10547.57,1698150000,10547.57 +2005-06-13,10503.57,10611.10,10437.32,10522.56,1661350000,10522.56 +2005-06-10,10503.02,10581.13,10410.50,10512.63,1664180000,10512.63 +2005-06-09,10477.75,10556.90,10410.80,10503.02,1824120000,10503.02 +2005-06-08,10484.84,10575.81,10439.77,10476.86,1715490000,10476.86 +2005-06-07,10466.00,10603.15,10454.18,10483.07,1851370000,10483.07 +2005-06-06,10461.64,10519.79,10410.28,10467.03,1547120000,10467.03 +2005-06-03,10552.82,10572.18,10427.35,10460.97,1627520000,10460.97 +2005-06-02,10548.83,10590.07,10478.26,10553.49,1813790000,10553.49 +2005-06-01,10462.86,10616.15,10433.48,10549.87,1810100000,10549.87 +2005-05-31,10541.89,10574.92,10437.77,10467.48,1840680000,10467.48 +2005-05-27,10537.08,10579.94,10489.35,10542.55,1381430000,10542.55 +2005-05-26,10458.68,10581.87,10450.55,10537.60,1654110000,10537.60 +2005-05-25,10503.17,10516.17,10396.46,10457.80,1742180000,10457.80 +2005-05-24,10522.68,10550.24,10433.78,10503.68,1681000000,10503.68 +2005-05-23,10472.80,10589.92,10438.36,10523.56,1681170000,10523.56 +2005-05-20,10492.75,10535.24,10400.60,10471.91,1631750000,10471.91 +2005-05-19,10464.45,10538.71,10394.39,10493.19,1775860000,10493.19 +2005-05-18,10323.19,10518.17,10323.19,10464.45,2266320000,10464.45 +2005-05-17,10247.49,10357.30,10175.81,10331.88,1887260000,10331.88 +2005-05-16,10139.61,10274.39,10118.32,10252.29,1856860000,10252.29 +2005-05-13,10188.23,10268.85,10062.76,10140.12,2188590000,10140.12 +2005-05-12,10299.74,10357.37,10155.86,10189.48,1995290000,10189.48 +2005-05-11,10272.91,10355.31,10172.86,10300.25,1834970000,10300.25 +2005-05-10,10382.94,10389.96,10230.35,10281.11,1889660000,10281.11 +2005-05-09,10345.40,10416.56,10288.95,10384.34,1857020000,10384.34 +2005-05-06,10339.71,10454.40,10300.70,10345.40,1707200000,10345.40 +2005-05-05,10384.49,10447.08,10276.75,10340.38,1997100000,10340.38 +2005-05-04,10255.25,10412.20,10239.95,10384.64,2306480000,10384.64 +2005-05-03,10251.04,10327.37,10169.39,10256.95,2167020000,10256.95 +2005-05-02,10192.00,10309.86,10149.06,10251.70,1980040000,10251.70 +2005-04-29,10073.47,10231.31,10021.23,10192.51,2362360000,10192.51 +2005-04-28,10194.58,10229.09,10036.74,10070.37,2182270000,10070.37 +2005-04-27,10150.32,10250.23,10048.27,10198.80,2151520000,10198.80 +2005-04-26,10240.99,10298.85,10108.79,10151.13,1959740000,10151.13 +2005-04-25,10158.52,10305.87,10148.25,10242.47,1795030000,10242.47 +2005-04-22,10216.68,10266.48,10055.29,10157.71,2045880000,10157.71 +2005-04-21,10010.51,10250.30,10010.51,10218.60,2308560000,10218.60 +2005-04-20,10131.18,10232.34,9978.74,10012.36,2217050000,10012.36 +2005-04-19,10071.55,10220.21,10021.08,10127.41,2142700000,10127.41 +2005-04-18,10088.54,10183.50,9961.52,10071.25,2180670000,10071.25 +2005-04-15,10276.61,10311.26,10059.36,10087.51,2689960000,10087.51 +2005-04-14,10403.71,10457.06,10248.23,10278.75,2355040000,10278.75 +2005-04-13,10507.45,10567.38,10355.16,10403.93,2049740000,10403.93 +2005-04-12,10448.63,10552.60,10331.21,10507.97,1979830000,10507.97 +2005-04-11,10462.08,10530.58,10393.36,10448.56,1525310000,10448.56 +2005-04-08,10546.32,10584.60,10445.31,10461.34,1661330000,10461.34 +2005-04-07,10485.88,10589.99,10434.30,10546.32,1900620000,10546.32 +2005-04-06,10453.45,10557.18,10434.22,10486.02,1797400000,10486.02 +2005-04-05,10421.14,10530.14,10372.59,10458.46,1870800000,10458.46 +2005-04-04,10401.71,10496.44,10307.64,10421.14,2079770000,10421.14 +2005-04-01,10504.57,10600.56,10349.02,10404.30,2168690000,10404.30 +2005-03-31,10541.59,10586.15,10448.19,10503.76,2214230000,10503.76 +2005-03-30,10405.77,10564.80,10395.21,10540.93,2097110000,10540.93 +2005-03-29,10486.10,10565.46,10351.76,10405.70,2223250000,10405.70 +2005-03-28,10444.13,10568.05,10412.79,10485.65,1746220000,10485.65 +2005-03-24,10457.06,10554.60,10415.16,10442.87,1721720000,10442.87 +2005-03-23,10470.58,10558.51,10384.34,10456.02,2246870000,10456.02 +2005-03-22,10565.39,10651.41,10446.78,10470.51,2114470000,10470.51 +2005-03-21,10629.90,10662.93,10503.46,10565.39,1819440000,10565.39 +2005-03-18,10627.83,10709.85,10520.60,10629.67,2344370000,10629.67 +2005-03-17,10633.30,10707.86,10561.10,10626.35,1581930000,10626.35 +2005-03-16,10741.63,10764.16,10569.30,10633.07,1653190000,10633.07 +2005-03-15,10804.29,10884.76,10716.87,10745.10,1513530000,10745.10 +2005-03-14,10773.92,10859.12,10709.26,10804.51,1437430000,10804.51 +2005-03-11,10845.30,10897.68,10728.62,10774.36,1449820000,10774.36 +2005-03-10,10806.28,10907.45,10757.36,10851.51,1604020000,10851.51 +2005-03-09,10912.32,10949.20,10768.66,10805.62,1704970000,10805.62 +2005-03-08,10935.60,10996.56,10863.40,10912.62,1523090000,10912.62 +2005-03-07,10940.55,11027.15,10886.09,10936.86,1488830000,10936.86 +2005-03-04,10834.51,10996.93,10834.51,10940.55,1636820000,10940.55 +2005-03-03,10812.27,10904.34,10744.14,10833.03,1616240000,10833.03 +2005-03-02,10825.68,10896.66,10736.16,10811.97,1568540000,10811.97 +2005-03-01,10794.98,10849.14,10769.04,10830.00,1708060000,10830.00 +2005-02-28,10842.05,10877.07,10709.41,10766.23,1795480000,10766.23 +2005-02-25,10748.42,10871.53,10698.32,10841.60,1523680000,10841.60 +2005-02-24,10672.24,10779.39,10612.24,10748.79,1518750000,10748.79 +2005-02-23,10609.28,10735.42,10583.64,10673.79,1501090000,10673.79 +2005-02-22,10783.38,10806.36,10596.79,10611.20,1744940000,10611.20 +2005-02-18,10755.15,10854.98,10682.29,10785.22,1551200000,10785.22 +2005-02-17,10835.03,10873.60,10729.95,10754.26,1580120000,10754.26 +2005-02-16,10832.03,10889.78,10746.21,10834.88,1490100000,10834.88 +2005-02-15,10791.06,10886.31,10745.10,10837.32,1527080000,10837.32 +2005-02-14,10795.72,10853.80,10722.63,10791.13,1290180000,10791.13 +2005-02-11,10742.92,10865.69,10680.15,10796.01,1562300000,10796.01 +2005-02-10,10665.00,10803.92,10633.67,10749.61,1491670000,10749.61 +2005-02-09,10717.76,10781.38,10621.84,10664.11,1511040000,10664.11 +2005-02-08,10712.51,10783.97,10647.85,10724.63,1416170000,10724.63 +2005-02-07,10715.76,10774.80,10650.59,10715.76,1347270000,10715.76 +2005-02-04,10593.17,10750.94,10553.93,10716.13,1648160000,10716.13 +2005-02-03,10592.21,10640.69,10511.96,10593.10,1554460000,10593.10 +2005-02-02,10551.05,10638.25,10501.02,10596.79,1561740000,10596.79 +2005-02-01,10489.72,10609.73,10464.38,10551.94,1681980000,10551.94 +2005-01-31,10428.76,10559.77,10414.49,10489.94,1679800000,10489.94 +2005-01-28,10470.58,10520.61,10331.58,10427.20,1641800000,10427.20 +2005-01-27,10498.14,10535.16,10379.47,10467.40,1600600000,10467.40 +2005-01-26,10463.19,10571.66,10433.56,10498.59,1635900000,10498.59 +2005-01-25,10369.42,10534.72,10369.42,10461.56,1610400000,10461.56 +2005-01-24,10393.58,10491.71,10317.10,10368.61,1494600000,10368.61 +2005-01-21,10471.98,10541.30,10370.97,10392.99,1643500000,10392.99 +2005-01-20,10538.90,10582.09,10414.72,10471.47,1692000000,10471.47 +2005-01-19,10626.05,10668.40,10519.20,10539.97,1498700000,10539.97 +2005-01-18,10554.23,10665.44,10456.61,10628.79,1596800000,10628.79 +2005-01-14,10506.71,10606.47,10475.01,10558.00,1335400000,10558.00 +2005-01-13,10617.41,10650.96,10463.26,10505.83,1510300000,10505.83 +2005-01-12,10561.32,10648.52,10481.37,10617.78,1562100000,10617.78 +2005-01-11,10619.77,10632.63,10504.72,10556.22,1488800000,10556.22 +2005-01-10,10603.44,10696.85,10544.99,10621.03,1490400000,10621.03 +2005-01-07,10624.80,10697.81,10545.80,10603.96,1477900000,10603.96 +2005-01-06,10593.19,10708.37,10555.48,10622.88,1569100000,10622.88 +2005-01-05,10629.53,10736.16,10561.03,10597.83,1738900000,10597.83 +2005-01-04,10727.81,10803.62,10587.48,10630.78,1720200000,10630.78 +2005-01-03,10783.75,10892.67,10694.18,10729.43,1505900000,10729.43 +2004-12-31,10800.30,10849.81,10759.94,10783.01,786900000,10783.01 +2004-12-30,10829.12,10880.03,10781.67,10800.30,829800000,10800.30 +2004-12-29,10853.72,10872.71,10771.26,10829.19,924900000,10829.19 +2004-12-28,10776.06,10890.82,10774.51,10854.54,984200000,10854.54 +2004-12-27,10828.01,10892.52,10755.67,10776.13,922000000,10776.13 +2004-12-23,10815.00,10895.10,10780.12,10827.12,956100000,10827.12 +2004-12-22,10752.34,10861.33,10709.78,10815.89,1390800000,10815.89 +2004-12-21,10661.89,10789.66,10646.60,10759.43,1483700000,10759.43 +2004-12-20,10652.14,10769.13,10622.20,10661.60,1422800000,10661.60 +2004-12-17,10704.83,10766.01,10562.76,10649.92,2335000000,10649.92 +2004-12-16,10691.71,10776.43,10612.31,10705.64,1793900000,10705.64 +2004-12-15,10675.71,10749.53,10601.74,10691.45,1695800000,10691.45 +2004-12-14,10640.53,10715.76,10571.67,10676.45,1544400000,10676.45 +2004-12-13,10543.44,10678.52,10520.61,10638.32,1436100000,10638.32 +2004-12-10,10552.16,10616.23,10469.62,10543.22,1443700000,10543.22 +2004-12-09,10492.45,10579.94,10389.81,10552.82,1624700000,10552.82 +2004-12-08,10438.77,10550.16,10395.05,10494.23,1525200000,10494.23 +2004-12-07,10546.80,10612.90,10423.21,10440.58,1533900000,10440.58 +2004-12-06,10591.32,10614.82,10490.31,10547.06,1354400000,10547.06 +2004-12-03,10597.90,10670.47,10515.73,10592.21,1566700000,10592.21 +2004-12-02,10590.44,10670.02,10485.21,10585.12,1774900000,10585.12 +2004-12-01,10425.80,10618.59,10421.66,10590.22,1772800000,10590.22 +2004-11-30,10475.27,10530.80,10380.58,10428.02,1553500000,10428.02 +2004-11-29,10520.64,10590.73,10390.92,10475.90,1378500000,10475.90 +2004-11-26,10518.69,10574.70,10479.52,10522.23,504580000,10522.23 +2004-11-24,10493.86,10565.76,10451.66,10520.31,1149600000,10520.31 +2004-11-23,10486.69,10547.28,10407.18,10492.60,1428300000,10492.60 +2004-11-22,10455.73,10535.46,10380.95,10489.42,1392700000,10489.42 +2004-11-19,10571.63,10588.29,10419.89,10456.91,1526600000,10456.91 +2004-11-18,10549.20,10639.43,10499.62,10572.55,1456700000,10572.55 +2004-11-17,10481.83,10655.09,10470.21,10549.57,1684200000,10549.57 +2004-11-16,10549.79,10570.56,10445.31,10487.65,1364400000,10487.65 +2004-11-15,10541.89,10612.31,10463.34,10550.24,1453300000,10550.24 +2004-11-12,10469.21,10565.48,10419.77,10539.01,1531600000,10539.01 +2004-11-11,10386.95,10513.42,10364.10,10469.84,1393000000,10469.84 +2004-11-10,10378.59,10470.21,10330.54,10385.48,1504300000,10385.48 +2004-11-09,10387.62,10466.81,10327.00,10386.37,1450800000,10386.37 +2004-11-08,10385.15,10452.58,10313.51,10391.31,1358700000,10391.31 +2004-11-05,10317.05,10458.10,10279.96,10387.54,1724400000,10387.54 +2004-11-04,10132.48,10352.81,10076.36,10314.76,1782700000,10314.76 +2004-11-03,10137.05,10253.27,10062.80,10137.05,1767500000,10137.05 +2004-11-02,10053.87,10180.85,9976.29,10035.73,1659000000,10035.73 +2004-11-01,10028.73,10124.44,9953.29,10054.39,1395900000,10054.39 +2004-10-29,10004.69,10083.44,9936.77,10027.47,1500800000,10027.47 +2004-10-28,9998.94,10074.89,9900.42,10004.54,1628200000,10004.54 +2004-10-27,9888.25,10051.96,9807.80,10002.03,1741900000,10002.03 +2004-10-26,9750.59,9914.65,9718.94,9888.48,1685400000,9888.48 +2004-10-25,9757.22,9827.20,9660.18,9749.99,1380500000,9749.99 +2004-10-22,9863.85,9920.99,9732.81,9757.81,1469600000,9757.81 +2004-10-21,9884.65,9969.07,9769.16,9865.76,1673000000,9865.76 +2004-10-20,9895.19,9957.05,9766.95,9886.93,1685700000,9886.93 +2004-10-19,9958.38,10064.20,9854.19,9897.62,1737500000,9897.62 +2004-10-18,9932.98,10002.18,9816.73,9956.32,1373300000,9956.32 +2004-10-15,9895.63,10022.31,9845.56,9933.38,1645100000,9933.38 +2004-10-14,10002.54,10048.48,9837.22,9894.45,1489500000,9894.45 +2004-10-13,10085.21,10157.11,9935.08,10002.33,1546200000,10002.33 +2004-10-12,10080.42,10121.49,9985.44,10077.18,1320100000,10077.18 +2004-10-11,10056.09,10142.74,10017.67,10081.97,943800000,10081.97 +2004-10-08,10124.11,10177.53,10013.91,10055.20,1291600000,10055.20 +2004-10-07,10239.84,10267.57,10086.83,10125.40,1447500000,10125.40 +2004-10-06,10170.70,10267.14,10112.20,10239.92,1416700000,10239.92 +2004-10-05,10216.76,10253.93,10123.19,10177.68,1418400000,10177.68 +2004-10-04,10191.40,10313.81,10153.79,10216.54,1534000000,10216.54 +2004-10-01,10082.04,10237.05,10081.38,10192.65,1582200000,10192.65 +2004-09-30,10136.38,10155.49,9987.36,10080.27,1748000000,10080.27 +2004-09-29,10078.06,10160.50,10002.57,10136.24,1402900000,10136.24 +2004-09-28,9989.73,10132.04,9950.71,10077.40,1396600000,10077.40 +2004-09-27,10046.65,10077.32,9952.78,9988.54,1263500000,9988.54 +2004-09-24,10039.42,10111.39,9993.92,10047.24,1255400000,10047.24 +2004-09-23,10108.29,10134.84,9999.67,10038.90,1286300000,10038.90 +2004-09-22,10244.05,10244.05,10075.33,10109.18,1379900000,10109.18 +2004-09-21,10204.52,10291.39,10159.54,10244.93,1325000000,10244.93 +2004-09-20,10283.87,10293.23,10152.90,10204.89,1197600000,10204.89 +2004-09-17,10245.82,10352.37,10219.71,10284.46,1422600000,10284.46 +2004-09-16,10231.59,10315.72,10194.35,10244.49,1113900000,10244.49 +2004-09-15,10316.90,10324.87,10195.60,10231.36,1256000000,10231.36 +2004-09-14,10315.13,10374.79,10260.93,10318.16,1204500000,10318.16 +2004-09-13,10306.65,10380.47,10250.61,10314.76,1299800000,10314.76 +2004-09-10,10289.47,10348.68,10196.19,10313.07,1261200000,10313.07 +2004-09-09,10313.36,10337.33,10269.49,10289.10,1371300000,10289.10 +2004-09-08,10342.42,10390.64,10267.94,10313.36,1246300000,10313.36 +2004-09-07,10261.52,10388.95,10255.62,10341.16,1214400000,10341.16 +2004-09-03,10277.82,10346.99,10229.52,10260.20,924170000,10260.20 +2004-09-02,10168.39,10312.99,10129.01,10290.28,1118400000,10290.28 +2004-09-01,10170.12,10230.48,10092.37,10168.46,1142100000,10168.46 +2004-08-31,10121.97,10198.03,10056.09,10173.92,1138200000,10173.92 +2004-08-30,10193.83,10226.87,10110.43,10122.52,843100000,10122.52 +2004-08-27,10174.07,10235.49,10143.91,10195.01,845400000,10195.01 +2004-08-26,10181.07,10225.61,10124.88,10173.41,1023600000,10173.41 +2004-08-25,10098.49,10224.29,10041.93,10181.74,1192200000,10181.74 +2004-08-24,10074.89,10165.07,10044.66,10098.63,1092500000,10098.63 +2004-08-23,10111.10,10159.54,10046.72,10073.05,1021900000,10073.05 +2004-08-20,10040.81,10143.76,9989.65,10110.14,1199900000,10110.14 +2004-08-19,10082.78,10111.91,9972.39,10040.82,1249400000,10040.82 +2004-08-18,9964.22,10097.01,9910.82,10083.15,1282500000,10083.15 +2004-08-17,9955.50,10053.21,9916.05,9972.83,1267800000,9972.83 +2004-08-16,9825.35,9987.58,9807.44,9954.55,1206200000,9954.55 +2004-08-13,9814.11,9897.34,9746.60,9825.35,1175100000,9825.35 +2004-08-12,9936.48,9940.02,9780.52,9814.59,1405100000,9814.59 +2004-08-11,9931.24,9981.61,9804.63,9938.32,1410400000,9938.32 +2004-08-10,9815.55,9961.70,9798.44,9944.67,1245600000,9944.67 +2004-08-09,9816.14,9902.49,9773.74,9814.66,1086000000,9814.66 +2004-08-06,9960.67,9963.47,9767.54,9815.33,1521000000,9815.33 +2004-08-05,10127.10,10158.44,9945.84,9963.03,1397400000,9963.03 +2004-08-04,10117.96,10186.16,10029.02,10126.51,1369200000,10126.51 +2004-08-03,10178.27,10228.49,10064.57,10120.24,1338300000,10120.24 +2004-08-02,10138.45,10224.29,10063.75,10179.16,1276000000,10179.16 +2004-07-30,10129.12,10194.13,10045.76,10139.71,1298200000,10139.71 +2004-07-29,10115.52,10213.08,10049.74,10129.24,1530100000,10129.24 +2004-07-28,10084.03,10170.31,9966.34,10117.07,1554300000,10117.07 +2004-07-27,9963.54,10133.95,9942.75,10085.14,1610800000,10085.14 +2004-07-26,9964.71,10054.32,9874.38,9961.92,1413400000,9961.92 +2004-07-23,10045.46,10069.51,9893.93,9962.22,1337500000,9962.22 +2004-07-22,10047.60,10114.41,9906.62,10050.33,1680800000,10050.33 +2004-07-21,10156.30,10279.96,10027.92,10046.13,1679500000,10046.13 +2004-07-20,10094.43,10186.90,10031.24,10149.07,1445800000,10149.07 +2004-07-19,10140.95,10211.60,10027.33,10094.06,1319900000,10094.06 +2004-07-16,10162.34,10289.40,10095.32,10139.78,1450300000,10139.78 +2004-07-15,10208.20,10275.27,10115.81,10163.16,1408700000,10163.16 +2004-07-14,10232.84,10313.95,10129.31,10208.80,1462000000,10208.80 +2004-07-13,10238.37,10297.58,10188.45,10247.59,1199700000,10247.59 +2004-07-12,10211.75,10284.39,10130.42,10238.22,1114600000,10238.22 +2004-07-09,10173.12,10277.16,10150.32,10213.22,1186300000,10213.22 +2004-07-08,10238.52,10297.73,10134.99,10171.56,1401100000,10171.56 +2004-07-07,10211.92,10300.53,10156.45,10240.29,1328600000,10240.29 +2004-07-06,10280.26,10308.43,10163.60,10219.34,1283300000,10219.34 +2004-07-02,10334.00,10371.40,10228.71,10282.83,1085000000,10282.83 +2004-07-01,10434.00,10473.23,10255.55,10334.16,1495700000,10334.16 +2004-06-30,10413.43,10489.16,10348.98,10435.48,1473800000,10435.48 +2004-06-29,10356.35,10460.25,10315.65,10413.43,1375000000,10413.43 +2004-06-28,10377.52,10505.16,10317.64,10357.09,1354600000,10357.09 +2004-06-25,10444.24,10514.67,10329.88,10371.84,1812900000,10371.84 +2004-06-24,10477.43,10530.01,10398.16,10443.81,1394900000,10443.81 +2004-06-23,10395.14,10498.67,10323.32,10479.57,1444200000,10479.57 +2004-06-22,10370.21,10431.05,10284.24,10395.07,1382300000,10395.07 +2004-06-21,10417.82,10471.76,10336.44,10371.47,1123900000,10371.47 +2004-06-18,10375.82,10471.84,10328.20,10416.41,1500600000,10416.41 +2004-06-17,10378.59,10417.69,10308.25,10377.52,1296700000,10377.52 +2004-06-16,10380.23,10433.52,10320.60,10379.58,1168400000,10379.58 +2004-06-15,10336.51,10464.04,10319.89,10380.43,1345900000,10380.43 +2004-06-14,10401.23,10403.50,10283.48,10334.73,1179400000,10334.73 +2004-06-10,10367.80,10448.00,10333.94,10410.10,1160600000,10410.10 +2004-06-09,10431.10,10466.59,10325.07,10368.44,1276800000,10368.44 +2004-06-08,10389.41,10462.97,10323.94,10432.52,1190300000,10432.52 +2004-06-07,10243.31,10410.81,10243.31,10391.08,1211800000,10391.08 +2004-06-04,10196.83,10327.84,10196.83,10242.82,1115300000,10242.82 +2004-06-03,10261.85,10309.46,10163.40,10195.91,1232400000,10195.91 +2004-06-02,10199.78,10310.10,10170.57,10262.97,1251700000,10262.97 +2004-06-01,10187.18,10254.17,10104.07,10202.65,1238000000,10202.65 +2004-05-28,10205.83,10250.27,10137.14,10188.45,1172600000,10188.45 +2004-05-27,10109.89,10267.66,10106.13,10205.20,1447500000,10205.20 +2004-05-26,10116.84,10175.75,10034.16,10109.89,1369400000,10109.89 +2004-05-25,9958.08,10139.27,9895.41,10117.62,1545700000,10117.62 +2004-05-24,9968.02,10084.91,9891.22,9958.43,1227500000,9958.43 +2004-05-21,9939.34,10058.50,9910.81,9966.74,1258600000,9966.74 +2004-05-20,9939.12,10014.50,9867.73,9937.64,1211000000,9937.64 +2004-05-19,9962.55,10124.79,9919.90,9937.71,1548600000,9937.71 +2004-05-18,9906.71,10028.27,9895.77,9968.51,1353000000,9968.51 +2004-05-17,10009.92,10009.92,9827.21,9906.91,1430100000,9906.91 +2004-05-14,10008.43,10096.69,9912.45,10012.87,1335900000,10012.87 +2004-05-13,10044.31,10100.24,9924.94,10010.74,1411100000,10010.74 +2004-05-12,10011.52,10089.87,9822.10,10045.16,1697600000,10045.16 +2004-05-11,9989.24,10092.78,9928.91,10019.47,1533800000,10019.47 +2004-05-10,10116.28,10116.28,9881.86,9990.02,1918400000,9990.02 +2004-05-07,10240.62,10302.93,10086.94,10117.34,1653600000,10117.34 +2004-05-06,10308.20,10332.10,10147.21,10241.26,1509300000,10241.26 +2004-05-05,10316.98,10382.98,10249.63,10310.95,1469000000,10310.95 +2004-05-04,10314.32,10403.14,10232.31,10317.20,1662100000,10317.20 +2004-05-03,10227.27,10365.74,10199.67,10314.00,1571600000,10314.00 +2004-04-30,10273.06,10374.61,10198.39,10225.57,1634700000,10225.57 +2004-04-29,10339.41,10443.81,10199.31,10272.27,1859000000,10272.27 +2004-04-28,10476.67,10479.58,10301.65,10342.60,1855600000,10342.60 +2004-04-27,10445.38,10570.92,10410.52,10478.16,1518000000,10478.16 +2004-04-26,10472.91,10540.26,10396.75,10444.73,1290600000,10444.73 +2004-04-23,10463.11,10543.95,10362.97,10472.84,1396100000,10472.84 +2004-04-22,10314.99,10529.12,10255.88,10461.20,1826700000,10461.20 +2004-04-21,10311.87,10398.53,10200.38,10317.27,1738100000,10317.27 +2004-04-20,10437.85,10530.61,10297.39,10314.50,1508500000,10314.50 +2004-04-19,10451.62,10501.79,10351.97,10437.85,1194900000,10437.85 +2004-04-16,10398.32,10500.57,10343.74,10451.97,1487800000,10451.97 +2004-04-15,10377.95,10481.21,10279.37,10397.46,1568700000,10397.46 +2004-04-14,10378.10,10453.39,10259.35,10377.95,1547700000,10377.95 +2004-04-13,10516.05,10572.13,10343.17,10381.28,1423200000,10381.28 +2004-04-12,10444.38,10559.28,10439.27,10515.56,1102400000,10515.56 +2004-04-08,10482.77,10590.15,10383.84,10442.03,1199800000,10442.03 +2004-04-07,10569.26,10580.51,10422.74,10480.15,1458800000,10480.15 +2004-04-06,10553.76,10596.37,10467.26,10570.81,1397700000,10570.81 +2004-04-05,10470.59,10582.22,10423.33,10558.37,1413700000,10558.37 +2004-04-02,10375.33,10548.74,10375.33,10470.59,1629200000,10470.59 +2004-04-01,10357.52,10449.33,10299.48,10373.33,1560700000,10373.33 +2004-03-31,10380.89,10428.59,10287.11,10357.70,1560700000,10357.70 +2004-03-30,10327.63,10411.41,10264.15,10381.70,1332400000,10381.70 +2004-03-29,10212.91,10389.93,10212.91,10329.63,1405500000,10329.63 +2004-03-26,10218.37,10306.22,10145.63,10212.97,1319100000,10212.97 +2004-03-25,10049.56,10246.15,10049.56,10218.82,1471700000,10218.82 +2004-03-24,10065.41,10140.23,9975.86,10048.23,1527800000,10048.23 +2004-03-23,10066.67,10177.04,10020.75,10063.64,1458200000,10063.64 +2004-03-22,10185.93,10185.93,9985.19,10064.75,1452300000,10064.75 +2004-03-19,10295.85,10355.41,10163.71,10186.60,1457400000,10186.60 +2004-03-18,10298.96,10355.04,10187.78,10295.78,1369200000,10295.78 +2004-03-17,10184.30,10356.59,10184.30,10300.30,1490100000,10300.30 +2004-03-16,10103.41,10253.26,10085.34,10184.67,1500700000,10184.67 +2004-03-15,10238.45,10252.68,10066.08,10102.89,1600600000,10102.89 +2004-03-12,10130.67,10281.63,10097.04,10240.08,1388500000,10240.08 +2004-03-11,10288.85,10356.22,10102.75,10128.38,1889900000,10128.38 +2004-03-10,10457.59,10523.11,10259.34,10296.89,1648400000,10296.89 +2004-03-09,10529.52,10567.03,10391.48,10456.96,1499400000,10456.96 +2004-03-08,10595.37,10677.85,10505.85,10529.48,1254400000,10529.48 +2004-03-05,10582.59,10681.40,10497.11,10595.55,1398200000,10595.55 +2004-03-04,10593.48,10645.33,10522.59,10588.00,1265800000,10588.00 +2004-03-03,10588.59,10651.03,10506.66,10593.11,1334500000,10593.11 +2004-03-02,10678.36,10713.92,10539.40,10591.48,1476000000,10591.48 +2004-03-01,10582.25,10720.14,10568.74,10678.14,1497100000,10678.14 +2004-02-27,10581.55,10689.55,10519.03,10583.92,1540400000,10583.92 +2004-02-26,10598.14,10652.96,10493.70,10580.14,1383900000,10580.14 +2004-02-25,10566.59,10660.73,10509.40,10601.62,1360700000,10601.62 +2004-02-24,10609.55,10681.40,10479.33,10566.37,1543600000,10566.37 +2004-02-23,10619.55,10711.84,10508.89,10609.62,1380400000,10609.62 +2004-02-20,10666.29,10722.77,10559.11,10619.03,1479600000,10619.03 +2004-02-19,10674.59,10794.95,10626.44,10664.73,1562800000,10664.73 +2004-02-18,10706.68,10764.36,10623.62,10671.99,1382400000,10671.99 +2004-02-17,10628.88,10762.07,10628.88,10714.88,1396500000,10714.88 +2004-02-13,10696.22,10755.47,10578.66,10627.85,1329200000,10627.85 +2004-02-12,10735.18,10775.03,10636.44,10694.07,1464300000,10694.07 +2004-02-11,10605.48,10779.40,10561.55,10737.70,1699300000,10737.70 +2004-02-10,10578.74,10667.03,10511.18,10613.85,1403900000,10613.85 +2004-02-09,10592.00,10634.81,10433.70,10579.03,1303500000,10579.03 +2004-02-06,10494.89,10634.81,10433.70,10593.03,1477600000,10593.03 +2004-02-05,10469.33,10566.37,10399.92,10495.55,1566600000,10495.55 +2004-02-04,10503.11,10567.85,10394.81,10470.74,1634800000,10470.74 +2004-02-03,10499.48,10571.48,10414.15,10505.18,1476900000,10505.18 +2004-02-02,10487.78,10614.44,10395.55,10499.18,1599200000,10499.18 +2004-01-30,10510.22,10551.03,10385.56,10488.07,1635000000,10488.07 +2004-01-29,10467.41,10611.56,10369.92,10510.29,1921900000,10510.29 +2004-01-28,10610.07,10703.25,10412.44,10468.37,1842000000,10468.37 +2004-01-27,10701.10,10748.81,10579.33,10609.92,1673100000,10609.92 +2004-01-26,10568.00,10725.18,10510.44,10702.51,1480600000,10702.51 +2004-01-23,10625.25,10691.77,10490.14,10568.29,1561200000,10568.29 +2004-01-22,10624.22,10717.40,10545.03,10623.18,1693700000,10623.18 +2004-01-21,10522.77,10665.70,10453.11,10623.62,1757600000,10623.62 +2004-01-20,10601.40,10676.96,10447.92,10528.66,1698200000,10528.66 +2004-01-16,10556.37,10666.88,10503.70,10600.51,1721100000,10600.51 +2004-01-15,10534.52,10639.03,10454.52,10553.85,1695000000,10553.85 +2004-01-14,10428.67,10573.85,10426.89,10538.37,1514600000,10538.37 +2004-01-13,10485.18,10539.25,10341.19,10427.18,1595900000,10427.18 +2004-01-12,10461.55,10543.03,10389.85,10485.18,1510200000,10485.18 +2004-01-09,10589.25,10603.48,10420.52,10458.89,1720700000,10458.89 +2004-01-08,10530.07,10651.99,10480.59,10592.44,1868400000,10592.44 +2004-01-07,10535.46,10587.55,10432.00,10529.03,1704900000,10529.03 +2004-01-06,10543.85,10584.07,10454.37,10538.66,1494500000,10538.66 +2004-01-05,10411.85,10575.92,10411.85,10544.07,1578200000,10544.07 +2004-01-02,10452.74,10554.96,10367.41,10409.85,1153200000,10409.85 +2003-12-31,10426.30,10494.44,10382.89,10453.92,1027500000,10453.92 +2003-12-30,10449.70,10493.11,10374.52,10425.04,1012600000,10425.04 +2003-12-29,10321.35,10457.78,10319.70,10450.00,1058800000,10450.00 +2003-12-26,10305.85,10368.89,10282.22,10324.67,356070000,10324.67 +2003-12-24,10341.41,10365.63,10263.04,10305.19,518060000,10305.19 +2003-12-23,10337.56,10421.48,10265.71,10341.26,1145300000,10341.26 +2003-12-22,10276.48,10371.11,10216.08,10338.00,1251700000,10338.00 +2003-12-19,10249.48,10345.44,10189.63,10278.22,1657300000,10278.22 +2003-12-18,10141.41,10278.82,10117.78,10248.08,1579900000,10248.08 +2003-12-17,10128.75,10186.67,10040.08,10145.26,1441700000,10145.26 +2003-12-16,10023.34,10173.19,9986.23,10129.56,1547900000,10129.56 +2003-12-15,10046.53,10180.97,9994.38,10022.82,1520800000,10022.82 +2003-12-12,10008.75,10091.71,9946.60,10042.16,1223100000,10042.16 +2003-12-11,9922.45,10056.97,9896.16,10008.16,1441100000,10008.16 +2003-12-10,9922.38,10000.53,9848.97,9921.86,1444000000,9921.86 +2003-12-09,9966.45,10048.75,9887.57,9923.42,1465500000,9923.42 +2003-12-08,9862.01,9997.34,9824.83,9965.27,1218900000,9965.27 +2003-12-05,9923.27,9954.16,9819.05,9862.68,1265900000,9862.68 +2003-12-04,9874.83,9978.08,9814.97,9930.82,1463100000,9930.82 +2003-12-03,9851.94,9974.45,9824.31,9873.42,1441700000,9873.42 +2003-12-02,9899.64,9936.97,9798.83,9853.64,1383200000,9853.64 +2003-12-01,9785.35,9943.34,9777.64,9899.05,1375000000,9899.05 +2003-11-28,9779.72,9832.16,9733.20,9782.46,487220000,9782.46 +2003-11-26,9763.49,9838.01,9689.05,9779.57,1097700000,9779.57 +2003-11-25,9748.68,9821.94,9679.13,9763.94,1333700000,9763.94 +2003-11-24,9629.87,9788.60,9629.87,9747.79,1302800000,9747.79 +2003-11-21,9622.02,9692.53,9556.68,9628.53,1273800000,9628.53 +2003-11-20,9688.46,9756.09,9576.91,9619.42,1326700000,9619.42 +2003-11-19,9620.68,9731.94,9584.31,9690.46,1326200000,9690.46 +2003-11-18,9711.44,9792.16,9601.35,9624.16,1354300000,9624.16 +2003-11-17,9765.64,9775.35,9603.57,9710.83,1374300000,9710.83 +2003-11-14,9836.46,9919.19,9709.13,9768.68,1356100000,9768.68 +2003-11-13,9846.97,9895.71,9740.53,9837.94,1383000000,9837.94 +2003-11-12,9729.50,9882.60,9700.02,9848.83,1349300000,9848.83 +2003-11-11,9756.53,9801.21,9673.64,9737.79,1162500000,9737.79 +2003-11-10,9807.49,9861.05,9702.46,9756.53,1243600000,9756.53 +2003-11-07,9857.12,9945.71,9770.31,9809.79,1440500000,9809.79 +2003-11-06,9820.68,9888.90,9738.53,9856.97,1453900000,9856.97 +2003-11-05,9837.64,9883.86,9746.98,9820.83,1401800000,9820.83 +2003-11-04,9857.49,9905.94,9770.46,9838.83,1417600000,9838.83 +2003-11-03,9802.46,9936.31,9792.60,9858.46,1378200000,9858.46 +2003-10-31,9786.75,9880.08,9745.94,9801.12,1498900000,9801.12 +2003-10-30,9772.01,9882.97,9719.20,9786.61,1629700000,9786.61 +2003-10-29,9747.05,9830.23,9663.27,9774.53,1562600000,9774.53 +2003-10-28,9609.72,9769.57,9592.54,9748.31,1629200000,9748.31 +2003-10-27,9584.54,9696.98,9553.80,9608.16,1371800000,9608.16 +2003-10-24,9600.98,9631.50,9463.28,9582.46,1420300000,9582.46 +2003-10-23,9597.20,9661.05,9517.50,9613.13,1604300000,9613.13 +2003-10-22,9741.98,9741.98,9551.65,9598.24,1647200000,9598.24 +2003-10-21,9778.31,9824.90,9697.94,9747.64,1498000000,9747.64 +2003-10-20,9721.50,9816.97,9665.35,9777.94,1172600000,9777.94 +2003-10-17,9791.86,9833.12,9679.72,9721.79,1352000000,9721.79 +2003-10-16,9798.68,9838.53,9679.13,9791.72,1417700000,9791.72 +2003-10-15,9824.09,9901.64,9731.57,9803.05,1521100000,9803.05 +2003-10-14,9763.27,9833.42,9696.90,9812.98,1271900000,9812.98 +2003-10-13,9675.72,9814.97,9675.72,9764.38,1040500000,9764.38 +2003-10-10,9682.90,9743.12,9622.31,9674.68,1108100000,9674.68 +2003-10-09,9633.35,9798.08,9617.35,9680.01,1578700000,9680.01 +2003-10-08,9653.33,9699.35,9571.35,9630.90,1262500000,9630.90 +2003-10-07,9593.28,9672.68,9512.76,9654.61,1279500000,9654.61 +2003-10-06,9572.39,9656.09,9524.39,9594.98,1025800000,9594.98 +2003-10-03,9492.54,9701.87,9492.54,9572.31,1570500000,9572.31 +2003-10-02,9464.76,9539.20,9397.87,9487.80,1269300000,9487.80 +2003-10-01,9275.06,9472.69,9275.06,9469.20,1566300000,9469.20 +2003-09-30,9378.10,9393.35,9199.43,9275.06,1590500000,9275.06 +2003-09-29,9314.42,9431.54,9259.68,9380.24,1366500000,9380.24 +2003-09-26,9342.43,9407.89,9257.99,9313.08,1472500000,9313.08 +2003-09-25,9425.58,9493.44,9311.47,9343.96,1530000000,9343.96 +2003-09-24,9575.97,9612.53,9400.67,9425.51,1556000000,9425.51 +2003-09-23,9535.76,9623.34,9479.41,9576.04,1301700000,9576.04 +2003-09-22,9641.80,9641.87,9467.83,9535.41,1278800000,9535.41 +2003-09-19,9661.80,9719.49,9582.64,9644.82,1518600000,9644.82 +2003-09-18,9544.04,9691.55,9513.37,9659.13,1498800000,9659.13 +2003-09-17,9566.08,9641.45,9510.28,9545.65,1338210000,9545.65 +2003-09-16,9449.16,9587.90,9426.84,9567.34,1403200000,9567.34 +2003-09-15,9471.19,9541.02,9396.03,9448.81,1151300000,9448.81 +2003-09-12,9456.88,9517.37,9348.59,9471.55,1236700000,9471.55 +2003-09-11,9415.05,9540.60,9374.49,9459.76,1335900000,9459.76 +2003-09-10,9504.88,9545.51,9373.08,9420.46,1582100000,9420.46 +2003-09-09,9584.92,9617.02,9459.85,9507.20,1414800000,9507.20 +2003-09-08,9503.41,9638.57,9492.25,9586.29,1299300000,9586.29 +2003-09-05,9589.52,9602.22,9441.93,9503.34,1465200000,9503.34 +2003-09-04,9569.09,9661.80,9492.74,9587.90,1453900000,9587.90 +2003-09-03,9521.86,9632.75,9465.72,9568.46,1675600000,9568.46 +2003-09-02,9416.67,9563.83,9357.44,9523.27,1470500000,9523.27 +2003-08-29,9373.33,9444.25,9320.52,9415.82,945100000,9415.82 +2003-08-28,9334.35,9415.68,9246.48,9374.21,1165200000,9374.21 +2003-08-27,9339.82,9387.82,9280.03,9333.79,1051400000,9333.79 +2003-08-26,9316.03,9372.45,9203.54,9340.45,1178700000,9340.45 +2003-08-25,9349.44,9381.51,9242.56,9317.64,971700000,9317.64 +2003-08-22,9436.04,9535.97,9323.26,9348.87,1308900000,9348.87 +2003-08-21,9399.96,9517.37,9345.71,9423.68,1407100000,9423.68 +2003-08-20,9420.13,9454.49,9324.03,9397.51,1210800000,9397.51 +2003-08-19,9412.17,9490.60,9315.25,9428.90,1300600000,9428.90 +2003-08-18,9320.66,9466.79,9309.16,9412.45,1127600000,9412.45 +2003-08-15,9308.52,9360.27,9253.20,9321.69,636370000,9321.69 +2003-08-14,9272.25,9356.63,9193.33,9310.56,1186800000,9310.56 +2003-08-13,9303.69,9350.19,9213.43,9271.76,1208800000,9271.76 +2003-08-12,9218.12,9329.04,9163.29,9310.06,1132300000,9310.06 +2003-08-11,9189.62,9275.61,9124.00,9217.35,1022200000,9217.35 +2003-08-08,9127.36,9230.37,9097.74,9191.09,1086600000,9191.09 +2003-08-07,9060.48,9171.13,9003.63,9126.45,1389300000,9126.45 +2003-08-06,9032.96,9151.38,8964.13,9061.74,1491000000,9061.74 +2003-08-05,9185.27,9210.21,9024.77,9036.32,1351700000,9036.32 +2003-08-04,9154.18,9231.84,9033.66,9186.04,1318700000,9186.04 +2003-08-01,9232.68,9266.37,9100.12,9153.97,1390600000,9153.97 +2003-07-31,9199.35,9398.02,9183.80,9233.80,1608000000,9233.80 +2003-07-30,9204.39,9272.88,9131.70,9200.05,1391900000,9200.05 +2003-07-29,9268.19,9327.36,9135.62,9204.46,1508900000,9204.46 +2003-07-28,9284.92,9356.77,9182.96,9266.51,1328600000,9266.51 +2003-07-25,9113.85,9296.62,9062.38,9284.57,1397500000,9284.57 +2003-07-24,9196.56,9313.99,9092.98,9112.51,1559000000,9112.51 +2003-07-23,9159.08,9249.91,9064.69,9194.24,1362700000,9194.24 +2003-07-22,9098.65,9221.83,9008.60,9158.45,1439700000,9158.45 +2003-07-21,9187.80,9219.87,9025.12,9096.69,1254200000,9096.69 +2003-07-18,9052.29,9212.31,9034.36,9188.15,1365200000,9188.15 +2003-07-17,9089.34,9160.27,8968.82,9050.82,1661400000,9050.82 +2003-07-16,9133.70,9185.63,9005.23,9094.59,1662000000,9094.59 +2003-07-15,9179.18,9260.42,9054.60,9128.97,1518600000,9128.97 +2003-07-14,9126.45,9316.44,9126.45,9177.15,1448900000,9177.15 +2003-07-11,9036.39,9176.59,9009.01,9119.59,1212700000,9119.59 +2003-07-10,9154.53,9154.53,8978.13,9036.04,1465700000,9036.04 +2003-07-09,9221.90,9270.22,9077.91,9156.21,1618000000,9156.21 +2003-07-08,9213.48,9281.77,9122.24,9223.09,1565700000,9223.09 +2003-07-07,9073.92,9289.90,9073.92,9216.79,1429100000,9216.79 +2003-07-03,9141.16,9164.48,9014.06,9070.21,775900000,9070.21 +2003-07-02,9043.54,9168.82,9025.12,9142.84,1519300000,9142.84 +2003-07-01,8983.66,9068.05,8843.61,9040.95,1460200000,9040.95 +2003-06-30,8990.74,9100.12,8934.71,8985.44,1587200000,8985.44 +2003-06-27,9079.74,9135.91,8938.26,8989.05,1267800000,8989.05 +2003-06-26,9011.06,9118.82,8953.83,9079.04,1387400000,9079.04 +2003-06-25,9109.57,9195.20,8984.29,9011.53,1459200000,9011.53 +2003-06-24,9071.48,9179.25,9020.08,9109.85,1388300000,9109.85 +2003-06-23,9199.49,9215.32,9003.83,9072.95,1398100000,9072.95 +2003-06-20,9180.93,9306.36,9149.21,9200.75,1698000000,9200.75 +2003-06-19,9293.80,9346.34,9134.50,9179.53,1530100000,9179.53 +2003-06-18,9322.67,9363.15,9185.17,9293.80,1488900000,9293.80 +2003-06-17,9319.66,9406.50,9234.78,9323.02,1479700000,9323.02 +2003-06-16,9117.56,9335.49,9117.56,9318.96,1345900000,9318.96 +2003-06-13,9197.88,9234.23,9042.63,9117.12,1271600000,9117.12 +2003-06-12,9184.29,9270.64,9089.38,9196.55,1553100000,9196.55 +2003-06-11,9048.85,9202.08,9010.13,9183.22,1520000000,9183.22 +2003-06-10,8980.79,9111.11,8946.06,9054.89,1275400000,9054.89 +2003-06-09,9061.18,9109.43,8909.78,8980.00,1307000000,8980.00 +2003-06-06,9045.57,9248.71,9008.87,9062.79,1837200000,9062.79 +2003-06-05,9036.67,9106.70,8905.37,9041.30,1693100000,9041.30 +2003-06-04,8919.94,9076.94,8882.75,9038.98,1618700000,9038.98 +2003-06-03,8898.23,8973.02,8823.51,8922.95,1450200000,8922.95 +2003-06-02,8851.45,9040.46,8833.66,8897.81,1662500000,8897.81 +2003-05-30,8711.46,8897.04,8711.46,8850.26,1688800000,8850.26 +2003-05-29,8787.23,8895.99,8657.96,8711.18,1685800000,8711.18 +2003-05-28,8781.84,8885.34,8721.90,8793.12,1559000000,8793.12 +2003-05-27,8600.54,8812.30,8523.64,8781.35,1532000000,8781.35 +2003-05-23,8594.02,8668.47,8513.98,8601.38,1201000000,8601.38 +2003-05-22,8516.99,8650.33,8495.35,8594.02,1448500000,8594.02 +2003-05-21,8485.62,8577.64,8389.68,8516.43,1457800000,8516.43 +2003-05-20,8494.09,8593.61,8394.51,8491.36,1505300000,8491.36 +2003-05-19,8676.52,8676.52,8455.72,8493.39,1375700000,8493.39 +2003-05-16,8710.36,8766.36,8614.33,8678.97,1505500000,8678.97 +2003-05-15,8649.22,8766.58,8613.84,8713.14,1508700000,8713.14 +2003-05-14,8673.29,8744.94,8575.96,8647.82,1401800000,8647.82 +2003-05-13,8722.88,8757.40,8611.18,8679.25,1418100000,8679.25 +2003-05-12,8603.90,8764.12,8544.24,8726.73,1378800000,8726.73 +2003-05-09,8492.69,8637.58,8482.89,8604.60,1326100000,8604.60 +2003-05-08,8558.67,8591.01,8435.61,8491.22,1379600000,8491.22 +2003-05-07,8585.42,8650.82,8494.87,8560.63,1531900000,8560.63 +2003-05-06,8531.28,8658.18,8486.88,8588.36,1649600000,8588.36 +2003-05-05,8583.17,8643.11,8472.67,8531.57,1446300000,8531.57 +2003-05-02,8453.48,8612.86,8389.40,8582.68,1554300000,8582.68 +2003-05-01,8478.48,8519.09,8328.55,8454.25,1397500000,8454.25 +2003-04-30,8501.38,8557.62,8402.36,8480.09,1788510000,8480.09 +2003-04-29,8472.88,8578.55,8414.61,8502.99,1525600000,8502.99 +2003-04-28,8306.84,8515.80,8290.46,8471.61,1273000000,8471.61 +2003-04-25,8438.98,8453.06,8258.80,8306.35,1335800000,8306.35 +2003-04-24,8512.44,8527.99,8363.28,8440.04,1648100000,8440.04 +2003-04-23,8484.92,8587.72,8398.65,8515.66,1667200000,8515.66 +2003-04-22,8326.38,8509.43,8238.14,8484.99,1631200000,8484.99 +2003-04-21,8336.67,8423.09,8270.56,8328.90,1118700000,8328.90 +2003-04-17,8255.79,8388.28,8172.52,8337.65,1430600000,8337.65 +2003-04-16,8405.72,8459.15,8217.27,8257.61,1587600000,8257.61 +2003-04-15,8347.66,8443.11,8251.38,8402.36,1460200000,8402.36 +2003-04-14,8203.97,8375.19,8175.60,8351.10,1131000000,8351.10 +2003-04-11,8223.22,8360.76,8156.77,8203.41,1141600000,8203.41 +2003-04-10,8198.99,8274.56,8109.85,8221.33,1275300000,8221.33 +2003-04-09,8299.28,8404.25,8174.90,8197.94,1293700000,8197.94 +2003-04-08,8299.12,8382.43,8222.24,8298.92,1235400000,8298.92 +2003-04-07,8284.15,8550.40,8272.24,8300.41,1494000000,8300.41 +2003-04-04,8240.59,8348.29,8176.66,8277.15,1241200000,8277.15 +2003-04-03,8285.76,8378.76,8199.49,8240.38,1351500000,8240.38 +2003-04-02,8070.98,8342.27,8070.98,8285.06,1589800000,8285.06 +2003-04-01,7992.83,8133.03,7947.38,8069.86,1461600000,8069.86 +2003-03-31,8142.83,8142.83,7903.97,7992.13,1495500000,7992.13 +2003-03-28,8198.85,8224.83,8070.77,8145.77,1227000000,8145.77 +2003-03-27,8226.39,8272.03,8085.40,8201.45,1232900000,8201.45 +2003-03-26,8279.88,8323.01,8165.52,8229.88,1319700000,8229.88 +2003-03-25,8216.85,8355.93,8155.65,8280.23,1333400000,8280.23 +2003-03-24,8514.82,8514.82,8166.78,8214.68,1293000000,8214.68 +2003-03-21,8290.38,8552.08,8290.38,8521.97,1883710000,8521.97 +2003-03-20,8264.68,8335.20,8122.59,8286.60,1439100000,8286.60 +2003-03-19,8193.04,8304.04,8116.01,8265.45,1473400000,8265.45 +2003-03-18,8142.69,8253.48,8057.54,8194.23,1555100000,8194.23 +2003-03-17,7857.96,8163.56,7763.56,8141.92,1700420000,8141.92 +2003-03-14,7822.17,7961.60,7761.25,7859.71,1541900000,7859.71 +2003-03-13,7555.29,7847.03,7555.29,7821.75,1816300000,7821.75 +2003-03-12,7517.76,7582.96,7397.31,7552.07,1620000000,7552.07 +2003-03-11,7568.53,7673.98,7488.00,7524.06,1427700000,7524.06 +2003-03-10,7739.40,7739.40,7545.77,7568.18,1255000000,7568.18 +2003-03-07,7671.75,7780.57,7536.18,7740.03,1368500000,7740.03 +2003-03-06,7774.76,7795.07,7624.97,7673.99,1299200000,7673.99 +2003-03-05,7702.35,7801.79,7639.82,7775.60,1332700000,7775.60 +2003-03-04,7838.14,7859.08,7688.98,7704.87,1256600000,7704.87 +2003-03-03,7890.24,7997.66,7809.05,7837.86,1208900000,7837.86 +2003-02-28,7886.11,7987.80,7826.72,7891.08,1373300000,7891.08 +2003-02-27,7807.96,7950.46,7774.34,7884.99,1287800000,7884.99 +2003-02-26,7907.39,7944.93,7767.62,7806.98,1374400000,7806.98 +2003-02-25,7856.42,7931.14,7700.53,7909.50,1483700000,7909.50 +2003-02-24,8017.34,8017.34,7828.06,7858.24,1229200000,7858.24 +2003-02-21,7915.52,8055.79,7843.81,8018.11,1398200000,8018.11 +2003-02-20,8002.70,8051.37,7858.24,7914.96,1194100000,7914.96 +2003-02-19,8033.80,8079.11,7913.70,8000.60,1075600000,8000.60 +2003-02-18,7909.30,8114.82,7909.30,8041.15,1250800000,8041.15 +2003-02-14,7750.90,7936.56,7704.96,7908.80,1404600000,7908.80 +2003-02-13,7756.55,7817.88,7602.81,7749.87,1489300000,7749.87 +2003-02-12,7836.36,7892.96,7720.39,7758.17,1260500000,7758.17 +2003-02-11,7920.93,8010.89,7798.69,7843.11,1307000000,7843.11 +2003-02-10,7865.74,7963.03,7777.98,7920.11,1238200000,7920.11 +2003-02-07,7932.45,8019.46,7811.10,7864.23,1276800000,7864.23 +2003-02-06,7981.95,8031.66,7855.87,7929.30,1430900000,7929.30 +2003-02-05,8014.45,8162.96,7950.42,7985.18,1450800000,7985.18 +2003-02-04,8104.61,8104.61,7915.93,8013.29,1451600000,8013.29 +2003-02-03,8053.74,8189.35,8032.90,8109.82,1258500000,8109.82 +2003-01-31,7939.72,8121.37,7884.66,8053.81,1578530000,8053.81 +2003-01-30,8109.14,8169.81,7918.19,7945.13,1510300000,7945.13 +2003-01-29,8087.95,8173.31,7916.89,8110.71,1595400000,8110.71 +2003-01-28,7991.07,8153.36,7954.95,8088.84,1459100000,8088.84 +2003-01-27,8128.54,8167.41,7929.16,7989.56,1435900000,7989.56 +2003-01-24,8367.89,8367.89,8092.00,8131.01,1574800000,8131.01 +2003-01-23,8320.72,8437.69,8215.61,8369.47,1744550000,8369.47 +2003-01-22,8439.54,8493.50,8270.94,8318.73,1560800000,8318.73 +2003-01-21,8586.26,8650.43,8421.03,8442.90,1335200000,8442.90 +2003-01-17,8695.82,8695.82,8523.60,8586.74,1358200000,8586.74 +2003-01-16,8721.12,8837.47,8634.46,8697.87,1534600000,8697.87 +2003-01-15,8843.64,8865.65,8674.43,8723.18,1432100000,8723.18 +2003-01-14,8787.22,8865.41,8717.56,8842.62,1379400000,8842.62 +2003-01-13,8787.83,8896.09,8721.12,8785.98,1396300000,8785.98 +2003-01-10,8776.04,8846.25,8654.21,8784.89,1485400000,8784.89 +2003-01-09,8596.68,8814.09,8596.68,8776.18,1560300000,8776.18 +2003-01-08,8735.93,8749.44,8549.72,8595.31,1467600000,8595.31 +2003-01-07,8775.84,8843.37,8661.20,8740.59,1545200000,8740.59 +2003-01-06,8602.78,8826.71,8578.86,8773.57,1435900000,8773.57 +2003-01-03,8607.38,8669.91,8503.71,8601.69,1130800000,8601.69 +2003-01-02,8342.38,8633.02,8342.38,8607.52,1229200000,8607.52 +2002-12-31,8332.24,8400.46,8216.44,8341.63,1088500000,8341.63 +2002-12-30,8304.06,8405.67,8214.93,8332.85,1057800000,8332.85 +2002-12-27,8429.28,8470.05,8272.31,8303.78,758400000,8303.78 +2002-12-26,8448.86,8587.98,8392.23,8432.61,721100000,8432.61 +2002-12-24,8491.99,8522.98,8407.45,8448.11,458310000,8448.11 +2002-12-23,8511.39,8573.92,8418.90,8493.29,1112100000,8493.29 +2002-12-20,8367.41,8557.47,8367.41,8511.32,1782730000,8511.32 +2002-12-19,8441.94,8530.25,8302.41,8364.80,1385900000,8364.80 +2002-12-18,8531.31,8553.76,8367.89,8447.35,1446200000,8447.35 +2002-12-17,8626.99,8672.38,8495.21,8535.39,1251800000,8535.39 +2002-12-16,8436.59,8649.06,8421.58,8627.40,1271600000,8627.40 +2002-12-13,8536.07,8563.16,8374.68,8433.71,1330800000,8433.71 +2002-12-12,8590.99,8662.71,8466.21,8538.40,1255300000,8538.40 +2002-12-11,8571.52,8669.91,8452.84,8589.14,1285100000,8589.14 +2002-12-10,8473.61,8624.93,8419.86,8574.26,1286600000,8574.26 +2002-12-09,8643.99,8643.99,8438.24,8473.41,1320800000,8473.41 +2002-12-06,8620.88,8707.21,8469.16,8645.77,1241100000,8645.77 +2002-12-05,8740.66,8796.68,8572.00,8623.28,1250200000,8623.28 +2002-12-04,8734.22,8834.04,8600.93,8737.85,1588900000,8737.85 +2002-12-03,8861.13,8882.04,8649.89,8742.93,1488400000,8742.93 +2002-12-02,8902.95,9076.35,8757.60,8862.57,1612000000,8862.57 +2002-11-29,8933.67,8995.78,8847.42,8896.09,643460000,8896.09 +2002-11-27,8678.96,8975.08,8678.96,8931.68,1350300000,8931.68 +2002-11-26,8844.12,8845.01,8634.53,8676.42,1543600000,8676.42 +2002-11-25,8804.97,8918.03,8717.63,8849.40,1574000000,8849.40 +2002-11-22,8842.41,8944.16,8732.23,8804.84,1626800000,8804.84 +2002-11-21,8625.48,8910.83,8619.58,8845.15,2415100000,8845.15 +2002-11-20,8469.57,8675.12,8402.72,8623.01,1517300000,8623.01 +2002-11-19,8484.93,8566.45,8355.62,8474.78,1337400000,8474.78 +2002-11-18,8579.74,8671.41,8444.26,8486.57,1282600000,8486.57 +2002-11-15,8535.64,8622.30,8421.10,8579.09,1400100000,8579.09 +2002-11-14,8403.69,8596.50,8396.27,8542.13,1488100000,8542.13 +2002-11-13,8380.32,8523.47,8237.65,8398.49,1463400000,8398.49 +2002-11-12,8356.73,8557.25,8286.13,8386.00,1377100000,8386.00 +2002-11-11,8535.81,8541.09,8315.40,8358.95,1113000000,8358.95 +2002-11-08,8585.75,8688.96,8455.01,8537.13,1446500000,8537.13 +2002-11-07,8766.08,8766.08,8517.78,8586.24,1466900000,8586.24 +2002-11-06,8677.17,8841.61,8561.48,8771.01,1623700000,8771.01 +2002-11-05,8568.76,8730.92,8497.60,8678.27,1354100000,8678.27 +2002-11-04,8521.60,8787.30,8510.08,8571.60,1645900000,8571.60 +2002-11-01,8395.64,8569.24,8271.77,8517.64,1450400000,8517.64 +2002-10-31,8427.34,8538.17,8293.17,8397.03,1641300000,8397.03 +2002-10-30,8363.95,8502.32,8273.99,8427.41,1422300000,8427.41 +2002-10-29,8367.28,8456.19,8161.01,8368.94,1529700000,8368.94 +2002-10-28,8448.98,8601.01,8281.34,8368.04,1382600000,8368.04 +2002-10-25,8317.48,8474.92,8210.74,8443.99,1340400000,8443.99 +2002-10-24,8495.38,8607.04,8253.60,8317.34,1700570000,8317.34 +2002-10-23,8448.56,8546.57,8256.79,8494.27,1593900000,8494.27 +2002-10-22,8534.08,8543.65,8303.33,8450.16,1549200000,8450.16 +2002-10-21,8320.74,8580.13,8191.87,8538.24,1447000000,8538.24 +2002-10-18,8287.72,8383.16,8115.72,8322.40,1423100000,8322.40 +2002-10-17,8038.31,8395.99,8038.31,8275.04,1780390000,8275.04 +2002-10-16,8232.10,8232.10,7958.34,8036.03,1585000000,8036.03 +2002-10-15,7883.23,8304.58,7883.23,8255.68,1956000000,8255.68 +2002-10-14,7848.21,7948.91,7725.23,7877.40,1200300000,7877.40 +2002-10-11,7540.74,7919.57,7540.74,7850.29,1854130000,7850.29 +2002-10-10,7286.34,7588.25,7181.47,7533.95,2090230000,7533.95 +2002-10-09,7499.96,7500.03,7215.39,7286.27,1885030000,7286.27 +2002-10-08,7425.82,7680.57,7294.53,7501.49,1938430000,7501.49 +2002-10-07,7528.68,7685.42,7368.46,7422.84,1576500000,7422.84 +2002-10-04,7719.34,7817.06,7428.32,7528.40,1835930000,7528.40 +2002-10-03,7753.46,7943.64,7638.47,7717.19,1674500000,7717.19 +2002-10-02,7936.57,7996.77,7696.66,7755.61,1668900000,7755.61 +2002-10-01,7593.04,7964.24,7558.36,7938.79,1780900000,7938.79 +2002-09-30,7698.81,7729.53,7422.28,7591.93,1721870000,7591.93 +2002-09-27,7996.01,7997.12,7664.89,7701.45,1507300000,7701.45 +2002-09-26,7844.62,8086.86,7800.97,7997.12,1650000000,7997.12 +2002-09-25,7687.16,7939.90,7641.87,7841.82,1651500000,7841.82 +2002-09-24,7871.23,7893.36,7606.77,7683.13,1670240000,7683.13 +2002-09-23,7984.77,7984.77,7738.06,7872.15,1381100000,7872.15 +2002-09-20,7945.93,8081.04,7868.60,7986.02,1792800000,7986.02 +2002-09-19,8170.65,8170.65,7904.87,7942.39,1524000000,7942.39 +2002-09-18,8203.07,8283.49,8013.42,8172.45,1501000000,8172.45 +2002-09-17,8386.35,8508.61,8169.88,8207.55,1448600000,8207.55 +2002-09-16,8311.79,8435.04,8214.27,8380.18,1001400000,8380.18 +2002-09-13,8377.68,8414.79,8175.85,8312.69,1271000000,8312.69 +2002-09-12,8574.94,8574.94,8334.82,8379.41,1191600000,8379.41 +2002-09-11,8604.27,8767.82,8545.11,8581.17,846600000,8581.17 +2002-09-10,8520.14,8660.94,8447.73,8602.61,1186400000,8602.61 +2002-09-09,8425.88,8584.30,8288.28,8519.38,1130600000,8519.38 +2002-09-06,8296.46,8526.80,8296.46,8427.20,1184500000,8427.20 +2002-09-05,8420.20,8420.20,8173.56,8283.70,1401300000,8283.70 +2002-09-04,8308.53,8495.03,8216.98,8425.12,1372100000,8425.12 +2002-09-03,8659.27,8659.27,8282.87,8308.05,1323400000,8308.05 +2002-08-30,8669.26,8811.72,8572.85,8663.50,929900000,8663.50 +2002-08-29,8690.69,8769.34,8514.10,8670.99,1271100000,8670.99 +2002-08-28,8823.93,8832.18,8610.79,8694.09,1146600000,8694.09 +2002-08-27,8917.49,9040.04,8747.77,8824.41,1307700000,8824.41 +2002-08-26,8873.93,8981.23,8723.43,8919.01,1016900000,8919.01 +2002-08-23,9051.49,9051.49,8806.38,8872.96,1071500000,8872.96 +2002-08-22,8961.18,9129.10,8860.34,9053.64,1373000000,9053.64 +2002-08-21,8866.14,9033.52,8768.51,8957.23,1353100000,8957.23 +2002-08-20,8986.50,8989.69,8789.13,8872.07,1308500000,8872.07 +2002-08-19,8777.09,9037.38,8720.81,8990.79,1299800000,8990.79 +2002-08-16,8813.07,8899.42,8644.59,8778.06,1265300000,8778.06 +2002-08-15,8745.04,8914.37,8620.98,8818.14,1505100000,8818.14 +2002-08-14,8479.14,8778.89,8295.34,8743.31,1533800000,8743.31 +2002-08-13,8683.15,8801.87,8445.91,8482.39,1297700000,8482.39 +2002-08-12,8741.92,8753.14,8528.15,8688.89,1036500000,8688.89 +2002-08-09,8707.24,8824.92,8538.46,8745.45,1294900000,8745.45 +2002-08-08,8456.29,8755.70,8364.29,8712.02,1646700000,8712.02 +2002-08-07,8282.25,8520.95,8171.70,8456.15,1490400000,8456.15 +2002-08-06,8049.93,8472.28,8049.93,8274.09,1514100000,8274.09 +2002-08-05,8312.92,8371.00,7991.43,8043.63,1425500000,8043.63 +2002-08-02,8504.96,8566.36,8179.80,8313.13,1538100000,8313.13 +2002-08-01,8732.58,8758.40,8430.68,8506.62,1672200000,8506.62 +2002-07-31,8678.65,8793.36,8463.21,8736.59,2049360000,8736.59 +2002-07-30,8707.03,8806.86,8484.05,8680.03,1826090000,8680.03 +2002-07-29,8267.99,8749.12,8267.99,8711.88,1778650000,8711.88 +2002-07-26,8192.61,8350.10,8039.89,8264.39,1796100000,8264.39 +2002-07-25,8185.89,8390.39,7893.34,8186.31,2424700000,8186.31 +2002-07-24,7698.46,8243.07,7489.53,8191.29,2775560000,8191.29 +2002-07-23,7785.55,8007.91,7590.75,7702.34,2441020000,7702.34 +2002-07-22,8015.04,8173.08,7668.35,7784.58,2248060000,7784.58 +2002-07-19,8356.74,8356.74,7940.83,8019.26,2654100000,8019.26 +2002-07-18,8540.47,8683.84,8350.72,8409.49,1736300000,8409.49 +2002-07-17,8476.21,8765.39,8401.12,8542.48,2566500000,8542.48 +2002-07-16,8635.31,8697.69,8346.29,8473.11,1843700000,8473.11 +2002-07-15,8681.28,8720.18,8220.78,8639.19,2574800000,8639.19 +2002-07-12,8805.33,8903.00,8555.15,8684.53,1607400000,8684.53 +2002-07-11,8812.12,8937.87,8557.84,8801.53,2080480000,8801.53 +2002-07-10,9098.16,9188.71,8772.94,8813.50,1816900000,8813.50 +2002-07-09,9273.38,9357.35,9065.88,9096.09,1348900000,9096.09 +2002-07-08,9375.70,9433.08,9184.90,9274.90,1184400000,9274.90 +2002-07-05,9061.54,9399.65,9054.97,9379.50,699400000,9379.50 +2002-07-03,9006.37,9140.32,8832.89,9054.97,1527800000,9054.97 +2002-07-02,9104.95,9185.88,8918.11,9007.75,1823000000,9007.75 +2002-07-01,9239.25,9381.37,9059.88,9109.79,1425500000,9109.79 +2002-06-28,9270.33,9435.44,9131.49,9243.26,2117000000,9243.26 +2002-06-27,9122.12,9342.33,8992.32,9269.92,1908600000,9269.92 +2002-06-26,9108.22,9207.07,8831.92,9120.11,336570000,9120.11 +2002-06-25,9285.56,9457.38,9089.17,9126.82,1513700000,9126.82 +2002-06-24,9252.47,9417.23,9046.04,9281.82,1552600000,9281.82 +2002-06-21,9430.66,9456.76,9186.71,9253.79,1497200000,9253.79 +2002-06-20,9561.64,9628.11,9390.10,9431.77,1389700000,9431.77 +2002-06-19,9702.00,9760.20,9514.29,9561.57,1336100000,9561.57 +2002-06-18,9684.52,9775.83,9588.29,9706.12,1193100000,9706.12 +2002-06-17,9476.50,9736.58,9462.30,9687.42,1236600000,9687.42 +2002-06-14,9498.92,9538.93,9229.63,9474.21,1549000000,9474.21 +2002-06-13,9612.87,9671.64,9454.41,9502.80,1405500000,9502.80 +2002-06-12,9515.12,9682.37,9380.82,9617.71,1795720000,9617.71 +2002-06-11,9647.62,9794.17,9487.91,9517.26,1212400000,9517.26 +2002-06-10,9587.38,9744.33,9509.91,9645.40,1226200000,9645.40 +2002-06-07,9592.38,9668.18,9416.33,9589.67,1341300000,9589.67 +2002-06-06,9795.70,9820.41,9552.85,9624.64,1601500000,9624.64 +2002-06-05,9688.53,9860.91,9636.82,9796.80,1300100000,9796.80 +2002-06-04,9710.34,9798.74,9541.36,9687.84,1466600000,9687.84 +2002-06-03,9923.94,10016.04,9685.49,9709.79,1324300000,9709.79 +2002-05-31,9915.15,10074.16,9865.89,9925.25,1277300000,9925.25 +2002-05-30,9915.01,9995.76,9769.64,9911.69,1286600000,9911.69 +2002-05-29,9976.94,10056.31,9860.42,9923.04,1081800000,9923.04 +2002-05-28,10106.54,10144.53,9917.64,9981.58,996500000,9981.58 +2002-05-24,10211.92,10255.93,10054.58,10104.26,885400000,10104.26 +2002-05-23,10158.30,10268.87,10044.20,10216.08,1192900000,10216.08 +2002-05-22,10098.58,10200.78,10004.41,10157.88,1136300000,10157.88 +2002-05-21,10229.08,10322.15,10060.46,10105.71,1169200000,10105.71 +2002-05-20,10348.93,10357.44,10164.39,10229.50,989800000,10229.50 +2002-05-17,10291.05,10400.62,10209.49,10353.08,1274400000,10353.08 +2002-05-16,10242.11,10374.05,10168.64,10289.21,1256600000,10289.21 +2002-05-15,10288.56,10382.97,10152.97,10243.68,1420200000,10243.68 +2002-05-14,10119.34,10346.59,10119.34,10298.14,1414500000,10298.14 +2002-05-13,9938.82,10148.71,9892.73,10109.66,1088600000,10109.66 +2002-05-10,10040.25,10115.23,9891.04,9939.92,1171900000,9939.92 +2002-05-09,10137.96,10185.08,9966.63,10037.42,1153000000,10037.42 +2002-05-08,9847.96,10203.76,9847.96,10141.83,1502000000,10141.83 +2002-05-07,9810.53,9985.32,9749.73,9836.55,1354700000,9836.55 +2002-05-06,10005.80,10081.98,9780.29,9808.04,1122600000,9808.04 +2002-05-03,10091.73,10130.97,9891.49,10006.63,1284500000,10006.63 +2002-05-02,10057.62,10182.94,9970.92,10091.87,1364000000,10091.87 +2002-05-01,9944.90,10121.21,9778.42,10059.63,1451400000,10059.63 +2002-04-30,9818.90,10063.64,9775.10,9946.22,1628600000,9946.22 +2002-04-29,9910.52,10012.16,9767.15,9819.87,1314700000,9819.87 +2002-04-26,10037.42,10127.85,9875.44,9910.72,1374200000,9910.72 +2002-04-25,10028.70,10103.64,9864.08,10035.06,1517400000,10035.06 +2002-04-24,10090.07,10209.64,9984.00,10030.43,1373200000,10030.43 +2002-04-23,10137.20,10243.06,10003.84,10089.24,1388500000,10089.24 +2002-04-22,10256.00,10299.39,10056.45,10136.43,1181800000,10136.43 +2002-04-19,10212.69,10338.83,10151.52,10257.11,1185000000,10257.11 +2002-04-18,10219.47,10334.67,10010.22,10205.28,1359300000,10205.28 +2002-04-17,10299.66,10379.51,10137.47,10220.78,1376900000,10220.78 +2002-04-16,10100.38,10365.12,10100.38,10301.32,1341300000,10301.32 +2002-04-15,10189.57,10261.05,10037.90,10093.67,1120400000,10093.67 +2002-04-12,10178.57,10312.26,10083.92,10190.82,1282100000,10190.82 +2002-04-11,10378.89,10425.87,10116.37,10176.08,1505600000,10176.08 +2002-04-10,10210.40,10437.43,10175.18,10381.73,1447900000,10381.73 +2002-04-09,10249.84,10362.98,10156.57,10208.67,1235400000,10208.67 +2002-04-08,10258.91,10300.78,10049.94,10249.08,1095300000,10249.08 +2002-04-05,10235.80,10403.66,10169.79,10271.64,1110200000,10271.64 +2002-04-04,10199.54,10301.53,10118.10,10235.17,1283800000,10235.17 +2002-04-03,10311.81,10377.09,10116.02,10198.29,1219700000,10198.29 +2002-04-02,10352.46,10394.94,10204.66,10313.71,1176700000,10313.71 +2002-04-01,10402.07,10434.52,10226.59,10362.70,1050900000,10362.70 +2002-03-28,10429.68,10537.48,10341.59,10403.94,1147600000,10403.94 +2002-03-27,10351.28,10490.15,10300.29,10426.91,1180100000,10426.91 +2002-03-26,10280.51,10475.00,10233.65,10353.36,1223600000,10353.36 +2002-03-25,10428.43,10497.76,10255.59,10281.67,1057900000,10281.67 +2002-03-22,10477.70,10537.62,10324.23,10427.67,1243300000,10427.67 +2002-03-21,10501.99,10577.82,10326.99,10479.84,1339200000,10479.84 +2002-03-20,10626.85,10634.84,10455.56,10501.57,1304900000,10501.57 +2002-03-19,10578.38,10722.78,10530.63,10635.25,1255000000,10635.25 +2002-03-18,10608.54,10707.01,10488.84,10577.75,1169500000,10577.75 +2002-03-15,10516.45,10663.69,10452.10,10607.23,1493900000,10607.23 +2002-03-14,10501.29,10615.74,10421.17,10517.14,1208800000,10517.14 +2002-03-13,10620.17,10648.68,10427.67,10501.85,1354000000,10501.85 +2002-03-12,10604.32,10682.72,10462.34,10632.35,1304400000,10632.35 +2002-03-11,10570.07,10679.68,10470.85,10611.24,1210200000,10611.24 +2002-03-08,10531.67,10728.87,10480.33,10572.49,1412000000,10572.49 +2002-03-07,10578.10,10663.82,10405.95,10525.37,1517400000,10525.37 +2002-03-06,10431.96,10637.19,10393.84,10574.29,1541300000,10574.29 +2002-03-05,10591.38,10639.96,10349.90,10433.41,1549300000,10433.41 +2002-03-04,10368.10,10656.50,10313.01,10586.82,1594300000,10586.82 +2002-03-01,10111.04,10397.09,10086.51,10368.86,1456500000,10368.86 +2002-02-28,10130.28,10283.89,10055.34,10106.13,1392200000,10106.13 +2002-02-27,10117.65,10315.72,10025.86,10127.58,1393800000,10127.58 +2002-02-26,10145.86,10241.89,9986.84,10115.26,1309200000,10115.26 +2002-02-25,9969.75,10204.04,9934.94,10145.71,1367400000,10145.71 +2002-02-22,9834.89,10032.45,9726.67,9968.15,1411000000,9968.15 +2002-02-21,9933.56,10072.98,9788.11,9834.68,1381600000,9834.68 +2002-02-20,9742.37,9990.78,9674.91,9941.17,1438900000,9941.17 +2002-02-19,9899.24,9923.39,9704.03,9745.14,1189900000,9745.14 +2002-02-15,10000.83,10065.37,9843.54,9903.04,1359200000,9903.04 +2002-02-14,9989.67,10092.29,9905.95,10001.99,1272500000,10001.99 +2002-02-13,9856.99,10056.24,9839.18,9989.67,1215900000,9989.67 +2002-02-12,9880.35,9943.24,9766.18,9863.74,1094200000,9863.74 +2002-02-11,9739.81,9933.07,9668.34,9884.78,1159400000,9884.78 +2002-02-08,9627.65,9795.38,9503.52,9744.24,1371900000,9744.24 +2002-02-07,9650.97,9799.67,9562.12,9625.44,1441600000,9625.44 +2002-02-06,9682.04,9801.33,9558.18,9653.39,1665800000,9653.39 +2002-02-05,9684.74,9842.77,9553.96,9685.43,1778300000,9685.43 +2002-02-04,9905.46,9940.96,9648.55,9687.09,1437600000,9687.09 +2002-02-01,9923.04,10022.82,9795.45,9907.26,1367200000,9907.26 +2002-01-31,9763.20,9963.79,9701.76,9920.00,1557000000,9920.00 +2002-01-30,9619.14,9821.81,9443.32,9762.86,2019600000,9762.86 +2002-01-29,9865.54,9952.59,9576.65,9618.24,1812000000,9618.24 +2002-01-28,9843.05,9959.44,9746.66,9865.75,1186800000,9865.75 +2002-01-25,9793.23,9949.54,9697.47,9840.08,1345100000,9840.08 +2002-01-24,9734.21,9926.71,9670.99,9796.07,1552800000,9796.07 +2002-01-23,9710.96,9853.64,9588.49,9730.96,1479200000,9730.96 +2002-01-22,9772.34,9905.26,9652.01,9713.80,1311600000,9713.80 +2002-01-18,9830.94,9873.98,9673.11,9771.85,1333300000,9771.85 +2002-01-17,9712.21,9910.11,9684.39,9850.04,1380100000,9850.04 +2002-01-16,9916.54,9923.32,9661.00,9712.27,1482500000,9712.27 +2002-01-15,9892.73,10038.94,9805.33,9924.15,1386900000,9924.15 +2002-01-14,9985.38,10038.87,9831.98,9891.42,1286400000,9891.42 +2002-01-11,10069.52,10163.77,9938.12,9987.53,1211900000,9987.53 +2002-01-10,10092.50,10174.91,9956.67,10067.86,1299000000,10067.86 +2002-01-09,10153.18,10311.98,10049.25,10094.09,1452000000,10094.09 +2002-01-08,10195.76,10270.53,10063.43,10150.55,1258800000,10150.55 +2002-01-07,10261.33,10345.40,10137.61,10197.05,1308300000,10197.05 +2002-01-04,10176.84,10341.87,10132.14,10259.74,1513000000,10259.74 +2002-01-03,10073.88,10227.36,10002.54,10172.14,1398900000,10172.14 +2002-01-02,10021.71,10125.85,9889.69,10073.40,1171000000,10073.40 +2001-12-31,10136.36,10178.71,10002.96,10021.57,943600000,10021.57 +2001-12-28,10133.94,10220.78,10067.17,10136.99,917400000,10136.99 +2001-12-27,10088.71,10187.71,10036.10,10131.31,876300000,10131.31 +2001-12-26,10035.55,10203.28,10014.10,10088.14,791100000,10088.14 +2001-12-24,10036.59,10114.91,9987.39,10035.34,439670000,10035.34 +2001-12-21,9986.84,10148.13,9935.70,10035.34,1694000000,10035.34 +2001-12-20,10064.13,10141.21,9912.76,9985.18,1490500000,9985.18 +2001-12-19,9994.59,10142.95,9876.96,10070.49,1484900000,10070.49 +2001-12-18,9893.22,10066.27,9876.19,9998.39,1354000000,9998.39 +2001-12-17,9809.42,9996.25,9747.77,9891.97,1260400000,9891.97 +2001-12-14,9764.72,9888.44,9661.14,9811.15,1306800000,9811.15 +2001-12-13,9889.13,9927.95,9691.30,9766.45,1511500000,9766.45 +2001-12-12,9887.27,9985.59,9745.42,9894.81,1449700000,9894.81 +2001-12-11,9925.60,10063.98,9794.48,9888.37,1367200000,9888.37 +2001-12-10,10047.04,10123.78,9868.03,9921.45,1218700000,9921.45 +2001-12-07,10099.14,10160.24,9938.54,10049.46,1248200000,10049.46 +2001-12-06,10113.53,10220.23,9997.98,10099.14,1487900000,10099.14 +2001-12-05,9891.35,10195.04,9875.92,10114.29,1765300000,10114.29 +2001-12-04,9765.55,9937.29,9700.24,9893.84,1318500000,9893.84 +2001-12-03,9848.93,9861.94,9651.87,9763.96,1202900000,9763.96 +2001-11-30,9828.80,9945.80,9752.26,9851.56,1343600000,9851.56 +2001-11-29,9710.34,9873.29,9629.72,9829.42,1375700000,9829.42 +2001-11-28,9867.06,9889.13,9662.80,9711.86,1423700000,9711.86 +2001-11-27,9980.33,10021.48,9776.07,9872.60,1288000000,9872.60 +2001-11-26,9961.58,10054.58,9862.22,9982.75,1129800000,9982.75 +2001-11-23,9833.09,9983.24,9804.37,9959.71,410300000,9959.71 +2001-11-21,9894.19,9932.31,9746.45,9834.68,1029300000,9834.68 +2001-11-20,9968.64,10023.37,9825.06,9901.38,1330200000,9901.38 +2001-11-19,9870.45,10040.46,9826.96,9976.46,1316800000,9976.46 +2001-11-16,9871.51,9967.94,9754.07,9866.99,1337400000,9866.99 +2001-11-15,9824.65,9967.46,9745.43,9872.39,1454500000,9872.39 +2001-11-14,9751.13,9943.18,9683.97,9823.61,1443400000,9823.61 +2001-11-13,9551.43,9811.29,9551.43,9750.95,1370100000,9750.95 +2001-11-12,9606.13,9642.25,9347.76,9554.37,991600000,9554.37 +2001-11-09,9586.96,9692.35,9478.75,9608.00,1093800000,9608.00 +2001-11-08,9558.39,9765.00,9506.91,9587.52,1517500000,9587.52 +2001-11-07,9584.68,9695.67,9457.99,9554.37,1411300000,9554.37 +2001-11-06,9437.09,9627.44,9315.79,9591.12,1356000000,9591.12 +2001-11-05,9326.59,9534.58,9326.59,9441.03,1267700000,9441.03 +2001-11-02,9264.52,9406.93,9152.91,9323.54,1121900000,9323.54 +2001-11-01,9087.45,9320.77,8987.61,9263.90,1317400000,9263.90 +2001-10-31,9123.64,9281.68,9018.26,9075.14,1352500000,9075.14 +2001-10-30,9264.52,9265.34,9011.96,9121.98,1297400000,9121.98 +2001-10-29,9543.37,9543.37,9232.83,9269.50,1106100000,9269.50 +2001-10-26,9462.28,9626.54,9369.35,9545.17,1244500000,9545.17 +2001-10-25,9342.29,9491.48,9143.09,9462.90,1364400000,9462.90 +2001-10-24,9341.40,9456.40,9218.29,9345.62,1336200000,9345.62 +2001-10-23,9379.17,9499.78,9249.02,9340.08,1317300000,9340.08 +2001-10-22,9203.91,9438.75,9101.08,9377.03,1105700000,9377.03 +2001-10-19,9162.81,9278.36,9027.74,9204.11,1294900000,9204.11 +2001-10-18,9230.75,9310.33,9061.02,9163.22,1262900000,9163.22 +2001-10-17,9389.76,9539.22,9199.89,9232.97,1452200000,9232.97 +2001-10-16,9346.31,9479.37,9239.68,9384.23,1210500000,9384.23 +2001-10-15,9340.84,9417.51,9181.07,9347.62,1024700000,9347.62 +2001-10-12,9409.07,9426.30,9146.34,9344.16,1331400000,9344.16 +2001-10-11,9242.63,9522.61,9204.04,9410.45,1704580000,9410.45 +2001-10-10,9052.30,9305.97,8975.15,9240.86,1312400000,9240.86 +2001-10-09,9066.56,9168.42,8927.34,9052.44,1227800000,9052.44 +2001-10-08,9115.75,9187.85,8937.86,9067.94,979000000,9067.94 +2001-10-05,9058.83,9208.41,8894.47,9119.77,1301700000,9119.77 +2001-10-04,9127.24,9259.61,8982.28,9060.88,1609100000,9060.88 +2001-10-03,8946.02,9193.32,8800.99,9123.78,1650600000,9123.78 +2001-10-02,8836.69,9001.03,8737.61,8950.59,1289800000,8950.59 +2001-10-01,8845.97,8931.70,8659.90,8836.83,1175600000,8836.83 +2001-09-28,8679.07,8945.68,8633.75,8847.56,1727400000,8847.56 +2001-09-27,8567.46,8757.47,8398.14,8681.42,1467000000,8681.42 +2001-09-26,8660.06,8766.81,8457.37,8567.39,1519100000,8567.39 +2001-09-25,8605.59,8778.23,8435.56,8659.97,1613800000,8659.97 +2001-09-24,8242.32,8733.39,8242.32,8603.86,1746600000,8603.86 +2001-09-21,8356.56,8484.22,7926.93,8235.81,2317300000,8235.81 +2001-09-20,8375.72,8711.38,8304.45,8376.21,2004800000,8376.21 +2001-09-19,8903.54,8990.37,8453.01,8759.13,2120550000,8759.13 +2001-09-18,8922.70,9126.89,8743.91,8903.40,1650410000,8903.40 +2001-09-17,9294.55,9294.55,8755.46,8920.70,2330830000,8920.70 +2001-09-10,9603.36,9740.44,9431.07,9605.51,1276600000,9605.51 +2001-09-07,9841.25,9842.08,9507.04,9605.85,1424300000,9605.85 +2001-09-06,10028.35,10053.73,9762.03,9840.84,1359700000,9840.84 +2001-09-05,9998.12,10140.79,9820.98,10033.27,1384500000,10033.27 +2001-09-04,9946.98,10238.50,9858.34,9997.49,1178300000,9997.49 +2001-08-31,9918.96,10072.22,9846.72,9949.75,920100000,9949.75 +2001-08-30,10077.07,10149.10,9829.35,9919.58,1157000000,9919.58 +2001-08-29,10224.45,10292.60,10030.43,10090.90,963700000,10090.90 +2001-08-28,10382.56,10405.88,10175.60,10222.03,987100000,10222.03 +2001-08-27,10422.76,10498.03,10334.88,10382.35,842600000,10382.35 +2001-08-24,10232.48,10487.52,10190.34,10423.17,1043600000,10423.17 +2001-08-23,10276.41,10357.09,10142.66,10229.15,986200000,10229.15 +2001-08-22,10170.30,10340.76,10099.07,10276.90,1110800000,10276.90 +2001-08-21,10320.07,10436.39,10132.92,10174.14,1041600000,10174.14 +2001-08-20,10239.33,10388.23,10146.05,10320.07,897100000,10320.07 +2001-08-17,10385.46,10418.68,10143.49,10240.78,974300000,10240.78 +2001-08-16,10342.10,10460.82,10198.15,10392.52,1055400000,10392.52 +2001-08-15,10407.05,10530.36,10289.01,10345.95,1065600000,10345.95 +2001-08-14,10416.95,10513.68,10333.29,10412.17,964600000,10412.17 +2001-08-13,10411.90,10504.82,10314.95,10415.91,837600000,10415.91 +2001-08-10,10296.89,10473.34,10164.67,10416.25,960900000,10416.25 +2001-08-09,10291.15,10361.52,10160.51,10298.56,1104200000,10298.56 +2001-08-08,10456.18,10509.80,10245.68,10293.50,1124600000,10293.50 +2001-08-07,10399.03,10520.11,10324.50,10458.74,1012000000,10458.74 +2001-08-06,10504.13,10549.59,10337.23,10401.31,811700000,10401.31 +2001-08-03,10550.01,10592.98,10381.10,10512.78,939900000,10512.78 +2001-08-02,10513.47,10663.07,10454.53,10551.18,1218300000,10551.18 +2001-08-01,10527.38,10659.33,10423.31,10510.01,1340300000,10510.01 +2001-07-31,10403.18,10639.40,10364.84,10522.81,1129200000,10522.81 +2001-07-30,10418.68,10513.26,10301.05,10401.72,909100000,10401.72 +2001-07-27,10451.89,10516.38,10316.27,10416.67,1015300000,10416.67 +2001-07-26,10403.46,10498.73,10237.46,10455.63,1213900000,10455.63 +2001-07-25,10241.75,10466.28,10159.34,10405.67,1280700000,10405.67 +2001-07-24,10423.80,10469.40,10170.82,10241.12,1198700000,10241.12 +2001-07-23,10576.92,10644.73,10374.81,10424.42,986900000,10424.42 +2001-07-20,10606.19,10668.33,10456.25,10576.65,1170900000,10576.65 +2001-07-19,10574.33,10758.14,10480.54,10610.00,1343500000,10610.00 +2001-07-18,10594.54,10676.83,10374.55,10569.83,1316300000,10569.83 +2001-07-17,10468.62,10683.76,10363.51,10606.39,1238100000,10606.39 +2001-07-16,10537.98,10649.02,10374.55,10472.12,1039800000,10472.12 +2001-07-13,10478.39,10615.42,10374.01,10539.06,1121700000,10539.06 +2001-07-12,10269.31,10542.02,10249.58,10478.99,1394000000,10478.99 +2001-07-11,10174.70,10355.83,10049.38,10241.02,1384100000,10241.02 +2001-07-10,10300.82,10406.87,10104.06,10175.64,1263800000,10175.64 +2001-07-09,10253.62,10389.91,10166.55,10299.40,1045700000,10299.40 +2001-07-06,10476.73,10483.82,10176.26,10252.68,1056700000,10252.68 +2001-07-05,10566.23,10617.47,10403.57,10479.86,934900000,10479.86 +2001-07-03,10588.89,10648.00,10479.99,10571.11,622110000,10571.11 +2001-07-02,10504.95,10707.24,10397.20,10593.72,1128300000,10593.72 +2001-06-29,10565.27,10729.18,10374.32,10502.40,1832360000,10502.40 +2001-06-28,10438.73,10736.43,10429.74,10566.21,1327300000,10566.21 +2001-06-27,10470.35,10608.48,10351.10,10434.84,1162100000,10434.84 +2001-06-26,10497.30,10600.90,10313.40,10472.48,1198900000,10472.48 +2001-06-25,10607.88,10711.19,10417.93,10504.22,1050100000,10504.22 +2001-06-22,10716.50,10753.27,10513.61,10604.59,1189200000,10604.59 +2001-06-21,10646.39,10848.47,10512.67,10715.43,1546820000,10715.43 +2001-06-20,10593.79,10770.88,10480.20,10647.33,1350100000,10647.33 +2001-06-19,10654.30,10793.46,10514.74,10596.67,1184900000,10596.67 +2001-06-18,10622.50,10781.45,10531.78,10645.38,1111600000,10645.38 +2001-06-15,10690.13,10792.25,10495.69,10623.64,1635550000,10623.64 +2001-06-14,10868.27,10874.91,10604.45,10690.13,1242900000,10690.13 +2001-06-13,10942.00,11065.92,10817.21,10871.62,1063600000,10871.62 +2001-06-12,10914.67,11009.93,10744.99,10948.38,1136500000,10948.38 +2001-06-11,10974.79,11038.56,10819.29,10922.09,870100000,10922.09 +2001-06-08,11095.62,11096.46,10882.92,10977.00,726200000,10977.00 +2001-06-07,11069.58,11169.34,10940.11,11090.74,1089600000,11090.74 +2001-06-06,11177.73,11236.68,10998.48,11070.24,1061900000,11070.24 +2001-06-05,11061.39,11234.98,10973.10,11175.84,1116800000,11175.84 +2001-06-04,10991.77,11125.99,10898.80,11061.52,836500000,11061.52 +2001-06-01,10913.57,11063.61,10793.46,10990.41,1015000000,10990.41 +2001-05-31,10873.23,11023.25,10798.53,10911.94,1226600000,10911.94 +2001-05-30,11032.96,11089.89,10819.74,10872.64,1158600000,10872.64 +2001-05-29,11004.66,11162.96,10913.44,11039.14,1026000000,11039.14 +2001-05-25,11122.03,11166.92,10949.01,11005.37,828100000,11005.37 +2001-05-24,11107.07,11248.19,10977.20,11122.42,1100700000,11122.42 +2001-05-23,11257.76,11308.44,11033.16,11105.51,1134800000,11105.51 +2001-05-22,11339.80,11411.63,11162.83,11257.24,1260400000,11257.24 +2001-05-21,11299.14,11436.42,11149.82,11337.92,1174900000,11337.92 +2001-05-18,11245.78,11374.87,11123.01,11301.74,1130800000,11301.74 +2001-05-17,11218.65,11413.46,11104.34,11248.58,1355600000,11248.58 +2001-05-16,10864.74,11258.21,10779.66,11215.92,1405300000,11215.92 +2001-05-15,10877.46,10979.35,10752.73,10872.97,1071800000,10872.97 +2001-05-14,10819.55,10930.09,10730.74,10877.33,858200000,10877.33 +2001-05-11,10908.30,10969.39,10716.16,10821.31,906200000,10821.31 +2001-05-10,10868.87,11049.39,10826.90,10910.44,1056700000,10910.44 +2001-05-09,10875.96,10964.84,10739.78,10866.98,1132400000,10866.98 +2001-05-08,10936.66,11001.66,10755.07,10883.51,1006300000,10883.51 +2001-05-07,10952.35,11059.51,10822.74,10935.17,949000000,10935.17 +2001-05-04,10793.20,10989.95,10638.48,10951.24,1082100000,10951.24 +2001-05-03,10872.32,10911.06,10657.99,10796.65,1137900000,10796.65 +2001-05-02,10902.77,11024.31,10726.77,10876.68,1342200000,10876.68 +2001-05-01,10734.05,10966.07,10669.32,10898.34,1181300000,10898.34 +2001-04-30,10814.41,10973.15,10666.13,10734.97,1226000000,10734.97 +2001-04-27,10694.95,10894.60,10632.36,10810.05,1091300000,10810.05 +2001-04-26,10633.01,10820.72,10533.98,10692.35,1345200000,10692.35 +2001-04-25,10453.43,10675.95,10373.14,10625.20,1203600000,10625.20 +2001-04-24,10529.75,10694.61,10401.45,10454.34,1216500000,10454.34 +2001-04-23,10571.00,10669.71,10393.05,10532.23,1012600000,10532.23 +2001-04-20,10690.33,10755.46,10445.43,10579.85,1338700000,10579.85 +2001-04-19,10616.09,10768.28,10468.79,10693.71,1486800000,10693.71 +2001-04-18,10226.88,10806.41,10215.69,10615.83,1918900000,10615.83 +2001-04-17,10151.73,10286.61,9980.22,10216.73,1109600000,10216.73 +2001-04-16,10118.16,10282.38,9991.14,10158.56,913900000,10158.56 +2001-04-12,10013.08,10178.22,9862.71,10126.94,1102000000,10126.94 +2001-04-11,10109.05,10246.59,9898.77,10013.47,1290300000,10013.47 +2001-04-10,9850.35,10226.85,9850.35,10102.74,1349600000,10102.74 +2001-04-09,9793.58,9999.35,9699.92,9845.15,1062800000,9845.15 +2001-04-06,9913.94,9951.73,9600.91,9791.09,1266800000,9791.09 +2001-04-05,9527.21,9969.92,9527.21,9918.05,1368000000,9918.05 +2001-04-04,9480.95,9693.05,9303.48,9515.42,1425590000,9515.42 +2001-04-03,9774.78,9779.74,9385.43,9485.71,1386100000,9485.71 +2001-04-02,9877.16,10043.02,9638.35,9777.93,1204200000,9777.93 +2001-03-30,9799.47,9998.49,9685.07,9878.78,1280800000,9878.78 +2001-03-29,9784.94,9950.22,9583.67,9799.06,1234500000,9799.06 +2001-03-28,9939.68,9939.68,9607.06,9785.35,1333400000,9785.35 +2001-03-27,9687.93,10012.98,9584.29,9947.54,1314200000,9947.54 +2001-03-26,9509.25,9820.50,9489.75,9687.53,1114000000,9687.53 +2001-03-23,9395.58,9631.80,9249.63,9504.78,1364900000,9504.78 +2001-03-22,9490.66,9565.40,9047.56,9389.48,1723950000,9389.48 +2001-03-21,9717.46,9807.08,9391.42,9487.00,1346300000,9487.00 +2001-03-20,9961.14,10130.45,9675.51,9720.76,1235900000,9720.76 +2001-03-19,9820.05,10059.08,9720.94,9959.11,1126200000,9959.11 +2001-03-16,10023.55,10119.44,9720.17,9823.41,1543560000,9823.41 +2001-03-15,9982.92,10190.80,9887.68,10031.28,1259500000,10031.28 +2001-03-14,10279.42,10279.42,9817.74,9973.46,1397400000,9973.46 +2001-03-13,10206.89,10397.83,10021.60,10290.80,1360900000,10290.80 +2001-03-12,10638.52,10638.63,10138.90,10208.25,1229000000,10208.25 +2001-03-09,10850.11,10874.15,10520.42,10644.62,1085900000,10644.62 +2001-03-08,10727.16,10940.45,10625.95,10858.25,1114100000,10858.25 +2001-03-07,10591.86,10822.23,10524.76,10729.60,1132200000,10729.60 +2001-03-06,10570.17,10759.40,10508.43,10591.22,1091800000,10591.22 +2001-03-05,10468.93,10659.52,10393.59,10562.30,929200000,10562.30 +2001-03-02,10438.04,10645.57,10239.81,10466.31,1294000000,10466.31 +2001-03-01,10493.25,10605.23,10236.92,10450.14,1294900000,10450.14 +2001-02-28,10639.32,10750.23,10374.62,10495.28,1225300000,10495.28 +2001-02-27,10638.44,10787.29,10463.92,10636.88,1114100000,10636.88 +2001-02-26,10447.59,10701.92,10347.59,10642.53,1130800000,10642.53 +2001-02-23,10529.25,10595.01,10225.14,10441.90,1231300000,10441.90 +2001-02-22,10527.80,10694.50,10278.93,10526.81,1365900000,10526.81 +2001-02-21,10721.29,10828.48,10468.32,10526.58,1208500000,10526.58 +2001-02-20,10800.23,10988.29,10612.25,10730.88,1112200000,10730.88 +2001-02-16,10884.11,10946.11,10652.33,10799.82,1257200000,10799.82 +2001-02-15,10800.65,11023.44,10694.43,10891.02,1153700000,10891.02 +2001-02-14,10899.42,10989.61,10683.39,10795.41,1150300000,10795.41 +2001-02-13,10950.18,11114.44,10774.98,10903.32,1075200000,10903.32 +2001-02-12,10779.42,11024.92,10727.02,10946.77,1039100000,10946.77 +2001-02-09,10878.51,10979.12,10682.77,10781.45,1075500000,10781.45 +2001-02-08,10940.62,11080.42,10776.04,10880.55,1107200000,10880.55 +2001-02-07,10948.95,11140.09,10794.29,10946.72,1158300000,10946.72 +2001-02-06,10965.03,11117.80,10820.28,10957.42,1059600000,10957.42 +2001-02-05,10860.44,11061.42,10759.98,10965.85,1013000000,10965.85 +2001-02-02,10982.71,11093.01,10786.69,10864.10,1048400000,10864.10 +2001-02-01,10884.82,11063.95,10759.85,10983.63,1118800000,10983.63 +2001-01-31,10882.25,11072.28,10705.23,10887.36,1295300000,10887.36 +2001-01-30,10702.19,10950.38,10609.77,10881.20,1149800000,10881.20 +2001-01-29,10657.13,10832.56,10515.99,10702.19,1053100000,10702.19 +2001-01-26,10727.08,10874.28,10506.26,10659.98,1098000000,10659.98 +2001-01-25,10644.53,10882.42,10520.90,10729.52,1258000000,10729.52 +2001-01-24,10651.85,10795.80,10483.49,10646.97,1309000000,10646.97 +2001-01-23,10575.80,10773.94,10459.91,10649.81,1232600000,10649.81 +2001-01-22,10581.90,10749.44,10371.66,10578.24,1164000000,10578.24 +2001-01-19,10686.00,10792.14,10448.93,10587.59,1407800000,10587.59 +2001-01-18,10584.57,10834.43,10466.01,10678.28,1445000000,10678.28 +2001-01-17,10660.95,10817.35,10442.83,10584.34,1349100000,10584.34 +2001-01-16,10525.78,10751.48,10362.72,10652.66,1205700000,10652.66 +2001-01-12,10608.74,10743.75,10339.94,10525.38,1276000000,10525.38 +2001-01-11,10600.20,10808.00,10400.94,10609.55,1411200000,10609.55 +2001-01-10,10568.48,10728.30,10325.71,10604.27,1296500000,10604.27 +2001-01-09,10625.21,10801.09,10387.12,10572.55,1191300000,10572.55 +2001-01-08,10658.73,10818.98,10407.85,10621.35,1115500000,10621.35 +2001-01-05,10912.81,10990.59,10492.84,10662.01,1430800000,10662.01 +2001-01-04,10944.94,11224.41,10672.58,10912.41,216940000,10912.41 +2001-01-03,10637.42,11212.62,10367.19,10945.75,188070000,10945.75 +2001-01-02,10790.92,10916.98,10450.55,10646.15,1129400000,10646.15 +2000-12-29,10868.76,11031.05,10675.75,10787.99,1035500000,10787.99 +2000-12-28,10795.20,11009.44,10645.42,10868.76,1015300000,10868.76 +2000-12-27,10690.10,10944.60,10551.00,10803.16,1092700000,10803.16 +2000-12-26,10638.21,10813.78,10479.71,10692.44,806500000,10692.44 +2000-12-22,10495.26,10772.07,10364.06,10635.56,1087100000,10635.56 +2000-12-21,10314.38,10651.96,10158.16,10487.29,1449900000,10487.29 +2000-12-20,10580.97,10604.08,10197.59,10318.93,1421600000,10318.93 +2000-12-19,10643.14,10865.35,10441.41,10584.37,1324900000,10584.37 +2000-12-18,10433.34,10783.82,10417.43,10645.42,1189900000,10645.42 +2000-12-15,10647.98,10706.84,10324.24,10434.96,156110000,10434.96 +2000-12-14,10794.82,10864.49,10508.53,10674.99,1061300000,10674.99 +2000-12-13,10777.95,11002.23,10653.76,10794.44,1195100000,10794.44 +2000-12-12,10722.77,10968.77,10582.09,10768.27,1083400000,10768.27 +2000-12-11,10719.36,10931.33,10521.04,10725.80,1202400000,10725.80 +2000-12-08,10632.14,10896.82,10534.69,10712.91,1358300000,10712.91 +2000-12-07,10644.66,10791.40,10448.99,10617.36,1128000000,10617.36 +2000-12-06,10896.14,10995.41,10513.84,10664.38,1399300000,10664.38 +2000-12-05,10576.78,11044.70,10504.36,10898.72,900300000,10898.72 +2000-12-04,10377.33,10701.35,10227.17,10560.95,1103000000,10560.95 +2000-12-01,10416.76,10645.42,10238.54,10373.54,1195200000,10373.54 +2000-11-30,10610.53,10690.16,10204.80,10414.49,1186530000,10414.49 +2000-11-29,10502.74,10746.66,10383.02,10629.11,402100000,10629.11 +2000-11-28,10537.86,10730.35,10356.47,10507.58,1028200000,10507.58 +2000-11-27,10479.33,10758.04,10411.08,10546.07,946100000,10546.07 +2000-11-24,10403.87,10596.50,10354.20,10470.23,404870000,10470.23 +2000-11-22,10484.26,10589.67,10251.06,10399.32,963200000,10399.32 +2000-11-21,10465.57,10676.13,10303.39,10494.50,1137100000,10494.50 +2000-11-20,10624.18,10707.22,10331.45,10462.65,955800000,10462.65 +2000-11-17,10657.13,10824.77,10462.55,10629.87,1070400000,10629.87 +2000-11-16,10705.33,10857.38,10536.30,10656.03,956300000,10656.03 +2000-11-15,10681.21,10863.83,10544.17,10707.60,1066800000,10707.60 +2000-11-14,10528.25,10809.61,10484.64,10681.06,1118800000,10681.06 +2000-11-13,10595.35,10701.54,10273.24,10517.25,1129300000,10517.25 +2000-11-10,10813.78,10886.20,10497.53,10602.95,962500000,10602.95 +2000-11-09,10902.11,10989.34,10576.40,10834.25,1111000000,10834.25 +2000-11-08,10954.34,11152.02,10779.27,10907.06,909300000,10907.06 +2000-11-07,10978.72,11105.75,10825.15,10952.18,880900000,10952.18 +2000-11-06,10820.60,11092.10,10741.73,10977.21,930900000,10977.21 +2000-11-03,10883.17,10996.17,10650.72,10817.95,997700000,10817.95 +2000-11-02,10903.17,11071.06,10731.49,10880.51,1167700000,10880.51 +2000-11-01,10966.21,11103.10,10736.42,10899.47,1206800000,10899.47 +2000-10-31,10835.39,11108.79,10681.06,10971.14,1366400000,10971.14 +2000-10-30,10588.06,10944.98,10506.25,10835.77,1186500000,10835.77 +2000-10-27,10381.60,10696.43,10296.70,10590.62,1086300000,10590.62 +2000-10-26,10330.18,10563.25,10128.18,10380.12,1303800000,10380.12 +2000-10-25,10395.66,10563.99,10170.08,10326.48,1315600000,10326.48 +2000-10-24,10273.57,10583.96,10136.69,10393.07,1158600000,10393.07 +2000-10-23,10230.29,10496.28,10078.24,10271.72,1046800000,10271.72 +2000-10-20,10141.13,10406.76,9925.82,10226.59,1177400000,10226.59 +2000-10-19,10014.61,10317.23,9901.77,10142.98,1297900000,10142.98 +2000-10-18,10085.99,10171.47,9571.40,9975.02,1441700000,9975.02 +2000-10-17,10242.87,10402.32,9924.34,10089.71,1161500000,10089.71 +2000-10-16,10184.78,10428.95,10033.84,10238.80,1005400000,10238.80 +2000-10-13,10031.62,10325.37,9883.27,10192.18,1223900000,10192.18 +2000-10-12,10424.14,10462.25,9873.66,10034.58,1388600000,10034.58 +2000-10-11,10521.07,10647.23,10228.44,10413.79,1387500000,10413.79 +2000-10-10,10569.17,10744.52,10377.16,10524.40,1044000000,10524.40 +2000-10-09,10596.91,10762.10,10438.94,10568.43,716600000,10568.43 +2000-10-06,10726.76,10871.42,10440.05,10596.54,1150100000,10596.54 +2000-10-05,10783.72,10940.23,10570.28,10724.92,1176100000,10724.92 +2000-10-04,10723.33,10972.41,10596.54,10784.48,1167400000,10784.48 +2000-10-03,10709.84,10976.11,10561.03,10719.74,1098100000,10719.74 +2000-10-02,10659.06,10876.23,10479.27,10700.13,1051200000,10700.13 +2000-09-29,10821.40,10923.21,10552.15,10650.92,1197100000,10650.92 +2000-09-28,10629.84,10948.00,10539.48,10824.06,1206200000,10824.06 +2000-09-27,10634.45,10821.10,10439.31,10628.36,1174700000,10628.36 +2000-09-26,10806.30,10915.44,10499.61,10631.32,1106600000,10631.32 +2000-09-25,10847.37,11039.47,10664.24,10808.15,982400000,10808.15 +2000-09-22,10678.30,10936.53,10505.16,10847.37,1185500000,10847.37 +2000-09-21,10680.52,10902.12,10548.08,10765.52,1105400000,10765.52 +2000-09-20,10794.47,10906.93,10500.35,10687.92,1104000000,10687.92 +2000-09-19,10812.22,10960.95,10645.38,10789.29,1024900000,10789.29 +2000-09-18,10926.42,11053.80,10693.84,10808.52,962500000,10808.52 +2000-09-15,11087.84,11203.26,10857.73,10927.00,1268400000,10927.00 +2000-09-14,11189.58,11285.39,10986.47,11087.47,1014000000,11087.47 +2000-09-13,11225.03,11350.87,11020.14,11182.18,1068300000,11182.18 +2000-09-12,11197.71,11351.98,11015.70,11233.23,991200000,11233.23 +2000-09-11,11219.54,11367.15,11043.07,11195.49,899300000,11195.49 +2000-09-08,11261.72,11381.95,11059.72,11220.65,961000000,11220.65 +2000-09-07,11316.01,11444.84,11124.83,11259.87,985500000,11259.87 +2000-09-06,11253.58,11518.83,11186.25,11310.64,995100000,11310.64 +2000-09-05,11221.76,11382.69,11094.50,11260.61,838500000,11260.61 +2000-09-01,11219.54,11406.74,11130.01,11238.78,767700000,11238.78 +2000-08-31,11105.23,11415.99,11040.85,11215.10,1056600000,11215.10 +2000-08-30,11209.01,11282.06,11034.57,11103.01,818400000,11103.01 +2000-08-29,11249.27,11356.42,11100.79,11215.10,795600000,11215.10 +2000-08-28,11194.48,11410.44,11123.35,11252.84,733600000,11252.84 +2000-08-25,11180.54,11301.41,11073.59,11192.63,685600000,11192.63 +2000-08-24,11143.91,11302.51,11009.12,11182.74,837100000,11182.74 +2000-08-23,11130.55,11253.06,10990.44,11144.65,871000000,11144.65 +2000-08-22,11082.20,11274.67,11000.33,11139.15,818800000,11139.15 +2000-08-21,11058.85,11193.73,10945.39,11079.81,731600000,11079.81 +2000-08-18,11051.20,11180.54,10933.30,11046.48,821400000,11046.48 +2000-08-17,11010.95,11180.91,10899.24,11055.64,922400000,11055.64 +2000-08-16,11068.83,11171.02,10888.62,11008.39,929800000,11008.39 +2000-08-15,11175.05,11227.06,10965.54,11067.00,895900000,11067.00 +2000-08-14,11027.07,11232.92,10928.91,11176.14,783800000,11176.14 +2000-08-11,10905.98,11131.83,10841.37,11027.80,835500000,11027.80 +2000-08-10,10901.06,11069.93,10779.47,10908.76,940800000,10908.76 +2000-08-09,10970.94,11097.03,10780.02,10905.83,1054000000,10905.83 +2000-08-08,10865.15,11083.11,10741.38,10976.89,992200000,10976.89 +2000-08-07,10773.98,10973.23,10657.50,10867.01,854800000,10867.01 +2000-08-04,10713.36,10873.97,10555.68,10767.75,956000000,10767.75 +2000-08-03,10679.37,10844.30,10518.68,10706.58,1095600000,10706.58 +2000-08-02,10609.15,10818.66,10514.29,10687.53,986300000,10687.53 +2000-08-01,10523.81,10728.92,10428.58,10606.95,938700000,10606.95 +2000-07-31,10514.29,10727.09,10374.00,10521.98,952600000,10521.98 +2000-07-28,10594.97,10732.14,10367.28,10511.17,980000000,10511.17 +2000-07-27,10516.83,10745.93,10450.01,10586.13,1156400000,10586.13 +2000-07-26,10689.36,10790.13,10447.18,10516.48,1235800000,10516.48 +2000-07-25,10689.28,10867.20,10557.49,10699.97,969400000,10699.97 +2000-07-24,10731.44,10895.84,10545.47,10685.12,880300000,10685.12 +2000-07-21,10843.51,10949.58,10614.06,10733.56,968300000,10733.56 +2000-07-20,10700.68,10980.34,10671.33,10843.87,1064600000,10843.87 +2000-07-19,10724.15,10907.15,10587.89,10696.08,909400000,10696.08 +2000-07-18,10799.16,10895.57,10613.00,10739.92,908300000,10739.92 +2000-07-17,10812.40,10969.38,10653.30,10804.27,906000000,10804.27 +2000-07-14,10793.31,10935.44,10661.43,10812.75,960600000,10812.75 +2000-07-13,10774.92,10963.02,10643.40,10788.71,1026800000,10788.71 +2000-07-12,10722.24,10930.84,10639.51,10783.76,1001200000,10783.76 +2000-07-11,10649.06,10877.46,10544.76,10727.19,980500000,10727.19 +2000-07-10,10627.14,10792.25,10520.01,10646.58,838700000,10646.58 +2000-07-07,10483.33,10742.04,10419.25,10635.98,931700000,10635.98 +2000-07-06,10481.45,10644.11,10303.28,10481.47,947300000,10481.47 +2000-07-05,10538.23,10674.16,10362.33,10483.60,1019300000,10483.60 +2000-07-03,10450.36,10610.17,10353.66,10560.67,451900000,10560.67 +2000-06-30,10393.09,10626.79,10161.51,10447.89,1459700000,10447.89 +2000-06-29,10523.90,10582.94,10279.24,10398.04,1110900000,10398.04 +2000-06-28,10506.39,10712.70,10399.10,10527.79,1095100000,10527.79 +2000-06-27,10541.58,10741.69,10384.60,10504.46,1042500000,10504.46 +2000-06-26,10403.69,10680.26,10365.15,10542.99,889000000,10542.99 +2000-06-23,10376.47,10555.37,10283.13,10404.75,847600000,10404.75 +2000-06-22,10495.97,10596.73,10256.97,10376.12,1022700000,10376.12 +2000-06-21,10446.83,10607.69,10312.48,10497.74,1009600000,10497.74 +2000-06-20,10558.90,10632.09,10318.84,10435.16,1031500000,10435.16 +2000-06-19,10448.40,10733.56,10322.02,10557.84,921700000,10557.84 +2000-06-16,10717.76,10784.47,10393.44,10449.30,1250800000,10449.30 +2000-06-15,10689.63,10889.48,10552.89,10714.82,1011400000,10714.82 +2000-06-14,10632.46,10860.84,10542.99,10687.95,929700000,10687.95 +2000-06-13,10562.31,10751.86,10395.56,10621.84,935900000,10621.84 +2000-06-12,10615.12,10757.60,10476.88,10564.21,774100000,10564.21 +2000-06-09,10678.47,10848.38,10515.52,10614.06,786000000,10614.06 +2000-06-08,10818.78,10887.72,10524.92,10668.72,854300000,10668.72 +2000-06-07,10733.48,10974.07,10588.64,10812.86,854600000,10812.86 +2000-06-06,10822.61,10916.97,10592.82,10735.57,950100000,10735.57 +2000-06-05,10793.11,10951.79,10629.03,10815.30,838600000,10815.30 +2000-06-02,10660.09,11013.05,10600.46,10794.76,1162400000,10794.76 +2000-06-01,10532.27,10780.37,10422.95,10652.20,960100000,10652.20 +2000-05-31,10528.28,10692.73,10377.37,10522.33,960500000,10522.33 +2000-05-30,10302.31,10596.00,10287.94,10527.13,844200000,10527.13 +2000-05-26,10322.89,10487.72,10163.20,10299.24,722600000,10299.24 +2000-05-25,10529.87,10644.32,10207.75,10323.92,984500000,10323.92 +2000-05-24,10420.90,10679.53,10240.99,10535.35,1152300000,10535.35 +2000-05-23,10539.12,10671.74,10325.63,10422.27,869900000,10422.27 +2000-05-22,10624.79,10718.00,10308.15,10542.55,869000000,10542.55 +2000-05-19,10764.22,10821.83,10468.18,10626.85,853700000,10626.85 +2000-05-18,10771.80,10938.34,10669.00,10777.28,807900000,10777.28 +2000-05-17,10930.64,10947.25,10648.78,10769.74,820500000,10769.74 +2000-05-16,10816.01,11086.72,10723.48,10934.57,955500000,10934.57 +2000-05-15,10606.97,10902.36,10509.31,10807.78,854600000,10807.78 +2000-05-12,10549.06,10780.37,10444.54,10609.37,858200000,10609.37 +2000-05-11,10369.27,10676.88,10315.69,10545.97,953600000,10545.97 +2000-05-10,10533.09,10649.95,10169.77,10367.78,1006400000,10367.78 +2000-05-09,10607.54,10765.75,10435.96,10536.75,896600000,10536.75 +2000-05-08,10571.31,10744.22,10400.40,10603.63,787600000,10603.63 +2000-05-05,10409.70,10688.61,10312.91,10577.86,805500000,10577.86 +2000-05-04,10478.89,10631.53,10293.05,10412.49,925800000,10412.49 +2000-05-03,10732.21,10754.39,10345.17,10480.13,991600000,10480.13 +2000-05-02,10805.58,10932.47,10580.65,10731.12,1011500000,10731.12 +2000-05-01,10749.42,11001.34,10622.22,10811.78,966300000,10811.78 +2000-04-28,10892.76,11005.07,10632.46,10733.91,984600000,10733.91 +2000-04-27,10941.91,11024.61,10650.14,10888.10,1111000000,10888.10 +2000-04-26,11127.92,11246.75,10816.44,10945.50,999600000,10945.50 +2000-04-25,10916.65,11265.67,10764.62,11124.82,1071100000,11124.82 +2000-04-24,10822.33,11060.29,10579.10,10906.10,868700000,10906.10 +2000-04-20,10668.19,10941.47,10582.51,10844.05,896200000,10844.05 +2000-04-19,10748.97,10909.20,10503.40,10674.96,1001400000,10674.96 +2000-04-18,10584.02,10941.78,10424.90,10767.42,1109400000,10767.42 +2000-04-17,10303.29,10721.50,10128.62,10582.51,1204700000,10582.51 +2000-04-14,10922.85,10922.85,10173.92,10305.77,1279700000,10305.77 +2000-04-13,11132.58,11290.80,10806.51,10923.55,1032000000,10923.55 +2000-04-12,11283.05,11600.43,11026.47,11125.13,1175900000,11125.13 +2000-04-11,11180.98,11459.58,11024.22,11287.08,971400000,11287.08 +2000-04-10,11114.89,11404.35,10955.43,11186.56,853700000,11186.56 +2000-04-07,11122.03,11317.79,10932.78,11111.48,891600000,11111.48 +2000-04-06,11029.56,11303.83,10921.07,11114.27,1008000000,11114.27 +2000-04-05,11163.29,11326.79,10894.00,11033.92,1110300000,11033.92 +2000-04-04,11225.34,11531.24,10682.72,11164.84,1515460000,11164.84 +2000-04-03,10863.28,11344.17,10821.71,11221.93,1021700000,11221.93 +2000-03-31,10993.28,11244.58,10801.23,10921.92,1227400000,10921.92 +2000-03-30,11008.17,11258.23,10796.58,10980.25,1193400000,10980.25 +2000-03-29,10939.05,11214.48,10792.24,11018.72,1061900000,11018.72 +2000-03-28,11023.68,11192.76,10804.65,10936.11,959100000,10936.11 +2000-03-27,11093.25,11274.98,10881.90,11025.85,901000000,11025.85 +2000-03-24,11107.45,11311.28,10901.44,11112.72,1052200000,11112.72 +2000-03-23,10884.38,11224.72,10737.63,11119.86,1078300000,11119.86 +2000-03-22,10916.96,11054.71,10671.86,10866.70,1075000000,10866.70 +2000-03-21,10680.24,11012.20,10515.50,10907.34,1065900000,10907.34 +2000-03-20,10594.75,10866.08,10456.86,10680.24,920800000,10680.24 +2000-03-17,10629.98,10849.32,10399.15,10595.23,1295100000,10595.23 +2000-03-16,10139.58,10716.23,10139.58,10630.60,1482300000,10630.60 +2000-03-15,9808.15,10294.60,9676.90,10131.41,1302800000,10131.41 +2000-03-14,9957.67,10149.41,9747.33,9811.24,1094000000,9811.24 +2000-03-13,9911.22,10111.25,9670.07,9947.13,1016100000,9947.13 +2000-03-10,10008.55,10211.77,9792.93,9928.82,1138800000,9928.82 +2000-03-09,9855.29,10097.28,9667.28,10010.73,1123000000,10010.73 +2000-03-08,9800.69,10037.41,9611.75,9856.53,1203000000,9856.53 +2000-03-07,10197.61,10208.66,9651.77,9796.03,1314100000,9796.03 +2000-03-06,10358.96,10518.91,10038.65,10170.50,1029000000,10170.50 +2000-03-03,10171.12,10581.89,10148.16,10367.20,1150300000,10367.20 +2000-03-02,10135.44,10361.61,9986.53,10164.92,1198600000,10164.92 +2000-03-01,10128.11,10355.72,9935.96,10137.93,1274100000,10137.93 +2000-02-29,10039.58,10332.14,9926.65,10128.31,1204300000,10128.31 +2000-02-28,9854.66,10228.52,9760.36,10038.65,1026500000,10038.65 +2000-02-25,10090.77,10196.02,9767.80,9862.12,1065200000,9862.12 +2000-02-24,10242.48,10321.90,9877.94,10092.63,1215000000,10092.63 +2000-02-23,10294.82,10443.21,10077.74,10225.73,993700000,10225.73 +2000-02-22,10219.83,10446.62,10011.66,10304.84,980000000,10304.84 +2000-02-18,10514.57,10562.34,10129.24,10219.52,1042300000,10219.52 +2000-02-17,10565.76,10768.66,10348.66,10514.57,1034800000,10514.57 +2000-02-16,10711.82,10831.64,10468.65,10561.41,1018800000,10561.41 +2000-02-15,10520.15,10821.09,10377.44,10718.09,1092100000,10718.09 +2000-02-14,10431.65,10674.96,10327.56,10519.84,927300000,10519.84 +2000-02-11,10638.64,10763.38,10301.12,10425.21,1025700000,10425.21 +2000-02-10,10697.92,10853.67,10491.30,10643.63,1058800000,10643.63 +2000-02-09,10948.82,11016.54,10647.97,10699.16,1050500000,10699.16 +2000-02-08,10904.26,11139.40,10826.67,10957.60,1047700000,10957.60 +2000-02-07,10965.97,11097.52,10732.67,10905.79,918100000,10905.79 +2000-02-04,11014.37,11200.83,10847.54,10963.80,1045100000,10963.80 +2000-02-03,11010.48,11207.97,10799.68,11013.44,1146500000,11013.44 +2000-02-02,11037.64,11228.44,10876.00,11003.20,1038600000,11003.20 +2000-02-01,10937.74,11187.18,10798.44,11041.05,981000000,11041.05 +2000-01-31,10735.77,11059.67,10610.43,10940.53,993800000,10940.53 +2000-01-28,11024.92,11115.20,10649.21,10738.87,1095800000,10738.87 +2000-01-27,11035.55,11274.36,10818.30,11028.02,1129500000,11028.02 +2000-01-26,11025.85,11280.87,10870.73,11032.99,1117300000,11032.99 +2000-01-25,11010.96,11228.75,10779.83,11029.89,1073700000,11029.89 +2000-01-24,11251.94,11501.15,10849.01,11008.17,1115800000,11008.17 +2000-01-21,11356.26,11513.87,11113.65,11251.71,1209800000,11251.71 +2000-01-20,11490.29,11654.72,11194.32,11351.30,1100700000,11351.30 +2000-01-19,11535.24,11710.57,11320.28,11489.36,1087800000,11489.36 +2000-01-18,11719.19,11834.67,11397.22,11560.72,1056700000,11560.72 +2000-01-14,11619.35,11908.50,11506.42,11722.98,1085900000,11722.98 +2000-01-13,11558.24,11761.14,11421.42,11582.43,1030400000,11582.43 +2000-01-12,11506.73,11751.83,11385.74,11551.10,974600000,11551.10 +2000-01-11,11568.47,11748.11,11398.30,11511.08,1014000000,11511.08 +2000-01-10,11532.48,11765.17,11427.00,11572.20,1064800000,11572.20 +2000-01-07,11247.06,11655.65,11168.26,11522.56,1225200000,11522.56 +2000-01-06,11113.37,11447.79,10963.18,11253.26,1092300000,11253.26 +2000-01-05,10989.37,11337.65,10862.66,11122.65,1085500000,11122.65 +2000-01-04,11349.75,11358.44,10907.03,10997.93,1009000000,10997.93 +2000-01-03,11501.85,11641.07,11180.98,11357.51,931800000,11357.51 +1999-12-31,11453.48,11598.26,11368.05,11497.12,374050000,11497.12 +1999-12-30,11484.36,11640.33,11388.94,11452.86,554680000,11452.86 +1999-12-29,11472.88,11658.68,11367.53,11484.66,567860000,11484.66 +1999-12-28,11389.24,11613.72,11302.08,11476.71,655400000,11476.71 +1999-12-27,11410.65,11603.02,11253.15,11391.08,722600000,11391.08 +1999-12-23,11202.07,11506.38,11202.07,11405.76,728600000,11405.76 +1999-12-22,11199.45,11375.17,11075.76,11203.60,850000000,11203.60 +1999-12-21,11142.43,11336.03,10973.61,11200.54,963500000,11200.54 +1999-12-20,11254.50,11417.38,11026.22,11144.27,904600000,11144.27 +1999-12-17,11259.26,11497.20,11103.59,11257.43,1349800000,11257.43 +1999-12-16,11224.40,11396.89,11016.13,11244.89,1070300000,11244.89 +1999-12-15,11158.78,11400.48,11014.60,11225.32,1033900000,11225.32 +1999-12-14,11195.34,11336.33,11027.13,11160.17,1027800000,11160.17 +1999-12-13,11217.46,11379.46,11024.38,11192.59,977600000,11192.59 +1999-12-10,11137.85,11358.66,11042.12,11224.70,987200000,11224.70 +1999-12-09,11073.62,11327.46,10962.60,11134.79,1122100000,11134.79 +1999-12-08,11107.26,11273.33,10957.41,11068.12,957000000,11068.12 +1999-12-07,11221.65,11351.32,10993.49,11106.65,1085800000,11106.65 +1999-12-06,11286.79,11412.79,11100.53,11225.01,916800000,11225.01 +1999-12-03,11046.10,11423.50,11046.10,11286.18,1006400000,11286.18 +1999-12-02,10995.02,11183.72,10896.24,11039.06,900700000,11039.06 +1999-12-01,10876.47,11111.24,10798.07,10998.39,884000000,10998.39 +1999-11-30,10945.49,11142.13,10785.22,10877.81,951500000,10877.81 +1999-11-29,10985.73,11059.25,10813.97,10947.92,866100000,10947.92 +1999-11-26,11007.26,11115.83,10938.44,10988.91,312120000,10988.91 +1999-11-24,11000.22,11131.12,10859.23,11008.17,734800000,11008.17 +1999-11-23,11090.29,11178.83,10899.60,10995.63,926100000,10995.63 +1999-11-22,11008.78,11195.34,10887.67,11089.52,873500000,11089.52 +1999-11-19,11033.25,11146.41,10871.77,11003.89,893800000,11003.89 +1999-11-18,10887.67,11147.02,10859.92,11035.70,1022800000,11035.70 +1999-11-17,10929.00,11040.90,10774.21,10883.09,960000000,10883.09 +1999-11-16,10762.89,10992.88,10691.94,10932.33,942200000,10932.33 +1999-11-15,10764.73,10899.22,10626.80,10760.75,795700000,10760.75 +1999-11-12,10593.51,10845.16,10513.03,10769.32,900200000,10769.32 +1999-11-11,10603.25,10716.71,10485.20,10595.30,891300000,10595.30 +1999-11-10,10611.94,10713.04,10449.42,10597.74,984700000,10597.74 +1999-11-09,10715.10,10806.02,10506.61,10617.32,854300000,10617.32 +1999-11-08,10668.42,10838.74,10548.20,10718.85,806800000,10718.85 +1999-11-05,10639.95,10885.53,10636.59,10704.48,1007300000,10704.48 +1999-11-04,10612.42,10817.95,10523.43,10639.64,981700000,10639.64 +1999-11-03,10582.54,10759.22,10485.50,10609.06,914400000,10609.06 +1999-11-02,10653.71,10816.11,10508.14,10581.84,904500000,10581.84 +1999-11-01,10730.78,10828.96,10568.08,10648.51,861000000,10648.51 +1999-10-29,10629.18,10883.10,10580.11,10729.86,1120500000,10729.86 +1999-10-28,10397.67,10726.70,10397.67,10622.53,1135100000,10622.53 +1999-10-27,10302.76,10515.21,10172.32,10394.89,950100000,10394.89 +1999-10-26,10350.88,10486.39,10208.73,10302.13,878300000,10302.13 +1999-10-25,10468.98,10518.37,10225.82,10349.93,777000000,10349.93 +1999-10-22,10581.69,10581.69,10301.18,10470.25,959200000,10470.25 +1999-10-21,10390.71,10414.52,10047.57,10297.69,1012500000,10297.69 +1999-10-20,10203.31,10485.13,10144.46,10392.36,928800000,10392.36 +1999-10-19,10117.54,10418.01,10093.80,10204.93,905700000,10204.93 +1999-10-18,10018.45,10221.08,9884.20,10116.28,818700000,10116.28 +1999-10-15,10286.61,10286.61,9911.43,10019.71,912600000,10019.71 +1999-10-14,10230.89,10416.74,10071.64,10286.61,892300000,10286.61 +1999-10-13,10412.31,10495.89,10173.58,10232.16,821500000,10232.16 +1999-10-12,10648.81,10659.58,10366.08,10417.06,778300000,10417.06 +1999-10-11,10649.76,10781.16,10545.60,10648.18,655900000,10648.18 +1999-10-08,10534.52,10743.48,10423.71,10649.76,897300000,10649.76 +1999-10-07,10588.34,10687.12,10430.99,10537.05,827800000,10537.05 +1999-10-06,10399.77,10655.46,10340.75,10588.34,895200000,10588.34 +1999-10-05,10401.23,10578.21,10250.20,10400.59,965700000,10400.59 +1999-10-04,10274.58,10538.32,10220.44,10401.23,803300000,10401.23 +1999-10-01,10335.69,10425.92,10108.05,10273.00,896200000,10273.00 +1999-09-30,10214.11,10456.32,10156.85,10336.95,1017600000,10336.95 +1999-09-29,10274.27,10408.51,10119.76,10213.48,856000000,10213.48 +1999-09-28,10300.51,10386.03,10055.17,10275.53,885400000,10275.53 +1999-09-27,10279.33,10498.74,10201.76,10303.39,780600000,10303.39 +1999-09-24,10311.94,10428.14,10128.63,10279.33,872800000,10279.33 +1999-09-23,10524.07,10643.75,10260.33,10318.59,890800000,10318.59 +1999-09-22,10599.42,10688.39,10407.56,10524.07,822200000,10524.07 +1999-09-21,10822.95,10822.95,10517.10,10598.47,817300000,10598.47 +1999-09-20,10801.87,10918.88,10715.93,10823.90,568000000,10823.90 +1999-09-17,10745.38,10946.74,10690.61,10803.63,861900000,10803.63 +1999-09-16,10795.77,10876.46,10592.46,10737.46,739000000,10737.46 +1999-09-15,10910.40,11049.96,10757.41,10801.42,787300000,10801.42 +1999-09-14,11028.74,11061.04,10815.67,10910.33,734500000,10910.33 +1999-09-13,11027.40,11146.52,10886.90,11030.33,657900000,11030.33 +1999-09-10,11087.00,11218.39,10965.74,11028.43,808500000,11028.43 +1999-09-09,11031.28,11172.17,10900.83,11079.40,773900000,11079.40 +1999-09-08,11034.13,11164.89,10898.62,11036.34,791200000,11036.34 +1999-09-07,11079.08,11191.80,10910.65,11034.13,715300000,11034.13 +1999-09-03,10922.36,11155.70,10922.36,11078.45,663200000,11078.45 +1999-09-02,10923.95,10923.95,10669.71,10843.21,687100000,10843.21 +1999-09-01,10828.44,11013.55,10784.32,10937.88,708200000,10937.88 +1999-08-31,10909.70,11079.08,10725.43,10829.28,861700000,10829.28 +1999-08-30,11087.69,11176.60,10869.81,10914.13,597900000,10914.13 +1999-08-27,11198.45,11295.33,11021.14,11090.17,570050000,11090.17 +1999-08-26,11326.04,11393.48,11133.86,11198.45,719000000,11198.45 +1999-08-25,11282.38,11428.94,11106.31,11326.04,864600000,11326.04 +1999-08-24,11297.54,11404.87,11135.76,11283.30,732700000,11283.30 +1999-08-23,11099.66,11344.09,11087.95,11299.76,682600000,11299.76 +1999-08-20,10963.84,11155.07,10916.35,11100.61,661200000,11100.61 +1999-08-19,10988.85,11037.29,10809.65,10963.84,684200000,10963.84 +1999-08-18,11109.66,11153.49,10913.50,10991.38,682800000,10991.38 +1999-08-17,11049.64,11180.08,10963.52,11117.08,691500000,11117.08 +1999-08-16,10980.11,11105.05,10853.98,11046.79,583550000,11046.79 +1999-08-13,10822.00,11049.64,10822.00,10973.65,691700000,10973.65 +1999-08-12,10785.65,10967.64,10688.07,10789.39,745600000,10789.39 +1999-08-11,10650.59,10878.99,10596.26,10787.80,792300000,10787.80 +1999-08-10,10704.22,10812.82,10487.34,10655.15,836200000,10655.15 +1999-08-09,10714.03,10854.61,10571.56,10707.70,684300000,10707.70 +1999-08-06,10792.58,10896.08,10584.54,10714.03,698900000,10714.03 +1999-08-05,10675.41,10876.77,10509.19,10793.82,859300000,10793.82 +1999-08-04,10675.66,10901.78,10585.17,10674.77,789300000,10674.77 +1999-08-03,10645.96,10812.82,10538.00,10677.31,739600000,10677.31 +1999-08-02,10654.83,10849.23,10551.30,10645.96,649550000,10645.96 +1999-07-30,10791.29,10897.98,10594.99,10655.15,736800000,10655.15 +1999-07-29,10920.15,10920.15,10672.24,10791.29,770100000,10791.29 +1999-07-28,10979.04,11090.48,10851.13,10972.07,690900000,10972.07 +1999-07-27,10863.16,11079.40,10834.35,10979.04,723800000,10979.04 +1999-07-26,10910.96,11014.50,10748.86,10863.16,613450000,10863.16 +1999-07-23,10979.67,11069.59,10813.77,10910.96,630580000,10910.96 +1999-07-22,11002.78,11140.51,10796.67,10969.22,771700000,10969.22 +1999-07-21,10998.94,11142.72,10865.69,11002.78,785500000,11002.78 +1999-07-20,11130.06,11245.62,10914.13,10996.13,754800000,10996.13 +1999-07-19,11209.84,11321.61,11069.90,11187.68,642330000,11187.68 +1999-07-16,11188.63,11300.08,11069.27,11209.84,714100000,11209.84 +1999-07-15,11200.03,11313.37,11072.75,11186.41,818800000,11186.41 +1999-07-14,11202.24,11289.95,11051.86,11148.10,756100000,11148.10 +1999-07-13,11106.31,11277.60,11013.55,11175.02,736000000,11175.02 +1999-07-12,11234.22,11314.64,11087.95,11200.98,685300000,11200.98 +1999-07-09,11142.72,11284.25,11050.59,11193.70,701000000,11193.70 +1999-07-08,11118.66,11290.58,10985.68,11126.89,830600000,11126.89 +1999-07-07,11129.74,11268.42,11008.16,11187.36,791200000,11187.36 +1999-07-06,11119.93,11291.21,11021.78,11135.12,722900000,11135.12 +1999-07-02,11089.53,11205.41,10995.50,11139.24,613570000,11139.24 +1999-07-01,10972.39,11156.65,10841.63,11066.42,843400000,11066.42 +1999-06-30,10805.22,11120.24,10657.36,10970.80,1117000000,10970.80 +1999-06-29,10673.83,10855.56,10589.61,10815.35,820100000,10815.35 +1999-06-28,10633.93,10792.24,10535.15,10655.15,652910000,10655.15 +1999-06-25,10586.44,10719.42,10477.21,10552.56,623460000,10552.56 +1999-06-24,10620.32,10736.83,10404.07,10534.83,690400000,10534.83 +1999-06-23,10702.32,10791.29,10542.75,10666.86,731800000,10666.86 +1999-06-22,10768.49,10879.94,10639.63,10721.63,716500000,10721.63 +1999-06-21,10865.06,10960.36,10684.91,10815.98,686600000,10815.98 +1999-06-18,10885.00,10978.09,10751.39,10855.56,914500000,10855.56 +1999-06-17,10732.71,10936.61,10642.80,10841.63,700300000,10841.63 +1999-06-16,10709.92,10883.74,10608.92,10784.95,806800000,10784.95 +1999-06-15,10612.09,10740.00,10500.01,10594.99,696600000,10594.99 +1999-06-14,10490.83,10691.24,10414.52,10563.33,669400000,10563.33 +1999-06-11,10619.69,10744.11,10386.98,10490.51,698200000,10490.51 +1999-06-10,10621.58,10736.20,10452.52,10621.27,716500000,10621.27 +1999-06-09,10780.84,10871.39,10602.59,10690.29,662000000,10690.29 +1999-06-08,10878.35,10954.66,10671.93,10765.64,685900000,10765.64 +1999-06-07,10805.20,11016.40,10718.47,10909.38,664300000,10909.38 +1999-06-04,10702.64,10892.60,10558.26,10799.84,694500000,10799.84 +1999-06-03,10629.18,10767.86,10515.52,10663.69,719600000,10663.69 +1999-06-02,10591.82,10694.09,10388.24,10577.89,728000000,10577.89 +1999-06-01,10549.08,10717.20,10334.42,10596.26,683800000,10596.26 +1999-05-28,10489.56,10690.07,10389.94,10559.74,649960000,10559.74 +1999-05-27,10643.04,10734.21,10372.96,10466.93,811400000,10466.93 +1999-05-26,10580.94,10818.08,10416.06,10702.16,870800000,10702.16 +1999-05-25,10651.73,10818.96,10494.52,10531.09,826700000,10531.09 +1999-05-24,10829.87,10924.26,10568.85,10654.67,754700000,10654.67 +1999-05-21,10879.13,10974.69,10728.12,10829.28,686600000,10829.28 +1999-05-20,10892.40,11020.70,10773.83,10866.74,752200000,10866.74 +1999-05-19,10836.67,10988.85,10722.81,10887.39,801100000,10887.39 +1999-05-18,10895.94,11017.75,10678.86,10836.95,753400000,10836.95 +1999-05-17,10864.35,10976.32,10677.64,10853.47,665500000,10853.47 +1999-05-14,10950.26,11076.55,10787.03,10913.32,727800000,10913.32 +1999-05-13,11087.71,11244.36,10931.36,11107.19,796900000,11107.19 +1999-05-12,11002.38,11146.71,10759.54,11000.37,825500000,11000.37 +1999-05-11,11059.65,11185.08,10882.11,11026.15,836100000,11026.15 +1999-05-10,11029.25,11173.05,10876.38,11007.25,773300000,11007.25 +1999-05-07,10967.16,11135.54,10838.29,11031.59,814900000,11031.59 +1999-05-06,10909.02,11093.44,10730.33,10946.82,875400000,10946.82 +1999-05-05,10902.72,11055.36,10711.15,10955.41,913500000,10955.41 +1999-05-04,11012.11,11140.12,10787.32,10886.11,933100000,10886.11 +1999-05-03,10788.75,11083.13,10701.12,11014.69,811400000,11014.69 +1999-04-30,10933.94,11072.25,10603.76,10789.04,936500000,10789.04 +1999-04-29,10864.64,11052.49,10710.00,10878.38,1003600000,10878.38 +1999-04-28,10806.22,11050.77,10665.90,10845.45,951700000,10845.45 +1999-04-27,10781.88,10977.46,10647.29,10831.71,891700000,10831.71 +1999-04-26,10721.17,10854.33,10540.47,10718.59,712000000,10718.59 +1999-04-23,10646.71,10858.34,10530.45,10689.67,744900000,10689.67 +1999-04-22,10735.77,10896.42,10517.85,10727.18,927900000,10727.18 +1999-04-21,10462.58,10702.56,10309.09,10581.42,920000000,10581.42 +1999-04-20,10440.53,10610.06,10212.87,10448.55,985400000,10448.55 +1999-04-19,10566.07,10879.76,10284.39,10440.53,1214400000,10440.53 +1999-04-16,10497.26,10632.90,10299.55,10493.89,1002300000,10493.89 +1999-04-15,10411.66,10673.90,10201.31,10462.72,1089800000,10462.72 +1999-04-14,10436.91,10692.49,10196.87,10411.66,952000000,10411.66 +1999-04-13,10340.62,10512.11,10239.33,10395.01,810900000,10395.01 +1999-04-12,10094.19,10384.46,10042.02,10339.51,810800000,10339.51 +1999-04-09,10166.62,10298.71,10035.09,10173.84,716100000,10173.84 +1999-04-08,10083.93,10282.62,9980.69,10197.70,850500000,10197.70 +1999-04-07,10023.43,10166.62,9859.98,10085.31,816400000,10085.31 +1999-04-06,9985.69,10097.25,9862.48,9963.49,787500000,9963.49 +1999-04-05,9893.84,10080.87,9826.40,10007.33,695800000,10007.33 +1999-04-01,9825.29,9927.69,9707.91,9832.51,703000000,9832.51 +1999-03-31,9968.21,10025.10,9744.82,9786.16,924300000,9786.16 +1999-03-30,10003.84,10035.36,9812.53,9913.26,729000000,9913.26 +1999-03-29,9879.41,10089.48,9837.78,10006.78,747900000,10006.78 +1999-03-26,9795.88,9923.53,9700.69,9822.24,707200000,9822.24 +1999-03-25,9735.66,9916.59,9666.28,9836.39,784200000,9836.39 +1999-03-24,9702.08,9803.09,9547.23,9666.84,761900000,9666.84 +1999-03-23,9846.66,9897.72,9593.85,9671.83,811300000,9671.83 +1999-03-22,9901.88,10005.95,9796.99,9890.51,658200000,9890.51 +1999-03-19,10107.79,10158.57,9856.37,9903.55,914700000,9903.55 +1999-03-18,9958.59,10060.62,9776.17,9997.62,831000000,9997.62 +1999-03-17,9939.90,10024.54,9792.55,9879.41,752300000,9879.41 +1999-03-16,9969.32,10062.84,9857.48,9930.47,751900000,9930.47 +1999-03-15,9880.24,10027.59,9807.53,9958.77,727200000,9958.77 +1999-03-12,9927.14,10042.58,9779.78,9876.35,825800000,9876.35 +1999-03-11,9815.86,9992.35,9742.32,9897.44,904800000,9897.44 +1999-03-10,9735.10,9849.71,9624.94,9772.84,841900000,9772.84 +1999-03-09,9703.47,9856.65,9586.08,9693.76,803700000,9693.76 +1999-03-08,9728.72,9825.02,9616.33,9727.61,714600000,9727.61 +1999-03-05,9636.65,9799.92,9558.41,9736.08,834900000,9736.08 +1999-03-04,9339.18,9549.99,9272.08,9467.40,770900000,9467.40 +1999-03-03,9311.74,9397.86,9163.41,9275.88,751700000,9275.88 +1999-03-02,9382.10,9494.57,9216.66,9297.61,753600000,9297.61 +1999-03-01,9315.27,9419.32,9167.76,9324.78,699500000,9324.78 +1999-02-26,9382.64,9459.52,9177.54,9306.58,784600000,9306.58 +1999-02-25,9395.66,9446.32,9200.27,9366.34,740500000,9366.34 +1999-02-24,9547.88,9662.77,9357.81,9399.67,782000000,9399.67 +1999-02-23,9549.21,9659.58,9425.26,9544.42,781100000,9544.42 +1999-02-22,9346.62,9596.13,9289.04,9552.68,718500000,9552.68 +1999-02-19,9284.51,9430.59,9218.13,9339.95,700000000,9339.95 +1999-02-18,9239.72,9368.48,9145.09,9298.63,742400000,9298.63 +1999-02-17,9240.79,9409.53,9124.03,9195.47,735100000,9195.47 +1999-02-16,9333.34,9458.46,9187.10,9297.03,653760000,9297.03 +1999-02-12,9346.47,9437.35,9161.35,9274.89,691500000,9274.89 +1999-02-11,9176.28,9423.19,9088.49,9363.46,815800000,9363.46 +1999-02-10,9135.86,9267.68,9025.41,9177.31,721400000,9177.31 +1999-02-09,9268.46,9361.92,9076.13,9133.03,736000000,9133.03 +1999-02-08,9318.66,9427.83,9148.99,9291.11,705400000,9291.11 +1999-02-05,9317.12,9457.43,9141.27,9304.24,872000000,9304.24 +1999-02-04,9389.72,9511.50,9178.60,9304.50,854400000,9304.50 +1999-02-03,9275.41,9454.09,9176.80,9366.81,876500000,9366.81 +1999-02-02,9318.40,9394.10,9146.16,9274.12,845500000,9274.12 +1999-02-01,9405.43,9513.05,9266.91,9345.70,799400000,9345.70 +1999-01-29,9317.37,9457.18,9172.16,9358.83,917000000,9358.83 +1999-01-28,9220.57,9384.83,9134.57,9281.33,848800000,9281.33 +1999-01-27,9378.65,9461.04,9135.86,9200.23,893800000,9200.23 +1999-01-26,9210.78,9408.77,9118.35,9324.58,896400000,9324.58 +1999-01-25,9117.58,9273.09,8994.26,9203.32,723900000,9203.32 +1999-01-22,9149.51,9289.31,8998.89,9120.67,785900000,9120.67 +1999-01-21,9371.96,9479.83,9150.28,9264.08,871800000,9264.08 +1999-01-20,9395.64,9555.01,9230.35,9335.91,905700000,9335.91 +1999-01-19,9408.52,9499.14,9165.73,9355.22,785500000,9355.22 +1999-01-15,9200.74,9381.74,9124.02,9340.55,798100000,9340.55 +1999-01-14,9315.06,9380.20,9052.44,9120.93,797200000,9120.93 +1999-01-13,9213.62,9485.24,9134.06,9349.56,931500000,9349.56 +1999-01-12,9599.55,9680.40,9394.87,9474.68,800200000,9474.68 +1999-01-11,9613.97,9751.46,9446.36,9619.89,818000000,9619.89 +1999-01-08,9612.17,9759.44,9447.91,9643.32,937800000,9643.32 +1999-01-07,9445.33,9616.29,9369.12,9537.76,863000000,9537.76 +1999-01-06,9399.25,9608.05,9331.02,9544.97,986900000,9544.97 +1999-01-05,9201.00,9389.46,9137.66,9311.19,775000000,9311.19 +1999-01-04,9212.84,9393.84,9089.00,9184.27,877000000,9184.27 +1998-12-31,9271.55,9343.64,9106.77,9181.43,719200000,9181.43 +1998-12-30,9310.17,9390.75,9211.30,9274.64,594220000,9274.64 +1998-12-29,9222.63,9375.30,9152.34,9320.98,586490000,9320.98 +1998-12-28,9251.21,9330.50,9133.54,9226.75,531560000,9226.75 +1998-12-24,9202.29,9289.57,9146.42,9217.99,246980000,9217.99 +1998-12-23,9085.91,9255.84,9022.58,9202.03,697500000,9202.03 +1998-12-22,9000.95,9122.99,8909.29,9044.46,680500000,9044.46 +1998-12-21,8903.89,9150.54,8874.28,8988.85,744800000,8988.85 +1998-12-18,8902.86,9012.28,8789.31,8903.63,839600000,8903.63 +1998-12-17,8787.55,8959.76,8725.21,8875.82,739400000,8875.82 +1998-12-16,8843.38,8922.94,8675.52,8790.60,725500000,8790.60 +1998-12-15,8725.72,8878.40,8614.75,8823.30,777900000,8823.30 +1998-12-14,8767.95,8868.10,8610.63,8695.60,741800000,8695.60 +1998-12-11,8814.29,8916.24,8680.41,8821.76,688900000,8821.76 +1998-12-10,9008.42,9034.42,8795.24,8841.58,748600000,8841.58 +1998-12-09,9025.41,9138.18,8881.23,9009.19,694200000,9009.19 +1998-12-08,9038.03,9153.63,8903.37,9027.98,727700000,9027.98 +1998-12-07,9031.59,9146.93,8946.11,9070.47,671200000,9070.47 +1998-12-04,8964.91,9078.70,8873.76,9016.14,709700000,9016.14 +1998-12-03,9031.33,9112.69,8839.78,8879.68,799100000,8879.68 +1998-12-02,9039.57,9154.40,8922.94,9064.54,727400000,9064.54 +1998-12-01,9039.57,9214.65,8934.52,9133.54,789200000,9133.54 +1998-11-30,9292.40,9348.53,9074.07,9116.55,687900000,9116.55 +1998-11-27,9333.85,9403.62,9263.82,9333.08,256950000,9333.08 +1998-11-25,9292.91,9387.66,9199.20,9314.28,583580000,9314.28 +1998-11-24,9327.93,9457.95,9219.28,9301.15,766200000,9301.15 +1998-11-23,9225.72,9425.77,9137.92,9374.27,774100000,9374.27 +1998-11-20,9129.94,9215.93,9048.32,9159.55,721200000,9159.55 +1998-11-19,9081.02,9147.96,8967.22,9056.05,671000000,9056.05 +1998-11-18,8988.85,9095.70,8897.96,9041.11,652510000,9041.11 +1998-11-17,8991.17,9158.26,8870.42,8986.28,705200000,8986.28 +1998-11-16,8921.14,9093.12,8885.09,9011.25,615580000,9011.25 +1998-11-13,8863.21,8982.16,8782.62,8919.59,602270000,8919.59 +1998-11-12,8823.04,8951.26,8733.70,8829.74,662300000,8829.74 +1998-11-11,8922.42,8980.35,8759.19,8823.82,715700000,8823.82 +1998-11-10,8895.17,9020.00,8760.99,8863.98,671300000,8863.98 +1998-11-09,8980.87,9024.89,8813.00,8897.96,592990000,8897.96 +1998-11-06,8902.86,9042.40,8831.02,8975.46,683100000,8975.46 +1998-11-05,8782.11,8943.79,8676.55,8915.47,770200000,8915.47 +1998-11-04,8801.93,8933.49,8660.33,8783.14,861100000,8783.14 +1998-11-03,8708.99,8819.18,8601.88,8706.15,704300000,8706.15 +1998-11-02,8645.65,8804.51,8573.56,8706.15,753800000,8706.15 +1998-10-30,8591.58,8718.25,8481.39,8592.10,785000000,8592.10 +1998-10-29,8371.22,8539.83,8305.54,8495.03,699400000,8495.03 +1998-10-28,8372.74,8504.04,8271.55,8371.97,677500000,8371.97 +1998-10-27,8503.79,8586.69,8309.92,8366.04,764500000,8366.04 +1998-10-26,8483.96,8564.03,8349.57,8432.21,609910000,8432.21 +1998-10-23,8531.34,8589.01,8366.04,8452.29,637640000,8452.29 +1998-10-22,8519.03,8629.17,8334.12,8533.14,754900000,8533.14 +1998-10-21,8504.67,8641.02,8380.72,8519.23,745100000,8519.23 +1998-10-20,8540.09,8713.62,8419.08,8505.85,958200000,8505.85 +1998-10-19,8415.48,8591.07,8321.50,8466.45,738600000,8466.45 +1998-10-16,8384.84,8521.29,8244.26,8416.76,1042200000,8416.76 +1998-10-15,7953.07,8375.57,7885.62,8299.36,937600000,8299.36 +1998-10-14,7925.01,8107.29,7812.75,7968.78,791200000,7968.78 +1998-10-13,7982.68,8093.90,7805.29,7938.14,733300000,7938.14 +1998-10-12,8038.03,8162.65,7931.19,8001.47,691100000,8001.47 +1998-10-09,7806.57,7976.76,7628.15,7899.52,878100000,7899.52 +1998-10-08,7734.48,7822.02,7399.78,7731.91,1114600000,7731.91 +1998-10-07,7754.82,7913.94,7558.89,7741.69,977000000,7741.69 +1998-10-06,7733.97,7951.53,7646.43,7742.98,845700000,7742.98 +1998-10-05,7760.75,7866.82,7507.14,7726.24,817500000,7726.24 +1998-10-02,7631.50,7866.31,7496.84,7784.69,902900000,7784.69 +1998-10-01,7749.42,7856.26,7540.87,7632.53,899700000,7632.53 +1998-09-30,8025.42,8097.51,7775.42,7842.62,800100000,7842.62 +1998-09-29,8141.28,8253.79,7946.63,8080.52,760100000,8080.52 +1998-09-28,8114.76,8239.37,7986.80,8108.84,690500000,8108.84 +1998-09-25,7911.10,8127.89,7849.06,8028.77,736800000,8028.77 +1998-09-24,8117.33,8227.53,7906.73,8001.99,805900000,8001.99 +1998-09-23,7988.60,8198.43,7891.79,8154.41,899700000,8154.41 +1998-09-22,7987.83,8038.29,7816.87,7897.20,694900000,7897.20 +1998-09-21,7739.12,8008.43,7653.64,7933.25,609880000,7933.25 +1998-09-18,7942.77,8012.03,7759.97,7895.66,794700000,7895.66 +1998-09-17,7905.96,8001.99,7795.50,7873.77,694500000,7873.77 +1998-09-16,8061.46,8159.30,7923.46,8089.78,797500000,8089.78 +1998-09-15,7918.83,8087.21,7840.30,8024.39,724600000,8024.39 +1998-09-14,7936.08,8081.29,7848.03,7945.35,714400000,7945.35 +1998-09-11,7583.61,7866.31,7497.10,7795.50,819100000,7795.50 +1998-09-10,7680.42,7761.00,7469.04,7615.54,880300000,7615.54 +1998-09-09,7995.04,8094.16,7796.79,7865.02,704300000,7865.02 +1998-09-08,7964.91,8103.69,7779.03,8020.78,814800000,8020.78 +1998-09-04,7737.32,7831.29,7450.24,7640.25,780300000,7640.25 +1998-09-03,7679.13,7841.59,7499.68,7682.22,880500000,7682.22 +1998-09-02,7901.06,8036.23,7710.54,7782.37,894600000,7782.37 +1998-09-01,7583.09,7937.37,7379.70,7827.43,1216600000,7827.43 +1998-08-31,8078.97,8149.00,7517.70,7539.07,917500000,7539.07 +1998-08-28,8193.54,8301.68,7951.27,8051.68,840300000,8051.68 +1998-08-27,8377.89,8448.69,8062.24,8165.99,938600000,8165.99 +1998-08-26,8492.97,8639.47,8396.68,8523.35,674100000,8523.35 +1998-08-25,8632.00,8740.91,8510.22,8602.65,664900000,8602.65 +1998-08-24,8584.63,8680.66,8452.29,8566.61,558100000,8566.61 +1998-08-21,8600.34,8600.34,8307.60,8533.65,725700000,8533.65 +1998-08-20,8639.47,8726.75,8538.29,8611.41,621630000,8611.41 +1998-08-19,8745.80,8797.81,8635.61,8693.28,633630000,8693.28 +1998-08-18,8593.90,8767.69,8551.93,8714.65,690600000,8714.65 +1998-08-17,8404.66,8613.98,8350.34,8574.85,584380000,8574.85 +1998-08-14,8531.85,8635.87,8342.10,8425.00,644030000,8425.00 +1998-08-13,8535.46,8656.46,8399.51,8459.50,660700000,8459.50 +1998-08-12,8528.76,8621.71,8437.10,8552.96,711700000,8552.96 +1998-08-11,8431.44,8538.29,8263.32,8462.85,774400000,8462.85 +1998-08-10,8585.40,8689.16,8491.17,8574.85,579180000,8574.85 +1998-08-07,8610.63,8745.03,8490.40,8598.02,759100000,8598.02 +1998-08-06,8513.83,8671.14,8415.22,8577.68,768400000,8577.68 +1998-08-05,8493.75,8641.79,8316.10,8546.78,851600000,8546.78 +1998-08-04,8859.86,8896.68,8463.37,8487.31,852600000,8487.31 +1998-08-03,8868.10,8948.17,8729.58,8786.74,620400000,8786.74 +1998-07-31,9024.64,9109.34,8810.94,8883.29,645910000,8883.29 +1998-07-30,8962.85,9113.20,8884.83,9026.95,687400000,9026.95 +1998-07-29,8976.49,9039.57,8831.28,8914.96,644350000,8914.96 +1998-07-28,8982.16,9065.57,8786.48,8934.78,703600000,8934.78 +1998-07-27,8905.17,9084.63,8806.05,9028.24,619990000,9028.24 +1998-07-24,9002.24,9077.67,8814.29,8937.36,698600000,8937.36 +1998-07-23,9130.46,9196.11,8892.56,8932.98,741600000,8932.98 +1998-07-22,9185.71,9264.85,8996.83,9128.91,739800000,9128.91 +1998-07-21,9296.26,9369.12,9145.65,9190.19,659700000,9190.19 +1998-07-20,9340.55,9408.26,9206.15,9295.75,560580000,9295.75 +1998-07-17,9328.19,9412.64,9259.96,9337.97,618030000,9337.97 +1998-07-16,9233.23,9368.35,9173.19,9328.19,677800000,9328.19 +1998-07-15,9246.57,9388.69,9165.99,9234.47,723900000,9234.47 +1998-07-14,9100.07,9314.54,9087.20,9245.54,700300000,9245.54 +1998-07-13,9107.03,9186.58,9020.52,9096.21,574880000,9096.21 +1998-07-10,9098.53,9194.82,8976.23,9105.74,576080000,9105.74 +1998-07-09,9135.36,9217.07,9014.30,9089.78,663600000,9089.78 +1998-07-08,9107.96,9231.27,9041.70,9174.97,607230000,9174.97 +1998-07-07,9094.76,9209.85,9001.84,9085.04,624890000,9085.04 +1998-07-06,9017.53,9137.11,8965.97,9091.77,514750000,9091.77 +1998-07-02,9037.71,9094.01,8956.25,9025.26,510210000,9025.26 +1998-07-01,9011.56,9103.23,8918.64,9048.67,701600000,9048.67 +1998-06-30,9010.81,9085.79,8868.57,8952.02,757200000,8952.02 +1998-06-29,9002.34,9099.24,8930.84,8997.36,564350000,8997.36 +1998-06-26,8948.28,9047.93,8879.78,8944.54,520050000,8944.54 +1998-06-25,8950.52,9079.56,8863.58,8935.58,669900000,8935.58 +1998-06-24,8828.46,8970.20,8740.52,8923.87,714900000,8923.87 +1998-06-23,8789.35,8877.78,8724.83,8828.46,657100000,8828.46 +1998-06-22,8705.65,8805.04,8639.38,8711.13,531550000,8711.13 +1998-06-19,8844.90,8885.01,8664.79,8712.87,715500000,8712.87 +1998-06-18,8825.72,8900.20,8740.77,8813.01,590440000,8813.01 +1998-06-17,8745.51,8932.34,8695.43,8829.46,744400000,8829.46 +1998-06-16,8666.04,8751.24,8524.55,8665.29,664600000,8665.29 +1998-06-15,8723.34,8818.99,8588.32,8627.93,595820000,8627.93 +1998-06-12,8812.77,8891.24,8660.56,8834.94,633300000,8834.94 +1998-06-11,8975.43,9015.54,8774.40,8811.77,627470000,8811.77 +1998-06-10,9031.98,9145.08,8891.98,8971.70,609410000,8971.70 +1998-06-09,9074.58,9130.13,8966.72,9049.92,563610000,9049.92 +1998-06-08,9052.66,9155.04,8994.12,9069.60,543390000,9069.60 +1998-06-05,8920.88,9057.39,8866.57,9037.71,558440000,9037.71 +1998-06-04,8798.07,8916.64,8719.85,8870.56,577470000,8870.56 +1998-06-03,8909.42,8970.20,8769.67,8803.80,584480000,8803.80 +1998-06-02,8961.48,9014.05,8838.92,8891.24,590930000,8891.24 +1998-06-01,8907.93,9023.01,8805.04,8922.37,537660000,8922.37 +1998-05-29,9004.83,9060.13,8859.60,8899.95,556780000,8899.95 +1998-05-28,8947.53,9040.70,8861.59,8970.20,588900000,8970.20 +1998-05-27,8902.45,9015.04,8760.95,8936.57,682040000,8936.57 +1998-05-26,9167.00,9201.63,8949.78,8963.73,541410000,8963.73 +1998-05-22,9153.05,9209.35,9040.70,9114.44,444070000,9114.44 +1998-05-21,9173.48,9248.96,9058.64,9132.37,551970000,9132.37 +1998-05-20,9101.98,9219.06,9010.56,9171.48,587240000,9171.48 +1998-05-19,9097.00,9164.51,8997.36,9054.65,566020000,9054.65 +1998-05-18,9088.53,9171.23,8972.20,9050.91,519100000,9050.91 +1998-05-15,9161.52,9240.74,9051.91,9096.00,621990000,9096.00 +1998-05-14,9136.86,9266.89,9077.07,9172.23,578380000,9172.23 +1998-05-13,9178.06,9283.09,9119.67,9211.84,600010000,9211.84 +1998-05-12,9098.00,9214.08,9023.51,9161.77,604420000,9161.77 +1998-05-11,9125.65,9231.52,9045.43,9091.52,560840000,9091.52 +1998-05-08,8981.91,9143.09,8951.27,9055.15,567890000,9055.15 +1998-05-07,9044.44,9102.98,8914.90,8976.68,582240000,8976.68 +1998-05-06,9174.72,9223.80,9017.28,9054.65,606540000,9054.65 +1998-05-05,9189.92,9251.95,9062.37,9147.57,583630000,9147.57 +1998-05-04,9201.38,9311.98,9134.86,9192.66,551700000,9192.66 +1998-05-01,9106.47,9211.84,9015.54,9147.07,581970000,9147.07 +1998-04-30,9018.28,9169.99,8970.95,9063.37,695600000,9063.37 +1998-04-29,8899.21,9036.47,8857.85,8951.52,638790000,8951.52 +1998-04-28,8920.88,9051.16,8828.71,8898.96,678600000,8898.96 +1998-04-27,8937.07,9026.25,8796.08,8917.64,685960000,8917.64 +1998-04-24,9143.83,9206.36,8983.65,9064.62,633890000,9064.62 +1998-04-23,9176.96,9269.88,9061.88,9143.33,653190000,9143.33 +1998-04-22,9184.93,9287.32,9083.80,9176.72,696740000,9176.72 +1998-04-21,9137.85,9250.20,9051.41,9184.94,675640000,9184.94 +1998-04-20,9166.75,9245.22,9027.25,9141.84,595190000,9141.84 +1998-04-17,9077.57,9213.58,9010.06,9167.50,672290000,9167.50 +1998-04-16,9162.27,9204.12,8978.92,9076.57,699570000,9076.57 +1998-04-15,9110.45,9249.95,9017.53,9162.27,685020000,9162.27 +1998-04-14,9014.30,9177.96,8971.45,9110.20,613730000,9110.20 +1998-04-13,8997.11,9107.21,8870.31,9012.30,564480000,9012.30 +1998-04-09,8891.48,9062.12,8891.48,8994.86,548940000,8994.86 +1998-04-08,8951.52,9023.51,8821.73,8891.48,616330000,8891.48 +1998-04-07,8995.36,9072.34,8862.34,8956.50,670760000,8956.50 +1998-04-06,9051.16,9170.74,8958.49,9033.23,625810000,9033.23 +1998-04-03,8986.64,9085.79,8896.22,8983.41,653880000,8983.41 +1998-04-02,8900.20,9025.26,8829.21,8986.64,674340000,8986.64 +1998-04-01,8818.50,8935.33,8715.61,8868.32,677310000,8868.32 +1998-03-31,8852.12,8937.57,8726.32,8799.81,674930000,8799.81 +1998-03-30,8802.30,8877.04,8701.66,8782.12,497400000,8782.12 +1998-03-27,8835.68,8941.31,8741.77,8796.08,582190000,8796.08 +1998-03-26,8847.89,8931.09,8769.92,8846.89,606770000,8846.89 +1998-03-25,8943.05,8997.11,8780.88,8872.80,676550000,8872.80 +1998-03-24,8887.00,8962.48,8815.01,8904.44,605720000,8904.44 +1998-03-23,8839.42,8939.31,8758.71,8816.25,631350000,8816.25 +1998-03-20,8814.01,8957.25,8766.43,8906.43,717310000,8906.43 +1998-03-19,8776.89,8855.11,8708.64,8803.05,598240000,8803.05 +1998-03-18,8749.24,8825.72,8655.83,8775.40,632690000,8775.40 +1998-03-17,8706.64,8812.52,8633.41,8749.99,680960000,8749.99 +1998-03-16,8647.36,8760.45,8573.37,8718.85,548980000,8718.85 +1998-03-13,8669.28,8733.30,8563.90,8602.52,597800000,8602.52 +1998-03-12,8622.20,8725.58,8576.86,8659.56,594940000,8659.56 +1998-03-11,8682.73,8740.52,8599.28,8675.75,655260000,8675.75 +1998-03-10,8623.19,8688.71,8550.45,8643.12,631920000,8643.12 +1998-03-09,8601.02,8661.56,8482.45,8567.14,624700000,8567.14 +1998-03-06,8505.86,8610.49,8432.62,8569.39,665500000,8569.39 +1998-03-05,8480.20,8536.80,8377.32,8444.33,648270000,8444.33 +1998-03-04,8524.55,8609.99,8454.79,8539.24,644280000,8539.24 +1998-03-03,8532.77,8632.16,8464.26,8584.83,612360000,8584.83 +1998-03-02,8528.78,8649.35,8427.89,8550.45,591470000,8550.45 +1998-02-27,8532.77,8616.72,8426.15,8545.72,574480000,8545.72 +1998-02-26,8471.48,8541.98,8377.82,8490.67,646280000,8490.67 +1998-02-25,8455.29,8510.60,8362.37,8457.78,611350000,8457.78 +1998-02-24,8370.10,8457.78,8303.83,8370.10,589880000,8370.10 +1998-02-23,8381.31,8490.92,8331.98,8410.20,550730000,8410.20 +1998-02-20,8350.67,8449.06,8291.88,8413.94,594300000,8413.94 +1998-02-19,8379.56,8463.26,8327.25,8375.58,581820000,8375.58 +1998-02-18,8419.17,8503.12,8326.75,8451.06,606000000,8451.06 +1998-02-17,8439.35,8483.94,8335.97,8398.50,605890000,8398.50 +1998-02-13,8346.68,8416.43,8269.21,8370.10,531940000,8370.10 +1998-02-12,8260.49,8412.20,8206.93,8369.60,611480000,8369.60 +1998-02-11,8298.60,8367.61,8223.87,8314.55,599300000,8314.55 +1998-02-10,8241.81,8368.10,8149.88,8295.61,642800000,8295.61 +1998-02-09,8185.26,8256.75,8104.55,8180.52,524810000,8180.52 +1998-02-06,8178.28,8255.26,8102.30,8189.49,569650000,8189.49 +1998-02-05,8129.71,8215.65,8037.54,8117.25,703980000,8117.25 +1998-02-04,8160.35,8188.00,8050.99,8129.71,695420000,8129.71 +1998-02-03,8107.78,8193.23,8010.63,8160.35,692120000,8160.35 +1998-02-02,7987.46,8157.86,7987.46,8107.78,724320000,8107.78 +1998-01-30,7973.02,8023.83,7850.95,7906.50,613380000,7906.50 +1998-01-29,7915.47,8015.12,7883.09,7973.02,750760000,7973.02 +1998-01-28,7815.08,7985.97,7761.52,7915.47,708470000,7915.47 +1998-01-27,7712.94,7890.56,7677.07,7815.08,679140000,7815.08 +1998-01-26,7700.74,7813.59,7629.99,7712.94,555080000,7712.94 +1998-01-23,7730.88,7814.08,7609.31,7700.74,635770000,7700.74 +1998-01-22,7794.40,7833.26,7637.71,7730.88,646570000,7730.88 +1998-01-21,7873.12,7874.87,7707.96,7794.40,626160000,7794.40 +1998-01-20,7753.55,7908.00,7696.01,7873.12,644790000,7873.12 +1998-01-16,7691.77,7846.47,7687.04,7753.55,670080000,7753.55 +1998-01-15,7784.69,7803.87,7651.66,7691.77,569050000,7691.77 +1998-01-14,7732.13,7836.25,7669.10,7784.69,603280000,7784.69 +1998-01-13,7647.18,7791.17,7610.31,7732.13,646740000,7732.13 +1998-01-12,7580.42,7706.22,7391.59,7647.18,705450000,7647.18 +1998-01-09,7802.62,7815.08,7513.41,7580.42,746420000,7580.42 +1998-01-08,7902.27,7935.40,7733.12,7802.62,652140000,7802.62 +1998-01-07,7906.25,7943.87,7751.56,7902.27,667390000,7902.27 +1998-01-06,7978.99,7999.17,7832.52,7906.25,618360000,7906.25 +1998-01-05,7965.04,8072.91,7865.40,7978.99,628070000,7978.99 +1998-01-02,7908.25,8001.41,7845.47,7965.04,366730000,7965.04 +1997-12-31,7915.97,7995.93,7833.76,7908.25,467280000,7908.25 +1997-12-30,7792.41,7958.32,7787.68,7915.97,499500000,7915.97 +1997-12-29,7712.94,7835.01,7712.94,7792.41,443160000,7792.41 +1997-12-26,7660.13,7743.34,7634.72,7679.31,154900000,7679.31 +1997-12-24,7691.77,7767.75,7624.26,7660.13,265980000,7660.13 +1997-12-23,7819.31,7874.12,7667.11,7691.77,515070000,7691.77 +1997-12-22,7756.29,7892.05,7710.45,7819.31,530670000,7819.31 +1997-12-19,7846.50,7878.60,7563.23,7756.29,793200000,7756.29 +1997-12-18,7957.41,7991.48,7781.35,7846.50,618870000,7846.50 +1997-12-17,7976.31,8068.81,7879.08,7957.41,618900000,7957.41 +1997-12-16,7922.59,8069.06,7889.52,7976.31,623320000,7976.31 +1997-12-15,7838.30,7992.72,7807.96,7922.59,597150000,7922.59 +1997-12-12,7848.99,7947.21,7756.73,7838.30,579280000,7838.30 +1997-12-11,7961.64,7961.64,7778.37,7848.99,631770000,7848.99 +1997-12-10,8049.66,8077.27,7881.07,7978.79,602290000,7978.79 +1997-12-09,8110.84,8142.67,7990.98,8049.66,539130000,8049.66 +1997-12-08,8149.13,8195.88,8057.37,8110.84,490320000,8110.84 +1997-12-05,8050.16,8209.56,7980.04,8149.13,563590000,8149.13 +1997-12-04,8032.01,8159.58,7978.30,8050.16,633470000,8050.16 +1997-12-03,8018.83,8118.30,7915.63,8032.01,624610000,8032.01 +1997-12-02,8013.11,8096.66,7935.03,8018.83,576120000,8018.83 +1997-12-01,7823.62,8048.92,7823.62,8013.11,590300000,8013.11 +1997-11-28,7794.78,7872.86,7786.08,7823.13,189070000,7823.13 +1997-11-26,7808.95,7893.50,7749.77,7794.78,487750000,7794.78 +1997-11-25,7767.92,7880.32,7706.00,7808.95,587890000,7808.95 +1997-11-24,7881.07,7887.28,7723.41,7767.92,514920000,7767.92 +1997-11-21,7826.61,7934.53,7758.47,7881.07,611000000,7881.07 +1997-11-20,7724.74,7889.77,7718.19,7826.61,602610000,7826.61 +1997-11-19,7650.82,7779.75,7599.50,7724.74,542720000,7724.74 +1997-11-18,7698.22,7772.62,7607.11,7650.82,521380000,7650.82 +1997-11-17,7613.49,7781.71,7613.49,7698.22,576540000,7698.22 +1997-11-14,7487.76,7634.61,7431.03,7572.48,635760000,7572.48 +1997-11-13,7401.32,7546.45,7334.77,7487.76,653960000,7487.76 +1997-11-12,7558.73,7573.22,7359.32,7401.32,585340000,7401.32 +1997-11-11,7552.59,7599.74,7518.21,7558.73,435660000,7558.73 +1997-11-10,7581.32,7687.90,7511.83,7552.59,464140000,7552.59 +1997-11-07,7646.89,7646.89,7460.99,7581.32,569980000,7581.32 +1997-11-06,7692.57,7758.63,7597.78,7683.24,522890000,7683.24 +1997-11-05,7689.13,7791.78,7628.96,7692.57,565680000,7692.57 +1997-11-04,7674.39,7757.15,7583.29,7689.13,541590000,7689.13 +1997-11-03,7443.07,7674.39,7443.07,7674.39,564740000,7674.39 +1997-10-31,7381.67,7544.24,7329.61,7442.08,638070000,7442.08 +1997-10-30,7506.67,7569.78,7340.42,7381.67,712230000,7381.67 +1997-10-29,7498.32,7664.08,7409.67,7506.67,777660000,7506.67 +1997-10-28,7161.15,7553.57,6936.45,7498.32,1202550000,7498.32 +1997-10-27,7715.41,7717.37,7150.10,7161.15,693730000,7161.15 +1997-10-24,7847.77,7975.47,7645.91,7715.41,677630000,7715.41 +1997-10-23,7957.05,7957.05,7767.22,7847.77,673270000,7847.77 +1997-10-22,8060.44,8124.78,7941.33,8034.65,613490000,8034.65 +1997-10-21,7921.44,8090.40,7909.41,8060.44,582310000,8060.44 +1997-10-20,7847.03,7966.63,7774.83,7921.44,483880000,7921.44 +1997-10-17,7938.88,7953.61,7731.12,7847.03,624980000,7847.03 +1997-10-16,8057.98,8146.14,7880.18,7938.88,597010000,7938.88 +1997-10-15,8096.29,8127.48,7997.57,8057.98,505310000,8057.98 +1997-10-14,8072.22,8168.24,7990.20,8096.29,510330000,8096.29 +1997-10-13,8045.21,8150.31,8026.30,8072.22,354800000,8072.22 +1997-10-10,8061.42,8091.38,7961.96,8045.21,500680000,8045.21 +1997-10-09,8095.06,8127.72,7980.87,8061.42,551840000,8061.42 +1997-10-08,8178.31,8208.52,8019.92,8095.06,573110000,8095.06 +1997-10-07,8100.22,8218.34,8058.96,8178.31,551970000,8178.31 +1997-10-06,8038.58,8160.63,8017.71,8100.22,495620000,8100.22 +1997-10-03,8027.53,8183.22,7937.89,8038.58,623370000,8038.58 +1997-10-02,8015.50,8087.45,7943.79,8027.53,474760000,8027.53 +1997-10-01,7945.26,8081.06,7909.41,8015.50,598660000,8015.50 +1997-09-30,7991.43,8045.70,7900.08,7945.26,587500000,7945.26 +1997-09-29,7922.18,8030.48,7862.99,7991.43,477100000,7991.43 +1997-09-26,7853.66,7970.80,7853.66,7922.18,505340000,7922.18 +1997-09-25,7906.71,7962.45,7802.34,7848.01,524880000,7848.01 +1997-09-24,7970.06,8065.84,7866.43,7906.71,639460000,7906.71 +1997-09-23,7996.83,8048.16,7885.34,7970.06,522930000,7970.06 +1997-09-22,7917.27,8078.36,7889.27,7996.83,490900000,7996.83 +1997-09-19,7922.72,7972.29,7821.69,7917.27,631040000,7917.27 +1997-09-18,7886.44,8049.36,7858.93,7922.72,566830000,7922.72 +1997-09-17,7895.92,7981.54,7816.47,7886.44,590550000,7886.44 +1997-09-16,7721.14,7951.18,7709.75,7895.92,636380000,7895.92 +1997-09-15,7742.97,7832.86,7680.95,7721.14,468030000,7721.14 +1997-09-12,7660.98,7779.67,7584.56,7742.97,544150000,7742.97 +1997-09-11,7719.28,7745.29,7556.23,7660.98,575020000,7660.98 +1997-09-10,7851.91,7868.16,7686.30,7719.28,517620000,7719.28 +1997-09-09,7835.18,7922.05,7768.52,7851.91,502200000,7851.91 +1997-09-08,7822.41,7921.35,7795.00,7835.18,466430000,7835.18 +1997-09-05,7867.24,7952.01,7765.27,7822.41,536400000,7822.41 +1997-09-04,7894.64,7936.45,7788.50,7867.24,559310000,7867.24 +1997-09-03,7879.78,7972.22,7828.45,7894.64,549060000,7894.64 +1997-09-02,7650.99,7903.47,7650.99,7879.78,491870000,7879.78 +1997-08-29,7694.43,7729.73,7580.85,7622.42,413910000,7622.42 +1997-08-28,7787.33,7831.70,7634.50,7694.43,486300000,7694.43 +1997-08-27,7782.22,7850.51,7666.55,7787.33,492150000,7787.33 +1997-08-26,7859.57,7891.62,7734.61,7782.22,449110000,7782.22 +1997-08-25,7887.91,7974.08,7791.75,7859.57,388990000,7859.57 +1997-08-22,7893.95,7904.86,7695.36,7887.91,460160000,7887.91 +1997-08-21,8021.23,8043.06,7834.02,7893.95,499000000,7893.95 +1997-08-20,7918.10,8037.95,7870.95,8021.23,521270000,8021.23 +1997-08-19,7803.36,7947.37,7776.65,7918.10,545630000,7918.10 +1997-08-18,7694.66,7847.49,7588.28,7803.36,514330000,7803.36 +1997-08-15,7919.26,7919.26,7685.14,7694.66,537820000,7694.66 +1997-08-14,7928.32,8027.73,7843.54,7942.03,530460000,7942.03 +1997-08-13,7960.84,8075.58,7848.19,7928.32,587210000,7928.32 +1997-08-12,8062.11,8132.49,7926.46,7960.84,499310000,7960.84 +1997-08-11,8031.22,8122.27,7922.52,8062.11,480340000,8062.11 +1997-08-08,8170.58,8170.58,7961.07,8031.22,563420000,8031.22 +1997-08-07,8259.31,8340.14,8158.73,8188.00,576030000,8188.00 +1997-08-06,8187.54,8302.05,8130.63,8259.31,565200000,8259.31 +1997-08-05,8198.45,8251.88,8129.93,8187.54,525710000,8187.54 +1997-08-04,8194.04,8261.40,8097.65,8198.45,456000000,8198.45 +1997-08-01,8222.61,8287.65,8062.11,8194.04,513750000,8194.04 +1997-07-31,8254.89,8328.99,8160.36,8222.61,547830000,8222.61 +1997-07-30,8174.53,8313.19,8156.88,8254.89,568470000,8254.89 +1997-07-29,8121.11,8232.36,8049.34,8174.53,544540000,8174.53 +1997-07-28,8113.44,8221.68,8051.89,8121.11,466920000,8121.11 +1997-07-25,8116.93,8200.31,8037.95,8113.44,521510000,8113.44 +1997-07-24,8088.36,8174.53,7968.51,8116.93,571020000,8116.93 +1997-07-23,8061.65,8199.15,8024.95,8088.36,616930000,8088.36 +1997-07-22,7906.72,8093.93,7870.72,8061.65,579590000,8061.65 +1997-07-21,7890.46,7981.51,7783.85,7906.72,459500000,7906.72 +1997-07-18,8020.77,8057.23,7829.61,7890.46,589710000,7890.46 +1997-07-17,8038.88,8136.67,7910.67,8020.77,629250000,8020.77 +1997-07-16,7975.71,8108.10,7919.73,8038.88,647390000,8038.88 +1997-07-15,7922.98,8037.03,7843.78,7975.71,598370000,7975.71 +1997-07-14,7921.82,8001.26,7831.00,7922.98,485960000,7922.98 +1997-07-11,7886.76,7984.02,7837.68,7921.82,500050000,7921.82 +1997-07-10,7842.43,7953.94,7777.06,7886.76,551340000,7886.76 +1997-07-09,7962.31,8027.68,7775.48,7842.43,589110000,7842.43 +1997-07-08,7858.49,8000.08,7824.33,7962.31,526010000,7962.31 +1997-07-07,7895.81,7983.79,7805.34,7858.49,518780000,7858.49 +1997-07-03,7805.79,7952.35,7805.79,7895.81,374680000,7895.81 +1997-07-02,7722.33,7814.38,7648.14,7795.38,526970000,7795.38 +1997-07-01,7672.79,7801.04,7613.53,7722.33,544190000,7722.33 +1997-06-30,7687.72,7768.01,7571.46,7672.79,561540000,7672.79 +1997-06-27,7654.25,7793.12,7627.33,7687.72,472540000,7687.72 +1997-06-26,7689.98,7754.22,7581.64,7654.25,499780000,7654.25 +1997-06-25,7758.06,7832.48,7615.57,7689.98,603040000,7689.98 +1997-06-24,7787.01,7787.01,7602.90,7758.06,542650000,7758.06 +1997-06-23,7796.51,7816.87,7592.04,7604.26,492940000,7604.26 +1997-06-20,7777.06,7868.44,7733.64,7796.51,653110000,7796.51 +1997-06-19,7718.71,7834.51,7697.45,7777.06,536940000,7777.06 +1997-06-18,7760.78,7789.28,7651.30,7718.71,491740000,7718.71 +1997-06-17,7772.09,7834.97,7680.71,7760.78,543010000,7760.78 +1997-06-16,7782.04,7829.99,7712.37,7772.09,414280000,7772.09 +1997-06-13,7711.47,7829.08,7683.42,7782.04,575810000,7782.04 +1997-06-12,7575.83,7741.42,7569.66,7711.47,592730000,7711.47 +1997-06-11,7539.27,7633.96,7476.29,7575.83,513740000,7575.83 +1997-06-10,7478.50,7599.61,7459.12,7539.27,526980000,7539.27 +1997-06-09,7435.78,7548.52,7412.44,7478.50,465810000,7478.50 +1997-06-06,7305.29,7473.98,7290.26,7435.78,488940000,7435.78 +1997-06-05,7269.66,7376.97,7241.33,7305.29,452610000,7305.29 +1997-06-04,7312.15,7350.36,7214.29,7269.66,466690000,7269.66 +1997-06-03,7289.40,7379.98,7225.02,7312.15,527120000,7312.15 +1997-06-02,7331.04,7383.84,7244.76,7289.40,435950000,7289.40 +1997-05-30,7330.18,7385.99,7203.99,7331.04,537200000,7331.04 +1997-05-29,7357.23,7404.44,7272.24,7330.18,462600000,7330.18 +1997-05-28,7383.41,7430.20,7287.26,7357.23,487340000,7357.23 +1997-05-27,7345.91,7421.32,7276.68,7383.41,436150000,7383.41 +1997-05-23,7260.61,7382.58,7260.61,7345.91,417030000,7345.91 +1997-05-22,7290.69,7348.79,7210.33,7258.13,426940000,7258.13 +1997-05-21,7303.46,7385.47,7218.99,7290.69,540730000,7290.69 +1997-05-20,7228.88,7336.02,7123.38,7303.46,450850000,7303.46 +1997-05-19,7194.67,7274.21,7140.69,7228.88,345140000,7228.88 +1997-05-16,7332.31,7332.31,7192.61,7194.67,486780000,7194.67 +1997-05-15,7286.16,7363.63,7225.99,7333.55,458180000,7333.55 +1997-05-14,7274.21,7381.76,7238.35,7286.16,504960000,7286.16 +1997-05-13,7292.75,7350.85,7211.16,7274.21,489760000,7274.21 +1997-05-12,7169.53,7317.47,7156.35,7292.75,459370000,7292.75 +1997-05-09,7136.62,7235.76,7079.63,7169.53,455690000,7169.53 +1997-05-08,7085.65,7236.96,7040.30,7136.62,534120000,7136.62 +1997-05-07,7225.32,7246.60,7064.78,7085.65,500580000,7085.65 +1997-05-06,7213.68,7299.98,7139.43,7225.32,603680000,7225.32 +1997-05-05,7071.20,7220.91,7029.46,7213.68,549410000,7213.68 +1997-05-02,6976.48,7104.51,6935.54,7071.20,499770000,7071.20 +1997-05-01,7008.99,7041.90,6891.39,6976.48,460380000,6976.48 +1997-04-30,6962.03,7081.23,6912.26,7008.99,562830000,7008.99 +1997-04-29,6820.75,6998.15,6820.75,6962.03,547690000,6962.03 +1997-04-28,6738.87,6826.37,6691.51,6783.02,404470000,6783.02 +1997-04-25,6792.25,6826.77,6681.08,6738.87,414350000,6738.87 +1997-04-24,6812.72,6923.90,6742.89,6792.25,493640000,6792.25 +1997-04-23,6833.59,6902.23,6746.50,6812.72,489350000,6812.72 +1997-04-22,6660.21,6858.08,6628.50,6833.59,507500000,6833.59 +1997-04-21,6703.55,6768.17,6594.38,6660.21,397300000,6660.21 +1997-04-18,6658.60,6749.71,6616.46,6703.55,468940000,6703.55 +1997-04-17,6679.87,6750.91,6600.80,6658.60,503760000,6658.60 +1997-04-16,6587.16,6708.77,6506.08,6679.87,498820000,6679.87 +1997-04-15,6457.92,6626.09,6457.92,6587.16,507370000,6587.16 +1997-04-14,6391.69,6487.22,6315.84,6451.90,406800000,6451.90 +1997-04-11,6529.48,6529.48,6358.42,6391.69,444380000,6391.69 +1997-04-10,6563.84,6626.91,6495.48,6540.05,421790000,6540.05 +1997-04-09,6609.16,6662.41,6521.16,6563.84,451500000,6563.84 +1997-04-08,6555.91,6638.62,6491.71,6609.16,450790000,6609.16 +1997-04-07,6526.07,6639.00,6508.70,6555.91,453790000,6555.91 +1997-04-04,6477.35,6561.57,6376.90,6526.07,544580000,6526.07 +1997-04-03,6517.01,6540.43,6379.16,6477.35,498010000,6477.35 +1997-04-02,6611.05,6636.73,6476.60,6517.01,478210000,6517.01 +1997-04-01,6583.48,6667.70,6482.64,6611.05,515770000,6611.05 +1997-03-31,6740.59,6743.23,6532.49,6583.48,555880000,6583.48 +1997-03-27,6880.70,6918.47,6654.86,6740.59,476790000,6740.59 +1997-03-26,6876.17,6954.72,6811.21,6880.70,506670000,6880.70 +1997-03-25,6905.25,6984.94,6832.74,6876.17,487520000,6876.17 +1997-03-24,6804.79,6933.58,6746.63,6905.25,451970000,6905.25 +1997-03-21,6820.28,6890.52,6742.85,6804.79,544830000,6804.79 +1997-03-20,6877.68,6901.47,6765.14,6820.28,497480000,6820.28 +1997-03-19,6896.56,6944.15,6794.22,6877.68,539200000,6877.68 +1997-03-18,6955.48,6997.40,6841.05,6896.56,467490000,6896.56 +1997-03-17,6935.46,7004.20,6820.28,6955.48,495260000,6955.48 +1997-03-14,6878.89,6996.27,6851.19,6935.46,491540000,6935.46 +1997-03-13,7023.59,7023.59,6852.72,6878.89,507560000,6878.89 +1997-03-12,7085.16,7111.72,6988.96,7039.37,490200000,7039.37 +1997-03-11,7079.39,7158.28,7026.28,7085.16,493250000,7085.16 +1997-03-10,7000.89,7103.25,6970.10,7079.39,468780000,7079.39 +1997-03-07,6944.70,7047.07,6927.00,7000.89,508270000,7000.89 +1997-03-06,6945.85,7017.05,6896.60,6944.70,540310000,6944.70 +1997-03-05,6852.72,6966.64,6836.95,6945.85,532500000,6945.85 +1997-03-04,6918.92,6983.95,6814.63,6852.72,537890000,6852.72 +1997-03-03,6877.74,6957.01,6798.46,6918.92,437220000,6918.92 +1997-02-28,6925.07,6978.18,6820.78,6877.74,508280000,6877.74 +1997-02-27,6983.18,7028.59,6885.44,6925.07,467190000,6925.07 +1997-02-26,7037.83,7076.31,6878.12,6983.18,573920000,6983.18 +1997-02-25,7008.20,7099.79,6935.08,7037.83,527450000,7037.83 +1997-02-24,6931.62,7049.76,6868.50,7008.20,462450000,7008.20 +1997-02-21,6927.38,6984.72,6869.27,6931.62,478450000,6931.62 +1997-02-20,7020.13,7035.91,6890.82,6927.38,492220000,6927.38 +1997-02-19,7067.46,7112.87,6980.87,7020.13,519350000,7020.13 +1997-02-18,6988.96,7084.39,6946.62,7067.46,474110000,7067.46 +1997-02-14,7022.44,7074.77,6935.85,6988.96,491540000,6988.96 +1997-02-13,6961.63,7074.39,6924.30,7022.44,593710000,7022.44 +1997-02-12,6858.11,6976.64,6844.26,6961.63,563890000,6961.63 +1997-02-11,6806.54,6887.36,6756.90,6858.11,483090000,6858.11 +1997-02-10,6855.80,6908.14,6771.14,6806.54,471590000,6806.54 +1997-02-07,6773.06,6906.22,6747.28,6855.80,540910000,6855.80 +1997-02-06,6746.90,6821.17,6683.40,6773.06,519660000,6773.06 +1997-02-05,6833.48,6913.14,6704.56,6746.90,580520000,6746.90 +1997-02-04,6806.16,6859.65,6738.43,6833.48,506530000,6833.48 +1997-02-03,6813.09,6858.11,6733.04,6806.16,463600000,6806.16 +1997-01-31,6823.86,6912.37,6769.99,6813.09,578550000,6813.09 +1997-01-30,6740.74,6845.03,6719.96,6823.86,524160000,6823.86 +1997-01-29,6656.08,6766.91,6627.98,6740.74,498390000,6740.74 +1997-01-28,6660.69,6823.48,6612.20,6656.08,541580000,6656.08 +1997-01-27,6696.48,6748.82,6598.73,6660.69,445760000,6660.69 +1997-01-24,6755.75,6798.08,6629.91,6696.48,542920000,6696.48 +1997-01-23,6850.03,6953.55,6724.19,6755.75,685070000,6755.75 +1997-01-22,6883.90,6913.14,6801.16,6850.03,587300000,6850.03 +1997-01-21,6843.87,6934.69,6771.14,6883.90,571280000,6883.90 +1997-01-20,6833.10,6893.13,6777.30,6843.87,440470000,6843.87 +1997-01-17,6765.37,6863.88,6732.66,6833.10,534640000,6833.10 +1997-01-16,6726.88,6818.47,6688.40,6765.37,537290000,6765.37 +1997-01-15,6762.29,6800.77,6669.93,6726.88,524990000,6726.88 +1997-01-14,6709.18,6816.17,6689.94,6762.29,531600000,6762.29 +1997-01-13,6703.79,6773.45,6647.99,6709.18,445400000,6709.18 +1997-01-10,6625.67,6725.35,6530.62,6703.79,545860000,6703.79 +1997-01-09,6549.48,6677.24,6520.23,6625.67,555370000,6625.67 +1997-01-08,6600.66,6650.30,6509.84,6549.48,557510000,6549.48 +1997-01-07,6567.18,6621.82,6481.75,6600.66,538220000,6600.66 +1997-01-06,6544.09,6647.22,6508.30,6567.18,531350000,6567.18 +1997-01-03,6442.49,6586.42,6437.10,6544.09,452970000,6544.09 +1997-01-02,6448.27,6511.38,6318.96,6442.49,463230000,6442.49 +1996-12-31,6549.37,6580.90,6421.74,6448.27,399760000,6448.27 +1996-12-30,6560.91,6623.96,6518.23,6549.37,339060000,6549.37 +1996-12-27,6546.68,6607.81,6510.93,6560.91,253810000,6560.91 +1996-12-26,6522.85,6594.74,6495.94,6546.68,254630000,6546.68 +1996-12-24,6489.02,6546.68,6467.10,6522.85,165140000,6522.85 +1996-12-23,6484.40,6539.76,6428.27,6489.02,343280000,6489.02 +1996-12-20,6473.64,6597.43,6445.19,6484.40,654340000,6484.40 +1996-12-19,6352.15,6499.40,6352.15,6473.64,526410000,6473.64 +1996-12-18,6308.33,6399.06,6272.96,6346.77,500490000,6346.77 +1996-12-17,6268.35,6354.46,6206.83,6308.33,519840000,6308.33 +1996-12-16,6304.87,6388.68,6227.98,6268.35,447560000,6268.35 +1996-12-13,6303.71,6377.14,6227.59,6304.87,458540000,6304.87 +1996-12-12,6402.52,6465.57,6283.72,6303.71,492920000,6303.71 +1996-12-11,6457.88,6457.88,6317.94,6402.52,494210000,6402.52 +1996-12-10,6463.94,6545.56,6427.04,6473.25,446120000,6473.25 +1996-12-09,6381.94,6496.73,6375.98,6463.94,381570000,6463.94 +1996-12-06,6437.10,6441.20,6274.24,6381.94,500860000,6381.94 +1996-12-05,6422.94,6491.14,6363.31,6437.10,483710000,6437.10 +1996-12-04,6442.69,6482.20,6339.46,6422.94,498240000,6422.94 +1996-12-03,6521.70,6577.23,6422.94,6442.69,516160000,6442.69 +1996-12-02,6521.70,6553.01,6439.34,6521.70,412520000,6521.70 +1996-11-29,6499.34,6551.15,6490.40,6521.70,151550000,6521.70 +1996-11-27,6528.41,6566.43,6457.97,6499.34,377780000,6499.34 +1996-11-26,6547.79,6606.30,6475.49,6528.41,527380000,6528.41 +1996-11-25,6471.76,6565.68,6443.44,6547.79,475260000,6547.79 +1996-11-22,6418.47,6498.22,6402.44,6471.76,525210000,6471.76 +1996-11-21,6430.02,6463.56,6370.02,6418.47,464430000,6418.47 +1996-11-20,6397.60,6482.20,6370.02,6430.02,497900000,6430.02 +1996-11-19,6346.91,6428.16,6323.06,6397.60,461980000,6397.60 +1996-11-18,6348.03,6407.66,6297.34,6346.91,388520000,6346.91 +1996-11-15,6313.00,6414.37,6277.22,6348.03,529100000,6348.03 +1996-11-14,6274.24,6350.64,6232.50,6313.00,480350000,6313.00 +1996-11-13,6266.04,6317.10,6206.78,6274.24,429840000,6274.24 +1996-11-12,6255.60,6314.49,6199.70,6266.04,472940000,6266.04 +1996-11-11,6219.82,6292.87,6198.58,6255.60,353960000,6255.60 +1996-11-08,6206.04,6247.40,6151.62,6219.82,402320000,6219.82 +1996-11-07,6177.71,6238.83,6130.38,6206.04,502530000,6206.04 +1996-11-06,6081.18,6200.44,6060.69,6177.71,509600000,6177.71 +1996-11-05,6041.68,6125.53,6029.01,6081.18,492860000,6081.18 +1996-11-04,6021.93,6083.05,5981.30,6041.68,398790000,6041.68 +1996-11-01,6029.38,6082.67,5975.34,6021.93,465510000,6021.93 +1996-10-31,5993.23,6063.67,5955.59,6029.38,488500000,6029.38 +1996-10-30,6007.02,6055.84,5956.71,5993.23,437770000,5993.23 +1996-10-29,5972.73,6054.72,5938.82,6007.02,443890000,6007.02 +1996-10-28,6007.02,6063.67,5952.61,5972.73,383630000,5972.73 +1996-10-25,5992.48,6047.64,5954.47,6007.02,367640000,6007.02 +1996-10-24,6036.46,6080.07,5953.72,5992.48,418970000,5992.48 +1996-10-23,6061.80,6081.93,5965.65,6036.46,442170000,6036.46 +1996-10-22,6090.87,6114.73,6015.59,6061.80,410790000,6061.80 +1996-10-21,6094.23,6162.80,6027.89,6090.87,414630000,6090.87 +1996-10-18,6059.20,6119.57,6011.49,6094.23,473020000,6094.23 +1996-10-17,6020.81,6101.31,5994.72,6059.20,478550000,6059.20 +1996-10-16,6004.78,6056.21,5943.66,6020.81,441410000,6020.81 +1996-10-15,6010.00,6077.83,5951.12,6004.78,458980000,6004.78 +1996-10-14,5969.38,6043.91,5952.61,6010.00,322000000,6010.00 +1996-10-11,5921.67,5999.56,5912.36,5969.38,396050000,5969.38 +1996-10-10,5930.62,5956.71,5876.58,5921.67,394950000,5921.67 +1996-10-09,5966.77,5985.03,5892.23,5930.62,408450000,5930.62 +1996-10-08,5979.81,6032.36,5930.24,5966.77,435070000,5966.77 +1996-10-07,5992.86,6025.28,5945.15,5979.81,380750000,5979.81 +1996-10-04,5932.85,6023.79,5917.20,5992.86,463940000,5992.86 +1996-10-03,5933.97,5972.36,5887.76,5932.85,386500000,5932.85 +1996-10-02,5904.90,5966.02,5888.88,5933.97,440130000,5933.97 +1996-10-01,5882.17,5942.17,5833.72,5904.90,421550000,5904.90 +1996-09-30,5845.18,5934.32,5845.18,5882.17,394260000,5882.17 +1996-09-27,5868.85,5903.99,5819.65,5872.92,414760000,5872.92 +1996-09-26,5877.36,5928.04,5828.90,5868.85,500870000,5868.85 +1996-09-25,5874.03,5928.77,5827.42,5877.36,451710000,5877.36 +1996-09-24,5894.74,5952.08,5831.86,5874.03,460150000,5874.03 +1996-09-23,5888.46,5913.24,5820.39,5894.74,297760000,5894.74 +1996-09-20,5867.74,5925.82,5840.74,5888.46,519420000,5888.46 +1996-09-19,5877.36,5908.80,5818.17,5867.74,398580000,5867.74 +1996-09-18,5888.83,5919.90,5838.15,5877.36,396600000,5877.36 +1996-09-17,5889.20,5929.51,5830.38,5888.83,449850000,5888.83 +1996-09-16,5838.52,5920.64,5823.72,5889.20,430080000,5889.20 +1996-09-13,5786.73,5871.44,5786.73,5838.52,488360000,5838.52 +1996-09-12,5754.92,5815.59,5739.76,5771.94,398820000,5771.94 +1996-09-11,5727.18,5777.49,5696.85,5754.92,376880000,5754.92 +1996-09-10,5733.84,5767.87,5681.68,5727.18,372960000,5727.18 +1996-09-09,5662.08,5756.40,5662.08,5733.84,311530000,5733.84 +1996-09-06,5606.96,5696.48,5585.51,5659.86,348710000,5659.86 +1996-09-05,5656.90,5669.47,5592.53,5606.96,361430000,5606.96 +1996-09-04,5648.39,5682.05,5608.81,5656.90,351290000,5656.90 +1996-09-03,5616.21,5667.99,5550.37,5648.39,345740000,5648.39 +1996-08-30,5647.65,5659.86,5571.45,5616.21,258380000,5616.21 +1996-08-29,5712.38,5716.82,5615.47,5647.65,321120000,5647.65 +1996-08-28,5711.27,5747.89,5678.72,5712.38,296440000,5712.38 +1996-08-27,5693.89,5735.32,5670.58,5711.27,310520000,5711.27 +1996-08-26,5722.74,5742.71,5665.41,5693.89,281430000,5693.89 +1996-08-23,5733.47,5761.58,5679.09,5722.74,308010000,5722.74 +1996-08-22,5689.82,5761.95,5662.45,5733.47,354950000,5733.47 +1996-08-21,5721.26,5734.95,5648.76,5689.82,348820000,5689.82 +1996-08-20,5699.44,5747.52,5670.21,5721.26,334960000,5721.26 +1996-08-19,5689.45,5728.66,5664.30,5699.44,294080000,5699.44 +1996-08-16,5665.78,5722.74,5646.54,5689.45,337650000,5689.45 +1996-08-15,5666.88,5701.66,5633.22,5665.78,323950000,5665.78 +1996-08-14,5647.28,5695.00,5614.36,5666.88,343470000,5666.88 +1996-08-13,5618.06,5713.86,5618.06,5647.28,362470000,5647.28 +1996-08-12,5681.31,5746.04,5625.83,5704.98,312170000,5704.98 +1996-08-09,5713.49,5747.15,5654.31,5681.31,327280000,5681.31 +1996-08-08,5718.67,5746.41,5661.34,5713.49,334570000,5713.49 +1996-08-07,5696.11,5754.55,5659.12,5718.67,394340000,5718.67 +1996-08-06,5674.28,5716.45,5630.26,5696.11,347290000,5696.11 +1996-08-05,5679.83,5719.04,5639.14,5674.28,307240000,5674.28 +1996-08-02,5601.41,5703.51,5601.41,5679.83,442080000,5679.83 +1996-08-01,5528.91,5628.79,5507.83,5594.75,439110000,5594.75 +1996-07-31,5481.93,5558.13,5460.48,5528.91,403560000,5528.91 +1996-07-30,5434.59,5503.73,5403.52,5481.93,341090000,5481.93 +1996-07-29,5473.06,5497.47,5414.61,5434.59,281560000,5434.59 +1996-07-26,5422.01,5503.02,5397.97,5473.06,349900000,5473.06 +1996-07-25,5355.80,5469.36,5355.80,5422.01,405390000,5422.01 +1996-07-24,5346.55,5402.04,5244.83,5354.69,463030000,5354.69 +1996-07-23,5390.94,5447.90,5313.63,5346.55,421900000,5346.55 +1996-07-22,5426.82,5446.05,5346.92,5390.94,327300000,5390.94 +1996-07-19,5464.18,5490.44,5393.53,5426.82,408070000,5426.82 +1996-07-18,5376.88,5500.43,5352.10,5464.18,474460000,5464.18 +1996-07-17,5358.76,5465.29,5325.10,5376.88,513830000,5376.88 +1996-07-16,5349.51,5438.66,5170.11,5358.76,68290000,5358.76 +1996-07-15,5510.56,5527.93,5326.98,5349.51,419020000,5349.51 +1996-07-12,5520.54,5562.65,5455.16,5510.56,397790000,5510.56 +1996-07-11,5600.33,5600.33,5447.77,5520.54,520470000,5520.54 +1996-07-10,5581.86,5628.03,5515.00,5603.65,421350000,5603.65 +1996-07-09,5550.83,5622.49,5540.12,5581.86,379200000,5581.86 +1996-07-08,5588.14,5622.12,5519.80,5550.83,367560000,5550.83 +1996-07-05,5657.58,5657.58,5570.77,5588.14,181470000,5588.14 +1996-07-03,5720.38,5749.93,5656.47,5703.02,336260000,5703.02 +1996-07-02,5729.98,5769.88,5668.29,5720.38,388000000,5720.38 +1996-07-01,5654.63,5749.19,5637.26,5729.98,345750000,5729.98 +1996-06-28,5677.53,5724.44,5625.81,5654.63,470460000,5654.63 +1996-06-27,5682.70,5715.21,5616.21,5677.53,405580000,5677.53 +1996-06-26,5719.27,5739.22,5652.04,5682.70,386520000,5682.70 +1996-06-25,5717.79,5760.27,5668.66,5719.27,391900000,5719.27 +1996-06-24,5705.23,5770.61,5688.61,5717.79,333840000,5717.79 +1996-06-21,5659.43,5722.22,5639.11,5705.23,520340000,5705.23 +1996-06-20,5648.35,5709.30,5606.97,5659.43,441060000,5659.43 +1996-06-19,5628.03,5693.78,5600.70,5648.35,383610000,5648.35 +1996-06-18,5652.78,5683.44,5607.71,5628.03,373290000,5628.03 +1996-06-17,5649.45,5689.72,5614.36,5652.78,298410000,5652.78 +1996-06-14,5657.95,5687.13,5609.93,5649.45,390630000,5649.45 +1996-06-13,5668.29,5714.84,5622.86,5657.95,397620000,5657.95 +1996-06-12,5668.66,5725.55,5637.63,5668.29,397190000,5668.29 +1996-06-11,5687.87,5747.71,5637.63,5668.66,405390000,5668.66 +1996-06-10,5697.11,5727.03,5643.54,5687.87,337480000,5687.87 +1996-06-07,5667.19,5708.93,5559.69,5697.11,445710000,5697.11 +1996-06-06,5697.48,5750.67,5639.48,5667.19,464800000,5667.19 +1996-06-05,5665.71,5718.53,5631.35,5697.48,380360000,5697.48 +1996-06-04,5624.71,5697.84,5616.58,5665.71,386040000,5665.71 +1996-06-03,5643.18,5662.75,5587.40,5624.71,318470000,5624.71 +1996-05-31,5693.41,5712.62,5614.36,5643.18,351750000,5643.18 +1996-05-30,5673.83,5734.41,5625.07,5693.41,381960000,5693.41 +1996-05-29,5709.67,5743.65,5632.46,5673.83,346730000,5673.83 +1996-05-28,5762.86,5798.69,5680.48,5709.67,341480000,5709.67 +1996-05-24,5762.12,5815.68,5722.59,5762.86,329150000,5762.86 +1996-05-23,5778.00,5833.04,5704.12,5762.12,431850000,5762.12 +1996-05-22,5736.26,5803.49,5687.87,5778.00,423670000,5778.00 +1996-05-21,5748.82,5794.63,5698.21,5736.26,409610000,5736.26 +1996-05-20,5687.50,5778.74,5657.58,5748.82,385000000,5748.82 +1996-05-17,5635.05,5729.61,5631.35,5687.50,429140000,5687.50 +1996-05-16,5625.44,5677.53,5577.42,5635.05,392070000,5635.05 +1996-05-15,5624.71,5691.57,5590.72,5625.44,447790000,5625.44 +1996-05-14,5582.60,5663.12,5566.71,5624.71,460440000,5624.71 +1996-05-13,5518.14,5601.80,5495.42,5582.60,394180000,5582.60 +1996-05-10,5478.03,5559.68,5478.03,5518.14,428370000,5518.14 +1996-05-09,5474.06,5534.76,5419.87,5475.14,404310000,5475.14 +1996-05-08,5420.95,5486.34,5327.74,5474.06,495460000,5474.06 +1996-05-07,5464.31,5486.34,5392.05,5420.95,410770000,5420.95 +1996-05-06,5478.03,5528.97,5397.83,5464.31,375820000,5464.31 +1996-05-03,5498.27,5555.71,5439.74,5478.03,434010000,5478.03 +1996-05-02,5575.22,5578.11,5455.27,5498.27,442960000,5498.27 +1996-05-01,5569.08,5619.29,5523.56,5575.22,404620000,5575.22 +1996-04-30,5573.41,5606.29,5522.83,5569.08,393390000,5569.08 +1996-04-29,5567.99,5611.71,5515.25,5573.41,344030000,5573.41 +1996-04-26,5566.91,5618.57,5517.78,5567.99,402530000,5567.99 +1996-04-25,5553.90,5601.23,5490.68,5566.91,461120000,5566.91 +1996-04-24,5588.59,5619.29,5512.36,5553.90,494220000,5553.90 +1996-04-23,5564.74,5621.82,5534.76,5588.59,452690000,5588.59 +1996-04-22,5535.48,5610.62,5516.33,5564.74,397460000,5564.74 +1996-04-19,5551.74,5593.64,5504.41,5535.48,435690000,5535.48 +1996-04-18,5549.93,5600.51,5493.93,5551.74,415150000,5551.74 +1996-04-17,5620.02,5653.25,5500.07,5549.93,465200000,5549.93 +1996-04-16,5592.92,5656.14,5554.99,5620.02,453310000,5620.02 +1996-04-15,5532.59,5614.60,5517.41,5592.92,346370000,5592.92 +1996-04-12,5487.07,5577.39,5445.16,5532.59,413270000,5532.59 +1996-04-11,5485.98,5540.17,5382.66,5487.07,519710000,5487.07 +1996-04-10,5560.41,5601.23,5452.02,5485.98,475150000,5485.98 +1996-04-09,5594.37,5644.58,5530.06,5560.41,426790000,5560.41 +1996-04-08,5624.71,5624.71,5518.14,5594.37,411810000,5594.37 +1996-04-04,5689.74,5737.07,5633.02,5682.88,383400000,5682.88 +1996-04-03,5671.68,5712.50,5619.29,5689.74,386620000,5689.74 +1996-04-02,5637.72,5706.72,5597.26,5671.68,406640000,5671.68 +1996-04-01,5587.14,5670.23,5562.57,5637.72,392120000,5637.72 +1996-03-29,5630.85,5682.88,5550.29,5587.14,413510000,5587.14 +1996-03-28,5626.88,5664.45,5564.74,5630.85,370750000,5630.85 +1996-03-27,5670.60,5703.47,5596.53,5626.88,406280000,5626.88 +1996-03-26,5643.86,5701.30,5595.81,5670.60,400090000,5670.60 +1996-03-25,5636.64,5712.14,5592.92,5643.86,336700000,5643.86 +1996-03-22,5626.88,5681.07,5589.67,5636.64,329390000,5636.64 +1996-03-21,5655.42,5696.25,5590.03,5626.88,367180000,5626.88 +1996-03-20,5669.51,5724.06,5590.39,5655.42,409780000,5655.42 +1996-03-19,5683.60,5755.86,5619.66,5669.51,438300000,5669.51 +1996-03-18,5584.97,5706.00,5573.41,5683.60,437100000,5683.60 +1996-03-15,5586.06,5628.69,5523.56,5584.97,529970000,5584.97 +1996-03-14,5568.72,5662.29,5536.56,5586.06,492630000,5586.06 +1996-03-13,5583.89,5626.52,5513.80,5568.72,413030000,5568.72 +1996-03-12,5581.00,5622.55,5464.67,5583.89,454980000,5583.89 +1996-03-11,5470.45,5605.20,5425.29,5581.00,449500000,5581.00 +1996-03-08,5612.79,5612.79,5395.30,5470.45,546550000,5470.45 +1996-03-07,5629.77,5667.34,5572.33,5641.69,425790000,5641.69 +1996-03-06,5642.42,5700.22,5585.70,5629.77,428220000,5629.77 +1996-03-05,5600.15,5655.78,5558.24,5642.42,445700000,5642.42 +1996-03-04,5536.56,5646.39,5511.99,5600.15,417270000,5600.15 +1996-03-01,5485.62,5573.41,5424.20,5536.56,471480000,5536.56 +1996-02-29,5506.21,5562.21,5440.46,5485.62,453170000,5485.62 +1996-02-28,5549.21,5625.07,5487.07,5506.21,447790000,5506.21 +1996-02-27,5565.10,5597.26,5478.76,5549.21,431340000,5549.21 +1996-02-26,5630.49,5647.83,5530.42,5565.10,399330000,5565.10 +1996-02-23,5608.46,5693.36,5546.32,5630.49,443130000,5630.49 +1996-02-22,5515.97,5638.44,5511.63,5608.46,494750000,5608.46 +1996-02-21,5458.53,5548.12,5440.82,5515.97,431220000,5515.97 +1996-02-20,5503.32,5515.97,5393.50,5458.53,395910000,5458.53 +1996-02-16,5551.37,5563.30,5470.45,5503.32,445570000,5503.32 +1996-02-15,5579.55,5623.27,5514.88,5551.37,415320000,5551.37 +1996-02-14,5601.23,5633.02,5534.39,5579.55,421790000,5579.55 +1996-02-13,5600.15,5644.94,5530.06,5601.23,441540000,5601.23 +1996-02-12,5541.62,5643.50,5531.14,5600.15,401490000,5600.15 +1996-02-09,5539.45,5603.76,5474.06,5541.62,477640000,5541.62 +1996-02-08,5492.12,5559.68,5441.55,5539.45,474970000,5539.45 +1996-02-07,5459.61,5520.30,5423.84,5492.12,462730000,5492.12 +1996-02-06,5407.59,5483.82,5371.82,5459.61,465940000,5459.61 +1996-02-05,5373.99,5433.96,5319.43,5407.59,377760000,5407.59 +1996-02-02,5405.06,5442.99,5338.94,5373.99,420020000,5373.99