From 1431cf7e1be13c15ce53ba2f294b0f77d0fa792f Mon Sep 17 00:00:00 2001 From: declerambaul Date: Tue, 24 Apr 2012 12:58:53 -0400 Subject: [PATCH] New version of d3 (2.8.1) to vendor libraries. Added d3 to modules.yaml. Implemented simple geolocation map for enwp, data is stored in /data/geo. --- data/geo/data/en_geo_editors.json | 1 + data/geo/data/en_geo_editors.tsv | 205 + data/geo/maps/world-countries.json | 28 +- lib/main-geo.co | 143 +- lib/server/server.co | 2 +- static/vendor/d3 | 1 - static/vendor/d3-2.8.1/.gitignore | 3 + static/vendor/d3-2.8.1/.npmignore | 4 + static/vendor/d3-2.8.1/LICENSE | 26 + static/vendor/d3-2.8.1/Makefile | 239 + static/vendor/d3-2.8.1/README.md | 51 + static/vendor/d3-2.8.1/d3.v2.js | 9342 ++++++++++++++++++++ static/vendor/d3-2.8.1/d3.v2.min.js | 4 + static/vendor/d3-2.8.1/examples/albers/albers.html | 167 + .../vendor/d3-2.8.1/examples/area/area-radial.html | 48 + static/vendor/d3-2.8.1/examples/area/area.html | 113 + .../d3-2.8.1/examples/axis/axis-alternating.html | 50 + .../examples/axis/axis-explicit-ticks.html | 46 + .../d3-2.8.1/examples/axis/axis-ggplot2.html | 68 + .../d3-2.8.1/examples/axis/axis-multiples.html | 115 + .../d3-2.8.1/examples/axis/axis-orientations.html | 62 + .../d3-2.8.1/examples/axis/axis-transition.html | 151 + .../d3-2.8.1/examples/azimuthal/azimuthal.css | 21 + .../d3-2.8.1/examples/azimuthal/azimuthal.html | 98 + .../d3-2.8.1/examples/azimuthal/azimuthal.js | 29 + .../d3-2.8.1/examples/bar/bar-hierarchy.html | 222 + static/vendor/d3-2.8.1/examples/bar/bar.html | 100 + .../vendor/d3-2.8.1/examples/bar/sample-data.csv | 53 + static/vendor/d3-2.8.1/examples/bonne/bonne.html | 158 + static/vendor/d3-2.8.1/examples/box/box.css | 4 + static/vendor/d3-2.8.1/examples/box/box.html | 17 + static/vendor/d3-2.8.1/examples/box/box.js | 366 + .../d3-2.8.1/examples/brush/brush-ordinal.html | 92 + .../d3-2.8.1/examples/brush/brush-x-resizer.html | 108 + static/vendor/d3-2.8.1/examples/brush/brush-x.html | 92 + static/vendor/d3-2.8.1/examples/brush/brush-y.html | 91 + static/vendor/d3-2.8.1/examples/brush/brush.html | 98 + static/vendor/d3-2.8.1/examples/bubble/bubble.css | 8 + static/vendor/d3-2.8.1/examples/bubble/bubble.html | 13 + static/vendor/d3-2.8.1/examples/bubble/bubble.js | 46 + static/vendor/d3-2.8.1/examples/bullet/bullet.css | 10 + static/vendor/d3-2.8.1/examples/bullet/bullet.html | 17 + static/vendor/d3-2.8.1/examples/bullet/bullet.js | 291 + .../vendor/d3-2.8.1/examples/bullet/bullets.json | 7 + .../d3-2.8.1/examples/bundle/bundle-radial.css | 9 + .../d3-2.8.1/examples/bundle/bundle-radial.html | 14 + .../d3-2.8.1/examples/bundle/bundle-radial.js | 50 + .../d3-2.8.1/examples/bundle/bundle-treemap.css | 14 + .../d3-2.8.1/examples/bundle/bundle-treemap.html | 15 + .../d3-2.8.1/examples/bundle/bundle-treemap.js | 53 + static/vendor/d3-2.8.1/examples/bundle/packages.js | 49 + static/vendor/d3-2.8.1/examples/button.css | 35 + .../vendor/d3-2.8.1/examples/calendar/calendar.css | 15 + .../d3-2.8.1/examples/calendar/dji-area.html | 118 + static/vendor/d3-2.8.1/examples/calendar/dji.csv | 5233 +++++++++++ static/vendor/d3-2.8.1/examples/calendar/dji.html | 13 + static/vendor/d3-2.8.1/examples/calendar/dji.js | 69 + static/vendor/d3-2.8.1/examples/calendar/vix.csv | 5231 +++++++++++ static/vendor/d3-2.8.1/examples/calendar/vix.html | 13 + static/vendor/d3-2.8.1/examples/calendar/vix.js | 69 + .../d3-2.8.1/examples/cartogram/cartogram.css | 20 + .../d3-2.8.1/examples/cartogram/cartogram.html | 13 + .../d3-2.8.1/examples/cartogram/cartogram.js | 51 + .../vendor/d3-2.8.1/examples/cartogram/demers.css | 9 + .../vendor/d3-2.8.1/examples/cartogram/demers.html | 13 + .../vendor/d3-2.8.1/examples/cartogram/demers.js | 79 + .../vendor/d3-2.8.1/examples/cartogram/dorling.css | 9 + .../d3-2.8.1/examples/cartogram/dorling.html | 13 + .../vendor/d3-2.8.1/examples/cartogram/dorling.js | 80 + .../d3-2.8.1/examples/chord/chord-flare.html | 108 + static/vendor/d3-2.8.1/examples/chord/chord.css | 9 + static/vendor/d3-2.8.1/examples/chord/chord.html | 13 + static/vendor/d3-2.8.1/examples/chord/chord.js | 98 + .../examples/choropleth/choropleth-area.html | 50 + .../examples/choropleth/choropleth-bounds.html | 56 + .../d3-2.8.1/examples/choropleth/choropleth.css | 16 + .../d3-2.8.1/examples/choropleth/choropleth.html | 14 + .../d3-2.8.1/examples/choropleth/choropleth.js | 38 + .../d3-2.8.1/examples/choropleth/unemployment.json | 1 + static/vendor/d3-2.8.1/examples/clock/clock.css | 23 + static/vendor/d3-2.8.1/examples/clock/clock.html | 16 + static/vendor/d3-2.8.1/examples/clock/clock.js | 87 + .../d3-2.8.1/examples/cluster/cluster-radial.html | 13 + .../d3-2.8.1/examples/cluster/cluster-radial.js | 39 + .../vendor/d3-2.8.1/examples/cluster/cluster.css | 15 + .../vendor/d3-2.8.1/examples/cluster/cluster.html | 13 + static/vendor/d3-2.8.1/examples/cluster/cluster.js | 39 + .../vendor/d3-2.8.1/examples/contour/contour.html | 107 + .../examples/crimea/crimea-stacked-area.html | 106 + .../examples/crimea/crimea-stacked-bar.html | 95 + static/vendor/d3-2.8.1/examples/crimea/crimea.csv | 24 + static/vendor/d3-2.8.1/examples/custom/custom.html | 83 + static/vendor/d3-2.8.1/examples/data/README.md | 13 + static/vendor/d3-2.8.1/examples/data/faithful.json | 8 + .../d3-2.8.1/examples/data/flare-imports.json | 222 + static/vendor/d3-2.8.1/examples/data/flare.json | 380 + static/vendor/d3-2.8.1/examples/data/morley.csv | 101 + static/vendor/d3-2.8.1/examples/data/sample.csv | 2 + static/vendor/d3-2.8.1/examples/data/sample.html | 5 + static/vendor/d3-2.8.1/examples/data/sample.json | 1 + static/vendor/d3-2.8.1/examples/data/sample.txt | 1 + static/vendor/d3-2.8.1/examples/data/sample.xml | 4 + static/vendor/d3-2.8.1/examples/data/stocks.csv | 807 ++ .../vendor/d3-2.8.1/examples/data/unemployment.csv | 1709 ++++ .../vendor/d3-2.8.1/examples/data/us-borders.json | 1 + .../vendor/d3-2.8.1/examples/data/us-counties.json | 3216 +++++++ .../d3-2.8.1/examples/data/us-state-centroids.json | 54 + .../vendor/d3-2.8.1/examples/data/us-states.json | 54 + .../d3-2.8.1/examples/data/world-countries.json | 179 + .../d3-2.8.1/examples/delaunay/delaunay.html | 43 + static/vendor/d3-2.8.1/examples/donut/donut.html | 123 + static/vendor/d3-2.8.1/examples/dot/dot.html | 103 + static/vendor/d3-2.8.1/examples/drag/drag.html | 44 + static/vendor/d3-2.8.1/examples/force/README | 10 + .../d3-2.8.1/examples/force/force-bounds.html | 68 + .../d3-2.8.1/examples/force/force-cluster.html | 247 + .../d3-2.8.1/examples/force/force-collapsible.html | 142 + .../d3-2.8.1/examples/force/force-dynamic.html | 116 + .../vendor/d3-2.8.1/examples/force/force-html.html | 93 + .../vendor/d3-2.8.1/examples/force/force-map.html | 101 + .../d3-2.8.1/examples/force/force-multi-foci.html | 66 + static/vendor/d3-2.8.1/examples/force/force.css | 9 + static/vendor/d3-2.8.1/examples/force/force.html | 12 + static/vendor/d3-2.8.1/examples/force/force.js | 47 + .../vendor/d3-2.8.1/examples/force/miserables.json | 1 + .../d3-2.8.1/examples/great-arc/great-arc.html | 77 + .../examples/hello-world/hello-data-key.html | 60 + .../hello-world/hello-data-nested-key.html | 75 + .../examples/hello-world/hello-data-nested.html | 77 + .../d3-2.8.1/examples/hello-world/hello-data.html | 46 + .../d3-2.8.1/examples/hello-world/hello-event.html | 53 + .../examples/hello-world/hello-node-key.html | 25 + .../d3-2.8.1/examples/hello-world/hello-order.html | 25 + .../d3-2.8.1/examples/hello-world/hello-sort.html | 75 + .../examples/hello-world/hello-transform.html | 41 + .../hello-world/hello-transition-undefined.html | 43 + .../examples/hello-world/hello-transition.html | 47 + .../hello-world/hello-webkit-transition.html | 64 + .../examples/hello-world/select-enter-add.html | 29 + .../examples/hello-world/selectAll-enter-add.html | 20 + .../d3-2.8.1/examples/histogram/histogram-chart.js | 83 + .../d3-2.8.1/examples/histogram/histogram.html | 42 + .../vendor/d3-2.8.1/examples/horizon/horizon.css | 9 + .../vendor/d3-2.8.1/examples/horizon/horizon.html | 24 + static/vendor/d3-2.8.1/examples/horizon/horizon.js | 246 + .../d3-2.8.1/examples/horizon/unemployment.json | 1 + static/vendor/d3-2.8.1/examples/hull/hull.html | 74 + static/vendor/d3-2.8.1/examples/kde/kde.css | 9 + static/vendor/d3-2.8.1/examples/kde/kde.html | 13 + static/vendor/d3-2.8.1/examples/kde/kde.js | 40 + static/vendor/d3-2.8.1/examples/line/line.css | 22 + static/vendor/d3-2.8.1/examples/line/line.html | 11 + static/vendor/d3-2.8.1/examples/line/line.js | 63 + .../d3-2.8.1/examples/marimekko/marimekko.html | 115 + .../d3-2.8.1/examples/marimekko/marimekko.json | 18 + static/vendor/d3-2.8.1/examples/marker/marker.html | 167 + .../mercator/mercator-zoom-constrained.html | 71 + .../d3-2.8.1/examples/mercator/mercator-zoom.html | 66 + .../d3-2.8.1/examples/mercator/mercator.html | 132 + static/vendor/d3-2.8.1/examples/moire/moire.html | 53 + .../vendor/d3-2.8.1/examples/mouse/mouse-html.html | 24 + .../d3-2.8.1/examples/node-canvas/us-counties.js | 68 + static/vendor/d3-2.8.1/examples/pack/pack.css | 15 + static/vendor/d3-2.8.1/examples/pack/pack.html | 13 + static/vendor/d3-2.8.1/examples/pack/pack.js | 33 + static/vendor/d3-2.8.1/examples/parallel/cars.csv | 407 + .../d3-2.8.1/examples/parallel/parallel.html | 133 + .../examples/partition/partition-icicle-zoom.html | 58 + .../examples/partition/partition-icicle.html | 44 + .../partition/partition-sunburst-zoom.html | 71 + .../examples/partition/partition-sunburst.html | 20 + .../examples/partition/partition-sunburst.js | 72 + .../d3-2.8.1/examples/pie/pie-transition.html | 68 + static/vendor/d3-2.8.1/examples/pie/pie.html | 50 + .../d3-2.8.1/examples/population/population.css | 28 + .../d3-2.8.1/examples/population/population.csv | 571 ++ .../d3-2.8.1/examples/population/population.html | 12 + .../d3-2.8.1/examples/population/population.js | 126 + static/vendor/d3-2.8.1/examples/qq/qq.css | 18 + static/vendor/d3-2.8.1/examples/qq/qq.html | 20 + static/vendor/d3-2.8.1/examples/qq/qq.js | 310 + static/vendor/d3-2.8.1/examples/qq/stats.js | 28 + static/vendor/d3-2.8.1/examples/qq/turkers.json | 1 + .../d3-2.8.1/examples/quadtree/quadtree.html | 113 + static/vendor/d3-2.8.1/examples/rollup/rollup.html | 249 + .../d3-2.8.1/examples/showreel/showreel.html | 656 ++ static/vendor/d3-2.8.1/examples/sizzle/sizzle.html | 27 + static/vendor/d3-2.8.1/examples/sort/sort.css | 4 + static/vendor/d3-2.8.1/examples/sort/sort.html | 12 + static/vendor/d3-2.8.1/examples/sort/sort.js | 112 + static/vendor/d3-2.8.1/examples/spline/spline.css | 30 + static/vendor/d3-2.8.1/examples/spline/spline.html | 14 + static/vendor/d3-2.8.1/examples/spline/spline.js | 110 + static/vendor/d3-2.8.1/examples/splom/flowers.json | 1 + static/vendor/d3-2.8.1/examples/splom/splom.css | 49 + static/vendor/d3-2.8.1/examples/splom/splom.html | 13 + static/vendor/d3-2.8.1/examples/splom/splom.js | 119 + static/vendor/d3-2.8.1/examples/stream/stack.css | 7 + static/vendor/d3-2.8.1/examples/stream/stack.html | 21 + static/vendor/d3-2.8.1/examples/stream/stack.js | 119 + static/vendor/d3-2.8.1/examples/stream/stream.css | 3 + static/vendor/d3-2.8.1/examples/stream/stream.html | 18 + static/vendor/d3-2.8.1/examples/stream/stream.js | 42 + .../d3-2.8.1/examples/stream/stream_layers.js | 33 + .../vendor/d3-2.8.1/examples/superformula/dot.html | 104 + .../d3-2.8.1/examples/superformula/explorer.html | 120 + .../examples/superformula/superformula.html | 70 + .../d3-2.8.1/examples/superformula/superformula.js | 98 + .../d3-2.8.1/examples/symbol-map/symbol-map.html | 66 + static/vendor/d3-2.8.1/examples/touch/touch.html | 65 + .../vendor/d3-2.8.1/examples/transform/test.html | 85 + .../d3-2.8.1/examples/transform/transform.html | 60 + .../d3-2.8.1/examples/tree/tree-dynamic.html | 103 + .../d3-2.8.1/examples/tree/tree-interactive.html | 168 + .../vendor/d3-2.8.1/examples/tree/tree-radial.html | 13 + .../vendor/d3-2.8.1/examples/tree/tree-radial.js | 40 + static/vendor/d3-2.8.1/examples/tree/tree.css | 15 + static/vendor/d3-2.8.1/examples/tree/tree.html | 13 + static/vendor/d3-2.8.1/examples/tree/tree.js | 39 + .../d3-2.8.1/examples/treemap/treemap-svg.html | 21 + .../d3-2.8.1/examples/treemap/treemap-svg.js | 34 + .../vendor/d3-2.8.1/examples/treemap/treemap.css | 8 + .../vendor/d3-2.8.1/examples/treemap/treemap.html | 21 + static/vendor/d3-2.8.1/examples/treemap/treemap.js | 53 + static/vendor/d3-2.8.1/examples/voroboids/boid.js | 235 + .../d3-2.8.1/examples/voroboids/voroboids.css | 15 + .../d3-2.8.1/examples/voroboids/voroboids.html | 13 + .../d3-2.8.1/examples/voroboids/voroboids.js | 65 + .../vendor/d3-2.8.1/examples/voronoi/voronoi.css | 16 + .../vendor/d3-2.8.1/examples/voronoi/voronoi.html | 14 + static/vendor/d3-2.8.1/examples/voronoi/voronoi.js | 34 + .../examples/zoom-pan/zoom-pan-transform.html | 62 + .../d3-2.8.1/examples/zoom-pan/zoom-pan.html | 73 + static/vendor/d3-2.8.1/examples/zoom/sp500.csv | 124 + static/vendor/d3-2.8.1/examples/zoom/zoom.html | 129 + static/vendor/d3-2.8.1/index.js | 21 + static/vendor/d3-2.8.1/lib/colorbrewer/LICENSE | 38 + .../d3-2.8.1/lib/colorbrewer/colorbrewer.css | 1327 +++ .../vendor/d3-2.8.1/lib/colorbrewer/colorbrewer.js | 32 + static/vendor/d3-2.8.1/lib/jit/LICENSE | 27 + static/vendor/d3-2.8.1/lib/jquery-ui/LICENSE | 25 + .../ui-bg_diagonals-thick_18_b81900_40x40.png | Bin 0 -> 260 bytes .../ui-bg_diagonals-thick_20_666666_40x40.png | Bin 0 -> 251 bytes .../images/ui-bg_flat_10_000000_40x100.png | Bin 0 -> 178 bytes .../images/ui-bg_glass_100_f6f6f6_1x400.png | Bin 0 -> 104 bytes .../images/ui-bg_glass_100_fdf5ce_1x400.png | Bin 0 -> 125 bytes .../images/ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 105 bytes .../images/ui-bg_gloss-wave_35_f6a828_500x100.png | Bin 0 -> 3762 bytes .../ui-bg_highlight-soft_100_eeeeee_1x100.png | Bin 0 -> 90 bytes .../ui-bg_highlight-soft_75_ffe45c_1x100.png | Bin 0 -> 129 bytes .../jquery-ui/images/ui-icons_222222_256x240.png | Bin 0 -> 4369 bytes .../jquery-ui/images/ui-icons_228ef1_256x240.png | Bin 0 -> 4369 bytes .../jquery-ui/images/ui-icons_ef8c08_256x240.png | Bin 0 -> 4369 bytes .../jquery-ui/images/ui-icons_ffd27a_256x240.png | Bin 0 -> 4369 bytes .../jquery-ui/images/ui-icons_ffffff_256x240.png | Bin 0 -> 4369 bytes static/vendor/d3-2.8.1/lib/jquery-ui/jquery-ui.css | 318 + .../vendor/d3-2.8.1/lib/jquery-ui/jquery-ui.min.js | 83 + static/vendor/d3-2.8.1/lib/jquery/LICENSE | 20 + static/vendor/d3-2.8.1/lib/jquery/jquery.js | 6883 ++++++++++++++ static/vendor/d3-2.8.1/lib/jquery/jquery.min.js | 166 + static/vendor/d3-2.8.1/lib/polymaps/LICENSE | 28 + static/vendor/d3-2.8.1/lib/protovis/LICENSE | 27 + static/vendor/d3-2.8.1/lib/science/LICENSE | 26 + static/vendor/d3-2.8.1/lib/science/science.js | 225 + static/vendor/d3-2.8.1/lib/science/science.lin.js | 27 + .../vendor/d3-2.8.1/lib/science/science.lin.min.js | 1 + static/vendor/d3-2.8.1/lib/science/science.min.js | 1 + .../vendor/d3-2.8.1/lib/science/science.stats.js | 720 ++ .../d3-2.8.1/lib/science/science.stats.min.js | 1 + static/vendor/d3-2.8.1/lib/sizzle/LICENSE | 24 + static/vendor/d3-2.8.1/lib/sizzle/sizzle.js | 1376 +++ static/vendor/d3-2.8.1/lib/sizzle/sizzle.min.js | 28 + static/vendor/d3-2.8.1/package.json | 33 + static/vendor/d3-2.8.1/src/behavior/behavior.js | 1 + static/vendor/d3-2.8.1/src/behavior/drag.js | 84 + static/vendor/d3-2.8.1/src/behavior/zoom.js | 195 + static/vendor/d3-2.8.1/src/compat/date.js | 3 + static/vendor/d3-2.8.1/src/compat/style.js | 9 + static/vendor/d3-2.8.1/src/core/array.js | 29 + static/vendor/d3-2.8.1/src/core/ascending.js | 3 + static/vendor/d3-2.8.1/src/core/bisect.js | 28 + static/vendor/d3-2.8.1/src/core/class.js | 12 + static/vendor/d3-2.8.1/src/core/collapse.js | 3 + static/vendor/d3-2.8.1/src/core/core.js | 1 + static/vendor/d3-2.8.1/src/core/descending.js | 3 + static/vendor/d3-2.8.1/src/core/dispatch.js | 60 + static/vendor/d3-2.8.1/src/core/ease.js | 131 + static/vendor/d3-2.8.1/src/core/entries.js | 5 + static/vendor/d3-2.8.1/src/core/event.js | 49 + static/vendor/d3-2.8.1/src/core/extent.js | 21 + static/vendor/d3-2.8.1/src/core/first.js | 13 + static/vendor/d3-2.8.1/src/core/format.js | 100 + static/vendor/d3-2.8.1/src/core/formatPrefix.js | 20 + static/vendor/d3-2.8.1/src/core/functor.js | 3 + static/vendor/d3-2.8.1/src/core/hsl.js | 63 + static/vendor/d3-2.8.1/src/core/html.js | 10 + static/vendor/d3-2.8.1/src/core/interpolate.js | 230 + static/vendor/d3-2.8.1/src/core/json.js | 5 + static/vendor/d3-2.8.1/src/core/keys.js | 5 + static/vendor/d3-2.8.1/src/core/last.js | 13 + static/vendor/d3-2.8.1/src/core/map.js | 48 + static/vendor/d3-2.8.1/src/core/max.js | 14 + static/vendor/d3-2.8.1/src/core/mean.js | 13 + static/vendor/d3-2.8.1/src/core/median.js | 5 + static/vendor/d3-2.8.1/src/core/merge.js | 3 + static/vendor/d3-2.8.1/src/core/min.js | 14 + static/vendor/d3-2.8.1/src/core/mouse.js | 34 + static/vendor/d3-2.8.1/src/core/nest.js | 89 + static/vendor/d3-2.8.1/src/core/noop.js | 1 + static/vendor/d3-2.8.1/src/core/ns.js | 22 + static/vendor/d3-2.8.1/src/core/number.js | 3 + static/vendor/d3-2.8.1/src/core/permute.js | 7 + static/vendor/d3-2.8.1/src/core/quantile.js | 8 + static/vendor/d3-2.8.1/src/core/random.js | 15 + static/vendor/d3-2.8.1/src/core/range.js | 24 + static/vendor/d3-2.8.1/src/core/rebind.js | 16 + static/vendor/d3-2.8.1/src/core/requote.js | 5 + static/vendor/d3-2.8.1/src/core/rgb.js | 284 + static/vendor/d3-2.8.1/src/core/round.js | 5 + .../vendor/d3-2.8.1/src/core/selection-append.js | 15 + static/vendor/d3-2.8.1/src/core/selection-attr.js | 44 + static/vendor/d3-2.8.1/src/core/selection-call.js | 13 + .../vendor/d3-2.8.1/src/core/selection-classed.js | 61 + static/vendor/d3-2.8.1/src/core/selection-data.js | 121 + static/vendor/d3-2.8.1/src/core/selection-datum.js | 6 + static/vendor/d3-2.8.1/src/core/selection-each.js | 9 + static/vendor/d3-2.8.1/src/core/selection-empty.js | 3 + .../d3-2.8.1/src/core/selection-enter-select.js | 24 + static/vendor/d3-2.8.1/src/core/selection-enter.js | 14 + .../vendor/d3-2.8.1/src/core/selection-filter.js | 26 + static/vendor/d3-2.8.1/src/core/selection-html.js | 7 + .../vendor/d3-2.8.1/src/core/selection-insert.js | 20 + static/vendor/d3-2.8.1/src/core/selection-node.js | 9 + static/vendor/d3-2.8.1/src/core/selection-on.js | 41 + static/vendor/d3-2.8.1/src/core/selection-order.js | 11 + .../vendor/d3-2.8.1/src/core/selection-property.js | 23 + .../vendor/d3-2.8.1/src/core/selection-remove.js | 9 + static/vendor/d3-2.8.1/src/core/selection-root.js | 18 + .../vendor/d3-2.8.1/src/core/selection-select.js | 30 + .../d3-2.8.1/src/core/selection-selectAll.js | 24 + static/vendor/d3-2.8.1/src/core/selection-sort.js | 12 + static/vendor/d3-2.8.1/src/core/selection-style.js | 26 + static/vendor/d3-2.8.1/src/core/selection-text.js | 7 + .../d3-2.8.1/src/core/selection-transition.js | 14 + static/vendor/d3-2.8.1/src/core/selection.js | 25 + static/vendor/d3-2.8.1/src/core/split.js | 21 + static/vendor/d3-2.8.1/src/core/sum.js | 14 + static/vendor/d3-2.8.1/src/core/text.js | 10 + static/vendor/d3-2.8.1/src/core/this.js | 3 + static/vendor/d3-2.8.1/src/core/timer.js | 104 + static/vendor/d3-2.8.1/src/core/touches.js | 8 + static/vendor/d3-2.8.1/src/core/transform.js | 60 + static/vendor/d3-2.8.1/src/core/transition-attr.js | 23 + .../vendor/d3-2.8.1/src/core/transition-delay.js | 6 + .../d3-2.8.1/src/core/transition-duration.js | 6 + static/vendor/d3-2.8.1/src/core/transition-each.js | 25 + .../vendor/d3-2.8.1/src/core/transition-remove.js | 6 + .../vendor/d3-2.8.1/src/core/transition-select.js | 22 + .../d3-2.8.1/src/core/transition-selectAll.js | 22 + .../vendor/d3-2.8.1/src/core/transition-style.js | 14 + static/vendor/d3-2.8.1/src/core/transition-text.js | 7 + .../d3-2.8.1/src/core/transition-transition.js | 3 + static/vendor/d3-2.8.1/src/core/transition.js | 132 + static/vendor/d3-2.8.1/src/core/transpose.js | 3 + static/vendor/d3-2.8.1/src/core/uninterpolate.js | 9 + static/vendor/d3-2.8.1/src/core/values.js | 5 + static/vendor/d3-2.8.1/src/core/xhr.js | 11 + static/vendor/d3-2.8.1/src/core/xml.js | 10 + static/vendor/d3-2.8.1/src/core/zip.js | 13 + static/vendor/d3-2.8.1/src/csv/csv.js | 5 + static/vendor/d3-2.8.1/src/csv/format.js | 13 + static/vendor/d3-2.8.1/src/csv/parse.js | 73 + static/vendor/d3-2.8.1/src/end.js | 1 + static/vendor/d3-2.8.1/src/geo/albers.js | 126 + static/vendor/d3-2.8.1/src/geo/azimuthal.js | 80 + static/vendor/d3-2.8.1/src/geo/bonne.js | 70 + static/vendor/d3-2.8.1/src/geo/bounds.js | 83 + static/vendor/d3-2.8.1/src/geo/circle.js | 146 + static/vendor/d3-2.8.1/src/geo/equirectangular.js | 36 + static/vendor/d3-2.8.1/src/geo/geo.js | 3 + static/vendor/d3-2.8.1/src/geo/greatArc.js | 80 + static/vendor/d3-2.8.1/src/geo/greatCircle.js | 1 + static/vendor/d3-2.8.1/src/geo/mercator.js | 36 + static/vendor/d3-2.8.1/src/geo/path.js | 271 + static/vendor/d3-2.8.1/src/geo/type.js | 5 + static/vendor/d3-2.8.1/src/geom/contour.js | 78 + static/vendor/d3-2.8.1/src/geom/delaunay.js | 31 + static/vendor/d3-2.8.1/src/geom/geom.js | 1 + static/vendor/d3-2.8.1/src/geom/hull.js | 98 + static/vendor/d3-2.8.1/src/geom/polygon.js | 88 + static/vendor/d3-2.8.1/src/geom/quadtree.js | 129 + static/vendor/d3-2.8.1/src/geom/voronoi.js | 409 + static/vendor/d3-2.8.1/src/layout/bundle.js | 57 + static/vendor/d3-2.8.1/src/layout/chord.js | 153 + static/vendor/d3-2.8.1/src/layout/cluster.js | 79 + static/vendor/d3-2.8.1/src/layout/force.js | 355 + static/vendor/d3-2.8.1/src/layout/hierarchy.js | 120 + static/vendor/d3-2.8.1/src/layout/histogram.js | 102 + static/vendor/d3-2.8.1/src/layout/layout.js | 1 + static/vendor/d3-2.8.1/src/layout/pack.js | 195 + static/vendor/d3-2.8.1/src/layout/partition.js | 48 + static/vendor/d3-2.8.1/src/layout/pie.js | 93 + static/vendor/d3-2.8.1/src/layout/stack.js | 241 + static/vendor/d3-2.8.1/src/layout/tree.js | 237 + static/vendor/d3-2.8.1/src/layout/treemap.js | 217 + static/vendor/d3-2.8.1/src/package.js | 20 + static/vendor/d3-2.8.1/src/scale/bilinear.js | 7 + static/vendor/d3-2.8.1/src/scale/category.js | 54 + static/vendor/d3-2.8.1/src/scale/identity.js | 30 + static/vendor/d3-2.8.1/src/scale/linear.js | 110 + static/vendor/d3-2.8.1/src/scale/log.js | 85 + static/vendor/d3-2.8.1/src/scale/nice.js | 24 + static/vendor/d3-2.8.1/src/scale/ordinal.js | 86 + static/vendor/d3-2.8.1/src/scale/polylinear.js | 22 + static/vendor/d3-2.8.1/src/scale/pow.js | 54 + static/vendor/d3-2.8.1/src/scale/quantile.js | 43 + static/vendor/d3-2.8.1/src/scale/quantize.js | 36 + static/vendor/d3-2.8.1/src/scale/scale.js | 10 + static/vendor/d3-2.8.1/src/scale/sqrt.js | 3 + static/vendor/d3-2.8.1/src/start.js | 1 + static/vendor/d3-2.8.1/src/svg/arc.js | 95 + static/vendor/d3-2.8.1/src/svg/area-radial.js | 10 + static/vendor/d3-2.8.1/src/svg/area.js | 90 + static/vendor/d3-2.8.1/src/svg/axis.js | 205 + static/vendor/d3-2.8.1/src/svg/brush.js | 358 + static/vendor/d3-2.8.1/src/svg/chord.js | 99 + static/vendor/d3-2.8.1/src/svg/diagonal-radial.js | 22 + static/vendor/d3-2.8.1/src/svg/diagonal.js | 38 + static/vendor/d3-2.8.1/src/svg/line-radial.js | 22 + static/vendor/d3-2.8.1/src/svg/line.js | 418 + static/vendor/d3-2.8.1/src/svg/mouse.js | 1 + static/vendor/d3-2.8.1/src/svg/svg.js | 1 + static/vendor/d3-2.8.1/src/svg/symbol.js | 100 + static/vendor/d3-2.8.1/src/svg/touches.js | 1 + static/vendor/d3-2.8.1/src/time/day.js | 15 + static/vendor/d3-2.8.1/src/time/format-iso.js | 13 + static/vendor/d3-2.8.1/src/time/format-utc.js | 28 + static/vendor/d3-2.8.1/src/time/format.js | 282 + static/vendor/d3-2.8.1/src/time/hour.js | 11 + static/vendor/d3-2.8.1/src/time/interval.js | 69 + static/vendor/d3-2.8.1/src/time/minute.js | 10 + static/vendor/d3-2.8.1/src/time/month.js | 10 + static/vendor/d3-2.8.1/src/time/scale-utc.js | 37 + static/vendor/d3-2.8.1/src/time/scale.js | 143 + static/vendor/d3-2.8.1/src/time/second.js | 10 + static/vendor/d3-2.8.1/src/time/time.js | 34 + static/vendor/d3-2.8.1/src/time/week.js | 27 + static/vendor/d3-2.8.1/src/time/year.js | 10 + static/vendor/d3-2.8.1/test/core/ascending-test.js | 46 + static/vendor/d3-2.8.1/test/core/bisect-test.js | 198 + .../vendor/d3-2.8.1/test/core/descending-test.js | 46 + static/vendor/d3-2.8.1/test/core/dispatch-test.js | 137 + static/vendor/d3-2.8.1/test/core/ease-test.js | 138 + static/vendor/d3-2.8.1/test/core/entries-test.js | 42 + static/vendor/d3-2.8.1/test/core/extent-test.js | 50 + static/vendor/d3-2.8.1/test/core/first-test.js | 41 + static/vendor/d3-2.8.1/test/core/format-test.js | 238 + .../vendor/d3-2.8.1/test/core/formatPrefix-test.js | 107 + static/vendor/d3-2.8.1/test/core/functor-test.js | 28 + static/vendor/d3-2.8.1/test/core/hsl-test.js | 81 + static/vendor/d3-2.8.1/test/core/html-test.js | 36 + .../vendor/d3-2.8.1/test/core/interpolate-test.js | 230 + static/vendor/d3-2.8.1/test/core/json-test.js | 36 + static/vendor/d3-2.8.1/test/core/keys-test.js | 30 + static/vendor/d3-2.8.1/test/core/last-test.js | 41 + static/vendor/d3-2.8.1/test/core/map-test.js | 212 + static/vendor/d3-2.8.1/test/core/max-test.js | 50 + static/vendor/d3-2.8.1/test/core/mean-test.js | 42 + static/vendor/d3-2.8.1/test/core/median-test.js | 42 + static/vendor/d3-2.8.1/test/core/merge-test.js | 26 + static/vendor/d3-2.8.1/test/core/min-test.js | 49 + static/vendor/d3-2.8.1/test/core/nest-test.js | 241 + static/vendor/d3-2.8.1/test/core/ns-test.js | 58 + static/vendor/d3-2.8.1/test/core/permute-test.js | 52 + static/vendor/d3-2.8.1/test/core/quantile-test.js | 49 + static/vendor/d3-2.8.1/test/core/range-test.js | 102 + static/vendor/d3-2.8.1/test/core/rebind-test.js | 51 + static/vendor/d3-2.8.1/test/core/requote-test.js | 52 + static/vendor/d3-2.8.1/test/core/rgb-test.js | 93 + static/vendor/d3-2.8.1/test/core/round-test.js | 69 + static/vendor/d3-2.8.1/test/core/select-test.js | 41 + static/vendor/d3-2.8.1/test/core/selectAll-test.js | 45 + .../d3-2.8.1/test/core/selection-append-test.js | 122 + .../d3-2.8.1/test/core/selection-attr-test.js | 152 + .../d3-2.8.1/test/core/selection-call-test.js | 70 + .../d3-2.8.1/test/core/selection-classed-test.js | 218 + .../d3-2.8.1/test/core/selection-data-test.js | 207 + .../d3-2.8.1/test/core/selection-datum-test.js | 82 + .../d3-2.8.1/test/core/selection-each-test.js | 82 + .../d3-2.8.1/test/core/selection-empty-test.js | 50 + .../d3-2.8.1/test/core/selection-enter-test.js | 25 + .../d3-2.8.1/test/core/selection-filter-test.js | 69 + .../d3-2.8.1/test/core/selection-html-test.js | 132 + .../d3-2.8.1/test/core/selection-insert-test.js | 135 + .../d3-2.8.1/test/core/selection-node-test.js | 49 + .../vendor/d3-2.8.1/test/core/selection-on-test.js | 104 + .../d3-2.8.1/test/core/selection-order-test.js | 31 + .../d3-2.8.1/test/core/selection-property-test.js | 90 + .../d3-2.8.1/test/core/selection-remove-test.js | 38 + .../d3-2.8.1/test/core/selection-select-test.js | 124 + .../d3-2.8.1/test/core/selection-selectAll-test.js | 127 + .../d3-2.8.1/test/core/selection-sort-test.js | 58 + .../d3-2.8.1/test/core/selection-style-test.js | 99 + static/vendor/d3-2.8.1/test/core/selection-test.js | 34 + .../d3-2.8.1/test/core/selection-text-test.js | 115 + static/vendor/d3-2.8.1/test/core/split-test.js | 33 + static/vendor/d3-2.8.1/test/core/sum-test.js | 46 + static/vendor/d3-2.8.1/test/core/text-test.js | 47 + static/vendor/d3-2.8.1/test/core/timer-test.js | 61 + .../d3-2.8.1/test/core/transition-test-attr.js | 53 + .../test/core/transition-test-attrTween.js | 66 + .../d3-2.8.1/test/core/transition-test-call.js | 32 + .../d3-2.8.1/test/core/transition-test-delay.js | 58 + .../d3-2.8.1/test/core/transition-test-duration.js | 62 + .../d3-2.8.1/test/core/transition-test-each.js | 165 + .../d3-2.8.1/test/core/transition-test-id.js | 19 + .../d3-2.8.1/test/core/transition-test-remove.js | 45 + .../d3-2.8.1/test/core/transition-test-select.js | 62 + .../test/core/transition-test-selectAll.js | 58 + .../d3-2.8.1/test/core/transition-test-style.js | 48 + .../test/core/transition-test-styleTween.js | 72 + .../d3-2.8.1/test/core/transition-test-text.js | 29 + .../d3-2.8.1/test/core/transition-test-time.js | 35 + .../test/core/transition-test-transition.js | 59 + .../d3-2.8.1/test/core/transition-test-tween.js | 70 + .../vendor/d3-2.8.1/test/core/transition-test.js | 65 + static/vendor/d3-2.8.1/test/core/transpose-test.js | 31 + static/vendor/d3-2.8.1/test/core/values-test.js | 34 + static/vendor/d3-2.8.1/test/core/version-test.js | 17 + static/vendor/d3-2.8.1/test/core/xhr-test.js | 55 + static/vendor/d3-2.8.1/test/core/xml-test.js | 47 + static/vendor/d3-2.8.1/test/core/zip-test.js | 31 + static/vendor/d3-2.8.1/test/csv/csv-test.js | 36 + static/vendor/d3-2.8.1/test/csv/format-test.js | 37 + static/vendor/d3-2.8.1/test/csv/parse-test.js | 99 + static/vendor/d3-2.8.1/test/env-assert.js | 96 + static/vendor/d3-2.8.1/test/env-fragment.js | 8 + static/vendor/d3-2.8.1/test/env-xhr.js | 55 + static/vendor/d3-2.8.1/test/env.js | 15 + static/vendor/d3-2.8.1/test/geo/albers-test.js | 55 + static/vendor/d3-2.8.1/test/geo/azimuthal-test.js | 259 + static/vendor/d3-2.8.1/test/geo/bonne-test.js | 114 + .../d3-2.8.1/test/geo/equirectangular-test.js | 48 + static/vendor/d3-2.8.1/test/geo/greatArc-test.js | 39 + static/vendor/d3-2.8.1/test/geo/mercator-test.js | 55 + static/vendor/d3-2.8.1/test/geo/path-test.js | 32 + static/vendor/d3-2.8.1/test/geom/polygon-test.js | 81 + static/vendor/d3-2.8.1/test/layout/cluster-test.js | 42 + .../vendor/d3-2.8.1/test/layout/hierarchy-test.js | 28 + .../vendor/d3-2.8.1/test/layout/histogram-test.js | 89 + static/vendor/d3-2.8.1/test/layout/pack-test.js | 91 + .../vendor/d3-2.8.1/test/layout/partition-test.js | 48 + static/vendor/d3-2.8.1/test/layout/pie-test.js | 24 + static/vendor/d3-2.8.1/test/layout/tree-test.js | 44 + static/vendor/d3-2.8.1/test/layout/treemap-test.js | 170 + static/vendor/d3-2.8.1/test/scale/category-test.js | 73 + static/vendor/d3-2.8.1/test/scale/identity-test.js | 166 + static/vendor/d3-2.8.1/test/scale/linear-test.js | 274 + static/vendor/d3-2.8.1/test/scale/log-test.js | 275 + static/vendor/d3-2.8.1/test/scale/ordinal-test.js | 245 + static/vendor/d3-2.8.1/test/scale/pow-test.js | 262 + static/vendor/d3-2.8.1/test/scale/quantile-test.js | 63 + static/vendor/d3-2.8.1/test/scale/quantize-test.js | 68 + static/vendor/d3-2.8.1/test/scale/sqrt-test.js | 255 + static/vendor/d3-2.8.1/test/svg/arc-test.js | 146 + .../vendor/d3-2.8.1/test/svg/area-radial-test.js | 199 + static/vendor/d3-2.8.1/test/svg/area-test.js | 194 + static/vendor/d3-2.8.1/test/svg/axis-test.js | 398 + static/vendor/d3-2.8.1/test/svg/brush-test.js | 66 + .../vendor/d3-2.8.1/test/svg/line-radial-test.js | 124 + static/vendor/d3-2.8.1/test/svg/line-test.js | 191 + static/vendor/d3-2.8.1/test/svg/symbol-test.js | 96 + static/vendor/d3-2.8.1/test/time/day-test.js | 174 + static/vendor/d3-2.8.1/test/time/days-test.js | 98 + static/vendor/d3-2.8.1/test/time/format-test.js | 469 + static/vendor/d3-2.8.1/test/time/hour-test.js | 218 + static/vendor/d3-2.8.1/test/time/hours-test.js | 128 + static/vendor/d3-2.8.1/test/time/minute-test.js | 130 + static/vendor/d3-2.8.1/test/time/minutes-test.js | 94 + static/vendor/d3-2.8.1/test/time/month-test.js | 150 + static/vendor/d3-2.8.1/test/time/months-test.js | 98 + static/vendor/d3-2.8.1/test/time/scale-test.js | 567 ++ static/vendor/d3-2.8.1/test/time/second-test.js | 146 + static/vendor/d3-2.8.1/test/time/seconds-test.js | 94 + static/vendor/d3-2.8.1/test/time/time.js | 29 + static/vendor/d3-2.8.1/test/time/week-test.js | 162 + static/vendor/d3-2.8.1/test/time/weeks-test.js | 98 + static/vendor/d3-2.8.1/test/time/year-test.js | 137 + static/vendor/d3-2.8.1/test/time/years-test.js | 77 + static/vendor/d3.js | 2 +- static/vendor/d3.min.js | 1 + www/css/geo-display.styl | 17 +- www/geo.jade | 10 + 593 files changed, 75799 insertions(+), 68 deletions(-) create mode 100644 data/geo/data/en_geo_editors.json create mode 100644 data/geo/data/en_geo_editors.tsv delete mode 120000 static/vendor/d3 create mode 100755 static/vendor/d3-2.8.1/.gitignore create mode 100755 static/vendor/d3-2.8.1/.gitmodules create mode 100755 static/vendor/d3-2.8.1/.npmignore create mode 100755 static/vendor/d3-2.8.1/LICENSE create mode 100755 static/vendor/d3-2.8.1/Makefile create mode 100755 static/vendor/d3-2.8.1/README.md create mode 100755 static/vendor/d3-2.8.1/d3.v2.js create mode 100755 static/vendor/d3-2.8.1/d3.v2.min.js create mode 100755 static/vendor/d3-2.8.1/examples/albers/albers.html create mode 100755 static/vendor/d3-2.8.1/examples/area/area-radial.html create mode 100755 static/vendor/d3-2.8.1/examples/area/area.html create mode 100755 static/vendor/d3-2.8.1/examples/axis/axis-alternating.html create mode 100755 static/vendor/d3-2.8.1/examples/axis/axis-explicit-ticks.html create mode 100755 static/vendor/d3-2.8.1/examples/axis/axis-ggplot2.html create mode 100755 static/vendor/d3-2.8.1/examples/axis/axis-multiples.html create mode 100755 static/vendor/d3-2.8.1/examples/axis/axis-orientations.html create mode 100755 static/vendor/d3-2.8.1/examples/axis/axis-transition.html create mode 100755 static/vendor/d3-2.8.1/examples/azimuthal/azimuthal.css create mode 100755 static/vendor/d3-2.8.1/examples/azimuthal/azimuthal.html create mode 100755 static/vendor/d3-2.8.1/examples/azimuthal/azimuthal.js create mode 100755 static/vendor/d3-2.8.1/examples/bar/bar-hierarchy.html create mode 100755 static/vendor/d3-2.8.1/examples/bar/bar.html create mode 100755 static/vendor/d3-2.8.1/examples/bar/sample-data.csv create mode 100755 static/vendor/d3-2.8.1/examples/bonne/bonne.html create mode 100755 static/vendor/d3-2.8.1/examples/box/box.css create mode 100755 static/vendor/d3-2.8.1/examples/box/box.html create mode 100755 static/vendor/d3-2.8.1/examples/box/box.js create mode 100755 static/vendor/d3-2.8.1/examples/brush/brush-ordinal.html create mode 100755 static/vendor/d3-2.8.1/examples/brush/brush-x-resizer.html create mode 100755 static/vendor/d3-2.8.1/examples/brush/brush-x.html create mode 100755 static/vendor/d3-2.8.1/examples/brush/brush-y.html create mode 100755 static/vendor/d3-2.8.1/examples/brush/brush.html create mode 100755 static/vendor/d3-2.8.1/examples/bubble/bubble.css create mode 100755 static/vendor/d3-2.8.1/examples/bubble/bubble.html create mode 100755 static/vendor/d3-2.8.1/examples/bubble/bubble.js create mode 100755 static/vendor/d3-2.8.1/examples/bullet/bullet.css create mode 100755 static/vendor/d3-2.8.1/examples/bullet/bullet.html create mode 100755 static/vendor/d3-2.8.1/examples/bullet/bullet.js create mode 100755 static/vendor/d3-2.8.1/examples/bullet/bullets.json create mode 100755 static/vendor/d3-2.8.1/examples/bundle/bundle-radial.css create mode 100755 static/vendor/d3-2.8.1/examples/bundle/bundle-radial.html create mode 100755 static/vendor/d3-2.8.1/examples/bundle/bundle-radial.js create mode 100755 static/vendor/d3-2.8.1/examples/bundle/bundle-treemap.css create mode 100755 static/vendor/d3-2.8.1/examples/bundle/bundle-treemap.html create mode 100755 static/vendor/d3-2.8.1/examples/bundle/bundle-treemap.js create mode 100755 static/vendor/d3-2.8.1/examples/bundle/packages.js create mode 100755 static/vendor/d3-2.8.1/examples/button.css create mode 100755 static/vendor/d3-2.8.1/examples/calendar/calendar.css create mode 100755 static/vendor/d3-2.8.1/examples/calendar/dji-area.html create mode 100755 static/vendor/d3-2.8.1/examples/calendar/dji.csv create mode 100755 static/vendor/d3-2.8.1/examples/calendar/dji.html create mode 100755 static/vendor/d3-2.8.1/examples/calendar/dji.js create mode 100755 static/vendor/d3-2.8.1/examples/calendar/vix.csv create mode 100755 static/vendor/d3-2.8.1/examples/calendar/vix.html create mode 100755 static/vendor/d3-2.8.1/examples/calendar/vix.js create mode 100755 static/vendor/d3-2.8.1/examples/cartogram/cartogram.css create mode 100755 static/vendor/d3-2.8.1/examples/cartogram/cartogram.html create mode 100755 static/vendor/d3-2.8.1/examples/cartogram/cartogram.js create mode 100755 static/vendor/d3-2.8.1/examples/cartogram/demers.css create mode 100755 static/vendor/d3-2.8.1/examples/cartogram/demers.html create mode 100755 static/vendor/d3-2.8.1/examples/cartogram/demers.js create mode 100755 static/vendor/d3-2.8.1/examples/cartogram/dorling.css create mode 100755 static/vendor/d3-2.8.1/examples/cartogram/dorling.html create mode 100755 static/vendor/d3-2.8.1/examples/cartogram/dorling.js create mode 100755 static/vendor/d3-2.8.1/examples/chord/chord-flare.html create mode 100755 static/vendor/d3-2.8.1/examples/chord/chord.css create mode 100755 static/vendor/d3-2.8.1/examples/chord/chord.html create mode 100755 static/vendor/d3-2.8.1/examples/chord/chord.js create mode 100755 static/vendor/d3-2.8.1/examples/choropleth/choropleth-area.html create mode 100755 static/vendor/d3-2.8.1/examples/choropleth/choropleth-bounds.html create mode 100755 static/vendor/d3-2.8.1/examples/choropleth/choropleth.css create mode 100755 static/vendor/d3-2.8.1/examples/choropleth/choropleth.html create mode 100755 static/vendor/d3-2.8.1/examples/choropleth/choropleth.js create mode 100755 static/vendor/d3-2.8.1/examples/choropleth/unemployment.json create mode 100755 static/vendor/d3-2.8.1/examples/clock/clock.css create mode 100755 static/vendor/d3-2.8.1/examples/clock/clock.html create mode 100755 static/vendor/d3-2.8.1/examples/clock/clock.js create mode 100755 static/vendor/d3-2.8.1/examples/cluster/cluster-radial.html create mode 100755 static/vendor/d3-2.8.1/examples/cluster/cluster-radial.js create mode 100755 static/vendor/d3-2.8.1/examples/cluster/cluster.css create mode 100755 static/vendor/d3-2.8.1/examples/cluster/cluster.html create mode 100755 static/vendor/d3-2.8.1/examples/cluster/cluster.js create mode 100755 static/vendor/d3-2.8.1/examples/contour/contour.html create mode 100755 static/vendor/d3-2.8.1/examples/crimea/crimea-stacked-area.html create mode 100755 static/vendor/d3-2.8.1/examples/crimea/crimea-stacked-bar.html create mode 100755 static/vendor/d3-2.8.1/examples/crimea/crimea.csv create mode 100755 static/vendor/d3-2.8.1/examples/custom/custom.html create mode 100755 static/vendor/d3-2.8.1/examples/data/README.md create mode 100755 static/vendor/d3-2.8.1/examples/data/faithful.json create mode 100755 static/vendor/d3-2.8.1/examples/data/flare-imports.json create mode 100755 static/vendor/d3-2.8.1/examples/data/flare.json create mode 100755 static/vendor/d3-2.8.1/examples/data/morley.csv create mode 100755 static/vendor/d3-2.8.1/examples/data/sample.csv create mode 100755 static/vendor/d3-2.8.1/examples/data/sample.html create mode 100755 static/vendor/d3-2.8.1/examples/data/sample.json create mode 100755 static/vendor/d3-2.8.1/examples/data/sample.txt create mode 100755 static/vendor/d3-2.8.1/examples/data/sample.xml create mode 100755 static/vendor/d3-2.8.1/examples/data/stocks.csv create mode 100755 static/vendor/d3-2.8.1/examples/data/unemployment.csv create mode 100755 static/vendor/d3-2.8.1/examples/data/us-borders.json create mode 100755 static/vendor/d3-2.8.1/examples/data/us-counties.json create mode 100755 static/vendor/d3-2.8.1/examples/data/us-state-centroids.json create mode 100755 static/vendor/d3-2.8.1/examples/data/us-states.json create mode 100755 static/vendor/d3-2.8.1/examples/data/world-countries.json create mode 100755 static/vendor/d3-2.8.1/examples/delaunay/delaunay.html create mode 100755 static/vendor/d3-2.8.1/examples/donut/donut.html create mode 100755 static/vendor/d3-2.8.1/examples/dot/dot.html create mode 100755 static/vendor/d3-2.8.1/examples/drag/drag.html create mode 100755 static/vendor/d3-2.8.1/examples/force/README create mode 100755 static/vendor/d3-2.8.1/examples/force/force-bounds.html create mode 100755 static/vendor/d3-2.8.1/examples/force/force-cluster.html create mode 100755 static/vendor/d3-2.8.1/examples/force/force-collapsible.html create mode 100755 static/vendor/d3-2.8.1/examples/force/force-dynamic.html create mode 100755 static/vendor/d3-2.8.1/examples/force/force-html.html create mode 100755 static/vendor/d3-2.8.1/examples/force/force-map.html create mode 100755 static/vendor/d3-2.8.1/examples/force/force-multi-foci.html create mode 100755 static/vendor/d3-2.8.1/examples/force/force.css create mode 100755 static/vendor/d3-2.8.1/examples/force/force.html create mode 100755 static/vendor/d3-2.8.1/examples/force/force.js create mode 100755 static/vendor/d3-2.8.1/examples/force/miserables.json create mode 100755 static/vendor/d3-2.8.1/examples/great-arc/great-arc.html create mode 100755 static/vendor/d3-2.8.1/examples/hello-world/hello-data-key.html create mode 100755 static/vendor/d3-2.8.1/examples/hello-world/hello-data-nested-key.html create mode 100755 static/vendor/d3-2.8.1/examples/hello-world/hello-data-nested.html create mode 100755 static/vendor/d3-2.8.1/examples/hello-world/hello-data.html create mode 100755 static/vendor/d3-2.8.1/examples/hello-world/hello-event.html create mode 100755 static/vendor/d3-2.8.1/examples/hello-world/hello-node-key.html create mode 100755 static/vendor/d3-2.8.1/examples/hello-world/hello-order.html create mode 100755 static/vendor/d3-2.8.1/examples/hello-world/hello-sort.html create mode 100755 static/vendor/d3-2.8.1/examples/hello-world/hello-transform.html create mode 100755 static/vendor/d3-2.8.1/examples/hello-world/hello-transition-undefined.html create mode 100755 static/vendor/d3-2.8.1/examples/hello-world/hello-transition.html create mode 100755 static/vendor/d3-2.8.1/examples/hello-world/hello-webkit-transition.html create mode 100755 static/vendor/d3-2.8.1/examples/hello-world/select-enter-add.html create mode 100755 static/vendor/d3-2.8.1/examples/hello-world/selectAll-enter-add.html create mode 100755 static/vendor/d3-2.8.1/examples/histogram/histogram-chart.js create mode 100755 static/vendor/d3-2.8.1/examples/histogram/histogram.html create mode 100755 static/vendor/d3-2.8.1/examples/horizon/horizon.css create mode 100755 static/vendor/d3-2.8.1/examples/horizon/horizon.html create mode 100755 static/vendor/d3-2.8.1/examples/horizon/horizon.js create mode 100755 static/vendor/d3-2.8.1/examples/horizon/unemployment.json create mode 100755 static/vendor/d3-2.8.1/examples/hull/hull.html create mode 100755 static/vendor/d3-2.8.1/examples/kde/kde.css create mode 100755 static/vendor/d3-2.8.1/examples/kde/kde.html create mode 100755 static/vendor/d3-2.8.1/examples/kde/kde.js create mode 100755 static/vendor/d3-2.8.1/examples/line/line.css create mode 100755 static/vendor/d3-2.8.1/examples/line/line.html create mode 100755 static/vendor/d3-2.8.1/examples/line/line.js create mode 100755 static/vendor/d3-2.8.1/examples/marimekko/marimekko.html create mode 100755 static/vendor/d3-2.8.1/examples/marimekko/marimekko.json create mode 100755 static/vendor/d3-2.8.1/examples/marker/marker.html create mode 100755 static/vendor/d3-2.8.1/examples/mercator/mercator-zoom-constrained.html create mode 100755 static/vendor/d3-2.8.1/examples/mercator/mercator-zoom.html create mode 100755 static/vendor/d3-2.8.1/examples/mercator/mercator.html create mode 100755 static/vendor/d3-2.8.1/examples/moire/moire.html create mode 100755 static/vendor/d3-2.8.1/examples/mouse/mouse-html.html create mode 100755 static/vendor/d3-2.8.1/examples/node-canvas/us-counties.js create mode 100755 static/vendor/d3-2.8.1/examples/pack/pack.css create mode 100755 static/vendor/d3-2.8.1/examples/pack/pack.html create mode 100755 static/vendor/d3-2.8.1/examples/pack/pack.js create mode 100755 static/vendor/d3-2.8.1/examples/parallel/cars.csv create mode 100755 static/vendor/d3-2.8.1/examples/parallel/parallel.html create mode 100755 static/vendor/d3-2.8.1/examples/partition/partition-icicle-zoom.html create mode 100755 static/vendor/d3-2.8.1/examples/partition/partition-icicle.html create mode 100755 static/vendor/d3-2.8.1/examples/partition/partition-sunburst-zoom.html create mode 100755 static/vendor/d3-2.8.1/examples/partition/partition-sunburst.html create mode 100755 static/vendor/d3-2.8.1/examples/partition/partition-sunburst.js create mode 100755 static/vendor/d3-2.8.1/examples/pie/pie-transition.html create mode 100755 static/vendor/d3-2.8.1/examples/pie/pie.html create mode 100755 static/vendor/d3-2.8.1/examples/population/population.css create mode 100755 static/vendor/d3-2.8.1/examples/population/population.csv create mode 100755 static/vendor/d3-2.8.1/examples/population/population.html create mode 100755 static/vendor/d3-2.8.1/examples/population/population.js create mode 100755 static/vendor/d3-2.8.1/examples/qq/qq.css create mode 100755 static/vendor/d3-2.8.1/examples/qq/qq.html create mode 100755 static/vendor/d3-2.8.1/examples/qq/qq.js create mode 100755 static/vendor/d3-2.8.1/examples/qq/stats.js create mode 100755 static/vendor/d3-2.8.1/examples/qq/turkers.json create mode 100755 static/vendor/d3-2.8.1/examples/quadtree/quadtree.html create mode 100755 static/vendor/d3-2.8.1/examples/rollup/rollup.html create mode 100755 static/vendor/d3-2.8.1/examples/showreel/showreel.html create mode 100755 static/vendor/d3-2.8.1/examples/sizzle/sizzle.html create mode 100755 static/vendor/d3-2.8.1/examples/sort/sort.css create mode 100755 static/vendor/d3-2.8.1/examples/sort/sort.html create mode 100755 static/vendor/d3-2.8.1/examples/sort/sort.js create mode 100755 static/vendor/d3-2.8.1/examples/spline/spline.css create mode 100755 static/vendor/d3-2.8.1/examples/spline/spline.html create mode 100755 static/vendor/d3-2.8.1/examples/spline/spline.js create mode 100755 static/vendor/d3-2.8.1/examples/splom/flowers.json create mode 100755 static/vendor/d3-2.8.1/examples/splom/splom.css create mode 100755 static/vendor/d3-2.8.1/examples/splom/splom.html create mode 100755 static/vendor/d3-2.8.1/examples/splom/splom.js create mode 100755 static/vendor/d3-2.8.1/examples/stream/stack.css create mode 100755 static/vendor/d3-2.8.1/examples/stream/stack.html create mode 100755 static/vendor/d3-2.8.1/examples/stream/stack.js create mode 100755 static/vendor/d3-2.8.1/examples/stream/stream.css create mode 100755 static/vendor/d3-2.8.1/examples/stream/stream.html create mode 100755 static/vendor/d3-2.8.1/examples/stream/stream.js create mode 100755 static/vendor/d3-2.8.1/examples/stream/stream_layers.js create mode 100755 static/vendor/d3-2.8.1/examples/superformula/dot.html create mode 100755 static/vendor/d3-2.8.1/examples/superformula/explorer.html create mode 100755 static/vendor/d3-2.8.1/examples/superformula/superformula.html create mode 100755 static/vendor/d3-2.8.1/examples/superformula/superformula.js create mode 100755 static/vendor/d3-2.8.1/examples/symbol-map/symbol-map.html create mode 100755 static/vendor/d3-2.8.1/examples/touch/touch.html create mode 100755 static/vendor/d3-2.8.1/examples/transform/test.html create mode 100755 static/vendor/d3-2.8.1/examples/transform/transform.html create mode 100755 static/vendor/d3-2.8.1/examples/tree/tree-dynamic.html create mode 100755 static/vendor/d3-2.8.1/examples/tree/tree-interactive.html create mode 100755 static/vendor/d3-2.8.1/examples/tree/tree-radial.html create mode 100755 static/vendor/d3-2.8.1/examples/tree/tree-radial.js create mode 100755 static/vendor/d3-2.8.1/examples/tree/tree.css create mode 100755 static/vendor/d3-2.8.1/examples/tree/tree.html create mode 100755 static/vendor/d3-2.8.1/examples/tree/tree.js create mode 100755 static/vendor/d3-2.8.1/examples/treemap/treemap-svg.html create mode 100755 static/vendor/d3-2.8.1/examples/treemap/treemap-svg.js create mode 100755 static/vendor/d3-2.8.1/examples/treemap/treemap.css create mode 100755 static/vendor/d3-2.8.1/examples/treemap/treemap.html create mode 100755 static/vendor/d3-2.8.1/examples/treemap/treemap.js create mode 100755 static/vendor/d3-2.8.1/examples/voroboids/boid.js create mode 100755 static/vendor/d3-2.8.1/examples/voroboids/voroboids.css create mode 100755 static/vendor/d3-2.8.1/examples/voroboids/voroboids.html create mode 100755 static/vendor/d3-2.8.1/examples/voroboids/voroboids.js create mode 100755 static/vendor/d3-2.8.1/examples/voronoi/voronoi.css create mode 100755 static/vendor/d3-2.8.1/examples/voronoi/voronoi.html create mode 100755 static/vendor/d3-2.8.1/examples/voronoi/voronoi.js create mode 100755 static/vendor/d3-2.8.1/examples/zoom-pan/zoom-pan-transform.html create mode 100755 static/vendor/d3-2.8.1/examples/zoom-pan/zoom-pan.html create mode 100755 static/vendor/d3-2.8.1/examples/zoom/sp500.csv create mode 100755 static/vendor/d3-2.8.1/examples/zoom/zoom.html create mode 100755 static/vendor/d3-2.8.1/index.js create mode 100755 static/vendor/d3-2.8.1/lib/colorbrewer/LICENSE create mode 100755 static/vendor/d3-2.8.1/lib/colorbrewer/colorbrewer.css create mode 100755 static/vendor/d3-2.8.1/lib/colorbrewer/colorbrewer.js create mode 100755 static/vendor/d3-2.8.1/lib/jit/LICENSE create mode 100755 static/vendor/d3-2.8.1/lib/jquery-ui/LICENSE create mode 100755 static/vendor/d3-2.8.1/lib/jquery-ui/images/ui-bg_diagonals-thick_18_b81900_40x40.png create mode 100755 static/vendor/d3-2.8.1/lib/jquery-ui/images/ui-bg_diagonals-thick_20_666666_40x40.png create mode 100755 static/vendor/d3-2.8.1/lib/jquery-ui/images/ui-bg_flat_10_000000_40x100.png create mode 100755 static/vendor/d3-2.8.1/lib/jquery-ui/images/ui-bg_glass_100_f6f6f6_1x400.png create mode 100755 static/vendor/d3-2.8.1/lib/jquery-ui/images/ui-bg_glass_100_fdf5ce_1x400.png create mode 100755 static/vendor/d3-2.8.1/lib/jquery-ui/images/ui-bg_glass_65_ffffff_1x400.png create mode 100755 static/vendor/d3-2.8.1/lib/jquery-ui/images/ui-bg_gloss-wave_35_f6a828_500x100.png create mode 100755 static/vendor/d3-2.8.1/lib/jquery-ui/images/ui-bg_highlight-soft_100_eeeeee_1x100.png create mode 100755 static/vendor/d3-2.8.1/lib/jquery-ui/images/ui-bg_highlight-soft_75_ffe45c_1x100.png create mode 100755 static/vendor/d3-2.8.1/lib/jquery-ui/images/ui-icons_222222_256x240.png create mode 100755 static/vendor/d3-2.8.1/lib/jquery-ui/images/ui-icons_228ef1_256x240.png create mode 100755 static/vendor/d3-2.8.1/lib/jquery-ui/images/ui-icons_ef8c08_256x240.png create mode 100755 static/vendor/d3-2.8.1/lib/jquery-ui/images/ui-icons_ffd27a_256x240.png create mode 100755 static/vendor/d3-2.8.1/lib/jquery-ui/images/ui-icons_ffffff_256x240.png create mode 100755 static/vendor/d3-2.8.1/lib/jquery-ui/jquery-ui.css create mode 100755 static/vendor/d3-2.8.1/lib/jquery-ui/jquery-ui.min.js create mode 100755 static/vendor/d3-2.8.1/lib/jquery/LICENSE create mode 100755 static/vendor/d3-2.8.1/lib/jquery/jquery.js create mode 100755 static/vendor/d3-2.8.1/lib/jquery/jquery.min.js create mode 100755 static/vendor/d3-2.8.1/lib/polymaps/LICENSE create mode 100755 static/vendor/d3-2.8.1/lib/protovis/LICENSE create mode 100755 static/vendor/d3-2.8.1/lib/science/LICENSE create mode 100755 static/vendor/d3-2.8.1/lib/science/science.js create mode 100755 static/vendor/d3-2.8.1/lib/science/science.lin.js create mode 100755 static/vendor/d3-2.8.1/lib/science/science.lin.min.js create mode 100755 static/vendor/d3-2.8.1/lib/science/science.min.js create mode 100755 static/vendor/d3-2.8.1/lib/science/science.stats.js create mode 100755 static/vendor/d3-2.8.1/lib/science/science.stats.min.js create mode 100755 static/vendor/d3-2.8.1/lib/sizzle/LICENSE create mode 100755 static/vendor/d3-2.8.1/lib/sizzle/sizzle.js create mode 100755 static/vendor/d3-2.8.1/lib/sizzle/sizzle.min.js create mode 100755 static/vendor/d3-2.8.1/package.json create mode 100755 static/vendor/d3-2.8.1/src/behavior/behavior.js create mode 100755 static/vendor/d3-2.8.1/src/behavior/drag.js create mode 100755 static/vendor/d3-2.8.1/src/behavior/zoom.js create mode 100755 static/vendor/d3-2.8.1/src/compat/date.js create mode 100755 static/vendor/d3-2.8.1/src/compat/style.js create mode 100755 static/vendor/d3-2.8.1/src/core/array.js create mode 100755 static/vendor/d3-2.8.1/src/core/ascending.js create mode 100755 static/vendor/d3-2.8.1/src/core/bisect.js create mode 100755 static/vendor/d3-2.8.1/src/core/class.js create mode 100755 static/vendor/d3-2.8.1/src/core/collapse.js create mode 100755 static/vendor/d3-2.8.1/src/core/core.js create mode 100755 static/vendor/d3-2.8.1/src/core/descending.js create mode 100755 static/vendor/d3-2.8.1/src/core/dispatch.js create mode 100755 static/vendor/d3-2.8.1/src/core/ease.js create mode 100755 static/vendor/d3-2.8.1/src/core/entries.js create mode 100755 static/vendor/d3-2.8.1/src/core/event.js create mode 100755 static/vendor/d3-2.8.1/src/core/extent.js create mode 100755 static/vendor/d3-2.8.1/src/core/first.js create mode 100755 static/vendor/d3-2.8.1/src/core/format.js create mode 100755 static/vendor/d3-2.8.1/src/core/formatPrefix.js create mode 100755 static/vendor/d3-2.8.1/src/core/functor.js create mode 100755 static/vendor/d3-2.8.1/src/core/hsl.js create mode 100755 static/vendor/d3-2.8.1/src/core/html.js create mode 100755 static/vendor/d3-2.8.1/src/core/interpolate.js create mode 100755 static/vendor/d3-2.8.1/src/core/json.js create mode 100755 static/vendor/d3-2.8.1/src/core/keys.js create mode 100755 static/vendor/d3-2.8.1/src/core/last.js create mode 100755 static/vendor/d3-2.8.1/src/core/map.js create mode 100755 static/vendor/d3-2.8.1/src/core/max.js create mode 100755 static/vendor/d3-2.8.1/src/core/mean.js create mode 100755 static/vendor/d3-2.8.1/src/core/median.js create mode 100755 static/vendor/d3-2.8.1/src/core/merge.js create mode 100755 static/vendor/d3-2.8.1/src/core/min.js create mode 100755 static/vendor/d3-2.8.1/src/core/mouse.js create mode 100755 static/vendor/d3-2.8.1/src/core/nest.js create mode 100755 static/vendor/d3-2.8.1/src/core/noop.js create mode 100755 static/vendor/d3-2.8.1/src/core/ns.js create mode 100755 static/vendor/d3-2.8.1/src/core/number.js create mode 100755 static/vendor/d3-2.8.1/src/core/permute.js create mode 100755 static/vendor/d3-2.8.1/src/core/quantile.js create mode 100755 static/vendor/d3-2.8.1/src/core/random.js create mode 100755 static/vendor/d3-2.8.1/src/core/range.js create mode 100755 static/vendor/d3-2.8.1/src/core/rebind.js create mode 100755 static/vendor/d3-2.8.1/src/core/requote.js create mode 100755 static/vendor/d3-2.8.1/src/core/rgb.js create mode 100755 static/vendor/d3-2.8.1/src/core/round.js create mode 100755 static/vendor/d3-2.8.1/src/core/selection-append.js create mode 100755 static/vendor/d3-2.8.1/src/core/selection-attr.js create mode 100755 static/vendor/d3-2.8.1/src/core/selection-call.js create mode 100755 static/vendor/d3-2.8.1/src/core/selection-classed.js create mode 100755 static/vendor/d3-2.8.1/src/core/selection-data.js create mode 100755 static/vendor/d3-2.8.1/src/core/selection-datum.js create mode 100755 static/vendor/d3-2.8.1/src/core/selection-each.js create mode 100755 static/vendor/d3-2.8.1/src/core/selection-empty.js create mode 100755 static/vendor/d3-2.8.1/src/core/selection-enter-select.js create mode 100755 static/vendor/d3-2.8.1/src/core/selection-enter.js create mode 100755 static/vendor/d3-2.8.1/src/core/selection-filter.js create mode 100755 static/vendor/d3-2.8.1/src/core/selection-html.js create mode 100755 static/vendor/d3-2.8.1/src/core/selection-insert.js create mode 100755 static/vendor/d3-2.8.1/src/core/selection-node.js create mode 100755 static/vendor/d3-2.8.1/src/core/selection-on.js create mode 100755 static/vendor/d3-2.8.1/src/core/selection-order.js create mode 100755 static/vendor/d3-2.8.1/src/core/selection-property.js create mode 100755 static/vendor/d3-2.8.1/src/core/selection-remove.js create mode 100755 static/vendor/d3-2.8.1/src/core/selection-root.js create mode 100755 static/vendor/d3-2.8.1/src/core/selection-select.js create mode 100755 static/vendor/d3-2.8.1/src/core/selection-selectAll.js create mode 100755 static/vendor/d3-2.8.1/src/core/selection-sort.js create mode 100755 static/vendor/d3-2.8.1/src/core/selection-style.js create mode 100755 static/vendor/d3-2.8.1/src/core/selection-text.js create mode 100755 static/vendor/d3-2.8.1/src/core/selection-transition.js create mode 100755 static/vendor/d3-2.8.1/src/core/selection.js create mode 100755 static/vendor/d3-2.8.1/src/core/split.js create mode 100755 static/vendor/d3-2.8.1/src/core/sum.js create mode 100755 static/vendor/d3-2.8.1/src/core/text.js create mode 100755 static/vendor/d3-2.8.1/src/core/this.js create mode 100755 static/vendor/d3-2.8.1/src/core/timer.js create mode 100755 static/vendor/d3-2.8.1/src/core/touches.js create mode 100755 static/vendor/d3-2.8.1/src/core/transform.js create mode 100755 static/vendor/d3-2.8.1/src/core/transition-attr.js create mode 100755 static/vendor/d3-2.8.1/src/core/transition-delay.js create mode 100755 static/vendor/d3-2.8.1/src/core/transition-duration.js create mode 100755 static/vendor/d3-2.8.1/src/core/transition-each.js create mode 100755 static/vendor/d3-2.8.1/src/core/transition-remove.js create mode 100755 static/vendor/d3-2.8.1/src/core/transition-select.js create mode 100755 static/vendor/d3-2.8.1/src/core/transition-selectAll.js create mode 100755 static/vendor/d3-2.8.1/src/core/transition-style.js create mode 100755 static/vendor/d3-2.8.1/src/core/transition-text.js create mode 100755 static/vendor/d3-2.8.1/src/core/transition-transition.js create mode 100755 static/vendor/d3-2.8.1/src/core/transition.js create mode 100755 static/vendor/d3-2.8.1/src/core/transpose.js create mode 100755 static/vendor/d3-2.8.1/src/core/uninterpolate.js create mode 100755 static/vendor/d3-2.8.1/src/core/values.js create mode 100755 static/vendor/d3-2.8.1/src/core/xhr.js create mode 100755 static/vendor/d3-2.8.1/src/core/xml.js create mode 100755 static/vendor/d3-2.8.1/src/core/zip.js create mode 100755 static/vendor/d3-2.8.1/src/csv/csv.js create mode 100755 static/vendor/d3-2.8.1/src/csv/format.js create mode 100755 static/vendor/d3-2.8.1/src/csv/parse.js create mode 100755 static/vendor/d3-2.8.1/src/end.js create mode 100755 static/vendor/d3-2.8.1/src/geo/albers.js create mode 100755 static/vendor/d3-2.8.1/src/geo/azimuthal.js create mode 100755 static/vendor/d3-2.8.1/src/geo/bonne.js create mode 100755 static/vendor/d3-2.8.1/src/geo/bounds.js create mode 100755 static/vendor/d3-2.8.1/src/geo/circle.js create mode 100755 static/vendor/d3-2.8.1/src/geo/equirectangular.js create mode 100755 static/vendor/d3-2.8.1/src/geo/geo.js create mode 100755 static/vendor/d3-2.8.1/src/geo/greatArc.js create mode 100755 static/vendor/d3-2.8.1/src/geo/greatCircle.js create mode 100755 static/vendor/d3-2.8.1/src/geo/mercator.js create mode 100755 static/vendor/d3-2.8.1/src/geo/path.js create mode 100755 static/vendor/d3-2.8.1/src/geo/type.js create mode 100755 static/vendor/d3-2.8.1/src/geom/contour.js create mode 100755 static/vendor/d3-2.8.1/src/geom/delaunay.js create mode 100755 static/vendor/d3-2.8.1/src/geom/geom.js create mode 100755 static/vendor/d3-2.8.1/src/geom/hull.js create mode 100755 static/vendor/d3-2.8.1/src/geom/polygon.js create mode 100755 static/vendor/d3-2.8.1/src/geom/quadtree.js create mode 100755 static/vendor/d3-2.8.1/src/geom/voronoi.js create mode 100755 static/vendor/d3-2.8.1/src/layout/bundle.js create mode 100755 static/vendor/d3-2.8.1/src/layout/chord.js create mode 100755 static/vendor/d3-2.8.1/src/layout/cluster.js create mode 100755 static/vendor/d3-2.8.1/src/layout/force.js create mode 100755 static/vendor/d3-2.8.1/src/layout/hierarchy.js create mode 100755 static/vendor/d3-2.8.1/src/layout/histogram.js create mode 100755 static/vendor/d3-2.8.1/src/layout/layout.js create mode 100755 static/vendor/d3-2.8.1/src/layout/pack.js create mode 100755 static/vendor/d3-2.8.1/src/layout/partition.js create mode 100755 static/vendor/d3-2.8.1/src/layout/pie.js create mode 100755 static/vendor/d3-2.8.1/src/layout/stack.js create mode 100755 static/vendor/d3-2.8.1/src/layout/tree.js create mode 100755 static/vendor/d3-2.8.1/src/layout/treemap.js create mode 100755 static/vendor/d3-2.8.1/src/package.js create mode 100755 static/vendor/d3-2.8.1/src/scale/bilinear.js create mode 100755 static/vendor/d3-2.8.1/src/scale/category.js create mode 100755 static/vendor/d3-2.8.1/src/scale/identity.js create mode 100755 static/vendor/d3-2.8.1/src/scale/linear.js create mode 100755 static/vendor/d3-2.8.1/src/scale/log.js create mode 100755 static/vendor/d3-2.8.1/src/scale/nice.js create mode 100755 static/vendor/d3-2.8.1/src/scale/ordinal.js create mode 100755 static/vendor/d3-2.8.1/src/scale/polylinear.js create mode 100755 static/vendor/d3-2.8.1/src/scale/pow.js create mode 100755 static/vendor/d3-2.8.1/src/scale/quantile.js create mode 100755 static/vendor/d3-2.8.1/src/scale/quantize.js create mode 100755 static/vendor/d3-2.8.1/src/scale/scale.js create mode 100755 static/vendor/d3-2.8.1/src/scale/sqrt.js create mode 100755 static/vendor/d3-2.8.1/src/start.js create mode 100755 static/vendor/d3-2.8.1/src/svg/arc.js create mode 100755 static/vendor/d3-2.8.1/src/svg/area-radial.js create mode 100755 static/vendor/d3-2.8.1/src/svg/area.js create mode 100755 static/vendor/d3-2.8.1/src/svg/axis.js create mode 100755 static/vendor/d3-2.8.1/src/svg/brush.js create mode 100755 static/vendor/d3-2.8.1/src/svg/chord.js create mode 100755 static/vendor/d3-2.8.1/src/svg/diagonal-radial.js create mode 100755 static/vendor/d3-2.8.1/src/svg/diagonal.js create mode 100755 static/vendor/d3-2.8.1/src/svg/line-radial.js create mode 100755 static/vendor/d3-2.8.1/src/svg/line.js create mode 100755 static/vendor/d3-2.8.1/src/svg/mouse.js create mode 100755 static/vendor/d3-2.8.1/src/svg/svg.js create mode 100755 static/vendor/d3-2.8.1/src/svg/symbol.js create mode 100755 static/vendor/d3-2.8.1/src/svg/touches.js create mode 100755 static/vendor/d3-2.8.1/src/time/day.js create mode 100755 static/vendor/d3-2.8.1/src/time/format-iso.js create mode 100755 static/vendor/d3-2.8.1/src/time/format-utc.js create mode 100755 static/vendor/d3-2.8.1/src/time/format.js create mode 100755 static/vendor/d3-2.8.1/src/time/hour.js create mode 100755 static/vendor/d3-2.8.1/src/time/interval.js create mode 100755 static/vendor/d3-2.8.1/src/time/minute.js create mode 100755 static/vendor/d3-2.8.1/src/time/month.js create mode 100755 static/vendor/d3-2.8.1/src/time/scale-utc.js create mode 100755 static/vendor/d3-2.8.1/src/time/scale.js create mode 100755 static/vendor/d3-2.8.1/src/time/second.js create mode 100755 static/vendor/d3-2.8.1/src/time/time.js create mode 100755 static/vendor/d3-2.8.1/src/time/week.js create mode 100755 static/vendor/d3-2.8.1/src/time/year.js create mode 100755 static/vendor/d3-2.8.1/test/core/ascending-test.js create mode 100755 static/vendor/d3-2.8.1/test/core/bisect-test.js create mode 100755 static/vendor/d3-2.8.1/test/core/descending-test.js create mode 100755 static/vendor/d3-2.8.1/test/core/dispatch-test.js create mode 100755 static/vendor/d3-2.8.1/test/core/ease-test.js create mode 100755 static/vendor/d3-2.8.1/test/core/entries-test.js create mode 100755 static/vendor/d3-2.8.1/test/core/extent-test.js create mode 100755 static/vendor/d3-2.8.1/test/core/first-test.js create mode 100755 static/vendor/d3-2.8.1/test/core/format-test.js create mode 100755 static/vendor/d3-2.8.1/test/core/formatPrefix-test.js create mode 100755 static/vendor/d3-2.8.1/test/core/functor-test.js create mode 100755 static/vendor/d3-2.8.1/test/core/hsl-test.js create mode 100755 static/vendor/d3-2.8.1/test/core/html-test.js create mode 100755 static/vendor/d3-2.8.1/test/core/interpolate-test.js create mode 100755 static/vendor/d3-2.8.1/test/core/json-test.js create mode 100755 static/vendor/d3-2.8.1/test/core/keys-test.js create mode 100755 static/vendor/d3-2.8.1/test/core/last-test.js create mode 100755 static/vendor/d3-2.8.1/test/core/map-test.js create mode 100755 static/vendor/d3-2.8.1/test/core/max-test.js create mode 100755 static/vendor/d3-2.8.1/test/core/mean-test.js create mode 100755 static/vendor/d3-2.8.1/test/core/median-test.js create mode 100755 static/vendor/d3-2.8.1/test/core/merge-test.js create mode 100755 static/vendor/d3-2.8.1/test/core/min-test.js create mode 100755 static/vendor/d3-2.8.1/test/core/nest-test.js create mode 100755 static/vendor/d3-2.8.1/test/core/ns-test.js create mode 100755 static/vendor/d3-2.8.1/test/core/permute-test.js create mode 100755 static/vendor/d3-2.8.1/test/core/quantile-test.js create mode 100755 static/vendor/d3-2.8.1/test/core/range-test.js create mode 100755 static/vendor/d3-2.8.1/test/core/rebind-test.js create mode 100755 static/vendor/d3-2.8.1/test/core/requote-test.js create mode 100755 static/vendor/d3-2.8.1/test/core/rgb-test.js create mode 100755 static/vendor/d3-2.8.1/test/core/round-test.js create mode 100755 static/vendor/d3-2.8.1/test/core/select-test.js create mode 100755 static/vendor/d3-2.8.1/test/core/selectAll-test.js create mode 100755 static/vendor/d3-2.8.1/test/core/selection-append-test.js create mode 100755 static/vendor/d3-2.8.1/test/core/selection-attr-test.js create mode 100755 static/vendor/d3-2.8.1/test/core/selection-call-test.js create mode 100755 static/vendor/d3-2.8.1/test/core/selection-classed-test.js create mode 100755 static/vendor/d3-2.8.1/test/core/selection-data-test.js create mode 100755 static/vendor/d3-2.8.1/test/core/selection-datum-test.js create mode 100755 static/vendor/d3-2.8.1/test/core/selection-each-test.js create mode 100755 static/vendor/d3-2.8.1/test/core/selection-empty-test.js create mode 100755 static/vendor/d3-2.8.1/test/core/selection-enter-test.js create mode 100755 static/vendor/d3-2.8.1/test/core/selection-filter-test.js create mode 100755 static/vendor/d3-2.8.1/test/core/selection-html-test.js create mode 100755 static/vendor/d3-2.8.1/test/core/selection-insert-test.js create mode 100755 static/vendor/d3-2.8.1/test/core/selection-node-test.js create mode 100755 static/vendor/d3-2.8.1/test/core/selection-on-test.js create mode 100755 static/vendor/d3-2.8.1/test/core/selection-order-test.js create mode 100755 static/vendor/d3-2.8.1/test/core/selection-property-test.js create mode 100755 static/vendor/d3-2.8.1/test/core/selection-remove-test.js create mode 100755 static/vendor/d3-2.8.1/test/core/selection-select-test.js create mode 100755 static/vendor/d3-2.8.1/test/core/selection-selectAll-test.js create mode 100755 static/vendor/d3-2.8.1/test/core/selection-sort-test.js create mode 100755 static/vendor/d3-2.8.1/test/core/selection-style-test.js create mode 100755 static/vendor/d3-2.8.1/test/core/selection-test.js create mode 100755 static/vendor/d3-2.8.1/test/core/selection-text-test.js create mode 100755 static/vendor/d3-2.8.1/test/core/split-test.js create mode 100755 static/vendor/d3-2.8.1/test/core/sum-test.js create mode 100755 static/vendor/d3-2.8.1/test/core/text-test.js create mode 100755 static/vendor/d3-2.8.1/test/core/timer-test.js create mode 100755 static/vendor/d3-2.8.1/test/core/transition-test-attr.js create mode 100755 static/vendor/d3-2.8.1/test/core/transition-test-attrTween.js create mode 100755 static/vendor/d3-2.8.1/test/core/transition-test-call.js create mode 100755 static/vendor/d3-2.8.1/test/core/transition-test-delay.js create mode 100755 static/vendor/d3-2.8.1/test/core/transition-test-duration.js create mode 100755 static/vendor/d3-2.8.1/test/core/transition-test-each.js create mode 100755 static/vendor/d3-2.8.1/test/core/transition-test-id.js create mode 100755 static/vendor/d3-2.8.1/test/core/transition-test-remove.js create mode 100755 static/vendor/d3-2.8.1/test/core/transition-test-select.js create mode 100755 static/vendor/d3-2.8.1/test/core/transition-test-selectAll.js create mode 100755 static/vendor/d3-2.8.1/test/core/transition-test-style.js create mode 100755 static/vendor/d3-2.8.1/test/core/transition-test-styleTween.js create mode 100755 static/vendor/d3-2.8.1/test/core/transition-test-text.js create mode 100755 static/vendor/d3-2.8.1/test/core/transition-test-time.js create mode 100755 static/vendor/d3-2.8.1/test/core/transition-test-transition.js create mode 100755 static/vendor/d3-2.8.1/test/core/transition-test-tween.js create mode 100755 static/vendor/d3-2.8.1/test/core/transition-test.js create mode 100755 static/vendor/d3-2.8.1/test/core/transpose-test.js create mode 100755 static/vendor/d3-2.8.1/test/core/values-test.js create mode 100755 static/vendor/d3-2.8.1/test/core/version-test.js create mode 100755 static/vendor/d3-2.8.1/test/core/xhr-test.js create mode 100755 static/vendor/d3-2.8.1/test/core/xml-test.js create mode 100755 static/vendor/d3-2.8.1/test/core/zip-test.js create mode 100755 static/vendor/d3-2.8.1/test/csv/csv-test.js create mode 100755 static/vendor/d3-2.8.1/test/csv/format-test.js create mode 100755 static/vendor/d3-2.8.1/test/csv/parse-test.js create mode 100755 static/vendor/d3-2.8.1/test/env-assert.js create mode 100755 static/vendor/d3-2.8.1/test/env-fragment.js create mode 100755 static/vendor/d3-2.8.1/test/env-xhr.js create mode 100755 static/vendor/d3-2.8.1/test/env.js create mode 100755 static/vendor/d3-2.8.1/test/geo/albers-test.js create mode 100755 static/vendor/d3-2.8.1/test/geo/azimuthal-test.js create mode 100755 static/vendor/d3-2.8.1/test/geo/bonne-test.js create mode 100755 static/vendor/d3-2.8.1/test/geo/equirectangular-test.js create mode 100755 static/vendor/d3-2.8.1/test/geo/greatArc-test.js create mode 100755 static/vendor/d3-2.8.1/test/geo/mercator-test.js create mode 100755 static/vendor/d3-2.8.1/test/geo/path-test.js create mode 100755 static/vendor/d3-2.8.1/test/geom/polygon-test.js create mode 100755 static/vendor/d3-2.8.1/test/layout/cluster-test.js create mode 100755 static/vendor/d3-2.8.1/test/layout/hierarchy-test.js create mode 100755 static/vendor/d3-2.8.1/test/layout/histogram-test.js create mode 100755 static/vendor/d3-2.8.1/test/layout/pack-test.js create mode 100755 static/vendor/d3-2.8.1/test/layout/partition-test.js create mode 100755 static/vendor/d3-2.8.1/test/layout/pie-test.js create mode 100755 static/vendor/d3-2.8.1/test/layout/tree-test.js create mode 100755 static/vendor/d3-2.8.1/test/layout/treemap-test.js create mode 100755 static/vendor/d3-2.8.1/test/scale/category-test.js create mode 100755 static/vendor/d3-2.8.1/test/scale/identity-test.js create mode 100755 static/vendor/d3-2.8.1/test/scale/linear-test.js create mode 100755 static/vendor/d3-2.8.1/test/scale/log-test.js create mode 100755 static/vendor/d3-2.8.1/test/scale/ordinal-test.js create mode 100755 static/vendor/d3-2.8.1/test/scale/pow-test.js create mode 100755 static/vendor/d3-2.8.1/test/scale/quantile-test.js create mode 100755 static/vendor/d3-2.8.1/test/scale/quantize-test.js create mode 100755 static/vendor/d3-2.8.1/test/scale/sqrt-test.js create mode 100755 static/vendor/d3-2.8.1/test/svg/arc-test.js create mode 100755 static/vendor/d3-2.8.1/test/svg/area-radial-test.js create mode 100755 static/vendor/d3-2.8.1/test/svg/area-test.js create mode 100755 static/vendor/d3-2.8.1/test/svg/axis-test.js create mode 100755 static/vendor/d3-2.8.1/test/svg/brush-test.js create mode 100755 static/vendor/d3-2.8.1/test/svg/line-radial-test.js create mode 100755 static/vendor/d3-2.8.1/test/svg/line-test.js create mode 100755 static/vendor/d3-2.8.1/test/svg/symbol-test.js create mode 100755 static/vendor/d3-2.8.1/test/time/day-test.js create mode 100755 static/vendor/d3-2.8.1/test/time/days-test.js create mode 100755 static/vendor/d3-2.8.1/test/time/format-test.js create mode 100755 static/vendor/d3-2.8.1/test/time/hour-test.js create mode 100755 static/vendor/d3-2.8.1/test/time/hours-test.js create mode 100755 static/vendor/d3-2.8.1/test/time/minute-test.js create mode 100755 static/vendor/d3-2.8.1/test/time/minutes-test.js create mode 100755 static/vendor/d3-2.8.1/test/time/month-test.js create mode 100755 static/vendor/d3-2.8.1/test/time/months-test.js create mode 100755 static/vendor/d3-2.8.1/test/time/scale-test.js create mode 100755 static/vendor/d3-2.8.1/test/time/second-test.js create mode 100755 static/vendor/d3-2.8.1/test/time/seconds-test.js create mode 100755 static/vendor/d3-2.8.1/test/time/time.js create mode 100755 static/vendor/d3-2.8.1/test/time/week-test.js create mode 100755 static/vendor/d3-2.8.1/test/time/weeks-test.js create mode 100755 static/vendor/d3-2.8.1/test/time/year-test.js create mode 100755 static/vendor/d3-2.8.1/test/time/years-test.js create mode 120000 static/vendor/d3.min.js diff --git a/data/geo/data/en_geo_editors.json b/data/geo/data/en_geo_editors.json new file mode 100644 index 0000000..2e55320 --- /dev/null +++ b/data/geo/data/en_geo_editors.json @@ -0,0 +1 @@ +{"Canada": {"editors5": "2088", "editors": "6666", "editors100": "221"}, "Libyan Arab Jamahiriya": {"editors5": "6", "editors": "7", "editors100": "0"}, "Turkmenistan": {"editors5": "1", "editors": "1", "editors100": "0"}, "Montenegro": {"editors5": "9", "editors": "16", "editors100": "2"}, "Kazakstan": {"editors5": "12", "editors": "42", "editors100": "0"}, "Lithuania": {"editors5": "31", "editors": "94", "editors100": "3"}, "Cambodia": {"editors5": "6", "editors": "39", "editors100": "0"}, "Switzerland": {"editors5": "132", "editors": "503", "editors100": "11"}, "Ethiopia": {"editors5": "4", "editors": "21", "editors100": "0"}, "Aruba": {"editors5": "3", "editors": "5", "editors100": "1"}, "Argentina": {"editors5": "96", "editors": "336", "editors100": "9"}, "Bolivia": {"editors5": "2", "editors": "24", "editors100": "0"}, "Cameroon": {"editors5": "0", "editors": "3", "editors100": "0"}, "Ghana": {"editors5": "8", "editors": "32", "editors100": "1"}, "Saudi Arabia": {"editors5": "57", "editors": "194", "editors100": "5"}, "Yemen": {"editors5": "1", "editors": "5", "editors100": "1"}, "Japan": {"editors5": "210", "editors": "695", "editors100": "22"}, "American Samoa": {"editors5": "1", "editors": "1", "editors100": "0"}, "Northern Mariana Islands": {"editors5": "2", "editors": "3", "editors100": "0"}, "Slovenia": {"editors5": "41", "editors": "158", "editors100": "7"}, "Guatemala": {"editors5": "3", "editors": "25", "editors100": "0"}, "Bosnia and Herzegovina": {"editors5": "34", "editors": "67", "editors100": "3"}, "Kuwait": {"editors5": "20", "editors": "60", "editors100": "2"}, "Russian Federation": {"editors5": "266", "editors": "953", "editors100": "24"}, "Jordan": {"editors5": "20", "editors": "52", "editors100": "0"}, "Virgin Islands, British": {"editors5": "3", "editors": "8", "editors100": "0"}, "Dominica": {"editors5": "3", "editors": "8", "editors100": "0"}, "Liberia": {"editors5": "1", "editors": "2", "editors100": "0"}, "Maldives": {"editors5": "17", "editors": "45", "editors100": "2"}, "Micronesia, Federated States of": {"editors5": "0", "editors": "1", "editors100": "0"}, "Jamaica": {"editors5": "11", "editors": "35", "editors100": "0"}, "Oman": {"editors5": "8", "editors": "30", "editors100": "0"}, "Martinique": {"editors5": "0", "editors": "2", "editors100": "0"}, "Greenland": {"editors5": "0", "editors": "1", "editors100": "0"}, "French Guiana": {"editors5": "0", "editors": "2", "editors100": "0"}, "Finland": {"editors5": "168", "editors": "558", "editors100": "21"}, "Monaco": {"editors5": "1", "editors": "4", "editors100": "0"}, "New Zealand": {"editors5": "260", "editors": "832", "editors100": "31"}, "Virgin Islands, U.S.": {"editors5": "2", "editors": "5", "editors100": "0"}, "Jersey": {"editors5": "9", "editors": "16", "editors100": "2"}, "Bahamas": {"editors5": "4", "editors": "13", "editors100": "0"}, "Albania": {"editors5": "15", "editors": "40", "editors100": "1"}, "Samoa": {"editors5": "0", "editors": "2", "editors100": "0"}, "Macau": {"editors5": "3", "editors": "16", "editors100": "0"}, "United Arab Emirates": {"editors5": "101", "editors": "320", "editors100": "1"}, "Guam": {"editors5": "1", "editors": "4", "editors100": "0"}, "India": {"editors5": "1513", "editors": "5417", "editors100": "95"}, "Azerbaijan": {"editors5": "20", "editors": "58", "editors100": "2"}, "Lesotho": {"editors5": "0", "editors": "1", "editors100": "0"}, "Saint Vincent and the Grenadines": {"editors5": "0", "editors": "1", "editors100": "0"}, "Kenya": {"editors5": "16", "editors": "78", "editors100": "0"}, "Tajikistan": {"editors5": "2", "editors": "2", "editors100": "0"}, "Turkey": {"editors5": "128", "editors": "393", "editors100": "11"}, "Afghanistan": {"editors5": "2", "editors": "13", "editors100": "0"}, "Bangladesh": {"editors5": "81", "editors": "248", "editors100": "1"}, "Solomon Islands": {"editors5": "0", "editors": "1", "editors100": "0"}, "Turks and Caicos Islands": {"editors5": "1", "editors": "1", "editors100": "0"}, "Saint Lucia": {"editors5": "3", "editors": "7", "editors100": "1"}, "San Marino": {"editors5": "0", "editors": "1", "editors100": "0"}, "French Polynesia": {"editors5": "1", "editors": "3", "editors100": "0"}, "France": {"editors5": "482", "editors": "1760", "editors100": "31"}, "Syrian Arab Republic": {"editors5": "3", "editors": "6", "editors100": "0"}, "Bermuda": {"editors5": "1", "editors": "5", "editors100": "0"}, "Slovakia": {"editors5": "30", "editors": "112", "editors100": "2"}, "Somalia": {"editors5": "0", "editors": "4", "editors100": "0"}, "Peru": {"editors5": "39", "editors": "99", "editors100": "2"}, "Vanuatu": {"editors5": "1", "editors": "2", "editors100": "0"}, "Seychelles": {"editors5": "0", "editors": "2", "editors100": "0"}, "Norway": {"editors5": "186", "editors": "657", "editors100": "20"}, "Malawi": {"editors5": "1", "editors": "3", "editors100": "0"}, "Benin": {"editors5": "0", "editors": "1", "editors100": "0"}, "Cuba": {"editors5": "6", "editors": "22", "editors100": "1"}, "Iran, Islamic Republic of": {"editors5": "95", "editors": "284", "editors100": "9"}, "Saint Kitts and Nevis": {"editors5": "2", "editors": "5", "editors100": "0"}, "China": {"editors5": "153", "editors": "587", "editors100": "11"}, "Armenia": {"editors5": "17", "editors": "55", "editors100": "1"}, "Dominican Republic": {"editors5": "14", "editors": "44", "editors100": "1"}, "Ukraine": {"editors5": "106", "editors": "367", "editors100": "5"}, "Bahrain": {"editors5": "8", "editors": "27", "editors100": "1"}, "Tonga": {"editors5": "0", "editors": "2", "editors100": "0"}, "Cayman Islands": {"editors5": "2", "editors": "7", "editors100": "0"}, "Trinidad and Tobago": {"editors5": "8", "editors": "48", "editors100": "0"}, "Indonesia": {"editors5": "149", "editors": "406", "editors100": "13"}, "Mauritius": {"editors5": "6", "editors": "27", "editors100": "1"}, "Sweden": {"editors5": "308", "editors": "1006", "editors100": "28"}, "Belarus": {"editors5": "24", "editors": "67", "editors100": "1"}, "Mali": {"editors5": "1", "editors": "3", "editors100": "0"}, "Poland": {"editors5": "182", "editors": "635", "editors100": "15"}, "Bulgaria": {"editors5": "85", "editors": "232", "editors100": "11"}, "United States": {"editors5": "14080", "editors": "50197", "editors100": "1377"}, "Romania": {"editors5": "130", "editors": "351", "editors100": "9"}, "Angola": {"editors5": "0", "editors": "1", "editors100": "0"}, "Portugal": {"editors5": "108", "editors": "299", "editors100": "12"}, "South Africa": {"editors5": "115", "editors": "366", "editors100": "9"}, "Cyprus": {"editors5": "24", "editors": "77", "editors100": "3"}, "Brunei Darussalam": {"editors5": "8", "editors": "12", "editors100": "1"}, "Qatar": {"editors5": "13", "editors": "63", "editors100": "2"}, "Malaysia": {"editors5": "177", "editors": "470", "editors100": "12"}, "Austria": {"editors5": "90", "editors": "379", "editors100": "4"}, "Vietnam": {"editors5": "46", "editors": "140", "editors100": "1"}, "Mozambique": {"editors5": "2", "editors": "6", "editors100": "0"}, "Uganda": {"editors5": "2", "editors": "28", "editors100": "0"}, "Hungary": {"editors5": "110", "editors": "319", "editors100": "11"}, "Niger": {"editors5": "0", "editors": "1", "editors100": "0"}, "Isle of Man": {"editors5": "6", "editors": "27", "editors100": "1"}, "Brazil": {"editors5": "258", "editors": "768", "editors100": "25"}, "Faroe Islands": {"editors5": "2", "editors": "8", "editors100": "0"}, "Guinea": {"editors5": "1", "editors": "1", "editors100": "0"}, "Panama": {"editors5": "12", "editors": "33", "editors100": "0"}, "Korea, Republic of": {"editors5": "151", "editors": "412", "editors100": "11"}, "Costa Rica": {"editors5": "19", "editors": "62", "editors100": "0"}, "Luxembourg": {"editors5": "20", "editors": "58", "editors100": "2"}, "Cape Verde": {"editors5": "0", "editors": "2", "editors100": "0"}, "Andorra": {"editors5": "0", "editors": "1", "editors100": "0"}, "Satellite Provider": {"editors5": "2", "editors": "6", "editors100": "0"}, "Gibraltar": {"editors5": "2", "editors": "5", "editors100": "0"}, "Ireland": {"editors5": "290", "editors": "879", "editors100": "27"}, "Pakistan": {"editors5": "190", "editors": "687", "editors100": "14"}, "Nigeria": {"editors5": "14", "editors": "79", "editors100": "0"}, "Ecuador": {"editors5": "24", "editors": "52", "editors100": "2"}, "Czech Republic": {"editors5": "101", "editors": "350", "editors100": "11"}, "Europe": {"editors5": "42", "editors": "149", "editors100": "2"}, "Australia": {"editors5": "1333", "editors": "4459", "editors100": "165"}, "Algeria": {"editors5": "3", "editors": "16", "editors100": "0"}, "El Salvador": {"editors5": "3", "editors": "19", "editors100": "1"}, "Tuvalu": {"editors5": "1", "editors": "1", "editors100": "0"}, "Rwanda": {"editors5": "3", "editors": "7", "editors100": "0"}, "Chile": {"editors5": "67", "editors": "201", "editors100": "6"}, "Puerto Rico": {"editors5": "30", "editors": "92", "editors100": "1"}, "Belgium": {"editors5": "149", "editors": "541", "editors100": "16"}, "Thailand": {"editors5": "125", "editors": "299", "editors100": "11"}, "Haiti": {"editors5": "3", "editors": "6", "editors100": "0"}, "Belize": {"editors5": "2", "editors": "7", "editors100": "0"}, "Hong Kong": {"editors5": "151", "editors": "439", "editors100": "8"}, "Georgia": {"editors5": "35", "editors": "67", "editors100": "5"}, "Lao People's Democratic Republic": {"editors5": "0", "editors": "7", "editors100": "0"}, "Gambia": {"editors5": "0", "editors": "1", "editors100": "0"}, "Philippines": {"editors5": "354", "editors": "895", "editors100": "39"}, "Asia/Pacific Region": {"editors5": "9", "editors": "47", "editors100": "0"}, "Croatia": {"editors5": "67", "editors": "176", "editors100": "7"}, "Mongolia": {"editors5": "6", "editors": "20", "editors100": "0"}, "Guernsey": {"editors5": "0", "editors": "3", "editors100": "0"}, "Namibia": {"editors5": "3", "editors": "9", "editors100": "0"}, "Grenada": {"editors5": "1", "editors": "2", "editors100": "0"}, "Iraq": {"editors5": "5", "editors": "21", "editors100": "0"}, "Tanzania, United Republic of": {"editors5": "7", "editors": "21", "editors100": "1"}, "Estonia": {"editors5": "55", "editors": "126", "editors100": "8"}, "Uruguay": {"editors5": "20", "editors": "60", "editors100": "3"}, "Lebanon": {"editors5": "28", "editors": "79", "editors100": "0"}, "Uzbekistan": {"editors5": "2", "editors": "12", "editors100": "0"}, "Tunisia": {"editors5": "4", "editors": "16", "editors100": "0"}, "Palestinian Territory": {"editors5": "7", "editors": "17", "editors100": "0"}, "Holy See (Vatican City State)": {"editors5": "1", "editors": "2", "editors100": "0"}, "Antigua and Barbuda": {"editors5": "0", "editors": "3", "editors100": "0"}, "Spain": {"editors5": "301", "editors": "1021", "editors100": "25"}, "Colombia": {"editors5": "44", "editors": "147", "editors100": "5"}, "Reunion": {"editors5": "1", "editors": "4", "editors100": "0"}, "Burundi": {"editors5": "0", "editors": "1", "editors100": "0"}, "Taiwan": {"editors5": "73", "editors": "238", "editors100": "1"}, "Fiji": {"editors5": "4", "editors": "10", "editors100": "1"}, "Barbados": {"editors5": "1", "editors": "6", "editors100": "0"}, "Madagascar": {"editors5": "0", "editors": "4", "editors100": "0"}, "Italy": {"editors5": "404", "editors": "1160", "editors100": "36"}, "Bhutan": {"editors5": "1", "editors": "10", "editors100": "0"}, "Sudan": {"editors5": "1", "editors": "12", "editors100": "0"}, "Nepal": {"editors5": "20", "editors": "78", "editors100": "1"}, "Malta": {"editors5": "16", "editors": "62", "editors100": "1"}, "Netherlands": {"editors5": "459", "editors": "1368", "editors100": "64"}, "Anonymous Proxy": {"editors5": "21", "editors": "68", "editors100": "3"}, "Suriname": {"editors5": "0", "editors": "4", "editors100": "0"}, "Venezuela": {"editors5": "30", "editors": "99", "editors100": "2"}, "Netherlands Antilles": {"editors5": "4", "editors": "16", "editors100": "0"}, "Aland Islands": {"editors5": "1", "editors": "4", "editors100": "0"}, "Israel": {"editors5": "223", "editors": "659", "editors100": "23"}, "Iceland": {"editors5": "16", "editors": "75", "editors100": "2"}, "Zambia": {"editors5": "1", "editors": "5", "editors100": "0"}, "Senegal": {"editors5": "3", "editors": "4", "editors100": "0"}, "Papua New Guinea": {"editors5": "0", "editors": "3", "editors100": "0"}, "Invalid IP": {"editors5": "4", "editors": "7", "editors100": "3"}, "Zimbabwe": {"editors5": "1", "editors": "12", "editors100": "0"}, "Germany": {"editors5": "823", "editors": "2917", "editors100": "80"}, "Denmark": {"editors5": "143", "editors": "484", "editors100": "12"}, "Cote D'Ivoire": {"editors5": "1", "editors": "1", "editors100": "0"}, "Moldova, Republic of": {"editors5": "8", "editors": "32", "editors100": "0"}, "Mauritania": {"editors5": "0", "editors": "1", "editors100": "0"}, "Kyrgyzstan": {"editors5": "6", "editors": "18", "editors100": "1"}, "Congo, The Democratic Republic of the": {"editors5": "0", "editors": "1", "editors100": "0"}, "Macedonia": {"editors5": "24", "editors": "62", "editors100": "4"}, "Sri Lanka": {"editors5": "46", "editors": "177", "editors100": "2"}, "Latvia": {"editors5": "34", "editors": "72", "editors100": "3"}, "Guyana": {"editors5": "3", "editors": "6", "editors100": "0"}, "Guadeloupe": {"editors5": "1", "editors": "3", "editors100": "0"}, "Morocco": {"editors5": "9", "editors": "38", "editors100": "1"}, "Honduras": {"editors5": "2", "editors": "18", "editors100": "0"}, "Myanmar": {"editors5": "1", "editors": "2", "editors100": "0"}, "Mexico": {"editors5": "111", "editors": "409", "editors100": "10"}, "Egypt": {"editors5": "43", "editors": "159", "editors100": "0"}, "Nicaragua": {"editors5": "6", "editors": "14", "editors100": "0"}, "Singapore": {"editors5": "241", "editors": "638", "editors100": "17"}, "Serbia": {"editors5": "107", "editors": "293", "editors100": "11"}, "United Kingdom": {"editors5": "4835", "editors": "15157", "editors100": "642"}, "Greece": {"editors5": "129", "editors": "392", "editors100": "9"}, "Paraguay": {"editors5": "4", "editors": "25", "editors100": "0"}, "Gabon": {"editors5": "0", "editors": "1", "editors100": "0"}, "Botswana": {"editors5": "0", "editors": "4", "editors100": "0"}} \ No newline at end of file diff --git a/data/geo/data/en_geo_editors.tsv b/data/geo/data/en_geo_editors.tsv new file mode 100644 index 0000000..52efc67 --- /dev/null +++ b/data/geo/data/en_geo_editors.tsv @@ -0,0 +1,205 @@ +Afghanistan 13 2 0 +Aland Islands 4 1 0 +Albania 40 15 1 +Algeria 16 3 0 +American Samoa 1 1 0 +Andorra 1 0 0 +Angola 1 0 0 +Anonymous Proxy 68 21 3 +Antigua and Barbuda 3 0 0 +Argentina 336 96 9 +Armenia 55 17 1 +Aruba 5 3 1 +Asia/Pacific Region 47 9 0 +Australia 4459 1333 165 +Austria 379 90 4 +Azerbaijan 58 20 2 +Bahamas 13 4 0 +Bahrain 27 8 1 +Bangladesh 248 81 1 +Barbados 6 1 0 +Belarus 67 24 1 +Belgium 541 149 16 +Belize 7 2 0 +Benin 1 0 0 +Bermuda 5 1 0 +Bhutan 10 1 0 +Bolivia 24 2 0 +Bosnia and Herzegovina 67 34 3 +Botswana 4 0 0 +Brazil 768 258 25 +Brunei Darussalam 12 8 1 +Bulgaria 232 85 11 +Burundi 1 0 0 +Cambodia 39 6 0 +Cameroon 3 0 0 +Canada 6666 2088 221 +Cape Verde 2 0 0 +Cayman Islands 7 2 0 +Chile 201 67 6 +China 587 153 11 +Colombia 147 44 5 +Congo, The Democratic Republic of the 1 0 0 +Costa Rica 62 19 0 +Cote D'Ivoire 1 1 0 +Croatia 176 67 7 +Cuba 22 6 1 +Cyprus 77 24 3 +Czech Republic 350 101 11 +Denmark 484 143 12 +Dominica 8 3 0 +Dominican Republic 44 14 1 +Ecuador 52 24 2 +Egypt 159 43 0 +El Salvador 19 3 1 +Estonia 126 55 8 +Ethiopia 21 4 0 +Europe 149 42 2 +Faroe Islands 8 2 0 +Fiji 10 4 1 +Finland 558 168 21 +France 1760 482 31 +French Guiana 2 0 0 +French Polynesia 3 1 0 +Gabon 1 0 0 +Gambia 1 0 0 +Georgia 67 35 5 +Germany 2917 823 80 +Ghana 32 8 1 +Gibraltar 5 2 0 +Greece 392 129 9 +Greenland 1 0 0 +Grenada 2 1 0 +Guadeloupe 3 1 0 +Guam 4 1 0 +Guatemala 25 3 0 +Guernsey 3 0 0 +Guinea 1 1 0 +Guyana 6 3 0 +Haiti 6 3 0 +Holy See (Vatican City State) 2 1 0 +Honduras 18 2 0 +Hong Kong 439 151 8 +Hungary 319 110 11 +Iceland 75 16 2 +India 5417 1513 95 +Indonesia 406 149 13 +Invalid IP 7 4 3 +Iran, Islamic Republic of 284 95 9 +Iraq 21 5 0 +Ireland 879 290 27 +Isle of Man 27 6 1 +Israel 659 223 23 +Italy 1160 404 36 +Jamaica 35 11 0 +Japan 695 210 22 +Jersey 16 9 2 +Jordan 52 20 0 +Kazakstan 42 12 0 +Kenya 78 16 0 +Korea, Republic of 412 151 11 +Kuwait 60 20 2 +Kyrgyzstan 18 6 1 +Lao People's Democratic Republic 7 0 0 +Latvia 72 34 3 +Lebanon 79 28 0 +Lesotho 1 0 0 +Liberia 2 1 0 +Libyan Arab Jamahiriya 7 6 0 +Lithuania 94 31 3 +Luxembourg 58 20 2 +Macau 16 3 0 +Macedonia 62 24 4 +Madagascar 4 0 0 +Malawi 3 1 0 +Malaysia 470 177 12 +Maldives 45 17 2 +Mali 3 1 0 +Malta 62 16 1 +Martinique 2 0 0 +Mauritania 1 0 0 +Mauritius 27 6 1 +Mexico 409 111 10 +Micronesia, Federated States of 1 0 0 +Moldova, Republic of 32 8 0 +Monaco 4 1 0 +Mongolia 20 6 0 +Montenegro 16 9 2 +Morocco 38 9 1 +Mozambique 6 2 0 +Myanmar 2 1 0 +Namibia 9 3 0 +Nepal 78 20 1 +Netherlands 1368 459 64 +Netherlands Antilles 16 4 0 +New Zealand 832 260 31 +Nicaragua 14 6 0 +Niger 1 0 0 +Nigeria 79 14 0 +Northern Mariana Islands 3 2 0 +Norway 657 186 20 +Oman 30 8 0 +Pakistan 687 190 14 +Palestinian Territory 17 7 0 +Panama 33 12 0 +Papua New Guinea 3 0 0 +Paraguay 25 4 0 +Peru 99 39 2 +Philippines 895 354 39 +Poland 635 182 15 +Portugal 299 108 12 +Puerto Rico 92 30 1 +Qatar 63 13 2 +Reunion 4 1 0 +Romania 351 130 9 +Russian Federation 953 266 24 +Rwanda 7 3 0 +Saint Kitts and Nevis 5 2 0 +Saint Lucia 7 3 1 +Saint Vincent and the Grenadines 1 0 0 +Samoa 2 0 0 +San Marino 1 0 0 +Satellite Provider 6 2 0 +Saudi Arabia 194 57 5 +Senegal 4 3 0 +Serbia 293 107 11 +Seychelles 2 0 0 +Singapore 638 241 17 +Slovakia 112 30 2 +Slovenia 158 41 7 +Solomon Islands 1 0 0 +Somalia 4 0 0 +South Africa 366 115 9 +Spain 1021 301 25 +Sri Lanka 177 46 2 +Sudan 12 1 0 +Suriname 4 0 0 +Sweden 1006 308 28 +Switzerland 503 132 11 +Syrian Arab Republic 6 3 0 +Taiwan 238 73 1 +Tajikistan 2 2 0 +Tanzania, United Republic of 21 7 1 +Thailand 299 125 11 +Tonga 2 0 0 +Trinidad and Tobago 48 8 0 +Tunisia 16 4 0 +Turkey 393 128 11 +Turkmenistan 1 1 0 +Turks and Caicos Islands 1 1 0 +Tuvalu 1 1 0 +Uganda 28 2 0 +Ukraine 367 106 5 +United Arab Emirates 320 101 1 +United Kingdom 15157 4835 642 +United States 50197 14080 1377 +Uruguay 60 20 3 +Uzbekistan 12 2 0 +Vanuatu 2 1 0 +Venezuela 99 30 2 +Vietnam 140 46 1 +Virgin Islands, British 8 3 0 +Virgin Islands, U.S. 5 2 0 +Yemen 5 1 1 +Zambia 5 1 0 +Zimbabwe 12 1 0 diff --git a/data/geo/maps/world-countries.json b/data/geo/maps/world-countries.json index c5094ce..788dbbd 100755 --- a/data/geo/maps/world-countries.json +++ b/data/geo/maps/world-countries.json @@ -16,13 +16,13 @@ {"type":"Feature","properties":{"name":"Burkina Faso"},"geometry":{"type":"Polygon","coordinates":[[[-2.827496,9.642461],[-3.511899,9.900326],[-3.980449,9.862344],[-4.330247,9.610835],[-4.779884,9.821985],[-4.954653,10.152714],[-5.404342,10.370737],[-5.470565,10.95127],[-5.197843,11.375146],[-5.220942,11.713859],[-4.427166,12.542646],[-4.280405,13.228444],[-4.006391,13.472485],[-3.522803,13.337662],[-3.103707,13.541267],[-2.967694,13.79815],[-2.191825,14.246418],[-2.001035,14.559008],[-1.066363,14.973815],[-0.515854,15.116158],[-0.266257,14.924309],[0.374892,14.928908],[0.295646,14.444235],[0.429928,13.988733],[0.993046,13.33575],[1.024103,12.851826],[2.177108,12.625018],[2.154474,11.94015],[1.935986,11.64115],[1.447178,11.547719],[1.24347,11.110511],[0.899563,10.997339],[0.023803,11.018682],[-0.438702,11.098341],[-0.761576,10.93693],[-1.203358,11.009819],[-2.940409,10.96269],[-2.963896,10.395335],[-2.827496,9.642461]]]},"id":"BFA"}, {"type":"Feature","properties":{"name":"Bangladesh"},"geometry":{"type":"Polygon","coordinates":[[[92.672721,22.041239],[92.652257,21.324048],[92.303234,21.475485],[92.368554,20.670883],[92.082886,21.192195],[92.025215,21.70157],[91.834891,22.182936],[91.417087,22.765019],[90.496006,22.805017],[90.586957,22.392794],[90.272971,21.836368],[89.847467,22.039146],[89.70205,21.857116],[89.418863,21.966179],[89.031961,22.055708],[88.876312,22.879146],[88.52977,23.631142],[88.69994,24.233715],[88.084422,24.501657],[88.306373,24.866079],[88.931554,25.238692],[88.209789,25.768066],[88.563049,26.446526],[89.355094,26.014407],[89.832481,25.965082],[89.920693,25.26975],[90.872211,25.132601],[91.799596,25.147432],[92.376202,24.976693],[91.915093,24.130414],[91.46773,24.072639],[91.158963,23.503527],[91.706475,22.985264],[91.869928,23.624346],[92.146035,23.627499],[92.672721,22.041239]]]},"id":"BGD"}, {"type":"Feature","properties":{"name":"Bulgaria"},"geometry":{"type":"Polygon","coordinates":[[[22.65715,44.234923],[22.944832,43.823785],[23.332302,43.897011],[24.100679,43.741051],[25.569272,43.688445],[26.065159,43.943494],[27.2424,44.175986],[27.970107,43.812468],[28.558081,43.707462],[28.039095,43.293172],[27.673898,42.577892],[27.99672,42.007359],[27.135739,42.141485],[26.117042,41.826905],[26.106138,41.328899],[25.197201,41.234486],[24.492645,41.583896],[23.692074,41.309081],[22.952377,41.337994],[22.881374,41.999297],[22.380526,42.32026],[22.545012,42.461362],[22.436595,42.580321],[22.604801,42.898519],[22.986019,43.211161],[22.500157,43.642814],[22.410446,44.008063],[22.65715,44.234923]]]},"id":"BGR"}, -{"type":"Feature","properties":{"name":"The Bahamas"},"geometry":{"type":"MultiPolygon","coordinates":[[[[-77.53466,23.75975],[-77.78,23.71],[-78.03405,24.28615],[-78.40848,24.57564],[-78.19087,25.2103],[-77.89,25.17],[-77.54,24.34],[-77.53466,23.75975]]],[[[-77.82,26.58],[-78.91,26.42],[-78.98,26.79],[-78.51,26.87],[-77.85,26.84],[-77.82,26.58]]],[[[-77,26.59],[-77.17255,25.87918],[-77.35641,26.00735],[-77.34,26.53],[-77.78802,26.92516],[-77.79,27.04],[-77,26.59]]]]},"id":"BHS"}, +{"type":"Feature","properties":{"name":"Bahamas"},"geometry":{"type":"MultiPolygon","coordinates":[[[[-77.53466,23.75975],[-77.78,23.71],[-78.03405,24.28615],[-78.40848,24.57564],[-78.19087,25.2103],[-77.89,25.17],[-77.54,24.34],[-77.53466,23.75975]]],[[[-77.82,26.58],[-78.91,26.42],[-78.98,26.79],[-78.51,26.87],[-77.85,26.84],[-77.82,26.58]]],[[[-77,26.59],[-77.17255,25.87918],[-77.35641,26.00735],[-77.34,26.53],[-77.78802,26.92516],[-77.79,27.04],[-77,26.59]]]]},"id":"BHS"}, {"type":"Feature","properties":{"name":"Bosnia and Herzegovina"},"geometry":{"type":"Polygon","coordinates":[[[19.005486,44.860234],[19.36803,44.863],[19.11761,44.42307],[19.59976,44.03847],[19.454,43.5681],[19.21852,43.52384],[19.03165,43.43253],[18.70648,43.20011],[18.56,42.65],[17.674922,43.028563],[17.297373,43.446341],[16.916156,43.667722],[16.456443,44.04124],[16.23966,44.351143],[15.750026,44.818712],[15.959367,45.233777],[16.318157,45.004127],[16.534939,45.211608],[17.002146,45.233777],[17.861783,45.06774],[18.553214,45.08159],[19.005486,44.860234]]]},"id":"BIH"}, {"type":"Feature","properties":{"name":"Belarus"},"geometry":{"type":"Polygon","coordinates":[[[23.484128,53.912498],[24.450684,53.905702],[25.536354,54.282423],[25.768433,54.846963],[26.588279,55.167176],[26.494331,55.615107],[27.10246,55.783314],[28.176709,56.16913],[29.229513,55.918344],[29.371572,55.670091],[29.896294,55.789463],[30.873909,55.550976],[30.971836,55.081548],[30.757534,54.811771],[31.384472,54.157056],[31.791424,53.974639],[31.731273,53.794029],[32.405599,53.618045],[32.693643,53.351421],[32.304519,53.132726],[31.497644,53.167427],[31.305201,53.073996],[31.540018,52.742052],[31.785998,52.101678],[30.927549,52.042353],[30.619454,51.822806],[30.555117,51.319503],[30.157364,51.416138],[29.254938,51.368234],[28.992835,51.602044],[28.617613,51.427714],[28.241615,51.572227],[27.454066,51.592303],[26.337959,51.832289],[25.327788,51.910656],[24.553106,51.888461],[24.005078,51.617444],[23.527071,51.578454],[23.508002,52.023647],[23.199494,52.486977],[23.799199,52.691099],[23.804935,53.089731],[23.527536,53.470122],[23.484128,53.912498]]]},"id":"BLR"}, {"type":"Feature","properties":{"name":"Belize"},"geometry":{"type":"Polygon","coordinates":[[[-89.14308,17.808319],[-89.150909,17.955468],[-89.029857,18.001511],[-88.848344,17.883198],[-88.490123,18.486831],[-88.300031,18.499982],[-88.296336,18.353273],[-88.106813,18.348674],[-88.123479,18.076675],[-88.285355,17.644143],[-88.197867,17.489475],[-88.302641,17.131694],[-88.239518,17.036066],[-88.355428,16.530774],[-88.551825,16.265467],[-88.732434,16.233635],[-88.930613,15.887273],[-89.229122,15.886938],[-89.150806,17.015577],[-89.14308,17.808319]]]},"id":"BLZ"}, {"type":"Feature","properties":{"name":"Bolivia"},"geometry":{"type":"Polygon","coordinates":[[[-62.846468,-22.034985],[-63.986838,-21.993644],[-64.377021,-22.798091],[-64.964892,-22.075862],[-66.273339,-21.83231],[-67.106674,-22.735925],[-67.82818,-22.872919],[-68.219913,-21.494347],[-68.757167,-20.372658],[-68.442225,-19.405068],[-68.966818,-18.981683],[-69.100247,-18.260125],[-69.590424,-17.580012],[-68.959635,-16.500698],[-69.389764,-15.660129],[-69.160347,-15.323974],[-69.339535,-14.953195],[-68.948887,-14.453639],[-68.929224,-13.602684],[-68.88008,-12.899729],[-68.66508,-12.5613],[-69.529678,-10.951734],[-68.786158,-11.03638],[-68.271254,-11.014521],[-68.048192,-10.712059],[-67.173801,-10.306812],[-66.646908,-9.931331],[-65.338435,-9.761988],[-65.444837,-10.511451],[-65.321899,-10.895872],[-65.402281,-11.56627],[-64.316353,-12.461978],[-63.196499,-12.627033],[-62.80306,-13.000653],[-62.127081,-13.198781],[-61.713204,-13.489202],[-61.084121,-13.479384],[-60.503304,-13.775955],[-60.459198,-14.354007],[-60.264326,-14.645979],[-60.251149,-15.077219],[-60.542966,-15.09391],[-60.15839,-16.258284],[-58.24122,-16.299573],[-58.388058,-16.877109],[-58.280804,-17.27171],[-57.734558,-17.552468],[-57.498371,-18.174188],[-57.676009,-18.96184],[-57.949997,-19.400004],[-57.853802,-19.969995],[-58.166392,-20.176701],[-58.183471,-19.868399],[-59.115042,-19.356906],[-60.043565,-19.342747],[-61.786326,-19.633737],[-62.265961,-20.513735],[-62.291179,-21.051635],[-62.685057,-22.249029],[-62.846468,-22.034985]]]},"id":"BOL"}, {"type":"Feature","properties":{"name":"Brazil"},"geometry":{"type":"Polygon","coordinates":[[[-57.625133,-30.216295],[-56.2909,-28.852761],[-55.162286,-27.881915],[-54.490725,-27.474757],[-53.648735,-26.923473],[-53.628349,-26.124865],[-54.13005,-25.547639],[-54.625291,-25.739255],[-54.428946,-25.162185],[-54.293476,-24.5708],[-54.29296,-24.021014],[-54.652834,-23.839578],[-55.027902,-24.001274],[-55.400747,-23.956935],[-55.517639,-23.571998],[-55.610683,-22.655619],[-55.797958,-22.35693],[-56.473317,-22.0863],[-56.88151,-22.282154],[-57.937156,-22.090176],[-57.870674,-20.732688],[-58.166392,-20.176701],[-57.853802,-19.969995],[-57.949997,-19.400004],[-57.676009,-18.96184],[-57.498371,-18.174188],[-57.734558,-17.552468],[-58.280804,-17.27171],[-58.388058,-16.877109],[-58.24122,-16.299573],[-60.15839,-16.258284],[-60.542966,-15.09391],[-60.251149,-15.077219],[-60.264326,-14.645979],[-60.459198,-14.354007],[-60.503304,-13.775955],[-61.084121,-13.479384],[-61.713204,-13.489202],[-62.127081,-13.198781],[-62.80306,-13.000653],[-63.196499,-12.627033],[-64.316353,-12.461978],[-65.402281,-11.56627],[-65.321899,-10.895872],[-65.444837,-10.511451],[-65.338435,-9.761988],[-66.646908,-9.931331],[-67.173801,-10.306812],[-68.048192,-10.712059],[-68.271254,-11.014521],[-68.786158,-11.03638],[-69.529678,-10.951734],[-70.093752,-11.123972],[-70.548686,-11.009147],[-70.481894,-9.490118],[-71.302412,-10.079436],[-72.184891,-10.053598],[-72.563033,-9.520194],[-73.226713,-9.462213],[-73.015383,-9.032833],[-73.571059,-8.424447],[-73.987235,-7.52383],[-73.723401,-7.340999],[-73.724487,-6.918595],[-73.120027,-6.629931],[-73.219711,-6.089189],[-72.964507,-5.741251],[-72.891928,-5.274561],[-71.748406,-4.593983],[-70.928843,-4.401591],[-70.794769,-4.251265],[-69.893635,-4.298187],[-69.444102,-1.556287],[-69.420486,-1.122619],[-69.577065,-0.549992],[-70.020656,-0.185156],[-70.015566,0.541414],[-69.452396,0.706159],[-69.252434,0.602651],[-69.218638,0.985677],[-69.804597,1.089081],[-69.816973,1.714805],[-67.868565,1.692455],[-67.53781,2.037163],[-67.259998,1.719999],[-67.065048,1.130112],[-66.876326,1.253361],[-66.325765,0.724452],[-65.548267,0.789254],[-65.354713,1.095282],[-64.611012,1.328731],[-64.199306,1.492855],[-64.083085,1.916369],[-63.368788,2.2009],[-63.422867,2.411068],[-64.269999,2.497006],[-64.408828,3.126786],[-64.368494,3.79721],[-64.816064,4.056445],[-64.628659,4.148481],[-63.888343,4.02053],[-63.093198,3.770571],[-62.804533,4.006965],[-62.08543,4.162124],[-60.966893,4.536468],[-60.601179,4.918098],[-60.733574,5.200277],[-60.213683,5.244486],[-59.980959,5.014061],[-60.111002,4.574967],[-59.767406,4.423503],[-59.53804,3.958803],[-59.815413,3.606499],[-59.974525,2.755233],[-59.718546,2.24963],[-59.646044,1.786894],[-59.030862,1.317698],[-58.540013,1.268088],[-58.429477,1.463942],[-58.11345,1.507195],[-57.660971,1.682585],[-57.335823,1.948538],[-56.782704,1.863711],[-56.539386,1.899523],[-55.995698,1.817667],[-55.9056,2.021996],[-56.073342,2.220795],[-55.973322,2.510364],[-55.569755,2.421506],[-55.097587,2.523748],[-54.524754,2.311849],[-54.088063,2.105557],[-53.778521,2.376703],[-53.554839,2.334897],[-53.418465,2.053389],[-52.939657,2.124858],[-52.556425,2.504705],[-52.249338,3.241094],[-51.657797,4.156232],[-51.317146,4.203491],[-51.069771,3.650398],[-50.508875,1.901564],[-49.974076,1.736483],[-49.947101,1.04619],[-50.699251,0.222984],[-50.388211,-0.078445],[-48.620567,-0.235489],[-48.584497,-1.237805],[-47.824956,-0.581618],[-46.566584,-0.941028],[-44.905703,-1.55174],[-44.417619,-2.13775],[-44.581589,-2.691308],[-43.418791,-2.38311],[-41.472657,-2.912018],[-39.978665,-2.873054],[-38.500383,-3.700652],[-37.223252,-4.820946],[-36.452937,-5.109404],[-35.597796,-5.149504],[-35.235389,-5.464937],[-34.89603,-6.738193],[-34.729993,-7.343221],[-35.128212,-8.996401],[-35.636967,-9.649282],[-37.046519,-11.040721],[-37.683612,-12.171195],[-38.423877,-13.038119],[-38.673887,-13.057652],[-38.953276,-13.79337],[-38.882298,-15.667054],[-39.161092,-17.208407],[-39.267339,-17.867746],[-39.583521,-18.262296],[-39.760823,-19.599113],[-40.774741,-20.904512],[-40.944756,-21.937317],[-41.754164,-22.370676],[-41.988284,-22.97007],[-43.074704,-22.967693],[-44.647812,-23.351959],[-45.352136,-23.796842],[-46.472093,-24.088969],[-47.648972,-24.885199],[-48.495458,-25.877025],[-48.641005,-26.623698],[-48.474736,-27.175912],[-48.66152,-28.186135],[-48.888457,-28.674115],[-49.587329,-29.224469],[-50.696874,-30.984465],[-51.576226,-31.777698],[-52.256081,-32.24537],[-52.7121,-33.196578],[-53.373662,-33.768378],[-53.650544,-33.202004],[-53.209589,-32.727666],[-53.787952,-32.047243],[-54.572452,-31.494511],[-55.60151,-30.853879],[-55.973245,-30.883076],[-56.976026,-30.109686],[-57.625133,-30.216295]]]},"id":"BRA"}, -{"type":"Feature","properties":{"name":"Brunei"},"geometry":{"type":"Polygon","coordinates":[[[114.204017,4.525874],[114.599961,4.900011],[115.45071,5.44773],[115.4057,4.955228],[115.347461,4.316636],[114.869557,4.348314],[114.659596,4.007637],[114.204017,4.525874]]]},"id":"BRN"}, +{"type":"Feature","properties":{"name":"Brunei Darussalam"},"geometry":{"type":"Polygon","coordinates":[[[114.204017,4.525874],[114.599961,4.900011],[115.45071,5.44773],[115.4057,4.955228],[115.347461,4.316636],[114.869557,4.348314],[114.659596,4.007637],[114.204017,4.525874]]]},"id":"BRN"}, {"type":"Feature","properties":{"name":"Bhutan"},"geometry":{"type":"Polygon","coordinates":[[[91.696657,27.771742],[92.103712,27.452614],[92.033484,26.83831],[91.217513,26.808648],[90.373275,26.875724],[89.744528,26.719403],[88.835643,27.098966],[88.814248,27.299316],[89.47581,28.042759],[90.015829,28.296439],[90.730514,28.064954],[91.258854,28.040614],[91.696657,27.771742]]]},"id":"BTN"}, {"type":"Feature","properties":{"name":"Botswana"},"geometry":{"type":"Polygon","coordinates":[[[25.649163,-18.536026],[25.850391,-18.714413],[26.164791,-19.293086],[27.296505,-20.39152],[27.724747,-20.499059],[27.727228,-20.851802],[28.02137,-21.485975],[28.794656,-21.639454],[29.432188,-22.091313],[28.017236,-22.827754],[27.11941,-23.574323],[26.786407,-24.240691],[26.485753,-24.616327],[25.941652,-24.696373],[25.765849,-25.174845],[25.664666,-25.486816],[25.025171,-25.71967],[24.211267,-25.670216],[23.73357,-25.390129],[23.312097,-25.26869],[22.824271,-25.500459],[22.579532,-25.979448],[22.105969,-26.280256],[21.605896,-26.726534],[20.889609,-26.828543],[20.66647,-26.477453],[20.758609,-25.868136],[20.165726,-24.917962],[19.895768,-24.76779],[19.895458,-21.849157],[20.881134,-21.814327],[20.910641,-18.252219],[21.65504,-18.219146],[23.196858,-17.869038],[23.579006,-18.281261],[24.217365,-17.889347],[24.520705,-17.887125],[25.084443,-17.661816],[25.264226,-17.73654],[25.649163,-18.536026]]]},"id":"BWA"}, {"type":"Feature","properties":{"name":"Central African Republic"},"geometry":{"type":"Polygon","coordinates":[[[15.27946,7.421925],[16.106232,7.497088],[16.290562,7.754307],[16.456185,7.734774],[16.705988,7.508328],[17.96493,7.890914],[18.389555,8.281304],[18.911022,8.630895],[18.81201,8.982915],[19.094008,9.074847],[20.059685,9.012706],[21.000868,9.475985],[21.723822,10.567056],[22.231129,10.971889],[22.864165,11.142395],[22.977544,10.714463],[23.554304,10.089255],[23.55725,9.681218],[23.394779,9.265068],[23.459013,8.954286],[23.805813,8.666319],[24.567369,8.229188],[25.114932,7.825104],[25.124131,7.500085],[25.796648,6.979316],[26.213418,6.546603],[26.465909,5.946717],[27.213409,5.550953],[27.374226,5.233944],[27.044065,5.127853],[26.402761,5.150875],[25.650455,5.256088],[25.278798,5.170408],[25.128833,4.927245],[24.805029,4.897247],[24.410531,5.108784],[23.297214,4.609693],[22.84148,4.710126],[22.704124,4.633051],[22.405124,4.02916],[21.659123,4.224342],[20.927591,4.322786],[20.290679,4.691678],[19.467784,5.031528],[18.932312,4.709506],[18.542982,4.201785],[18.453065,3.504386],[17.8099,3.560196],[17.133042,3.728197],[16.537058,3.198255],[16.012852,2.26764],[15.907381,2.557389],[15.862732,3.013537],[15.405396,3.335301],[15.03622,3.851367],[14.950953,4.210389],[14.478372,4.732605],[14.558936,5.030598],[14.459407,5.451761],[14.53656,6.226959],[14.776545,6.408498],[15.27946,7.421925]]]},"id":"CAF"}, @@ -30,9 +30,9 @@ {"type":"Feature","properties":{"name":"Switzerland"},"geometry":{"type":"Polygon","coordinates":[[[9.594226,47.525058],[9.632932,47.347601],[9.47997,47.10281],[9.932448,46.920728],[10.442701,46.893546],[10.363378,46.483571],[9.922837,46.314899],[9.182882,46.440215],[8.966306,46.036932],[8.489952,46.005151],[8.31663,46.163642],[7.755992,45.82449],[7.273851,45.776948],[6.843593,45.991147],[6.5001,46.429673],[6.022609,46.27299],[6.037389,46.725779],[6.768714,47.287708],[6.736571,47.541801],[7.192202,47.449766],[7.466759,47.620582],[8.317301,47.61358],[8.522612,47.830828],[9.594226,47.525058]]]},"id":"CHE"}, {"type":"Feature","properties":{"name":"Chile"},"geometry":{"type":"MultiPolygon","coordinates":[[[[-68.63401,-52.63637],[-68.63335,-54.8695],[-67.56244,-54.87001],[-66.95992,-54.89681],[-67.29103,-55.30124],[-68.14863,-55.61183],[-68.639991,-55.580018],[-69.2321,-55.49906],[-69.95809,-55.19843],[-71.00568,-55.05383],[-72.2639,-54.49514],[-73.2852,-53.95752],[-74.66253,-52.83749],[-73.8381,-53.04743],[-72.43418,-53.7154],[-71.10773,-54.07433],[-70.59178,-53.61583],[-70.26748,-52.93123],[-69.34565,-52.5183],[-68.63401,-52.63637]]],[[[-68.219913,-21.494347],[-67.82818,-22.872919],[-67.106674,-22.735925],[-66.985234,-22.986349],[-67.328443,-24.025303],[-68.417653,-24.518555],[-68.386001,-26.185016],[-68.5948,-26.506909],[-68.295542,-26.89934],[-69.001235,-27.521214],[-69.65613,-28.459141],[-70.01355,-29.367923],[-69.919008,-30.336339],[-70.535069,-31.36501],[-70.074399,-33.09121],[-69.814777,-33.273886],[-69.817309,-34.193571],[-70.388049,-35.169688],[-70.364769,-36.005089],[-71.121881,-36.658124],[-71.118625,-37.576827],[-70.814664,-38.552995],[-71.413517,-38.916022],[-71.680761,-39.808164],[-71.915734,-40.832339],[-71.746804,-42.051386],[-72.148898,-42.254888],[-71.915424,-43.408565],[-71.464056,-43.787611],[-71.793623,-44.207172],[-71.329801,-44.407522],[-71.222779,-44.784243],[-71.659316,-44.973689],[-71.552009,-45.560733],[-71.917258,-46.884838],[-72.447355,-47.738533],[-72.331161,-48.244238],[-72.648247,-48.878618],[-73.415436,-49.318436],[-73.328051,-50.378785],[-72.975747,-50.74145],[-72.309974,-50.67701],[-72.329404,-51.425956],[-71.914804,-52.009022],[-69.498362,-52.142761],[-68.571545,-52.299444],[-69.461284,-52.291951],[-69.94278,-52.537931],[-70.845102,-52.899201],[-71.006332,-53.833252],[-71.429795,-53.856455],[-72.557943,-53.53141],[-73.702757,-52.835069],[-73.702757,-52.83507],[-74.946763,-52.262754],[-75.260026,-51.629355],[-74.976632,-51.043396],[-75.479754,-50.378372],[-75.608015,-48.673773],[-75.18277,-47.711919],[-74.126581,-46.939253],[-75.644395,-46.647643],[-74.692154,-45.763976],[-74.351709,-44.103044],[-73.240356,-44.454961],[-72.717804,-42.383356],[-73.3889,-42.117532],[-73.701336,-43.365776],[-74.331943,-43.224958],[-74.017957,-41.794813],[-73.677099,-39.942213],[-73.217593,-39.258689],[-73.505559,-38.282883],[-73.588061,-37.156285],[-73.166717,-37.12378],[-72.553137,-35.50884],[-71.861732,-33.909093],[-71.43845,-32.418899],[-71.668721,-30.920645],[-71.370083,-30.095682],[-71.489894,-28.861442],[-70.905124,-27.64038],[-70.724954,-25.705924],[-70.403966,-23.628997],[-70.091246,-21.393319],[-70.16442,-19.756468],[-70.372572,-18.347975],[-69.858444,-18.092694],[-69.590424,-17.580012],[-69.100247,-18.260125],[-68.966818,-18.981683],[-68.442225,-19.405068],[-68.757167,-20.372658],[-68.219913,-21.494347]]]]},"id":"CHL"}, {"type":"Feature","properties":{"name":"China"},"geometry":{"type":"MultiPolygon","coordinates":[[[[110.339188,18.678395],[109.47521,18.197701],[108.655208,18.507682],[108.626217,19.367888],[109.119056,19.821039],[110.211599,20.101254],[110.786551,20.077534],[111.010051,19.69593],[110.570647,19.255879],[110.339188,18.678395]]],[[[127.657407,49.76027],[129.397818,49.4406],[130.582293,48.729687],[130.987282,47.790132],[132.506672,47.78897],[133.373596,48.183442],[135.026311,48.47823],[134.500814,47.57844],[134.112362,47.212467],[133.769644,46.116927],[133.097127,45.144066],[131.883454,45.321162],[131.025212,44.967953],[131.288555,44.11152],[131.144688,42.92999],[130.633866,42.903015],[130.640016,42.395009],[129.994267,42.985387],[129.596669,42.424982],[128.052215,41.994285],[128.208433,41.466772],[127.343783,41.503152],[126.869083,41.816569],[126.182045,41.107336],[125.079942,40.569824],[124.265625,39.928493],[122.86757,39.637788],[122.131388,39.170452],[121.054554,38.897471],[121.585995,39.360854],[121.376757,39.750261],[122.168595,40.422443],[121.640359,40.94639],[120.768629,40.593388],[119.639602,39.898056],[119.023464,39.252333],[118.042749,39.204274],[117.532702,38.737636],[118.059699,38.061476],[118.87815,37.897325],[118.911636,37.448464],[119.702802,37.156389],[120.823457,37.870428],[121.711259,37.481123],[122.357937,37.454484],[122.519995,36.930614],[121.104164,36.651329],[120.637009,36.11144],[119.664562,35.609791],[119.151208,34.909859],[120.227525,34.360332],[120.620369,33.376723],[121.229014,32.460319],[121.908146,31.692174],[121.891919,30.949352],[121.264257,30.676267],[121.503519,30.142915],[122.092114,29.83252],[121.938428,29.018022],[121.684439,28.225513],[121.125661,28.135673],[120.395473,27.053207],[119.585497,25.740781],[118.656871,24.547391],[117.281606,23.624501],[115.890735,22.782873],[114.763827,22.668074],[114.152547,22.22376],[113.80678,22.54834],[113.241078,22.051367],[111.843592,21.550494],[110.785466,21.397144],[110.444039,20.341033],[109.889861,20.282457],[109.627655,21.008227],[109.864488,21.395051],[108.522813,21.715212],[108.05018,21.55238],[107.04342,21.811899],[106.567273,22.218205],[106.725403,22.794268],[105.811247,22.976892],[105.329209,23.352063],[104.476858,22.81915],[103.504515,22.703757],[102.706992,22.708795],[102.170436,22.464753],[101.652018,22.318199],[101.80312,21.174367],[101.270026,21.201652],[101.180005,21.436573],[101.150033,21.849984],[100.416538,21.558839],[99.983489,21.742937],[99.240899,22.118314],[99.531992,22.949039],[98.898749,23.142722],[98.660262,24.063286],[97.60472,23.897405],[97.724609,25.083637],[98.671838,25.918703],[98.712094,26.743536],[98.68269,27.508812],[98.246231,27.747221],[97.911988,28.335945],[97.327114,28.261583],[96.248833,28.411031],[96.586591,28.83098],[96.117679,29.452802],[95.404802,29.031717],[94.56599,29.277438],[93.413348,28.640629],[92.503119,27.896876],[91.696657,27.771742],[91.258854,28.040614],[90.730514,28.064954],[90.015829,28.296439],[89.47581,28.042759],[88.814248,27.299316],[88.730326,28.086865],[88.120441,27.876542],[86.954517,27.974262],[85.82332,28.203576],[85.011638,28.642774],[84.23458,28.839894],[83.898993,29.320226],[83.337115,29.463732],[82.327513,30.115268],[81.525804,30.422717],[81.111256,30.183481],[79.721367,30.882715],[78.738894,31.515906],[78.458446,32.618164],[79.176129,32.48378],[79.208892,32.994395],[78.811086,33.506198],[78.912269,34.321936],[77.837451,35.49401],[76.192848,35.898403],[75.896897,36.666806],[75.158028,37.133031],[74.980002,37.41999],[74.829986,37.990007],[74.864816,38.378846],[74.257514,38.606507],[73.928852,38.505815],[73.675379,39.431237],[73.960013,39.660008],[73.822244,39.893973],[74.776862,40.366425],[75.467828,40.562072],[76.526368,40.427946],[76.904484,41.066486],[78.187197,41.185316],[78.543661,41.582243],[80.11943,42.123941],[80.25999,42.349999],[80.18015,42.920068],[80.866206,43.180362],[79.966106,44.917517],[81.947071,45.317027],[82.458926,45.53965],[83.180484,47.330031],[85.16429,47.000956],[85.720484,47.452969],[85.768233,48.455751],[86.598776,48.549182],[87.35997,49.214981],[87.751264,49.297198],[88.013832,48.599463],[88.854298,48.069082],[90.280826,47.693549],[90.970809,46.888146],[90.585768,45.719716],[90.94554,45.286073],[92.133891,45.115076],[93.480734,44.975472],[94.688929,44.352332],[95.306875,44.241331],[95.762455,43.319449],[96.349396,42.725635],[97.451757,42.74889],[99.515817,42.524691],[100.845866,42.663804],[101.83304,42.514873],[103.312278,41.907468],[104.522282,41.908347],[104.964994,41.59741],[106.129316,42.134328],[107.744773,42.481516],[109.243596,42.519446],[110.412103,42.871234],[111.129682,43.406834],[111.829588,43.743118],[111.667737,44.073176],[111.348377,44.457442],[111.873306,45.102079],[112.436062,45.011646],[113.463907,44.808893],[114.460332,45.339817],[115.985096,45.727235],[116.717868,46.388202],[117.421701,46.672733],[118.874326,46.805412],[119.66327,46.69268],[119.772824,47.048059],[118.866574,47.74706],[118.064143,48.06673],[117.295507,47.697709],[116.308953,47.85341],[115.742837,47.726545],[115.485282,48.135383],[116.191802,49.134598],[116.678801,49.888531],[117.879244,49.510983],[119.288461,50.142883],[119.279366,50.582908],[120.18205,51.643566],[120.738191,51.964115],[120.725789,52.516226],[120.177089,52.753886],[121.003085,53.251401],[122.245748,53.431726],[123.571507,53.458804],[125.068211,53.161045],[125.946349,52.792799],[126.564399,51.784255],[126.939157,51.353894],[127.287456,50.739797],[127.657407,49.76027]]]]},"id":"CHN"}, -{"type":"Feature","properties":{"name":"Ivory Coast"},"geometry":{"type":"Polygon","coordinates":[[[-2.856125,4.994476],[-3.311084,4.984296],[-4.00882,5.179813],[-4.649917,5.168264],[-5.834496,4.993701],[-6.528769,4.705088],[-7.518941,4.338288],[-7.712159,4.364566],[-7.635368,5.188159],[-7.539715,5.313345],[-7.570153,5.707352],[-7.993693,6.12619],[-8.311348,6.193033],[-8.60288,6.467564],[-8.385452,6.911801],[-8.485446,7.395208],[-8.439298,7.686043],[-8.280703,7.68718],[-8.221792,8.123329],[-8.299049,8.316444],[-8.203499,8.455453],[-7.8321,8.575704],[-8.079114,9.376224],[-8.309616,9.789532],[-8.229337,10.12902],[-8.029944,10.206535],[-7.89959,10.297382],[-7.622759,10.147236],[-6.850507,10.138994],[-6.666461,10.430811],[-6.493965,10.411303],[-6.205223,10.524061],[-6.050452,10.096361],[-5.816926,10.222555],[-5.404342,10.370737],[-4.954653,10.152714],[-4.779884,9.821985],[-4.330247,9.610835],[-3.980449,9.862344],[-3.511899,9.900326],[-2.827496,9.642461],[-2.56219,8.219628],[-2.983585,7.379705],[-3.24437,6.250472],[-2.810701,5.389051],[-2.856125,4.994476]]]},"id":"CIV"}, +{"type":"Feature","properties":{"name":"Cote D'Ivoire"},"geometry":{"type":"Polygon","coordinates":[[[-2.856125,4.994476],[-3.311084,4.984296],[-4.00882,5.179813],[-4.649917,5.168264],[-5.834496,4.993701],[-6.528769,4.705088],[-7.518941,4.338288],[-7.712159,4.364566],[-7.635368,5.188159],[-7.539715,5.313345],[-7.570153,5.707352],[-7.993693,6.12619],[-8.311348,6.193033],[-8.60288,6.467564],[-8.385452,6.911801],[-8.485446,7.395208],[-8.439298,7.686043],[-8.280703,7.68718],[-8.221792,8.123329],[-8.299049,8.316444],[-8.203499,8.455453],[-7.8321,8.575704],[-8.079114,9.376224],[-8.309616,9.789532],[-8.229337,10.12902],[-8.029944,10.206535],[-7.89959,10.297382],[-7.622759,10.147236],[-6.850507,10.138994],[-6.666461,10.430811],[-6.493965,10.411303],[-6.205223,10.524061],[-6.050452,10.096361],[-5.816926,10.222555],[-5.404342,10.370737],[-4.954653,10.152714],[-4.779884,9.821985],[-4.330247,9.610835],[-3.980449,9.862344],[-3.511899,9.900326],[-2.827496,9.642461],[-2.56219,8.219628],[-2.983585,7.379705],[-3.24437,6.250472],[-2.810701,5.389051],[-2.856125,4.994476]]]},"id":"CIV"}, {"type":"Feature","properties":{"name":"Cameroon"},"geometry":{"type":"Polygon","coordinates":[[[13.075822,2.267097],[12.951334,2.321616],[12.35938,2.192812],[11.751665,2.326758],[11.276449,2.261051],[9.649158,2.283866],[9.795196,3.073404],[9.404367,3.734527],[8.948116,3.904129],[8.744924,4.352215],[8.488816,4.495617],[8.500288,4.771983],[8.757533,5.479666],[9.233163,6.444491],[9.522706,6.453482],[10.118277,7.03877],[10.497375,7.055358],[11.058788,6.644427],[11.745774,6.981383],[11.839309,7.397042],[12.063946,7.799808],[12.218872,8.305824],[12.753672,8.717763],[12.955468,9.417772],[13.1676,9.640626],[13.308676,10.160362],[13.57295,10.798566],[14.415379,11.572369],[14.468192,11.904752],[14.577178,12.085361],[14.181336,12.483657],[14.213531,12.802035],[14.495787,12.859396],[14.893386,12.219048],[14.960152,11.555574],[14.923565,10.891325],[15.467873,9.982337],[14.909354,9.992129],[14.627201,9.920919],[14.171466,10.021378],[13.954218,9.549495],[14.544467,8.965861],[14.979996,8.796104],[15.120866,8.38215],[15.436092,7.692812],[15.27946,7.421925],[14.776545,6.408498],[14.53656,6.226959],[14.459407,5.451761],[14.558936,5.030598],[14.478372,4.732605],[14.950953,4.210389],[15.03622,3.851367],[15.405396,3.335301],[15.862732,3.013537],[15.907381,2.557389],[16.012852,2.26764],[15.940919,1.727673],[15.146342,1.964015],[14.337813,2.227875],[13.075822,2.267097]]]},"id":"CMR"}, -{"type":"Feature","properties":{"name":"Democratic Republic of the Congo"},"geometry":{"type":"Polygon","coordinates":[[[30.83386,3.509166],[30.773347,2.339883],[31.174149,2.204465],[30.85267,1.849396],[30.468508,1.583805],[30.086154,1.062313],[29.875779,0.59738],[29.819503,-0.20531],[29.587838,-0.587406],[29.579466,-1.341313],[29.291887,-1.620056],[29.254835,-2.21511],[29.117479,-2.292211],[29.024926,-2.839258],[29.276384,-3.293907],[29.339998,-4.499983],[29.519987,-5.419979],[29.419993,-5.939999],[29.620032,-6.520015],[30.199997,-7.079981],[30.740015,-8.340007],[30.346086,-8.238257],[29.002912,-8.407032],[28.734867,-8.526559],[28.449871,-9.164918],[28.673682,-9.605925],[28.49607,-10.789884],[28.372253,-11.793647],[28.642417,-11.971569],[29.341548,-12.360744],[29.616001,-12.178895],[29.699614,-13.257227],[28.934286,-13.248958],[28.523562,-12.698604],[28.155109,-12.272481],[27.388799,-12.132747],[27.16442,-11.608748],[26.553088,-11.92444],[25.75231,-11.784965],[25.418118,-11.330936],[24.78317,-11.238694],[24.314516,-11.262826],[24.257155,-10.951993],[23.912215,-10.926826],[23.456791,-10.867863],[22.837345,-11.017622],[22.402798,-10.993075],[22.155268,-11.084801],[22.208753,-9.894796],[21.875182,-9.523708],[21.801801,-8.908707],[21.949131,-8.305901],[21.746456,-7.920085],[21.728111,-7.290872],[20.514748,-7.299606],[20.601823,-6.939318],[20.091622,-6.94309],[20.037723,-7.116361],[19.417502,-7.155429],[19.166613,-7.738184],[19.016752,-7.988246],[18.464176,-7.847014],[18.134222,-7.987678],[17.47297,-8.068551],[17.089996,-7.545689],[16.860191,-7.222298],[16.57318,-6.622645],[16.326528,-5.87747],[13.375597,-5.864241],[13.024869,-5.984389],[12.735171,-5.965682],[12.322432,-6.100092],[12.182337,-5.789931],[12.436688,-5.684304],[12.468004,-5.248362],[12.631612,-4.991271],[12.995517,-4.781103],[13.25824,-4.882957],[13.600235,-4.500138],[14.144956,-4.510009],[14.209035,-4.793092],[14.582604,-4.970239],[15.170992,-4.343507],[15.75354,-3.855165],[16.00629,-3.535133],[15.972803,-2.712392],[16.407092,-1.740927],[16.865307,-1.225816],[17.523716,-0.74383],[17.638645,-0.424832],[17.663553,-0.058084],[17.82654,0.288923],[17.774192,0.855659],[17.898835,1.741832],[18.094276,2.365722],[18.393792,2.900443],[18.453065,3.504386],[18.542982,4.201785],[18.932312,4.709506],[19.467784,5.031528],[20.290679,4.691678],[20.927591,4.322786],[21.659123,4.224342],[22.405124,4.02916],[22.704124,4.633051],[22.84148,4.710126],[23.297214,4.609693],[24.410531,5.108784],[24.805029,4.897247],[25.128833,4.927245],[25.278798,5.170408],[25.650455,5.256088],[26.402761,5.150875],[27.044065,5.127853],[27.374226,5.233944],[27.979977,4.408413],[28.428994,4.287155],[28.696678,4.455077],[29.159078,4.389267],[29.715995,4.600805],[29.9535,4.173699],[30.83386,3.509166]]]},"id":"COD"}, +{"type":"Feature","properties":{"name":"Congo, The Democratic Republic of the"},"geometry":{"type":"Polygon","coordinates":[[[30.83386,3.509166],[30.773347,2.339883],[31.174149,2.204465],[30.85267,1.849396],[30.468508,1.583805],[30.086154,1.062313],[29.875779,0.59738],[29.819503,-0.20531],[29.587838,-0.587406],[29.579466,-1.341313],[29.291887,-1.620056],[29.254835,-2.21511],[29.117479,-2.292211],[29.024926,-2.839258],[29.276384,-3.293907],[29.339998,-4.499983],[29.519987,-5.419979],[29.419993,-5.939999],[29.620032,-6.520015],[30.199997,-7.079981],[30.740015,-8.340007],[30.346086,-8.238257],[29.002912,-8.407032],[28.734867,-8.526559],[28.449871,-9.164918],[28.673682,-9.605925],[28.49607,-10.789884],[28.372253,-11.793647],[28.642417,-11.971569],[29.341548,-12.360744],[29.616001,-12.178895],[29.699614,-13.257227],[28.934286,-13.248958],[28.523562,-12.698604],[28.155109,-12.272481],[27.388799,-12.132747],[27.16442,-11.608748],[26.553088,-11.92444],[25.75231,-11.784965],[25.418118,-11.330936],[24.78317,-11.238694],[24.314516,-11.262826],[24.257155,-10.951993],[23.912215,-10.926826],[23.456791,-10.867863],[22.837345,-11.017622],[22.402798,-10.993075],[22.155268,-11.084801],[22.208753,-9.894796],[21.875182,-9.523708],[21.801801,-8.908707],[21.949131,-8.305901],[21.746456,-7.920085],[21.728111,-7.290872],[20.514748,-7.299606],[20.601823,-6.939318],[20.091622,-6.94309],[20.037723,-7.116361],[19.417502,-7.155429],[19.166613,-7.738184],[19.016752,-7.988246],[18.464176,-7.847014],[18.134222,-7.987678],[17.47297,-8.068551],[17.089996,-7.545689],[16.860191,-7.222298],[16.57318,-6.622645],[16.326528,-5.87747],[13.375597,-5.864241],[13.024869,-5.984389],[12.735171,-5.965682],[12.322432,-6.100092],[12.182337,-5.789931],[12.436688,-5.684304],[12.468004,-5.248362],[12.631612,-4.991271],[12.995517,-4.781103],[13.25824,-4.882957],[13.600235,-4.500138],[14.144956,-4.510009],[14.209035,-4.793092],[14.582604,-4.970239],[15.170992,-4.343507],[15.75354,-3.855165],[16.00629,-3.535133],[15.972803,-2.712392],[16.407092,-1.740927],[16.865307,-1.225816],[17.523716,-0.74383],[17.638645,-0.424832],[17.663553,-0.058084],[17.82654,0.288923],[17.774192,0.855659],[17.898835,1.741832],[18.094276,2.365722],[18.393792,2.900443],[18.453065,3.504386],[18.542982,4.201785],[18.932312,4.709506],[19.467784,5.031528],[20.290679,4.691678],[20.927591,4.322786],[21.659123,4.224342],[22.405124,4.02916],[22.704124,4.633051],[22.84148,4.710126],[23.297214,4.609693],[24.410531,5.108784],[24.805029,4.897247],[25.128833,4.927245],[25.278798,5.170408],[25.650455,5.256088],[26.402761,5.150875],[27.044065,5.127853],[27.374226,5.233944],[27.979977,4.408413],[28.428994,4.287155],[28.696678,4.455077],[29.159078,4.389267],[29.715995,4.600805],[29.9535,4.173699],[30.83386,3.509166]]]},"id":"COD"}, {"type":"Feature","properties":{"name":"Republic of the Congo"},"geometry":{"type":"Polygon","coordinates":[[[12.995517,-4.781103],[12.62076,-4.438023],[12.318608,-4.60623],[11.914963,-5.037987],[11.093773,-3.978827],[11.855122,-3.426871],[11.478039,-2.765619],[11.820964,-2.514161],[12.495703,-2.391688],[12.575284,-1.948511],[13.109619,-2.42874],[13.992407,-2.470805],[14.29921,-1.998276],[14.425456,-1.333407],[14.316418,-0.552627],[13.843321,0.038758],[14.276266,1.19693],[14.026669,1.395677],[13.282631,1.314184],[13.003114,1.830896],[13.075822,2.267097],[14.337813,2.227875],[15.146342,1.964015],[15.940919,1.727673],[16.012852,2.26764],[16.537058,3.198255],[17.133042,3.728197],[17.8099,3.560196],[18.453065,3.504386],[18.393792,2.900443],[18.094276,2.365722],[17.898835,1.741832],[17.774192,0.855659],[17.82654,0.288923],[17.663553,-0.058084],[17.638645,-0.424832],[17.523716,-0.74383],[16.865307,-1.225816],[16.407092,-1.740927],[15.972803,-2.712392],[16.00629,-3.535133],[15.75354,-3.855165],[15.170992,-4.343507],[14.582604,-4.970239],[14.209035,-4.793092],[14.144956,-4.510009],[13.600235,-4.500138],[13.25824,-4.882957],[12.995517,-4.781103]]]},"id":"COG"}, {"type":"Feature","properties":{"name":"Colombia"},"geometry":{"type":"Polygon","coordinates":[[[-75.373223,-0.152032],[-75.801466,0.084801],[-76.292314,0.416047],[-76.57638,0.256936],[-77.424984,0.395687],[-77.668613,0.825893],[-77.855061,0.809925],[-78.855259,1.380924],[-78.990935,1.69137],[-78.617831,1.766404],[-78.662118,2.267355],[-78.42761,2.629556],[-77.931543,2.696606],[-77.510431,3.325017],[-77.12769,3.849636],[-77.496272,4.087606],[-77.307601,4.667984],[-77.533221,5.582812],[-77.318815,5.845354],[-77.476661,6.691116],[-77.881571,7.223771],[-77.753414,7.70984],[-77.431108,7.638061],[-77.242566,7.935278],[-77.474723,8.524286],[-77.353361,8.670505],[-76.836674,8.638749],[-76.086384,9.336821],[-75.6746,9.443248],[-75.664704,9.774003],[-75.480426,10.61899],[-74.906895,11.083045],[-74.276753,11.102036],[-74.197223,11.310473],[-73.414764,11.227015],[-72.627835,11.731972],[-72.238195,11.95555],[-71.75409,12.437303],[-71.399822,12.376041],[-71.137461,12.112982],[-71.331584,11.776284],[-71.973922,11.608672],[-72.227575,11.108702],[-72.614658,10.821975],[-72.905286,10.450344],[-73.027604,9.73677],[-73.304952,9.152],[-72.78873,9.085027],[-72.660495,8.625288],[-72.439862,8.405275],[-72.360901,8.002638],[-72.479679,7.632506],[-72.444487,7.423785],[-72.198352,7.340431],[-71.960176,6.991615],[-70.674234,7.087785],[-70.093313,6.960376],[-69.38948,6.099861],[-68.985319,6.206805],[-68.265052,6.153268],[-67.695087,6.267318],[-67.34144,6.095468],[-67.521532,5.55687],[-67.744697,5.221129],[-67.823012,4.503937],[-67.621836,3.839482],[-67.337564,3.542342],[-67.303173,3.318454],[-67.809938,2.820655],[-67.447092,2.600281],[-67.181294,2.250638],[-66.876326,1.253361],[-67.065048,1.130112],[-67.259998,1.719999],[-67.53781,2.037163],[-67.868565,1.692455],[-69.816973,1.714805],[-69.804597,1.089081],[-69.218638,0.985677],[-69.252434,0.602651],[-69.452396,0.706159],[-70.015566,0.541414],[-70.020656,-0.185156],[-69.577065,-0.549992],[-69.420486,-1.122619],[-69.444102,-1.556287],[-69.893635,-4.298187],[-70.394044,-3.766591],[-70.692682,-3.742872],[-70.047709,-2.725156],[-70.813476,-2.256865],[-71.413646,-2.342802],[-71.774761,-2.16979],[-72.325787,-2.434218],[-73.070392,-2.308954],[-73.659504,-1.260491],[-74.122395,-1.002833],[-74.441601,-0.53082],[-75.106625,-0.057205],[-75.373223,-0.152032]]]},"id":"COL"}, {"type":"Feature","properties":{"name":"Costa Rica"},"geometry":{"type":"Polygon","coordinates":[[[-82.965783,8.225028],[-83.508437,8.446927],[-83.711474,8.656836],[-83.596313,8.830443],[-83.632642,9.051386],[-83.909886,9.290803],[-84.303402,9.487354],[-84.647644,9.615537],[-84.713351,9.908052],[-84.97566,10.086723],[-84.911375,9.795992],[-85.110923,9.55704],[-85.339488,9.834542],[-85.660787,9.933347],[-85.797445,10.134886],[-85.791709,10.439337],[-85.659314,10.754331],[-85.941725,10.895278],[-85.71254,11.088445],[-85.561852,11.217119],[-84.903003,10.952303],[-84.673069,11.082657],[-84.355931,10.999226],[-84.190179,10.79345],[-83.895054,10.726839],[-83.655612,10.938764],[-83.40232,10.395438],[-83.015677,9.992982],[-82.546196,9.566135],[-82.932891,9.476812],[-82.927155,9.07433],[-82.719183,8.925709],[-82.868657,8.807266],[-82.829771,8.626295],[-82.913176,8.423517],[-82.965783,8.225028]]]},"id":"CRI"}, @@ -74,7 +74,7 @@ {"type":"Feature","properties":{"name":"Indonesia"},"geometry":{"type":"MultiPolygon","coordinates":[[[[120.715609,-10.239581],[120.295014,-10.25865],[118.967808,-9.557969],[119.90031,-9.36134],[120.425756,-9.665921],[120.775502,-9.969675],[120.715609,-10.239581]]],[[[124.43595,-10.140001],[123.579982,-10.359987],[123.459989,-10.239995],[123.550009,-9.900016],[123.980009,-9.290027],[124.968682,-8.89279],[125.07002,-9.089987],[125.08852,-9.393173],[124.43595,-10.140001]]],[[[117.900018,-8.095681],[118.260616,-8.362383],[118.87846,-8.280683],[119.126507,-8.705825],[117.970402,-8.906639],[117.277731,-9.040895],[116.740141,-9.032937],[117.083737,-8.457158],[117.632024,-8.449303],[117.900018,-8.095681]]],[[[122.903537,-8.094234],[122.756983,-8.649808],[121.254491,-8.933666],[119.924391,-8.810418],[119.920929,-8.444859],[120.715092,-8.236965],[121.341669,-8.53674],[122.007365,-8.46062],[122.903537,-8.094234]]],[[[108.623479,-6.777674],[110.539227,-6.877358],[110.759576,-6.465186],[112.614811,-6.946036],[112.978768,-7.594213],[114.478935,-7.776528],[115.705527,-8.370807],[114.564511,-8.751817],[113.464734,-8.348947],[112.559672,-8.376181],[111.522061,-8.302129],[110.58615,-8.122605],[109.427667,-7.740664],[108.693655,-7.6416],[108.277763,-7.766657],[106.454102,-7.3549],[106.280624,-6.9249],[105.365486,-6.851416],[106.051646,-5.895919],[107.265009,-5.954985],[108.072091,-6.345762],[108.486846,-6.421985],[108.623479,-6.777674]]],[[[134.724624,-6.214401],[134.210134,-6.895238],[134.112776,-6.142467],[134.290336,-5.783058],[134.499625,-5.445042],[134.727002,-5.737582],[134.724624,-6.214401]]],[[[127.249215,-3.459065],[126.874923,-3.790983],[126.183802,-3.607376],[125.989034,-3.177273],[127.000651,-3.129318],[127.249215,-3.459065]]],[[[130.471344,-3.093764],[130.834836,-3.858472],[129.990547,-3.446301],[129.155249,-3.362637],[128.590684,-3.428679],[127.898891,-3.393436],[128.135879,-2.84365],[129.370998,-2.802154],[130.471344,-3.093764]]],[[[134.143368,-1.151867],[134.422627,-2.769185],[135.457603,-3.367753],[136.293314,-2.307042],[137.440738,-1.703513],[138.329727,-1.702686],[139.184921,-2.051296],[139.926684,-2.409052],[141.00021,-2.600151],[141.017057,-5.859022],[141.033852,-9.117893],[140.143415,-8.297168],[139.127767,-8.096043],[138.881477,-8.380935],[137.614474,-8.411683],[138.039099,-7.597882],[138.668621,-7.320225],[138.407914,-6.232849],[137.92784,-5.393366],[135.98925,-4.546544],[135.164598,-4.462931],[133.66288,-3.538853],[133.367705,-4.024819],[132.983956,-4.112979],[132.756941,-3.746283],[132.753789,-3.311787],[131.989804,-2.820551],[133.066845,-2.460418],[133.780031,-2.479848],[133.696212,-2.214542],[132.232373,-2.212526],[131.836222,-1.617162],[130.94284,-1.432522],[130.519558,-0.93772],[131.867538,-0.695461],[132.380116,-0.369538],[133.985548,-0.78021],[134.143368,-1.151867]]],[[[125.240501,1.419836],[124.437035,0.427881],[123.685505,0.235593],[122.723083,0.431137],[121.056725,0.381217],[120.183083,0.237247],[120.04087,-0.519658],[120.935905,-1.408906],[121.475821,-0.955962],[123.340565,-0.615673],[123.258399,-1.076213],[122.822715,-0.930951],[122.38853,-1.516858],[121.508274,-1.904483],[122.454572,-3.186058],[122.271896,-3.5295],[123.170963,-4.683693],[123.162333,-5.340604],[122.628515,-5.634591],[122.236394,-5.282933],[122.719569,-4.464172],[121.738234,-4.851331],[121.489463,-4.574553],[121.619171,-4.188478],[120.898182,-3.602105],[120.972389,-2.627643],[120.305453,-2.931604],[120.390047,-4.097579],[120.430717,-5.528241],[119.796543,-5.6734],[119.366906,-5.379878],[119.653606,-4.459417],[119.498835,-3.494412],[119.078344,-3.487022],[118.767769,-2.801999],[119.180974,-2.147104],[119.323394,-1.353147],[119.825999,0.154254],[120.035702,0.566477],[120.885779,1.309223],[121.666817,1.013944],[122.927567,0.875192],[124.077522,0.917102],[125.065989,1.643259],[125.240501,1.419836]]],[[[128.688249,1.132386],[128.635952,0.258486],[128.12017,0.356413],[127.968034,-0.252077],[128.379999,-0.780004],[128.100016,-0.899996],[127.696475,-0.266598],[127.39949,1.011722],[127.600512,1.810691],[127.932378,2.174596],[128.004156,1.628531],[128.594559,1.540811],[128.688249,1.132386]]],[[[117.875627,1.827641],[118.996747,0.902219],[117.811858,0.784242],[117.478339,0.102475],[117.521644,-0.803723],[116.560048,-1.487661],[116.533797,-2.483517],[116.148084,-4.012726],[116.000858,-3.657037],[114.864803,-4.106984],[114.468652,-3.495704],[113.755672,-3.43917],[113.256994,-3.118776],[112.068126,-3.478392],[111.703291,-2.994442],[111.04824,-3.049426],[110.223846,-2.934032],[110.070936,-1.592874],[109.571948,-1.314907],[109.091874,-0.459507],[108.952658,0.415375],[109.069136,1.341934],[109.66326,2.006467],[109.830227,1.338136],[110.514061,0.773131],[111.159138,0.976478],[111.797548,0.904441],[112.380252,1.410121],[112.859809,1.49779],[113.80585,1.217549],[114.621355,1.430688],[115.134037,2.821482],[115.519078,3.169238],[115.865517,4.306559],[117.015214,4.306094],[117.882035,4.137551],[117.313232,3.234428],[118.04833,2.28769],[117.875627,1.827641]]],[[[105.817655,-5.852356],[104.710384,-5.873285],[103.868213,-5.037315],[102.584261,-4.220259],[102.156173,-3.614146],[101.399113,-2.799777],[100.902503,-2.050262],[100.141981,-0.650348],[99.26374,0.183142],[98.970011,1.042882],[98.601351,1.823507],[97.699598,2.453184],[97.176942,3.308791],[96.424017,3.86886],[95.380876,4.970782],[95.293026,5.479821],[95.936863,5.439513],[97.484882,5.246321],[98.369169,4.26837],[99.142559,3.59035],[99.693998,3.174329],[100.641434,2.099381],[101.658012,2.083697],[102.498271,1.3987],[103.07684,0.561361],[103.838396,0.104542],[103.437645,-0.711946],[104.010789,-1.059212],[104.369991,-1.084843],[104.53949,-1.782372],[104.887893,-2.340425],[105.622111,-2.428844],[106.108593,-3.061777],[105.857446,-4.305525],[105.817655,-5.852356]]]]},"id":"IDN"}, {"type":"Feature","properties":{"name":"India"},"geometry":{"type":"Polygon","coordinates":[[[77.837451,35.49401],[78.912269,34.321936],[78.811086,33.506198],[79.208892,32.994395],[79.176129,32.48378],[78.458446,32.618164],[78.738894,31.515906],[79.721367,30.882715],[81.111256,30.183481],[80.476721,29.729865],[80.088425,28.79447],[81.057203,28.416095],[81.999987,27.925479],[83.304249,27.364506],[84.675018,27.234901],[85.251779,26.726198],[86.024393,26.630985],[87.227472,26.397898],[88.060238,26.414615],[88.174804,26.810405],[88.043133,27.445819],[88.120441,27.876542],[88.730326,28.086865],[88.814248,27.299316],[88.835643,27.098966],[89.744528,26.719403],[90.373275,26.875724],[91.217513,26.808648],[92.033484,26.83831],[92.103712,27.452614],[91.696657,27.771742],[92.503119,27.896876],[93.413348,28.640629],[94.56599,29.277438],[95.404802,29.031717],[96.117679,29.452802],[96.586591,28.83098],[96.248833,28.411031],[97.327114,28.261583],[97.402561,27.882536],[97.051989,27.699059],[97.133999,27.083774],[96.419366,27.264589],[95.124768,26.573572],[95.155153,26.001307],[94.603249,25.162495],[94.552658,24.675238],[94.106742,23.850741],[93.325188,24.078556],[93.286327,23.043658],[93.060294,22.703111],[93.166128,22.27846],[92.672721,22.041239],[92.146035,23.627499],[91.869928,23.624346],[91.706475,22.985264],[91.158963,23.503527],[91.46773,24.072639],[91.915093,24.130414],[92.376202,24.976693],[91.799596,25.147432],[90.872211,25.132601],[89.920693,25.26975],[89.832481,25.965082],[89.355094,26.014407],[88.563049,26.446526],[88.209789,25.768066],[88.931554,25.238692],[88.306373,24.866079],[88.084422,24.501657],[88.69994,24.233715],[88.52977,23.631142],[88.876312,22.879146],[89.031961,22.055708],[88.888766,21.690588],[88.208497,21.703172],[86.975704,21.495562],[87.033169,20.743308],[86.499351,20.151638],[85.060266,19.478579],[83.941006,18.30201],[83.189217,17.671221],[82.192792,17.016636],[82.191242,16.556664],[81.692719,16.310219],[80.791999,15.951972],[80.324896,15.899185],[80.025069,15.136415],[80.233274,13.835771],[80.286294,13.006261],[79.862547,12.056215],[79.857999,10.357275],[79.340512,10.308854],[78.885345,9.546136],[79.18972,9.216544],[78.277941,8.933047],[77.941165,8.252959],[77.539898,7.965535],[76.592979,8.899276],[76.130061,10.29963],[75.746467,11.308251],[75.396101,11.781245],[74.864816,12.741936],[74.616717,13.992583],[74.443859,14.617222],[73.534199,15.990652],[73.119909,17.92857],[72.820909,19.208234],[72.824475,20.419503],[72.630533,21.356009],[71.175273,20.757441],[70.470459,20.877331],[69.16413,22.089298],[69.644928,22.450775],[69.349597,22.84318],[68.176645,23.691965],[68.842599,24.359134],[71.04324,24.356524],[70.844699,25.215102],[70.282873,25.722229],[70.168927,26.491872],[69.514393,26.940966],[70.616496,27.989196],[71.777666,27.91318],[72.823752,28.961592],[73.450638,29.976413],[74.42138,30.979815],[74.405929,31.692639],[75.258642,32.271105],[74.451559,32.7649],[74.104294,33.441473],[73.749948,34.317699],[74.240203,34.748887],[75.757061,34.504923],[76.871722,34.653544],[77.837451,35.49401]]]},"id":"IND"}, {"type":"Feature","properties":{"name":"Ireland"},"geometry":{"type":"Polygon","coordinates":[[[-6.197885,53.867565],[-6.032985,53.153164],[-6.788857,52.260118],[-8.561617,51.669301],[-9.977086,51.820455],[-9.166283,52.864629],[-9.688525,53.881363],[-8.327987,54.664519],[-7.572168,55.131622],[-7.366031,54.595841],[-7.572168,54.059956],[-6.95373,54.073702],[-6.197885,53.867565]]]},"id":"IRL"}, -{"type":"Feature","properties":{"name":"Iran"},"geometry":{"type":"Polygon","coordinates":[[[53.921598,37.198918],[54.800304,37.392421],[55.511578,37.964117],[56.180375,37.935127],[56.619366,38.121394],[57.330434,38.029229],[58.436154,37.522309],[59.234762,37.412988],[60.377638,36.527383],[61.123071,36.491597],[61.210817,35.650072],[60.803193,34.404102],[60.52843,33.676446],[60.9637,33.528832],[60.536078,32.981269],[60.863655,32.18292],[60.941945,31.548075],[61.699314,31.379506],[61.781222,30.73585],[60.874248,29.829239],[61.369309,29.303276],[61.771868,28.699334],[62.72783,28.259645],[62.755426,27.378923],[63.233898,27.217047],[63.316632,26.756532],[61.874187,26.239975],[61.497363,25.078237],[59.616134,25.380157],[58.525761,25.609962],[57.397251,25.739902],[56.970766,26.966106],[56.492139,27.143305],[55.72371,26.964633],[54.71509,26.480658],[53.493097,26.812369],[52.483598,27.580849],[51.520763,27.86569],[50.852948,28.814521],[50.115009,30.147773],[49.57685,29.985715],[48.941333,30.31709],[48.567971,29.926778],[48.014568,30.452457],[48.004698,30.985137],[47.685286,30.984853],[47.849204,31.709176],[47.334661,32.469155],[46.109362,33.017287],[45.416691,33.967798],[45.64846,34.748138],[46.151788,35.093259],[46.07634,35.677383],[45.420618,35.977546],[44.77267,37.17045],[44.225756,37.971584],[44.421403,38.281281],[44.109225,39.428136],[44.79399,39.713003],[44.952688,39.335765],[45.457722,38.874139],[46.143623,38.741201],[46.50572,38.770605],[47.685079,39.508364],[48.060095,39.582235],[48.355529,39.288765],[48.010744,38.794015],[48.634375,38.270378],[48.883249,38.320245],[49.199612,37.582874],[50.147771,37.374567],[50.842354,36.872814],[52.264025,36.700422],[53.82579,36.965031],[53.921598,37.198918]]]},"id":"IRN"}, +{"type":"Feature","properties":{"name":"Iran, Islamic Republic of"},"geometry":{"type":"Polygon","coordinates":[[[53.921598,37.198918],[54.800304,37.392421],[55.511578,37.964117],[56.180375,37.935127],[56.619366,38.121394],[57.330434,38.029229],[58.436154,37.522309],[59.234762,37.412988],[60.377638,36.527383],[61.123071,36.491597],[61.210817,35.650072],[60.803193,34.404102],[60.52843,33.676446],[60.9637,33.528832],[60.536078,32.981269],[60.863655,32.18292],[60.941945,31.548075],[61.699314,31.379506],[61.781222,30.73585],[60.874248,29.829239],[61.369309,29.303276],[61.771868,28.699334],[62.72783,28.259645],[62.755426,27.378923],[63.233898,27.217047],[63.316632,26.756532],[61.874187,26.239975],[61.497363,25.078237],[59.616134,25.380157],[58.525761,25.609962],[57.397251,25.739902],[56.970766,26.966106],[56.492139,27.143305],[55.72371,26.964633],[54.71509,26.480658],[53.493097,26.812369],[52.483598,27.580849],[51.520763,27.86569],[50.852948,28.814521],[50.115009,30.147773],[49.57685,29.985715],[48.941333,30.31709],[48.567971,29.926778],[48.014568,30.452457],[48.004698,30.985137],[47.685286,30.984853],[47.849204,31.709176],[47.334661,32.469155],[46.109362,33.017287],[45.416691,33.967798],[45.64846,34.748138],[46.151788,35.093259],[46.07634,35.677383],[45.420618,35.977546],[44.77267,37.17045],[44.225756,37.971584],[44.421403,38.281281],[44.109225,39.428136],[44.79399,39.713003],[44.952688,39.335765],[45.457722,38.874139],[46.143623,38.741201],[46.50572,38.770605],[47.685079,39.508364],[48.060095,39.582235],[48.355529,39.288765],[48.010744,38.794015],[48.634375,38.270378],[48.883249,38.320245],[49.199612,37.582874],[50.147771,37.374567],[50.842354,36.872814],[52.264025,36.700422],[53.82579,36.965031],[53.921598,37.198918]]]},"id":"IRN"}, {"type":"Feature","properties":{"name":"Iraq"},"geometry":{"type":"Polygon","coordinates":[[[45.420618,35.977546],[46.07634,35.677383],[46.151788,35.093259],[45.64846,34.748138],[45.416691,33.967798],[46.109362,33.017287],[47.334661,32.469155],[47.849204,31.709176],[47.685286,30.984853],[48.004698,30.985137],[48.014568,30.452457],[48.567971,29.926778],[47.974519,29.975819],[47.302622,30.05907],[46.568713,29.099025],[44.709499,29.178891],[41.889981,31.190009],[40.399994,31.889992],[39.195468,32.161009],[38.792341,33.378686],[41.006159,34.419372],[41.383965,35.628317],[41.289707,36.358815],[41.837064,36.605854],[42.349591,37.229873],[42.779126,37.385264],[43.942259,37.256228],[44.293452,37.001514],[44.772699,37.170445],[45.420618,35.977546]]]},"id":"IRQ"}, {"type":"Feature","properties":{"name":"Iceland"},"geometry":{"type":"Polygon","coordinates":[[[-14.508695,66.455892],[-14.739637,65.808748],[-13.609732,65.126671],[-14.909834,64.364082],[-17.794438,63.678749],[-18.656246,63.496383],[-19.972755,63.643635],[-22.762972,63.960179],[-21.778484,64.402116],[-23.955044,64.89113],[-22.184403,65.084968],[-22.227423,65.378594],[-24.326184,65.611189],[-23.650515,66.262519],[-22.134922,66.410469],[-20.576284,65.732112],[-19.056842,66.276601],[-17.798624,65.993853],[-16.167819,66.526792],[-14.508695,66.455892]]]},"id":"ISL"}, {"type":"Feature","properties":{"name":"Israel"},"geometry":{"type":"Polygon","coordinates":[[[35.719918,32.709192],[35.545665,32.393992],[35.18393,32.532511],[34.974641,31.866582],[35.225892,31.754341],[34.970507,31.616778],[34.927408,31.353435],[35.397561,31.489086],[35.420918,31.100066],[34.922603,29.501326],[34.265433,31.219361],[34.556372,31.548824],[34.488107,31.605539],[34.752587,32.072926],[34.955417,32.827376],[35.098457,33.080539],[35.126053,33.0909],[35.460709,33.08904],[35.552797,33.264275],[35.821101,33.277426],[35.836397,32.868123],[35.700798,32.716014],[35.719918,32.709192]]]},"id":"ISR"}, @@ -82,14 +82,14 @@ {"type":"Feature","properties":{"name":"Jamaica"},"geometry":{"type":"Polygon","coordinates":[[[-77.569601,18.490525],[-76.896619,18.400867],[-76.365359,18.160701],[-76.199659,17.886867],[-76.902561,17.868238],[-77.206341,17.701116],[-77.766023,17.861597],[-78.337719,18.225968],[-78.217727,18.454533],[-77.797365,18.524218],[-77.569601,18.490525]]]},"id":"JAM"}, {"type":"Feature","properties":{"name":"Jordan"},"geometry":{"type":"Polygon","coordinates":[[[35.545665,32.393992],[35.719918,32.709192],[36.834062,32.312938],[38.792341,33.378686],[39.195468,32.161009],[39.004886,32.010217],[37.002166,31.508413],[37.998849,30.5085],[37.66812,30.338665],[37.503582,30.003776],[36.740528,29.865283],[36.501214,29.505254],[36.068941,29.197495],[34.956037,29.356555],[34.922603,29.501326],[35.420918,31.100066],[35.397561,31.489086],[35.545252,31.782505],[35.545665,32.393992]]]},"id":"JOR"}, {"type":"Feature","properties":{"name":"Japan"},"geometry":{"type":"MultiPolygon","coordinates":[[[[134.638428,34.149234],[134.766379,33.806335],[134.203416,33.201178],[133.79295,33.521985],[133.280268,33.28957],[133.014858,32.704567],[132.363115,32.989382],[132.371176,33.463642],[132.924373,34.060299],[133.492968,33.944621],[133.904106,34.364931],[134.638428,34.149234]]],[[[140.976388,37.142074],[140.59977,36.343983],[140.774074,35.842877],[140.253279,35.138114],[138.975528,34.6676],[137.217599,34.606286],[135.792983,33.464805],[135.120983,33.849071],[135.079435,34.596545],[133.340316,34.375938],[132.156771,33.904933],[130.986145,33.885761],[132.000036,33.149992],[131.33279,31.450355],[130.686318,31.029579],[130.20242,31.418238],[130.447676,32.319475],[129.814692,32.61031],[129.408463,33.296056],[130.353935,33.604151],[130.878451,34.232743],[131.884229,34.749714],[132.617673,35.433393],[134.608301,35.731618],[135.677538,35.527134],[136.723831,37.304984],[137.390612,36.827391],[138.857602,37.827485],[139.426405,38.215962],[140.05479,39.438807],[139.883379,40.563312],[140.305783,41.195005],[141.368973,41.37856],[141.914263,39.991616],[141.884601,39.180865],[140.959489,38.174001],[140.976388,37.142074]]],[[[143.910162,44.1741],[144.613427,43.960883],[145.320825,44.384733],[145.543137,43.262088],[144.059662,42.988358],[143.18385,41.995215],[141.611491,42.678791],[141.067286,41.584594],[139.955106,41.569556],[139.817544,42.563759],[140.312087,43.333273],[141.380549,43.388825],[141.671952,44.772125],[141.967645,45.551483],[143.14287,44.510358],[143.910162,44.1741]]]]},"id":"JPN"}, -{"type":"Feature","properties":{"name":"Kazakhstan"},"geometry":{"type":"Polygon","coordinates":[[[70.962315,42.266154],[70.388965,42.081308],[69.070027,41.384244],[68.632483,40.668681],[68.259896,40.662325],[67.985856,41.135991],[66.714047,41.168444],[66.510649,41.987644],[66.023392,41.994646],[66.098012,42.99766],[64.900824,43.728081],[63.185787,43.650075],[62.0133,43.504477],[61.05832,44.405817],[60.239972,44.784037],[58.689989,45.500014],[58.503127,45.586804],[55.928917,44.995858],[55.968191,41.308642],[55.455251,41.259859],[54.755345,42.043971],[54.079418,42.324109],[52.944293,42.116034],[52.50246,41.783316],[52.446339,42.027151],[52.692112,42.443895],[52.501426,42.792298],[51.342427,43.132975],[50.891292,44.031034],[50.339129,44.284016],[50.305643,44.609836],[51.278503,44.514854],[51.316899,45.245998],[52.16739,45.408391],[53.040876,45.259047],[53.220866,46.234646],[53.042737,46.853006],[52.042023,46.804637],[51.191945,47.048705],[50.034083,46.60899],[49.10116,46.39933],[48.593241,46.561034],[48.694734,47.075628],[48.057253,47.743753],[47.315231,47.715847],[46.466446,48.394152],[47.043672,49.152039],[46.751596,49.356006],[47.54948,50.454698],[48.577841,49.87476],[48.702382,50.605128],[50.766648,51.692762],[52.328724,51.718652],[54.532878,51.02624],[55.716941,50.621717],[56.777961,51.043551],[58.363291,51.063653],[59.642282,50.545442],[59.932807,50.842194],[61.337424,50.79907],[61.588003,51.272659],[59.967534,51.96042],[60.927269,52.447548],[60.739993,52.719986],[61.699986,52.979996],[60.978066,53.664993],[61.436591,54.006265],[65.178534,54.354228],[65.666876,54.601267],[68.1691,54.970392],[69.068167,55.38525],[70.865267,55.169734],[71.180131,54.133285],[72.22415,54.376655],[73.508516,54.035617],[73.425679,53.48981],[74.384845,53.546861],[76.8911,54.490524],[76.525179,54.177003],[77.800916,53.404415],[80.03556,50.864751],[80.568447,51.388336],[81.945986,50.812196],[83.383004,51.069183],[83.935115,50.889246],[84.416377,50.3114],[85.11556,50.117303],[85.54127,49.692859],[86.829357,49.826675],[87.35997,49.214981],[86.598776,48.549182],[85.768233,48.455751],[85.720484,47.452969],[85.16429,47.000956],[83.180484,47.330031],[82.458926,45.53965],[81.947071,45.317027],[79.966106,44.917517],[80.866206,43.180362],[80.18015,42.920068],[80.25999,42.349999],[79.643645,42.496683],[79.142177,42.856092],[77.658392,42.960686],[76.000354,42.988022],[75.636965,42.8779],[74.212866,43.298339],[73.645304,43.091272],[73.489758,42.500894],[71.844638,42.845395],[71.186281,42.704293],[70.962315,42.266154]]]},"id":"KAZ"}, +{"type":"Feature","properties":{"name":"Kazakstan"},"geometry":{"type":"Polygon","coordinates":[[[70.962315,42.266154],[70.388965,42.081308],[69.070027,41.384244],[68.632483,40.668681],[68.259896,40.662325],[67.985856,41.135991],[66.714047,41.168444],[66.510649,41.987644],[66.023392,41.994646],[66.098012,42.99766],[64.900824,43.728081],[63.185787,43.650075],[62.0133,43.504477],[61.05832,44.405817],[60.239972,44.784037],[58.689989,45.500014],[58.503127,45.586804],[55.928917,44.995858],[55.968191,41.308642],[55.455251,41.259859],[54.755345,42.043971],[54.079418,42.324109],[52.944293,42.116034],[52.50246,41.783316],[52.446339,42.027151],[52.692112,42.443895],[52.501426,42.792298],[51.342427,43.132975],[50.891292,44.031034],[50.339129,44.284016],[50.305643,44.609836],[51.278503,44.514854],[51.316899,45.245998],[52.16739,45.408391],[53.040876,45.259047],[53.220866,46.234646],[53.042737,46.853006],[52.042023,46.804637],[51.191945,47.048705],[50.034083,46.60899],[49.10116,46.39933],[48.593241,46.561034],[48.694734,47.075628],[48.057253,47.743753],[47.315231,47.715847],[46.466446,48.394152],[47.043672,49.152039],[46.751596,49.356006],[47.54948,50.454698],[48.577841,49.87476],[48.702382,50.605128],[50.766648,51.692762],[52.328724,51.718652],[54.532878,51.02624],[55.716941,50.621717],[56.777961,51.043551],[58.363291,51.063653],[59.642282,50.545442],[59.932807,50.842194],[61.337424,50.79907],[61.588003,51.272659],[59.967534,51.96042],[60.927269,52.447548],[60.739993,52.719986],[61.699986,52.979996],[60.978066,53.664993],[61.436591,54.006265],[65.178534,54.354228],[65.666876,54.601267],[68.1691,54.970392],[69.068167,55.38525],[70.865267,55.169734],[71.180131,54.133285],[72.22415,54.376655],[73.508516,54.035617],[73.425679,53.48981],[74.384845,53.546861],[76.8911,54.490524],[76.525179,54.177003],[77.800916,53.404415],[80.03556,50.864751],[80.568447,51.388336],[81.945986,50.812196],[83.383004,51.069183],[83.935115,50.889246],[84.416377,50.3114],[85.11556,50.117303],[85.54127,49.692859],[86.829357,49.826675],[87.35997,49.214981],[86.598776,48.549182],[85.768233,48.455751],[85.720484,47.452969],[85.16429,47.000956],[83.180484,47.330031],[82.458926,45.53965],[81.947071,45.317027],[79.966106,44.917517],[80.866206,43.180362],[80.18015,42.920068],[80.25999,42.349999],[79.643645,42.496683],[79.142177,42.856092],[77.658392,42.960686],[76.000354,42.988022],[75.636965,42.8779],[74.212866,43.298339],[73.645304,43.091272],[73.489758,42.500894],[71.844638,42.845395],[71.186281,42.704293],[70.962315,42.266154]]]},"id":"KAZ"}, {"type":"Feature","properties":{"name":"Kenya"},"geometry":{"type":"Polygon","coordinates":[[[40.993,-0.85829],[41.58513,-1.68325],[40.88477,-2.08255],[40.63785,-2.49979],[40.26304,-2.57309],[40.12119,-3.27768],[39.80006,-3.68116],[39.60489,-4.34653],[39.20222,-4.67677],[37.7669,-3.67712],[37.69869,-3.09699],[34.07262,-1.05982],[33.903711,-0.95],[33.893569,0.109814],[34.18,0.515],[34.6721,1.17694],[35.03599,1.90584],[34.59607,3.05374],[34.47913,3.5556],[34.005,4.249885],[34.620196,4.847123],[35.298007,5.506],[35.817448,5.338232],[35.817448,4.776966],[36.159079,4.447864],[36.855093,4.447864],[38.120915,3.598605],[38.43697,3.58851],[38.67114,3.61607],[38.89251,3.50074],[39.559384,3.42206],[39.85494,3.83879],[40.76848,4.25702],[41.1718,3.91909],[41.855083,3.918912],[40.98105,2.78452],[40.993,-0.85829]]]},"id":"KEN"}, {"type":"Feature","properties":{"name":"Kyrgyzstan"},"geometry":{"type":"Polygon","coordinates":[[[70.962315,42.266154],[71.186281,42.704293],[71.844638,42.845395],[73.489758,42.500894],[73.645304,43.091272],[74.212866,43.298339],[75.636965,42.8779],[76.000354,42.988022],[77.658392,42.960686],[79.142177,42.856092],[79.643645,42.496683],[80.25999,42.349999],[80.11943,42.123941],[78.543661,41.582243],[78.187197,41.185316],[76.904484,41.066486],[76.526368,40.427946],[75.467828,40.562072],[74.776862,40.366425],[73.822244,39.893973],[73.960013,39.660008],[73.675379,39.431237],[71.784694,39.279463],[70.549162,39.604198],[69.464887,39.526683],[69.55961,40.103211],[70.648019,39.935754],[71.014198,40.244366],[71.774875,40.145844],[73.055417,40.866033],[71.870115,41.3929],[71.157859,41.143587],[70.420022,41.519998],[71.259248,42.167711],[70.962315,42.266154]]]},"id":"KGZ"}, {"type":"Feature","properties":{"name":"Cambodia"},"geometry":{"type":"Polygon","coordinates":[[[103.49728,10.632555],[103.09069,11.153661],[102.584932,12.186595],[102.348099,13.394247],[102.988422,14.225721],[104.281418,14.416743],[105.218777,14.273212],[106.043946,13.881091],[106.496373,14.570584],[107.382727,14.202441],[107.614548,13.535531],[107.491403,12.337206],[105.810524,11.567615],[106.24967,10.961812],[105.199915,10.88931],[104.334335,10.486544],[103.49728,10.632555]]]},"id":"KHM"}, -{"type":"Feature","properties":{"name":"South Korea"},"geometry":{"type":"Polygon","coordinates":[[[128.349716,38.612243],[129.21292,37.432392],[129.46045,36.784189],[129.468304,35.632141],[129.091377,35.082484],[128.18585,34.890377],[127.386519,34.475674],[126.485748,34.390046],[126.37392,34.93456],[126.559231,35.684541],[126.117398,36.725485],[126.860143,36.893924],[126.174759,37.749686],[126.237339,37.840378],[126.68372,37.804773],[127.073309,38.256115],[127.780035,38.304536],[128.205746,38.370397],[128.349716,38.612243]]]},"id":"KOR"}, +{"type":"Feature","properties":{"name":"Korea, Republic of"},"geometry":{"type":"Polygon","coordinates":[[[128.349716,38.612243],[129.21292,37.432392],[129.46045,36.784189],[129.468304,35.632141],[129.091377,35.082484],[128.18585,34.890377],[127.386519,34.475674],[126.485748,34.390046],[126.37392,34.93456],[126.559231,35.684541],[126.117398,36.725485],[126.860143,36.893924],[126.174759,37.749686],[126.237339,37.840378],[126.68372,37.804773],[127.073309,38.256115],[127.780035,38.304536],[128.205746,38.370397],[128.349716,38.612243]]]},"id":"KOR"}, {"type":"Feature","properties":{"name":"Kosovo"},"geometry":{"type":"Polygon","coordinates":[[[20.76216,42.05186],[20.71731,41.84711],[20.59023,41.85541],[20.52295,42.21787],[20.28374,42.32025],[20.0707,42.58863],[20.25758,42.81275],[20.49679,42.88469],[20.63508,43.21671],[20.81448,43.27205],[20.95651,43.13094],[21.143395,43.068685],[21.27421,42.90959],[21.43866,42.86255],[21.63302,42.67717],[21.77505,42.6827],[21.66292,42.43922],[21.54332,42.32025],[21.576636,42.245224],[21.3527,42.2068],[20.76216,42.05186]]]},"id":"-99"}, {"type":"Feature","properties":{"name":"Kuwait"},"geometry":{"type":"Polygon","coordinates":[[[47.974519,29.975819],[48.183189,29.534477],[48.093943,29.306299],[48.416094,28.552004],[47.708851,28.526063],[47.459822,29.002519],[46.568713,29.099025],[47.302622,30.05907],[47.974519,29.975819]]]},"id":"KWT"}, -{"type":"Feature","properties":{"name":"Laos"},"geometry":{"type":"Polygon","coordinates":[[[105.218777,14.273212],[105.544338,14.723934],[105.589039,15.570316],[104.779321,16.441865],[104.716947,17.428859],[103.956477,18.240954],[103.200192,18.309632],[102.998706,17.961695],[102.413005,17.932782],[102.113592,18.109102],[101.059548,17.512497],[101.035931,18.408928],[101.282015,19.462585],[100.606294,19.508344],[100.548881,20.109238],[100.115988,20.41785],[100.329101,20.786122],[101.180005,21.436573],[101.270026,21.201652],[101.80312,21.174367],[101.652018,22.318199],[102.170436,22.464753],[102.754896,21.675137],[103.203861,20.766562],[104.435,20.758733],[104.822574,19.886642],[104.183388,19.624668],[103.896532,19.265181],[105.094598,18.666975],[105.925762,17.485315],[106.556008,16.604284],[107.312706,15.908538],[107.564525,15.202173],[107.382727,14.202441],[106.496373,14.570584],[106.043946,13.881091],[105.218777,14.273212]]]},"id":"LAO"}, +{"type":"Feature","properties":{"name":"Lao People's Democratic Republic"},"geometry":{"type":"Polygon","coordinates":[[[105.218777,14.273212],[105.544338,14.723934],[105.589039,15.570316],[104.779321,16.441865],[104.716947,17.428859],[103.956477,18.240954],[103.200192,18.309632],[102.998706,17.961695],[102.413005,17.932782],[102.113592,18.109102],[101.059548,17.512497],[101.035931,18.408928],[101.282015,19.462585],[100.606294,19.508344],[100.548881,20.109238],[100.115988,20.41785],[100.329101,20.786122],[101.180005,21.436573],[101.270026,21.201652],[101.80312,21.174367],[101.652018,22.318199],[102.170436,22.464753],[102.754896,21.675137],[103.203861,20.766562],[104.435,20.758733],[104.822574,19.886642],[104.183388,19.624668],[103.896532,19.265181],[105.094598,18.666975],[105.925762,17.485315],[106.556008,16.604284],[107.312706,15.908538],[107.564525,15.202173],[107.382727,14.202441],[106.496373,14.570584],[106.043946,13.881091],[105.218777,14.273212]]]},"id":"LAO"}, {"type":"Feature","properties":{"name":"Lebanon"},"geometry":{"type":"Polygon","coordinates":[[[35.821101,33.277426],[35.552797,33.264275],[35.460709,33.08904],[35.126053,33.0909],[35.482207,33.90545],[35.979592,34.610058],[35.998403,34.644914],[36.448194,34.593935],[36.61175,34.201789],[36.06646,33.824912],[35.821101,33.277426]]]},"id":"LBN"}, {"type":"Feature","properties":{"name":"Liberia"},"geometry":{"type":"Polygon","coordinates":[[[-7.712159,4.364566],[-7.974107,4.355755],[-9.004794,4.832419],[-9.91342,5.593561],[-10.765384,6.140711],[-11.438779,6.785917],[-11.199802,7.105846],[-11.146704,7.396706],[-10.695595,7.939464],[-10.230094,8.406206],[-10.016567,8.428504],[-9.755342,8.541055],[-9.33728,7.928534],[-9.403348,7.526905],[-9.208786,7.313921],[-8.926065,7.309037],[-8.722124,7.711674],[-8.439298,7.686043],[-8.485446,7.395208],[-8.385452,6.911801],[-8.60288,6.467564],[-8.311348,6.193033],[-7.993693,6.12619],[-7.570153,5.707352],[-7.539715,5.313345],[-7.635368,5.188159],[-7.712159,4.364566]]]},"id":"LBR"}, {"type":"Feature","properties":{"name":"Libya"},"geometry":{"type":"Polygon","coordinates":[[[14.8513,22.86295],[14.143871,22.491289],[13.581425,23.040506],[11.999506,23.471668],[11.560669,24.097909],[10.771364,24.562532],[10.303847,24.379313],[9.948261,24.936954],[9.910693,25.365455],[9.319411,26.094325],[9.716286,26.512206],[9.629056,27.140953],[9.756128,27.688259],[9.683885,28.144174],[9.859998,28.95999],[9.805634,29.424638],[9.48214,30.307556],[9.970017,30.539325],[10.056575,30.961831],[9.950225,31.37607],[10.636901,31.761421],[10.94479,32.081815],[11.432253,32.368903],[11.488787,33.136996],[12.66331,32.79278],[13.08326,32.87882],[13.91868,32.71196],[15.24563,32.26508],[15.71394,31.37626],[16.61162,31.18218],[18.02109,30.76357],[19.08641,30.26639],[19.57404,30.52582],[20.05335,30.98576],[19.82033,31.75179],[20.13397,32.2382],[20.85452,32.7068],[21.54298,32.8432],[22.89576,32.63858],[23.2368,32.19149],[23.60913,32.18726],[23.9275,32.01667],[24.92114,31.89936],[25.16482,31.56915],[24.80287,31.08929],[24.95762,30.6616],[24.70007,30.04419],[25,29.238655],[25,25.6825],[25,22],[25,20.00304],[23.85,20],[23.83766,19.58047],[19.84926,21.49509],[15.86085,23.40972],[14.8513,22.86295]]]},"id":"LBY"}, @@ -99,7 +99,7 @@ {"type":"Feature","properties":{"name":"Luxembourg"},"geometry":{"type":"Polygon","coordinates":[[[6.043073,50.128052],[6.242751,49.902226],[6.18632,49.463803],[5.897759,49.442667],[5.674052,49.529484],[5.782417,50.090328],[6.043073,50.128052]]]},"id":"LUX"}, {"type":"Feature","properties":{"name":"Latvia"},"geometry":{"type":"Polygon","coordinates":[[[21.0558,56.031076],[21.090424,56.783873],[21.581866,57.411871],[22.524341,57.753374],[23.318453,57.006236],[24.12073,57.025693],[24.312863,57.793424],[25.164594,57.970157],[25.60281,57.847529],[26.463532,57.476389],[27.288185,57.474528],[27.770016,57.244258],[27.855282,56.759326],[28.176709,56.16913],[27.10246,55.783314],[26.494331,55.615107],[25.533047,56.100297],[25.000934,56.164531],[24.860684,56.372528],[23.878264,56.273671],[22.201157,56.337802],[21.0558,56.031076]]]},"id":"LVA"}, {"type":"Feature","properties":{"name":"Morocco"},"geometry":{"type":"Polygon","coordinates":[[[-5.193863,35.755182],[-4.591006,35.330712],[-3.640057,35.399855],[-2.604306,35.179093],[-2.169914,35.168396],[-1.792986,34.527919],[-1.733455,33.919713],[-1.388049,32.864015],[-1.124551,32.651522],[-1.307899,32.262889],[-2.616605,32.094346],[-3.06898,31.724498],[-3.647498,31.637294],[-3.690441,30.896952],[-4.859646,30.501188],[-5.242129,30.000443],[-6.060632,29.7317],[-7.059228,29.579228],[-8.674116,28.841289],[-8.66559,27.656426],[-8.817809,27.656426],[-8.817828,27.656426],[-8.794884,27.120696],[-9.413037,27.088476],[-9.735343,26.860945],[-10.189424,26.860945],[-10.551263,26.990808],[-11.392555,26.883424],[-11.71822,26.104092],[-12.030759,26.030866],[-12.500963,24.770116],[-13.89111,23.691009],[-14.221168,22.310163],[-14.630833,21.86094],[-14.750955,21.5006],[-17.002962,21.420734],[-17.020428,21.42231],[-16.973248,21.885745],[-16.589137,22.158234],[-16.261922,22.67934],[-16.326414,23.017768],[-15.982611,23.723358],[-15.426004,24.359134],[-15.089332,24.520261],[-14.824645,25.103533],[-14.800926,25.636265],[-14.43994,26.254418],[-13.773805,26.618892],[-13.139942,27.640148],[-13.121613,27.654148],[-12.618837,28.038186],[-11.688919,28.148644],[-10.900957,28.832142],[-10.399592,29.098586],[-9.564811,29.933574],[-9.814718,31.177736],[-9.434793,32.038096],[-9.300693,32.564679],[-8.657476,33.240245],[-7.654178,33.697065],[-6.912544,34.110476],[-6.244342,35.145865],[-5.929994,35.759988],[-5.193863,35.755182]]]},"id":"MAR"}, -{"type":"Feature","properties":{"name":"Moldova"},"geometry":{"type":"Polygon","coordinates":[[[26.619337,48.220726],[26.857824,48.368211],[27.522537,48.467119],[28.259547,48.155562],[28.670891,48.118149],[29.122698,47.849095],[29.050868,47.510227],[29.415135,47.346645],[29.559674,46.928583],[29.908852,46.674361],[29.83821,46.525326],[30.024659,46.423937],[29.759972,46.349988],[29.170654,46.379262],[29.072107,46.517678],[28.862972,46.437889],[28.933717,46.25883],[28.659987,45.939987],[28.485269,45.596907],[28.233554,45.488283],[28.054443,45.944586],[28.160018,46.371563],[28.12803,46.810476],[27.551166,47.405117],[27.233873,47.826771],[26.924176,48.123264],[26.619337,48.220726]]]},"id":"MDA"}, +{"type":"Feature","properties":{"name":"Moldova, Republic of"},"geometry":{"type":"Polygon","coordinates":[[[26.619337,48.220726],[26.857824,48.368211],[27.522537,48.467119],[28.259547,48.155562],[28.670891,48.118149],[29.122698,47.849095],[29.050868,47.510227],[29.415135,47.346645],[29.559674,46.928583],[29.908852,46.674361],[29.83821,46.525326],[30.024659,46.423937],[29.759972,46.349988],[29.170654,46.379262],[29.072107,46.517678],[28.862972,46.437889],[28.933717,46.25883],[28.659987,45.939987],[28.485269,45.596907],[28.233554,45.488283],[28.054443,45.944586],[28.160018,46.371563],[28.12803,46.810476],[27.551166,47.405117],[27.233873,47.826771],[26.924176,48.123264],[26.619337,48.220726]]]},"id":"MDA"}, {"type":"Feature","properties":{"name":"Madagascar"},"geometry":{"type":"Polygon","coordinates":[[[49.543519,-12.469833],[49.808981,-12.895285],[50.056511,-13.555761],[50.217431,-14.758789],[50.476537,-15.226512],[50.377111,-15.706069],[50.200275,-16.000263],[49.860606,-15.414253],[49.672607,-15.710204],[49.863344,-16.451037],[49.774564,-16.875042],[49.498612,-17.106036],[49.435619,-17.953064],[49.041792,-19.118781],[48.548541,-20.496888],[47.930749,-22.391501],[47.547723,-23.781959],[47.095761,-24.94163],[46.282478,-25.178463],[45.409508,-25.601434],[44.833574,-25.346101],[44.03972,-24.988345],[43.763768,-24.460677],[43.697778,-23.574116],[43.345654,-22.776904],[43.254187,-22.057413],[43.433298,-21.336475],[43.893683,-21.163307],[43.89637,-20.830459],[44.374325,-20.072366],[44.464397,-19.435454],[44.232422,-18.961995],[44.042976,-18.331387],[43.963084,-17.409945],[44.312469,-16.850496],[44.446517,-16.216219],[44.944937,-16.179374],[45.502732,-15.974373],[45.872994,-15.793454],[46.312243,-15.780018],[46.882183,-15.210182],[47.70513,-14.594303],[48.005215,-14.091233],[47.869047,-13.663869],[48.293828,-13.784068],[48.84506,-13.089175],[48.863509,-12.487868],[49.194651,-12.040557],[49.543519,-12.469833]]]},"id":"MDG"}, {"type":"Feature","properties":{"name":"Mexico"},"geometry":{"type":"Polygon","coordinates":[[[-97.140008,25.869997],[-97.528072,24.992144],[-97.702946,24.272343],[-97.776042,22.93258],[-97.872367,22.444212],[-97.699044,21.898689],[-97.38896,21.411019],[-97.189333,20.635433],[-96.525576,19.890931],[-96.292127,19.320371],[-95.900885,18.828024],[-94.839063,18.562717],[-94.42573,18.144371],[-93.548651,18.423837],[-92.786114,18.524839],[-92.037348,18.704569],[-91.407903,18.876083],[-90.77187,19.28412],[-90.53359,19.867418],[-90.451476,20.707522],[-90.278618,20.999855],[-89.601321,21.261726],[-88.543866,21.493675],[-87.658417,21.458846],[-87.05189,21.543543],[-86.811982,21.331515],[-86.845908,20.849865],[-87.383291,20.255405],[-87.621054,19.646553],[-87.43675,19.472403],[-87.58656,19.04013],[-87.837191,18.259816],[-88.090664,18.516648],[-88.300031,18.499982],[-88.490123,18.486831],[-88.848344,17.883198],[-89.029857,18.001511],[-89.150909,17.955468],[-89.14308,17.808319],[-90.067934,17.819326],[-91.00152,17.817595],[-91.002269,17.254658],[-91.453921,17.252177],[-91.08167,16.918477],[-90.711822,16.687483],[-90.600847,16.470778],[-90.438867,16.41011],[-90.464473,16.069562],[-91.74796,16.066565],[-92.229249,15.251447],[-92.087216,15.064585],[-92.20323,14.830103],[-92.22775,14.538829],[-93.359464,15.61543],[-93.875169,15.940164],[-94.691656,16.200975],[-95.250227,16.128318],[-96.053382,15.752088],[-96.557434,15.653515],[-97.263592,15.917065],[-98.01303,16.107312],[-98.947676,16.566043],[-99.697397,16.706164],[-100.829499,17.171071],[-101.666089,17.649026],[-101.918528,17.91609],[-102.478132,17.975751],[-103.50099,18.292295],[-103.917527,18.748572],[-104.99201,19.316134],[-105.493038,19.946767],[-105.731396,20.434102],[-105.397773,20.531719],[-105.500661,20.816895],[-105.270752,21.076285],[-105.265817,21.422104],[-105.603161,21.871146],[-105.693414,22.26908],[-106.028716,22.773752],[-106.90998,23.767774],[-107.915449,24.548915],[-108.401905,25.172314],[-109.260199,25.580609],[-109.444089,25.824884],[-109.291644,26.442934],[-109.801458,26.676176],[-110.391732,27.162115],[-110.641019,27.859876],[-111.178919,27.941241],[-111.759607,28.467953],[-112.228235,28.954409],[-112.271824,29.266844],[-112.809594,30.021114],[-113.163811,30.786881],[-113.148669,31.170966],[-113.871881,31.567608],[-114.205737,31.524045],[-114.776451,31.799532],[-114.9367,31.393485],[-114.771232,30.913617],[-114.673899,30.162681],[-114.330974,29.750432],[-113.588875,29.061611],[-113.424053,28.826174],[-113.271969,28.754783],[-113.140039,28.411289],[-112.962298,28.42519],[-112.761587,27.780217],[-112.457911,27.525814],[-112.244952,27.171727],[-111.616489,26.662817],[-111.284675,25.73259],[-110.987819,25.294606],[-110.710007,24.826004],[-110.655049,24.298595],[-110.172856,24.265548],[-109.771847,23.811183],[-109.409104,23.364672],[-109.433392,23.185588],[-109.854219,22.818272],[-110.031392,22.823078],[-110.295071,23.430973],[-110.949501,24.000964],[-111.670568,24.484423],[-112.182036,24.738413],[-112.148989,25.470125],[-112.300711,26.012004],[-112.777297,26.32196],[-113.464671,26.768186],[-113.59673,26.63946],[-113.848937,26.900064],[-114.465747,27.14209],[-115.055142,27.722727],[-114.982253,27.7982],[-114.570366,27.741485],[-114.199329,28.115003],[-114.162018,28.566112],[-114.931842,29.279479],[-115.518654,29.556362],[-115.887365,30.180794],[-116.25835,30.836464],[-116.721526,31.635744],[-117.12776,32.53534],[-115.99135,32.61239],[-114.72139,32.72083],[-114.815,32.52528],[-113.30498,32.03914],[-111.02361,31.33472],[-109.035,31.34194],[-108.24194,31.34222],[-108.24,31.754854],[-106.50759,31.75452],[-106.1429,31.39995],[-105.63159,31.08383],[-105.03737,30.64402],[-104.70575,30.12173],[-104.45697,29.57196],[-103.94,29.27],[-103.11,28.97],[-102.48,29.76],[-101.6624,29.7793],[-100.9576,29.38071],[-100.45584,28.69612],[-100.11,28.11],[-99.52,27.54],[-99.3,26.84],[-99.02,26.37],[-98.24,26.06],[-97.53,25.84],[-97.140008,25.869997]]]},"id":"MEX"}, {"type":"Feature","properties":{"name":"Macedonia"},"geometry":{"type":"Polygon","coordinates":[[[20.59023,41.85541],[20.71731,41.84711],[20.76216,42.05186],[21.3527,42.2068],[21.576636,42.245224],[21.91708,42.30364],[22.380526,42.32026],[22.881374,41.999297],[22.952377,41.337994],[22.76177,41.3048],[22.597308,41.130487],[22.055378,41.149866],[21.674161,40.931275],[21.02004,40.842727],[20.60518,41.08622],[20.46315,41.51509],[20.59023,41.85541]]]},"id":"MKD"}, @@ -133,7 +133,7 @@ {"type":"Feature","properties":{"name":"Paraguay"},"geometry":{"type":"Polygon","coordinates":[[[-62.685057,-22.249029],[-62.291179,-21.051635],[-62.265961,-20.513735],[-61.786326,-19.633737],[-60.043565,-19.342747],[-59.115042,-19.356906],[-58.183471,-19.868399],[-58.166392,-20.176701],[-57.870674,-20.732688],[-57.937156,-22.090176],[-56.88151,-22.282154],[-56.473317,-22.0863],[-55.797958,-22.35693],[-55.610683,-22.655619],[-55.517639,-23.571998],[-55.400747,-23.956935],[-55.027902,-24.001274],[-54.652834,-23.839578],[-54.29296,-24.021014],[-54.293476,-24.5708],[-54.428946,-25.162185],[-54.625291,-25.739255],[-54.788795,-26.621786],[-55.695846,-27.387837],[-56.486702,-27.548499],[-57.60976,-27.395899],[-58.618174,-27.123719],[-57.63366,-25.603657],[-57.777217,-25.16234],[-58.807128,-24.771459],[-60.028966,-24.032796],[-60.846565,-23.880713],[-62.685057,-22.249029]]]},"id":"PRY"}, {"type":"Feature","properties":{"name":"Qatar"},"geometry":{"type":"Polygon","coordinates":[[[50.810108,24.754743],[50.743911,25.482424],[51.013352,26.006992],[51.286462,26.114582],[51.589079,25.801113],[51.6067,25.21567],[51.389608,24.627386],[51.112415,24.556331],[50.810108,24.754743]]]},"id":"QAT"}, {"type":"Feature","properties":{"name":"Romania"},"geometry":{"type":"Polygon","coordinates":[[[22.710531,47.882194],[23.142236,48.096341],[23.760958,47.985598],[24.402056,47.981878],[24.866317,47.737526],[25.207743,47.891056],[25.945941,47.987149],[26.19745,48.220881],[26.619337,48.220726],[26.924176,48.123264],[27.233873,47.826771],[27.551166,47.405117],[28.12803,46.810476],[28.160018,46.371563],[28.054443,45.944586],[28.233554,45.488283],[28.679779,45.304031],[29.149725,45.464925],[29.603289,45.293308],[29.626543,45.035391],[29.141612,44.82021],[28.837858,44.913874],[28.558081,43.707462],[27.970107,43.812468],[27.2424,44.175986],[26.065159,43.943494],[25.569272,43.688445],[24.100679,43.741051],[23.332302,43.897011],[22.944832,43.823785],[22.65715,44.234923],[22.474008,44.409228],[22.705726,44.578003],[22.459022,44.702517],[22.145088,44.478422],[21.562023,44.768947],[21.483526,45.18117],[20.874313,45.416375],[20.762175,45.734573],[20.220192,46.127469],[21.021952,46.316088],[21.626515,46.994238],[22.099768,47.672439],[22.710531,47.882194]]]},"id":"ROU"}, -{"type":"Feature","properties":{"name":"Russia"},"geometry":{"type":"MultiPolygon","coordinates":[[[[143.648007,50.7476],[144.654148,48.976391],[143.173928,49.306551],[142.558668,47.861575],[143.533492,46.836728],[143.505277,46.137908],[142.747701,46.740765],[142.09203,45.966755],[141.906925,46.805929],[142.018443,47.780133],[141.904445,48.859189],[142.1358,49.615163],[142.179983,50.952342],[141.594076,51.935435],[141.682546,53.301966],[142.606934,53.762145],[142.209749,54.225476],[142.654786,54.365881],[142.914616,53.704578],[143.260848,52.74076],[143.235268,51.75666],[143.648007,50.7476]]],[[[22.731099,54.327537],[20.892245,54.312525],[19.66064,54.426084],[19.888481,54.86616],[21.268449,55.190482],[22.315724,55.015299],[22.757764,54.856574],[22.651052,54.582741],[22.731099,54.327537]]],[[[-175.01425,66.58435],[-174.33983,66.33556],[-174.57182,67.06219],[-171.85731,66.91308],[-169.89958,65.97724],[-170.89107,65.54139],[-172.53025,65.43791],[-172.555,64.46079],[-172.95533,64.25269],[-173.89184,64.2826],[-174.65392,64.63125],[-175.98353,64.92288],[-176.20716,65.35667],[-177.22266,65.52024],[-178.35993,65.39052],[-178.90332,65.74044],[-178.68611,66.11211],[-179.88377,65.87456],[-179.43268,65.40411],[-180,64.979709],[-180,68.963636],[-177.55,68.2],[-174.92825,67.20589],[-175.01425,66.58435]]],[[[180,70.832199],[178.903425,70.78114],[178.7253,71.0988],[180,71.515714],[180,70.832199]]],[[[-178.69378,70.89302],[-180,70.832199],[-180,71.515714],[-179.871875,71.55762],[-179.02433,71.55553],[-177.577945,71.26948],[-177.663575,71.13277],[-178.69378,70.89302]]],[[[143.60385,73.21244],[142.08763,73.20544],[140.038155,73.31692],[139.86312,73.36983],[140.81171,73.76506],[142.06207,73.85758],[143.48283,73.47525],[143.60385,73.21244]]],[[[150.73167,75.08406],[149.575925,74.68892],[147.977465,74.778355],[146.11919,75.17298],[146.358485,75.49682],[148.22223,75.345845],[150.73167,75.08406]]],[[[145.086285,75.562625],[144.3,74.82],[140.61381,74.84768],[138.95544,74.61148],[136.97439,75.26167],[137.51176,75.94917],[138.831075,76.13676],[141.471615,76.09289],[145.086285,75.562625]]],[[[57.535693,70.720464],[56.944979,70.632743],[53.677375,70.762658],[53.412017,71.206662],[51.601895,71.474759],[51.455754,72.014881],[52.478275,72.229442],[52.444169,72.774731],[54.427614,73.627548],[53.50829,73.749814],[55.902459,74.627486],[55.631933,75.081412],[57.868644,75.60939],[61.170044,76.251883],[64.498368,76.439055],[66.210977,76.809782],[68.15706,76.939697],[68.852211,76.544811],[68.180573,76.233642],[64.637326,75.737755],[61.583508,75.260885],[58.477082,74.309056],[56.986786,73.333044],[55.419336,72.371268],[55.622838,71.540595],[57.535693,70.720464]]],[[[106.97013,76.97419],[107.24,76.48],[108.1538,76.72335],[111.07726,76.71],[113.33151,76.22224],[114.13417,75.84764],[113.88539,75.32779],[112.77918,75.03186],[110.15125,74.47673],[109.4,74.18],[110.64,74.04],[112.11919,73.78774],[113.01954,73.97693],[113.52958,73.33505],[113.96881,73.59488],[115.56782,73.75285],[118.77633,73.58772],[119.02,73.12],[123.20066,72.97122],[123.25777,73.73503],[125.38,73.56],[126.97644,73.56549],[128.59126,73.03871],[129.05157,72.39872],[128.46,71.98],[129.71599,71.19304],[131.28858,70.78699],[132.2535,71.8363],[133.85766,71.38642],[135.56193,71.65525],[137.49755,71.34763],[138.23409,71.62803],[139.86983,71.48783],[139.14791,72.41619],[140.46817,72.84941],[149.5,72.2],[150.35118,71.60643],[152.9689,70.84222],[157.00688,71.03141],[158.99779,70.86672],[159.83031,70.45324],[159.70866,69.72198],[160.94053,69.43728],[162.27907,69.64204],[164.05248,69.66823],[165.94037,69.47199],[167.83567,69.58269],[169.57763,68.6938],[170.81688,69.01363],[170.0082,69.65276],[170.45345,70.09703],[173.64391,69.81743],[175.72403,69.87725],[178.6,69.4],[180,68.963636],[180,64.979709],[179.99281,64.97433],[178.7072,64.53493],[177.41128,64.60821],[178.313,64.07593],[178.90825,63.25197],[179.37034,62.98262],[179.48636,62.56894],[179.22825,62.3041],[177.3643,62.5219],[174.56929,61.76915],[173.68013,61.65261],[172.15,60.95],[170.6985,60.33618],[170.33085,59.88177],[168.90046,60.57355],[166.29498,59.78855],[165.84,60.16],[164.87674,59.7316],[163.53929,59.86871],[163.21711,59.21101],[162.01733,58.24328],[162.05297,57.83912],[163.19191,57.61503],[163.05794,56.15924],[162.12958,56.12219],[161.70146,55.28568],[162.11749,54.85514],[160.36877,54.34433],[160.02173,53.20257],[158.53094,52.95868],[158.23118,51.94269],[156.78979,51.01105],[156.42,51.7],[155.99182,53.15895],[155.43366,55.38103],[155.91442,56.76792],[156.75815,57.3647],[156.81035,57.83204],[158.36433,58.05575],[160.15064,59.31477],[161.87204,60.343],[163.66969,61.1409],[164.47355,62.55061],[163.25842,62.46627],[162.65791,61.6425],[160.12148,60.54423],[159.30232,61.77396],[156.72068,61.43442],[154.21806,59.75818],[155.04375,59.14495],[152.81185,58.88385],[151.26573,58.78089],[151.33815,59.50396],[149.78371,59.65573],[148.54481,59.16448],[145.48722,59.33637],[142.19782,59.03998],[138.95848,57.08805],[135.12619,54.72959],[136.70171,54.60355],[137.19342,53.97732],[138.1647,53.75501],[138.80463,54.25455],[139.90151,54.18968],[141.34531,53.08957],[141.37923,52.23877],[140.59742,51.23967],[140.51308,50.04553],[140.06193,48.44671],[138.55472,46.99965],[138.21971,46.30795],[136.86232,45.1435],[135.51535,43.989],[134.86939,43.39821],[133.53687,42.81147],[132.90627,42.79849],[132.27807,43.28456],[130.93587,42.55274],[130.78,42.22],[130.64,42.395],[130.633866,42.903015],[131.144688,42.92999],[131.288555,44.11152],[131.02519,44.96796],[131.883454,45.321162],[133.09712,45.14409],[133.769644,46.116927],[134.11235,47.21248],[134.50081,47.57845],[135.026311,48.47823],[133.373596,48.183442],[132.50669,47.78896],[130.98726,47.79013],[130.582293,48.729687],[129.397818,49.4406],[127.6574,49.76027],[127.287456,50.739797],[126.939157,51.353894],[126.564399,51.784255],[125.946349,52.792799],[125.068211,53.161045],[123.57147,53.4588],[122.245748,53.431726],[121.003085,53.251401],[120.177089,52.753886],[120.725789,52.516226],[120.7382,51.96411],[120.18208,51.64355],[119.27939,50.58292],[119.288461,50.142883],[117.879244,49.510983],[116.678801,49.888531],[115.485695,49.805177],[114.96211,50.140247],[114.362456,50.248303],[112.89774,49.543565],[111.581231,49.377968],[110.662011,49.130128],[109.402449,49.292961],[108.475167,49.282548],[107.868176,49.793705],[106.888804,50.274296],[105.886591,50.406019],[104.62158,50.27532],[103.676545,50.089966],[102.25589,50.51056],[102.06521,51.25991],[100.88948,51.516856],[99.981732,51.634006],[98.861491,52.047366],[97.82574,51.010995],[98.231762,50.422401],[97.25976,49.72605],[95.81402,49.97746],[94.815949,50.013433],[94.147566,50.480537],[93.10421,50.49529],[92.234712,50.802171],[90.713667,50.331812],[88.805567,49.470521],[87.751264,49.297198],[87.35997,49.214981],[86.829357,49.826675],[85.54127,49.692859],[85.11556,50.117303],[84.416377,50.3114],[83.935115,50.889246],[83.383004,51.069183],[81.945986,50.812196],[80.568447,51.388336],[80.03556,50.864751],[77.800916,53.404415],[76.525179,54.177003],[76.8911,54.490524],[74.38482,53.54685],[73.425679,53.48981],[73.508516,54.035617],[72.22415,54.376655],[71.180131,54.133285],[70.865267,55.169734],[69.068167,55.38525],[68.1691,54.970392],[65.66687,54.60125],[65.178534,54.354228],[61.4366,54.00625],[60.978066,53.664993],[61.699986,52.979996],[60.739993,52.719986],[60.927269,52.447548],[59.967534,51.96042],[61.588003,51.272659],[61.337424,50.79907],[59.932807,50.842194],[59.642282,50.545442],[58.36332,51.06364],[56.77798,51.04355],[55.71694,50.62171],[54.532878,51.02624],[52.328724,51.718652],[50.766648,51.692762],[48.702382,50.605128],[48.577841,49.87476],[47.54948,50.454698],[46.751596,49.356006],[47.043672,49.152039],[46.466446,48.394152],[47.31524,47.71585],[48.05725,47.74377],[48.694734,47.075628],[48.59325,46.56104],[49.10116,46.39933],[48.64541,45.80629],[47.67591,45.64149],[46.68201,44.6092],[47.59094,43.66016],[47.49252,42.98658],[48.58437,41.80888],[47.987283,41.405819],[47.815666,41.151416],[47.373315,41.219732],[46.686071,41.827137],[46.404951,41.860675],[45.7764,42.09244],[45.470279,42.502781],[44.537623,42.711993],[43.93121,42.55496],[43.75599,42.74083],[42.3944,43.2203],[40.92219,43.38215],[40.076965,43.553104],[39.955009,43.434998],[38.68,44.28],[37.53912,44.65721],[36.67546,45.24469],[37.40317,45.40451],[38.23295,46.24087],[37.67372,46.63657],[39.14767,47.04475],[39.1212,47.26336],[38.223538,47.10219],[38.255112,47.5464],[38.77057,47.82562],[39.738278,47.898937],[39.89562,48.23241],[39.67465,48.78382],[40.080789,49.30743],[40.06904,49.60105],[38.594988,49.926462],[38.010631,49.915662],[37.39346,50.383953],[36.626168,50.225591],[35.356116,50.577197],[35.37791,50.77394],[35.022183,51.207572],[34.224816,51.255993],[34.141978,51.566413],[34.391731,51.768882],[33.7527,52.335075],[32.715761,52.238465],[32.412058,52.288695],[32.15944,52.06125],[31.78597,52.10168],[31.540018,52.742052],[31.305201,53.073996],[31.49764,53.16743],[32.304519,53.132726],[32.693643,53.351421],[32.405599,53.618045],[31.731273,53.794029],[31.791424,53.974639],[31.384472,54.157056],[30.757534,54.811771],[30.971836,55.081548],[30.873909,55.550976],[29.896294,55.789463],[29.371572,55.670091],[29.229513,55.918344],[28.176709,56.16913],[27.855282,56.759326],[27.770016,57.244258],[27.288185,57.474528],[27.716686,57.791899],[27.42015,58.72457],[28.131699,59.300825],[27.98112,59.47537],[29.1177,60.02805],[28.07,60.50352],[30.211107,61.780028],[31.139991,62.357693],[31.516092,62.867687],[30.035872,63.552814],[30.444685,64.204453],[29.54443,64.948672],[30.21765,65.80598],[29.054589,66.944286],[29.977426,67.698297],[28.445944,68.364613],[28.59193,69.064777],[29.39955,69.15692],[31.10108,69.55811],[32.13272,69.90595],[33.77547,69.30142],[36.51396,69.06342],[40.29234,67.9324],[41.05987,67.45713],[41.12595,66.79158],[40.01583,66.26618],[38.38295,65.99953],[33.91871,66.75961],[33.18444,66.63253],[34.81477,65.90015],[34.878574,65.436213],[34.94391,64.41437],[36.23129,64.10945],[37.01273,63.84983],[37.14197,64.33471],[36.539579,64.76446],[37.17604,65.14322],[39.59345,64.52079],[40.4356,64.76446],[39.7626,65.49682],[42.09309,66.47623],[43.01604,66.41858],[43.94975,66.06908],[44.53226,66.75634],[43.69839,67.35245],[44.18795,67.95051],[43.45282,68.57079],[46.25,68.25],[46.82134,67.68997],[45.55517,67.56652],[45.56202,67.01005],[46.34915,66.66767],[47.89416,66.88455],[48.13876,67.52238],[50.22766,67.99867],[53.71743,68.85738],[54.47171,68.80815],[53.48582,68.20131],[54.72628,68.09702],[55.44268,68.43866],[57.31702,68.46628],[58.802,68.88082],[59.94142,68.27844],[61.07784,68.94069],[60.03,69.52],[60.55,69.85],[63.504,69.54739],[64.888115,69.234835],[68.51216,68.09233],[69.18068,68.61563],[68.16444,69.14436],[68.13522,69.35649],[66.93008,69.45461],[67.25976,69.92873],[66.72492,70.70889],[66.69466,71.02897],[68.54006,71.9345],[69.19636,72.84336],[69.94,73.04],[72.58754,72.77629],[72.79603,72.22006],[71.84811,71.40898],[72.47011,71.09019],[72.79188,70.39114],[72.5647,69.02085],[73.66787,68.4079],[73.2387,67.7404],[71.28,66.32],[72.42301,66.17267],[72.82077,66.53267],[73.92099,66.78946],[74.18651,67.28429],[75.052,67.76047],[74.46926,68.32899],[74.93584,68.98918],[73.84236,69.07146],[73.60187,69.62763],[74.3998,70.63175],[73.1011,71.44717],[74.89082,72.12119],[74.65926,72.83227],[75.15801,72.85497],[75.68351,72.30056],[75.28898,71.33556],[76.35911,71.15287],[75.90313,71.87401],[77.57665,72.26717],[79.65202,72.32011],[81.5,71.75],[80.61071,72.58285],[80.51109,73.6482],[82.25,73.85],[84.65526,73.80591],[86.8223,73.93688],[86.00956,74.45967],[87.16682,75.11643],[88.31571,75.14393],[90.26,75.64],[92.90058,75.77333],[93.23421,76.0472],[95.86,76.14],[96.67821,75.91548],[98.92254,76.44689],[100.75967,76.43028],[101.03532,76.86189],[101.99084,77.28754],[104.3516,77.69792],[106.06664,77.37389],[104.705,77.1274],[106.97013,76.97419]]],[[[105.07547,78.30689],[99.43814,77.921],[101.2649,79.23399],[102.08635,79.34641],[102.837815,79.28129],[105.37243,78.71334],[105.07547,78.30689]]],[[[51.136187,80.54728],[49.793685,80.415428],[48.894411,80.339567],[48.754937,80.175468],[47.586119,80.010181],[46.502826,80.247247],[47.072455,80.559424],[44.846958,80.58981],[46.799139,80.771918],[48.318477,80.78401],[48.522806,80.514569],[49.09719,80.753986],[50.039768,80.918885],[51.522933,80.699726],[51.136187,80.54728]]],[[[99.93976,78.88094],[97.75794,78.7562],[94.97259,79.044745],[93.31288,79.4265],[92.5454,80.14379],[91.18107,80.34146],[93.77766,81.0246],[95.940895,81.2504],[97.88385,80.746975],[100.186655,79.780135],[99.93976,78.88094]]]]},"id":"RUS"}, +{"type":"Feature","properties":{"name":"Russian Federation"},"geometry":{"type":"MultiPolygon","coordinates":[[[[143.648007,50.7476],[144.654148,48.976391],[143.173928,49.306551],[142.558668,47.861575],[143.533492,46.836728],[143.505277,46.137908],[142.747701,46.740765],[142.09203,45.966755],[141.906925,46.805929],[142.018443,47.780133],[141.904445,48.859189],[142.1358,49.615163],[142.179983,50.952342],[141.594076,51.935435],[141.682546,53.301966],[142.606934,53.762145],[142.209749,54.225476],[142.654786,54.365881],[142.914616,53.704578],[143.260848,52.74076],[143.235268,51.75666],[143.648007,50.7476]]],[[[22.731099,54.327537],[20.892245,54.312525],[19.66064,54.426084],[19.888481,54.86616],[21.268449,55.190482],[22.315724,55.015299],[22.757764,54.856574],[22.651052,54.582741],[22.731099,54.327537]]],[[[-175.01425,66.58435],[-174.33983,66.33556],[-174.57182,67.06219],[-171.85731,66.91308],[-169.89958,65.97724],[-170.89107,65.54139],[-172.53025,65.43791],[-172.555,64.46079],[-172.95533,64.25269],[-173.89184,64.2826],[-174.65392,64.63125],[-175.98353,64.92288],[-176.20716,65.35667],[-177.22266,65.52024],[-178.35993,65.39052],[-178.90332,65.74044],[-178.68611,66.11211],[-179.88377,65.87456],[-179.43268,65.40411],[-180,64.979709],[-180,68.963636],[-177.55,68.2],[-174.92825,67.20589],[-175.01425,66.58435]]],[[[180,70.832199],[178.903425,70.78114],[178.7253,71.0988],[180,71.515714],[180,70.832199]]],[[[-178.69378,70.89302],[-180,70.832199],[-180,71.515714],[-179.871875,71.55762],[-179.02433,71.55553],[-177.577945,71.26948],[-177.663575,71.13277],[-178.69378,70.89302]]],[[[143.60385,73.21244],[142.08763,73.20544],[140.038155,73.31692],[139.86312,73.36983],[140.81171,73.76506],[142.06207,73.85758],[143.48283,73.47525],[143.60385,73.21244]]],[[[150.73167,75.08406],[149.575925,74.68892],[147.977465,74.778355],[146.11919,75.17298],[146.358485,75.49682],[148.22223,75.345845],[150.73167,75.08406]]],[[[145.086285,75.562625],[144.3,74.82],[140.61381,74.84768],[138.95544,74.61148],[136.97439,75.26167],[137.51176,75.94917],[138.831075,76.13676],[141.471615,76.09289],[145.086285,75.562625]]],[[[57.535693,70.720464],[56.944979,70.632743],[53.677375,70.762658],[53.412017,71.206662],[51.601895,71.474759],[51.455754,72.014881],[52.478275,72.229442],[52.444169,72.774731],[54.427614,73.627548],[53.50829,73.749814],[55.902459,74.627486],[55.631933,75.081412],[57.868644,75.60939],[61.170044,76.251883],[64.498368,76.439055],[66.210977,76.809782],[68.15706,76.939697],[68.852211,76.544811],[68.180573,76.233642],[64.637326,75.737755],[61.583508,75.260885],[58.477082,74.309056],[56.986786,73.333044],[55.419336,72.371268],[55.622838,71.540595],[57.535693,70.720464]]],[[[106.97013,76.97419],[107.24,76.48],[108.1538,76.72335],[111.07726,76.71],[113.33151,76.22224],[114.13417,75.84764],[113.88539,75.32779],[112.77918,75.03186],[110.15125,74.47673],[109.4,74.18],[110.64,74.04],[112.11919,73.78774],[113.01954,73.97693],[113.52958,73.33505],[113.96881,73.59488],[115.56782,73.75285],[118.77633,73.58772],[119.02,73.12],[123.20066,72.97122],[123.25777,73.73503],[125.38,73.56],[126.97644,73.56549],[128.59126,73.03871],[129.05157,72.39872],[128.46,71.98],[129.71599,71.19304],[131.28858,70.78699],[132.2535,71.8363],[133.85766,71.38642],[135.56193,71.65525],[137.49755,71.34763],[138.23409,71.62803],[139.86983,71.48783],[139.14791,72.41619],[140.46817,72.84941],[149.5,72.2],[150.35118,71.60643],[152.9689,70.84222],[157.00688,71.03141],[158.99779,70.86672],[159.83031,70.45324],[159.70866,69.72198],[160.94053,69.43728],[162.27907,69.64204],[164.05248,69.66823],[165.94037,69.47199],[167.83567,69.58269],[169.57763,68.6938],[170.81688,69.01363],[170.0082,69.65276],[170.45345,70.09703],[173.64391,69.81743],[175.72403,69.87725],[178.6,69.4],[180,68.963636],[180,64.979709],[179.99281,64.97433],[178.7072,64.53493],[177.41128,64.60821],[178.313,64.07593],[178.90825,63.25197],[179.37034,62.98262],[179.48636,62.56894],[179.22825,62.3041],[177.3643,62.5219],[174.56929,61.76915],[173.68013,61.65261],[172.15,60.95],[170.6985,60.33618],[170.33085,59.88177],[168.90046,60.57355],[166.29498,59.78855],[165.84,60.16],[164.87674,59.7316],[163.53929,59.86871],[163.21711,59.21101],[162.01733,58.24328],[162.05297,57.83912],[163.19191,57.61503],[163.05794,56.15924],[162.12958,56.12219],[161.70146,55.28568],[162.11749,54.85514],[160.36877,54.34433],[160.02173,53.20257],[158.53094,52.95868],[158.23118,51.94269],[156.78979,51.01105],[156.42,51.7],[155.99182,53.15895],[155.43366,55.38103],[155.91442,56.76792],[156.75815,57.3647],[156.81035,57.83204],[158.36433,58.05575],[160.15064,59.31477],[161.87204,60.343],[163.66969,61.1409],[164.47355,62.55061],[163.25842,62.46627],[162.65791,61.6425],[160.12148,60.54423],[159.30232,61.77396],[156.72068,61.43442],[154.21806,59.75818],[155.04375,59.14495],[152.81185,58.88385],[151.26573,58.78089],[151.33815,59.50396],[149.78371,59.65573],[148.54481,59.16448],[145.48722,59.33637],[142.19782,59.03998],[138.95848,57.08805],[135.12619,54.72959],[136.70171,54.60355],[137.19342,53.97732],[138.1647,53.75501],[138.80463,54.25455],[139.90151,54.18968],[141.34531,53.08957],[141.37923,52.23877],[140.59742,51.23967],[140.51308,50.04553],[140.06193,48.44671],[138.55472,46.99965],[138.21971,46.30795],[136.86232,45.1435],[135.51535,43.989],[134.86939,43.39821],[133.53687,42.81147],[132.90627,42.79849],[132.27807,43.28456],[130.93587,42.55274],[130.78,42.22],[130.64,42.395],[130.633866,42.903015],[131.144688,42.92999],[131.288555,44.11152],[131.02519,44.96796],[131.883454,45.321162],[133.09712,45.14409],[133.769644,46.116927],[134.11235,47.21248],[134.50081,47.57845],[135.026311,48.47823],[133.373596,48.183442],[132.50669,47.78896],[130.98726,47.79013],[130.582293,48.729687],[129.397818,49.4406],[127.6574,49.76027],[127.287456,50.739797],[126.939157,51.353894],[126.564399,51.784255],[125.946349,52.792799],[125.068211,53.161045],[123.57147,53.4588],[122.245748,53.431726],[121.003085,53.251401],[120.177089,52.753886],[120.725789,52.516226],[120.7382,51.96411],[120.18208,51.64355],[119.27939,50.58292],[119.288461,50.142883],[117.879244,49.510983],[116.678801,49.888531],[115.485695,49.805177],[114.96211,50.140247],[114.362456,50.248303],[112.89774,49.543565],[111.581231,49.377968],[110.662011,49.130128],[109.402449,49.292961],[108.475167,49.282548],[107.868176,49.793705],[106.888804,50.274296],[105.886591,50.406019],[104.62158,50.27532],[103.676545,50.089966],[102.25589,50.51056],[102.06521,51.25991],[100.88948,51.516856],[99.981732,51.634006],[98.861491,52.047366],[97.82574,51.010995],[98.231762,50.422401],[97.25976,49.72605],[95.81402,49.97746],[94.815949,50.013433],[94.147566,50.480537],[93.10421,50.49529],[92.234712,50.802171],[90.713667,50.331812],[88.805567,49.470521],[87.751264,49.297198],[87.35997,49.214981],[86.829357,49.826675],[85.54127,49.692859],[85.11556,50.117303],[84.416377,50.3114],[83.935115,50.889246],[83.383004,51.069183],[81.945986,50.812196],[80.568447,51.388336],[80.03556,50.864751],[77.800916,53.404415],[76.525179,54.177003],[76.8911,54.490524],[74.38482,53.54685],[73.425679,53.48981],[73.508516,54.035617],[72.22415,54.376655],[71.180131,54.133285],[70.865267,55.169734],[69.068167,55.38525],[68.1691,54.970392],[65.66687,54.60125],[65.178534,54.354228],[61.4366,54.00625],[60.978066,53.664993],[61.699986,52.979996],[60.739993,52.719986],[60.927269,52.447548],[59.967534,51.96042],[61.588003,51.272659],[61.337424,50.79907],[59.932807,50.842194],[59.642282,50.545442],[58.36332,51.06364],[56.77798,51.04355],[55.71694,50.62171],[54.532878,51.02624],[52.328724,51.718652],[50.766648,51.692762],[48.702382,50.605128],[48.577841,49.87476],[47.54948,50.454698],[46.751596,49.356006],[47.043672,49.152039],[46.466446,48.394152],[47.31524,47.71585],[48.05725,47.74377],[48.694734,47.075628],[48.59325,46.56104],[49.10116,46.39933],[48.64541,45.80629],[47.67591,45.64149],[46.68201,44.6092],[47.59094,43.66016],[47.49252,42.98658],[48.58437,41.80888],[47.987283,41.405819],[47.815666,41.151416],[47.373315,41.219732],[46.686071,41.827137],[46.404951,41.860675],[45.7764,42.09244],[45.470279,42.502781],[44.537623,42.711993],[43.93121,42.55496],[43.75599,42.74083],[42.3944,43.2203],[40.92219,43.38215],[40.076965,43.553104],[39.955009,43.434998],[38.68,44.28],[37.53912,44.65721],[36.67546,45.24469],[37.40317,45.40451],[38.23295,46.24087],[37.67372,46.63657],[39.14767,47.04475],[39.1212,47.26336],[38.223538,47.10219],[38.255112,47.5464],[38.77057,47.82562],[39.738278,47.898937],[39.89562,48.23241],[39.67465,48.78382],[40.080789,49.30743],[40.06904,49.60105],[38.594988,49.926462],[38.010631,49.915662],[37.39346,50.383953],[36.626168,50.225591],[35.356116,50.577197],[35.37791,50.77394],[35.022183,51.207572],[34.224816,51.255993],[34.141978,51.566413],[34.391731,51.768882],[33.7527,52.335075],[32.715761,52.238465],[32.412058,52.288695],[32.15944,52.06125],[31.78597,52.10168],[31.540018,52.742052],[31.305201,53.073996],[31.49764,53.16743],[32.304519,53.132726],[32.693643,53.351421],[32.405599,53.618045],[31.731273,53.794029],[31.791424,53.974639],[31.384472,54.157056],[30.757534,54.811771],[30.971836,55.081548],[30.873909,55.550976],[29.896294,55.789463],[29.371572,55.670091],[29.229513,55.918344],[28.176709,56.16913],[27.855282,56.759326],[27.770016,57.244258],[27.288185,57.474528],[27.716686,57.791899],[27.42015,58.72457],[28.131699,59.300825],[27.98112,59.47537],[29.1177,60.02805],[28.07,60.50352],[30.211107,61.780028],[31.139991,62.357693],[31.516092,62.867687],[30.035872,63.552814],[30.444685,64.204453],[29.54443,64.948672],[30.21765,65.80598],[29.054589,66.944286],[29.977426,67.698297],[28.445944,68.364613],[28.59193,69.064777],[29.39955,69.15692],[31.10108,69.55811],[32.13272,69.90595],[33.77547,69.30142],[36.51396,69.06342],[40.29234,67.9324],[41.05987,67.45713],[41.12595,66.79158],[40.01583,66.26618],[38.38295,65.99953],[33.91871,66.75961],[33.18444,66.63253],[34.81477,65.90015],[34.878574,65.436213],[34.94391,64.41437],[36.23129,64.10945],[37.01273,63.84983],[37.14197,64.33471],[36.539579,64.76446],[37.17604,65.14322],[39.59345,64.52079],[40.4356,64.76446],[39.7626,65.49682],[42.09309,66.47623],[43.01604,66.41858],[43.94975,66.06908],[44.53226,66.75634],[43.69839,67.35245],[44.18795,67.95051],[43.45282,68.57079],[46.25,68.25],[46.82134,67.68997],[45.55517,67.56652],[45.56202,67.01005],[46.34915,66.66767],[47.89416,66.88455],[48.13876,67.52238],[50.22766,67.99867],[53.71743,68.85738],[54.47171,68.80815],[53.48582,68.20131],[54.72628,68.09702],[55.44268,68.43866],[57.31702,68.46628],[58.802,68.88082],[59.94142,68.27844],[61.07784,68.94069],[60.03,69.52],[60.55,69.85],[63.504,69.54739],[64.888115,69.234835],[68.51216,68.09233],[69.18068,68.61563],[68.16444,69.14436],[68.13522,69.35649],[66.93008,69.45461],[67.25976,69.92873],[66.72492,70.70889],[66.69466,71.02897],[68.54006,71.9345],[69.19636,72.84336],[69.94,73.04],[72.58754,72.77629],[72.79603,72.22006],[71.84811,71.40898],[72.47011,71.09019],[72.79188,70.39114],[72.5647,69.02085],[73.66787,68.4079],[73.2387,67.7404],[71.28,66.32],[72.42301,66.17267],[72.82077,66.53267],[73.92099,66.78946],[74.18651,67.28429],[75.052,67.76047],[74.46926,68.32899],[74.93584,68.98918],[73.84236,69.07146],[73.60187,69.62763],[74.3998,70.63175],[73.1011,71.44717],[74.89082,72.12119],[74.65926,72.83227],[75.15801,72.85497],[75.68351,72.30056],[75.28898,71.33556],[76.35911,71.15287],[75.90313,71.87401],[77.57665,72.26717],[79.65202,72.32011],[81.5,71.75],[80.61071,72.58285],[80.51109,73.6482],[82.25,73.85],[84.65526,73.80591],[86.8223,73.93688],[86.00956,74.45967],[87.16682,75.11643],[88.31571,75.14393],[90.26,75.64],[92.90058,75.77333],[93.23421,76.0472],[95.86,76.14],[96.67821,75.91548],[98.92254,76.44689],[100.75967,76.43028],[101.03532,76.86189],[101.99084,77.28754],[104.3516,77.69792],[106.06664,77.37389],[104.705,77.1274],[106.97013,76.97419]]],[[[105.07547,78.30689],[99.43814,77.921],[101.2649,79.23399],[102.08635,79.34641],[102.837815,79.28129],[105.37243,78.71334],[105.07547,78.30689]]],[[[51.136187,80.54728],[49.793685,80.415428],[48.894411,80.339567],[48.754937,80.175468],[47.586119,80.010181],[46.502826,80.247247],[47.072455,80.559424],[44.846958,80.58981],[46.799139,80.771918],[48.318477,80.78401],[48.522806,80.514569],[49.09719,80.753986],[50.039768,80.918885],[51.522933,80.699726],[51.136187,80.54728]]],[[[99.93976,78.88094],[97.75794,78.7562],[94.97259,79.044745],[93.31288,79.4265],[92.5454,80.14379],[91.18107,80.34146],[93.77766,81.0246],[95.940895,81.2504],[97.88385,80.746975],[100.186655,79.780135],[99.93976,78.88094]]]]},"id":"RUS"}, {"type":"Feature","properties":{"name":"Rwanda"},"geometry":{"type":"Polygon","coordinates":[[[30.419105,-1.134659],[30.816135,-1.698914],[30.758309,-2.28725],[30.469696,-2.413858],[29.938359,-2.348487],[29.632176,-2.917858],[29.024926,-2.839258],[29.117479,-2.292211],[29.254835,-2.21511],[29.291887,-1.620056],[29.579466,-1.341313],[29.821519,-1.443322],[30.419105,-1.134659]]]},"id":"RWA"}, {"type":"Feature","properties":{"name":"Western Sahara"},"geometry":{"type":"Polygon","coordinates":[[[-8.794884,27.120696],[-8.817828,27.656426],[-8.66559,27.656426],[-8.665124,27.589479],[-8.6844,27.395744],[-8.687294,25.881056],[-11.969419,25.933353],[-11.937224,23.374594],[-12.874222,23.284832],[-13.118754,22.77122],[-12.929102,21.327071],[-16.845194,21.333323],[-17.063423,20.999752],[-17.020428,21.42231],[-17.002962,21.420734],[-14.750955,21.5006],[-14.630833,21.86094],[-14.221168,22.310163],[-13.89111,23.691009],[-12.500963,24.770116],[-12.030759,26.030866],[-11.71822,26.104092],[-11.392555,26.883424],[-10.551263,26.990808],[-10.189424,26.860945],[-9.735343,26.860945],[-9.413037,27.088476],[-8.794884,27.120696]]]},"id":"-99"}, {"type":"Feature","properties":{"name":"Saudi Arabia"},"geometry":{"type":"Polygon","coordinates":[[[42.779332,16.347891],[42.649573,16.774635],[42.347989,17.075806],[42.270888,17.474722],[41.754382,17.833046],[41.221391,18.6716],[40.939341,19.486485],[40.247652,20.174635],[39.801685,20.338862],[39.139399,21.291905],[39.023696,21.986875],[39.066329,22.579656],[38.492772,23.688451],[38.02386,24.078686],[37.483635,24.285495],[37.154818,24.858483],[37.209491,25.084542],[36.931627,25.602959],[36.639604,25.826228],[36.249137,26.570136],[35.640182,27.37652],[35.130187,28.063352],[34.632336,28.058546],[34.787779,28.607427],[34.83222,28.957483],[34.956037,29.356555],[36.068941,29.197495],[36.501214,29.505254],[36.740528,29.865283],[37.503582,30.003776],[37.66812,30.338665],[37.998849,30.5085],[37.002166,31.508413],[39.004886,32.010217],[39.195468,32.161009],[40.399994,31.889992],[41.889981,31.190009],[44.709499,29.178891],[46.568713,29.099025],[47.459822,29.002519],[47.708851,28.526063],[48.416094,28.552004],[48.807595,27.689628],[49.299554,27.461218],[49.470914,27.109999],[50.152422,26.689663],[50.212935,26.277027],[50.113303,25.943972],[50.239859,25.60805],[50.527387,25.327808],[50.660557,24.999896],[50.810108,24.754743],[51.112415,24.556331],[51.389608,24.627386],[51.579519,24.245497],[51.617708,24.014219],[52.000733,23.001154],[55.006803,22.496948],[55.208341,22.70833],[55.666659,22.000001],[54.999982,19.999994],[52.00001,19.000003],[49.116672,18.616668],[48.183344,18.166669],[47.466695,17.116682],[47.000005,16.949999],[46.749994,17.283338],[46.366659,17.233315],[45.399999,17.333335],[45.216651,17.433329],[44.062613,17.410359],[43.791519,17.319977],[43.380794,17.579987],[43.115798,17.08844],[43.218375,16.66689],[42.779332,16.347891]]]},"id":"SAU"}, @@ -145,13 +145,13 @@ {"type":"Feature","properties":{"name":"El Salvador"},"geometry":{"type":"Polygon","coordinates":[[[-87.793111,13.38448],[-87.904112,13.149017],[-88.483302,13.163951],[-88.843228,13.259734],[-89.256743,13.458533],[-89.812394,13.520622],[-90.095555,13.735338],[-90.064678,13.88197],[-89.721934,14.134228],[-89.534219,14.244816],[-89.587343,14.362586],[-89.353326,14.424133],[-89.058512,14.340029],[-88.843073,14.140507],[-88.541231,13.980155],[-88.503998,13.845486],[-88.065343,13.964626],[-87.859515,13.893312],[-87.723503,13.78505],[-87.793111,13.38448]]]},"id":"SLV"}, {"type":"Feature","properties":{"name":"Somaliland"},"geometry":{"type":"Polygon","coordinates":[[[48.93813,9.451749],[48.486736,8.837626],[47.78942,8.003],[46.948328,7.996877],[43.67875,9.18358],[43.296975,9.540477],[42.92812,10.02194],[42.55876,10.57258],[42.776852,10.926879],[43.145305,11.46204],[43.47066,11.27771],[43.666668,10.864169],[44.117804,10.445538],[44.614259,10.442205],[45.556941,10.698029],[46.645401,10.816549],[47.525658,11.127228],[48.021596,11.193064],[48.378784,11.375482],[48.948206,11.410622],[48.942005,11.394266],[48.938491,10.982327],[48.938233,9.9735],[48.93813,9.451749]]]},"id":"-99"}, {"type":"Feature","properties":{"name":"Somalia"},"geometry":{"type":"Polygon","coordinates":[[[49.72862,11.5789],[50.25878,11.67957],[50.73202,12.0219],[51.1112,12.02464],[51.13387,11.74815],[51.04153,11.16651],[51.04531,10.6409],[50.83418,10.27972],[50.55239,9.19874],[50.07092,8.08173],[49.4527,6.80466],[48.59455,5.33911],[47.74079,4.2194],[46.56476,2.85529],[45.56399,2.04576],[44.06815,1.05283],[43.13597,0.2922],[42.04157,-0.91916],[41.81095,-1.44647],[41.58513,-1.68325],[40.993,-0.85829],[40.98105,2.78452],[41.855083,3.918912],[42.12861,4.23413],[42.76967,4.25259],[43.66087,4.95755],[44.9636,5.00162],[47.78942,8.003],[48.486736,8.837626],[48.93813,9.451749],[48.938233,9.9735],[48.938491,10.982327],[48.942005,11.394266],[48.948205,11.410617],[49.26776,11.43033],[49.72862,11.5789]]]},"id":"SOM"}, -{"type":"Feature","properties":{"name":"Republic of Serbia"},"geometry":{"type":"Polygon","coordinates":[[[20.874313,45.416375],[21.483526,45.18117],[21.562023,44.768947],[22.145088,44.478422],[22.459022,44.702517],[22.705726,44.578003],[22.474008,44.409228],[22.65715,44.234923],[22.410446,44.008063],[22.500157,43.642814],[22.986019,43.211161],[22.604801,42.898519],[22.436595,42.580321],[22.545012,42.461362],[22.380526,42.32026],[21.91708,42.30364],[21.576636,42.245224],[21.54332,42.32025],[21.66292,42.43922],[21.77505,42.6827],[21.63302,42.67717],[21.43866,42.86255],[21.27421,42.90959],[21.143395,43.068685],[20.95651,43.13094],[20.81448,43.27205],[20.63508,43.21671],[20.49679,42.88469],[20.25758,42.81275],[20.3398,42.89852],[19.95857,43.10604],[19.63,43.21378],[19.48389,43.35229],[19.21852,43.52384],[19.454,43.5681],[19.59976,44.03847],[19.11761,44.42307],[19.36803,44.863],[19.00548,44.86023],[19.390476,45.236516],[19.072769,45.521511],[18.82982,45.90888],[19.596045,46.17173],[20.220192,46.127469],[20.762175,45.734573],[20.874313,45.416375]]]},"id":"SRB"}, +{"type":"Feature","properties":{"name":"Serbia"},"geometry":{"type":"Polygon","coordinates":[[[20.874313,45.416375],[21.483526,45.18117],[21.562023,44.768947],[22.145088,44.478422],[22.459022,44.702517],[22.705726,44.578003],[22.474008,44.409228],[22.65715,44.234923],[22.410446,44.008063],[22.500157,43.642814],[22.986019,43.211161],[22.604801,42.898519],[22.436595,42.580321],[22.545012,42.461362],[22.380526,42.32026],[21.91708,42.30364],[21.576636,42.245224],[21.54332,42.32025],[21.66292,42.43922],[21.77505,42.6827],[21.63302,42.67717],[21.43866,42.86255],[21.27421,42.90959],[21.143395,43.068685],[20.95651,43.13094],[20.81448,43.27205],[20.63508,43.21671],[20.49679,42.88469],[20.25758,42.81275],[20.3398,42.89852],[19.95857,43.10604],[19.63,43.21378],[19.48389,43.35229],[19.21852,43.52384],[19.454,43.5681],[19.59976,44.03847],[19.11761,44.42307],[19.36803,44.863],[19.00548,44.86023],[19.390476,45.236516],[19.072769,45.521511],[18.82982,45.90888],[19.596045,46.17173],[20.220192,46.127469],[20.762175,45.734573],[20.874313,45.416375]]]},"id":"SRB"}, {"type":"Feature","properties":{"name":"Suriname"},"geometry":{"type":"Polygon","coordinates":[[[-57.147436,5.97315],[-55.949318,5.772878],[-55.84178,5.953125],[-55.03325,6.025291],[-53.958045,5.756548],[-54.478633,4.896756],[-54.399542,4.212611],[-54.006931,3.620038],[-54.181726,3.18978],[-54.269705,2.732392],[-54.524754,2.311849],[-55.097587,2.523748],[-55.569755,2.421506],[-55.973322,2.510364],[-56.073342,2.220795],[-55.9056,2.021996],[-55.995698,1.817667],[-56.539386,1.899523],[-57.150098,2.768927],[-57.281433,3.333492],[-57.601569,3.334655],[-58.044694,4.060864],[-57.86021,4.576801],[-57.914289,4.812626],[-57.307246,5.073567],[-57.147436,5.97315]]]},"id":"SUR"}, {"type":"Feature","properties":{"name":"Slovakia"},"geometry":{"type":"Polygon","coordinates":[[[18.853144,49.49623],[18.909575,49.435846],[19.320713,49.571574],[19.825023,49.217125],[20.415839,49.431453],[20.887955,49.328772],[21.607808,49.470107],[22.558138,49.085738],[22.280842,48.825392],[22.085608,48.422264],[21.872236,48.319971],[20.801294,48.623854],[20.473562,48.56285],[20.239054,48.327567],[19.769471,48.202691],[19.661364,48.266615],[19.174365,48.111379],[18.777025,48.081768],[18.696513,47.880954],[17.857133,47.758429],[17.488473,47.867466],[16.979667,48.123497],[16.879983,48.470013],[16.960288,48.596982],[17.101985,48.816969],[17.545007,48.800019],[17.886485,48.903475],[17.913512,48.996493],[18.104973,49.043983],[18.170498,49.271515],[18.399994,49.315001],[18.554971,49.495015],[18.853144,49.49623]]]},"id":"SVK"}, {"type":"Feature","properties":{"name":"Slovenia"},"geometry":{"type":"Polygon","coordinates":[[[13.806475,46.509306],[14.632472,46.431817],[15.137092,46.658703],[16.011664,46.683611],[16.202298,46.852386],[16.370505,46.841327],[16.564808,46.503751],[15.768733,46.238108],[15.67153,45.834154],[15.323954,45.731783],[15.327675,45.452316],[14.935244,45.471695],[14.595109,45.634941],[14.411968,45.466166],[13.71506,45.500324],[13.93763,45.591016],[13.69811,46.016778],[13.806475,46.509306]]]},"id":"SVN"}, {"type":"Feature","properties":{"name":"Sweden"},"geometry":{"type":"Polygon","coordinates":[[[22.183173,65.723741],[21.213517,65.026005],[21.369631,64.413588],[19.778876,63.609554],[17.847779,62.7494],[17.119555,61.341166],[17.831346,60.636583],[18.787722,60.081914],[17.869225,58.953766],[16.829185,58.719827],[16.44771,57.041118],[15.879786,56.104302],[14.666681,56.200885],[14.100721,55.407781],[12.942911,55.361737],[12.625101,56.30708],[11.787942,57.441817],[11.027369,58.856149],[11.468272,59.432393],[12.300366,60.117933],[12.631147,61.293572],[11.992064,61.800362],[11.930569,63.128318],[12.579935,64.066219],[13.571916,64.049114],[13.919905,64.445421],[13.55569,64.787028],[15.108411,66.193867],[16.108712,67.302456],[16.768879,68.013937],[17.729182,68.010552],[17.993868,68.567391],[19.87856,68.407194],[20.025269,69.065139],[20.645593,69.106247],[21.978535,68.616846],[23.539473,67.936009],[23.56588,66.396051],[23.903379,66.006927],[22.183173,65.723741]]]},"id":"SWE"}, {"type":"Feature","properties":{"name":"Swaziland"},"geometry":{"type":"Polygon","coordinates":[[[32.071665,-26.73382],[31.86806,-27.177927],[31.282773,-27.285879],[30.685962,-26.743845],[30.676609,-26.398078],[30.949667,-26.022649],[31.04408,-25.731452],[31.333158,-25.660191],[31.837778,-25.843332],[31.985779,-26.29178],[32.071665,-26.73382]]]},"id":"SWZ"}, -{"type":"Feature","properties":{"name":"Syria"},"geometry":{"type":"Polygon","coordinates":[[[38.792341,33.378686],[36.834062,32.312938],[35.719918,32.709192],[35.700798,32.716014],[35.836397,32.868123],[35.821101,33.277426],[36.06646,33.824912],[36.61175,34.201789],[36.448194,34.593935],[35.998403,34.644914],[35.905023,35.410009],[36.149763,35.821535],[36.41755,36.040617],[36.685389,36.259699],[36.739494,36.81752],[37.066761,36.623036],[38.167727,36.90121],[38.699891,36.712927],[39.52258,36.716054],[40.673259,37.091276],[41.212089,37.074352],[42.349591,37.229873],[41.837064,36.605854],[41.289707,36.358815],[41.383965,35.628317],[41.006159,34.419372],[38.792341,33.378686]]]},"id":"SYR"}, +{"type":"Feature","properties":{"name":"Syrian Arab Republic"},"geometry":{"type":"Polygon","coordinates":[[[38.792341,33.378686],[36.834062,32.312938],[35.719918,32.709192],[35.700798,32.716014],[35.836397,32.868123],[35.821101,33.277426],[36.06646,33.824912],[36.61175,34.201789],[36.448194,34.593935],[35.998403,34.644914],[35.905023,35.410009],[36.149763,35.821535],[36.41755,36.040617],[36.685389,36.259699],[36.739494,36.81752],[37.066761,36.623036],[38.167727,36.90121],[38.699891,36.712927],[39.52258,36.716054],[40.673259,37.091276],[41.212089,37.074352],[42.349591,37.229873],[41.837064,36.605854],[41.289707,36.358815],[41.383965,35.628317],[41.006159,34.419372],[38.792341,33.378686]]]},"id":"SYR"}, {"type":"Feature","properties":{"name":"Chad"},"geometry":{"type":"Polygon","coordinates":[[[14.495787,12.859396],[14.595781,13.330427],[13.954477,13.353449],[13.956699,13.996691],[13.540394,14.367134],[13.97217,15.68437],[15.247731,16.627306],[15.300441,17.92795],[15.685741,19.95718],[15.903247,20.387619],[15.487148,20.730415],[15.47106,21.04845],[15.096888,21.308519],[14.8513,22.86295],[15.86085,23.40972],[19.84926,21.49509],[23.83766,19.58047],[23.88689,15.61084],[23.02459,15.68072],[22.56795,14.94429],[22.30351,14.32682],[22.51202,14.09318],[22.18329,13.78648],[22.29658,13.37232],[22.03759,12.95546],[21.93681,12.58818],[22.28801,12.64605],[22.49762,12.26024],[22.50869,11.67936],[22.87622,11.38461],[22.864165,11.142395],[22.231129,10.971889],[21.723822,10.567056],[21.000868,9.475985],[20.059685,9.012706],[19.094008,9.074847],[18.81201,8.982915],[18.911022,8.630895],[18.389555,8.281304],[17.96493,7.890914],[16.705988,7.508328],[16.456185,7.734774],[16.290562,7.754307],[16.106232,7.497088],[15.27946,7.421925],[15.436092,7.692812],[15.120866,8.38215],[14.979996,8.796104],[14.544467,8.965861],[13.954218,9.549495],[14.171466,10.021378],[14.627201,9.920919],[14.909354,9.992129],[15.467873,9.982337],[14.923565,10.891325],[14.960152,11.555574],[14.89336,12.21905],[14.495787,12.859396]]]},"id":"TCD"}, {"type":"Feature","properties":{"name":"Togo"},"geometry":{"type":"Polygon","coordinates":[[[1.865241,6.142158],[1.060122,5.928837],[0.836931,6.279979],[0.570384,6.914359],[0.490957,7.411744],[0.712029,8.312465],[0.461192,8.677223],[0.365901,9.465004],[0.36758,10.191213],[-0.049785,10.706918],[0.023803,11.018682],[0.899563,10.997339],[0.772336,10.470808],[1.077795,10.175607],[1.425061,9.825395],[1.463043,9.334624],[1.664478,9.12859],[1.618951,6.832038],[1.865241,6.142158]]]},"id":"TGO"}, {"type":"Feature","properties":{"name":"Thailand"},"geometry":{"type":"Polygon","coordinates":[[[102.584932,12.186595],[101.687158,12.64574],[100.83181,12.627085],[100.978467,13.412722],[100.097797,13.406856],[100.018733,12.307001],[99.478921,10.846367],[99.153772,9.963061],[99.222399,9.239255],[99.873832,9.207862],[100.279647,8.295153],[100.459274,7.429573],[101.017328,6.856869],[101.623079,6.740622],[102.141187,6.221636],[101.814282,5.810808],[101.154219,5.691384],[101.075516,6.204867],[100.259596,6.642825],[100.085757,6.464489],[99.690691,6.848213],[99.519642,7.343454],[98.988253,7.907993],[98.503786,8.382305],[98.339662,7.794512],[98.150009,8.350007],[98.25915,8.973923],[98.553551,9.93296],[99.038121,10.960546],[99.587286,11.892763],[99.196354,12.804748],[99.212012,13.269294],[99.097755,13.827503],[98.430819,14.622028],[98.192074,15.123703],[98.537376,15.308497],[98.903348,16.177824],[98.493761,16.837836],[97.859123,17.567946],[97.375896,18.445438],[97.797783,18.62708],[98.253724,19.708203],[98.959676,19.752981],[99.543309,20.186598],[100.115988,20.41785],[100.548881,20.109238],[100.606294,19.508344],[101.282015,19.462585],[101.035931,18.408928],[101.059548,17.512497],[102.113592,18.109102],[102.413005,17.932782],[102.998706,17.961695],[103.200192,18.309632],[103.956477,18.240954],[104.716947,17.428859],[104.779321,16.441865],[105.589039,15.570316],[105.544338,14.723934],[105.218777,14.273212],[104.281418,14.416743],[102.988422,14.225721],[102.348099,13.394247],[102.584932,12.186595]]]},"id":"THA"}, @@ -162,11 +162,11 @@ {"type":"Feature","properties":{"name":"Tunisia"},"geometry":{"type":"Polygon","coordinates":[[[9.48214,30.307556],[9.055603,32.102692],[8.439103,32.506285],[8.430473,32.748337],[7.612642,33.344115],[7.524482,34.097376],[8.140981,34.655146],[8.376368,35.479876],[8.217824,36.433177],[8.420964,36.946427],[9.509994,37.349994],[10.210002,37.230002],[10.18065,36.724038],[11.028867,37.092103],[11.100026,36.899996],[10.600005,36.41],[10.593287,35.947444],[10.939519,35.698984],[10.807847,34.833507],[10.149593,34.330773],[10.339659,33.785742],[10.856836,33.76874],[11.108501,33.293343],[11.488787,33.136996],[11.432253,32.368903],[10.94479,32.081815],[10.636901,31.761421],[9.950225,31.37607],[10.056575,30.961831],[9.970017,30.539325],[9.48214,30.307556]]]},"id":"TUN"}, {"type":"Feature","properties":{"name":"Turkey"},"geometry":{"type":"MultiPolygon","coordinates":[[[[36.913127,41.335358],[38.347665,40.948586],[39.512607,41.102763],[40.373433,41.013673],[41.554084,41.535656],[42.619549,41.583173],[43.582746,41.092143],[43.752658,40.740201],[43.656436,40.253564],[44.400009,40.005],[44.79399,39.713003],[44.109225,39.428136],[44.421403,38.281281],[44.225756,37.971584],[44.772699,37.170445],[44.293452,37.001514],[43.942259,37.256228],[42.779126,37.385264],[42.349591,37.229873],[41.212089,37.074352],[40.673259,37.091276],[39.52258,36.716054],[38.699891,36.712927],[38.167727,36.90121],[37.066761,36.623036],[36.739494,36.81752],[36.685389,36.259699],[36.41755,36.040617],[36.149763,35.821535],[35.782085,36.274995],[36.160822,36.650606],[35.550936,36.565443],[34.714553,36.795532],[34.026895,36.21996],[32.509158,36.107564],[31.699595,36.644275],[30.621625,36.677865],[30.391096,36.262981],[29.699976,36.144357],[28.732903,36.676831],[27.641187,36.658822],[27.048768,37.653361],[26.318218,38.208133],[26.8047,38.98576],[26.170785,39.463612],[27.28002,40.420014],[28.819978,40.460011],[29.240004,41.219991],[31.145934,41.087622],[32.347979,41.736264],[33.513283,42.01896],[35.167704,42.040225],[36.913127,41.335358]]],[[[27.192377,40.690566],[26.358009,40.151994],[26.043351,40.617754],[26.056942,40.824123],[26.294602,40.936261],[26.604196,41.562115],[26.117042,41.826905],[27.135739,42.141485],[27.99672,42.007359],[28.115525,41.622886],[28.988443,41.299934],[28.806438,41.054962],[27.619017,40.999823],[27.192377,40.690566]]]]},"id":"TUR"}, {"type":"Feature","properties":{"name":"Taiwan"},"geometry":{"type":"Polygon","coordinates":[[[121.777818,24.394274],[121.175632,22.790857],[120.74708,21.970571],[120.220083,22.814861],[120.106189,23.556263],[120.69468,24.538451],[121.495044,25.295459],[121.951244,24.997596],[121.777818,24.394274]]]},"id":"TWN"}, -{"type":"Feature","properties":{"name":"United Republic of Tanzania"},"geometry":{"type":"Polygon","coordinates":[[[33.903711,-0.95],[34.07262,-1.05982],[37.69869,-3.09699],[37.7669,-3.67712],[39.20222,-4.67677],[38.74054,-5.90895],[38.79977,-6.47566],[39.44,-6.84],[39.47,-7.1],[39.19469,-7.7039],[39.25203,-8.00781],[39.18652,-8.48551],[39.53574,-9.11237],[39.9496,-10.0984],[40.31659,-10.3171],[39.521,-10.89688],[38.427557,-11.285202],[37.82764,-11.26879],[37.47129,-11.56876],[36.775151,-11.594537],[36.514082,-11.720938],[35.312398,-11.439146],[34.559989,-11.52002],[34.28,-10.16],[33.940838,-9.693674],[33.73972,-9.41715],[32.759375,-9.230599],[32.191865,-8.930359],[31.556348,-8.762049],[31.157751,-8.594579],[30.74,-8.34],[30.2,-7.08],[29.62,-6.52],[29.419993,-5.939999],[29.519987,-5.419979],[29.339998,-4.499983],[29.753512,-4.452389],[30.11632,-4.09012],[30.50554,-3.56858],[30.75224,-3.35931],[30.74301,-3.03431],[30.52766,-2.80762],[30.46967,-2.41383],[30.758309,-2.28725],[30.816135,-1.698914],[30.419105,-1.134659],[30.76986,-1.01455],[31.86617,-1.02736],[33.903711,-0.95]]]},"id":"TZA"}, +{"type":"Feature","properties":{"name":"Tanzania, United Republic of"},"geometry":{"type":"Polygon","coordinates":[[[33.903711,-0.95],[34.07262,-1.05982],[37.69869,-3.09699],[37.7669,-3.67712],[39.20222,-4.67677],[38.74054,-5.90895],[38.79977,-6.47566],[39.44,-6.84],[39.47,-7.1],[39.19469,-7.7039],[39.25203,-8.00781],[39.18652,-8.48551],[39.53574,-9.11237],[39.9496,-10.0984],[40.31659,-10.3171],[39.521,-10.89688],[38.427557,-11.285202],[37.82764,-11.26879],[37.47129,-11.56876],[36.775151,-11.594537],[36.514082,-11.720938],[35.312398,-11.439146],[34.559989,-11.52002],[34.28,-10.16],[33.940838,-9.693674],[33.73972,-9.41715],[32.759375,-9.230599],[32.191865,-8.930359],[31.556348,-8.762049],[31.157751,-8.594579],[30.74,-8.34],[30.2,-7.08],[29.62,-6.52],[29.419993,-5.939999],[29.519987,-5.419979],[29.339998,-4.499983],[29.753512,-4.452389],[30.11632,-4.09012],[30.50554,-3.56858],[30.75224,-3.35931],[30.74301,-3.03431],[30.52766,-2.80762],[30.46967,-2.41383],[30.758309,-2.28725],[30.816135,-1.698914],[30.419105,-1.134659],[30.76986,-1.01455],[31.86617,-1.02736],[33.903711,-0.95]]]},"id":"TZA"}, {"type":"Feature","properties":{"name":"Uganda"},"geometry":{"type":"Polygon","coordinates":[[[31.86617,-1.02736],[30.76986,-1.01455],[30.419105,-1.134659],[29.821519,-1.443322],[29.579466,-1.341313],[29.587838,-0.587406],[29.8195,-0.2053],[29.875779,0.59738],[30.086154,1.062313],[30.468508,1.583805],[30.85267,1.849396],[31.174149,2.204465],[30.77332,2.33989],[30.83385,3.50917],[31.24556,3.7819],[31.88145,3.55827],[32.68642,3.79232],[33.39,3.79],[34.005,4.249885],[34.47913,3.5556],[34.59607,3.05374],[35.03599,1.90584],[34.6721,1.17694],[34.18,0.515],[33.893569,0.109814],[33.903711,-0.95],[31.86617,-1.02736]]]},"id":"UGA"}, {"type":"Feature","properties":{"name":"Ukraine"},"geometry":{"type":"Polygon","coordinates":[[[31.785998,52.101678],[32.159412,52.061267],[32.412058,52.288695],[32.715761,52.238465],[33.7527,52.335075],[34.391731,51.768882],[34.141978,51.566413],[34.224816,51.255993],[35.022183,51.207572],[35.377924,50.773955],[35.356116,50.577197],[36.626168,50.225591],[37.39346,50.383953],[38.010631,49.915662],[38.594988,49.926462],[40.069058,49.601055],[40.080789,49.30743],[39.674664,48.783818],[39.895632,48.232405],[39.738278,47.898937],[38.770585,47.825608],[38.255112,47.5464],[38.223538,47.10219],[37.425137,47.022221],[36.759855,46.6987],[35.823685,46.645964],[34.962342,46.273197],[35.020788,45.651219],[35.510009,45.409993],[36.529998,45.46999],[36.334713,45.113216],[35.239999,44.939996],[33.882511,44.361479],[33.326421,44.564877],[33.546924,45.034771],[32.454174,45.327466],[32.630804,45.519186],[33.588162,45.851569],[33.298567,46.080598],[31.74414,46.333348],[31.675307,46.706245],[30.748749,46.5831],[30.377609,46.03241],[29.603289,45.293308],[29.149725,45.464925],[28.679779,45.304031],[28.233554,45.488283],[28.485269,45.596907],[28.659987,45.939987],[28.933717,46.25883],[28.862972,46.437889],[29.072107,46.517678],[29.170654,46.379262],[29.759972,46.349988],[30.024659,46.423937],[29.83821,46.525326],[29.908852,46.674361],[29.559674,46.928583],[29.415135,47.346645],[29.050868,47.510227],[29.122698,47.849095],[28.670891,48.118149],[28.259547,48.155562],[27.522537,48.467119],[26.857824,48.368211],[26.619337,48.220726],[26.19745,48.220881],[25.945941,47.987149],[25.207743,47.891056],[24.866317,47.737526],[24.402056,47.981878],[23.760958,47.985598],[23.142236,48.096341],[22.710531,47.882194],[22.64082,48.15024],[22.085608,48.422264],[22.280842,48.825392],[22.558138,49.085738],[22.776419,49.027395],[22.51845,49.476774],[23.426508,50.308506],[23.922757,50.424881],[24.029986,50.705407],[23.527071,51.578454],[24.005078,51.617444],[24.553106,51.888461],[25.327788,51.910656],[26.337959,51.832289],[27.454066,51.592303],[28.241615,51.572227],[28.617613,51.427714],[28.992835,51.602044],[29.254938,51.368234],[30.157364,51.416138],[30.555117,51.319503],[30.619454,51.822806],[30.927549,52.042353],[31.785998,52.101678]]]},"id":"UKR"}, {"type":"Feature","properties":{"name":"Uruguay"},"geometry":{"type":"Polygon","coordinates":[[[-57.625133,-30.216295],[-56.976026,-30.109686],[-55.973245,-30.883076],[-55.60151,-30.853879],[-54.572452,-31.494511],[-53.787952,-32.047243],[-53.209589,-32.727666],[-53.650544,-33.202004],[-53.373662,-33.768378],[-53.806426,-34.396815],[-54.935866,-34.952647],[-55.67409,-34.752659],[-56.215297,-34.859836],[-57.139685,-34.430456],[-57.817861,-34.462547],[-58.427074,-33.909454],[-58.349611,-33.263189],[-58.132648,-33.040567],[-58.14244,-32.044504],[-57.874937,-31.016556],[-57.625133,-30.216295]]]},"id":"URY"}, -{"type":"Feature","properties":{"name":"United States of America"},"geometry":{"type":"MultiPolygon","coordinates":[[[[-155.54211,19.08348],[-155.68817,18.91619],[-155.93665,19.05939],[-155.90806,19.33888],[-156.07347,19.70294],[-156.02368,19.81422],[-155.85008,19.97729],[-155.91907,20.17395],[-155.86108,20.26721],[-155.78505,20.2487],[-155.40214,20.07975],[-155.22452,19.99302],[-155.06226,19.8591],[-154.80741,19.50871],[-154.83147,19.45328],[-155.22217,19.23972],[-155.54211,19.08348]]],[[[-156.07926,20.64397],[-156.41445,20.57241],[-156.58673,20.783],[-156.70167,20.8643],[-156.71055,20.92676],[-156.61258,21.01249],[-156.25711,20.91745],[-155.99566,20.76404],[-156.07926,20.64397]]],[[[-156.75824,21.17684],[-156.78933,21.06873],[-157.32521,21.09777],[-157.25027,21.21958],[-156.75824,21.17684]]],[[[-157.65283,21.32217],[-157.70703,21.26442],[-157.7786,21.27729],[-158.12667,21.31244],[-158.2538,21.53919],[-158.29265,21.57912],[-158.0252,21.71696],[-157.94161,21.65272],[-157.65283,21.32217]]],[[[-159.34512,21.982],[-159.46372,21.88299],[-159.80051,22.06533],[-159.74877,22.1382],[-159.5962,22.23618],[-159.36569,22.21494],[-159.34512,21.982]]],[[[-94.81758,49.38905],[-94.64,48.84],[-94.32914,48.67074],[-93.63087,48.60926],[-92.61,48.45],[-91.64,48.14],[-90.83,48.27],[-89.6,48.01],[-89.272917,48.019808],[-88.378114,48.302918],[-87.439793,47.94],[-86.461991,47.553338],[-85.652363,47.220219],[-84.87608,46.900083],[-84.779238,46.637102],[-84.543749,46.538684],[-84.6049,46.4396],[-84.3367,46.40877],[-84.14212,46.512226],[-84.091851,46.275419],[-83.890765,46.116927],[-83.616131,46.116927],[-83.469551,45.994686],[-83.592851,45.816894],[-82.550925,45.347517],[-82.337763,44.44],[-82.137642,43.571088],[-82.43,42.98],[-82.9,42.43],[-83.12,42.08],[-83.142,41.975681],[-83.02981,41.832796],[-82.690089,41.675105],[-82.439278,41.675105],[-81.277747,42.209026],[-80.247448,42.3662],[-78.939362,42.863611],[-78.92,42.965],[-79.01,43.27],[-79.171674,43.466339],[-78.72028,43.625089],[-77.737885,43.629056],[-76.820034,43.628784],[-76.5,44.018459],[-76.375,44.09631],[-75.31821,44.81645],[-74.867,45.00048],[-73.34783,45.00738],[-71.50506,45.0082],[-71.405,45.255],[-71.08482,45.30524],[-70.66,45.46],[-70.305,45.915],[-69.99997,46.69307],[-69.237216,47.447781],[-68.905,47.185],[-68.23444,47.35486],[-67.79046,47.06636],[-67.79134,45.70281],[-67.13741,45.13753],[-66.96466,44.8097],[-68.03252,44.3252],[-69.06,43.98],[-70.11617,43.68405],[-70.645476,43.090238],[-70.81489,42.8653],[-70.825,42.335],[-70.495,41.805],[-70.08,41.78],[-70.185,42.145],[-69.88497,41.92283],[-69.96503,41.63717],[-70.64,41.475],[-71.12039,41.49445],[-71.86,41.32],[-72.295,41.27],[-72.87643,41.22065],[-73.71,40.931102],[-72.24126,41.11948],[-71.945,40.93],[-73.345,40.63],[-73.982,40.628],[-73.952325,40.75075],[-74.25671,40.47351],[-73.96244,40.42763],[-74.17838,39.70926],[-74.90604,38.93954],[-74.98041,39.1964],[-75.20002,39.24845],[-75.52805,39.4985],[-75.32,38.96],[-75.071835,38.782032],[-75.05673,38.40412],[-75.37747,38.01551],[-75.94023,37.21689],[-76.03127,37.2566],[-75.72205,37.93705],[-76.23287,38.319215],[-76.35,39.15],[-76.542725,38.717615],[-76.32933,38.08326],[-76.989998,38.239992],[-76.30162,37.917945],[-76.25874,36.9664],[-75.9718,36.89726],[-75.86804,36.55125],[-75.72749,35.55074],[-76.36318,34.80854],[-77.397635,34.51201],[-78.05496,33.92547],[-78.55435,33.86133],[-79.06067,33.49395],[-79.20357,33.15839],[-80.301325,32.509355],[-80.86498,32.0333],[-81.33629,31.44049],[-81.49042,30.72999],[-81.31371,30.03552],[-80.98,29.18],[-80.535585,28.47213],[-80.53,28.04],[-80.056539,26.88],[-80.088015,26.205765],[-80.13156,25.816775],[-80.38103,25.20616],[-80.68,25.08],[-81.17213,25.20126],[-81.33,25.64],[-81.71,25.87],[-82.24,26.73],[-82.70515,27.49504],[-82.85526,27.88624],[-82.65,28.55],[-82.93,29.1],[-83.70959,29.93656],[-84.1,30.09],[-85.10882,29.63615],[-85.28784,29.68612],[-85.7731,30.15261],[-86.4,30.4],[-87.53036,30.27433],[-88.41782,30.3849],[-89.18049,30.31598],[-89.593831,30.159994],[-89.413735,29.89419],[-89.43,29.48864],[-89.21767,29.29108],[-89.40823,29.15961],[-89.77928,29.30714],[-90.15463,29.11743],[-90.880225,29.148535],[-91.626785,29.677],[-92.49906,29.5523],[-93.22637,29.78375],[-93.84842,29.71363],[-94.69,29.48],[-95.60026,28.73863],[-96.59404,28.30748],[-97.14,27.83],[-97.37,27.38],[-97.38,26.69],[-97.33,26.21],[-97.14,25.87],[-97.53,25.84],[-98.24,26.06],[-99.02,26.37],[-99.3,26.84],[-99.52,27.54],[-100.11,28.11],[-100.45584,28.69612],[-100.9576,29.38071],[-101.6624,29.7793],[-102.48,29.76],[-103.11,28.97],[-103.94,29.27],[-104.45697,29.57196],[-104.70575,30.12173],[-105.03737,30.64402],[-105.63159,31.08383],[-106.1429,31.39995],[-106.50759,31.75452],[-108.24,31.754854],[-108.24194,31.34222],[-109.035,31.34194],[-111.02361,31.33472],[-113.30498,32.03914],[-114.815,32.52528],[-114.72139,32.72083],[-115.99135,32.61239],[-117.12776,32.53534],[-117.295938,33.046225],[-117.944,33.621236],[-118.410602,33.740909],[-118.519895,34.027782],[-119.081,34.078],[-119.438841,34.348477],[-120.36778,34.44711],[-120.62286,34.60855],[-120.74433,35.15686],[-121.71457,36.16153],[-122.54747,37.55176],[-122.51201,37.78339],[-122.95319,38.11371],[-123.7272,38.95166],[-123.86517,39.76699],[-124.39807,40.3132],[-124.17886,41.14202],[-124.2137,41.99964],[-124.53284,42.76599],[-124.14214,43.70838],[-124.020535,44.615895],[-123.89893,45.52341],[-124.079635,46.86475],[-124.39567,47.72017],[-124.68721,48.184433],[-124.566101,48.379715],[-123.12,48.04],[-122.58736,47.096],[-122.34,47.36],[-122.5,48.18],[-122.84,49],[-120,49],[-117.03121,49],[-116.04818,49],[-113,49],[-110.05,49],[-107.05,49],[-104.04826,48.99986],[-100.65,49],[-97.22872,49.0007],[-95.15907,49],[-95.15609,49.38425],[-94.81758,49.38905]]],[[[-153.006314,57.115842],[-154.00509,56.734677],[-154.516403,56.992749],[-154.670993,57.461196],[-153.76278,57.816575],[-153.228729,57.968968],[-152.564791,57.901427],[-152.141147,57.591059],[-153.006314,57.115842]]],[[[-165.579164,59.909987],[-166.19277,59.754441],[-166.848337,59.941406],[-167.455277,60.213069],[-166.467792,60.38417],[-165.67443,60.293607],[-165.579164,59.909987]]],[[[-171.731657,63.782515],[-171.114434,63.592191],[-170.491112,63.694975],[-169.682505,63.431116],[-168.689439,63.297506],[-168.771941,63.188598],[-169.52944,62.976931],[-170.290556,63.194438],[-170.671386,63.375822],[-171.553063,63.317789],[-171.791111,63.405846],[-171.731657,63.782515]]],[[[-155.06779,71.147776],[-154.344165,70.696409],[-153.900006,70.889989],[-152.210006,70.829992],[-152.270002,70.600006],[-150.739992,70.430017],[-149.720003,70.53001],[-147.613362,70.214035],[-145.68999,70.12001],[-144.920011,69.989992],[-143.589446,70.152514],[-142.07251,69.851938],[-140.985988,69.711998],[-140.985988,69.711998],[-140.992499,66.000029],[-140.99777,60.306397],[-140.012998,60.276838],[-139.039,60.000007],[-138.34089,59.56211],[-137.4525,58.905],[-136.47972,59.46389],[-135.47583,59.78778],[-134.945,59.27056],[-134.27111,58.86111],[-133.355549,58.410285],[-132.73042,57.69289],[-131.70781,56.55212],[-130.00778,55.91583],[-129.979994,55.284998],[-130.53611,54.802753],[-131.085818,55.178906],[-131.967211,55.497776],[-132.250011,56.369996],[-133.539181,57.178887],[-134.078063,58.123068],[-135.038211,58.187715],[-136.628062,58.212209],[-137.800006,58.499995],[-139.867787,59.537762],[-140.825274,59.727517],[-142.574444,60.084447],[-143.958881,59.99918],[-145.925557,60.45861],[-147.114374,60.884656],[-148.224306,60.672989],[-148.018066,59.978329],[-148.570823,59.914173],[-149.727858,59.705658],[-150.608243,59.368211],[-151.716393,59.155821],[-151.859433,59.744984],[-151.409719,60.725803],[-150.346941,61.033588],[-150.621111,61.284425],[-151.895839,60.727198],[-152.57833,60.061657],[-154.019172,59.350279],[-153.287511,58.864728],[-154.232492,58.146374],[-155.307491,57.727795],[-156.308335,57.422774],[-156.556097,56.979985],[-158.117217,56.463608],[-158.433321,55.994154],[-159.603327,55.566686],[-160.28972,55.643581],[-161.223048,55.364735],[-162.237766,55.024187],[-163.069447,54.689737],[-164.785569,54.404173],[-164.942226,54.572225],[-163.84834,55.039431],[-162.870001,55.348043],[-161.804175,55.894986],[-160.563605,56.008055],[-160.07056,56.418055],[-158.684443,57.016675],[-158.461097,57.216921],[-157.72277,57.570001],[-157.550274,58.328326],[-157.041675,58.918885],[-158.194731,58.615802],[-158.517218,58.787781],[-159.058606,58.424186],[-159.711667,58.93139],[-159.981289,58.572549],[-160.355271,59.071123],[-161.355003,58.670838],[-161.968894,58.671665],[-162.054987,59.266925],[-161.874171,59.633621],[-162.518059,59.989724],[-163.818341,59.798056],[-164.662218,60.267484],[-165.346388,60.507496],[-165.350832,61.073895],[-166.121379,61.500019],[-165.734452,62.074997],[-164.919179,62.633076],[-164.562508,63.146378],[-163.753332,63.219449],[-163.067224,63.059459],[-162.260555,63.541936],[-161.53445,63.455817],[-160.772507,63.766108],[-160.958335,64.222799],[-161.518068,64.402788],[-160.777778,64.788604],[-161.391926,64.777235],[-162.45305,64.559445],[-162.757786,64.338605],[-163.546394,64.55916],[-164.96083,64.446945],[-166.425288,64.686672],[-166.845004,65.088896],[-168.11056,65.669997],[-166.705271,66.088318],[-164.47471,66.57666],[-163.652512,66.57666],[-163.788602,66.077207],[-161.677774,66.11612],[-162.489715,66.735565],[-163.719717,67.116395],[-164.430991,67.616338],[-165.390287,68.042772],[-166.764441,68.358877],[-166.204707,68.883031],[-164.430811,68.915535],[-163.168614,69.371115],[-162.930566,69.858062],[-161.908897,70.33333],[-160.934797,70.44769],[-159.039176,70.891642],[-158.119723,70.824721],[-156.580825,71.357764],[-155.06779,71.147776]]]]},"id":"USA"}, +{"type":"Feature","properties":{"name":"United States"},"geometry":{"type":"MultiPolygon","coordinates":[[[[-155.54211,19.08348],[-155.68817,18.91619],[-155.93665,19.05939],[-155.90806,19.33888],[-156.07347,19.70294],[-156.02368,19.81422],[-155.85008,19.97729],[-155.91907,20.17395],[-155.86108,20.26721],[-155.78505,20.2487],[-155.40214,20.07975],[-155.22452,19.99302],[-155.06226,19.8591],[-154.80741,19.50871],[-154.83147,19.45328],[-155.22217,19.23972],[-155.54211,19.08348]]],[[[-156.07926,20.64397],[-156.41445,20.57241],[-156.58673,20.783],[-156.70167,20.8643],[-156.71055,20.92676],[-156.61258,21.01249],[-156.25711,20.91745],[-155.99566,20.76404],[-156.07926,20.64397]]],[[[-156.75824,21.17684],[-156.78933,21.06873],[-157.32521,21.09777],[-157.25027,21.21958],[-156.75824,21.17684]]],[[[-157.65283,21.32217],[-157.70703,21.26442],[-157.7786,21.27729],[-158.12667,21.31244],[-158.2538,21.53919],[-158.29265,21.57912],[-158.0252,21.71696],[-157.94161,21.65272],[-157.65283,21.32217]]],[[[-159.34512,21.982],[-159.46372,21.88299],[-159.80051,22.06533],[-159.74877,22.1382],[-159.5962,22.23618],[-159.36569,22.21494],[-159.34512,21.982]]],[[[-94.81758,49.38905],[-94.64,48.84],[-94.32914,48.67074],[-93.63087,48.60926],[-92.61,48.45],[-91.64,48.14],[-90.83,48.27],[-89.6,48.01],[-89.272917,48.019808],[-88.378114,48.302918],[-87.439793,47.94],[-86.461991,47.553338],[-85.652363,47.220219],[-84.87608,46.900083],[-84.779238,46.637102],[-84.543749,46.538684],[-84.6049,46.4396],[-84.3367,46.40877],[-84.14212,46.512226],[-84.091851,46.275419],[-83.890765,46.116927],[-83.616131,46.116927],[-83.469551,45.994686],[-83.592851,45.816894],[-82.550925,45.347517],[-82.337763,44.44],[-82.137642,43.571088],[-82.43,42.98],[-82.9,42.43],[-83.12,42.08],[-83.142,41.975681],[-83.02981,41.832796],[-82.690089,41.675105],[-82.439278,41.675105],[-81.277747,42.209026],[-80.247448,42.3662],[-78.939362,42.863611],[-78.92,42.965],[-79.01,43.27],[-79.171674,43.466339],[-78.72028,43.625089],[-77.737885,43.629056],[-76.820034,43.628784],[-76.5,44.018459],[-76.375,44.09631],[-75.31821,44.81645],[-74.867,45.00048],[-73.34783,45.00738],[-71.50506,45.0082],[-71.405,45.255],[-71.08482,45.30524],[-70.66,45.46],[-70.305,45.915],[-69.99997,46.69307],[-69.237216,47.447781],[-68.905,47.185],[-68.23444,47.35486],[-67.79046,47.06636],[-67.79134,45.70281],[-67.13741,45.13753],[-66.96466,44.8097],[-68.03252,44.3252],[-69.06,43.98],[-70.11617,43.68405],[-70.645476,43.090238],[-70.81489,42.8653],[-70.825,42.335],[-70.495,41.805],[-70.08,41.78],[-70.185,42.145],[-69.88497,41.92283],[-69.96503,41.63717],[-70.64,41.475],[-71.12039,41.49445],[-71.86,41.32],[-72.295,41.27],[-72.87643,41.22065],[-73.71,40.931102],[-72.24126,41.11948],[-71.945,40.93],[-73.345,40.63],[-73.982,40.628],[-73.952325,40.75075],[-74.25671,40.47351],[-73.96244,40.42763],[-74.17838,39.70926],[-74.90604,38.93954],[-74.98041,39.1964],[-75.20002,39.24845],[-75.52805,39.4985],[-75.32,38.96],[-75.071835,38.782032],[-75.05673,38.40412],[-75.37747,38.01551],[-75.94023,37.21689],[-76.03127,37.2566],[-75.72205,37.93705],[-76.23287,38.319215],[-76.35,39.15],[-76.542725,38.717615],[-76.32933,38.08326],[-76.989998,38.239992],[-76.30162,37.917945],[-76.25874,36.9664],[-75.9718,36.89726],[-75.86804,36.55125],[-75.72749,35.55074],[-76.36318,34.80854],[-77.397635,34.51201],[-78.05496,33.92547],[-78.55435,33.86133],[-79.06067,33.49395],[-79.20357,33.15839],[-80.301325,32.509355],[-80.86498,32.0333],[-81.33629,31.44049],[-81.49042,30.72999],[-81.31371,30.03552],[-80.98,29.18],[-80.535585,28.47213],[-80.53,28.04],[-80.056539,26.88],[-80.088015,26.205765],[-80.13156,25.816775],[-80.38103,25.20616],[-80.68,25.08],[-81.17213,25.20126],[-81.33,25.64],[-81.71,25.87],[-82.24,26.73],[-82.70515,27.49504],[-82.85526,27.88624],[-82.65,28.55],[-82.93,29.1],[-83.70959,29.93656],[-84.1,30.09],[-85.10882,29.63615],[-85.28784,29.68612],[-85.7731,30.15261],[-86.4,30.4],[-87.53036,30.27433],[-88.41782,30.3849],[-89.18049,30.31598],[-89.593831,30.159994],[-89.413735,29.89419],[-89.43,29.48864],[-89.21767,29.29108],[-89.40823,29.15961],[-89.77928,29.30714],[-90.15463,29.11743],[-90.880225,29.148535],[-91.626785,29.677],[-92.49906,29.5523],[-93.22637,29.78375],[-93.84842,29.71363],[-94.69,29.48],[-95.60026,28.73863],[-96.59404,28.30748],[-97.14,27.83],[-97.37,27.38],[-97.38,26.69],[-97.33,26.21],[-97.14,25.87],[-97.53,25.84],[-98.24,26.06],[-99.02,26.37],[-99.3,26.84],[-99.52,27.54],[-100.11,28.11],[-100.45584,28.69612],[-100.9576,29.38071],[-101.6624,29.7793],[-102.48,29.76],[-103.11,28.97],[-103.94,29.27],[-104.45697,29.57196],[-104.70575,30.12173],[-105.03737,30.64402],[-105.63159,31.08383],[-106.1429,31.39995],[-106.50759,31.75452],[-108.24,31.754854],[-108.24194,31.34222],[-109.035,31.34194],[-111.02361,31.33472],[-113.30498,32.03914],[-114.815,32.52528],[-114.72139,32.72083],[-115.99135,32.61239],[-117.12776,32.53534],[-117.295938,33.046225],[-117.944,33.621236],[-118.410602,33.740909],[-118.519895,34.027782],[-119.081,34.078],[-119.438841,34.348477],[-120.36778,34.44711],[-120.62286,34.60855],[-120.74433,35.15686],[-121.71457,36.16153],[-122.54747,37.55176],[-122.51201,37.78339],[-122.95319,38.11371],[-123.7272,38.95166],[-123.86517,39.76699],[-124.39807,40.3132],[-124.17886,41.14202],[-124.2137,41.99964],[-124.53284,42.76599],[-124.14214,43.70838],[-124.020535,44.615895],[-123.89893,45.52341],[-124.079635,46.86475],[-124.39567,47.72017],[-124.68721,48.184433],[-124.566101,48.379715],[-123.12,48.04],[-122.58736,47.096],[-122.34,47.36],[-122.5,48.18],[-122.84,49],[-120,49],[-117.03121,49],[-116.04818,49],[-113,49],[-110.05,49],[-107.05,49],[-104.04826,48.99986],[-100.65,49],[-97.22872,49.0007],[-95.15907,49],[-95.15609,49.38425],[-94.81758,49.38905]]],[[[-153.006314,57.115842],[-154.00509,56.734677],[-154.516403,56.992749],[-154.670993,57.461196],[-153.76278,57.816575],[-153.228729,57.968968],[-152.564791,57.901427],[-152.141147,57.591059],[-153.006314,57.115842]]],[[[-165.579164,59.909987],[-166.19277,59.754441],[-166.848337,59.941406],[-167.455277,60.213069],[-166.467792,60.38417],[-165.67443,60.293607],[-165.579164,59.909987]]],[[[-171.731657,63.782515],[-171.114434,63.592191],[-170.491112,63.694975],[-169.682505,63.431116],[-168.689439,63.297506],[-168.771941,63.188598],[-169.52944,62.976931],[-170.290556,63.194438],[-170.671386,63.375822],[-171.553063,63.317789],[-171.791111,63.405846],[-171.731657,63.782515]]],[[[-155.06779,71.147776],[-154.344165,70.696409],[-153.900006,70.889989],[-152.210006,70.829992],[-152.270002,70.600006],[-150.739992,70.430017],[-149.720003,70.53001],[-147.613362,70.214035],[-145.68999,70.12001],[-144.920011,69.989992],[-143.589446,70.152514],[-142.07251,69.851938],[-140.985988,69.711998],[-140.985988,69.711998],[-140.992499,66.000029],[-140.99777,60.306397],[-140.012998,60.276838],[-139.039,60.000007],[-138.34089,59.56211],[-137.4525,58.905],[-136.47972,59.46389],[-135.47583,59.78778],[-134.945,59.27056],[-134.27111,58.86111],[-133.355549,58.410285],[-132.73042,57.69289],[-131.70781,56.55212],[-130.00778,55.91583],[-129.979994,55.284998],[-130.53611,54.802753],[-131.085818,55.178906],[-131.967211,55.497776],[-132.250011,56.369996],[-133.539181,57.178887],[-134.078063,58.123068],[-135.038211,58.187715],[-136.628062,58.212209],[-137.800006,58.499995],[-139.867787,59.537762],[-140.825274,59.727517],[-142.574444,60.084447],[-143.958881,59.99918],[-145.925557,60.45861],[-147.114374,60.884656],[-148.224306,60.672989],[-148.018066,59.978329],[-148.570823,59.914173],[-149.727858,59.705658],[-150.608243,59.368211],[-151.716393,59.155821],[-151.859433,59.744984],[-151.409719,60.725803],[-150.346941,61.033588],[-150.621111,61.284425],[-151.895839,60.727198],[-152.57833,60.061657],[-154.019172,59.350279],[-153.287511,58.864728],[-154.232492,58.146374],[-155.307491,57.727795],[-156.308335,57.422774],[-156.556097,56.979985],[-158.117217,56.463608],[-158.433321,55.994154],[-159.603327,55.566686],[-160.28972,55.643581],[-161.223048,55.364735],[-162.237766,55.024187],[-163.069447,54.689737],[-164.785569,54.404173],[-164.942226,54.572225],[-163.84834,55.039431],[-162.870001,55.348043],[-161.804175,55.894986],[-160.563605,56.008055],[-160.07056,56.418055],[-158.684443,57.016675],[-158.461097,57.216921],[-157.72277,57.570001],[-157.550274,58.328326],[-157.041675,58.918885],[-158.194731,58.615802],[-158.517218,58.787781],[-159.058606,58.424186],[-159.711667,58.93139],[-159.981289,58.572549],[-160.355271,59.071123],[-161.355003,58.670838],[-161.968894,58.671665],[-162.054987,59.266925],[-161.874171,59.633621],[-162.518059,59.989724],[-163.818341,59.798056],[-164.662218,60.267484],[-165.346388,60.507496],[-165.350832,61.073895],[-166.121379,61.500019],[-165.734452,62.074997],[-164.919179,62.633076],[-164.562508,63.146378],[-163.753332,63.219449],[-163.067224,63.059459],[-162.260555,63.541936],[-161.53445,63.455817],[-160.772507,63.766108],[-160.958335,64.222799],[-161.518068,64.402788],[-160.777778,64.788604],[-161.391926,64.777235],[-162.45305,64.559445],[-162.757786,64.338605],[-163.546394,64.55916],[-164.96083,64.446945],[-166.425288,64.686672],[-166.845004,65.088896],[-168.11056,65.669997],[-166.705271,66.088318],[-164.47471,66.57666],[-163.652512,66.57666],[-163.788602,66.077207],[-161.677774,66.11612],[-162.489715,66.735565],[-163.719717,67.116395],[-164.430991,67.616338],[-165.390287,68.042772],[-166.764441,68.358877],[-166.204707,68.883031],[-164.430811,68.915535],[-163.168614,69.371115],[-162.930566,69.858062],[-161.908897,70.33333],[-160.934797,70.44769],[-159.039176,70.891642],[-158.119723,70.824721],[-156.580825,71.357764],[-155.06779,71.147776]]]]},"id":"USA"}, {"type":"Feature","properties":{"name":"Uzbekistan"},"geometry":{"type":"Polygon","coordinates":[[[66.518607,37.362784],[66.54615,37.974685],[65.215999,38.402695],[64.170223,38.892407],[63.518015,39.363257],[62.37426,40.053886],[61.882714,41.084857],[61.547179,41.26637],[60.465953,41.220327],[60.083341,41.425146],[59.976422,42.223082],[58.629011,42.751551],[57.78653,42.170553],[56.932215,41.826026],[57.096391,41.32231],[55.968191,41.308642],[55.928917,44.995858],[58.503127,45.586804],[58.689989,45.500014],[60.239972,44.784037],[61.05832,44.405817],[62.0133,43.504477],[63.185787,43.650075],[64.900824,43.728081],[66.098012,42.99766],[66.023392,41.994646],[66.510649,41.987644],[66.714047,41.168444],[67.985856,41.135991],[68.259896,40.662325],[68.632483,40.668681],[69.070027,41.384244],[70.388965,42.081308],[70.962315,42.266154],[71.259248,42.167711],[70.420022,41.519998],[71.157859,41.143587],[71.870115,41.3929],[73.055417,40.866033],[71.774875,40.145844],[71.014198,40.244366],[70.601407,40.218527],[70.45816,40.496495],[70.666622,40.960213],[69.329495,40.727824],[69.011633,40.086158],[68.536416,39.533453],[67.701429,39.580478],[67.44222,39.140144],[68.176025,38.901553],[68.392033,38.157025],[67.83,37.144994],[67.075782,37.356144],[66.518607,37.362784]]]},"id":"UZB"}, {"type":"Feature","properties":{"name":"Venezuela"},"geometry":{"type":"Polygon","coordinates":[[[-71.331584,11.776284],[-71.360006,11.539994],[-71.94705,11.423282],[-71.620868,10.96946],[-71.633064,10.446494],[-72.074174,9.865651],[-71.695644,9.072263],[-71.264559,9.137195],[-71.039999,9.859993],[-71.350084,10.211935],[-71.400623,10.968969],[-70.155299,11.375482],[-70.293843,11.846822],[-69.943245,12.162307],[-69.5843,11.459611],[-68.882999,11.443385],[-68.233271,10.885744],[-68.194127,10.554653],[-67.296249,10.545868],[-66.227864,10.648627],[-65.655238,10.200799],[-64.890452,10.077215],[-64.329479,10.389599],[-64.318007,10.641418],[-63.079322,10.701724],[-61.880946,10.715625],[-62.730119,10.420269],[-62.388512,9.948204],[-61.588767,9.873067],[-60.830597,9.38134],[-60.671252,8.580174],[-60.150096,8.602757],[-59.758285,8.367035],[-60.550588,7.779603],[-60.637973,7.415],[-60.295668,7.043911],[-60.543999,6.856584],[-61.159336,6.696077],[-61.139415,6.234297],[-61.410303,5.959068],[-60.733574,5.200277],[-60.601179,4.918098],[-60.966893,4.536468],[-62.08543,4.162124],[-62.804533,4.006965],[-63.093198,3.770571],[-63.888343,4.02053],[-64.628659,4.148481],[-64.816064,4.056445],[-64.368494,3.79721],[-64.408828,3.126786],[-64.269999,2.497006],[-63.422867,2.411068],[-63.368788,2.2009],[-64.083085,1.916369],[-64.199306,1.492855],[-64.611012,1.328731],[-65.354713,1.095282],[-65.548267,0.789254],[-66.325765,0.724452],[-66.876326,1.253361],[-67.181294,2.250638],[-67.447092,2.600281],[-67.809938,2.820655],[-67.303173,3.318454],[-67.337564,3.542342],[-67.621836,3.839482],[-67.823012,4.503937],[-67.744697,5.221129],[-67.521532,5.55687],[-67.34144,6.095468],[-67.695087,6.267318],[-68.265052,6.153268],[-68.985319,6.206805],[-69.38948,6.099861],[-70.093313,6.960376],[-70.674234,7.087785],[-71.960176,6.991615],[-72.198352,7.340431],[-72.444487,7.423785],[-72.479679,7.632506],[-72.360901,8.002638],[-72.439862,8.405275],[-72.660495,8.625288],[-72.78873,9.085027],[-73.304952,9.152],[-73.027604,9.73677],[-72.905286,10.450344],[-72.614658,10.821975],[-72.227575,11.108702],[-71.973922,11.608672],[-71.331584,11.776284]]]},"id":"VEN"}, {"type":"Feature","properties":{"name":"Vietnam"},"geometry":{"type":"Polygon","coordinates":[[[108.05018,21.55238],[106.715068,20.696851],[105.881682,19.75205],[105.662006,19.058165],[106.426817,18.004121],[107.361954,16.697457],[108.269495,16.079742],[108.877107,15.276691],[109.33527,13.426028],[109.200136,11.666859],[108.36613,11.008321],[107.220929,10.364484],[106.405113,9.53084],[105.158264,8.59976],[104.795185,9.241038],[105.076202,9.918491],[104.334335,10.486544],[105.199915,10.88931],[106.24967,10.961812],[105.810524,11.567615],[107.491403,12.337206],[107.614548,13.535531],[107.382727,14.202441],[107.564525,15.202173],[107.312706,15.908538],[106.556008,16.604284],[105.925762,17.485315],[105.094598,18.666975],[103.896532,19.265181],[104.183388,19.624668],[104.822574,19.886642],[104.435,20.758733],[103.203861,20.766562],[102.754896,21.675137],[102.170436,22.464753],[102.706992,22.708795],[103.504515,22.703757],[104.476858,22.81915],[105.329209,23.352063],[105.811247,22.976892],[106.725403,22.794268],[106.567273,22.218205],[107.04342,21.811899],[108.05018,21.55238]]]},"id":"VNM"}, diff --git a/lib/main-geo.co b/lib/main-geo.co index 32cabf4..86ba0d5 100644 --- a/lib/main-geo.co +++ b/lib/main-geo.co @@ -1,52 +1,101 @@ -Seq = require 'seq' -Backbone = require 'backbone' +# Seq = require 'seq' +ColorBrewer = require 'colorbrewer' -{ _, op, -} = require 'kraken/util' -{ BaseView, BaseModel, BaseList, -} = require 'kraken/base' -{ ChartType, DygraphsChartType, -} = require 'kraken/chart' -{ Graph, GraphList, GraphDisplayView, -} = require 'kraken/graph' -{ DashboardView, -} = require 'kraken/dashboard' +root = this +root.data = null +width = 960 +height = 500 -root = this -CHART_OPTIONS_SPEC = [] -CHART_DEFAULT_OPTIONS = {} - - -# Create the Graph Scaffold -main = -> - # Set up Dygraph chart type spec - # TODO: load this on-demand - dyglib = new DygraphsChartType CHART_OPTIONS_SPEC - - # _.dump _.clone(data.options), 'data.options' - - # Instantiate model & view - dashboard = root.dashboard = new DashboardView do - graph_spec : root.CHART_OPTIONS_SPEC # FIXME: necessary? - - $ '#content .inner' .append dashboard.el - - - -# Load data files -Seq([ <[ CHART_OPTIONS_SPEC /schema/dygraph.json ]> -]) -.parEach_ (next, [key, url]) -> - jQuery.ajax do - url : url, - dataType : 'json' - success : (res) -> - root[key] = res - next.ok() - error : (err) -> console.error err -.seq -> - console.log 'All data loaded!' - jQuery main +fill = d3.scale.log() + .domain [1, 10000] + .range ["black", "red"] + +quantize = (d) -> + # console.log d.properties.name + if root.data[d.properties.name]? + return fill root.data[d.properties.name]['editors'] + else + console.log 'Country '+d.properties.name+' not in data' + return fill "rgb(0,0,0)" + + +move = -> + # console.log d3.event + projection + .translate d3.event.translate + .scale d3.event.scale + feature.attr "d" path + + + +projection = d3.geo.mercator() + .scale width + .translate [width/2,height/2] + +path = d3.geo.path() + .projection projection + +zoom = d3.behavior.zoom() + .translate projection.translate() + .scale projection.scale() + .scaleExtent [height,height*8] + .on "zoom" move + +svg = d3.select ".inner" + .append "svg" + .attr "width" width + .attr "height" height + .append "g" + .attr "transform" "translate(0,0)" + .call zoom + +g = svg.append "g" + +feature = g.selectAll ".feature" + +svg.append "rect" + .attr "class" "frame" + .attr "width" width + .attr "height" height + + + +d3.json do + "/data/geo/maps/world-countries.json" + (json) -> + root.feature = feature + .data json.features + .enter().append "path" + .attr "class" "feature" + .attr "d" path + .attr do + "fill" + (d) -> + # console.log path.area d + fill "rgb(0,0,0)" + .on do + "mouseover" + (d) -> + console.log 'mouseover!' + if root.data[d.properties.name]? + console.log root.data[d.properties.name]['editors'] + else + console.log 'Country '+d.properties.name+' not in data' + + + + +d3.json do + "/data/geo/data/en_geo_editors.json" + (json) -> + root.data = json + console.log root.data + console.log root.feature + root.feature.attr "fill" quantize + + + +console.log 'Loaded geo coding map!' diff --git a/lib/server/server.co b/lib/server/server.co index aafe519..0d25d21 100755 --- a/lib/server/server.co +++ b/lib/server/server.co @@ -15,7 +15,7 @@ Seq = require 'seq' yaml = require 'js-yaml' mime = require 'mime' express = require 'express' -Resource = require 'express-resource' +# Resource = require 'express-resource' compiler = require 'connect-compiler-extras' op = require '../util/op' diff --git a/static/vendor/d3 b/static/vendor/d3 deleted file mode 120000 index a92620b..0000000 --- a/static/vendor/d3 +++ /dev/null @@ -1 +0,0 @@ -d3-2.7.5 \ No newline at end of file diff --git a/static/vendor/d3-2.8.1/.gitignore b/static/vendor/d3-2.8.1/.gitignore new file mode 100755 index 0000000..8cc5a84 --- /dev/null +++ b/static/vendor/d3-2.8.1/.gitignore @@ -0,0 +1,3 @@ +_site +node_modules +.DS_Store diff --git a/static/vendor/d3-2.8.1/.gitmodules b/static/vendor/d3-2.8.1/.gitmodules new file mode 100755 index 0000000..e69de29 diff --git a/static/vendor/d3-2.8.1/.npmignore b/static/vendor/d3-2.8.1/.npmignore new file mode 100755 index 0000000..146266d --- /dev/null +++ b/static/vendor/d3-2.8.1/.npmignore @@ -0,0 +1,4 @@ +examples/ +test/ +lib/ +.DS_Store diff --git a/static/vendor/d3-2.8.1/LICENSE b/static/vendor/d3-2.8.1/LICENSE new file mode 100755 index 0000000..cde4728 --- /dev/null +++ b/static/vendor/d3-2.8.1/LICENSE @@ -0,0 +1,26 @@ +Copyright (c) 2012, 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.8.1/Makefile b/static/vendor/d3-2.8.1/Makefile new file mode 100755 index 0000000..bc96960 --- /dev/null +++ b/static/vendor/d3-2.8.1/Makefile @@ -0,0 +1,239 @@ +# 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 + +all: \ + d3.v2.js \ + d3.v2.min.js \ + package.json + +# Modify this rule to build your own custom release. + +.INTERMEDIATE d3.v2.js: \ + src/start.js \ + d3.core.js \ + d3.scale.js \ + d3.svg.js \ + d3.behavior.js \ + d3.layout.js \ + d3.csv.js \ + d3.geo.js \ + d3.geom.js \ + d3.time.js \ + src/end.js + +d3.core.js: \ + src/compat/date.js \ + src/compat/style.js \ + src/core/core.js \ + src/core/class.js \ + src/core/array.js \ + src/core/map.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-datum.js \ + src/core/selection-filter.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/mouse.js \ + src/core/touches.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 \ + src/scale/identity.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.layout.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 + +d3.geo.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 + +d3.csv.js: \ + src/csv/csv.js \ + src/csv/parse.js \ + src/csv/format.js + +d3.time.js: \ + src/time/time.js \ + src/time/format.js \ + src/time/format-utc.js \ + src/time/format-iso.js \ + src/time/interval.js \ + src/time/second.js \ + src/time/minute.js \ + src/time/hour.js \ + src/time/day.js \ + src/time/week.js \ + src/time/month.js \ + src/time/year.js \ + src/time/scale.js \ + src/time/scale-utc.js + +d3.geom.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 + +test: all + @$(JS_TESTER) + +%.min.js: %.js Makefile + @rm -f $@ + $(JS_COMPILER) < $< > $@ + +d3%.js: Makefile + @rm -f $@ + cat $(filter %.js,$^) > $@ + @chmod a-w $@ + +install: + mkdir -p node_modules + npm install + +package.json: d3.v2.js src/package.js + @rm -f $@ + node src/package.js > $@ + @chmod a-w $@ + +clean: + rm -f d3*.js package.json diff --git a/static/vendor/d3-2.8.1/README.md b/static/vendor/d3-2.8.1/README.md new file mode 100755 index 0000000..94cd51a --- /dev/null +++ b/static/vendor/d3-2.8.1/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.8.1/d3.v2.js b/static/vendor/d3-2.8.1/d3.v2.js new file mode 100755 index 0000000..c1b6caf --- /dev/null +++ b/static/vendor/d3-2.8.1/d3.v2.js @@ -0,0 +1,9342 @@ +(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.8.1"}; // semver +function d3_class(ctor, properties) { + try { + for (var key in properties) { + Object.defineProperty(ctor.prototype, key, { + value: properties[key], + enumerable: false + }); + } + } catch (e) { + ctor.prototype = properties; + } +} +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]; +}; +d3.map = function(object) { + var map = new d3_Map; + for (var key in object) map.set(key, object[key]); + return map; +}; + +function d3_Map() {} + +d3_class(d3_Map, { + has: function(key) { + return d3_map_prefix + key in this; + }, + get: function(key) { + return this[d3_map_prefix + key]; + }, + set: function(key, value) { + return this[d3_map_prefix + key] = value; + }, + remove: function(key) { + key = d3_map_prefix + key; + return key in this && delete this[key]; + }, + keys: function() { + var keys = []; + this.forEach(function(key) { keys.push(key); }); + return keys; + }, + values: function() { + var values = []; + this.forEach(function(key, value) { values.push(value); }); + return values; + }, + entries: function() { + var entries = []; + this.forEach(function(key, value) { entries.push({key: key, value: value}); }); + return entries; + }, + forEach: function(f) { + for (var key in this) { + if (key.charCodeAt(0) === d3_map_prefixCode) { + f.call(this, key.substring(1), this[key]); + } + } + } +}); + +var d3_map_prefix = "\0", // prevent collision with built-ins + d3_map_prefixCode = d3_map_prefix.charCodeAt(0); +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; +} +d3.bisector = function(f) { + return { + left: 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 (f.call(a, a[mid], mid) < x) lo = mid + 1; + else hi = mid; + } + return lo; + }, + right: 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 < f.call(a, a[mid], mid)) hi = mid; + else lo = mid + 1; + } + return lo; + } + }; +}; + +var d3_bisector = d3.bisector(function(d) { return d; }); +d3.bisectLeft = d3_bisector.left; +d3.bisect = d3.bisectRight = d3_bisector.right; +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, + valuesByKey = new d3_Map, + values, + o = {}; + + while (++i < n) { + if (values = valuesByKey.get(keyValue = key(object = array[i]))) { + values.push(object); + } else { + valuesByKey.set(keyValue, [object]); + } + } + + valuesByKey.forEach(function(keyValue) { + o[keyValue] = map(valuesByKey.get(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(":"), + prefix = name; + if (i >= 0) { + prefix = name.substring(0, i); + name = name.substring(i + 1); + } + return d3_nsPrefix.hasOwnProperty(prefix) + ? {space: d3_nsPrefix[prefix], local: name} + : name; + } +}; +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 = new d3_Map; + + 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 = listenerByName.get(name), + i; + + // return the current listener, if any + if (arguments.length < 2) return l && l.on; + + // remove the old listener, if any (with copy-on-write) + if (l) { + l.on = null; + listeners = listeners.slice(0, i = listeners.indexOf(l)).concat(listeners.slice(i + 1)); + listenerByName.remove(name); + } + + // add the new listener, if any + if (listener) listeners.push(listenerByName.set(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.get(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 = d3.map({ + 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), + d3_ease_default = function() { return d3_ease_identity; }; + +var d3_ease = d3.map({ + linear: d3_ease_default, + 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 = d3.map({ + "in": d3_ease_identity, + "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"; + t = d3_ease.get(t) || d3_ease_default; + m = d3_ease_mode.get(m) || d3_ease_identity; + return d3_ease_clamp(m(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_identity(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(); +} + +function d3_eventSource() { + var e = d3.event, s; + while (s = e.sourceEvent) e = s; + return e; +} + +// Like d3.dispatch, but for custom events abstracting native UI events. These +// events have a target component (such as a brush), a target element (such as +// the svg:g element containing the brush) and the standard arguments `d` (the +// target element's data) and `i` (the selection index of the target element). +function d3_eventDispatch(target) { + var dispatch = new d3_dispatch, + i = 0, + n = arguments.length; + + while (++i < n) dispatch[arguments[i]] = d3_dispatch_event(dispatch); + + // Creates a dispatch context for the specified `thiz` (typically, the target + // DOM element that received the source event) and `argumentz` (typically, the + // data `d` and index `i` of the target element). The returned function can be + // used to dispatch an event to any registered listeners; the function takes a + // single argument as input, being the event to dispatch. The event must have + // a "type" attribute which corresponds to a type registered in the + // constructor. This context will automatically populate the "sourceEvent" and + // "target" attributes of the event, as well as setting the `d3.event` global + // for the duration of the notification. + dispatch.of = function(thiz, argumentz) { + return function(e1) { + try { + var e0 = + e1.sourceEvent = d3.event; + e1.target = target; + d3.event = e1; + dispatch[e1.type].apply(thiz, argumentz); + } finally { + d3.event = e0; + } + }; + }; + + return dispatch; +} +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" ? d3_rgb_names.has(b) || /^(#|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.get(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 = d3.map({ + 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" +}); + +d3_rgb_names.forEach(function(key, value) { + d3_rgb_names.set(key, d3_rgb_parse(value, 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); + }); +}; +d3_selectionPrototype.data = function(value, key) { + var i = -1, + n = this.length, + group, + node; + + // If no value is specified, return the first value. + if (!arguments.length) { + value = new Array(n = (group = this[0]).length); + while (++i < n) { + if (node = group[i]) { + value[i] = node.__data__; + } + } + return value; + } + + 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 (key) { + var nodeByKeyValue = new d3_Map, + keyValues = [], + keyValue, + j = groupData.length; + + for (i = -1; ++i < n;) { + keyValue = key.call(node = group[i], node.__data__, i); + if (nodeByKeyValue.has(keyValue)) { + exitNodes[j++] = node; // duplicate key + } else { + nodeByKeyValue.set(keyValue, node); + } + keyValues.push(keyValue); + } + + for (i = -1; ++i < m;) { + keyValue = key.call(groupData, nodeData = groupData[i], i) + if (nodeByKeyValue.has(keyValue)) { + updateNodes[i] = node = nodeByKeyValue.get(keyValue); + node.__data__ = nodeData; + enterNodes[i] = exitNodes[i] = null; + } else { + enterNodes[i] = d3_selection_dataNode(nodeData); + updateNodes[i] = exitNodes[i] = null; + } + nodeByKeyValue.remove(keyValue); + } + + for (i = -1; ++i < n;) { + if (nodeByKeyValue.has(keyValues[i])) { + 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 enter = d3_selection_enter([]), + update = d3_selection([]), + exit = d3_selection([]); + + if (typeof value === "function") { + while (++i < n) { + bind(group = this[i], value.call(group, group.parentNode.__data__, i)); + } + } else { + while (++i < n) { + bind(group = this[i], value); + } + } + + update.enter = function() { return enter; }; + update.exit = function() { return exit; }; + return update; +}; + +function d3_selection_dataNode(data) { + return {__data__: data}; +} +d3_selectionPrototype.datum = +d3_selectionPrototype.map = function(value) { + return arguments.length < 1 + ? this.property("__data__") + : this.property("__data__", value); +}; +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.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, + o = node[name]; + + // remove the old listener, if any (using the previously-set capture) + if (o) { + node.removeEventListener(type, o, o.$); + delete node[name]; + } + + // add the new listener, if any (remembering the capture flag) + if (listener) { + node.addEventListener(type, node[name] = l, l.$ = capture); + l._ = listener; // stash the unwrapped listener for get + } + + // 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; + } + } + }); +}; +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: d3_transitionDelay, duration: d3_transitionDuration} : null); + } + } + + return d3_transition(subgroups, d3_transitionId || ++d3_transitionNextId, 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.enter = d3_selection_enter; +d3.selection.enter.prototype = 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 = new d3_Map, + 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.get(name); + if (tween == null) tweens.remove(name); + else tweens.set(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; + + tweens.forEach(function(key, value) { + if (tween = value.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_transitionId = id; + event.end.call(node, d, i); + d3_transitionId = 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_transitionNextId = 0, + d3_transitionId = 0, + d3_transitionDefaultDelay = 0, + d3_transitionDefaultDuration = 250, + d3_transitionDefaultEase = d3.ease("cubic-in-out"), + d3_transitionDelay = d3_transitionDefaultDelay, + d3_transitionDuration = d3_transitionDefaultDuration, + d3_transitionEase = d3_transitionDefaultEase; + +d3_transitionPrototype.call = d3_selectionPrototype.call; + +d3.transition = function(selection) { + return arguments.length + ? (d3_transitionId ? selection.transition() : selection) + : 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) | 0; } + : (value = value | 0, 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 = Math.max(1, value.apply(this, arguments) | 0); } + : (value = Math.max(1, value | 0), function(d, i, j) { groups[j][i].duration = value; })); +}; +function d3_transition_each(callback) { + var id = d3_transitionId, + ease = d3_transitionEase, + delay = d3_transitionDelay, + duration = d3_transitionDuration; + + d3_transitionId = this.id; + d3_transitionEase = this.ease(); + 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) { + d3_transitionDelay = this[j][i].delay; + d3_transitionDuration = this[j][i].duration; + callback.call(node = node.node, node.__data__, i, j); + } + } + } + + d3_transitionId = id; + d3_transitionEase = ease; + d3_transitionDelay = delay; + d3_transitionDuration = duration; + 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; +d3.mouse = function(container) { + return d3_mousePoint(container, d3_eventSource()); +}; + +// https://bugs.webkit.org/show_bug.cgi?id=44083 +var d3_mouse_bug44083 = /WebKit/.test(navigator.userAgent) ? -1 : 0; + +function d3_mousePoint(container, e) { + var svg = container.ownerSVGElement || container; + if (svg.createSVGPoint) { + var point = svg.createSVGPoint(); + if ((d3_mouse_bug44083 < 0) && (window.scrollX || window.scrollY)) { + 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]; + } + var rect = container.getBoundingClientRect(); + return [e.clientX - rect.left - container.clientLeft, e.clientY - rect.top - container.clientTop]; +}; +d3.touches = function(container, touches) { + if (arguments.length < 2) touches = d3_eventSource().touches; + return touches ? d3_array(touches).map(function(touch) { + var point = d3_mousePoint(container, touch); + point.identifier = touch.identifier; + return point; + }) : []; +}; +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.get(x) || index.set(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 = new d3_Map; + var i = -1, n = x.length, xi; + while (++i < n) if (!index.has(xi = x[i])) index.set(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 reverse = x[1] < x[0], + start = x[reverse - 0], + stop = x[1 - reverse], + step = (stop - start) / (domain.length + padding); + range = steps(start + step * padding, step); + if (reverse) range.reverse(); + 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 reverse = x[1] < x[0], + start = x[reverse - 0], + stop = x[1 - reverse], + step = Math.floor((stop - start) / (domain.length + padding)), + error = stop - start - (domain.length - padding) * step; + range = steps(start + Math.round(error / 2), step); + if (reverse) range.reverse(); + rangeBand = Math.round(step * (1 - padding)); + ranger = {t: "rangeRoundBands", x: x, p: padding}; + return scale; + }; + + scale.rangeBand = function() { + return rangeBand; + }; + + scale.rangeExtent = function() { + return d3_scaleExtent(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.scale.identity = function() { + return d3_scale_identity([0, 1]); +}; + +function d3_scale_identity(domain) { + + function identity(x) { return +x; } + + identity.invert = identity; + + identity.domain = identity.range = function(x) { + if (!arguments.length) return domain; + domain = x.map(identity); + return identity; + }; + + identity.ticks = function(m) { + return d3_scale_linearTicks(domain, m); + }; + + identity.tickFormat = function(m) { + return d3_scale_linearTickFormat(domain, m); + }; + + identity.copy = function() { + return d3_scale_identity(domain); + }; + + return identity; +} +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 = d3_svg_lineInterpolatorDefault, + interpolator = d3_svg_lineInterpolators.get(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; + if (!d3_svg_lineInterpolators.has(v += "")) v = d3_svg_lineInterpolatorDefault; + interpolator = d3_svg_lineInterpolators.get(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]; +} + +var d3_svg_lineInterpolatorDefault = "linear"; + +// The various interpolators supported by the `line` class. +var d3_svg_lineInterpolators = d3.map({ + "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; + if (!d3_svg_lineInterpolators.has(x += "")) x = d3_svg_lineInterpolatorDefault; + i0 = d3_svg_lineInterpolators.get(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 = d3.mouse; +d3.svg.touches = d3.touches; +d3.svg.symbol = function() { + var type = d3_svg_symbolType, + size = d3_svg_symbolSize; + + function symbol(d, i) { + return (d3_svg_symbols.get(type.call(this, d, i)) + || d3_svg_symbolCircle) + (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"; +} + +function d3_svg_symbolCircle(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"; +} + +// TODO cross-diagonal? +var d3_svg_symbols = d3.map({ + "circle": d3_svg_symbolCircle, + "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_svg_symbols.keys(); + +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], + tickValues = null, + tickFormat_, + tickSubdivide = 0; + + function axis(g) { + g.each(function() { + var g = d3.select(this); + + // Ticks, or domain values for ordinal scales. + var ticks = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments_) : scale.domain()) : tickValues, + 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 = d3.transition(subtick.exit()).style("opacity", 1e-6).remove(), + subtickUpdate = d3.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 = d3.transition(tick.exit()).style("opacity", 1e-6).remove(), + tickUpdate = d3.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 = d3.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.tickValues = function(x) { + if (!arguments.length) return tickValues; + tickValues = x; + 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_eventDispatch(brush, "brushstart", "brush", "brushend"), + x = null, // x-scale, optional + y = null, // y-scale, optional + resizes = d3_svg_brushResizes[0], + extent = [[0, 0], [0, 0]], // [x0, y0], [x1, y1], in pixels (integers) + extentDomain; // the extent in data space, lazily created + + function brush(g) { + g.each(function() { + var g = d3.select(this), + bg = g.selectAll(".background").data([0]), + fg = g.selectAll(".extent").data([0]), + tz = g.selectAll(".resize").data(resizes, String), + e; + + // Prepare the brush container for events. + g + .style("pointer-events", "all") + .on("mousedown.brush", brushstart) + .on("touchstart.brush", brushstart); + + // An invisible, mouseable area for starting a new brush. + bg.enter().append("rect") + .attr("class", "background") + .style("visibility", "hidden") + .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("g") + .attr("class", function(d) { return "resize " + d; }) + .style("cursor", function(d) { return d3_svg_brushCursor[d]; }) + .append("rect") + .attr("x", function(d) { return /[ew]$/.test(d) ? -3 : null; }) + .attr("y", function(d) { return /^[ns]/.test(d) ? -3 : null; }) + .attr("width", 6) + .attr("height", 6) + .style("visibility", "hidden"); + + // Show or hide the resizers. + tz.style("display", brush.empty() ? "none" : null); + + // 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]); + redrawX(g); + } + if (y) { + e = d3_scaleRange(y); + bg.attr("y", e[0]).attr("height", e[1] - e[0]); + redrawY(g); + } + redraw(g); + }); + } + + function redraw(g) { + g.selectAll(".resize").attr("transform", function(d) { + return "translate(" + extent[+/e$/.test(d)][0] + "," + extent[+/^s/.test(d)][1] + ")"; + }); + } + + function redrawX(g) { + g.select(".extent").attr("x", extent[0][0]); + g.selectAll(".extent,.n>rect,.s>rect").attr("width", extent[1][0] - extent[0][0]); + } + + function redrawY(g) { + g.select(".extent").attr("y", extent[0][1]); + g.selectAll(".extent,.e>rect,.w>rect").attr("height", extent[1][1] - extent[0][1]); + } + + function brushstart() { + var target = this, + eventTarget = d3.select(d3.event.target), + event_ = event.of(target, arguments), + g = d3.select(target), + resizing = eventTarget.datum(), + resizingX = !/^(n|s)$/.test(resizing) && x, + resizingY = !/^(e|w)$/.test(resizing) && y, + dragging = eventTarget.classed("extent"), + center, + origin = mouse(), + offset; + + var w = d3.select(window) + .on("mousemove.brush", brushmove) + .on("mouseup.brush", brushend) + .on("touchmove.brush", brushmove) + .on("touchend.brush", brushend) + .on("keydown.brush", keydown) + .on("keyup.brush", keyup); + + // If the extent was clicked on, drag rather than brush; + // store the point between the mouse and extent origin instead. + if (dragging) { + origin[0] = extent[0][0] - origin[0]; + origin[1] = extent[0][1] - origin[1]; + } + + // If a resizer was clicked on, record which side is to be resized. + // Also, set the origin to the opposite side. + else if (resizing) { + var ex = +/w$/.test(resizing), + ey = +/^n/.test(resizing); + offset = [extent[1 - ex][0] - origin[0], extent[1 - ey][1] - origin[1]]; + origin[0] = extent[ex][0]; + origin[1] = extent[ey][1]; + } + + // If the ALT key is down when starting a brush, the center is at the mouse. + else if (d3.event.altKey) center = origin.slice(); + + // Propagate the active cursor to the body for the drag duration. + g.style("pointer-events", "none").selectAll(".resize").style("display", null); + d3.select("body").style("cursor", eventTarget.style("cursor")); + + // Notify listeners. + event_({type: "brushstart"}); + brushmove(); + d3_eventCancel(); + + function mouse() { + var touches = d3.event.changedTouches; + return touches ? d3.touches(target, touches)[0] : d3.mouse(target); + } + + function keydown() { + if (d3.event.keyCode == 32) { + if (!dragging) { + center = null; + origin[0] -= extent[1][0]; + origin[1] -= extent[1][1]; + dragging = 2; + } + d3_eventCancel(); + } + } + + function keyup() { + if (d3.event.keyCode == 32 && dragging == 2) { + origin[0] += extent[1][0]; + origin[1] += extent[1][1]; + dragging = 0; + d3_eventCancel(); + } + } + + function brushmove() { + var point = mouse(), + moved = false; + + // Preserve the offset for thick resizers. + if (offset) { + point[0] += offset[0]; + point[1] += offset[1]; + } + + if (!dragging) { + + // If needed, determine the center from the current extent. + if (d3.event.altKey) { + if (!center) center = [(extent[0][0] + extent[1][0]) / 2, (extent[0][1] + extent[1][1]) / 2]; + + // Update the origin, for when the ALT key is released. + origin[0] = extent[+(point[0] < center[0])][0]; + origin[1] = extent[+(point[1] < center[1])][1]; + } + + // When the ALT key is released, we clear the center. + else center = null; + } + + // Update the brush extent for each dimension. + if (resizingX && move1(point, x, 0)) { + redrawX(g); + moved = true; + } + if (resizingY && move1(point, y, 1)) { + redrawY(g); + moved = true; + } + + // Final redraw and notify listeners. + if (moved) { + redraw(g); + event_({type: "brush", mode: dragging ? "move" : "resize"}); + } + } + + function move1(point, scale, i) { + var range = d3_scaleRange(scale), + r0 = range[0], + r1 = range[1], + position = origin[i], + size = extent[1][i] - extent[0][i], + min, + max; + + // When dragging, reduce the range by the extent size and position. + if (dragging) { + r0 -= position; + r1 -= size + position; + } + + // Clamp the point so that the extent fits within the range extent. + min = Math.max(r0, Math.min(r1, point[i])); + + // Compute the new extent bounds. + if (dragging) { + max = (min += position) + size; + } else { + + // If the ALT key is pressed, then preserve the center of the extent. + if (center) position = Math.max(r0, Math.min(r1, 2 * center[i] - min)); + + // Compute the min and max of the position and point. + if (position < min) { + max = min; + min = position; + } else { + max = position; + } + } + + // Update the stored bounds. + if (extent[0][i] !== min || extent[1][i] !== max) { + extentDomain = null; + extent[0][i] = min; + extent[1][i] = max; + return true; + } + } + + function brushend() { + brushmove(); + + // reset the cursor styles + g.style("pointer-events", "all").selectAll(".resize").style("display", brush.empty() ? "none" : null); + d3.select("body").style("cursor", null); + + w .on("mousemove.brush", null) + .on("mouseup.brush", null) + .on("touchmove.brush", null) + .on("touchend.brush", null) + .on("keydown.brush", null) + .on("keyup.brush", null); + + event_({type: "brushend"}); + d3_eventCancel(); + } + } + + brush.x = function(z) { + if (!arguments.length) return x; + x = z; + resizes = d3_svg_brushResizes[!x << 1 | !y]; // fore! + return brush; + }; + + brush.y = function(z) { + if (!arguments.length) return y; + y = z; + resizes = d3_svg_brushResizes[!x << 1 | !y]; // fore! + return brush; + }; + + brush.extent = function(z) { + var x0, x1, y0, y1, t; + + // Invert the pixel extent to data-space. + if (!arguments.length) { + z = extentDomain || extent; + if (x) { + x0 = z[0][0], x1 = z[1][0]; + if (!extentDomain) { + 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 = z[0][1], y1 = z[1][1]; + if (!extentDomain) { + 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. + extentDomain = [[0, 0], [0, 0]]; + if (x) { + x0 = z[0], x1 = z[1]; + if (y) x0 = x0[0], x1 = x1[0]; + extentDomain[0][0] = x0, extentDomain[1][0] = x1; + if (x.invert) x0 = x(x0), x1 = x(x1); + if (x1 < x0) t = x0, x0 = x1, x1 = t; + extent[0][0] = x0 | 0, extent[1][0] = x1 | 0; + } + if (y) { + y0 = z[0], y1 = z[1]; + if (x) y0 = y0[1], y1 = y1[1]; + extentDomain[0][1] = y0, extentDomain[1][1] = y1; + if (y.invert) y0 = y(y0), y1 = y(y1); + if (y1 < y0) t = y0, y0 = y1, y1 = t; + extent[0][1] = y0 | 0, extent[1][1] = y1 | 0; + } + + return brush; + }; + + brush.clear = function() { + extentDomain = null; + 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]); + }; + + return d3.rebind(brush, event, "on"); +}; + +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" +}; + +var d3_svg_brushResizes = [ + ["n", "e", "s", "w", "nw", "ne", "se", "sw"], + ["e", "w"], + ["n", "s"], + [] +]; +d3.behavior = {}; +// TODO Track touch points by identifier. + +d3.behavior.drag = function() { + var event = d3_eventDispatch(drag, "drag", "dragstart", "dragend"), + origin = null; + + function drag() { + this.on("mousedown.drag", mousedown) + .on("touchstart.drag", mousedown); + } + + function mousedown() { + var target = this, + event_ = event.of(target, arguments), + eventTarget = d3.event.target, + offset, + origin_ = point(), + moved = 0; + + var w = d3.select(window) + .on("mousemove.drag", dragmove) + .on("touchmove.drag", dragmove) + .on("mouseup.drag", dragend, true) + .on("touchend.drag", dragend, true); + + if (origin) { + offset = origin.apply(target, arguments); + offset = [offset.x - origin_[0], offset.y - origin_[1]]; + } else { + offset = [0, 0]; + } + + event_({type: "dragstart"}); + + function point() { + var p = target.parentNode, + t = d3.event.changedTouches; + return t ? d3.touches(p, t)[0] : d3.mouse(p); + } + + function dragmove() { + if (!target.parentNode) return dragend(); // target removed from DOM + + var p = point(), + dx = p[0] - origin_[0], + dy = p[1] - origin_[1]; + + moved |= dx | dy; + origin_ = p; + d3_eventCancel(); + + event_({type: "drag", x: p[0] + offset[0], y: p[1] + offset[1], dx: dx, dy: dy}); + } + + function dragend() { + event_({type: "dragend"}); + + // if moved, prevent the mouseup (and possibly click) from propagating + if (moved) { + d3_eventCancel(); + if (d3.event.target === eventTarget) w.on("click.drag", click, true); + } + + w .on("mousemove.drag", null) + .on("touchmove.drag", null) + .on("mouseup.drag", null) + .on("touchend.drag", null); + } + + // prevent the subsequent click from propagating (e.g., for anchors) + function click() { + d3_eventCancel(); + w.on("click.drag", null); + } + } + + drag.origin = function(x) { + if (!arguments.length) return origin; + origin = x; + return drag; + }; + + return d3.rebind(drag, event, "on"); +}; +d3.behavior.zoom = function() { + var translate = [0, 0], + translate0, // translate when we started zooming (to avoid drift) + scale = 1, + scale0, // scale when we started touching + scaleExtent = d3_behavior_zoomInfinity, + event = d3_eventDispatch(zoom, "zoom"), + x0, + x1, + y0, + y1, + touchtime; // time of last touchstart (to detect double-tap) + + function zoom() { + this + .on("mousedown.zoom", mousedown) + .on("mousewheel.zoom", mousewheel) + .on("mousemove.zoom", mousemove) + .on("DOMMouseScroll.zoom", mousewheel) + .on("dblclick.zoom", dblclick) + .on("touchstart.zoom", touchstart) + .on("touchmove.zoom", touchmove) + .on("touchend.zoom", touchstart); + } + + zoom.translate = function(x) { + if (!arguments.length) return translate; + translate = x.map(Number); + return zoom; + }; + + zoom.scale = function(x) { + if (!arguments.length) return scale; + scale = +x; + return zoom; + }; + + zoom.scaleExtent = function(x) { + if (!arguments.length) return scaleExtent; + scaleExtent = x == null ? d3_behavior_zoomInfinity : x.map(Number); + return zoom; + }; + + zoom.x = function(z) { + if (!arguments.length) return x1; + x1 = z; + x0 = z.copy(); + return zoom; + }; + + zoom.y = function(z) { + if (!arguments.length) return y1; + y1 = z; + y0 = z.copy(); + return zoom; + }; + + function location(p) { + return [(p[0] - translate[0]) / scale, (p[1] - translate[1]) / scale]; + } + + function point(l) { + return [l[0] * scale + translate[0], l[1] * scale + translate[1]]; + } + + function scaleTo(s) { + scale = Math.max(scaleExtent[0], Math.min(scaleExtent[1], s)); + } + + function translateTo(p, l) { + l = point(l); + translate[0] += p[0] - l[0]; + translate[1] += p[1] - l[1]; + } + + function dispatch(event) { + if (x1) x1.domain(x0.range().map(function(x) { return (x - translate[0]) / scale; }).map(x0.invert)); + if (y1) y1.domain(y0.range().map(function(y) { return (y - translate[1]) / scale; }).map(y0.invert)); + d3.event.preventDefault(); + event({type: "zoom", scale: scale, translate: translate}); + } + + function mousedown() { + var target = this, + event_ = event.of(target, arguments), + eventTarget = d3.event.target, + moved = 0, + w = d3.select(window).on("mousemove.zoom", mousemove).on("mouseup.zoom", mouseup), + l = location(d3.mouse(target)); + + window.focus(); + d3_eventCancel(); + + function mousemove() { + moved = 1; + translateTo(d3.mouse(target), l); + dispatch(event_); + } + + function mouseup() { + if (moved) d3_eventCancel(); + w.on("mousemove.zoom", null).on("mouseup.zoom", null); + if (moved && d3.event.target === eventTarget) w.on("click.zoom", click); + } + + function click() { + d3_eventCancel(); + w.on("click.zoom", null); + } + } + + function mousewheel() { + if (!translate0) translate0 = location(d3.mouse(this)); + scaleTo(Math.pow(2, d3_behavior_zoomDelta() * .002) * scale); + translateTo(d3.mouse(this), translate0); + dispatch(event.of(this, arguments)); + } + + function mousemove() { + translate0 = null; + } + + function dblclick() { + var p = d3.mouse(this), l = location(p); + scaleTo(d3.event.shiftKey ? scale / 2 : scale * 2); + translateTo(p, l); + dispatch(event.of(this, arguments)); + } + + function touchstart() { + var touches = d3.touches(this), + now = Date.now(); + + scale0 = scale; + translate0 = {}; + touches.forEach(function(t) { translate0[t.identifier] = location(t); }); + d3_eventCancel(); + + if ((touches.length === 1) && (now - touchtime < 500)) { // dbltap + var p = touches[0], l = location(touches[0]); + scaleTo(scale * 2); + translateTo(p, l); + dispatch(event.of(this, arguments)); + } + touchtime = now; + } + + function touchmove() { + var touches = d3.touches(this), + p0 = touches[0], + l0 = translate0[p0.identifier]; + if (p1 = touches[1]) { + var p1, l1 = translate0[p1.identifier]; + p0 = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2]; + l0 = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2]; + scaleTo(d3.event.scale * scale0); + } + translateTo(p0, l0); + dispatch(event.of(this, arguments)); + } + + return d3.rebind(zoom, event, "on"); +}; + +var d3_behavior_zoomDiv, // for interpreting mousewheel events + d3_behavior_zoomInfinity = [0, Infinity]; // default scale extent + +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; +} +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("start", "tick", "end"), + 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; + }; + } + + force.tick = function() { + // simulated annealing, basically + if ((alpha *= .99) < .005) { + event.end({type: "end", alpha: alpha = 0}); + 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.alpha = function(x) { + if (!arguments.length) return alpha; + + if (alpha) { // if we're already running + if (x > 0) alpha = x; // we might keep it hot + else alpha = 0; // or, next tick will dispatch "end" + } else if (x > 0) { // otherwise, fire it up! + event.start({type: "start", alpha: alpha = x}); + d3.timer(force.tick); + } + + 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() { + return force.alpha(.1); + }; + + force.stop = function() { + return force.alpha(0); + }; + + // 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_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_stackOrderDefault, + offset = d3_layout_stackOffsetZero, + 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.get(x) || d3_layout_stackOrderDefault; + return stack; + }; + + stack.offset = function(x) { + if (!arguments.length) return offset; + offset = typeof x === "function" ? x : d3_layout_stackOffsets.get(x) || d3_layout_stackOffsetZero; + 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 = d3.map({ + + "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": d3_layout_stackOrderDefault + +}); + +var d3_layout_stackOffsets = d3.map({ + + "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": d3_layout_stackOffsetZero + +}); + +function d3_layout_stackOrderDefault(data) { + return d3.range(data.length); +} + +function d3_layout_stackOffsetZero(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}; +} +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; +} +d3.geo = {}; + +var d3_geo_radians = Math.PI / 180; +// TODO clip input coordinates on opposite hemisphere +d3.geo.azimuthal = function() { + var mode = "orthographic", // or stereographic, gnomonic, equidistant or equalarea + origin, + scale = 200, + translate = [480, 250], + x0, + y0, + cy0, + sy0; + + function azimuthal(coordinates) { + var x1 = coordinates[0] * d3_geo_radians - x0, + y1 = coordinates[1] * d3_geo_radians, + cx1 = Math.cos(x1), + sx1 = Math.sin(x1), + cy1 = Math.cos(y1), + sy1 = Math.sin(y1), + cc = mode !== "orthographic" ? sy0 * sy1 + cy0 * cy1 * cx1 : null, + c, + k = mode === "stereographic" ? 1 / (1 + cc) + : mode === "gnomonic" ? 1 / cc + : mode === "equidistant" ? (c = Math.acos(cc), c ? c / Math.sin(c) : 0) + : mode === "equalarea" ? Math.sqrt(2 / (1 + cc)) + : 1, + x = k * cy1 * sx1, + y = k * (sy0 * cy1 * cx1 - cy0 * sy1); + return [ + scale * x + translate[0], + scale * y + translate[1] + ]; + } + + azimuthal.invert = function(coordinates) { + var x = (coordinates[0] - translate[0]) / scale, + y = (coordinates[1] - translate[1]) / scale, + p = Math.sqrt(x * x + y * y), + c = mode === "stereographic" ? 2 * Math.atan(p) + : mode === "gnomonic" ? Math.atan(p) + : mode === "equidistant" ? p + : mode === "equalarea" ? 2 * Math.asin(.5 * p) + : Math.asin(p), + sc = Math.sin(c), + cc = Math.cos(c); + return [ + (x0 + Math.atan2(x * sc, p * cy0 * cc + y * sy0 * sc)) / d3_geo_radians, + Math.asin(cc * sy0 - (p ? (y * sc * cy0) / p : 0)) / d3_geo_radians + ]; + }; + + azimuthal.mode = function(x) { + if (!arguments.length) return mode; + mode = x + ""; + return azimuthal; + }; + + azimuthal.origin = function(x) { + if (!arguments.length) return origin; + origin = x; + x0 = origin[0] * d3_geo_radians; + y0 = origin[1] * d3_geo_radians; + cy0 = Math.cos(y0); + sy0 = Math.sin(y0); + return azimuthal; + }; + + azimuthal.scale = function(x) { + if (!arguments.length) return scale; + scale = +x; + return azimuthal; + }; + + azimuthal.translate = function(x) { + if (!arguments.length) return translate; + translate = [+x[0], +x[1]]; + return azimuthal; + }; + + return azimuthal.origin([0, 0]); +}; +// Derived from Tom Carden's Albers implementation for Protovis. +// http://gist.github.com/476238 +// http://mathworld.wolfram.com/AlbersEqual-AreaConicProjection.html + +d3.geo.albers = function() { + var origin = [-98, 38], + parallels = [29.5, 45.5], + scale = 1000, + translate = [480, 250], + lng0, // d3_geo_radians * origin[0] + n, + C, + p0; + + function albers(coordinates) { + var t = n * (d3_geo_radians * coordinates[0] - lng0), + p = Math.sqrt(C - 2 * n * Math.sin(d3_geo_radians * coordinates[1])) / n; + return [ + scale * p * Math.sin(t) + translate[0], + scale * (p * Math.cos(t) - p0) + translate[1] + ]; + } + + albers.invert = function(coordinates) { + var x = (coordinates[0] - translate[0]) / scale, + y = (coordinates[1] - translate[1]) / scale, + p0y = p0 + y, + t = Math.atan2(x, p0y), + p = Math.sqrt(x * x + p0y * p0y); + return [ + (lng0 + t / n) / d3_geo_radians, + Math.asin((C - p * p * n * n) / (2 * n)) / d3_geo_radians + ]; + }; + + function reload() { + var phi1 = d3_geo_radians * parallels[0], + phi2 = d3_geo_radians * parallels[1], + lat0 = d3_geo_radians * origin[1], + s = Math.sin(phi1), + c = Math.cos(phi1); + lng0 = d3_geo_radians * origin[0]; + n = .5 * (s + Math.sin(phi2)); + C = c * c + 2 * n * s; + p0 = Math.sqrt(C - 2 * n * Math.sin(lat0)) / n; + return albers; + } + + albers.origin = function(x) { + if (!arguments.length) return origin; + origin = [+x[0], +x[1]]; + return reload(); + }; + + albers.parallels = function(x) { + if (!arguments.length) return parallels; + parallels = [+x[0], +x[1]]; + return reload(); + }; + + albers.scale = function(x) { + if (!arguments.length) return scale; + scale = +x; + return albers; + }; + + albers.translate = function(x) { + if (!arguments.length) return translate; + translate = [+x[0], +x[1]]; + return albers; + }; + + return reload(); +}; + +// A composite projection for the United States, 960x500. The set of standard +// parallels for each region comes from USGS, which is published here: +// http://egsc.usgs.gov/isb/pubs/MapProjections/projections.html#albers +// TODO allow the composite projection to be rescaled? +d3.geo.albersUsa = function() { + var lower48 = d3.geo.albers(); + + var alaska = d3.geo.albers() + .origin([-160, 60]) + .parallels([55, 65]); + + var hawaii = d3.geo.albers() + .origin([-160, 20]) + .parallels([8, 18]); + + var puertoRico = d3.geo.albers() + .origin([-60, 10]) + .parallels([8, 18]); + + function albersUsa(coordinates) { + var lon = coordinates[0], + lat = coordinates[1]; + return (lat > 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 && types.hasOwnProperty(object.type) ? 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 (d3_geo_boundsTypes.hasOwnProperty(o.type)) 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; +d3.geom = {}; +/** + * Computes a contour for a given input grid function using the 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] + }; +} +d3.time = {}; + +var d3_time = Date; + +function d3_time_utc() { + this._ = new Date(arguments.length > 1 + ? Date.UTC.apply(this, arguments) + : arguments[0]); +} + +d3_time_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(); }, + getTime: function() { return this._.getTime(); }, + getTimezoneOffset: function() { return 0; }, + valueOf: function() { return this._.valueOf(); }, + setDate: function() { d3_time_prototype.setUTCDate.apply(this._, arguments); }, + setDay: function() { d3_time_prototype.setUTCDay.apply(this._, arguments); }, + setFullYear: function() { d3_time_prototype.setUTCFullYear.apply(this._, arguments); }, + setHours: function() { d3_time_prototype.setUTCHours.apply(this._, arguments); }, + setMilliseconds: function() { d3_time_prototype.setUTCMilliseconds.apply(this._, arguments); }, + setMinutes: function() { d3_time_prototype.setUTCMinutes.apply(this._, arguments); }, + setMonth: function() { d3_time_prototype.setUTCMonth.apply(this._, arguments); }, + setSeconds: function() { d3_time_prototype.setUTCSeconds.apply(this._, arguments); }, + setTime: function() { d3_time_prototype.setTime.apply(this._, arguments); } +}; + +var d3_time_prototype = Date.prototype; +d3.time.format = function(template) { + var n = template.length; + + function format(date) { + var string = [], + i = -1, + j = 0, + c, + f; + while (++i < n) { + if (template.charCodeAt(i) == 37) { + string.push( + template.substring(j, i), + (f = d3_time_formats[c = template.charAt(++i)]) + ? f(date) : c); + j = i + 1; + } + } + string.push(template.substring(j, i)); + return string.join(""); + } + + format.parse = function(string) { + var d = {y: 1900, m: 0, d: 1, H: 0, M: 0, S: 0, L: 0}, + i = d3_time_parse(d, template, string, 0); + if (i != string.length) return null; + + // The am-pm flag is 0 for AM, and 1 for PM. + if ("p" in d) d.H = d.H % 12 + d.p * 12; + + var date = new d3_time(); + date.setFullYear(d.y, d.m, d.d); + date.setHours(d.H, d.M, d.S, d.L); + return date; + }; + + format.toString = function() { + return template; + }; + + return format; +}; + +function d3_time_parse(date, template, string, j) { + var c, + p, + i = 0, + n = template.length, + m = string.length; + while (i < n) { + if (j >= 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: function(d) { return d3_time_zfill3(1 + d3.time.dayOfYear(d)); }, + 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: function(d) { return d3_time_zfill2(d3.time.sundayOfYear(d)); }, + w: function(d) { return d.getDay(); }, + W: function(d) { return d3_time_zfill2(d3.time.mondayOfYear(d)); }, + 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_parseHour24, + // 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 d3_time_weekdayAbbrevRe.test(string.substring(i, i += 3)) ? i : -1; +} + +// 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_weekdayAbbrevRe = /^(?:sun|mon|tue|wed|thu|fri|sat)/i, + d3_time_weekdayRe = /^(?:Sunday|Monday|Tuesday|Wednesday|Thursday|Friday|Saturday)/i; + d3_time_weekdays = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]; + +function d3_time_parseMonthAbbrev(date, string, i) { + var n = d3_time_monthAbbrevLookup.get(string.substring(i, i += 3).toLowerCase()); + return n == null ? -1 : (date.m = n, i); +} + +var d3_time_monthAbbrevLookup = d3.map({ + 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.m = d3_time_monthLookup.get(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 = d3.map({ + 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.y = +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.y = 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.m = 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.d = +n[0], i += n[0].length) : -1; +} + +// Note: we don't validate that the hour is in the range [0,23] or [1,12]. +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.H = +n[0], i += n[0].length) : -1; +} + +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.M = +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.S = +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.L = +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.get(string.substring(i, i += 2).toLowerCase()); + return n == null ? -1 : (date.p = n, i); +} + +var d3_time_amPmLookup = d3.map({ + am: 0, + pm: 1 +}); + +// 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_utc; + var utc = new d3_time(); + utc._ = date; + return local(utc); + } finally { + d3_time = Date; + } + } + + format.parse = function(string) { + try { + d3_time = d3_time_utc; + var date = local.parse(string); + return date && date._; + } finally { + d3_time = Date; + } + }; + + format.toString = local.toString; + + return format; +}; +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_interval(local, step, number) { + + function round(date) { + var d0 = local(date), d1 = offset(d0, 1); + return date - d0 < d1 - date ? d0 : d1; + } + + function ceil(date) { + step(date = local(new d3_time(date - 1)), 1); + return date; + } + + function offset(date, k) { + step(date = new d3_time(+date), k); + return date; + } + + function range(t0, t1, dt) { + var time = ceil(t0), times = []; + if (dt > 1) { + while (time < t1) { + if (!(number(time) % dt)) times.push(new Date(+time)); + step(time, 1); + } + } else { + while (time < t1) times.push(new Date(+time)), step(time, 1); + } + return times; + } + + function range_utc(t0, t1, dt) { + try { + d3_time = d3_time_utc; + var utc = new d3_time_utc(); + utc._ = t0; + return range(utc, t1, dt); + } finally { + d3_time = Date; + } + } + + local.floor = local; + local.round = round; + local.ceil = ceil; + local.offset = offset; + local.range = range; + + var utc = local.utc = d3_time_interval_utc(local); + utc.floor = utc; + utc.round = d3_time_interval_utc(round); + utc.ceil = d3_time_interval_utc(ceil); + utc.offset = d3_time_interval_utc(offset); + utc.range = range_utc; + + return local; +} + +function d3_time_interval_utc(method) { + return function(date, k) { + try { + d3_time = d3_time_utc; + var utc = new d3_time_utc(); + utc._ = date; + return method(utc, k)._; + } finally { + d3_time = Date; + } + }; +} +d3.time.second = d3_time_interval(function(date) { + return new d3_time(Math.floor(date / 1e3) * 1e3); +}, function(date, offset) { + date.setTime(date.getTime() + Math.floor(offset) * 1e3); // DST breaks setSeconds +}, function(date) { + return date.getSeconds(); +}); + +d3.time.seconds = d3.time.second.range; +d3.time.seconds.utc = d3.time.second.utc.range; +d3.time.minute = d3_time_interval(function(date) { + return new d3_time(Math.floor(date / 6e4) * 6e4); +}, function(date, offset) { + date.setTime(date.getTime() + Math.floor(offset) * 6e4); // DST breaks setMinutes +}, function(date) { + return date.getMinutes(); +}); + +d3.time.minutes = d3.time.minute.range; +d3.time.minutes.utc = d3.time.minute.utc.range; +d3.time.hour = d3_time_interval(function(date) { + var timezone = date.getTimezoneOffset() / 60; + return new d3_time((Math.floor(date / 36e5 - timezone) + timezone) * 36e5); +}, function(date, offset) { + date.setTime(date.getTime() + Math.floor(offset) * 36e5); // DST breaks setHours +}, function(date) { + return date.getHours(); +}); + +d3.time.hours = d3.time.hour.range; +d3.time.hours.utc = d3.time.hour.utc.range; +d3.time.day = d3_time_interval(function(date) { + return new d3_time(date.getFullYear(), date.getMonth(), date.getDate()); +}, function(date, offset) { + date.setDate(date.getDate() + offset); +}, function(date) { + return date.getDate() - 1; +}); + +d3.time.days = d3.time.day.range; +d3.time.days.utc = d3.time.day.utc.range; + +d3.time.dayOfYear = function(date) { + var year = d3.time.year(date); + return Math.floor((date - year) / 864e5 - (date.getTimezoneOffset() - year.getTimezoneOffset()) / 1440); +}; +d3_time_weekdays.forEach(function(day, i) { + day = day.toLowerCase(); + i = 7 - i; + + var interval = d3.time[day] = d3_time_interval(function(date) { + (date = d3.time.day(date)).setDate(date.getDate() - (date.getDay() + i) % 7); + return date; + }, function(date, offset) { + date.setDate(date.getDate() + Math.floor(offset) * 7); + }, function(date) { + var day = d3.time.year(date).getDay(); + return Math.floor((d3.time.dayOfYear(date) + (day + i) % 7) / 7) - (day !== i); + }); + + d3.time[day + "s"] = interval.range; + d3.time[day + "s"].utc = interval.utc.range; + + d3.time[day + "OfYear"] = function(date) { + var day = d3.time.year(date).getDay(); + return Math.floor((d3.time.dayOfYear(date) + (day + i) % 7) / 7); + }; +}); + +d3.time.week = d3.time.sunday; +d3.time.weeks = d3.time.sunday.range; +d3.time.weeks.utc = d3.time.sunday.utc.range; +d3.time.weekOfYear = d3.time.sundayOfYear; +d3.time.month = d3_time_interval(function(date) { + return new d3_time(date.getFullYear(), date.getMonth(), 1); +}, function(date, offset) { + date.setMonth(date.getMonth() + offset); +}, function(date) { + return date.getMonth(); +}); + +d3.time.months = d3.time.month.range; +d3.time.months.utc = d3.time.month.utc.range; +d3.time.year = d3_time_interval(function(date) { + return new d3_time(date.getFullYear(), 0, 1); +}, function(date, offset) { + date.setFullYear(date.getFullYear() + offset); +}, function(date) { + return date.getFullYear(); +}); + +d3.time.years = d3.time.year.range; +d3.time.years.utc = d3.time.year.utc.range; +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.nice = function(m) { + var extent = d3_time_scaleExtent(scale.domain()); + return scale.domain([m.floor(extent[0]), m.ceil(extent[1])]); + }; + + 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].range; + } + 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.second, 1], + [d3.time.second, 5], + [d3.time.second, 15], + [d3.time.second, 30], + [d3.time.minute, 1], + [d3.time.minute, 5], + [d3.time.minute, 15], + [d3.time.minute, 30], + [d3.time.hour, 1], + [d3.time.hour, 3], + [d3.time.hour, 6], + [d3.time.hour, 12], + [d3.time.day, 1], + [d3.time.day, 2], + [d3.time.week, 1], + [d3.time.month, 1], + [d3.time.month, 3], + [d3.time.year, 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_scaleLocalMethods.map(function(m) { + return [m[0].utc, m[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.8.1/d3.v2.min.js b/static/vendor/d3-2.8.1/d3.v2.min.js new file mode 100755 index 0000000..dddd929 --- /dev/null +++ b/static/vendor/d3-2.8.1/d3.v2.min.js @@ -0,0 +1,4 @@ +(function(){function e(a,b){try{for(var c in b)Object.defineProperty(a.prototype,c,{value:b[c],enumerable:!1})}catch(d){a.prototype=b}}function g(a){var b=-1,c=a.length,d=[];while(++b=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 F(a,b){return{scale:Math.pow(10,(8-b)*3),symbol:a}}function L(a){return function(b){return b<=0?0:b>=1?1:a(b)}}function M(a){return function(b){return 1-a(1-b)}}function N(a){return function(b){return.5*(b<.5?a(2*b):2-a(2-2*b))}}function O(a){return a}function P(a){return function(b){return Math.pow(b,a)}}function Q(a){return 1-Math.cos(a*Math.PI/2)}function R(a){return Math.pow(2,10*(a-1))}function S(a){return 1-Math.sqrt(1-a*a)}function T(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 U(a){return a||(a=1.70158),function(b){return b*b*((a+1)*b-a)}}function V(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 W(){d3.event.stopPropagation(),d3.event.preventDefault()}function X(){var a=d3.event,b;while(b=a.sourceEvent)a=b;return a}function Y(a){var b=new x,c=0,d=arguments.length;while(++c360?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,bb(g(a+120),g(a),g(a-120))}function bl(a){return j(a,br),a}function bs(a){return function(){return bm(a,this)}}function bt(a){return function(){return bn(a,this)}}function bv(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=t(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=t(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 bw(a){return{__data__:a}}function bx(a){return function(){return bq(this,a)}}function by(a){return arguments.length||(a=d3.ascending),function(b,c){return a(b&&b.__data__,c&&c.__data__)}}function bA(a){return j(a,bB),a}function bC(a,b,c){j(a,bG);var d=new k,e=d3.dispatch("start","end"),f=bO;return a.id=b,a.time=c,a.tween=function(b,c){return arguments.length<2?d.get(b):(c==null?d.remove(b):d.set(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?bP.call(a,b):(e.on(b,c),a)},d3.timer(function(g){return a.each(function(h,i,j){function p(a){return o.active>b?r():(o.active=b,d.forEach(function(a,b){(tween=b.call(l,h,i))&&k.push(tween)}),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(),bI=b,e.end.call(l,h,i),bI=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 bE(a,b,c){return c!=""&&bD}function bF(a,b){function d(a,d,e){var f=b.call(this,a,d);return f==null?e!=""&&bD:e!=f&&c(e,f)}function e(a,d,e){return e!=b&&c(e,b)}var c=$(a);return typeof b=="function"?d:b==null?bE:(b+="",e)}function bP(a){var b=bI,c=bO,d=bM,e=bN;bI=this.id,bO=this.ease();for(var f=0,g=this.length;f=c.delay&&(c.flush=c.callback(a)),c=c.next;var d=bU()-b;d>24?(isFinite(d)&&(clearTimeout(bS),bS=setTimeout(bT,d)),bR=0):(bR=1,bV(bT))}function bU(){var a=null,b=bQ,c=Infinity;while(b)b.flush?b=a?a.next=b.next:bQ=b.next:(c=Math.min(c,b.then+b.delay),b=(a=b).next);return c}function bW(a){var b=[a.a,a.b],c=[a.c,a.d],d=bY(b),e=bX(b,c),f=bY(bZ(c,b,-e))||0;b[0]*c[1]2?cn:cm,i=d?ba:_;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 ck(a,b)},h.tickFormat=function(b){return cl(a,b)},h.nice=function(){return ce(a,ci),g()},h.copy=function(){return cg(a,b,c,d)},g()}function ch(a,b){return d3.rebind(a,b,"range","rangeRound","interpolate","clamp")}function ci(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 cj(a,b){var c=cc(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 ck(a,b){return d3.range.apply(d3,cj(a,b))}function cl(a,b){return d3.format(",."+Math.max(0,-Math.floor(Math.log(cj(a,b)[2])/Math.LN10+.01))+"f")}function cm(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 cn(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=cp);if(arguments.length<1)return e;var f=a/d.ticks().length,g=b===cr?(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 cs(a,b){function e(b){return a(c(b))}var c=ct(b),d=ct(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 ck(e.domain(),a)},e.tickFormat=function(a){return cl(e.domain(),a)},e.nice=function(){return e.domain(ce(e.domain(),ci))},e.exponent=function(a){if(!arguments.length)return b;var f=e.domain();return c=ct(b=a),d=ct(1/b),e.domain(f)},e.copy=function(){return cs(a.copy(),b)},ch(e,a)}function ct(a){return function(b){return b<0?-Math.pow(-b,a):Math.pow(b,a)}}function cu(a,b){function f(b){return d[((c.get(b)||c.set(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=new k;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 dg(a){return a.length<3?cO(a):a[0]+cU(a,df(a))}function dh(a){var b,c=-1,d=a.length,e,f;while(++c1){var d=cc(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;++id&&(c=b,d=e);return c}function ea(a){return a.reduce(eb,0)}function eb(a,b){return a+b[1]}function ec(a,b){return ed(a,Math.ceil(Math.log(b.length)/Math.LN2+1))}function ed(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 ee(a){return[d3.min(a),d3.max(a)]}function ef(a,b){return d3.rebind(a,b,"sort","children","value"),a.links=ej,a.nodes=function(b){return ek=!0,(a.nodes=a)(b)},a}function eg(a){return a.children}function eh(a){return a.value}function ei(a,b){return b.value-a.value}function ej(a){return d3.merge(a.map(function(a){return(a.children||[]).map(function(b){return{source:a,target:b}})}))}function el(a,b){return a.value-b.value}function em(a,b){var c=a._pack_next;a._pack_next=b,b._pack_prev=a,b._pack_next=c,c._pack_prev=b}function en(a,b){a._pack_next=b,b._pack_prev=a}function eo(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 ep(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(eq),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],eu(g,h,i),l(i),em(g,i),g._pack_prev=i,em(i,h),h=g._pack_next;for(var m=3;m0&&(a=d)}return a}function eD(a,b){return a.x-b.x}function eE(a,b){return b.x-a.x}function eF(a,b){return a.depth-b.depth}function eG(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 eI(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 eJ(a,b,c){return a._tree.ancestor.parent==b.parent?a._tree.ancestor:c}function eK(a){return{x:a.x,y:a.y,dx:a.dx,dy:a.dy}}function eL(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}}function eM(a){return a.map(eN).join(",")}function eN(a){return/[",\n]/.test(a)?'"'+a.replace(/\"/g,'""')+'"':a}function eP(a,b){return function(c){return c&&a.hasOwnProperty(c.type)?a[c.type](c):b}}function eQ(a){return"m0,"+a+"a"+a+","+a+" 0 1,1 0,"+ -2*a+"a"+a+","+a+" 0 1,1 0,"+2*a+"z"}function eR(a,b){eS.hasOwnProperty(a.type)&&eS[a.type](a,b)}function eT(a,b){eR(a.geometry,b)}function eU(a,b){for(var c=a.features,d=0,e=c.length;d0}function fg(a,b,c){return(c[0]-b[0])*(a[1]-b[1])<(c[1]-b[1])*(a[0]-b[0])}function fh(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 fj(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[fi[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[fi[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;bo.y&&(p=n,n=o,o=p,t="r"),s=e.bisect(n,o),m=d.createHalfEdge(s,t),d.insert(k,m),e.endPoint(s,fi[t],r),q=e.intersect(k,m),q&&(f.del(k),f.insert(k,q,e.distance(q,n))),q=e.intersect(m,l),q&&f.insert(m,q,e.distance(q,n));else break}for(i=d.right(d.leftEnd);i!=d.rightEnd;i=d.right(i))b(i.edge)}function fk(){return{leaf:!0,nodes:[],point:null}}function fl(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]&&fl(a,i[0],c,d,g,h),i[1]&&fl(a,i[1],g,d,e,h),i[2]&&fl(a,i[2],c,h,g,f),i[3]&&fl(a,i[3],g,h,e,f)}}function fm(a){return{x:a[0],y:a[1]}}function fo(){this._=new Date(arguments.length>1?Date.UTC.apply(this,arguments):arguments[0])}function fq(a,b,c,d){var e,f,g=0,h=b.length,i=c.length;while(g=i)return-1;e=b.charCodeAt(g++);if(e==37){f=fw[b.charAt(g++)];if(!f||(d=f(a,c,d))<0)return-1}else if(e!=c.charCodeAt(d++))return-1}return d}function fx(a,b,c){return fz.test(b.substring(c,c+=3))?c:-1}function fy(a,b,c){fA.lastIndex=0;var d=fA.exec(b.substring(c,c+10));return d?c+=d[0].length:-1}function fB(a,b,c){var d=fC.get(b.substring(c,c+=3).toLowerCase());return d==null?-1:(a.m=d,c)}function fD(a,b,c){fE.lastIndex=0;var d=fE.exec(b.substring(c,c+12));return d?(a.m=fF.get(d[0].toLowerCase()),c+=d[0].length):-1}function fH(a,b,c){return fq(a,fv.c.toString(),b,c)}function fI(a,b,c){return fq(a,fv.x.toString(),b,c)}function fJ(a,b,c){return fq(a,fv.X.toString(),b,c)}function fK(a,b,c){fT.lastIndex=0;var d=fT.exec(b.substring(c,c+4));return d?(a.y=+d[0],c+=d[0].length):-1}function fL(a,b,c){fT.lastIndex=0;var d=fT.exec(b.substring(c,c+2));return d?(a.y=fM()+ +d[0],c+=d[0].length):-1}function fM(){return~~((new Date).getFullYear()/1e3)*1e3}function fN(a,b,c){fT.lastIndex=0;var d=fT.exec(b.substring(c,c+2));return d?(a.m=d[0]-1,c+=d[0].length):-1}function fO(a,b,c){fT.lastIndex=0;var d=fT.exec(b.substring(c,c+2));return d?(a.d=+d[0],c+=d[0].length):-1}function fP(a,b,c){fT.lastIndex=0;var d=fT.exec(b.substring(c,c+2));return d?(a.H=+d[0],c+=d[0].length):-1}function fQ(a,b,c){fT.lastIndex=0;var d=fT.exec(b.substring(c,c+2));return d?(a.M=+d[0],c+=d[0].length):-1}function fR(a,b,c){fT.lastIndex=0;var d=fT.exec(b.substring(c,c+2));return d?(a.S=+d[0],c+=d[0].length):-1}function fS(a,b,c){fT.lastIndex=0;var d=fT.exec(b.substring(c,c+3));return d?(a.L=+d[0],c+=d[0].length):-1}function fU(a,b,c){var d=fV.get(b.substring(c,c+=2).toLowerCase());return d==null?-1:(a.p=d,c)}function fW(a){var b=a.getTimezoneOffset(),c=b>0?"-":"+",d=~~(Math.abs(b)/60),e=Math.abs(b)%60;return c+fr(d)+fr(e)}function fY(a){return a.toISOString()}function fZ(a,b,c){function d(b){var c=a(b),d=f(c,1);return b-c1)while(gb?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(p),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.call(b,b[f],f)>1;c0&&(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++],l,m,n=new k,o,p={};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&&(c=a.substring(0,b),a=a.substring(b+1)),w.hasOwnProperty(c)?{space:w[c],local:a}:a}},d3.dispatch=function(){var a=new x,b=-1,c=arguments.length;while(++b0&&(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=z.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=A.get(i)||C,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%])?/,A=d3.map({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=B(a,b)).toFixed(Math.max(0,Math.min(20,b)))}}),E=["y","z","a","f","p","n","μ","m","","k","M","G","T","P","E","Z","Y"].map(F);d3.formatPrefix=function(a,b){var c=0;return a&&(a<0&&(a*=-1),b&&(a=d3.round(a,B(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))),E[8+c/3]};var G=P(2),H=P(3),I=function(){return O},J=d3.map({linear:I,poly:P,quad:function(){return G},cubic:function(){return H},sin:function(){return Q},exp:function(){return R},circle:function(){return S},elastic:T,back:U,bounce:function(){return V}}),K=d3.map({"in":O,out:M,"in-out":N,"out-in":function(a){return N(M(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 c=J.get(c)||I,d=K.get(d)||O,L(d(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;Z.lastIndex=0;for(d=0;c=Z.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=Z.lastIndex;f1){while(++e=0;)if(f=c[d])e&&e!==f.nextSibling&&e.parentNode.insertBefore(f,e),e=f;return this},br.sort=function(a){a=by.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 i(a){var c=d3.event;d3.event=a;try{b.call(g,g.__data__,f)}finally{d3.event=c}}var g=this,h=g[d];h&&(g.removeEventListener(a,h,h.$),delete g[d]),b&&(g.addEventListener(a,g[d]=i,i.$=c),i._=b)})},br.each=function(a){for(var b=-1,c=this.length;++b=cD?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=cE,b=cF,c=cG,d=cH;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+cC;return[Math.cos(f)*e,Math.sin(f)*e]},e};var cC=-Math.PI/2,cD=2*Math.PI-1e-6;d3.svg.line=function(){return cI(Object)};var cM="linear",cN=d3.map({linear:cO,"step-before":cP,"step-after":cQ,basis:cW,"basis-open":cX,"basis-closed":cY,bundle:cZ,cardinal:cT,"cardinal-open":cR,"cardinal-closed":cS,monotone:dg}),c_=[0,2/3,1/3,0],da=[0,1/3,2/3,0],db=[0,1/6,2/3,1/6];d3.svg.line.radial=function(){var a=cI(dh);return a.radius=a.x,delete a.x,a.angle=a.y,delete a.y,a},cP.reverse=cQ,cQ.reverse=cP,d3.svg.area=function(){return di(Object)},d3.svg.area.radial=function(){var a=di(dh);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)+cC,k=e.call(a,h,g)+cC;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=dl,b=dm,c=dn,d=cG,e=cH;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=dl,b=dm,c=dr;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=dr,c=a.projection;return a.projection=function(a){return arguments.length?c(ds(b=a)):b},a},d3.svg.mouse=d3.mouse,d3.svg.touches=d3.touches,d3.svg.symbol=function(){function c(c,d){return(dw.get(a.call(this,c,d))||dv)(b.call(this,c,d))}var a=du,b=dt;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 dw=d3.map({circle +:dv,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*dy)),c=b*dy;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/dx),c=b*dx/2;return"M0,"+c+"L"+b+","+ -c+" "+ -b+","+ -c+"Z"},"triangle-up":function(a){var b=Math.sqrt(a/dx),c=b*dx/2;return"M0,"+ -c+"L"+b+","+c+" "+ -b+","+c+"Z"}});d3.svg.symbolTypes=dw.keys();var dx=Math.sqrt(3),dy=Math.tan(30*Math.PI/180);d3.svg.axis=function(){function k(k){k.each(function(){var k=d3.select(this),l=h==null?a.ticks?a.ticks.apply(a,g):a.domain():h,m=i==null?a.tickFormat?a.tickFormat.apply(a,g):String:i,n=dB(a,l,j),o=k.selectAll(".minor").data(n,String),p=o.enter().insert("line","g").attr("class","tick minor").style("opacity",1e-6),q=d3.transition(o.exit()).style("opacity",1e-6).remove(),r=d3.transition(o).style("opacity",1),s=k.selectAll("g").data(l,String),t=s.enter().insert("g","path").style("opacity",1e-6),u=d3.transition(s.exit()).style("opacity",1e-6).remove(),v=d3.transition(s).style("opacity",1),w,x=cd(a),y=k.selectAll(".domain").data([0]),z=y.enter().append("path").attr("class","domain"),A=d3.transition(y),B=a.copy(),C=this.__chart__||B;this.__chart__=B,t.append("line").attr("class","tick"),t.append("text"),v.select("text").text(m);switch(b){case"bottom":w=dz,p.attr("y2",d),r.attr("x2",0).attr("y2",d),t.select("line").attr("y2",c),t.select("text").attr("y",Math.max(c,0)+f),v.select("line").attr("x2",0).attr("y2",c),v.select("text").attr("x",0).attr("y",Math.max(c,0)+f).attr("dy",".71em").attr("text-anchor","middle"),A.attr("d","M"+x[0]+","+e+"V0H"+x[1]+"V"+e);break;case"top":w=dz,p.attr("y2",-d),r.attr("x2",0).attr("y2",-d),t.select("line").attr("y2",-c),t.select("text").attr("y",-(Math.max(c,0)+f)),v.select("line").attr("x2",0).attr("y2",-c),v.select("text").attr("x",0).attr("y",-(Math.max(c,0)+f)).attr("dy","0em").attr("text-anchor","middle"),A.attr("d","M"+x[0]+","+ -e+"V0H"+x[1]+"V"+ -e);break;case"left":w=dA,p.attr("x2",-d),r.attr("x2",-d).attr("y2",0),t.select("line").attr("x2",-c),t.select("text").attr("x",-(Math.max(c,0)+f)),v.select("line").attr("x2",-c).attr("y2",0),v.select("text").attr("x",-(Math.max(c,0)+f)).attr("y",0).attr("dy",".32em").attr("text-anchor","end"),A.attr("d","M"+ -e+","+x[0]+"H0V"+x[1]+"H"+ -e);break;case"right":w=dA,p.attr("x2",d),r.attr("x2",d).attr("y2",0),t.select("line").attr("x2",c),t.select("text").attr("x",Math.max(c,0)+f),v.select("line").attr("x2",c).attr("y2",0),v.select("text").attr("x",Math.max(c,0)+f).attr("y",0).attr("dy",".32em").attr("text-anchor","start"),A.attr("d","M"+e+","+x[0]+"H0V"+x[1]+"H"+e)}if(a.ticks)t.call(w,C),v.call(w,B),u.call(w,B),p.call(w,C),r.call(w,B),q.call(w,B);else{var D=B.rangeBand()/2,E=function(a){return B(a)+D};t.call(w,E),v.call(w,E)}})}var a=d3.scale.linear(),b="bottom",c=6,d=6,e=6,f=3,g=[10],h=null,i,j=0;return k.scale=function(b){return arguments.length?(a=b,k):a},k.orient=function(a){return arguments.length?(b=a,k):b},k.ticks=function(){return arguments.length?(g=arguments,k):g},k.tickValues=function(a){return arguments.length?(h=a,k):h},k.tickFormat=function(a){return arguments.length?(i=a,k):i},k.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,k},k.tickPadding=function(a){return arguments.length?(f=+a,k):f},k.tickSubdivide=function(a){return arguments.length?(j=+a,k):j},k},d3.svg.brush=function(){function g(a){a.each(function(){var a=d3.select(this),e=a.selectAll(".background").data([0]),f=a.selectAll(".extent").data([0]),l=a.selectAll(".resize").data(d,String),m;a.style("pointer-events","all").on("mousedown.brush",k).on("touchstart.brush",k),e.enter().append("rect").attr("class","background").style("visibility","hidden").style("cursor","crosshair"),f.enter().append("rect").attr("class","extent").style("cursor","move"),l.enter().append("g").attr("class",function(a){return"resize "+a}).style("cursor",function(a){return dC[a]}).append("rect").attr("x",function(a){return/[ew]$/.test(a)?-3:null}).attr("y",function(a){return/^[ns]/.test(a)?-3:null}).attr("width",6).attr("height",6).style("visibility","hidden"),l.style("display",g.empty()?"none":null),l.exit().remove(),b&&(m=cd(b),e.attr("x",m[0]).attr("width",m[1]-m[0]),i(a)),c&&(m=cd(c),e.attr("y",m[0]).attr("height",m[1]-m[0]),j(a)),h(a)})}function h(a){a.selectAll(".resize").attr("transform",function(a){return"translate("+e[+/e$/.test(a)][0]+","+e[+/^s/.test(a)][1]+")"})}function i(a){a.select(".extent").attr("x",e[0][0]),a.selectAll(".extent,.n>rect,.s>rect").attr("width",e[1][0]-e[0][0])}function j(a){a.select(".extent").attr("y",e[0][1]),a.selectAll(".extent,.e>rect,.w>rect").attr("height",e[1][1]-e[0][1])}function k(){function x(){var a=d3.event.changedTouches;return a?d3.touches(d,a)[0]:d3.mouse(d)}function y(){d3.event.keyCode==32&&(q||(r=null,s[0]-=e[1][0],s[1]-=e[1][1],q=2),W())}function z(){d3.event.keyCode==32&&q==2&&(s[0]+=e[1][0],s[1]+=e[1][1],q=0,W())}function A(){var a=x(),d=!1;t&&(a[0]+=t[0],a[1]+=t[1]),q||(d3.event.altKey?(r||(r=[(e[0][0]+e[1][0])/2,(e[0][1]+e[1][1])/2]),s[0]=e[+(a[0]0?e=c:e=0:c>0&&(b.start({type:"start",alpha:e=c}),d3.timer(a.tick)),a):e},a.start=function(){function s(a,c){var d=t(b),e=-1,f=d.length,g;while(++ee&&(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=ee,d=ec;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 ed(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=ek?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&&(eI(eJ(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&&!eB(f)&&(f._tree.thread=g,f._tree.mod+=k-j),e&&!eA(h)&&(h._tree.thread=e,h._tree.mod+=i-l,d=a)}return d}var f=a.call(this,d,e),g=f[0];eG(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=eC(g,eE),l=eC(g,eD),m=eC(g,eF),n=k.x-b(k,l)/2,o=l.x+b(l,k)/2,p=m.depth||1;return eG(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=ez,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},ef(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=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?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 g(g){var h=g[0]*eO-c,i=g[1]*eO-d;if(e){var j=f+e-i,k=h*Math.cos(i)/j;h=j*Math.sin(k),i=j*Math.cos(k)-f}else h*=Math.cos(i),i*=-1;return[a*h+b[0],a*i+b[1]]}var a=200,b=[480,250],c,d,e,f;return g.invert=function(d){var g=(d[0]-b[0])/a,h=(d[1]-b[1])/a;if(e){var i=f+h,j=Math.sqrt(g*g+i*i);h=f+e-j,g=c+j*Math.atan2(g,i)/Math.cos(h)}else h*=-1,g/=Math.cos(h);return[g/eO,h/eO]},g.parallel=function(a){return arguments.length?(f=1/Math.tan(e=a*eO),g):e/eO},g.origin=function(a){return arguments.length?(c=a[0]*eO,d=a[1]*eO,g):[c/eO,d/eO]},g.scale=function(b){return arguments.length?(a=+b,g):a},g.translate=function(a){return arguments.length?(b=[+a[0],+a[1]],g):b},g.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 c(c){var d=c[0]/360,e=-(Math.log(Math.tan(Math.PI/4+c[1]*eO/2))/eO)/360;return[a*d+b[0],a*Math.max(-0.5,Math.min(.5,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,2*Math.atan(Math.exp(-360*e*eO))/eO-90]},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.path=function(){function d(c,d){return typeof a=="function"&&(b=eQ(a.apply(this,arguments))),f(c)||null}function e(a){return c(a).join(",")}function h(a){var b=k(a[0]),c=0,d=a.length;while(++c0){b.push("M");while(++h0){b.push("M");while(++kd&&(d=a),fe&&(e=f)}),[[b,c],[d,e]]};var eS={Feature:eT,FeatureCollection:eU,GeometryCollection:eV,LineString:eW,MultiLineString:eX,MultiPoint:eW,MultiPolygon:eY,Point:eZ,Polygon:e$};d3.geo.circle=function(){function e(){}function f(a){return d.distance(a)=k*k+l*l?d[f].index=-1:(d[m].index=-1,o=d[f].angle,m=f,n=g)):(o=d[f].angle,m=f,n=g);e.push(h);for(f=0,g=0;f<2;++g)d[g].index!==-1&&(e.push(d[g].index),f++);p=e.length;for(;g=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 fi={l:"r",r:"l"};d3.geom.delaunay=function(a){var b=a.map(function(){return[]}),c=[];return fj(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,j=b.y>=h,l=(j<<1)+i;a.leaf=!1,a=a.nodes[l]||(a.nodes[l]=fk()),i?c=g:e=g,j?d=h:f=h,k(a,b,c,d,e,f)}var f,g=-1,h=a.length;h&&isNaN(a[0].x)&&(a=a.map(fm));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 i=d-b,j=e-c;i>j?e=c+i:d=b+j}var m=fk();return m.add=function(a){k(m,a,b,c,d,e)},m.visit=function(a){fl(a,m,b,c,d,e)},a.forEach(m.add),m},d3.time={};var fn=Date;fo.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()},getTime:function(){return this._.getTime()},getTimezoneOffset:function(){return 0},valueOf:function(){return this._.valueOf()},setDate:function(){fp.setUTCDate.apply(this._,arguments)},setDay:function(){fp.setUTCDay.apply(this._,arguments)},setFullYear:function(){fp.setUTCFullYear.apply(this._,arguments)},setHours:function(){fp.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){fp.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){fp.setUTCMinutes.apply(this._,arguments)},setMonth:function(){fp.setUTCMonth.apply(this._,arguments)},setSeconds:function(){fp.setUTCSeconds.apply(this._,arguments)},setTime:function(){fp.setTime.apply(this._,arguments)}};var fp=Date.prototype;d3.time.format=function(a){function c(c){var d=[],e=-1,f=0,g,h;while(++e=12?"PM":"AM"},S:function(a){return fr(a.getSeconds())},U:function(a){return fr(d3.time.sundayOfYear(a))},w:function(a){return a.getDay()},W:function(a){return fr(d3.time.mondayOfYear(a))},x:d3.time.format("%m/%d/%y"),X:d3.time.format("%H:%M:%S"),y:function(a){return fr(a.getFullYear()%100)},Y:function(a){return ft(a.getFullYear()%1e4)},Z:fW,"%":function(a){return"%"}},fw={a:fx,A:fy,b:fB,B:fD,c:fH,d:fO,e:fO,H:fP,I:fP,L:fS,m:fN,M:fQ,p:fU,S:fR,x:fI,X:fJ,y:fL,Y:fK},fz=/^(?:sun|mon|tue|wed|thu|fri|sat)/i,fA=/^(?:Sunday|Monday|Tuesday|Wednesday|Thursday|Friday|Saturday)/i;d3_time_weekdays=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];var fC=d3.map({jan:0,feb:1,mar:2,apr:3,may:4,jun:5,jul:6,aug:7,sep:8,oct:9,nov:10,dec:11}),fE=/^(?:January|February|March|April|May|June|July|August|September|October|November|December)/ig,fF=d3.map({january:0,february:1,march:2,april:3,may:4,june:5,july:6,august:7,september:8,october:9,november:10,december:11}),fG=["January","February","March","April","May","June","July","August","September","October","November","December"],fT=/\s*\d+/,fV=d3.map({am:0,pm:1});d3.time.format.utc=function(a){function c(a){try{fn=fo;var c=new fn;return c._=a,b(c)}finally{fn=Date}}var b=d3.time.format(a);return c.parse=function(a){try{fn=fo;var c=b.parse(a);return c&&c._}finally{fn=Date}},c.toString=b.toString,c};var fX=d3.time.format.utc("%Y-%m-%dT%H:%M:%S.%LZ");d3.time.format.iso=Date.prototype.toISOString?fY:fX,fY.parse=function(a){return new Date(a)},fY.toString=fX.toString,d3.time.second=fZ(function(a){return new fn(Math.floor(a/1e3)*1e3)},function(a,b){a.setTime(a.getTime()+Math.floor(b)*1e3)},function(a){return a.getSeconds()}),d3.time.seconds=d3.time.second.range,d3.time.seconds.utc=d3.time.second.utc.range,d3.time.minute=fZ(function(a){return new fn(Math.floor(a/6e4)*6e4)},function(a,b){a.setTime(a.getTime()+Math.floor(b)*6e4)},function(a){return a.getMinutes()}),d3.time.minutes=d3.time.minute.range,d3.time.minutes.utc=d3.time.minute.utc.range,d3.time.hour=fZ(function(a){var b=a.getTimezoneOffset()/60;return new fn((Math.floor(a/36e5-b)+b)*36e5)},function(a,b){a.setTime(a.getTime()+Math.floor(b)*36e5)},function(a){return a.getHours()}),d3.time.hours=d3.time.hour.range,d3.time.hours.utc=d3.time.hour.utc.range,d3.time.day=fZ(function(a){return new fn(a.getFullYear(),a.getMonth(),a.getDate())},function(a,b){a.setDate(a.getDate()+b)},function(a){return a.getDate()-1}),d3.time.days=d3.time.day.range,d3.time.days.utc=d3.time.day.utc.range,d3.time.dayOfYear=function(a){var b=d3.time.year(a);return Math.floor((a-b)/864e5-(a.getTimezoneOffset()-b.getTimezoneOffset())/1440)},d3_time_weekdays.forEach(function(a,b){a=a.toLowerCase(),b=7-b;var c=d3.time[a]=fZ(function(a){return(a=d3.time.day(a)).setDate(a.getDate()-(a.getDay()+b)%7),a},function(a,b){a.setDate(a.getDate()+Math.floor(b)*7)},function(a){var c=d3.time.year(a).getDay();return Math.floor((d3.time.dayOfYear(a)+(c+b)%7)/7)-(c!==b)});d3.time[a+"s"]=c.range,d3.time[a+"s"].utc=c.utc.range,d3.time[a+"OfYear"]=function(a){var c=d3.time.year(a).getDay();return Math.floor((d3.time.dayOfYear(a)+(c+b)%7)/7)}}),d3.time.week=d3.time.sunday,d3.time.weeks=d3.time.sunday.range,d3.time.weeks.utc=d3.time.sunday.utc.range,d3.time.weekOfYear=d3.time.sundayOfYear,d3.time.month=fZ(function(a){return new fn(a.getFullYear(),a.getMonth(),1)},function(a,b){a.setMonth(a.getMonth()+b)},function(a){return a.getMonth()}),d3.time.months=d3.time.month.range,d3.time.months.utc=d3.time.month.utc.range,d3.time.year=fZ(function(a){return new fn(a.getFullYear(),0,1)},function(a,b){a.setFullYear(a.getFullYear()+b)},function(a){return a.getFullYear()}),d3.time.years=d3.time.year.range,d3.time.years.utc=d3.time.year.utc.range;var gf=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6],gg=[[d3.time.second,1],[d3.time.second,5],[d3.time.second,15],[d3.time.second,30],[d3.time.minute,1],[d3.time.minute,5],[d3.time.minute,15],[d3.time.minute,30],[d3.time.hour,1],[d3.time.hour,3],[d3.time.hour,6],[d3.time.hour,12],[d3.time.day,1],[d3.time.day,2],[d3.time.week,1],[d3.time.month,1],[d3.time.month,3],[d3.time.year,1]],gh=[[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()}]],gi=d3.scale.linear(),gj=gc(gh);gg.year=function(a,b){return gi.domain(a.map(ge)).ticks(b).map(gd)},d3.time.scale=function(){return f_(d3.scale.linear(),gg,gj)};var gk=gg.map(function(a){return[a[0].utc,a[1]]}),gl=[[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()}]],gm=gc(gl);gk.year=function(a,b){return gi.domain(a.map(go)).ticks(b).map(gn)},d3.time.scale.utc=function(){return f_(d3.scale.linear(),gk,gm)}})(); \ No newline at end of file diff --git a/static/vendor/d3-2.8.1/examples/albers/albers.html b/static/vendor/d3-2.8.1/examples/albers/albers.html new file mode 100755 index 0000000..ef9891e --- /dev/null +++ b/static/vendor/d3-2.8.1/examples/albers/albers.html @@ -0,0 +1,167 @@ + + + + + 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.8.1/examples/area/area-radial.html b/static/vendor/d3-2.8.1/examples/area/area-radial.html new file mode 100755 index 0000000..989da1b --- /dev/null +++ b/static/vendor/d3-2.8.1/examples/area/area-radial.html @@ -0,0 +1,48 @@ + + + + Area Chart (Radial) + + + + + + + diff --git a/static/vendor/d3-2.8.1/examples/area/area.html b/static/vendor/d3-2.8.1/examples/area/area.html new file mode 100755 index 0000000..1c57ee4 --- /dev/null +++ b/static/vendor/d3-2.8.1/examples/area/area.html @@ -0,0 +1,113 @@ + + + + Area Chart + + + + + + + diff --git a/static/vendor/d3-2.8.1/examples/axis/axis-alternating.html b/static/vendor/d3-2.8.1/examples/axis/axis-alternating.html new file mode 100755 index 0000000..1b054c9 --- /dev/null +++ b/static/vendor/d3-2.8.1/examples/axis/axis-alternating.html @@ -0,0 +1,50 @@ + + + + + + + + + + diff --git a/static/vendor/d3-2.8.1/examples/axis/axis-explicit-ticks.html b/static/vendor/d3-2.8.1/examples/axis/axis-explicit-ticks.html new file mode 100755 index 0000000..bb97a40 --- /dev/null +++ b/static/vendor/d3-2.8.1/examples/axis/axis-explicit-ticks.html @@ -0,0 +1,46 @@ + + + + + + + + + + diff --git a/static/vendor/d3-2.8.1/examples/axis/axis-ggplot2.html b/static/vendor/d3-2.8.1/examples/axis/axis-ggplot2.html new file mode 100755 index 0000000..da46aba --- /dev/null +++ b/static/vendor/d3-2.8.1/examples/axis/axis-ggplot2.html @@ -0,0 +1,68 @@ + + + + + + + + + + diff --git a/static/vendor/d3-2.8.1/examples/axis/axis-multiples.html b/static/vendor/d3-2.8.1/examples/axis/axis-multiples.html new file mode 100755 index 0000000..03a54e2 --- /dev/null +++ b/static/vendor/d3-2.8.1/examples/axis/axis-multiples.html @@ -0,0 +1,115 @@ + + + + + + + + + + diff --git a/static/vendor/d3-2.8.1/examples/axis/axis-orientations.html b/static/vendor/d3-2.8.1/examples/axis/axis-orientations.html new file mode 100755 index 0000000..5abad27 --- /dev/null +++ b/static/vendor/d3-2.8.1/examples/axis/axis-orientations.html @@ -0,0 +1,62 @@ + + + + + + + + + + diff --git a/static/vendor/d3-2.8.1/examples/axis/axis-transition.html b/static/vendor/d3-2.8.1/examples/axis/axis-transition.html new file mode 100755 index 0000000..bb06a08 --- /dev/null +++ b/static/vendor/d3-2.8.1/examples/axis/axis-transition.html @@ -0,0 +1,151 @@ + + + + + + + + + + diff --git a/static/vendor/d3-2.8.1/examples/azimuthal/azimuthal.css b/static/vendor/d3-2.8.1/examples/azimuthal/azimuthal.css new file mode 100755 index 0000000..f3da8df --- /dev/null +++ b/static/vendor/d3-2.8.1/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.8.1/examples/azimuthal/azimuthal.html b/static/vendor/d3-2.8.1/examples/azimuthal/azimuthal.html new file mode 100755 index 0000000..0e46b8d --- /dev/null +++ b/static/vendor/d3-2.8.1/examples/azimuthal/azimuthal.html @@ -0,0 +1,98 @@ + + + + + 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.8.1/examples/azimuthal/azimuthal.js b/static/vendor/d3-2.8.1/examples/azimuthal/azimuthal.js new file mode 100755 index 0000000..36969f9 --- /dev/null +++ b/static/vendor/d3-2.8.1/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.8.1/examples/bar/bar-hierarchy.html b/static/vendor/d3-2.8.1/examples/bar/bar-hierarchy.html new file mode 100755 index 0000000..4eacf0b --- /dev/null +++ b/static/vendor/d3-2.8.1/examples/bar/bar-hierarchy.html @@ -0,0 +1,222 @@ + + + + Hierarchical Bar Chart + + + + + + + diff --git a/static/vendor/d3-2.8.1/examples/bar/bar.html b/static/vendor/d3-2.8.1/examples/bar/bar.html new file mode 100755 index 0000000..e61bea6 --- /dev/null +++ b/static/vendor/d3-2.8.1/examples/bar/bar.html @@ -0,0 +1,100 @@ + + + + Bar Chart + + + + + + + diff --git a/static/vendor/d3-2.8.1/examples/bar/sample-data.csv b/static/vendor/d3-2.8.1/examples/bar/sample-data.csv new file mode 100755 index 0000000..bff541f --- /dev/null +++ b/static/vendor/d3-2.8.1/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.8.1/examples/bonne/bonne.html b/static/vendor/d3-2.8.1/examples/bonne/bonne.html new file mode 100755 index 0000000..1b12fa2 --- /dev/null +++ b/static/vendor/d3-2.8.1/examples/bonne/bonne.html @@ -0,0 +1,158 @@ + + + + + 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.8.1/examples/box/box.css b/static/vendor/d3-2.8.1/examples/box/box.css new file mode 100755 index 0000000..0dd6f33 --- /dev/null +++ b/static/vendor/d3-2.8.1/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.8.1/examples/box/box.html b/static/vendor/d3-2.8.1/examples/box/box.html new file mode 100755 index 0000000..94e8a9b --- /dev/null +++ b/static/vendor/d3-2.8.1/examples/box/box.html @@ -0,0 +1,17 @@ + + + + Box Plot Charts + + + + + +
+

+

+ + + diff --git a/static/vendor/d3-2.8.1/examples/box/box.js b/static/vendor/d3-2.8.1/examples/box/box.js new file mode 100755 index 0000000..122397f --- /dev/null +++ b/static/vendor/d3-2.8.1/examples/box/box.js @@ -0,0 +1,366 @@ +var w = 120, + h = 500, + m = [10, 50, 20, 50], // top right bottom left + min = Infinity, + max = -Infinity; + +var chart = boxChart() + .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.datum(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]; + }; +} + +// Inspired by http://informationandvisualization.de/blog/box-plot +function boxChart() { + var width = 1, + height = 1, + duration = 0, + domain = null, + value = Number, + whiskers = boxWhiskers, + quartiles = 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 boxWhiskers(d) { + return [0, d.length - 1]; +} + +function boxQuartiles(d) { + return [ + d3.quantile(d, .25), + d3.quantile(d, .5), + d3.quantile(d, .75) + ]; +} diff --git a/static/vendor/d3-2.8.1/examples/brush/brush-ordinal.html b/static/vendor/d3-2.8.1/examples/brush/brush-ordinal.html new file mode 100755 index 0000000..ddac092 --- /dev/null +++ b/static/vendor/d3-2.8.1/examples/brush/brush-ordinal.html @@ -0,0 +1,92 @@ + + + + + Brush + + + + + + + diff --git a/static/vendor/d3-2.8.1/examples/brush/brush-x-resizer.html b/static/vendor/d3-2.8.1/examples/brush/brush-x-resizer.html new file mode 100755 index 0000000..492c7ca --- /dev/null +++ b/static/vendor/d3-2.8.1/examples/brush/brush-x-resizer.html @@ -0,0 +1,108 @@ + + + + + Brush + + + + + + + diff --git a/static/vendor/d3-2.8.1/examples/brush/brush-x.html b/static/vendor/d3-2.8.1/examples/brush/brush-x.html new file mode 100755 index 0000000..0dcec2a --- /dev/null +++ b/static/vendor/d3-2.8.1/examples/brush/brush-x.html @@ -0,0 +1,92 @@ + + + + + Brush + + + + + + + diff --git a/static/vendor/d3-2.8.1/examples/brush/brush-y.html b/static/vendor/d3-2.8.1/examples/brush/brush-y.html new file mode 100755 index 0000000..ba8de49 --- /dev/null +++ b/static/vendor/d3-2.8.1/examples/brush/brush-y.html @@ -0,0 +1,91 @@ + + + + + Brush + + + + + + + diff --git a/static/vendor/d3-2.8.1/examples/brush/brush.html b/static/vendor/d3-2.8.1/examples/brush/brush.html new file mode 100755 index 0000000..e55c8b6 --- /dev/null +++ b/static/vendor/d3-2.8.1/examples/brush/brush.html @@ -0,0 +1,98 @@ + + + + + Brush + + + + + + + diff --git a/static/vendor/d3-2.8.1/examples/bubble/bubble.css b/static/vendor/d3-2.8.1/examples/bubble/bubble.css new file mode 100755 index 0000000..d667292 --- /dev/null +++ b/static/vendor/d3-2.8.1/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.8.1/examples/bubble/bubble.html b/static/vendor/d3-2.8.1/examples/bubble/bubble.html new file mode 100755 index 0000000..c5fa394 --- /dev/null +++ b/static/vendor/d3-2.8.1/examples/bubble/bubble.html @@ -0,0 +1,13 @@ + + + + + Bubble Chart + + + + +
+ + + diff --git a/static/vendor/d3-2.8.1/examples/bubble/bubble.js b/static/vendor/d3-2.8.1/examples/bubble/bubble.js new file mode 100755 index 0000000..5dbff4c --- /dev/null +++ b/static/vendor/d3-2.8.1/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.8.1/examples/bullet/bullet.css b/static/vendor/d3-2.8.1/examples/bullet/bullet.css new file mode 100755 index 0000000..50002b2 --- /dev/null +++ b/static/vendor/d3-2.8.1/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.8.1/examples/bullet/bullet.html b/static/vendor/d3-2.8.1/examples/bullet/bullet.html new file mode 100755 index 0000000..f0ea064 --- /dev/null +++ b/static/vendor/d3-2.8.1/examples/bullet/bullet.html @@ -0,0 +1,17 @@ + + + + Bullet Charts + + + + + +
+

+

+ + + diff --git a/static/vendor/d3-2.8.1/examples/bullet/bullet.js b/static/vendor/d3-2.8.1/examples/bullet/bullet.js new file mode 100755 index 0000000..54526ea --- /dev/null +++ b/static/vendor/d3-2.8.1/examples/bullet/bullet.js @@ -0,0 +1,291 @@ +var w = 960, + h = 50, + m = [5, 40, 20, 120]; // top right bottom left + +var chart = bulletChart() + .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.datum(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)); + }; +} + +// 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/ +function bulletChart() { + var orient = "left", // TODO top & bottom + reverse = false, + duration = 0, + ranges = bulletRanges, + markers = bulletMarkers, + measures = 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 = bulletWidth(x0), + w1 = 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", 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", bulletTranslate(x1)) + .style("opacity", 1); + + // Transition the updating ticks to the new scale, x1. + var tickUpdate = tick.transition() + .duration(duration) + .attr("transform", 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", 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 bulletRanges(d) { + return d.ranges; +} + +function bulletMarkers(d) { + return d.markers; +} + +function bulletMeasures(d) { + return d.measures; +} + +function bulletTranslate(x) { + return function(d) { + return "translate(" + x(d) + ",0)"; + }; +} + +function bulletWidth(x) { + var x0 = x(0); + return function(d) { + return Math.abs(x(d) - x0); + }; +} diff --git a/static/vendor/d3-2.8.1/examples/bullet/bullets.json b/static/vendor/d3-2.8.1/examples/bullet/bullets.json new file mode 100755 index 0000000..97cb1c1 --- /dev/null +++ b/static/vendor/d3-2.8.1/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.8.1/examples/bundle/bundle-radial.css b/static/vendor/d3-2.8.1/examples/bundle/bundle-radial.css new file mode 100755 index 0000000..a14751c --- /dev/null +++ b/static/vendor/d3-2.8.1/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.8.1/examples/bundle/bundle-radial.html b/static/vendor/d3-2.8.1/examples/bundle/bundle-radial.html new file mode 100755 index 0000000..a2927c1 --- /dev/null +++ b/static/vendor/d3-2.8.1/examples/bundle/bundle-radial.html @@ -0,0 +1,14 @@ + + + + + Hierarchical Edge Bundling (Radial Tree) + + + + + +
+ + + diff --git a/static/vendor/d3-2.8.1/examples/bundle/bundle-radial.js b/static/vendor/d3-2.8.1/examples/bundle/bundle-radial.js new file mode 100755 index 0000000..9021f12 --- /dev/null +++ b/static/vendor/d3-2.8.1/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.8.1/examples/bundle/bundle-treemap.css b/static/vendor/d3-2.8.1/examples/bundle/bundle-treemap.css new file mode 100755 index 0000000..62d9b41 --- /dev/null +++ b/static/vendor/d3-2.8.1/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.8.1/examples/bundle/bundle-treemap.html b/static/vendor/d3-2.8.1/examples/bundle/bundle-treemap.html new file mode 100755 index 0000000..929fe03 --- /dev/null +++ b/static/vendor/d3-2.8.1/examples/bundle/bundle-treemap.html @@ -0,0 +1,15 @@ + + + + + Hierarchical Edge Bundling (Treemap) + + + + + + +
+ + + diff --git a/static/vendor/d3-2.8.1/examples/bundle/bundle-treemap.js b/static/vendor/d3-2.8.1/examples/bundle/bundle-treemap.js new file mode 100755 index 0000000..969f293 --- /dev/null +++ b/static/vendor/d3-2.8.1/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.8.1/examples/bundle/packages.js b/static/vendor/d3-2.8.1/examples/bundle/packages.js new file mode 100755 index 0000000..4bf5c8a --- /dev/null +++ b/static/vendor/d3-2.8.1/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.8.1/examples/button.css b/static/vendor/d3-2.8.1/examples/button.css new file mode 100755 index 0000000..b7c7ada --- /dev/null +++ b/static/vendor/d3-2.8.1/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.8.1/examples/calendar/calendar.css b/static/vendor/d3-2.8.1/examples/calendar/calendar.css new file mode 100755 index 0000000..13557dc --- /dev/null +++ b/static/vendor/d3-2.8.1/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.8.1/examples/calendar/dji-area.html b/static/vendor/d3-2.8.1/examples/calendar/dji-area.html new file mode 100755 index 0000000..336f22c --- /dev/null +++ b/static/vendor/d3-2.8.1/examples/calendar/dji-area.html @@ -0,0 +1,118 @@ + + + + DJI + + + + + + + diff --git a/static/vendor/d3-2.8.1/examples/calendar/dji.csv b/static/vendor/d3-2.8.1/examples/calendar/dji.csv new file mode 100755 index 0000000..b441a78 --- /dev/null +++ b/static/vendor/d3-2.8.1/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